Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
Public Member Functions | Private Types | Private Member Functions | Private Attributes | List of all members
SCT_ConfigurationConditionsTool Class Reference

#include <SCT_ConfigurationConditionsTool.h>

Inheritance diagram for SCT_ConfigurationConditionsTool:
Collaboration diagram for SCT_ConfigurationConditionsTool:

Public Member Functions

 SCT_ConfigurationConditionsTool (const std::string &type, const std::string &name, const IInterface *parent)
 
virtual ~SCT_ConfigurationConditionsTool ()=default
 
virtual StatusCode initialize () override
 
virtual bool canReportAbout (InDetConditions::Hierarchy h) const override
 Can the tool report about the given component? (chip, module...) More...
 
virtual bool isGood (const Identifier &elementId, InDetConditions::Hierarchy h=InDetConditions::DEFAULT) const override
 Is the detector element good? More...
 
virtual bool isGood (const Identifier &elementId, const EventContext &ctx, InDetConditions::Hierarchy h=InDetConditions::DEFAULT) const override
 
virtual bool isGood (const IdentifierHash &hashId) const override
 Is it good?, using wafer hash. More...
 
virtual bool isGood (const IdentifierHash &hashId, const EventContext &ctx) const override
 
virtual void getDetectorElementStatus (const EventContext &ctx, InDet::SiDetectorElementStatus &element_status, SG::WriteCondHandle< InDet::SiDetectorElementStatus > *whandle) const override
 
virtual const std::set< Identifier > * badModules (const EventContext &ctx) const override
 List of bad modules. More...
 
virtual const std::set< Identifier > * badModules () const override
 
virtual void badStrips (std::set< Identifier > &strips, const EventContext &ctx, bool ignoreBadModules=false, bool ignoreBadChips=false) const override
 List of bad strips. More...
 
virtual void badStrips (std::set< Identifier > &strips, bool ignoreBadModules=false, bool ignoreBadChips=false) const override
 
virtual void badStrips (const Identifier &moduleId, std::set< Identifier > &strips, const EventContext &ctx, bool ignoreBadModules=false, bool ignoreBadChips=false) const override
 List of bad strips for a given module. More...
 
virtual void badStrips (const Identifier &moduleId, std::set< Identifier > &strips, bool ignoreBadModules=false, bool ignoreBadChips=false) const override
 
virtual std::pair< bool, bool > badLinks (const IdentifierHash &hash, const EventContext &ctx) const override
 List of bad links. More...
 
virtual std::pair< bool, bool > badLinks (const IdentifierHash &hash) const override
 
virtual const std::map< IdentifierHash, std::pair< bool, bool > > * badLinks (const EventContext &ctx) const override
 Bad links for a given module. More...
 
virtual const std::map< IdentifierHash, std::pair< bool, bool > > * badLinks () const override
 
virtual const std::map< Identifier, unsigned int > * badChips (const EventContext &ctx) const override
 List of bad chips. More...
 
virtual const std::map< Identifier, unsigned int > * badChips () const override
 
virtual unsigned int badChips (const Identifier &moduleId, const EventContext &ctx) const override
 Bad chips for a given module. More...
 
virtual unsigned int badChips (const Identifier &moduleId) const override
 
virtual int getChip (const Identifier &stripId, const EventContext &ctx) const override
 Get the chip number containing a particular strip. More...
 
virtual int getChip (const Identifier &stripId) const override
 

Private Types

enum  { stripsPerChip =128, lastStrip =767, invalidChipNumber =-1 }
 enum for constants More...
 

Private Member Functions

bool isStripInBadModule (const Identifier &stripId, const SCT_ConfigurationCondData *) const
 Is a strip within a bad module. More...
 
bool isWaferInBadModule (const Identifier &waferId, const EventContext &ctx) const
 Is a wafer in a bad module. More...
 
bool isGoodChip (const Identifier &stripId, const EventContext &ctx) const
 Is a chip with this Identifier good? More...
 
const SCT_ConfigurationCondDatagetCondData (const EventContext &ctx) const
 
const InDetDD::SiDetectorElementgetDetectorElement (const IdentifierHash &waferHash, const EventContext &ctx) const
 

Private Attributes

SG::ReadCondHandleKey< SCT_ConfigurationCondDatam_condKey {this, "CondKey", "SCT_ConfigurationCondData", "SCT DAQ configuration"}
 
SG::ReadCondHandleKey< InDetDD::SiDetectorElementCollectionm_SCTDetEleCollKey {this, "SCTDetEleCollKey", "SCT_DetectorElementCollection", "Key of SiDetectorElementCollection for SCT"}
 
