diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Muon/MuonSetup.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Muon/MuonSetup.py index b01a2d0263600554b09a865157f4c33d02c07649..c3a51add646f5be60242b9578ec1285ee857c186 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Muon/MuonSetup.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Muon/MuonSetup.py @@ -22,6 +22,8 @@ MSextrpTPname = recordable("HLT_MSOnlyExtrapolatedMuons_FSTrackParticles") from TriggerJobOpts.TriggerFlags import TriggerFlags TriggerFlags.MuonSlice.doTrigMuonConfig=True +from AtlasGeoModel.MuonGMJobProperties import MuonGeometryFlags + class muonNames(object): def __init__(self): #EFSA and EFCB containers have different names @@ -84,6 +86,41 @@ def makeMuonPrepDataAlgs(RoIs="MURoIs", forFullScan=False): from AthenaCommon.AppMgr import ToolSvc + if (MuonGeometryFlags.hasSTGC() and MuonGeometryFlags.hasMM()): + ### sTGC RDO data ### + from MuonSTGC_CnvTools.MuonSTGC_CnvToolsConf import Muon__STGC_RDO_Decoder + STGCRodDecoder = Muon__STGC_RDO_Decoder(name = "STGC_RDO_Decoder") + + ToolSvc += STGCRodDecoder + + from MuonSTGC_CnvTools.MuonSTGC_CnvToolsConf import Muon__sTgcRdoToPrepDataToolMT + sTgcRdoToPrepDataTool = Muon__sTgcRdoToPrepDataToolMT(name = "sTgcRdoToPrepDataTool") + + ToolSvc += sTgcRdoToPrepDataTool + + from MuonRdoToPrepData.MuonRdoToPrepDataConf import StgcRdoToStgcPrepData + StgcRdoToStgcPrepData = StgcRdoToStgcPrepData(name = "StgcRdoToStgcPrepData") + + viewAlgs_MuonPRD.append( StgcRdoToStgcPrepData ) + + ### MM RDO data ### + from MuonMM_CnvTools.MuonMM_CnvToolsConf import Muon__MM_RDO_Decoder + MMRodDecoder = Muon__MM_RDO_Decoder(name = "MM_RDO_Decoder") + + ToolSvc += MMRodDecoder + + from MuonMM_CnvTools.MuonMM_CnvToolsConf import Muon__MmRdoToPrepDataToolMT + MmRdoToPrepDataTool = Muon__MmRdoToPrepDataToolMT(name = "MmRdoToPrepDataTool") + + ToolSvc += MmRdoToPrepDataTool + + from MuonRdoToPrepData.MuonRdoToPrepDataConf import MM_RdoToMM_PrepData + MM_RdoToMM_PrepData = MM_RdoToMM_PrepData(name = "MM_RdoToMM_PrepData", + PrintInputRdo = True ) + + viewAlgs_MuonPRD.append( MM_RdoToMM_PrepData ) + + ### CSC RDO data ### from MuonCSC_CnvTools.MuonCSC_CnvToolsConf import Muon__CscROD_Decoder CSCRodDecoder = Muon__CscROD_Decoder(name = "CscROD_Decoder", @@ -467,6 +504,8 @@ def muEFSARecoSequence( RoIs, name ): from MuonCombinedRecExample.MuonCombinedAlgs import MuonCombinedMuonCandidateAlg, MuonCreatorAlg from MuonCombinedAlgs.MuonCombinedAlgsMonitoring import MuonCreatorAlgMonitoring + from MuonRecExample.MuonRecFlags import muonRecFlags + muEFSARecoSequence = parOR("efmsViewNode_"+name) efAlgs = [] @@ -496,7 +535,10 @@ def muEFSARecoSequence( RoIs, name ): ( 'Muon::RpcPrepDataContainer' , 'StoreGateSvc+RPC_Measurements' ), ( 'Muon::CscStripPrepDataContainer' , 'StoreGateSvc+CSC_Measurements' ), ( 'Muon::CscPrepDataContainer' , 'StoreGateSvc+CSC_Clusters' )] - + if (MuonGeometryFlags.hasSTGC() and MuonGeometryFlags.hasMM()): + EFMuonViewDataVerifier.DataObjects += [( 'Muon::MMPrepDataContainer' , 'StoreGateSvc+MM_Measurements'), + ( 'Muon::sTgcPrepDataContainer' , 'StoreGateSvc+STGC_Measurements')] + #need MdtCondDbAlg for the MuonStationIntersectSvc (required by segment and track finding) from AthenaCommon.AlgSequence import AthSequencer from MuonCondAlg.MuonTopCondAlgConfigRUN2 import MdtCondDbAlg @@ -507,8 +549,33 @@ def muEFSARecoSequence( RoIs, name ): # Sets up and configures the muon alignment: from MuonRecExample import MuonAlignConfig # noqa: F401 + if (MuonGeometryFlags.hasSTGC() and MuonGeometryFlags.hasMM()): + theMuonLayerHough = CfgMgr.MuonLayerHoughAlg( "MuonLayerHoughAlg") + efAlgs.append(theMuonLayerHough) + SegmentFinder = CfgGetter.getPublicTool("MuonClusterSegmentFinderTool") + Cleaner = CfgGetter.getPublicToolClone("MuonTrackCleaner_seg","MuonTrackCleaner") + Cleaner.Extrapolator = CfgGetter.getPublicTool("MuonStraightLineExtrapolator") + Cleaner.Fitter = CfgGetter.getPublicTool("MCTBSLFitterMaterialFromTrack") + Cleaner.PullCut = 3 + Cleaner.PullCutPhi = 3 + SegmentFinder.TrackCleaner = Cleaner + + theSegmentFinderAlg = CfgMgr.MuonSegmentFinderAlg( "TrigMuonSegmentMaker_"+name,SegmentCollectionName="MuonSegments", + MuonPatternCalibration = CfgGetter.getPublicTool("MuonPatternCalibration"), + MuonPatternSegmentMaker = CfgGetter.getPublicTool("MuonPatternSegmentMaker"), + MuonTruthSummaryTool = None) + # we check whether the layout contains any CSC chamber and if yes, we check that the user also wants to use the CSCs in reconstruction + if MuonGeometryFlags.hasCSC() and muonRecFlags.doCSCs(): + CfgGetter.getPublicTool("CscSegmentUtilTool") + CfgGetter.getPublicTool("Csc2dSegmentMaker") + CfgGetter.getPublicTool("Csc4dSegmentMaker") + else: + theSegmentFinderAlg.Csc2dSegmentMaker = "" + theSegmentFinderAlg.Csc4dSegmentMaker = "" + + else: + theSegmentFinderAlg = MooSegmentFinderAlg("TrigMuonSegmentMaker_"+name) - theSegmentFinderAlg = MooSegmentFinderAlg("TrigMuonSegmentMaker_"+name) from MuonSegmentTrackMaker.MuonTrackMakerAlgsMonitoring import MuPatTrackBuilderMonitoring TrackBuilder = CfgMgr.MuPatTrackBuilder("TrigMuPatTrackBuilder_"+name ,MuonSegmentCollection = "MuonSegments", TrackSteering=CfgGetter.getPublicToolClone("TrigMuonTrackSteering", "MuonTrackSteering"), @@ -570,6 +637,11 @@ def muEFCBRecoSequence( RoIs, name ): ( 'SCT_FlaggedCondData' , 'StoreGateSvc+SCT_FlaggedCondData' ), ( 'MuonCandidateCollection' , 'StoreGateSvc+MuonCandidates_FS' ), ( 'xAOD::EventInfo' , 'StoreGateSvc+EventInfo' )] + + if (MuonGeometryFlags.hasSTGC() and MuonGeometryFlags.hasMM()): + ViewVerifyMS.DataObjects += [( 'Muon::MMPrepDataContainer' , 'StoreGateSvc+MM_Measurements'), + ( 'Muon::sTgcPrepDataContainer' , 'StoreGateSvc+STGC_Measurements') ] + muEFCBRecoSequence += ViewVerifyMS # Make sure required objects are still available at whole-event level @@ -753,6 +825,10 @@ def muEFInsideOutRecoSequence(RoIs, name): ( 'Muon::RpcPrepDataContainer' , 'StoreGateSvc+RPC_Measurements' ), ( 'Muon::TgcPrepDataContainer' , 'StoreGateSvc+TGC_Measurements' ), ( 'Muon::HoughDataPerSectorVec' , 'StoreGateSvc+HoughDataPerSectorVec')] + if (MuonGeometryFlags.hasSTGC() and MuonGeometryFlags.hasMM()): + ViewVerifyInsideOut.DataObjects += [( 'Muon::MMPrepDataContainer' , 'StoreGateSvc+MM_Measurements'), + ( 'Muon::sTgcPrepDataContainer' , 'StoreGateSvc+STGC_Measurements') ] + efmuInsideOutRecoSequence += ViewVerifyInsideOut