Skip to content

Commit 919cc6d

Browse files
author
Preet Pati
committed
Fixing the logical issues with resonance reconstruction
1 parent 6525979 commit 919cc6d

1 file changed

Lines changed: 36 additions & 48 deletions

File tree

PWGCF/TwoParticleCorrelations/Tasks/corrReso.cxx

Lines changed: 36 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -77,14 +77,10 @@ struct CorrReso {
7777

7878
O2_DEFINE_CONFIGURABLE(cfgUseAdditionalEventCut, bool, true, "Use additional event cut on mult correlations")
7979
O2_DEFINE_CONFIGURABLE(cfgZVtxCut, float, 10.0f, "Accepted z-vertex range")
80-
O2_DEFINE_CONFIGURABLE(cfgUseTransverseMomentum, bool, false, "Use transverse momentum for correlation container")
8180
O2_DEFINE_CONFIGURABLE(cfgQaCheck, bool, true, "Enable QA histograms for event selection")
8281
O2_DEFINE_CONFIGURABLE(cfgStrictTrackCounter, bool, false, "Strict track counter for multiplicity correlation cut, counts only tracks that pass all cuts and are used in the correlation")
83-
O2_DEFINE_CONFIGURABLE(cfgRefpTt, bool, false, "Apply upper pT cut on reference tracks")
84-
O2_DEFINE_CONFIGURABLE(cfgRefpTMax, float, 3.0f, "maximum pT for reference tracks if cfgRefpTt is true")
8582
O2_DEFINE_CONFIGURABLE(cfgMinMultForCorrelations, int, 0, "minimum multiplicity for correlations")
8683
O2_DEFINE_CONFIGURABLE(cfgMaxMultForCorrelations, int, 20, "maximum multiplicity for correlations")
87-
O2_DEFINE_CONFIGURABLE(cfgRefMultiplicity, bool, false, "Use multiplicity of reference tracks for multiplicity correlation cut instead of Nch")
8884
Configurable<std::vector<int>> cfgRunRemoveList{"cfgRunRemoveList", std::vector<int>{-1}, "excluded run numbers"};
8985
O2_DEFINE_CONFIGURABLE(cfgEvSelRCTflags, std::string, "", "keep empty to disable, usage: 'CentralBarrelTracking (CBT)', 'CBT_hadronPID' ")
9086

@@ -111,7 +107,6 @@ struct CorrReso {
111107
O2_DEFINE_CONFIGURABLE(cfgCentralityWeight, std::string, "", "CCDB path to centrality weight object")
112108
O2_DEFINE_CONFIGURABLE(cfgLocalEfficiency, bool, false, "Use local efficiency object")
113109
O2_DEFINE_CONFIGURABLE(cfgLocalEfficiencyNch, bool, false, "Use local multiplicity dependent efficiency object");
114-
O2_DEFINE_CONFIGURABLE(cfgUseEventWeights, bool, false, "Use event weights for mixed event")
115110
O2_DEFINE_CONFIGURABLE(cfgCentEstimator, int, 0, "0:FT0C; 1:FT0CVariant1; 2:FT0M; 3:FT0A")
116111

117112
struct : ConfigurableGroup {
@@ -148,15 +143,14 @@ struct CorrReso {
148143

149144
struct : ConfigurableGroup {
150145
O2_DEFINE_CONFIGURABLE(cfgUseOnlyTPC, bool, true, "Use only TPC PID for daughter selection")
151-
O2_DEFINE_CONFIGURABLE(cfgUseAntiLambda, bool, true, "Use AntiLambda candidates for analysis")
152146
O2_DEFINE_CONFIGURABLE(cfgPIDUseRejection, bool, true, "True: use exclusion exclusion criteria for PID determination, false: don't use exclusion")
153147
O2_DEFINE_CONFIGURABLE(cfgTpcCut, float, 3.0f, "TPC N-sigma cut for pions, kaons, protons")
154148
O2_DEFINE_CONFIGURABLE(cfgPIDParticle, int, 0, "4 = kshort, 5 = lambda, 6 = phi, 0 for no PID")
155149
O2_DEFINE_CONFIGURABLE(cfgUseItsPID, bool, true, "Use ITS PID for particle identification")
156150
O2_DEFINE_CONFIGURABLE(cfgTofPtCut, float, 0.4f, "Minimum pt to use TOF N-sigma")
157151
Configurable<LabeledArray<float>> nSigmas{"nSigmas", {LongArrayFloat.front().data(), 6, 3, {"UpCut_pi", "UpCut_ka", "UpCut_pr", "LowCut_pi", "LowCut_ka", "LowCut_pr"}, {"TPC", "TOF", "ITS"}}, "Labeled array for n-sigma values for TPC, TOF, ITS for pions, kaons, protons (positive and negative)"};
158-
Configurable<LabeledArray<float>> cfgResoCuts{"cfgResoCuts", {LongArrayFloat.front().data(), 12, 3, {"cos_PAs", "massMin", "massMax", "PosTrackPt", "NegTrackPt", "DCAPosToPVMin", "DCANegToPVMin", "Lifetime", "RadiusMin", "RadiusMax", "Rapidity", "ArmPodMinVal"}, {"K0", "Lambda", "Phi"}}, "Labeled array (float) for various cuts on resonances"};
159-
Configurable<LabeledArray<int>> cfgResoSwitches{"cfgResoSwitches", {LongArrayInt.front().data(), 6, 3, {"UseCosPA", "NMassBins", "DCABetDaug", "UseProperLifetime", "UseV0Radius", "UseArmPodCut"}, {"K0", "Lambda", "Phi"}}, "Labeled array (int) for various cuts on resonances"};
152+
Configurable<LabeledArray<float>> cfgResoCuts{"cfgResoCuts", {LongArrayFloat.front().data(), 13, 3, {"cos_PAs", "massMin", "massMax", "PosTrackPt", "NegTrackPt", "DCAPosToPVMin", "DCANegToPVMin", "Lifetime", "RadiusMin", "RadiusMax", "Rapidity", "ArmPodMinVal", "DCABetDaug"}, {"K0", "Lambda", "Phi"}}, "Labeled array (float) for various cuts on resonances"};
153+
Configurable<LabeledArray<int>> cfgResoSwitches{"cfgResoSwitches", {LongArrayInt.front().data(), 6, 3, {"UseCosPA", "NMassBins", "UseDCABetDaug", "UseProperLifetime", "UseV0Radius", "UseArmPodCut"}, {"K0", "Lambda", "Phi"}}, "Labeled array (int) for various cuts on resonances"};
160154
} cfgPIDConfigs;
161155

162156
Configurable<float> cfgCutFV0{"cfgCutFV0", 50., "FV0A threshold"};
@@ -178,7 +172,6 @@ struct CorrReso {
178172
ConfigurableAxis axisVtxMix{"axisVtxMix", {VARIABLE_WIDTH, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, "vertex axis for mixed event histograms"};
179173
ConfigurableAxis axisMultMix{"axisMultMix", {VARIABLE_WIDTH, 0, 10, 20, 40, 60, 80, 100, 120, 140, 160, 180, 200, 220, 240, 260}, "multiplicity / centrality axis for mixed event histograms"};
180174
ConfigurableAxis axisSample{"axisSample", {cfgSampleSize, 0, cfgSampleSize}, "sample axis for histograms"};
181-
ConfigurableAxis axisNch{"axisNch", {VARIABLE_WIDTH, 0, 10, 50, 70, 100}, "multiplicity axis for correlation container"};
182175

183176
ConfigurableAxis axisNsigmaTPC{"axisNsigmaTPC", {80, -5, 5}, "nsigmaTPC axis"};
184177
ConfigurableAxis axisNsigmaTOF{"axisNsigmaTOF", {80, -5, 5}, "nsigmaTOF axis"};
@@ -272,12 +265,13 @@ struct CorrReso {
272265
kRadiusMax,
273266
kRapidity,
274267
kArmPodMinVal,
268+
kDCABetDaug,
275269
kNParticleCuts
276270
};
277271
enum ResoParticleSwitches {
278272
kUseCosPA = 0,
279273
kMassBins,
280-
kDCABetDaug,
274+
kUseDCABetDaug,
281275
kUseProperLifetime,
282276
kUseV0Radius,
283277
kUseArmPodCut,
@@ -389,12 +383,10 @@ struct CorrReso {
389383
registry.add("PrPlusTOF_La", "", {HistType::kTH2D, {{axisPtFiner, axisNsigmaTOF}}});
390384
registry.add("PiMinusTOF_La", "", {HistType::kTH2D, {{axisPtFiner, axisNsigmaTOF}}});
391385

392-
if (cfgPIDConfigs.cfgUseAntiLambda) {
393-
registry.add("PrMinusTPC_Al", "", {HistType::kTH2D, {{axisPtFiner, axisNsigmaTPC}}});
394-
registry.add("PiPlusTPC_Al", "", {HistType::kTH2D, {{axisPtFiner, axisNsigmaTPC}}});
395-
registry.add("PrMinusTOF_Al", "", {HistType::kTH2D, {{axisPtFiner, axisNsigmaTOF}}});
396-
registry.add("PiPlusTOF_Al", "", {HistType::kTH2D, {{axisPtFiner, axisNsigmaTOF}}});
397-
}
386+
registry.add("PrMinusTPC_Al", "", {HistType::kTH2D, {{axisPtFiner, axisNsigmaTPC}}});
387+
registry.add("PiPlusTPC_Al", "", {HistType::kTH2D, {{axisPtFiner, axisNsigmaTPC}}});
388+
registry.add("PrMinusTOF_Al", "", {HistType::kTH2D, {{axisPtFiner, axisNsigmaTOF}}});
389+
registry.add("PiPlusTOF_Al", "", {HistType::kTH2D, {{axisPtFiner, axisNsigmaTOF}}});
398390

399391
registry.add("hLambdaPhi", "", {HistType::kTH1D, {axisPhi}});
400392
registry.add("hLambdaEta", "", {HistType::kTH1D, {axisEta}});
@@ -759,7 +751,7 @@ struct CorrReso {
759751
}
760752

761753
auto occupancy = collision.trackOccupancyInTimeRange();
762-
if (cfgUseEventCuts->getData()[kUseOccupancy][kEvCut1] && (occupancy < cfgEventSelection.cfgCutOccupancyLow || occupancy > cfgEventSelection.cfgCutOccupancyHigh)) {
754+
if (cfgUseEventCuts->getData()[kUseOccupancy][kEvCut1] && (occupancy > cfgEventSelection.cfgCutOccupancyLow && occupancy < cfgEventSelection.cfgCutOccupancyHigh)) {
763755
registry.fill(HIST("hPassedEventSelection"), kUseOccupancy);
764756
}
765757
}
@@ -806,7 +798,7 @@ struct CorrReso {
806798
template <typename TTrack>
807799
bool trackSelected(TTrack const& track)
808800
{
809-
return ((track.tpcNClsFound() >= cfgTrackCuts.cfgCutTPCclu) && (track.tpcNClsCrossedRows() >= cfgTrackCuts.cfgCutTPCCrossedRows) && (track.itsNCls() >= cfgTrackCuts.cfgCutITSclu) && (track.tpcChi2NCl() < cfgTrackCuts.cfgCutChi2prTPCcls) && (track.dcaZ() < cfgTrackCuts.cfgCutDCAz));
801+
return ((track.tpcNClsFound() >= cfgTrackCuts.cfgCutTPCclu) && (track.tpcNClsCrossedRows() >= cfgTrackCuts.cfgCutTPCCrossedRows) && (track.itsNCls() >= cfgTrackCuts.cfgCutITSclu) && (track.tpcChi2NCl() < cfgTrackCuts.cfgCutChi2prTPCcls) && (std::abs(track.dcaZ()) < cfgTrackCuts.cfgCutDCAz));
810802
}
811803

812804
void loadGain(aod::BCsWithTimestamps::iterator const& bc)
@@ -917,15 +909,15 @@ struct CorrReso {
917909
template <typename TTrack>
918910
bool selectionV0Daughter(TTrack const& track, int pid)
919911
{
920-
if (!(track.itsNCls() > cfgTrackCuts.cfgCutITSclu))
912+
if (!(track.itsNCls() >= cfgTrackCuts.cfgCutITSclu))
921913
return false;
922914
if (!track.hasTPC())
923915
return false;
924916
if (!(track.tpcNClsFound() >= cfgTrackCuts.cfgCutTPCclu))
925917
return false;
926918
if (!(track.tpcNClsCrossedRows() >= cfgTrackCuts.cfgCutTPCCrossedRows))
927919
return false;
928-
if (!(track.dcaZ() < cfgTrackCuts.cfgCutDCAz))
920+
if (!(std::abs(track.dcaZ()) < cfgTrackCuts.cfgCutDCAz))
929921
return false;
930922

931923
if (cfgPIDConfigs.cfgUseOnlyTPC) {
@@ -1029,11 +1021,6 @@ struct CorrReso {
10291021
float weightNch = 1.0f;
10301022
for (auto const& track : tracks) {
10311023

1032-
if (cfgRefMultiplicity) {
1033-
if (track.pt() > cfgRefpTMax)
1034-
continue;
1035-
}
1036-
10371024
if (!getEfficiencyCorrectionNch(weightNch, track.pt())) {
10381025
continue;
10391026
}
@@ -1056,7 +1043,7 @@ struct CorrReso {
10561043
continue;
10571044
}
10581045

1059-
if (!getEfficiencyCorrection(weff1, track1.eta(), track1.pt(), zvtx)) {
1046+
if (!getEfficiencyCorrection(weff1, track1.pt(), track1.eta(), zvtx)) {
10601047
continue;
10611048
}
10621049

@@ -1081,31 +1068,31 @@ struct CorrReso {
10811068
if (postrack.pt() < cfgPIDConfigs.cfgResoCuts->getData()[kPosTrackPt][iK0] || negtrack.pt() < cfgPIDConfigs.cfgResoCuts->getData()[kNegTrackPt][iK0])
10821069
return false;
10831070
registry.fill(HIST("hK0Count"), 1.5);
1084-
if (mk0 < cfgPIDConfigs.cfgResoCuts->getData()[kMassMin][iK0] && mk0 > cfgPIDConfigs.cfgResoCuts->getData()[kMassMax][iK0])
1071+
if (mk0 < cfgPIDConfigs.cfgResoCuts->getData()[kMassMin][iK0] || mk0 > cfgPIDConfigs.cfgResoCuts->getData()[kMassMax][iK0])
10851072
return false;
10861073
registry.fill(HIST("hK0Count"), 2.5);
10871074
// Rapidity correction
1088-
if (candidate.yK0Short() > cfgPIDConfigs.cfgResoCuts->getData()[kRapidity][iK0])
1075+
if (std::abs(candidate.yK0Short()) > cfgPIDConfigs.cfgResoCuts->getData()[kRapidity][iK0])
10891076
return false;
10901077
registry.fill(HIST("hK0Count"), 3.5);
10911078
// DCA cuts for K0short
10921079
if (std::abs(candidate.dcapostopv()) < cfgPIDConfigs.cfgResoCuts->getData()[kDCAPosToPVMin][iK0] || std::abs(candidate.dcanegtopv()) < cfgPIDConfigs.cfgResoCuts->getData()[kDCANegToPVMin][iK0])
10931080
return false;
10941081
registry.fill(HIST("hK0Count"), 4.5);
1095-
if (std::abs(candidate.dcaV0daughters()) > cfgPIDConfigs.cfgResoSwitches->getData()[kDCABetDaug][iK0])
1082+
if (cfgPIDConfigs.cfgResoSwitches->getData()[kUseDCABetDaug][iK0] && std::abs(candidate.dcaV0daughters()) > cfgPIDConfigs.cfgResoCuts->getData()[kDCABetDaug][iK0])
10961083
return false;
10971084
registry.fill(HIST("hK0Count"), 5.5);
10981085
// v0 radius cuts
10991086
if (cfgPIDConfigs.cfgResoSwitches->getData()[kUseV0Radius][iK0] && (candidate.v0radius() < cfgPIDConfigs.cfgResoCuts->getData()[kRadiusMin][iK0] || candidate.v0radius() > cfgPIDConfigs.cfgResoCuts->getData()[kRadiusMax][iK0]))
11001087
return false;
11011088
registry.fill(HIST("hK0Count"), 6.5);
11021089
// cosine pointing angle cuts
1103-
if (candidate.v0cosPA() < cfgPIDConfigs.cfgResoCuts->getData()[kCosPA][iK0])
1090+
if (cfgPIDConfigs.cfgResoSwitches->getData()[kUseCosPA][iK0] && candidate.v0cosPA() < cfgPIDConfigs.cfgResoCuts->getData()[kCosPA][iK0])
11041091
return false;
11051092
registry.fill(HIST("hK0Count"), 7.5);
11061093
// Proper lifetime
11071094
float cTauK0 = candidate.distovertotmom(posX, posY, posZ) * massK0Short;
1108-
if (cfgPIDConfigs.cfgResoSwitches->getData()[kUseProperLifetime][iK0] && std::abs(cTauK0) > cfgPIDConfigs.cfgResoCuts->getData()[kLifeTime][iK0])
1095+
if (cfgPIDConfigs.cfgResoSwitches->getData()[kUseProperLifetime][iK0] && cTauK0 > cfgPIDConfigs.cfgResoCuts->getData()[kLifeTime][iK0])
11091096
return false;
11101097
registry.fill(HIST("hK0Count"), 8.5);
11111098
// ArmenterosPodolanskiCut
@@ -1156,48 +1143,50 @@ struct CorrReso {
11561143
registry.fill(HIST("hLambdaCount"), 2.5);
11571144

11581145
// Rapidity correction
1159-
if (candidate.yLambda() > cfgPIDConfigs.cfgResoCuts->getData()[kRapidity][iLambda])
1146+
if (std::abs(candidate.yLambda()) > cfgPIDConfigs.cfgResoCuts->getData()[kRapidity][iLambda])
11601147
return false;
11611148
registry.fill(HIST("hLambdaCount"), 3.5);
1149+
11621150
// DCA cuts for lambda and antilambda
1163-
if (isL) {
1164-
if (std::abs(candidate.dcapostopv()) < cfgPIDConfigs.cfgResoCuts->getData()[kDCAPosToPVMin][iLambda] || std::abs(candidate.dcanegtopv()) < cfgPIDConfigs.cfgResoCuts->getData()[kDCANegToPVMin][iLambda])
1165-
return false;
1151+
if (isL && (std::abs(candidate.dcapostopv()) < cfgPIDConfigs.cfgResoCuts->getData()[kDCAPosToPVMin][iLambda] || std::abs(candidate.dcanegtopv()) < cfgPIDConfigs.cfgResoCuts->getData()[kDCANegToPVMin][iLambda])) {
1152+
isL = false;
11661153
}
1167-
if (isAL) {
1168-
if (std::abs(candidate.dcapostopv()) < cfgPIDConfigs.cfgResoCuts->getData()[kDCANegToPVMin][iLambda] || std::abs(candidate.dcanegtopv()) < cfgPIDConfigs.cfgResoCuts->getData()[kDCAPosToPVMin][iLambda])
1169-
return false;
1154+
if (isAL && (std::abs(candidate.dcapostopv()) < cfgPIDConfigs.cfgResoCuts->getData()[kDCANegToPVMin][iLambda] || std::abs(candidate.dcanegtopv()) < cfgPIDConfigs.cfgResoCuts->getData()[kDCAPosToPVMin][iLambda])) {
1155+
isAL = false;
1156+
}
1157+
if (!isL && !isAL) {
1158+
return false;
11701159
}
11711160
registry.fill(HIST("hLambdaCount"), 4.5);
1172-
if (std::abs(candidate.dcaV0daughters()) > cfgPIDConfigs.cfgResoSwitches->getData()[kDCABetDaug][iLambda])
1161+
if (cfgPIDConfigs.cfgResoSwitches->getData()[kUseDCABetDaug][iLambda] && std::abs(candidate.dcaV0daughters()) > cfgPIDConfigs.cfgResoCuts->getData()[kDCABetDaug][iLambda])
11731162
return false;
11741163
registry.fill(HIST("hLambdaCount"), 5.5);
11751164
// v0 radius cuts
11761165
if (cfgPIDConfigs.cfgResoSwitches->getData()[kUseV0Radius][iLambda] && (candidate.v0radius() < cfgPIDConfigs.cfgResoCuts->getData()[kRadiusMin][iLambda] || candidate.v0radius() > cfgPIDConfigs.cfgResoCuts->getData()[kRadiusMax][iLambda]))
11771166
return false;
11781167
registry.fill(HIST("hLambdaCount"), 6.5);
11791168
// cosine pointing angle cuts
1180-
if (candidate.v0cosPA() < cfgPIDConfigs.cfgResoCuts->getData()[kCosPA][iLambda])
1169+
if (cfgPIDConfigs.cfgResoSwitches->getData()[kUseCosPA][iLambda] && candidate.v0cosPA() < cfgPIDConfigs.cfgResoCuts->getData()[kCosPA][iLambda])
11811170
return false;
11821171
registry.fill(HIST("hLambdaCount"), 7.5);
11831172
// Proper lifetime
11841173
float cTauLambda = candidate.distovertotmom(posX, posY, posZ) * massLambda;
11851174
if (cfgPIDConfigs.cfgResoSwitches->getData()[kUseProperLifetime][iLambda] && cTauLambda > cfgPIDConfigs.cfgResoCuts->getData()[kLifeTime][iLambda])
11861175
return false;
11871176
registry.fill(HIST("hLambdaCount"), 8.5);
1177+
11881178
if (isL) {
11891179
if (!selectionV0Daughter(postrack, kProtons) || !selectionV0Daughter(negtrack, kPions))
1190-
return false;
1180+
isL = false;
11911181
}
11921182
if (isAL) {
11931183
if (!selectionV0Daughter(postrack, kPions) || !selectionV0Daughter(negtrack, kProtons))
1194-
return false;
1184+
isAL = false;
11951185
}
1196-
registry.fill(HIST("hLambdaCount"), 9.5);
1197-
1198-
if (!cfgPIDConfigs.cfgUseAntiLambda && isAL) { // Reject the track if it is antilambda
1186+
if (!isL && !isAL) {
11991187
return false;
12001188
}
1189+
registry.fill(HIST("hLambdaCount"), 9.5);
12011190

12021191
registry.fill(HIST("hLambdaPhi"), candidate.phi());
12031192
registry.fill(HIST("hLambdaEta"), candidate.eta());
@@ -1207,7 +1196,7 @@ struct CorrReso {
12071196
registry.fill(HIST("PiMinusTPC_La"), negtrack.pt(), negtrack.tpcNSigmaPi());
12081197
registry.fill(HIST("PiMinusTOF_La"), negtrack.pt(), negtrack.tofNSigmaPi());
12091198
}
1210-
if (cfgPIDConfigs.cfgUseAntiLambda && isAL) {
1199+
if (isAL) {
12111200
registry.fill(HIST("PrMinusTPC_Al"), negtrack.pt(), negtrack.tpcNSigmaPr());
12121201
registry.fill(HIST("PrMinusTOF_Al"), negtrack.pt(), negtrack.tofNSigmaPr());
12131202
registry.fill(HIST("PiPlusTPC_Al"), postrack.pt(), postrack.tpcNSigmaPi());
@@ -1382,7 +1371,6 @@ struct CorrReso {
13821371

13831372
void processMixedTpcFt0a(FilteredCollisions const& collisions, FilteredTracks const& tracks, aod::FT0s const&, aod::BCsWithTimestamps const&, aod::V0Datas const& V0s)
13841373
{
1385-
13861374
auto getTracksSize = [&tracks, this](FilteredCollisions::iterator const& collision) {
13871375
auto associatedTracks = tracks.sliceByCached(o2::aod::track::collisionId, collision.globalIndex(), this->cache);
13881376
auto mult = associatedTracks.size();
@@ -1427,7 +1415,7 @@ struct CorrReso {
14271415
loadCorrection(bc.timestamp());
14281416
float eventWeight = 1.0f;
14291417

1430-
double multiplicity = static_cast<double>(tracks.size());
1418+
double multiplicity = static_cast<double>(tracks1.size());
14311419

14321420
if (cfgStrictTrackCounter) {
14331421
trackCounter(tracks1, multiplicity);

0 commit comments

Comments
 (0)