const SCT_IDm_pHelper {nullptr}
 ID helper for SCT. More...
 
BooleanProperty m_checkStripsInsideModules {this, "checkStripsInsideModule", true, " Do we want to check if a strip is bad because it is inside a bad module"}
 

Detailed Description

Service that keeps track of configuration conditions

Tool which reads SCT_Configuration from the database Deals with bad modules, bad links, strips out of the readout and bad strips

Definition at line 41 of file SCT_ConfigurationConditionsTool.h.

Member Enumeration Documentation

◆ anonymous enum

anonymous enum
private

enum for constants

Enumerator
stripsPerChip 
lastStrip 
invalidChipNumber 

Definition at line 106 of file SCT_ConfigurationConditionsTool.h.

Constructor & Destructor Documentation

◆ SCT_ConfigurationConditionsTool()

SCT_ConfigurationConditionsTool::SCT_ConfigurationConditionsTool ( const std::string &  type,
const std::string &  name,
const IInterface *  parent 
)

Definition at line 18 of file SCT_ConfigurationConditionsTool.cxx.

18  :
19  base_class(type, name, parent)
20 {
21 }

◆ ~SCT_ConfigurationConditionsTool()

virtual SCT_ConfigurationConditionsTool::~SCT_ConfigurationConditionsTool ( )
virtualdefault

Member Function Documentation

◆ badChips() [1/4]

const std::map< Identifier, unsigned int > * SCT_ConfigurationConditionsTool::badChips ( ) const
overridevirtual

Definition at line 340 of file SCT_ConfigurationConditionsTool.cxx.

340  {
341  const EventContext& ctx{Gaudi::Hive::currentContext()};
342  return badChips(ctx);
343 }

◆ badChips() [2/4]

const std::map< Identifier, unsigned int > * SCT_ConfigurationConditionsTool::badChips ( const EventContext &  ctx) const
overridevirtual

List of bad chips.

Definition at line 330 of file SCT_ConfigurationConditionsTool.cxx.

330  {
331  const SCT_ConfigurationCondData* condData{getCondData(ctx)};
332  if (condData==nullptr) {
333  ATH_MSG_ERROR("In badChips, SCT_ConfigurationCondData pointer cannot be retrieved");
334  return nullptr;
335  }
336 
337  return condData->getBadChips();
338 }

◆ badChips() [3/4]

unsigned int SCT_ConfigurationConditionsTool::badChips ( const Identifier moduleId) const
overridevirtual

Definition at line 356 of file SCT_ConfigurationConditionsTool.cxx.

356  {
357  const EventContext& ctx{Gaudi::Hive::currentContext()};
358  return badChips(moduleId, ctx);
359 }

◆ badChips() [4/4]

unsigned int SCT_ConfigurationConditionsTool::badChips ( const Identifier moduleId,
const EventContext &  ctx 
) const
overridevirtual

Bad chips for a given module.

Definition at line 345 of file SCT_ConfigurationConditionsTool.cxx.

345  {
346  // Bad chips for a given module
347  const SCT_ConfigurationCondData* condData{getCondData(ctx)};
348  if (condData==nullptr) {
349  ATH_MSG_ERROR("In badChips, SCT_ConfigurationCondData pointer cannot be retrieved");
350  return 0xFFF; // 12 bad chips
351  }
352 
353  return condData->getBadChips(moduleId);
354 }

◆ badLinks() [1/4]

const std::map< IdentifierHash, std::pair< bool, bool > > * SCT_ConfigurationConditionsTool::badLinks ( ) const
overridevirtual

Definition at line 325 of file SCT_ConfigurationConditionsTool.cxx.

325  {
326  const EventContext& ctx{Gaudi::Hive::currentContext()};
327  return badLinks(ctx);
328 }

◆ badLinks() [2/4]

const std::map< IdentifierHash, std::pair< bool, bool > > * SCT_ConfigurationConditionsTool::badLinks ( const EventContext &  ctx) const
overridevirtual

Bad links for a given module.

Definition at line 315 of file SCT_ConfigurationConditionsTool.cxx.

315  {
316  const SCT_ConfigurationCondData* condData{getCondData(ctx)};
317  if (condData==nullptr) {
318  ATH_MSG_ERROR("In badLinks, SCT_ConfigurationCondData pointer cannot be retrieved");
319  return nullptr;
320  }
321 
322  return condData->getBadLinks();
323 }

◆ badLinks() [3/4]

std::pair< bool, bool > SCT_ConfigurationConditionsTool::badLinks ( const IdentifierHash hash) const
overridevirtual

Definition at line 310 of file SCT_ConfigurationConditionsTool.cxx.

