diff --git a/PWGCF/Femto/Core/collisionBuilder.h b/PWGCF/Femto/Core/collisionBuilder.h index e65714f754a..ab8d5e311d6 100644 --- a/PWGCF/Femto/Core/collisionBuilder.h +++ b/PWGCF/Femto/Core/collisionBuilder.h @@ -34,10 +34,6 @@ #include #include -#include - -#include - #include #include #include @@ -86,7 +82,7 @@ struct ConfCollisionBits : o2::framework::ConfigurableGroup { o2::framework::Configurable> sphericityMax{"sphericityMax", {}, "Maximum sphericity"}; o2::framework::Configurable> triggers{"triggers", {}, "List of all triggers to be used"}; o2::framework::Configurable qvecDetector{"qvecDetector", 0, "Detector used to estimate the Q-vector: 0 -> FT0C, 1 -> FT0A"}; - o2::framework::Configurable qvecHarmonic{"qvecHarmonic", 2, "Harmonic n of the Q-vector and event plane angle Psi_n: 1 -> direct, 2 -> elliptic, 3 -> triangular"}; + o2::framework::Configurable qvecHarmonic{"qvecHarmonic", 2, "Harmonic n of the Q-vector and event plane angle Psi_n: 2 -> elliptic, 3 -> triangular"}; }; struct ConfCcdb : o2::framework::ConfigurableGroup { @@ -249,7 +245,13 @@ class CollisionSelection : public baseselection::BaseSelection(config.qvecDetector.value); + if (mQvecDetector >= modes::QvecDetector::kQvecDetectorLast) { + LOG(fatal) << "Qvector Detector is not supported"; + } mQvecHarmonic = static_cast(config.qvecHarmonic.value); + if (mQvecHarmonic < modes::QvecHarmonic::kN2 || mQvecHarmonic >= modes::QvecHarmonic::kQvecHarmonicLast) { + LOG(fatal) << "Qvector Harmonic is not supported"; + } this->addSelection(kSel8, collisionSelectionNames.at(kSel8), config.sel8.value); this->addSelection(kNoSameBunchPileUp, collisionSelectionNames.at(kNoSameBunchPileUp), config.noSameBunchPileup.value); @@ -366,6 +368,12 @@ class CollisionSelection : public baseselection::BaseSelection void setEventPlane(T const& col) { - float harmonic = static_cast(mQvecHarmonic); + auto harmonic = static_cast(mQvecHarmonic); + int index = static_cast(mQvecHarmonic) - 2; // get index in the qvector vector switch (mQvecDetector) { case modes::QvecDetector::kFT0C: - mEventPlane = RecoDecay::constrainAngle((std::atan2(col.qvecFT0CImVec()[0], col.qvecFT0CReVec()[0])) / harmonic, 0, harmonic); // constrain between 0 and 2pi/harmonic + mEventPlane = RecoDecay::constrainAngle((std::atan2(col.qvecFT0CImVec()[index], col.qvecFT0CReVec()[index])) / harmonic, 0, harmonic); // constrain between 0 and 2pi/harmonic break; case modes::QvecDetector::kFT0A: - mEventPlane = RecoDecay::constrainAngle((std::atan2(col.qvecFT0AImVec()[0], col.qvecFT0AReVec()[0])) / harmonic, 0, harmonic); // constrain between 0 and 2pi/harmonic + mEventPlane = RecoDecay::constrainAngle((std::atan2(col.qvecFT0AImVec()[index], col.qvecFT0AReVec()[index])) / harmonic, 0, harmonic); // constrain between 0 and 2pi/harmonic + break; + case modes::QvecDetector::kQvecDetectorLast: + LOG(fatal) << "Invalid Q-vector detector"; + break; + default: + LOG(fatal) << "Invalid Q-vector detector"; break; } } diff --git a/PWGCF/Femto/Core/modes.h b/PWGCF/Femto/Core/modes.h index 8398aa56488..5f41ff42788 100644 --- a/PWGCF/Femto/Core/modes.h +++ b/PWGCF/Femto/Core/modes.h @@ -180,13 +180,14 @@ enum class CharmHadron : o2::analysis::femto::datatypes::CharmHadronType { enum class QvecDetector : o2::analysis::femto::datatypes::QvecDetectorType { kFT0C = 0, - kFT0A = 1 + kFT0A = 1, + kQvecDetectorLast = 2 }; enum class QvecHarmonic : o2::analysis::femto::datatypes::QvecHarmonicType { - kN1 = 1, kN2 = 2, - kN3 = 3 + kN3 = 3, + kQvecHarmonicLast = 4 }; }; // namespace o2::analysis::femto::modes diff --git a/PWGCF/Femto/Core/v0HistManager.h b/PWGCF/Femto/Core/v0HistManager.h index 598d2766d6f..4741255622f 100644 --- a/PWGCF/Femto/Core/v0HistManager.h +++ b/PWGCF/Femto/Core/v0HistManager.h @@ -165,7 +165,7 @@ constexpr std::array, kV0HistLast> HistTable = { {kCosPa, o2::framework::HistType::kTH1F, "hCosPa", "Cosine of pointing angle; cos(#alpha); Entries"}, {kDecayDauDca, o2::framework::HistType::kTH1F, "hDauDca", "Daughter DCA at decay vertex ; DCA_{Decay vertex} (cm); Entries"}, {kStrangeTofPosDau, o2::framework::HistType::kTH1F, "hStrangeTofPosDau", "Strange TOF of positive Daughter ; n#sigma_{TOF, strange}; Entries"}, - {kStrangeTofNegDau, o2::framework::HistType::kTH1F, "hStrangeTofNegDau", "Strange TOF of negative Daughter ; n#sigma+{TOF, strange}; Entries"}, + {kStrangeTofNegDau, o2::framework::HistType::kTH1F, "hStrangeTofNegDau", "Strange TOF of negative Daughter ; n#sigma_{TOF, strange}; Entries"}, {kDecayVtxX, o2::framework::HistType::kTH1F, "hDecayVtxX", "X coordinate of decay vertex ; DV_{X} (cm); Entries"}, {kDecayVtxY, o2::framework::HistType::kTH1F, "hDecayVtxY", "Y coordinate of decay vertex ; DV_{Y} (cm); Entries"}, {kDecayVtxZ, o2::framework::HistType::kTH1F, "hDecayVtxZ", "Z coordinate of decay vertex ; DV_{Z} (cm); Entries"}, diff --git a/PWGCF/Femto/TableProducer/femtoProducer.cxx b/PWGCF/Femto/TableProducer/femtoProducer.cxx index e28b6ea656a..f318720d782 100644 --- a/PWGCF/Femto/TableProducer/femtoProducer.cxx +++ b/PWGCF/Femto/TableProducer/femtoProducer.cxx @@ -34,6 +34,7 @@ #include "Common/DataModel/PIDResponseITS.h" #include "Common/DataModel/PIDResponseTOF.h" #include "Common/DataModel/PIDResponseTPC.h" +#include "Common/DataModel/Qvectors.h" #include "Common/DataModel/TrackSelectionTables.h" #include @@ -77,7 +78,7 @@ using Run3FullPidTracks = o2::aod::pidTOFbeta, o2::aod::pidTOFmass>; using Run3McRecoTracks = soa::Join; -using Run3Vzeros = o2::soa::Join; +using Run3Vzeros = o2::soa::Join; using Run3RecoVzeros = o2::soa::Join; using Run3D0s = soa::Join; @@ -204,6 +205,7 @@ struct FemtoProducer { // ---- guard: enabled tables vs. enabled process function ------------------ if ((xiBuilder.fillAnyTable() || omegaBuilder.fillAnyTable()) && (!doprocessTracksV0sCascadesRun3pp && !doprocessTracksV0sCascadesRun3PbPb && + !doprocessTracksV0sCascadesRun3PbPbWithEventShape && !doprocessTracksV0sCascadesKinksRun3pp && !doprocessTracksV0sCascadesRun3ppMc && !doprocessTracksV0sCascadesRun3PbPbMc)) { LOG(fatal) << "At least one cascade table is enabled, but wrong process function is enabled. Breaking..."; @@ -211,6 +213,7 @@ struct FemtoProducer { if ((lambdaBuilder.fillAnyTable() || antilambdaBuilder.fillAnyTable() || k0shortBuilder.fillAnyTable()) && (!doprocessTracksV0sCascadesRun3pp && !doprocessTracksV0sCascadesRun3PbPb && !doprocessTracksV0sRun3pp && !doprocessTracksV0sCascadesKinksRun3pp && + !doprocessTracksV0sCascadesRun3PbPbWithEventShape && !doprocessTracksV0sRun3ppMc && !doprocessTracksV0sRun3PbPb && !doprocessTracksV0sRun3PbPbMc && !doprocessTracksV0sCascadesRun3ppMc && !doprocessTracksV0sCascadesRun3PbPbMc && !doprocessTracksV0sKinksRun3ppMc)) { @@ -285,6 +288,7 @@ struct FemtoProducer { static_cast(doprocessTracksV0sRun3PbPb) + static_cast(doprocessTracksV0sCascadesRun3pp) + static_cast(doprocessTracksV0sCascadesRun3PbPb) + + static_cast(doprocessTracksV0sCascadesRun3PbPbWithEventShape) + static_cast(doprocessTracksKinksRun3pp) + static_cast(doprocessTracksV0sCascadesKinksRun3pp) + static_cast(doprocessTracksD0sRun3pp) + @@ -531,6 +535,23 @@ struct FemtoProducer { } PROCESS_SWITCH(FemtoProducer, processTracksV0sCascadesRun3PbPb, "Provide tracks, v0s and cascades in PbPb collisions", false); + void processTracksV0sCascadesRun3PbPbWithEventShape(rawinputs::Run3PbPbCollisionsWithEventShape::iterator const& col, + o2::aod::BCsWithTimestamps const& bcs, + rawinputs::Run3FullPidTracks const& tracks, + rawinputs::Run3Vzeros const& v0s, + rawinputs::Run3Cascades const& cascades) + { + if (!processCollisions(col, bcs, tracks)) { + return; + } + auto tracksWithItsPid = o2::soa::Attach(tracks); + processTracks(col, tracksWithItsPid); + processV0s(col, tracks, v0s); + processCascades(col, tracks, cascades); + } + PROCESS_SWITCH(FemtoProducer, processTracksV0sCascadesRun3PbPbWithEventShape, "Provide tracks, v0s and cascades in PbPb collisions with event shape information", false); + void processTracksKinksRun3pp(rawinputs::Run3PpCollisions::iterator const& col, o2::aod::BCsWithTimestamps const& bcs, rawinputs::Run3FullPidTracks const& tracks,