File indexing completed on 2025-05-12 07:57:27
0001
0002
0003 import tempfile
0004
0005 from pathlib import Path
0006
0007 import acts
0008 import acts.examples
0009
0010 from acts.examples.simulation import (
0011 addParticleGun,
0012 ParticleConfig,
0013 EtaConfig,
0014 PhiConfig,
0015 MomentumConfig,
0016 addFatras,
0017 addDigitization,
0018 ParticleSelectorConfig,
0019 addDigiParticleSelection,
0020 )
0021 from acts.examples.reconstruction import (
0022 addSeeding,
0023 SeedingAlgorithm,
0024 addGx2fTracks,
0025 addKalmanTracks,
0026 )
0027
0028 from physmon_common import makeSetup
0029
0030 u = acts.UnitConstants
0031
0032 setup = makeSetup()
0033
0034 trackingGeometry = setup.trackingGeometry
0035 field = setup.field
0036 digiConfigFile = setup.digiConfig
0037
0038 with tempfile.TemporaryDirectory() as temp:
0039 s = acts.examples.Sequencer(
0040 events=100000,
0041 numThreads=-1,
0042 logLevel=acts.logging.INFO,
0043 skip=0,
0044 trackFpes=False,
0045 )
0046
0047 rnd = acts.examples.RandomNumbers(seed=42)
0048 outputDirTemp = Path(temp)
0049 outputDir = setup.outdir
0050
0051 addParticleGun(
0052 s,
0053 ParticleConfig(num=1, pdg=acts.PdgParticle.eMuon, randomizeCharge=True),
0054 EtaConfig(-3.0, 3.0, uniform=True),
0055 MomentumConfig(1.0 * u.GeV, 100.0 * u.GeV, transverse=True),
0056 PhiConfig(0.0, 360.0 * u.degree),
0057 vtxGen=acts.examples.GaussianVertexGenerator(
0058 mean=acts.Vector4(0, 0, 0, 0),
0059 stddev=acts.Vector4(0, 0, 0, 0),
0060 ),
0061 multiplicity=1,
0062 rnd=rnd,
0063 outputDirRoot=outputDirTemp,
0064 )
0065
0066 addFatras(
0067 s,
0068 trackingGeometry,
0069 field,
0070 rnd=rnd,
0071 enableInteractions=True,
0072 )
0073
0074 addDigitization(
0075 s,
0076 trackingGeometry,
0077 field,
0078 digiConfigFile=digiConfigFile,
0079 rnd=rnd,
0080 )
0081
0082 addDigiParticleSelection(
0083 s,
0084 ParticleSelectorConfig(
0085 pt=(0.9 * u.GeV, None),
0086 measurements=(7, None),
0087 removeNeutral=True,
0088 removeSecondaries=True,
0089 ),
0090 )
0091
0092 addSeeding(
0093 s,
0094 trackingGeometry,
0095 field,
0096 rnd=rnd,
0097 inputParticles="particles_generated",
0098 seedingAlgorithm=SeedingAlgorithm.TruthSmeared,
0099 particleHypothesis=acts.ParticleHypothesis.muon,
0100 )
0101
0102 addGx2fTracks(
0103 s,
0104 trackingGeometry,
0105 field,
0106 nUpdateMax=17,
0107 relChi2changeCutOff=1e-7,
0108 multipleScattering=True,
0109 )
0110
0111 s.addAlgorithm(
0112 acts.examples.TrackSelectorAlgorithm(
0113 level=acts.logging.INFO,
0114 inputTracks="tracks",
0115 outputTracks="selected-tracks-gx2f",
0116 selectorConfig=acts.TrackSelector.Config(
0117 minMeasurements=7,
0118 ),
0119 )
0120 )
0121
0122 s.addWriter(
0123 acts.examples.TrackFitterPerformanceWriter(
0124 level=acts.logging.INFO,
0125 inputTracks="selected-tracks-gx2f",
0126 inputParticles="particles_selected",
0127 inputTrackParticleMatching="track_particle_matching",
0128 filePath=str(outputDir / "performance_trackfitting_gx2f.root"),
0129 )
0130 )
0131
0132 addKalmanTracks(
0133 s,
0134 trackingGeometry,
0135 field,
0136 reverseFilteringMomThreshold=0 * u.GeV,
0137 )
0138
0139 s.addAlgorithm(
0140 acts.examples.TrackSelectorAlgorithm(
0141 level=acts.logging.INFO,
0142 inputTracks="tracks",
0143 outputTracks="selected-tracks-kf",
0144 selectorConfig=acts.TrackSelector.Config(
0145 minMeasurements=7,
0146 ),
0147 )
0148 )
0149
0150 s.addWriter(
0151 acts.examples.TrackFitterPerformanceWriter(
0152 level=acts.logging.INFO,
0153 inputTracks="selected-tracks-kf",
0154 inputParticles="particles_selected",
0155 inputTrackParticleMatching="track_particle_matching",
0156 filePath=str(outputDir / "performance_trackfitting_kf.root"),
0157 )
0158 )
0159
0160 s.run()
0161 del s