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 (®istry,
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 (®istry,
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 (®istry);
324- pairCloseRejectionSE3Prong.init (®istry, ®istry, cprDeltaPhiMax.value , cprDeltaEtaMax.value , cprPlotPerRadii.value , 1 );
325- pairCloseRejectionME3Prong.init (®istry, ®istry, cprDeltaPhiMax.value , cprDeltaEtaMax.value , cprPlotPerRadii.value , 2 );
326- } else if (useCPR.value && process2Prong) {
330+ pairCloseRejectionSE3Prong.init (®istry, ®istry, pairQASetting. cprDeltaPhiMax .value , pairQASetting. cprDeltaEtaMax .value , pairQASetting. cprPlotPerRadii .value , 1 );
331+ pairCloseRejectionME3Prong.init (®istry, ®istry, pairQASetting. cprDeltaPhiMax .value , pairQASetting. cprDeltaEtaMax .value , pairQASetting. cprPlotPerRadii .value , 2 );
332+ } else if (pairQASetting. useCPR .value && process2Prong) {
327333 pairCleaner2Prong.init (®istry);
328- pairCloseRejectionSE2Prong.init (®istry, ®istry, cprDeltaPhiMax.value , cprDeltaEtaMax.value , cprPlotPerRadii.value , 1 );
329- pairCloseRejectionME2Prong.init (®istry, ®istry, cprDeltaPhiMax.value , cprDeltaEtaMax.value , cprPlotPerRadii.value , 2 );
330- } else if (useCPR.value && processDstar) {
334+ pairCloseRejectionSE2Prong.init (®istry, ®istry, pairQASetting. cprDeltaPhiMax .value , pairQASetting. cprDeltaEtaMax .value , pairQASetting. cprPlotPerRadii .value , 1 );
335+ pairCloseRejectionME2Prong.init (®istry, ®istry, pairQASetting. cprDeltaPhiMax .value , pairQASetting. cprDeltaEtaMax .value , pairQASetting. cprPlotPerRadii .value , 2 );
336+ } else if (pairQASetting. useCPR .value && processDstar) {
331337 pairCleanerDstar.init (®istry);
332- pairCloseRejectionSEDstar.init (®istry, ®istry, cprDeltaPhiMax.value , cprDeltaEtaMax.value , cprPlotPerRadii.value , 1 );
333- pairCloseRejectionMEDstar.init (®istry, ®istry, cprDeltaPhiMax.value , cprDeltaEtaMax.value , cprPlotPerRadii.value , 2 );
338+ pairCloseRejectionSEDstar.init (®istry, ®istry, pairQASetting. cprDeltaPhiMax .value , pairQASetting. cprDeltaEtaMax .value , pairQASetting. cprPlotPerRadii .value , 1 );
339+ pairCloseRejectionMEDstar.init (®istry, ®istry, 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