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#include "FairParGenericSet.h"
18#include "FairRootManager.h"
19#include "FairRun.h"
20#include "FairRunOnline.h"
21#include "FairRuntimeDb.h"
22#include "TCanvas.h"
23#include "THttpServer.h"
24#include "TList.h"
25#include "TROOT.h"
26#include "TString.h"
27
28#include <Logger.h>
29
30#include <TFile.h>
31
32#include <chrono>
33#include <cstdint>
34#include <fstream>
35#include <iomanip>
36#include <iostream>
37
39
42 , fbMonitorMode(kTRUE)
43 , fbDebugMonitorMode(kFALSE)
44 , fuHistoryHistoSize(1800)
45 , fviHistoChargeArgs(3, 0)
46 , fviHistoAmplArgs(3, 0)
47 , fviHistoZLArgs(3, 0)
48 , fsHistoFileName("data/HistosMonitorPsd.root")
49 , fulTsCounter(0)
50 , fMonitorAlgo(nullptr)
51{
53}
54
56
58{
59 LOG(info) << "CbmMcbm2018MonitorTaskPsd::Init";
60 LOG(info) << "Initializing mCBM Psd 2019 Monitor";
61
62 return kTRUE;
63}
64
66{
67 LOG(info) << "Setting parameter containers for " << GetName();
68
69 TList* parCList = fMonitorAlgo->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 CbmMcbm2018PsdPar* pUnpackPar =
95 dynamic_cast<CbmMcbm2018PsdPar*>(FairRun::Instance()->GetRuntimeDb()->getContainer("CbmMcbm2018PsdPar"));
96 if (nullptr == pUnpackPar) {
97 LOG(error) << "Failed to obtain parameter container CbmMcbm2018PsdPar";
98 return kFALSE;
99 } // if( nullptr == pUnpackPar )
100 /*
101 fbMonitorMode = pUnpackPar->GetMonitorMode();
102 LOG(info) << "Monitor mode: "
103 << ( fbMonitorMode ? "ON" : "OFF" );
104
105 fbDebugMonitorMode = pUnpackPar->GetDebugMonitorMode();
106 LOG(info) << "Debug Monitor mode: "
107 << ( fbDebugMonitorMode ? "ON" : "OFF" );
108*/
109 Bool_t initOK = fMonitorAlgo->InitContainers();
110
112 fMonitorAlgo->SetMonitorMode(fbMonitorMode);
113 fMonitorAlgo->SetMonitorChanMode(fbMonitorChanMode);
114 fMonitorAlgo->SetMonitorWfmMode(fbMonitorWfmMode);
115 fMonitorAlgo->SetMonitorFitMode(fbMonitorFitMode);
116 fMonitorAlgo->SetHistoryHistoSize(fuHistoryHistoSize);
117 fMonitorAlgo->SetChargeHistoArgs(fviHistoChargeArgs);
118 fMonitorAlgo->SetAmplHistoArgs(fviHistoAmplArgs);
119 fMonitorAlgo->SetZLHistoArgs(fviHistoZLArgs);
120
123 initOK &= fMonitorAlgo->CreateHistograms();
124
126 std::vector<std::pair<TNamed*, std::string>> vHistos = fMonitorAlgo->GetHistoVector();
128 std::vector<std::pair<TCanvas*, std::string>> vCanvases = fMonitorAlgo->GetCanvasVector();
129
131 THttpServer* server = FairRunOnline::Instance()->GetHttpServer();
132 if (nullptr != server) {
133 for (UInt_t uHisto = 0; uHisto < vHistos.size(); ++uHisto) {
134 // LOG(info) << "Registering " << vHistos[ uHisto ].first->GetName()
135 // << " in " << vHistos[ uHisto ].second.data();
136 server->Register(Form("/%s", vHistos[uHisto].second.data()), vHistos[uHisto].first);
137 } // for( UInt_t uHisto = 0; uHisto < vHistos.size(); ++uHisto )
138
139 for (UInt_t uCanv = 0; uCanv < vCanvases.size(); ++uCanv) {
140 // LOG(info) << "Registering " << vCanvases[ uCanv ].first->GetName()
141 // << " in " << vCanvases[ uCanv ].second.data();
142 server->Register(Form("/%s", vCanvases[uCanv].second.data()),
143 gROOT->FindObject((vCanvases[uCanv].first)->GetName()));
144 } // for( UInt_t uCanv = 0; uCanv < vCanvases.size(); ++uCanv )
145
146 server->RegisterCommand("/Reset_MoniPsd_Hist", "bMcbm2018MonitorTaskPsdResetHistos=kTRUE");
147 // server->Restrict("/Reset_MoniPsd_Hist", "allow=admin");
148 } // if( nullptr != server )
149
150 return initOK;
151}
152
154{
155 LOG(info) << "ReInit parameter containers for " << GetName();
156 Bool_t initOK = fMonitorAlgo->ReInitContainers();
157
158 return initOK;
159}
160
161void CbmMcbm2018MonitorTaskPsd::AddMsComponentToList(size_t component, UShort_t usDetectorId)
162{
163 fMonitorAlgo->AddMsComponentToList(component, usDetectorId);
164}
165
166Bool_t CbmMcbm2018MonitorTaskPsd::DoUnpack(const fles::Timeslice& ts, size_t /*component*/)
167{
169 LOG(info) << "Reset Psd Monitor histos ";
170 fMonitorAlgo->ResetHistograms();
172 } // if( fbMonitorMode && bMcbm2018MonitorTaskPsdResetHistos )
173
174 if (kFALSE == fMonitorAlgo->ProcessTs(ts)) {
175 LOG(error) << "Failed processing TS " << ts.index() << " in unpacker algorithm class";
176 return kTRUE;
177 } // if( kFALSE == fMonitorAlgo->ProcessTs( ts ) )
178
180 std::vector<CbmPsdDigi> vDigi = fMonitorAlgo->GetVector();
181 fMonitorAlgo->ClearVector();
182
183 if (0 == fulTsCounter % 10000) LOG(info) << "Processed " << fulTsCounter << "TS";
184 fulTsCounter++;
185
186 return kTRUE;
187}
188
190
192{
194 std::vector<std::pair<TNamed*, std::string>> vHistos = fMonitorAlgo->GetHistoVector();
195
197 TFile* oldFile = gFile;
198 TDirectory* oldDir = gDirectory;
199
200 TFile* histoFile = nullptr;
201
202 // open separate histo file in recreate mode
203 histoFile = new TFile(fsHistoFileName, "RECREATE");
204 histoFile->cd();
205
207 for (UInt_t uHisto = 0; uHisto < vHistos.size(); ++uHisto) {
209 TString sFolder = vHistos[uHisto].second.data();
210 if (nullptr == gDirectory->Get(sFolder)) gDirectory->mkdir(sFolder);
211 gDirectory->cd(sFolder);
212
214 vHistos[uHisto].first->Write();
215
216 histoFile->cd();
217 } // for( UInt_t uHisto = 0; uHisto < vHistos.size(); ++uHisto )
218
220 gFile = oldFile;
221 gDirectory = oldDir;
222
223 histoFile->Close();
224}
225
226void CbmMcbm2018MonitorTaskPsd::SetIgnoreOverlapMs(Bool_t bFlagIn) { fMonitorAlgo->SetIgnoreOverlapMs(bFlagIn); }
227
ClassImp(CbmConverterManager)
Bool_t bMcbm2018MonitorTaskPsdResetHistos
int Int_t
bool Bool_t
void SetIgnoreOverlapMs(Bool_t bFlagIn=kTRUE)
CbmMcbm2018MonitorAlgoPsd * fMonitorAlgo
Processing algo.
Bool_t fbMonitorWfmMode
Switch ON the filling channelwise histograms.
Bool_t fbDebugMonitorMode
Switch ON the filling waveform fitting 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.