310  {
311  const EventContext& ctx{Gaudi::Hive::currentContext()};
312  return badLinks(hash, ctx);
313 }

◆ badLinks() [4/4]

std::pair< bool, bool > SCT_ConfigurationConditionsTool::badLinks ( const IdentifierHash hash,
const EventContext &  ctx 
) const
overridevirtual

List of bad links.

Definition at line 298 of file SCT_ConfigurationConditionsTool.cxx.

298  {
299  // Bad links for a given module
300  // Bad convetion is used. true is for good link and false is for bad link...
301  const SCT_ConfigurationCondData* condData{getCondData(ctx)};
302  if (condData==nullptr) {
303  ATH_MSG_ERROR("In badLinks, SCT_ConfigurationCondData pointer cannot be retrieved");
304  return std::pair<bool, bool>{false, false};
305  }
306 
307  return condData->areBadLinks(hash);
308 }

◆ badModules() [1/2]

const std::set< Identifier > * SCT_ConfigurationConditionsTool::badModules ( ) const
overridevirtual

Definition at line 262 of file SCT_ConfigurationConditionsTool.cxx.

262  {
263  const EventContext& ctx{Gaudi::Hive::currentContext()};
264  return badModules(ctx);
265 }

◆ badModules() [2/2]

const std::set< Identifier > * SCT_ConfigurationConditionsTool::badModules ( const EventContext &  ctx) const
overridevirtual

List of bad modules.

Definition at line 252 of file SCT_ConfigurationConditionsTool.cxx.

252  {
253  const SCT_ConfigurationCondData* condData{getCondData(ctx)};
254  if (condData==nullptr) {
255  ATH_MSG_ERROR("In badModules, SCT_ConfigurationCondData pointer cannot be retrieved");
256  return nullptr;
257  }
258 
259  return condData->getBadModuleIds();
260 }

◆ badStrips() [1/4]

void SCT_ConfigurationConditionsTool::badStrips ( const Identifier moduleId,
std::set< Identifier > &  strips,
bool  ignoreBadModules = false,
bool  ignoreBadChips = false 
) const
overridevirtual

Definition at line 293 of file SCT_ConfigurationConditionsTool.cxx.

293  {
294  const EventContext& ctx{Gaudi::Hive::currentContext()};
295  return badStrips(moduleId, strips, ctx, ignoreBadModules, ignoreBadChips);
296 }

◆ badStrips() [2/4]

void SCT_ConfigurationConditionsTool::badStrips ( const Identifier moduleId,
std::set< Identifier > &  strips,
const EventContext &  ctx,
bool  ignoreBadModules = false,
bool  ignoreBadChips = false 
) const
overridevirtual

List of bad strips for a given module.

Definition at line 267 of file SCT_ConfigurationConditionsTool.cxx.

267  {
268  const SCT_ConfigurationCondData* condData{getCondData(ctx)};
269  if (condData==nullptr) {
270  ATH_MSG_ERROR("In badStrips, SCT_ConfigurationCondData pointer cannot be retrieved");
271  return;
272  }
273 
274  // Bad strips for a given module
275  if (ignoreBadModules) {
276  // Ignore strips in bad modules
277  if (condData->isBadModuleId(moduleId)) return;
278  }
279 
280  for (const Identifier& badStripId: *(condData->getBadStripIds())) {
281  if (ignoreBadChips) {
282  // Ignore strips in bad chips
283  const int chip{getChip(badStripId)};
284  if (chip!=invalidChipNumber) {
285  unsigned int chipStatusWord{condData->getBadChips(moduleId)};
286  if ((chipStatusWord & (1 << chip)) != 0) continue;
287  }
288  }
289  if (m_pHelper->module_id(m_pHelper->wafer_id(badStripId)) == moduleId) strips.insert(badStripId);
290  }
291 }

◆ badStrips() [3/4]

void SCT_ConfigurationConditionsTool::badStrips ( std::set< Identifier > &  strips,
bool  ignoreBadModules = false,
bool  ignoreBadChips = false 
) const
overridevirtual

Definition at line 392 of file SCT_ConfigurationConditionsTool.cxx.

392  {
393  const EventContext& ctx{Gaudi::Hive::currentContext()};
394  badStrips(strips, ctx, ignoreBadModules, ignoreBadChips);
395 }

◆ badStrips() [4/4]

void SCT_ConfigurationConditionsTool::badStrips ( std::set< Identifier > &  strips,
const EventContext &  ctx,
bool  ignoreBadModules = false,
bool  ignoreBadChips = false 
) const
overridevirtual

List of bad strips.

Definition at line 361 of file SCT_ConfigurationConditionsTool.cxx.

