20 return StatusCode::SUCCESS;
24 inline constexpr bool isBSError(uint64_t
error, uint64_t max_error, uint64_t mask) {
30std::unique_ptr<InDet::SiDetectorElementStatus>
34 std::vector<bool> &status=element_status->getElementStatus();
36 status.resize(
m_pixelID->wafer_hash_max(),
true );
38 std::vector<InDet::ChipFlags_t> &chip_status=element_status->getElementChipStatus();
39 if (chip_status.empty()) {
40 chip_status.resize(status.size(),0xffff);
44 ATH_MSG_ERROR(
"PixelByteStreamErrorDetectorStatusTool is not for use with conditions objects");
84 unsigned int element_offset_i = (active_only ? 52736 : 0);
86 unsigned int element_i=0;
87 unsigned int maxHash =
m_pixelID->wafer_hash_max();
89 constexpr uint64_t missingErrorInfo{std::numeric_limits<uint64_t>::max()-3000000000};
97 status.at(element_i) = status.at(element_i) && not ( readout_technology_flags
99 ? isBSError(
static_cast<uint64_t
>(idcCachePtr->
retrieve(element_i)), missingErrorInfo, error_mask)
100 : idcCachePtr->
retrieve(element_i+element_offset_i)!=1 ));
103 if (status[element_i]) {
105 InDet::ChipFlags_t chip_mask = status[element_i] ? (1ul<<number_of_chips)-1ul : 0;
106 assert( chip_mask != 0 );
107 InDet::ChipFlags_t bs_status_flags = active_only ? chip_mask : 0;
109 for (
unsigned int chip_i =0; chip_i < number_of_chips; ++chip_i) {
111 unsigned int indexFE = (1+chip_i)*maxHash + element_i;
112 InDet::ChipFlags_t chip_flag =not ( readout_technology_flags
113 && (isBSError(
static_cast<uint64_t
>(idcCachePtr->
retrieve(indexFE)), missingErrorInfo, chip_error_mask)));
114 bs_status_flags |= (chip_flag << chip_i);
117 chip_status[element_i] &= (bs_status_flags & chip_mask);
120 chip_status[element_i] = 0;
127 return element_status;
#define ATH_CHECK
Evaluate an expression and check for errors.
IdentifiableValueCache< IDCInDetBSErrContainer::ErrorCode > IDCInDetBSErrContainer_Cache
T retrieve(size_t i)
Retrieve the Value stored in that hash.
Class used to describe the design of a module (diode segmentation and readout scheme)
PixelReadoutTechnology getReadoutTechnology() const
int numberOfCircuits() const
Total number of circuits:
Class to hold geometrical description of a silicon detector element.
virtual bool isValid() override final
Can the handle be successfully dereferenced?
void addDependency(const EventIDRange &range)
constexpr IDCInDetBSErrContainer::ErrorCode makeError(PixelErrorsEnum errType)
helper to be used in clients to fetch error information
unsigned int makeReadoutTechnologyBit(InDetDD::PixelReadoutTechnology technology, unsigned int bit_val=1)
Create a word with a bit representing the given readout technology to the given value.