From 42ffc23f86616bb55f6454a7138703b9072bd837 Mon Sep 17 00:00:00 2001
From: Dave Casper <dcasper@uci.edu>
Date: Mon, 24 Jan 2022 03:43:11 -0800
Subject: [PATCH] Compatibility changes for waveform digi

---
 .../CaloDigiAlgs/python/CaloDigiAlgsConfig.py  | 11 +++++++----
 .../CaloDigiAlgs/src/CaloWaveformDigiAlg.cxx   | 10 +++++-----
 .../Digitization/scripts/faser_digi.py         | 18 ++++++++++++------
 .../python/ScintDigiAlgsConfig.py              | 10 ++++++----
 .../ScintDigiAlgs/src/ScintWaveformDigiAlg.cxx | 10 +++++-----
 .../python/FaserSCT_DigitizationConfigNew.py   |  3 ++-
 6 files changed, 37 insertions(+), 25 deletions(-)

diff --git a/Calorimeter/CaloDigiAlgs/python/CaloDigiAlgsConfig.py b/Calorimeter/CaloDigiAlgs/python/CaloDigiAlgsConfig.py
index 6a0b9e35..cd0c9a45 100644
--- a/Calorimeter/CaloDigiAlgs/python/CaloDigiAlgsConfig.py
+++ b/Calorimeter/CaloDigiAlgs/python/CaloDigiAlgsConfig.py
@@ -1,5 +1,6 @@
 # Copyright (C) 2020-2021 CERN for the benefit of the FASER collaboration
 
+from re import VERBOSE
 from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
 from AthenaConfiguration.ComponentFactory import CompFactory
 
@@ -12,9 +13,10 @@ def CaloWaveformDigitizationCfg(flags):
     acc = ComponentAccumulator()
 
     if not flags.Input.isMC:
-        return
+        return acc
 
     acc.merge(CaloWaveformDigiCfg(flags, "CaloWaveformDigiAlg"))
+    acc.merge(CaloWaveformDigitizationOutputCfg(flags))
     return acc
 
 # Return configured digitization algorithm from SIM hits
@@ -46,7 +48,8 @@ def CaloWaveformDigitizationOutputCfg(flags, **kwargs):
     ItemList = [
         "RawWaveformContainer#*"
     ]
-    acc.merge(OutputStreamCfg(flags, "RDO", ItemList))
-    # ostream = acc.getEventAlgo("OutputStreamRDO")
-    # ostream.TakeItemsFromInput = True # Don't know what this does
+    acc.merge(OutputStreamCfg(flags, "RDO"))
+    ostream = acc.getEventAlgo("OutputStreamRDO")
+    ostream.TakeItemsFromInput = True # Copies all data from input file to output
+    ostream.ItemList += ItemList
     return acc
