diff --git a/Simulation/BeamEffects/python/BeamEffectsAlgConfig.py b/Simulation/BeamEffects/python/BeamEffectsAlgConfig.py index 7875e91fdcf85819067c7b55c6c36f329d5b8697..422ddeda6da3bd0ecc440ab88ed33320904c0f88 100755 --- a/Simulation/BeamEffects/python/BeamEffectsAlgConfig.py +++ b/Simulation/BeamEffects/python/BeamEffectsAlgConfig.py @@ -102,7 +102,11 @@ def BeamEffectsAlgCfg(flags, name="BeamEffectsAlg", **kwargs): """Return an accumulator and algorithm for beam effects, wihout output""" acc = ComponentAccumulator() - kwargs.setdefault("ISFRun", flags.Sim.ISFRun) + from SimulationConfig.SimEnums import LArParameterization + if flags.Sim.LArParameterization is LArParameterization.FastCaloSim: + kwargs.setdefault("ISFRun", True) + else: + kwargs.setdefault("ISFRun", flags.Sim.ISFRun) # Set default properties if flags.Sim.DoFullChain and flags.Digitization.PileUp: diff --git a/Simulation/G4Atlas/G4AtlasAlg/python/G4AtlasAlgConfig.py b/Simulation/G4Atlas/G4AtlasAlg/python/G4AtlasAlgConfig.py index a2e02fc7fdcfbdfd35c6bb1f712b542f649b900d..a8724f744827fdc58c8b8f16557c45c97fc8f345 100644 --- a/Simulation/G4Atlas/G4AtlasAlg/python/G4AtlasAlgConfig.py +++ b/Simulation/G4Atlas/G4AtlasAlg/python/G4AtlasAlgConfig.py @@ -13,6 +13,11 @@ def G4AtlasAlgCfg(flags, name="G4AtlasAlg", **kwargs): """Return ComponentAccumulator configured for Atlas G4 simulation, without output""" # wihout output result = ComponentAccumulator() + from SimulationConfig.SimEnums import LArParameterization + if flags.Sim.LArParameterization is LArParameterization.FastCaloSim: + # Add a dummy version of the SimKernel to the CA before adding the properly configured version + # Presently necessary for FastCaloSim to ensure the proper order of ISF_CollectionMerger + result.addEventAlgo(CompFactory.G4AtlasAlg(name, **kwargs)) kwargs.setdefault("UseShadowEvent", flags.Sim.UseShadowEvent) if flags.Sim.UseShadowEvent and "TruthPreselectionTool" not in kwargs: from ISF_HepMC_Tools.ISF_HepMC_ToolsConfig import TruthPreselectionToolCfg @@ -26,8 +31,13 @@ def G4AtlasAlgCfg(flags, name="G4AtlasAlg", **kwargs): ## Don"t drop the GeoModel kwargs.setdefault("ReleaseGeoModel", flags.Sim.ReleaseGeoModel) + from SimulationConfig.SimEnums import LArParameterization + if flags.Sim.LArParameterization is LArParameterization.FastCaloSim: + kwargs.setdefault("ExtraInputs", + {('CaloDetDescrManager', 'ConditionStore+CaloDetDescrManager'), + ('LArfSamplSym', 'ConditionStore+LArfSamplSym'), + ('TileSamplingFraction', 'ConditionStore+TileSamplingFraction')}) kwargs.setdefault("ExtraOutputs", SimHitContainerListCfg(flags)) - ## Record the particle flux during the simulation kwargs.setdefault("RecordFlux", flags.Sim.RecordFlux) diff --git a/Simulation/G4Atlas/G4AtlasTools/python/G4AtlasToolsConfig.py b/Simulation/G4Atlas/G4AtlasTools/python/G4AtlasToolsConfig.py index 3995663f14dd48aa2245801f943bd993a66e2f37..216974b34c4d9db15cbe54e65051e2b437019bfb 100644 --- a/Simulation/G4Atlas/G4AtlasTools/python/G4AtlasToolsConfig.py +++ b/Simulation/G4Atlas/G4AtlasTools/python/G4AtlasToolsConfig.py @@ -10,6 +10,10 @@ from AthenaConfiguration.AccumulatorCache import AccumulatorCache def FastSimulationToolListCfg(flags): result = ComponentAccumulator() tools = [] + if flags.Sim.LArParameterization is LArParameterization.FastCaloSim: + from G4FastSimulation.G4FastSimulationConfig import FastCaloSimCfg + tools += [ result.popToolsAndMerge(FastCaloSimCfg(flags)) ] + if flags.Detector.GeometryBpipe: if not flags.Detector.GeometryFwdRegion and (flags.Detector.GeometryAFP or flags.Detector.GeometryALFA or flags.Detector.GeometryZDC): # equivalent of simFlags.ForwardDetectors() == 2: @@ -31,9 +35,13 @@ def FastSimulationToolListCfg(flags): tools += [ result.popToolsAndMerge(EMECFastShowerCfg(flags)) ] tools += [ result.popToolsAndMerge(FCALFastShowerCfg(flags)) ] tools += [ result.popToolsAndMerge(FCAL2FastShowerCfg(flags)) ] - if flags.Sim.LArParameterization in [LArParameterization.DeadMaterialFrozenShowers, LArParameterization.FrozenShowersFCalOnly]: + if flags.Sim.LArParameterization in [LArParameterization.DeadMaterialFrozenShowers, LArParameterization.FrozenShowersFCalOnly, LArParameterization.FastCaloSim]: # TODO Check this makes sense. from G4FastSimulation.G4FastSimulationConfig import DeadMaterialShowerCfg tools += [ result.popToolsAndMerge(DeadMaterialShowerCfg(flags)) ] + # Enable fast simulation of the calorimeter with FastCaloSim + if flags.Sim.LArParameterization is LArParameterization.FastCaloSim: + from G4FastSimulation.G4FastSimulationConfig import FastCaloSimCfg + tools += [ result.popToolsAndMerge(FastCaloSimCfg(flags)) ] if flags.Detector.GeometryMuon: if flags.Sim.CavernBackground not in [CavernBackground.Off, CavernBackground.Read] and not flags.Sim.RecordFlux: from TrackWriteFastSim.TrackWriteFastSimConfig import NeutronFastSimCfg @@ -95,6 +103,14 @@ def TrackFastSimSensitiveDetectorListCfg(flags): result.setPrivateTools(tools) return result +def CaloCellContainerSensitiveDetectorListCfg(flags): + result = ComponentAccumulator() + tools = [] + if flags.Sim.LArParameterization is LArParameterization.FastCaloSim: + from ISF_FastCaloSimParametrization.ISF_FastCaloSimParametrizationConfig import CaloCellContainerSDCfg + tools += [ result.popToolsAndMerge(CaloCellContainerSDCfg(flags)) ] + result.setPrivateTools(tools) + return result def ITkSensitiveDetectorListCfg(flags): result = ComponentAccumulator() @@ -208,6 +224,7 @@ def EnvelopeSensitiveDetectorListCfg(flags): def SimHitContainerListCfg(flags): + from SimulationConfig.SimEnums import LArParameterization writtenContainers =[] if flags.Detector.GeometryMuon: if flags.Muon.setupGeoModelXML: @@ -217,13 +234,23 @@ def SimHitContainerListCfg(flags): from MuonG4SD.MuonG4SDConfig import SimHitContainerListCfg writtenContainers += SimHitContainerListCfg(flags) if flags.Detector.GeometryLAr: - writtenContainers += [("LArHitContainer", "LArHitEMB")] - writtenContainers += [("LArHitContainer", "LArHitEMEC")] - writtenContainers += [("LArHitContainer", "LArHitFCAL")] - writtenContainers += [("LArHitContainer", "LArHitHEC")] + if flags.Sim.LArParameterization is LArParameterization.FastCaloSim: + writtenContainers += [("LArHitContainer", "LArHitEMB_G4")] + writtenContainers += [("LArHitContainer", "LArHitEMEC_G4")] + writtenContainers += [("LArHitContainer", "LArHitFCAL_G4")] + writtenContainers += [("LArHitContainer", "LArHitHEC_G4")] + else: + writtenContainers += [("LArHitContainer", "LArHitEMB")] + writtenContainers += [("LArHitContainer", "LArHitEMEC")] + writtenContainers += [("LArHitContainer", "LArHitFCAL")] + writtenContainers += [("LArHitContainer", "LArHitHEC")] if flags.Detector.GeometryTile: - writtenContainers += [("TileHitVector", "MBTSHits")] - writtenContainers += [("TileHitVector", "TileHitVec")] + if flags.Sim.LArParameterization is LArParameterization.FastCaloSim: + writtenContainers += [("TileHitVector", "MBTSHits_G4")] + writtenContainers += [("TileHitVector", "TileHitVec_G4")] + else: + writtenContainers += [("TileHitVector", "MBTSHits")] + writtenContainers += [("TileHitVector", "TileHitVec")] if flags.Detector.GeometryTRT: writtenContainers += [("TRTUncompressedHitCollection", "TRTUncompressedHits")] if flags.Detector.EnableBCM: @@ -256,6 +283,7 @@ def SensitiveDetectorListCfg(flags): tools += result.popToolsAndMerge(MuonSensitiveDetectorListCfg(flags)) tools += result.popToolsAndMerge(TrackFastSimSensitiveDetectorListCfg(flags)) tools += result.popToolsAndMerge(FwdSensitiveDetectorListCfg(flags)) + tools += result.popToolsAndMerge(CaloCellContainerSensitiveDetectorListCfg(flags)) result.setPrivateTools(tools) return result diff --git a/Simulation/G4Atlas/G4AtlasTools/python/G4GeometryToolConfig.py b/Simulation/G4Atlas/G4AtlasTools/python/G4GeometryToolConfig.py index c092dccbb6b17eb4b181f46915227256a7b7d1fc..6b3fc106fc7d6088171459a565123ab8482a9d7d 100644 --- a/Simulation/G4Atlas/G4AtlasTools/python/G4GeometryToolConfig.py +++ b/Simulation/G4Atlas/G4AtlasTools/python/G4GeometryToolConfig.py @@ -9,7 +9,7 @@ from AthenaCommon import Logging from SimulationConfig.SimEnums import BeamPipeSimMode, CalibrationRun, CavernBackground, LArParameterization #the physics region tools -from G4AtlasTools.G4PhysicsRegionConfig import SX1PhysicsRegionToolCfg, BedrockPhysicsRegionToolCfg, CavernShaftsConcretePhysicsRegionToolCfg, PixelPhysicsRegionToolCfg, SCTPhysicsRegionToolCfg, TRTPhysicsRegionToolCfg, TRT_ArPhysicsRegionToolCfg,ITkPixelPhysicsRegionToolCfg,ITkStripPhysicsRegionToolCfg,HGTDPhysicsRegionToolCfg,BeampipeFwdCutPhysicsRegionToolCfg, FWDBeamLinePhysicsRegionToolCfg, EMBPhysicsRegionToolCfg, EMECPhysicsRegionToolCfg, HECPhysicsRegionToolCfg, FCALPhysicsRegionToolCfg, FCAL2ParaPhysicsRegionToolCfg, EMECParaPhysicsRegionToolCfg, FCALParaPhysicsRegionToolCfg, PreSampLArPhysicsRegionToolCfg, DeadMaterialPhysicsRegionToolCfg +from G4AtlasTools.G4PhysicsRegionConfig import SX1PhysicsRegionToolCfg, BedrockPhysicsRegionToolCfg, CavernShaftsConcretePhysicsRegionToolCfg, PixelPhysicsRegionToolCfg, SCTPhysicsRegionToolCfg, TRTPhysicsRegionToolCfg, TRT_ArPhysicsRegionToolCfg,ITkPixelPhysicsRegionToolCfg,ITkStripPhysicsRegionToolCfg,HGTDPhysicsRegionToolCfg,BeampipeFwdCutPhysicsRegionToolCfg, FWDBeamLinePhysicsRegionToolCfg, CALOPhysicsRegionToolCfg, EMBPhysicsRegionToolCfg, EMECPhysicsRegionToolCfg, HECPhysicsRegionToolCfg, FCALPhysicsRegionToolCfg, FCAL2ParaPhysicsRegionToolCfg, EMECParaPhysicsRegionToolCfg, FCALParaPhysicsRegionToolCfg, PreSampLArPhysicsRegionToolCfg, DeadMaterialPhysicsRegionToolCfg from G4AtlasTools.G4PhysicsRegionConfig import DriftWallPhysicsRegionToolCfg, DriftWall1PhysicsRegionToolCfg, DriftWall2PhysicsRegionToolCfg, MuonSystemFastPhysicsRegionToolCfg #the field config tools @@ -566,12 +566,14 @@ def ATLAS_RegionCreatorListCfg(flags): if flags.Sim.LArParameterization is not LArParameterization.NoFrozenShowers: regionCreatorList += [result.popToolsAndMerge(FCALParaPhysicsRegionToolCfg(flags)), result.popToolsAndMerge(FCAL2ParaPhysicsRegionToolCfg(flags))] - if flags.Sim.LArParameterization in [LArParameterization.DeadMaterialFrozenShowers, LArParameterization.FrozenShowersFCalOnly]: + if flags.Sim.LArParameterization in [LArParameterization.DeadMaterialFrozenShowers, LArParameterization.FrozenShowersFCalOnly, LArParameterization.FastCaloSim]: # TODO Check this makes sense pass #todo - add the line below regionCreatorList += [ result.popToolsAndMerge(PreSampLArPhysicsRegionToolCfg(flags)), result.popToolsAndMerge(DeadMaterialPhysicsRegionToolCfg(flags))] + if flags.Sim.LArParameterization is LArParameterization.FastCaloSim: + regionCreatorList += [result.popToolsAndMerge(CALOPhysicsRegionToolCfg(flags))] ## FIXME _initPR never called for FwdRegion?? #if simFlags.ForwardDetectors.statusOn: # if DetFlags.geometry.FwdRegion_on(): diff --git a/Simulation/G4Atlas/G4AtlasTools/python/G4PhysicsRegionConfig.py b/Simulation/G4Atlas/G4AtlasTools/python/G4PhysicsRegionConfig.py index 8bf5d98d2198131e2468717602ed53219aa751f7..885facd1ebcfb8d0ae5b62eceb117e582601a7af 100644 --- a/Simulation/G4Atlas/G4AtlasTools/python/G4PhysicsRegionConfig.py +++ b/Simulation/G4Atlas/G4AtlasTools/python/G4PhysicsRegionConfig.py @@ -196,8 +196,15 @@ def TRT_KrPhysicsRegionToolCfg(flags, name='TRT_KrPhysicsRegionTool', **kwargs): result.setPrivateTools(RegionCreator(name, **kwargs)) return result +def CALOPhysicsRegionToolCfg(flags, name='CALOPhysicsRegionTool', **kwargs): + result = ComponentAccumulator() + kwargs.setdefault("RegionName", 'CALO') + volumeList = ['CALO::CALO', 'LArMgr::LAr::Endcap::Cryostat::Cylinder::Mixed','LArMgr::LAr::Barrel::Cryostat::MotherVolume','LArMgr::ModeratorTube'] + kwargs.setdefault("VolumeList", volumeList) + result.setPrivateTools(RegionCreator(name, **kwargs)) + return result + -# Calo Regions def EMBPhysicsRegionToolCfg(flags, name='EMBPhysicsRegionTool', **kwargs): result = ComponentAccumulator() kwargs.setdefault("RegionName", 'EMB') diff --git a/Simulation/G4Utilities/G4FastSimulation/python/G4FastSimulationConfig.py b/Simulation/G4Utilities/G4FastSimulation/python/G4FastSimulationConfig.py index 815867133d319db0e8d7c971d51c52dc8c865bdf..8816dd31100e14779661cf83eaa19e2d0b8dc6c2 100644 --- a/Simulation/G4Utilities/G4FastSimulation/python/G4FastSimulationConfig.py +++ b/Simulation/G4Utilities/G4FastSimulation/python/G4FastSimulationConfig.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator from AthenaConfiguration.ComponentFactory import CompFactory @@ -16,3 +16,18 @@ def DeadMaterialShowerCfg(flags, **kwargs): kwargs.setdefault("RegionNames", ["DeadMaterial"]) result.setPrivateTools(CompFactory.DeadMaterialShowerTool(name="DeadMaterialShower", **kwargs)) return result + + +def FastCaloSimCfg(flags, **kwargs): + result = ComponentAccumulator() + # Set the parametrization service + from ISF_FastCaloSimServices.ISF_FastCaloSimServicesConfig import FastCaloSimV2ParamSvcCfg + kwargs.setdefault("ISF_FastCaloSimV2ParamSvc", result.getPrimaryAndMerge(FastCaloSimV2ParamSvcCfg(flags)).name) + # Set the FastCaloSim extrapolation tool + from ISF_FastCaloSimParametrization.ISF_FastCaloSimParametrizationConfig import FastCaloSimCaloExtrapolationCfg + kwargs.setdefault("FastCaloSimCaloExtrapolation", result.addPublicTool(result.popToolsAndMerge(FastCaloSimCaloExtrapolationCfg(flags)))) + # Name of region where FastCaloSim will be triggered + kwargs.setdefault("RegionNames", ["CALO"]) + kwargs.setdefault('CaloCellContainerSDName', "ToolSvc.SensitiveDetectorMasterTool.CaloCellContainerSD") + result.setPrivateTools(CompFactory.FastCaloSimTool(name="FastCaloSim", **kwargs)) + return result diff --git a/Simulation/ISF/ISF_Core/ISF_Algorithms/python/CollectionMergerConfig.py b/Simulation/ISF/ISF_Core/ISF_Algorithms/python/CollectionMergerConfig.py index 2a7a13b6c4a4eba31ffead7b70879fd1f6b2e262..9c38eb460cdda1334749bdcdd172a5f1f77f675e 100644 --- a/Simulation/ISF/ISF_Core/ISF_Algorithms/python/CollectionMergerConfig.py +++ b/Simulation/ISF/ISF_Core/ISF_Algorithms/python/CollectionMergerConfig.py @@ -105,7 +105,8 @@ def CollectionMergerCfg(flags, mergeable collection to.""" result = ComponentAccumulator() - if flags.Sim.ISFRun and flags.Sim.ISF.HITSMergingRequired.get(region, True): + from SimulationConfig.SimEnums import LArParameterization + if (flags.Sim.ISFRun or flags.Sim.LArParameterization is LArParameterization.FastCaloSim) and flags.Sim.ISF.HITSMergingRequired.get(region, True): mergeable_collection = f'{bare_collection_name}{mergeable_collection_suffix}' from ISF_Algorithms.CollectionMergerConfig import ISFCollectionMergerCfg diff --git a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/python/ISF_FastCaloSimParametrizationConfig.py b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/python/ISF_FastCaloSimParametrizationConfig.py index 98a12dc2bf7ff302062dc2269d6e6b2394e6ce8b..43aedcd16b256f33d2bc19ec4acc84b2f305e0ce 100644 --- a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/python/ISF_FastCaloSimParametrizationConfig.py +++ b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/python/ISF_FastCaloSimParametrizationConfig.py @@ -75,6 +75,17 @@ def FastCaloSimGeometryHelperCfg(flags, name="FastCaloSimGeometryHelper", **kwar acc.setPrivateTools(CompFactory.FastCaloSimGeometryHelper(name, **kwargs)) return acc +def CaloCellContainerSDCfg(flags, name='CaloCellContainerSD', **kwargs): + acc = ComponentAccumulator() + kwargs.setdefault ('NoVolumes', True) + kwargs.setdefault("OutputCollectionNames", ["DefaultCaloCellContainer"]) + # Add ISF_FastHitConvertTool, which will also take care + # of creating mergable FastCaloSim HIT collections + from ISF_FastCaloSimServices.ISF_FastCaloSimServicesConfig import FastHitConvertToolCfg + kwargs.setdefault("FastHitConvertTool", acc.addPublicTool(acc.popToolsAndMerge(FastHitConvertToolCfg(flags)))) + acc.setPrivateTools(CompFactory.CaloCellContainerSDTool(name, **kwargs)) + return acc + def ISF_FastCaloSimParametrization_SimPreInclude(flags): flags.Sim.RecordStepInfo=True from SimulationConfig.SimEnums import VertexSource,LArParameterization,CalibrationRun diff --git a/Simulation/SimuJobTransforms/python/CommonSimulationSteering.py b/Simulation/SimuJobTransforms/python/CommonSimulationSteering.py index 1729a565f10ac3aa6cc75407089ca2ae133dcb6b..8ecbd9e54cca056cada4e138947a1bdb46d0f1e7 100644 --- a/Simulation/SimuJobTransforms/python/CommonSimulationSteering.py +++ b/Simulation/SimuJobTransforms/python/CommonSimulationSteering.py @@ -119,6 +119,14 @@ def CommonSimulationCfg(flags, log): #add the G4AtlasAlg from G4AtlasAlg.G4AtlasAlgConfig import G4AtlasAlgCfg cfg.merge(G4AtlasAlgCfg(flags)) + from SimulationConfig.SimEnums import LArParameterization + if flags.Sim.LArParameterization is LArParameterization.FastCaloSim: + cfg.getEventAlgo("ISF_CollectionMerger").InputLArEMBHits.data.sort() # temporary workaround + cfg.getEventAlgo("ISF_CollectionMerger").InputLArEMECHits.data.sort() # temporary workaround + cfg.getEventAlgo("ISF_CollectionMerger").InputLArFCALHits.data.sort() # temporary workaround + cfg.getEventAlgo("ISF_CollectionMerger").InputLArHECHits.data.sort() # temporary workaround + cfg.getEventAlgo("ISF_CollectionMerger").InputTileHits.data.sort() # temporary workaround + cfg.getEventAlgo("ISF_CollectionMerger").InputMBTSHits.data.sort() # temporary workaround from SimulationConfig.SimEnums import CalibrationRun if flags.Sim.CalibrationRun in [CalibrationRun.LAr, CalibrationRun.LArTile, CalibrationRun.LArTileZDC]: diff --git a/Simulation/SimuJobTransforms/python/G4AtlasAlg_Skeleton.py b/Simulation/SimuJobTransforms/python/G4AtlasAlg_Skeleton.py index dfe92e7ab17def7bbfcb55c38817c97965b33749..c95f941b6d7ca4fd7adb85592d8a729599a37441 100644 --- a/Simulation/SimuJobTransforms/python/G4AtlasAlg_Skeleton.py +++ b/Simulation/SimuJobTransforms/python/G4AtlasAlg_Skeleton.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration import sys from PyJobTransforms.CommonRunArgsToFlags import commonRunArgsToFlags diff --git a/Simulation/SimuJobTransforms/python/SimulationHelpers.py b/Simulation/SimuJobTransforms/python/SimulationHelpers.py index e744b4a5f3518d5047ecb4e3691addfb56b25a73..32646e605939816e28b007fc3e873a3b372b9c3a 100644 --- a/Simulation/SimuJobTransforms/python/SimulationHelpers.py +++ b/Simulation/SimuJobTransforms/python/SimulationHelpers.py @@ -1,5 +1,5 @@ -# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration -from SimulationConfig.SimEnums import BeamPipeSimMode, CalibrationRun, CavernBackground, LArParameterization +# Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration +from SimulationConfig.SimEnums import BeamPipeSimMode, CalibrationRun, CavernBackground, LArParameterization, SimulationFlavour def getDetectorsFromRunArgs(flags, runArgs): @@ -76,7 +76,6 @@ def enableCalHitsZDC(flags): flags.Sim.PRRThreshold = False flags.Sim.PRRWeight = False - def enableCalHitsAll(flags): """Turns on calibration hits for LAr, Tile and ZDC""" flags.Sim.CalibrationRun = CalibrationRun.LArTileZDC @@ -96,3 +95,11 @@ def enableParticleID(flags): def enableVerboseSelector(flags): """ """ flags.Sim.OptionalUserActionList += ['G4DebuggingTools.G4DebuggingToolsConfig.VerboseSelectorToolCfg'] + +def enableFastCaloSim(flags): + # Set LArParametrization to FastCaloSim + flags.Sim.LArParameterization = LArParameterization.FastCaloSim + # Deacticate dead material hits for calibration run + flags.Sim.CalibrationRun = CalibrationRun.Off + # Set simulator name as metadata + flags.Sim.ISF.Simulator = SimulationFlavour.ATLFAST3MT \ No newline at end of file diff --git a/Simulation/SimuJobTransforms/python/__init__.py b/Simulation/SimuJobTransforms/python/__init__.py index a52e158aa6f2b7b30df1b6085ea7bfcd817275a1..231fd495ff97dea2b3fe917ff9e4941146b872b9 100644 --- a/Simulation/SimuJobTransforms/python/__init__.py +++ b/Simulation/SimuJobTransforms/python/__init__.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration from .SimulationHelpers import enableFrozenShowersFCalOnly as FrozenShowersFCalOnly from .SimulationHelpers import enableBeamPipeKill as BeamPipeKill @@ -6,5 +6,6 @@ from .SimulationHelpers import enableTightMuonStepping as TightMuonStepping from .SimulationHelpers import enableG4SignalCavern as G4SignalCavern from .SimulationHelpers import enableCalHits as CalHits from .SimulationHelpers import enableParticleID as ParticleID +from .SimulationHelpers import enableFastCaloSim as FastCaloSim -__all__ = ['FrozenShowersFCalOnly', 'BeamPipeKill', 'TightMuonStepping', 'G4SignalCavern', 'CalHits', 'ParticleID'] +__all__ = ['FrozenShowersFCalOnly', 'BeamPipeKill', 'TightMuonStepping', 'G4SignalCavern', 'CalHits', 'ParticleID', 'FastCaloSim'] diff --git a/Simulation/SimulationConfig/python/SimConfigFlags.py b/Simulation/SimulationConfig/python/SimConfigFlags.py index da2576284c5fe18879ecf61835837fb005267f5e..9bd717fcb047fc202d5c03f9bb58e67eb8d460f3 100644 --- a/Simulation/SimulationConfig/python/SimConfigFlags.py +++ b/Simulation/SimulationConfig/python/SimConfigFlags.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration from AthenaConfiguration.AthConfigFlags import AthConfigFlags, isGaudiEnv from AthenaConfiguration.AutoConfigFlags import GetFileMD @@ -205,7 +205,7 @@ def createSimConfigFlags(): def _decideHITSMerging(prevFlags): # Further specialization possible in future - if prevFlags.Sim.ISF.Simulator.isFullSim(): + if prevFlags.Sim.ISF.Simulator.isFullSim() and prevFlags.Sim.LArParameterization!=LArParameterization.FastCaloSim: doID = False doITk = False doCALO = False @@ -215,7 +215,7 @@ def createSimConfigFlags(): doITk = True doCALO = True doMUON = True - elif prevFlags.Sim.ISF.Simulator.usesFastCaloSim(): + elif prevFlags.Sim.ISF.Simulator.usesFastCaloSim() or prevFlags.Sim.LArParameterization is LArParameterization.FastCaloSim: doID = False doITk = False doCALO = True diff --git a/Simulation/Tests/SimCoreTestsMT/test/test_AtlasG4_FastCaloSim_MT.sh b/Simulation/Tests/SimCoreTestsMT/test/test_AtlasG4_FastCaloSim_MT.sh index a6200f8a18f522411b8bc1a2a71e27a3d0af0c02..5a0020431491b1ca032170f1dc7229ad52b26c3b 100755 --- a/Simulation/Tests/SimCoreTestsMT/test/test_AtlasG4_FastCaloSim_MT.sh +++ b/Simulation/Tests/SimCoreTestsMT/test/test_AtlasG4_FastCaloSim_MT.sh @@ -17,23 +17,67 @@ AtlasG4_tf.py \ --skipEvents '0' \ --preInclude 'SimulationJobOptions/preInclude.FastCaloSim.py,Campaigns/MC21Simulation.py' \ --postInclude 'default:PyJobTransforms/UseFrontier.py' \ - --postExec 'sim:topSeq.BeamEffectsAlg.ISFRun=True' \ + --postExec 'sim:topSeq.BeamEffectsAlg.ISFRun=True;topSeq+=CfgMgr.JobOptsDumperAlg(FileName="LegacyConfig.txt")' \ --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.HITS.pool.root" \ - --physicsList="FTFP_BERT_ATL" \ - --conditionsTag "default:OFLCOND-MC21-SDR-RUN3-07" \ - --geometryVersion="default:ATLAS-R3S-2021-03-00-00" \ + --physicsList="FTFP_BERT_ATL" \ + --conditionsTag "default:OFLCOND-MC21-SDR-RUN3-07" \ + --geometryVersion="default:ATLAS-R3S-2021-03-00-00" \ --imf False; rc=$? +status=$rc +echo "art-result: $rc simOLD" +cp log.AtlasG4Tf log.AtlasG4Tf_OLD + +AtlasG4_tf.py \ + --CA \ + --multithreaded \ + --randomSeed '10' \ + --maxEvents '20' \ + --skipEvents '0' \ + --preInclude 'sim:Campaigns.MC21Simulation,SimuJobTransforms.FastCaloSim' \ + --postInclude 'default:PyJobTransforms.UseFrontier' \ + --postExec 'sim:cfg.addEventAlgo(CompFactory.JobOptsDumperAlg(FileName="CAConfig.txt"))' \ + --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.HITS.CA.pool.root" \ + --physicsList="FTFP_BERT_ATL" \ + --conditionsTag "default:OFLCOND-MC21-SDR-RUN3-07" \ + --geometryVersion="default:ATLAS-R3S-2021-03-00-00" \ + --imf False; + +rc1=$? +if [ $status -eq 0 ] +then + status=$rc1 +fi +echo "art-result: $rc1 simCA" +cp log.AtlasG4Tf log.AtlasG4Tf_CA + +rc4=-9999 +if [ $rc -eq 0 ] && [ $rc1 -eq 0 ] +then + acmd.py diff-root test.HITS.pool.root test.HITS.CA.pool.root --error-mode resilient --mode=semi-detailed --order-trees + rc4=$? + status=$rc4 +fi +echo "art-result: $rc4 HITS_OLDvsCA" + + + rc2=-9999 -echo "art-result: $rc simulation" if [ $rc -eq 0 ] then ArtPackage=$1 ArtJobName=$2 art.py compare grid --entries 20 ${ArtPackage} ${ArtJobName} --mode=semi-detailed --order-trees rc2=$? + if [ $status -eq 0 ] + then + status=$rc2 + fi fi echo "art-result: $rc2 regression" + +exit $status diff --git a/Simulation/Tests/SimCoreTestsMT/test/test_AtlasG4_FastCaloSim_MTvsST.sh b/Simulation/Tests/SimCoreTestsMT/test/test_AtlasG4_FastCaloSim_MTvsST.sh index da9def9a78874516a766eb28e7c7c66b52e35d4e..8035d10fa5862c11be46030b2ad76d7be90abfca 100755 --- a/Simulation/Tests/SimCoreTestsMT/test/test_AtlasG4_FastCaloSim_MTvsST.sh +++ b/Simulation/Tests/SimCoreTestsMT/test/test_AtlasG4_FastCaloSim_MTvsST.sh @@ -14,53 +14,68 @@ export ATHENA_CORE_NUMBER=8 AtlasG4_tf.py \ ---multithreaded \ ---randomSeed '10' \ ---maxEvents '20' \ ---skipEvents '0' \ ---preInclude 'SimulationJobOptions/preInclude.FastCaloSim.py,Campaigns/MC21Simulation.py' \ ---postInclude 'default:PyJobTransforms/UseFrontier.py' \ ---postExec 'sim:topSeq.BeamEffectsAlg.ISFRun=True' \ ---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.MT.HITS.pool.root" \ ---physicsList="FTFP_BERT_ATL" \ ---conditionsTag "default:OFLCOND-MC21-SDR-RUN3-07" \ ---geometryVersion="default:ATLAS-R3S-2021-03-00-00" \ ---preExec 'AtlasG4Tf:simFlags.ReleaseGeoModel=False;' \ ---imf False; - + --CA \ + --multithreaded \ + --randomSeed '10' \ + --maxEvents '20' \ + --skipEvents '0' \ + --preInclude 'sim:Campaigns.MC21Simulation,SimuJobTransforms.FastCaloSim' \ + --postInclude 'default:PyJobTransforms.UseFrontier' \ + --postExec 'sim:cfg.addEventAlgo(CompFactory.JobOptsDumperAlg(FileName="CAConfig.txt"))' \ + --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.HITS.MT.pool.root" \ + --physicsList="FTFP_BERT_ATL" \ + --conditionsTag "default:OFLCOND-MC21-SDR-RUN3-07" \ + --geometryVersion="default:ATLAS-R3S-2021-03-00-00" \ + --imf False; rc=$? +status=$rc echo "art-result: $rc MTsim" -rc2=-9999 -if [ $rc -eq 0 ] -then - ArtPackage=$1 - ArtJobName=$2 - unset ATHENA_CORE_NUMBER - AtlasG4_tf.py \ + +unset ATHENA_CORE_NUMBER +AtlasG4_tf.py \ + --CA \ --randomSeed '10' \ --maxEvents '20' \ --skipEvents '0' \ - --preInclude 'SimulationJobOptions/preInclude.FastCaloSim.py,Campaigns/MC21Simulation.py' \ - --postInclude 'default:PyJobTransforms/UseFrontier.py' \ - --postExec 'sim:topSeq.BeamEffectsAlg.ISFRun=True' \ + --preInclude 'sim:Campaigns.MC21Simulation,SimuJobTransforms.FastCaloSim' \ + --postInclude 'default:PyJobTransforms.UseFrontier' \ + --postExec 'sim:cfg.addEventAlgo(CompFactory.JobOptsDumperAlg(FileName="CAConfig.txt"))' \ --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.ST.HITS.pool.root" \ - --physicsList="FTFP_BERT_ATL" \ - --conditionsTag "default:OFLCOND-MC21-SDR-RUN3-07" \ - --geometryVersion="default:ATLAS-R3S-2021-03-00-00" \ - --preExec 'AtlasG4Tf:simFlags.ReleaseGeoModel=False;' \ + --outputHITSFile="test.HITS.ST.pool.root" \ + --physicsList="FTFP_BERT_ATL" \ + --conditionsTag "default:OFLCOND-MC21-SDR-RUN3-07" \ + --geometryVersion="default:ATLAS-R3S-2021-03-00-00" \ --imf False; - rc2=$? +rc2=$? +if [ $status -eq 0 ] +then + status=$rc2 fi echo "art-result: $rc2 STsim" + rc3=-9999 -if [ $rc2 -eq 0 ] +if [ $status -eq 0 ] then - acmd.py diff-root test.MT.HITS.pool.root test.ST.HITS.pool.root --error-mode resilient --mode=semi-detailed --order-trees --ignore-leaves RecoTimingObj_p1_EVNTtoHITS_timings index_ref + acmd.py diff-root test.MT.HITS.pool.root test.ST.HITS.pool.root --error-mode resilient --mode=semi-detailed --order-trees rc3=$? + status=$rc3 fi echo "art-result: $rc3 comparision" +rc4=-9999 +if [ $rc -eq 0 ] +then + ArtPackage=$1 + ArtJobName=$2 + art.py compare grid --entries 20 ${ArtPackage} ${ArtJobName} --mode=semi-detailed --order-trees --file=test.MT.HITS.pool.root + rc4=$? + if [ $status -eq 0 ] + then + status=$rc4 + fi +fi +echo "art-result: $rc4 regression" +exit $status diff --git a/TileCalorimeter/TileConditions/python/TileSamplingFractionConfig.py b/TileCalorimeter/TileConditions/python/TileSamplingFractionConfig.py index 2b42b400e546c7084af261531c89769f2885742f..819fb540f5d0e3ab948c92ffe8cff8e54b675ee1 100644 --- a/TileCalorimeter/TileConditions/python/TileSamplingFractionConfig.py +++ b/TileCalorimeter/TileConditions/python/TileSamplingFractionConfig.py @@ -32,7 +32,8 @@ def TileSamplingFractionCondAlgCfg(flags, **kwargs): samplingFractionProxy = TileCondProxyCoolFlt('TileCondProxyCool_SamplingFraction', Source = samplingFractionFolder) samplingFractionTag = None # Tag connected to global conditions tag is used by default - if flags.GeoModel.Run >= LHCPeriod.Run4 or flags.Overlay.DataOverlay or flags.Sim.ISF.Simulator.usesFastCaloSim(): + from SimulationConfig.SimEnums import LArParameterization + if flags.GeoModel.Run >= LHCPeriod.Run4 or flags.Overlay.DataOverlay or flags.Sim.ISF.Simulator.usesFastCaloSim() or flags.Sim.LArParameterization is LArParameterization.FastCaloSim: samplingFractionTag = 'TileOfl02CalibSfr-SIM-07' from IOVDbSvc.IOVDbSvcConfig import addFolders