39 ATH_MSG_FATAL(
"The event data (PixelDetElStatusEventDataBaseKey) and cond data (PixelDetElStatusCondDataBaseKey) keys cannot be set at the same time.");
57 return StatusCode::FAILURE;
60 ATH_MSG_FATAL(
"Logic error: status id too large. Cannot be represented by a bit");
61 return StatusCode::FAILURE;
68 if (isActiveStatus==
"OK") {
m_activeStatus.push_back(PixelDCSStatusData::DCSModuleStatus::OK); }
72 else if (isActiveStatus==
"NOSTATUS") {
m_activeStatus.push_back(PixelDCSStatusData::DCSModuleStatus::NOSTATUS); }
74 ATH_MSG_ERROR(
"No matching DCS status " << isActiveStatus <<
" in DCSModuleStatus");
75 return StatusCode::FAILURE;
78 ATH_MSG_FATAL(
"Logic error: status id too large. Cannot be represented by a bit");
79 return StatusCode::FAILURE;
84 return StatusCode::SUCCESS;
93 if (not idcErrCont.
isValid()) {
return nullptr; }
95 return idcErrCont.
cptr();
102 if (idcErrContPtr==
nullptr) {
103 cacheEntry->
reset(ctx.evt(),
nullptr);
106 cacheEntry->
reset(ctx.evt(), idcErrContPtr->cache());
108 ATH_MSG_VERBOSE(
"PixelConditionsSummaryTool Cache for the event reset " << cacheEntry->
eventId <<
" with IDC container" << idcErrContPtr);
114 std::scoped_lock<std::mutex> lock{*m_cacheMutex.get(ctx)};
132 if (not pixelDetEleHandle.
isValid() or elements==
nullptr) {
143 if (cacheEntry ==
nullptr){
144 std::scoped_lock<std::mutex> lock{*m_cacheMutex.get(ctx)};
147 const auto *idcCachePtr = cacheEntry->
IDCCache;
148 if (idcCachePtr==
nullptr) {
174 if (
hasBSError(moduleHash, ctx, cacheEntry)) {
return true; }
181 int indexFE = (1+chFE)*maxHash+
static_cast<int>(moduleHash);
205 if (useByteStream &&
getBSErrorWord(moduleHash,moduleHash+52736,ctx)!=1) {
return false; }
208 bool isDCSActive =
false;
210 if (istate==dcsstate_data->
getModuleStatus(moduleHash)) { isDCSActive=
true; }
212 if (!isDCSActive) {
return false; }
226 if (useByteStream &&
getBSErrorWord(moduleHash,moduleHash+52736,ctx)!=1) {
return false; }
229 bool isDCSActive =
false;
231 if (istate==dcsstate_data->
getModuleStatus(moduleHash)) { isDCSActive=
true; }
233 if (!isDCSActive) {
return false; }
250 if (
hasBSError(moduleHash, ctx)) {
return false; }
253 bool isDCSActive =
false;
255 if (istate==dcsstate_data->
getModuleStatus(moduleHash)) { isDCSActive=
true; }
257 if (!isDCSActive) {
return false; }
260 bool isDCSGood =
false;
262 if (activeStatus==dcsstatus_data->
getModuleStatus(moduleHash)) { isDCSGood=
true; }
264 if (!isDCSGood) {
return false; }
272 if (
hasBSError(moduleHash, elementId, ctx)) {
return false; }
279 inline void andStatus(
const std::unordered_map<int, int> &status_map,
unsigned int status_mask, std::vector<bool> &module_status) {
280 for (
const std::pair<const int, int> &elm : status_map ) {
282 module_status.at(elm.first) = module_status.at(elm.first) && (status_mask & (1<<elm.second));
285 inline void andNotStatus(
const std::unordered_map<int, int> &status_map, std::vector<bool> &module_status) {
286 for (
const std::pair<const int, int> &elm : status_map ) {
288 module_status.at(elm.first) = module_status.at(elm.first) && (elm.second==0);
300 throw std::runtime_error(
"Object is not of expected type InDet::PixelDetectorElementStatus");
305 std::unique_ptr<InDet::SiDetectorElementStatus>
313 return std::make_unique<InDet::PixelDetectorElementStatus>(*castToDerived(input_element_status.cptr()));
317 return std::make_unique<InDet::PixelDetectorElementStatus>(*castToDerived(input_element_status.cptr()));
321 if (not pixelDetEleHandle.
isValid() ) {
322 std::stringstream
msg;
324 throw std::runtime_error(
msg.str());
330 return std::make_unique<InDet::PixelDetectorElementStatus>(*elements);
334 std::unique_ptr<InDet::SiDetectorElementStatus>
343 chip_status.resize(
status.size(),0);
376 unsigned int element_i=0;
383 assert( chip_mask != 0 );
384 std::bitset<16> dead_chip_mask(dead_map->
getChipStatus(element_i));
385 chip_status[element_i] = chip_mask & (~static_cast<InDet::ChipFlags_t>(dead_chip_mask.to_ulong()));
398 if (readout_technology_mask) {
400 ATH_MSG_ERROR(
"PixelConditionsSummaryTool not configured for use with conditions objects");
403 std::scoped_lock<std::mutex> lock{*m_cacheMutex.get(ctx)};
406 if (idcCachePtr==
nullptr) {
437 unsigned int element_offset_i = (active_only ? 52736 : 0);
439 unsigned int element_i=0;
447 status.at(element_i) =
status.at(element_i) && not ( readout_technology_flags
450 : idcCachePtr->
retrieve(element_i+element_offset_i)!=1 ));
456 assert( chip_mask != 0 );
459 for (
unsigned int chip_i =0; chip_i < number_of_chips; ++chip_i) {
461 unsigned int indexFE = (1+chip_i)*maxHash + element_i;
464 bs_status_flags |= (chip_flag << chip_i);
467 chip_status[element_i] &= (bs_status_flags & chip_mask);
470 chip_status[element_i] = 0;
476 return element_status;
481 if (
hasBSError(moduleHash, ctx)) {
return false; }
484 bool isDCSActive =
false;
486 if (istate==dcsstate_data->
getModuleStatus(moduleHash)) { isDCSActive=
true; }
488 if (!isDCSActive) {
return false; }
491 bool isDCSGood =
false;
493 if (activeStatus==dcsstatus_data->
getModuleStatus(moduleHash)) { isDCSGood=
true; }
495 if (!isDCSGood) {
return false; }
506 if (
hasBSError(moduleHash, ctx, cacheEntry)) {
return false; }
509 bool isDCSActive =
false;
511 if (istate==dcsstate_data->
getModuleStatus(moduleHash)) { isDCSActive=
true; }
513 if (!isDCSActive) {
return false; }
516 bool isDCSGood =
false;
518 if (activeStatus==dcsstatus_data->
getModuleStatus(moduleHash)) { isDCSGood=
true; }
520 if (!isDCSGood) {
return false; }
528 if (
hasBSError(moduleHash, elementId, ctx, cacheEntry)) {
return false; }
535 if (!
isGood(moduleHash, ctx)) {
return 0.0; }
545 double nTotal = (std::abs(phiStart-phiEnd)+1.0)*(std::abs(etaStart-etaEnd)+1.0);