File indexing completed on 2025-08-05 08:10:08
0001
0002
0003 import os
0004
0005 import acts
0006 import acts.examples
0007 import acts.examples.hepmc3
0008 import acts.examples.dd4hep
0009 import acts.examples.geant4
0010 import acts.examples.geant4.dd4hep
0011 import acts.examples.geant4.hepmc3
0012 from acts.examples.odd import getOpenDataDetector
0013
0014
0015 u = acts.UnitConstants
0016
0017
0018 def runEventRecording(detectorConstructionFactory, outputDir, s=None):
0019 hepmc_dir = os.path.join(outputDir, "hepmc3")
0020 if not os.path.exists(hepmc_dir):
0021 os.mkdir(hepmc_dir)
0022
0023 s = s or acts.examples.Sequencer(
0024 events=int(os.environ.get("NEVENTS", 100)), numThreads=1
0025 )
0026
0027 rnd = acts.examples.RandomNumbers(seed=42)
0028 evGen = acts.examples.EventGenerator(
0029 level=acts.logging.INFO,
0030 generators=[
0031 acts.examples.EventGenerator.Generator(
0032 multiplicity=acts.examples.FixedMultiplicityGenerator(n=2),
0033 vertex=acts.examples.GaussianVertexGenerator(
0034 stddev=acts.Vector4(0, 0, 0, 0), mean=acts.Vector4(0, 0, 0, 0)
0035 ),
0036 particles=acts.examples.ParametricParticleGenerator(
0037 p=(1 * u.GeV, 10 * u.GeV),
0038 eta=(-2, 2),
0039 phi=(0, 90 * u.degree),
0040 randomizeCharge=True,
0041 numParticles=4,
0042 ),
0043 )
0044 ],
0045 outputParticles="particles_input",
0046 outputVertices="vertices_input",
0047 randomNumbers=rnd,
0048 )
0049
0050 s.addReader(evGen)
0051
0052 erAlgCfg = acts.examples.geant4.hepmc3.EventRecording.Config(
0053 inputParticles=evGen.config.outputParticles,
0054 outputHepMcTracks="geant-event",
0055 seed1=43,
0056 seed2=44,
0057 detectorConstructionFactory=detectorConstructionFactory,
0058 )
0059
0060 erAlg = acts.examples.geant4.hepmc3.EventRecording(
0061 config=erAlgCfg, level=acts.logging.INFO
0062 )
0063
0064 s.addAlgorithm(erAlg)
0065
0066 s.addWriter(
0067 acts.examples.hepmc3.HepMC3AsciiWriter(
0068 level=acts.logging.INFO,
0069 outputDir=hepmc_dir,
0070 outputStem="events",
0071 inputEvents=erAlg.config.outputHepMcTracks,
0072 )
0073 )
0074
0075 return s
0076
0077
0078 if "__main__" == __name__:
0079 detector, trackingGeometry, decorators = getOpenDataDetector()
0080
0081 detectorConstructionFactory = (
0082 acts.examples.geant4.dd4hep.DDG4DetectorConstructionFactory(detector)
0083 )
0084
0085 runEventRecording(
0086 detectorConstructionFactory=detectorConstructionFactory,
0087 outputDir=os.getcwd(),
0088 ).run()