Skip to content

Commit 36f51de

Browse files
Update taskCharmHadronsTrackFemtoDream.cxx
1 parent ecada77 commit 36f51de

File tree

1 file changed

+72
-34
lines changed

1 file changed

+72
-34
lines changed

PWGHF/HFC/Tasks/taskCharmHadronsTrackFemtoDream.cxx

Lines changed: 72 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
// granted to it by virtue of its status as an Intergovernmental Organization
1010
// or submit itself to any jurisdiction.
1111

12-
/// \file taskCharmHadronsFemtoDream.cxx
12+
/// \file HfTaskCharmHadronsTrackFemtoDream.cxx
1313
/// \brief Tasks that reads the track tables used for the pairing and builds pairs of two tracks
1414
/// \author Ravindra SIngh, GSI, ravindra.singh@cern.ch
1515
/// \author Biao Zhang, Heidelberg University, biao.zhang@cern.ch
@@ -91,6 +91,7 @@ struct HfTaskCharmHadronsTrackFemtoDream {
9191
constexpr static int OriginRecPrompt = 1;
9292
constexpr static int OriginRecFD = 2;
9393
constexpr static int CutBitChargePositive = 2;
94+
constexpr static uint32_t pidTrackPass = 1u;
9495

9596
Produces<o2::aod::FDHfCharmTrkPairs> rowFemtoResultPairs;
9697
Produces<o2::aod::FDHfCharm3Prong> rowFemtoResultCharm3Prong;
@@ -117,15 +118,17 @@ struct HfTaskCharmHadronsTrackFemtoDream {
117118
Configurable<float> charmHadPromptBDTmax{"charmHadPromptBDTmax", 1., "Maximum prompt bdt score Charm Hadron (particle 2)"};
118119
} charmSel;
119120
/// General options
120-
Configurable<float> cprDeltaEtaMax{"cprDeltaEtaMax", 0.01, "Max. Delta Eta for Close Pair Rejection"};
121-
Configurable<float> cprDeltaPhiMax{"cprDeltaPhiMax", 0.01, "Max. Delta Phi for Close Pair Rejection"};
122-
Configurable<bool> cprPlotPerRadii{"cprPlotPerRadii", false, "Plot CPR per radii"};
123-
Configurable<bool> extendedPlots{"extendedPlots", false, "Enable additional three dimensional histogramms. High memory consumption. Use for debugging"};
121+
struct : ConfigurableGroup {
122+
Configurable<float> cprDeltaEtaMax{"cprDeltaEtaMax", 0.01, "Max. Delta Eta for Close Pair Rejection"};
123+
Configurable<float> cprDeltaPhiMax{"cprDeltaPhiMax", 0.01, "Max. Delta Phi for Close Pair Rejection"};
124+
Configurable<bool> cprPlotPerRadii{"cprPlotPerRadii", false, "Plot CPR per radii"};
125+
Configurable<bool> extendedPlots{"extendedPlots", false, "Enable additional three dimensional histogramms. High memory consumption. Use for debugging"};
126+
Configurable<bool> use4D{"use4D", false, "Enable four dimensional histogramms (to be used only for analysis with high statistics): k* vs multiplicity vs multiplicity percentil vs mT"};
127+
Configurable<bool> useCPR{"useCPR", false, "Close Pair Rejection"};
128+
} pairQASetting;
124129
Configurable<float> highkstarCut{"highkstarCut", 100000., "Set a cut for high k*, above which the pairs are rejected"};
125130
Configurable<bool> isMc{"isMc", false, "Set true in the case of a MonteCarlo Run"};
126131
Configurable<bool> smearingByOrigin{"smearingByOrigin", false, "Obtain the smearing matrix differential in the MC origin of particle 1 and particle 2. High memory consumption. Use with care!"};
127-
Configurable<bool> use4D{"use4D", false, "Enable four dimensional histogramms (to be used only for analysis with high statistics): k* vs multiplicity vs multiplicity percentil vs mT"};
128-
Configurable<bool> useCPR{"useCPR", false, "Close Pair Rejection"};
129132
Configurable<bool> fillTableWithCharm{"fillTableWithCharm", true, "Write charm/tracks/collision table only if >=1 charm hadron in this collision"};
130133

131134
// Mixing configurables
@@ -203,11 +206,14 @@ struct HfTaskCharmHadronsTrackFemtoDream {
203206

204207
/// Partition for particle 1
205208
Partition<FilteredFDParticles> partitionTrk1 = (aod::femtodreamparticle::partType == uint8_t(aod::femtodreamparticle::ParticleType::kTrack)) && (ncheckbit(aod::femtodreamparticle::cut, trackSel.cutBitTrack1)) && ifnode(aod::femtodreamparticle::pt * coshEta(aod::femtodreamparticle::eta) <= trackSel.pidThresTrack1, ncheckbit(aod::femtodreamparticle::pidcut, trackSel.tpcBitTrack1), ncheckbit(aod::femtodreamparticle::pidcut, trackSel.tpcTofBitTrack1));
209+
Partition<FilteredFDParticles> partitionTrk1Ka = (aod::femtodreamparticle::partType == uint8_t(aod::femtodreamparticle::ParticleType::kTrack)) && (ncheckbit(aod::femtodreamparticle::cut, trackSel.cutBitTrack1)) && (aod::femtodreamparticle::pidcut == pidTrackPass);
206210

207211
Partition<FilteredFDMcParts> partitionMcTrk1 = (aod::femtodreamparticle::partType == uint8_t(aod::femtodreamparticle::ParticleType::kTrack)) &&
208212
(ncheckbit(aod::femtodreamparticle::cut, trackSel.cutBitTrack1)) &&
209213
ifnode(aod::femtodreamparticle::pt * coshEta(aod::femtodreamparticle::eta) <= trackSel.pidThresTrack1, ncheckbit(aod::femtodreamparticle::pidcut, trackSel.tpcBitTrack1), ncheckbit(aod::femtodreamparticle::pidcut, trackSel.tpcTofBitTrack1));
210214

215+
Partition<FilteredFDMcParts> partitionMcTrk1Ka = (aod::femtodreamparticle::partType == uint8_t(aod::femtodreamparticle::ParticleType::kTrack)) && (ncheckbit(aod::femtodreamparticle::cut, trackSel.cutBitTrack1)) && (aod::femtodreamparticle::pidcut == pidTrackPass);
216+
211217
/// Partition for particle 2
212218
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;
213219
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;
@@ -301,15 +307,15 @@ struct HfTaskCharmHadronsTrackFemtoDream {
301307
sameEventCont.init(&registry,
302308
binkstar, binpTTrack, binkT, binmT, mixingBinMult, mixingBinMultPercentile,
303309
bin4Dkstar, bin4DmT, bin4DMult, bin4DmultPercentile,
304-
isMc, use4D, extendedPlots,
310+
isMc, pairQASetting.use4D, pairQASetting.extendedPlots,
305311
highkstarCut,
306312
smearingByOrigin, binInvMass);
307313

308314
sameEventCont.setPDGCodes(trackSel.pdgCodeTrack1, charmSel.charmHadPDGCode);
309315
mixedEventCont.init(&registry,
310316
binkstar, binpTTrack, binkT, binmT, mixingBinMult, mixingBinMultPercentile,
311317
bin4Dkstar, bin4DmT, bin4DMult, bin4DmultPercentile,
312-
isMc, use4D, extendedPlots,
318+
isMc, pairQASetting.use4D, pairQASetting.extendedPlots,
313319
highkstarCut,
314320
smearingByOrigin, binInvMass);
315321

@@ -319,18 +325,18 @@ struct HfTaskCharmHadronsTrackFemtoDream {
319325
registryMixQa.add("MixingQA/hMECollisionBins", "; bin; Entries", kTH1F, {{120, -0.5, 119.5}});
320326
registryCharmHadronQa.add("CharmHadronQA/hPtVsMass", "; #it{p}_{T} (GeV/#it{c}); inv. mass (GeV/#it{c}^{2})", kTH2F, {binpTCharm, binInvMass});
321327

322-
if (useCPR.value && process3Prong) {
328+
if (pairQASetting.useCPR.value && process3Prong) {
323329
pairCleaner3Prong.init(&registry);
324-
pairCloseRejectionSE3Prong.init(&registry, &registry, cprDeltaPhiMax.value, cprDeltaEtaMax.value, cprPlotPerRadii.value, 1);
325-
pairCloseRejectionME3Prong.init(&registry, &registry, cprDeltaPhiMax.value, cprDeltaEtaMax.value, cprPlotPerRadii.value, 2);
326-
} else if (useCPR.value && process2Prong) {
330+
pairCloseRejectionSE3Prong.init(&registry, &registry, pairQASetting.cprDeltaPhiMax.value, pairQASetting.cprDeltaEtaMax.value, pairQASetting.cprPlotPerRadii.value, 1);
331+
pairCloseRejectionME3Prong.init(&registry, &registry, pairQASetting.cprDeltaPhiMax.value, pairQASetting.cprDeltaEtaMax.value, pairQASetting.cprPlotPerRadii.value, 2);
332+
} else if (pairQASetting.useCPR.value && process2Prong) {
327333
pairCleaner2Prong.init(&registry);
328-
pairCloseRejectionSE2Prong.init(&registry, &registry, cprDeltaPhiMax.value, cprDeltaEtaMax.value, cprPlotPerRadii.value, 1);
329-
pairCloseRejectionME2Prong.init(&registry, &registry, cprDeltaPhiMax.value, cprDeltaEtaMax.value, cprPlotPerRadii.value, 2);
330-
} else if (useCPR.value && processDstar) {
334+
pairCloseRejectionSE2Prong.init(&registry, &registry, pairQASetting.cprDeltaPhiMax.value, pairQASetting.cprDeltaEtaMax.value, pairQASetting.cprPlotPerRadii.value, 1);
335+
pairCloseRejectionME2Prong.init(&registry, &registry, pairQASetting.cprDeltaPhiMax.value, pairQASetting.cprDeltaEtaMax.value, pairQASetting.cprPlotPerRadii.value, 2);
336+
} else if (pairQASetting.useCPR.value && processDstar) {
331337
pairCleanerDstar.init(&registry);
332-
pairCloseRejectionSEDstar.init(&registry, &registry, cprDeltaPhiMax.value, cprDeltaEtaMax.value, cprPlotPerRadii.value, 1);
333-
pairCloseRejectionMEDstar.init(&registry, &registry, cprDeltaPhiMax.value, cprDeltaEtaMax.value, cprPlotPerRadii.value, 2);
338+
pairCloseRejectionSEDstar.init(&registry, &registry, pairQASetting.cprDeltaPhiMax.value, pairQASetting.cprDeltaEtaMax.value, pairQASetting.cprPlotPerRadii.value, 1);
339+
pairCloseRejectionMEDstar.init(&registry, &registry, pairQASetting.cprDeltaPhiMax.value, pairQASetting.cprDeltaEtaMax.value, pairQASetting.cprPlotPerRadii.value, 2);
334340
}
335341
}
336342

@@ -468,7 +474,7 @@ struct HfTaskCharmHadronsTrackFemtoDream {
468474
if (p1.trackId() == p2.prong0Id() || p1.trackId() == p2.prong1Id())
469475
continue;
470476

471-
if (useCPR.value) {
477+
if (pairQASetting.useCPR.value) {
472478
if (pairCloseRejectionSE2Prong.isClosePair(p1, p2, parts, col.magField())) {
473479
continue;
474480
}
@@ -482,7 +488,7 @@ struct HfTaskCharmHadronsTrackFemtoDream {
482488
if constexpr (Channel == DecayChannel::LcToPKPi || Channel == DecayChannel::DplusToPiKPi) {
483489
if (p1.trackId() == p2.prong0Id() || p1.trackId() == p2.prong1Id() || p1.trackId() == p2.prong2Id())
484490
continue;
485-
if (useCPR.value) {
491+
if (pairQASetting.useCPR.value) {
486492
if (pairCloseRejectionSE3Prong.isClosePair(p1, p2, parts, col.magField())) {
487493
continue;
488494
}
@@ -496,7 +502,7 @@ struct HfTaskCharmHadronsTrackFemtoDream {
496502
if constexpr (Channel == DecayChannel::DstarToD0Pi) {
497503
if (p1.trackId() == p2.prong0Id() || p1.trackId() == p2.prong1Id() || p1.trackId() == p2.prong2Id())
498504
continue;
499-
if (useCPR.value) {
505+
if (pairQASetting.useCPR.value) {
500506
if (pairCloseRejectionSEDstar.isClosePair(p1, p2, parts, col.magField())) {
501507
continue;
502508
}
@@ -568,7 +574,7 @@ struct HfTaskCharmHadronsTrackFemtoDream {
568574
charmHadMc,
569575
originType);
570576

571-
sameEventCont.setPair<IsMc, true>(p1, p2, col.multNtr(), col.multV0M(), use4D, extendedPlots, smearingByOrigin);
577+
sameEventCont.setPair<IsMc, true>(p1, p2, col.multNtr(), col.multV0M(), pairQASetting.use4D, pairQASetting.extendedPlots, smearingByOrigin);
572578
}
573579
}
574580

@@ -598,7 +604,7 @@ struct HfTaskCharmHadronsTrackFemtoDream {
598604

599605
if constexpr (Channel == DecayChannel::D0ToPiK) {
600606

601-
if (useCPR.value) {
607+
if (pairQASetting.useCPR.value) {
602608
if (pairCloseRejectionME2Prong.isClosePair(p1, p2, parts, collision1.magField())) {
603609
continue;
604610
}
@@ -611,7 +617,7 @@ struct HfTaskCharmHadronsTrackFemtoDream {
611617

612618
if constexpr (Channel == DecayChannel::DplusToPiKPi || Channel == DecayChannel::LcToPKPi) {
613619

614-
if (useCPR.value) {
620+
if (pairQASetting.useCPR.value) {
615621
if (pairCloseRejectionME3Prong.isClosePair(p1, p2, parts, collision1.magField())) {
616622
continue;
617623
}
@@ -624,7 +630,7 @@ struct HfTaskCharmHadronsTrackFemtoDream {
624630

625631
if constexpr (Channel == DecayChannel::DstarToD0Pi) {
626632

627-
if (useCPR.value) {
633+
if (pairQASetting.useCPR.value) {
628634
if (pairCloseRejectionME3Prong.isClosePair(p1, p2, parts, collision1.magField())) {
629635
continue;
630636
}
@@ -694,7 +700,7 @@ struct HfTaskCharmHadronsTrackFemtoDream {
694700
charmHadMc,
695701
originType);
696702

697-
mixedEventCont.setPair<IsMc, true>(p1, p2, collision1.multNtr(), collision1.multV0M(), use4D, extendedPlots, smearingByOrigin);
703+
mixedEventCont.setPair<IsMc, true>(p1, p2, collision1.multNtr(), collision1.multV0M(), pairQASetting.use4D, pairQASetting.extendedPlots, smearingByOrigin);
698704
}
699705
}
700706
}
@@ -831,7 +837,11 @@ struct HfTaskCharmHadronsTrackFemtoDream {
831837
{
832838
for (const auto& col : cols) {
833839
eventHisto.fillQA(col);
834-
auto sliceTrk1 = partitionTrk1->sliceByCached(aod::femtodreamparticle::fdCollisionId, col.globalIndex(), cache);
840+
auto* partitionTrk1Selected = &partitionTrk1;
841+
if (trackSel.pdgCodeTrack1.value == kKPlus) {
842+
partitionTrk1Selected = &partitionTrk1Ka;
843+
}
844+
auto sliceTrk1 = partitionTrk1Selected->sliceByCached(aod::femtodreamparticle::fdCollisionId, col.globalIndex(), cache);
835845
auto sliceCharmHad = partitionCharmHadron3Prong->sliceByCached(aod::femtodreamparticle::fdCollisionId, col.globalIndex(), cache);
836846
if (fillTableWithCharm.value && sliceCharmHad.size() == 0) {
837847
continue;
@@ -866,7 +876,11 @@ struct HfTaskCharmHadronsTrackFemtoDream {
866876
{
867877
for (const auto& col : cols) {
868878
eventHisto.fillQA(col);
869-
auto sliceTrk1 = partitionTrk1->sliceByCached(aod::femtodreamparticle::fdCollisionId, col.globalIndex(), cache);
879+
auto* partitionTrk1Selected = &partitionTrk1;
880+
if (trackSel.pdgCodeTrack1.value == kKPlus) {
881+
partitionTrk1Selected = &partitionTrk1Ka;
882+
}
883+
auto sliceTrk1 = partitionTrk1Selected->sliceByCached(aod::femtodreamparticle::fdCollisionId, col.globalIndex(), cache);
870884
auto sliceCharmHad = partitionCharmHadron3Prong->sliceByCached(aod::femtodreamparticle::fdCollisionId, col.globalIndex(), cache);
871885

872886
if (fillTableWithCharm.value && sliceCharmHad.size() == 0) {
@@ -902,7 +916,11 @@ struct HfTaskCharmHadronsTrackFemtoDream {
902916
{
903917
for (const auto& col : cols) {
904918
eventHisto.fillQA(col);
905-
auto sliceTrk1 = partitionTrk1->sliceByCached(aod::femtodreamparticle::fdCollisionId, col.globalIndex(), cache);
919+
auto* partitionTrk1Selected = &partitionTrk1;
920+
if (trackSel.pdgCodeTrack1.value == kKPlus) {
921+
partitionTrk1Selected = &partitionTrk1Ka;
922+
}
923+
auto sliceTrk1 = partitionTrk1Selected->sliceByCached(aod::femtodreamparticle::fdCollisionId, col.globalIndex(), cache);
906924
auto sliceCharmHad = partitionCharmHadron2Prong->sliceByCached(aod::femtodreamparticle::fdCollisionId, col.globalIndex(), cache);
907925
if (fillTableWithCharm.value && sliceCharmHad.size() == 0) {
908926
continue;
@@ -937,7 +955,11 @@ struct HfTaskCharmHadronsTrackFemtoDream {
937955
{
938956
for (const auto& col : cols) {
939957
eventHisto.fillQA(col);
940-
auto sliceTrk1 = partitionTrk1->sliceByCached(aod::femtodreamparticle::fdCollisionId, col.globalIndex(), cache);
958+
auto* partitionTrk1Selected = &partitionTrk1;
959+
if (trackSel.pdgCodeTrack1.value == kKPlus) {
960+
partitionTrk1Selected = &partitionTrk1Ka;
961+
}
962+
auto sliceTrk1 = partitionTrk1Selected->sliceByCached(aod::femtodreamparticle::fdCollisionId, col.globalIndex(), cache);
941963
auto sliceCharmHad = partitionCharmHadronDstar->sliceByCached(aod::femtodreamparticle::fdCollisionId, col.globalIndex(), cache);
942964
if (fillTableWithCharm.value && sliceCharmHad.size() == 0) {
943965
continue;
@@ -974,7 +996,11 @@ struct HfTaskCharmHadronsTrackFemtoDream {
974996
{
975997
for (const auto& col : cols) {
976998
eventHisto.fillQA(col);
977-
auto sliceMcTrk1 = partitionMcTrk1->sliceByCached(aod::femtodreamparticle::fdCollisionId, col.globalIndex(), cache);
999+
auto* partitionTrk1Selected = &partitionMcTrk1;
1000+
if (trackSel.pdgCodeTrack1.value == kKPlus) {
1001+
partitionTrk1Selected = &partitionMcTrk1Ka;
1002+
}
1003+
auto sliceMcTrk1 = partitionTrk1Selected->sliceByCached(aod::femtodreamparticle::fdCollisionId, col.globalIndex(), cache);
9781004
auto sliceMcCharmHad = partitionMcCharmHadron3Prong->sliceByCached(aod::femtodreamparticle::fdCollisionId, col.globalIndex(), cache);
9791005
if ((col.bitmaskTrackOne() & bitMask) != bitMask || (col.bitmaskTrackTwo() & bitMask) != bitMask) {
9801006
continue;
@@ -1005,7 +1031,11 @@ struct HfTaskCharmHadronsTrackFemtoDream {
10051031
{
10061032
for (const auto& col : cols) {
10071033
eventHisto.fillQA(col);
1008-
auto sliceMcTrk1 = partitionMcTrk1->sliceByCached(aod::femtodreamparticle::fdCollisionId, col.globalIndex(), cache);
1034+
auto* partitionTrk1Selected = &partitionMcTrk1;
1035+
if (trackSel.pdgCodeTrack1.value == kKPlus) {
1036+
partitionTrk1Selected = &partitionMcTrk1Ka;
1037+
}
1038+
auto sliceMcTrk1 = partitionTrk1Selected->sliceByCached(aod::femtodreamparticle::fdCollisionId, col.globalIndex(), cache);
10091039
auto sliceMcCharmHad = partitionMcCharmHadron3Prong->sliceByCached(aod::femtodreamparticle::fdCollisionId, col.globalIndex(), cache);
10101040
if ((col.bitmaskTrackOne() & bitMask) != bitMask || (col.bitmaskTrackTwo() & bitMask) != bitMask) {
10111041
continue;
@@ -1036,7 +1066,11 @@ struct HfTaskCharmHadronsTrackFemtoDream {
10361066
{
10371067
for (const auto& col : cols) {
10381068
eventHisto.fillQA(col);
1039-
auto sliceMcTrk1 = partitionMcTrk1->sliceByCached(aod::femtodreamparticle::fdCollisionId, col.globalIndex(), cache);
1069+
auto* partitionTrk1Selected = &partitionMcTrk1;
1070+
if (trackSel.pdgCodeTrack1.value == kKPlus) {
1071+
partitionTrk1Selected = &partitionMcTrk1Ka;
1072+
}
1073+
auto sliceMcTrk1 = partitionTrk1Selected->sliceByCached(aod::femtodreamparticle::fdCollisionId, col.globalIndex(), cache);
10401074
auto sliceMcCharmHad = partitionMcCharmHadron2Prong->sliceByCached(aod::femtodreamparticle::fdCollisionId, col.globalIndex(), cache);
10411075
if ((col.bitmaskTrackOne() & bitMask) != bitMask || (col.bitmaskTrackTwo() & bitMask) != bitMask) {
10421076
continue;
@@ -1067,7 +1101,11 @@ struct HfTaskCharmHadronsTrackFemtoDream {
10671101
{
10681102
for (const auto& col : cols) {
10691103
eventHisto.fillQA(col);
1070-
auto sliceMcTrk1 = partitionMcTrk1->sliceByCached(aod::femtodreamparticle::fdCollisionId, col.globalIndex(), cache);
1104+
auto* partitionTrk1Selected = &partitionMcTrk1;
1105+
if (trackSel.pdgCodeTrack1.value == kKPlus) {
1106+
partitionTrk1Selected = &partitionMcTrk1Ka;
1107+
}
1108+
auto sliceMcTrk1 = partitionTrk1Selected->sliceByCached(aod::femtodreamparticle::fdCollisionId, col.globalIndex(), cache);
10711109
auto sliceMcCharmHad = partitionMcCharmHadronDstar->sliceByCached(aod::femtodreamparticle::fdCollisionId, col.globalIndex(), cache);
10721110
if ((col.bitmaskTrackOne() & bitMask) != bitMask || (col.bitmaskTrackTwo() & bitMask) != bitMask) {
10731111
continue;

0 commit comments

Comments
 (0)