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 "CaMonitor.h"
14#include "CaParameters.h"
15#include "CaToolsDebugger.h"
16#include "CaVector.h"
17#include "CbmCaMCModule.h"
19#include "CbmCaTrackTypeQa.h"
20#include "CbmL1DetectorID.h"
21#include "CbmL1Hit.h"
22#include "CbmQaCmpDrawer.h"
23#include "CbmQaTask.h"
24
25#include <array>
26#include <memory>
27
28namespace cbm::ca
29{
32 {
76 // kPrimD,
77 // kPrimDBAR,
78 // kSecD,
79 // kSecDBAR,
80 // kPrimT,
81 // kPrimTBAR,
82 // kSecT,
83 // kSecTBAR,
84 // kPrim3HE,
85 // kPrim3HEBAR,
86 // kSec3HE,
87 // kSec3HEBAR,
88 // kPrim4HE,
89 // kPrim4HEBAR,
90 // kSec4HE,
91 // kSec4HEBAR,
92 END
93 };
94
97 class OutputQa : public CbmQaTask {
98 // WIP: Temporary flag to switch between two different approaches of filling track type histograms
99 //
100 // 1) Experimental approach (kEXPTRACKFILL = true) utilizes unified filling based on defined reco and MC cuts.
101 // 2) Feature is to be studied more precisely (descrepancy in primary/secondary track with a standard approach)
102 // 3) Experimental approach runs in ~10% slower, then the standard
103 static constexpr bool kEXPTRACKFILL = false;
104
106 template<typename T>
107 using TTypeArr_t = std::array<T, ETrackType::END>;
108
110 struct DrawAtt {
111 Color_t fColor = 1;
112 Style_t fMarker = 1;
113 };
114
115 public:
120 OutputQa(int verbose, bool isMCUsed, ECbmRecoMode recoMode = ECbmRecoMode::EventByEvent);
121
128 void AddTrackType(ETrackType type, bool flag = true) { fvbTrackTypeOn[type] = flag; }
129
134 void EnableDebugger(const char* filename)
135 {
136 if (!fpDebugger.get()) {
137 fpDebugger = std::make_shared<tools::Debugger>(filename);
138 }
139 }
140
144 void ReadParameters(const char* filename) { fsParametersFilename = filename; }
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
195 protected:
197 void Check() override;
198
200 void CreateSummary() override;
201
203 void DeInit() override {}
204
207
209 InitStatus InitQa() override;
210
212 void ExecQa() override;
213
214 private:
218 [[gnu::always_inline]] void FillRecoTrack(ETrackType type, int iTrkReco)
219 {
220 if (fvbTrackTypeOn[type]) {
221 fvpTrackHistograms[type]->FillRecoTrack(iTrkReco);
222 }
223 }
224
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
244 // Flags for detector subsystems being used
245 bool fbUseMvd = false;
246 bool fbUseSts = false;
247 bool fbUseMuch = false;
248 bool fbUseTrd = false;
249 bool fbUseTof = false;
250 bool fbDrawEvents = false;
253
255
256 std::string fsParametersFilename = "";
257 std::unique_ptr<TimeSliceReader> fpTSReader = nullptr;
258 std::shared_ptr<MCModule> fpMCModule = nullptr;
259 std::shared_ptr<ca::DataManager> fpDataManager = nullptr;
260 std::shared_ptr<tools::Debugger> fpDebugger = nullptr;
261 std::shared_ptr<ca::Parameters<float>> fpParameters = nullptr;
262
263 ca::Vector<CbmL1HitId> fvHitIds{"CbmCaOutputQa::fvHitIds"};
264 ca::Vector<CbmL1HitDebugInfo> fvHits{"CbmCaOutputQa::fvHits"};
265 ca::Vector<CbmL1Track> fvRecoTracks{"CbmCaOutputQa::fvRecoTracks"};
267
270 enum class EMonitorKey
271 {
272 kEvent,
273 kTrack,
274 kHit,
275 kMcTrack,
276 kMcPoint,
277 END
278 };
279
280 ca::Monitor<EMonitorKey> fMonitor{"Output tracking QA"};
281
282 std::set<ETrackType> fmSummaryTableEntries;
283
284 // *************************
285 // ** List of histograms **
286 // *************************
287
292
293 // ************************************
294 // ** Drawing options and properties **
295 // ************************************
296
297 static constexpr int kCXSIZEPX = 600;
298 static constexpr int kCYSIZEPX = 600;
299
301 };
302
303} // namespace cbm::ca
304
305
306// **********************
307// ** Implementation **
308// **********************
309
310// ---------------------------------------------------------------------------------------------------------------------
311//
312template<class TObj>
313void cbm::ca::OutputQa::DrawSetOf(const std::vector<ETrackType>& vTypes, std::function<TObj*(ETrackType)> GetObj)
314{
316 for (auto type : vTypes) {
317 if (!fvbTrackTypeOn[type] || !fvpTrackHistograms[type]->IsMCUsed()) {
318 continue;
319 }
320 drawer.RegisterObject(GetObj(type), fvpTrackHistograms[type]->GetTitle());
321 }
322 if constexpr (std::is_same_v<TH1F, TObj>) {
323 drawer.SetMinimum(1.e-1);
324 }
325 drawer.Draw("");
326 drawer.Clear();
327}
328
329// ---------------------------------------------------------------------------------------------------------------------
330//
334[[gnu::always_inline]] inline void cbm::ca::OutputQa::FillMCTrack(ETrackType type, int iTrkMC)
335{
336 // Fill histograms and efficiency profiles
337 if (fvbTrackTypeOn[type]) {
338 fvpTrackHistograms[type]->FillMCTrack(iTrkMC);
339 }
340}
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:162
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.
bool IsMCUsed() const
Returns flag, whether MC information is used or not in the task.
Definition CbmQaTask.h:126
Monitor class for the CA tracking.
Definition CaMonitor.h:35
QA-task for CA tracking output results.
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.
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.
void EnableDebugger(const char *filename)
Enables debugger.
void AddTrackType(ETrackType type, bool flag=true)
Adds track type.
bool fbUseMvd
is MVD used
ca::Vector< CbmL1HitDebugInfo > fvHits
void SetPerformanceMode(int mode)
Sets performance mode.
void SetStsTrackingMode()
Sets STS tracking mode.
void SetMcbmTrackingMode()
Sets mCBM global tracking mode.
EMonitorKey
QA monitor counters.
void CreateSummary() override
Creates summary cavases, tables etc.
void FillRecoTrack(ETrackType type, int iTrkReco)
Fills reconstructed track by its index.
void SetUseTof(bool flag=true)
Sets TOF use flag.
bool fbUseMuch
is MuCh used
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.
ca::Monitor< EMonitorKey > fMonitor
TTypeArr_t< DrawAtt > fvTrackDrawAtts
Drawing attributes for track types.
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.
tools::MCData fMCData
Input MC data (points and tracks)
void DrawEvent()
Draws event.
TTypeArr_t< std::unique_ptr< TrackTypeQa > > fvpTrackHistograms
Histogrammers for different track types.
std::shared_ptr< ca::Parameters< float > > fpParameters
Tracking parameters object.
static constexpr int kCXSIZEPX
Canvas size along x-axis [px].
std::shared_ptr< MCModule > fpMCModule
MC module.
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.
void ReadParameters(const char *filename)
Reads defined parameters object from file.
ca::Vector< CbmL1Track > fvRecoTracks
bool fbUseSts
is STS used
void SetEventDisplay(bool bDrawEvents, int minNofPoints=2)
Sets event display.
This class represents a package for tracking-related data.
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
@ 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
@ 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
@ kSecPIM
secondary pi-
Structure to keep drawing attributes of histograms.
Style_t fMarker
Marker style.
Color_t fColor
Marker and line color.