ATLAS Offline Software
Loading...
Searching...
No Matches
ActsGeometryConfig.py
Go to the documentation of this file.
1# Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
2from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
3from AthenaConfiguration.ComponentFactory import CompFactory
4
5
7 name: str = "ActsTrackingGeometrySvc",
8 **kwargs) -> ComponentAccumulator:
9 acc = ComponentAccumulator()
10
11 from ROOT.ActsTrk import DetectorType
12 kwargs.setdefault("NotAlignDetectors", [DetectorType.Trt,
13 DetectorType.Hgtd])
14 kwargs.setdefault("UseBlueprint", flags.Acts.TrackingGeometry.UseBlueprint)
15 kwargs.setdefault("ObjDebugOutput", flags.Acts.TrackingGeometry.ObjDebugOutput)
16 kwargs.setdefault("KeepGoingOnMaterialMergeFailure", flags.Acts.TrackingGeometry.KeepGoingOnMaterialMergeFailure)
17
18 subDetectors = []
19 blueprintTools = []
20 refineTools = []
21
22 # This is a (hopefully) temporary workaround to the issue described in
23 # ATEAM-1134. Once Athena moves to using ROOT 6.38+, this should no longer
24 # be necessary.
25 import ROOT
26 from AthenaServices.ROOTMessageFilterSvcConfig import ROOTMessageFilterSvcCfg
27 acc.merge(ROOTMessageFilterSvcCfg(flags,
28 SuppressionRules=[('TCling::LoadPCM',
29 '.*libGeom_rdict.pcm.*',
30 ROOT.kError)]))
31
32 if flags.Detector.GeometryBpipe:
33 from BeamPipeGeoModel.BeamPipeGMConfig import BeamPipeGeometryCfg
34 acc.merge(BeamPipeGeometryCfg(flags))
35 kwargs.setdefault("BuildBeamPipe", True)
36
37 if flags.Detector.GeometryPixel:
38 subDetectors += ["Pixel"]
39 from PixelGeoModel.PixelGeoModelConfig import PixelReadoutGeometryCfg
40 acc.merge(PixelReadoutGeometryCfg(flags))
41
42
43 if flags.Detector.GeometrySCT:
44 subDetectors += ["SCT"]
45 from SCT_GeoModel.SCT_GeoModelConfig import SCT_ReadoutGeometryCfg
46 acc.merge(SCT_ReadoutGeometryCfg(flags))
47
48 if flags.Detector.GeometryTRT:
49 # Commented out because TRT is not production ready yet and we don't
50 # want to turn it on even if the global flag is set
51 # subDetectors += ["TRT"]
52 from TRT_GeoModel.TRT_GeoModelConfig import TRT_ReadoutGeometryCfg
53 acc.merge(TRT_ReadoutGeometryCfg(flags))
54
55 if flags.Detector.GeometryCalo:
56 #No non-blueprint mode exists for calo, so all we do here is
57 #to setup both the LAr and Tile geometry to enable access to the
58 #CaloDetDescrManager geometry information. This is needed
59 #for the Acts calo blueprint builder tool
60 #Note that in blueprint mode the calo geometry is built
61 #in initialize of the TrackingGeometrySvc and so we use
62 #a static calo geometry. To avoid errors the flag Lar.doAlign
63 #must be set to false (when flag values are set)
64 from LArGeoAlgsNV.LArGMConfig import LArGMCfg
65 acc.merge(LArGMCfg(flags))
66 from TileGeoModel.TileGMConfig import TileGMCfg
67 acc.merge(TileGMCfg(flags))
68
69 #first add the itk builder and then the muon system - this is the correct order
70 if flags.Acts.TrackingGeometry.UseBlueprint:
71 blueprintTools += [acc.popToolsAndMerge(BeamPipeBlueprintNodeBuilderCfg(flags))]
72 if flags.Detector.GeometryITkPixel or flags.Detector.GeometryITkStrip:
73 if flags.Acts.TrackingGeometry.ITkHgtdMaterialSource != "None":
74 refineTools += [acc.popToolsAndMerge(ITkMaterialDecoratorToolCfg(flags))]
75 blueprintTools += [acc.popToolsAndMerge(ItkBlueprintNodeBuilderCfg(flags))]
76 if flags.Detector.GeometryHGTD:
77 blueprintTools += [acc.popToolsAndMerge(HgtdBlueprintNodeBuilderCfg(flags))]
78 if flags.Detector.GeometryCalo:
79 subDetectors += ["Calo"]
80 blueprintTools += [acc.popToolsAndMerge(caloBlueprintNodeBuilderCfg(flags))]
81 # Muon system is currently disabled for simulation. Enabling it for non-simulation use cases.
82 if flags.Muon.usePhaseIIGeoSetup and 'ACTS' not in flags.Sim.ISF.Simulator.value:
83 subDetectors += ["Muon"]
84 from MuonConfig.MuonGeometryConfig import MuonGeoModelCfg
85 acc.merge(MuonGeoModelCfg(flags))
86 from ActsMuonDetector.ActsMuonDetectorCfg import MuonBlueprintNodeBuilderCfg, MuonMaterialDecoratorToolCfg
87 blueprintTools += [acc.popToolsAndMerge(MuonBlueprintNodeBuilderCfg(flags))]
88
90 if flags.Muon.trackGeometryPassiveMaterial and \
91 len(flags.Muon.trackGeometryMaterialMap) > 0:
92 refineTools+= [acc.popToolsAndMerge(MuonMaterialDecoratorToolCfg(flags))]
93
94
95 if flags.Detector.GeometryITkPixel:
96 subDetectors += ["ITkPixel"]
97 from PixelGeoModelXml.ITkPixelGeoModelConfig import ITkPixelReadoutGeometryCfg
98 acc.merge(ITkPixelReadoutGeometryCfg(flags))
99
100 if flags.Detector.GeometryITkStrip:
101 subDetectors += ["ITkStrip"]
102 from StripGeoModelXml.ITkStripGeoModelConfig import ITkStripReadoutGeometryCfg
103 acc.merge(ITkStripReadoutGeometryCfg(flags))
104
105
106 if flags.Detector.GeometryHGTD:
107 subDetectors += ["HGTD"]
108 if flags.HGTD.Geometry.useGeoModelXml:
109 from HGTD_GeoModelXml.HGTD_GeoModelConfig import HGTD_ReadoutGeometryCfg
110 else:
111 from HGTD_GeoModel.HGTD_GeoModelConfig import HGTD_ReadoutGeometryCfg
112 acc.merge(HGTD_ReadoutGeometryCfg(flags))
113
114 if kwargs.get("BuildDetrayGeometry", False):
115 # The Detray geometry is built once, at initialize, and stays on the host,
116 # so a plain host memory resource is all it needs. A workflow that copies
117 # the geometry to a device can override HostMR with the backend specific
118 # tool from AthDeviceComps.AthDeviceCompsConfig.HostMemoryResourceToolCfg,
119 # to get the detector allocated in pinned memory.
120 kwargs.setdefault("HostMR",
121 CompFactory.AthDevice.HostMemoryResourceTool("ActsDetrayHostMR"))
122
123 actsTrackingGeometrySvc = CompFactory.ActsTrk.TrackingGeometrySvc(name,
124 BuildSubDetectors=subDetectors,
125 BlueprintNodeBuilders=blueprintTools,
126 RefinementTools=refineTools,
127 **kwargs)
128
129 if flags.Acts.TrackingGeometry.MaterialSource == "Default":
130 if flags.Detector.GeometryITk:
131 extension = "ITk"
132 if flags.Detector.GeometryHGTD:
133 extension += "-HGTD"
134 if flags.Acts.TrackingGeometry.InsertITkPassiveMaterialLayers:
135 extension += "-passiveLayers"
136 if flags.Acts.TrackingGeometry.MaterialFileExtension:
137 extension += "-"+flags.Acts.TrackingGeometry.MaterialFileExtension
138 actsTrackingGeometrySvc.UseMaterialMap = True
139 actsTrackingGeometrySvc.MaterialMapCalibFolder = flags.Acts.TrackingGeometry.MaterialCalibrationFolder
140 actsTrackingGeometrySvc.MaterialMapInputFile = \
141 "material-maps-" + flags.GeoModel.AtlasVersion + "-" + extension + ".json"
142
143 elif flags.Acts.TrackingGeometry.MaterialSource.find(".json") != -1:
144 actsTrackingGeometrySvc.UseMaterialMap = True
145 actsTrackingGeometrySvc.MaterialMapCalibFolder = flags.Acts.TrackingGeometry.MaterialCalibrationFolder
146 actsTrackingGeometrySvc.MaterialMapInputFile = flags.Acts.TrackingGeometry.MaterialSource
147
148 if flags.Acts.TrackingGeometry.InsertITkPassiveMaterialLayers:
149 actsTrackingGeometrySvc.PassiveITkInnerPixelBarrelLayerRadii = flags.Acts.TrackingGeometry.PassiveITkInnerPixelBarrelLayerRadii
150 actsTrackingGeometrySvc.PassiveITkInnerPixelBarrelLayerHalflengthZ = flags.Acts.TrackingGeometry.PassiveITkInnerPixelBarrelLayerHalflengthZ
151 actsTrackingGeometrySvc.PassiveITkInnerPixelBarrelLayerThickness = flags.Acts.TrackingGeometry.PassiveITkInnerPixelBarrelLayerThickness
152 actsTrackingGeometrySvc.PassiveITkOuterPixelBarrelLayerRadii = flags.Acts.TrackingGeometry.PassiveITkOuterPixelBarrelLayerRadii
153 actsTrackingGeometrySvc.PassiveITkOuterPixelBarrelLayerHalflengthZ = flags.Acts.TrackingGeometry.PassiveITkOuterPixelBarrelLayerHalflengthZ
154 actsTrackingGeometrySvc.PassiveITkOuterPixelBarrelLayerThickness = flags.Acts.TrackingGeometry.PassiveITkOuterPixelBarrelLayerThickness
155 actsTrackingGeometrySvc.PassiveITkStripBarrelLayerRadii = flags.Acts.TrackingGeometry.PassiveITkStripBarrelLayerRadii
156 actsTrackingGeometrySvc.PassiveITkStripBarrelLayerHalflengthZ = flags.Acts.TrackingGeometry.PassiveITkStripBarrelLayerHalflengthZ
157 actsTrackingGeometrySvc.PassiveITkStripBarrelLayerThickness = flags.Acts.TrackingGeometry.PassiveITkStripBarrelLayerThickness
158
159
160
161 acc.addService(actsTrackingGeometrySvc, primary = True)
162 return acc
163
164
165
166def ITkMaterialDecoratorToolCfg(flags, name="ITkMaterialDecorator", **kwargs) -> ComponentAccumulator:
167 result = ComponentAccumulator()
168 filename = flags.Acts.TrackingGeometry.ITkHgtdMaterialSource
169 folder = flags.Acts.TrackingGeometry.ITkHgtdMaterialMapPath
170 if flags.Acts.TrackingGeometry.ITkHgtdMaterialSource == "Default":
171 extension = "itk"
172 if flags.Detector.GeometryHGTD:
173 extension += "-hgtd"
174 # ITkMaterialDecoratorTool picks its reader (Json or Root) from the file
175 # extension, so this is what selects the default format read back in.
176 filename = f"material-maps-{extension}-{flags.GeoModel.AtlasVersion}.json"
177 kwargs.setdefault("MaterialDbFile", filename)
178 kwargs.setdefault("MaterialDbFolder", folder)
179 the_tool = CompFactory.ActsTrk.ITkMaterialDecoratorTool(name, **kwargs)
180 result.setPrivateTools(the_tool)
181 return result
182
184 name: str = "ActsExtrapolationTool",
185 **kwargs) -> ComponentAccumulator:
186 acc = ComponentAccumulator()
187 from MagFieldServices.MagFieldServicesConfig import AtlasFieldCacheCondAlgCfg
188 acc.merge(AtlasFieldCacheCondAlgCfg(flags))
189 from ActsAlignmentAlgs.AlignmentAlgsConfig import ActsGeometryContextAlgCfg
190 acc.merge(ActsGeometryContextAlgCfg(flags))
191 acc.merge(ActsTrackingGeometrySvcCfg(flags))
192 acc.setPrivateTools(CompFactory.ActsTrk.ExtrapolationTool(name, **kwargs))
193 return acc
194
195
196def ActsGeometryRealmConvToolCfg(flags, name: str = "ActsGeometryRealmConvTool", **kwargs) -> ComponentAccumulator:
197 acc = ComponentAccumulator()
198 from ActsAlignmentAlgs.AlignmentAlgsConfig import ActsGeometryContextAlgCfg
199 acc.merge(ActsGeometryContextAlgCfg(flags))
200 acc.merge(ActsTrackingGeometrySvcCfg(flags))
201 kwargs.setdefault("ExtractMuonSurfaces", flags.Muon.usePhaseIIGeoSetup)
202 acc.addPublicTool(CompFactory.ActsTrk.GeometryRealmConvTool(name, **kwargs), primary = True)
203 return acc
204
206 name: str = "ActsObjWriterTool",
207 **kwargs) -> ComponentAccumulator:
208 acc = ComponentAccumulator()
209 acc.addPublicTool(CompFactory.ActsObjWriterTool(name, **kwargs), primary=True)
210 return acc
211
212
214 name: str = "ActsExtrapolationAlg",
215 **kwargs) -> ComponentAccumulator:
216 acc = ComponentAccumulator()
217
218 if "ExtrapolationTool" not in kwargs:
219 kwargs.setdefault("ExtrapolationTool", acc.popToolsAndMerge(ActsExtrapolationToolCfg(flags))) # PrivateToolHandle
220 from MuonConfig.MuonConfigUtils import setupHistSvcCfg
221 acc.merge(setupHistSvcCfg(flags, outFile="propsteps.root", outStream = "ActsExtrapolationRecord"))
222 acc.addEventAlgo(CompFactory.ActsTrk.ExtrapolationTestAlg(name, **kwargs))
223 return acc
224
226 name: str = "ActsWriteTrackingGeometry",
227 **kwargs) -> ComponentAccumulator:
228 acc = ComponentAccumulator()
229 from MagFieldServices.MagFieldServicesConfig import AtlasFieldCacheCondAlgCfg
230 acc.merge(AtlasFieldCacheCondAlgCfg(flags))
231 from ActsAlignmentAlgs.AlignmentAlgsConfig import ActsGeometryContextAlgCfg
232 acc.merge(ActsGeometryContextAlgCfg(flags))
233 acc.merge(ActsTrackingGeometrySvcCfg(flags))
234 acc.addEventAlgo(CompFactory.ActsTrk.WriteTrackingGeometry(name, **kwargs), primary = True)
235 return acc
236
238 name: str = "ActsWriteTrackingGeometryTransformsAlg",
239 **kwargs: dict) -> ComponentAccumulator:
240 acc = ComponentAccumulator()
241
242 acc.addEventAlgo(CompFactory.ActsWriteTrackingGeometryTransforms(name,**kwargs))
243 return acc
244
246 name: str = "ActsVolumeIdToDetectorCollectionMappingAlgCfg",
247 **kwargs) -> ComponentAccumulator:
248 acc = ComponentAccumulator()
249 kwargs.setdefault('ActsVolumeIdToDetectorElementCollectionMap', 'VolumeIdToDetectorElementCollectionMap')
250
251 def filterCollections(flags, pixel_det_el, strip_det_el) :
252 ret=[]
253 if flags.Detector.GeometryITkPixel:
254 ret += [ pixel_det_el ]
255 if flags.Detector.GeometryITkStrip:
256 ret += [ strip_det_el ]
257 return ret
258 kwargs.setdefault('DetectorElementsKeys', filterCollections( flags,
259 'ITkPixelDetectorElementCollection',
260 'ITkStripDetectorElementCollection'))
261
262 acc.addCondAlgo(CompFactory.ActsTrk.ActsVolumeIdToDetectorElementCollectionMappingAlg(name, **kwargs))
263 return acc
264
266 name: str = "ActsInDetVolumeIdToDetectorCollectionMappingAlgCfg",
267 **kwargs) -> ComponentAccumulator:
268 # Inner Detector version of ActsVolumeIdToDetectorCollectionMappingAlgCfg
269 acc = ComponentAccumulator()
270 kwargs.setdefault('ActsVolumeIdToDetectorElementCollectionMap', 'VolumeIdToDetectorElementCollectionMap')
271
272 def filterCollections(flags, pixel_det_el, strip_det_el) :
273 ret=[]
274 if flags.Detector.GeometryPixel:
275 ret += [ pixel_det_el ]
276 if flags.Detector.GeometrySCT:
277 ret += [ strip_det_el ]
278 return ret
279 kwargs.setdefault('DetectorElementsKeys', filterCollections( flags,
280 'PixelDetectorElementCollection',
281 'SCT_DetectorElementCollection'))
282
283 acc.addCondAlgo(CompFactory.ActsTrk.ActsVolumeIdToDetectorElementCollectionMappingAlg(name, **kwargs))
284 return acc
285
287 flags, name: str = "BeamPipeBlueprintNodeBuilder", **kwargs
288) -> ComponentAccumulator:
289 result = ComponentAccumulator()
290 kwargs.setdefault("loadFromDatabase", flags.Detector.GeometryBpipe)
291 result.setPrivateTools(
292 CompFactory.ActsTrk.BeamPipeBlueprintNodeBuilder(name, **kwargs)
293 )
294 return result
295
296
298 name: str = "ItkBlueprintNodeBuilder",
299 **kwargs) -> ComponentAccumulator:
300 result = ComponentAccumulator()
301 kwargs.setdefault("buildPixel", flags.Detector.GeometryITkPixel)
302 kwargs.setdefault("buildStrip", flags.Detector.GeometryITkStrip)
303 the_tool = CompFactory.ActsTrk.ItkBlueprintNodeBuilder(name, **kwargs)
304 result.setPrivateTools(the_tool)
305 return result
306
307
309 flags, name: str = "HgtdBlueprintNodeBuilder", **kwargs
310) -> ComponentAccumulator:
311 result = ComponentAccumulator()
312 the_tool = CompFactory.ActsTrk.HgtdBlueprintNodeBuilder(
313 name, **kwargs)
314 result.setPrivateTools(the_tool)
315 return result
316
317
319 name: str = "CaloBlueprintNodeBuilder",
320 **kwargs) -> ComponentAccumulator:
321 result = ComponentAccumulator()
322 the_tool = CompFactory.ActsTrk.CaloBlueprintNodeBuilder(name, **kwargs)
323 result.setPrivateTools(the_tool)
324 return result
ComponentAccumulator ActsWriteTrackingGeometryTransformsAlgCfg(flags, str name="ActsWriteTrackingGeometryTransformsAlg", **dict kwargs)
ComponentAccumulator ActsTrackingGeometrySvcCfg(flags, str name="ActsTrackingGeometrySvc", **kwargs)
ComponentAccumulator ActsExtrapolationToolCfg(flags, str name="ActsExtrapolationTool", **kwargs)
ComponentAccumulator ActsObjWriterToolCfg(flags, str name="ActsObjWriterTool", **kwargs)
ComponentAccumulator BeamPipeBlueprintNodeBuilderCfg(flags, str name="BeamPipeBlueprintNodeBuilder", **kwargs)
ComponentAccumulator ActsVolumeIdToDetectorCollectionMappingAlgCfg(flags, str name="ActsVolumeIdToDetectorCollectionMappingAlgCfg", **kwargs)
ComponentAccumulator ItkBlueprintNodeBuilderCfg(flags, str name="ItkBlueprintNodeBuilder", **kwargs)
ComponentAccumulator ActsGeometryRealmConvToolCfg(flags, str name="ActsGeometryRealmConvTool", **kwargs)
ComponentAccumulator ActsInDetVolumeIdToDetectorCollectionMappingAlgCfg(flags, str name="ActsInDetVolumeIdToDetectorCollectionMappingAlgCfg", **kwargs)
ComponentAccumulator caloBlueprintNodeBuilderCfg(flags, str name="CaloBlueprintNodeBuilder", **kwargs)
ComponentAccumulator HgtdBlueprintNodeBuilderCfg(flags, str name="HgtdBlueprintNodeBuilder", **kwargs)
ComponentAccumulator ActsWriteTrackingGeometryCfg(flags, str name="ActsWriteTrackingGeometry", **kwargs)
ComponentAccumulator ActsExtrapolationAlgCfg(flags, str name="ActsExtrapolationAlg", **kwargs)
ComponentAccumulator ITkMaterialDecoratorToolCfg(flags, name="ITkMaterialDecorator", **kwargs)