File indexing completed on 2026-05-21 07:48:03
0001
0002
0003 import os
0004 import acts
0005 import acts.examples
0006 from acts.examples import GenericDetector, StructureSelector
0007 from acts.examples.odd import getOpenDataDetector
0008 from acts.examples.simulation import (
0009 addParticleGun,
0010 EtaConfig,
0011 ParticleConfig,
0012 MomentumConfig,
0013 )
0014
0015 from acts.examples.root import RootPropagationSummaryWriter, RootPropagationStepsWriter
0016
0017 u = acts.UnitConstants
0018
0019
0020 def runPropagation(
0021 trackingGeometry, field, outputDir, s=None, decorators=[], sterileLogger=True
0022 ):
0023 s = s or acts.examples.Sequencer(events=100, numThreads=1)
0024
0025 for d in decorators:
0026 s.addContextDecorator(d)
0027
0028 rnd = acts.examples.RandomNumbers(seed=42)
0029
0030 addParticleGun(
0031 s,
0032 ParticleConfig(num=1000, pdg=acts.PdgParticle.eMuon, randomizeCharge=True),
0033 EtaConfig(-4.0, 4.0),
0034 MomentumConfig(1 * u.GeV, 100 * u.GeV, transverse=True),
0035 rnd=rnd,
0036 )
0037
0038 trkParamExtractor = acts.examples.ParticleTrackParamExtractor(
0039 level=acts.logging.WARNING,
0040 inputParticles="particles_generated",
0041 outputTrackParameters="params_particles_generated",
0042 )
0043 s.addAlgorithm(trkParamExtractor)
0044
0045 nav = acts.Navigator(trackingGeometry=trackingGeometry)
0046
0047 stepper = acts.EigenStepper(field)
0048
0049
0050
0051 propagator = acts.examples.ConcretePropagator(acts.Propagator(stepper, nav))
0052
0053 propagationAlgorithm = acts.examples.PropagationAlgorithm(
0054 propagatorImpl=propagator,
0055 level=acts.logging.INFO,
0056 sterileLogger=sterileLogger,
0057 inputTrackParameters="params_particles_generated",
0058 outputSummaryCollection="propagation_summary",
0059 )
0060 s.addAlgorithm(propagationAlgorithm)
0061
0062 s.addWriter(
0063 RootPropagationSummaryWriter(
0064 level=acts.logging.INFO,
0065 inputSummaryCollection="propagation_summary",
0066 filePath=outputDir + "/propagation_summary.root",
0067 )
0068 )
0069
0070 if sterileLogger is False:
0071 s.addWriter(
0072 RootPropagationStepsWriter(
0073 level=acts.logging.INFO,
0074 collection="propagation_summary",
0075 filePath=outputDir + "/propagation_steps.root",
0076 )
0077 )
0078
0079 return s
0080
0081
0082 if "__main__" == __name__:
0083
0084 matDeco = None
0085 contextDecorators = []
0086
0087
0088
0089
0090 detector = GenericDetector(materialDecorator=matDeco)
0091 trackingGeometry = detector.trackingGeometry()
0092
0093
0094
0095
0096
0097
0098
0099
0100
0101
0102
0103
0104
0105
0106
0107
0108
0109
0110
0111
0112
0113
0114
0115
0116
0117
0118
0119
0120
0121
0122
0123
0124
0125
0126
0127
0128
0129 field = acts.ConstantBField(acts.Vector3(0, 0, 2 * acts.UnitConstants.T))
0130
0131
0132
0133
0134
0135
0136
0137
0138
0139
0140
0141
0142
0143
0144
0145
0146
0147
0148 os.makedirs(os.getcwd() + "/propagation", exist_ok=True)
0149
0150 runPropagation(
0151 trackingGeometry=trackingGeometry,
0152 field=field,
0153 outputDir=os.getcwd() + "/propagation",
0154 s=None,
0155 decorators=contextDecorators,
0156 sterileLogger=True,
0157 ).run()