From aad451ead42b09344273fd083bb834d6b39af380 Mon Sep 17 00:00:00 2001
From: Wouter Deconinck <wdconinc@gmail.com>
Date: Mon, 6 Jun 2022 22:40:08 -0400
Subject: [PATCH] Use sciglass when not athena

---
 .../imaging_ecal/options/hybrid_cluster.py    | 115 ++++++++++++++----
 1 file changed, 91 insertions(+), 24 deletions(-)

diff --git a/benchmarks/imaging_ecal/options/hybrid_cluster.py b/benchmarks/imaging_ecal/options/hybrid_cluster.py
index 96e0de74..06b60589 100644
--- a/benchmarks/imaging_ecal/options/hybrid_cluster.py
+++ b/benchmarks/imaging_ecal/options/hybrid_cluster.py
@@ -15,6 +15,9 @@ from Configurables import Jug__Reco__ImagingPixelReco as ImagingPixelReco
 from Configurables import Jug__Reco__ImagingTopoCluster as ImagingTopoCluster
 from Configurables import Jug__Reco__ImagingClusterReco as ImagingClusterReco
 
+detector_name = str(os.environ.get("JUGGLER_DETECTOR", "athena"))
+detector_version = str(os.environ.get("JUGGLER_DETECTOR_VERSION", "master"))
+
 detector_path = str(os.environ.get("DETECTOR_PATH", "."))
 
 # input arguments from calibration file
@@ -49,27 +52,41 @@ sim_colls = [
     'MCParticles',
     'EcalBarrelHits',
     'EcalBarrelHitsContributions',
+]
+ecal_barrel_scfi_collections = [
     'EcalBarrelScFiHits',
-    'EcalBarrelScFiHitsContributions',
+    'EcalBarrelScFiHitsContributions'
 ]
+if 'athena' in detector_name:
+    sim_colls += ecal_barrel_scfi_collections
+
+# list of algorithms
+algorithms = []
+
 podin = PodioInput('PodioReader', collections=sim_colls, OutputLevel=DEBUG)
-podout = PodioOutput('podout', filename=kwargs['output'])
+algorithms.append(podin)
+
 
