From c22c3fb49e976d83391ece7933c454c538e4c6fd Mon Sep 17 00:00:00 2001
From: Eric Torrence <eric.torrence@cern.ch>
Date: Wed, 11 May 2022 11:00:39 -0700
Subject: [PATCH] Add channels to waveform digi

---
 Calorimeter/CaloDigiAlgs/CMakeLists.txt            |  4 +++-
 .../CaloDigiAlgs/python/CaloDigiAlgsConfig.py      |  7 ++++++-
 .../CaloDigiAlgs/src/CaloWaveformDigiAlg.cxx       |  2 ++
 Calorimeter/CaloDigiAlgs/src/CaloWaveformDigiAlg.h |  6 ++++++
 Scintillator/ScintDigiAlgs/CMakeLists.txt          |  4 +++-
 .../ScintDigiAlgs/python/ScintDigiAlgsConfig.py    |  6 +++++-
 .../ScintDigiAlgs/src/ScintWaveformDigiAlg.cxx     |  2 ++
 .../ScintDigiAlgs/src/ScintWaveformDigiAlg.h       |  6 ++++++
 .../ScintSimEvent/ScintSimEvent/ScintHit.h         |  2 +-
 .../python/FaserSCT_DigitizationConfigNew.py       |  2 +-
 Waveform/WaveRecAlgs/python/WaveRecAlgsConfig.py   | 14 --------------
 .../src/PseudoSimToWaveformRecTool.cxx             |  4 ----
 .../WaveRecTools/src/PseudoSimToWaveformRecTool.h  |  4 ----
 13 files changed, 35 insertions(+), 28 deletions(-)