361  {
362  const SCT_ConfigurationCondData* condData{getCondData(ctx)};
363  if (condData==nullptr) {
364  ATH_MSG_ERROR("In badStrips, SCT_ConfigurationCondData pointer cannot be retrieved");
365  return;
366  }
367 
368  if (!ignoreBadModules and !ignoreBadChips) {
369  const std::set<Identifier>& bad_strips = *condData->getBadStripIds();
370  std::copy(bad_strips.begin(), bad_strips.end(), std::inserter(strips,strips.begin()));
371  return;
372  }
373  for (const Identifier& badStripId: *(condData->getBadStripIds())) {
374  const Identifier moduleId{m_pHelper->module_id(m_pHelper->wafer_id(badStripId))};
375  // Ignore strips in bad modules
376  if (ignoreBadModules) {
377  if (condData->isBadModuleId(moduleId)) continue;
378  }
379  // Ignore strips in bad chips
380  if (ignoreBadChips) {
381  const int chip{getChip(badStripId)};
382  if (chip!=invalidChipNumber) {
383  unsigned int chipStatusWord{condData->getBadChips(moduleId)};
384  if ((chipStatusWord & (1 << chip)) != 0) continue;
385  }
386  }
387  strips.insert(badStripId);
388  }
389 }

◆ canReportAbout()

bool SCT_ConfigurationConditionsTool::canReportAbout ( InDetConditions::Hierarchy  h) const
overridevirtual

Can the tool report about the given component? (chip, module...)

Definition at line 37 of file SCT_ConfigurationConditionsTool.cxx.

◆ getChip() [1/2]

int SCT_ConfigurationConditionsTool::getChip ( const Identifier stripId) const
overridevirtual

Definition at line 247 of file SCT_ConfigurationConditionsTool.cxx.

247  {
248  const EventContext& ctx{Gaudi::Hive::currentContext()};
249  return getChip(stripId, ctx);
250 }

◆ getChip() [2/2]

int SCT_ConfigurationConditionsTool::getChip ( const Identifier stripId,
const EventContext &  ctx 
) const
overridevirtual

Get the chip number containing a particular strip.

Definition at line 236 of file SCT_ConfigurationConditionsTool.cxx.

236  {
237  // Check for swapped readout direction
238  const IdentifierHash waferHash{m_pHelper->wafer_hash(m_pHelper->wafer_id(stripId))};
239  const InDetDD::SiDetectorElement* pElement{getDetectorElement(waferHash, ctx)};
240  if (pElement==nullptr) {
241  ATH_MSG_FATAL("Element pointer is nullptr in 'badStrips' method");
242  return invalidChipNumber;
243  }
244  return SCT::getChip(*m_pHelper, *pElement, stripId);
245 }

◆ getCondData()

const SCT_ConfigurationCondData * SCT_ConfigurationConditionsTool::getCondData ( const EventContext &  ctx) const
private

Definition at line 398 of file SCT_ConfigurationConditionsTool.cxx.

398  {
400  return condData.retrieve();
401 }

◆ getDetectorElement()

const InDetDD::SiDetectorElement * SCT_ConfigurationConditionsTool::getDetectorElement ( const IdentifierHash waferHash,
const EventContext &  ctx 
) const
private

Definition at line 403 of file SCT_ConfigurationConditionsTool.cxx.

403  {
405  if (not condData.isValid()) return nullptr;
406  return condData->getDetectorElement(waferHash);
407 }

◆ getDetectorElementStatus()

void SCT_ConfigurationConditionsTool::getDetectorElementStatus ( const EventContext &  ctx,
InDet::SiDetectorElementStatus element_status,
SG::WriteCondHandle< InDet::SiDetectorElementStatus > *  whandle 
) const
overridevirtual

Definition at line 72 of file SCT_ConfigurationConditionsTool.cxx.

