File indexing completed on 2025-12-22 09:21:13
0001
0002
0003 import os
0004 import acts
0005 import acts.examples
0006 from acts.examples import GenericDetector, StructureSelector
0007 from acts.examples.alignment import AlignmentDecorator
0008 from acts.examples.odd import getOpenDataDetector
0009 from acts.examples.simulation import (
0010 addParticleGun,
0011 EtaConfig,
0012 ParticleConfig,
0013 MomentumConfig,
0014 )
0015
0016 from acts.examples.root import RootPropagationSummaryWriter, RootPropagationStepsWriter
0017
0018 u = acts.UnitConstants
0019
0020
0021 def runPropagation(
0022 trackingGeometry, field, outputDir, s=None, decorators=[], sterileLogger=True
0023 ):
0024 s = s or acts.examples.Sequencer(events=100, numThreads=1)
0025
0026 for d in decorators:
0027 s.addContextDecorator(d)
0028
0029 rnd = acts.examples.RandomNumbers(seed=42)
0030
0031 addParticleGun(
0032 s,
0033 ParticleConfig(num=1000, pdg=acts.PdgParticle.eMuon, randomizeCharge=True),
0034 EtaConfig(-4.0, 4.0),
0035 MomentumConfig(1 * u.GeV, 100 * u.GeV, transverse=True),
0036 rnd=rnd,
0037 )
0038
0039 trkParamExtractor = acts.examples.ParticleTrackParamExtractor(
0040 level=acts.logging.WARNING,
0041 inputParticles="particles_generated",
0042 outputTrackParameters="params_particles_generated",
0043 )
0044 s.addAlgorithm(trkParamExtractor)
0045
0046 nav = acts.Navigator(trackingGeometry=trackingGeometry)
0047
0048 stepper = acts.EigenStepper(field)
0049
0050
0051
0052 propagator = acts.examples.ConcretePropagator(acts.Propagator(stepper, nav))
0053
0054 propagationAlgorithm = acts.examples.PropagationAlgorithm(
0055 propagatorImpl=propagator,
0056 level=acts.logging.INFO,
0057 sterileLogger=sterileLogger,
0058 inputTrackParameters="params_particles_generated",
0059 outputSummaryCollection="propagation_summary",
0060 )
0061 s.addAlgorithm(propagationAlgorithm)
0062
0063 s.addWriter(
0064 RootPropagationSummaryWriter(
0065 level=acts.logging.INFO,
0066 inputSummaryCollection="propagation_summary",
0067 filePath=outputDir + "/propagation_summary.root",
0068 )
0069 )
0070
0071 if sterileLogger is False:
0072 s.addWriter(
0073 RootPropagationStepsWriter(
0074 level=acts.logging.INFO,
0075 collection="propagation_summary",
0076 filePath=outputDir + "/propagation_steps.root",
0077 )
0078 )
0079
0080 return s
0081
0082
0083 if "__main__" == __name__:
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()