CbmRoot
Loading...
Searching...
No Matches
CbmMcbm2018MonitorTaskTof.cxx
Go to the documentation of this file.
1/* Copyright (C) 2019-2021 Facility for Antiproton and Ion Research in Europe, Darmstadt
2 SPDX-License-Identifier: GPL-3.0-only
3 Authors: Pierre-Alain Loizeau [committer] */
4
5// -----------------------------------------------------------------------------
6// ----- -----
7// ----- CbmMcbm2018MonitorTaskTof -----
8// ----- Created 27.11.2019 by P.-A. Loizeau -----
9// ----- -----
10// -----------------------------------------------------------------------------
11
13
15#include "CbmMcbm2018TofPar.h"
16
17#include "FairParGenericSet.h"
18#include "FairRootManager.h"
19#include "FairRun.h"
20#include "FairRunOnline.h"
21#include "FairRuntimeDb.h"
22#include <Logger.h>
23
24#include "TCanvas.h"
25#include "THttpServer.h"
26#include "TList.h"
27#include "TROOT.h"
28#include "TString.h"
29#include <TFile.h>
30
31#include <chrono>
32#include <fstream>
33#include <iomanip>
34#include <iostream>
35
36#include <stdint.h>
37
40
43 , fbDebugMonitorMode(kFALSE)
44 , fbIgnoreCriticalErrors(kFALSE)
45 , fuHistoryHistoSize(3600)
46 , fsHistoFileName("data/HistosMonitor.root")
47 , fuMinTotPulser(90)
48 , fuMaxTotPulser(100)
49 , fiGdpbIndex(-1)
50 , fulTsCounter(0)
51 , fMonitorAlgo(nullptr)
52{
54}
55
57
59{
60 LOG(info) << "CbmMcbm2018MonitorTaskTof::Init";
61 LOG(info) << "Initializing eTOF 2019 Monitor task";
62
63 return kTRUE;
64}
65
67{
68 LOG(info) << "Setting parameter containers for " << GetName();
69
70 TList* parCList = fMonitorAlgo->GetParList();
71
72 for (Int_t iparC = 0; iparC < parCList->GetEntries(); ++iparC) {
73 FairParGenericSet* tempObj = (FairParGenericSet*) (parCList->At(iparC));
74 parCList->Remove(tempObj);
75
76 std::string sParamName {tempObj->GetName()};
77 FairParGenericSet* newObj =
78 dynamic_cast<FairParGenericSet*>(FairRun::Instance()->GetRuntimeDb()->getContainer(sParamName.data()));
79
80 if (nullptr == newObj) {
81 LOG(error) << "Failed to obtain parameter container " << sParamName << ", for parameter index " << iparC;
82 return;
83 } // if( nullptr == newObj )
84
85 parCList->AddAt(newObj, iparC);
86 // delete tempObj;
87 } // for( Int_t iparC = 0; iparC < parCList->GetEntries(); ++iparC )
88}
89
91{
92 LOG(info) << "Init parameter containers for " << GetName();
93
95 CbmMcbm2018TofPar* pUnpackPar =
96 dynamic_cast<CbmMcbm2018TofPar*>(FairRun::Instance()->GetRuntimeDb()->getContainer("CbmMcbm2018TofPar"));
97 if (nullptr == pUnpackPar) {
98 LOG(error) << "Failed to obtain parameter container CbmMcbm2018TofPar";
99 return kFALSE;
100 } // if( nullptr == pUnpackPar )
101
108
109 Bool_t initOK = fMonitorAlgo->InitContainers();
110
113 initOK &= fMonitorAlgo->CreateHistograms();
114
116 std::vector<std::pair<TNamed*, std::string>> vHistos = fMonitorAlgo->GetHistoVector();
118 std::vector<std::pair<TCanvas*, std::string>> vCanvases = fMonitorAlgo->GetCanvasVector();
119
121 THttpServer* server = FairRunOnline::Instance()->GetHttpServer();
122 if (nullptr != server) {
123 for (UInt_t uHisto = 0; uHisto < vHistos.size(); ++uHisto) {
124 // LOG(info) << "Registering " << vHistos[ uHisto ].first->GetName()
125 // << " in " << vHistos[ uHisto ].second.data();
126 server->Register(Form("/%s", vHistos[uHisto].second.data()), vHistos[uHisto].first);
127 } // for( UInt_t uHisto = 0; uHisto < vHistos.size(); ++uHisto )
128
129 for (UInt_t uCanv = 0; uCanv < vCanvases.size(); ++uCanv) {
130 // LOG(info) << "Registering " << vCanvases[ uCanv ].first->GetName()
131 // << " in " << vCanvases[ uCanv ].second.data();
132 server->Register(Form("/%s", vCanvases[uCanv].second.data()),
133 gROOT->FindObject((vCanvases[uCanv].first)->GetName()));
134 } // for( UInt_t uCanv = 0; uCanv < vCanvases.size(); ++uCanv )
135
136 server->RegisterCommand("/Reset_Moni_Hist", "bMcbm2018MonitorTaskTofResetHistos=kTRUE");
137 server->RegisterCommand("/Save_Moni_Hist", "bMcbm2018MonitorTaskTofSaveHistos=kTRUE");
138
139 server->Restrict("/Reset_Moni_Hist", "allow=admin");
140 } // if( nullptr != server )
141
142 return initOK;
143}
144
146{
147 LOG(info) << "ReInit parameter containers for " << GetName();
148 Bool_t initOK = fMonitorAlgo->ReInitContainers();
149
150 return initOK;
151}
152
153void CbmMcbm2018MonitorTaskTof::AddMsComponentToList(size_t component, UShort_t usDetectorId)
154{
155 fMonitorAlgo->AddMsComponentToList(component, usDetectorId);
156}
157
158Bool_t CbmMcbm2018MonitorTaskTof::DoUnpack(const fles::Timeslice& ts, size_t /*component*/)
159{
161 LOG(info) << "Reset Monitor histos ";
164 } // if( bMcbm2018MonitorTaskTofResetHistos )
165
167 LOG(info) << "Save Monitor histos & canvases";
170 } // if( bMcbm2018MonitorTaskTofSaveHistos )
171
172 if (kFALSE == fMonitorAlgo->ProcessTs(ts)) {
173 LOG(error) << "Failed processing TS " << ts.index() << " in unpacker algorithm class";
174 return kTRUE;
175 } // if( kFALSE == fMonitorAlgo->ProcessTs( ts ) )
176
178 std::vector<CbmTofDigi> vDigi = fMonitorAlgo->GetVector();
180
181 if (0 == fulTsCounter % 10000) LOG(info) << "Processed " << fulTsCounter << "TS";
182 fulTsCounter++;
183
184 return kTRUE;
185}
186
188
190
192
194{
196 std::vector<std::pair<TNamed*, std::string>> vHistos = fMonitorAlgo->GetHistoVector();
197 std::vector<std::pair<TCanvas*, std::string>> vCanvas = fMonitorAlgo->GetCanvasVector();
198
200 TFile* oldFile = gFile;
201 TDirectory* oldDir = gDirectory;
202
203 TFile* histoFile = nullptr;
204
205 // open separate histo file in recreate mode
206 histoFile = new TFile(fsHistoFileName, "RECREATE");
207
208 if (nullptr == histoFile) return kFALSE;
209
211 for (UInt_t uHisto = 0; uHisto < vHistos.size(); ++uHisto) {
213 TString sFolder = vHistos[uHisto].second.data();
214 if (nullptr == gDirectory->Get(sFolder)) gDirectory->mkdir(sFolder);
215 gDirectory->cd(sFolder);
216
218 vHistos[uHisto].first->Write();
219
220 histoFile->cd();
221 } // for( UInt_t uHisto = 0; uHisto < vHistos.size(); ++uHisto )
222
223 for (UInt_t uCanvas = 0; uCanvas < vCanvas.size(); ++uCanvas) {
225 TString sFolder = vCanvas[uCanvas].second.data();
226 if (nullptr == gDirectory->Get(sFolder)) gDirectory->mkdir(sFolder);
227 gDirectory->cd(sFolder);
228
230 vCanvas[uCanvas].first->Write();
231
232 histoFile->cd();
233 } // for( UInt_t uHisto = 0; uHisto < vHistos.size(); ++uHisto )
234
236 gFile = oldFile;
237 gDirectory = oldDir;
238
239 histoFile->Close();
240
241 return kTRUE;
242}
ClassImp(CbmConverterManager)
Bool_t bMcbm2018MonitorTaskTofSaveHistos
Bool_t bMcbm2018MonitorTaskTofResetHistos
void SetHistoryHistoSize(UInt_t inHistorySizeSec=1800)
void SetPulserTotLimits(UInt_t uMin, UInt_t uMax)
void AddMsComponentToList(size_t component, UShort_t usDetectorId)
Bool_t ResetHistograms(Bool_t bResetTime=kTRUE)
void SetIgnoreCriticalErrors(Bool_t bFlagIn=kTRUE)
Bool_t ProcessTs(const fles::Timeslice &ts)
void SetDebugMonitorMode(Bool_t bFlagIn=kTRUE)
Bool_t fbIgnoreCriticalErrors
Switch ON the filling of a additional set of histograms.
Bool_t fbDebugMonitorMode
Control flags.
UInt_t fuHistoryHistoSize
If ON not printout at all for critical errors.
void SetIgnoreOverlapMs(Bool_t bFlagIn=kTRUE)
uint64_t fulTsCounter
Statistics & first TS rejection.
virtual Bool_t DoUnpack(const fles::Timeslice &ts, size_t component)
CbmMcbm2018MonitorAlgoTof * fMonitorAlgo
Processing algo.
void AddMsComponentToList(size_t component, UShort_t usDetectorId)
Temp until we change from CbmMcbmUnpack to something else.
std::vector< std::pair< TNamed *, std::string > > GetHistoVector()
std::vector< T > & GetVector()
void SetIgnoreOverlapMs(Bool_t bFlagIn=kTRUE)
Control flags.
std::vector< std::pair< TCanvas *, std::string > > GetCanvasVector()
void ClearVector()
For unpacker algos.