BmnRoot
Loading...
Searching...
No Matches
BmnEventSelector.h
Go to the documentation of this file.
1#ifndef BMNPILEUPREDUCTIONTASK_H
2#define BMNPILEUPREDUCTIONTASK_H
3
4#include "FairTask.h"
5
8class FairRootManager;
9class TClonesArray;
10class TFile;
11class TH2F;
12class THnSparse;
13
14namespace BmnEventClass
15{
16enum id
17{
18 kNull = 0,
19 k0,
20 k1,
21 kV0,
22 kV1,
23 k00,
24 k01,
25 k0V0,
26 k0V1,
27 k10,
28 k11,
29 k1V0,
30 k1V1,
31 kMult,
32 kUndef,
34};
35const std::map<int, std::string> names{
36 {kNull, "Null"}, {k0, "0"}, {k1, "1"}, {kV0, "V0"}, {kV1, "V1"},
37 {k00, "00"}, {k01, "01"}, {k0V0, "0V0"}, {k0V1, "0V1"}, {k10, "10"},
38 {k11, "11"}, {k1V0, "1V0"}, {k1V1, "1V1"}, {kMult, "Mult"}, {kUndef, "Undef"},
39};
40} // namespace BmnEventClass
41
42namespace BmnTriggerBits
43{
45{
46 kBC1L = 0,
47 kpBT,
48 kBT,
49 kNiT,
50 kCCT1,
51 kMBT,
53 kCCT2,
55};
56} // namespace BmnTriggerBits
57
58class BmnBC1hitInfo : public TNamed
59{
60 friend class BmnEventSelector;
61
62 public:
64 virtual ~BmnBC1hitInfo() {};
65 std::vector<float> GetClosestBC1hitsDt(BmnEventClass::id classId)
66 {
67 std::vector<float> dt{-1.e10, 1.e10};
68 for (int i = fCentralHitIndexBC1S - 1; i >= 0; i--) {
69 if (fBC1hitClasses.at(i) == classId) {
70 dt.at(0) = fRelTimesBC1S.at(i);
71 break;
72 }
73 }
74 for (int i = fCentralHitIndexBC1S + 1; i < int(fTimesBC1S.size()); i++) {
75 if (fBC1hitClasses.at(i) == classId) {
76 dt.at(1) = fRelTimesBC1S.at(i);
77 break;
78 }
79 }
80 return dt;
81 }
82
83 std::vector<double> GetTimesBC1S() { return fTimesBC1S; }
84 std::vector<double> GetRelTimesBC1S() { return fRelTimesBC1S; }
85 std::vector<int> GetBC1hitClasses() { return fBC1hitClasses; }
86 std::vector<int> GetBC1Speaks() { return fBC1Speaks; }
87 std::vector<int> GetBC2ASpeaks() { return fBC2ASpeaks; }
88 std::vector<int> GetVCSpeaks() { return fVCSpeaks; }
89 std::vector<int> GetFDpeaks() { return fFDpeaks; }
90 std::vector<int> GetNdigitsTOF400() { return fNdigitsTOF400; }
91 std::vector<int> GetNdigitsTOF700() { return fNdigitsTOF700; }
92 std::vector<int> GetNdigitsBD() { return fNdigitsBD; }
93 std::vector<float> GetSumAmpBD() { return fSumAmpBD; }
94 int GetCentralHitIndexBC1S() { return fCentralHitIndexBC1S; }
95 BmnEventClass::id GetEventClass() { return fEventClass; }
96
97 private:
98 std::vector<double> fTimesBC1S;
99 std::vector<double> fRelTimesBC1S;
100 std::vector<int> fBC1hitClasses;
101 std::vector<int> fBC1Speaks;
102 std::vector<int> fBC2ASpeaks;
103 std::vector<int> fVCSpeaks;
104 std::vector<int> fFDpeaks;
105 std::vector<int> fNdigitsTOF400;
106 std::vector<int> fNdigitsTOF700;
107 std::vector<int> fNdigitsBD;
108 std::vector<float> fSumAmpBD;
109 int fCentralHitIndexBC1S;
110 BmnEventClass::id fEventClass;
111
112 ClassDef(BmnBC1hitInfo, 2);
113};
114
115class BmnEventSelector : public FairTask
116{
117 public:
120
122 // BmnEventSelector(Int_t verbose);
123
126
127 void SetRunId(int runId) { fRunId = runId; }
128 void SetOutputFileName(const char* name) { fOutputFileName = name; }
129 void SetInputFileName(const char* name) { fInputFileName = name; }
130
132 virtual InitStatus Init();
133
135
137 virtual InitStatus ReInit();
138
140 virtual void Exec(Option_t* opt);
141
143 virtual void SetParContainers();
144
145 void Calculate();
146
148
149 int GetClosestHitIndex(std::vector<double> hitTimes, float refTime);
150
152 virtual void Finish();
153 void WriteBC1hitInfo(bool write = true) { fWriteBC1hitInfo = write; }
154 void FillCalibrationHists(bool fill = true) { fFillCalibrationHists = fill; }
155 void FillPerformanceHists(bool fill = true) { fFillPerformanceHists = fill; }
156
157 private:
159 BmnEventSelector operator=(const BmnEventSelector&);
160 template<typename T>
161 T ReadBranch(const char* name);
162 template<typename T>
163 T AddHist(T h)
164 {
165 fOutputList->Add(h);
166 return h;
167 }
168 template<typename T>
169 T AddHistClone(T h, const char* postfix = "")
170 {
171 auto hClone = (T)h->Clone(Form("%s%s", h->GetName(), postfix));
172 hClone->SetTitle(Form("%s%s", h->GetTitle(), postfix));
173 fOutputList->Add(hClone);
174 return hClone;
175 }
176 void FillHistograms();
177 bool FitRunDistr(std::string histName, std::vector<double>& fitPar, float fitMin = 0, float fitMax = 0);
178 int GetPeak(BmnTrigWaveDigit* digit, float timeMin = 0, float timeMax = 1e9);
179
180 std::vector<int> GetPeaks(BmnTrigWaveDigit* digit,
181 std::vector<double> hitTimes,
182 float relTimeMin,
183 float relTimeMax,
184 float relHitTimeMin = -1,
185 float relHitTimeMax = 1);
186
187 template<typename T>
188 std::vector<int> GetNdigits(TClonesArray* array, std::vector<double> hitTimes, float relTimeMin, float relTimeMax);
189 template<typename T>
190 std::vector<float> GetSumAmp(TClonesArray* digits,
191 std::vector<double> hitTimes,
192 float relTimeMin,
193 float relTimeMax);
194 FairRootManager* ioman;
195 BmnEventHeader* fEventHeader;
196 TClonesArray* fArrTQDC_BC1S;
197 TClonesArray* fArrTQDC_BC2AS;
198 TClonesArray* fArrTQDC_VCS;
199 TClonesArray* fArrTQDC_FD;
200 TClonesArray* fArrBDdigits;
201 TClonesArray* fArrTOF400digits;
202 TClonesArray* fArrTOF700digits;
203 TClonesArray* fArrSILICONdigits;
204 TClonesArray* fArrGEMdigits;
205 BmnTrigWaveDigit* fTQDC_BC1S;
206 BmnTrigWaveDigit* fTQDC_VCS;
207 BmnTrigWaveDigit* fTQDC_BC2AS;
208 BmnTrigWaveDigit* fTQDC_FD;
210 BmnEventClass::id fEventClassOut;
211 TList* fOutputList;
212 int fRunId = 0;
213 std::string fOutputFileName = "es.root";
214 std::string fInputFileName = "all.root";
215 TFile* fInputFile;
216 TFile* fOutputFile;
217 TH2F* h2runId_eventClass;
218 TH2F* h2runId_time_SingleBC1S;
219 TH2F* h2runId_time_BC1S_k0;
220 TH2F* h2runId_time_BC1S_k1;
221 TH2F* h2runId_time_BC1S_kV0;
222 TH2F* h2runId_time_BC1S_kV1;
223 TH2F* h2runId_time_SingleVCS_BC1S;
224 TH2F* h2runId_time_SingleBC2AS_BC1S;
225 TH2F* h2runId_time_SingleFD_BC1S;
226 TH2F* h2runId_shapeShifted_SingleBC1S;
227 TH2F* h2runId_shapeShiftedBC1S_SingleVCS;
228 TH2F* h2runId_shapeShiftedBC1S_SingleBC2AS;
229 TH2F* h2runId_shapeShiftedBC1S_SingleFD;
230 TH2F* h2runId_shapeShiftedBC1S_BD;
231 TH2F* h2runId_shapeShiftedBC1S_TOF400digit;
232 TH2F* h2runId_shapeShiftedBC1S_TOF700digit;
233 TH2F* h2runId_peak_SingleBC1S;
234 TH2F* h2runId_peak_SingleVCS;
235 TH2F* h2runId_peak_SingleBC2AS;
236 TH2F* h2runId_peak_SingleFD;
237 TH2F* h2runId_NdigitsBD;
238 TH2F* h2runId_NdigitsBD_SingleBC1S;
239 TH2F* h2runId_NdigitsBD_nc;
240 TH2F* h2runId_SumAmpBD;
241 TH2F* h2runId_SumAmpBD_SingleBC1S;
242 TH2F* h2runId_SumAmpBD_nc;
243 TH2F* h2runId_NdigitsTOF400;
244 TH2F* h2runId_NdigitsTOF400_SingleBC1S;
245 TH2F* h2runId_NdigitsTOF400_nc;
246 TH2F* h2runId_NdigitsTOF700;
247 TH2F* h2runId_NdigitsTOF700_SingleBC1S;
248 TH2F* h2runId_NdigitsTOF700_nc;
249 TH2F* h2runId_peak_BC1S;
250 TH2F* h2runId_peak_VCS;
251 TH2F* h2runId_peak_BC2AS;
252 TH2F* h2runId_peak_FD;
253 TH2F* h2runId_peak_FD_nc;
254
255 THnSparse* h5runId_trigger_eventClass_dt_nTOF400digits;
256 THnSparse* h5runId_trigger_eventClass_dt_nTOF700digits;
257 THnSparse* h5runId_trigger_eventClass_dt_nSILICONdigits;
258 THnSparse* h5runId_trigger_eventClass_dt_nGEMdigits;
259
260 int fNchannelsTQDC = 450;
261 int fNhitsBC1S;
262 int fNhitsVCS;
263 int fNhitsBC2AS;
264 int fNhitsFD;
265 std::vector<double> fTimesBC1S;
266 std::vector<double> fRelTimesBC1S;
267 std::vector<double> fTimesVCS;
268 std::vector<double> fTimesBC2AS;
269 std::vector<double> fTimesFD;
270 float fSingleBC1hitTimeMean = 2050;
271 float fBC1SpeakTimeMin = 0;
272 float fBC1SpeakTimeMax = 80;
273 float fSingleVCS_BC1S_hitTimeMin = -5;
274 float fSingleVCS_BC1S_hitTimeMax = 5;
275 float fVCSpeakTimeMin = 0;
276 float fVCSpeakTimeMax = 300;
277 float fSingleVCSpeakMin = 500;
278 float fSingleBC2AS_BC1S_hitTimeMin = -8.5;
279 float fSingleBC2AS_BC1S_hitTimeMax = -7;
280 float fBC2ASpeakTimeMin = 0;
281 float fBC2ASpeakTimeMax = 300;
282 float fSingleBC2ASpeakMin = 1200;
283 float fSingleFD_BC1S_hitTimeMin = 110;
284 float fSingleFD_BC1S_hitTimeMax = 160;
285 float fFDpeakTimeMin = 0;
286 float fFDpeakTimeMax = 250;
287 float fSingleFDpeakMin = 1;
288 float fBDtimeMin = -125;
289 float fBDtimeMax = -117;
290 float fTOF400digitTimeMin = -670;
291 float fTOF400digitTimeMax = -640;
292 float fTOF700digitTimeMin = -2080;
293 float fTOF700digitTimeMax = -2030;
294 int fNsPerChannel = 8;
295 int fCentralHitIndexBC1S;
296 float fCentralHitTimeBC1S;
297 int fRunMin{6667};
298 int fRunMax{8428};
299 unsigned int fTrigAR;
300 unsigned int fNdigitsSILICON{0};
301 unsigned int fNdigitsGEM{0};
302 std::vector<int> fBC1Speaks;
303 std::vector<int> fVCSpeaks;
304 std::vector<int> fBC2ASpeaks;
305 std::vector<int> fFDpeaks;
306 std::vector<int> fNdigitsBD;
307 std::vector<float> fSumAmpBD;
308 std::vector<int> fNdigitsTOF400;
309 std::vector<int> fNdigitsTOF700;
310 std::vector<int> fBC1hitClasses;
311 bool fNoCalibrationData = false;
312 bool fWriteBC1hitInfo = true;
313 bool fFillCalibrationHists = false;
314 bool fFillPerformanceHists = false;
315 BmnBC1hitInfo fBC1hitInfo;
316 int iEvent = -1;
317
318 ClassDef(BmnEventSelector, 2);
319};
320
321#endif
int i
Definition P4_F32vec4.h:22
std::vector< double > GetTimesBC1S()
std::vector< int > GetNdigitsBD()
virtual ~BmnBC1hitInfo()
std::vector< int > GetBC2ASpeaks()
std::vector< int > GetBC1hitClasses()
std::vector< double > GetRelTimesBC1S()
std::vector< int > GetFDpeaks()
std::vector< int > GetVCSpeaks()
std::vector< int > GetNdigitsTOF400()
int GetCentralHitIndexBC1S()
std::vector< float > GetSumAmpBD()
std::vector< int > GetNdigitsTOF700()
BmnEventClass::id GetEventClass()
std::vector< int > GetBC1Speaks()
std::vector< float > GetClosestBC1hitsDt(BmnEventClass::id classId)
void FillPerformanceHists(bool fill=true)
void WriteBC1hitInfo(bool write=true)
virtual void Exec(Option_t *opt)
void SetInputFileName(const char *name)
void SetRunId(int runId)
int GetClosestHitIndex(std::vector< double > hitTimes, float refTime)
void SetOutputFileName(const char *name)
virtual InitStatus ReInit()
virtual void Finish()
virtual void SetParContainers()
void FillCalibrationHists(bool fill=true)
BmnEventClass::id Classify()
virtual InitStatus Init()
const std::map< int, std::string > names