From 6fd81fa6ec426992f9d2029cdc1ba2cc2829eb46 Mon Sep 17 00:00:00 2001
From: Deion Elgin Fellers <dfellers@lxplus766.cern.ch>
Date: Wed, 21 Dec 2022 02:48:39 +0100
Subject: [PATCH] setup calo energy calibration for MC

---
 Calorimeter/CaloRecAlgs/python/CaloRecAlgsConfig.py  |  9 ++++-----
 Calorimeter/CaloRecAlgs/src/CaloRecAlg.cxx           |  7 +++----
 Calorimeter/CaloRecTools/python/CaloRecToolConfig.py |  9 ++++++++-
 .../Reconstruction/scripts/faser_reco.py             | 12 +++++-------
 4 files changed, 20 insertions(+), 17 deletions(-)

diff --git a/Calorimeter/CaloRecAlgs/python/CaloRecAlgsConfig.py b/Calorimeter/CaloRecAlgs/python/CaloRecAlgsConfig.py
index 83839b9cb..c49770ad2 100644
--- a/Calorimeter/CaloRecAlgs/python/CaloRecAlgsConfig.py
+++ b/Calorimeter/CaloRecAlgs/python/CaloRecAlgsConfig.py
@@ -19,12 +19,11 @@ def CalorimeterReconstructionCfg(flags, **kwargs):
     kwargs.setdefault("CaloHitContainerKey", "CaloHits")
     kwargs.setdefault("PreshowerHitContainerKey", "PreshowerHits")
 
-    recoAlg = CompFactory.CaloRecAlg("CaloRecAlg", **kwargs)
-    acc.addEventAlgo(recoAlg)
-
-    dbInstance = kwargs.get("dbInstance", "TRIGGER_OFL") # what should this be set to???
+    acc.merge(CaloRecToolCfg(flags, **kwargs))
+    kwargs.pop("MC_calibTag")  # Remove this if it is specified so it does not get pased to CaloRecAlg
 
-    acc.merge(CaloRecToolCfg(flags))
+    recoAlg = CompFactory.CaloRecAlg("CaloRecAlg", isMC = flags.Input.isMC, **kwargs)
+    acc.addEventAlgo(recoAlg)
 
     return acc
 
diff --git a/Calorimeter/CaloRecAlgs/src/CaloRecAlg.cxx b/Calorimeter/CaloRecAlgs/src/CaloRecAlg.cxx
index f4f78d488..b6df5fed6 100644
--- a/Calorimeter/CaloRecAlgs/src/CaloRecAlg.cxx
+++ b/Calorimeter/CaloRecAlgs/src/CaloRecAlg.cxx
@@ -91,12 +91,11 @@ StatusCode CaloRecAlg::execute(const EventContext& ctx) const {
     ATH_MSG_DEBUG("calo_hit filled has charge of " << charge << " pC");
 
     float gainRatio = 1.0;
-    if (m_isMC) {
-      gainRatio = 1.0; // put dummy value for now, this will end up being ratio of digi scale factors
-    } else {
+    if (!m_isMC) { // MC already has correct MIP charge stored in MIPcharge_ref, so only need to to HV extrapolation with reral data
       gainRatio = extrapolateHVgain(hit->channel());
-      ATH_MSG_DEBUG("HV gain ratio = " << gainRatio );
     }
+    ATH_MSG_DEBUG("HV gain ratio = " << gainRatio );
+
 
     float Nmip = (charge * gainRatio) / MIPcharge_ref;
     ATH_MSG_DEBUG("Nmip = " << Nmip );
diff --git a/Calorimeter/CaloRecTools/python/CaloRecToolConfig.py b/Calorimeter/CaloRecTools/python/CaloRecToolConfig.py
index 65be875da..473a70f73 100644
--- a/Calorimeter/CaloRecTools/python/CaloRecToolConfig.py
+++ b/Calorimeter/CaloRecTools/python/CaloRecToolConfig.py
@@ -19,8 +19,15 @@ def CaloRecToolCfg(flags, name="CaloRecTool", **kwargs):
     # Probably need to figure this out!
     dbInstance = kwargs.get("dbInstance", "TRIGGER_OFL")
 
+    MC_calibTag = kwargs.get("MC_calibTag", "")
+
+    # MC calibration db folder MIP_ref has version tags
+    if len(MC_calibTag) > 0:
+        acc.merge(addFolders(flags, "/WAVE/Calibration/MIP_ref", dbInstance, className="CondAttrListCollection", tag=MC_calibTag))
+    else:
+        acc.merge(addFolders(flags, "/WAVE/Calibration/MIP_ref", dbInstance, className="CondAttrListCollection"))
+
     acc.merge(addFolders(flags, "/WAVE/Calibration/HV", dbInstance, className="CondAttrListCollection"))
-    acc.merge(addFolders(flags, "/WAVE/Calibration/MIP_ref", dbInstance, className="CondAttrListCollection"))
 
     return acc
 
diff --git a/Control/CalypsoExample/Reconstruction/scripts/faser_reco.py b/Control/CalypsoExample/Reconstruction/scripts/faser_reco.py
index b470cb3fd..a4f7207db 100755
--- a/Control/CalypsoExample/Reconstruction/scripts/faser_reco.py
+++ b/Control/CalypsoExample/Reconstruction/scripts/faser_reco.py
@@ -33,6 +33,8 @@ parser.add_argument("-v", "--verbose", action='store_true',
                     help="Turn on DEBUG output")
 parser.add_argument("--isMC", action='store_true',
                     help="Running on digitised MC rather than data")
+parser.add_argument("--MC_calibTag", default="",
+                    help="Specify tag used to reconstruct MC calo energy: (WAVE-Calibration-01-LG-nofilt, WAVE-Calibration-01-LG, WAVE-Calibration-01-HG-nofilt, or WAVE-Calibration-01-HG) ")
 parser.add_argument("--testBeam", action='store_true',
                     help="Set geometry for 2021 test beam")
 
@@ -194,14 +196,10 @@ if useLHC:
 from WaveRecAlgs.WaveRecAlgsConfig import WaveformReconstructionCfg    
 acc.merge(WaveformReconstructionCfg(ConfigFlags))
 
-# Calorimeter reconstruction
-if args.isMC:
-    # Not ready for MC quite yet
-    pass
-
-elif useCal:
+# Calorimeter Energy reconstruction
+if useCal:
     from CaloRecAlgs.CaloRecAlgsConfig import CalorimeterReconstructionCfg
-    acc.merge(CalorimeterReconstructionCfg(ConfigFlags))
+    acc.merge(CalorimeterReconstructionCfg(ConfigFlags, MC_calibTag=args.MC_calibTag))
 
 # Tracker clusters
 from TrackerPrepRawDataFormation.TrackerPrepRawDataFormationConfig import FaserSCT_ClusterizationCfg
-- 
GitLab