@@ -174,10 +174,10 @@ struct HfTaskCharmHadronsV0FemtoDream {
174174 using FilteredCollisions = soa::Filtered<soa::Join<FDCollisions, FDColMasks>>;
175175 using FilteredCollision = FilteredCollisions::iterator;
176176
177- using FilteredMcColisions = soa::Filtered<soa::Join<aod::FDCollisions, FDColMasks, aod::FDMCCollLabels>>;
178- using FilteredMcColision = FilteredMcColisions ::iterator;
177+ using FilteredMcCollisions = soa::Filtered<soa::Join<aod::FDCollisions, FDColMasks, aod::FDMCCollLabels>>;
178+ using FilteredMcColision = FilteredMcCollisions ::iterator;
179179
180- using FilteredFDMcParts = soa::Filtered<soa::Join<aod::FDParticles, aod::FDParticlesIndex, aod::FDExtParticles, aod::FDMCLabels, aod::FDExtMCLabels>>;
180+ using FilteredFDMcParts = soa::Filtered<soa::Join<aod::FDParticles, aod::FDParticlesIndex, aod::FDExtParticles, aod::FDMCLabels, aod::FDExtMCLabels, aod::FDTrkTimeStamp >>;
181181 using FilteredFDMcPart = FilteredFDMcParts::iterator;
182182
183183 using FDV0Particles = soa::Join<aod::FDParticles, aod::FDExtParticles, aod::FDParticlesIndex, aod::FDTrkTimeStamp>;
@@ -189,11 +189,12 @@ struct HfTaskCharmHadronsV0FemtoDream {
189189 Filter hfMcSelFilter = (nabs(aod::fdhf::flagMc) == charmSel.charmHadMcSel);
190190
191191 Preslice<FDV0Particles> perCol = aod::femtodreamparticle::fdCollisionId;
192+ Preslice<FilteredFDMcParts> perColMc = aod::femtodreamparticle::fdCollisionId;
192193 Preslice<FilteredCharmCand3Prongs> perHf3ProngByCol = aod::femtodreamparticle::fdCollisionId;
193194 Preslice<FilteredCharmCand2Prongs> perHf2ProngByCol = aod::femtodreamparticle::fdCollisionId;
194195 Preslice<FilteredCharmCandDstars> perHfDstarByCol = aod::femtodreamparticle::fdCollisionId;
195196
196- // / Partition for particle Lambda
197+ // / Partitions for particle Lambda
197198 Partition<FDV0Particles> partitionLambda = (aod::femtodreamparticle::partType == uint8_t (aod::femtodreamparticle::ParticleType::kV0 )) &&
198199 ((aod::femtodreamparticle::cut & v0Sel.cutBit) == v0Sel.cutBit) &&
199200 (aod::femtodreamparticle::pt > v0Sel.ptV0Min) &&
@@ -205,7 +206,18 @@ struct HfTaskCharmHadronsV0FemtoDream {
205206 (aod::femtodreamparticle::mAntiLambda > v0Sel.invMassAntiV0Min) &&
206207 (aod::femtodreamparticle::mAntiLambda < v0Sel.invMassAntiV0Max);
207208
208- // / Partition for particle K0Short
209+ Partition<FilteredFDMcParts> partitionMcLambda = (aod::femtodreamparticle::partType == uint8_t (aod::femtodreamparticle::ParticleType::kV0 )) &&
210+ ((aod::femtodreamparticle::cut & v0Sel.cutBit) == v0Sel.cutBit) &&
211+ (aod::femtodreamparticle::pt > v0Sel.ptV0Min) &&
212+ (aod::femtodreamparticle::pt < v0Sel.ptV0Max) &&
213+ (aod::femtodreamparticle::eta > v0Sel.etaV0Min) &&
214+ (aod::femtodreamparticle::eta < v0Sel.etaV0Max) &&
215+ (aod::femtodreamparticle::mLambda > v0Sel.invMassV0Min) &&
216+ (aod::femtodreamparticle::mLambda < v0Sel.invMassV0Max) &&
217+ (aod::femtodreamparticle::mAntiLambda > v0Sel.invMassAntiV0Min) &&
218+ (aod::femtodreamparticle::mAntiLambda < v0Sel.invMassAntiV0Max);
219+
220+ // / Partitions for particle K0Short
209221 Partition<FDV0Particles> partitionK0Short = (aod::femtodreamparticle::partType == uint8_t (aod::femtodreamparticle::ParticleType::kV0K0Short )) &&
210222 ((aod::femtodreamparticle::cut & v0Sel.cutBit) == v0Sel.cutBit) &&
211223 (aod::femtodreamparticle::pt > v0Sel.ptV0Min) &&
@@ -217,6 +229,17 @@ struct HfTaskCharmHadronsV0FemtoDream {
217229 (aod::femtodreamparticle::mAntiLambda > v0Sel.invMassAntiV0Min) &&
218230 (aod::femtodreamparticle::mAntiLambda < v0Sel.invMassAntiV0Max);
219231
232+ Partition<FilteredFDMcParts> partitionMcK0Short = (aod::femtodreamparticle::partType == uint8_t (aod::femtodreamparticle::ParticleType::kV0K0Short )) &&
233+ ((aod::femtodreamparticle::cut & v0Sel.cutBit) == v0Sel.cutBit) &&
234+ (aod::femtodreamparticle::pt > v0Sel.ptV0Min) &&
235+ (aod::femtodreamparticle::pt < v0Sel.ptV0Max) &&
236+ (aod::femtodreamparticle::eta > v0Sel.etaV0Min) &&
237+ (aod::femtodreamparticle::eta < v0Sel.etaV0Max) &&
238+ (aod::femtodreamparticle::mLambda > v0Sel.invMassV0Min) &&
239+ (aod::femtodreamparticle::mLambda < v0Sel.invMassV0Max) &&
240+ (aod::femtodreamparticle::mAntiLambda > v0Sel.invMassAntiV0Min) &&
241+ (aod::femtodreamparticle::mAntiLambda < v0Sel.invMassAntiV0Max);
242+
220243 // / Partition for particle 2
221244 Partition<FilteredCharmCand3Prongs> partitionCharmHadron3Prong = aod::fdhf::bdtBkg < charmSel.charmHadBkgBDTmax && aod::fdhf::bdtFD < charmSel.charmHadFdBDTmax && aod::fdhf::bdtFD > charmSel.charmHadFdBDTmin&& aod::fdhf::bdtPrompt<charmSel.charmHadPromptBDTmax && aod::fdhf::bdtPrompt> charmSel.charmHadPromptBDTmin;
222245 Partition<FilteredCharmCand2Prongs> partitionCharmHadron2Prong = aod::fdhf::bdtBkg < charmSel.charmHadBkgBDTmax && aod::fdhf::bdtFD < charmSel.charmHadFdBDTmax && aod::fdhf::bdtFD > charmSel.charmHadFdBDTmin&& aod::fdhf::bdtPrompt<charmSel.charmHadPromptBDTmax && aod::fdhf::bdtPrompt> charmSel.charmHadPromptBDTmin;
@@ -717,9 +740,9 @@ struct HfTaskCharmHadronsV0FemtoDream {
717740 }
718741 }
719742
720- template <DecayChannel Channel, typename CharmPart>
721- void runMixing (FilteredCollisions const & cols,
722- FDV0Particles const & parts,
743+ template <bool IsMc, DecayChannel Channel, typename Cols, typename V0Part , typename CharmPart>
744+ void runMixing (Cols const & cols,
745+ V0Part const & parts,
723746 CharmPart& charmPart)
724747 {
725748 if (!mixSetting.doMixEvent ) {
@@ -728,23 +751,43 @@ struct HfTaskCharmHadronsV0FemtoDream {
728751 auto run = [&](auto & v0Part) {
729752 switch (mixSetting.mixingBinPolicy ) {
730753 case femtodreamcollision::kMult :
731- doMixedEvent<false , Channel, FilteredCollisions>(cols, charmPart, v0Part, parts, colBinningMult);
754+ if constexpr (IsMc) {
755+ doMixedEvent<IsMc, Channel, FilteredMcCollisions>(cols, charmPart, v0Part, parts, colBinningMult);
756+ } else {
757+ doMixedEvent<IsMc, Channel, FilteredCollisions>(cols, charmPart, v0Part, parts, colBinningMult);
758+ }
732759 break ;
733760 case femtodreamcollision::kMultPercentile :
734- doMixedEvent<false , Channel, FilteredCollisions>(cols, charmPart, v0Part, parts, colBinningMultPercentile);
761+ if constexpr (IsMc) {
762+ doMixedEvent<IsMc, Channel, FilteredMcCollisions>(cols, charmPart, v0Part, parts, colBinningMultPercentile);
763+ } else {
764+ doMixedEvent<IsMc, Channel, FilteredCollisions>(cols, charmPart, v0Part, parts, colBinningMultPercentile);
765+ }
735766 break ;
736767 case femtodreamcollision::kMultMultPercentile :
737- doMixedEvent<false , Channel, FilteredCollisions>(cols, charmPart, v0Part, parts, colBinningMultMultPercentile);
768+ if constexpr (IsMc) {
769+ doMixedEvent<IsMc, Channel, FilteredMcCollisions>(cols, charmPart, v0Part, parts, colBinningMultMultPercentile);
770+ } else {
771+ doMixedEvent<IsMc, Channel, FilteredCollisions>(cols, charmPart, v0Part, parts, colBinningMultMultPercentile);
772+ }
738773 break ;
739774 default :
740775 LOG (fatal) << " Invalid binning policiy specifed. Breaking..." ;
741776 }
742777 };
743778
744779 if (v0Sel.pdgCodeV0 == kLambda0 ) {
780+ if constexpr (IsMc) {
781+ run (partitionMcLambda);
782+ } else {
745783 run (partitionLambda);
784+ }
746785 } else if (v0Sel.pdgCodeV0 == kK0Short ) {
747- run (partitionK0Short);
786+ if constexpr (IsMc) {
787+ run (partitionMcK0Short);
788+ } else {
789+ run (partitionK0Short);
790+ }
748791 } else {
749792 LOG (fatal) << " Unsupported V0 PDG: " << v0Sel.pdgCodeV0 << " (allowed: 3122, 310) for mixed-events" ;
750793 }
@@ -781,7 +824,7 @@ struct HfTaskCharmHadronsV0FemtoDream {
781824 LOG (fatal) << " Unsupported V0 PDG: " << v0Sel.pdgCodeV0 << " (allowed: 3122, 310) for same events" ;
782825 }
783826 }
784- runMixing<DecayChannel::LcToPKPi>(cols, parts, partitionCharmHadron3Prong);
827+ runMixing<false , DecayChannel::LcToPKPi>(cols, parts, partitionCharmHadron3Prong);
785828 }
786829 PROCESS_SWITCH (HfTaskCharmHadronsV0FemtoDream, processDataLcV0, " Enable processing LcToPKPi and V0 correlation" , false );
787830
@@ -815,7 +858,7 @@ struct HfTaskCharmHadronsV0FemtoDream {
815858 LOG (fatal) << " Unsupported V0 PDG: " << v0Sel.pdgCodeV0 << " (allowed: 3122, 310)" ;
816859 }
817860 }
818- runMixing<DecayChannel::DplusToPiKPi>(cols, parts, partitionCharmHadron3Prong);
861+ runMixing<false , DecayChannel::DplusToPiKPi>(cols, parts, partitionCharmHadron3Prong);
819862 }
820863 PROCESS_SWITCH (HfTaskCharmHadronsV0FemtoDream, processDataDplusV0, " Enable processing DplusToPiKPi and V0 correlation" , false );
821864
@@ -849,7 +892,7 @@ struct HfTaskCharmHadronsV0FemtoDream {
849892 LOG (fatal) << " Unsupported V0 PDG: " << v0Sel.pdgCodeV0 << " (allowed: 3122, 310)" ;
850893 }
851894 }
852- runMixing<DecayChannel::D0ToPiK>(cols, parts, partitionCharmHadron2Prong);
895+ runMixing<false , DecayChannel::D0ToPiK>(cols, parts, partitionCharmHadron2Prong);
853896 }
854897 PROCESS_SWITCH (HfTaskCharmHadronsV0FemtoDream, processDataD0V0, " Enable processing D0ToPiK and V0 correlation" , false );
855898
@@ -884,9 +927,43 @@ struct HfTaskCharmHadronsV0FemtoDream {
884927 LOG (fatal) << " Unsupported V0 PDG: " << v0Sel.pdgCodeV0 << " (allowed: 3122, 310)" ;
885928 }
886929 }
887- runMixing<DecayChannel::DstarToD0Pi>(cols, parts, partitionCharmHadronDstar);
930+ runMixing<false , DecayChannel::DstarToD0Pi>(cols, parts, partitionCharmHadronDstar);
888931 }
889932 PROCESS_SWITCH (HfTaskCharmHadronsV0FemtoDream, processDataDstarV0, " Enable processing DstarToD0Pi and V0 correlation" , false );
933+
934+ void processMcDplusV0 (FilteredMcCollisions const & cols,
935+ FilteredFDMcParts const & parts,
936+ o2::aod::FDMCParticles const &,
937+ o2::aod::FDExtMCParticles const &,
938+ FilteredCharmMcCand3Prongs const &)
939+ {
940+ for (const auto & col : cols) {
941+ eventHisto.fillQA (col);
942+ auto sliceMcCharmHad = partitionMcCharmHadron3Prong->sliceByCached (aod::femtodreamparticle::fdCollisionId, col.globalIndex (), cache);
943+ if (fillTableWithCharm.value && sliceMcCharmHad.size () == 0 ) {
944+ continue ;
945+ }
946+ if (v0Sel.pdgCodeV0 == kLambda0 ) {
947+ auto sliceMcV0 = partitionMcLambda->sliceByCached (aod::femtodreamparticle::fdCollisionId, col.globalIndex (), cache);
948+ fillTables<true , DecayChannel::DplusToPiKPi>(col, sliceMcV0, sliceMcCharmHad, parts);
949+ if (sliceMcCharmHad.size () > 0 && sliceMcV0.size () > 0 ) {
950+ doSameEvent<true , DecayChannel::DplusToPiKPi, FilteredCharmMcCand3Prongs>(sliceMcCharmHad, sliceMcV0, parts, col);
951+ }
952+
953+ } else if (v0Sel.pdgCodeV0 == kK0Short ) {
954+ auto sliceMcV0 = partitionMcK0Short->sliceByCached (aod::femtodreamparticle::fdCollisionId, col.globalIndex (), cache);
955+ fillTables<true , DecayChannel::DplusToPiKPi>(col, sliceMcV0, sliceMcCharmHad, parts);
956+
957+ if (sliceMcCharmHad.size () > 0 && sliceMcV0.size () > 0 ) {
958+ doSameEvent<true , DecayChannel::DplusToPiKPi, FilteredCharmMcCand3Prongs>(sliceMcCharmHad, sliceMcV0, parts, col);
959+ }
960+ } else {
961+ LOG (fatal) << " Unsupported V0 PDG: " << v0Sel.pdgCodeV0 << " (allowed: 3122, 310)" ;
962+ }
963+ }
964+ runMixing<true , DecayChannel::DplusToPiKPi>(cols, parts, partitionMcCharmHadron3Prong);
965+ }
966+ PROCESS_SWITCH (HfTaskCharmHadronsV0FemtoDream, processMcDplusV0, " Enable processing DplusToPiKPi and V0 correlation for Monte Carlo" , false );
890967};
891968
892969WorkflowSpec defineDataProcessing (ConfigContext const & cfgc)
0 commit comments