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