diff --git a/Simulation/G4Atlas/G4AtlasTools/python/G4PhysicsRegionConfigNew.py b/Simulation/G4Atlas/G4AtlasTools/python/G4PhysicsRegionConfigNew.py new file mode 100644 index 0000000000000000000000000000000000000000..e9cb1af7008ce6f4b721989646b3d1f8eefc659b --- /dev/null +++ b/Simulation/G4Atlas/G4AtlasTools/python/G4PhysicsRegionConfigNew.py @@ -0,0 +1,354 @@ +# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator +from G4AtlasTools.G4AtlasToolsConf import RegionCreator + +# Beampipe Regions +def getBeampipeFwdCutPhysicsRegionTool(name='BeampipeFwdCutPhysicsRegionTool', **kwargs): + kwargs.setdefault("RegionName", 'BeampipeFwdCut') + volumeList = ['BeamPipe::SectionF47', 'BeamPipe::SectionF48', 'BeamPipe::SectionF61'] + kwargs.setdefault("VolumeList", volumeList) + from G4AtlasApps.SimFlags import simFlags + if simFlags.BeamPipeSimMode() == "FastSim": + kwargs.setdefault("ElectronCut", 10.) + kwargs.setdefault("PositronCut", 10.) + kwargs.setdefault("GammaCut", 10.) + print 'Adding fast sim model to the beampipe!' + else: + assert simFlags.BeamPipeCut.statusOn + if simFlags.BeamPipeCut() < 1: + msg = "Setting the forward beam pipe range cuts to %e mm " % simFlags.BeamPipeCut() + msg += "-- cut is < 1 mm, I hope you know what you're doing!" + print msg + if simFlags.BeamPipeSimMode() == "EGammaRangeCuts": + kwargs.setdefault("ElectronCut", simFlags.BeamPipeCut()) + kwargs.setdefault("PositronCut", simFlags.BeamPipeCut()) + kwargs.setdefault("GammaCut", simFlags.BeamPipeCut()) + elif simFlags.BeamPipeSimMode() == "EGammaPRangeCuts": + kwargs.setdefault("ElectronCut", simFlags.BeamPipeCut()) + kwargs.setdefault("PositronCut", simFlags.BeamPipeCut()) + kwargs.setdefault("GammaCut", simFlags.BeamPipeCut()) + kwargs.setdefault("ProtonCut", simFlags.BeamPipeCut()) + return RegionCreator(name, **kwargs) + +def getFWDBeamLinePhysicsRegionTool(name='FWDBeamLinePhysicsRegionTool', **kwargs): + kwargs.setdefault("RegionName", 'FWDBeamLine') + volumeList = ['BeamPipe::SectionF46'] + kwargs.setdefault("VolumeList", volumeList) + return RegionCreator(name, **kwargs) + +# Forward Regions +def getFwdRegionPhysicsRegionTool(name='FwdRegionPhysicsRegionTool', **kwargs): + kwargs.setdefault("RegionName", 'FwdRegion') + volumeList = ['FwdRegion::ForwardRegionGeoModel'] + kwargs.setdefault("VolumeList", volumeList) + kwargs.setdefault("ElectronCut", 200.) + kwargs.setdefault("PositronCut", 200.) + kwargs.setdefault("GammaCut", 200.) + return RegionCreator(name, **kwargs) + +# Inner Detector Regions +def getPixelPhysicsRegionTool(name='PixelPhysicsRegionTool', **kwargs): + kwargs.setdefault("RegionName", 'Pixel') + volumeList = ['Pixel::siLog', 'Pixel::siBLayLog'] + from AtlasGeoModel.CommonGMJobProperties import CommonGeometryFlags as commonGeoFlags + from AtlasGeoModel.InDetGMJobProperties import InDetGeometryFlags as geoFlags + if (commonGeoFlags.Run() in ["RUN2", "RUN3"]) or (commonGeoFlags.Run()=="UNDEFINED" and geoFlags.isIBL()): + volumeList += ['Pixel::dbmDiamondLog'] + kwargs.setdefault("VolumeList", volumeList) + kwargs.setdefault("ElectronCut", 0.05) + kwargs.setdefault("PositronCut", 0.05) + kwargs.setdefault("GammaCut", 0.05) + return RegionCreator(name, **kwargs) + +def getSCTPhysicsRegionTool(name='SCTPhysicsRegionTool', **kwargs): + kwargs.setdefault("RegionName", 'SCT') + volumeList = ['SCT::BRLSensor', 'SCT::BRLSensorSS', 'SCT::BRLSensorMS', + 'SCT::ECSensor0', 'SCT::ECSensor1', 'SCT::ECSensor2', + 'SCT::ECSensor3', 'SCT::ECSensor4', 'SCT::ECSensor5'] + kwargs.setdefault("VolumeList", volumeList) + kwargs.setdefault("ElectronCut", 0.05) + kwargs.setdefault("PositronCut", 0.05) + kwargs.setdefault("GammaCut", 0.05) + return RegionCreator(name, **kwargs) + +def getTRTPhysicsRegionTool(name='TRTPhysicsRegionTool', **kwargs): + from G4AtlasApps.SimFlags import simFlags + rangeCut = simFlags.TRTRangeCut.get_Value() + kwargs.setdefault("RegionName", 'TRT') + volumeList = ['TRT::Gas', 'TRT::GasMA'] + kwargs.setdefault("VolumeList", volumeList) + kwargs.setdefault("ElectronCut", rangeCut) + kwargs.setdefault("PositronCut", rangeCut) + # The photon range cut is meant to stay small + kwargs.setdefault("GammaCut", 0.05) + return RegionCreator(name, **kwargs) + +def getTRT_ArPhysicsRegionTool(name='TRT_ArPhysicsRegionTool', **kwargs): + kwargs.setdefault("RegionName", 'TRT_Ar') + volumeList = ['TRT::Gas_Ar', 'TRT::GasMA_Ar'] + kwargs.setdefault("VolumeList", volumeList) + kwargs.setdefault("ElectronCut", 30.0) + kwargs.setdefault("PositronCut", 30.0) + kwargs.setdefault("GammaCut", 0.05) + return RegionCreator(name, **kwargs) + +def getTRT_KrPhysicsRegionTool(name='TRT_KrPhysicsRegionTool', **kwargs): + kwargs.setdefault("RegionName", 'TRT_Kr') + volumeList = ['TRT::Gas_Kr', 'TRT::GasMA_Kr'] + kwargs.setdefault("VolumeList", volumeList) + kwargs.setdefault("ElectronCut", 15.0) + kwargs.setdefault("PositronCut", 15.0) + kwargs.setdefault("GammaCut", 0.05) + return RegionCreator(name, **kwargs) + +# Calo Regions +def getEMBPhysicsRegionTool(name='EMBPhysicsRegionTool', **kwargs): + kwargs.setdefault("RegionName", 'EMB') + volumeList = ['LArMgr::LAr::EMB::STAC'] + kwargs.setdefault("VolumeList", volumeList) + rangeEMB = 0.03 + from G4AtlasApps.SimFlags import simFlags + if not '_EMV' in simFlags.PhysicsList() and not '_EMX' in simFlags.PhysicsList(): + rangeEMB = 0.1 + kwargs.setdefault("ElectronCut", rangeEMB) + kwargs.setdefault("PositronCut", rangeEMB) + kwargs.setdefault("GammaCut", rangeEMB) + return RegionCreator(name, **kwargs) + +def getEMECPhysicsRegionTool(name='EMECPhysicsRegionTool', **kwargs): + kwargs.setdefault("RegionName", 'EMEC') + volumeList = ['LArMgr::LAr::EMEC::Mother'] + kwargs.setdefault("VolumeList", volumeList) + rangeEMEC = 0.03 + from G4AtlasApps.SimFlags import simFlags + if not '_EMV' in simFlags.PhysicsList() and not '_EMX' in simFlags.PhysicsList(): + rangeEMEC = 0.1 + kwargs.setdefault("ElectronCut", rangeEMEC) + kwargs.setdefault("PositronCut", rangeEMEC) + kwargs.setdefault("GammaCut", rangeEMEC) + return RegionCreator(name, **kwargs) + +def getHECPhysicsRegionTool(name='HECPhysicsRegionTool', **kwargs): + kwargs.setdefault("RegionName", 'HEC') + volumeList = ['LArMgr::LAr::HEC::LiquidArgon'] + kwargs.setdefault("VolumeList", volumeList) + rangeHEC = 0.03 + from G4AtlasApps.SimFlags import simFlags + if not '_EMV' in simFlags.PhysicsList() and not '_EMX' in simFlags.PhysicsList(): + rangeHEC = 1.0 + kwargs.setdefault("ElectronCut", rangeHEC) + kwargs.setdefault("PositronCut", rangeHEC) + kwargs.setdefault("GammaCut", rangeHEC) + return RegionCreator(name, **kwargs) + +def getFCALPhysicsRegionTool(name='FCALPhysicsRegionTool', **kwargs): + kwargs.setdefault("RegionName", 'FCAL') + volumeList = ['LArMgr::LAr::FCAL::LiquidArgonC'] + kwargs.setdefault("VolumeList", volumeList) + kwargs.setdefault("ElectronCut", 0.03) + kwargs.setdefault("PositronCut", 0.03) + kwargs.setdefault("GammaCut", 0.03) + return RegionCreator(name, **kwargs) + +def getEMECParaPhysicsRegionTool(name='EMECParaPhysicsRegionTool', **kwargs): + kwargs.setdefault("RegionName", 'EMECPara') + volumeList = ['LArMgr::LAr::EMEC::Pos::InnerWheel', 'LArMgr::LAr::EMEC::Pos::OuterWheel', + 'LArMgr::LAr::EMEC::Neg::InnerWheel', 'LArMgr::LAr::EMEC::Neg::OuterWheel'] + kwargs.setdefault("VolumeList", volumeList) + rangeEMEC = 0.03 + from G4AtlasApps.SimFlags import simFlags + if not '_EMV' in simFlags.PhysicsList() and not '_EMX' in simFlags.PhysicsList(): + rangeEMEC = 0.1 + kwargs.setdefault("ElectronCut", rangeEMEC) + kwargs.setdefault("PositronCut", rangeEMEC) + kwargs.setdefault("GammaCut", rangeEMEC) + return RegionCreator(name, **kwargs) + +def getFCALParaPhysicsRegionTool(name='FCALParaPhysicsRegionTool', **kwargs): + kwargs.setdefault("RegionName", 'FCALPara') + volumeList = ['LArMgr::LAr::FCAL::Module1::Absorber'] + kwargs.setdefault("VolumeList", volumeList) + kwargs.setdefault("ElectronCut", 0.03) + kwargs.setdefault("PositronCut", 0.03) + kwargs.setdefault("GammaCut", 0.03) + return RegionCreator(name, **kwargs) + +def getFCAL2ParaPhysicsRegionTool(name='FCAL2ParaPhysicsRegionTool', **kwargs): + kwargs.setdefault("RegionName", 'FCAL2Para') + volumeList = ['LArMgr::LAr::FCAL::Module2::Absorber', 'LArMgr::LAr::FCAL::Module3::Absorber'] + kwargs.setdefault("VolumeList", volumeList) + kwargs.setdefault("ElectronCut", 0.03) + kwargs.setdefault("PositronCut", 0.03) + kwargs.setdefault("GammaCut", 0.03) + return RegionCreator(name, **kwargs) + +def getPreSampLArPhysicsRegionTool(name='PreSampLArPhysicsRegionTool', **kwargs): + kwargs.setdefault("RegionName", 'PreSampLAr') + volumeList = ['LArMgr::LAr::Endcap::Presampler::LiquidArgon'] + kwargs.setdefault("VolumeList", volumeList) + return RegionCreator(name, **kwargs) + +def getDeadMaterialPhysicsRegionTool(name='DeadMaterialPhysicsRegionTool', **kwargs): + kwargs.setdefault("RegionName", 'DeadMaterial') + volumeList = [] + sectionList = range(16,49) # does not include 49 + sectionList += [ 51, 52, 53, 54 ] + for section in sectionList: + volumeList += ['BeamPipe::SectionF'+str(section)] + volumeList += ['LArMgr::LAr::Endcap::Cryostat::Cylinder', + 'LArMgr::LAr::Endcap::Cryostat::Cylinder::Mixed', + 'LArMgr::LAr::Endcap::Cryostat::Cone::Mixed', + 'LArMgr::LAr::Endcap::Cryostat::Cone', + 'DiskShieldingPlugs', 'ToroidShieldingInnerPlugs', + 'ForwardShieldingMainCylinder'] + kwargs.setdefault("VolumeList", volumeList) + kwargs.setdefault("ElectronCut", 1.0) + kwargs.setdefault("PositronCut", 1.0) + kwargs.setdefault("GammaCut", 1.0) + return RegionCreator(name, **kwargs) + +#Muon Regions +def getDriftWallPhysicsRegionTool(name='DriftWallPhysicsRegionTool', **kwargs): + kwargs.setdefault("RegionName", 'DriftWall') + volumeList = ['Muon::MDTDriftWall'] + kwargs.setdefault("VolumeList", volumeList) + kwargs.setdefault("ElectronCut", 0.05) + kwargs.setdefault("PositronCut", 0.05) + return RegionCreator(name, **kwargs) + +def getDriftWall1PhysicsRegionTool(name='DriftWall1PhysicsRegionTool', **kwargs): + kwargs.setdefault("RegionName", 'DriftWall1') + volumeList = ['Muon::Endplug'] + kwargs.setdefault("VolumeList", volumeList) + kwargs.setdefault("ElectronCut", 1.0) + kwargs.setdefault("PositronCut", 1.0) + return RegionCreator(name, **kwargs) + +def getDriftWall2PhysicsRegionTool(name='DriftWall2PhysicsRegionTool', **kwargs): + kwargs.setdefault("RegionName", 'DriftWall2') + volumeList = ['Muon::SensitiveGas'] + kwargs.setdefault("VolumeList", volumeList) + kwargs.setdefault("ElectronCut", 1.0) + kwargs.setdefault("PositronCut", 1.0) + return RegionCreator(name, **kwargs) + +def getMuonSystemFastPhysicsRegionTool(name='MuonSystemFastPhysicsRegionTool', **kwargs): + kwargs.setdefault("RegionName", 'MuonSystemFastRegion') + volumeList = [] + from G4AtlasApps.SimFlags import simFlags + if 'World' in simFlags.CavernBG.get_Value(): + volumeList += ['BeamPipe::BeamPipe', 'IDET::IDET'] + volumeList = ['Muon::MuonSys'] + kwargs.setdefault("VolumeList", volumeList) + kwargs.setdefault("ElectronCut", 1.0) + kwargs.setdefault("PositronCut", 1.0) + return RegionCreator(name, **kwargs) + +def getMuonPhysicsRegionTool(name="MuonPhysicsRegionTool", **kwargs): + kwargs.setdefault("RegionName", 'MuonSys') + volumeList = ['Muon::MuonSys'] + kwargs.setdefault("VolumeList", volumeList) + kwargs.setdefault("ElectronCut", 0.1) + kwargs.setdefault("PositronCut", 0.1) + kwargs.setdefault("GammaCut", 0.1) + return RegionCreator(name, **kwargs) + +# Cavern Regions +def SX1PhysicsRegionToolCfg(ConfigFlags, name='SX1PhysicsRegionTool', **kwargs): + kwargs.setdefault("RegionName", 'SX1') + volumeList = ['CavernInfra::SX1Air'] + kwargs.setdefault("VolumeList", volumeList) + kwargs.setdefault("ElectronCut", 2000.) + kwargs.setdefault("PositronCut", 2000.) + kwargs.setdefault("GammaCut", 2000.) + return RegionCreator(name, **kwargs) + +def getBedrockPhysicsRegionTool(name='BedrockPhysicsRegionTool', **kwargs): + kwargs.setdefault("RegionName", 'BEDROCK') + volumeList = ['CavernInfra::BEDROCK'] + kwargs.setdefault("VolumeList", volumeList) + kwargs.setdefault("ElectronCut", 1000000.) + kwargs.setdefault("PositronCut", 1000000.) + kwargs.setdefault("GammaCut", 1000000.) + return RegionCreator(name, **kwargs) + +def getCavernShaftsConcretePhysicsRegionTool(name='CavernShaftsConcretePhysicsRegionTool', **kwargs): + kwargs.setdefault("RegionName", 'CAV_SHAFTS_CONC') + volumeList = ['CavernInfra::CAV_SHAFTS_CONC'] + kwargs.setdefault("VolumeList", volumeList) + kwargs.setdefault("ElectronCut", 150.) + kwargs.setdefault("PositronCut", 150.) + kwargs.setdefault("GammaCut", 150.) + return RegionCreator(name, **kwargs) + +##def getCavernShaftsAirPhysicsRegionTool(name='CavernShaftsAirPhysicsRegionTool', **kwargs): +## kwargs.setdefault("RegionName", 'CAV_SHAFTS_AIR') +## volumeList = ['CavernInfra::CAV_SHAFTS_AIR'] +## kwargs.setdefault("VolumeList", volumeList) +## kwargs.setdefault("ElectronCut", 2000.) +## kwargs.setdefault("PositronCut", 2000.) +## kwargs.setdefault("GammaCut", 2000.) +## return CfgMgr.RegionCreator(name, **kwargs) + +# CTB Regions + +def getSCTSiliconPhysicsRegionTool(name='SCTSiliconPhysicsRegionTool', **kwargs): + kwargs.setdefault("RegionName", 'SCTSiliconRegion') + volumeList = ['SCT::ECSensor0'] + kwargs.setdefault("VolumeList", volumeList) + kwargs.setdefault("ElectronCut", 0.01) + return RegionCreator(name, **kwargs) + + + + + +if __name__ == '__main__': + from AthenaConfiguration.MainServicesConfig import MainServicesSerialCfg + import os + + # Set up logging and config behaviour + from AthenaCommon.Logging import log + from AthenaCommon.Constants import DEBUG + from AthenaCommon.Configurable import Configurable + log.setLevel(DEBUG) + Configurable.configurableRun3Behavior = 1 + + + #import config flags + from AthenaConfiguration.AllConfigFlags import ConfigFlags + + from AthenaConfiguration.TestDefaults import defaultTestFiles + inputDir = defaultTestFiles.d + ConfigFlags.Input.Files = defaultTestFiles.EVNT + + # Finalize + ConfigFlags.lock() + + ## Initialize a new component accumulator + cfg = MainServicesSerialCfg() + + #add the algorithm + tool1 = SX1PhysicsRegionToolCfg(ConfigFlags) + cfg.addPublicTool(tool1) + #cfg.merge(acc1) + + #cfg.addEventAlgo(Alg) #Event algo? + #cfg.merge(acc) + #cfg.addPublicTool(Alg) + + # Dump config + #cfg.getService("StoreGateSvc").Dump = True + #cfg.getService("ConditionStore").Dump = True + cfg.printConfig(withDetails=True, summariseProps = True) + ConfigFlags.dump() + + + f=open("test.pkl","w") + cfg.store(f) + f.close() + + + + print cfg._publicTools + print "-----------------finished----------------------"