diff --git a/Trigger/TrigAlgorithms/TrigMuonEF/CMakeLists.txt b/Trigger/TrigAlgorithms/TrigMuonEF/CMakeLists.txt index 4913e6602b6edf101cb250b6fbdc3cab5de7fe86..a2e8880d3721a08d473421db1466f4e0e373532f 100644 --- a/Trigger/TrigAlgorithms/TrigMuonEF/CMakeLists.txt +++ b/Trigger/TrigAlgorithms/TrigMuonEF/CMakeLists.txt @@ -3,16 +3,11 @@ # Declare the package name: atlas_subdir( TrigMuonEF ) -# External dependencies: -find_package( CLHEP ) -find_package( ROOT COMPONENTS MathCore ) - # Component(s) in the package: atlas_add_component( TrigMuonEF src/*.cxx src/components/*.cxx - INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} - LINK_LIBRARIES ${CLHEP_LIBRARIES} ${ROOT_LIBRARIES} AthContainers AthenaBaseComps AthenaKernel AthenaMonitoringKernelLib CaloEvent CscClusterizationLib CxxUtils EventPrimitives FourMomUtils GaudiKernel IRegionSelector InDetTrackSelectionToolLib MuidInterfaces MuonCablingData MuonCnvToolInterfacesLib MuonCombinedEvent MuonCombinedToolInterfaces MuonIdHelpersLib MuonPattern MuonPrepRawData MuonRIO_OnTrack MuonReadoutGeometry MuonRecToolInterfaces MuonSegment MuonSegmentCombinerToolInterfaces MuonSegmentMakerToolInterfaces Particle RecoToolInterfaces RPC_CondCablingLib StoreGateLib TrigCompositeUtilsLib TrigConfHLTData TrigInDetEvent TrigInterfacesLib TrigMuonEvent TrigMuonToolInterfaces TrigNavigationLib TrigParticle TrigSteeringEvent TrigTimeAlgsLib TrkEventPrimitives TrkParameters TrkSegment TrkToolInterfaces TrkTrack TrkTrackSummary xAODCaloEvent xAODMuon xAODTracking xAODTrigMuon ) + LINK_LIBRARIES AthenaMonitoringKernelLib FourMomUtils InDetTrackSelectionToolLib TrigCompositeUtilsLib TrigMuonToolInterfaces ) # Install files from the package: atlas_install_python_modules( python/*.py POST_BUILD_CMD ${ATLAS_FLAKE8} --extend-extensions=ATL900,ATL901 ) diff --git a/Trigger/TrigAlgorithms/TrigMuonEF/doc/packagedoc.h b/Trigger/TrigAlgorithms/TrigMuonEF/doc/packagedoc.h deleted file mode 100644 index 51b568da621a3f7eb1a041c8c228155916dea66d..0000000000000000000000000000000000000000 --- a/Trigger/TrigAlgorithms/TrigMuonEF/doc/packagedoc.h +++ /dev/null @@ -1,14 +0,0 @@ -/* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -*/ - -/** -@page TrigMuonEF_page The TrigMuonEF Package - -@section TrigMuonEF_IntroTrigMuonEF Introduction - -This package provides the implementation of EF wrappers for the offline muon reconstruction algorithms. - - - -*/ diff --git a/Trigger/TrigAlgorithms/TrigMuonEF/python/TrigMuonEFConfig.py b/Trigger/TrigAlgorithms/TrigMuonEF/python/TrigMuonEFConfig.py index 79ac0573ff888c588f7f7c9962903a6b261cee02..842801b8344765b1a3486cd688314ddd7e7f1942 100755 --- a/Trigger/TrigAlgorithms/TrigMuonEF/python/TrigMuonEFConfig.py +++ b/Trigger/TrigAlgorithms/TrigMuonEF/python/TrigMuonEFConfig.py @@ -3,660 +3,7 @@ # TrigMuonEF configurables # from TrigMuonEF import TrigMuonEFConf -from TrigMuonEF import TrigMuonEFMonitoring -from TriggerJobOpts.TriggerFlags import TriggerFlags -from AthenaCommon.AppMgr import ToolSvc -from AthenaCommon.AppMgr import ServiceMgr -from AthenaCommon import CfgMgr -from AthenaCommon import CfgGetter -from AthenaCommon.DetFlags import DetFlags -from AthenaCommon.SystemOfUnits import GeV,mm -from AthenaCommon.Logging import logging -log = logging.getLogger('TrigMuonEFConfig') - -from TrigTimeMonitor.TrigTimeHistToolConfig import TrigTimeHistToolConfig - -from RecExConfig.RecFlags import rec -from MuonCombinedRecExample.MuonCombinedRecFlags import muonCombinedRecFlags - -from TrkDetDescrSvc.AtlasTrackingGeometrySvc import AtlasTrackingGeometrySvc - -from MuonRecExample.MuonRecFlags import muonRecFlags -from AtlasGeoModel.MuonGMJobProperties import MuonGeometryFlags - -from InDetRecExample import TrackingCommon - -from AthenaCommon.BeamFlags import jobproperties -beamFlags = jobproperties.Beam - -#Offline calorimeter isolation tool -#from TrackInCaloTools import TrackInCaloTools -#TMEFTrackInCaloTools = TrackInCaloTools.TrackInCaloTools(name='MuonIsoTrackInCaloTools') -#ToolSvc += TMEFTrackInCaloTools - -#from IsolationTool.IsolationToolConf import xAOD__CaloIsolationTool -#TMEFCaloIsolationTool = xAOD__CaloIsolationTool(name='MuonIsoCaloIsolationTool', -# ExtrapolTrackToCaloTool = TMEFTrackInCaloTools) - -#ToolSvc += TMEFCaloIsolationTool - -from egammaRec.Factories import PublicToolFactory - -from AthenaCommon.GlobalFlags import globalflags -isMC = not globalflags.DataSource()=='data' -from IsolationCorrections.IsolationCorrectionsConf import CP__IsolationCorrectionTool as ICT -IsoCorrectionTool = PublicToolFactory(ICT, - name = "NewLeakageCorrTool", - IsMC = isMC) - -from IsolationTool.IsolationToolConf import xAOD__CaloIsolationTool - -# tool to collect topo clusters in cone -from ParticlesInConeTools.ParticlesInConeToolsConf import xAOD__CaloClustersInConeTool -CaloClustersInConeTool = PublicToolFactory(xAOD__CaloClustersInConeTool, - CaloClusterLocation = "CaloCalTopoClusters") - -from CaloClusterCorrection import CaloClusterCorrectionConf as Cccc -TrigCaloFillRectangularCluster = PublicToolFactory( Cccc.CaloFillRectangularCluster, - name = "trigMuon_CaloFillRectangularCluster", - eta_size = 5, - phi_size = 7, - cells_name = "") - - -if not hasattr(ServiceMgr,"TrackingVolumesSvc"): - from TrkDetDescrSvc.TrkDetDescrSvcConf import Trk__TrackingVolumesSvc - ServiceMgr += Trk__TrackingVolumesSvc("TrackingVolumesSvc") - -def TMEF_MaterialEffectsUpdator(name='TMEF_MaterialEffectsUpdator',**kwargs): - return CfgMgr.Trk__MaterialEffectsUpdator(name,**kwargs) - - -def TMEF_Propagator(name='TMEF_Propagator',**kwargs): - return ToolSvc.AtlasRungeKuttaPropagator - return CfgMgr.Trk__IntersectorWrapper(name,**kwargs) - - -def TMEF_Navigator(name='TMEF_Navigator',**kwargs): - return TrackingCommon.getAtlasNavigator(name) - - -def TMEF_Extrapolator(name='TMEF_Extrapolator',**kwargs): - return ToolSvc.AtlasExtrapolator - kwargs.setdefault("Propagators", [ "TMEF_Propagator" ]) - kwargs.setdefault("MaterialEffectsUpdators",[ "TMEF_MaterialEffectsUpdator" ]) - kwargs.setdefault("Navigator","TMEF_Navigator") - return CfgMgr.Trk__Extrapolator(name,**kwargs) - - -def TMEF_CaloEnergyTool(name='TMEF_CaloEnergyTool', **kwargs): - kwargs.setdefault("EnergyLossMeasurement",False) - kwargs.setdefault("MopParametrization",True) - return CfgMgr.Rec__MuidCaloEnergyTool(name,**kwargs) - - -def TMEF_CaloTrackStateOnSurface(name='TMEF_CaloTrackStateOnSurface',**kwargs): - kwargs.setdefault("CaloEnergyDeposit","TMEF_CaloEnergyTool") - kwargs.setdefault("CaloEnergyParam" ,"TMEF_CaloEnergyTool") - kwargs.setdefault("Propagator", "TMEF_Propagator") - kwargs.setdefault("MinRemainingEnergy", 0.2*GeV) - kwargs.setdefault("ParamPtCut", 3.0*GeV) - return CfgMgr.Rec__MuidCaloTrackStateOnSurface(name,**kwargs) - - -def TMEF_TrackSummaryTool(name='TMEF_TrackSummaryTool',**kwargs): - # always setup muon tool - kwargs.setdefault("MuonSummaryHelperTool", "MuonTrackSummaryHelperTool") - kwargs.setdefault("doSharedHits", False) - # only add ID tool if ID is on - if DetFlags.detdescr.ID_on(): - from InDetTrigRecExample.InDetTrigConfigRecLoadTools import InDetTrigTrackSummaryHelperTool - kwargs.setdefault("InDetSummaryHelperTool", InDetTrigTrackSummaryHelperTool) - kwargs.setdefault("doHolesInDet",True) - - return CfgMgr.Trk__TrackSummaryTool(name,**kwargs) - - -def TMEF_CombinedMuonTag(name='TMEF_CombinedMuonTag',**kwargs): - kwargs.setdefault("ExtrapolatorTool","TMEF_Extrapolator") - kwargs.setdefault("Chi2Cut", 50000.) # Muid: 50000. old value: 2500. - return CfgMgr.MuonCombined__MuonTrackTagTestTool(name,**kwargs) - - -def TMEF_MatchQuality(name='TMEF_MatchQuality',**kwargs): - kwargs.setdefault("TagTool","TMEF_CombinedMuonTag") - kwargs.setdefault("TrackQuery","TMEF_MuonTrackQuery") - return CfgMgr.Rec__MuonMatchQuality(name,**kwargs) - -def TMEF_MaterialAllocator(name='TMEF_MaterialAllocator',**kwargs): - kwargs.setdefault("AggregateMaterial", True) - kwargs.setdefault("Extrapolator","TMEF_Extrapolator") - kwargs.setdefault("TrackingGeometrySvc", AtlasTrackingGeometrySvc) - return CfgMgr.Trk__MaterialAllocator(name,**kwargs) - - - -def TMEF_iPatFitter(name='TMEF_iPatFitter',**kwargs): - kwargs.setdefault("AggregateMaterial", True) - kwargs.setdefault("FullCombinedFit", True) - if not TriggerFlags.run2Config == '2016': - kwargs.setdefault("MaxIterations", 15) - kwargs.setdefault("MaterialAllocator", "TMEF_MaterialAllocator") - from InDetRecExample import TrackingCommon - kwargs.setdefault("SolenoidalIntersector",TrackingCommon.getSolenoidalIntersector()) - kwargs.setdefault("TrackSummaryTool", 'TMEF_TrackSummaryTool') - return CfgMgr.Trk__iPatFitter(name,**kwargs) - - -def TMEF_iPatSLFitter(name='TMEF_iPatSLFitter',**kwargs): - kwargs.setdefault("LineFit", True) - #kwargs.setdefault("LineMomentum", muonStandaloneFlags.straightLineFitMomentum()) - # call the other factory function - return TMEF_iPatFitter(name,**kwargs) - - -def TMEF_TrackCleaner(name = 'TMEF_TrackCleaner',**kwargs): - if TriggerFlags.run2Config=='2016': - kwargs.setdefault('PullCut', 3.0) - kwargs.setdefault('PullCutPhi', 3.0) - else: - kwargs.setdefault('PullCut', 4.0) - kwargs.setdefault('PullCutPhi', 4.0) - kwargs.setdefault("Fitter", "TMEF_iPatFitter") - kwargs.setdefault("SLFitter", "TMEF_iPatSLFitter") - if not TriggerFlags.run2Config == '2016': - kwargs.setdefault("Iterate", False) - kwargs.setdefault("RecoverOutliers", False) - if muonRecFlags.doSegmentT0Fit(): - kwargs.setdefault("RecoverOutliers", False) - return CfgMgr.Muon__MuonTrackCleaner(name,**kwargs) - - -def TMEF_TrkMaterialProviderTool(name='TMEF_TrkMaterialProviderTool',**kwargs): - kwargs.setdefault("UseCaloEnergyMeasurement", False) - return TrackingCommon.getTrkMaterialProviderTool(name,**kwargs) - - -def TMEF_CombinedMuonTrackBuilder(name='TMEF_CombinedMuonTrackBuilder',**kwargs): - kwargs.setdefault("CaloEnergyParam", "TMEF_CaloEnergyTool") - kwargs.setdefault("CaloTSOS", "TMEF_CaloTrackStateOnSurface") - kwargs.setdefault("CscRotCreator", "") # enabled with special version in Muid offline - kwargs.setdefault("Fitter", "TMEF_iPatFitter") - kwargs.setdefault("SLFitter", "TMEF_iPatSLFitter") - kwargs.setdefault("MaterialAllocator", "TMEF_MaterialAllocator") - kwargs.setdefault("MdtRotCreator", "MdtDriftCircleOnTrackCreator") - kwargs.setdefault("MuonHoleRecovery", "") - kwargs.setdefault("Propagator", "TMEF_Propagator") - kwargs.setdefault("SLPropagator", "TMEF_Propagator") - kwargs.setdefault("CleanCombined", True) - kwargs.setdefault("CleanStandalone", True) - kwargs.setdefault("BadFitChi2", 2.5) - kwargs.setdefault("LargeMomentumError", 0.5) - #kwargs.setdefault("LineMomentum", muonStandaloneFlags.straightLineFitMomentum()) - kwargs.setdefault("LowMomentum", 10.*GeV) - kwargs.setdefault("MinEnergy", 0.3*GeV) - kwargs.setdefault("PerigeeAtSpectrometerEntrance", False) - kwargs.setdefault("ReallocateMaterial", False) - kwargs.setdefault("Vertex2DSigmaRPhi", 100.*mm) - kwargs.setdefault("Vertex3DSigmaRPhi", 6.*mm) - kwargs.setdefault("Vertex3DSigmaZ", 60.*mm) - if not TriggerFlags.run2Config == '2016': - kwargs.setdefault("MuonErrorOptimizer", '') - - # note - the TrackSummaryTool is done as follows offline: - # import MuonCombinedRecExample.CombinedMuonTrackSummary - # combinedMuonTrackBuilder.TrackSummaryTool = ToolSvc.CombinedMuonTrackSummary - # should check our config is really ok here - kwargs.setdefault("TrackSummaryTool", 'TMEF_TrackSummaryTool') - - # extra w.r.t. Muid Offline - kwargs.setdefault("Cleaner", "TMEF_TrackCleaner") - if muonRecFlags.doSegmentT0Fit(): - kwargs.setdefault("MdtRotCreator", "") - - kwargs.setdefault("UseCaloTG", True) - kwargs.setdefault("CaloMaterialProvider", "TMEF_TrkMaterialProviderTool") - kwargs.setdefault("TrackQuery", "TMEF_MuonTrackQuery") - if muonRecFlags.enableErrorTuning(): - kwargs.setdefault("MuonErrorOptimizer", CfgGetter.getPublicToolClone("TMEF_MuidErrorOptimisationTool", - "MuonErrorOptimisationTool", - PrepareForFit = False, - RecreateStartingParameters = False, - RefitTool = CfgGetter.getPublicToolClone("TMEF_MuidRefitTool", - "MuonRefitTool", - AlignmentErrors = False, - Fitter = CfgGetter.getPublicTool("iPatFitter")) - )) - - return CfgMgr.Rec__CombinedMuonTrackBuilder(name,**kwargs) - - -def TMEF_MuonTrackQuery(name='TMEF_MuonTrackQuery',**kwargs): - kwargs.setdefault("MdtRotCreator","MdtDriftCircleOnTrackCreator") - kwargs.setdefault("Fitter", 'TMEF_iPatFitter') - return CfgMgr.Rec__MuonTrackQuery(name,**kwargs) - - -def TMEF_MatchMaker(name='TMEF_MatchMaker',**kwargs): - kwargs.setdefault("AmbiguityProcessor", "MuonAmbiProcessor") - kwargs.setdefault("MatchQuality", "TMEF_MatchQuality") - kwargs.setdefault("CaloTSOS", "TMEF_CaloTrackStateOnSurface") # not in Muid? - kwargs.setdefault("TrackBuilder", "TMEF_CombinedMuonTrackBuilder") - kwargs.setdefault("TrackQuery", "TMEF_MuonTrackQuery") - kwargs.setdefault("Propagator", "TMEF_Propagator") - kwargs.setdefault("IndetPullCut", 6.0) - kwargs.setdefault("MomentumBalanceCut", 10.0) # old value: 20.0 - return CfgMgr.Rec__MuidMatchMaker(name,**kwargs) - - -def TMEF_TrackBuilderTool(name='TMEF_TrackBuilderTool',extraFlags=None,**kwargs): - if extraFlags is None: - from MuonRecExample.MuonRecUtils import ExtraFlags - extraFlags = ExtraFlags() - - extraFlags.setFlagDefault("namePrefix","TMEF_") - # extraFlags.setFlagDefault("optimiseMomentumResolutionUsingChi2", False) # offline default: False - # extraFlags.setFlagDefault("materialSource", "TGMat") # offline default: "TGMat" - from MuonRecExample.MuonStandalone import MuonTrackSteering - return MuonTrackSteering(name, extraFlags=extraFlags, **kwargs) - -# new tools added by MO -def TMEF_TrackSummaryToolNoHole(name='TMEF_TrackSummaryToolNoHole',**kwargs): - sumtool = TMEF_TrackSummaryTool(name, **kwargs) - sumtool.doHolesInDet = False - # @TODO to switch off hole search should use a prticular InDet...Helper - return sumtool - -def TMEF_TrkToTrackParticleConvTool(name="TMEF_TrkToTrackParticleConvTool",**kwargs): - #import MuonCombinedRecExample.CombinedMuonTrackSummary - kwargs.setdefault("TrackSummaryTool", 'TMEF_TrackSummaryToolNoHole')#ToolSvc.CombinedMuonTrackSummary ) #getPublicTool("CombinedMuonTrackSummary") ) - kwargs.setdefault("KeepAllPerigee",False ) - return CfgMgr.Trk__TrackParticleCreatorTool(name,**kwargs) - -def TMEF_MuonCombinedTool(name="TMEF_MuonCombinedTool",**kwargs): - #protectedInclude ("MuidExample/MuonIdentification_jobOptions.py") - kwargs.setdefault("MuonCombinedTagTools", [ "TMEF_MuonCombinedFitTagTool" ] ) - # kwargs.setdefault("PtBalancePreSelection", 0.75) - return CfgMgr.MuonCombined__MuonCombinedTool(name,**kwargs) - -def TMEF_MuidMuonRecovery(name='TMEF_MuidMuonRecovery',**kwargs): - kwargs.setdefault('Extrapolator', "AtlasExtrapolator") - kwargs.setdefault('TrackBuilder',"TMEF_CombinedMuonTrackBuilder") - return CfgMgr.Rec__MuidMuonRecovery(name,**kwargs) - -def MuonHolesOnTrack(name='MuonHolesOnTrack',**kwargs): - kwargs.setdefault("ExtrapolatorName" , "MuonExtrapolator" ) - kwargs.setdefault("RIO_OnTrackCreator" , "MuonRotCreator" ) - kwargs.setdefault("DoHolesIdentification" , True ) - kwargs.setdefault("DoParameterUpdate", True ) - kwargs.setdefault("LowerTrackMomentumCut", 2000.0 ) - AtlasTrackingGeometrySvc = CfgGetter.getService("AtlasTrackingGeometrySvc") - kwargs.setdefault("TrackingGeometryName", AtlasTrackingGeometrySvc.TrackingGeometryName ) - - from MuonTGRecTools.MuonTGRecToolsConf import Muon__MuonHolesOnTrackTool - return Muon__MuonHolesOnTrackTool(name,**kwargs) -# end of factory function MuonHolesOnTrackTool - -# need to do something about cosmics here - in offline this tool is None if not collisions running -# if jobproperties.Beam.beamType()=='collisions': -def TMEF_CombMuonMEOTPParam(name='TMEF_CombMuonMEOTPParam',**kwargs): - kwargs.setdefault('TSOSTool','TMEF_CaloTrackStateOnSurface') - from MuidCaloScatteringTools.MuidCaloScatteringToolsConf import Rec__MuidMaterialEffectsOnTrackProvider - return Rec__MuidMaterialEffectsOnTrackProvider(name, **kwargs) - -def TMEF_MuonCombinedPropagator(name='TMEF_MuonCombinedPropagator',**kwargs): - kwargs.setdefault('AccuracyParameter', 0.000001) - kwargs.setdefault('IncludeBgradients', True) - kwargs.setdefault('MaxStraightLineStep', 0.001) - kwargs.setdefault('MaxHelixStep', 0.001) - from TrkExRungeKuttaPropagator.TrkExRungeKuttaPropagatorConf import Trk__RungeKuttaPropagator - return Trk__RungeKuttaPropagator(name, **kwargs) - -def TMEF_MuonCombinedTrackFitter(name='TMEF_MuonCombinedTrackFitter',**kwargs): - kwargs.setdefault('ExtrapolationTool', 'AtlasExtrapolator')#gpt - kwargs.setdefault('NavigatorTool', ToolSvc.MuonNavigator) - kwargs.setdefault('PropagatorTool', 'TMEF_MuonCombinedPropagator')#gpt - kwargs.setdefault('RotCreatorTool', 'MuonRotCreator')#gpt - kwargs.setdefault('MeasurementUpdateTool', 'MuonMeasUpdator')#gpt - kwargs.setdefault('TrackingGeometrySvc', ServiceMgr.AtlasTrackingGeometrySvc) - kwargs.setdefault('ExtrapolatorMaterial', True) - kwargs.setdefault('MuidTool', None) - kwargs.setdefault('MuidToolParam', 'TMEF_CombMuonMEOTPParam')#gpt - kwargs.setdefault('MuidMat', False) - kwargs.setdefault('StraightLine', False) #FIX? StraightLine = not jobproperties.BField.solenoidOn() and not jobproperties.BField.allToroidOn(), - kwargs.setdefault('MaxIterations', 50) - kwargs.setdefault('GetMaterialFromTrack', True) #FIX? jobproperties.BField.solenoidOn() and jobproperties.BField.allToroidOn(), - kwargs.setdefault('RecalculateDerivatives',False) - kwargs.setdefault("UseCaloTG", True) - kwargs.setdefault("CaloMaterialProvider", "TMEF_TrkMaterialProviderTool") - from TrkGlobalChi2Fitter.TrkGlobalChi2FitterConf import Trk__GlobalChi2Fitter - return Trk__GlobalChi2Fitter(name, **kwargs) - -def TMEF_MuonCombinedFitTagTool(name="TMEF_MuonCombinedFitTagTool",**kwargs): - kwargs.setdefault("TrackBuilder", 'TMEF_CombinedMuonTrackBuilder' ) - if not TriggerFlags.run2Config == '2016': - kwargs.setdefault("MuonRecovery", '' ) - else: - kwargs.setdefault("MuonRecovery", 'TMEF_MuidMuonRecovery' ) - kwargs.setdefault("TrackQuery", 'TMEF_MuonTrackQuery' ) - kwargs.setdefault("MatchQuality", 'TMEF_MatchQuality' ) - return CfgMgr.MuonCombined__MuonCombinedFitTagTool(name,**kwargs) - -def TMEF_MuonCandidateTool(name="TMEF_MuonCandidateTool",**kwargs): - kwargs.setdefault("TrackBuilder","TMEF_CombinedMuonTrackBuilder") - if beamFlags.beamType() == 'cosmics': - kwargs.setdefault("TrackExtrapolationTool", CfgGetter.getPublicTool("ExtrapolateMuonToIPTool")) - return CfgMgr.MuonCombined__MuonCandidateTool(name,**kwargs) - -def TrigMuonAmbiProcessor(name="TrigMuonAmbiProcessor",**kwargs) : - # definition mostly copied from MuonRecExample/python/MooreTools.py - import InDetRecExample.TrackingCommon as TrackingCommon - kwargs.setdefault("AssociationTool",TrackingCommon.getInDetTrigPRDtoTrackMapToolGangedPixels()) - kwargs.setdefault("DropDouble", False) - kwargs.setdefault("ScoringTool", "MuonTrackScoringTool") - kwargs.setdefault("SelectionTool", "MuonAmbiSelectionTool" ) - return CfgMgr.Trk__TrackSelectionProcessorTool(name,**kwargs) - -def TMEF_MuonCreatorTool(name="TMEF_MuonCreatorTool",**kwargs): - from TrkExTools.AtlasExtrapolator import AtlasExtrapolator - from TrackToCalo.TrackToCaloConf import Trk__ParticleCaloExtensionTool - pcExtensionTool = Trk__ParticleCaloExtensionTool(Extrapolator = AtlasExtrapolator()) - kwargs.setdefault("ParticleCaloExtensionTool", pcExtensionTool) - #Should be safe as the dynamic alignment is only for data - kwargs.setdefault("ParticleCaloExtensionToolID", pcExtensionTool) - kwargs.setdefault('TrackParticleCreator','TMEF_TrkToTrackParticleConvTool') - kwargs.setdefault("AmbiguityProcessor", CfgGetter.getPublicTool('TrigMuonAmbiProcessor')) - kwargs.setdefault('MakeTrackAtMSLink',True) - kwargs.setdefault("CaloMaterialProvider", "TMEF_TrkMaterialProviderTool") - kwargs.setdefault("FillTimingInformation",False) - kwargs.setdefault("MuonSelectionTool", "") - kwargs.setdefault("TrackQuery", "TMEF_MuonTrackQuery") - kwargs.setdefault("TrackSummaryTool", "TMEF_TrackSummaryTool") - return CfgMgr.MuonCombined__MuonCreatorTool(name,**kwargs) - -def TMEF_MuonCandidateTrackBuilderTool(name="TMEF_MuonCandidateTrackBuilderTool",**kwargs): - kwargs.setdefault('MuonTrackBuilder', 'TMEF_CombinedMuonTrackBuilder') - from MuonRecExample.MuonRecUtils import ExtraFlags - extraFlags = ExtraFlags() - extraFlags.setFlagDefault("doSegmentPhiMatching", True) - from MuonRecExample.MuonStandaloneFlags import muonStandaloneFlags - extraFlags.setFlagDefault(muonStandaloneFlags.optimiseMomentumResolutionUsingChi2) # take name & value from JobProperty - extraFlags.setFlagDefault(muonStandaloneFlags.strategy) - extraFlags.setFlagDefault(muonStandaloneFlags.trackBuilder) - extraFlags.setFlagDefault(muonStandaloneFlags.printSummary) - extraFlags.setFlagDefault(muonStandaloneFlags.refinementTool) - if "TrackBuilderTool" not in kwargs: - extraFlags.setFlagDefault('UseTrackingHistory',True) - kwargs.setdefault('MuonSegmentTrackBuilder', CfgGetter.getPublicToolClone("MooMuonTrackBuilder","MooTrackBuilderTemplate",extraFlags=extraFlags)) - return CfgMgr.Muon__MuonCandidateTrackBuilderTool(name,**kwargs) - -def TMEF_MuonPRDSelectionTool(name="TMEF_MuonPRDSelectionTool",**kwargs): - kwargs.setdefault('MuonRecoValidationTool','') - return CfgMgr.Muon__MuonPRDSelectionTool(name,**kwargs) - -def TMEF_MuonClusterSegmentFinder(name="TMEF_MuonClusterSegmentFinder", **kwargs): - kwargs.setdefault('MuonPRDSelectionTool', 'TMEF_MuonPRDSelectionTool') - return CfgMgr.Muon__MuonClusterSegmentFinder(name,**kwargs) - -def TMEF_MuonClusterSegmentFinderTool(name="TMEF_MuonClusterSegmentFinderTool", extraFlags=None,**kwargs): - kwargs.setdefault("TrackSummaryTool", "TMEF_TrackSummaryTool") - return CfgMgr.Muon__MuonClusterSegmentFinderTool(name,**kwargs) - -def TMEF_MuonLayerSegmentFinderTool(name="TMEF_MuonLayerSegmentFinderTool",**kwargs): - kwargs.setdefault('MuonRecoValidationTool','') - kwargs.setdefault('MuonPRDSelectionTool','TMEF_MuonPRDSelectionTool') - kwargs.setdefault('MuonClusterSegmentFinder','TMEF_MuonClusterSegmentFinder') - if not MuonGeometryFlags.hasCSC(): - kwargs.setdefault('Csc2DSegmentMaker', '') - kwargs.setdefault('Csc4DSegmentMaker', '') - if (MuonGeometryFlags.hasSTGC() and MuonGeometryFlags.hasMM()): kwargs.setdefault('NSWMuonClusterSegmentFinderTool','TMEF_MuonClusterSegmentFinderTool') - return CfgMgr.Muon__MuonLayerSegmentFinderTool(name,**kwargs) - -def TMEF_MuonInsideOutRecoTool(name="TMEF_MuonInsideOutRecoTool",**kwargs): - kwargs.setdefault('MuonTrackBuilder','TMEF_CombinedMuonTrackBuilder') - kwargs.setdefault('MuonCandidateTrackBuilderTool','TMEF_MuonCandidateTrackBuilderTool') - kwargs.setdefault('MuonRecoValidationTool','') - kwargs.setdefault('MuonLayerSegmentFinderTool', 'TMEF_MuonLayerSegmentFinderTool') - return CfgMgr.MuonCombined__MuonInsideOutRecoTool(name,**kwargs ) - -### Stau late trigger configs - -def TMEF_MuonStauRecoTool( name='TMEF_MuonStauRecoTool', **kwargs ): - # kwargs.setdefault('DoSummary', True) - kwargs.setdefault('DoSummary', muonCombinedRecFlags.printSummary() ) - kwargs.setdefault('ConsideredPDGs', [13,-13,1000015,-1000015]) - kwargs.setdefault('DoTruth', rec.doTruth() ) - kwargs.setdefault('MuonSegmentMaker', CfgGetter.getPublicTool('DCMathStauSegmentMaker') ) - kwargs.setdefault('MuonInsideOutRecoTool', CfgGetter.getPublicTool('TMEF_MuonStauInsideOutRecoTool') ) - return CfgMgr.MuonCombined__MuonStauRecoTool(name,**kwargs ) - -def TMEF_MuonStauInsideOutRecoTool( name='TMEF_MuonStauInsideOutRecoTool', **kwargs ): - kwargs.setdefault('MuonTrackBuilder','TMEF_CombinedMuonTrackBuilder') - kwargs.setdefault('MuonCandidateTrackBuilderTool', CfgGetter.getPublicTool('TMEF_MuonStauCandidateTrackBuilderTool') ) - return CfgMgr.MuonCombined__MuonInsideOutRecoTool(name,**kwargs ) - -def TMEF_MuonStauCandidateTrackBuilderTool( name='TMEF_MuonStauCandidateTrackBuilderTool',**kwargs): - kwargs.setdefault('MuonTrackBuilder', CfgGetter.getPublicTool('TMEF_CombinedStauTrackBuilder') ) - return CfgMgr.Muon__MuonCandidateTrackBuilderTool(name,**kwargs) - -def TMEF_CombinedStauTrackBuilder( name='TMEF_CombinedStauTrackBuilder', **kwargs ): - kwargs.setdefault('MdtRotCreator' , CfgGetter.getPublicTool('MdtDriftCircleOnTrackCreatorStau') ) - kwargs.setdefault('MuonHoleRecovery' , CfgGetter.getPublicTool('TMEF_MuonStauSegmentRegionRecoveryTool') ) - return TMEF_CombinedMuonTrackBuilder(name,**kwargs ) - -def TMEF_MuonStauSegmentRegionRecoveryTool(name='TMEF_MuonStauSegmentRegionRecoveryTool',**kwargs ): - kwargs.setdefault('SeededSegmentFinder', CfgGetter.getPublicTool('MuonStauSeededSegmentFinder') ) - kwargs.setdefault('ChamberHoleRecoveryTool', CfgGetter.getPublicTool('MuonStauChamberHoleRecoveryTool') ) - kwargs.setdefault('Fitter', CfgGetter.getPublicTool('TMEF_CombinedStauTrackBuilderFit') ) - from AthenaCommon.AthenaCommonFlags import athenaCommonFlags - if athenaCommonFlags.isOnline: - kwargs.setdefault('MdtCondKey', "") - return CfgMgr.Muon__MuonSegmentRegionRecoveryTool(name,**kwargs) - -def TMEF_CombinedStauTrackBuilderFit( name='TMEF_CombinedStauTrackBuilderFit', **kwargs ): - kwargs.setdefault('MdtRotCreator' , CfgGetter.getPublicTool('MdtDriftCircleOnTrackCreatorStau') ) - return TMEF_CombinedMuonTrackBuilder(name,**kwargs ) - -def TMEF_MdtRawDataProviderTool(name="TMEF_MdtRawDataProviderTool",**kwargs): - kwargs.setdefault("Decoder", "MdtROD_Decoder") - from OverlayCommonAlgs.OverlayFlags import overlayFlags - if DetFlags.overlay.MDT_on() and overlayFlags.isDataOverlay(): - kwargs.setdefault("RdoLocation",overlayFlags.dataStore()+"+MDTCSM") - return CfgMgr.Muon__MDT_RawDataProviderTool(name,**kwargs) - -def TMEF_RpcRawDataProviderTool(name = "TMEF_RpcRawDataProviderTool",**kwargs): - kwargs.setdefault("Decoder", "RpcROD_Decoder") - from OverlayCommonAlgs.OverlayFlags import overlayFlags - if DetFlags.overlay.RPC_on() and overlayFlags.isDataOverlay(): - kwargs.setdefault("RdoLocation", overlayFlags.dataStore()+"+RPCPAD") - return CfgMgr.Muon__RPC_RawDataProviderTool(name,**kwargs) - -def TMEF_TgcRawDataProviderTool(name = "TMEF_TgcRawDataProviderTool",**kwargs): - kwargs.setdefault("Decoder", "TgcROD_Decoder") - from OverlayCommonAlgs.OverlayFlags import overlayFlags - if DetFlags.overlay.TGC_on() and overlayFlags.isDataOverlay(): - kwargs.setdefault("RdoLocation", overlayFlags.dataStore()+"+TGCRDO") - return CfgMgr.Muon__TGC_RawDataProviderTool(name,**kwargs) - -def TMEF_CscRawDataProviderTool(name = "TMEF_CscRawDataProviderTool",**kwargs): - kwargs.setdefault("Decoder", "CscROD_Decoder") - from OverlayCommonAlgs.OverlayFlags import overlayFlags - if DetFlags.overlay.CSC_on() and overlayFlags.isDataOverlay(): - kwargs.setdefault("RdoLocation", overlayFlags.dataStore()+"+CSCRDO") - return CfgMgr.Muon__CSC_RawDataProviderTool(name,**kwargs) - -# TrigMuonEF classes -class TrigMuonEFTrackBuilderConfig (): - __slots__ = () - - def __init__( self, name="TrigMuonEFTrackBuilder" ): - - raise RuntimeError("TrigMuonEFTrackBuilder no longer supported in release 19 (or later) due to removal of MooTrackSteering from the release.") - -class TrigMuonEFCombinerConfig (): - __slots__ = () - - def __init__( self, name="TrigMuonEFCombiner" ): - raise RuntimeError("TrigMuonEFCombinerConfig no longer supported - please switch to combiner mode of TrigMuSuperEF") - - - -class TrigMuonEFStandaloneTrackToolConfig (TrigMuonEFConf.TrigMuonEFStandaloneTrackTool): - __slots__ = () - - def __init__( self, name="TrigMuonEFStandaloneTrackTool", **kwargs ): - super( TrigMuonEFStandaloneTrackToolConfig, self ).__init__( name, **kwargs ) - - if MuonGeometryFlags.hasCSC(): self.CscClusterProvider = CfgGetter.getPublicTool("CscThresholdClusterBuilderTool") - - muonLayerHoughTool = CfgGetter.getPublicTool("MuonLayerHoughTool") - muonLayerHoughTool.DoTruth=False - - self.SegmentsFinderTool = CfgGetter.getPublicToolClone( "TMEF_SegmentsFinderTool","MooSegmentFinder", - HoughPatternFinder = muonLayerHoughTool, - Csc2dSegmentMaker=("Csc2dSegmentMaker/Csc2dSegmentMaker" if MuonGeometryFlags.hasCSC() else ""), - Csc4dSegmentMaker=("Csc4dSegmentMaker/Csc4dSegmentMaker" if MuonGeometryFlags.hasCSC() else "")) - - CfgGetter.getPublicTool("MuonHoughPatternFinderTool").RecordAll=False - CfgGetter.getPublicTool("MooTrackFitter").SLFit=False - - self.MdtRawDataProvider = "TMEF_MdtRawDataProviderTool" - self.CscRawDataProvider = "TMEF_CscRawDataProviderTool" - self.RpcRawDataProvider = "TMEF_RpcRawDataProviderTool" - self.TgcRawDataProvider = "TMEF_TgcRawDataProviderTool" - - #Need to run non-MT version of decoding tools in the trigger since the caching is not available in MT versions - #Need different PRD container names to run offline and trigger in same jobs, but there are many tools that depend on these containers... - #Since this is legacy code only used for validation comparisons against the Run 3 triggers, will do the not-particularly-nice solution of - #creating containers with unique names only if we are running offline and trigger in the same jobs, and otherwise just use the default names. - #This means that the trigger output when running the trigger as part of RAWtoESD is not 100% correct (the pattern finding uses the correct containers, - #so it's a small effect overall anyway), but that's an use case not currently needed for trigger validation purposes - from AthenaCommon.AppMgr import ToolSvc - #MDT - from MuonMDT_CnvTools.MuonMDT_CnvToolsConf import Muon__MdtRdoToPrepDataTool - from MuonCSC_CnvTools.MuonCSC_CnvToolsConf import Muon__CscRdoToCscPrepDataTool - from MuonTGC_CnvTools.MuonTGC_CnvToolsConf import Muon__TgcRdoToPrepDataTool - from MuonRPC_CnvTools.MuonRPC_CnvToolsConf import Muon__RpcRdoToPrepDataTool - from MuonCnvExample import MuonCalibConfig - - MdtRdoToMdtPrepDataTool = Muon__MdtRdoToPrepDataTool(name = "TrigEFMdtRdoToPrepDataTool", CalibrationTool=MuonCalibConfig.MdtCalibrationTool()) - CscRdoToCscPrepDataTool = Muon__CscRdoToCscPrepDataTool(name = "TrigEFCscRdoToPrepDataTool") - TgcRdoToTgcPrepDataTool = Muon__TgcRdoToPrepDataTool(name = "TrigEFTgcRdoToPrepDataTool") - RpcRdoToRpcPrepDataTool = Muon__RpcRdoToPrepDataTool(name = "TrigEFRpcRdoToPrepDataTool") - if not rec.doRDOTrigger and rec.doESD: - MdtRdoToMdtPrepDataTool.OutputCollection = "TrigMDT_DriftCircles" - CscRdoToCscPrepDataTool.OutputCollection = "TrigCSC_Measurements" - TgcRdoToTgcPrepDataTool.OutputCollection = "TrigTGC_Measurements" - TgcRdoToTgcPrepDataTool.OutputCoinCollection = "TrigerT1CoinDataCollection" - RpcRdoToRpcPrepDataTool.TriggerOutputCollection="TrigRPC_Measurements" - #InputCollection is really the output RPC coin collection... - RpcRdoToRpcPrepDataTool.InputCollection="TrigRPC_triggerHits" - else: - MdtRdoToMdtPrepDataTool.OutputCollection = "MDT_DriftCircles" - CscRdoToCscPrepDataTool.OutputCollection = "CSC_Measurements" - TgcRdoToTgcPrepDataTool.OutputCollection = "TGC_Measurements" - TgcRdoToTgcPrepDataTool.OutputCoinCollection = "TrigT1CoinDataCollection" - RpcRdoToRpcPrepDataTool.TriggerOutputCollection="RPC_Measurements" - RpcRdoToRpcPrepDataTool.InputCollection="RPC_triggerHits" - - ToolSvc += MdtRdoToMdtPrepDataTool - self.MdtPrepDataContainer = MdtRdoToMdtPrepDataTool.OutputCollection - self.MdtPrepDataProvider=MdtRdoToMdtPrepDataTool - #CSC - ToolSvc += CscRdoToCscPrepDataTool - self.CscPrepDataProvider=CscRdoToCscPrepDataTool - #TGC - ToolSvc += TgcRdoToTgcPrepDataTool - self.TgcPrepDataProvider=TgcRdoToTgcPrepDataTool - self.TgcPrepDataContainer=TgcRdoToTgcPrepDataTool.OutputCollection - #RPC - ToolSvc += RpcRdoToRpcPrepDataTool - self.RpcPrepDataProvider=RpcRdoToRpcPrepDataTool - self.RpcPrepDataContainer=RpcRdoToRpcPrepDataTool.TriggerOutputCollection - - self.DecodeMdtBS = DetFlags.readRDOBS.MDT_on() - self.DecodeRpcBS = DetFlags.readRDOBS.RPC_on() - self.DecodeTgcBS = DetFlags.readRDOBS.TGC_on() - if MuonGeometryFlags.hasCSC(): self.DecodeCscBS = DetFlags.readRDOBS.CSC_on() - - # use seeded decoding - if (TriggerFlags.MuonSlice.doEFRoIDrivenAccess()): - self.useMdtSeededDecoding = True - self.useRpcSeededDecoding = True - self.useTgcSeededDecoding = True - if MuonGeometryFlags.hasCSC(): self.useCscSeededDecoding = True - - # use ROB based seeded decoding instead of PRD based - self.useTgcRobDecoding = False # neither available nor needed - self.useCscRobDecoding = False # neither available nor needed - - - self.useRpcData=muonRecFlags.doRPCs() - self.useTgcData=muonRecFlags.doTGCs() - self.useCscData=muonRecFlags.doCSCs() - # to select barrel(useMdtData=2), endcap(useMdtData=3) - if muonRecFlags.doMDTs(): - self.useMdtData=1 - else: - self.useMdtData=0 - - - self.useTGCInPriorNextBC = False - - self.doTimeOutChecks = False - self.doTimeOutGuard = False - self.maxTgcHits = 0 - self.maxCscHits = 0 - self.maxRpcHits = 0 - self.maxMdtHits = 0 - self.doCache = True - self.IgnoreMisalginedCSCs = False - - self.TrackBuilderTool = "TMEF_TrackBuilderTool" - self.TrkSummaryTool = "TMEF_TrackSummaryTool" - self.MuonCandidateTool = "TMEF_MuonCandidateTool" - - self.TrackToTrackParticleConvTool = "MuonParticleCreatorTool" - - import MuonCondAlg.MdtCondDbAlgConfig # noqa: F401 (MDT conditions, needed for the MuonStationIntersectSvc) - - #from MuonRecExample.MuonRecTools import MuonSTEP_Propagator - #MuonSTEP_Propagator.OutputLevel=5 - #CfgGetter.getPublicTool("MuonStraightLinePropagator").OutputLevel=5 - -class TrigMuonEFCombinerConfigTRTOnly (): - __slots__ = () - - def __init__( self, name="TrigMuonEFCombinerTRTOnly" ): - raise RuntimeError("TrigMuonEFCombinerTRTOnly no longer supported - please switch to combiner mode of TrigMuSuperEF") - - -class TrigMuonEFCaloIsolationConfig (TrigMuonEFConf.TrigMuonEFCaloIsolation): - __slots__ = () - - def __init__( self, name="TrigMuonEFCaloIsolationConfig" ): - super( TrigMuonEFCaloIsolationConfig, self ).__init__( name ) - - self.RequireCombinedMuon = True - self.applyPileupCorrection = False - - CaloTopoIsolationTool = PublicToolFactory(xAOD__CaloIsolationTool,name = "CaloTopoClusterIsolationTool", - doEnergyDensityCorrection = self.applyPileupCorrection, - saveOnlyRequestedCorrections = True, - IsoLeakCorrectionTool = IsoCorrectionTool, - ClustersInConeTool = CaloClustersInConeTool, - CaloFillRectangularClusterTool = TrigCaloFillRectangularCluster, - UseEMScale = True) - - self.CaloTopoClusterIsolationTool = CaloTopoIsolationTool() - - # histograms - self.HistoPathBase = "" - validation_caloiso = TrigMuonEFMonitoring.TrigMuonEFCaloIsolationValidationMonitoring() - #online_caloiso = TrigMuonEFMonitoring.TrigMuonEFCaloIsolationOnlineMonitoring() - #monitoring_caloiso = TrigMuonEFMonitoring.TrigMuonEFCaloIsolationMonitoring() - - self.AthenaMonTools = [validation_caloiso] +from AthenaCommon.SystemOfUnits import mm def TMEF_TrackIsolationTool(name='TMEF_isolationTool',**kwargs): kwargs.setdefault('deltaZCut', 2.0*mm) @@ -666,212 +13,10 @@ def TMEF_TrackIsolationTool(name='TMEF_isolationTool',**kwargs): # Get the track selection tool from InDetTrackSelectionTool.InDetTrackSelectionToolConf import InDet__InDetTrackSelectionTool trkseltool = InDet__InDetTrackSelectionTool() - if 'LooseTSel' in name: - trkseltool.CutLevel='Loose' - elif 'TightTSel' in name: - trkseltool.CutLevel='TightPrimary' - log.debug('TMEF_TrackIsolationTool added trackselection tool:\n%s', trkseltool) kwargs.setdefault('TrackSelectionTool',trkseltool) return TrigMuonEFConf.TrigMuonEFTrackIsolationTool(name, **kwargs) -class TrigMuonEFTrackIsolationConfig (TrigMuonEFConf.TrigMuonEFTrackIsolation): - __slots__ = () - - def __init__( self, name="TrigMuonEFTrackIsolationConfig" ): - super( TrigMuonEFTrackIsolationConfig, self ).__init__( name ) - - # configure the isolation tool - TMEF_IsolationTool = TMEF_TrackIsolationTool('TMEF_IsolationTool',useVarIso=False) - - # Isolation tool - self.IsolationTool = TMEF_IsolationTool - - # ID tracks - self.IdTrackParticles = "InDetTrigTrackingxAODCnv_Muon_IDTrig" - - # Only run algo on combined muons - self.requireCombinedMuon = True - - # Use offline isolation variables - self.useVarIso = False - - # histograms - self.histoPathBase = "" - validation_trkiso = TrigMuonEFMonitoring.TrigMuonEFTrackIsolationValidationMonitoring() - online_trkiso = TrigMuonEFMonitoring.TrigMuonEFTrackIsolationOnlineMonitoring() - - self.AthenaMonTools = [ validation_trkiso, online_trkiso ] - - -class TrigMuonEFMSTrackIsolationConfig (TrigMuonEFConf.TrigMuonEFTrackIsolation): - __slots__ = () - - def __init__( self, name="TrigMuonEFMSTrackIsolationConfig" ): - super( TrigMuonEFMSTrackIsolationConfig, self ).__init__( name ) - - # configure the isolation tool - TMEF_IsolationTool = TMEF_TrackIsolationTool('TMEF_IsolationTool',useVarIso=False) - - # Isolation tool - self.IsolationTool = TMEF_IsolationTool - - # ID tracks - self.IdTrackParticles = "InDetTrigTrackingxAODCnv_Muon_IDTrig" - - # Only run algo on combined muons - self.requireCombinedMuon = False - - # Use offline isolation variables - self.useVarIso = False - - # histograms - self.histoPathBase = "" - validation_trkiso = TrigMuonEFMonitoring.TrigMuonEFTrackIsolationValidationMonitoring() - online_trkiso = TrigMuonEFMonitoring.TrigMuonEFTrackIsolationOnlineMonitoring() - - self.AthenaMonTools = [ validation_trkiso, online_trkiso ] - - -class TrigMuonEFTrackIsolationVarConfig (TrigMuonEFConf.TrigMuonEFTrackIsolation): - __slots__ = () - - def __init__( self, name="TrigMuonEFTrackIsolationVarConfig" ): - super( TrigMuonEFTrackIsolationVarConfig, self ).__init__( name ) - - # configure the isolation tool - trkseltoolname = 'TMEF_VarIsolationTool' - if 'LooseTSel' in name: - trkseltoolname = trkseltoolname + 'LooseTSel' - elif 'TightTSel' in name: - trkseltoolname = trkseltoolname + 'TightTSel' - - TMEF_VarIsolationTool = TMEF_TrackIsolationTool(trkseltoolname,useVarIso=True) - - # Isolation tool - self.IsolationTool = TMEF_VarIsolationTool - - - # ID tracks - self.IdTrackParticles = "InDetTrigTrackingxAODCnv_Muon_IDTrig" - - # Only run algo on combined muons - self.requireCombinedMuon = True - - # Use offline isolation variables - self.useVarIso = True - - # histograms - self.histoPathBase = "" - validation_trkiso = TrigMuonEFMonitoring.TrigMuonEFTrackIsolationValidationMonitoring() - online_trkiso = TrigMuonEFMonitoring.TrigMuonEFTrackIsolationOnlineMonitoring() - - # timing - self.doMyTiming = True - timetool = TrigTimeHistToolConfig("Time") - timetool.NumberOfHistBins=100 - timetool.TimerHistLimits=[0,1000] - - self.AthenaMonTools = [ validation_trkiso, online_trkiso, timetool ] - - -def InDetTrkRoiMaker_Muon(name="InDetTrkRoiMaker_Muon",**kwargs): - kwargs.setdefault("FullScanMode", "HybridScan") - kwargs.setdefault("SeedsIDalgo", "FTF") - kwargs.setdefault("SeedsEtaMax", 2.5) - kwargs.setdefault("SeedsPtMin", 2.0) # GeV - kwargs.setdefault("FullEtaRange", 3.0) # MS goes up to 2.7 - kwargs.setdefault("AthenaMonTools", [ TrigMuonEFMonitoring.InDetTrkRoiMakerMonitoring("Monitoring"), - TrigMuonEFMonitoring.InDetTrkRoiMakerValidationMonitoring("MonitoringVal"), - TrigTimeHistToolConfig("Time")] ) - - return CfgMgr.InDetTrkRoiMaker(name,**kwargs) - - -class TrigMuonEFRoiAggregatorConfig (TrigMuonEFConf.TrigMuonEFRoiAggregator): - __slots__ = () - - def __init__( self, name="TrigMuonEFRoiAggregator", **kwargs): - super( TrigMuonEFRoiAggregatorConfig, self ).__init__( name ) - - kwargs.setdefault("CopyTracks", False) - self.CopyTracks = True - - -class TrigMuonEFFSRoiMakerConfig(TrigMuonEFConf.TrigMuonEFFSRoiMaker): - __slots__ = () - - def __init__( self, name="TrigMuonEFFSRoiMaker", **kwargs): - super( TrigMuonEFFSRoiMakerConfig, self ).__init__( name ) - - self.MuonPtCut = 0.0 - self.OutputContName = "MuonEFInfo" - self.CreateFSRoI = False - - montool = TrigMuonEFMonitoring.TrigMuonEFFSRoiMakerMonitoring() - - self.AthenaMonTools = [ montool ] - -class TrigMuonEFFSRoiMakerCaloTagConfig(TrigMuonEFConf.TrigMuonEFFSRoiMaker): - __slots__ = () - - def __init__( self, name="TrigMuonEFFSRoiMakerCaloTag", **kwargs): - super( TrigMuonEFFSRoiMakerCaloTagConfig, self ).__init__( name ) - - self.MuonPtCut = 0.0 - self.OutputContName = "MuonEFInfo" - self.InvertRoI = True - self.UseFSRoI = False - - kwargs.setdefault("RoISizeEta", 3.0) - kwargs.setdefault("RoISizePhi", 1.5) - kwargs.setdefault("RoILabel", "forID") - - self.RoISizeEta = kwargs["RoISizeEta"] - self.RoISizePhi = kwargs["RoISizePhi"] - - self.RoILabel = kwargs["RoILabel"] - - montool = TrigMuonEFMonitoring.TrigMuonEFFSRoiMakerMonitoring() - - self.AthenaMonTools = [ montool ] - -class TrigMuonEFFSRoiMakerUnseededConfig(TrigMuonEFConf.TrigMuonEFFSRoiMaker): - __slots__ = () - - def __init__( self, name="TrigMuonEFFSRoiMakerUnseeded", **kwargs): - super( TrigMuonEFFSRoiMakerUnseededConfig, self ).__init__( name ) - - self.MuonPtCut = 0.0 - self.OutputContName = "MuonEFInfo" - self.CreateCrackRoI = True - - kwargs.setdefault("RoISizeEta", 0.1) - kwargs.setdefault("RoISizePhi", 3.14159) - kwargs.setdefault("RoILabel", "forID") - - self.RoISizeEta = kwargs["RoISizeEta"] - self.RoISizePhi = kwargs["RoISizePhi"] - self.RoILabel = kwargs["RoILabel"] - - montool = TrigMuonEFMonitoring.TrigMuonEFFSRoiMakerMonitoring() - - self.AthenaMonTools = [ montool ] - -# Python config class for the TrigMuonEDIDTrackRoiMaker c++ algorithm -class TrigMuonEFIDTrackRoiMakerConfig(TrigMuonEFConf.TrigMuonEFIDTrackRoiMaker): - __slots__ = () - - def __init__( self, name="TrigMuonEFIDTrackRoiMaker", **kwargs): - super( TrigMuonEFIDTrackRoiMakerConfig, self ).__init__( name ) - - # use 12mm z-width for all chains - self.Z0Width = 12.0*mm - - montool = TrigMuonEFMonitoring.TrigMuonEFIDTrackRoiMakerMonitoring() - - self.AthenaMonTools = [ montool ] - class TrigMuonEFTrackIsolationMTConfig (TrigMuonEFConf.TrigMuonEFTrackIsolationAlgMT): __slots__ = () diff --git a/Trigger/TrigAlgorithms/TrigMuonEF/python/TrigMuonEFConfigDb.py b/Trigger/TrigAlgorithms/TrigMuonEF/python/TrigMuonEFConfigDb.py deleted file mode 100644 index af5ddc0daedbd7fc8e2bdf5258b6c94dcf832f37..0000000000000000000000000000000000000000 --- a/Trigger/TrigAlgorithms/TrigMuonEF/python/TrigMuonEFConfigDb.py +++ /dev/null @@ -1,69 +0,0 @@ -# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration - -from AthenaCommon.CfgGetter import addAlgorithm,addTool -from AtlasGeoModel.MuonGMJobProperties import MuonGeometryFlags - -addTool("TrigMuonEF.TrigMuonEFConfig.TrigMuonEFStandaloneTrackToolConfig", "TrigMuonEFStandaloneTrackTool") - -addTool("TrigMuonEF.TrigMuonEFConfig.TMEF_CaloEnergyMeas", "TMEF_CaloEnergyMeas") -addTool("TrigMuonEF.TrigMuonEFConfig.TMEF_CaloEnergyTool", "TMEF_CaloEnergyTool") -addTool("TrigMuonEF.TrigMuonEFConfig.TMEF_CaloTrackStateOnSurface", "TMEF_CaloTrackStateOnSurface") -addTool("TrigMuonEF.TrigMuonEFConfig.TMEF_MaterialEffectsUpdator", "TMEF_MaterialEffectsUpdator") -addTool("TrigMuonEF.TrigMuonEFConfig.TMEF_Navigator", "TMEF_Navigator") -addTool("TrigMuonEF.TrigMuonEFConfig.TMEF_Propagator", "TMEF_Propagator") -addTool("TrigMuonEF.TrigMuonEFConfig.TMEF_Extrapolator", "TMEF_Extrapolator") -addTool("TrigMuonEF.TrigMuonEFConfig.TMEF_TrackSummaryTool", "TMEF_TrackSummaryTool") -addTool("TrigMuonEF.TrigMuonEFConfig.TMEF_CombinedMuonTag", "TMEF_CombinedMuonTag") -addTool("TrigMuonEF.TrigMuonEFConfig.TMEF_MatchQuality", "TMEF_MatchQuality") -addTool("TrigMuonEF.TrigMuonEFConfig.TMEF_MaterialAllocator", "TMEF_MaterialAllocator") -addTool("TrigMuonEF.TrigMuonEFConfig.TMEF_iPatFitter", "TMEF_iPatFitter") -addTool("TrigMuonEF.TrigMuonEFConfig.TMEF_iPatSLFitter", "TMEF_iPatSLFitter") -addTool("TrigMuonEF.TrigMuonEFConfig.TMEF_TrackCleaner", "TMEF_TrackCleaner") -addTool("TrigMuonEF.TrigMuonEFConfig.TMEF_CombinedMuonTrackBuilder", "TMEF_CombinedMuonTrackBuilder") -addTool("TrigMuonEF.TrigMuonEFConfig.TMEF_MuonTrackQuery", "TMEF_MuonTrackQuery") -addTool("TrigMuonEF.TrigMuonEFConfig.TMEF_MatchMaker", "TMEF_MatchMaker") -addTool("TrigMuonEF.TrigMuonEFConfig.TMEF_TrackBuilderTool", "TMEF_TrackBuilderTool") - -addTool("TrigMuonEF.TrigMuonEFConfig.TMEF_TrackSummaryToolNoHole", "TMEF_TrackSummaryToolNoHole") -addTool("TrigMuonEF.TrigMuonEFConfig.TMEF_TrkToTrackParticleConvTool", "TMEF_TrkToTrackParticleConvTool") -addTool("TrigMuonEF.TrigMuonEFConfig.TMEF_MuonCombinedTool", "TMEF_MuonCombinedTool") -addTool("TrigMuonEF.TrigMuonEFConfig.TMEF_MuidMuonRecovery","TMEF_MuidMuonRecovery") -addTool("TrigMuonEF.TrigMuonEFConfig.MuonHolesOnTrack","MuonHolesOnTrack") -addTool("TrigMuonEF.TrigMuonEFConfig.TMEF_CombMuonMEOTPParam","TMEF_CombMuonMEOTPParam") -addTool("TrigMuonEF.TrigMuonEFConfig.TMEF_MuonCombinedPropagator","TMEF_MuonCombinedPropagator") -addTool("TrigMuonEF.TrigMuonEFConfig.TMEF_OutwardsMuonTrackCleaner","TMEF_OutwardsMuonTrackCleaner") -addTool("TrigMuonEF.TrigMuonEFConfig.TMEF_MuonCombinedTrackFitter","TMEF_MuonCombinedTrackFitter") -addTool("TrigMuonEF.TrigMuonEFConfig.TMEF_OutwardsCombinedMuonTrackBuilder","TMEF_OutwardsCombinedMuonTrackBuilder") -addTool("TrigMuonEF.TrigMuonEFConfig.TMEF_MuonCombinedFitTagTool","TMEF_MuonCombinedFitTagTool") -addTool("TrigMuonEF.TrigMuonEFConfig.TrigMuonAmbiProcessor","TrigMuonAmbiProcessor") -addTool("TrigMuonEF.TrigMuonEFConfig.TMEF_MuonCreatorTool","TMEF_MuonCreatorTool") -addTool("TrigMuonEF.TrigMuonEFConfig.TMEF_MuonCandidateTool","TMEF_MuonCandidateTool") -addTool("TrigMuonEF.TrigMuonEFConfig.TMEF_TrkMaterialProviderTool", "TMEF_TrkMaterialProviderTool") - -addTool("TrigMuonEF.TrigMuonEFConfig.TMEF_MuonCandidateTrackBuilderTool", "TMEF_MuonCandidateTrackBuilderTool") -addTool("TrigMuonEF.TrigMuonEFConfig.TMEF_MuonInsideOutRecoTool", "TMEF_MuonInsideOutRecoTool") -addTool("TrigMuonEF.TrigMuonEFConfig.TMEF_MuonPRDSelectionTool", "TMEF_MuonPRDSelectionTool") -addTool("TrigMuonEF.TrigMuonEFConfig.TMEF_MuonLayerSegmentFinderTool", "TMEF_MuonLayerSegmentFinderTool", Csc2DSegmentMaker=("Csc2dSegmentMaker/Csc2dSegmentMaker" if MuonGeometryFlags.hasCSC() else ""), Csc4DSegmentMaker=("Csc4dSegmentMaker/Csc4dSegmentMaker" if MuonGeometryFlags.hasCSC() else "")) -addTool("TrigMuonEF.TrigMuonEFConfig.TMEF_MuonClusterSegmentFinderTool", "TMEF_MuonClusterSegmentFinderTool") -addTool("TrigMuonEF.TrigMuonEFConfig.TMEF_MuonClusterSegmentFinder", "TMEF_MuonClusterSegmentFinder") - -addTool("TrigMuonEF.TrigMuonEFConfig.TMEF_MuonStauRecoTool", "TMEF_MuonStauRecoTool") -addTool("TrigMuonEF.TrigMuonEFConfig.TMEF_MuonStauInsideOutRecoTool", "TMEF_MuonStauInsideOutRecoTool") -addTool("TrigMuonEF.TrigMuonEFConfig.TMEF_MuonStauCandidateTrackBuilderTool", "TMEF_MuonStauCandidateTrackBuilderTool") -addTool("TrigMuonEF.TrigMuonEFConfig.TMEF_CombinedStauTrackBuilder", "TMEF_CombinedStauTrackBuilder") -addTool("TrigMuonEF.TrigMuonEFConfig.TMEF_MuonStauSegmentRegionRecoveryTool", "TMEF_MuonStauSegmentRegionRecoveryTool") -addTool("TrigMuonEF.TrigMuonEFConfig.TMEF_CombinedStauTrackBuilderFit", "TMEF_CombinedStauTrackBuilderFit") - -addTool("TrigMuonEF.TrigMuonEFConfig.TMEF_MdtRawDataProviderTool", "TMEF_MdtRawDataProviderTool") -addTool("TrigMuonEF.TrigMuonEFConfig.TMEF_CscRawDataProviderTool", "TMEF_CscRawDataProviderTool") -addTool("TrigMuonEF.TrigMuonEFConfig.TMEF_RpcRawDataProviderTool", "TMEF_RpcRawDataProviderTool") -addTool("TrigMuonEF.TrigMuonEFConfig.TMEF_TgcRawDataProviderTool", "TMEF_TgcRawDataProviderTool") - -addAlgorithm("TrigMuonEF.TrigMuonEFConfig.TrigMuonEFTrackIsolationConfig", "TrigMuonEFTrackIsolation") - -addAlgorithm("TrigMuonEF.TrigMuonEFConfig.TrigMuonEFFSRoiMakerConfig","TrigMuonEFFSRoiMaker") - -addAlgorithm("TrigMuonEF.TrigMuonEFConfig.TrigMuonEFIDTrackRoiMaker","TrigMuonEFIDTrackRoiMaker") - -addAlgorithm("TrigMuonEF.TrigMuonEFConfig.InDetTrkRoiMaker_Muon", "InDetTrkRoiMaker_Muon") - diff --git a/Trigger/TrigAlgorithms/TrigMuonEF/python/TrigMuonEFMonitoring.py b/Trigger/TrigAlgorithms/TrigMuonEF/python/TrigMuonEFMonitoring.py deleted file mode 100644 index ac152e99475d26c37808c96e91f5c7d84802a593..0000000000000000000000000000000000000000 --- a/Trigger/TrigAlgorithms/TrigMuonEF/python/TrigMuonEFMonitoring.py +++ /dev/null @@ -1,326 +0,0 @@ -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration - -import math - -from TrigMonitorBase.TrigGenericMonitoringToolConfig import defineHistogram, TrigGenericMonitoringToolConfig - - - - -class TrigMuonEFTrackIsolationOnlineMonitoring(TrigGenericMonitoringToolConfig): - def __init__ (self, name="TrigMuonEFTrackIsolationOnlineMonitoring"): - super(TrigMuonEFTrackIsolationOnlineMonitoring, self).__init__(name) - self.defineTarget("Online") - self.Histograms += [ defineHistogram('trks_trkptiso_cone2', type='TH1F', title="Track Isolation cone 0.2; MuonEF CB Trk Isolation cone 0.2 [GeV] (ID)", - xbins=35, xmin=-10, xmax=25) ] - self.Histograms += [ defineHistogram('trks_trkptiso_cone3', type='TH1F', title="Track Isolation cone 0.3; MuonEF CB Trk Isolation cone 0.3 [GeV] (ID)", - xbins=35, xmin=-10, xmax=25) ] - self.Histograms += [ defineHistogram('trks_trkdz', type='TH1F', title="dz to trks; dz to trks", - xbins=200, xmin=-10, xmax=10.0) ] - self.Histograms += [ defineHistogram('trks_trkdr', type='TH1F', title="dr to trks; dr to trks", - xbins=60, xmin=0.0, xmax=3.0) ] - -class TrigMuonEFTrackIsolationValidationMonitoring(TrigGenericMonitoringToolConfig): - def __init__ (self, name="TrigMuonEFTrackIsolationValidationMonitoring"): - super(TrigMuonEFTrackIsolationValidationMonitoring, self).__init__(name) - self.defineTarget("Validation") - - self.Histograms += [ defineHistogram('trks_trkptiso_cone2', type='TH1F', title="Track Isolation cone 0.2; MuonEF CB Trk Isolation cone 0.2 [GeV] (ID)", - xbins=35, xmin=-10, xmax=25) ] - self.Histograms += [ defineHistogram('trks_trkptiso_cone3', type='TH1F', title="Track Isolation cone 0.3; MuonEF CB Trk Isolation cone 0.3 [GeV] (ID)", - xbins=35, xmin=-10, xmax=25) ] - self.Histograms += [ defineHistogram('trks_trkdz', type='TH1F', title="dz to trks; dz to trks", - xbins=200, xmin=-10, xmax=10.0) ] - self.Histograms += [ defineHistogram('trks_trkdr', type='TH1F', title="dr to trks; dr to trks", - xbins=60, xmin=0.0, xmax=3.0) ] - - self.Histograms += [ defineHistogram('n_trks', type='TH1F', title="N_tracks passed to algorithm", - xbins=11, xmin=-0.5, xmax=10.5) ] - - self.Histograms += [ defineHistogram('muon_selfpt', type='TH1F', title="Muon ID Track pT (ID Tracks)", - xbins=100, xmin=0, xmax=100) ] - - self.Histograms += [ defineHistogram('muon_removedpt', type='TH1F', title="Muon Removed pT (ID Tracks)", - xbins=100, xmin=0, xmax=100) ] - self.Histograms += [ defineHistogram('muon_combinedpt', type='TH1F', title="Muon Combined pT (ID Tracks)", - xbins=100, xmin=0, xmax=100) ] - - - - -class TrigMuonEFCaloIsolationValidationMonitoring(TrigGenericMonitoringToolConfig): - def __init__ (self, name="TrigMuonEFCaloIsolationValidationMonitoring"): - super(TrigMuonEFCaloIsolationValidationMonitoring, self).__init__(name) - self.defineTarget("Validation") - self.Histograms += [ defineHistogram('EF_etiso_cone2', type='TH1F', title="Calo Isolation cone 0.2; MuonEF Calo Isolation cone 0.2 [GeV]", - xbins=40, xmin=-10, xmax=30) ] - self.Histograms += [ defineHistogram('EF_etiso_cone3', type='TH1F', title="Calo Isolation cone 0.3; MuonEF Calo Isolation cone 0.3 [GeV]", - xbins=40, xmin=-10, xmax=30) ] - self.Histograms += [ defineHistogram('EF_etiso_cone4', type='TH1F', title="Calo Isolation cone 0.4; MuonEF Calo Isolation cone 0.4 [GeV]", - xbins=40, xmin=-10, xmax=30) ] - - -class TrigMuonEFStandaloneToolMonitoring(TrigGenericMonitoringToolConfig): - def __init__ (self, name="TrigMuonEFStandaloneToolMonitoring"): - super(TrigMuonEFStandaloneToolMonitoring, self).__init__(name) - self.defineTarget( ["Online", "Validation"] ) - - # segment finding - self.Histograms += [ defineHistogram('EF_segs_nsegs', type='TH1F', title="Number of segments (TMEF seg); Muon EF SF segments", - xbins=100, xmin=0, xmax=100)] - self.Histograms += [ defineHistogram('EF_segs_phi', type='TH1F', title="EF Segment Phi (TMEF seg); Muon EF SF Phi", - xbins=100, xmin=-5, xmax=5)] - self.Histograms += [ defineHistogram('EF_segs_eta', type='TH1F', title="EF Segment Eta (TMEF seg); Muon EF SF Eta", - xbins=100, xmin=-5, xmax=5)] - self.Histograms += [ defineHistogram('EF_segs_eta, EF_segs_phi', type='TH2F', title="EF Segment Eta vs Phi (TMEF seg); Muon EF SF Eta ; Muon EF SF Phi", - xbins=60, xmin=-3., xmax=3., ybins=48, ymin=-3.142, ymax=3.142) ] - - # TMEF MS track - self.Histograms += [ defineHistogram('EF_mstrks_n', type='TH1F', title="Number of tracks (TMEF MS track); Muon EF TB Number of Tracks", - xbins=50, xmin=0, xmax=50) ] - self.Histograms += [ defineHistogram('EF_mstrks_pt', type='TH1F', title="pt (TMEF MS track); Muon EF TB Track pt [GeV]", - xbins=100, xmin=0, xmax=200) ] - self.Histograms += [ defineHistogram('EF_mstrks_phi', type='TH1F', title="phi (TMEF MS track); Muon EF TB Track Phi", - xbins=100, xmin=-5, xmax=5) ] - self.Histograms += [ defineHistogram('EF_mstrks_eta', type='TH1F', title="eta (TMEF MS track); Muon EF TB Track Eta", - xbins=100, xmin=-5.5, xmax=5.5) ] - self.Histograms += [ defineHistogram('EF_mstrks_eta, EF_mstrks_phi', type='TH2F', title="EF_mstrks_eta_vs_EF_mstrks_phi (TMEF MS track); Muon EF TB Eta-Phi", - xbins=60, xmin=-3, xmax=3, ybins=48, ymin=-3.142, ymax=3.142) ] - - - # TMEF SA track - self.Histograms += [ defineHistogram('EF_satrks_n', type='TH1F', title="Number of tracks (TMEF SA track); Muon EF SA Number of Tracks", - xbins=50, xmin=0, xmax=50) ] - self.Histograms += [ defineHistogram('EF_satrks_pt', type='TH1F', title="pt (TMEF SA track); Muon EF SA Track pt [GeV]", - xbins=100, xmin=0, xmax=200) ] - self.Histograms += [ defineHistogram('EF_satrks_phi', type='TH1F', title="phi (TMEF SA track); Muon EF SA Track Phi", - xbins=100, xmin=-5, xmax=5) ] - self.Histograms += [ defineHistogram('EF_satrks_eta', type='TH1F', title="eta (TMEF SA track); Muon EF SA Track Eta", - xbins=100, xmin=-5.5, xmax=5.5) ] - -class TrigMuonEFStandaloneToolValidationMonitoring(TrigGenericMonitoringToolConfig): - def __init__ (self, name="TrigMuonEFStandaloneToolValidationMonitoring"): - super(TrigMuonEFStandaloneToolValidationMonitoring, self).__init__(name) - self.defineTarget( ["Validation"] ) - - # segment finding - self.Histograms += [ defineHistogram('l2_cosmic_phi', type='TH1F', title="L2 CosmicMuon phi (TMEF seg); Muon EF SF Phi", - xbins=100, xmin=-5, xmax=5) ] - self.Histograms += [ defineHistogram('l2_cosmic_eta', type='TH1F', title="L2 CosmicMuon eta (TMEF seg); Muon EF SF Eta", - xbins=100, xmin=-5, xmax=5)] - self.Histograms += [ defineHistogram('ef_phi, l2_cosmic_phi', type='TH2F', title="EF phi L2 vs EF (TMEF seg); Muon EF SF Phi", - xbins=48, xmin=-3.142, xmax=3.142, ybins=48, ymin=-3.142, ymax=3.142) ] - self.Histograms += [ defineHistogram('ef_eta, l2_cosmic_eta', type='TH2F', title="EF eta L2 vs EF (TMEF seg); Muon EF SF Eta", - xbins=60, xmin=-3, xmax=3, ybins=60, ymin=-3, ymax=3.) ] - - self.Histograms += [ defineHistogram('EF_segs_wasCached', type='TH1F', - title="Did segments come from cache?;0=no 1=yes", - xbins=2, xmin=-0.5, xmax=1.5) ] - self.Histograms += [ defineHistogram('EF_segs_nsegcomb', type='TH1F', title="Number of segment combinations (TMEF seg); Muon EF SF segments", - xbins=50, xmin=0, xmax=50)] - self.Histograms += [ defineHistogram('EF_segs_nstations', type='TH1F', title="Number of stations (TMEF seg); Muon EF SF segments", - xbins=10, xmin=0, xmax=10)] - self.Histograms += [ defineHistogram('EF_segs_chi2pndof', type='TH1F', title="EF Segment Chi2 / ndof (TMEF seg); Muon EF SF Chi2 / ndof", - xbins=100, xmin=0.0, xmax=20.0) ] - self.Histograms += [ defineHistogram('EF_segs_nMdt', type='TH1F', title="Number mdt hits per segment (TMEF seg); Muon EF SF Mdt Hits ", - xbins=50, xmin=0, xmax=50) ] - self.Histograms += [ defineHistogram('EF_segs_nCsc', type='TH1F', title="Number csc hits per segment (TMEF seg); Muon EF SF Csc hits", - xbins=50, xmin=0, xmax=50) ] - self.Histograms += [ defineHistogram('EF_segs_nRpc', type='TH1F', title="Number rpc hits per segment (TMEF seg); Muon EF SF Rpc hits", - xbins=50, xmin=0, xmax=50) ] - self.Histograms += [ defineHistogram('EF_segs_nTgc', type='TH1F', title="Number tgc hits per segment (TMEF seg); Muon EF SF Tgc hits", - xbins=50, xmin=0, xmax=50) ] - self.Histograms += [ defineHistogram('EF_segs_mdt_radius', type='TH1F', title="Mdt tube radius (TMEF seg); Muon EF SF Drift radius [mm] of Mdt hits", - xbins=50, xmin=-50, xmax=50) ] - self.Histograms += [ defineHistogram('EF_segs_mdt_tdc', type='TH1F', title="Mdt tube tdc (TMEF seg); Muon EF SF TDC counts of Mdt hits", - xbins=100, xmin=0, xmax=2000) ] - self.Histograms += [ defineHistogram('EF_segs_mdt_adc', type='TH1F', title="Mdt tube adc (TMEF seg); Muon EF SF ADC counts of Mdt hits", - xbins=100, xmin=0, xmax=2000) ] - self.Histograms += [ defineHistogram('EF_segs_mdt_z', type='TH1F', title="Mdt tube z (TMEF seg); Muon EF SF Tube z [mm]", - xbins=100, xmin=-25000, xmax=25000) ] - - # TMEF MS track - self.Histograms += [ defineHistogram('EF_mstrks_wasCached', type='TH1F', - title="Did MS tracks come from cache?;0=no 1=yes", - xbins=2, xmin=-0.5, xmax=1.5) ] - self.Histograms += [ defineHistogram('EF_mstrks_chi2', type='TH1F', title="chi2 (TMEF MS track); Muon EF TB Track chi2", - xbins=100, xmin=0, xmax=30) ] - self.Histograms += [ defineHistogram('EF_mstrks_d0', type='TH1F', title="d0 (TMEF MS track); Muon EF TB Track d0", - xbins=100, xmin=-0.01, xmax=0.01) ] - self.Histograms += [ defineHistogram('EF_mstrks_z0', type='TH1F', title="z0 (TMEF MS track); Muon EF TB Track z0 [mm]", - xbins=100, xmin=-50, xmax=50) ] - self.Histograms += [ defineHistogram('EF_mstrks_nMdt', type='TH1F', title="Number of Mdt (TMEF MS track); Muon EF TB Mdt hits", - xbins=50, xmin=0, xmax=50) ] - self.Histograms += [ defineHistogram('EF_mstrks_nRpcEta', type='TH1F', title="Number of Rpc eta (TMEF MS track); Muon EF TB Rpc Eta hits", - xbins=50, xmin=0, xmax=50) ] - self.Histograms += [ defineHistogram('EF_mstrks_nRpcPhi', type='TH1F', title="Number of Rpc phi (TMEF MS track); Muon EF TB Rpc Phi hits", - xbins=50, xmin=0, xmax=50) ] - self.Histograms += [ defineHistogram('EF_mstrks_nTgcEta', type='TH1F', title="Number of Tgc eta (TMEF MS track); Muon EF TB Tgc Eta hits", - xbins=50, xmin=0, xmax=50) ] - self.Histograms += [ defineHistogram('EF_mstrks_nTgcPhi', type='TH1F', title="Number of Tgc phi (TMEF MS track); Muon EF TB Tgc Phi hits", - xbins=50, xmin=0, xmax=50) ] - self.Histograms += [ defineHistogram('EF_mstrks_nCscEta', type='TH1F', title="Number of Csc eta (TMEF MS track); Muon EF TB Csc Eta hits", - xbins=50, xmin=0, xmax=50) ] - self.Histograms += [ defineHistogram('EF_mstrks_nCscPhi', type='TH1F', title="Number of Csc phi (TMEF MS track); Muon EF TB Csc Phi hits", - xbins=50, xmin=0, xmax=50) ] - self.Histograms += [ defineHistogram('EF_mstrks_nHit', type='TH1F', title="Number of Hit on track (TMEF MS track); Muon EF TB Total hits", - xbins=50, xmin=0, xmax=100) ] - - - # TMEF SA track - self.Histograms += [ defineHistogram('EF_satrks_wasCached', type='TH1F', - title="Did SA tracks come from cache?;0=no 1=yes", - xbins=2, xmin=-0.5, xmax=1.5) ] - self.Histograms += [ defineHistogram('EF_satrks_chi2', type='TH1F', title="chi2 (TMEF SA track); Muon EF SA Track chi2", - xbins=100, xmin=0, xmax=30) ] - self.Histograms += [ defineHistogram('EF_satrks_d0', type='TH1F', title="d0 (TMEF SA track); Muon EF SA Track d0", - xbins=100, xmin=-1000, xmax=1000) ] - self.Histograms += [ defineHistogram('EF_satrks_z0', type='TH1F', title="z0 (TMEF SA track); Muon EF SA Track z0 [mm]", - xbins=100, xmin=-1000, xmax=1000) ] - self.Histograms += [ defineHistogram('EF_satrks_nMdt', type='TH1F', title="Number of Mdt (TMEF SA track); Muon EF SA Mdt hits", - xbins=50, xmin=0, xmax=50) ] - self.Histograms += [ defineHistogram('EF_satrks_nRpcEta', type='TH1F', title="Number of Rpc eta (TMEF SA track); Muon EF SA Rpc Eta hits", - xbins=50, xmin=0, xmax=50) ] - self.Histograms += [ defineHistogram('EF_satrks_nRpcPhi', type='TH1F', title="Number of Rpc phi (TMEF SA track); Muon EF SA Rpc Phi hits", - xbins=50, xmin=0, xmax=50) ] - self.Histograms += [ defineHistogram('EF_satrks_nTgcEta', type='TH1F', title="Number of Tgc eta (TMEF SA track); Muon EF SA Tgc Eta hits", - xbins=50, xmin=0, xmax=50) ] - self.Histograms += [ defineHistogram('EF_satrks_nTgcPhi', type='TH1F', title="Number of Tgc phi (TMEF SA track); Muon EF SA Tgc Phi hits", - xbins=50, xmin=0, xmax=50) ] - self.Histograms += [ defineHistogram('EF_satrks_nCscEta', type='TH1F', title="Number of Csc eta (TMEF SA track); Muon EF SA Csc Eta hits", - xbins=50, xmin=0, xmax=50) ] - self.Histograms += [ defineHistogram('EF_satrks_nCscPhi', type='TH1F', title="Number of Csc phi (TMEF SA track); Muon EF SA Csc Phi hits", - xbins=50, xmin=0, xmax=50) ] - self.Histograms += [ defineHistogram('EF_satrks_nHit', type='TH1F', title="Number of Hit on track (TMEF SA track); Muon EF SA Total hits", - xbins=50, xmin=0, xmax=100) ] - - -class TrigMuonEFCombinerToolMonitoring(TrigGenericMonitoringToolConfig): - def __init__ (self, name="TrigMuonEFCombinerToolMonitoring"): - super(TrigMuonEFCombinerToolMonitoring, self).__init__(name) - self.defineTarget( ["Online", "Validation"] ) - - # TMEF combined track - self.Histograms += [ defineHistogram('EF_cbtrks_n', type='TH1F', title="Number of tracks (TMEF CB track); MuonEF CB Number of Tracks", - xbins=50, xmin=0, xmax=50) ] - self.Histograms += [ defineHistogram('EF_cbtrks_pt', type='TH1F', title="pt (TMEF CB track); MuonEF CB Track pt [GeV]", - xbins=100, xmin=0, xmax=200) ] - self.Histograms += [ defineHistogram('EF_cbtrks_phi', type='TH1F', title="phi (TMEF CB track); MuonEF CB Track Phi", - xbins=100, xmin=-5, xmax=5) ] - self.Histograms += [ defineHistogram('EF_cbtrks_eta', type='TH1F', title="eta (TMEF CB track); MuonEF CB Track Eta", - xbins=100, xmin=-5.5, xmax=5.5) ] - - -class TrigMuonEFCombinerToolValidationMonitoring(TrigGenericMonitoringToolConfig): - def __init__ (self, name="TrigMuonEFCombinerToolValidationMonitoring"): - super(TrigMuonEFCombinerToolValidationMonitoring, self).__init__(name) - self.defineTarget( ["Validation"] ) - - # TMEF combined track - self.Histograms += [ defineHistogram('EF_cbtrks_chi2', type='TH1F', title="chi2 (TMEF CB track); MuonEF CB Track chi2", - xbins=100, xmin=0, xmax=30) ] - self.Histograms += [ defineHistogram('EF_cbtrks_match_chi2', type='TH1F', title="chi2 (TMEF CB track); MuonEF CB Track matching chi2", - xbins=100, xmin=0, xmax=50) ] - self.Histograms += [ defineHistogram('EF_cbtrks_nMdt', type='TH1F', title="Number of Mdt (TMEF CB track); MuonEF CB Mdt hits", - xbins=50, xmin=0, xmax=50) ] - self.Histograms += [ defineHistogram('EF_cbtrks_nRpcEta', type='TH1F', title="Number of Rpc eta (TMEF CB track); MuonEF CB Rpc Eta hits", - xbins=50, xmin=0, xmax=50) ] - self.Histograms += [ defineHistogram('EF_cbtrks_nRpcPhi', type='TH1F', title="Number of Rpc phi (TMEF CB track); MuonEF CB Rpc Phi hits", - xbins=50, xmin=0, xmax=50) ] - self.Histograms += [ defineHistogram('EF_cbtrks_nTgcEta', type='TH1F', title="Number of Tgc eta (TMEF CB track); MuonEF CB Tgc Eta hits", - xbins=50, xmin=0, xmax=50) ] - self.Histograms += [ defineHistogram('EF_cbtrks_nTgcPhi', type='TH1F', title="Number of Tgc phi (TMEF CB track); MuonEF CB Tgc Phi hits", - xbins=50, xmin=0, xmax=50) ] - self.Histograms += [ defineHistogram('EF_cbtrks_nCscEta', type='TH1F', title="Number of Csc eta (TMEF CB track); MuonEF CB Csc Eta hits", - xbins=50, xmin=0, xmax=50) ] - self.Histograms += [ defineHistogram('EF_cbtrks_nCscPhi', type='TH1F', title="Number of Csc phi (TMEF CB track); MuonEF CB Csc Phi hits", - xbins=50, xmin=0, xmax=50) ] - self.Histograms += [ defineHistogram('EF_cbtrks_nHit', type='TH1F', title="Number of Hit on track (TMEF CB track); MuonEF CB Total hits", - xbins=150, xmin=0, xmax=150) ] - self.Histograms += [ defineHistogram('EF_cbtrks_nIdPixelHit', type='TH1F', title="Number of IdPixelHit on track (TMEF CB track); MuonEF CB Pixel hits", - xbins=10, xmin=0, xmax=10) ] - self.Histograms += [ defineHistogram('EF_cbtrks_nIdSctHit', type='TH1F', title="Number of IdSctHit on track (TMEF CB track); MuonEF CB Sct hits", - xbins=20, xmin=0, xmax=20) ] - self.Histograms += [ defineHistogram('EF_cbtrks_nIdTrtHit', type='TH1F', title="Number of IdTrtHit on track (TMEF CB track); MuonEF CB Trt hits", - xbins=50, xmin=0, xmax=50) ] - self.Histograms += [ defineHistogram('EF_cbtrks_d0', type='TH1F', title="d0 (TMEF CB track); MuonEF CB Track d0", - xbins=100, xmin=-10, xmax=10) ] - self.Histograms += [ defineHistogram('EF_cbtrks_z0', type='TH1F', title="z0 (TMEF CB track); MuonEF CB Track z0 [mm]", - xbins=100, xmin=-250, xmax=250) ] - - - -class InDetTrkRoiMakerMonitoring(TrigGenericMonitoringToolConfig): - def __init__ (self, name="InDetTrkRoiMakerMonitoring",**kwargs): - super(InDetTrkRoiMakerMonitoring, self).__init__(name,**kwargs) - self.defineTarget( ["Online", "Validation"] ) - - self.Histograms += [ defineHistogram('nTrksIn', type='TH1F', title="Number of ID tracks in input", - xbins=1001, xmin=-0.5, xmax=1000.5) ] - - self.Histograms += [ defineHistogram('nRoiOut', type='TH1F', title="Number of ROI's made from ID tracks", - xbins=101, xmin=-0.5, xmax=100.5) ] - - self.Histograms += [ defineHistogram('etaTrkIn', type='TH1F', title="eta of input ID tracks", - xbins=60, xmin=-3.0, xmax=3.0) ] - - self.Histograms += [ defineHistogram('phiTrkIn', type='TH1F', title="phi of input ID tracks", - xbins=60, xmin=-math.pi, xmax=math.pi) ] - - -class InDetTrkRoiMakerValidationMonitoring(TrigGenericMonitoringToolConfig): - def __init__ (self, name="InDetTrkRoiMakerValidationMonitoring",**kwargs): - super(InDetTrkRoiMakerValidationMonitoring, self).__init__(name,**kwargs) - self.defineTarget( ["Validation"] ) - - self.Histograms += [ defineHistogram('nRoiToTrkRatio', type='TH1F', title="fraction of ID tracks that become ROI's", - xbins=100, xmin=0.0, xmax=1.0) ] - - - self.Histograms += [ defineHistogram('ptTrkIn', type='TH1F', title="pT of input ID tracks [GeV]", - xbins=100, xmin=0.0, xmax=100) ] - - - self.Histograms += [ defineHistogram('ptRoiOut', type='TH1F', title="pT of ID tracks that make an ROI [GeV]", - xbins=100, xmin=0.0, xmax=100) ] - - - self.Histograms += [ defineHistogram('etaRoiOut', type='TH1F', title="eta of ID tracks that make an ROI", - xbins=60, xmin=-3.0, xmax=3.0) ] - - self.Histograms += [ defineHistogram('phiRoiOut', type='TH1F', title="phi of ID tracks that make an ROI", - xbins=60, xmin=-math.pi, xmax=math.pi) ] - - self.Histograms += [ defineHistogram('dEtaTrkSel', type='TH1F', title="eta difference between ID tracks that pass track cuts", - xbins=120, xmin=-6.0, xmax=6.0) ] - - self.Histograms += [ defineHistogram('dPhiTrkSel', type='TH1F', title="phi difference between ID tracks that pass track cuts", - xbins=60, xmin=-math.pi, xmax=math.pi) ] - self.Histograms += [ defineHistogram('dRTrkSel', type='TH1F', title="deltaR between ID tracks that pass track cuts", - xbins=100, xmin=0, xmax=1) ] - - self.Histograms += [ defineHistogram('logdRTrkSel', type='TH1F', title="log(deltaR) between ID tracks that pass track cuts", - xbins=100, xmin=-3, xmax=1) ] - - -class TrigMuonEFFSRoiMakerMonitoring(TrigGenericMonitoringToolConfig): - def __init__ (self, name="TrigMuonEFFSRoiMakerMonitoring",**kwargs): - super(TrigMuonEFFSRoiMakerMonitoring, self).__init__(name,**kwargs) - self.defineTarget( ["Online", "Validation"] ) - - self.Histograms += [ defineHistogram('nTrkIn', type='TH1F', title="Number of input muon tracks to EFFSRoiMaker;n(muons);Events", - xbins=6, xmin=-0.5, xmax=5.5) ] - self.Histograms += [ defineHistogram('nRoIOut', type='TH1F', title="Number of created RoIs;n(RoIs);Events", - xbins=6, xmin=-0.5, xmax=5.5) ] - -class TrigMuonEFIDTrackRoiMakerMonitoring(TrigGenericMonitoringToolConfig): - def __init__(self, name="TrigMuonEFIDTrackRoiMakerMonitoring",**kwargs): - super(TrigMuonEFIDTrackRoiMakerMonitoring, self).__init__(name,**kwargs) - self.defineTarget( ["Online", "Validation"] ) - - self.Histograms += [ defineHistogram('RoIz', type='TH1F', title="z0 of created RoIs;z0 [mm];RoIs", - xbins=50, xmin=-250, xmax=250) ] - self.Histograms += [ defineHistogram('DeltaEta', type='TH1F', title="difference in eta between muon and RoI;d(eta); Muons", - xbins=50, xmin=0.0, xmax=0.3) ] - self.Histograms += [ defineHistogram('DeltaPhi', type='TH1F', title="difference in phi between muon and RoI;d(phi); Muons", - xbins=50, xmin=0.0, xmax=0.3) ] diff --git a/Trigger/TrigAlgorithms/TrigMuonEF/src/InDetTrkRoiMaker.cxx b/Trigger/TrigAlgorithms/TrigMuonEF/src/InDetTrkRoiMaker.cxx deleted file mode 100644 index 1d2d43fdfc1fcee7e8c97b8035f0f678806df614..0000000000000000000000000000000000000000 --- a/Trigger/TrigAlgorithms/TrigMuonEF/src/InDetTrkRoiMaker.cxx +++ /dev/null @@ -1,316 +0,0 @@ -/* - Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration -*/ - -#include <cstdlib> -#include <cmath> - -#include "InDetTrkRoiMaker.h" - -#include "TrigSteeringEvent/TrigRoiDescriptor.h" -#include "TrigNavigation/TriggerElement.h" - -#include "TrigInDetEvent/TrigInDetTrackCollection.h" -#include "EventPrimitives/EventPrimitivesHelpers.h" - -namespace { - inline std::string quote( const std::string& s ) { return "\"" + s + "\""; } -} - -// static functions -InDetTrkRoiMaker::EFSMode InDetTrkRoiMaker::modeNameToEnum( const std::string& modeName ) { - unsigned int nModes = (unsigned int)kNumberOfModes; - for ( unsigned int iMode = 0; iMode < nModes; ++iMode ) { - if ( modeName == s_scanModeNames[iMode] ) return EFSMode(iMode); - } - // not found - return kNumberOfModes; // to signal failure -} - -TrigInDetTrack::AlgoId InDetTrkRoiMaker::seedsNameToEnum( const std::string& seedsName ) { - TrigInDetTrack::AlgoId algoId(TrigInDetTrack::STRATEGY_F_ID); - - if (seedsName=="STRATEGY_F") algoId = TrigInDetTrack::STRATEGY_F_ID; - else if (seedsName=="IDSCAN") algoId = TrigInDetTrack::IDSCANID; - else if (seedsName=="SITRACK") algoId = TrigInDetTrack::SITRACKID; - else if (seedsName=="STRATEGY_A") algoId = TrigInDetTrack::STRATEGY_A_ID; - else if (seedsName=="STRATEGY_B") algoId = TrigInDetTrack::STRATEGY_B_ID; - else if (seedsName=="STRATEGY_C") algoId = TrigInDetTrack::STRATEGY_C_ID; - else if (seedsName=="TRTXK") algoId = TrigInDetTrack::TRTXKID; - else if (seedsName=="TRTSEG") algoId = TrigInDetTrack::TRTLUTID; - else if (seedsName=="FTF") algoId = TrigInDetTrack::FTF; - return algoId; -} - -std::string InDetTrkRoiMaker::getScanModeHelp() { - std::string scanModeHelp("Possible values of full-scan mode:\n"); - unsigned int nModes = (unsigned int)kNumberOfModes; - for ( unsigned int iMode = 0; iMode < nModes; ++iMode ) { - scanModeHelp += quote(s_scanModeNames[kFullScan]); - scanModeHelp += ": Use full detector\n"; - scanModeHelp += quote(s_scanModeNames[kSeededScan]); - scanModeHelp += ": Use tracks as seeds to use multiple parts of detector"; - scanModeHelp += quote(s_scanModeNames[kHybridScan]); - scanModeHelp += ": Use SeededScan mode for |eta| <= SeedsEtaMax and FullScan mode for |eta| > SeedsEtaMax"; - } - return scanModeHelp; -} - - -/** - * Constructor - set up the algorithm - */ -InDetTrkRoiMaker::InDetTrkRoiMaker(const std::string & name, ISvcLocator* pSvcLocator) : - HLT::FexAlgo(name, pSvcLocator) -{ - // ID algorithm to use as input - declareProperty("FullScanMode", m_fullScanModeProperty="HybridScan", getScanModeHelp()); - // what to consider full detector eta range for end-caps in HybridScan mode - declareProperty("FullEtaRange", m_fullEtaRange = 5.0 ); - - declareProperty("SeedsIDalgo", m_ID_algo_to_use="STRATEGY_F"); - // main track cuts - declareProperty("SeedsEtaMax", m_EtaMaxTrk = 2.5, "Only use track seeds with |eta| <= SeedsEtaMax. Only used in modes \"SeededScan\" and \"HybridScan\""); - declareProperty("SeedsPtMin", m_PtMinTrk = 5.0, "Only use track seeds with pT >= SeedsPtMin (GeV/c). Only used in modes \"SeededScan\" and \"HybridScan\""); - //ID tracks quality parameters - declareProperty("SeedsMaxAbsZ", m_ZMaxTrk=999999999.); - declareProperty("SeedsMaxChi2", m_Chi2MaxTrk=999999999.); - declareProperty("SeedsMinNPixHit", m_NPIXhitMinTrk=0); - declareProperty("SeedsMinNSCTHit", m_NSCThitMinTrk=0); - - declareMonitoredVariable("nTrksIn", m_nTrksIn, IMonitoredAlgo::AutoClear); - declareMonitoredVariable("nRoiOut", m_nRoiOut, IMonitoredAlgo::AutoClear); - declareMonitoredVariable("nRoiToTrkRatio", m_nRoiToTrkRatio, IMonitoredAlgo::AutoClear); - - declareMonitoredStdContainer("ptTrkIn", m_ptTrkIn, IMonitoredAlgo::AutoClear); - declareMonitoredStdContainer("etaTrkIn", m_etaTrkIn, IMonitoredAlgo::AutoClear); - declareMonitoredStdContainer("phiTrkIn", m_phiTrkIn, IMonitoredAlgo::AutoClear); - declareMonitoredStdContainer("ptRoiOut", m_ptRoiOut, IMonitoredAlgo::AutoClear); - declareMonitoredStdContainer("etaRoiOut", m_etaRoiOut, IMonitoredAlgo::AutoClear); - declareMonitoredStdContainer("phiRoiOut", m_phiRoiOut, IMonitoredAlgo::AutoClear); - declareMonitoredStdContainer("dEtaTrkSel", m_dEtaTrkSel, IMonitoredAlgo::AutoClear); - declareMonitoredStdContainer("dPhiTrkSel", m_dPhiTrkSel, IMonitoredAlgo::AutoClear); - declareMonitoredStdContainer("dRTrkSel", m_dRTrkSel, IMonitoredAlgo::AutoClear); - declareMonitoredStdContainer("logdRTrkSel", m_logdRTrkSel, IMonitoredAlgo::AutoClear); - - // set consistent values of data members - m_seedsAlgoId = seedsNameToEnum(m_ID_algo_to_use); - m_fullScanMode = modeNameToEnum(m_fullScanModeProperty); - -} - -/** - * Destructor - clean up when done - */ -InDetTrkRoiMaker::~InDetTrkRoiMaker() { - -} - -/** - * Initialize the algorithm - */ -HLT::ErrorCode InDetTrkRoiMaker::hltInitialize() { - - m_seedsAlgoId = seedsNameToEnum(m_ID_algo_to_use); - m_fullScanMode = modeNameToEnum(m_fullScanModeProperty); - if ( m_fullScanMode == kNumberOfModes ) { - ATH_MSG_FATAL("FullScanMode = \"" << m_fullScanModeProperty << "\" not supported. " - << getScanModeHelp() ); - return HLT::BAD_JOB_SETUP; - } - - return HLT::OK; -}//hltInitialize - -/** - * Finalize the algorithm - */ -HLT::ErrorCode InDetTrkRoiMaker::hltFinalize() { - - return HLT::OK; -}//hltFinalize - -HLT::ErrorCode InDetTrkRoiMaker::hltExecute(const HLT::TriggerElement* inputTE, HLT::TriggerElement* outputTE) { - // clear monitor variables - beforeExecMonitors().ignore(); - outputTE->setActiveState(true); - - TrigRoiDescriptor* superRoI = new TrigRoiDescriptor(true); // create fullscan RoI - // superRoI->set_roiId(10000); /// do we need this ?? - - if ( m_fullScanMode == kFullScan ) { - /// now use a standard TrigRoiDescriptor, these are not - /// composite by default - superRoI->setComposite(false); // so it will be treated as a full-scan - - } else if ( m_fullScanMode == kSeededScan || m_fullScanMode == kHybridScan ) { - superRoI->setComposite(false); - // superRoI->manageConstituents(true); - - - - // std::vector <const TrigInDetTrackCollection*> vectorOfTrackCollections; - std::vector<const TrackCollection*> vectorOfTrackCollections; - if( HLT::OK != getFeatures(inputTE,vectorOfTrackCollections, "") ) { - ATH_MSG_WARNING(" Failed to get InDetTrackCollections --> no match"); - return HLT::MISSING_FEATURE; - } - - ATH_MSG_DEBUG(" Got InDetTrackCollections "<<vectorOfTrackCollections.size()); - - std::vector<const TrackCollection*>::iterator - theTrackColl = vectorOfTrackCollections.begin(), - endTrackColl = vectorOfTrackCollections.end(); - - // Loop on container & create ROIs. - int nFound(0); - int nIDtracks(0); - for ( ; theTrackColl != endTrackColl; ++theTrackColl ) {//Tracks Collections Loop - - TrackCollection::const_iterator - track = (*theTrackColl)->begin(), - lasttrack = (*theTrackColl)->end(); - - for ( ; track != lasttrack; ++track ) {//Tracks Loop - //Select tracks - ++nIDtracks; - - if (!((*track)->perigeeParameters())) continue; //Must have helix parameters - double pt_id = (*track)->perigeeParameters()->momentum().perp()*0.001; //in GeV/c - double phi_id = (*track)->perigeeParameters()->parameters()[Trk::phi0]; - double theta = (*track)->perigeeParameters()->parameters()[Trk::theta] ; - double eta_id = -log(fabs(tan(theta*0.5))); - - // FIXME: MS what are the eta and phi resolutions? are these set correctly? - // Use these for the roi sizes - // double deta_id = (*track)->perigeeParameters()->parameters()[Trk::eeta]; - - double zPos_id = (*track)->perigeeParameters()->parameters()[Trk::z0]; - double chi2_id = (*track)->fitQuality()->chiSquared(); - // int npixh_id = (*track)->NPixelSpacePoints(); - // int nscth_id = (*track)->NSCT_SpacePoints(); - // Eigen::Matrix<double, 5, 5, 0, 5, 5> covMat = *( (*track)->perigeeParameters()->covariance()); - double dphi_id = 0.1;//Amg::error(covMat,Trk::phi0); - // double dtheta_id = Amg::error(covMat,Trk::theta); - double deta_id = 0.1; - // if(fabs(sin(theta))>0) deta_id = dtheta_id/sin(theta); - // ATH_MSG_DEBUG("dphi: "<<dphi_id<<" deta: "<<deta_id); - ATH_MSG_DEBUG( "Found track: " - << m_ID_algo_to_use - << " with pt= " << pt_id - << ", eta=" << eta_id - << ", phi=" << phi_id - << ", Zid=" << zPos_id - << ", Chi2=" << chi2_id - // << ", NPix=" << npixh_id - // << ", NSCT=" << nscth_id - ); - - // monitoring - m_ptTrkIn.push_back( std::abs(pt_id) ); - m_etaTrkIn.push_back( eta_id ); - m_phiTrkIn.push_back( phi_id ); - - // track selection - if (std::abs(pt_id) < m_PtMinTrk) continue; - if (std::abs(eta_id) > m_EtaMaxTrk) continue; - if (std::abs(zPos_id) > m_ZMaxTrk) continue; - if (chi2_id > m_Chi2MaxTrk) continue; - // if (npixh_id < m_NPIXhitMinTrk) continue; - // if (nscth_id < m_NSCThitMinTrk) continue; - - ++nFound; - - TrigRoiDescriptor* newRoi = createSingleTrigRoiDescriptor( eta_id, phi_id, deta_id, dphi_id, superRoI->roiId() + nFound ); - superRoI->push_back( newRoi ); - ATH_MSG_DEBUG("Added RoI from selected track: " << *newRoi ); - - // difference w.r.t already found tracks - int n = m_etaRoiOut.size(); - for ( int i = 0; i < n; ++i ) { - double dEta = eta_id - m_etaRoiOut[i]; - double dPhi = phi_id - m_phiRoiOut[i]; - // put phi in range -PI,PI - while ( dPhi > M_PI ) dPhi -= 2*M_PI; - while ( dPhi <= -M_PI ) dPhi += 2*M_PI; - double dR = std::sqrt( dEta*dEta + dPhi*dPhi ); - m_dEtaTrkSel.push_back( dEta ); - m_dPhiTrkSel.push_back( dPhi ); - m_dRTrkSel.push_back( dR ); - if ( dR > 0.0 ) m_logdRTrkSel.push_back( std::log10(dR) ); - } - - // monitoring - m_ptRoiOut.push_back( std::abs(pt_id) ); - m_etaRoiOut.push_back( eta_id ); - m_phiRoiOut.push_back( phi_id ); - - - }//Tracks loop - } - - m_nTrksIn = nIDtracks; - m_nRoiOut = nFound; - if ( m_nTrksIn > 0 ) { - m_nRoiToTrkRatio = (double)m_nRoiOut/(double)m_nTrksIn; - } else { - m_nRoiToTrkRatio = 0.0; - } - - ATH_MSG_DEBUG("Made " << nFound << " ROIs from " << nIDtracks << m_ID_algo_to_use << " tracks."); - - if ( m_fullScanMode == kHybridScan ) { - // add 2 eta regions outside of seeds range - if ( m_EtaMaxTrk < m_fullEtaRange - 0.00001 ) { - double etaCentral = 0.5 * std::abs(m_EtaMaxTrk + m_fullEtaRange); - TrigRoiDescriptor* endcapPositive = new TrigRoiDescriptor( etaCentral, m_EtaMaxTrk, m_fullEtaRange, /* eta positive end-cap */ - 0., -M_PI+1e-6, M_PI-1e-6 /* full phi range */ ,0.,-255.,255.); - TrigRoiDescriptor* endcapNegative = new TrigRoiDescriptor( -etaCentral, -m_fullEtaRange, -m_EtaMaxTrk, /* eta negative end-cap */ - 0., -M_PI+1e-6, M_PI-1e-6 /* full phi range */,0.,-255.,255. ); - - superRoI->push_back( endcapPositive ); - superRoI->push_back( endcapNegative ); - - ATH_MSG_DEBUG("Added RoI from positive end-cap: " << *endcapPositive ); - ATH_MSG_DEBUG("Added RoI from negative end-cap: " << *endcapNegative ); - } - } // if m_fullScanMode == kHybridScan - - } // if m_fullScanMode == kSeededScan || kHybridScan - - // add just one new outputTE with one TrigSuperRoI - // outputTE = addRoI(0, superRoI); - // for(auto roi : superRoI) - attachFeature(outputTE,superRoI,"forMSFS"); - outputTE->setActiveState(true); - // fill monitor variables "by hand" because this is an allTE algo - afterExecMonitors().ignore(); - return HLT::OK; -}//hltExecute - - - -TrigRoiDescriptor* InDetTrkRoiMaker::createSingleTrigRoiDescriptor( double eta, double phi, double etaWidth, double phiWidth, int roiNum ) { - double minphi = phi - std::abs(phiWidth); - double maxphi = phi + std::abs(phiWidth); - if(minphi < -M_PI) minphi += 2.0*M_PI; - if(minphi >= M_PI) minphi -= 2.0*M_PI; - if(maxphi <= -M_PI) maxphi += 2.0*M_PI; - if(maxphi > M_PI) maxphi -= 2.0*M_PI; - double minEta = eta - std::abs(etaWidth); - double maxEta = eta + std::abs(etaWidth); - - /// Oh no!! will setting the roiword and the l1id to 0 have any serious consequences? - /// do we really need these identifiers? Does anything actually ever use them for - /// anything except printout? I guess not, since by default they are set to 0 anyhow. - TrigRoiDescriptor* trigRoI = new TrigRoiDescriptor( unsigned(0), unsigned(roiNum), eta, minEta, maxEta, phi, minphi, maxphi); - // trigRoI->set_roiId(roiNum); - - ATH_MSG_VERBOSE( "createSingleTrigRoiDescriptor: Creating Roi with center " << " (eta,phi) = (" << eta << "," << phi << - ") and size (dEta,dPhi) = (" << etaWidth << "," << phiWidth << ")\n" << - " createSingleTrigRoiDescriptor: Roi num = " << roiNum << " etaRange = " << minEta << " -> " << maxEta << - " phiRange = " << minphi << " -> " << maxphi ); - - return trigRoI; -} - diff --git a/Trigger/TrigAlgorithms/TrigMuonEF/src/InDetTrkRoiMaker.h b/Trigger/TrigAlgorithms/TrigMuonEF/src/InDetTrkRoiMaker.h deleted file mode 100644 index 84c04b71042dcca177c8a71dede566238e52b4d2..0000000000000000000000000000000000000000 --- a/Trigger/TrigAlgorithms/TrigMuonEF/src/InDetTrkRoiMaker.h +++ /dev/null @@ -1,133 +0,0 @@ -/* - Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration -*/ - -#ifndef TRIGMUONEF_INDETTRKROIMAKER_H -#define TRIGMUONEF_INDETTRKROIMAKER_H - -// ************************************************ -// -// NAME: InDetTrkRoiMaker.h -// PACKAGE: Trigger/TrigAlgorithms/TrigMuonEF -// -// AUTHORS: Alex Oh, Martin Woudstra. Inspired by code from Mark Owen. -// -// ************************************************ - -#include "TrigInterfaces/Algo.h" -#include "TrigInDetEvent/TrigInDetTrack.h" -#include "TrigInterfaces/FexAlgo.h" - -class InDetTrkRoiMaker : public HLT::FexAlgo { - - public: - - - /// Constructor - InDetTrkRoiMaker(const std::string & name, ISvcLocator* pSvcLocator); - - /// Destructor - ~InDetTrkRoiMaker(); - - /// Initialize - HLT::ErrorCode hltInitialize(); - - /// Execute for each event - HLT::ErrorCode hltExecute(const HLT::TriggerElement*, HLT::TriggerElement*); - - /// Finalize - HLT::ErrorCode hltFinalize(); - - protected: - - // - // nested types - // - enum EFSMode { kFullScan, // Make a full-scan RoI - kSeededScan, // Make SuperRoI filled with RoI's based on input track seeds, within |eta| < etaMax - kHybridScan, // use seeded mode for |eta| <= etaMax, and full-scan mode for |eta| > etaMax - kNumberOfModes }; // for book keeping - - // - // static data - // - static constexpr const char* s_scanModeNames[kNumberOfModes]{ "FullScan", "SeededScan", "HybridScan" }; - - // - // static functions - // - static EFSMode modeNameToEnum( const std::string& modeName ); - - static TrigInDetTrack::AlgoId seedsNameToEnum( const std::string& seedsName ); - - static std::string getScanModeHelp(); - - // - // member functions - // - TrigRoiDescriptor* createSingleTrigRoiDescriptor( double eta, double phi, double etaWidth, double phiWidth, int roiNum ); - - // - // member data - // - - /** Identifier for the ID algorithm to use. Set from m_ID_algo_to_use Property */ - TrigInDetTrack::AlgoId m_seedsAlgoId; - - /** Full-scan mode for internal use. Value set from Property m_fullScanModeProperty */ - EFSMode m_fullScanMode; - - // - // JobOptions Properties - // - - std::string m_fullScanModeProperty; - - std::string m_ID_algo_to_use; - - std::string m_outputRoiLabel; - - /** Full eta range of the whole detector. Will be used as upper eta limit in Hybrid mode for the end-caps. */ - double m_fullEtaRange; - - /** In SeededMode and Hybrid mode: only use track seeds with |eta| <= m_seedsEtaMax. - In Hybrid mode: In addition, do full scan for |eta| > m_seedsEtaMax. */ - double m_EtaMaxTrk; - - /** In SeededMode and HybridMode: only use tracks seeds with pT > m_seedsPtMin (GeV/c) */ - double m_PtMinTrk; - - /** Max abs(Zeta) to select the ID track for matching */ - double m_ZMaxTrk; - - /** Max chi2 to select the ID track for matching */ - double m_Chi2MaxTrk; - - /** Min number of PIX space points to select the ID track for matching */ - int m_NPIXhitMinTrk; - - /** Min number of SCT space points to select the ID track for matching */ - int m_NSCThitMinTrk; - - // - // Monitoring variables - // - int m_nTrksIn; - int m_nRoiOut; - double m_nRoiToTrkRatio; - std::vector<double> m_ptTrkIn; - std::vector<double> m_etaTrkIn; - std::vector<double> m_phiTrkIn; - std::vector<double> m_ptRoiOut; - std::vector<double> m_etaRoiOut; - std::vector<double> m_phiRoiOut; - std::vector<double> m_dEtaTrkSel; - std::vector<double> m_dPhiTrkSel; - std::vector<double> m_dRTrkSel; - std::vector<double> m_logdRTrkSel; - - -};//class InDetTrkRoiMaker - - -#endif // TRIGMUONEF_INDETTRKROIMAKER_H diff --git a/Trigger/TrigAlgorithms/TrigMuonEF/src/SegmentCache.cxx b/Trigger/TrigAlgorithms/TrigMuonEF/src/SegmentCache.cxx deleted file mode 100644 index bfba9e32e7d5c799311d2c76f84d278ce72dfe7d..0000000000000000000000000000000000000000 --- a/Trigger/TrigAlgorithms/TrigMuonEF/src/SegmentCache.cxx +++ /dev/null @@ -1,46 +0,0 @@ -/* - Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration -*/ - -#include "SegmentCache.h" -#include "TrigMuonEvent/TrigMuonEFInfo.h" -#include "MuonSegment/MuonSegment.h" -#include "MuonPattern/MuonPatternCombinationCollection.h" -#include "MuonPattern/MuonPatternCombination.h" - -SegmentCache::SegmentCache(){ - m_segments=0; - m_pattcoll=0; - m_msTracks = 0; - m_saTracks = 0; - m_nroi=0; - } - - -/** - * Destructor. - * We do not delete the pointers, since these are not owned by this class. - */ -SegmentCache::~SegmentCache(){ - -} - -void SegmentCache::AddPatternCollection(const MuonPatternCombinationCollection* pat) { - m_pattcoll = pat; -} - -void SegmentCache::AddSegments(const Trk::SegmentCollection* trk) { - m_segments = trk; -} - -void SegmentCache::SetNROI(int n){ - m_nroi= n; -} - -void SegmentCache::SetSpectrometerTrackCollection( const TrackCollection* msTracks ) { - m_msTracks = msTracks; -} - -void SegmentCache::SetExtrapolatedTrackCollection( TrackCollection* saTracks ) { - m_saTracks = saTracks; -} diff --git a/Trigger/TrigAlgorithms/TrigMuonEF/src/SegmentCache.h b/Trigger/TrigAlgorithms/TrigMuonEF/src/SegmentCache.h deleted file mode 100644 index e2a9078e3407b90ea101cce5044e0a9996bad55d..0000000000000000000000000000000000000000 --- a/Trigger/TrigAlgorithms/TrigMuonEF/src/SegmentCache.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration -*/ - -#ifndef TrigMuonEF_SegmentCache_H__ -#define TrigMuonEF_SegmentCache_H__ - -#include <vector> -#include "MuonPattern/MuonPatternCombinationCollection.h" -#include "MuonPattern/MuonPatternCombination.h" -#include "TrkSegment/SegmentCollection.h" -#include "TrkTrack/TrackCollection.h" - - -class TrigMuonEFInfo; -class SegmentCache { - - public: - /// Default Constructor - SegmentCache(); - - /// Destructor - ~SegmentCache(); - - - //void AddMuonInfo(TrigMuonEFInfo* MI); - void AddPatternCollection(const MuonPatternCombinationCollection* pat); - void AddSegments(const Trk::SegmentCollection* trk); - void SetNROI(int n); - void SetSpectrometerTrackCollection( const TrackCollection* msTracks ); - void SetExtrapolatedTrackCollection( TrackCollection* saTracks ); - const MuonPatternCombinationCollection* PattColl() const {return m_pattcoll;} - const Trk::SegmentCollection* Segments() const {return m_segments;} - int NROI() const {return m_nroi;} - const TrackCollection* SpectrometerTrackColl() { return m_msTracks;} - TrackCollection* ExtrapolatedTrackColl() { return m_saTracks;} - - private: - - const MuonPatternCombinationCollection* m_pattcoll; - const Trk::SegmentCollection* m_segments; - const TrackCollection* m_msTracks; - TrackCollection* m_saTracks; - int m_nroi; -}; - -#endif diff --git a/Trigger/TrigAlgorithms/TrigMuonEF/src/TrigMuonEFCaloIsolation.cxx b/Trigger/TrigAlgorithms/TrigMuonEF/src/TrigMuonEFCaloIsolation.cxx deleted file mode 100644 index ea1f2011c0a144a17a48b5991bd95d5957eae9ae..0000000000000000000000000000000000000000 --- a/Trigger/TrigAlgorithms/TrigMuonEF/src/TrigMuonEFCaloIsolation.cxx +++ /dev/null @@ -1,220 +0,0 @@ -/* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -*/ - -#include "TrigMuonEFCaloIsolation.h" -#include "TrigConfHLTData/HLTTriggerElement.h" - -#include "xAODMuon/MuonContainer.h" -#include "RecoToolInterfaces/ICaloCellIsolationTool.h" -#include "RecoToolInterfaces/ICaloTopoClusterIsolationTool.h" -#include "RecoToolInterfaces/IsolationCommon.h" - -#include "TLorentzVector.h" -#include <iostream> -#include <deque> - -ATLAS_NO_CHECK_FILE_THREAD_SAFETY; // legacy trigger code - -// ------------------------------------------------------------------------------------------------------ -/** - * Standard constructor for the calo isolation algo. - */ -TrigMuonEFCaloIsolation::TrigMuonEFCaloIsolation(const std::string &name, ISvcLocator *pSvcLocator) : - FexAlgo(name, pSvcLocator), - m_requireCombined(false), - m_debug(false), - m_caloTopoClusterIsolationTool("xAOD__CaloIsolationTool"), - m_etiso_cone2(), - m_etiso_cone3(), - m_etiso_cone4() { - declareProperty("RequireCombinedMuon", m_requireCombined); - declareProperty("CaloTopoClusterIsolationTool", m_caloTopoClusterIsolationTool); - declareProperty("HistoPathBase", m_histo_path_base = "/EXPERT/"); - declareProperty("applyPileupCorrection", m_applyPileupCorrection = false); - - ///////// Monitoring Variables - declareMonitoredStdContainer("EF_etiso_cone2", m_etiso_cone2, IMonitoredAlgo::AutoClear); - declareMonitoredStdContainer("EF_etiso_cone3", m_etiso_cone3, IMonitoredAlgo::AutoClear); - declareMonitoredStdContainer("EF_etiso_cone4", m_etiso_cone4, IMonitoredAlgo::AutoClear); -} - -// ------------------------------------------------------------------------------------------------------ -/** - * Destructor. - */ -TrigMuonEFCaloIsolation::~TrigMuonEFCaloIsolation() { -} - -// ------------------------------------------------------------------------------------------------------ -/** - * Initialize the algorithm. - */ -HLT::ErrorCode TrigMuonEFCaloIsolation::hltInitialize() { - - m_debug = msgLvl() <= MSG::DEBUG; - - ATH_MSG_DEBUG("Initializing TrigMuonEFCaloIsolation[" << name() << "]"); - ATH_MSG_DEBUG("package version = " << PACKAGE_VERSION); - ATH_MSG_DEBUG("Properties set as follows: "); - ATH_MSG_DEBUG("RequireCombinedMuon: " << m_requireCombined); - - if (m_caloTopoClusterIsolationTool.retrieve().isSuccess()) { - ATH_MSG_DEBUG("Retrieved " << m_caloTopoClusterIsolationTool); - } else { - ATH_MSG_FATAL("Could not retrieve " << m_caloTopoClusterIsolationTool); - return HLT::BAD_JOB_SETUP; - } - - ATH_MSG_DEBUG("End of init TrigMuonEFCaloIsolation"); - - return HLT::OK; -} - -// ------------------------------------------------------------------------------------------------------ -/** - * Fill the et-cone calorimeter isolation values for a container of xAOD muons. - */ -void TrigMuonEFCaloIsolation::fillCaloIsolation(const xAOD::MuonContainer *muons, const xAOD::CaloClusterContainer *clustercont) { - - if (m_caloTopoClusterIsolationTool.empty()) { - ATH_MSG_WARNING("No calorimeter topo cluster isolation tool available." ); - return; - } - - std::vector<xAOD::Iso::IsolationType> etCones = { xAOD::Iso::etcone40, - xAOD::Iso::etcone30, - xAOD::Iso::etcone20 - }; - - for (auto muon : *muons) { - - if (m_debug) { - ATH_MSG_DEBUG("Processing next EF muon " << muon); - } - - const xAOD::Muon::MuonType muontype = muon->muonType(); - if ( muontype == xAOD::Muon::MuonType::Combined || muontype == xAOD::Muon::MuonType::SegmentTagged ) { - if (m_debug) { - ATH_MSG_DEBUG("EF muon has combined or segment tagged muon"); - } - } else { - if (m_requireCombined) { - if (m_debug) { - ATH_MSG_DEBUG("Not a combined or segment tagged muon & requireCombined=true, so ignore this muon"); - } - continue; - }//requireCombined - }//no combined muon - - const xAOD::TrackParticle *tp = 0; - if (muon->inDetTrackParticleLink().isValid()) tp = *(muon->inDetTrackParticleLink()); - if ( !tp ) tp = muon->primaryTrackParticle(); - if ( !tp ) { - ATH_MSG_WARNING("No TrackParticle found for muon." ); - continue; - } - - xAOD::CaloIsolation caloIsolation; - xAOD::CaloCorrection corrlist; - if (m_applyPileupCorrection) - corrlist.calobitset.set(static_cast<unsigned int>(xAOD::Iso::pileupCorrection)); - - corrlist.calobitset.set(static_cast<unsigned int>(xAOD::Iso::IsolationCaloCorrection::coreCone)); - if ( !m_caloTopoClusterIsolationTool->caloTopoClusterIsolation( caloIsolation, *tp, etCones, corrlist, clustercont ) ) { - ATH_MSG_WARNING("Calculation of topocluster based calorimeter isolation failed"); - continue; - } - // if ( !m_caloTopoClusterIsolationTool->decorateParticle_topoClusterIso(*tp, etCones, corrlist, clustercont) ) { - // ATH_MSG_WARNING("Calculation of topocluster based calorimeter isolation failed"); - // continue; - // } - - for ( unsigned int i = 0; i < etCones.size(); ++i ) { - ((xAOD::Muon *)muon)->setIsolation(caloIsolation.etcones[i], etCones[i]); - } - - //Monitor the values - m_etiso_cone2.push_back( caloIsolation.etcones[2] * 1e-3 ); - m_etiso_cone3.push_back( caloIsolation.etcones[1] * 1e-3 ); - m_etiso_cone4.push_back( caloIsolation.etcones[0] * 1e-3 ); - - if (m_debug) { - ATH_MSG_DEBUG("Filled muon isolation information with:"); - ATH_MSG_DEBUG("\tCone Et 0.2 sum = " << m_etiso_cone2.back() << " GeV"); - ATH_MSG_DEBUG("\tCone Et 0.3 sum = " << m_etiso_cone3.back() << " GeV"); - ATH_MSG_DEBUG("\tCone Et 0.4 sum = " << m_etiso_cone4.back() << " GeV"); - } - - - } - -} - -// ------------------------------------------------------------------------------------------------------ -/** - * Execute function - called for each roi. - */ -HLT::ErrorCode TrigMuonEFCaloIsolation::hltExecute(const HLT::TriggerElement *inputTE, HLT::TriggerElement *TEout) { - - ATH_MSG_DEBUG(": Executing TrigMuonEFCaloIsolation::execHLTAlgorithm()"); - - /// extract EF muons - const xAOD::MuonContainer *muonContainer(0); - if (HLT::OK != getFeature(inputTE, muonContainer)) { - ATH_MSG_WARNING("Could not get xAOD::MuonContainer from the trigger element"); - return HLT::MISSING_FEATURE; - } else { - if (!muonContainer) { - ATH_MSG_WARNING("muonContainer is 0 pointer"); - return HLT::MISSING_FEATURE; - } - ATH_MSG_DEBUG("MuonContainer extracted with size = " << muonContainer->size()); - } - - //Access the last created trigger cluster container - std::vector<const xAOD::CaloClusterContainer * > vectorOfClusterContainers; - - if ( getFeatures(inputTE, vectorOfClusterContainers, "") != HLT::OK) { // Was TEout??? - ATH_MSG_ERROR("Failed to get TrigClusters at: getFeatures()"); - return HLT::ErrorCode(HLT::Action::ABORT_CHAIN, HLT::Reason::NAV_ERROR); - } - - ATH_MSG_DEBUG("Got vector with " << vectorOfClusterContainers.size() << " ClusterContainers"); - - const xAOD::CaloClusterContainer *theClusterCont = 0; - if ( vectorOfClusterContainers.size() > 0 ) { - theClusterCont = vectorOfClusterContainers.back(); - } else { - ATH_MSG_ERROR("Failed to get TrigClusters: vector size is 0"); - return HLT::ErrorCode(HLT::Action::ABORT_CHAIN, HLT::Reason::NAV_ERROR); - } - - //For each of the muons fill the calorimeter isolation values using the offline tool - fillCaloIsolation(muonContainer, theClusterCont); - - //validate sequence - TEout->setActiveState(true); - - return HLT::OK; -} - -// ------------------------------------------------------------------------------------------------------ -/** - * Finalize the algorithm. - */ -HLT::ErrorCode TrigMuonEFCaloIsolation::hltFinalize() { - ATH_MSG_DEBUG("Finalizing " + name()); - return HLT::OK; -} - -/** - * Here we can handle incidents like end of event, but for now - * nothing to do. - */ -void TrigMuonEFCaloIsolation::handle(const Incident & /*inc*/) { -} - - - - diff --git a/Trigger/TrigAlgorithms/TrigMuonEF/src/TrigMuonEFCaloIsolation.h b/Trigger/TrigAlgorithms/TrigMuonEF/src/TrigMuonEFCaloIsolation.h deleted file mode 100644 index fec55c9e6fb8ac6639150b169711d6894b9b536a..0000000000000000000000000000000000000000 --- a/Trigger/TrigAlgorithms/TrigMuonEF/src/TrigMuonEFCaloIsolation.h +++ /dev/null @@ -1,84 +0,0 @@ -// This file is really -*- C++ -*-. - -/* - Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration -*/ - -#ifndef TRIGMUONEF_TRIGMUONEFCALOISOLATION_H__ -#define TRIGMUONEF_TRIGMUONEFCALOISOLATION_H__ - -#include "TrigInterfaces/FexAlgo.h" -#include "GaudiKernel/IIncidentListener.h" -#include "GaudiKernel/ToolHandle.h" -#include "xAODCaloEvent/CaloClusterContainer.h" -#include "CaloEvent/CaloCellContainer.h" - -#include "CxxUtils/checker_macros.h" -ATLAS_NO_CHECK_FILE_THREAD_SAFETY; // legacy trigger code - -class IsoMuonFeature; - - -namespace xAOD { -class ICaloCellIsolationTool; -class ICaloTopoClusterIsolationTool; -} - -/** - * @class TrigMuonEFCaloIsolation - * - * @brief Algorithm to fill etcone or topoetcone calorimeter isolation for EF muons - * - * This class calculates calorimeter isolation for EF muons. It uses - * the last created calorimeter topo cluster container from TrigCaloRec as input - * to the CaloIsolationTool to calculate the isolation. - * - * @author Martin Spangenberg (Martin.Spangenberg@cern.ch) - */ -class TrigMuonEFCaloIsolation : public virtual HLT::FexAlgo, - public virtual IIncidentListener { -public: - - /// Constructor - TrigMuonEFCaloIsolation (const std::string &name, ISvcLocator *pSvcLocator); - /// Destructor - ~TrigMuonEFCaloIsolation(); - - /// Initialize the algorithm - HLT::ErrorCode hltInitialize(); - /// Execute - called per trigger element - HLT::ErrorCode hltExecute(const HLT::TriggerElement *, HLT::TriggerElement *); - /// Finalize the algorithm - HLT::ErrorCode hltFinalize(); - -private: - - /// Fill et-cone isolation values for xAOD muons - void fillCaloIsolation(const xAOD::MuonContainer *muons, - const xAOD::CaloClusterContainer *clustercont); - - - /// Require that EF muons are combined - bool m_requireCombined; - - /// Select if pileup correction should be applied - bool m_applyPileupCorrection; - - /// flag to see if debug is enabled - bool m_debug; - - /// Tool to calculate the isolation - ToolHandle<xAOD::ICaloTopoClusterIsolationTool> m_caloTopoClusterIsolationTool; - - /// Monitoring Histograms - StringProperty m_histo_path_base; // set the histo path for Monitoring - //std::vector<double > m_etiso_cone1; - std::vector<double > m_etiso_cone2; - std::vector<double > m_etiso_cone3; - std::vector<double > m_etiso_cone4; - - void handle(const Incident &); - -}; //class TrigMuonEFCaloIsolation - -#endif //TRIGMUONEF_TRIGMUONEFCALOISOLATION_H__ diff --git a/Trigger/TrigAlgorithms/TrigMuonEF/src/TrigMuonEFFSRoiMaker.cxx b/Trigger/TrigAlgorithms/TrigMuonEF/src/TrigMuonEFFSRoiMaker.cxx deleted file mode 100644 index f5c67a3c1a0c28c87d50534449924c403c033e67..0000000000000000000000000000000000000000 --- a/Trigger/TrigAlgorithms/TrigMuonEF/src/TrigMuonEFFSRoiMaker.cxx +++ /dev/null @@ -1,264 +0,0 @@ -/* - Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration -*/ - -#include "TrigMuonEFFSRoiMaker.h" - -#include "TrigSteeringEvent/TrigRoiDescriptor.h" -#include "TrigNavigation/TriggerElement.h" - -#include "xAODMuon/MuonContainer.h" -#include "xAODMuon/MuonAuxContainer.h" - -//#include "AthContainers/ConstDataVector.h" - -/** - * Constructor - set up the algorithm - */ -TrigMuonEFFSRoiMaker::TrigMuonEFFSRoiMaker(const std::string & name, ISvcLocator* pSvcLocator) : - HLT::AllTEAlgo(name, pSvcLocator), - m_classIDSvc("ClassIDSvc/ClassIDSvc", this->name()) -{ - declareProperty ("MuonPtCut", m_ptcut=-1.0); - declareProperty ("OutputContName", m_efContName); - declareProperty ("InvertRoI", m_doInvertRoI=false); - declareProperty ("UseFSRoI" , m_useFS=true); - declareProperty ("CreateCrackRoI", m_createCrackRoI=false); - declareProperty ("CreateFSRoI", m_createFSroi=false); - declareProperty ("CreateRoIFromL1", m_createRoIfromL1=false); - declareProperty ("RoISizeEta", m_roiSizeEta=0.1); - declareProperty ("RoISizePhi", m_roiSizePhi=0.1); - declareProperty ("RoILabel", m_roiLabel=""); - - declareMonitoredVariable("nTrkIn", m_nTrkIn, IMonitoredAlgo::AutoClear); - declareMonitoredVariable("nRoIOut", m_nRoIOut, IMonitoredAlgo::AutoClear); -} - -/** - * Destructor - clean up when done - */ -TrigMuonEFFSRoiMaker::~TrigMuonEFFSRoiMaker() { - -} - -/** - * Initialize the algorithm - */ -HLT::ErrorCode TrigMuonEFFSRoiMaker::hltInitialize() { - - if (msgLvl() <= MSG::INFO) { - msg() << MSG::INFO << "Initializing TrigMuonEFFSRoiMaker[" << name() << "], version " << PACKAGE_VERSION << endmsg; - msg() << MSG::INFO << "pT cut on muons = " << m_ptcut << " MeV" << endmsg; - msg() << MSG::INFO << "Output EF container name = " << m_efContName << endmsg; - msg() << MSG::INFO << "RoI eta,phi = " << m_roiSizeEta << "," << m_roiSizePhi << endmsg; - msg() << MSG::INFO << "RoI Label = " << m_roiLabel << endmsg; - msg() << MSG::INFO << "Invert RoI = " << m_doInvertRoI << endmsg; - msg() << MSG::INFO << "Use FS RoI = " << m_useFS << endmsg; - msg() << MSG::INFO << "Create crack RoI = " << m_createCrackRoI << endmsg; - msg() << MSG::INFO << "Create FS RoI = " << m_createFSroi << endmsg; - msg() << MSG::INFO << "Create RoI from L1 = " << m_createRoIfromL1 << endmsg; - } - - if (m_classIDSvc.retrieve().isFailure()) { - msg() << MSG::WARNING << "Cannot retrieve ClassIDSvc" << endmsg; - return HLT::BAD_JOB_SETUP; - } - else { - msg() << MSG::INFO << "Retrieved " << m_classIDSvc << endmsg; - } - - return HLT::OK; -}//hltInitialize - -/** - * Finalize the algorithm - */ -HLT::ErrorCode TrigMuonEFFSRoiMaker::hltFinalize() { - - return HLT::OK; -}//hltFinalize - -HLT::ErrorCode TrigMuonEFFSRoiMaker::hltExecute(std::vector<std::vector<HLT::TriggerElement*> >& inputTEs, unsigned int output) { - - // reset monitoring variables - beforeExecMonitors().ignore(); - m_nTrkIn=0; - m_nRoIOut=0; - - if(m_createFSroi){ - ATH_MSG_DEBUG("creating full scan RoI"); - TrigRoiDescriptor* roiFS = new TrigRoiDescriptor(0.0, -2.5, 2.5, 0.0, -M_PI, M_PI-0.0001); - HLT::TriggerElement* te = nullptr; - te = addRoI(output, nullptr ); - te->setActiveState(true); - std::string key; - m_config->getNavigation()->attachFeature(te, roiFS, HLT::Navigation::ObjectCreatedByNew, key, m_roiLabel); - return HLT::OK; - } - - //create RoI from L1 RoIs. Make sure this is run first in the sequence (needed for MGonly chains). - if(m_createRoIfromL1){ - HLT::TriggerElement* te; - const HLT::TEVec &tev = inputTEs.back(); - for ( unsigned iTe=0; iTe<tev.size() ; iTe++ ){ - const HLT::TriggerElement* inputTe = tev[iTe]; - - if(!inputTe){ - msg() << MSG::ERROR << "Invalid TriggerElement pointer = "<< inputTe << endmsg; - return HLT::ERROR; - } // end if(!inputTe) - - // get the RoiDescriptor - const TrigRoiDescriptor* roiDescriptor = 0; - HLT::ErrorCode hltStatus = getFeature(inputTe, roiDescriptor); - if( hltStatus != HLT::OK ){ - msg()<<MSG::ERROR<<" Failed to find RoiDescriptor "<<endmsg; - return hltStatus; - } - te = addRoI(output, nullptr); - te->setActiveState(true); // set this trigger element to be active - std::string key; - m_config->getNavigation()->attachFeature(te, roiDescriptor, HLT::Navigation::ObjectCreatedByNew, key, m_roiLabel); - } - return HLT::OK; - } - - //start of FS roi building - // we run after FS instance - so should only be one inputTE - if (inputTEs.size() < 1) { - msg() << MSG::ERROR << "Got less than one inputTE" << endmsg; - return HLT::ErrorCode(HLT::Action::ABORT_CHAIN, HLT::Reason::MISSING_FEATURE); - } - for(auto inputTE : inputTEs){ - ATH_MSG_DEBUG( "inputTE.size() " << inputTE.size() ); - - if(inputTE.size() < 1) { - ATH_MSG_ERROR("Size of the vector<HLT::TriggerElement*> < 1 - no input to process, abort chain"); - return HLT::ErrorCode(HLT::Action::ABORT_CHAIN, HLT::Reason::MISSING_FEATURE); - } - - //Create RoI centered around the crack in MS - if (m_createCrackRoI) { - - TrigRoiDescriptor* newRoI = new TrigRoiDescriptor(0.0, -m_roiSizeEta, m_roiSizeEta, 0.0, -m_roiSizePhi, m_roiSizePhi); - - HLT::TriggerElement* outputTE = nullptr; - if (m_roiLabel == "") { - //Add RoI with default label - outputTE = addRoI(output, newRoI); - } else { - //Create RoI with no descriptor then attach descriptor as feature with desired label - std::string key; - outputTE = addRoI(output, nullptr); - m_config->getNavigation()->attachFeature(outputTE, newRoI, HLT::Navigation::ObjectCreatedByNew, key, m_roiLabel); - } - - outputTE->setActiveState(true); - ATH_MSG_DEBUG("RoI:" << *newRoI); - return HLT::OK; - } - - // Get MuonContainer - const xAOD::MuonContainer* muonContainer(0); - for (auto inTE : inputTE) { - HLT::ErrorCode status = getFeature(inTE, muonContainer); - - if(status!=HLT::OK || muonContainer==0) { - ATH_MSG_WARNING( "Could not get MuonContainer" ); - return HLT::ErrorCode(HLT::Action::ABORT_CHAIN, HLT::Reason::MISSING_FEATURE); - } - ATH_MSG_DEBUG("Got MuonContainer with size = " << muonContainer->size()); - - // Loop on container & create ROIs. - for(auto muon : *muonContainer) { - - const xAOD::TrackParticle* saTrack = muon->primaryTrackParticle(); - if(!saTrack) { - ATH_MSG_WARNING("No track particle, skip this muon"); - continue; - } - ++m_nTrkIn; // count input tracks - double phi = saTrack->phi(); - double eta = saTrack->eta(); - double pt = saTrack->pt(); - - /* Some debugging of the error matrix - need to fix for Eigen - if(msgLvl(MSG::DEBUG)) { - const Amg::AmgSymMatrix(5)* em = perigee->covariance(); - msg(MSG::DEBUG) << "Err[Trk::z0] = " << Amg::error(*em,Trk::z0) << endmsg; - msg(MSG::DEBUG) << "Cov[Trk::phi0] = " << em.covValue(Trk::phi0) << endmsg; - msg(MSG::DEBUG) << "Cov[Trk::theta] = " << em.covValue(Trk::theta) << endmsg; - msg(MSG::DEBUG) << "Cov[Trk::qoverp] = " << em.covValue(Trk::qOverP) << endmsg; - }//DEBUG - } else { - msg(MSG::DEBUG) << "No Trk::MeasuredPerigee" << endmsg; - } - */ - - if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Extrapolated track, pT, eta, phi = " << pt << ", " << eta << ", " << phi << endmsg; - - if (m_doInvertRoI) { - eta = -eta; //Flip RoI in eta - if (phi > 0) phi -= M_PI; //Shift phi by pi - else phi += M_PI; - - if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Reversed extrapolated track, pT, eta, phi = " << pt << ", " << eta << ", " << phi << endmsg; - } - - // check pT of track - if( pt < m_ptcut) { - ATH_MSG_DEBUG( "Track fails pT cut, ignore" ); - continue; - } - - // create a new ROI from extrapolated track - make it active - double minphi = phi-m_roiSizePhi; - if(minphi < -M_PI) minphi = 2.0*M_PI + minphi; - double maxphi = phi+m_roiSizePhi; - if(maxphi > M_PI) maxphi = maxphi - 2.0*M_PI; - TrigRoiDescriptor* newRoI = new TrigRoiDescriptor(eta, eta-m_roiSizeEta, eta+m_roiSizeEta, phi, minphi, maxphi); - - HLT::TriggerElement* outputTE = nullptr; - if (m_roiLabel == "") { - outputTE = addRoI(output, newRoI); - } else { - std::string key; - outputTE = addRoI(output, nullptr); - //status = attachFeature(outputTE, newRoI, m_roiLabel); - m_config->getNavigation()->attachFeature(outputTE, newRoI, HLT::Navigation::ObjectCreatedByNew, key, m_roiLabel); - //if (status != HLT::OK) { - // ATH_MSG_ERROR("Failed to attach new RoI."); - // return status; - // } - } - - outputTE->setActiveState(true); - ATH_MSG_DEBUG("Added RoI with eta, phi = " << eta << ", " << phi << ", outputTE = " << outputTE->getId()); - ++m_nRoIOut; // count created RoIs - - ATH_MSG_DEBUG("Create output container"); - // make a new MuonContainer with just this muon - xAOD::MuonContainer* outputContainer = new xAOD::MuonContainer(1); - xAOD::MuonAuxContainer auxCont; - outputContainer->setStore(&auxCont); - - // deep copy the muon - xAOD::Muon* muoncopy = new xAOD::Muon(); - (*outputContainer)[0] = muoncopy; - *muoncopy = *muon; - - status = attachFeature(outputTE, outputContainer, m_efContName); - if ( status != HLT::OK ) { - msg() << MSG::ERROR << "Failed to attach MuonContainer" << endmsg; - return status; - } else { - ATH_MSG_DEBUG("Successfully attached new MuonContainer to " << outputTE->getId()); - } - }//loop on muons - } - } - // fill monitor variables "by hand" because this is an allTE algo - afterExecMonitors().ignore(); - - return HLT::OK; -}//hltExecute diff --git a/Trigger/TrigAlgorithms/TrigMuonEF/src/TrigMuonEFFSRoiMaker.h b/Trigger/TrigAlgorithms/TrigMuonEF/src/TrigMuonEFFSRoiMaker.h deleted file mode 100644 index 1af0f20e8b3bbad751fc1c76ec7b098a21df6387..0000000000000000000000000000000000000000 --- a/Trigger/TrigAlgorithms/TrigMuonEF/src/TrigMuonEFFSRoiMaker.h +++ /dev/null @@ -1,79 +0,0 @@ -/* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -*/ - -#ifndef TRIGMUONEF_TRIGMUONEFFSROIMAKER_H__ -#define TRIGMUONEF_TRIGMUONEFFSROIMAKER_H__ - -// ************************************************ -// -// NAME: TrigMuonEFFSRoiMaker.h -// PACKAGE: Trigger/TrigAlgorithms/TrigMuonEF -// -// AUTHOR: Mark Owen -// EMAIL: markowen AT cern.ch -// -// ************************************************ - -#include "TrigInterfaces/AllTEAlgo.h" -#include "AthenaKernel/IClassIDSvc.h" - -/** - * Class to make ROIs from the results of an MS full scan. - * Class takes the EDM objects stored by the full scan and - * creates an ROI based on the eta-phi of the extrapolated track. - * The EDM objects are re-packaged and attached to the trigger element - * so they can be processed in standard ROI mode. - */ -class TrigMuonEFFSRoiMaker : public HLT::AllTEAlgo { - - public: - - /// Constructor - TrigMuonEFFSRoiMaker(const std::string & name, ISvcLocator* pSvcLocator); - - /// Destructor - ~TrigMuonEFFSRoiMaker(); - - /// Initialize - HLT::ErrorCode hltInitialize(); - - /// Execute for each event - HLT::ErrorCode hltExecute(std::vector<std::vector<HLT::TriggerElement*> >&,unsigned int); - - /// Finalize - HLT::ErrorCode hltFinalize(); - - protected: - //Construct RoI in cone back-to-back with muon track direction. - bool m_doInvertRoI; - bool m_useFS; - bool m_createCrackRoI; - bool m_createFSroi; - bool m_createRoIfromL1; - - /// minimum pT cut on extrapolated tracks - above this create ROIs. - double m_ptcut; - - //Radius of roi in eta and phi - double m_roiSizeEta; - double m_roiSizePhi; - - /// Name of output xAOD::MuonContainer - std::string m_efContName; - - /// Handle to ClassIDSvc - ServiceHandle<IClassIDSvc> m_classIDSvc; - - /// monitor number of input tracks - unsigned int m_nTrkIn; - /// monitor number of output ROIs - unsigned int m_nRoIOut; - - /// Label to store RoI with - std::string m_roiLabel; - -};//class TrigMuonEFFSRoiMaker - - -#endif // TRIGMUONEF_TRIGMUONEFFSROIMAKER_H__ diff --git a/Trigger/TrigAlgorithms/TrigMuonEF/src/TrigMuonEFIDTrackRoiMaker.cxx b/Trigger/TrigAlgorithms/TrigMuonEF/src/TrigMuonEFIDTrackRoiMaker.cxx deleted file mode 100644 index 578b7a21991de57859cde65006d9ae1c06b136e9..0000000000000000000000000000000000000000 --- a/Trigger/TrigAlgorithms/TrigMuonEF/src/TrigMuonEFIDTrackRoiMaker.cxx +++ /dev/null @@ -1,158 +0,0 @@ -/* - Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration -*/ - -#include "TrigMuonEFIDTrackRoiMaker.h" - -// RoI include -#include "TrigSteeringEvent/TrigRoiDescriptor.h" - -/** - * Standard constructor for the algorithm - */ -TrigMuonEFIDTrackRoiMaker::TrigMuonEFIDTrackRoiMaker(const std::string& name, ISvcLocator* pSvcLocator) : - FexAlgo(name, pSvcLocator), - m_roiSizeZ0(225.0),//default to large width in mm - m_inputRoiName("forID"), - m_outputRoiName("forID2") -{ - - declareProperty("Z0Width",m_roiSizeZ0); // should be set in JO to appropriate z-width, ATLAS standard units (mm) - declareProperty("InputRoiName",m_inputRoiName="forID"); // generally don't expect to need to change this - declareProperty("OutputRoiName",m_outputRoiName="forID2"); // generally don't expect to need to change this - - // variables to monitor - declareMonitoredVariable("RoIz",m_roiZ); - declareMonitoredStdContainer("DeltaEta",m_deltaEta,IMonitoredAlgo::AutoClear); - declareMonitoredStdContainer("DeltaPhi",m_deltaPhi,IMonitoredAlgo::AutoClear); -} - -/** - * Destructor - */ -TrigMuonEFIDTrackRoiMaker::~TrigMuonEFIDTrackRoiMaker() -{ - -} - -/** - * Initialize the algo - */ -HLT::ErrorCode TrigMuonEFIDTrackRoiMaker::hltInitialize() { - // print out the configuration - ATH_MSG_DEBUG("Initializing TrigMuonEFIDTrackRoiMaker[" << name() << "]"); - ATH_MSG_DEBUG("InputRoiName = " << m_inputRoiName); - ATH_MSG_DEBUG("OutputRoiName = " << m_outputRoiName); - ATH_MSG_DEBUG("Z0Width = " << m_roiSizeZ0); - - return HLT::OK; -}//hltInitialize - -/** - * Finalise the algo - nothing to do yet - */ -HLT::ErrorCode TrigMuonEFIDTrackRoiMaker::hltFinalize() { - return HLT::OK; -} - -/** - * Execute function - called for each roi - */ -HLT::ErrorCode TrigMuonEFIDTrackRoiMaker::hltExecute(const HLT::TriggerElement* inputTE, HLT::TriggerElement* outputTE) { - - ATH_MSG_DEBUG("Executing TrigMuonEFIDTrackRoiMaker::hltExecute"); - - // get the RoI for the ID tracking - const TrigRoiDescriptor *roi = 0; - if (HLT::OK != getFeature(inputTE, roi, m_inputRoiName) ) { - ATH_MSG_WARNING("Could not get " << m_inputRoiName << " RoI descriptor, cannot update it"); - return HLT::OK; - } - - // get the xAOD::Muons - const xAOD::MuonContainer* muons = 0; - if (HLT::OK != getFeature(outputTE, muons) ) { - ATH_MSG_WARNING("Could not get muons, cannot update the RoI"); - return HLT::OK; - } - - // make new RoI - TrigRoiDescriptor* newroi = createIDtrackRoI(*roi, *muons); - - // save it - if(newroi!=0) { - // monitor z position - m_roiZ = newroi->zed(); - // attached to trigger element - HLT::ErrorCode hltStatus = attachFeature(outputTE, newroi, m_outputRoiName); - if(hltStatus!=HLT::OK) { - msg() << MSG::WARNING << "Attaching roi " << newroi << " with name " << m_outputRoiName << " to TEout: unsuccessful" << endmsg; - delete newroi; - } else { - msg() << MSG::DEBUG << "Attached roi " << newroi << " with name forID2" << endmsg; - } - - }//valid roi - - return HLT::OK; - -}//hltExecute - -/** - * Create a new RoI using the parameters of the old one, updating the z and zWidth - * - * @return the new RoiDescriptor, returns 0 in case it could not be created (e.g. no muons with ID tracks) - */ -TrigRoiDescriptor* TrigMuonEFIDTrackRoiMaker::createIDtrackRoI(const TrigRoiDescriptor& roi, const xAOD::MuonContainer& muons) { - - // loop on muons to find the z values & store eta, phi of muon - std::vector<double> z0values; - for( auto muon : muons ) { - ElementLink<xAOD::TrackParticleContainer> idTrackLink = muon->inDetTrackParticleLink(); - if(!idTrackLink.isValid()) continue; - const Trk::Perigee* idtrk_perigee = &((*idTrackLink)->perigeeParameters()); - if(!idtrk_perigee) { - ATH_MSG_WARNING("ID track with no Perigee, skip"); - continue; - } - - // monitor how far our muons are from the RoI center - m_deltaEta.push_back( fabs((*idTrackLink)->eta() - roi.eta()) ); - m_deltaPhi.push_back( fabs(TVector2::Phi_mpi_pi((*idTrackLink)->phi() - roi.phi())) ); - - const double z0 = idtrk_perigee->parameters()[Trk::z0]; - z0values.push_back( z0 ); - if(msgLvl(MSG::DEBUG) && idtrk_perigee->covariance()) { - ATH_MSG_DEBUG("z0 = " << z0 << " +- " << sqrt((*(idtrk_perigee->covariance()))(Trk::z0, Trk::z0)) ); - } - }// muon loop - - // if no muons, then nothing to do - if(z0values.size()==0 ) { - if(!muons.empty()) ATH_MSG_WARNING("No valid z0 found, will not create new RoI, old RoI has zWidth = " << roi.zedPlus() - roi.zedMinus()); - else ATH_MSG_WARNING("Zero muons, so cannot create new RoI"); - - return 0; - } - - // 1 muon, use central z0 with the fixed width - double zCentral=z0values[0]; - double zMinus = zCentral-m_roiSizeZ0; - double zPlus = zCentral+m_roiSizeZ0; - - if(z0values.size()>1) { - //multiple muons, first sort z values so they are low -> high - std::sort(z0values.begin(), z0values.end()); - // our z low is lowest z - width, z high is highest z + width - zMinus = z0values[0] - m_roiSizeZ0; - zPlus = z0values.back() + m_roiSizeZ0; - // center RoI in the middle of the muons - zCentral = (z0values[0] + z0values.back()) / 2.0; - } - - // make new RoI - ATH_MSG_DEBUG("Create RoI at eta=" << roi.eta() << " phi=" << roi.phi() << " z=" << zCentral << " in range " << zMinus << " -> " << zPlus); - TrigRoiDescriptor* newroi = new TrigRoiDescriptor(roi.roiWord(), roi.l1Id(), roi.roiId(), roi.eta(), roi.etaMinus(), roi.etaPlus(), roi.phi(), roi.phiMinus(), roi.phiPlus(), zCentral, zMinus, zPlus); - - return newroi; -}// createIDtrackRoI diff --git a/Trigger/TrigAlgorithms/TrigMuonEF/src/TrigMuonEFIDTrackRoiMaker.h b/Trigger/TrigAlgorithms/TrigMuonEF/src/TrigMuonEFIDTrackRoiMaker.h deleted file mode 100644 index 801efeab73b3c11a98c3fd7f8c5926d6d9d7fff9..0000000000000000000000000000000000000000 --- a/Trigger/TrigAlgorithms/TrigMuonEF/src/TrigMuonEFIDTrackRoiMaker.h +++ /dev/null @@ -1,76 +0,0 @@ -/* - Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration -*/ -#ifndef TRIGMUONEF_TRIGMUONIDTRACKROIMAKER_H__ -#define TRIGMUONEF_TRIGMUONIDTRACKROIMAKER_H__ - -// ************************************************ -// -// NAME: TrigMuonEFIDTrackRoiMaker.h -// PACKAGE: Trigger/TrigAlgorithms/TrigMuonEF -// -// AUTHOR: Mark Owen -// EMAIL: markowen AT cern.ch -// -// ************************************************ - -#include "TrigInterfaces/FexAlgo.h" -#include <string> - -// edm classes -#include "xAODMuon/MuonContainer.h" - -// fwd declare TrigRoiDescriptor class -class TrigRoiDescriptor; - -/** - * @brief Algorithm to create RoIs from muon ID tracks. - * - * Class to make ROIs from the ID tracks of xAOD::Muons - * Class takes the previous RoI and creates a new one - * centred on the muon z0, with a configurable width. - * - * @author Mark Owen <markowen@cern.ch> - */ -class TrigMuonEFIDTrackRoiMaker : public virtual HLT::FexAlgo -{ - public: - - /// Constructor - TrigMuonEFIDTrackRoiMaker(const std::string & name, ISvcLocator* pSvcLocator); - - /// Destructor - ~TrigMuonEFIDTrackRoiMaker(); - - /// Initialize - HLT::ErrorCode hltInitialize(); - - /// Execute for each RoI - HLT::ErrorCode hltExecute(const HLT::TriggerElement* inputTE, HLT::TriggerElement* outputTE); - - /// Finalize - HLT::ErrorCode hltFinalize(); - - protected: - - /// Function to create new RoI based on the muons - TrigRoiDescriptor* createIDtrackRoI(const TrigRoiDescriptor& roi, const xAOD::MuonContainer& muons) ; - - /// ROI size in z0 - float m_roiSizeZ0; - - /// input RoI name - std::string m_inputRoiName; - - /// output RoI name - std::string m_outputRoiName; - - /// monitor the z position of the RoIs we make - float m_roiZ; - - std::vector<float> m_deltaEta; - std::vector<float> m_deltaPhi; - -}; // class TrigMuonEFIDTrackRoiMaker - -#endif //TRIGMUONEF_TRIGMUONIDTRACKROIMAKER_H__ diff --git a/Trigger/TrigAlgorithms/TrigMuonEF/src/TrigMuonEFRoiAggregator.cxx b/Trigger/TrigAlgorithms/TrigMuonEF/src/TrigMuonEFRoiAggregator.cxx deleted file mode 100644 index ac0fb1a4f7df68c7d88a64b1a2d154c30bca5171..0000000000000000000000000000000000000000 --- a/Trigger/TrigAlgorithms/TrigMuonEF/src/TrigMuonEFRoiAggregator.cxx +++ /dev/null @@ -1,174 +0,0 @@ -/* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -*/ - -#include <cstdlib> -#include <cmath> -#include <algorithm> - -#include "TrigMuonEFRoiAggregator.h" - -#include "TrigNavigation/TriggerElement.h" -#include "TrigConfHLTData/HLTTriggerElement.h" -#include "xAODMuon/MuonContainer.h" -#include "xAODMuon/MuonAuxContainer.h" -#include "xAODMuon/Muon.h" - -#include "xAODTracking/TrackParticleContainer.h" -#include "xAODTracking/TrackParticle.h" - -/** - * Constructor - set up the algorithm - */ -TrigMuonEFRoiAggregator::TrigMuonEFRoiAggregator(const std::string & name, ISvcLocator* pSvcLocator) : - HLT::AllTEAlgo(name, pSvcLocator) -{ - declareMonitoredVariable("nRoiIn", m_nRoiIn, IMonitoredAlgo::AutoClear); - declareMonitoredVariable("nTrkIn", m_nTrkIn, IMonitoredAlgo::AutoClear); - declareProperty("CopyTracks", m_copyTracks=false); - m_PtLo=0; - m_PtHi=0; -} - -/** - * Destructor - clean up when done - */ -TrigMuonEFRoiAggregator::~TrigMuonEFRoiAggregator() { - -} - -/** - * Initialize the algorithm - */ -HLT::ErrorCode TrigMuonEFRoiAggregator::hltInitialize() { - - return HLT::OK; -}//hltInitialize - -/** - * Finalize the algorithm - */ -HLT::ErrorCode TrigMuonEFRoiAggregator::hltFinalize() { - - return HLT::OK; -}//hltFinalize - -HLT::ErrorCode TrigMuonEFRoiAggregator::hltExecute(std::vector< std::vector<HLT::TriggerElement*> >& inputTEtypes, unsigned int output) { - - // init monitor variables "by hand" because this is an allTE algo - beforeExecMonitors().ignore(); - - // we run after FS instance - so should only be one inputTE - if (inputTEtypes.size() != 1) { - ATH_MSG_WARNING("Got more than one inputTE collections"); - return HLT::ErrorCode(HLT::Action::ABORT_CHAIN, HLT::Reason::MISSING_FEATURE); - } - - std::vector<HLT::TriggerElement*>& inputTEs = inputTEtypes.at(0); - ATH_MSG_DEBUG( "Number of input TEs: " << inputTEs.size() ); - - std::vector<HLT::TriggerElement*>::iterator itTE = inputTEs.begin(); - - // would be better to use a view container or ConstDataVector - // here to avoid the deep copy - but need to figure out how to - // put this to the navigation - xAOD::MuonContainer* outMuons = new xAOD::MuonContainer(); - xAOD::MuonAuxContainer muonAux; - outMuons->setStore( &muonAux ); - - xAOD::TrackParticleContainer* outTP = new xAOD::TrackParticleContainer(); - xAOD::TrackParticleAuxContainer tpAux; - outTP->setStore( &tpAux ); - - m_nRoiIn = inputTEs.size(); - m_nTrkIn = 0; - - // loop over all ROIs (aka TEs) - for ( ; itTE != inputTEs.end(); ++itTE ) { - HLT::TriggerElement* inputTE = *itTE; - // Some debug output: - std::string label; - TrigConf::HLTTriggerElement::getLabel (inputTE->getId(), label ); - ATH_MSG_DEBUG( "inputTE: \"" << label << "\" with ID " << inputTE->getId() ); - - // Get xAOD Muon container linked to input TE - const xAOD::MuonContainer* inputMuonCont=0; - const xAOD::TrackParticleContainer* inputTPCont=0; - if(getFeature(inputTE, inputMuonCont)!=HLT::OK || !inputMuonCont) { - ATH_MSG_DEBUG("no MuonContainer Feature found in TE " << inputTE->getId() ); - return HLT::MISSING_FEATURE; - } - - if (m_copyTracks && getFeature(inputTE, inputTPCont, "MuonEFInfo_CaloTagTrackParticles") != HLT::OK) { - ATH_MSG_DEBUG("no MuonContainer Feature found in TE " << inputTE->getId() ); - return HLT::MISSING_FEATURE; - } - - - - // loop on the muons within the RoI - ATH_MSG_DEBUG( "MuonContainer found with size " << inputMuonCont->size() ); - for(auto muon : *inputMuonCont) { - ATH_MSG_DEBUG( "Looking at next muon, primaryTrackPartile = " << muon->primaryTrackParticle()); - ++m_nTrkIn; - // deep copy the muon - xAOD::Muon* muoncopy = new xAOD::Muon(); - outMuons->push_back( muoncopy ); - *muoncopy = *muon; - } // loop over muons within the RoI - - ATH_MSG_DEBUG("CopyTracks:" << m_copyTracks << " TPCont: " << inputTPCont); - - if (m_copyTracks && inputTPCont) { - ATH_MSG_DEBUG( "TrackParticleContainer found with size " << inputTPCont->size() ); - for (auto tp : * inputTPCont) { - ATH_MSG_DEBUG( "Looking at next TP" ); - xAOD::TrackParticle* tpcopy = new xAOD::TrackParticle(); - outTP->push_back( tpcopy ); - *tpcopy = *tp; - } - } - - } //loop over inputTEs - - // make output TE - HLT::TriggerElement* outputTE = addRoI(output); - - if ( outMuons->size() > 0 ) { - outputTE->setActiveState(true); - HLT::ErrorCode hltStatus = attachFeature(outputTE, outMuons, "MuonEFInfo"); - if( hltStatus != HLT::OK ) { - std::string label; - TrigConf::HLTTriggerElement::getLabel( outputTE->getId(), label ); - ATH_MSG_WARNING( "Failed to attach output muons to output TE \"" << label << "\" ID=" << outputTE->getId() ); - delete outMuons; - if(outTP) delete outTP; - return hltStatus; - } - ATH_MSG_DEBUG( "attached muon container with size: " << outMuons->size() ); - } else { - outputTE->setActiveState(false); - delete outMuons; - outMuons = 0; - } - - if ( m_copyTracks){ - if( outTP->size() > 0 ) { - outputTE->setActiveState(true); - HLT::ErrorCode hltStatus = attachFeature(outputTE, outTP, "MuonEFInfo_CaloTagTrackParticles"); - if ( hltStatus != HLT::OK ) { - std::string label; - TrigConf::HLTTriggerElement::getLabel( outputTE->getId(), label ); - ATH_MSG_WARNING( "Failed to attach output track particles to output TE \"" << label << "\" ID=" << outputTE->getId() ); - delete outTP; - return hltStatus; - } - ATH_MSG_DEBUG( "Attached track particle container with size: " << outTP->size() ); - } - } - if(outTP) delete outTP; - // fill monitor variables "by hand" because this is an allTE algo - afterExecMonitors().ignore(); - - return HLT::OK; -}//hltExecute diff --git a/Trigger/TrigAlgorithms/TrigMuonEF/src/TrigMuonEFRoiAggregator.h b/Trigger/TrigAlgorithms/TrigMuonEF/src/TrigMuonEFRoiAggregator.h deleted file mode 100644 index 886d88b75553d1a0ce297ab33866dd08764cb863..0000000000000000000000000000000000000000 --- a/Trigger/TrigAlgorithms/TrigMuonEF/src/TrigMuonEFRoiAggregator.h +++ /dev/null @@ -1,61 +0,0 @@ -/* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -*/ - -#ifndef TRIGMUONEF_TRIGMUONEFROIAGGREGATOR_H__ -#define TRIGMUONEF_TRIGMUONEFROIAGGREGATOR_H__ - -// ************************************************ -// -// NAME: TrigMuonEFRoiAggregator.h -// PACKAGE: Trigger/TrigAlgorithms/TrigMuonEF -// -// AUTHORS: Alex Oh, Martin Woudstra, Mark Owen. -// -// ************************************************ - -#include "TrigInterfaces/AllTEAlgo.h" -#include "TrigInDetEvent/TrigInDetTrack.h" - -class TrigMuonEFRoiAggregator : public HLT::AllTEAlgo { - - public: - - /// Constructor - TrigMuonEFRoiAggregator(const std::string & name, ISvcLocator* pSvcLocator); - - /// Destructor - ~TrigMuonEFRoiAggregator(); - - /// Initialize - HLT::ErrorCode hltInitialize(); - - /// Execute for each event - HLT::ErrorCode hltExecute(std::vector<std::vector<HLT::TriggerElement*> >&,unsigned int); - - /// Finalize - HLT::ErrorCode hltFinalize(); - - protected: - - // - // JobOptions Properties - // - /** Min Pt for muon 1 */ - double m_PtLo; - /** Min Pt for muon 2 */ - double m_PtHi; - /** Option to also copy trackparticles */ - bool m_copyTracks; - - // - // Monitoring variables - // - int m_nRoiIn; - int m_nTrkIn; - -};//class TrigMuonEFRoiAggregator - - -#endif // TRIGMUONEF_TRIGMUONEFROIAGGREGATOR_H__ - diff --git a/Trigger/TrigAlgorithms/TrigMuonEF/src/TrigMuonEFRoiUtils.cxx b/Trigger/TrigAlgorithms/TrigMuonEF/src/TrigMuonEFRoiUtils.cxx deleted file mode 100644 index 06bd9d2ff658079902f2bf3e24d873383586bddb..0000000000000000000000000000000000000000 --- a/Trigger/TrigAlgorithms/TrigMuonEF/src/TrigMuonEFRoiUtils.cxx +++ /dev/null @@ -1,51 +0,0 @@ -/* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -*/ - -#include "TrigMuonEFRoiUtils.h" - -#include "IRegionSelector/IRoiDescriptor.h" -#include "TrigSteeringEvent/TrigRoiDescriptor.h" - -#include <iostream> - -using std::cout; -using std::endl; - -/** - * Take input RoI and create new TrigRoiDescriptor with fixed width. - * This function is to migrate from old to new RegionSelection interface. - * Eventually it should be removed and the algorithms should use dynamic widths - * stored in the RoIs. - */ -const IRoiDescriptor* createRoiDescriptor(const IRoiDescriptor* inmuonRoI, const double etaWidth, const double phiWidth, bool debug) { - - TrigRoiDescriptor* newRoI = 0; - if (inmuonRoI) { - - const double eta = inmuonRoI->eta(); - const double phi = inmuonRoI->phi(); - - double minphi = phi - phiWidth; - if(minphi < -M_PI) minphi = 2.0*M_PI + minphi; - double maxphi = phi + phiWidth; - if(maxphi > M_PI) maxphi = maxphi - 2.0*M_PI; - newRoI = new TrigRoiDescriptor(eta, eta - etaWidth, eta + etaWidth, phi, minphi, maxphi); - - if(debug) { - cout << "createRoiDescriptor: input Roi eta, phi = " << eta << ", " << phi << endl; - cout << "createRoiDescriptor: etaWidth, phiWidth = " << etaWidth << ", " << phiWidth << endl; - cout << "createRoiDescriptor: etaRange = " << eta - etaWidth << " -> " << eta + etaWidth << endl; - cout << "createRoiDescriptor: phiRange = " << minphi << " -> " << maxphi << endl; - } // debug - - } else { // assume we are in full scan mode - - if(debug) { - cout << "createRoiDescriptor: 0 input, will create 'full scan' RoI" << endl; - } - - newRoI = new TrigRoiDescriptor(true); - } - return newRoI; -} diff --git a/Trigger/TrigAlgorithms/TrigMuonEF/src/TrigMuonEFRoiUtils.h b/Trigger/TrigAlgorithms/TrigMuonEF/src/TrigMuonEFRoiUtils.h deleted file mode 100644 index f0041ccf4424d50f857a7157b1c26b591b16dca5..0000000000000000000000000000000000000000 --- a/Trigger/TrigAlgorithms/TrigMuonEF/src/TrigMuonEFRoiUtils.h +++ /dev/null @@ -1,14 +0,0 @@ -/* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -*/ - -#ifndef TRIGMUONEFROIUTILS_H__ -#define TRIGMUONEFROIUTILS_H__ - -// fwd declare IRoiDescriptor class -class IRoiDescriptor; - -/// Utility function that takes input ROI descriptor and makes a new one with the specified range. -const IRoiDescriptor* createRoiDescriptor(const IRoiDescriptor* inmuonRoI, const double etaWidth, const double phiWidth, bool debug=false); - -#endif //TRIGMUONEFROIUTILS_H__ diff --git a/Trigger/TrigAlgorithms/TrigMuonEF/src/TrigMuonEFStandaloneTrackTool.cxx b/Trigger/TrigAlgorithms/TrigMuonEF/src/TrigMuonEFStandaloneTrackTool.cxx deleted file mode 100644 index db09de354a4a11e3f7984abd215b15f856bdd766..0000000000000000000000000000000000000000 --- a/Trigger/TrigAlgorithms/TrigMuonEF/src/TrigMuonEFStandaloneTrackTool.cxx +++ /dev/null @@ -1,2594 +0,0 @@ -/* - Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration -*/ - -#include <algorithm> // for find -#include "TrigMuonEFStandaloneTrackTool.h" - -#include "StoreGate/ActiveStoreSvc.h" - -#include "GaudiKernel/IIncidentSvc.h" -#include "AthenaKernel/Timeout.h" - -#include "TrigConfHLTData/HLTTriggerElement.h" - -#include "MuonSegmentCombinerToolInterfaces/IMooSegmentCombinationFinder.h" -#include "MuonRecToolInterfaces/IMuonPatternSegmentAssociationTool.h" -#include "TrkToolInterfaces/ITrackSummaryTool.h" -#include "TrkTrack/Track.h" -#include "TrkTrackSummary/TrackSummary.h" -#include "TrkParameters/TrackParameters.h" - -#include "TrkEventPrimitives/FitQuality.h" -#include "MuonSegment/MuonSegment.h" - -#include "IRegionSelector/IRegSelSvc.h" -#include "IRegionSelector/IRoiDescriptor.h" - -#include "MuonPrepRawData/MuonPrepDataContainer.h" -#include "MuonRIO_OnTrack/MdtDriftCircleOnTrack.h" - -#include "MuonReadoutGeometry/MuonDetectorManager.h" -#include "MuonCnvToolInterfaces/IMuonRawDataProviderTool.h" -#include "MuonCnvToolInterfaces/IMuonRdoToPrepDataTool.h" -#include "CscClusterization/ICscClusterBuilder.h" - -#include "MuidInterfaces/IMuidBackTracker.h" - -#include "TrigMuonToolInterfaces/TrigMuonEFMonVars.h" - -#include "TrigNavigation/TriggerElement.h" - -#include "TrigTimeAlgs/TrigTimerSvc.h" -#include "TrigTimeAlgs/TrigTimer.h" - -#include "TrigInterfaces/Algo.h" -#include "TrigInterfaces/FexAlgo.h" -#include "TrigInterfaces/IMonitoredAlgo.h" // for AutoClear -#include "AthContainers/ConstDataVector.h" - -// xAOD related includes -#include "MuonCombinedEvent/MuonCandidate.h" -#include "MuonCombinedToolInterfaces/IMuonCandidateTool.h" -#include "TrkToolInterfaces/ITrackParticleCreatorTool.h" -#include "xAODTracking/Vertex.h" -#include "xAODTracking/VertexAuxContainer.h" -#include "xAODTracking/TrackParticleAuxContainer.h" - -#include "CLHEP/GenericFunctions/CumulativeChiSquare.hh" -#include <fstream> - -#include "TrigMuonEFUtils.icc" - -ATLAS_NO_CHECK_FILE_THREAD_SAFETY; // legacy trigger code - -#if DEBUG_ROI_VS_FULL -#include <set> //used in the method sanity_check -#endif - -#define testRoiDrivenMode false - -using namespace std; -using namespace Muon; -using CLHEP::GeV; - -//________________________________________________________________________ -TrigMuonEFStandaloneTrackTool::TrigMuonEFStandaloneTrackTool(const std::string& type, - const std::string& name, - const IInterface* parent) - : AthAlgTool(type,name,parent), - m_regionSelector("RegSelSvc",name), - m_segmentsFinderTool("Muon::MooSegmentCombinationFinder/TMEF_SegmentFinder",this), - m_assocTool("Muon::MuonPatternSegmentAssociationTool/MuonPatternSegmentAssociationTool"), - m_trackBuilderTool("Muon::MuonTrackSteering/TMEF_TracksBuilderTool",this), - m_trackSummaryTool("Trk::TrackSummaryTool/MuidTrackSummaryTool"), - m_mdtRawDataProvider("Muon::MDT_RawDataProviderTool/MDT_RawDataProviderTool"), - m_rpcRawDataProvider("Muon::RPC_RawDataProviderTool/RPC_RawDataProviderTool"), - m_tgcRawDataProvider("Muon::TGC_RawDataProviderTool/TGC_RawDataProviderTool"), - m_cscRawDataProvider("Muon::CSC_RawDataProviderTool/CSC_RawDataProviderTool"), - m_cscPrepDataProvider("Muon::CscRdoToCscPrepDataTool/CscPrepDataProviderTool"), - m_mdtPrepDataProvider("Muon::MdtRdoToPrepDataTool/MdtPrepDataProviderTool"), - m_rpcPrepDataProvider("Muon::RpcRdoToPrepDataTool/RpcPrepDataProviderTool"), - m_tgcPrepDataProvider("Muon::TgcRdoToPrepDataTool/TgcPrepDataProviderTool"), - m_cscClusterProvider(""), - p_ActiveStore(0), - m_firstEvent(true), - m_useCscData(true), - m_useRpcData(true), - m_useTgcData(true), - m_useTGCInPriorNextBC(false), - m_useMdtData(1), //0=NO, 1=ALL(default), 2=BarrelOnly, 3=EndCapsOnly - m_useMdtSeededDecoding(false), - m_useRpcSeededDecoding(false), - m_useTgcSeededDecoding(false), - m_useCscSeededDecoding(false), - m_useTgcRobDecoding(false), - m_useCscRobDecoding(false), - m_doTimeOutChecks(false), - m_doTimeOutGuard(false), - m_useL2Hits(false), - m_maxCscHits(0), - m_maxMdtHits(0), - m_maxRpcHits(0), - m_maxTgcHits(0), - m_patternCombiColl(0), - m_segments(0), - m_spectrometerTracks(0), - m_patternCombiCollInternal(0), - m_segmentsInternal(0), - m_spectrometerTracksInternal(0), - m_extrapolatedTracks(0), - m_spectrometerTrackParticles(0), - m_spectrometerTrackParticlesAux(0), - m_roi_num_seg(0), - m_roi_num_mstrk(0), - m_roi_num_satrk(0), - m_totalSegmentCalls(0), - m_cachedSegmentCalls(0), - m_totalSpectrometerCalls(0), - m_cachedSpectrometerCalls(0), - m_totalExtrapolatedCalls(0), - m_cachedExtrapolatedCalls(0), - m_muonCandidateTool("MuonCandidateTool/MuonCandidateTool"), - m_TrackToTrackParticleConvTool("MuonParticleCreatorTool"), - m_rpcKey("RPC_Measurements"), - m_tgcKey("TGC_Measurements"), - m_tgcKeyNextBC("TGC_MeasurementsNextBC"), - m_mdtKey("MDT_DriftCircles"), - m_ignoreCSC(true), - m_segmentOverlapRemovalTool("Muon::MuonSegmentOverlapRemovalTool/MuonSegmentOverlapRemovalTool") -{ - m_hashlist.reserve(4); - - declareInterface<ITrigMuonStandaloneTrackTool>(this); - - declareProperty("RegionSelectionSvc", m_regionSelector); - declareProperty("SegmentsFinderTool", m_segmentsFinderTool); - declareProperty("AssociationTool", m_assocTool); - declareProperty("TrackBuilderTool", m_trackBuilderTool); - declareProperty("TrkSummaryTool", m_trackSummaryTool); - declareProperty("MuonCandidateTool", m_muonCandidateTool); - declareProperty("TrackToTrackParticleConvTool", m_TrackToTrackParticleConvTool); - - declareProperty ("MdtRawDataProvider",m_mdtRawDataProvider); - declareProperty ("RpcRawDataProvider",m_rpcRawDataProvider); - declareProperty ("TgcRawDataProvider",m_tgcRawDataProvider); - declareProperty ("CscRawDataProvider",m_cscRawDataProvider); - - declareProperty("CscPrepDataProvider", m_cscPrepDataProvider); - declareProperty("MdtPrepDataProvider", m_mdtPrepDataProvider); - declareProperty("RpcPrepDataProvider", m_rpcPrepDataProvider); - declareProperty("TgcPrepDataProvider", m_tgcPrepDataProvider); - declareProperty("CscClusterProvider", m_cscClusterProvider); - - declareProperty("doCache", m_doCache=true); - - declareProperty("useMdtData", m_useMdtData ); - declareProperty("useRpcData", m_useRpcData ); - declareProperty("useTgcData", m_useTgcData ); - declareProperty("useTGCInPriorNextBC", m_useTGCInPriorNextBC); - declareProperty("useCscData", m_useCscData ); - - - declareProperty("useMdtSeededDecoding", m_useMdtSeededDecoding ); - declareProperty("useRpcSeededDecoding", m_useRpcSeededDecoding ); - declareProperty("useTgcSeededDecoding", m_useTgcSeededDecoding ); - declareProperty("useCscSeededDecoding", m_useCscSeededDecoding ); - declareProperty("useTgcRobDecoding", m_useTgcRobDecoding ); - declareProperty("useCscRobDecoding", m_useCscRobDecoding ); - - declareProperty("doTimeOutChecks",m_doTimeOutChecks); - declareProperty("doTimeOutGuard",m_doTimeOutGuard); - declareProperty("useL2Hits", m_useL2Hits); - declareProperty("maxTgcHits",m_maxTgcHits); - declareProperty("maxCscHits",m_maxCscHits); - declareProperty("maxRpcHits",m_maxRpcHits); - declareProperty("maxMdtHits",m_maxMdtHits); - declareProperty("RpcPrepDataContainer", m_rpcKey); - declareProperty("TgcPrepDataContainer", m_tgcKey); - declareProperty("TgcPrepDataContainerNextBC", m_tgcKeyNextBC); - declareProperty("MdtPrepDataContainer", m_mdtKey); - declareProperty("IgnoreMisalginedCSCs", m_ignoreCSC); - - declareProperty("SegmentOverlapRemovalTool", m_segmentOverlapRemovalTool, "tool to removal overlaps in segment combinations" ); - - clearRoiCache(); - -} - -//________________________________________________________________________ -TrigMuonEFStandaloneTrackTool::~TrigMuonEFStandaloneTrackTool() -{ - // clean up any xAOD particles - if( m_spectrometerTrackParticles ) delete m_spectrometerTrackParticles; - if( m_spectrometerTrackParticlesAux ) delete m_spectrometerTrackParticlesAux; -} - -//________________________________________________________________________ -StatusCode TrigMuonEFStandaloneTrackTool::initialize() -{ - -#if DEBUG_ROI_VS_FULL - m_fileWithHashIds_rpc.open("HashID_rpc.txt"); - m_fileWithHashIds_tgc.open("HashID_tgc.txt"); - m_fileWithHashIds_mdt.open("HashID_mdt.txt"); - m_fileWithHashIds_csc.open("HashID_csc.txt"); -#endif - //m_SFCache\TrigMap.clear(); - ATH_MSG_DEBUG("clearing SFCacheSCmap (initialize)"); - m_SFCacheSCMap.clear(); - - if (msgLvl(MSG::DEBUG)) { - msg() << MSG::DEBUG - << "package version = " << PACKAGE_VERSION << endmsg; - msg() << MSG::DEBUG - << "Properties are set as follows: " << endmsg; - msg() << MSG::DEBUG - << "SegmentsFinderTool " << m_segmentsFinderTool << endmsg; - msg() << MSG::DEBUG - << "TrackBuilderTool " << m_trackBuilderTool << endmsg; - msg() << MSG::DEBUG - << "CscRawDataProvider " << m_cscRawDataProvider << endmsg; - msg() << MSG::DEBUG - << "MdtRawDataProvider " << m_mdtRawDataProvider << endmsg; - msg() << MSG::DEBUG - << "RpcRawDataProvider " << m_rpcRawDataProvider << endmsg; - msg() << MSG::DEBUG - << "TgcRawDataProvider " << m_tgcRawDataProvider << endmsg; - msg() << MSG::DEBUG - << "CscPrepDataProvider " << m_cscPrepDataProvider << endmsg; - msg() << MSG::DEBUG - << "MdtPrepDataProvider " << m_mdtPrepDataProvider << endmsg; - msg() << MSG::DEBUG - << "RpcPrepDataProvider " << m_rpcPrepDataProvider << endmsg; - msg() << MSG::DEBUG - << "TgcPrepDataProvider " << m_tgcPrepDataProvider << endmsg; - - msg() << MSG::DEBUG - << "doCache " << m_doCache << endmsg; - - msg() << MSG::DEBUG - << "useMdtData " << m_useMdtData << endmsg; - msg() << MSG::DEBUG - << "useRpcData " << m_useRpcData << endmsg; - msg() << MSG::DEBUG - << "useTgcData " << m_useTgcData << endmsg; - msg() << MSG::DEBUG - << "useTGCInPriorNextBC " << m_useTGCInPriorNextBC << endmsg; - msg() << MSG::DEBUG - << "useCscData " << m_useCscData << endmsg; - msg() << MSG::DEBUG - << "useMdtSeededDecoding " << m_useMdtSeededDecoding << endmsg; - msg() << MSG::DEBUG - << "useRpcSeededDecoding " << m_useRpcSeededDecoding << endmsg; - msg() << MSG::DEBUG - << "useTgcSeededDecoding " << m_useTgcSeededDecoding << endmsg; - msg() << MSG::DEBUG - << "useCscSeededDecoding " << m_useCscSeededDecoding << endmsg; - msg() << MSG::DEBUG - << "useTgcRobDecoding " << m_useTgcRobDecoding << endmsg; - msg() << MSG::DEBUG - << "useCscRobDecoding " << m_useCscRobDecoding << endmsg; - - msg() << MSG::DEBUG - << m_decodeMdtBS.name() << " " << m_decodeMdtBS << endmsg; - msg() << MSG::DEBUG - << m_decodeRpcBS.name() << " " << m_decodeRpcBS << endmsg; - msg() << MSG::DEBUG - << m_decodeTgcBS.name() << " " << m_decodeTgcBS << endmsg; - msg() << MSG::DEBUG - << m_decodeCscBS.name() << " " << m_decodeCscBS << endmsg; - msg() << MSG::DEBUG - << "doTimeOutChecks " << m_doTimeOutChecks << endmsg; - msg() << MSG::DEBUG - << "doTimeOutGuard " << m_doTimeOutGuard << endmsg; - msg() << MSG::DEBUG - << "useL2Hits " << m_useL2Hits << endmsg; - - msg() << MSG::DEBUG - << "maxRpcHits " << m_maxRpcHits << endmsg; - msg() << MSG::DEBUG - << "maxCscHits " << m_maxCscHits << endmsg; - msg() << MSG::DEBUG - << "maxMdtHits " << m_maxMdtHits << endmsg; - msg() << MSG::DEBUG - << "maxTgcHits " << m_maxTgcHits << endmsg; - } - - // Get the region selector tool: - if (m_regionSelector.retrieve().isFailure()) { - msg() << MSG::FATAL - << "Unable to retrieve RegionSelector Svc" - << endmsg; - return StatusCode::FAILURE; - } - - // Retrieve ActiveStore - StatusCode status = serviceLocator()->service("ActiveStoreSvc", p_ActiveStore); - if(!status.isSuccess() || 0 == p_ActiveStore) { - msg() << MSG::ERROR <<" Could not find ActiveStoreSvc " << endmsg; - return StatusCode::FAILURE; - } - - // Retrieve MDT raw data provider tool if needed - if (m_mdtRawDataProvider.retrieve(DisableTool{ !m_decodeMdtBS }).isSuccess()) { - msg (MSG::INFO) << "Retrieved " << m_mdtRawDataProvider << endmsg; - } - else { - msg (MSG::FATAL) << "Could not get " << m_mdtRawDataProvider << endmsg; - return StatusCode::FAILURE; - } - - // Retrieve RPC raw data provider tool if needed - if (m_rpcRawDataProvider.retrieve(DisableTool{ !m_decodeRpcBS }).isSuccess()) { - msg (MSG::INFO) << "Retrieved " << m_rpcRawDataProvider << endmsg; - } - else { - msg (MSG::FATAL) << "Could not get " << m_rpcRawDataProvider << endmsg; - return StatusCode::FAILURE; - } - - // Retrieve TGC raw data provider tool if needed - if (m_tgcRawDataProvider.retrieve(DisableTool{ !m_decodeTgcBS }).isSuccess()) { - msg (MSG::INFO) << "Retrieved " << m_tgcRawDataProvider << endmsg; - } - else { - msg (MSG::FATAL) << "Could not get " << m_tgcRawDataProvider << endmsg; - return StatusCode::FAILURE; - } - - // Retrieve CSC raw data provider tool if needed - if (m_cscRawDataProvider.retrieve(DisableTool{ !m_decodeCscBS }).isSuccess()) { - msg (MSG::INFO) << "Retrieved " << m_cscRawDataProvider << endmsg; - } - else { - msg (MSG::FATAL) << "Could not get " << m_cscRawDataProvider << endmsg; - return StatusCode::FAILURE; - } - - // Retrieve segment maker tool - status = m_segmentsFinderTool.retrieve(); - if (status.isSuccess()){ - msg() << MSG::INFO << "Retrieved " << m_segmentsFinderTool << endmsg; - } else { - msg() << MSG::FATAL << "Could not get " << m_segmentsFinderTool << endmsg; - return StatusCode::FAILURE; - } - - - status = m_assocTool.retrieve(); - if (status.isSuccess()){ - msg() << MSG::INFO << "Retrieved " << m_assocTool << endmsg; - }else{ - msg() << MSG::FATAL << "Could not get " << m_assocTool <<endmsg; - return StatusCode::FAILURE; - } - - status = m_trackBuilderTool.retrieve(); - if (status.isSuccess()){ - ATH_MSG_INFO("Retrieved " << m_trackBuilderTool); - } - else{ - ATH_MSG_FATAL("Could not get " << m_trackBuilderTool); - return StatusCode::FAILURE; - } - - // Retrieve track summary tool - if (m_trackSummaryTool.retrieve().isSuccess()){ - ATH_MSG_INFO("Retrieved " << m_trackSummaryTool); - } - else{ - ATH_MSG_FATAL("Could not get " << m_trackSummaryTool); - return StatusCode::FAILURE; - } - - - - - if (m_useCscData) { - - status = m_cscPrepDataProvider.retrieve(); - if (status.isSuccess()) { - msg() << MSG::INFO << "Retrieved " << m_cscPrepDataProvider << endmsg; - } else { - msg() << MSG::FATAL << "Could not get " << m_cscPrepDataProvider << endmsg; - return StatusCode::FAILURE; - } - // clusterization tool - status = m_cscClusterProvider.retrieve(); - if (status.isSuccess()) { - msg() << MSG::INFO << "Retrieved " << m_cscClusterProvider << endmsg; - } else { - msg() << MSG::FATAL << "Could not get " << m_cscClusterProvider << endmsg; - return StatusCode::FAILURE; - } - } - if (m_useMdtData) { - status = m_mdtPrepDataProvider.retrieve(); - if (status.isSuccess()) { - msg() << MSG::INFO << "Retrieved " << m_mdtPrepDataProvider << endmsg; - } else { - msg() << MSG::FATAL << "Could not get " << m_mdtPrepDataProvider << endmsg; - return StatusCode::FAILURE; - } - } - if (m_useRpcData) { - status = m_rpcPrepDataProvider.retrieve(); - if (status.isSuccess()) { - msg() << MSG::INFO << "Retrieved " << m_rpcPrepDataProvider << endmsg; - } else { - msg() << MSG::FATAL << "Could not get " << m_rpcPrepDataProvider << endmsg; - return StatusCode::FAILURE; - } - } - if (m_useTgcData) { - status = m_tgcPrepDataProvider.retrieve(); - if (status.isSuccess()) { - msg() << MSG::INFO << "Retrieved " << m_tgcPrepDataProvider << endmsg; - } else { - msg() << MSG::FATAL << "Could not get " << m_tgcPrepDataProvider << endmsg; - return StatusCode::FAILURE; - } - } - - // retrive muon candidate tool - status = m_muonCandidateTool.retrieve(); - if (status.isSuccess()){ - ATH_MSG_INFO("Retrieved " << m_muonCandidateTool); - } - else{ - ATH_MSG_FATAL("Could not get " << m_muonCandidateTool); - return StatusCode::FAILURE; - } - - // retrive track particle creator tool - status = m_TrackToTrackParticleConvTool.retrieve(); - if (status.isSuccess()){ - ATH_MSG_INFO("Retrieved " << m_TrackToTrackParticleConvTool); - } - else{ - ATH_MSG_FATAL("Could not get " << m_TrackToTrackParticleConvTool); - return StatusCode::FAILURE; - } - - ATH_CHECK( m_idHelperSvc.retrieve() ); - - // register EndEvent incident - IIncidentSvc* pIncsvc; - int priority = 100; - if ( serviceLocator()->service("IncidentSvc", pIncsvc).isSuccess() ) { - pIncsvc->addListener( this, "EndEvent", priority); - } else { - ATH_MSG_ERROR( "Could not register incident service " ); - return StatusCode::FAILURE; - } - - ATH_MSG_DEBUG("End of init TrigMuonEFStandaloneTrackTool"); - - //initialise for data handles - - if(!m_rpcKey.initialize()){ - ATH_MSG_ERROR("Couldn't initalize RPC ReadHandleKey"); - return StatusCode::FAILURE; - } - if(!m_tgcKey.initialize()){ - ATH_MSG_ERROR("Couldn't initalize TGC ReadHandleKey"); - return StatusCode::FAILURE; - } - if(!m_tgcKeyNextBC.initialize()){ - ATH_MSG_ERROR("Couldn't initalize TGCNextBC ReadHandleKey"); - return StatusCode::FAILURE; - } - if(!m_mdtKey.initialize()){ - ATH_MSG_ERROR("Couldn't initalize MDT ReadHandleKey"); - return StatusCode::FAILURE; - } - ATH_CHECK(m_cscClustersKey.initialize()); - //segment overlap removal - ATH_CHECK( m_segmentOverlapRemovalTool.retrieve() ); - ATH_CHECK(m_mdtCablingKey.initialize()); - - return StatusCode::SUCCESS; -} - -//________________________________________________________________________ -StatusCode TrigMuonEFStandaloneTrackTool::finalize() -{ - double segmentCacheFraction = getFraction(m_cachedSegmentCalls, m_totalSegmentCalls); - double spectroCacheFraction = getFraction(m_cachedSpectrometerCalls, m_totalSpectrometerCalls); - double extrapolCacheFraction = getFraction(m_cachedExtrapolatedCalls, m_totalExtrapolatedCalls); - - ATH_MSG_INFO("Segment making calls : " << m_totalSegmentCalls << ". Returned from cache: " << m_cachedSegmentCalls - << ". Cached fraction: " << segmentCacheFraction ); - ATH_MSG_INFO("Spectrometer Track making calls: " << m_totalSpectrometerCalls << ". Returned from cache: " << m_cachedSpectrometerCalls - << ". Cached fraction: " << spectroCacheFraction ); - ATH_MSG_INFO("Extrapolated Track making calls: " << m_totalExtrapolatedCalls << ". Returned from cache: " << m_cachedExtrapolatedCalls - << ". Cached fraction: " << extrapolCacheFraction ); - -#if DEBUG_ROI_VS_FULL - m_fileWithHashIds_rpc.close(); - m_fileWithHashIds_tgc.close(); - m_fileWithHashIds_mdt.close(); - m_fileWithHashIds_csc.close(); -#endif - - return StatusCode::SUCCESS; -} - -//________________________________________________________________________ -#if DEBUG_ROI_VS_FULL -void TrigMuonEFStandaloneTrackTool::sanity_check(const std::vector<IdentifierHash>& input_hash_ids, const std::vector<IdentifierHash>& hash_ids_withData, std::ostream& outfile) -{ - - std::set<IdentifierHash> inputSet; - std::set<IdentifierHash> outputSet; - std::vector<IdentifierHash> inputDuplicates; - std::vector<IdentifierHash> outputDuplicates; - std::vector<IdentifierHash> inputUnmatched; - std::vector<IdentifierHash> outputUnmatched; - - //print input and output hash IDs and check for duplicates or unmatched - outfile << "requested hash IDs: "; - for (auto it = input_hash_ids.begin(); it != input_hash_ids.end(); ++it) {//loop over requested hash IDs - outfile << *it << " "; - if (!inputSet.insert(*it).second) //check for duplicate - inputDuplicates.push_back(*it); - } - outfile << "\n"; - outfile << "hash IDs with data: "; - for (auto it = hash_ids_withData.begin(); it != hash_ids_withData.end(); ++it) {//loop over hash IDs with data - outfile << *it << " "; - if (!outputSet.insert(*it).second) //check for duplicate - outputDuplicates.push_back(*it); - if (inputSet.find(*it) == inputSet.end()) //check for mismatch - outputUnmatched.push_back(*it); - } - outfile << "\n"; - - for (auto it = input_hash_ids.begin(); it != input_hash_ids.end(); ++it) {//another loop over requested hash IDs - if (outputSet.find(*it) == outputSet.end()) //check for mismatch - inputUnmatched.push_back(*it); - } - - - //print duplicates if any - if (inputDuplicates.size()) { - outfile << "requested hID duplicates: "; - for (auto it = inputDuplicates.begin(); it != inputDuplicates.end(); ++it) - outfile << *it << " "; - outfile << "\n"; - } - if (outputDuplicates.size()) { - outfile << "hID with data duplicates: "; - for (auto it = outputDuplicates.begin(); it != outputDuplicates.end(); ++it) - outfile << *it << " "; - outfile << "\n"; - } - - //print unmatched IDs if any - if (inputUnmatched.size()) { - outfile << "requested hID unrecovered with data: "; - for (auto it = inputUnmatched.begin(); it != inputUnmatched.end(); ++it) - outfile << *it << " "; - outfile << "\n"; - } - if (outputUnmatched.size()) { - outfile << "recovered but unrequested hID with data: "; - for (auto it = outputUnmatched.begin(); it != outputUnmatched.end(); ++it) - outfile << *it << " "; - outfile << "\n"; - } - -} -#endif - -//________________________________________________________________________ -void TrigMuonEFStandaloneTrackTool::unpackTimers( std::vector<TrigTimer*>& timers, unsigned int firstIndex, - TrigTimer*& dataPrepTime, TrigTimer*& algTime, TrigTimer*& dataOutputTime ) -{ - dataPrepTime = 0; - algTime = 0; - dataOutputTime = 0; - unsigned int index = firstIndex; - if ( timers.size() > index ) { - dataPrepTime = timers[index]; - ++index; - if ( timers.size() > index ) { - algTime = timers[index]; - ++index; - if ( timers.size() > index ) { - dataOutputTime = timers[index]; - } - } - } -} - - -//________________________________________________________________________ -HLT::ErrorCode -TrigMuonEFStandaloneTrackTool::getSpectrometerTracks(const IRoiDescriptor* muonRoI, - SegmentCache*& cache, - TrigMuonEFMonVars& monVars, - std::vector<TrigTimer*>& timers, const EventContext& ctx) -{ - // - // Segment finding - // - ATH_MSG_DEBUG("In getSpectrometerTracks, about to call findSegments"); - HLT::ErrorCode hltStatus = findSegments(muonRoI, cache, monVars.segs, timers, 0, ctx); - if (hltStatus!=HLT::OK) { - return hltStatus; - } - - - /// Making Object to cache pointers for segfinder: SC holds Pointers that are all deleted at end of event - if( not m_segments ) { - ATH_MSG_DEBUG( "No Muon Segments built. Check configuration! Stop here to process the RoI" ); - return HLT::MISSING_FEATURE; - } - // - // build tracks - // - return buildTracks(m_segments, cache, monVars.MS, timers, 3); -} - - -//________________________________________________________________________ -HLT::ErrorCode TrigMuonEFStandaloneTrackTool::getExtrapolatedTracks(const IRoiDescriptor* muonRoI, - MuonCandidateCollection& candidateCollection, - TrackCollection& extrapolatedTracks, - SegmentCache*& cache, - TrigMuonEFMonVars& monVars, - std::vector<TrigTimer*>& timers, const EventContext& ctx) -{ - - ATH_MSG_DEBUG("In getExtrapolatedTracks with cache"); - HLT::ErrorCode hltStatus = getSpectrometerTracks( muonRoI, cache, monVars, timers, ctx ); - // if fail to get trks from L2 hits, retry with all hits - if(m_useL2Hits && (hltStatus==HLT::MISSING_FEATURE || !m_spectrometerTracks || m_spectrometerTracks->empty()) ){ - m_useL2Hits=false; - hltStatus = getSpectrometerTracks( muonRoI, cache, monVars, timers, ctx ); - m_useL2Hits=true; - } - if (hltStatus!=HLT::OK && hltStatus!=HLT::MISSING_FEATURE) { - ATH_MSG_DEBUG( "Failed to build spectrometerTracks" ); - return hltStatus; - } - - if (hltStatus==HLT::MISSING_FEATURE || !m_spectrometerTracks || m_spectrometerTracks->empty()) { - ATH_MSG_DEBUG( "No Muon Spectrometer track found: stop here to process the RoI." ); - return HLT::MISSING_FEATURE; - } else { - ATH_MSG_DEBUG( "Muon Spectrometer Track container retrieved with size : " << m_spectrometerTracks->size() ); - } - - // - // extrapolation - // - hltStatus = extrapolate(m_spectrometerTrackParticles, candidateCollection, extrapolatedTracks, cache, monVars.SA, timers, 6); - if (hltStatus!=HLT::OK && hltStatus !=HLT::MISSING_FEATURE) { - ATH_MSG_DEBUG( "Failed to extrapolate spectrometer tracks to IP" ); - return hltStatus; - } - - return hltStatus; -} -//_______________________________________________________________________ -void TrigMuonEFStandaloneTrackTool::clearRoiCache(){ - - m_MdtRobList.clear(); - m_RpcRobList.clear(); - m_TgcRobList.clear(); - m_CscRobList.clear(); - - m_HasMdtRobList = false; - m_HasRpcRobList = false; - m_HasTgcRobList = false; - m_HasCscRobList = false; -} -//_______________________________________________________________________ -const std::vector<uint32_t>& TrigMuonEFStandaloneTrackTool::getMdtRobList( const IRoiDescriptor* muonRoI){ - if(!m_HasMdtRobList){ - m_HasMdtRobList = true; - if(muonRoI){ - m_regionSelector->DetROBIDListUint(MDT,*muonRoI, m_MdtRobList); - } - else { - m_regionSelector->DetROBIDListUint(MDT, m_MdtRobList); - } - } - return m_MdtRobList; -} -//________________________________________________________________________ -const std::vector<uint32_t>& TrigMuonEFStandaloneTrackTool::getRpcRobList( const IRoiDescriptor* muonRoI){ - if(!m_HasRpcRobList){ - m_HasRpcRobList = true; - if(muonRoI){ - m_regionSelector->DetROBIDListUint(RPC,*muonRoI,m_RpcRobList); - } - else{ - m_regionSelector->DetROBIDListUint(RPC,m_RpcRobList); - } - } - return m_RpcRobList; -} -//________________________________________________________________________ -const std::vector<uint32_t>& TrigMuonEFStandaloneTrackTool::getTgcRobList( const IRoiDescriptor* muonRoI){ - if(!m_HasTgcRobList){ - m_HasTgcRobList = true; - if(muonRoI){ - m_regionSelector->DetROBIDListUint(TGC,*muonRoI,m_TgcRobList); - } - else{ - m_regionSelector->DetROBIDListUint(TGC,m_TgcRobList); - } - } - return m_TgcRobList; -} -//________________________________________________________________________ -const std::vector<uint32_t>& TrigMuonEFStandaloneTrackTool::getCscRobList( const IRoiDescriptor* muonRoI){ - if(!m_HasCscRobList){ - m_HasCscRobList = true; - if(muonRoI){ - m_regionSelector->DetROBIDListUint(CSC,*muonRoI,m_CscRobList); - } - else{ - m_regionSelector->DetROBIDListUint(CSC,m_CscRobList); - } - } - return m_CscRobList; -} -//________________________________________________________________________ -HLT::ErrorCode TrigMuonEFStandaloneTrackTool::findSegments(const IRoiDescriptor* muonRoI, - SegmentCache*& cache, - TrigMuonEFSegmentMonVars& monVars, - std::vector<TrigTimer*>& timers, - unsigned int firstTimerIndex, const EventContext& ctx ) -{ -#if DEBUG_ROI_VS_FULL - m_fileWithHashIds_rpc << "\n#####\n\n"; - m_fileWithHashIds_mdt << "\n#####\n\n"; - m_fileWithHashIds_tgc << "\n#####\n\n"; - m_fileWithHashIds_csc << "\n#####\n\n"; -#endif - - ATH_MSG_DEBUG("in findSegments()"); - - TrigTimer* dataPrepTime = 0; - TrigTimer* segFinderTime = 0; - TrigTimer* dataOutputTime = 0; - unpackTimers( timers, firstTimerIndex, dataPrepTime, segFinderTime, dataOutputTime); - - if (dataPrepTime) dataPrepTime->start(); - const xAOD::L2StandAloneMuonContainer* l2cont=0; - const xAOD::L2StandAloneMuon *l2muon = 0; - std::string l2muonKey = "HLT_xAOD__L2StandAloneMuonContainer_MuonL2SAInfo"; - if(m_useL2Hits){ - if((*p_ActiveStore)->retrieve(l2cont, l2muonKey).isFailure()) { - msg() << MSG::DEBUG << " Cannot retrieve L2 Muon Container " << l2muonKey <<" stop processing here"<< endmsg; - } else msg()<< MSG::DEBUG << " L2 Muon Container retrieved with key " << l2muonKey << endmsg; - } - // reset cached pointers - m_patternCombiColl=0; - m_segments= 0; - m_patternCombiCollInternal=0; - m_segmentsInternal= 0; - m_spectrometerTracks = 0; - m_extrapolatedTracks = 0; - - ///// Vectors of prep data collections - std::vector<const Muon::MdtPrepDataCollection*> mdtCols; - std::vector<const Muon::MdtPrepDataCollection*> mdtCols2; - std::vector<const Muon::CscPrepDataCollection*> cscCols; - std::vector<const Muon::TgcPrepDataCollection*> tgcCols; - std::vector<const Muon::RpcPrepDataCollection*> rpcCols; - - ++m_roi_num_seg; - - // These parameters are stored in the EDM. - // For standard chains they are set from the input Roi. - // However now we have full scan chains where we ask for a dummy TE. - // For these cases we for now set etaRoI=phiRoI=0 - - - if (muonRoI) { - monVars.phiL2CosmicMuon = muonRoI->phi(); - monVars.etaL2CosmicMuon = muonRoI->eta(); - } - - // - // get PrepRawData - // - int nTgcHits = 0; - int nMdtHits = 0; - int nRpcHits = 0; - int nCscHits = 0; - - bool mdtDataFound = true; - bool cscDataFound = true; - - HLT::ErrorCode hltStatus = HLT::OK; - - std::vector<IdentifierHash> rpc_hash_ids; - std::vector<IdentifierHash> rpc_hash_ids_cache; - - if (m_useRpcData) { - if ( muonRoI ) m_regionSelector->DetHashIDList(RPC, *muonRoI, rpc_hash_ids); - else m_regionSelector->DetHashIDList(RPC, rpc_hash_ids); - } - - - std::vector<IdentifierHash> tgc_hash_ids; - std::vector<IdentifierHash> tgc_hash_ids_cache; - if (m_useTgcData){ - if ( muonRoI ) m_regionSelector->DetHashIDList(TGC, *muonRoI, tgc_hash_ids); - else m_regionSelector->DetHashIDList(TGC, tgc_hash_ids); - } - - - std::vector<IdentifierHash> temp_mdt_hash_ids; - std::vector<IdentifierHash> mdt_hash_ids; - std::vector<IdentifierHash> mdt_hash_ids_cache; -if (m_useMdtData>0) { - if ( muonRoI ) { - m_regionSelector->DetHashIDList(MDT, *muonRoI, temp_mdt_hash_ids); - } - else { - m_regionSelector->DetHashIDList(MDT, temp_mdt_hash_ids); - } - - - if (m_useMdtData >1) { - for (std::vector<IdentifierHash>::const_iterator it=temp_mdt_hash_ids.begin(); - it!= temp_mdt_hash_ids.end(); ++it) { - bool select = false; - if (m_useMdtData == 2) { - if ( (*it) < 638 || (*it) >1151 ) //barrel only: BIL to BOG + BIM - select = true; - } else if (m_useMdtData == 3) { - if ( (*it) > 637 && (*it) <1152) //all endcap chambers - select = true; - } - if (select) { - mdt_hash_ids.push_back((*it)); - } - } - if (msgLvl(MSG::VERBOSE)) msg() << MSG::VERBOSE - << "Size of the Mdt hash list " << temp_mdt_hash_ids.size() - << " reset to " << mdt_hash_ids.size() << endmsg; - } else { - - mdt_hash_ids = temp_mdt_hash_ids; - } - } - - std::vector<IdentifierHash> csc_hash_ids; - std::vector<IdentifierHash> csc_hash_ids_cache; - if (m_useCscData) { - if ( muonRoI ) m_regionSelector->DetHashIDList(CSC, *muonRoI, csc_hash_ids); - else m_regionSelector->DetHashIDList(CSC, csc_hash_ids); - } - - if (msgLvl(MSG::DEBUG)) { - msg()<< MSG::DEBUG << "The size of RPC hashId list is " << rpc_hash_ids.size() << endmsg; - msg()<< MSG::DEBUG << "The size of TGC hashId list is " << tgc_hash_ids.size() << endmsg; - msg()<< MSG::DEBUG << "The size of MDT hashId list is " << mdt_hash_ids.size() << endmsg; - msg()<< MSG::DEBUG << "The size of CSC hashId list is " << csc_hash_ids.size() << endmsg; - msg()<< MSG::DEBUG << "The size of mdt:rpc hashId list is " << mdt_hash_ids_cache.size() << " : "<< rpc_hash_ids_cache.size()<< endmsg; - } - else - { - if (testRoiDrivenMode) - { - msg()<< MSG::INFO << "The size of RPC hashId list is " << rpc_hash_ids.size() << endmsg; - msg()<< MSG::INFO << "The size of TGC hashId list is " << tgc_hash_ids.size() << endmsg; - msg()<< MSG::INFO << "The size of MDT hashId list is " << mdt_hash_ids.size() << endmsg; - msg()<< MSG::INFO << "The size of CSC hashId list is " << csc_hash_ids.size() << endmsg; - } - } - - - // perform the data decoding - - std::vector<IdentifierHash> hash_ids_withData; - - if (m_useRpcData && !rpc_hash_ids.empty()) {// RPC decoding - if (m_useRpcSeededDecoding) {// seeded decoding of RPC - if(m_decodeRpcBS) {// bytestream conversion - if (m_rpcRawDataProvider->convert( getRpcRobList(muonRoI) ).isSuccess()) { - ATH_MSG_DEBUG("RPC BS conversion for ROB-based seeded PRD decoding done successfully"); - } else { - ATH_MSG_WARNING("RPC BS conversion for ROB-based seeded PRD decoding failed"); - } - } - if (m_rpcPrepDataProvider->decode( rpc_hash_ids, hash_ids_withData ).isSuccess()) { - ATH_MSG_DEBUG("ROB-based seeded PRD decoding of RPC done successfully"); - } else { - ATH_MSG_WARNING("ROB-based seeded PRD decoding of RPC failed"); - } - - } - else {// full decoding of RPC - if(m_decodeRpcBS) {// bytestream conversion - if (m_rpcRawDataProvider->convert().isSuccess()) { - ATH_MSG_DEBUG("RPC BS conversion for full decoding done successfully"); - } else { - ATH_MSG_WARNING("RPC BS conversion for full decoding failed"); - } - } - std::vector<IdentifierHash> input_hash_ids; - input_hash_ids.reserve(0); - if(m_rpcPrepDataProvider->decode(input_hash_ids, hash_ids_withData).isSuccess()) { - ATH_MSG_DEBUG("PRD-based full decoding of RPC done successfully"); -#if DEBUG_ROI_VS_FULL - sanity_check(input_hash_ids, hash_ids_withData, m_fileWithHashIds_rpc); -#endif - } else { - ATH_MSG_WARNING("PRD-based full decoding of RPC failed"); - } - - } - }// end of RPC decoding - - - if (m_useMdtData && !mdt_hash_ids.empty()) {// MDT decoding - if (m_useMdtSeededDecoding) {// seeded decoding of MDT - if(m_decodeMdtBS) {// bytestream conversion - if (m_mdtRawDataProvider->convert( getMdtRobList(muonRoI) ).isSuccess()) { - ATH_MSG_DEBUG("MDT BS conversion for ROB-based seeded PRD decoding done successfully"); - } else { - ATH_MSG_WARNING("MDT BS conversion for ROB-based seeded PRD decoding failed"); - } - } - if (m_mdtPrepDataProvider->decode( getMdtRobList(muonRoI) ).isSuccess()) { - ATH_MSG_DEBUG("ROB-based seeded decoding of MDT done successfully"); - SG::ReadCondHandle<MuonMDT_CablingMap> mdtCableHandle{m_mdtCablingKey, ctx}; - const MuonMDT_CablingMap* mdtCabling{*mdtCableHandle}; - if(!mdtCabling){ - ATH_MSG_ERROR("nullptr to the read mdt cabling conditions object"); - return HLT::NAV_ERROR; - } - mdt_hash_ids = mdtCabling->getChamberHashVec(m_MdtRobList); - } else { - ATH_MSG_WARNING("ROB-based seeded decoding of MDT failed"); - } - } else {// full decoding of MDT - if(m_decodeMdtBS) {// bytestream conversion - if (m_mdtRawDataProvider->convert().isSuccess()) { - ATH_MSG_DEBUG("MDT BS conversion for full decoding done successfully"); - } else { - ATH_MSG_WARNING("MDT BS conversion for full decoding failed"); - } - } - std::vector<IdentifierHash> input_hash_ids; - input_hash_ids.reserve(0); - if(m_mdtPrepDataProvider->decode(input_hash_ids, hash_ids_withData).isSuccess()) { - ATH_MSG_DEBUG("PRD-based full decoding of MDT done successfully"); -#if DEBUG_ROI_VS_FULL - sanity_check(input_hash_ids, hash_ids_withData, m_fileWithHashIds_mdt); -#endif - } else { - ATH_MSG_WARNING("PRD-based full decoding of MDT failed"); - } - - } - }// end of MDT decoding - - - if (m_useTgcData && !tgc_hash_ids.empty()) {// TGC decoding - if (m_useTgcSeededDecoding) {// seeded decoding of TGC - if (m_useTgcRobDecoding) {// ROB-based seeded decoding of TGC is neither available nor needed - ATH_MSG_DEBUG("ROB-based seeded decoding of TGC requested, which is neither available nor needed. Calling the PRD-based seeded decoding."); - } - if (m_decodeTgcBS) {// bytesream conversion - if (m_tgcRawDataProvider->convert( tgc_hash_ids ).isSuccess()) { - ATH_MSG_DEBUG("TGC BS conversion for hashID-based seeded PRD decoding done successfully"); - } else { - ATH_MSG_WARNING("TGC BS conversion for hashID-based seeded PRD decoding failed"); - } - } - - if (m_tgcPrepDataProvider->decode(tgc_hash_ids, hash_ids_withData).isSuccess()) { - ATH_MSG_DEBUG("PRD-based seeded decoding of TGC done successfully"); -#if DEBUG_ROI_VS_FULL - sanity_check(tgc_hash_ids, hash_ids_withData, m_fileWithHashIds_tgc); -#endif - tgc_hash_ids.clear(); - tgc_hash_ids_cache.clear(); - tgc_hash_ids = hash_ids_withData; - ATH_MSG_DEBUG("TgcHashId vector resized to " << tgc_hash_ids.size()); - } else { - ATH_MSG_WARNING("PRD-based seeded decoding of TGC failed"); - } - - } - else {// full decoding of TGC - if (m_decodeTgcBS) {// bytesream conversion - if (m_tgcRawDataProvider->convert().isSuccess()) { - ATH_MSG_DEBUG("TGC BS conversion for full decoding done successfully"); - } else { - ATH_MSG_WARNING("TGC BS conversion for full decoding failed"); - } - } - std::vector<IdentifierHash> input_hash_ids; - input_hash_ids.reserve(0); - if(m_tgcPrepDataProvider->decode(input_hash_ids, hash_ids_withData).isSuccess()) { - ATH_MSG_DEBUG("PRD-based full decoding of TGC done successfully"); -#if DEBUG_ROI_VS_FULL - sanity_check(input_hash_ids, hash_ids_withData, m_fileWithHashIds_tgc); -#endif - } else { - ATH_MSG_WARNING("PRD-based full decoding of TGC failed"); - } - - } - }// end of TGC decoding - - CscPrepDataContainer* cscPrds = nullptr; - if (m_useCscData && !csc_hash_ids.empty()) {// CSC decoding - SG::WriteHandle<Muon::CscPrepDataContainer> wh_clusters(m_cscClustersKey, ctx); - cscPrds = new CscPrepDataContainer(m_idHelperSvc->cscIdHelper().module_hash_max()); - if (!wh_clusters.isPresent()) { - /// record the container in storeGate - if(wh_clusters.record(std::unique_ptr<Muon::CscPrepDataContainer>(cscPrds)).isFailure()){ - ATH_MSG_ERROR("Could not record CSC cluster container "<<m_cscClustersKey.key()); - return HLT::NAV_ERROR; - } - } else { - const Muon::CscPrepDataContainer* outputCollection_c = nullptr; - if(evtStore()->retrieve(outputCollection_c, m_cscClustersKey.key()).isFailure()){ - ATH_MSG_ERROR("Could not retrieve CSC cluster container "<<m_cscClustersKey.key()); - return HLT::NAV_ERROR; - } - else{ - cscPrds = const_cast<Muon::CscPrepDataContainer*> (outputCollection_c); - } - } - - - if (m_useCscSeededDecoding) {// seeded decoding of CSC - if (m_useCscRobDecoding) {// ROB-based seeded decoding of CSC is not available - ATH_MSG_DEBUG("ROB-based seeded decoding of CSC requested, which is not available. Calling the PRD-based seeded decoding."); - } - if (m_decodeCscBS) {// bytesream conversion - if (m_cscRawDataProvider->convert( csc_hash_ids ).isSuccess()) { - ATH_MSG_DEBUG("CSC BS conversion for ROB-based seeded PRD decoding done successfully"); - } else { - ATH_MSG_WARNING("CSC BS conversion for ROB-based seeded PRD decoding failed"); - } - } - if (m_cscPrepDataProvider->decode(csc_hash_ids, hash_ids_withData).isSuccess()) { - ATH_MSG_DEBUG("PRD-based seeded decoding of CSC done successfully"); -#if DEBUG_ROI_VS_FULL - sanity_check(csc_hash_ids, hash_ids_withData, m_fileWithHashIds_csc); -#endif - csc_hash_ids.clear(); - csc_hash_ids_cache.clear(); - csc_hash_ids = hash_ids_withData; - ATH_MSG_DEBUG("CscHashId vector resized to " << csc_hash_ids.size()); - } else { - ATH_MSG_WARNING("PRD-based seeded decoding of CSC failed"); - } - // get clusters out of PRD - if(csc_hash_ids.size()!=0) { - if (m_cscClusterProvider->getClusters(csc_hash_ids, hash_ids_withData, cscPrds).isSuccess()) { - ATH_MSG_DEBUG("CSC clusters obtained successfully"); - csc_hash_ids.clear(); - csc_hash_ids = hash_ids_withData; - ATH_MSG_DEBUG("CscHashId vector resized to " << csc_hash_ids.size()); - } else { - ATH_MSG_WARNING("Preparing CSC clusters failed"); - } - } else { - ATH_MSG_DEBUG("CscHashId vector is empty - skipping cluster preparation"); - } - - } - else {// full decoding of CSC - if (m_decodeCscBS) {// bytesream conversion - if (m_cscRawDataProvider->convert().isSuccess()) { - ATH_MSG_DEBUG("CSC BS conversion for full decoding done successfully"); - } else { - ATH_MSG_WARNING("CSC BS conversion for full decoding failed"); - } - } - std::vector<IdentifierHash> input_hash_ids; - input_hash_ids.reserve(0); - if(m_cscPrepDataProvider->decode(input_hash_ids, hash_ids_withData).isSuccess()) { - ATH_MSG_DEBUG("PRD-based full decoding of CSC done successfully"); -#if DEBUG_ROI_VS_FULL - sanity_check(input_hash_ids, hash_ids_withData, m_fileWithHashIds_tgc); -#endif - } else { - ATH_MSG_WARNING("PRD-based full decoding of CSC failed"); - } - //get clusters out of PRD - if(m_cscClusterProvider->getClusters(input_hash_ids, hash_ids_withData, cscPrds).isSuccess()) { - ATH_MSG_DEBUG("CSC clusters obtained successfully"); - } else { - ATH_MSG_WARNING("Preparing CSC clusters failed"); - } - - } - }// end of CSC decoding - - // end of data decoding - - // select non-empty PRD collections for segment finding - - // Get RPC container - if (m_useRpcData && !rpc_hash_ids.empty()) { - const RpcPrepDataContainer* rpcPrds = 0; - SG::ReadHandle<Muon::RpcPrepDataContainer> RpcCont(m_rpcKey, ctx); - if( !RpcCont.isValid() ) { - msg() << MSG::ERROR << " Cannot retrieve RPC PRD Container" << endmsg; - return HLT::NAV_ERROR; - } - else{ - rpcPrds=RpcCont.cptr(); - msg()<< MSG::DEBUG << " RPC PRD Container retrieved" << endmsg; - } - // Get RPC collections - const Muon::RpcPrepDataCollection* RPCcoll = nullptr; - for(std::vector<IdentifierHash>::const_iterator idit = rpc_hash_ids.begin(); idit != rpc_hash_ids.end(); ++idit) { - RPCcoll = rpcPrds->indexFindPtr(*idit); - if( RPCcoll == nullptr ) { - if (msgLvl(MSG::VERBOSE)) { - Identifier idColl; - IdContext rpcContext = m_idHelperSvc->rpcIdHelper().module_context(); - int code = m_idHelperSvc->rpcIdHelper().get_id(*idit, idColl, &rpcContext); - ATH_MSG_VERBOSE("get_id code = " << code - << " collection for rpc id hash = " << (int)*idit - << " not found in the cont. ext.id = " << m_idHelperSvc->rpcIdHelper().show_to_string(idColl)); - } - continue; - } - if( RPCcoll->size() == 0) { - if (msgLvl(MSG::VERBOSE)) { - Identifier idColl; - IdContext rpcContext = m_idHelperSvc->rpcIdHelper().module_context(); - int code = m_idHelperSvc->rpcIdHelper().get_id(*idit, idColl, &rpcContext); - ATH_MSG_VERBOSE("get_id code = " << code - << " collection for rpc id hash = " << (int)*idit - << " is empty ext.id = " << m_idHelperSvc->rpcIdHelper().show_to_string(idColl)); - } - continue; - } - - rpc_hash_ids_cache.push_back(*idit); - - nRpcHits+=RPCcoll->size(); // count hits for TrigMuonEFInfo - rpcCols.push_back(RPCcoll); - if (msgLvl(MSG::DEBUG)) - ATH_MSG_DEBUG("Selected Rpc Collection: " - << m_idHelperSvc->rpcIdHelper().show_to_string(RPCcoll->identify()) - << " (hash = " << (int)*idit - << ") with size " << RPCcoll->size()); - else if (testRoiDrivenMode) - ATH_MSG_INFO("Selected Rpc Collection: " - << m_idHelperSvc->rpcIdHelper().show_to_string(RPCcoll->identify()) - << " (hash = " << (int)*idit - << "), with size " << RPCcoll->size()); - - } - if (rpcCols.empty()) { - ATH_MSG_DEBUG("No Rpc data collections selected"); - } - } - - // Get MDT container - if (m_useMdtData && !mdt_hash_ids.empty()) { - - const MdtPrepDataContainer* mdtPrds = 0; - SG::ReadHandle<Muon::MdtPrepDataContainer> MdtCont(m_mdtKey, ctx); - if( !MdtCont.isValid() ) { - ATH_MSG_ERROR(" Cannot retrieve MDT PRD Container"); - return HLT::NAV_ERROR; - } - else{ - mdtPrds=MdtCont.cptr(); - ATH_MSG_DEBUG(" MDT PRD Container retrieved"); - } - - // Get MDT collections - const Muon::MdtPrepDataCollection* MDTcoll = nullptr; - for(std::vector<IdentifierHash>::const_iterator idit = mdt_hash_ids.begin(); - idit != mdt_hash_ids.end(); ++idit) { - MDTcoll = mdtPrds->indexFindPtr(*idit); - if( MDTcoll == nullptr ) { - if (msgLvl(MSG::VERBOSE)) { - Identifier idColl; - IdContext mdtContext = m_idHelperSvc->mdtIdHelper().module_context(); - int code = m_idHelperSvc->mdtIdHelper().get_id(*idit, idColl, &mdtContext); - ATH_MSG_VERBOSE("get_id code = " << code - << " collection for mdt id hash = " << (int)*idit - << " not found in the cont. ext.id = " << m_idHelperSvc->mdtIdHelper().show_to_string(idColl)); - } - continue; - } - if( MDTcoll->size() == 0) { - if (msgLvl(MSG::VERBOSE)) { - Identifier idColl; - IdContext mdtContext = m_idHelperSvc->mdtIdHelper().module_context(); - int code = m_idHelperSvc->mdtIdHelper().get_id(*idit, idColl, &mdtContext); - ATH_MSG_VERBOSE("get_id code = " << code - << " collection for mdt id hash = " << (int)*idit - << " is empty ext.id = " << m_idHelperSvc->mdtIdHelper().show_to_string(idColl)); - } - continue; - } - - if(m_useL2Hits && l2cont){ - Muon::MdtPrepDataCollection *mdtcollection=new Muon::MdtPrepDataCollection(); - addElement( m_mdtcollCache, mdtcollection ); - - Muon::MdtPrepDataCollection::const_iterator cit_begin = MDTcoll->begin(); - Muon::MdtPrepDataCollection::const_iterator cit_end = MDTcoll->end(); - Muon::MdtPrepDataCollection::const_iterator cit = cit_begin; - for( ; cit!=cit_end;++cit ) // first - { - - const Muon::MdtPrepData* mdt = *cit; - int TubeLayers = mdt->detectorElement()->getNLayers(); - int TubeLayer = m_idHelperSvc->mdtIdHelper().tubeLayer(mdt->identify()); - if(TubeLayer > TubeLayers) TubeLayer -= TubeLayers; - const Amg::Vector3D mdtpos = mdt->detectorElement()->center(TubeLayer,m_idHelperSvc->mdtIdHelper().tube(mdt->identify())); - for(uint l2=0; l2<l2cont->size(); l2++){ - l2muon = l2cont->at(l2); - if(l2muon->nMdtHits()==0){ - mdtcollection->push_back(new Muon::MdtPrepData(*mdt)); - } - for(uint hitnum=0; hitnum<l2muon->nMdtHits(); hitnum++){ - if(fabs(mdtpos.eta())<1.0 ? (fabs(l2muon->mdtHitR(hitnum)-mdtpos.perp())<0.1 && fabs(l2muon->mdtHitZ(hitnum)-mdtpos.z())<0.001): (fabs(l2muon->mdtHitR(hitnum)-fabs(mdtpos.perp()))<200 && fabs(l2muon->mdtHitZ(hitnum)-mdtpos.z())<0.001)){ - if(l2muon->mdtHitOfflineId(hitnum)!=0) continue; - - mdtcollection->push_back(new Muon::MdtPrepData(*mdt)); - - } - } - - - } - } - - mdtcollection->setIdentifier(MDTcoll->identify()); - nMdtHits+=mdtcollection->size(); // count hits for TrigMuonEFInfo - mdtCols2.push_back(mdtcollection); - } - else{ - nMdtHits+=MDTcoll->size(); - } - - - mdt_hash_ids_cache.push_back(*idit); - mdtCols.push_back(MDTcoll); - if (msgLvl(MSG::DEBUG)) ATH_MSG_DEBUG("Selected Mdt Collection: " - << m_idHelperSvc->mdtIdHelper().show_to_string(MDTcoll->identify()) - << " with size " << MDTcoll->size()); - else - if (testRoiDrivenMode) ATH_MSG_INFO("Selected Mdt Collection: " - << m_idHelperSvc->mdtIdHelper().show_to_string(MDTcoll->identify()) - << " with size " << MDTcoll->size()); - } - if (mdtCols.empty()) { - ATH_MSG_DEBUG("No Mdt data collections selected"); - mdtDataFound = false; - } - } - - // Get TGC container - if (m_useTgcData && !tgc_hash_ids.empty()) { - - const TgcPrepDataContainer* tgcPrds = 0; - SG::ReadHandle<Muon::TgcPrepDataContainer> TgcCont(m_tgcKey, ctx); - if( !TgcCont.isValid() ) { - ATH_MSG_ERROR(" Cannot retrieve TGC PRD Container"); - return HLT::NAV_ERROR; - } - else{ - tgcPrds=TgcCont.cptr(); - ATH_MSG_DEBUG(" MDT PRD Container retrieved"); - } - - // Get TGC collections - const Muon::TgcPrepDataCollection* TGCcoll; - for(std::vector<IdentifierHash>::const_iterator idit = tgc_hash_ids.begin(); - idit != tgc_hash_ids.end(); ++idit) { - TGCcoll = tgcPrds->indexFindPtr(*idit); - if( TGCcoll == nullptr ) { - if (msgLvl(MSG::VERBOSE)) { - Identifier idColl; - IdContext tgcContext = m_idHelperSvc->tgcIdHelper().module_context(); - int code = m_idHelperSvc->tgcIdHelper().get_id(*idit, idColl, &tgcContext); - ATH_MSG_VERBOSE("get_id code = " << code - << " collection for tgc id hash = " << (int)*idit - << " not found in the cont. ext.id = " << m_idHelperSvc->tgcIdHelper().show_to_string(idColl)); - } - continue; - } - if( TGCcoll->size() == 0) { - if (msgLvl(MSG::VERBOSE)) { - Identifier idColl; - IdContext tgcContext = m_idHelperSvc->tgcIdHelper().module_context(); - int code = m_idHelperSvc->tgcIdHelper().get_id(*idit, idColl, &tgcContext); - ATH_MSG_VERBOSE("get_id code = " << code - << " collection for tgc id hash = " << (int)*idit - << " is empty ext.id = " << m_idHelperSvc->tgcIdHelper().show_to_string(idColl)); - } - continue; - } - - tgc_hash_ids_cache.push_back(*idit); - nTgcHits+=TGCcoll->size(); // count hits for TrigMuonEFInfo - tgcCols.push_back(TGCcoll); - if (msgLvl(MSG::DEBUG)) ATH_MSG_DEBUG("Selected Tgc Collection: " - << m_idHelperSvc->tgcIdHelper().show_to_string(TGCcoll->identify()) - << " with size " << TGCcoll->size()); - else - if (testRoiDrivenMode) ATH_MSG_INFO("Selected Tgc Collection: " - << m_idHelperSvc->tgcIdHelper().show_to_string(TGCcoll->identify()) - << " with size " << TGCcoll->size()); - } - - if(m_useTGCInPriorNextBC){ - const TgcPrepDataContainer* tgcPrdsPriorBC = 0; - - for(std::vector<IdentifierHash>::const_iterator idit = tgc_hash_ids.begin(); - idit != tgc_hash_ids.end(); ++idit) { - TGCcoll = tgcPrdsPriorBC->indexFindPtr(*idit); - if( TGCcoll == nullptr ) { - if (msgLvl(MSG::VERBOSE)) { - Identifier idColl; - IdContext tgcContext = m_idHelperSvc->tgcIdHelper().module_context(); - int code = m_idHelperSvc->tgcIdHelper().get_id(*idit, idColl, &tgcContext); - ATH_MSG_VERBOSE("get_id code = " << code - << " collection for tgc id hash = " << (int)*idit - << " not found in the cont. ext.id = " << m_idHelperSvc->tgcIdHelper().show_to_string(idColl)); - } - continue; - } - if( TGCcoll->size() == 0) { - if (msgLvl(MSG::VERBOSE)) { - Identifier idColl; - IdContext tgcContext = m_idHelperSvc->tgcIdHelper().module_context(); - int code = m_idHelperSvc->tgcIdHelper().get_id(*idit, idColl, &tgcContext); - ATH_MSG_VERBOSE("get_id code = " << code - << " collection for tgc id hash = " << (int)*idit - << " is empty ext.id = " << m_idHelperSvc->tgcIdHelper().show_to_string(idColl)); - } - continue; - } - nTgcHits+=TGCcoll->size(); // count hits for TrigMuonEFInfo - tgcCols.push_back(TGCcoll); - if (msgLvl(MSG::DEBUG)) ATH_MSG_DEBUG("Selected Tgc Collection: " - << m_idHelperSvc->tgcIdHelper().show_to_string(TGCcoll->identify()) - << " with size " << TGCcoll->size()); - } - const TgcPrepDataContainer* tgcPrdsNextBC = 0; - SG::ReadHandle<Muon::TgcPrepDataContainer> TgcCont(m_tgcKeyNextBC, ctx); - if( !TgcCont.isValid() ) { - ATH_MSG_ERROR(" Cannot retrieve TGC PRD Container"); - return HLT::NAV_ERROR; - } - else{ - tgcPrds=TgcCont.cptr(); - ATH_MSG_DEBUG(" MDT PRD Container retrieved"); - } - - for(std::vector<IdentifierHash>::const_iterator idit = tgc_hash_ids.begin(); - idit != tgc_hash_ids.end(); ++idit) { - TGCcoll = tgcPrdsNextBC->indexFindPtr(*idit); - if( TGCcoll == nullptr ) { - if (msgLvl(MSG::VERBOSE)) { - Identifier idColl; - IdContext tgcContext = m_idHelperSvc->tgcIdHelper().module_context(); - int code = m_idHelperSvc->tgcIdHelper().get_id(*idit, idColl, &tgcContext); - ATH_MSG_VERBOSE("get_id code = " << code - << " collection for tgc id hash = " << (int)*idit - << " not found in the cont. ext.id = " << m_idHelperSvc->tgcIdHelper().show_to_string(idColl)); - } - continue; - } - if( TGCcoll->size() == 0) { - if (msgLvl(MSG::VERBOSE)) { - Identifier idColl; - IdContext tgcContext = m_idHelperSvc->tgcIdHelper().module_context(); - int code = m_idHelperSvc->tgcIdHelper().get_id(*idit, idColl, &tgcContext); - ATH_MSG_VERBOSE("get_id code = " << code - << " collection for tgc id hash = " << (int)*idit - << " is empty ext.id = " << m_idHelperSvc->tgcIdHelper().show_to_string(idColl)); - } - continue; - } - nTgcHits+=TGCcoll->size(); // count hits for TrigMuonEFInfo - tgcCols.push_back(TGCcoll); - ATH_MSG_DEBUG("Selected Tgc Collection: " - << m_idHelperSvc->tgcIdHelper().show_to_string(TGCcoll->identify()) - << " with size " << TGCcoll->size()); - } - } - - if (tgcCols.empty()) { - ATH_MSG_DEBUG("No Tgc data collections selected"); - } - } - - - // Get CSC container - if (m_useCscData && !csc_hash_ids.empty()) { - - - // Get CSC collections - const Muon::CscPrepDataCollection* CSCcoll = nullptr; - for(std::vector<IdentifierHash>::const_iterator idit = csc_hash_ids.begin(); - idit != csc_hash_ids.end(); ++idit) { - if(m_ignoreCSC && (*idit==16 || *idit==17)){ - ATH_MSG_DEBUG("Skipping misaligned chamber with hashid "<<*idit); - continue; - } - CSCcoll = cscPrds->indexFindPtr(*idit); - if( CSCcoll == nullptr ) continue; - if( CSCcoll->size() == 0) continue; - - csc_hash_ids_cache.push_back(*idit); - nCscHits+=CSCcoll->size(); // count hits for TrigMuonEFInfo - cscCols.push_back(CSCcoll); - if (msgLvl(MSG::DEBUG)) ATH_MSG_DEBUG("Selected Csc Collection: " - << m_idHelperSvc->cscIdHelper().show_to_string(CSCcoll->identify()) - << " with size " << CSCcoll->size()); - else - if (testRoiDrivenMode) ATH_MSG_INFO("Selected Csc Collection: " - << m_idHelperSvc->cscIdHelper().show_to_string(CSCcoll->identify()) - << " with size " << CSCcoll->size()); - } - if (cscCols.empty()) { - ATH_MSG_DEBUG("No Csc data collections selected"); - cscDataFound = false; - } - } - - - if ( !(cscDataFound || mdtDataFound) ) { - ATH_MSG_DEBUG("No precision data found: stop here to process the RoI"); - if (!muonRoI) return HLT::OK; - return HLT::MISSING_FEATURE; - } - - if (dataPrepTime) dataPrepTime->stop(); - - // check time-out - if (m_doTimeOutChecks && Athena::Timeout::instance(ctx).reached() ) { - ATH_MSG_WARNING("Timeout reached. Aborting sequence."); - return HLT::ErrorCode(HLT::Action::ABORT_EVENT, HLT::Reason::TIMEOUT); - } - -#if DEBUG_ROI_VS_FULL - //rpc - - std::vector<IdentifierHash> rpc_hash_list(rpc_hash_ids_cache); - std::sort(rpc_hash_list.begin(),rpc_hash_list.end()); - - if(rpc_hash_ids_cache.size() > 0) - m_fileWithHashIds_rpc << "selected hash IDs passed to pattern finder: "; - - for (unsigned int i = 0; i<rpc_hash_list.size(); i++) - m_fileWithHashIds_rpc << rpc_hash_list[i] << " "; - - if(rpc_hash_ids_cache.size() > 0) - m_fileWithHashIds_rpc << "\n"; - - //tgc - - - std::vector<IdentifierHash> tgc_hash_list(tgc_hash_ids_cache); - std::sort(tgc_hash_list.begin(),tgc_hash_list.end()); - - if(tgc_hash_ids_cache.size() > 0) - m_fileWithHashIds_tgc << "selected hash IDs passed to pattern finder: "; - - for (unsigned int i = 0; i<tgc_hash_list.size(); i++) - { - m_fileWithHashIds_tgc <<tgc_hash_list[i]<<" "; - } - - if(tgc_hash_ids_cache.size() > 0) - { - m_fileWithHashIds_tgc <<"\n"; - } - - //mdt - - std::vector<IdentifierHash> mdt_hash_list(mdt_hash_ids_cache); - std::sort(mdt_hash_list.begin(),mdt_hash_list.end()); - - if(mdt_hash_ids_cache.size() > 0) - m_fileWithHashIds_mdt << "selected hash IDs passed to pattern finder: "; - - for (unsigned int i = 0; i<mdt_hash_list.size(); i++) - { - m_fileWithHashIds_mdt <<mdt_hash_list[i]<<" "; - } - - if(mdt_hash_ids_cache.size() > 0) - { - m_fileWithHashIds_mdt <<"\n"; - } - - //csc - - std::vector<IdentifierHash> csc_hash_list(csc_hash_ids_cache); - std::sort(csc_hash_list.begin(),csc_hash_list.end()); - - if(csc_hash_ids_cache.size() > 0) - m_fileWithHashIds_csc << "selected hash IDs passed to pattern finder: "; - - for (unsigned int i = 0; i<csc_hash_list.size(); i++) - { - m_fileWithHashIds_csc <<csc_hash_list[i]<<" "; - } - - if(csc_hash_ids_cache.size() > 0) - { - m_fileWithHashIds_csc <<"\n"; - } -#endif - - //Filling Vector of Detector Elements For Comparison of Repeated ROIS - m_hashlist.clear(); - m_hashlist.push_back(rpc_hash_ids_cache); - m_hashlist.push_back(tgc_hash_ids_cache); - m_hashlist.push_back(mdt_hash_ids_cache); - m_hashlist.push_back(csc_hash_ids_cache); - - ++m_totalSegmentCalls; - - //Creating pointers to TE & SC for RepROI Information used for caching - ATH_MSG_DEBUG("finding hashlist of size "<<m_hashlist.size()<<" in segment cache of size: "<<m_SFCacheSCMap.size()); - map<std::vector<std::vector<IdentifierHash> >, SegmentCache*>::iterator itSCmap = m_SFCacheSCMap.end(); - - // Making Object to cache pointers for segfinder: SC holds - // pointers that are all deleted at end of event - cache = 0; - if (m_doCache) itSCmap = m_SFCacheSCMap.find(m_hashlist); - - if (itSCmap!=m_SFCacheSCMap.end()) { - ATH_MSG_DEBUG("Repeated ROI"); - ATH_MSG_DEBUG("retrieved segments from cache (roi_num="<<m_roi_num_seg<<"). hashlist size: "<<m_hashlist.size()<<", cache size: "<<m_SFCacheSCMap.size()); - if (segFinderTime) segFinderTime->start(); - - cache = itSCmap->second; - if(cache->PattColl()) m_patternCombiCollInternal = cache->PattColl(); - if(cache->Segments()) m_segmentsInternal = cache->Segments(); - - - if (segFinderTime) segFinderTime->stop(); - ++m_cachedSegmentCalls; - monVars.wasCached = 1; - } - else { // itSCmap == m_SFCacheSCMap.end() - - if (segFinderTime) segFinderTime->start(); - - ///// Call segment finding tool - // check preconditions to spot conditions which could lead to - // very long processing times. - if (m_doTimeOutGuard) { - if ((m_maxCscHits > 0 && nCscHits > m_maxCscHits) || - (m_maxTgcHits > 0 && nTgcHits > m_maxTgcHits) || - (m_maxRpcHits > 0 && nRpcHits > m_maxRpcHits) || - (m_maxMdtHits > 0 && nMdtHits > m_maxMdtHits)) { - if (segFinderTime) segFinderTime->stop(); - ATH_MSG_WARNING("Timeout guard fired. Aborting sequence. Limits (0 means no limit):" - << "CSC hit limit: " << m_maxCscHits << ", counted hits: " << nCscHits << ". " - << "TGC hit limit: " << m_maxTgcHits << ", counted hits: " << nTgcHits << ". " - << "RPC hit limit: " << m_maxRpcHits << ", counted hits: " << nRpcHits << ". " - << "MDT hit limit: " << m_maxMdtHits << ", counted hits: " << nMdtHits << ". "); - return HLT::ErrorCode(HLT::Action::ABORT_EVENT, HLT::Reason::TIMEOUT); - } - } - - Muon::IMooSegmentCombinationFinder::Output output; - std::unique_ptr<MuonPatternCombinationCollection> pattColl(new MuonPatternCombinationCollection()); - output.patternCombinations=pattColl.get(); - std::unique_ptr<Trk::SegmentCollection> segColl(new Trk::SegmentCollection()); - output.segmentCollection=segColl.get(); - if(m_useL2Hits){ - if(mdtCols2.size()>0){ - m_segmentsFinderTool->findSegments(mdtCols2, cscCols, tgcCols, rpcCols, output, ctx); - if(output.segmentCollection->size()==0){ - ATH_MSG_DEBUG("didn't find mstrk with l2 hits, use all mdt hits in roi"); - m_segmentsFinderTool->findSegments(mdtCols, cscCols, tgcCols, rpcCols, output, ctx); - } - } - else m_segmentsFinderTool->findSegments(mdtCols, cscCols, tgcCols, rpcCols, output, ctx); - } - else m_segmentsFinderTool->findSegments(mdtCols, cscCols, tgcCols, rpcCols, output, ctx); - if (!output.segmentCollection) { - if (segFinderTime) segFinderTime->stop(); - ATH_MSG_WARNING("Segment finder returned an invalid pointer for the segments"); - cleanSegmentCollections(); - return HLT::ErrorCode(HLT::Action::ABORT_CHAIN); - } - if ( output.segmentCollection->empty() ) { - if (segFinderTime) segFinderTime->stop(); - ATH_MSG_DEBUG("Segment finder return nothing: stop here to process the RoI"); - return HLT::MISSING_FEATURE; - } - - //remove overlapping segments - m_segmentOverlapRemovalTool->removeDuplicates(segColl.get()); - - /// SegmentCache object takes pointers to be given to m_patternCombiColl and segments - ATH_MSG_DEBUG("SegmentCache object taking pointers"); - m_patternCombiCollInternal=pattColl.release(); - m_segmentsInternal=segColl.release(); - - for(auto mdtcoll : mdtCols2) if(mdtcoll) delete mdtcoll; - - if (m_doCache) { - ATH_MSG_DEBUG("Setting up caching"); - cache = new SegmentCache(); - cache->AddPatternCollection(m_patternCombiCollInternal); - cache->AddSegments(m_segmentsInternal); - cache->SetNROI(m_roi_num_seg);//Setting roi number to SC obj for caching info - m_SFCacheSCMap[m_hashlist] = cache; - ATH_MSG_DEBUG("added segments to cache (roi_num="<<m_roi_num_seg<<"). hashlist size: "<<m_hashlist.size()<<". cache size: "<<m_SFCacheSCMap.size()); - } else { // not using cache - ATH_MSG_DEBUG("Not using cache. hashlist size: "<<m_hashlist.size()<<". cache size: "<<m_SFCacheSCMap.size()); - cache = 0; - monVars.wasCached = 0; - } - - ATH_MSG_DEBUG("m_segments = "<< m_segmentsInternal); - if(m_segmentsInternal){ - ATH_MSG_DEBUG("Found "<< m_segmentsInternal->size()<<" segments"); - } - - ATH_MSG_DEBUG("Stopping segFinderTime"); - if (segFinderTime) segFinderTime->stop(); - monVars.wasCached = 0; - - }//end else itSCmap == m_SFCacheSCMap.end() - - ATH_MSG_DEBUG("Starting dataOutputTime"); - if (dataOutputTime) dataOutputTime->start(); - if(m_patternCombiCollInternal) { - typedef ConstDataVector<MuonPatternCombinationCollection> constvec_t; - constvec_t* tmpvec = new constvec_t (m_patternCombiCollInternal->begin(), - m_patternCombiCollInternal->end()); - m_patternCombiColl = tmpvec->asDataVector(); - } - if(m_segmentsInternal) { - typedef ConstDataVector<Trk::SegmentCollection> constvec_t; - constvec_t* tmpvec = new constvec_t (m_segmentsInternal->begin(), - m_segmentsInternal->end()); - m_segments = tmpvec->asDataVector(); - } - - - // for deletion at end of event - ATH_MSG_DEBUG("Doing addElement for m_patternCombiColl"); - addElement( m_patternCombisCache, m_patternCombiColl ); - addElement( m_patternCombisCache, m_patternCombiCollInternal ); - ATH_MSG_DEBUG("Doing addElement for m_segments"); - addElement( m_segmentsCache, m_segments ); - addElement( m_segmentsCache, m_segmentsInternal ); - - int nSeg = 0; - if(m_segments){ - std::vector<const Muon::MuonSegment*> muonSegCollection; - for(Trk::SegmentCollection::const_iterator itSeg = m_segments->begin(); itSeg!= m_segments->end(); ++itSeg){ - if(*itSeg) muonSegCollection.push_back(dynamic_cast<const Muon::MuonSegment*>(*itSeg)); - } - nSeg = segmentMonitoring(muonSegCollection, monVars); - } - - monVars.numberOfSegs.push_back(nSeg); - - if (dataOutputTime) dataOutputTime->stop(); - - return hltStatus; -} - - -//________________________________________________________________________ -HLT::ErrorCode -TrigMuonEFStandaloneTrackTool::buildTracks(const Trk::SegmentCollection* segment_collection, - SegmentCache* cache, - TrigMuonEFMSMonVars& monVars, - std::vector<TrigTimer*>& timers, unsigned int firstTimerIndex ) -{ - ATH_MSG_DEBUG("in buildTracks"); - - TrigTimer* dataPrepTime = 0; - TrigTimer* trackFinderTime = 0; - TrigTimer* dataOutputTime = 0; - unpackTimers( timers, firstTimerIndex, dataPrepTime, trackFinderTime, dataOutputTime); - - if(dataPrepTime) dataPrepTime->start(); - - ATH_MSG_DEBUG("resetting cached pointers"); - // reset cached pointers - m_spectrometerTracks = 0; - m_spectrometerTracksInternal = 0; - m_extrapolatedTracks = 0; - - HLT::ErrorCode hltStatus = HLT::OK; - - ++m_roi_num_mstrk; - - if(dataPrepTime) dataPrepTime->stop(); - - ///// Call track finding tool - ++m_totalSpectrometerCalls; - if(trackFinderTime) trackFinderTime->start(); - - if( m_doCache && cache && cache->SpectrometerTrackColl()) { - ATH_MSG_DEBUG("retrieving tracks from cache"); - // retrieve tracks from cache - m_spectrometerTracksInternal=cache->SpectrometerTrackColl(); - ++m_cachedSpectrometerCalls; - monVars.wasCached = 1; - } // no cached track found - else{ - // Call track finding tool - ATH_MSG_DEBUG("no tracks found in cache, calling track finder tool"); - std::vector<const Muon::MuonSegment*> muonSegCollection; - if ( segment_collection and segment_collection->size() ) { - ATH_MSG_VERBOSE("Converting Trk::SegmentCollection into std::vector<const Muon::MuonSegment*>"); - for(Trk::SegmentCollection::const_iterator itSeg = segment_collection->begin(); itSeg!= segment_collection->end(); ++itSeg){ - muonSegCollection.push_back(dynamic_cast<const Muon::MuonSegment*>(*itSeg)); - } - } - if ( muonSegCollection.size() ) { - ATH_MSG_DEBUG("Doing Muon track finding with muon segment collection of size " << muonSegCollection.size()); - m_spectrometerTracksInternal = m_trackBuilderTool->find(muonSegCollection); - if ( not m_spectrometerTracksInternal ) { - ATH_MSG_VERBOSE("No tracks found. Making empty tracks collection."); - m_spectrometerTracksInternal = new TrackCollection; - } - } else { - ATH_MSG_VERBOSE("No segments found. Making empty tracks collection."); - m_spectrometerTracksInternal = new TrackCollection; - } - - if ( m_doCache && cache ) { - cache->SetSpectrometerTrackCollection( m_spectrometerTracksInternal ); - } - monVars.wasCached = 0; - - }//end of track finding - - if(trackFinderTime) trackFinderTime->stop(); - if(dataOutputTime) dataOutputTime->start(); - m_spectrometerTracks = (new ConstDataVector<TrackCollection>(m_spectrometerTracksInternal->begin(), m_spectrometerTracksInternal->end()))->asDataVector(); - // store for deletion at the end of event - addElement( m_spectrometerTracksCache, m_spectrometerTracks ); - addElement( m_spectrometerTracksCache, m_spectrometerTracksInternal ); - - // Dump tracks - if (msgLvl(MSG::DEBUG)) { - ATH_MSG_DEBUG("REGTEST MuonEF Found " << m_spectrometerTracks->size() << " tracks"); - } else if (testRoiDrivenMode) { - ATH_MSG_INFO("REGTEST MuonEF Found " << m_spectrometerTracks->size() << " tracks"); - } - - if(m_spectrometerTracks) monVars.numberOfTracks.push_back(m_spectrometerTracks->size()); - - // create track particle container, need to be careful with ownership - if( m_spectrometerTrackParticles ) delete m_spectrometerTrackParticles; - if( m_spectrometerTrackParticlesAux ) delete m_spectrometerTrackParticlesAux; - m_spectrometerTrackParticles = new xAOD::TrackParticleContainer(); - m_spectrometerTrackParticlesAux = new xAOD::TrackParticleAuxContainer(); - m_spectrometerTrackParticles->setStore( m_spectrometerTrackParticlesAux ); - - unsigned int nTrack=0; - if(m_spectrometerTracks){ - for (TrackCollection::const_iterator itTrk = m_spectrometerTracks->begin(); itTrk!= m_spectrometerTracks->end(); ++itTrk) { - - - const Trk::Track* trk = *itTrk; - // create track particle - this is needed because later on we use the track particle container (m_spectrometerTrackParticles) - // for the extrapolation of the muons - const ElementLink<TrackCollection> trackLink(*m_spectrometerTracks, nTrack); - m_TrackToTrackParticleConvTool->createParticle( trackLink, m_spectrometerTrackParticles, 0, xAOD::muon); - - - ATH_MSG_DEBUG("REGTEST MuonEF - track " << nTrack - << " has Author " << trk->info().dumpInfo()); - ++nTrack; - const Trk::Perigee* perigee = trk->perigeeParameters (); - - - const Amg::Vector3D mom = perigee->momentum(); - double z0 = perigee->parameters()[Trk::z0] ; - double d0 = perigee->parameters()[Trk::d0] ; - double phi = perigee->parameters()[Trk::phi0] ; - double theta = perigee->parameters()[Trk::theta] ; - // double charge = perigee->charge(); - double pt = mom.perp(); - double chi2 = -999.; - double chi2prob = -999.; - int ndof = -999; - if( trk->fitQuality() ) { - chi2 = trk->fitQuality()->chiSquared() ; - ndof = trk->fitQuality()->numberDoF() ; - if ((chi2/((double)ndof)) < 100.) - chi2prob = Genfun::CumulativeChiSquare(ndof)(chi2); - else - chi2prob = 0.; - } - double eta = -log(tan(theta*0.5)); - - unsigned short int nRpcEtaHits = 0; - unsigned short int nRpcPhiHits = 0; - unsigned short int nTgcEtaHits = 0; - unsigned short int nTgcPhiHits = 0; - unsigned short int nCscEtaHits = 0; - unsigned short int nCscPhiHits = 0; - unsigned short int nMdtHits = 0; - - - // update track summary - const Trk::TrackSummary* summary = NULL; - Trk::Track& nonConstTrack = const_cast<Trk::Track&>(*trk); - m_trackSummaryTool->updateTrack(nonConstTrack); - summary = (nonConstTrack.trackSummary()); - if(summary==0) { - ATH_MSG_DEBUG("trackSummary not found for this track, cannot get number of subdetector hits."); - } - else { - nRpcEtaHits = summary->get(Trk::numberOfRpcEtaHits); - nRpcPhiHits = summary->get(Trk::numberOfRpcPhiHits); - nTgcEtaHits = summary->get(Trk::numberOfTgcEtaHits); - nTgcPhiHits = summary->get(Trk::numberOfTgcPhiHits); - nCscEtaHits = summary->get(Trk::numberOfCscEtaHits); - nCscPhiHits = summary->get(Trk::numberOfCscPhiHits); - nMdtHits = summary->get(Trk::numberOfMdtHits); - } - - if (msgLvl(MSG::DEBUG)) - ATH_MSG_DEBUG(" REGTEST MuonEF - parameters are: pt " << pt - << " MeV - eta " << eta - << " phi " << phi << " z0/d0 " << z0 << " " << d0); - else - if (testRoiDrivenMode) msg() << MSG::INFO << " REGTEST MuonEF - parameters are: pt " << pt - << " MeV - eta " << eta - << " phi " << phi << " z0/d0 " << z0 << " " << d0 << endmsg; - - monVars.chi2.push_back(chi2/ndof); - monVars.chi2Prob.push_back(chi2prob); - monVars.pt.push_back(fabs(pt*(1./GeV))); - monVars.phi.push_back(phi); - monVars.eta.push_back(eta); - monVars.d0.push_back(d0); - monVars.z0.push_back(z0); - - if( summary!=0 ){ - if (nMdtHits > 0){ - monVars.nMdt.push_back(nMdtHits); - } - if(nRpcEtaHits > 0){ - monVars.nRpcEta.push_back(nRpcEtaHits); - } - if(nRpcPhiHits > 0){ - monVars.nRpcPhi.push_back(nRpcPhiHits); - } - if(nCscEtaHits > 0){ - monVars.nCscEta.push_back(nCscEtaHits); - } - if(nCscPhiHits > 0){ - monVars.nCscPhi.push_back(nCscPhiHits); - } - if(nTgcEtaHits > 0){ - monVars.nTgcEta.push_back(nTgcEtaHits); - } - if(nTgcPhiHits > 0){ - monVars.nTgcPhi.push_back(nTgcPhiHits); - } - } else { - ATH_MSG_DEBUG("trackSummary not found for this track, cannot get number of subdetector hits."); - } - - if(trk->measurementsOnTrack()){ - monVars.nHit.push_back(trk->measurementsOnTrack()->size()); - } else { - ATH_MSG_DEBUG("measurementsOnTrack not found for this track, cannot get size."); - } - }//loop on MS tracks - }// valid TrackCollection - else ATH_MSG_DEBUG("m_spectrometerTracks = "<<m_spectrometerTracks); - if(dataOutputTime) dataOutputTime->stop(); - - return hltStatus; -} - - -//________________________________________________________________________ -HLT::ErrorCode -TrigMuonEFStandaloneTrackTool::extrapolate(const xAOD::TrackParticleContainer* spectrometerTrackParticles, - MuonCandidateCollection& candidateCollection, - TrackCollection& extrapolatedTracks, - SegmentCache* cache, - TrigMuonEFSAMonVars& monVars, - std::vector<TrigTimer*>& timers, unsigned int firstTimerIndex ) -{ - ATH_MSG_DEBUG("in extrapolate"); - - - // reset cached pointers - m_extrapolatedTracks = 0; - - TrigTimer* dataPrepTime = 0; - TrigTimer* trackFinderTime = 0; - TrigTimer* dataOutputTime = 0; - unpackTimers(timers, firstTimerIndex, dataPrepTime, trackFinderTime, dataOutputTime); - - if(dataPrepTime) dataPrepTime->start(); - ++m_totalExtrapolatedCalls; - if(dataPrepTime) dataPrepTime->stop(); - - if (trackFinderTime) trackFinderTime->start(); - - bool needToCacheExtrapTrks=false; - if( m_doCache && cache && cache->ExtrapolatedTrackColl()) { - // caching will not work currently - // ATH_MSG_ERROR("Caching not currently working with new EDM?"); - // retrieve tracks from cache - m_extrapolatedTracks = cache->ExtrapolatedTrackColl(); - // ATH_MSG_DEBUG("Caching active, n(trks) = " << m_extrapolatedTracks->size()); - ++m_cachedExtrapolatedCalls; - monVars.wasCached = 1; - } // no cached track found - else{ - ///// Call extrapolator tool - ATH_MSG_DEBUG("Call MuonCandidateTool"); - m_muonCandidateTool->create( *spectrometerTrackParticles, candidateCollection, extrapolatedTracks ); - needToCacheExtrapTrks=true; - monVars.wasCached = 0; - }//end of else - - if (trackFinderTime) trackFinderTime->stop(); - if (dataOutputTime) dataOutputTime->start(); - - // Dump tracks - ATH_MSG_DEBUG("REGTEST MuonEF Found " << candidateCollection.size() << " tracks."); - - unsigned int nTrack=0; - for(auto trk : extrapolatedTracks) { - - ATH_MSG_DEBUG("REGTEST MuonEF - extrapolated track has Author " << trk->info().dumpInfo()); - - ++nTrack; - - const Trk::Perigee* perigee = trk->perigeeParameters (); - double z0 = perigee->parameters()[Trk::z0] ; - double d0 = perigee->parameters()[Trk::d0] ; - double phi = perigee->parameters()[Trk::phi0] ; - double theta = perigee->parameters()[Trk::theta] ; - // double charge = perigee->charge(); - - - const Amg::Vector3D mom = perigee->momentum(); - double pt = mom.perp(); - double chi2 = -999.; - double chi2prob = -999; - int ndof = -999; - - if( trk->fitQuality() ){ - chi2 = trk->fitQuality()->chiSquared() ; - ndof = trk->fitQuality()->numberDoF() ; - if ((chi2/((double)ndof)) < 100.) - chi2prob = Genfun::CumulativeChiSquare(ndof)(chi2); - else - chi2prob = 0.; - } - double eta = -log(tan(theta*0.5)); - - unsigned short int nRpcEtaHits = 0; - unsigned short int nRpcPhiHits = 0; - unsigned short int nTgcEtaHits = 0; - unsigned short int nTgcPhiHits = 0; - unsigned short int nCscEtaHits = 0; - unsigned short int nCscPhiHits = 0; - unsigned short int nMdtHits = 0; - - // update track summary - const Trk::TrackSummary* summary = NULL; - m_trackSummaryTool->updateTrack(*trk); - summary = (trk->trackSummary()); - if(summary==0) { - ATH_MSG_DEBUG("trackSummary not found for this track, cannot get number of subdetector hits."); - } - else { - nRpcEtaHits = summary->get(Trk::numberOfRpcEtaHits); - nRpcPhiHits = summary->get(Trk::numberOfRpcPhiHits); - nTgcEtaHits = summary->get(Trk::numberOfTgcEtaHits); - nTgcPhiHits = summary->get(Trk::numberOfTgcPhiHits); - nCscEtaHits = summary->get(Trk::numberOfCscEtaHits); - nCscPhiHits = summary->get(Trk::numberOfCscPhiHits); - nMdtHits = summary->get(Trk::numberOfMdtHits); - if ((trk->trackSummary()->get(Trk::numberOfMdtHits) ) > 0){ - monVars.nMdt.push_back(nMdtHits); - } - if(nRpcEtaHits > 0){ - monVars.nRpcEta.push_back(nRpcEtaHits); - } - if(nRpcPhiHits > 0){ - monVars.nRpcPhi.push_back(nRpcPhiHits); - } - if(nCscEtaHits > 0){ - monVars.nCscEta.push_back(nCscEtaHits); - } - if(nCscPhiHits > 0){ - monVars.nCscPhi.push_back(nCscPhiHits); - } - if(nTgcEtaHits > 0){ - monVars.nTgcEta.push_back(nTgcEtaHits); - } - if(nTgcPhiHits > 0){ - monVars.nTgcPhi.push_back(nTgcPhiHits); - } - } - - if(trk->measurementsOnTrack()){ - monVars.nHit.push_back(trk->measurementsOnTrack()->size()); - } else { - ATH_MSG_DEBUG("measurementsOnTrack not found for this track, cannot get size."); - } - - ATH_MSG_DEBUG(" REGTEST MuonEF - parameters are: pt " << pt - << " MeV - eta " << eta - << " phi " << phi << " z0/d0 " << z0 << " " << d0); - - monVars.chi2.push_back(chi2/ndof); - monVars.chi2Prob.push_back(chi2prob); - monVars.pt.push_back(fabs(pt*(1./GeV))); - monVars.phi.push_back(phi); - monVars.eta.push_back(eta); - monVars.d0.push_back(d0); - monVars.z0.push_back(z0); - - ///////////////////////////////////////////// create xAOD muon for this track - - // create MuonCandidate - do deep copy of the extrapolated track because MuonCandidate takes ownership of the pointer - /* - ATH_MSG_DEBUG("Create MuonCandidate"); - MuonCombined::MuonCandidate muonCand(**itMSTrk, new Trk::Track(*trk)); - - // Use muon creator tool - ATH_MSG_DEBUG("Call MuonCreatorTool->create"); - xAOD::Muon* muon = m_muonCreatorTool->create( muonCand, *muonContainer, extrapolatedTrackParticles, 0); - ATH_MSG_DEBUG("Created xAOD::Muon with pt, eta, phi, m = " << muon->pt() << ", " << muon->eta() << ", " << muon->phi() << ", " << muon->m() << ", muon conainter size = " << muonContainer->size() << ", TrackParticleCont size = " << extrapolatedTrackParticles->size() << " TrackCollection size = " << m_extrapolatedTracks->size()); - xAOD::TrackParticle* trackparticle = extrapolatedTrackParticles->back(); - ElementLink< TrackCollection > linkToTrkTrack( *m_extrapolatedTracks, nTrack-1); - trackparticle->setTrackLink( linkToTrkTrack ); - ATH_MSG_DEBUG("Last xAOD::TrackParticle pt, eta, phi, m = " << trackparticle->pt() << ", " << trackparticle->eta() << ", " << trackparticle->phi() << ", " << trackparticle->m()); - ATH_MSG_DEBUG(" EleLink to Trk::Track isValid = " << trackparticle->trackLink().isValid()); - if(trackparticle->trackLink().isValid()) ATH_MSG_DEBUG(" pT, eta from Trk::Track = " << trackparticle->track()->perigeeParameters()->pT() << ", " << trackparticle->track()->perigeeParameters()->eta()); - - ATH_MSG_DEBUG("Finished this track, muon candidate extrapolatedTrack() = " << muonCand.extrapolatedTrack()); - */ - } - - if ( m_doCache && cache && needToCacheExtrapTrks) { - if(m_extrapolatedTracks) cache->SetExtrapolatedTrackCollection( m_extrapolatedTracks ); - } - - // store for deletion at end of event - if(m_extrapolatedTracks) addElement( m_extrapolatedTracksCache, m_extrapolatedTracks ); - - monVars.numberOfTracks.push_back(nTrack); - - if(dataOutputTime) dataOutputTime->stop(); - - return HLT::OK; -} - - -//________________________________________________________________________ -void TrigMuonEFStandaloneTrackTool::cleanSegmentCollections() -{ - ATH_MSG_DEBUG("cleanSegmentCollections"); - - // should not be called passing collections already attached to the TriggerElement - - /// Before deleting the collections, we check whether the objects within them are stored in the association map. - /// If they are then we remove them from the map (see savannah #71203) - - if (m_patternCombiColl) { - if ( m_patternCombiColl->size() > 0 ) { - const IMuonPatternSegmentAssociationTool::AssociationMap& assMap = m_assocTool->map(); - IMuonPatternSegmentAssociationTool::AssociationMap* nonConstMap = const_cast<IMuonPatternSegmentAssociationTool::AssociationMap*>(&assMap); - bool printedHeader = false; - // check for each patterncombi if it is still in the association map - MuonPatternCombinationCollection::const_iterator itP = m_patternCombiColl->begin(), itP_end =m_patternCombiColl->end(); - for ( ; itP != itP_end; ++itP ) { - const MuonPatternCombination* pat = *itP; - // check if anything is still pointing to this pattern - IMuonPatternSegmentAssociationTool::AssociationMap::const_iterator itA = assMap.begin(), itA_end = assMap.end(); - for ( ; itA != itA_end; ++itA ) { - if ( itA->second == pat ) { - // bug hunting printout - if ( !printedHeader ) { - ATH_MSG_INFO(__FUNCTION__ << " Event where by-hand clean-up needed:"); - printedHeader = true; - } - ATH_MSG_INFO(" About to delete patternCombi @ " << pat << " so first remove it from associationMap"); - - // hacky FIX for bug #71203 (clean fix would use assocTool->remove( itA->first ), but that does not exist yet) - if( nonConstMap ) nonConstMap->erase( itA->first ); - } - } - } - if ( printedHeader ) msg() << endmsg; // prints out run,event,etc. - } - - delete m_patternCombiColl; - m_patternCombiColl=0; - } - if (m_segments) - delete m_segments; - m_segments=0; -} - -//________________________________________________________________________ -void TrigMuonEFStandaloneTrackTool::recordPatterns() -{ - // store the MuonPatternCombinationCollection in StoreGate for debug purposes - MuonPatternCombinationCollection* patternCombColl = 0; - std::string patternCombCollLocation = "TrigMuonEFPatterns"; - if( evtStore()->contains<MuonPatternCombinationCollection>(patternCombCollLocation) ){ - if (evtStore()->retrieve(patternCombColl,patternCombCollLocation).isFailure()){ - msg() << MSG::WARNING << "Could not retrieve MuonPatternCombinationCollection at " - << patternCombCollLocation << endmsg; - } - } - else{ - ATH_MSG_DEBUG("Recording new pattern combination collection with key " - << patternCombCollLocation); - - patternCombColl = new MuonPatternCombinationCollection(); - if(evtStore()->record(patternCombColl,patternCombCollLocation,true).isFailure()){ - msg() << MSG::WARNING << "Could not record MuonPatternCombinationCollection at " - << patternCombCollLocation << endmsg; - delete patternCombColl; - patternCombColl = 0; - } - } - if (patternCombColl && m_patternCombiColl) { - for (MuonPatternCombinationCollection::const_iterator itPatt = m_patternCombiColl->begin(); itPatt!= m_patternCombiColl->end(); ++itPatt) { - const MuonPatternCombination* patt = *itPatt; - patternCombColl->push_back( new Muon::MuonPatternCombination(*patt) ); - } - } - -} - -//________________________________________________________________________ -void TrigMuonEFStandaloneTrackTool::recordSpectrometerTracks() -{ - // store the TrackCollection in StoreGate for debug purposes - TrackCollection* trackCollection = 0; - std::string trackCollectionLocation = "TrigMuonEFTBTracks"; - if ( evtStore()->contains<TrackCollection>(trackCollectionLocation) ){ - if (evtStore()->retrieve(trackCollection,trackCollectionLocation).isFailure()){ - msg() << MSG::WARNING << "Could not retrieve TrackCollection at " << trackCollectionLocation - << endmsg; - } - } - else { - ATH_MSG_DEBUG("Recording new collection with key " << trackCollectionLocation); - trackCollection = new TrackCollection(); - if(evtStore()->record(trackCollection,trackCollectionLocation,true).isFailure()){ - ATH_MSG_WARNING("Could not record TrackCollection at " << trackCollectionLocation); - delete trackCollection; - trackCollection=0; - } - } - if (trackCollection && m_spectrometerTracks) { // make sure TrackCollection is valid (could be 0 if SG record / retrieve failed) - for (TrackCollection::const_iterator itTrk = m_spectrometerTracks->begin(); itTrk!= m_spectrometerTracks->end(); ++itTrk) { - const Trk::Track* trk = *itTrk; - trackCollection->push_back( new Trk::Track(*trk) ); - } - - }//valid trackCollection - -} - -//________________________________________________________________________ -void TrigMuonEFStandaloneTrackTool::setSegmentTimers(HLT::Algo* fexAlgo, - std::vector<TrigTimer*>& timers) -{ - ATH_MSG_INFO("Setting TMEF Segment Timers"); - timers.push_back( fexAlgo->addTimer("TMEF_segDataPrepTime") ); - timers.push_back( fexAlgo->addTimer("TMEF_segFinderTime") ); - timers.push_back( fexAlgo->addTimer("TMEF_segDataOutputTime") ); -} - -//________________________________________________________________________ -void TrigMuonEFStandaloneTrackTool::setSpectrometerTimers(HLT::Algo* fexAlgo, - std::vector<TrigTimer*>& timers) -{ - ATH_MSG_INFO("Setting TMEF Spectrometer Timers"); - setSegmentTimers(fexAlgo, timers); - timers.push_back( fexAlgo->addTimer("TMEF_msTrackDataPrepTime") ); - timers.push_back( fexAlgo->addTimer("TMEF_msTrackFinderTime") ); - timers.push_back( fexAlgo->addTimer("TMEF_msTrackDataOutputTime") ); -} - -//________________________________________________________________________ -void TrigMuonEFStandaloneTrackTool::setExtrapolatedTimers(HLT::Algo* fexAlgo, - std::vector<TrigTimer*>& timers) -{ - ATH_MSG_INFO("Setting TMEF SA Timers"); - setSpectrometerTimers(fexAlgo, timers); - timers.push_back( fexAlgo->addTimer("TMEF_saTrackDataPrepTime") ); - timers.push_back( fexAlgo->addTimer("TMEF_saTrackFinderTime") ); - timers.push_back( fexAlgo->addTimer("TMEF_saTrackDataOutputTime") ); -} - -//________________________________________________________________________ -void TrigMuonEFStandaloneTrackTool::declareSegmentMonitoringVariables(HLT::Algo* fexAlgo, - TrigMuonEFMonVars& allMonVars) -{ - ATH_MSG_DEBUG("declaring monitoring variables"); - TrigMuonEFSegmentMonVars& monVars = allMonVars.segs; - - // Segment monitoring variables - fexAlgo->declareMonitoredVariable ("EF_segs_wasCached", monVars.wasCached); - fexAlgo->declareMonitoredStdContainer ("EF_segs_nstations", monVars.numberOfStations, IMonitoredAlgo::AutoClear); - fexAlgo->declareMonitoredStdContainer ("EF_segs_nsegcomb", monVars.numberOfSegComb, IMonitoredAlgo::AutoClear); - fexAlgo->declareMonitoredStdContainer ("EF_segs_nsegs", monVars.numberOfSegs, IMonitoredAlgo::AutoClear); - fexAlgo->declareMonitoredStdContainer ("EF_segs_phi", monVars.phi, IMonitoredAlgo::AutoClear); - fexAlgo->declareMonitoredStdContainer ("EF_segs_eta", monVars.eta, IMonitoredAlgo::AutoClear); - fexAlgo->declareMonitoredStdContainer ("EF_segs_chi2pndof", monVars.chi2pNdof, IMonitoredAlgo::AutoClear); - - fexAlgo->declareMonitoredStdContainer ("EF_segs_nMdt", monVars.nMdt, IMonitoredAlgo::AutoClear); - fexAlgo->declareMonitoredStdContainer ("EF_segs_nCsc", monVars.nCsc, IMonitoredAlgo::AutoClear); - fexAlgo->declareMonitoredStdContainer ("EF_segs_nRpc", monVars.nRpc, IMonitoredAlgo::AutoClear); - fexAlgo->declareMonitoredStdContainer ("EF_segs_nTgc", monVars.nTgc, IMonitoredAlgo::AutoClear); - - fexAlgo->declareMonitoredStdContainer ("EF_segs_mdt_radius", monVars.mdtRadius, IMonitoredAlgo::AutoClear); - fexAlgo->declareMonitoredStdContainer ("EF_segs_mdt_tdc", monVars.mdtTDC, IMonitoredAlgo::AutoClear); - fexAlgo->declareMonitoredStdContainer ("EF_segs_mdt_adc", monVars.mdtADC, IMonitoredAlgo::AutoClear); - fexAlgo->declareMonitoredStdContainer ("EF_segs_mdt_z", monVars.mdtZ, IMonitoredAlgo::AutoClear); - fexAlgo->declareMonitoredStdContainer ("EF_segs_mdt_perp", monVars.mdtPerp, IMonitoredAlgo::AutoClear); - fexAlgo->declareMonitoredStdContainer ("EF_segs_mdt_eta", monVars.mdtEta, IMonitoredAlgo::AutoClear); - - fexAlgo->declareMonitoredVariable ("l2_cosmic_phi", monVars.phiL2CosmicMuon); - fexAlgo->declareMonitoredVariable ("l2_cosmic_eta", monVars.etaL2CosmicMuon); - - fexAlgo->declareMonitoredVariable ("ef_phi", monVars.efPhi); - fexAlgo->declareMonitoredVariable ("ef_eta", monVars.efEta); - -} - -//________________________________________________________________________ -void TrigMuonEFStandaloneTrackTool::declareSpectrometerMonitoringVariables(HLT::Algo* fexAlgo, - TrigMuonEFMonVars& allMonVars) -{ - // segment monitoring variables - declareSegmentMonitoringVariables(fexAlgo, allMonVars); - - // MS track monitoring Variables - TrigMuonEFMSMonVars& monVars = allMonVars.MS; - fexAlgo->declareMonitoredVariable ("EF_mstrks_wasCached", monVars.wasCached); - fexAlgo->declareMonitoredStdContainer ("EF_mstrks_n", monVars.numberOfTracks, IMonitoredAlgo::AutoClear); - fexAlgo->declareMonitoredStdContainer ("EF_mstrks_chi2", monVars.chi2, IMonitoredAlgo::AutoClear); - fexAlgo->declareMonitoredStdContainer ("EF_mstrks_chi2Prob", monVars.chi2Prob, IMonitoredAlgo::AutoClear); - fexAlgo->declareMonitoredStdContainer ("EF_mstrks_pt", monVars.pt, IMonitoredAlgo::AutoClear); - fexAlgo->declareMonitoredStdContainer ("EF_mstrks_phi", monVars.phi, IMonitoredAlgo::AutoClear); - fexAlgo->declareMonitoredStdContainer ("EF_mstrks_eta", monVars.eta, IMonitoredAlgo::AutoClear); - fexAlgo->declareMonitoredStdContainer ("EF_mstrks_d0", monVars.d0, IMonitoredAlgo::AutoClear); - fexAlgo->declareMonitoredStdContainer ("EF_mstrks_z0", monVars.z0, IMonitoredAlgo::AutoClear); - fexAlgo->declareMonitoredStdContainer ("EF_mstrks_nMdt", monVars.nMdt, IMonitoredAlgo::AutoClear); - fexAlgo->declareMonitoredStdContainer ("EF_mstrks_nRpcEta", monVars.nRpcEta, IMonitoredAlgo::AutoClear); - fexAlgo->declareMonitoredStdContainer ("EF_mstrks_nRpcPhi", monVars.nRpcPhi, IMonitoredAlgo::AutoClear); - fexAlgo->declareMonitoredStdContainer ("EF_mstrks_nCscEta", monVars.nCscEta, IMonitoredAlgo::AutoClear); - fexAlgo->declareMonitoredStdContainer ("EF_mstrks_nCscPhi", monVars.nCscPhi, IMonitoredAlgo::AutoClear); - fexAlgo->declareMonitoredStdContainer ("EF_mstrks_nTgcEta", monVars.nTgcEta, IMonitoredAlgo::AutoClear); - fexAlgo->declareMonitoredStdContainer ("EF_mstrks_nTgcPhi", monVars.nTgcPhi, IMonitoredAlgo::AutoClear); - fexAlgo->declareMonitoredStdContainer ("EF_mstrks_nHit", monVars.nHit, IMonitoredAlgo::AutoClear); -} - -//__________________________________________________________________________________ -void TrigMuonEFStandaloneTrackTool::declareExtrapolatedMonitoringVariables(HLT::Algo* fexAlgo, - TrigMuonEFMonVars& allMonVars) -{ - // declare segment + spectrometer track monitoring variables - declareSpectrometerMonitoringVariables(fexAlgo, allMonVars); - - // Extrapolated track monitoring Variables - TrigMuonEFSAMonVars& monVars = allMonVars.SA; - fexAlgo->declareMonitoredVariable ("EF_satrks_wasCached", monVars.wasCached); - fexAlgo->declareMonitoredStdContainer ("EF_satrks_n", monVars.numberOfTracks, IMonitoredAlgo::AutoClear); - fexAlgo->declareMonitoredStdContainer ("EF_satrks_chi2", monVars.chi2, IMonitoredAlgo::AutoClear); - fexAlgo->declareMonitoredStdContainer ("EF_satrks_pt", monVars.pt, IMonitoredAlgo::AutoClear); - fexAlgo->declareMonitoredStdContainer ("EF_satrks_phi", monVars.phi, IMonitoredAlgo::AutoClear); - fexAlgo->declareMonitoredStdContainer ("EF_satrks_eta", monVars.eta, IMonitoredAlgo::AutoClear); - fexAlgo->declareMonitoredStdContainer ("EF_satrks_d0", monVars.d0, IMonitoredAlgo::AutoClear); - fexAlgo->declareMonitoredStdContainer ("EF_satrks_z0", monVars.z0, IMonitoredAlgo::AutoClear); - fexAlgo->declareMonitoredStdContainer ("EF_satrks_nMdt", monVars.nMdt, IMonitoredAlgo::AutoClear); - fexAlgo->declareMonitoredStdContainer ("EF_satrks_nRpcEta", monVars.nRpcEta, IMonitoredAlgo::AutoClear); - fexAlgo->declareMonitoredStdContainer ("EF_satrks_nRpcPhi", monVars.nRpcPhi, IMonitoredAlgo::AutoClear); - fexAlgo->declareMonitoredStdContainer ("EF_satrks_nCscEta", monVars.nCscEta, IMonitoredAlgo::AutoClear); - fexAlgo->declareMonitoredStdContainer ("EF_satrks_nCscPhi", monVars.nCscPhi, IMonitoredAlgo::AutoClear); - fexAlgo->declareMonitoredStdContainer ("EF_satrks_nTgcEta", monVars.nTgcEta, IMonitoredAlgo::AutoClear); - fexAlgo->declareMonitoredStdContainer ("EF_satrks_nTgcPhi", monVars.nTgcPhi, IMonitoredAlgo::AutoClear); - fexAlgo->declareMonitoredStdContainer ("EF_satrks_nHit", monVars.nHit, IMonitoredAlgo::AutoClear); -} - -//________________________________________________________________________ -void TrigMuonEFStandaloneTrackTool::handle(const Incident &inc) -{ - if (inc.type() == "EndEvent"){ - ATH_MSG_DEBUG( "=====> End of Event" ); - - // delete the SegmentCache objects we created with new - for (map<std::vector<std::vector<IdentifierHash> >, SegmentCache*>::iterator itSCmap=m_SFCacheSCMap.begin(); itSCmap!=m_SFCacheSCMap.end(); ++itSCmap) { - delete itSCmap->second; - } - - ATH_MSG_DEBUG("clearing SFCacheSCmap"); - m_SFCacheSCMap.clear(); - m_hashlist.clear(); - m_assocTool->reset(); - - m_roi_num_seg=0; - m_roi_num_mstrk = 0; - m_roi_num_satrk = 0; - - clearCacheVector( m_spectrometerTracksCache ); - clearCacheVector( m_extrapolatedTracksCache ); - clearCacheVector( m_patternCombisCache ); - clearCacheVector( m_segmentsCache ); - clearCacheVector(m_mdtcollCache); - - } -} - -//________________________________________________________________________ -HLT::ErrorCode -TrigMuonEFStandaloneTrackTool::getSegments(const IRoiDescriptor* muonRoI, - TrigMuonEFMonVars& monVars, - std::vector<TrigTimer*>& timers, const EventContext& ctx ) -{ - SegmentCache* cache = 0; - return findSegments(muonRoI, cache, monVars.segs, timers, 0, ctx ); -} - -//________________________________________________________________________ -HLT::ErrorCode -TrigMuonEFStandaloneTrackTool::getSpectrometerTracks(const IRoiDescriptor* muonRoI, - TrigMuonEFMonVars& monVars, - std::vector<TrigTimer*>& timers, const EventContext& ctx ) -{ - SegmentCache* cache = 0; - return getSpectrometerTracks( muonRoI, cache, monVars, timers, ctx ); -} - -//________________________________________________________________________ -HLT::ErrorCode -TrigMuonEFStandaloneTrackTool::getExtrapolatedTracks(const IRoiDescriptor* muonRoI, - MuonCandidateCollection& candidateCollection, - TrackCollection& extrapolatedTracks, - TrigMuonEFMonVars& monVars, - std::vector<TrigTimer*>& timers, const EventContext& ctx) -{ - SegmentCache* cache = 0; - ATH_MSG_DEBUG("In getExtrapolatedTracks without cache"); - return getExtrapolatedTracks( muonRoI, candidateCollection, extrapolatedTracks, cache, monVars, timers, ctx ); -} - -//________________________________________________________________________ -const MuonPatternCombinationCollection* -TrigMuonEFStandaloneTrackTool::patternCombis() -{ - return m_patternCombiColl; -} - -//________________________________________________________________________ -const Trk::SegmentCollection* -TrigMuonEFStandaloneTrackTool::segments() -{ - return m_segments; -} - -//________________________________________________________________________ -const TrackCollection* -TrigMuonEFStandaloneTrackTool::spectrometerTracks() -{ - return m_spectrometerTracks; -} - -//________________________________________________________________________ -const TrackCollection* -TrigMuonEFStandaloneTrackTool::extrapolatedTracks() -{ - return m_extrapolatedTracks; -} - -//________________________________________________________________________ -const MuonPatternCombinationCollection* -TrigMuonEFStandaloneTrackTool::patternCombisToAttach() -{ - removeElement(m_patternCombisCache, m_patternCombiColl); - return m_patternCombiColl; -} - -//________________________________________________________________________ -const Trk::SegmentCollection* -TrigMuonEFStandaloneTrackTool::segmentsToAttach() -{ - removeElement(m_segmentsCache, m_segments ); - return m_segments; -} - -//________________________________________________________________________ -const TrackCollection* -TrigMuonEFStandaloneTrackTool::spectrometerTracksToAttach() -{ - removeElement(m_spectrometerTracksCache, m_spectrometerTracks); - return m_spectrometerTracks; -} - -//________________________________________________________________________ -const TrackCollection* -TrigMuonEFStandaloneTrackTool::extrapolatedTracksToAttach() -{ - removeElement(m_extrapolatedTracksCache, m_extrapolatedTracks); - return m_extrapolatedTracks; -} - -//________________________________________________________________________ -const xAOD::TrackParticleContainer* -TrigMuonEFStandaloneTrackTool::trackParticleContainerToAttach() -{ - const xAOD::TrackParticleContainer* coll = m_spectrometerTrackParticles; - m_spectrometerTrackParticles=0; - return coll; -} - -//________________________________________________________________________ -const xAOD::TrackParticleAuxContainer* -TrigMuonEFStandaloneTrackTool::trackParticleAuxContainerToAttach() -{ - const xAOD::TrackParticleAuxContainer* coll = m_spectrometerTrackParticlesAux; - m_spectrometerTrackParticlesAux=0; - return coll; -} - - -//________________________________________________________________________ -std::vector<std::vector<IdentifierHash> > TrigMuonEFStandaloneTrackTool::getHashList(const IRoiDescriptor* muonRoI){ - - std::vector<std::vector<IdentifierHash> > CurrentHashlist; - CurrentHashlist.clear(); - - - - std::vector<IdentifierHash> rpc_hash_ids; - std::vector<IdentifierHash> rpc_hash_ids_cache; - - if (m_useRpcData) { - if ( muonRoI ) m_regionSelector->DetHashIDList(RPC, *muonRoI, rpc_hash_ids); - else m_regionSelector->DetHashIDList(RPC, rpc_hash_ids); - } - - - std::vector<IdentifierHash> tgc_hash_ids; - std::vector<IdentifierHash> tgc_hash_ids_cache; - if (m_useTgcData){ - if ( muonRoI ) m_regionSelector->DetHashIDList(TGC, *muonRoI, tgc_hash_ids); - else m_regionSelector->DetHashIDList(TGC, tgc_hash_ids); - } - - - std::vector<IdentifierHash> temp_mdt_hash_ids; - std::vector<IdentifierHash> mdt_hash_ids; - std::vector<IdentifierHash> mdt_hash_ids_cache; - if (m_useMdtData>0) { - if ( muonRoI ) { - m_regionSelector->DetHashIDList(MDT, *muonRoI, temp_mdt_hash_ids); - } - else { - m_regionSelector->DetHashIDList(MDT, temp_mdt_hash_ids); - } - - if (m_useMdtData >1) { - for (std::vector<IdentifierHash>::const_iterator it=temp_mdt_hash_ids.begin(); - it!= temp_mdt_hash_ids.end(); ++it) { - bool select = false; - if (m_useMdtData == 2) { - if ( (*it) < 638 || (*it) >1151 ) //barrel only: BIL to BOG + BIM - select = true; - } else if (m_useMdtData == 3) { - if ( (*it) > 637 && (*it) <1152) //all endcap chambers - select = true; - } - if (select) { - mdt_hash_ids.push_back((*it)); - } - } - } else { - mdt_hash_ids = temp_mdt_hash_ids; - } - } - - std::vector<IdentifierHash> csc_hash_ids; - std::vector<IdentifierHash> csc_hash_ids_cache; - if (m_useCscData) { - if ( muonRoI ) m_regionSelector->DetHashIDList(CSC, *muonRoI, csc_hash_ids); - else m_regionSelector->DetHashIDList(CSC, csc_hash_ids); - } - - - - - - CurrentHashlist.push_back(rpc_hash_ids); - CurrentHashlist.push_back(tgc_hash_ids); - CurrentHashlist.push_back(mdt_hash_ids); - CurrentHashlist.push_back(csc_hash_ids); - - return CurrentHashlist; - -} - -//________________________________________________________________________ -int TrigMuonEFStandaloneTrackTool::segmentMonitoring(const std::vector< const MuonSegment*>& segmentVector, TrigMuonEFSegmentMonVars& monVars) -{ - for(std::vector< const MuonSegment* >::const_iterator segment=segmentVector.begin(); - segment!=segmentVector.end(); ++segment){ - monVars.phi.push_back( (*segment)->globalDirection().phi() ); - //float eta = -std::log(tan(0.5*(*segment)->globalDirection().theta())); - float eta = (*segment)->globalDirection().eta(); - monVars.eta.push_back( eta ); - // Not optimal if nSeg>1 ... - monVars.efPhi=(*segment)->globalDirection().phi(); - monVars.efEta=eta; - /// get chi2 / ndof - if((*segment)->fitQuality()) { - const double chi2 = (*segment)->fitQuality()->chiSquared(); - const double dof = (*segment)->fitQuality()->doubleNumberDoF(); - monVars.chi2pNdof.push_back( ((float) (chi2 / dof)) ); - }//if FitQuality() valid - int nMdt = 0; int nCsc = 0; int nRpc = 0; int nTgc = 0; - for(unsigned int irio=0; irio < (*segment)->numberOfContainedROTs(); ++irio) { - - Trk::RIO_OnTrack* rio = const_cast<Trk::RIO_OnTrack*> ((*segment)->rioOnTrack(irio)); - if(!rio) continue; - Identifier rioId = rio->identify(); - if(m_idHelperSvc->isMdt(rioId)) { - nMdt++; - const MdtDriftCircleOnTrack* mdt = dynamic_cast<const MdtDriftCircleOnTrack*>(rio); - if(mdt!=0){ - const MdtPrepData* mdtPrd = mdt->prepRawData(); - monVars.mdtRadius.push_back(mdt->driftRadius()); - monVars.mdtZ.push_back(mdt->globalPosition().z()); - monVars.mdtPerp.push_back(mdt->globalPosition().perp()); - monVars.mdtEta.push_back(mdt->globalPosition().eta()); - monVars.mdtTDC.push_back(mdtPrd->tdc()); - monVars.mdtADC.push_back(mdtPrd->adc()); - - } else ATH_MSG_ERROR("cannot cast to MdtDriftCircle "); - } else if (m_idHelperSvc->isCsc(rioId)) { - nCsc++; - } else if (m_idHelperSvc->isRpc(rioId)) { - nRpc++; - } else if (m_idHelperSvc->isTgc(rioId)){ - nTgc++; - } - } // end loop on rio - monVars.nMdt.push_back(nMdt); - monVars.nCsc.push_back(nCsc); - monVars.nRpc.push_back(nRpc); - monVars.nTgc.push_back(nTgc); - } // end loop on segs - - return segmentVector.size(); -} - - - diff --git a/Trigger/TrigAlgorithms/TrigMuonEF/src/TrigMuonEFStandaloneTrackTool.h b/Trigger/TrigAlgorithms/TrigMuonEF/src/TrigMuonEFStandaloneTrackTool.h deleted file mode 100644 index a29917964c531fd37e6b05d1476d1d42fd100546..0000000000000000000000000000000000000000 --- a/Trigger/TrigAlgorithms/TrigMuonEF/src/TrigMuonEFStandaloneTrackTool.h +++ /dev/null @@ -1,393 +0,0 @@ -/* - Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration -*/ - -#ifndef TRIGMUONEF_TRIGMUONEFSTANDALONETRACKTOOL_H -#define TRIGMUONEF_TRIGMUONEFSTANDALONETRACKTOOL_H - - -#include "SegmentCache.h" - -#include "AthenaBaseComps/AthAlgTool.h" -#include "GaudiKernel/ServiceHandle.h" -#include "GaudiKernel/ToolHandle.h" - -#include "MuonIdHelpers/IMuonIdHelperSvc.h" -#include "TrkTrack/TrackCollection.h" -#include "TrigMuonToolInterfaces/ITrigMuonStandaloneTrackTool.h" -#include "TrigMuonToolInterfaces/TrigMuonEFMonVars.h" -#include "MuonRecToolInterfaces/IMuonTrackFinder.h" -#include "MuonRecToolInterfaces/IMuonCombiTrackMaker.h" -#include "GaudiKernel/IIncidentListener.h" -#include "MuonPattern/MuonPatternCombinationCollection.h" -#include "TrkSegment/SegmentCollection.h" -#include "TrigInterfaces/IMonitoredAlgo.h" -#include "MuonCnvToolInterfaces/IMuonRawDataProviderTool.h" -#include "MuonPrepRawData/MdtPrepDataCollection.h" -#include "MuonPrepRawData/CscPrepDataCollection.h" -#include "MuonPrepRawData/RpcPrepDataCollection.h" -#include "MuonPrepRawData/TgcPrepDataCollection.h" -#include "MuonPrepRawData/RpcPrepDataContainer.h" -#include "IRegionSelector/RegSelEnums.h" -#include "TrigSteeringEvent/TrigRoiDescriptor.h" -#include "xAODMuon/MuonContainer.h" -#include "xAODTracking/TrackParticleContainer.h" -#include "xAODTracking/TrackParticleAuxContainer.h" -#include "MuonCombinedEvent/MuonCandidateCollection.h" -#include <fstream> -#include "MuonCablingData/MuonMDT_CablingMap.h" - -#include "MuonSegmentMakerToolInterfaces/IMuonSegmentOverlapRemovalTool.h" -#include "CxxUtils/checker_macros.h" - -ATLAS_NO_CHECK_FILE_THREAD_SAFETY; // legacy trigger code - -#include <vector> - -#define DEBUG_ROI_VS_FULL false - -/** - @file TrigMuonEFStandaloneTrackTool.h - @class TrigMuonEFStandaloneTrackTool - - @brief Tool to find segments for TrigMuonEF - - @author Robert Harrington <roberth@cern.ch> - @author Martin Woudstra <martin.woudstra@cern.ch> - @date 10/21/2011 - */ - -namespace HLT { - class TriggerElement; - class Algo; -} - -namespace Muon { - class IMooSegmentCombinationFinder; - class IMuonPatternSegmentAssociationTool; - class IMuonRdoToPrepDataTool; - class IMuonTrackFinder; - class MboyMooSegmentCombinationFinder; - -} -namespace MuonCombined { - class IMuonCandidateTool; -} - -namespace Rec { - class IMuidBackTracker; -} - -namespace Trk { - class ITrackSummaryTool; - class ITrackParticleCreatorTool; -} - -class ICscClusterBuilder; -class TrigMuonEFInfoContainer; -class TrigTimer; -class ActiveStoreSvc; -class IRegSelSvc; - -class IRoiDescriptor; - -class TrigMuonEFStandaloneTrackTool : public AthAlgTool, - public virtual ITrigMuonStandaloneTrackTool, - public virtual IIncidentListener -{ - - public: - - TrigMuonEFStandaloneTrackTool(const std::string& type, - const std::string& name, - const IInterface* parent); - - virtual ~TrigMuonEFStandaloneTrackTool(); - - virtual StatusCode initialize(); - virtual StatusCode finalize(); - - /** Run segment finding only */ - virtual HLT::ErrorCode getSegments(const IRoiDescriptor* muonRoI, - TrigMuonEFMonVars& monvars, - std::vector<TrigTimer*>& timers, const EventContext& ctx); - - /** Run segment finding and spectrometer track building */ - virtual HLT::ErrorCode getSpectrometerTracks(const IRoiDescriptor* muonRoI, - TrigMuonEFMonVars& monVars, - std::vector<TrigTimer*>& timers, const EventContext& ctx); - - /** Run segment finding, spectrometer track building and extrapolation */ - virtual HLT::ErrorCode getExtrapolatedTracks(const IRoiDescriptor* muonRoI, - MuonCandidateCollection& candidateCollection, - TrackCollection& extrapolatedTracks, - TrigMuonEFMonVars& monvars, - std::vector<TrigTimer*>& timers, const EventContext& ctx); - - /** get list of hashIDs used in roi (used for internal caching in TrigMuSuperEF) **/ - virtual std::vector<std::vector<IdentifierHash> > getHashList(const IRoiDescriptor* muonRoI); - - /** return last created MuonPatternCombinationCollection. Caller is responsible for deletion of object. - Call this function if you want to attach the object to the TriggerElement */ - virtual const MuonPatternCombinationCollection* patternCombisToAttach(); - - /** return last created Trk::SegmentCollection. Caller is responsible for deletion of object. - Call this function if you want to attach the object to the TriggerElement */ - virtual const Trk::SegmentCollection* segmentsToAttach(); - - /** return last created TrackCollection with muon spectrometer tracks. Caller is responsible for deletion of object. - Call this function if you want to attach the object to the TriggerElement */ - virtual const TrackCollection* spectrometerTracksToAttach(); - - /** return last created TrackCollection with extrapolated tracks. Caller is responsible for deletion of object. - Call this function if you want to attach the object to the TriggerElement */ - virtual const TrackCollection* extrapolatedTracksToAttach(); - - /** return last created TrackParticleContainer with extrapolated tracks. Caller is responsible for deletion of object. - Call this function if you want to attach the object to the TriggerElement */ - virtual const xAOD::TrackParticleContainer* trackParticleContainerToAttach(); - virtual const xAOD::TrackParticleAuxContainer* trackParticleAuxContainerToAttach(); - - /** return last created MuonPatternCombinationCollection. Object will be deleted by tool at the end of the event. - NB: You can not attach this object to the TriggerElement */ - virtual const MuonPatternCombinationCollection* patternCombis(); - - /** return last created Trk::SegmentCollection. Object will be deleted by tool at the end of the event. - NB: You can not attach this object to the TriggerElement */ - virtual const Trk::SegmentCollection* segments(); - - /** return last created TrackCollection with muon spectrometer tracks. Object will be deleted by tool at the end of the event. - NB: You can not attach this object to the TriggerElement */ - virtual const TrackCollection* spectrometerTracks(); - - /** return last created TrackCollection with extrapolated tracks. Object will be deleted by tool at the end of the event. - NB: You can not attach this object to the TriggerElement */ - virtual const TrackCollection* extrapolatedTracks(); - - int segmentMonitoring(const std::vector<const Muon::MuonSegment*>& segmentVector, - TrigMuonEFSegmentMonVars& monVars); - - virtual void handle(const Incident &inc); - - virtual void recordPatterns(); - virtual void recordSpectrometerTracks(); - - virtual void declareSegmentMonitoringVariables (HLT::Algo* fexAlgo, TrigMuonEFMonVars& monVars); - virtual void declareSpectrometerMonitoringVariables(HLT::Algo* fexAlgo, TrigMuonEFMonVars& monVars); - virtual void declareExtrapolatedMonitoringVariables(HLT::Algo* fexAlgo, TrigMuonEFMonVars& monVars); - - virtual void setSegmentTimers (HLT::Algo* fexAlgo, std::vector<TrigTimer*>& timers); - virtual void setSpectrometerTimers(HLT::Algo* fexAlgo, std::vector<TrigTimer*>& timers); - virtual void setExtrapolatedTimers(HLT::Algo* fexAlgo, std::vector<TrigTimer*>& timers); - - virtual const std::vector<uint32_t>& getMdtRobList( const IRoiDescriptor* muonRoI); - virtual const std::vector<uint32_t>& getRpcRobList( const IRoiDescriptor* muonRoI); - virtual const std::vector<uint32_t>& getTgcRobList( const IRoiDescriptor* muonRoI); - virtual const std::vector<uint32_t>& getCscRobList( const IRoiDescriptor* muonRoI); - virtual void clearRoiCache(); - - virtual bool useMdtSeededDecoding() {return m_useMdtSeededDecoding;} - virtual bool useRpcSeededDecoding() {return m_useRpcSeededDecoding;} - virtual bool useTgcSeededDecoding() {return m_useTgcSeededDecoding;} - virtual bool useCscSeededDecoding() {return m_useCscSeededDecoding;} - - private: - - void cleanSegmentCollections(); - - - /** Run segment finding only */ - HLT::ErrorCode getSegments(const IRoiDescriptor* muonRoI, - SegmentCache*& cache, - TrigMuonEFMonVars& monvars, - std::vector<TrigTimer*>& timers); - - /** Run segment finding and spectrometer track building */ - HLT::ErrorCode getSpectrometerTracks(const IRoiDescriptor* muonRoI, - SegmentCache*& cache, - TrigMuonEFMonVars& monVars, - std::vector<TrigTimer*>& timers, const EventContext& ctx); - - /** Run segment finding, spectrometer track building and extrapolation */ - HLT::ErrorCode getExtrapolatedTracks(const IRoiDescriptor* muonRoI, - MuonCandidateCollection& candidateCollection, - TrackCollection& extrapolatedTracks, - SegmentCache*& cache, - TrigMuonEFMonVars& monvars, - std::vector<TrigTimer*>& timers, const EventContext& ctx); - - - /** Find segments in input ROI */ - HLT::ErrorCode findSegments(const IRoiDescriptor* muonRoI, - SegmentCache*& cache, - TrigMuonEFSegmentMonVars& monvars, - std::vector<TrigTimer*>& timers, unsigned int firstTimerIndex, const EventContext& ctx ); - - /** Build tracks out of input segments */ - HLT::ErrorCode buildTracks(const Trk::SegmentCollection* segment_collection, - SegmentCache* cache, - TrigMuonEFMSMonVars& monVars, - std::vector<TrigTimer*>& timers, unsigned int firstTimerIndex ); - - /** Extrapolate input track to IP */ - HLT::ErrorCode extrapolate(const xAOD::TrackParticleContainer* spectrometerTrackParticles, - MuonCandidateCollection& candidateCollection, - TrackCollection&extrapolatedTracks, - SegmentCache* cache, - TrigMuonEFSAMonVars& monvars, - std::vector<TrigTimer*>& timers, unsigned int firstTimerIndex ); - -#if DEBUG_ROI_VS_FULL - void sanity_check(const std::vector<IdentifierHash>& input_hash_ids, const std::vector<IdentifierHash>& hash_ids_withData, std::ostream& outfile); -#endif - - void unpackTimers( std::vector<TrigTimer*>& timers, unsigned int firstIndex, - TrigTimer*& dataPrepTime, TrigTimer*& algTime, TrigTimer*& dataOutputTime ); - - // Region Selector - ServiceHandle<IRegSelSvc> m_regionSelector; //<! pointer to RegionSelectionSvc - - // Pointers to sub-algoritms - ToolHandle<Muon::IMooSegmentCombinationFinder> m_segmentsFinderTool; //<! pointer to the segment finder - ToolHandle<Muon::IMuonPatternSegmentAssociationTool> m_assocTool; //<! pointer to association tool - ToolHandle<Muon::IMuonTrackFinder> m_trackBuilderTool; //<! pointer to the track finder in the 3rd chain implementation - - ToolHandle<Trk::ITrackSummaryTool > m_trackSummaryTool; - - // handles to the RoI driven data access - ToolHandle<Muon::IMuonRawDataProviderTool> m_mdtRawDataProvider; - ToolHandle<Muon::IMuonRawDataProviderTool> m_rpcRawDataProvider; - ToolHandle<Muon::IMuonRawDataProviderTool> m_tgcRawDataProvider; - ToolHandle<Muon::IMuonRawDataProviderTool> m_cscRawDataProvider; - ToolHandle<Muon::IMuonRdoToPrepDataTool> m_cscPrepDataProvider; - ToolHandle<Muon::IMuonRdoToPrepDataTool> m_mdtPrepDataProvider; - ToolHandle<Muon::IMuonRdoToPrepDataTool> m_rpcPrepDataProvider; - ToolHandle<Muon::IMuonRdoToPrepDataTool> m_tgcPrepDataProvider; - ToolHandle<ICscClusterBuilder> m_cscClusterProvider; - - // Cache the ActiveStoreSvc ptr - ActiveStoreSvc* p_ActiveStore; - - ServiceHandle<Muon::IMuonIdHelperSvc> m_idHelperSvc {this, "MuonIdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"}; - - //Cache Rob Lists - std::vector<uint32_t> m_MdtRobList; - std::vector<uint32_t> m_RpcRobList; - std::vector<uint32_t> m_TgcRobList; - std::vector<uint32_t> m_CscRobList; - - bool m_HasMdtRobList; - bool m_HasRpcRobList; - bool m_HasTgcRobList; - bool m_HasCscRobList; - - // true before first event done (used to initialize in first event) - bool m_firstEvent; - - // job-opt properties - - // if true do caching - bool m_doCache; - - // Flag to decide whether or not to run BS decoding - Gaudi::Property< bool > m_decodeMdtBS { this, "DecodeMdtBS", true, "Flag to decide whether or not to run BS->RDO decoding for MTDs" }; - Gaudi::Property< bool > m_decodeRpcBS { this, "DecodeRpcBS", true, "Flag to decide whether or not to run BS->RDO decoding for RPCs" }; - Gaudi::Property< bool > m_decodeTgcBS { this, "DecodeTgcBS", true, "Flag to decide whether or not to run BS->RDO decoding for TGCs" }; - Gaudi::Property< bool > m_decodeCscBS { this, "DecodeCscBS", true, "Flag to decide whether or not to run BS->RDO decoding for CSCs" }; - - bool m_useCscData; - bool m_useRpcData; - bool m_useTgcData; - bool m_useTGCInPriorNextBC; - unsigned int m_useMdtData; - - - // decoding options - bool m_useMdtSeededDecoding; - bool m_useRpcSeededDecoding; - bool m_useTgcSeededDecoding; - bool m_useCscSeededDecoding; - bool m_useTgcRobDecoding; - bool m_useCscRobDecoding; - - // timeout awareness - bool m_doTimeOutChecks; - - // timeout guard (checks on number of hits) - bool m_doTimeOutGuard; - - //Use L2 hits - bool m_useL2Hits; - - // conditions to prevent events with excessive processing times - int m_maxCscHits; - int m_maxMdtHits; - int m_maxRpcHits; - int m_maxTgcHits; - - - //Map to cache - std::map<std::vector<std::vector<IdentifierHash> >, SegmentCache*> m_SFCacheSCMap; - - // list of IdentifierHash for PRD in RoI - std::vector<std::vector<IdentifierHash> > m_hashlist; - - // features written to TriggerElement - // TrigMuonEFInfoContainer* m_myMuonEFInfoCont; - const MuonPatternCombinationCollection* m_patternCombiColl; - const Trk::SegmentCollection* m_segments; - const TrackCollection* m_spectrometerTracks; - const MuonPatternCombinationCollection* m_patternCombiCollInternal; - const Trk::SegmentCollection* m_segmentsInternal; - const TrackCollection* m_spectrometerTracksInternal; - TrackCollection* m_extrapolatedTracks; - xAOD::TrackParticleContainer* m_spectrometerTrackParticles; - xAOD::TrackParticleAuxContainer* m_spectrometerTrackParticlesAux; - unsigned short int m_roi_num_seg; - unsigned short int m_roi_num_mstrk; - unsigned short int m_roi_num_satrk; - - unsigned int m_totalSegmentCalls; - unsigned int m_cachedSegmentCalls; - unsigned int m_totalSpectrometerCalls; - unsigned int m_cachedSpectrometerCalls; - unsigned int m_totalExtrapolatedCalls; - unsigned int m_cachedExtrapolatedCalls; - - // tracks stored in cache for deletion at end of event - std::vector<const TrackCollection*> m_spectrometerTracksCache; - std::vector<TrackCollection*> m_extrapolatedTracksCache; - std::vector<const MuonPatternCombinationCollection*> m_patternCombisCache; - std::vector<const Trk::SegmentCollection*> m_segmentsCache; - std::vector<Muon::MdtPrepDataCollection*> m_mdtcollCache; - - - /// tool to create muon candidates - ToolHandle<MuonCombined::IMuonCandidateTool> m_muonCandidateTool; - - /// tool to create track particles from Trk::Tracks - ToolHandle<Trk::ITrackParticleCreatorTool> m_TrackToTrackParticleConvTool; - -#if DEBUG_ROI_VS_FULL - std::ofstream m_fileWithHashIds_rpc; - std::ofstream m_fileWithHashIds_tgc; - std::ofstream m_fileWithHashIds_mdt; - std::ofstream m_fileWithHashIds_csc; -#endif - - SG::ReadHandleKey <Muon::RpcPrepDataContainer> m_rpcKey; - SG::ReadHandleKey <Muon::TgcPrepDataContainer> m_tgcKey; - SG::ReadHandleKey <Muon::TgcPrepDataContainer> m_tgcKeyNextBC; - SG::ReadHandleKey <Muon::MdtPrepDataContainer> m_mdtKey; - - //write handle for CSC cluster container - SG::WriteHandleKey <Muon::CscPrepDataContainer> m_cscClustersKey{this, "CscClusterContainer", "CSC_Clusters", "Output CSC Cluster container"}; - - bool m_ignoreCSC; - ToolHandle<Muon::IMuonSegmentOverlapRemovalTool> m_segmentOverlapRemovalTool; - SG::ReadCondHandleKey<MuonMDT_CablingMap> m_mdtCablingKey{this, "MdtCablingKey", "MuonMDT_CablingMap", "Key of MuonMDT_CablingMap"}; - -}; - -#endif // TRIGMUONEF_TRIGMUONEFSTANDALONETRACKTOOL_H - diff --git a/Trigger/TrigAlgorithms/TrigMuonEF/src/TrigMuonEFTrackIsolation.cxx b/Trigger/TrigAlgorithms/TrigMuonEF/src/TrigMuonEFTrackIsolation.cxx deleted file mode 100644 index e0d55a4d761cd3c982be583f1224af1afbbc6f98..0000000000000000000000000000000000000000 --- a/Trigger/TrigAlgorithms/TrigMuonEF/src/TrigMuonEFTrackIsolation.cxx +++ /dev/null @@ -1,320 +0,0 @@ -/* - Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration -*/ - -#include "TrigConfHLTData/HLTTriggerElement.h" -#include "TrigTimeAlgs/TrigTimerSvc.h" - -#include "TrigMuonToolInterfaces/IMuonEFTrackIsolationTool.h" -#include "TrigMuonEFTrackIsolation.h" - -#include "FourMomUtils/P4Helpers.h" - -// edm includes -#include "Particle/TrackParticleContainer.h" -#include "xAODMuon/MuonContainer.h" - -#include <iostream> - -using Rec::TrackParticleContainer; -using Rec::TrackParticle; - -using std::endl; - -// ------------------------------------------------------------------------------------------------------ -/** - * Standard constructor for the track isolation algo. - */ -TrigMuonEFTrackIsolation::TrigMuonEFTrackIsolation(const std::string& name, ISvcLocator* pSvcLocator) : - FexAlgo(name, pSvcLocator), - m_requireCombined(false), - m_useVarIso(false), - m_muonContName("MuonEFInfo"), - m_debug(false), - m_coneSizes(), - m_efIsoTool("TrigMuonEFTrackIsolationTool/TrigMuonEFTrackIsolationTool", this), - - m_trkptiso_cone2(), - m_trkptiso_cone3(), - m_trkdz(), - m_trkdr(), - m_muon_selfpt(), - m_muon_removedpt(), - m_muon_combinedpt(), - m_n_trks(), - - m_doMyTiming(false), - m_dataPrepTime(0), - m_calcTime(0), - m_dataOutputTime(0){ - - - declareProperty("IsolationTool", m_efIsoTool); - declareProperty("MuonContName", m_muonContName); - declareProperty("IdTrackParticles", m_idTrackParticlesName); - declareProperty("doMyTiming", m_doMyTiming); - declareProperty("requireCombinedMuon", m_requireCombined); - declareProperty("useVarIso", m_useVarIso); - - - ///////// Monitoring Variables - declareProperty("histoPathBase",m_histo_path_base="/EXPERT/"); - declareMonitoredStdContainer("trks_trkptiso_cone2", m_trkptiso_cone2, IMonitoredAlgo::AutoClear); - declareMonitoredStdContainer("trks_trkptiso_cone3", m_trkptiso_cone3, IMonitoredAlgo::AutoClear); - declareMonitoredStdContainer("trks_trkdz", m_trkdz, IMonitoredAlgo::AutoClear); - declareMonitoredStdContainer("trks_trkdr", m_trkdr, IMonitoredAlgo::AutoClear); - declareMonitoredStdContainer("n_trks", m_n_trks, IMonitoredAlgo::AutoClear); - declareMonitoredStdContainer("muon_selfpt", m_muon_selfpt, IMonitoredAlgo::AutoClear); - declareMonitoredStdContainer("muon_removedpt", m_muon_removedpt, IMonitoredAlgo::AutoClear); - declareMonitoredStdContainer("muon_combinedpt", m_muon_combinedpt, IMonitoredAlgo::AutoClear); - - // cone sizes are hard-coded to ensure the correct result goes to the edm - m_coneSizes.push_back(0.2); - m_coneSizes.push_back(0.3); -} - -// ------------------------------------------------------------------------------------------------------ -/** - * Detructor - */ -TrigMuonEFTrackIsolation::~TrigMuonEFTrackIsolation() { - -} - -// ------------------------------------------------------------------------------------------------------ -/** - * Initialize the algo - */ -HLT::ErrorCode TrigMuonEFTrackIsolation::hltInitialize() { - - m_debug = msgLvl() <= MSG::DEBUG; - - if(m_debug) { - msg() << MSG::DEBUG << "Initializing TrigMuonEFTrackIsolation[" << name() << "]" << endmsg; - msg() << MSG::DEBUG - << "package version = " << PACKAGE_VERSION << endmsg; - msg() << MSG::DEBUG - << "Properties set as follows: " << endmsg; - msg() << MSG::DEBUG - << "Track isolation tool: " << m_efIsoTool << endmsg; - msg() << MSG::DEBUG - << "IdTrackParticles: " << m_idTrackParticlesName << endmsg; - msg() << MSG::DEBUG - << "requireCombinedMuon: " << m_requireCombined << endmsg; - msg() << MSG::DEBUG - << "doMyTiming " << m_doMyTiming << endmsg; - msg() << MSG::DEBUG - << "useVarIso " << m_useVarIso << endmsg; - - }//debug - - StatusCode sc = m_efIsoTool.retrieve(); - if(sc.isSuccess()) { - msg() << MSG::INFO << "Retrieved " << m_efIsoTool << endmsg; - } else { - msg() << MSG::FATAL << "Could not retrieve " << m_efIsoTool << endmsg; - return HLT::BAD_JOB_SETUP; - } - - if(m_doMyTiming){ - msg() << MSG::INFO << "Running Timing for IsoTool" << endmsg; - m_dataPrepTime = addTimer("dataPrepTime"); - m_calcTime = addTimer("calcTime"); - m_dataOutputTime = addTimer("dataOutputTime"); - msg() << MSG::INFO << "Timers: " << m_dataPrepTime << " " << m_calcTime << " " << m_dataOutputTime << endmsg; - } - - if (m_debug) msg() << MSG::DEBUG - << "End of init TrigMuonEFTrackIsolation" << endmsg; - return HLT::OK; - -} - -// ------------------------------------------------------------------------------------------------------ -/** - * Execute function - called for each roi - */ -HLT::ErrorCode -TrigMuonEFTrackIsolation::hltExecute(const HLT::TriggerElement* inputTE, HLT::TriggerElement* TEout) { - - if(m_doMyTiming && m_dataPrepTime) m_dataPrepTime->start(); - - if (m_debug) msg() << MSG::DEBUG - << ": Executing TrigMuonEFTrackIsolation::execHLTAlgorithm()" << endmsg; - - // prepare output - auto muonContainer = std::make_unique<xAOD::MuonContainer>(); - xAOD::MuonAuxContainer muonAuxContainer; - muonContainer->setStore( &muonAuxContainer ); - ATH_MSG_DEBUG("Created xAOD::MuonContainer"); - - // Get ID Track & EF Muons - const xAOD::TrackParticleContainer* idTrackParticles = 0; - const xAOD::MuonContainer* EFmuonContainer(0); - - // ID Tracks - HLT::ErrorCode hltStatus = getFeature(inputTE, idTrackParticles, m_idTrackParticlesName); - if (hltStatus != HLT::OK) { - msg() << MSG::WARNING << "Failed to retrieve inner detector track particles" << endmsg; - return hltStatus; - } - if(!idTrackParticles) { - std::string label; - std::string inlabel; - TrigConf::HLTTriggerElement::getLabel (TEout->getId(), label ); - TrigConf::HLTTriggerElement::getLabel (inputTE->getId(), inlabel ); - msg() << MSG::WARNING << "Pointer to xAOD::TrackParticleContainer[" << m_idTrackParticlesName << "] for id tracks = 0, stopping processing of ROI" << endmsg; - msg() << MSG::WARNING << "Input TE = " << inlabel << ", Output TE = " << label << endmsg; - return HLT::MISSING_FEATURE; - } else { - if(m_debug) msg() << MSG::DEBUG << "Inner detector track particles retrieved with size: " << idTrackParticles->size() << endmsg; - } // Get ID tracks - - // EF Muons - if(HLT::OK != getFeature(inputTE, EFmuonContainer)) { - ATH_MSG_WARNING("Could not get xAOD::MuonContainer from the trigger element"); - return HLT::MISSING_FEATURE; - } else { - if(!EFmuonContainer) { - ATH_MSG_WARNING("muonContainer is 0 pointer"); - return HLT::MISSING_FEATURE; - } - ATH_MSG_DEBUG("EF MuonContainer extracted with size = " << EFmuonContainer->size()); - - } // Get EF Muons - - - - if(m_doMyTiming){ - if (m_dataPrepTime) m_dataPrepTime->stop(); - if (m_calcTime) m_calcTime->start(); - } - - // loop on EF muons - for(auto muon : *EFmuonContainer) { - if(m_debug) { - msg() << MSG::DEBUG << "Processing next EF muon w/ ID Track Isolation " << muon << endmsg; - } - const xAOD::Muon::MuonType muontype = muon->muonType(); - if( muontype == xAOD::Muon::MuonType::Combined || muontype == xAOD::Muon::MuonType::SegmentTagged ) { - if(m_debug) { - msg() << MSG::DEBUG << "EF muon has combined or segment tagged muon" << endmsg; - } - } else { - if(m_requireCombined) { - if(m_debug) { - msg() << MSG::DEBUG << "Not a combined or segment tagged muon & requireCombined=true, so ignore this muon" << endmsg; - } - continue; - }//requireCombined - else{ - if( muontype == xAOD::Muon::MuonType::MuonStandAlone ){ - if(m_debug) { - msg() << MSG::DEBUG << "EF muon has standalone muon" << endmsg; - } - } - else{ - if(m_debug) { - msg() << MSG::DEBUG << "EF muon has neither combined, segment tagged, nor standalone muon" << endmsg; - } - continue; - } - } - }//no combined muon - - std::vector<double> isoResults; - std::vector<double> dzvals; // for monitoring - std::vector<double> drvals; // for monitoring - std::vector<double> selfremoval; - - // use the tool to calculate the isolation - // ID tracks - if (m_debug) - msg() << MSG::DEBUG << "Running ID Tracks now" << endmsg; - StatusCode result = m_efIsoTool->calcTrackIsolation( muon, idTrackParticles, m_coneSizes, isoResults, &dzvals, &drvals, &selfremoval); - - m_trkdz.insert(m_trkdz.begin(), dzvals.begin(), dzvals.end()); - m_trkdr.insert(m_trkdr.begin(), drvals.begin(), drvals.end()); - - if (selfremoval.size() == 2) - { - m_muon_selfpt.push_back(selfremoval[0] * 1e-3); - m_muon_combinedpt.push_back(selfremoval[1] * 1e-3); - } - else - msg() << MSG::DEBUG << "Muon pT not stored correctly - histograms have not been filled for this muon" << endmsg; - - if(result.isFailure() || isoResults.size() != 2) { - if(result.isFailure()) { - msg() << MSG::WARNING << "Isolation tool failed for this muon - isolation will not be set for this muon" << endmsg; - } else { - if(isoResults.size() != 2) { - msg() << MSG::WARNING << "Wrong number of isolation results - isolation will not be set for this muon." << endmsg; - } - } - } else { //isolation tool was ok - store results - - const float ptcone20 = isoResults[0]; - const float ptcone30 = isoResults[1]; - - m_trkptiso_cone2.push_back(ptcone20 * 1e-3); // convert to GeV - m_trkptiso_cone3.push_back(ptcone30 * 1e-3); // convert to GeV - - // deep copy muon (since otherwise we risk overwriting isolation results from other algos) - muonContainer->push_back( new xAOD::Muon(*muon) ); - xAOD::Muon* outputmuon = muonContainer->back(); - - if (m_useVarIso){ - outputmuon->setIsolation( ptcone20, xAOD::Iso::ptvarcone20 ); - outputmuon->setIsolation( ptcone30, xAOD::Iso::ptvarcone30 ); - } else { - outputmuon->setIsolation( ptcone20, xAOD::Iso::ptcone20 ); - outputmuon->setIsolation( ptcone30, xAOD::Iso::ptcone30 ); - } - }// isolation tool ok for ID - }// EF Muon Loop - - const size_t noutputMuons = muonContainer->size(); - hltStatus = attachFeature(TEout, muonContainer.release() , m_muonContName); - if(hltStatus!=HLT::OK) { - msg() << MSG::WARNING << "Attaching xAOD::MuonContainer to TEout: unsuccessful" << endmsg; - return hltStatus; - } else { - ATH_MSG_DEBUG( "Successfully attached to TEout the muon container with size " << noutputMuons ); - } - - - - - if(m_doMyTiming){ - if(m_calcTime) m_calcTime->stop(); - if(m_dataOutputTime) m_dataOutputTime->start(); - } - - m_n_trks.push_back(idTrackParticles->size()); - - //validate sequence - TEout->setActiveState(true); - if(m_doMyTiming && m_dataOutputTime){ - m_dataOutputTime->stop(); - } - return HLT::OK; - -}//hltExecute - -HLT::ErrorCode TrigMuonEFTrackIsolation:: hltFinalize() -{ - if (m_debug) - msg() << MSG::DEBUG << "Finalizing TrigMuonEFTrackIsolation" << endmsg; - - return HLT::OK; -} - -/** - * Here we can handle incidents like end of event, but for now - * nothing to do. - */ -void TrigMuonEFTrackIsolation::handle(const Incident& /*inc*/) -{ - -} diff --git a/Trigger/TrigAlgorithms/TrigMuonEF/src/TrigMuonEFTrackIsolation.h b/Trigger/TrigAlgorithms/TrigMuonEF/src/TrigMuonEFTrackIsolation.h deleted file mode 100644 index 51c96e4860bb67717dc887d2554d20d755a17926..0000000000000000000000000000000000000000 --- a/Trigger/TrigAlgorithms/TrigMuonEF/src/TrigMuonEFTrackIsolation.h +++ /dev/null @@ -1,89 +0,0 @@ -/* - Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration -*/ - -#ifndef TRIGMUONEF_TRIGMUONEFTRACKISOLATION_H__ -#define TRIGMUONEF_TRIGMUONEFTRACKISOLATION_H__ - -#include "TrigInterfaces/FexAlgo.h" -#include "GaudiKernel/IIncidentListener.h" -#include "GaudiKernel/ToolHandle.h" - -// fwd declare EF track isolation tool interface -class IMuonEFTrackIsolationTool; - -/** - * @class TrigMuonEFTrackIsolation - * - * @brief Algorithm to extract track isolation for EF muons - * - * This class calculates track isolation for EF muons. - * It uses the IMuonEFTrackIsolationTool tool interface for - * the actual isolation calculation. - * - * - * @author Mark Owen (markowen@cern.ch) - * @author Michael Fenton (m.fenton@cern.ch - */ -class TrigMuonEFTrackIsolation : public virtual HLT::FexAlgo, - public virtual IIncidentListener -{ - public: - - /// Constructor - TrigMuonEFTrackIsolation (const std::string& name, ISvcLocator* pSvcLocator); - /// Destructor - ~TrigMuonEFTrackIsolation(); - - /// Initialize the algorithm - HLT::ErrorCode hltInitialize(); - /// Execute - called per trigger element - HLT::ErrorCode hltExecute(const HLT::TriggerElement*, HLT::TriggerElement*); - /// Finalize the algorithm - HLT::ErrorCode hltFinalize(); - - private: - - /// name of ID Track Particle container - std::string m_idTrackParticlesName; - - /// Require that EF muons are combined (should move to pass bits) - bool m_requireCombined; - - /// Use offline isolation variables - bool m_useVarIso; - - /// Name of output muon container - std::string m_muonContName; - - /// flag to see if debug is enabled - bool m_debug; - - /// cone sizes to calculate the isolation - std::vector<double> m_coneSizes; - - /// Tool handle for isolation tool - ToolHandle<IMuonEFTrackIsolationTool> m_efIsoTool; - - //// Monitoring Histograms - StringProperty m_histo_path_base; // set the histo path for Monitoring - std::vector<double> m_trkptiso_cone2; - std::vector<double> m_trkptiso_cone3; - std::vector<double> m_trkdz; - std::vector<double> m_trkdr; - std::vector<double> m_muon_selfpt; - std::vector<double> m_muon_removedpt; - std::vector<double> m_muon_combinedpt; - std::vector<int> m_n_trks; - - //Timers - bool m_doMyTiming; - TrigTimer* m_dataPrepTime; - TrigTimer* m_calcTime; - TrigTimer* m_dataOutputTime; - - void handle(const Incident &); - -}; //class TrigMuonEFTrackIsolation - -#endif //TRIGMUONEF_TRIGMUONEFTRACKISOLATION_H__ diff --git a/Trigger/TrigAlgorithms/TrigMuonEF/src/TrigMuonEFUtils.icc b/Trigger/TrigAlgorithms/TrigMuonEF/src/TrigMuonEFUtils.icc deleted file mode 100644 index 1b60742ba1db3b49356bd6cdf4106be4265128f1..0000000000000000000000000000000000000000 --- a/Trigger/TrigAlgorithms/TrigMuonEF/src/TrigMuonEFUtils.icc +++ /dev/null @@ -1,55 +0,0 @@ -/* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -*/ - -// dear emacs this is -*-c++-*- - -#ifndef TRIGMUONEF_TRIGMUONEFUTILS_ICC_ -#define TRIGMUONEF_TRIGMUONEFUTILS_ICC_ - -// Small file with some helper functions used in TrigMuonEF classes - -namespace { - - inline double getFraction( unsigned int part, unsigned int total ) { - if ( total == 0 ) return 0.0; - return ((double)part) / ((double)total); - } - - template<class T> - inline T* makeViewContainerClone( T* orig ) { - return new T( orig->begin(), orig->end(), SG::VIEW_ELEMENTS); - } - - // delete all entries in cache vector, and clear the vector - template <class T> - void clearCacheVector( std::vector<T*>& cache ) { - typename std::vector<T*>::iterator it = cache.begin(), it_end = cache.end(); - for ( ; it != it_end; ++it ) delete *it; - cache.clear(); - } - - template <class T> - bool addElement( std::vector<T>& v, T& e ) { - typename std::vector<T>::iterator it = std::find( v.begin(), v.end(), e ); - if ( it == v.end() ) { - v.push_back( e ); - return true; - } - return false; - } - - template <class T> - bool removeElement( std::vector<T>& v, T& e ) { - typename std::vector<T>::iterator it = std::find( v.begin(), v.end(), e ); - if ( it != v.end() ) { - v.erase( it ); - return true; - } - return false; - } - - -} // end of unnamed namespace for private local functions - -#endif //TRIGMUONEF_TRIGMUONEFUTILS_ICC_ diff --git a/Trigger/TrigAlgorithms/TrigMuonEF/src/components/TrigMuonEF_entries.cxx b/Trigger/TrigAlgorithms/TrigMuonEF/src/components/TrigMuonEF_entries.cxx index 85becf366a149dcf2378008d0a5afa0c7643f659..3ee075a179e5c65cea1139fb0c98a8dcf33a552f 100644 --- a/Trigger/TrigAlgorithms/TrigMuonEF/src/components/TrigMuonEF_entries.cxx +++ b/Trigger/TrigAlgorithms/TrigMuonEF/src/components/TrigMuonEF_entries.cxx @@ -1,24 +1,10 @@ #include "../TrigMuonEFTrackIsolationTool.h" -#include "../TrigMuonEFTrackIsolation.h" -#include "../TrigMuonEFStandaloneTrackTool.h" -#include "../TrigMuonEFRoiAggregator.h" -#include "../TrigMuonEFFSRoiMaker.h" -#include "../InDetTrkRoiMaker.h" -#include "../TrigMuonEFCaloIsolation.h" -#include "../TrigMuonEFIDTrackRoiMaker.h" #include "../TrigMuonEFTrackIsolationAlgMT.h" #include "../MuonFilterAlg.h" #include "../MuonChainFilterAlg.h" #include "../MergeEFMuonsAlg.h" DECLARE_COMPONENT( TrigMuonEFTrackIsolationTool ) -DECLARE_COMPONENT( TrigMuonEFStandaloneTrackTool ) -DECLARE_COMPONENT( TrigMuonEFTrackIsolation ) -DECLARE_COMPONENT( TrigMuonEFRoiAggregator ) -DECLARE_COMPONENT( InDetTrkRoiMaker ) -DECLARE_COMPONENT( TrigMuonEFCaloIsolation ) -DECLARE_COMPONENT( TrigMuonEFFSRoiMaker ) -DECLARE_COMPONENT( TrigMuonEFIDTrackRoiMaker ) DECLARE_COMPONENT( TrigMuonEFTrackIsolationAlgMT ) DECLARE_COMPONENT( MuonFilterAlg ) DECLARE_COMPONENT( MuonChainFilterAlg )