Skip to content
Snippets Groups Projects

Imaging cluster seeded tracking benchmark

Merged Wouter Deconinck requested to merge imaging-cluster-seeded-tracking into master
3 files
+ 201
7
Compare changes
  • Side-by-side
  • Inline
Files
3
 
from Gaudi.Configuration import *
 
 
from Configurables import ApplicationMgr, EICDataSvc, PodioOutput, GeoSvc
 
from GaudiKernel.SystemOfUnits import MeV, GeV, mm, cm, mrad
 
 
detector_name = str(os.environ.get("JUGGLER_DETECTOR", "athena"))
 
detector_path = str(os.environ.get("JUGGLER_DETECTOR_PATH", "."))
 
compact_path = str(os.environ.get("JUGGLER_COMPACT_PATH", "{}.xml".format(os.path.join(detector_path, detector_name))))
 
 
# CAL reconstruction
 
# get sampling fractions from system environment variable, 1.0 by default
 
cb_ecal_sf = float(os.environ.get("CB_ECAL_SAMP_FRAC", 0.01324))
 
 
# todo add checks
 
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"])
 
 
geo_service = GeoSvc("GeoSvc", detectors=[compact_path], OutputLevel=WARNING)
 
podioevent = EICDataSvc("EventDataSvc", inputs=input_sims, OutputLevel=WARNING)
 
 
from Configurables import PodioInput
 
from Configurables import Jug__Digi__UFSDTrackerDigi as TrackerDigi
 
from Configurables import Jug__Reco__TrackerHitReconstruction as TrackerReco
 
 
from Configurables import Jug__Reco__TrackerSourceLinker as TrackerSourceLinker
 
from Configurables import Jug__Reco__TrackerSourcesLinker as TrackerSourcesLinker
 
#from Configurables import Jug__Reco__TrackingHitsSourceLinker as TrackingHitsSourceLinker
 
from Configurables import Jug__Reco__TrackParamImagingClusterInit as TrackParamImagingClusterInit
 
 
from Configurables import Jug__Reco__TrackFindingAlgorithm as TrackFindingAlgorithm
 
from Configurables import Jug__Reco__ParticlesFromTrackFit as ParticlesFromTrackFit
 
from Configurables import Jug__Base__InputCopier_dd4pod__Geant4ParticleCollection_dd4pod__Geant4ParticleCollection_ as MCCopier
 
 
from Configurables import Jug__Digi__CalorimeterHitDigi as CalHitDigi
 
from Configurables import Jug__Reco__ImagingPixelReco as ImCalPixelReco
 
from Configurables import Jug__Reco__ImagingTopoCluster as ImagingCluster
 
from Configurables import Jug__Reco__ImagingClusterReco as ImagingClusterReco
 
 
 
sim_colls = [
 
"mcparticles",
 
"TrackerEndcapHits",
 
"TrackerBarrelHits",
 
"VertexBarrelHits",
 
"VertexEndcapHits",
 
"EcalBarrelHits"
 
]
 
podin = PodioInput("PodioReader", collections=sim_colls)
 
podout = PodioOutput("out", filename=output_rec)
 
 
## copiers to get around input --> output copy bug. Note the "2" appended to the output collection.
 
mccopier = MCCopier("MCCopier",
 
inputCollection="mcparticles",
 
outputCollection="mcparticles2")
 
 
trk_b_digi = TrackerDigi("trk_b_digi",
 
inputHitCollection="TrackerBarrelHits",
 
outputHitCollection="TrackerBarrelRawHits",
 
timeResolution=8)
 
trk_ec_digi = TrackerDigi("trk_ec_digi",
 
inputHitCollection="TrackerEndcapHits",
 
outputHitCollection="TrackerEndcapRawHits",
 
timeResolution=8)
 
 
vtx_b_digi = TrackerDigi("vtx_b_digi",
 
inputHitCollection="VertexBarrelHits",
 
outputHitCollection="VertexBarrelRawHits",
 
timeResolution=8)
 
 
vtx_ec_digi = TrackerDigi("vtx_ec_digi",
 
inputHitCollection="VertexEndcapHits",
 
outputHitCollection="VertexEndcapRawHits",
 
timeResolution=8)
 
 
# Tracker and vertex reconstruction
 
