CbmRoot
Loading...
Searching...
No Matches
CbmTaskBuildRawEvents.h
Go to the documentation of this file.
1/* Copyright (C) 2007-2021 Facility for Antiproton and Ion Research in Europe, Darmstadt
2 SPDX-License-Identifier: GPL-3.0-only
3 Authors: Dominik Smith [committer] */
4
5#ifndef CBMTASKBUILDRAWEVENTS_H
6#define CBMTASKBUILDRAWEVENTS_H
7
10#include "CbmBmonDigi.h"
11#include "CbmDigiEvent.h"
12#include "CbmFsdDigi.h"
13#include "CbmMuchBeamTimeDigi.h"
14#include "CbmMuchDigi.h"
15#include "CbmPsdDigi.h"
16#include "CbmRichDigi.h"
17#include "CbmStsDigi.h"
18#include "CbmTofDigi.h"
19#include "CbmTrdDigi.h"
20
22#include "FairTask.h"
23
25
27#include <array>
28#include <map>
29#include <set>
30#include <tuple>
31#include <vector>
32
33class CbmDigiManager;
34class CbmEvent;
35class CbmMatch;
38class TClonesArray;
39class TStopwatch;
40
41enum class EOverlapModeRaw;
42
43class CbmTaskBuildRawEvents : public FairTask {
44 public:
47
50
52 // CbmTaskBuildRawEvents(Int_t verbose);
53
56
58 virtual InitStatus Init();
59
61 virtual InitStatus ReInit();
62
64 virtual void Exec(Option_t*);
65
67 virtual void Finish();
68
70 void SetOutFilename(TString sNameIn) { fsOutFileName = sNameIn; }
72
73 void SetFillHistos(Bool_t bFlag = kTRUE)
74 {
75 fbFillHistos = bFlag;
76 if (nullptr != fpAlgo) fpAlgo->SetFillHistos(fbFillHistos);
77 }
78 void SetReferenceDetector(RawEventBuilderDetector refDet, std::vector<bool> select = {})
79 {
80 if (nullptr != fpAlgo) fpAlgo->SetReferenceDetector(refDet, select);
81 }
83 {
84 if (nullptr != fpAlgo) fpAlgo->AddDetector(selDet);
85 }
87 {
88 if (nullptr != fpAlgo) fpAlgo->RemoveDetector(selDet);
89 }
90 void SetTriggerMinNumber(ECbmModuleId selDet, UInt_t uVal)
91 {
92 if (nullptr != fpAlgo) fpAlgo->SetTriggerMinNumber(selDet, uVal);
93 }
94 void SetTriggerMaxNumber(ECbmModuleId selDet, Int_t iVal)
95 {
96 if (nullptr != fpAlgo) fpAlgo->SetTriggerMaxNumber(selDet, iVal);
97 }
98 void SetTriggerMinLayersNumber(ECbmModuleId selDet, UInt_t uVal)
99 {
100 if (nullptr != fpAlgo) fpAlgo->SetTriggerMinLayersNumber(selDet, uVal);
101 }
102 void SetHistogramMaxDigiNb(ECbmModuleId selDet, UInt_t uVal)
103 {
104 if (nullptr != fpAlgo) fpAlgo->SetHistogramMaxDigiNb(selDet, uVal);
105 }
106 void SetTriggerWindow(ECbmModuleId det, Double_t dWinBeg, Double_t dWinEnd)
107 {
108 if (nullptr != fpAlgo) fpAlgo->SetTriggerWindow(det, dWinBeg, dWinEnd);
109 }
110 void SetTsParameters(Double_t dTsStartTime, Double_t dTsLength, Double_t dTsOverLength)
111 {
112 if (nullptr != fpAlgo) fpAlgo->SetTsParameters(dTsStartTime, dTsLength, dTsOverLength);
113 }
115 {
116 if (nullptr != fpAlgo) fpAlgo->SetEventOverlapMode(mode);
117 }
118 void SetIgnoreTsOverlap(Bool_t bFlagIn)
119 {
120 if (nullptr != fpAlgo) fpAlgo->SetIgnoreTsOverlap(bFlagIn);
121 }
122 void ChangeMuchBeamtimeDigiFlag(Bool_t bFlagIn = kFALSE)
123 {
124 if (nullptr != fpAlgo) fpAlgo->ChangeMuchBeamtimeDigiFlag(bFlagIn);
125 fbUseMuchBeamtimeDigi = bFlagIn;
126 }
127 void SetTimings(Bool_t bFlagIn = kTRUE)
128 {
129 if (nullptr != fpAlgo) fpAlgo->SetTimings(bFlagIn);
130 fbGetTimings = bFlagIn;
131 }
132
133 void SetSeedFinderQa(Bool_t bFlagIn = kTRUE);
134 void PrintTimings();
136 void SetSlidingWindowSeedFinder(int32_t minDigis, double dWindDur, double dDeadT, double dOffset = 0.0);
137 void SetIdealSeedFinder(const int32_t fileId = -1);
138
140 void SetSeedTimeWindow(Double_t beg, Double_t end) { fpAlgo->SetSeedTimeWindow(beg, end); }
141
142 void SetDigiEventOutput(Bool_t bFlagIn = kTRUE) { fbDigiEvtOut = bFlagIn; }
143 void SetDigiEventExclusiveTrdExtraction(Bool_t bFlagIn = kTRUE) { fbExclusiveTrdExtraction = bFlagIn; }
144
145 private:
147 void BuildEvents();
148
149 void FillOutput();
150 void SaveHistos();
151
152 Bool_t fbUseMuchBeamtimeDigi = kTRUE;
153
155
157 std::vector<CbmMuchDigi>* fMuchDigis = nullptr;
158 std::vector<CbmMuchBeamTimeDigi>* fMuchBeamTimeDigis = nullptr;
159 std::vector<CbmStsDigi>* fStsDigis = nullptr;
160 std::vector<CbmTrdDigi>* fTrdDigis = nullptr;
161 std::vector<CbmTofDigi>* fTofDigis = nullptr;
162 std::vector<CbmRichDigi>* fRichDigis = nullptr;
163 std::vector<CbmPsdDigi>* fPsdDigis = nullptr;
164 std::vector<CbmFsdDigi>* fFsdDigis = nullptr;
165 std::vector<CbmBmonDigi>* fBmonDigis = nullptr;
166 std::vector<Double_t>* fSeedTimes = nullptr;
167
169 template<class TDigi>
170 void InitDigis(ECbmModuleId detId, std::vector<TDigi>** vDigi);
171
172 std::vector<Double_t>* fTempDigiTimes =
173 nullptr; //used when multiple seed detectors are combined with sliding window seed finder
174
175 std::vector<RawEventBuilderDetector> fSeedTimeDetList; //for multiple seed detectors
176
178 template<class TDigi>
179 void ReadDigis(ECbmModuleId detId, std::vector<TDigi>* vDigis);
180
181 // Store digi matches for QA tasks
182 std::vector<CbmMatch>* fvDigiMatchQa = nullptr;
183
184 Double_t GetDigiTime(ECbmModuleId _system, UInt_t _entry);
185 UInt_t GetNofDigis(ECbmModuleId _system);
186
187 void FillSeedTimesFromDetList(std::vector<Double_t>* vdSeedTimes, std::vector<CbmMatch>* vDigiMatch = nullptr);
190
191 TStopwatch* fTimer = nullptr;
192 TStopwatch* fCopyTimer = nullptr;
193
195
196 Bool_t fbDigiEvtOut = kFALSE;
197 Bool_t fbExclusiveTrdExtraction = kFALSE;
198 TClonesArray* fEvents = nullptr;
199 std::vector<CbmDigiEvent>* fDigiEvents = nullptr;
200
201 void ExtractSelectedData(std::vector<CbmEvent*> vEvents);
202
203 Bool_t fbFillHistos{kTRUE};
205 Bool_t fbGetTimings = kFALSE;
206
208 TString fsOutFileName{"data/HistosEvtWin.root"};
209
210 Int_t fNofTs = 0;
211 Long64_t fNofEvents = 0;
212 Double_t fTime = 0.;
213
215 uint64_t fTotalSeedCount = 0;
216
218};
219
220#endif // CBMTASKBUILDRAWEVENTS_H
ECbmModuleId
Definition CbmDefs.h:39
static double dTsStartTime
void SetEventOverlapMode(EOverlapModeRaw mode)
Control flags.
void SetHistogramMaxDigiNb(ECbmModuleId selDet, Double_t dDigiNbMax)
void SetIgnoreTsOverlap(Bool_t bFlagIn=kTRUE)
void ChangeMuchBeamtimeDigiFlag(Bool_t bFlagIn=kFALSE)
void SetTsParameters(Double_t dTsStartTime, Double_t dTsLength, Double_t dTsOverLength)
void SetSeedTimeWindow(Double_t timeWinBeg, Double_t timeWinEnd)
void RemoveDetector(RawEventBuilderDetector selDet)
void AddDetector(ECbmModuleId selDet, ECbmDataType dataTypeIn, std::string sNameIn, UInt_t uTriggerMinDigisIn=0, Int_t iTriggerMaxDigisIn=-1, Double_t fdTimeWinBegIn=-100, Double_t fdTimeWinEndIn=100)
void SetTriggerMaxNumber(ECbmModuleId selDet, Int_t iVal)
void SetTriggerMinLayersNumber(ECbmModuleId selDet, UInt_t uVal)
void SetTriggerMinNumber(ECbmModuleId selDet, UInt_t uVal)
void SetReferenceDetector(ECbmModuleId refDet, ECbmDataType dataTypeIn, std::string sNameIn, UInt_t uTriggerMinDigisIn=0, Int_t iTriggerMaxDigisIn=-1, Double_t fdTimeWinBegIn=-100, Double_t fdTimeWinEndIn=100)
void SetTriggerWindow(ECbmModuleId selDet, Double_t dWinBeg, Double_t dWinEnd)
CbmDigiManager.
Class characterising one event by a collection of links (indices) to data objects,...
Definition CbmEvent.h:34
void SetTriggerWindow(ECbmModuleId det, Double_t dWinBeg, Double_t dWinEnd)
void SetSeedFinderQa(Bool_t bFlagIn=kTRUE)
CbmAlgoBuildRawEvents * fpAlgo
timing only for filling of std::vector<Digi> fields
void SetSlidingWindowSeedFinder(int32_t minDigis, double dWindDur, double dDeadT, double dOffset=0.0)
UInt_t GetNofDigis(ECbmModuleId _system)
void SetFillHistos(Bool_t bFlag=kTRUE)
void SetSeedTimeWindow(Double_t beg, Double_t end)
void ReadDigis(ECbmModuleId detId, std::vector< TDigi > *vDigis)
void SetEventOverlapMode(EOverlapModeRaw mode)
std::vector< CbmMuchBeamTimeDigi > * fMuchBeamTimeDigis
std::vector< CbmStsDigi > * fStsDigis
std::vector< CbmDigiEvent > * fDigiEvents
output container of CbmEvents
std::vector< CbmPsdDigi > * fPsdDigis
void SetOutFilename(TString sNameIn)
TStopwatch * fCopyTimer
is created when fbGetTimings is set before init
std::vector< Double_t > * fTempDigiTimes
CbmTaskBuildRawEvents operator=(const CbmTaskBuildRawEvents &)=delete
void SetTriggerMinNumber(ECbmModuleId selDet, UInt_t uVal)
Bool_t fbWriteHistosToFairSink
Switch ON/OFF filling of histograms.
ClassDef(CbmTaskBuildRawEvents, 1)
TString fsOutFileName
Measure CPU time using stopwatch.
std::vector< CbmTrdDigi > * fTrdDigis
TClonesArray * fEvents
Enable/disabled loop based extraction of TRD digis due to 1D/2D.
void ChangeMuchBeamtimeDigiFlag(Bool_t bFlagIn=kFALSE)
void SetTriggerMinLayersNumber(ECbmModuleId selDet, UInt_t uVal)
std::vector< CbmTofDigi > * fTofDigis
CbmSeedFinderSlidingWindow * fSeedFinderSlidingWindow
Switch between MUCH digi classes.
std::vector< CbmMatch > * fvDigiMatchQa
CbmTaskBuildRawEvents(const CbmTaskBuildRawEvents &)=delete
void RemoveDetector(RawEventBuilderDetector selDet)
void SetReferenceDetector(RawEventBuilderDetector refDet, std::vector< bool > select={})
std::vector< Double_t > * fSeedTimes
void ExtractSelectedData(std::vector< CbmEvent * > vEvents)
output container of CbmEvents
void SetDigiEventOutput(Bool_t bFlagIn=kTRUE)
void SetTriggerMaxNumber(ECbmModuleId selDet, Int_t iVal)
void SetTimings(Bool_t bFlagIn=kTRUE)
Bool_t fbGetTimings
Write histos to FairRootManager instead of separate file.
void SetDigiEventExclusiveTrdExtraction(Bool_t bFlagIn=kTRUE)
void InitDigis(ECbmModuleId detId, std::vector< TDigi > **vDigi)
void SetHistogramMaxDigiNb(ECbmModuleId selDet, UInt_t uVal)
std::vector< CbmMuchDigi > * fMuchDigis
void SetIgnoreTsOverlap(Bool_t bFlagIn)
virtual void Exec(Option_t *)
std::vector< RawEventBuilderDetector > fSeedTimeDetList
void AddSeedTimeFillerToList(RawEventBuilderDetector seedDet)
void SetIdealSeedFinder(const int32_t fileId=-1)
std::vector< CbmRichDigi > * fRichDigis
Double_t GetDigiTime(ECbmModuleId _system, UInt_t _entry)
void SetWriteHistosToFairSink(Bool_t var)
void FillSeedTimesFromDetList(std::vector< Double_t > *vdSeedTimes, std::vector< CbmMatch > *vDigiMatch=nullptr)
std::vector< CbmBmonDigi > * fBmonDigis
std::vector< CbmFsdDigi > * fFsdDigis
void SetTsParameters(Double_t dTsStartTime, Double_t dTsLength, Double_t dTsOverLength)
void AddDetector(RawEventBuilderDetector selDet)