Newer
Older
from Gaudi.Configuration import *
from Configurables import ApplicationMgr, AuditorSvc, EICDataSvc, PodioOutput, GeoSvc
from GaudiKernel.SystemOfUnits import eV, MeV, GeV, mm, cm, mrad
detector_name = "athena"
if "DETECTOR" in os.environ:
detector_name = str(os.environ["DETECTOR"])
detector_config = detector_name
if "DETECTOR_CONFIG" in os.environ:
detector_config = str(os.environ["DETECTOR_CONFIG"])
detector_path = ""
detector_path = str(os.environ["DETECTOR_PATH"])
if "DETECTOR_VERSION" in os.environ:
env_version = str(os.environ["DETECTOR_VERSION"])
if "acadia" in env_version:
detector_version = "acadia"
# Detector features that affect reconstruction
has_ecal_barrel_scfi = False
if "ecce" in detector_name and "imaging" in detector_config:
has_ecal_barrel_scfi = True
if "epic" in detector_name and "imaging" in detector_config:
if "PBEAM" in os.environ:
ionBeamEnergy = str(os.environ["PBEAM"])
else:
ionBeamEnergy = 100
ffi_zdc_calibrations = "calibrations/ffi_zdc.json"
with open(os.path.join(detector_path, ffi_zdc_calibrations)) as f:
ffi_zdc_cal_sf = float(ffi_zdc_cal["sampling_fraction"])
"minClusterCenterEdep": eval(ffi_zdc_cal["minClusterCenterEdep"]),
"minClusterHitEdep": eval(ffi_zdc_cal["minClusterHitEdep"]),
"localDistXY": [
eval(ffi_zdc_cal["localDistXY"][0]),
eval(ffi_zdc_cal["localDistXY"][1]),
"splitCluster": bool(ffi_zdc_cal["splitCluster"]),
ffi_zdc_ecal_sf, ffi_zdc_ecal_cl_kwargs = ffi_zdc_cal_parse(
ffi_zdc_config["ffi_zdc_ecal"]
)
ffi_zdc_hcal_sf, ffi_zdc_hcal_cl_kwargs = ffi_zdc_cal_parse(
ffi_zdc_config["ffi_zdc_hcal"]
)
print(f"Using default ffi_zdc calibrations; {ffi_zdc_calibrations} not found.")
ffi_zdc_ecal_sf = float(os.environ.get("FFI_ZDC_ECAL_SAMP_FRAC", 1.0))
ffi_zdc_hcal_sf = float(os.environ.get("FFI_ZDC_HCAL_SAMP_FRAC", 1.0))
# RICH reconstruction
qe_data = [
(1.0, 0.25),
(7.5, 0.25),
]
# CAL reconstruction
# get sampling fractions from system environment variable
ci_ecal_sf = float(os.environ.get("CI_ECAL_SAMP_FRAC", 0.03))
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 arguments from calibration file
with open(f"{detector_path}/calibrations/emcal_barrel_calibration.json") as f:
calib_data = json.load(f)["electron"]
print(calib_data)
# input calorimeter DAQ info
calo_daq = {}
with open(f"{detector_path}/calibrations/calo_digi_{detector_version}.json") 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"])
# 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
## note: old version of material map is called material-maps.XXX, new version is materials-map.XXX
## these names are somewhat inconsistent, and should probably all be renamed to 'material-map.XXX'
## FIXME
if detector_version == "acadia":
services.append(
GeoSvc(
"GeoSvc",
detectors=["{}/{}.xml".format(detector_path, detector_config)],
materials="config/material-maps.json",
OutputLevel=WARNING,
)
)
services.append(
GeoSvc(
"GeoSvc",
detectors=["{}/{}.xml".format(detector_path, detector_config)],
materials="calibrations/materials-map.cbor",
OutputLevel=WARNING,
)
)
services.append(EICDataSvc("EventDataSvc", inputs=input_sims, OutputLevel=WARNING))
# juggler components
from Configurables import PodioInput
from Configurables import Jug__Fast__MC2SmearedParticle as MC2DummyParticle
from Configurables import Jug__Fast__ParticlesWithTruthPID as ParticlesWithTruthPID
from Configurables import Jug__Fast__SmearedFarForwardParticles as FFSmearedParticles
from Configurables import Jug__Fast__MatchClusters as MatchClusters
from Configurables import Jug__Fast__ClusterMerger as ClusterMerger
from Configurables import (
Jug__Fast__TruthEnergyPositionClusterMerger as EnergyPositionClusterMerger,
)
from Configurables import (
Jug__Fast__InclusiveKinematicsTruth as InclusiveKinematicsTruth,
)
from Configurables import Jug__Fast__TruthClustering as TruthClustering
from Configurables import Jug__Digi__SimTrackerHitsCollector as SimTrackerHitsCollector
from Configurables import Jug__Digi__PhotoMultiplierDigi as PhotoMultiplierDigi
from Configurables import Jug__Digi__CalorimeterHitDigi as CalHitDigi
from Configurables import Jug__Digi__SiliconTrackerDigi as TrackerDigi
from Configurables import Jug__Reco__FarForwardParticles as FarForwardParticles
from Configurables import (
Jug__Reco__TrackerHitReconstruction as TrackerHitReconstruction,
)
from Configurables import Jug__Reco__TrackingHitsCollector2 as TrackingHitsCollector
from Configurables import Jug__Reco__TrackerSourceLinker as TrackerSourceLinker
from Configurables import Jug__Reco__TrackParamTruthInit as TrackParamTruthInit
from Configurables import Jug__Reco__TrackParamClusterInit as TrackParamClusterInit
from Configurables import (
Jug__Reco__TrackParamVertexClusterInit as TrackParamVertexClusterInit,
)
from Configurables import Jug__Reco__CKFTracking as CKFTracking
from Configurables import Jug__Reco__ParticlesFromTrackFit as ParticlesFromTrackFit
# from Configurables import Jug__Reco__TrajectoryFromTrackFit as TrajectoryFromTrackFit
from Configurables import (
Jug__Reco__InclusiveKinematicsElectron as InclusiveKinematicsElectron,
)
from Configurables import Jug__Reco__InclusiveKinematicsDA as InclusiveKinematicsDA
from Configurables import Jug__Reco__InclusiveKinematicsJB as InclusiveKinematicsJB
from Configurables import (
Jug__Reco__InclusiveKinematicsSigma as InclusiveKinematicsSigma,
)
from Configurables import (
Jug__Reco__InclusiveKinematicseSigma as InclusiveKinematicseSigma,
)
from Configurables import Jug__Reco__FarForwardParticles as FFRecoRP
from Configurables import Jug__Reco__FarForwardParticlesOMD as FFRecoOMD
from Configurables import Jug__Reco__CalorimeterHitReco as CalHitReco
from Configurables import Jug__Reco__CalorimeterHitsMerger as CalHitsMerger
from Configurables import Jug__Reco__CalorimeterIslandCluster as IslandCluster
Loading
Loading full blame...