CbmRoot
Loading...
Searching...
No Matches
CbmMcbmSpillFindTask.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// ----- CbmMcbmSpillFindTask -----
8// ----- Created 10.02.2019 by P.-A. Loizeau -----
9// ----- -----
10// -----------------------------------------------------------------------------
11
13
14#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 "Logger.h"
22#include "TCanvas.h"
23#include "THttpServer.h"
24#include "TList.h"
25#include "TROOT.h"
26#include "TString.h"
27
28#include <TFile.h>
29
30#include <chrono>
31#include <cstdint>
32#include <fstream>
33#include <iomanip>
34#include <iostream>
35
37
40 , fbMonitorMode(kTRUE)
41 , fbDebugMonitorMode(kFALSE)
42 , fuHistoryHistoSize(3600)
43 , fsHistoFileName("data/HistosMonitorBmon.root")
44 , fuMinTotPulser(90)
45 , fuMaxTotPulser(100)
47 , fulTsCounter(0)
48 , fMonitorAlgo(nullptr)
49{
51}
52
54
56{
57 LOG(info) << "CbmMcbmSpillFindTask::Init";
58 LOG(info) << "Initializing mCBM Bmon 2019 Monitor";
59
60 return kTRUE;
61}
62
64{
65 LOG(info) << "Setting parameter containers for " << GetName();
66
67 TList* parCList = fMonitorAlgo->GetParList();
68
69 for (Int_t iparC = 0; iparC < parCList->GetEntries(); ++iparC) {
70 FairParGenericSet* tempObj = (FairParGenericSet*) (parCList->At(iparC));
71 parCList->Remove(tempObj);
72
73 std::string sParamName {tempObj->GetName()};
74 FairParGenericSet* newObj =
75 dynamic_cast<FairParGenericSet*>(FairRun::Instance()->GetRuntimeDb()->getContainer(sParamName.data()));
76
77 if (nullptr == newObj) {
78 LOG(error) << "Failed to obtain parameter container " << sParamName << ", for parameter index " << iparC;
79 return;
80 } // if( nullptr == newObj )
81
82 parCList->AddAt(newObj, iparC);
83 // delete tempObj;
84 } // for( Int_t iparC = 0; iparC < parCList->GetEntries(); ++iparC )
85}
86
88{
89 LOG(info) << "Init parameter containers for " << GetName();
90
92 CbmMcbm2018TofPar* pUnpackPar =
93 dynamic_cast<CbmMcbm2018TofPar*>(FairRun::Instance()->GetRuntimeDb()->getContainer("CbmMcbm2018TofPar"));
94 if (nullptr == pUnpackPar) {
95 LOG(error) << "Failed to obtain parameter container CbmMcbm2018TofPar";
96 return kFALSE;
97 } // if( nullptr == pUnpackPar )
98
99 Bool_t initOK = fMonitorAlgo->InitContainers();
100
102 fMonitorAlgo->SetMonitorMode(fbMonitorMode);
103 fMonitorAlgo->SetHistoryHistoSize(fuHistoryHistoSize);
104 fMonitorAlgo->SetPulserTotLimits(fuMinTotPulser, fuMaxTotPulser);
105 fMonitorAlgo->SetSpillThreshold(fuOffSpillCountLimit);
106 fMonitorAlgo->SetSpillCheckIntervalSec(fdSpillCheckInterval);
107
110 initOK &= fMonitorAlgo->CreateHistograms();
111
113 std::vector<std::pair<TNamed*, std::string>> vHistos = fMonitorAlgo->GetHistoVector();
115 std::vector<std::pair<TCanvas*, std::string>> vCanvases = fMonitorAlgo->GetCanvasVector();
116
118 THttpServer* server = FairRunOnline::Instance()->GetHttpServer();
119 if (nullptr != server) {
120 for (UInt_t uHisto = 0; uHisto < vHistos.size(); ++uHisto) {
121 // LOG(info) << "Registering " << vHistos[ uHisto ].first->GetName()
122 // << " in " << vHistos[ uHisto ].second.data();
123 server->Register(Form("/%s", vHistos[uHisto].second.data()), vHistos[uHisto].first);
124 } // for( UInt_t uHisto = 0; uHisto < vHistos.size(); ++uHisto )
125
126 for (UInt_t uCanv = 0; uCanv < vCanvases.size(); ++uCanv) {
127 // LOG(info) << "Registering " << vCanvases[ uCanv ].first->GetName()
128 // << " in " << vCanvases[ uCanv ].second.data();
129 server->Register(Form("/%s", vCanvases[uCanv].second.data()),
130 gROOT->FindObject((vCanvases[uCanv].first)->GetName()));
131 } // for( UInt_t uCanv = 0; uCanv < vCanvases.size(); ++uCanv )
132
133 server->RegisterCommand("/Reset_MoniBmon_Hist", "bMcbmSpillFindResetHistos=kTRUE");
134 server->Restrict("/Reset_MoniBmon_Hist", "allow=admin");
135 } // if( nullptr != server )
136
137 return initOK;
138}
139
141{
142 LOG(info) << "ReInit parameter containers for " << GetName();
143 Bool_t initOK = fMonitorAlgo->ReInitContainers();
144
145 return initOK;
146}
147
148void CbmMcbmSpillFindTask::AddMsComponentToList(size_t component, UShort_t usDetectorId)
149{
150 fMonitorAlgo->AddMsComponentToList(component, usDetectorId);
151}
152
153Bool_t CbmMcbmSpillFindTask::DoUnpack(const fles::Timeslice& ts, size_t /*component*/)
154{
156 LOG(info) << "Reset Bmon Monitor histos ";
157 fMonitorAlgo->ResetHistograms();
159 } // if( fbMonitorMode && bMcbmSpillFindResetHistos )
160
161 if (kFALSE == fMonitorAlgo->ProcessTs(ts)) {
162 LOG(error) << "Failed processing TS " << ts.index() << " in unpacker algorithm class";
163 return kTRUE;
164 } // if( kFALSE == fMonitorAlgo->ProcessTs( ts ) )
165
167 std::vector<CbmTofDigi> vDigi = fMonitorAlgo->GetVector();
168 fMonitorAlgo->ClearVector();
169
170 if (0 == fulTsCounter % 1000) LOG(info) << "Processed " << fulTsCounter << "TS";
171 fulTsCounter++;
172
173 return kTRUE;
174}
175
177
179{
180 fMonitorAlgo->Finish();
181
183 std::vector<std::pair<TNamed*, std::string>> vHistos = fMonitorAlgo->GetHistoVector();
184
186 TFile* oldFile = gFile;
187 TDirectory* oldDir = gDirectory;
188
189 TFile* histoFile = nullptr;
190
191 // open separate histo file in recreate mode
192 histoFile = new TFile(fsHistoFileName, "RECREATE");
193 histoFile->cd();
194
196 for (UInt_t uHisto = 0; uHisto < vHistos.size(); ++uHisto) {
198 TString sFolder = vHistos[uHisto].second.data();
199 if (nullptr == gDirectory->Get(sFolder)) gDirectory->mkdir(sFolder);
200 gDirectory->cd(sFolder);
201
203 vHistos[uHisto].first->Write();
204
205 histoFile->cd();
206 } // for( UInt_t uHisto = 0; uHisto < vHistos.size(); ++uHisto )
207
209 gFile = oldFile;
210 gDirectory = oldDir;
211
212 histoFile->Close();
213}
214
215void CbmMcbmSpillFindTask::SetIgnoreOverlapMs(Bool_t bFlagIn) { fMonitorAlgo->SetIgnoreOverlapMs(bFlagIn); }
216
217
ClassImp(CbmConverterManager)
Bool_t bMcbmSpillFindResetHistos
int Int_t
bool Bool_t
Bool_t fbDebugMonitorMode
Switch ON the filling of a minimal set of histograms.
uint64_t fulTsCounter
Statistics & first TS rejection.
Bool_t fbMonitorMode
Control flags.
void AddMsComponentToList(size_t component, UShort_t usDetectorId)
Temp until we change from CbmMcbmUnpack to something else.
virtual Bool_t DoUnpack(const fles::Timeslice &ts, size_t component)
CbmMcbmSpillFindAlgo * fMonitorAlgo
Processing algo.
UInt_t fuHistoryHistoSize
Switch ON the filling of a additional set of histograms.
void SetIgnoreOverlapMs(Bool_t bFlagIn=kTRUE)