diff --git a/Trigger/TrigT1/L1CaloFEX/L1CaloFEXByteStream/src/jFexRoiByteStreamTool.cxx b/Trigger/TrigT1/L1CaloFEX/L1CaloFEXByteStream/src/jFexRoiByteStreamTool.cxx index b3bde7ff8007cdffa3397f285f0e3196a16836e3..f0808860ee28f239b9ecce1ff30235f24102338d 100644 --- a/Trigger/TrigT1/L1CaloFEX/L1CaloFEXByteStream/src/jFexRoiByteStreamTool.cxx +++ b/Trigger/TrigT1/L1CaloFEX/L1CaloFEXByteStream/src/jFexRoiByteStreamTool.cxx @@ -108,6 +108,45 @@ StatusCode jFexRoiByteStreamTool::initialize() { return StatusCode::SUCCESS; } +StatusCode jFexRoiByteStreamTool::start() { + + // Retrieve the L1 menu configuration + SG::ReadHandle<TrigConf::L1Menu> l1Menu (m_l1MenuKey); + ATH_CHECK(l1Menu.isValid()); + + try { + const auto& thrExtraInfo = l1Menu->thrExtraInfo(); + const TrigConf::L1ThrExtraInfo_jTAU & thr_jTAU = thrExtraInfo.jTAU(); + const TrigConf::L1ThrExtraInfo_jJ & thr_jJ = thrExtraInfo.jJ(); + const TrigConf::L1ThrExtraInfo_jLJ & thr_jLJ = thrExtraInfo.jLJ(); + const TrigConf::L1ThrExtraInfo_jEM & thr_jEM = thrExtraInfo.jEM(); + const TrigConf::L1ThrExtraInfo_jTE & thr_jTE = thrExtraInfo.jTE(); + const TrigConf::L1ThrExtraInfo_jXE & thr_jXE = thrExtraInfo.jXE(); + + ATH_CHECK(thr_jTAU.isValid()); + ATH_CHECK(thr_jJ.isValid() ); + ATH_CHECK(thr_jLJ.isValid() ); + ATH_CHECK(thr_jEM.isValid() ); + ATH_CHECK(thr_jTE.isValid() ); + ATH_CHECK(thr_jXE.isValid() ); + + m_jTauRes = thr_jTAU.resolutionMeV(); + m_jJRes = thr_jJ.resolutionMeV(); + m_jLJRes = thr_jLJ.resolutionMeV(); + m_jEMRes = thr_jEM.resolutionMeV(); + m_jXERes = thr_jXE.resolutionMeV(); + m_jTERes = thr_jTE.resolutionMeV(); + + } catch (const std::exception& e) { + ATH_MSG_ERROR("Exception reading L1Menu: " << e.what()); + return StatusCode::FAILURE; + } + + return StatusCode::SUCCESS; + +} + + // BS->xAOD conversion StatusCode jFexRoiByteStreamTool::convertFromBS(const std::vector<const ROBF*>& vrobf, const EventContext& ctx) const { @@ -146,17 +185,7 @@ StatusCode jFexRoiByteStreamTool::convertFromBS(const std::vector<const ROBF*>& ATH_MSG_DEBUG("Recorded jFexMETRoIContainer with key " << jXEContainer.key()); - // Retrieve the L1 menu configuration - SG::ReadHandle<TrigConf::L1Menu> l1Menu (m_l1MenuKey,ctx); - ATH_CHECK(l1Menu.isValid()); - - const auto& thrExtraInfo = l1Menu->thrExtraInfo(); - const TrigConf::L1ThrExtraInfo_jTAU & thr_jTAU = thrExtraInfo.jTAU(); - const TrigConf::L1ThrExtraInfo_jJ & thr_jJ = thrExtraInfo.jJ(); - const TrigConf::L1ThrExtraInfo_jLJ & thr_jLJ = thrExtraInfo.jLJ(); - const TrigConf::L1ThrExtraInfo_jEM & thr_jEM = thrExtraInfo.jEM(); - const TrigConf::L1ThrExtraInfo_jTE & thr_jTE = thrExtraInfo.jTE(); - const TrigConf::L1ThrExtraInfo_jXE & thr_jXE = thrExtraInfo.jXE(); + // Iterate over ROBFragments to decode for (const ROBF* rob : vrobf) { @@ -259,7 +288,7 @@ StatusCode jFexRoiByteStreamTool::convertFromBS(const std::vector<const ROBF*>& for(unsigned int i=tobIndex; i>tobIndex-n_xjEM; i--) { const auto [eta, phi ] = getEtaPhi(jfex, fpga, vec_words.at(i-1),"jEM xTOB"); jEMContainer->push_back( std::make_unique<xAOD::jFexFwdElRoI>() ); - jEMContainer->back()->initialize(jfex, fpga, vec_words.at(i-1),0, thr_jEM.resolutionMeV(), eta, phi); + jEMContainer->back()->initialize(jfex, fpga, vec_words.at(i-1),0, m_jEMRes, eta, phi); } //removing xjEM counter from TOBs tobIndex -= n_xjEM; @@ -268,7 +297,7 @@ StatusCode jFexRoiByteStreamTool::convertFromBS(const std::vector<const ROBF*>& for(unsigned int i=tobIndex; i>tobIndex-n_xjTau; i--) { const auto [eta, phi ] = getEtaPhi(jfex, fpga, vec_words.at(i-1),"jTau xTOB"); jTauContainer->push_back( std::make_unique<xAOD::jFexTauRoI>() ); - jTauContainer->back()->initialize(jfex, fpga, vec_words.at(i-1),0, thr_jTAU.resolutionMeV(), eta, phi); + jTauContainer->back()->initialize(jfex, fpga, vec_words.at(i-1),0, m_jTauRes, eta, phi); } //removing xjTau counter from TOBs tobIndex -= n_xjTau; @@ -277,7 +306,7 @@ StatusCode jFexRoiByteStreamTool::convertFromBS(const std::vector<const ROBF*>& for(unsigned int i=tobIndex; i>tobIndex-n_xjLJ; i--) { const auto [eta, phi ] = getEtaPhi(jfex, fpga, vec_words.at(i-1),"jLJ xTOB"); jLJContainer->push_back( std::make_unique<xAOD::jFexLRJetRoI>() ); - jLJContainer->back()->initialize(jfex, fpga, vec_words.at(i-1),0, thr_jLJ.resolutionMeV(), eta, phi); + jLJContainer->back()->initialize(jfex, fpga, vec_words.at(i-1),0, m_jLJRes, eta, phi); } //removing xjLJ counter from TOBs tobIndex -= n_xjLJ; @@ -286,7 +315,7 @@ StatusCode jFexRoiByteStreamTool::convertFromBS(const std::vector<const ROBF*>& for(unsigned int i=tobIndex; i>tobIndex-n_xjJ; i--) { const auto [eta, phi ] = getEtaPhi(jfex, fpga, vec_words.at(i-1),"jJ xTOB"); jJContainer->push_back( std::make_unique<xAOD::jFexSRJetRoI>() ); - jJContainer->back()->initialize(jfex, fpga, vec_words.at(i-1),0, thr_jJ.resolutionMeV(), eta, phi); + jJContainer->back()->initialize(jfex, fpga, vec_words.at(i-1),0, m_jJRes, eta, phi); } //removing xjJ counter from TOBs tobIndex -= n_xjJ; @@ -306,7 +335,7 @@ StatusCode jFexRoiByteStreamTool::convertFromBS(const std::vector<const ROBF*>& if(fpga == jBits::FPGA_U1 || fpga == jBits::FPGA_U4 ){ for(unsigned int i=tobIndex; i>tobIndex-n_jXE; i--) { jXEContainer->push_back( std::make_unique<xAOD::jFexMETRoI>() ); - jXEContainer->back()->initialize(jfex, fpga, vec_words.at(i-1), thr_jXE.resolutionMeV()); + jXEContainer->back()->initialize(jfex, fpga, vec_words.at(i-1), m_jXERes); } } //removing jXE counter from TOBs @@ -317,7 +346,7 @@ StatusCode jFexRoiByteStreamTool::convertFromBS(const std::vector<const ROBF*>& if(fpga == jBits::FPGA_U1 || fpga == jBits::FPGA_U4 ) { for(unsigned int i=tobIndex; i>tobIndex-n_jTE; i--) { jTEContainer->push_back( std::make_unique<xAOD::jFexSumETRoI>() ); - jTEContainer->back()->initialize(jfex, fpga, vec_words.at(i-1), thr_jTE.resolutionMeV()); + jTEContainer->back()->initialize(jfex, fpga, vec_words.at(i-1), m_jTERes); } } //removing jTE counter from TOBs @@ -327,7 +356,7 @@ StatusCode jFexRoiByteStreamTool::convertFromBS(const std::vector<const ROBF*>& for(unsigned int i=tobIndex; i>tobIndex-n_jEM; i--) { const auto [eta, phi ] = getEtaPhi(jfex, fpga, vec_words.at(i-1),"jEM TOB"); jEMContainer->push_back( std::make_unique<xAOD::jFexFwdElRoI>() ); - jEMContainer->back()->initialize(jfex, fpga, vec_words.at(i-1),1, thr_jEM.resolutionMeV(), eta, phi); + jEMContainer->back()->initialize(jfex, fpga, vec_words.at(i-1),1, m_jEMRes, eta, phi); } //removing jEM counter from TOBs tobIndex -= n_jEM; @@ -336,7 +365,7 @@ StatusCode jFexRoiByteStreamTool::convertFromBS(const std::vector<const ROBF*>& for(unsigned int i=tobIndex; i>tobIndex-n_jTau; i--) { const auto [eta, phi ] = getEtaPhi(jfex, fpga, vec_words.at(i-1),"jTau TOB"); jTauContainer->push_back( std::make_unique<xAOD::jFexTauRoI>() ); - jTauContainer->back()->initialize(jfex, fpga, vec_words.at(i-1),1, thr_jTAU.resolutionMeV(), eta, phi); + jTauContainer->back()->initialize(jfex, fpga, vec_words.at(i-1),1, m_jTauRes, eta, phi); } //removing jTau counter from TOBs tobIndex -= n_jTau; @@ -345,7 +374,7 @@ StatusCode jFexRoiByteStreamTool::convertFromBS(const std::vector<const ROBF*>& for(unsigned int i=tobIndex; i>tobIndex-n_jLJ; i--) { const auto [eta, phi ] = getEtaPhi(jfex, fpga, vec_words.at(i-1),"jLJ TOB"); jLJContainer->push_back( std::make_unique<xAOD::jFexLRJetRoI>() ); - jLJContainer->back()->initialize(jfex, fpga, vec_words.at(i-1),1, thr_jLJ.resolutionMeV(), eta, phi); + jLJContainer->back()->initialize(jfex, fpga, vec_words.at(i-1),1, m_jLJRes, eta, phi); } //removing jLJ counter from TOBs tobIndex -= n_jLJ; @@ -354,7 +383,7 @@ StatusCode jFexRoiByteStreamTool::convertFromBS(const std::vector<const ROBF*>& for(unsigned int i=tobIndex; i>tobIndex-n_jJ; i--) { const auto [eta, phi ] = getEtaPhi(jfex, fpga, vec_words.at(i-1),"jJ TOB"); jJContainer->push_back( std::make_unique<xAOD::jFexSRJetRoI>() ); - jJContainer->back()->initialize(jfex, fpga, vec_words.at(i-1),1, thr_jJ.resolutionMeV(), eta, phi); + jJContainer->back()->initialize(jfex, fpga, vec_words.at(i-1),1, m_jJRes, eta, phi); } //removing jJ counter from TOBs tobIndex -= n_jJ; diff --git a/Trigger/TrigT1/L1CaloFEX/L1CaloFEXByteStream/src/jFexRoiByteStreamTool.h b/Trigger/TrigT1/L1CaloFEX/L1CaloFEXByteStream/src/jFexRoiByteStreamTool.h index d04322f44a8cf5adc23ce6f09de28dab92563e22..af930c17ff59b0bf5f0ae9974ff6cc5230dd259f 100644 --- a/Trigger/TrigT1/L1CaloFEX/L1CaloFEXByteStream/src/jFexRoiByteStreamTool.h +++ b/Trigger/TrigT1/L1CaloFEX/L1CaloFEXByteStream/src/jFexRoiByteStreamTool.h @@ -48,6 +48,7 @@ class jFexRoiByteStreamTool : public extends<AthAlgTool, IL1TriggerByteStreamToo // ------------------------- IAlgTool methods -------------------------------- virtual StatusCode initialize() override; + virtual StatusCode start() override; // ------------------------- IL1TriggerByteStreamTool methods ---------------------- /// BS->xAOD conversion @@ -102,6 +103,13 @@ class jFexRoiByteStreamTool : public extends<AthAlgTool, IL1TriggerByteStreamToo static const int s_phiBit = 1; static const int s_etaMask = 0x1f; static const int s_phiMask = 0xf; + + int m_jTauRes = 0; + int m_jJRes = 0; + int m_jLJRes = 0; + int m_jEMRes = 0; + int m_jXERes = 0; + int m_jTERes = 0;