CbmRoot
Loading...
Searching...
No Matches
CbmMcbm2018UnpackerTaskPsd.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// ----- CbmMcbm2018UnpackerTaskPsd -----
8// ----- Created 09.10.2019 by N.Karpushkin -----
9// ----- based on CbmMcbm2018UnpackerTaskTof by P.-A. Loizeau -----
10// ----- -----
11// -----------------------------------------------------------------------------
12
14
15#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 "TClonesArray.h"
23#include "TH1.h"
24#include "THttpServer.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(kFALSE)
43 , fbDebugMonitorMode(kFALSE)
44 , fbWriteOutput(kTRUE)
45 , fbDebugWriteOutput(kFALSE)
46 , fulTsCounter(0)
47 , fPsdDigiVector(nullptr)
48 , fPsdDspVector(nullptr)
49 , fUnpackerAlgo(nullptr)
50{
51 LOG(info) << "CbmMcbm2018UnpackerTaskPsd::Allocate";
53}
54
56
58{
59 LOG(info) << "CbmMcbm2018UnpackerTaskPsd::Init";
60 LOG(info) << "Initializing mCBM PSD 2018 Unpacker";
61 Bool_t initOK = kTRUE;
62
63 FairRootManager* ioman = FairRootManager::Instance();
64 if (NULL == ioman) { LOG(fatal) << "No FairRootManager instance"; }
65
67 fPsdDigiVector = new std::vector<CbmPsdDigi>();
68 if (fPsdDigiVector) {
69 ioman->RegisterAny("PsdDigi", fPsdDigiVector, fbWriteOutput);
70 initOK &= fUnpackerAlgo->SetDigiOutputPointer(fPsdDigiVector);
71 }
72 else {
73 LOG(fatal) << "fPsdDigiVector could not be registered at FairRootManager";
74 }
75
78 fPsdDspVector = new std::vector<CbmPsdDsp>();
79 if (fPsdDspVector) {
80 ioman->RegisterAny("PsdDsp", fPsdDspVector, fbDebugWriteOutput);
81 initOK &= fUnpackerAlgo->SetDspOutputPointer(fPsdDspVector);
82 }
83 else {
84 LOG(fatal) << "fPsdDspVector could not be registered at FairRootManager";
85 }
86 }
87
88 return initOK;
89}
90
92{
93 LOG(info) << "Setting parameter containers for " << GetName();
94
95 TList* fParCList = fUnpackerAlgo->GetParList();
96
97 for (Int_t iparC = 0; iparC < fParCList->GetEntries(); ++iparC) {
98 FairParGenericSet* tempObj = (FairParGenericSet*) (fParCList->At(iparC));
99 fParCList->Remove(tempObj);
100
101 std::string sParamName {tempObj->GetName()};
102 FairParGenericSet* newObj =
103 dynamic_cast<FairParGenericSet*>(FairRun::Instance()->GetRuntimeDb()->getContainer(sParamName.data()));
104
105 if (nullptr == newObj) {
106 LOG(error) << "Failed to obtain parameter container " << sParamName << ", for parameter index " << iparC;
107 return;
108 } // if( nullptr == newObj )
109
110 fParCList->AddAt(newObj, iparC);
111 // delete tempObj;
112 } // for( Int_t iparC = 0; iparC < fParCList->GetEntries(); ++iparC )
113}
114
116{
117 LOG(info) << "Init parameter containers for " << GetName();
118
120 CbmMcbm2018PsdPar* pUnpackPar =
121 dynamic_cast<CbmMcbm2018PsdPar*>(FairRun::Instance()->GetRuntimeDb()->getContainer("CbmMcbm2018PsdPar"));
122 if (nullptr == pUnpackPar) {
123 LOG(error) << "Failed to obtain parameter container CbmMcbm2018PsdPar";
124 return kFALSE;
125 } // if( nullptr == pUnpackPar )
126
127 Bool_t initOK = fUnpackerAlgo->InitContainers();
128
129 return initOK;
130}
131
133{
134 LOG(info) << "ReInit parameter containers for " << GetName();
135 Bool_t initOK = fUnpackerAlgo->ReInitContainers();
136
137 return initOK;
138}
139
140void CbmMcbm2018UnpackerTaskPsd::AddMsComponentToList(size_t component, UShort_t usDetectorId)
141{
142 fUnpackerAlgo->AddMsComponentToList(component, usDetectorId);
143}
144
145Bool_t CbmMcbm2018UnpackerTaskPsd::DoUnpack(const fles::Timeslice& ts, size_t component)
146{
147
149 LOG(info) << "Reset PSD unpacker histos ";
150 fUnpackerAlgo->ResetHistograms();
152 } // if( fbMonitorMode && bMcbm2018UnpackerTaskPsdResetHistos )
153
154 fUnpackerAlgo->unpack(&ts, component);
155 /*
156 if (kFALSE == fUnpackerAlgo->ProcessTs(ts)) {
157 LOG(error) << "Failed processing TS " << ts.index() << " in unpacker algorithm class";
158 return kTRUE;
159 } // if( kFALSE == fUnpackerAlgo->ProcessTs( ts ) )
160*/
161 /*
163 => Done in the algo!!!
164 sort(fPsdDigiVector->begin(), fPsdDigiVector->end(),
165 [](const CbmPsdDigi & a, const CbmPsdDigi & b) -> bool
166 {
167 return a.GetTime() < b.GetTime();
168 });
169*/
170
171 /*
172*/
173 if (0 == fulTsCounter % 10000) LOG(info) << "Processed " << fulTsCounter << "TS";
174 fulTsCounter++;
175
176 return kTRUE;
177}
178
184
185
187{
188 LOG(info) << "Finish of CbmMcbm2018UnpackerTaskPsd";
189 fUnpackerAlgo->Finish();
190}
191
193{
194 fbDebugWriteOutput = bFlagIn;
195 fUnpackerAlgo->SetDspWriteMode(bFlagIn);
196}
197void CbmMcbm2018UnpackerTaskPsd::SetIgnoreOverlapMs(Bool_t bFlagIn) { fUnpackerAlgo->SetIgnoreOverlapMs(bFlagIn); }
198void CbmMcbm2018UnpackerTaskPsd::SetTimeOffsetNs(Double_t dOffsetIn) { fUnpackerAlgo->SetTimeOffsetNs(dOffsetIn); }
199
ClassImp(CbmConverterManager)
Bool_t bMcbm2018UnpackerTaskPsdResetHistos
int Int_t
bool Bool_t
virtual Bool_t DoUnpack(const fles::Timeslice &ts, size_t component)
Bool_t fbWriteOutput
Switch ON the filling of a additional set of histograms.
uint64_t fulTsCounter
If ON the output vector of dsp debug information is written to disk.
std::vector< CbmPsdDigi > * fPsdDigiVector
Output Digi vector.
Bool_t fbDebugWriteOutput
If ON the output vector of digi is written to disk.
void SetIgnoreOverlapMs(Bool_t bFlagIn=kTRUE)
void AddMsComponentToList(size_t component, UShort_t usDetectorId)
Temp until we change from CbmMcbmUnpack to something else.
CbmMcbm2018UnpackerAlgoPsd * fUnpackerAlgo
Processing algo.
void SetTimeOffsetNs(Double_t dOffsetIn=0.0)
Bool_t fbDebugMonitorMode
Switch ON the filling of a minimal set of histograms.
std::vector< CbmPsdDsp > * fPsdDspVector
Output Dsp vector – preprocessed info for debugging.
void SetDspWriteMode(Bool_t bFlagIn=kTRUE)