-# use the same daq_setting for digi/reco pair
-imcaldaq = dict(
+# Central Barrel Ecal
+if 'athena' in detector_name:
+    # Central ECAL Imaging Calorimeter
+
+    # use the same daq_setting for digi/reco pair
+    imcaldaq = dict(
         dynamicRangeADC=3*MeV,
         capacityADC=32767,
         pedestalMean=400,
         pedestalSigma=50)   # 50/32767*3 MeV ~ 5 keV
 
-
-imcaldigi = CalHitDigi('imcal_digi',
+    imcaldigi = CalHitDigi('imcal_digi',
         OutputLevel=DEBUG,
         inputHitCollection='EcalBarrelHits',
         outputHitCollection='DigiEcalBarrelImagingHits',
         energyResolutions=[0., 0.02, 0.],
         **imcaldaq)
-imcalreco = ImagingPixelReco('imcal_reco',
+    algorithms.append(imcaldigi)
+
+    imcalreco = ImagingPixelReco('imcal_reco',
         #OutputLevel=DEBUG,
         inputHitCollection=imcaldigi.outputHitCollection,
         outputHitCollection='RecoEcalBarrelImagingHits',
@@ -78,8 +95,9 @@ imcalreco = ImagingPixelReco('imcal_reco',
         sectorField='module',
         samplingFraction=kwargs['img_sf'],
         **imcaldaq)
+    algorithms.append(imcalreco)
 
-imcalcluster = ImagingTopoCluster('imcal_cluster',
+    imcalcluster = ImagingTopoCluster('imcal_cluster',
         #OutputLevel=DEBUG,
         inputHitCollection=imcalreco.outputHitCollection,
         outputProtoClusterCollection='EcalBarrelImagingProtoClusters',
@@ -88,26 +106,30 @@ imcalcluster = ImagingTopoCluster('imcal_cluster',
         neighbourLayersRange=2,
         minClusterEdep= 0.5*MeV/kwargs['img_sf'],
         sectorDist=3.*cm)
-clusterreco = ImagingClusterReco('imcal_clreco',
+    algorithms.append(imcalcluster)
+
+    clusterreco = ImagingClusterReco('imcal_clreco',
         #OutputLevel=DEBUG,
         inputProtoClusters=imcalcluster.outputProtoClusterCollection,
         outputLayers='EcalBarrelImagingClustersLayers',
         outputClusters='EcalBarrelImagingClusters',
         mcHits="EcalBarrelHits")
+    algorithms.append(clusterreco)
 
-# scfi layers
-scfi_barrel_daq = dict(
+    # scfi layers
+    scfi_barrel_daq = dict(
         dynamicRangeADC=50.*MeV,
         capacityADC=32768,
         pedestalMean=400,
         pedestalSigma=10)
 
-scfi_barrel_digi = CalHitDigi("scfi_barrel_digi",
+    scfi_barrel_digi = CalHitDigi("scfi_barrel_digi",
         inputHitCollection="EcalBarrelScFiHits",
         outputHitCollection="EcalBarrelScFiHitsDigi",
         **scfi_barrel_daq)
+    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="EcalBarrelScFiHitsReco",
         thresholdFactor=5.0,
@@ -117,17 +139,19 @@ scfi_barrel_reco = CalHitReco("scfi_barrel_reco",
         localDetFields=["system", "module"], # use local coordinates in each module (stave)
         samplingFraction=kwargs['scfi_sf'],
         **scfi_barrel_daq)
+    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",
         #OutputLevel=DEBUG,
         inputHitCollection=scfi_barrel_reco.outputHitCollection,
         outputHitCollection="EcalBarrelScFiGridReco",
         fields=["fiber"],
         fieldRefNumbers=[1],
         readoutClass="EcalBarrelScFiHits")
+    algorithms.append(scfi_barrel_merger)
 
-scfi_barrel_cl = IslandCluster("scfi_barrel_cl",
+    scfi_barrel_cl = IslandCluster("scfi_barrel_cl",
         #OutputLevel=DEBUG,
         inputHitCollection=scfi_barrel_merger.outputHitCollection,
         outputProtoClusterCollection="EcalBarrelScFiProtoClusters",
@@ -135,14 +159,59 @@ scfi_barrel_cl = IslandCluster("scfi_barrel_cl",
         minClusterCenterEdep=10.*MeV,
         localDistXZ=[30*mm, 30*mm],
         sectorDist=5.*cm)
+    algorithms.append(scfi_barrel_cl)
+
+    scfi_barrel_clreco = RecoCoG("scfi_barrel_clreco",
+        inputProtoClusterCollection=scfi_barrel_cl.outputProtoClusterCollection,
+        outputClusterCollection="EcalBarrelScFiClusters",
+        logWeightBase=6.2)
+    algorithms.append(scfi_barrel_clreco)
+
+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)
 
-scfi_barrel_clreco = RecoCoG("scfi_barrel_clreco",
-       inputProtoClusterCollection=scfi_barrel_cl.outputProtoClusterCollection,
-       outputClusterCollection="EcalBarrelScFiClusters",
-       logWeightBase=6.2)
 
 # TODO: merge two types of clusters
 
+podout = PodioOutput('podout', filename=kwargs['output'])
 podout.outputCommands = ['drop *',
         'keep MCParticles',
         'keep *Reco*',
@@ -150,12 +219,10 @@ podout.outputCommands = ['drop *',
         'keep *Cluster*',
         'keep *Layer*',
         ]
+algorithms.append(podout)
 
 ApplicationMgr(
-    TopAlg=[podin,
-        imcaldigi, imcalreco, imcalcluster, clusterreco,
-        scfi_barrel_digi, scfi_barrel_reco, scfi_barrel_merger, scfi_barrel_cl, scfi_barrel_clreco,
-        podout],
+    TopAlg=algorithms,
     EvtSel='NONE',
     EvtMax=kwargs['nev'],
     ExtSvc=[podioevent],
-- 
GitLab