Project
Loading...
Searching...
No Matches
MatchGlobalFwdAssessment.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_GLOFWD_ASSESSMENT
17#define ALICEO2_GLOFWD_ASSESSMENT
18
19#include <TH1F.h>
20#include <TH2F.h>
21#include <TH3F.h>
22#include <TCanvas.h>
23#include <TEfficiency.h>
24#include <TObjArray.h>
34#include <unordered_map>
35#include <vector>
36
37namespace o2
38{
39
40namespace globaltracking
41{
42
48
50using TrackLabelsType = std::vector<o2::MCCompLabel>;
52
54{
55 public:
56 GloFwdAssessment() = delete;
57 GloFwdAssessment(bool useMC) : mUseMC(useMC){};
58 ~GloFwdAssessment() = default;
59 void disableMIDFilter() { mMIDFilterEnabled = false; }
60
61 void init(bool finalizeAnalysis);
62 void createHistos();
63 void loadHistos();
65
66 void reset();
67
69 void processPairables();
71 void processRecoTracks();
72 void processTrueTracks();
74 {
75 mTrueTracksMap.resize(mcReader.getNSources());
76 auto src = 0;
77 for (auto& map : mTrueTracksMap) {
78 map.resize(mcReader.getNEvents(src++));
79 }
80 auto id = 0;
81 for (const auto& trackLabel : mFwdTrackLabels) {
82 if (trackLabel.isCorrect()) {
83 mTrueTracksMap[trackLabel.getSourceID()][trackLabel.getEventID()].push_back(id);
84 }
85 id++;
86 }
87 }
88 void addMCParticletoHistos(const MCTrack* mcTr, const int TrackType, const o2::dataformats::MCEventHeader& evH);
89
90 void finalizeAnalysis();
93 void finalizeCutConfig(float minCut, float maxCut, int nSteps)
94 {
95 mFinalizeMinCut = minCut;
96 mFinalizeMaxCut = maxCut;
97 mNFinalizeSteps = nSteps;
98 }
99
100 void getHistos(TObjArray& objar);
101 void setBz(float bz) { mBz = bz; }
102
103 double orbitToSeconds(uint32_t orbit, uint32_t refOrbit)
104 {
105 return (orbit - refOrbit) * o2::constants::lhc::LHCOrbitNS / 1E9;
106 }
107
108 private:
109 gsl::span<const o2::dataformats::GlobalFwdTrack> mGlobalFwdTracks;
110 gsl::span<const o2::mft::TrackMFT> mMFTTracks;
111 gsl::span<const o2::mch::TrackMCH> mMCHTracks;
112 gsl::span<const o2::itsmft::ROFRecord> mMFTTracksROF;
113 gsl::span<const o2::itsmft::CompClusterExt> mMFTClusters;
114 gsl::span<const o2::itsmft::ROFRecord> mMFTClustersROF;
115
116 // MC Labels
117 bool mUseMC = false;
118
119 gsl::span<const o2::MCCompLabel> mMFTTrackLabels;
120 gsl::span<const o2::MCCompLabel> mMCHTrackLabels;
121 gsl::span<const o2::MCCompLabel> mFwdTrackLabels;
122
123 o2::steer::MCKinematicsReader mcReader; // reader of MC information
124
125 // Histos for reconstructed tracks
126 std::unique_ptr<TH1F> mTrackNumberOfClusters = nullptr;
127 std::unique_ptr<TH1F> mTrackInvQPt = nullptr;
128 std::unique_ptr<TH1F> mTrackChi2 = nullptr;
129 std::unique_ptr<TH1F> mTrackCharge = nullptr;
130 std::unique_ptr<TH1F> mTrackPhi = nullptr;
131 std::unique_ptr<TH1F> mTrackEta = nullptr;
132 std::array<std::unique_ptr<TH1F>, 7> mTrackEtaNCls = {nullptr};
133 std::array<std::unique_ptr<TH1F>, 7> mTrackPhiNCls = {nullptr};
134 std::array<std::unique_ptr<TH2F>, 7> mTrackXYNCls = {nullptr};
135 std::array<std::unique_ptr<TH2F>, 7> mTrackEtaPhiNCls = {nullptr};
136 std::unique_ptr<TH1F> mTrackCotl = nullptr;
137
138 // Histos and data for MC analysis
139 std::vector<std::string> mNameOfTrackTypes = {"Rec",
140 "Gen",
141 "Pairable",
142 "RecoTrue"};
143
144 std::unique_ptr<TH2F> mHistPhiRecVsPhiGen = nullptr;
145 std::unique_ptr<TH2F> mHistEtaRecVsEtaGen = nullptr;
146
147 std::array<std::unique_ptr<TH2F>, kNumberOfTrackTypes> mHistPhiVsEta;
148 std::array<std::unique_ptr<TH2F>, kNumberOfTrackTypes> mHistPtVsEta;
149 std::array<std::unique_ptr<TH2F>, kNumberOfTrackTypes> mHistPhiVsPt;
150 std::array<std::unique_ptr<TH2F>, kNumberOfTrackTypes> mHistZvtxVsEta;
151 std::array<std::unique_ptr<TH2F>, kNumberOfTrackTypes> mHistRVsZ;
152
153 // Histos for reconstruction assessment
154
155 std::unique_ptr<TEfficiency> mChargeMatchEff = nullptr;
156 std::unique_ptr<TH2D> mPairingEtaPt = nullptr;
157 std::unique_ptr<TH2D> mTruePairingEtaPt = nullptr;
158 std::unique_ptr<TH2F> mHistVxtOffsetProjection = nullptr;
159
160 std::vector<std::unique_ptr<TH2D>> mPurityPtInnerVecTH2;
161 std::vector<std::unique_ptr<TH2D>> mPurityPtOuterVecTH2;
162 std::vector<std::unique_ptr<TH1D>> mPairingPtInnerVecTH1;
163 std::vector<std::unique_ptr<TH1D>> mPairingPtOuterVecTH1;
164 std::vector<std::unique_ptr<TH1D>> mTruePairingPtInnerVecTH1;
165 std::vector<std::unique_ptr<TH1D>> mTruePairingPtOuterVecTH1;
166 std::vector<std::unique_ptr<TH2D>> mPairingEtaPtVec;
167 std::vector<std::unique_ptr<TH2D>> mTruePairingEtaPtVec;
168
169 enum TH3HistosCodes {
170 kTH3GMTrackDeltaXDeltaYEta,
171 kTH3GMTrackDeltaXDeltaYPt,
172 kTH3GMTrackDeltaXVertexPtEta,
173 kTH3GMTrackDeltaYVertexPtEta,
174 kTH3GMTrackInvQPtResolutionPtEta,
175 kTH3GMTrackInvQPtResMCHPtEta,
176 kTH3GMTrackXPullPtEta,
177 kTH3GMTrackYPullPtEta,
178 kTH3GMTrackPhiPullPtEta,
179 kTH3GMTrackCotlPullPtEta,
180 kTH3GMTrackInvQPtPullPtEta,
181 kTH3GMTrackReducedChi2PtEta,
182 kTH3GMTrackPtEtaChi2,
183 kTH3GMTrackPtEtaMatchScore,
184 kTH3GMTruePtEtaChi2,
185 kTH3GMTruePtEtaMatchScore,
186 kTH3GMTruePtEtaMatchScore_MC,
187 kTH3GMCloseMatchPtEtaChi2,
188 kTH3GMCloseMatchPtEtaMatchScore,
189 kTH3GMPairablePtEtaZ,
190 kNTH3Histos
191 };
192
193 std::map<int, const char*> TH3Names{
194 {kTH3GMTrackDeltaXDeltaYEta, "TH3GMTrackDeltaXDeltaYEta"},
195 {kTH3GMTrackDeltaXDeltaYPt, "TH3GMTrackDeltaXDeltaYPt"},
196 {kTH3GMTrackDeltaXVertexPtEta, "TH3GMTrackDeltaXVertexPtEta"},
197 {kTH3GMTrackDeltaYVertexPtEta, "TH3GMTrackDeltaYVertexPtEta"},
198 {kTH3GMTrackInvQPtResolutionPtEta, "TH3GMTrackInvQPtResolutionPtEta"},
199 {kTH3GMTrackInvQPtResMCHPtEta, "TH3GMTrackInvQPtResMCHPtEta"},
200 {kTH3GMTrackXPullPtEta, "TH3GMTrackXPullPtEta"},
201 {kTH3GMTrackYPullPtEta, "TH3GMTrackYPullPtEta"},
202 {kTH3GMTrackPhiPullPtEta, "TH3GMTrackPhiPullPtEta"},
203 {kTH3GMTrackCotlPullPtEta, "TH3GMTrackCotlPullPtEta"},
204 {kTH3GMTrackInvQPtPullPtEta, "TH3GMTrackInvQPtPullPtEta"},
205 {kTH3GMTrackReducedChi2PtEta, "TH3GMTrackReducedChi2PtEta"},
206 {kTH3GMCloseMatchPtEtaChi2, "TH3GMCloseMatchPtEtaChi2"},
207 {kTH3GMCloseMatchPtEtaMatchScore, "TH3GMCloseMatchPtEtaMatchScore"},
208 {kTH3GMPairablePtEtaZ, "TH3GMPairablePtEtaZ"},
209 {kTH3GMTrackPtEtaChi2, "TH3GMTrackPtEtaChi2"},
210 {kTH3GMTrackPtEtaMatchScore, "TH3GMTrackPtEtaMatchScore"},
211 {kTH3GMTruePtEtaChi2, "TH3GMTruePtEtaChi2"},
212 {kTH3GMTruePtEtaMatchScore, "TH3GMTruePtEtaMatchScore"},
213 {kTH3GMTruePtEtaMatchScore_MC, "TH3GMTruePtEtaMatchScore_MC"}};
214
215 std::map<int, const char*> TH3Titles{
216 {kTH3GMTrackDeltaXDeltaYEta, "TH3GMTrackDeltaXDeltaYEta"},
217 {kTH3GMTrackDeltaXDeltaYPt, "TH3GMTrackDeltaXDeltaYPt"},
218 {kTH3GMTrackDeltaXVertexPtEta, "TH3GMTrackDeltaXVertexPtEta"},
219 {kTH3GMTrackDeltaYVertexPtEta, "TH3GMTrackDeltaYVertexPtEta"},
220 {kTH3GMTrackInvQPtResolutionPtEta, "TH3GMTrackInvQPtResolutionPtEta"},
221 {kTH3GMTrackInvQPtResMCHPtEta, "TH3GMTrackInvQPtResMCHPtEta"},
222 {kTH3GMTrackXPullPtEta, "TH3GMTrackXPullPtEta"},
223 {kTH3GMTrackYPullPtEta, "TH3GMTrackYPullPtEta"},
224 {kTH3GMTrackPhiPullPtEta, "TH3GMTrackPhiPullPtEta"},
225 {kTH3GMTrackCotlPullPtEta, "TH3GMTrackCotlPullPtEta"},
226 {kTH3GMTrackInvQPtPullPtEta, "TH3GMTrackInvQPtPullPtEta"},
227 {kTH3GMTrackReducedChi2PtEta, "TH3GMTrackReducedChi2PtEta"},
228 {kTH3GMCloseMatchPtEtaChi2, "TH3GMCloseMatchPtEtaChi2"},
229 {kTH3GMCloseMatchPtEtaMatchScore, "TH3GMCloseMatchPtEtaMatchScore"},
230 {kTH3GMPairablePtEtaZ, "TH3GMPairablePtEtaZ"},
231 {kTH3GMTrackPtEtaChi2, "TH3GMTrackPtEtaChi2"},
232 {kTH3GMTrackPtEtaMatchScore, "TH3GMTrackPtEtaMatchScore"},
233 {kTH3GMTruePtEtaChi2, "TH3GMTruePtEtaChi2"},
234 {kTH3GMTruePtEtaMatchScore, "TH3GMTruePtEtaMatchScore"},
235 {kTH3GMTruePtEtaMatchScore_MC, "TH3GMTruePtEtaMatchScore_MC"}};
236
237 std::map<int, std::array<double, 9>> TH3Binning{
238 {kTH3GMTrackDeltaXDeltaYEta, {16, 2.2, 3.8, 1000, -1000, 1000, 1000, -1000, 1000}},
239 {kTH3GMTrackDeltaXDeltaYPt, {40, 0, 20, 1000, -1000, 1000, 1000, -1000, 1000}},
240 {kTH3GMTrackDeltaYVertexPtEta, {40, 0, 20, 16, 2.2, 3.8, 1000, -1000, 1000}},
241 {kTH3GMTrackDeltaXVertexPtEta, {40, 0, 20, 16, 2.2, 3.8, 1000, -1000, 1000}},
242 {kTH3GMTrackInvQPtResolutionPtEta, {40, 0, 20, 16, 2.2, 3.8, 1000, -5, 5}},
243 {kTH3GMTrackInvQPtResMCHPtEta, {40, 0, 20, 16, 2.2, 3.8, 1000, -5, 5}},
244 {kTH3GMTrackXPullPtEta, {40, 0, 20, 16, 2.2, 3.8, 200, -10, 10}},
245 {kTH3GMTrackYPullPtEta, {40, 0, 20, 16, 2.2, 3.8, 200, -10, 10}},
246 {kTH3GMTrackPhiPullPtEta, {40, 0, 20, 16, 2.2, 3.8, 200, -10, 10}},
247 {kTH3GMTrackCotlPullPtEta, {40, 0, 20, 16, 2.2, 3.8, 200, -10, 10}},
248 {kTH3GMTrackInvQPtPullPtEta, {40, 0, 20, 16, 2.2, 3.8, 200, -50, 50}},
249 {kTH3GMTrackReducedChi2PtEta, {40, 0, 20, 16, 2.2, 3.8, 1000, 0, 100}},
250 {kTH3GMCloseMatchPtEtaChi2, {40, 0, 20, 16, 2.2, 3.8, 1000, 0, 100}},
251 {kTH3GMCloseMatchPtEtaMatchScore, {40, 0, 20, 16, 2.2, 3.8, 2000, 0, 20.0}},
252 {kTH3GMPairablePtEtaZ, {40, 0, 20, 16, 2.2, 3.8, 30, -15, 15}},
253 {kTH3GMTrackPtEtaChi2, {40, 0, 20, 16, 2.2, 3.8, 1000, 0, 100}},
254 {kTH3GMTrackPtEtaMatchScore, {40, 0, 20, 16, 2.2, 3.8, 2000, 0, 20.0}},
255 {kTH3GMTruePtEtaChi2, {40, 0, 20, 16, 2.2, 3.8, 1000, 0, 100}},
256 {kTH3GMTruePtEtaMatchScore, {40, 0, 20, 16, 2.2, 3.8, 2000, 0, 20.0}},
257 {kTH3GMTruePtEtaMatchScore_MC, {40, 0, 20, 16, 2.2, 3.8, 2000, 0, 20.0}}};
258
259 std::map<int, const char*> TH3XaxisTitles{
260 {kTH3GMTrackDeltaXDeltaYEta, R"(\\eta_{MC})"},
261 {kTH3GMTrackDeltaXDeltaYPt, R"(p_{t}_{MC})"},
262 {kTH3GMTrackDeltaXVertexPtEta, R"(p_{t}_{MC})"},
263 {kTH3GMTrackDeltaYVertexPtEta, R"(p_{t}_{MC})"},
264 {kTH3GMTrackInvQPtResolutionPtEta, R"(p_{t}_{MC})"},
265 {kTH3GMTrackInvQPtResMCHPtEta, R"(p_{t}_{MC})"},
266 {kTH3GMTrackXPullPtEta, R"(p_{t}_{MC})"},
267 {kTH3GMTrackYPullPtEta, R"(p_{t}_{MC})"},
268 {kTH3GMTrackPhiPullPtEta, R"(p_{t}_{MC})"},
269 {kTH3GMTrackCotlPullPtEta, R"(p_{t}_{MC})"},
270 {kTH3GMTrackInvQPtPullPtEta, R"(p_{t}_{MC})"},
271 {kTH3GMTrackReducedChi2PtEta, R"(p_{t}_{MC})"},
272 {kTH3GMCloseMatchPtEtaChi2, R"(p_{t}_{Fit})"},
273 {kTH3GMCloseMatchPtEtaMatchScore, R"(p_{t}_{Fit})"},
274 {kTH3GMPairablePtEtaZ, R"(p_{t}_{MC})"},
275 {kTH3GMTrackPtEtaChi2, R"(p_{t}_{Fit})"},
276 {kTH3GMTrackPtEtaMatchScore, R"(p_{t}_{Fit})"},
277 {kTH3GMTruePtEtaChi2, R"(p_{t}_{Fit})"},
278 {kTH3GMTruePtEtaMatchScore, R"(p_{t}_{Fit})"},
279 {kTH3GMTruePtEtaMatchScore_MC, R"(p_{t}_{MC})"}};
280
281 std::map<int, const char*> TH3YaxisTitles{
282 {kTH3GMTrackDeltaXDeltaYEta, R"(X_{residual \rightarrow vtx} (\mu m))"},
283 {kTH3GMTrackDeltaXDeltaYPt, R"(X_{residual \rightarrow vtx} (\mu m))"},
284 {kTH3GMTrackDeltaXVertexPtEta, R"(\eta_{MC}v)"},
285 {kTH3GMTrackDeltaYVertexPtEta, R"(\eta_{MC})"},
286 {kTH3GMTrackInvQPtResolutionPtEta, R"(\eta_{MC})"},
287 {kTH3GMTrackInvQPtResMCHPtEta, R"(\eta_{MC})"},
288 {kTH3GMTrackXPullPtEta, R"(\eta_{MC})"},
289 {kTH3GMTrackYPullPtEta, R"(\eta_{MC})"},
290 {kTH3GMTrackPhiPullPtEta, R"(\eta_{MC})"},
291 {kTH3GMTrackCotlPullPtEta, R"(\eta_{MC})"},
292 {kTH3GMTrackInvQPtPullPtEta, R"(\eta_{MC})"},
293 {kTH3GMTrackReducedChi2PtEta, R"(\eta_{MC})"},
294 {kTH3GMCloseMatchPtEtaChi2, R"(\eta_{Fit})"},
295 {kTH3GMCloseMatchPtEtaMatchScore, R"(\eta_{Fit})"},
296 {kTH3GMPairablePtEtaZ, R"(\eta_{MC})"},
297 {kTH3GMTrackPtEtaChi2, R"(\eta_{Fit})"},
298 {kTH3GMTrackPtEtaMatchScore, R"(\eta_{Fit})"},
299 {kTH3GMTruePtEtaChi2, R"(\eta_{Fit})"},
300 {kTH3GMTruePtEtaMatchScore, R"(\eta_{Fit})"},
301 {kTH3GMTruePtEtaMatchScore_MC, R"(\eta_{MC})"}};
302
303 std::map<int, const char*> TH3ZaxisTitles{
304 {kTH3GMTrackDeltaXDeltaYEta, R"(Y_{residual \rightarrow vtx} (\mu m))"},
305 {kTH3GMTrackDeltaXDeltaYPt, R"(Y_{residual \rightarrow vtx} (\mu m))"},
306 {kTH3GMTrackDeltaXVertexPtEta, R"(X_{residual \rightarrow vtx} (\mu m))"},
307 {kTH3GMTrackDeltaYVertexPtEta, R"(Y_{residual \rightarrow vtx} (\mu m))"},
308 {kTH3GMTrackInvQPtResolutionPtEta, R"((q/p_{t})_{residual}/(q/p_{t}))"},
309 {kTH3GMTrackInvQPtResMCHPtEta, R"((q/p_{t})_{residual}/(q/p_{t}))"},
310 {kTH3GMTrackXPullPtEta, R"(\Delta X/\sigma_{X})"},
311 {kTH3GMTrackYPullPtEta, R"(\Delta Y/\sigma_{Y})"},
312 {kTH3GMTrackPhiPullPtEta, R"(\Delta \phi/\sigma_{\phi})"},
313 {kTH3GMTrackCotlPullPtEta, R"(\Delta \cot(\lambda)/\sigma_{cot(\lambda)})"},
314 {kTH3GMTrackInvQPtPullPtEta, R"((\Delta q/p_t)/\sigma_{q/p_{t}})"},
315 {kTH3GMTrackReducedChi2PtEta, R"(\chi^2/d.f.)"},
316 {kTH3GMCloseMatchPtEtaChi2, R"(Match \chi^2)"},
317 {kTH3GMCloseMatchPtEtaMatchScore, R"(Matching Score)"},
318 {kTH3GMPairablePtEtaZ, R"(z_{vtx})"},
319 {kTH3GMTrackPtEtaChi2, R"(Match \chi^2)"},
320 {kTH3GMTrackPtEtaMatchScore, R"(Matching Score)"},
321 {kTH3GMTruePtEtaChi2, R"(Match \chi^2)"},
322 {kTH3GMTruePtEtaMatchScore, R"(Matching Score)"},
323 {kTH3GMTruePtEtaMatchScore_MC, R"(Matching Score)"}};
324
325 enum TH3SlicedCodes {
326 kDeltaXVertexVsEta,
327 kDeltaXVertexVsPt,
328 kDeltaYVertexVsEta,
329 kDeltaYVertexVsPt,
330 kXPullVsEta,
331 kXPullVsPt,
332 kYPullVsEta,
333 kYPullVsPt,
334 kInvQPtResVsEta,
335 kInvQPtResVsPt,
336 kInvQPtResMCHVsEta,
337 kInvQPtResMCHVsPt,
338 kPhiPullVsEta,
339 kPhiPullVsPt,
340 kCotlPullVsEta,
341 kCotlPullVsPt,
342 kInvQPtPullVsEta,
343 kInvQPtPullVsPt,
344 kNSlicedTH3
345 };
346
347 std::map<int, const char*> TH3SlicedNames{
348 {kDeltaXVertexVsEta, "DeltaXVertexVsEta"},
349 {kDeltaXVertexVsPt, "DeltaXVertexVsPt"},
350 {kDeltaYVertexVsEta, "DeltaYVertexVsEta"},
351 {kDeltaYVertexVsPt, "DeltaYVertexVsPt"},
352 {kXPullVsEta, "XPullVsEta"},
353 {kXPullVsPt, "XPullVsPt"},
354 {kYPullVsEta, "YPullVsEta"},
355 {kYPullVsPt, "YPullVsPt"},
356 {kInvQPtResVsEta, "InvQPtResVsEta"},
357 {kInvQPtResVsPt, "InvQPtResVsPt"},
358 {kInvQPtResMCHVsEta, "InvQPtResMCHVsEta"},
359 {kInvQPtResMCHVsPt, "InvQPtResMCHVsPt"},
360 {kPhiPullVsEta, "PhiPullVsEta"},
361 {kPhiPullVsPt, "PhiPullVsPt"},
362 {kCotlPullVsEta, "CotlPullVsEta"},
363 {kCotlPullVsPt, "CotlPullVsPt"},
364 {kInvQPtPullVsEta, "InvQPtPullVsEta"},
365 {kInvQPtPullVsPt, "InvQPtPullVsPt"}};
366
367 std::map<int, int> TH3SlicedMap{
368 {kDeltaXVertexVsEta, kTH3GMTrackDeltaXVertexPtEta},
369 {kDeltaXVertexVsPt, kTH3GMTrackDeltaXVertexPtEta},
370 {kDeltaYVertexVsEta, kTH3GMTrackDeltaYVertexPtEta},
371 {kDeltaYVertexVsPt, kTH3GMTrackDeltaYVertexPtEta},
372 {kXPullVsEta, kTH3GMTrackXPullPtEta},
373 {kXPullVsPt, kTH3GMTrackXPullPtEta},
374 {kYPullVsEta, kTH3GMTrackYPullPtEta},
375 {kYPullVsPt, kTH3GMTrackYPullPtEta},
376 {kInvQPtResVsEta, kTH3GMTrackInvQPtResolutionPtEta},
377 {kInvQPtResVsPt, kTH3GMTrackInvQPtResolutionPtEta},
378 {kInvQPtResMCHVsEta, kTH3GMTrackInvQPtResMCHPtEta},
379 {kInvQPtResMCHVsPt, kTH3GMTrackInvQPtResMCHPtEta},
380 {kPhiPullVsEta, kTH3GMTrackPhiPullPtEta},
381 {kPhiPullVsPt, kTH3GMTrackPhiPullPtEta},
382 {kCotlPullVsEta, kTH3GMTrackCotlPullPtEta},
383 {kCotlPullVsPt, kTH3GMTrackCotlPullPtEta},
384 {kInvQPtPullVsEta, kTH3GMTrackInvQPtPullPtEta},
385 {kInvQPtPullVsPt, kTH3GMTrackInvQPtPullPtEta}};
386
387 std::array<std::unique_ptr<TH3F>, kNTH3Histos> mTH3Histos;
388 std::array<TCanvas*, kNSlicedTH3> mSlicedCanvas;
389 void TH3Slicer(TCanvas* canvas, std::unique_ptr<TH3F>& histo3D, std::vector<float> list, double window, int iPar, float marker_size = 1.5);
390
391 std::unordered_map<o2::MCCompLabel, bool> mPairables;
392 std::vector<std::vector<std::vector<int>>> mTrueTracksMap; // Maps srcIDs and eventIDs to true reco tracks
393 std::vector<std::vector<std::vector<o2::MCCompLabel>>> mPairableTracksMap; // Maps srcIDs and eventIDs to pairable tracks
394
395 enum GMAssesmentCanvases {
396 kPurityPtOuter,
397 kPurityPtInner,
398 kPairingEffPtOuter,
399 kPairingEffPtInner,
400 kPurityVsEfficiency,
401 kTruePairingEffPtOuter,
402 kTruePairingEffPtInner,
403 kPurityVsTrueEfficiency,
404 kNGMAssesmentCanvases
405 };
406
407 std::map<int, const char*> GMAssesmentNames{
408 {kPurityPtOuter, "PurityPtOuter"},
409 {kPurityPtInner, "PurityPtInner"},
410 {kPairingEffPtOuter, "PairingEffPtOuter"},
411 {kPairingEffPtInner, "PairingEffPtInner"},
412 {kTruePairingEffPtOuter, "TruePairingEffPtOuter"},
413 {kTruePairingEffPtInner, "TruePairingEffPtInner"},
414 {kPurityVsEfficiency, "PurityVsEfficiency"},
415 {kPurityVsTrueEfficiency, "PurityVsTrueEfficiency"}};
416
417 std::array<TCanvas*, kNGMAssesmentCanvases> mAssessmentCanvas;
418
419 static constexpr std::array<short, 7> sMinNClustersList = {4, 5, 6, 7, 8, 9, 10};
420 uint32_t mRefOrbit = 0; // Reference orbit used in relative time calculation
421 float mBz = 0;
422 bool mMIDFilterEnabled = true;
423 bool mFinalizeAnalysis = false;
424 float mFinalizeMinCut = 0.f;
425 float mFinalizeMaxCut = 15.f;
426 int mNFinalizeSteps = 15;
427
428 ClassDefNV(GloFwdAssessment, 1);
429};
430
431} // namespace globaltracking
432} // namespace o2
433
434#endif
Definition of the ITSMFT compact cluster.
uint64_t orbit
Definition RawEventData.h:6
Global Forward Muon tracks.
Definition of the ITSMFT ROFrame (trigger) record.
Definition of the MCTrack class.
Definition of the MCH track.
void runBasicQC(o2::framework::ProcessingContext &ctx)
void addMCParticletoHistos(const MCTrack *mcTr, const int TrackType, const o2::dataformats::MCEventHeader &evH)
void finalizeCutConfig(float minCut, float maxCut, int nSteps)
double orbitToSeconds(uint32_t orbit, uint32_t refOrbit)
size_t getNEvents(int source) const
Get number of events.
size_t getNSources() const
Get number of sources.
GLenum src
Definition glcorearb.h:1767
constexpr double LHCOrbitNS
std::vector< o2::MCCompLabel > TrackLabelsType
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
Definition list.h:40