From 7a5f76025b6018014fd4fe25c0d2073682c7ebce Mon Sep 17 00:00:00 2001
From: Volker Friese <v.friese@gsi.de>
Date: Fri, 7 Jul 2023 12:06:51 +0200
Subject: [PATCH] Pass run start time to the digitizers. For STS, start noise
 simulation at the run start time.

---
 core/base/CbmDigitizeBase.h               | 7 +++++++
 sim/detectors/sts/CbmStsDigitize.cxx      | 2 +-
 sim/response/base/CbmDigitization.cxx     | 1 +
 sim/response/base/CbmDigitizationSource.h | 3 +++
 4 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/core/base/CbmDigitizeBase.h b/core/base/CbmDigitizeBase.h
index a2bca30e46..b0321af639 100644
--- a/core/base/CbmDigitizeBase.h
+++ b/core/base/CbmDigitizeBase.h
@@ -170,10 +170,17 @@ public:
   void SetProduceNoise(Bool_t choice = kTRUE) { fProduceNoise = choice; }
 
 
+  /** @brief Set the run start time
+   ** @param Run start time [ns]
+   **/
+  void SetRunStartTime(Double_t time) { fRunStartTime = time; }
+
+
 protected:
   Bool_t fEventMode;                          /// Flag for event-by-event mode
   Bool_t fProduceNoise;                       /// Flag for production of inter-event noise
   Bool_t fCreateMatches;                      /// Flag for creation of links to MC
+  Double_t fRunStartTime = 0;                 /// Start time of run [ns]
   Int_t fCurrentInput;                        /// Number of current input
   Int_t fCurrentEvent;                        /// Number of current MC event
   Int_t fCurrentMCEntry;                      /// Number of current MC entry
diff --git a/sim/detectors/sts/CbmStsDigitize.cxx b/sim/detectors/sts/CbmStsDigitize.cxx
index 7778459d33..757f08b658 100644
--- a/sim/detectors/sts/CbmStsDigitize.cxx
+++ b/sim/detectors/sts/CbmStsDigitize.cxx
@@ -195,7 +195,7 @@ void CbmStsDigitize::Exec(Option_t* /*opt*/)
   // --- Generate noise from previous to current event time
   if (fParSim->Noise()) {
     Int_t nNoise         = 0;
-    Double_t tNoiseStart = fNofEvents ? eventTimePrevious : 1000.;
+    Double_t tNoiseStart = fNofEvents ? eventTimePrevious : fRunStartTime;
     Double_t tNoiseEnd   = fCurrentEventTime;
     for (auto& entry : fModules)
       nNoise += entry.second->GenerateNoise(tNoiseStart, tNoiseEnd);
diff --git a/sim/response/base/CbmDigitization.cxx b/sim/response/base/CbmDigitization.cxx
index 9080ba6870..d59f860a08 100644
--- a/sim/response/base/CbmDigitization.cxx
+++ b/sim/response/base/CbmDigitization.cxx
@@ -378,6 +378,7 @@ void CbmDigitization::Run(Int_t event1, Int_t event2)
       if (fMode == Mode::EventByEvent) digitizer->SetEventMode();
       digitizer->SetProduceNoise(fProduceNoise);
       digitizer->SetCreateMatches(fCreateMatches);
+      digitizer->SetRunStartTime(fSource->GetStartTime());
       run->AddTask(digitizer);
       LOG(info) << fName << ": Added task " << digitizer->GetName();
     }  //? active and digitizer instance present
diff --git a/sim/response/base/CbmDigitizationSource.h b/sim/response/base/CbmDigitizationSource.h
index 17517920ce..d9eb0c3ad0 100644
--- a/sim/response/base/CbmDigitizationSource.h
+++ b/sim/response/base/CbmDigitizationSource.h
@@ -137,6 +137,9 @@ public:
     return kFILE;
   }
 
+  /** @brief Run start time **/
+  Double_t GetStartTime() { return fTimeStart; }
+
 
   /** @brief Abstract in base class. No implementation here. **/
   virtual Bool_t Init();
-- 
GitLab