Skip to content

Commit 87ed07a

Browse files
njacazioshahor02
authored andcommitted
Add PID hypothesis in tracking
- Add publisher
1 parent 9ecb35d commit 87ed07a

2 files changed

Lines changed: 211 additions & 27 deletions

File tree

Detectors/GlobalTracking/include/GlobalTracking/MatchITSTPCQC.h

Lines changed: 94 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
#include "SimulationDataFormat/MCCompLabel.h"
2727
#include "SimulationDataFormat/MCTrack.h"
2828
#include "Steer/MCKinematicsReader.h"
29+
#include "ReconstructionDataFormats/PID.h"
2930
#include <unordered_map>
3031
#include <vector>
3132
#include <array>
@@ -117,7 +118,86 @@ class MatchITSTPCQC
117118

118119
void getHistos(TObjArray& objar);
119120

121+
/// \brief Publishes the histograms to the publisher e.g. the one provided by the QC task
122+
/// \tparam T type of the publisher
123+
/// \param publisher the publisher e.g. getObjectsManager()
124+
template <typename T>
125+
void publishHistograms(std::shared_ptr<T> publisher)
126+
{
127+
for (int i = 0; i < matchType::SIZE; ++i) {
128+
publisher->startPublishing(mPtNum[i]);
129+
publisher->startPublishing(mPtDen[i]);
130+
publisher->startPublishing(mFractionITSTPCmatch[i]);
131+
132+
publisher->startPublishing(mPtNum_noEta0[i]);
133+
publisher->startPublishing(mPtDen_noEta0[i]);
134+
publisher->startPublishing(mFractionITSTPCmatch_noEta0[i]);
135+
136+
publisher->startPublishing(mPtPhysPrimNum[i]);
137+
publisher->startPublishing(mPtPhysPrimDen[i]);
138+
publisher->startPublishing(mFractionITSTPCmatchPhysPrim[i]);
139+
140+
publisher->startPublishing(mPhiNum[i]);
141+
publisher->startPublishing(mPhiDen[i]);
142+
publisher->startPublishing(mFractionITSTPCmatchPhi[i]);
143+
144+
if (mUseTrkPID) { // Vs Tracking PID hypothesis
145+
for (int j = 0; j < o2::track::PID::NIDs; ++j) {
146+
// Pt
147+
publisher->startPublishing(mPtNumVsTrkPID[i][j]);
148+
publisher->startPublishing(mPtDenVsTrkPID[i][j]);
149+
publisher->startPublishing(mFractionITSTPCmatchPtVsTrkPID[i][j]);
150+
// Phi
151+
publisher->startPublishing(mPhiNumVsTrkPID[i][j]);
152+
publisher->startPublishing(mPhiDenVsTrkPID[i][j]);
153+
publisher->startPublishing(mFractionITSTPCmatchPhiVsTrkPID[i][j]);
154+
// Eta
155+
publisher->startPublishing(mEtaNumVsTrkPID[i][j]);
156+
publisher->startPublishing(mEtaDenVsTrkPID[i][j]);
157+
publisher->startPublishing(mFractionITSTPCmatchEtaVsTrkPID[i][j]);
158+
}
159+
}
160+
161+
publisher->startPublishing(mPhiPhysPrimNum[i]);
162+
publisher->startPublishing(mPhiPhysPrimDen[i]);
163+
publisher->startPublishing(mFractionITSTPCmatchPhiPhysPrim[i]);
164+
165+
publisher->startPublishing(mPhiVsPtNum[i]);
166+
publisher->startPublishing(mPhiVsPtDen[i]);
167+
publisher->startPublishing(mFractionITSTPCmatchPhiVsPt[i]);
168+
169+
publisher->startPublishing(mEtaNum[i]);
170+
publisher->startPublishing(mEtaDen[i]);
171+
publisher->startPublishing(mFractionITSTPCmatchEta[i]);
172+
173+
publisher->startPublishing(mEtaPhysPrimNum[i]);
174+
publisher->startPublishing(mEtaPhysPrimDen[i]);
175+
publisher->startPublishing(mFractionITSTPCmatchEtaPhysPrim[i]);
176+
177+
publisher->startPublishing(mEtaVsPtNum[i]);
178+
publisher->startPublishing(mEtaVsPtDen[i]);
179+
publisher->startPublishing(mFractionITSTPCmatchEtaVsPt[i]);
180+
181+
publisher->startPublishing(m1OverPtNum[i]);
182+
publisher->startPublishing(m1OverPtDen[i]);
183+
publisher->startPublishing(mFractionITSTPCmatch1OverPt[i]);
184+
185+
publisher->startPublishing(m1OverPtPhysPrimNum[i]);
186+
publisher->startPublishing(m1OverPtPhysPrimDen[i]);
187+
publisher->startPublishing(mFractionITSTPCmatchPhysPrim1OverPt[i]);
188+
}
189+
publisher->startPublishing(mChi2Matching);
190+
publisher->startPublishing(mChi2Refit);
191+
publisher->startPublishing(mTimeResVsPt);
192+
publisher->startPublishing(mResidualPt);
193+
publisher->startPublishing(mResidualPhi);
194+
publisher->startPublishing(mResidualEta);
195+
publisher->startPublishing(mDCAr);
196+
}
197+
120198
void setSources(GID::mask_t src) { mSrc = src; }
199+
void setUseTrkPID(bool b) { mUseTrkPID = b; }
200+
bool getUseTrkPID() const { return mUseTrkPID; }
121201
void setUseMC(bool b) { mUseMC = b; }
122202
bool getUseMC() const { return mUseMC; }
123203
void deleteHistograms();
@@ -147,30 +227,6 @@ class MatchITSTPCQC
147227
void setPtCut(float v) { mPtCut = v; }
148228
void setMaxPtCut(float v) { mPtMaxCut = v; }
149229
void setEtaCut(float v) { mEtaCut = v; } // TODO: define 2 different values for min and max (*)
150-
// to remove after merging QC PR
151-
TH1D* getHistoPt() const { return nullptr; } // old
152-
TH1D* getHistoPtTPC() const { return nullptr; } // old
153-
TEfficiency* getFractionITSTPCmatch() const { return nullptr; } // old
154-
TH1F* getHistoPhi() const { return nullptr; } // old
155-
TH1F* getHistoPhiTPC() const { return nullptr; } // old
156-
TEfficiency* getFractionITSTPCmatchPhi() const { return nullptr; } // old
157-
TH2F* getHistoPhiVsPt() const { return nullptr; } // old
158-
TEfficiency* getFractionITSTPCmatchPhiVsPt() const { return nullptr; } // old
159-
TH1F* getHistoEta() const { return nullptr; } // old
160-
TH1F* getHistoEtaTPC() const { return nullptr; } // old
161-
TEfficiency* getFractionITSTPCmatchEta() const { return nullptr; } // old
162-
TH2F* getHistoEtaVsPt() const { return nullptr; } // old
163-
TH2F* getHistoEtaVsPtTPC() const { return nullptr; } // old
164-
TEfficiency* getFractionITSTPCmatchEtaVsPt() const { return nullptr; } // old
165-
TH1F* getHistoPtPhysPrim() const { return nullptr; } // old
166-
TH1F* getHistoPtTPCPhysPrim() const { return nullptr; } // old
167-
TEfficiency* getFractionITSTPCmatchPhysPrim() const { return nullptr; } // old
168-
TH1F* getHistoPhiPhysPrim() const { return nullptr; } // old
169-
TH1F* getHistoPhiTPCPhysPrim() const { return nullptr; } // old
170-
TEfficiency* getFractionITSTPCmatchPhiPhysPrim() const { return nullptr; } // old
171-
TH1F* getHistoEtaPhysPrim() const { return nullptr; } // old
172-
TH1F* getHistoEtaTPCPhysPrim() const { return nullptr; } // old
173-
TEfficiency* getFractionITSTPCmatchEtaPhysPrim() const { return nullptr; } // old
174230

