From b6de1a36f36da06264d68468482d12469c684ca1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?BiaoZhang=20=28=E5=BC=A0=E5=BD=AA=29?= <52267892+zhangbiao-phy@users.noreply.github.com> Date: Fri, 24 Jul 2026 14:47:52 +0200 Subject: [PATCH 1/2] Refactor mixed event handling for track selection Updated mixed event handling to use selected partition for track 1 based on PDG code. This change applies to multiple decay channels and ensures correct partitioning for mixed events. --- .../Tasks/taskCharmHadronsTrackFemtoDream.cxx | 160 +++++++++++------- 1 file changed, 100 insertions(+), 60 deletions(-) diff --git a/PWGHF/HFC/Tasks/taskCharmHadronsTrackFemtoDream.cxx b/PWGHF/HFC/Tasks/taskCharmHadronsTrackFemtoDream.cxx index e7f10007cfa..631faa12c98 100644 --- a/PWGHF/HFC/Tasks/taskCharmHadronsTrackFemtoDream.cxx +++ b/PWGHF/HFC/Tasks/taskCharmHadronsTrackFemtoDream.cxx @@ -920,15 +920,19 @@ struct HfTaskCharmHadronsTrackFemtoDream { } } if (mixSetting.doMixEvent) { + auto* partitionTrk1Selected = &partitionTrk1; + if (trackSel.pdgCodeTrack1.value == kKPlus) { + partitionTrk1Selected = &partitionTrk1Ka; + } switch (mixSetting.mixingBinPolicy) { case femtodreamcollision::kMult: - doMixedEvent(cols, partitionCharmHadron3Prong, partitionTrk1, parts, colBinningMult); + doMixedEvent(cols, partitionCharmHadron3Prong, *partitionTrk1Selected, parts, colBinningMult); break; case femtodreamcollision::kMultPercentile: - doMixedEvent(cols, partitionCharmHadron3Prong, partitionTrk1, parts, colBinningMultPercentile); + doMixedEvent(cols, partitionCharmHadron3Prong, *partitionTrk1Selected, parts, colBinningMultPercentile); break; case femtodreamcollision::kMultMultPercentile: - doMixedEvent(cols, partitionCharmHadron3Prong, partitionTrk1, parts, colBinningMultMultPercentile); + doMixedEvent(cols, partitionCharmHadron3Prong, *partitionTrk1Selected, parts, colBinningMultMultPercentile); break; default: LOG(fatal) << "Invalid binning policiy specifed. Breaking..."; @@ -962,15 +966,19 @@ struct HfTaskCharmHadronsTrackFemtoDream { } } if (mixSetting.doMixEvent) { + auto* partitionTrk1Selected = &partitionTrk1; + if (trackSel.pdgCodeTrack1.value == kKPlus) { + partitionTrk1Selected = &partitionTrk1Ka; + } switch (mixSetting.mixingBinPolicy) { case femtodreamcollision::kMult: - doMixedEvent(cols, partitionCharmHadron3Prong, partitionTrk1, parts, colBinningMult); + doMixedEvent(cols, partitionCharmHadron3Prong, *partitionTrk1Selected, parts, colBinningMult); break; case femtodreamcollision::kMultPercentile: - doMixedEvent(cols, partitionCharmHadron3Prong, partitionTrk1, parts, colBinningMultPercentile); + doMixedEvent(cols, partitionCharmHadron3Prong, *partitionTrk1Selected, parts, colBinningMultPercentile); break; case femtodreamcollision::kMultMultPercentile: - doMixedEvent(cols, partitionCharmHadron3Prong, partitionTrk1, parts, colBinningMultMultPercentile); + doMixedEvent(cols, partitionCharmHadron3Prong, *partitionTrk1Selected, parts, colBinningMultMultPercentile); break; default: LOG(fatal) << "Invalid binning policiy specifed. Breaking..."; @@ -1003,15 +1011,19 @@ struct HfTaskCharmHadronsTrackFemtoDream { } } if (mixSetting.doMixEvent) { + auto* partitionTrk1Selected = &partitionTrk1; + if (trackSel.pdgCodeTrack1.value == kKPlus) { + partitionTrk1Selected = &partitionTrk1Ka; + } switch (mixSetting.mixingBinPolicy) { case femtodreamcollision::kMult: - doMixedEvent(cols, partitionCharmHadron2Prong, partitionTrk1, parts, colBinningMult); + doMixedEvent(cols, partitionCharmHadron2Prong, *partitionTrk1Selected, parts, colBinningMult); break; case femtodreamcollision::kMultPercentile: - doMixedEvent(cols, partitionCharmHadron2Prong, partitionTrk1, parts, colBinningMultPercentile); + doMixedEvent(cols, partitionCharmHadron2Prong, *partitionTrk1Selected, parts, colBinningMultPercentile); break; case femtodreamcollision::kMultMultPercentile: - doMixedEvent(cols, partitionCharmHadron2Prong, partitionTrk1, parts, colBinningMultMultPercentile); + doMixedEvent(cols, partitionCharmHadron2Prong, *partitionTrk1Selected, parts, colBinningMultMultPercentile); break; default: LOG(fatal) << "Invalid binning policiy specifed. Breaking..."; @@ -1044,15 +1056,19 @@ struct HfTaskCharmHadronsTrackFemtoDream { } } if (mixSetting.doMixEvent) { + auto* partitionTrk1Selected = &partitionTrk1; + if (trackSel.pdgCodeTrack1.value == kKPlus) { + partitionTrk1Selected = &partitionTrk1Ka; + } switch (mixSetting.mixingBinPolicy) { case femtodreamcollision::kMult: - doMixedEvent(cols, partitionCharmHadronDstar, partitionTrk1, parts, colBinningMult); + doMixedEvent(cols, partitionCharmHadronDstar, *partitionTrk1Selected, parts, colBinningMult); break; case femtodreamcollision::kMultPercentile: - doMixedEvent(cols, partitionCharmHadronDstar, partitionTrk1, parts, colBinningMultPercentile); + doMixedEvent(cols, partitionCharmHadronDstar, *partitionTrk1Selected, parts, colBinningMultPercentile); break; case femtodreamcollision::kMultMultPercentile: - doMixedEvent(cols, partitionCharmHadronDstar, partitionTrk1, parts, colBinningMultMultPercentile); + doMixedEvent(cols, partitionCharmHadronDstar, *partitionTrk1Selected, parts, colBinningMultMultPercentile); break; default: LOG(fatal) << "Invalid binning policiy specifed. Breaking..."; @@ -1123,18 +1139,24 @@ struct HfTaskCharmHadronsTrackFemtoDream { } doSameEvent(sliceMcCharmHad, sliceMcTrk1, parts, col); } - switch (mixSetting.mixingBinPolicy) { - case femtodreamcollision::kMult: - doMixedEvent(cols, partitionMcCharmHadron3Prong, partitionMcTrk1, parts, colBinningMult); - break; - case femtodreamcollision::kMultPercentile: - doMixedEvent(cols, partitionMcCharmHadron3Prong, partitionMcTrk1, parts, colBinningMultPercentile); - break; - case femtodreamcollision::kMultMultPercentile: - doMixedEvent(cols, partitionMcCharmHadron3Prong, partitionMcTrk1, parts, colBinningMultMultPercentile); - break; - default: - LOG(fatal) << "Invalid binning policiy specifed. Breaking..."; + if (mixSetting.doMixEvent) { + auto* partitionTrk1Selected = &partitionMcTrk1; + if (trackSel.pdgCodeTrack1.value == kKPlus) { + partitionTrk1Selected = &partitionMcTrk1Ka; + } + switch (mixSetting.mixingBinPolicy) { + case femtodreamcollision::kMult: + doMixedEvent(cols, partitionMcCharmHadron3Prong, *partitionTrk1Selected, parts, colBinningMult); + break; + case femtodreamcollision::kMultPercentile: + doMixedEvent(cols, partitionMcCharmHadron3Prong, *partitionTrk1Selected, parts, colBinningMultPercentile); + break; + case femtodreamcollision::kMultMultPercentile: + doMixedEvent(cols, partitionMcCharmHadron3Prong, *partitionTrk1Selected, parts, colBinningMultMultPercentile); + break; + default: + LOG(fatal) << "Invalid binning policiy specifed. Breaking..."; + } } } PROCESS_SWITCH(HfTaskCharmHadronsTrackFemtoDream, processMcLcTrk, "Enable processing LcToPKPi and Tracks correlation for Monte Carlo", false); @@ -1158,18 +1180,24 @@ struct HfTaskCharmHadronsTrackFemtoDream { } doSameEvent(sliceMcCharmHad, sliceMcTrk1, parts, col); } - switch (mixSetting.mixingBinPolicy) { - case femtodreamcollision::kMult: - doMixedEvent(cols, partitionMcCharmHadron3Prong, partitionMcTrk1, parts, colBinningMult); - break; - case femtodreamcollision::kMultPercentile: - doMixedEvent(cols, partitionMcCharmHadron3Prong, partitionMcTrk1, parts, colBinningMultPercentile); - break; - case femtodreamcollision::kMultMultPercentile: - doMixedEvent(cols, partitionMcCharmHadron3Prong, partitionMcTrk1, parts, colBinningMultMultPercentile); - break; - default: - LOG(fatal) << "Invalid binning policiy specifed. Breaking..."; + if (mixSetting.doMixEvent) { + auto* partitionTrk1Selected = &partitionMcTrk1; + if (trackSel.pdgCodeTrack1.value == kKPlus) { + partitionTrk1Selected = &partitionMcTrk1Ka; + } + switch (mixSetting.mixingBinPolicy) { + case femtodreamcollision::kMult: + doMixedEvent(cols, partitionMcCharmHadron3Prong, *partitionTrk1Selected, parts, colBinningMult); + break; + case femtodreamcollision::kMultPercentile: + doMixedEvent(cols, partitionMcCharmHadron3Prong, *partitionTrk1Selected, parts, colBinningMultPercentile); + break; + case femtodreamcollision::kMultMultPercentile: + doMixedEvent(cols, partitionMcCharmHadron3Prong, *partitionTrk1Selected, parts, colBinningMultMultPercentile); + break; + default: + LOG(fatal) << "Invalid binning policiy specifed. Breaking..."; + } } } PROCESS_SWITCH(HfTaskCharmHadronsTrackFemtoDream, processMcDplusTrk, "Enable processing DplusToPiKPi and Tracks correlation for Monte Carlo", false); @@ -1193,18 +1221,24 @@ struct HfTaskCharmHadronsTrackFemtoDream { } doSameEvent(sliceMcCharmHad, sliceMcTrk1, parts, col); } - switch (mixSetting.mixingBinPolicy) { - case femtodreamcollision::kMult: - doMixedEvent(cols, partitionMcCharmHadron2Prong, partitionMcTrk1, parts, colBinningMult); - break; - case femtodreamcollision::kMultPercentile: - doMixedEvent(cols, partitionMcCharmHadron2Prong, partitionMcTrk1, parts, colBinningMultPercentile); - break; - case femtodreamcollision::kMultMultPercentile: - doMixedEvent(cols, partitionMcCharmHadron2Prong, partitionMcTrk1, parts, colBinningMultMultPercentile); - break; - default: - LOG(fatal) << "Invalid binning policiy specifed. Breaking..."; + if (mixSetting.doMixEvent) { + auto* partitionTrk1Selected = &partitionMcTrk1; + if (trackSel.pdgCodeTrack1.value == kKPlus) { + partitionTrk1Selected = &partitionMcTrk1Ka; + } + switch (mixSetting.mixingBinPolicy) { + case femtodreamcollision::kMult: + doMixedEvent(cols, partitionMcCharmHadron2Prong, *partitionTrk1Selected, parts, colBinningMult); + break; + case femtodreamcollision::kMultPercentile: + doMixedEvent(cols, partitionMcCharmHadron2Prong, *partitionTrk1Selected, parts, colBinningMultPercentile); + break; + case femtodreamcollision::kMultMultPercentile: + doMixedEvent(cols, partitionMcCharmHadron2Prong, *partitionTrk1Selected, parts, colBinningMultMultPercentile); + break; + default: + LOG(fatal) << "Invalid binning policiy specifed. Breaking..."; + } } } PROCESS_SWITCH(HfTaskCharmHadronsTrackFemtoDream, processMcD0Trk, "Enable processing D0ToPiK and Tracks correlation for Monte Carlo", false); @@ -1228,18 +1262,24 @@ struct HfTaskCharmHadronsTrackFemtoDream { } doSameEvent(sliceMcCharmHad, sliceMcTrk1, parts, col); } - switch (mixSetting.mixingBinPolicy) { - case femtodreamcollision::kMult: - doMixedEvent(cols, partitionMcCharmHadronDstar, partitionMcTrk1, parts, colBinningMult); - break; - case femtodreamcollision::kMultPercentile: - doMixedEvent(cols, partitionMcCharmHadronDstar, partitionMcTrk1, parts, colBinningMultPercentile); - break; - case femtodreamcollision::kMultMultPercentile: - doMixedEvent(cols, partitionMcCharmHadronDstar, partitionMcTrk1, parts, colBinningMultMultPercentile); - break; - default: - LOG(fatal) << "Invalid binning policiy specifed. Breaking..."; + if (mixSetting.doMixEvent) { + auto* partitionTrk1Selected = &partitionMcTrk1; + if (trackSel.pdgCodeTrack1.value == kKPlus) { + partitionTrk1Selected = &partitionMcTrk1Ka; + } + switch (mixSetting.mixingBinPolicy) { + case femtodreamcollision::kMult: + doMixedEvent(cols, partitionMcCharmHadronDstar, *partitionTrk1Selected, parts, colBinningMult); + break; + case femtodreamcollision::kMultPercentile: + doMixedEvent(cols, partitionMcCharmHadronDstar, *partitionTrk1Selected, parts, colBinningMultPercentile); + break; + case femtodreamcollision::kMultMultPercentile: + doMixedEvent(cols, partitionMcCharmHadronDstar, *partitionTrk1Selected, parts, colBinningMultMultPercentile); + break; + default: + LOG(fatal) << "Invalid binning policiy specifed. Breaking..."; + } } } PROCESS_SWITCH(HfTaskCharmHadronsTrackFemtoDream, processMcDstarTrk, "Enable processing DstarToD0Pi and Tracks correlation for Monte Carlo", false); From 55c4702c0255347917e9db5df91cb3cf74e165bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?BiaoZhang=20=28=E5=BC=A0=E5=BD=AA=29?= <52267892+zhangbiao-phy@users.noreply.github.com> Date: Fri, 24 Jul 2026 19:51:40 +0200 Subject: [PATCH 2/2] Fix the errors --- .../Tasks/taskCharmHadronsTrackFemtoDream.cxx | 25 +++++++------------ 1 file changed, 9 insertions(+), 16 deletions(-) diff --git a/PWGHF/HFC/Tasks/taskCharmHadronsTrackFemtoDream.cxx b/PWGHF/HFC/Tasks/taskCharmHadronsTrackFemtoDream.cxx index 631faa12c98..f02386d5894 100644 --- a/PWGHF/HFC/Tasks/taskCharmHadronsTrackFemtoDream.cxx +++ b/PWGHF/HFC/Tasks/taskCharmHadronsTrackFemtoDream.cxx @@ -382,10 +382,9 @@ struct HfTaskCharmHadronsTrackFemtoDream { if (cand.candidateSelFlag() == 1) { invMass = cand.m(std::array{MassPiPlus, MassKPlus}); return invMass; - } else { - invMass = cand.m(std::array{MassKPlus, MassPiPlus}); - return invMass; } + invMass = cand.m(std::array{MassKPlus, MassPiPlus}); + return invMass; } else if constexpr (Channel == DecayChannel::DstarToD0Pi) { // D* → D0π (PDG: 413) float mDstar = 0.f; float mD0 = 0.f; @@ -398,9 +397,8 @@ struct HfTaskCharmHadronsTrackFemtoDream { } if (ReturnDaughMass) { return mD0; - } else { - return mDstar - mD0; } + return mDstar - mD0; } else if constexpr (Channel == DecayChannel::XicToXiPiPi) { invMass = cand.m(std::array{MassXiMinus, MassPiPlus, MassPiPlus}); return invMass; @@ -621,7 +619,7 @@ struct HfTaskCharmHadronsTrackFemtoDream { } template - void doMixedEvent(CollisionType const& cols, PartitionType1& charms, PartitionType2& trks, TableTracks const& parts, BinningType policy) + void doMixedEvent(CollisionType const& cols, PartitionType1& charms, PartitionType2& trks, TableTracks const& parts, BinningType const& policy) { processType = 2; // for mixed event // Mixed events that contain the pair of interest @@ -912,9 +910,8 @@ struct HfTaskCharmHadronsTrackFemtoDream { auto sliceCharmHad = partitionCharmHadron3Prong->sliceByCached(aod::femtodreamparticle::fdCollisionId, col.globalIndex(), cache); if (fillTableWithCharm.value && sliceCharmHad.size() == 0) { continue; - } else { - fillTables(col, sliceTrk1, sliceCharmHad); } + fillTables(col, sliceTrk1, sliceCharmHad); if (sliceCharmHad.size() > 0 && sliceTrk1.size() > 0) { doSameEvent(sliceCharmHad, sliceTrk1, parts, col); } @@ -958,9 +955,8 @@ struct HfTaskCharmHadronsTrackFemtoDream { if (fillTableWithCharm.value && sliceCharmHad.size() == 0) { continue; - } else { - fillTables(col, sliceTrk1, sliceCharmHad); } + fillTables(col, sliceTrk1, sliceCharmHad); if (sliceCharmHad.size() > 0 && sliceTrk1.size() > 0) { doSameEvent(sliceCharmHad, sliceTrk1, parts, col); } @@ -1003,9 +999,8 @@ struct HfTaskCharmHadronsTrackFemtoDream { auto sliceCharmHad = partitionCharmHadron2Prong->sliceByCached(aod::femtodreamparticle::fdCollisionId, col.globalIndex(), cache); if (fillTableWithCharm.value && sliceCharmHad.size() == 0) { continue; - } else { - fillTables(col, sliceTrk1, sliceCharmHad); } + fillTables(col, sliceTrk1, sliceCharmHad); if (sliceCharmHad.size() > 0 && sliceTrk1.size() > 0) { doSameEvent(sliceCharmHad, sliceTrk1, parts, col); } @@ -1048,9 +1043,8 @@ struct HfTaskCharmHadronsTrackFemtoDream { auto sliceCharmHad = partitionCharmHadronDstar->sliceByCached(aod::femtodreamparticle::fdCollisionId, col.globalIndex(), cache); if (fillTableWithCharm.value && sliceCharmHad.size() == 0) { continue; - } else { - fillTables(col, sliceTrk1, sliceCharmHad); } + fillTables(col, sliceTrk1, sliceCharmHad); if (sliceCharmHad.size() > 0 && sliceTrk1.size() > 0) { doSameEvent(sliceCharmHad, sliceTrk1, parts, col); } @@ -1091,9 +1085,8 @@ struct HfTaskCharmHadronsTrackFemtoDream { auto sliceCharmHad = partitionCharmHadron3ProngXic->sliceByCached(aod::femtodreamparticle::fdCollisionId, col.globalIndex(), cache); if (fillTableWithCharm.value && sliceCharmHad.size() == 0) { continue; - } else { - fillTables(col, sliceTrk1, sliceCharmHad); } + fillTables(col, sliceTrk1, sliceCharmHad); if (sliceCharmHad.size() > 0 && sliceTrk1.size() > 0) { doSameEvent(sliceCharmHad, sliceTrk1, parts, col); }