From f5b417e9794ccc6d9257f32b202fe5e481801ed4 Mon Sep 17 00:00:00 2001
From: "se.gorbunov" <se.gorbunov@gsi.de>
Date: Tue, 14 Dec 2021 14:17:17 +0000
Subject: [PATCH] set time resolution for the sts pixel digitizer

---
 sim/detectors/sts/CbmStsDigitizePixel.cxx | 27 +++++++++++++----------
 sim/detectors/sts/CbmStsDigitizePixel.h   |  8 +++----
 2 files changed, 19 insertions(+), 16 deletions(-)

diff --git a/sim/detectors/sts/CbmStsDigitizePixel.cxx b/sim/detectors/sts/CbmStsDigitizePixel.cxx
index 19cfa8efcd..21eb57f4c9 100644
--- a/sim/detectors/sts/CbmStsDigitizePixel.cxx
+++ b/sim/detectors/sts/CbmStsDigitizePixel.cxx
@@ -37,6 +37,8 @@
 #include "FairRuntimeDb.h"
 #include <Logger.h>
 
+#include <TRandom.h>
+
 // Includes from CbmRoot
 #include "CbmStsDigi.h"
 #include "CbmStsParSetModule.h"
@@ -72,11 +74,11 @@ using namespace CbmSts;
 ClassImp(CbmStsDigitizePixel);
 
 // -----   Standard constructor   ------------------------------------------
-CbmStsDigitizePixel::CbmStsDigitizePixel(Double_t pitchXcm, Double_t pitchYcm, Double_t pitchTns)
+CbmStsDigitizePixel::CbmStsDigitizePixel(Double_t pitchXcm, Double_t pitchYcm, Double_t resolutionTns)
   : CbmDigitize<CbmStsDigi>("StsDigitizePixel")
   , fPitchXcm(pitchXcm)
   , fPitchYcm(pitchYcm)
-  , fPitchTns(pitchTns)
+  , fResolutionTns(resolutionTns)
 {
 }
 // -------------------------------------------------------------------------
@@ -173,9 +175,10 @@ void CbmStsDigitizePixel::Exec(Option_t* /*opt*/)
     UInt_t address   = static_cast<UInt_t>(point->GetDetectorID());
     UShort_t channel = 0;
     double timef     = fCurrentEventTime + point->GetTime();
-    timef            = (floor(timef / fPitchTns) + 0.5) * fPitchTns;
-    Long64_t time    = Long64_t(round(timef));
-    UShort_t adc     = 30;
+    timef += gRandom->Gaus(0, fResolutionTns);
+    Long64_t time = Long64_t(round(timef));
+    if (time < 0) { time = 0; }
+    UShort_t adc = 30;
     assert(time >= 0);
 
     // Create digi and (if required) match and send them to DAQ
@@ -228,13 +231,13 @@ void CbmStsDigitizePixel::InitParams()
     UInt_t nAsicChannels = 128;   // Number of readout channels per ASIC
 
     // --- ASIC parameters
-    UShort_t nAdc      = 32;                     // Number of ADC channels (5 bit)
-    Double_t dynRange  = 75000.;                 // Dynamic range [e]
-    Double_t threshold = 3000.;                  // Threshold [e]
-    Double_t timeResol = fPitchTns / sqrt(12.);  // Time resolution [ns]
-    Double_t deadTime  = 800.;                   // Channel dead time [ns]
-    Double_t noiseRms  = 1000.;                  // RMS of noise [e]
-    Double_t znr       = 3.9789e-3;              // Zero-crossing noise rate [1/ns]
+    UShort_t nAdc      = 32;              // Number of ADC channels (5 bit)
+    Double_t dynRange  = 75000.;          // Dynamic range [e]
+    Double_t threshold = 3000.;           // Threshold [e]
+    Double_t timeResol = fResolutionTns;  // Time resolution [ns]
+    Double_t deadTime  = 800.;            // Channel dead time [ns]
+    Double_t noiseRms  = 1000.;           // RMS of noise [e]
+    Double_t znr       = 3.9789e-3;       // Zero-crossing noise rate [1/ns]
     CbmStsParAsic userParAsic(nAsicChannels, nAdc, dynRange, threshold, timeResol, deadTime, noiseRms, znr);
 
     CbmStsParModule userParModule(nChannels, nAsicChannels);
diff --git a/sim/detectors/sts/CbmStsDigitizePixel.h b/sim/detectors/sts/CbmStsDigitizePixel.h
index dee43b80af..c67ec0051e 100644
--- a/sim/detectors/sts/CbmStsDigitizePixel.h
+++ b/sim/detectors/sts/CbmStsDigitizePixel.h
@@ -54,7 +54,7 @@ class CbmStsDigitizePixel : public CbmDigitize<CbmStsDigi> {
 
 public:
   /** Constructor **/
-  CbmStsDigitizePixel(Double_t pitchXcm = 0.0010, Double_t pitchYcm = 0.0010, Double_t pitchTns = 20);
+  CbmStsDigitizePixel(Double_t pitchXcm = 0.0010, Double_t pitchYcm = 0.0010, Double_t resolutionTns = 5.);
 
 
   /** Destructor **/
@@ -92,8 +92,8 @@ public:
   /// set pitch Y [cm]
   void SetPitchY(double pitchYcm) { fPitchYcm = pitchYcm; }
 
-  /// set pitch Time [ns]
-  void SetPitchT(double pitchTns) { fPitchTns = pitchTns; }
+  /// set resolution Time [ns]
+  void SetResolutionTime(double resolutionTns) { fResolutionTns = resolutionTns; }
 
 private:
   Bool_t fIsInitialised;  ///< kTRUE if Init() was called
@@ -112,7 +112,7 @@ private:
 
   Double_t fPitchXcm {0.0058};  // pitch in X [cm]
   Double_t fPitchYcm {0.0058};  // pitch in Y [cm]
-  Double_t fPitchTns {20};      // pitch in time [ns]
+  Double_t fResolutionTns {5.};  // resolution in time [ns]
 
   /** @brief Initialise the parameters **/
   void InitParams();
-- 
GitLab