def muEFIsoAlgSequence(ConfigFlags): efmuIsoViewsMaker = EventViewCreatorAlgorithm("IMefmuIso") newRoITool = ViewCreatorCentredOnIParticleROITool() newRoITool.RoIEtaWidth = 0.15 newRoITool.RoIPhiWidth = 0.15 newRoITool.RoisWriteHandleKey = recordable("HLT_Roi_MuonIso") # efmuIsoViewsMaker.mergeUsingFeature = True efmuIsoViewsMaker.RoITool = newRoITool # efmuIsoViewsMaker.Views = "MUEFIsoViewRoIs" efmuIsoViewsMaker.InViewRoIs = "MUEFIsoRoIs" # efmuIsoViewsMaker.ViewFallThrough = True # Muon specific # TODO - this should be deprecated here and removed in the future, now that we mergeUsingFeature, each parent View should only have one muon. # therefore the xAOD::Muon should be got via ViewFallThrough, rather than being copied in here as "IsoViewMuons" efmuIsoViewsMaker.PlaceMuonInView = True efmuIsoViewsMaker.InViewMuonCandidates = "IsoMuonCandidates" efmuIsoViewsMaker.InViewMuons = "IsoViewMuons" ### get EF reco sequence ### from TriggerMenuMT.HLTMenuConfig.Muon.MuonSetup import efmuisoRecoSequence efmuisoRecoSequence, sequenceOut = efmuisoRecoSequence( efmuIsoViewsMaker.InViewRoIs, efmuIsoViewsMaker.InViewMuons) efmuIsoViewsMaker.ViewNodeName = efmuisoRecoSequence.name() ### Define a Sequence to run for muIso ### efmuIsoSequence = seqAND("efmuIsoSequence", [efmuIsoViewsMaker, efmuisoRecoSequence]) return (efmuIsoSequence, efmuIsoViewsMaker, sequenceOut)
def efLateMuAlgSequence(ConfigFlags): from TriggerMenuMT.HLTMenuConfig.Muon.MuonSetup import muEFInsideOutRecoSequence, makeMuonPrepDataAlgs, muonIDFastTrackingSequence eflateViewsMaker = EventViewCreatorAlgorithm("IMeflatemu") roiTool = ViewCreatorNamedROITool( ) # Use an existing ROI which is linked to the navigation with a custom name. roiTool.ROILinkName = "feature" # The ROI is actually linked as Step 1's feature. So the custom name is "feature". # eflateViewsMaker.mergeUsingFeature = True # Expect to have efLateMuRoIAlgSequence produce one Decision Object per lateROI, keep these distinct in the merging eflateViewsMaker.RoITool = roiTool # eflateViewsMaker.Views = "MUEFLATEViewRoIs" eflateViewsMaker.InViewRoIs = "MUEFLATERoIs" # eflateViewsMaker.ViewFallThrough = True #decode data in these RoIs viewAlgs_MuonPRD = makeMuonPrepDataAlgs(RoIs=eflateViewsMaker.InViewRoIs) #ID fast tracking muFastIDRecoSequence = muonIDFastTrackingSequence( eflateViewsMaker.InViewRoIs, "Late") #inside-out reco sequence muonEFInsideOutRecoSequence, sequenceOut = muEFInsideOutRecoSequence( eflateViewsMaker.InViewRoIs, "LateMu") lateMuRecoSequence = parOR( "lateMuonRecoSequence", [viewAlgs_MuonPRD, muFastIDRecoSequence, muonEFInsideOutRecoSequence]) #Final sequence running in view eflateViewsMaker.ViewNodeName = lateMuRecoSequence.name() muonSequence = seqAND("lateMuonOutSequence", [eflateViewsMaker, lateMuRecoSequence]) return (muonSequence, eflateViewsMaker, sequenceOut)
def muEFCBFSAlgSequence(ConfigFlags): efcbfsInputMaker = EventViewCreatorAlgorithm("IMEFCBFS") newRoITool = ViewCreatorCentredOnIParticleROITool() newRoITool.RoisWriteHandleKey = "MuonCandidates_FS_ROIs" # efcbfsInputMaker.mergeUsingFeature = True efcbfsInputMaker.RoITool = newRoITool # efcbfsInputMaker.Views = "MUCBFSViews" efcbfsInputMaker.InViewRoIs = "MUCBFSRoIs" # efcbfsInputMaker.RequireParentView = True efcbfsInputMaker.ViewFallThrough = True # Muon specific efcbfsInputMaker.PlaceMuonInView = True efcbfsInputMaker.InViewMuons = "InViewMuons" efcbfsInputMaker.InViewMuonCandidates = "MuonCandidates_FS" from TriggerMenuMT.HLTMenuConfig.Muon.MuonSetup import muEFCBRecoSequence muEFCBFSRecoSequence, sequenceOut = muEFCBRecoSequence( efcbfsInputMaker.InViewRoIs, "FS") efcbfsInputMaker.ViewNodeName = muEFCBFSRecoSequence.name() muonEFCBFSSequence = seqAND("muonEFFSCBSequence", [efcbfsInputMaker, muEFCBFSRecoSequence]) return (muonEFCBFSSequence, efcbfsInputMaker, sequenceOut)
def muEFCBAlgSequence(ConfigFlags): #By default the EFCB sequence will run both outside-in and #(if zero muons are found) inside-out reconstruction from TrigMuonEF.TrigMuonEFConf import MuonFilterAlg, MergeEFMuonsAlg from TriggerMenuMT.HLTMenuConfig.Muon.MuonSetup import muEFCBRecoSequence, muEFInsideOutRecoSequence efcbViewsMaker = EventViewCreatorAlgorithm("IMefcbtotal") # efcbViewsMaker.RoIsLink = "roi" # Merge based on L2SA muon efcbViewsMaker.RoITool = ViewCreatorPreviousROITool( ) # Spawn EventViews on L2SA muon ROI # efcbViewsMaker.Views = "MUEFCBViewRoIs" efcbViewsMaker.InViewRoIs = "MUEFCBRoIs" # efcbViewsMaker.RequireParentView = True efcbViewsMaker.ViewFallThrough = True efcbViewsMaker.mergeUsingFeature = True #outside-in reco sequence muEFCBRecoSequence, sequenceOutCB = muEFCBRecoSequence( efcbViewsMaker.InViewRoIs, "RoI") #Algorithm to filter events with no muons muonFilter = MuonFilterAlg("FilterZeroMuons") muonFilter.MuonContainerLocation = sequenceOutCB #inside-out reco sequence - runs only if filter is passed muonEFInsideOutRecoSequence, sequenceOutInsideOut = muEFInsideOutRecoSequence( efcbViewsMaker.InViewRoIs, "RoI") muonInsideOutSequence = seqAND("muonEFInsideOutSequence", [muonFilter, muonEFInsideOutRecoSequence]) #combine outside-in and inside-out sequences muonRecoSequence = parOR("muonEFCBandInsideOutRecoSequence", [muEFCBRecoSequence, muonInsideOutSequence]) #Merge muon containers from outside-in and inside-out reco muonMerger = MergeEFMuonsAlg("MergeEFMuons") muonMerger.MuonCBContainerLocation = sequenceOutCB muonMerger.MuonInsideOutContainerLocation = sequenceOutInsideOut muonMerger.MuonOutputLocation = muNames.EFCBName sequenceOut = muonMerger.MuonOutputLocation #Add merging alg in sequence with reco sequences mergeSequence = seqOR("muonCBInsideOutMergingSequence", [muonRecoSequence, muonMerger]) #Final sequence running in view efcbViewsMaker.ViewNodeName = mergeSequence.name() muonSequence = seqAND("muonEFCBandInsideOutSequence", [efcbViewsMaker, mergeSequence]) return (muonSequence, efcbViewsMaker, sequenceOut)
def bJetStep2Sequence(): prmVtxKey = "HLT_IDVertex_FS" outputRoIName = "HLT_Roi_Bjet" from ViewAlgs.ViewAlgsConf import EventViewCreatorAlgorithm from DecisionHandling.DecisionHandlingConf import ViewCreatorCentredOnJetWithPVConstraintROITool InputMakerAlg = EventViewCreatorAlgorithm("IMBJet_step2") # newRoITool = ViewCreatorCentredOnJetWithPVConstraintROITool() newRoITool.RoisWriteHandleKey = recordable(outputRoIName) newRoITool.VertexReadHandleKey = prmVtxKey newRoITool.PrmVtxLink = prmVtxKey.replace("HLT_", "") # InputMakerAlg.mergeUsingFeature = True InputMakerAlg.RoITool = newRoITool # InputMakerAlg.Views = "BTagViews" InputMakerAlg.InViewRoIs = "InViewRoIs" # InputMakerAlg.RequireParentView = False InputMakerAlg.ViewFallThrough = True # BJet specific InputMakerAlg.PlaceJetInView = True InputMakerAlg.InViewJets = recordable("HLT_bJets") # Prepare data objects for view verifier viewDataObjects = [('TrigRoiDescriptorCollection', 'StoreGateSvc+' + InputMakerAlg.InViewRoIs), ('xAOD::VertexContainer', 'StoreGateSvc+' + prmVtxKey), ('xAOD::JetContainer', 'StoreGateSvc+' + InputMakerAlg.InViewJets)] # Second stage of Fast Tracking and Precision Tracking from TriggerMenuMT.HLTMenuConfig.Bjet.BjetTrackingConfiguration import getSecondStageBjetTracking secondStageAlgs, PTTrackParticles = getSecondStageBjetTracking( inputRoI=InputMakerAlg.InViewRoIs, dataObjects=viewDataObjects) from AthenaCommon.Configurable import Configurable Configurable.configurableRun3Behavior = 1 # Flavour Tagging from TriggerMenuMT.HLTMenuConfig.Bjet.BjetFlavourTaggingConfiguration import getFlavourTagging acc_flavourTaggingAlgs, bTaggingContainerName = getFlavourTagging( inputJets=InputMakerAlg.InViewJets, inputVertex=prmVtxKey, inputTracks=PTTrackParticles[0]) Configurable.configurableRun3Behavior = 0 #Conversion of flavour-tagging algorithms from new to old-style from AthenaCommon.CFElements import findAllAlgorithms from AthenaConfiguration.ComponentAccumulator import conf2toConfigurable AllFlavourTaggingAlgs = [] for alg in findAllAlgorithms( acc_flavourTaggingAlgs.getSequence("AthAlgSeq")): AllFlavourTaggingAlgs.append(conf2toConfigurable(alg)) acc_flavourTaggingAlgs.wasMerged( ) #Needed to remove error message; Next we add all algorithms to sequence so this is kind of an old-style merge bJetBtagSequence = seqAND("bJetBtagSequence", secondStageAlgs + AllFlavourTaggingAlgs) InputMakerAlg.ViewNodeName = "bJetBtagSequence" # Sequence BjetAthSequence = seqAND("BjetAthSequence_step2", [InputMakerAlg, bJetBtagSequence]) from TrigBjetHypo.TrigBjetHypoConf import TrigBjetBtagHypoAlgMT hypo = TrigBjetBtagHypoAlgMT("TrigBjetBtagHypoAlg") # keys hypo.BTaggedJetKey = InputMakerAlg.InViewJets hypo.BTaggingKey = bTaggingContainerName hypo.TracksKey = PTTrackParticles[0] hypo.PrmVtxKey = newRoITool.VertexReadHandleKey # links for navigation hypo.BTaggingLink = bTaggingContainerName.replace("HLT_", "") hypo.PrmVtxLink = newRoITool.PrmVtxLink from TrigBjetHypo.TrigBjetOnlineMonitoringMTConfig import TrigBjetOnlineMonitoring hypo.MonTool = TrigBjetOnlineMonitoring() from TrigBjetHypo.TrigBjetBtagHypoTool import TrigBjetBtagHypoToolFromDict return MenuSequence(Sequence=BjetAthSequence, Maker=InputMakerAlg, Hypo=hypo, HypoToolGen=TrigBjetBtagHypoToolFromDict)