Skip to content

Commit 4ac46a4

Browse files
authored
Extend DPG tools (#1044)
- more plots with different ev. time for TOF - Fixes in hist naming in qaEfficiency - extend qaPIDPTC - improve PDG selection in qa lite - Add pdg selection configurable for multiple particles
1 parent 0e288dd commit 4ac46a4

4 files changed

Lines changed: 156 additions & 36 deletions

File tree

DPG/Tasks/qaEfficiency.cxx

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -142,10 +142,10 @@ struct QaEfficiency {
142142
"MC/ka/pos/prm/pt/num", "MC/pr/pos/prm/pt/num", "MC/de/pos/prm/pt/num",
143143
"MC/tr/pos/prm/pt/num", "MC/he/pos/prm/pt/num", "MC/al/pos/prm/pt/num",
144144
"MC/all/pos/prm/pt/num",
145-
"MC/el/den/prm/pt/num", "MC/mu/den/prm/pt/num", "MC/pi/den/prm/pt/num",
146-
"MC/ka/den/prm/pt/num", "MC/pr/den/prm/pt/num", "MC/de/den/prm/pt/num",
147-
"MC/tr/den/prm/pt/num", "MC/he/den/prm/pt/num", "MC/al/den/prm/pt/num",
148-
"MC/all/den/prm/pt/num"};
145+
"MC/el/neg/prm/pt/num", "MC/mu/neg/prm/pt/num", "MC/pi/neg/prm/pt/num",
146+
"MC/ka/neg/prm/pt/num", "MC/pr/neg/prm/pt/num", "MC/de/neg/prm/pt/num",
147+
"MC/tr/neg/prm/pt/num", "MC/he/neg/prm/pt/num", "MC/al/neg/prm/pt/num",
148+
"MC/all/neg/prm/pt/num"};
149149
static constexpr std::string_view hPtPrmNumTrk[nHistograms] = {"MC/el/sum/prm/pt/numtrk", "MC/mu/sum/prm/pt/numtrk", "MC/pi/sum/prm/pt/numtrk",
150150
"MC/ka/sum/prm/pt/numtrk", "MC/pr/sum/prm/pt/numtrk", "MC/de/sum/prm/pt/numtrk",
151151
"MC/tr/sum/prm/pt/numtrk", "MC/he/sum/prm/pt/numtrk", "MC/al/sum/prm/pt/numtrk",
@@ -191,10 +191,10 @@ struct QaEfficiency {
191191
"MC/ka/pos/dec/pt/num", "MC/pr/pos/dec/pt/num", "MC/de/pos/dec/pt/num",
192192
"MC/tr/pos/dec/pt/num", "MC/he/pos/dec/pt/num", "MC/al/pos/dec/pt/num",
193193
"MC/all/pos/dec/pt/num",
194-
"MC/el/den/dec/pt/num", "MC/mu/den/dec/pt/num", "MC/pi/den/dec/pt/num",
195-
"MC/ka/den/dec/pt/num", "MC/pr/den/dec/pt/num", "MC/de/den/dec/pt/num",
196-
"MC/tr/den/dec/pt/num", "MC/he/den/dec/pt/num", "MC/al/den/dec/pt/num",
197-
"MC/all/den/dec/pt/num"};
194+
"MC/el/neg/dec/pt/num", "MC/mu/neg/dec/pt/num", "MC/pi/neg/dec/pt/num",
195+
"MC/ka/neg/dec/pt/num", "MC/pr/neg/dec/pt/num", "MC/de/neg/dec/pt/num",
196+
"MC/tr/neg/dec/pt/num", "MC/he/neg/dec/pt/num", "MC/al/neg/dec/pt/num",
197+
"MC/all/neg/dec/pt/num"};
198198
static constexpr std::string_view hPtDecNumTrk[nHistograms] = {"MC/el/sum/dec/pt/numtrk", "MC/mu/sum/dec/pt/numtrk", "MC/pi/sum/dec/pt/numtrk",
199199
"MC/ka/sum/dec/pt/numtrk", "MC/pr/sum/dec/pt/numtrk", "MC/de/sum/dec/pt/numtrk",
200200
"MC/tr/sum/dec/pt/numtrk", "MC/he/sum/dec/pt/numtrk", "MC/al/sum/dec/pt/numtrk",
@@ -240,10 +240,10 @@ struct QaEfficiency {
240240
"MC/ka/pos/mat/pt/num", "MC/pr/pos/mat/pt/num", "MC/de/pos/mat/pt/num",
241241
"MC/tr/pos/mat/pt/num", "MC/he/pos/mat/pt/num", "MC/al/pos/mat/pt/num",
242242
"MC/all/pos/mat/pt/num",
243-
"MC/el/den/mat/pt/num", "MC/mu/den/mat/pt/num", "MC/pi/den/mat/pt/num",
244-
"MC/ka/den/mat/pt/num", "MC/pr/den/mat/pt/num", "MC/de/den/mat/pt/num",
245-
"MC/tr/den/mat/pt/num", "MC/he/den/mat/pt/num", "MC/al/den/mat/pt/num",
246-
"MC/all/den/mat/pt/num"};
243+
"MC/el/neg/mat/pt/num", "MC/mu/neg/mat/pt/num", "MC/pi/neg/mat/pt/num",
244+
"MC/ka/neg/mat/pt/num", "MC/pr/neg/mat/pt/num", "MC/de/neg/mat/pt/num",
245+
"MC/tr/neg/mat/pt/num", "MC/he/neg/mat/pt/num", "MC/al/neg/mat/pt/num",
246+
"MC/all/neg/mat/pt/num"};
247247
static constexpr std::string_view hPtMatNumTrk[nHistograms] = {"MC/el/sum/mat/pt/numtrk", "MC/mu/sum/mat/pt/numtrk", "MC/pi/sum/mat/pt/numtrk",
248248
"MC/ka/sum/mat/pt/numtrk", "MC/pr/sum/mat/pt/numtrk", "MC/de/sum/mat/pt/numtrk",
249249
"MC/tr/sum/mat/pt/numtrk", "MC/he/sum/mat/pt/numtrk", "MC/al/sum/mat/pt/numtrk",
@@ -1189,11 +1189,11 @@ struct QaEfficiency {
11891189
if (!isTrackSelected(track)) { // Check general cuts
11901190
continue;
11911191
}
1192-
histos.fill(HIST("MC/trackSelection"), 11);
1192+
histos.fill(HIST("MC/trackSelection"), 9);
11931193
if (!track.has_collision()) {
11941194
continue;
11951195
}
1196-
histos.fill(HIST("MC/trackSelection"), 12);
1196+
histos.fill(HIST("MC/trackSelection"), 10);
11971197
// Filling variable histograms
11981198
histos.fill(HIST("MC/trackLength"), track.length());
11991199
if (doEl) {

DPG/Tasks/qaEventTrackLite.cxx

Lines changed: 31 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,9 @@ struct qaEventTrackLite {
114114
Configurable<float> dcaXYmaxSel3{"dcaXYMaxSel3", 999., "Max dca XY sel3"};
115115

116116
// MC selections
117-
Configurable<int> pdgCodeSel{"pdgCodeSel", 2, "pdgCode based particle selection, 1 defines pi,K,p,mu,e, 2 all final-state charged particles including light (hyper)nuclei"};
117+
Configurable<int> pdgCodeSel{"pdgCodeSel", 0, "pdgCode based particle selection. Provide a PDG code required for particles to have. To be used in combo with pdgCodeSelMode"};
118+
Configurable<int> pdgCodeSelMode{"pdgCodeSelMode", 2, "multiple pdgCode based particle selection. `1` accepts pi,K,p,mu,e, `2` accepts all final-state charged particles including light (hyper)nuclei"};
119+
118120
Configurable<bool> checkPdgAtReco{"checkPdgAtReco", false, "check pdg code also at reco levo for data-like reference"};
119121

120122
// TPC dEdx splines
@@ -578,18 +580,38 @@ struct qaEventTrackLite {
578580
return true;
579581
}
580582

581-
bool isPdgSelected(const Int_t pdgcode)
583+
bool isPdgSelected(const int pdgcode)
582584
{ // mimics selection of charged particles or id particles
583-
Int_t abspdgcode = TMath::Abs(pdgcode);
584-
if (abspdgcode == pdgCodeSel)
585+
586+
if (pdgcode == pdgCodeSel) { // Check that the pdg code is exactly what was asked
585587
return true;
586-
if (pdgCodeSel == 1 || pdgCodeSel == 2) {
587-
if (abspdgcode == 211 || abspdgcode == 321 || abspdgcode == 2212 || abspdgcode == 11 || abspdgcode == 13)
588-
return true;
589-
if (pdgCodeSel == 2) {
590-
if (abspdgcode == 3222 || abspdgcode == 3112 || abspdgcode == 3312 || abspdgcode == 3334 || abspdgcode == 1000010020 || abspdgcode == 1000010030 || abspdgcode == 1000020030 || abspdgcode == 1000020040 || abspdgcode == 1010010030 || abspdgcode == 1010020040)
588+
}
589+
const int abspdgcode = abs(pdgcode);
590+
if (pdgCodeSelMode == 1 || pdgCodeSelMode == 2) {
591+
switch (abspdgcode) {
592+
case 11: // electron
593+
case 13: // muon
594+
case 211: // pion
595+
case 321: // kaon
596+
case 2212: // proton
591597
return true;
592598
}
599+
600+
if (pdgCodeSelMode == 2) {
601+
switch (abspdgcode) {
602+
case 3222: // Σ+
603+
case 3112: // Σ−
604+
case 3312: // Ξ−
605+
case 3334: // Ω−
606+
case 1000010020: // deuteron
607+
case 1000010030: // triton
608+
case 1000020030: // helium3
609+
case 1000020040: // helium4
610+
case 1010010030: // hyper triton
611+
case 1010020040: // hyper helium4
612+
return true;
613+
}
614+
}
593615
}
594616
return false;
595617
}

DPG/Tasks/qaPIDTOF.h

Lines changed: 62 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ struct tofPidQa {
6767
Configurable<int> nBinsNSigma{"nBinsNSigma", 200, "Number of bins for the NSigma"};
6868
Configurable<float> minNSigma{"minNSigma", -10.f, "Minimum NSigma in range"};
6969
Configurable<float> maxNSigma{"maxNSigma", 10.f, "Maximum NSigma in range"};
70-
Configurable<int> applyEvSel{"applyEvSel", 2, "Flag to apply rapidity cut: 0 -> no event selection, 1 -> Run 2 event selection, 2 -> Run 3 event selection"};
70+
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"};
7171
Configurable<bool> applyTrackCut{"applyTrackCut", false, "Flag to apply standard track cuts"};
7272
Configurable<bool> applyRapidityCut{"applyRapidityCut", false, "Flag to apply rapidity cut"};
7373
Configurable<bool> enableEvTimeSplitting{"enableEvTimeSplitting", false, "Flag to enable histograms splitting depending on the Event Time used"};
@@ -482,6 +482,8 @@ struct tofPidBetaQa {
482482
Configurable<int> nBinsBeta{"nBinsBeta", 4000, "Number of bins for the beta"};
483483
Configurable<float> minBeta{"minBeta", 0, "Minimum beta in range"};
484484
Configurable<float> maxBeta{"maxBeta", 2.f, "Maximum beta in range"};
485+
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"};
486+
Configurable<bool> applyTrackCut{"applyTrackCut", false, "Flag to apply standard track cuts"};
485487

486488
void init(o2::framework::InitContext&)
487489
{
@@ -502,11 +504,24 @@ struct tofPidBetaQa {
502504
// Event properties
503505
histos.add("event/tofsignal", "", HistType::kTH2F, {pAxis, tofAxis});
504506
histos.add("event/tofbeta", "", HistType::kTH2F, {pAxis, betaAxis});
505-
histos.add("event/tofbetaEvTimeTOF", "", HistType::kTH2F, {pAxis, betaAxis});
507+
histos.add("event/tofbetaEvTimeTOF", "Ev. Time TOF", HistType::kTH2F, {pAxis, betaAxis});
508+
histos.add("event/tofbetaEvTimeTOFOnly", "Ev. Time TOF Only", HistType::kTH2F, {pAxis, betaAxis});
509+
histos.add("event/tofbetaEvTimeT0AC", "Ev. Time T0AC", HistType::kTH2F, {pAxis, betaAxis});
510+
histos.add("event/tofbetaEvTimeT0ACOnly", "Ev. Time T0AC Only", HistType::kTH2F, {pAxis, betaAxis});
506511
histos.add("event/eta", "", HistType::kTH1F, {etaAxis});
507512
histos.add("event/length", "", HistType::kTH1F, {lAxis});
508513
histos.add("event/pt", "", HistType::kTH1F, {ptAxis});
509514
histos.add("event/p", "", HistType::kTH1F, {pAxis});
515+
auto h = histos.add<TH1>("event/evsel", "", kTH1F, {{10, 0.5, 10.5, "Ev. Sel."}});
516+
h->GetXaxis()->SetBinLabel(1, "Events read");
517+
h->GetXaxis()->SetBinLabel(2, "Passed ev. sel.");
518+
h->GetXaxis()->SetBinLabel(3, "Passed mult.");
519+
h->GetXaxis()->SetBinLabel(4, "Passed vtx Z");
520+
521+
h = histos.add<TH1>("event/trackselection", "", kTH1F, {{10, 0.5, 10.5, "Selection passed"}});
522+
h->GetXaxis()->SetBinLabel(1, "Tracks read");
523+
h->GetXaxis()->SetBinLabel(2, "hasTOF");
524+
h->GetXaxis()->SetBinLabel(3, "isGlobalTrack");
510525
}
511526

512527
template <uint8_t i, typename T>
@@ -516,20 +531,62 @@ struct tofPidBetaQa {
516531
histos.fill(HIST(hexpected_diff[i]), t.p(), exp_diff);
517532
histos.fill(HIST(hnsigma[i]), t.p(), nsigma);
518533
}
519-
void process(soa::Join<aod::Tracks, aod::TracksExtra, aod::pidTOFbeta, aod::TrackSelection, aod::TOFSignal, aod::pidEvTimeFlags> const& tracks,
520-
aod::Collisions const&)
534+
535+
using CollisionCandidate = soa::Join<aod::Collisions, aod::EvSels>::iterator;
536+
void process(CollisionCandidate const& collision,
537+
soa::Join<aod::Tracks, aod::TracksExtra, aod::pidTOFbeta, aod::TrackSelection, aod::TOFSignal, aod::pidEvTimeFlags> const& tracks)
521538
{
522-
for (auto const& track : tracks) {
523539

540+
histos.fill(HIST("event/evsel"), 1);
541+
if (applyEvSel == 1) {
542+
if (!collision.sel7()) {
543+
return;
544+
}
545+
} else if (applyEvSel == 2) {
546+
if (!collision.sel8()) {
547+
return;
548+
}
549+
}
550+
551+
histos.fill(HIST("event/evsel"), 2);
552+
553+
// Computing Multiplicity first
554+
float ntracks = 0;
555+
for (auto t : tracks) {
556+
if (applyTrackCut && !t.isGlobalTrack()) {
557+
continue;
558+
}
559+
ntracks += 1;
560+
}
561+
histos.fill(HIST("event/evsel"), 3);
562+
if (abs(collision.posZ()) > 10.f) {
563+
return;
564+
}
565+
566+
histos.fill(HIST("event/evsel"), 4);
567+
568+
for (auto const& track : tracks) {
569+
histos.fill(HIST("event/trackselection"), 1.f);
524570
if (!track.hasTOF()) { // Skipping tracks without TOF
525571
continue;
526572
}
573+
histos.fill(HIST("event/trackselection"), 2.f);
527574
if (!track.isGlobalTrack()) {
528575
continue;
529576
}
577+
histos.fill(HIST("event/trackselection"), 3.f);
530578
if (track.isEvTimeTOF()) {
531579
histos.fill(HIST("event/tofbetaEvTimeTOF"), track.p(), track.beta());
532580
}
581+
if (track.isEvTimeTOF() && !track.isEvTimeT0AC()) {
582+
histos.fill(HIST("event/tofbetaEvTimeTOFOnly"), track.p(), track.beta());
583+
}
584+
if (track.isEvTimeT0AC()) {
585+
histos.fill(HIST("event/tofbetaEvTimeT0AC"), track.p(), track.beta());
586+
}
587+
if (track.isEvTimeT0AC() && !track.isEvTimeTOF()) {
588+
histos.fill(HIST("event/tofbetaEvTimeT0ACOnly"), track.p(), track.beta());
589+
}
533590
histos.fill(HIST("event/tofbeta"), track.p(), track.beta());
534591
histos.fill(HIST("event/length"), track.length());
535592
histos.fill(HIST("event/eta"), track.eta());

0 commit comments

Comments
 (0)