ATLAS Offline Software
Loading...
Searching...
No Matches
TRTStrawStatusCondAlg.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4
6
8
9TRTStrawStatusCondAlg::TRTStrawStatusCondAlg(const std::string &name, ISvcLocator *pSvcLocator)
10 : ::AthCondAlgorithm(name,pSvcLocator)
11{
12}
13
15{
16 // Read keys
17 ATH_CHECK( m_strawReadKey.initialize() );
18 ATH_CHECK( m_strawPermReadKey.initialize() );
19 ATH_CHECK( m_strawHTReadKey.initialize() );
20
21 // Register write handles
22 ATH_CHECK (m_strawStatusWriteKey.initialize());
27
28 // TRT ID helper
29 ATH_CHECK(detStore()->retrieve(m_trtId, "TRT_ID"));
30
31 ATH_MSG_INFO("Max number of TRT hashes: " << m_trtId->straw_hash_max());
32
33 return StatusCode::SUCCESS;
34}
35
36StatusCode TRTStrawStatusCondAlg::execute(const EventContext &ctx) const
37{
38 ATH_MSG_DEBUG("execute " << name());
39
43
45 std::unique_ptr<SG::WriteCondHandle<TRTCond::StrawStatusSummary>> strawStatusHTSummaryHandle{};
46 if (!m_strawStatusHTSummaryWriteKey.empty()) {
47 strawStatusHTSummaryHandle = std::make_unique<SG::WriteCondHandle<TRTCond::StrawStatusSummary>>(m_strawStatusHTSummaryWriteKey, ctx);
48 }
49
50 bool alreadyPresent = strawStatusHandle.isValid();
51 alreadyPresent &= strawStatusPermHandle.isValid();
52 alreadyPresent &= strawStatusSummaryHandle.isValid();
53 alreadyPresent &= strawStatusHTHandle.isValid();
54 if (strawStatusHTSummaryHandle != nullptr) {
55 alreadyPresent &= strawStatusHTSummaryHandle->isValid();
56 }
57 if(alreadyPresent){
58 ATH_MSG_DEBUG("All objects are still valid");
59 return StatusCode::SUCCESS;
60 }
61 auto outputStrawStatus = std::make_unique<TRTCond::StrawStatusData>(m_trtId->straw_hash_max());
62 auto outputStrawStatusPerm = std::make_unique<TRTCond::StrawStatusData>(m_trtId->straw_hash_max());
63 auto outputStrawStatusSummary = std::make_unique<TRTCond::StrawStatusSummary>(m_trtId->straw_hash_max());
64
65 auto outputStrawStatusHT = std::make_unique<TRTCond::StrawStatusData>(m_trtId->straw_hash_max());
66 std::unique_ptr<TRTCond::StrawStatusSummary> outputStrawStatusHTSummary{};
67 if (!m_strawStatusHTSummaryWriteKey.empty()) {
68 outputStrawStatusHTSummary = std::make_unique<TRTCond::StrawStatusSummary>(m_trtId->straw_hash_max());
69 }
70
72 if (!strawReadHandle.isValid()) {
73 ATH_MSG_FATAL("No access to conditions " << strawReadHandle.key());
74 return StatusCode::FAILURE;
75 }
76 EventIDRange range;
77 if (!strawReadHandle.range(range)) {
78 ATH_MSG_ERROR("Failed to get validity range of " << strawReadHandle.key());
79 return StatusCode::FAILURE;
80 }
81 ATH_MSG_DEBUG("Retrieved " << strawReadHandle.key() << " with validity " << range);
82
84 if (!strawPermReadHandle.isValid()) {
85 ATH_MSG_FATAL("No access to conditions " << strawPermReadHandle.key());
86 return StatusCode::FAILURE;
87 }
88 EventIDRange rangePerm;
89 if (!strawPermReadHandle.range(rangePerm)) {
90 ATH_MSG_ERROR("Failed to get validity range of " << strawPermReadHandle.key());
91 return StatusCode::FAILURE;
92 }
93 ATH_MSG_DEBUG("Retrieved " << strawPermReadHandle.key() << " with validity " << rangePerm);
94
96 if (!strawHTReadHandle.isValid()) {
97 ATH_MSG_FATAL("No access to conditions " << strawHTReadHandle.key());
98 return StatusCode::FAILURE;
99 }
100 EventIDRange rangeHT;
101 if (!strawHTReadHandle.range(rangeHT)) {
102 ATH_MSG_ERROR("Failed to get validity range of " << strawHTReadHandle.key());
103 return StatusCode::FAILURE;
104 }
105 ATH_MSG_DEBUG("Retrieved " << strawHTReadHandle.key() << " with validity " << rangeHT);
106
107 const StrawStatusContainer* statC = {*strawReadHandle};
108 if(statC==nullptr) {
109 ATH_MSG_ERROR("Null pointer to the straw status container");
110 return StatusCode::FAILURE;
111 }
112 const StrawStatusContainer* statPermC = {*strawPermReadHandle};
113 if(statPermC==nullptr) {
114 ATH_MSG_ERROR("Null pointer to the straw permanent status container");
115 return StatusCode::FAILURE;
116 }
117 const StrawStatusContainer* statHTC = {*strawHTReadHandle};
118 if(statHTC==nullptr) {
119 ATH_MSG_ERROR("Null pointer to the straw HT status container");
120 return StatusCode::FAILURE;
121 }
122
123 // iterate over straws and fill non-zero statuses to TRTStrawStatusData
124
125 for (std::vector<Identifier>::const_iterator it = m_trtId->straw_layer_begin(); it != m_trtId->straw_layer_end(); ++it ) {
126
127 int nstraws = 0;
128 //m_trtId->straw_max can possibly return -999
129 nstraws = m_trtId->straw_max( *it) + 1; // There is a difference of 1 between both methods....
130 if (nstraws <= 0){
131 ATH_MSG_ERROR("nstraws value is invalid : "<<nstraws);
132 return StatusCode::FAILURE;
133 }
134 constexpr int level = TRTCond::ExpandedIdentifier::STRAW ;
135
136 for (int i=0; i<nstraws ;i++) {
137 Identifier offlineID = m_trtId->straw_id( *it, i);
138 int det = m_trtId->barrel_ec( offlineID) ;
139 int lay = m_trtId->layer_or_wheel( offlineID) ;
140 int phi = m_trtId->phi_module( offlineID) ;
141 TRTCond::ExpandedIdentifier expID= TRTCond::ExpandedIdentifier( m_trtId->barrel_ec(offlineID),m_trtId->layer_or_wheel(offlineID),
142 m_trtId->phi_module(offlineID),m_trtId->straw_layer(offlineID),
143 m_trtId->straw(offlineID),level );
144
145 unsigned int status = statC->get(expID).getstatus();
146 const IdentifierHash hashId = m_trtId->straw_hash(offlineID);
147 outputStrawStatus->setStatus(hashId, status);
148
149 unsigned int statusPerm = statPermC->get(expID).getstatus();
150 outputStrawStatusPerm->setStatus(hashId, statusPerm);
151
152 unsigned int statusHT = statHTC->get(expID).getstatus();
153 outputStrawStatusHT->setStatus(hashId, statusHT);
154
155 if (status or statusPerm) {
156 ATH_MSG_VERBOSE(" The sector " << det << " " << lay << " " << phi << " has status " << status << " and permanent " << statusPerm);
157 }
158
159 constexpr unsigned int statusBitmask = 1 << 8; // 0000001 00000000
160 bool statusBool{}, statusPermBool{}, statusHTBool{};
161 if (status == 1) statusBool = true;
162 else if (status == 0) statusBool = false;
163 else statusBool = static_cast<bool>((status & statusBitmask) >> 8);
164
165 if (statusPerm == 1) statusPermBool = true;
166 else if (statusPerm == 0) statusPermBool = false;
167 else statusPermBool = static_cast<bool>((statusPerm & statusBitmask) >> 8);
168
169 if (statusHT == 1) statusHTBool = true;
170 else if (statusHT==0) statusHTBool = false;
171 else statusHTBool = static_cast<bool>((statusHT & statusBitmask) >> 8);
172
173 outputStrawStatusSummary->setStatus(hashId, statusBool || statusPermBool);
174 if (outputStrawStatusHTSummary != nullptr) {
175 outputStrawStatusHTSummary->setStatus(hashId, statusHTBool);
176 }
177 }
178 }
179
180 // Record CDOs
181 if (strawStatusHandle.record(range, std::move(outputStrawStatus)).isFailure()) {
182 ATH_MSG_ERROR("Could not record AliveStraws " << m_strawStatusWriteKey.key()
183 << " with EventRange " << range
184 << " into Conditions Store");
185 return StatusCode::FAILURE;
186 }
187
188 if (strawStatusPermHandle.record(rangePerm, std::move(outputStrawStatusPerm)).isFailure()) {
189 ATH_MSG_ERROR("Could not record AliveStraws " << m_strawStatusPermWriteKey.key()
190 << " with EventRange " << rangePerm
191 << " into Conditions Store");
192 return StatusCode::FAILURE;
193 }
194
195 if (strawStatusHTHandle.record(rangeHT, std::move(outputStrawStatusHT)).isFailure()) {
196 ATH_MSG_ERROR("Could not record AliveStraws " << m_strawStatusHTWriteKey.key()
197 << " with EventRange " << rangeHT
198 << " into Conditions Store");
199 return StatusCode::FAILURE;
200 }
201
202 EventIDRange rangeCombined = EventIDRange::intersect (range, rangePerm);
203 if (strawStatusSummaryHandle.record(rangeCombined, std::move(outputStrawStatusSummary)).isFailure()) {
204 ATH_MSG_ERROR("Could not record AliveStraws " << m_strawStatusSummaryWriteKey.key()
205 << " with EventRange " << rangeCombined
206 << " into Conditions Store");
207 return StatusCode::FAILURE;
208 }
209
210 if (strawStatusHTSummaryHandle != nullptr && strawStatusHTSummaryHandle->record(rangeHT, std::move(outputStrawStatusHTSummary)).isFailure()) {
211 ATH_MSG_ERROR("Could not record AliveStraws " << m_strawStatusHTSummaryWriteKey.key()
212 << " with EventRange " << rangeHT
213 << " into Conditions Store");
214 return StatusCode::FAILURE;
215 }
216
217 return StatusCode::SUCCESS;
218}
Scalar phi() const
phi method
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_ERROR(x)
#define ATH_MSG_FATAL(x)
#define ATH_MSG_INFO(x)
#define ATH_MSG_VERBOSE(x)
#define ATH_MSG_DEBUG(x)
This is an Identifier helper class for the TRT subdetector.
const ServiceHandle< StoreGateSvc > & detStore() const
Base class for conditions algorithms.
This is a "hash" representation of an Identifier.
bool range(EventIDRange &r)
const std::string & key() const
StatusCode record(const EventIDRange &range, T *t)
record handle, with explicit range DEPRECATED
const DaughterContainer::value_type & get(const ExpandedIdentifier &id) const
get a value
void setStatus(const ExpandedIdentifier &id, unsigned int status)
set status
SG::WriteCondHandleKey< TRTCond::StrawStatusData > m_strawStatusHTWriteKey
virtual StatusCode execute(const EventContext &ctx) const override
SG::WriteCondHandleKey< TRTCond::StrawStatusData > m_strawStatusWriteKey
SG::ReadCondHandleKey< StrawStatusContainer > m_strawHTReadKey
SG::ReadCondHandleKey< StrawStatusContainer > m_strawReadKey
SG::WriteCondHandleKey< TRTCond::StrawStatusSummary > m_strawStatusSummaryWriteKey
TRTCond::StrawStatusMultChanContainer StrawStatusContainer
SG::ReadCondHandleKey< StrawStatusContainer > m_strawPermReadKey
SG::WriteCondHandleKey< TRTCond::StrawStatusData > m_strawStatusPermWriteKey
SG::WriteCondHandleKey< TRTCond::StrawStatusSummary > m_strawStatusHTSummaryWriteKey
TRTStrawStatusCondAlg(const std::string &name, ISvcLocator *pSvcLocator)
virtual StatusCode initialize() override