Skip to content

Commit 928f76c

Browse files
committed
PID QA: Filteirng input collisions and tracks
1 parent 84b1387 commit 928f76c

2 files changed

Lines changed: 64 additions & 77 deletions

File tree

DPG/Tasks/AOTTrack/PID/qaPIDTOF.cxx

Lines changed: 29 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ struct tofPidQa {
128128
ConfigurableAxis expSigmaBins{"expSigmaBins", {200, 0.f, 200.f}, "Binning in expected Sigma"};
129129
ConfigurableAxis nSigmaBins{"nSigmaBins", {401, -10.025f, 10.025f}, "Binning in NSigma"};
130130
Configurable<int> applyEvSel{"applyEvSel", 2, "Flag to apply event selection cut: 0 -> no event selection, 1 -> Run 2 event selection, 2 -> Run 3 event selection"};
131-
Configurable<bool> applyTrackCut{"applyTrackCut", false, "Flag to apply standard track cuts"};
131+
Configurable<int> trackSelection{"trackSelection", 1, "Track selection: 0 -> No Cut, 1 -> kGlobalTrack, 2 -> kGlobalTrackWoPtEta, 3 -> kGlobalTrackWoDCA, 4 -> kQualityTracks, 5 -> kInAcceptanceTracks"};
132132
Configurable<bool> applyRapidityCut{"applyRapidityCut", false, "Flag to apply rapidity cut"};
133133
Configurable<bool> enableEvTimeSplitting{"enableEvTimeSplitting", false, "Flag to enable histograms splitting depending on the Event Time used"};
134134
Configurable<bool> produceDeltaTEtaPhiMap{"produceDeltaTEtaPhiMap", false, "Produces the map of the delta time as a function of eta and phi"};
@@ -279,8 +279,7 @@ struct tofPidQa {
279279
auto h = histos.add<TH1>("event/evsel", "", kTH1F, {{10, 0.5, 10.5, "Ev. Sel."}});
280280
h->GetXaxis()->SetBinLabel(1, "Events read");
281281
h->GetXaxis()->SetBinLabel(2, "Passed ev. sel.");
282-
h->GetXaxis()->SetBinLabel(3, "Passed mult.");
283-
h->GetXaxis()->SetBinLabel(4, "Passed vtx Z");
282+
h->GetXaxis()->SetBinLabel(3, "Passed vtx Z");
284283

285284
h = histos.add<TH1>("event/trackselection", "", kTH1F, {{10, 0.5, 10.5, "Selection passed"}});
286285
h->GetXaxis()->SetBinLabel(1, "Tracks read");
@@ -294,8 +293,6 @@ struct tofPidQa {
294293
for (int i = 0; i < 9; i++) {
295294
h->GetXaxis()->SetBinLabel(i + 1, PID::getName(i));
296295
}
297-
histos.add("event/trackmultiplicity", "", kTH1F, {multAxis});
298-
histos.add("event/tofmultiplicity", "", kTH1F, {multAxis});
299296

300297
histos.add("event/evtime/colltime", "collisionTime()", kTH1F, {colTimeAxis});
301298
histos.add("event/evtime/colltimereso", "collisionTimeRes()", kTH2F, {multAxis, colTimeResoAxis});
@@ -348,18 +345,13 @@ struct tofPidQa {
348345
}
349346

350347
// Computing Multiplicity first
351-
int ntracks = 0;
352348
int tofmult = 0;
353349
float evtime = 0.f;
354350
float evtimereso = 0.f;
355351
int evtimeflag = 0;
356352

357353
if constexpr (fillHistograms) {
358354
for (auto t : tracks) {
359-
if (applyTrackCut && !t.isGlobalTrack()) {
360-
continue;
361-
}
362-
ntracks += 1;
363355
if (!t.hasTOF()) { // Skipping tracks without TOF
364356
continue;
365357
}
@@ -378,16 +370,13 @@ struct tofPidQa {
378370
evtimeflag = 4;
379371
}
380372
}
381-
histos.fill(HIST("event/evsel"), 3);
382373
}
383374
if (abs(collision.posZ()) > 10.f) {
384375
return false;
385376
}
386377
if constexpr (fillHistograms) {
387-
histos.fill(HIST("event/evsel"), 4);
378+
histos.fill(HIST("event/evsel"), 3);
388379
histos.fill(HIST("event/vertexz"), collision.posZ());
389-
histos.fill(HIST("event/trackmultiplicity"), ntracks);
390-
histos.fill(HIST("event/tofmultiplicity"), tofmult);
391380

392381
histos.fill(HIST("event/evtime/colltime"), collision.collisionTime() * 1000.f);
393382
histos.fill(HIST("event/evtime/colltimereso"), tofmult, collision.collisionTimeRes() * 1000.f);
@@ -468,11 +457,21 @@ struct tofPidQa {
468457
return true;
469458
}
470459

471-
using CollisionCandidate = soa::Join<aod::Collisions, aod::EvSels>::iterator;
460+
Filter eventFilter = (applyEvSel.node() == 0) ||
461+
((applyEvSel.node() == 1) && (o2::aod::evsel::sel7 == true)) ||
462+
((applyEvSel.node() == 2) && (o2::aod::evsel::sel8 == true));
463+
Filter trackFilter = (trackSelection.node() == 0) ||
464+
((trackSelection.node() == 1) && requireGlobalTrackInFilter()) ||
465+
((trackSelection.node() == 2) && requireGlobalTrackWoPtEtaInFilter()) ||
466+
((trackSelection.node() == 3) && requireGlobalTrackWoDCAInFilter()) ||
467+
((trackSelection.node() == 4) && requireQualityTracksInFilter()) ||
468+
((trackSelection.node() == 5) && requireInAcceptanceTracksInFilter());
469+
using CollisionCandidate = soa::Filtered<soa::Join<aod::Collisions, aod::EvSels>>::iterator;
470+
using TrackCandidates = soa::Join<aod::Tracks, aod::TracksExtra, aod::TrackSelection,
471+
aod::pidEvTimeFlags, aod::TOFSignal, aod::TOFEvTime>;
472+
472473
void process(CollisionCandidate const& collision,
473-
soa::Join<aod::Tracks, aod::TracksExtra,
474-
aod::TOFSignal, aod::TOFEvTime, aod::pidEvTimeFlags,
475-
aod::TrackSelection> const& tracks)
474+
soa::Filtered<TrackCandidates> const& tracks)
476475
{
477476
isEventSelected<true>(collision, tracks);
478477
for (auto t : tracks) {
@@ -604,14 +603,12 @@ struct tofPidQa {
604603
}
605604

606605
// QA of nsigma only tables
607-
#define makeProcessFunction(inputPid, particleId) \
608-
void process##particleId(CollisionCandidate const& collision, \
609-
soa::Join<aod::Tracks, aod::TracksExtra, aod::TrackSelection, \
610-
aod::pidEvTimeFlags, aod::TOFSignal, aod::TOFEvTime, \
611-
inputPid> const& tracks) \
612-
{ \
613-
processSingleParticle<PID::particleId, false>(collision, tracks); \
614-
} \
606+
#define makeProcessFunction(inputPid, particleId) \
607+
void process##particleId(CollisionCandidate const& collision, \
608+
soa::Filtered<soa::Join<TrackCandidates, inputPid>> const& tracks) \
609+
{ \
610+
processSingleParticle<PID::particleId, false>(collision, tracks); \
611+
} \
615612
PROCESS_SWITCH(tofPidQa, process##particleId, Form("Process for the %s hypothesis for TOF NSigma QA", #particleId), false);
616613

617614
makeProcessFunction(aod::pidTOFEl, Electron);
@@ -626,14 +623,12 @@ struct tofPidQa {
626623
#undef makeProcessFunction
627624

628625
// QA of full tables
629-
#define makeProcessFunction(inputPid, particleId) \
630-
void processFull##particleId(CollisionCandidate const& collision, \
631-
soa::Join<aod::Tracks, aod::TracksExtra, aod::TrackSelection, \
632-
aod::pidEvTimeFlags, aod::TOFSignal, aod::TOFEvTime, \
633-
inputPid> const& tracks) \
634-
{ \
635-
processSingleParticle<PID::particleId, true>(collision, tracks); \
636-
} \
626+
#define makeProcessFunction(inputPid, particleId) \
627+
void processFull##particleId(CollisionCandidate const& collision, \
628+
soa::Filtered<soa::Join<TrackCandidates, inputPid>> const& tracks) \
629+
{ \
630+
processSingleParticle<PID::particleId, true>(collision, tracks); \
631+
} \
637632
PROCESS_SWITCH(tofPidQa, processFull##particleId, Form("Process for the %s hypothesis for full TOF PID QA", #particleId), false);
638633

639634
makeProcessFunction(aod::pidTOFFullEl, Electron);

DPG/Tasks/AOTTrack/PID/qaPIDTPC.cxx

Lines changed: 35 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ struct tpcPidQa {
9191
ConfigurableAxis nSigmaBins{"nSigmaBins", {401, -10.025f, 10.025f}, "Binning in NSigma"};
9292
ConfigurableAxis dEdxBins{"dEdxBins", {5000, 0.f, 5000.f}, "Binning in dE/dx"};
9393
Configurable<int> applyEvSel{"applyEvSel", 2, "Flag to apply event selection cut: 0 -> no event selection, 1 -> Run 2 event selection, 2 -> Run 3 event selection"};
94-
Configurable<bool> applyTrackCut{"applyTrackCut", false, "Flag to apply standard track cuts"};
94+
Configurable<int> trackSelection{"trackSelection", 1, "Track selection: 0 -> No Cut, 1 -> kGlobalTrack, 2 -> kGlobalTrackWoPtEta, 3 -> kGlobalTrackWoDCA, 4 -> kQualityTracks, 5 -> kInAcceptanceTracks"};
9595
Configurable<bool> applyRapidityCut{"applyRapidityCut", false, "Flag to apply rapidity cut"};
9696
Configurable<bool> splitSignalPerCharge{"splitSignalPerCharge", true, "Split the signal per charge (reduces memory footprint if off)"};
9797
Configurable<bool> enableDeDxPlot{"enableDeDxPlot", true, "Enables the dEdx plot (reduces memory footprint if off)"};
@@ -195,7 +195,6 @@ struct tpcPidQa {
195195

196196
void init(o2::framework::InitContext&)
197197
{
198-
const AxisSpec multAxis{1000, 0.f, 1000.f, "Track multiplicity"};
199198
const AxisSpec vtxZAxis{100, -20, 20, "Vtx_{z} (cm)"};
200199
const AxisSpec etaAxis{etaBins, "#it{#eta}"};
201200
const AxisSpec phiAxis{phiBins, "#it{#phi}"};
@@ -213,8 +212,7 @@ struct tpcPidQa {
213212
auto h = histos.add<TH1>("event/evsel", "", kTH1F, {{10, 0.5, 10.5, "Ev. Sel."}});
214213
h->GetXaxis()->SetBinLabel(1, "Events read");
215214
h->GetXaxis()->SetBinLabel(2, "Passed ev. sel.");
216-
h->GetXaxis()->SetBinLabel(3, "Passed mult.");
217-
h->GetXaxis()->SetBinLabel(4, "Passed vtx Z");
215+
h->GetXaxis()->SetBinLabel(3, "Passed vtx Z");
218216

219217
h = histos.add<TH1>("event/trackselection", "", kTH1F, {{10, 0.5, 10.5, "Selection passed"}});
220218
h->GetXaxis()->SetBinLabel(1, "Tracks read");
@@ -227,7 +225,6 @@ struct tpcPidQa {
227225
for (int i = 0; i < 9; i++) {
228226
h->GetXaxis()->SetBinLabel(i + 1, PID::getName(i));
229227
}
230-
histos.add("event/trackmultiplicity", "", kTH1F, {multAxis});
231228
if (enableDeDxPlot) {
232229
if (splitSignalPerCharge) {
233230
histos.add("event/tpcsignal", "", kTH3F, {pAxis, dedxAxis, chargeAxis});
@@ -270,24 +267,12 @@ struct tpcPidQa {
270267
histos.fill(HIST("event/evsel"), 2);
271268
}
272269

273-
// Computing Multiplicity first
274-
int ntracks = 0;
275-
if constexpr (fillHistograms) {
276-
for (auto t : tracks) {
277-
if (applyTrackCut && !t.isGlobalTrack()) {
278-
continue;
279-
}
280-
ntracks += 1;
281-
}
282-
histos.fill(HIST("event/evsel"), 3);
283-
}
284270
if (abs(collision.posZ()) > 10.f) {
285271
return false;
286272
}
287273
if constexpr (fillHistograms) {
288-
histos.fill(HIST("event/evsel"), 4);
274+
histos.fill(HIST("event/evsel"), 3);
289275
histos.fill(HIST("event/vertexz"), collision.posZ());
290-
histos.fill(HIST("event/trackmultiplicity"), ntracks);
291276
}
292277
return true;
293278
}
@@ -336,10 +321,19 @@ struct tpcPidQa {
336321
return true;
337322
}
338323

339-
using CollisionCandidate = soa::Join<aod::Collisions, aod::EvSels>::iterator;
340-
void process(CollisionCandidate const& collision,
341-
soa::Join<aod::Tracks, aod::TracksExtra,
342-
aod::TrackSelection> const& tracks)
324+
Filter eventFilter = (applyEvSel.node() == 0) ||
325+
((applyEvSel.node() == 1) && (o2::aod::evsel::sel7 == true)) ||
326+
((applyEvSel.node() == 2) && (o2::aod::evsel::sel8 == true));
327+
Filter trackFilter = (trackSelection.node() == 0) ||
328+
((trackSelection.node() == 1) && requireGlobalTrackInFilter()) ||
329+
((trackSelection.node() == 2) && requireGlobalTrackWoPtEtaInFilter()) ||
330+
((trackSelection.node() == 3) && requireGlobalTrackWoDCAInFilter()) ||
331+
((trackSelection.node() == 4) && requireQualityTracksInFilter()) ||
332+
((trackSelection.node() == 5) && requireInAcceptanceTracksInFilter());
333+
using CollisionCandidate = soa::Filtered<soa::Join<aod::Collisions, aod::EvSels>>::iterator;
334+
using TrackCandidates = soa::Join<aod::Tracks, aod::TracksExtra, aod::TrackSelection>;
335+
void process(soa::Filtered<CollisionCandidate> const& collision,
336+
soa::Filtered<TrackCandidates> const& tracks)
343337
{
344338
isEventSelected<true>(collision, tracks);
345339
for (auto t : tracks) {
@@ -413,13 +407,12 @@ struct tpcPidQa {
413407
}
414408

415409
// QA of nsigma only tables
416-
#define makeProcessFunction(inputPid, particleId) \
417-
void process##particleId(CollisionCandidate const& collision, \
418-
soa::Join<aod::Tracks, aod::TracksExtra, aod::TrackSelection, \
419-
inputPid> const& tracks) \
420-
{ \
421-
processSingleParticle<PID::particleId, false, false>(collision, tracks); \
422-
} \
410+
#define makeProcessFunction(inputPid, particleId) \
411+
void process##particleId(CollisionCandidate const& collision, \
412+
soa::Filtered<soa::Join<TrackCandidates, inputPid>> const& tracks) \
413+
{ \
414+
processSingleParticle<PID::particleId, false, false>(collision, tracks); \
415+
} \
423416
PROCESS_SWITCH(tpcPidQa, process##particleId, Form("Process for the %s hypothesis for TPC NSigma QA", #particleId), false);
424417

425418
makeProcessFunction(aod::pidTPCEl, Electron);
@@ -434,13 +427,12 @@ struct tpcPidQa {
434427
#undef makeProcessFunction
435428

436429
// QA of full tables
437-
#define makeProcessFunction(inputPid, particleId) \
438-
void processFull##particleId(CollisionCandidate const& collision, \
439-
soa::Join<aod::Tracks, aod::TracksExtra, aod::TrackSelection, \
440-
inputPid> const& tracks) \
441-
{ \
442-
processSingleParticle<PID::particleId, true, false>(collision, tracks); \
443-
} \
430+
#define makeProcessFunction(inputPid, particleId) \
431+
void processFull##particleId(CollisionCandidate const& collision, \
432+
soa::Filtered<soa::Join<TrackCandidates, inputPid>> const& tracks) \
433+
{ \
434+
processSingleParticle<PID::particleId, true, false>(collision, tracks); \
435+
} \
444436
PROCESS_SWITCH(tpcPidQa, processFull##particleId, Form("Process for the %s hypothesis for full TPC PID QA", #particleId), false);
445437

446438
makeProcessFunction(aod::pidTPCFullEl, Electron);
@@ -455,13 +447,13 @@ struct tpcPidQa {
455447
#undef makeProcessFunction
456448

457449
// QA of full tables with TOF information
458-
#define makeProcessFunction(inputPid, inputPidTOF, particleId) \
459-
void processFullWithTOF##particleId(CollisionCandidate const& collision, \
460-
soa::Join<aod::Tracks, aod::TracksExtra, aod::TrackSelection, inputPid, inputPidTOF> const& tracks) \
461-
{ \
462-
processSingleParticle<PID::particleId, true, true>(collision, tracks); \
463-
} \
464-
PROCESS_SWITCH(tpcPidQa, processFullWithTOF##particleId, Form("Process for the %s hypothesis for full TPC PID QA", #particleId), false);
450+
#define makeProcessFunction(inputPid, inputPidTOF, particleId) \
451+
void processFullWithTOF##particleId(CollisionCandidate const& collision, \
452+
soa::Filtered<soa::Join<TrackCandidates, inputPid, inputPidTOF>> const& tracks) \
453+
{ \
454+
processSingleParticle<PID::particleId, true, true>(collision, tracks); \
455+
} \
456+
PROCESS_SWITCH(tpcPidQa, processFullWithTOF##particleId, Form("Process for the %s hypothesis for full TPC PID QA with the TOF info added", #particleId), false);
465457

466458
makeProcessFunction(aod::pidTPCFullEl, aod::pidTOFFullEl, Electron);
467459
makeProcessFunction(aod::pidTPCFullMu, aod::pidTOFFullMu, Muon);

0 commit comments

Comments
 (0)