16#include "FairParGenericSet.h"
17#include "FairRootManager.h"
19#include "FairRunOnline.h"
20#include "FairRuntimeDb.h"
21#include "TClonesArray.h"
22#include "THttpServer.h"
53 LOG(info) <<
"CbmMcbm2018UnpackerTaskSts::Init";
54 LOG(info) <<
"Initializing mCBM STS 2018 Unpacker";
56 FairRootManager* ioman = FairRootManager::Instance();
57 if (NULL == ioman) { LOG(fatal) <<
"No FairRootManager instance"; }
60 if (
nullptr != ioman->InitObjectAs<std::vector<CbmStsDigi>
const*>(
"StsDigi"))
61 LOG(fatal) <<
"CbmMcbm2018UnpackerTaskSts::Init => output vector already registered,"
62 <<
" probably by CbmMcbm2018UnpackerTaskHodo" << std::endl
63 <<
" THESE TWO CLASSES ARE INCOMPATIBLE!";
84 LOG(info) <<
"Setting parameter containers for " << GetName();
88 for (
Int_t iparC = 0; iparC < fParCList->GetEntries(); ++iparC) {
89 FairParGenericSet* tempObj = (FairParGenericSet*) (fParCList->At(iparC));
90 fParCList->Remove(tempObj);
92 std::string sParamName {tempObj->GetName()};
93 FairParGenericSet* newObj =
94 dynamic_cast<FairParGenericSet*
>(FairRun::Instance()->GetRuntimeDb()->getContainer(sParamName.data()));
96 if (
nullptr == newObj) {
97 LOG(error) <<
"Failed to obtain parameter container " << sParamName <<
", for parameter index " << iparC;
101 fParCList->AddAt(newObj, iparC);
108 LOG(info) <<
"Init parameter containers for " << GetName();
112 dynamic_cast<CbmMcbm2018StsPar*
>(FairRun::Instance()->GetRuntimeDb()->getContainer(
"CbmMcbm2018StsPar"));
113 if (
nullptr == pUnpackPar) {
114 LOG(error) <<
"Failed to obtain parameter container CbmMcbm2018StsPar";
134 std::vector<std::pair<TNamed*, std::string>> vHistos =
fUnpackerAlgo->GetHistoVector();
137 THttpServer* server = FairRunOnline::Instance()->GetHttpServer();
138 if (
nullptr != server) {
139 for (UInt_t uHisto = 0; uHisto < vHistos.size(); ++uHisto) {
140 server->Register(Form(
"/%s", vHistos[uHisto].second.data()), vHistos[uHisto].first);
143 server->RegisterCommand(
"/Reset_UnpSts_Hist",
"bMcbm2018UnpackerTaskStsResetHistos=kTRUE");
144 server->Restrict(
"/Reset_UnpSts_Hist",
"allow=admin");
151 fUnpackerAlgo->MaskNoisyChannel((*it).uFeb, (*it).uChan, (*it).bMasked);
158 LOG(info) <<
"ReInit parameter containers for " << GetName();
166 fUnpackerAlgo->AddMsComponentToList(component, usDetectorId);
172 LOG(info) <<
"Reset STS unpacker histos ";
178 LOG(error) <<
"Failed processing TS " << ts.index() <<
" in unpacker algorithm class";
184 => Done in the algo!!!
185 sort(fpvDigiSts->begin(), fpvDigiSts->end(),
186 [](const CbmStsDigi & a, const CbmStsDigi & b) -> bool
188 return a.GetTime() < b.GetTime();
210 std::vector<std::pair<TNamed*, std::string>> vHistos =
fUnpackerAlgo->GetHistoVector();
213 TFile* oldFile = gFile;
214 TDirectory* oldDir = gDirectory;
216 TFile* histoFile =
nullptr;
219 histoFile =
new TFile(
"data/HistosUnpackerSts.root",
"RECREATE");
223 for (UInt_t uHisto = 0; uHisto < vHistos.size(); ++uHisto) {
225 TString sFolder = vHistos[uHisto].second.data();
226 if (
nullptr == gDirectory->Get(sFolder)) gDirectory->mkdir(sFolder);
227 gDirectory->cd(sFolder);
230 vHistos[uHisto].first->Write();
ClassImp(CbmConverterManager)
Bool_t bMcbm2018UnpackerTaskStsResetHistos
Bool_t fbWriteOutput
Switch ON the filling of a additional set of histograms.
void SetAdcCut(UInt_t uAdc)
void SetTimeOffsetNs(Double_t dOffsetIn=0.0)
void MaskNoisyChannel(UInt_t uFeb, UInt_t uChan, Bool_t bMasked=kTRUE)
uint64_t fulTsCounter
Statistics & first TS rejection.
Bool_t fbPulserOutput
If ON the output TClonesArray of digi is written to disk.
void SetBinningFwFlag(Bool_t bEnable=kTRUE)
=> Quick and dirty hack for binning FW!!!
CbmMcbm2018UnpackerAlgoSts * fUnpackerAlgo
Processing algo.
CbmMcbm2018UnpackerTaskSts(UInt_t uNbSdpb=1)
virtual ~CbmMcbm2018UnpackerTaskSts()
void SeparatePulserOutput(Bool_t bFlagIn)
void AddMsComponentToList(size_t component, UShort_t usDetectorId)
Temp until we change from CbmMcbmUnpack to something else.
std::vector< CbmStsDigi > * fpvDigiSts
Output vectors.
virtual Bool_t DoUnpack(const fles::Timeslice &ts, size_t component)
std::vector< CbmStsDigi > * fpvPulserDigiSts
std::vector< CbmErrorMessage > * fpvErrorSts
Bool_t fbMonitorMode
Control flags.
std::vector< FebChanMask > fvChanMasks
If ON a separate output vector of digi is used for the pulser.
void SetTimeOffsetNsAsic(UInt_t uAsicIdx, Double_t dOffsetIn=0.0)
void SetIgnoreOverlapMs(Bool_t bFlagIn=kTRUE)
Bool_t ReInitContainers()