diff --git a/Trigger/TrigT1/TrigT1CaloUtils/src/SystemEnergy.cxx b/Trigger/TrigT1/TrigT1CaloUtils/src/SystemEnergy.cxx index bf55b67a4dfcaaf6e8411d83ec0a440ce13a181e..61ab9e6b05db23e06571586bb15862591064d729 100755 --- a/Trigger/TrigT1/TrigT1CaloUtils/src/SystemEnergy.cxx +++ b/Trigger/TrigT1/TrigT1CaloUtils/src/SystemEnergy.cxx @@ -43,6 +43,8 @@ SystemEnergy::SystemEnergy(const DataVector<CrateEnergy> *crates, ServiceHandle< m_debug(false) { + int xyMax = 1 << (m_sumBits - 1); + /** Get Ex, Ey, ET sums from crates and form global sums <br> Propagate overflows and test for new ones <br> */ @@ -62,14 +64,8 @@ SystemEnergy::SystemEnergy(const DataVector<CrateEnergy> *crates, ServiceHandle< m_systemEt += (*it)->et(); } - // In the current implementation we could not trust to - // overflow errors for restricted sums: - // m_overflowX = m_overflowX | (*it)->exOverflow(); - // m_overflowY = m_overflowY | (*it)->eyOverflow(); - // m_overflowT = m_overflowT | (*it)->etOverflow(); - - m_overflowX = m_overflowX | ((*it)->ex() == -(m_maxEtSumThr + 1)); - m_overflowY = m_overflowY | ((*it)->ey() == -(m_maxEtSumThr + 1)); + m_overflowX = m_overflowX | ((*it)->ex() == -xyMax); + m_overflowY = m_overflowY | ((*it)->ey() == -xyMax); m_overflowT = m_overflowT | ((*it)->et() == m_maxEtSumThr); if ((*it)->restricted()) @@ -81,18 +77,18 @@ SystemEnergy::SystemEnergy(const DataVector<CrateEnergy> *crates, ServiceHandle< m_systemEt = m_etSumOverflow; } - /** Check for overflow of Ex, Ey sums */ - int xyMax = 1 << (m_sumBits - 1); - if ((abs(m_systemEx) > xyMax) || m_overflowX) + + if ((abs(m_systemEx) >= xyMax) || m_overflowX) { m_overflowX = 1; - m_systemEx = xyMax; + m_systemEx = -xyMax; } - if ((abs(m_systemEy) > xyMax) || m_overflowY) + + if ((abs(m_systemEy) >= xyMax) || m_overflowY) { m_overflowY = 1; - m_systemEy = xyMax; + m_systemEy = -xyMax; } if (m_debug) @@ -125,9 +121,16 @@ SystemEnergy::SystemEnergy(unsigned int et, unsigned int exTC, unsigned int eyTC m_metSigHits(0), m_debug(false) { + m_systemEx = decodeTC(exTC); m_systemEy = decodeTC(eyTC); + int xyMax = 1 << (m_sumBits - 1); + + m_overflowT = m_systemEt == m_etSumOverflow; + m_overflowX = m_systemEx == -xyMax; + m_overflowY = m_systemEy == -xyMax; + if (m_debug) { std::cout << "SystemEnergy results: " << std::endl