@@ -66,20 +66,6 @@ using namespace o2::constants::math;
6666using namespace o2 ::framework;
6767using namespace o2 ::framework::expressions;
6868
69- enum MultOrCentEstimators {
70- MultNTracksPV = 0 ,
71- MultNumContrib,
72- MultFT0C,
73- MultFT0M,
74- CentFT0C,
75- CentFT0CVariant1,
76- CentFT0M,
77- CentFV0A,
78- CentNTracksPV,
79- CentNGlobal,
80- CentMFT
81- };
82-
8369enum MftTrackSelectionStep {
8470 NoSelection = 0 ,
8571 Eta,
@@ -95,6 +81,13 @@ enum MftTrackAmbiguityStep {
9581 NMftAmbiguitySteps
9682};
9783
84+ enum MultiplicityEstimators {
85+ MultNTracksPV = 0 ,
86+ MultNumContrib,
87+ MultFT0C,
88+ MultFT0M
89+ };
90+
9891enum ReassociationMftTracks {
9992 NotReassociatedMftTracks = 0 ,
10093 ReassociatedMftTracks,
@@ -134,7 +127,7 @@ enum CorrelatedParticles {
134127static constexpr std::string_view WhatDataType[] = {" Data/" , " MC/" };
135128static constexpr std::string_view WhatCorrelationCase[] = {" TpcTpc/" , " TpcMft/" , " TpcFv0a/" , " MftFv0a/" };
136129static constexpr std::string_view WhatParticles[] = {" ChPartChPart/" , " D0ChPart/" , " LcChPart/" };
137- static constexpr std::string_view WhatMultOrCentEstimator [] = {" multNTracksPV/ " , " multNumContrib/ " , " multFT0C/ " , " multFT0M/ " , " centFT0C/ " , " centFT0CVariant1/ " , " centFT0M/ " , " centFV0A/ " , " centNtracksPV/ " , " centNGlobal/ " , " centMFT/ " };
130+ static constexpr std::string_view WhatMultiplicityEstimator [] = {" multNTracksPV" , " multNumContrib" , " multFT0C" , " multFT0M" };
138131
139132static constexpr TrackSelectionFlags::flagtype TrackSelectionIts =
140133 TrackSelectionFlags::kITSNCls | TrackSelectionFlags::kITSChi2NDF |
@@ -178,7 +171,7 @@ struct HfTaskFlow {
178171 std::string prefix = " ConfigCollision_group" ;
179172 Configurable<bool > isApplyGoodZvtxFT0vsPV{" isApplyGoodZvtxFT0vsPV" , false , " Enable GoodZvtxFT0vsPV cut" };
180173 Configurable<bool > isApplySameBunchPileup{" isApplySameBunchPileup" , false , " Enable SameBunchPileup cut" };
181- Configurable<int > multOrCentEstimator{ " multOrCentEstimator " , 0 , " 0: multNTracksPV, 1: numContrib, 2: multFT0C, 3: multFT0M, 4: centFT0C, 5: centFT0CVariants1s, 6: centFT0M, 7: centFV0A, 8: centNTracksPV, 9: centNGlobal, 10: centMFT" };
174+ Configurable<int > multiplicityEstimator{ " multiplicityEstimator " , 0 , " 0: multNTracksPV, 1: numContrib, 2: multFT0C, 3: multFT0M, 4: centFT0C, 5: centFT0CVariants1s, 6: centFT0M, 7: centFV0A, 8: centNTracksPV, 9: centNGlobal, 10: centMFT" };
182175 Configurable<bool > isApplyNoCollInTimeRangeStrict{" isApplyNoCollInTimeRangeStrict" , false , " " };
183176 Configurable<float > zVertexMax{" zVertexMax" , 7 .0f , " Accepted z-vertex range" };
184177 } configCollision;
@@ -225,7 +218,7 @@ struct HfTaskFlow {
225218 // using declarations : DATA
226219 // =========================
227220
228- using FilteredCollisionsWSelMult = soa::Filtered<soa::Join<aod::Collisions, aod::EvSels, aod::Mults, aod::CentFT0Cs, aod::CentFT0CVariant1s, aod::CentFT0Ms, aod::CentFV0As, aod::CentNTPVs, aod::CentNGlobals, aod::CentMFTs >>;
221+ using FilteredCollisionsWSelMult = soa::Filtered<soa::Join<aod::Collisions, aod::EvSels, aod::Mults>>;
229222 using HfCandidatesSelD0 = soa::Filtered<soa::Join<aod::HfCand2Prong, aod::HfSelD0>>;
230223 using HfCandidatesSelLc = soa::Filtered<soa::Join<aod::HfCand3Prong, aod::HfSelLc>>;
231224 using FilteredTracksWDcaSel = soa::Filtered<soa::Join<aod::TracksWDca, aod::TrackSelection, aod::TracksExtra>>;
@@ -393,7 +386,7 @@ struct HfTaskFlow {
393386 // =========================
394387
395388 registry.add (" Data/hVtxZ" , " v_{z} (cm)" , {HistType::kTH1D , {axisVertex}});
396- registry.add (Form (" Data/hMultiplicity_%s" , WhatMultOrCentEstimator [configCollision.multOrCentEstimator ].data ()), " " , {HistType::kTH1D , {axisMultiplicity}});
389+ registry.add (Form (" Data/hMultiplicity_%s" , WhatMultiplicityEstimator [configCollision.multiplicityEstimator ].data ()), " " , {HistType::kTH1D , {axisMultiplicity}});
397390
398391 registry.add (" Data/hEventCounter" , " hEventCounter" , {HistType::kTH1D , {{EventSelectionStep::NEventSelectionSteps, -0.5 , +EventSelectionStep::NEventSelectionSteps - 0.5 }}});
399392 std::string labels[EventSelectionStep::NEventSelectionSteps];
@@ -794,31 +787,29 @@ struct HfTaskFlow {
794787 }
795788
796789 template <typename TCollision>
797- float getMultiplicityOrCentrality (TCollision collision)
790+ float getMultiplicityEstimator (TCollision collision, bool isSameEvent )
798791 {
799- switch (configCollision.multOrCentEstimator ) {
800- case MultOrCentEstimators::MultNTracksPV:
792+ switch (configCollision.multiplicityEstimator ) {
793+ case MultiplicityEstimators::MultNTracksPV:
794+ if (isSameEvent) {
795+ registry.fill (HIST (" Data/hMultiplicity_multNTracksPV" ), collision.multNTracksPV ());
796+ }
801797 return collision.multNTracksPV ();
802- case MultOrCentEstimators::MultFT0C:
803- return collision.multFT0C ();
804- case MultOrCentEstimators::MultNumContrib:
798+ case MultiplicityEstimators::MultNumContrib:
799+ if (isSameEvent) {
800+ registry.fill (HIST (" Data/hMultiplicity_multNumContrib" ), collision.numContrib ());
801+ }
805802 return collision.numContrib ();
806- case MultOrCentEstimators::MultFT0M:
803+ case MultiplicityEstimators::MultFT0C:
804+ if (isSameEvent) {
805+ registry.fill (HIST (" Data/hMultiplicity_multFT0C" ), collision.multFT0C ());
806+ }
807+ return collision.multFT0C ();
808+ case MultiplicityEstimators::MultFT0M:
809+ if (isSameEvent) {
810+ registry.fill (HIST (" Data/hMultiplicity_multFT0M" ), collision.multFT0M ());
811+ }
807812 return collision.multFT0M ();
808- case MultOrCentEstimators::CentFT0C:
809- return collision.centFT0C ();
810- case MultOrCentEstimators::CentFT0CVariant1:
811- return collision.centFT0CVariant1 ();
812- case MultOrCentEstimators::CentFT0M:
813- return collision.centFT0M ();
814- case MultOrCentEstimators::CentFV0A:
815- return collision.centFV0A ();
816- case MultOrCentEstimators::CentNTracksPV:
817- return collision.centNTPV ();
818- case MultOrCentEstimators::CentNGlobal:
819- return collision.centNGlobal ();
820- case MultOrCentEstimators::CentMFT:
821- return collision.centMFT ();
822813 default :
823814 return collision.multNTracksPV ();
824815 }
@@ -1704,7 +1695,7 @@ struct HfTaskFlow {
17041695 OutputObj<CorrelationContainer>& corrContainer)
17051696 {
17061697 auto getMultiplicity = [this ](FilteredCollisionsWSelMult::iterator const & collision) {
1707- auto multiplicity = getMultiplicityOrCentrality (collision);
1698+ auto multiplicity = getMultiplicityEstimator (collision, false );
17081699 return multiplicity;
17091700 };
17101701
@@ -1726,7 +1717,7 @@ struct HfTaskFlow {
17261717 }
17271718 }
17281719
1729- const auto multiplicity = getMultiplicityOrCentrality (collision1);
1720+ const auto multiplicity = getMultiplicityEstimator (collision1, false );
17301721
17311722 corrContainer->fillEvent (multiplicity, step);
17321723 fillCorrelations (corrContainer, step, tracks1, tracks2, multiplicity, collision1.posZ (), false );
@@ -1818,8 +1809,8 @@ struct HfTaskFlow {
18181809 // options are ran at the same time
18191810 // temporary solution, since other correlation options always have to be ran with h-h, too
18201811 // TODO: rewrite it in a more intelligent way
1821- const auto multiplicity = getMultiplicityOrCentrality (collision);
1822- registry.fill (HIST (" Data/hMultiplicity " ), multiplicity);
1812+ const auto multiplicity = getMultiplicityEstimator (collision, true );
1813+ // registry.fill(HIST(Form( "Data/hMultiplicity_%s", WhatMultiplicityEstimator[HfTaskFlow::configCollision.multiplicityEstimator].data()) ), multiplicity);
18231814
18241815 sameEvent->fillEvent (multiplicity, CorrelationContainer::kCFStepReconstructed );
18251816 fillCorrelations (sameEvent, CorrelationContainer::CFStep::kCFStepReconstructed , tracks, tracks, multiplicity, collision.posZ (), true );
@@ -1844,8 +1835,7 @@ struct HfTaskFlow {
18441835 return ;
18451836 }
18461837
1847- const auto multiplicity = getMultiplicityOrCentrality (collision);
1848- registry.fill (HIST (" Data/hMultiplicity" ), multiplicity);
1838+ const auto multiplicity = getMultiplicityEstimator (collision, true );
18491839
18501840 sameEventHf->fillEvent (multiplicity, CorrelationContainer::kCFStepReconstructed );
18511841 fillCorrelations (sameEventHf, CorrelationContainer::CFStep::kCFStepReconstructed , candidates, tracks, multiplicity, collision.posZ (), true );
@@ -1870,8 +1860,7 @@ struct HfTaskFlow {
18701860 return ;
18711861 }
18721862
1873- const auto multiplicity = getMultiplicityOrCentrality (collision);
1874- registry.fill (HIST (" Data/hMultiplicity" ), multiplicity);
1863+ const auto multiplicity = getMultiplicityEstimator (collision, true );
18751864
18761865 sameEventHf->fillEvent (multiplicity, CorrelationContainer::kCFStepReconstructed );
18771866 fillCorrelations (sameEventHf, CorrelationContainer::CFStep::kCFStepReconstructed , candidates, tracks, multiplicity, collision.posZ (), true );
@@ -1890,8 +1879,7 @@ struct HfTaskFlow {
18901879 return ;
18911880 }
18921881
1893- const auto multiplicity = getMultiplicityOrCentrality (collision);
1894- registry.fill (HIST (" Data/hMultiplicity" ), multiplicity);
1882+ const auto multiplicity = getMultiplicityEstimator (collision, true );
18951883
18961884 // I use kCFStepAll for running my code with all MFTTracks were the reassociation process was not applied
18971885 // We don't fill "normal" QA plots with these tracks, only specific plots to compare with other type of MFTTracks
@@ -1914,8 +1902,7 @@ struct HfTaskFlow {
19141902 registry.fill (HIST (" Data/Mft/hNBestCollisionFwd" ), reassociatedMftTracks.size ());
19151903
19161904 // const auto multiplicity = collision.multNTracksPV();
1917- const auto multiplicity = getMultiplicityOrCentrality (collision);
1918- registry.fill (HIST (" Data/hMultiplicity" ), multiplicity);
1905+ const auto multiplicity = getMultiplicityEstimator (collision, true );
19191906
19201907 // I use the step kCFStepReconstructed for reassociatedMftTracks (most likely the ones we will use in the end)
19211908 sameEvent->fillEvent (multiplicity, CorrelationContainer::kCFStepReconstructed );
@@ -1936,8 +1923,7 @@ struct HfTaskFlow {
19361923 registry.fill (HIST (" Data/Mft/hNMftTracks" ), mftTracks.size ());
19371924 registry.fill (HIST (" Data/Mft/hNBestCollisionFwd" ), reassociatedMftTracks.size ());
19381925
1939- const auto multiplicity = getMultiplicityOrCentrality (collision);
1940- registry.fill (HIST (" Data/hMultiplicity" ), multiplicity);
1926+ const auto multiplicity = getMultiplicityEstimator (collision, true );
19411927
19421928 // I use kCFStepTracked for running my code with only non-ambiguous MFTTracks
19431929 // This is the same as running with reassociatedMftTracks, but applying one more cut in the fillCorrelations function
@@ -1966,8 +1952,7 @@ struct HfTaskFlow {
19661952 return ;
19671953 }
19681954
1969- const auto multiplicity = getMultiplicityOrCentrality (collision);
1970- registry.fill (HIST (" Data/hMultiplicity" ), multiplicity);
1955+ const auto multiplicity = getMultiplicityEstimator (collision, true );
19711956
19721957 sameEventHf->fillEvent (multiplicity, CorrelationContainer::kCFStepReconstructed );
19731958 fillCorrelations (sameEventHf, CorrelationContainer::CFStep::kCFStepReconstructed , candidates, mftTracks, multiplicity, collision.posZ (), true );
@@ -1983,8 +1968,7 @@ struct HfTaskFlow {
19831968 return ; // when process function has iterator
19841969 }
19851970
1986- const auto multiplicity = getMultiplicityOrCentrality (collision);
1987- registry.fill (HIST (" Data/hMultiplicity" ), multiplicity);
1971+ const auto multiplicity = getMultiplicityEstimator (collision, true );
19881972
19891973 // I use the step kCFStepReconstructed for reassociatedMftTracks (most likely the ones we will use in the end)
19901974 sameEventHf->fillEvent (multiplicity, CorrelationContainer::kCFStepReconstructed );
@@ -2011,8 +1995,7 @@ struct HfTaskFlow {
20111995 return ;
20121996 }
20131997
2014- const auto multiplicity = getMultiplicityOrCentrality (collision);
2015- registry.fill (HIST (" Data/hMultiplicity" ), multiplicity);
1998+ const auto multiplicity = getMultiplicityEstimator (collision, true );
20161999
20172000 sameEventHf->fillEvent (multiplicity, CorrelationContainer::kCFStepReconstructed );
20182001 fillCorrelations (sameEventHf, CorrelationContainer::CFStep::kCFStepReconstructed , candidates, mftTracks, multiplicity, collision.posZ (), true );
@@ -2028,8 +2011,7 @@ struct HfTaskFlow {
20282011 return ; // when process function has iterator
20292012 }
20302013
2031- const auto multiplicity = getMultiplicityOrCentrality (collision);
2032- registry.fill (HIST (" Data/hMultiplicity" ), multiplicity);
2014+ const auto multiplicity = getMultiplicityEstimator (collision, true );
20332015
20342016 // I use the step kCFStepReconstructed for reassociatedMftTracks (most likely the ones we will use in the end)
20352017 sameEventHf->fillEvent (multiplicity, CorrelationContainer::kCFStepReconstructed );
@@ -2049,11 +2031,10 @@ struct HfTaskFlow {
20492031 return ;
20502032 }
20512033
2052- const auto multiplicity = getMultiplicityOrCentrality (collision);
2034+ const auto multiplicity = getMultiplicityEstimator (collision, true );
20532035
20542036 if (collision.has_foundFV0 ()) {
20552037 const auto & fv0 = collision.foundFV0 ();
2056- registry.fill (HIST (" Data/hMultiplicity" ), multiplicity);
20572038
20582039 sameEvent->fillEvent (multiplicity, CorrelationContainer::kCFStepReconstructed );
20592040 fillCorrelationsFV0 (sameEvent, CorrelationContainer::CFStep::kCFStepReconstructed , tracks, fv0, multiplicity, collision.posZ (), true );
@@ -2073,11 +2054,10 @@ struct HfTaskFlow {
20732054 return ;
20742055 }
20752056
2076- const auto multiplicity = getMultiplicityOrCentrality (collision);
2057+ const auto multiplicity = getMultiplicityEstimator (collision, true );
20772058
20782059 if (collision.has_foundFV0 ()) {
20792060 const auto & fv0 = collision.foundFV0 ();
2080- registry.fill (HIST (" Data/hMultiplicity" ), multiplicity);
20812061
20822062 sameEventHf->fillEvent (multiplicity, CorrelationContainer::kCFStepReconstructed );
20832063 fillCorrelationsFV0 (sameEventHf, CorrelationContainer::CFStep::kCFStepReconstructed , candidates, fv0, multiplicity, collision.posZ (), true );
@@ -2097,11 +2077,10 @@ struct HfTaskFlow {
20972077 return ;
20982078 }
20992079
2100- const auto multiplicity = getMultiplicityOrCentrality (collision);
2080+ const auto multiplicity = getMultiplicityEstimator (collision, true );
21012081
21022082 if (collision.has_foundFV0 ()) {
21032083 const auto & fv0 = collision.foundFV0 ();
2104- registry.fill (HIST (" Data/hMultiplicity" ), multiplicity);
21052084
21062085 sameEventHf->fillEvent (multiplicity, CorrelationContainer::kCFStepReconstructed );
21072086 fillCorrelationsFV0 (sameEventHf, CorrelationContainer::CFStep::kCFStepReconstructed , candidates, fv0, multiplicity, collision.posZ (), true );
@@ -2121,11 +2100,10 @@ struct HfTaskFlow {
21212100 return ;
21222101 }
21232102
2124- const auto multiplicity = getMultiplicityOrCentrality (collision);
2103+ const auto multiplicity = getMultiplicityEstimator (collision, true );
21252104
21262105 if (collision.has_foundFV0 ()) {
21272106 const auto & fv0 = collision.foundFV0 ();
2128- registry.fill (HIST (" Data/hMultiplicity" ), multiplicity);
21292107
21302108 sameEvent->fillEvent (multiplicity, CorrelationContainer::kCFStepReconstructed );
21312109 fillCorrelationsFV0 (sameEvent, CorrelationContainer::CFStep::kCFStepReconstructed , mftTracks, fv0, multiplicity, collision.posZ (), true );
@@ -2142,11 +2120,10 @@ struct HfTaskFlow {
21422120 return ;
21432121 }
21442122
2145- const auto multiplicity = getMultiplicityOrCentrality (collision);
2123+ const auto multiplicity = getMultiplicityEstimator (collision, true );
21462124
21472125 if (collision.has_foundFV0 ()) {
21482126 const auto & fv0 = collision.foundFV0 ();
2149- registry.fill (HIST (" Data/hMultiplicity" ), multiplicity);
21502127
21512128 sameEvent->fillEvent (multiplicity, CorrelationContainer::kCFStepReconstructed );
21522129 fillCorrelationsFV0ReassociatedMftTracks (sameEvent, CorrelationContainer::CFStep::kCFStepReconstructed , reassociatedMftTracks, fv0, multiplicity, collision.posZ (), true , false );
@@ -2163,11 +2140,10 @@ struct HfTaskFlow {
21632140 return ;
21642141 }
21652142
2166- const auto multiplicity = getMultiplicityOrCentrality (collision);
2143+ const auto multiplicity = getMultiplicityEstimator (collision, true );
21672144
21682145 if (collision.has_foundFV0 ()) {
21692146 const auto & fv0 = collision.foundFV0 ();
2170- registry.fill (HIST (" Data/hMultiplicity" ), multiplicity);
21712147
21722148 sameEvent->fillEvent (multiplicity, CorrelationContainer::kCFStepReconstructed );
21732149 fillCorrelationsFV0ReassociatedMftTracks (sameEvent, CorrelationContainer::CFStep::kCFStepReconstructed , reassociatedMftTracks, fv0, multiplicity, collision.posZ (), true , true );
@@ -2313,7 +2289,7 @@ struct HfTaskFlow {
23132289 aod::FV0As const &)
23142290 {
23152291 auto getMultiplicity = [this ](FilteredCollisionsWSelMult::iterator const & collision) {
2316- auto multiplicity = getMultiplicityOrCentrality (collision);
2292+ auto multiplicity = getMultiplicityEstimator (collision, false );
23172293 return multiplicity;
23182294 };
23192295
@@ -2332,7 +2308,7 @@ struct HfTaskFlow {
23322308
23332309 if (collision1.has_foundFV0 () && collision2.has_foundFV0 ()) {
23342310
2335- const auto multiplicity = getMultiplicityOrCentrality (collision1);
2311+ const auto multiplicity = getMultiplicityEstimator (collision1, false );
23362312
23372313 auto slicedTriggerTracks = tracks.sliceBy (perColTracks, collision1.globalIndex ());
23382314 const auto & fv0 = collision2.foundFV0 ();
@@ -2353,7 +2329,7 @@ struct HfTaskFlow {
23532329 aod::FV0As const &)
23542330 {
23552331 auto getMultiplicity = [this ](FilteredCollisionsWSelMult::iterator const & collision) {
2356- auto multiplicity = getMultiplicityOrCentrality (collision);
2332+ auto multiplicity = getMultiplicityEstimator (collision, false );
23572333 return multiplicity;
23582334 };
23592335
@@ -2372,7 +2348,7 @@ struct HfTaskFlow {
23722348
23732349 if (collision1.has_foundFV0 () && collision2.has_foundFV0 ()) {
23742350
2375- const auto multiplicity = getMultiplicityOrCentrality (collision1);
2351+ const auto multiplicity = getMultiplicityEstimator (collision1, false );
23762352
23772353 auto slicedTriggerCandidates = candidates.sliceBy (perColD0s, collision1.globalIndex ());
23782354 const auto & fv0 = collision2.foundFV0 ();
@@ -2393,7 +2369,7 @@ struct HfTaskFlow {
23932369 aod::FV0As const &)
23942370 {
23952371 auto getMultiplicity = [this ](FilteredCollisionsWSelMult::iterator const & collision) {
2396- auto multiplicity = getMultiplicityOrCentrality (collision);
2372+ auto multiplicity = getMultiplicityEstimator (collision, false );
23972373 return multiplicity;
23982374 };
23992375
@@ -2412,7 +2388,7 @@ struct HfTaskFlow {
24122388
24132389 if (collision1.has_foundFV0 () && collision2.has_foundFV0 ()) {
24142390
2415- const auto multiplicity = getMultiplicityOrCentrality (collision1);
2391+ const auto multiplicity = getMultiplicityEstimator (collision1, false );
24162392
24172393 auto slicedTriggerCandidates = candidates.sliceBy (perColLcs, collision1.globalIndex ());
24182394 const auto & fv0 = collision2.foundFV0 ();
@@ -2433,7 +2409,7 @@ struct HfTaskFlow {
24332409 aod::FV0As const &)
24342410 {
24352411 auto getMultiplicity = [this ](FilteredCollisionsWSelMult::iterator const & collision) {
2436- auto multiplicity = getMultiplicityOrCentrality (collision);
2412+ auto multiplicity = getMultiplicityEstimator (collision, false );
24372413 return multiplicity;
24382414 };
24392415
@@ -2452,7 +2428,7 @@ struct HfTaskFlow {
24522428
24532429 if (collision1.has_foundFV0 () && collision2.has_foundFV0 ()) {
24542430
2455- const auto multiplicity = getMultiplicityOrCentrality (collision1);
2431+ const auto multiplicity = getMultiplicityEstimator (collision1, false );
24562432 auto slicedTriggerMftTracks = mftTracks.sliceBy (perColMftTracks, collision1.globalIndex ());
24572433 const auto & fv0 = collision2.foundFV0 ();
24582434
0 commit comments