CbmRoot
Loading...
Searching...
No Matches
CbmStar2019MonitorPulserTask.cxx
Go to the documentation of this file.
1/* Copyright (C) 2019-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
5// -----------------------------------------------------------------------------
6// ----- -----
7// ----- CbmStar2019MonitorPulserTask -----
8// ----- Created 12.10.2019 by P.-A. Loizeau -----
9// ----- -----
10// -----------------------------------------------------------------------------
11
13
15#include "CbmStar2019TofPar.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 "TClonesArray.h"
26#include "THttpServer.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 , fbEtofFeeIndexing(kTRUE)
44 , fsHistoFileName("data/HistosMonitorPulser.root")
45 , fuUpdateFreqTs(100)
46 , fuPulserMinTot(90)
47 , fuPulserMaxTot(110)
48 , fuPulserChannel(3)
49 , fiSectorIndex(-1)
50 , fuHistoryHistoSize(1800)
51 , fParCList(nullptr)
52 , fulTsCounter(0)
53 , fMonitorPulserAlgo(nullptr)
54{
56}
57
59
61{
62 LOG(info) << "CbmStar2019MonitorPulserTask::Init";
63 LOG(info) << "Initializing eTOF 2019 Monitor task";
64
65 return kTRUE;
66}
67
69{
70 LOG(info) << "Setting parameter containers for " << GetName();
71
73
74 for (Int_t iparC = 0; iparC < fParCList->GetEntries(); ++iparC) {
75 FairParGenericSet* tempObj = (FairParGenericSet*) (fParCList->At(iparC));
76 fParCList->Remove(tempObj);
77
78 std::string sParamName {tempObj->GetName()};
79 FairParGenericSet* newObj =
80 dynamic_cast<FairParGenericSet*>(FairRun::Instance()->GetRuntimeDb()->getContainer(sParamName.data()));
81
82 if (nullptr == newObj) {
83 LOG(error) << "Failed to obtain parameter container " << sParamName << ", for parameter index " << iparC;
84 return;
85 } // if( nullptr == newObj )
86
87 fParCList->AddAt(newObj, iparC);
88 // delete tempObj;
89 } // for( Int_t iparC = 0; iparC < fParCList->GetEntries(); ++iparC )
90}
91
93{
94 LOG(info) << "Init parameter containers for " << GetName();
95
97 CbmStar2019TofPar* pUnpackPar =
98 dynamic_cast<CbmStar2019TofPar*>(FairRun::Instance()->GetRuntimeDb()->getContainer("CbmStar2019TofPar"));
99 if (nullptr == pUnpackPar) {
100 LOG(error) << "Failed to obtain parameter container CbmStar2019TofPar";
101 return kFALSE;
102 } // if( nullptr == pUnpackPar )
103
110
111 Bool_t initOK = fMonitorPulserAlgo->InitContainers();
112
116
118 std::vector<std::pair<TNamed*, std::string>> vHistos = fMonitorPulserAlgo->GetHistoVector();
120 std::vector<std::pair<TCanvas*, std::string>> vCanvases = fMonitorPulserAlgo->GetCanvasVector();
121
123 THttpServer* server = FairRunOnline::Instance()->GetHttpServer();
124 if (nullptr != server) {
125 for (UInt_t uHisto = 0; uHisto < vHistos.size(); ++uHisto) {
126 // LOG(info) << "Registering " << vHistos[ uHisto ].first->GetName()
127 // << " in " << vHistos[ uHisto ].second.data();
128 server->Register(Form("/%s", vHistos[uHisto].second.data()), vHistos[uHisto].first);
129 } // for( UInt_t uHisto = 0; uHisto < vHistos.size(); ++uHisto )
130
131 for (UInt_t uCanv = 0; uCanv < vCanvases.size(); ++uCanv) {
132 // LOG(info) << "Registering " << vCanvases[ uCanv ].first->GetName()
133 // << " in " << vCanvases[ uCanv ].second.data();
134 server->Register(Form("/%s", vCanvases[uCanv].second.data()),
135 gROOT->FindObject((vCanvases[uCanv].first)->GetName()));
136 } // for( UInt_t uCanv = 0; uCanv < vCanvases.size(); ++uCanv )
137
138 server->RegisterCommand("/Reset_Pulser_Hist", "bStar2019MonitorPulserTaskResetHistos=kTRUE");
139 server->RegisterCommand("/Save_Pulser_Hist", "bStar2019MonitorPulserTaskSaveHistos=kTRUE");
140
141 server->Restrict("/Reset_Moni_Hist", "allow=admin");
142 server->Restrict("/Save_Pulser_Hist", "allow=admin");
143 } // if( nullptr != server )
144
145 return initOK;
146}
147
149{
150 LOG(info) << "ReInit parameter containers for " << GetName();
151 Bool_t initOK = fMonitorPulserAlgo->ReInitContainers();
152
153 return initOK;
154}
155
156void CbmStar2019MonitorPulserTask::AddMsComponentToList(size_t component, UShort_t usDetectorId)
157{
158 fMonitorPulserAlgo->AddMsComponentToList(component, usDetectorId);
159}
160
161Bool_t CbmStar2019MonitorPulserTask::DoUnpack(const fles::Timeslice& ts, size_t /*component*/)
162{
164 LOG(info) << "Reset Monitor histos ";
167 } // if( bStar2019MonitorPulserTaskResetHistos )
168
170 LOG(info) << "Save Monitor histos & canvases";
173 } // if( bStar2019MonitorPulserTaskSaveHistos )
174
175 if (kFALSE == fMonitorPulserAlgo->ProcessTs(ts)) {
176 LOG(error) << "Failed processing TS " << ts.index() << " in unpacker algorithm class";
177 return kTRUE;
178 } // if( kFALSE == fMonitorPulserAlgo->ProcessTs( ts ) )
179
181 std::vector<CbmTofDigi> vDigi = fMonitorPulserAlgo->GetVector();
183
184 if (0 == fulTsCounter % 10000) LOG(info) << "Processed " << fulTsCounter << "TS";
185 fulTsCounter++;
186
187 return kTRUE;
188}
189
191
197
202
204{
206 std::vector<std::pair<TNamed*, std::string>> vHistos = fMonitorPulserAlgo->GetHistoVector();
207 std::vector<std::pair<TCanvas*, std::string>> vCanvas = fMonitorPulserAlgo->GetCanvasVector();
208
210 TDirectory* oldDir = NULL;
211 TFile* histoFile = NULL;
212 // Store current directory position to allow restore later
213 oldDir = gDirectory;
214 // open separate histo file in recreate mode
215 histoFile = new TFile(fsHistoFileName, "RECREATE");
216
217 if (nullptr == histoFile) return kFALSE;
218
220 for (UInt_t uHisto = 0; uHisto < vHistos.size(); ++uHisto) {
222 TString sFolder = vHistos[uHisto].second.data();
223 if (nullptr == gDirectory->Get(sFolder)) gDirectory->mkdir(sFolder);
224 gDirectory->cd(sFolder);
225
227 vHistos[uHisto].first->Write();
228
229 histoFile->cd();
230 } // for( UInt_t uHisto = 0; uHisto < vHistos.size(); ++uHisto )
231
232 for (UInt_t uCanvas = 0; uCanvas < vCanvas.size(); ++uCanvas) {
234 TString sFolder = vCanvas[uCanvas].second.data();
235 if (nullptr == gDirectory->Get(sFolder)) gDirectory->mkdir(sFolder);
236 gDirectory->cd(sFolder);
237
239 vCanvas[uCanvas].first->Write();
240
241 histoFile->cd();
242 } // for( UInt_t uHisto = 0; uHisto < vHistos.size(); ++uHisto )
243
244 // Restore original directory position
245 oldDir->cd();
246 histoFile->Close();
247
248 return kTRUE;
249}
ClassImp(CbmConverterManager)
Bool_t bStar2019MonitorPulserTaskResetHistos
Bool_t bStar2019MonitorPulserTaskSaveHistos
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.
Bool_t ProcessTs(const fles::Timeslice &ts)
void AddMsComponentToList(size_t component, UShort_t usDetectorId)
void SetEtofFeeIndexing(Bool_t bFlagIn=kTRUE)
void SetPulserTotLimits(UInt_t uMin, UInt_t uMax)
void AddMsComponentToList(size_t component, UShort_t usDetectorId)
Temp until we change from CbmMcbmUnpack to something else.
TString fsHistoFileName
User settings parameters.
void SetIgnoreOverlapMs(Bool_t bFlagIn=kTRUE)
Algo settings setters.
virtual Bool_t DoUnpack(const fles::Timeslice &ts, size_t component)
CbmStar2019MonitorPulserAlgo * fMonitorPulserAlgo
Processing algo.
TList * fParCList
Parameters management.
uint64_t fulTsCounter
Statistics & first TS rejection.