Skip to content

Commit 31afb99

Browse files
committed
upd gen z-vtx cut
1 parent 9343fd4 commit 31afb99

2 files changed

Lines changed: 80 additions & 38 deletions

File tree

PWGLF/TableProducer/Strangeness/cascqaanalysis.cxx

Lines changed: 3 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@
5151
#include <TString.h>
5252

5353
#include <algorithm>
54-
#include <array>
5554
#include <cmath>
5655
#include <cstdint>
5756
#include <cstdlib>
@@ -85,12 +84,6 @@ struct Cascqaanalysis {
8584
kNEventTypeBins
8685
};
8786

88-
static constexpr std::array<std::pair<EventTypeBin, const char*>, kNEventTypeBins> EventTypeBinLabels{{
89-
{kINEL, "INEL"},
90-
{kINELgt0, "INEL>0"},
91-
{kINELgt1, "INEL>1"},
92-
}};
93-
9487
// Axes
9588
ConfigurableAxis ptAxis{"ptAxis", {200, 0.0f, 10.0f}, "#it{p}_{T} (GeV/#it{c})"};
9689
ConfigurableAxis rapidityAxis{"rapidityAxis", {200, -2.0f, 2.0f}, "y"};
@@ -112,6 +105,7 @@ struct Cascqaanalysis {
112105

113106
// Event selection criteria
114107
Configurable<float> cutzvertex{"cutzvertex", 10.0f, "Accepted z-vertex range (cm)"};
108+
Configurable<float> cutzvertexGen{"cutzvertexGen", -1.0f, "Accepted generated z-vertex range (cm); negative disables the cut"};
115109
Configurable<bool> isVertexITSTPC{"isVertexITSTPC", 0, "Select collisions with at least one ITS-TPC track"};
116110
Configurable<bool> isNoSameBunchPileup{"isNoSameBunchPileup", 0, "Same found-by-T0 bunch crossing rejection"};
117111
Configurable<bool> isGoodZvtxFT0vsPV{"isGoodZvtxFT0vsPV", 0, "z of PV by tracks and z of PV from FT0 A-C time difference cut"};
@@ -213,14 +207,6 @@ struct Cascqaanalysis {
213207
o2::constants::physics::MassOmegaMinus * decayLength * invMomentum};
214208
}
215209

