From b6e365930b27edf47e521af4cfab0775e3375ea5 Mon Sep 17 00:00:00 2001
From: Volker Friese <v.friese@gsi.de>
Date: Fri, 21 Jul 2023 18:31:45 +0200
Subject: [PATCH] Fix to flaw in event sequence for time-based simulations and
 minor improvement in STS digitizer.

---
 sim/detectors/sts/CbmStsSimModule.cxx     | 7 ++++---
 sim/response/base/CbmDigitizationSource.h | 4 ++--
 2 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/sim/detectors/sts/CbmStsSimModule.cxx b/sim/detectors/sts/CbmStsSimModule.cxx
index c6007537b8..894667e1fe 100644
--- a/sim/detectors/sts/CbmStsSimModule.cxx
+++ b/sim/detectors/sts/CbmStsSimModule.cxx
@@ -143,8 +143,9 @@ void CbmStsSimModule::Digitize(UShort_t channel, CbmStsSignal* signal)
   if (adc < 0) return;  // Charge below threshold
 
   // --- Digitise time
-  Double_t deltaT = gRandom->Gaus(0., asic.GetTimeResol());
-  Long64_t dTime  = Long64_t(round(signal->GetTime() + deltaT));
+  Double_t deltaT = 0.;
+  if (!(asic.GetTimeResol() < 0.)) deltaT = gRandom->Gaus(0., asic.GetTimeResol());
+  Long64_t dTime = Long64_t(round(signal->GetTime() + deltaT));
 
   // --- Send the message to the digitiser task
   UInt_t address = fElement->GetAddress();
@@ -162,7 +163,7 @@ void CbmStsSimModule::Digitize(UShort_t channel, CbmStsSignal* signal)
 Int_t CbmStsSimModule::GenerateNoise(Double_t t1, Double_t t2)
 {
 
-  assert(t2 > t1);
+  if (!(t2 > t1)) return 0;
   Int_t nNoiseAll      = 0;
   UInt_t nAsicChannels = fParams->GetNofAsicChannels();
 
diff --git a/sim/response/base/CbmDigitizationSource.h b/sim/response/base/CbmDigitizationSource.h
index d9eb0c3ad0..43e30dfdbf 100644
--- a/sim/response/base/CbmDigitizationSource.h
+++ b/sim/response/base/CbmDigitizationSource.h
@@ -219,8 +219,8 @@ public:
 
 private:
   std::vector<CbmMCInputSet*> fInputSets;
-  std::map<UInt_t, CbmMCInputSet*> fInputMap;     //! input ID -> inputSet
-  std::map<Double_t, CbmMCInputSet*> fNextEvent;  //! time -> inputSet
+  std::map<UInt_t, CbmMCInputSet*> fInputMap;          //! input ID -> inputSet
+  std::multimap<Double_t, CbmMCInputSet*> fNextEvent;  //! time -> inputSet
   FairMCEventHeader* fMCEventHeader;
   TObjArray* fListOfFolders;
   std::set<TString> fBranches;  // List of branches names
-- 
GitLab