From 5c50b98e216e920eef943b68f996698dca487d62 Mon Sep 17 00:00:00 2001 From: Francesca Pastore <francesca.pastore@cern.ch> Date: Tue, 6 Mar 2018 21:06:15 +0100 Subject: [PATCH] development of HLT DecisionHandling; converging EmuStepProcessing towards egammaRun; added new test EgammaMenu Former-commit-id: cb7cab6de05a76d84b8d1dd5c5bb448bb2b5ac22 --- .../src/T2CaloEgammaFastAlgo.cxx | 6 +- .../python/TestTrigL2CaloHypoTool.py | 191 ++ .../src/TestTrigL2CaloHypoAlg.cxx | 183 ++ .../src/TestTrigL2CaloHypoAlg.h | 46 + .../src/TestTrigL2CaloHypoToolInc.cxx | 349 ++++ .../src/TestTrigL2CaloHypoToolInc.h | 62 + .../src/components/TrigEgammaHypo_entries.cxx | 5 + .../src/TriggerSummaryAlg.cxx | 13 +- .../DecisionHandling/src/TriggerSummaryAlg.h | 2 +- .../src/TestEventViewCreatorAlgorithm.cxx | 158 ++ .../src/TestEventViewCreatorAlgorithm.h | 52 + .../src/components/ViewAlgs_entries.cxx | 3 + .../TrigUpgradeTest/CMakeLists.txt | 36 +- .../TrigUpgradeTest/python/HLTCFConfig.py | 265 ++- .../TrigUpgradeTest/python/MenuComponents.py | 40 +- .../share/EmuStepProcessing.ref | 1686 +++++++++++++++++ .../share/EmuStepProcessingTest.py | 11 +- .../share/HLTSignatureConfig.py | 25 +- .../TrigUpgradeTest/share/egamma.menu.py | 550 +++++- .../TrigUpgradeTest/share/egamma.withViews.py | 16 +- .../TrigUpgradeTest/src/TestComboHypoAlg.cxx | 149 +- .../TrigUpgradeTest/src/TestHypoAlg.cxx | 2 +- .../TrigUpgradeTest/src/TestHypoTool.cxx | 4 +- .../TrigUpgradeTest/src/TestInputMaker.cxx | 146 +- .../TrigUpgradeTest/src/TestInputMaker.h | 13 +- .../TrigUpgradeTest/src/TestRecoAlg.cxx | 58 +- .../components/TrigUpgradeTest_entries.cxx | 1 + .../TrigUpgradeTest/test/test_egamma_menu.sh | 5 + 28 files changed, 3780 insertions(+), 297 deletions(-) create mode 100644 Trigger/TrigHypothesis/TrigEgammaHypo/python/TestTrigL2CaloHypoTool.py create mode 100644 Trigger/TrigHypothesis/TrigEgammaHypo/src/TestTrigL2CaloHypoAlg.cxx create mode 100644 Trigger/TrigHypothesis/TrigEgammaHypo/src/TestTrigL2CaloHypoAlg.h create mode 100644 Trigger/TrigHypothesis/TrigEgammaHypo/src/TestTrigL2CaloHypoToolInc.cxx create mode 100644 Trigger/TrigHypothesis/TrigEgammaHypo/src/TestTrigL2CaloHypoToolInc.h create mode 100644 Trigger/TrigSteer/ViewAlgs/src/TestEventViewCreatorAlgorithm.cxx create mode 100644 Trigger/TrigSteer/ViewAlgs/src/TestEventViewCreatorAlgorithm.h create mode 100644 Trigger/TrigValidation/TrigUpgradeTest/share/EmuStepProcessing.ref create mode 100755 Trigger/TrigValidation/TrigUpgradeTest/test/test_egamma_menu.sh diff --git a/Trigger/TrigAlgorithms/TrigT2CaloEgamma/src/T2CaloEgammaFastAlgo.cxx b/Trigger/TrigAlgorithms/TrigT2CaloEgamma/src/T2CaloEgammaFastAlgo.cxx index 51b63eea6d6..6be60937234 100755 --- a/Trigger/TrigAlgorithms/TrigT2CaloEgamma/src/T2CaloEgammaFastAlgo.cxx +++ b/Trigger/TrigAlgorithms/TrigT2CaloEgamma/src/T2CaloEgammaFastAlgo.cxx @@ -88,11 +88,15 @@ StatusCode T2CaloEgammaFastAlgo::execute() m_trigEmClusterCollection = SG::WriteHandle<xAOD::TrigEMClusterContainer>( m_clusterContainerKey, getContext() ); ATH_CHECK( m_trigEmClusterCollection.record( CxxUtils::make_unique<xAOD::TrigEMClusterContainer>(), CxxUtils::make_unique<xAOD::TrigEMClusterAuxContainer>() ) ); - + ATH_MSG_DEBUG( "Made WriteHandle " << m_clusterContainerKey ); + ATH_MSG_INFO( name() << " running with store " << getContext().getExtension<Atlas::ExtendedEventContext>()->proxy()->name() ); + auto roisHandle = SG::makeHandle( m_roiCollectionKey ); + ATH_MSG_DEBUG( "Made handle " << m_roiCollectionKey ); const TrigRoiDescriptorCollection* roiCollection = roisHandle.cptr(); // ATH_CHECK(m_roiCollectionKey.isValid()); + ATH_MSG_DEBUG( "Made pointer " << m_roiCollectionKey << " with "<< roiCollection->size() <<" elements" ); const TrigRoiDescriptor* roiDescriptor = 0; //TrigRoiDescriptor* roiDescriptor = 0; diff --git a/Trigger/TrigHypothesis/TrigEgammaHypo/python/TestTrigL2CaloHypoTool.py b/Trigger/TrigHypothesis/TrigEgammaHypo/python/TestTrigL2CaloHypoTool.py new file mode 100644 index 00000000000..6e71228da00 --- /dev/null +++ b/Trigger/TrigHypothesis/TrigEgammaHypo/python/TestTrigL2CaloHypoTool.py @@ -0,0 +1,191 @@ +# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +import re +_pattern = "(?P<mult>\d*)(e(?P<threshold1>\d+))(e(?P<threshold2>\d+))*" +_cpattern = re.compile( _pattern ) + +from AthenaCommon.SystemOfUnits import GeV + + + + +def _TestIncTool(name, threshold, sel): + + from TrigEgammaHypo.TrigEgammaHypoConf import TestTrigL2CaloHypoToolInc + #print "configuring threshold " , threshold , " slection " , sel + + from TrigL2CaloHypoCutDefs import L2CaloCutMaps + possibleSel = L2CaloCutMaps( threshold ).MapsHADETthr.keys() + + + tool = TestTrigL2CaloHypoToolInc( name ) + tool.AcceptAll = False + tool.MonTool = "" + from TriggerJobOpts.TriggerFlags import TriggerFlags + #print "monitoring", TriggerFlags.enableMonitoring() + + + if 'Validation' in TriggerFlags.enableMonitoring() or 'Online' in TriggerFlags.enableMonitoring(): + from AthenaMonitoring.GenericMonitoringTool import GenericMonitoringTool, defineHistogram + monTool = GenericMonitoringTool("MonTool"+name) + monTool.Histograms = [ defineHistogram('dEta', type='TH1F', title="L2Calo Hypo #Delta#eta_{L2 L1}; #Delta#eta_{L2 L1}", xbins=80, xmin=-0.01, xmax=0.01), + defineHistogram('dPhi', type='TH1F', title="L2Calo Hypo #Delta#phi_{L2 L1}; #Delta#phi_{L2 L1}", xbins=80, xmin=-0.01, xmax=0.01), + defineHistogram('Et_em', type='TH1F', title="L2Calo Hypo cluster E_{T}^{EM};E_{T}^{EM} [MeV]", xbins=50, xmin=-2000, xmax=100000), + defineHistogram('Eta', type='TH1F', title="L2Calo Hypo entries per Eta;Eta", xbins=100, xmin=-2.5, xmax=2.5), + defineHistogram('Phi', type='TH1F', title="L2Calo Hypo entries per Phi;Phi", xbins=128, xmin=-3.2, xmax=3.2) ] + + cuts=['Input','has one TrigEMCluster', '#Delta #eta L2-L1', '#Delta #phi L2-L1','eta','rCore', + 'eRatio','E_{T}^{EM}', 'E_{T}^{Had}','f_{1}','Weta2','Wstot','F3'] + + labelsDescription = '' + for c in cuts: + labelsDescription += c+':' + + monTool.Histograms += [ defineHistogram('CutCounter', type='TH1I', title="L2Calo Hypo Passed Cuts;Cut", + xbins=13, xmin=-1.5, xmax=12.5, opt="kCumulative", labels=labelsDescription) ] + + if 'Validation' in TriggerFlags.enableMonitoring(): + monTool.Histograms += [ defineHistogram('Et_had', type='TH1F', title="L2Calo Hypo E_{T}^{had} in first layer;E_{T}^{had} [MeV]", xbins=50, xmin=-2000, xmax=100000), + defineHistogram('Rcore', type='TH1F', title="L2Calo Hypo R_{core};E^{3x3}/E^{3x7} in sampling 2", xbins=48, xmin=-0.1, xmax=1.1), + defineHistogram('Eratio', type='TH1F', title="L2Calo Hypo E_{ratio};E^{max1}-E^{max2}/E^{max1}+E^{max2} in sampling 1 (excl.crack)", xbins=64, xmin=-0.1, xmax=1.5), + defineHistogram('EtaBin', type='TH1I', title="L2Calo Hypo entries per Eta bin;Eta bin no.", xbins=11, xmin=-0.5, xmax=10.5), + defineHistogram('F1', type='TH1F', title="L2Calo Hypo f_{1};f_{1}", xbins=34, xmin=-0.5, xmax=1.2), + defineHistogram('Weta2', type='TH1F', title="L2Calo Hypo Weta2; E Width in sampling 2", xbins=96, xmin=-0.1, xmax=0.61), + defineHistogram('Wstot', type='TH1F', title="L2Calo Hypo Wstot; E Width in sampling 1", xbins=48, xmin=-0.1, xmax=11.), + defineHistogram('F3', type='TH1F', title="L2Calo Hypo F3; E3/(E0+E1+E2+E3)", xbins=96, xmin=-0.1, xmax=1.1) ] + + monTool.HistPath = 'L2CaloHypo/'+tool.name() + tool.MonTool = monTool + tool += monTool + + + + + tool.EtaBins = [0.0, 0.6, 0.8, 1.15, 1.37, 1.52, 1.81, 2.01, 2.37, 2.47] + def same( val ): + return [val]*( len( tool.EtaBins ) - 1 ) + + tool.ETthr = same( float(threshold) ) + tool.dETACLUSTERthr = 0.1 + tool.dPHICLUSTERthr = 0.1 + tool.F1thr = same( 0.005 ) + tool.ET2thr = same( 90.0*GeV ) + tool.HADET2thr = same( 999.0 ) + tool.HADETthr = same( 0.058 ) + tool.WETA2thr = same( 99999. ) + tool.WSTOTthr = same( 99999. ) + tool.F3thr = same( 99999. ) + tool.CARCOREthr = same( -9999. ) + tool.CAERATIOthr = same( -9999. ) + + if sel == 'nocut': + tool.AcceptAll = True + tool.ETthr = same( float( threshold )*GeV ) + tool.dETACLUSTERthr = 9999. + tool.dPHICLUSTERthr = 9999. + tool.F1thr = same( 0.0 ) + tool.HADETthr = same( 9999. ) + tool.CARCOREthr = same( -9999. ) + tool.CAERATIOthr = same( -9999. ) + + elif sel == "etcut": + tool.ETthr = same( ( float( threshold ) - 3 )*GeV ) + # No other cuts applied + tool.dETACLUSTERthr = 9999. + tool.dPHICLUSTERthr = 9999. + tool.F1thr = same( 0.0 ) + tool.HADETthr = same( 9999. ) + tool.CARCOREthr = same( -9999. ) + tool.CAERATIOthr = same( -9999. ) + + elif sel in possibleSel: # real selection + tool.ETthr = same( ( float( threshold ) - 3 )*GeV ) + tool.HADETthr = L2CaloCutMaps( threshold ).MapsHADETthr[sel] + tool.CARCOREthr = L2CaloCutMaps( threshold ).MapsCARCOREthr[sel] + tool.CAERATIOthr = L2CaloCutMaps( threshold ).MapsCAERATIOthr[sel] + + + etaBinsLen = len( tool.EtaBins ) - 1 + for prop in "ETthr HADETthr CARCOREthr CARCOREthr F1thr F3thr WSTOTthr WETA2thr HADETthr HADETthr ET2thr".split(): + propLen = len( getattr( tool, prop ) ) + assert propLen == etaBinsLen , "In " + name + " " + prop + " has length " + str( propLen ) + " which is different from EtaBins which has length " + str( etaBinsLen ) + + # assert _l( EtaBins, tool.ETthr, tool.HADETthr, tool.CARCOREthr, tool.CARCOREthr ) , "All list properties should have equal length ( as EtaBins )" + #print tool + return tool + + +def _MultTool(name): + from TrigEgammaHypo.TrigEgammaHypoConf import TrigL2CaloHypoToolMult + return TrigL2CaloHypoToolMult( name ) + + +def decodeThreshold( threshold ): + """ decodes the thresholds of the form e10, 2e10, e10e15, ... """ + print "decoding ", threshold + if threshold[0].isdigit(): # is if the from NeX, return as list [X,X,X...N times...] + assert threshold[1] == 'e', "Two digit multiplicity not supported" + return [ threshold[2:] ] * int( threshold[0] ) + + if threshold.count('e') > 1: # is of the form eXeYeZ, return as [X, Y, Z] + return threshold.strip('e').split('e') + + # inclusive, return as 1 element list + return [ threshold[1:] ] + +def TestTrigL2CaloHypoToolFromName( name ): + from AthenaCommon.Constants import DEBUG + """ decode the name ( chain ) and figure out the threshold and selection from it """ + #print "Configuring ", name + bname = name.split('_') + threshold = bname[1] + sel = bname[2] + + dt = decodeThreshold( threshold ) + assert len(dt) >= 1, "Threshold "+ threshold +" not decoded properly" + + if len( dt ) > 1: + tool = _MultTool(name) + for cutNumber, th in enumerate( dt ): + print "cut and threshold ", cutNumber, th + tool.SubTools += [ _IncTool( name+"_"+str(cutNumber), th, sel ) ] + for t in tool.SubTools: + t.OutputLevel=DEBUG + else: + tool = _TestIncTool( name, dt[0], sel ) + return tool + +if __name__ == "__main__": + from TriggerJobOpts.TriggerFlags import TriggerFlags + TriggerFlags.enableMonitoring=['Validation'] + t = TrigL2CaloHypoToolFromName( "HLT_e10_nocut" ) + assert t, "cant configure NoCut" + #print t + + t = TrigL2CaloHypoToolFromName( "HLT_e10_etcut" ) + assert t, "cant configure EtCut" + #print t + + t = TrigL2CaloHypoToolFromName( "HLT_e10_tight" ) + assert t, "cant configure rel selection - tight" + #print t + + t = TrigL2CaloHypoToolFromName( "HLT_e10_perf" ) + assert t, "cant configure rel selection - perf" + #print t + + t = TrigL2CaloHypoToolFromName( "HLT_2e5_etcut" ) + assert t, "cant configure symmetric selection" + assert len(t.SubTools) == 2, "Sub-tools not configured" + #print t + + t = TrigL2CaloHypoToolFromName( "HLT_3e5_etcut" ) + assert t, "cant configure symmetric selection" + assert len(t.SubTools) == 3, "Sub-tools not configured" + + + t = TrigL2CaloHypoToolFromName( "HLT_e5e3_etcut" ) + assert t, "cant configure asymmetric selection" + assert len(t.SubTools) == 2, "Sub-tools not configured" + #print t + + print ( "\n\nALL OK\n\n" ) diff --git a/Trigger/TrigHypothesis/TrigEgammaHypo/src/TestTrigL2CaloHypoAlg.cxx b/Trigger/TrigHypothesis/TrigEgammaHypo/src/TestTrigL2CaloHypoAlg.cxx new file mode 100644 index 00000000000..0715e65f5de --- /dev/null +++ b/Trigger/TrigHypothesis/TrigEgammaHypo/src/TestTrigL2CaloHypoAlg.cxx @@ -0,0 +1,183 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +#include "GaudiKernel/Property.h" +#include "TestTrigL2CaloHypoAlg.h" + +using namespace TrigCompositeUtils; + +TestTrigL2CaloHypoAlg::TestTrigL2CaloHypoAlg( const std::string& name, + ISvcLocator* pSvcLocator ) : + ::AthReentrantAlgorithm( name, pSvcLocator ) {} + +TestTrigL2CaloHypoAlg::~TestTrigL2CaloHypoAlg() {} + +StatusCode TestTrigL2CaloHypoAlg::initialize() { + ATH_MSG_INFO ( "Initializing " << name() << "..." ); + ATH_MSG_DEBUG( "RunInView = " << ( m_runInView==true ? "True" : "False" ) ); + + CHECK( m_hypoTools.retrieve() ); + + CHECK( m_clustersKey.initialize() ); + if ( m_runInView) renounce( m_clustersKey );// clusters are made in views, so they are not in the EvtStore: hide them + + CHECK( m_previousDecisionsKey.initialize() ); + renounce(m_previousDecisionsKey); + + CHECK( m_decisionsKey.initialize() ); + return StatusCode::SUCCESS; +} + + + + /* +OLD + ITC -> get 1 RoI/TC + loop over views + make one TC per view + get RoIs of view - from RoI input + get clusters of view -from View input + map the roi to a decision - from input decisions + create new decision with one cluster, one roi, one view + +NEW + loop over ITC + get RoI and view of TC + get cluster of that view + create new decision with one cluster, one roi, one view + + */ + +StatusCode TestTrigL2CaloHypoAlg::execute_r( const EventContext& context ) const { + ATH_MSG_DEBUG ( "Executing " << name() << "..." ); + + // new decisions + auto decisions = std::make_unique<DecisionContainer>(); + auto aux = std::make_unique<DecisionAuxContainer>(); + decisions->setStore( aux.get() ); + + // input for decision + std::vector<ITrigL2CaloHypoTool::ClusterInfo> toolInput; + + // loop over previous decisions + auto previousDecisionsHandle = SG::makeHandle( m_previousDecisionsKey, context ); + size_t counter=0; + for ( auto previousDecision: *previousDecisionsHandle ) { + //get RoI + auto roiEL = previousDecision->objectLink<TrigRoiDescriptorCollection>( "initialRoI" ); + CHECK( roiEL.isValid() ); + const TrigRoiDescriptor* roi = *roiEL; + + // get View + auto viewEL = previousDecision->objectLink<std::vector<SG::View*>>( "view" ); + CHECK( viewEL.isValid() ); + const SG::View* view_const = *viewEL; + SG::View* view = const_cast<SG::View*>(view_const); // CHECK THIS! + + // get clusters of that view + auto clusterHandle = SG::makeHandle( m_clustersKey, context ); + CHECK( clusterHandle.setProxyDict( view ) ); + ATH_MSG_DEBUG ( "Cluster handle size: " << clusterHandle->size() << "..." ); + + // create new decision + auto d = newDecisionIn( decisions.get() ); + + + toolInput.emplace_back( d, roi, clusterHandle.cptr()->at(0), previousDecision ); + + { + auto el = ElementLink<xAOD::TrigEMClusterContainer>( view->name()+"_"+clusterHandle.key(), 0 ); // 0 because there is only one obj in per-view collection + CHECK( el.isValid() ); + d->setObjectLink( "feature", el ); + } + d->setObjectLink( "roi", roiEL ); + d->setObjectLink( "view", viewEL ); + d->setObjectLink( "previousDecisions", ElementLink<DecisionContainer>(m_previousDecisionsKey.key(), counter) );// link to previous decision object + + ATH_MSG_DEBUG( "Added view, roi, cluster, previous decision to new decision "<<counter <<" for view "<<view->name() ); + counter++; + + } + + ATH_MSG_DEBUG( "Found "<<toolInput.size()<<" inputs to tools"); + + + for ( auto& tool: m_hypoTools ) { + CHECK( tool->decide( toolInput ) ); + } + + { + auto handle = SG::makeHandle( m_decisionsKey, context ); + CHECK( handle.record( std::move( decisions ), std::move( aux ) ) ); + ATH_MSG_DEBUG ( "Exit with "<<handle->size() <<" decision objects"); + } + + return StatusCode::SUCCESS; +} + + +// StatusCode TestTrigL2CaloHypoAlg::execute_rold( const EventContext& context ) const { +// ATH_MSG_DEBUG ( "Executing " << name() << "..." ); +// auto viewsHandle = SG::makeHandle( m_viewsKey, context ); + +// auto decisions = std::make_unique<DecisionContainer>(); +// auto aux = std::make_unique<DecisionAuxContainer>(); +// decisions->setStore( aux.get() ); + +// std::map<const TrigRoiDescriptor*, const TrigCompositeUtils::Decision* > roiToDecision; +// auto previousDecisionsHandle = SG::makeHandle( m_previousDecisionsKey, context ); +// for ( auto previousDecision: *previousDecisionsHandle ) { +// auto roiEL = previousDecision->objectLink<TrigRoiDescriptorCollection>( "initialRoI" ); +// CHECK( roiEL.isValid() ); +// const TrigRoiDescriptor* roi = *roiEL; +// roiToDecision.insert( std::make_pair( roi, previousDecision ) ); +// } +// ATH_MSG_DEBUG( "RoI to decisions map size: " << roiToDecision.size() ); + + +// std::vector<ITrigL2CaloHypoTool::ClusterInfo> toolInput; +// // exploit knowledge that there is one cluster in the view +// size_t counter = 0; +// for ( auto view: *viewsHandle ) { +// auto d = newDecisionIn( decisions.get() ); + +// auto roiHandle = SG::makeHandle( m_roisKey, context ); +// CHECK( roiHandle.setProxyDict( view ) ); +// const TrigRoiDescriptor* roi = roiHandle.cptr()->at(0); + +// auto clusterHandle = SG::makeHandle( m_clustersKey, context ); +// CHECK( clusterHandle.setProxyDict( view ) ); + +// toolInput.emplace_back( d, roi, clusterHandle.cptr()->at(0), roiToDecision[roi] ); + +// { +// auto el = ElementLink<xAOD::TrigEMClusterContainer>( view->name()+"_"+clusterHandle.key(), 0 ); // 0 because there is only one obj in per-view collection +// CHECK( el.isValid() ); +// d->setObjectLink( "feature", el ); +// } +// { +// auto el = ElementLink<TrigRoiDescriptorCollection>( view->name()+"_"+m_roisKey.key(), 0 ); +// CHECK( el.isValid() ); +// d->setObjectLink( "roi", el ); +// } +// { +// auto el = ElementLink< std::vector<SG::View*> >( m_viewsKey.key(), counter ); +// CHECK( el.isValid() ); +// d->setObjectLink( "view", el ); +// } +// } + +// for ( auto& tool: m_hypoTools ) { +// CHECK( tool->decide( toolInput ) ); +// } + +// { +// auto handle = SG::makeHandle( m_decisionsKey, context ); +// CHECK( handle.record( std::move( decisions ), std::move( aux ) ) ); +// } + +// return StatusCode::SUCCESS; +// } + + diff --git a/Trigger/TrigHypothesis/TrigEgammaHypo/src/TestTrigL2CaloHypoAlg.h b/Trigger/TrigHypothesis/TrigEgammaHypo/src/TestTrigL2CaloHypoAlg.h new file mode 100644 index 00000000000..4065cf10c1f --- /dev/null +++ b/Trigger/TrigHypothesis/TrigEgammaHypo/src/TestTrigL2CaloHypoAlg.h @@ -0,0 +1,46 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ +#ifndef TRIGEGAMMAHYPO_TESTTRIGL2CALOHYPOALG_H +#define TRIGEGAMMAHYPO_TESTTRIGL2CALOHYPOALG_H 1 + +#include <string> + +#include "AthenaBaseComps/AthReentrantAlgorithm.h" +#include "AthViews/View.h" +#include "TrigSteeringEvent/TrigRoiDescriptorCollection.h" +#include "xAODTrigCalo/TrigEMClusterContainer.h" +#include "DecisionHandling/TrigCompositeUtils.h" + +#include "ITrigL2CaloHypoTool.h" + +/** + * @class Implements egamma calo selection for the new HLT framework + * @brief + **/ + +class TestTrigL2CaloHypoAlg : public ::AthReentrantAlgorithm { + public: + + TestTrigL2CaloHypoAlg( const std::string& name, ISvcLocator* pSvcLocator ); + + virtual ~TestTrigL2CaloHypoAlg(); + + virtual StatusCode initialize() override; + virtual StatusCode execute_r( const EventContext& context ) const override; + + + private: + TestTrigL2CaloHypoAlg(); + ToolHandleArray< ITrigL2CaloHypoTool > m_hypoTools { this, "HypoTools", {}, "Hypo tools" }; + + SG::ReadHandleKey< xAOD::TrigEMClusterContainer > m_clustersKey { this, "CaloClusters", "CaloClusters", "CaloClusters in view" }; + SG::ReadHandleKey<TrigCompositeUtils::DecisionContainer> m_previousDecisionsKey { this, "previousDecisions", "Unspecified", "Input decisions" }; + SG::WriteHandleKey< TrigCompositeUtils::DecisionContainer > m_decisionsKey { this, "Decisions", "Unspecified", "Output Decisions" }; + + Gaudi::Property< bool > m_runInView { this, "RunInView", false , "Set input DH for running in views" }; + +}; + +DECLARE_ALGORITHM_FACTORY( TestTrigL2CaloHypoAlg ) +#endif //> !TRIGEGAMMAHYPO_TESTTRIGL2CALOHYPOALG_H diff --git a/Trigger/TrigHypothesis/TrigEgammaHypo/src/TestTrigL2CaloHypoToolInc.cxx b/Trigger/TrigHypothesis/TrigEgammaHypo/src/TestTrigL2CaloHypoToolInc.cxx new file mode 100644 index 00000000000..b4438697ba6 --- /dev/null +++ b/Trigger/TrigHypothesis/TrigEgammaHypo/src/TestTrigL2CaloHypoToolInc.cxx @@ -0,0 +1,349 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +#include <algorithm> +#include "DecisionHandling/HLTIdentifier.h" +#include "DecisionHandling/Combinators.h" +#include "AthenaMonitoring/MonitoredScope.h" + +#include "TestTrigL2CaloHypoToolInc.h" + + +using namespace TrigCompositeUtils; + +TestTrigL2CaloHypoToolInc::TestTrigL2CaloHypoToolInc( const std::string& type, + const std::string& name, + const IInterface* parent ) + : base_class( type, name, parent ) {}//, + // m_decisionId( HLT::Identifier::fromToolName( name ) ) {} + +StatusCode TestTrigL2CaloHypoToolInc::initialize() { + ATH_MSG_DEBUG( "Initialization completed successfully" ); + ATH_MSG_DEBUG( "AcceptAll = " << ( m_acceptAll==true ? "True" : "False" ) ); + ATH_MSG_DEBUG( "EtaBins = " << m_etabin ); + ATH_MSG_DEBUG( "ETthr = " << m_eTthr << "( lo )/" << m_eT2thr << "( hi )" ); + ATH_MSG_DEBUG( "HADETthr = " << m_hadeTthr << "( lo )/" << m_hadeT2thr << "( hi )" ); + ATH_MSG_DEBUG( "CARCOREthr = " << m_carcorethr ); + ATH_MSG_DEBUG( "CAERATIOthr = " << m_caeratiothr ); + ATH_MSG_DEBUG( "dPHICLUSTERthr = " << m_dphicluster ); + ATH_MSG_DEBUG( "dETACLUSTERthr = " << m_detacluster ); + ATH_MSG_DEBUG( "WETA2thr = " << m_WETA2thr ); + ATH_MSG_DEBUG( "WSTOTthr = " << m_WSTOTthr ); + ATH_MSG_DEBUG( "F3thr = " << m_F3thr ); + + if ( m_etabin.size() == 0 ) { + ATH_MSG_ERROR( " There are no cuts set (EtaBins property is an empty list)" ); + return StatusCode::FAILURE; + } + + unsigned int nEtaBin = m_etabin.size(); +#define CHECK_SIZE( __n) if ( m_##__n.size() != (nEtaBin - 1) ) \ + { ATH_MSG_DEBUG(" __n size is " << m_##__n.size() << " but needs to be " << (nEtaBin - 1) ); return StatusCode::FAILURE; } + + CHECK_SIZE( eTthr ); + CHECK_SIZE( eT2thr ); + CHECK_SIZE( hadeTthr ); + CHECK_SIZE( hadeT2thr ); + CHECK_SIZE( carcorethr ); + CHECK_SIZE( caeratiothr ); + CHECK_SIZE( WETA2thr ); + CHECK_SIZE( WSTOTthr ); + CHECK_SIZE( F3thr ); +#undef CHECK_SIZE + + + + // ATH_MSG_DEBUG( "Tool configured for chain/id: " << m_decisionId ); + + if ( not m_monTool.name().empty() ) + CHECK( m_monTool.retrieve() ); + + CHECK( not m_chainsProperty.empty() ); + + for ( const std::string& el: m_chainsProperty ) + m_chains.insert( HLT::Identifier( el ).numeric() ); + + for ( const HLT::Identifier& id: m_chains ) + ATH_MSG_DEBUG( "Configured to require chain " << id ); + + + + return StatusCode::SUCCESS; +} + + + +TestTrigL2CaloHypoToolInc::~TestTrigL2CaloHypoToolInc(){} + + +bool TestTrigL2CaloHypoToolInc::decide( const ITrigL2CaloHypoTool::ClusterInfo& input ) const { + + ATH_MSG_DEBUG( "start decide" ); + bool pass = false; + + using namespace Monitored; + // TB Not sure if anything else than the CutCounter should monitored it in every cut tool, + // Should quantitities be filled only after the succesful selection? + + auto dEta = MonitoredScalar::declare( "dEta", -1. ); + auto dPhi = MonitoredScalar::declare( "dPhi", -1. ); + auto eT_T2Calo = MonitoredScalar::declare( "Et_em" , -1.0 ); + auto hadET_T2Calo = MonitoredScalar::declare( "Et_had", -1.0 ); + auto rCore = MonitoredScalar::declare( "RCore" , -1.0 ); + auto energyRatio = MonitoredScalar::declare( "ERatio" , -1.0 ); + auto etaBin = MonitoredScalar::declare( "EtaBin", -1. ); + auto monEta = MonitoredScalar::declare( "Eta", -99. ); + auto monPhi = MonitoredScalar::declare( "Phi", -99. ); + auto F1 = MonitoredScalar::declare( "F1" , -1.0 ); + auto Weta2 = MonitoredScalar::declare( "Weta2" , -1.0 ); + auto Wstot = MonitoredScalar::declare( "Wstot" , -1.0 ); + auto F3 = MonitoredScalar::declare( "F3" , -1.0 ); + auto PassedCuts = MonitoredScalar::declare<int>( "CutCounter", -1 ); + auto monitorIt = MonitoredScope::declare( m_monTool, + dEta, dPhi, eT_T2Calo, hadET_T2Calo, + rCore, energyRatio, etaBin, monEta, + monPhi, F1, Weta2, Wstot, F3, PassedCuts ); + // when leaving scope it will ship data to monTool + PassedCuts = PassedCuts + 1; //got called (data in place) + + if ( m_acceptAll ) { + pass = true; + ATH_MSG_DEBUG( "AcceptAll property is set: taking all events" ); + } else { + pass = false; + ATH_MSG_DEBUG( "AcceptAll property not set: applying selection" ); + } + auto roiDescriptor = input.roi; + + + if ( fabs( roiDescriptor->eta() ) > 2.6 ) { + ATH_MSG_DEBUG( "REJECT The cluster had eta coordinates beyond the EM fiducial volume : " << roiDescriptor->eta() << "; stop the chain now" ); + pass=false; // special case + return pass; + } + + ATH_MSG_DEBUG( "; RoI ID = " << roiDescriptor->roiId() + << ": Eta = " << roiDescriptor->eta() + << ", Phi = " << roiDescriptor->phi() ); + + // fill local variables for RoI reference position + double etaRef = roiDescriptor->eta(); + double phiRef = roiDescriptor->phi(); + // correct phi the to right range ( probably not needed anymore ) + if ( fabs( phiRef ) > M_PI ) phiRef -= 2*M_PI; // correct phi if outside range + + + auto pClus = input.cluster; + + float absEta = fabs( pClus->eta() ); + // etaBin = -1; + // monEta = pClus->eta(); + // monPhi = pClus->phi(); + + const int cutIndex = findCutIndex( absEta ); + + // find if electron is in calorimeter crack + bool inCrack = ( absEta > 2.37 || ( absEta > 1.37 && absEta < 1.52 ) ); + + + dEta = pClus->eta() - etaRef; + // Deal with angle diferences greater than Pi + dPhi = fabs( pClus->phi() - phiRef ); + dPhi = ( dPhi < M_PI ? dPhi : 2*M_PI - dPhi ); // TB why only < + + + // calculate cluster quantities // definition taken from TrigElectron constructor + if ( pClus->emaxs1() + pClus->e2tsts1() > 0 ) + energyRatio = ( pClus->emaxs1() - pClus->e2tsts1() ) / ( pClus->emaxs1() + pClus->e2tsts1() ); + + // ( VD ) here the definition is a bit different to account for the cut of e277 @ EF + if ( pClus->e277()!= 0. ) rCore = pClus->e237() / pClus->e277(); + + //fraction of energy deposited in 1st sampling + + if ( fabs( pClus->energy() ) > 0.00001 ) F1 = ( pClus->energy( CaloSampling::EMB1 )+pClus->energy( CaloSampling::EME1 ) )/pClus->energy(); + + eT_T2Calo = pClus->et(); + + if ( eT_T2Calo!=0 && pClus->eta()!=0 ) hadET_T2Calo = pClus->ehad1()/cosh( fabs( pClus->eta() ) )/eT_T2Calo; + + + //extract Weta2 varable + Weta2 = pClus->weta2(); + + //extract Wstot varable + Wstot = pClus->wstot(); + + //extract F3 ( backenergy i EM calorimeter + float e0 = pClus->energy( CaloSampling::PreSamplerB ) + pClus->energy( CaloSampling::PreSamplerE ); + float e1 = pClus->energy( CaloSampling::EMB1 ) + pClus->energy( CaloSampling::EME1 ); + float e2 = pClus->energy( CaloSampling::EMB2 ) + pClus->energy( CaloSampling::EME2 ); + float e3 = pClus->energy( CaloSampling::EMB3 ) + pClus->energy( CaloSampling::EME3 ); + float eallsamples = e0+e1+e2+e3; + F3 = fabs( eallsamples )>0. ? e3/eallsamples : 0.; + + // apply cuts: DeltaEta( clus-ROI ) + ATH_MSG_DEBUG( "TrigEMCluster: eta=" << pClus->eta() + << " roi eta=" << etaRef << " DeltaEta=" << dEta + << " cut: <" << m_detacluster ); + + if ( fabs( pClus->eta() - etaRef ) > m_detacluster ) { + ATH_MSG_DEBUG("REJECT Cluster dEta cut failed"); + return pass; + } + PassedCuts = PassedCuts + 1; //Deta + + // DeltaPhi( clus-ROI ) + ATH_MSG_DEBUG( ": phi=" << pClus->phi() + << " roi phi="<< phiRef << " DeltaPhi="<< dPhi + << " cut: <" << m_dphicluster ); + + if( dPhi > m_dphicluster ) { + ATH_MSG_DEBUG("REJECT Clsuter dPhi cut failed"); + return pass; + } + PassedCuts = PassedCuts + 1; //DPhi + + // eta range + if ( cutIndex == -1 ) { // VD + ATH_MSG_DEBUG( "Cluster eta: " << absEta << " outside eta range " << m_etabin[m_etabin.size()-1] ); + return pass; + } else { + ATH_MSG_DEBUG( "eta bin used for cuts " << cutIndex ); + } + PassedCuts = PassedCuts + 1; // passed eta cut + + // Rcore + ATH_MSG_DEBUG ( "TrigEMCluster: Rcore=" << rCore + << " cut: >" << m_carcorethr[cutIndex] ); + if ( rCore < m_carcorethr[cutIndex] ) { + ATH_MSG_DEBUG("REJECT rCore cut failed"); + return pass; + } + PassedCuts = PassedCuts + 1; //Rcore + + // Eratio + ATH_MSG_DEBUG( " cut: >" << m_caeratiothr[cutIndex] ); + if ( inCrack || F1 < m_F1thr[0] ) { + ATH_MSG_DEBUG ( "TrigEMCluster: InCrack= " << inCrack << " F1=" << F1 ); + } else { + if ( energyRatio < m_caeratiothr[cutIndex] ) { + ATH_MSG_DEBUG("REJECT e ratio cut failed"); + return pass; + } + } + PassedCuts = PassedCuts + 1; //Eratio + if( inCrack ) energyRatio = -1; //Set default value in crack for monitoring. + + // ET_em + ATH_MSG_DEBUG( "TrigEMCluster: ET_em=" << eT_T2Calo << " cut: >" << m_eTthr[cutIndex] ); + if ( eT_T2Calo < m_eTthr[cutIndex] ) { + ATH_MSG_DEBUG("REJECT et cut failed"); + return pass; + } + PassedCuts = PassedCuts + 1; // ET_em + + float hadET_cut = 0.0; + // find which ET_had to apply : this depends on the ET_em and the eta bin + if ( eT_T2Calo > m_eT2thr[cutIndex] ) { + hadET_cut = m_hadeT2thr[cutIndex] ; + + ATH_MSG_DEBUG ( "ET_em>" << m_eT2thr[cutIndex] << ": use high ET_had cut: <" << hadET_cut ); + } else { + hadET_cut = m_hadeTthr[cutIndex]; + + ATH_MSG_DEBUG ( "ET_em<" << m_eT2thr[cutIndex] << ": use low ET_had cut: <" << hadET_cut ); + } + + // ET_had + ATH_MSG_DEBUG ( "TrigEMCluster: ET_had=" << hadET_T2Calo << " cut: <" << hadET_cut ); + + if ( hadET_T2Calo > hadET_cut ) { + ATH_MSG_DEBUG("REJECT et had cut failed"); + return pass; + } + PassedCuts = PassedCuts + 1; //ET_had + + // F1 + ATH_MSG_DEBUG ( "TrigEMCluster: F1=" << F1 << " cut: >" << m_F1thr[0] ); + // if ( m_F1 < m_F1thr[0] ) return pass; //( VD ) not cutting on this variable, only used to select whether to cut or not on eRatio + PassedCuts = PassedCuts + 1; //F1 + + //Weta2 + ATH_MSG_DEBUG ( "TrigEMCluster: Weta2=" << Weta2 << " cut: <" << m_WETA2thr[cutIndex] ); + if ( Weta2 > m_WETA2thr[cutIndex] ) { + ATH_MSG_DEBUG("REJECT weta 2 cut failed"); + return pass; + } + PassedCuts = PassedCuts + 1; //Weta2 + + //Wstot + ATH_MSG_DEBUG ( "TrigEMCluster: Wstot=" <<Wstot << " cut: <" << m_WSTOTthr[cutIndex] ); + if ( Wstot >= m_WSTOTthr[cutIndex] ) { + ATH_MSG_DEBUG("REJECT wstot cut failed"); + return pass; + } + PassedCuts = PassedCuts + 1; //Wstot + + //F3 + ATH_MSG_DEBUG( "TrigEMCluster: F3=" << F3 << " cut: <" << m_F3thr[cutIndex] ); + if ( F3 > m_F3thr[cutIndex] ) { + ATH_MSG_DEBUG("REJECT F3 cut failed"); + return pass; + } + PassedCuts = PassedCuts + 1; //F3 + + // got this far => passed! + pass = true; + + // Reach this point successfully + ATH_MSG_DEBUG( "pass = " << pass ); + + return pass; +} + +int TestTrigL2CaloHypoToolInc::findCutIndex( float eta ) const { + const float absEta = std::abs(eta); + + auto binIterator = std::adjacent_find( m_etabin.begin(), m_etabin.end(), [=](float left, float right){ return left < absEta and absEta < right; } ); + if ( binIterator == m_etabin.end() ) { + return -1; + } + return binIterator - m_etabin.begin(); +} + + +StatusCode TestTrigL2CaloHypoToolInc::decide( std::vector<ClusterInfo>& input ) const { + ATH_MSG_DEBUG( "start decide on "<<input.size() <<" inputs" ); + size_t counter = 0; + for ( auto& i: input ) { + + auto objDecisions = i.previousDecisionIDs; + + ATH_MSG_DEBUG("Number of previous decisions for input "<< counter <<"= " << objDecisions.size() ); + + for ( TrigCompositeUtils::DecisionID id : objDecisions ) { + ATH_MSG_DEBUG( " -- found decision " << HLT::Identifier( id ) ); + } + + std::vector<TrigCompositeUtils::DecisionID> intersection; + std::set_intersection( m_chains.begin(), m_chains.end(), + objDecisions.begin(), objDecisions.end(), + std::back_inserter( intersection ) ); + // if there are active chains requiring this tool + if ( not intersection.empty() ) { + if ( decide( i ) ) { + for ( const HLT::Identifier& id: intersection ) + addDecisionID( id, i.decision ); + } + } + else { + ATH_MSG_DEBUG("No Input decisions requested by active chains"); + for ( const HLT::Identifier& id: m_chains ) + ATH_MSG_DEBUG( "Configured to require chain " << id ); + } + counter++; + } + return StatusCode::SUCCESS; +} diff --git a/Trigger/TrigHypothesis/TrigEgammaHypo/src/TestTrigL2CaloHypoToolInc.h b/Trigger/TrigHypothesis/TrigEgammaHypo/src/TestTrigL2CaloHypoToolInc.h new file mode 100644 index 00000000000..6f5dbde141f --- /dev/null +++ b/Trigger/TrigHypothesis/TrigEgammaHypo/src/TestTrigL2CaloHypoToolInc.h @@ -0,0 +1,62 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ +#ifndef TRIGEGAMMAHYPO_TESTTRIGL2CALOHYPOTOOLINC_H +#define TRIGEGAMMAHYPO_TESTTRIGL2CALOHYPOTOOLINC_H 1 + +//#include "GaudiKernel/IAlgTool.h" +#include "CLHEP/Units/SystemOfUnits.h" +#include "xAODTrigCalo/TrigEMCluster.h" +#include "TrigSteeringEvent/TrigRoiDescriptor.h" +#include "AthenaBaseComps/AthAlgTool.h" +#include "AthenaMonitoring/GenericMonitoringTool.h" +#include "DecisionHandling/HLTIdentifier.h" +#include "DecisionHandling/TrigCompositeUtils.h" +#include "ITrigL2CaloHypoTool.h" + +/** + * @class Implementation of the Egamma selection for CaloClusters + * @brief + **/ + +class TestTrigL2CaloHypoToolInc : public extends<AthAlgTool, ITrigL2CaloHypoTool> { + public: + TestTrigL2CaloHypoToolInc( const std::string& type, + const std::string& name, + const IInterface* parent ); + + virtual ~TestTrigL2CaloHypoToolInc(); + virtual StatusCode initialize() override; + + virtual StatusCode decide( std::vector<ITrigL2CaloHypoTool::ClusterInfo>& input ) const override; + + virtual bool decide( const ITrigL2CaloHypoTool::ClusterInfo& i ) const override; + + private: + // HLT::Identifier m_decisionId; + + Gaudi::Property<std::vector<std::string> > m_chainsProperty{ this, "Chains", {}, "Chains of whihc this Hypo is concerned" }; + std::set<HLT::Identifier> m_chains; + + //Calorimeter electron ID cuts + Gaudi::Property< std::vector<float> > m_etabin { this, "EtaBins", {} , "Bins of eta" }; //!< selection variable for L2 calo selection:eta bins + Gaudi::Property< std::vector<float> > m_eTthr { this, "ETthr", {}, "ET Threshold" }; + Gaudi::Property< std::vector<float> > m_eT2thr { this, "ET2thr", {}, "Second layer ET threshold" }; + Gaudi::Property< std::vector<float> > m_hadeTthr { this, "HADETthr", {}, "" }; + Gaudi::Property< std::vector<float> > m_hadeT2thr { this, "HADET2thr", {}, "" }; + Gaudi::Property< std::vector<float> > m_carcorethr { this, "CARCOREthr", {}, "" }; + Gaudi::Property< std::vector<float> > m_caeratiothr { this, "CAERATIOthr", {}, "" }; + Gaudi::Property< std::vector<float> > m_F1thr { this, "F1thr", {}, "" }; + Gaudi::Property< std::vector<float> > m_WETA2thr { this, "WETA2thr", {}, "" }; + Gaudi::Property< std::vector<float> > m_WSTOTthr { this, "WSTOTthr", {}, "" }; + Gaudi::Property< std::vector<float> > m_F3thr { this, "F3thr", {}, "" }; + Gaudi::Property< float > m_detacluster { this, "dETACLUSTERthr", 0. , "" }; + Gaudi::Property< float > m_dphicluster { this, "dPHICLUSTERthr", 0. , "" }; + Gaudi::Property< bool > m_acceptAll { this, "AcceptAll", false , "Ignore selection" }; + + ToolHandle< GenericMonitoringTool > m_monTool { this, "MonTool", "", "Monitoring tool" }; + + int findCutIndex( float eta ) const; +}; +DECLARE_TOOL_FACTORY( TestTrigL2CaloHypoToolInc ) +#endif //> !TRIGEGAMMAHYPO_TESTTRIGL2CALOHYPOTOOL_H diff --git a/Trigger/TrigHypothesis/TrigEgammaHypo/src/components/TrigEgammaHypo_entries.cxx b/Trigger/TrigHypothesis/TrigEgammaHypo/src/components/TrigEgammaHypo_entries.cxx index 5e21afd09af..5e36b304f29 100644 --- a/Trigger/TrigHypothesis/TrigEgammaHypo/src/components/TrigEgammaHypo_entries.cxx +++ b/Trigger/TrigHypothesis/TrigEgammaHypo/src/components/TrigEgammaHypo_entries.cxx @@ -14,6 +14,7 @@ #include "TrigEgammaHypo/TrigL2PhotonFex.h" #include "TrigEgammaHypo/TrigL2CaloLayersHypo.h" + DECLARE_COMPONENT( TrigL2CaloHypo ) DECLARE_COMPONENT( TrigL2ElectronFex ) DECLARE_COMPONENT( TrigL2ElectronHypo ) @@ -29,3 +30,7 @@ DECLARE_COMPONENT( TrigEFPhotonHypo ) DECLARE_COMPONENT( TrigEFTrackHypo ) DECLARE_COMPONENT( TrigL2CaloLayersHypo ) + + + + diff --git a/Trigger/TrigSteer/DecisionHandling/src/TriggerSummaryAlg.cxx b/Trigger/TrigSteer/DecisionHandling/src/TriggerSummaryAlg.cxx index 3adde3b67db..9cdaca384de 100644 --- a/Trigger/TrigSteer/DecisionHandling/src/TriggerSummaryAlg.cxx +++ b/Trigger/TrigSteer/DecisionHandling/src/TriggerSummaryAlg.cxx @@ -19,7 +19,7 @@ StatusCode TriggerSummaryAlg::initialize() ATH_MSG_INFO ("Initializing " << name() << "..."); // processing of the chains mapping - CHECK( m_l1decisionKey.initialize() ); + CHECK( m_inputDecisionKey.initialize() ); renounceArray( m_finalDecisionKeys ); CHECK( m_finalDecisionKeys.initialize() ); @@ -34,21 +34,24 @@ StatusCode TriggerSummaryAlg::execute_r(const EventContext& context) const ATH_MSG_DEBUG ("Executing " << name() << "..."); // that is certain input - auto l1DecisionHandle = SG::makeHandle( m_l1decisionKey, context ); + auto l1DecisionHandle = SG::makeHandle( m_inputDecisionKey, context ); auto inputHandles( m_finalDecisionKeys.makeHandles() ); TrigCompositeUtils::DecisionIDContainer allPassingIDs; for ( auto input: inputHandles ) { if ( input.isValid() ) { - ATH_MSG_DEBUG( "Partial result " << input.key() << " present" ); for ( auto decisionObject: *input ) { TrigCompositeUtils::decisionIDs( decisionObject, allPassingIDs ); } + ATH_MSG_DEBUG( "Found "<<input->size()<<" Decisions for " << input.key() ); } else { - ATH_MSG_DEBUG( "Missing input " << input.key() << " which may be perfectly correct" ); + ATH_MSG_DEBUG( "Missing decisions for " << input.key() << " which may be perfectly correct" ); } } - ATH_MSG_DEBUG( "In summary " << allPassingIDs.size() << " chains passed" ); + ATH_MSG_DEBUG( "In summary " << allPassingIDs.size() << " chains passed:" ); + for ( TrigCompositeUtils::DecisionID id : allPassingIDs ) { + ATH_MSG_DEBUG( " +++ " << HLT::Identifier( id ) ); + } // check for an evident error, this is HLT chain not mentioned at the L1 // that is the only reason we pull the L1 here diff --git a/Trigger/TrigSteer/DecisionHandling/src/TriggerSummaryAlg.h b/Trigger/TrigSteer/DecisionHandling/src/TriggerSummaryAlg.h index 5ad274be9ea..6ec7751aa8c 100644 --- a/Trigger/TrigSteer/DecisionHandling/src/TriggerSummaryAlg.h +++ b/Trigger/TrigSteer/DecisionHandling/src/TriggerSummaryAlg.h @@ -29,7 +29,7 @@ class TriggerSummaryAlg : public ::AthReentrantAlgorithm { private: //Gaudi::Propert std::vector<m_chainCounters> { this, "ChainCounters", {}, // "Chain names maping to counters. In the form of: name counter" }; - SG::ReadHandleKey<TrigCompositeUtils::DecisionContainer> m_l1decisionKey{ this, "L1Decision", "", + SG::ReadHandleKey<TrigCompositeUtils::DecisionContainer> m_inputDecisionKey{ this, "InputDecision", "", "Partial decisions from the last stage of chains processing, they nay be missing from event to event"}; diff --git a/Trigger/TrigSteer/ViewAlgs/src/TestEventViewCreatorAlgorithm.cxx b/Trigger/TrigSteer/ViewAlgs/src/TestEventViewCreatorAlgorithm.cxx new file mode 100644 index 00000000000..40c649bc1dd --- /dev/null +++ b/Trigger/TrigSteer/ViewAlgs/src/TestEventViewCreatorAlgorithm.cxx @@ -0,0 +1,158 @@ +/* + General-purpose view creation algorithm <bwynne@cern.ch> + + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +#include "./TestEventViewCreatorAlgorithm.h" + +#include "StoreGate/ReadHandle.h" +#include "StoreGate/WriteHandle.h" +#include "CxxUtils/make_unique.h" +#include "AthContainers/ConstDataVector.h" +#include "AthViews/ViewHelper.h" +#include <DecisionHandling/TrigCompositeUtils.h> +#include "DecisionHandling/HLTIdentifier.h" + + +TestEventViewCreatorAlgorithm::TestEventViewCreatorAlgorithm( const std::string& name, ISvcLocator* pSvcLocator ) + : AthAlgorithm( name, pSvcLocator ) { +} + +StatusCode TestEventViewCreatorAlgorithm::initialize() +{ + + CHECK( m_inputDecisionsKey.initialize() ); + renounceArray(m_inputDecisionsKey); + ATH_MSG_DEBUG("Will consume implicit input data:" ); + for (auto& input: m_inputDecisionsKey){ + ATH_MSG_DEBUG(" "<<input.key()); + } + + ATH_MSG_DEBUG(" and produce Decisions=" << m_outputDecisionsKey <<" views="<<m_viewsKey<<" roIs="<<m_inViewRoIs ); + CHECK( m_outputDecisionsKey.initialize() ); + CHECK( m_viewsKey.initialize() ); + CHECK( m_inViewRoIs.initialize() ); + CHECK( m_scheduler.retrieve() ); + + + return StatusCode::SUCCESS; +} + +StatusCode TestEventViewCreatorAlgorithm::execute() +{ +#ifdef GAUDI_SYSEXECUTE_WITHCONTEXT + const EventContext& ctx = getContext(); +#else + const EventContext& ctx = *getContext(); +#endif + + + ATH_MSG_DEBUG( "number of implicit ReadHandles is " << m_inputDecisionsKey.size() ); + + + // make the views + auto viewVector = std::make_unique<std::vector<SG::View*>>(); + auto contexts = std::vector<EventContext>( ); + + // prepare output decisions + auto OutputDecisions = std::make_unique<TrigCompositeUtils::DecisionContainer>(); + auto aux = std::make_unique<TrigCompositeUtils::DecisionAuxContainer>(); + OutputDecisions->setStore( aux.get() ); + + unsigned int viewCounter = 0; + unsigned int conditionsRun = getContext().getExtension<Atlas::ExtendedEventContext>()->conditionsRun(); + + const TrigRoiDescriptor* previousRoI = 0; + + // Loop over all input containers, which are of course TrigComposites, and request their features + for ( auto inputKey: m_inputDecisionsKey ) { + auto inputDecisions = SG::makeHandle( inputKey ); + ATH_MSG_DEBUG( "Got DecisionContainer from input "<< inputKey.key()<<" with " << inputDecisions->size() << " elements" ); + ATH_MSG_DEBUG( "Preparing " << inputDecisions.cptr()->size() << " views (one per input decision)" ); + + size_t counter = 0; + for ( auto Idecision: *inputDecisions ) { + + //make one TC decision output per input and connect to previous + auto newd = TrigCompositeUtils::newDecisionIn(OutputDecisions.get()); + // link to previous decision object + newd->setObjectLink( "previousDecisions", ElementLink<TrigCompositeUtils::DecisionContainer>(inputKey.key(), counter) ); + + { + //copy decisions ID + TrigCompositeUtils::DecisionIDContainer objDecisions; + TrigCompositeUtils::decisionIDs( Idecision, objDecisions ); + for ( const HLT::Identifier& id: objDecisions ) TrigCompositeUtils::addDecisionID( id, newd ); + } + + ATH_MSG_DEBUG( "Positive decisions on RoI, preparing view" ); + // pull RoI descriptor + CHECK( Idecision->hasObjectLink( m_roisLink ) ); + auto roiDescriptorEL = Idecision->objectLink<TrigRoiDescriptorCollection>( m_roisLink ); + CHECK( roiDescriptorEL.isValid() ); + + auto roiDescriptor = *roiDescriptorEL; + ATH_MSG_DEBUG( "Placing TrigRoiDescriptor " << *roiDescriptor ); + + + if ( previousRoI == roiDescriptor ) continue; + // TODO here code supporting the case wnen we have many decisions associated to a single RoI + previousRoI = roiDescriptor; + + auto oneRoIColl = std::make_unique< ConstDataVector<TrigRoiDescriptorCollection> >(); + oneRoIColl->clear( SG::VIEW_ELEMENTS ); //Don't delete the RoIs + oneRoIColl->push_back( roiDescriptor ); + + newd->setObjectLink( "initialRoI", roiDescriptorEL ); //FPP add this roi to the output + + // make the view + ATH_MSG_DEBUG( "Making the View" ); + auto newview = ViewHelper::makeView( name()+"_view", viewCounter++, m_viewFallThrough ); //pointer to the view + viewVector->push_back( newview ); + contexts.emplace_back( ctx ); + contexts.back().setExtension( Atlas::ExtendedEventContext( viewVector->back(), conditionsRun ) ); + + // link decision to this view + newd->setObjectLink( "view", ElementLink<std::vector<SG::View*> >(m_viewsKey.key(), viewVector->size()-1 ));//adding view to TC + + // see if there is a view linked to the decision object, if so link it to the view that is just made + if ( Idecision->hasObjectLink( "view" ) ) { + auto viewEL = Idecision->objectLink< std::vector<SG::View*> >( "view" ); + CHECK( viewEL.isValid() ); + auto parentView = *viewEL; + viewVector->back()->linkParent( parentView ); + ATH_MSG_DEBUG( "Parent view linked" ); + } + + //store the RoI in the view + auto handle = SG::makeHandle( m_inViewRoIs, contexts.back() ); + CHECK( handle.setProxyDict( viewVector->back() ) ); + CHECK( handle.record( std::move( oneRoIColl ) ) ); + + counter++; + + } + } + + + ATH_MSG_DEBUG( "Launching execution in " << viewVector->size() << " views" ); + CHECK( ViewHelper::ScheduleViews( *viewVector, // Vector containing views + m_viewNodeName, // CF node to attach views to + ctx, // Source context + m_scheduler.get() ) ); + + + // store views + + auto viewsHandle = SG::makeHandle( m_viewsKey ); + CHECK( viewsHandle.record( std::move( viewVector ) ) ); + + //store decisions with all + auto outputHandle = SG::makeHandle(m_outputDecisionsKey, ctx); + CHECK( outputHandle.record(std::move(OutputDecisions), std::move(aux) ) ); + ATH_MSG_DEBUG( "Store "<< viewsHandle->size() <<" Views and "<<outputHandle->size()<<" output decisions" ); + + return StatusCode::SUCCESS; +} + diff --git a/Trigger/TrigSteer/ViewAlgs/src/TestEventViewCreatorAlgorithm.h b/Trigger/TrigSteer/ViewAlgs/src/TestEventViewCreatorAlgorithm.h new file mode 100644 index 00000000000..c70a5879968 --- /dev/null +++ b/Trigger/TrigSteer/ViewAlgs/src/TestEventViewCreatorAlgorithm.h @@ -0,0 +1,52 @@ +/* + General-purpose view creation algorithm <bwynne@cern.ch> + + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +#ifndef ViewAlgs_TestEventViewCreatorAlgorithm_h +#define ViewAlgs_TestEventViewCreatorAlgorithm_h + +#include <vector> +#include <string> + +#include "AthenaBaseComps/AthAlgorithm.h" +#include "AthContainers/ConstDataVector.h" +#include "DecisionHandling/TrigCompositeUtils.h" + +#include "TrigSteeringEvent/TrigRoiDescriptorCollection.h" + +#include "GaudiKernel/IAlgResourcePool.h" +#include "GaudiKernel/IScheduler.h" +#include "AthViews/View.h" + +class TestEventViewCreatorAlgorithm : public AthAlgorithm +{ + public: + TestEventViewCreatorAlgorithm( const std::string& name, ISvcLocator* pSvcLocator ); + StatusCode initialize(); + StatusCode execute(); + + private: + ServiceHandle< IScheduler > m_scheduler{ this, "Scheduler", "AvalancheSchedulerSvc", "The Athena scheduler" }; + + //Input trig composite collection to split into views + SG::ReadHandleKeyArray<TrigCompositeUtils::DecisionContainer> m_inputDecisionsKey { this, "InputDecisions", {}, "The vector name of input decision container (implicit)" } ; + + // Ouput decisions + SG::WriteHandleKey< TrigCompositeUtils::DecisionContainer > m_outputDecisionsKey{ this, "OutputDecisions", "Unspecified", "The name of output decision container" }; + + //Output views for merging + SG::WriteHandleKey< std::vector< SG::View* > > m_viewsKey{ this, "Views", "Unspecified", "The key of views collection produced" }; + + // auxiliary handles + SG::WriteHandleKey< ConstDataVector<TrigRoiDescriptorCollection> > m_inViewRoIs{ this, "InViewRoIs", "Unspecified", "Name with which the RoIs shoudl be inserted into the views" }; + + Gaudi::Property<bool> m_viewPerRoI{ this, "ViewPerRoI", false, "Create one View per RoI as opposed to one View per Decision object, needs to be true when multiple decisions per RoI exists" }; + Gaudi::Property< std::string > m_viewNodeName{ this, "ViewNodeName", "", "Name of the CF node to attach a view to" }; + Gaudi::Property< std::string > m_roisLink{ this, "RoIsLink", "Unspecified", "Name of EL to RoI object lined to the decision" }; + Gaudi::Property< bool > m_viewFallThrough { this, "ViewFallThrough", false, "Set whether views may accesas StoreGate directly to retrieve data" }; +}; + +#endif + diff --git a/Trigger/TrigSteer/ViewAlgs/src/components/ViewAlgs_entries.cxx b/Trigger/TrigSteer/ViewAlgs/src/components/ViewAlgs_entries.cxx index 2c747bfab76..b1a925a8fe9 100644 --- a/Trigger/TrigSteer/ViewAlgs/src/components/ViewAlgs_entries.cxx +++ b/Trigger/TrigSteer/ViewAlgs/src/components/ViewAlgs_entries.cxx @@ -4,6 +4,8 @@ #include "../MergeViews.h" #include "../TrigL2ElectronViewsMergerTool.h" #include "../TrigL2CaloViewsMergerTool.h" +#include "../TestEventViewCreatorAlgorithm.h" + DECLARE_COMPONENT( EventViewCreatorAlgorithm ) @@ -11,3 +13,4 @@ DECLARE_COMPONENT( MergeViews ) DECLARE_COMPONENT( TrigL2ElectronViewsMergerTool ) DECLARE_COMPONENT( TrigL2CaloViewsMergerTool ) +DECLARE_COMPONENT( TestEventViewCreatorAlgorithm ) diff --git a/Trigger/TrigValidation/TrigUpgradeTest/CMakeLists.txt b/Trigger/TrigValidation/TrigUpgradeTest/CMakeLists.txt index cbf885f1dab..5e086c70782 100644 --- a/Trigger/TrigValidation/TrigUpgradeTest/CMakeLists.txt +++ b/Trigger/TrigValidation/TrigUpgradeTest/CMakeLists.txt @@ -13,6 +13,7 @@ atlas_depends_on_subdirs( PUBLIC PRIVATE Control/AthenaBaseComps Trigger/TrigEvent/TrigSteeringEvent + Control/AthViews ) find_package( Boost COMPONENTS filesystem thread system ) @@ -30,7 +31,7 @@ atlas_add_component( TrigUpgradeTest INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${ROOT_INCLUDE_DIRS} LINK_LIBRARIES ${Boost_LIBRARIES} ${ROOT_LIBRARIES} GaudiKernel - AthenaBaseComps TrigUpgradeTestLib ) + AthenaBaseComps TrigUpgradeTestLib AthViews ) atlas_add_test( ViewSchedule1 SCRIPT test/test_view_schedule.sh @@ -43,9 +44,11 @@ atlas_add_test( ViewSchedule64 SCRIPT test/test_view_schedule.sh # out until we find a way to properly invoke tests from other packages # atlas_add_test( creatingEVTest SCRIPT forward.sh ViewAlgsTest/test/creatingEVTest.sh ) -atlas_add_test( merge SCRIPT test/test_merge.sh) +atlas_add_test( merge + SCRIPT test/test_merge.sh) -atlas_add_test( IDRunMC SCRIPT test/test_id_run_mc.sh +atlas_add_test( IDRunMC + SCRIPT test/test_id_run_mc.sh PROPERTIES TIMEOUT 500 ) @@ -58,22 +61,39 @@ atlas_add_test( IDRunData SCRIPT test/test_id_run_data.sh # ) # replaced by complete egamma test -atlas_add_test( egammaRunData SCRIPT test/test_egamma_run_data.sh +atlas_add_test( egammaRunData + SCRIPT test/test_egamma_run_data.sh PROPERTIES TIMEOUT 500 ) +# EXTRA_PATTERNS "TriggerSummary" -atlas_add_test( muRunData SCRIPT test/test_mu_run_data.sh +atlas_add_test( egammaMenu + SCRIPT test/test_egamma_menu.sh PROPERTIES TIMEOUT 500 ) +# EXTRA_PATTERNS "TriggerSummary" +atlas_add_test( muRunData + SCRIPT test/test_mu_run_data.sh + PROPERTIES TIMEOUT 500 + ) -atlas_add_test( idCaloRunData SCRIPT test/test_id_calo_run_data.sh +atlas_add_test( idCaloRunData + SCRIPT test/test_id_calo_run_data.sh PROPERTIES TIMEOUT 500 ) -atlas_add_test( EmuL1Decoding SCRIPT test/test_emu_l1_decoding.sh) -atlas_add_test( EmuStepProcessing SCRIPT test/test_emu_step_processing.sh) +atlas_add_test( EmuL1Decoding + SCRIPT test/test_emu_l1_decoding.sh + ) + +atlas_add_test( EmuStepProcessing + SCRIPT test/test_emu_step_processing.sh + ) +# EXTRA_PATTERNS "TriggerSummary" + + atlas_install_joboptions( share/*.py ) atlas_install_python_modules( python/*.py ) diff --git a/Trigger/TrigValidation/TrigUpgradeTest/python/HLTCFConfig.py b/Trigger/TrigValidation/TrigUpgradeTest/python/HLTCFConfig.py index 454fa3d13cd..c79f698e36a 100644 --- a/Trigger/TrigValidation/TrigUpgradeTest/python/HLTCFConfig.py +++ b/Trigger/TrigValidation/TrigUpgradeTest/python/HLTCFConfig.py @@ -1,5 +1,6 @@ # Classes to configure the CF graph, via Nodes from AthenaCommon.CFElements import parOR, seqAND, stepSeq +import sys allAlgs={} @@ -19,7 +20,7 @@ def remember(name, instance): class AlgNode(): - def __init__(self, Alg, inputProp, outputProp): + def __init__(self, Alg, inputProp='', outputProp=''): self.name = ("%s_%s_%s")%( Alg.name(), inputProp, outputProp) self.algname = Alg.name() self.outputProp=outputProp @@ -42,9 +43,9 @@ class AlgNode(): self.addDefaultOutput() def addDefaultOutput(self): - print "This is main addDefaultOutput" - self.setOutput(("%s_%s_out"%(self.algname,self.outputProp))) - #self.setOutput(("%s_out"%(self.name))) + if self.outputProp is not '': + self.setOutput(("%s_%s_out"%(self.algname,self.outputProp))) + def setPar(self, prop, name): @@ -151,30 +152,35 @@ class HypoAlgNode(AlgNode): if "et" in self.getPar("Property2"): status= self.setPar('previousDecisions2',prev) - if "Output1" in prev: + ## if "Output1" in prev: + ## status= self.setPar('previousDecisions1',prev) + ## if "Output2" in prev: + ## status= self.setPar('previousDecisions2',prev) + if "Mu" in prev: status= self.setPar('previousDecisions1',prev) - if "Output2" in prev: + if "El" in prev: status= self.setPar('previousDecisions2',prev) - + + else: self.previous.append(prev) status= self.setPar('previousDecisions',prev) + return status - + def __str__(self): - return "HypoAlg::%s [%s] -> [%s], previous = [%s], HypoTools=[%s] --> Alg %s"%(self.name,' '.join(map(str, self.getInputList())), + return "HypoAlg::%s [%s] -> [%s], previous = [%s], HypoTools=[%s]"%(self.Alg.name(),' '.join(map(str, self.getInputList())), ' '.join(map(str, self.getOutputList())), ' '.join(map(str, self.previous)), - ' '.join(map(str, self.tools)), self.Alg) - - + ' '.join(map(str, self.tools))) class SequenceFilterNode(AlgNode): def __init__(self, Alg, inputProp, outputProp): AlgNode.__init__(self, Alg, inputProp, outputProp) + self.seeds = [] def addDefaultOutput(self): - print "This is SequenceFilter addDefaultOutput" + #print "This is SequenceFilter addDefaultOutput" return #do nothing def setChains(self, name): @@ -183,6 +189,11 @@ class SequenceFilterNode(AlgNode): def getChains(self): return self.getPar("Chains") + def addSeed(self, seed): + self.seeds.append(seed) + + + from TrigUpgradeTest.TrigUpgradeTestConf import HLTTest__TestRoRSeqFilter class TestRoRSequenceFilterNode(SequenceFilterNode): @@ -208,10 +219,19 @@ class RoRSequenceFilterNode(SequenceFilterNode): #### Here functions to create the CF tree from CF configuration objects +def makeSummary(name, decisions): + from DecisionHandling.DecisionHandlingConf import TriggerSummaryAlg + summary = TriggerSummaryAlg( name, OutputLevel = 2 ) + summary.InputDecision = "HLTChains" + summary.FinalDecisions = decisions + summary.HLTSummary = "MonitoringSummary"+name + return summary + + from AthenaCommon.AlgSequence import dumpSequence -def create_step_reco_node(name, seq_list, dump=0): +def create_step_reco_node(name, seq_list, dump=False): print "Create reco step %s with %d sequences"%(name, len(seq_list)) stepCF = parOR(name+"_reco") for seq in seq_list: @@ -222,7 +242,7 @@ def create_step_reco_node(name, seq_list, dump=0): return stepCF -def create_step_filter_node(name, seq_list, dump=0): +def create_step_filter_node(name, seq_list, dump=False): print "Create filter step %s with %d filters"%(name, len(seq_list)) stepCF = parOR(name+"_filter") for seq in seq_list: @@ -234,25 +254,70 @@ def create_step_filter_node(name, seq_list, dump=0): return stepCF -def create_CFSequence(CFseq): - print "\n * Create CFSequence %s"%(CFseq.name) +def create_CFSequenceNoView(CFseq): + print "\n * Create CFSequenceNoView %s"%(CFseq.name) filterAlg=CFseq.filter.Alg nodes = CFseq.getAllNodes() algos = [] + sublist = dict() for node in nodes: - algos.append(node.Alg) + if node.sequence is '': + algos.append(node.Alg) + else: + sublist.setdefault(node.sequence, []).append(node.Alg) +# sublist[node.sequence].append(node.Alg) algos=list(set(algos)) - - step_seq = create_step_sequence( CFseq.name, filterAlg=filterAlg, rest=algos) + step_seq = create_step_sequence( CFseq.name, filterAlg=filterAlg, rest=algos, sublist=sublist) return step_seq -def create_step_sequence(name, filterAlg, rest): +def create_step_sequence(name, filterAlg, rest,sublist): """ elementary HLT step sequencer, filterAlg is gating, rest is anything that needs to happe within the step """ - stepReco = parOR(name+"_reco", rest) + toadd=rest + for k, v in sublist.iteritems(): + seq= seqAND(k, v) + toadd.append(seq) + + stepReco = parOR(name+"_reco", toadd) + stepAnd = seqAND(name, [ filterAlg, stepReco ]) return stepAnd + + +def create_CFSequence(CFseq): + print "\n * Create CFSequence %s"%(CFseq.name) + from TrigUpgradeTest.MenuComponents import ViewNodeSequence + filterAlg=CFseq.filter.Alg + + subs=[] + for seq in CFseq.menuSeq.nodeSeqList: + nodes = [] + nodes.extend(seq.algs) + #nodes.append(seq.hypo) + algos=[] + for node in nodes: + algos.append(node.Alg) + + if isinstance(seq, ViewNodeSequence): + viewAlgSeq = seqAND(seq.viewNodeName, algos) + seq.hypo.Alg.RunInView=True + viewSeq = seqAND(seq.viewNodeName+"Seq", [seq.maker.Alg, viewAlgSeq, seq.hypo.Alg] ) + for other in seq.otherNodes: + viewSeq+= other.Alg + subs.append(viewSeq) + else: + subs.append(seq.maker.Alg) + subs.extend(algos) + subs.append(seq.hypo.Alg) + + + + subs=list(set(subs)) + stepReco = parOR(CFseq.name+"_reco", subs) + stepAnd = seqAND(CFseq.name, [ filterAlg, stepReco ]) + return stepAnd + def find_stepCF_algs(step_list): @@ -292,15 +357,18 @@ def addChainToHypoAlg(hypoAlg, chain): ####################################### def decisionTree_From_Chains(HLTAllStepsSeq, chains, NSTEPS=1): - + print "decisionTree_From_Chains on %s"%(HLTAllStepsSeq.name()) + HLTNodeName= HLTAllStepsSeq.name() testRoR=False from TrigUpgradeTest.MenuComponents import CFSequence #loop over chains to configure count_steps=0 + finalDecisions = [] # needed for monitor + allSeq_list = [] for nstep in range(0, NSTEPS): stepCF_name = "Step%i"%(nstep+1) CFseq_list = [] - + step_decisions = [] for chain in chains: chain_step_name= "%s:%s"%(stepCF_name, chain.name) print "\n*******Filling step %s for chain %s"%(stepCF_name, chain.name) @@ -308,6 +376,7 @@ def decisionTree_From_Chains(HLTAllStepsSeq, chains, NSTEPS=1): chain_step=chain.steps[count_steps] sequenceHypoTools=chain_step.sequenceHypoTools countseq=0 + otherSubSequence = [] for st in sequenceHypoTools: sequence=st.sequence hypotool=st.hypotool @@ -315,17 +384,27 @@ def decisionTree_From_Chains(HLTAllStepsSeq, chains, NSTEPS=1): cfseq_name= sequence.name print "Going through sequence %s with threshold %s"%(sequence.name, hypotool.getName()) + seeds= [nodeSeq.seed for nodeSeq in sequence.nodeSeqList] + print "Found these seeds: %s"%(seeds) #define sequence input if count_steps == 0: # seeding - sequence_input= [nodeSeq.seed for nodeSeq in sequence.nodeSeqList] - print "Seeds from this chain: %s"%(sequence_input) + filter_input= seeds + #[nodeSeq.seed for nodeSeq in sequence.nodeSeqList] + print "Seeds from this chain: %s"%(filter_input) previous_sequence="".join(chain.group_seed) + previous_seeds=seeds else: # from previous step, map the seuqence in the same order? previous_sequence=chain.steps[count_steps-1].sequences[countseq].name #menu sequence - sequence_input=chain.steps[count_steps-1].sequences[countseq].outputs - print "Connect to previous sequence:" - print sequence_input + filter_input=chain.steps[count_steps-1].sequences[countseq].outputs + print "Connect to previous sequence through these filter inputs:" + print filter_input + previous_seeds = chain.steps[count_steps-1].sequences[countseq].seeds + if len(filter_input) != len(previous_seeds): + print "ERROR: found %d filter inputs and %d seeds"%(len(filter_input), len(previous_seeds)) + sys.exit("ERROR, in size") + + # add hypotools for nodeSeq in sequence.nodeSeqList: hypoAlg= nodeSeq.hypo @@ -340,7 +419,6 @@ def decisionTree_From_Chains(HLTAllStepsSeq, chains, NSTEPS=1): # if the previous hypo has more than one output, try to get all of them # one filter per previous sequence: 1 input/previous seq, 1 output/next seq filter_name="Filter%s_on_%s"%(stepCF_name,previous_sequence) - filter_out=["%s_from_%s_out"%(filter_name,i) for i in sequence_input] filter_already_exists=False findFilter= [cfseq.filter for cfseq in CFseq_list if filter_name in cfseq.filter.algname] if len(findFilter): @@ -355,15 +433,25 @@ def decisionTree_From_Chains(HLTAllStepsSeq, chains, NSTEPS=1): sfilter = TestRoRSequenceFilterNode(name=filter_name) else: sfilter = RoRSequenceFilterNode(name=filter_name) + + print "Adding these seeds to filter: %s"%(previous_seeds) + for i in previous_seeds: sfilter.addSeed(i) + for i in filter_input: sfilter.addInput(i) + filter_out=["%s_from_%s_out"%(filter_name,i) for i in filter_input] + #filter_out=["%s_from_%s_out"%(filter_name,i) for i in filter_input] for o in filter_out: sfilter.setOutput(o) - for i in sequence_input: sfilter.addInput(i) + sfilter.setChains(chain.name) print "Filter Done: %s"%(sfilter) #loop over NodeSequences of this sequence to add inputs to InputMaker and send decisions to HypoAlg for nodeSeq in sequence.nodeSeqList: - seed=nodeSeq.seed - input_maker_input= [inp for inp in sfilter.getOutputList() if ("from_"+seed) in inp] + seed=nodeSeq.seed +# out_index=[i for i,fseed in enumerate (sfilter.seeds) if fseed in seed ] + input_maker_input=[sfilter.getOutputList()[i] for i,fseed in enumerate (sfilter.seeds) if fseed in seed ] + # input_maker_input= [inp for i,inp in enumerate(sfilter.getOutputList()) if ] + #input_maker_input= [inp for inp in sfilter.getOutputList() if ("from_"+seed) in inp] + print "Adding %d inputs to sequence::%s from Filter::%s (from seed %s)"%(len(input_maker_input), nodeSeq.name, sfilter.algname, seed) for i in input_maker_input: print i if len(input_maker_input) == 0: @@ -371,17 +459,24 @@ def decisionTree_From_Chains(HLTAllStepsSeq, chains, NSTEPS=1): sys.exit("ERROR, no inputs to sequence are set!") # return for i in input_maker_input: nodeSeq.addInput(i) + + + #sequence_outDecisions= "SequenceDecision_%s"%nodeSeq.name + #nodeSeq.addDecision(sequence_outDecisions) #FPP - hypoAlg= nodeSeq.hypo - #node = AlgNode(Alg=hypoAlg.Alg,inputProp='', outputProp='Output1') - for i in input_maker_input: hypoAlg.setPreviousDecision(i) # works for one + #hypoAlg= nodeSeq.hypo + #hypoAlg.setPreviousDecision(sequence_outDecisions) # works for one + #for i in input_maker_input: hypoAlg.setPreviousDecision(i) # works for one #for i in input_maker_input: hypoAlg.addPreviousDecision(i) - print hypoAlg + #needed for the summary + step_decisions.append(nodeSeq.output) + #if len(nodeSeq.sub) != 0: otherSubsequence.extend(nodeSeq.sub) + CF_seq = CFSequence( cfseq_name, FilterAlg=sfilter, MenuSequence=sequence) - #for node in otherNodes: CF_seq.addNode(node) + #for seq in otherSubsequence: CF_seq.addSubSequence(seq) print CF_seq CFseq_list.append(CF_seq) countseq+=1 @@ -390,15 +485,25 @@ def decisionTree_From_Chains(HLTAllStepsSeq, chains, NSTEPS=1): #end of loop over chains for this step, now implement CF: print "\n******** Create CF Tree %s with AthSequencers",stepCF_name + #first make the filter step - stepFilter = create_step_filter_node(stepCF_name, CFseq_list, dump=0) + stepFilter = create_step_filter_node(stepCF_name, CFseq_list, dump=False) HLTAllStepsSeq += stepFilter - - stepCF = create_step_reco_node(stepCF_name, CFseq_list, dump=0) + allSeq_list.append(CFseq_list) + + # then the reco step + stepCF = create_step_reco_node("%s_%s"%(HLTNodeName,stepCF_name), CFseq_list, dump=False) HLTAllStepsSeq += stepCF + + # then the monitor summary + summary=makeSummary("TriggerSummary"+ stepCF_name, step_decisions) + HLTAllStepsSeq += summary + # update final decisions + finalDecisions=step_decisions + print "Now Draw..." - stepCF_DataFlow_to_dot(stepCF_name, CFseq_list) + stepCF_DataFlow_to_dot("%s_%s"%(HLTNodeName,stepCF_name), CFseq_list) stepCF_ControlFlow_to_dot(stepCF) @@ -407,8 +512,12 @@ def decisionTree_From_Chains(HLTAllStepsSeq, chains, NSTEPS=1): print "************* End of step %s"%stepCF_name # end of steps - #stepCF_ControlFlow_to_dot(HLTAllStepsSeq) - dumpSequence (HLTAllStepsSeq, indent=0) + + + # summary=makeSummary("TriggerSummaryFinal", finalDecisions) + # HLTAllStepsSeq += summary +# dumpSequence (HLTAllStepsSeq, indent=0) + all_DataFlow_to_dot(HLTNodeName, allSeq_list) return ##### @@ -471,8 +580,8 @@ def stepCF_ControlFlow_to_dot(stepCF): +' %s [shape=Mdiamond]\n'%stepCF.name()) indent=0 - out = [("%s[color=%s shape=circle]\n"%(stepCF.name(),_seqColor(stepCF)), indent)] - +# out = [("%s[color=%s shape=circle]\n"%(stepCF.name(),_seqColor(stepCF)), indent)] + out = [("",indent)] out.extend( _dump( stepCF, indent=indent+1 ) ) for n,i in out: line= " "*i+ n @@ -482,6 +591,63 @@ def stepCF_ControlFlow_to_dot(stepCF): +def all_DataFlow_to_dot(name, step_list): + file = open( '%s.dot'%(name), mode="wt" ) + file.write( 'digraph step {\n'\ + +'\n'\ + +' node [ shape=polygon, fontname=Helvetica ]\n'\ + +' edge [ fontname=Helvetica ]\n' + +' %s [shape=Mdiamond]\n'%name) + + nstep=1 + last_step_hypoNodes=[] + for cfseq_list in step_list: + # loop over steps + step_connections = [] + step_connections.extend(last_step_hypoNodes) + # reset the last step + last_step_hypoNodes =[] + for cfseq in cfseq_list: + print cfseq.name + file.write(" %s[fillcolor=%s style=filled]\n"%(cfseq.filter.algname,algColor(cfseq.filter.algname))) + + step_connections.append(cfseq.filter) + + #for inp in cfseq.filter.getInputList(): + #file.write(addConnection(name, cfseq.filter.algname, inp)) + + file.write( '\n subgraph cluster_%s {\n'%(cfseq.name)\ + +' node [color=white style=filled]\n'\ + +' style=filled\n'\ + +' color=lightgrey\n'\ + +' fontname=Helvetica\n'\ + +' label = %s\n'%(cfseq.name)) + + cfseq_algs = [] + cfseq_algs.append(cfseq.filter) + + for seq in cfseq.menuSeq.nodeSeqList: + seq.reuse=False + + for seq in cfseq.menuSeq.nodeSeqList: + cfseq_algs.append(seq.maker) + cfseq_algs.extend(seq.algs ) + if seq.reuse==False: + file.write(" %s[fillcolor=%s]\n"%(seq.maker.algname, algColor(seq.maker.algname))) + for alg in seq.algs: file.write(" %s[fillcolor=%s]\n"%(alg.algname, algColor(alg.algname))) + seq.reuse=True + cfseq_algs.append(seq.hypo) + last_step_hypoNodes.append(seq.hypo) + file.write(" %s[color=%s]\n"%(seq.hypo.algname, algColor(seq.hypo.algname))) + file.write(' }\n') + file.write(findConnections(cfseq_algs)) + file.write('\n') + + file.write(findConnections(step_connections)) + nstep+=1 + + file.write( '}') + file.close() def stepCF_DataFlow_to_dot(name, cfseq_list): @@ -512,10 +678,10 @@ def stepCF_DataFlow_to_dot(name, cfseq_list): cfseq_algs.append(cfseq.filter) for seq in cfseq.menuSeq.nodeSeqList: - # cfseq_algs.append(seq.inputMaker) + cfseq_algs.append(seq.maker) cfseq_algs.extend(seq.algs ) if seq.reuse==False: - # file.write(" %s[fillcolor=%s]\n"%(seq.inputMaker.algname, algColor(seq.inputMaker.algname))) + file.write(" %s[fillcolor=%s]\n"%(seq.maker.algname, algColor(seq.maker.algname))) for alg in seq.algs: file.write(" %s[fillcolor=%s]\n"%(alg.algname, algColor(alg.algname))) seq.reuse=True cfseq_algs.append(seq.hypo) @@ -543,7 +709,8 @@ def findConnections(alg_list): return lineconnect def addConnection(nodeA, nodeB, label): - line = " %s -> %s [label=%s]\n"%(nodeA,nodeB,label) + line = " %s -> %s \n"%(nodeA,nodeB) + #line = " %s -> %s [label=%s]\n"%(nodeA,nodeB,label) # print line return line diff --git a/Trigger/TrigValidation/TrigUpgradeTest/python/MenuComponents.py b/Trigger/TrigValidation/TrigUpgradeTest/python/MenuComponents.py index cb21885f8bb..37118b58a39 100644 --- a/Trigger/TrigValidation/TrigUpgradeTest/python/MenuComponents.py +++ b/Trigger/TrigValidation/TrigUpgradeTest/python/MenuComponents.py @@ -2,39 +2,63 @@ class NodeSequence(): - def __init__(self, name, Algs, Hypo, Seed): + def __init__(self, name, Algs, Hypo, Seed, Maker): self.name = name self.algs = Algs self.hypo = Hypo self.seed = Seed + self.maker = Maker self.output = Hypo.getOutput() self.reuse = 0 self.connect() - def connect(self): - alg_input = "" - #alg_input = self.inputMaker.getOutput() + self.maker.setInput("") + alg_input = self.maker.getOutput() for Alg in self.algs: Alg.setInput(alg_input) alg_input = Alg.getOutput() self.hypo.setInput(Alg.getOutput()) + + # add decisions: from InputMaker to Hypo + sequence_outDecisions= "%s_decisions"%self.maker.algname + self.addOutputDecision(sequence_outDecisions) #FPP + self.hypo.setPreviousDecision(sequence_outDecisions) # works for one print "connect NodeSequence %s"%self.name - def setInput(self,input): - self.algs[0].setInput(input) + def addNode(self,node): + self.algs.append(node) + + def setInput(self,theinput): + self.maker.setInput(theinput) + + def addInput(self,theinput): + print "adding input to sequence: %s to %s"%(theinput, self.maker.algname ) + self.maker.addInput(theinput) + - def addInput(self,input): - self.algs[0].addInput(input) + def addOutputDecision(self,input): + print "adding output decisions (%s) to sequence %s (to alg %s)"%(input, self.name, self.maker.algname ) + self.maker.setPar("OutputDecisions",input) def __str__(self): return "NodeSequence::%s with \n Seed::%s \n %s \n Hypo::%s"%(self.name, self.seed, ',\n '.join(map(str, self.algs)), self.hypo) + +class ViewNodeSequence(NodeSequence): + def __init__(self, name, Algs, Hypo, Seed, Maker, OtherNodes): + NodeSequence.__init__(self, name, Algs, Hypo, Seed,Maker) + self.viewNodeName = self.maker.Alg.ViewNodeName + self.otherNodes=OtherNodes + + + class MenuSequence(): def __init__(self, name, nodeSeqList): self.name = name self.nodeSeqList=nodeSeqList self.outputs=[seq.output for seq in nodeSeqList] + self.seeds=[seq.seed for seq in nodeSeqList] def __str__(self): return "MenuSequence::%s \n %s"%(self.name,',\n '.join(map(str, self.nodeSeqList))) diff --git a/Trigger/TrigValidation/TrigUpgradeTest/share/EmuStepProcessing.ref b/Trigger/TrigValidation/TrigUpgradeTest/share/EmuStepProcessing.ref new file mode 100644 index 00000000000..b0e57458208 --- /dev/null +++ b/Trigger/TrigValidation/TrigUpgradeTest/share/EmuStepProcessing.ref @@ -0,0 +1,1686 @@ +Tue Mar 6 12:32:31 CET 2018 +Preloading tcmalloc_minimal.so +Py:Athena INFO including file "AthenaCommon/Preparation.py" +Py:Athena INFO using release [WorkDir-22.0.1] [x86_64-slc6-gcc62-opt] [menu5dev/fdd8f543f2] -- built on [2018-03-06T1128] +Py:Athena INFO including file "AthenaCommon/Bootstrap.py" +Py:Athena INFO including file "AthenaCommon/Atlas.UnixStandardJob.py" +Py:Athena INFO executing ROOT6Setup +Error in <TSystem::ExpandFileName>: input: $ROOTDIR/lib/libRIO, output: $ROOTDIR/lib/libRIO +Error in <TSystem::ExpandFileName>: input: $ROOTDIR/lib/libCling, output: $ROOTDIR/lib/libCling +Py:Athena INFO configuring AthenaHive with [1] concurrent threads and [1] concurrent events +Py:AlgScheduler INFO setting up AvalancheSchedulerSvc/AvalancheSchedulerSvc with 1 threads +Py:Athena INFO including file "AthenaCommon/Execution.py" +Py:Athena INFO including file "TrigUpgradeTest/EmuStepProcessingTest.py" +Py:Athena INFO including file "TrigUpgradeTest/HLTCF.py" +Py:ConfigurableDb INFO Read module info for 5465 configurables from 8 genConfDb files +Py:ConfigurableDb WARNING Found 2 duplicates among the 8 genConfDb files : +Py:ConfigurableDb WARNING -------------------------------------------------- +Py:ConfigurableDb WARNING -<component name>: <module> - [ <duplicates> ] +Py:ConfigurableDb WARNING -------------------------------------------------- +Py:ConfigurableDb WARNING -IDTrackCaloDepositsDecoratorTool: DerivationFrameworkMuons.DerivationFrameworkMuonsConf - ['MuonTPTools.MuonTPToolsConf'] +Py:ConfigurableDb WARNING -MuonTPExtrapolationTool: DerivationFrameworkMuons.DerivationFrameworkMuonsConf - ['MuonTPTools.MuonTPToolsConf'] +Py:ConfigurableDb WARNING Fix your cmt/requirements file !! +/***** Algorithm AthSequencer/L1UnpackingSeq ******************************************************* +|-Atomic = False +|-AuditAlgorithms = False +|-AuditBeginRun = False +|-AuditEndRun = False +|-AuditExecute = False +|-AuditFinalize = False +|-AuditInitialize = False +|-AuditReinitialize = False +|-AuditRestart = False +|-AuditStart = False +|-AuditStop = False +|-AutoRetrieveTools = True +|-Cardinality = 1 +|-ContinueEventloopOnFPE = False +|-DetStore = ServiceHandle('StoreGateSvc/DetectorStore') +|-Enable = True +|-ErrorCounter = 0 +|-ErrorMax = 1 +|-EvtStore = ServiceHandle('StoreGateSvc') +|-ExtraInputs = [] (default: []) +|-ExtraOutputs = [] (default: []) +|-FilterCircularDependencies = True +|-IgnoreFilterPassed = False +|-IsIOBound = False +|-Members = ['L1Decoder/L1Decoder'] (default: []) +|-ModeOR = True (default: False) +|-MonitorService = 'MonitorSvc' +|-NeededResources = [] (default: []) +|-OutputLevel = 0 +|-RegisterForContextService = False +|-Sequential = False (default: False) +|-StopOverride = True (default: False) +|-TimeOut = 0.0 +|-Timeline = True +|=/***** Algorithm L1Decoder/L1Decoder *************************************************************** +| |-AuditAlgorithms = False +| |-AuditBeginRun = False +| |-AuditEndRun = False +| |-AuditExecute = False +| |-AuditFinalize = False +| |-AuditInitialize = False +| |-AuditReinitialize = False +| |-AuditRestart = False +| |-AuditStart = False +| |-AuditStop = False +| |-AutoRetrieveTools = True +| |-Cardinality = 1 +| |-Chains = 'StoreGateSvc+HLTChains' +| |-DetStore = ServiceHandle('StoreGateSvc/DetectorStore') +| |-Enable = True +| |-ErrorCounter = 0 +| |-ErrorMax = 1 +| |-EvtStore = ServiceHandle('StoreGateSvc') +| |-ExtraInputs = [] (default: []) +| |-ExtraOutputs = [] (default: []) +| |-FilterCircularDependencies = True +| |-IsIOBound = False +| |-MonitorService = 'MonitorSvc' +| |-NeededResources = [] (default: []) +| |-OutputLevel = 2 (default: 0) +| |-RegisterForContextService = False +| |-RoIBResult = '' (default: 'StoreGateSvc+RoIBResult') +| |-Timeline = True +| |-ctpUnpacker = PrivateToolHandle('CTPUnpackingEmulationTool/CTPUnpackingEmulationTool') +| | (default: 'CTPUnpackingTool/CTPUnpackingTool') +| |-prescaler = PrivateToolHandle('PrescalingEmulationTool/PrescalingEmulationTool') +| |-roiUnpackers = PrivateToolHandleArray(['RoIsUnpackingEmulationTool/EMRoIsUnpackingTool','RoIsUnpackingEmulationTool/MURoIsUnpackingTool']) +| | (default: '[]') +| |=/***** Private AlgTool CTPUnpackingEmulationTool/CTPUnpackingEmulationTool ************************* +| | |-AuditFinalize = False +| | |-AuditInitialize = False +| | |-AuditReinitialize = False +| | |-AuditRestart = False +| | |-AuditStart = False +| | |-AuditStop = False +| | |-AuditTools = False +| | |-AutoRetrieveTools = True +| | |-CTPToChainMapping = [] (default: []) +| | |-DetStore = ServiceHandle('StoreGateSvc/DetectorStore') +| | |-EvtStore = ServiceHandle('StoreGateSvc') +| | |-ExtraInputs = [] (default: []) +| | |-ExtraOutputs = [] (default: []) +| | |-ForceEnableAllChains = False (default: False) +| | |-InputFilename = 'ctp.dat' (default: 'CTPEmulation.dat') +| | |-MonTool = PrivateToolHandle('') +| | |-MonitorService = 'MonitorSvc' +| | |-OutputLevel = 2 (default: 0) +| | \----- (End of Private AlgTool CTPUnpackingEmulationTool/CTPUnpackingEmulationTool) ---------------- +| |=/***** Private AlgTool RoIsUnpackingEmulationTool/EMRoIsUnpackingTool ****************************** +| | |-AuditFinalize = False +| | |-AuditInitialize = False +| | |-AuditReinitialize = False +| | |-AuditRestart = False +| | |-AuditStart = False +| | |-AuditStop = False +| | |-AuditTools = False +| | |-AutoRetrieveTools = True +| | |-Decisions = 'L1EM' (default: 'StoreGateSvc+RoIDecisions') +| | |-DetStore = ServiceHandle('StoreGateSvc/DetectorStore') +| | |-EvtStore = ServiceHandle('StoreGateSvc') +| | |-ExtraInputs = [] (default: []) +| | |-ExtraOutputs = [] (default: []) +| | |-InputFilename = 'l1emroi.dat' (default: 'RoIEmulation.dat') +| | |-MonTool = PrivateToolHandle('') +| | |-MonitorService = 'MonitorSvc' +| | |-OutputLevel = 2 (default: 0) +| | |-OutputTrigRoIs = 'L1EMRoIs' (default: 'StoreGateSvc+EMRoIs') +| | |-ThresholdToChainMapping = ['EM7 : HLT_mu8_e8', 'EM20 : HLT_e20', 'EM50 : HLT_2g50', 'EM100 : HLT_g100'] +| | | (default: []) +| | \----- (End of Private AlgTool RoIsUnpackingEmulationTool/EMRoIsUnpackingTool) --------------------- +| |=/***** Private AlgTool RoIsUnpackingEmulationTool/MURoIsUnpackingTool ****************************** +| | |-AuditFinalize = False +| | |-AuditInitialize = False +| | |-AuditReinitialize = False +| | |-AuditRestart = False +| | |-AuditStart = False +| | |-AuditStop = False +| | |-AuditTools = False +| | |-AutoRetrieveTools = True +| | |-Decisions = 'L1MU' (default: 'StoreGateSvc+RoIDecisions') +| | |-DetStore = ServiceHandle('StoreGateSvc/DetectorStore') +| | |-EvtStore = ServiceHandle('StoreGateSvc') +| | |-ExtraInputs = [] (default: []) +| | |-ExtraOutputs = [] (default: []) +| | |-InputFilename = 'l1muroi.dat' (default: 'RoIEmulation.dat') +| | |-MonTool = PrivateToolHandle('') +| | |-MonitorService = 'MonitorSvc' +| | |-OutputLevel = 2 (default: 0) +| | |-OutputTrigRoIs = 'L1MURoIs' (default: 'StoreGateSvc+EMRoIs') +| | |-ThresholdToChainMapping = ['MU6 : HLT_mu6', 'MU8 : HLT_mu8', 'MU8 : HLT_2mu8', 'MU8 : HLT_mu8_e8', 'MU10 : HLT_mu20', 'EM100 : HLT_g100'] +| | | (default: []) +| | \----- (End of Private AlgTool RoIsUnpackingEmulationTool/MURoIsUnpackingTool) --------------------- +| |=/***** Private AlgTool PrescalingEmulationTool/PrescalingEmulationTool ***************************** +| | |-AuditFinalize = False +| | |-AuditInitialize = False +| | |-AuditReinitialize = False +| | |-AuditRestart = False +| | |-AuditStart = False +| | |-AuditStop = False +| | |-AuditTools = False +| | |-AutoRetrieveTools = True +| | |-DetStore = ServiceHandle('StoreGateSvc/DetectorStore') +| | |-EventInfo = '' (default: 'StoreGateSvc+EventInfo') +| | |-EvtStore = ServiceHandle('StoreGateSvc') +| | |-ExtraInputs = [] (default: []) +| | |-ExtraOutputs = [] (default: []) +| | |-KeepUnknownChains = True +| | |-MonitorService = 'MonitorSvc' +| | |-OutputLevel = 0 +| | |-Prescales = [] (default: []) +| | \----- (End of Private AlgTool PrescalingEmulationTool/PrescalingEmulationTool) -------------------- +| \----- (End of Algorithm L1Decoder/L1Decoder) ------------------------------------------------------ +\----- (End of Algorithm AthSequencer/L1UnpackingSeq) ---------------------------------------------- +Py:Athena INFO including file "TrigUpgradeTest/HLTSignatureConfig.py" +AlgNode::Step1MuInputMaker_InputDecisions_Output: new Alg Step1MuInputMaker +AlgNode::muMSRecAlg_Input_Output: new Alg muMSRecAlg +AlgNode::Step1MuHypo_Input_Output: new Alg Step1MuHypo +adding output decisions (Step1MuInputMaker_decisions) to sequence muNodeSeq1 (to alg Step1MuInputMaker) +connect NodeSequence muNodeSeq1 +AlgNode::Step2MuInputMaker_InputDecisions_Output: new Alg Step2MuInputMaker +AlgNode::muMSRecAlg2_Input_Output: new Alg muMSRecAlg2 +AlgNode::Step2MuHypo2_Input_Output: new Alg Step2MuHypo2 +adding output decisions (Step2MuInputMaker_decisions) to sequence muNodeSeq2 (to alg Step2MuInputMaker) +connect NodeSequence muNodeSeq2 +AlgNode::Step1ElInputMaker_InputDecisions_Output: new Alg Step1ElInputMaker +AlgNode::CaloClustering_Input_Output: new Alg CaloClustering +AlgNode::Step1ElHypo_Input_Output: new Alg Step1ElHypo +adding output decisions (Step1ElInputMaker_decisions) to sequence elNodeSeq1 (to alg Step1ElInputMaker) +connect NodeSequence elNodeSeq1 +AlgNode::Step2ElInputMaker_InputDecisions_Output: new Alg Step2ElInputMaker +AlgNode::CaloClustering2_Input_Output: new Alg CaloClustering2 +AlgNode::Step2ElHypo_Input_Output: new Alg Step2ElHypo +adding output decisions (Step2ElInputMaker_decisions) to sequence elNodeSeq2 (to alg Step2ElInputMaker) +connect NodeSequence elNodeSeq2 +AlgNode::Step1ComboMuElHypo_Input1_Output1: new Alg Step1ComboMuElHypo +AlgNode::Step1ComboMuElHypo_Input2_Output2: found already Alg Step1ComboMuElHypo +adding output decisions (Step1MuInputMaker_decisions) to sequence CombmuNodeSeq1 (to alg Step1MuInputMaker) +connect NodeSequence CombmuNodeSeq1 +adding output decisions (Step1ElInputMaker_decisions) to sequence CombelNodeSeq1 (to alg Step1ElInputMaker) +connect NodeSequence CombelNodeSeq1 +AlgNode::Step2ComboMuElHypo_Input1_Output1: new Alg Step2ComboMuElHypo +AlgNode::Step2ComboMuElHypo_Input2_Output2: found already Alg Step2ComboMuElHypo +adding output decisions (Step2MuInputMaker_decisions) to sequence CombmuNodeSeq2 (to alg Step2MuInputMaker) +connect NodeSequence CombmuNodeSeq2 +adding output decisions (Step2ElInputMaker_decisions) to sequence CombelNodeSeq2 (to alg Step2ElInputMaker) +connect NodeSequence CombelNodeSeq2 +decisionTree_From_Chains on EmuTest_HLTAllStepsSequence + +*******Filling step Step1 for chain HLT_mu20 +Going through sequence muStep1Seq with threshold step1mu20 +Found these seeds: ['L1MU'] +Seeds from this chain: ['L1MU'] +Adding step1mu20 to Step1MuHypo +AlgNode::FilterStep1_on_L1MU_Input_Output: new Alg FilterStep1_on_L1MU +Adding these seeds to filter: ['L1MU'] +Filter Done: Alg::FilterStep1_on_L1MU_Input_Output [L1MU] -> [FilterStep1_on_L1MU_from_L1MU_out] +Adding 1 inputs to sequence::muNodeSeq1 from Filter::FilterStep1_on_L1MU (from seed L1MU) +FilterStep1_on_L1MU_from_L1MU_out +adding input to sequence: FilterStep1_on_L1MU_from_L1MU_out to Step1MuInputMaker +--- CFSequence muStep1Seq --- + + Filter: Alg::FilterStep1_on_L1MU_Input_Output [L1MU] -> [FilterStep1_on_L1MU_from_L1MU_out] + + MenuSequence::muStep1Seq + NodeSequence::muNodeSeq1 with + Seed::L1MU + Alg::muMSRecAlg_Input_Output [Step1MuInputMaker_Output_out] -> [muMSRecAlg_Output_out] + Hypo::HypoAlg::Step1MuHypo [muMSRecAlg_Output_out] -> [Step1MuHypo_Output_out], previous = [Step1MuInputMaker_decisions], HypoTools=[step1mu20] + + +*******Filling step Step1 for chain HLT_mu8 +Going through sequence muStep1Seq with threshold step1mu8 +Found these seeds: ['L1MU'] +Seeds from this chain: ['L1MU'] +Adding step1mu8 to Step1MuHypo +Filter FilterStep1_on_L1MU already exists +Adding chain HLT_mu8 to FilterStep1_on_L1MU + +*******Filling step Step1 for chain HLT_e20 +Going through sequence elStep1Seq with threshold step1e20 +Found these seeds: ['L1EM'] +Seeds from this chain: ['L1EM'] +Adding step1e20 to Step1ElHypo +AlgNode::FilterStep1_on_L1EM_Input_Output: new Alg FilterStep1_on_L1EM +Adding these seeds to filter: ['L1EM'] +Filter Done: Alg::FilterStep1_on_L1EM_Input_Output [L1EM] -> [FilterStep1_on_L1EM_from_L1EM_out] +Adding 1 inputs to sequence::elNodeSeq1 from Filter::FilterStep1_on_L1EM (from seed L1EM) +FilterStep1_on_L1EM_from_L1EM_out +adding input to sequence: FilterStep1_on_L1EM_from_L1EM_out to Step1ElInputMaker +--- CFSequence elStep1Seq --- + + Filter: Alg::FilterStep1_on_L1EM_Input_Output [L1EM] -> [FilterStep1_on_L1EM_from_L1EM_out] + + MenuSequence::elStep1Seq + NodeSequence::elNodeSeq1 with + Seed::L1EM + Alg::CaloClustering_Input_Output [Step1ElInputMaker_Output_out] -> [CaloClustering_Output_out] + Hypo::HypoAlg::Step1ElHypo [CaloClustering_Output_out] -> [Step1ElHypo_Output_out], previous = [Step1ElInputMaker_decisions], HypoTools=[step1e20] + + +*******Filling step Step1 for chain HLT_mu8_e8 +Going through sequence combStep1Seq with threshold step1mu8_e8 +Found these seeds: ['L1MU', 'L1EM'] +Seeds from this chain: ['L1MU', 'L1EM'] +Adding step1mu8_e8 to Step1ComboMuElHypo +Adding step1mu8_e8 to Step1ComboMuElHypo +AlgNode::FilterStep1_on_L1EML1MU_Input_Output: new Alg FilterStep1_on_L1EML1MU +Adding these seeds to filter: ['L1MU', 'L1EM'] +Filter Done: Alg::FilterStep1_on_L1EML1MU_Input_Output [L1MU L1EM] -> [FilterStep1_on_L1EML1MU_from_L1MU_out FilterStep1_on_L1EML1MU_from_L1EM_out] +Adding 1 inputs to sequence::CombmuNodeSeq1 from Filter::FilterStep1_on_L1EML1MU (from seed L1MU) +FilterStep1_on_L1EML1MU_from_L1MU_out +adding input to sequence: FilterStep1_on_L1EML1MU_from_L1MU_out to Step1MuInputMaker +Adding 1 inputs to sequence::CombelNodeSeq1 from Filter::FilterStep1_on_L1EML1MU (from seed L1EM) +FilterStep1_on_L1EML1MU_from_L1EM_out +adding input to sequence: FilterStep1_on_L1EML1MU_from_L1EM_out to Step1ElInputMaker +--- CFSequence combStep1Seq --- + + Filter: Alg::FilterStep1_on_L1EML1MU_Input_Output [L1MU L1EM] -> [FilterStep1_on_L1EML1MU_from_L1MU_out FilterStep1_on_L1EML1MU_from_L1EM_out] + + MenuSequence::combStep1Seq + NodeSequence::CombmuNodeSeq1 with + Seed::L1MU + Alg::muMSRecAlg_Input_Output [Step1MuInputMaker_Output_out] -> [muMSRecAlg_Output_out] + Hypo::HypoAlg::Step1ComboMuElHypo [muMSRecAlg_Output_out] -> [Step1ComboMuElHypo_Output1_out], previous = [Step1MuInputMaker_decisions], HypoTools=[], + NodeSequence::CombelNodeSeq1 with + Seed::L1EM + Alg::CaloClustering_Input_Output [Step1ElInputMaker_Output_out] -> [CaloClustering_Output_out] + Hypo::HypoAlg::Step1ComboMuElHypo [CaloClustering_Output_out] -> [Step1ComboMuElHypo_Output2_out], previous = [Step1ElInputMaker_decisions], HypoTools=[] + + +******** Create CF Tree %s with AthSequencers Step1 +Create filter step Step1 with 3 filters +Add FilterStep1_on_L1MU to filter node Step1 +Add FilterStep1_on_L1EM to filter node Step1 +Add FilterStep1_on_L1EML1MU to filter node Step1 +Create reco step EmuTest_HLTAllStepsSequence_Step1 with 3 sequences + + * Create CFSequence muStep1Seq + + * Create CFSequence elStep1Seq + + * Create CFSequence combStep1Seq +Now Draw... +muStep1Seq +Data connections between FilterStep1_on_L1MU and Step1MuInputMaker: FilterStep1_on_L1MU_from_L1MU_out +Data connections between Step1MuInputMaker and muMSRecAlg: Step1MuInputMaker_Output_out +Data connections between muMSRecAlg and Step1MuHypo: muMSRecAlg_Output_out +elStep1Seq +Data connections between FilterStep1_on_L1EM and Step1ElInputMaker: FilterStep1_on_L1EM_from_L1EM_out +Data connections between Step1ElInputMaker and CaloClustering: Step1ElInputMaker_Output_out +Data connections between CaloClustering and Step1ElHypo: CaloClustering_Output_out +combStep1Seq +Data connections between FilterStep1_on_L1EML1MU and Step1MuInputMaker: FilterStep1_on_L1EML1MU_from_L1MU_out +Data connections between FilterStep1_on_L1EML1MU and Step1ElInputMaker: FilterStep1_on_L1EML1MU_from_L1EM_out +Data connections between Step1MuInputMaker and muMSRecAlg: Step1MuInputMaker_Output_out +Data connections between muMSRecAlg and Step1ComboMuElHypo: muMSRecAlg_Output_out +Data connections between Step1ElInputMaker and CaloClustering: Step1ElInputMaker_Output_out +Data connections between CaloClustering and Step1ComboMuElHypo: CaloClustering_Output_out +Added stepCF Step1 to the root +************* End of step Step1 + +*******Filling step Step2 for chain HLT_mu20 +Going through sequence muStep2Seq with threshold step2mu20 +Found these seeds: ['L1MU'] +Connect to previous sequence through these filter inputs: +['Step1MuHypo_Output_out'] +Adding step2mu20 to Step2MuHypo2 +AlgNode::FilterStep2_on_muStep1Seq_Input_Output: new Alg FilterStep2_on_muStep1Seq +Adding these seeds to filter: ['L1MU'] +Filter Done: Alg::FilterStep2_on_muStep1Seq_Input_Output [Step1MuHypo_Output_out] -> [FilterStep2_on_muStep1Seq_from_Step1MuHypo_Output_out_out] +Adding 1 inputs to sequence::muNodeSeq2 from Filter::FilterStep2_on_muStep1Seq (from seed L1MU) +FilterStep2_on_muStep1Seq_from_Step1MuHypo_Output_out_out +adding input to sequence: FilterStep2_on_muStep1Seq_from_Step1MuHypo_Output_out_out to Step2MuInputMaker +--- CFSequence muStep2Seq --- + + Filter: Alg::FilterStep2_on_muStep1Seq_Input_Output [Step1MuHypo_Output_out] -> [FilterStep2_on_muStep1Seq_from_Step1MuHypo_Output_out_out] + + MenuSequence::muStep2Seq + NodeSequence::muNodeSeq2 with + Seed::L1MU + Alg::muMSRecAlg2_Input_Output [Step2MuInputMaker_Output_out] -> [muMSRecAlg2_Output_out] + Hypo::HypoAlg::Step2MuHypo2 [muMSRecAlg2_Output_out] -> [Step2MuHypo2_Output_out], previous = [Step2MuInputMaker_decisions], HypoTools=[step2mu20] + + +*******Filling step Step2 for chain HLT_mu8 +Going through sequence muStep2Seq with threshold step2mu8 +Found these seeds: ['L1MU'] +Connect to previous sequence through these filter inputs: +['Step1MuHypo_Output_out'] +Adding step2mu8 to Step2MuHypo2 +Filter FilterStep2_on_muStep1Seq already exists +Adding chain HLT_mu8 to FilterStep2_on_muStep1Seq + +*******Filling step Step2 for chain HLT_e20 +Going through sequence elStep2Seq with threshold step2e20 +Found these seeds: ['L1EM'] +Connect to previous sequence through these filter inputs: +['Step1ElHypo_Output_out'] +Adding step2e20 to Step2ElHypo +AlgNode::FilterStep2_on_elStep1Seq_Input_Output: new Alg FilterStep2_on_elStep1Seq +Adding these seeds to filter: ['L1EM'] +Filter Done: Alg::FilterStep2_on_elStep1Seq_Input_Output [Step1ElHypo_Output_out] -> [FilterStep2_on_elStep1Seq_from_Step1ElHypo_Output_out_out] +Adding 1 inputs to sequence::elNodeSeq2 from Filter::FilterStep2_on_elStep1Seq (from seed L1EM) +FilterStep2_on_elStep1Seq_from_Step1ElHypo_Output_out_out +adding input to sequence: FilterStep2_on_elStep1Seq_from_Step1ElHypo_Output_out_out to Step2ElInputMaker +--- CFSequence elStep2Seq --- + + Filter: Alg::FilterStep2_on_elStep1Seq_Input_Output [Step1ElHypo_Output_out] -> [FilterStep2_on_elStep1Seq_from_Step1ElHypo_Output_out_out] + + MenuSequence::elStep2Seq + NodeSequence::elNodeSeq2 with + Seed::L1EM + Alg::CaloClustering2_Input_Output [Step2ElInputMaker_Output_out] -> [CaloClustering2_Output_out] + Hypo::HypoAlg::Step2ElHypo [CaloClustering2_Output_out] -> [Step2ElHypo_Output_out], previous = [Step2ElInputMaker_decisions], HypoTools=[step2e20] + + +*******Filling step Step2 for chain HLT_mu8_e8 +Going through sequence combStep2Seq with threshold step2mu8_e8 +Found these seeds: ['L1MU', 'L1EM'] +Connect to previous sequence through these filter inputs: +['Step1ComboMuElHypo_Output1_out', 'Step1ComboMuElHypo_Output2_out'] +Adding step2mu8_e8 to Step2ComboMuElHypo +Adding step2mu8_e8 to Step2ComboMuElHypo +AlgNode::FilterStep2_on_combStep1Seq_Input_Output: new Alg FilterStep2_on_combStep1Seq +Adding these seeds to filter: ['L1MU', 'L1EM'] +Filter Done: Alg::FilterStep2_on_combStep1Seq_Input_Output [Step1ComboMuElHypo_Output1_out Step1ComboMuElHypo_Output2_out] -> [FilterStep2_on_combStep1Seq_from_Step1ComboMuElHypo_Output1_out_out FilterStep2_on_combStep1Seq_from_Step1ComboMuElHypo_Output2_out_out] +Adding 1 inputs to sequence::CombmuNodeSeq2 from Filter::FilterStep2_on_combStep1Seq (from seed L1MU) +FilterStep2_on_combStep1Seq_from_Step1ComboMuElHypo_Output1_out_out +adding input to sequence: FilterStep2_on_combStep1Seq_from_Step1ComboMuElHypo_Output1_out_out to Step2MuInputMaker +Adding 1 inputs to sequence::CombelNodeSeq2 from Filter::FilterStep2_on_combStep1Seq (from seed L1EM) +FilterStep2_on_combStep1Seq_from_Step1ComboMuElHypo_Output2_out_out +adding input to sequence: FilterStep2_on_combStep1Seq_from_Step1ComboMuElHypo_Output2_out_out to Step2ElInputMaker +--- CFSequence combStep2Seq --- + + Filter: Alg::FilterStep2_on_combStep1Seq_Input_Output [Step1ComboMuElHypo_Output1_out Step1ComboMuElHypo_Output2_out] -> [FilterStep2_on_combStep1Seq_from_Step1ComboMuElHypo_Output1_out_out FilterStep2_on_combStep1Seq_from_Step1ComboMuElHypo_Output2_out_out] + + MenuSequence::combStep2Seq + NodeSequence::CombmuNodeSeq2 with + Seed::L1MU + Alg::muMSRecAlg2_Input_Output [Step2MuInputMaker_Output_out] -> [muMSRecAlg2_Output_out] + Hypo::HypoAlg::Step2ComboMuElHypo [muMSRecAlg2_Output_out] -> [Step2ComboMuElHypo_Output1_out], previous = [Step2MuInputMaker_decisions], HypoTools=[], + NodeSequence::CombelNodeSeq2 with + Seed::L1EM + Alg::CaloClustering2_Input_Output [Step2ElInputMaker_Output_out] -> [CaloClustering2_Output_out] + Hypo::HypoAlg::Step2ComboMuElHypo [CaloClustering2_Output_out] -> [Step2ComboMuElHypo_Output2_out], previous = [Step2ElInputMaker_decisions], HypoTools=[] + + +******** Create CF Tree %s with AthSequencers Step2 +Create filter step Step2 with 3 filters +Add FilterStep2_on_muStep1Seq to filter node Step2 +Add FilterStep2_on_elStep1Seq to filter node Step2 +Add FilterStep2_on_combStep1Seq to filter node Step2 +Create reco step EmuTest_HLTAllStepsSequence_Step2 with 3 sequences + + * Create CFSequence muStep2Seq + + * Create CFSequence elStep2Seq + + * Create CFSequence combStep2Seq +Now Draw... +muStep2Seq +Data connections between FilterStep2_on_muStep1Seq and Step2MuInputMaker: FilterStep2_on_muStep1Seq_from_Step1MuHypo_Output_out_out +Data connections between Step2MuInputMaker and muMSRecAlg2: Step2MuInputMaker_Output_out +Data connections between muMSRecAlg2 and Step2MuHypo2: muMSRecAlg2_Output_out +elStep2Seq +Data connections between FilterStep2_on_elStep1Seq and Step2ElInputMaker: FilterStep2_on_elStep1Seq_from_Step1ElHypo_Output_out_out +Data connections between Step2ElInputMaker and CaloClustering2: Step2ElInputMaker_Output_out +Data connections between CaloClustering2 and Step2ElHypo: CaloClustering2_Output_out +combStep2Seq +Data connections between FilterStep2_on_combStep1Seq and Step2MuInputMaker: FilterStep2_on_combStep1Seq_from_Step1ComboMuElHypo_Output1_out_out +Data connections between FilterStep2_on_combStep1Seq and Step2ElInputMaker: FilterStep2_on_combStep1Seq_from_Step1ComboMuElHypo_Output2_out_out +Data connections between Step2MuInputMaker and muMSRecAlg2: Step2MuInputMaker_Output_out +Data connections between muMSRecAlg2 and Step2ComboMuElHypo: muMSRecAlg2_Output_out +Data connections between Step2ElInputMaker and CaloClustering2: Step2ElInputMaker_Output_out +Data connections between CaloClustering2 and Step2ComboMuElHypo: CaloClustering2_Output_out +Added stepCF Step2 to the root +************* End of step Step2 +muStep1Seq +Data connections between FilterStep1_on_L1MU and Step1MuInputMaker: FilterStep1_on_L1MU_from_L1MU_out +Data connections between Step1MuInputMaker and muMSRecAlg: Step1MuInputMaker_Output_out +Data connections between muMSRecAlg and Step1MuHypo: muMSRecAlg_Output_out +elStep1Seq +Data connections between FilterStep1_on_L1EM and Step1ElInputMaker: FilterStep1_on_L1EM_from_L1EM_out +Data connections between Step1ElInputMaker and CaloClustering: Step1ElInputMaker_Output_out +Data connections between CaloClustering and Step1ElHypo: CaloClustering_Output_out +combStep1Seq +Data connections between FilterStep1_on_L1EML1MU and Step1MuInputMaker: FilterStep1_on_L1EML1MU_from_L1MU_out +Data connections between FilterStep1_on_L1EML1MU and Step1ElInputMaker: FilterStep1_on_L1EML1MU_from_L1EM_out +Data connections between Step1MuInputMaker and muMSRecAlg: Step1MuInputMaker_Output_out +Data connections between muMSRecAlg and Step1ComboMuElHypo: muMSRecAlg_Output_out +Data connections between Step1ElInputMaker and CaloClustering: Step1ElInputMaker_Output_out +Data connections between CaloClustering and Step1ComboMuElHypo: CaloClustering_Output_out +muStep2Seq +Data connections between FilterStep2_on_muStep1Seq and Step2MuInputMaker: FilterStep2_on_muStep1Seq_from_Step1MuHypo_Output_out_out +Data connections between Step2MuInputMaker and muMSRecAlg2: Step2MuInputMaker_Output_out +Data connections between muMSRecAlg2 and Step2MuHypo2: muMSRecAlg2_Output_out +elStep2Seq +Data connections between FilterStep2_on_elStep1Seq and Step2ElInputMaker: FilterStep2_on_elStep1Seq_from_Step1ElHypo_Output_out_out +Data connections between Step2ElInputMaker and CaloClustering2: Step2ElInputMaker_Output_out +Data connections between CaloClustering2 and Step2ElHypo: CaloClustering2_Output_out +combStep2Seq +Data connections between FilterStep2_on_combStep1Seq and Step2MuInputMaker: FilterStep2_on_combStep1Seq_from_Step1ComboMuElHypo_Output1_out_out +Data connections between FilterStep2_on_combStep1Seq and Step2ElInputMaker: FilterStep2_on_combStep1Seq_from_Step1ComboMuElHypo_Output2_out_out +Data connections between Step2MuInputMaker and muMSRecAlg2: Step2MuInputMaker_Output_out +Data connections between muMSRecAlg2 and Step2ComboMuElHypo: muMSRecAlg2_Output_out +Data connections between Step2ElInputMaker and CaloClustering2: Step2ElInputMaker_Output_out +Data connections between CaloClustering2 and Step2ComboMuElHypo: CaloClustering2_Output_out +Data connections between Step1MuHypo and FilterStep2_on_muStep1Seq: Step1MuHypo_Output_out +Data connections between Step1ElHypo and FilterStep2_on_elStep1Seq: Step1ElHypo_Output_out +Data connections between Step1ComboMuElHypo and FilterStep2_on_combStep1Seq: Step1ComboMuElHypo_Output1_out +Data connections between Step1ComboMuElHypo and FilterStep2_on_combStep1Seq: Step1ComboMuElHypo_Output2_out +Py:Athena INFO including file "AthenaCommon/runbatch.py" +[?1034hApplicationMgr INFO Updating Gaudi::PluginService::SetDebug(level) to level= 'PluginDebugLevel':0 +MessageSvc INFO Activating in a separate thread +ApplicationMgr SUCCESS +==================================================================================================================================== + Welcome to ApplicationMgr (GaudiCoreSvc v30r1) + running on pc-tbed-pub-26.cern.ch on Tue Mar 6 12:32:41 2018 +==================================================================================================================================== +ApplicationMgr INFO Successfully loaded modules : AthenaServices +ApplicationMgr INFO Application Manager Configured successfully +ApplicationMgr INFO Updating Gaudi::PluginService::SetDebug(level) to level= 'PluginDebugLevel':0 +AthDictLoaderSvc INFO in initialize... +AthDictLoaderSvc INFO acquired Dso-registry +ClassIDSvc INFO getRegistryEntries: read 2849 CLIDRegistry entries for module ALL +ChronoStatSvc INFO Number of skipped events for MemStat-1 +CoreDumpSvc INFO install f-a-t-a-l handler... (flag = -1) +CoreDumpSvc INFO Handling signals: 11(Segmentation fault) 7(Bus error) 4(Illegal instruction) 8(Floating point exception) +AthenaHiveEventLoopMgr INFO Initializing AthenaHiveEventLoopMgr - package version AthenaServices-00-00-00 +ClassIDSvc INFO getRegistryEntries: read 7798 CLIDRegistry entries for module ALL +L1Decoder DEBUG Property update for OutputLevel : new value = 2 +L1Decoder INFO Reading RoIB infromation from: : ( 'ROIB::RoIBResult' , '' ) : +L1Decoder.CTPUnpackingEmulationTool DEBUG Property update for OutputLevel : new value = 2 +L1Decoder.CTPUnpackingEmulationTool DEBUG In input file ctp.dat found 3 chain sets +L1Decoder.EMRoIsUnpackingTool DEBUG Property update for OutputLevel : new value = 2 +L1Decoder.EMRoIsUnpackingTool DEBUG Threshold EM50 ID#761850374 mapped to chains [787761180] +L1Decoder.EMRoIsUnpackingTool DEBUG Threshold EM20 ID#958951142 mapped to chains [4230506138] +L1Decoder.EMRoIsUnpackingTool DEBUG Threshold EM100 ID#2688838698 mapped to chains [3739492918] +L1Decoder.EMRoIsUnpackingTool DEBUG Threshold EM7 ID#3002722737 mapped to chains [3385806166] +L1Decoder.EMRoIsUnpackingTool DEBUG Read in 3 pseudo events from 'InputFilename':l1emroi.dat +L1Decoder.EMRoIsUnpackingTool DEBUG Input file parsed successfully. Data: +L1Decoder.EMRoIsUnpackingTool DEBUG Event +L1Decoder.EMRoIsUnpackingTool DEBUG Eta: 1.000000, Phi: 1.000000, Word: 0, PassedThresholdIDs: EM3, EM7, EM15, EM20, EM50, EM100, +L1Decoder.EMRoIsUnpackingTool DEBUG Eta: 1.000000, Phi: -1.200000, Word: 0, PassedThresholdIDs: EM3, EM7, +L1Decoder.EMRoIsUnpackingTool DEBUG Event +L1Decoder.EMRoIsUnpackingTool DEBUG Eta: -0.600000, Phi: 0.200000, Word: 0, PassedThresholdIDs: EM3, EM7, EM15, EM20, EM50, EM100, +L1Decoder.EMRoIsUnpackingTool DEBUG Eta: 1.000000, Phi: -1.100000, Word: 0, PassedThresholdIDs: EM3, EM7, EM15, EM20, EM50, +L1Decoder.EMRoIsUnpackingTool DEBUG Event +L1Decoder.EMRoIsUnpackingTool DEBUG Eta: -0.600000, Phi: 1.500000, Word: 0, PassedThresholdIDs: EM3, EM7, EM7, +L1Decoder.MURoIsUnpackingTool DEBUG Property update for OutputLevel : new value = 2 +L1Decoder.MURoIsUnpackingTool DEBUG Threshold MU6 ID#416314713 mapped to chains [1672162766] +L1Decoder.MURoIsUnpackingTool DEBUG Threshold MU10 ID#426353733 mapped to chains [3964288416] +L1Decoder.MURoIsUnpackingTool DEBUG Threshold MU8 ID#777572725 mapped to chains [3370546555, 1307018918, 3385806166] +L1Decoder.MURoIsUnpackingTool DEBUG Threshold EM100 ID#2688838698 mapped to chains [3739492918] +L1Decoder.MURoIsUnpackingTool DEBUG Read in 3 pseudo events from 'InputFilename':l1muroi.dat +L1Decoder.MURoIsUnpackingTool DEBUG Input file parsed successfully. Data: +L1Decoder.MURoIsUnpackingTool DEBUG Event +L1Decoder.MURoIsUnpackingTool DEBUG Eta: 0.000000, Phi: 0.000000, Word: 0, PassedThresholdIDs: MU0, +L1Decoder.MURoIsUnpackingTool DEBUG Event +L1Decoder.MURoIsUnpackingTool DEBUG Eta: -1.000000, Phi: 0.500000, Word: 0, PassedThresholdIDs: MU6, MU8, +L1Decoder.MURoIsUnpackingTool DEBUG Eta: -1.000000, Phi: 0.500000, Word: 0, PassedThresholdIDs: MU6, MU8, MU10, +L1Decoder.MURoIsUnpackingTool DEBUG Event +L1Decoder.MURoIsUnpackingTool DEBUG Eta: -1.500000, Phi: -0.100000, Word: 0, PassedThresholdIDs: MU6, MU8, +L1Decoder.PrescalingEmulationTool DEBUG Property update for OutputLevel : new value = 2 +L1Decoder DEBUG input handles: 0 +L1Decoder DEBUG output handles: 1 +L1Decoder DEBUG Registering all Tools in ToolHandleArray roiUnpackers +L1Decoder DEBUG Adding private ToolHandle tool L1Decoder.EMRoIsUnpackingTool (RoIsUnpackingEmulationTool) from ToolHandleArray roiUnpackers +L1Decoder DEBUG Adding private ToolHandle tool L1Decoder.MURoIsUnpackingTool (RoIsUnpackingEmulationTool) from ToolHandleArray roiUnpackers +L1Decoder DEBUG Adding private ToolHandle tool L1Decoder.CTPUnpackingEmulationTool (CTPUnpackingEmulationTool) +L1Decoder DEBUG Adding private ToolHandle tool L1Decoder.PrescalingEmulationTool (PrescalingEmulationTool) +L1Decoder DEBUG Data Deps for L1Decoder + + INPUT IGNORED ( 'xAOD::EventInfo' , '' ) + + OUTPUT ( 'TrigRoiDescriptorCollection' , 'StoreGateSvc+L1EMRoIs' ) + + OUTPUT ( 'TrigRoiDescriptorCollection' , 'StoreGateSvc+L1MURoIs' ) + + OUTPUT ( 'xAOD::TrigCompositeContainer' , 'StoreGateSvc+HLTChains' ) + + OUTPUT ( 'xAOD::TrigCompositeContainer' , 'StoreGateSvc+L1EM' ) + + OUTPUT ( 'xAOD::TrigCompositeContainer' , 'StoreGateSvc+L1MU' ) +ClassIDSvc INFO getRegistryEntries: read 57 CLIDRegistry entries for module ALL +FilterStep1_on_L1MU DEBUG Property update for OutputLevel : new value = 2 +FilterStep1_on_L1MU INFO Initializing FilterStep1_on_L1MU... +FilterStep1_on_L1MU DEBUG Will consume implicit ReadDH: +FilterStep1_on_L1MU DEBUG - L1MU +FilterStep1_on_L1MU DEBUG Will produce implicit WriteDH: +FilterStep1_on_L1MU DEBUG - FilterStep1_on_L1MU_from_L1MU_out +FilterStep1_on_L1MU DEBUG Configured to require chain HLT_mu8 ID#3370546555 +FilterStep1_on_L1MU DEBUG Configured to require chain HLT_mu20 ID#3964288416 +FilterStep1_on_L1MU DEBUG mergeInputs is 'MergeInputs':False +FilterStep1_on_L1MU DEBUG input handles: 0 +FilterStep1_on_L1MU DEBUG output handles: 0 +FilterStep1_on_L1MU DEBUG Data Deps for FilterStep1_on_L1MU +FilterStep1_on_L1EM DEBUG Property update for OutputLevel : new value = 2 +FilterStep1_on_L1EM INFO Initializing FilterStep1_on_L1EM... +FilterStep1_on_L1EM DEBUG Will consume implicit ReadDH: +FilterStep1_on_L1EM DEBUG - L1EM +FilterStep1_on_L1EM DEBUG Will produce implicit WriteDH: +FilterStep1_on_L1EM DEBUG - FilterStep1_on_L1EM_from_L1EM_out +FilterStep1_on_L1EM DEBUG Configured to require chain HLT_e20 ID#4230506138 +FilterStep1_on_L1EM DEBUG mergeInputs is 'MergeInputs':False +FilterStep1_on_L1EM DEBUG input handles: 0 +FilterStep1_on_L1EM DEBUG output handles: 0 +FilterStep1_on_L1EM DEBUG Data Deps for FilterStep1_on_L1EM +FilterStep1_on_L1EML1MU DEBUG Property update for OutputLevel : new value = 2 +FilterStep1_on_L1EML1MU INFO Initializing FilterStep1_on_L1EML1MU... +FilterStep1_on_L1EML1MU DEBUG Will consume implicit ReadDH: +FilterStep1_on_L1EML1MU DEBUG - L1MU +FilterStep1_on_L1EML1MU DEBUG - L1EM +FilterStep1_on_L1EML1MU DEBUG Will produce implicit WriteDH: +FilterStep1_on_L1EML1MU DEBUG - FilterStep1_on_L1EML1MU_from_L1MU_out +FilterStep1_on_L1EML1MU DEBUG - FilterStep1_on_L1EML1MU_from_L1EM_out +FilterStep1_on_L1EML1MU DEBUG Configured to require chain HLT_mu8_e8 ID#3385806166 +FilterStep1_on_L1EML1MU DEBUG mergeInputs is 'MergeInputs':False +FilterStep1_on_L1EML1MU DEBUG input handles: 0 +FilterStep1_on_L1EML1MU DEBUG output handles: 0 +FilterStep1_on_L1EML1MU DEBUG Data Deps for FilterStep1_on_L1EML1MU +ClassIDSvc INFO getRegistryEntries: read 578 CLIDRegistry entries for module ALL +Step1MuHypo DEBUG Property update for OutputLevel : new value = 2 +Step1MuHypo INFO Initializing Step1MuHypo... +Step1MuHypo DEBUG Will consume implicit previous decisions Step1MuInputMaker_decisions +Step1MuHypo.step1mu20 DEBUG Property update for OutputLevel : new value = 2 +Step1MuHypo.step1mu20 INFO Initializing Step1MuHypo.step1mu20... +Step1MuHypo.step1mu20 DEBUG 20000 +Step1MuHypo.step1mu20 DEBUG pt +Step1MuHypo.step1mu20 DEBUG Configured to require chain HLT_mu20 ID#3964288416 +Step1MuHypo.step1mu8 DEBUG Property update for OutputLevel : new value = 2 +Step1MuHypo.step1mu8 INFO Initializing Step1MuHypo.step1mu8... +Step1MuHypo.step1mu8 DEBUG 8000 +Step1MuHypo.step1mu8 DEBUG pt +Step1MuHypo.step1mu8 DEBUG Configured to require chain HLT_mu8 ID#3370546555 +Step1MuHypo DEBUG input handles: 1 +Step1MuHypo DEBUG output handles: 1 +Step1MuHypo DEBUG Registering all Tools in ToolHandleArray HypoTools +Step1MuHypo DEBUG Adding private ToolHandle tool Step1MuHypo.step1mu20 (HLTTest::TestHypoTool) from ToolHandleArray HypoTools +Step1MuHypo DEBUG Adding private ToolHandle tool Step1MuHypo.step1mu8 (HLTTest::TestHypoTool) from ToolHandleArray HypoTools +Step1MuHypo DEBUG Data Deps for Step1MuHypo + + INPUT ( 'xAOD::TrigCompositeContainer' , 'StoreGateSvc+muMSRecAlg_Output_out' ) + + OUTPUT ( 'xAOD::TrigCompositeContainer' , 'StoreGateSvc+Step1MuHypo_Output_out' ) +Step1MuInputMaker DEBUG Property update for OutputLevel : new value = 2 +Step1MuInputMaker INFO Initializing Step1MuInputMaker... +Step1MuInputMaker DEBUG Will consume implicit input data: +Step1MuInputMaker DEBUG FilterStep1_on_L1MU_from_L1MU_out +Step1MuInputMaker DEBUG FilterStep1_on_L1EML1MU_from_L1MU_out +Step1MuInputMaker DEBUG and produce 'StoreGateSvc+Step1MuInputMaker_Output_out' +Step1MuInputMaker DEBUG input handles: 0 +Step1MuInputMaker DEBUG output handles: 2 +Step1MuInputMaker DEBUG Data Deps for Step1MuInputMaker + + OUTPUT ( 'xAOD::TrigCompositeContainer' , 'StoreGateSvc+Step1MuInputMaker_Output_out' ) + + OUTPUT ( 'xAOD::TrigCompositeContainer' , 'StoreGateSvc+Step1MuInputMaker_decisions' ) +muMSRecAlg DEBUG Property update for OutputLevel : new value = 2 +muMSRecAlg INFO Initializing muMSRecAlg reading input file msmu.dat +muMSRecAlg DEBUG Loaded 3 pseudo events +muMSRecAlg DEBUG input handles: 1 +muMSRecAlg DEBUG output handles: 1 +muMSRecAlg DEBUG Data Deps for muMSRecAlg + + INPUT ( 'xAOD::TrigCompositeContainer' , 'StoreGateSvc+Step1MuInputMaker_Output_out' ) + + OUTPUT ( 'xAOD::TrigCompositeContainer' , 'StoreGateSvc+muMSRecAlg_Output_out' ) +Step1ElInputMaker DEBUG Property update for OutputLevel : new value = 2 +Step1ElInputMaker INFO Initializing Step1ElInputMaker... +Step1ElInputMaker DEBUG Will consume implicit input data: +Step1ElInputMaker DEBUG FilterStep1_on_L1EM_from_L1EM_out +Step1ElInputMaker DEBUG FilterStep1_on_L1EML1MU_from_L1EM_out +Step1ElInputMaker DEBUG and produce 'StoreGateSvc+Step1ElInputMaker_Output_out' +Step1ElInputMaker DEBUG input handles: 0 +Step1ElInputMaker DEBUG output handles: 2 +Step1ElInputMaker DEBUG Data Deps for Step1ElInputMaker + + OUTPUT ( 'xAOD::TrigCompositeContainer' , 'StoreGateSvc+Step1ElInputMaker_Output_out' ) + + OUTPUT ( 'xAOD::TrigCompositeContainer' , 'StoreGateSvc+Step1ElInputMaker_decisions' ) +Step1ElHypo DEBUG Property update for OutputLevel : new value = 2 +Step1ElHypo INFO Initializing Step1ElHypo... +Step1ElHypo DEBUG Will consume implicit previous decisions Step1ElInputMaker_decisions +Step1ElHypo.step1e20 DEBUG Property update for OutputLevel : new value = 2 +Step1ElHypo.step1e20 INFO Initializing Step1ElHypo.step1e20... +Step1ElHypo.step1e20 DEBUG 20000 +Step1ElHypo.step1e20 DEBUG et +Step1ElHypo.step1e20 DEBUG Configured to require chain HLT_e20 ID#4230506138 +Step1ElHypo DEBUG input handles: 1 +Step1ElHypo DEBUG output handles: 1 +Step1ElHypo DEBUG Registering all Tools in ToolHandleArray HypoTools +Step1ElHypo DEBUG Adding private ToolHandle tool Step1ElHypo.step1e20 (HLTTest::TestHypoTool) from ToolHandleArray HypoTools +Step1ElHypo DEBUG Data Deps for Step1ElHypo + + INPUT ( 'xAOD::TrigCompositeContainer' , 'StoreGateSvc+CaloClustering_Output_out' ) + + OUTPUT ( 'xAOD::TrigCompositeContainer' , 'StoreGateSvc+Step1ElHypo_Output_out' ) +CaloClustering DEBUG Property update for OutputLevel : new value = 2 +CaloClustering INFO Initializing CaloClustering reading input file emclusters.dat +CaloClustering DEBUG Loaded 3 pseudo events +CaloClustering DEBUG input handles: 1 +CaloClustering DEBUG output handles: 1 +CaloClustering DEBUG Data Deps for CaloClustering + + INPUT ( 'xAOD::TrigCompositeContainer' , 'StoreGateSvc+Step1ElInputMaker_Output_out' ) + + OUTPUT ( 'xAOD::TrigCompositeContainer' , 'StoreGateSvc+CaloClustering_Output_out' ) +Step1ComboMuElHypo DEBUG Property update for OutputLevel : new value = 2 +Step1ComboMuElHypo INFO Initializing Step1ComboMuElHypo... +Step1ComboMuElHypo DEBUG Configured to require chain HLT_mu8_e8 ID#3385806166 +Step1ComboMuElHypo DEBUG input handles: 2 +Step1ComboMuElHypo DEBUG output handles: 2 +Step1ComboMuElHypo DEBUG Data Deps for Step1ComboMuElHypo + + INPUT ( 'xAOD::TrigCompositeContainer' , 'StoreGateSvc+CaloClustering_Output_out' ) + + INPUT ( 'xAOD::TrigCompositeContainer' , 'StoreGateSvc+muMSRecAlg_Output_out' ) + + OUTPUT ( 'xAOD::TrigCompositeContainer' , 'StoreGateSvc+Step1ComboMuElHypo_Output1_out' ) + + OUTPUT ( 'xAOD::TrigCompositeContainer' , 'StoreGateSvc+Step1ComboMuElHypo_Output2_out' ) +TriggerSummaryStep1 DEBUG Property update for OutputLevel : new value = 2 +TriggerSummaryStep1 INFO Initializing TriggerSummaryStep1... +TriggerSummaryStep1 DEBUG input handles: 1 +TriggerSummaryStep1 DEBUG output handles: 1 +TriggerSummaryStep1 DEBUG Data Deps for TriggerSummaryStep1 + + INPUT ( 'xAOD::TrigCompositeContainer' , 'StoreGateSvc+HLTChains' ) + + OUTPUT ( 'xAOD::TrigCompositeContainer' , 'StoreGateSvc+MonitoringSummaryTriggerSummaryStep1' ) +FilterStep2_on_muStep1Seq DEBUG Property update for OutputLevel : new value = 2 +FilterStep2_on_muStep1Seq INFO Initializing FilterStep2_on_muStep1Seq... +FilterStep2_on_muStep1Seq DEBUG Will consume implicit ReadDH: +FilterStep2_on_muStep1Seq DEBUG - Step1MuHypo_Output_out +FilterStep2_on_muStep1Seq DEBUG Will produce implicit WriteDH: +FilterStep2_on_muStep1Seq DEBUG - FilterStep2_on_muStep1Seq_from_Step1MuHypo_Output_out_out +FilterStep2_on_muStep1Seq DEBUG Configured to require chain HLT_mu8 ID#3370546555 +FilterStep2_on_muStep1Seq DEBUG Configured to require chain HLT_mu20 ID#3964288416 +FilterStep2_on_muStep1Seq DEBUG mergeInputs is 'MergeInputs':False +FilterStep2_on_muStep1Seq DEBUG input handles: 0 +FilterStep2_on_muStep1Seq DEBUG output handles: 0 +FilterStep2_on_muStep1Seq DEBUG Data Deps for FilterStep2_on_muStep1Seq +FilterStep2_on_elStep1Seq DEBUG Property update for OutputLevel : new value = 2 +FilterStep2_on_elStep1Seq INFO Initializing FilterStep2_on_elStep1Seq... +FilterStep2_on_elStep1Seq DEBUG Will consume implicit ReadDH: +FilterStep2_on_elStep1Seq DEBUG - Step1ElHypo_Output_out +FilterStep2_on_elStep1Seq DEBUG Will produce implicit WriteDH: +FilterStep2_on_elStep1Seq DEBUG - FilterStep2_on_elStep1Seq_from_Step1ElHypo_Output_out_out +FilterStep2_on_elStep1Seq DEBUG Configured to require chain HLT_e20 ID#4230506138 +FilterStep2_on_elStep1Seq DEBUG mergeInputs is 'MergeInputs':False +FilterStep2_on_elStep1Seq DEBUG input handles: 0 +FilterStep2_on_elStep1Seq DEBUG output handles: 0 +FilterStep2_on_elStep1Seq DEBUG Data Deps for FilterStep2_on_elStep1Seq +FilterStep2_on_combStep1Seq DEBUG Property update for OutputLevel : new value = 2 +FilterStep2_on_combStep1Seq INFO Initializing FilterStep2_on_combStep1Seq... +FilterStep2_on_combStep1Seq DEBUG Will consume implicit ReadDH: +FilterStep2_on_combStep1Seq DEBUG - Step1ComboMuElHypo_Output1_out +FilterStep2_on_combStep1Seq DEBUG - Step1ComboMuElHypo_Output2_out +FilterStep2_on_combStep1Seq DEBUG Will produce implicit WriteDH: +FilterStep2_on_combStep1Seq DEBUG - FilterStep2_on_combStep1Seq_from_Step1ComboMuElHypo_Output1_out_out +FilterStep2_on_combStep1Seq DEBUG - FilterStep2_on_combStep1Seq_from_Step1ComboMuElHypo_Output2_out_out +FilterStep2_on_combStep1Seq DEBUG Configured to require chain HLT_mu8_e8 ID#3385806166 +FilterStep2_on_combStep1Seq DEBUG mergeInputs is 'MergeInputs':False +FilterStep2_on_combStep1Seq DEBUG input handles: 0 +FilterStep2_on_combStep1Seq DEBUG output handles: 0 +FilterStep2_on_combStep1Seq DEBUG Data Deps for FilterStep2_on_combStep1Seq +muMSRecAlg2 DEBUG Property update for OutputLevel : new value = 2 +muMSRecAlg2 INFO Initializing muMSRecAlg2 reading input file msmu.dat +muMSRecAlg2 DEBUG Loaded 3 pseudo events +muMSRecAlg2 DEBUG input handles: 1 +muMSRecAlg2 DEBUG output handles: 1 +muMSRecAlg2 DEBUG Data Deps for muMSRecAlg2 + + INPUT ( 'xAOD::TrigCompositeContainer' , 'StoreGateSvc+Step2MuInputMaker_Output_out' ) + + OUTPUT ( 'xAOD::TrigCompositeContainer' , 'StoreGateSvc+muMSRecAlg2_Output_out' ) +Step2MuHypo2 DEBUG Property update for OutputLevel : new value = 2 +Step2MuHypo2 INFO Initializing Step2MuHypo2... +Step2MuHypo2 DEBUG Will consume implicit previous decisions Step2MuInputMaker_decisions +Step2MuHypo2.step2mu20 DEBUG Property update for OutputLevel : new value = 2 +Step2MuHypo2.step2mu20 INFO Initializing Step2MuHypo2.step2mu20... +Step2MuHypo2.step2mu20 DEBUG 20000 +Step2MuHypo2.step2mu20 DEBUG pt +Step2MuHypo2.step2mu20 DEBUG Configured to require chain HLT_mu20 ID#3964288416 +Step2MuHypo2.step2mu8 DEBUG Property update for OutputLevel : new value = 2 +Step2MuHypo2.step2mu8 INFO Initializing Step2MuHypo2.step2mu8... +Step2MuHypo2.step2mu8 DEBUG 8000 +Step2MuHypo2.step2mu8 DEBUG pt +Step2MuHypo2.step2mu8 DEBUG Configured to require chain HLT_mu8 ID#3370546555 +Step2MuHypo2 DEBUG input handles: 1 +Step2MuHypo2 DEBUG output handles: 1 +Step2MuHypo2 DEBUG Registering all Tools in ToolHandleArray HypoTools +Step2MuHypo2 DEBUG Adding private ToolHandle tool Step2MuHypo2.step2mu20 (HLTTest::TestHypoTool) from ToolHandleArray HypoTools +Step2MuHypo2 DEBUG Adding private ToolHandle tool Step2MuHypo2.step2mu8 (HLTTest::TestHypoTool) from ToolHandleArray HypoTools +Step2MuHypo2 DEBUG Data Deps for Step2MuHypo2 + + INPUT ( 'xAOD::TrigCompositeContainer' , 'StoreGateSvc+muMSRecAlg2_Output_out' ) + + OUTPUT ( 'xAOD::TrigCompositeContainer' , 'StoreGateSvc+Step2MuHypo2_Output_out' ) +Step2MuInputMaker DEBUG Property update for OutputLevel : new value = 2 +Step2MuInputMaker INFO Initializing Step2MuInputMaker... +Step2MuInputMaker DEBUG Will consume implicit input data: +Step2MuInputMaker DEBUG FilterStep2_on_muStep1Seq_from_Step1MuHypo_Output_out_out +Step2MuInputMaker DEBUG FilterStep2_on_combStep1Seq_from_Step1ComboMuElHypo_Output1_out_out +Step2MuInputMaker DEBUG and produce 'StoreGateSvc+Step2MuInputMaker_Output_out' +Step2MuInputMaker DEBUG input handles: 0 +Step2MuInputMaker DEBUG output handles: 2 +Step2MuInputMaker DEBUG Data Deps for Step2MuInputMaker + + OUTPUT ( 'xAOD::TrigCompositeContainer' , 'StoreGateSvc+Step2MuInputMaker_Output_out' ) + + OUTPUT ( 'xAOD::TrigCompositeContainer' , 'StoreGateSvc+Step2MuInputMaker_decisions' ) +CaloClustering2 DEBUG Property update for OutputLevel : new value = 2 +CaloClustering2 INFO Initializing CaloClustering2 reading input file emclusters.dat +CaloClustering2 DEBUG Loaded 3 pseudo events +CaloClustering2 DEBUG input handles: 1 +CaloClustering2 DEBUG output handles: 1 +CaloClustering2 DEBUG Data Deps for CaloClustering2 + + INPUT ( 'xAOD::TrigCompositeContainer' , 'StoreGateSvc+Step2ElInputMaker_Output_out' ) + + OUTPUT ( 'xAOD::TrigCompositeContainer' , 'StoreGateSvc+CaloClustering2_Output_out' ) +Step2ElInputMaker DEBUG Property update for OutputLevel : new value = 2 +Step2ElInputMaker INFO Initializing Step2ElInputMaker... +Step2ElInputMaker DEBUG Will consume implicit input data: +Step2ElInputMaker DEBUG FilterStep2_on_elStep1Seq_from_Step1ElHypo_Output_out_out +Step2ElInputMaker DEBUG FilterStep2_on_combStep1Seq_from_Step1ComboMuElHypo_Output2_out_out +Step2ElInputMaker DEBUG and produce 'StoreGateSvc+Step2ElInputMaker_Output_out' +Step2ElInputMaker DEBUG input handles: 0 +Step2ElInputMaker DEBUG output handles: 2 +Step2ElInputMaker DEBUG Data Deps for Step2ElInputMaker + + OUTPUT ( 'xAOD::TrigCompositeContainer' , 'StoreGateSvc+Step2ElInputMaker_Output_out' ) + + OUTPUT ( 'xAOD::TrigCompositeContainer' , 'StoreGateSvc+Step2ElInputMaker_decisions' ) +Step2ElHypo DEBUG Property update for OutputLevel : new value = 2 +Step2ElHypo INFO Initializing Step2ElHypo... +Step2ElHypo DEBUG Will consume implicit previous decisions Step2ElInputMaker_decisions +Step2ElHypo.step2e20 DEBUG Property update for OutputLevel : new value = 2 +Step2ElHypo.step2e20 INFO Initializing Step2ElHypo.step2e20... +Step2ElHypo.step2e20 DEBUG 20000 +Step2ElHypo.step2e20 DEBUG et +Step2ElHypo.step2e20 DEBUG Configured to require chain HLT_e20 ID#4230506138 +Step2ElHypo DEBUG input handles: 1 +Step2ElHypo DEBUG output handles: 1 +Step2ElHypo DEBUG Registering all Tools in ToolHandleArray HypoTools +Step2ElHypo DEBUG Adding private ToolHandle tool Step2ElHypo.step2e20 (HLTTest::TestHypoTool) from ToolHandleArray HypoTools +Step2ElHypo DEBUG Data Deps for Step2ElHypo + + INPUT ( 'xAOD::TrigCompositeContainer' , 'StoreGateSvc+CaloClustering2_Output_out' ) + + OUTPUT ( 'xAOD::TrigCompositeContainer' , 'StoreGateSvc+Step2ElHypo_Output_out' ) +Step2ComboMuElHypo DEBUG Property update for OutputLevel : new value = 2 +Step2ComboMuElHypo INFO Initializing Step2ComboMuElHypo... +Step2ComboMuElHypo DEBUG Configured to require chain HLT_mu8_e8 ID#3385806166 +Step2ComboMuElHypo DEBUG input handles: 2 +Step2ComboMuElHypo DEBUG output handles: 2 +Step2ComboMuElHypo DEBUG Data Deps for Step2ComboMuElHypo + + INPUT ( 'xAOD::TrigCompositeContainer' , 'StoreGateSvc+CaloClustering2_Output_out' ) + + INPUT ( 'xAOD::TrigCompositeContainer' , 'StoreGateSvc+muMSRecAlg2_Output_out' ) + + OUTPUT ( 'xAOD::TrigCompositeContainer' , 'StoreGateSvc+Step2ComboMuElHypo_Output1_out' ) + + OUTPUT ( 'xAOD::TrigCompositeContainer' , 'StoreGateSvc+Step2ComboMuElHypo_Output2_out' ) +TriggerSummaryStep2 DEBUG Property update for OutputLevel : new value = 2 +TriggerSummaryStep2 INFO Initializing TriggerSummaryStep2... +TriggerSummaryStep2 DEBUG input handles: 1 +TriggerSummaryStep2 DEBUG output handles: 1 +TriggerSummaryStep2 DEBUG Data Deps for TriggerSummaryStep2 + + INPUT ( 'xAOD::TrigCompositeContainer' , 'StoreGateSvc+HLTChains' ) + + OUTPUT ( 'xAOD::TrigCompositeContainer' , 'StoreGateSvc+MonitoringSummaryTriggerSummaryStep2' ) +ThreadPoolSvc INFO no thread init tools attached +AvalancheSchedulerSvc INFO Activating scheduler in a separate thread +AvalancheSchedulerSvc INFO Waiting for AvalancheSchedulerSvc to activate +AvalancheSchedulerSvc INFO Start checking the actionsQueue +AvalancheSchedulerSvc INFO Found 28 algorithms +AvalancheSchedulerSvc INFO No unmet INPUT data dependencies were found +PrecedenceSvc INFO Assembling CF and DF task precedence rules +PrecedenceSvc INFO PrecedenceSvc initialized successfully +AvalancheSchedulerSvc INFO Concurrency level information: +AvalancheSchedulerSvc INFO o Number of events in flight: 1 +AvalancheSchedulerSvc INFO o TBB thread pool size: 'ThreadPoolSize':1 +PrecedenceSvc INFO +==================== Control Flow Configuration ================== + + AthMasterSeq [Seq] [Sequential] + AthAlgEvtSeq [Seq] [Sequential] + AthBeginSeq [Seq] [Sequential] [Prompt] + BeginIncFiringAlg [Alg] [n= 1] [unclonable] + IncidentProcAlg1 [Alg] [n= 1] [unclonable] + AthAllAlgSeq [Seq] [Concurrent] [Prompt] + AthAlgSeq [Seq] [Concurrent] + SGInputLoader [Alg] [n= 1] + TopHLTRootSeq [Seq] [Sequential] [Prompt] + L1UnpackingSeq [Seq] [Concurrent] [OR] + L1Decoder [Alg] [n= 1] [unclonable] + EmuTest_HLTAllStepsSequence [Seq] [Sequential] [Prompt] + Step1_filter [Seq] [Concurrent] [OR] + FilterStep1_on_L1MU [Alg] [n= 1] [unclonable] + FilterStep1_on_L1EM [Alg] [n= 1] [unclonable] + FilterStep1_on_L1EML1MU [Alg] [n= 1] [unclonable] + EmuTest_HLTAllStepsSequence_Step1_reco [Seq] [Concurrent] [OR] + muStep1Seq [Seq] [Sequential] [Prompt] + FilterStep1_on_L1MU [Alg] [n= 1] [unclonable] + muStep1Seq_reco [Seq] [Concurrent] [OR] + Step1MuHypo [Alg] [n= 1] [unclonable] + Step1MuInputMaker [Alg] [n= 1] [unclonable] + muMSRecAlg [Alg] [n= 1] [unclonable] + elStep1Seq [Seq] [Sequential] [Prompt] + FilterStep1_on_L1EM [Alg] [n= 1] [unclonable] + elStep1Seq_reco [Seq] [Concurrent] [OR] + Step1ElInputMaker [Alg] [n= 1] [unclonable] + Step1ElHypo [Alg] [n= 1] [unclonable] + CaloClustering [Alg] [n= 1] [unclonable] + combStep1Seq [Seq] [Sequential] [Prompt] + FilterStep1_on_L1EML1MU [Alg] [n= 1] [unclonable] + combStep1Seq_reco [Seq] [Concurrent] [OR] + Step1ElInputMaker [Alg] [n= 1] [unclonable] + CaloClustering [Alg] [n= 1] [unclonable] + Step1MuInputMaker [Alg] [n= 1] [unclonable] + Step1ComboMuElHypo [Alg] [n= 1] [unclonable] + muMSRecAlg [Alg] [n= 1] [unclonable] + TriggerSummaryStep1 [Alg] [n= 1] [unclonable] + Step2_filter [Seq] [Concurrent] [OR] + FilterStep2_on_muStep1Seq [Alg] [n= 1] [unclonable] + FilterStep2_on_elStep1Seq [Alg] [n= 1] [unclonable] + FilterStep2_on_combStep1Seq [Alg] [n= 1] [unclonable] + EmuTest_HLTAllStepsSequence_Step2_reco [Seq] [Concurrent] [OR] + muStep2Seq [Seq] [Sequential] [Prompt] + FilterStep2_on_muStep1Seq [Alg] [n= 1] [unclonable] + muStep2Seq_reco [Seq] [Concurrent] [OR] + muMSRecAlg2 [Alg] [n= 1] [unclonable] + Step2MuHypo2 [Alg] [n= 1] [unclonable] + Step2MuInputMaker [Alg] [n= 1] [unclonable] + elStep2Seq [Seq] [Sequential] [Prompt] + FilterStep2_on_elStep1Seq [Alg] [n= 1] [unclonable] + elStep2Seq_reco [Seq] [Concurrent] [OR] + CaloClustering2 [Alg] [n= 1] [unclonable] + Step2ElInputMaker [Alg] [n= 1] [unclonable] + Step2ElHypo [Alg] [n= 1] [unclonable] + combStep2Seq [Seq] [Sequential] [Prompt] + FilterStep2_on_combStep1Seq [Alg] [n= 1] [unclonable] + combStep2Seq_reco [Seq] [Concurrent] [OR] + muMSRecAlg2 [Alg] [n= 1] [unclonable] + CaloClustering2 [Alg] [n= 1] [unclonable] + Step2ElInputMaker [Alg] [n= 1] [unclonable] + Step2ComboMuElHypo [Alg] [n= 1] [unclonable] + Step2MuInputMaker [Alg] [n= 1] [unclonable] + TriggerSummaryStep2 [Alg] [n= 1] [unclonable] + AthCondSeq [Seq] [Concurrent] [Prompt] + AthEndSeq [Seq] [Sequential] [Prompt] + EndIncFiringAlg [Alg] [n= 1] [unclonable] + IncidentProcAlg2 [Alg] [n= 1] [unclonable] + AthOutSeq [Seq] [Concurrent] [Prompt] + AthRegSeq [Seq] [Concurrent] [Prompt] + +PrecedenceSvc INFO +===================== Data Flow Configuration ==================== + + ==================================== + Data origins and destinations: + ==================================== + CaloClustering2 + V + o ( 'xAOD::TrigCompositeContainer' , 'StoreGateSvc+CaloClustering2_Output_out' ) + V + Step2ComboMuElHypo + Step2ElHypo + ==================================== + Step2MuInputMaker + V + o ( 'xAOD::TrigCompositeContainer' , 'StoreGateSvc+Step2MuInputMaker_decisions' ) + V + ==================================== + Step2MuInputMaker + V + o ( 'xAOD::TrigCompositeContainer' , 'StoreGateSvc+Step2MuInputMaker_Output_out' ) + V + muMSRecAlg2 + ==================================== + Step1ComboMuElHypo + V + o ( 'xAOD::TrigCompositeContainer' , 'StoreGateSvc+Step1ComboMuElHypo_Output1_out' ) + V + ==================================== + L1Decoder + V + o ( 'TrigRoiDescriptorCollection' , 'StoreGateSvc+L1MURoIs' ) + V + ==================================== + Step1ElInputMaker + V + o ( 'xAOD::TrigCompositeContainer' , 'StoreGateSvc+Step1ElInputMaker_decisions' ) + V + ==================================== + Step2ComboMuElHypo + V + o ( 'xAOD::TrigCompositeContainer' , 'StoreGateSvc+Step2ComboMuElHypo_Output1_out' ) + V + ==================================== + muMSRecAlg2 + V + o ( 'xAOD::TrigCompositeContainer' , 'StoreGateSvc+muMSRecAlg2_Output_out' ) + V + Step2ComboMuElHypo + Step2MuHypo2 + ==================================== + Step1MuInputMaker + V + o ( 'xAOD::TrigCompositeContainer' , 'StoreGateSvc+Step1MuInputMaker_Output_out' ) + V + muMSRecAlg + ==================================== + Step2ElInputMaker + V + o ( 'xAOD::TrigCompositeContainer' , 'StoreGateSvc+Step2ElInputMaker_Output_out' ) + V + CaloClustering2 + ==================================== + Step1MuInputMaker + V + o ( 'xAOD::TrigCompositeContainer' , 'StoreGateSvc+Step1MuInputMaker_decisions' ) + V + ==================================== + Step2ComboMuElHypo + V + o ( 'xAOD::TrigCompositeContainer' , 'StoreGateSvc+Step2ComboMuElHypo_Output2_out' ) + V + ==================================== + Step1ElInputMaker + V + o ( 'xAOD::TrigCompositeContainer' , 'StoreGateSvc+Step1ElInputMaker_Output_out' ) + V + CaloClustering + ==================================== + muMSRecAlg + V + o ( 'xAOD::TrigCompositeContainer' , 'StoreGateSvc+muMSRecAlg_Output_out' ) + V + Step1ComboMuElHypo + Step1MuHypo + ==================================== + Step2ElHypo + V + o ( 'xAOD::TrigCompositeContainer' , 'StoreGateSvc+Step2ElHypo_Output_out' ) + V + ==================================== + L1Decoder + V + o ( 'xAOD::TrigCompositeContainer' , 'StoreGateSvc+L1MU' ) + V + ==================================== + Step2MuHypo2 + V + o ( 'xAOD::TrigCompositeContainer' , 'StoreGateSvc+Step2MuHypo2_Output_out' ) + V + ==================================== + Step2ElInputMaker + V + o ( 'xAOD::TrigCompositeContainer' , 'StoreGateSvc+Step2ElInputMaker_decisions' ) + V + ==================================== + TriggerSummaryStep2 + V + o ( 'xAOD::TrigCompositeContainer' , 'StoreGateSvc+MonitoringSummaryTriggerSummaryStep2' ) + V + ==================================== + L1Decoder + V + o ( 'xAOD::TrigCompositeContainer' , 'StoreGateSvc+HLTChains' ) + V + TriggerSummaryStep1 + TriggerSummaryStep2 + ==================================== + Step1ComboMuElHypo + V + o ( 'xAOD::TrigCompositeContainer' , 'StoreGateSvc+Step1ComboMuElHypo_Output2_out' ) + V + ==================================== + TriggerSummaryStep1 + V + o ( 'xAOD::TrigCompositeContainer' , 'StoreGateSvc+MonitoringSummaryTriggerSummaryStep1' ) + V + ==================================== + Step1ElHypo + V + o ( 'xAOD::TrigCompositeContainer' , 'StoreGateSvc+Step1ElHypo_Output_out' ) + V + ==================================== + Step1MuHypo + V + o ( 'xAOD::TrigCompositeContainer' , 'StoreGateSvc+Step1MuHypo_Output_out' ) + V + ==================================== + CaloClustering + V + o ( 'xAOD::TrigCompositeContainer' , 'StoreGateSvc+CaloClustering_Output_out' ) + V + Step1ComboMuElHypo + Step1ElHypo + ==================================== + L1Decoder + V + o ( 'TrigRoiDescriptorCollection' , 'StoreGateSvc+L1EMRoIs' ) + V + ==================================== + L1Decoder + V + o ( 'xAOD::TrigCompositeContainer' , 'StoreGateSvc+L1EM' ) + V + ==================================== + +HistogramPersistencySvc WARNING Histograms saving not required. +ApplicationMgr INFO Application Manager Initialized successfully +ApplicationMgr INFO Application Manager Started successfully +AthenaHiveEventLoopMgr INFO Starting loop on events +AthenaHiveEventLoopMgr 0 0 INFO ===>>> start of run 1 <<<=== +AthenaHiveEventLoopMgr 0 0 INFO ===>>> start processing event #0, run #1 on slot 0, 0 events processed so far <<<=== +L1Decoder.PrescalingEmulationTool 0 0 DEBUG Prescaling decision for chain HLT_g100 ID#3739492918 1 +L1Decoder.EMRoIsUnpackingTool 0 0 DEBUG Getting RoIs for event 0 +L1Decoder.EMRoIsUnpackingTool 0 0 DEBUG RoI word: 0x 0 +L1Decoder.EMRoIsUnpackingTool 0 0 DEBUG Passed Threshold EM3 enabling respective chains +L1Decoder.EMRoIsUnpackingTool 0 0 DEBUG Passed Threshold EM7 enabling respective chains +L1Decoder.EMRoIsUnpackingTool 0 0 DEBUG Passed Threshold EM15 enabling respective chains +L1Decoder.EMRoIsUnpackingTool 0 0 DEBUG Passed Threshold EM20 enabling respective chains +L1Decoder.EMRoIsUnpackingTool 0 0 DEBUG Passed Threshold EM50 enabling respective chains +L1Decoder.EMRoIsUnpackingTool 0 0 DEBUG Passed Threshold EM100 enabling respective chains +L1Decoder.EMRoIsUnpackingTool 0 0 DEBUG RoI word: 0x 0 +L1Decoder.EMRoIsUnpackingTool 0 0 DEBUG Passed Threshold EM3 enabling respective chains +L1Decoder.EMRoIsUnpackingTool 0 0 DEBUG Passed Threshold EM7 enabling respective chains +L1Decoder.EMRoIsUnpackingTool 0 0 DEBUG RoI Eta: 1 Phi: 1 RoIWord: 0 +L1Decoder.EMRoIsUnpackingTool 0 0 DEBUG RoI Eta: 1 Phi: -1.2 RoIWord: 0 +L1Decoder.MURoIsUnpackingTool 0 0 DEBUG Getting RoIs for event 0 +L1Decoder.MURoIsUnpackingTool 0 0 DEBUG RoI word: 0x 0 +L1Decoder.MURoIsUnpackingTool 0 0 DEBUG Passed Threshold MU0 enabling respective chains +L1Decoder.MURoIsUnpackingTool 0 0 DEBUG RoI Eta: 0 Phi: 0 RoIWord: 0 +L1Decoder 0 0 DEBUG Recording chains +FilterStep1_on_L1MU 0 0 DEBUG Executing FilterStep1_on_L1MU... +FilterStep1_on_L1MU 0 0 DEBUG Running on 1 input keys +FilterStep1_on_L1MU 0 0 DEBUG Checking inputHandle L1MU with 1 elements +FilterStep1_on_L1MU 0 0 DEBUG Input size 1 +FilterStep1_on_L1MU 0 0 DEBUG Number of positive decisions for this input: 0 +FilterStep1_on_L1MU 0 0 DEBUG No Input decisions requested by active chains +FilterStep1_on_L1MU 0 0 DEBUG Output size 0 +FilterStep1_on_L1MU 0 0 DEBUG Recording output key FilterStep1_on_L1MU_from_L1MU_out of size 0 at index 0 +FilterStep1_on_L1MU 0 0 DEBUG Filter rejected +FilterStep1_on_L1EM 0 0 DEBUG Executing FilterStep1_on_L1EM... +FilterStep1_on_L1EM 0 0 DEBUG Running on 1 input keys +FilterStep1_on_L1EM 0 0 DEBUG Checking inputHandle L1EM with 2 elements +FilterStep1_on_L1EM 0 0 DEBUG Input size 2 +FilterStep1_on_L1EM 0 0 DEBUG Number of positive decisions for this input: 1 +FilterStep1_on_L1EM 0 0 DEBUG -- Positive decision HLT_g100 ID#3739492918 +FilterStep1_on_L1EM 0 0 DEBUG No Input decisions requested by active chains +FilterStep1_on_L1EM 0 0 DEBUG Number of positive decisions for this input: 0 +FilterStep1_on_L1EM 0 0 DEBUG No Input decisions requested by active chains +FilterStep1_on_L1EM 0 0 DEBUG Output size 0 +FilterStep1_on_L1EM 0 0 DEBUG Recording output key FilterStep1_on_L1EM_from_L1EM_out of size 0 at index 0 +FilterStep1_on_L1EM 0 0 DEBUG Filter rejected +FilterStep1_on_L1EML1MU 0 0 DEBUG Executing FilterStep1_on_L1EML1MU... +FilterStep1_on_L1EML1MU 0 0 DEBUG Running on 2 input keys +FilterStep1_on_L1EML1MU 0 0 DEBUG Checking inputHandle L1MU with 1 elements +FilterStep1_on_L1EML1MU 0 0 DEBUG Input size 1 +FilterStep1_on_L1EML1MU 0 0 DEBUG Number of positive decisions for this input: 0 +FilterStep1_on_L1EML1MU 0 0 DEBUG No Input decisions requested by active chains +FilterStep1_on_L1EML1MU 0 0 DEBUG Output size 0 +FilterStep1_on_L1EML1MU 0 0 DEBUG Recording output key FilterStep1_on_L1EML1MU_from_L1MU_out of size 0 at index 0 +FilterStep1_on_L1EML1MU 0 0 DEBUG Checking inputHandle L1EM with 2 elements +FilterStep1_on_L1EML1MU 0 0 DEBUG Input size 2 +FilterStep1_on_L1EML1MU 0 0 DEBUG Number of positive decisions for this input: 1 +FilterStep1_on_L1EML1MU 0 0 DEBUG -- Positive decision HLT_g100 ID#3739492918 +FilterStep1_on_L1EML1MU 0 0 DEBUG No Input decisions requested by active chains +FilterStep1_on_L1EML1MU 0 0 DEBUG Number of positive decisions for this input: 0 +FilterStep1_on_L1EML1MU 0 0 DEBUG No Input decisions requested by active chains +FilterStep1_on_L1EML1MU 0 0 DEBUG Output size 0 +FilterStep1_on_L1EML1MU 0 0 DEBUG Recording output key FilterStep1_on_L1EML1MU_from_L1EM_out of size 0 at index 1 +FilterStep1_on_L1EML1MU 0 0 DEBUG Filter rejected +AthenaHiveEventLoopMgr INFO ===>>> done processing event #0, run #1 on slot 0, 1 events processed so far <<<=== +AthenaHiveEventLoopMgr 1 0 INFO ===>>> start processing event #1, run #1 on slot 0, 1 events processed so far <<<=== +L1Decoder.PrescalingEmulationTool 1 0 DEBUG Prescaling decision for chain HLT_2g50 ID#787761180 1 +L1Decoder.PrescalingEmulationTool 1 0 DEBUG Prescaling decision for chain HLT_e20 ID#4230506138 1 +L1Decoder.EMRoIsUnpackingTool 1 0 DEBUG Getting RoIs for event 1 +L1Decoder.EMRoIsUnpackingTool 1 0 DEBUG RoI word: 0x 0 +L1Decoder.EMRoIsUnpackingTool 1 0 DEBUG Passed Threshold EM3 enabling respective chains +L1Decoder.EMRoIsUnpackingTool 1 0 DEBUG Passed Threshold EM7 enabling respective chains +L1Decoder.EMRoIsUnpackingTool 1 0 DEBUG Passed Threshold EM15 enabling respective chains +L1Decoder.EMRoIsUnpackingTool 1 0 DEBUG Passed Threshold EM20 enabling respective chains +L1Decoder.EMRoIsUnpackingTool 1 0 DEBUG Passed Threshold EM50 enabling respective chains +L1Decoder.EMRoIsUnpackingTool 1 0 DEBUG Passed Threshold EM100 enabling respective chains +L1Decoder.EMRoIsUnpackingTool 1 0 DEBUG RoI word: 0x 0 +L1Decoder.EMRoIsUnpackingTool 1 0 DEBUG Passed Threshold EM3 enabling respective chains +L1Decoder.EMRoIsUnpackingTool 1 0 DEBUG Passed Threshold EM7 enabling respective chains +L1Decoder.EMRoIsUnpackingTool 1 0 DEBUG Passed Threshold EM15 enabling respective chains +L1Decoder.EMRoIsUnpackingTool 1 0 DEBUG Passed Threshold EM20 enabling respective chains +L1Decoder.EMRoIsUnpackingTool 1 0 DEBUG Passed Threshold EM50 enabling respective chains +L1Decoder.EMRoIsUnpackingTool 1 0 DEBUG RoI Eta: -0.6 Phi: 0.2 RoIWord: 0 +L1Decoder.EMRoIsUnpackingTool 1 0 DEBUG RoI Eta: 1 Phi: -1.1 RoIWord: 0 +L1Decoder.MURoIsUnpackingTool 1 0 DEBUG Getting RoIs for event 1 +L1Decoder.MURoIsUnpackingTool 1 0 DEBUG RoI word: 0x 0 +L1Decoder.MURoIsUnpackingTool 1 0 DEBUG Passed Threshold MU6 enabling respective chains +L1Decoder.MURoIsUnpackingTool 1 0 DEBUG Passed Threshold MU8 enabling respective chains +L1Decoder.MURoIsUnpackingTool 1 0 DEBUG RoI word: 0x 0 +L1Decoder.MURoIsUnpackingTool 1 0 DEBUG Passed Threshold MU6 enabling respective chains +L1Decoder.MURoIsUnpackingTool 1 0 DEBUG Passed Threshold MU8 enabling respective chains +L1Decoder.MURoIsUnpackingTool 1 0 DEBUG Passed Threshold MU10 enabling respective chains +L1Decoder.MURoIsUnpackingTool 1 0 DEBUG RoI Eta: -1 Phi: 0.5 RoIWord: 0 +L1Decoder.MURoIsUnpackingTool 1 0 DEBUG RoI Eta: -1 Phi: 0.5 RoIWord: 0 +L1Decoder 1 0 DEBUG Recording chains +FilterStep1_on_L1MU 1 0 DEBUG Executing FilterStep1_on_L1MU... +FilterStep1_on_L1MU 1 0 DEBUG Running on 1 input keys +FilterStep1_on_L1MU 1 0 DEBUG Checking inputHandle L1MU with 2 elements +FilterStep1_on_L1MU 1 0 DEBUG Input size 2 +FilterStep1_on_L1MU 1 0 DEBUG Number of positive decisions for this input: 0 +FilterStep1_on_L1MU 1 0 DEBUG No Input decisions requested by active chains +FilterStep1_on_L1MU 1 0 DEBUG Number of positive decisions for this input: 0 +FilterStep1_on_L1MU 1 0 DEBUG No Input decisions requested by active chains +FilterStep1_on_L1MU 1 0 DEBUG Output size 0 +FilterStep1_on_L1MU 1 0 DEBUG Recording output key FilterStep1_on_L1MU_from_L1MU_out of size 0 at index 0 +FilterStep1_on_L1MU 1 0 DEBUG Filter rejected +FilterStep1_on_L1EM 1 0 DEBUG Executing FilterStep1_on_L1EM... +FilterStep1_on_L1EM 1 0 DEBUG Running on 1 input keys +FilterStep1_on_L1EM 1 0 DEBUG Checking inputHandle L1EM with 2 elements +FilterStep1_on_L1EM 1 0 DEBUG Input size 2 +FilterStep1_on_L1EM 1 0 DEBUG Number of positive decisions for this input: 2 +FilterStep1_on_L1EM 1 0 DEBUG -- Positive decision HLT_2g50 ID#787761180 +FilterStep1_on_L1EM 1 0 DEBUG -- Positive decision HLT_e20 ID#4230506138 +FilterStep1_on_L1EM 1 0 DEBUG Input satisfied at least one active chain +FilterStep1_on_L1EM 1 0 DEBUG Number of positive decisions for this input: 2 +FilterStep1_on_L1EM 1 0 DEBUG -- Positive decision HLT_2g50 ID#787761180 +FilterStep1_on_L1EM 1 0 DEBUG -- Positive decision HLT_e20 ID#4230506138 +FilterStep1_on_L1EM 1 0 DEBUG Input satisfied at least one active chain +FilterStep1_on_L1EM 1 0 DEBUG Output size 2 +FilterStep1_on_L1EM 1 0 DEBUG Recording output key FilterStep1_on_L1EM_from_L1EM_out of size 2 at index 0 +FilterStep1_on_L1EM 1 0 DEBUG Filter passed +FilterStep1_on_L1EML1MU 1 0 DEBUG Executing FilterStep1_on_L1EML1MU... +FilterStep1_on_L1EML1MU 1 0 DEBUG Running on 2 input keys +FilterStep1_on_L1EML1MU 1 0 DEBUG Checking inputHandle L1MU with 2 elements +FilterStep1_on_L1EML1MU 1 0 DEBUG Input size 2 +FilterStep1_on_L1EML1MU 1 0 DEBUG Number of positive decisions for this input: 0 +FilterStep1_on_L1EML1MU 1 0 DEBUG No Input decisions requested by active chains +FilterStep1_on_L1EML1MU 1 0 DEBUG Number of positive decisions for this input: 0 +FilterStep1_on_L1EML1MU 1 0 DEBUG No Input decisions requested by active chains +FilterStep1_on_L1EML1MU 1 0 DEBUG Output size 0 +FilterStep1_on_L1EML1MU 1 0 DEBUG Recording output key FilterStep1_on_L1EML1MU_from_L1MU_out of size 0 at index 0 +FilterStep1_on_L1EML1MU 1 0 DEBUG Checking inputHandle L1EM with 2 elements +FilterStep1_on_L1EML1MU 1 0 DEBUG Input size 2 +FilterStep1_on_L1EML1MU 1 0 DEBUG Number of positive decisions for this input: 2 +FilterStep1_on_L1EML1MU 1 0 DEBUG -- Positive decision HLT_2g50 ID#787761180 +FilterStep1_on_L1EML1MU 1 0 DEBUG -- Positive decision HLT_e20 ID#4230506138 +FilterStep1_on_L1EML1MU 1 0 DEBUG No Input decisions requested by active chains +FilterStep1_on_L1EML1MU 1 0 DEBUG Number of positive decisions for this input: 2 +FilterStep1_on_L1EML1MU 1 0 DEBUG -- Positive decision HLT_2g50 ID#787761180 +FilterStep1_on_L1EML1MU 1 0 DEBUG -- Positive decision HLT_e20 ID#4230506138 +FilterStep1_on_L1EML1MU 1 0 DEBUG No Input decisions requested by active chains +FilterStep1_on_L1EML1MU 1 0 DEBUG Output size 0 +FilterStep1_on_L1EML1MU 1 0 DEBUG Recording output key FilterStep1_on_L1EML1MU_from_L1EM_out of size 0 at index 1 +FilterStep1_on_L1EML1MU 1 0 DEBUG Filter rejected +Step1ElInputMaker 1 0 DEBUG Executing Step1ElInputMaker... +Step1ElInputMaker 1 0 DEBUG number of implicit ReadHandles is 2 +Step1ElInputMaker 1 0 DEBUG Got DecisionContainer from input FilterStep1_on_L1EM_from_L1EM_out with 2 elements +Step1ElInputMaker 1 0 DEBUG Found feature initialRoI: RoIid: 0 RoIword: 0 z: 0 (-225 - 225) eta: -0.6 (-0.7 - -0.5) phi: 0.2 (0.1 - 0.3) +Step1ElInputMaker 1 0 DEBUG Make new decision +Step1ElInputMaker 1 0 DEBUG Copy decisions from input 0 with exist flag=0 to output 0x7f7c890e41a0 +Step1ElInputMaker 1 0 DEBUG Found feature initialRoI: RoIid: 0 RoIword: 0 z: 0 (-225 - 225) eta: 1 (0.9 - 1.1) phi: -1.1 (-1.2 - -1) +Step1ElInputMaker 1 0 DEBUG Make new decision +Step1ElInputMaker 1 0 DEBUG Copy decisions from input 1 with exist flag=0 to output 0x7f7c890e41a0 +Step1ElInputMaker 1 0 DEBUG Got DecisionContainer from input FilterStep1_on_L1EML1MU_from_L1EM_out with 0 elements +Step1ElInputMaker 1 0 DEBUG Should find 2 obejcts and decisions +Step1ElInputMaker 1 0 DEBUG Produced 2 objects +Step1ElInputMaker 1 0 DEBUG Produced 2 decisions +Step1ElInputMaker 1 0 DEBUG Number of positive decisions for this input: 2 +Step1ElInputMaker 1 0 DEBUG --- found decision HLT_2g50 ID#787761180 +Step1ElInputMaker 1 0 DEBUG --- found decision HLT_e20 ID#4230506138 +Step1ElInputMaker 1 0 DEBUG Number of positive decisions for this input: 2 +Step1ElInputMaker 1 0 DEBUG --- found decision HLT_2g50 ID#787761180 +Step1ElInputMaker 1 0 DEBUG --- found decision HLT_e20 ID#4230506138 +Step1MuInputMaker 1 0 DEBUG Executing Step1MuInputMaker... +Step1MuInputMaker 1 0 DEBUG number of implicit ReadHandles is 2 +Step1MuInputMaker 1 0 DEBUG Got DecisionContainer from input FilterStep1_on_L1MU_from_L1MU_out with 0 elements +Step1MuInputMaker 1 0 DEBUG Got DecisionContainer from input FilterStep1_on_L1EML1MU_from_L1MU_out with 0 elements +Step1MuInputMaker 1 0 DEBUG Should find 0 obejcts and decisions +Step1MuInputMaker 1 0 DEBUG Produced 0 objects +Step1MuInputMaker 1 0 DEBUG Produced 0 decisions +muMSRecAlg 1 0 DEBUG Executing muMSRecAlg... +muMSRecAlg 1 0 DEBUG Input Step1MuInputMaker_Output_out has 0 elements, scanning it +muMSRecAlg 1 0 DEBUG Reconstructed 0 objects +Step1MuHypo 1 0 DEBUG Executing Step1MuHypo... +Step1MuHypo 1 0 DEBUG Running with 0 implicit ReadHandles for previous decisions +Step1MuHypo 1 0 DEBUG and with 0 reco inputs +Step1MuHypo 1 0 DEBUG Exiting with 0 decisions +CaloClustering 1 0 DEBUG Executing CaloClustering... +CaloClustering 1 0 DEBUG Input Step1ElInputMaker_Output_out has 2 elements, scanning it +CaloClustering 1 0 DEBUG RoI RoIid: 0 RoIword: 0 z: 0 (-225 - 225) eta: -0.6 (-0.7 - -0.5) phi: 0.2 (0.1 - 0.3) +CaloClustering 1 0 DEBUG Reconstructed object +CaloClustering 1 0 DEBUG eta : 0.5 +CaloClustering 1 0 DEBUG phi : 0 +CaloClustering 1 0 DEBUG et : 120000 +CaloClustering 1 0 DEBUG RoI RoIid: 0 RoIword: 0 z: 0 (-225 - 225) eta: 1 (0.9 - 1.1) phi: -1.1 (-1.2 - -1) +CaloClustering 1 0 DEBUG Reconstructed object +CaloClustering 1 0 DEBUG eta : 1 +CaloClustering 1 0 DEBUG phi : -1.2 +CaloClustering 1 0 DEBUG et : 65000 +CaloClustering 1 0 DEBUG Reconstructed 2 objects +Step1ElHypo 1 0 DEBUG Executing Step1ElHypo... +Step1ElHypo 1 0 DEBUG Running with 2 implicit ReadHandles for previous decisions +Step1ElHypo 1 0 DEBUG and with 2 reco inputs +Step1ElHypo.step1e20 1 0 DEBUG Making new decisions Step1ElHypo.step1e20 +Step1ElHypo.step1e20 1 0 DEBUG Number of previous decisions for input 0= 2 +Step1ElHypo.step1e20 1 0 DEBUG -- found decision HLT_2g50 ID#787761180 +Step1ElHypo.step1e20 1 0 DEBUG -- found decision HLT_e20 ID#4230506138 +Step1ElHypo.step1e20 1 0 DEBUG threshold 20000 passed by value: 120000 +Step1ElHypo.step1e20 1 0 DEBUG Number of previous decisions for input 1= 2 +Step1ElHypo.step1e20 1 0 DEBUG -- found decision HLT_2g50 ID#787761180 +Step1ElHypo.step1e20 1 0 DEBUG -- found decision HLT_e20 ID#4230506138 +Step1ElHypo.step1e20 1 0 DEBUG threshold 20000 passed by value: 65000 +Step1ElHypo 1 0 DEBUG Exiting with 2 decisions +Step1ElHypo 1 0 DEBUG Number of positive decisions for this input: 1 +Step1ElHypo 1 0 DEBUG --- found new decision HLT_e20 ID#4230506138 +Step1ElHypo 1 0 DEBUG Number of positive decisions for this input: 1 +Step1ElHypo 1 0 DEBUG --- found new decision HLT_e20 ID#4230506138 +Step1ComboMuElHypo 1 0 DEBUG Executing Step1ComboMuElHypo... +Step1ComboMuElHypo 1 0 DEBUG Running with 0 implicit Step1MuInputMaker_decisions for previous decisions of input 1 +Step1ComboMuElHypo 1 0 DEBUG Running with 2 implicit Step1ElInputMaker_decisions for previous decisions of input 2 +Step1ComboMuElHypo 1 0 DEBUG and with 0 reco1 inputs, and 2 reco2 inputs +Step1ComboMuElHypo 1 0 DEBUG Found 0 rois from input 1 +Step1ComboMuElHypo 1 0 DEBUG Found 2 rois from input 2 +Step1ComboMuElHypo 1 0 DEBUG No combined hypo found, Do not go to the tool since n.dec1=0 and n.dec2=2 +TriggerSummaryStep1 1 0 DEBUG Executing TriggerSummaryStep1... +TriggerSummaryStep1 1 0 DEBUG Found 0 Decisions for Step1MuHypo_Output_out +TriggerSummaryStep1 1 0 DEBUG Found 2 Decisions for Step1ElHypo_Output_out +TriggerSummaryStep1 1 0 DEBUG Found 0 Decisions for Step1ComboMuElHypo_Output1_out +TriggerSummaryStep1 1 0 DEBUG Found 2 Decisions for Step1ComboMuElHypo_Output2_out +TriggerSummaryStep1 1 0 DEBUG In summary 1 chains passed: +TriggerSummaryStep1 1 0 DEBUG +++ HLT_e20 ID#4230506138 +FilterStep2_on_muStep1Seq 1 0 DEBUG Executing FilterStep2_on_muStep1Seq... +FilterStep2_on_muStep1Seq 1 0 DEBUG Running on 1 input keys +FilterStep2_on_muStep1Seq 1 0 DEBUG Checking inputHandle Step1MuHypo_Output_out with 0 elements +FilterStep2_on_muStep1Seq 1 0 DEBUG Input size 0 +FilterStep2_on_muStep1Seq 1 0 DEBUG Output size 0 +FilterStep2_on_muStep1Seq 1 0 DEBUG Recording output key FilterStep2_on_muStep1Seq_from_Step1MuHypo_Output_out_out of size 0 at index 0 +FilterStep2_on_muStep1Seq 1 0 DEBUG Filter rejected +FilterStep2_on_elStep1Seq 1 0 DEBUG Executing FilterStep2_on_elStep1Seq... +FilterStep2_on_elStep1Seq 1 0 DEBUG Running on 1 input keys +FilterStep2_on_elStep1Seq 1 0 DEBUG Checking inputHandle Step1ElHypo_Output_out with 2 elements +FilterStep2_on_elStep1Seq 1 0 DEBUG Input size 2 +FilterStep2_on_elStep1Seq 1 0 DEBUG Number of positive decisions for this input: 1 +FilterStep2_on_elStep1Seq 1 0 DEBUG -- Positive decision HLT_e20 ID#4230506138 +FilterStep2_on_elStep1Seq 1 0 DEBUG Input satisfied at least one active chain +FilterStep2_on_elStep1Seq 1 0 DEBUG Number of positive decisions for this input: 1 +FilterStep2_on_elStep1Seq 1 0 DEBUG -- Positive decision HLT_e20 ID#4230506138 +FilterStep2_on_elStep1Seq 1 0 DEBUG Input satisfied at least one active chain +FilterStep2_on_elStep1Seq 1 0 DEBUG Output size 2 +FilterStep2_on_elStep1Seq 1 0 DEBUG Recording output key FilterStep2_on_elStep1Seq_from_Step1ElHypo_Output_out_out of size 2 at index 0 +FilterStep2_on_elStep1Seq 1 0 DEBUG Filter passed +FilterStep2_on_combStep1Seq 1 0 DEBUG Executing FilterStep2_on_combStep1Seq... +FilterStep2_on_combStep1Seq 1 0 DEBUG Running on 2 input keys +FilterStep2_on_combStep1Seq 1 0 DEBUG Checking inputHandle Step1ComboMuElHypo_Output1_out with 0 elements +FilterStep2_on_combStep1Seq 1 0 DEBUG Input size 0 +FilterStep2_on_combStep1Seq 1 0 DEBUG Output size 0 +FilterStep2_on_combStep1Seq 1 0 DEBUG Recording output key FilterStep2_on_combStep1Seq_from_Step1ComboMuElHypo_Output1_out_out of size 0 at index 0 +FilterStep2_on_combStep1Seq 1 0 DEBUG Checking inputHandle Step1ComboMuElHypo_Output2_out with 2 elements +FilterStep2_on_combStep1Seq 1 0 DEBUG Input size 2 +FilterStep2_on_combStep1Seq 1 0 DEBUG Number of positive decisions for this input: 0 +FilterStep2_on_combStep1Seq 1 0 DEBUG No Input decisions requested by active chains +FilterStep2_on_combStep1Seq 1 0 DEBUG Number of positive decisions for this input: 0 +FilterStep2_on_combStep1Seq 1 0 DEBUG No Input decisions requested by active chains +FilterStep2_on_combStep1Seq 1 0 DEBUG Output size 0 +FilterStep2_on_combStep1Seq 1 0 DEBUG Recording output key FilterStep2_on_combStep1Seq_from_Step1ComboMuElHypo_Output2_out_out of size 0 at index 1 +FilterStep2_on_combStep1Seq 1 0 DEBUG Filter rejected +Step2ElInputMaker 1 0 DEBUG Executing Step2ElInputMaker... +Step2ElInputMaker 1 0 DEBUG number of implicit ReadHandles is 2 +Step2ElInputMaker 1 0 DEBUG Got DecisionContainer from input FilterStep2_on_elStep1Seq_from_Step1ElHypo_Output_out_out with 2 elements +Step2ElInputMaker 1 0 DEBUG Found feature initialRoI: RoIid: 0 RoIword: 0 z: 0 (-225 - 225) eta: -0.6 (-0.7 - -0.5) phi: 0.2 (0.1 - 0.3) +Step2ElInputMaker 1 0 DEBUG Make new decision +Step2ElInputMaker 1 0 DEBUG Copy decisions from input 0 with exist flag=0 to output 0x7f7c890e41a0 +Step2ElInputMaker 1 0 DEBUG Found feature initialRoI: RoIid: 0 RoIword: 0 z: 0 (-225 - 225) eta: 1 (0.9 - 1.1) phi: -1.1 (-1.2 - -1) +Step2ElInputMaker 1 0 DEBUG Make new decision +Step2ElInputMaker 1 0 DEBUG Copy decisions from input 1 with exist flag=0 to output 0x7f7c890e41a0 +Step2ElInputMaker 1 0 DEBUG Got DecisionContainer from input FilterStep2_on_combStep1Seq_from_Step1ComboMuElHypo_Output2_out_out with 0 elements +Step2ElInputMaker 1 0 DEBUG Should find 2 obejcts and decisions +Step2ElInputMaker 1 0 DEBUG Produced 2 objects +Step2ElInputMaker 1 0 DEBUG Produced 2 decisions +Step2ElInputMaker 1 0 DEBUG Number of positive decisions for this input: 1 +Step2ElInputMaker 1 0 DEBUG --- found decision HLT_e20 ID#4230506138 +Step2ElInputMaker 1 0 DEBUG Number of positive decisions for this input: 1 +Step2ElInputMaker 1 0 DEBUG --- found decision HLT_e20 ID#4230506138 +Step2MuInputMaker 1 0 DEBUG Executing Step2MuInputMaker... +Step2MuInputMaker 1 0 DEBUG number of implicit ReadHandles is 2 +Step2MuInputMaker 1 0 DEBUG Got DecisionContainer from input FilterStep2_on_muStep1Seq_from_Step1MuHypo_Output_out_out with 0 elements +Step2MuInputMaker 1 0 DEBUG Got DecisionContainer from input FilterStep2_on_combStep1Seq_from_Step1ComboMuElHypo_Output1_out_out with 0 elements +Step2MuInputMaker 1 0 DEBUG Should find 0 obejcts and decisions +Step2MuInputMaker 1 0 DEBUG Produced 0 objects +Step2MuInputMaker 1 0 DEBUG Produced 0 decisions +muMSRecAlg2 1 0 DEBUG Executing muMSRecAlg2... +muMSRecAlg2 1 0 DEBUG Input Step2MuInputMaker_Output_out has 0 elements, scanning it +muMSRecAlg2 1 0 DEBUG Reconstructed 0 objects +Step2MuHypo2 1 0 DEBUG Executing Step2MuHypo2... +Step2MuHypo2 1 0 DEBUG Running with 0 implicit ReadHandles for previous decisions +Step2MuHypo2 1 0 DEBUG and with 0 reco inputs +Step2MuHypo2 1 0 DEBUG Exiting with 0 decisions +CaloClustering2 1 0 DEBUG Executing CaloClustering2... +CaloClustering2 1 0 DEBUG Input Step2ElInputMaker_Output_out has 2 elements, scanning it +CaloClustering2 1 0 DEBUG RoI RoIid: 0 RoIword: 0 z: 0 (-225 - 225) eta: -0.6 (-0.7 - -0.5) phi: 0.2 (0.1 - 0.3) +CaloClustering2 1 0 DEBUG Reconstructed object +CaloClustering2 1 0 DEBUG eta : 0.5 +CaloClustering2 1 0 DEBUG phi : 0 +CaloClustering2 1 0 DEBUG et : 120000 +CaloClustering2 1 0 DEBUG RoI RoIid: 0 RoIword: 0 z: 0 (-225 - 225) eta: 1 (0.9 - 1.1) phi: -1.1 (-1.2 - -1) +CaloClustering2 1 0 DEBUG Reconstructed object +CaloClustering2 1 0 DEBUG eta : 1 +CaloClustering2 1 0 DEBUG phi : -1.2 +CaloClustering2 1 0 DEBUG et : 65000 +CaloClustering2 1 0 DEBUG Reconstructed 2 objects +Step2ElHypo 1 0 DEBUG Executing Step2ElHypo... +Step2ElHypo 1 0 DEBUG Running with 2 implicit ReadHandles for previous decisions +Step2ElHypo 1 0 DEBUG and with 2 reco inputs +Step2ElHypo.step2e20 1 0 DEBUG Making new decisions Step2ElHypo.step2e20 +Step2ElHypo.step2e20 1 0 DEBUG Number of previous decisions for input 0= 1 +Step2ElHypo.step2e20 1 0 DEBUG -- found decision HLT_e20 ID#4230506138 +Step2ElHypo.step2e20 1 0 DEBUG threshold 20000 passed by value: 120000 +Step2ElHypo.step2e20 1 0 DEBUG Number of previous decisions for input 1= 1 +Step2ElHypo.step2e20 1 0 DEBUG -- found decision HLT_e20 ID#4230506138 +Step2ElHypo.step2e20 1 0 DEBUG threshold 20000 passed by value: 65000 +Step2ElHypo 1 0 DEBUG Exiting with 2 decisions +Step2ElHypo 1 0 DEBUG Number of positive decisions for this input: 1 +Step2ElHypo 1 0 DEBUG --- found new decision HLT_e20 ID#4230506138 +Step2ElHypo 1 0 DEBUG Number of positive decisions for this input: 1 +Step2ElHypo 1 0 DEBUG --- found new decision HLT_e20 ID#4230506138 +Step2ComboMuElHypo 1 0 DEBUG Executing Step2ComboMuElHypo... +Step2ComboMuElHypo 1 0 DEBUG Running with 0 implicit Step2MuInputMaker_decisions for previous decisions of input 1 +Step2ComboMuElHypo 1 0 DEBUG Running with 2 implicit Step2ElInputMaker_decisions for previous decisions of input 2 +Step2ComboMuElHypo 1 0 DEBUG and with 0 reco1 inputs, and 2 reco2 inputs +Step2ComboMuElHypo 1 0 DEBUG Found 0 rois from input 1 +Step2ComboMuElHypo 1 0 DEBUG Found 2 rois from input 2 +Step2ComboMuElHypo 1 0 DEBUG No combined hypo found, Do not go to the tool since n.dec1=0 and n.dec2=2 +TriggerSummaryStep2 1 0 DEBUG Executing TriggerSummaryStep2... +TriggerSummaryStep2 1 0 DEBUG Found 0 Decisions for Step2MuHypo2_Output_out +TriggerSummaryStep2 1 0 DEBUG Found 2 Decisions for Step2ElHypo_Output_out +TriggerSummaryStep2 1 0 DEBUG Found 0 Decisions for Step2ComboMuElHypo_Output1_out +TriggerSummaryStep2 1 0 DEBUG Found 2 Decisions for Step2ComboMuElHypo_Output2_out +TriggerSummaryStep2 1 0 DEBUG In summary 1 chains passed: +TriggerSummaryStep2 1 0 DEBUG +++ HLT_e20 ID#4230506138 +AthenaHiveEventLoopMgr INFO ===>>> done processing event #1, run #1 on slot 0, 2 events processed so far <<<=== +AthenaHiveEventLoopMgr 2 0 INFO ===>>> start processing event #2, run #1 on slot 0, 2 events processed so far <<<=== +L1Decoder.PrescalingEmulationTool 2 0 DEBUG Prescaling decision for chain HLT_2mu8 ID#1307018918 1 +L1Decoder.PrescalingEmulationTool 2 0 DEBUG Prescaling decision for chain HLT_mu8 ID#3370546555 1 +L1Decoder.PrescalingEmulationTool 2 0 DEBUG Prescaling decision for chain HLT_mu8_e8 ID#3385806166 1 +L1Decoder.PrescalingEmulationTool 2 0 DEBUG Prescaling decision for chain HLT_mu20 ID#3964288416 1 +L1Decoder.EMRoIsUnpackingTool 2 0 DEBUG Getting RoIs for event 2 +L1Decoder.EMRoIsUnpackingTool 2 0 DEBUG RoI word: 0x 0 +L1Decoder.EMRoIsUnpackingTool 2 0 DEBUG Passed Threshold EM3 enabling respective chains +L1Decoder.EMRoIsUnpackingTool 2 0 DEBUG Passed Threshold EM7 enabling respective chains +L1Decoder.EMRoIsUnpackingTool 2 0 DEBUG Passed Threshold EM7 enabling respective chains +L1Decoder.EMRoIsUnpackingTool 2 0 DEBUG RoI Eta: -0.6 Phi: 1.5 RoIWord: 0 +L1Decoder.MURoIsUnpackingTool 2 0 DEBUG Getting RoIs for event 2 +L1Decoder.MURoIsUnpackingTool 2 0 DEBUG RoI word: 0x 0 +L1Decoder.MURoIsUnpackingTool 2 0 DEBUG Passed Threshold MU6 enabling respective chains +L1Decoder.MURoIsUnpackingTool 2 0 DEBUG Passed Threshold MU8 enabling respective chains +L1Decoder.MURoIsUnpackingTool 2 0 DEBUG RoI Eta: -1.5 Phi: -0.1 RoIWord: 0 +L1Decoder 2 0 DEBUG Recording chains +FilterStep1_on_L1MU 2 0 DEBUG Executing FilterStep1_on_L1MU... +FilterStep1_on_L1MU 2 0 DEBUG Running on 1 input keys +FilterStep1_on_L1MU 2 0 DEBUG Checking inputHandle L1MU with 1 elements +FilterStep1_on_L1MU 2 0 DEBUG Input size 1 +FilterStep1_on_L1MU 2 0 DEBUG Number of positive decisions for this input: 3 +FilterStep1_on_L1MU 2 0 DEBUG -- Positive decision HLT_2mu8 ID#1307018918 +FilterStep1_on_L1MU 2 0 DEBUG -- Positive decision HLT_mu8 ID#3370546555 +FilterStep1_on_L1MU 2 0 DEBUG -- Positive decision HLT_mu8_e8 ID#3385806166 +FilterStep1_on_L1MU 2 0 DEBUG Input satisfied at least one active chain +FilterStep1_on_L1MU 2 0 DEBUG Output size 1 +FilterStep1_on_L1MU 2 0 DEBUG Recording output key FilterStep1_on_L1MU_from_L1MU_out of size 1 at index 0 +FilterStep1_on_L1MU 2 0 DEBUG Filter passed +FilterStep1_on_L1EM 2 0 DEBUG Executing FilterStep1_on_L1EM... +FilterStep1_on_L1EM 2 0 DEBUG Running on 1 input keys +FilterStep1_on_L1EM 2 0 DEBUG Checking inputHandle L1EM with 1 elements +FilterStep1_on_L1EM 2 0 DEBUG Input size 1 +FilterStep1_on_L1EM 2 0 DEBUG Number of positive decisions for this input: 1 +FilterStep1_on_L1EM 2 0 DEBUG -- Positive decision HLT_mu8_e8 ID#3385806166 +FilterStep1_on_L1EM 2 0 DEBUG No Input decisions requested by active chains +FilterStep1_on_L1EM 2 0 DEBUG Output size 0 +FilterStep1_on_L1EM 2 0 DEBUG Recording output key FilterStep1_on_L1EM_from_L1EM_out of size 0 at index 0 +FilterStep1_on_L1EM 2 0 DEBUG Filter rejected +FilterStep1_on_L1EML1MU 2 0 DEBUG Executing FilterStep1_on_L1EML1MU... +FilterStep1_on_L1EML1MU 2 0 DEBUG Running on 2 input keys +FilterStep1_on_L1EML1MU 2 0 DEBUG Checking inputHandle L1MU with 1 elements +FilterStep1_on_L1EML1MU 2 0 DEBUG Input size 1 +FilterStep1_on_L1EML1MU 2 0 DEBUG Number of positive decisions for this input: 3 +FilterStep1_on_L1EML1MU 2 0 DEBUG -- Positive decision HLT_2mu8 ID#1307018918 +FilterStep1_on_L1EML1MU 2 0 DEBUG -- Positive decision HLT_mu8 ID#3370546555 +FilterStep1_on_L1EML1MU 2 0 DEBUG -- Positive decision HLT_mu8_e8 ID#3385806166 +FilterStep1_on_L1EML1MU 2 0 DEBUG Input satisfied at least one active chain +FilterStep1_on_L1EML1MU 2 0 DEBUG Output size 1 +FilterStep1_on_L1EML1MU 2 0 DEBUG Recording output key FilterStep1_on_L1EML1MU_from_L1MU_out of size 1 at index 0 +FilterStep1_on_L1EML1MU 2 0 DEBUG Checking inputHandle L1EM with 1 elements +FilterStep1_on_L1EML1MU 2 0 DEBUG Input size 1 +FilterStep1_on_L1EML1MU 2 0 DEBUG Number of positive decisions for this input: 1 +FilterStep1_on_L1EML1MU 2 0 DEBUG -- Positive decision HLT_mu8_e8 ID#3385806166 +FilterStep1_on_L1EML1MU 2 0 DEBUG Input satisfied at least one active chain +FilterStep1_on_L1EML1MU 2 0 DEBUG Output size 1 +FilterStep1_on_L1EML1MU 2 0 DEBUG Recording output key FilterStep1_on_L1EML1MU_from_L1EM_out of size 1 at index 1 +FilterStep1_on_L1EML1MU 2 0 DEBUG Filter passed +Step1MuInputMaker 2 0 DEBUG Executing Step1MuInputMaker... +Step1MuInputMaker 2 0 DEBUG number of implicit ReadHandles is 2 +Step1MuInputMaker 2 0 DEBUG Got DecisionContainer from input FilterStep1_on_L1MU_from_L1MU_out with 1 elements +Step1MuInputMaker 2 0 DEBUG Found feature initialRoI: RoIid: 0 RoIword: 0 z: 0 (-225 - 225) eta: -1.5 (-1.6 - -1.4) phi: -0.1 (-0.2 - 1.49012e-09) +Step1MuInputMaker 2 0 DEBUG Make new decision +Step1MuInputMaker 2 0 DEBUG Copy decisions from input 0 with exist flag=0 to output 0x7f7c890e41a0 +Step1MuInputMaker 2 0 DEBUG Got DecisionContainer from input FilterStep1_on_L1EML1MU_from_L1MU_out with 1 elements +Step1MuInputMaker 2 0 DEBUG Found feature initialRoI: RoIid: 0 RoIword: 0 z: 0 (-225 - 225) eta: -1.5 (-1.6 - -1.4) phi: -0.1 (-0.2 - 1.49012e-09) +Step1MuInputMaker 2 0 DEBUG Copy decisions from input 0 with exist flag=1 to output 0x7f7c890e41a0 +Step1MuInputMaker 2 0 DEBUG Should find 1 obejcts and decisions +Step1MuInputMaker 2 0 DEBUG Produced 1 objects +Step1MuInputMaker 2 0 DEBUG Produced 1 decisions +Step1MuInputMaker 2 0 DEBUG Number of positive decisions for this input: 3 +Step1MuInputMaker 2 0 DEBUG --- found decision HLT_2mu8 ID#1307018918 +Step1MuInputMaker 2 0 DEBUG --- found decision HLT_mu8 ID#3370546555 +Step1MuInputMaker 2 0 DEBUG --- found decision HLT_mu8_e8 ID#3385806166 +muMSRecAlg 2 0 DEBUG Executing muMSRecAlg... +muMSRecAlg 2 0 DEBUG Input Step1MuInputMaker_Output_out has 1 elements, scanning it +muMSRecAlg 2 0 DEBUG RoI RoIid: 0 RoIword: 0 z: 0 (-225 - 225) eta: -1.5 (-1.6 - -1.4) phi: -0.1 (-0.2 - 1.49012e-09) +muMSRecAlg 2 0 DEBUG Reconstructed object +muMSRecAlg 2 0 DEBUG eta : -1.7 +muMSRecAlg 2 0 DEBUG phi : -0.2 +muMSRecAlg 2 0 DEBUG pt : 9500 +muMSRecAlg 2 0 DEBUG Reconstructed 1 objects +Step1MuHypo 2 0 DEBUG Executing Step1MuHypo... +Step1MuHypo 2 0 DEBUG Running with 1 implicit ReadHandles for previous decisions +Step1MuHypo 2 0 DEBUG and with 1 reco inputs +Step1MuHypo.step1mu20 2 0 DEBUG Making new decisions Step1MuHypo.step1mu20 +Step1MuHypo.step1mu20 2 0 DEBUG Number of previous decisions for input 0= 3 +Step1MuHypo.step1mu20 2 0 DEBUG -- found decision HLT_2mu8 ID#1307018918 +Step1MuHypo.step1mu20 2 0 DEBUG -- found decision HLT_mu8 ID#3370546555 +Step1MuHypo.step1mu20 2 0 DEBUG -- found decision HLT_mu8_e8 ID#3385806166 +Step1MuHypo.step1mu20 2 0 DEBUG No Input decisions requested by active chains +Step1MuHypo.step1mu20 2 0 DEBUG Configured to require chain HLT_mu20 ID#3964288416 +Step1MuHypo.step1mu8 2 0 DEBUG Making new decisions Step1MuHypo.step1mu8 +Step1MuHypo.step1mu8 2 0 DEBUG Number of previous decisions for input 0= 3 +Step1MuHypo.step1mu8 2 0 DEBUG -- found decision HLT_2mu8 ID#1307018918 +Step1MuHypo.step1mu8 2 0 DEBUG -- found decision HLT_mu8 ID#3370546555 +Step1MuHypo.step1mu8 2 0 DEBUG -- found decision HLT_mu8_e8 ID#3385806166 +Step1MuHypo.step1mu8 2 0 DEBUG threshold 8000 passed by value: 9500 +Step1MuHypo 2 0 DEBUG Exiting with 1 decisions +Step1MuHypo 2 0 DEBUG Number of positive decisions for this input: 1 +Step1MuHypo 2 0 DEBUG --- found new decision HLT_mu8 ID#3370546555 +Step1ElInputMaker 2 0 DEBUG Executing Step1ElInputMaker... +Step1ElInputMaker 2 0 DEBUG number of implicit ReadHandles is 2 +Step1ElInputMaker 2 0 DEBUG Got DecisionContainer from input FilterStep1_on_L1EM_from_L1EM_out with 0 elements +Step1ElInputMaker 2 0 DEBUG Got DecisionContainer from input FilterStep1_on_L1EML1MU_from_L1EM_out with 1 elements +Step1ElInputMaker 2 0 DEBUG Found feature initialRoI: RoIid: 0 RoIword: 0 z: 0 (-225 - 225) eta: -0.6 (-0.7 - -0.5) phi: 1.5 (1.4 - 1.6) +Step1ElInputMaker 2 0 DEBUG Make new decision +Step1ElInputMaker 2 0 DEBUG Copy decisions from input 0 with exist flag=0 to output 0x7f7c890e41a0 +Step1ElInputMaker 2 0 DEBUG Should find 1 obejcts and decisions +Step1ElInputMaker 2 0 DEBUG Produced 1 objects +Step1ElInputMaker 2 0 DEBUG Produced 1 decisions +Step1ElInputMaker 2 0 DEBUG Number of positive decisions for this input: 1 +Step1ElInputMaker 2 0 DEBUG --- found decision HLT_mu8_e8 ID#3385806166 +CaloClustering 2 0 DEBUG Executing CaloClustering... +CaloClustering 2 0 DEBUG Input Step1ElInputMaker_Output_out has 1 elements, scanning it +CaloClustering 2 0 DEBUG RoI RoIid: 0 RoIword: 0 z: 0 (-225 - 225) eta: -0.6 (-0.7 - -0.5) phi: 1.5 (1.4 - 1.6) +CaloClustering 2 0 DEBUG Reconstructed object +CaloClustering 2 0 DEBUG eta : -0.6 +CaloClustering 2 0 DEBUG phi : 1.7 +CaloClustering 2 0 DEBUG et : 9000 +CaloClustering 2 0 DEBUG Reconstructed 1 objects +Step1ElHypo 2 0 DEBUG Executing Step1ElHypo... +Step1ElHypo 2 0 DEBUG Running with 1 implicit ReadHandles for previous decisions +Step1ElHypo 2 0 DEBUG and with 1 reco inputs +Step1ElHypo.step1e20 2 0 DEBUG Making new decisions Step1ElHypo.step1e20 +Step1ElHypo.step1e20 2 0 DEBUG Number of previous decisions for input 0= 1 +Step1ElHypo.step1e20 2 0 DEBUG -- found decision HLT_mu8_e8 ID#3385806166 +Step1ElHypo.step1e20 2 0 DEBUG No Input decisions requested by active chains +Step1ElHypo.step1e20 2 0 DEBUG Configured to require chain HLT_e20 ID#4230506138 +Step1ElHypo 2 0 DEBUG Exiting with 1 decisions +Step1ElHypo 2 0 DEBUG Number of positive decisions for this input: 0 +Step1ComboMuElHypo 2 0 DEBUG Executing Step1ComboMuElHypo... +Step1ComboMuElHypo 2 0 DEBUG Running with 1 implicit Step1MuInputMaker_decisions for previous decisions of input 1 +Step1ComboMuElHypo 2 0 DEBUG Running with 1 implicit Step1ElInputMaker_decisions for previous decisions of input 2 +Step1ComboMuElHypo 2 0 DEBUG and with 1 reco1 inputs, and 1 reco2 inputs +Step1ComboMuElHypo 2 0 DEBUG Found 1 rois from input 1 +Step1ComboMuElHypo 2 0 DEBUG Found 1 rois from input 2 +Step1ComboMuElHypo 2 0 DEBUG Go to the tool with n.dec1=1 and n.dec2=1 +Step1ComboMuElHypo 2 0 DEBUG Number of previous decisions for input1: 3 +Step1ComboMuElHypo 2 0 DEBUG -- found decision HLT_2mu8 ID#1307018918 +Step1ComboMuElHypo 2 0 DEBUG -- found decision HLT_mu8 ID#3370546555 +Step1ComboMuElHypo 2 0 DEBUG -- found decision HLT_mu8_e8 ID#3385806166 +Step1ComboMuElHypo 2 0 DEBUG Found HLT_mu8_e8 ID#3385806166 to candidate 0 in input1 +Step1ComboMuElHypo 2 0 DEBUG Number of previous decisions for input2: 1 +Step1ComboMuElHypo 2 0 DEBUG -- found decision HLT_mu8_e8 ID#3385806166 +Step1ComboMuElHypo 2 0 DEBUG Found HLT_mu8_e8 ID#3385806166 to both candidates for 0 in input2 +Step1ComboMuElHypo 2 0 DEBUG Found good combined candidate +Step1ComboMuElHypo 2 0 DEBUG Prop1=9500 +Step1ComboMuElHypo 2 0 DEBUG Prop2=9000 +Step1ComboMuElHypo 2 0 DEBUG Adding HLT_mu8_e8 ID#3385806166 to both candaites +TriggerSummaryStep1 2 0 DEBUG Executing TriggerSummaryStep1... +TriggerSummaryStep1 2 0 DEBUG Found 1 Decisions for Step1MuHypo_Output_out +TriggerSummaryStep1 2 0 DEBUG Found 1 Decisions for Step1ElHypo_Output_out +TriggerSummaryStep1 2 0 DEBUG Found 1 Decisions for Step1ComboMuElHypo_Output1_out +TriggerSummaryStep1 2 0 DEBUG Found 1 Decisions for Step1ComboMuElHypo_Output2_out +TriggerSummaryStep1 2 0 DEBUG In summary 2 chains passed: +TriggerSummaryStep1 2 0 DEBUG +++ HLT_mu8 ID#3370546555 +TriggerSummaryStep1 2 0 DEBUG +++ HLT_mu8_e8 ID#3385806166 +FilterStep2_on_muStep1Seq 2 0 DEBUG Executing FilterStep2_on_muStep1Seq... +FilterStep2_on_muStep1Seq 2 0 DEBUG Running on 1 input keys +FilterStep2_on_muStep1Seq 2 0 DEBUG Checking inputHandle Step1MuHypo_Output_out with 1 elements +FilterStep2_on_muStep1Seq 2 0 DEBUG Input size 1 +FilterStep2_on_muStep1Seq 2 0 DEBUG Number of positive decisions for this input: 1 +FilterStep2_on_muStep1Seq 2 0 DEBUG -- Positive decision HLT_mu8 ID#3370546555 +FilterStep2_on_muStep1Seq 2 0 DEBUG Input satisfied at least one active chain +FilterStep2_on_muStep1Seq 2 0 DEBUG Output size 1 +FilterStep2_on_muStep1Seq 2 0 DEBUG Recording output key FilterStep2_on_muStep1Seq_from_Step1MuHypo_Output_out_out of size 1 at index 0 +FilterStep2_on_muStep1Seq 2 0 DEBUG Filter passed +FilterStep2_on_elStep1Seq 2 0 DEBUG Executing FilterStep2_on_elStep1Seq... +FilterStep2_on_elStep1Seq 2 0 DEBUG Running on 1 input keys +FilterStep2_on_elStep1Seq 2 0 DEBUG Checking inputHandle Step1ElHypo_Output_out with 1 elements +FilterStep2_on_elStep1Seq 2 0 DEBUG Input size 1 +FilterStep2_on_elStep1Seq 2 0 DEBUG Number of positive decisions for this input: 0 +FilterStep2_on_elStep1Seq 2 0 DEBUG No Input decisions requested by active chains +FilterStep2_on_elStep1Seq 2 0 DEBUG Output size 0 +FilterStep2_on_elStep1Seq 2 0 DEBUG Recording output key FilterStep2_on_elStep1Seq_from_Step1ElHypo_Output_out_out of size 0 at index 0 +FilterStep2_on_elStep1Seq 2 0 DEBUG Filter rejected +FilterStep2_on_combStep1Seq 2 0 DEBUG Executing FilterStep2_on_combStep1Seq... +FilterStep2_on_combStep1Seq 2 0 DEBUG Running on 2 input keys +FilterStep2_on_combStep1Seq 2 0 DEBUG Checking inputHandle Step1ComboMuElHypo_Output1_out with 1 elements +FilterStep2_on_combStep1Seq 2 0 DEBUG Input size 1 +FilterStep2_on_combStep1Seq 2 0 DEBUG Number of positive decisions for this input: 1 +FilterStep2_on_combStep1Seq 2 0 DEBUG -- Positive decision HLT_mu8_e8 ID#3385806166 +FilterStep2_on_combStep1Seq 2 0 DEBUG Input satisfied at least one active chain +FilterStep2_on_combStep1Seq 2 0 DEBUG Output size 1 +FilterStep2_on_combStep1Seq 2 0 DEBUG Recording output key FilterStep2_on_combStep1Seq_from_Step1ComboMuElHypo_Output1_out_out of size 1 at index 0 +FilterStep2_on_combStep1Seq 2 0 DEBUG Checking inputHandle Step1ComboMuElHypo_Output2_out with 1 elements +FilterStep2_on_combStep1Seq 2 0 DEBUG Input size 1 +FilterStep2_on_combStep1Seq 2 0 DEBUG Number of positive decisions for this input: 1 +FilterStep2_on_combStep1Seq 2 0 DEBUG -- Positive decision HLT_mu8_e8 ID#3385806166 +FilterStep2_on_combStep1Seq 2 0 DEBUG Input satisfied at least one active chain +FilterStep2_on_combStep1Seq 2 0 DEBUG Output size 1 +FilterStep2_on_combStep1Seq 2 0 DEBUG Recording output key FilterStep2_on_combStep1Seq_from_Step1ComboMuElHypo_Output2_out_out of size 1 at index 1 +FilterStep2_on_combStep1Seq 2 0 DEBUG Filter passed +Step2MuInputMaker 2 0 DEBUG Executing Step2MuInputMaker... +Step2MuInputMaker 2 0 DEBUG number of implicit ReadHandles is 2 +Step2MuInputMaker 2 0 DEBUG Got DecisionContainer from input FilterStep2_on_muStep1Seq_from_Step1MuHypo_Output_out_out with 1 elements +Step2MuInputMaker 2 0 DEBUG Found feature initialRoI: RoIid: 0 RoIword: 0 z: 0 (-225 - 225) eta: -1.5 (-1.6 - -1.4) phi: -0.1 (-0.2 - 1.49012e-09) +Step2MuInputMaker 2 0 DEBUG Make new decision +Step2MuInputMaker 2 0 DEBUG Copy decisions from input 0 with exist flag=0 to output 0x7f7c890e41a0 +Step2MuInputMaker 2 0 DEBUG Got DecisionContainer from input FilterStep2_on_combStep1Seq_from_Step1ComboMuElHypo_Output1_out_out with 1 elements +Step2MuInputMaker 2 0 DEBUG Found feature initialRoI: RoIid: 0 RoIword: 0 z: 0 (-225 - 225) eta: -1.5 (-1.6 - -1.4) phi: -0.1 (-0.2 - 1.49012e-09) +Step2MuInputMaker 2 0 DEBUG Copy decisions from input 0 with exist flag=1 to output 0x7f7c890e41a0 +Step2MuInputMaker 2 0 DEBUG Should find 1 obejcts and decisions +Step2MuInputMaker 2 0 DEBUG Produced 1 objects +Step2MuInputMaker 2 0 DEBUG Produced 1 decisions +Step2MuInputMaker 2 0 DEBUG Number of positive decisions for this input: 2 +Step2MuInputMaker 2 0 DEBUG --- found decision HLT_mu8 ID#3370546555 +Step2MuInputMaker 2 0 DEBUG --- found decision HLT_mu8_e8 ID#3385806166 +muMSRecAlg2 2 0 DEBUG Executing muMSRecAlg2... +muMSRecAlg2 2 0 DEBUG Input Step2MuInputMaker_Output_out has 1 elements, scanning it +muMSRecAlg2 2 0 DEBUG RoI RoIid: 0 RoIword: 0 z: 0 (-225 - 225) eta: -1.5 (-1.6 - -1.4) phi: -0.1 (-0.2 - 1.49012e-09) +muMSRecAlg2 2 0 DEBUG Reconstructed object +muMSRecAlg2 2 0 DEBUG eta : -1.7 +muMSRecAlg2 2 0 DEBUG phi : -0.2 +muMSRecAlg2 2 0 DEBUG pt : 9500 +muMSRecAlg2 2 0 DEBUG Reconstructed 1 objects +Step2MuHypo2 2 0 DEBUG Executing Step2MuHypo2... +Step2MuHypo2 2 0 DEBUG Running with 1 implicit ReadHandles for previous decisions +Step2MuHypo2 2 0 DEBUG and with 1 reco inputs +Step2MuHypo2.step2mu20 2 0 DEBUG Making new decisions Step2MuHypo2.step2mu20 +Step2MuHypo2.step2mu20 2 0 DEBUG Number of previous decisions for input 0= 2 +Step2MuHypo2.step2mu20 2 0 DEBUG -- found decision HLT_mu8 ID#3370546555 +Step2MuHypo2.step2mu20 2 0 DEBUG -- found decision HLT_mu8_e8 ID#3385806166 +Step2MuHypo2.step2mu20 2 0 DEBUG No Input decisions requested by active chains +Step2MuHypo2.step2mu20 2 0 DEBUG Configured to require chain HLT_mu20 ID#3964288416 +Step2MuHypo2.step2mu8 2 0 DEBUG Making new decisions Step2MuHypo2.step2mu8 +Step2MuHypo2.step2mu8 2 0 DEBUG Number of previous decisions for input 0= 2 +Step2MuHypo2.step2mu8 2 0 DEBUG -- found decision HLT_mu8 ID#3370546555 +Step2MuHypo2.step2mu8 2 0 DEBUG -- found decision HLT_mu8_e8 ID#3385806166 +Step2MuHypo2.step2mu8 2 0 DEBUG threshold 8000 passed by value: 9500 +Step2MuHypo2 2 0 DEBUG Exiting with 1 decisions +Step2MuHypo2 2 0 DEBUG Number of positive decisions for this input: 1 +Step2MuHypo2 2 0 DEBUG --- found new decision HLT_mu8 ID#3370546555 +Step2ElInputMaker 2 0 DEBUG Executing Step2ElInputMaker... +Step2ElInputMaker 2 0 DEBUG number of implicit ReadHandles is 2 +Step2ElInputMaker 2 0 DEBUG Got DecisionContainer from input FilterStep2_on_elStep1Seq_from_Step1ElHypo_Output_out_out with 0 elements +Step2ElInputMaker 2 0 DEBUG Got DecisionContainer from input FilterStep2_on_combStep1Seq_from_Step1ComboMuElHypo_Output2_out_out with 1 elements +Step2ElInputMaker 2 0 DEBUG Found feature initialRoI: RoIid: 0 RoIword: 0 z: 0 (-225 - 225) eta: -0.6 (-0.7 - -0.5) phi: 1.5 (1.4 - 1.6) +Step2ElInputMaker 2 0 DEBUG Make new decision +Step2ElInputMaker 2 0 DEBUG Copy decisions from input 0 with exist flag=0 to output 0x7f7c890e41a0 +Step2ElInputMaker 2 0 DEBUG Should find 1 obejcts and decisions +Step2ElInputMaker 2 0 DEBUG Produced 1 objects +Step2ElInputMaker 2 0 DEBUG Produced 1 decisions +Step2ElInputMaker 2 0 DEBUG Number of positive decisions for this input: 1 +Step2ElInputMaker 2 0 DEBUG --- found decision HLT_mu8_e8 ID#3385806166 +CaloClustering2 2 0 DEBUG Executing CaloClustering2... +CaloClustering2 2 0 DEBUG Input Step2ElInputMaker_Output_out has 1 elements, scanning it +CaloClustering2 2 0 DEBUG RoI RoIid: 0 RoIword: 0 z: 0 (-225 - 225) eta: -0.6 (-0.7 - -0.5) phi: 1.5 (1.4 - 1.6) +CaloClustering2 2 0 DEBUG Reconstructed object +CaloClustering2 2 0 DEBUG eta : -0.6 +CaloClustering2 2 0 DEBUG phi : 1.7 +CaloClustering2 2 0 DEBUG et : 9000 +CaloClustering2 2 0 DEBUG Reconstructed 1 objects +Step2ElHypo 2 0 DEBUG Executing Step2ElHypo... +Step2ElHypo 2 0 DEBUG Running with 1 implicit ReadHandles for previous decisions +Step2ElHypo 2 0 DEBUG and with 1 reco inputs +Step2ElHypo.step2e20 2 0 DEBUG Making new decisions Step2ElHypo.step2e20 +Step2ElHypo.step2e20 2 0 DEBUG Number of previous decisions for input 0= 1 +Step2ElHypo.step2e20 2 0 DEBUG -- found decision HLT_mu8_e8 ID#3385806166 +Step2ElHypo.step2e20 2 0 DEBUG No Input decisions requested by active chains +Step2ElHypo.step2e20 2 0 DEBUG Configured to require chain HLT_e20 ID#4230506138 +Step2ElHypo 2 0 DEBUG Exiting with 1 decisions +Step2ElHypo 2 0 DEBUG Number of positive decisions for this input: 0 +Step2ComboMuElHypo 2 0 DEBUG Executing Step2ComboMuElHypo... +Step2ComboMuElHypo 2 0 DEBUG Running with 1 implicit Step2MuInputMaker_decisions for previous decisions of input 1 +Step2ComboMuElHypo 2 0 DEBUG Running with 1 implicit Step2ElInputMaker_decisions for previous decisions of input 2 +Step2ComboMuElHypo 2 0 DEBUG and with 1 reco1 inputs, and 1 reco2 inputs +Step2ComboMuElHypo 2 0 DEBUG Found 1 rois from input 1 +Step2ComboMuElHypo 2 0 DEBUG Found 1 rois from input 2 +Step2ComboMuElHypo 2 0 DEBUG Go to the tool with n.dec1=1 and n.dec2=1 +Step2ComboMuElHypo 2 0 DEBUG Number of previous decisions for input1: 2 +Step2ComboMuElHypo 2 0 DEBUG -- found decision HLT_mu8 ID#3370546555 +Step2ComboMuElHypo 2 0 DEBUG -- found decision HLT_mu8_e8 ID#3385806166 +Step2ComboMuElHypo 2 0 DEBUG Found HLT_mu8_e8 ID#3385806166 to candidate 0 in input1 +Step2ComboMuElHypo 2 0 DEBUG Number of previous decisions for input2: 1 +Step2ComboMuElHypo 2 0 DEBUG -- found decision HLT_mu8_e8 ID#3385806166 +Step2ComboMuElHypo 2 0 DEBUG Found HLT_mu8_e8 ID#3385806166 to both candidates for 0 in input2 +Step2ComboMuElHypo 2 0 DEBUG Found good combined candidate +Step2ComboMuElHypo 2 0 DEBUG Prop1=9500 +Step2ComboMuElHypo 2 0 DEBUG Prop2=9000 +Step2ComboMuElHypo 2 0 DEBUG Adding HLT_mu8_e8 ID#3385806166 to both candaites +TriggerSummaryStep2 2 0 DEBUG Executing TriggerSummaryStep2... +TriggerSummaryStep2 2 0 DEBUG Found 1 Decisions for Step2MuHypo2_Output_out +TriggerSummaryStep2 2 0 DEBUG Found 1 Decisions for Step2ElHypo_Output_out +TriggerSummaryStep2 2 0 DEBUG Found 1 Decisions for Step2ComboMuElHypo_Output1_out +TriggerSummaryStep2 2 0 DEBUG Found 1 Decisions for Step2ComboMuElHypo_Output2_out +TriggerSummaryStep2 2 0 DEBUG In summary 2 chains passed: +TriggerSummaryStep2 2 0 DEBUG +++ HLT_mu8 ID#3370546555 +TriggerSummaryStep2 2 0 DEBUG +++ HLT_mu8_e8 ID#3385806166 +AthenaHiveEventLoopMgr INFO ===>>> done processing event #2, run #1 on slot 0, 3 events processed so far <<<=== +AthenaHiveEventLoopMgr INFO ---> Loop Finished (seconds): 0.0208018 +ApplicationMgr INFO Application Manager Stopped successfully +IncidentProcAlg1 INFO Finalize +SGInputLoader INFO Finalizing SGInputLoader... +Step1MuHypo INFO Finalizing Step1MuHypo... +Step1MuInputMaker INFO Finalizing Step1MuInputMaker... +muMSRecAlg INFO Finalizing muMSRecAlg... +Step1ElInputMaker INFO Finalizing Step1ElInputMaker... +Step1ElHypo INFO Finalizing Step1ElHypo... +CaloClustering INFO Finalizing CaloClustering... +Step1ComboMuElHypo INFO Finalizing Step1ComboMuElHypo... +muMSRecAlg2 INFO Finalizing muMSRecAlg2... +Step2MuHypo2 INFO Finalizing Step2MuHypo2... +Step2MuInputMaker INFO Finalizing Step2MuInputMaker... +CaloClustering2 INFO Finalizing CaloClustering2... +Step2ElInputMaker INFO Finalizing Step2ElInputMaker... +Step2ElHypo INFO Finalizing Step2ElHypo... +Step2ComboMuElHypo INFO Finalizing Step2ComboMuElHypo... +IncidentProcAlg2 INFO Finalize +AvalancheSchedulerSvc INFO Joining Scheduler thread +AvalancheSchedulerSvc 2 0 INFO Terminating thread-pool resources +EventDataSvc INFO Finalizing EventDataSvc - package version StoreGate-00-00-00 +AthDictLoaderSvc INFO in finalize... +ToolSvc INFO Removing all tools created by ToolSvc +Step2MuHypo2.step2mu8 INFO Finalizing Step2MuHypo2.step2mu8... +Step2MuHypo2.step2mu20 INFO Finalizing Step2MuHypo2.step2mu20... +Step1MuHypo.step1mu8 INFO Finalizing Step1MuHypo.step1mu8... +Step1MuHypo.step1mu20 INFO Finalizing Step1MuHypo.step1mu20... +Step2ElHypo.step2e20 INFO Finalizing Step2ElHypo.step2e20... +Step1ElHypo.step1e20 INFO Finalizing Step1ElHypo.step1e20... +*****Chrono***** INFO **************************************************************************************************** +*****Chrono***** INFO The Final CPU consumption ( Chrono ) Table (ordered) +*****Chrono***** INFO **************************************************************************************************** +ChronoStatSvc INFO Time User : Tot= 0.59 [s] #= 1 +*****Chrono***** INFO **************************************************************************************************** +ChronoStatSvc.finalize() INFO Service finalized successfully +ApplicationMgr INFO Application Manager Finalized successfully +ApplicationMgr INFO Application Manager Terminated successfully +Py:Athena INFO leaving with code 0: "successful run" diff --git a/Trigger/TrigValidation/TrigUpgradeTest/share/EmuStepProcessingTest.py b/Trigger/TrigValidation/TrigUpgradeTest/share/EmuStepProcessingTest.py index 90b8d890bdf..8110416b525 100644 --- a/Trigger/TrigValidation/TrigUpgradeTest/share/EmuStepProcessingTest.py +++ b/Trigger/TrigValidation/TrigUpgradeTest/share/EmuStepProcessingTest.py @@ -155,6 +155,7 @@ CombChains =[ group_of_chains = MuChains + ElChains + CombChains +#+ CombChains #+ ElChains + CombChains @@ -170,16 +171,18 @@ topSequence += TopHLTRootSeq TopHLTRootSeq += L1UnpackingSeq # add the HLT steps Node -HLTAllStepsSeq = seqAND("HLTAllStepsSeq") +HLTAllStepsSeq = seqAND("EmuTest_HLTAllStepsSequence") TopHLTRootSeq += HLTAllStepsSeq +# make CF tree + decisionTree_From_Chains(HLTAllStepsSeq, group_of_chains, NSTEPS=nsteps) -#from AthenaCommon.AlgSequence import dumpMasterSequence -#dumpMasterSequence() -theApp.EvtMax = 3 +#from AthenaCommon.AlgSequence import dumpMasterSequence +#dumpMasterSequence() +theApp.EvtMax = 3 diff --git a/Trigger/TrigValidation/TrigUpgradeTest/share/HLTSignatureConfig.py b/Trigger/TrigValidation/TrigUpgradeTest/share/HLTSignatureConfig.py index 35a9f9c872f..5440f077c80 100644 --- a/Trigger/TrigValidation/TrigUpgradeTest/share/HLTSignatureConfig.py +++ b/Trigger/TrigValidation/TrigUpgradeTest/share/HLTSignatureConfig.py @@ -11,6 +11,7 @@ def TestHypoTool(name, prop, threshold_value): from TrigUpgradeTest.TrigUpgradeTestConf import HLTTest__TestInputMaker def InputMakerAlg(name): + # return HLTTest__TestInputMaker(name, OutputLevel = DEBUG, LinkName=linkname) return HLTTest__TestInputMaker(name, OutputLevel = DEBUG, LinkName="initialRoI") @@ -43,7 +44,7 @@ def step2mu8(): muIM= InputMakerAlg(name="Step1MuInputMaker") -step1_mu_inputMaker = AlgNode(Alg=muIM, inputProp='Inputs', outputProp='Output') +step1_mu_inputMaker = AlgNode(Alg=muIM, inputProp='InputDecisions', outputProp='Output') muAlg = muMSRecAlg(name="muMSRecAlg", FileName="msmu.dat") step1_mu_recoAlg = AlgNode( Alg=muAlg,inputProp='Input', outputProp='Output') @@ -51,21 +52,21 @@ step1_mu_recoAlg = AlgNode( Alg=muAlg,inputProp='Input', outputProp='Output') muHypo = MuHypo(name="Step1MuHypo") step1_mu_HypoAlg = HypoAlgNode( Alg=muHypo,inputProp='Input', outputProp='Output') -nodeSequence_mu = NodeSequence("muNodeSeq1", Algs=[step1_mu_inputMaker, step1_mu_recoAlg], Hypo=step1_mu_HypoAlg, Seed="L1MU") +nodeSequence_mu = NodeSequence("muNodeSeq1", Maker=step1_mu_inputMaker, Algs=[step1_mu_recoAlg], Hypo=step1_mu_HypoAlg, Seed="L1MU") def muStep1Sequence(): return MenuSequence("muStep1Seq", nodeSeqList=[nodeSequence_mu]) # mu step2 muIM2= InputMakerAlg(name="Step2MuInputMaker") -step2_mu_inputMaker = AlgNode(Alg=muIM2, inputProp='Inputs', outputProp='Output') +step2_mu_inputMaker = AlgNode(Alg=muIM2, inputProp='InputDecisions', outputProp='Output') muAlg2 = muMSRecAlg(name="muMSRecAlg2", FileName="msmu.dat") step2_mu_recoAlg = AlgNode( Alg=muAlg2,inputProp='Input', outputProp='Output') muHypo2 = MuHypo(name="Step2MuHypo2") step2_mu_HypoAlg = HypoAlgNode( Alg=muHypo2,inputProp='Input', outputProp='Output') -nodeSequence2_mu = NodeSequence("muNodeSeq2", Algs=[step2_mu_inputMaker, step2_mu_recoAlg], Hypo=step2_mu_HypoAlg, Seed="") +nodeSequence2_mu = NodeSequence("muNodeSeq2", Maker=step2_mu_inputMaker, Algs=[step2_mu_recoAlg], Hypo=step2_mu_HypoAlg, Seed="L1MU") def muStep2Sequence(): return MenuSequence("muStep2Seq", nodeSeqList=[nodeSequence2_mu]) @@ -94,7 +95,7 @@ def step2e8(): return TestHypoTool("step2e8", "et",8) elIM= InputMakerAlg(name="Step1ElInputMaker") -step1_el_inputMaker = AlgNode(Alg=elIM, inputProp='Inputs', outputProp='Output') +step1_el_inputMaker = AlgNode(Alg=elIM, inputProp='InputDecisions', outputProp='Output') elAlg = CaloClustering(name="CaloClustering", FileName="emclusters.dat") step1_el_recoAlg = AlgNode( Alg=elAlg,inputProp='Input', outputProp='Output') @@ -102,13 +103,13 @@ step1_el_recoAlg = AlgNode( Alg=elAlg,inputProp='Input', outputProp='Output') elHypo = ElGamHypo(name="Step1ElHypo") step1_el_HypoAlg = HypoAlgNode( Alg=elHypo,inputProp='Input', outputProp='Output') -nodeSequence_el = NodeSequence("elNodeSeq1", Algs=[step1_el_inputMaker, step1_el_recoAlg], Hypo=step1_el_HypoAlg, Seed="L1EM") +nodeSequence_el = NodeSequence("elNodeSeq1", Maker=step1_el_inputMaker, Algs=[step1_el_recoAlg], Hypo=step1_el_HypoAlg, Seed="L1EM") def elStep1Sequence(): return MenuSequence("elStep1Seq", nodeSeqList=[nodeSequence_el]) #step2 elIM2= InputMakerAlg(name="Step2ElInputMaker") -step2_el_inputMaker = AlgNode(Alg=elIM2, inputProp='Inputs', outputProp='Output') +step2_el_inputMaker = AlgNode(Alg=elIM2, inputProp='InputDecisions', outputProp='Output') elAlg2 = CaloClustering(name="CaloClustering2", FileName="emclusters.dat") step2_el_recoAlg = AlgNode( Alg=elAlg2,inputProp='Input', outputProp='Output') @@ -116,7 +117,7 @@ step2_el_recoAlg = AlgNode( Alg=elAlg2,inputProp='Input', outputProp='Output') elHypo2 = ElGamHypo(name="Step2ElHypo") step2_el_HypoAlg = HypoAlgNode( Alg=elHypo2,inputProp='Input', outputProp='Output') -nodeSequence2_el = NodeSequence("elNodeSeq2", Algs=[step2_el_inputMaker, step2_el_recoAlg], Hypo=step2_el_HypoAlg, Seed="") +nodeSequence2_el = NodeSequence("elNodeSeq2", Maker=step2_el_inputMaker, Algs=[ step2_el_recoAlg], Hypo=step2_el_HypoAlg, Seed="L1EM") def elStep2Sequence(): return MenuSequence("elStep2Seq", nodeSeqList=[nodeSequence2_el]) @@ -137,8 +138,8 @@ comboAlg = ComboMuEHypo("Step1ComboMuElHypo") step1_comb_HypoAlgMu = HypoAlgNode( Alg=comboAlg,inputProp='Input1', outputProp='Output1') step1_comb_HypoAlgEl = HypoAlgNode( Alg=comboAlg,inputProp='Input2', outputProp='Output2') -nodeSequence_muComb = NodeSequence("CombmuNodeSeq1", Algs=[step1_mu_inputMaker, step1_mu_recoAlg], Hypo=step1_comb_HypoAlgMu, Seed="L1MU") -nodeSequence_elComb = NodeSequence("CombelNodeSeq1", Algs=[step1_el_inputMaker, step1_el_recoAlg], Hypo=step1_comb_HypoAlgEl, Seed="L1EM") +nodeSequence_muComb = NodeSequence("CombmuNodeSeq1", Maker=step1_mu_inputMaker, Algs=[step1_mu_recoAlg], Hypo=step1_comb_HypoAlgMu, Seed="L1MU") +nodeSequence_elComb = NodeSequence("CombelNodeSeq1", Maker=step1_el_inputMaker, Algs=[step1_el_recoAlg], Hypo=step1_comb_HypoAlgEl, Seed="L1EM") def combStep1Sequence(): @@ -150,8 +151,8 @@ comboAlg2 = ComboMuEHypo("Step2ComboMuElHypo") step2_comb_HypoAlgMu = HypoAlgNode( Alg=comboAlg2,inputProp='Input1', outputProp='Output1') step2_comb_HypoAlgEl = HypoAlgNode( Alg=comboAlg2,inputProp='Input2', outputProp='Output2') -nodeSequence2_muComb = NodeSequence("CombmuNodeSeq2", Algs=[step2_mu_inputMaker, step2_mu_recoAlg], Hypo=step2_comb_HypoAlgMu, Seed="") -nodeSequence2_elComb = NodeSequence("CombelNodeSeq2", Algs=[step2_el_inputMaker, step2_el_recoAlg], Hypo=step2_comb_HypoAlgEl, Seed="") +nodeSequence2_muComb = NodeSequence("CombmuNodeSeq2", Maker=step2_mu_inputMaker, Algs=[step2_mu_recoAlg], Hypo=step2_comb_HypoAlgMu, Seed="L1MU") +nodeSequence2_elComb = NodeSequence("CombelNodeSeq2", Maker=step2_el_inputMaker, Algs=[step2_el_recoAlg], Hypo=step2_comb_HypoAlgEl, Seed="L1EM") def combStep2Sequence(): diff --git a/Trigger/TrigValidation/TrigUpgradeTest/share/egamma.menu.py b/Trigger/TrigValidation/TrigUpgradeTest/share/egamma.menu.py index efa497d4b8c..38b0168eba5 100644 --- a/Trigger/TrigValidation/TrigUpgradeTest/share/egamma.menu.py +++ b/Trigger/TrigValidation/TrigUpgradeTest/share/egamma.menu.py @@ -4,54 +4,48 @@ include("TrigUpgradeTest/testHLT_MT.py") -#workaround to prevent online trigger folders to be enabled -from InDetTrigRecExample.InDetTrigFlags import InDetTrigFlags -InDetTrigFlags.useConditionsClasses.set_Value_and_Lock(False) +## #workaround to prevent online trigger folders to be enabled +## from InDetTrigRecExample.InDetTrigFlags import InDetTrigFlags +## InDetTrigFlags.useConditionsClasses.set_Value_and_Lock(False) -from InDetRecExample.InDetJobProperties import InDetFlags -InDetFlags.doCaloSeededBrem = False +## from InDetRecExample.InDetJobProperties import InDetFlags +## InDetFlags.doCaloSeededBrem = False -from InDetRecExample.InDetJobProperties import InDetFlags -InDetFlags.InDet25nsec = True -InDetFlags.doPrimaryVertex3DFinding = False -InDetFlags.doPrintConfigurables = False -InDetFlags.doResolveBackTracks = True -InDetFlags.doSiSPSeededTrackFinder = True -InDetFlags.doTRTPhaseCalculation = True -InDetFlags.doTRTSeededTrackFinder = True -InDetFlags.doTruth = False -InDetFlags.init() +## from InDetRecExample.InDetJobProperties import InDetFlags +## InDetFlags.InDet25nsec = True +## InDetFlags.doPrimaryVertex3DFinding = False +## InDetFlags.doPrintConfigurables = False +## InDetFlags.doResolveBackTracks = True +## InDetFlags.doSiSPSeededTrackFinder = True +## InDetFlags.doTRTPhaseCalculation = True +## InDetFlags.doTRTSeededTrackFinder = True +## InDetFlags.doTruth = False +## InDetFlags.init() + +## # PixelLorentzAngleSvc and SCTLorentzAngleSvc +## include("InDetRecExample/InDetRecConditionsAccess.py") +## from InDetRecExample.InDetKeys import InDetKeys -# PixelLorentzAngleSvc and SCTLorentzAngleSvc -include("InDetRecExample/InDetRecConditionsAccess.py") from AthenaCommon.AlgSequence import AlgSequence topSequence = AlgSequence() - -from InDetRecExample.InDetKeys import InDetKeys - # provide a minimal menu information if globalflags.InputFormat.is_bytestream(): topSequence.L1DecoderTest.ctpUnpacker.OutputLevel=DEBUG topSequence.L1DecoderTest.roiUnpackers[0].OutputLevel=DEBUG -testChains = ["HLT_e3_etcut", "HLT_e5_etcut", "HLT_e7_etcut", "HLT_2e3_etcut", "HLT_e3e5_etcut"] -from TrigT2CaloEgamma.TrigT2CaloEgammaConfig import T2CaloEgamma_FastAlgo -theFastCaloAlgo=T2CaloEgamma_FastAlgo("FastCaloAlgo" ) -theFastCaloAlgo.OutputLevel=VERBOSE -theFastCaloAlgo.ClustersName="L2CaloClusters" -svcMgr.ToolSvc.TrigDataAccess.ApplyOffsetCorrection=False - -# start here new part -############################################################# - from TrigUpgradeTest.HLTCFConfig import * from TrigUpgradeTest.MenuComponents import * +from ViewAlgs.ViewAlgsConf import TestEventViewCreatorAlgorithm +from AthenaCommon.AppMgr import ServiceMgr as svcMgr +################################# +# first step: calo +################################# def InputMakerAlg(name): from TrigUpgradeTest.TrigUpgradeTestConf import HLTTest__TestInputMaker return HLTTest__TestInputMaker(name, OutputLevel = DEBUG, LinkName="initialRoI") @@ -65,21 +59,14 @@ def FastCaloAlg(name): svcMgr.ToolSvc.TrigDataAccess.ApplyOffsetCorrection=False return theFastCaloAlgo -def fastCaloViewsMaker(name): - from ViewAlgs.ViewAlgsConf import EventViewCreatorAlgorithm - fastCaloViewsMaker = EventViewCreatorAlgorithm(name, OutputLevel=DEBUG) - fastCaloViewsMaker.ViewFallThrough = True -# fastCaloViewsMaker.Decisions = "FilteredEMRoIDecisions" # from EMRoIsUnpackingTool - fastCaloViewsMaker.RoIsLink = "initialRoI" # -||- - fastCaloViewsMaker.InViewRoIs = "EMCaloRoIs" # contract with the fastCalo - fastCaloViewsMaker.Views = "EMCaloViews" - # fastCaloViewsMaker.ViewNodeName = "fastCaloInViewAlgs" - #add algo - theFastCaloAlgo = FastCaloAlg(name="FastCaloAlgo") - fastCaloInViewAlgs = seqAND("fastCaloInViewAlgs", [ theFastCaloAlgo ]) - theFastCaloAlgo.RoIs = fastCaloViewsMaker.InViewRoIs - - +def FastCaloViewsMaker(name): + testfastCaloViewsMaker = TestEventViewCreatorAlgorithm(name, OutputLevel=DEBUG) + testfastCaloViewsMaker.ViewFallThrough = True + testfastCaloViewsMaker.RoIsLink = "initialRoI" # -||- + testfastCaloViewsMaker.InViewRoIs = "EMCaloRoIs" + testfastCaloViewsMaker.Views = "EMCaloViews" + testfastCaloViewsMaker.ViewNodeName = "fastCaloInViewSubNode" + return testfastCaloViewsMaker def FastCaloHypo(name): from TrigEgammaHypo.TrigEgammaHypoConf import TrigL2CaloHypoAlg @@ -87,6 +74,11 @@ def FastCaloHypo(name): theFastCaloHypo.OutputLevel = DEBUG return theFastCaloHypo +def TestFastCaloHypo(name): + from TrigEgammaHypo.TrigEgammaHypoConf import TestTrigL2CaloHypoAlg + theFastCaloHypo = TestTrigL2CaloHypoAlg(name) + theFastCaloHypo.OutputLevel = DEBUG + return theFastCaloHypo def TrigL2CaloHypoTool(name): from TrigEgammaHypo.TrigL2CaloHypoTool import TrigL2CaloHypoToolFromName @@ -94,64 +86,478 @@ def TrigL2CaloHypoTool(name): hypotool.OutputLevel = DEBUG return hypotool + +def TestTrigL2CaloHypoTool(name): + #from TrigEgammaHypo.TrigEgammaHypoConf import TestTrigL2CaloHypoToolInc + #hypotool= TestTrigL2CaloHypoToolInc(name) + from TrigEgammaHypo.TestTrigL2CaloHypoTool import TestTrigL2CaloHypoToolFromName + hypotool= TestTrigL2CaloHypoToolFromName(name) + hypotool.OutputLevel = DEBUG + return hypotool + def e3_etcut(): - return TrigL2CaloHypoTool("HLT_e3_etcut") + return TestTrigL2CaloHypoTool("HLT_e3_etcut") +# return TrigL2CaloHypoTool("HLT_e3_etcut") def e5_etcut(): - return TrigL2CaloHypoTool("HLT_e5_etcut") - + return TestTrigL2CaloHypoTool("HLT_e5_etcut") +# return TrigL2CaloHypoTool("HLT_e5_etcut") -##################### -# Make the sequence +def e7_etcut(): + return TestTrigL2CaloHypoTool("HLT_e7_etcut") +#def 2e3_etcut(): + #TrigL2CaloHypoToolMult +# return TestTrigL2CaloHypoTool("HLT_2e3_etcut") -fastCaloViewsMaker = fastCaloViewsMaker(name="fastCaloViewsMaker") -theFastCaloHypo = FastCaloHypo(name="L2CaloHypo") +# Make the calo sequence +######################## +theFastCaloViewsMaker = FastCaloViewsMaker(name="fastCaloViewsMaker") +theFastCaloAlgo = FastCaloAlg(name="FastCaloAlgo") +fastCaloInViewSequence = theFastCaloViewsMaker.ViewNodeName +theFastCaloHypo = TestFastCaloHypo(name="L2CaloHypo") # Nodes & sequence -fastCaloViewsMakerNode = AlgNode( Alg=fastCaloViewsMaker,inputProp='Decisions', outputProp='Views') -fastCaloHypoNode = HypoAlgNode( Alg=theFastCaloHypo,inputProp='Views', outputProp='Decisions') -fastCalo_NodeSequence = NodeSequence("fastCalo_NodeSequence", Algs=[fastCaloViewsMaker], Hypo=fastCaloHypoNode, Seed=EMRoIDecisions) +fastCaloViewsMakerNode = AlgNode( Alg=theFastCaloViewsMaker, inputProp='InputDecisions', outputProp='InViewRoIs') +fastCaloAlgoNode = AlgNode( Alg=theFastCaloAlgo, inputProp='RoIs', outputProp='ClustersName') +fastCaloHypoNode = HypoAlgNode( Alg=theFastCaloHypo, inputProp='CaloClusters', outputProp='Decisions') -#remaining connecitons to the Hypo -theFastCaloHypo.RoIs = l2CaloViewsMaker.InViewRoIs -theFastCaloHypo.CaloClusters = theFastCaloAlgo.ClustersName -theFastCaloHypo.L1Decisions = EMRoIDecisions +fastCaloViewVerify = CfgMgr.AthViews__ViewDataVerifier("FastCaloViewDataVerifier",\ + DataObjects = [('TrigRoiDescriptorCollection' , 'StoreGateSvc+'+fastCaloViewsMakerNode.getOutput())]) -#final sequence -fastCaloSequence = MenuSequence("egammaCaloStep", nodeSeqList=[fastCalo_NodeSequence]) -print fastCaloSequence +caloDecisionsDumper = DumpDecisions("caloDecisionsDumper", OutputLevel=DEBUG, Decisions = theFastCaloHypo.Decisions ) + + + +fastCalo_NodeSequence = ViewNodeSequence("fastCalo_NodeSequence", + Maker=fastCaloViewsMakerNode, + Algs=[fastCaloAlgoNode], + Hypo=fastCaloHypoNode, + OtherNodes=[AlgNode(Alg=fastCaloViewVerify), AlgNode(Alg=caloDecisionsDumper)], + Seed="EMRoIDecisions") +#and then menu sequence +fastCaloSequence = MenuSequence("egammaCaloStep", nodeSeqList=[fastCalo_NodeSequence]) +#print fastCaloSequence +#print theFastCaloHypo + + ######################################### -# here tracking..... +# second step: tracking..... ######################################### +#workaround to prevent online trigger folders to be enabled +from InDetTrigRecExample.InDetTrigFlags import InDetTrigFlags +InDetTrigFlags.useConditionsClasses.set_Value_and_Lock(False) +from InDetRecExample.InDetJobProperties import InDetFlags +InDetFlags.doCaloSeededBrem = False + + +from InDetRecExample.InDetJobProperties import InDetFlags +InDetFlags.InDet25nsec = True +InDetFlags.doPrimaryVertex3DFinding = False +InDetFlags.doPrintConfigurables = False +InDetFlags.doResolveBackTracks = True +InDetFlags.doSiSPSeededTrackFinder = True +InDetFlags.doTRTPhaseCalculation = True +InDetFlags.doTRTSeededTrackFinder = True +InDetFlags.doTruth = False +InDetFlags.init() + +# PixelLorentzAngleSvc and SCTLorentzAngleSvc +include("InDetRecExample/InDetRecConditionsAccess.py") +from InDetRecExample.InDetKeys import InDetKeys + + +def InDetCacheCreatorTrigViews(name="InDetCacheCreatorTrigViews"): + from InDetPrepRawDataFormation.InDetPrepRawDataFormationConf import InDet__CacheCreator + InDetCacheCreatorTrigViews = InDet__CacheCreator(name = name, + Pixel_ClusterKey = "PixelTrigClustersCache", + SCT_ClusterKey = "SCT_ClustersCache", + SpacePointCachePix = "PixelSpacePointCache", + SpacePointCacheSCT = "SctSpacePointCache", + SCTRDOCacheKey = "SctRDOCache", + PixRDOCacheKey = "PixRDOCache", + OutputLevel=DEBUG) + return InDetCacheCreatorTrigViews + +#Pixel +def InDetPixelRawDataProvider(): + from PixelRawDataByteStreamCnv.PixelRawDataByteStreamCnvConf import PixelRodDecoder + InDetPixelRodDecoder = PixelRodDecoder(name = "InDetPixelRodDecoder") + svcMgr.ToolSvc += InDetPixelRodDecoder + + from PixelRawDataByteStreamCnv.PixelRawDataByteStreamCnvConf import PixelRawDataProviderTool + InDetPixelRawDataProviderTool = PixelRawDataProviderTool(name = "InDetPixelRawDataProviderTool", + Decoder = InDetPixelRodDecoder) + svcMgr.ToolSvc += InDetPixelRawDataProviderTool + if (InDetFlags.doPrintConfigurables()): + print InDetPixelRawDataProviderTool + + # load the PixelRawDataProvider + from PixelRawDataByteStreamCnv.PixelRawDataByteStreamCnvConf import PixelRawDataProvider + InDetPixelRawDataProvider = PixelRawDataProvider(name = "InDetPixelRawDataProvider", + RDOKey = InDetKeys.PixelRDOs(), + ProviderTool = InDetPixelRawDataProviderTool, +# RDOCacheKey = InDetCacheCreatorTrigViews.PixRDOCacheKey, + isRoI_Seeded = True, + OutputLevel = INFO ) + return InDetPixelRawDataProvider + +#SCT +def InDetSCTRawDataProvider(): + from SCT_RawDataByteStreamCnv.SCT_RawDataByteStreamCnvConf import SCT_RodDecoder + InDetSCTRodDecoder = SCT_RodDecoder(name = "InDetSCTRodDecoder", + TriggerMode = False) + svcMgr.ToolSvc += InDetSCTRodDecoder + + from SCT_RawDataByteStreamCnv.SCT_RawDataByteStreamCnvConf import SCTRawDataProviderTool + InDetSCTRawDataProviderTool = SCTRawDataProviderTool(name = "InDetSCTRawDataProviderTool", + Decoder = InDetSCTRodDecoder) + svcMgr.ToolSvc += InDetSCTRawDataProviderTool + if (InDetFlags.doPrintConfigurables()): + print InDetSCTRawDataProviderTool + + # load the SCTRawDataProvider + from SCT_RawDataByteStreamCnv.SCT_RawDataByteStreamCnvConf import SCTRawDataProvider + InDetSCTRawDataProvider = SCTRawDataProvider(name = "InDetSCTRawDataProvider", + RDOKey = InDetKeys.SCT_RDOs(), + ProviderTool = InDetSCTRawDataProviderTool, + isRoI_Seeded = True ) + +# InDetSCTRawDataProvider.RDOCacheKey = InDetCacheCreatorTrigViews.SCTRDOCacheKey + return InDetSCTRawDataProvider + +#TRT +def InDetTRTRawDataProvider(): + from TRT_ConditionsServices.TRT_ConditionsServicesConf import TRT_CalDbSvc + from AthenaCommon.AppMgr import ServiceMgr as svcMgr + InDetTRTCalDbSvc = TRT_CalDbSvc() + svcMgr += InDetTRTCalDbSvc + + from TRT_ConditionsServices.TRT_ConditionsServicesConf import TRT_StrawStatusSummarySvc + InDetTRTStrawStatusSummarySvc = TRT_StrawStatusSummarySvc(name = "InDetTRTStrawStatusSummarySvc") + svcMgr += InDetTRTStrawStatusSummarySvc + + from TRT_RawDataByteStreamCnv.TRT_RawDataByteStreamCnvConf import TRT_RodDecoder + InDetTRTRodDecoder = TRT_RodDecoder(name = "InDetTRTRodDecoder", + LoadCompressTableDB = True)#(globalflags.DataSource() != 'geant4')) + svcMgr.ToolSvc += InDetTRTRodDecoder + + from TRT_RawDataByteStreamCnv.TRT_RawDataByteStreamCnvConf import TRTRawDataProviderTool + InDetTRTRawDataProviderTool = TRTRawDataProviderTool(name = "InDetTRTRawDataProviderTool", + Decoder = InDetTRTRodDecoder) + svcMgr.ToolSvc += InDetTRTRawDataProviderTool + + + # load the TRTRawDataProvider + from TRT_RawDataByteStreamCnv.TRT_RawDataByteStreamCnvConf import TRTRawDataProvider + InDetTRTRawDataProvider = TRTRawDataProvider(name = "InDetTRTRawDataProvider", + RDOKey = "TRT_RDOs", + ProviderTool = InDetTRTRawDataProviderTool, + isRoI_Seeded = True ) + + return InDetTRTRawDataProvider + + +#Pixel clusterisation +from SiClusterizationTool.SiClusterizationToolConf import InDet__ClusterMakerTool +InDetClusterMakerTool = InDet__ClusterMakerTool(name = "InDetClusterMakerTool", + PixelCalibSvc = None, + PixelOfflineCalibSvc = None, + UsePixelCalibCondDB = False) +svcMgr.ToolSvc += InDetClusterMakerTool + + +def InDetPixelClusterization(): + from SiClusterizationTool.SiClusterizationToolConf import InDet__MergedPixelsTool + InDetMergedPixelsTool = InDet__MergedPixelsTool(name = "InDetMergedPixelsTool", + globalPosAlg = InDetClusterMakerTool, + MinimalSplitSize = 0, + MaximalSplitSize = 49, + MinimalSplitProbability = 0, + DoIBLSplitting = True, + SplitClusterAmbiguityMap= InDetKeys.SplitClusterAmbiguityMap()) + svcMgr.ToolSvc += InDetMergedPixelsTool + + from SiClusterizationTool.SiClusterizationToolConf import InDet__PixelGangedAmbiguitiesFinder + InDetPixelGangedAmbiguitiesFinder = InDet__PixelGangedAmbiguitiesFinder(name = "InDetPixelGangedAmbiguitiesFinder") + svcMgr.ToolSvc += InDetPixelGangedAmbiguitiesFinder + + from InDetPrepRawDataFormation.InDetPrepRawDataFormationConf import InDet__PixelClusterization + InDetPixelClusterization = InDet__PixelClusterization(name = "InDetPixelClusterization", + clusteringTool = InDetMergedPixelsTool, + gangedAmbiguitiesFinder = InDetPixelGangedAmbiguitiesFinder, + DetectorManagerName = InDetKeys.PixelManager(), + DataObjectName = InDetKeys.PixelRDOs(), + ClustersName = "PixelTrigClusters", + isRoI_Seeded = True) + +# InDetPixelClusterization.ClusterContainerCacheKey = InDetCacheCreatorTrigViews.Pixel_ClusterKey + return InDetPixelClusterization + + +def InDetSCT_Clusterization(): + # + # --- SCT_ClusteringTool (public) + # + from SiClusterizationTool.SiClusterizationToolConf import InDet__SCT_ClusteringTool + InDetSCT_ClusteringTool = InDet__SCT_ClusteringTool(name = "InDetSCT_ClusteringTool", + globalPosAlg = InDetClusterMakerTool, + conditionsService = InDetSCT_ConditionsSummarySvc) + # + # --- SCT_Clusterization algorithm + # + from InDetPrepRawDataFormation.InDetPrepRawDataFormationConf import InDet__SCT_Clusterization + InDetSCT_Clusterization = InDet__SCT_Clusterization(name = "InDetSCT_Clusterization", + clusteringTool = InDetSCT_ClusteringTool, + # ChannelStatus = InDetSCT_ChannelStatusAlg, + DetectorManagerName = InDetKeys.SCT_Manager(), + DataObjectName = InDetKeys.SCT_RDOs(), + ClustersName = "SCT_TrigClusters", + conditionsService = InDetSCT_ConditionsSummarySvc, + # FlaggedConditionService = InDetSCT_FlaggedConditionSvc, + isRoI_Seeded = True ) + +# InDetSCT_Clusterization.ClusterContainerCacheKey = InDetCacheCreatorTrigViews.SCT_ClusterKey + return InDetSCT_Clusterization + + +def InDetSiTrackerSpacePointFinder(): + #Space points and FTF + + from SiSpacePointTool.SiSpacePointToolConf import InDet__SiSpacePointMakerTool + InDetSiSpacePointMakerTool = InDet__SiSpacePointMakerTool(name = "InDetSiSpacePointMakerTool") + svcMgr.ToolSvc += InDetSiSpacePointMakerTool + + from SiSpacePointFormation.SiSpacePointFormationConf import InDet__SiTrackerSpacePointFinder + InDetSiTrackerSpacePointFinder = InDet__SiTrackerSpacePointFinder(name = "InDetSiTrackerSpacePointFinder", + SiSpacePointMakerTool = InDetSiSpacePointMakerTool, + PixelsClustersName = "PixelTrigClusters", + SCT_ClustersName = "SCT_TrigClusters", + SpacePointsPixelName = "PixelTrigSpacePoints", + SpacePointsSCTName = "SCT_TrigSpacePoints", + SpacePointsOverlapName = InDetKeys.OverlapSpacePoints(), + ProcessPixels = DetFlags.haveRIO.pixel_on(), + ProcessSCTs = DetFlags.haveRIO.SCT_on(), + ProcessOverlaps = DetFlags.haveRIO.SCT_on(), + OutputLevel=DEBUG) + +# InDetSiTrackerSpacePointFinder.SpacePointCacheSCT = InDetCacheCreatorTrigViews.SpacePointCacheSCT +# InDetSiTrackerSpacePointFinder.SpacePointCachePix = InDetCacheCreatorTrigViews.SpacePointCachePix + return InDetSiTrackerSpacePointFinder + + +def TrigFastTrackFinder_eGamma(): + from TrigFastTrackFinder.TrigFastTrackFinder_Config import TrigFastTrackFinder_eGamma + theFTF = TrigFastTrackFinder_eGamma() + theFTF.OutputLevel = DEBUG + return theFTF + +def InDetTrigTrackParticleCreatorAlg(): + from TrigInDetConf.TrigInDetRecCommonTools import InDetTrigFastTrackSummaryTool + from TrigInDetConf.TrigInDetPostTools import InDetTrigParticleCreatorToolFTF + + from InDetTrigParticleCreation.InDetTrigParticleCreationConf import InDet__TrigTrackingxAODCnvMT + theTrackParticleCreatorAlg = InDet__TrigTrackingxAODCnvMT(name = "InDetTrigTrackParticleCreatorAlg", + doIBLresidual = False, + TrackName = "TrigFastTrackFinder_Tracks", + TrackParticlesName = "xAODTracks", + ParticleCreatorTool = InDetTrigParticleCreatorToolFTF) + + return theTrackParticleCreatorAlg + + + +# New second step +def l2ElectronViewsMaker(): + l2ElectronViewsMaker = TestEventViewCreatorAlgorithm("l2ElectronViewsMaker", OutputLevel=DEBUG) + l2ElectronViewsMaker.ViewFallThrough = True + l2ElectronViewsMaker.RoIsLink = "roi" # -||- + l2ElectronViewsMaker.InViewRoIs = "EMIDRoIs" # contract with the fastCalo + l2ElectronViewsMaker.Views = "EMElectronViews" + #l2ElectronViewsMaker.Decisions = filterCaloRoIsAlg.Output[0] # output of L2CaloHypo + l2ElectronViewsMaker.ViewNodeName = "electronInViewAlgs" + return l2ElectronViewsMaker + + +# A simple algorithm to confirm that data has been inherited from parent view +# Required to satisfy data dependencies +electronViewDataVerifier = CfgMgr.AthViews__ViewDataVerifier("electronViewDataVerifier") +electronViewDataVerifier.DataObjects = [('xAOD::TrigEMClusterContainer','StoreGateSvc+'+fastCaloAlgoNode.outputProp)] +#, ViewVerify, + +def L2ElectronFex_1(): + from TrigEgammaHypo.TrigL2ElectronFexMTConfig import L2ElectronFex_1 + theElectronFex= L2ElectronFex_1() +# theElectronFex.TrigEMClusterName = theFastCaloAlgo.ClustersName +# theElectronFex.TrackParticlesName = InDetTrigTrackParticleCreatorAlg.TrackParticlesName + theElectronFex.ElectronsName="Electrons" + theElectronFex.OutputLevel=VERBOSE + return theElectronFex + + +def TrigL2ElectronHypoAlg(): + from TrigEgammaHypo.TrigEgammaHypoConf import TrigL2ElectronHypoAlg + from TrigEgammaHypo.TrigL2ElectronHypoTool import TrigL2ElectronHypoToolFromName + theElectronHypo = TrigL2ElectronHypoAlg() + #theElectronHypo.Views = l2ElectronViewsMaker.Views + #theElectronHypo.Electrons = theElectronFex.ElectronsName + #theElectronHypo.ClusterDecisions = theFastCaloHypo.Decisions + theElectronHypo.ElectronDecisions = "ElectronL2Decisions" + theElectronHypo.OutputLevel = VERBOSE + #theElectronHypo.HypoTools = [ TrigL2ElectronHypoToolFromName( c ) for c in testChains ] + return theElectronHypo + + +############################# +# create algorithms and nodes for second step +############################# + + +InDetCacheCreatorTrigViews = InDetCacheCreatorTrigViews() +l2ElectronViewsMaker = l2ElectronViewsMaker() +#ID sequence algorithms +InDetPixelRawDataProvider = InDetPixelRawDataProvider() +InDetSCTRawDataProvider = InDetSCTRawDataProvider() +InDetTRTRawDataProvider = InDetTRTRawDataProvider() +InDetPixelClusterization = InDetPixelClusterization() +InDetSCT_Clusterization = InDetSCT_Clusterization() +InDetSiTrackerSpacePointFinder = InDetSiTrackerSpacePointFinder() +TrigFastTrackFinder_eGamma = TrigFastTrackFinder_eGamma() +InDetTrigTrackParticleCreatorAlg = InDetTrigTrackParticleCreatorAlg() +# alg electron: +L2ElectronFex_1 = L2ElectronFex_1() + + +# now make the seuqences + +# rdo sequence: create RDOkeys +#InDetPixelRawDataProvider.RDOCacheKey = InDetCacheCreatorTrigViews.PixRDOCacheKey, +#InDetSCTRawDataProvider.RDOCacheKey = InDetCacheCreatorTrigViews.SCTRDOCacheKey +NodePixelRDO_InDetCacheCreatorTrigViews = AlgNode(Alg=InDetCacheCreatorTrigViews, inputProp='', outputProp='PixRDOCacheKey') +NodeSCTRDO_InDetCacheCreatorTrigViews = AlgNode(Alg=InDetCacheCreatorTrigViews, inputProp='', outputProp='SCTRDOCacheKey') + +NodeRDO_InDetPixelRawDataProvider = AlgNode( Alg=InDetPixelRawDataProvider, inputProp='RDOCacheKey', outputProp='') +NodeRDO_InDetSCTRawDataProvider = AlgNode( Alg=InDetSCTRawDataProvider, inputProp='RDOCacheKey', outputProp='') + + +# cluster seuqence: +#InDetPixelClusterization.ClusterContainerCacheKey = InDetCacheCreatorTrigViews.Pixel_ClusterKey +#InDetSCT_Clusterization.ClusterContainerCacheKey = InDetCacheCreatorTrigViews.SCT_ClusterKey + +NodePixelCluster_InDetCacheCreatorTrigViews = AlgNode(Alg=InDetCacheCreatorTrigViews, inputProp='', outputProp='Pixel_ClusterKey') +NodeSCTCluster_InDetCacheCreatorTrigViews = AlgNode(Alg=InDetCacheCreatorTrigViews, inputProp='', outputProp='SCT_ClusterKey') + +NodeCluster_InDetPixelClusterization = AlgNode( Alg=InDetPixelClusterization, inputProp='ClusterContainerCacheKey', outputProp='') +NodeCluster_InDetSCT_Clusterization = AlgNode( Alg=InDetSCT_Clusterization, inputProp='ClusterContainerCacheKey', outputProp='') + +# space point sequence +#InDetSiTrackerSpacePointFinder.SpacePointCacheSCT = InDetCacheCreatorTrigViews.SpacePointCacheSCT +#InDetSiTrackerSpacePointFinder.SpacePointCachePix = InDetCacheCreatorTrigViews.SpacePointCachePix +NodePixelSP_InDetCacheCreatorTrigViews = AlgNode(Alg=InDetCacheCreatorTrigViews, inputProp='', outputProp='SpacePointCachePix') +NodeSCTSP_InDetCacheCreatorTrigViews = AlgNode(Alg=InDetCacheCreatorTrigViews, inputProp='', outputProp='SpacePointCacheSCT') + +NodePixelSP_InDetSiTrackerSpacePointFinder = AlgNode(Alg=InDetSiTrackerSpacePointFinder, inputProp='SpacePointCachePix', outputProp='') +NodeSCTSP_InDetSiTrackerSpacePointFinder = AlgNode(Alg=InDetSiTrackerSpacePointFinder, inputProp='SpacePointCacheSCT', outputProp='') + + +# view sequence +Node_l2ElectronViewsMaker = AlgNode(Alg=l2ElectronViewsMaker, inputProp='InputDecisions', outputProp='InViewRoIs') + +# algorithms in view: +#IDSequence = [ InDetPixelRawDataProvider, InDetSCTRawDataProvider, InDetTRTRawDataProvider, InDetPixelClusterization, InDetSCT_Clusterization, InDetSiTrackerSpacePointFinder, theFTF, theTrackParticleCreatorAlg ] +# : take rois from viewCreator +NodeRoI_InDetPixelRawDataProvider = AlgNode( Alg=InDetPixelRawDataProvider, inputProp='RoIs', outputProp='') +NodeRoI_InDetSCTRawDataProvider = AlgNode( Alg=InDetSCTRawDataProvider, inputProp='RoIs', outputProp='') +NodeRoI_InDetTRTRawDataProvider = AlgNode( Alg=InDetTRTRawDataProvider, inputProp='RoIs', outputProp='') +NodeRoI_InDetPixelClusterization = AlgNode( Alg=InDetPixelClusterization, inputProp='RoIs', outputProp='') +NodeRoI_InDetSCT_Clusterization = AlgNode( Alg=InDetSCT_Clusterization, inputProp='RoIs', outputProp='') +NodeRoI_InDetSiTrackerSpacePointFinder = AlgNode( Alg=InDetSiTrackerSpacePointFinder, inputProp='RoIs', outputProp='') +NodeRoI_TrigFastTrackFinder_eGamma = AlgNode( Alg= TrigFastTrackFinder_eGamma, inputProp='RoIs', outputProp='') +NodeRoI_InDetTrigTrackParticleCreatorAlg = AlgNode( Alg=InDetTrigTrackParticleCreatorAlg, + inputProp='roiCollectionName', + outputProp='TrackParticlesName') +# particle creator +#theTrackParticleCreatorAlg.roiCollectionName = l2ElectronViewsMaker.InViewRoIs +#theElectronFex.TrackParticlesName = theTrackParticleCreatorAlg.TrackParticlesName +NodeTrack_L2ElectronFex_1 = AlgNode( Alg=L2ElectronFex_1, inputProp='TrackParticlesName', outputProp='ElectronsName') + +#take rois from viewCreator +Node_electronViewDataVerifier = AlgNode( Alg=electronViewDataVerifier) +NodeCluster_L2ElectronFex_1 = AlgNode( Alg=L2ElectronFex_1, inputProp='TrigEMClusterName', outputProp='ElectronsName') + + +# hypo + +## Node_TrigL2ElectronHypoAlg = HypoAlgNode( Alg=TrigL2ElectronHypoAlg(), inputProp='Electrons', outputProp='ElectronDecisions') + +## electron_NodeSequence = ViewNodeSequence("electron_NodeSequence", +## Maker=Node_l2ElectronViewsMaker, +## Algs=[NodeRoI_InDetPixelRawDataProvider, +## NodeRoI_InDetSCTRawDataProvider, +## NodeRoI_InDetTRTRawDataProvider, +## NodeRoI_InDetPixelClusterization ], +## Hypo=Node_TrigL2ElectronHypoAlg, +## Seed="") + + + + + + + + + +########################################## # menu +########################################## +#testChains = ["HLT_e3_etcut", "HLT_e5_etcut", "HLT_e7_etcut", "HLT_2e3_etcut", "HLT_e3e5_etcut"] + testChains = [ - Chain(name='HLT_e3_etcut', Seed="L1_EM3", ChainSteps=[ChainStep("Step1_e3_etcut", [SequenceHypoTool(fastCaloSequence,e3_etcut() )])]), - Chain(name='HLT_e5_etcut', Seed="L1_EM3", ChainSteps=[ChainStep("Step1_e5_etcut", [SequenceHypoTool(fastCaloSequence,e5_etcut() )])]) - ] + Chain(name='HLT_e3_etcut', Seed="L1_EM3", \ + ChainSteps=[ChainStep("Step1_e3_etcut", [SequenceHypoTool(fastCaloSequence,e3_etcut() )])]), + Chain(name='HLT_e5_etcut', Seed="L1_EM3", \ + ChainSteps=[ChainStep("Step1_e5_etcut", [SequenceHypoTool(fastCaloSequence,e5_etcut() )])]), + Chain(name='HLT_e7_etcut', Seed="L1_EM3", \ + ChainSteps=[ChainStep("Step1_e7_etcut", [SequenceHypoTool(fastCaloSequence,e7_etcut() )])]), + # Chain(name='HLT_2e3_etcut', Seed="L1_EM3", \ + # ChainSteps=[ChainStep("Step1_2e3_etcut", [SequenceHypoTool(fastCaloSequence, 2e3_etcut() )])]) + ] + +topSequence.L1DecoderTest.prescaler.Prescales = ["HLT_e3_etcut:2", "HLT_2e3_etcut:2.5"] + +## for t in theElectronHypo.HypoTools: +## t.OutputLevel = VERBOSE +## # topSequence += theElectronHypo +## # InDetCacheCreatorTrigViews, +## electronSequence = seqAND("electronSequence", [ InDetCacheCreatorTrigViews, l2ElectronViewsMaker, electronInViewAlgs, theElectronHypo ] ) +## electronDecisionsDumper = DumpDecisions("electronDecisionsDumper", OutputLevel=DEBUG, Decisions = theElectronHypo.ElectronDecisions ) +## egammaIDStep = stepSeq("egammaIDStep", filterCaloRoIsAlg, [ electronSequence, electronDecisionsDumper ] ) -# CF construction + +########################################## +# CF construction +########################################## from AthenaCommon.CFElements import parOR, seqOR, seqAND, stepSeq from DecisionHandling.DecisionHandlingConf import TriggerSummaryAlg summary = TriggerSummaryAlg( "TriggerSummaryAlg" ) -summary.L1Decision = "HLTChains" +summary.InputDecision = "HLTChains" summary.FinalDecisions = [ "ElectronL2Decisions", "MuonL2Decisions" ] summary.OutputLevel = DEBUG -steps = seqAND("HLTSteps" ) +steps = seqAND("EgammaMenu_HLTSteps" ) decisionTree_From_Chains(steps, testChains, NSTEPS=1) steps += summary mon = TriggerSummaryAlg( "TriggerMonitoringAlg" ) -mon.L1Decision = "HLTChains" +mon.InputDecision = "HLTChains" mon.FinalDecisions = [ "ElectronL2Decisions", "MuonL2Decisions", "WhateverElse" ] mon.HLTSummary = "MonitoringSummary" mon.OutputLevel = DEBUG @@ -161,8 +567,8 @@ hltTop = seqOR( "hltTop", [ steps, mon] ) topSequence += hltTop -print fastCaloViewsMaker -print theFastCaloHypo +#print fastCaloViewsMaker +#print theFastCaloHypo ########################################## diff --git a/Trigger/TrigValidation/TrigUpgradeTest/share/egamma.withViews.py b/Trigger/TrigValidation/TrigUpgradeTest/share/egamma.withViews.py index 903feb1a978..22f3c41fa5b 100644 --- a/Trigger/TrigValidation/TrigUpgradeTest/share/egamma.withViews.py +++ b/Trigger/TrigValidation/TrigUpgradeTest/share/egamma.withViews.py @@ -80,6 +80,8 @@ fastCaloViewsMaker.Views = "EMCaloViews" fastCaloViewsMaker.ViewNodeName = "fastCaloInViewAlgs" theFastCaloAlgo.RoIs = fastCaloViewsMaker.InViewRoIs +CaloViewVerify = CfgMgr.AthViews__ViewDataVerifier("FastCaloViewDataVerifier") +CaloViewVerify.DataObjects = [('TrigRoiDescriptorCollection' , 'StoreGateSvc+fastCaloViewsMaker_InViewRoIs_out')] @@ -355,21 +357,27 @@ egammaIDStep = stepSeq("egammaIDStep", filterCaloRoIsAlg, [ electronSequence, e # CF construction +from DecisionHandling.DecisionHandlingConf import TriggerSummaryAlg +summaryStep0 = TriggerSummaryAlg( "TriggerSummaryStep1" ) +summaryStep0.InputDecision = "HLTChains" +summaryStep0.HLTSummary = "MonitoringSummaryStep1" +summaryStep0.FinalDecisions = [ theFastCaloHypo.Decisions ] +summaryStep0.OutputLevel = DEBUG -step0 = parOR("step0", [ egammaCaloStep ] ) +step0 = parOR("step0", [ egammaCaloStep, summaryStep0 ] ) step1 = parOR("step1", [ egammaIDStep ] ) -from DecisionHandling.DecisionHandlingConf import TriggerSummaryAlg + summary = TriggerSummaryAlg( "TriggerSummaryAlg" ) -summary.L1Decision = "HLTChains" +summary.InputDecision = "HLTChains" summary.FinalDecisions = [ "ElectronL2Decisions", "MuonL2Decisions" ] summary.OutputLevel = DEBUG steps = seqAND("HLTSteps", [ step0, step1, summary ] ) mon = TriggerSummaryAlg( "TriggerMonitoringAlg" ) -mon.L1Decision = "HLTChains" +mon.InputDecision = "HLTChains" mon.FinalDecisions = [ "ElectronL2Decisions", "MuonL2Decisions", "WhateverElse" ] mon.HLTSummary = "MonitoringSummary" mon.OutputLevel = DEBUG diff --git a/Trigger/TrigValidation/TrigUpgradeTest/src/TestComboHypoAlg.cxx b/Trigger/TrigValidation/TrigUpgradeTest/src/TestComboHypoAlg.cxx index ea3e1457633..9355232e373 100644 --- a/Trigger/TrigValidation/TrigUpgradeTest/src/TestComboHypoAlg.cxx +++ b/Trigger/TrigValidation/TrigUpgradeTest/src/TestComboHypoAlg.cxx @@ -10,66 +10,81 @@ namespace HLTTest { -TestComboHypoAlg::TestComboHypoAlg( const std::string& name, - ISvcLocator* pSvcLocator ) : - ::AthReentrantAlgorithm( name, pSvcLocator ) { - //declareProperty( "Property", m_nProperty ); - declareProperty( "Input1", m_recoInput1 ); - declareProperty( "Input2", m_recoInput2 ); - declareProperty( "Property1", m_property1 ); - declareProperty( "Property2", m_property2 ); - declareProperty( "Threshold1", m_threshold1 = 0); - declareProperty( "Threshold2", m_threshold2 = 0); - declareProperty( "Output1", m_output1 ); - declareProperty( "Output2", m_output2 ); - declareProperty( "DecisionLabel", m_decisionLabel ); -} - -TestComboHypoAlg::~TestComboHypoAlg() {} - -StatusCode TestComboHypoAlg::initialize() { - ATH_MSG_INFO ("Initializing " << name() << "..."); - CHECK( m_recoInput1.initialize() ); - CHECK( m_recoInput2.initialize() ); - CHECK( m_output1.initialize() ); - CHECK( m_output2.initialize() ); - CHECK( m_previousDecisions1.initialize() ); - renounce(m_previousDecisions1); - CHECK( m_previousDecisions2.initialize() ); - renounce(m_previousDecisions2); - - CHECK( not m_chainsProperty.empty() ); + TestComboHypoAlg::TestComboHypoAlg( const std::string& name, + ISvcLocator* pSvcLocator ) : + ::AthReentrantAlgorithm( name, pSvcLocator ) { + //declareProperty( "Property", m_nProperty ); + declareProperty( "Input1", m_recoInput1 ); + declareProperty( "Input2", m_recoInput2 ); + declareProperty( "Property1", m_property1 ); + declareProperty( "Property2", m_property2 ); + declareProperty( "Threshold1", m_threshold1 = 0); + declareProperty( "Threshold2", m_threshold2 = 0); + declareProperty( "Output1", m_output1 ); + declareProperty( "Output2", m_output2 ); + declareProperty( "DecisionLabel", m_decisionLabel ); + } + + TestComboHypoAlg::~TestComboHypoAlg() {} + + StatusCode TestComboHypoAlg::initialize() { + ATH_MSG_INFO ("Initializing " << name() << "..."); + CHECK( m_recoInput1.initialize() ); + CHECK( m_recoInput2.initialize() ); + CHECK( m_output1.initialize() ); + CHECK( m_output2.initialize() ); + CHECK( m_previousDecisions1.initialize() ); + renounce(m_previousDecisions1); + CHECK( m_previousDecisions2.initialize() ); + renounce(m_previousDecisions2); + + CHECK( not m_chainsProperty.empty() ); - for ( const std::string& el: m_chainsProperty ) - m_chains.insert( HLT::Identifier( el ).numeric() ); + for ( const std::string& el: m_chainsProperty ) + m_chains.insert( HLT::Identifier( el ).numeric() ); - for ( const HLT::Identifier& id: m_chains ) - ATH_MSG_DEBUG( "Configured to require chain " << id ); + for ( const HLT::Identifier& id: m_chains ) + ATH_MSG_DEBUG( "Configured to require chain " << id ); - return StatusCode::SUCCESS; -} + return StatusCode::SUCCESS; + } -StatusCode TestComboHypoAlg::finalize() { - ATH_MSG_INFO ("Finalizing " << name() << "..."); + StatusCode TestComboHypoAlg::finalize() { + ATH_MSG_INFO ("Finalizing " << name() << "..."); - return StatusCode::SUCCESS; -} + return StatusCode::SUCCESS; + } bool TestComboHypoAlg::passed( const Decision* d1, const Decision* d2 ) const { { - auto feature1 = d1->objectLink<xAOD::TrigCompositeContainer>( "feature" ); - float v = (*feature1)->getDetail<float>( m_property1 ); - ATH_MSG_DEBUG("Prop1="<<v); - if ( v < m_threshold1 ) - return false; + auto feature1 = d1->objectLink<xAOD::TrigCompositeContainer>( "feature" ); + if ( not feature1.isValid() ) { + ATH_MSG_ERROR( "Can not find reference to the object from the decision1" ); + return false; //StatusCode::FAILURE; + } + if ( (*feature1)->hasDetail<float>(m_property1 ) ){ + float v = (*feature1)->getDetail<float>( m_property1 ); + ATH_MSG_DEBUG("Prop1="<<v); + if ( v < m_threshold1 ) + return false; + } + else ATH_MSG_ERROR( "Cannot find detail "<<m_property1<<" in feature1"); } - { - auto feature2 = d2->objectLink<xAOD::TrigCompositeContainer>( "feature" ); - float v = (*feature2)->getDetail<float>( m_property2 ); - ATH_MSG_DEBUG("Prop2="<<v); - if ( v < m_threshold2 ) - return false; + + { + auto feature2 = d2->objectLink<xAOD::TrigCompositeContainer>( "feature" ); + if ( not feature2.isValid() ) { + ATH_MSG_ERROR( "Can not find reference to the object from the decision2" ); + return false;//StatusCode::FAILURE; + } + if ( (*feature2)->hasDetail<float>(m_property2 ) ){ + float v = (*feature2)->getDetail<float>( m_property2 ); + ATH_MSG_DEBUG("Prop2="<<v); + if ( v < m_threshold2 ) + return false; + } else ATH_MSG_ERROR( "Cannot find detail "<<m_property2<<" in feature2"); } + return true; } @@ -101,26 +116,40 @@ StatusCode TestComboHypoAlg::finalize() { size_t counter1 = 0; for ( auto previousDecision: *previousDecisionsHandle1 ) { auto roiEL = previousDecision->objectLink<TrigRoiDescriptorCollection>( "initialRoI" ); - CHECK( roiEL.isValid() ); - // for ( auto obj1Iter = input1->begin(); obj1Iter != input1->end(); ++obj1Iter, ++counter1 ) { + CHECK( roiEL.isValid() ); auto d = newDecisionIn( decisions1.get() ); - d->setObjectLink( "feature", ElementLink<xAOD::TrigCompositeContainer>( m_recoInput1.key(), counter1) ); - d->setObjectLink( "initialRoI", roiEL );// this is used by the InputMaker + if (counter1<input1->size()) + d->setObjectLink( "feature", ElementLink<xAOD::TrigCompositeContainer>( m_recoInput1.key(), counter1) ); + else + ATH_MSG_DEBUG( "Feature not added to the new decision of type 1: counter =" << counter1<<" list size = "<<input1->size()); + d->setObjectLink( "initialRoI", roiEL ); d->setObjectLink( "previousDecisions", ElementLink<DecisionContainer>(m_previousDecisions1.key(), counter1) ); + counter1++; } + ATH_MSG_DEBUG( "Found "<<counter1<<" rois from input 1 " ); size_t counter2 = 0; for ( auto previousDecision: *previousDecisionsHandle2 ) { auto roiEL = previousDecision->objectLink<TrigRoiDescriptorCollection>( "initialRoI" ); CHECK( roiEL.isValid() ); - // for ( auto obj2Iter = input2->begin(); obj2Iter != input2->end(); ++obj2Iter, ++counter2 ) { auto d = newDecisionIn( decisions2.get() ); - d->setObjectLink("feature", ElementLink<xAOD::TrigCompositeContainer>( m_recoInput2.key(), counter2) ); + //get the feature + if (counter2<input2->size()) + d->setObjectLink( "feature", ElementLink<xAOD::TrigCompositeContainer>( m_recoInput2.key(), counter2) ); + else + ATH_MSG_DEBUG( "Feature not added to the new decision of type 2"); d->setObjectLink( "initialRoI", roiEL );// this is used by the InputMaker d->setObjectLink( "previousDecisions", ElementLink<DecisionContainer>(m_previousDecisions2.key(), counter2) ); + counter2++; } - + ATH_MSG_DEBUG( "Found "<<counter2<<" rois from input 2 " ); + // this is the tool + if (decisions1->size() ==0 || decisions2->size() == 0) + ATH_MSG_DEBUG("No combined hypo found, Do not go to the tool since n.dec1="<< decisions1->size() << " and n.dec2="<< decisions2->size() <<" "); + else + ATH_MSG_DEBUG("Go to the tool with n.dec1="<< decisions1->size() << " and n.dec2="<< decisions2->size() <<" "); + counter1 = 0; for ( auto obj1Iter = decisions1->begin(); obj1Iter != decisions1->end(); ++obj1Iter, ++counter1 ) { auto previousDecisions1 = (*obj1Iter)->objectLink<DecisionContainer>( "previousDecisions" ); @@ -135,8 +164,8 @@ StatusCode TestComboHypoAlg::finalize() { std::vector<TrigCompositeUtils::DecisionID> intersection1; std::set_intersection( m_chains.begin(), m_chains.end(), - objDecisions1.begin(), objDecisions1.end(), - std::back_inserter( intersection1 ) ); + objDecisions1.begin(), objDecisions1.end(), + std::back_inserter( intersection1 ) ); if ( not intersection1.empty() ) { @@ -190,7 +219,7 @@ StatusCode TestComboHypoAlg::finalize() { auto h = SG::makeHandle( m_output2 ); CHECK( h.record( std::move( decisions2 ) , std::move( aux2 ) ) ); } - + // ATH_MSG_DEBUG ( "Exit with "<<decisions1->size() <<" decision from input 1 and " <<decisions2->size()<<" form input 2"); return StatusCode::SUCCESS; } diff --git a/Trigger/TrigValidation/TrigUpgradeTest/src/TestHypoAlg.cxx b/Trigger/TrigValidation/TrigUpgradeTest/src/TestHypoAlg.cxx index e42701e9603..ccdc2ad9548 100644 --- a/Trigger/TrigValidation/TrigUpgradeTest/src/TestHypoAlg.cxx +++ b/Trigger/TrigValidation/TrigUpgradeTest/src/TestHypoAlg.cxx @@ -85,7 +85,7 @@ namespace HLTTest { ATH_MSG_DEBUG("Number of positive decisions for this input: " << objDecisions.size() ); for ( TrigCompositeUtils::DecisionID id : objDecisions ) { - ATH_MSG_DEBUG( " --- found decision " << HLT::Identifier( id ) ); + ATH_MSG_DEBUG( " --- found new decision " << HLT::Identifier( id ) ); } } diff --git a/Trigger/TrigValidation/TrigUpgradeTest/src/TestHypoTool.cxx b/Trigger/TrigValidation/TrigUpgradeTest/src/TestHypoTool.cxx index a6f146084a4..8c7b63d31b4 100644 --- a/Trigger/TrigValidation/TrigUpgradeTest/src/TestHypoTool.cxx +++ b/Trigger/TrigValidation/TrigUpgradeTest/src/TestHypoTool.cxx @@ -40,13 +40,14 @@ namespace HLTTest { StatusCode TestHypoTool::decide( DecisionContainer* decisions ) const { ATH_MSG_DEBUG( "Making new decisions " << name() ); + size_t counter = 0; for ( auto d: *decisions ) { //get previous decisions auto previousDecisions = d->objectLink<DecisionContainer>( "previousDecisions" ); TrigCompositeUtils::DecisionIDContainer objDecisions; TrigCompositeUtils::decisionIDs( *previousDecisions, objDecisions ); - ATH_MSG_DEBUG("Number of previous decisions for this input: " << objDecisions.size() ); + ATH_MSG_DEBUG("Number of previous decisions for input "<< counter <<"= " << objDecisions.size() ); for ( TrigCompositeUtils::DecisionID id : objDecisions ) { ATH_MSG_DEBUG( " -- found decision " << HLT::Identifier( id ) ); @@ -76,6 +77,7 @@ namespace HLTTest { for ( const HLT::Identifier& id: m_chains ) ATH_MSG_DEBUG( "Configured to require chain " << id ); } + counter++; } return StatusCode::SUCCESS; diff --git a/Trigger/TrigValidation/TrigUpgradeTest/src/TestInputMaker.cxx b/Trigger/TrigValidation/TrigUpgradeTest/src/TestInputMaker.cxx index 863382602ee..b43af275538 100644 --- a/Trigger/TrigValidation/TrigUpgradeTest/src/TestInputMaker.cxx +++ b/Trigger/TrigValidation/TrigUpgradeTest/src/TestInputMaker.cxx @@ -15,8 +15,6 @@ namespace HLTTest { ISvcLocator* pSvcLocator ) : AthAlgorithm( name, pSvcLocator ), m_linkName("feature") { - declareProperty( "Inputs", m_inputs, "Input Decisions (implicit)" ); - declareProperty( "Output", m_recoOutput, "name of the output collection for input to next reco alg in sequence"); declareProperty( "OutputType", m_outputType, "reserved for future use"); declareProperty( "LinkName", m_linkName, "name of the link to the features in the decision, e.g. 'feature', 'InitialRoI'"); } @@ -35,6 +33,7 @@ namespace HLTTest { ATH_MSG_DEBUG(" and produce " << m_recoOutput); CHECK( m_recoOutput.initialize() ); + CHECK( m_decisionsKey.initialize() ); return StatusCode::SUCCESS; } @@ -47,70 +46,127 @@ namespace HLTTest { StatusCode TestInputMaker::execute() { ATH_MSG_DEBUG( "Executing " << name() << "..." ); - //auto outputHandle = SG::makeHandle(m_recoOutput); + // output decisions + auto Outdecisions = std::make_unique<DecisionContainer>(); + auto dec_aux = std::make_unique<DecisionAuxContainer>(); + Outdecisions->setStore( dec_aux.get() ); - // make the new output collection, as a view container so it can be given const features - // auto output = std::make_unique<ConstDataVector<xAOD::TrigCompositeContainer> >(); + // output collection, as a view container so it can be given const features auto output = std::make_unique<xAOD::TrigCompositeContainer>(); auto aux = std::make_unique<xAOD::TrigCompositeAuxContainer>(); output->setStore( aux.get() ); - //auto c = std::make_unique<ConstDataVector<TrigRoiDescriptorCollection> >(); - //output->clear( SG::VIEW_ELEMENTS ); - // view containers do not have aux stores of their own so no need to create nor call output->setStore - ATH_MSG_DEBUG( "number of implicit ReadHandles is " << m_inputs.size() ); - - // Loop over contents of this, which are of course TrigComposites, and request their features - // auto inputHandles = m_inputs.makeHandles(); + std::map<const FeatureOBJ*, TrigCompositeUtils::Decision* > featureFromDecision; + + // Loop over all input containers, which are of course TrigComposites, and request their features size_t outputIndex = 0; for ( auto inputKey: m_inputs ) { auto inputHandle = SG::makeHandle( inputKey ); - // for (auto inputHandle: inputHandles){ ATH_MSG_DEBUG( "Got DecisionContainer from input "<< inputKey.key()<<" with " << inputHandle->size() << " elements" ); // loop over decisions retrieved from this input - // The input is a DecisionContainer, alias for a TrigCompositeContainer. - for (auto decision=inputHandle->begin(); decision!=inputHandle->end(); ++decision){ - // ATH_MSG_DEBUG( "Got Decision (TrigComposite): " << *decision); - // retrieve feature from TrigComposite, will in this case be a TrigRoiDescriptor - // objectLink method is templated with container but returns single contained class - //ElementLink<xAOD::TrigCompositeContainer> feature = (*decision)->objectLink<xAOD::TrigCompositeContainer>( m_linkName.value() ); - auto featurelink = (*decision)->objectLink<TrigRoiDescriptorCollection>( m_linkName.value() ); - if ( not featurelink.isValid() ) { - ATH_MSG_ERROR( " Can not find reference to " + m_linkName.value() + " from the decision" ); - return StatusCode::FAILURE; - } + size_t counter =0; + for ( auto decision : *inputHandle){ + auto roiEL = decision->objectLink<TrigRoiDescriptorCollection>( "initialRoI" ); + CHECK( roiEL.isValid() ); + + // retrieve feature from TrigComposite, will in this case be a TrigRoiDescriptor + auto featurelink = (decision)->objectLink<FeatureContainer>( m_linkName.value() ); + if ( not featurelink.isValid() ) { + ATH_MSG_ERROR( " Can not find reference to " + m_linkName.value() + " from the decision" ); + return StatusCode::FAILURE; + } - auto featurePtr(featurelink.cptr()); - ATH_MSG_DEBUG(" Found feature " <<m_linkName.value() <<": " << **featurePtr ); - - // copy all features to a single output collection - // they just happen to be TrigComposites in this case but should be whatever is needed as input by the reco algorithm next in the sequence, e.g. CaloCells. - - //auto output = std::make_unique< ConstDataVector< xAOD::TrigCompositeContainer > > (); - //output->clear( SG::VIEW_ELEMENTS ); - auto tc = new xAOD::TrigComposite; - output->push_back(tc); - tc->setObjectLink(m_linkName.value(), featurelink); - //output->setObjectLink(m_linkName.value(), featurelink); - ATH_MSG_DEBUG( " copied feature " << m_linkName.value() <<" to output " <<outputIndex); - // CHECK( outputHandle.record( std::move( output ) ) ); - outputIndex++; - // tc->setDetail( m_linkName.value(), feature ); + const FeatureOBJ* feature = *featurelink; + ATH_MSG_DEBUG("Found feature " <<m_linkName.value() <<": " << *feature ); + + // merge outputs that are linked to the same feature (RoI): this avoids processing the same RoI from TC decisions from different chains + bool already_exist=false; + auto it = featureFromDecision.find(feature); + if (it != featureFromDecision.end()){ + already_exist=true; + } + + TrigCompositeUtils::Decision* newd; + if (! already_exist) { + ATH_MSG_DEBUG( "Make new decision"); + + // create the "reco" output + auto tc = new xAOD::TrigComposite; + output->push_back(tc); + // copy all features to a single output collection + tc->setObjectLink(m_linkName.value(), featurelink); + + // create new decision + newd = newDecisionIn( Outdecisions.get() ); + newd->setObjectLink( m_linkName.value(), featurelink); + // this is done only once, the first time it is found + newd->setObjectLink( "initialRoI", roiEL ); + // do we have to store all previous descisions? + newd->setObjectLink( "previousDecisions", ElementLink<DecisionContainer>(inputKey.key(), counter) );// link to previous decision object + // update map + featureFromDecision.insert( std::make_pair( feature, ( TrigCompositeUtils::Decision* ) newd ) ); + outputIndex++; + } + else{ + newd=featureFromDecision[feature]; + } + + ATH_MSG_DEBUG( "Copy decisions from input " << counter <<" with exist flag=" <<already_exist <<" to output "<< &newd ); + { + //copy decisions ID + TrigCompositeUtils::DecisionIDContainer objDecisions; + TrigCompositeUtils::decisionIDs( decision, objDecisions ); + for ( const HLT::Identifier& id: objDecisions ){ + TrigCompositeUtils::addDecisionID( id, newd ); + // ATH_MSG_DEBUG( " -- adding decision " << HLT::Identifier( id ) ); + } + // debug + // TrigCompositeUtils::DecisionIDContainer newObjDecisions; + // TrigCompositeUtils::decisionIDs( newd, newObjDecisions ); + // for ( const HLT::Identifier& id: newObjDecisions ){ + // ATH_MSG_DEBUG( " -- has decision " << HLT::Identifier( id ) ); + // } + } + + counter++; // For early tests, create TC, link to RoiD, push back onto TCC. // Later will output RoID collection directly via tool. } // loop over decisions } // loop over input keys - - ATH_MSG_DEBUG("Produced "<<output->size() <<" objects"); + + // Finally, record output - auto outputHandle = SG::makeHandle(m_recoOutput); - CHECK( outputHandle.record(std::move(output), std::move(aux)) ); - + ATH_MSG_DEBUG("Should find "<<outputIndex<<" obejcts and decisions"); + ATH_MSG_DEBUG("Produced "<<output->size() <<" objects"); + auto reco_outputHandle = SG::makeHandle(m_recoOutput); + CHECK( reco_outputHandle.record(std::move(output), std::move(aux)) ); + + + // and decision output + ATH_MSG_DEBUG("Produced "<<Outdecisions->size() <<" decisions"); + auto dec_handle = SG::makeHandle( m_decisionsKey ); + CHECK( dec_handle.record( std::move( Outdecisions ), std::move( dec_aux ) ) ); + + + //debug + + for (auto outh: *dec_handle){ + TrigCompositeUtils::DecisionIDContainer objDecisions; + TrigCompositeUtils::decisionIDs( outh, objDecisions ); + + ATH_MSG_DEBUG("Number of positive decisions for this input: " << objDecisions.size() ); + + for ( TrigCompositeUtils::DecisionID id : objDecisions ) { + ATH_MSG_DEBUG( " --- found decision " << HLT::Identifier( id ) ); + } + } + + return StatusCode::SUCCESS; } diff --git a/Trigger/TrigValidation/TrigUpgradeTest/src/TestInputMaker.h b/Trigger/TrigValidation/TrigUpgradeTest/src/TestInputMaker.h index 2e29733a9bf..52d1384a221 100644 --- a/Trigger/TrigValidation/TrigUpgradeTest/src/TestInputMaker.h +++ b/Trigger/TrigValidation/TrigUpgradeTest/src/TestInputMaker.h @@ -40,12 +40,15 @@ namespace HLTTest { private: TestInputMaker(); - //SG::WriteHandleKey<ConstDataVector<xAOD::TrigCompositeContainer> > m_recoOutput; - // SG::WriteHandleKey<ConstDataVector<TrigRoiDescriptorCollection> > m_recoOutput; - //SG::WriteHandleKey<ConstDataVector<TestCluster> > m_recoOutput; + + typedef TrigRoiDescriptor FeatureOBJ; + typedef TrigRoiDescriptorCollection FeatureContainer; - SG::ReadHandleKeyArray<TrigCompositeUtils::DecisionContainer> m_inputs; - SG::WriteHandleKey<xAOD::TrigCompositeContainer> m_recoOutput; + SG::ReadHandleKeyArray<TrigCompositeUtils::DecisionContainer> m_inputs { this, "InputDecisions", {}, "Input Decisions (implicit)" }; + SG::WriteHandleKey<xAOD::TrigCompositeContainer> m_recoOutput { this, "Output", "undefined", "name of the output collection for input to next reco alg in sequence" }; + SG::WriteHandleKey< TrigCompositeUtils::DecisionContainer > m_decisionsKey { this, "OutputDecisions", "Unspecified", "Ouput Decisions" }; + + StringProperty m_linkName; StringProperty m_outputType; }; diff --git a/Trigger/TrigValidation/TrigUpgradeTest/src/TestRecoAlg.cxx b/Trigger/TrigValidation/TrigUpgradeTest/src/TestRecoAlg.cxx index 0e21986ed1b..d6082a17f90 100644 --- a/Trigger/TrigValidation/TrigUpgradeTest/src/TestRecoAlg.cxx +++ b/Trigger/TrigValidation/TrigUpgradeTest/src/TestRecoAlg.cxx @@ -89,37 +89,53 @@ namespace HLTTest { using namespace TrigCompositeUtils; ATH_MSG_DEBUG ("Executing " << name() << "..."); + const EventContext& context = Gaudi::Hive::currentContext(); + const size_t eventNo = context.evt() % m_data.size(); + auto objects= m_data[eventNo]; + auto output = std::make_unique<xAOD::TrigCompositeContainer>(); auto aux = std::make_unique<xAOD::TrigCompositeAuxContainer>(); output->setStore( aux.get() ); - if ( not m_input.key().empty() ) { - auto inputHandle = SG::makeHandle(m_input); - ATH_MSG_DEBUG("Input " << m_input.key() << " should be available, scanning it"); - for ( auto i: *inputHandle.cptr() ) { - auto roiLink = findLink<TrigRoiDescriptorCollection>(i, "initialRoI"); - if ( roiLink.isValid() ) { - auto roiPtr(roiLink.link.cptr()); - ATH_MSG_DEBUG("RoI" << **roiPtr ); - } else { - ATH_MSG_DEBUG("RoI information missing"); + // if ( not m_input.key().empty() ) { + auto inputHandle = SG::makeHandle(m_input); + ATH_MSG_DEBUG("Input " << m_input.key() << " has "<<inputHandle->size() <<" elements, scanning it"); + for ( auto i: *inputHandle.cptr() ) { + auto roiLink = findLink<TrigRoiDescriptorCollection>(i, "initialRoI"); + if ( roiLink.isValid() ) { + auto roiPtr(roiLink.link.cptr()); + ATH_MSG_DEBUG("RoI" << **roiPtr ); + // create new outpu objects and add the properties + if (objects.size() > output->size()) { + auto object=objects[output->size()]; + auto xobj = new xAOD::TrigComposite; + output->push_back( xobj ); + ATH_MSG_DEBUG( "Reconstructed object" ); + for ( auto prop : object ) { + xobj->setDetail( prop.first, prop.second ); + ATH_MSG_DEBUG( " " << prop.first << " : " << prop.second ); + } + } + else { + ATH_MSG_DEBUG( "No reco object created for this RoI because it's not found in the event"); } + } else { + ATH_MSG_DEBUG("RoI information missing"); } } + //} - const EventContext& context = Gaudi::Hive::currentContext(); - const size_t eventNo = context.evt() % m_data.size(); - for ( auto object: m_data[eventNo] ) { - auto xobj = new xAOD::TrigComposite; - output->push_back( xobj ); - ATH_MSG_DEBUG( "Reconstructed object" ); - for ( auto prop : object ) { - xobj->setDetail( prop.first, prop.second ); - ATH_MSG_DEBUG( " " << prop.first << " : " << prop.second ); - } - } + // for ( auto object: m_data[eventNo] ) { + // auto xobj = new xAOD::TrigComposite; + // output->push_back( xobj ); + // ATH_MSG_DEBUG( "Reconstructed object" ); + // for ( auto prop : object ) { + // xobj->setDetail( prop.first, prop.second ); + // ATH_MSG_DEBUG( " " << prop.first << " : " << prop.second ); + // } + // } ATH_MSG_DEBUG("Reconstructed "<<output->size() <<" objects"); diff --git a/Trigger/TrigValidation/TrigUpgradeTest/src/components/TrigUpgradeTest_entries.cxx b/Trigger/TrigValidation/TrigUpgradeTest/src/components/TrigUpgradeTest_entries.cxx index f644290d8e9..fd90b375c03 100644 --- a/Trigger/TrigValidation/TrigUpgradeTest/src/components/TrigUpgradeTest_entries.cxx +++ b/Trigger/TrigValidation/TrigUpgradeTest/src/components/TrigUpgradeTest_entries.cxx @@ -17,3 +17,4 @@ DECLARE_COMPONENT( HLTTest::TestRecoAlg ) DECLARE_COMPONENT( HLTTest::TestRoRSeqFilter ) DECLARE_COMPONENT( HLTTest::TestMerger ) DECLARE_COMPONENT( HLTTest::TestComboHypoAlg ) + diff --git a/Trigger/TrigValidation/TrigUpgradeTest/test/test_egamma_menu.sh b/Trigger/TrigValidation/TrigUpgradeTest/test/test_egamma_menu.sh new file mode 100755 index 00000000000..1dd05399d8a --- /dev/null +++ b/Trigger/TrigValidation/TrigUpgradeTest/test/test_egamma_menu.sh @@ -0,0 +1,5 @@ +#!/bin/sh +# art-type: build +# art-ci: master + +athena --threads=1 --evtMax=10 --filesInput="/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data17_13TeV.00327265.physics_EnhancedBias.merge.RAW._lb0100._SFO-1._0001.1" TrigUpgradeTest/egamma.menu.py -- GitLab