From b465523819f96fb6a8219c47393966f381f20401 Mon Sep 17 00:00:00 2001 From: Dominik Smith <smith@th.physik.uni-frankfurt.de> Date: Thu, 11 Mar 2021 18:02:27 +0100 Subject: [PATCH] CbmAlgoBuildRawEvents: Cleanup. Set histogram axes to adaptive. Removed last access to FairRootManager. --- .../digis/CbmAlgoBuildRawEvents.cxx | 42 +++++++++++-------- .../digis/CbmAlgoBuildRawEvents.h | 11 ++--- .../digis/CbmTaskBuildRawEvents.cxx | 3 ++ 3 files changed, 33 insertions(+), 23 deletions(-) diff --git a/reco/eventbuilder/digis/CbmAlgoBuildRawEvents.cxx b/reco/eventbuilder/digis/CbmAlgoBuildRawEvents.cxx index f748a36cca..a9f8a9e8bf 100644 --- a/reco/eventbuilder/digis/CbmAlgoBuildRawEvents.cxx +++ b/reco/eventbuilder/digis/CbmAlgoBuildRawEvents.cxx @@ -38,9 +38,6 @@ Bool_t CbmAlgoBuildRawEvents::InitAlgo() { LOG(info) << "CbmAlgoBuildRawEvents::InitAlgo => Starting sequence"; - // Get a handle from the IO manager - FairRootManager* ioman = FairRootManager::Instance(); - /// Check if reference detector is set and seed data are available, /// otherwise look for explicit seed times if (fRefDet.detId == ECbmModuleId::kNotExist) { @@ -66,7 +63,6 @@ Bool_t CbmAlgoBuildRawEvents::InitAlgo() /// Access the TS metadata to know TS start time if needed if (fdTsStartTime < 0 || fdTsLength < 0 || fdTsOverLength < 0) { - fTimeSliceMetaDataArray = dynamic_cast<TClonesArray*>(ioman->GetObject("TimesliceMetaData")); if (!fTimeSliceMetaDataArray) { LOG(fatal) << "No TS metadata input found" << " => Please check in the unpacking macro if the following line was " @@ -75,13 +71,13 @@ Bool_t CbmAlgoBuildRawEvents::InitAlgo() << "source->SetWriteOutputFlag(kTRUE); // For writing TS metadata"; } } - if (fbFillHistos) { CreateHistograms(); } + LOG(info) << "CbmAlgoBuildRawEvents::InitAlgo => Done"; return kTRUE; } -void CbmAlgoBuildRawEvents::Finish() { LOG(info) << "Total errors: " << fuErrors; } +void CbmAlgoBuildRawEvents::Finish() {} void CbmAlgoBuildRawEvents::ClearEventVector() { @@ -143,7 +139,7 @@ void CbmAlgoBuildRawEvents::InitSeedWindow() Double_t dOverlapSize = fdTsOverLength; if (fdTsStartTime < 0 || fdTsLength < 0 || fdTsOverLength < 0) { - pTsMetaData = dynamic_cast<TimesliceMetaData*>(fTimeSliceMetaDataArray->At(0)); + const TimesliceMetaData* pTsMetaData = dynamic_cast<TimesliceMetaData*>(fTimeSliceMetaDataArray->At(0)); if (nullptr == pTsMetaData) LOG(fatal) << Form("CbmAlgoBuildRawEvents::LoopOnSeeds => " "No TS metadata found for TS %6u.", @@ -649,14 +645,21 @@ const CbmPsdDigi* CbmAlgoBuildRawEvents::GetDigi(UInt_t uDigi) //---------------------------------------------------------------------- void CbmAlgoBuildRawEvents::CreateHistograms() { - fhEventTime = new TH1F("hEventTime", "seed time of the events; Seed time [s]; Events", 60000, 0, 600); + fhEventTime = new TH1F("hEventTime", "seed time of the events; Seed time [s]; Events", 1000, 0, 0.001); + fhEventTime->SetCanExtend(TH1::kAllAxes); + fhEventDt = - new TH1F("fhEventDt", "interval in seed time of consecutive events; Seed time [s]; Events", 2100, -100.5, 1999.5); - fhEventSize = new TH1F("hEventSize", "nb of all digis in the event; Nb Digis []; Events []", 10000, 0, 10000); + new TH1F("fhEventDt", "interval in seed time of consecutive events; Seed time [s]; Events", 1000, 0, 0.0001); + fhEventDt->SetCanExtend(TH1::kAllAxes); + + fhEventSize = new TH1F("hEventSize", "nb of all digis in the event; Nb Digis []; Events []", 1000, 0, 100); + fhEventSize->SetCanExtend(TH1::kAllAxes); + fhNbDigiPerEvtTime = new TH2I("hNbDigiPerEvtTime", "nb of all digis per event vs seed time of the events; Seed time " "[s]; Nb Digis []; Events []", - 600, 0, 600, 1000, 0, 10000); + 1000, 0, 0.001, 1000, 0, 100); + fhNbDigiPerEvtTime->SetCanExtend(TH2::kAllAxes); /// Loop on selection detectors for (std::vector<RawEventBuilderDetector>::iterator det = fvDets.begin(); det != fvDets.end(); ++det) { @@ -665,18 +668,20 @@ void CbmAlgoBuildRawEvents::CreateHistograms() fvhNbDigiPerEvtTimeDet.push_back(nullptr); continue; } - - fvhNbDigiPerEvtTimeDet.push_back(new TH2I(Form("hNbDigiPerEvtTime%s", (*det).sName.data()), - Form("nb of %s digis per event vs seed time of the events; Seed time " - "[s]; Nb Digis []; Events []", - (*det).sName.data()), - 600, 0, 600, 4000, 0, 4000)); + TH2I* hNbDigiPerEvtTimeDet = new TH2I(Form("hNbDigiPerEvtTime%s", (*det).sName.data()), + Form("nb of %s digis per event vs seed time of the events; Seed time " + "[s]; Nb Digis []; Events []", + (*det).sName.data()), + 1000, 0, 0.001, 1000, 0, 100); + hNbDigiPerEvtTimeDet->SetCanExtend(TH2::kAllAxes); + fvhNbDigiPerEvtTimeDet.push_back(hNbDigiPerEvtTimeDet); } AddHistoToVector(fhEventTime, "evtbuild"); AddHistoToVector(fhEventDt, "evtbuild"); AddHistoToVector(fhEventSize, "evtbuild"); AddHistoToVector(fhNbDigiPerEvtTime, "evtbuild"); + for (std::vector<TH2*>::iterator itHist = fvhNbDigiPerEvtTimeDet.begin(); itHist != fvhNbDigiPerEvtTimeDet.end(); ++itHist) { if (nullptr != (*itHist)) { AddHistoToVector((*itHist), "evtbuild"); } @@ -688,7 +693,8 @@ void CbmAlgoBuildRawEvents::FillHistos() Double_t dPreEvtTime = -1.0; for (CbmEvent* evt : fEventVector) { fhEventTime->Fill(evt->GetStartTime() * 1e-9); - if (0.0 <= dPreEvtTime) { fhEventDt->Fill(evt->GetStartTime() - dPreEvtTime); } + if (0.0 <= dPreEvtTime) { fhEventDt->Fill((evt->GetStartTime() - dPreEvtTime) * 1e-9); } + fhEventSize->Fill(evt->GetNofData()); fhNbDigiPerEvtTime->Fill(evt->GetStartTime() * 1e-9, evt->GetNofData()); diff --git a/reco/eventbuilder/digis/CbmAlgoBuildRawEvents.h b/reco/eventbuilder/digis/CbmAlgoBuildRawEvents.h index 7ab53eb48c..7fc6cd8cde 100644 --- a/reco/eventbuilder/digis/CbmAlgoBuildRawEvents.h +++ b/reco/eventbuilder/digis/CbmAlgoBuildRawEvents.h @@ -192,6 +192,12 @@ public: void SetSeedTimes(std::vector<Double_t>* SeedTimes) { fSeedTimes = SeedTimes; } + // TS metadata + void SetTimeSliceMetaDataArray(TClonesArray* TimeSliceMetaDataArray) + { + fTimeSliceMetaDataArray = TimeSliceMetaDataArray; + } + /// Data output access std::vector<CbmEvent*>& GetEventVector() { return fEventVector; } void ClearEventVector(); @@ -255,11 +261,7 @@ private: Double_t fdTsOverLength = -1; /// Data input - /// FIXME: usage of CbmDigiManager in FairMq context?!? - /// => Maybe by registering vector (or vector reference) to ioman in Device? - //CbmDigiManager* fDigiMan = nullptr; //! TClonesArray* fTimeSliceMetaDataArray = nullptr; //! - const TimesliceMetaData* pTsMetaData = nullptr; const std::vector<CbmTofDigi>* fT0DigiVec = nullptr; const std::vector<CbmMuchDigi>* fMuchDigis = nullptr; @@ -311,7 +313,6 @@ private: /// Internal state variables UInt_t fuCurEv = 0; //! Event Counter - UInt_t fuErrors = 0; //! Error Counter UInt_t fuNrTs = 0; //! Timeslice Counter Double_t fdPrevEvtTime = 0.; //! Save previous time information Double_t fdPrevEvtEndTime = 0.; //! Save previous event last digi time information diff --git a/reco/eventbuilder/digis/CbmTaskBuildRawEvents.cxx b/reco/eventbuilder/digis/CbmTaskBuildRawEvents.cxx index 2d3888b9b1..83e9db5f5c 100644 --- a/reco/eventbuilder/digis/CbmTaskBuildRawEvents.cxx +++ b/reco/eventbuilder/digis/CbmTaskBuildRawEvents.cxx @@ -138,6 +138,9 @@ InitStatus CbmTaskBuildRawEvents::Init() ioman->Register("CbmEvent", "Cbm_Event", fEvents, IsOutputBranchPersistent("CbmEvent")); if (!fEvents) LOG(fatal) << "Output branch was not created"; + // Set timeslice meta data + fpAlgo->SetTimeSliceMetaDataArray(dynamic_cast<TClonesArray*>(ioman->GetObject("TimesliceMetaData"))); + /// Call Algo Init method if (kTRUE == fpAlgo->InitAlgo()) return kSUCCESS; else -- GitLab