From 0516f9deaa03b7bdc8182e93c01ef5e2c2d38a43 Mon Sep 17 00:00:00 2001
From: "P.-A. Loizeau" <p.-a.loizeau@gsi.de>
Date: Mon, 4 Jul 2022 17:09:20 +0200
Subject: [PATCH] [Evt Builder] in BuildRawEvent algo + task, add setter per
 det for max Digi Nb in histos

---
 .../digis/CbmAlgoBuildRawEvents.cxx           | 47 +++++++++++++++----
 .../digis/CbmAlgoBuildRawEvents.h             |  6 ++-
 .../digis/CbmTaskBuildRawEvents.h             |  4 ++
 3 files changed, 46 insertions(+), 11 deletions(-)

diff --git a/reco/eventbuilder/digis/CbmAlgoBuildRawEvents.cxx b/reco/eventbuilder/digis/CbmAlgoBuildRawEvents.cxx
index 5d99e3a836..67f99aa114 100644
--- a/reco/eventbuilder/digis/CbmAlgoBuildRawEvents.cxx
+++ b/reco/eventbuilder/digis/CbmAlgoBuildRawEvents.cxx
@@ -1056,13 +1056,18 @@ void CbmAlgoBuildRawEvents::CreateHistograms()
     new TH1F("fhEventDt", "interval in seed time of consecutive events; Seed time dt [ns]; Events", 10000, 0, 100000);
   // fhEventDt->SetCanExtend(TH1::kAllAxes);  // Breaks the MQ histogram server as cannot be merged!
 
-  fhEventSize = new TH1F("hEventSize", "nb of all  digis in the event; Nb Digis []; Events []", 10000, 0, 10000);
+  double_t dHistMaxTotDigis = fRefDet.fdHistMaxDigiNb;
+  for (std::vector<RawEventBuilderDetector>::iterator det = fvDets.begin(); det != fvDets.end(); ++det) {
+    dHistMaxTotDigis += (*det).fdHistMaxDigiNb;
+  }
+  fhEventSize = new TH1F("hEventSize", "nb of all  digis in the event; Nb Digis []; Events []", dHistMaxTotDigis, 0,
+                         dHistMaxTotDigis);
   // fhEventSize->SetCanExtend(TH1::kAllAxes);  // Breaks the MQ histogram server as cannot be merged!
 
   fhNbDigiPerEvtTime = new TH2I("hNbDigiPerEvtTime",
                                 "nb of all  digis per event vs seed time of the events; Seed time "
                                 "[s]; Nb Digis []; Events []",
-                                1000, 0, 0.2, 5000, 0, 5000);
+                                1000, 0, 0.2, dHistMaxTotDigis, 0, dHistMaxTotDigis);
   // fhNbDigiPerEvtTime->SetCanExtend(TH2::kAllAxes);  // Breaks he MQ histogram server as cannot be merged!
 
   fhCpuTimePerTs  = new TH1D("hCpuTimePerTs", "CPU Processing time of TS vs TS; Ts; CPU time [ms]", 6000, 0, 6000);
@@ -1102,13 +1107,13 @@ void CbmAlgoBuildRawEvents::CreateHistograms()
                                           Form("nb of %s digis per event vs seed time of the events; Seed time in TS "
                                                "[s]; Nb Digis []; Events []",
                                                (*det).sName.data()),
-                                          1000, 0, 0.2, 5000, 0, 5000);
+                                          1000, 0, 0.2, (*det).fdHistMaxDigiNb, 0, (*det).fdHistMaxDigiNb);
     // hNbDigiPerEvtTimeDet->SetCanExtend(TH2::kAllAxes);   // Breaks he MQ histogram server as cannot be merged!
     fvhNbDigiPerEvtTimeDet.push_back(hNbDigiPerEvtTimeDet);
 
-    TH1* hNbDigiPerEvtDet =
-      new TH1I(Form("hNbDigiPerEvt%s", (*det).sName.data()),
-               Form("nb of %s digis per event; Nb Digis []", (*det).sName.data()), 10000, 0, 10000);
+    TH1* hNbDigiPerEvtDet = new TH1I(Form("hNbDigiPerEvt%s", (*det).sName.data()),
+                                     Form("nb of %s digis per event; Nb Digis []", (*det).sName.data()),
+                                     (*det).fdHistMaxDigiNb, 0, (*det).fdHistMaxDigiNb);
     fvhNbDigiPerEvtDet.push_back(hNbDigiPerEvtDet);
 
     TH1* hTDiff =
@@ -1150,12 +1155,12 @@ void CbmAlgoBuildRawEvents::CreateHistograms()
                                         Form("nb of %s digis per event vs seed time of the events; Seed time in TS "
                                              "[s]; Nb Digis []; Events []",
                                              fRefDet.sName.data()),
-                                        1000, 0, 0.2, 5000, 0, 5000);
+                                        1000, 0, 0.2, fRefDet.fdHistMaxDigiNb, 0, fRefDet.fdHistMaxDigiNb);
   fvhNbDigiPerEvtTimeDet.push_back(hNbDigiPerEvtTimeDet);
 
