2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
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;
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;
18 SG::ReadCondHandle<T_EmulatedDefects> emulatedDefects(m_emulatedDefectsKey, ctx);
19 ATH_CHECK(emulatedDefects.isValid());
20 writeHandle.addDependency(emulatedDefects);
22 const InDetDD::SiDetectorElementCollection &det_ele_coll = emulatedDefects->getDetectorElementCollection();
24 std::unique_ptr<T_ConcreteDetectorElementStatusType> det_el_status
25 = std::make_unique<T_ConcreteDetectorElementStatusType>(det_ele_coll);
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() );
32 ATH_CHECK(module_status.size() == det_ele_coll.size() && chip_status.size() == det_ele_coll.size());
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];
37 module_status[id_hash] = !emulatedDefects->isModuleDefect(id_hash);
38 chip_status[id_hash] = this->makeChipStatus( *det_ele, (*(emulatedDefects.cptr()))[id_hash] );
41 ATH_CHECK( writeHandle.record( det_el_status.release()) );
43 return StatusCode::SUCCESS;