diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/HLTCFConfig.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/HLTCFConfig.py index b611de9da676038cd1ee2fa83ad2f0d5cc862812..21f7043b5fcdb8cda700831b6971add7cf0e0a11 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/HLTCFConfig.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/HLTCFConfig.py @@ -124,13 +124,16 @@ def findViewAlgs( inputNodes, viewNodes ): if isSequence( node ): # Identify view CF nodes - if node.getName() in viewNodes: + if node.getName() in viewNodes.keys(): # Retrieve view algorithms # (views don't nest, so will be returned in first list) - newViewAlgs, dummy = findViewAlgs( node.getChildren(), [] ) + newViewAlgs, dummy = findViewAlgs( node.getChildren(), {} ) viewAlgs += newViewAlgs + # Record the fact that the view node is found + viewNodes[ node.getName() ] = True + # Explore the tree else: newAlgs, newViewAlgs = findViewAlgs( node.getChildren(), viewNodes ) @@ -237,14 +240,22 @@ def makeHLTTree(HLTChains, newJO=False, triggerConfigHLT = None): topSequence += hltTop - # List all CF nodes to be used with EventViews - viewNodes = [] + # List all CF nodes to be used with EventViews (and whether they are found) + viewNodes = {} for viewMaker in viewMakers: - viewNodes.append( viewMaker.ViewNodeName ) + viewNodes[ viewMaker.ViewNodeName ] = False + originalLength = len( viewNodes ) # Identify the algorithms that will run in EventViews wholeEventAlgs, viewAlgs = findViewAlgs( topSequence.getChildren(), viewNodes ) + # Check that all view nodes are found + if len( viewNodes ) != originalLength: + raise RuntimeError( "Something went wrong with view config inspection" ) + for viewNode in viewNodes.keys(): + if not viewNodes[ viewNode ]: + raise RuntimeError( "EventView CF node " + viewNode + " was not found attached to the topSequence" ) + # Look for view algs in the whole event context for viewAlgName in viewAlgs: if viewAlgName in wholeEventAlgs: diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Test/ViewCFTest.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Test/ViewCFTest.py index abccb97255a7855310f6b94b1b32eb48d4668489..0dd4b6e87f93c197c896d0243fa15c33665b7425 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Test/ViewCFTest.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Test/ViewCFTest.py @@ -19,9 +19,9 @@ class ViewCFTest( unittest.TestCase ): topSequence.makeViewSequence += viewTestAlg1 # Return the algorithm assuming it's in a view, or not - self.assertEqual( findViewAlgs( topSequence.getChildren(), [] ), + self.assertEqual( findViewAlgs( topSequence.getChildren(), {} ), ( [ "viewTestAlg1" ], [] ) ) - self.assertEqual( findViewAlgs( topSequence.getChildren(), ["makeViewSequence"] ), + self.assertEqual( findViewAlgs( topSequence.getChildren(), {"makeViewSequence":False} ), ( [], [ "viewTestAlg1" ] ) ) # Add a nested sequence @@ -29,9 +29,14 @@ class ViewCFTest( unittest.TestCase ): topSequence.makeViewSequence.nestedSequence += viewTestAlg2 # Return the algorithms depending on where the view is entered - self.assertEqual( findViewAlgs( topSequence.getChildren(), [] ), + self.assertEqual( findViewAlgs( topSequence.getChildren(), {} ), ( [ "viewTestAlg1", "viewTestAlg2" ], [] ) ) - self.assertEqual( findViewAlgs( topSequence.getChildren(), ["makeViewSequence"] ), + self.assertEqual( findViewAlgs( topSequence.getChildren(), {"makeViewSequence":False} ), ( [], [ "viewTestAlg1", "viewTestAlg2" ] ) ) - self.assertEqual( findViewAlgs( topSequence.getChildren(), ["nestedSequence"] ), + self.assertEqual( findViewAlgs( topSequence.getChildren(), {"nestedSequence":False} ), ( [ "viewTestAlg1" ], [ "viewTestAlg2" ] ) ) + + # Check that the test finds view nodes by name + viewNodeDict = {"makeViewSequence":False, "aFakeNode":False} + findViewAlgs( topSequence.getChildren(), viewNodeDict ) + self.assertEqual( viewNodeDict, {"makeViewSequence":True, "aFakeNode":False} )