216-
template <typename TAxisType>
217-
static void setEventTypeAxisLabels(TAxisType* axis)
218-
{
219-
for (const auto& [bin, label] : EventTypeBinLabels) {
220-
axis->SetBinLabel(static_cast<int>(bin) + 1, label);
221-
}
222-
}
223-
224210
void init(InitContext const&)
225211
{
226212
TString hCandidateCounterLabels[4] = {"All candidates", "passed topo cuts", "has associated MC particle", "associated with Xi(Omega)"};
@@ -255,17 +241,9 @@ struct Cascqaanalysis {
255241
registry.add("hNchFT0MGenEvType", "hNchFT0MGenEvType", {HistType::kTH2D, {nChargedFT0MGenAxis, eventTypeAxis}});
256242
registry.add("hNchFV0AGenEvType", "hNchFV0AGenEvType", {HistType::kTH2D, {nChargedFV0AGenAxis, eventTypeAxis}});
257243
registry.add("hCentFT0M_genMC", "hCentFT0M_genMC", {HistType::kTH2D, {centFT0MAxis, eventTypeAxis}});
258-
setEventTypeAxisLabels(registry.get<TH2>(HIST("hEventTypeRecVsGen"))->GetXaxis());
259-
setEventTypeAxisLabels(registry.get<TH2>(HIST("hEventTypeRecVsGen"))->GetYaxis());
260-
setEventTypeAxisLabels(registry.get<TH3>(HIST("hNchFT0MNAssocMCCollisions"))->GetZaxis());
261-
setEventTypeAxisLabels(registry.get<TH3>(HIST("hNchFT0MNAssocMCCollisionsSameType"))->GetZaxis());
262-
setEventTypeAxisLabels(registry.get<TH2>(HIST("hNchFT0MGenEvType"))->GetYaxis());
263-
setEventTypeAxisLabels(registry.get<TH2>(HIST("hNchFV0AGenEvType"))->GetYaxis());
264-
setEventTypeAxisLabels(registry.get<TH2>(HIST("hCentFT0M_genMC"))->GetYaxis());
265244
}
266245

267246
registry.add("hCentFT0M_rec", "hCentFT0M_rec", {HistType::kTH2D, {centFT0MAxis, eventTypeAxis}});
268-
setEventTypeAxisLabels(registry.get<TH2>(HIST("hCentFT0M_rec"))->GetYaxis());
269247

270248
if (candidateQA) {
271249
registry.add("hNcandidates", "hNcandidates", {HistType::kTH3D, {nCandidates, centFT0MAxis, {2, -0.5f, 1.5f}}});
@@ -279,21 +257,13 @@ struct Cascqaanalysis {
279257
registry.add("hNchFT0Mglobal", "hNchFT0Mglobal", {HistType::kTH3D, {nChargedFT0MGenAxis, multNTracksAxis, eventTypeAxis}});
280258
registry.add("hNchFT0MPVContr", "hNchFT0MPVContr", {HistType::kTH3D, {nChargedFT0MGenAxis, multNTracksAxis, eventTypeAxis}});
281259
registry.add("hNchFV0APVContr", "hNchFV0APVContr", {HistType::kTH3D, {nChargedFV0AGenAxis, multNTracksAxis, eventTypeAxis}});
282-
setEventTypeAxisLabels(registry.get<TH3>(HIST("hNchFT0Mglobal"))->GetZaxis());
283-
setEventTypeAxisLabels(registry.get<TH3>(HIST("hNchFT0MPVContr"))->GetZaxis());
284-
setEventTypeAxisLabels(registry.get<TH3>(HIST("hNchFV0APVContr"))->GetZaxis());
285260
}
286261
registry.add("hFT0MpvContr", "hFT0MpvContr", {HistType::kTH3D, {centFT0MAxis, multNTracksAxis, eventTypeAxis}});
287262
registry.add("hFV0ApvContr", "hFV0ApvContr", {HistType::kTH3D, {centFV0AAxis, multNTracksAxis, eventTypeAxis}});
288263
registry.add("hFT0Mglobal", "hFT0Mglobal", {HistType::kTH3D, {centFT0MAxis, multNTracksAxis, eventTypeAxis}});
289264
registry.add("hFV0AFT0M", "hFV0AFT0M", {HistType::kTH3D, {centFV0AAxis, centFT0MAxis, eventTypeAxis}});
290265
registry.add("hFT0MFV0Asignal", "hFT0MFV0Asignal", {HistType::kTH2D, {signalFT0MAxis, signalFV0AAxis}});
291266
registry.add("hFT0MsignalPVContr", "hFT0MsignalPVContr", {HistType::kTH3D, {signalFT0MAxis, multNTracksAxis, eventTypeAxis}});
292-
setEventTypeAxisLabels(registry.get<TH3>(HIST("hFT0MpvContr"))->GetZaxis());
293-
setEventTypeAxisLabels(registry.get<TH3>(HIST("hFV0ApvContr"))->GetZaxis());
294-
setEventTypeAxisLabels(registry.get<TH3>(HIST("hFT0Mglobal"))->GetZaxis());
295-
setEventTypeAxisLabels(registry.get<TH3>(HIST("hFV0AFT0M"))->GetZaxis());
296-
setEventTypeAxisLabels(registry.get<TH3>(HIST("hFT0MsignalPVContr"))->GetZaxis());
297267
}
298268

299269
rctChecker.init(cfgEvtRCTFlagCheckerLabel, cfgEvtRCTFlagCheckerZDCCheck, cfgEvtRCTFlagCheckerLimitAcceptAsBad, requireRCTFlagChecker || applyRCTOnGen);
@@ -711,8 +681,8 @@ struct Cascqaanalysis {
711681
// All generated collisions
712682
registry.fill(HIST("hNEventsMC"), 0.5);
713683

714-
// Generated with accepted z vertex
715-
if (std::fabs(mcCollision.posZ()) > cutzvertex) {
684+
// Generated after optional z-vertex selection
685+
if (cutzvertexGen >= 0.f && std::fabs(mcCollision.posZ()) > cutzvertexGen) {
716686
return;
717687
}
718688
registry.fill(HIST("hNEventsMC"), 1.5);

PWGLF/Tasks/Strangeness/cascpostprocessing.cxx

Lines changed: 77 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,9 @@
2626
#include <Framework/InitContext.h>
2727
#include <Framework/runDataProcessing.h>
2828

29+
#include <TAxis.h>
2930
#include <TH1.h>
31+
#include <TH2.h>
3032
#include <TMathBase.h>
3133
#include <TPDGCode.h>
3234
#include <TString.h>
@@ -44,7 +46,51 @@ using namespace o2::framework;
4446
using namespace o2::framework::expressions;
4547

4648
struct LfCascpostprocessing {
47-
static constexpr int OobRejTofOnly = 2;
49+
static constexpr int TrackQualityTofHighPt = 2;
50+
static constexpr int TrackQualityMinITS = 3;
51+
52+
enum MisidentifiedParticleBin {
53+
kMisIdUnknown = 0,
54+
kMisIdElectron,
55+
kMisIdMuon,
56+
kMisIdPion,
57+
kMisIdKaon,
58+
kMisIdProton,
59+
kMisIdK0Short,
60+
kMisIdLambda,
61+
kMisIdXi,
62+
kMisIdOmega,
63+
kMisIdOther,
64+
kNMisidentifiedParticleBins
65+
};
66+
67+
static int getMisidentifiedParticleBin(int pdgCode)
68+
{
69+
switch (TMath::Abs(pdgCode)) {
70+
case 0:
71+
return kMisIdUnknown;
72+
case PDG_t::kElectron:
73+
return kMisIdElectron;
74+
case PDG_t::kMuonMinus:
75+
return kMisIdMuon;
76+
case PDG_t::kPiPlus:
77+
return kMisIdPion;
78+
case PDG_t::kKPlus:
79+
return kMisIdKaon;
80+
case PDG_t::kProton:
81+
return kMisIdProton;
82+
case PDG_t::kK0Short:
83+
return kMisIdK0Short;
84+
case PDG_t::kLambda0:
85+
return kMisIdLambda;
86+
case PDG_t::kXiMinus:
87+
return kMisIdXi;
88+
case PDG_t::kOmegaMinus:
89+
return kMisIdOmega;
90+
default:
91+
return kMisIdOther;
92+
}
93+
}
4894

4995
// Xi or Omega
5096
Configurable<bool> isXi{"isXi", 1, "Apply cuts for Xi identification"};
@@ -79,7 +125,8 @@ struct LfCascpostprocessing {
79125
Configurable<float> nsigmatofPr{"nsigmatofPr", 6, "N sigma TOF Proton"};
80126
Configurable<float> nsigmatofKa{"nsigmatofKa", 6, "N sigma TOF Kaon"};
81127
Configurable<int> mintpccrrows{"mintpccrrows", 50, "min N TPC crossed rows"};
82-
Configurable<int> dooobrej{"dooobrej", 0, "OOB rejection: 0 no selection, 1 = ITS||TOF, 2 = TOF only for pT > ptthrtof"};
128+
Configurable<int> dooobrej{"dooobrej", 0, "Track association requirement: 0 no selection, 1 = ITS||TOF, 2 = TOF only for pT > ptthrtof, 3 = ITS hits >= trackQualityMinITS"};
129+
Configurable<int> trackQualityMinITS{"trackQualityMinITS", 2, "Minimum ITS hits for dooobrej=3 track-quality variation"};
83130

84131
Configurable<bool> isSelectBachBaryon{"isSelectBachBaryon", 0, "Bachelor-baryon cascade selection"};
85132
Configurable<float> bachBaryonCosPA{"bachBaryonCosPA", 0.9999, "Bachelor baryon CosPA"};
@@ -107,6 +154,13 @@ struct LfCascpostprocessing {
107154
AxisSpec ptAxisPID = {50, 0.0f, 10.0f, "#it{p}_{T} (GeV/#it{c})"};
108155
ConfigurableAxis etaAxis{"etaAxis", {40, -2.0f, 2.0f}, "#eta"};
109156
AxisSpec pdgCodeAxis = {10001, -5000.5f, 5000.5f, "MC PDG code (0 = no MC assoc.)"};
157+
AxisSpec misidentifiedParticleAxis = {kNMisidentifiedParticleBins, -0.5f, static_cast<float>(kNMisidentifiedParticleBins) - 0.5f, "Associated MC particle"};
158+
auto setMisidentifiedParticleLabels = [](TAxis* axis) {
159+
TString misidentifiedParticleLabels[kNMisidentifiedParticleBins] = {"Unknown/no assoc.", "e", "#mu", "#pi", "K", "p", "K^{0}_{S}", "#Lambda", "#Xi", "#Omega", "Other"};
160+
for (int n = 1; n <= kNMisidentifiedParticleBins; n++) {
161+
axis->SetBinLabel(n, misidentifiedParticleLabels[n - 1]);
162+
}
163+
};
110164

111165
ConfigurableAxis centFT0MAxis{"centFT0MAxis",
112166
{VARIABLE_WIDTH, 0., 0.01, 0.05, 0.1, 0.5, 1, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100, 101, 105.5},
@@ -119,8 +173,8 @@ struct LfCascpostprocessing {
119173

120174
AxisSpec rapidityAxis = {200, -2.0f, 2.0f, "y"};
121175

122-
TString CutLabel[26] = {"All", "MassWin", "y", "EtaDau", "DCADauToPV", "CascCosPA", "V0CosPA", "DCACascDau", "DCAV0Dau", "rCasc", "rCascMax", "rV0", "rV0Max", "DCAV0ToPV", "LambdaMass", "TPCPr", "TPCPi", "TOFPr", "TOFPi", "TPCBach", "TOFBach", "ctau", "CompDecayMass", "Bach-baryon", "NTPCrows", "OOBRej"};
123-
TString CutLabelSummary[29] = {"MassWin", "y", "EtaDau", "dcapostopv", "dcanegtopv", "dcabachtopv", "CascCosPA", "V0CosPA", "DCACascDau", "DCAV0Dau", "rCasc", "rV0", "DCAV0ToPV", "LambdaMass", "TPCPr", "TPCPi", "TOFPr", "TOFPi", "TPCBach", "TOFBach", "proplifetime", "rejcomp", "ptthrtof", "bachBaryonCosPA", "bachBaryonDCAxyToPV", "NTPCrows", "OOBRej", "rCascMax", "rV0Max"};
176+
TString CutLabel[26] = {"All", "MassWin", "y", "EtaDau", "DCADauToPV", "CascCosPA", "V0CosPA", "DCACascDau", "DCAV0Dau", "rCasc", "rCascMax", "rV0", "rV0Max", "DCAV0ToPV", "LambdaMass", "TPCPr", "TPCPi", "TOFPr", "TOFPi", "TPCBach", "TOFBach", "ctau", "CompDecayMass", "Bach-baryon", "NTPCrows", "TrackQuality"};
177+
TString CutLabelSummary[29] = {"MassWin", "y", "EtaDau", "dcapostopv", "dcanegtopv", "dcabachtopv", "CascCosPA", "V0CosPA", "DCACascDau", "DCAV0Dau", "rCasc", "rV0", "DCAV0ToPV", "LambdaMass", "TPCPr", "TPCPi", "TOFPr", "TOFPi", "TPCBach", "TOFBach", "proplifetime", "rejcomp", "ptthrtof", "bachBaryonCosPA", "bachBaryonDCAxyToPV", "NTPCrows", "TrackQuality", "rCascMax", "rV0Max"};
124178

125179
registry.add("hCandidate", "hCandidate", HistType::kTH1F, {{26, -0.5, 25.5}});
126180
for (Int_t n = 1; n <= registry.get<TH1>(HIST("hCandidate"))->GetNbinsX(); n++) {
@@ -242,6 +296,14 @@ struct LfCascpostprocessing {
242296
registry.add("hMisidentifiedCascPdgCode", "hMisidentifiedCascPdgCode", {HistType::kTH1F, {pdgCodeAxis}});
243297
registry.add("hMisidentifiedCascMinusPdgCode", "hMisidentifiedCascMinusPdgCode", {HistType::kTH1F, {pdgCodeAxis}});
244298
registry.add("hMisidentifiedCascPlusPdgCode", "hMisidentifiedCascPlusPdgCode", {HistType::kTH1F, {pdgCodeAxis}});
299+
registry.add("hMisidentifiedCascParticle", "hMisidentifiedCascParticle", {HistType::kTH1F, {misidentifiedParticleAxis}});
300+
registry.add("hMisidentifiedCascMinusParticle", "hMisidentifiedCascMinusParticle", {HistType::kTH1F, {misidentifiedParticleAxis}});
301+
registry.add("hMisidentifiedCascPlusParticle", "hMisidentifiedCascPlusParticle", {HistType::kTH1F, {misidentifiedParticleAxis}});
302+
registry.add("hMisidentifiedCascParticleVsPt", "hMisidentifiedCascParticleVsPt", {HistType::kTH2F, {ptAxis, misidentifiedParticleAxis}});
303+
setMisidentifiedParticleLabels(registry.get<TH1>(HIST("hMisidentifiedCascParticle"))->GetXaxis());
304+
setMisidentifiedParticleLabels(registry.get<TH1>(HIST("hMisidentifiedCascMinusParticle"))->GetXaxis());
305+
setMisidentifiedParticleLabels(registry.get<TH1>(HIST("hMisidentifiedCascPlusParticle"))->GetXaxis());
306+
setMisidentifiedParticleLabels(registry.get<TH2>(HIST("hMisidentifiedCascParticleVsPt"))->GetYaxis());
245307
registry.add("hPtXiPlusTrue", "hPtXiPlusTrue", {HistType::kTH3F, {ptAxis, rapidityAxis, centFT0MAxis}});
246308
registry.add("hPtXiMinusTrue", "hPtXiMinusTrue", {HistType::kTH3F, {ptAxis, rapidityAxis, centFT0MAxis}});
247309
registry.add("hPtOmegaPlusTrue", "hPtOmegaPlusTrue", {HistType::kTH3F, {ptAxis, rapidityAxis, centFT0MAxis}});
@@ -433,14 +495,19 @@ struct LfCascpostprocessing {
433495
registry.fill(HIST("hCandidate"), ++counter);
434496
bool kHasTOF = (candidate.poshastof() || candidate.neghastof() || candidate.bachhastof());
435497
bool kHasITS = ((candidate.positshits() > 1) || (candidate.negitshits() > 1) || (candidate.bachitshits() > 1));
498+
bool kPassMinITS = ((candidate.positshits() >= trackQualityMinITS) || (candidate.negitshits() >= trackQualityMinITS) || (candidate.bachitshits() >= trackQualityMinITS));
436499
if (dooobrej == 1) {
437500
if (!kHasTOF && !kHasITS)
438501
continue;
439502
registry.fill(HIST("hCandidate"), ++counter);
440-
} else if (dooobrej == OobRejTofOnly) {
503+
} else if (dooobrej == TrackQualityTofHighPt) {
441504
if (!kHasTOF && (candidate.pt() > ptthrtof))
442505
continue;
443506
registry.fill(HIST("hCandidate"), ++counter);
507+
} else if (dooobrej == TrackQualityMinITS) {
508+
if (!kPassMinITS)
509+
continue;
510+
registry.fill(HIST("hCandidate"), ++counter);
444511
} else {
445512
++counter;
446513
}
@@ -519,11 +586,16 @@ struct LfCascpostprocessing {
519586
// registry.fill(HIST("hBachITSHits"), candidate.bachitshits());
520587

521588
if (isMC && !isCorrectlyRec) {
589+
const int misidentifiedParticleBin = getMisidentifiedParticleBin(candidate.mcPdgCode());
522590
registry.fill(HIST("hMisidentifiedCascPdgCode"), candidate.mcPdgCode());
591+
registry.fill(HIST("hMisidentifiedCascParticle"), misidentifiedParticleBin);
592+
registry.fill(HIST("hMisidentifiedCascParticleVsPt"), candidate.pt(), misidentifiedParticleBin);
523593
if (candidate.sign() < 0) {
524594
registry.fill(HIST("hMisidentifiedCascMinusPdgCode"), candidate.mcPdgCode());
595+
registry.fill(HIST("hMisidentifiedCascMinusParticle"), misidentifiedParticleBin);
525596
} else if (candidate.sign() > 0) {
526597
registry.fill(HIST("hMisidentifiedCascPlusPdgCode"), candidate.mcPdgCode());
598+
registry.fill(HIST("hMisidentifiedCascPlusParticle"), misidentifiedParticleBin);
527599
}
528600
}
529601

0 commit comments

Comments
 (0)