73  {
75  if (not condDataHandle.isValid() ) {
76  ATH_MSG_ERROR("Invalid cond data handle " << m_condKey.key());
77  return;
78  }
79  if (whandle) {
80  whandle->addDependency (condDataHandle);
81  }
82  const SCT_ConfigurationCondData* condData{ condDataHandle.cptr() };
83  const std::set<Identifier>* bad_wafers = condData->getBadWaferIds();
84  if (bad_wafers) {
85  std::vector<bool> &status = element_status.getElementStatus();
86  std::vector<InDet::ChipFlags_t> &chip_status = element_status.getElementChipStatus();
87  if (status.empty()) {
88  status.resize(m_pHelper->wafer_hash_max(),true);
89  }
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);
94  if (chip_status.empty()) {
95  chip_status.resize(status.size(), all_flags_set);
96  }
97  for (const Identifier &a_bad_wafer : *bad_wafers) {
98  IdentifierHash hash = m_pHelper->wafer_hash(a_bad_wafer);
99  status.at(hash.value())=false;
100  }
102  const std::set<Identifier>* bad_modules = condData->getBadModuleIds();
103  if (bad_modules) {
104  for (const Identifier &a_bad_module : *bad_modules) {
105  for (unsigned int side_i=0; side_i<N_SIDES; ++side_i) {
106  Identifier wafer_id{m_pHelper->wafer_id(m_pHelper->barrel_ec(a_bad_module),
107  m_pHelper->layer_disk(a_bad_module),
108  m_pHelper->phi_module(a_bad_module),
109  m_pHelper->eta_module(a_bad_module),
110  side_i)};
112  chip_status.at(hash.value()) = 0;
113  }
114  }
115  }
116  }
117  if (condData->getBadChips()) {
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]) {
122  Identifier wafer_id{m_pHelper->wafer_id(m_pHelper->barrel_ec(a_bad_module.first),
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),
126  side_i)};
128  unsigned int bad_chip_flags = SCT::getGeometricalFromPhysicalChipFlags(*m_pHelper, *element_status.getDetectorElement(hash),a_bad_module.second );
129  chip_status.at(hash.value()) &= static_cast<InDet::ChipFlags_t>( ~(bad_chip_flags) );
130  }
131  }
132  }
133  }
134  if (condData->getBadStripIds()) {
135  std::vector<std::vector<unsigned short> > &bad_strips = element_status.getBadCells();
136  if (bad_strips.empty()) {
137  bad_strips.resize(status.size());
138  }
139  for (const Identifier &bad_strip : *(condData->getBadStripIds()) ) {
141  // skip bad modules and chips
142  if (!status.at(hash)) continue;
143  int strip_i = m_pHelper->strip(bad_strip);
144 
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);
149  }
150  }
151  }
152  }
153 }

◆ initialize()

StatusCode SCT_ConfigurationConditionsTool::initialize ( )
overridevirtual

Definition at line 24 of file SCT_ConfigurationConditionsTool.cxx.

24  {
25  ATH_MSG_DEBUG("Initializing configuration");
26 
27  ATH_CHECK(detStore()->retrieve(m_pHelper, "SCT_ID"));
28 
29  // Read Cond Handle Key
32 
33  return StatusCode::SUCCESS;
34 }

◆ isGood() [1/4]

bool SCT_ConfigurationConditionsTool::isGood ( const Identifier elementId,
const EventContext &  ctx,
InDetConditions::Hierarchy  h = InDetConditions::DEFAULT 
) const
overridevirtual

Definition at line 46 of file SCT_ConfigurationConditionsTool.cxx.

46  {
47  if (not canReportAbout(h)) return true;
48 
49  const SCT_ConfigurationCondData* condData{getCondData(ctx)};
50  if (condData==nullptr) {
51  ATH_MSG_ERROR("In isGood, SCT_ConfigurationCondData pointer cannot be retrieved");
52  return false;
53  }
54 
55  bool result{true};
57  result = (not condData->isBadStrip(m_pHelper->wafer_hash(m_pHelper->wafer_id(elementId)),
58  m_pHelper->strip(elementId)));
59  // If strip itself is not bad, check if it's in a bad module
60  if (result and m_checkStripsInsideModules) result = (not isStripInBadModule(elementId, condData));
61  } else if (h == InDetConditions::SCT_MODULE) {
62  result = (not condData->isBadModuleId(elementId));
64  result = (not condData->isBadWaferId(elementId));
65  } else if (h == InDetConditions::SCT_CHIP) {
66  result = isGoodChip(elementId, ctx);
67  }
68  return result;
69 }

◆ isGood() [2/4]

bool SCT_ConfigurationConditionsTool::isGood ( const Identifier elementId,
InDetConditions::Hierarchy  h = InDetConditions::DEFAULT 
) const
overridevirtual

Is the detector element good?

Definition at line 155 of file SCT_ConfigurationConditionsTool.cxx.

155  {
156  const EventContext& ctx{Gaudi::Hive::currentContext()};
157 
158  return isGood(elementId, ctx, h);
159 }

◆ isGood() [3/4]

bool SCT_ConfigurationConditionsTool::isGood ( const IdentifierHash hashId) const
overridevirtual

Is it good?, using wafer hash.

Definition at line 167 of file SCT_ConfigurationConditionsTool.cxx.

167  {
168  const EventContext& ctx{Gaudi::Hive::currentContext()};
169  return isGood(hashId, ctx);
170 }

◆ isGood() [4/4]

