From 0e730905cdd28e491eafb0574be8de74ed91747a Mon Sep 17 00:00:00 2001
From: Sylvester Joosten <sjoosten@anl.gov>
Date: Wed, 17 Nov 2021 21:37:52 +0000
Subject: [PATCH] properly use DAQ as defined in athena/calibrations

---
 options/reconstruction.ecal.py | 33 +++++++++++++------
 options/reconstruction.hcal.py | 33 +++++++++++++------
 options/reconstruction.py      | 58 +++++++++++++---------------------
 options/reconstruction.raw.py  | 57 +++++++++++++--------------------
 4 files changed, 90 insertions(+), 91 deletions(-)

diff --git a/options/reconstruction.ecal.py b/options/reconstruction.ecal.py
index 9407fae8..f80282ae 100644
--- a/options/reconstruction.ecal.py
+++ b/options/reconstruction.ecal.py
@@ -14,12 +14,33 @@ detector_path = ""
 if "DETECTOR_PATH" in os.environ :
   detector_path = str(os.environ["DETECTOR_PATH"])
 
+detector_version = 'default'
+if "JUGGLER_DETECTOR_VERSION" in os.environ:
+    env_version = str(os.environ["JUGGLER_DETECTOR_VERSION"])
+    if 'acadia' in env_version:
+        detector_version = 'acadia'
 compact_path = os.path.join(detector_path, detector_name)
 
+
 # CAL reconstruction
 # get sampling fractions from system environment variable
 ci_ecal_sf = float(os.environ.get("CI_ECAL_SAMP_FRAC", 0.253))
 
+# input calorimeter DAQ info
+calo_daq = {}
+with open('{}/calibrations/calo_digi_{}.json'.format(detector_path, detector_version)) as f:
+    calo_config = json.load(f)
+    ## add proper ADC capacity based on bit depth
+    for sys in calo_config:
+        cfg = calo_config[sys]
+        calo_daq[sys] = {
+            'dynamicRangeADC': eval(cfg['dynamicRange']),
+            'capacityADC': 2**int(cfg['capacityBitsADC']),
+            'pedestalMean': int(cfg['pedestalMean']),
+            'pedestalSigma': float(cfg['pedestalSigma'])
+        }
+print(calo_daq)
+
 # input and output
 input_sims = [f.strip() for f in str.split(os.environ["JUGGLER_SIM_FILE"], ",") if f.strip()]
 output_rec = str(os.environ["JUGGLER_REC_FILE"])
@@ -55,11 +76,7 @@ podin = PodioInput("PodioReader", collections=sim_coll)
 algorithms.append(podin)
 
 # Crystal Endcap Ecal
