From 1518828714986bcdbd4644a46814380f93333a02 Mon Sep 17 00:00:00 2001
From: Wouter Deconinck <wdconinc@gmail.com>
Date: Sun, 5 Jun 2022 23:54:20 +0000
Subject: [PATCH] Fixes for ATHENA ScFi vs ECCE SciGlass

---
 options/reconstruction.ecal.py |   4 --
 options/reconstruction.py      | 113 +++++++++++++++++++++++----------
 options/reconstruction.raw.py  |  37 ++++++++---
 3 files changed, 107 insertions(+), 47 deletions(-)

diff --git a/options/reconstruction.ecal.py b/options/reconstruction.ecal.py
index caa29e0a..fc0aef8c 100644
--- a/options/reconstruction.ecal.py
+++ b/options/reconstruction.ecal.py
@@ -70,10 +70,6 @@ sim_coll = [
     'EcalEndcapNHitsContributions',
     'EcalEndcapPHits',
     'EcalEndcapPHitsContributions',
-    'EcalBarrelHits',
-    'EcalBarrelHitsContributions',
-    'EcalBarrelScFiHits',
-    'EcalBarrelScFiHitsContributions',
 ]
 
 # list of algorithms
diff --git a/options/reconstruction.py b/options/reconstruction.py
index addc8f58..6d75f0d9 100644
--- a/options/reconstruction.py
+++ b/options/reconstruction.py
@@ -173,8 +173,6 @@ sim_coll = [
     'EcalEndcapPHitsContributions',
     'EcalBarrelHits',
     'EcalBarrelHitsContributions',
-    'EcalBarrelScFiHits',
-    'EcalBarrelScFiHitsContributions',
     'HcalBarrelHits',
     'HcalBarrelHitsContributions',
     'HcalEndcapPHits',
@@ -188,6 +186,13 @@ sim_coll = [
     'ZDCHcalHitsContributions',
 ]
 
+ecal_barrel_scfi_collections = [
+    'EcalBarrelScFiHits',
+    'EcalBarrelScFiHitsContributions'
+]
+if 'athena' in detector_name:
+    sim_coll += ecal_barrel_scfi_collections
+
 forward_romanpot_collections = [
     'ForwardRomanPotHits1',
     'ForwardRomanPotHits2'
@@ -462,17 +467,19 @@ algorithms.append(ci_ecal_clreco)
 #        outputRelations = "EcalEndcapPMergedClusterRelations")
 #algorithms.append(ci_ecal_clmerger)
 
-# Central Barrel Ecal (Imaging Cal.)
-img_barrel_daq = calo_daq['ecal_barrel_imaging']
+# Central Barrel Ecal
+if 'athena' in detector_name:
+    # Central ECAL Imaging Calorimeter
+    img_barrel_daq = calo_daq['ecal_barrel_imaging']
 
-img_barrel_digi = CalHitDigi("img_barrel_digi",
+    img_barrel_digi = CalHitDigi("img_barrel_digi",
         inputHitCollection="EcalBarrelHits",
         outputHitCollection="EcalBarrelImagingRawHits",
         energyResolutions=[0., 0.02, 0.],   # 2% flat resolution
         **img_barrel_daq)
-algorithms.append(img_barrel_digi)
+    algorithms.append(img_barrel_digi)
 
-img_barrel_reco = ImCalPixelReco("img_barrel_reco",
+    img_barrel_reco = ImCalPixelReco("img_barrel_reco",
         inputHitCollection=img_barrel_digi.outputHitCollection,
         outputHitCollection="EcalBarrelImagingRecHits",
         thresholdFactor=3,  # about 20 keV
@@ -481,34 +488,34 @@ img_barrel_reco = ImCalPixelReco("img_barrel_reco",
         layerField="layer",             # field to get layer id
         sectorField="module",           # field to get sector id
         **img_barrel_daq)
-algorithms.append(img_barrel_reco)
+    algorithms.append(img_barrel_reco)
 
-img_barrel_cl = ImagingCluster("img_barrel_cl",
+    img_barrel_cl = ImagingCluster("img_barrel_cl",
         inputHitCollection=img_barrel_reco.outputHitCollection,
         outputProtoClusterCollection="EcalBarrelImagingProtoClusters",
         localDistXY=[2.*units.mm, 2*units.mm],  # same layer
         layerDistEtaPhi=[10*units.mrad, 10*units.mrad],     # adjacent layer
         neighbourLayersRange=2,                 # id diff for adjacent layer
         sectorDist=3.*units.cm)                       # different sector
-algorithms.append(img_barrel_cl)
+    algorithms.append(img_barrel_cl)
 
-img_barrel_clreco = ImagingClusterReco("img_barrel_clreco",
+    img_barrel_clreco = ImagingClusterReco("img_barrel_clreco",
         inputProtoClusters=img_barrel_cl.outputProtoClusterCollection,
         outputClusters="EcalBarrelImagingClusters",
         mcHits="EcalBarrelHits",
         outputLayers="EcalBarrelImagingLayers")
-algorithms.append(img_barrel_clreco)
+    algorithms.append(img_barrel_clreco)
 
-# Central ECAL SciFi
-scfi_barrel_daq = calo_daq['ecal_barrel_scfi']
+    # Central ECAL SciFi
+    scfi_barrel_daq = calo_daq['ecal_barrel_scfi']
 
-scfi_barrel_digi = CalHitDigi("scfi_barrel_digi",
+    scfi_barrel_digi = CalHitDigi("scfi_barrel_digi",
         inputHitCollection="EcalBarrelScFiHits",
         outputHitCollection="EcalBarrelScFiRawHits",
         **scfi_barrel_daq)
-algorithms.append(scfi_barrel_digi)
+    algorithms.append(scfi_barrel_digi)
 
-scfi_barrel_reco = CalHitReco("scfi_barrel_reco",
+    scfi_barrel_reco = CalHitReco("scfi_barrel_reco",
         inputHitCollection=scfi_barrel_digi.outputHitCollection,
         outputHitCollection="EcalBarrelScFiRecHits",
         thresholdFactor=5.0,
@@ -518,40 +525,80 @@ scfi_barrel_reco = CalHitReco("scfi_barrel_reco",
         sectorField="module",
         localDetFields=["system", "module"], # use local coordinates in each module (stave)
         **scfi_barrel_daq)
-algorithms.append(scfi_barrel_reco)
+    algorithms.append(scfi_barrel_reco)
 
-# merge hits in different layer (projection to local x-y plane)
-scfi_barrel_merger = CalHitsMerger("scfi_barrel_merger",
+    # merge hits in different layer (projection to local x-y plane)
+    scfi_barrel_merger = CalHitsMerger("scfi_barrel_merger",
          inputHitCollection=scfi_barrel_reco.outputHitCollection,
          outputHitCollection="EcalBarrelScFiMergedHits",
          fields=["fiber"],
          fieldRefNumbers=[1],
          readoutClass="EcalBarrelScFiHits")
-algorithms.append(scfi_barrel_merger)
+    algorithms.append(scfi_barrel_merger)
 
-scfi_barrel_cl = IslandCluster("scfi_barrel_cl",
+    scfi_barrel_cl = IslandCluster("scfi_barrel_cl",
          inputHitCollection=scfi_barrel_merger.outputHitCollection,
          outputProtoClusterCollection="EcalBarrelScFiProtoClusters",
          splitCluster=False,
          minClusterCenterEdep=10.*MeV,
          localDistXZ=[30*mm, 30*mm])
-algorithms.append(scfi_barrel_cl)
+    algorithms.append(scfi_barrel_cl)
 
-scfi_barrel_clreco = RecoCoG("scfi_barrel_clreco",
+    scfi_barrel_clreco = RecoCoG("scfi_barrel_clreco",
          inputProtoClusterCollection=scfi_barrel_cl.outputProtoClusterCollection,
          outputClusterCollection="EcalBarrelScFiClusters",
          logWeightBase=6.2)
-algorithms.append(scfi_barrel_clreco)
+    algorithms.append(scfi_barrel_clreco)
 
-## barrel cluster merger
-#barrel_clus_merger = EnergyPositionClusterMerger("barrel_clus_merger",
-#        inputMCParticles = "MCParticles",
-#        inputEnergyClusters = scfi_barrel_clreco.outputClusterCollection,
-#        inputPositionClusters = img_barrel_clreco.outputClusterCollection,
-#        outputClusters = "EcalBarrelMergedClusters",
-#        outputRelations = "EcalBarrelMergedClusterRelations")
-#algorithms.append(barrel_clus_merger)
+    ## barrel cluster merger
+    #barrel_clus_merger = EnergyPositionClusterMerger("barrel_clus_merger",
+    #    inputMCParticles = "MCParticles",
+    #    inputEnergyClusters = scfi_barrel_clreco.outputClusterCollection,
+    #    inputPositionClusters = img_barrel_clreco.outputClusterCollection,
+    #    outputClusters = "EcalBarrelMergedClusters",
+    #    outputRelations = "EcalBarrelMergedClusterRelations")
+    #algorithms.append(barrel_clus_merger)
 
+else:
+    # SciGlass calorimeter
+    sciglass_ecal_daq = dict(
+        dynamicRangeADC=5.*GeV,
+        capacityADC=32768,
+        pedestalMean=400,
+        pedestalSigma=3)
+
+    sciglass_ecal_digi = CalHitDigi("sciglass_ecal_digi",
+        inputHitCollection="EcalBarrelHits",
+        outputHitCollection="EcalBarrelHitsDigi",
+        energyResolutions=[0., 0.02, 0.],   # 2% flat resolution
+        **sciglass_ecal_daq)
+    algorithms.append(sciglass_ecal_digi)
+
+    sciglass_ecal_reco = CalHitReco("sciglass_ecal_reco",
+        inputHitCollection=sciglass_ecal_digi.outputHitCollection,
+        outputHitCollection="EcalBarrelHitsReco",
+        thresholdFactor=3,  # about 20 keV
+        readoutClass="EcalBarrelHits",  # readout class
+        sectorField="sector",           # field to get sector id
+        samplingFraction=0.998,         # this accounts for a small fraction of leakage
+        **sciglass_ecal_daq)
+    algorithms.append(sciglass_ecal_reco)
+
+    sciglass_ecal_cl = IslandCluster("sciglass_ecal_cl",
+        inputHitCollection=sciglass_ecal_reco.outputHitCollection,
+        outputProtoClusterCollection="EcalBarrelProtoClusters",
+        splitCluster=False,
+        minClusterHitEdep=1.0*MeV,  # discard low energy hits
+        minClusterCenterEdep=30*MeV,
+        sectorDist=5.0*cm)
+    algorithms.append(sciglass_ecal_cl)
+
+    sciglass_ecal_clreco = ImagingClusterReco("sciglass_ecal_clreco",
+        inputProtoClusters=sciglass_ecal_cl.outputProtoClusterCollection,
+        mcHits="EcalBarrelHits",
+        outputClusters="EcalBarrelClusters",
+        outputLayers="EcalBarrelLayers")
+    algorithms.append(sciglass_ecal_clreco)
 
 # Central Barrel Hcal
 cb_hcal_daq = calo_daq['hcal_barrel']
diff --git a/options/reconstruction.raw.py b/options/reconstruction.raw.py
index d51f1456..6e4ba88d 100644
--- a/options/reconstruction.raw.py
+++ b/options/reconstruction.raw.py
@@ -72,8 +72,6 @@ sim_coll = [
     'EcalEndcapPHitsContributions',
     'EcalBarrelHits',
     'EcalBarrelHitsContributions',
-    'EcalBarrelScFiHits',
-    'EcalBarrelScFiHitsContributions',
     'HcalBarrelHits',
     'HcalBarrelHitsContributions',
     'HcalEndcapPHits',
@@ -83,6 +81,13 @@ sim_coll = [
     'DRICHHits',
 ]
 
+ecal_barrel_scfi_collections = [
+    'EcalBarrelScFiHits',
+    'EcalBarrelScFiHitsContributions'
+]
+if 'athena' in detector_name:
+    sim_coll += ecal_barrel_scfi_collections
+
 forward_romanpot_collections = [
     'ForwardRomanPotHits1',
     'ForwardRomanPotHits2'
@@ -186,24 +191,36 @@ ci_ecal_digi = CalHitDigi("ci_ecal_digi",
         **ci_ecal_daq)
 algorithms.append(ci_ecal_digi)
 
-# Central Barrel Ecal (Imaging Cal.)
-img_barrel_daq = calo_daq['ecal_barrel_imaging']
+# Central Barrel Ecal
+if 'athena' in detector_name:
+    # Central ECAL Imaging Calorimeter
+    img_barrel_daq = calo_daq['ecal_barrel_imaging']
 
-img_barrel_digi = CalHitDigi("img_barrel_digi",
+    img_barrel_digi = CalHitDigi("img_barrel_digi",
         inputHitCollection="EcalBarrelHits",
         outputHitCollection="EcalBarrelImagingRawHits",
         energyResolutions=[0., 0.02, 0.],   # 2% flat resolution
         **img_barrel_daq)
-algorithms.append(img_barrel_digi)
+    algorithms.append(img_barrel_digi)
 
-# Central ECAL SciFi
-scfi_barrel_daq = calo_daq['ecal_barrel_scfi']
+    # Central ECAL SciFi
+    scfi_barrel_daq = calo_daq['ecal_barrel_scfi']
 
-scfi_barrel_digi = CalHitDigi("scfi_barrel_digi",
+    scfi_barrel_digi = CalHitDigi("scfi_barrel_digi",
         inputHitCollection="EcalBarrelScFiHits",
         outputHitCollection="EcalBarrelScFiRawHits",
         **scfi_barrel_daq)
-algorithms.append(scfi_barrel_digi)
+    algorithms.append(scfi_barrel_digi)
+else:
+    # SciGlass calorimeter
+    sciglass_ecal_daq = calo_daq['ecal_barrel_sciglass']
+
+    sciglass_ecal_digi = CalHitDigi("sciglass_ecal_digi",
+        inputHitCollection="EcalBarrelHits",
+        outputHitCollection="EcalBarrelHitsDigi",
+        energyResolutions=[0., 0.02, 0.],   # 2% flat resolution
+        **sciglass_ecal_daq)
+    algorithms.append(sciglass_ecal_digi)
 
 # Central Barrel Hcal
 cb_hcal_daq = calo_daq['hcal_barrel']
-- 
GitLab