trk_b_reco = TrackerReco("trk_b_reco",
 
inputHitCollection = trk_b_digi.outputHitCollection,
 
outputHitCollection="TrackerBarrelRecHits")
 
 
trk_ec_reco = TrackerReco("trk_ec_reco",
 
inputHitCollection = trk_ec_digi.outputHitCollection,
 
outputHitCollection="TrackerEndcapRecHits")
 
 
vtx_b_reco = TrackerReco("vtx_b_reco",
 
inputHitCollection = vtx_b_digi.outputHitCollection,
 
outputHitCollection="VertexBarrelRecHits")
 
 
vtx_ec_reco = TrackerReco("vtx_ec_reco",
 
inputHitCollection = vtx_ec_digi.outputHitCollection,
 
outputHitCollection="VertexEndcapRecHits")
 
 
sourcelinker = TrackerSourcesLinker("trk_srcslnkr",
 
inputHitCollections=["VertexBarrelRecHits", "TrackerBarrelRecHits"],
 
outputSourceLinks="TrackerSourceLinks",
 
outputMeasurements="TrackerMeasurements",
 
OutputLevel=DEBUG)
 
 
# Central Barrel Ecal (Imaging Cal.)
 
cb_ecal_daq = dict(
 
dynamicRangeADC=3*MeV,
 
capacityADC=8192,
 
pedestalMean=400,
 
pedestalSigma=20) # about 6 keV
 
 
cb_ecal_digi = CalHitDigi("cb_ecal_digi",
 
inputHitCollection="EcalBarrelHits",
 
outputHitCollection="EcalBarrelHitsDigi",
 
energyResolutions=[0., 0.02, 0.], # 2% flat resolution
 
**cb_ecal_daq)
 
 
cb_ecal_reco = ImCalPixelReco("cb_ecal_reco",
 
inputHitCollection="EcalBarrelHitsDigi",
 
outputHitCollection="EcalBarrelHitsReco",
 
thresholdFactor=3, # about 20 keV
 
readoutClass="EcalBarrelHits", # readout class
 
layerField="layer", # field to get layer id
 
sectorField="module", # field to get sector id
 
**cb_ecal_daq)
 
 
cb_ecal_cl = ImagingCluster("cb_ecal_cl",
 
inputHitCollection="EcalBarrelHitsReco",
 
outputHitCollection="EcalBarrelClusterHits",
 
localDistXY=[2.*mm, 2*mm], # same layer
 
layerDistEtaPhi=[10*mrad, 10*mrad], # adjacent layer
 
neighbourLayersRange=2, # id diff for adjacent layer
 
sectorDist=3.*cm) # different sector
 
 
cb_ecal_clreco = ImagingClusterReco("cb_ecal_clreco",
 
samplingFraction=cb_ecal_sf,
 
inputHitCollection="EcalBarrelClusterHits",
 
outputClusterCollection="EcalBarrelClusters",
 
outputLayerCollection="EcalBarrelLayers")
 
 
## Track param init
 
imclust_trk_init = TrackParamImagingClusterInit("imclust_trk_init",
 
inputClusters="EcalBarrelClusters",
 
outputInitialTrackParameters="InitTrackParams",
 
OutputLevel=DEBUG)
 
 
# Tracking algorithms
 
trk_find_alg = TrackFindingAlgorithm("trk_find_alg",
 
inputSourceLinks = sourcelinker.outputSourceLinks,
 
inputMeasurements = sourcelinker.outputMeasurements,
 
inputInitialTrackParameters= imclust_trk_init.outputInitialTrackParameters,
 
outputTrajectories="trajectories",
 
OutputLevel=DEBUG)
 
 
parts_from_fit = ParticlesFromTrackFit("parts_from_fit",
 
inputTrajectories=trk_find_alg.outputTrajectories,
 
outputParticles="ReconstructedParticles",
 
outputTrackParameters="outputTrackParameters",
 
OutputLevel=DEBUG)
 
 
podout.outputCommands = [
 
"keep *",
 
"drop InitTrackParams",
 
"drop trajectories",
 
"drop outputSourceLinks",
 
"drop outputInitialTrackParameters",
 
"drop mcparticles",
 
]
 
 
ApplicationMgr(
 
TopAlg = [podin, mccopier,
 
trk_b_digi, trk_ec_digi, vtx_b_digi, vtx_ec_digi,
 
trk_b_reco, trk_ec_reco, vtx_b_reco, vtx_ec_reco,
 
cb_ecal_digi, cb_ecal_reco, cb_ecal_cl, cb_ecal_clreco,
 
sourcelinker,
 
imclust_trk_init,
 
trk_find_alg, parts_from_fit,
 
podout
 
],
 
EvtSel = 'NONE',
 
EvtMax = n_events,
 
ExtSvc = [podioevent, geo_service],
 
OutputLevel=WARNING
 
)
 
Loading