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, InDetParameterization, LArParameterization
10
11#the physics region tools
12from G4AtlasTools.G4PhysicsRegionConfig import SX1PhysicsRegionToolCfg, BedrockPhysicsRegionToolCfg, CavernShaftsConcretePhysicsRegionToolCfg, PixelPhysicsRegionToolCfg, SCTPhysicsRegionToolCfg, TRTPhysicsRegionToolCfg, TRT_ArPhysicsRegionToolCfg,ITkPixelPhysicsRegionToolCfg,ITkStripPhysicsRegionToolCfg,HGTDPhysicsRegionToolCfg,BeampipeFwdCutPhysicsRegionToolCfg, FWDBeamLinePhysicsRegionToolCfg, InDetPhysicsRegionToolCfg, 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
226def ToroidGeoDetectorToolCfg(flags, name="Toroid", **kwargs):
227 kwargs.setdefault("DetectorName", "Toroid")
228 result = ComponentAccumulator()
229 if not flags.Detector.SpecialGeometryToroid:
230 return result
231 from MuonGeoModelR4.MuonGeoModelConfig import ToroidGeoModelToolCfg
232 result.merge(ToroidGeoModelToolCfg(flags))
233 result.setPrivateTools(result.popToolsAndMerge(GeoDetectorToolCfg(flags, name, **kwargs)))
234 return result
235
236
237def ITKEnvelopeCfg(flags, name="ITK", **kwargs):
238 result = ComponentAccumulator()
239
240 kwargs.setdefault("DetectorName", "ITK")
241 kwargs.setdefault("InnerRadius", 28.8*mm)
242 kwargs.setdefault("OuterRadius", 1.148*m)
243 if flags.GeoModel.Run >= LHCPeriod.Run4:
244 # ITk should include the HGTD (3420 mm < |z| < 3545 mm) for now
245 kwargs.setdefault("dZ", 354.5*cm)
246 else:
247 kwargs.setdefault("dZ", 347.5*cm)
248
249 SubDetectorList=[]
250 if flags.Detector.GeometryITkPixel:
251 toolITkPixel = result.popToolsAndMerge(ITkPixelGeoDetectorToolCfg(flags))
252 SubDetectorList += [toolITkPixel]
253 if flags.Detector.GeometryITkStrip:
254 toolITkStrip = result.popToolsAndMerge(ITkStripGeoDetectorToolCfg(flags))
255 SubDetectorList += [toolITkStrip]
256 if flags.Detector.GeometryPLR:
257 toolPLR = result.popToolsAndMerge(PLRGeoDetectorToolCfg(flags))
258 SubDetectorList += [toolPLR]
259 if flags.Detector.GeometryBCMPrime:
260 toolBCMPrime = result.popToolsAndMerge(BCMPrimeGeoDetectorToolCfg(flags))
261 SubDetectorList += [toolBCMPrime]
262 # TODO: for now HGTD is also here
263 if flags.Detector.GeometryHGTD:
264 toolHGTD = result.popToolsAndMerge(HGTDGeoDetectorToolCfg(flags))
265 SubDetectorList += [toolHGTD]
266
267 kwargs.setdefault("SubDetectors", SubDetectorList)
268 result.setPrivateTools(CylindricalEnvelope(name, **kwargs))
269 return result
270
271
272def IDETEnvelopeCfg(flags, name="IDET", **kwargs):
273 result = ComponentAccumulator()
274 kwargs.setdefault("DetectorName", "IDET")
275 innerRadius = 37.*mm # RUN1 default
276 if flags.GeoModel.Run in [LHCPeriod.Run2, LHCPeriod.Run3]:
277 innerRadius = 28.9*mm #29.15*mm
278 kwargs.setdefault("InnerRadius", innerRadius)
279 kwargs.setdefault("OuterRadius", 1.148*m)
280 kwargs.setdefault("dZ", 347.5*cm)
281
282 SubDetectorList=[]
283 if flags.Detector.GeometryPixel:
284 toolPixel = result.popToolsAndMerge(PixelGeoDetectorToolCfg(flags))
285 SubDetectorList += [toolPixel]
286 if flags.Detector.GeometrySCT:
287 toolSCT = result.popToolsAndMerge(SCTGeoDetectorToolCfg(flags))
288 SubDetectorList += [toolSCT]
289 if flags.Detector.GeometryTRT:
290 toolTRT = result.popToolsAndMerge(TRTGeoDetectorToolCfg(flags))
291 SubDetectorList += [toolTRT]
292
293 toolIDetServices = result.popToolsAndMerge(IDetServicesMatGeoDetectorToolCfg(flags))
294 SubDetectorList += [toolIDetServices]
295 kwargs.setdefault("SubDetectors", SubDetectorList)
296 result.setPrivateTools(CylindricalEnvelope(name, **kwargs))
297 return result
298
299
300def CALOEnvelopeCfg(flags, name="CALO", **kwargs):
301 result = ComponentAccumulator()
302
303 kwargs.setdefault("DetectorName", "CALO")
304 if flags.GeoModel.Run >= LHCPeriod.Run4:
305 # Make room for HGTD (3420 mm < |z| < 3545 mm) but include JMTube and JMPlug
306 kwargs.setdefault("NSurfaces", 22)
307 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?
308 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?
309 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?
310 else:
311 kwargs.setdefault("NSurfaces", 18)
312 kwargs.setdefault("InnerRadii", [41.,41.,41.,41.,41.,41.,120.,120.,1148.,1148.,120.,120.,41.,41.,41.,41.,41.,41.]) #FIXME Units?
313 kwargs.setdefault("OuterRadii", [415.,415.,3795.,3795.,4251.,4251.,4251.,4251.,4251.,4251.,4251.,4251.,4251.,4251.,3795.,3795.,415.,415.]) #FIXME Units?
314 kwargs.setdefault("ZSurfaces", [-6781.,-6747.,-6747.,-6530.,-6530.,-4587.,-4587.,-3475.,-3475.,3475.,3475.,4587.,4587.,6530.,6530.,6747.,6747.,6781.]) #FIXME Units?
315 SubDetectorList=[]
316 if flags.Detector.GeometryLAr:
317 toolLArMgr = result.popToolsAndMerge(LArMgrGeoDetectorToolCfg(flags))
318 SubDetectorList += [ toolLArMgr ]
319 if flags.Detector.GeometryTile:
320 toolTile = result.popToolsAndMerge(TileGeoDetectorToolCfg(flags))
321 SubDetectorList += [ toolTile ]
322 kwargs.setdefault("SubDetectors", SubDetectorList)
323 result.setPrivateTools(PolyconicalEnvelope(name, **kwargs))
324 return result
325
326
327def ForwardRegionEnvelopeCfg(flags, name='ForwardRegion', **kwargs):
328 result = ComponentAccumulator()
329
330 kwargs.setdefault("DetectorName", "ForDetEnvelope")
331 SubDetectorList=[]
332
333 if flags.Detector.GeometryFwdRegion: # I.e. fully simulate the FwdRegion rather than using BeamTransport to get to Forward Detectors
334 toolFwdRegion = result.popToolsAndMerge(FwdRegionGeoDetectorToolCfg(flags))
335 SubDetectorList += [ toolFwdRegion ]
336
337 #TODO - migrate this over (WIP at the moment) (dnoel)
338 #toolFwdRegionProperties = ForwardRegionPropertiesCfg(flags)
339 #result.addPublicTool(toolFwdRegionProperties) #add this as a service later?
340 if flags.Detector.GeometryZDC:
341 toolZDC = result.popToolsAndMerge(ZDCGeoDetectorToolCfg(flags))
342 SubDetectorList += [ toolZDC ]
343 if flags.Detector.GeometryALFA:
344 toolALFA = result.popToolsAndMerge(ALFAGeoDetectorToolCfg(flags))
345 SubDetectorList += [ toolALFA ]
346 if flags.Detector.GeometryAFP:
347 toolAFP = result.popToolsAndMerge(AFPGeoDetectorToolCfg(flags))
348 SubDetectorList += [ toolAFP ]
349 kwargs.setdefault("SubDetectors", SubDetectorList)
350
351 result.setPrivateTools(result.popToolsAndMerge(GeoDetectorToolCfg(flags, name, **kwargs)))
352 return result
353
354
355def MUONEnvelopeCfg(flags, name="MUONQ02", **kwargs): #FIXME rename to MUON when safe (IS IT SAFE?))
356 result = ComponentAccumulator()
357 if not flags.Detector.GeometryMuon:
358 return result
359 kwargs.setdefault("DetectorName", "MUONQ02") #FIXME rename to MUON when safe
360 kwargs.setdefault("NSurfaces", 34)
361 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?
362 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?
363 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?
364 kwargs.setdefault("SubDetectors", [result.popToolsAndMerge(MuonGeoDetectorToolCfg(flags))])
365 result.setPrivateTools(PolyconicalEnvelope(name, **kwargs))
366 return result
367
368
369def CosmicShortCutCfg(flags, name="CosmicShortCut", **kwargs):
370 kwargs.setdefault("DetectorName", "TTR_BARREL")
371 kwargs.setdefault("NSurfaces", 14)
372 kwargs.setdefault("InnerRadii", [70.,70.,12500.,12500.,12500.,12500.,13000.,13000.,12500.,12500.,12500.,12500.,70.,70.]) #FIXME Units?
373 kwargs.setdefault("OuterRadii", [12501.,12501.,12501.,12501.,13001.,13001.,13001.,13001.,13001.,13001.,12501.,12501.,12501.,12501.]) #FIXME Units?
374 kwargs.setdefault("ZSurfaces", [-22031.,-22030.,-22030.,-12901.,-12901.,-12900.,-12900., 12900.,12900.,12901.,12901.,22030.,22030.,22031.]) #FIXME Units?
375 SubDetectorList=[]
376 kwargs.setdefault("SubDetectors", SubDetectorList)
377 return PolyconicalEnvelope(name, **kwargs)
378
379
381 result = ComponentAccumulator()
382 SubDetectorList=[]
383
384 if flags.Beam.Type is BeamType.Cosmics or flags.Sim.CavernBackground not in [CavernBackground.Off, CavernBackground.Signal]:
385 if flags.Beam.Type is BeamType.Cosmics and flags.hasFlag("Sim.ReadTR"):
386 SubDetectorList += [ CosmicShortCutCfg(flags) ]
387
388 if flags.Detector.GeometryMuon:
389 SubDetectorList += [ result.popToolsAndMerge(MUONEnvelopeCfg(flags)) ] #FIXME rename to MUON when safe
390 if flags.Detector.SpecialGeometryToroid:
391 SubDetectorList+=[result.popToolsAndMerge(ToroidGeoDetectorToolCfg(flags))]
392 if flags.Detector.GeometryID:
393 toolIDET = result.popToolsAndMerge(IDETEnvelopeCfg(flags))
394 SubDetectorList += [ toolIDET ]
395 if flags.Detector.GeometryITk or flags.Detector.GeometryHGTD: # TODO: HGTD is also here for now
396 toolITK = result.popToolsAndMerge(ITKEnvelopeCfg(flags))
397 SubDetectorList += [ toolITK ]
398 if flags.Detector.GeometryCalo:
399 toolCALO = result.popToolsAndMerge(CALOEnvelopeCfg(flags))
400 SubDetectorList += [ toolCALO ]
401 if flags.Detector.GeometryBpipe:
402 toolBpipe = result.popToolsAndMerge(BeamPipeGeoDetectorToolCfg(flags))
403 SubDetectorList += [ toolBpipe ]
404 if flags.Detector.GeometryLucid:
405 toolLucid = result.popToolsAndMerge(LucidGeoDetectorToolCfg(flags))
406 SubDetectorList += [ toolLucid ]
407 if flags.Detector.GeometryFwdRegion or flags.Detector.GeometryAFP or flags.Detector.GeometryALFA or flags.Detector.GeometryZDC:
408 toolFwdRegion = result.popToolsAndMerge(ForwardRegionEnvelopeCfg(flags))
409 SubDetectorList += [ toolFwdRegion ]
410
411 result.setPrivateTools(SubDetectorList)
412 return result
413
414
415def ATLASEnvelopeCfg(flags, name="Atlas", **kwargs):
416 result = ComponentAccumulator()
417
418 kwargs.setdefault("DetectorName", "Atlas")
419 kwargs.setdefault("NSurfaces", 18)
420
421 innerRadii = [0.0] * 18
422 kwargs.setdefault("InnerRadii", innerRadii)
423
424
426
427
428 AtlasForwardOuterR = 2751.
429 AtlasOuterR1 = 14201.
430 AtlasOuterR2 = 14201.
431 # if flags.Beam.Type is not BeamType.Cosmics and not flags.Detector.GeometryMuon and not \
432 # (flags.Sim.CavernBackground is not CavernBackground.Signal):
433 if not (flags.Detector.GeometryMuon or flags.Detector.GeometryCavern):
434 AtlasOuterR1 = 4251.
435 AtlasOuterR2 = 4251.
436 if not flags.Detector.GeometryCalo:
437 AtlasOuterR1 = 1150.
438 AtlasOuterR2 = 1150.
439
440 outerRadii = [0.0] * 18
441 for i in (0, 1, 16, 17):
442 outerRadii[i] = 1501.
443 for i in (2, 3, 14, 15):
444 outerRadii[i] = AtlasForwardOuterR
445 for i in (4, 5, 12, 13):
446 outerRadii[i] = AtlasOuterR2
447 for i in range(6, 12):
448 outerRadii[i] = AtlasOuterR1
449
450
451 if flags.Sim.WorldRRange:
452 routValue = flags.Sim.WorldRRange
453 if flags.Sim.WorldRRange > max(AtlasOuterR1, AtlasOuterR2):
454 for i in range(4, 14):
455 outerRadii[i] = routValue
456 else:
457 raise RuntimeError('getATLASEnvelope: ERROR flags.Sim.WorldRRange must be > %f. Current value %f' % (max(AtlasOuterR1, AtlasOuterR2), routValue) )
458 kwargs.setdefault("OuterRadii", outerRadii)
459
460
461 zSurfaces = [-26046., -23001., -23001., -22031., -22031., -12899., -12899., -6741., -6741., 6741., 6741., 12899., 12899., 22031., 22031., 23001., 23001., 26046.] # FIXME units mm??
462
463 if flags.Detector.GeometryFwdRegion or flags.Detector.GeometryAFP or flags.Detector.GeometryALFA or flags.Detector.GeometryZDC:
464 zSurfaces[0] = -400000.
465 zSurfaces[17] = 400000.
466
467 #leave a check in for WorldRrange and WorldZrange?
468 if flags.Sim.WorldZRange:
469 if flags.Sim.WorldZRange < 26046.:
470 raise RuntimeError('getATLASEnvelope: ERROR flags.Sim.WorldZRange must be > 26046. Current value: %f' % flags.Sim.WorldZRange)
471 zSurfaces[17] = flags.Sim.WorldZRange + 100.
472 zSurfaces[16] = flags.Sim.WorldZRange + 50.
473 zSurfaces[15] = flags.Sim.WorldZRange + 50.
474 zSurfaces[14] = flags.Sim.WorldZRange
475 zSurfaces[13] = flags.Sim.WorldZRange
476 zSurfaces[0] = -flags.Sim.WorldZRange - 100.
477 zSurfaces[1] = -flags.Sim.WorldZRange - 50.
478 zSurfaces[2] = -flags.Sim.WorldZRange - 50.
479 zSurfaces[3] = -flags.Sim.WorldZRange
480 zSurfaces[4] = -flags.Sim.WorldZRange
481
482 kwargs.setdefault("ZSurfaces", zSurfaces)
483 SubDetectorList = result.popToolsAndMerge(generateSubDetectorList(flags))
484 kwargs.setdefault("SubDetectors", SubDetectorList)
485 result.setPrivateTools(PolyconicalEnvelope(name, **kwargs))
486 return result
487
488
489def MaterialDescriptionToolCfg(flags, name="MaterialDescriptionTool", **kwargs):
490
491 result = ComponentAccumulator()
492 kwargs.setdefault("TestBeam", flags.Beam.Type is BeamType.TestBeam)
493 result.setPrivateTools(MaterialDescriptionTool(name, **kwargs))
494 return result
495
496
497def VoxelDensityToolCfg(flags, name="VoxelDensityTool", **kwargs):
498
499 voxelDensitySettings = {}
500 if flags.Detector.GeometryITkPixel:
501 voxelDensitySettings["ITkPixelDetector"] = 0.05
502 if flags.Detector.GeometryITkStrip:
503 voxelDensitySettings["ITkStrip::Barrel"] = 0.05
504 voxelDensitySettings["ITkStrip::ITkStrip_Forward"] = 0.05
505
507 voxelDensitySettings["ITkStrip::SCT_Forward"] = 0.05
508 kwargs.setdefault("VolumeVoxellDensityLevel",voxelDensitySettings)
509 result = ComponentAccumulator()
510 result.setPrivateTools(VoxelDensityTool(name, **kwargs))
511 return result
512
513
515 result = ComponentAccumulator()
516 regionCreatorList = []
517
518 if flags.Detector.GeometryCavern or flags.Sim.CavernBackground not in [CavernBackground.Off, CavernBackground.Signal]:
519 regionCreatorList += [
520 result.popToolsAndMerge(SX1PhysicsRegionToolCfg(flags)),
521 result.popToolsAndMerge(BedrockPhysicsRegionToolCfg(flags)),
522 result.popToolsAndMerge(CavernShaftsConcretePhysicsRegionToolCfg(flags))]
523 #regionCreatorList += ['CavernShaftsAirPhysicsRegionTool'] # Not used currently
524 if flags.Detector.GeometryID:
525 if flags.Detector.GeometryPixel:
526 regionCreatorList += [result.popToolsAndMerge(PixelPhysicsRegionToolCfg(flags))]
527 if flags.Detector.GeometrySCT:
528 regionCreatorList += [result.popToolsAndMerge(SCTPhysicsRegionToolCfg(flags))]
529 if flags.Detector.GeometryTRT:
530 regionCreatorList += [result.popToolsAndMerge(TRTPhysicsRegionToolCfg(flags))]
531 if flags.GeoModel.Run in [LHCPeriod.Run2, LHCPeriod.Run3]:
532 # TODO: should we support old geometry tags with Run == "UNDEFINED" and flags.GeoModel.IBLLayout not in ["noIBL", "UNDEFINED"]?
533 regionCreatorList += [result.popToolsAndMerge(TRT_ArPhysicsRegionToolCfg(flags))] #'TRT_KrPhysicsRegionTool'
534 # FIXME dislike the ordering here, but try to maintain the same ordering as in the old configuration.
535 if flags.Sim.InDetParameterization is InDetParameterization.FatrasG4:
536 regionCreatorList += [result.popToolsAndMerge(InDetPhysicsRegionToolCfg(flags))]
537 if flags.Detector.GeometryBpipe:
538 if flags.Sim.BeamPipeSimMode is not BeamPipeSimMode.Normal:
539 regionCreatorList += [result.popToolsAndMerge(BeampipeFwdCutPhysicsRegionToolCfg(flags))]
540 if not flags.Detector.GeometryFwdRegion and (flags.Detector.GeometryAFP or flags.Detector.GeometryALFA or flags.Detector.GeometryZDC):
541 regionCreatorList += [result.popToolsAndMerge(FWDBeamLinePhysicsRegionToolCfg(flags))]
542 if flags.Detector.GeometryITk:
543 if flags.Detector.GeometryITkPixel:
544 regionCreatorList += [result.popToolsAndMerge(ITkPixelPhysicsRegionToolCfg(flags))]
545 if flags.Detector.GeometryITkStrip:
546 regionCreatorList += [result.popToolsAndMerge(ITkStripPhysicsRegionToolCfg(flags))]
547 if flags.Detector.GeometryHGTD:
548 regionCreatorList += [result.popToolsAndMerge(HGTDPhysicsRegionToolCfg(flags))]
549 if flags.Detector.GeometryITk or flags.Detector.GeometryHGTD: # TODO: I do not know why this is only for ITk (and HGTD)
550 # FIXME dislike the ordering here, but try to maintain the same ordering as in the old configuration.
551 if flags.Detector.GeometryBpipe:
552 if flags.Sim.BeamPipeSimMode is not BeamPipeSimMode.Normal:
553 regionCreatorList += [result.popToolsAndMerge(BeampipeFwdCutPhysicsRegionToolCfg(flags))]
554 if not flags.Detector.GeometryFwdRegion and (flags.Detector.GeometryAFP or flags.Detector.GeometryALFA or flags.Detector.GeometryZDC):
555 regionCreatorList += [result.popToolsAndMerge(FWDBeamLinePhysicsRegionToolCfg(flags))]
556 if flags.Detector.GeometryCalo:
557 if flags.Detector.GeometryLAr:
558 # Shower parameterization overrides the calibration hit flag
559 if flags.Sim.LArParameterization is not LArParameterization.NoFrozenShowers \
560 and flags.Sim.CalibrationRun in [CalibrationRun.LAr, CalibrationRun.LArTile, CalibrationRun.LArTileZDC, CalibrationRun.DeadLAr]:
561 Logging.log.info('You requested both calibration hits and frozen showers / parameterization in the LAr.')
562 Logging.log.info(' Such a configuration is not allowed, and would give junk calibration hits where the showers are modified.')
563 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)+')')
564 raise RuntimeError('Configuration not allowed')
565 regionCreatorList += [
566 result.popToolsAndMerge(EMBPhysicsRegionToolCfg(flags)),
567 result.popToolsAndMerge(EMECPhysicsRegionToolCfg(flags)),
568 result.popToolsAndMerge(HECPhysicsRegionToolCfg(flags)),
569 result.popToolsAndMerge(FCALPhysicsRegionToolCfg(flags))]
570 fullCommandList = '\t'.join(flags.Sim.G4Commands)
571 if flags.Sim.LArParameterization is LArParameterization.FrozenShowers or 'EMECPara' in fullCommandList:
572 # EMECPara Physics region is used by Woodcock tracking
573 # and by EMEC Frozen Showers (the latter is not part
574 # of production configurations). NB The 'EMB'
575 # PhysicsRegion seems to be used by the Frozen Showers
576 # parametrization also. Unclear if this is correct -
577 # not a big issue as Frozen Showers are not used in
578 # the EMB in production configurations.
579 regionCreatorList += [
580 result.popToolsAndMerge(EMECParaPhysicsRegionToolCfg(flags))]
581 if flags.Sim.LArParameterization is not LArParameterization.NoFrozenShowers:
582 regionCreatorList += [result.popToolsAndMerge(FCALParaPhysicsRegionToolCfg(flags)),
583 result.popToolsAndMerge(FCAL2ParaPhysicsRegionToolCfg(flags))]
584 if flags.Sim.LArParameterization in [LArParameterization.DeadMaterialFrozenShowers, LArParameterization.FrozenShowersFCalOnly, LArParameterization.FastCaloSim]: # TODO Check this makes sense
585 pass
586 regionCreatorList += [
587 result.popToolsAndMerge(PreSampLArPhysicsRegionToolCfg(flags)),
588 result.popToolsAndMerge(DeadMaterialPhysicsRegionToolCfg(flags))]
589 if flags.Sim.LArParameterization is LArParameterization.FastCaloSim:
590 regionCreatorList += [result.popToolsAndMerge(CALOPhysicsRegionToolCfg(flags))]
591
594 if flags.Detector.GeometryMuon:
595 #todo - add the line below
596 regionCreatorList += [
597 result.popToolsAndMerge(DriftWallPhysicsRegionToolCfg(flags)),
598 result.popToolsAndMerge(DriftWall1PhysicsRegionToolCfg(flags)),
599 result.popToolsAndMerge(DriftWall2PhysicsRegionToolCfg(flags))]
600 if flags.Sim.CavernBackground not in [CavernBackground.Off, CavernBackground.Read] and not flags.Sim.RecordFlux:
601 regionCreatorList += [result.popToolsAndMerge(MuonSystemFastPhysicsRegionToolCfg(flags))]
602 result.setPrivateTools(regionCreatorList)
603 return result
604
605
607 regionCreatorList = []
608 result = ComponentAccumulator()
609 # Deliberately left commented out for now
610 #TODO - migrate below>>
611 #if (flags.GeoModel.AtlasVersion=="tb_LArH6_2003"):
612 # if (flags.Detector.GeometryLAr):
613 # regionCreatorList += [FCALPhysicsRegionTool(flags)]
614 #elif (flags.GeoModel.AtlasVersion=="tb_LArH6_2002"):
615 # if (flags.Detector.GeometryLAr):
616 # regionCreatorList += [HECPhysicsRegionTool(flags)]
617 #elif (flags.GeoModel.AtlasVersion=="tb_LArH6EC_2002"):
618 # if (flags.Detector.GeometryLAr):
619 # regionCreatorList += [EMECPhysicsRegionTool(flags)]
620 #elif (flags.GeoModel.AtlasVersion=="tb_LArH6_2004"):
621 # if (flags.Sim.LArTB_H6Hec.get_Value()):
622 # regionCreatorList += [HECPhysicsRegionTool(flags)]
623 # if (flags.Sim.LArTB_H6Emec.get_Value()):
624 # regionCreatorList += [EMECPhysicsRegionTool(flags)]
625 # if (flags.Sim.LArTB_H6Fcal.get_Value()):
626 # regionCreatorList += [FCALPhysicsRegionTool(flags)]
627 #<<migrate above
628 result.setPrivateTools(regionCreatorList)
629 return result
630
631
632
634 result = ComponentAccumulator()
635 fieldMgrList = []
636
637 if flags.Sim.TightMuonStepping:
638 tool = result.popToolsAndMerge(TightMuonsATLASFieldManagerToolCfg(flags))
639 fieldMgrList += [tool]
640 else:
641 tool = result.popToolsAndMerge(ATLASFieldManagerToolCfg(flags))
642 fieldMgrList += [tool]
643 if flags.Detector.GeometryBpipe:
644 tool = result.popToolsAndMerge(BeamPipeFieldManagerToolCfg(flags))
645 fieldMgrList += [tool]
646 if flags.Detector.GeometryID:
647 tool = result.popToolsAndMerge(InDetFieldManagerToolCfg(flags))
648 fieldMgrList += [tool]
649 if flags.Detector.GeometryITk or flags.Detector.GeometryHGTD: # TODO: while HGTD is included in the ITK envelope
650 tool = result.popToolsAndMerge(ITkFieldManagerToolCfg(flags))
651 fieldMgrList += [tool]
652 if flags.Detector.GeometryCalo and flags.Sim.MuonFieldOnlyInCalo:
653 tool = result.popToolsAndMerge(MuonsOnlyInCaloFieldManagerToolCfg(flags))
654 fieldMgrList += [tool]
655 if flags.Detector.GeometryMuon:
656 tool = result.popToolsAndMerge(MuonFieldManagerToolCfg(flags))
657 fieldMgrList += [tool]
658
659 #sort these forward ones later
660 if flags.Detector.GeometryFwdRegion: #or forward?
661 fieldMgrList+=[
662 result.popToolsAndMerge(Q1FwdFieldManagerToolCfg(flags)),
663 result.popToolsAndMerge(Q2FwdFieldManagerToolCfg(flags)),
664 result.popToolsAndMerge(Q3FwdFieldManagerToolCfg(flags)),
665 result.popToolsAndMerge(D1FwdFieldManagerToolCfg(flags)),
666 result.popToolsAndMerge(D2FwdFieldManagerToolCfg(flags)),
667 result.popToolsAndMerge(Q4FwdFieldManagerToolCfg(flags)),
668 result.popToolsAndMerge(Q5FwdFieldManagerToolCfg(flags)),
669 result.popToolsAndMerge(Q6FwdFieldManagerToolCfg(flags)),
670 result.popToolsAndMerge(Q7FwdFieldManagerToolCfg(flags)),
671 result.popToolsAndMerge(Q1HKickFwdFieldManagerToolCfg(flags)),
672 result.popToolsAndMerge(Q1VKickFwdFieldManagerToolCfg(flags)),
673 result.popToolsAndMerge(Q2HKickFwdFieldManagerToolCfg(flags)),
674 result.popToolsAndMerge(Q2VKickFwdFieldManagerToolCfg(flags)),
675 result.popToolsAndMerge(Q3HKickFwdFieldManagerToolCfg(flags)),
676 result.popToolsAndMerge(Q3VKickFwdFieldManagerToolCfg(flags)),
677 result.popToolsAndMerge(Q4VKickAFwdFieldManagerToolCfg(flags)),
678 result.popToolsAndMerge(Q4HKickFwdFieldManagerToolCfg(flags)),
679 result.popToolsAndMerge(Q4VKickBFwdFieldManagerToolCfg(flags)),
680 result.popToolsAndMerge(Q5HKickFwdFieldManagerToolCfg(flags)),
681 result.popToolsAndMerge(Q6VKickFwdFieldManagerToolCfg(flags)),
682 result.popToolsAndMerge(Q1HKickFwdFieldManagerToolCfg(flags)),
683 result.popToolsAndMerge(FwdRegionFieldManagerToolCfg(flags))]
684
685 result.setPrivateTools(fieldMgrList)
686 return result
687
688
690 fieldMgrList = []
691 result = ComponentAccumulator()
692 result.setPrivateTools(fieldMgrList)
693 return result
694
695
697 geoConfigToolList = []
698 # The methods for these tools should be defined in the
699 # package containing each tool, so G4AtlasTools in this case
700 result =ComponentAccumulator()
701 geoConfigToolList += [result.popToolsAndMerge(MaterialDescriptionToolCfg(flags))]
702 geoConfigToolList += [result.popToolsAndMerge(VoxelDensityToolCfg(flags))]
703 result.setPrivateTools(geoConfigToolList)
704 return result
705
706
707@AccumulatorCache
708def G4AtlasDetectorConstructionToolCfg(flags, name="G4AtlasDetectorConstructionTool", **kwargs):
709 result = ComponentAccumulator()
710
711
712 kwargs.setdefault("GeometryConfigurationTools", result.popToolsAndMerge(GeometryConfigurationToolsCfg(flags)))
713
714 kwargs.setdefault("FastSimMasterTool", result.addPublicTool(result.popToolsAndMerge(FastSimulationMasterToolCfg(flags))))
715
716 if "SenDetMasterTool" not in kwargs:
717 kwargs.setdefault("SenDetMasterTool",
718 result.addPublicTool(result.popToolsAndMerge(SensitiveDetectorMasterToolCfg(flags))))
719
720 if flags.Beam.Type is BeamType.TestBeam:
721 # Tile test beam
722 from G4AtlasTools.G4TestBeamGeometryConfig import TileTB_WorldEnvelopeCfg
723 kwargs.setdefault("World", result.popToolsAndMerge(TileTB_WorldEnvelopeCfg(flags)))
724 kwargs.setdefault("RegionCreators", []) # Empty for Tile test beam
725 kwargs.setdefault("FieldManagers", []) # Empty for Tile test beam
726 elif False: # This block is in case we ever decide to support LAr Test Beam again in Athena in the future
727 kwargs.setdefault("World", 'LArTB_World')
728 kwargs.setdefault("RegionCreators", result.popToolsAndMerge(TB_RegionCreatorListCfg(flags)))
729 kwargs.setdefault("FieldManagers", result.popToolsAndMerge(TB_FieldMgrListCfg(flags)))
730 else:
731 if flags.Detector.GeometryCavern:
732 kwargs.setdefault("World", result.popToolsAndMerge(CavernWorldCfg(flags)))
733 else:
734 kwargs.setdefault("World", result.popToolsAndMerge(ATLASEnvelopeCfg(flags)))
735 kwargs.setdefault("RegionCreators", result.popToolsAndMerge(ATLAS_RegionCreatorListCfg(flags)))
736 if flags.BField.solenoidOn or flags.BField.barrelToroidOn or flags.BField.endcapToroidOn:
737 kwargs.setdefault("FieldManagers", result.popToolsAndMerge(ATLAS_FieldMgrListCfg(flags)))
738
739 if flags.Sim.LArParameterization is LArParameterization.FastCaloSim:
740 kwargs.setdefault("G4CaloTransportTool", result.addPublicTool(result.popToolsAndMerge(G4CaloTransportToolCfg(flags))))
741
742 result.setPrivateTools(G4AtlasDetectorConstructionTool(name, **kwargs))
743 return result
744
745
746def CavernInfraGeoDetectorToolCfg(flags, name='CavernInfra', **kwargs):
747 from AtlasGeoModel.CavernGMConfig import CavernGeometryCfg
748 result = CavernGeometryCfg(flags)
749 kwargs.setdefault("DetectorName", "CavernInfra")
750 result.setPrivateTools(result.popToolsAndMerge(GeoDetectorToolCfg(flags, name, **kwargs)))
751 return result
752
753
754def CavernWorldCfg(flags, name="Cavern", **kwargs):
755 result = ComponentAccumulator()
756 kwargs.setdefault("DetectorName", "World")
757 bedrockDX = 302700
758 bedrockDZ = 301000
759 if flags.Sim.CavernBackground is CavernBackground.Off:
760
761 if flags.Sim.ISFRun:
762 # for ISF cosmics simulation, set world volume to biggest possible case
763 bedrockDX = 1000.*3000 # 3 km
764 bedrockDZ = 1000.*3000 # 3 km
765 else:
766 from CosmicGenerator.CosmicGeneratorConfig import CavernPropertyCalculator
767 theCavernProperties = CavernPropertyCalculator()
768 if theCavernProperties.BedrockDX(flags) > bedrockDX:
769 bedrockDX = theCavernProperties.BedrockDX(flags)
770 if theCavernProperties.BedrockDZ(flags) > bedrockDZ:
771 bedrockDZ = theCavernProperties.BedrockDZ(flags)
772
773 kwargs.setdefault("dX", bedrockDX) #FIXME Units?
774 kwargs.setdefault("dY", 57300 + 41000 + 1000) # 1 extra metre to help voxelization... #FIXME Units?
775 kwargs.setdefault("dZ", bedrockDZ) #FIXME Units?
776 # Subtraction Solid - has to be a better way to do this!!
777 kwargs.setdefault("NumberOfHoles", 1)
778 kwargs.setdefault("HoleNames", ['BelowCavern'])
779 kwargs.setdefault("Hole_dX", [bedrockDX])
780 kwargs.setdefault("Hole_dY", [41000])
781 kwargs.setdefault("Hole_dZ", [bedrockDZ])
782
783 kwargs.setdefault("HolePosX", [0])
784 kwargs.setdefault("HolePosY", [-58300])
785 kwargs.setdefault("HolePosZ", [0])
786
787 subDetectorList = []
788 subDetectorList += [ result.popToolsAndMerge(CavernInfraGeoDetectorToolCfg(flags))]
789 subDetectorList += [ result.popToolsAndMerge(ATLASEnvelopeCfg(flags))]
790
791 kwargs.setdefault("SubDetectors", subDetectorList)
792 result.setPrivateTools(BoxEnvelope(name, **kwargs))
793 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)
ToroidGeoDetectorToolCfg(flags, name="Toroid", **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)