Loading [MathJax]/jax/output/SVG/config.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
StripClusterSiHitDecoratorAlg.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
10 #include "src/detail/Utilities.h"
11 
12 namespace ActsTrk {
13 
15  ISvcLocator *pSvcLocator)
16  : AthReentrantAlgorithm(name, pSvcLocator)
17  {}
18 
20  {
21  ATH_MSG_DEBUG( "Initializing " << name() << " ..." );
22 
23  ATH_CHECK( m_inputMeasurementsKey.initialize() );
27  ATH_CHECK( m_siHitsKey.initialize() );
28 
29  // SDO decorations
30  m_sdo_words = m_inputMeasurementsKey.key() + "." + m_sdo_words.key();
33 
34  ATH_CHECK( m_sdo_words.initialize() );
35  ATH_CHECK( m_sdo_depositsBarcode.initialize() );
36  ATH_CHECK( m_sdo_depositsEnergy.initialize() );
37 
38  // SiHit decorations
43 
47 
51 
53  ATH_CHECK( m_sihit_meanTime_decor_key.initialize() );
54  ATH_CHECK( m_sihit_barcode_decor_key.initialize() );
55  ATH_CHECK( m_sihit_pdgid_decor_key.initialize() );
56 
57  ATH_CHECK( m_sihit_startPosX_decor_key.initialize() );
58  ATH_CHECK( m_sihit_startPosY_decor_key.initialize() );
59  ATH_CHECK( m_sihit_startPosZ_decor_key.initialize() );
60 
61  ATH_CHECK( m_sihit_endPosX_decor_key.initialize() );
62  ATH_CHECK( m_sihit_endPosY_decor_key.initialize() );
63  ATH_CHECK( m_sihit_endPosZ_decor_key.initialize() );
64 
65  ATH_CHECK( detStore()->retrieve(m_StripHelper, "SCT_ID") );
66 
67  return StatusCode::SUCCESS;
68  }
69 
70  StatusCode StripClusterSiHitDecoratorAlg::execute(const EventContext& ctx) const
71  {
72  ATH_MSG_DEBUG( "Executing " << name() << " ..." );
73 
74  ATH_MSG_DEBUG( "Retrieving TrackMeasurementValidationContainer with key: " << m_inputMeasurementsKey.key() );
76  ATH_CHECK( measurementHandle.isValid() );
77  const xAOD::TrackMeasurementValidationContainer* measurements = measurementHandle.cptr();
78 
79  ATH_MSG_DEBUG( "Retrieving StripClusterContainer with key: " << m_inputClustersKey.key() );
81  ATH_CHECK( clusterHandle.isValid() );
82  const xAOD::StripClusterContainer* clusters = clusterHandle.cptr();
83 
84  ATH_MSG_DEBUG( "Retrieving InDetSimDataCollection with key: " << m_SDOcontainer_key.key() );
86  ATH_CHECK( sdoHandle.isValid() );
87  const InDetSimDataCollection* sdos = sdoHandle.cptr();
88 
89  ATH_MSG_DEBUG("Retrieving SiHitCollection with key: " << m_siHitsKey.key());
91  ATH_CHECK(siHitsHandle.isValid());
92  const SiHitCollection* siHits = siHitsHandle.cptr();
93 
95  ATH_CHECK(stripDetEleHandle.isValid());
96  const InDetDD::SiDetectorElementCollection* stripElements = stripDetEleHandle.cptr();
97 
98  // SDO decorators
102 
103  // SiHit decorators
108 
112 
116 
117  // measurements and clusters have the same size
118  // measurement n corresponds to cluster n
119  ATH_CHECK( measurements->size() == clusters->size() );
120 
121  // organize the si hits in such a way we group them together by idhash
122  std::vector< std::vector< const SiHit* > > siHitsCollections(m_StripHelper->wafer_hash_max());
123  for (const SiHit& siHit: *siHits) {
124  if ( not siHit.isSCT() ) {
125  ATH_MSG_ERROR("Si Hit in Strip collection is not Strip!!!");
126  return StatusCode::FAILURE;
127  }
128 
129  Identifier wafer_id(m_StripHelper->wafer_id(siHit.getBarrelEndcap(),
130  siHit.getLayerDisk(),
131  siHit.getPhiModule(),
132  siHit.getEtaModule(),
133  siHit.getSide()));
134  IdentifierHash wafer_hash(m_StripHelper->wafer_hash(wafer_id));
135 
136  if (wafer_hash >= m_StripHelper->wafer_hash_max()) {
137  ATH_MSG_ERROR("There is a problem with Si Hit collection.");
138  ATH_MSG_ERROR("Wafer hash is too big");
139  return StatusCode::FAILURE;
140  }
141  siHitsCollections[wafer_hash].push_back(&siHit);
142  } // loop on si hits
143 
144 
146  stripAccessor ( *clusters,
147  [] (const xAOD::StripCluster& cl) -> IdentifierHash { return cl.identifierHash(); },
148  stripElements->size());
149 
150  // run on id hashes
151  const auto& allIdHashes = stripAccessor.allIdentifiers();
152  for (const auto& hashId : allIdHashes) {
153  const InDetDD::SiDetectorElement *element = stripElements->getDetectorElement(hashId);
154  if ( not element ) {
155  ATH_MSG_FATAL( "Invalid strip detector element for hash " << hashId);
156  return StatusCode::FAILURE;
157  }
158 
159  auto [startRange, stopRange] = stripAccessor.rangesForIdentifierDirect(hashId).front();
160  const std::vector< const SiHit* >& siHitsWithCurrentHash = siHitsCollections.at(hashId);
161 
162  for (auto itr = startRange; itr != stopRange; ++itr) {
163  const xAOD::StripCluster* cluster = *startRange;
164  const xAOD::TrackMeasurementValidation* measurement = measurements->at(cluster->index());
165  ATH_CHECK(measurement->identifier() == cluster->identifier() );
166 
167  auto [word, depositsBarcode, depositsEnergy] = ActsTrk::detail::getSDOInformation(cluster->rdoList(), *sdos);
168  std::vector<SiHit> compatibleSiHits = findAllHitsCompatibleWithCluster(*cluster, *element, siHitsWithCurrentHash);
169 
170  auto [energyDeposit, meanTime, barcode, pdgid,
171  startPosX, startPosY, startPosZ,
172  endPosX, endPosY, endPosZ] = ActsTrk::detail::getSiHitInformation(*element, compatibleSiHits);
173 
174  // attach SDO decorations
175  decor_sdo_words(*measurement) = std::move(word);
176  decor_sdo_depositsBarcode(*measurement) = std::move(depositsBarcode);
177  decor_sdo_depositsEnergy(*measurement) = std::move(depositsEnergy);
178 
179  // attach SiHit decorations
180  decor_sihit_energyDeposit(*measurement) = std::move(energyDeposit);
181  decor_sihit_meanTime(*measurement) = std::move(meanTime);
182  decor_sihit_barcode(*measurement) = std::move(barcode);
183  decor_sihit_pdgid(*measurement) = std::move(pdgid);
184 
185  decor_sihit_startPosX(*measurement) = std::move(startPosX);
186  decor_sihit_startPosY(*measurement) = std::move(startPosY);
187  decor_sihit_startPosZ(*measurement) = std::move(startPosZ);
188 
189  decor_sihit_endPosX(*measurement) = std::move(endPosX);
190  decor_sihit_endPosY(*measurement) = std::move(endPosY);
191  decor_sihit_endPosZ(*measurement) = std::move(endPosZ);
192  } // loop on clusters
193  } // loop on hash ids
194 
195  return StatusCode::SUCCESS;
196  }
197 
198 
200  const InDetDD::SiDetectorElement& element,
201  const std::vector<const SiHit*>& siHits) const
202  {
203  std::vector<SiHit> matchingHits {};
204  std::vector<const SiHit*> multiMatchingHits {};
205 
206  for (const SiHit* siHit: siHits) {
207  // Now we have all hits in the module that match lets check to see if they match the cluster
208  // Must be within +/- 1 hits of any hit in the cluster to be included
209  HepGeom::Point3D<double> averagePosition = 0.5 * (siHit->localStartPosition() + siHit->localEndPosition());
210  Amg::Vector2D pos = element.hitLocalToLocal(averagePosition.z(), averagePosition.y());
211  InDetDD::SiCellId diode = element.cellIdOfPosition(pos);
212 
213  for (const auto& hitIdentifier: cluster.rdoList()) {
214  ATH_MSG_DEBUG("Truth Strip " << diode.phiIndex() << " Cluster Strip " << m_StripHelper->strip(hitIdentifier));
215 
216  if (std::abs( static_cast<int>(diode.phiIndex()) - m_StripHelper->strip(hitIdentifier) ) <= 1) {
217  multiMatchingHits.push_back(siHit);
218  break;
219  }
220  }
221  } // loop on si hits
222 
223  // Now we will now make 1 SiHit for each true particle if the SiHits "touch" other
224  std::vector<const SiHit* >::iterator siHitIter = multiMatchingHits.begin();
225  std::vector<const SiHit* >::iterator siHitIter2 = multiMatchingHits.begin();
226  for ( ; siHitIter != multiMatchingHits.end(); ++siHitIter) {
227  const SiHit* lowestXPos = *siHitIter;
228  const SiHit* highestXPos = *siHitIter;
229 
230  // We will merge these hits
231  std::vector<const SiHit* > ajoiningHits;
232  ajoiningHits.push_back( *siHitIter );
233 
234  siHitIter2 = siHitIter + 1;
235  while ( siHitIter2 != multiMatchingHits.end() ) {
236  // Need to come from the same truth particle
237  if ( not HepMC::is_same_particle((*siHitIter)->particleLink(),
238  (*siHitIter2)->particleLink()) ) {
239  ++siHitIter2;
240  continue;
241  }
242 
243  // Check to see if the SiHits are compatible with each other.
244  if (std::abs((highestXPos->localEndPosition().x()-(*siHitIter2)->localStartPosition().x()))<0.00005 &&
245  std::abs((highestXPos->localEndPosition().y()-(*siHitIter2)->localStartPosition().y()))<0.00005 &&
246  std::abs((highestXPos->localEndPosition().z()-(*siHitIter2)->localStartPosition().z()))<0.00005 ) {
247  highestXPos = *siHitIter2;
248  ajoiningHits.push_back( *siHitIter2 );
249  // Dont use hit more than once
250  // @TODO could invalidate siHitIter
251  siHitIter2 = multiMatchingHits.erase( siHitIter2 );
252  } else if (std::abs((lowestXPos->localStartPosition().x()-(*siHitIter2)->localEndPosition().x()))<0.00005 &&
253  std::abs((lowestXPos->localStartPosition().y()-(*siHitIter2)->localEndPosition().y()))<0.00005 &&
254  std::abs((lowestXPos->localStartPosition().z()-(*siHitIter2)->localEndPosition().z()))<0.00005) {
255  lowestXPos = *siHitIter2;
256  ajoiningHits.push_back( *siHitIter2 );
257  // Dont use hit more than once
258  // @TODO could invalidate siHitIter
259  siHitIter2 = multiMatchingHits.erase( siHitIter2 );
260  } else {
261  ++siHitIter2;
262  }
263  } // while loop
264 
265  if ( ajoiningHits.empty() ) {
266  ATH_MSG_WARNING("This should really never happen");
267  continue;
268  } else if ( ajoiningHits.size() == 1 ) {
269  // Copy Si Hit ready to return
270  matchingHits.push_back( *ajoiningHits[0] );
271  continue;
272  } else {
273  // Build new SiHit and merge information together.
274  ATH_MSG_DEBUG("Merging " << ajoiningHits.size() << " SiHits together." );
275 
276  float energyDep {0.f};
277  float time {0.f};
278  for( const auto& siHit : ajoiningHits ){
279  energyDep += siHit->energyLoss();
280  time += siHit->meanTime();
281  }
282  time /= ajoiningHits.size();
283 
284  matchingHits.emplace_back(lowestXPos->localStartPosition(),
285  highestXPos->localEndPosition(),
286  energyDep,
287  time,
288  HepMC::barcode((*siHitIter)->particleLink()),
289  1, // 0 for pixel 1 for strip
290  (*siHitIter)->getBarrelEndcap(),
291  (*siHitIter)->getLayerDisk(),
292  (*siHitIter)->getEtaModule(),
293  (*siHitIter)->getPhiModule(),
294  (*siHitIter)->getSide() );
295 
296  ATH_MSG_DEBUG("Finished Merging " << ajoiningHits.size() << " SiHits together." );
297  }
298  } // loop on multi matching hits
299 
300  return matchingHits;
301  }
302 
303 
304 }
305 
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
ActsTrk::StripClusterSiHitDecoratorAlg::m_stripDetEleCollKey
SG::ReadCondHandleKey< InDetDD::SiDetectorElementCollection > m_stripDetEleCollKey
Definition: StripClusterSiHitDecoratorAlg.h:41
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
InDetDD::SolidStateDetectorElementBase::cellIdOfPosition
SiCellId cellIdOfPosition(const Amg::Vector2D &localPos) const
As in previous method but returns SiCellId.
Definition: SolidStateDetectorElementBase.cxx:224
ActsTrk::StripClusterSiHitDecoratorAlg::m_sihit_startPosX_decor_key
SG::WriteDecorHandleKey< xAOD::TrackMeasurementValidationContainer > m_sihit_startPosX_decor_key
Definition: StripClusterSiHitDecoratorAlg.h:54
SiHit::localEndPosition
HepGeom::Point3D< double > localEndPosition() const
Definition: SiHit.cxx:153
ContainerAccessor
Definition: ContainerAccessor.h:25
InDetDD::SiDetectorElementCollection
Definition: SiDetectorElementCollection.h:30
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
ContainerAccessor::allIdentifiers
std::vector< identifier_t > allIdentifiers() const
Function to return all available identifier (i.e. keys in the map)
Definition: ContainerAccessor.h:84
ActsTrk::StripClusterSiHitDecoratorAlg::m_sihit_startPosY_decor_key
SG::WriteDecorHandleKey< xAOD::TrackMeasurementValidationContainer > m_sihit_startPosY_decor_key
Definition: StripClusterSiHitDecoratorAlg.h:55
SG::ReadHandle::cptr
const_pointer_type cptr()
Dereference the pointer.
ActsTrk::detail::getSiHitInformation
std::tuple< std::vector< float >, std::vector< float >, std::vector< int >, std::vector< int >, std::vector< float >, std::vector< float >, std::vector< float >, std::vector< float >, std::vector< float >, std::vector< float > > getSiHitInformation(const InDetDD::SiDetectorElement &element, const std::vector< SiHit > &matchingHits)
Definition: Tracking/Acts/ActsObjectDecoration/src/detail/Utilities.cxx:57
Amg::Vector2D
Eigen::Matrix< double, 2, 1 > Vector2D
Definition: GeoPrimitives.h:48
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:67
AtlasHitsVector
Definition: AtlasHitsVector.h:33
ActsTrk::StripClusterSiHitDecoratorAlg::m_sihit_energyDeposit_decor_key
SG::WriteDecorHandleKey< xAOD::TrackMeasurementValidationContainer > m_sihit_energyDeposit_decor_key
Definition: StripClusterSiHitDecoratorAlg.h:49
ActsTrk::StripClusterSiHitDecoratorAlg::m_inputClustersKey
SG::ReadHandleKey< xAOD::StripClusterContainer > m_inputClustersKey
Definition: StripClusterSiHitDecoratorAlg.h:38
SG::ReadCondHandle::isValid
bool isValid()
Definition: ReadCondHandle.h:210
Utilities.h
ActsTrk::detail::getSDOInformation
std::tuple< std::vector< int >, std::vector< std::vector< int > >, std::vector< std::vector< float > > > getSDOInformation(const std::vector< Identifier > &rdoList, const InDetSimDataCollection &sdoCollection)
Definition: Tracking/Acts/ActsObjectDecoration/src/detail/Utilities.cxx:13
InDetSimDataCollection
Definition: InDetSimDataCollection.h:25
ActsTrk::StripClusterSiHitDecoratorAlg::m_sdo_words
SG::WriteDecorHandleKey< xAOD::TrackMeasurementValidationContainer > m_sdo_words
Definition: StripClusterSiHitDecoratorAlg.h:44
InDetDD::SiCellId::phiIndex
int phiIndex() const
Get phi index. Equivalent to strip().
Definition: SiCellId.h:122
ActsTrk::StripClusterSiHitDecoratorAlg::m_sihit_meanTime_decor_key
SG::WriteDecorHandleKey< xAOD::TrackMeasurementValidationContainer > m_sihit_meanTime_decor_key
Definition: StripClusterSiHitDecoratorAlg.h:50
ActsTrk::StripClusterSiHitDecoratorAlg::m_sihit_endPosY_decor_key
SG::WriteDecorHandleKey< xAOD::TrackMeasurementValidationContainer > m_sihit_endPosY_decor_key
Definition: StripClusterSiHitDecoratorAlg.h:59
SG::VarHandleKey::key
const std::string & key() const
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:141
ActsTrk::StripClusterSiHitDecoratorAlg::findAllHitsCompatibleWithCluster
std::vector< SiHit > findAllHitsCompatibleWithCluster(const xAOD::StripCluster &cluster, const InDetDD::SiDetectorElement &element, const std::vector< const SiHit * > &sihits) const
Definition: StripClusterSiHitDecoratorAlg.cxx:199
HepMC::is_same_particle
bool is_same_particle(const T1 &p1, const T2 &p2)
Method to establish if two particles in the GenEvent actually represent the same particle.
Definition: MagicNumbers.h:367
ActsTrk::StripClusterSiHitDecoratorAlg::m_sihit_endPosZ_decor_key
SG::WriteDecorHandleKey< xAOD::TrackMeasurementValidationContainer > m_sihit_endPosZ_decor_key
Definition: StripClusterSiHitDecoratorAlg.h:60
Trk::energyDeposit
@ energyDeposit
Definition: MeasurementType.h:32
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
SiHit
Definition: SiHit.h:19
AthReentrantAlgorithm
An algorithm that can be simultaneously executed in multiple threads.
Definition: AthReentrantAlgorithm.h:74
SG::makeHandle
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
Definition: ReadCondHandle.h:274
ActsTrk::StripClusterSiHitDecoratorAlg::initialize
virtual StatusCode initialize() override
Definition: StripClusterSiHitDecoratorAlg.cxx:19
xAOD::TrackMeasurementValidation_v1
Class describing a TrackMeasurementValidation.
Definition: TrackMeasurementValidation_v1.h:27
ContainerAccessor::rangesForIdentifierDirect
const boost::container::small_vector< Range, inline_size > rangesForIdentifierDirect(const identifier_t &identifier) const
Function to return the list of ranges corresponding to a given identifier.
Definition: ContainerAccessor.h:69
ActsTrk::StripClusterSiHitDecoratorAlg::m_sdo_depositsBarcode
SG::WriteDecorHandleKey< xAOD::TrackMeasurementValidationContainer > m_sdo_depositsBarcode
Definition: StripClusterSiHitDecoratorAlg.h:45
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
ActsTrk::StripClusterSiHitDecoratorAlg::StripClusterSiHitDecoratorAlg
StripClusterSiHitDecoratorAlg(const std::string &name, ISvcLocator *pSvcLocator)
Definition: StripClusterSiHitDecoratorAlg.cxx:14
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
HepMC::barcode
int barcode(const T *p)
Definition: Barcode.h:16
SG::WriteDecorHandle
Handle class for adding a decoration to an object.
Definition: StoreGate/StoreGate/WriteDecorHandle.h:100
ActsTrk::StripClusterSiHitDecoratorAlg::m_sihit_pdgid_decor_key
SG::WriteDecorHandleKey< xAOD::TrackMeasurementValidationContainer > m_sihit_pdgid_decor_key
Definition: StripClusterSiHitDecoratorAlg.h:52
WriteDecorHandle.h
Handle class for adding a decoration to an object.
ActsTrk::StripClusterSiHitDecoratorAlg::m_sdo_depositsEnergy
SG::WriteDecorHandleKey< xAOD::TrackMeasurementValidationContainer > m_sdo_depositsEnergy
Definition: StripClusterSiHitDecoratorAlg.h:46
xAOD::StripCluster_v1
Definition: StripCluster_v1.h:17
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
SCT_ID::wafer_hash
IdentifierHash wafer_hash(const Identifier &wafer_id) const
wafer hash from id - optimized
Definition: SCT_ID.h:492
ActsTrk::StripClusterSiHitDecoratorAlg::m_sihit_barcode_decor_key
SG::WriteDecorHandleKey< xAOD::TrackMeasurementValidationContainer > m_sihit_barcode_decor_key
Definition: StripClusterSiHitDecoratorAlg.h:51
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
DataVector
Derived DataVector<T>.
Definition: DataVector.h:794
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
InDetDD::SolidStateDetectorElementBase::hitLocalToLocal
Amg::Vector2D hitLocalToLocal(double xEta, double xPhi) const
Simulation/Hit local frame to reconstruction local frame.
Definition: SolidStateDetectorElementBase.cxx:95
ActsTrk::StripClusterSiHitDecoratorAlg::m_inputMeasurementsKey
SG::ReadHandleKey< xAOD::TrackMeasurementValidationContainer > m_inputMeasurementsKey
Definition: StripClusterSiHitDecoratorAlg.h:37
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:228
SCT_ID::wafer_hash_max
size_type wafer_hash_max(void) const
Definition: SCT_ID.cxx:645
IdentifierHash.h
xAOD::TrackMeasurementValidation_v1::identifier
uint64_t identifier() const
InDetDD::SiDetectorElement
Definition: SiDetectorElement.h:109
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
StripClusterSiHitDecoratorAlg.h
python.LumiBlobConversion.pos
pos
Definition: LumiBlobConversion.py:18
ActsTrk::StripClusterSiHitDecoratorAlg::execute
virtual StatusCode execute(const EventContext &ctx) const override
Definition: StripClusterSiHitDecoratorAlg.cxx:70
InDetDD::SiCellId
Definition: SiCellId.h:29
ActsTrk::StripClusterSiHitDecoratorAlg::m_sihit_endPosX_decor_key
SG::WriteDecorHandleKey< xAOD::TrackMeasurementValidationContainer > m_sihit_endPosX_decor_key
Definition: StripClusterSiHitDecoratorAlg.h:58
ContainerAccessor.h
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
SCT_ID::strip
int strip(const Identifier &id) const
Definition: SCT_ID.h:764
ActsTrk::StripClusterSiHitDecoratorAlg::m_sihit_startPosZ_decor_key
SG::WriteDecorHandleKey< xAOD::TrackMeasurementValidationContainer > m_sihit_startPosZ_decor_key
Definition: StripClusterSiHitDecoratorAlg.h:56
RunTileMonitoring.clusters
clusters
Definition: RunTileMonitoring.py:133
ActsTrk::StripClusterSiHitDecoratorAlg::m_siHitsKey
SG::ReadHandleKey< SiHitCollection > m_siHitsKey
Definition: StripClusterSiHitDecoratorAlg.h:40
ActsTrk
The AlignStoreProviderAlg loads the rigid alignment corrections and pipes them through the readout ge...
Definition: MuonDetectorBuilderTool.cxx:55
ActsTrk::StripClusterSiHitDecoratorAlg::m_SDOcontainer_key
SG::ReadHandleKey< InDetSimDataCollection > m_SDOcontainer_key
Definition: StripClusterSiHitDecoratorAlg.h:39
DataVector::at
const T * at(size_type n) const
Access an element, as an rvalue.
SCT_ID::wafer_id
Identifier wafer_id(int barrel_ec, int layer_disk, int phi_module, int eta_module, int side) const
For a single side of module.
Definition: SCT_ID.h:464
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
SiCellId.h
ActsTrk::StripClusterSiHitDecoratorAlg::m_StripHelper
const SCT_ID * m_StripHelper
Definition: StripClusterSiHitDecoratorAlg.h:62
dq_make_web_display.cl
cl
print [x.__class__ for x in toList(dqregion.getSubRegions()) ]
Definition: dq_make_web_display.py:26
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
InDetDD::SiDetectorElementCollection::getDetectorElement
const SiDetectorElement * getDetectorElement(const IdentifierHash &hash) const
Definition: SiDetectorElementCollection.cxx:15
SiHit::localStartPosition
HepGeom::Point3D< double > localStartPosition() const
Definition: SiHit.cxx:146
SG::ReadCondHandle::cptr
const_pointer_type cptr()
Definition: ReadCondHandle.h:71
Identifier
Definition: IdentifierFieldParser.cxx:14