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