-ce_ecal_daq = dict(
-        dynamicRangeADC=5.*units.GeV,
-        capacityADC=32768,
-        pedestalMean=400,
-        pedestalSigma=3)
+ce_ecal_daq = calo_daq['ecal_neg_endcap']
 
 ce_ecal_digi = CalHitDigi("ce_ecal_digi",
         inputHitCollection="EcalEndcapNHits",
@@ -97,11 +114,7 @@ ce_ecal_clreco = RecoCoG("ce_ecal_clreco",
 algorithms.append(ce_ecal_clreco)
 
 # Endcap Sampling Ecal
-ci_ecal_daq = dict(
-        dynamicRangeADC=50.*units.MeV,
-        capacityADC=32768,
-        pedestalMean=400,
-        pedestalSigma=10)
+ci_ecal_daq = calo_daq['ecal_pos_endcap']
 
 ci_ecal_digi = CalHitDigi("ci_ecal_digi",
         inputHitCollection="EcalEndcapPHits",
diff --git a/options/reconstruction.hcal.py b/options/reconstruction.hcal.py
index 0bf946c6..3f9152da 100644
--- a/options/reconstruction.hcal.py
+++ b/options/reconstruction.hcal.py
@@ -14,6 +14,12 @@ detector_path = ""
 if "DETECTOR_PATH" in os.environ :
   detector_path = str(os.environ["DETECTOR_PATH"])
 
+detector_version = 'default'
+if "JUGGLER_DETECTOR_VERSION" in os.environ:
+    env_version = str(os.environ["JUGGLER_DETECTOR_VERSION"])
+    if 'acadia' in env_version:
+        detector_version = 'acadia'
+
 compact_path = os.path.join(detector_path, detector_name)
 
 # CAL reconstruction
@@ -22,6 +28,21 @@ cb_hcal_sf = float(os.environ.get("CB_HCAL_SAMP_FRAC", 0.038))
 ci_hcal_sf = float(os.environ.get("CI_HCAL_SAMP_FRAC", 0.025))
 ce_hcal_sf = float(os.environ.get("CE_HCAL_SAMP_FRAC", 0.025))
 
+# input calorimeter DAQ info
+calo_daq = {}
+with open('{}/calibrations/calo_digi_{}.json'.format(detector_path, detector_version)) as f:
+    calo_config = json.load(f)
+    ## add proper ADC capacity based on bit depth
+    for sys in calo_config:
+        cfg = calo_config[sys]
+        calo_daq[sys] = {
+            'dynamicRangeADC': eval(cfg['dynamicRange']),
+            'capacityADC': 2**int(cfg['capacityBitsADC']),
+            'pedestalMean': int(cfg['pedestalMean']),
+            'pedestalSigma': float(cfg['pedestalSigma'])
+        }
+print(calo_daq)
+
 # input and output
 input_sims = [f.strip() for f in str.split(os.environ["JUGGLER_SIM_FILE"], ",") if f.strip()]
 output_rec = str(os.environ["JUGGLER_REC_FILE"])
@@ -57,11 +78,7 @@ podin = PodioInput("PodioReader", collections=sim_coll)
 algorithms.append(podin)
 
 # Hcal Hadron Endcap
-ci_hcal_daq = dict(
-         dynamicRangeADC=50.*units.MeV,
-         capacityADC=32768,
-         pedestalMean=400,
-         pedestalSigma=10)
+ci_hcal_daq = calo_daq['hcal_pos_endcap']
 
 ci_hcal_digi = CalHitDigi("ci_hcal_digi",
          inputHitCollection="HcalEndcapPHits",
@@ -102,11 +119,7 @@ ci_hcal_clreco = RecoCoG("ci_hcal_clreco",
 algorithms.append(ci_hcal_clreco)
 
 # Hcal Electron Endcap
-ce_hcal_daq = dict(
-        dynamicRangeADC=50.*units.MeV,
-        capacityADC=32768,
-        pedestalMean=400,
-        pedestalSigma=10)
+ce_hcal_daq = calo_daq['hcal_neg_endcap']
 
 ce_hcal_digi = CalHitDigi("ce_hcal_digi",
         inputHitCollection="HcalEndcapNHits",
diff --git a/options/reconstruction.py b/options/reconstruction.py
index 49fd05cd..d26e800e 100644
--- a/options/reconstruction.py
+++ b/options/reconstruction.py
@@ -38,6 +38,21 @@ with open('config/emcal_barrel_calibration.json') as f:
 
 print(calib_data)
 
+# input calorimeter DAQ info
+calo_daq = {}
+with open('{}/calibrations/calo_digi_{}.json'.format(detector_path, detector_version)) as f:
+    calo_config = json.load(f)
+    ## add proper ADC capacity based on bit depth
+    for sys in calo_config:
+        cfg = calo_config[sys]
+        calo_daq[sys] = {
+            'dynamicRangeADC': eval(cfg['dynamicRange']),
+            'capacityADC': 2**int(cfg['capacityBitsADC']),
+            'pedestalMean': int(cfg['pedestalMean']),
+            'pedestalSigma': float(cfg['pedestalSigma'])
+        }
+print(calo_daq)
+
 img_barrel_sf = float(calib_data['sampling_fraction_img'])
 scifi_barrel_sf = float(calib_data['sampling_fraction_scfi'])
 
@@ -213,12 +228,7 @@ trk_b0_reco = TrackerHitReconstruction("trk_b0_reco",
 algorithms.append(trk_b0_reco)
 
 # Crystal Endcap Ecal
-ce_ecal_daq = dict(
-        dynamicRangeADC=5.*units.GeV,
-        capacityADC=32768,
-        pedestalMean=400,
-        pedestalSigma=3)
-
+ce_ecal_daq = calo_daq['ecal_neg_endcap']
 ce_ecal_digi = CalHitDigi("ce_ecal_digi",
         inputHitCollection="EcalEndcapNHits",
         outputHitCollection="EcalEndcapNRawHits",
@@ -261,11 +271,7 @@ ce_ecal_clmerger = ClusterMerger("ce_ecal_clmerger",
 algorithms.append(ce_ecal_clmerger)
 
 # Endcap Sampling Ecal
-ci_ecal_daq = dict(
-        dynamicRangeADC=50.*units.MeV,
-        capacityADC=32768,
-        pedestalMean=400,
-        pedestalSigma=10)
+ci_ecal_daq = calo_daq['ecal_pos_endcap']
 
 ci_ecal_digi = CalHitDigi("ci_ecal_digi",
         inputHitCollection="EcalEndcapPHits",
@@ -315,11 +321,7 @@ ci_ecal_clmerger = ClusterMerger("ci_ecal_clmerger",
 algorithms.append(ci_ecal_clmerger)
 
 # Central Barrel Ecal (Imaging Cal.)
-img_barrel_daq = dict(
-        dynamicRangeADC=3*units.MeV,
-        capacityADC=8192,
-        pedestalMean=400,
-        pedestalSigma=20)   # about 6 keV
+img_barrel_daq = calo_daq['ecal_barrel_imaging']
 
 img_barrel_digi = CalHitDigi("img_barrel_digi",
         inputHitCollection="EcalBarrelHits",
@@ -357,11 +359,7 @@ img_barrel_clreco = ImagingClusterReco("img_barrel_clreco",
 algorithms.append(img_barrel_clreco)
 
 # Central ECAL SciFi
-scfi_barrel_daq = dict(
-        dynamicRangeADC=50.*MeV,
-        capacityADC=32768,
-        pedestalMean=400,
-        pedestalSigma=10)
+scfi_barrel_daq = calo_daq['ecal_barrel_scfi']
 
 scfi_barrel_digi = CalHitDigi("scfi_barrel_digi",
         inputHitCollection="EcalBarrelScFiHits",
@@ -417,11 +415,7 @@ algorithms.append(barrel_clus_merger)
 
 
 # Central Barrel Hcal
-cb_hcal_daq = dict(
-         dynamicRangeADC=50.*units.MeV,
-         capacityADC=32768,
-         pedestalMean=400,
-         pedestalSigma=10)
+cb_hcal_daq = calo_daq['hcal_barrel']
 
 cb_hcal_digi = CalHitDigi("cb_hcal_digi",
          inputHitCollection="HcalBarrelHits",
@@ -465,11 +459,7 @@ cb_hcal_clreco = RecoCoG("cb_hcal_clreco",
 algorithms.append(cb_hcal_clreco)
 
 # Hcal Hadron Endcap
-ci_hcal_daq = dict(
-         dynamicRangeADC=50.*units.MeV,
-         capacityADC=32768,
-         pedestalMean=400,
-         pedestalSigma=10)
+ci_hcal_daq = calo_daq['hcal_pos_endcap']
 
 ci_hcal_digi = CalHitDigi("ci_hcal_digi",
          inputHitCollection="HcalEndcapPHits",
@@ -510,11 +500,7 @@ ci_hcal_clreco = RecoCoG("ci_hcal_clreco",
 algorithms.append(ci_hcal_clreco)
 
 # Hcal Electron Endcap
-ce_hcal_daq = dict(
-        dynamicRangeADC=50.*units.MeV,
-        capacityADC=32768,
-        pedestalMean=400,
-        pedestalSigma=10)
+ce_hcal_daq = calo_daq['hcal_neg_endcap']
 
 ce_hcal_digi = CalHitDigi("ce_hcal_digi",
         inputHitCollection="HcalEndcapNHits",
diff --git a/options/reconstruction.raw.py b/options/reconstruction.raw.py
index a605e012..62665bcd 100644
--- a/options/reconstruction.raw.py
+++ b/options/reconstruction.raw.py
@@ -25,6 +25,21 @@ compact_path = os.path.join(detector_path, detector_name)
 # RICH reconstruction
 qe_data = [(1.0, 0.25), (7.5, 0.25),]
 
+# input calorimeter DAQ info
+calo_daq = {}
+with open('{}/calibrations/calo_digi_{}.json'.format(detector_path, detector_version)) as f:
+    calo_config = json.load(f)
+    ## add proper ADC capacity based on bit depth
+    for sys in calo_config:
+        cfg = calo_config[sys]
+        calo_daq[sys] = {
+            'dynamicRangeADC': eval(cfg['dynamicRange']),
+            'capacityADC': 2**int(cfg['capacityBitsADC']),
+            'pedestalMean': int(cfg['pedestalMean']),
+            'pedestalSigma': float(cfg['pedestalSigma'])
+        }
+print(calo_daq)
+
 # input and output
 input_sims = [f.strip() for f in str.split(os.environ["JUGGLER_SIM_FILE"], ",") if f.strip()]
 output_rec = str(os.environ["JUGGLER_REC_FILE"])
@@ -100,11 +115,7 @@ trk_b0_digi = TrackerDigi("trk_b0_digi",
 algorithms.append(trk_b0_digi)
 
 # Crystal Endcap Ecal
-ce_ecal_daq = dict(
-        dynamicRangeADC=5.*units.GeV,
-        capacityADC=32768,
-        pedestalMean=400,
-        pedestalSigma=3)
+ce_ecal_daq = calo_daq['ecal_neg_endcap']
 
 ce_ecal_digi = CalHitDigi("ce_ecal_digi",
         inputHitCollection="EcalEndcapNHits",
@@ -114,11 +125,7 @@ ce_ecal_digi = CalHitDigi("ce_ecal_digi",
 algorithms.append(ce_ecal_digi)
 
 # Endcap Sampling Ecal
-ci_ecal_daq = dict(
-        dynamicRangeADC=50.*units.MeV,
-        capacityADC=32768,
-        pedestalMean=400,
-        pedestalSigma=10)
+ci_ecal_daq = calo_daq['ecal_pos_endcap']
 
 ci_ecal_digi = CalHitDigi("ci_ecal_digi",
         inputHitCollection="EcalEndcapPHits",
@@ -127,11 +134,7 @@ ci_ecal_digi = CalHitDigi("ci_ecal_digi",
 algorithms.append(ci_ecal_digi)
 
 # Central Barrel Ecal (Imaging Cal.)
-img_barrel_daq = dict(
-        dynamicRangeADC=3*units.MeV,
-        capacityADC=8192,
-        pedestalMean=400,
-        pedestalSigma=20)   # about 6 keV
+img_barrel_daq = calo_daq['ecal_barrel_imaging']
 
 img_barrel_digi = CalHitDigi("img_barrel_digi",
         inputHitCollection="EcalBarrelHits",
@@ -141,11 +144,7 @@ img_barrel_digi = CalHitDigi("img_barrel_digi",
 algorithms.append(img_barrel_digi)
 
 # Central ECAL SciFi
-scfi_barrel_daq = dict(
-        dynamicRangeADC=50.*MeV,
-        capacityADC=32768,
-        pedestalMean=400,
-        pedestalSigma=10)
+scfi_barrel_daq = calo_daq['ecal_barrel_scfi']
 
 scfi_barrel_digi = CalHitDigi("scfi_barrel_digi",
         inputHitCollection="EcalBarrelScFiHits",
@@ -154,11 +153,7 @@ scfi_barrel_digi = CalHitDigi("scfi_barrel_digi",
 algorithms.append(scfi_barrel_digi)
 
 # Central Barrel Hcal
-cb_hcal_daq = dict(
-         dynamicRangeADC=50.*units.MeV,
-         capacityADC=32768,
-         pedestalMean=400,
-         pedestalSigma=10)
+cb_hcal_daq = calo_daq['hcal_barrel']
 
 cb_hcal_digi = CalHitDigi("cb_hcal_digi",
          inputHitCollection="HcalBarrelHits",
@@ -167,11 +162,7 @@ cb_hcal_digi = CalHitDigi("cb_hcal_digi",
 algorithms.append(cb_hcal_digi)
 
 # Hcal Hadron Endcap
-ci_hcal_daq = dict(
-         dynamicRangeADC=50.*units.MeV,
-         capacityADC=32768,
-         pedestalMean=400,
-         pedestalSigma=10)
+ci_hcal_daq = calo_daq['hcal_pos_endcap']
 
 ci_hcal_digi = CalHitDigi("ci_hcal_digi",
          inputHitCollection="HcalEndcapPHits",
@@ -180,11 +171,7 @@ ci_hcal_digi = CalHitDigi("ci_hcal_digi",
 algorithms.append(ci_hcal_digi)
 
 # Hcal Electron Endcap
-ce_hcal_daq = dict(
-        dynamicRangeADC=50.*units.MeV,
-        capacityADC=32768,
-        pedestalMean=400,
-        pedestalSigma=10)
+ce_hcal_daq = calo_daq['hcal_neg_endcap']
 
 ce_hcal_digi = CalHitDigi("ce_hcal_digi",
         inputHitCollection="HcalEndcapNHits",
-- 
GitLab