77 for (
auto& map : mTrueTracksMap) {
81 for (
const auto& trackLabel : mFwdTrackLabels) {
82 if (trackLabel.isCorrect()) {
83 mTrueTracksMap[trackLabel.getSourceID()][trackLabel.getEventID()].push_back(
id);
95 mFinalizeMinCut = minCut;
96 mFinalizeMaxCut = maxCut;
97 mNFinalizeSteps = nSteps;
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;
119 gsl::span<const o2::MCCompLabel> mMFTTrackLabels;
120 gsl::span<const o2::MCCompLabel> mMCHTrackLabels;
121 gsl::span<const o2::MCCompLabel> mFwdTrackLabels;
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;
139 std::vector<std::string> mNameOfTrackTypes = {
"Rec",
144 std::unique_ptr<TH2F> mHistPhiRecVsPhiGen =
nullptr;
145 std::unique_ptr<TH2F> mHistEtaRecVsEtaGen =
nullptr;
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;
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;
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,
185 kTH3GMTruePtEtaMatchScore,
186 kTH3GMTruePtEtaMatchScore_MC,
187 kTH3GMCloseMatchPtEtaChi2,
188 kTH3GMCloseMatchPtEtaMatchScore,
189 kTH3GMPairablePtEtaZ,
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"}};
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"}};
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}}};
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})"}};
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})"}};
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)"}};
325 enum TH3SlicedCodes {
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"}};
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}};
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);
391 std::unordered_map<o2::MCCompLabel, bool> mPairables;
392 std::vector<std::vector<std::vector<int>>> mTrueTracksMap;
393 std::vector<std::vector<std::vector<o2::MCCompLabel>>> mPairableTracksMap;
395 enum GMAssesmentCanvases {
401 kTruePairingEffPtOuter,
402 kTruePairingEffPtInner,
403 kPurityVsTrueEfficiency,
404 kNGMAssesmentCanvases
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"}};
417 std::array<TCanvas*, kNGMAssesmentCanvases> mAssessmentCanvas;
419 static constexpr std::array<short, 7> sMinNClustersList = {4, 5, 6, 7, 8, 9, 10};
420 uint32_t mRefOrbit = 0;
422 bool mMIDFilterEnabled =
true;
423 bool mFinalizeAnalysis =
false;
424 float mFinalizeMinCut = 0.f;
425 float mFinalizeMaxCut = 15.f;
426 int mNFinalizeSteps = 15;