1#ifndef BMNPILEUPREDUCTIONTASK_H
2#define BMNPILEUPREDUCTIONTASK_H
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"},
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);
74 for (
int i = fCentralHitIndexBC1S + 1;
i < int(fTimesBC1S.size());
i++) {
75 if (fBC1hitClasses.at(
i) == classId) {
76 dt.at(1) = fRelTimesBC1S.at(
i);
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;
140 virtual void Exec(Option_t* opt);
161 T ReadBranch(
const char* name);
169 T AddHistClone(T h,
const char* postfix =
"")
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);
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);
181 std::vector<double> hitTimes,
184 float relHitTimeMin = -1,
185 float relHitTimeMax = 1);
188 std::vector<int> GetNdigits(TClonesArray* array, std::vector<double> hitTimes,
float relTimeMin,
float relTimeMax);
190 std::vector<float> GetSumAmp(TClonesArray* digits,
191 std::vector<double> hitTimes,
194 FairRootManager* ioman;
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;
213 std::string fOutputFileName =
"es.root";
214 std::string fInputFileName =
"all.root";
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;
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;
260 int fNchannelsTQDC = 450;
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;
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;
std::vector< double > GetTimesBC1S()
std::vector< int > GetNdigitsBD()
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)
int GetClosestHitIndex(std::vector< double > hitTimes, float refTime)
void SetOutputFileName(const char *name)
virtual InitStatus ReInit()
virtual void SetParContainers()
void FillCalibrationHists(bool fill=true)
BmnEventClass::id Classify()
virtual InitStatus Init()
const std::map< int, std::string > names