diff --git a/Calorimeter/CaloDigiAlgs/src/CaloWaveformDigiAlg.cxx b/Calorimeter/CaloDigiAlgs/src/CaloWaveformDigiAlg.cxx
index 718dcb4f..8e60aefa 100644
--- a/Calorimeter/CaloDigiAlgs/src/CaloWaveformDigiAlg.cxx
+++ b/Calorimeter/CaloDigiAlgs/src/CaloWaveformDigiAlg.cxx
@@ -63,17 +63,17 @@ CaloWaveformDigiAlg::execute(const EventContext& ctx) const {
   ATH_CHECK( caloHitHandle.isValid() );
   ATH_MSG_DEBUG("Found ReadHandle for CaloHitCollection " << m_caloHitContainerKey);
 
-  if (caloHitHandle->size() == 0) {
-    ATH_MSG_DEBUG("CaloHitCollection found with zero length!");
-    return StatusCode::SUCCESS;
-  }
-
   // Find the output waveform container
   SG::WriteHandle<RawWaveformContainer> waveformContainerHandle(m_waveformContainerKey, ctx);
   ATH_CHECK( waveformContainerHandle.record( std::make_unique<RawWaveformContainer>()) );
 
   ATH_MSG_DEBUG("WaveformsContainer '" << waveformContainerHandle.name() << "' initialized");
 
+  if (caloHitHandle->size() == 0) {
+    ATH_MSG_DEBUG("CaloHitCollection found with zero length!");
+    return StatusCode::SUCCESS;
+  }
+  
   // Digitise the hits
   CHECK( m_digiTool->digitise<CaloHitCollection>(caloHitHandle.ptr(),
 						  waveformContainerHandle.ptr(), m_kernel) );
diff --git a/Control/CalypsoExample/Digitization/scripts/faser_digi.py b/Control/CalypsoExample/Digitization/scripts/faser_digi.py
index b9d0708b..5ef81899 100755
--- a/Control/CalypsoExample/Digitization/scripts/faser_digi.py
+++ b/Control/CalypsoExample/Digitization/scripts/faser_digi.py
@@ -62,7 +62,7 @@ from CalypsoConfiguration.AllConfigFlags import ConfigFlags
 Configurable.configurableRun3Behavior = True
     
 # Flags for this job
-ConfigFlags.Input.isMC = False                   # Needed to bypass autoconfig
+ConfigFlags.Input.isMC = True                    # Needed to bypass autoconfig
 ConfigFlags.IOVDb.DatabaseInstance = "OFLP200"   # Use MC conditions for now
 
 ConfigFlags.Input.ProjectName = "mc20"
@@ -126,6 +126,12 @@ acc.merge(FaserGeometryCfg(ConfigFlags))
 from FaserSCT_Digitization.FaserSCT_DigitizationConfigNew import FaserSCT_DigitizationCfg
 acc.merge(FaserSCT_DigitizationCfg(ConfigFlags))
 
+from CaloDigiAlgs.CaloDigiAlgsConfig import CaloWaveformDigitizationCfg
+acc.merge(CaloWaveformDigitizationCfg(ConfigFlags))
+
+from ScintDigiAlgs.ScintDigiAlgsConfig import ScintWaveformDigitizationCfg
+acc.merge(ScintWaveformDigitizationCfg(ConfigFlags))
+
 # from WaveRecAlgs.WaveRecAlgsConfig import WaveformReconstructionCfg    
 # acc.merge(WaveformReconstructionCfg(ConfigFlags))
 
@@ -173,11 +179,11 @@ acc.merge(FaserSCT_DigitizationCfg(ConfigFlags))
 # print( acc.getEventAlgo("OutputStreamxAOD").ItemList )
 
 # Hack to avoid problem with our use of MC databases when isMC = False
-replicaSvc = acc.getService("DBReplicaSvc")
-replicaSvc.COOLSQLiteVetoPattern = ""
-replicaSvc.UseCOOLSQLite = True
-replicaSvc.UseCOOLFrontier = False
-replicaSvc.UseGeomSQLite = True
+# replicaSvc = acc.getService("DBReplicaSvc")
+# replicaSvc.COOLSQLiteVetoPattern = ""
+# replicaSvc.UseCOOLSQLite = True
+# replicaSvc.UseCOOLFrontier = False
+# replicaSvc.UseGeomSQLite = True
 
 # Configure verbosity    
 # ConfigFlags.dump()
diff --git a/Scintillator/ScintDigiAlgs/python/ScintDigiAlgsConfig.py b/Scintillator/ScintDigiAlgs/python/ScintDigiAlgsConfig.py
index 7c322060..243e4493 100644
--- a/Scintillator/ScintDigiAlgs/python/ScintDigiAlgsConfig.py
+++ b/Scintillator/ScintDigiAlgs/python/ScintDigiAlgsConfig.py
@@ -21,12 +21,13 @@ def ScintWaveformDigitizationCfg(flags):
     acc = ComponentAccumulator()
 
     if not flags.Input.isMC:
-        return
+        return acc
 
     if "TB" not in flags.GeoModel.FaserVersion:
         acc.merge(ScintWaveformDigiCfg(flags, "TimingWaveformDigiAlg", "Trigger"))
     acc.merge(ScintWaveformDigiCfg(flags, "VetoWaveformDigiAlg", "Veto"))
     acc.merge(ScintWaveformDigiCfg(flags, "PreshowerWaveformDigiAlg", "Preshower"))
+    acc.merge(ScintWaveformDigitizationOutputCfg(flags))
     return acc
 
 # Return configured digitization algorithm from SIM hits
@@ -58,7 +59,8 @@ def ScintWaveformDigitizationOutputCfg(flags, **kwargs):
     ItemList = [
         "RawWaveformContainer#*"
     ]
-    acc.merge(OutputStreamCfg(flags, "RDO", ItemList))
-    # ostream = acc.getEventAlgo("OutputStreamRDO")
-    # ostream.TakeItemsFromInput = True # Don't know what this does
+    acc.merge(OutputStreamCfg(flags, "RDO"))
+    ostream = acc.getEventAlgo("OutputStreamRDO")
+    ostream.TakeItemsFromInput = True # Copies all data from input file to output
+    ostream.ItemList += ItemList
     return acc
diff --git a/Scintillator/ScintDigiAlgs/src/ScintWaveformDigiAlg.cxx b/Scintillator/ScintDigiAlgs/src/ScintWaveformDigiAlg.cxx
index 03c1873d..b2508041 100644
--- a/Scintillator/ScintDigiAlgs/src/ScintWaveformDigiAlg.cxx
+++ b/Scintillator/ScintDigiAlgs/src/ScintWaveformDigiAlg.cxx
@@ -64,17 +64,17 @@ ScintWaveformDigiAlg::execute(const EventContext& ctx) const {
   ATH_CHECK( scintHitHandle.isValid() );
   ATH_MSG_DEBUG("Found ReadHandle for ScintHitCollection " << m_scintHitContainerKey);
 
-  if (scintHitHandle->size() == 0) {
-    ATH_MSG_DEBUG("ScintHitCollection found with zero length!");
-    return StatusCode::SUCCESS;
-  }
-
   // Find the output waveform container
   SG::WriteHandle<RawWaveformContainer> waveformContainerHandle(m_waveformContainerKey, ctx);
   ATH_CHECK( waveformContainerHandle.record( std::make_unique<RawWaveformContainer>()) );
 
   ATH_MSG_DEBUG("WaveformsContainer '" << waveformContainerHandle.name() << "' initialized");
 
+  if (scintHitHandle->size() == 0) {
+    ATH_MSG_DEBUG("ScintHitCollection found with zero length!");
+    return StatusCode::SUCCESS;
+  }
+
   // Digitise the hits
   CHECK( m_digiTool->digitise<ScintHitCollection>(scintHitHandle.ptr(),
 						  waveformContainerHandle.ptr(), m_kernel) );
diff --git a/Tracker/TrackerDigitization/FaserSCT_Digitization/python/FaserSCT_DigitizationConfigNew.py b/Tracker/TrackerDigitization/FaserSCT_Digitization/python/FaserSCT_DigitizationConfigNew.py
index a4bd9fb2..c9f267da 100644
--- a/Tracker/TrackerDigitization/FaserSCT_Digitization/python/FaserSCT_DigitizationConfigNew.py
+++ b/Tracker/TrackerDigitization/FaserSCT_Digitization/python/FaserSCT_DigitizationConfigNew.py
@@ -240,9 +240,10 @@ def FaserSCT_OutputCfg(flags):
     if flags.Digitization.TruthOutput:
         ItemList += ["TrackerSimDataCollection#*"]
         acc.merge(TruthDigitizationOutputCfg(flags))
-    acc.merge(OutputStreamCfg(flags, "RDO", ItemList))
+    acc.merge(OutputStreamCfg(flags, "RDO"))
     ostream = acc.getEventAlgo("OutputStreamRDO")
     ostream.TakeItemsFromInput = True
+    ostream.ItemList += ItemList
     return acc
 
 
-- 
GitLab