diff --git a/LArCalorimeter/LArExample/LArConditionsCommon/share/LArConditionsCommon_MC_jobOptions.py b/LArCalorimeter/LArExample/LArConditionsCommon/share/LArConditionsCommon_MC_jobOptions.py index 337b450a78f821b56a893775d42987c4d9531f1c..18c0314c9c33a375c1fc70f4391520d4aef45736 100755 --- a/LArCalorimeter/LArExample/LArConditionsCommon/share/LArConditionsCommon_MC_jobOptions.py +++ b/LArCalorimeter/LArExample/LArConditionsCommon/share/LArConditionsCommon_MC_jobOptions.py @@ -65,20 +65,21 @@ if SuperCells: if larCondFlags.useMCShape(): larCondDBFolders += [("LArShape32MC","/LAR/ElecCalibMCSC/Shape","LArShape",LArShapeSymAlg,None)] else: - larCondDBFolders = [("LArRampMC","/LAR/ElecCalibMC/Ramp","LArRamp", LArRampSymAlg ,None), - ("LArAutoCorrMC","/LAR/ElecCalibMC/AutoCorr","LArAutoCorr", LArAutoCorrSymAlg,None), - ("LArDAC2uAMC","/LAR/ElecCalibMC/DAC2uA","LArDAC2uA",LArDAC2uASymAlg,None), - ("LArPedestalMC","/LAR/ElecCalibMC/Pedestal","LArPedestal",None,None), - ("LArNoiseMC","/LAR/ElecCalibMC/Noise","LArNoise",LArNoiseSymAlg,None), + larCondDBFolders = [ + #("LArRampMC","/LAR/ElecCalibMC/Ramp","LArRamp", LArRampSymAlg ,None), + #("LArAutoCorrMC","/LAR/ElecCalibMC/AutoCorr","LArAutoCorr", LArAutoCorrSymAlg,None), + #("LArDAC2uAMC","/LAR/ElecCalibMC/DAC2uA","LArDAC2uA",LArDAC2uASymAlg,None), + #("LArPedestalMC","/LAR/ElecCalibMC/Pedestal","LArPedestal",None,None), + #("LArNoiseMC","/LAR/ElecCalibMC/Noise","LArNoise",LArNoiseSymAlg,None), ("LArfSamplMC","/LAR/ElecCalibMC/fSampl","LArfSampl",LArfSamplSymAlg,None), - ("LAruA2MeVMC","/LAR/ElecCalibMC/uA2MeV","LAruA2MeV", LAruA2MeVSymAlg,None), - ("LArMinBiasMC","/LAR/ElecCalibMC/MinBias","LArMinBias",LArMinBiasSymAlg,None), + #("LAruA2MeVMC","/LAR/ElecCalibMC/uA2MeV","LAruA2MeV", LAruA2MeVSymAlg,None), + #("LArMinBiasMC","/LAR/ElecCalibMC/MinBias","LArMinBias",LArMinBiasSymAlg,None), ] - if not isPileUpDigi: - larCondDBFolders += [("LArMinBiasAverageMC","/LAR/ElecCalibMC/MinBiasAverage","LArMinBiasAverage",LArMinBiasAverageSymAlg,None)] + #if not isPileUpDigi: + # larCondDBFolders += [("LArMinBiasAverageMC","/LAR/ElecCalibMC/MinBiasAverage","LArMinBiasAverage",LArMinBiasAverageSymAlg,None)] - if larCondFlags.useMCShape(): - larCondDBFolders += [("LArShape32MC","/LAR/ElecCalibMC/Shape","LArShape",LArShapeSymAlg,None)] + #if larCondFlags.useMCShape(): + # larCondDBFolders += [("LArShape32MC","/LAR/ElecCalibMC/Shape","LArShape",LArShapeSymAlg,None)] include( "LArConditionsCommon/LArIdMap_MC_jobOptions.py" ) @@ -104,9 +105,9 @@ else: conddb.addFolder(LArDB,MissingFEBsFolder,className='AthenaAttributeList') condSeq+=LArBadFebCondAlg(ReadKey=MissingFEBsFolder) -if not isPileUpDigi: - condSeq+=LArBadFebCondAlg("LArKnownBadFebAlg",ReadKey="",WriteKey="LArKnownBadFEBs") - condSeq+=LArBadFebCondAlg("LArKnownMNBFebAlg",ReadKey="",WriteKey="LArKnownMNBFEBs") +#if not isPileUpDigi: +# condSeq+=LArBadFebCondAlg("LArKnownBadFebAlg",ReadKey="",WriteKey="LArKnownBadFEBs") +# condSeq+=LArBadFebCondAlg("LArKnownMNBFebAlg",ReadKey="",WriteKey="LArKnownMNBFEBs") ## these may be conditional. diff --git a/Simulation/FastShower/FastCaloSim/python/FastCaloSimFactoryNew.py b/Simulation/FastShower/FastCaloSim/python/FastCaloSimFactoryNew.py index a51050c1b6daba429064744f14b4c6d544917896..cd8d25f39ab220ba02a7260cb7c158a7cf9df36b 100644 --- a/Simulation/FastShower/FastCaloSim/python/FastCaloSimFactoryNew.py +++ b/Simulation/FastShower/FastCaloSim/python/FastCaloSimFactoryNew.py @@ -7,7 +7,7 @@ import TrkConfig.AtlasExtrapolatorToolsConfig as TC # UPDATORS -def NIMatEffUpdatorCfg(flags, name="NIMatEffUpdator", **kwargs): +def NIMatEffUpdatorCfg(flags, name="ISF_NIMatEffUpdator", **kwargs): mlog = logging.getLogger(name) mlog.debug("Start configuration") result = ComponentAccumulator() diff --git a/Simulation/ISF/ISF_Config/python/ISF_MainConfigNew.py b/Simulation/ISF/ISF_Config/python/ISF_MainConfigNew.py index 059b83a057a6725e5fede970a2fb241258845247..a1c67fd6b748f28d7e861e41836a86d05bd2d288 100644 --- a/Simulation/ISF/ISF_Config/python/ISF_MainConfigNew.py +++ b/Simulation/ISF/ISF_Config/python/ISF_MainConfigNew.py @@ -378,7 +378,7 @@ def Kernel_ATLFASTIIF_G4MSCfg(flags, name="ISF_Kernel_ATLFASTIIF_G4MS", **kwargs kwargs.setdefault("CavernSimulationSelectors" , [ acc.getPublicTool("ISF_DefaultParticleKillerSelector") ]) # not migrated simFlags.SimulationFlavour = "ATLFASTIIF_MS" # simFlags.SimulationFlavour = "ATLFASTIIF_G4MS" - + kwargs.setdefault("OutputLevel", 1) acc.merge(Kernel_GenericSimulatorCfg(flags, name, **kwargs)) # Merge properly configured SimKernel here and let deduplication sort it out. return acc diff --git a/Simulation/ISF/ISF_Core/ISF_Services/python/ISF_ServicesConfigNew.py b/Simulation/ISF/ISF_Core/ISF_Services/python/ISF_ServicesConfigNew.py index e4525894b7ad7427531a03eaa2f35d8296cf6da3..0d2e6c826fac429eb03e0bf9ba89ab01d78b9ec8 100644 --- a/Simulation/ISF/ISF_Core/ISF_Services/python/ISF_ServicesConfigNew.py +++ b/Simulation/ISF/ISF_Core/ISF_Services/python/ISF_ServicesConfigNew.py @@ -85,6 +85,9 @@ def ParticleBrokerSvcNoOrderingCfg(ConfigFlags, name="ISF_ParticleBrokerSvcNoOrd result.addPublicTool(tool) kwargs.setdefault("EntryLayerTool", result.getPublicTool(tool.name)) kwargs.setdefault("GeoIDSvc", result.getService("ISF_GeoIDSvc").name) # FIXME + if ConfigFlags.Sim.ISF.Simulator in ["ATLFASTIIF_G4MS", "ATLFAST3F_G4MS"]: + from ISF_Services.ISF_ServicesCoreConfigNew import GeoIDSvcCfg + kwargs["GeoIDSvc"] = result.getPrimaryAndMerge(GeoIDSvcCfg(ConfigFlags)).name #HACK # assume "GeoIDSvc" has been set alongside "EntryLayerTool" kwargs.setdefault("AlwaysUseGeoIDSvc", False) kwargs.setdefault("ValidateGeoIDs", ConfigFlags.Sim.ISF.ValidationMode) diff --git a/Simulation/Tests/ISF_Validation/test/test_MC16_ATLFAST3F_G4MS_ttbar.sh b/Simulation/Tests/ISF_Validation/test/test_MC16_ATLFAST3F_G4MS_ttbar.sh index 9575cb2b8393c04e57cfef9fb73a669d93da1f20..5c2a497abeaababb8be92c3ba42608530f49874a 100755 --- a/Simulation/Tests/ISF_Validation/test/test_MC16_ATLFAST3F_G4MS_ttbar.sh +++ b/Simulation/Tests/ISF_Validation/test/test_MC16_ATLFAST3F_G4MS_ttbar.sh @@ -26,8 +26,9 @@ Sim_tf.py \ --imf False rc=$? -rc2=-9999 echo "art-result: $rc simOLD" + +rc2=-9999 if [ $rc -eq 0 ] then ArtPackage=$1 diff --git a/Simulation/Tests/ISF_ValidationMT/test/test_RUN3Sym_ATLFAST3F_G4MS_ttbar_CAvsCG.sh b/Simulation/Tests/ISF_ValidationMT/test/test_RUN3Sym_ATLFAST3F_G4MS_ttbar_CAvsCG.sh index 0964b8148b7c210e0b018e2ff742c9be34f80ae0..85a633fa05e8419123ee6e2e7e007c58eb58c44c 100755 --- a/Simulation/Tests/ISF_ValidationMT/test/test_RUN3Sym_ATLFAST3F_G4MS_ttbar_CAvsCG.sh +++ b/Simulation/Tests/ISF_ValidationMT/test/test_RUN3Sym_ATLFAST3F_G4MS_ttbar_CAvsCG.sh @@ -18,13 +18,13 @@ Sim_tf.py \ --physicsList 'FTFP_BERT_ATL' \ --truthStrategy 'MC15aPlus' \ --simulator 'ATLFAST3F_G4MS' \ - --postInclude 'PyJobTransforms.UseFrontier' \ + --postInclude 'PyJobTransforms.UseFrontier,AthenaConfiguration.JobOptsDumper.JobOptsDumperCfg' \ --preInclude 'EVNTtoHITS:SimuJobTransforms.BeamPipeKill' \ --DataRunNumber '330000' \ --geometryVersion 'default:ATLAS-R3S-2021-01-00-02' \ --inputEVNTFile "/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/SimCoreTests/valid1.410000.PowhegPythiaEvtGen_P2012_ttbar_hdamp172p5_nonallhad.evgen.EVNT.e4993.EVNT.08166201._000012.pool.root.1" \ --outputHITSFile "test.CA.HITS.pool.root" \ - --maxEvents 4 \ + --maxEvents 2 \ --postExec 'with open("ConfigSimCA.pkl", "wb") as f: cfg.store(f)' \ --imf False @@ -42,12 +42,13 @@ then --truthStrategy 'MC15aPlus' \ --simulator 'ATLFAST3F_G4MS' \ --postInclude 'default:PyJobTransforms/UseFrontier.py' \ + --postExec 'default:topSeq+=CfgMgr.JobOptsDumperAlg(FileName="CGSimConfig.txt")' \ --preInclude 'EVNTtoHITS:SimulationJobOptions/preInclude.BeamPipeKill.py' \ --DataRunNumber '330000' \ --geometryVersion 'default:ATLAS-R3S-2021-01-00-02_VALIDATION' \ --inputEVNTFile "/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/SimCoreTests/valid1.410000.PowhegPythiaEvtGen_P2012_ttbar_hdamp172p5_nonallhad.evgen.EVNT.e4993.EVNT.08166201._000012.pool.root.1" \ --outputHITSFile "test.CA.HITS.pool.root" \ - --maxEvents 4 \ + --maxEvents 2 \ --imf False \ --athenaopts '"--config-only=ConfigSimCG.pkl"' @@ -57,6 +58,7 @@ then --truthStrategy 'MC15aPlus' \ --simulator 'ATLFAST3F_G4MS' \ --postInclude 'default:PyJobTransforms/UseFrontier.py' \ + --postExec 'default:topSeq+=CfgMgr.JobOptsDumperAlg(FileName="CGSimConfig.txt")' \ --preInclude 'EVNTtoHITS:SimulationJobOptions/preInclude.BeamPipeKill.py' \ --DataRunNumber '330000' \ --geometryVersion 'default:ATLAS-R3S-2021-01-00-02_VALIDATION' \ @@ -71,18 +73,18 @@ then fi echo "art-result: $rc2 simOLD" -#rc3=-9999 -#if [ $rc2 -eq 0 ] -#then -# # Compare the outputs -# acmd.py diff-root test.CG.HITS.pool.root test.CA.HITS.pool.root \ -# --error-mode resilient \ -# --mode semi-detailed \ -# --ignore-leaves RecoTimingObj_p1_EVNTtoHITS_timings index_ref -# rc3=$? -# status=$rc3 -#fi -# -#echo "art-result: $rc3 CAvsCG" +rc3=-9999 +if [ $rc2 -eq 0 ] +then + # Compare the outputs + acmd.py diff-root test.CG.HITS.pool.root test.CA.HITS.pool.root \ + --error-mode resilient \ + --mode semi-detailed \ + --ignore-leaves RecoTimingObj_p1_EVNTtoHITS_timings index_ref + rc3=$? + status=$rc3 +fi + +echo "art-result: $rc3 CAvsCG" exit $status diff --git a/TileCalorimeter/TileConditions/share/TileConditions_jobOptions.py b/TileCalorimeter/TileConditions/share/TileConditions_jobOptions.py index bfd70ce640e972147fdd61ad8914384a26505d50..2b845ca10c4c8e9a235d3948c110a59d124a48fd 100644 --- a/TileCalorimeter/TileConditions/share/TileConditions_jobOptions.py +++ b/TileCalorimeter/TileConditions/share/TileConditions_jobOptions.py @@ -129,7 +129,9 @@ if TileUseCOOL or athenaCommonFlags.isOnline(): if not 'TileUseCOOLPULSE' in dir() or not TileUseCOOLOFC: TileUseCOOLPULSE=True; # read pulse from COOL - tileInfoConfigurator.setupCOOL(type=(TileGapTiming+TilePulse)) + from AthenaCommon.DetFlags import DetFlags + if not DetFlags.simulate.Tile_on(): + tileInfoConfigurator.setupCOOL(type=(TileGapTiming+TilePulse)) if TileUseDCS: tileInfoConfigurator.setupCOOLDCS(); diff --git a/Tracking/TrkConfig/python/AtlasTrackingGeometrySvcConfig.py b/Tracking/TrkConfig/python/AtlasTrackingGeometrySvcConfig.py index e726cf284b0ce4f3a612bd0c24a07ef79d2d297f..101494668e7c3f94d09a32c7cd62be26c878a7ae 100644 --- a/Tracking/TrkConfig/python/AtlasTrackingGeometrySvcConfig.py +++ b/Tracking/TrkConfig/python/AtlasTrackingGeometrySvcConfig.py @@ -3,7 +3,7 @@ from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator from AthenaConfiguration.ComponentFactory import CompFactory from IOVDbSvc.IOVDbSvcConfig import addFoldersSplitOnline -from SubDetectorEnvelopes.SubDetectorEnvelopesConfigNew import EnvelopeDefSvcCfg +from SubDetectorEnvelopes.SubDetectorEnvelopesConfigNew import EnvelopeDefSvcCfg from GaudiKernel.GaudiHandles import PrivateToolHandleArray @@ -12,87 +12,77 @@ from GaudiKernel.GaudiHandles import PrivateToolHandleArray def _setupCondDB(flags, CoolDataBaseFolder, quiet=True): result=ComponentAccumulator() - + # the tag names materialTagBase = 'AtlasLayerMat_v' - version = 21 + version = 21 sub_version = '' - + AtlasMaterialTag = materialTagBase+str(version)+sub_version+'_' if flags.Detector.GeometryITk: - AtlasMaterialTag = flags.ITk.trackingGeometry.materialTag+str(flags.ITk.trackingGeometry.version)+'_' + AtlasMaterialTag = flags.ITk.trackingGeometry.materialTag+str(flags.ITk.trackingGeometry.version)+'_' cfolder = CoolDataBaseFolder +'<tag>TagInfoMajor/'+AtlasMaterialTag+'/GeoAtlas</tag>' - + if flags.Detector.GeometryITk and flags.ITk.trackingGeometry.loadLocalDbForMaterialMaps: DataBaseName=flags.ITk.trackingGeometry.localDatabaseName from IOVDbSvc.IOVDbSvcConfig import addFolders result.merge(addFolders(flags,"/GLOBAL/TrackingGeo/LayerMaterialITK",detDb=DataBaseName, tag=AtlasMaterialTag)) cfolder = CoolDataBaseFolder +'<tag>TagInfoMajor/'+AtlasMaterialTag+'</tag>' - + # if not quiet: # print('[ TrackingGeometrySvc ] base material tag : ' + AtlasMaterialTag) # print('[ TrackingGeometrySvc ] translated to COOL: ' + cfolder) # load the right folders result.merge( addFoldersSplitOnline(flags,'GLOBAL',[cfolder],[cfolder],splitMC=True) ) - + + return result + + +def BeamPipeBuilderCfg(flags, namePrefix=''): + result = ComponentAccumulator() + from BeamPipeGeoModel.BeamPipeGMConfig import BeamPipeGeometryCfg + result.merge(BeamPipeGeometryCfg(flags)) + InDet__BeamPipeBuilder=CompFactory.InDet.BeamPipeBuilder + beamPipeBuilder = InDet__BeamPipeBuilder(name=namePrefix+'BeamPipeBuilder') + result.setPrivateTools(beamPipeBuilder) return result - -def _getInDetTrackingGeometryBuilder(name, flags,result, envelopeDefinitionSvc, namePrefix='', setLayerAssociation = True, buildTrtStrawLayers = False): - # Based on https://gitlab.cern.ch/atlas/athena/blob/master/InnerDetector/InDetDetDescr/InDetTrackingGeometry/python/ConfiguredInDetTrackingGeometryBuilder.py - # A lot of comments below are to help people understand differences from the above, in case we need to revert some simplifications I made - # i.e. this is far from complete, but is better than what was there before. - - # beampipe - from BeamPipeGeoModel.BeamPipeGMConfig import BeamPipeGeometryCfg - result.merge(BeamPipeGeometryCfg(flags)) - InDet__BeamPipeBuilder=CompFactory.InDet.BeamPipeBuilder - beamPipeBuilder = InDet__BeamPipeBuilder(name=namePrefix+'BeamPipeBuilder') - - result.addPublicTool(beamPipeBuilder) - layerbuilders = [] - binnings = [] - colors = [] - - # Pixel - if flags.Detector.GeometryPixel: + + +def PixelLayerBuilderCfg(flags, namePrefix='', setLayerAssociation = True): + result = ComponentAccumulator() from AthenaConfiguration.Enums import ProductionStep if flags.Common.ProductionStep != ProductionStep.Simulation: # Not needed by FATRAS from PixelGeoModel.PixelGeoModelConfig import PixelReadoutGeometryCfg - result.merge(PixelReadoutGeometryCfg( flags )) + result.merge(PixelReadoutGeometryCfg(flags)) else: from PixelGeoModel.PixelGeoModelConfig import PixelSimulationGeometryCfg - result.merge(PixelSimulationGeometryCfg( flags )) + result.merge(PixelSimulationGeometryCfg(flags)) InDet__SiLayerBuilder=CompFactory.InDet.SiLayerBuilder PixelLayerBuilder = InDet__SiLayerBuilder(name=namePrefix+'PixelLayerBuilder') - PixelLayerBuilder.PixelCase = True - PixelLayerBuilder.Identification = 'Pixel' + PixelLayerBuilder.PixelCase = True + PixelLayerBuilder.Identification = 'Pixel' PixelLayerBuilder.SiDetManagerLocation = 'Pixel' # additional layers - handle with care ! - PixelLayerBuilder.BarrelAdditionalLayerRadii = [ 130.0 ] # The PST - PixelLayerBuilder.BarrelAdditionalLayerType = [ 0 ] # -- will shift volume boundary to PST + PixelLayerBuilder.BarrelAdditionalLayerRadii = [ 130.0 ] # The PST + PixelLayerBuilder.BarrelAdditionalLayerType = [ 0 ] # -- will shift volume boundary to PST PixelLayerBuilder.EndcapAdditionalLayerPositionsZ = [ -1900. , 1900. ] # DBM - PixelLayerBuilder.EndcapAdditionalLayerType = [ 1 , 1 ] # DBM + PixelLayerBuilder.EndcapAdditionalLayerType = [ 1 , 1 ] # DBM # Pixel barrel specifications - PixelLayerBuilder.BarrelLayerBinsZ = 1 - PixelLayerBuilder.BarrelLayerBinsPhi = 1 - PixelLayerBuilder.EndcapLayerBinsR = 1 - PixelLayerBuilder.EndcapLayerBinsPhi = 1 - + PixelLayerBuilder.BarrelLayerBinsZ = 1 + PixelLayerBuilder.BarrelLayerBinsPhi = 1 + PixelLayerBuilder.EndcapLayerBinsR = 1 + PixelLayerBuilder.EndcapLayerBinsPhi = 1 + # set the layer association - PixelLayerBuilder.SetLayerAssociation = setLayerAssociation - - # the binning type of the layers a - PixelLayerBinning = 2 - # add it to tool service - result.addPublicTool(PixelLayerBuilder) - # put them to the caches - layerbuilders += [ PixelLayerBuilder ] - binnings += [ PixelLayerBinning ] - colors += [ 3 ] - - if flags.Detector.GeometrySCT: + PixelLayerBuilder.SetLayerAssociation = setLayerAssociation + result.setPrivateTools(PixelLayerBuilder) + return result + + +def SCT_LayerBuilderCfg(flags, namePrefix='', setLayerAssociation = True): + result = ComponentAccumulator() from AthenaConfiguration.Enums import ProductionStep if flags.Common.ProductionStep != ProductionStep.Simulation: # Not needed by FATRAS from SCT_GeoModel.SCT_GeoModelConfig import SCT_ReadoutGeometryCfg @@ -108,30 +98,25 @@ def _getInDetTrackingGeometryBuilder(name, flags,result, envelopeDefinitionSvc, SCT_LayerBuilder.Identification = 'SCT' SCT_LayerBuilder.SiDetManagerLocation = 'SCT' # additionall layers - handle with care ! - SCT_LayerBuilder.BarrelAdditionalLayerRadii = [] - SCT_LayerBuilder.BarrelAdditionalLayerType = [] + SCT_LayerBuilder.BarrelAdditionalLayerRadii = [] + SCT_LayerBuilder.BarrelAdditionalLayerType = [] - SCT_LayerBuilder.EndcapAdditionalLayerPositionsZ = [ -2850. , 2850. ] - SCT_LayerBuilder.EndcapAdditionalLayerType = [ 0 , 0 ] + SCT_LayerBuilder.EndcapAdditionalLayerPositionsZ = [ -2850. , 2850. ] + SCT_LayerBuilder.EndcapAdditionalLayerType = [ 0 , 0 ] SCT_LayerBuilder.BarrelLayerBinsZ = 1 SCT_LayerBuilder.BarrelLayerBinsPhi = 1 - # SCT endcap specifications + # SCT endcap specifications SCT_LayerBuilder.EndcapLayerBinsR = 1 SCT_LayerBuilder.EndcapLayerBinsPhi = 1 - SCT_LayerBuilder.EndcapComplexRingBinning = True - # set the layer association - SCT_LayerBuilder.SetLayerAssociation = setLayerAssociation - # the binning type of the layer - SCT_LayerBinning = 2 - # SCT -> ToolSvc - result.addPublicTool(SCT_LayerBuilder) - - # put them to the caches - layerbuilders += [ SCT_LayerBuilder ] - binnings += [ SCT_LayerBinning ] - colors += [ 4 ] - - if flags.Detector.GeometryTRT: + SCT_LayerBuilder.EndcapComplexRingBinning = True + # set the layer association + SCT_LayerBuilder.SetLayerAssociation = setLayerAssociation + result.setPrivateTools(SCT_LayerBuilder) + return result + + +def TRT_LayerBuilderCfg(flags, namePrefix='', buildTrtStrawLayers = False): + result = ComponentAccumulator() from AthenaConfiguration.Enums import ProductionStep if flags.Common.ProductionStep != ProductionStep.Simulation: # Not needed by FATRAS from TRT_GeoModel.TRT_GeoModelConfig import TRT_ReadoutGeometryCfg @@ -144,279 +129,365 @@ def _getInDetTrackingGeometryBuilder(name, flags,result, envelopeDefinitionSvc, TRT_LayerBuilder = InDet__TRT_LayerBuilder(name=namePrefix+'TRT_LayerBuilder') # TRT barrel specifications - assume defaults # SCT endcap specifications - assume defaults - - # set the binning from bi-aequidistant to arbitrary for complex TRT volumes - TRT_LayerBinning = 1 - if buildTrtStrawLayers or (flags.Common.ProductionStep in [ProductionStep.Simulation, ProductionStep.FastChain] and flags.Sim.ISF.Simulator not in ["ATLFASTIIMT"]): - TRT_LayerBinning = 2 + if buildTrtStrawLayers: - TRT_LayerBuilder.ModelLayersOnly = False - # TRT -> ToolSvc - result.addPublicTool(TRT_LayerBuilder) - - # put them to the caches - layerbuilders += [ TRT_LayerBuilder ] - binnings += [ TRT_LayerBinning ] - colors += [ 5 ] - - # helpers for the InDetTrackingGeometry Builder : layer array creator - Trk__LayerArrayCreator=CompFactory.Trk.LayerArrayCreator - InDetLayerArrayCreator = Trk__LayerArrayCreator(name = 'InDetLayerArrayCreator') - InDetLayerArrayCreator.EmptyLayerMode = 2 # deletes empty material layers from arrays - # add to ToolSvc - result.addPublicTool(InDetLayerArrayCreator) - - # helpers for the InDetTrackingGeometry Builder : volume array creator - InDetTrackingVolumeArrayCreator= CompFactory.Trk.TrackingVolumeArrayCreator(name = 'InDetTrackingVolumeArrayCreator') - # add to ToolSvc - result.addPublicTool(InDetTrackingVolumeArrayCreator) - - # helpers for the InDetTrackingGeometry Builder : tracking volume helper for gluing - Trk__TrackingVolumeHelper=CompFactory.Trk.TrackingVolumeHelper - InDetTrackingVolumeHelper = Trk__TrackingVolumeHelper(name ='InDetTrackingVolumeHelper') - # the material bins - assume defaults - # add to ToolSvc - result.addPublicTool(InDetTrackingVolumeHelper) - - # helpers for the InDetTrackingGeometry Builder : cylinder volume creator - Trk__CylinderVolumeCreator=CompFactory.Trk.CylinderVolumeCreator - InDetCylinderVolumeCreator = Trk__CylinderVolumeCreator(name = 'InDetCylinderVolumeCreator') - # give it the layer array creator - InDetCylinderVolumeCreator.LayerArrayCreator = InDetLayerArrayCreator - # specifiy the binning, passive layers, entry layers - assume defaults - # add to ToolSvc - result.addPublicTool(InDetCylinderVolumeCreator) - - # the tracking geometry builder - InDet__RobustTrackingGeometryBuilder=CompFactory.InDet.RobustTrackingGeometryBuilder - return InDet__RobustTrackingGeometryBuilder(namePrefix+name, - BeamPipeBuilder = beamPipeBuilder, - LayerBuilders = layerbuilders, - LayerBinningType = binnings, - ColorCodes = colors, + TRT_LayerBuilder.ModelLayersOnly = False + result.setPrivateTools(TRT_LayerBuilder) + return result + + +def InDetTrackingGeometryBuilderCfg(name, flags, envelopeDefinitionSvc, namePrefix='', setLayerAssociation = True): + # Based on https://gitlab.cern.ch/atlas/athena/blob/master/InnerDetector/InDetDetDescr/InDetTrackingGeometry/python/ConfiguredInDetTrackingGeometryBuilder.py + # A lot of comments below are to help people understand differences from the above, in case we need to revert some simplifications I made + # i.e. this is far from complete, but is better than what was there before. + + result = ComponentAccumulator() + + # beampipe + beamPipeBuilder = result.popToolsAndMerge(BeamPipeBuilderCfg(flags, namePrefix)) + result.addPublicTool(beamPipeBuilder) + + layerbuilders = [] # Used to set a PublicToolHandleArray + binnings = [] + colors = [] + + if flags.Detector.GeometryPixel: + PixelLayerBuilder = result.popToolsAndMerge(PixelLayerBuilderCfg(flags, namePrefix, setLayerAssociation)) + # the binning type of the layers + PixelLayerBinning = 2 + # add it to tool service + result.addPublicTool(PixelLayerBuilder) + # put them to the caches + layerbuilders += [ PixelLayerBuilder ] + binnings += [ PixelLayerBinning ] + colors += [ 3 ] + + if flags.Detector.GeometrySCT: + SCT_LayerBuilder = result.popToolsAndMerge(SCT_LayerBuilderCfg(flags, namePrefix, setLayerAssociation)) + # the binning type of the layer + SCT_LayerBinning = 2 + # add it to tool service + result.addPublicTool(SCT_LayerBuilder) + # put them to the caches + layerbuilders += [ SCT_LayerBuilder ] + binnings += [ SCT_LayerBinning ] + colors += [ 4 ] + + if flags.Detector.GeometryTRT: + buildTrtStrawLayers = flags.Beam.Type=='cosmics' + TRT_LayerBuilder = result.popToolsAndMerge(TRT_LayerBuilderCfg(flags, namePrefix, buildTrtStrawLayers)) + # set the binning from bi-aequidistant to arbitrary for complex TRT volumes + TRT_LayerBinning = 1 + if buildTrtStrawLayers or (flags.Common.ProductionStep in [ProductionStep.Simulation, ProductionStep.FastChain] and flags.Sim.ISF.Simulator not in ["ATLFASTIIMT"]): + TRT_LayerBinning = 2 + # add it to tool service + result.addPublicTool(TRT_LayerBuilder) + # put them to the caches + layerbuilders += [ TRT_LayerBuilder ] + binnings += [ TRT_LayerBinning ] + colors += [ 5 ] + + # helpers for the InDetTrackingGeometry Builder : layer array creator + Trk__LayerArrayCreator = CompFactory.Trk.LayerArrayCreator + InDetLayerArrayCreator = Trk__LayerArrayCreator(name = 'InDetLayerArrayCreator') + InDetLayerArrayCreator.EmptyLayerMode = 2 # deletes empty material layers from arrays + # add to ToolSvc + result.addPublicTool(InDetLayerArrayCreator) + + # helpers for the InDetTrackingGeometry Builder : volume array creator + InDetTrackingVolumeArrayCreator = CompFactory.Trk.TrackingVolumeArrayCreator(name = 'InDetTrackingVolumeArrayCreator') + # add to ToolSvc + result.addPublicTool(InDetTrackingVolumeArrayCreator) + + # helpers for the InDetTrackingGeometry Builder : tracking volume helper for gluing + Trk__TrackingVolumeHelper = CompFactory.Trk.TrackingVolumeHelper + InDetTrackingVolumeHelper = Trk__TrackingVolumeHelper(name ='InDetTrackingVolumeHelper') + # the material bins - assume defaults + # add to ToolSvc + result.addPublicTool(InDetTrackingVolumeHelper) + + # helpers for the InDetTrackingGeometry Builder : cylinder volume creator + Trk__CylinderVolumeCreator = CompFactory.Trk.CylinderVolumeCreator + InDetCylinderVolumeCreator = Trk__CylinderVolumeCreator(name = 'InDetCylinderVolumeCreator') + # give it the layer array creator + InDetCylinderVolumeCreator.LayerArrayCreator = InDetLayerArrayCreator + # specifiy the binning, passive layers, entry layers - assume defaults + # add to ToolSvc + result.addPublicTool(InDetCylinderVolumeCreator) + + # the tracking geometry builder + InDet__RobustTrackingGeometryBuilder=CompFactory.InDet.RobustTrackingGeometryBuilder + result.setPrivateTools(InDet__RobustTrackingGeometryBuilder(namePrefix+name, + BeamPipeBuilder = beamPipeBuilder, + LayerBuilders = layerbuilders, + LayerBinningType = binnings, + ColorCodes = colors, EnvelopeDefinitionSvc = envelopeDefinitionSvc, VolumeEnclosureDiscPositions = [ 3000., 3450. ], - TrackingVolumeCreator = InDetCylinderVolumeCreator, - LayerArrayCreator = InDetLayerArrayCreator, - ReplaceAllJointBoundaries=True, - VolumeEnclosureCylinderRadii=[], - BuildBoundaryLayers=True, - ExitVolumeName='InDet::Containers::InnerDetector') + TrackingVolumeCreator = InDetCylinderVolumeCreator, + LayerArrayCreator = InDetLayerArrayCreator, + ReplaceAllJointBoundaries = True, + VolumeEnclosureCylinderRadii = [], + BuildBoundaryLayers = True, + ExitVolumeName = 'InDet::Containers::InnerDetector') # FIXME - not sure what to do about the following: # BuildBoundaryLayers = TrkDetFlags.InDetBuildMaterialBoundaries(), # ReplaceAllJointBoundaries = TrkDetFlags.InDetBuildJointBoundaries(), # OutputLevel = TrkDetFlags.InDetBuildingOutputLevel(), # ExitVolumeName = TrkDetFlags.InDetContainerName(), - + # Probably they should just be dropped, but I leave this comment for the moment so reviewers can have a think as well. - + # Barrel Entry layers (in old config) etc were removed in 323990adfce581a635ae1809fd2ecc6a093a704c (!) + ) + return result def _getITkTrackingGeometryBuilder(name, flags,result, envelopeDefinitionSvc, namePrefix='', setLayerAssociation = True, buildTrtStrawLayers = False): - # Based on https://gitlab.cern.ch/atlas/athena/blob/master/InnerDetector/InDetDetDescr/InDetTrackingGeometry/python/ConfiguredInDetTrackingGeometryBuilder.py - # A lot of comments below are to help people understand differences from the above, in case we need to revert some simplifications I made - # i.e. this is far from complete, but is better than what was there before. - - # beampipe - from BeamPipeGeoModel.BeamPipeGMConfig import BeamPipeGeometryCfg - result.merge(BeamPipeGeometryCfg(flags)) - InDet__BeamPipeBuilder=CompFactory.InDet.BeamPipeBuilder - beamPipeBuilder = InDet__BeamPipeBuilder(name=namePrefix+'BeamPipeBuilder') - beamPipeBuilder.BeamPipeMaterialBinsZ = flags.ITk.trackingGeometry.beampipeMatZbins - - result.addPublicTool(beamPipeBuilder) - BeamPipeBinning = 2 - - Trk__LayerProvider=CompFactory.Trk.LayerProvider - beamPipeProvider = Trk__LayerProvider(name=namePrefix+'BeamPipeProvider') - beamPipeProvider.LayerBuilder = beamPipeBuilder - result.addPublicTool(beamPipeProvider) - - layerProviders = [beamPipeProvider] - binnings_barrel = [BeamPipeBinning] - binnings_endcap = [BeamPipeBinning] - colors = [2] - - # Pixel - if flags.Detector.GeometryITkPixel: - from PixelGeoModelXml.ITkPixelGeoModelConfig import ITkPixelReadoutGeometryCfg - result.merge(ITkPixelReadoutGeometryCfg(flags)) + # Based on https://gitlab.cern.ch/atlas/athena/blob/master/InnerDetector/InDetDetDescr/InDetTrackingGeometry/python/ConfiguredInDetTrackingGeometryBuilder.py + # A lot of comments below are to help people understand differences from the above, in case we need to revert some simplifications I made + # i.e. this is far from complete, but is better than what was there before. + + # beampipe + from BeamPipeGeoModel.BeamPipeGMConfig import BeamPipeGeometryCfg + result.merge(BeamPipeGeometryCfg(flags)) + InDet__BeamPipeBuilder=CompFactory.InDet.BeamPipeBuilder + beamPipeBuilder = InDet__BeamPipeBuilder(name=namePrefix+'BeamPipeBuilder') + beamPipeBuilder.BeamPipeMaterialBinsZ = flags.ITk.trackingGeometry.beampipeMatZbins + + result.addPublicTool(beamPipeBuilder) + BeamPipeBinning = 2 + + Trk__LayerProvider=CompFactory.Trk.LayerProvider + beamPipeProvider = Trk__LayerProvider(name=namePrefix+'BeamPipeProvider') + beamPipeProvider.LayerBuilder = beamPipeBuilder + result.addPublicTool(beamPipeProvider) + + layerProviders = [beamPipeProvider] + binnings_barrel = [BeamPipeBinning] + binnings_endcap = [BeamPipeBinning] + colors = [2] + + # Pixel + if flags.Detector.GeometryITkPixel: + from PixelGeoModelXml.ITkPixelGeoModelConfig import ITkPixelReadoutGeometryCfg + result.merge(ITkPixelReadoutGeometryCfg(flags)) + + InDet__SiLayerBuilder=CompFactory.InDet.SiLayerBuilder + PixelLayerBuilderInner = InDet__SiLayerBuilder(name=namePrefix+'PixelLayerBuilderInner') + PixelLayerBuilderInner.PixelCase = True + PixelLayerBuilderInner.Identification = 'ITkPixelInner' + PixelLayerBuilderInner.SiDetManagerLocation = 'ITkPixel' + PixelLayerBuilderInner.LayerIndicesBarrel = [0,1] + PixelLayerBuilderInner.LayerIndicesEndcap = [0,1,2] + PixelLayerBuilderInner.UseRingLayout = True + # Pixel barrel specifications + PixelLayerBuilderInner.BarrelLayerBinsZ = flags.ITk.trackingGeometry.pixelBarrelMatZbins + PixelLayerBuilderInner.BarrelLayerBinsPhi = flags.ITk.trackingGeometry.pixelBarrelMatPhiBins + PixelLayerBuilderInner.EndcapLayerBinsR = flags.ITk.trackingGeometry.pixelEndcapMatRbins + PixelLayerBuilderInner.EndcapLayerBinsPhi = flags.ITk.trackingGeometry.pixelEndcapMatPhiBins + + # set the layer association + PixelLayerBuilderInner.SetLayerAssociation = setLayerAssociation + + # the binning type of the layers a + PixelLayerBinning = 2 + # add it to tool service + result.addPublicTool(PixelLayerBuilderInner) + + pixelProviderInner = Trk__LayerProvider(name=namePrefix+'PixelProviderInner') + pixelProviderInner.LayerBuilder = PixelLayerBuilderInner + result.addPublicTool(pixelProviderInner) + # put them to the caches + layerProviders += [pixelProviderInner] + binnings_barrel += [ PixelLayerBinning ] + binnings_endcap += [ PixelLayerBinning ] + colors += [ 3 ] + + PixelLayerBuilderOuter = InDet__SiLayerBuilder(name=namePrefix+'PixelLayerBuilderOuter') + PixelLayerBuilderOuter.PixelCase = True + PixelLayerBuilderOuter.Identification = 'ITkPixelOuter' + PixelLayerBuilderOuter.SiDetManagerLocation = 'ITkPixel' + PixelLayerBuilderOuter.LayerIndicesBarrel = [2,3,4] + PixelLayerBuilderOuter.LayerIndicesEndcap = [3,4,5,6,7,8] + PixelLayerBuilderOuter.UseRingLayout=True + PixelLayerBuilderOuter.BarrelLayerBinsZ = flags.ITk.trackingGeometry.pixelBarrelMatZbins + PixelLayerBuilderOuter.BarrelLayerBinsPhi = flags.ITk.trackingGeometry.pixelBarrelMatPhiBins + PixelLayerBuilderOuter.EndcapLayerBinsR = flags.ITk.trackingGeometry.pixelEndcapMatRbins + PixelLayerBuilderOuter.EndcapLayerBinsPhi = flags.ITk.trackingGeometry.pixelEndcapMatPhiBins + + # set the layer association + PixelLayerBuilderOuter.SetLayerAssociation = setLayerAssociation + + # the binning type of the layers a + PixelLayerBinning = 2 + # add it to tool service + result.addPublicTool(PixelLayerBuilderOuter) + + pixelProviderOuter = Trk__LayerProvider(name=namePrefix+'PixelProviderOuter') + pixelProviderOuter.LayerBuilder = PixelLayerBuilderOuter + result.addPublicTool(pixelProviderOuter) + # put them to the caches + layerProviders += [pixelProviderOuter] + binnings_barrel += [ PixelLayerBinning ] + binnings_endcap += [ PixelLayerBinning ] + colors += [ 3 ] + + if flags.Detector.GeometryITkStrip: + from StripGeoModelXml.ITkStripGeoModelConfig import ITkStripReadoutGeometryCfg + result.merge(ITkStripReadoutGeometryCfg(flags)) + + # SCT building + InDet__SiLayerBuilder=CompFactory.InDet.SiLayerBuilder + SCT_LayerBuilder = InDet__SiLayerBuilder(name=namePrefix+'SCT_LayerBuilder') + SCT_LayerBuilder.PixelCase = False + SCT_LayerBuilder.Identification = 'ITkStrip' + SCT_LayerBuilder.SiDetManagerLocation = 'ITkStrip' + SCT_LayerBuilder.AddMoreSurfaces = True + SCT_LayerBuilder.BarrelLayerBinsZ = flags.ITk.trackingGeometry.stripBarrelMatZbins + SCT_LayerBuilder.BarrelLayerBinsPhi = flags.ITk.trackingGeometry.stripBarrelMatPhiBins + SCT_LayerBuilder.EndcapLayerBinsR = flags.ITk.trackingGeometry.stripEndcapMatRbins + SCT_LayerBuilder.EndcapLayerBinsPhi = flags.ITk.trackingGeometry.stripEndcapMatPhiBins + # set the layer association + SCT_LayerBuilder.SetLayerAssociation = setLayerAssociation + # the binning type of the layer + SCT_LayerBinning = 2 + # SCT -> ToolSvc + result.addPublicTool(SCT_LayerBuilder) + + stripProvider = Trk__LayerProvider(name=namePrefix+'StripProvider') + stripProvider.LayerBuilder = SCT_LayerBuilder + result.addPublicTool(stripProvider) + + # put them to the caches + layerProviders += [stripProvider] + binnings_barrel += [ SCT_LayerBinning ] + binnings_endcap += [ SCT_LayerBinning ] + colors += [ 4 ] + + # helpers for the InDetTrackingGeometry Builder : layer array creator + Trk__LayerArrayCreator=CompFactory.Trk.LayerArrayCreator + InDetLayerArrayCreator = Trk__LayerArrayCreator(name = 'InDetLayerArrayCreator') + InDetLayerArrayCreator.EmptyLayerMode = 2 # deletes empty material layers from arrays + # add to ToolSvc + result.addPublicTool(InDetLayerArrayCreator) + + # helpers for the InDetTrackingGeometry Builder : volume array creator + Trk__TrackingVolumeArrayCreator= CompFactory.Trk.TrackingVolumeArrayCreator + InDetTrackingVolumeArrayCreator = Trk__TrackingVolumeArrayCreator(name = 'InDetTrackingVolumeArrayCreator') + # add to ToolSvc + result.addPublicTool(InDetTrackingVolumeArrayCreator) + + # helpers for the InDetTrackingGeometry Builder : tracking volume helper for gluing + Trk__TrackingVolumeHelper=CompFactory.Trk.TrackingVolumeHelper + InDetTrackingVolumeHelper = Trk__TrackingVolumeHelper(name ='InDetTrackingVolumeHelper') + InDetTrackingVolumeHelper.BarrelLayerBinsZ = flags.ITk.trackingGeometry.passiveBarrelMatZbins + InDetTrackingVolumeHelper.BarrelLayerBinsPhi = flags.ITk.trackingGeometry.passiveBarrelMatPhiBins + InDetTrackingVolumeHelper.EndcapLayerBinsR = flags.ITk.trackingGeometry.passiveEndcapMatRbins + InDetTrackingVolumeHelper.EndcapLayerBinsPhi = flags.ITk.trackingGeometry.passiveEndcapMatPhiBins + + # the material bins - assume defaults + # add to ToolSvc + result.addPublicTool(InDetTrackingVolumeHelper) + + # helpers for the InDetTrackingGeometry Builder : cylinder volume creator + Trk__CylinderVolumeCreator=CompFactory.Trk.CylinderVolumeCreator + InDetCylinderVolumeCreator = Trk__CylinderVolumeCreator(name = 'InDetCylinderVolumeCreator') + # give it the layer array creator + InDetCylinderVolumeCreator.LayerArrayCreator = InDetLayerArrayCreator + InDetCylinderVolumeCreator.TrackingVolumeArrayCreator = InDetTrackingVolumeArrayCreator + InDetCylinderVolumeCreator.TrackingVolumeHelper = InDetTrackingVolumeHelper + InDetCylinderVolumeCreator.PassiveLayerThickness = 1. ## mm + InDetCylinderVolumeCreator.PassiveLayerBinsRZ = flags.ITk.trackingGeometry.passiveBarrelMatZbins + InDetCylinderVolumeCreator.PassiveLayerBinsPhi = flags.ITk.trackingGeometry.passiveBarrelMatPhiBins + + # specifiy the binning, passive layers, entry layers - assume defaults + # add to ToolSvc + result.addPublicTool(InDetCylinderVolumeCreator) + + # the tracking geometry builder + InDet__StagedTrackingGeometryBuilder=CompFactory.InDet.StagedTrackingGeometryBuilder + return InDet__StagedTrackingGeometryBuilder(namePrefix+name, + LayerBuilders = layerProviders, + LayerBinningTypeCenter = binnings_barrel, + LayerBinningTypeEndcap = binnings_endcap, + ColorCodes = colors, + EnvelopeDefinitionSvc = envelopeDefinitionSvc, + TrackingVolumeCreator = InDetCylinderVolumeCreator, + LayerArrayCreator = InDetLayerArrayCreator, + CheckForRingLayout = True, + MinimalRadialGapForVolumeSplit = flags.ITk.trackingGeometry.minimalRadialGapForVolumeSplit, + ReplaceAllJointBoundaries = True, + BuildBoundaryLayers=True, + ExitVolumeName='InDet::Containers::InnerDetector') - InDet__SiLayerBuilder=CompFactory.InDet.SiLayerBuilder - PixelLayerBuilderInner = InDet__SiLayerBuilder(name=namePrefix+'PixelLayerBuilderInner') - PixelLayerBuilderInner.PixelCase = True - PixelLayerBuilderInner.Identification = 'ITkPixelInner' - PixelLayerBuilderInner.SiDetManagerLocation = 'ITkPixel' - PixelLayerBuilderInner.LayerIndicesBarrel = [0,1] - PixelLayerBuilderInner.LayerIndicesEndcap = [0,1,2] - PixelLayerBuilderInner.UseRingLayout = True - # Pixel barrel specifications - PixelLayerBuilderInner.BarrelLayerBinsZ = flags.ITk.trackingGeometry.pixelBarrelMatZbins - PixelLayerBuilderInner.BarrelLayerBinsPhi = flags.ITk.trackingGeometry.pixelBarrelMatPhiBins - PixelLayerBuilderInner.EndcapLayerBinsR = flags.ITk.trackingGeometry.pixelEndcapMatRbins - PixelLayerBuilderInner.EndcapLayerBinsPhi = flags.ITk.trackingGeometry.pixelEndcapMatPhiBins - - # set the layer association - PixelLayerBuilderInner.SetLayerAssociation = setLayerAssociation - - # the binning type of the layers a - PixelLayerBinning = 2 - # add it to tool service - result.addPublicTool(PixelLayerBuilderInner) - - pixelProviderInner = Trk__LayerProvider(name=namePrefix+'PixelProviderInner') - pixelProviderInner.LayerBuilder = PixelLayerBuilderInner - result.addPublicTool(pixelProviderInner) - # put them to the caches - layerProviders += [pixelProviderInner] - binnings_barrel += [ PixelLayerBinning ] - binnings_endcap += [ PixelLayerBinning ] - colors += [ 3 ] - - PixelLayerBuilderOuter = InDet__SiLayerBuilder(name=namePrefix+'PixelLayerBuilderOuter') - PixelLayerBuilderOuter.PixelCase = True - PixelLayerBuilderOuter.Identification = 'ITkPixelOuter' - PixelLayerBuilderOuter.SiDetManagerLocation = 'ITkPixel' - PixelLayerBuilderOuter.LayerIndicesBarrel = [2,3,4] - PixelLayerBuilderOuter.LayerIndicesEndcap = [3,4,5,6,7,8] - PixelLayerBuilderOuter.UseRingLayout=True - PixelLayerBuilderOuter.BarrelLayerBinsZ = flags.ITk.trackingGeometry.pixelBarrelMatZbins - PixelLayerBuilderOuter.BarrelLayerBinsPhi = flags.ITk.trackingGeometry.pixelBarrelMatPhiBins - PixelLayerBuilderOuter.EndcapLayerBinsR = flags.ITk.trackingGeometry.pixelEndcapMatRbins - PixelLayerBuilderOuter.EndcapLayerBinsPhi = flags.ITk.trackingGeometry.pixelEndcapMatPhiBins - - # set the layer association - PixelLayerBuilderOuter.SetLayerAssociation = setLayerAssociation - - # the binning type of the layers a - PixelLayerBinning = 2 - # add it to tool service - result.addPublicTool(PixelLayerBuilderOuter) - - pixelProviderOuter = Trk__LayerProvider(name=namePrefix+'PixelProviderOuter') - pixelProviderOuter.LayerBuilder = PixelLayerBuilderOuter - result.addPublicTool(pixelProviderOuter) - # put them to the caches - layerProviders += [pixelProviderOuter] - binnings_barrel += [ PixelLayerBinning ] - binnings_endcap += [ PixelLayerBinning ] - colors += [ 3 ] - - if flags.Detector.GeometryITkStrip: - from StripGeoModelXml.ITkStripGeoModelConfig import ITkStripReadoutGeometryCfg - result.merge(ITkStripReadoutGeometryCfg(flags)) - # SCT building - InDet__SiLayerBuilder=CompFactory.InDet.SiLayerBuilder - SCT_LayerBuilder = InDet__SiLayerBuilder(name=namePrefix+'SCT_LayerBuilder') - SCT_LayerBuilder.PixelCase = False - SCT_LayerBuilder.Identification = 'ITkStrip' - SCT_LayerBuilder.SiDetManagerLocation = 'ITkStrip' - SCT_LayerBuilder.AddMoreSurfaces = True - SCT_LayerBuilder.BarrelLayerBinsZ = flags.ITk.trackingGeometry.stripBarrelMatZbins - SCT_LayerBuilder.BarrelLayerBinsPhi = flags.ITk.trackingGeometry.stripBarrelMatPhiBins - SCT_LayerBuilder.EndcapLayerBinsR = flags.ITk.trackingGeometry.stripEndcapMatRbins - SCT_LayerBuilder.EndcapLayerBinsPhi = flags.ITk.trackingGeometry.stripEndcapMatPhiBins - # set the layer association - SCT_LayerBuilder.SetLayerAssociation = setLayerAssociation - # the binning type of the layer - SCT_LayerBinning = 2 - # SCT -> ToolSvc - result.addPublicTool(SCT_LayerBuilder) - - stripProvider = Trk__LayerProvider(name=namePrefix+'StripProvider') - stripProvider.LayerBuilder = SCT_LayerBuilder - result.addPublicTool(stripProvider) - - # put them to the caches - layerProviders += [stripProvider] - binnings_barrel += [ SCT_LayerBinning ] - binnings_endcap += [ SCT_LayerBinning ] - colors += [ 4 ] - - # helpers for the InDetTrackingGeometry Builder : layer array creator - Trk__LayerArrayCreator=CompFactory.Trk.LayerArrayCreator - InDetLayerArrayCreator = Trk__LayerArrayCreator(name = 'InDetLayerArrayCreator') - InDetLayerArrayCreator.EmptyLayerMode = 2 # deletes empty material layers from arrays - # add to ToolSvc - result.addPublicTool(InDetLayerArrayCreator) - - # helpers for the InDetTrackingGeometry Builder : volume array creator - Trk__TrackingVolumeArrayCreator= CompFactory.Trk.TrackingVolumeArrayCreator - InDetTrackingVolumeArrayCreator = Trk__TrackingVolumeArrayCreator(name = 'InDetTrackingVolumeArrayCreator') - # add to ToolSvc - result.addPublicTool(InDetTrackingVolumeArrayCreator) - - # helpers for the InDetTrackingGeometry Builder : tracking volume helper for gluing - Trk__TrackingVolumeHelper=CompFactory.Trk.TrackingVolumeHelper - InDetTrackingVolumeHelper = Trk__TrackingVolumeHelper(name ='InDetTrackingVolumeHelper') - InDetTrackingVolumeHelper.BarrelLayerBinsZ = flags.ITk.trackingGeometry.passiveBarrelMatZbins - InDetTrackingVolumeHelper.BarrelLayerBinsPhi = flags.ITk.trackingGeometry.passiveBarrelMatPhiBins - InDetTrackingVolumeHelper.EndcapLayerBinsR = flags.ITk.trackingGeometry.passiveEndcapMatRbins - InDetTrackingVolumeHelper.EndcapLayerBinsPhi = flags.ITk.trackingGeometry.passiveEndcapMatPhiBins - - # the material bins - assume defaults - # add to ToolSvc - result.addPublicTool(InDetTrackingVolumeHelper) - - # helpers for the InDetTrackingGeometry Builder : cylinder volume creator - Trk__CylinderVolumeCreator=CompFactory.Trk.CylinderVolumeCreator - InDetCylinderVolumeCreator = Trk__CylinderVolumeCreator(name = 'InDetCylinderVolumeCreator') - # give it the layer array creator - InDetCylinderVolumeCreator.LayerArrayCreator = InDetLayerArrayCreator - InDetCylinderVolumeCreator.TrackingVolumeArrayCreator = InDetTrackingVolumeArrayCreator - InDetCylinderVolumeCreator.TrackingVolumeHelper = InDetTrackingVolumeHelper - InDetCylinderVolumeCreator.PassiveLayerThickness = 1. ## mm - InDetCylinderVolumeCreator.PassiveLayerBinsRZ = flags.ITk.trackingGeometry.passiveBarrelMatZbins - InDetCylinderVolumeCreator.PassiveLayerBinsPhi = flags.ITk.trackingGeometry.passiveBarrelMatPhiBins - - # specifiy the binning, passive layers, entry layers - assume defaults - # add to ToolSvc - result.addPublicTool(InDetCylinderVolumeCreator) - - # the tracking geometry builder - InDet__StagedTrackingGeometryBuilder=CompFactory.InDet.StagedTrackingGeometryBuilder - return InDet__StagedTrackingGeometryBuilder(namePrefix+name, - LayerBuilders = layerProviders, - LayerBinningTypeCenter = binnings_barrel, - LayerBinningTypeEndcap = binnings_endcap, - ColorCodes = colors, - EnvelopeDefinitionSvc = envelopeDefinitionSvc, - TrackingVolumeCreator = InDetCylinderVolumeCreator, - LayerArrayCreator = InDetLayerArrayCreator, - CheckForRingLayout = True, - MinimalRadialGapForVolumeSplit = flags.ITk.trackingGeometry.minimalRadialGapForVolumeSplit, - ReplaceAllJointBoundaries = True, - BuildBoundaryLayers=True, - ExitVolumeName='InDet::Containers::InnerDetector') - # Replaces https://gitlab.cern.ch/atlas/athena/blob/master/Calorimeter/CaloTrackingGeometry/python/ConfiguredCaloTrackingGeometryBuilder.py -def _getCaloTrackingGeometryBuilder(name, flags,result, envelopeDefinitionSvc, trackingVolumeHelper, namePrefix=''): - # The following replaces LArCalorimeter/LArTrackingGeometry/python/ConfiguredLArVolumeBuilder.py - from LArGeoAlgsNV.LArGMConfig import LArGMCfg - result.merge(LArGMCfg(flags)) - LAr__LArVolumeBuilder=CompFactory.LAr.LArVolumeBuilder - lArVolumeBuilder = LAr__LArVolumeBuilder(name="LArVolumeBuilderCond", TrackingVolumeHelper = trackingVolumeHelper,) - result.addPublicTool(lArVolumeBuilder) - - # The following replaces TileCalorimeter/TileTrackingGeometry/python/ConfiguredTileVolumeBuilder.py - from TileGeoModel.TileGMConfig import TileGMCfg - result.merge(TileGMCfg(flags)) - Tile__TileVolumeBuilder=CompFactory.Tile.TileVolumeBuilder - tileVolumeBuilder = Tile__TileVolumeBuilder(name="TileVolumeBuilderCond", TrackingVolumeHelper = trackingVolumeHelper, ) - result.addPublicTool(tileVolumeBuilder) - - Calo__CaloTrackingGeometryBuilder=CompFactory.Calo.CaloTrackingGeometryBuilder - return Calo__CaloTrackingGeometryBuilder(namePrefix+name, LArVolumeBuilder = lArVolumeBuilder, - TileVolumeBuilder = tileVolumeBuilder, - TrackingVolumeHelper = trackingVolumeHelper, - EnvelopeDefinitionSvc = envelopeDefinitionSvc, - EntryVolumeName = "InDet::Containers::EntryVolume", - ExitVolumeName = "Calo::Container", - GapLayerEnvelope=5.0 - ) +def CaloTrackingGeometryBuilderCfg(name, flags, envelopeDefinitionSvc, namePrefix=''): + result = ComponentAccumulator() + # The following replaces LArCalorimeter/LArTrackingGeometry/python/ConfiguredLArVolumeBuilder.py + from LArGeoAlgsNV.LArGMConfig import LArGMCfg + result.merge(LArGMCfg(flags)) + LAr__LArVolumeBuilder=CompFactory.LAr.LArVolumeBuilder + lArVolumeBuilder = LAr__LArVolumeBuilder(name="LArVolumeBuilder", TrackingVolumeHelper = trackingVolumeHelper,) + result.addPublicTool(lArVolumeBuilder) + + # The following replaces TileCalorimeter/TileTrackingGeometry/python/ConfiguredTileVolumeBuilder.py + from TileGeoModel.TileGMConfig import TileGMCfg + result.merge(TileGMCfg(flags)) + Tile__TileVolumeBuilder=CompFactory.Tile.TileVolumeBuilder + tileVolumeBuilder = Tile__TileVolumeBuilder(name="TileVolumeBuilder", TrackingVolumeHelper = trackingVolumeHelper, ) + result.addPublicTool(tileVolumeBuilder) + + Trk__TrackingVolumeHelper = CompFactory.Trk.TrackingVolumeHelper + trackingVolumeHelper = Trk__TrackingVolumeHelper(name='TrackingVolumeHelper') + result.addPublicTool(trackingVolumeHelper) + + Trk__CylinderVolumeCreator = CompFactory.Trk.CylinderVolumeCreator + caloVolumeCreator = Trk__CylinderVolumeCreator("CaloVolumeCreator") + result.addPublicTool(caloVolumeCreator) + + Calo__CaloTrackingGeometryBuilder=CompFactory.Calo.CaloTrackingGeometryBuilder + result.setPrivateTools(Calo__CaloTrackingGeometryBuilder(namePrefix+name, LArVolumeBuilder = lArVolumeBuilder, + TileVolumeBuilder = tileVolumeBuilder, + TrackingVolumeHelper = trackingVolumeHelper, + EnvelopeDefinitionSvc = envelopeDefinitionSvc, + EntryVolumeName = "InDet::Containers::EntryVolume", + ExitVolumeName = "Calo::Container", + GapLayerEnvelope=5.0, + TrackingVolumeCreator = caloVolumeCreator + )) + return result + + +def MuonTrackingGeometryBuilderCfg(flags, envelopeDefinitionSvc): + result = ComponentAccumulator() + # Copied from from MuonTrackingGeometry.ConfiguredMuonTrackingGeometry import MuonTrackingGeometryBuilder + # Add the muon geometry model to the CA + from MuonConfig.MuonGeometryConfig import MuonGeoModelCfg + result.merge(MuonGeoModelCfg(flags)) + Muon__MuonStationTypeBuilder = CompFactory.Muon.MuonStationTypeBuilder + muonStationTypeBuilder= Muon__MuonStationTypeBuilder(name = 'MuonStationTypeBuilder') + + Muon__MuonStationBuilder=CompFactory.Muon.MuonStationBuilder + muonStationBuilder= Muon__MuonStationBuilder(name = 'MuonStationBuilder') + muonStationBuilder.StationTypeBuilder = muonStationTypeBuilder + + muonInertMaterialBuilder= CompFactory.Muon.MuonInertMaterialBuilder(name = 'MuonInertMaterialBuilder') + + Muon__MuonTrackingGeometryBuilder=CompFactory.Muon.MuonTrackingGeometryBuilder + muonTrackingGeometryBuilder= Muon__MuonTrackingGeometryBuilder(name = 'MuonTrackingGeometryBuilder', + EnvelopeDefinitionSvc=envelopeDefinitionSvc, + MuonStationBuilder = muonStationBuilder, + InertMaterialBuilder=muonInertMaterialBuilder + ) + # import pdb ; pdb.set_trace() + muonTrackingGeometryBuilder.EntryVolumeName = 'MuonSpectrometerEntrance' + muonTrackingGeometryBuilder.ExitVolumeName = 'Muon::Containers::MuonSystem' + result.setPrivateTools(muonTrackingGeometryBuilder) + return result + # Originally this function would use was TrkDetFlags.MaterialSource() and TrkDetFlags.MaterialValidation(). For new configuration, (temporarily?) pass as parameters. # https://gitlab.cern.ch/atlas/athena/blob/master/Tracking/TrkDetDescr/TrkDetDescrSvc/python/AtlasTrackingGeometrySvc.py#L112 @@ -426,104 +497,68 @@ def TrackingGeometrySvcCfg( flags , name = 'AtlasTrackingGeometrySvc', doMateria """ result = ComponentAccumulator() atlas_tracking_geometry_name = 'AtlasTrackingGeometry' - atlas_geometry_builder = CompFactory.Trk.GeometryBuilder(name = 'AtlasGeometryBuilder', WorldDimension=[], WorldMaterialProperties=[], - TrackingVolumeArrayCreator=CompFactory.Trk.TrackingVolumeArrayCreator(name="TrackingVolumeArrayCreator"), + atlas_geometry_builder = CompFactory.Trk.GeometryBuilder(name = 'AtlasGeometryBuilder', WorldDimension=[], WorldMaterialProperties=[], + TrackingVolumeArrayCreator=CompFactory.Trk.TrackingVolumeArrayCreator(name="TrackingVolumeArrayCreator"), TrackingVolumeHelper = CompFactory.Trk.TrackingVolumeHelper(name="TrackingVolumeHelper") ) - - envelopSvcCfg= EnvelopeDefSvcCfg(flags) - atlas_env_def_service=envelopSvcCfg.getPrimary() - result.merge(envelopSvcCfg) + + atlas_env_def_service = result.getPrimaryAndMerge(EnvelopeDefSvcCfg(flags)) # Depending on the job configuration, setup the various detector builders, and add to atlas_geometry_builder if flags.Detector.GeometryID: - # TODO Not sure how to handle TrkDetFlags, specifically ISF_FatrasCustomGeometry, XMLFastCustomGeometry - # So, here we only setup the default InDet geometry builder! - inDetTrackingGeometryBuilder = _getInDetTrackingGeometryBuilder(name ='InDetTrackingGeometryBuilder', flags=flags, result=result, envelopeDefinitionSvc=atlas_env_def_service, - buildTrtStrawLayers=(flags.Beam.Type=='cosmics')) - - atlas_geometry_builder.InDetTrackingGeometryBuilder = inDetTrackingGeometryBuilder - - elif flags.Detector.GeometryITk: - inDetTrackingGeometryBuilder = _getITkTrackingGeometryBuilder(name ='InDetTrackingGeometryBuilder', flags=flags, result=result, - envelopeDefinitionSvc=atlas_env_def_service) - atlas_geometry_builder.InDetTrackingGeometryBuilder = inDetTrackingGeometryBuilder - - if flags.Detector.GeometryCalo: - Trk__CylinderVolumeCreator=CompFactory.Trk.CylinderVolumeCreator - caloVolumeCreator = Trk__CylinderVolumeCreator("CaloVolumeCreator") - result.addPublicTool(caloVolumeCreator) + # TODO Not sure how to handle TrkDetFlags, specifically ISF_FatrasCustomGeometry, XMLFastCustomGeometry + # So, here we only setup the default InDet geometry builder! + atlas_geometry_builder.InDetTrackingGeometryBuilder = result.popToolsAndMerge(InDetTrackingGeometryBuilderCfg(name = 'InDetTrackingGeometryBuilder', + flags = flags, + envelopeDefinitionSvc = atlas_env_def_service)) - Trk__TrackingVolumeHelper=CompFactory.Trk.TrackingVolumeHelper - trackingVolumeHelper = Trk__TrackingVolumeHelper(name='TrackingVolumeHelper') - result.addPublicTool(trackingVolumeHelper) + elif flags.Detector.GeometryITk: + inDetTrackingGeometryBuilder = _getITkTrackingGeometryBuilder(name ='InDetTrackingGeometryBuilder', flags=flags, result=result, + envelopeDefinitionSvc=atlas_env_def_service) + atlas_geometry_builder.InDetTrackingGeometryBuilder = inDetTrackingGeometryBuilder - caloTrackingGeometryBuilder = _getCaloTrackingGeometryBuilder(name ='CaloTrackingGeometryBuilder', flags=flags, - result=result, envelopeDefinitionSvc=atlas_env_def_service, trackingVolumeHelper=trackingVolumeHelper) - caloTrackingGeometryBuilder.TrackingVolumeCreator=caloVolumeCreator - atlas_geometry_builder.CaloTrackingGeometryBuilder = caloTrackingGeometryBuilder + if flags.Detector.GeometryCalo: + atlas_geometry_builder.CaloTrackingGeometryBuilder = result.popToolsAndMerge(CaloTrackingGeometryBuilderCfg(name = 'CaloTrackingGeometryBuilder', + flags = flags, + envelopeDefinitionSvc = atlas_env_def_service)) if flags.Detector.GeometryMuon: - # Copied from from MuonTrackingGeometry.ConfiguredMuonTrackingGeometry import MuonTrackingGeometryBuilder - # Add the muon geometry model to the CA - from MuonConfig.MuonGeometryConfig import MuonGeoModelCfg - result.merge(MuonGeoModelCfg(flags)) - Muon__MuonStationTypeBuilder=CompFactory.Muon.MuonStationTypeBuilder - muonStationTypeBuilder= Muon__MuonStationTypeBuilder(name = 'MuonStationTypeBuilder') - - Muon__MuonStationBuilder=CompFactory.Muon.MuonStationBuilder - muonStationBuilder= Muon__MuonStationBuilder(name = 'MuonStationBuilder') - muonStationBuilder.StationTypeBuilder = muonStationTypeBuilder - - muonInertMaterialBuilder= CompFactory.Muon.MuonInertMaterialBuilder(name = 'MuonInertMaterialBuilder') - - Muon__MuonTrackingGeometryBuilder=CompFactory.Muon.MuonTrackingGeometryBuilder - muonTrackingGeometryBuilder= Muon__MuonTrackingGeometryBuilder(name = 'MuonTrackingGeometryBuilder', - EnvelopeDefinitionSvc=atlas_env_def_service, - MuonStationBuilder = muonStationBuilder, - InertMaterialBuilder=muonInertMaterialBuilder - ) - # import pdb ; pdb.set_trace() - muonTrackingGeometryBuilder.EntryVolumeName = 'MuonSpectrometerEntrance' - muonTrackingGeometryBuilder.ExitVolumeName = 'Muon::Containers::MuonSystem' - # result.addPublicTool(muonTrackingGeometryBuilder) - - atlas_geometry_builder.MuonTrackingGeometryBuilder = muonTrackingGeometryBuilder - + atlas_geometry_builder.MuonTrackingGeometryBuilder = result.popToolsAndMerge(MuonTrackingGeometryBuilderCfg(flags, + envelopeDefinitionSvc = atlas_env_def_service)) + # Now set up processors - atlas_geometry_processors=[] - + atlas_geometry_processors=[] # array of private ToolHandles + if flags.TrackingGeometry.MaterialSource == 'COOL': - - CoolDataBaseFolder = '/GLOBAL/TrackingGeo/LayerMaterialV2' - if flags.Detector.GeometryITk: - CoolDataBaseFolder = '/GLOBAL/TrackingGeo/LayerMaterialITK' - - # the material provider - Trk__LayerMaterialProvider=CompFactory.Trk.LayerMaterialProvider - atlasMaterialProvider = Trk__LayerMaterialProvider('AtlasMaterialProvider', LayerMaterialMapName=CoolDataBaseFolder, LayerMaterialMapKey='') - atlas_geometry_processors += [ atlasMaterialProvider ] - - # Setup DBs - result.merge(_setupCondDB(flags, CoolDataBaseFolder)) - + + CoolDataBaseFolder = '/GLOBAL/TrackingGeo/LayerMaterialV2' + if flags.Detector.GeometryITk: + CoolDataBaseFolder = '/GLOBAL/TrackingGeo/LayerMaterialITK' + + # the material provider + Trk__LayerMaterialProvider=CompFactory.Trk.LayerMaterialProvider + atlasMaterialProvider = Trk__LayerMaterialProvider('AtlasMaterialProvider', LayerMaterialMapName=CoolDataBaseFolder, LayerMaterialMapKey='') + atlas_geometry_processors += [ atlasMaterialProvider ] + + # Setup DBs + result.merge(_setupCondDB(flags, CoolDataBaseFolder)) + elif flags.TrackingGeometry.MaterialSource == 'Input': - Trk__InputLayerMaterialProvider=CompFactory.Trk.InputLayerMaterialProvider - atlasMaterialProvider = Trk__InputLayerMaterialProvider('AtlasMaterialProvider') - atlas_geometry_processors += [ atlasMaterialProvider ] - + Trk__InputLayerMaterialProvider=CompFactory.Trk.InputLayerMaterialProvider + atlasMaterialProvider = Trk__InputLayerMaterialProvider('AtlasMaterialProvider') + atlas_geometry_processors += [ atlasMaterialProvider ] + if doMaterialValidation: - Trk__LayerMaterialInspector=CompFactory.Trk.LayerMaterialInspector - atlasLayerMaterialInspector = Trk__LayerMaterialInspector('AtlasLayerMaterialInspector') - atlas_geometry_processors += [ atlasLayerMaterialInspector ] + Trk__LayerMaterialInspector=CompFactory.Trk.LayerMaterialInspector + atlasLayerMaterialInspector = Trk__LayerMaterialInspector('AtlasLayerMaterialInspector') + atlas_geometry_processors += [ atlasLayerMaterialInspector ] - svc = CompFactory.Trk.TrackingGeometrySvc( name, GeometryBuilder = atlas_geometry_builder, + result.addService(CompFactory.Trk.TrackingGeometrySvc( name, GeometryBuilder = atlas_geometry_builder, TrackingGeometryName = atlas_tracking_geometry_name, - GeometryProcessors = PrivateToolHandleArray(atlas_geometry_processors), - BuildGeometryFromTagInfo = True) - result.addService(svc, primary = True) + GeometryProcessors = PrivateToolHandleArray(atlas_geometry_processors), + BuildGeometryFromTagInfo = True), primary = True) return result - + if __name__ == '__main__': from AthenaCommon.Configurable import Configurable Configurable.configurableRun3Behavior=1