From 3c5858adb9e57a7609bb3abcbae2683bc33a982c Mon Sep 17 00:00:00 2001 From: Frank Winklmeier <frank.winklmeier@cern.ch> Date: Fri, 19 Jun 2020 15:18:32 +0000 Subject: [PATCH] Revert "Merge branch 'menumt_cleanup' into 'master'" This reverts merge request !33843 --- .../TriggerMenuMT/CMakeLists.txt | 172 +++++++++++++----- .../TriggerMenuMT/scripts/generateL1MenuMT.sh | 2 - .../TriggerMenuMT/scripts/generateMenuMT.py | 42 +++++ .../{python => scripts}/menu_config_tests.py | 0 .../TriggerMenuMT/scripts/testMenuMT.sh | 82 +++++++++ .../TriggerMenuMT/scripts/test_HLTmenu.sh | 2 +- .../scripts/verify_menu_config.py | 2 +- .../TriggerMenuMT/share/generateMT.py | 10 + .../TriggerMenuMT/share/trigermenuMT_test.py | 55 ++++++ 9 files changed, 321 insertions(+), 46 deletions(-) create mode 100644 Trigger/TriggerCommon/TriggerMenuMT/scripts/generateMenuMT.py rename Trigger/TriggerCommon/TriggerMenuMT/{python => scripts}/menu_config_tests.py (100%) create mode 100755 Trigger/TriggerCommon/TriggerMenuMT/scripts/testMenuMT.sh create mode 100755 Trigger/TriggerCommon/TriggerMenuMT/share/generateMT.py create mode 100644 Trigger/TriggerCommon/TriggerMenuMT/share/trigermenuMT_test.py diff --git a/Trigger/TriggerCommon/TriggerMenuMT/CMakeLists.txt b/Trigger/TriggerCommon/TriggerMenuMT/CMakeLists.txt index 70014723b4f..1a23c5bb63e 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/CMakeLists.txt +++ b/Trigger/TriggerCommon/TriggerMenuMT/CMakeLists.txt @@ -1,57 +1,145 @@ -# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +################################################################################ +# Package: TriggerMenuMT +################################################################################ # Declare the package name: atlas_subdir( TriggerMenuMT ) +# Declare the package's dependencies: +atlas_depends_on_subdirs( PRIVATE + Trigger/TriggerCommon/TriggerJobOpts) + # External dependencies: find_package( six ) +atlas_add_test( flake8 + SCRIPT flake8 --select=ATL,F,E7,E9,W6,E101 --enable-extension=ATL900,ATL901,ATL902 + ${CMAKE_CURRENT_SOURCE_DIR}/python ${CMAKE_CURRENT_SOURCE_DIR}/scripts + POST_EXEC_SCRIPT nopost.sh ) + +#---------------------------------- +# Function to build trigger menu: +function( atlas_build_lvl1_trigger_menu menu ) + + # Don't do anything in release recompilation dryrun mode. In all other + # modes, proceed as usual. + if( ATLAS_RELEASE_RECOMPILE_DRYRUN ) + return() + endif() + + # Command to build trigger menu. The idea is that ${menu}.stamp gets + # created as the last command, should the menu generation succeed such that + # after a successful menu generation it wouldn't be attempted again. + # In order for the installation step to not try to re-generate + # the menu in case it was the generation itself that failed, another + # stamp file, ${menu}.attempted.stamp is created as the first command. + # The menu is then only generated as part of the installation step if + # this ${menu}.attempted.stamp file doesn't even exist. + + add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${menu}.stamp + COMMAND ${CMAKE_COMMAND} -E touch + ${CMAKE_CURRENT_BINARY_DIR}/${menu}.attempted.stamp + COMMAND ${CMAKE_COMMAND} -E make_directory + ${CMAKE_CURRENT_BINARY_DIR}/Menus/${menu} + COMMAND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/atlas_build_run.sh + ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/generateL1MenuMT.sh -r ${CMAKE_PROJECT_VERSION} ${menu} + ${CMAKE_CURRENT_BINARY_DIR}/Menus/${menu} + COMMAND ${CMAKE_COMMAND} -E make_directory + ${CMAKE_XML_OUTPUT_DIRECTORY}/TriggerMenuMT + COMMAND ${CMAKE_COMMAND} -E copy_directory + ${CMAKE_CURRENT_BINARY_DIR}/Menus/${menu}/ + ${CMAKE_XML_OUTPUT_DIRECTORY}/TriggerMenuMT + COMMAND ${CMAKE_COMMAND} -E touch + ${CMAKE_CURRENT_BINARY_DIR}/${menu}.stamp + DEPENDS "Package_$<JOIN:$<TARGET_PROPERTY:ATLAS_PACKAGES_TARGET,ATLAS_PACKAGES>,;Package_>" ) + + # Create custom target and add it to package dependencies + add_custom_target( build_menu_${menu} ALL SOURCES + ${CMAKE_CURRENT_BINARY_DIR}/${menu}.stamp ) + + # In case the file generation failed, because it wasn't even attempted + # (failure in another package), then try to run the generation as part + # of the installation. Note that apparently chaining commands inside a + # single execute_process(...) call doesn't work correctly during installation + # for some reason. Hence it's taken apart into 3 separate calls. + install( CODE "if( NOT EXISTS + ${CMAKE_CURRENT_BINARY_DIR}/${menu}.attempted.stamp ) + message( WARNING \"Generating trigger menu ${menu}\" + \" during the installation\" ) + execute_process( COMMAND ${CMAKE_COMMAND} -E touch + ${CMAKE_CURRENT_BINARY_DIR}/${menu}.attempted.stamp ) + execute_process( + COMMAND ${CMAKE_COMMAND} -E make_directory + ${CMAKE_CURRENT_BINARY_DIR}/Menus/${menu} ) + execute_process( + COMMAND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/atlas_build_run.sh + ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/generateL1MenuMT.sh + -r ${CMAKE_PROJECT_VERSION} ${menu} ${CMAKE_CURRENT_BINARY_DIR}/Menus/${menu} ) + endif()" ) + + # Install the generated XML files. Note that this installation rule is + # executed after the previous code. So by this time the files should be + # in place, if they could be produced. + install( DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/Menus/${menu}/ + DESTINATION ${CMAKE_INSTALL_XMLDIR}/TriggerMenuMT + USE_SOURCE_PERMISSIONS + FILES_MATCHING PATTERN "*.xml" ) + + # Create a target that will depend on all the other targets, and will + # print the "right message" at the end of the build. Notice that + # we can't rely on the Package_TriggerMenuXML target here, since + # the XML generation depends on all package targets being ready before + # it could start. So it would cause a circular dependency to make the + # menu targets be dependencies of the package target. + if( NOT TARGET TriggerMenuMTMain ) + add_custom_target( TriggerMenuMTMain ALL + COMMAND ${CMAKE_COMMAND} -E echo + "TriggerMenuMT: Package build succeeded" ) + endif() + add_dependencies( TriggerMenuMTMain build_menu_${menu} ) + +endfunction ( atlas_build_lvl1_trigger_menu ) + + + +#---------------------------------- # Install files from the package: atlas_install_python_modules( python/*.py python/LVL1MenuConfig python/L1 python/HLTMenuConfig - POST_BUILD_CMD ${ATLAS_FLAKE8}) - -atlas_install_scripts( scripts/generateMenuMT.py - scripts/generateLVL1MenuMT.py - scripts/generateL1TopoMenuMT.py - scripts/generateL1MenuRun3.py - scripts/verify_menu_config.py - POST_BUILD_CMD ${ATLAS_FLAKE8} ) + POST_BUILD_CMD ${ATLAS_FLAKE8}) +atlas_install_joboptions( share/*.py ) +atlas_install_scripts( scripts/generateMenuMT.py ) atlas_install_scripts( scripts/generateL1MenuMT.sh ) -atlas_install_xmls( data/*.xml ) +atlas_install_scripts( scripts/generateLVL1MenuMT.py ) +atlas_install_scripts( scripts/generateL1TopoMenuMT.py ) +atlas_install_scripts( scripts/test_HLTmenu.sh ) +atlas_install_scripts( scripts/generateL1MenuRun3.py ) +atlas_install_scripts( scripts/verify_menu_config.py ) + +atlas_install_xmls( data/*.dtd data/*.xml ) + +atlas_add_test( generateMenuMT_newJO SCRIPT python -m TriggerMenuMT.HLTMenuConfig.Menu.LS2_v1_newJO + PROPERTIES TIMEOUT 500 + ) + +atlas_add_test( ViewCFTest SCRIPT python -m unittest -v TriggerMenuMT.HLTMenuConfig.Test.ViewCFTest POST_EXEC_SCRIPT nopost.sh ) + +atlas_add_test( generateMenuMT SCRIPT bash test_HLTmenu.sh + PROPERTIES TIMEOUT 4000 + ) + +#---------------------------------- +# List of menus to be created: +atlas_build_lvl1_trigger_menu( LS2_v1 ) +atlas_build_lvl1_trigger_menu( Physics_pp_run3_v1 ) +atlas_build_lvl1_trigger_menu( PhysicsP1_pp_run3_v1 ) +atlas_build_lvl1_trigger_menu( MC_pp_run3_v1 ) +atlas_build_lvl1_trigger_menu( Cosmic_run3_v1 ) +atlas_build_lvl1_trigger_menu( PhysicsP1_HI_run3_v1 ) +atlas_build_lvl1_trigger_menu( Dev_HI_run3_v1 ) + + -# Tests in the package: -atlas_add_test( flake8 - SCRIPT flake8 --select=ATL,F,E7,E9,W6,E101 --enable-extension=ATL900,ATL901,ATL902 - ${CMAKE_CURRENT_SOURCE_DIR}/python ${CMAKE_CURRENT_SOURCE_DIR}/scripts - POST_EXEC_SCRIPT nopost.sh ) - -atlas_add_test( ViewCFTest - SCRIPT python -m unittest -v TriggerMenuMT.HLTMenuConfig.Test.ViewCFTest - POST_EXEC_SCRIPT nopost.sh ) - -atlas_add_test( generateMenuMT_newJO - SCRIPT python -m TriggerMenuMT.HLTMenuConfig.Menu.LS2_v1_newJO - PROPERTIES TIMEOUT 500 ) - -atlas_add_test( generateMenuMT - SCRIPT ${CMAKE_CURRENT_SOURCE_DIR}/scripts/test_HLTmenu.sh - PROPERTIES TIMEOUT 4000 ) - -# Test L1 trigger menus: -function( atlas_test_lvl1_trigger_menu menu ) - atlas_add_test( "L1_${menu}" - SCRIPT ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/generateL1MenuMT.sh - -r ${CMAKE_PROJECT_VERSION} ${menu} ${CMAKE_CURRENT_BINARY_DIR}/Menus/${menu} ) -endfunction() - -atlas_test_lvl1_trigger_menu( LS2_v1 ) -atlas_test_lvl1_trigger_menu( Physics_pp_run3_v1 ) -atlas_test_lvl1_trigger_menu( PhysicsP1_pp_run3_v1 ) -atlas_test_lvl1_trigger_menu( MC_pp_run3_v1 ) -atlas_test_lvl1_trigger_menu( Cosmic_run3_v1 ) -atlas_test_lvl1_trigger_menu( PhysicsP1_HI_run3_v1 ) -atlas_test_lvl1_trigger_menu( Dev_HI_run3_v1 ) diff --git a/Trigger/TriggerCommon/TriggerMenuMT/scripts/generateL1MenuMT.sh b/Trigger/TriggerCommon/TriggerMenuMT/scripts/generateL1MenuMT.sh index 41b3b9679a7..705824041c5 100755 --- a/Trigger/TriggerCommon/TriggerMenuMT/scripts/generateL1MenuMT.sh +++ b/Trigger/TriggerCommon/TriggerMenuMT/scripts/generateL1MenuMT.sh @@ -36,8 +36,6 @@ menu=$1 dest=$2 if [ -z "$dest" ]; then dest=$PWD -else - mkdir -p $dest fi # Get absolute path name diff --git a/Trigger/TriggerCommon/TriggerMenuMT/scripts/generateMenuMT.py b/Trigger/TriggerCommon/TriggerMenuMT/scripts/generateMenuMT.py new file mode 100644 index 00000000000..c98b0ae0c8c --- /dev/null +++ b/Trigger/TriggerCommon/TriggerMenuMT/scripts/generateMenuMT.py @@ -0,0 +1,42 @@ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration + +# import flags +doWriteRDOTrigger = False +doWriteBS = False +include("TriggerJobOpts/runHLT_standalone.py") # noqa: F821 + +################################# +# Configure L1Decoder +################################# + +# provide a minimal menu information +from AthenaCommon.GlobalFlags import globalflags +from AthenaCommon.AlgSequence import AlgSequence +topSequence = AlgSequence() +if globalflags.InputFormat.is_bytestream(): + from AthenaCommon.Constants import DEBUG + topSequence.L1Decoder.ctpUnpacker.OutputLevel=DEBUG # noqa: ATL900 + + + +# this is a temporary hack to include new test chains +# very hacky indeed, the L1 part should be in in the GenerateMenuMT part + +from TriggerJobOpts.TriggerFlags import TriggerFlags +TriggerFlags.triggerMenuSetup = "LS2_v1" + +from TriggerMenuMT.HLTMenuConfig.Menu.GenerateMenuMT import GenerateMenuMT +g = GenerateMenuMT() + + + + + +########################################## +# Menu and CF construction +########################################## +g.generateMT() + + + + diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/menu_config_tests.py b/Trigger/TriggerCommon/TriggerMenuMT/scripts/menu_config_tests.py similarity index 100% rename from Trigger/TriggerCommon/TriggerMenuMT/python/menu_config_tests.py rename to Trigger/TriggerCommon/TriggerMenuMT/scripts/menu_config_tests.py diff --git a/Trigger/TriggerCommon/TriggerMenuMT/scripts/testMenuMT.sh b/Trigger/TriggerCommon/TriggerMenuMT/scripts/testMenuMT.sh new file mode 100755 index 00000000000..c26ea2bbdf2 --- /dev/null +++ b/Trigger/TriggerCommon/TriggerMenuMT/scripts/testMenuMT.sh @@ -0,0 +1,82 @@ +#!/usr/bin/env sh + +help() { + echo "Syntax: testMenuMT.sh [-r VERSION] MENU [DEST]" +} + +if [ $# -lt 1 ]; then + help + exit 0 +fi + +while true; do + case "$1" in + -r) + release=$2 + shift 2 + ;; + -h) + help + exit 0 + ;; + -*) + echo "Invalid parameter" + exit 1 + ;; + *) + break + esac +done + +menu=$1 +dest=$2 +if [ -z "$dest" ]; then + dest=$PWD +fi + +# Get absolute path name +dest=`cd $dest; pwd` + +if [ -z "$release" ]; then + release=${AtlasVersion} # for interactive use +fi + +# Temporary run directroy and cleanup traps in case of termination +rundir=`mktemp -t -d tmxml.${menu}.XXXXXXXXXX` +TRAPINT() { + rm -rf $rundir + return 130 # 128+SIGINT +} +TRAPTERM() { + rm -rf $rundir + return 143 # 128+SIGTERM +} + + +## menu generation starts here +echo "generateHLTMenuMT: Building menu: ${menu} for ${release}" +logfiletopo=topo${menu}.log +logfilelvl1=lvl1${menu}.log +logfilehlt=hlt${menu}.log +cd $rundir + +generateLVL1MenuMT.py $menu &> $logfiletopo +generateL1TopoMenuMT.py $menu &> $logfilelvl1 +generateMenuMT.py $menu &> $logfilehlt + +cp L1Topoconfig_*.xml ${dest} +cp LVL1config_*.xml ${dest} +#cp $logfilelvl1 $logfiletopo ${dest} + +if [[ -e outputLVL1config.xml ]]; then + cp outputLVL1config.xml ${dest}/LVL1config_${menu}_${release}.xml +fi + +#this gives some more sensitivity to hidden problems +grep --colour ERROR ${dest}/$logfile +grep --colour -A 100 "Shortened traceback" ${dest}/$logfile + +rm -rf $rundir + +# Do not return real athena exit code as we want to pretend everything was fine +#unset PYTHONDONTWRITEBYTECODE diff --git a/Trigger/TriggerCommon/TriggerMenuMT/scripts/test_HLTmenu.sh b/Trigger/TriggerCommon/TriggerMenuMT/scripts/test_HLTmenu.sh index 19dfbd9ff9c..bce1f232c39 100755 --- a/Trigger/TriggerCommon/TriggerMenuMT/scripts/test_HLTmenu.sh +++ b/Trigger/TriggerCommon/TriggerMenuMT/scripts/test_HLTmenu.sh @@ -2,6 +2,6 @@ set -e -athena --config-only=config.pkl -l DEBUG --threads=1 --skipEvents=10 --evtMax=20 --filesInput="/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data17_13TeV.00327265.physics_EnhancedBias.merge.RAW._lb0100._SFO-1._0001.1" -c "setMenu='LS2_v1';doWriteBS=False;from TriggerJobOpts.TriggerFlags import TriggerFlags;TriggerFlags.generateMenuDiagnostics=True" TriggerJobOpts/runHLT_standalone.py +athena --config-only=config.pkl -l DEBUG --threads=1 --skipEvents=10 --evtMax=20 --filesInput="/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data17_13TeV.00327265.physics_EnhancedBias.merge.RAW._lb0100._SFO-1._0001.1" TriggerMenuMT/generateMT.py; verify_menu_config.py -f $PWD || { echo "ERROR: Menu verification failed" ; exit 1; } diff --git a/Trigger/TriggerCommon/TriggerMenuMT/scripts/verify_menu_config.py b/Trigger/TriggerCommon/TriggerMenuMT/scripts/verify_menu_config.py index 91a79a1ce3e..d4e512a10bf 100755 --- a/Trigger/TriggerCommon/TriggerMenuMT/scripts/verify_menu_config.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/scripts/verify_menu_config.py @@ -15,7 +15,7 @@ import sys import argparse from AthenaCommon.Logging import logging -from TriggerMenuMT.menu_config_tests import TriggerLevel, menu_tests +from menu_config_tests import TriggerLevel, menu_tests log = logging.getLogger("TriggerMenuConfigTest") diff --git a/Trigger/TriggerCommon/TriggerMenuMT/share/generateMT.py b/Trigger/TriggerCommon/TriggerMenuMT/share/generateMT.py new file mode 100755 index 00000000000..9f5039fe5a8 --- /dev/null +++ b/Trigger/TriggerCommon/TriggerMenuMT/share/generateMT.py @@ -0,0 +1,10 @@ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration + +setMenu = "LS2_v1" +doWriteRDOTrigger = False +doWriteBS = False +endJobAfterGenerate = False +from TriggerJobOpts.TriggerFlags import TriggerFlags +TriggerFlags.generateMenuDiagnostics = True +include("TriggerJobOpts/runHLT_standalone.py") + diff --git a/Trigger/TriggerCommon/TriggerMenuMT/share/trigermenuMT_test.py b/Trigger/TriggerCommon/TriggerMenuMT/share/trigermenuMT_test.py new file mode 100644 index 00000000000..9f64d82acfc --- /dev/null +++ b/Trigger/TriggerCommon/TriggerMenuMT/share/trigermenuMT_test.py @@ -0,0 +1,55 @@ +# +# Minimal example to build a trigger menu +# +from TriggerMenuMT.LVL1MenuConfig.TriggerConfigLVL1 import TriggerConfigLVL1 +from TriggerMenuMT.LVL1MenuConfig.LVL1.Lvl1Flags import Lvl1Flags +from TriggerMenuMT.LVL1MenuConfig.LVL1.Lvl1MenuItems import LVL1MenuItem +from TriggerMenuMT.L1.Config.TriggerTypeDef import TT +from TriggerMenuMT.LVL1MenuConfig.LVL1.Lvl1Condition import ThrCondition, Lvl1InternalTrigger +from TriggerMenuMT.L1.Base.Logic import Logic + +# Define L1 menu thresholds and items +Lvl1Flags.RemapThresholdsAsListed = True +Lvl1Flags.thresholds = ['EM3','MU4'] +Lvl1Flags.items = ['L1_EM3','L1_MU4'] + +l1menu = TriggerConfigLVL1( outputFile = 'l1menu.xml', + menuName = 'menutest', + topoMenu = None ) + +LVL1MenuItem.l1configForRegistration = l1menu + +# Register L1 menu +bgrp = Logic(Lvl1InternalTrigger('BGRP0')) & Logic(Lvl1InternalTrigger('BGRP1')) + +EM3 = l1menu.registerThr('EM3','EM').addThrValue(3) +LVL1MenuItem('L1_EM3' ).setLogic( ThrCondition(EM3) & bgrp ).setTriggerType( TT.calo ) + +MU4 = l1menu.registerThr('MU4','MUON').addThrValue(4) +LVL1MenuItem('L1_MU4' ).setLogic( ThrCondition(MU4) & bgrp ).setTriggerType( TT.muon ) + +# Generate and write L1 menu +l1menu.generateMenu() +l1menu.writeXML() + + +from TriggerMenu.menu.TriggerPythonConfig import TriggerPythonConfig +from TriggerMenu.menu.HLTObjects import HLTChain +hltmenu = TriggerPythonConfig('hltmenu.xml') + +from TrigSteeringTest.TrigSteeringTestConf import PESA__dummyAlgo +defalgo = PESA__dummyAlgo('Em3') +hltmenu.addSequence("EM3" , defalgo, "em3" ) + +chain = HLTChain( chain_name="HLT_e3", chain_counter="1", lower_chain_name="EM3", level = "HLT", prescale="1", pass_through="1") +chain.addHLTSignature( "em3" ).addHLTSignature( "em3" ) +chain.addTriggerTypeBit('4') +chain.addStreamTag('electrons', prescale='1', obeyLB="yes") +chain.addStreamTag('IDCalibration', prescale='1', obeyLB="no", type="calibration") +chain.addGroup("electrons") +hltmenu.addHLTChain(chain) + +hltmenu.writeConfigFiles(); + +import sys +sys.exit(0) -- GitLab