Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-05-12 07:57:27

0001 #!/usr/bin/env python3
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