Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-05 08:09:09

0001 #!/usr/bin/env python3
0002 
0003 import tempfile
0004 from pathlib import Path
0005 import shutil
0006 
0007 import acts
0008 from acts.examples.simulation import (
0009     addFatras,
0010     addGeant4,
0011     ParticleSelectorConfig,
0012 )
0013 
0014 from physmon_common import makeSetup
0015 
0016 u = acts.UnitConstants
0017 
0018 setup = makeSetup()
0019 
0020 
0021 with tempfile.TemporaryDirectory() as temp:
0022     tp = Path(temp)
0023 
0024     rnd = acts.examples.RandomNumbers(seed=42)
0025 
0026     s = acts.examples.Sequencer(
0027         events=1000,
0028         numThreads=1,
0029         logLevel=acts.logging.INFO,
0030     )
0031 
0032     for d in setup.decorators:
0033         s.addContextDecorator(d)
0034 
0035     s.addReader(
0036         acts.examples.EventGenerator(
0037             level=acts.logging.INFO,
0038             generators=[
0039                 acts.examples.EventGenerator.Generator(
0040                     multiplicity=acts.examples.FixedMultiplicityGenerator(n=1),
0041                     vertex=acts.examples.GaussianVertexGenerator(
0042                         mean=acts.Vector4(0, 0, 0, 0),
0043                         stddev=acts.Vector4(10 * u.um, 10 * u.um, 50 * u.mm, 1 * u.ns),
0044                     ),
0045                     particles=acts.examples.ParametricParticleGenerator(
0046                         p=(1 * u.GeV, 100 * u.GeV),
0047                         pTransverse=True,
0048                         eta=(-3.0, 3.0),
0049                         phi=(0.0 * u.degree, 360.0 * u.degree),
0050                         pdg=pdg,
0051                         randomizeCharge=True,
0052                     ),
0053                 )
0054                 for pdg in [
0055                     acts.PdgParticle.eMuon,
0056                     acts.PdgParticle.ePionPlus,
0057                     acts.PdgParticle.eElectron,
0058                 ]
0059             ],
0060             outputParticles="particles_input",
0061             outputVertices="vertices_input",
0062             randomNumbers=rnd,
0063         )
0064     )
0065 
0066     addFatras(
0067         s,
0068         setup.trackingGeometry,
0069         setup.field,
0070         rnd,
0071         enableInteractions=True,
0072         preSelectParticles=None,
0073         postSelectParticles=ParticleSelectorConfig(removeSecondaries=True),
0074         inputParticles="particles_input",
0075         outputParticlesInitial="particles_initial_fatras",
0076         outputParticlesFinal="particles_final_fatras",
0077         outputSimHits="simhits_fatras",
0078         outputDirRoot=tp / "fatras",
0079     )
0080 
0081     addGeant4(
0082         s,
0083         setup.detector,
0084         setup.trackingGeometry,
0085         setup.field,
0086         rnd,
0087         preSelectParticles=None,
0088         postSelectParticles=ParticleSelectorConfig(removeSecondaries=True),
0089         killVolume=setup.trackingGeometry.worldVolume,
0090         killAfterTime=25 * u.ns,
0091         killSecondaries=True,
0092         inputParticles="particles_input",
0093         outputParticlesInitial="particles_initial_geant4",
0094         outputParticlesFinal="particles_final_geant4",
0095         outputSimHits="simhits_geant4",
0096         outputDirRoot=tp / "geant4",
0097     )
0098 
0099     s.run()
0100     del s
0101 
0102     for file, name in [
0103         (tp / "fatras" / "particles_simulation.root", "particles_fatras.root"),
0104         (tp / "geant4" / "particles_simulation.root", "particles_geant4.root"),
0105     ]:
0106         assert file.exists(), "file not found"
0107         shutil.copy(file, setup.outdir / name)