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_GLOQC_MATCHITSTPC_QC_
17#define ALICEO2_GLOQC_MATCHITSTPC_QC_
18
19#include <TH1D.h>
20#include <TH1F.h>
21#include <TH2F.h>
22#include <TH3F.h>
23#include <TEfficiency.h>
24#include <TObjArray.h>
32#include "GPUParam.h"
33#include "GPUParam.inc"
34
35#include <unordered_map>
36#include <vector>
37#include <array>
38#include <set>
39
40namespace o2
41{
42
43namespace gloqc
44{
45
47
48struct LblInfo {
49
50 int mIdx = -1;
51 bool mIsPhysicalPrimary = false;
52};
53
55{
56 public:
57 enum matchType : uint8_t { TPC = 0,
60
61 MatchITSTPCQC() = default;
62 MatchITSTPCQC(const MatchITSTPCQC&) = delete;
67
68 bool init();
69 void initDataRequest();
71 void setDataRequest(const std::shared_ptr<o2::globaltracking::DataRequest>& dr) { mDataRequest = dr; }
72 void finalize();
73 void reset();
74 bool processV0(int iv, o2::globaltracking::RecoContainer& recoData, std::vector<float>& mTBinClOcc, float pvTime);
76
77 TH1D* getHistoPtNum(matchType m) const { return mPtNum[m]; }
78 TH1D* getHistoPtDen(matchType m) const { return mPtDen[m]; }
79 TEfficiency* getFractionITSTPCmatch(matchType m) const { return mFractionITSTPCmatch[m]; }
80
81 TH1D* getHistoPtNumNoEta0(matchType m) const { return mPtNum_noEta0[m]; }
82 TH1D* getHistoPtDenNoEta0(matchType m) const { return mPtDen_noEta0[m]; }
83 TEfficiency* getFractionITSTPCmatchNoEta0(matchType m) const { return mFractionITSTPCmatch_noEta0[m]; }
84
85 TH1F* getHistoPhiNum(matchType m) const { return mPhiNum[m]; }
86 TH1F* getHistoPhiDen(matchType m) const { return mPhiDen[m]; }
87 TEfficiency* getFractionITSTPCmatchPhi(matchType m) const { return mFractionITSTPCmatchPhi[m]; }
88
89 TH2F* getHistoPhiVsPtNum(matchType m) const { return mPhiVsPtNum[m]; }
90 TH2F* getHistoPhiVsPtDen(matchType m) const { return mPhiVsPtDen[m]; }
91 TEfficiency* getFractionITSTPCmatchPhiVsPt(matchType m) const { return mFractionITSTPCmatchPhiVsPt[m]; }
92
93 TH1F* getHistoEtaNum(matchType m) const { return mEtaNum[m]; }
94 TH1F* getHistoEtaDen(matchType m) const { return mEtaDen[m]; }
95 TEfficiency* getFractionITSTPCmatchEta(matchType m) const { return mFractionITSTPCmatchEta[m]; }
96
97 TH2F* getHistoEtaVsPtNum(matchType m) const { return mEtaVsPtNum[m]; }
98 TH2F* getHistoEtaVsPtDen(matchType m) const { return mEtaVsPtDen[m]; }
99 TEfficiency* getFractionITSTPCmatchEtaVsPt(matchType m) const { return mFractionITSTPCmatchEtaVsPt[m]; }
100
101 TH2F* getHistoClsVsPtNum(matchType m) const { return mClsVsPtNum[m]; }
102 TH2F* getHistoClsVsPtDen(matchType m) const { return mClsVsPtDen[m]; }
103 TEfficiency* getFractionITSTPCmatchClsVsPt(matchType m) const { return mFractionITSTPCmatchClsVsPt[m]; }
104
105 TH2F* getHistoChi2VsPtNum(matchType m) const { return mChi2VsPtNum[m]; }
106 TH2F* getHistoChi2VsPtDen(matchType m) const { return mChi2VsPtDen[m]; }
107 TEfficiency* getFractionITSTPCmatchChi2VsPt(matchType m) const { return mFractionITSTPCmatchChi2VsPt[m]; }
108
109 TH1F* getHistoPtPhysPrimNum(matchType m) const { return mPtPhysPrimNum[m]; }
110 TH1F* getHistoPtPhysPrimDen(matchType m) const { return mPtPhysPrimDen[m]; }
111 TEfficiency* getFractionITSTPCmatchPhysPrim(matchType m) const { return mFractionITSTPCmatchPhysPrim[m]; }
112
113 TH1F* getHistoPhiPhysPrimNum(matchType m) const { return mPhiPhysPrimNum[m]; }
114 TH1F* getHistoPhiPhysPrimDen(matchType m) const { return mPhiPhysPrimDen[m]; }
115 TEfficiency* getFractionITSTPCmatchPhiPhysPrim(matchType m) const { return mFractionITSTPCmatchPhiPhysPrim[m]; }
116
117 TH1F* getHistoEtaPhysPrimNum(matchType m) const { return mEtaPhysPrimNum[m]; }
118 TH1F* getHistoEtaPhysPrimDen(matchType m) const { return mEtaPhysPrimDen[m]; }
119 TEfficiency* getFractionITSTPCmatchEtaPhysPrim(matchType m) const { return mFractionITSTPCmatchEtaPhysPrim[m]; }
120
121 TH2F* getHistoResidualPt() const { return mResidualPt; }
122 TH2F* getHistoResidualPhi() const { return mResidualPhi; }
123 TH2F* getHistoResidualEta() const { return mResidualEta; }
124
125 TH1F* getHistoChi2Matching() const { return mChi2Matching; }
126 TH1F* getHistoChi2Refit() const { return mChi2Refit; }
127 TH2F* getHistoTimeResVsPt() const { return mTimeResVsPt; }
128 TH1F* getHistoDCAr() const { return mDCAr; }
129 TH2F* getHistoDCArVsPtNum() const { return mDCArVsPtNum; }
130 TH2F* getHistoDCArVsPtDen() const { return mDCArVsPtDen; }
131 TEfficiency* getFractionITSTPCmatchDCArVsPt() const { return mFractionITSTPCmatchDCArVsPt; }
132
133 TH1D* getHisto1OverPtNum(matchType m) const { return m1OverPtNum[m]; }
134 TH1D* getHisto1OverPtDen(matchType m) const { return m1OverPtDen[m]; }
135 TEfficiency* getFractionITSTPCmatch1OverPt(matchType m) const { return mFractionITSTPCmatch1OverPt[m]; }
136
137 TH1D* getHisto1OverPtPhysPrimNum(matchType m) const { return m1OverPtPhysPrimNum[m]; }
138 TH1D* getHisto1OverPtPhysPrimDen(matchType m) const { return m1OverPtPhysPrimDen[m]; }
139 TEfficiency* getFractionITSTPCmatchPhysPrim1OverPt(matchType m) const { return mFractionITSTPCmatchPhysPrim1OverPt[m]; }
140
141 TH3F* getHistoEtaPhiPtNum(matchType m) const { return mEtaPhiPtNum[m]; }
142 TH3F* getHistoEtaPhiPtDen(matchType m) const { return mEtaPhiPtDen[m]; }
143
144 TH3F* getHistoK0MassVsPtVsOccpp() const { return mK0MassVsPtVsOccpp; }
145 TH3F* getHistoK0MassVsPtVsOccPbPb() const { return mK0MassVsPtVsOccPbPb; }
146
147 void getHistos(TObjArray& objar);
148
152 template <typename T>
153 void publishHistograms(const std::shared_ptr<T>& publisher)
154 {
155 for (int i = 0; i < matchType::SIZE; ++i) {
156 // Pt
157 publisher->startPublishing(mPtNum[i]);
158 publisher->startPublishing(mPtDen[i]);
159 publisher->startPublishing(mFractionITSTPCmatch[i]);
160
161 publisher->startPublishing(mPtNum_noEta0[i]);
162 publisher->startPublishing(mPtDen_noEta0[i]);
163 publisher->startPublishing(mFractionITSTPCmatch_noEta0[i]);
164
165 // Phi
166 publisher->startPublishing(mPhiNum[i]);
167 publisher->startPublishing(mPhiDen[i]);
168 publisher->startPublishing(mFractionITSTPCmatchPhi[i]);
169
170 publisher->startPublishing(mPhiVsPtNum[i]);
171 publisher->startPublishing(mPhiVsPtDen[i]);
172 publisher->startPublishing(mFractionITSTPCmatchPhiVsPt[i]);
173
174 // Eta
175 publisher->startPublishing(mEtaNum[i]);
176 publisher->startPublishing(mEtaDen[i]);
177 publisher->startPublishing(mFractionITSTPCmatchEta[i]);
178
179 publisher->startPublishing(mEtaVsPtNum[i]);
180 publisher->startPublishing(mEtaVsPtDen[i]);
181 publisher->startPublishing(mFractionITSTPCmatchEtaVsPt[i]);
182
183 // Clusters
184 publisher->startPublishing(mClsVsPtNum[i]);
185 publisher->startPublishing(mClsVsPtDen[i]);
186 publisher->startPublishing(mFractionITSTPCmatchClsVsPt[i]);
187
188 // Chi2
189 publisher->startPublishing(mChi2VsPtNum[i]);
190 publisher->startPublishing(mChi2VsPtDen[i]);
191 publisher->startPublishing(mFractionITSTPCmatchChi2VsPt[i]);
192
193 // 1/pt
194 publisher->startPublishing(m1OverPtNum[i]);
195 publisher->startPublishing(m1OverPtDen[i]);
196 publisher->startPublishing(mFractionITSTPCmatch1OverPt[i]);
197
198 // 3D eta/phi/pt
199 publisher->startPublishing(mEtaPhiPtNum[i]);
200 publisher->startPublishing(mEtaPhiPtDen[i]);
201
202 if (mUseTrkPID) { // Vs Tracking PID hypothesis
203 for (int j = 0; j < o2::track::PID::NIDs; ++j) {
204 // Pt
205 publisher->startPublishing(mPtNumVsTrkPID[i][j]);
206 publisher->startPublishing(mPtDenVsTrkPID[i][j]);
207 publisher->startPublishing(mFractionITSTPCmatchPtVsTrkPID[i][j]);
208
209 // Phi
210 publisher->startPublishing(mPhiNumVsTrkPID[i][j]);
211 publisher->startPublishing(mPhiDenVsTrkPID[i][j]);
212 publisher->startPublishing(mFractionITSTPCmatchPhiVsTrkPID[i][j]);
213
214 // Eta
215 publisher->startPublishing(mEtaNumVsTrkPID[i][j]);
216 publisher->startPublishing(mEtaDenVsTrkPID[i][j]);
217 publisher->startPublishing(mFractionITSTPCmatchEtaVsTrkPID[i][j]);
218 }
219 }
220
221 if (mUseMC) {
222 publisher->startPublishing(mPhiPhysPrimNum[i]);
223 publisher->startPublishing(mPhiPhysPrimDen[i]);
224 publisher->startPublishing(mFractionITSTPCmatchPhiPhysPrim[i]);
225 publisher->startPublishing(mPtPhysPrimNum[i]);
226 publisher->startPublishing(mPtPhysPrimDen[i]);
227 publisher->startPublishing(mFractionITSTPCmatchPhysPrim[i]);
228 publisher->startPublishing(mEtaPhysPrimNum[i]);
229 publisher->startPublishing(mEtaPhysPrimDen[i]);
230 publisher->startPublishing(mFractionITSTPCmatchEtaPhysPrim[i]);
231 publisher->startPublishing(m1OverPtPhysPrimNum[i]);
232 publisher->startPublishing(m1OverPtPhysPrimDen[i]);
233 publisher->startPublishing(mFractionITSTPCmatchPhysPrim1OverPt[i]);
234 }
235 }
236 publisher->startPublishing(mChi2Matching);
237 publisher->startPublishing(mChi2Refit);
238 publisher->startPublishing(mTimeResVsPt);
239 publisher->startPublishing(mResidualPt);
240 publisher->startPublishing(mResidualPhi);
241 publisher->startPublishing(mResidualEta);
242 publisher->startPublishing(mDCAr);
243 publisher->startPublishing(mDCArVsPtNum);
244 publisher->startPublishing(mDCArVsPtDen);
245 publisher->startPublishing(mFractionITSTPCmatchDCArVsPt);
246 if (mDoK0QC) {
247 publisher->startPublishing(mK0MassVsPtVsOccpp);
248 publisher->startPublishing(mK0MassVsPtVsOccPbPb);
249 }
250 }
251
253 void setUseTrkPID(bool b) { mUseTrkPID = b; }
254 bool getUseTrkPID() const { return mUseTrkPID; }
255 void setUseMC(bool b) { mUseMC = b; }
256 bool getUseMC() const { return mUseMC; }
257 void deleteHistograms();
258 void setBz(float bz) { mBz = bz; }
259 void setDoK0QC(bool v) { mDoK0QC = v; }
260 bool getDoK0QC() const { return mDoK0QC; }
261
262 // ITS track
263 void setMinPtITSCut(float v) { mPtITSCut = v; };
264 void setEtaITSCut(float v) { mEtaITSCut = v; }; // TODO: define 2 different values for min and max (**)
265 void setMinNClustersITS(int v) { mMinNClustersITS = v; }
266 void setMaxChi2PerClusterITS(float v) { mMaxChi2PerClusterITS = v; }
267 // TO DO: define an agreed way to implement the setter for ITS matching (min. # layers, which layers)
268 // [...] --> exploit the method TrackCuts::setRequireHitsInITSLayers(...)
269 // TPC track
270 void setMinPtTPCCut(float v) { mPtTPCCut = v; };
271 void setEtaTPCCut(float v) { mEtaTPCCut = v; }; // TODO: define 2 different values for min and max (***)
272 void setMinNTPCClustersCut(int v) { mNTPCClustersCut = v; }
273 void setMinDCAtoBeamPipeCut(std::array<float, 2> v)
274 {
277 }
278 void setMinDCAtoBeamPipeDistanceCut(float v) { mDCATPCCut = v; }
279 void setMinDCAtoBeamPipeYCut(float v) { mDCATPCCutY = v; }
280 // ITS-TPC kinematics
281 void setNBinsPt(int v) { mPtBins = v; }
282 void setPtCut(float v) { mPtCut = v; }
283 void setMaxPtCut(float v) { mPtMaxCut = v; }
284 void setEtaCut(float v) { mEtaCut = v; }
285 void setEtaNo0Cut(float v) { mEtaNo0Cut = v; }
286
287 // K0
288 void setMaxK0Eta(float v) { mMaxEtaK0 = v; }
289 void setRefitK0(bool v) { mRefit = v; }
290 void setCutK0Mass(float v) { mCutK0Mass = v; }
291 void setMinTPCOccpp(float v) { mMinTPCOccpp = v; }
292 void setMaxTPCOccpp(float v) { mMaxTPCOccpp = v; }
293 void setNBinsTPCOccpp(int v) { mNBinsTPCOccpp = v; }
294 void setMinTPCOccPbPb(float v) { mMinTPCOccPbPb = v; }
295 void setMaxTPCOccPbPb(float v) { mMaxTPCOccPbPb = v; }
296 void setNBinsTPCOccPbPb(int v) { mNBinsTPCOccPbPb = v; }
297 void setK0Scaling(float v) { mK0Scaling = v; }
298 float getK0Scaling() const { return mK0Scaling; }
299 void setK0MaxDCA(float v) { mK0MaxDCA = v; }
300 float getK0MaxDCA() const { return mK0MaxDCA; }
301 void setK0MinCosPA(float v) { mK0MinCosPA = v; }
302 float getK0MinCosPA() const { return mK0MinCosPA; }
303
304 void printParams() const;
305
306 private:
307 std::shared_ptr<o2::globaltracking::DataRequest> mDataRequest;
309 std::string mRequestedSources = "ITS,TPC,ITS-TPC";
310 GID::mask_t mSrc = GID::getSourcesMask("ITS,TPC,ITS-TPC");
311 GID::mask_t mAllowedSources = GID::getSourcesMask("all");
312 // TPC
313 gsl::span<const o2::tpc::TrackTPC> mTPCTracks;
314 // ITS
315 gsl::span<const o2::its::TrackITS> mITSTracks;
316 // ITS-TPC
317 gsl::span<const o2::dataformats::TrackTPCITS> mITSTPCTracks;
318 bool mUseMC = false; // Usage of the MC information
319 bool mUseTrkPID = false; // Usage of the PID hypothesis in tracking
320 float mBz = 0;
321 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,
322 // value is the LbLinfo with the id of the track with the highest pT found with that label so far,
323 // and the flag to say if it is a physical primary or not
324 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,
325 // value is the LblInfo with the id of the track with the highest number of TPC clusters found
326 // with that label so far, and the flag to say if it is a physical primary or not
327 o2::steer::MCKinematicsReader mcReader; // reader of MC information
328
329 // Pt
330 TH1D* mPtNum[matchType::SIZE] = {};
331 TH1D* mPtDen[matchType::SIZE] = {};
332 TEfficiency* mFractionITSTPCmatch[matchType::SIZE] = {};
333 TH1D* mPtNum_noEta0[matchType::SIZE] = {};
334 TH1D* mPtDen_noEta0[matchType::SIZE] = {};
335 TEfficiency* mFractionITSTPCmatch_noEta0[matchType::SIZE] = {};
336 TH1F* mPtPhysPrimNum[matchType::SIZE] = {};
337 TH1F* mPtPhysPrimDen[matchType::SIZE] = {};
338 TEfficiency* mFractionITSTPCmatchPhysPrim[matchType::SIZE] = {};
339 // Pt split per PID hypothesis in tracking
340 TH1D* mPtNumVsTrkPID[matchType::SIZE][track::PID::NIDs] = {};
341 TH1D* mPtDenVsTrkPID[matchType::SIZE][track::PID::NIDs] = {};
342 TEfficiency* mFractionITSTPCmatchPtVsTrkPID[matchType::SIZE][track::PID::NIDs] = {};
343 // Phi
344 TH1F* mPhiNum[matchType::SIZE] = {};
345 TH1F* mPhiDen[matchType::SIZE] = {};
346 TEfficiency* mFractionITSTPCmatchPhi[matchType::SIZE] = {};
347 TH1F* mPhiPhysPrimNum[matchType::SIZE] = {};
348 TH1F* mPhiPhysPrimDen[matchType::SIZE] = {};
349 TEfficiency* mFractionITSTPCmatchPhiPhysPrim[matchType::SIZE] = {};
350 TH2F* mPhiVsPtNum[matchType::SIZE] = {};
351 TH2F* mPhiVsPtDen[matchType::SIZE] = {};
352 TEfficiency* mFractionITSTPCmatchPhiVsPt[matchType::SIZE] = {};
353 // Phi split per PID hypothesis in tracking
354 TH1D* mPhiNumVsTrkPID[matchType::SIZE][track::PID::NIDs] = {};
355 TH1D* mPhiDenVsTrkPID[matchType::SIZE][track::PID::NIDs] = {};
356 TEfficiency* mFractionITSTPCmatchPhiVsTrkPID[matchType::SIZE][track::PID::NIDs] = {};
357 // Eta
358 TH1F* mEtaNum[matchType::SIZE] = {};
359 TH1F* mEtaDen[matchType::SIZE] = {};
360 TEfficiency* mFractionITSTPCmatchEta[matchType::SIZE] = {};
361 TH1F* mEtaPhysPrimNum[matchType::SIZE] = {};
362 TH1F* mEtaPhysPrimDen[matchType::SIZE] = {};
363 TEfficiency* mFractionITSTPCmatchEtaPhysPrim[matchType::SIZE] = {};
364 TH2F* mEtaVsPtNum[matchType::SIZE] = {};
365 TH2F* mEtaVsPtDen[matchType::SIZE] = {};
366 TEfficiency* mFractionITSTPCmatchEtaVsPt[matchType::SIZE] = {};
367 // Clusters
368 TH2F* mClsVsPtNum[matchType::SIZE] = {};
369 TH2F* mClsVsPtDen[matchType::SIZE] = {};
370 TEfficiency* mFractionITSTPCmatchClsVsPt[matchType::SIZE] = {};
371 // Chi2
372 TH2F* mChi2VsPtNum[matchType::SIZE] = {};
373 TH2F* mChi2VsPtDen[matchType::SIZE] = {};
374 TEfficiency* mFractionITSTPCmatchChi2VsPt[matchType::SIZE] = {};
375 // Eta split per PID hypothesis in tracking
376 TH1D* mEtaNumVsTrkPID[matchType::SIZE][track::PID::NIDs] = {};
377 TH1D* mEtaDenVsTrkPID[matchType::SIZE][track::PID::NIDs] = {};
378 TEfficiency* mFractionITSTPCmatchEtaVsTrkPID[matchType::SIZE][track::PID::NIDs] = {};
379 // Residuals
380 TH2F* mResidualPt = nullptr;
381 TH2F* mResidualPhi = nullptr;
382 TH2F* mResidualEta = nullptr;
383 // Others
384 TH1F* mChi2Matching = nullptr;
385 TH1F* mChi2Refit = nullptr;
386 TH2F* mTimeResVsPt = nullptr;
387 TH1F* mDCAr = nullptr;
388 TH2F* mDCArVsPtNum = nullptr;
389 TH2F* mDCArVsPtDen = nullptr;
390 TEfficiency* mFractionITSTPCmatchDCArVsPt = nullptr;
391 // 1/Pt
392 TH1D* m1OverPtNum[matchType::SIZE] = {};
393 TH1D* m1OverPtDen[matchType::SIZE] = {};
394 TEfficiency* mFractionITSTPCmatch1OverPt[matchType::SIZE] = {};
395 TH1D* m1OverPtPhysPrimNum[matchType::SIZE] = {};
396 TH1D* m1OverPtPhysPrimDen[matchType::SIZE] = {};
397 TEfficiency* mFractionITSTPCmatchPhysPrim1OverPt[matchType::SIZE] = {};
398 // 3D Efficiency in eta/phi/pt
399 TH3F* mEtaPhiPtNum[matchType::SIZE] = {};
400 TH3F* mEtaPhiPtDen[matchType::SIZE] = {};
401
402 template <int DIM = 1, bool DEBUG = false>
403 void setEfficiency(TEfficiency* eff, TH1* hnum, TH1* hden);
404
405 int mNTPCSelectedTracks = 0;
406 int mNITSSelectedTracks = 0;
407 int mNITSTPCSelectedTracks[matchType::SIZE] = {0, 0};
408
409 // cut values
410 // ITS track
411 float mPtITSCut = 0.1f; // min pT for ITS track
412 float mEtaITSCut = 1.4f; // eta window for ITS track --> TODO: define 2 different values for min and max (**)
413 int mMinNClustersITS = 0; // min number of ITS clusters
414 float mMaxChi2PerClusterITS{1e10f}; // max its fit chi2 per ITS cluster
415 std::vector<std::pair<int8_t, std::set<uint8_t>>> mRequiredITSHits; // vector of ITS requirements (minNRequiredHits in specific requiredLayers)
416 // TPC track
417 float mPtTPCCut = 0.1f; // min pT for TPC track
418 float mEtaTPCCut = 1.4f; // eta window for TPC track --> TODO: define 2 different values for min and max (***)
419 int32_t mNTPCClustersCut = 60; // minimum number of TPC clusters for TPC track
420 float mDCATPCCut = 100.f; // max DCA 3D to PV for TPC track
421 float mDCATPCCutY = 10.f; // max DCA xy to PV for TPC track
422 // ITS-TPC kinematics
423 int mPtBins = 100;
424 float mPtCut = 0.1f;
425 float mPtMaxCut = 20;
426 float mEtaCut = 1.4f;
427 float mEtaNo0Cut = 0.05f;
428 // TODO: define 2 different values for min and max (*)
429
430 // for V0s
432 TH3F* mK0MassVsPtVsOccpp = nullptr;
433 TH3F* mK0MassVsPtVsOccPbPb = nullptr;
434 bool mDoK0QC = false; // whether to fill the K0 QC plot(s)
435 float mCutK0Mass = 0.05; // cut on the difference between the K0 mass and the PDG mass
436 bool mRefit = false; // whether to refit or not
437 float mMaxEtaK0 = 0.8; // cut on the K0 eta
438 long int mTimestamp = -1; // timestamp used to load the SVertexParam object: if differnt from -1, we don't load (it means we already did it)
439 std::unique_ptr<o2::gpu::GPUO2InterfaceConfiguration> mConfig;
440 std::unique_ptr<o2::gpu::GPUSettingsO2> mConfParam;
441 // std::unique_ptr<o2::gpu::GPUParam> mParam;
442 std::shared_ptr<o2::gpu::GPUParam> mParam = nullptr;
443 int mNHBPerTF = 0;
444 int mNTPCOccBinLength = 0;
445 float mNTPCOccBinLengthInv{};
446 std::vector<float> mTBinClOcc;
447 gsl::span<const unsigned int> mTPCRefitterOccMap;
448 bool mIsHI = false;
449 float mK0Scaling = 1.f; // permill that we want to keep of K0S
450 uint64_t mNK0 = 0; // number of found V0s
451 float mMinTPCOccpp = 0.f; // min TPC occupancy for K0s plot for pp collisions
452 float mMaxTPCOccpp = 1.e6; // max TPC occupancy for K0s plot for pp collisions
453 int mNBinsTPCOccpp = 6; // number of bins in TPC occupancy for K0s plot for pp collisions
454 float mMinTPCOccPbPb = 0.f; // min TPC occupancy for K0s plot for PbPb collisions
455 float mMaxTPCOccPbPb = 8.e6; // max TPC occupancy for K0s plot for PbPb collisions
456 int mNBinsTPCOccPbPb = 8; // number of bins in TPC occupancy for K0s plot for PbPb collisions
457 float mK0MaxDCA = 0.01; // max DCA to select the K0
458 float mK0MinCosPA = 0.995; // min cosPA to select the K0
459
460 ClassDefNV(MatchITSTPCQC, 4);
461};
462} // namespace gloqc
463} // namespace o2
464
465#endif
Defintions for N-prongs secondary vertex fit.
Wrapper container for different reconstructed object types.
particle ids, masses, names class definition
int32_t i
uint32_t j
Definition RawData.h:0
static mask_t getSourcesMask(const std::string_view srcList)
TEfficiency * getFractionITSTPCmatch1OverPt(matchType m) const
TH2F * getHistoDCArVsPtNum() const
TEfficiency * getFractionITSTPCmatchPhiVsPt(matchType m) const
void setMinDCAtoBeamPipeYCut(float v)
TH3F * getHistoEtaPhiPtNum(matchType m) const
TEfficiency * getFractionITSTPCmatchEtaPhysPrim(matchType m) const
TH2F * getHistoClsVsPtDen(matchType m) const
void setMinTPCOccPbPb(float v)
TEfficiency * getFractionITSTPCmatchNoEta0(matchType m) const
TH1D * getHistoPtNumNoEta0(matchType m) const
TH1D * getHisto1OverPtPhysPrimNum(matchType m) const
void setMaxTPCOccPbPb(float v)
TH3F * getHistoEtaPhiPtDen(matchType m) const
void setDataRequest(const std::shared_ptr< o2::globaltracking::DataRequest > &dr)
void setTrkSources(GID::mask_t src)
TH3F * getHistoK0MassVsPtVsOccPbPb() const
TH1F * getHistoDCAr() const
TH2F * getHistoChi2VsPtNum(matchType m) const
TH1D * getHisto1OverPtPhysPrimDen(matchType m) const
TH2F * getHistoTimeResVsPt() const
TEfficiency * getFractionITSTPCmatchPhi(matchType m) const
TEfficiency * getFractionITSTPCmatchClsVsPt(matchType m) const
TH1F * getHistoPtPhysPrimDen(matchType m) const
void setMinNTPCClustersCut(int v)
TH1D * getHistoPtDen(matchType m) const
bool processV0(int iv, o2::globaltracking::RecoContainer &recoData, std::vector< float > &mTBinClOcc, float pvTime)
TH1F * getHistoPhiNum(matchType m) const
TH1F * getHistoEtaNum(matchType m) const
TH2F * getHistoPhiVsPtNum(matchType m) const
void setMaxChi2PerClusterITS(float v)
TH1F * getHistoChi2Matching() const
TH1D * getHisto1OverPtDen(matchType m) const
TH2F * getHistoResidualEta() const
TH1F * getHistoEtaPhysPrimNum(matchType m) const
TH2F * getHistoResidualPhi() const
void setMinDCAtoBeamPipeCut(std::array< float, 2 > v)
TH1D * getHistoPtNum(matchType m) const
void setMinDCAtoBeamPipeDistanceCut(float v)
MatchITSTPCQC & operator=(const MatchITSTPCQC &)=delete
TH3F * getHistoK0MassVsPtVsOccpp() const
TH2F * getHistoClsVsPtNum(matchType m) const
TEfficiency * getFractionITSTPCmatchEtaVsPt(matchType m) const
TEfficiency * getFractionITSTPCmatchPhysPrim(matchType m) const
TEfficiency * getFractionITSTPCmatchDCArVsPt() const
TEfficiency * getFractionITSTPCmatch(matchType m) const
bool refitV0(const o2::dataformats::V0Index &id, o2::dataformats::V0 &v0, o2::globaltracking::RecoContainer &recoData)
TH1D * getHistoPtDenNoEta0(matchType m) const
TH1F * getHistoPhiDen(matchType m) const
void getHistos(TObjArray &objar)
TH1F * getHistoEtaPhysPrimDen(matchType m) const
TH1F * getHistoPhiPhysPrimNum(matchType m) const
TH2F * getHistoEtaVsPtNum(matchType m) const
TH2F * getHistoEtaVsPtDen(matchType m) const
TH1F * getHistoChi2Refit() const
TH2F * getHistoPhiVsPtDen(matchType m) const
TH1F * getHistoPtPhysPrimNum(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.
TEfficiency * getFractionITSTPCmatchEta(matchType m) const
MatchITSTPCQC & operator=(MatchITSTPCQC &&)=delete
TH2F * getHistoDCArVsPtDen() const
TEfficiency * getFractionITSTPCmatchPhiPhysPrim(matchType m) const
TEfficiency * getFractionITSTPCmatchPhysPrim1OverPt(matchType m) const
TH1D * getHisto1OverPtNum(matchType m) const
TEfficiency * getFractionITSTPCmatchChi2VsPt(matchType m) const
TH1F * getHistoEtaDen(matchType m) const
TH1F * getHistoPhiPhysPrimDen(matchType m) const
TH2F * getHistoChi2VsPtDen(matchType m) const
void run(o2::framework::ProcessingContext &ctx)
TH2F * getHistoResidualPt() const
MatchITSTPCQC(MatchITSTPCQC &&)=delete
MatchITSTPCQC(const MatchITSTPCQC &)=delete
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
GLfloat v0
Definition glcorearb.h:811
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...