@@ -111,9 +111,10 @@ enum V0Selections {
111111enum CascSelections {
112112 kCascNoCut = 0 ,
113113 kCascTopology ,
114+ kNSigmaTPCV0Daughters ,
114115 kRejectedXi ,
115- kAcceptedOmega ,
116116 kNSigmaTPC ,
117+ kAcceptedOmega ,
117118 kCascAll
118119};
119120
@@ -274,12 +275,12 @@ struct LfTreeCreatorClusterStudies {
274275 {" photon_conversion_position" , " Photon conversion position; #it{x} (cm); #it{y} (cm)" , {HistType::kTH2F , {{250 , -5 .f , 5 .f }, {250 , -5 .f , 5 .f }}}},
275276 {" photon_conversion_position_layer" , " Photon conversion position (ITS layers); #it{x} (cm); #it{y} (cm)" , {HistType::kTH2F , {{100 , -5 .f , 5 .f }, {100 , -5 .f , 5 .f }}}},
276277 {" casc_dca_daughter_pairs" , " DCA (xy) for cascade daughter pairs; DCA_{#it{xy}} (cm); counts" , {HistType::kTH1F , {{100 , -0.1 , 0.1 }}}},
277- {" Xi_vs_Omega" , " Mass Xi vs Omega; mass Omega (GeV/#it{c}^{2}); #it{m}_#Xi (GeV/#it{c}^{2})" , {HistType::kTH2F , {{50 , 1 .f , 2 .f }, {50 , 1 .f , 2 . f }}}},
278+ {" Xi_vs_Omega" , " Mass Xi vs Omega; #it{m}_{# Omega} (GeV/#it{c}^{2}); #it{m}_{ #Xi} (GeV/#it{c}^{2})" , {HistType::kTH2F , {{60 , 1 .5f , 2 .1f }, {50 , 1 .1f , 1 . 6f }}}},
278279 {" massOmega" , " Mass #Omega; signed #it{p}_{T} (GeV/#it{c}); #it{m}_{#Omega} (GeV/#it{c}^{2})" , {HistType::kTH2F , {{100 , -5 .f , 5 .f }, {400 , 1 .62f , 1 .72f }}}},
279280 {" massOmegaMc" , " Mass #Omega (MC); signed #it{p}_{T} (GeV/#it{c}); #it{m}_{#Omega} (GeV/#it{c}^{2})" , {HistType::kTH2F , {{100 , -5 .f , 5 .f }, {400 , 1 .62f , 1 .72f }}}},
280- {" massPi0" , " Mass #pi^{0}; #it{m}_{#pi^{0} } (GeV/#it{c}^{2})" , {HistType::kTH1F , {{100 , 0 .0f , 0 .200f }}}},
281- {" massPi0Mc" , " Mass #pi^{0} (MC); #it{m}_{#pi^{0} } (GeV/#it{c}^{2})" , {HistType::kTH1F , {{100 , 0 .0f , 0 .200f }}}},
282- {" massPi0WithBkg" , " Mass #pi^{0} with Background; #it{m}_{#pi^{0} } (GeV/#it{c}^{2}); counts" , {HistType::kTH1F , {{100 , 0 .0f , 0 .200f }}}},
281+ {" massPi0" , " Mass #pi^{0}; #it{m}_{ee } (GeV/#it{c}^{2})" , {HistType::kTH1F , {{100 , 0 .0f , 0 .200f }}}},
282+ {" massPi0Mc" , " Mass #pi^{0} (MC); #it{m}_{ee } (GeV/#it{c}^{2})" , {HistType::kTH1F , {{100 , 0 .0f , 0 .200f }}}},
283+ {" massPi0WithBkg" , " Mass #pi^{0} with Background; #it{m}_{ee } (GeV/#it{c}^{2}); counts" , {HistType::kTH1F , {{100 , 0 .0f , 0 .200f }}}},
283284 {" zVtx" , " Binning for the vertex z in cm; #it{z}_{vertex} (cm)" , {HistType::kTH1F , {{100 , -20 .f , 20 .f }}}},
284285 {" isPositive" , " is the candidate positive?; isPositive; counts" , {HistType::kTH1F , {{2 , -0 .5f , 1 .5f }}}},
285286
@@ -472,6 +473,23 @@ struct LfTreeCreatorClusterStudies {
472473 return true ;
473474 }
474475
476+ template <typename Track>
477+ bool selectPidV0Daughters (const Track& posTrack, const Track& negTrack, uint8_t v0Bitmask)
478+ {
479+ if (TESTBIT (v0Bitmask, Lambda)) {
480+ if (std::abs (posTrack.tpcNSigmaPr ()) > v0settingNsigmatpcPr || std::abs (negTrack.tpcNSigmaPi ()) > v0settingNsigmatpcPi) {
481+ return false ;
482+ }
483+ } else if (TESTBIT (v0Bitmask, AntiLambda)) {
484+ if (std::abs (posTrack.tpcNSigmaPi ()) > v0settingNsigmatpcPi || std::abs (negTrack.tpcNSigmaPr ()) > v0settingNsigmatpcPr) {
485+ return false ;
486+ }
487+ } else {
488+ return false ;
489+ }
490+ return true ;
491+ }
492+
475493 /* *
476494 * Fill the histograms for the V0 candidate and return the mass of the V0
477495 */
@@ -585,8 +603,9 @@ struct LfTreeCreatorClusterStudies {
585603 mHistograms .fill (HIST (cNames[partID]) + HIST (" /nSigmaTPC" ), track.p () * track.sign (), nsigmaTpc);
586604 mHistograms .fill (HIST (cNames[partID]) + HIST (" /nSigmaITS" ), track.p () * track.sign (), nsigmaIts);
587605 mHistograms .fill (HIST (cNames[partID]) + HIST (" /nSigmaTOF" ), track.p () * track.sign (), nsigmaTof);
588- if (partID == static_cast <int >(PartID::de) || partID == static_cast <int >(PartID::he))
606+ if (partID == static_cast <int >(PartID::de) || partID == static_cast <int >(PartID::he)) {
589607 mHistograms .fill (HIST (cNames[partID]) + HIST (" /TOFmass" ), track.p () * track.sign (), massTof);
608+ }
590609 mHistograms .fill (HIST (cNames[partID]) + HIST (" /pmatching" ), correctedTpcInnerParam * track.sign (), (correctedTpcInnerParam - track.p ()) / correctedTpcInnerParam);
591610 }
592611
@@ -740,7 +759,7 @@ struct LfTreeCreatorClusterStudies {
740759 }
741760
742761 const auto & timestamp = bc.timestamp ();
743- o2::parameters::GRPMagField* grpmag = 0x0 ;
762+ o2::parameters::GRPMagField* grpmag = nullptr ;
744763
745764 auto grpmagPath{" GLO/Config/GRPMagField" };
746765 grpmag = mccdb->getForTimeStamp <o2::parameters::GRPMagField>(" GLO/Config/GRPMagField" , timestamp);
@@ -805,24 +824,29 @@ struct LfTreeCreatorClusterStudies {
805824 LOG (info) << " resolution: " << mBBparamsDe [5 ];
806825
807826 std::vector<std::string> collisionSelectionLabels = {" All" , " sel8" , " z_{VTX} < 10 cm" };
808- for (int i = 0 ; i < Selections::kAll ; i++)
827+ for (int i = 0 ; i < Selections::kAll ; i++) {
809828 mHistograms .get <TH1 >(HIST (" collision_selections" ))->GetXaxis ()->SetBinLabel (i + 1 , collisionSelectionLabels[i].c_str ());
829+ }
810830
811831 std::vector<std::string> V0selectionLabels = {" All" , " daughter track quality" , " V0 topology" , " V0 mass selection" };
812- for (int i = 0 ; i < V0Selections::kV0All ; i++)
832+ for (int i = 0 ; i < V0Selections::kV0All ; i++) {
813833 mHistograms .get <TH1 >(HIST (" v0_selections" ))->GetXaxis ()->SetBinLabel (i + 1 , V0selectionLabels[i].c_str ());
834+ }
814835
815- std::vector<std::string> CascSelectionLabels = {" All" , " Topology" , " Veto Xi " , " Accepted Omega " , " n#sigma_{TPC} K" };
816- for (int i = 0 ; i < CascSelections::kCascAll ; i++)
836+ std::vector<std::string> CascSelectionLabels = {" All" , " Topology" , " n#sigma_{TPC} V0 daughters " , " Veto Xi " , " n#sigma_{TPC} K" , " Accepted Omega " };
837+ for (int i = 0 ; i < CascSelections::kCascAll ; i++) {
817838 mHistograms .get <TH1 >(HIST (" casc_selections" ))->GetXaxis ()->SetBinLabel (i + 1 , CascSelectionLabels[i].c_str ());
839+ }
818840
819841 std::vector<std::string> ESelectionLabels = {" All" , " Track quality" , " Primary" , " Pid" , " #pi^{0}" };
820- for (int i = 0 ; i < ESelections::kEAll ; i++)
842+ for (int i = 0 ; i < ESelections::kEAll ; i++) {
821843 mHistograms .get <TH1 >(HIST (" e_selections" ))->GetXaxis ()->SetBinLabel (i + 1 , ESelectionLabels[i].c_str ());
844+ }
822845
823846 std::vector<std::string> V0TypeLabels = {" K0s" , " #Lambda" , " #bar{#Lambda}" , " Photon" };
824- for (int i = 0 ; i < V0Type::V0TypeAll; i++)
847+ for (int i = 0 ; i < V0Type::V0TypeAll; i++) {
825848 mHistograms .get <TH1 >(HIST (" v0_type" ))->GetXaxis ()->SetBinLabel (i + 1 , V0TypeLabels[i].c_str ());
849+ }
826850 }
827851
828852 template <bool isMC = false , typename Tracks>
@@ -879,7 +903,6 @@ struct LfTreeCreatorClusterStudies {
879903
880904 const auto & posMcParticle = posTrack.mcParticle ();
881905 const auto & negMcParticle = negTrack.mcParticle ();
882-
883906 candidatePos.pdgCode = posMcParticle.pdgCode ();
884907 candidateNeg.pdgCode = negMcParticle.pdgCode ();
885908
@@ -906,6 +929,15 @@ struct LfTreeCreatorClusterStudies {
906929 }
907930 mHistograms .fill (HIST (" casc_selections" ), CascSelections::kCascTopology );
908931
932+ const auto & posTrack = cascade.template posTrack_as <Track>();
933+ const auto & negTrack = cascade.template negTrack_as <Track>();
934+ uint8_t v0Bitmask = 0 ;
935+ SETBIT (v0Bitmask, bachelorTrack.sign () < 0 ? V0Type::Lambda : V0Type::AntiLambda);
936+ if (!selectPidV0Daughters (posTrack, negTrack, v0Bitmask)) {
937+ return ;
938+ }
939+ mHistograms .fill (HIST (" casc_selections" ), CascSelections::kNSigmaTPCV0Daughters );
940+
909941 const float & massXi = cascade.mXi ();
910942 const float & massOmega = cascade.mOmega ();
911943 mHistograms .fill (HIST (" Xi_vs_Omega" ), massOmega, massXi);
@@ -914,17 +946,17 @@ struct LfTreeCreatorClusterStudies {
914946 return ;
915947 }
916948 mHistograms .fill (HIST (" casc_selections" ), CascSelections::kRejectedXi );
949+ if (std::abs (bachelorTrack.tpcNSigmaKa ()) > cascsettingNsigmatpc) {
950+ return ;
951+ }
952+ mHistograms .fill (HIST (" casc_selections" ), CascSelections::kNSigmaTPC );
917953
918954 mHistograms .fill (HIST (" massOmega" ), cascade.pt () * bachelorTrack.sign (), massOmega);
919955 if (std::abs (massOmega - o2::constants::physics::MassOmegaMinus) > cascsettingMassWindowOmega) {
920956 return ;
921957 }
922958 mHistograms .fill (HIST (" casc_selections" ), CascSelections::kAcceptedOmega );
923959
924- if (std::abs (bachelorTrack.tpcNSigmaKa ()) > cascsettingNsigmatpc) {
925- return ;
926- }
927- mHistograms .fill (HIST (" casc_selections" ), CascSelections::kNSigmaTPC );
928960 fillHistogramsParticle<PartID::ka, isMC>(bachelorTrack);
929961
930962 mClusterStudiesTable (
@@ -973,8 +1005,9 @@ struct LfTreeCreatorClusterStudies {
9731005 }
9741006 mHistograms .fill (HIST (cNames[kPartID ]) + HIST (" /trackSelections" ), NucleiSelections::kNucleiNoCut );
9751007
976- if (track.itsNCls () < desettingNclsIts)
1008+ if (track.itsNCls () < desettingNclsIts) {
9771009 return ;
1010+ }
9781011 mHistograms .fill (HIST (cNames[kPartID ]) + HIST (" /trackSelections" ), NucleiSelections::kNucleiNClsIts );
9791012
9801013 const float tpcNsigma = kPartID == static_cast <int >(PartID::de) ? track.tpcNSigmaDe () : computeNSigmaTPCHe3 (track);
@@ -1415,8 +1448,9 @@ struct LfTreeCreatorClusterStudies {
14151448 const auto & negTracks_thisCollision = negTracksMc.sliceByCached (o2::aod::track::collisionId, collision.globalIndex (), mcache);
14161449
14171450 for (const auto & [posTrack, negTrack] : o2::soa::combinations (o2::soa::CombinationsFullIndexPolicy (posTracks_thisCollision, negTracks_thisCollision))) {
1418- if (!posTrack.has_mcParticle () || !negTrack.has_mcParticle ())
1451+ if (!posTrack.has_mcParticle () || !negTrack.has_mcParticle ()) {
14191452 continue ;
1453+ }
14201454
14211455 fillElectronTableFromPi0Dalitz</* isMC*/ true >(posTrack, negTrack);
14221456 }
0 commit comments