Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
EmulatedDefectsToDetectorElementStatusCondAlg.icc
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3  */
4 namespace InDet {
5  template <class T_EmulatedDefects>
6  StatusCode EmulatedDefectsToDetectorElementStatusCondAlg<T_EmulatedDefects>::initialize() {
7  ATH_CHECK(EmulatedDefectsToDetectorElementStatusCondAlgBase::initialize());
8  ATH_CHECK(m_emulatedDefectsKey.initialize());
9  return StatusCode::SUCCESS;
10  }
11 
12  template <class T_EmulatedDefects>
13  StatusCode EmulatedDefectsToDetectorElementStatusCondAlg<T_EmulatedDefects>::execute(const EventContext& ctx) const {
14  SG::WriteCondHandle<InDet::SiDetectorElementStatus> writeHandle{this->m_writeKey, ctx};
15  if (writeHandle.isValid()) {
16  return StatusCode::SUCCESS;
17  }
18  SG::ReadCondHandle<T_EmulatedDefects> emulatedDefects(m_emulatedDefectsKey, ctx);
19  ATH_CHECK(emulatedDefects.isValid());
20  writeHandle.addDependency(emulatedDefects);
21 
22  const InDetDD::SiDetectorElementCollection &det_ele_coll = emulatedDefects->getDetectorElementCollection();
23 
24  std::unique_ptr<T_ConcreteDetectorElementStatusType> det_el_status
25  = std::make_unique<T_ConcreteDetectorElementStatusType>(det_ele_coll);
26 
27  std::vector<bool> &module_status = det_el_status->getElementStatus();
28  std::vector<ChipFlags_t> &chip_status = det_el_status->getElementChipStatus();
29  module_status.resize( det_ele_coll.size() );
30  chip_status.resize( det_ele_coll.size() );
31 
32  ATH_CHECK(module_status.size() == det_ele_coll.size() && chip_status.size() == det_ele_coll.size());
33 
34  for (unsigned int id_hash = 0; id_hash< module_status.size(); ++id_hash) {
35  const InDetDD::SiDetectorElement *det_ele=det_ele_coll[id_hash];
36  assert(det_ele);
37  module_status[id_hash] = !emulatedDefects->isModuleDefect(id_hash);
38  chip_status[id_hash] = this->makeChipStatus( *det_ele, (*(emulatedDefects.cptr()))[id_hash] );
39  }
40 
41  ATH_CHECK( writeHandle.record( det_el_status.release()) );
42 
43  return StatusCode::SUCCESS;
44  }
45 }