diff --git a/Simulation/ISF/ISF_Fatras/ISF_FatrasServices/python/ISF_FatrasConfig.py b/Simulation/ISF/ISF_Fatras/ISF_FatrasServices/python/ISF_FatrasConfig.py new file mode 100644 index 0000000000000000000000000000000000000000..8916d22761bad1fd1257aa56ba2717ac34b4707b --- /dev/null +++ b/Simulation/ISF/ISF_Fatras/ISF_FatrasServices/python/ISF_FatrasConfig.py @@ -0,0 +1,552 @@ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration + +__doc__ = "New configuration for the ISF_FatrasSimTool" + +from AthenaCommon.Logging import logging +from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator +from AthenaConfiguration.ComponentFactory import CompFactory +from ISF_Algorithms.collection_merger_helpers import generate_mergeable_collection_name + +################################################################################ +# HIT CREATION SECTION +################################################################################ + +# Fatras Hadronic Interaction Processor +# hadronic interaction creator + + +def fatrasHitCreatorPixelCfg(flags, name="ISF_FatrasHitCreatorPixel", **kwargs): + """Return ISF_FatrasHitCreatorPixel configured with ComponentAccumulator""" + mlog = logging.getLogger(name) + mlog.debug('Start configuration') + + acc = ComponentAccumulator() + + hits_collection_name = generate_mergeable_collection_name(bare_collection_name="PixelHits", + mergeable_collection_suffix="_Fatras", + merger_input_property="PixelHits") + + kwargs.setdefault("IdHelperName", 'PixelID') + kwargs.setdefault("CollectionName", hits_collection_name) + + # NOTE why it is here ? + # FastHitConvertTool = CompFactory.FastHitConvertTool + kwargs.setdefault("UseConditionsTool", False) + + iFatras__HitCreatorSilicon = CompFactory.iFatras.HitCreatorSilicon + acc.addPublicTool(iFatras__HitCreatorSilicon(name=name, **kwargs)) + return acc + + +def fatrasHitCreatorSCTCfg(flags, name="ISF_FatrasHitCreatorSCT", **kwargs): + """Return ISF_FatrasHitCreatorSCT configured with ComponentAccumulator""" + mlog = logging.getLogger(name) + mlog.debug('Start configuration') + + acc = ComponentAccumulator() + + hits_collection_name = generate_mergeable_collection_name(bare_collection_name="SCT_Hits", + mergeable_collection_suffix="_Fatras", + merger_input_property="SCTHits") + kwargs.setdefault("IdHelperName", 'SCT_ID') + kwargs.setdefault("CollectionName", hits_collection_name) + kwargs.setdefault("UseConditionsTool", False) + + iFatras__HitCreatorSilicon = CompFactory.iFatras.HitCreatorSilicon + acc.addPublicTool(iFatras__HitCreatorSilicon(name=name, **kwargs)) + return acc + + +def fatrasHitCreatorTRTCfg(flags, name="ISF_FatrasHitCreatorTRT", **kwargs): + mlog = logging.getLogger(name) + mlog.debug('Start configuration') + + acc = ComponentAccumulator() + + hits_collection_name = generate_mergeable_collection_name(bare_collection_name="TRTUncompressedHits", + mergeable_collection_suffix="_Fatras", + merger_input_property="TRTUncompressedHits") + kwargs.setdefault("CollectionName", hits_collection_name) + + iFatras__HitCreatorTRT = CompFactory.iFatras.HitCreatorTRT + acc.addPublicTool(iFatras__HitCreatorTRT(name=name, **kwargs)) + return acc + + +################################################################################ +# TRACK CREATION SECTION +################################################################################ + +def fatrasSimHitCreatorIDCfg(flags, name="ISF_FatrasSimHitCreatorID", **kwargs): + """Return ISF_FatrasSimHitCreatorID configured with ComponentAccumulator""" + + mlog = logging.getLogger(name) + mlog.debug('Start configuration') + + result = ComponentAccumulator() + + acc = fatrasHitCreatorPixelCfg(flags) + pixel_hit_cfg = acc.getPublicTool('ISF_FatrasHitCreatorPixel') + result.merge(acc) + kwargs.setdefault("PixelHitCreator", pixel_hit_cfg) + + acc = fatrasHitCreatorSCTCfg(flags) + sct_hit_cfg = acc.getPublicTool('ISF_FatrasHitCreatorSCT') + result.merge(acc) + kwargs.setdefault("SctHitCreator", sct_hit_cfg) + + acc = fatrasHitCreatorTRTCfg(flags) + trt_hit_cfg = acc.getPublicTool("ISF_FatrasHitCreatorTRT") + result.merge(acc) + kwargs.setdefault("TrtHitCreator", trt_hit_cfg) + + kwargs.setdefault("OutputLevel", 3) + + iFatras__SimHitCreatorID = CompFactory.iFatras.SimHitCreatorID + result.addPublicTool(iFatras__SimHitCreatorID(name=name, **kwargs)) + return result + + +def fatrasSimHitCreatorMSCfg(flags, name="ISF_FatrasSimHitCreatorMS", **kwargs): + """Return ISF_FatrasSimHitCreatorMS configured with ComponentAccumulator""" + + mlog = logging.getLogger(name) + mlog.debug('Start configuration') + + result = ComponentAccumulator() + + mergeable_collection_suffix = "_Fatras" + + mdt_hits_collection_name = generate_mergeable_collection_name(bare_collection_name="MDT_Hits", + mergeable_collection_suffix=mergeable_collection_suffix, + merger_input_property="MDTHits") + + rpc_hits_collection_name = generate_mergeable_collection_name(bare_collection_name="RPC_Hits", + mergeable_collection_suffix=mergeable_collection_suffix, + merger_input_property="RPCHits") + + tgc_hits_collection_name = generate_mergeable_collection_name(bare_collection_name="TGC_Hits", + mergeable_collection_suffix=mergeable_collection_suffix, + merger_input_property="TGCHits") + + csc_hits_collection_name = generate_mergeable_collection_name(bare_collection_name="CSC_Hits", + mergeable_collection_suffix=mergeable_collection_suffix, + merger_input_property="CSCHits") + + ##### + # Extrapolator from ACTS to be added + # kwargs.setdefault("Extrapolator" , getPublicTool('ISF_FatrasExtrapolator')) + ##### + kwargs.setdefault("MDTCollectionName", mdt_hits_collection_name) + kwargs.setdefault("RPCCollectionName", rpc_hits_collection_name) + kwargs.setdefault("TGCCollectionName", tgc_hits_collection_name) + kwargs.setdefault("CSCCollectionName", csc_hits_collection_name) + + Muon__MuonTGMeasurementTool = CompFactory.Muon.MuonTGMeasurementTool + muon_tgmeasurement_tool = Muon__MuonTGMeasurementTool(name='MuonTGMeasurementTool', + UseDSManager=True) + result.addPublicTool(muon_tgmeasurement_tool) + kwargs.setdefault("MeasurementTool", muon_tgmeasurement_tool) + + iFatras__SimHitCreatorMS = CompFactory.iFatras.SimHitCreatorMS + result.addPublicTool(iFatras__SimHitCreatorMS(name=name, **kwargs)) + return result + + +def fatrasPdgG4ParticleCfg(flags, name="ISF_FatrasPdgG4Particle", **kwargs): + mlog = logging.getLogger(name) + mlog.debug('Start configuration') + + result = ComponentAccumulator() + + iFatras__PDGToG4Particle = CompFactory.iFatras.PDGToG4Particle + result.addPublicTool(iFatras__PDGToG4Particle(name=name, **kwargs)) + return result + +###################################################################################### +# validation & process sampling +###################################################################################### + + +def fatrasPhysicsValidationToolCfg(flags, name="ISF_FatrasPhysicsValidationTool", **kwargs): + mlog = logging.getLogger(name) + mlog.debug('Start configuration') + + result = ComponentAccumulator() + kwargs.setdefault("ValidationStreamName", "ISFFatras") + + iFatras__PhysicsValidationTool = CompFactory.iFatras.PhysicsValidationTool + result.addPublicTool(iFatras__PhysicsValidationTool(name=name, **kwargs)) + return result + + +def G4RunManagerHelperCfg(flags, name="ISF_G4RunManagerHelper", **kwargs): + mlog = logging.getLogger(name) + mlog.debug('Start configuration') + + result = ComponentAccumulator() + + iGeant4__G4RunManagerHelper = CompFactory.iGeant4.G4RunManagerHelper + result.addPublicTool(iGeant4__G4RunManagerHelper(name=name, **kwargs)) + + return result + + +def fatrasParticleHelperCfg(flags, name="ISF_ParticleHelper", **kwargs): + mlog = logging.getLogger(name) + mlog.debug('Start configuration') + + result = ComponentAccumulator() + + ISF__ParticleHelper = CompFactory.ISF.ParticleHelper + result.addPublicTool(ISF__ParticleHelper(name=name, **kwargs)) + + return result + + +def fatrasParticleDecayHelperCfg(flags, name="ISF_FatrasParticleDecayHelper", **kwargs): + mlog = logging.getLogger(name) + mlog.debug('Start configuration') + + result = ComponentAccumulator() + + acc = fatrasPdgG4ParticleCfg(flags) + pdg_g4part_cfg = acc.getPublicTool('ISF_FatrasPdgG4Particle') + result.merge(acc) + kwargs.setdefault("PDGToG4ParticleConverter", pdg_g4part_cfg) + + acc = fatrasPhysicsValidationToolCfg(flags) + phys_val_cfg = acc.getPublicTool('ISF_FatrasPhysicsValidationTool') + result.merge(acc) + kwargs.setdefault("PhysicsValidationTool", phys_val_cfg) + + acc = G4RunManagerHelperCfg(flags) + g4run_man_cfg = acc.getPublicTool('ISF_G4RunManagerHelper') + result.merge(acc) + kwargs.setdefault("PDGToG4ParticleConverter", g4run_man_cfg) + + iFatras__G4ParticleDecayHelper = CompFactory.iFatras.G4ParticleDecayHelper + result.addPublicTool(iFatras__G4ParticleDecayHelper(name=name, **kwargs)) + + return result + +################################################################################ +# Extrapolator +################################################################################ +# the definition of an extrapolator (to be cleaned up) +def fatrasNavigatorCfg(flags, name="ISF_FatrasNavigator", **kwargs): + mlog = logging.getLogger(name) + mlog.debug('Start configuration') + + result = ComponentAccumulator() + + from TrkConfig.AtlasTrackingGeometrySvcConfig import TrackingGeometrySvcCfg + acc = TrackingGeometrySvcCfg(flags) + kwargs.setdefault("TrackingGeometrySvc", acc.getPrimary()) + result.merge(acc) + + Trk__Navigator = CompFactory.Trk.Navigator + result.addPublicTool(Trk__Navigator(name=name, **kwargs)) + + return result + +def fatrasEnergyLossUpdatorCfg(flags, name="ISF_FatrasEnergyLossUpdator", **kwargs): + mlog = logging.getLogger(name) + mlog.debug('Start configuration') + + result = ComponentAccumulator() + + kwargs.setdefault("UsePDG_EnergyLossFormula", True) + kwargs.setdefault("EnergyLossDistribution", 2) + + iFatras__McEnergyLossUpdator = CompFactory.iFatras.McEnergyLossUpdator + result.addPublicTool(iFatras__McEnergyLossUpdator(name=name, **kwargs)) + + return result + +def fatrasMultipleScatteringUpdatorCfg(flags, name="ISF_FatrasMultipleScatteringUpdator", **kwargs): + mlog = logging.getLogger(name) + mlog.debug('Start configuration') + + result = ComponentAccumulator() + kwargs.setdefault("GaussianMixtureModel", True) + + Trk__MultipleScatteringUpdator = CompFactory.Trk.MultipleScatteringUpdator + result.addPublicTool(Trk__MultipleScatteringUpdator(name=name, **kwargs)) + + return result + +# Combining all in the MaterialEffectsUpdator +def fatrasMaterialUpdatorCfg(flags, name="ISF_FatrasMaterialUpdator", **kwargs): + mlog = logging.getLogger(name) + mlog.debug('Start configuration') + + result = ComponentAccumulator() + + # Geometry Svc + from TrkConfig.AtlasTrackingGeometrySvcConfig import TrackingGeometrySvcCfg + acc = TrackingGeometrySvcCfg(flags) + kwargs.setdefault("TrackingGeometrySvc", acc.getPrimary()) + result.merge(acc) + + # hadronic interactions + kwargs.setdefault("HadronicInteraction", True) + acc = fatrasG4HadIntProcessorCfg(flags) + g4had_proc_cfg = acc.getPublicTool('ISF_FatrasG4HadIntProcessor') + kwargs.setdefault("HadronicInteractionProcessor", g4had_proc_cfg) + result.merge(acc) + + # energy loss + kwargs.setdefault("EnergyLoss", True) + acc = fatrasEnergyLossUpdatorCfg(flags) + eloss_updator = acc.getPublicTool('ISF_FatrasEnergyLossUpdator') + kwargs.setdefault("EnergyLossUpdator", eloss_updator) + result.merge(acc) + + # mutiple scattering + kwargs.setdefault("MultipleScattering", True) + acc = fatrasMultipleScatteringUpdatorCfg(flags) + multi_scattering_updator = acc.getPublicTool('ISF_FatrasMultipleScatteringUpdator') + kwargs.setdefault("MultipleScatteringUpdator", multi_scattering_updator) + result.merge(acc) + + # photon conversion + acc = fatrasConversionCreatorCfg(flags) + ph_conv_cfg = acc.getPublicTool('ISF_FatrasConversionCreator') + result.merge(acc) + kwargs.setdefault("PhotonConversionTool", ph_conv_cfg) + + # the validation output + ## NOTE to be checked + ### kwargs.setdefault("ValidationMode", ISF_Flags.ValidationMode()) + + acc = fatrasPhysicsValidationToolCfg(flags) + phys_val_cfg = acc.getPublicTool('ISF_FatrasPhysicsValidationTool') + result.merge(acc) + kwargs.setdefault("PhysicsValidationTool", phys_val_cfg) + + acc = fatrasProcessSamplingToolCfg(flags) + proc_samp_cfg = acc.getPublicTool('ISF_FatrasProcessSamplingTool') + result.merge(acc) + kwargs.setdefault("ProcessSamplingTool", proc_samp_cfg) + + acc = fatrasParticleDecayHelperCfg(flags) + pdhelper_cfg = acc.getPublicTool('ISF_FatrasParticleDecayHelper') + result.merge(acc) + kwargs.setdefault("ParticleDecayHelper", pdhelper_cfg) + + + iFatras__McMaterialEffectsUpdator = CompFactory.iFatras.McMaterialEffectsUpdator + result.addPublicTool(iFatras__McMaterialEffectsUpdator(name=name, **kwargs)) + + return result + +def fatrasChargedPropagatorCfg(flags, name="ISF_FatrasChargedPropagator", **kwargs): + mlog = logging.getLogger(name) + mlog.debug('Start configuration') + + result = ComponentAccumulator() + # the charged particle propagator + ChargedPropagator = CompFactory.Trk.RungeKuttaPropagator + result.addPublicTool(ChargedPropagator(name=name, **kwargs)) + + return result + +def fatrasSTEP_PropagatorCfg(flags, name="ISF_FatrasSTEP_Propagator", **kwargs): + mlog = logging.getLogger(name) + mlog.debug('Start configuration') + + result = ComponentAccumulator() + kwargs.setdefault("SimulationMode", True) + + acc = fatrasMaterialUpdatorCfg(flags) + material_updator = acc.getPublicTool('ISF_FatrasMaterialUpdator') + result.merge(acc) + kwargs.setdefault("SimMatEffUpdator", material_updator) + + # the step propagaor + StepPropagator = CompFactory.Trk.STEP_Propagator + result.addPublicTool(StepPropagator(name=name, **kwargs)) + + return result + + +def fatrasExtrapolatorCfg(flags, name="ISF_FatrasExtrapolator", **kwargs): + mlog = logging.getLogger(name) + mlog.debug('Start configuration') + + result = ComponentAccumulator() + + # Charged Transport Tool + # assign the tools + acc = fatrasNavigatorCfg(flags) + navigator = acc.getPublicTool('ISF_FatrasNavigator') + result.merge(acc) + kwargs.setdefault("Navigator", navigator) + + acc = fatrasMaterialUpdatorCfg(flags) + material_updator = acc.getPublicTool('ISF_FatrasMaterialUpdator') + result.merge(acc) + kwargs.setdefault("MaterialEffectsUpdators", [material_updator]) + + acc = fatrasChargedPropagatorCfg(flags) + charged_propagator = acc.getPublicTool('ISF_FatrasChargedPropagator') + result.merge(acc) + kwargs.setdefault("Propagators", [charged_propagator]) + + acc = fatrasSTEP_PropagatorCfg(flags) + step_propagator = acc.getPublicTool('ISF_FatrasSTEP_Propagator') + result.merge(acc) + kwargs.setdefault("STEP_Propagator", step_propagator) + + # Fatras specific: stop the trajectory + kwargs.setdefault("StopWithNavigationBreak", True) + kwargs.setdefault("StopWithUpdateKill", True) + kwargs.setdefault("ResolveMuonStation", True) + kwargs.setdefault("UseMuonMatApproximation", True) + + TimedExtrapolator = CompFactory.Trk.TimedExtrapolator + result.addPublicTool(TimedExtrapolator(name=name, **kwargs)) + + return result + +################################################################################ +# SIMULATION TOOL and SERVICE +################################################################################ + +def fatrasKinematicFilterCfg(flags, name="ISF_FatrasKinematicFilter", **kwargs): + mlog = logging.getLogger(name) + mlog.debug('Start configuration') + + result = ComponentAccumulator() + + kwargs.setdefault("MaxEtaSymmetric", 10.) + + ISF__KinematicParticleFilter = CompFactory.ISF.KinematicParticleFilter + result.addPublicTool(ISF__KinematicParticleFilter(name=name, **kwargs)) + + return result + + +def fatrasConversionCreatorCfg(flags, name="ISF_FatrasConversionCreator", **kwargs): + + mlog = logging.getLogger(name) + mlog.debug('Start configuration') + + result = ComponentAccumulator() + + acc = fatrasPhysicsValidationToolCfg(flags) + phys_val_cfg = acc.getPublicTool('ISF_FatrasPhysicsValidationTool') + result.merge(acc) + kwargs.setdefault("PhysicsValidationTool", phys_val_cfg) + + iFatras__PhotonConversionTool = CompFactory.iFatras.PhotonConversionTool + result.addPublicTool(iFatras__PhotonConversionTool(name=name, **kwargs)) + + return result + + +def fatrasG4HadIntProcessorCfg(flags, name="ISF_FatrasG4HadIntProcessor", **kwargs): + mlog = logging.getLogger(name) + mlog.debug('Start configuration') + + result = ComponentAccumulator() + + acc = fatrasPhysicsValidationToolCfg(flags) + phys_val_cfg = acc.getPublicTool('ISF_FatrasPhysicsValidationTool') + result.merge(acc) + kwargs.setdefault("PhysicsValidationTool", phys_val_cfg) + + iFatras__G4HadIntProcessor = CompFactory.iFatras.G4HadIntProcessor + result.addPublicTool(iFatras__G4HadIntProcessor(name=name, **kwargs)) + + return result + + +def fatrasProcessSamplingToolCfg(flags, name="ISF_FatrasProcessSamplingTool", **kwargs): + mlog = logging.getLogger(name) + mlog.debug('Start configuration') + + result = ComponentAccumulator() + + # decays + acc = fatrasParticleDecayHelperCfg(flags) + pd_helper_cfg = acc.getPublicTool('ISF_FatrasParticleDecayHelper') + result.merge(acc) + kwargs.setdefault("ParticleDecayHelper", pd_helper_cfg) + + # photon conversion + acc = fatrasConversionCreatorCfg(flags) + ph_conv_cfg = acc.getPublicTool('ISF_FatrasConversionCreator') + result.merge(acc) + kwargs.setdefault("PhotonConversionTool", ph_conv_cfg) + + # Hadronic interactions + acc = fatrasG4HadIntProcessorCfg(flags) + g4had_proc_cfg = acc.getPublicTool('ISF_FatrasG4HadIntProcessor') + result.merge(acc) + kwargs.setdefault("HadronicInteractionProcessor", g4had_proc_cfg) + + # Validation Tool + acc = fatrasPhysicsValidationToolCfg(flags) + phys_val_cfg = acc.getPublicTool('ISF_FatrasPhysicsValidationTool') + result.merge(acc) + kwargs.setdefault("PhysicsValidationTool", phys_val_cfg) + + iFatras__ProcessSamplingTool = CompFactory.iFatras.ProcessSamplingTool + result.addPublicTool(iFatras__ProcessSamplingTool(name=name, **kwargs)) + + return result + + +def fatrasSimToolCfg(flags, name="ISF_FatrasSimTool", **kwargs): + mlog = logging.getLogger(name) + mlog.debug('Start configuration') + + result = ComponentAccumulator() + + acc = fatrasSimHitCreatorIDCfg(flags) + id_cfg = acc.getPublicTool('ISF_FatrasSimHitCreatorID') + result.merge(acc) + kwargs.setdefault("SimHitCreatorID", id_cfg) + + acc = fatrasSimHitCreatorMSCfg(flags) + ms_cfg = acc.getPublicTool('ISF_FatrasSimHitCreatorMS') + result.merge(acc) + kwargs.setdefault("SimHitCreatorMS", ms_cfg) + + acc = fatrasParticleDecayHelperCfg(flags) + pdhelper_cfg = acc.getPublicTool('ISF_FatrasParticleDecayHelper') + result.merge(acc) + kwargs.setdefault("ParticleDecayHelper", pdhelper_cfg) + + acc = fatrasParticleHelperCfg(flags) + part_helper_cfg = acc.getPublicTool('ISF_ParticleHelper') + result.merge(acc) + kwargs.setdefault("ParticleHelper", part_helper_cfg) + + acc = fatrasKinematicFilterCfg(flags) + kin_filter_cfg = acc.getPublicTool('ISF_FatrasKinematicFilter') + result.merge(acc) + kwargs.setdefault("TrackFilter", kin_filter_cfg) + kwargs.setdefault("NeutralFilter", kin_filter_cfg) + kwargs.setdefault("PhotonFilter", kin_filter_cfg) + + acc = fatrasExtrapolatorCfg(flags) + extrapolator_cfg = acc.getPublicTool('ISF_FatrasExtrapolator') + kwargs.setdefault("Extrapolator", extrapolator_cfg) + result.merge(acc) + + acc = fatrasPhysicsValidationToolCfg(flags) + phys_val_cfg = acc.getPublicTool('ISF_FatrasPhysicsValidationTool') + result.merge(acc) + kwargs.setdefault("PhysicsValidationTool", phys_val_cfg) + + acc = fatrasProcessSamplingToolCfg(flags) + proc_samp_cfg = acc.getPublicTool('ISF_FatrasProcessSamplingTool') + result.merge(acc) + kwargs.setdefault("ProcessSamplingTool", proc_samp_cfg) + + iFatras__TransportTool = CompFactory.iFatras.TransportTool + result.setPrivateTools(iFatras__TransportTool(name=name, **kwargs)) + return result