diff --git a/AtlasGeometryCommon/SubDetectorEnvelopes/python/SubDetectorEnvelopesConfig.py b/AtlasGeometryCommon/SubDetectorEnvelopes/python/SubDetectorEnvelopesConfig.py index d1b0ae658d6507eaf007107703ae8aa9554491c3..1ef5aae53aac54a0482b4d1cf4990ea86d3ffc2f 100644 --- a/AtlasGeometryCommon/SubDetectorEnvelopes/python/SubDetectorEnvelopesConfig.py +++ b/AtlasGeometryCommon/SubDetectorEnvelopes/python/SubDetectorEnvelopesConfig.py @@ -167,6 +167,8 @@ class Volume: # For new configuration - doesn't have access to DetFlags as of writing, so all HGTD stuff is missing. # Just copied from above. + +#New configuration in SubDetectorEnvelopesConfigNew.py def EnvelopeDefSvc(flags, **kwargs): kwargs.setdefault("DBInDetNode" , 'InDetEnvelope' ) kwargs.setdefault("DBBeamPipeNode" , 'BeamPipeEnvelope' ) diff --git a/AtlasGeometryCommon/SubDetectorEnvelopes/python/SubDetectorEnvelopesConfigNew.py b/AtlasGeometryCommon/SubDetectorEnvelopes/python/SubDetectorEnvelopesConfigNew.py new file mode 100644 index 0000000000000000000000000000000000000000..2d035a98176e916324b3c7fb8b80abb968696a99 --- /dev/null +++ b/AtlasGeometryCommon/SubDetectorEnvelopes/python/SubDetectorEnvelopesConfigNew.py @@ -0,0 +1,170 @@ +# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration + +""" +SubDetectorEnvelopes configurations for AtlasGeometryCommon +Elmar Ritsch, 27/09/2013 +""" + +from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator + +from SubDetectorEnvelopes.SubDetectorEnvelopesConf import DetDescrDBEnvelopeSvc + +def EnvelopeDefSvcCfg(ConfigFlags, name="AtlasGeometry_EnvelopeDefSvc", **kwargs): + result = ComponentAccumulator() + + kwargs.setdefault("DBInDetNode" , 'InDetEnvelope' ) + kwargs.setdefault("DBBeamPipeNode" , 'BeamPipeEnvelope' ) + kwargs.setdefault("DBCaloNode" , 'CaloEnvelope' ) + kwargs.setdefault("DBMSNode" , 'MuonEnvelope' ) + kwargs.setdefault("DBCavernNode" , 'CavernEnvelope' ) + + # allow for python-based envelope definitions (see below) + # -> TODO: set this to False once the envelope definitions are tagged in the DDDB + kwargs.setdefault("EnableFallback" , True ) + + # setup fallback BeamPipeEnvelope + BeamPipe = Volume() + BeamPipe.addRZ( 34.3, 3475.0 ) + + if ConfigFlags.Detector.SimulateHGTD: + BeamPipe.addRZ( 47.0, 3475.0 ) + BeamPipe.addRZ( 47.0, 3535.0 ) + BeamPipe.addRZ( 120.0, 3535.0 ) + else: + BeamPipe.addRZ( 120.0, 3475.0 ) + BeamPipe.addRZ( 120.0, 4185.0 ) + BeamPipe.addRZ( 41.0, 4185.0 ) + BeamPipe.addRZ( 41.0, 6783.0 ) + BeamPipe.addRZ( 70.0, 6783.0 ) + BeamPipe.addRZ( 70.0, 12900.0 ) + BeamPipe.addRZ( 279.0, 12900.0 ) + BeamPipe.addRZ( 279.0, 18650.0 ) + BeamPipe.addRZ( 436.0, 18650.0 ) + BeamPipe.addRZ( 436.0, 22030.0 ) + BeamPipe.addRZ( 1050.0, 22030.0 ) + BeamPipe.addRZ( 1050.0, 26046.0 ) + BeamPipe.addRZ( 0.0, 26046.0 ) + + kwargs.setdefault("FallbackBeamPipeR" , BeamPipe.getRs() ) + kwargs.setdefault("FallbackBeamPipeZ" , BeamPipe.getZs() ) + + + # setup fallback IDEnvelope + InDet = Volume() + InDet.addRZ( 1148., 3475. ) + InDet.addRZ( 34.3, 3475. ) + kwargs.setdefault("FallbackInDetR" , InDet.getRs() ) + kwargs.setdefault("FallbackInDetZ" , InDet.getZs() ) + + + # setup fallback CaloEnvelope + Calo = Volume() + Calo.addRZ( 1148.0, 3475.0 ) + + if ConfigFlags.Detector.SimulateHGTD: + Calo.addRZ( 47.0, 3475.0 ) + Calo.addRZ( 47.0, 3535.0 ) + Calo.addRZ( 120.0, 3535.0 ) + else: + Calo.addRZ( 120.0, 3475.0 ) + Calo.addRZ( 120.0, 4185.0 ) + Calo.addRZ( 41.0, 4185.0 ) + Calo.addRZ( 41.0, 6783.0 ) + Calo.addRZ( 420.0, 6783.0 ) + Calo.addRZ( 420.0, 6736.0 ) + Calo.addRZ( 3800.0, 6736.0 ) + Calo.addRZ( 3800.0, 6550.0 ) + Calo.addRZ( 4255.0, 6550.0 ) + + kwargs.setdefault("FallbackCaloR" , Calo.getRs() ) + kwargs.setdefault("FallbackCaloZ" , Calo.getZs() ) + + + # setup fallback MuonEnvelope + Muon = Volume() + Muon.addRZ( 4255.0 , 4000.0 ) + Muon.addRZ( 4255.0 , 6550.0 ) + Muon.addRZ( 3800.0 , 6550.0 ) + Muon.addRZ( 3800.0 , 6736.0 ) + Muon.addRZ( 420.0 , 6736.0 ) + Muon.addRZ( 420.0 , 6783.0 ) + Muon.addRZ( 70.0 , 6783.0 ) + Muon.addRZ( 70.0 , 12900.0 ) + Muon.addRZ( 279.0 , 12900.0 ) + Muon.addRZ( 279.0 , 18650.0 ) + Muon.addRZ( 436.7 , 18650.0 ) + Muon.addRZ( 436.7 , 22030.0 ) + Muon.addRZ( 1050.0 , 22030.0 ) + Muon.addRZ( 1050.0 , 26046.0 ) + Muon.addRZ( 1500.0 , 26046.0 ) + Muon.addRZ( 1500.0 , 23001.0 ) + Muon.addRZ( 2750.0 , 23001.0 ) + Muon.addRZ( 2750.0 , 22030.0 ) + Muon.addRZ( 12650.0 , 22030.0 ) + Muon.addRZ( 12650.0 , 18650.0 ) + Muon.addRZ( 13400.0 , 18650.0 ) + Muon.addRZ( 13400.0 , 12900.0 ) + Muon.addRZ( 14200.0 , 12900.0 ) + Muon.addRZ( 14200.0 , 4000.0 ) + Muon.addRZ( 13000.0 , 4000.0 ) + kwargs.setdefault("FallbackMuonR" , Muon.getRs() ) + kwargs.setdefault("FallbackMuonZ" , Muon.getZs() ) + + + # setup fallback CavernEnvelope + Cavern = Volume() + Cavern.addRZ( 13000.0 , 4000.0 ) + Cavern.addRZ( 14200.0 , 4000.0 ) + Cavern.addRZ( 14200.0 , 12900.0 ) # boundary with MS + Cavern.addRZ( 13400.0 , 12900.0 ) # boundary with MS + Cavern.addRZ( 13400.0 , 18650.0 ) # boundary with MS + Cavern.addRZ( 12650.0 , 18650.0 ) # boundary with MS + Cavern.addRZ( 12650.0 , 22030.0 ) # boundary with MS + Cavern.addRZ( 2750.0 , 22030.0 ) # boundary with MS + Cavern.addRZ( 2750.0 , 23001.0 ) # boundary with MS + Cavern.addRZ( 1500.0 , 23001.0 ) # boundary with MS + Cavern.addRZ( 1500.0 , 26046.0 ) # boundary with MS + Cavern.addRZ( 0.0 , 26046.0 ) # + + # the outer dimesions differ between collision and cosmics jobs + if ConfigFlags.Beam.Type != 'cosmics': + # -> for collision jobs the 'cavern' envelope is much smaller + Cavern.addRZ( 0.0 , 500000.0 ) # z= +500m + Cavern.addRZ( 500000.0 , 500000.0 ) # r= 500m + else: + # -> for cosmics simulation the 'cavern' envelope spans much further + kwargs.setdefault("DBCavernNode" , 'CavernEnvelopeNONE' ) + kwargs.setdefault("EnableFallback" , True ) + Cavern.addRZ( 0.0 , 3000000.0 ) # z= +3km + Cavern.addRZ( 3000000.0 , 3000000.0 ) # r= 3km + kwargs.setdefault("FallbackCavernR" , Cavern.getRs() ) + kwargs.setdefault("FallbackCavernZ" , Cavern.getZs() ) + + #set the GeoModelSvc + from AtlasGeoModel.GeoModelConfig import GeoModelCfg + acc = GeoModelCfg(ConfigFlags) + kwargs.setdefault("GeoModelSvc", acc.getService("GeoModelSvc")) + result.merge(acc) + + result.addService(DetDescrDBEnvelopeSvc(name, **kwargs)) + return result + + +# class used for more readable definitions of envelope volumes +# -> create new volume boundary definitions +# -> return the coordinate vectors in R and Z and VolumeID +class Volume: + # initialize empy + def __init__(self): + self.r = [ ] + self.z = [ ] + + def addRZ(self, r, z): + self.r += [ r ] + self.z += [ z ] + + def getRs(self): + return self.r + + def getZs(self): + return self.z \ No newline at end of file diff --git a/Simulation/G4Atlas/G4AtlasAlg/python/G4AtlasAlgConfigNew.py b/Simulation/G4Atlas/G4AtlasAlg/python/G4AtlasAlgConfigNew.py index ae3532813170127ce4a5413af76ae20843b2fe1c..61539f6f23d6335556ffc498c7daa27d9ab14ded 100644 --- a/Simulation/G4Atlas/G4AtlasAlg/python/G4AtlasAlgConfigNew.py +++ b/Simulation/G4Atlas/G4AtlasAlg/python/G4AtlasAlgConfigNew.py @@ -2,7 +2,7 @@ from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator #from AthenaCommon import CfgMgr from G4AtlasServices.G4AtlasServicesConfigNew import DetectorGeometrySvcCfg -from ISF_Services.ISF_ServicesConfigNew import MC15aPlusTruthServiceCfg +from ISF_Services.ISF_ServicesConfigNew import MC15aPlusTruthServiceCfg, GeoIDSvcCfg #todo - think about the flow, do we need if statements?! @@ -91,7 +91,9 @@ def G4AtlasAlgCfg(ConfigFlags, name='G4AtlasAlg', **kwargs): kwargs.setdefault('TruthRecordService', result.getService("ISF_MC15aPlusTruthService")) #kwargs.setdefault('TruthRecordService', ConfigFlags.Sim.TruthStrategy) # TODO need to have manual override (simFlags.TruthStrategy.TruthServiceName()) - kwargs.setdefault('GeoIDSvc', 'ISF_GeoIDSvc') + accGeoID = GeoIDSvcCfg(ConfigFlags) + result.merge(accGeoID) + kwargs.setdefault('GeoIDSvc', result.getService('ISF_GeoIDSvc')) ## G4AtlasAlg verbosities (available domains = Navigator, Propagator, Tracking, Stepping, Stacking, Event) ## Set stepper verbose = 1 if the Athena logging level is <= DEBUG 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 82397c903af2d5cf0b0d81e5f726baa694cc4fec..9f63e6bcb6ce43c8a825f21f159d3e626c3ee4fd 100644 --- a/Simulation/ISF/ISF_Core/ISF_Services/python/ISF_ServicesConfigNew.py +++ b/Simulation/ISF/ISF_Core/ISF_Services/python/ISF_ServicesConfigNew.py @@ -9,11 +9,13 @@ from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator from BarcodeServices.BarcodeServicesConfigNew import MC15aPlusBarcodeSvcCfg from ISF_HepMC_Tools.ISF_HepMC_ToolsConfigNew import TruthStrategyGroupID_MC15Cfg, TruthStrategyGroupCaloMuBremCfg, TruthStrategyGroupCaloDecay_MC15Cfg, TruthStrategyGroupIDHadInt_MC15Cfg +from SubDetectorEnvelopes.SubDetectorEnvelopesConfigNew import EnvelopeDefSvcCfg -from ISF_Services.ISF_ServicesConf import ISF__TruthSvc + +from ISF_Services.ISF_ServicesConf import ISF__TruthSvc, ISF__GeoIDSvc, ISF__ISFEnvelopeDefSvc #Functions yet to be migrated: -#getParticleBrokerSvcNoOrdering, getParticleBrokerSvc, getAFIIParticleBrokerSvc, getISFEnvelopeDefSvc, getAFIIEnvelopeDefSvc, getGeoIDSvc, getAFIIGeoIDSvc +#getParticleBrokerSvcNoOrdering, getParticleBrokerSvc, getAFIIParticleBrokerSvc, getAFIIEnvelopeDefSvc, getAFIIGeoIDSvc #getGenParticleFilters, getInputConverter, getLongLivedInputConverter, getValidationTruthService, getMC12BeamPipeTruthStrategies, getMC12IDTruthStrategies #getMC12CaloTruthStrategies, getMC12MSTruthStrategies, getMC12TruthService, getTruthService, getMC12LLPTruthService, getMC12PlusTruthService, getMC15IDTruthStrategies #getMC15CaloTruthStrategies @@ -42,10 +44,13 @@ def getAFIIParticleBrokerSvc(name="ISF_AFIIParticleBrokerSvc", **kwargs): return getParticleBrokerSvc(name, **kwargs) -def getISFEnvelopeDefSvc(name="ISF_ISFEnvelopeDefSvc", **kwargs): +def ISFEnvelopeDefSvcCfg(ConfigFlags, name="ISF_ISFEnvelopeDefSvc", **kwargs): + result = EnvelopeDefSvcCfg(ConfigFlags) # ATLAS common envlope definitions - kwargs.setdefault("ATLASEnvelopeDefSvc", "AtlasGeometry_EnvelopeDefSvc") - return CfgMgr.ISF__ISFEnvelopeDefSvc(name, **kwargs) + kwargs.setdefault("ATLASEnvelopeDefSvc", result.getService("AtlasGeometry_EnvelopeDefSvc")) + + result.addService(ISF__ISFEnvelopeDefSvc(name, **kwargs)) + return result def getAFIIEnvelopeDefSvc(name="ISF_AFIIEnvelopeDefSvc", **kwargs): @@ -56,10 +61,12 @@ def getAFIIEnvelopeDefSvc(name="ISF_AFIIEnvelopeDefSvc", **kwargs): return CfgMgr.ISF__AFIIEnvelopeDefSvc(name, **kwargs) -def getGeoIDSvc(name="ISF_GeoIDSvc", **kwargs): +def GeoIDSvcCfg(ConfigFlags, name="ISF_GeoIDSvc", **kwargs): + result = ISFEnvelopeDefSvcCfg(ConfigFlags) # with ISF volume definitions - kwargs.setdefault("EnvelopeDefSvc", "ISF_ISFEnvelopeDefSvc") - return CfgMgr.ISF__GeoIDSvc(name, **kwargs) + kwargs.setdefault("EnvelopeDefSvc", result.getService("ISF_ISFEnvelopeDefSvc")) + result.addService(ISF__GeoIDSvc(name, **kwargs)) + return result def getAFIIGeoIDSvc(name="ISF_AFIIGeoIDSvc", **kwargs): diff --git a/Simulation/ISF/ISF_Core/ISF_Services/test/ISF_ServicesConfigNew_test.py b/Simulation/ISF/ISF_Core/ISF_Services/test/ISF_ServicesConfigNew_test.py index 1efd162270a04a9505bc3751d83d0ce67ea2560f..056406fa007fc8217481f3dc182e672ef30c8e2a 100755 --- a/Simulation/ISF/ISF_Core/ISF_Services/test/ISF_ServicesConfigNew_test.py +++ b/Simulation/ISF/ISF_Core/ISF_Services/test/ISF_ServicesConfigNew_test.py @@ -28,13 +28,14 @@ if __name__ == '__main__': # Finalize ConfigFlags.lock() - from ISF_Services.ISF_ServicesConfigNew import MC15aPlusTruthServiceCfg + from ISF_Services.ISF_ServicesConfigNew import MC15aPlusTruthServiceCfg, GeoIDSvcCfg ## Initialize a new component accumulator cfg = MainServicesSerialCfg() #add the algorithm cfg.merge(MC15aPlusTruthServiceCfg(ConfigFlags)) + cfg.merge(GeoIDSvcCfg(ConfigFlags)) # Dump config cfg.printConfig(withDetails=True, summariseProps = True)