CbmRoot
Loading...
Searching...
No Matches
CbmDeviceMcbmMonitorPulser.h
Go to the documentation of this file.
1/* Copyright (C) 2020 Facility for Antiproton and Ion Research in Europe, Darmstadt
2 SPDX-License-Identifier: GPL-3.0-only
3 Authors: Pierre-Alain Loizeau [committer] */
4
12#ifndef CBMDEVICEMCBMMONITORPULSER_H_
13#define CBMDEVICEMCBMMONITORPULSER_H_
14
15#include "CbmMqTMessage.h"
16#include "CbmMuchBeamTimeDigi.h"
17#include "CbmPsdDigi.h"
18#include "CbmRichDigi.h"
19#include "CbmStsDigi.h"
20#include "CbmTofDigi.h"
21#include "CbmTrdDigi.h"
22
23#include "FairMQDevice.h"
24
25#include "Rtypes.h"
26#include "TObjArray.h"
27
28#include <chrono>
29#include <map>
30#include <vector>
31
32class TH1;
33class TH2;
34class TProfile;
35class TList;
36//class CbmMcbm2018MonitorAlgoTof;
38
39class CbmDeviceMcbmMonitorPulser : public FairMQDevice {
40public:
43
44protected:
45 virtual void InitTask();
46 bool HandleData(FairMQParts&, int);
47
48private:
50 /*********************** SHOULD GO IN ALGO ****************************/
51 static const UInt_t kuNbChanSMX = 128;
52 static const UInt_t kuMaxNbStsDpbs = 2;
53 static const UInt_t kuMaxNbMuchDpbs = 6;
54 static const UInt_t kuMaxNbMuchAsics = 36;
55 static const UInt_t kuDefaultAddress = 0xFFFFFFFF;
56 static const UInt_t kuMaxChannelSts = 3000;
57 /*********************** SHOULD GO IN ALGO ****************************/
58
60 Bool_t fbDebugMonitorMode = kFALSE;
61 Bool_t fbIgnoreCriticalErrors = kTRUE;
62 Bool_t fbComponentsAddedToList = kFALSE;
63
65 std::string fsChannelNameDataInput = "unpts_0";
66 std::string fsChannelNameCommands = "commands";
67 std::string fsChannelNameHistosInput = "histogram-in";
68 std::string fsChannelNameHistosConfig = "histo-conf";
69 std::string fsChannelNameCanvasConfig = "canvas-conf";
70 uint32_t fuHistoryHistoSize = 3600;
71 uint32_t fuMinTotPulser = 185;
72 uint32_t fuMaxTotPulser = 195;
73 uint32_t fuPublishFreqTs = 100;
74 double_t fdMinPublishTime = 0.5;
75 double_t fdMaxPublishTime = 5.0;
76
78 std::vector<std::string> fsAllowedChannels = {fsChannelNameDataInput};
79
81 /*
82 TList* fParCList = nullptr;
83*/
84
86 uint64_t fulNumMessages = 0;
87 uint64_t fulTsCounter = 0;
88 std::chrono::system_clock::time_point fLastPublishTime = std::chrono::system_clock::now();
89
94 std::vector<CbmTofDigi> fvDigiBmon = {};
95 std::vector<CbmStsDigi> fvDigiSts = {};
96 std::vector<CbmMuchBeamTimeDigi> fvDigiMuch = {};
97 std::vector<CbmTrdDigi> fvDigiTrd = {};
98 std::vector<CbmTofDigi> fvDigiTof = {};
99 std::vector<CbmRichDigi> fvDigiRich = {};
100 std::vector<CbmPsdDigi> fvDigiPsd = {};
101
103 // CbmMcbm2018MonitorAlgoTof * fMonitorAlgo;
104
106 TObjArray fArrayHisto = {};
108 std::vector<std::pair<std::string, std::string>> fvpsHistosFolder = {};
112 std::vector<std::pair<std::string, std::string>> fvpsCanvasConfig = {};
113
114 bool IsChannelNameAllowed(std::string channelName);
115 Bool_t InitContainers();
116 void Finish();
117 bool SendHistograms();
118
119 /*********************** SHOULD GO IN ALGO ****************************/
121
122 template<class Digi>
123 Int_t FillSystemOffsetHistos(TH1* histo, TH2* histoEvo, TH2* histoEvoLong, TProfile* profMeanEvo, TH2* histoAFCK,
124 const Double_t T0Time, const Int_t offsetRange, Int_t iStartDigi,
126
127 Int_t CalcNrBins(Int_t);
129
131 Double_t fPrevTimeBmon = 0.;
132 Double_t fPrevTimeSts = 0.;
133 Double_t fPrevTimeMuch = 0.;
134 Double_t fPrevTimeTrd = 0.;
135 Double_t fPrevTimeTof = 0.;
136 Double_t fPrevTimeRich = 0.;
137 Double_t fPrevTimePsd = 0.;
138
147
150 UInt_t fuMinTotPulserBmon = 182;
151 UInt_t fuMaxTotPulserBmon = 190;
152 UInt_t fuMinAdcPulserSts = 90;
153 UInt_t fuMaxAdcPulserSts = 100;
157 UInt_t fuMaxChargePulserTrd = 70000;
158 UInt_t fuMinTotPulserTof = 182;
159 UInt_t fuMaxTotPulserTof = 190;
161 UInt_t fuMaxTotPulserRich = 105;
162 UInt_t fuMinAdcPulserPsd = 90;
163 UInt_t fuMaxAdcPulserPsd = 100;
173
174 //
175 Int_t fNrTs = 0;
176
177 Int_t fOffsetRange = 1000;
178 Int_t fStsOffsetRange = 1000;
179 Int_t fMuchOffsetRange = 1000;
180 Int_t fTrdOffsetRange = 1000;
181 Int_t fTofOffsetRange = 1000;
182 Int_t fRichOffsetRange = 1000;
183 Int_t fPsdOffsetRange = 1000;
184
185 Int_t fBinWidth = 1;
186
187 TH1* fBmonStsDiff = nullptr;
188 TH1* fBmonMuchDiff = nullptr;
189 TH1* fBmonTrdDiff = nullptr;
190 TH1* fBmonTofDiff = nullptr;
191 TH1* fBmonRichDiff = nullptr;
192 TH1* fBmonPsdDiff = nullptr;
193 TH2* fBmonPsdDiffCharge = nullptr;
194
195 TH2* fBmonStsDiffEvo = nullptr;
196 TH2* fBmonMuchDiffEvo = nullptr;
197 TH2* fBmonTrdDiffEvo = nullptr;
198 TH2* fBmonTofDiffEvo = nullptr;
199 TH2* fBmonRichDiffEvo = nullptr;
200 TH2* fBmonPsdDiffEvo = nullptr;
201
202 TH2* fBmonStsDiffEvoLong = nullptr;
203 TH2* fBmonMuchDiffEvoLong = nullptr;
204 TH2* fBmonTrdDiffEvoLong = nullptr;
205 TH2* fBmonTofDiffEvoLong = nullptr;
206 TH2* fBmonRichDiffEvoLong = nullptr;
207 TH2* fBmonPsdDiffEvoLong = nullptr;
208
209 Double_t fdStartTime = -1;
210 TProfile* fBmonStsMeanEvo = nullptr;
211 TProfile* fBmonMuchMeanEvo = nullptr;
212 TProfile* fBmonTrdMeanEvo = nullptr;
213 TProfile* fBmonTofMeanEvo = nullptr;
214 TProfile* fBmonRichMeanEvo = nullptr;
215 TProfile* fBmonPsdMeanEvo = nullptr;
216
217 TH1* fBmonBmonDiff = nullptr;
218 TH1* fStsStsDiff = nullptr;
219 TH1* fMuchMuchDiff = nullptr;
220 TH1* fTrdTrdDiff = nullptr;
221 TH1* fTofTofDiff = nullptr;
222 TH1* fRichRichDiff = nullptr;
223 TH1* fPsdPsdDiff = nullptr;
224
225 TH2* fBmonStsNb = nullptr;
226 TH2* fBmonMuchNb = nullptr;
227 TH2* fBmonTrdNb = nullptr;
228 TH2* fBmonTofNb = nullptr;
229 TH2* fBmonRichNb = nullptr;
230 TH2* fBmonPsdNb = nullptr;
231
232 Int_t fiBmonNb = 0;
233 Int_t fiStsNb = 0;
234 Int_t fiMuchNb = 0;
235 Int_t fiTrdNb = 0;
236 Int_t fiTofNb = 0;
237 Int_t fiRichNb = 0;
238 Int_t fiPsdNb = 0;
239
240 TH1* fBmonAddress = nullptr;
241 TH1* fBmonChannel = nullptr;
242
243 TH2* fBmonStsDpbDiff = nullptr;
246
247 TH2* fBmonMuchRocDiff = nullptr;
248 TH2* fBmonMuchAsicDiff = nullptr;
250
251 TH2* fDigisPerAsicEvo = nullptr;
254 TH2* fSameChanDigisDistEvo = nullptr;
255
257
258 TH2* fDigiTimeEvoBmon = nullptr;
259 TH2* fDigiTimeEvoSts = nullptr;
260 TH2* fDigiTimeEvoMuch = nullptr;
261 TH2* fDigiTimeEvoTof = nullptr;
262 /*********************** SHOULD GO IN ALGO ****************************/
263};
264
265#endif /* CBMDEVICEMCBMMONITORPULSER_H_ */
ECbmModuleId
Definition CbmDefs.h:39
@ kLastModule
For loops over all modules.
Double_t fdLastMuchDigiPulser[kuMaxNbMuchAsics][kuNbChanSMX]
std::chrono::system_clock::time_point fLastPublishTime
Int_t FillSystemOffsetHistos(TH1 *histo, TH2 *histoEvo, TH2 *histoEvoLong, TProfile *profMeanEvo, TH2 *histoAFCK, const Double_t T0Time, const Int_t offsetRange, Int_t iStartDigi, ECbmModuleId iDetId=ECbmModuleId::kLastModule)
std::vector< CbmStsDigi > fvDigiSts
std::vector< std::string > fsAllowedChannels
List of MQ channels names.
std::vector< CbmRichDigi > fvDigiRich
std::vector< std::pair< std::string, std::string > > fvpsHistosFolder
Vector of string pairs with ( HistoName, FolderPath ) to send to the histogram server.
Bool_t fbComponentsAddedToList
If ON not printout at all for critical errors.
uint64_t fulNumMessages
Parameters management.
Bool_t fbIgnoreCriticalErrors
Switch ON the filling of a additional set of histograms.
TH2 * fBmonMuchAsicDiffEvo[kuMaxNbMuchAsics]
std::vector< CbmTrdDigi > fvDigiTrd
std::vector< CbmTofDigi > fvDigiTof
UInt_t fuStsAddress
Channel selection.
std::vector< CbmMuchBeamTimeDigi > fvDigiMuch
std::vector< std::pair< std::string, std::string > > fvpsCanvasConfig
bool IsChannelNameAllowed(std::string channelName)
Double_t fPrevTimeBmon
Variables to store the previous digi time.
std::string fsChannelNameDataInput
User settings parameters.
std::vector< CbmTofDigi > fvDigiBmon
Digis storage.
std::vector< CbmPsdDigi > fvDigiPsd
Double_t fdLastMuchDigi[kuMaxNbMuchAsics][kuNbChanSMX]
static const UInt_t kuNbChanSMX
Constants.
TObjArray fArrayHisto
Processing algo.