ATLAS Offline Software
Loading...
Searching...
No Matches
MuonMenuSequences.py
Go to the documentation of this file.
2# Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3#
4
5from ..Config.MenuComponents import MenuSequence, SelectionCA, InViewRecoCA, InEventRecoCA
6
7from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
8from AthenaConfiguration.AccumulatorCache import AccumulatorCache
9from AthenaCommon.CFElements import parOR, seqAND
10from AthenaCommon.Logging import logging
11from AthenaConfiguration.ComponentFactory import CompFactory
12log = logging.getLogger(__name__)
13
14#muon container names (for RoI based sequences)
15from .MuonRecoSequences import muonNames
16muNames = muonNames().getNames('RoI')
17muNamesLRT = muonNames().getNames('LRT')
18muNamesFS = muonNames().getNames('FS')
19from TrigEDMConfig.TriggerEDM import recordable
20
21#-----------------------------------------------------#
22
24def muFastAlgSequenceCfg(flags, selCAName="", is_probe_leg=False):
25
26 selAccSA = SelectionCA('L2MuFastSel'+selCAName, isProbe=is_probe_leg)
27
28 viewName="L2MuFastReco"
29
30 recoSA = InViewRecoCA(name=viewName, isProbe=is_probe_leg)
31
32
34 muonflags = flags.cloneAndReplace('Muon', 'Trigger.Offline.SA.Muon')
35 from .MuonRecoSequences import muFastRecoSequenceCfg, muonDecodeCfg
36 recoSA.mergeReco(muonDecodeCfg(muonflags,RoIs=viewName+'RoIs'))
37
38 extraLoads = []
39 from TriggerMenuMT.HLT.Config.ControlFlow.MenuComponentsNaming import CFNaming
40 filterInput = [ CFNaming.inputMakerOutName('IM_'+viewName) ]
41 for decision in filterInput:
42 extraLoads += [( 'xAOD::TrigCompositeContainer', 'StoreGateSvc+%s' % decision )]
43
44 from .MuonRecoSequences import isCosmic
45 acc = ComponentAccumulator()
46 seql2sa = seqAND("L2MuonSASeq{}".format("_probe" if is_probe_leg else ""))
47 acc.addSequence(seql2sa)
48 muFastRecoSeq = muFastRecoSequenceCfg( muonflags, viewName+'RoIs', doFullScanID= isCosmic(flags), extraLoads=extraLoads )
49 sequenceOut = muNames.L2SAName
50 acc.merge(muFastRecoSeq, sequenceName=seql2sa.name)
51
52
53 seqFilter = seqAND("L2MuonMTSeq{}".format("_probe" if is_probe_leg else ""))
54 acc.addSequence(seqFilter)
55 from TrigMuonEF.TrigMuonEFConfig import MuonChainFilterAlgCfg
56 MultiTrackChains = getMultiTrackChainNames()
57 MultiTrackChainFilter = MuonChainFilterAlgCfg(muonflags, "SAFilterMultiTrackChains", ChainsToFilter = MultiTrackChains,
58 InputDecisions = filterInput,
59 L2MuFastContainer = muNames.L2SAName+"l2mtmode",
60 L2MuCombContainer = muNames.L2CBName+"l2mtmode",
61 WriteMuFast = True, NotGate = True)
62
63 acc.merge(MultiTrackChainFilter, sequenceName=seqFilter.name)
64 muFastl2mtRecoSeq = muFastRecoSequenceCfg( muonflags, viewName+'RoIs', doFullScanID= isCosmic(flags), l2mtmode=True )
65 acc.merge(muFastl2mtRecoSeq, sequenceName=seqFilter.name)
66 recoSA.mergeReco(acc)
67
68 from TrigGenericAlgs.TrigGenericAlgsConfig import ROBPrefetchingAlgCfg_Muon
69 robPrefetch = ROBPrefetchingAlgCfg_Muon(flags, nameSuffix=viewName+'_probe' if is_probe_leg else viewName)
70
71 selAccSA.mergeReco(recoSA, robPrefetchCA=robPrefetch)
72
73
74 return (selAccSA, sequenceOut)
75
76
77def muFastCalibAlgSequenceCfg(flags, is_probe_leg=False):
78
79 selAccSA = SelectionCA('L2MuFastCalibSel', isProbe=is_probe_leg)
80
81 viewName="L2MuFastCalibReco"
82
83 recoSA = InViewRecoCA(name=viewName, isProbe=is_probe_leg)
84
85
87 muonflags = flags.cloneAndReplace('Muon', 'Trigger.Offline.SA.Muon')
88 from .MuonRecoSequences import muFastRecoSequenceCfg, muonDecodeCfg
89 recoSA.mergeReco(muonDecodeCfg(muonflags,RoIs=viewName+'RoIs'))
90
91 from .MuonRecoSequences import isCosmic
92 muFastRecoSeq = muFastRecoSequenceCfg( muonflags, viewName+'RoIs', doFullScanID= isCosmic(flags), calib=True )
93 sequenceOut = muNames.L2SAName+"Calib"
94 recoSA.mergeReco(muFastRecoSeq)
95
96
97 from TrigGenericAlgs.TrigGenericAlgsConfig import ROBPrefetchingAlgCfg_Muon
98 robPrefetchAlg = ROBPrefetchingAlgCfg_Muon(flags, nameSuffix=viewName+'_probe' if is_probe_leg else viewName)
99 selAccSA.mergeReco(recoSA, robPrefetchCA=robPrefetchAlg)
100
101 return (selAccSA, sequenceOut)
102
103
104@AccumulatorCache
105def muFastSequenceGenCfg(flags, is_probe_leg=False):
106
107 (selAcc, sequenceOut) = muFastAlgSequenceCfg(flags, "", is_probe_leg)
108
109 from TrigMuonHypo.TrigMuonHypoConfig import TrigMufastHypoAlgCfg, TrigMufastHypoToolFromDict
110 l2saHypo = TrigMufastHypoAlgCfg( flags,
111 name = 'TrigL2MufastHypoAlg',
112 MuonL2SAInfoFromMuFastAlg = sequenceOut)
113
114 selAcc.addHypoAlgo(l2saHypo)
115
116 l2saSequence = MenuSequence(flags, selAcc,
117 HypoToolGen = TrigMufastHypoToolFromDict)
118
119
120 return l2saSequence
121
122
123@AccumulatorCache
124def muFastCalibSequenceGenCfg(flags, is_probe_leg=False):
125
126 (selAcc, sequenceOut) = muFastCalibAlgSequenceCfg(flags, is_probe_leg)
127
128 from TrigMuonHypo.TrigMuonHypoConfig import TrigMufastHypoAlgCfg, TrigMufastHypoToolFromDict
129 l2saHypo = TrigMufastHypoAlgCfg( flags,
130 name = 'TrigL2MufastCalibHypoAlg',
131 MuonL2SAInfoFromMuFastAlg = sequenceOut)
132
133 selAcc.addHypoAlgo(l2saHypo)
134
135 l2saSequence = MenuSequence(flags, selAcc,
136 HypoToolGen = TrigMufastHypoToolFromDict)
137
138
139 return l2saSequence
140
141
142@AccumulatorCache
143def mul2mtSAOvlpRmSequenceGenCfg(flags, is_probe_leg=False):
144
145 (selAcc, sequenceOut) = muFastAlgSequenceCfg(flags, "mt", is_probe_leg)
146
147 from TrigMuonHypo.TrigMuonHypoConfig import TrigMufastHypoAlgCfg, TrigMufastHypoToolFromDict
148 l2saHypo = TrigMufastHypoAlgCfg( flags,
149 name = 'TrigL2mtMufastHypoAlg',
150 MuonL2SAInfoFromMuFastAlg = muNames.L2SAName+"l2mtmode")
151
152 selAcc.addHypoAlgo(l2saHypo)
153
154 l2saSequence = MenuSequence(flags, selAcc,
155 HypoToolGen = TrigMufastHypoToolFromDict)
156
157
158 return l2saSequence
159
160
161
162#-----------------------------------------------------#
163
165
166def muCombAlgSequenceCfg(flags, selCAName="", is_probe_leg=False, trackingMode = "FTF"):
167
169 from .MuonRecoSequences import muFastRecoSequenceCfg, muCombRecoSequenceCfg, muonIDFastTrackingSequenceCfg, muonIDCosmicTrackingSequenceCfg, isCosmic
170
171 selAccCB = SelectionCA('L2MuCombSel'+selCAName, isProbe=is_probe_leg)
172
173 viewName="Cosmic" if isCosmic(flags) else "L2MuCombReco"
174
175 ViewCreatorFetchFromViewROITool=CompFactory.ViewCreatorFetchFromViewROITool
176 #temporarily using different view names until L2 SA sequence is migrated to CA
177 roiTool = ViewCreatorFetchFromViewROITool(RoisWriteHandleKey="HLT_Roi_L2SAMuon", InViewRoIs = muNames.L2forIDName)
178 requireParentView = True
179
180 recoCB = InViewRecoCA(name=viewName, RoITool = roiTool, RequireParentView = requireParentView, isProbe=is_probe_leg)
181 muonflags = flags.cloneAndReplace('Muon', 'Trigger.Offline.SA.Muon')
182
183
184 sequenceOut = muNames.L2CBName
185
186 acc = ComponentAccumulator()
187 from TrigMuonEF.TrigMuonEFConfig import MuonChainFilterAlgCfg
188
189
190 from TriggerMenuMT.HLT.Config.ControlFlow.MenuComponentsNaming import CFNaming
191 filterInput = [ CFNaming.inputMakerOutName('IM_'+viewName) ]
192 extraLoads = []
193 for decision in filterInput:
194 extraLoads += [( 'xAOD::TrigCompositeContainer' , 'StoreGateSvc+%s' % decision )]
195
196 if isCosmic(flags):
197 recoCB.mergeReco(muonIDCosmicTrackingSequenceCfg( flags, viewName+"RoIs" , "cosmics", extraLoads, extraLoads ))
198 else:
199 recoCB.mergeReco(muonIDFastTrackingSequenceCfg(flags, viewName+"RoIs", "muon", extraLoads, extraLoads, trackingMode = trackingMode ))
200
201 # for nominal muComb
202 seql2cb = seqAND("l2muCombFilterSequence{}".format("_probe" if is_probe_leg else ""))
203 acc.addSequence(seql2cb)
204
205 #Filter algorithm to run muComb only if non-Bphysics muon chains are active
206 muonChainFilter = MuonChainFilterAlgCfg(muonflags, "FilterBphysChains", ChainsToFilter = getBphysChainNames(),
207 InputDecisions = filterInput,
208 L2MuCombContainer = sequenceOut,
209 WriteMuComb = True, WriteMuFast=False)
210 acc.merge(muonChainFilter, sequenceName=seql2cb.name)
211
212
213
214 acc.merge(muCombRecoSequenceCfg(flags, viewName+"RoIs", "FTF", l2mtmode=False, l2CBname = sequenceOut ), sequenceName=seql2cb.name)
215
216 # for L2 multi-track SA
217 MultiTrackChains = getMultiTrackChainNames()
218 MultiTrackChainFilter = MuonChainFilterAlgCfg(muonflags, "CBFilterMultiTrackChains", ChainsToFilter = MultiTrackChains,
219 InputDecisions = filterInput,
220 L2MuFastContainer = muNames.L2SAName+"l2mtmode",
221 L2MuCombContainer = muNames.L2CBName+"l2mtmode",
222 WriteMuComb = True, NotGate = True)
223
224
225 seql2cbmt = seqAND("l2mtmuCombFilterSequence{}".format("_probe" if is_probe_leg else ""))
226 acc.addSequence(seql2cbmt)
227 acc.merge(MultiTrackChainFilter, sequenceName=seql2cbmt.name)
228
229
230 sequenceOutL2mtCB = muNames.L2CBName+"l2mtmode"
231 acc.merge(muCombRecoSequenceCfg(flags, viewName+"RoIs", "FTF", l2mtmode=True, l2CBname = sequenceOutL2mtCB ), sequenceName=seql2cbmt.name)
232
233
234
235 # for Inside-out L2SA
236 seql2iocb = seqAND("l2muFastIOFilterSequence{}".format("_probe" if is_probe_leg else ""))
237 acc.addSequence(seql2iocb)
238
239 from .MuonRecoSequences import isCosmic
240 sequenceOutL2SAIO = muNames.L2SAName+"IOmode"
241 insideoutMuonChainFilter = MuonChainFilterAlgCfg("FilterInsideOutMuonChains", ChainsToFilter = getInsideOutMuonChainNames(),
242 InputDecisions = filterInput,
243 L2MuFastContainer = sequenceOutL2SAIO, L2MuCombContainer = muNames.L2CBName+"IOmode",
244 WriteMuFast = True, WriteMuComb = True, NotGate=True)
245
246 acc.merge(insideoutMuonChainFilter, sequenceName=seql2iocb.name)
247 acc.merge(muFastRecoSequenceCfg(muonflags, viewName+"RoIs", doFullScanID=isCosmic(flags) , InsideOutMode=True), sequenceName=seql2iocb.name)
248 recoCB.mergeReco(acc)
249
250
251 from TrigGenericAlgs.TrigGenericAlgsConfig import ROBPrefetchingAlgCfg_Si
252 robPrefetchAlg = ROBPrefetchingAlgCfg_Si(flags, nameSuffix=viewName+'_probe' if is_probe_leg else viewName)
253 selAccCB.mergeReco(recoCB, robPrefetchCA=robPrefetchAlg)
254
255 return (selAccCB, sequenceOut)
256
257
258@AccumulatorCache
259def muCombSequenceGenCfg(flags, is_probe_leg=False, trackingMode = "FTF"):
260
261 (selAcc, sequenceOut) = muCombAlgSequenceCfg(flags, "", is_probe_leg, trackingMode = trackingMode)
262
263 from TrigMuonHypo.TrigMuonHypoConfig import TrigmuCombHypoAlgCfg, TrigmuCombHypoToolFromDict
264 l2cbHypo = TrigmuCombHypoAlgCfg( flags,
265 name = 'TrigL2MuCBHypoAlg',
266 MuonL2CBInfoFromMuCombAlg = sequenceOut,
267 )
268
269 selAcc.addHypoAlgo(l2cbHypo)
270
271 l2cbSequence = MenuSequence(flags, selAcc,
272 HypoToolGen = TrigmuCombHypoToolFromDict)
273
274
275 return l2cbSequence
276
277
278@AccumulatorCache
279def mul2IOOvlpRmSequenceGenCfg(flags, is_probe_leg=False, trackingMode = "FTF"):
280
281
282 (selAcc, sequenceOut) = muCombAlgSequenceCfg(flags, "IO", is_probe_leg, trackingMode = trackingMode)
283
284 from TrigMuonHypo.TrigMuonHypoConfig import TrigmuCombHypoAlgCfg, Trigl2IOHypoToolwORFromDict
285 l2cbHypo = TrigmuCombHypoAlgCfg( flags,
286 name = 'TrigL2MuCBIOHypoAlg',
287 MuonL2CBInfoFromMuCombAlg = sequenceOut+"IOmode",
288 )
289
290 selAcc.addHypoAlgo(l2cbHypo)
291
292 l2cbSequence = MenuSequence(flags, selAcc,
293 HypoToolGen = Trigl2IOHypoToolwORFromDict)
294
295 return l2cbSequence
296
297
298def muCombLRTAlgSequenceCfg(flags, is_probe_leg=False):
299
300 selAcc = SelectionCA('l2muCombLRT', isProbe=is_probe_leg)
301
302 viewName="l2muCombLRT"
303 ViewCreatorCenteredOnIParticleTool=CompFactory.ViewCreatorCentredOnIParticleROITool
304
305 roiTool = ViewCreatorCenteredOnIParticleTool(RoisWriteHandleKey = recordable("HLT_Roi_L2SAMuon_LRT"),
306 RoIZedWidth=flags.Trigger.InDetTracking.muonLRT.zedHalfWidth,
307 RoIEtaWidth=flags.Trigger.InDetTracking.muonLRT.etaHalfWidth,
308 RoIPhiWidth=flags.Trigger.InDetTracking.muonLRT.phiHalfWidth,
309 UseZedPosition=False)
310 requireParentView = True
311
312 recol2cb = InViewRecoCA(name=viewName, RoITool = roiTool, RequireParentView = requireParentView, isProbe=is_probe_leg)
313
314
315 from .MuonRecoSequences import muCombRecoSequenceCfg, muonIDFastTrackingSequenceCfg
316 sequenceOut = muNamesLRT.L2CBName
317 recol2cb.mergeReco(muCombRecoSequenceCfg(flags, viewName+"RoIs", "FTF_LRT", l2CBname = sequenceOut ))
318
319 extraLoads = []
320
321 recol2cb.mergeReco(muonIDFastTrackingSequenceCfg(flags, viewName+"RoIs" , "muonLRT", extraLoads, doLRT=True ))
322
323
324 from TrigGenericAlgs.TrigGenericAlgsConfig import ROBPrefetchingAlgCfg_Si
325 robPrefetchAlg = ROBPrefetchingAlgCfg_Si(flags, nameSuffix=viewName+'_probe' if is_probe_leg else viewName)
326 selAcc.mergeReco(recol2cb, robPrefetchAlg)
327
328
329 return (selAcc, sequenceOut)
330
331
332@AccumulatorCache
333def muCombLRTSequenceGenCfg(flags, is_probe_leg=False, trackingMode = "FTF"):
334
335 (selAcc, sequenceOut) = muCombLRTAlgSequenceCfg(flags, is_probe_leg)
336
337 from TrigMuonHypo.TrigMuonHypoConfig import TrigmuCombHypoAlgCfg, TrigmuCombHypoToolFromDict
338 l2cbHypo = TrigmuCombHypoAlgCfg( flags,
339 name = 'TrigL2MuCBLRTHypoAlg',
340 MuonL2CBInfoFromMuCombAlg = sequenceOut,
341 RoILinkName = "l2lrtroi",
342 )
343
344 selAcc.addHypoAlgo(l2cbHypo)
345
346 l2cbSequence = MenuSequence(flags, selAcc,
347 HypoToolGen = TrigmuCombHypoToolFromDict)
348
349
350 return l2cbSequence
351
352
353@AccumulatorCache
354def muCombOvlpRmSequenceGenCfg(flags, is_probe_leg=False, trackingMode = "FTF"):
355
356 (selAcc, sequenceOut) = muCombAlgSequenceCfg(flags, "", is_probe_leg, trackingMode = trackingMode)
357
358 from TrigMuonHypo.TrigMuonHypoConfig import TrigmuCombHypoAlgCfg, TrigmuCombHypoToolwORFromDict
359 l2cbHypo = TrigmuCombHypoAlgCfg( flags,
360 name = 'TrigL2MuCBHypoAlg',
361 MuonL2CBInfoFromMuCombAlg = sequenceOut,
362 )
363
364 selAcc.addHypoAlgo(l2cbHypo)
365
366 l2cbSequence = MenuSequence(flags, selAcc,
367 HypoToolGen = TrigmuCombHypoToolwORFromDict)
368
369 return l2cbSequence
370
371
372@AccumulatorCache
373def mul2mtCBOvlpRmSequenceGenCfg(flags, is_probe_leg=False, trackingMode = "FTF"):
374
375 (selAcc, sequenceOut) = muCombAlgSequenceCfg(flags, "mt", is_probe_leg, trackingMode = trackingMode)
376
377 from TrigMuonHypo.TrigMuonHypoConfig import TrigmuCombHypoAlgCfg, Trigl2mtCBHypoToolwORFromDict
378 l2cbHypo = TrigmuCombHypoAlgCfg( flags,
379 name = 'TrigL2mtMuCBHypoAlg',
380 MuonL2CBInfoFromMuCombAlg = sequenceOut+"l2mtmode",
381 )
382
383 selAcc.addHypoAlgo(l2cbHypo)
384
385 l2cbSequence = MenuSequence(flags, selAcc,
386 HypoToolGen = Trigl2mtCBHypoToolwORFromDict)
387
388 return l2cbSequence
389
390
391
394
395def muEFSAAlgSequenceCfg(flags, is_probe_leg=False, useBucketFilter=False):
396 suffix = "_mlbkt" if useBucketFilter else ""
397 selAccMS = SelectionCA(f'EFMuMSSel_RoI{suffix}', isProbe=is_probe_leg)
398
399 viewName=f"EFMuMSReco_RoI{suffix}"
400 ViewCreatorFetchFromViewROITool=CompFactory.ViewCreatorFetchFromViewROITool
401 #temporarily using different view names until L2 SA sequence is migrated to CA
402 roiTool = ViewCreatorFetchFromViewROITool(RoisWriteHandleKey=f"HLT_Roi_L2SAMuonForEF{suffix}", InViewRoIs = "forMS", ViewToFetchFrom = "L2MuFastRecoViews")
403 requireParentView = True
404
405 recoMS = InViewRecoCA(name=viewName, RoITool = roiTool, RequireParentView = requireParentView, isProbe=is_probe_leg)
406
407
408 #Clone and replace offline flags so we can set muon trigger specific values
409 muonflags = flags.cloneAndReplace('Muon', 'Trigger.Offline.SA.Muon')
410 from .MuonRecoSequences import muEFSARecoSequenceCfg, muonDecodeCfg
411 #Run decoding again since we are using updated RoIs
412 recoMS.mergeReco(muonDecodeCfg(muonflags,RoIs=viewName+"RoIs"))
413
414 muEFSARecoSequenceAcc, sequenceOut = muEFSARecoSequenceCfg(muonflags, viewName+'RoIs', f'RoI{suffix}', useBucketFilter=useBucketFilter)
415 recoMS.mergeReco(muEFSARecoSequenceAcc)
416
417 from TrigGenericAlgs.TrigGenericAlgsConfig import ROBPrefetchingAlgCfg_Muon
418 prefetch=ROBPrefetchingAlgCfg_Muon(flags, nameSuffix=viewName+'_probe' if is_probe_leg else viewName)
419 selAccMS.mergeReco(recoMS, robPrefetchCA=prefetch)
420
421 return (selAccMS, sequenceOut)
422
423
424@AccumulatorCache
425def muEFSASequenceGenCfg(flags, is_probe_leg=False, useBucketFilter=False):
426
427 (selAcc, sequenceOut) = muEFSAAlgSequenceCfg(flags, is_probe_leg, useBucketFilter=useBucketFilter)
428
429 from TrigMuonHypo.TrigMuonHypoConfig import TrigMuonEFHypoAlgCfg, TrigMuonEFMSonlyHypoToolFromDict
430 suffix = "_mlbkt" if useBucketFilter else ""
431 efmuMSHypo = TrigMuonEFHypoAlgCfg( flags,
432 name = f'TrigMuonEFMSonlyHypo_RoI{suffix}',
433 MuonDecisions = sequenceOut,
434 IncludeSAmuons=True)
435
436 selAcc.addHypoAlgo(efmuMSHypo)
437
438 efmuMSSequence = MenuSequence(flags, selAcc,
439 HypoToolGen = TrigMuonEFMSonlyHypoToolFromDict)
440
441
442 return efmuMSSequence
443
444
445
448
449def muEFCBAlgSequenceCfg(flags, suffix, selCAName='', is_probe_leg=False):
450
451 from .MuonRecoSequences import isCosmic
452 selAccCB = SelectionCA('EFMuCBSel_RoI'+selCAName+suffix, isProbe=is_probe_leg)
453
454 viewName="EFMuCBReco_RoI"+suffix if not isCosmic(flags) else "CosmicEFCB"
455 ViewCreatorTool=CompFactory.ViewCreatorNamedROITool
456 #temporarily using different view names until L2 SA sequence is migrated to CA
457 roiTool = ViewCreatorTool(ROILinkName="l2cbroi")
458
459 recoCB = InViewRecoCA(name=viewName, RoITool = roiTool, RequireParentView = True, isProbe=is_probe_leg, mergeUsingFeature=True)
460
461 #By default the EFCB sequence will run both outside-in and
462 #(if zero muons are found) inside-out reconstruction
463 from TrigMuonEF.TrigMuonEFConfig import MuonFilterAlgCfg, MergeEFMuonsAlgCfg
464 from .MuonRecoSequences import muEFCBRecoSequenceCfg, muEFInsideOutRecoSequenceCfg
465
466 acc = ComponentAccumulator()
467 seqmerge = seqAND("muonCBInsideOutMergingSequence{}{}".format(suffix, "_probe" if is_probe_leg else ""))
468 acc.addSequence(seqmerge)
469
470 #outside-in reco sequence
471 acc2 = ComponentAccumulator()
472 seqreco = parOR("muonEFCBandInsideOutRecoSequence{}{}".format(suffix, "_probe" if is_probe_leg else ""))
473 acc2.addSequence(seqreco)
474 muonflagsCB = flags.cloneAndReplace('Muon', 'Trigger.Offline.Muon').cloneAndReplace('MuonCombined', 'Trigger.Offline.Combined.MuonCombined')
475 acc2.merge(muEFCBRecoSequenceCfg(muonflagsCB, viewName+"RoIs", "RoI", suffix ), sequenceName=seqreco.name)
476 sequenceOutCB = muNames.EFCBOutInName+suffix
477
478 #Algorithm to filter events with no muons
479 acc3 = ComponentAccumulator()
480 seqfilter = seqAND("muonEFInsideOutSequence{}{}".format(suffix, "_probe" if is_probe_leg else ""))
481 acc3.addSequence(seqfilter)
482 muonFilter = MuonFilterAlgCfg(flags, name="FilterZeroMuons"+suffix, MuonContainerLocation=sequenceOutCB)
483 acc3.merge(muonFilter, sequenceName=seqfilter.name)
484
485 #inside-out reco sequence - runs only if filter is passed
486 acc4 = ComponentAccumulator()
487 seqio = parOR("efmuInsideOutViewNode_RoI{}{}".format(suffix, "_probe" if is_probe_leg else ""))
488 acc4.addSequence(seqio)
489 acc4.merge(muEFInsideOutRecoSequenceCfg(muonflagsCB, viewName+"RoIs", "RoI", suffix), sequenceName=seqio.name+suffix)
490 sequenceOutInsideOut = muNames.EFCBInOutName+suffix
491
492 acc3.merge(acc4, sequenceName=seqfilter.name)
493 acc2.merge(acc3, sequenceName=seqreco.name)
494 acc.merge(acc2, sequenceName=seqmerge.name)
495 #Merge muon containers from outside-in and inside-out reco
496 if suffix != '':
497 mergedMuonOutputLocation = recordable(muNames.EFCBName+'_'+suffix)
498 else:
499 mergedMuonOutputLocation = muNames.EFCBName
500 mergeMuons = MergeEFMuonsAlgCfg(flags, name="MergeEFMuons"+suffix, MuonCBContainerLocation=sequenceOutCB,
501 MuonInsideOutContainerLocation=sequenceOutInsideOut, MuonOutputLocation=mergedMuonOutputLocation)
502
503 acc.merge(mergeMuons, sequenceName=seqmerge.name)
504 recoCB.mergeReco(acc)
505 selAccCB.mergeReco(recoCB)
506
507 return (selAccCB, muNames.EFCBName)
508
509
510@AccumulatorCache
511def muEFCBSequenceGenCfg(flags, is_probe_leg=False):
512
513 (selAcc, sequenceOut) = muEFCBAlgSequenceCfg(flags, '', '', is_probe_leg)
514
515 from TrigMuonHypo.TrigMuonHypoConfig import TrigMuonEFHypoAlgCfg, TrigMuonEFCombinerHypoToolFromDict
516 efmuCBHypo = TrigMuonEFHypoAlgCfg( flags,
517 name = 'TrigMuonEFCombinerHypoAlg',
518 MuonDecisions = sequenceOut,
519 MapToPreviousDecisions=True)
520
521 selAcc.addHypoAlgo(efmuCBHypo)
522
523 efmuCBSequence = MenuSequence(flags, selAcc,
524 HypoToolGen = TrigMuonEFCombinerHypoToolFromDict)
525
526 return efmuCBSequence
527
528
529@AccumulatorCache
530def muEFCBl2ioSequenceGenCfg(flags, is_probe_leg=False):
531
532 (selAcc, sequenceOut) = muEFCBAlgSequenceCfg(flags,'IOmode', '', is_probe_leg)
533
534 from TrigMuonHypo.TrigMuonHypoConfig import TrigMuonEFHypoAlgCfg, TrigMuonEFCombinerHypoToolFromDict
535 efmuCBHypo = TrigMuonEFHypoAlgCfg( flags,
536 name = 'TrigMuonEFCombinerHypoAlgIOmode',
537 MuonDecisions = sequenceOut+'_IOmode',
538 MapToPreviousDecisions=True)
539
540 selAcc.addHypoAlgo(efmuCBHypo)
541
542 efmuCBSequence = MenuSequence(flags, selAcc,
543 HypoToolGen = TrigMuonEFCombinerHypoToolFromDict)
544
545 return efmuCBSequence
546
547
548@AccumulatorCache
549def muEFCBl2mtSequenceGenCfg(flags, is_probe_leg=False):
550
551 (selAcc, sequenceOut) = muEFCBAlgSequenceCfg(flags,'l2mtmode', '', is_probe_leg)
552
553 from TrigMuonHypo.TrigMuonHypoConfig import TrigMuonEFHypoAlgCfg, TrigMuonEFCombinerHypoToolFromDict
554 efmuCBHypo = TrigMuonEFHypoAlgCfg( flags,
555 name = 'TrigMuonEFCombinerHypoAlgl2mtmode',
556 MuonDecisions = sequenceOut+'_l2mtmode',
557 MapToPreviousDecisions=True)
558
559 selAcc.addHypoAlgo(efmuCBHypo)
560
561 efmuCBSequence = MenuSequence(flags, selAcc,
562 HypoToolGen = TrigMuonEFCombinerHypoToolFromDict)
563
564 return efmuCBSequence
565
566
567@AccumulatorCache
568def muEFCBidReuseSequenceGenCfg(flags, is_probe_leg=False):
569
570 (selAcc, sequenceOut) = muEFCBAlgSequenceCfg(flags, 'idReuse', '', is_probe_leg)
571
572 from TrigMuonHypo.TrigMuonHypoConfig import TrigMuonEFHypoAlgCfg, TrigMuonEFCombinerHypoToolFromDict
573 efmuCBHypo = TrigMuonEFHypoAlgCfg( flags,
574 name = 'TrigMuonEFCombinerHypoAlgidReuse',
575 MuonDecisions = sequenceOut+'_idReuse',
576 MapToPreviousDecisions=True)
577
578 selAcc.addHypoAlgo(efmuCBHypo)
579
580 efmuCBSequence = MenuSequence(flags, selAcc,
581 HypoToolGen = TrigMuonEFCombinerHypoToolFromDict)
582
583 return efmuCBSequence
584
585
586@AccumulatorCache
587def muEFCBIDperfSequenceGenCfg(flags, is_probe_leg=False):
588
589 (selAcc, sequenceOut) = muEFCBAlgSequenceCfg(flags, '', 'idperf', is_probe_leg)
590
591 from TrigMuonHypo.TrigMuonHypoConfig import TrigMuonEFHypoAlgCfg, TrigMuonEFCombinerHypoToolFromDict
592 efmuCBHypo = TrigMuonEFHypoAlgCfg( flags,
593 name = 'TrigMuonEFCombinerIDperfHypoAlg',
594 IncludeSAmuons=True,
595 MuonDecisions = sequenceOut,
596 MapToPreviousDecisions=True)
597
598 selAcc.addHypoAlgo(efmuCBHypo)
599
600 efmuCBSequence = MenuSequence(flags, selAcc,
601 HypoToolGen = TrigMuonEFCombinerHypoToolFromDict)
602
603 return efmuCBSequence
604
605
606@AccumulatorCache
607def muEFIDtpSequenceGenCfg(flags, is_probe_leg=False):
608
609 (selAcc, sequenceOut) = muEFCBAlgSequenceCfg(flags, '', 'idtp', is_probe_leg)
610
611 from TrigMuonHypo.TrigMuonHypoConfig import TrigMuonEFIdtpHypoAlgCfg, TrigMuonEFIdtpHypoToolFromDict
612 efmuCBHypo = TrigMuonEFIdtpHypoAlgCfg( flags,
613 name = 'TrigMuonEFIdtpHypoAlg')
614
615
616 selAcc.addHypoAlgo(efmuCBHypo)
617
618 efmuCBSequence = MenuSequence(flags, selAcc,
619 HypoToolGen = TrigMuonEFIdtpHypoToolFromDict)
620
621 return efmuCBSequence
622
623
624def muEFCBLRTAlgSequenceCfg(flags, selCAName='', is_probe_leg=False):
625
626 selAccCB = SelectionCA('EFMuCBLRTSel'+selCAName, isProbe=is_probe_leg)
627
628 viewName="EFMuCBLRTReco"
629 ViewCreatorTool=CompFactory.ViewCreatorNamedROITool
630 roiTool = ViewCreatorTool(ROILinkName="l2lrtroi")
631
632 recoCB = InViewRecoCA(name=viewName, RoITool = roiTool, RequireParentView = True, mergeUsingFeature=True, isProbe=is_probe_leg)
633
634 from .MuonRecoSequences import muEFCBRecoSequenceCfg
635
636 #outside-in reco sequence
637 muonflagsCB = flags.cloneAndReplace('Muon', 'Trigger.Offline.Muon').cloneAndReplace('MuonCombined', 'Trigger.Offline.Combined.MuonCombined')
638 recoCB.mergeReco(muEFCBRecoSequenceCfg(muonflagsCB, viewName+"RoIs", "LRT", ''))
639 sequenceOut = muNamesLRT.EFCBName
640
641 selAccCB.mergeReco(recoCB)
642
643 return (selAccCB, sequenceOut)
644
645
646@AccumulatorCache
647def muEFCBLRTSequenceGenCfg(flags, is_probe_leg=False):
648
649 (selAcc, sequenceOut) = muEFCBLRTAlgSequenceCfg(flags, '', is_probe_leg)
650
651 from TrigMuonHypo.TrigMuonHypoConfig import TrigMuonEFHypoAlgCfg, TrigMuonEFCombinerHypoToolFromDict
652 efmuCBLRTHypo = TrigMuonEFHypoAlgCfg( flags,
653 name = 'TrigMuonEFCombinerHypoAlgLRT',
654 MuonDecisions = sequenceOut,
655 MapToPreviousDecisions=True)
656
657
658 selAcc.addHypoAlgo(efmuCBLRTHypo)
659
660 efmuCBSequence = MenuSequence(flags, selAcc,
661 HypoToolGen = TrigMuonEFCombinerHypoToolFromDict)
662
663 return efmuCBSequence
664
665
666@AccumulatorCache
667def muEFCBLRTIDperfSequenceGenCfg(flags, is_probe_leg=False):
668
669 (selAcc, sequenceOut) = muEFCBLRTAlgSequenceCfg(flags, 'idperf', is_probe_leg)
670
671 from TrigMuonHypo.TrigMuonHypoConfig import TrigMuonEFHypoAlgCfg, TrigMuonEFCombinerHypoToolFromDict
672 efmuCBLRTHypo = TrigMuonEFHypoAlgCfg( flags,
673 name = 'TrigMuonEFCombinerHypoAlgLRTIDPerf',
674 IncludeSAmuons=True,
675 MuonDecisions = sequenceOut,
676 MapToPreviousDecisions=True)
677
678
679 selAcc.addHypoAlgo(efmuCBLRTHypo)
680
681 efmuCBSequence = MenuSequence(flags, selAcc,
682 HypoToolGen = TrigMuonEFCombinerHypoToolFromDict)
683
684 return efmuCBSequence
685
686
687
690
692
693 selAccMS = SelectionCA('EFMuMSSel_FS')
694
695 viewName="EFMuMSReco_FS"
696 ViewCreatorFSROITool=CompFactory.ViewCreatorFSROITool
697 roiTool = ViewCreatorFSROITool(RoisWriteHandleKey="MuonFS_RoIs")
698 requireParentView = False
699
700 recoMS = InViewRecoCA(name=viewName, RoITool = roiTool, RequireParentView = requireParentView)
701
702
703 #Clone and replace offline flags so we can set muon trigger specific values
704 muonflags = flags.cloneAndReplace('Muon', 'Trigger.Offline.SA.Muon')
705 from .MuonRecoSequences import muEFSARecoSequenceCfg, muonDecodeCfg
706 recoMS.mergeReco(muonDecodeCfg(muonflags,RoIs=recoMS.name+"RoIs"))
707
708 muEFSARecoSequenceAcc, sequenceOut = muEFSARecoSequenceCfg(muonflags, recoMS.name+'RoIs', 'FS' )
709 recoMS.mergeReco(muEFSARecoSequenceAcc)
710
711 selAccMS.mergeReco(recoMS)
712
713 return (selAccMS, sequenceOut)
714
715
716@AccumulatorCache
717def muEFSAFSSequenceGenCfg(flags, is_probe_leg=False):
718
719 (selAcc, sequenceOut) = muEFSAFSAlgSequenceCfg(flags)
720
721 from TrigMuonHypo.TrigMuonHypoConfig import TrigMuonEFHypoAlgCfg, TrigMuonEFMSonlyHypoToolFromName
722
723 efmuMSHypo = TrigMuonEFHypoAlgCfg( flags,
724 name = 'TrigMuonEFMSonlyHypo_FS',
725 MuonDecisions = sequenceOut,
726 IncludeSAmuons=True)
727
728 selAcc.addHypoAlgo(efmuMSHypo)
729
730 efmuMSSequence = MenuSequence(flags, selAcc,
731 HypoToolGen = TrigMuonEFMSonlyHypoToolFromName)
732
733
734 return efmuMSSequence
735
736
737
740
741def muEFCBFSAlgSequenceCfg(flags, is_probe_leg=False):
742
743 selAccCB = SelectionCA('EFMuCBSel_FS', isProbe=is_probe_leg)
744
745 viewName="EFMuCBReco_FS"
746 #temporarily using different view names until L2 SA sequence is migrated to CA
747 roiTool = CompFactory.ViewCreatorCentredOnIParticleROITool(RoisWriteHandleKey = "MuonCandidates_FS_ROIs")
748
749 recoCB = InViewRecoCA(name=viewName, RoITool = roiTool, RequireParentView = True, isProbe=is_probe_leg, mergeUsingFeature=True,
750 PlaceMuonInView=True, InViewMuons = "InViewMuons", InViewMuonCandidates = "MuonCandidates_FS")
751
752
753 from TrigMuonEF.TrigMuonEFConfig import MuonFilterAlgCfg, MergeEFMuonsAlgCfg
754 from .MuonRecoSequences import muEFCBRecoSequenceCfg, muEFInsideOutRecoSequenceCfg
755 #outside-in reco sequence
756 acc = ComponentAccumulator()
757 seqmerge = seqAND("muonCBInsideOutMergingSequenceEFCBFS{}".format("_probe" if is_probe_leg else ""))
758 acc.addSequence(seqmerge)
759
760 muonflagsCB = flags.cloneAndReplace('Muon', 'Trigger.Offline.Muon').cloneAndReplace('MuonCombined', 'Trigger.Offline.Combined.MuonCombined')
761 acc2 = ComponentAccumulator()
762 seqreco = parOR("muonEFCBFSInsideOutRecoSequence{}".format("_probe" if is_probe_leg else ""))
763 acc2.addSequence(seqreco)
764
765 acc2.merge(muEFCBRecoSequenceCfg(muonflagsCB, viewName+"RoIs", "FS", ''), sequenceName=seqreco.name)
766 sequenceOutCB = muNamesFS.EFCBOutInName
767
768 #Alg fitltering for no muon events
769 muonFilter = MuonFilterAlgCfg(flags, name="FilterZeroMuonsEFCBFS", MuonContainerLocation = sequenceOutCB)
770
771 acc3 = ComponentAccumulator()
772 seqfilt = seqAND("muonEFCBFSInsideOutSequence{}".format("_probe" if is_probe_leg else ""))
773 acc3.addSequence(seqfilt)
774 acc3.merge(muonFilter, sequenceName=seqfilt.name)
775
776
777 #If filter passed
778 acc4 = ComponentAccumulator()
779 seqio = parOR("efmuInsideOutViewNode_FS{}".format("_probe" if is_probe_leg else ""))
780 acc4.addSequence(seqio)
781
782 muonEFInsideOutRecoAlgSequence = muEFInsideOutRecoSequenceCfg(muonflagsCB, viewName+"RoIs", "FS", '' )
783 acc4.merge(muonEFInsideOutRecoAlgSequence, sequenceName=seqio.name)
784 acc3.merge(acc4, sequenceName=seqfilt.name)
785 acc2.merge(acc3, sequenceName=seqreco.name)
786 acc.merge(acc2, sequenceName=seqmerge.name)
787 sequenceOutInsideOut = muNamesFS.EFCBInOutName
788
789 #Merge muon containers from O-I and I-O reco
790 mergeMuons = MergeEFMuonsAlgCfg(flags, name="MergeEFCBFSMuons", MuonCBContainerLocation = sequenceOutCB,
791 MuonInsideOutContainerLocation = sequenceOutInsideOut, MuonOutputLocation = muNamesFS.EFCBName)
792 acc.merge(mergeMuons, sequenceName=seqmerge.name)
793 recoCB.mergeReco(acc)
794
795 sequenceOut = muNamesFS.EFCBName
796 selAccCB.mergeReco(recoCB)
797
798 return (selAccCB, sequenceOut)
799
800
801@AccumulatorCache
802def muEFCBFSSequenceGenCfg(flags, is_probe_leg=False):
803
804 (selAcc, sequenceOut) = muEFCBFSAlgSequenceCfg(flags, is_probe_leg)
805
806 from TrigMuonHypo.TrigMuonHypoConfig import TrigMuonEFHypoAlgCfg, TrigMuonEFCombinerHypoToolFromName
807 efmuCBHypo = TrigMuonEFHypoAlgCfg( flags,
808 name = 'TrigMuonEFFSCombinerHypoAlg',
809 MuonDecisions = sequenceOut)
810
811 selAcc.addHypoAlgo(efmuCBHypo)
812
813 efmuCBSequence = MenuSequence(flags, selAcc,
814 HypoToolGen = TrigMuonEFCombinerHypoToolFromName)
815
816 return efmuCBSequence
817
818
819def efLateMuRoIAlgSequenceCfg(flags, is_probe_leg=False):
820
821 selAcc = SelectionCA('EFLateMuSel', isProbe=is_probe_leg)
822
823 viewName = "EFLateMuRoIReco"
824 viewcreator = CompFactory.ViewCreatorInitialROITool
825 roiTool = viewcreator()
826
827 recoLateMu = InViewRecoCA(name=viewName, RoITool = roiTool, isProbe=is_probe_leg)
828
829 from .MuonRecoSequences import efLateMuRoISequenceCfg
830
831 #Get Late Muon RoIs
832 efLateMuRoIAcc, sequenceOut = efLateMuRoISequenceCfg(flags)
833 recoLateMu.mergeReco(efLateMuRoIAcc)
834
835 selAcc.mergeReco(recoLateMu)
836 return (selAcc, sequenceOut)
837
838
839@AccumulatorCache
840def efLateMuRoISequenceGenCfg(flags, is_probe_leg=False):
841
842 (selAcc, sequenceOut) = efLateMuRoIAlgSequenceCfg(flags, is_probe_leg)
843
844 from TrigMuonHypo.TrigMuonHypoConfig import TrigMuonLateMuRoIHypoAlgCfg, TrigMuonLateMuRoIHypoToolFromDict
845 latemuHypo = TrigMuonLateMuRoIHypoAlgCfg( flags,
846 name = 'TrigMuonLateMuRoIHypoAlg',
847 LateRoIs = sequenceOut)
848
849 selAcc.addHypoAlgo(latemuHypo)
850
851 latemuRoISequence = MenuSequence(flags, selAcc,
852 HypoToolGen = TrigMuonLateMuRoIHypoToolFromDict)
853
854
855 return latemuRoISequence
856
857
858def efLateMuAlgSequenceCfg(flags, is_probe_leg=False):
859
860 from .MuonRecoSequences import muEFInsideOutRecoSequenceCfg, muonDecodeCfg, muonIDFastTrackingSequenceCfg
861 selAcc = SelectionCA('EFLateMuAlg', isProbe=is_probe_leg)
862
863 viewName = "EFLateMuReco"
864 viewcreator = CompFactory.ViewCreatorNamedROITool
865 roiTool = viewcreator(ROILinkName="feature")
866
867 recoLateMu = InViewRecoCA(name=viewName, RoITool = roiTool, RequireParentView=True, mergeUsingFeature=True, isProbe=is_probe_leg)
868
869
870 #Clone and replace offline flags so we can set muon trigger specific values
871 muonflagsCB = flags.cloneAndReplace('Muon', 'Trigger.Offline.Muon').cloneAndReplace('MuonCombined', 'Trigger.Offline.Combined.MuonCombined')
872 muonflags = flags.cloneAndReplace('Muon', 'Trigger.Offline.SA.Muon')
873 #decode data in these RoIs
874 recoLateMu.mergeReco(muonDecodeCfg(muonflags,RoIs=recoLateMu.name+"RoIs"))
875 #ID fast tracking
876 recoLateMu.mergeReco(muonIDFastTrackingSequenceCfg(flags, recoLateMu.name+"RoIs","muonLate" ))
877 #inside-out reco sequence
878 recoLateMu.mergeReco(muEFInsideOutRecoSequenceCfg(muonflagsCB, recoLateMu.name+"RoIs", "LateMu", ''))
879 sequenceOut = muNames.EFCBInOutName+'_Late'
880
881
882 from TrigGenericAlgs.TrigGenericAlgsConfig import ROBPrefetchingAlgCfg_Muon
883 robPrefetchAlg = ROBPrefetchingAlgCfg_Muon(flags, nameSuffix=viewName)
884 selAcc.mergeReco(recoLateMu, robPrefetchCA = robPrefetchAlg)
885
886 return (selAcc, sequenceOut)
887
888
889@AccumulatorCache
890def efLateMuSequenceGenCfg(flags, is_probe_leg=False):
891
892 (selAcc, sequenceOut) = efLateMuAlgSequenceCfg(flags, is_probe_leg=False)
893
894 # setup EFCB hypo
895 from TrigMuonHypo.TrigMuonHypoConfig import TrigMuonEFHypoAlgCfg
896 trigMuonEFLateHypo = TrigMuonEFHypoAlgCfg( "TrigMuonEFCombinerLateMuHypoAlg", MuonDecisions = sequenceOut )
897
898 selAcc.addHypoAlgo(trigMuonEFLateHypo)
899 from TrigMuonHypo.TrigMuonHypoConfig import TrigMuonEFCombinerHypoToolFromDict
900
901 return MenuSequence(flags, selAcc,
902 HypoToolGen = TrigMuonEFCombinerHypoToolFromDict )
903
904
905
906
909def muEFIsoAlgSequenceCfg(flags, doMSiso=False, is_probe_leg=False):
910 name = ""
911 if doMSiso:
912 name = "MS"
913
914
915 selAccIso = SelectionCA('EFMuIso'+name, isProbe=is_probe_leg)
916
917 viewName="EFMuIsoReco"+name
918 if doMSiso:
919 roisWriteHandleKey = "Roi_MuonIsoMS"
920 else:
921 roisWriteHandleKey = recordable("HLT_Roi_MuonIso")
922
923 roiTool = CompFactory.ViewCreatorCentredOnIParticleROITool(RoisWriteHandleKey = roisWriteHandleKey,
924 RoIEtaWidth=flags.Trigger.InDetTracking.muonIso.etaHalfWidth,
925 RoIPhiWidth=flags.Trigger.InDetTracking.muonIso.phiHalfWidth,
926 RoIZedWidth=flags.Trigger.InDetTracking.muonIso.zedHalfWidth)
927
928 recoIso = InViewRecoCA(name=viewName, RoITool = roiTool, isProbe=is_probe_leg, mergeUsingFeature=True,
929 PlaceMuonInView=True, InViewMuons = "IsoViewMuons"+name, InViewMuonCandidates = "IsoMuonCandidates"+name)
930
931
932
933 from .MuonRecoSequences import efmuisoRecoSequenceCfg
934 sequenceOut = muNames.EFIsoMuonName+name
935 recoIso.mergeReco(efmuisoRecoSequenceCfg( flags, viewName+"RoIs", "IsoViewMuons"+name, doMSiso ))
936
937
938 from TrigGenericAlgs.TrigGenericAlgsConfig import ROBPrefetchingAlgCfg_Si
939 robPrefetchAlg = ROBPrefetchingAlgCfg_Si(flags, nameSuffix=viewName+'_probe' if is_probe_leg else viewName)
940
941 selAccIso.mergeReco(recoIso, robPrefetchCA = robPrefetchAlg)
942
943 return (selAccIso, sequenceOut)
944
945
946@AccumulatorCache
947def muEFIsoSequenceGenCfg(flags, is_probe_leg=False):
948
949 (selAcc, sequenceOut) = muEFIsoAlgSequenceCfg(flags, False, is_probe_leg)
950
951 from TrigMuonHypo.TrigMuonHypoConfig import TrigMuonEFTrackIsolationHypoAlgCfg, TrigMuonEFTrackIsolationHypoToolFromDict
952 efmuisoHypo = TrigMuonEFTrackIsolationHypoAlgCfg( flags,
953 name = 'EFMuisoHypoAlg',
954 EFMuonsName = sequenceOut)
955
956 selAcc.addHypoAlgo(efmuisoHypo)
957
958 efmuisoSequence = MenuSequence(flags, selAcc,
959 HypoToolGen = TrigMuonEFTrackIsolationHypoToolFromDict)
960
961 return efmuisoSequence
962
963
964@AccumulatorCache
965def muEFMSIsoSequenceGenCfg(flags, is_probe_leg=False):
966
967 (selAcc, sequenceOut) = muEFIsoAlgSequenceCfg(flags, True, is_probe_leg)
968
969 from TrigMuonHypo.TrigMuonHypoConfig import TrigMuonEFTrackIsolationHypoAlgCfg, TrigMuonEFTrackIsolationHypoToolFromDict
970 efmuisoHypo = TrigMuonEFTrackIsolationHypoAlgCfg( flags,
971 name = 'EFMuMSisoHypoAlg',
972 EFMuonsName = sequenceOut)
973
974 selAcc.addHypoAlgo(efmuisoHypo)
975
976 efmuisoSequence = MenuSequence(flags, selAcc,
977 HypoToolGen = TrigMuonEFTrackIsolationHypoToolFromDict)
978
979 return efmuisoSequence
980
981
982
985
987
988 from TrigLongLivedParticles.TrigLongLivedParticlesConfig import MuonClusterConfig
989 from TrigLongLivedParticlesHypo.TrigLongLivedParticlesHypoConfig import MuonClusterHypoAlgConfig, TrigLongLivedParticlesHypoToolFromDict
990
991 selAcc = SelectionCA('muRoIClusterSel')
992
993 viewName="MuRoIClusReco"
994 viewcreator = CompFactory.ViewCreatorInitialROITool
995 roiTool = viewcreator()
996
997 recoRoICluster = InEventRecoCA(name=viewName, RoITool = roiTool, mergeUsingFeature = False, RoIs = 'HLT_muVtxCluster_RoIs')
998 recoRoICluster.mergeReco(MuonClusterConfig(flags, 'muvtxMuonCluster'))
999 selAcc.mergeReco(recoRoICluster)
1000
1001
1002 hypoAlg = MuonClusterHypoAlgConfig( flags,
1003 name = 'MuRoiClusterHypoAlg')
1004
1005 selAcc.addHypoAlgo(hypoAlg)
1006
1007 muRoIClusterSequence = MenuSequence(flags, selAcc,
1008 HypoToolGen = TrigLongLivedParticlesHypoToolFromDict)
1009
1010 return muRoIClusterSequence
1011
1012
1013
1014
1019
1021 from ..Config.GenerateMenuMT import GenerateMenuMT
1022 menu = GenerateMenuMT() # get menu singleton
1023 chains = [chain.name for chain in menu.chainsInMenu['Bphysics']]
1024 return chains
1025
1026
1030
1032 from ..Config.GenerateMenuMT import GenerateMenuMT
1033 menu = GenerateMenuMT() # get menu singleton
1034 chains = [chain.name for chain in menu.chainsInMenu['Muon'] if "l2io" in chain.name]
1035 chains += [chain.name for chain in menu.chainsInMenu['Bphysics'] if not any(key in chain.name for key in ['noL2Comb','l2mt'])]
1036 return chains
1037
1038
1042
1044 from ..Config.GenerateMenuMT import GenerateMenuMT
1045 menu = GenerateMenuMT() # get menu singleton
1046 chains = [chain.name for chain in menu.chainsInMenu['Muon'] if "l2mt" in chain.name]
1047 chains += [chain.name for chain in menu.chainsInMenu['Bphysics'] if "l2mt" in chain.name]
1048 return chains
Tool to create an output collection containing a single Full Scan ROI descriptor.
Allows a Decision Object to process the current Step over an ROI which was created during a previous ...
mul2mtSAOvlpRmSequenceGenCfg(flags, is_probe_leg=False)
muFastAlgSequenceCfg(flags, selCAName="", is_probe_leg=False)
************* Step1 ************* ### --------------------------------------------------—#
muCombLRTSequenceGenCfg(flags, is_probe_leg=False, trackingMode="FTF")
muEFCBidReuseSequenceGenCfg(flags, is_probe_leg=False)
efLateMuRoIAlgSequenceCfg(flags, is_probe_leg=False)
muEFMSIsoSequenceGenCfg(flags, is_probe_leg=False)
muEFIsoSequenceGenCfg(flags, is_probe_leg=False)
muEFCBSequenceGenCfg(flags, is_probe_leg=False)
muEFCBFSAlgSequenceCfg(flags, is_probe_leg=False)
EF CB full scan ###.
muFastCalibAlgSequenceCfg(flags, is_probe_leg=False)
muEFSAAlgSequenceCfg(flags, is_probe_leg=False, useBucketFilter=False)
EFSA step ###.
muEFCBIDperfSequenceGenCfg(flags, is_probe_leg=False)
efLateMuSequenceGenCfg(flags, is_probe_leg=False)
getBphysChainNames()
Get Bphysics triggers to # filter chains where we # don't want to run muComb #.
getInsideOutMuonChainNames()
Get muon triggers except L2 inside-out trigger to filter chains where we don't want to run L2SA IO mo...
muCombOvlpRmSequenceGenCfg(flags, is_probe_leg=False, trackingMode="FTF")
muEFSAFSSequenceGenCfg(flags, is_probe_leg=False)
muEFCBLRTIDperfSequenceGenCfg(flags, is_probe_leg=False)
mul2IOOvlpRmSequenceGenCfg(flags, is_probe_leg=False, trackingMode="FTF")
muEFCBl2ioSequenceGenCfg(flags, is_probe_leg=False)
muEFSAFSAlgSequenceCfg(flags)
EF SA full scan ###.
muEFCBFSSequenceGenCfg(flags, is_probe_leg=False)
muEFCBLRTAlgSequenceCfg(flags, selCAName='', is_probe_leg=False)
muCombSequenceGenCfg(flags, is_probe_leg=False, trackingMode="FTF")
muEFCBAlgSequenceCfg(flags, suffix, selCAName='', is_probe_leg=False)
EFCB seq ###.
muEFCBl2mtSequenceGenCfg(flags, is_probe_leg=False)
mul2mtCBOvlpRmSequenceGenCfg(flags, is_probe_leg=False, trackingMode="FTF")
muCombLRTAlgSequenceCfg(flags, is_probe_leg=False)
muEFSASequenceGenCfg(flags, is_probe_leg=False, useBucketFilter=False)
muRoiClusterSequenceGenCfg(flags)
Muon RoI Cluster Trigger for MS LLP Searches ##.
muEFIDtpSequenceGenCfg(flags, is_probe_leg=False)
efLateMuRoISequenceGenCfg(flags, is_probe_leg=False)
muCombAlgSequenceCfg(flags, selCAName="", is_probe_leg=False, trackingMode="FTF")
************* Step2 ************* ### --------------------------------------------------—#
efLateMuAlgSequenceCfg(flags, is_probe_leg=False)
muFastCalibSequenceGenCfg(flags, is_probe_leg=False)
muFastSequenceGenCfg(flags, is_probe_leg=False)
muEFCBLRTSequenceGenCfg(flags, is_probe_leg=False)
muEFIsoAlgSequenceCfg(flags, doMSiso=False, is_probe_leg=False)
efMuiso step ###
getMultiTrackChainNames()
Get muon triggers except L2 multi-track trigger to filter chains where we don't want to run L2SA mult...