ATLAS Offline Software
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 
9 TRTStrawStatusCondAlg::TRTStrawStatusCondAlg(const std::string &name, ISvcLocator *pSvcLocator)
10  : ::AthReentrantAlgorithm(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
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 
36 StatusCode TRTStrawStatusCondAlg::execute(const EventContext &ctx) const
37 {
38  ATH_MSG_DEBUG("execute " << name());
39 
43 
45  std::unique_ptr<SG::WriteCondHandle<TRTCond::StrawStatusSummary>> strawStatusHTSummaryHandle{};
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{};
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) ;
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 }
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
TRTStrawStatusCondAlg::m_strawHTReadKey
SG::ReadCondHandleKey< StrawStatusContainer > m_strawHTReadKey
Definition: TRTStrawStatusCondAlg.h:31
TRT_ID::straw_max
int straw_max(const Identifier &id) const
Definition: TRT_ID.cxx:803
TRTStrawStatusCondAlg::m_strawStatusHTSummaryWriteKey
SG::WriteCondHandleKey< TRTCond::StrawStatusSummary > m_strawStatusHTSummaryWriteKey
Definition: TRTStrawStatusCondAlg.h:37
TRTStrawStatusCondAlg::initialize
virtual StatusCode initialize() override
Definition: TRTStrawStatusCondAlg.cxx:14
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:67
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
TRT_ID::straw_hash
IdentifierHash straw_hash(Identifier straw_id) const
straw hash from id - optimized
Definition: TRT_ID.h:762
TRTCond::StrawStatusMultChanContainer
Definition: StrawStatusMultChanContainer.h:19
TRTCalib_Extractor.det
det
Definition: TRTCalib_Extractor.py:36
TRTStrawStatusCondAlg.h
TRT_ID::straw_layer_end
const_id_iterator straw_layer_end() const
Definition: TRT_ID.h:955
TRT_ID::straw_layer_begin
const_id_iterator straw_layer_begin() const
Iterators over full set of straw_layer ids. Straw_layer ids are sorted.
Definition: TRT_ID.h:947
skel.it
it
Definition: skel.GENtoEVGEN.py:407
TRT_ID.h
This is an Identifier helper class for the TRT subdetector. This class is a factory for creating comp...
TRTStrawStatusCondAlg::m_strawStatusHTWriteKey
SG::WriteCondHandleKey< TRTCond::StrawStatusData > m_strawStatusHTWriteKey
Definition: TRTStrawStatusCondAlg.h:35
TRTStrawStatusCondAlg::m_strawStatusWriteKey
SG::WriteCondHandleKey< TRTCond::StrawStatusData > m_strawStatusWriteKey
Definition: TRTStrawStatusCondAlg.h:33
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
python.iconfTool.models.loaders.level
level
Definition: loaders.py:20
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::detStore
const ServiceHandle< StoreGateSvc > & detStore() const
The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:95
AthReentrantAlgorithm
An algorithm that can be simultaneously executed in multiple threads.
Definition: AthReentrantAlgorithm.h:74
TRT_ID::straw
int straw(const Identifier &id) const
Definition: TRT_ID.h:896
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
lumiFormat.i
int i
Definition: lumiFormat.py:85
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
plotBeamSpotVxVal.range
range
Definition: plotBeamSpotVxVal.py:194
TRTStrawStatusCondAlg::execute
virtual StatusCode execute(const EventContext &ctx) const override
Definition: TRTStrawStatusCondAlg.cxx:36
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
TRT_ID::barrel_ec
int barrel_ec(const Identifier &id) const
Values of different levels (failure returns 0)
Definition: TRT_ID.h:860
TRT_ID::straw_layer
int straw_layer(const Identifier &id) const
Definition: TRT_ID.h:887
TRTStrawStatusCondAlg::m_trtId
const TRT_ID * m_trtId
Definition: TRTStrawStatusCondAlg.h:39
TRT_ID::layer_or_wheel
int layer_or_wheel(const Identifier &id) const
Definition: TRT_ID.h:878
TRTStrawStatusCondAlg::m_strawReadKey
SG::ReadCondHandleKey< StrawStatusContainer > m_strawReadKey
Definition: TRTStrawStatusCondAlg.h:29
TRTStrawStatusCondAlg::m_strawStatusPermWriteKey
SG::WriteCondHandleKey< TRTCond::StrawStatusData > m_strawStatusPermWriteKey
Definition: TRTStrawStatusCondAlg.h:34
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
TRTCond::ExpandedIdentifier::STRAW
@ STRAW
Definition: InnerDetector/InDetConditions/TRT_ConditionsData/TRT_ConditionsData/ExpandedIdentifier.h:37
TRTStrawStatusCondAlg::TRTStrawStatusCondAlg
TRTStrawStatusCondAlg(const std::string &name, ISvcLocator *pSvcLocator)
Definition: TRTStrawStatusCondAlg.cxx:9
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
TRT_ID::phi_module
int phi_module(const Identifier &id) const
Definition: TRT_ID.h:869
TRT_ID::straw_hash_max
size_type straw_hash_max() const
Definition: TRT_ID.h:923
TRTCond::MultChanContainer::get
const DaughterContainer::value_type & get(const ExpandedIdentifier &id) const
get a value
Definition: MultChanContainer.h:238
Amg::intersect
std::optional< double > intersect(const AmgVector(N)&posA, const AmgVector(N)&dirA, const AmgVector(N)&posB, const AmgVector(N)&dirB)
Calculates the point B' along the line B that's closest to a second line A.
Definition: GeoPrimitivesHelpers.h:347
TRTStrawStatusCondAlg::m_strawStatusSummaryWriteKey
SG::WriteCondHandleKey< TRTCond::StrawStatusSummary > m_strawStatusSummaryWriteKey
Definition: TRTStrawStatusCondAlg.h:36
merge.status
status
Definition: merge.py:16
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
TRTCond::ExpandedIdentifier
Identifier for TRT detector elements in the conditions code.
Definition: InnerDetector/InDetConditions/TRT_ConditionsData/TRT_ConditionsData/ExpandedIdentifier.h:30
TRTStrawStatusCondAlg::m_strawPermReadKey
SG::ReadCondHandleKey< StrawStatusContainer > m_strawPermReadKey
Definition: TRTStrawStatusCondAlg.h:30
SG::WriteCondHandle
Definition: WriteCondHandle.h:26
TRT_ID::straw_id
Identifier straw_id(int barrel_ec, int phi_module, int layer_or_wheel, int straw_layer, int straw) const
Three ways of getting id for a single straw:
Definition: TRT_ID.h:575
Identifier
Definition: IdentifierFieldParser.cxx:14