Skip to content

Commit 393236f

Browse files
committed
Add process function for MC D+V0 femtoscopy
1 parent 1681149 commit 393236f

1 file changed

Lines changed: 93 additions & 16 deletions

File tree

PWGHF/HFC/Tasks/taskCharmHadronsV0FemtoDream.cxx

Lines changed: 93 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -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

892969
WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)

0 commit comments

Comments
 (0)