CbmRoot
Loading...
Searching...
No Matches
CbmMcbm2018MonitorTaskBmon.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// ----- CbmMcbm2018MonitorTaskBmon -----
8// ----- Created 10.02.2019 by P.-A. Loizeau -----
9// ----- -----
10// -----------------------------------------------------------------------------
11
13
15#include "CbmMcbm2018TofPar.h"
16#include "FairParGenericSet.h"
17#include "FairRootManager.h"
18#include "FairRun.h"
19#include "FairRunOnline.h"
20#include "FairRuntimeDb.h"
21#include "TCanvas.h"
22#include "THttpServer.h"
23#include "TList.h"
24#include "TROOT.h"
25#include "TString.h"
26
27#include <Logger.h>
28
29#include <TFile.h>
30
31#include <chrono>
32#include <cstdint>
33#include <fstream>
34#include <iomanip>
35#include <iostream>
36
38
55
57
59{
60 LOG(info) << "CbmMcbm2018MonitorTaskBmon::Init";
61 LOG(info) << "Initializing mCBM Bmon 2019 Monitor";
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 /*
102 fbMonitorMode = pUnpackPar->GetMonitorMode();
103 LOG(info) << "Monitor mode: "
104 << ( fbMonitorMode ? "ON" : "OFF" );
105
106 fbDebugMonitorMode = pUnpackPar->GetDebugMonitorMode();
107 LOG(info) << "Debug Monitor mode: "
108 << ( fbDebugMonitorMode ? "ON" : "OFF" );
109*/
110 Bool_t initOK = fMonitorAlgo->InitContainers();
111
113 fMonitorAlgo->SetMonitorMode(fbMonitorMode);
114 fMonitorAlgo->SetHistoryHistoSize(fuHistoryHistoSize);
115 fMonitorAlgo->SetPulserTotLimits(fuMinTotPulser, fuMaxTotPulser);
116 fMonitorAlgo->SetSpillThreshold(fuOffSpillCountLimit);
117 fMonitorAlgo->SetSpillThresholdNonPulser(fuOffSpillCountLimitNonPulser);
118 fMonitorAlgo->SetSpillCheckInterval(fdSpillCheckInterval);
119
122 initOK &= fMonitorAlgo->CreateHistograms();
123
125 std::vector<std::pair<TNamed*, std::string>> vHistos = fMonitorAlgo->GetHistoVector();
127 std::vector<std::pair<TCanvas*, std::string>> vCanvases = fMonitorAlgo->GetCanvasVector();
128
130 THttpServer* server = FairRunOnline::Instance()->GetHttpServer();
131 if (nullptr != server) {
132 for (UInt_t uHisto = 0; uHisto < vHistos.size(); ++uHisto) {
133 // LOG(info) << "Registering " << vHistos[ uHisto ].first->GetName()
134 // << " in " << vHistos[ uHisto ].second.data();
135 server->Register(Form("/%s", vHistos[uHisto].second.data()), vHistos[uHisto].first);
136 } // for( UInt_t uHisto = 0; uHisto < vHistos.size(); ++uHisto )
137
138 for (UInt_t uCanv = 0; uCanv < vCanvases.size(); ++uCanv) {
139 // LOG(info) << "Registering " << vCanvases[ uCanv ].first->GetName()
140 // << " in " << vCanvases[ uCanv ].second.data();
141 server->Register(Form("/%s", vCanvases[uCanv].second.data()),
142 gROOT->FindObject((vCanvases[uCanv].first)->GetName()));
143 } // for( UInt_t uCanv = 0; uCanv < vCanvases.size(); ++uCanv )
144
145 server->RegisterCommand("/Reset_MoniBmon_Hist", "bMcbm2018MonitorTaskBmonResetHistos=kTRUE");
146 server->Restrict("/Reset_MoniBmon_Hist", "allow=admin");
147 } // if( nullptr != server )
148
149 return initOK;
150}
151
153{
154 LOG(info) << "ReInit parameter containers for " << GetName();
155 Bool_t initOK = fMonitorAlgo->ReInitContainers();
156
157 return initOK;
158}
159
160void CbmMcbm2018MonitorTaskBmon::AddMsComponentToList(size_t component, UShort_t usDetectorId)
161{
162 fMonitorAlgo->AddMsComponentToList(component, usDetectorId);
163}
164
165Bool_t CbmMcbm2018MonitorTaskBmon::DoUnpack(const fles::Timeslice& ts, size_t /*component*/)
166{
168 LOG(info) << "Reset Bmon Monitor histos ";
169 fMonitorAlgo->ResetHistograms();
171 } // if( fbMonitorMode && bMcbm2018MonitorTaskBmonResetHistos )
172
173 if (kFALSE == fMonitorAlgo->ProcessTs(ts)) {
174 LOG(error) << "Failed processing TS " << ts.index() << " in unpacker algorithm class";
175 return kTRUE;
176 } // if( kFALSE == fMonitorAlgo->ProcessTs( ts ) )
177
179 std::vector<CbmTofDigi> vDigi = fMonitorAlgo->GetVector();
180 fMonitorAlgo->ClearVector();
181
182 if (0 == fulTsCounter % 10000) LOG(info) << "Processed " << fulTsCounter << "TS";
183 fulTsCounter++;
184
185 return kTRUE;
186}
187
189
191{
193 std::vector<std::pair<TNamed*, std::string>> vHistos = fMonitorAlgo->GetHistoVector();
194
196 TFile* oldFile = gFile;
197 TDirectory* oldDir = gDirectory;
198
199 TFile* histoFile = nullptr;
200
201 // open separate histo file in recreate mode
202 histoFile = new TFile(fsHistoFileName, "RECREATE");
203 histoFile->cd();
204
206 for (UInt_t uHisto = 0; uHisto < vHistos.size(); ++uHisto) {
208 TString sFolder = vHistos[uHisto].second.data();
209 if (nullptr == gDirectory->Get(sFolder)) gDirectory->mkdir(sFolder);
210 gDirectory->cd(sFolder);
211
213 vHistos[uHisto].first->Write();
214
215 histoFile->cd();
216 } // for( UInt_t uHisto = 0; uHisto < vHistos.size(); ++uHisto )
217
219 gFile = oldFile;
220 gDirectory = oldDir;
221
222 histoFile->Close();
223}
224
225void CbmMcbm2018MonitorTaskBmon::SetIgnoreOverlapMs(Bool_t bFlagIn) { fMonitorAlgo->SetIgnoreOverlapMs(bFlagIn); }
226
227void CbmMcbm2018MonitorTaskBmon::SetChannelMap(UInt_t uChan0, UInt_t uChan1, UInt_t uChan2, UInt_t uChan3,
228 UInt_t uChan4, UInt_t uChan5, UInt_t uChan6, UInt_t uChan7)
229{
230 fMonitorAlgo->SetChannelMap(uChan0, uChan1, uChan2, uChan3, uChan4, uChan5, uChan6, uChan7);
231}
232
ClassImp(CbmConverterManager)
Bool_t bMcbm2018MonitorTaskBmonResetHistos
int Int_t
bool Bool_t
CbmMcbm2018MonitorAlgoBmon * fMonitorAlgo
Processing algo.
UInt_t fuHistoryHistoSize
Switch ON the filling of a additional set of histograms.
void SetChannelMap(UInt_t uChan0, UInt_t uChan1, UInt_t uChan2, UInt_t uChan3, UInt_t uChan4, UInt_t uChan5, UInt_t uChan6, UInt_t uChan7)
virtual Bool_t DoUnpack(const fles::Timeslice &ts, size_t component)
void SetIgnoreOverlapMs(Bool_t bFlagIn=kTRUE)
Bool_t fbDebugMonitorMode
Switch ON the filling of a minimal set of histograms.
uint64_t fulTsCounter
Statistics & first TS rejection.
void AddMsComponentToList(size_t component, UShort_t usDetectorId)
Temp until we change from CbmMcbmUnpack to something else.