diff --git a/Trigger/TrigT1/TrigT1CaloTools/src/L1CPCMXTools.cxx b/Trigger/TrigT1/TrigT1CaloTools/src/L1CPCMXTools.cxx index aaf980b43861261480724edf7dc0352e3158f435..378b509501dadad52e20ab201581059badb6837b 100644 --- a/Trigger/TrigT1/TrigT1CaloTools/src/L1CPCMXTools.cxx +++ b/Trigger/TrigT1/TrigT1CaloTools/src/L1CPCMXTools.cxx @@ -1,26 +1,26 @@ #include <map> -#include <numeric> -#include <utility> // Temporary #include <memory> +#include <numeric> +#include <utility> // Temporary -#include "TrigT1CaloUtils/ClusterProcessorModuleKey.h" -#include "TrigT1CaloUtils/CPAlgorithm.h" -#include "TrigT1CaloUtils/DataError.h" -#include "TrigT1CaloEvent/CPMTobRoI.h" -#include "TrigT1CaloEvent/EmTauROI.h" -#include "TrigT1Interfaces/CoordinateRange.h" -#include "TrigT1Interfaces/CPRoIDecoder.h" -#include "TrigT1Interfaces/TrigT1CaloDefs.h" -#include "TrigT1Interfaces/RecEmTauRoI.h" //// for new getHits function #include "TrigConfInterfaces/ITrigConfigSvc.h" -#include "TrigConfL1Data/L1DataDef.h" #include "TrigConfL1Data/CTPConfig.h" +#include "TrigConfL1Data/ClusterThresholdValue.h" +#include "TrigConfL1Data/L1DataDef.h" #include "TrigConfL1Data/Menu.h" #include "TrigConfL1Data/TriggerThreshold.h" #include "TrigConfL1Data/TriggerThresholdValue.h" -#include "TrigConfL1Data/ClusterThresholdValue.h" +#include "TrigT1CaloEvent/CPMTobRoI.h" +#include "TrigT1CaloEvent/EmTauROI.h" #include "TrigT1CaloTools/L1CPCMXTools.h" +#include "TrigT1CaloUtils/CPAlgorithm.h" +#include "TrigT1CaloUtils/ClusterProcessorModuleKey.h" +#include "TrigT1CaloUtils/DataError.h" +#include "TrigT1Interfaces/CPRoIDecoder.h" +#include "TrigT1Interfaces/CoordinateRange.h" +#include "TrigT1Interfaces/RecEmTauRoI.h" //// for new getHits function +#include "TrigT1Interfaces/TrigT1CaloDefs.h" namespace LVL1 { @@ -29,12 +29,8 @@ namespace LVL1 { L1CPCMXTools::L1CPCMXTools(const std::string &type, const std::string &name, const IInterface *parent) : AthAlgTool(type, name, parent), - m_configSvc("TrigConf::TrigConfigSvc/TrigConfigSvc", name), - m_crates(4), - m_modules(14), - m_maxTobs(5), - m_sysCrate(3), - m_debug(false) { + m_configSvc("TrigConf::TrigConfigSvc/TrigConfigSvc", name), m_crates(4), + m_modules(14), m_maxTobs(5), m_sysCrate(3), m_debug(false) { declareInterface<IL1CPCMXTools>(this); declareProperty("TrigConfigSvc", m_configSvc, "Trigger Config Service"); @@ -81,8 +77,10 @@ void L1CPCMXTools::formCPMTobRoI(const DataVector<CPAlgorithm> *cpAlgorithmVec, // cpmRoiVec->push_back(roi); const EmTauROI *etRoi = (*pos)->produceExternal(); const std::pair<uint32_t, uint32_t> words = roiWord(etRoi); - if (words.first) sorted.insert(words.first); - if (words.second) sorted.insert(words.second); + if (words.first) + sorted.insert(words.first); + if (words.second) + sorted.insert(words.second); } std::set<uint32_t>::const_iterator siter = sorted.begin(); std::set<uint32_t>::const_iterator siterE = sorted.end(); @@ -103,8 +101,10 @@ void L1CPCMXTools::formCPMTobRoI(const DataVector<EmTauROI> *emTauRoiVec, // CPMTobRoI* roi = new CPMTobRoI((*pos)->roiWord()); // cpmRoiVec->push_back(roi); const std::pair<uint32_t, uint32_t> words = roiWord(*pos); - if (words.first) sorted.insert(words.first); - if (words.second) sorted.insert(words.second); + if (words.first) + sorted.insert(words.first); + if (words.second) + sorted.insert(words.second); } std::set<uint32_t>::const_iterator siter = sorted.begin(); std::set<uint32_t>::const_iterator siterE = sorted.end(); @@ -159,7 +159,8 @@ int L1CPCMXTools::isolationEm(unsigned int /*clusterEnergy*/, unsigned int /*emIsol*/, unsigned int /*hadIsol*/, unsigned int hadVeto) const { int isol = 0; - if (hadVeto > 1) isol = 1; + if (hadVeto > 1) + isol = 1; return isol; } @@ -167,7 +168,8 @@ int L1CPCMXTools::isolationTau(unsigned int /*clusterEnergy*/, unsigned int emIsol, unsigned int /*hadIsol*/) const { int isol = 0; - if (emIsol > 4) isol = 1; + if (emIsol > 4) + isol = 1; return isol; } @@ -209,7 +211,7 @@ void L1CPCMXTools::formCMXCPTob( std::vector<int> tobCount(2 * m_crates * m_modules); xAOD::CPMTobRoIContainer::const_iterator it = cpmRoiVec->begin(); xAOD::CPMTobRoIContainer::const_iterator itE = cpmRoiVec->end(); - for (; it != itE; ++it) { // get sorted list + for (; it != itE; ++it) { // get sorted list const xAOD::CPMTobRoI *roi = *it; const int type = roi->type(); const int crate = roi->crate(); @@ -218,7 +220,7 @@ void L1CPCMXTools::formCMXCPTob( const int presenceBit = (roi->chip() << 1) | ((roi->location() >> 2) & - 0x1); // <<== CHECK THIS SHIFT LOOKS OK @@vkousk + 0x1); // <<== CHECK THIS SHIFT LOOKS OK @@vkousk presenceMaps[index] |= (1 << presenceBit); tobCount[index]++; uint32_t key = roi->roiWord(); @@ -232,7 +234,7 @@ void L1CPCMXTools::formCMXCPTob( const xAOD::CPMTobRoI *roi = mit->second; const int type = roi->type(); const int crate = roi->crate(); - const int cmx = 1 - type; // <<== CHECK + const int cmx = 1 - type; // <<== CHECK const int cpm = roi->cpm(); const int chip = (roi->chip() << 1) | ((roi->location() >> 2) & 0x1); const int loc = roi->location() & 0x3; @@ -241,10 +243,12 @@ void L1CPCMXTools::formCMXCPTob( const int isolation = roi->isolation(); const unsigned int presence = presenceMaps[index]; int error = 0; - if (tobCount[index] > m_maxTobs) { // overflow + if (tobCount[index] > m_maxTobs) { // overflow int count = 0; - for (int bit = 0; bit <= chip; ++bit) count += (presence >> bit) & 0x1; - if (count > m_maxTobs) continue; + for (int bit = 0; bit <= chip; ++bit) + count += (presence >> bit) & 0x1; + if (count > m_maxTobs) + continue; LVL1::DataError err; err.set(LVL1::DataError::Overflow); error = err.error(); @@ -255,7 +259,7 @@ void L1CPCMXTools::formCMXCPTob( std::map<int, xAOD::CMXCPTob *>::iterator xit = cmxTobMap.find(key); if (xit == cmxTobMap.end()) { tob = new xAOD::CMXCPTob(); - tob->makePrivateStore(); // make temp store + tob->makePrivateStore(); // make temp store tob->initialize(crate, cmx, cpm, chip, loc); std::vector<uint8_t> vecI(timeslices); std::vector<uint32_t> vecU32(timeslices); @@ -306,8 +310,8 @@ void L1CPCMXTools::formCMXCPHitsCrate( xAOD::CMXCPHitsContainer *cmxHitsCrate) const { uint8_t peakm = 0; std::vector<HitsVector> hitVec(4 * m_crates); - std::vector<ErrorVector> errVec( - 4 * m_crates); // Need overflow for neutral format + std::vector<ErrorVector> errVec(4 * + m_crates); // Need overflow for neutral format HitsVector hit0; HitsVector hit1; HitsVector hits; @@ -328,7 +332,8 @@ void L1CPCMXTools::formCMXCPHitsCrate( addOverflow(errVec[index], error); addOverflow(errVec[index + 1], error); uint8_t peak = tob->peak(); - if (peak > peakm) peakm = peak; + if (peak > peakm) + peakm = peak; } // Save non-zero crate totals for (uint8_t crate = 0; crate < m_crates; ++crate) { @@ -337,7 +342,7 @@ void L1CPCMXTools::formCMXCPHitsCrate( saveCMXCPHits(cmxHitsCrate, hitVec[index], hitVec[index + 1], errVec[index], errVec[index + 1], crate, cmx, xAOD::CMXCPHits::LOCAL, peakm); - if (crate != m_sysCrate) { // REMOTE totals + if (crate != m_sysCrate) { // REMOTE totals uint8_t source = crate; saveCMXCPHits(cmxHitsCrate, hitVec[index], hitVec[index + 1], errVec[index], errVec[index + 1], m_sysCrate, cmx, source, @@ -358,6 +363,7 @@ void L1CPCMXTools::getHits(const xAOD::CMXCPTob *tob, HitsVector &hit0, int cpm = tob->cpm(); int chip = (tob->chip() >> 1) & 0x7; int loc = tob->location() | ((tob->chip() & 1) << 2); + auto err = LVL1::DataError(tob->error()); const int type = 1 - cmx; const int timeslices = energy.size(); @@ -386,8 +392,14 @@ void L1CPCMXTools::getHits(const xAOD::CMXCPTob *tob, HitsVector &hit0, } for (int slice = 0; slice < timeslices; ++slice) { - if (energy[slice] == 0) continue; + if (energy[slice] == 0) + continue; + if (err.get(LVL1::DataError::Overflow)) { + hit0[slice] = 0xffffff; + hit1[slice] = 0xffffff; + continue; + } /* Form an RoI word from the information present Simplest way without duplication is to create a CPMTobRoI */ int et = energy[slice]; @@ -445,7 +457,8 @@ void L1CPCMXTools::formCMXCPHitsSystem( DataVector<xAOD::CMXCPHits>::const_iterator pose = cmxHitsCrate->end(); for (; pos != pose; ++pos) { const xAOD::CMXCPHits *hits = *pos; - if (hits->crate() != m_sysCrate) continue; + if (hits->crate() != m_sysCrate) + continue; uint8_t source = hits->sourceComponent(); if (source != xAOD::CMXCPHits::LOCAL && source != xAOD::CMXCPHits::REMOTE_0 && @@ -453,7 +466,8 @@ void L1CPCMXTools::formCMXCPHitsSystem( source != xAOD::CMXCPHits::REMOTE_2) continue; const uint8_t peak = hits->peak(); - if (peak > peakm) peakm = peak; + if (peak > peakm) + peakm = peak; HitsVector hits0(hits->hitsVec0()); HitsVector hits1(hits->hitsVec1()); ErrorVector err0(hits->errorVec0()); @@ -472,8 +486,8 @@ void L1CPCMXTools::formCMXCPHitsSystem( } } -/** form partial CMX-CP hits (topo) from CMX-CP TOBs */ // Temporary for - // testing +/** form partial CMX-CP hits (topo) from CMX-CP TOBs */ // Temporary for + // testing void L1CPCMXTools::formCMXCPHitsTopo( const xAOD::CMXCPTobContainer *cmxTobVec, @@ -504,7 +518,8 @@ void L1CPCMXTools::formCMXCPHitsTopo( countsLow.resize(timeslices); countsHigh.resize(timeslices); for (int slice = 0; slice < timeslices; ++slice) { - if (energy[slice] == 0) continue; + if (energy[slice] == 0) + continue; // checksum LVL1::DataError err(error[slice]); int overflow = err.get(LVL1::DataError::Overflow); @@ -515,13 +530,14 @@ void L1CPCMXTools::formCMXCPHitsTopo( map[slice] |= (1 << (cpm - 1)); // occupancy counts if (cpm <= 7) { - countsLow[slice] += (1 << (3 * (cpm - 1))); // can't saturate + countsLow[slice] += (1 << (3 * (cpm - 1))); // can't saturate } else { countsHigh[slice] += (1 << (3 * (cpm - 8))); } } uint8_t peak = tob->peak(); - if (peak > peakm) peakm = peak; + if (peak > peakm) + peakm = peak; } // Save non-zero crate totals HitsVector dummy(timeslices); @@ -546,7 +562,8 @@ void L1CPCMXTools::addCMXCPHits(HitsVector &vec1, const HitsVector &vec2) const { int size1 = vec1.size(); int size2 = vec2.size(); - if (size1 < size2) vec1.resize(size2); + if (size1 < size2) + vec1.resize(size2); HitsVector::iterator pos1 = vec1.begin(); HitsVector::iterator pose1 = vec1.end(); HitsVector::const_iterator pos2 = vec2.begin(); @@ -626,4 +643,4 @@ void L1CPCMXTools::saveCMXCPHits( } } -} // end of namespace +} // end of namespace diff --git a/Trigger/TrigT1/TrigT1CaloTools/src/L1JetCMXTools.cxx b/Trigger/TrigT1/TrigT1CaloTools/src/L1JetCMXTools.cxx index 5ac6157ccd10f2b855326bfa33d9fdd02818ca6f..14e56d9fa02040cd019f0eed2f40c96ab69509d3 100644 --- a/Trigger/TrigT1/TrigT1CaloTools/src/L1JetCMXTools.cxx +++ b/Trigger/TrigT1/TrigT1CaloTools/src/L1JetCMXTools.cxx @@ -1,43 +1,39 @@ +#include <algorithm> #include <map> #include <numeric> -#include <algorithm> #include <sstream> #include "GaudiKernel/MsgStream.h" -#include "TrigConfL1Data/CaloInfo.h" #include "TrigConfL1Data/CTPConfig.h" +#include "TrigConfL1Data/CaloInfo.h" +#include "TrigConfL1Data/JetThresholdValue.h" #include "TrigConfL1Data/L1DataDef.h" #include "TrigConfL1Data/Menu.h" #include "TrigConfL1Data/ThresholdConfig.h" #include "TrigConfL1Data/TriggerThreshold.h" #include "TrigConfL1Data/TriggerThresholdValue.h" -#include "TrigConfL1Data/JetThresholdValue.h" -#include "TrigT1CaloEvent/CMXJetTob.h" #include "TrigT1CaloEvent/CMXJetHits.h" +#include "TrigT1CaloEvent/CMXJetTob.h" #include "TrigT1CaloEvent/JEMTobRoI.h" #include "TrigT1CaloEvent/JetROI.h" -#include "TrigT1CaloUtils/JetAlgorithm.h" +#include "TrigT1CaloTools/L1JetCMXTools.h" #include "TrigT1CaloUtils/DataError.h" +#include "TrigT1CaloUtils/JetAlgorithm.h" #include "TrigT1Interfaces/CoordinateRange.h" #include "TrigT1Interfaces/JEPRoIDecoder.h" #include "TrigT1Interfaces/RecJetRoI.h" #include "TrigT1Interfaces/TrigT1CaloDefs.h" -#include "TrigT1CaloTools/L1JetCMXTools.h" namespace LVL1 { /** Constructor */ -L1JetCMXTools::L1JetCMXTools(const std::string& type, const std::string& name, - const IInterface* parent) +L1JetCMXTools::L1JetCMXTools(const std::string &type, const std::string &name, + const IInterface *parent) : AthAlgTool(type, name, parent), - m_configSvc("TrigConf::TrigConfigSvc/TrigConfigSvc", name), - m_crates(2), - m_modules(16), - m_maxTobs(4), - m_sysCrate(1), - m_debug(false) { + m_configSvc("TrigConf::TrigConfigSvc/TrigConfigSvc", name), m_crates(2), + m_modules(16), m_maxTobs(4), m_sysCrate(1), m_debug(false) { declareInterface<IL1JetCMXTools>(this); declareProperty("LVL1ConfigSvc", m_configSvc, "LVL1 Config Service"); } @@ -73,43 +69,43 @@ StatusCode L1JetCMXTools::finalize() { return StatusCode::SUCCESS; } /** form CMX-Jet TOBs from RoIs - single slice */ -void L1JetCMXTools::formCMXJetTob(const xAOD::JEMTobRoIContainer* jemRoiVec, - xAOD::CMXJetTobContainer* cmxTobVec) const { - std::vector<const xAOD::JEMTobRoIContainer*> jemRoiColls(1, jemRoiVec); +void L1JetCMXTools::formCMXJetTob(const xAOD::JEMTobRoIContainer *jemRoiVec, + xAOD::CMXJetTobContainer *cmxTobVec) const { + std::vector<const xAOD::JEMTobRoIContainer *> jemRoiColls(1, jemRoiVec); formCMXJetTob(jemRoiColls, cmxTobVec, 0); } void L1JetCMXTools::formCMXJetTob( - const std::vector<const xAOD::JEMTobRoIContainer*>& jemRoiColls, - xAOD::CMXJetTobContainer* cmxTobVec, int peak) const { - std::map<uint32_t, const xAOD::JEMTobRoI*> jemRoiMap; - std::map<int, xAOD::CMXJetTob*> cmxTobMap; + const std::vector<const xAOD::JEMTobRoIContainer *> &jemRoiColls, + xAOD::CMXJetTobContainer *cmxTobVec, int peak) const { + std::map<uint32_t, const xAOD::JEMTobRoI *> jemRoiMap; + std::map<int, xAOD::CMXJetTob *> cmxTobMap; xAOD::JEMTobRoIContainer::const_iterator it; int timeslices = jemRoiColls.size(); for (int slice = 0; slice < timeslices; ++slice) { - const xAOD::JEMTobRoIContainer* jemRoiVec = jemRoiColls[slice]; + const xAOD::JEMTobRoIContainer *jemRoiVec = jemRoiColls[slice]; jemRoiMap.clear(); std::vector<unsigned int> presenceMaps(m_crates * m_modules); std::vector<int> tobCount(m_crates * m_modules); xAOD::JEMTobRoIContainer::const_iterator it = jemRoiVec->begin(); xAOD::JEMTobRoIContainer::const_iterator itE = jemRoiVec->end(); - for (; it != itE; ++it) { // get sorted list - const xAOD::JEMTobRoI* roi = *it; + for (; it != itE; ++it) { // get sorted list + const xAOD::JEMTobRoI *roi = *it; const int crate = roi->crate(); const int jem = roi->jem(); const int index = crate * m_modules + jem; - const int presenceBit = roi->frame(); // <<== CHECK + const int presenceBit = roi->frame(); // <<== CHECK presenceMaps[index] |= (1 << presenceBit); tobCount[index]++; uint32_t key = roi->roiWord(); jemRoiMap.insert(std::make_pair(key, roi)); } - std::map<uint32_t, const xAOD::JEMTobRoI*>::const_iterator mit = + std::map<uint32_t, const xAOD::JEMTobRoI *>::const_iterator mit = jemRoiMap.begin(); - std::map<uint32_t, const xAOD::JEMTobRoI*>::const_iterator mitE = + std::map<uint32_t, const xAOD::JEMTobRoI *>::const_iterator mitE = jemRoiMap.end(); for (; mit != mitE; ++mit) { - const xAOD::JEMTobRoI* roi = mit->second; + const xAOD::JEMTobRoI *roi = mit->second; const int crate = roi->crate(); const int jem = roi->jem(); const int frame = roi->frame(); @@ -119,22 +115,24 @@ void L1JetCMXTools::formCMXJetTob( const int energySm = roi->energySmall(); const unsigned int presence = presenceMaps[index]; int error = 0; - if (tobCount[index] > m_maxTobs) { // overflow + if (tobCount[index] > m_maxTobs) { // overflow int count = 0; - for (int bit = 0; bit <= frame; ++bit) count += (presence >> bit) & 0x1; - if (count > m_maxTobs) continue; + for (int bit = 0; bit <= frame; ++bit) + count += (presence >> bit) & 0x1; + if (count > m_maxTobs) + continue; LVL1::DataError err; err.set(LVL1::DataError::Overflow); error = err.error(); } const int key = (((((crate << 4) | jem) << 3) | frame) << 2) | loc; - xAOD::CMXJetTob* tob = 0; - std::map<int, xAOD::CMXJetTob*>::iterator xit = cmxTobMap.find(key); + xAOD::CMXJetTob *tob = 0; + std::map<int, xAOD::CMXJetTob *>::iterator xit = cmxTobMap.find(key); if (xit == cmxTobMap.end()) { tob = new xAOD::CMXJetTob; tob->makePrivateStore(); tob->initialize(crate, jem, frame, loc); - if (timeslices > 0) { // TODO(amazurov): need to check >1 or >0 + if (timeslices > 0) { // TODO(amazurov): need to check >1 or >0 std::vector<uint16_t> vecU16(timeslices); std::vector<uint32_t> vecU32(timeslices); tob->addTob(vecU16, vecU16, vecU32, vecU16); @@ -158,11 +156,11 @@ void L1JetCMXTools::formCMXJetTob( } void L1JetCMXTools::formCMXJetHits( - const xAOD::CMXJetTobContainer* cmxTobVec, - xAOD::CMXJetHitsContainer* cmxHitsVec) const { - xAOD::CMXJetHitsContainer* cmxHitsCrate = new xAOD::CMXJetHitsContainer; - xAOD::CMXJetHitsContainer* cmxHitsSys = new xAOD::CMXJetHitsContainer; - xAOD::CMXJetHitsContainer* cmxHitsTopo = new xAOD::CMXJetHitsContainer; + const xAOD::CMXJetTobContainer *cmxTobVec, + xAOD::CMXJetHitsContainer *cmxHitsVec) const { + xAOD::CMXJetHitsContainer *cmxHitsCrate = new xAOD::CMXJetHitsContainer; + xAOD::CMXJetHitsContainer *cmxHitsSys = new xAOD::CMXJetHitsContainer; + xAOD::CMXJetHitsContainer *cmxHitsTopo = new xAOD::CMXJetHitsContainer; formCMXJetHitsCrate(cmxTobVec, cmxHitsCrate); formCMXJetHitsSystem(cmxHitsCrate, cmxHitsSys); @@ -178,19 +176,19 @@ void L1JetCMXTools::formCMXJetHits( } void L1JetCMXTools::formCMXJetHitsCrate( - const xAOD::CMXJetTobContainer* cmxTobVec, - xAOD::CMXJetHitsContainer* cmxHitsCrate) const { + const xAOD::CMXJetTobContainer *cmxTobVec, + xAOD::CMXJetHitsContainer *cmxHitsCrate) const { int peakm = 0; std::vector<HitsVector> hitVecM(2 * m_crates); std::vector<HitsVector> hitVecF(2 * m_crates); - std::vector<ErrorVector> errVecM(2 * m_crates); // Need overflow + std::vector<ErrorVector> errVecM(2 * m_crates); // Need overflow std::vector<ErrorVector> errVecF(2 * m_crates); HitsVector hit10, hit20; HitsVector hit11, hit21; xAOD::CMXJetTobContainer::const_iterator pos = cmxTobVec->begin(); xAOD::CMXJetTobContainer::const_iterator pose = cmxTobVec->end(); for (; pos != pose; ++pos) { - const xAOD::CMXJetTob* tob = *pos; + const xAOD::CMXJetTob *tob = *pos; const int index = 2 * tob->crate(); const std::vector<uint32_t> error(tob->errorVec()); hit10.clear(); @@ -209,7 +207,8 @@ void L1JetCMXTools::formCMXJetHitsCrate( addOverflow(errVecM[index], error); addOverflow(errVecM[index + 1], error); const int peak = tob->peak(); - if (peak > peakm) peakm = peak; + if (peak > peakm) + peakm = peak; } // Save non-zero crate totals for (int crate = 0; crate < m_crates; ++crate) { @@ -220,7 +219,7 @@ void L1JetCMXTools::formCMXJetHitsCrate( saveCMXJetHits(cmxHitsCrate, hitVecF[index], hitVecF[index + 1], errVecF[index], errVecF[index + 1], crate, xAOD::CMXJetHits::LOCAL_FORWARD, peakm); - if (crate != m_sysCrate) { // REMOTE totals + if (crate != m_sysCrate) { // REMOTE totals saveCMXJetHits(cmxHitsCrate, hitVecM[index], hitVecM[index + 1], errVecM[index], errVecM[index + 1], m_sysCrate, xAOD::CMXJetHits::REMOTE_MAIN, peakm); @@ -232,8 +231,8 @@ void L1JetCMXTools::formCMXJetHitsCrate( } void L1JetCMXTools::formCMXJetHitsSystem( - const xAOD::CMXJetHitsContainer* cmxHitsCrate, - xAOD::CMXJetHitsContainer* cmxHitsSys) const { + const xAOD::CMXJetHitsContainer *cmxHitsCrate, + xAOD::CMXJetHitsContainer *cmxHitsSys) const { int peakm = 0; HitsVector systemMain0(1); HitsVector systemMain1(1); @@ -243,8 +242,9 @@ void L1JetCMXTools::formCMXJetHitsSystem( xAOD::CMXJetHitsContainer::const_iterator pos = cmxHitsCrate->begin(); xAOD::CMXJetHitsContainer::const_iterator pose = cmxHitsCrate->end(); for (; pos != pose; ++pos) { - const xAOD::CMXJetHits* hits = *pos; - if (hits->crate() != m_sysCrate) continue; + const xAOD::CMXJetHits *hits = *pos; + if (hits->crate() != m_sysCrate) + continue; int source = hits->sourceComponent(); if (source != xAOD::CMXJetHits::LOCAL_MAIN && source != xAOD::CMXJetHits::LOCAL_FORWARD && @@ -252,7 +252,8 @@ void L1JetCMXTools::formCMXJetHitsSystem( source != xAOD::CMXJetHits::REMOTE_FORWARD) continue; int peak = hits->peak(); - if (peak > peakm) peakm = peak; + if (peak > peakm) + peakm = peak; HitsVector hitsVec0(hits->hitsVec0()); HitsVector hitsVec1(hits->hitsVec1()); if (source == xAOD::CMXJetHits::LOCAL_MAIN || @@ -263,7 +264,7 @@ void L1JetCMXTools::formCMXJetHitsSystem( addCMXJetHits(systemFwd0, hitsVec0, FORWARD_HITS); addCMXJetHits(systemFwd1, hitsVec1, FORWARD_HITS); } - ErrorVector error(hits->errorVec0()); // all have same error so redundant? + ErrorVector error(hits->errorVec0()); // all have same error so redundant? addOverflow(errVec, error); } // Save non-zero system totals @@ -274,15 +275,15 @@ void L1JetCMXTools::formCMXJetHitsSystem( } void L1JetCMXTools::formCMXJetHitsTopo( - const xAOD::CMXJetTobContainer* cmxTobVec, - xAOD::CMXJetHitsContainer* cmxHitsTopo) const { + const xAOD::CMXJetTobContainer *cmxTobVec, + xAOD::CMXJetHitsContainer *cmxHitsTopo) const { int peakm = 0; int timeslices = 0; std::vector<HitsVector> hitVec(4 * m_crates); xAOD::CMXJetTobContainer::const_iterator pos = cmxTobVec->begin(); xAOD::CMXJetTobContainer::const_iterator pose = cmxTobVec->end(); for (; pos != pose; ++pos) { - const xAOD::CMXJetTob* tob = *pos; + const xAOD::CMXJetTob *tob = *pos; const int crate = tob->crate(); const int jem = tob->jem(); const int frame = tob->frame(); @@ -294,20 +295,21 @@ void L1JetCMXTools::formCMXJetHitsTopo( tob->energySmallVec().end()); // const std::vector<int>& error(tob->errorVec()); timeslices = energyLg.size(); - HitsVector& checksum(hitVec[index]); - HitsVector& map(hitVec[index + 1]); - HitsVector& countsLow(hitVec[index + 2]); - HitsVector& countsHigh(hitVec[index + 3]); + HitsVector &checksum(hitVec[index]); + HitsVector &map(hitVec[index + 1]); + HitsVector &countsLow(hitVec[index + 2]); + HitsVector &countsHigh(hitVec[index + 3]); checksum.resize(timeslices); map.resize(timeslices); countsLow.resize(timeslices); countsHigh.resize(timeslices); for (int slice = 0; slice < timeslices; ++slice) { - if (energyLg[slice] == 0 && energySm[slice] == 0) continue; + if (energyLg[slice] == 0 && energySm[slice] == 0) + continue; // checksum // LVL1::DataError err(error[slice]); // const int overflow = err.get(LVL1::DataError::Overflow); - const int overflow = 0; // don't include overflow as not in slink data + const int overflow = 0; // don't include overflow as not in slink data checksum[slice] += jem + frame + loc + energyLg[slice] + energySm[slice] + overflow; checksum[slice] &= 0xffff; @@ -315,13 +317,14 @@ void L1JetCMXTools::formCMXJetHitsTopo( map[slice] |= (1 << jem); // occupancy counts if (jem < 8) { - countsLow[slice] += (1 << (3 * jem)); // can't saturate + countsLow[slice] += (1 << (3 * jem)); // can't saturate } else { countsHigh[slice] += (1 << (3 * (jem - 8))); } } const int peak = tob->peak(); - if (peak > peakm) peakm = peak; + if (peak > peakm) + peakm = peak; } // Save non-zero crate totals HitsVector dummy(timeslices); @@ -340,24 +343,36 @@ void L1JetCMXTools::formCMXJetHitsTopo( /** Temporary for testing, mostly lifted from JetAlgorithm */ -void L1JetCMXTools::getHits(const xAOD::CMXJetTob* tob, HitsVector& hit10, - HitsVector& hit11, HitsVector& hit20, - HitsVector& hit21) const { +void L1JetCMXTools::getHits(const xAOD::CMXJetTob *tob, HitsVector &hit10, + HitsVector &hit11, HitsVector &hit20, + HitsVector &hit21) const { using namespace TrigConf; - const std::vector<uint16_t>& energyLg(tob->energyLargeVec()); - const std::vector<uint16_t>& energySm(tob->energySmallVec()); + const std::vector<uint16_t> &energyLg(tob->energyLargeVec()); + const std::vector<uint16_t> &energySm(tob->energySmallVec()); const int timeslices = energyLg.size(); + auto err = LVL1::DataError(tob->error()); + hit10.assign(timeslices, 0); hit11.assign(timeslices, 0); hit20.assign(timeslices, 0); hit21.assign(timeslices, 0); - std::vector<TrigConf::TriggerThreshold*> thresholds = + std::vector<TrigConf::TriggerThreshold *> thresholds = m_configSvc->ctpConfig()->menu().thresholdVector(); - std::vector<TriggerThreshold*>::const_iterator it; - std::vector<TriggerThreshold*>::const_iterator itE = thresholds.end(); + std::vector<TriggerThreshold *>::const_iterator it; + std::vector<TriggerThreshold *>::const_iterator itE = thresholds.end(); for (int slice = 0; slice < timeslices; ++slice) { - if (energyLg[slice] == 0 && energySm[slice] == 0) continue; + if (err.get(LVL1::DataError::Overflow)) { + hit10[slice] = 0xffff; + hit11[slice] = 0xffff; + hit20[slice] = 0xffff; + hit21[slice] = 0xffff; + continue; + } + + if (energyLg[slice] == 0 && energySm[slice] == 0) + continue; + xAOD::JEMTobRoI tobRoi; tobRoi.makePrivateStore(); tobRoi.initialize(tob->crate(), tob->jem(), tob->frame(), tob->location(), @@ -369,7 +384,7 @@ void L1JetCMXTools::getHits(const xAOD::CMXJetTob* tob, HitsVector& hit10, for (int i = 0; i < numThresholdsHalf * 2; ++i) { if (roi.passedThreshold(i)) { - HitsVector& hit = i < numThresholdsHalf ? hit10 : hit11; + HitsVector &hit = i < numThresholdsHalf ? hit10 : hit11; int ibit = i < numThresholdsHalf ? i : i - numThresholdsHalf; hit[slice] |= (1 << (ibit * numBitsPerCounter)); } @@ -380,19 +395,19 @@ void L1JetCMXTools::getHits(const xAOD::CMXJetTob* tob, HitsVector& hit10, for (int i = 0; i < numThresholdsHalf * 2; ++i) { if (roi.passedThreshold(10 + i)) { - HitsVector& hit = i < numThresholdsHalf ? hit20 : hit21; + HitsVector &hit = i < numThresholdsHalf ? hit20 : hit21; int ibit = i < numThresholdsHalf ? i : i - numThresholdsHalf; hit[slice] |= (1 << (ibit * numBitsPerCounter)); } } - } // end slice for-loop + } // end slice for-loop } /** Add overflow bit */ -void L1JetCMXTools::addOverflow(ErrorVector& hitErr, - const ErrorVector& tobErr) const { +void L1JetCMXTools::addOverflow(ErrorVector &hitErr, + const ErrorVector &tobErr) const { const int timeslices = tobErr.size(); hitErr.resize(timeslices); for (int slice = 0; slice < timeslices; ++slice) { @@ -409,11 +424,12 @@ void L1JetCMXTools::addOverflow(ErrorVector& hitErr, /** Add hits from second vector to first */ -void L1JetCMXTools::addCMXJetHits(HitsVector& vec1, const HitsVector& vec2, +void L1JetCMXTools::addCMXJetHits(HitsVector &vec1, const HitsVector &vec2, HitsType type) const { int size1 = vec1.size(); int size2 = vec2.size(); - if (size1 < size2) vec1.resize(size2); + if (size1 < size2) + vec1.resize(size2); HitsVector::iterator pos1 = vec1.begin(); HitsVector::iterator pose1 = vec1.end(); HitsVector::const_iterator pos2 = vec2.begin(); @@ -468,12 +484,12 @@ unsigned int L1JetCMXTools::addHits(unsigned int hitMult, unsigned int hitVec, /** Merge CMX-Jet hits vectors */ void L1JetCMXTools::mergeCMXJetHits( - xAOD::CMXJetHitsContainer* cmxHitsVec1, - xAOD::CMXJetHitsContainer* cmxHitsVec2) const { + xAOD::CMXJetHitsContainer *cmxHitsVec1, + xAOD::CMXJetHitsContainer *cmxHitsVec2) const { int size = cmxHitsVec2->size(); for (int index = 0; index < size; ++index) { - xAOD::CMXJetHits* hitsIn = 0; - xAOD::CMXJetHits* hitsOut = 0; + xAOD::CMXJetHits *hitsIn = 0; + xAOD::CMXJetHits *hitsOut = 0; cmxHitsVec2->swapElement(index, hitsIn, hitsOut); cmxHitsVec1->push_back(hitsOut); } @@ -482,19 +498,19 @@ void L1JetCMXTools::mergeCMXJetHits( /** Save non-zero CMX-Jet hits */ -void L1JetCMXTools::saveCMXJetHits(xAOD::CMXJetHitsContainer* cmxHitsVec, - const HitsVector& hits0, - const HitsVector& hits1, - const ErrorVector& err0, - const ErrorVector& err1, int crate, +void L1JetCMXTools::saveCMXJetHits(xAOD::CMXJetHitsContainer *cmxHitsVec, + const HitsVector &hits0, + const HitsVector &hits1, + const ErrorVector &err0, + const ErrorVector &err1, int crate, int source, int peak) const { if (std::accumulate(hits0.begin(), hits0.end(), 0) || std::accumulate(hits1.begin(), hits1.end(), 0)) { - xAOD::CMXJetHits* item = new xAOD::CMXJetHits; + xAOD::CMXJetHits *item = new xAOD::CMXJetHits; item->makePrivateStore(); item->initialize(crate, source, hits0, hits1, err0, err1, peak); cmxHitsVec->push_back(item); } } -} // end of namespace +} // end of namespace