From f1fee5dee7b486e719b16d31e5ecb131b0e67cf5 Mon Sep 17 00:00:00 2001
From: Carl Gwilliam <gwilliam@hep.ph.liv.ac.uk>
Date: Tue, 14 Feb 2023 16:34:37 +0000
Subject: [PATCH] fix float to int trunncation in digi

---
 Calorimeter/CaloDigiAlgs/src/CaloWaveformDigiAlg.cxx         | 5 +++--
 Scintillator/ScintDigiAlgs/src/ScintWaveformDigiAlg.cxx      | 5 +++--
 .../WaveDigiTools/WaveDigiTools/IWaveformDigitisationTool.h  | 2 +-
 Waveform/WaveDigiTools/src/WaveformDigitisationTool.cxx      | 4 ++--
 Waveform/WaveDigiTools/src/WaveformDigitisationTool.h        | 2 +-
 5 files changed, 10 insertions(+), 8 deletions(-)

diff --git a/Calorimeter/CaloDigiAlgs/src/CaloWaveformDigiAlg.cxx b/Calorimeter/CaloDigiAlgs/src/CaloWaveformDigiAlg.cxx
index 8ea1d4a3..ea58f4ad 100644
--- a/Calorimeter/CaloDigiAlgs/src/CaloWaveformDigiAlg.cxx
+++ b/Calorimeter/CaloDigiAlgs/src/CaloWaveformDigiAlg.cxx
@@ -6,6 +6,7 @@
 
 #include <map>
 #include <utility>
+#include <cmath>
 
 CaloWaveformDigiAlg::CaloWaveformDigiAlg(const std::string& name, 
 					 ISvcLocator* pSvcLocator)
@@ -122,8 +123,8 @@ CaloWaveformDigiAlg::execute(const EventContext& ctx) const {
     // Subtract count from basleine and add result to correct waveform vector
     for (const auto& c : counts) {
 
-      unsigned int baseline = m_digiTool->generate_baseline(m_base_mean, m_base_rms);
-      int value = baseline - c.second;
+      double baseline = m_digiTool->generate_baseline(m_base_mean, m_base_rms);
+      int value = std::round(baseline - c.second);
 
       if (value < 0) {
 	ATH_MSG_WARNING("Found pulse " << c.second << " larger than baseline " << c.first);
diff --git a/Scintillator/ScintDigiAlgs/src/ScintWaveformDigiAlg.cxx b/Scintillator/ScintDigiAlgs/src/ScintWaveformDigiAlg.cxx
index 3cb70517..9d1ae371 100644
--- a/Scintillator/ScintDigiAlgs/src/ScintWaveformDigiAlg.cxx
+++ b/Scintillator/ScintDigiAlgs/src/ScintWaveformDigiAlg.cxx
@@ -3,6 +3,7 @@
 #include "ScintSimEvent/ScintHitIdHelper.h"
 
 #include <map>
+#include <cmath>
 
 
 ScintWaveformDigiAlg::ScintWaveformDigiAlg(const std::string& name, 
@@ -170,8 +171,8 @@ ScintWaveformDigiAlg::execute(const EventContext& ctx) const {
     // Subtract count from basleine and add result to correct waveform vector
     for (const auto& c : counts) {
 
-      unsigned int baseline = m_digiTool->generate_baseline(m_base_mean, m_base_rms);
-      int value = baseline - c.second;
+      double baseline = m_digiTool->generate_baseline(m_base_mean, m_base_rms);
+      int value = std::round(baseline - c.second);
 
       if (value < 0) {
 	ATH_MSG_WARNING("Found pulse " << c.second << " larger than baseline " << c.first);
diff --git a/Waveform/WaveDigiTools/WaveDigiTools/IWaveformDigitisationTool.h b/Waveform/WaveDigiTools/WaveDigiTools/IWaveformDigitisationTool.h
index c3035190..37cb7af1 100644
--- a/Waveform/WaveDigiTools/WaveDigiTools/IWaveformDigitisationTool.h
+++ b/Waveform/WaveDigiTools/WaveDigiTools/IWaveformDigitisationTool.h
@@ -51,7 +51,7 @@ public:
   virtual std::vector<float> evaluate_timekernel(TF1* kernel) const = 0;
 
   /// Generate random baseline 
-  virtual unsigned int generate_baseline(int mean, int rms) const = 0;
+  virtual float generate_baseline(float mean, float rms) const = 0;
  
   /// Create structure to store pulse for each channel
   template <class T> 
diff --git a/Waveform/WaveDigiTools/src/WaveformDigitisationTool.cxx b/Waveform/WaveDigiTools/src/WaveformDigitisationTool.cxx
index 375519e6..3a48027d 100644
--- a/Waveform/WaveDigiTools/src/WaveformDigitisationTool.cxx
+++ b/Waveform/WaveDigiTools/src/WaveformDigitisationTool.cxx
@@ -41,7 +41,7 @@ WaveformDigitisationTool::evaluate_timekernel(TF1* kernel) const {
   return timekernel;
 }
 
-unsigned int 
-WaveformDigitisationTool::generate_baseline(int mean, int rms) const {
+float
+WaveformDigitisationTool::generate_baseline(float mean, float rms) const {
   return m_random->Gaus(mean, rms);
 }
diff --git a/Waveform/WaveDigiTools/src/WaveformDigitisationTool.h b/Waveform/WaveDigiTools/src/WaveformDigitisationTool.h
index e2dd5169..b6554c33 100644
--- a/Waveform/WaveDigiTools/src/WaveformDigitisationTool.h
+++ b/Waveform/WaveDigiTools/src/WaveformDigitisationTool.h
@@ -32,7 +32,7 @@ class WaveformDigitisationTool: public extends<AthAlgTool, IWaveformDigitisation
   std::vector<float> evaluate_timekernel(TF1* kernel) const;
 
   /// Generate random baseline 
-  unsigned int generate_baseline(int mean, int rms) const;
+  float generate_baseline(float mean, float rms) const;
 
 
  private:
-- 
GitLab