175231
private:
176232
std::shared_ptr<o2::globaltracking::DataRequest> mDataRequest;
@@ -183,7 +239,8 @@ class MatchITSTPCQC
183239
gsl::span<const o2::its::TrackITS> mITSTracks;
184240
// ITS-TPC
185241
gsl::span<const o2::dataformats::TrackTPCITS> mITSTPCTracks;
186-
bool mUseMC = false;
242+
bool mUseMC = false; // Usage of the MC information
243+
bool mUseTrkPID = false; // Usage of the PID hypothesis in tracking
187244
float mBz = 0; ///< nominal Bz
188245
std::array<std::unordered_map<o2::MCCompLabel, LblInfo>, matchType::SIZE> mMapLabels; // map with labels that have been found for the matched ITSTPC tracks; key is the label,
189246
// value is the LbLinfo with the id of the track with the highest pT found with that label so far,
@@ -203,6 +260,10 @@ class MatchITSTPCQC
203260
TH1F* mPtPhysPrimNum[matchType::SIZE] = {};
204261
TH1F* mPtPhysPrimDen[matchType::SIZE] = {};
205262
TEfficiency* mFractionITSTPCmatchPhysPrim[matchType::SIZE] = {};
263+
// Pt split per PID hypothesis in tracking
264+
TH1D* mPtNumVsTrkPID[matchType::SIZE][track::PID::NIDs] = {};
265+
TH1D* mPtDenVsTrkPID[matchType::SIZE][track::PID::NIDs] = {};
266+
TEfficiency* mFractionITSTPCmatchPtVsTrkPID[matchType::SIZE][track::PID::NIDs] = {};
206267
// Phi
207268
TH1F* mPhiNum[matchType::SIZE] = {};
208269
TH1F* mPhiDen[matchType::SIZE] = {};
@@ -213,6 +274,10 @@ class MatchITSTPCQC
213274
TH2F* mPhiVsPtNum[matchType::SIZE] = {};
214275
TH2F* mPhiVsPtDen[matchType::SIZE] = {};
215276
TEfficiency* mFractionITSTPCmatchPhiVsPt[matchType::SIZE] = {};
277+
// Phi split per PID hypothesis in tracking
278+
TH1D* mPhiNumVsTrkPID[matchType::SIZE][track::PID::NIDs] = {};
279+
TH1D* mPhiDenVsTrkPID[matchType::SIZE][track::PID::NIDs] = {};
280+
TEfficiency* mFractionITSTPCmatchPhiVsTrkPID[matchType::SIZE][track::PID::NIDs] = {};
216281
// Eta
217282
TH1F* mEtaNum[matchType::SIZE] = {};
218283
TH1F* mEtaDen[matchType::SIZE] = {};
@@ -223,6 +288,10 @@ class MatchITSTPCQC
223288
TH2F* mEtaVsPtNum[matchType::SIZE] = {};
224289
TH2F* mEtaVsPtDen[matchType::SIZE] = {};
225290
TEfficiency* mFractionITSTPCmatchEtaVsPt[matchType::SIZE] = {};
291+
// Eta split per PID hypothesis in tracking
292+
TH1D* mEtaNumVsTrkPID[matchType::SIZE][track::PID::NIDs] = {};
293+
TH1D* mEtaDenVsTrkPID[matchType::SIZE][track::PID::NIDs] = {};
294+
TEfficiency* mFractionITSTPCmatchEtaVsTrkPID[matchType::SIZE][track::PID::NIDs] = {};
226295
// Residuals
227296
TH2F* mResidualPt = nullptr;
228297
TH2F* mResidualPhi = nullptr;

