ATLAS Offline Software
SiTrackerSpacePointFinder.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 /***************************************************************************
6 -------------------
7 ATLAS Collaboration
8 ***************************************************************************/
9 
10 //<<<<<< INCLUDES >>>>>>
11 
12 
14 
15 // For processing clusters
19 
20 // Space point Classes,
24 #include "InDetIdentifier/SCT_ID.h"
25 
26 
27 // general Atlas classes
31 
33 
34 namespace InDet {
35 
36 //------------------------------------------------------------------------
38  ISvcLocator* pSvcLocator)
39  : AthReentrantAlgorithm(name, pSvcLocator)
40 { }
41 
42 //-----------------------------------------------------------------------
44 {
45  // Check that clusters, space points and ids have names
47  ATH_MSG_FATAL( "SCTs selected and no name set for SCT clusters");
48  return StatusCode::FAILURE;
49  }
51 
52  if (m_selectPixels && m_Pixel_clcontainerKey.key().empty()){
53  ATH_MSG_FATAL( "Pixels selected and no name set for Pixel clusters");
54  return StatusCode::FAILURE;
55  }
57 
59  ATH_MSG_FATAL( "No name set for SCT space points");
60  return StatusCode::FAILURE;
61  }
63 
65  ATH_MSG_FATAL( "No name set for Pixels space points");
66  return StatusCode::FAILURE;
67  }
69 
71  ATH_MSG_FATAL( "No name set for overlap space points");
72  return StatusCode::FAILURE;
73  }
75 
76  // create containers (requires the Identifier Helpers)
77  if (m_selectPixels){
79  }
80 
81  if (m_selectSCTs) {
82  ATH_CHECK(detStore()->retrieve(m_idHelper,"SCT_ID"));
83  }
84 
85  // Initialize the key of input SiElementPropertiesTable and SiDetectorElementCollection for SCT
88 
91 
94  m_cachemode = !m_SpacePointCache_SCTKey.key().empty() || !m_SpacePointCache_PixKey.key().empty();
95 
96  if (!m_monTool.empty()) CHECK(m_monTool.retrieve());
97 
99  ATH_MSG_INFO("Use SCT SP overlap cuts based on layer number parity");
100 
102  ATH_MSG_INFO("Doing eta overlap space points in strips endcap");
103 
104  return StatusCode::SUCCESS;
105 }
106 
107 //-------------------------------------------------------------------------
108 
109 StatusCode SiTrackerSpacePointFinder::execute (const EventContext& ctx) const
110 {
112  const InDetDD::SiDetectorElementCollection* elements = nullptr;
113  const SiElementPropertiesTable* properties = nullptr;
114 
115  auto nReceivedSPsSCT = Monitored::Scalar<int>( "numSctSpacePoints" , 0 );
116  auto nReceivedSPsPIX = Monitored::Scalar<int>( "numPixSpacePoints" , 0 );
117 
118  auto mon = Monitored::Group( m_monTool, nReceivedSPsPIX,nReceivedSPsSCT );
119 
120  if (m_selectSCTs) {
122  elements = sctDetEle.retrieve();
123  if (elements==nullptr) {
124  ATH_MSG_FATAL("Pointer of SiDetectorElementCollection (" << m_SCTDetEleCollKey.fullKey() << ") could not be retrieved");
125  return StatusCode::SUCCESS;
126  }
128  properties = sctProperties.retrieve();
129  if (properties==nullptr) {
130  ATH_MSG_FATAL("Pointer of SiElementPropertiesTable (" << m_SCTPropertiesKey.fullKey() << ") could not be retrieved");
131  return StatusCode::SUCCESS;
132  }
133  }
134  SPFCache r_cache(ctx);
135  if (! m_overrideBS){
137  const InDet::BeamSpotData* beamSpot = *beamSpotHandle;
138  r_cache.vertex = beamSpot->beamVtx().position();
139  } else {
140  r_cache.vertex = Amg::Vector3D(m_xVertex,m_yVertex,m_zVertex);
141  }
142 
143  // register the IdentifiableContainer into StoreGate
144  SG::WriteHandle<SpacePointContainer> spacePointContainerPixel;
145  std::unique_ptr<DataPool<PixelSpacePoint>> dataItemsPixel = nullptr;
146  if (m_selectPixels){
147  spacePointContainerPixel = SG::WriteHandle<SpacePointContainer>( m_SpacePointContainerPixelKey, ctx );
148  if(m_SpacePointCache_PixKey.key().empty()){
149  ATH_CHECK( spacePointContainerPixel.record( std::make_unique<SpacePointContainer>(m_idHelperPixel->wafer_hash_max()) ) );
150  ATH_MSG_DEBUG("Created SpacePointContainer " << m_SpacePointContainerPixelKey.key() << " N= " << m_idHelperPixel->wafer_hash_max());
151  }else{
153  ATH_CHECK(updateH.isValid());
154  ATH_CHECK( spacePointContainerPixel.record( std::make_unique<SpacePointContainer>(updateH.ptr()) ) );
155  ATH_MSG_DEBUG("Created SpacePointContainer " << m_SpacePointContainerPixelKey.key() << " from cache " << m_SpacePointCache_PixKey.key());
156  }
157  const bool hasExternalCache = spacePointContainerPixel->hasExternalCache();
158  if (!hasExternalCache) {
159  dataItemsPixel = std::make_unique<DataPool<PixelSpacePoint>>(ctx);
160  dataItemsPixel->reserve(5000); // Some large default size
161  } else if (m_useDataPoolWithCache) {
162  dataItemsPixel = std::make_unique<DataPool<PixelSpacePoint>>(ctx);
163  // Default size for now 1024 let it expand on its own
164  }
165  }
166 
167  SG::WriteHandle<SpacePointContainer> spacePointContainer_SCT;
168  std::unique_ptr<DataPool<SCT_SpacePoint>> dataItemsSCT = nullptr;
169  if (m_selectSCTs){
170  spacePointContainer_SCT = SG::WriteHandle<SpacePointContainer>( m_SpacePointContainer_SCTKey, ctx );
171  if(m_SpacePointCache_SCTKey.key().empty()){
172  ATH_CHECK( spacePointContainer_SCT.record( std::make_unique<SpacePointContainer>(m_idHelper->wafer_hash_max()) ) );
173  ATH_MSG_DEBUG("Created SpacePointContainer " << m_SpacePointContainer_SCTKey.key() << " N= " << m_idHelper->wafer_hash_max());
174  }else{
176  ATH_CHECK(updateH.isValid());
177  ATH_CHECK( spacePointContainer_SCT.record( std::make_unique<SpacePointContainer>(updateH.ptr()) ) );
178  ATH_MSG_DEBUG("Created SpacePointContainer " << m_SpacePointContainer_SCTKey.key() << " from cache " << m_SpacePointCache_SCTKey.key());
179  }
180  const bool hasExternalCache = spacePointContainer_SCT->hasExternalCache();
181  if (!hasExternalCache) {
182  dataItemsSCT = std::make_unique<DataPool<SCT_SpacePoint>>(ctx);
183  dataItemsSCT->reserve(10000); // Some large default size
184  } else if (m_useDataPoolWithCache) {
185  dataItemsSCT = std::make_unique<DataPool<SCT_SpacePoint>>(ctx);
186  // Default size for now 1024 let it expand on its own
187  }
188  }
189 
190  SG::WriteHandle<SpacePointOverlapCollection> spacepointoverlapCollection;
191  if(m_overlap){
193  ATH_CHECK( spacepointoverlapCollection.record( std::make_unique<SpacePointOverlapCollection>() ) );
194  if (dataItemsSCT) {
195  // if we have a DataPool it will own the elements
196  spacepointoverlapCollection.ptr()->clear(SG::VIEW_ELEMENTS);
197  }
198  ATH_MSG_DEBUG( "Container '" << spacepointoverlapCollection.name() << "' initialised" );
199  }
200 
201  int sctCacheCount = 0;
202  int pixCacheCount = 0;
203 
204  if (m_selectSCTs){
205  // retrieve SCT cluster container
207  if (!sct_clcontainer.isValid()){
208  msg(MSG:: FATAL) << "Could not find the data object "<< sct_clcontainer.name() << " !" << endmsg;
209  return StatusCode::RECOVERABLE;
210  }
211 
212  r_cache.SCTCContainer = sct_clcontainer.cptr();
213 
214  ATH_MSG_DEBUG( "SCT Cluster container found: " << sct_clcontainer->size() << " collections" );
215  // Get hold of all clusters and iterate through them.
216  // Pixel clusters will be converted immediately to pixel space points.
217  // For SCT clusters, posssible pairs will be found and space points computed.
218  // It is possible, though unlikely, that there are no clusters for the
219  // event. Therefore we do not terminate the job if we don't find any.
220  SCT_ClusterContainer::const_iterator it = sct_clcontainer->begin();
221  SCT_ClusterContainer::const_iterator itend = sct_clcontainer->end();
222 
223  for (; it != itend; ++it){
224  const SCT_ClusterCollection *colNext=&(**it);
225 
226  // Create SpacePointCollection
227  IdentifierHash idHash = colNext->identifyHash();
228  SpacePointContainer::IDC_WriteHandle lock = spacePointContainer_SCT->getWriteHandle(idHash);
229  if(lock.OnlineAndPresentInAnotherView()){
230  ATH_MSG_DEBUG("SCT Hash " << idHash << " is already in cache");
231  ++sctCacheCount;
232  continue; //Skip if already present in cache
233  }
234 
235  Identifier elementID = colNext->identify();
236  auto spacepointCollection = std::make_unique<SpacePointCollection>(idHash);
237  spacepointCollection->setIdentifier(elementID);
238  if(dataItemsSCT){
239  //if we have a DataPool it will own the elements
240  spacepointCollection->clear(SG::VIEW_ELEMENTS);
241  }
242 
243  if(!colNext->empty() && !elements->getDetectorElement(colNext->identifyHash())->isStereo()) {
245  colNext, properties, elements, spacepointCollection.get(),
246  spacepointoverlapCollection.ptr(), r_cache, dataItemsSCT.get());
247  } else {
248  ATH_MSG_DEBUG( "Empty SCT cluster collection" );
249  }
250 
251  size_t size = spacepointCollection->size();
252  if (size == 0){
253  ATH_MSG_VERBOSE( "SiTrackerSpacePointFinder algorithm found no space points" );
254  } else {
255  //In a MT environment the cache maybe filled by another thread in which case this will delete the duplicate
256  StatusCode sc= lock.addOrDelete( std::move(spacepointCollection) );
257  if (sc.isFailure()){
258  ATH_MSG_ERROR( "Failed to add SpacePoints to container" );
259  return StatusCode::RECOVERABLE;
260  }
261  ATH_MSG_VERBOSE( size << " SpacePoints successfully added to Container !" );
262  nReceivedSPsSCT += size;
263  m_nspacePoints += size;
264  }
265  }
266  m_numberOfSCT+= sct_clcontainer->size();
267  }
268 
269  if (m_selectPixels)
270  {
271 
273  if (!pixel_clcontainer.isValid()){
274  msg(MSG:: FATAL) << "Could not find the data object "<< pixel_clcontainer.name() << " !" << endmsg;
275  return StatusCode::RECOVERABLE;
276  }
277 
278  ATH_MSG_DEBUG( "Data object " << pixel_clcontainer.name() << " found" );
279 
280  // loop over Pixel clusterCollections
281  PixelClusterContainer::const_iterator colNext = pixel_clcontainer->begin();
282  PixelClusterContainer::const_iterator lastCol = pixel_clcontainer->end();
283 
284 
285  int numColl=0;
286  for (; colNext != lastCol; ++colNext)
287  {
288  ATH_MSG_VERBOSE( "Collection num " << numColl++ );
289  IdentifierHash idHash = (*colNext)->identifyHash();
290  SpacePointContainer::IDC_WriteHandle lock = spacePointContainerPixel->getWriteHandle(idHash);
291  if(lock.OnlineAndPresentInAnotherView()){
292  ATH_MSG_DEBUG("pixel Hash " << idHash << " is already in cache");
293  ++pixCacheCount;
294  continue;
295  }
296  // Create SpacePointCollection
297  Identifier elementID = (*colNext)->identify();
298  auto spacepointCollection = std::make_unique< SpacePointCollection >(idHash);
299  spacepointCollection->setIdentifier(elementID);
300  if(dataItemsPixel){
301  //if we have a DataPool it will own the elements
302  spacepointCollection->clear(SG::VIEW_ELEMENTS);
303  }
304 
305  if (!(*colNext)->empty())
306  {
307  m_SiSpacePointMakerTool->fillPixelSpacePointCollection(
308  *colNext, spacepointCollection.get(), dataItemsPixel.get());
309  } else {
310  ATH_MSG_DEBUG( "Empty pixel cluster collection" );
311  }
312  size_t size = spacepointCollection->size();
313  if (size == 0)
314  {
315  ATH_MSG_DEBUG( "SiTrackerSpacePointFinder algorithm found no space points" );
316  }
317  else
318  {
319  StatusCode sc = lock.addOrDelete( std::move(spacepointCollection) );
320  if (sc.isFailure())
321  {
322  ATH_MSG_ERROR( "Failed to add SpacePoints to container" );
323  return StatusCode::RECOVERABLE;
324  }
326  << " SpacePoints successfully added to Container !" );
327  nReceivedSPsPIX += size;
328  m_nspacePoints += size;
329  }
330  }
331  m_numberOfPixel+= pixel_clcontainer->size();
332  }
333 
334  // store the overlap space points.
335  // check that the set isn't empty.
336  if(m_overlap){
337  if (spacepointoverlapCollection->empty())
338  {
339  ATH_MSG_DEBUG( "No overlap space points found" );
340  }
341  else
342  {
343  ATH_MSG_DEBUG( spacepointoverlapCollection->size() <<" overlap space points registered." );
344  m_nspacePointsOverlap += spacepointoverlapCollection->size();
345  }
346  }
347 
348  if(m_cachemode)//Prevent unnecessary atomic counting
349  {
350  m_sctCacheHits += sctCacheCount;
351  m_pixCacheHits += pixCacheCount;
352  }
353 
354  return StatusCode::SUCCESS;
355 
356 }
357 
358 //---------------------------------------------------------------------------
360 {
361  ATH_MSG_DEBUG( m_numberOfEvents << " events processed" );
362  ATH_MSG_DEBUG( m_numberOfPixel << " pixel collections processed" );
363  ATH_MSG_DEBUG( m_numberOfSCT << " sct collections processed" );
364  ATH_MSG_DEBUG( m_nspacePoints+m_nspacePointsOverlap << " space points made, including "<<
365  m_nspacePointsOverlap << " overlap space points" );
366 
367  if(m_cachemode){
368  //These are debug messages because they can be indeterminate in an MT environment and it could
369  //lead to confusing log comparisons.
370  ATH_MSG_DEBUG( m_sctCacheHits << " sct cache hits" );
371  ATH_MSG_DEBUG( m_pixCacheHits << " pix cache hits" );
372  }
373  return StatusCode::SUCCESS;
374 }
375 
376 //--------------------------------------------------------------------------
377 
379  const SiElementPropertiesTable* properties,
380  const InDetDD::SiDetectorElementCollection* elements,
381  SpacePointCollection* spacepointCollection,
382  SpacePointOverlapCollection* spacepointOverlapCollection,
383  SPFCache &r_cache,
384  DataPool<SCT_SpacePoint>* dataItemsSCT) const
385 {
386  // For each trigger element, first evaluate and collect the quantities you need to build the space points.
387  // The detector element array has capacity 6:
388  // [0] is the trigger element
389  // [1] is the opposite element
390  // [2]-[3] are the elements tested for eta overlaps
391  // [4]-[5] are the elements tested for phi overlaps
392  // For each element you save the corresponding cluster collections and the
393  // space point compatibility range as described below.
394  //
395  // For the opposite element and the ones tested for eta overlaps, you have to check
396  // if clusters are compatible with the local position of the trigger cluster
397  // requiring that the distance between the two clusters in phi is withing a specified range.
398  // - For the clusters on the opposite element: [-m_overlapLimitOpposite, m_overlapLimitOpposite]
399  //
400  // - For the eta overlapping clusters : you use m_overlapLimitEtaMin and m_overlapLimitEtaMax
401  // in different combination depending if you are checking a stereo module or not
402  //
403  // For each element, the extremes of these ranges are saved in the overlapExtents array
404  // which is later on used in SiSpacePointMakerTool::fillSCT_SpacePointCollection
405  // - overlapExtents[0], overlapExtents[1] are filled for the opposite element
406  // - overlapExtents[2], overlapExtents[3], overlapExtents[4], overlapExtents[5] are filled for the eta overlapping elements
407  //
408  // For the elements tested for phi overlaps, you have to check
409  // if clusters are compatible with the local position of the trigger cluster.
410  // This needs that the trigger cluster is at the edge of the trigger module:
411  // e.g. -hwidth < locX_trigger < -hwidth+m_overlapLimitPhi (or hwidth-m_overlapLimitPhi < locX_trigger < hwidth)
412  // and that the other cluster is on the compatible edge of its module:
413  // e.g. hwidth-m_overlapLimitPhi < locX_other < hwidth (or -hwidth < locX_other < -hwidth+m_overlapLimitPhi)
414  //
415  // For each element, the extremes of these ranges are saved in the overlapExtents array
416  // which is later on used in SiSpacePointMakerTool::fillSCT_SpacePointCollection
417  // - overlapExtents[6], overlapExtents[7], overlapExtents[10], overlapExtents[11]
418  // overlapExtents[8], overlapExtents[9], overlapExtents[12], overlapExtents[13] are filled for the phi overlapping elements
419 
421 
422  std::array<const SCT_ClusterCollection*, nNeighbours> neighbourClusters{};
423  std::array<const InDetDD::SiDetectorElement*, nNeighbours> neighbourElements{};
424  std::array<double, 14> overlapExtents{};
425 
426  // Get the detector element (and its Identifier) correspoding to the cluster collection
427  IdentifierHash triggerIdHash(sctClusters->identifyHash());
428  const InDetDD::SiDetectorElement *triggerElement = elements->getDetectorElement(triggerIdHash);
429  Identifier thisID = triggerElement->identify();
430 
431  // Retrieve the neighbours of the detector element
432  const std::vector<IdentifierHash>* others(properties->neighbours(triggerIdHash));
433  if (others==nullptr || others->empty() ) return;
434 
435  // Save the current detector element and clusters
436  neighbourElements[0] = triggerElement;
437  neighbourClusters[0] = sctClusters;
438  int n = 0 ;
439 
440  // Default case: you test the opposite element and the overlapping in phi (total 3 elements)
441  int Nmax = 4 ;
442 
443  // In the barrel, test the eta overlaps as well (total 5 elements)
444  // or also in the endcaps if we specifically request it
445  if (m_idHelper->is_barrel(thisID) || m_doEndcapEtaOverlapSP) Nmax = 6;
446 
447  // You can remove all the overlaps if requrested. Here you test only the opposite element
448  if(!m_overlap) Nmax = 2;
449 
450  float hwidth(properties->halfWidth(triggerIdHash));
451 
452  // This flag is use to trigger if the search should be performed.
453  // In case there are no other detector elements and/or cluster collection
454  // this flag stays false.
455  bool search = false;
456 
457  // The order of the elements in others is such that you first get the opposite element,
458  // the overlapping in phi and then the overlapping in eta
459  // For this reason you need to re-order the indices, since the SiSpacePointMakerTool will process
460  // first the eta overlaps and then the phi ones
461  const std::array<size_t, nNeighbours> neigbourIndices{ThisOne, Opposite, EtaMinus, EtaPlus, PhiMinus, PhiPlus};
462 
463  for (const auto& otherHash : *others) {
464 
465  if(++n==Nmax) break;
466  const SCT_ClusterCollection* otherClusters = r_cache.SCTCContainer->indexFindPtr (otherHash);
467  const InDetDD::SiDetectorElement* otherElement = elements ->getDetectorElement(otherHash);
468 
469  if(!otherElement || !otherClusters) continue;
470 
471  neighbourElements[neigbourIndices[n]] = otherElement;
472  neighbourClusters[neigbourIndices[n]] = otherClusters;
473  search = true ;
474 
475  switch (n) {
476  case Opposite: {
477  overlapExtents[ 0] = -m_overlapLimitOpposite;
478  overlapExtents[ 1] = m_overlapLimitOpposite;
479  break;
480  }
481  case PhiMinus: {
482  overlapExtents[ 6] =-hwidth;
483  overlapExtents[ 7] =-hwidth+m_overlapLimitPhi;
484  overlapExtents[ 8] = hwidth-m_overlapLimitPhi;
485  overlapExtents[ 9] = hwidth;
486  break;
487  }
488  case PhiPlus: {
489  overlapExtents[10] = hwidth-m_overlapLimitPhi;
490  overlapExtents[11] = hwidth;
491  overlapExtents[12] =-hwidth;
492  overlapExtents[13] =-hwidth+m_overlapLimitPhi;
493  break;
494  }
495  case EtaMinus: {
496  overlapExtents[ 2] = m_overlapLimitEtaMin;
497  overlapExtents[ 3] = m_overlapLimitEtaMax;
498  if (m_useSCTLayerDep_OverlapCuts && (m_idHelper->layer_disk(thisID) & 1) != 0) {
499  overlapExtents[ 2] =-m_overlapLimitEtaMax;
500  overlapExtents[ 3] =-m_overlapLimitEtaMin;
501  }
502  break;
503  }
504  default: {
505  overlapExtents[ 4] = m_overlapLimitEtaMin;
506  overlapExtents[ 5] = m_overlapLimitEtaMax;
507  if (m_useSCTLayerDep_OverlapCuts && (m_idHelper->layer_disk(thisID) & 1) == 0) {
508  overlapExtents[ 4] = -m_overlapLimitEtaMax;
509  overlapExtents[ 5] = -m_overlapLimitEtaMin;
510  }
511  break;
512  }
513  }
514  }
515 
516  if (search) {
517  m_SiSpacePointMakerTool->fillSCT_SpacePointCollection(
518  neighbourElements, neighbourClusters, overlapExtents, m_allClusters,
519  r_cache.vertex, spacepointCollection, spacepointOverlapCollection,
520  dataItemsSCT);
521  }
522 }
523 
524 } //namespace
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
PixelID.h
This is an Identifier helper class for the Pixel subdetector. This class is a factory for creating co...
SiTrackerSpacePointFinder.h
ActsTrk::EtaMinus
@ EtaMinus
Definition: StripInformationHelper.h:13
InDet::SiTrackerSpacePointFinder::m_xVertex
FloatProperty m_xVertex
Definition: SiTrackerSpacePointFinder.h:237
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
SCT_ID.h
This is an Identifier helper class for the SCT subdetector. This class is a factory for creating comp...
TrigDefs::Group
Group
Properties of a chain group.
Definition: GroupProperties.h:13
InDet::SiTrackerSpacePointFinder::m_yVertex
FloatProperty m_yVertex
Definition: SiTrackerSpacePointFinder.h:238
InDetDD::SiDetectorElementCollection
Definition: SiDetectorElementCollection.h:27
python.Constants.FATAL
int FATAL
Definition: Control/AthenaCommon/python/Constants.py:18
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
python.TestDriveDummies.properties
dictionary properties
Definition: TestDriveDummies.py:14
InDet::SiTrackerSpacePointFinder::m_SCTPropertiesKey
SG::ReadCondHandleKey< InDet::SiElementPropertiesTable > m_SCTPropertiesKey
To get SCT neighbours.
Definition: SiTrackerSpacePointFinder.h:157
IdentifiableContainerMT::getWriteHandle
IDC_WriteHandle getWriteHandle(IdentifierHash hash)
Definition: IdentifiableContainerMT.h:248
SG::VIEW_ELEMENTS
@ VIEW_ELEMENTS
this data object is a view, it does not own its elmts
Definition: OwnershipPolicy.h:18
InDet::SiTrackerSpacePointFinder::m_cachemode
bool m_cachemode
used for online MT counters
Definition: SiTrackerSpacePointFinder.h:207
InDet::SiTrackerSpacePointFinder::m_beamSpotKey
SG::ReadCondHandleKey< InDet::BeamSpotData > m_beamSpotKey
For beam spot.
Definition: SiTrackerSpacePointFinder.h:155
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:67
SG::VarHandleBase::name
const std::string & name() const
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleBase.cxx:75
InDet
Primary Vertex Finder.
Definition: VP1ErrorUtils.h:36
InDet::SiTrackerSpacePointFinder::m_overrideBS
BooleanProperty m_overrideBS
Definition: SiTrackerSpacePointFinder.h:236
InDet::SiTrackerSpacePointFinder::m_pixCacheHits
std::atomic< int > m_pixCacheHits
Definition: SiTrackerSpacePointFinder.h:253
InDet::SiTrackerSpacePointFinder::m_Sct_clcontainerKey
SG::ReadHandleKey< SCT_ClusterContainer > m_Sct_clcontainerKey
Definition: SiTrackerSpacePointFinder.h:146
skel.it
it
Definition: skel.GENtoEVGEN.py:407
InDet::SiTrackerSpacePointFinder::m_zVertex
FloatProperty m_zVertex
Definition: SiTrackerSpacePointFinder.h:239
InDet::SiTrackerSpacePointFinder::m_idHelperPixel
const PixelID * m_idHelperPixel
Definition: SiTrackerSpacePointFinder.h:193
InDet::SiTrackerSpacePointFinder::m_allClusters
BooleanProperty m_allClusters
Definition: SiTrackerSpacePointFinder.h:206
SpacePointOverlapCollection
Definition: SpacePointOverlapCollection.h:26
InDet::SiTrackerSpacePointFinder::m_SiSpacePointMakerTool
ToolHandle< SiSpacePointMakerTool > m_SiSpacePointMakerTool
Definition: SiTrackerSpacePointFinder.h:185
python.RatesEmulationExample.lock
lock
Definition: RatesEmulationExample.py:148
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
ActsTrk::Opposite
@ Opposite
Definition: StripInformationHelper.h:13
InDet::SiTrackerSpacePointFinder::m_numberOfPixel
std::atomic< int > m_numberOfPixel
Definition: SiTrackerSpacePointFinder.h:250
ActsTrk::EtaPlus
@ EtaPlus
Definition: StripInformationHelper.h:13
search
void search(TDirectory *td, const std::string &s, std::string cwd, node *n)
recursive directory search for TH1 and TH2 and TProfiles
Definition: hcg.cxx:738
InDet::SiTrackerSpacePointFinder::m_SpacePointContainer_SCTKey
SG::WriteHandleKey< SpacePointContainer > m_SpacePointContainer_SCTKey
Definition: SiTrackerSpacePointFinder.h:166
ReadCondHandle.h
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
InDet::SiTrackerSpacePointFinder::m_SpacePointCache_SCTKey
SG::UpdateHandleKey< SpacePointCache > m_SpacePointCache_SCTKey
Definition: SiTrackerSpacePointFinder.h:176
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
InDet::SiTrackerSpacePointFinder::m_overlapLimitPhi
FloatProperty m_overlapLimitPhi
Definition: SiTrackerSpacePointFinder.h:225
InDet::SiTrackerSpacePointFinder::SPFCache::SCTCContainer
const SCT_ClusterContainer * SCTCContainer
Definition: SiTrackerSpacePointFinder.h:111
python.setupRTTAlg.size
int size
Definition: setupRTTAlg.py:39
InDet::SiTrackerSpacePointFinder::m_useDataPoolWithCache
BooleanProperty m_useDataPoolWithCache
Definition: SiTrackerSpacePointFinder.h:209
InDet::nNeighbours
constexpr size_t nNeighbours
Definition: SiSpacePointMakerTool.h:35
IdentifiableContainerMT::hasExternalCache
virtual bool hasExternalCache() const override final
Definition: IdentifiableContainerMT.h:152
AtlasDetectorID.h
This class provides an interface to generate or decode an identifier for the upper levels of the dete...
SpacePointCollection.h
InDet::SiTrackerSpacePointFinder::m_SpacePointContainerPixelKey
SG::WriteHandleKey< SpacePointContainer > m_SpacePointContainerPixelKey
Definition: SiTrackerSpacePointFinder.h:167
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
SCT_ID::wafer_hash_max
size_type wafer_hash_max() const
Definition: SCT_ID.cxx:646
InDet::SiTrackerSpacePointFinder::m_spacepointoverlapCollectionKey
SG::WriteHandleKey< SpacePointOverlapCollection > m_spacepointoverlapCollectionKey
Definition: SiTrackerSpacePointFinder.h:168
beamspotman.n
n
Definition: beamspotman.py:727
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
SG::WriteHandle::ptr
pointer_type ptr()
Dereference the pointer.
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
SpacePointCLASS_DEF.h
InDet::SiTrackerSpacePointFinder::SPFCache::vertex
Amg::Vector3D vertex
Definition: SiTrackerSpacePointFinder.h:109
InDet::SiTrackerSpacePointFinder::m_SCTDetEleCollKey
SG::ReadCondHandleKey< InDetDD::SiDetectorElementCollection > m_SCTDetEleCollKey
For SCT alignment.
Definition: SiTrackerSpacePointFinder.h:159
IdentifiableContainerMT::IDC_WriteHandle
Definition: IdentifiableContainerMT.h:34
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
InDet::SiTrackerSpacePointFinder::m_sctCacheHits
std::atomic< int > m_sctCacheHits
Definition: SiTrackerSpacePointFinder.h:252
ActsTrk::PhiPlus
@ PhiPlus
Definition: StripInformationHelper.h:13
CHECK
#define CHECK(...)
Evaluate an expression and check for errors.
Definition: Control/AthenaKernel/AthenaKernel/errorcheck.h:422
InDet::SiTrackerSpacePointFinder::m_useSCTLayerDep_OverlapCuts
BooleanProperty m_useSCTLayerDep_OverlapCuts
Definition: SiTrackerSpacePointFinder.h:210
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
InDet::SiTrackerSpacePointFinder::m_nspacePoints
std::atomic< int > m_nspacePoints
Definition: SiTrackerSpacePointFinder.h:254
InDet::SiTrackerSpacePointFinder::addSCT_SpacePoints
void addSCT_SpacePoints(const SCT_ClusterCollection *next, const SiElementPropertiesTable *properties, const InDetDD::SiDetectorElementCollection *elements, SpacePointCollection *spacepointCollection, SpacePointOverlapCollection *spacepointOverlapCollection, SPFCache &, DataPool< SCT_SpacePoint > *dataItemsSCT) const
Definition: SiTrackerSpacePointFinder.cxx:381
SiLocalPosition.h
Monitored.h
Header file to be included by clients of the Monitored infrastructure.
DataVector::clear
void clear()
Erase all the elements in the collection.
InDet::SiTrackerSpacePointFinder::initialize
virtual StatusCode initialize() override
Definition: SiTrackerSpacePointFinder.cxx:46
InDet::SiTrackerSpacePointFinder::m_Pixel_clcontainerKey
SG::ReadHandleKey< PixelClusterContainer > m_Pixel_clcontainerKey
Definition: SiTrackerSpacePointFinder.h:147
PixelID::wafer_hash_max
size_type wafer_hash_max() const
Definition: PixelID.cxx:833
InDet::SiTrackerSpacePointFinder::m_numberOfSCT
std::atomic< int > m_numberOfSCT
Definition: SiTrackerSpacePointFinder.h:251
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
InDet::SiTrackerSpacePointFinder::SiTrackerSpacePointFinder
SiTrackerSpacePointFinder()=delete
InDet::SiTrackerSpacePointFinder::m_selectPixels
BooleanProperty m_selectPixels
Definition: SiTrackerSpacePointFinder.h:201
SG::UpdateHandle
Definition: UpdateHandle.h:91
SCT_ID::layer_disk
int layer_disk(const Identifier &id) const
Definition: SCT_ID.h:734
InDetDD::SiDetectorElement
Definition: SiDetectorElement.h:109
InDet::SiElementPropertiesTable
Definition: SiElementPropertiesTable.h:30
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
InDet::SiTrackerSpacePointFinder::m_monTool
ToolHandle< GenericMonitoringTool > m_monTool
Definition: SiTrackerSpacePointFinder.h:186
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
SiDetectorElement.h
InDet::SiTrackerSpacePointFinder::execute
virtual StatusCode execute(const EventContext &ctx) const override
Definition: SiTrackerSpacePointFinder.cxx:112
EventInfo.h
InDet::SiTrackerSpacePointFinder::m_nspacePointsOverlap
std::atomic< int > m_nspacePointsOverlap
Definition: SiTrackerSpacePointFinder.h:255
InDet::SiTrackerSpacePointFinder::m_idHelper
const SCT_ID * m_idHelper
Definition: SiTrackerSpacePointFinder.h:194
InDet::SiTrackerSpacePointFinder::m_selectSCTs
BooleanProperty m_selectSCTs
Definition: SiTrackerSpacePointFinder.h:202
SG::WriteHandle
Definition: StoreGate/StoreGate/WriteHandle.h:73
InDet::SiTrackerSpacePointFinder::m_overlapLimitOpposite
FloatProperty m_overlapLimitOpposite
Definition: SiTrackerSpacePointFinder.h:223
InDet::BeamSpotData
Definition: BeamSpotData.h:21
InDet::SiTrackerSpacePointFinder::finalize
virtual StatusCode finalize() override
Definition: SiTrackerSpacePointFinder.cxx:362
SG::WriteHandle::record
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
ActsTrk::PhiMinus
@ PhiMinus
Definition: StripInformationHelper.h:13
ActsTrk::ThisOne
@ ThisOne
Definition: StripInformationHelper.h:13
InDet::SiTrackerSpacePointFinder::m_overlapLimitEtaMin
FloatProperty m_overlapLimitEtaMin
Definition: SiTrackerSpacePointFinder.h:227
SpacePointCollection
Definition: SpacePointCollection.h:40
plotBeamSpotMon.mon
mon
Definition: plotBeamSpotMon.py:66
InDet::SiTrackerSpacePointFinder::m_doEndcapEtaOverlapSP
BooleanProperty m_doEndcapEtaOverlapSP
Definition: SiTrackerSpacePointFinder.h:211
AthCommonMsg< Gaudi::Algorithm >::msg
MsgStream & msg() const
Definition: AthCommonMsg.h:24
DataPool
a typed memory pool that saves time spent allocation small object. This is typically used by containe...
Definition: DataPool.h:63
InDet::SiTrackerSpacePointFinder::m_overlapLimitEtaMax
FloatProperty m_overlapLimitEtaMax
Definition: SiTrackerSpacePointFinder.h:229
python.BuildSignatureFlags.beamSpot
AthConfigFlags beamSpot(AthConfigFlags flags, str instanceName, str recoMode)
Definition: BuildSignatureFlags.py:475
InDet::SiTrackerSpacePointFinder::m_SpacePointCache_PixKey
SG::UpdateHandleKey< SpacePointCache > m_SpacePointCache_PixKey
Definition: SiTrackerSpacePointFinder.h:178
ActsTrk::NeighbourIndices
NeighbourIndices
Total number of neightbours and indices.
Definition: StripInformationHelper.h:13
Monitored::Scalar
Declare a monitored scalar variable.
Definition: MonitoredScalar.h:34
InDet::SiTrackerSpacePointFinder::SPFCache
This is a temporary object to aid reentrant coding.
Definition: SiTrackerSpacePointFinder.h:108
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
InDetDD::SiDetectorElement::isStereo
bool isStereo() const
Check if it is the stereo side (useful for SCT)
Definition: SiDetectorElement.cxx:300
InDet::SCT_ClusterCollection
Trk::PrepRawDataCollection< SCT_Cluster > SCT_ClusterCollection
Definition: SCT_ClusterCollection.h:26
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
InDet::SiTrackerSpacePointFinder::m_overlap
BooleanProperty m_overlap
Definition: SiTrackerSpacePointFinder.h:204
InDetDD::SiDetectorElementCollection::getDetectorElement
const SiDetectorElement * getDetectorElement(const IdentifierHash &hash) const
Definition: SiDetectorElementCollection.cxx:9
SiDetectorDesign.h
InDetDD::SolidStateDetectorElementBase::identify
virtual Identifier identify() const override final
identifier of this detector element (inline)
DataVector::empty
bool empty() const noexcept
Returns true if the collection is empty.
SCT_ID::is_barrel
bool is_barrel(const Identifier &id) const
Test for barrel - WARNING: id MUST be sct id, otherwise answer is not accurate. Use SiliconID for gen...
Definition: SCT_ID.h:721
InDet::SiTrackerSpacePointFinder::m_numberOfEvents
std::atomic< int > m_numberOfEvents
Definition: SiTrackerSpacePointFinder.h:249
Identifier
Definition: IdentifierFieldParser.cxx:14