Skip to content

Commit ffce6c8

Browse files
authored
[PWGCF] Net charge fluctuations3 (#17825)
1 parent cd8cafa commit ffce6c8

1 file changed

Lines changed: 73 additions & 57 deletions

File tree

PWGCF/EbyEFluctuations/Tasks/nchCumulantsId.cxx

Lines changed: 73 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,15 @@ constexpr int McBitPR = 2;
6868
constexpr int McBitEL = 3;
6969
constexpr 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

7481
enum 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

Comments
 (0)