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#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 "TClonesArray.h"
23#include "THttpServer.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
42 , fbEtofFeeIndexing(kTRUE)
43 , fsHistoFileName("data/HistosMonitorPulser.root")
44 , fuUpdateFreqTs(100)
45 , fuPulserMinTot(90)
46 , fuPulserMaxTot(110)
48 , fiSectorIndex(-1)
49 , fuHistoryHistoSize(1800)
50 , fParCList(nullptr)
51 , fulTsCounter(0)
52 , fMonitorPulserAlgo(nullptr)
53{
55}
56
58
60{
61 LOG(info) << "CbmStar2019MonitorPulserTask::Init";
62 LOG(info) << "Initializing eTOF 2019 Monitor task";
63
64 return kTRUE;
65}
66
68{
69 LOG(info) << "Setting parameter containers for " << GetName();
70
71 fParCList = fMonitorPulserAlgo->GetParList();
72
73 for (Int_t iparC = 0; iparC < fParCList->GetEntries(); ++iparC) {
74 FairParGenericSet* tempObj = (FairParGenericSet*) (fParCList->At(iparC));
75 fParCList->Remove(tempObj);
76
77 std::string sParamName {tempObj->GetName()};
78 FairParGenericSet* newObj =
79 dynamic_cast<FairParGenericSet*>(FairRun::Instance()->GetRuntimeDb()->getContainer(sParamName.data()));
80
81 if (nullptr == newObj) {
82 LOG(error) << "Failed to obtain parameter container " << sParamName << ", for parameter index " << iparC;
83 return;
84 } // if( nullptr == newObj )
85
86 fParCList->AddAt(newObj, iparC);
87 // delete tempObj;
88 } // for( Int_t iparC = 0; iparC < fParCList->GetEntries(); ++iparC )
89}
90
92{
93 LOG(info) << "Init parameter containers for " << GetName();
94
96 CbmStar2019TofPar* pUnpackPar =
97 dynamic_cast<CbmStar2019TofPar*>(FairRun::Instance()->GetRuntimeDb()->getContainer("CbmStar2019TofPar"));
98 if (nullptr == pUnpackPar) {
99 LOG(error) << "Failed to obtain parameter container CbmStar2019TofPar";
100 return kFALSE;
101 } // if( nullptr == pUnpackPar )
102
104 fMonitorPulserAlgo->SetEtofFeeIndexing(fbEtofFeeIndexing);
105 fMonitorPulserAlgo->SetSectorIndex(fiSectorIndex);
106 fMonitorPulserAlgo->SetUpdateFreqTs(fuUpdateFreqTs);
108 fMonitorPulserAlgo->SetPulserChannel(fuPulserChannel);
109
110 Bool_t initOK = fMonitorPulserAlgo->InitContainers();
111
114 initOK &= fMonitorPulserAlgo->CreateHistograms();
115
117 std::vector<std::pair<TNamed*, std::string>> vHistos = fMonitorPulserAlgo->GetHistoVector();
119 std::vector<std::pair<TCanvas*, std::string>> vCanvases = fMonitorPulserAlgo->GetCanvasVector();
120
122 THttpServer* server = FairRunOnline::Instance()->GetHttpServer();
123 if (nullptr != server) {
124 for (UInt_t uHisto = 0; uHisto < vHistos.size(); ++uHisto) {
125 // LOG(info) << "Registering " << vHistos[ uHisto ].first->GetName()
126 // << " in " << vHistos[ uHisto ].second.data();
127 server->Register(Form("/%s", vHistos[uHisto].second.data()), vHistos[uHisto].first);
128 } // for( UInt_t uHisto = 0; uHisto < vHistos.size(); ++uHisto )
129
130 for (UInt_t uCanv = 0; uCanv < vCanvases.size(); ++uCanv) {
131 // LOG(info) << "Registering " << vCanvases[ uCanv ].first->GetName()
132 // << " in " << vCanvases[ uCanv ].second.data();
133 server->Register(Form("/%s", vCanvases[uCanv].second.data()),
134 gROOT->FindObject((vCanvases[uCanv].first)->GetName()));
135 } // for( UInt_t uCanv = 0; uCanv < vCanvases.size(); ++uCanv )
136
137 server->RegisterCommand("/Reset_Pulser_Hist", "bStar2019MonitorPulserTaskResetHistos=kTRUE");
138 server->RegisterCommand("/Save_Pulser_Hist", "bStar2019MonitorPulserTaskSaveHistos=kTRUE");
139
140 server->Restrict("/Reset_Moni_Hist", "allow=admin");
141 server->Restrict("/Save_Pulser_Hist", "allow=admin");
142 } // if( nullptr != server )
143
144 return initOK;
145}
146
148{
149 LOG(info) << "ReInit parameter containers for " << GetName();
150 Bool_t initOK = fMonitorPulserAlgo->ReInitContainers();
151
152 return initOK;
153}
154
155void CbmStar2019MonitorPulserTask::AddMsComponentToList(size_t component, UShort_t usDetectorId)
156{
157 fMonitorPulserAlgo->AddMsComponentToList(component, usDetectorId);
158}
159
160Bool_t CbmStar2019MonitorPulserTask::DoUnpack(const fles::Timeslice& ts, size_t /*component*/)
161{
163 LOG(info) << "Reset Monitor histos ";
164 fMonitorPulserAlgo->ResetHistograms();
166 } // if( bStar2019MonitorPulserTaskResetHistos )
167
169 LOG(info) << "Save Monitor histos & canvases";
172 } // if( bStar2019MonitorPulserTaskSaveHistos )
173
174 if (kFALSE == fMonitorPulserAlgo->ProcessTs(ts)) {
175 LOG(error) << "Failed processing TS " << ts.index() << " in unpacker algorithm class";
176 return kTRUE;
177 } // if( kFALSE == fMonitorPulserAlgo->ProcessTs( ts ) )
178
180 std::vector<CbmTofDigi> vDigi = fMonitorPulserAlgo->GetVector();
181 fMonitorPulserAlgo->ClearVector();
182
183 if (0 == fulTsCounter % 10000) LOG(info) << "Processed " << fulTsCounter << "TS";
184 fulTsCounter++;
185
186 return kTRUE;
187}
188
190
196
198{
199 fMonitorPulserAlgo->SetIgnoreOverlapMs(bFlagIn);
200}
201
203{
205 std::vector<std::pair<TNamed*, std::string>> vHistos = fMonitorPulserAlgo->GetHistoVector();
206 std::vector<std::pair<TCanvas*, std::string>> vCanvas = fMonitorPulserAlgo->GetCanvasVector();
207
209 TDirectory* oldDir = NULL;
210 TFile* histoFile = NULL;
211 // Store current directory position to allow restore later
212 oldDir = gDirectory;
213 // open separate histo file in recreate mode
214 histoFile = new TFile(fsHistoFileName, "RECREATE");
215
216 if (nullptr == histoFile) return kFALSE;
217
219 for (UInt_t uHisto = 0; uHisto < vHistos.size(); ++uHisto) {
221 TString sFolder = vHistos[uHisto].second.data();
222 if (nullptr == gDirectory->Get(sFolder)) gDirectory->mkdir(sFolder);
223 gDirectory->cd(sFolder);
224
226 vHistos[uHisto].first->Write();
227
228 histoFile->cd();
229 } // for( UInt_t uHisto = 0; uHisto < vHistos.size(); ++uHisto )
230
231 for (UInt_t uCanvas = 0; uCanvas < vCanvas.size(); ++uCanvas) {
233 TString sFolder = vCanvas[uCanvas].second.data();
234 if (nullptr == gDirectory->Get(sFolder)) gDirectory->mkdir(sFolder);
235 gDirectory->cd(sFolder);
236
238 vCanvas[uCanvas].first->Write();
239
240 histoFile->cd();
241 } // for( UInt_t uHisto = 0; uHisto < vHistos.size(); ++uHisto )
242
243 // Restore original directory position
244 oldDir->cd();
245 histoFile->Close();
246
247 return kTRUE;
248}
ClassImp(CbmConverterManager)
Bool_t bStar2019MonitorPulserTaskResetHistos
Bool_t bStar2019MonitorPulserTaskSaveHistos
int Int_t
bool Bool_t
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.