Detectors/GlobalTracking/src/MatchITSTPCQC.cxx

Lines changed: 117 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ void MatchITSTPCQC::deleteHistograms()
4747
delete mPtPhysPrimNum[i];
4848
delete mPtPhysPrimDen[i];
4949
delete mFractionITSTPCmatchPhysPrim[i];
50+
5051
// Phi
5152
delete mPhiNum[i];
5253
delete mPhiDen[i];
@@ -57,6 +58,7 @@ void MatchITSTPCQC::deleteHistograms()
5758
delete mPhiVsPtNum[i];
5859
delete mPhiVsPtDen[i];
5960
delete mFractionITSTPCmatchPhiVsPt[i];
61+
6062
// Eta
6163
delete mEtaNum[i];
6264
delete mEtaDen[i];
@@ -67,6 +69,24 @@ void MatchITSTPCQC::deleteHistograms()
6769
delete mEtaVsPtNum[i];
6870
delete mEtaVsPtDen[i];
6971
delete mFractionITSTPCmatchEtaVsPt[i];
72+
73+
if (mUseTrkPID) { // Vs Tracking PID hypothesis
74+
for (int j = 0; j < o2::track::PID::NIDs; ++j) {
75+
// Pt
76+
delete mPtNumVsTrkPID[i][j];
77+
delete mPtDenVsTrkPID[i][j];
78+
delete mFractionITSTPCmatchPtVsTrkPID[i][j];
79+
// Phi
80+
delete mPhiNumVsTrkPID[i][j];
81+
delete mPhiDenVsTrkPID[i][j];
82+
delete mFractionITSTPCmatchPhiVsTrkPID[i][j];
83+
// Eta
84+
delete mEtaNumVsTrkPID[i][j];
85+
delete mEtaDenVsTrkPID[i][j];
86+
delete mFractionITSTPCmatchEtaVsTrkPID[i][j];
87+
}
88+
}
89+
7090
// 1/Pt
7191
delete m1OverPtNum[i];
7292
delete m1OverPtDen[i];
@@ -99,20 +119,36 @@ void MatchITSTPCQC::reset()
99119
mPtDen_noEta0[i]->Reset();
100120
mPtPhysPrimNum[i]->Reset();
101121
mPtPhysPrimDen[i]->Reset();
122+
102123
// Phi
103124
mPhiNum[i]->Reset();
104125
mPhiDen[i]->Reset();
105126
mPhiPhysPrimNum[i]->Reset();
106127
mPhiPhysPrimDen[i]->Reset();
107128
mPhiVsPtNum[i]->Reset();
108129
mPhiVsPtDen[i]->Reset();
130+
109131
// Eta
110132
mEtaNum[i]->Reset();
111133
mEtaDen[i]->Reset();
112134
mEtaPhysPrimNum[i]->Reset();
113135
mEtaPhysPrimDen[i]->Reset();
114136
mEtaVsPtNum[i]->Reset();
115137
mEtaVsPtDen[i]->Reset();
138+
139+
if (mUseTrkPID) { // Vs Tracking PID hypothesis
140+
for (int j = 0; j < o2::track::PID::NIDs; ++j) {
141+
// Pt
142+
mPtNumVsTrkPID[i][j]->Reset();
143+
mPtDenVsTrkPID[i][j]->Reset();
144+
// Phi
145+
mPhiNumVsTrkPID[i][j]->Reset();
146+
mPhiDenVsTrkPID[i][j]->Reset();
147+
// Eta
148+
mEtaNumVsTrkPID[i][j]->Reset();
149+
mEtaDenVsTrkPID[i][j]->Reset();
150+
}
151+
}
116152
// 1/Pt
117153
m1OverPtNum[i]->Reset();
118154
m1OverPtDen[i]->Reset();
@@ -158,6 +194,23 @@ bool MatchITSTPCQC::init()
158194
mEtaVsPtNum[i] = new TH2F(Form("mEtaVsPtNum_%s", title[i].c_str()), Form("Eta vs Pt distribution of ITSTPC matched tracks, wrt %s tracks; #it{p}_{T} [GeV#it{c}]; #it{p}_{T} [GeV#it{c}]; Eta", title[i].c_str()), 100, 0.f, 20.f, 100, -2.f, 2.f);
159195
mEtaVsPtDen[i] = new TH2F(Form("mEtaVsPtDen_%s", title[i].c_str()), Form("Eta vs Pt distribution of %s tracks; #it{p}_{T} [GeV#it{c}]; #it{p}_{T} [GeV#it{c}]; Eta", title[i].c_str()), 100, 0.f, 20.f, 100, -2.f, 2.f);
160196
mFractionITSTPCmatchEtaVsPt[i] = new TEfficiency(Form("mFractionITSTPCmatchEtaVsPt_%s", title[i].c_str()), Form("Fraction of ITSTPC matched tracks, wrt %s tracks, Eta vs Pt; #it{p}_{T} [GeV#it{c}]; Eta; Eff", title[i].c_str()), 100, 0.f, 20.f, 100, -2.f, 2.f);
197+
if (mUseTrkPID) { // Vs Tracking PID hypothesis
198+
for (int j = 0; j < o2::track::PID::NIDs; ++j) {
199+
// Pt
200+
mPtNumVsTrkPID[i][j] = new TH1D(Form("mPtNumVsTrkPID_%s_PID%i", title[i].c_str(), j), Form("Pt distribution of ITSTPC matched tracks, wrt %s tracks %s, TrkPID %i; Pt [GeV/c]; dNdPt", title[i].c_str(), etaSel[i].c_str(), j), 100, 0.f, 20.f);
201+
mPtDenVsTrkPID[i][j] = new TH1D(Form("mPtDenVsTrkPID_%s_PID%i", title[i].c_str(), j), Form("Pt distribution of %s tracks %s, TrkPID %i; Pt [GeV/c]; dNdPt", title[i].c_str(), etaSel[i].c_str(), j), 100, 0.f, 20.f);
202+
mFractionITSTPCmatchPtVsTrkPID[i][j] = new TEfficiency(Form("mFractionITSTPCmatchPtVsTrkPID_%s_PID%i", title[i].c_str(), j), Form("Fraction of ITSTPC matched tracks wrt %s tracks vs Pt %s, TrkPID %i; Pt [GeV/c]; Eff", title[i].c_str(), etaSel[i].c_str(), j), 100, 0.f, 20.f);
203+
// Phi
204+
mPhiNumVsTrkPID[i][j] = new TH1D(Form("mPhiNumVsTrkPID_%s_PID%i", title[i].c_str(), j), Form("Phi distribution of ITSTPC matched tracks, wrt %s tracks %s, TrkPID %i; Phi [rad]; dNdPhi", title[i].c_str(), etaSel[i].c_str(), j), 100, 0.f, 2 * TMath::Pi());
205+
mPhiDenVsTrkPID[i][j] = new TH1D(Form("mPhiDenVsTrkPID_%s_PID%i", title[i].c_str(), j), Form("Phi distribution of %s tracks %s, TrkPID %i; Phi [rad]; dNdPhi", title[i].c_str(), etaSel[i].c_str(), j), 100, 0.f, 2 * TMath::Pi());
206+
mFractionITSTPCmatchPhiVsTrkPID[i][j] = new TEfficiency(Form("mFractionITSTPCmatchPhiVsTrkPID_%s_PID%i", title[i].c_str(), j), Form("Fraction of ITSTPC matched tracks wrt %s tracks vs Phi %s, TrkPID %i; Phi [rad]; Eff", title[i].c_str(), etaSel[i].c_str(), j), 100, 0.f, 2 * TMath::Pi());
207+
// Eta
208+
mEtaNumVsTrkPID[i][j] = new TH1D(Form("mEtaNumVsTrkPID_%s_PID%i", title[i].c_str(), j), Form("Eta distribution of ITSTPC matched tracks, wrt %s tracks %s, TrkPID %i; Eta; dNdEta", title[i].c_str(), etaSel[i].c_str(), j), 100, -2.f, 2.f);
209+
mEtaDenVsTrkPID[i][j] = new TH1D(Form("mEtaDenVsTrkPID_%s_PID%i", title[i].c_str(), j), Form("Eta distribution of %s tracks %s, TrkPID %i; Eta; dNdEta", title[i].c_str(), etaSel[i].c_str(), j), 100, -2.f, 2.f);
210+
mFractionITSTPCmatchEtaVsTrkPID[i][j] = new TEfficiency(Form("mFractionITSTPCmatchEtaVsTrkPID_%s_PID%i", title[i].c_str(), j), Form("Fraction of ITSTPC matched tracks wrt %s tracks vs Eta %s, TrkPID %i; Eta; Eff", title[i].c_str(), etaSel[i].c_str(), j), 100, -2.f, 2.f);
211+
}
212+
}
213+
161214
// 1/pt
162215
m1OverPtNum[i] = new TH1D(Form("m1OverPtNum_%s", title[i].c_str()), Form("1/Pt distribution of matched tracks, wrt %s tracks %s; 1/Pt [c/GeV]; dNdPt", title[i].c_str(), etaSel[i].c_str()), 100, -20.f, 20.f);
163216
m1OverPtDen[i] = new TH1D(Form("m1OverPtDen_%s", title[i].c_str()), Form("1/Pt distribution of %s tracks %s; 1/Pt [c/GeV]; dNdPt", title[i].c_str(), etaSel[i].c_str()), 100, -20.f, 20.f);
@@ -202,25 +255,44 @@ bool MatchITSTPCQC::init()
202255
mFractionITSTPCmatchPhysPrim1OverPt[i] = new TEfficiency(Form("mFractionITSTPCmatchPhysPrim1OverPt_%s", title[i].c_str()), Form("Fraction of ITSTPC matched tracks vs 1/Pt (physical primary), wrt %s tracks %s; 1/Pt [c/GeV]; Eff", title[i].c_str(), etaSel[i].c_str()), 100, -20.f, 20.f);
203256

