19 base_class(
type, name, parent)
33 return StatusCode::SUCCESS;
50 if (condData==
nullptr) {
51 ATH_MSG_ERROR(
"In isGood, SCT_ConfigurationCondData pointer cannot be retrieved");
75 if (not condDataHandle.
isValid() ) {
83 const std::set<Identifier>* bad_wafers = condData->
getBadWaferIds();
88 status.resize(
m_pHelper->wafer_hash_max(),
true);
90 constexpr unsigned int N_CHIPS_PER_SIDE = 6;
91 constexpr unsigned int N_SIDES = 2;
92 constexpr InDet::ChipFlags_t all_flags_set =
static_cast<InDet::ChipFlags_t
>((1ul<<(N_CHIPS_PER_SIDE*N_SIDES)) - 1ul);
93 static_assert( (1ul<<(N_CHIPS_PER_SIDE*N_SIDES)) - 1ul <= std::numeric_limits<InDet::ChipFlags_t>::max());
94 if (chip_status.empty()) {
95 chip_status.resize(status.size(), all_flags_set);
97 for (
const Identifier &a_bad_wafer : *bad_wafers) {
99 status.at(hash.value())=
false;
104 for (
const Identifier &a_bad_module : *bad_modules) {
105 for (
unsigned int side_i=0; side_i<N_SIDES; ++side_i) {
112 chip_status.at(hash.value()) = 0;
118 std::array<unsigned int,N_SIDES> side_mask{0x3F, 0xFC0};
119 for (
const std::pair<const Identifier, unsigned int> &a_bad_module : *(condData->
getBadChips()) ) {
120 for (
unsigned int side_i=0; side_i<N_SIDES; ++side_i) {
121 if (a_bad_module.second & side_mask[side_i]) {
123 m_pHelper->layer_disk(a_bad_module.first),
124 m_pHelper->phi_module(a_bad_module.first),
125 m_pHelper->eta_module(a_bad_module.first),
129 chip_status.at(hash.value()) &=
static_cast<InDet::ChipFlags_t
>( ~(bad_chip_flags) );
135 std::vector<std::vector<unsigned short> > &bad_strips = element_status.
getBadCells();
136 if (bad_strips.empty()) {
137 bad_strips.resize(status.size());
142 if (!status.at(hash))
continue;
143 int strip_i =
m_pHelper->strip(bad_strip);
145 std::vector<unsigned short> &bad_module_strips_combined = bad_strips.at(hash);
146 std::vector<unsigned short>::const_iterator iter = std::lower_bound(bad_module_strips_combined.begin(),bad_module_strips_combined.end(),strip_i);
147 if (iter == bad_module_strips_combined.end() || *iter != strip_i) {
148 bad_module_strips_combined.insert( iter, strip_i);
167 ATH_MSG_WARNING(
"moduleId obtained from stripId " << stripId <<
" is invalid.");
172 const unsigned int v_badChips{
badChips(moduleId, ctx)};
180 if (v_badChips==0)
return true;
182 const int side{
m_pHelper->side(stripId)};
187 if ((side==0 and (v_badChips & 0x3F)==0) or (side==1 and (v_badChips & 0xFC0)==0))
return true;
189 int chip{
getChip(stripId, ctx)};
190 if (chip<0 or chip>=12) {
196 const bool badChip{
static_cast<bool>(v_badChips & (1<<chip))};
198 return (not badChip);
203 if (condData==
nullptr) {
204 ATH_MSG_ERROR(
"In isStripInBadModule, SCT_ConfigurationCondData pointer cannot be retrieved");
215 if (condData==
nullptr) {
216 ATH_MSG_ERROR(
"In isWaferInBadModule, SCT_ConfigurationCondData pointer cannot be retrieved");
229 if (pElement==
nullptr) {
230 ATH_MSG_FATAL(
"Element pointer is nullptr in 'badStrips' method");
238 if (condData==
nullptr) {
239 ATH_MSG_ERROR(
"In badModules, SCT_ConfigurationCondData pointer cannot be retrieved");
248 if (condData==
nullptr) {
249 ATH_MSG_ERROR(
"In badStrips, SCT_ConfigurationCondData pointer cannot be retrieved");
254 if (ignoreBadModules) {
260 if (ignoreBadChips) {
262 const int chip{
getChip(badStripId, ctx)};
264 unsigned int chipStatusWord{condData->
getBadChips(moduleId)};
265 if ((chipStatusWord & (1 << chip)) != 0)
continue;
268 if (
m_pHelper->module_id(
m_pHelper->wafer_id(badStripId)) == moduleId) strips.insert(badStripId);
276 if (condData==
nullptr) {
277 ATH_MSG_ERROR(
"In badLinks, SCT_ConfigurationCondData pointer cannot be retrieved");
278 return std::pair<bool, bool>{
false,
false};
286 if (condData==
nullptr) {
287 ATH_MSG_ERROR(
"In badLinks, SCT_ConfigurationCondData pointer cannot be retrieved");
296 if (condData==
nullptr) {
297 ATH_MSG_ERROR(
"In badChips, SCT_ConfigurationCondData pointer cannot be retrieved");
307 if (condData==
nullptr) {
308 ATH_MSG_ERROR(
"In badChips, SCT_ConfigurationCondData pointer cannot be retrieved");
318 if (condData==
nullptr) {
319 ATH_MSG_ERROR(
"In badStrips, SCT_ConfigurationCondData pointer cannot be retrieved");
323 if (!ignoreBadModules and !ignoreBadChips) {
324 const std::set<Identifier>& bad_strips = *condData->
getBadStripIds();
325 std::copy(bad_strips.begin(), bad_strips.end(), std::inserter(strips,strips.begin()));
331 if (ignoreBadModules) {
335 if (ignoreBadChips) {
336 const int chip{
getChip(badStripId, ctx)};
338 unsigned int chipStatusWord{condData->
getBadChips(moduleId)};
339 if ((chipStatusWord & (1 << chip)) != 0)
continue;
342 strips.insert(badStripId);
354 if (not condData.
isValid())
return nullptr;
355 return condData->getDetectorElement(waferHash);
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_WARNING(x)
This is an Identifier helper class for the SCT subdetector.
Header file for AthHistogramAlgorithm.
This is a "hash" representation of an Identifier.
bool is_valid() const
Check if id is in a valid state.
Class to hold geometrical description of a silicon detector element.
const std::vector< bool > & getElementStatus() const
const InDetDD::SiDetectorElement * getDetectorElement(const IdentifierHash &hash) const
const std::vector< ChipFlags_t > & getElementChipStatus() const
const std::vector< std::vector< unsigned short > > & getBadCells() const
Class for data object used in SCT_ConfigurationCondAlg and SCT_ConfigurationConditionsTool.
std::pair< bool, bool > areBadLinks(const IdentifierHash &hash) const
Check if a module has bad links.
bool isBadWaferId(const Identifier &waferId) const
Check if a wafer identifier is bad one.
const std::map< IdentifierHash, std::pair< bool, bool > > * getBadLinks() const
Get all bad links.
bool isBadModuleId(const Identifier &moduleId) const
Check if a module identifier is bad one.
bool isBadStrip(const IdentifierHash &hash, const int strip) const
Check if a strip identifier is bad one.
const std::set< Identifier > * getBadModuleIds() const
Get all bad module identifiers.
const std::set< Identifier > * getBadStripIds() const
Get all bad strip identifiers.
const std::set< Identifier > * getBadWaferIds() const
Get all bad wafer identifiers.
unsigned int getBadChips(const Identifier &moduleId) const
Get bad chips for a module.
const_pointer_type retrieve()
const_pointer_type cptr()
void addDependency(const EventIDRange &range)
constexpr unsigned int getGeometricalFromPhysicalChipFlags(unsigned int side, bool swap, unsigned int physical_chip_flags)
Convert a word in which each bit represents the status of a certain physical chip to a word in which ...
constexpr unsigned int getChip(unsigned int side, bool swap, unsigned int strip)
Get the physical chip ID for the given strip.