diff --git a/Trigger/TrigMonitoring/TrigSteerMonitor/src/TrigSignatureMoniMT.cxx b/Trigger/TrigMonitoring/TrigSteerMonitor/src/TrigSignatureMoniMT.cxx index 1c31a75dea4e8f18dcc9fbce4574dca44b276417..0f47344b65ba830d262c349ec5047e35c0fdf39c 100644 --- a/Trigger/TrigMonitoring/TrigSteerMonitor/src/TrigSignatureMoniMT.cxx +++ b/Trigger/TrigMonitoring/TrigSteerMonitor/src/TrigSignatureMoniMT.cxx @@ -179,11 +179,13 @@ StatusCode TrigSignatureMoniMT::stop() { std::string stepName = stepNameMatch[0]; stepName[0] = std::toupper(stepName[0]); // fix for "step1" names - chainToSteps[chain.name()].insert( stepName ); - chainToStepsId[chain.name()].insert( nstep ); - //check that the step name is set with the same position in the execution - if ("Step"+std::to_string(nstep) != stepName) - ATH_MSG_INFO("Sequence "<<seqName<<" (step "<<stepName<<") used at step "<<nstep<<" in chain "<<chain.name()); + //check that the step name is set with the same position in the execution (empty steps support) + if ("Step"+std::to_string(nstep) == stepName) { + chainToSteps[chain.name()].insert( stepName ); + chainToStepsId[chain.name()].insert( nstep ); + } else { + ATH_MSG_INFO("Missing step" << nstep << " in chain " << chain.name()); + } nstep++; } } @@ -196,9 +198,12 @@ StatusCode TrigSignatureMoniMT::stop() { // skip steps where chain wasn't active // ybins are for all axis labes, steps are in bins from 3 to stepsSize + 2 const std::string chainName = m_passHistogram->GetXaxis()->GetBinLabel(xbin); - ybin < 3 || ybin > stepsSize + 2 || chainToStepsId[chainName].find(ybin - 2) != chainToStepsId[chainName].end() ? - v += fixedWidth( std::to_string( int(hist->GetBinContent( xbin, ybin ))) , 11 ) - : v += fixedWidth( "-", 11 ); + + if( ybin < 3 || ybin > stepsSize + 2 || chainToStepsId[chainName].count(ybin - 2) != 0 ) { + v += fixedWidth( std::to_string( int(hist->GetBinContent( xbin, ybin ))) , 11 ); + } else { + v += fixedWidth( "-", 11 ); + } } else { v += fixedWidth( " ", 11 ); } diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/HLTCFConfig_newJO.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/HLTCFConfig_newJO.py index 7fe9fd952164c11cbc348883fea90a38e48d2ce9..7e2c2389efc8c8dfc386cab8cd3f4743a90455b4 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/HLTCFConfig_newJO.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/HLTCFConfig_newJO.py @@ -112,8 +112,9 @@ def traverse(acc, startCollectionName, functor): def generateDecisionTree(chains): acc = ComponentAccumulator() - mainSequenceName = 'HLTAllSteps' - acc.addSequence( seqAND(mainSequenceName) ) + mainSequence = seqAND('HLTAllSteps') + mainSequence.StopOverride=False + acc.addSequence( mainSequence ) @lru_cache(None) def getFiltersStepSeq( stepNumber ): @@ -124,7 +125,7 @@ def generateDecisionTree(chains): if stepNumber > 1: getRecosStepSeq( stepNumber -1 ) # make sure steps sequencers are correctly made: Step1_filter, Step1_recos, Step2_filters, Step2_recos ... seq = parOR( name ) - acc.addSequence( seq, parentName = mainSequenceName ) + acc.addSequence( seq, parentName = mainSequence.name ) return acc.getSequence(seq.name) @lru_cache(None) @@ -135,14 +136,14 @@ def generateDecisionTree(chains): getFiltersStepSeq( stepNumber ) # make sure there is always filters step before reco name = 'Step{}{}'.format(stepNumber, CFNaming.RECO_POSTFIX) seq = parOR( name ) - acc.addSequence( seq, parentName = mainSequenceName ) + acc.addSequence( seq, parentName = mainSequence.name ) return acc.getSequence(seq.name) @lru_cache(None) def getSingleMenuSeq( stepNumber, stepName ): """ """ - name = "Menu{}_{}".format(stepNumber, stepName) + name = "Step{}_menu_{}".format(stepNumber, stepName) seq = seqAND( name ) allRecoSeqName = getRecosStepSeq( stepNumber ).name @@ -177,10 +178,10 @@ def generateDecisionTree(chains): filterAlg = CompFactory.PassFilter(CFNaming.filterName("Pass")) else: filterAlg = CompFactory.RoRSeqFilter(CFNaming.filterName(stepName)) - acc.addEventAlgo(filterAlg, sequenceName=filtersStep.name) + acc.addEventAlgo(filterAlg, sequenceName=filtersStep.name) acc.addEventAlgo(filterAlg, sequenceName=singleMenuSeq.name) - log.debug('Creted filter {}'.format(filterAlg.name)) + log.debug('Created filter {}'.format(filterAlg.name)) return acc.getEventAlgo(filterAlg.name) diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/HLTMenuJSON.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/HLTMenuJSON.py index 6a5e441f9072220368940c15b72da42b0f48ff56..974b487c5df17f95abf8a3a1861408e7b16e7f1d 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/HLTMenuJSON.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/HLTMenuJSON.py @@ -36,12 +36,9 @@ def __getChainSequencers(stepsData, chainName): Return a list of the per-Step name() of the Sequencer which is unlocked by the Chain's Filter in the Step. """ sequencers = [] - counter = 0 from DecisionHandling.TrigCompositeUtils import chainNameFromLegName - for step in stepsData: - counter += 1 + for counter, step in enumerate(stepsData, 1): mySequencer = None - endOfChain = False for sequencer in step: sequencerFilter = getSequenceChildren( sequencer )[0] # Always the first child in the step if hasattr(sequencerFilter, "Chains") and any(chainName in chainNameFromLegName(fChain) for fChain in sequencerFilter.Chains): @@ -49,16 +46,11 @@ def __getChainSequencers(stepsData, chainName): __log.error( "Multiple Filters found (corresponding Sequencers %s, %s) for %s in Step %i!", mySequencer.getName(), sequencer.getName(), chainName, counter) mySequencer = sequencer - if mySequencer is None: - endOfChain = True - if counter == 1 and 'noalg' not in chainName: - __log.info("No Filter found for %s in Step 1", chainName) - else: - if endOfChain is True: - __log.error( "Found another Step, (Step %i) for chain %s " - "which looked like it had already finished after %i Steps!", - counter, chainName, len(sequencers)) - sequencers.append(mySequencer.getName()) + + sequencers.append(mySequencer.getName() if mySequencer else "") + # drop trailing empty names + while len(sequencers) != 0 and sequencers[-1] == "": + del sequencers[-1] return sequencers def __getSequencerAlgs(stepsData):