ATLAS Offline Software
Loading...
Searching...
No Matches
G4GeometryToolConfig.py
Go to the documentation of this file.
1# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
2from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
3from AthenaConfiguration.ComponentFactory import CompFactory
4from AthenaConfiguration.Enums import BeamType, LHCPeriod
5from AthenaConfiguration.AccumulatorCache import AccumulatorCache
6
7from AthenaCommon import Logging
8
9from SimulationConfig.SimEnums import BeamPipeSimMode, CalibrationRun, CavernBackground, LArParameterization
10
11#the physics region tools
12from G4AtlasTools.G4PhysicsRegionConfig import SX1PhysicsRegionToolCfg, BedrockPhysicsRegionToolCfg, CavernShaftsConcretePhysicsRegionToolCfg, PixelPhysicsRegionToolCfg, SCTPhysicsRegionToolCfg, TRTPhysicsRegionToolCfg, TRT_ArPhysicsRegionToolCfg,ITkPixelPhysicsRegionToolCfg,ITkStripPhysicsRegionToolCfg,HGTDPhysicsRegionToolCfg,BeampipeFwdCutPhysicsRegionToolCfg, FWDBeamLinePhysicsRegionToolCfg, CALOPhysicsRegionToolCfg, EMBPhysicsRegionToolCfg, EMECPhysicsRegionToolCfg, HECPhysicsRegionToolCfg, FCALPhysicsRegionToolCfg, FCAL2ParaPhysicsRegionToolCfg, EMECParaPhysicsRegionToolCfg, FCALParaPhysicsRegionToolCfg, PreSampLArPhysicsRegionToolCfg, DeadMaterialPhysicsRegionToolCfg #, FwdRegionPhysicsRegionToolCfg
13from G4AtlasTools.G4PhysicsRegionConfig import DriftWallPhysicsRegionToolCfg, DriftWall1PhysicsRegionToolCfg, DriftWall2PhysicsRegionToolCfg, MuonSystemFastPhysicsRegionToolCfg
14
15#the field config tools
16from G4AtlasTools.G4FieldConfig import ATLASFieldManagerToolCfg, TightMuonsATLASFieldManagerToolCfg, BeamPipeFieldManagerToolCfg, InDetFieldManagerToolCfg, ITkFieldManagerToolCfg, MuonsOnlyInCaloFieldManagerToolCfg, MuonFieldManagerToolCfg, Q1FwdFieldManagerToolCfg, Q2FwdFieldManagerToolCfg, Q3FwdFieldManagerToolCfg, D1FwdFieldManagerToolCfg, D2FwdFieldManagerToolCfg, Q4FwdFieldManagerToolCfg, Q5FwdFieldManagerToolCfg, Q6FwdFieldManagerToolCfg, Q7FwdFieldManagerToolCfg, Q1HKickFwdFieldManagerToolCfg, Q1VKickFwdFieldManagerToolCfg, Q2HKickFwdFieldManagerToolCfg, Q2VKickFwdFieldManagerToolCfg, Q3HKickFwdFieldManagerToolCfg, Q3VKickFwdFieldManagerToolCfg, Q4VKickAFwdFieldManagerToolCfg, Q4HKickFwdFieldManagerToolCfg, Q4VKickBFwdFieldManagerToolCfg, Q5HKickFwdFieldManagerToolCfg, Q6VKickFwdFieldManagerToolCfg, FwdRegionFieldManagerToolCfg
17
18from G4AtlasTools.G4AtlasToolsConfig import SensitiveDetectorMasterToolCfg, G4CaloTransportToolCfg, FastSimulationMasterToolCfg
19
20CylindricalEnvelope, PolyconicalEnvelope, MaterialDescriptionTool,VoxelDensityTool,G4AtlasDetectorConstructionTool,BoxEnvelope=CompFactory.getComps("CylindricalEnvelope","PolyconicalEnvelope","MaterialDescriptionTool","VoxelDensityTool","G4AtlasDetectorConstructionTool","BoxEnvelope")
21
22from AthenaCommon.SystemOfUnits import mm, cm, m
23
24#ToDo - finish migrating this
25#from ForwardRegionProperties.ForwardRegionPropertiesToolConfig import ForwardRegionPropertiesCfg
26
27#put it here to avoid circular import?
28def G4GeometryNotifierSvcCfg(flags, name="G4GeometryNotifierSvc", **kwargs):
29 result = ComponentAccumulator()
30 kwargs.setdefault("ActivateLVNotifier", True)
31 kwargs.setdefault("ActivatePVNotifier", False)
32 result.addService(CompFactory.G4GeometryNotifierSvc(name, **kwargs), primary = True)
33 return result
34
35
36def GeoDetectorToolCfg(flags, name='GeoDetectorTool', **kwargs):
37 result = ComponentAccumulator()
38 from Geo2G4.Geo2G4Config import Geo2G4SvcCfg
39 kwargs.setdefault("Geo2G4Svc", result.getPrimaryAndMerge(Geo2G4SvcCfg(flags)))
40 #add the GeometryNotifierSvc
41 kwargs.setdefault("GeometryNotifierSvc", result.getPrimaryAndMerge(G4GeometryNotifierSvcCfg(flags)))
42 result.setPrivateTools(CompFactory.GeoDetectorTool(name, **kwargs))
43 return result
44
45
46def BeamPipeGeoDetectorToolCfg(flags, name='BeamPipe', **kwargs):
47 #set up geometry
48 from BeamPipeGeoModel.BeamPipeGMConfig import BeamPipeGeometryCfg
49 result = BeamPipeGeometryCfg(flags)
50 kwargs.setdefault("DetectorName", "BeamPipe")
51 result.setPrivateTools(result.popToolsAndMerge(GeoDetectorToolCfg(flags, name, **kwargs)))
52 return result
53
54
55def PixelGeoDetectorToolCfg(flags, name='Pixel', **kwargs):
56 #set up geometry
57 from PixelGeoModel.PixelGeoModelConfig import PixelSimulationGeometryCfg
58 result = PixelSimulationGeometryCfg(flags)
59 kwargs.setdefault("DetectorName", "Pixel")
60 result.setPrivateTools(result.popToolsAndMerge(GeoDetectorToolCfg(flags, name, **kwargs)))
61 return result
62
63
64def SCTGeoDetectorToolCfg(flags, name='SCT', **kwargs):
65 #set up geometry
66 from SCT_GeoModel.SCT_GeoModelConfig import SCT_SimulationGeometryCfg
67 result = SCT_SimulationGeometryCfg(flags)
68 kwargs.setdefault("DetectorName", "SCT")
69 result.setPrivateTools(result.popToolsAndMerge(GeoDetectorToolCfg(flags, name, **kwargs)))
70 return result
71
72
73def PLRGeoDetectorToolCfg(flags, name='PLR', **kwargs):
74 #set up geometry
75 from PLRGeoModelXml.PLR_GeoModelConfig import PLR_GeometryCfg
76 result = PLR_GeometryCfg(flags)
77 kwargs.setdefault("DetectorName", "PLR")
78 result.setPrivateTools(result.popToolsAndMerge(GeoDetectorToolCfg(flags, name, **kwargs)))
79 return result
80
81
82def BCMPrimeGeoDetectorToolCfg(flags, name='BCMPrime', **kwargs):
83 #set up geometry
84 from BCMPrimeGeoModelXml.BCMPrimeGeoModelConfig import BCMPrimeGeometryCfg
85 result = BCMPrimeGeometryCfg(flags)
86 kwargs.setdefault("DetectorName", "BCMPrime")
87 result.setPrivateTools(result.popToolsAndMerge(GeoDetectorToolCfg(flags, name, **kwargs)))
88 return result
89
90
91def ITkPixelGeoDetectorToolCfg(flags, name='ITkPixel', **kwargs):
92 #set up geometry
93 from PixelGeoModelXml.ITkPixelGeoModelConfig import ITkPixelSimulationGeometryCfg
94 result = ITkPixelSimulationGeometryCfg(flags)
95 kwargs.setdefault("DetectorName", "ITkPixel")
96 result.setPrivateTools(result.popToolsAndMerge(GeoDetectorToolCfg(flags, name, **kwargs)))
97 return result
98
99
100def ITkStripGeoDetectorToolCfg(flags, name='ITkStrip', **kwargs):
101 #set up geometry
102 from StripGeoModelXml.ITkStripGeoModelConfig import ITkStripSimulationGeometryCfg
103 result = ITkStripSimulationGeometryCfg(flags)
104 kwargs.setdefault("DetectorName", "ITkStrip")
105 result.setPrivateTools(result.popToolsAndMerge(GeoDetectorToolCfg(flags, name, **kwargs)))
106 return result
107
108
109def HGTDGeoDetectorToolCfg(flags, name='HGTD', **kwargs):
110 #set up geometry
111 if flags.HGTD.Geometry.useGeoModelXml:
112 from HGTD_GeoModelXml.HGTD_GeoModelConfig import HGTD_SimulationGeometryCfg
113 else:
114 from HGTD_GeoModel.HGTD_GeoModelConfig import HGTD_SimulationGeometryCfg
115
116 result = HGTD_SimulationGeometryCfg(flags)
117 kwargs.setdefault("DetectorName", "HGTD")
118 result.setPrivateTools(result.popToolsAndMerge(GeoDetectorToolCfg(flags, name, **kwargs)))
119 return result
120
121
122def HGTDServiceToolCfg(flags, name='HGTDServices', **kwargs):
123 #set up geometry
124 from HGTD_GeoModelXml.HGTDServiceGeoModelConfig import HGTDServiceGeoModelCfg
125 result = HGTDServiceGeoModelCfg(flags)
126 kwargs.setdefault("DetectorName", "HGTDServices")
127 result.setPrivateTools(result.popToolsAndMerge(GeoDetectorToolCfg(flags, name, **kwargs)))
128 return result
129
130
131def TRTGeoDetectorToolCfg(flags, name='TRT', **kwargs):
132 #set up geometry
133 from TRT_GeoModel.TRT_GeoModelConfig import TRT_SimulationGeometryCfg
134 result = TRT_SimulationGeometryCfg(flags)
135 kwargs.setdefault("DetectorName", "TRT")
136 result.setPrivateTools(result.popToolsAndMerge(GeoDetectorToolCfg(flags, name, **kwargs)))
137 return result
138
139
140def IDetServicesMatGeoDetectorToolCfg(flags, name='IDetServicesMat', **kwargs):
141 #set up geometry
142 from InDetServMatGeoModel.InDetServMatGeoModelConfig import InDetServiceMaterialCfg
143 result = InDetServiceMaterialCfg(flags)
144 kwargs.setdefault("DetectorName", "InDetServMat")
145 result.setPrivateTools(result.popToolsAndMerge(GeoDetectorToolCfg(flags, name, **kwargs)))
146 return result
147
148
149def LArMgrGeoDetectorToolCfg(flags, name='LArMgr', **kwargs):
150 #set up geometry
151 from LArGeoAlgsNV.LArGMConfig import LArGMCfg
152 result = LArGMCfg(flags)
153 kwargs.setdefault("DetectorName", "LArMgr")
154 result.setPrivateTools(result.popToolsAndMerge(GeoDetectorToolCfg(flags, name, **kwargs)))
155 return result
156
157
158def TileGeoDetectorToolCfg(flags, name='Tile', **kwargs):
159 #set up geometry
160 from TileGeoModel.TileGMConfig import TileGMCfg
161 result = TileGMCfg(flags)
162 kwargs.setdefault("DetectorName", "Tile")
163 result.setPrivateTools(result.popToolsAndMerge(GeoDetectorToolCfg(flags, name, **kwargs)))
164 return result
165
166
167def LucidGeoDetectorToolCfg(flags, name='Lucid', **kwargs):
168 #set up geometry
169 from AtlasGeoModel.ForDetGeoModelConfig import ForDetGeometryCfg
170 result=ForDetGeometryCfg(flags)
171 kwargs.setdefault("DetectorName", "LUCID")
172 result.setPrivateTools(result.popToolsAndMerge(GeoDetectorToolCfg(flags, name, **kwargs)))
173 return result
174
175
176def ALFAGeoDetectorToolCfg(flags, name='ALFA', **kwargs):
177 #set up geometry
178 from AtlasGeoModel.ForDetGeoModelConfig import ForDetGeometryCfg
179 result = ForDetGeometryCfg(flags)
180 kwargs.setdefault("DetectorName", "ALFA")
181 result.setPrivateTools(result.popToolsAndMerge(GeoDetectorToolCfg(flags, name, **kwargs)))
182 return result
183
184
185def ZDCGeoDetectorToolCfg(flags, name='ZDC', **kwargs):
186 #set up geometry
187 from AtlasGeoModel.ForDetGeoModelConfig import ForDetGeometryCfg
188 result = ForDetGeometryCfg(flags)
189 kwargs.setdefault("DetectorName", "ZDC")
190 result.setPrivateTools(result.popToolsAndMerge(GeoDetectorToolCfg(flags, name, **kwargs)))
191 return result
192
193
194def AFPGeoDetectorToolCfg(flags, name='AFP', **kwargs):
195 #set up geometry
196 from AtlasGeoModel.ForDetGeoModelConfig import ForDetGeometryCfg
197 result = ForDetGeometryCfg(flags)
198 kwargs.setdefault("DetectorName", "AFP")
199 kwargs.setdefault("GeoDetectorName", "AFP_GeoModel")
200 result.setPrivateTools(result.popToolsAndMerge(GeoDetectorToolCfg(flags, name, **kwargs)))
201 return result
202
203
204def FwdRegionGeoDetectorToolCfg(flags, name='FwdRegion', **kwargs):
205 #set up geometry
206 from AtlasGeoModel.ForDetGeoModelConfig import ForDetGeometryCfg
207 result = ForDetGeometryCfg(flags)
208 kwargs.setdefault("DetectorName", "FwdRegion")
209 kwargs.setdefault("GeoDetectorName", "ForwardRegionGeoModel")
210 result.setPrivateTools(result.popToolsAndMerge(GeoDetectorToolCfg(flags, name, **kwargs)))
211 return result
212
213
214def MuonGeoDetectorToolCfg(flags, name='Muon', **kwargs):
215 #set up geometry
216 result = ComponentAccumulator()
217 if not flags.Muon.usePhaseIIGeoSetup:
218 from MuonConfig.MuonGeometryConfig import MuonGeoModelCfg
219 result.merge(MuonGeoModelCfg(flags))
220 kwargs.setdefault("DetectorName", "Muon")
221 else:
222 kwargs.setdefault("DetectorName", "MuonR4")
223 result.setPrivateTools(result.popToolsAndMerge(GeoDetectorToolCfg(flags, name, **kwargs)))
224 return result
225
226
227def ITKEnvelopeCfg(flags, name="ITK", **kwargs):
228 result = ComponentAccumulator()
229
230 kwargs.setdefault("DetectorName", "ITK")
231 kwargs.setdefault("InnerRadius", 28.8*mm)
232 kwargs.setdefault("OuterRadius", 1.148*m)
233 if flags.GeoModel.Run >= LHCPeriod.Run4:
234 # ITk should include the HGTD (3420 mm < |z| < 3545 mm) for now
235 kwargs.setdefault("dZ", 354.5*cm)
236 else:
237 kwargs.setdefault("dZ", 347.5*cm)
238
239 SubDetectorList=[]
240 if flags.Detector.GeometryITkPixel:
241 toolITkPixel = result.popToolsAndMerge(ITkPixelGeoDetectorToolCfg(flags))
242 SubDetectorList += [toolITkPixel]
243 if flags.Detector.GeometryITkStrip:
244 toolITkStrip = result.popToolsAndMerge(ITkStripGeoDetectorToolCfg(flags))
245 SubDetectorList += [toolITkStrip]
246 if flags.Detector.GeometryPLR:
247 toolPLR = result.popToolsAndMerge(PLRGeoDetectorToolCfg(flags))
248 SubDetectorList += [toolPLR]
249 if flags.Detector.GeometryBCMPrime:
250 toolBCMPrime = result.popToolsAndMerge(BCMPrimeGeoDetectorToolCfg(flags))
251 SubDetectorList += [toolBCMPrime]
252 # TODO: for now HGTD is also here
253 if flags.Detector.GeometryHGTD:
254 toolHGTD = result.popToolsAndMerge(HGTDGeoDetectorToolCfg(flags))
255 SubDetectorList += [toolHGTD]
256
257 kwargs.setdefault("SubDetectors", SubDetectorList)
258 result.setPrivateTools(CylindricalEnvelope(name, **kwargs))
259 return result
260
261
262def IDETEnvelopeCfg(flags, name="IDET", **kwargs):
263 result = ComponentAccumulator()
264 kwargs.setdefault("DetectorName", "IDET")
265 innerRadius = 37.*mm # RUN1 default
266 if flags.GeoModel.Run in [LHCPeriod.Run2, LHCPeriod.Run3]:
267 innerRadius = 28.9*mm #29.15*mm
268 kwargs.setdefault("InnerRadius", innerRadius)
269 kwargs.setdefault("OuterRadius", 1.148*m)
270 kwargs.setdefault("dZ", 347.5*cm)
271
272 SubDetectorList=[]
273 if flags.Detector.GeometryPixel:
274 toolPixel = result.popToolsAndMerge(PixelGeoDetectorToolCfg(flags))
275 SubDetectorList += [toolPixel]
276 if flags.Detector.GeometrySCT:
277 toolSCT = result.popToolsAndMerge(SCTGeoDetectorToolCfg(flags))
278 SubDetectorList += [toolSCT]
279 if flags.Detector.GeometryTRT:
280 toolTRT = result.popToolsAndMerge(TRTGeoDetectorToolCfg(flags))
281 SubDetectorList += [toolTRT]
282
283 toolIDetServices = result.popToolsAndMerge(IDetServicesMatGeoDetectorToolCfg(flags))
284 SubDetectorList += [toolIDetServices]
285 kwargs.setdefault("SubDetectors", SubDetectorList)
286 result.setPrivateTools(CylindricalEnvelope(name, **kwargs))
287 return result
288
289
290def CALOEnvelopeCfg(flags, name="CALO", **kwargs):
291 result = ComponentAccumulator()
292
293 kwargs.setdefault("DetectorName", "CALO")
294 if flags.GeoModel.Run >= LHCPeriod.Run4:
295 # Make room for HGTD (3420 mm < |z| < 3545 mm) but include JMTube and JMPlug
296 kwargs.setdefault("NSurfaces", 22)
297 kwargs.setdefault("InnerRadii", [41.,41.,41.,41.,41.,41.,64.,64.,120.,120.,1148.,1148.,120.,120.,64.,64.,41.,41.,41.,41.,41.,41.]) #FIXME Units?
298 kwargs.setdefault("OuterRadii", [415.,415.,3795.,3795.,4251.,4251.,4251.,4251.,4251.,4251.,4251.,4251.,4251.,4251.,4251.,4251.,4251.,4251.,3795.,3795.,415.,415.]) #FIXME Units?
299 kwargs.setdefault("ZSurfaces", [-6781.,-6747.,-6747.,-6530.,-6530.,-4587.,-4587.,-4472.,-4472.,-3545.,-3545.,3545.,3545.,4472.,4472.,4587.,4587.,6530.,6530.,6747.,6747.,6781.]) #FIXME Units?
300 else:
301 kwargs.setdefault("NSurfaces", 18)
302 kwargs.setdefault("InnerRadii", [41.,41.,41.,41.,41.,41.,120.,120.,1148.,1148.,120.,120.,41.,41.,41.,41.,41.,41.]) #FIXME Units?
303 kwargs.setdefault("OuterRadii", [415.,415.,3795.,3795.,4251.,4251.,4251.,4251.,4251.,4251.,4251.,4251.,4251.,4251.,3795.,3795.,415.,415.]) #FIXME Units?
304 kwargs.setdefault("ZSurfaces", [-6781.,-6747.,-6747.,-6530.,-6530.,-4587.,-4587.,-3475.,-3475.,3475.,3475.,4587.,4587.,6530.,6530.,6747.,6747.,6781.]) #FIXME Units?
305 SubDetectorList=[]
306 if flags.Detector.GeometryLAr:
307 toolLArMgr = result.popToolsAndMerge(LArMgrGeoDetectorToolCfg(flags))
308 SubDetectorList += [ toolLArMgr ]
309 if flags.Detector.GeometryTile:
310 toolTile = result.popToolsAndMerge(TileGeoDetectorToolCfg(flags))
311 SubDetectorList += [ toolTile ]
312 kwargs.setdefault("SubDetectors", SubDetectorList)
313 result.setPrivateTools(PolyconicalEnvelope(name, **kwargs))
314 return result
315
316
317def ForwardRegionEnvelopeCfg(flags, name='ForwardRegion', **kwargs):
318 result = ComponentAccumulator()
319
320 kwargs.setdefault("DetectorName", "ForDetEnvelope")
321 SubDetectorList=[]
322
323 if flags.Detector.GeometryFwdRegion: # I.e. fully simulate the FwdRegion rather than using BeamTransport to get to Forward Detectors
324 toolFwdRegion = result.popToolsAndMerge(FwdRegionGeoDetectorToolCfg(flags))
325 SubDetectorList += [ toolFwdRegion ]
326
327 #TODO - migrate this over (WIP at the moment) (dnoel)
328 #toolFwdRegionProperties = ForwardRegionPropertiesCfg(flags)
329 #result.addPublicTool(toolFwdRegionProperties) #add this as a service later?
330 if flags.Detector.GeometryZDC:
331 toolZDC = result.popToolsAndMerge(ZDCGeoDetectorToolCfg(flags))
332 SubDetectorList += [ toolZDC ]
333 if flags.Detector.GeometryALFA:
334 toolALFA = result.popToolsAndMerge(ALFAGeoDetectorToolCfg(flags))
335 SubDetectorList += [ toolALFA ]
336 if flags.Detector.GeometryAFP:
337 toolAFP = result.popToolsAndMerge(AFPGeoDetectorToolCfg(flags))
338 SubDetectorList += [ toolAFP ]
339 kwargs.setdefault("SubDetectors", SubDetectorList)
340
341 result.setPrivateTools(result.popToolsAndMerge(GeoDetectorToolCfg(flags, name, **kwargs)))
342 return result
343
344
345def MUONEnvelopeCfg(flags, name="MUONQ02", **kwargs): #FIXME rename to MUON when safe (IS IT SAFE?))
346 result = ComponentAccumulator()
347
348 kwargs.setdefault("DetectorName", "MUONQ02") #FIXME rename to MUON when safe
349 kwargs.setdefault("NSurfaces", 34)
350 kwargs.setdefault("InnerRadii", [1050.,1050.,1050.,1050.,436.7,436.7,279.,279.,70.,70.,420.,420.,3800.,3800.,4255.,4255.,4255.,4255.,4255.,4255.,3800.,3800.,420.,420.,70.,70.,279.,279.,436.7,436.7,1050.,1050.,1050.,1050.]) #FIXME Units?
351 kwargs.setdefault("OuterRadii", [1500.,1500.,2750.,2750.,12650.,12650.,13400.,13400.,14200.,14200.,14200.,14200.,14200.,14200.,14200.,14200.,13000.,13000.,14200.,14200.,14200.,14200.,14200.,14200.,14200.,14200.,13400.,13400.,12650.,12650.,2750.,2750.,1500.,1500.]) #FIXME Units?
352 kwargs.setdefault("ZSurfaces", [-26046.,-23001.,-23001.,-22030.,-22030.,-18650.,-18650.,-12900.,-12900.,-6783.,-6783.,-6748.,-6748.,-6550.,-6550.,-4000.,-4000.,4000.,4000.,6550.,6550.,6748.,6748.,6783.,6783.,12900.,12900.,18650.,18650.,22030.,22030.,23001.,23001.,26046.]) #FIXME Units?
353 SubDetectorList=[]
354 if flags.Detector.GeometryMuon:
355 toolMuon = result.popToolsAndMerge(MuonGeoDetectorToolCfg(flags))
356 SubDetectorList += [ toolMuon ]
357
358 kwargs.setdefault("SubDetectors", SubDetectorList)
359 result.setPrivateTools(PolyconicalEnvelope(name, **kwargs))
360 return result
361
362
363def CosmicShortCutCfg(flags, name="CosmicShortCut", **kwargs):
364 kwargs.setdefault("DetectorName", "TTR_BARREL")
365 kwargs.setdefault("NSurfaces", 14)
366 kwargs.setdefault("InnerRadii", [70.,70.,12500.,12500.,12500.,12500.,13000.,13000.,12500.,12500.,12500.,12500.,70.,70.]) #FIXME Units?
367 kwargs.setdefault("OuterRadii", [12501.,12501.,12501.,12501.,13001.,13001.,13001.,13001.,13001.,13001.,12501.,12501.,12501.,12501.]) #FIXME Units?
368 kwargs.setdefault("ZSurfaces", [-22031.,-22030.,-22030.,-12901.,-12901.,-12900.,-12900., 12900.,12900.,12901.,12901.,22030.,22030.,22031.]) #FIXME Units?
369 SubDetectorList=[]
370 kwargs.setdefault("SubDetectors", SubDetectorList)
371 return PolyconicalEnvelope(name, **kwargs)
372
373
375 result = ComponentAccumulator()
376 SubDetectorList=[]
377
378 if flags.Beam.Type is BeamType.Cosmics or flags.Sim.CavernBackground not in [CavernBackground.Off, CavernBackground.Signal]:
379 if flags.Beam.Type is BeamType.Cosmics and flags.hasFlag("Sim.ReadTR"):
380 SubDetectorList += [ CosmicShortCutCfg(flags) ]
381
382 if flags.Detector.GeometryMuon:
383 accMuon = MUONEnvelopeCfg(flags)
384 toolMuon = accMuon.popPrivateTools()
385 SubDetectorList += [ toolMuon ] #FIXME rename to MUON when safe
386 if flags.Detector.GeometryID:
387 toolIDET = result.popToolsAndMerge(IDETEnvelopeCfg(flags))
388 SubDetectorList += [ toolIDET ]
389 if flags.Detector.GeometryITk or flags.Detector.GeometryHGTD: # TODO: HGTD is also here for now
390 toolITK = result.popToolsAndMerge(ITKEnvelopeCfg(flags))
391 SubDetectorList += [ toolITK ]
392 if flags.Detector.GeometryCalo:
393 toolCALO = result.popToolsAndMerge(CALOEnvelopeCfg(flags))
394 SubDetectorList += [ toolCALO ]
395 if flags.Detector.GeometryMuon:
396 result.merge(accMuon) #add the acc later to match the old style config
397 if flags.Detector.GeometryBpipe:
398 toolBpipe = result.popToolsAndMerge(BeamPipeGeoDetectorToolCfg(flags))
399 SubDetectorList += [ toolBpipe ]
400 if flags.Detector.GeometryLucid:
401 toolLucid = result.popToolsAndMerge(LucidGeoDetectorToolCfg(flags))
402 SubDetectorList += [ toolLucid ]
403 if flags.Detector.GeometryFwdRegion or flags.Detector.GeometryAFP or flags.Detector.GeometryALFA or flags.Detector.GeometryZDC:
404 toolFwdRegion = result.popToolsAndMerge(ForwardRegionEnvelopeCfg(flags))
405 SubDetectorList += [ toolFwdRegion ]
406
407 result.setPrivateTools(SubDetectorList)
408 return result
409
410
411def ATLASEnvelopeCfg(flags, name="Atlas", **kwargs):
412 result = ComponentAccumulator()
413
414 kwargs.setdefault("DetectorName", "Atlas")
415 kwargs.setdefault("NSurfaces", 18)
416
417 innerRadii = [0.0] * 18
418 kwargs.setdefault("InnerRadii", innerRadii)
419
420
422
423
424 AtlasForwardOuterR = 2751.
425 AtlasOuterR1 = 14201.
426 AtlasOuterR2 = 14201.
427 # if flags.Beam.Type is not BeamType.Cosmics and not flags.Detector.GeometryMuon and not \
428 # (flags.Sim.CavernBackground is not CavernBackground.Signal):
429 if not (flags.Detector.GeometryMuon or flags.Detector.GeometryCavern):
430 AtlasOuterR1 = 4251.
431 AtlasOuterR2 = 4251.
432 if not flags.Detector.GeometryCalo:
433 AtlasOuterR1 = 1150.
434 AtlasOuterR2 = 1150.
435
436 outerRadii = [0.0] * 18
437 for i in (0, 1, 16, 17):
438 outerRadii[i] = 1501.
439 for i in (2, 3, 14, 15):
440 outerRadii[i] = AtlasForwardOuterR
441 for i in (4, 5, 12, 13):
442 outerRadii[i] = AtlasOuterR2
443 for i in range(6, 12):
444 outerRadii[i] = AtlasOuterR1
445
446
447 if flags.Sim.WorldRRange:
448 routValue = flags.Sim.WorldRRange
449 if flags.Sim.WorldRRange > max(AtlasOuterR1, AtlasOuterR2):
450 for i in range(4, 14):
451 outerRadii[i] = routValue
452 else:
453 raise RuntimeError('getATLASEnvelope: ERROR flags.Sim.WorldRRange must be > %f. Current value %f' % (max(AtlasOuterR1, AtlasOuterR2), routValue) )
454 kwargs.setdefault("OuterRadii", outerRadii)
455
456
457 zSurfaces = [-26046., -23001., -23001., -22031., -22031., -12899., -12899., -6741., -6741., 6741., 6741., 12899., 12899., 22031., 22031., 23001., 23001., 26046.] # FIXME units mm??
458
459 if flags.Detector.GeometryFwdRegion or flags.Detector.GeometryAFP or flags.Detector.GeometryALFA or flags.Detector.GeometryZDC:
460 zSurfaces[0] = -400000.
461 zSurfaces[17] = 400000.
462
463 #leave a check in for WorldRrange and WorldZrange?
464 if flags.Sim.WorldZRange:
465 if flags.Sim.WorldZRange < 26046.:
466 raise RuntimeError('getATLASEnvelope: ERROR flags.Sim.WorldZRange must be > 26046. Current value: %f' % flags.Sim.WorldZRange)
467 zSurfaces[17] = flags.Sim.WorldZRange + 100.
468 zSurfaces[16] = flags.Sim.WorldZRange + 50.
469 zSurfaces[15] = flags.Sim.WorldZRange + 50.
470 zSurfaces[14] = flags.Sim.WorldZRange
471 zSurfaces[13] = flags.Sim.WorldZRange
472 zSurfaces[0] = -flags.Sim.WorldZRange - 100.
473 zSurfaces[1] = -flags.Sim.WorldZRange - 50.
474 zSurfaces[2] = -flags.Sim.WorldZRange - 50.
475 zSurfaces[3] = -flags.Sim.WorldZRange
476 zSurfaces[4] = -flags.Sim.WorldZRange
477
478 kwargs.setdefault("ZSurfaces", zSurfaces)
479 SubDetectorList = result.popToolsAndMerge(generateSubDetectorList(flags))
480 kwargs.setdefault("SubDetectors", SubDetectorList)
481 result.setPrivateTools(PolyconicalEnvelope(name, **kwargs))
482 return result
483
484
485def MaterialDescriptionToolCfg(flags, name="MaterialDescriptionTool", **kwargs):
486
487 result = ComponentAccumulator()
488 kwargs.setdefault("TestBeam", flags.Beam.Type is BeamType.TestBeam)
489 result.setPrivateTools(MaterialDescriptionTool(name, **kwargs))
490 return result
491
492
493def VoxelDensityToolCfg(flags, name="VoxelDensityTool", **kwargs):
494
495 voxelDensitySettings = {}
496 if flags.Detector.GeometryITkPixel:
497 voxelDensitySettings["ITkPixelDetector"] = 0.05
498 if flags.Detector.GeometryITkStrip:
499 voxelDensitySettings["ITkStrip::Barrel"] = 0.05
500 voxelDensitySettings["ITkStrip::ITkStrip_Forward"] = 0.05
501
503 voxelDensitySettings["ITkStrip::SCT_Forward"] = 0.05
504 kwargs.setdefault("VolumeVoxellDensityLevel",voxelDensitySettings)
505 result = ComponentAccumulator()
506 result.setPrivateTools(VoxelDensityTool(name, **kwargs))
507 return result
508
509
511 result = ComponentAccumulator()
512 regionCreatorList = []
513
514 if flags.Detector.GeometryCavern or flags.Sim.CavernBackground not in [CavernBackground.Off, CavernBackground.Signal]:
515 regionCreatorList += [
516 result.popToolsAndMerge(SX1PhysicsRegionToolCfg(flags)),
517 result.popToolsAndMerge(BedrockPhysicsRegionToolCfg(flags)),
518 result.popToolsAndMerge(CavernShaftsConcretePhysicsRegionToolCfg(flags))]
519 #regionCreatorList += ['CavernShaftsAirPhysicsRegionTool'] # Not used currently
520 if flags.Detector.GeometryID:
521 if flags.Detector.GeometryPixel:
522 regionCreatorList += [result.popToolsAndMerge(PixelPhysicsRegionToolCfg(flags))]
523 if flags.Detector.GeometrySCT:
524 regionCreatorList += [result.popToolsAndMerge(SCTPhysicsRegionToolCfg(flags))]
525 if flags.Detector.GeometryTRT:
526 regionCreatorList += [result.popToolsAndMerge(TRTPhysicsRegionToolCfg(flags))]
527 if flags.GeoModel.Run in [LHCPeriod.Run2, LHCPeriod.Run3]:
528 # TODO: should we support old geometry tags with Run == "UNDEFINED" and flags.GeoModel.IBLLayout not in ["noIBL", "UNDEFINED"]?
529 regionCreatorList += [result.popToolsAndMerge(TRT_ArPhysicsRegionToolCfg(flags))] #'TRT_KrPhysicsRegionTool'
530 # FIXME dislike the ordering here, but try to maintain the same ordering as in the old configuration.
531 if flags.Detector.GeometryBpipe:
532 if flags.Sim.BeamPipeSimMode is not BeamPipeSimMode.Normal:
533 regionCreatorList += [result.popToolsAndMerge(BeampipeFwdCutPhysicsRegionToolCfg(flags))]
534 if not flags.Detector.GeometryFwdRegion and (flags.Detector.GeometryAFP or flags.Detector.GeometryALFA or flags.Detector.GeometryZDC):
535 regionCreatorList += [result.popToolsAndMerge(FWDBeamLinePhysicsRegionToolCfg(flags))]
536 if flags.Detector.GeometryITk:
537 if flags.Detector.GeometryITkPixel:
538 regionCreatorList += [result.popToolsAndMerge(ITkPixelPhysicsRegionToolCfg(flags))]
539 if flags.Detector.GeometryITkStrip:
540 regionCreatorList += [result.popToolsAndMerge(ITkStripPhysicsRegionToolCfg(flags))]
541 if flags.Detector.GeometryHGTD:
542 regionCreatorList += [result.popToolsAndMerge(HGTDPhysicsRegionToolCfg(flags))]
543 if flags.Detector.GeometryITk or flags.Detector.GeometryHGTD: # TODO: I do not know why this is only for ITk (and HGTD)
544 # FIXME dislike the ordering here, but try to maintain the same ordering as in the old configuration.
545 if flags.Detector.GeometryBpipe:
546 if flags.Sim.BeamPipeSimMode is not BeamPipeSimMode.Normal:
547 regionCreatorList += [result.popToolsAndMerge(BeampipeFwdCutPhysicsRegionToolCfg(flags))]
548 if not flags.Detector.GeometryFwdRegion and (flags.Detector.GeometryAFP or flags.Detector.GeometryALFA or flags.Detector.GeometryZDC):
549 regionCreatorList += [result.popToolsAndMerge(FWDBeamLinePhysicsRegionToolCfg(flags))]
550 if flags.Detector.GeometryCalo:
551 if flags.Detector.GeometryLAr:
552 # Shower parameterization overrides the calibration hit flag
553 if flags.Sim.LArParameterization is not LArParameterization.NoFrozenShowers \
554 and flags.Sim.CalibrationRun in [CalibrationRun.LAr, CalibrationRun.LArTile, CalibrationRun.LArTileZDC, CalibrationRun.DeadLAr]:
555 Logging.log.info('You requested both calibration hits and frozen showers / parameterization in the LAr.')
556 Logging.log.info(' Such a configuration is not allowed, and would give junk calibration hits where the showers are modified.')
557 Logging.log.info(' Please try again with a different value of either flags.Sim.LArParameterization (' + str(flags.Sim.LArParameterization.value) + ') or flags.Sim.CalibrationRun ('+str(flags.Sim.CalibrationRun.value)+')')
558 raise RuntimeError('Configuration not allowed')
559 regionCreatorList += [
560 result.popToolsAndMerge(EMBPhysicsRegionToolCfg(flags)),
561 result.popToolsAndMerge(EMECPhysicsRegionToolCfg(flags)),
562 result.popToolsAndMerge(HECPhysicsRegionToolCfg(flags)),
563 result.popToolsAndMerge(FCALPhysicsRegionToolCfg(flags))]
564 fullCommandList = '\t'.join(flags.Sim.G4Commands)
565 if flags.Sim.LArParameterization is LArParameterization.FrozenShowers or 'EMECPara' in fullCommandList:
566 # EMECPara Physics region is used by Woodcock tracking
567 # and by EMEC Frozen Showers (the latter is not part
568 # of production configurations). NB The 'EMB'
569 # PhysicsRegion seems to be used by the Frozen Showers
570 # parametrization also. Unclear if this is correct -
571 # not a big issue as Frozen Showers are not used in
572 # the EMB in production configurations.
573 regionCreatorList += [
574 result.popToolsAndMerge(EMECParaPhysicsRegionToolCfg(flags))]
575 if flags.Sim.LArParameterization is not LArParameterization.NoFrozenShowers:
576 regionCreatorList += [result.popToolsAndMerge(FCALParaPhysicsRegionToolCfg(flags)),
577 result.popToolsAndMerge(FCAL2ParaPhysicsRegionToolCfg(flags))]
578 if flags.Sim.LArParameterization in [LArParameterization.DeadMaterialFrozenShowers, LArParameterization.FrozenShowersFCalOnly, LArParameterization.FastCaloSim]: # TODO Check this makes sense
579 pass
580 regionCreatorList += [
581 result.popToolsAndMerge(PreSampLArPhysicsRegionToolCfg(flags)),
582 result.popToolsAndMerge(DeadMaterialPhysicsRegionToolCfg(flags))]
583 if flags.Sim.LArParameterization is LArParameterization.FastCaloSim:
584 regionCreatorList += [result.popToolsAndMerge(CALOPhysicsRegionToolCfg(flags))]
585
588 if flags.Detector.GeometryMuon:
589 #todo - add the line below
590 regionCreatorList += [
591 result.popToolsAndMerge(DriftWallPhysicsRegionToolCfg(flags)),
592 result.popToolsAndMerge(DriftWall1PhysicsRegionToolCfg(flags)),
593 result.popToolsAndMerge(DriftWall2PhysicsRegionToolCfg(flags))]
594 if flags.Sim.CavernBackground not in [CavernBackground.Off, CavernBackground.Read] and not flags.Sim.RecordFlux:
595 regionCreatorList += [result.popToolsAndMerge(MuonSystemFastPhysicsRegionToolCfg(flags))]
596 result.setPrivateTools(regionCreatorList)
597 return result
598
599
601 regionCreatorList = []
602 result = ComponentAccumulator()
603 # Deliberately left commented out for now
604 #TODO - migrate below>>
605 #if (flags.GeoModel.AtlasVersion=="tb_LArH6_2003"):
606 # if (flags.Detector.GeometryLAr):
607 # regionCreatorList += [FCALPhysicsRegionTool(flags)]
608 #elif (flags.GeoModel.AtlasVersion=="tb_LArH6_2002"):
609 # if (flags.Detector.GeometryLAr):
610 # regionCreatorList += [HECPhysicsRegionTool(flags)]
611 #elif (flags.GeoModel.AtlasVersion=="tb_LArH6EC_2002"):
612 # if (flags.Detector.GeometryLAr):
613 # regionCreatorList += [EMECPhysicsRegionTool(flags)]
614 #elif (flags.GeoModel.AtlasVersion=="tb_LArH6_2004"):
615 # if (flags.Sim.LArTB_H6Hec.get_Value()):
616 # regionCreatorList += [HECPhysicsRegionTool(flags)]
617 # if (flags.Sim.LArTB_H6Emec.get_Value()):
618 # regionCreatorList += [EMECPhysicsRegionTool(flags)]
619 # if (flags.Sim.LArTB_H6Fcal.get_Value()):
620 # regionCreatorList += [FCALPhysicsRegionTool(flags)]
621 #<<migrate above
622 result.setPrivateTools(regionCreatorList)
623 return result
624
625
626
628 result = ComponentAccumulator()
629 fieldMgrList = []
630
631 if flags.Sim.TightMuonStepping:
632 tool = result.popToolsAndMerge(TightMuonsATLASFieldManagerToolCfg(flags))
633 fieldMgrList += [tool]
634 else:
635 tool = result.popToolsAndMerge(ATLASFieldManagerToolCfg(flags))
636 fieldMgrList += [tool]
637 if flags.Detector.GeometryBpipe:
638 tool = result.popToolsAndMerge(BeamPipeFieldManagerToolCfg(flags))
639 fieldMgrList += [tool]
640 if flags.Detector.GeometryID:
641 tool = result.popToolsAndMerge(InDetFieldManagerToolCfg(flags))
642 fieldMgrList += [tool]
643 if flags.Detector.GeometryITk or flags.Detector.GeometryHGTD: # TODO: while HGTD is included in the ITK envelope
644 tool = result.popToolsAndMerge(ITkFieldManagerToolCfg(flags))
645 fieldMgrList += [tool]
646 if flags.Detector.GeometryCalo and flags.Sim.MuonFieldOnlyInCalo:
647 tool = result.popToolsAndMerge(MuonsOnlyInCaloFieldManagerToolCfg(flags))
648 fieldMgrList += [tool]
649 if flags.Detector.GeometryMuon:
650 tool = result.popToolsAndMerge(MuonFieldManagerToolCfg(flags))
651 fieldMgrList += [tool]
652
653 #sort these forward ones later
654 if flags.Detector.GeometryFwdRegion: #or forward?
655 fieldMgrList+=[
656 result.popToolsAndMerge(Q1FwdFieldManagerToolCfg(flags)),
657 result.popToolsAndMerge(Q2FwdFieldManagerToolCfg(flags)),
658 result.popToolsAndMerge(Q3FwdFieldManagerToolCfg(flags)),
659 result.popToolsAndMerge(D1FwdFieldManagerToolCfg(flags)),
660 result.popToolsAndMerge(D2FwdFieldManagerToolCfg(flags)),
661 result.popToolsAndMerge(Q4FwdFieldManagerToolCfg(flags)),
662 result.popToolsAndMerge(Q5FwdFieldManagerToolCfg(flags)),
663 result.popToolsAndMerge(Q6FwdFieldManagerToolCfg(flags)),
664 result.popToolsAndMerge(Q7FwdFieldManagerToolCfg(flags)),
665 result.popToolsAndMerge(Q1HKickFwdFieldManagerToolCfg(flags)),
666 result.popToolsAndMerge(Q1VKickFwdFieldManagerToolCfg(flags)),
667 result.popToolsAndMerge(Q2HKickFwdFieldManagerToolCfg(flags)),
668 result.popToolsAndMerge(Q2VKickFwdFieldManagerToolCfg(flags)),
669 result.popToolsAndMerge(Q3HKickFwdFieldManagerToolCfg(flags)),
670 result.popToolsAndMerge(Q3VKickFwdFieldManagerToolCfg(flags)),
671 result.popToolsAndMerge(Q4VKickAFwdFieldManagerToolCfg(flags)),
672 result.popToolsAndMerge(Q4HKickFwdFieldManagerToolCfg(flags)),
673 result.popToolsAndMerge(Q4VKickBFwdFieldManagerToolCfg(flags)),
674 result.popToolsAndMerge(Q5HKickFwdFieldManagerToolCfg(flags)),
675 result.popToolsAndMerge(Q6VKickFwdFieldManagerToolCfg(flags)),
676 result.popToolsAndMerge(Q1HKickFwdFieldManagerToolCfg(flags)),
677 result.popToolsAndMerge(FwdRegionFieldManagerToolCfg(flags))]
678
679 result.setPrivateTools(fieldMgrList)
680 return result
681
682
684 fieldMgrList = []
685 result = ComponentAccumulator()
686 result.setPrivateTools(fieldMgrList)
687 return result
688
689
691 geoConfigToolList = []
692 # The methods for these tools should be defined in the
693 # package containing each tool, so G4AtlasTools in this case
694 result =ComponentAccumulator()
695 geoConfigToolList += [result.popToolsAndMerge(MaterialDescriptionToolCfg(flags))]
696 geoConfigToolList += [result.popToolsAndMerge(VoxelDensityToolCfg(flags))]
697 result.setPrivateTools(geoConfigToolList)
698 return result
699
700
701@AccumulatorCache
702def G4AtlasDetectorConstructionToolCfg(flags, name="G4AtlasDetectorConstructionTool", **kwargs):
703 result = ComponentAccumulator()
704
705
706 kwargs.setdefault("GeometryConfigurationTools", result.popToolsAndMerge(GeometryConfigurationToolsCfg(flags)))
707
708 kwargs.setdefault("FastSimMasterTool", result.addPublicTool(result.popToolsAndMerge(FastSimulationMasterToolCfg(flags))))
709
710 if "SenDetMasterTool" not in kwargs:
711 kwargs.setdefault("SenDetMasterTool",
712 result.addPublicTool(result.popToolsAndMerge(SensitiveDetectorMasterToolCfg(flags))))
713
714 if flags.Beam.Type is BeamType.TestBeam:
715 # Tile test beam
716 from G4AtlasTools.G4TestBeamGeometryConfig import TileTB_WorldEnvelopeCfg
717 kwargs.setdefault("World", result.popToolsAndMerge(TileTB_WorldEnvelopeCfg(flags)))
718 kwargs.setdefault("RegionCreators", []) # Empty for Tile test beam
719 kwargs.setdefault("FieldManagers", []) # Empty for Tile test beam
720 elif False: # This block is in case we ever decide to support LAr Test Beam again in Athena in the future
721 kwargs.setdefault("World", 'LArTB_World')
722 kwargs.setdefault("RegionCreators", result.popToolsAndMerge(TB_RegionCreatorListCfg(flags)))
723 kwargs.setdefault("FieldManagers", result.popToolsAndMerge(TB_FieldMgrListCfg(flags)))
724 else:
725 if flags.Detector.GeometryCavern:
726 kwargs.setdefault("World", result.popToolsAndMerge(CavernWorldCfg(flags)))
727 else:
728 kwargs.setdefault("World", result.popToolsAndMerge(ATLASEnvelopeCfg(flags)))
729 kwargs.setdefault("RegionCreators", result.popToolsAndMerge(ATLAS_RegionCreatorListCfg(flags)))
730 if flags.BField.solenoidOn or flags.BField.barrelToroidOn or flags.BField.endcapToroidOn:
731 kwargs.setdefault("FieldManagers", result.popToolsAndMerge(ATLAS_FieldMgrListCfg(flags)))
732
733 if flags.Sim.LArParameterization is LArParameterization.FastCaloSim:
734 kwargs.setdefault("G4CaloTransportTool", result.addPublicTool(result.popToolsAndMerge(G4CaloTransportToolCfg(flags))))
735
736 result.setPrivateTools(G4AtlasDetectorConstructionTool(name, **kwargs))
737 return result
738
739
740def CavernInfraGeoDetectorToolCfg(flags, name='CavernInfra', **kwargs):
741 from AtlasGeoModel.CavernGMConfig import CavernGeometryCfg
742 result = CavernGeometryCfg(flags)
743 kwargs.setdefault("DetectorName", "CavernInfra")
744 result.setPrivateTools(result.popToolsAndMerge(GeoDetectorToolCfg(flags, name, **kwargs)))
745 return result
746
747
748def CavernWorldCfg(flags, name="Cavern", **kwargs):
749 result = ComponentAccumulator()
750 kwargs.setdefault("DetectorName", "World")
751 bedrockDX = 302700
752 bedrockDZ = 301000
753 if flags.Sim.CavernBackground is CavernBackground.Off:
754
755 if flags.Sim.ISFRun:
756 # for ISF cosmics simulation, set world volume to biggest possible case
757 bedrockDX = 1000.*3000 # 3 km
758 bedrockDZ = 1000.*3000 # 3 km
759 else:
760 from CosmicGenerator.CosmicGeneratorConfig import CavernPropertyCalculator
761 theCavernProperties = CavernPropertyCalculator()
762 if theCavernProperties.BedrockDX(flags) > bedrockDX:
763 bedrockDX = theCavernProperties.BedrockDX(flags)
764 if theCavernProperties.BedrockDZ(flags) > bedrockDZ:
765 bedrockDZ = theCavernProperties.BedrockDZ(flags)
766
767 kwargs.setdefault("dX", bedrockDX) #FIXME Units?
768 kwargs.setdefault("dY", 57300 + 41000 + 1000) # 1 extra metre to help voxelization... #FIXME Units?
769 kwargs.setdefault("dZ", bedrockDZ) #FIXME Units?
770 # Subtraction Solid - has to be a better way to do this!!
771 kwargs.setdefault("NumberOfHoles", 1)
772 kwargs.setdefault("HoleNames", ['BelowCavern'])
773 kwargs.setdefault("Hole_dX", [bedrockDX])
774 kwargs.setdefault("Hole_dY", [41000])
775 kwargs.setdefault("Hole_dZ", [bedrockDZ])
776
777 kwargs.setdefault("HolePosX", [0])
778 kwargs.setdefault("HolePosY", [-58300])
779 kwargs.setdefault("HolePosZ", [0])
780
781 subDetectorList = []
782 subDetectorList += [ result.popToolsAndMerge(CavernInfraGeoDetectorToolCfg(flags))]
783 subDetectorList += [ result.popToolsAndMerge(ATLASEnvelopeCfg(flags))]
784
785 kwargs.setdefault("SubDetectors", subDetectorList)
786 result.setPrivateTools(BoxEnvelope(name, **kwargs))
787 return result
#define max(a, b)
Definition cfImp.cxx:41
Tool for the concrete implementation of a G4Atlas-based detector construction.
Class to allow for not-standard material construction.
Class to allow for not-standard material construction.
ALFAGeoDetectorToolCfg(flags, name='ALFA', **kwargs)
CavernWorldCfg(flags, name="Cavern", **kwargs)
IDetServicesMatGeoDetectorToolCfg(flags, name='IDetServicesMat', **kwargs)
CosmicShortCutCfg(flags, name="CosmicShortCut", **kwargs)
ForwardRegionEnvelopeCfg(flags, name='ForwardRegion', **kwargs)
MUONEnvelopeCfg(flags, name="MUONQ02", **kwargs)
ITkStripGeoDetectorToolCfg(flags, name='ITkStrip', **kwargs)
TileGeoDetectorToolCfg(flags, name='Tile', **kwargs)
G4GeometryNotifierSvcCfg(flags, name="G4GeometryNotifierSvc", **kwargs)
PLRGeoDetectorToolCfg(flags, name='PLR', **kwargs)
FwdRegionGeoDetectorToolCfg(flags, name='FwdRegion', **kwargs)
VoxelDensityToolCfg(flags, name="VoxelDensityTool", **kwargs)
ITkPixelGeoDetectorToolCfg(flags, name='ITkPixel', **kwargs)
BCMPrimeGeoDetectorToolCfg(flags, name='BCMPrime', **kwargs)
CALOEnvelopeCfg(flags, name="CALO", **kwargs)
IDETEnvelopeCfg(flags, name="IDET", **kwargs)
GeoDetectorToolCfg(flags, name='GeoDetectorTool', **kwargs)
MuonGeoDetectorToolCfg(flags, name='Muon', **kwargs)
CavernInfraGeoDetectorToolCfg(flags, name='CavernInfra', **kwargs)
LArMgrGeoDetectorToolCfg(flags, name='LArMgr', **kwargs)
ITKEnvelopeCfg(flags, name="ITK", **kwargs)
SCTGeoDetectorToolCfg(flags, name='SCT', **kwargs)
HGTDServiceToolCfg(flags, name='HGTDServices', **kwargs)
AFPGeoDetectorToolCfg(flags, name='AFP', **kwargs)
MaterialDescriptionToolCfg(flags, name="MaterialDescriptionTool", **kwargs)
BeamPipeGeoDetectorToolCfg(flags, name='BeamPipe', **kwargs)
G4AtlasDetectorConstructionToolCfg(flags, name="G4AtlasDetectorConstructionTool", **kwargs)
TRTGeoDetectorToolCfg(flags, name='TRT', **kwargs)
ATLASEnvelopeCfg(flags, name="Atlas", **kwargs)
PixelGeoDetectorToolCfg(flags, name='Pixel', **kwargs)
LucidGeoDetectorToolCfg(flags, name='Lucid', **kwargs)
HGTDGeoDetectorToolCfg(flags, name='HGTD', **kwargs)
ZDCGeoDetectorToolCfg(flags, name='ZDC', **kwargs)