bool SCT_ConfigurationConditionsTool::isGood ( const IdentifierHash hashId,
const EventContext &  ctx 
) const
overridevirtual

Definition at line 162 of file SCT_ConfigurationConditionsTool.cxx.

162  {
163  const Identifier elementId{m_pHelper->wafer_id(hashId)};
164  return isGood(elementId, ctx, InDetConditions::SCT_SIDE);
165 }

◆ isGoodChip()

bool SCT_ConfigurationConditionsTool::isGoodChip ( const Identifier stripId,
const EventContext &  ctx 
) const
private

Is a chip with this Identifier good?

Definition at line 173 of file SCT_ConfigurationConditionsTool.cxx.

173  {
174  // This check assumes present SCT.
175  // Get module number
176  const Identifier moduleId{m_pHelper->module_id(stripId)};
177  if (not moduleId.is_valid()) {
178  ATH_MSG_WARNING("moduleId obtained from stripId " << stripId << " is invalid.");
179  return false;
180  }
181 
182  // badChips word for the module
183  const unsigned int v_badChips{badChips(moduleId, ctx)};
184  // badChips holds 12 bits.
185  // bit 0 (LSB) is chip 0 for side 0.
186  // bit 5 is chip 5 for side 0.
187  // bit 6 is chip 6 for side 1.
188  // bit 11 is chip 11 for side 1.
189 
190  // If there is no bad chip, this check is done.
191  if (v_badChips==0) return true;
192 
193  const int side{m_pHelper->side(stripId)};
194  // Check the six chips on the side
195  // 0x3F = 0000 0011 1111
196  // 0xFC0 = 1111 1100 0000
197  // If there is no bad chip on the side, this check is done.
198  if ((side==0 and (v_badChips & 0x3F)==0) or (side==1 and (v_badChips & 0xFC0)==0)) return true;
199 
200  int chip{getChip(stripId, ctx)};
201  if (chip<0 or chip>=12) {
202  ATH_MSG_WARNING("chip number is invalid: " << chip);
203  return false;
204  }
205 
206  // Check if the chip is bad
207  const bool badChip{static_cast<bool>(v_badChips & (1<<chip))};
208 
209  return (not badChip);
210 }

◆ isStripInBadModule()

bool SCT_ConfigurationConditionsTool::isStripInBadModule ( const Identifier stripId,
const SCT_ConfigurationCondData condData 
) const
private

Is a strip within a bad module.

Definition at line 213 of file SCT_ConfigurationConditionsTool.cxx.

213  {
214  if (condData==nullptr) {
215  ATH_MSG_ERROR("In isStripInBadModule, SCT_ConfigurationCondData pointer cannot be retrieved");
216  return true;
217  }
218 
219  const Identifier moduleId(m_pHelper->module_id(m_pHelper->wafer_id(stripId)));
220  return condData->isBadModuleId(moduleId);
221 }

◆ isWaferInBadModule()

bool SCT_ConfigurationConditionsTool::isWaferInBadModule ( const Identifier waferId,
const EventContext &  ctx 
) const
private

Is a wafer in a bad module.

Definition at line 224 of file SCT_ConfigurationConditionsTool.cxx.

224  {
225  const SCT_ConfigurationCondData* condData{getCondData(ctx)};
226  if (condData==nullptr) {
227  ATH_MSG_ERROR("In isWaferInBadModule, SCT_ConfigurationCondData pointer cannot be retrieved");
228  return true;
229  }
230 
231  const Identifier moduleId{m_pHelper->module_id(waferId)};
232  return condData->isBadModuleId(moduleId);
233 }

Member Data Documentation

◆ m_checkStripsInsideModules

BooleanProperty SCT_ConfigurationConditionsTool::m_checkStripsInsideModules {this, "checkStripsInsideModule", true, " Do we want to check if a strip is bad because it is inside a bad module"}
private

Definition at line 95 of file SCT_ConfigurationConditionsTool.h.

◆ m_condKey

SG::ReadCondHandleKey<SCT_ConfigurationCondData> SCT_ConfigurationConditionsTool::m_condKey {this, "CondKey", "SCT_ConfigurationCondData", "SCT DAQ configuration"}
private

Definition at line 91 of file SCT_ConfigurationConditionsTool.h.

◆ m_pHelper

const SCT_ID* SCT_ConfigurationConditionsTool::m_pHelper {nullptr}
private

ID helper for SCT.

Definition at line 94 of file SCT_ConfigurationConditionsTool.h.

◆ m_SCTDetEleCollKey

SG::ReadCondHandleKey<InDetDD::SiDetectorElementCollection> SCT_ConfigurationConditionsTool::m_SCTDetEleCollKey {this, "SCTDetEleCollKey", "SCT_DetectorElementCollection", "Key of SiDetectorElementCollection for SCT"}
private

