1010// or submit itself to any jurisdiction.
1111
1212// / \file correlatorDplusHadrons.cxx
13+ // / \brief D+-Hadrons correlator task - data-like, MC-reco and MC-Gen analyses
1314// / \author Shyam Kumar <shyam.kumar@cern.ch>
1415
1516#include < vector>
@@ -161,6 +162,7 @@ struct HfCorrelatorDplusHadrons {
161162 Produces<aod::TrkRecInfoDplus> entryTrackRecoInfo;
162163 Produces<aod::Dplus> entryDplus;
163164 Produces<aod::Hadron> entryHadron;
165+ static constexpr std::size_t NDaughters{3u };
164166
165167 Configurable<int > selectionFlagDplus{" selectionFlagDplus" , 7 , " Selection Flag for Dplus" }; // 7 corresponds to topo+PID cuts
166168 Configurable<int > numberEventsMixed{" numberEventsMixed" , 5 , " Number of events mixed in ME process" };
@@ -182,19 +184,9 @@ struct HfCorrelatorDplusHadrons {
182184 Configurable<std::vector<double >> binsPtHadron{" binsPtHadron" , std::vector<double >{0.3 , 2 ., 4 ., 8 ., 12 ., 50 .}, " pT bin limits for assoc particle" };
183185 Configurable<std::vector<double >> binsPtEfficiencyD{" binsPtEfficiencyD" , std::vector<double >{o2::analysis::hf_cuts_dplus_to_pi_k_pi::vecBinsPt}, " pT bin limits for efficiency" };
184186 Configurable<std::vector<float >> efficiencyD{" efficiencyD" , {1 ., 1 ., 1 ., 1 ., 1 ., 1 .}, " efficiency values for D+ meson" };
185- ConfigurableAxis binsMultiplicity{" binsMultiplicity" , {VARIABLE_WIDTH, 0 .0f , 2000 .0f , 6000 .0f , 100000 .0f }, " Mixing bins - multiplicity" };
186- ConfigurableAxis binsZVtx{" binsZVtx" , {VARIABLE_WIDTH, -10 .0f , -2 .5f , 2 .5f , 10 .0f }, " Mixing bins - z-vertex" };
187- ConfigurableAxis binsMultiplicityMc{" binsMultiplicityMc" , {VARIABLE_WIDTH, 0 .0f , 20 .0f , 50 .0f , 500 .0f }, " Mixing bins - MC multiplicity" }; // In MCGen multiplicity is defined by counting tracks
188- ConfigurableAxis binsBdtScore{" binsBdtScore" , {100 , 0 ., 1 .}, " Bdt output scores" };
189- ConfigurableAxis binsEta{" binsEta" , {50 , -2 ., 2 .}, " #it{#eta}" };
190- ConfigurableAxis binsPhi{" binsPhi" , {64 , -PIHalf, 3 . * PIHalf}, " #it{#varphi}" };
191- ConfigurableAxis binsPoolBin{" binsPoolBin" , {9 , 0 ., 9 .}, " PoolBin" };
192- ConfigurableAxis binsMultFT0M{" binsMultFT0M" , {600 , 0 ., 6000 .}, " Multiplicity as FT0M signal amplitude" };
193- ConfigurableAxis binsMassD{" binsMassD" , {200 , 1.7 , 2.10 }, " inv. mass (#pi^{+}K^{-}#pi^{+}) (GeV/#it{c}^{2})" };
194187
195188 HfHelper hfHelper;
196189 SliceCache cache;
197- BinningType corrBinning{{binsZVtx, binsMultiplicity}, true };
198190
199191 // Event Mixing for the Data Mode
200192 using SelCollisionsWithDplus = soa::Filtered<soa::Join<aod::Collisions, aod::Mults, aod::EvSels, aod::DmesonSelection>>;
@@ -215,9 +207,16 @@ struct HfCorrelatorDplusHadrons {
215207 Filter dplusFilter = ((o2::aod::hf_track_index::hfflag & static_cast <uint8_t >(1 << aod::hf_cand_3prong::DecayType::DplusToPiKPi)) != static_cast <uint8_t >(0 )) && aod::hf_sel_candidate_dplus::isSelDplusToPiKPi >= selectionFlagDplus;
216208 Filter trackFilter = (nabs(aod::track::eta) < etaTrackMax) && (nabs(aod::track::pt) > ptTrackMin) && (nabs(aod::track::dcaXY) < dcaXYTrackMax) && (nabs(aod::track::dcaZ) < dcaZTrackMax);
217209 // Filter particlesFilter = nabs(aod::mcparticle::pdgCode) == 411 || ((aod::mcparticle::flags & (uint8_t)o2::aod::mcparticle::enums::PhysicalPrimary) == (uint8_t)o2::aod::mcparticle::enums::PhysicalPrimary);
218-
219- Preslice<aod::HfCand3Prong> perCol = aod::hf_cand::collisionId;
220-
210+ ConfigurableAxis binsMultiplicity{" binsMultiplicity" , {VARIABLE_WIDTH, 0 .0f , 2000 .0f , 6000 .0f , 100000 .0f }, " Mixing bins - multiplicity" };
211+ ConfigurableAxis binsZVtx{" binsZVtx" , {VARIABLE_WIDTH, -10 .0f , -2 .5f , 2 .5f , 10 .0f }, " Mixing bins - z-vertex" };
212+ ConfigurableAxis binsMultiplicityMc{" binsMultiplicityMc" , {VARIABLE_WIDTH, 0 .0f , 20 .0f , 50 .0f , 500 .0f }, " Mixing bins - MC multiplicity" }; // In MCGen multiplicity is defined by counting tracks
213+ ConfigurableAxis binsBdtScore{" binsBdtScore" , {100 , 0 ., 1 .}, " Bdt output scores" };
214+ ConfigurableAxis binsEta{" binsEta" , {50 , -2 ., 2 .}, " #it{#eta}" };
215+ ConfigurableAxis binsPhi{" binsPhi" , {64 , -PIHalf, 3 . * PIHalf}, " #it{#varphi}" };
216+ ConfigurableAxis binsPoolBin{" binsPoolBin" , {9 , 0 ., 9 .}, " PoolBin" };
217+ ConfigurableAxis binsMultFT0M{" binsMultFT0M" , {600 , 0 ., 6000 .}, " Multiplicity as FT0M signal amplitude" };
218+ ConfigurableAxis binsMassD{" binsMassD" , {200 , 1.7 , 2.10 }, " inv. mass (#pi^{+}K^{-}#pi^{+}) (GeV/#it{c}^{2})" };
219+ BinningType corrBinning{{binsZVtx, binsMultiplicity}, true };
221220 HistogramRegistry registry{" registry" , {}, OutputObjHandlingPolicy::AnalysisObject};
222221
223222 void init (InitContext&)
@@ -344,7 +343,7 @@ struct HfCorrelatorDplusHadrons {
344343 for (unsigned int iclass = 0 ; iclass < classMl->size (); iclass++) {
345344 outputMl[iclass] = candidate.mlProbDplusToPiKPi ()[classMl->at (iclass)];
346345 }
347- entryDplusCandRecoInfo (hfHelper.invMassDplusToPiKPi (candidate), candidate.pt (), outputMl[0 ], outputMl[1 ]); // 0: BkgBDTScore, 1:PromptBDTScore
346+ entryDplusCandRecoInfo (hfHelper.invMassDplusToPiKPi (candidate), candidate.pt (), outputMl[0 ], outputMl[1 ], outputMl[ 2 ] ); // 0: BkgBDTScore, 1:PromptBDTScore, 2: FDScore
348347 entryDplus (candidate.phi (), candidate.eta (), candidate.pt (), hfHelper.invMassDplusToPiKPi (candidate), poolBin, gCollisionId , timeStamp);
349348
350349 // Dplus-Hadron correlation dedicated section
@@ -366,7 +365,7 @@ struct HfCorrelatorDplusHadrons {
366365 track.pt (), poolBin);
367366 entryDplusHadronRecoInfo (hfHelper.invMassDplusToPiKPi (candidate), false );
368367 entryDplusHadronGenInfo (false , false , 0 );
369- entryDplusHadronMlInfo (outputMl[0 ], outputMl[1 ]);
368+ entryDplusHadronMlInfo (outputMl[0 ], outputMl[1 ], outputMl[ 2 ] );
370369 entryTrackRecoInfo (track.dcaXY (), track.dcaZ (), track.tpcNClsCrossedRows ());
371370 if (cntDplus == 0 ) {
372371 entryHadron (track.phi (), track.eta (), track.pt (), poolBin, gCollisionId , timeStamp);
@@ -458,7 +457,7 @@ struct HfCorrelatorDplusHadrons {
458457 outputMl[iclass] = candidate.mlProbDplusToPiKPi ()[classMl->at (iclass)];
459458 }
460459 registry.fill (HIST (" hMassDplusMcRecSig" ), hfHelper.invMassDplusToPiKPi (candidate), candidate.pt (), efficiencyWeightD);
461- entryDplusCandRecoInfo (hfHelper.invMassDplusToPiKPi (candidate), candidate.pt (), outputMl[0 ], outputMl[1 ]);
460+ entryDplusCandRecoInfo (hfHelper.invMassDplusToPiKPi (candidate), candidate.pt (), outputMl[0 ], outputMl[1 ], outputMl[ 2 ] );
462461 entryDplusCandGenInfo (isDplusPrompt);
463462 } else {
464463 registry.fill (HIST (" hPtCandMcRecBkg" ), candidate.pt ());
@@ -487,7 +486,7 @@ struct HfCorrelatorDplusHadrons {
487486 candidate.pt (),
488487 track.pt (), poolBin);
489488 entryDplusHadronRecoInfo (hfHelper.invMassDplusToPiKPi (candidate), isDplusSignal);
490- entryDplusHadronMlInfo (outputMl[0 ], outputMl[1 ]);
489+ entryDplusHadronMlInfo (outputMl[0 ], outputMl[1 ], outputMl[ 2 ] );
491490 if (track.has_mcParticle ()) {
492491 auto mcParticle = track.template mcParticle_as <aod::McParticles>();
493492 isPhysicalPrimary = mcParticle.isPhysicalPrimary ();
@@ -555,12 +554,12 @@ struct HfCorrelatorDplusHadrons {
555554
556555 // prompt and non-prompt division
557556 std::vector<int > listDaughters{};
558- std::array<int , 3 > arrDaughDplusPDG = {+kPiPlus , -kKPlus , kPiPlus };
559- std::array<int , 3 > prongsId;
557+ std::array<int , NDaughters > arrDaughDplusPDG = {+kPiPlus , -kKPlus , kPiPlus };
558+ std::array<int , NDaughters > prongsId;
560559 listDaughters.clear ();
561560 RecoDecay::getDaughters (particle1, &listDaughters, arrDaughDplusPDG, 2 );
562561 int counterDaughters = 0 ;
563- if (listDaughters.size () == 3 ) {
562+ if (listDaughters.size () == NDaughters ) {
564563 for (const auto & dauIdx : listDaughters) {
565564 auto daughI = mcParticles.rawIteratorAt (dauIdx - mcParticles.offset ());
566565 counterDaughters += 1 ;
@@ -695,7 +694,7 @@ struct HfCorrelatorDplusHadrons {
695694 for (unsigned int iclass = 0 ; iclass < classMl->size (); iclass++) {
696695 outputMl[iclass] = candidate.mlProbDplusToPiKPi ()[classMl->at (iclass)];
697696 }
698- entryDplusHadronMlInfo (outputMl[0 ], outputMl[1 ]);
697+ entryDplusHadronMlInfo (outputMl[0 ], outputMl[1 ], outputMl[ 2 ] );
699698 entryTrackRecoInfo (pAssoc.dcaXY (), pAssoc.dcaZ (), pAssoc.tpcNClsCrossedRows ());
700699 }
701700 }
0 commit comments