CbmRoot
Loading...
Searching...
No Matches
CbmMcbm2019CheckTimingPairs.h
Go to the documentation of this file.
1/* Copyright (C) 2020-2021 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
2 SPDX-License-Identifier: GPL-3.0-only
3 Authors: Pierre-Alain Loizeau [committer] */
4
5#ifndef CBMMCBM2019CHECKTIMINGPAIRS_H
6#define CBMMCBM2019CHECKTIMINGPAIRS_H
7
9#include "CbmDefs.h"
10#include "CbmMuchBeamTimeDigi.h"
11#include "CbmPsdDigi.h"
12#include "CbmRichDigi.h"
13#include "CbmStsDigi.h"
14#include "CbmTofDigi.h"
15#include "CbmTrdDigi.h"
16
17#include "TimesliceMetaData.h"
18
20#include "FairTask.h"
21
23#include "TString.h"
24
26#include <vector>
27
28class TClonesArray;
29class TH1;
30class TH2;
31class TProfile;
32class CbmDigiManager;
33
34class CbmMcbm2019CheckTimingPairs : public FairTask {
35public:
37
40
42 // CbmMcbm2019CheckTimingPairs(Int_t verbose);
43
44
47
48
50 virtual InitStatus Init();
51
53 virtual InitStatus ReInit();
54
55
57 virtual void Exec(Option_t*);
58
60 virtual void SetParContainers();
61
63 virtual void Finish();
64
65 void SetStsOffsetSearchRange(Double_t val = 1000) { fdStsTimeWin = val; }
66
67 void SetMuchOffsetSearchRange(Double_t val = 1000) { fdMuchTimeWin = val; }
68
69 void SetTrdOffsetSearchRange(Double_t val = 1000) { fdTrdTimeWin = val; }
70
71 void SetTofOffsetSearchRange(Double_t val = 1000) { fdTofTimeWin = val; }
72
73 void SetRichOffsetSearchRange(Double_t val = 1000) { fdRichTimeWin = val; }
74
75 void SetPsdOffsetSearchRange(Double_t val = 1000) { fdPsdTimeWin = val; }
76
77 inline void SetBmonPulserTotLimits(UInt_t uMin, UInt_t uMax)
78 {
79 fuMinTotPulserBmon = uMin;
80 fuMaxTotPulserBmon = uMax;
81 }
82 inline void SetStsPulserAdcLimits(UInt_t uMin, UInt_t uMax)
83 {
84 fuMinAdcPulserSts = uMin;
85 fuMaxAdcPulserSts = uMax;
86 }
87 inline void SetMuchPulserAdcLimits(UInt_t uMin, UInt_t uMax)
88 {
89 fuMinAdcPulserMuch = uMin;
90 fuMaxAdcPulserMuch = uMax;
91 }
92 inline void SetTrdPulserChargeLimits(UInt_t uMin, UInt_t uMax)
93 {
96 }
97 inline void SetTofPulserTotLimits(UInt_t uMin, UInt_t uMax)
98 {
99 fuMinTotPulserTof = uMin;
100 fuMaxTotPulserTof = uMax;
101 }
102 inline void SetRichPulserTotLimits(UInt_t uMin, UInt_t uMax)
103 {
104 fuMinTotPulserRich = uMin;
105 fuMaxTotPulserRich = uMax;
106 }
107 inline void SetPsdPulserAdcLimits(UInt_t uMin, UInt_t uMax)
108 {
109 fuMinAdcPulserPsd = uMin;
110 fuMaxAdcPulserPsd = uMax;
111 }
112
113 inline void SetOutFilename(TString sNameIn) { fOutFileName = sNameIn; }
114
115 inline void SetStsAddress(UInt_t uAddress) { fuStsAddress = uAddress; }
116 inline void SetMuchAsic(UInt_t uAsic) { fuMuchAsic = uAsic; }
117 inline void SetMuchChanRange(UInt_t uFirstChan, UInt_t uLastChan = kuNbChanSMX)
118 {
119 fuMuchFirstCha = uFirstChan;
120 fuMuchLastChan = uLastChan;
121 }
122 inline void SetTrdAddress(UInt_t uAddress) { fuTrdAddress = uAddress; }
123 inline void SetPsdAddress(UInt_t uAddress) { fuPsdAddress = uAddress; }
124
125private:
126 void CreateHistos();
127 void WriteHistos();
128
129 template<class Digi>
130 UInt_t FillCorrBuffer(Double_t dTimeBmon, UInt_t uIndexStart, Double_t dWinStartTime, Double_t dWinStopTime,
131 std::vector<std::vector<Digi>>& vDigi, ECbmModuleId iDetId = ECbmModuleId::kLastModule);
132 template<class DigiA>
133 void FillHistosInter(UInt_t uIndexBmon, UInt_t uIndexA, UInt_t uIndexB, std::vector<DigiA>& vCorrDigA,
134 UInt_t uHistoIdx);
135 template<class DigiA, class DigiB>
136 void FillHistos(UInt_t uIndexBmon, UInt_t uIndexA, UInt_t uIndexB, std::vector<DigiA>& vCorrDigA,
137 std::vector<DigiB>& vCorrDigB, UInt_t uHistoIdx);
138
141 const std::vector<CbmTofDigi>* fBmonDigiVector = nullptr;
142 TClonesArray* fBmonDigiArray = nullptr;
143 TClonesArray* fTimeSliceMetaDataArray = nullptr;
145
147 static const UInt_t kuNbChanSMX = 128;
148 static const UInt_t kuMaxNbStsDpbs = 2;
149 static const UInt_t kuMaxNbMuchDpbs = 6;
150 static const UInt_t kuMaxNbMuchAsics = 36;
151 static const UInt_t kuDefaultAddress = 0xFFFFFFFF;
152 static const UInt_t kuMaxChannelSts = 3000;
153 static const UInt_t kuNbBinsDefault = 2000;
154 static constexpr Double_t kdClockCycle = 3.125;
155 static constexpr Double_t kdDefaultTimeWin = kdClockCycle * kuNbBinsDefault / 2;
156
158 std::vector<std::string> fvsDetectors = {"STS", "MUCH", "TRD", "TOF", "RICH", "PSD"};
160
162 Double_t fPrevTimeBmon = 0.;
163 std::vector<Double_t> fvPrevTimeDet = std::vector<Double_t>(fuNbDetectors, 0.0);
164
167 std::vector<UInt_t> fvuPrevBmonFirstDigiDet = std::vector<UInt_t>(fuNbDetectors, 0);
168
170 std::vector<CbmTofDigi> fvDigisBmon = {};
171 std::vector<std::vector<CbmStsDigi>> fvDigisSts = {};
172 std::vector<std::vector<CbmMuchBeamTimeDigi>> fvDigisMuch = {};
173 std::vector<std::vector<CbmTrdDigi>> fvDigisTrd = {};
174 std::vector<std::vector<CbmTofDigi>> fvDigisTof = {};
175 std::vector<std::vector<CbmRichDigi>> fvDigisRich = {};
176 std::vector<std::vector<CbmPsdDigi>> fvDigisPsd = {};
177
187
190 UInt_t fuMinTotPulserBmon = 182;
191 UInt_t fuMaxTotPulserBmon = 190;
192 UInt_t fuMinAdcPulserSts = 90;
193 UInt_t fuMaxAdcPulserSts = 100;
196 UInt_t fuMinChargePulserTrd = 700000;
198 UInt_t fuMinTotPulserTof = 182;
199 UInt_t fuMaxTotPulserTof = 190;
200 UInt_t fuMinTotPulserRich = 700000;
202 UInt_t fuMinAdcPulserPsd = 700000;
203 UInt_t fuMaxAdcPulserPsd = 0;
213
214 //
216
223
225
226 std::vector<TH1*> fhDtADtB = {};
227
228 TString fOutFileName {"data/HistosTimingPairs.root"};
229
231};
232
233#endif // CBMMCBM2019CHECKTIMINGPAIRS_H
ECbmModuleId
Definition CbmDefs.h:39
@ kLastModule
For loops over all modules.
int Int_t
CbmDigiManager.
const std::vector< CbmTofDigi > * fBmonDigiVector
std::vector< std::vector< CbmPsdDigi > > fvDigisPsd
std::vector< std::vector< CbmTofDigi > > fvDigisTof
void SetTrdPulserChargeLimits(UInt_t uMin, UInt_t uMax)
Double_t fPrevTimeBmon
Variables to store the previous digi time.
void SetTofPulserTotLimits(UInt_t uMin, UInt_t uMax)
void SetTofOffsetSearchRange(Double_t val=1000)
CbmMcbm2019CheckTimingPairs operator=(const CbmMcbm2019CheckTimingPairs &)=delete
void SetRichPulserTotLimits(UInt_t uMin, UInt_t uMax)
ClassDef(CbmMcbm2019CheckTimingPairs, 1)
std::vector< std::vector< CbmTrdDigi > > fvDigisTrd
void FillHistos(UInt_t uIndexBmon, UInt_t uIndexA, UInt_t uIndexB, std::vector< DigiA > &vCorrDigA, std::vector< DigiB > &vCorrDigB, UInt_t uHistoIdx)
static const UInt_t kuNbChanSMX
Constants.
void SetStsOffsetSearchRange(Double_t val=1000)
std::vector< std::vector< CbmStsDigi > > fvDigisSts
void SetStsPulserAdcLimits(UInt_t uMin, UInt_t uMax)
UInt_t fuNbDigisWithCoincBmon
Variable to store counts of Bmon with at least one coincidence.
UInt_t fuNbCoincDigisSts
Variable to store counts of Bmon with at least one coincidence.
void SetMuchOffsetSearchRange(Double_t val=1000)
std::vector< CbmTofDigi > fvDigisBmon
Variable to store correlated Digis.
std::vector< std::string > fvsDetectors
List of detectors.
void SetBmonPulserTotLimits(UInt_t uMin, UInt_t uMax)
std::vector< std::vector< CbmRichDigi > > fvDigisRich
void SetPsdPulserAdcLimits(UInt_t uMin, UInt_t uMax)
void SetMuchChanRange(UInt_t uFirstChan, UInt_t uLastChan=kuNbChanSMX)
void SetRichOffsetSearchRange(Double_t val=1000)
std::vector< std::vector< CbmMuchBeamTimeDigi > > fvDigisMuch
UInt_t FillCorrBuffer(Double_t dTimeBmon, UInt_t uIndexStart, Double_t dWinStartTime, Double_t dWinStopTime, std::vector< std::vector< Digi > > &vDigi, ECbmModuleId iDetId=ECbmModuleId::kLastModule)
void FillHistosInter(UInt_t uIndexBmon, UInt_t uIndexA, UInt_t uIndexB, std::vector< DigiA > &vCorrDigA, UInt_t uHistoIdx)
void SetMuchPulserAdcLimits(UInt_t uMin, UInt_t uMax)
static constexpr Double_t kdDefaultTimeWin
void SetPsdOffsetSearchRange(Double_t val=1000)
void SetTrdOffsetSearchRange(Double_t val=1000)
CbmMcbm2019CheckTimingPairs(const CbmMcbm2019CheckTimingPairs &)=delete