44 std::string AtlasVersion = geoModel->atlasVersion();
45 std::string MuonVersion = geoModel->muonVersionOverride();
46 std::string detectorKey = MuonVersion.empty() ? AtlasVersion : MuonVersion;
47 std::string detectorNode = MuonVersion.empty() ?
"ATLAS" :
"MuonSpectrometer";
52 IRDBRecordset_ptr switchSet = accessSvc->getRecordsetPtr(
"HwSwIdMapping", detectorKey, detectorNode);
54 if ((*switchSet).size() == 0) {
55 ATH_MSG_WARNING(
"Old Atlas Version : " << AtlasVersion <<
" Only Online Identifier. Falling back to HwSwIdMapping-00 tag");
56 switchSet = accessSvc->getRecordsetPtr(
"HwSwIdMapping",
"HwSwIdMapping-00");
59 for (
unsigned int irow = 0; irow < (*switchSet).size(); ++irow) {
60 const IRDBRecord* switches = (*switchSet)[irow];
61 std::string hardwareName = switches->
getString(
"HARDNAME");
62 std::string stName = switches->
getString(
"SOFTNAME");
63 int stPhi = switches->
getInt(
"SOFTOCTANT");
64 int stEta = switches->
getInt(
"SOFTIZ");
72 return StatusCode::SUCCESS;
77 return StatusCode::SUCCESS;
81 ATH_MSG_FATAL(
"Failed to load conditions from "<<key.fullKey());
82 return StatusCode::FAILURE;
84 wh.addDependency(readHandle);
85 return StatusCode::SUCCESS;
99 return StatusCode::SUCCESS;
108 return StatusCode::SUCCESS;
115 <<
" In theory this should not be called, but may happen"
116 <<
" if multiple concurrent events are being processed out of order.");
117 return StatusCode::SUCCESS;
119 std::unique_ptr<MdtCondDbData> writeCdo{std::make_unique<MdtCondDbData>(
m_idHelperSvc->mdtIdHelper())};
137 ATH_MSG_DEBUG(
"Recorded new " << writeHandle.
key() <<
" with range " << writeHandle.
getRange() <<
" into Conditions Store");
139 return StatusCode::SUCCESS;
148 return StatusCode::FAILURE;
151 ATH_MSG_DEBUG(
"Size of CondAttrListCollection " << readHandle.
fullKey() <<
" readCdo->size()= " << readCdo->
size());
153 std::vector<Identifier> cachedDeadMultiLayersId_standby;
155 const unsigned int chanNum = itr.first;
156 const coral::AttributeList& atr = itr.second;
157 const std::string& hv_payload = readCdo->
chanName(chanNum);
160 if (atr.size() == 1) {
161 hv_name = *(
static_cast<const std::string*
>((atr[
"fsm_currentState"]).addressOfData()));
163 auto tokens =
tokenize(hv_name,
" ");
164 auto tokens2 =
tokenize(hv_payload,
"_");
166 if (tokens[0] !=
"ON" && tokens[0] !=
"STANDBY" && tokens[0] !=
"UNKNOWN") {
167 int multilayer =
atoi(tokens2[3]);
168 const auto &chamber_name = tokens2[2];
174 cachedDeadMultiLayersId_standby.push_back(MultiLayerId);
177 if (tokens[0] ==
"STANDBY") {
178 int multilayer =
atoi(tokens2[3]);
179 const auto &chamber_name = tokens2[2];
185 cachedDeadMultiLayersId_standby.push_back(MultiLayerId);
194 std::map<Identifier, float> chamberML_V1;
195 std::map<Identifier, float> chamberML_V0;
202 return StatusCode::FAILURE;
205 ATH_MSG_DEBUG(
"Size of CondAttrListCollection " << readHandle_v0.
fullKey() <<
" readCdo->size()= " << readCdo_v0->
size());
212 return StatusCode::FAILURE;
215 ATH_MSG_DEBUG(
"Size of CondAttrListCollection " << readHandle_v1.
fullKey() <<
" readCdo->size()= " << readCdo_v1->
size());
219 const unsigned int chanNum = itr_v0.first;
220 const coral::AttributeList& atr_v0 = itr_v0.second;
221 const std::string& setPointsV0_payload = readCdo_v0->
chanName(chanNum);
222 float setPointsV0_name{0.};
224 if (atr_v0.size() == 1) {
225 setPointsV0_name = *(
static_cast<const float*
>((atr_v0[
"readBackSettings_v0"]).addressOfData()));
227 auto tokens2 =
tokenize(setPointsV0_payload,
"_");
229 int multilayer =
atoi(tokens2[3]);
230 const auto &chamber_name = tokens2[2];
233 chamberML_V0[MultiLayerId] = setPointsV0_name;
240 const unsigned int chanNum = itr_v1.first;
241 const coral::AttributeList& atr_v1 = itr_v1.second;
242 const std::string& setPointsV1_payload = readCdo_v1->
chanName(chanNum);
243 float setPointsV1_name{0.};
245 if (atr_v1.size() == 1) {
246 setPointsV1_name = *(
static_cast<const float*
>((atr_v1[
"readBackSettings_v1"]).addressOfData()));
249 auto tokens2=
tokenize(setPointsV1_payload,
"_");
251 int multilayer =
atoi(tokens2[3]);
252 const auto &chamber_name = tokens2[2];
255 chamberML_V1[MultiLayerId] = setPointsV1_name;
261 for (
const Identifier& MultilayerId_ch : cachedDeadMultiLayersId_standby) {
262 if (chamberML_V1.find(MultilayerId_ch)->second == chamberML_V0.find(MultilayerId_ch)->second) {
263 ATH_MSG_DEBUG(
"Chamber has correct Voltage V1 = " << chamberML_V1.find(MultilayerId_ch)->second
264 <<
" V0= " << chamberML_V0.find(MultilayerId_ch)->second);
266 ATH_MSG_DEBUG(
"Chamber has wrong correct Voltage V1 = " << chamberML_V1.find(MultilayerId_ch)->second
267 <<
" V0= " << chamberML_V0.find(MultilayerId_ch)->second);
273 return StatusCode::SUCCESS;
282 return StatusCode::FAILURE;
284 ATH_MSG_DEBUG(
"Size of CondAttrListCollection " << readHandle.
fullKey() <<
" readCdo->size()= " << readCdo->
size());
285 for (
const auto& [chanNum, atr] : *readCdo) {
286 const std::string& hv_payload = readCdo->
chanName(chanNum);
289 if (!atr.size()) {
continue; }
290 hv_name = *(
static_cast<const std::string*
>((atr[
"fsm_currentState"]).addressOfData()));
292 auto tokens =
tokenize(hv_name,
" ");
293 auto tokens2 =
tokenize(hv_payload,
"_");
294 if (tokens[0] !=
"ON") {
295 const auto &chamber_name = tokens2[2];
301 return StatusCode::SUCCESS;
307 ATH_MSG_DEBUG(
"Size of CondAttrListCollection " << readCdo.
fullKey() <<
" readCdo->size()= " << readCdo->size());
308 for (
const auto& [chanNum, atr] : **readCdo) {
309 if (!atr.size()) {
continue; }
311 const std::string& hv_payload = readCdo->chanName(chanNum);
312 const std::string& hv_name_ml1{*(
static_cast<const std::string*
>((atr[
"fsmCurrentState_ML1"]).addressOfData()))};
313 const std::string& hv_name_ml2{*(
static_cast<const std::string*
>((atr[
"fsmCurrentState_ML2"]).addressOfData()))};
314 const float hv_v0_ml1{*(
static_cast<const float*
>((atr[
"v0set_ML1"]).addressOfData()))};
315 const float hv_v1_ml1{*(
static_cast<const float*
>((atr[
"v1set_ML1"]).addressOfData()))};
316 const float hv_v0_ml2{*(
static_cast<const float*
>((atr[
"v0set_ML2"]).addressOfData()))};
317 const float hv_v1_ml2{*(
static_cast<const float*
>((atr[
"v1set_ML2"]).addressOfData()))};
320 if (!chamberId.
is_valid())
continue;
322 const float standbyVolt,
323 const float readyVolt,
324 const int multiLayer) {
329 if ( (std::find(goodStates.begin(), goodStates.end(), dcsState) == goodStates.end()) ||
333 writeCdo.
setHvState(mlId, dcsState, standbyVolt, readyVolt);
338 return StatusCode::SUCCESS;
347 return StatusCode::FAILURE;
349 ATH_MSG_DEBUG(
"Size of CondAttrListCollection " << readHandle.
fullKey() <<
" readCdo->size()= " << readCdo->
size());
351 for (
const auto& [chanNum, atr] : *readCdo) {
352 if (!atr.size()) {
continue; }
353 const std::string& lv_payload = readCdo->
chanName(chanNum);
354 const std::string& lv_name{*
static_cast<const std::string*
>((atr[
"fsmCurrentState_LV"]).addressOfData())};
355 if (lv_payload.empty() || lv_name.empty()){
356 ATH_MSG_WARNING(
"The read data with chanNum "<<chanNum<<
", lv_payload: "<<lv_payload<<
", hv_name: "<<lv_name
357 <<
". Does not have any fsmCurrentState_LV attribute. "
358 <<
"May be this is related to ATLASRECTS-6920 / ATLASRECTS-6879. Skip it");
362 auto tokens =
tokenize(lv_name,
" ");
364 if (tokens[0] !=
"ON") {
370 return StatusCode::SUCCESS;
380 return StatusCode::FAILURE;
382 ATH_MSG_DEBUG(
"Size of CondAttrListCollection " << readHandle.
fullKey() <<
" readCdo->size()= " << readCdo->
size());
385 const coral::AttributeList& atr = itr.second;
386 const std::string& chamber_dropped{*(
static_cast<const std::string*
>((atr[
"Chambers_disabled"]).addressOfData()))};
388 auto tokens =
tokenize(chamber_dropped,
" ");
389 for (
auto & token : tokens) {
391 const auto &chamber_name = token;
397 return StatusCode::SUCCESS;
406 return StatusCode::FAILURE;
409 ATH_MSG_DEBUG(
"Size of CondAttrListCollection " << readHandle.
fullKey() <<
" readCdo->size()= " << readCdo->
size());
412 const coral::AttributeList& atr = itr.second;
413 const std::string& chamber_name{*(
static_cast<const std::string*
>((atr[
"Chambers_Name"]).addressOfData()))};
414 const std::string& list_mlayer{*(
static_cast<const std::string*
>((atr[
"Dead_multilayer"]).addressOfData()))};
415 const std::string& list_layer{*(
static_cast<const std::string*
>((atr[
"Dead_layer"]).addressOfData()))};
416 const std::string& list_tube{*(
static_cast<const std::string*
>((atr[
"Dead_tube"]).addressOfData()))};
419 auto tokens =
tokenize(list_tube,
" ");
420 auto tokens_mlayer =
tokenize(list_mlayer,
" ");
421 auto tokens_layer =
tokenize(list_layer,
" ");
423 for (
auto & token : tokens) {
426 int ml =
atoi(token.substr(0, 1));
427 int layer =
atoi(token.substr(1, 2));
428 int tube =
atoi(token.substr(2));
435 for (
unsigned int i = 0; i < tokens_mlayer.size(); i++) {
436 if (tokens_mlayer[i] !=
"0") {
437 int ml =
atoi(tokens_mlayer[i].substr(0));
444 for (
unsigned int i = 0; i < tokens_layer.size(); i++) {
445 if (tokens_layer[i] !=
"0") {
446 int ml =
atoi(tokens_layer[i].substr(0, 1));
447 int layer =
atoi(tokens_layer[i].substr(1));
455 return StatusCode::SUCCESS;
464 return StatusCode::FAILURE;
467 ATH_MSG_DEBUG(
"Size of CondAttrListCollection " << readHandle.
fullKey() <<
" readCdo->size()= " << readCdo->
size());
470 const coral::AttributeList& atr = itr.second;
472 std::string dead_tube = *(
static_cast<const std::string*
>((atr[
"DeadTube_List"]).addressOfData()));
473 std::string chamber_name = *(
static_cast<const std::string*
>((atr[
"Chamber_Name"]).addressOfData()));
475 auto tokens =
tokenize(dead_tube,
" ");
478 for (
auto & token : tokens) {
479 int ml =
atoi(token.substr(0, 1));
480 int layer =
atoi(token.substr(1, 2));
481 int tube =
atoi(token.substr(2));
488 return StatusCode::SUCCESS;
497 return StatusCode::FAILURE;
500 ATH_MSG_DEBUG(
"Size of CondAttrListCollection " << readHandle.
fullKey() <<
" readCdo->size()= " << readCdo->
size());
501 for (
const auto &[chanNum, atr] : *readCdo) {
505 const std::string& hv_payload = readCdo->
chanName(chanNum);
506 const std::string& hv_name{*(
static_cast<const std::string*
>((atr[
"fsm_currentState"]).addressOfData()))};
508 auto tokens =
tokenize(hv_name,
" ");
510 auto tokens2 =
tokenize(hv_payload,
"_");
512 if (tokens[0] !=
"ON") {
518 return StatusCode::SUCCESS;
521 if (chamber[2] ==
'Y' || chamber[2] ==
'X') chamber[2] =
'S';
522 auto itr =
m_chamberNames.find(chamber.substr(0, chamber.find(
'_')));
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_VERBOSE(x)
#define ATH_MSG_WARNING(x)
bool isValid(const T &p)
Av: we implement here an ATLAS-sepcific convention: all particles which are 99xxxxx are fine.
Definition of the abstract IRDBAccessSvc interface.
std::shared_ptr< IRDBRecordset > IRDBRecordset_ptr
Definition of the abstract IRDBRecord interface.
Definition of the abstract IRDBRecordset interface.
CondAttrListCollection::ChanAttrListPair readOutPair
Base class for conditions algorithms.
This class is a collection of AttributeLists where each one is associated with a channel number.
const std::string & chanName(ChanNum chanNum) const
find name for particular channel
size_type size() const
number of Chan/AttributeList pairs
ChanAttrListMap::value_type ChanAttrListPair
ChanAttrListMap::const_iterator const_iterator
IRDBRecord is one record in the IRDBRecordset object.
virtual const std::string & getString(const std::string &fieldName) const =0
Get string field value.
virtual int getInt(const std::string &fieldName) const =0
Get int field value.
bool is_valid() const
Check if id is in a valid state.
dataBaseKey_t m_readKey_folder_da_pslv
StatusCode loadDroppedChambers(const EventContext &ctx, MdtCondDbData &dataOut, bool isMC) const
virtual StatusCode initialize() override
dataBaseKey_t m_readKey_folder_mc_deadTubes
Gaudi::Property< bool > m_isOnline
SG::WriteCondHandle< MdtCondDbData > writeHandle_t
StatusCode loadMcDeadTubes(const EventContext &ctx, MdtCondDbData &dataOut) const
dataBaseKey_t m_readKey_folder_da_psv1
StatusCode loadDataLv(const EventContext &ctx, MdtCondDbData &dataOut) const
dataBaseKey_t m_readKey_folder_da_droppedChambers
StatusCode loadMcDeadElements(const EventContext &ctx, MdtCondDbData &dataOut) const
SG::ReadCondHandleKey< CondAttrListCollection > dataBaseKey_t
dataBaseKey_t m_readKey_folder_mc_droppedChambers
dataBaseKey_t m_readKey_folder_da_hv
MdtCondDbAlg(const std::string &name, ISvcLocator *svc)
Identifier identifyChamber(std::string chamber) const
dataBaseKey_t m_readKey_folder_da_psv0
StatusCode loadDependencies(const EventContext &ctx, writeHandle_t &wh) const
StatusCode addDHDependency(const EventContext &ctx, const dataBaseKey_t &key, writeHandle_t &wh) const
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
virtual StatusCode execute(const EventContext &) const override
StatusCode loadDataPsHv(const EventContext &ctx, MdtCondDbData &dataOut) const
Gaudi::Property< bool > m_isRun1
StatusCode loadDataHv(const EventContext &ctx, MdtCondDbData &dataOut) const
SG::WriteCondHandleKey< MdtCondDbData > m_writeKey
dataBaseKey_t m_readKey_folder_mc_deadElements
Gaudi::Property< bool > m_checkOnSetPoint
dataBaseKey_t m_readKey_folder_mc_noisyChannels
std::map< std::string, Identifier > m_chamberNames
dataBaseKey_t m_readKey_folder_da_pshv
Gaudi::Property< bool > m_isData
StatusCode loadDataPsLv(const EventContext &ctx, MdtCondDbData &dataOut) const
dataBaseKey_t m_readKey_folder_da_lv
StatusCode loadMcNoisyChannels(const EventContext &ctx, MdtCondDbData &dataOut) const
void setDeadTube(const Identifier &ident)
The indiviudal tube is dead.
void setDeadMultilayer(const Identifier &ident)
All tubes in a multi layer are dead.
void setDeadLayer(const Identifier &ident)
All tubes in a drift layer are dead.
void setHvState(const Identifier &multiLayerID, const DcsFsmState state, const float standByVolt, const float readyVolt)
Adds a DCS state to the conditions object multiLayerID -> Identifier of a tube in the multilayer stat...
void setDeadChamber(const Identifier &ident)
All tubes in a chamber are dead.
Identifier multilayerID(const Identifier &channeldID) const
int numberOfMultilayers(const Identifier &id) const
const DataObjID & fullKey() const
const std::string & key() const
const EventIDRange & getRange() const
StatusCode record(const EventIDRange &range, T *t)
record handle, with explicit range DEPRECATED
const DataObjID & fullKey() const
std::vector< std::string > tokenize(const std::string &the_str, std::string_view delimiters)
Splits the string into smaller substrings.
int atoi(std::string_view str)
Helper functions to unpack numbers decoded in string into integers and doubles The strings are requir...
DcsFsmState getFsmStateEnum(const std::string &fsmState)