Skip to content
Snippets Groups Projects
Commit c756bbb4 authored by Tomasz Bold's avatar Tomasz Bold
Browse files

Fixed small issues so that the EM +CTP unpacking works

parent 6a0ab768
No related branches found
No related tags found
No related merge requests found
...@@ -7,6 +7,9 @@ ...@@ -7,6 +7,9 @@
# ln -s /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/atn-test/data15_13TeV.00266904.physics_EnhancedBias.merge.RAW._lb0452._SFO-1._0001.1 input.data # ln -s /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/atn-test/data15_13TeV.00266904.physics_EnhancedBias.merge.RAW._lb0452._SFO-1._0001.1 input.data
# #
import os.path
assert os.path.isfile('input.data'), 'No input file: see the JO to see how to get it'
## @file L1Topo_ReadBS_test.py ## @file L1Topo_ReadBS_test.py
## @brief Example job options file to read BS file to test a converter ## @brief Example job options file to read BS file to test a converter
## $Id: decodeBS.parallel.py 717359 2016-01-12 14:40:21Z bwynne $ ## $Id: decodeBS.parallel.py 717359 2016-01-12 14:40:21Z bwynne $
...@@ -80,18 +83,25 @@ if nThreads >= 1: ...@@ -80,18 +83,25 @@ if nThreads >= 1:
topSequence += SGInputLoader( OutputLevel=INFO, ShowEventDump=False ) topSequence += SGInputLoader( OutputLevel=INFO, ShowEventDump=False )
topSequence.SGInputLoader.Load = [ ('ROIB::RoIBResult','RoIBResult') ] topSequence.SGInputLoader.Load = [ ('ROIB::RoIBResult','RoIBResult') ]
from L1Decoder.L1DecoderConf import *
l1Decoder = L1Decoder()
l1Decoder.ctpUnpacker = CTPUnpackingTool()
l1Decoder.ctpUnpacker.CTPToChainMapping = ["1:HLT_e3", "2:HLT_e5"]
emUnpacker = EMRoIsUnpackingTool()
emUnpacker.ThresholdToChainMapping = ["EM3:HLT_e3", "EM3:HLT_e5"]
l1Decoder.roiUnpackers = []
topSequence += l1Decoder
#Run calo decoder #Run calo decoder
from L1Decoder.L1DecoderConf import L1CaloDecoder
caloDecoder = L1CaloDecoder() # by default it is steered towards the RoIBResult of the name above # caloDecoder = L1CaloDecoder() # by default it is steered towards the RoIBResult of the name above
caloDecoder.OutputLevel=VERBOSE # caloDecoder.OutputLevel=VERBOSE
topSequence += caloDecoder # topSequence += caloDecoder
#Dumper # #Dumper
from ViewAlgs.ViewAlgsConf import DumpDecisions # from ViewAlgs.ViewAlgsConf import DumpDecisions
dumper = DumpDecisions("L1CaloDecisions") # dumper = DumpDecisions("L1CaloDecisions")
dumper.OutputLevel=VERBOSE # dumper.OutputLevel=VERBOSE
topSequence += dumper # topSequence += dumper
#-------------------------------------------------------------- #--------------------------------------------------------------
......
...@@ -7,11 +7,41 @@ ...@@ -7,11 +7,41 @@
using namespace HLT; using namespace HLT;
CTPUnpackingTool::CTPUnpackingTool( const std::string& type,
const std::string& name,
const IInterface* parent )
: AthAlgTool(type, name, parent) {
declareProperty("CTPToChainMapping", m_ctpToChainProperty, "Mapping of the form: '34:HLT_x', '35:HLT_y', ..., both CTP ID and chain may appear many times");
}
CTPUnpackingTool::~CTPUnpackingTool() CTPUnpackingTool::~CTPUnpackingTool()
{} {}
StatusCode CTPUnpackingTool::decodeCTPToChainMapping() {
std::istringstream input;
for ( auto entry: m_ctpToChainProperty) {
input.clear();
input.str(entry);
size_t ctpId;
input >> ctpId;
char delim;
input >> delim;
if ( delim != ':' ) {
ATH_MSG_ERROR("Error in conf. entry: " << entry << " missing ':'");
return StatusCode::FAILURE;
}
std::string chainName;
input >> chainName;
ATH_MSG_DEBUG("Chain " << chainName << " seeded from CTP item of ID " << ctpId);
m_ctpToChain[ctpId].push_back(HLT::Identifier(chainName));
}
return StatusCode::SUCCESS;
}
StatusCode CTPUnpackingTool::decode(const ROIB::RoIBResult& roib, const IndexToIdentifiers& ctpToChain, HLT::IDVec& enabledChains) const { StatusCode CTPUnpackingTool::decode(const ROIB::RoIBResult& roib, HLT::IDVec& enabledChains) const {
size_t numberPfActivatedBits= 0; size_t numberPfActivatedBits= 0;
auto tav = roib.cTPResult().TAV(); auto tav = roib.cTPResult().TAV();
...@@ -23,8 +53,8 @@ StatusCode CTPUnpackingTool::decode(const ROIB::RoIBResult& roib, const IndexToI ...@@ -23,8 +53,8 @@ StatusCode CTPUnpackingTool::decode(const ROIB::RoIBResult& roib, const IndexToI
const bool decision = (tav[wordCounter].roIWord() & (1 << bitCounter)) > 0; const bool decision = (tav[wordCounter].roIWord() & (1 << bitCounter)) > 0;
if ( decision == true ) { if ( decision == true ) {
numberPfActivatedBits++; numberPfActivatedBits++;
auto itr = ctpToChain.find(ctpIndex); auto itr = m_ctpToChain.find(ctpIndex);
if ( itr != ctpToChain.end() ) if ( itr != m_ctpToChain.end() )
enabledChains.insert(enabledChains.end(), itr->second.begin(), itr->second.end()); enabledChains.insert(enabledChains.end(), itr->second.begin(), itr->second.end());
} }
} }
......
// -*- c++ -*-
/* /*
Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
*/ */
...@@ -28,7 +29,7 @@ public: ...@@ -28,7 +29,7 @@ public:
const std::string& name, const std::string& name,
const IInterface* parent ); const IInterface* parent );
virtual ~CTPUnpackingTool(); virtual ~CTPUnpackingTool();
typedef std::map<size_t, HLT::IDVec> IndexToIdentifiers;
/* /*
@brief The method decodes CTP bits content of the RoIBResult and fills the list of chains which are activated by those bits @brief The method decodes CTP bits content of the RoIBResult and fills the list of chains which are activated by those bits
...@@ -36,11 +37,17 @@ public: ...@@ -36,11 +37,17 @@ public:
@warning if the mapping is empty it means an empty menu. This condition is NOT checked and not reported. @warning if the mapping is empty it means an empty menu. This condition is NOT checked and not reported.
@warning if none of CTP bits is set this is also an error condition, this is the event should not have been passed to HLT @warning if none of CTP bits is set this is also an error condition, this is the event should not have been passed to HLT
*/ */
StatusCode decode(const ROIB::RoIBResult&, const IndexToIdentifiers& ctpToChain, HLT::IDVec& enabledChains) const; StatusCode decode(const ROIB::RoIBResult& roib, HLT::IDVec& enabledChains) const;
StatusCode initialize(){ return StatusCode::SUCCESS; }
protected: StatusCode initialize(){ return decodeCTPToChainMapping(); }
protected:
StatusCode decodeCTPToChainMapping();
private:
typedef std::map<size_t, HLT::IDVec> IndexToIdentifiers;
IndexToIdentifiers m_ctpToChain;
std::vector<std::string> m_ctpToChainProperty;
}; };
......
...@@ -16,9 +16,10 @@ EMRoIsUnpackingTool::EMRoIsUnpackingTool( const std::string& type, ...@@ -16,9 +16,10 @@ EMRoIsUnpackingTool::EMRoIsUnpackingTool( const std::string& type,
: AthAlgTool ( type, name, parent ), : AthAlgTool ( type, name, parent ),
m_configSvc("TrigConf::LVL1ConfigSvc/LVL1ConfigSvc", name) { m_configSvc("TrigConf::LVL1ConfigSvc/LVL1ConfigSvc", name) {
declareProperty( "Decisions", m_decisionsKey, "Decisions for each RoI" ); declareProperty( "Decisions", m_decisionsKey="RoIDecisions", "Decisions for each RoI" );
declareProperty("OutputRoIs", m_trigRoIsKey, "Name of the RoIs object produced by the unpacker"); declareProperty("ThresholdToChainMapping", m_thresholdToChainProperty, "Mapping from the threshold name to chain in the form: 'EM3:HLT_e5', 'EM3:HLT_e5tight', ...");
declareProperty("OutputRecEMTauRoIs", m_recEMTauRoIsKey, "Name of the RoIs object produced by the unpacker"); declareProperty("OutputRoIs", m_trigRoIsKey="EMRoIs", "Name of the RoIs object produced by the unpacker");
declareProperty("OutputRecEMTauRoIs", m_recEMTauRoIsKey="RecEMRoIs", "Name of the RoIs object produced by the unpacker");
declareProperty("RoIWidth", m_roIWidth = 0.1, "Size of RoI in eta/ phi"); declareProperty("RoIWidth", m_roIWidth = 0.1, "Size of RoI in eta/ phi");
} }
...@@ -28,8 +29,11 @@ EMRoIsUnpackingTool::~EMRoIsUnpackingTool(){ ...@@ -28,8 +29,11 @@ EMRoIsUnpackingTool::~EMRoIsUnpackingTool(){
StatusCode EMRoIsUnpackingTool::initialize() { StatusCode EMRoIsUnpackingTool::initialize() {
CHECK(m_configSvc.retrieve()); CHECK( m_configSvc.retrieve() );
CHECK( m_trigRoIsKey.initialize() );
CHECK( m_recEMTauRoIsKey.initialize() );
//TODO add mapping retrieval //TODO add mapping retrieval
CHECK( decodeMapping() );
return StatusCode::SUCCESS; return StatusCode::SUCCESS;
} }
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
*/ */
#include <iostream>
// L1Decoder includes // L1Decoder includes
#include "IRoIsUnpackingTool.h" #include "IRoIsUnpackingTool.h"
...@@ -13,7 +13,22 @@ IRoIsUnpackingTool::~IRoIsUnpackingTool() ...@@ -13,7 +13,22 @@ IRoIsUnpackingTool::~IRoIsUnpackingTool()
StatusCode IRoIsUnpackingTool::decodeMapping() {
std::istringstream input;
for ( auto entry: m_thresholdToChainProperty ) {
input.clear();
input.str(entry);
std::string thresholdName;
char delim;
std::string chainName;
input >> thresholdName >> delim >> chainName;
if ( delim != ':' ) {
return StatusCode::FAILURE;
}
m_thresholdToChainMapping[HLT::Identifier(thresholdName)].push_back(HLT::Identifier(chainName));
}
return StatusCode::SUCCESS;
}
......
...@@ -38,8 +38,12 @@ class IRoIsUnpackingTool ...@@ -38,8 +38,12 @@ class IRoIsUnpackingTool
const ROIB::RoIBResult& roib, const ROIB::RoIBResult& roib,
const HLT::IDVec& activeChains) const = 0; const HLT::IDVec& activeChains) const = 0;
StatusCode decodeMapping();
protected: protected:
SG::WriteHandleKey< TrigCompositeUtils::DecisionContainer> m_decisionsKey; SG::WriteHandleKey< TrigCompositeUtils::DecisionContainer> m_decisionsKey;
std::vector<std::string> m_thresholdToChainProperty;
std::map<HLT::Identifier, HLT::IDVec> m_thresholdToChainMapping;
}; };
inline const InterfaceID& IRoIsUnpackingTool::interfaceID() { inline const InterfaceID& IRoIsUnpackingTool::interfaceID() {
......
...@@ -5,20 +5,26 @@ ...@@ -5,20 +5,26 @@
#include "./L1Decoder.h" #include "./L1Decoder.h"
L1Decoder::L1Decoder(const std::string& name, ISvcLocator* pSvcLocator) L1Decoder::L1Decoder(const std::string& name, ISvcLocator* pSvcLocator)
: AthReentrantAlgorithm(name, pSvcLocator) { : AthReentrantAlgorithm(name, pSvcLocator),
m_ctpUnpacker("CTPUnpackingTool/CTPUnpackingTool", this),
m_roiUnpackers(this) {
declareProperty("RoIBResult", m_RoIBResultKey="RoIBResult", "Name of RoIBResult"); declareProperty("RoIBResult", m_RoIBResultKey="RoIBResult", "Name of RoIBResult");
declareProperty("Chains", m_chainsKey="HLTChains", "Chains status after L1 and prescaling"); declareProperty("Chains", m_chainsKey="HLTChains", "Chains status after L1 and prescaling");
declareProperty("ctpUnpacker", m_ctpUnpacker, "Tool used to unpack the CTP info");
declareProperty("roiUnpackers", m_roiUnpackers, "Tools unpacking RoIs");
} }
StatusCode L1Decoder::initialize() { StatusCode L1Decoder::initialize() {
CHECK( m_RoIBResultKey.initialize() ); CHECK( m_RoIBResultKey.initialize() );
CHECK( m_chainsKey.initialize() ); CHECK( m_chainsKey.initialize() );
CHECK( m_ctpUnpacker.retrieve() ); CHECK( m_ctpUnpacker.retrieve() );
// CHECK( m_roisUnpacker.retrieve() ); CHECK( m_roiUnpackers.retrieve() );
// CHECK( m_prescaler.retrieve() ); // CHECK( m_prescaler.retrieve() );
CHECK(readConfiguration());
return StatusCode::SUCCESS; return StatusCode::SUCCESS;
} }
...@@ -28,6 +34,7 @@ StatusCode L1Decoder::beginRun() { ...@@ -28,6 +34,7 @@ StatusCode L1Decoder::beginRun() {
return StatusCode::SUCCESS; return StatusCode::SUCCESS;
} }
StatusCode L1Decoder::readConfiguration() { StatusCode L1Decoder::readConfiguration() {
return StatusCode::SUCCESS; return StatusCode::SUCCESS;
} }
...@@ -42,7 +49,7 @@ StatusCode L1Decoder::execute_r (const EventContext& ctx) const { ...@@ -42,7 +49,7 @@ StatusCode L1Decoder::execute_r (const EventContext& ctx) const {
DecisionOutput chainsInfo; DecisionOutput chainsInfo;
HLT::IDVec l1SeededChains; HLT::IDVec l1SeededChains;
CHECK( m_ctpUnpacker->decode(*roibH, m_ctpIDToChain, l1SeededChains) ); CHECK( m_ctpUnpacker->decode(*roibH, l1SeededChains) );
sort(l1SeededChains.begin(), l1SeededChains.end()); // do so that following scaling is reproducable sort(l1SeededChains.begin(), l1SeededChains.end()); // do so that following scaling is reproducable
HLT::IDVec activeChains; HLT::IDVec activeChains;
...@@ -81,16 +88,17 @@ StatusCode L1Decoder::prescaleChains(const HLT::IDVec& active, ...@@ -81,16 +88,17 @@ StatusCode L1Decoder::prescaleChains(const HLT::IDVec& active,
for ( auto c: active ) { for ( auto c: active ) {
auto psInfo = m_prescalingInfo.find(c); auto psInfo = m_prescalingInfo.find(c);
if ( psInfo == m_prescalingInfo.end() ) { if ( psInfo == m_prescalingInfo.end() ) {
ATH_MSG_ERROR("No prescaling information for the chain " << c); ATH_MSG_INFO("No prescaling information for the chain, enabling it " << c);
return StatusCode::FAILURE; notPrescaled.push_back(c);
} } else {
// this code should then work // this code should then work
// if ( scaler.decision( state, psInfo.second ) ) { // if ( scaler.decision( state, psInfo.second ) ) {
// notPrescaled.push_back(c); // notPrescaled.push_back(c);
// ATH_MSG_DEBUG("Chain " << c << " remained active after the HTL prescaling"); // ATH_MSG_DEBUG("Chain " << c << " remained active after the HTL prescaling");
// but for now // but for now
notPrescaled.push_back(c); notPrescaled.push_back(c);
}
} }
return StatusCode::SUCCESS; return StatusCode::SUCCESS;
} }
......
...@@ -40,23 +40,14 @@ protected: // protected to support unit testing ...@@ -40,23 +40,14 @@ protected: // protected to support unit testing
StatusCode saveChainsInfo(const HLT::IDVec& chains, StatusCode saveChainsInfo(const HLT::IDVec& chains,
xAOD::TrigCompositeContainer* storage, xAOD::TrigCompositeContainer* storage,
const std::string& type) const; const std::string& type) const;
private: private:
SG::ReadHandleKey<ROIB::RoIBResult> m_RoIBResultKey; SG::ReadHandleKey<ROIB::RoIBResult> m_RoIBResultKey;
SG::WriteHandleKey< TrigCompositeUtils::DecisionContainer > m_chainsKey; SG::WriteHandleKey< TrigCompositeUtils::DecisionContainer > m_chainsKey;
ToolHandle<CTPUnpackingTool> m_ctpUnpacker; ToolHandle<CTPUnpackingTool> m_ctpUnpacker; // = ToolHandle<CTPUnpackingTool>("CTPUnpackingTool/CTPUnpackingTool", this); // last arg makes it private tool
// ToolHandle<PrescalingTool> m_prescaler; // ToolHandle<PrescalingTool> m_prescaler = ToolHandle<PrescalingTool>("PrescalingTool/PrescalingTool", this);
ToolHandleArray<IRoIsUnpackingTool> m_roiUnpackers; ToolHandleArray<IRoIsUnpackingTool> m_roiUnpackers; // = ToolHandleArray<IRoIsUnpackingTool>(this);
std::map<HLT::Identifier, float> m_prescalingInfo;
CTPUnpackingTool::IndexToIdentifiers m_ctpIDToChain;
std::map<HLT::Identifier, float> m_prescalingInfo;
}; };
#endif #endif
...@@ -4,13 +4,19 @@ ...@@ -4,13 +4,19 @@
#include "../FakeRoI.h" #include "../FakeRoI.h"
#include "../FakeRoIView.h" #include "../FakeRoIView.h"
//#include "../RoIGraph.h" //#include "../RoIGraph.h"
#include "../L1Decoder.h"
#include "../FakeCTP.h" #include "../FakeCTP.h"
#include "../CTPUnpackingTool.h"
#include "../EMRoIsUnpackingTool.h"
DECLARE_ALGORITHM_FACTORY(L1CaloDecoder) DECLARE_ALGORITHM_FACTORY(L1CaloDecoder)
DECLARE_ALGORITHM_FACTORY(FakeRoI) DECLARE_ALGORITHM_FACTORY(FakeRoI)
//DECLARE_ALGORITHM_FACTORY(RoIGraph) //DECLARE_ALGORITHM_FACTORY(RoIGraph)
DECLARE_ALGORITHM_FACTORY(FakeCTP) DECLARE_ALGORITHM_FACTORY(FakeCTP)
DECLARE_ALGORITHM_FACTORY(L1Decoder)
DECLARE_NAMESPACE_ALGORITHM_FACTORY( AthViews, FakeRoIView ) DECLARE_NAMESPACE_ALGORITHM_FACTORY( AthViews, FakeRoIView )
DECLARE_TOOL_FACTORY(CTPUnpackingTool)
DECLARE_TOOL_FACTORY(EMRoIsUnpackingTool)
DECLARE_FACTORY_ENTRIES( L1Decoder ) DECLARE_FACTORY_ENTRIES( L1Decoder )
{ {
...@@ -18,5 +24,8 @@ DECLARE_FACTORY_ENTRIES( L1Decoder ) ...@@ -18,5 +24,8 @@ DECLARE_FACTORY_ENTRIES( L1Decoder )
DECLARE_ALGORITHM(FakeRoI) DECLARE_ALGORITHM(FakeRoI)
// DECLARE_ALGORITHM(RoIGraph) // DECLARE_ALGORITHM(RoIGraph)
DECLARE_ALGORITHM(FakeCTP) DECLARE_ALGORITHM(FakeCTP)
DECLARE_ALGORITHM(L1Decoder)
DECLARE_NAMESPACE_ALGORITHM( AthViews, FakeRoIView ) DECLARE_NAMESPACE_ALGORITHM( AthViews, FakeRoIView )
DECLARE_TOOL(CTPUnpackingTool)
DECLARE_TOOL(EMRoIsUnpackingTool)
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment