ATLAS Offline Software
Loading...
Searching...
No Matches
MuonRecoSequences.py
Go to the documentation of this file.
2# Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3#
4
5from AthenaCommon.Logging import logging
6log = logging.getLogger(__name__)
7
8
9from TrigEDMConfig.TriggerEDM import recordable
10from MuonConfig.MuonBytestreamDecodeConfig import RpcBytestreamDecodeCfg, NrpcBytestreamDecodeCfg, TgcBytestreamDecodeCfg, MdtBytestreamDecodeCfg, CscBytestreamDecodeCfg, sTgcBytestreamDecodeCfg, MmBytestreamDecodeCfg
11from MuonConfig.MuonRdoDecodeConfig import RpcRDODecodeCfg, TgcRDODecodeCfg, MdtRDODecodeCfg, CscRDODecodeCfg, CscClusterBuildCfg, StgcRDODecodeCfg, MMRDODecodeCfg
12from MuonConfig.MuonRdoDecodeConfig import MuonPrdCacheNames
13from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
14from AthenaConfiguration.ComponentFactory import CompFactory
15from TrigInDetConfig.utils import getFlagsForActiveConfig
16
17CBTPname = recordable("HLT_CBCombinedMuon_RoITrackParticles")
18CBTPnameFS = recordable("HLT_CBCombinedMuon_FSTrackParticles")
19CBTPnameLRT = recordable("HLT_CBCombinedMuon_LRTTrackParticles")
20ExtrpTPname = recordable("HLT_MSExtrapolatedMuons_RoITrackParticles")
21ExtrpTPnameFS = recordable("HLT_MSExtrapolatedMuons_FSTrackParticles")
22MSextrpTPname = recordable("HLT_MSOnlyExtrapolatedMuons_FSTrackParticles")
23
24
25from AthenaConfiguration.Enums import BeamType, LHCPeriod
26
27class muonNames(object):
28 def __init__(self):
29 #EFSA and EFCB containers have different names
30 #for RoI and FS running. Other containers are
31 #produced in RoIs only.
32
33 self.L2SAName = recordable("HLT_MuonL2SAInfo")
34 self.L2CBName = recordable("HLT_MuonL2CBInfo")
35 self.EFSAName = "Muons"
36 self.EFCBName = "MuonsCB"
37 self.EFCBOutInName = "MuonsCBOutsideIn"
38 self.EFCBInOutName = "HLT_MuonsCBInsideOut"
39 self.EFIsoMuonName = recordable("HLT_MuonsIso")
40 self.L2forIDName = "RoIs_fromL2SAViews"
41
42 def getNames(self, name):
43
44 if "FS" in name:
45 self.EFSAName = recordable("HLT_Muons_FS")
46 self.EFCBName = recordable("HLT_MuonsCB_FS")
47 self.EFCBOutInName = "MuonsCBOutsideIn_FS"
48 if "RoI" in name:
49 self.EFSAName = recordable("HLT_Muons_RoI")
50 self.EFCBName = recordable("HLT_MuonsCB_RoI")
51 if "LRT" in name:
52 self.L2CBName = recordable("HLT_MuonL2CBInfoLRT")
53 self.EFSAName = recordable("HLT_Muons_RoI")
54 self.EFCBName = recordable("HLT_MuonsCB_LRT")
55 return self
56
57muNames = muonNames().getNames('RoI')
58muNamesFS = muonNames().getNames('FS')
59muNamesLRT = muonNames().getNames('LRT')
60
61def isCosmic(flags):
62 #FIXME: this might not be ideal criteria to determine if this is cosmic chain but used to work in Run2 and will do for now, ATR-22758
63 return (flags.Beam.Type == BeamType.Cosmics)
64
65def isLRT(name):
66 return "LRT" in name
67
68#Returns relevant track collection name
69def getIDTracks(flags, name='', muonIDreuse=False, precision=False, suffix=''):
70
71 if muonIDreuse or suffix != '':
72 if isLRT(name):
73 return 'HLT_IDTrack_MuonComb_FTF_LRT'
74 elif isCosmic(flags):
75 return 'HLT_IDTrack_MuonComb_FTF'
76 else:
77 return 'HLT_IDTrack_MuonComb_FTF'+suffix
78
79 else:
80 if precision:
81 return flags.Tracking.ActiveConfig.tracks_IDTrig
82 else:
83 if isLRT(name):
84 return flags.Trigger.InDetTracking.muonLRT.tracks_FTF
85 elif isCosmic(flags):
86 return flags.Trigger.InDetTracking.cosmics.tracks_IDTrig
87 else:
88 return flags.Trigger.InDetTracking.muon.tracks_FTF
89
90
92 result = ComponentAccumulator()
93
94 # Cache
95 dataObjects=[( 'RpcPrepDataCollection_Cache' , 'StoreGateSvc+RpcPrdCache' ),
96 ( 'TgcRdo_Cache' , 'StoreGateSvc+TgcRdoCache' ),
97 ( 'MdtCsm_Cache' , 'StoreGateSvc+MdtCsmRdoCache' ),
98 ( 'RpcPad_Cache' , 'StoreGateSvc+RpcRdoCache' ),
99 ( 'RpcCoinDataCollection_Cache' , 'StoreGateSvc+RpcCoinCache' ),
100 ( 'TgcPrepDataCollection_Cache' , 'StoreGateSvc+' + MuonPrdCacheNames.TgcCache + 'AllBCs' ),
101 ( 'TgcCoinDataCollection_Cache' , 'StoreGateSvc+' + MuonPrdCacheNames.TgcCoinCache + 'PriorBC' ),
102 ( 'TgcCoinDataCollection_Cache' , 'StoreGateSvc+' + MuonPrdCacheNames.TgcCoinCache + 'NextBC' ),
103 ( 'TgcCoinDataCollection_Cache' , 'StoreGateSvc+' + MuonPrdCacheNames.TgcCoinCache + 'NextNextBC' ),
104 ( 'TgcCoinDataCollection_Cache' , 'StoreGateSvc+' + MuonPrdCacheNames.TgcCoinCache )
105 ]
106
107 if flags.Detector.GeometrysTGC:
108 dataObjects += [( 'sTgcPrepDataCollection_Cache' , 'StoreGateSvc+' + MuonPrdCacheNames.sTgcCache)]
109 if flags.Input.isMC:
110 dataObjects += [( 'Muon::STGC_RawDataContainer' , 'StoreGateSvc+sTGCRDO' )]
111
112 if flags.Detector.GeometryMM:
113 dataObjects += [( 'MMPrepDataCollection_Cache' , 'StoreGateSvc+' + MuonPrdCacheNames.MmCache)]
114 if flags.Input.isMC:
115 dataObjects += [( 'Muon::MM_RawDataContainer' , 'StoreGateSvc+MMRDO' )]
116
117 if flags.Detector.GeometryCSC:
118 dataObjects+=[( 'CscRawDataCollection_Cache' , 'StoreGateSvc+CscRdoCache' )]
119 if flags.Input.isMC:
120 dataObjects += [( 'CscRawDataContainer' , 'StoreGateSvc+CSCRDO' ),
121 ( 'CscRawDataCollection_Cache' , 'StoreGateSvc+CscRdoCache' )]
122
123 if flags.Input.isMC:
124 dataObjects += [( 'MdtCsmContainer' , 'StoreGateSvc+MDTCSM' ),
125 *( [( 'RpcPadContainer' , 'StoreGateSvc+RPCPAD' )] if "RPCPAD" in flags.Input.Collections else [] ),
126 *( [( 'xAOD::NRPCRDOContainer' , 'StoreGateSvc+NRPCRDO' )] if flags.Muon.enableNRPC else [] ),
127 ('TgcRdoContainer' , 'StoreGateSvc+TGCRDO' )]
128
129 if flags.Muon.usePhaseIIGeoSetup:
130 dataObjects += [('ActsTrk::GeometryContext' , 'StoreGateSvc+ActsAlignment' )]
131
132 alg = CompFactory.AthViews.ViewDataVerifier( name = "VDVMuDataPrep",
133 DataObjects = dataObjects)
134 result.addEventAlgo(alg)
135 return result
136
137
138def muonDecodeCfg(flags, RoIs):
139 acc = ComponentAccumulator()
140
141 doSeededDecoding =True
142 if 'FSRoI' in RoIs:
143 doSeededDecoding = False
144 acc.merge(MuDataPrepViewDataVerifierCfg(flags))
145
146 # Get RPC BS decoder
147 if not flags.Input.isMC:
148 rpcAcc = RpcBytestreamDecodeCfg( flags, name = "RpcRawDataProvider_"+RoIs, RoIs = RoIs, DoSeededDecoding = doSeededDecoding )
149 acc.merge( rpcAcc )
150 if flags.Muon.enableNRPC:
151 acc.merge(NrpcBytestreamDecodeCfg( flags, name="NRpcRawDataProvider_"+RoIs ))
152 # Get RPC RDO convertor
153 rpcAcc = RpcRDODecodeCfg( flags, name= "RpcRdoToRpcPrepData_"+RoIs, RoIs = RoIs, DoSeededDecoding = doSeededDecoding )
154 acc.merge( rpcAcc )
155 # Get TGC BS decoder
156 if not flags.Input.isMC:
157 tgcAcc = TgcBytestreamDecodeCfg( flags, name="TgcRawDataProvider_"+RoIs, RoIs = RoIs, DoSeededDecoding = doSeededDecoding )
158 acc.merge( tgcAcc )
159 # Get TGC RDO convertor
160 tgcAcc = TgcRDODecodeCfg( flags, name="TgcRdoToTgcPrepData_"+RoIs, RoIs = RoIs, DoSeededDecoding = doSeededDecoding )
161 acc.merge( tgcAcc )
162 # Get MDT BS decoder
163 if not flags.Input.isMC:
164 mdtAcc = MdtBytestreamDecodeCfg( flags, name="MdtRawDataProvider_"+RoIs, RoIs = RoIs, DoSeededDecoding = doSeededDecoding )
165 acc.merge( mdtAcc )
166 # Get MDT RDO convertor
167 mdtAcc = MdtRDODecodeCfg( flags, name="MdtRdoToMdtPrepData_"+RoIs, RoIs = RoIs, DoSeededDecoding = doSeededDecoding )
168 acc.merge( mdtAcc )
169 # Get CSC BS decoder
170 if flags.Detector.GeometryCSC:
171 if not flags.Input.isMC:
172 cscAcc = CscBytestreamDecodeCfg( flags, name="CscRawDataProvider_"+RoIs, RoIs = RoIs, DoSeededDecoding = doSeededDecoding )
173 acc.merge( cscAcc )
174 # Get CSC RDO convertor
175 cscAcc = CscRDODecodeCfg( flags, name="CscRdoToCscPrepData_"+RoIs, RoIs = RoIs, DoSeededDecoding = doSeededDecoding )
176 acc.merge( cscAcc )
177 # Get CSC cluster builder
178 cscAcc = CscClusterBuildCfg( flags, name="CscThresholdClusterBuilder_"+RoIs )
179 acc.merge( cscAcc )
180 #sTGC and MM BS decoder
181 if flags.Detector.GeometrysTGC and flags.Detector.GeometryMM:
182 if not flags.Input.isMC:
183 stgcAcc = sTgcBytestreamDecodeCfg(flags, name="sTgcRawDataProvider_"+RoIs, RoIs = RoIs, DoSeededDecoding = doSeededDecoding)
184 acc.merge( stgcAcc )
185 mmAcc = MmBytestreamDecodeCfg(flags, name="MMRawDataProvider_"+RoIs, RoIs = RoIs, DoSeededDecoding = doSeededDecoding)
186 acc.merge( mmAcc )
187 #sTGC and MM RDO converter
188 stgcAcc = StgcRDODecodeCfg( flags, name="StgcRdoToStgcPrepData_"+RoIs, RoIs = RoIs, DoSeededDecoding = doSeededDecoding )
189 acc.merge( stgcAcc )
190
191 mmAcc = MMRDODecodeCfg( flags, name="MMRdoToMMPrepData_"+RoIs, RoIs = RoIs, DoSeededDecoding = doSeededDecoding)
192 acc.merge( mmAcc )
193
194 return acc
195
196def muFastVDVCfg(flags, RoIs, postFix, InsideOutMode, extraLoads):
197 result=ComponentAccumulator()
198 # In insideout mode, need to inherit muon decoding objects for TGC, RPC, MDT, CSC
199 dataObjects=[]
200 if InsideOutMode:
201 dataObjects = [('Muon::TgcPrepDataContainer','StoreGateSvc+TGC_MeasurementsAllBCs'),
202 ('TgcRdoContainer' , 'StoreGateSvc+TGCRDO'),
203 ('Muon::RpcPrepDataContainer','StoreGateSvc+RPC_Measurements'),
204 ('Muon::MdtPrepDataContainer','StoreGateSvc+MDT_DriftCircles'),
205 *( [( 'RpcPadContainer' , 'StoreGateSvc+RPCPAD' )] if "RPCPAD" in flags.Input.Collections else [] )]
206 if flags.Detector.GeometryCSC:
207 dataObjects += [('Muon::CscPrepDataContainer','StoreGateSvc+CSC_Clusters')]
208 if flags.Detector.GeometrysTGC:
209 dataObjects += [('Muon::sTgcPrepDataContainer','StoreGateSvc+STGC_Measurements')]
210 if flags.Detector.GeometryMM:
211 dataObjects += [('Muon::MMPrepDataContainer','StoreGateSvc+MM_Measurements')]
212
213 if flags.Muon.usePhaseIIGeoSetup:
214 dataObjects += [('ActsTrk::GeometryContext' , 'StoreGateSvc+ActsAlignment' )]
215
216 else:
217 dataObjects += [( 'TrigRoiDescriptorCollection' , 'StoreGateSvc+%s' % RoIs )]
218 dataObjects += [( 'xAOD::EventInfo' , 'StoreGateSvc+EventInfo' )]
219 if flags.Trigger.enableL1MuonPhase1:
220 dataObjects += [( 'xAOD::MuonRoIContainer' , 'StoreGateSvc+LVL1MuonRoIs' )]
221 else:
222 dataObjects += [( 'DataVector< LVL1::RecMuonRoI >' , 'StoreGateSvc+HLT_RecMURoIs' )]
223
224 #For L2 multi-track SA mode
225 if extraLoads:
226 dataObjects += extraLoads
227 ViewVerify = CompFactory.AthViews.ViewDataVerifier("muFastRecoVDV"+postFix, DataObjects = dataObjects)
228
229 result.addEventAlgo(ViewVerify)
230 return result
231
232def muFastRecoSequenceCfg( flags, RoIs, doFullScanID = False, InsideOutMode=False, extraLoads=None, l2mtmode=False, calib=False ):
233
234 acc = ComponentAccumulator()
235 postFix = ""
236 if InsideOutMode:
237 postFix = "IOmode"
238 elif l2mtmode:
239 postFix = "l2mtmode"
240 elif calib:
241 postFix = "Calib"
242
243 acc.merge(muFastVDVCfg(flags, RoIs, postFix, InsideOutMode, extraLoads))
244
245
246
247 from TrigL2MuonSA.TrigL2MuonSAConfig import l2MuFastAlgCfg
248 acc.merge(l2MuFastAlgCfg(flags,
249 roisKey = RoIs,
250 setup = postFix,
251 FILL_FSIDRoI = doFullScanID,
252 MuonL2SAInfo = muNames.L2SAName+postFix,
253 L2IOCB = muNames.L2CBName+postFix,
254 forID = muNames.L2forIDName+postFix,
255 forMS = "forMS"+postFix,
256 TrackParticlesContainerName = getIDTracks(flags)))
257
258
259 return acc
260
261def muonIDtrackVDVCfg( flags, name, RoIs, extraLoads=None, extraLoadsForl2mtmode=None ):
262 result=ComponentAccumulator()
263 dataObjects=[( 'TrigRoiDescriptorCollection' , 'StoreGateSvc+%s' % RoIs )]
264 if extraLoads:
265 dataObjects += extraLoads
266 if extraLoadsForl2mtmode:
267 dataObjects += extraLoadsForl2mtmode
268 ViewVerify = CompFactory.AthViews.ViewDataVerifier("muCombVDV"+name, DataObjects = dataObjects)
269
270 result.addEventAlgo(ViewVerify)
271 return result
272
273def muonIDFastTrackingSequenceCfg( flags, RoIs, name, extraLoads=None, extraLoadsForl2mtmode=None, doLRT=False, trackingMode="FTF" ):
274
275 acc = ComponentAccumulator()
276 from TrigInDetConfig.TrigInDetConfig import trigInDetFastTrackingCfg
277 acc.merge(trigInDetFastTrackingCfg( flags, roisKey=RoIs, signatureName=name, patternMode=trackingMode ))
278
279 acc.merge(muonIDtrackVDVCfg(flags, name, RoIs, extraLoads, extraLoadsForl2mtmode))
280
281 return acc
282
283def muonIDCosmicTrackingSequenceCfg( flags, RoIs, name, extraLoads=None, extraLoadsForl2mtmode=None ):
284
285 acc = ComponentAccumulator()
286
287 acc.merge(muonIDtrackVDVCfg(flags, 'cosmics', RoIs, extraLoads, extraLoadsForl2mtmode))
288
289 flagsWithTrk = getFlagsForActiveConfig(flags, "cosmics", log)
290
291 from TrigInDetConfig.InnerTrackingTrigSequence import InnerTrackingTrigSequence
292 seq = InnerTrackingTrigSequence.create(flagsWithTrk,
293 flagsWithTrk.Tracking.ActiveConfig.input_name,
294 rois = RoIs,
295 inView = "muCombVDVcosmics")
296 acc.merge(seq.sequence("Offline"))
297
298
299 return acc
300
301def muCombVDVCfg( flags, postFix):
302 result=ComponentAccumulator()
303 dataObjects=[('xAOD::L2StandAloneMuonContainer','StoreGateSvc+%s' % muNames.L2SAName+postFix)]
304 ViewVerify = CompFactory.AthViews.ViewDataVerifier("muCombAlgVDV"+postFix, DataObjects = dataObjects)
305 result.addEventAlgo(ViewVerify)
306 return result
307
308
309def muCombRecoSequenceCfg( flags, RoIs, name, l2mtmode=False, l2CBname="" ):
310
311 acc = ComponentAccumulator()
312 postFix = ""
313 if l2mtmode:
314 postFix = "l2mtmode"
315
316 acc.merge(muCombVDVCfg(flags, postFix))
317 from TrigmuComb.TrigmuCombConfig import muCombCfg
318 l2trackname = getIDTracks(flags) if l2mtmode else getIDTracks(flags, name)
319 acc.merge(muCombCfg(flags, f'{postFix}_{name}', useBackExtrp=True,
320 L2StandAloneMuonContainerName = muNames.L2SAName+postFix,
321 L2CombinedMuonContainerName = l2CBname, TrackParticleContainerName = l2trackname ))
322
323 return acc
324
325def EFMuSADataPrepViewDataVerifierCfg(flags, RoIs, roiName):
326 result=ComponentAccumulator()
327 dataObjects=[( 'xAOD::EventInfo' , 'StoreGateSvc+EventInfo' ),
328 ( 'TrigRoiDescriptorCollection' , 'StoreGateSvc+%s' % RoIs )]
329
330 if flags.Muon.usePhaseIIGeoSetup:
331 dataObjects += [( 'ActsGeometryContext' , 'StoreGateSvc+ActsAlignment' )]
332
333 if flags.Muon.setupTruthAlgorithms:
334 dataObjects += [( 'xAOD::MuonSimHitContainer' , 'StoreGateSvc+MDT_SDO' ),
335 ( 'xAOD::MuonSimHitContainer' , 'StoreGateSvc+MM_SDO' ),
336 ( 'xAOD::MuonSimHitContainer' , 'StoreGateSvc+RPC_SDO' ),
337 ( 'xAOD::MuonSimHitContainer' , 'StoreGateSvc+TGC_SDO' ),
338 ( 'xAOD::MuonSimHitContainer' , 'StoreGateSvc+sTGC_SDO' ),
339 ( 'McEventCollection' , 'StoreGateSvc+TruthEvent' ),
340 # Truth muons containers and decorations
341 ( 'xAOD::TruthParticleContainer' , 'StoreGateSvc+MuonTruthParticles' ),
342 ( 'xAOD::TruthParticleContainer' , 'StoreGateSvc+MuonTruthParticles.truthClassification' ),
343 ( 'xAOD::TruthParticleContainer' , 'StoreGateSvc+MuonTruthParticles.truthOrigin' ),
344 ( 'xAOD::TruthParticleContainer' , 'StoreGateSvc+MuonTruthParticles.truthParticleLink' ),
345 ( 'xAOD::TruthParticleContainer' , 'StoreGateSvc+MuonTruthParticles.truthType' ),
346 # Truth segments and SDO-to-segment links
347 ( 'xAOD::MuonSegmentContainer' , 'StoreGateSvc+MuonTruthSegments' ),
348 ( 'xAOD::MuonSegmentContainer' , 'StoreGateSvc+MuonTruthSegments.charge' ),
349 ( 'xAOD::MuonSegmentContainer' , 'StoreGateSvc+MuonTruthSegments.localSegPars' ),
350 ( 'xAOD::MuonSegmentContainer' , 'StoreGateSvc+MuonTruthSegments.pt' ),
351 ( 'xAOD::MuonSegmentContainer' , 'StoreGateSvc+MuonTruthSegments.simHitLinks' ),
352 ( 'xAOD::MuonSimHitContainer' , 'StoreGateSvc+MDT_SDO.truthSegmentLink' ),
353 ( 'xAOD::MuonSimHitContainer' , 'StoreGateSvc+MM_SDO.truthSegmentLink' ),
354 ( 'xAOD::MuonSimHitContainer' , 'StoreGateSvc+RPC_SDO.truthSegmentLink' ),
355 ( 'xAOD::MuonSimHitContainer' , 'StoreGateSvc+TGC_SDO.truthSegmentLink' ),
356 ( 'xAOD::MuonSimHitContainer' , 'StoreGateSvc+sTGC_SDO.truthSegmentLink' ),
357 # Truth segment to truth particle links
358 ( 'xAOD::MuonSegmentContainer' , 'StoreGateSvc+MuonTruthSegments.truthParticleLink' ),
359 ( 'xAOD::TruthParticleContainer' , 'StoreGateSvc+MuonTruthParticles.truthSegmentLinks' )]
360
361 alg = CompFactory.AthViews.ViewDataVerifier( name = "VDVMuEFSA_"+roiName,
362 DataObjects = dataObjects)
363 result.addEventAlgo(alg)
364 return result
365
366
367def muEFSARecoSequenceCfg( flags, RoIs, name, useBucketFilter=False):
368
369 from MuonCombinedAlgs.MuonCombinedAlgsMonitoring import MuonCreatorAlgMonitoring
370 from MuonConfig.MuonSegmentFindingConfig import MuonSegmentFinderAlgCfg, MuonLayerHoughAlgCfg
371 from MuonConfig.MuonTrackBuildingConfig import MuPatTrackBuilderCfg
372 from xAODTrackingCnv.xAODTrackingCnvConfig import MuonStandaloneTrackParticleCnvAlgCfg
373 from MuonCombinedConfig.MuonCombinedReconstructionConfig import MuonCombinedMuonCandidateAlgCfg, MuonCreatorAlgCfg
374
375 acc = ComponentAccumulator()
376
377 acc.merge(EFMuSADataPrepViewDataVerifierCfg(flags, RoIs, name))
378
379 if flags.Muon.usePhaseIIGeoSetup and flags.Muon.scheduleActsReco:
380
381 # Schedule reco-to-truth object association
382 if flags.Muon.setupTruthAlgorithms:
383 from MuonObjectMarker.ObjectMarkerConfig import TruthMeasMarkerAlgCfg
384 acc.merge(TruthMeasMarkerAlgCfg(flags, name = f"TruthMeasMarkerAlg{name}"))
385 from MuonTruthAlgsR4.MuonTruthAlgsConfig import TruthHitAssociationCfg, RecoSegmentTruthAssocCfg
386 acc.merge(TruthHitAssociationCfg(flags, useSDO=True, suffix=f'_{name}'))
387 acc.merge(RecoSegmentTruthAssocCfg(flags, name=f"MuonSegmentsFromR4TruthMatching{name}",
388 SegmentKey="MuonSegmentsFromR4"))
389
390 # Schedule muon EF reco
391 from MuonSpacePointFormation.SpacePointFormationConfig import MuonSpacePointFormationCfg
392 acc.merge( MuonSpacePointFormationCfg( flags, suffix =f'_{name}' ) )
393
394 if useBucketFilter:
395 from MuonInference.InferenceConfig import GraphBucketFilterToolCfg, GraphInferenceAlgCfg
396 bucketTool = acc.popToolsAndMerge(GraphBucketFilterToolCfg(flags, name=f"GraphBucketFilterTool_{name}",
397 WriteSpacePointKey=f"FilteredMlBuckets_{name}"))
398 acc.merge(GraphInferenceAlgCfg(flags, name = f"GraphInferenceAlg_{name}",
399 InferenceTools=[bucketTool]))
400
401 # Pattern recognition & segment fitting
402 from MuonPatternRecognitionAlgs.MuonPatternRecognitionConfig import MuonEtaHoughTransformAlgCfg, MuonNSWSegmentFinderAlgCfg, MuonPhiHoughTransformAlgCfg, MuonSegmentFittingAlgCfg
403 segmentContainers = []
404 if flags.Detector.GeometrysTGC or flags.Detector.GeometryMM:
405 segmentContainers+=["MuonNswSegments"]
406 acc.merge(MuonEtaHoughTransformAlgCfg(flags, name=f"MuonNswEtaHoughTransformAlg_{name}",
407 EtaHoughMaxContainer = "MuonHoughNswMaxima",
408 SpacePointContainer = "NswSpacePoints"))
409 acc.merge(MuonNSWSegmentFinderAlgCfg(flags, name=f"MuonNswSegmentFinderAlg_{name}",
410 MuonNswSegmentWriteKey = segmentContainers[-1],
411 MuonNswSegmentSeedWriteKey = "MuonNswSegmentSeeds",
412 CombinatorialReadKey = "MuonHoughNswMaxima"))
413
414 if flags.Detector.GeometryMDT or flags.Detector.GeometryRPC or flags.Detector.GeometryTGC:
415 if flags.Muon.enableMLBucketFilter:
416 acc.merge(MuonEtaHoughTransformAlgCfg(flags, name = f"MuonEtaHoughTransformAlg_{name}",
417 SpacePointContainer = "FilteredMlBuckets"))
418 else:
419 acc.merge(MuonEtaHoughTransformAlgCfg(flags, name = f"MuonEtaHoughTransformAlg_{name}"))
420 acc.merge(MuonPhiHoughTransformAlgCfg(flags, name = f"MuonPhiHoughTransformAlg_{name}"))
421
422 segmentContainers+=["R4MuonSegments"]
423 acc.merge(MuonSegmentFittingAlgCfg(flags, name = f"MuonSegmentFittingAlg_{name}",
424 OutSegmentContainer=segmentContainers[-1]))
425
426 from MuonSegmentCnv.MuonSegmentCnvConfig import xAODSegmentCnvAlgCfg
427 acc.merge(xAODSegmentCnvAlgCfg(flags, name = f"MuonR4xAODSegmentCnvAlg_{name}",
428 InSegmentKeys = segmentContainers))
429
430 from MuonSegmentCnv.MuonSegmentCnvConfig import MuonR4SegmentCnvAlgCfg
431 acc.merge(MuonR4SegmentCnvAlgCfg(flags, name=f"MuonR4SegmentCnvAlg_{name}",
432 ReadSegments = segmentContainers,
433 WriteKey="TrackMuonSegments"))
434 else:
435 acc.merge(MuonLayerHoughAlgCfg(flags, "TrigMuonLayerHoughAlg"))
436 acc.merge(MuonSegmentFinderAlgCfg(flags, "TrigMuonSegmentMaker_"+name))
437
438 from MuonSegmentTrackMaker.MuonTrackMakerAlgsMonitoring import MuPatTrackBuilderMonitoring
439 acc.merge(MuPatTrackBuilderCfg(flags, name="TrigMuPatTrackBuilder_"+name ,MuonSegmentCollection = "TrackMuonSegments", MonTool = MuPatTrackBuilderMonitoring(flags, "MuPatTrackBuilderMonitoringSA_"+name)))
440
441 acc.merge(MuonStandaloneTrackParticleCnvAlgCfg(flags, name = "TrigMuonStandaloneTrackParticleCnvAlg_"+name))
442 acc.merge(MuonCombinedMuonCandidateAlgCfg(flags, name="TrigMuonCandidateAlg_"+name))
443
444 msMuonName = muNames.EFSAName
445 if 'FS' in name:
446 msMuonName = muNamesFS.EFSAName
447
448 acc.merge(MuonCreatorAlgCfg(flags, name="TrigMuonCreatorAlg_"+name, CreateSAmuons=True, TagMaps=[], MuonContainerLocation=msMuonName,
449 ExtrapolatedLocation = "HLT_MSExtrapolatedMuons_"+name, MSOnlyExtrapolatedLocation = "HLT_MSOnlyExtrapolatedMuons_"+name,
450 MonTool = MuonCreatorAlgMonitoring(flags, "MuonCreatorAlgSA_"+name)))
451
452 sequenceOut = msMuonName
453
454 return acc, sequenceOut
455
456
457
458def VDVEFMuCBCfg(flags, RoIs, name, suffix):
459 acc = ComponentAccumulator()
460 dataObjects = [( 'Muon::MdtPrepDataContainer' , 'StoreGateSvc+MDT_DriftCircles' ),
461 ( 'Muon::TgcPrepDataContainer' , 'StoreGateSvc+TGC_MeasurementsAllBCs' ),
462 ( 'Muon::RpcPrepDataContainer' , 'StoreGateSvc+RPC_Measurements' ),
463 ( 'TrigRoiDescriptorCollection' , 'StoreGateSvc+%s' % RoIs ),
464 ( 'xAOD::EventInfo' , 'StoreGateSvc+EventInfo' ),
465 ]
466 if "FS" in name:
467 dataObjects +=[( 'MuonCandidateCollection' , 'StoreGateSvc+MuonCandidates_FS' )]
468 else:
469 dataObjects +=[( 'MuonCandidateCollection' , 'StoreGateSvc+MuonCandidates')]
470
471 if flags.Detector.GeometryCSC:
472 dataObjects += [( 'Muon::CscStripPrepDataContainer' , 'StoreGateSvc+CSC_Measurements' )]
473 if flags.Detector.GeometrysTGC and flags.Detector.GeometryMM:
474 dataObjects += [( 'Muon::MMPrepDataContainer' , 'StoreGateSvc+MM_Measurements'),
475 ( 'Muon::sTgcPrepDataContainer' , 'StoreGateSvc+STGC_Measurements') ]
476 if flags.Muon.usePhaseIIGeoSetup:
477 dataObjects += [( 'MuonR4::SpacePointContainer' , 'StoreGateSvc+MuonSpacePoints' )]
478 if flags.Detector.GeometrysTGC or flags.Detector.GeometryMM:
479 dataObjects += [( 'MuonR4::SpacePointContainer' , 'StoreGateSvc+NswSpacePoints' )]
480
481 alg = CompFactory.AthViews.ViewDataVerifier( name = "VDVMuEFCB_"+name+suffix,
482 DataObjects = dataObjects)
483 acc.addEventAlgo(alg)
484 return acc
485
486
487
488def VDVPrecMuTrkCfg(flags, name, suffix):
489 acc = ComponentAccumulator()
490
491 vdvName = "VDVMuTrkLRT" if "LRT" in name else "VDVMuTrk"
492 trkname = "LRT" if "LRT" in name else ''
493 dataObjects = [( 'xAOD::IParticleContainer' , 'StoreGateSvc+'+ getIDTracks(flags, trkname) )]
494
495 if not flags.Muon.enableTrigIDtrackReuse and suffix == '':
496 dataObjects += [( 'xAOD::TrackParticleContainer' , 'StoreGateSvc+'+getIDTracks(flags, trkname, muonIDreuse=flags.Muon.enableTrigIDtrackReuse) )]
497 else:
498 if suffix != 'idReuse':
499 MuonL2CBContainer = muNames.L2CBName+suffix
500 else:
501 MuonL2CBContainer = muNames.L2CBName
502 dataObjects += [( 'xAOD::L2CombinedMuonContainer', 'StoreGateSvc+'+MuonL2CBContainer)]
503
504 if not flags.Input.isMC:
505 dataObjects += [( 'IDCInDetBSErrContainer' , 'StoreGateSvc+PixelByteStreamErrs' ),
506 ( 'IDCInDetBSErrContainer' , 'StoreGateSvc+SCT_ByteStreamErrs' )]
507
508 alg = CompFactory.AthViews.ViewDataVerifier( name = vdvName+suffix,
509 DataObjects = dataObjects)
510 acc.addEventAlgo(alg)
511 return acc
512
513
514def VDVidReuseITkCfg(flags, suffix):
515 acc = ComponentAccumulator()
516
517 vdvName = "VDVidReuseITk"
518 dataObjects = []
519
520 from TrigInDetConfig.TrigInDetConfig import InDetExtraDataObjectsFromDataPrep
521 InDetExtraDataObjectsFromDataPrep(flags, dataObjects)
522
523 alg = CompFactory.AthViews.ViewDataVerifier( name = vdvName+suffix,
524 DataObjects = dataObjects)
525 acc.addEventAlgo(alg)
526 return acc
527
528
529def muEFCBRecoSequenceCfg( flags, RoIs, name, suffix ):
530
531
532 from MuonCombinedAlgs.MuonCombinedAlgsMonitoring import MuonCreatorAlgMonitoring
533 from MuonCombinedConfig.MuonCombinedReconstructionConfig import MuonCreatorAlgCfg, MuonCombinedAlgCfg, MuonCombinedInDetCandidateAlgCfg
534 acc = ComponentAccumulator()
535
536 acc.merge(VDVEFMuCBCfg(flags, RoIs, name, suffix))
537
538 if "FS" in name:
539 #Need to run tracking for full scan chains
540 from TrigInDetConfig.TrigInDetConfig import trigInDetFastTrackingCfg
541 acc.merge(trigInDetFastTrackingCfg( flags, roisKey=RoIs, signatureName="muonFS" ))
542
543 else:
544 acc.merge(VDVPrecMuTrkCfg(flags, name, suffix))
545
546
547 #Precision Tracking
548 from TrigInDetConfig.TrigInDetConfig import trigInDetPrecisionTrackingCfg
549 #When run in a different view than FTF some data dependencies needs to be loaded through verifier
550 #Pass verifier as an argument and it will automatically append necessary DataObjects
551 #@NOTE: Don't provide any verifier if loaded in the same view as FTF
552 if isCosmic(flags) and 'LRT' not in name:
553 trackParticles=getIDTracks(flags, name, muonIDreuse=flags.Muon.enableTrigIDtrackReuse)
554 elif 'LRT' in name:
555 muLrtFlags = getFlagsForActiveConfig(flags, "muonLRT", log)
556 acc.merge(trigInDetPrecisionTrackingCfg(muLrtFlags, rois= RoIs, signatureName="muonLRT"))
557 trackParticles = getIDTracks(muLrtFlags, name, precision=True)
558 elif 'FS' in name:
559 muFsFlags = getFlagsForActiveConfig(flags, "muonFS", log)
560 acc.merge(trigInDetPrecisionTrackingCfg(muFsFlags, rois= RoIs, signatureName="muonFS", in_view=False))
561 trackParticles = getIDTracks(muFsFlags, precision=True)
562 else:
563 muFlags = getFlagsForActiveConfig(flags, "muon", log)
564 if not flags.Muon.enableTrigIDtrackReuse and suffix == '':
565 acc.merge(trigInDetPrecisionTrackingCfg(muFlags, rois= RoIs, signatureName="muon"))
566 trackParticles=getIDTracks(muFlags, name, muonIDreuse=flags.Muon.enableTrigIDtrackReuse, precision=True, suffix=suffix)
567
568 if flags.Muon.enableTrigIDtrackReuse or suffix != '':
569 if 'LRT' not in name or 'FS' not in name:
570 if flags.GeoModel.Run > LHCPeriod.Run3:
571 acc.merge(VDVidReuseITkCfg(flags, suffix))
572 if suffix != 'idReuse':
573 MuonL2CBInputContainer = muNames.L2CBName+suffix
574 else:
575 MuonL2CBInputContainer = muNames.L2CBName
576 from TrigMuonEF.TrigMuonEFConfig import GetL2CBmuonInDetTracksAlgCfg
577 acc.merge(GetL2CBmuonInDetTracksAlgCfg(flags, name="GetL2CBInDetTracks"+suffix,
578 MuonL2CBContainerLocation=MuonL2CBInputContainer,
579 IDtrackOutputLocation="HLT_IDTrack_MuonComb_FTF"+suffix))
580
581 #Make InDetCandidates
582 acc.merge(MuonCombinedInDetCandidateAlgCfg(flags, name="TrigMuonCombinedInDetCandidateAlg_"+name+suffix,TrackParticleLocation = [trackParticles], InDetCandidateLocation="InDetCandidates_"+name+suffix))
583
584
585 #MS ID combination
586 candidatesName = "MuonCandidates"
587 if 'FS' in name:
588 candidatesName = "MuonCandidates_FS"
589
590 acc.merge(MuonCombinedAlgCfg(flags,name="TrigMuonCombinedAlg_"+name+suffix, MuonCandidateLocation=candidatesName, InDetCandidateLocation="InDetCandidates_"+name+suffix))
591
592 cbMuonName = muNames.EFCBOutInName
593 if 'FS' in name:
594 cbMuonName = muNamesFS.EFCBOutInName
595 elif 'LRT' in name:
596 cbMuonName = muNamesLRT.EFCBName
597
598
599 acc.merge(MuonCreatorAlgCfg(flags, name="TrigMuonCreatorAlgCB_"+name+suffix, MuonCandidateLocation=[candidatesName], TagMaps=["muidcoTagMap"], InDetCandidateLocation="InDetCandidates_"+name+suffix,
600 MuonContainerLocation = cbMuonName+suffix, ExtrapolatedLocation = "CBExtrapolatedMuons"+suffix,
601 MSOnlyExtrapolatedLocation = "CBMSonlyExtrapolatedMuons"+suffix, CombinedLocation = "HLT_CBCombinedMuon_"+name+suffix,
602 MonTool = MuonCreatorAlgMonitoring(flags, "MuonCreatorAlgCB_"+name+suffix)))
603
604
605
606 return acc
607
608
609def VDVMuInsideOutCfg(flags, name, candidatesName, suffix):
610 acc = ComponentAccumulator()
611 dataObjects = [( 'Muon::RpcPrepDataContainer' , 'StoreGateSvc+RPC_Measurements' ),
612 ( 'Muon::TgcPrepDataContainer' , 'StoreGateSvc+TGC_MeasurementsAllBCs' ),
613 ( 'MuonCandidateCollection' , 'StoreGateSvc+'+candidatesName ),
614 ('Trk::SegmentCollection' , 'StoreGateSvc+TrackMuonSegments')]
615 if not isCosmic(flags): dataObjects += [( 'Muon::HoughDataPerSectorVec' , 'StoreGateSvc+HoughDataPerSectorVec')]
616 if flags.Detector.GeometryCSC:
617 dataObjects += [( 'Muon::CscPrepDataContainer' , 'StoreGateSvc+CSC_Clusters' )]
618 if flags.Detector.GeometrysTGC and flags.Detector.GeometryMM:
619 dataObjects += [( 'Muon::MMPrepDataContainer' , 'StoreGateSvc+MM_Measurements'),
620 ( 'Muon::sTgcPrepDataContainer' , 'StoreGateSvc+STGC_Measurements') ]
621
622 alg = CompFactory.AthViews.ViewDataVerifier( name = "VDVMuInsideOut_"+name+suffix,
623 DataObjects = dataObjects)
624 acc.addEventAlgo(alg)
625 return acc
626
627
628def muEFInsideOutRecoSequenceCfg(flags, RoIs, name, suffix ):
629
630 from MuonConfig.MuonSegmentFindingConfig import MuonSegmentFinderAlgCfg, MuonLayerHoughAlgCfg
631 from MuonCombinedAlgs.MuonCombinedAlgsMonitoring import MuonCreatorAlgMonitoring
632 from MuonCombinedConfig.MuonCombinedReconstructionConfig import MuonCreatorAlgCfg, MuGirlStauAlgCfg, StauCreatorAlgCfg, MuonInDetToMuonSystemExtensionAlgCfg, MuonInsideOutRecoAlgCfg, MuonCombinedInDetCandidateAlgCfg
633 from MuonCombinedConfig.MuonCombinedRecToolsConfig import MuonInsideOutRecoToolCfg
634
635 acc = ComponentAccumulator()
636
637 candidatesName = "MuonCandidates"
638 if 'FS' in name:
639 candidatesName = "MuonCandidates_FS"
640
641 if "Late" in name:
642
643 #Need to run hough transform at start of late muon chain
644 acc.merge(MuonLayerHoughAlgCfg(flags, "TrigMuonLayerHoughAlg_"+name,MuonPatternCombinationCollection="MuonLayerHoughCombis_"+name,
645 Key_MuonLayerHoughToolHoughDataPerSectorVec="HoughDataPerSectorVec_"+name))
646
647 acc.merge(MuonSegmentFinderAlgCfg(flags, "TrigMuonSegmentMaker_"+name,MuonLayerHoughCombisKey="MuonLayerHoughCombis_"+name))
648
649
650 # need to run precisions tracking for late muons, since we don't run it anywhere else
651 from TrigInDetConfig.TrigInDetConfig import trigInDetPrecisionTrackingCfg
652 muLateFlags = getFlagsForActiveConfig(flags, "muonLate", log)
653 acc.merge(trigInDetPrecisionTrackingCfg(muLateFlags, rois= RoIs, signatureName="muonLate", in_view=False))
654 trackParticles = muLateFlags.Tracking.ActiveConfig.tracks_IDTrig
655
656 #Make InDetCandidates
657 acc.merge(MuonCombinedInDetCandidateAlgCfg(flags, name="TrigMuonCombinedInDetCandidateAlg_"+name,TrackParticleLocation=[trackParticles],ForwardParticleLocation=trackParticles,InDetCandidateLocation="InDetCandidates_"+name,ExtendBulk=True))
658
659 else:
660 # for non-latemu chains, the decoding/hough transform is run in an earlier step
661 #Need PRD containers for inside-out reco
662 acc.merge(VDVMuInsideOutCfg(flags, name, candidatesName, suffix))
663
664 #Inside-out reconstruction
665
666 cbMuonName = muNames.EFCBInOutName+suffix
667 if 'Late' in name:
668 cbMuonName = recordable(cbMuonName+"_Late")
669 acc.merge(MuGirlStauAlgCfg(flags, name="TrigMuonLateInsideOutRecoAlg_"+name,InDetCandidateLocation="InDetCandidates_"+name))
670 acc.merge(StauCreatorAlgCfg(flags, name="TrigLateMuonCreatorAlg_"+name, TagMaps=["stauTagMap"], SegmentContainerName="", InDetCandidateLocation="InDetCandidates_"+name,
671 MuonContainerLocation=cbMuonName, MonTool=MuonCreatorAlgMonitoring(flags, "LateMuonCreatorAlg_"+name)))
672 else:
673 acc.merge(MuonInDetToMuonSystemExtensionAlgCfg(flags, name="TrigInDetMuonExtensionAlg_"+name+suffix, InputInDetCandidates="InDetCandidates_"+name+suffix,
674 WriteInDetCandidates="InDetCandidatesSystemExtended_"+name+suffix))
675 if 'RoI' in name:
676 ioTool = MuonInsideOutRecoToolCfg(flags, MuonLayerSegmentFinderTool="", InputSegments="TrackMuonSegments")
677 else:
678 ioTool = MuonInsideOutRecoToolCfg(flags)
679 InsideOutRecoTool = acc.popToolsAndMerge(ioTool)
680
681 acc.merge(MuonInsideOutRecoAlgCfg(flags, name="TrigMuonInsideOutRecoAlg_"+name+suffix,InDetCandidateLocation="InDetCandidatesSystemExtended_"+name+suffix, MuonCombinedInDetExtensionTool=InsideOutRecoTool))
682
683 acc.merge(MuonCreatorAlgCfg(flags, name="TrigMuonCreatorAlgInsideOut_"+name+suffix, MuonCandidateLocation=[candidatesName], TagMaps=["muGirlTagMap"],InDetCandidateLocation="InDetCandidates_"+name+suffix,
684 MuonContainerLocation = cbMuonName, ExtrapolatedLocation = "InsideOutCBExtrapolatedMuons"+suffix,
685 MSOnlyExtrapolatedLocation = "InsideOutCBMSOnlyExtrapolatedMuons"+suffix, CombinedLocation = "InsideOutCBCombinedMuon"+suffix, MonTool = MuonCreatorAlgMonitoring(flags, "MuonCreatorAlgInsideOut_"+name+suffix)))
686
687 return acc
688
689
690def VDVMuIsoCfg(flags, name, RoIs):
691 acc = ComponentAccumulator()
692 dataObjects = [( 'TrigRoiDescriptorCollection' , 'StoreGateSvc+'+RoIs ),
693 ( 'xAOD::MuonContainer' , 'StoreGateSvc+IsoViewMuons'+name )]
694
695 alg = CompFactory.AthViews.ViewDataVerifier( name = "efMuIsoVDV"+name,
696 DataObjects = dataObjects)
697 acc.addEventAlgo(alg)
698 return acc
699
700
701def efmuisoRecoSequenceCfg( flags, RoIs, Muons, doMSiso=False ):
702
703 name = ""
704 if doMSiso:
705 name = "MS"
706 acc = VDVMuIsoCfg(flags, name, RoIs)
707
708 acc.merge(muonIDFastTrackingSequenceCfg(flags, RoIs, "muonIso"+name ))
709
710 from TrigInDetConfig.TrigInDetConfig import trigInDetPrecisionTrackingCfg
711 muIsoFlags = getFlagsForActiveConfig(flags, "muonIso"+name, log)
712 acc.merge(trigInDetPrecisionTrackingCfg(muIsoFlags, rois= RoIs, signatureName="muonIso"+name, in_view=False))
713 trackParticles = muIsoFlags.Tracking.ActiveConfig.tracks_IDTrig
714
715 # Isolation alg
716 from TrigMuonEF.TrigMuonEFConfig import TrigMuonEFTrackIsolationAlgCfg
717 acc.merge(TrigMuonEFTrackIsolationAlgCfg(flags,name="TrigEFMuIso"+name, requireCombinedMuon = not doMSiso,
718 MuonEFContainer = Muons,IdTrackParticles = trackParticles, MuonContName = muNames.EFIsoMuonName+name,
719 ptcone02Name = muNames.EFIsoMuonName+name + ".ptcone02",
720 ptcone03Name = muNames.EFIsoMuonName+name + ".ptcone03"))
721
722 return acc
723
724def VDVLateMuCfg(flags):
725 acc = ComponentAccumulator()
726 dataObjects = [( 'xAOD::MuonRoIContainer', 'StoreGateSvc+LVL1MuonRoIsBCm2' ),
727 ( 'xAOD::MuonRoIContainer', 'StoreGateSvc+LVL1MuonRoIsBCm1' ),
728 ( 'xAOD::MuonRoIContainer', 'StoreGateSvc+LVL1MuonRoIsBCp1' ),
729 ( 'xAOD::MuonRoIContainer', 'StoreGateSvc+LVL1MuonRoIsBCp2' )]
730
731 alg = CompFactory.AthViews.ViewDataVerifier( name = "efLateMuRoIVDV",
732 DataObjects = dataObjects)
733 acc.addEventAlgo(alg)
734 return acc
735
736
738
739 acc = VDVLateMuCfg(flags)
740
741 from TrigmuRoI.TrigmuRoIConfig import TrigmuRoIConfig
742 sequenceOut = "LateMuRoIs"
743 acc.merge(TrigmuRoIConfig(flags, "TrigmuRoI", outputRoIs=sequenceOut))
744
745 return acc, sequenceOut
muEFSARecoSequenceCfg(flags, RoIs, name, useBucketFilter=False)
EFMuSADataPrepViewDataVerifierCfg(flags, RoIs, roiName)
muonIDFastTrackingSequenceCfg(flags, RoIs, name, extraLoads=None, extraLoadsForl2mtmode=None, doLRT=False, trackingMode="FTF")
muonIDCosmicTrackingSequenceCfg(flags, RoIs, name, extraLoads=None, extraLoadsForl2mtmode=None)
muonIDtrackVDVCfg(flags, name, RoIs, extraLoads=None, extraLoadsForl2mtmode=None)
muEFInsideOutRecoSequenceCfg(flags, RoIs, name, suffix)
getIDTracks(flags, name='', muonIDreuse=False, precision=False, suffix='')
muCombRecoSequenceCfg(flags, RoIs, name, l2mtmode=False, l2CBname="")
VDVMuInsideOutCfg(flags, name, candidatesName, suffix)
muFastVDVCfg(flags, RoIs, postFix, InsideOutMode, extraLoads)
muEFCBRecoSequenceCfg(flags, RoIs, name, suffix)
VDVEFMuCBCfg(flags, RoIs, name, suffix)
muFastRecoSequenceCfg(flags, RoIs, doFullScanID=False, InsideOutMode=False, extraLoads=None, l2mtmode=False, calib=False)
efmuisoRecoSequenceCfg(flags, RoIs, Muons, doMSiso=False)