204257
// some extra settings
258+
// Pt
205259
mPtNum[i]->Sumw2();
206260
mPtDen[i]->Sumw2();
207261
mPtNum_noEta0[i]->Sumw2();
208262
mPtDen_noEta0[i]->Sumw2();
263+
mPtPhysPrimNum[i]->Sumw2();
264+
mPtPhysPrimDen[i]->Sumw2();
265+
266+
// Phi
209267
mPhiNum[i]->Sumw2();
210268
mPhiDen[i]->Sumw2();
211269
mPhiVsPtNum[i]->Sumw2();
212270
mPhiVsPtDen[i]->Sumw2();
213-
mPtPhysPrimNum[i]->Sumw2();
214-
mPtPhysPrimDen[i]->Sumw2();
215271
mPhiPhysPrimNum[i]->Sumw2();
216272
mPhiPhysPrimDen[i]->Sumw2();
273+
274+
// Eta
217275
mEtaNum[i]->Sumw2();
218276
mEtaDen[i]->Sumw2();
219277
mEtaPhysPrimNum[i]->Sumw2();
220278
mEtaPhysPrimDen[i]->Sumw2();
221279
mEtaVsPtNum[i]->Sumw2();
222280
mEtaVsPtDen[i]->Sumw2();
223281

282+
if (mUseTrkPID) { // Vs Tracking PID hypothesis
283+
for (int j = 0; j < o2::track::PID::NIDs; ++j) {
284+
// Pt
285+
mPtNumVsTrkPID[i][j]->Sumw2();
286+
mPtDenVsTrkPID[i][j]->Sumw2();
287+
// Phi
288+
mPhiNumVsTrkPID[i][j]->Sumw2();
289+
mPhiDenVsTrkPID[i][j]->Sumw2();
290+
// Eta
291+
mEtaNumVsTrkPID[i][j]->Sumw2();
292+
mEtaDenVsTrkPID[i][j]->Sumw2();
293+
}
294+
}
295+
224296
m1OverPtNum[i]->Sumw2();
225297
m1OverPtDen[i]->Sumw2();
226298
m1OverPtPhysPrimNum[i]->Sumw2();
@@ -422,12 +494,24 @@ void MatchITSTPCQC::run(o2::framework::ProcessingContext& ctx)
422494
mPhiDen[i]->Fill(trkDen.getPhi());
423495
mPhiVsPtDen[i]->Fill(trkDen.getPt(), trkDen.getPhi());
424496
m1OverPtDen[i]->Fill(trkDen.getSign() * trkDen.getPtInv());
497+
if (mUseTrkPID) { // Vs Tracking PID hypothesis
498+
mPtNumVsTrkPID[i][trkDen.getPID()]->Fill(trkDen.getPt());
499+
mPhiNumVsTrkPID[i][trkDen.getPID()]->Fill(trkDen.getPhi());
500+
// we fill also the denominator
501+
mPtDenVsTrkPID[i][trkDen.getPID()]->Fill(trkDen.getPt());
502+
mPhiDenVsTrkPID[i][trkDen.getPID()]->Fill(trkDen.getPhi());
503+
}
425504
}
426505
mEtaNum[i]->Fill(trkDen.getEta());
427506
mEtaVsPtNum[i]->Fill(trkDen.getPt(), trkDen.getEta());
428507
// we fill also the denominator
429508
mEtaDen[i]->Fill(trkDen.getEta());
430509
mEtaVsPtDen[i]->Fill(trkDen.getPt(), trkDen.getEta());
510+
if (mUseTrkPID) { // Vs Tracking PID hypothesis
511+
mEtaNumVsTrkPID[i][trkDen.getPID()]->Fill(trkDen.getEta());
512+
// we fill also the denominator
513+
mEtaDenVsTrkPID[i][trkDen.getPID()]->Fill(trkDen.getEta());
514+
}
431515
if (el.second.mIsPhysicalPrimary) {
432516
if (isEtaITSOk) {
433517
mPtPhysPrimNum[i]->Fill(trkDen.getPt());
@@ -498,10 +582,17 @@ void MatchITSTPCQC::run(o2::framework::ProcessingContext& ctx)
498582
mPtNum_noEta0[i]->Fill(trkRef.getPt());
499583
}
500584
mPhiNum[i]->Fill(trkRef.getPhi());
585+
if (mUseTrkPID) { // Vs Tracking PID hypothesis
586+
mPtNumVsTrkPID[i][trkRef.getPID()]->Fill(trkRef.getPt());
587+
mPhiNumVsTrkPID[i][trkRef.getPID()]->Fill(trkRef.getPhi());
588+
}
501589
mPhiVsPtNum[i]->Fill(trkRef.getPt(), trkRef.getPhi());
502590
m1OverPtNum[i]->Fill(trkRef.getSign() * trkRef.getPtInv());
503591
}
504592
mEtaNum[i]->Fill(trkRef.getEta());
593+
if (mUseTrkPID) { // Vs Tracking PID hypothesis
594+
mEtaNumVsTrkPID[i][trkRef.getPID()]->Fill(trkRef.getEta());
595+
}
505596
mEtaVsPtNum[i]->Fill(trkRef.getPt(), trkRef.getEta());
506597
}
507598
if (i == matchType::TPC) {
@@ -750,6 +841,13 @@ void MatchITSTPCQC::finalize()
750841
setEfficiency(mFractionITSTPCmatchPhiVsPt[i], mPhiVsPtNum[i], mPhiVsPtDen[i], true);
751842
setEfficiency(mFractionITSTPCmatchEtaVsPt[i], mEtaVsPtNum[i], mEtaVsPtDen[i], true);
752843
setEfficiency(mFractionITSTPCmatch1OverPt[i], m1OverPtNum[i], m1OverPtDen[i]);
844+
if (mUseTrkPID) { // Vs Tracking PID hypothesis
845+
for (int j = 0; j < o2::track::PID::NIDs; ++j) {
846+
setEfficiency(mFractionITSTPCmatchPtVsTrkPID[i][j], mPtNumVsTrkPID[i][j], mPtDenVsTrkPID[i][j]);
847+
setEfficiency(mFractionITSTPCmatchPhiVsTrkPID[i][j], mPhiNumVsTrkPID[i][j], mPhiDenVsTrkPID[i][j]);
848+
setEfficiency(mFractionITSTPCmatchEtaVsTrkPID[i][j], mEtaNumVsTrkPID[i][j], mEtaDenVsTrkPID[i][j]);
849+
}
850+
}
753851
if (mUseMC) {
754852
setEfficiency(mFractionITSTPCmatchPhysPrim[i], mPtPhysPrimNum[i], mPtPhysPrimDen[i]);
755853
setEfficiency(mFractionITSTPCmatchPhiPhysPrim[i], mPhiPhysPrimNum[i], mPhiPhysPrimDen[i]);
@@ -836,6 +934,23 @@ void MatchITSTPCQC::getHistos(TObjArray& objar)
836934
objar.Add(mPhiDen[i]);
837935
objar.Add(mFractionITSTPCmatchPhi[i]);
838936

937+
if (mUseTrkPID) { // Vs Tracking PID hypothesis
938+
for (int j = 0; j < o2::track::PID::NIDs; ++j) {
939+
// Pt
940+
objar.Add(mPtNumVsTrkPID[i][j]);
941+
objar.Add(mPtDenVsTrkPID[i][j]);
942+
objar.Add(mFractionITSTPCmatchPtVsTrkPID[i][j]);
943+
// Phi
944+
objar.Add(mPhiNumVsTrkPID[i][j]);
945+
objar.Add(mPhiDenVsTrkPID[i][j]);
946+
objar.Add(mFractionITSTPCmatchPhiVsTrkPID[i][j]);
947+
// Eta
948+
objar.Add(mEtaNumVsTrkPID[i][j]);
949+
objar.Add(mEtaDenVsTrkPID[i][j]);
950+
objar.Add(mFractionITSTPCmatchEtaVsTrkPID[i][j]);
951+
}
952+
}
953+
839954
objar.Add(mPhiPhysPrimNum[i]);
840955
objar.Add(mPhiPhysPrimDen[i]);
841956
objar.Add(mFractionITSTPCmatchPhiPhysPrim[i]);

0 commit comments

Comments
 (0)