CbmRoot
Loading...
Searching...
No Matches
CbmMcbm2018MonitorTaskTofPulser.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// ----- CbmMcbm2018MonitorTaskTofPulser -----
8// ----- Created 27.11.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
39
54
56
58{
59 LOG(info) << "CbmMcbm2018MonitorTaskTofPulser::Init";
60 LOG(info) << "Initializing mCBM 2019 Monitor task";
61
62 return kTRUE;
63}
64
66{
67 LOG(info) << "Setting parameter containers for " << GetName();
68
69 TList* parCList = fMonitorPulserAlgo->GetParList();
70
71 for (Int_t iparC = 0; iparC < parCList->GetEntries(); ++iparC) {
72 FairParGenericSet* tempObj = (FairParGenericSet*) (parCList->At(iparC));
73 parCList->Remove(tempObj);
74
75 std::string sParamName {tempObj->GetName()};
76 FairParGenericSet* newObj =
77 dynamic_cast<FairParGenericSet*>(FairRun::Instance()->GetRuntimeDb()->getContainer(sParamName.data()));
78
79 if (nullptr == newObj) {
80 LOG(error) << "Failed to obtain parameter container " << sParamName << ", for parameter index " << iparC;
81 return;
82 } // if( nullptr == newObj )
83
84 parCList->AddAt(newObj, iparC);
85 // delete tempObj;
86 } // for( Int_t iparC = 0; iparC < parCList->GetEntries(); ++iparC )
87}
88
90{
91 LOG(info) << "Init parameter containers for " << GetName();
92
94 CbmMcbm2018TofPar* pUnpackPar =
95 dynamic_cast<CbmMcbm2018TofPar*>(FairRun::Instance()->GetRuntimeDb()->getContainer("CbmMcbm2018TofPar"));
96 if (nullptr == pUnpackPar) {
97 LOG(error) << "Failed to obtain parameter container CbmMcbm2018TofPar";
98 return kFALSE;
99 } // if( nullptr == pUnpackPar )
100
102 fMonitorPulserAlgo->SetGdpbIndex(fiGdpbIndex);
103 fMonitorPulserAlgo->SetUpdateFreqTs(fuUpdateFreqTs);
105 fMonitorPulserAlgo->SetPulserChannel(fuPulserChannel);
106
107 Bool_t initOK = fMonitorPulserAlgo->InitContainers();
108
111 initOK &= fMonitorPulserAlgo->CreateHistograms();
112
114 std::vector<std::pair<TNamed*, std::string>> vHistos = fMonitorPulserAlgo->GetHistoVector();
116 std::vector<std::pair<TCanvas*, std::string>> vCanvases = fMonitorPulserAlgo->GetCanvasVector();
117
119 THttpServer* server = FairRunOnline::Instance()->GetHttpServer();
120 if (nullptr != server) {
121 for (UInt_t uHisto = 0; uHisto < vHistos.size(); ++uHisto) {
122 // LOG(info) << "Registering " << vHistos[ uHisto ].first->GetName()
123 // << " in " << vHistos[ uHisto ].second.data();
124 server->Register(Form("/%s", vHistos[uHisto].second.data()), vHistos[uHisto].first);
125 } // for( UInt_t uHisto = 0; uHisto < vHistos.size(); ++uHisto )
126
127 for (UInt_t uCanv = 0; uCanv < vCanvases.size(); ++uCanv) {
128 // LOG(info) << "Registering " << vCanvases[ uCanv ].first->GetName()
129 // << " in " << vCanvases[ uCanv ].second.data();
130 server->Register(Form("/%s", vCanvases[uCanv].second.data()),
131 gROOT->FindObject((vCanvases[uCanv].first)->GetName()));
132 } // for( UInt_t uCanv = 0; uCanv < vCanvases.size(); ++uCanv )
133
134 server->RegisterCommand("/Reset_Pulser_Hist", "bMcbm2018MonitorTaskTofPulserResetHistos=kTRUE");
135 server->RegisterCommand("/Save_Pulser_Hist", "bMcbm2018MonitorTaskTofPulserSaveHistos=kTRUE");
136
137 server->Restrict("/Reset_Moni_Hist", "allow=admin");
138 } // if( nullptr != server )
139
140 return initOK;
141}
142
144{
145 LOG(info) << "ReInit parameter containers for " << GetName();
146 Bool_t initOK = fMonitorPulserAlgo->ReInitContainers();
147
148 return initOK;
149}
150
151void CbmMcbm2018MonitorTaskTofPulser::AddMsComponentToList(size_t component, UShort_t usDetectorId)
152{
153 fMonitorPulserAlgo->AddMsComponentToList(component, usDetectorId);
154}
155
156Bool_t CbmMcbm2018MonitorTaskTofPulser::DoUnpack(const fles::Timeslice& ts, size_t /*component*/)
157{
159 LOG(info) << "Reset Monitor histos ";
160 fMonitorPulserAlgo->ResetHistograms();
162 } // if( bMcbm2018MonitorTaskTofPulserResetHistos )
163
165 LOG(info) << "Save Monitor histos & canvases";
168 } // if( bMcbm2018MonitorTaskTofPulserSaveHistos )
169
170 if (kFALSE == fMonitorPulserAlgo->ProcessTs(ts)) {
171 LOG(error) << "Failed processing TS " << ts.index() << " in unpacker algorithm class";
172 return kTRUE;
173 } // if( kFALSE == fMonitorPulserAlgo->ProcessTs( ts ) )
174
176 std::vector<CbmTofDigi> vDigi = fMonitorPulserAlgo->GetVector();
177 fMonitorPulserAlgo->ClearVector();
178
179 if (0 == fulTsCounter % 10000) LOG(info) << "Processed " << fulTsCounter << "TS";
180 fulTsCounter++;
181
182 return kTRUE;
183}
184
186
192
194{
195 fMonitorPulserAlgo->SetIgnoreOverlapMs(bFlagIn);
196}
197
199{
201 std::vector<std::pair<TNamed*, std::string>> vHistos = fMonitorPulserAlgo->GetHistoVector();
202 std::vector<std::pair<TCanvas*, std::string>> vCanvas = fMonitorPulserAlgo->GetCanvasVector();
203
205 TFile* oldFile = gFile;
206 TDirectory* oldDir = gDirectory;
207
208 TFile* histoFile = nullptr;
209
210 // open separate histo file in recreate mode
211 histoFile = new TFile(fsHistoFileName, "RECREATE");
212
213 if (nullptr == histoFile) return kFALSE;
214
216 for (UInt_t uHisto = 0; uHisto < vHistos.size(); ++uHisto) {
218 TString sFolder = vHistos[uHisto].second.data();
219 if (nullptr == gDirectory->Get(sFolder)) gDirectory->mkdir(sFolder);
220 gDirectory->cd(sFolder);
221
223 vHistos[uHisto].first->Write();
224
225 histoFile->cd();
226 } // for( UInt_t uHisto = 0; uHisto < vHistos.size(); ++uHisto )
227
228 for (UInt_t uCanvas = 0; uCanvas < vCanvas.size(); ++uCanvas) {
230 TString sFolder = vCanvas[uCanvas].second.data();
231 if (nullptr == gDirectory->Get(sFolder)) gDirectory->mkdir(sFolder);
232 gDirectory->cd(sFolder);
233
235 vCanvas[uCanvas].first->Write();
236
237 histoFile->cd();
238 } // for( UInt_t uHisto = 0; uHisto < vHistos.size(); ++uHisto )
239
241 gFile = oldFile;
242 gDirectory = oldDir;
243
244 histoFile->Close();
245
246 return kTRUE;
247}
ClassImp(CbmConverterManager)
Bool_t bMcbm2018MonitorTaskTofPulserSaveHistos
Bool_t bMcbm2018MonitorTaskTofPulserResetHistos
int Int_t
bool Bool_t
void SetIgnoreOverlapMs(Bool_t bFlagIn=kTRUE)
Algo settings setters.
virtual Bool_t DoUnpack(const fles::Timeslice &ts, size_t component)
void AddMsComponentToList(size_t component, UShort_t usDetectorId)
Temp until we change from CbmMcbmUnpack to something else.
CbmMcbm2018MonitorAlgoTofPulser * fMonitorPulserAlgo
Processing algo.
uint64_t fulTsCounter
Statistics & first TS rejection.