diff --git a/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondAlg/MuonCondAlg/MdtCondDbAlg.h b/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondAlg/MuonCondAlg/MdtCondDbAlg.h index 38f7c4948ec13b9b7e94c75b990283bf1284a712..acee61209c6fa442ebcda96b7866b1593a235e58 100644 --- a/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondAlg/MuonCondAlg/MdtCondDbAlg.h +++ b/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondAlg/MuonCondAlg/MdtCondDbAlg.h @@ -44,8 +44,7 @@ private: StatusCode loadDataPsLv (writeHandle_t& wh, MdtCondDbData* dataOut, const EventContext& ctx) const; StatusCode loadDataHv (writeHandle_t& wh, MdtCondDbData* dataOut, const EventContext& ctx) const; StatusCode loadDataLv (writeHandle_t& wh, MdtCondDbData* dataOut, const EventContext& ctx) const; - StatusCode loadDataDroppedChambers(writeHandle_t& wh, MdtCondDbData* dataOut, const EventContext& ctx) const; - StatusCode loadMcDroppedChambers (writeHandle_t& wh, MdtCondDbData* dataOut, const EventContext& ctx) const; + StatusCode loadDroppedChambers (writeHandle_t& wh, MdtCondDbData* dataOut, const EventContext& ctx, bool isMC) const; StatusCode loadMcDeadElements (writeHandle_t& wh, MdtCondDbData* dataOut, const EventContext& ctx) const; StatusCode loadMcDeadTubes (writeHandle_t& wh, MdtCondDbData* dataOut, const EventContext& ctx) const; StatusCode loadMcNoisyChannels (writeHandle_t& wh, MdtCondDbData* dataOut, const EventContext& ctx) const; diff --git a/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondAlg/src/MdtCondDbAlg.cxx b/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondAlg/src/MdtCondDbAlg.cxx index e65a94e14bd245d9a3436ae12ba59326fcd1159f..a0c0e468ebc8b629464615e8af7d8cbedd3c8fcf 100644 --- a/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondAlg/src/MdtCondDbAlg.cxx +++ b/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondAlg/src/MdtCondDbAlg.cxx @@ -75,14 +75,14 @@ MdtCondDbAlg::execute(const EventContext& ctx) const { if(m_isData && m_isRun1) { ATH_CHECK(loadDataPsHv(writeHandle, writeCdo.get(),ctx)); ATH_CHECK(loadDataPsLv(writeHandle, writeCdo.get(),ctx)); - ATH_CHECK(loadDataDroppedChambers(writeHandle, writeCdo.get(),ctx)); + ATH_CHECK(loadDroppedChambers(writeHandle, writeCdo.get(),ctx,false)); } else if(m_isData && !m_isRun1) { ATH_CHECK(loadDataHv(writeHandle, writeCdo.get(),ctx)); ATH_CHECK(loadDataLv(writeHandle, writeCdo.get(),ctx)); } else { - ATH_CHECK(loadMcDroppedChambers(writeHandle, writeCdo.get(),ctx)); + ATH_CHECK(loadDroppedChambers(writeHandle, writeCdo.get(),ctx,true)); ATH_CHECK(loadMcNoisyChannels(writeHandle, writeCdo.get(),ctx)); //ATH_CHECK(loadMcDeadElements (rangeW, writeCdo.get(),ctx));// keep for future development //ATH_CEHCK(loadMcDeadTubes (rangeW, writeCdo.get(),ctx));// keep for future development @@ -471,9 +471,11 @@ MdtCondDbAlg::loadDataLv(writeHandle_t& wh, MdtCondDbData* writeCdo, const Event //loadDataDroppedChambers StatusCode -MdtCondDbAlg::loadDataDroppedChambers(writeHandle_t& wh, MdtCondDbData* writeCdo, const EventContext& ctx) const { +MdtCondDbAlg::loadDroppedChambers(writeHandle_t& wh, MdtCondDbData* writeCdo, const EventContext& ctx, bool isMC) const { - SG::ReadCondHandle<CondAttrListCollection> readHandle{m_readKey_folder_da_droppedChambers,ctx}; + SG::ReadCondHandle<CondAttrListCollection> readHandle{ (isMC ? m_readKey_folder_mc_droppedChambers : + m_readKey_folder_da_droppedChambers), + ctx}; const CondAttrListCollection* readCdo{*readHandle}; if(readCdo==0){ ATH_MSG_ERROR("Null pointer to the read conditions object"); @@ -504,37 +506,6 @@ MdtCondDbAlg::loadDataDroppedChambers(writeHandle_t& wh, MdtCondDbData* writeCdo } - -// loadMcDroppedChambers -StatusCode -MdtCondDbAlg::loadMcDroppedChambers(writeHandle_t& wh, MdtCondDbData* writeCdo, const EventContext& ctx) const { - - SG::ReadCondHandle<CondAttrListCollection> readHandle{m_readKey_folder_mc_droppedChambers,ctx}; - const CondAttrListCollection* readCdo{*readHandle}; - if(readCdo==0){ - ATH_MSG_ERROR("Null pointer to the read conditions object"); - return StatusCode::FAILURE; - } - wh.addDependency(readHandle); - ATH_MSG_DEBUG("Size of CondAttrListCollection " << readHandle.fullKey() << " readCdo->size()= " << readCdo->size()); - ATH_MSG_DEBUG("Range of input is " << readHandle.getRange() << ", range of output is " << wh.getRange()); - - CondAttrListCollection::const_iterator itr; - for(itr = readCdo->begin(); itr != readCdo->end(); ++itr) { - - const coral::AttributeList& atr = itr->second; - std::string chamber_name; - chamber_name = *(static_cast<const std::string*>((atr["Chambers_disabled"]).addressOfData())); - - Identifier ChamberId = m_condMapTool->ConvertToOffline(chamber_name); - writeCdo->setDeadChamber(ChamberId); - } - - return StatusCode::SUCCESS; -} - - - // loadMcDeadElements StatusCode MdtCondDbAlg::loadMcDeadElements(writeHandle_t& wh, MdtCondDbData* writeCdo, const EventContext& ctx) const { @@ -674,47 +645,29 @@ MdtCondDbAlg::loadMcNoisyChannels(writeHandle_t& wh, MdtCondDbData* writeCdo, co ATH_MSG_DEBUG("Size of CondAttrListCollection " << readHandle.fullKey() << " readCdo->size()= " << readCdo->size()); ATH_MSG_DEBUG("Range of input is " << readHandle.getRange() << ", range of output is " << wh.getRange() ); - CondAttrListCollection::const_iterator itr; - unsigned int chan_index=0; - for(itr = readCdo->begin(); itr != readCdo->end(); ++itr) { + for(const auto& itr: *readCdo) { - unsigned int chanNum = readCdo->chanNum (chan_index); - std::string hv_payload = readCdo->chanName(chanNum ); + unsigned int chanNum = itr.first; std::string hv_name; - itr = readCdo->chanAttrListPair(chanNum); - const coral::AttributeList& atr = itr->second; + std::string hv_payload = readCdo->chanName(chanNum); - if(atr.size()==1) { + const coral::AttributeList& atr = itr.second; + + if(atr.size()){ hv_name = *(static_cast<const std::string*>((atr["fsm_currentState"]).addressOfData())); std::string delimiter = " "; std::vector<std::string> tokens; MuonCalib::MdtStringUtils::tokenize(hv_name, tokens, delimiter); - - std::string thename; std::string delimiter2 = "_"; std::vector<std::string> tokens2; - MuonCalib::MdtStringUtils::tokenize(hv_payload, tokens2, delimiter2); - - if(tokens[0]!="ON" && tokens[0]!="STANDBY" && tokens[0]!="UNKNOWN"){ - int multilayer = atoi(const_cast<char*>(tokens2[3].c_str())); - std::string chamber_name = tokens2[2]; - Identifier ChamberId = m_condMapTool->ConvertToOffline(chamber_name); - Identifier MultiLayerId = m_idHelperSvc->mdtIdHelper().channelID(ChamberId,multilayer,1,1); - thename = chamber_name+"_multilayer"+tokens2[3]; - writeCdo->setDeadMultilayer(thename, MultiLayerId); - writeCdo->setDeadChamber (ChamberId); - } - if(tokens[0]=="STANDBY"){ - int multilayer = atoi(const_cast<char*>(tokens2[3].c_str())); - std::string chamber_name = tokens2[2]; - Identifier ChamberId = m_condMapTool->ConvertToOffline(chamber_name); - Identifier MultiLayerId = m_idHelperSvc->mdtIdHelper().channelID(ChamberId,multilayer,1,1); - thename = chamber_name+"_multilayer"+tokens2[3]; - writeCdo->setDeadMultilayer(thename, MultiLayerId); - writeCdo->setDeadChamber (ChamberId); + MuonCalib::MdtStringUtils::tokenize(hv_payload,tokens2,delimiter2); + + if(tokens[0]!="ON"){ + std::string chamber_name= tokens2[2]; + Identifier ChamberId = m_condMapTool->ConvertToOffline(chamber_name); + writeCdo->setDeadStation(chamber_name, ChamberId); } } - chan_index++; } return StatusCode::SUCCESS; } diff --git a/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondTool/src/MDT_MapConversion.cxx b/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondTool/src/MDT_MapConversion.cxx index f7c2db3054337a33c995ce2773e4ec2a338b135c..6eeac945bc9d03c27b9228d3502d3bcd03d7043c 100644 --- a/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondTool/src/MDT_MapConversion.cxx +++ b/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondTool/src/MDT_MapConversion.cxx @@ -147,10 +147,16 @@ const Identifier& MDT_MapConversion::ConvertToOffline(const std::string &OnlineI //const Identifier m_Online_empty; if (m_Chamber_Map.size()!=0){ - const Identifier & OfflineName = (m_Chamber_Map.find(OnlineId)->second); + const auto& mapit = m_Chamber_Map.find(OnlineId); + if (ATH_UNLIKELY(mapit == m_Chamber_Map.end())) { + log << MSG::ERROR << "Lookup of ID " << OnlineId << " in MDT_MapConversion::ConvertToOffline failed" << endmsg; + return m_Online_empty; // not quite right but should never get here + } + const Identifier & OfflineName = (mapit->second); return OfflineName; + } else { + return m_Online_empty; } - else return m_Online_empty; }