CbmRoot
Loading...
Searching...
No Matches
CbmMcbm2018MonitorTaskPsd.cxx
Go to the documentation of this file.
1/* Copyright (C) 2019-2021 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
2 SPDX-License-Identifier: GPL-3.0-only
3 Authors: Nikolay Karpushkin, David Emschermann [committer] */
4
5// -----------------------------------------------------------------------------
6// ----- -----
7// ----- CbmMcbm2018MonitorTaskPsd -----
8// ----- Created 26.09.2019 by N.Karpushkin -----
9// ----- based on CbmMcbm2018MonitorTaskBmon by P.-A. Loizeau -----
10// ----- -----
11// -----------------------------------------------------------------------------
12
14
16#include "CbmMcbm2018PsdPar.h"
17
18#include "FairParGenericSet.h"
19#include "FairRootManager.h"
20#include "FairRun.h"
21#include "FairRunOnline.h"
22#include "FairRuntimeDb.h"
23#include <Logger.h>
24
25#include "TCanvas.h"
26#include "THttpServer.h"
27#include "TList.h"
28#include "TROOT.h"
29#include "TString.h"
30#include <TFile.h>
31
32#include <chrono>
33#include <fstream>
34#include <iomanip>
35#include <iostream>
36
37#include <stdint.h>
38
40
43 , fbMonitorMode(kTRUE)
44 , fbDebugMonitorMode(kFALSE)
45 , fuHistoryHistoSize(1800)
46 , fviHistoChargeArgs(3, 0)
47 , fviHistoAmplArgs(3, 0)
48 , fviHistoZLArgs(3, 0)
49 , fsHistoFileName("data/HistosMonitorPsd.root")
50 , fulTsCounter(0)
51 , fMonitorAlgo(nullptr)
52{
54}
55
57
59{
60 LOG(info) << "CbmMcbm2018MonitorTaskPsd::Init";
61 LOG(info) << "Initializing mCBM Psd 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 CbmMcbm2018PsdPar* pUnpackPar =
96 dynamic_cast<CbmMcbm2018PsdPar*>(FairRun::Instance()->GetRuntimeDb()->getContainer("CbmMcbm2018PsdPar"));
97 if (nullptr == pUnpackPar) {
98 LOG(error) << "Failed to obtain parameter container CbmMcbm2018PsdPar";
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
121
124 initOK &= fMonitorAlgo->CreateHistograms();
125
127 std::vector<std::pair<TNamed*, std::string>> vHistos = fMonitorAlgo->GetHistoVector();
129 std::vector<std::pair<TCanvas*, std::string>> vCanvases = fMonitorAlgo->GetCanvasVector();
130
132 THttpServer* server = FairRunOnline::Instance()->GetHttpServer();
133 if (nullptr != server) {
134 for (UInt_t uHisto = 0; uHisto < vHistos.size(); ++uHisto) {
135 // LOG(info) << "Registering " << vHistos[ uHisto ].first->GetName()
136 // << " in " << vHistos[ uHisto ].second.data();
137 server->Register(Form("/%s", vHistos[uHisto].second.data()), vHistos[uHisto].first);
138 } // for( UInt_t uHisto = 0; uHisto < vHistos.size(); ++uHisto )
139
140 for (UInt_t uCanv = 0; uCanv < vCanvases.size(); ++uCanv) {
141 // LOG(info) << "Registering " << vCanvases[ uCanv ].first->GetName()
142 // << " in " << vCanvases[ uCanv ].second.data();
143 server->Register(Form("/%s", vCanvases[uCanv].second.data()),
144 gROOT->FindObject((vCanvases[uCanv].first)->GetName()));
145 } // for( UInt_t uCanv = 0; uCanv < vCanvases.size(); ++uCanv )
146
147 server->RegisterCommand("/Reset_MoniPsd_Hist", "bMcbm2018MonitorTaskPsdResetHistos=kTRUE");
148 // server->Restrict("/Reset_MoniPsd_Hist", "allow=admin");
149 } // if( nullptr != server )
150
151 return initOK;
152}
153
155{
156 LOG(info) << "ReInit parameter containers for " << GetName();
157 Bool_t initOK = fMonitorAlgo->ReInitContainers();
158
159 return initOK;
160}
161
162void CbmMcbm2018MonitorTaskPsd::AddMsComponentToList(size_t component, UShort_t usDetectorId)
163{
164 fMonitorAlgo->AddMsComponentToList(component, usDetectorId);
165}
166
167Bool_t CbmMcbm2018MonitorTaskPsd::DoUnpack(const fles::Timeslice& ts, size_t /*component*/)
168{
170 LOG(info) << "Reset Psd Monitor histos ";
173 } // if( fbMonitorMode && bMcbm2018MonitorTaskPsdResetHistos )
174
175 if (kFALSE == fMonitorAlgo->ProcessTs(ts)) {
176 LOG(error) << "Failed processing TS " << ts.index() << " in unpacker algorithm class";
177 return kTRUE;
178 } // if( kFALSE == fMonitorAlgo->ProcessTs( ts ) )
179
181 std::vector<CbmPsdDigi> vDigi = fMonitorAlgo->GetVector();
183
184 if (0 == fulTsCounter % 10000) LOG(info) << "Processed " << fulTsCounter << "TS";
185 fulTsCounter++;
186
187 return kTRUE;
188}
189
191
193{
195 std::vector<std::pair<TNamed*, std::string>> vHistos = fMonitorAlgo->GetHistoVector();
196
198 TFile* oldFile = gFile;
199 TDirectory* oldDir = gDirectory;
200
201 TFile* histoFile = nullptr;
202
203 // open separate histo file in recreate mode
204 histoFile = new TFile(fsHistoFileName, "RECREATE");
205 histoFile->cd();
206
208 for (UInt_t uHisto = 0; uHisto < vHistos.size(); ++uHisto) {
210 TString sFolder = vHistos[uHisto].second.data();
211 if (nullptr == gDirectory->Get(sFolder)) gDirectory->mkdir(sFolder);
212 gDirectory->cd(sFolder);
213
215 vHistos[uHisto].first->Write();
216
217 histoFile->cd();
218 } // for( UInt_t uHisto = 0; uHisto < vHistos.size(); ++uHisto )
219
221 gFile = oldFile;
222 gDirectory = oldDir;
223
224 histoFile->Close();
225}
226
228
ClassImp(CbmConverterManager)
Bool_t bMcbm2018MonitorTaskPsdResetHistos
void SetZLHistoArgs(std::vector< Int_t > inVec)
void SetMonitorFitMode(Bool_t bFlagIn=kTRUE)
void SetMonitorMode(Bool_t bFlagIn=kTRUE)
void SetAmplHistoArgs(std::vector< Int_t > inVec)
void SetMonitorWfmMode(Bool_t bFlagIn=kTRUE)
Bool_t ProcessTs(const fles::Timeslice &ts)
void SetMonitorChanMode(Bool_t bFlagIn=kTRUE)
void SetHistoryHistoSize(UInt_t inHistorySizeSec=1800)
void SetChargeHistoArgs(std::vector< Int_t > inVec)
void AddMsComponentToList(size_t component, UShort_t usDetectorId)
Bool_t ResetHistograms(Bool_t bResetTime=kTRUE)
void SetIgnoreOverlapMs(Bool_t bFlagIn=kTRUE)
CbmMcbm2018MonitorAlgoPsd * fMonitorAlgo
Processing algo.
Bool_t fbMonitorWfmMode
Switch ON the filling channelwise histograms.
uint64_t fulTsCounter
Statistics & first TS rejection.
UInt_t fuHistoryHistoSize
Switch ON the filling of a additional set of histograms.
std::vector< Int_t > fviHistoChargeArgs
void AddMsComponentToList(size_t component, UShort_t usDetectorId)
Temp until we change from CbmMcbmUnpack to something else.
Bool_t fbMonitorChanMode
Switch ON the filling of a minimal set of histograms.
virtual Bool_t DoUnpack(const fles::Timeslice &ts, size_t component)
Bool_t fbMonitorFitMode
Switch ON the filling waveforms histograms.
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.