5454#include < memory>
5555#include < optional>
5656#include < string>
57+ #include < unordered_map>
5758#include < vector>
5859
5960using namespace o2 ;
@@ -62,6 +63,13 @@ using namespace o2::constants::math;
6263using namespace o2 ::framework;
6364using namespace o2 ::framework::expressions;
6465
66+ enum ResonantChannel : int8_t {
67+ PhiPi = 1 ,
68+ Kstar0K = 2
69+ };
70+
71+ static std::unordered_map<int8_t , int8_t > channelsResonant = {{{ResonantChannel::PhiPi, hf_decay::hf_cand_3prong::DecayChannelResonant::DsToPhiPi}, {ResonantChannel::Kstar0K, hf_decay::hf_cand_3prong::DecayChannelResonant::DsToKstar0K}}};
72+
6573// / Ds-Hadron correlation pair filling task, from pair tables - for real data and data-like analysis (i.e. reco-level w/o matching request via MC truth)
6674struct HfTaskCorrelationDsHadrons {
6775 Configurable<bool > fillHistoData{" fillHistoData" , true , " Flag for filling histograms in data processes" };
@@ -79,7 +87,7 @@ struct HfTaskCorrelationDsHadrons {
7987 Configurable<int > selectionFlagDs{" selectionFlagDs" , 7 , " Selection Flag for Ds (avoid the case of flag = 0, no outputMlScore)" };
8088 Configurable<int > nTpcCrossedRaws{" nTpcCrossedRaws" , 70 , " Number of crossed TPC Rows" };
8189 // Configurable<int> eventGeneratorType{"eventGeneratorType", -1, "If positive, enable event selection using subGeneratorId information. The value indicates which events to keep (0 = MB, 4 = charm triggered, 5 = beauty triggered)"};
82- Configurable<int > decayChannel{" decayChannel" , 1 , " Decay channels: 1 for Ds->PhiPi->KKpi, 2 for Ds->K0*K->KKPi" };
90+ Configurable<int > decayChannel{" decayChannel" , 1 , " Resonant decay channels: 1 for Ds->PhiPi->KKpi, 2 for Ds->K0*K->KKPi" };
8391 Configurable<float > cutCollPosZMc{" cutCollPosZMc" , 10 ., " max z-vertex position for collision acceptance" };
8492 Configurable<float > dcaXYTrackMax{" dcaXYTrackMax" , 1 ., " max. DCA_xy of tracks" };
8593 Configurable<float > dcaZTrackMax{" dcaZTrackMax" , 1 ., " max. DCA_z of tracks" };
@@ -230,7 +238,10 @@ struct HfTaskCorrelationDsHadrons {
230238 registry.add (" hPtPrmNonPromptPartMcGen" , " Primary non-prompt particles - MC Rec" , {HistType::kTH1F , {axisPtHadron}});
231239 registry.add (" hPtPrmPromptPartMcRec" , " Primary prompt particles - MC Rec" , {HistType::kTH1F , {axisPtHadron}});
232240 registry.add (" hPtPrmNonPromptPartMcRec" , " Primary non-prompt particles - MC Rec" , {HistType::kTH1F , {axisPtHadron}});
241+ registry.add (" hPtMcParticleAssocSpecieMcRec" , " Associated Particle - MC Rec" , {HistType::kTH1F , {axisPtHadron}});
242+ registry.add (" hPtParticleAssocMcRec" , " Associated Particle - MC Rec" , {HistType::kTH1F , {axisPtHadron}});
233243 registry.add (" hPtCandMcGenDaughterInAcc" , " Ds,Hadron particles non prompt - MC Gen" , {HistType::kTH1F , {axisPtD}});
244+
234245 if (useHighDimHistoForEff) {
235246 registry.add (" hPtCandMcRecPrompt" , " Ds prompt candidates" , {HistType::kTH2F , {{axisPtD}, {axisNumPvContr}}});
236247 registry.add (" hPtCandMcRecNonPrompt" , " Ds non prompt candidates pt" , {HistType::kTH2F , {{axisPtD}, {axisNumPvContr}}});
@@ -253,9 +264,7 @@ struct HfTaskCorrelationDsHadrons {
253264 registry.add (" hPtCandMcRecNonPrompt" , " Ds non prompt candidates pt" , {HistType::kTH1F , {axisPtD}});
254265 registry.add (" hPtCandMcGenPrompt" , " Ds,Hadron particles prompt - MC Gen" , {HistType::kTH1F , {axisPtD}});
255266 registry.add (" hPtCandMcGenNonPrompt" , " Ds,Hadron particles non prompt - MC Gen" , {HistType::kTH1F , {axisPtD}});
256- registry.add (" hPtParticleAssocMcRec" , " Associated Particle - MC Rec" , {HistType::kTH1F , {axisPtHadron}});
257267 registry.add (" hPtParticleAssocSpecieMcRec" , " Associated Particle - MC Rec" , {HistType::kTH1F , {axisPtHadron}});
258- registry.add (" hPtMcParticleAssocSpecieMcRec" , " Associated Particle - MC Rec" , {HistType::kTH1F , {axisPtHadron}});
259268 registry.add (" hPtPrmPionMcRec" , " Primary pions - MC Rec" , {HistType::kTH1F , {axisPtHadron}});
260269 registry.add (" hPtPrmKaonMcRec" , " Primary kaons - MC Rec" , {HistType::kTH1F , {axisPtHadron}});
261270 registry.add (" hPtPrmProtonMcRec" , " Primary protons - MC Rec" , {HistType::kTH1F , {axisPtHadron}});
@@ -731,7 +740,7 @@ struct HfTaskCorrelationDsHadrons {
731740
732741 // generated candidate loop
733742 for (const auto & mcParticle : groupedMcParticles) {
734- if ((std::abs (mcParticle.flagMcMatchGen ()) == hf_decay::hf_cand_3prong::DecayChannelMain::DsToPiKK) && (mcParticle.flagMcDecayChanGen () == decayChannel)) {
743+ if ((std::abs (mcParticle.flagMcMatchGen ()) == hf_decay::hf_cand_3prong::DecayChannelMain::DsToPiKK) && (mcParticle.flagMcDecayChanGen () == channelsResonant[ decayChannel] )) {
735744 auto yDs = RecoDecay::y (mcParticle.pVector (), o2::constants::physics::MassDS);
736745 if (std::abs (yDs) <= yCandGenMax) {
737746 if (mcParticle.originMcGen () == RecoDecay::OriginType::Prompt) {
@@ -781,7 +790,7 @@ struct HfTaskCorrelationDsHadrons {
781790 continue ;
782791 }
783792
784- if ((std::abs (candidate.flagMcMatchRec ()) == hf_decay::hf_cand_3prong::DecayChannelMain::DsToPiKK) && (candidate.flagMcDecayChanRec () == decayChannel)) {
793+ if ((std::abs (candidate.flagMcMatchRec ()) == hf_decay::hf_cand_3prong::DecayChannelMain::DsToPiKK) && (candidate.flagMcDecayChanRec () == channelsResonant[ decayChannel] )) {
785794 auto prong0McPart = candidate.template prong0_as <aod::TracksWMc>().template mcParticle_as <CandDsMcGen>();
786795 // DsToKKPi and DsToPiKK division
787796 if (((std::abs (prong0McPart.pdgCode ()) == kKPlus ) && (candidate.isSelDsToKKPi () >= selectionFlagDs)) || ((std::abs (prong0McPart.pdgCode ()) == kPiPlus ) && (candidate.isSelDsToPiKK () >= selectionFlagDs))) {
@@ -818,7 +827,7 @@ struct HfTaskCorrelationDsHadrons {
818827 // / Gen loop
819828 for (const auto & mcParticle : mcParticles) {
820829 // generated candidates
821- if ((std::abs (mcParticle.flagMcMatchGen ()) == hf_decay::hf_cand_3prong::DecayChannelMain::DsToPiKK) && (mcParticle.flagMcDecayChanGen () == decayChannel)) {
830+ if ((std::abs (mcParticle.flagMcMatchGen ()) == hf_decay::hf_cand_3prong::DecayChannelMain::DsToPiKK) && (mcParticle.flagMcDecayChanGen () == channelsResonant[ decayChannel] )) {
822831 auto yDs = RecoDecay::y (mcParticle.pVector (), o2::constants::physics::MassDS);
823832 if (std::abs (yDs) <= yCandGenMax) {
824833 if (mcParticle.originMcGen () == RecoDecay::OriginType::Prompt) {
@@ -863,7 +872,7 @@ struct HfTaskCorrelationDsHadrons {
863872 if (selNoSameBunchPileUpColl && !(collision.selection_bit (o2::aod::evsel::kNoSameBunchPileup ))) {
864873 continue ;
865874 }
866- if ((std::abs (candidate.flagMcMatchRec ()) == hf_decay::hf_cand_3prong::DecayChannelMain::DsToPiKK) && (candidate.flagMcDecayChanRec () == decayChannel)) {
875+ if ((std::abs (candidate.flagMcMatchRec ()) == hf_decay::hf_cand_3prong::DecayChannelMain::DsToPiKK) && (candidate.flagMcDecayChanRec () == channelsResonant[ decayChannel] )) {
867876 auto prong0McPart = candidate.template prong0_as <aod::TracksWMc>().template mcParticle_as <CandDsMcGen>();
868877 // DsToKKPi and DsToPiKK division
869878 if (((std::abs (prong0McPart.pdgCode ()) == kKPlus ) && (candidate.isSelDsToKKPi () >= selectionFlagDs)) || ((std::abs (prong0McPart.pdgCode ()) == kPiPlus ) && (candidate.isSelDsToPiKK () >= selectionFlagDs))) {
0 commit comments