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.Sim.InDetParameterization is InDetParameterization.AFatrasG4:
538 regionCreatorList += [result.popToolsAndMerge(InDetPhysicsRegionToolCfg(flags))]
539 if flags.Detector.GeometryBpipe:
540 if flags.Sim.BeamPipeSimMode is not BeamPipeSimMode.Normal:
541 regionCreatorList += [result.popToolsAndMerge(BeampipeFwdCutPhysicsRegionToolCfg(flags))]
542 if not flags.Detector.GeometryFwdRegion and (flags.Detector.GeometryAFP or flags.Detector.GeometryALFA or flags.Detector.GeometryZDC):
543 regionCreatorList += [result.popToolsAndMerge(FWDBeamLinePhysicsRegionToolCfg(flags))]
544 if flags.Detector.GeometryITk:
545 if flags.Detector.GeometryITkPixel:
546 regionCreatorList += [result.popToolsAndMerge(ITkPixelPhysicsRegionToolCfg(flags))]
547 if flags.Detector.GeometryITkStrip:
548 regionCreatorList += [result.popToolsAndMerge(ITkStripPhysicsRegionToolCfg(flags))]
549 if flags.Detector.GeometryHGTD:
550 regionCreatorList += [result.popToolsAndMerge(HGTDPhysicsRegionToolCfg(flags))]
551 if flags.Detector.GeometryITk or flags.Detector.GeometryHGTD: # TODO: I do not know why this is only for ITk (and HGTD)
552 # FIXME dislike the ordering here, but try to maintain the same ordering as in the old configuration.
553 if flags.Detector.GeometryBpipe:
554 if flags.Sim.BeamPipeSimMode is not BeamPipeSimMode.Normal:
555 regionCreatorList += [result.popToolsAndMerge(BeampipeFwdCutPhysicsRegionToolCfg(flags))]
556 if not flags.Detector.GeometryFwdRegion and (flags.Detector.GeometryAFP or flags.Detector.GeometryALFA or flags.Detector.GeometryZDC):
557 regionCreatorList += [result.popToolsAndMerge(FWDBeamLinePhysicsRegionToolCfg(flags))]
558 if flags.Detector.GeometryCalo:
559 if flags.Detector.GeometryLAr:
560 # Shower parameterization overrides the calibration hit flag
561 if flags.Sim.LArParameterization is not LArParameterization.NoFrozenShowers \
562 and flags.Sim.CalibrationRun in [CalibrationRun.LAr, CalibrationRun.LArTile, CalibrationRun.LArTileZDC, CalibrationRun.DeadLAr]:
563 Logging.log.info('You requested both calibration hits and frozen showers / parameterization in the LAr.')
564 Logging.log.info(' Such a configuration is not allowed, and would give junk calibration hits where the showers are modified.')
565 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)+')')
566 raise RuntimeError('Configuration not allowed')
567 regionCreatorList += [
568 result.popToolsAndMerge(EMBPhysicsRegionToolCfg(flags)),
569 result.popToolsAndMerge(EMECPhysicsRegionToolCfg(flags)),
570 result.popToolsAndMerge(HECPhysicsRegionToolCfg(flags)),
571 result.popToolsAndMerge(FCALPhysicsRegionToolCfg(flags))]
572 fullCommandList = '\t'.join(flags.Sim.G4Commands)
573 if flags.Sim.LArParameterization is LArParameterization.FrozenShowers or 'EMECPara' in fullCommandList:
574 # EMECPara Physics region is used by Woodcock tracking
575 # and by EMEC Frozen Showers (the latter is not part
576 # of production configurations). NB The 'EMB'
577 # PhysicsRegion seems to be used by the Frozen Showers
578 # parametrization also. Unclear if this is correct -
579 # not a big issue as Frozen Showers are not used in
580 # the EMB in production configurations.
581 regionCreatorList += [
582 result.popToolsAndMerge(EMECParaPhysicsRegionToolCfg(flags))]
583 if flags.Sim.LArParameterization is not LArParameterization.NoFrozenShowers:
584 regionCreatorList += [result.popToolsAndMerge(FCALParaPhysicsRegionToolCfg(flags)),
585 result.popToolsAndMerge(FCAL2ParaPhysicsRegionToolCfg(flags))]
586 if flags.Sim.LArParameterization in [LArParameterization.DeadMaterialFrozenShowers, LArParameterization.FrozenShowersFCalOnly, LArParameterization.FastCaloSim]: # TODO Check this makes sense
587 pass
588 regionCreatorList += [
589 result.popToolsAndMerge(PreSampLArPhysicsRegionToolCfg(flags)),
590 result.popToolsAndMerge(DeadMaterialPhysicsRegionToolCfg(flags))]
591 if flags.Sim.LArParameterization is LArParameterization.FastCaloSim:
592 regionCreatorList += [result.popToolsAndMerge(CALOPhysicsRegionToolCfg(flags))]
593
596 if flags.Detector.GeometryMuon:
597 #todo - add the line below
598 regionCreatorList += [
599 result.popToolsAndMerge(DriftWallPhysicsRegionToolCfg(flags)),
600 result.popToolsAndMerge(DriftWall1PhysicsRegionToolCfg(flags)),
601 result.popToolsAndMerge(DriftWall2PhysicsRegionToolCfg(flags))]
602 if flags.Sim.CavernBackground not in [CavernBackground.Off, CavernBackground.Read] and not flags.Sim.RecordFlux:
603 regionCreatorList += [result.popToolsAndMerge(MuonSystemFastPhysicsRegionToolCfg(flags))]
604 result.setPrivateTools(regionCreatorList)
605 return result
606
607
609 regionCreatorList = []
610 result = ComponentAccumulator()
611 # Deliberately left commented out for now
612 #TODO - migrate below>>
613 #if (flags.GeoModel.AtlasVersion=="tb_LArH6_2003"):
614 # if (flags.Detector.GeometryLAr):
615 # regionCreatorList += [FCALPhysicsRegionTool(flags)]
616 #elif (flags.GeoModel.AtlasVersion=="tb_LArH6_2002"):
617 # if (flags.Detector.GeometryLAr):
618 # regionCreatorList += [HECPhysicsRegionTool(flags)]
619 #elif (flags.GeoModel.AtlasVersion=="tb_LArH6EC_2002"):
620 # if (flags.Detector.GeometryLAr):
621 # regionCreatorList += [EMECPhysicsRegionTool(flags)]
622 #elif (flags.GeoModel.AtlasVersion=="tb_LArH6_2004"):
623 # if (flags.Sim.LArTB_H6Hec.get_Value()):
624 # regionCreatorList += [HECPhysicsRegionTool(flags)]
625 # if (flags.Sim.LArTB_H6Emec.get_Value()):
626 # regionCreatorList += [EMECPhysicsRegionTool(flags)]
627 # if (flags.Sim.LArTB_H6Fcal.get_Value()):
628 # regionCreatorList += [FCALPhysicsRegionTool(flags)]
629 #<<migrate above
630 result.setPrivateTools(regionCreatorList)
631 return result
632
633
634
636 result = ComponentAccumulator()
637 fieldMgrList = []
638
639 if flags.Sim.TightMuonStepping:
640 tool = result.popToolsAndMerge(TightMuonsATLASFieldManagerToolCfg(flags))
641 fieldMgrList += [tool]
642 else:
643 tool = result.popToolsAndMerge(ATLASFieldManagerToolCfg(flags))
644 fieldMgrList += [tool]
645 if flags.Detector.GeometryBpipe:
646 tool = result.popToolsAndMerge(BeamPipeFieldManagerToolCfg(flags))
647 fieldMgrList += [tool]
648 if flags.Detector.GeometryID:
649 tool = result.popToolsAndMerge(InDetFieldManagerToolCfg(flags))
650 fieldMgrList += [tool]
651 if flags.Detector.GeometryITk or flags.Detector.GeometryHGTD: # TODO: while HGTD is included in the ITK envelope
652 tool = result.popToolsAndMerge(ITkFieldManagerToolCfg(flags))
653 fieldMgrList += [tool]
654 if flags.Detector.GeometryCalo and flags.Sim.MuonFieldOnlyInCalo:
655 tool = result.popToolsAndMerge(MuonsOnlyInCaloFieldManagerToolCfg(flags))
656 fieldMgrList += [tool]
657 if flags.Detector.GeometryMuon:
658 tool = result.popToolsAndMerge(MuonFieldManagerToolCfg(flags))
659 fieldMgrList += [tool]
660
661 #sort these forward ones later
662 if flags.Detector.GeometryFwdRegion: #or forward?
663 fieldMgrList+=[
664 result.popToolsAndMerge(Q1FwdFieldManagerToolCfg(flags)),
665 result.popToolsAndMerge(Q2FwdFieldManagerToolCfg(flags)),
666 result.popToolsAndMerge(Q3FwdFieldManagerToolCfg(flags)),
667 result.popToolsAndMerge(D1FwdFieldManagerToolCfg(flags)),
668 result.popToolsAndMerge(D2FwdFieldManagerToolCfg(flags)),
669 result.popToolsAndMerge(Q4FwdFieldManagerToolCfg(flags)),
670 result.popToolsAndMerge(Q5FwdFieldManagerToolCfg(flags)),
671 result.popToolsAndMerge(Q6FwdFieldManagerToolCfg(flags)),
672 result.popToolsAndMerge(Q7FwdFieldManagerToolCfg(flags)),
673 result.popToolsAndMerge(Q1HKickFwdFieldManagerToolCfg(flags)),
674 result.popToolsAndMerge(Q1VKickFwdFieldManagerToolCfg(flags)),
675 result.popToolsAndMerge(Q2HKickFwdFieldManagerToolCfg(flags)),
676 result.popToolsAndMerge(Q2VKickFwdFieldManagerToolCfg(flags)),
677 result.popToolsAndMerge(Q3HKickFwdFieldManagerToolCfg(flags)),
678 result.popToolsAndMerge(Q3VKickFwdFieldManagerToolCfg(flags)),
679 result.popToolsAndMerge(Q4VKickAFwdFieldManagerToolCfg(flags)),
680 result.popToolsAndMerge(Q4HKickFwdFieldManagerToolCfg(flags)),
681 result.popToolsAndMerge(Q4VKickBFwdFieldManagerToolCfg(flags)),
682 result.popToolsAndMerge(Q5HKickFwdFieldManagerToolCfg(flags)),
683 result.popToolsAndMerge(Q6VKickFwdFieldManagerToolCfg(flags)),
684 result.popToolsAndMerge(Q1HKickFwdFieldManagerToolCfg(flags)),
685 result.popToolsAndMerge(FwdRegionFieldManagerToolCfg(flags))]
686
687 result.setPrivateTools(fieldMgrList)
688 return result
689
690
692 fieldMgrList = []
693 result = ComponentAccumulator()
694 result.setPrivateTools(fieldMgrList)
695 return result
696
697
699 geoConfigToolList = []
700 # The methods for these tools should be defined in the
701 # package containing each tool, so G4AtlasTools in this case
702 result =ComponentAccumulator()
703 geoConfigToolList += [result.popToolsAndMerge(MaterialDescriptionToolCfg(flags))]
704 geoConfigToolList += [result.popToolsAndMerge(VoxelDensityToolCfg(flags))]
705 result.setPrivateTools(geoConfigToolList)
706 return result
707
708
709@AccumulatorCache
710def G4AtlasDetectorConstructionToolCfg(flags, name="G4AtlasDetectorConstructionTool", **kwargs):
711 result = ComponentAccumulator()
712
713
714 kwargs.setdefault("GeometryConfigurationTools", result.popToolsAndMerge(GeometryConfigurationToolsCfg(flags)))
715
716 kwargs.setdefault("FastSimMasterTool", result.addPublicTool(result.popToolsAndMerge(FastSimulationMasterToolCfg(flags))))
717
718 if "SenDetMasterTool" not in kwargs:
719 kwargs.setdefault("SenDetMasterTool",
720 result.addPublicTool(result.popToolsAndMerge(SensitiveDetectorMasterToolCfg(flags))))
721
722 if flags.Beam.Type is BeamType.TestBeam:
723 # Tile test beam
724 from G4AtlasTools.G4TestBeamGeometryConfig import TileTB_WorldEnvelopeCfg
725 kwargs.setdefault("World", result.popToolsAndMerge(TileTB_WorldEnvelopeCfg(flags)))
726 kwargs.setdefault("RegionCreators", []) # Empty for Tile test beam
727 kwargs.setdefault("FieldManagers", []) # Empty for Tile test beam
728 elif False: # This block is in case we ever decide to support LAr Test Beam again in Athena in the future
729 kwargs.setdefault("World", 'LArTB_World')
730 kwargs.setdefault("RegionCreators", result.popToolsAndMerge(TB_RegionCreatorListCfg(flags)))
731 kwargs.setdefault("FieldManagers", result.popToolsAndMerge(TB_FieldMgrListCfg(flags)))
732 else:
733 if flags.Detector.GeometryCavern:
734 kwargs.setdefault("World", result.popToolsAndMerge(CavernWorldCfg(flags)))
735 else:
736 kwargs.setdefault("World", result.popToolsAndMerge(ATLASEnvelopeCfg(flags)))
737 kwargs.setdefault("RegionCreators", result.popToolsAndMerge(ATLAS_RegionCreatorListCfg(flags)))
738 if flags.BField.solenoidOn or flags.BField.barrelToroidOn or flags.BField.endcapToroidOn:
739 kwargs.setdefault("FieldManagers", result.popToolsAndMerge(ATLAS_FieldMgrListCfg(flags)))
740
741 if flags.Sim.LArParameterization is LArParameterization.FastCaloSim:
742 kwargs.setdefault("G4CaloTransportTool", result.addPublicTool(result.popToolsAndMerge(G4CaloTransportToolCfg(flags))))
743
744 result.setPrivateTools(G4AtlasDetectorConstructionTool(name, **kwargs))
745 return result
746
747
748def CavernInfraGeoDetectorToolCfg(flags, name='CavernInfra', **kwargs):
749 from AtlasGeoModel.CavernGMConfig import CavernGeometryCfg
750 result = CavernGeometryCfg(flags)
751 kwargs.setdefault("DetectorName", "CavernInfra")
752 result.setPrivateTools(result.popToolsAndMerge(GeoDetectorToolCfg(flags, name, **kwargs)))
753 return result
754
755
756def CavernWorldCfg(flags, name="Cavern", **kwargs):
757 result = ComponentAccumulator()
758 kwargs.setdefault("DetectorName", "World")
759 bedrockDX = 302700
760 bedrockDZ = 301000
761 if flags.Sim.CavernBackground is CavernBackground.Off:
762
763 if flags.Sim.ISFRun:
764 # for ISF cosmics simulation, set world volume to biggest possible case
765 bedrockDX = 1000.*3000 # 3 km
766 bedrockDZ = 1000.*3000 # 3 km
767 else:
768 from CosmicGenerator.CosmicGeneratorConfig import CavernPropertyCalculator
769 theCavernProperties = CavernPropertyCalculator()
770 if theCavernProperties.BedrockDX(flags) > bedrockDX:
771 bedrockDX = theCavernProperties.BedrockDX(flags)
772 if theCavernProperties.BedrockDZ(flags) > bedrockDZ:
773 bedrockDZ = theCavernProperties.BedrockDZ(flags)
774
775 kwargs.setdefault("dX", bedrockDX) #FIXME Units?
776 kwargs.setdefault("dY", 57300 + 41000 + 1000) # 1 extra metre to help voxelization... #FIXME Units?
777 kwargs.setdefault("dZ", bedrockDZ) #FIXME Units?
778 # Subtraction Solid - has to be a better way to do this!!
779 kwargs.setdefault("NumberOfHoles", 1)
780 kwargs.setdefault("HoleNames", ['BelowCavern'])
781 kwargs.setdefault("Hole_dX", [bedrockDX])
782 kwargs.setdefault("Hole_dY", [41000])
783 kwargs.setdefault("Hole_dZ", [bedrockDZ])
784
785 kwargs.setdefault("HolePosX", [0])
786 kwargs.setdefault("HolePosY", [-58300])
787 kwargs.setdefault("HolePosZ", [0])
788
789 subDetectorList = []
790 subDetectorList += [ result.popToolsAndMerge(CavernInfraGeoDetectorToolCfg(flags))]
791 subDetectorList += [ result.popToolsAndMerge(ATLASEnvelopeCfg(flags))]
792
793 kwargs.setdefault("SubDetectors", subDetectorList)
794 result.setPrivateTools(BoxEnvelope(name, **kwargs))
795 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.
TRTGeoDetectorToolCfg(flags, name='TRT', **kwargs)
LArMgrGeoDetectorToolCfg(flags, name='LArMgr', **kwargs)
ITkPixelGeoDetectorToolCfg(flags, name='ITkPixel', **kwargs)
IDETEnvelopeCfg(flags, name="IDET", **kwargs)
VoxelDensityToolCfg(flags, name="VoxelDensityTool", **kwargs)
MaterialDescriptionToolCfg(flags, name="MaterialDescriptionTool", **kwargs)
GeoDetectorToolCfg(flags, name='GeoDetectorTool', **kwargs)
ITKEnvelopeCfg(flags, name="ITK", **kwargs)
CavernWorldCfg(flags, name="Cavern", **kwargs)
PLRGeoDetectorToolCfg(flags, name='PLR', **kwargs)
CavernInfraGeoDetectorToolCfg(flags, name='CavernInfra', **kwargs)
TileGeoDetectorToolCfg(flags, name='Tile', **kwargs)
PixelGeoDetectorToolCfg(flags, name='Pixel', **kwargs)
MUONEnvelopeCfg(flags, name="MUONQ02", **kwargs)
G4AtlasDetectorConstructionToolCfg(flags, name="G4AtlasDetectorConstructionTool", **kwargs)
BeamPipeGeoDetectorToolCfg(flags, name='BeamPipe', **kwargs)
LucidGeoDetectorToolCfg(flags, name='Lucid', **kwargs)
BCMPrimeGeoDetectorToolCfg(flags, name='BCMPrime', **kwargs)
ZDCGeoDetectorToolCfg(flags, name='ZDC', **kwargs)
CosmicShortCutCfg(flags, name="CosmicShortCut", **kwargs)
ALFAGeoDetectorToolCfg(flags, name='ALFA', **kwargs)
FwdRegionGeoDetectorToolCfg(flags, name='FwdRegion', **kwargs)
SCTGeoDetectorToolCfg(flags, name='SCT', **kwargs)
ForwardRegionEnvelopeCfg(flags, name='ForwardRegion', **kwargs)
ToroidGeoDetectorToolCfg(flags, name="Toroid", **kwargs)
ITkStripGeoDetectorToolCfg(flags, name='ITkStrip', **kwargs)
CALOEnvelopeCfg(flags, name="CALO", **kwargs)
MuonGeoDetectorToolCfg(flags, name='Muon', **kwargs)
ATLASEnvelopeCfg(flags, name="Atlas", **kwargs)
HGTDServiceToolCfg(flags, name='HGTDServices', **kwargs)
G4GeometryNotifierSvcCfg(flags, name="G4GeometryNotifierSvc", **kwargs)
HGTDGeoDetectorToolCfg(flags, name='HGTD', **kwargs)
AFPGeoDetectorToolCfg(flags, name='AFP', **kwargs)
IDetServicesMatGeoDetectorToolCfg(flags, name='IDetServicesMat', **kwargs)