diff --git a/LArCalorimeter/LArRecConditions/LArRecConditions/LArHVData.h b/LArCalorimeter/LArRecConditions/LArRecConditions/LArHVData.h index 71f230f854fe63ea71970ca743c2549d211143ed..b46f3af09dfddebcf31f1ec85ad69e8332aafb7f 100755 --- a/LArCalorimeter/LArRecConditions/LArRecConditions/LArHVData.h +++ b/LArCalorimeter/LArRecConditions/LArRecConditions/LArHVData.h @@ -19,19 +19,15 @@ class LArHVData { friend class LArHVCondAlg; //The conditions alg filling this object public: - LArHVData() { } - ~LArHVData () { } + LArHVData() = default; + ~LArHVData () = default; - /** @brief struct for HV and weight pair + /** @brief struct for HV, current and weight */ struct HV_t { + HV_t(float ihv, float icurr, float iweight) : + hv(ihv),current(icurr),weight(iweight) {}; float hv; - float weight; - }; - - /** @brief struct for Current and weight pair - */ - struct CURRENT_t { float current; float weight; }; @@ -40,19 +36,16 @@ class LArHVData { /** brief Given a Offline Readout ID, return values of HV and Weight */ - StatusCode getHV(const Identifier& id, std::vector< HV_t > & v ) const ; - - /** Given a Offline Readout ID, return values of Current and Weight - */ - StatusCode getCurrent(const Identifier& id, std::vector< CURRENT_t > & v ) const ; + const std::vector<LArHVData::HV_t> & getHV(const Identifier& id) const; typedef std::map<Identifier, std::vector<HV_t> > hvMap; - typedef std::map<Identifier, std::vector<CURRENT_t> > currMap; private: hvMap m_voltage; - currMap m_current; std::set<Identifier> m_updatedCells; + + const std::vector<LArHVData::HV_t> m_empty; + }; inline diff --git a/LArCalorimeter/LArRecConditions/src/LArHVData.cxx b/LArCalorimeter/LArRecConditions/src/LArHVData.cxx index 7b7d2da243868e0b4ee01072a2e50d2602404aa6..a0e8aa3989fea547ad2a424fd184565fa29bfc1d 100644 --- a/LArCalorimeter/LArRecConditions/src/LArHVData.cxx +++ b/LArCalorimeter/LArRecConditions/src/LArHVData.cxx @@ -3,28 +3,15 @@ */ #include "LArRecConditions/LArHVData.h" -#include "GaudiKernel/StatusCode.h" #include "Identifier/Identifier.h" -#include "Identifier/HWIdentifier.h" -StatusCode LArHVData::getHV(const Identifier& id, std::vector< HV_t > & v ) const { - - v.clear(); - if(m_voltage.find(id) != m_voltage.end()) { // fill output - for(auto iptr : m_voltage.at(id)) v.push_back(iptr); - return StatusCode::SUCCESS; - } else { // do not have such data ? - return StatusCode::FAILURE; - } +const std::vector<LArHVData::HV_t> & LArHVData::getHV(const Identifier& id) const { + const auto& it=m_voltage.find(id); + if (it==m_voltage.end()) + return m_empty; //return empty vector + else { + return it->second; + } } + -StatusCode LArHVData::getCurrent(const Identifier& id, std::vector< CURRENT_t > & v ) const { - - v.clear(); - if(m_current.find(id) != m_current.end()) { // fill output - for(auto iptr : m_current.at(id)) v.push_back(iptr); - return StatusCode::SUCCESS; - } else { // do not have such data ? - return StatusCode::FAILURE; - } -} diff --git a/LArCalorimeter/LArRecUtils/src/LArHVCondAlg.cxx b/LArCalorimeter/LArRecUtils/src/LArHVCondAlg.cxx index a1248a5d944d159c0524d2f1657bdd84da6cc96e..f9364d83ef6dc4812d9c3ee4044f9a6b594ef89c 100755 --- a/LArCalorimeter/LArRecUtils/src/LArHVCondAlg.cxx +++ b/LArCalorimeter/LArRecUtils/src/LArHVCondAlg.cxx @@ -356,7 +356,6 @@ StatusCode LArHVCondAlg::fillPayload(LArHVData* hvdata , const float* rValues) const { LArHVData::hvMap &hvmap = hvdata->m_voltage; - LArHVData::currMap &currmap = hvdata->m_current; std::set<Identifier> &updatedCells = hvdata->m_updatedCells; const CaloDetDescrManager* calodetdescrmgr = nullptr; @@ -368,14 +367,11 @@ StatusCode LArHVCondAlg::fillPayload(LArHVData* hvdata updatedCells.clear(); hvmap.clear(); - currmap.clear(); std::vector<LArHVData::HV_t> v; - std::vector<LArHVData::CURRENT_t> ihv; // loop over all EM Identifiers for (auto id: m_larem_id->channel_ids()) { v.clear(); - ihv.clear(); if (abs(m_larem_id->barrel_ec(id))==1 && m_larem_id->sampling(id) > 0) { // LAr EMB unsigned int index = (unsigned int)(m_larem_id->channel_hash(id)); bool hasPathology=false; @@ -391,7 +387,7 @@ StatusCode LArHVCondAlg::fillPayload(LArHVData* hvdata unsigned int nelec = cell->getNumElectrodes(); unsigned int ngap = 2*nelec; double wt = 1./ngap; - v.clear(); ihv.clear(); + v.clear(); for (unsigned int i=0;i<nelec;i++) { const EMBHVElectrode& electrode = cell->getElectrode(i); // " " << electrode->getModule()->getEtaIndex() << " " << electrode->getModule()->getPhiIndex() << @@ -405,8 +401,7 @@ StatusCode LArHVCondAlg::fillPayload(LArHVData* hvdata // Do not bomb, but assume the HV=0 double hv=0; double curr=0; - addHV(v,hv,wt); - addCurr(ihv,curr,wt); + addHV(v,hv,curr,wt); } else { unsigned idx = itrLine - hvlineidx.begin(); double hv=voltage[idx]; @@ -441,13 +436,11 @@ StatusCode LArHVCondAlg::fillPayload(LArHVData* hvdata } msg(MSG::VERBOSE) << "set hv: "<<hv<<endmsg; } - addHV(v,hv,wt); - addCurr(ihv,curr,wt); + addHV(v,hv,curr,wt); } } } hvmap.insert(std::make_pair(id,v)); - currmap.insert(std::make_pair(id,ihv)); } else if (abs(m_larem_id->barrel_ec(id))==1 && m_larem_id->sampling(id) == 0) { // EMBPS const EMBDetectorElement* embElement = dynamic_cast<const EMBDetectorElement*>(calodetdescrmgr->get_element(id)); @@ -465,8 +458,7 @@ StatusCode LArHVCondAlg::fillPayload(LArHVData* hvdata //return StatusCode::FAILURE; double hv=0; double curr=0; - addHV(v,hv,wt); - addCurr(ihv,curr,wt); + addHV(v,hv,curr,wt); } else { unsigned idx = itrLine - hvlineidx.begin(); double hv=voltage[idx]; @@ -483,8 +475,7 @@ StatusCode LArHVCondAlg::fillPayload(LArHVData* hvdata if(curr > 0.) curr *= uAkOhm * rValues[ridx]; else curr = 0; ATH_MSG_VERBOSE("channel. "<<std::hex<<id.get_identifier32()<<std::dec <<" hvline: "<<idx<<" curr. " << curr << " R: "<<rValues[ridx]); } - addHV(v,hv,wt); - addCurr(ihv,curr,wt); + addHV(v,hv,curr,wt); } } @@ -514,8 +505,7 @@ StatusCode LArHVCondAlg::fillPayload(LArHVData* hvdata //return StatusCode::FAILURE; double hv=0; double curr=0; - addHV(v,hv,wt); - addCurr(ihv,curr,wt); + addHV(v,hv,curr,wt); } else { unsigned idx = itrLine - hvlineidx.begin(); double hv=voltage[idx]; @@ -548,8 +538,7 @@ StatusCode LArHVCondAlg::fillPayload(LArHVData* hvdata } } } - addHV(v,hv,wt); - addCurr(ihv,curr,wt); + addHV(v,hv,curr,wt); } } } @@ -571,26 +560,24 @@ StatusCode LArHVCondAlg::fillPayload(LArHVData* hvdata //return StatusCode::FAILURE; double hv=0; double curr=0; - addHV(v,hv,wt); - addCurr(ihv,curr,wt); + addHV(v,hv,curr,wt); } else { unsigned idx = itrLine - hvlineidx.begin(); double hv=voltage[idx]; double curr=current[idx]; - if(rValues) { // modify the current record - unsigned ridx = m_electrodeID->electrodeHash(m_electrodeID->ElectrodeId(3, - hvmodule.getSideIndex(), - hvCabling->getCellModule(id), - 0, // not used in EMECPS - 0, - igap, - 0 // not used in EMECPS - )); - if(curr >0.) curr *= uAkOhm * rValues[ridx]; else curr=0.; - ATH_MSG_VERBOSE("channel. "<<std::hex<<id.get_identifier32()<<std::dec <<" hvline: "<<idx<<" curr. " << curr << " R: "<<rValues[ridx]); - } - addHV(v,hv,wt); - addCurr(ihv,curr,wt); + if(rValues) { // modify the current record + unsigned ridx = m_electrodeID->electrodeHash(m_electrodeID->ElectrodeId(3, + hvmodule.getSideIndex(), + hvCabling->getCellModule(id), + 0, // not used in EMECPS + 0, + igap, + 0 // not used in EMECPS + )); + if(curr >0.) curr *= uAkOhm * rValues[ridx]; else curr=0.; + ATH_MSG_VERBOSE("channel. "<<std::hex<<id.get_identifier32()<<std::dec <<" hvline: "<<idx<<" curr. " << curr << " R: "<<rValues[ridx]); + } + addHV(v,hv,curr,wt); } } @@ -600,12 +587,11 @@ StatusCode LArHVCondAlg::fillPayload(LArHVData* hvdata } hvmap.emplace(id,v); - currmap.emplace(id,ihv); if(!hvdataOld) { // all cells are updated updatedCells.emplace(id); } else { // check if it was changed - std::vector< LArHVData::HV_t > oldv; - ATH_CHECK(hvdataOld->getHV(id, oldv)); + std::vector< LArHVData::HV_t > oldv=hvdataOld->getHV(id); + if (oldv.size()==0) return StatusCode::FAILURE; if(v.size() == oldv.size()) { unsigned int found=0; for(unsigned int i=0;i<v.size();++i) { @@ -626,7 +612,6 @@ StatusCode LArHVCondAlg::fillPayload(LArHVData* hvdata // LAr HEC for( auto id: m_larhec_id->channel_ids()) { v.clear(); - ihv.clear(); unsigned int index = (unsigned int)(m_larhec_id->channel_hash(id)); bool hasPathology=false; if (index<hasPathologyHEC.size()) { @@ -649,8 +634,7 @@ StatusCode LArHVCondAlg::fillPayload(LArHVData* hvdata //return StatusCode::FAILURE; double hv=0; double curr=0; - addHV(v,hv,wt); - addCurr(ihv,curr,wt); + addHV(v,hv,curr,wt); } else { unsigned idx = itrLine - hvlineidx.begin(); double hv=voltage[idx]; @@ -685,17 +669,15 @@ StatusCode LArHVCondAlg::fillPayload(LArHVData* hvdata } } - addHV(v,hv,wt); - addCurr(ihv,curr,wt); + addHV(v,hv,curr,wt); } } hvmap.emplace(id,v); - currmap.emplace(id,ihv); if(!hvdataOld) { // all cells are updated updatedCells.emplace(id); } else { // check if it was changed - std::vector< LArHVData::HV_t > oldv; - ATH_CHECK(hvdataOld->getHV(id, oldv)); + std::vector< LArHVData::HV_t > oldv=hvdataOld->getHV(id); + if (oldv.size()==0) return StatusCode::FAILURE; if(v.size() == oldv.size()) { unsigned int found=0; for(unsigned int i=0;i<v.size();++i) { @@ -715,7 +697,6 @@ StatusCode LArHVCondAlg::fillPayload(LArHVData* hvdata } // loop over FCAL for(auto id: m_larfcal_id->channel_ids()) { // LAr FCAL v.clear(); - ihv.clear(); unsigned int index = (unsigned int)(m_larfcal_id->channel_hash(id)); bool hasPathology=false; if (index<hasPathologyFCAL.size()) { @@ -745,8 +726,7 @@ StatusCode LArHVCondAlg::fillPayload(LArHVData* hvdata //return StatusCode::FAILURE; double hv=0; double curr=0; - addHV(v,hv,wt); - addCurr(ihv,curr,wt); + addHV(v,hv,curr,wt); } else { unsigned idx = itrLine - hvlineidx.begin(); double hv=voltage[idx]; @@ -780,18 +760,16 @@ StatusCode LArHVCondAlg::fillPayload(LArHVData* hvdata } } } - addHV(v,hv,wt); - addCurr(ihv,curr,wt); + addHV(v,hv,curr,wt); } } } hvmap.emplace(id,v); - currmap.emplace(id,ihv); if(!hvdataOld) { // all cells are updated updatedCells.emplace(id); } else { // check if it was changed - std::vector< LArHVData::HV_t > oldv; - ATH_CHECK(hvdataOld->getHV(id, oldv)); + std::vector< LArHVData::HV_t > oldv=hvdataOld->getHV(id); + if (oldv.size()==0) return StatusCode::FAILURE; if(v.size() == oldv.size()) { unsigned int found=0; for(unsigned int i=0;i<v.size();++i) { @@ -813,41 +791,21 @@ StatusCode LArHVCondAlg::fillPayload(LArHVData* hvdata return StatusCode::SUCCESS; } -void LArHVCondAlg::addHV(std::vector< LArHVData::HV_t > & v , double hv, double wt) const +void LArHVCondAlg::addHV(std::vector< LArHVData::HV_t > & v , double hv, double curr, double wt) const { bool found=false; for (unsigned int i=0;i<v.size();i++) { - if (std::fabs(hv-v[i].hv) < 0.1) { + if (std::fabs(hv-v[i].hv) < 0.1 && std::fabs (curr-v[i].current)<0.1) { found=true; v[i].weight += wt; break; } } if (!found) { - LArHVData::HV_t hh; - hh.hv = hv; - hh.weight = wt; - v.push_back(hh); + v.emplace_back(hv,curr,wt); } // not already in the list } -void LArHVCondAlg::addCurr(std::vector< LArHVData::CURRENT_t > & ihv , double current, double wt) const -{ - bool found=false; - for (unsigned int i=0;i<ihv.size();i++) { - if (std::fabs(current-ihv[i].current) < 0.1) { - found=true; - ihv[i].weight += wt; - break; - } - } - if (!found) { - LArHVData::CURRENT_t ii; - ii.current = current; - ii.weight = wt; - ihv.push_back(ii); - } // not already in the list -} std::vector<unsigned int> LArHVCondAlg::getElecList(const Identifier& id, const LArHVPathology& pathologyContainer) const { diff --git a/LArCalorimeter/LArRecUtils/src/LArHVCondAlg.h b/LArCalorimeter/LArRecUtils/src/LArHVCondAlg.h index f289427ddb5dec2d4aa37433cd8d2b07957a43c4..3a9f5b47462806ff902c4ae54c00c03f30968ec9 100755 --- a/LArCalorimeter/LArRecUtils/src/LArHVCondAlg.h +++ b/LArCalorimeter/LArRecUtils/src/LArHVCondAlg.h @@ -110,8 +110,8 @@ class LArHVCondAlg: public AthReentrantAlgorithm , pathVec& hasPathologyFCAL , const float* rValues) const; - void addHV(std::vector< LArHVData::HV_t > & v, double hv, double wt) const; - void addCurr(std::vector< LArHVData::CURRENT_t > & ihv, double curr, double wt) const; + void addHV(std::vector< LArHVData::HV_t > & v, double hv, double curr, double wt) const; + std::vector<unsigned int> getElecList(const Identifier& id, const LArHVPathology& pathologies) const; StatusCode fillUpdatedHVChannelsVec(std::vector<float> &voltage, std::vector<float> ¤t, std::vector<unsigned int> &hvlineidx, std::vector<const CondAttrListCollection* > fldvec) const; diff --git a/LArCalorimeter/LArRecUtils/src/LArHVScaleCorrCondAlg.cxx b/LArCalorimeter/LArRecUtils/src/LArHVScaleCorrCondAlg.cxx index d3971fe10491b7289855ee405dda86727d739023..86c679a8991bd6d0a0967bc23dcf5a34d15602d8 100644 --- a/LArCalorimeter/LArRecUtils/src/LArHVScaleCorrCondAlg.cxx +++ b/LArCalorimeter/LArRecUtils/src/LArHVScaleCorrCondAlg.cxx @@ -312,10 +312,9 @@ StatusCode LArHVScaleCorrCondAlg::getScale(const HASHRANGEVEC& hashranges, T = T - m_T0; const double E_nominal = champ_e(nominal,d); - std::vector<LArHVData::HV_t> hvlist; - StatusCode sc = hvdata->getHV(offid,hvlist); + const std::vector<LArHVData::HV_t>& hvlist=hvdata->getHV(offid); - if (sc.isFailure() || hvlist.size()==0) { + if (hvlist.size() == 0) { mycorr=1.; mynorm=1.; ATH_MSG_WARNING( " HV value no found for cell " << m_larem_id->show_to_string(offid) ); @@ -333,15 +332,6 @@ StatusCode LArHVScaleCorrCondAlg::getScale(const HASHRANGEVEC& hashranges, if (notfound) { ATH_MSG_WARNING( " At least one HV value not found in database for cell " << m_larem_id->show_to_string(offid) ); } - std::vector<LArHVData::CURRENT_t> currlist; - if(m_useCurrentEMB || m_useCurrentFCAL1 || m_useCurrentOthers) { - sc = hvdata->getCurrent(offid,currlist); - if (sc.isFailure() || currlist.size() != hvlist.size()) { - ATH_MSG_WARNING( " Current values not the same size as hv for cell " << m_larem_id->show_to_string(offid) << " resetting to 0" ); - currlist.resize(hvlist.size(),LArHVData::CURRENT_t{0,0}); - } - - } mycorr=0.; mynorm=0.; @@ -350,20 +340,20 @@ StatusCode LArHVScaleCorrCondAlg::getScale(const HASHRANGEVEC& hashranges, if (isbarrelEM) { //const double corr = this->Scale_barrel(hvlist[i].hv)*hvlist[i].weight; //mycorr += corr; - if(m_useCurrentEMB) mycorr += this->Scale_barrel(hvlist[i].hv-currlist[i].current)*hvlist[i].weight; + if(m_useCurrentEMB) mycorr += this->Scale_barrel(hvlist[i].hv-hvlist[i].current)*hvlist[i].weight; else mycorr += this->Scale_barrel(hvlist[i].hv)*hvlist[i].weight; } //FCAL module 1 else if (isFCAL1) { //const double corr = this->Scale_FCAL1(hvlist[i].hv) * hvlist[i].weight; //mycorr+=corr; - if(m_useCurrentFCAL1) mycorr += this->Scale_FCAL1(hvlist[i].hv-currlist[i].current) * hvlist[i].weight; + if(m_useCurrentFCAL1) mycorr += this->Scale_FCAL1(hvlist[i].hv-hvlist[i].current) * hvlist[i].weight; else mycorr += this->Scale_FCAL1(hvlist[i].hv) * hvlist[i].weight; } // other subdetectors else { double E; - if(m_useCurrentOthers) E = champ_e(hvlist[i].hv-currlist[i].current,d); + if(m_useCurrentOthers) E = champ_e(hvlist[i].hv-hvlist[i].current,d); else E = champ_e(hvlist[i].hv,d); // dont correct if E is very close to E nominal to avoid small glitches