File indexing completed on 2025-06-30 07:52:48
0001
0002 import pathlib, acts, acts.examples, acts.examples.itk
0003 from acts.examples.simulation import (
0004 addParticleGun,
0005 MomentumConfig,
0006 EtaConfig,
0007 ParticleConfig,
0008 addPythia8,
0009 ParticleSelectorConfig,
0010 addGenParticleSelection,
0011 addFatras,
0012 addDigitization,
0013 addDigiParticleSelection,
0014 )
0015 from acts.examples.reconstruction import (
0016 addSeeding,
0017 SeedingAlgorithm,
0018 addCKFTracks,
0019 CkfConfig,
0020 TrackSelectorConfig,
0021 addAmbiguityResolution,
0022 AmbiguityResolutionConfig,
0023 addVertexFitting,
0024 VertexFinder,
0025 )
0026
0027 ttbar_pu200 = False
0028 u = acts.UnitConstants
0029 geo_dir = pathlib.Path("acts-itk")
0030 outputDir = pathlib.Path.cwd() / "itk_output"
0031
0032
0033 detector = acts.examples.itk.buildITkGeometry(geo_dir)
0034 trackingGeometry = detector.trackingGeometry()
0035 field = acts.examples.MagneticFieldMapXyz(str(geo_dir / "bfield/ATLAS-BField-xyz.root"))
0036 rnd = acts.examples.RandomNumbers(seed=42)
0037
0038 s = acts.examples.Sequencer(events=100, numThreads=-1, outputDir=str(outputDir))
0039
0040 if not ttbar_pu200:
0041 addParticleGun(
0042 s,
0043 MomentumConfig(1.0 * u.GeV, 10.0 * u.GeV, transverse=True),
0044 EtaConfig(-4.0, 4.0, uniform=True),
0045 ParticleConfig(2, acts.PdgParticle.eMuon, randomizeCharge=True),
0046 rnd=rnd,
0047 )
0048 else:
0049 addPythia8(
0050 s,
0051 hardProcess=["Top:qqbar2ttbar=on"],
0052 npileup=200,
0053 vtxGen=acts.examples.GaussianVertexGenerator(
0054 stddev=acts.Vector4(0.0125 * u.mm, 0.0125 * u.mm, 55.5 * u.mm, 5.0 * u.ns),
0055 mean=acts.Vector4(0, 0, 0, 0),
0056 ),
0057 rnd=rnd,
0058 outputDirRoot=outputDir,
0059 )
0060
0061 addGenParticleSelection(
0062 s,
0063 ParticleSelectorConfig(
0064 rho=(0.0 * u.mm, 28.0 * u.mm),
0065 absZ=(0.0 * u.mm, 1.0 * u.m),
0066 eta=(-4.0, 4.0),
0067 pt=(150 * u.MeV, None),
0068 ),
0069 )
0070
0071 addFatras(
0072 s,
0073 trackingGeometry,
0074 field,
0075 rnd=rnd,
0076 outputDirRoot=outputDir,
0077 )
0078
0079 addDigitization(
0080 s,
0081 trackingGeometry,
0082 field,
0083 digiConfigFile=geo_dir / "itk-hgtd/itk-smearing-config.json",
0084 outputDirRoot=outputDir,
0085 rnd=rnd,
0086 )
0087
0088 addDigiParticleSelection(
0089 s,
0090 ParticleSelectorConfig(
0091 pt=(1.0 * u.GeV, None),
0092 eta=(-4.0, 4.0),
0093 measurements=(9, None),
0094 removeNeutral=True,
0095 ),
0096 )
0097
0098 addSeeding(
0099 s,
0100 trackingGeometry,
0101 field,
0102 seedingAlgorithm=SeedingAlgorithm.Default,
0103 *acts.examples.itk.itkSeedingAlgConfig(
0104 acts.examples.itk.InputSpacePointsType.PixelSpacePoints
0105 ),
0106 initialSigmas=[
0107 1 * u.mm,
0108 1 * u.mm,
0109 1 * u.degree,
0110 1 * u.degree,
0111 0 * u.e / u.GeV,
0112 1 * u.ns,
0113 ],
0114 initialSigmaQoverPt=0.1 * u.e / u.GeV,
0115 initialSigmaPtRel=0.1,
0116 initialVarInflation=[1.0] * 6,
0117 geoSelectionConfigFile=geo_dir / "itk-hgtd/geoSelection-ITk.json",
0118 outputDirRoot=outputDir,
0119 )
0120
0121 addCKFTracks(
0122 s,
0123 trackingGeometry,
0124 field,
0125 trackSelectorConfig=(
0126
0127 TrackSelectorConfig(absEta=(None, 2.0), pt=(0.9 * u.GeV, None), nMeasurementsMin=9, maxHoles=2, maxOutliers=2, maxSharedHits=2),
0128 TrackSelectorConfig(absEta=(None, 2.6), pt=(0.4 * u.GeV, None), nMeasurementsMin=8, maxHoles=2, maxOutliers=2, maxSharedHits=2),
0129 TrackSelectorConfig(absEta=(None, 4.0), pt=(0.4 * u.GeV, None), nMeasurementsMin=7, maxHoles=2, maxOutliers=2, maxSharedHits=2),
0130
0131 ),
0132 ckfConfig=CkfConfig(
0133 seedDeduplication=True,
0134 stayOnSeed=True,
0135
0136 pixelVolumes=[8, 9, 10, 13, 14, 15, 16, 18, 19, 20],
0137 stripVolumes=[22, 23, 24],
0138 maxPixelHoles=1,
0139 maxStripHoles=2,
0140 ),
0141 outputDirRoot=outputDir,
0142 )
0143
0144 addAmbiguityResolution(
0145 s,
0146 AmbiguityResolutionConfig(
0147 maximumSharedHits=3,
0148 maximumIterations=10000,
0149 nMeasurementsMin=6,
0150 ),
0151 outputDirRoot=outputDir,
0152 )
0153
0154 addVertexFitting(
0155 s,
0156 field,
0157 vertexFinder=VertexFinder.AMVF,
0158 outputDirRoot=outputDir,
0159 )
0160
0161 s.run()