diff --git a/options/reconstruction.raw.py b/options/reconstruction.raw.py new file mode 100644 index 0000000000000000000000000000000000000000..a4013e8025bfb5de6f6d359a89e6530398c53a30 --- /dev/null +++ b/options/reconstruction.raw.py @@ -0,0 +1,230 @@ +from Gaudi.Configuration import * + +from Configurables import ApplicationMgr, AuditorSvc, EICDataSvc, PodioOutput, GeoSvc +from GaudiKernel import SystemOfUnits as units +from GaudiKernel.SystemOfUnits import MeV, GeV, mm, cm, mrad + +import json + +detector_name = "athena" +if "JUGGLER_DETECTOR" in os.environ : + detector_name = str(os.environ["JUGGLER_DETECTOR"]) + +detector_path = "" +if "DETECTOR_PATH" in os.environ : + detector_path = str(os.environ["DETECTOR_PATH"]) + +compact_path = os.path.join(detector_path, detector_name) + +# RICH reconstruction +qe_data = [(1.0, 0.25), (7.5, 0.25),] + +# 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"]) +n_events = int(os.environ["JUGGLER_N_EVENTS"]) + +# services +services = [] +# auditor service +services.append(AuditorSvc("AuditorSvc", Auditors=['ChronoAuditor', 'MemStatAuditor'])) +# geometry service +services.append(GeoSvc("GeoSvc", detectors=["{}.xml".format(compact_path)], OutputLevel=WARNING)) +# data service +services.append(EICDataSvc("EventDataSvc", inputs=input_sims, OutputLevel=WARNING)) + +# juggler components +from Configurables import PodioInput + +from Configurables import Jug__Digi__PhotoMultiplierDigi as PhotoMultiplierDigi +from Configurables import Jug__Digi__CalorimeterHitDigi as CalHitDigi +from Configurables import Jug__Digi__SiliconTrackerDigi as TrackerDigi + +# branches needed from simulation root file +sim_coll = [ + "EcalEndcapNHits", + "EcalEndcapPHits", + "EcalBarrelHits", + "EcalBarrelScFiHits", + "HcalBarrelHits", + "HcalEndcapPHits", + "HcalEndcapNHits", + "TrackerEndcapHits", + "TrackerBarrelHits", + "GEMTrackerEndcapHits", + "VertexBarrelHits", + "VertexEndcapHits", + "DRICHHits", + "MRICHHits" +] + +# list of algorithms +algorithms = [] + +# input +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_digi = CalHitDigi("ce_ecal_digi", + inputHitCollection="EcalEndcapNHits", + outputHitCollection="EcalEndcapNRawHits", + energyResolutions=[0., 0.02, 0.], + **ce_ecal_daq) +algorithms.append(ce_ecal_digi) + +# Endcap Sampling Ecal +ci_ecal_daq = dict( + dynamicRangeADC=50.*units.MeV, + capacityADC=32768, + pedestalMean=400, + pedestalSigma=10) + +ci_ecal_digi = CalHitDigi("ci_ecal_digi", + inputHitCollection="EcalEndcapPHits", + outputHitCollection="EcalEndcapPRawHits", + **ci_ecal_daq) +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_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) + +# Central ECAL SciFi +scfi_barrel_daq = dict( + dynamicRangeADC=50.*MeV, + capacityADC=32768, + pedestalMean=400, + pedestalSigma=10) + +scfi_barrel_digi = CalHitDigi("scfi_barrel_digi", + inputHitCollection="EcalBarrelScFiHits", + outputHitCollection="EcalBarrelScFiRawHits", + **scfi_barrel_daq) +algorithms.append(scfi_barrel_digi) + +# Central Barrel Hcal +cb_hcal_daq = dict( + dynamicRangeADC=50.*units.MeV, + capacityADC=32768, + pedestalMean=400, + pedestalSigma=10) + +cb_hcal_digi = CalHitDigi("cb_hcal_digi", + inputHitCollection="HcalBarrelHits", + outputHitCollection="HcalBarrelRawHits", + **cb_hcal_daq) +algorithms.append(cb_hcal_digi) + +# Hcal Hadron Endcap +ci_hcal_daq = dict( + dynamicRangeADC=50.*units.MeV, + capacityADC=32768, + pedestalMean=400, + pedestalSigma=10) + +ci_hcal_digi = CalHitDigi("ci_hcal_digi", + inputHitCollection="HcalEndcapPHits", + outputHitCollection="HcalEndcapPRawHits", + **ci_hcal_daq) +algorithms.append(ci_hcal_digi) + +# Hcal Electron Endcap +ce_hcal_daq = dict( + dynamicRangeADC=50.*units.MeV, + capacityADC=32768, + pedestalMean=400, + pedestalSigma=10) + +ce_hcal_digi = CalHitDigi("ce_hcal_digi", + inputHitCollection="HcalEndcapNHits", + outputHitCollection="HcalEndcapNRawHits", + **ce_hcal_daq) +algorithms.append(ce_hcal_digi) + +# Tracking +trk_b_digi = TrackerDigi("trk_b_digi", + inputHitCollection="TrackerBarrelHits", + outputHitCollection="TrackerBarrelRawHits", + timeResolution=8) +algorithms.append(trk_b_digi) + +trk_ec_digi = TrackerDigi("trk_ec_digi", + inputHitCollection="TrackerEndcapHits", + outputHitCollection="TrackerEndcapRawHits", + timeResolution=8) +algorithms.append(trk_ec_digi) + +vtx_b_digi = TrackerDigi("vtx_b_digi", + inputHitCollection="VertexBarrelHits", + outputHitCollection="VertexBarrelRawHits", + timeResolution=8) +algorithms.append(vtx_b_digi) + +vtx_ec_digi = TrackerDigi("vtx_ec_digi", + inputHitCollection="VertexEndcapHits", + outputHitCollection="VertexEndcapRawHits", + timeResolution=8) +algorithms.append(vtx_ec_digi) + +gem_ec_digi = TrackerDigi("gem_ec_digi", + inputHitCollection="GEMTrackerEndcapHits", + outputHitCollection="GEMTrackerEndcapRawHits", + timeResolution=10) +algorithms.append(gem_ec_digi) + +# DRICH +drich_digi = PhotoMultiplierDigi("drich_digi", + inputHitCollection="DRICHHits", + outputHitCollection="DRICHRawHits", + quantumEfficiency=[(a*units.eV, b) for a, b in qe_data]) +algorithms.append(drich_digi) + +# MRICH +mrich_digi = PhotoMultiplierDigi("mrich_digi", + inputHitCollection="MRICHHits", + outputHitCollection="MRICHRawHits", + quantumEfficiency=[(a*units.eV, b) for a, b in qe_data]) +algorithms.append(mrich_digi) + +# Output +podout = PodioOutput("out", filename=output_rec) +podout.outputCommands = [ + "keep *", + "drop *Hits", + "keep *Layers", + "keep *Clusters", + "drop *ProtoClusters", + "drop outputParticles", + "drop InitTrackParams", + ] + [ + "drop " + c for c in sim_coll + ] + [ + "keep *RawHits" + ] +algorithms.append(podout) + +ApplicationMgr( + TopAlg = algorithms, + EvtSel = 'NONE', + EvtMax = n_events, + ExtSvc = services, + OutputLevel = WARNING, + AuditAlgorithms = True + )