Definition at line 92 of file SCT_ConfigurationConditionsTool.h.


The documentation for this class was generated from the following files:
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
SCT_ConfigurationConditionsTool::badModules
virtual const std::set< Identifier > * badModules() const override
Definition: SCT_ConfigurationConditionsTool.cxx:262
SCT_ConfigurationConditionsTool::isStripInBadModule
bool isStripInBadModule(const Identifier &stripId, const SCT_ConfigurationCondData *) const
Is a strip within a bad module.
Definition: SCT_ConfigurationConditionsTool.cxx:213
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
InDet::SiDetectorElementStatus::getElementStatus
const std::vector< bool > & getElementStatus() const
Definition: SiDetectorElementStatus.h:116
get_generator_info.result
result
Definition: get_generator_info.py:21
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
SCT_ConfigurationConditionsTool::badStrips
virtual void badStrips(std::set< Identifier > &strips, const EventContext &ctx, bool ignoreBadModules=false, bool ignoreBadChips=false) const override
List of bad strips.
Definition: SCT_ConfigurationConditionsTool.cxx:361
SCT_ConfigurationConditionsTool::getCondData
const SCT_ConfigurationCondData * getCondData(const EventContext &ctx) const
Definition: SCT_ConfigurationConditionsTool.cxx:398
max
constexpr double max()
Definition: ap_fixedTest.cxx:33
InDetConditions::SCT_CHIP
@ SCT_CHIP
Definition: InDetHierarchy.h:14
SCT::getChip
constexpr unsigned int getChip(unsigned int side, bool swap, unsigned int strip)
Get the physical chip ID for the given strip.
Definition: SCT_ChipUtils.h:26
InDet::SiDetectorElementStatus::getDetectorElement
const InDetDD::SiDetectorElement * getDetectorElement(const IdentifierHash &hash) const
Definition: SiDetectorElementStatus.h:91
SCT::N_SIDES
constexpr unsigned int N_SIDES
Definition: SCT_ChipUtils.h:16
InDet::SiDetectorElementStatus::getBadCells
const std::vector< std::vector< unsigned short > > & getBadCells() const
Definition: SiDetectorElementStatus.h:120
SCT_ID::barrel_ec
int barrel_ec(const Identifier &id) const
Values of different levels (failure returns 0)
Definition: SCT_ID.h:728
SCT_ID::phi_module
int phi_module(const Identifier &id) const
Definition: SCT_ID.h:740
SG::VarHandleKey::key
const std::string & key() const
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:141
SCT_ConfigurationConditionsTool::badLinks
virtual const std::map< IdentifierHash, std::pair< bool, bool > > * badLinks() const override
Definition: SCT_ConfigurationConditionsTool.cxx:325
SCT_ID::module_id
Identifier module_id(int barrel_ec, int layer_disk, int phi_module, int eta_module) const
For a single crystal.
Definition: SCT_ID.h:416
SCT_ConfigurationConditionsTool::m_SCTDetEleCollKey
SG::ReadCondHandleKey< InDetDD::SiDetectorElementCollection > m_SCTDetEleCollKey
Definition: SCT_ConfigurationConditionsTool.h:92
python.CaloAddPedShiftConfig.type
type
Definition: CaloAddPedShiftConfig.py:42
SCT_ConfigurationConditionsTool::isGood
virtual bool isGood(const Identifier &elementId, InDetConditions::Hierarchy h=InDetConditions::DEFAULT) const override
Is the detector element good?
Definition: SCT_ConfigurationConditionsTool.cxx:155
SCT_ConfigurationCondData::isBadModuleId
bool isBadModuleId(const Identifier &moduleId) const
Check if a module identifier is bad one.
Definition: SCT_ConfigurationCondData.cxx:96
TRT::Hit::side
@ side
Definition: HitInfo.h:83
SCT_ConfigurationConditionsTool::badChips
virtual const std::map< Identifier, unsigned int > * badChips() const override
Definition: SCT_ConfigurationConditionsTool.cxx:340
SCT_ConfigurationConditionsTool::m_checkStripsInsideModules
BooleanProperty m_checkStripsInsideModules
Definition: SCT_ConfigurationConditionsTool.h:95
SCT_ConfigurationConditionsTool::getDetectorElement
const InDetDD::SiDetectorElement * getDetectorElement(const IdentifierHash &waferHash, const EventContext &ctx) const
Definition: SCT_ConfigurationConditionsTool.cxx:403
SCT_ConfigurationConditionsTool::lastStrip
@ lastStrip
Definition: SCT_ConfigurationConditionsTool.h:106
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
InDetConditions::SCT_MODULE
@ SCT_MODULE
Definition: InDetHierarchy.h:14
SCT_ConfigurationConditionsTool::isGoodChip
bool isGoodChip(const Identifier &stripId, const EventContext &ctx) const
Is a chip with this Identifier good?
Definition: SCT_ConfigurationConditionsTool.cxx:173
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
SCT_ConfigurationConditionsTool::m_pHelper
const SCT_ID * m_pHelper
ID helper for SCT.
Definition: SCT_ConfigurationConditionsTool.h:94
test_pyathena.parent
parent
Definition: test_pyathena.py:15
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
SCT_ID::wafer_hash
IdentifierHash wafer_hash(const Identifier &wafer_id) const
wafer hash from id - optimized
Definition: SCT_ID.h:492
detail::ul
unsigned long ul
Definition: PrimitiveHelpers.h:46
SCT_ConfigurationCondData
Class for data object used in SCT_ConfigurationCondAlg and SCT_ConfigurationConditionsTool.
Definition: SCT_ConfigurationCondData.h:30
SCT_ConfigurationConditionsTool::stripsPerChip
@ stripsPerChip
Definition: SCT_ConfigurationConditionsTool.h:106
python.PyKernel.detStore
detStore
Definition: PyKernel.py:41
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
SCT_ID::wafer_hash_max
size_type wafer_hash_max(void) const
Definition: SCT_ID.cxx:645
SCT_ID::layer_disk
int layer_disk(const Identifier &id) const
Definition: SCT_ID.h:734
InDetDD::SiDetectorElement
Definition: SiDetectorElement.h:109
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
SCT_ConfigurationConditionsTool::getChip
virtual int getChip(const Identifier &stripId, const EventContext &ctx) const override
Get the chip number containing a particular strip.
Definition: SCT_ConfigurationConditionsTool.cxx:236
h
CaloCondBlobAlgs_fillNoiseFromASCII.hash
dictionary hash
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:109
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
SCT_ID::strip
int strip(const Identifier &id) const
Definition: SCT_ID.h:764
InDet::SiDetectorElementStatus::getElementChipStatus
const std::vector< ChipFlags_t > & getElementChipStatus() const
Definition: SiDetectorElementStatus.h:118
SCT_ID::eta_module
int eta_module(const Identifier &id) const
Definition: SCT_ID.h:746
SCT_ConfigurationConditionsTool::m_condKey
SG::ReadCondHandleKey< SCT_ConfigurationCondData > m_condKey
Definition: SCT_ConfigurationConditionsTool.h:91
InDet::ChipFlags_t
unsigned short ChipFlags_t
Definition: SiDetectorElementStatus.h:60
SCT_ID::side
int side(const Identifier &id) const
Definition: SCT_ID.h:752
merge.status
status
Definition: merge.py:17
calibdata.copy
bool copy
Definition: calibdata.py:27
SCT_ConfigurationConditionsTool::canReportAbout
virtual bool canReportAbout(InDetConditions::Hierarchy h) const override
Can the tool report about the given component? (chip, module...)
Definition: SCT_ConfigurationConditionsTool.cxx:37
SCT::getGeometricalFromPhysicalChipFlags
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 ...
Definition: SCT_ChipUtils.h:149
SCT_ConfigurationCondData::getBadWaferIds
const std::set< Identifier > * getBadWaferIds() const
Get all bad wafer identifiers.
Definition: SCT_ConfigurationCondData.cxx:60
SCT_ID::wafer_id
Identifier wafer_id(int barrel_ec, int layer_disk, int phi_module, int eta_module, int side) const
For a single side of module.
Definition: SCT_ID.h:464
IdentifierHash
This is a "hash" representation of an Identifier. This encodes a 32 bit index which can be used to lo...
Definition: IdentifierHash.h:25
InDetConditions::SCT_STRIP
@ SCT_STRIP
Definition: InDetHierarchy.h:14
InDetConditions::SCT_SIDE
@ SCT_SIDE
Definition: InDetHierarchy.h:14
InDetConditions::DEFAULT
@ DEFAULT
Definition: InDetHierarchy.h:14
SCT::N_CHIPS_PER_SIDE
constexpr unsigned int N_CHIPS_PER_SIDE
Definition: SCT_ChipUtils.h:15
SCT_ConfigurationConditionsTool::invalidChipNumber
@ invalidChipNumber
Definition: SCT_ConfigurationConditionsTool.h:106
SG::WriteCondHandle::addDependency
void addDependency(const EventIDRange &range)
Definition: WriteCondHandle.h:279
Identifier
Definition: IdentifierFieldParser.cxx:14