Project
Loading...
Searching...
No Matches
MatchITSTPCQC.h
Go to the documentation of this file.
1// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3// All rights not expressly granted are reserved.
4//
5// This software is distributed under the terms of the GNU General Public
6// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7//
8// In applying this license CERN does not waive the privileges and immunities
9// granted to it by virtue of its status as an Intergovernmental Organization
10// or submit itself to any jurisdiction.
11
15
16#ifndef ALICEO2_GLOBTRACKING_MATCHTPCITS_QC_
17#define ALICEO2_GLOBTRACKING_MATCHTPCITS_QC_
18
19#include <TH1D.h>
20#include <TH1F.h>
21#include <TH2F.h>
22#include <TEfficiency.h>
23#include <TObjArray.h>
30#include <unordered_map>
31#include <vector>
32#include <array>
33#include <set>
34
35namespace o2
36{
37
38namespace globaltracking
39{
40
42
43struct LblInfo {
44
45 int mIdx = -1;
46 bool mIsPhysicalPrimary = false;
47};
48
50{
51 public:
52 enum matchType : int { TPC = 0,
55
56 MatchITSTPCQC() = default;
58
59 bool init();
60 void initDataRequest();
62 void setDataRequest(const std::shared_ptr<o2::globaltracking::DataRequest>& dr) { mDataRequest = dr; }
63 void finalize();
64 void reset();
65
66 TH1D* getHistoPtNum(matchType m) const { return mPtNum[m]; }
67 TH1D* getHistoPtDen(matchType m) const { return mPtDen[m]; }
68 TEfficiency* getFractionITSTPCmatch(matchType m) const { return mFractionITSTPCmatch[m]; }
69
70 TH1D* getHistoPtNumNoEta0(matchType m) const { return mPtNum_noEta0[m]; }
71 TH1D* getHistoPtDenNoEta0(matchType m) const { return mPtDen_noEta0[m]; }
72 TEfficiency* getFractionITSTPCmatchNoEta0(matchType m) const { return mFractionITSTPCmatch_noEta0[m]; }
73
74 TH1F* getHistoPhiNum(matchType m) const { return mPhiNum[m]; }
75 TH1F* getHistoPhiDen(matchType m) const { return mPhiDen[m]; }
76 TEfficiency* getFractionITSTPCmatchPhi(matchType m) const { return mFractionITSTPCmatchPhi[m]; }
77
78 TH2F* getHistoPhiVsPtNum(matchType m) const { return mPhiVsPtNum[m]; }
79 TH2F* getHistoPhiVsPtDen(matchType m) const { return mPhiVsPtDen[m]; }
80 TEfficiency* getFractionITSTPCmatchPhiVsPt(matchType m) const { return mFractionITSTPCmatchPhiVsPt[m]; }
81
82 TH1F* getHistoEtaNum(matchType m) const { return mEtaNum[m]; }
83 TH1F* getHistoEtaDen(matchType m) const { return mEtaDen[m]; }
84 TEfficiency* getFractionITSTPCmatchEta(matchType m) const { return mFractionITSTPCmatchEta[m]; }
85
86 TH2F* getHistoEtaVsPtNum(matchType m) const { return mEtaVsPtNum[m]; }
87 TH2F* getHistoEtaVsPtDen(matchType m) const { return mEtaVsPtDen[m]; }
88 TEfficiency* getFractionITSTPCmatchEtaVsPt(matchType m) const { return mFractionITSTPCmatchEtaVsPt[m]; }
89
90 TH2F* getHistoClsVsPtNum(matchType m) const { return mClsVsPtNum[m]; }
91 TH2F* getHistoClsVsPtDen(matchType m) const { return mClsVsPtDen[m]; }
92 TEfficiency* getFractionITSTPCmatchClsVsPt(matchType m) const { return mFractionITSTPCmatchClsVsPt[m]; }
93
94 TH2F* getHistoChi2VsPtNum(matchType m) const { return mChi2VsPtNum[m]; }
95 TH2F* getHistoChi2VsPtDen(matchType m) const { return mChi2VsPtDen[m]; }
96 TEfficiency* getFractionITSTPCmatchChi2VsPt(matchType m) const { return mFractionITSTPCmatchChi2VsPt[m]; }
97
98 TH1F* getHistoPtPhysPrimNum(matchType m) const { return mPtPhysPrimNum[m]; }
99 TH1F* getHistoPtPhysPrimDen(matchType m) const { return mPtPhysPrimDen[m]; }
100 TEfficiency* getFractionITSTPCmatchPhysPrim(matchType m) const { return mFractionITSTPCmatchPhysPrim[m]; }
101
102 TH1F* getHistoPhiPhysPrimNum(matchType m) const { return mPhiPhysPrimNum[m]; }
103 TH1F* getHistoPhiPhysPrimDen(matchType m) const { return mPhiPhysPrimDen[m]; }
104 TEfficiency* getFractionITSTPCmatchPhiPhysPrim(matchType m) const { return mFractionITSTPCmatchPhiPhysPrim[m]; }
105
106 TH1F* getHistoEtaPhysPrimNum(matchType m) const { return mEtaPhysPrimNum[m]; }
107 TH1F* getHistoEtaPhysPrimDen(matchType m) const { return mEtaPhysPrimDen[m]; }
108 TEfficiency* getFractionITSTPCmatchEtaPhysPrim(matchType m) const { return mFractionITSTPCmatchEtaPhysPrim[m]; }
109
110 TH2F* getHistoResidualPt() const { return mResidualPt; }
111 TH2F* getHistoResidualPhi() const { return mResidualPhi; }
112 TH2F* getHistoResidualEta() const { return mResidualEta; }
113
114 TH1F* getHistoChi2Matching() const { return mChi2Matching; }
115 TH1F* getHistoChi2Refit() const { return mChi2Refit; }
116 TH2F* getHistoTimeResVsPt() const { return mTimeResVsPt; }
117 TH1F* getHistoDCAr() const { return mDCAr; }
118 TH2F* getHistoDCArVsPtNum() const { return mDCArVsPtNum; }
119 TH2F* getHistoDCArVsPtDen() const { return mDCArVsPtDen; }
120 TEfficiency* getFractionITSTPCmatchDCArVsPt() const { return mFractionITSTPCmatchDCArVsPt; }
121
122 TH1D* getHisto1OverPtNum(matchType m) const { return m1OverPtNum[m]; }
123 TH1D* getHisto1OverPtDen(matchType m) const { return m1OverPtDen[m]; }
124 TEfficiency* getFractionITSTPCmatch1OverPt(matchType m) const { return mFractionITSTPCmatch1OverPt[m]; }
125
126 TH1D* getHisto1OverPtPhysPrimNum(matchType m) const { return m1OverPtPhysPrimNum[m]; }
127 TH1D* getHisto1OverPtPhysPrimDen(matchType m) const { return m1OverPtPhysPrimDen[m]; }
128 TEfficiency* getFractionITSTPCmatchPhysPrim1OverPt(matchType m) const { return mFractionITSTPCmatchPhysPrim1OverPt[m]; }
129
130 void getHistos(TObjArray& objar);
131
135 template <typename T>
136 void publishHistograms(const std::shared_ptr<T>& publisher)
137 {
138 for (int i = 0; i < matchType::SIZE; ++i) {
139 // Pt
140 publisher->startPublishing(mPtNum[i]);
141 publisher->startPublishing(mPtDen[i]);
142 publisher->startPublishing(mFractionITSTPCmatch[i]);
143
144 publisher->startPublishing(mPtNum_noEta0[i]);
145 publisher->startPublishing(mPtDen_noEta0[i]);
146 publisher->startPublishing(mFractionITSTPCmatch_noEta0[i]);
147
148 // Phi
149 publisher->startPublishing(mPhiNum[i]);
150 publisher->startPublishing(mPhiDen[i]);
151 publisher->startPublishing(mFractionITSTPCmatchPhi[i]);
152
153 publisher->startPublishing(mPhiVsPtNum[i]);
154 publisher->startPublishing(mPhiVsPtDen[i]);
155 publisher->startPublishing(mFractionITSTPCmatchPhiVsPt[i]);
156
157 // Eta
158 publisher->startPublishing(mEtaNum[i]);
159 publisher->startPublishing(mEtaDen[i]);
160 publisher->startPublishing(mFractionITSTPCmatchEta[i]);
161
162 publisher->startPublishing(mEtaVsPtNum[i]);
163 publisher->startPublishing(mEtaVsPtDen[i]);
164 publisher->startPublishing(mFractionITSTPCmatchEtaVsPt[i]);
165
166 // Clusters
167 publisher->startPublishing(mClsVsPtNum[i]);
168 publisher->startPublishing(mClsVsPtDen[i]);
169 publisher->startPublishing(mFractionITSTPCmatchClsVsPt[i]);
170
171 // Chi2
172 publisher->startPublishing(mChi2VsPtNum[i]);
173 publisher->startPublishing(mChi2VsPtDen[i]);
174 publisher->startPublishing(mFractionITSTPCmatchChi2VsPt[i]);
175
176 // 1/pt
177 publisher->startPublishing(m1OverPtNum[i]);
178 publisher->startPublishing(m1OverPtDen[i]);
179 publisher->startPublishing(mFractionITSTPCmatch1OverPt[i]);
180
181 if (mUseTrkPID) { // Vs Tracking PID hypothesis
182 for (int j = 0; j < o2::track::PID::NIDs; ++j) {
183 // Pt
184 publisher->startPublishing(mPtNumVsTrkPID[i][j]);
185 publisher->startPublishing(mPtDenVsTrkPID[i][j]);
186 publisher->startPublishing(mFractionITSTPCmatchPtVsTrkPID[i][j]);
187
188 // Phi
189 publisher->startPublishing(mPhiNumVsTrkPID[i][j]);
190 publisher->startPublishing(mPhiDenVsTrkPID[i][j]);
191 publisher->startPublishing(mFractionITSTPCmatchPhiVsTrkPID[i][j]);
192
193 // Eta
194 publisher->startPublishing(mEtaNumVsTrkPID[i][j]);
195 publisher->startPublishing(mEtaDenVsTrkPID[i][j]);
196 publisher->startPublishing(mFractionITSTPCmatchEtaVsTrkPID[i][j]);
197 }
198 }
199
200 if (mUseMC) {
201 publisher->startPublishing(mPhiPhysPrimNum[i]);
202 publisher->startPublishing(mPhiPhysPrimDen[i]);
203 publisher->startPublishing(mFractionITSTPCmatchPhiPhysPrim[i]);
204 publisher->startPublishing(mPtPhysPrimNum[i]);
205 publisher->startPublishing(mPtPhysPrimDen[i]);
206 publisher->startPublishing(mFractionITSTPCmatchPhysPrim[i]);
207 publisher->startPublishing(mEtaPhysPrimNum[i]);
208 publisher->startPublishing(mEtaPhysPrimDen[i]);
209 publisher->startPublishing(mFractionITSTPCmatchEtaPhysPrim[i]);
210 publisher->startPublishing(m1OverPtPhysPrimNum[i]);
211 publisher->startPublishing(m1OverPtPhysPrimDen[i]);
212 publisher->startPublishing(mFractionITSTPCmatchPhysPrim1OverPt[i]);
213 }
214 }
215 publisher->startPublishing(mChi2Matching);
216 publisher->startPublishing(mChi2Refit);
217 publisher->startPublishing(mTimeResVsPt);
218 publisher->startPublishing(mResidualPt);
219 publisher->startPublishing(mResidualPhi);
220 publisher->startPublishing(mResidualEta);
221 publisher->startPublishing(mDCAr);
222 publisher->startPublishing(mDCArVsPtNum);
223 publisher->startPublishing(mDCArVsPtDen);
224 publisher->startPublishing(mFractionITSTPCmatchDCArVsPt);
225 }
226
227 void setSources(GID::mask_t src) { mSrc = src; }
228 void setUseTrkPID(bool b) { mUseTrkPID = b; }
229 bool getUseTrkPID() const { return mUseTrkPID; }
230 void setUseMC(bool b) { mUseMC = b; }
231 bool getUseMC() const { return mUseMC; }
232 void deleteHistograms();
233 void setBz(float bz) { mBz = bz; }
234
235 // ITS track
236 void setMinPtITSCut(float v) { mPtITSCut = v; };
237 void setEtaITSCut(float v) { mEtaITSCut = v; }; // TODO: define 2 different values for min and max (**)
238 void setMinNClustersITS(float v) { mMinNClustersITS = v; }
239 void setMaxChi2PerClusterITS(float v) { mMaxChi2PerClusterITS = v; }
240 // TO DO: define an agreed way to implement the setter for ITS matching (min. # layers, which layers)
241 // [...] --> exploit the method TrackCuts::setRequireHitsInITSLayers(...)
242 // TPC track
243 void setMinPtTPCCut(float v) { mPtTPCCut = v; };
244 void setEtaTPCCut(float v) { mEtaTPCCut = v; }; // TODO: define 2 different values for min and max (***)
245 void setMinNTPCClustersCut(float v) { mNTPCClustersCut = v; }
246 void setMinDCAtoBeamPipeCut(std::array<float, 2> v)
247 {
250 }
251 void setMinDCAtoBeamPipeDistanceCut(float v) { mDCATPCCut = v; }
252 void setMinDCAtoBeamPipeYCut(float v) { mDCATPCCutY = v; }
253 // ITS-TPC kinematics
254 void setPtCut(float v) { mPtCut = v; }
255 void setMaxPtCut(float v) { mPtMaxCut = v; }
256 void setEtaCut(float v) { mEtaCut = v; } // TODO: define 2 different values for min and max (*)
257
258 private:
259 std::shared_ptr<o2::globaltracking::DataRequest> mDataRequest;
261 GID::mask_t mSrc = GID::getSourcesMask("ITS,TPC,ITS-TPC");
262 GID::mask_t mAllowedSources = GID::getSourcesMask("ITS,TPC,ITS-TPC");
263 // TPC
264 gsl::span<const o2::tpc::TrackTPC> mTPCTracks;
265 // ITS
266 gsl::span<const o2::its::TrackITS> mITSTracks;
267 // ITS-TPC
268 gsl::span<const o2::dataformats::TrackTPCITS> mITSTPCTracks;
269 bool mUseMC = false; // Usage of the MC information
270 bool mUseTrkPID = false; // Usage of the PID hypothesis in tracking
271 float mBz = 0;
272 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,
273 // value is the LbLinfo with the id of the track with the highest pT found with that label so far,
274 // and the flag to say if it is a physical primary or not
275 std::array<std::unordered_map<o2::MCCompLabel, LblInfo>, matchType::SIZE> mMapRefLabels; // map with labels that have been found for the unmatched TPC tracks; key is the label,
276 // value is the LblInfo with the id of the track with the highest number of TPC clusters found
277 // with that label so far, and the flag to say if it is a physical primary or not
278 o2::steer::MCKinematicsReader mcReader; // reader of MC information
279
280 // Pt
281 TH1D* mPtNum[matchType::SIZE] = {};
282 TH1D* mPtDen[matchType::SIZE] = {};
283 TEfficiency* mFractionITSTPCmatch[matchType::SIZE] = {};
284 TH1D* mPtNum_noEta0[matchType::SIZE] = {};
285 TH1D* mPtDen_noEta0[matchType::SIZE] = {};
286 TEfficiency* mFractionITSTPCmatch_noEta0[matchType::SIZE] = {};
287 TH1F* mPtPhysPrimNum[matchType::SIZE] = {};
288 TH1F* mPtPhysPrimDen[matchType::SIZE] = {};
289 TEfficiency* mFractionITSTPCmatchPhysPrim[matchType::SIZE] = {};
290 // Pt split per PID hypothesis in tracking
291 TH1D* mPtNumVsTrkPID[matchType::SIZE][track::PID::NIDs] = {};
292 TH1D* mPtDenVsTrkPID[matchType::SIZE][track::PID::NIDs] = {};
293 TEfficiency* mFractionITSTPCmatchPtVsTrkPID[matchType::SIZE][track::PID::NIDs] = {};
294 // Phi
295 TH1F* mPhiNum[matchType::SIZE] = {};
296 TH1F* mPhiDen[matchType::SIZE] = {};
297 TEfficiency* mFractionITSTPCmatchPhi[matchType::SIZE] = {};
298 TH1F* mPhiPhysPrimNum[matchType::SIZE] = {};
299 TH1F* mPhiPhysPrimDen[matchType::SIZE] = {};
300 TEfficiency* mFractionITSTPCmatchPhiPhysPrim[matchType::SIZE] = {};
301 TH2F* mPhiVsPtNum[matchType::SIZE] = {};
302 TH2F* mPhiVsPtDen[matchType::SIZE] = {};
303 TEfficiency* mFractionITSTPCmatchPhiVsPt[matchType::SIZE] = {};
304 // Phi split per PID hypothesis in tracking
305 TH1D* mPhiNumVsTrkPID[matchType::SIZE][track::PID::NIDs] = {};
306 TH1D* mPhiDenVsTrkPID[matchType::SIZE][track::PID::NIDs] = {};
307 TEfficiency* mFractionITSTPCmatchPhiVsTrkPID[matchType::SIZE][track::PID::NIDs] = {};
308 // Eta
309 TH1F* mEtaNum[matchType::SIZE] = {};
310 TH1F* mEtaDen[matchType::SIZE] = {};
311 TEfficiency* mFractionITSTPCmatchEta[matchType::SIZE] = {};
312 TH1F* mEtaPhysPrimNum[matchType::SIZE] = {};
313 TH1F* mEtaPhysPrimDen[matchType::SIZE] = {};
314 TEfficiency* mFractionITSTPCmatchEtaPhysPrim[matchType::SIZE] = {};
315 TH2F* mEtaVsPtNum[matchType::SIZE] = {};
316 TH2F* mEtaVsPtDen[matchType::SIZE] = {};
317 TEfficiency* mFractionITSTPCmatchEtaVsPt[matchType::SIZE] = {};
318 // Clusters
319 TH2F* mClsVsPtNum[matchType::SIZE] = {};
320 TH2F* mClsVsPtDen[matchType::SIZE] = {};
321 TEfficiency* mFractionITSTPCmatchClsVsPt[matchType::SIZE] = {};
322 // Chi2
323 TH2F* mChi2VsPtNum[matchType::SIZE] = {};
324 TH2F* mChi2VsPtDen[matchType::SIZE] = {};
325 TEfficiency* mFractionITSTPCmatchChi2VsPt[matchType::SIZE] = {};
326 // Eta split per PID hypothesis in tracking
327 TH1D* mEtaNumVsTrkPID[matchType::SIZE][track::PID::NIDs] = {};
328 TH1D* mEtaDenVsTrkPID[matchType::SIZE][track::PID::NIDs] = {};
329 TEfficiency* mFractionITSTPCmatchEtaVsTrkPID[matchType::SIZE][track::PID::NIDs] = {};
330 // Residuals
331 TH2F* mResidualPt = nullptr;
332 TH2F* mResidualPhi = nullptr;
333 TH2F* mResidualEta = nullptr;
334 // Others
335 TH1F* mChi2Matching = nullptr;
336 TH1F* mChi2Refit = nullptr;
337 TH2F* mTimeResVsPt = nullptr;
338 TH1F* mDCAr = nullptr;
339 TH2F* mDCArVsPtNum = nullptr;
340 TH2F* mDCArVsPtDen = nullptr;
341 TEfficiency* mFractionITSTPCmatchDCArVsPt = nullptr;
342 // 1/Pt
343 TH1D* m1OverPtNum[matchType::SIZE] = {};
344 TH1D* m1OverPtDen[matchType::SIZE] = {};
345 TEfficiency* mFractionITSTPCmatch1OverPt[matchType::SIZE] = {};
346 TH1D* m1OverPtPhysPrimNum[matchType::SIZE] = {};
347 TH1D* m1OverPtPhysPrimDen[matchType::SIZE] = {};
348 TEfficiency* mFractionITSTPCmatchPhysPrim1OverPt[matchType::SIZE] = {};
349
350 void setEfficiency(TEfficiency* eff, TH1* hnum, TH1* hden, bool is2D = false);
351
352 int mNTPCSelectedTracks = 0;
353 int mNITSSelectedTracks = 0;
354 int mNITSTPCSelectedTracks[matchType::SIZE] = {0, 0};
355
356 // cut values
357 // ITS track
358 float mPtITSCut = 0.f; // min pT for ITS track
359 float mEtaITSCut = 1e10f; // eta window for ITS track --> TODO: define 2 different values for min and max (**)
360 int mMinNClustersITS = 0; // min number of ITS clusters
361 float mMaxChi2PerClusterITS{1e10f}; // max its fit chi2 per ITS cluster
362 std::vector<std::pair<int8_t, std::set<uint8_t>>> mRequiredITSHits{}; // vector of ITS requirements (minNRequiredHits in specific requiredLayers)
363 // TPC track
364 float mPtTPCCut = 0.1f; // min pT for TPC track
365 float mEtaTPCCut = 1.4f; // eta window for TPC track --> TODO: define 2 different values for min and max (***)
366 int32_t mNTPCClustersCut = 60; // minimum number of TPC clusters for TPC track
367 float mDCATPCCut = 100.f; // max DCA 3D to PV for TPC track
368 float mDCATPCCutY = 10.f; // max DCA xy to PV for TPC track
369 // ITS-TPC kinematics
370 float mPtCut = 0.1f;
371 float mPtMaxCut = 1e10f;
372 float mEtaCut = 1e10f; // 1e10f as defaults of Detectors/GlobalTracking/include/GlobalTracking/TrackCuts.h
373 // TODO: define 2 different values for min and max (*)
374
375 ClassDefNV(MatchITSTPCQC, 2);
376};
377} // namespace globaltracking
378} // namespace o2
379
380#endif
Wrapper container for different reconstructed object types.
particle ids, masses, names class definition
int32_t i
Definition of the MCTrack class.
uint32_t j
Definition RawData.h:0
static mask_t getSourcesMask(const std::string_view srcList)
TEfficiency * getFractionITSTPCmatchPhiVsPt(matchType m) const
TH1D * getHisto1OverPtNum(matchType m) const
TEfficiency * getFractionITSTPCmatchEta(matchType m) const
TH1F * getHistoPhiNum(matchType m) const
TEfficiency * getFractionITSTPCmatchNoEta0(matchType m) const
void publishHistograms(const std::shared_ptr< T > &publisher)
Publishes the histograms to the publisher e.g. the one provided by the QC task.
TH1D * getHistoPtDen(matchType m) const
TH1F * getHistoPhiDen(matchType m) const
TH2F * getHistoClsVsPtNum(matchType m) const
TH1D * getHistoPtDenNoEta0(matchType m) const
TH1D * getHisto1OverPtPhysPrimDen(matchType m) const
TH2F * getHistoEtaVsPtNum(matchType m) const
TEfficiency * getFractionITSTPCmatchPhysPrim(matchType m) const
TEfficiency * getFractionITSTPCmatchPhiPhysPrim(matchType m) const
TEfficiency * getFractionITSTPCmatchPhi(matchType m) const
void setSources(GID::mask_t src)
TH2F * getHistoClsVsPtDen(matchType m) const
TH2F * getHistoPhiVsPtNum(matchType m) const
TH1D * getHisto1OverPtDen(matchType m) const
TH1F * getHistoPhiPhysPrimDen(matchType m) const
TH1F * getHistoEtaPhysPrimDen(matchType m) const
TH1D * getHistoPtNum(matchType m) const
TH1F * getHistoPtPhysPrimNum(matchType m) const
TEfficiency * getFractionITSTPCmatchChi2VsPt(matchType m) const
TH2F * getHistoChi2VsPtNum(matchType m) const
TEfficiency * getFractionITSTPCmatch1OverPt(matchType m) const
TEfficiency * getFractionITSTPCmatchEtaVsPt(matchType m) const
TH2F * getHistoEtaVsPtDen(matchType m) const
TH1F * getHistoEtaNum(matchType m) const
TH1F * getHistoPtPhysPrimDen(matchType m) const
TH1F * getHistoEtaPhysPrimNum(matchType m) const
void setDataRequest(const std::shared_ptr< o2::globaltracking::DataRequest > &dr)
void setMinDCAtoBeamPipeCut(std::array< float, 2 > v)
TEfficiency * getFractionITSTPCmatchPhysPrim1OverPt(matchType m) const
TH2F * getHistoPhiVsPtDen(matchType m) const
TEfficiency * getFractionITSTPCmatchClsVsPt(matchType m) const
TH1D * getHistoPtNumNoEta0(matchType m) const
TH1D * getHisto1OverPtPhysPrimNum(matchType m) const
TH2F * getHistoChi2VsPtDen(matchType m) const
TEfficiency * getFractionITSTPCmatchDCArVsPt() const
TH1F * getHistoEtaDen(matchType m) const
TEfficiency * getFractionITSTPCmatchEtaPhysPrim(matchType m) const
TEfficiency * getFractionITSTPCmatch(matchType m) const
TH1F * getHistoPhiPhysPrimNum(matchType m) const
void run(o2::framework::ProcessingContext &ctx)
static constexpr ID NIDs
number of defined IDs
Definition PID.h:106
const GLfloat * m
Definition glcorearb.h:4066
GLenum src
Definition glcorearb.h:1767
const GLdouble * v
Definition glcorearb.h:832
GLboolean GLboolean GLboolean b
Definition glcorearb.h:1233
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...