@@ -68,8 +68,15 @@ constexpr int McBitPR = 2;
6868constexpr int McBitEL = 3 ;
6969constexpr int McBitDE = 4 ;
7070
71- #define BITSET (mask, ithBit ) ((mask) |= (1 << (ithBit))) // avoid name bitset as std::bitset is already there
72- #define BITCHECK (mask, ithBit ) ((mask) & (1 << (ithBit))) // bit check will return int value, not bool, use BITCHECK != 0 in Analysi
71+ constexpr void BITSET (int & mask, int ithBit)
72+ {
73+ mask |= (1 << ithBit);
74+ }
75+
76+ constexpr bool BITCHECK (int mask, int ithBit)
77+ {
78+ return (mask & (1 << ithBit)) != 0 ;
79+ }
7380
7481enum PidEnum {
7582 kCh = 0 ,
@@ -212,6 +219,10 @@ struct NchCumulantsId {
212219 ConfigurableAxis subSampleAxis{" subSampleAxis" , {10 , 0 ., 10 .}, " Subsample" };
213220 TRandom3* fRandom = new TRandom3(0 ); // Random number generator for subsampling
214221 int currentSubsample = 0 ;
222+ Configurable<float > cfgCutPtMinKa{" cfgCutPtMinKa" , 0.30 , " min pT for kaon eff-correction inclusion" };
223+ Configurable<float > cfgCutPtMaxKa{" cfgCutPtMaxKa" , 1.20 , " max pT for kaon eff-correction inclusion (purity cutoff)" };
224+ Configurable<float > cfgCutPtMinPr{" cfgCutPtMinPr" , 0.40 , " min pT for proton eff-correction inclusion" };
225+ Configurable<float > cfgCutPtMaxPr{" cfgCutPtMaxPr" , 1.50 , " max pT for proton eff-correction inclusion (purity cutoff)" };
215226 } cfgEventSelection;
216227
217228 // Configurables for particle Identification
@@ -297,9 +308,11 @@ struct NchCumulantsId {
297308 double q4 = 0 .;
298309 };
299310
311+ static constexpr float KmaxWeight = 10 .0f ; // secondary safeguard for pr and kaon eff fix
312+
300313 inline void fillEffPower (EffPowerSums& p, float weight)
301314 {
302- if (weight <= 0 .f ) {
315+ if (weight <= 0 .f || weight > KmaxWeight ) {
303316 return ;
304317 }
305318
@@ -1008,54 +1021,44 @@ struct NchCumulantsId {
10081021 {
10091022 switch (pidMode) {
10101023 case kPi :
1011- if (std::fabs (track.tpcNSigmaPi ()) < nSigmaTPC &&
1012- std::fabs (track.tofNSigmaPi ()) < nSigmaTOF) {
1013- return true ;
1014- }
1015- break ;
1024+ return std::fabs (track.tpcNSigmaPi ()) < nSigmaTPC &&
1025+ std::fabs (track.tofNSigmaPi ()) < nSigmaTOF;
1026+
10161027 case kKa :
1017- if (std::fabs (track.tpcNSigmaKa ()) < nSigmaTPC &&
1018- std::fabs (track.tofNSigmaKa ()) < nSigmaTOF) {
1019- return true ;
1020- }
1021- break ;
1028+ return std::fabs (track.tpcNSigmaKa ()) < nSigmaTPC &&
1029+ std::fabs (track.tofNSigmaKa ()) < nSigmaTOF;
1030+
10221031 case kPr :
1023- if (std::fabs (track.tpcNSigmaPr ()) < nSigmaTPC &&
1024- std::fabs (track.tofNSigmaPr ()) < nSigmaTOF) {
1025- return true ;
1026- }
1027- break ;
1032+ return std::fabs (track.tpcNSigmaPr ()) < nSigmaTPC &&
1033+ std::fabs (track.tofNSigmaPr ()) < nSigmaTOF;
1034+
10281035 default :
10291036 return false ;
1030- break ;
10311037 }
1032- return false ;
10331038 }
10341039
10351040 template <int pidMode, typename T>
10361041 bool selIdEllipsoidalCut (const T& track, const float & nSigmaTPC, const float & nSigmaTOF)
10371042 {
10381043 switch (pidMode) {
10391044 case kPi :
1040- if ( std::pow (track.tpcNSigmaPi () / nSigmaTPC, 2 ) + std::pow (track. tofNSigmaPi () / nSigmaTOF, 2 ) < 1.0 ) {
1041- return true ;
1042- }
1043- break ;
1045+ return std::pow (track.tpcNSigmaPi () / nSigmaTPC, 2 ) +
1046+ std::pow (track. tofNSigmaPi () / nSigmaTOF, 2 ) <
1047+ 1.0 ;
1048+
10441049 case kKa :
1045- if ( std::pow (track.tpcNSigmaKa () / nSigmaTPC, 2 ) + std::pow (track. tofNSigmaKa () / nSigmaTOF, 2 ) < 1.0 ) {
1046- return true ;
1047- }
1048- break ;
1050+ return std::pow (track.tpcNSigmaKa () / nSigmaTPC, 2 ) +
1051+ std::pow (track. tofNSigmaKa () / nSigmaTOF, 2 ) <
1052+ 1.0 ;
1053+
10491054 case kPr :
1050- if ( std::pow (track.tpcNSigmaPr () / nSigmaTPC, 2 ) + std::pow (track. tofNSigmaPr () / nSigmaTOF, 2 ) < 1.0 ) {
1051- return true ;
1052- }
1053- break ;
1055+ return std::pow (track.tpcNSigmaPr () / nSigmaTPC, 2 ) +
1056+ std::pow (track. tofNSigmaPr () / nSigmaTOF, 2 ) <
1057+ 1.0 ;
1058+
10541059 default :
10551060 return false ;
1056- break ;
10571061 }
1058- return false ;
10591062 }
10601063
10611064 template <int pidMode, typename T>
@@ -1196,13 +1199,10 @@ struct NchCumulantsId {
11961199 template <typename T>
11971200 bool selTrackForId (const T& track)
11981201 {
1199- if (cfgIdElRejLowNSigma < track.tpcNSigmaEl () && track.tpcNSigmaEl () < cfgIdElRejHighNSigma &&
1200- std::fabs (track.tpcNSigmaPi ()) > cfgIdPiRejNSigma &&
1201- std::fabs (track.tpcNSigmaKa ()) > cfgIdKaRejNSigma &&
1202- std::fabs (track.tpcNSigmaPr ()) > cfgIdPrRejNSigma) {
1203- return false ;
1204- }
1205- return true ;
1202+ return !(cfgIdElRejLowNSigma < track.tpcNSigmaEl () && track.tpcNSigmaEl () < cfgIdElRejHighNSigma &&
1203+ std::fabs (track.tpcNSigmaPi ()) > cfgIdPiRejNSigma &&
1204+ std::fabs (track.tpcNSigmaKa ()) > cfgIdKaRejNSigma &&
1205+ std::fabs (track.tpcNSigmaPr ()) > cfgIdPrRejNSigma);
12061206 }
12071207
12081208 // Pion
@@ -1999,19 +1999,27 @@ struct NchCumulantsId {
19991999 fillGenTrackQA<genAnalysisDir, kPi , kNeg >(genAnalysis, mcTrack);
20002000 } else if (pdg == kKPlus ) {
20012001 // fillGenTrackQA<genAnalysisDir, kKa>(genAnalysis, mcTrack);
2002- nKaGen++;
2002+ if (mcTrack.pt () >= cfgEventSelection.cfgCutPtMinKa && mcTrack.pt () <= cfgEventSelection.cfgCutPtMaxKa ) {
2003+ nKaGen++;
2004+ }
20032005 fillGenTrackQA<genAnalysisDir, kKa , kPos >(genAnalysis, mcTrack);
20042006 } else if (pdg == kKMinus ) {
20052007 // fillGenTrackQA<genAnalysisDir, kKa>(genAnalysis, mcTrack);
2006- nAKaGen++;
2008+ if (mcTrack.pt () >= cfgEventSelection.cfgCutPtMinKa && mcTrack.pt () <= cfgEventSelection.cfgCutPtMaxKa ) {
2009+ nAKaGen++;
2010+ }
20072011 fillGenTrackQA<genAnalysisDir, kKa , kNeg >(genAnalysis, mcTrack);
20082012 } else if (pdg == kProton ) {
20092013 // fillGenTrackQA<genAnalysisDir, kPr>(genAnalysis, mcTrack);
2010- nPrGen++;
2014+ if (mcTrack.pt () >= cfgEventSelection.cfgCutPtMinPr && mcTrack.pt () <= cfgEventSelection.cfgCutPtMaxPr ) {
2015+ nPrGen++;
2016+ }
20112017 fillGenTrackQA<genAnalysisDir, kPr , kPos >(genAnalysis, mcTrack);
20122018 } else if (pdg == kProtonBar ) {
20132019 // fillGenTrackQA<genAnalysisDir, kPr>(genAnalysis, mcTrack);
2014- nAPrGen++;
2020+ if (mcTrack.pt () >= cfgEventSelection.cfgCutPtMinPr && mcTrack.pt () <= cfgEventSelection.cfgCutPtMaxPr ) {
2021+ nAPrGen++;
2022+ }
20152023 fillGenTrackQA<genAnalysisDir, kPr , kNeg >(genAnalysis, mcTrack);
20162024 }
20172025
@@ -2176,15 +2184,19 @@ struct NchCumulantsId {
21762184 }
21772185 } else if (trackIsKaon) {
21782186 if (track.sign () > 0 ) {
2179- nKaRec += hPtEtaForEffCorrection[kKa ][kPos ]->GetBinContent (ptEtaBin);
21802187 fillRecoTrackQA<recoAnalysisDir, kKa , kPos >(recoAnalysis, track);
2181- float weight = hPtEtaForEffCorrection[kKa ][kPos ]->GetBinContent (ptEtaBin);
2182- fillEffPower (kapPow, weight);
2188+ if (track.pt () >= cfgEventSelection.cfgCutPtMinKa && track.pt () <= cfgEventSelection.cfgCutPtMaxKa ) {
2189+ nKaRec += hPtEtaForEffCorrection[kKa ][kPos ]->GetBinContent (ptEtaBin);
2190+ float weight = hPtEtaForEffCorrection[kKa ][kPos ]->GetBinContent (ptEtaBin);
2191+ fillEffPower (kapPow, weight);
2192+ }
21832193 } else if (track.sign () < 0 ) {
2184- nAKaRec += hPtEtaForEffCorrection[kKa ][kNeg ]->GetBinContent (ptEtaBin);
21852194 fillRecoTrackQA<recoAnalysisDir, kKa , kNeg >(recoAnalysis, track);
2186- float weight = hPtEtaForEffCorrection[kKa ][kNeg ]->GetBinContent (ptEtaBin);
2187- fillEffPower (kamPow, weight);
2195+ if (track.pt () >= cfgEventSelection.cfgCutPtMinKa && track.pt () <= cfgEventSelection.cfgCutPtMaxKa ) {
2196+ nAKaRec += hPtEtaForEffCorrection[kKa ][kNeg ]->GetBinContent (ptEtaBin);
2197+ float weight = hPtEtaForEffCorrection[kKa ][kNeg ]->GetBinContent (ptEtaBin);
2198+ fillEffPower (kamPow, weight);
2199+ }
21882200 }
21892201 // PID band QA for kaons
21902202 if (idMethodKa == kTPCidentified ) {
@@ -2195,15 +2207,19 @@ struct NchCumulantsId {
21952207 }
21962208 } else if (trackIsProton) {
21972209 if (track.sign () > 0 ) {
2198- nPrRec += hPtEtaForEffCorrection[kPr ][kPos ]->GetBinContent (ptEtaBin);
21992210 fillRecoTrackQA<recoAnalysisDir, kPr , kPos >(recoAnalysis, track);
2200- float weight = hPtEtaForEffCorrection[kPr ][kPos ]->GetBinContent (ptEtaBin);
2201- fillEffPower (prPow, weight);
2211+ if (track.pt () >= cfgEventSelection.cfgCutPtMinPr && track.pt () <= cfgEventSelection.cfgCutPtMaxPr ) {
2212+ nPrRec += hPtEtaForEffCorrection[kPr ][kPos ]->GetBinContent (ptEtaBin);
2213+ float weight = hPtEtaForEffCorrection[kPr ][kPos ]->GetBinContent (ptEtaBin);
2214+ fillEffPower (prPow, weight);
2215+ }
22022216 } else if (track.sign () < 0 ) {
2203- nAPrRec += hPtEtaForEffCorrection[kPr ][kNeg ]->GetBinContent (ptEtaBin);
22042217 fillRecoTrackQA<recoAnalysisDir, kPr , kNeg >(recoAnalysis, track);
2205- float weight = hPtEtaForEffCorrection[kPr ][kNeg ]->GetBinContent (ptEtaBin);
2206- fillEffPower (aprPow, weight);
2218+ if (track.pt () >= cfgEventSelection.cfgCutPtMinPr && track.pt () <= cfgEventSelection.cfgCutPtMaxPr ) {
2219+ nAPrRec += hPtEtaForEffCorrection[kPr ][kNeg ]->GetBinContent (ptEtaBin);
2220+ float weight = hPtEtaForEffCorrection[kPr ][kNeg ]->GetBinContent (ptEtaBin);
2221+ fillEffPower (aprPow, weight);
2222+ }
22072223 }
22082224 // PID band QA for protons
22092225 if (idMethodPr == kTPCidentified ) {
0 commit comments