ATLAS Offline Software
PixelConditionsSummaryTool.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
8 
9 PixelConditionsSummaryTool::PixelConditionsSummaryTool(const std::string& type, const std::string& name, const IInterface* parent)
11  m_pixelID(nullptr)
12 {
13  m_isActiveStatus.emplace_back("OK");
14  m_isActiveStates.emplace_back("READY");
15 
16  declareProperty("IsActiveStatus", m_isActiveStatus);
17  declareProperty("IsActiveStates", m_isActiveStates);
18 }
19 
21 
23  ATH_MSG_DEBUG("PixelConditionsSummaryTool::initialize()");
24 
27 
28  bool useByteStream = (m_useByteStreamFEI4 || m_useByteStreamFEI3 || m_useByteStreamRD53);
30  ATH_CHECK(detStore()->retrieve(m_pixelID,"PixelID"));
35  ATH_MSG_FATAL("The event data (PixelDetElStatusEventDataBaseKey) and cond data (PixelDetElStatusCondDataBaseKey) keys cannot be set at the same time.");
36  }
39 
41  for (unsigned int istate=0; istate<m_isActiveStates.size(); istate++) {
42  if (m_isActiveStates[istate]=="READY") { m_activeState.push_back(PixelDCSStateData::DCSModuleState::READY); }
43  else if (m_isActiveStates[istate]=="ON") { m_activeState.push_back(PixelDCSStateData::DCSModuleState::ON); }
44  else if (m_isActiveStates[istate]=="UNKNOWN") { m_activeState.push_back(PixelDCSStateData::DCSModuleState::UNKNOWN); }
45  else if (m_isActiveStates[istate]=="TRANSITION") { m_activeState.push_back(PixelDCSStateData::DCSModuleState::TRANSITION); }
46  else if (m_isActiveStates[istate]=="UNDEFINED") { m_activeState.push_back(PixelDCSStateData::DCSModuleState::UNDEFINED); }
47  else if (m_isActiveStates[istate]=="DISABLED") { m_activeState.push_back(PixelDCSStateData::DCSModuleState::DISABLED); }
48  else if (m_isActiveStates[istate]=="LOCKED_OUT") { m_activeState.push_back(PixelDCSStateData::DCSModuleState::LOCKED_OUT); }
49  else if (m_isActiveStates[istate]=="OFF") { m_activeState.push_back(PixelDCSStateData::DCSModuleState::OFF); }
50  else if (m_isActiveStates[istate]=="NOSTATE") { m_activeState.push_back(PixelDCSStateData::DCSModuleState::NOSTATE); }
51  else {
52  ATH_MSG_ERROR("No matching DCS state " << m_isActiveStates[istate] << " in DCSModuleState");
53  return StatusCode::FAILURE;
54  }
55  if (m_activeState.back()<0 || m_activeState.back()>31) {
56  ATH_MSG_FATAL("Logic error: status id too large. Cannot be represented by a bit");
57  return StatusCode::FAILURE;
58  }
59  m_activeStateMask |= (1u<<m_activeState.back());
60  }
61 
63  for (auto & isActiveStatus : m_isActiveStatus) {
64  if (isActiveStatus=="OK") { m_activeStatus.push_back(PixelDCSStatusData::DCSModuleStatus::OK); }
65  else if (isActiveStatus=="WARNING") { m_activeStatus.push_back(PixelDCSStatusData::DCSModuleStatus::WARNING); }
66  else if (isActiveStatus=="ERROR") { m_activeStatus.push_back(PixelDCSStatusData::DCSModuleStatus::ERROR); }
67  else if (isActiveStatus=="FATAL") { m_activeStatus.push_back(PixelDCSStatusData::DCSModuleStatus::FATAL); }
68  else if (isActiveStatus=="NOSTATUS") { m_activeStatus.push_back(PixelDCSStatusData::DCSModuleStatus::NOSTATUS); }
69  else {
70  ATH_MSG_ERROR("No matching DCS status " << isActiveStatus << " in DCSModuleStatus");
71  return StatusCode::FAILURE;
72  }
73  if (m_activeStatus.back()<0 || m_activeStatus.back()>31) {
74  ATH_MSG_FATAL("Logic error: status id too large. Cannot be represented by a bit");
75  return StatusCode::FAILURE;
76  }
77  m_activeStatusMask |= (1u<<m_activeStatus.back());
78  }
79 
80  return StatusCode::SUCCESS;
81 }
82 
84  bool useByteStream = (m_useByteStreamFEI4 || m_useByteStreamFEI3 || m_useByteStreamRD53);
85  if (!useByteStream || m_BSErrContReadKey.empty() ) {
86  return nullptr;
87  }
89  if (not idcErrCont.isValid()) { return nullptr; }
90  ATH_MSG_VERBOSE("PixelConditionsSummaryTool IDC Container fetched " << m_BSErrContReadKey.key());
91  return idcErrCont.cptr();
92 }
93 
95  IDCCacheEntry* cacheEntry = m_eventCache.get(ctx);
96  if (cacheEntry->needsUpdate(ctx)) {
97  const auto *idcErrContPtr = getContainer(ctx);
98  if (idcErrContPtr==nullptr) { // missing or not, the cache needs to be reset
99  cacheEntry->reset(ctx.evt(), nullptr);
100  }
101  else {
102  cacheEntry->reset(ctx.evt(), idcErrContPtr->cache());
103  }
104  ATH_MSG_VERBOSE("PixelConditionsSummaryTool Cache for the event reset " << cacheEntry->eventId << " with IDC container" << idcErrContPtr);
105  }
106  return cacheEntry;
107 }
108 
110  std::scoped_lock<std::mutex> lock{*m_cacheMutex.get(ctx)};
111  IDCCacheEntry* cacheEntry = getCacheEntry(ctx);
112  return cacheEntry;
113 }
114 
115 uint64_t PixelConditionsSummaryTool::getBSErrorWord(const IdentifierHash& moduleHash, const EventContext& ctx, const IInDetConditionsTool::IDCCacheEntry* cacheEntry) const {
116  return getBSErrorWord(moduleHash, moduleHash, ctx, cacheEntry);
117 }
118 
119 const InDetDD::SiDetectorElement *PixelConditionsSummaryTool::getDetectorEelement(const IdentifierHash& moduleHash, const EventContext& ctx) const {
120  if (moduleHash>=m_pixelID->wafer_hash_max()) {
121  ATH_MSG_ERROR("invalid moduleHash : " << moduleHash << " exceed maximum hash id: " << m_pixelID->wafer_hash_max());
122  return nullptr;
123  }
124 
126  const InDetDD::SiDetectorElementCollection* elements(*pixelDetEleHandle);
127  if (not pixelDetEleHandle.isValid() or elements==nullptr) {
128  ATH_MSG_ERROR(m_pixelDetEleCollKey.fullKey() << " is not available.");
129  return nullptr;
130  }
131  return elements->getDetectorElement(moduleHash);
132 }
133 
135  const int index,
136  const EventContext& ctx,
137  const IInDetConditionsTool::IDCCacheEntry* cacheEntry) const {
138  const InDetDD::SiDetectorElement *element = getDetectorEelement(moduleHash,ctx);
139  const InDetDD::PixelModuleDesign *p_design = static_cast<const InDetDD::PixelModuleDesign*>(&element->design());
140  return getBSErrorWord(p_design,index,ctx,cacheEntry);
141 }
142 
144  const int index,
145  const EventContext& ctx,
146  const IInDetConditionsTool::IDCCacheEntry* cacheEntry) const {
147 
151 
152  if (cacheEntry == nullptr){
153  std::scoped_lock<std::mutex> lock{*m_cacheMutex.get(ctx)};
154  cacheEntry=getCacheEntry(ctx);
155  }
156  const auto *idcCachePtr = cacheEntry->IDCCache;
157  if (idcCachePtr==nullptr) {
158  ATH_MSG_ERROR("PixelConditionsSummaryTool No cache! " );
159  return 0;
160  }
161  uint64_t word = (uint64_t)idcCachePtr->retrieve(index);
162  return word<m_missingErrorInfo ? word : 0;
163 }
164 
165 bool PixelConditionsSummaryTool::hasBSError(const IdentifierHash& moduleHash, const EventContext& ctx, const IInDetConditionsTool::IDCCacheEntry* cacheEntry) const {
166  const InDetDD::SiDetectorElement *element = getDetectorEelement(moduleHash,ctx);
167  const InDetDD::PixelModuleDesign *p_design = static_cast<const InDetDD::PixelModuleDesign*>(&element->design());
168  return hasBSError(p_design,moduleHash, ctx,cacheEntry);
169 }
170 
172  const IdentifierHash& moduleHash,
173  const EventContext& ctx,
174  const IInDetConditionsTool::IDCCacheEntry* cacheEntry) const {
175  uint64_t word = getBSErrorWord(p_design,moduleHash, ctx,cacheEntry);
176  if (PixelByteStreamErrors::hasError(word,PixelByteStreamErrors::TruncatedROB)) { return true; }
177  if (PixelByteStreamErrors::hasError(word,PixelByteStreamErrors::MaskedROB)) { return true; }
178  if (PixelByteStreamErrors::hasError(word,PixelByteStreamErrors::Preamble)) { return true; }
179  if (PixelByteStreamErrors::hasError(word,PixelByteStreamErrors::TimeOut)) { return true; }
180  if (PixelByteStreamErrors::hasError(word,PixelByteStreamErrors::LVL1ID)) { return true; }
181  if (PixelByteStreamErrors::hasError(word,PixelByteStreamErrors::BCID)) { return true; }
182  if (PixelByteStreamErrors::hasError(word,PixelByteStreamErrors::Trailer)) { return true; }
183  if (PixelByteStreamErrors::hasError(word,PixelByteStreamErrors::MCCLVL1IDEoECheck)) { return true; }
184  if (PixelByteStreamErrors::hasError(word,PixelByteStreamErrors::MCCBCIDEoECheck)) { return true; }
185  if (PixelByteStreamErrors::hasError(word,PixelByteStreamErrors::MCCLVL1IDCheck)) { return true; }
186  if (PixelByteStreamErrors::hasError(word,PixelByteStreamErrors::MCCEoEOverflow)) { return true; }
187  if (PixelByteStreamErrors::hasError(word,PixelByteStreamErrors::MCCHitOverflow)) { return true; }
188  return false;
189 }
190 
191 bool PixelConditionsSummaryTool::hasBSError(const IdentifierHash& moduleHash, Identifier pixid, const EventContext& ctx, const IInDetConditionsTool::IDCCacheEntry* cacheEntry) const {
192  const InDetDD::SiDetectorElement *element = getDetectorEelement(moduleHash,ctx);
193  const InDetDD::PixelModuleDesign *p_design = static_cast<const InDetDD::PixelModuleDesign*>(&element->design());
194 
195  if (hasBSError(p_design, moduleHash, ctx, cacheEntry)) { return true; }
196 
197  int maxHash = m_pixelID->wafer_hash_max();
198 
199  std::array<InDetDD::PixelDiodeTree::CellIndexType,2> diode_idx
201  m_pixelID->eta_index(pixid));
202  InDetDD::PixelDiodeTree::DiodeProxy si_param ( p_design->diodeProxyFromIdx(diode_idx));
203  std::uint32_t chFE = p_design->getFE(si_param);
204 
205  int indexFE = (1+chFE)*maxHash+static_cast<int>(moduleHash); // (FE_channel+1)*2048 + moduleHash
206  uint64_t word = getBSErrorWord(p_design,indexFE,ctx,cacheEntry);
207  if (PixelByteStreamErrors::hasError(word,PixelByteStreamErrors::Preamble)) { return true; }
208  if (PixelByteStreamErrors::hasError(word,PixelByteStreamErrors::TimeOut)) { return true; }
209  if (PixelByteStreamErrors::hasError(word,PixelByteStreamErrors::LVL1ID)) { return true; }
210  if (PixelByteStreamErrors::hasError(word,PixelByteStreamErrors::BCID)) { return true; }
211  if (PixelByteStreamErrors::hasError(word,PixelByteStreamErrors::Trailer)) { return true; }
212  if (PixelByteStreamErrors::hasError(word,PixelByteStreamErrors::MCCLVL1IDEoECheck)) { return true; }
213  if (PixelByteStreamErrors::hasError(word,PixelByteStreamErrors::MCCBCIDEoECheck)) { return true; }
214  if (PixelByteStreamErrors::hasError(word,PixelByteStreamErrors::MCCLVL1IDCheck)) { return true; }
215  if (PixelByteStreamErrors::hasError(word,PixelByteStreamErrors::MCCEoEOverflow)) { return true; }
216  if (PixelByteStreamErrors::hasError(word,PixelByteStreamErrors::MCCHitOverflow)) { return true; }
217  return false;
218 }
219 
220 bool PixelConditionsSummaryTool::isActive(const Identifier& /*elementId*/, const InDetConditions::Hierarchy /*h*/, const EventContext& /*ctx*/) const {
221  return true;
222 }
223 
224 bool PixelConditionsSummaryTool::isActive(const IdentifierHash& moduleHash, const EventContext& ctx) const {
225 
226  // The index array is defined in PixelRawDataProviderTool::SizeOfIDCInDetBSErrContainer()
227  // Here, 52736 is a separator beween error flags and isActive flags.
228  bool useByteStream = (m_useByteStreamFEI4 || m_useByteStreamFEI3 || m_useByteStreamRD53);
229  if (useByteStream && getBSErrorWord(moduleHash,moduleHash+52736,ctx)!=1) { return false; }
230 
232  bool isDCSActive = false;
233  for (int istate : m_activeState) {
234  if (istate==dcsstate_data->getModuleStatus(moduleHash)) { isDCSActive=true; }
235  }
236  if (!isDCSActive) { return false; }
237 
238  if (!m_condTDAQKey.empty() && SG::ReadCondHandle<PixelTDAQData>(m_condTDAQKey,ctx)->getModuleStatus(moduleHash)) { return false; }
239 
240  if (SG::ReadCondHandle<PixelDeadMapCondData>(m_condDeadMapKey,ctx)->getModuleStatus(moduleHash)) { return false; }
241 
242  return true;
243 }
244 
245 bool PixelConditionsSummaryTool::isActive(const IdentifierHash& moduleHash, const Identifier& elementId, const EventContext& ctx) const {
246 
247  // The index array is defined in PixelRawDataProviderTool::SizeOfIDCInDetBSErrContainer()
248  // Here, 52736 is a separator beween error flags and isActive flags.
249  bool useByteStream = (m_useByteStreamFEI4 || m_useByteStreamFEI3 || m_useByteStreamRD53);
250  if (useByteStream && getBSErrorWord(moduleHash,moduleHash+52736,ctx)!=1) { return false; }
251 
253  bool isDCSActive = false;
254  for (int istate : m_activeState) {
255  if (istate==dcsstate_data->getModuleStatus(moduleHash)) { isDCSActive=true; }
256  }
257  if (!isDCSActive) { return false; }
258 
259  if (!m_condTDAQKey.empty() && SG::ReadCondHandle<PixelTDAQData>(m_condTDAQKey,ctx)->getModuleStatus(moduleHash)) { return false; }
260 
261  if (SG::ReadCondHandle<PixelDeadMapCondData>(m_condDeadMapKey,ctx)->getModuleStatus(moduleHash)) { return false; }
262 
263  return checkChipStatus(moduleHash, elementId, ctx);
264 }
265 
266 double PixelConditionsSummaryTool::activeFraction(const IdentifierHash & /*moduleHash*/, const Identifier & /*idStart*/, const Identifier & /*idEnd*/, const EventContext& /*ctx*/) const {
267  return 1.0;
268 }
269 
270 bool PixelConditionsSummaryTool::isGood(const Identifier& elementId, const InDetConditions::Hierarchy h, const EventContext& ctx) const {
271  Identifier moduleID = m_pixelID->wafer_id(elementId);
272  IdentifierHash moduleHash = m_pixelID->wafer_hash(moduleID);
273 
274  if (hasBSError(moduleHash, ctx)) { return false; }
275 
277  bool isDCSActive = false;
278  for (int istate : m_activeState) {
279  if (istate==dcsstate_data->getModuleStatus(moduleHash)) { isDCSActive=true; }
280  }
281  if (!isDCSActive) { return false; }
282 
284  bool isDCSGood = false;
285  for (int activeStatus : m_activeStatus) {
286  if (activeStatus==dcsstatus_data->getModuleStatus(moduleHash)) { isDCSGood=true; }
287  }
288  if (!isDCSGood) { return false; }
289 
290  if (!m_condTDAQKey.empty() && SG::ReadCondHandle<PixelTDAQData>(m_condTDAQKey,ctx)->getModuleStatus(moduleHash)) { return false; }
291 
292  if (SG::ReadCondHandle<PixelDeadMapCondData>(m_condDeadMapKey, ctx)->getModuleStatus(moduleHash)) { return false; }
293 
295  if (!checkChipStatus(moduleHash, elementId,ctx)) { return false; }
296  if (hasBSError(moduleHash, elementId, ctx)) { return false; }
297  }
298 
299  return true;
300 }
301 
302 namespace {
303  inline void andStatus(const std::unordered_map<int, int> &status_map, unsigned int status_mask, std::vector<bool> &module_status) {
304  for (const std::pair<const int, int> &elm : status_map ) {
305  // set modules good if the module status passes the mask.
306  module_status.at(elm.first) = module_status.at(elm.first) && (status_mask & (1<<elm.second));
307  }
308  }
309  inline void andNotStatus(const std::unordered_map<int, int> &status_map, std::vector<bool> &module_status) {
310  for (const std::pair<const int, int> &elm : status_map ) {
311  // set modules good if the module status passes the mask.
312  module_status.at(elm.first) = module_status.at(elm.first) && (elm.second==0);
313  }
314  }
315  bool isBSError(uint64_t error, uint64_t max_error, uint64_t mask) {
316  return error<max_error && (error & mask);
317  }
318 }
319 
320 namespace {
323  if (!ret) {
324  throw std::runtime_error("Object is not of expected type InDet::PixelDetectorElementStatus");
325  }
326  return ret;
327  }
328 }
329 std::unique_ptr<InDet::SiDetectorElementStatus>
334  if (whandle) {
335  whandle->addDependency (input_element_status);
336  }
337  return std::make_unique<InDet::PixelDetectorElementStatus>(*castToDerived(input_element_status.cptr()));
338  }
339  else if (!m_pixelDetElStatusEventKey.empty()) {
341  return std::make_unique<InDet::PixelDetectorElementStatus>(*castToDerived(input_element_status.cptr()));
342  }
343  else {
345  if (not pixelDetEleHandle.isValid() ) {
346  std::stringstream msg;
347  msg << m_pixelDetEleCollKey.fullKey() << " is not available.";
348  throw std::runtime_error(msg.str());
349  }
350  if (whandle) {
351  whandle->addDependency (pixelDetEleHandle);
352  }
353  const InDetDD::SiDetectorElementCollection* elements(*pixelDetEleHandle);
354  return std::make_unique<InDet::PixelDetectorElementStatus>(*elements);
355  }
356 }
357 
358 std::unique_ptr<InDet::SiDetectorElementStatus>
361  std::unique_ptr<InDet::SiDetectorElementStatus> element_status( createDetectorElementStatus(ctx, whandle));
362  std::vector<bool> &status=element_status->getElementStatus();
363  status.resize(m_pixelID->wafer_hash_max(),
364  ((1<<0) & m_activeStateMask) // default value of PixelDCSStateData is 0
365  );
366  std::vector<InDet::ChipFlags_t> &chip_status=element_status->getElementChipStatus();
367  chip_status.resize(status.size(),0);
368 
369  // module state
370  {
372  andStatus(dcs_state_handle->moduleStatusMap(), m_activeStateMask, status);
373  if (whandle) {
374  whandle->addDependency (dcs_state_handle);
375  }
376  }
377  const bool active_only = m_activeOnly;
378  if (!active_only) {
380  andStatus(dcs_status_handle->moduleStatusMap(), m_activeStatusMask, status);
381  if (whandle) {
382  whandle->addDependency (dcs_status_handle);
383  }
384  }
385  if (!m_condTDAQKey.empty()) {
387  andNotStatus(tdaq_handle->moduleStatusMap(), status);
388  if (whandle) {
389  whandle->addDependency (tdaq_handle);
390  }
391  }
392  {
394  andNotStatus(dead_map_handle->moduleStatusMap(), status);
395  if (whandle) {
396  whandle->addDependency (dead_map_handle);
397  }
398 
399  const PixelDeadMapCondData *dead_map = dead_map_handle.cptr();
400  unsigned int element_i=0;
401  for (const InDetDD::SiDetectorElement *element : element_status->getDetectorElements()) {
402  if (status[element_i]) {
403  const InDetDD::PixelModuleDesign *p_design = static_cast<const InDetDD::PixelModuleDesign*>(&element->design());
404  InDetDD::PixelReadoutTechnology readout_technology = p_design->getReadoutTechnology();
405  unsigned int number_of_chips = readout_technology == InDetDD::PixelReadoutTechnology::FEI3 ? 2*p_design->numberOfCircuits() : p_design->numberOfCircuits();
406  InDet::ChipFlags_t chip_mask = (1ul<<number_of_chips)-1ul;
407  assert( chip_mask != 0 );
408  std::bitset<16> dead_chip_mask(dead_map->getChipStatus(element_i));
409  chip_status[element_i] = chip_mask & (~static_cast<InDet::ChipFlags_t>(dead_chip_mask.to_ulong()));
410  }
411  ++element_i;
412  }
413  }
414 
415 
416  static_assert( static_cast<unsigned int>(InDetDD::PixelReadoutTechnology::FEI4) < 32u) ;
417  static_assert( static_cast<unsigned int>(InDetDD::PixelReadoutTechnology::FEI3) < 32u) ;
418  static_assert( static_cast<unsigned int>(InDetDD::PixelReadoutTechnology::RD53) < 32u) ;
422  if (readout_technology_mask) {
423  if (whandle) {
424  ATH_MSG_ERROR("PixelConditionsSummaryTool not configured for use with conditions objects");
426  }
427  std::scoped_lock<std::mutex> lock{*m_cacheMutex.get(ctx)};
428  const IDCInDetBSErrContainer_Cache *idcCachePtr = nullptr;
429  idcCachePtr = getCacheEntry(ctx)->IDCCache;
430  if (idcCachePtr==nullptr) {
431  ATH_MSG_ERROR("PixelConditionsSummaryTool No cache! " );
432  }
433  else {
434 
447 
458 
459  // The index array is defined in PixelRawDataProviderTool::SizeOfIDCInDetBSErrContainer()
460  // Here, 52736 is a separator beween error flags and isActive flags.
461  unsigned int element_offset_i = (active_only ? 52736 : 0);
462 
463  unsigned int element_i=0;
464  unsigned int maxHash = m_pixelID->wafer_hash_max();
465  for (const InDetDD::SiDetectorElement *element : element_status->getDetectorElements()) {
466  const InDetDD::PixelModuleDesign *p_design = static_cast<const InDetDD::PixelModuleDesign*>(&element->design());
467  InDetDD::PixelReadoutTechnology readout_technology = p_design->getReadoutTechnology();
468  unsigned int readout_technology_flags = readout_technology_mask & Pixel::makeReadoutTechnologyBit(readout_technology);
469 
470  // set to false if has one of the considered errors and the readout technology is considered.
471  status.at(element_i) = status.at(element_i) && not ( readout_technology_flags
472  && ( !active_only
473  ? isBSError(static_cast<uint64_t>(idcCachePtr->retrieve(element_i)), m_missingErrorInfo, error_mask)
474  : idcCachePtr->retrieve(element_i+element_offset_i)!=1 ));
475 
476  // compute the status for the individual front-ends
477  if (status[element_i]) {
478  unsigned int number_of_chips = readout_technology == InDetDD::PixelReadoutTechnology::FEI3 ? 2*p_design->numberOfCircuits() : p_design->numberOfCircuits();
479  InDet::ChipFlags_t chip_mask = status[element_i] ? (1ul<<number_of_chips)-1ul : 0;
480  assert( chip_mask != 0 );
481  InDet::ChipFlags_t bs_status_flags = active_only ? chip_mask : 0;
482  if (!active_only) {
483  for (unsigned int chip_i =0; chip_i < number_of_chips; ++chip_i) {
484  // get bytestream error for chip
485  unsigned int indexFE = (1+chip_i)*maxHash + element_i; // (FE_channel+1)*2048 + moduleHash
486  InDet::ChipFlags_t chip_flag =not ( readout_technology_flags
487  && (isBSError(static_cast<uint64_t>(idcCachePtr->retrieve(indexFE)), m_missingErrorInfo, chip_error_mask)));
488  bs_status_flags |= (chip_flag << chip_i);
489  }
490  }
491  chip_status[element_i] &= (bs_status_flags & chip_mask);
492  }
493  else {
494  chip_status[element_i] = 0;
495  }
496  ++element_i;
497  }
498  }
499  }
500  return element_status;
501 }
502 
503 bool PixelConditionsSummaryTool::isGood(const IdentifierHash& moduleHash, const EventContext& ctx) const {
504 
505  if (hasBSError(moduleHash, ctx)) { return false; }
506 
508  bool isDCSActive = false;
509  for (int istate : m_activeState) {
510  if (istate==dcsstate_data->getModuleStatus(moduleHash)) { isDCSActive=true; }
511  }
512  if (!isDCSActive) { return false; }
513 
515  bool isDCSGood = false;
516  for (int activeStatus : m_activeStatus) {
517  if (activeStatus==dcsstatus_data->getModuleStatus(moduleHash)) { isDCSGood=true; }
518  }
519  if (!isDCSGood) { return false; }
520 
521  if (!m_condTDAQKey.empty() && SG::ReadCondHandle<PixelTDAQData>(m_condTDAQKey,ctx)->getModuleStatus(moduleHash)) { return false; }
522 
523  if (SG::ReadCondHandle<PixelDeadMapCondData>(m_condDeadMapKey, ctx)->getModuleStatus(moduleHash)) { return false; }
524 
525  return true;
526 }
527 
528 bool PixelConditionsSummaryTool::isGood(const IdentifierHash & moduleHash, const Identifier &elementId, const EventContext& ctx, const IInDetConditionsTool::IDCCacheEntry* cacheEntry) const {
529 
530  if (hasBSError(moduleHash, ctx, cacheEntry)) { return false; }
531 
533  bool isDCSActive = false;
534  for (int istate : m_activeState) {
535  if (istate==dcsstate_data->getModuleStatus(moduleHash)) { isDCSActive=true; }
536  }
537  if (!isDCSActive) { return false; }
538 
540  bool isDCSGood = false;
541  for (int activeStatus : m_activeStatus) {
542  if (activeStatus==dcsstatus_data->getModuleStatus(moduleHash)) { isDCSGood=true; }
543  }
544  if (!isDCSGood) { return false; }
545 
546  if (!m_condTDAQKey.empty() && SG::ReadCondHandle<PixelTDAQData>(m_condTDAQKey,ctx)->getModuleStatus(moduleHash)) { return false; }
547 
548  if (SG::ReadCondHandle<PixelDeadMapCondData>(m_condDeadMapKey, ctx)->getModuleStatus(moduleHash)) { return false; }
549 
550  if (!checkChipStatus(moduleHash, elementId, ctx)) { return false; }
551 
552  if (hasBSError(moduleHash, elementId, ctx, cacheEntry)) { return false; }
553 
554  return true;
555 }
556 
557 double PixelConditionsSummaryTool::goodFraction(const IdentifierHash & moduleHash, const Identifier & idStart, const Identifier & idEnd, const EventContext& ctx) const {
558 
559  if (!isGood(moduleHash, ctx)) { return 0.0; }
560 
561  Identifier moduleID = m_pixelID->wafer_id(moduleHash);
562 
563  int phiStart = m_pixelID->phi_index(idStart);
564  int etaStart = m_pixelID->eta_index(idStart);
565 
566  int phiEnd = m_pixelID->phi_index(idEnd);
567  int etaEnd = m_pixelID->eta_index(idEnd);
568 
569  double nTotal = (std::abs(phiStart-phiEnd)+1.0)*(std::abs(etaStart-etaEnd)+1.0);
570 
571  double nGood = 0.0;
573  for (int i=std::min(phiStart,phiEnd); i<=std::max(phiStart,phiEnd); i++) {
574  for (int j=std::min(etaStart,etaEnd); j<=std::max(etaStart,etaEnd); j++) {
575  if (checkChipStatus(moduleHash, m_pixelID->pixel_id(moduleID,i,j), ctx)) {
576  if (!hasBSError(moduleHash, m_pixelID->pixel_id(moduleID,i,j), ctx, cacheEntry)) { nGood++; }
577  }
578  }
579  }
580  return nGood/nTotal;
581 }
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
PixelFEUtils.h
python.StoreID.UNKNOWN
int UNKNOWN
Definition: StoreID.py:16
PixelDCSStatusData::moduleStatusMap
const IntConditions & moduleStatusMap() const
Definition: PixelDCSStatusData.h:25
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
PixelID::phi_index
int phi_index(const Identifier &id) const
Definition: PixelID.h:639
InDetDD::PixelReadoutTechnology
PixelReadoutTechnology
Definition: PixelReadoutDefinitions.h:37
InDet::SiDetectorElementStatus::getElementStatus
const std::vector< bool > & getElementStatus() const
Definition: SiDetectorElementStatus.h:116
InDetDD::SiDetectorElementCollection
Definition: SiDetectorElementCollection.h:27
python.Constants.FATAL
int FATAL
Definition: Control/AthenaCommon/python/Constants.py:18
SG::ReadCondHandle
Definition: ReadCondHandle.h:40
InDetDD::PixelModuleDesign
Definition: PixelModuleDesign.h:45
SG::ReadHandle::cptr
const_pointer_type cptr()
Dereference the pointer.
PixelConditionsSummaryTool::checkChipStatus
bool checkChipStatus(IdentifierHash moduleHash, Identifier pixid, const EventContext &ctx) const
Definition: PixelConditionsSummaryTool.h:181
xAOD::uint32_t
setEventNumber uint32_t
Definition: EventInfo_v1.cxx:127
PixelConditionsSummaryTool::m_activeStatusMask
unsigned int m_activeStatusMask
mask in which each status is represented by a bit and for status values which are cnsidered active th...
Definition: PixelConditionsSummaryTool.h:98
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:67
index
Definition: index.py:1
max
constexpr double max()
Definition: ap_fixedTest.cxx:33
min
constexpr double min()
Definition: ap_fixedTest.cxx:26
PixelConditionsSummaryTool::hasBSError
virtual bool hasBSError(const IdentifierHash &moduleHash, const EventContext &ctx, const IDCCacheEntry *cacheEntry=nullptr) const override final
Definition: PixelConditionsSummaryTool.cxx:165
IDCInDetBSErrContainer
IDC like storage for BS errors, TODO, customise implementation further so that we store int rather th...
Definition: IDCInDetBSErrContainer.h:19
IInDetConditionsTool::IDCCacheEntry::needsUpdate
bool needsUpdate(const EventContext &ctx) const
Definition: IInDetConditionsTool.h:41
PixelConditionsSummaryTool::getCacheEntry
IDCCacheEntry * getCacheEntry(const EventContext &ctx) const
Return cache for the current event If, for current slot, the cache is outdated it is retrieved from t...
Definition: PixelConditionsSummaryTool.cxx:94
python.Constants.ERROR
int ERROR
Definition: Control/AthenaCommon/python/Constants.py:17
Pixel::makeReadoutTechnologyBit
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.
Definition: PixelFEUtils.h:63
PixelConditionsSummaryTool::m_isActiveStates
std::vector< std::string > m_isActiveStates
Definition: PixelConditionsSummaryTool.h:94
SG::ReadCondHandle::isValid
bool isValid()
Definition: ReadCondHandle.h:206
PixelConditionsSummaryTool::~PixelConditionsSummaryTool
virtual ~PixelConditionsSummaryTool()
InDetConditions::PIXEL_CHIP
@ PIXEL_CHIP
Definition: InDetHierarchy.h:15
PixelByteStreamErrors::MCCBCIDEoECheck
@ MCCBCIDEoECheck
Definition: PixelByteStreamErrors.h:15
InDetDD::PixelReadoutTechnology::FEI3
@ FEI3
PixelConditionsSummaryTool::getCacheEntryOut
virtual IDCCacheEntry * getCacheEntryOut(const EventContext &ctx) const override final
Definition: PixelConditionsSummaryTool.cxx:109
IInDetConditionsTool::IDCCacheEntry::reset
void reset(EventContext::ContextEvt_t evtId, const IDCInDetBSErrContainer_Cache *cache)
Definition: IInDetConditionsTool.h:36
InDetConditions::Hierarchy
Hierarchy
Definition: InDetHierarchy.h:14
PixelConditionsSummaryTool::isGood
virtual bool isGood(const Identifier &elementId, const InDetConditions::Hierarchy h, const EventContext &ctx) const override final
Definition: PixelConditionsSummaryTool.cxx:270
PixelByteStreamErrors::makeError
constexpr IDCInDetBSErrContainer::ErrorCode makeError(PixelErrorsEnum errType)
helper to be used in clients to fetch error information
Definition: PixelByteStreamErrors.h:21
python.RatesEmulationExample.lock
lock
Definition: RatesEmulationExample.py:148
PixelConditionsSummaryTool::getBSErrorWord
virtual uint64_t getBSErrorWord(const IdentifierHash &moduleHash, const EventContext &ctx, const IDCCacheEntry *cacheEntry=nullptr) const override final
Definition: PixelConditionsSummaryTool.cxx:115
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
SG::VarHandleKey::key
const std::string & key() const
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:141
SG::VarHandleKey::empty
bool empty() const
Test if the key is blank.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:150
InDetDD::PixelModuleDesign::getFE
static unsigned int getFE(const PixelDiodeTree::DiodeProxy &diode_proxy)
Definition: PixelModuleDesign.h:258
PixelConditionsSummaryTool::m_condDCSStateKey
SG::ReadCondHandleKey< PixelDCSStateData > m_condDCSStateKey
Definition: PixelConditionsSummaryTool.h:110
InDetDD::PixelModuleDesign::diodeProxyFromIdx
PixelDiodeTree::DiodeProxy diodeProxyFromIdx(const std::array< PixelDiodeTree::IndexType, 2 > &idx) const
Definition: PixelModuleDesign.h:248
Trk::u
@ u
Enums for curvilinear frames.
Definition: ParamDefs.h:77
python.CaloAddPedShiftConfig.type
type
Definition: CaloAddPedShiftConfig.py:42
PixelID::wafer_id
Identifier wafer_id(int barrel_ec, int layer_disk, int phi_module, int eta_module) const
For a single crystal.
Definition: PixelID.h:360
PixelByteStreamErrors::TimeOut
@ TimeOut
Definition: PixelByteStreamErrors.h:13
python.utils.AtlRunQueryLookup.mask
string mask
Definition: AtlRunQueryLookup.py:459
IdentifiableValueCache::retrieve
T retrieve(size_t i)
Retrieve the Value stored in that hash.
Definition: IdentifiableValueCache.h:49
AthCommonDataStore< AthCommonMsg< AlgTool > >::detStore
const ServiceHandle< StoreGateSvc > & detStore() const
The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:95
PixelConditionsSummaryTool.h
PixelConditionsSummaryTool::m_condDCSStatusKey
SG::ReadCondHandleKey< PixelDCSStatusData > m_condDCSStatusKey
Definition: PixelConditionsSummaryTool.h:113
InDetDD::PixelReadoutTechnology::RD53
@ RD53
PixelByteStreamErrors::BCID
@ BCID
Definition: PixelByteStreamErrors.h:13
PixelDetectorElementStatus.h
PixelConditionsSummaryTool::isActive
virtual bool isActive(const Identifier &elementId, const InDetConditions::Hierarchy h, const EventContext &ctx) const override final
Definition: PixelConditionsSummaryTool.cxx:220
InDet::PixelDetectorElementStatus
Event data to hold the status information for Pixel modules.
Definition: PixelDetectorElementStatus.h:14
IInDetConditionsTool::IDCCacheEntry::eventId
EventContext::ContextEvt_t eventId
Definition: IInDetConditionsTool.h:33
PixelConditionsSummaryTool::m_pixelDetElStatusEventKey
SG::ReadHandleKey< InDet::SiDetectorElementStatus > m_pixelDetElStatusEventKey
Definition: PixelConditionsSummaryTool.h:128
PixelID::wafer_hash
IdentifierHash wafer_hash(Identifier wafer_id) const
wafer hash from id
Definition: PixelID.h:383
PixelConditionsSummaryTool::m_BSErrContReadKey
SG::ReadHandleKey< IDCInDetBSErrContainer > m_BSErrContReadKey
Definition: PixelConditionsSummaryTool.h:122
PixelConditionsSummaryTool::m_activeStateMask
unsigned int m_activeStateMask
mask in which each state is represented by a bit and for states which are cnsidered active the corres...
Definition: PixelConditionsSummaryTool.h:97
PixelConditionsSummaryTool::m_useByteStreamFEI4
Gaudi::Property< bool > m_useByteStreamFEI4
Definition: PixelConditionsSummaryTool.h:101
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
lumiFormat.i
int i
Definition: lumiFormat.py:85
PixelConditionsSummaryTool::initialize
virtual StatusCode initialize() override
Definition: PixelConditionsSummaryTool.cxx:22
InDet::SiDetectorElementStatus
Definition: SiDetectorElementStatus.h:62
PixelByteStreamErrors::Preamble
@ Preamble
Definition: PixelByteStreamErrors.h:13
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
Definition: AthCommonDataStore.h:145
IDetectorElementStatusTool::getInvalidRange
static EventIDRange getInvalidRange()
Definition: IDetectorElementStatusTool.h:33
InDetDD::PixelModuleDesign::numberOfCircuits
int numberOfCircuits() const
Total number of circuits:
Definition: PixelModuleDesign.h:306
PixelConditionsSummaryTool::PixelConditionsSummaryTool
PixelConditionsSummaryTool(const std::string &type, const std::string &name, const IInterface *parent)
Definition: PixelConditionsSummaryTool.cxx:9
PixelByteStreamErrors::MCCLVL1IDEoECheck
@ MCCLVL1IDEoECheck
Definition: PixelByteStreamErrors.h:15
PixelTDAQData::moduleStatusMap
const IntConditions & moduleStatusMap() const
Definition: PixelTDAQData.h:25
test_pyathena.parent
parent
Definition: test_pyathena.py:15
PixelID::eta_index
int eta_index(const Identifier &id) const
Definition: PixelID.h:645
xAOD::uint64_t
uint64_t
Definition: EventInfo_v1.cxx:123
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
PixelDeadMapCondData::getChipStatus
int getChipStatus(const int chanNum) const
Definition: PixelDeadMapCondData.cxx:31
InDet::SiDetectorElementStatus::getDetectorElements
const InDetDD::SiDetectorElementCollection & getDetectorElements() const
Definition: SiDetectorElementStatus.h:94
detail::ul
unsigned long ul
Definition: PrimitiveHelpers.h:47
SG::VarHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:103
PixelConditionsSummaryTool::m_pixelID
const PixelID * m_pixelID
Definition: PixelConditionsSummaryTool.h:91
python.Constants.WARNING
int WARNING
Definition: Control/AthenaCommon/python/Constants.py:16
python.compareNtuple.nGood
nGood
Definition: compareNtuple.py:55
PixelByteStreamErrors::MaskedROB
@ MaskedROB
Definition: PixelByteStreamErrors.h:14
HTXS::UNDEFINED
@ UNDEFINED
Definition: HiggsTemplateCrossSectionsDefs.h:13
PixelConditionsSummaryTool::m_activeState
std::vector< int > m_activeState
Definition: PixelConditionsSummaryTool.h:95
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
PixelByteStreamErrors::MCCHitOverflow
@ MCCHitOverflow
Definition: PixelByteStreamErrors.h:15
PixelID::wafer_hash_max
size_type wafer_hash_max() const
Definition: PixelID.cxx:801
PixelByteStreamErrors::MCCLVL1IDCheck
@ MCCLVL1IDCheck
Definition: PixelByteStreamErrors.h:15
PixelConditionsSummaryTool::m_condTDAQKey
SG::ReadCondHandleKey< PixelTDAQData > m_condTDAQKey
Definition: PixelConditionsSummaryTool.h:116
PixelConditionsSummaryTool::activeFraction
virtual double activeFraction(const IdentifierHash &moduleHash, const Identifier &idStart, const Identifier &idEnd, const EventContext &ctx) const override final
Definition: PixelConditionsSummaryTool.cxx:266
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
PixelByteStreamErrors::MCCEoEOverflow
@ MCCEoEOverflow
Definition: PixelByteStreamErrors.h:15
PixelDCSStateData::getModuleStatus
int getModuleStatus(const int chanNum) const
Definition: PixelDCSStateData.cxx:11
PixelConditionsSummaryTool::m_pixelDetElStatusCondKey
SG::ReadCondHandleKey< InDet::SiDetectorElementStatus > m_pixelDetElStatusCondKey
Definition: PixelConditionsSummaryTool.h:130
PixelDCSStateData::moduleStatusMap
const IntConditions & moduleStatusMap() const
Definition: PixelDCSStateData.h:28
InDetDD::SiDetectorElement
Definition: SiDetectorElement.h:109
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
InDetDD::PixelReadoutTechnology::FEI4
@ FEI4
InDetDD::PixelModuleDesign::getReadoutTechnology
PixelReadoutTechnology getReadoutTechnology() const
Definition: PixelModuleDesign.h:391
PixelConditionsSummaryTool::goodFraction
virtual double goodFraction(const IdentifierHash &moduleHash, const Identifier &idStart, const Identifier &idEnd, const EventContext &ctx) const override final
Definition: PixelConditionsSummaryTool.cxx:557
PixelDCSStatusData::getModuleStatus
int getModuleStatus(const int chanNum) const
Definition: PixelDCSStatusData.cxx:11
h
InDetDD::PixelDiodeTree::DiodeProxy
Helper class to access parameters of a diode.
Definition: PixelDiodeTree.h:183
PixelConditionsSummaryTool::getContainer
const IDCInDetBSErrContainer * getContainer(const EventContext &ctx) const
Obtains container form the SG, if it is missing it will complain (hard-coded 3 times per job) and ret...
Definition: PixelConditionsSummaryTool.cxx:83
trigbs_mixBSevents.input
input
Definition: trigbs_mixBSevents.py:56
InDet::SiDetectorElementStatus::getElementChipStatus
const std::vector< ChipFlags_t > & getElementChipStatus() const
Definition: SiDetectorElementStatus.h:118
PixelConditionsSummaryTool::getDetectorElementStatus
virtual std::unique_ptr< InDet::SiDetectorElementStatus > getDetectorElementStatus(const EventContext &ctx, SG::WriteCondHandle< InDet::SiDetectorElementStatus > *whandle) const override
get the module and chip status of Si detector elements
Definition: PixelConditionsSummaryTool.cxx:359
PixelID::pixel_id
Identifier pixel_id(int barrel_ec, int layer_disk, int phi_module, int eta_module, int phi_index, int eta_index) const
For an individual pixel.
Definition: PixelID.h:428
PixelConditionsSummaryTool::m_condDeadMapKey
SG::ReadCondHandleKey< PixelDeadMapCondData > m_condDeadMapKey
Definition: PixelConditionsSummaryTool.h:119
AthCommonMsg< AlgTool >::msg
MsgStream & msg() const
Definition: AthCommonMsg.h:24
PixelConditionsSummaryTool::createDetectorElementStatus
std::unique_ptr< InDet::SiDetectorElementStatus > createDetectorElementStatus(const EventContext &ctx, SG::WriteCondHandle< InDet::SiDetectorElementStatus > *whandle) const
Create a new detector element status element container.
Definition: PixelConditionsSummaryTool.cxx:330
PixelConditionsSummaryTool::getDetectorEelement
const InDetDD::SiDetectorElement * getDetectorEelement(const IdentifierHash &moduleHash, const EventContext &ctx) const
Definition: PixelConditionsSummaryTool.cxx:119
PixelConditionsSummaryTool::m_useByteStreamFEI3
Gaudi::Property< bool > m_useByteStreamFEI3
Definition: PixelConditionsSummaryTool.h:104
InDet::ChipFlags_t
unsigned short ChipFlags_t
Definition: SiDetectorElementStatus.h:60
PixelDeadMapCondData
Definition: PixelDeadMapCondData.h:11
merge.status
status
Definition: merge.py:16
PixelByteStreamErrors.h
PixelConditionsSummaryTool::m_pixelDetEleCollKey
SG::ReadCondHandleKey< InDetDD::SiDetectorElementCollection > m_pixelDetEleCollKey
Definition: PixelConditionsSummaryTool.h:125
InDetDD::PixelDiodeTree::makeCellIndex
static constexpr std::array< PixelDiodeTree::CellIndexType, 2 > makeCellIndex(T local_x_idx, T local_y_idx)
Create a 2D cell index from the indices in local-x (phi, row) and local-y (eta, column) direction.
Definition: PixelDiodeTree.h:320
PixelConditionsSummaryTool::m_useByteStreamRD53
Gaudi::Property< bool > m_useByteStreamRD53
Definition: PixelConditionsSummaryTool.h:107
PixelConditionsSummaryTool::m_missingErrorInfo
const uint64_t m_missingErrorInfo
Definition: PixelConditionsSummaryTool.h:135
AthAlgTool
Definition: AthAlgTool.h:26
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
InDetDD::SiDetectorElement::design
virtual const SiDetectorDesign & design() const override final
access to the local description (inline):
PixelConditionsSummaryTool::m_activeOnly
Gaudi::Property< bool > m_activeOnly
Definition: PixelConditionsSummaryTool.h:133
error
Definition: IImpactPoint3dEstimator.h:70
SG::WriteCondHandle
Definition: WriteCondHandle.h:26
IdentifiableValueCache
This class is to provide an event wide MT container for concurrent storing of basic types,...
Definition: IdentifiableValueCache.h:19
InDetDD::SiDetectorElementCollection::getDetectorElement
const SiDetectorElement * getDetectorElement(const IdentifierHash &hash) const
Definition: SiDetectorElementCollection.cxx:9
PixelByteStreamErrors::TruncatedROB
@ TruncatedROB
Definition: PixelByteStreamErrors.h:14
PixelByteStreamErrors::Trailer
@ Trailer
Definition: PixelByteStreamErrors.h:13
IInDetConditionsTool::IDCCacheEntry::IDCCache
const IDCInDetBSErrContainer_Cache * IDCCache
Definition: IInDetConditionsTool.h:34
PixelConditionsSummaryTool::m_activeStatus
std::vector< int > m_activeStatus
Definition: PixelConditionsSummaryTool.h:96
IInDetConditionsTool::IDCCacheEntry
Definition: IInDetConditionsTool.h:32
PixelConditionsSummaryTool::m_isActiveStatus
std::vector< std::string > m_isActiveStatus
Definition: PixelConditionsSummaryTool.h:93
SG::WriteCondHandle::addDependency
void addDependency(const EventIDRange &range)
Definition: WriteCondHandle.h:279
PixelDeadMapCondData::moduleStatusMap
const IntConditions & moduleStatusMap() const
Definition: PixelDeadMapCondData.h:19
SG::ReadCondHandle::cptr
const_pointer_type cptr()
Definition: ReadCondHandle.h:67
PixelByteStreamErrors::LVL1ID
@ LVL1ID
Definition: PixelByteStreamErrors.h:13
Identifier
Definition: IdentifierFieldParser.cxx:14