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 
101  return StatusCode::SUCCESS;
102 }
103 
104 //-------------------------------------------------------------------------
105 
106 StatusCode SiTrackerSpacePointFinder::execute (const EventContext& ctx) const
107 {
109  const InDetDD::SiDetectorElementCollection* elements = nullptr;
110  const SiElementPropertiesTable* properties = nullptr;
111 
112  auto nReceivedSPsSCT = Monitored::Scalar<int>( "numSctSpacePoints" , 0 );
113  auto nReceivedSPsPIX = Monitored::Scalar<int>( "numPixSpacePoints" , 0 );
114 
115  auto mon = Monitored::Group( m_monTool, nReceivedSPsPIX,nReceivedSPsSCT );
116 
117  if (m_selectSCTs) {
119  elements = sctDetEle.retrieve();
120  if (elements==nullptr) {
121  ATH_MSG_FATAL("Pointer of SiDetectorElementCollection (" << m_SCTDetEleCollKey.fullKey() << ") could not be retrieved");
122  return StatusCode::SUCCESS;
123  }
125  properties = sctProperties.retrieve();
126  if (properties==nullptr) {
127  ATH_MSG_FATAL("Pointer of SiElementPropertiesTable (" << m_SCTPropertiesKey.fullKey() << ") could not be retrieved");
128  return StatusCode::SUCCESS;
129  }
130  }
131  SPFCache r_cache(ctx);
132  if (! m_overrideBS){
134  const InDet::BeamSpotData* beamSpot = *beamSpotHandle;
135  r_cache.vertex = beamSpot->beamVtx().position();
136  } else {
137  r_cache.vertex = Amg::Vector3D(m_xVertex,m_yVertex,m_zVertex);
138  }
139 
140  // register the IdentifiableContainer into StoreGate
141  SG::WriteHandle<SpacePointContainer> spacePointContainerPixel;
142  std::unique_ptr<DataPool<PixelSpacePoint>> dataItemsPixel = nullptr;
143  if (m_selectPixels){
144  spacePointContainerPixel = SG::WriteHandle<SpacePointContainer>( m_SpacePointContainerPixelKey, ctx );
145  if(m_SpacePointCache_PixKey.key().empty()){
146  ATH_CHECK( spacePointContainerPixel.record( std::make_unique<SpacePointContainer>(m_idHelperPixel->wafer_hash_max()) ) );
147  ATH_MSG_DEBUG("Created SpacePointContainer " << m_SpacePointContainerPixelKey.key() << " N= " << m_idHelperPixel->wafer_hash_max());
148  }else{
150  ATH_CHECK(updateH.isValid());
151  ATH_CHECK( spacePointContainerPixel.record( std::make_unique<SpacePointContainer>(updateH.ptr()) ) );
152  ATH_MSG_DEBUG("Created SpacePointContainer " << m_SpacePointContainerPixelKey.key() << " from cache " << m_SpacePointCache_PixKey.key());
153  }
154  const bool hasExternalCache = spacePointContainerPixel->hasExternalCache();
155  if (!hasExternalCache) {
156  dataItemsPixel = std::make_unique<DataPool<PixelSpacePoint>>(ctx);
157  dataItemsPixel->reserve(5000); // Some large default size
158  } else if (m_useDataPoolWithCache) {
159  dataItemsPixel = std::make_unique<DataPool<PixelSpacePoint>>(ctx);
160  // Default size for now 1024 let it expand on its own
161  }
162  }
163 
164  SG::WriteHandle<SpacePointContainer> spacePointContainer_SCT;
165  std::unique_ptr<DataPool<SCT_SpacePoint>> dataItemsSCT = nullptr;
166  if (m_selectSCTs){
167  spacePointContainer_SCT = SG::WriteHandle<SpacePointContainer>( m_SpacePointContainer_SCTKey, ctx );
168  if(m_SpacePointCache_SCTKey.key().empty()){
169  ATH_CHECK( spacePointContainer_SCT.record( std::make_unique<SpacePointContainer>(m_idHelper->wafer_hash_max()) ) );
170  ATH_MSG_DEBUG("Created SpacePointContainer " << m_SpacePointContainer_SCTKey.key() << " N= " << m_idHelper->wafer_hash_max());
171  }else{
173  ATH_CHECK(updateH.isValid());
174  ATH_CHECK( spacePointContainer_SCT.record( std::make_unique<SpacePointContainer>(updateH.ptr()) ) );
175  ATH_MSG_DEBUG("Created SpacePointContainer " << m_SpacePointContainer_SCTKey.key() << " from cache " << m_SpacePointCache_SCTKey.key());
176  }
177  const bool hasExternalCache = spacePointContainer_SCT->hasExternalCache();
178  if (!hasExternalCache) {
179  dataItemsSCT = std::make_unique<DataPool<SCT_SpacePoint>>(ctx);
180  dataItemsSCT->reserve(10000); // Some large default size
181  } else if (m_useDataPoolWithCache) {
182  dataItemsSCT = std::make_unique<DataPool<SCT_SpacePoint>>(ctx);
183  // Default size for now 1024 let it expand on its own
184  }
185  }
186 
187  SG::WriteHandle<SpacePointOverlapCollection> spacepointoverlapCollection;
188  if(m_overlap){
190  ATH_CHECK( spacepointoverlapCollection.record( std::make_unique<SpacePointOverlapCollection>() ) );
191  if (dataItemsSCT) {
192  // if we have a DataPool it will own the elements
193  spacepointoverlapCollection.ptr()->clear(SG::VIEW_ELEMENTS);
194  }
195  ATH_MSG_DEBUG( "Container '" << spacepointoverlapCollection.name() << "' initialised" );
196  }
197 
198  int sctCacheCount = 0;
199  int pixCacheCount = 0;
200 
201  if (m_selectSCTs){
202  // retrieve SCT cluster container
204  if (!sct_clcontainer.isValid()){
205  msg(MSG:: FATAL) << "Could not find the data object "<< sct_clcontainer.name() << " !" << endmsg;
206  return StatusCode::RECOVERABLE;
207  }
208 
209  r_cache.SCTCContainer = sct_clcontainer.cptr();
210 
211  ATH_MSG_DEBUG( "SCT Cluster container found: " << sct_clcontainer->size() << " collections" );
212  // Get hold of all clusters and iterate through them.
213  // Pixel clusters will be converted immediately to pixel space points.
214  // For SCT clusters, posssible pairs will be found and space points computed.
215  // It is possible, though unlikely, that there are no clusters for the
216  // event. Therefore we do not terminate the job if we don't find any.
217  SCT_ClusterContainer::const_iterator it = sct_clcontainer->begin();
218  SCT_ClusterContainer::const_iterator itend = sct_clcontainer->end();
219 
220  for (; it != itend; ++it){
221  const SCT_ClusterCollection *colNext=&(**it);
222 
223  // Create SpacePointCollection
224  IdentifierHash idHash = colNext->identifyHash();
225  SpacePointContainer::IDC_WriteHandle lock = spacePointContainer_SCT->getWriteHandle(idHash);
227  ATH_MSG_DEBUG("SCT Hash " << idHash << " is already in cache");
228  ++sctCacheCount;
229  continue; //Skip if already present in cache
230  }
231 
232  Identifier elementID = colNext->identify();
233  auto spacepointCollection = std::make_unique<SpacePointCollection>(idHash);
234  spacepointCollection->setIdentifier(elementID);
235  if(dataItemsSCT){
236  //if we have a DataPool it will own the elements
237  spacepointCollection->clear(SG::VIEW_ELEMENTS);
238  }
239 
240  if(!colNext->empty() && !elements->getDetectorElement(colNext->identifyHash())->isStereo()) {
242  colNext, properties, elements, spacepointCollection.get(),
243  spacepointoverlapCollection.ptr(), r_cache, dataItemsSCT.get());
244  } else {
245  ATH_MSG_DEBUG( "Empty SCT cluster collection" );
246  }
247 
248  size_t size = spacepointCollection->size();
249  if (size == 0){
250  ATH_MSG_VERBOSE( "SiTrackerSpacePointFinder algorithm found no space points" );
251  } else {
252  //In a MT environment the cache maybe filled by another thread in which case this will delete the duplicate
253  StatusCode sc= lock.addOrDelete( std::move(spacepointCollection) );
254  if (sc.isFailure()){
255  ATH_MSG_ERROR( "Failed to add SpacePoints to container" );
256  return StatusCode::RECOVERABLE;
257  }
258  ATH_MSG_VERBOSE( size << " SpacePoints successfully added to Container !" );
259  nReceivedSPsSCT += size;
260  }
261  }
262  m_numberOfSCT+= sct_clcontainer->size();
263  }
264 
265  if (m_selectPixels)
266  {
267 
269  if (!pixel_clcontainer.isValid()){
270  msg(MSG:: FATAL) << "Could not find the data object "<< pixel_clcontainer.name() << " !" << endmsg;
271  return StatusCode::RECOVERABLE;
272  }
273 
274  ATH_MSG_DEBUG( "Data object " << pixel_clcontainer.name() << " found" );
275 
276  // loop over Pixel clusterCollections
277  PixelClusterContainer::const_iterator colNext = pixel_clcontainer->begin();
278  PixelClusterContainer::const_iterator lastCol = pixel_clcontainer->end();
279 
280 
281  int numColl=0;
282  for (; colNext != lastCol; ++colNext)
283  {
284  ATH_MSG_VERBOSE( "Collection num " << numColl++ );
285  IdentifierHash idHash = (*colNext)->identifyHash();
286  SpacePointContainer::IDC_WriteHandle lock = spacePointContainerPixel->getWriteHandle(idHash);
288  ATH_MSG_DEBUG("pixel Hash " << idHash << " is already in cache");
289  ++pixCacheCount;
290  continue;
291  }
292  // Create SpacePointCollection
293  Identifier elementID = (*colNext)->identify();
294  auto spacepointCollection = std::make_unique< SpacePointCollection >(idHash);
295  spacepointCollection->setIdentifier(elementID);
296  if(dataItemsPixel){
297  //if we have a DataPool it will own the elements
298  spacepointCollection->clear(SG::VIEW_ELEMENTS);
299  }
300 
301  if (!(*colNext)->empty())
302  {
303  m_SiSpacePointMakerTool->fillPixelSpacePointCollection(
304  *colNext, spacepointCollection.get(), dataItemsPixel.get());
305  } else {
306  ATH_MSG_DEBUG( "Empty pixel cluster collection" );
307  }
308  size_t size = spacepointCollection->size();
309  if (size == 0)
310  {
311  ATH_MSG_DEBUG( "SiTrackerSpacePointFinder algorithm found no space points" );
312  }
313  else
314  {
315  StatusCode sc = lock.addOrDelete( std::move(spacepointCollection) );
316  if (sc.isFailure())
317  {
318  ATH_MSG_ERROR( "Failed to add SpacePoints to container" );
319  return StatusCode::RECOVERABLE;
320  }
322  << " SpacePoints successfully added to Container !" );
323  nReceivedSPsPIX += size;
324  }
325  }
326  m_numberOfPixel+= pixel_clcontainer->size();
327  }
328 
329  // store the overlap space points.
330  // check that the set isn't empty.
331  if(m_overlap){
332  if (spacepointoverlapCollection->empty())
333  {
334  ATH_MSG_DEBUG( "No overlap space points found" );
335  }
336  else
337  {
338  ATH_MSG_DEBUG( spacepointoverlapCollection->size() <<" overlap space points registered." );
339  }
340  }
341 
342  if(m_cachemode)//Prevent unnecessary atomic counting
343  {
344  m_sctCacheHits += sctCacheCount;
345  m_pixCacheHits += pixCacheCount;
346  }
347 
348  return StatusCode::SUCCESS;
349 
350 }
351 
352 //---------------------------------------------------------------------------
354 {
355  ATH_MSG_DEBUG( m_numberOfEvents << " events processed" );
356  ATH_MSG_DEBUG( m_numberOfPixel << " pixel collections processed" );
357  ATH_MSG_DEBUG( m_numberOfSCT << " sct collections processed" );
358  if(m_cachemode){
359  //These are debug messages because they can be indeterminate in an MT environment and it could
360  //lead to confusing log comparisons.
361  ATH_MSG_DEBUG( m_sctCacheHits << " sct cache hits" );
362  ATH_MSG_DEBUG( m_pixCacheHits << " pix cache hits" );
363  }
364  return StatusCode::SUCCESS;
365 }
366 
367 //--------------------------------------------------------------------------
368 
370  const SiElementPropertiesTable* properties,
371  const InDetDD::SiDetectorElementCollection* elements,
372  SpacePointCollection* spacepointCollection,
373  SpacePointOverlapCollection* spacepointOverlapCollection,
374  SPFCache &r_cache,
375  DataPool<SCT_SpacePoint>* dataItemsSCT) const
376 {
377  // For each trigger element, first evaluate and collect the quantities you need to build the space points.
378  // The detector element array has capacity 6:
379  // [0] is the trigger element
380  // [1] is the opposite element
381  // [2]-[3] are the elements tested for eta overlaps
382  // [4]-[5] are the elements tested for phi overlaps
383  // For each element you save the corresponding cluster collections and the
384  // space point compatibility range as described below.
385  //
386  // For the opposite element and the ones tested for eta overlaps, you have to check
387  // if clusters are compatible with the local position of the trigger cluster
388  // requiring that the distance between the two clusters in phi is withing a specified range.
389  // - For the clusters on the opposite element: [-m_overlapLimitOpposite, m_overlapLimitOpposite]
390  //
391  // - For the eta overlapping clusters : you use m_overlapLimitEtaMin and m_overlapLimitEtaMax
392  // in different combination depending if you are checking a stereo module or not
393  //
394  // For each element, the extremes of these ranges are saved in the overlapExtents array
395  // which is later on used in SiSpacePointMakerTool::fillSCT_SpacePointCollection
396  // - overlapExtents[0], overlapExtents[1] are filled for the opposite element
397  // - overlapExtents[2], overlapExtents[3], overlapExtents[4], overlapExtents[5] are filled for the eta overlapping elements
398  //
399  // For the elements tested for phi overlaps, you have to check
400  // if clusters are compatible with the local position of the trigger cluster.
401  // This needs that the trigger cluster is at the edge of the trigger module:
402  // e.g. -hwidth < locX_trigger < -hwidth+m_overlapLimitPhi (or hwidth-m_overlapLimitPhi < locX_trigger < hwidth)
403  // and that the other cluster is on the compatible edge of its module:
404  // e.g. hwidth-m_overlapLimitPhi < locX_other < hwidth (or -hwidth < locX_other < -hwidth+m_overlapLimitPhi)
405  //
406  // For each element, the extremes of these ranges are saved in the overlapExtents array
407  // which is later on used in SiSpacePointMakerTool::fillSCT_SpacePointCollection
408  // - overlapExtents[6], overlapExtents[7], overlapExtents[10], overlapExtents[11]
409  // overlapExtents[8], overlapExtents[9], overlapExtents[12], overlapExtents[13] are filled for the phi overlapping elements
410 
412 
413  std::array<const SCT_ClusterCollection*, nNeighbours> neighbourClusters{};
414  std::array<const InDetDD::SiDetectorElement*, nNeighbours> neighbourElements{};
415  std::array<double, 14> overlapExtents{};
416 
417  // Get the detector element (and its Identifier) correspoding to the cluster collection
418  IdentifierHash triggerIdHash(sctClusters->identifyHash());
419  const InDetDD::SiDetectorElement *triggerElement = elements->getDetectorElement(triggerIdHash);
420  Identifier thisID = triggerElement->identify();
421 
422  // Retrieve the neighbours of the detector element
423  const std::vector<IdentifierHash>* others(properties->neighbours(triggerIdHash));
424  if (others==nullptr || others->empty() ) return;
425 
426  // Save the current detector element and clusters
427  neighbourElements[0] = triggerElement;
428  neighbourClusters[0] = sctClusters;
429  int n = 0 ;
430 
431  // Default case: you test the opposite element and the overlapping in phi (total 3 elements)
432  int Nmax = 4 ;
433 
434  // In the barrel, test the eta overlaps as well (total 5 elements)
435  if (m_idHelper->is_barrel(thisID)) Nmax = 6;
436 
437  // You can remove all the overlaps if requrested. Here you test only the opposite element
438  if(!m_overlap) Nmax = 2;
439 
440  float hwidth(properties->halfWidth(triggerIdHash));
441 
442  // This flag is use to trigger if the search should be performed.
443  // In case there are no other detector elements and/or cluster collection
444  // this flag stays false.
445  bool search = false;
446 
447  // The order of the elements in others is such that you first get the opposite element,
448  // the overlapping in phi and then the overlapping in eta
449  // For this reason you need to re-order the indices, since the SiSpacePointMakerTool will process
450  // first the eta overlaps and then the phi ones
451  const std::array<size_t, nNeighbours> neigbourIndices{ThisOne, Opposite, EtaMinus, EtaPlus, PhiMinus, PhiPlus};
452 
453  for (const auto& otherHash : *others) {
454 
455  if(++n==Nmax) break;
456  const SCT_ClusterCollection* otherClusters = r_cache.SCTCContainer->indexFindPtr (otherHash);
457  const InDetDD::SiDetectorElement* otherElement = elements ->getDetectorElement(otherHash);
458 
459  if(!otherElement || !otherClusters) continue;
460 
461  neighbourElements[neigbourIndices[n]] = otherElement;
462  neighbourClusters[neigbourIndices[n]] = otherClusters;
463  search = true ;
464 
465  switch (n) {
466  case Opposite: {
467  overlapExtents[ 0] = -m_overlapLimitOpposite;
468  overlapExtents[ 1] = m_overlapLimitOpposite;
469  break;
470  }
471  case PhiMinus: {
472  overlapExtents[ 6] =-hwidth;
473  overlapExtents[ 7] =-hwidth+m_overlapLimitPhi;
474  overlapExtents[ 8] = hwidth-m_overlapLimitPhi;
475  overlapExtents[ 9] = hwidth;
476  break;
477  }
478  case PhiPlus: {
479  overlapExtents[10] = hwidth-m_overlapLimitPhi;
480  overlapExtents[11] = hwidth;
481  overlapExtents[12] =-hwidth;
482  overlapExtents[13] =-hwidth+m_overlapLimitPhi;
483  break;
484  }
485  case EtaMinus: {
486  overlapExtents[ 2] = m_overlapLimitEtaMin;
487  overlapExtents[ 3] = m_overlapLimitEtaMax;
488  if (m_useSCTLayerDep_OverlapCuts && (m_idHelper->layer_disk(thisID) & 1) != 0) {
489  overlapExtents[ 2] =-m_overlapLimitEtaMax;
490  overlapExtents[ 3] =-m_overlapLimitEtaMin;
491  }
492  break;
493  }
494  default: {
495  overlapExtents[ 4] = m_overlapLimitEtaMin;
496  overlapExtents[ 5] = m_overlapLimitEtaMax;
497  if (m_useSCTLayerDep_OverlapCuts && (m_idHelper->layer_disk(thisID) & 1) == 0) {
498  overlapExtents[ 4] = -m_overlapLimitEtaMax;
499  overlapExtents[ 5] = -m_overlapLimitEtaMin;
500  }
501  break;
502  }
503  }
504  }
505 
506  if (search) {
507  m_SiSpacePointMakerTool->fillSCT_SpacePointCollection(
508  neighbourElements, neighbourClusters, overlapExtents, m_allClusters,
509  r_cache.vertex, spacepointCollection, spacepointOverlapCollection,
510  dataItemsSCT);
511  }
512 }
513 
514 } //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:236
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:237
InDetDD::SiDetectorElementCollection
Definition: SiDetectorElementCollection.h:30
python.Constants.FATAL
int FATAL
Definition: Control/AthenaCommon/python/Constants.py:19
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:70
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:235
InDet::SiTrackerSpacePointFinder::m_pixCacheHits
std::atomic< int > m_pixCacheHits
Definition: SiTrackerSpacePointFinder.h:252
InDet::SiTrackerSpacePointFinder::m_Sct_clcontainerKey
SG::ReadHandleKey< SCT_ClusterContainer > m_Sct_clcontainerKey
Definition: SiTrackerSpacePointFinder.h:146
IdentifiableContainerMT::IDC_WriteHandle::OnlineAndPresentInAnotherView
bool OnlineAndPresentInAnotherView()
This method is to avoid calling an expensive operation in the offline case.
Definition: IdentifiableContainerMT.h:61
skel.it
it
Definition: skel.GENtoEVGEN.py:396
InDet::SiTrackerSpacePointFinder::m_zVertex
FloatProperty m_zVertex
Definition: SiTrackerSpacePointFinder.h:238
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
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:249
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:83
InDet::SiTrackerSpacePointFinder::m_overlapLimitPhi
FloatProperty m_overlapLimitPhi
Definition: SiTrackerSpacePointFinder.h:224
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
InDet::SiTrackerSpacePointFinder::m_spacepointoverlapCollectionKey
SG::WriteHandleKey< SpacePointOverlapCollection > m_spacepointoverlapCollectionKey
Definition: SiTrackerSpacePointFinder.h:168
beamspotman.n
n
Definition: beamspotman.py:731
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:251
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::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:372
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
InDet::SiTrackerSpacePointFinder::m_numberOfSCT
std::atomic< int > m_numberOfSCT
Definition: SiTrackerSpacePointFinder.h:250
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
InDet::SiTrackerSpacePointFinder::SiTrackerSpacePointFinder
SiTrackerSpacePointFinder()=delete
InDet::SiTrackerSpacePointFinder::m_selectPixels
BooleanProperty m_selectPixels
Definition: SiTrackerSpacePointFinder.h:201
SG::UpdateHandle
Definition: UpdateHandle.h:94
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)
PixelID::wafer_hash_max
size_type wafer_hash_max(void) const
Definition: PixelID.cxx:831
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:109
EventInfo.h
IdentifiableContainerMT::IDC_WriteHandle::addOrDelete
StatusCode addOrDelete(std::unique_ptr< T > ptr)
Definition: IdentifiableContainerMT.h:53
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:76
InDet::SiTrackerSpacePointFinder::m_overlapLimitOpposite
FloatProperty m_overlapLimitOpposite
Definition: SiTrackerSpacePointFinder.h:222
InDet::BeamSpotData
Definition: BeamSpotData.h:21
InDet::SiTrackerSpacePointFinder::finalize
virtual StatusCode finalize() override
Definition: SiTrackerSpacePointFinder.cxx:356
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:226
SpacePointCollection
Definition: SpacePointCollection.h:40
plotBeamSpotMon.mon
mon
Definition: plotBeamSpotMon.py:67
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:228
python.BuildSignatureFlags.beamSpot
AthConfigFlags beamSpot(AthConfigFlags flags, str instanceName, str recoMode)
Definition: BuildSignatureFlags.py:455
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:15
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:248
Identifier
Definition: IdentifierFieldParser.cxx:14