diff --git a/Calorimeter/CaloDigiAlgs/CMakeLists.txt b/Calorimeter/CaloDigiAlgs/CMakeLists.txt
index 5a4de58a..89d20eae 100644
--- a/Calorimeter/CaloDigiAlgs/CMakeLists.txt
+++ b/Calorimeter/CaloDigiAlgs/CMakeLists.txt
@@ -9,7 +9,9 @@ atlas_subdir( CaloDigiAlgs )
 atlas_add_component( CaloDigiAlgs
                      src/*.cxx src/*.h
                      src/components/*.cxx
-                     LINK_LIBRARIES AthenaBaseComps Identifier FaserCaloIdentifier  StoreGateLib WaveRawEvent FaserCaloSimEvent WaveDigiToolsLib)
+                     LINK_LIBRARIES AthenaBaseComps Identifier FaserCaloIdentifier  
+		     WaveformConditionsToolsLib StoreGateLib WaveRawEvent 
+		     FaserCaloSimEvent WaveDigiToolsLib)
 
 atlas_install_python_modules( python/*.py )
 
diff --git a/Calorimeter/CaloDigiAlgs/python/CaloDigiAlgsConfig.py b/Calorimeter/CaloDigiAlgs/python/CaloDigiAlgsConfig.py
index ce45e625..793f7340 100644
--- a/Calorimeter/CaloDigiAlgs/python/CaloDigiAlgsConfig.py
+++ b/Calorimeter/CaloDigiAlgs/python/CaloDigiAlgsConfig.py
@@ -6,6 +6,7 @@ from AthenaConfiguration.ComponentFactory import CompFactory
 
 from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg
 
+from WaveformConditionsTools.WaveformCableMappingConfig import WaveformCableMappingCfg
 
 # One stop shopping for normal FASER data
 def CaloWaveformDigitizationCfg(flags):
@@ -17,6 +18,8 @@ def CaloWaveformDigitizationCfg(flags):
 
     acc.merge(CaloWaveformDigiCfg(flags, "CaloWaveformDigiAlg"))
     acc.merge(CaloWaveformDigitizationOutputCfg(flags))
+    acc.merge(WaveformCableMappingCfg(flags))
+
     return acc
 
 # Return configured digitization algorithm from SIM hits
@@ -54,6 +57,8 @@ def CaloWaveformDigitizationOutputCfg(flags, **kwargs):
     ]
     acc.merge(OutputStreamCfg(flags, "RDO"))
     ostream = acc.getEventAlgo("OutputStreamRDO")
-    ostream.TakeItemsFromInput = True # Copies all data from input file to output
+    # ostream.TakeItemsFromInput = True # Copies all data from input file to output
+    # ostream.TakeItemsFromInput = False
+    # Try turning this off
     ostream.ItemList += ItemList
     return acc
diff --git a/Calorimeter/CaloDigiAlgs/src/CaloWaveformDigiAlg.cxx b/Calorimeter/CaloDigiAlgs/src/CaloWaveformDigiAlg.cxx
index c54e1e37..70b81b2c 100644
--- a/Calorimeter/CaloDigiAlgs/src/CaloWaveformDigiAlg.cxx
+++ b/Calorimeter/CaloDigiAlgs/src/CaloWaveformDigiAlg.cxx
@@ -20,6 +20,7 @@ CaloWaveformDigiAlg::initialize() {
 
   // Initalize tools
   ATH_CHECK( m_digiTool.retrieve() );
+  ATH_CHECK( m_mappingTool.retrieve() );
 
   // Set key to read waveform from
   ATH_CHECK( m_caloHitContainerKey.initialize() );
@@ -113,6 +114,7 @@ CaloWaveformDigiAlg::execute(const EventContext& ctx) const {
     RawWaveform* wfm = new RawWaveform();
     wfm->setWaveform(0, w.second);
     wfm->setIdentifier(w.first);
+    wfm->setChannel(m_mappingTool->getChannelMapping(w.first));
     wfm->setSamples(nsamples);
     waveformContainerHandle->push_back(wfm);
   }
diff --git a/Calorimeter/CaloDigiAlgs/src/CaloWaveformDigiAlg.h b/Calorimeter/CaloDigiAlgs/src/CaloWaveformDigiAlg.h
index 8eeb0a44..25111bc9 100644
--- a/Calorimeter/CaloDigiAlgs/src/CaloWaveformDigiAlg.h
+++ b/Calorimeter/CaloDigiAlgs/src/CaloWaveformDigiAlg.h
@@ -10,6 +10,7 @@
 
 // Tool classes
 #include "WaveDigiTools/IWaveformDigitisationTool.h"
+#include "WaveformConditionsTools/IWaveformCableMappingTool.h"
 
 // Handles
 #include "StoreGate/ReadHandleKey.h"
@@ -79,6 +80,11 @@ class CaloWaveformDigiAlg : public AthReentrantAlgorithm {
   ToolHandle<IWaveformDigitisationTool> m_digiTool
     {this, "WaveformDigitisationTool", "WaveformDigitisationTool"};
 
+  /**
+   * @name Mapping tool
+   */
+  ToolHandle<IWaveformCableMappingTool> m_mappingTool
+    {this, "WaveformCableMappingTool", "WaveformCableMappingTool"};
 
   /**
    * @name Input HITS using SG::ReadHandleKey
diff --git a/Scintillator/ScintDigiAlgs/CMakeLists.txt b/Scintillator/ScintDigiAlgs/CMakeLists.txt
index 3ebe3d69..5c1874e2 100644
--- a/Scintillator/ScintDigiAlgs/CMakeLists.txt
+++ b/Scintillator/ScintDigiAlgs/CMakeLists.txt
@@ -9,7 +9,9 @@ atlas_subdir( ScintDigiAlgs )
 atlas_add_component( ScintDigiAlgs
                      src/*.cxx src/*.h
                      src/components/*.cxx
-                     LINK_LIBRARIES AthenaBaseComps Identifier ScintIdentifier StoreGateLib WaveRawEvent ScintSimEvent WaveDigiToolsLib)
+                     LINK_LIBRARIES AthenaBaseComps Identifier ScintIdentifier 
+		     WaveformConditionsToolsLib StoreGateLib WaveRawEvent 
+		     ScintSimEvent WaveDigiToolsLib)
 
 atlas_install_python_modules( python/*.py )
 
diff --git a/Scintillator/ScintDigiAlgs/python/ScintDigiAlgsConfig.py b/Scintillator/ScintDigiAlgs/python/ScintDigiAlgsConfig.py
index 292a19c0..8ea29b33 100644
--- a/Scintillator/ScintDigiAlgs/python/ScintDigiAlgsConfig.py
+++ b/Scintillator/ScintDigiAlgs/python/ScintDigiAlgsConfig.py
@@ -5,6 +5,8 @@ from AthenaConfiguration.ComponentFactory import CompFactory
 
 from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg
 
+from WaveformConditionsTools.WaveformCableMappingConfig import WaveformCableMappingCfg
+
 # Crystallball parameter dictionary used in simulated digitized wave reconstruction.
 # Crystalball function Parameters estimated from Deion's slides uploaded at
 # https://indico.cern.ch/event/1099652/contributions/4626975/attachments/2352595/4013927/Faser-Physics-run3933-plots.pdf  (20/01/2022)
@@ -35,6 +37,7 @@ def ScintWaveformDigitizationCfg(flags):
     acc.merge(ScintWaveformDigiCfg(flags, "VetoWaveformDigiAlg", "Veto"))
     acc.merge(ScintWaveformDigiCfg(flags, "PreshowerWaveformDigiAlg", "Preshower"))
     acc.merge(ScintWaveformDigitizationOutputCfg(flags))
+    acc.merge(WaveformCableMappingCfg(flags))
     return acc
 
 # Return configured digitization algorithm from SIM hits
@@ -72,6 +75,7 @@ def ScintWaveformDigitizationOutputCfg(flags, **kwargs):
     ]
     acc.merge(OutputStreamCfg(flags, "RDO"))
     ostream = acc.getEventAlgo("OutputStreamRDO")
-    ostream.TakeItemsFromInput = True # Copies all data from input file to output
+    # ostream.TakeItemsFromInput = True # Copies all data from input file to output
+    # ostream.TakeItemsFromInput = False
     ostream.ItemList += ItemList
     return acc
diff --git a/Scintillator/ScintDigiAlgs/src/ScintWaveformDigiAlg.cxx b/Scintillator/ScintDigiAlgs/src/ScintWaveformDigiAlg.cxx
index d5235a92..5ad0fe1e 100644
--- a/Scintillator/ScintDigiAlgs/src/ScintWaveformDigiAlg.cxx
+++ b/Scintillator/ScintDigiAlgs/src/ScintWaveformDigiAlg.cxx
@@ -17,6 +17,7 @@ ScintWaveformDigiAlg::initialize() {
 
   // Initalize tools
   ATH_CHECK( m_digiTool.retrieve() );
+  ATH_CHECK( m_mappingTool.retrieve() );
 
   // Set key to read waveform from
   ATH_CHECK( m_scintHitContainerKey.initialize() );
@@ -118,6 +119,7 @@ ScintWaveformDigiAlg::execute(const EventContext& ctx) const {
     RawWaveform* wfm = new RawWaveform();
     wfm->setWaveform(0, w.second);
     wfm->setIdentifier(w.first);
+    wfm->setChannel(m_mappingTool->getChannelMapping(w.first));
     wfm->setSamples(nsamples);
     waveformContainerHandle->push_back(wfm);
   }
diff --git a/Scintillator/ScintDigiAlgs/src/ScintWaveformDigiAlg.h b/Scintillator/ScintDigiAlgs/src/ScintWaveformDigiAlg.h
index de033706..363218f9 100644
--- a/Scintillator/ScintDigiAlgs/src/ScintWaveformDigiAlg.h
+++ b/Scintillator/ScintDigiAlgs/src/ScintWaveformDigiAlg.h
@@ -10,6 +10,7 @@
 
 // Tool classes
 #include "WaveDigiTools/IWaveformDigitisationTool.h"
+#include "WaveformConditionsTools/IWaveformCableMappingTool.h"
 
 // Handles
 #include "StoreGate/ReadHandleKey.h"
@@ -92,6 +93,11 @@ class ScintWaveformDigiAlg : public AthReentrantAlgorithm {
   ToolHandle<IWaveformDigitisationTool> m_digiTool
     {this, "WaveformDigitisationTool", "WaveformDigitisationTool"};
 
+  /**
+   * @name Mapping tool
+   */
+  ToolHandle<IWaveformCableMappingTool> m_mappingTool
+    {this, "WaveformCableMappingTool", "WaveformCableMappingTool"};
 
   /**
    * @name Input HITS using SG::ReadHandleKey
diff --git a/Scintillator/ScintSimEvent/ScintSimEvent/ScintHit.h b/Scintillator/ScintSimEvent/ScintSimEvent/ScintHit.h
index dbd77e27..eb79c2fb 100644
--- a/Scintillator/ScintSimEvent/ScintSimEvent/ScintHit.h
+++ b/Scintillator/ScintSimEvent/ScintSimEvent/ScintHit.h
@@ -82,7 +82,7 @@ public:
   // Const methods:
   ///////////////////////////////////////////////////////////////////
 
-  // This is the HitId, used in Geant, this is not the detector Identifier
+  // This is the HitId, used in Geant. This is not the detector Identifier
   unsigned int identify() const;
 
   // This is the detector readout Identifier (pmt Identifier)
diff --git a/Tracker/TrackerDigitization/FaserSCT_Digitization/python/FaserSCT_DigitizationConfigNew.py b/Tracker/TrackerDigitization/FaserSCT_Digitization/python/FaserSCT_DigitizationConfigNew.py
index c9f267da..6ae2b277 100644
--- a/Tracker/TrackerDigitization/FaserSCT_Digitization/python/FaserSCT_DigitizationConfigNew.py
+++ b/Tracker/TrackerDigitization/FaserSCT_Digitization/python/FaserSCT_DigitizationConfigNew.py
@@ -242,7 +242,7 @@ def FaserSCT_OutputCfg(flags):
         acc.merge(TruthDigitizationOutputCfg(flags))
     acc.merge(OutputStreamCfg(flags, "RDO"))
     ostream = acc.getEventAlgo("OutputStreamRDO")
-    ostream.TakeItemsFromInput = True
+    #ostream.TakeItemsFromInput = True   # Don't write hits to RDO by default
     ostream.ItemList += ItemList
     return acc
 
diff --git a/Waveform/WaveRecAlgs/python/WaveRecAlgsConfig.py b/Waveform/WaveRecAlgs/python/WaveRecAlgsConfig.py
index 8bfa3255..daf5ae7c 100644
--- a/Waveform/WaveRecAlgs/python/WaveRecAlgsConfig.py
+++ b/Waveform/WaveRecAlgs/python/WaveRecAlgsConfig.py
@@ -19,20 +19,6 @@ def WaveformReconstructionCfg(flags):
     if not flags.Input.isMC:
         acc.merge(WaveformClockRecCfg(flags, "ClockRecAlg"))
 
-    if flags.Input.isMC:
-        if "TB" not in flags.GeoModel.FaserVersion:
-            acc.merge(PseudoScintHitToWaveformRecCfg(flags, "PseudoTriggerHitWaveformRecAlg", "Trigger"))
-
-        acc.merge(PseudoScintHitToWaveformRecCfg(flags, "PseudoVetoHitToWaveformRecAlg", "Veto"))
-        acc.merge(PseudoScintHitToWaveformRecCfg(flags, "PseudoPresehowerHitWaveformRecAlg", "Preshower"))
-        acc.merge(PseudoCaloHitToWaveformRecCfg(flags, "PseudoCaloHitWaveformRecAlg"))    
-
-        # Also need cable mapping here
-        from WaveformConditionsTools.WaveformCableMappingConfig import WaveformCableMappingCfg
-        acc.merge(WaveformCableMappingCfg(flags))
-
-        return acc
-
     acc.merge(WaveformHitRecCfg(flags, "TriggerWaveformRecAlg", "Trigger"))
     acc.merge(WaveformHitRecCfg(flags, "VetoWaveformRecAlg", "Veto"))
     acc.merge(WaveformHitRecCfg(flags, "PreshowerWaveformRecAlg", "Preshower"))
diff --git a/Waveform/WaveRecTools/src/PseudoSimToWaveformRecTool.cxx b/Waveform/WaveRecTools/src/PseudoSimToWaveformRecTool.cxx
index c0a2a928..93ae1397 100644
--- a/Waveform/WaveRecTools/src/PseudoSimToWaveformRecTool.cxx
+++ b/Waveform/WaveRecTools/src/PseudoSimToWaveformRecTool.cxx
@@ -25,7 +25,6 @@ PseudoSimToWaveformRecTool::initialize() {
   ATH_MSG_INFO( name() << "::initalize()" );
 
   ATH_CHECK( m_mappingTool.retrieve() );
-// ATH_CHECK( m_timingTool.retrieve() );
 
   return StatusCode::SUCCESS;
 }
@@ -49,15 +48,12 @@ PseudoSimToWaveformRecTool::make_hits(const std::map<Identifier, float>& sums,
     xAOD::WaveformHit* hit = new xAOD::WaveformHit();
     container->push_back(hit);
 
-    // offset = m_timingTool->triggerTimeOffset(hit->channel());
-
     hit->set_identifier(id.first);
     hit->set_channel(m_mappingTool->getChannelMapping(id.first));
     hit->set_peak(0);
     hit->set_mean(0);
     hit->set_width(0);
     hit->set_integral(id.second); 
-    // hit->set_localtime(trigger_time + offset);
     hit->set_localtime(0);
     hit->set_trigger_time(0);
     hit->set_raw_peak(0);
diff --git a/Waveform/WaveRecTools/src/PseudoSimToWaveformRecTool.h b/Waveform/WaveRecTools/src/PseudoSimToWaveformRecTool.h
index eb291106..e1174797 100644
--- a/Waveform/WaveRecTools/src/PseudoSimToWaveformRecTool.h
+++ b/Waveform/WaveRecTools/src/PseudoSimToWaveformRecTool.h
@@ -15,7 +15,6 @@
 
 // Tool classes
 #include "WaveformConditionsTools/IWaveformCableMappingTool.h"
-#include "WaveformConditionsTools/IWaveformTimingTool.h"
 
 //Gaudi
 #include "GaudiKernel/ToolHandle.h"
@@ -39,9 +38,6 @@ class PseudoSimToWaveformRecTool: public extends<AthAlgTool, IPseudoSimToWavefor
   ToolHandle<IWaveformCableMappingTool> m_mappingTool
     {this, "WaveformCableMappingTool", "WaveformCableMappingTool"};
 
-  //ToolHandle<IWaveformTimingTool> m_timingTool
-  //  {this, "WaveformTimingTool", "WaveformTimingTool"};
-
 };
 
 #endif // WAVERECTOOLS_PSEUDOSIMTOWAVEFORMRECTOOL_H
-- 
GitLab