-  TH1I* hNbDigiPerEvtDet =
-    new TH1I(Form("hNbDigiPerEvt%s", fRefDet.sName.data()),
-             Form("nb of %s digis per event; Nb Digis []", fRefDet.sName.data()), 10000, 0, 10000);
+  TH1I* hNbDigiPerEvtDet = new TH1I(Form("hNbDigiPerEvt%s", fRefDet.sName.data()),
+                                    Form("nb of %s digis per event; Nb Digis []", fRefDet.sName.data()),
+                                    fRefDet.fdHistMaxDigiNb, 0, fRefDet.fdHistMaxDigiNb);
   fvhNbDigiPerEvtDet.push_back(hNbDigiPerEvtDet);
 
   TH1I* hTDiff =
@@ -1923,6 +1928,28 @@ void CbmAlgoBuildRawEvents::SetTriggerWindow(ECbmModuleId selDet, Double_t dWinB
   UpdateWidestTimeWinRange();
 }
 
+void CbmAlgoBuildRawEvents::SetHistogramMaxDigiNb(ECbmModuleId selDet, Double_t dVal)
+{
+  /// Check first if reference detector
+  if (fRefDet.detId == selDet) {
+    fRefDet.fdHistMaxDigiNb = dVal;
+    LOG(debug) << "Set histogram max digi nb for " << fRefDet.sName << " to " << dVal;
+    return;
+  }
+
+  /// Loop on selection detectors
+  for (std::vector<RawEventBuilderDetector>::iterator det = fvDets.begin(); det != fvDets.end(); ++det) {
+    if ((*det).detId == selDet) {
+      (*det).fdHistMaxDigiNb = dVal;
+      LOG(debug) << "Set histogram max digi nb " << (*det).sName << " to " << dVal;
+      return;
+    }
+  }
+  LOG(warning) << "CbmAlgoBuildRawEvents::SetHistogramMaxDigiNb => "
+                  "Doing nothing, detector neither reference nor in selection list!"
+               << selDet;
+}
+
 void CbmAlgoBuildRawEvents::UpdateTimeWinBoundariesExtrema()
 {
   /// Initialize with reference detector or explicit times
diff --git a/reco/eventbuilder/digis/CbmAlgoBuildRawEvents.h b/reco/eventbuilder/digis/CbmAlgoBuildRawEvents.h
index 3c0b3722ca..fc6dc4b8ac 100644
--- a/reco/eventbuilder/digis/CbmAlgoBuildRawEvents.h
+++ b/reco/eventbuilder/digis/CbmAlgoBuildRawEvents.h
@@ -58,7 +58,7 @@ public:
 
   RawEventBuilderDetector(ECbmModuleId detIdIn, ECbmDataType dataTypeIn, std::string sNameIn, UInt_t uTriggerMinDigisIn,
                           Int_t iTriggerMaxDigisIn, Double_t fdTimeWinBegIn, Double_t fdTimeWinEndIn,
-                          UInt_t uTriggerMinLayersIn = 0)
+                          UInt_t uTriggerMinLayersIn = 0, Double_t fdHistMaxDigiNbIn = 1000)
     : RawEventBuilderDetector(detIdIn, dataTypeIn, sNameIn)
   {
     fuTriggerMinDigis  = uTriggerMinDigisIn;
@@ -66,6 +66,7 @@ public:
     fuTriggerMinLayers = uTriggerMinLayersIn;
     fdTimeWinBeg       = fdTimeWinBegIn;
     fdTimeWinEnd       = fdTimeWinEndIn;
+    fdHistMaxDigiNb    = fdHistMaxDigiNbIn;
   }
 
   bool operator==(const RawEventBuilderDetector& other) const { return (other.detId == this->detId); }
@@ -86,6 +87,8 @@ public:
   /// Selection Window
   Double_t fdTimeWinBeg = -100;
   Double_t fdTimeWinEnd = 100;
+  /// Histo configuration
+  Double_t fdHistMaxDigiNb = 1000;
   /// Book-keeping variables
   UInt_t fuStartIndex = 0;
   UInt_t fuEndIndex   = 0;
@@ -152,6 +155,7 @@ public:
   void SetTriggerMaxNumber(ECbmModuleId selDet, Int_t iVal);
   void SetTriggerMinLayersNumber(ECbmModuleId selDet, UInt_t uVal);
   void SetTriggerWindow(ECbmModuleId selDet, Double_t dWinBeg, Double_t dWinEnd);
+  void SetHistogramMaxDigiNb(ECbmModuleId selDet, Double_t dDigiNbMax);
 
   void SetTsParameters(Double_t dTsStartTime, Double_t dTsLength, Double_t dTsOverLength)
   {
diff --git a/reco/eventbuilder/digis/CbmTaskBuildRawEvents.h b/reco/eventbuilder/digis/CbmTaskBuildRawEvents.h
index 33e6305f43..6c902ad7c8 100644
--- a/reco/eventbuilder/digis/CbmTaskBuildRawEvents.h
+++ b/reco/eventbuilder/digis/CbmTaskBuildRawEvents.h
@@ -96,6 +96,10 @@ public:
   {
     if (nullptr != fpAlgo) fpAlgo->SetTriggerMinLayersNumber(selDet, uVal);
   }
+  void SetHistogramMaxDigiNb(ECbmModuleId selDet, UInt_t uVal)
+  {
+    if (nullptr != fpAlgo) fpAlgo->SetHistogramMaxDigiNb(selDet, uVal);
+  }
   void SetTriggerWindow(ECbmModuleId det, Double_t dWinBeg, Double_t dWinEnd)
   {
     if (nullptr != fpAlgo) fpAlgo->SetTriggerWindow(det, dWinBeg, dWinEnd);
-- 
GitLab