CbmRoot
Loading...
Searching...
No Matches
CbmCaOutputQa.h
Go to the documentation of this file.
1/* Copyright (C) 2023 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
2 SPDX-License-Identifier: GPL-3.0-only
3 Authors: Sergei Zharko [committer] */
4
9
10
11#pragma once
12
13#include "CaMcHitInfo.h"
14#include "CaMonitor.h"
15#include "CaParameters.h"
16#include "CaToolsDebugger.h"
17#include "CaVector.h"
18#include "CbmCaMCModule.h"
20#include "CbmCaTrackTypeQa.h"
21#include "CbmKfTrackFitter.h"
22#include "CbmL1DetectorID.h"
23#include "CbmL1HitId.h"
24#include "CbmQaCmpDrawer.h"
25#include "CbmQaTask.h"
26
27#include <array>
28#include <memory>
29
30namespace cbm::ca
31{
34 {
81 // kPrimD,
82 // kPrimDBAR,
83 // kSecD,
84 // kSecDBAR,
85 // kPrimT,
86 // kPrimTBAR,
87 // kSecT,
88 // kSecTBAR,
89 // kPrim3HE,
90 // kPrim3HEBAR,
91 // kSec3HE,
92 // kSec3HEBAR,
93 // kPrim4HE,
94 // kPrim4HEBAR,
95 // kSec4HE,
96 // kSec4HEBAR,
98 };
99
102 class OutputQa : public CbmQaTask {
103 // WIP: Temporary flag to switch between two different approaches of filling track type histograms
104 //
105 // 1) Experimental approach (kEXPTRACKFILL = true) utilizes unified filling based on defined reco and MC cuts.
106 // 2) Feature is to be studied more precisely (descrepancy in primary/secondary track with a standard approach)
107 // 3) Experimental approach runs in ~10% slower, then the standard
108 static constexpr bool kEXPTRACKFILL = false;
109
111 template<typename T>
112 using TTypeArr_t = std::array<T, ETrackType::END>;
113
115 struct DrawAtt {
116 Color_t fColor = 1;
117 Style_t fMarker = 1;
118 };
119
120 public:
125 OutputQa(int verbose, bool isMCUsed, ECbmRecoMode recoMode = ECbmRecoMode::EventByEvent);
126
133 void AddTrackType(ETrackType type, bool flag = true) { fvbTrackTypeOn[type] = flag; }
134
139 void EnableDebugger(const char* filename)
140 {
141 if (!fpDebugger.get()) {
142 fpDebugger = std::make_shared<tools::Debugger>(filename);
143 }
144 }
145
152 void SetEventDisplay(bool bDrawEvents, int minNofPoints = 2)
153 {
154 fbDrawEvents = bDrawEvents;
155 fEvtDisplayMinNofPoints = minNofPoints;
156 }
157
160 void SetUseMvd(bool flag = true) { fbUseMvd = flag; }
161
164 void SetUseSts(bool flag = true) { fbUseSts = flag; }
165
168 void SetUseMuch(bool flag = true) { fbUseMuch = flag; }
169
172 void SetUseTrd(bool flag = true) { fbUseTrd = flag; }
173
176 void SetUseTof(bool flag = true) { fbUseTof = flag; }
177
180
183
186 void SetPerformanceMode(int mode) { fPerformanceMode = mode; }
187
190 void SetTrackTypeListForSummary(std::set<ETrackType>&& trackTypes)
191 {
192 fmSummaryTableEntries = std::move(trackTypes);
193 }
194
198 void SetNofThreads(int nThreads) { fNthreads = nThreads; }
199
203 void SetMaxExtrapolationStep(double maxStep) { fMaxExtrapolationStep = maxStep; }
204
205 protected:
207 void Check() override;
208
210 void CreateSummary() override;
211
213 void DeInit() override { fDebugger.Write(); }
214
217
219 InitStatus InitQa() override;
220
222 void ExecQa() override;
223
224 private:
228 void FillMCTrack(ETrackType type, int iTrkMC);
229
231 void DrawEvent();
232
237 template<class TObj>
238 void DrawSetOf(const std::vector<ETrackType>& vTypes, std::function<TObj*(ETrackType)> GetObj);
239
240
243
245
246 // Flags for detector subsystems being used
247 bool fbUseMvd = false;
248 bool fbUseSts = false;
249 bool fbUseMuch = false;
250 bool fbUseTrd = false;
251 bool fbUseTof = false;
252 bool fbDrawEvents = false;
255
257
258 std::string fsParametersFilename = "";
259 std::unique_ptr<TimeSliceReader> fpTSReader = nullptr;
260 std::shared_ptr<MCModule> fpMCModule = nullptr;
261 std::shared_ptr<ca::DataManager> fpDataManager = nullptr;
262 std::shared_ptr<tools::Debugger> fpDebugger = nullptr;
263 std::shared_ptr<const ca::Parameters<double>> fpParameters = nullptr;
264
265 ca::Vector<CbmL1HitId> fvHitIds{"CbmCaOutputQa::fvHitIds"};
267 ca::Vector<CbmL1Track> fvRecoTracks{"CbmCaOutputQa::fvRecoTracks"};
269
272
274 int fNthreads{-1};
278
290
291 ca::Monitor<EMonitorKey> fMonitor{"Output tracking QA"};
292
293 std::set<ETrackType> fmSummaryTableEntries;
294
295 // *************************
296 // ** List of histograms **
297 // *************************
298
303
304 // ************************************
305 // ** Drawing options and properties **
306 // ************************************
307
308 static constexpr int kCXSIZEPX = 600;
309 static constexpr int kCYSIZEPX = 600;
310
312 };
313
314} // namespace cbm::ca
315
316
317// **********************
318// ** Implementation **
319// **********************
320
321// ---------------------------------------------------------------------------------------------------------------------
322//
323template<class TObj>
324void cbm::ca::OutputQa::DrawSetOf(const std::vector<ETrackType>& vTypes, std::function<TObj*(ETrackType)> GetObj)
325{
327 for (auto type : vTypes) {
328 if (!fvbTrackTypeOn[type] || !fvpTrackHistograms[type]->IsMCUsed()) {
329 continue;
330 }
331 drawer.RegisterObject(GetObj(type), fvpTrackHistograms[type]->GetTitle());
332 }
333 if constexpr (std::is_same_v<TH1F, TObj>) {
334 drawer.SetMinimum(1.e-1);
335 }
336 drawer.Draw("");
337 drawer.Clear();
338}
339
340// ---------------------------------------------------------------------------------------------------------------------
341//
345[[gnu::always_inline]] inline void cbm::ca::OutputQa::FillMCTrack(ETrackType type, int iTrkMC)
346{
347 // Fill histograms and efficiency profiles
348 if (fvbTrackTypeOn[type]) {
349 fvpTrackHistograms[type]->FillMCTrack(iTrkMC);
350 }
351}
CA Tracking monitor class.
Tracking Debugger class (implementation)
CA Tracking performance interface for CBM (header)
Time-slice/event reader for CA tracker in CBM (header)
QA submodule for different track types (header)
ECbmRecoMode
Reconstruct the full time slice or event-by-event.
Definition CbmDefs.h:202
Implementation of L1DetectorID enum class for CBM.
ECbmCaTrackingMode
Enumeration for different tracking running modes.
@ kMCBM
Global tracking in mCBM (STS, MuCh, TRD, TOF), results stored to GlobalTrack branch.
@ kSTS
Local tracking in CBM (STS + MVD), results stored to the StsTrack branch.
Class for a canvas with a comparison of multiple graphs or histograms (header)
A base class for CBM QA task logic.
Class to draw a comparison of objects on the provided canvas or pad.
void Clear()
Clears the set of objects.
void Draw(Option_t *opt) const
Draw objects.
void SetMinimum(double min)
Sets minimum of the histogram/graph.
void RegisterObject(const Obj *pObj, const char *title=nullptr)
Registers an object to draw.
CbmQaTask(const char *name, int verbose, bool isMCUsed, ECbmRecoMode recoMode=ECbmRecoMode::Timeslice)
Constructor from parameters.
Definition CbmQaTask.cxx:32
bool IsMCUsed() const
Returns flag, whether MC information is used or not in the task.
Definition CbmQaTask.h:126
This class represents a package for tracking-related data.
Definition CaMcData.h:33
Monitor class for the CA tracking.
Definition CaMonitor.h:35
void ExecQa() override
Fills histograms from time slice or event.
void FillTrackTypeHistograms()
Fills histograms for a given track types.
static constexpr int kCYSIZEPX
Canvas size along y-axis [px].
void DrawSetOf(const std::vector< ETrackType > &vTypes, std::function< TObj *(ETrackType)> GetObj)
Utility function to draw a generic comparison of histograms from different track types.
double fMaxExtrapolationStep
Maximum extrapolation step [cm], set when it is > 0.
OutputQa(int verbose, bool isMCUsed, ECbmRecoMode recoMode=ECbmRecoMode::EventByEvent)
Constructor from parameters.
TTypeArr_t< bool > fvbTrackTypeOn
Usage flag for different track types.
std::unique_ptr< TimeSliceReader > fpTSReader
Reader of the time slice.
bool fbUseTrd
is TRD used
ECbmCaTrackingMode fTrackingMode
Tracking mode.
TTypeArr_t< std::string > fvsTrackTypeName
Array of track type unique names.
ca::McData fMCData
Input MC data (points and tracks)
void EnableDebugger(const char *filename)
Enables debugger.
void AddTrackType(ETrackType type, bool flag=true)
Adds track type.
bool fbUseMvd
is MVD used
void SetPerformanceMode(int mode)
Sets performance mode.
void SetStsTrackingMode()
Sets STS tracking mode.
void SetMcbmTrackingMode()
Sets mCBM global tracking mode.
ca::Vector< cbm::algo::ca::McHitInfo > fvHits
EMonitorKey
QA monitor counters.
void CreateSummary() override
Creates summary cavases, tables etc.
void SetUseTof(bool flag=true)
Sets TOF use flag.
bool fbUseMuch
is MuCh used
void SetMaxExtrapolationStep(double maxStep)
Sets maximum extrapolation step.
InitStatus InitQa() override
Initialises the QA-task.
ClassDefOverride(OutputQa, 0)
int fPerformanceMode
Performance mode.
void InitDrawingAttributes()
Defines drawing attributes for histograms of different track types.
bool fbUseTof
is TOF used
void SetUseSts(bool flag=true)
Sets STS use flag.
void SetTrackTypeListForSummary(std::set< ETrackType > &&trackTypes)
Set track type list for summary table.
std::set< ETrackType > fmSummaryTableEntries
Which track types should be listed in the summary table.
cbm::ca::tools::Debugger fDebugger
debugger
ca::Monitor< EMonitorKey > fMonitor
TTypeArr_t< DrawAtt > fvTrackDrawAtts
Drawing attributes for track types.
cbm::ca::TrackTypeQa::FitQaPointSet CreateFitQaPointSet(int iTrkReco) const
void SetUseTrd(bool flag=true)
Sets TRD use flag.
void FillMCTrack(ETrackType type, int iTrkMC)
Fills MC track by its index.
int fEvtDisplayMinNofPoints
minimum number of MC points in the event display
void SetUseMuch(bool flag=true)
Sets MuCh use flag.
void SetUseMvd(bool flag=true)
Sets MVD use flag.
std::shared_ptr< tools::Debugger > fpDebugger
Debugger.
void DrawEvent()
Draws event.
TTypeArr_t< std::unique_ptr< TrackTypeQa > > fvpTrackHistograms
Histogrammers for different track types.
std::shared_ptr< const ca::Parameters< double > > fpParameters
Tracking parameters object.
static constexpr int kCXSIZEPX
Canvas size along x-axis [px].
std::shared_ptr< MCModule > fpMCModule
MC module.
CbmKfTrackFitter fTrackFitter
Track fitter.
std::string fsParametersFilename
void DeInit() override
De-initializes histograms.
std::shared_ptr< ca::DataManager > fpDataManager
Data manager.
static constexpr bool kEXPTRACKFILL
ca::Vector< CbmL1HitId > fvHitIds
bool fbDrawEvents
flag to draw events with the event display
std::array< T, ETrackType::END > TTypeArr_t
Array for track type properties.
void Check() override
Method to check, if the QA results are acceptable.
ca::Vector< CbmL1Track > fvRecoTracks
void SetNofThreads(int nThreads)
Sets number of threads to use for filling histograms.
bool fbUseSts
is STS used
void SetEventDisplay(bool bDrawEvents, int minNofPoints=2)
Sets event display.
ETrackType
Enumeration fors track category.
@ kPrimPIP
primary pi+
@ kSecMUP
secondary mu+
@ kSecMUM
secondary mu-
@ kAllE
all e-/e+
@ kGhost
ghost tracks (no MC is used)
@ kPrim
primary
@ kAll2STS1TOF
tracks, which have at least two STS hits and one TOF hit
@ kPrimLongFast
primary long tracks (all stations in set)
@ kPrimEP
primary e+
@ kSecFast
secondary fast
@ kPrimP
primary p
@ kPrimKM
primary K-
@ kPrimPBAR
primary p-bar
@ kSecK
secondary K+/K-
@ kSecPIP
secondary pi+
@ kPrimMUM
primary mu-
@ kSecE
secondary e-/e+
@ kPrimPI
primary pi+/pi-
@ kPrimPIM
primary pi-
@ kSecEM
secondary e-
@ kAllPI
all pi+/pi-
@ kPrimK
primary K+/K-
@ kSec
secondary
@ kPrimMU
primary mu+/mu-
@ kPrimPPBAR
primary p/p-bar
@ kPrim2STS1TOF
primary tracks, which have at least two STS hits and one TOF hit
@ kSecPI
secondary pi+/pi-
@ kPrimE
primary e-/e+
@ kSecP
secondary p
@ kAll
all tracks
@ kAllPPBAR
all p/p-bar
@ kSecPPBAR
secondary p/p-bar
@ kPrimFast
primary fast
@ kPrimEM
primary e-
@ kSecKM
secondary K-
@ kAllK
all K+/K-
@ kSecEP
secondary e+
@ kAllMU
all mu+/mu-
@ kPrimMUP
primary mu+
@ kSecKP
secondary K+
@ kSecMU
secondary mu+/mu-
@ kPrimLong
long primary
@ kPrimKP
primary K+
@ kSecPBAR
secondary p-bar
@ kSec2STS1TOF
secondary tracks, which have at least two STS hits and one TOF hit
@ kSecPIM
secondary pi-
Structure to keep drawing attributes of histograms.
Style_t fMarker
Marker style.
Color_t fColor
Marker and line color.