ATLAS Offline Software
SiTrackerSpacePointFinder.cxx
Go to the documentation of this file.
1 
2 /*
3  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
4 */
5 
6 /***************************************************************************
7 -------------------
8 ATLAS Collaboration
9 ***************************************************************************/
10 
11 //<<<<<< INCLUDES >>>>>>
12 
13 
15 
16 // For processing clusters
20 
21 // Space point Classes,
25 #include "InDetIdentifier/SCT_ID.h"
26 
27 
28 // general Atlas classes
32 
34 
35 namespace InDet {
36 
37 //------------------------------------------------------------------------
39  ISvcLocator* pSvcLocator)
40  : AthReentrantAlgorithm(name, pSvcLocator)
41 {
42  declareProperty("ProcessPixels", m_selectPixels=true);
43  declareProperty("ProcessSCTs", m_selectSCTs=true);
44  declareProperty("ProcessOverlaps", m_overlap=true, "process overlaps of SCT wafers.");
45  declareProperty("AllClusters", m_allClusters=false, "process all clusters without limits.");
46  declareProperty("OverlapLimitOpposite", m_overlapLimitOpposite=2.8, "overlap limit for opposite-neighbour.");
47  declareProperty("OverlapLimitPhi", m_overlapLimitPhi=5.64, "overlap limit for phi-neighbours.");
48  declareProperty("OverlapLimitEtaMin", m_overlapLimitEtaMin=1.68, "low overlap limit for eta-neighbours.");
49  declareProperty("OverlapLimitEtaMax", m_overlapLimitEtaMax=3.0, "high overlap limit for eta-neighbours.");
50  declareProperty("OverrideBeamSpot", m_overrideBS=false);
51  declareProperty("VertexX", m_xVertex=0.);
52  declareProperty("VertexY", m_yVertex=0.);
53  declareProperty("VertexZ", m_zVertex=0.);
54 
55  declareProperty("SpacePointCacheSCT", m_SpacePointCache_SCTKey="");
56  declareProperty("SpacePointCachePix", m_SpacePointCache_PixKey="");
57 }
58 
59 //-----------------------------------------------------------------------
61 {
62  ATH_MSG_DEBUG( "SiTrackerSpacePointFinder::initialize()" );
63 
64  // Check that clusters, space points and ids have names
65  if (m_selectSCTs && m_Sct_clcontainerKey.key().empty()){
66  ATH_MSG_FATAL( "SCTs selected and no name set for SCT clusters");
67  return StatusCode::FAILURE;
68  }
70 
71  if (m_selectPixels && m_Pixel_clcontainerKey.key().empty()){
72  ATH_MSG_FATAL( "Pixels selected and no name set for Pixel clusters");
73  return StatusCode::FAILURE;
74  }
76 
78  ATH_MSG_FATAL( "No name set for SCT space points");
79  return StatusCode::FAILURE;
80  }
82 
84  ATH_MSG_FATAL( "No name set for Pixels space points");
85  return StatusCode::FAILURE;
86  }
88 
90  ATH_MSG_FATAL( "No name set for overlap space points");
91  return StatusCode::FAILURE;
92  }
94 
95  // create containers (requires the Identifier Helpers)
96  if (m_selectPixels){
98  }
99 
100  if (m_selectSCTs) {
101  ATH_CHECK(detStore()->retrieve(m_idHelper,"SCT_ID"));
102  }
103 
104  // Initialize the key of input SiElementPropertiesTable and SiDetectorElementCollection for SCT
107 
110 
111  ATH_CHECK(m_SpacePointCache_SCTKey.initialize(!m_SpacePointCache_SCTKey.key().empty()));
112  ATH_CHECK(m_SpacePointCache_PixKey.initialize(!m_SpacePointCache_PixKey.key().empty()));
113  m_cachemode = !m_SpacePointCache_SCTKey.key().empty() || !m_SpacePointCache_PixKey.key().empty();
114 
115  if (!m_monTool.empty()) CHECK(m_monTool.retrieve());
116 
117  return StatusCode::SUCCESS;
118 }
119 
120 //-------------------------------------------------------------------------
121 
122 StatusCode SiTrackerSpacePointFinder::execute (const EventContext& ctx) const
123 {
125  const InDetDD::SiDetectorElementCollection* elements = nullptr;
126  const SiElementPropertiesTable* properties = nullptr;
127 
128  auto nReceivedSPsSCT = Monitored::Scalar<int>( "numSctSpacePoints" , 0 );
129  auto nReceivedSPsPIX = Monitored::Scalar<int>( "numPixSpacePoints" , 0 );
130 
131  auto mon = Monitored::Group( m_monTool, nReceivedSPsPIX,nReceivedSPsSCT );
132 
133  if (m_selectSCTs) {
135  elements = sctDetEle.retrieve();
136  if (elements==nullptr) {
137  ATH_MSG_FATAL("Pointer of SiDetectorElementCollection (" << m_SCTDetEleCollKey.fullKey() << ") could not be retrieved");
138  return StatusCode::SUCCESS;
139  }
141  properties = sctProperties.retrieve();
142  if (properties==nullptr) {
143  ATH_MSG_FATAL("Pointer of SiElementPropertiesTable (" << m_SCTPropertiesKey.fullKey() << ") could not be retrieved");
144  return StatusCode::SUCCESS;
145  }
146  }
147  SPFCache r_cache(ctx);
148  if (! m_overrideBS){
150  const InDet::BeamSpotData* beamSpot = *beamSpotHandle;
151  r_cache.vertex = beamSpot->beamVtx().position();
152  } else {
153  r_cache.vertex = Amg::Vector3D(m_xVertex,m_yVertex,m_zVertex);
154  }
155 
156  // register the IdentifiableContainer into StoreGate
157  SG::WriteHandle<SpacePointContainer> spacePointContainerPixel;
158  std::unique_ptr<DataPool<PixelSpacePoint>> dataItemsPixel = nullptr;
159  if (m_selectPixels){
160  spacePointContainerPixel = SG::WriteHandle<SpacePointContainer>( m_SpacePointContainerPixelKey, ctx );
161  if(m_SpacePointCache_PixKey.key().empty()){
162  ATH_CHECK( spacePointContainerPixel.record( std::make_unique<SpacePointContainer>(m_idHelperPixel->wafer_hash_max()) ) );
163  ATH_MSG_DEBUG("Created SpacePointContainer " << m_SpacePointContainerPixelKey.key() << " N= " << m_idHelperPixel->wafer_hash_max());
164  }else{
166  ATH_CHECK(updateH.isValid());
167  ATH_CHECK( spacePointContainerPixel.record( std::make_unique<SpacePointContainer>(updateH.ptr()) ) );
168  ATH_MSG_DEBUG("Created SpacePointContainer " << m_SpacePointContainerPixelKey.key() << " from cache " << m_SpacePointCache_PixKey.key());
169  }
170  const bool hasExternalCache = spacePointContainerPixel->hasExternalCache();
171  if (!hasExternalCache) {
172  dataItemsPixel = std::make_unique<DataPool<PixelSpacePoint>>(ctx);
173  dataItemsPixel->reserve(5000); // Some large default size
174  } else if (m_useDataPoolWithCache) {
175  dataItemsPixel = std::make_unique<DataPool<PixelSpacePoint>>(ctx);
176  // Default size for now 1024 let it expand on its own
177  }
178  }
179 
180  SG::WriteHandle<SpacePointContainer> spacePointContainer_SCT;
181  std::unique_ptr<DataPool<SCT_SpacePoint>> dataItemsSCT = nullptr;
182  if (m_selectSCTs){
183  spacePointContainer_SCT = SG::WriteHandle<SpacePointContainer>( m_SpacePointContainer_SCTKey, ctx );
184  if(m_SpacePointCache_SCTKey.key().empty()){
185  ATH_CHECK( spacePointContainer_SCT.record( std::make_unique<SpacePointContainer>(m_idHelper->wafer_hash_max()) ) );
186  ATH_MSG_DEBUG("Created SpacePointContainer " << m_SpacePointContainer_SCTKey.key() << " N= " << m_idHelper->wafer_hash_max());
187  }else{
189  ATH_CHECK(updateH.isValid());
190  ATH_CHECK( spacePointContainer_SCT.record( std::make_unique<SpacePointContainer>(updateH.ptr()) ) );
191  ATH_MSG_DEBUG("Created SpacePointContainer " << m_SpacePointContainer_SCTKey.key() << " from cache " << m_SpacePointCache_SCTKey.key());
192  }
193  const bool hasExternalCache = spacePointContainer_SCT->hasExternalCache();
194  if (!hasExternalCache) {
195  dataItemsSCT = std::make_unique<DataPool<SCT_SpacePoint>>(ctx);
196  dataItemsSCT->reserve(10000); // Some large default size
197  } else if (m_useDataPoolWithCache) {
198  dataItemsSCT = std::make_unique<DataPool<SCT_SpacePoint>>(ctx);
199  // Default size for now 1024 let it expand on its own
200  }
201  }
202 
203  SG::WriteHandle<SpacePointOverlapCollection> spacepointoverlapCollection;
204  if(m_overlap){
206  ATH_CHECK( spacepointoverlapCollection.record( std::make_unique<SpacePointOverlapCollection>() ) );
207  if (dataItemsSCT) {
208  // if we have a DataPool it will own the elements
209  spacepointoverlapCollection.ptr()->clear(SG::VIEW_ELEMENTS);
210  }
211  ATH_MSG_DEBUG( "Container '" << spacepointoverlapCollection.name() << "' initialised" );
212  }
213 
214  int sctCacheCount = 0;
215  int pixCacheCount = 0;
216 
217  if (m_selectSCTs){
218  // retrieve SCT cluster container
220  if (!sct_clcontainer.isValid()){
221  msg(MSG:: FATAL) << "Could not find the data object "<< sct_clcontainer.name() << " !" << endmsg;
222  return StatusCode::RECOVERABLE;
223  }
224 
225  r_cache.SCTCContainer = sct_clcontainer.cptr();
226 
227  ATH_MSG_DEBUG( "SCT Cluster container found: " << sct_clcontainer->size() << " collections" );
228  // Get hold of all clusters and iterate through them.
229  // Pixel clusters will be converted immediately to pixel space points.
230  // For SCT clusters, posssible pairs will be found and space points computed.
231  // It is possible, though unlikely, that there are no clusters for the
232  // event. Therefore we do not terminate the job if we don't find any.
233  SCT_ClusterContainer::const_iterator it = sct_clcontainer->begin();
234  SCT_ClusterContainer::const_iterator itend = sct_clcontainer->end();
235 
236  for (; it != itend; ++it){
237  const SCT_ClusterCollection *colNext=&(**it);
238 
239  // Create SpacePointCollection
240  IdentifierHash idHash = colNext->identifyHash();
241  SpacePointContainer::IDC_WriteHandle lock = spacePointContainer_SCT->getWriteHandle(idHash);
243  ATH_MSG_DEBUG("SCT Hash " << idHash << " is already in cache");
244  ++sctCacheCount;
245  continue; //Skip if already present in cache
246  }
247 
248  Identifier elementID = colNext->identify();
249  auto spacepointCollection = std::make_unique<SpacePointCollection>(idHash);
250  spacepointCollection->setIdentifier(elementID);
251  if(dataItemsSCT){
252  //if we have a DataPool it will own the elements
253  spacepointCollection->clear(SG::VIEW_ELEMENTS);
254  }
255 
256  if(!colNext->empty() && !elements->getDetectorElement(colNext->identifyHash())->isStereo()) {
258  colNext, properties, elements, spacepointCollection.get(),
259  spacepointoverlapCollection.ptr(), r_cache, dataItemsSCT.get());
260  } else {
261  ATH_MSG_DEBUG( "Empty SCT cluster collection" );
262  }
263 
264  size_t size = spacepointCollection->size();
265  if (size == 0){
266  ATH_MSG_VERBOSE( "SiTrackerSpacePointFinder algorithm found no space points" );
267  } else {
268  //In a MT environment the cache maybe filled by another thread in which case this will delete the duplicate
269  StatusCode sc= lock.addOrDelete( std::move(spacepointCollection) );
270  if (sc.isFailure()){
271  ATH_MSG_ERROR( "Failed to add SpacePoints to container" );
272  return StatusCode::RECOVERABLE;
273  }
274  ATH_MSG_VERBOSE( size << " SpacePoints successfully added to Container !" );
275  nReceivedSPsSCT += size;
276  }
277  }
278  m_numberOfSCT+= sct_clcontainer->size();
279  }
280 
281  if (m_selectPixels)
282  {
283 
285  if (!pixel_clcontainer.isValid()){
286  msg(MSG:: FATAL) << "Could not find the data object "<< pixel_clcontainer.name() << " !" << endmsg;
287  return StatusCode::RECOVERABLE;
288  }
289 
290  ATH_MSG_DEBUG( "Data object " << pixel_clcontainer.name() << " found" );
291 
292  // loop over Pixel clusterCollections
293  PixelClusterContainer::const_iterator colNext = pixel_clcontainer->begin();
294  PixelClusterContainer::const_iterator lastCol = pixel_clcontainer->end();
295 
296 
297  int numColl=0;
298  for (; colNext != lastCol; ++colNext)
299  {
300  ATH_MSG_VERBOSE( "Collection num " << numColl++ );
301  IdentifierHash idHash = (*colNext)->identifyHash();
302  SpacePointContainer::IDC_WriteHandle lock = spacePointContainerPixel->getWriteHandle(idHash);
304  ATH_MSG_DEBUG("pixel Hash " << idHash << " is already in cache");
305  ++pixCacheCount;
306  continue;
307  }
308  // Create SpacePointCollection
309  Identifier elementID = (*colNext)->identify();
310  auto spacepointCollection = std::make_unique< SpacePointCollection >(idHash);
311  spacepointCollection->setIdentifier(elementID);
312  if(dataItemsPixel){
313  //if we have a DataPool it will own the elements
314  spacepointCollection->clear(SG::VIEW_ELEMENTS);
315  }
316 
317  if (!(*colNext)->empty())
318  {
319  m_SiSpacePointMakerTool->fillPixelSpacePointCollection(
320  *colNext, spacepointCollection.get(), dataItemsPixel.get());
321  } else {
322  ATH_MSG_DEBUG( "Empty pixel cluster collection" );
323  }
324  size_t size = spacepointCollection->size();
325  if (size == 0)
326  {
327  ATH_MSG_DEBUG( "SiTrackerSpacePointFinder algorithm found no space points" );
328  }
329  else
330  {
331  StatusCode sc = lock.addOrDelete( std::move(spacepointCollection) );
332  if (sc.isFailure())
333  {
334  ATH_MSG_ERROR( "Failed to add SpacePoints to container" );
335  return StatusCode::RECOVERABLE;
336  }
338  << " SpacePoints successfully added to Container !" );
339  nReceivedSPsPIX += size;
340  }
341  }
342  m_numberOfPixel+= pixel_clcontainer->size();
343  }
344 
345  // store the overlap space points.
346  // check that the set isn't empty.
347  if(m_overlap){
348  if (spacepointoverlapCollection->empty())
349  {
350  ATH_MSG_DEBUG( "No overlap space points found" );
351  }
352  else
353  {
354  ATH_MSG_DEBUG( spacepointoverlapCollection->size() <<" overlap space points registered." );
355  }
356  }
357 
358  if(m_cachemode)//Prevent unnecessary atomic counting
359  {
360  m_sctCacheHits += sctCacheCount;
361  m_pixCacheHits += pixCacheCount;
362  }
363 
364  return StatusCode::SUCCESS;
365 
366 }
367 
368 //---------------------------------------------------------------------------
370 {
371  ATH_MSG_INFO( m_numberOfEvents << " events processed" );
372  ATH_MSG_INFO( m_numberOfPixel << " pixel collections processed" );
373  ATH_MSG_INFO( m_numberOfSCT << " sct collections processed" );
374  if(m_cachemode){
375  //These are debug messages because they can be indeterminate in an MT environment and it could
376  //lead to confusing log comparisons.
377  ATH_MSG_DEBUG( m_sctCacheHits << " sct cache hits" );
378  ATH_MSG_DEBUG( m_pixCacheHits << " pix cache hits" );
379  }
380  return StatusCode::SUCCESS;
381 }
382 
383 //--------------------------------------------------------------------------
384 
386  const SiElementPropertiesTable* properties,
387  const InDetDD::SiDetectorElementCollection* elements,
388  SpacePointCollection* spacepointCollection,
389  SpacePointOverlapCollection* spacepointOverlapCollection,
390  SPFCache &r_cache,
391  DataPool<SCT_SpacePoint>* dataItemsSCT) const
392 {
393  // For each trigger element, first evaluate and collect the quantities you need to build the space points.
394  // The detector element array has capacity 6:
395  // [0] is the trigger element
396  // [1] is the opposite element
397  // [2]-[3] are the elements tested for eta overlaps
398  // [4]-[5] are the elements tested for phi overlaps
399  // For each element you save the corresponding cluster collections and the
400  // space point compatibility range as described below.
401  //
402  // For the opposite element and the ones tested for eta overlaps, you have to check
403  // if clusters are compatible with the local position of the trigger cluster
404  // requiring that the distance between the two clusters in phi is withing a specified range.
405  // - For the clusters on the opposite element: [-m_overlapLimitOpposite, m_overlapLimitOpposite]
406  //
407  // - For the eta overlapping clusters : you use m_overlapLimitEtaMin and m_overlapLimitEtaMax
408  // in different combination depending if you are checking a stereo module or not
409  //
410  // For each element, the extremes of these ranges are saved in the overlapExtents array
411  // which is later on used in SiSpacePointMakerTool::fillSCT_SpacePointCollection
412  // - overlapExtents[0], overlapExtents[1] are filled for the opposite element
413  // - overlapExtents[2], overlapExtents[3], overlapExtents[4], overlapExtents[5] are filled for the eta overlapping elements
414  //
415  // For the elements tested for phi overlaps, you have to check
416  // if clusters are compatible with the local position of the trigger cluster.
417  // This needs that the trigger cluster is at the edge of the trigger module:
418  // e.g. -hwidth < locX_trigger < -hwidth+m_overlapLimitPhi (or hwidth-m_overlapLimitPhi < locX_trigger < hwidth)
419  // and that the other cluster is on the compatible edge of its module:
420  // e.g. hwidth-m_overlapLimitPhi < locX_other < hwidth (or -hwidth < locX_other < -hwidth+m_overlapLimitPhi)
421  //
422  // For each element, the extremes of these ranges are saved in the overlapExtents array
423  // which is later on used in SiSpacePointMakerTool::fillSCT_SpacePointCollection
424  // - overlapExtents[6], overlapExtents[7], overlapExtents[10], overlapExtents[11]
425  // overlapExtents[8], overlapExtents[9], overlapExtents[12], overlapExtents[13] are filled for the phi overlapping elements
426 
428 
429  std::array<const SCT_ClusterCollection*, nNeighbours> neighbourClusters{};
430  std::array<const InDetDD::SiDetectorElement*, nNeighbours> neighbourElements{};
431  std::array<double, 14> overlapExtents{};
432 
433  // Get the detector element (and its Identifier) correspoding to the cluster collection
434  IdentifierHash triggerIdHash(sctClusters->identifyHash());
435  const InDetDD::SiDetectorElement *triggerElement = elements->getDetectorElement(triggerIdHash);
436  Identifier thisID = triggerElement->identify();
437 
438  // Retrieve the neighbours of the detector element
439  const std::vector<IdentifierHash>* others(properties->neighbours(triggerIdHash));
440  if (others==nullptr || others->empty() ) return;
441 
442  // Save the current detector element and clusters
443  neighbourElements[0] = triggerElement;
444  neighbourClusters[0] = sctClusters;
445  int n = 0 ;
446 
447  // Default case: you test the opposite element and the overlapping in phi (total 3 elements)
448  int Nmax = 4 ;
449 
450  // In the barrel, test the eta overlaps as well (total 5 elements)
451  if (m_idHelper->is_barrel(thisID)) Nmax = 6;
452 
453  // You can remove all the overlaps if requrested. Here you test only the opposite element
454  if(!m_overlap) Nmax = 2;
455 
456  float hwidth(properties->halfWidth(triggerIdHash));
457 
458  // This flag is use to trigger if the search should be performed.
459  // In case there are no other detector elements and/or cluster collection
460  // this flag stays false.
461  bool search = false;
462 
463  // The order of the elements in others is such that you first get the opposite element,
464  // the overlapping in phi and then the overlapping in eta
465  // For this reason you need to re-order the indices, since the SiSpacePointMakerTool will process
466  // first the eta overlaps and then the phi ones
467  const std::array<size_t, nNeighbours> neigbourIndices{ThisOne, Opposite, EtaMinus, EtaPlus, PhiMinus, PhiPlus};
468 
469  for (const auto& otherHash : *others) {
470 
471  if(++n==Nmax) break;
472  const SCT_ClusterCollection* otherClusters = r_cache.SCTCContainer->indexFindPtr (otherHash);
473  const InDetDD::SiDetectorElement* otherElement = elements ->getDetectorElement(otherHash);
474 
475  if(!otherElement || !otherClusters) continue;
476 
477  neighbourElements[neigbourIndices[n]] = otherElement;
478  neighbourClusters[neigbourIndices[n]] = otherClusters;
479  search = true ;
480 
481  switch (n) {
482  case Opposite: {
483  overlapExtents[ 0] = -m_overlapLimitOpposite;
484  overlapExtents[ 1] = m_overlapLimitOpposite;
485  break;
486  }
487  case PhiMinus: {
488  overlapExtents[ 6] =-hwidth;
489  overlapExtents[ 7] =-hwidth+m_overlapLimitPhi;
490  overlapExtents[ 8] = hwidth-m_overlapLimitPhi;
491  overlapExtents[ 9] = hwidth;
492  break;
493  }
494  case PhiPlus: {
495  overlapExtents[10] = hwidth-m_overlapLimitPhi;
496  overlapExtents[11] = hwidth;
497  overlapExtents[12] =-hwidth;
498  overlapExtents[13] =-hwidth+m_overlapLimitPhi;
499  break;
500  }
501  case EtaMinus: {
502  if ((m_idHelper->layer_disk(thisID) & 1) == 0) {
503  overlapExtents[ 2] = m_overlapLimitEtaMin;
504  overlapExtents[ 3] = m_overlapLimitEtaMax;
505  } else {
506  overlapExtents[ 2] =-m_overlapLimitEtaMax;
507  overlapExtents[ 3] =-m_overlapLimitEtaMin;
508  }
509  break;
510  }
511  default: {
512  if ((m_idHelper->layer_disk(thisID) & 1) == 0) {
513  overlapExtents[ 4] = -m_overlapLimitEtaMax;
514  overlapExtents[ 5] = -m_overlapLimitEtaMin;
515  } else {
516  overlapExtents[ 4] = m_overlapLimitEtaMin;
517  overlapExtents[ 5] = m_overlapLimitEtaMax;
518  }
519  break;
520  }
521  }
522  }
523 
524  if (search) {
525  m_SiSpacePointMakerTool->fillSCT_SpacePointCollection(
526  neighbourElements, neighbourClusters, overlapExtents, m_allClusters,
527  r_cache.vertex, spacepointCollection, spacepointOverlapCollection,
528  dataItemsSCT);
529  }
530 }
531 
532 } //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
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
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
InDet::SiTrackerSpacePointFinder::m_SCTPropertiesKey
SG::ReadCondHandleKey< InDet::SiElementPropertiesTable > m_SCTPropertiesKey
To get SCT neighbours.
Definition: SiTrackerSpacePointFinder.h:157
InDet::SiTrackerSpacePointFinder::m_overlap
bool m_overlap
process all overlapping SCT pairs if true.
Definition: SiTrackerSpacePointFinder.h:201
IdentifiableContainerMT::getWriteHandle
IDC_WriteHandle getWriteHandle(IdentifierHash hash)
Definition: IdentifiableContainerMT.h:251
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:203
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
InDet::SiTrackerSpacePointFinder::m_yVertex
float m_yVertex
Definition: SiTrackerSpacePointFinder.h:228
SG::VarHandleBase::name
const std::string & name() const
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleBase.cxx:75
InDet::SiTrackerSpacePointFinder::m_overlapLimitPhi
float m_overlapLimitPhi
overlap limit for phi-neighbours.
Definition: SiTrackerSpacePointFinder.h:217
InDet
DUMMY Primary Vertex Finder.
Definition: VP1ErrorUtils.h:36
InDet::SiTrackerSpacePointFinder::m_pixCacheHits
std::atomic< int > m_pixCacheHits
Definition: SiTrackerSpacePointFinder.h:243
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:64
skel.it
it
Definition: skel.GENtoEVGEN.py:424
InDet::SiTrackerSpacePointFinder::m_overrideBS
bool m_overrideBS
Definition: SiTrackerSpacePointFinder.h:226
InDet::SiTrackerSpacePointFinder::m_idHelperPixel
const PixelID * m_idHelperPixel
Definition: SiTrackerSpacePointFinder.h:191
SpacePointOverlapCollection
Definition: SpacePointOverlapCollection.h:26
InDet::SiTrackerSpacePointFinder::m_SiSpacePointMakerTool
ToolHandle< SiSpacePointMakerTool > m_SiSpacePointMakerTool
Definition: SiTrackerSpacePointFinder.h:183
InDet::SiTrackerSpacePointFinder::m_zVertex
float m_zVertex
Definition: SiTrackerSpacePointFinder.h:229
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
InDet::SiTrackerSpacePointFinder::m_selectSCTs
bool m_selectSCTs
Definition: SiTrackerSpacePointFinder.h:200
ActsTrk::Opposite
@ Opposite
Definition: StripInformationHelper.h:13
InDet::SiTrackerSpacePointFinder::m_numberOfPixel
std::atomic< int > m_numberOfPixel
Definition: SiTrackerSpacePointFinder.h:240
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:175
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::SPFCache::SCTCContainer
const SCT_ClusterContainer * SCTCContainer
Definition: SiTrackerSpacePointFinder.h:111
python.setupRTTAlg.size
int size
Definition: setupRTTAlg.py:39
InDet::nNeighbours
constexpr size_t nNeighbours
Definition: SiSpacePointMakerTool.h:35
IdentifiableContainerMT::hasExternalCache
virtual bool hasExternalCache() const override final
Definition: IdentifiableContainerMT.h:155
InDet::SiTrackerSpacePointFinder::m_selectPixels
bool m_selectPixels
Definition: SiTrackerSpacePointFinder.h:199
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
Identifier
Definition: DetectorDescription/Identifier/Identifier/Identifier.h:32
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:242
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_useDataPoolWithCache
Gaudi::Property< bool > m_useDataPoolWithCache
Definition: SiTrackerSpacePointFinder.h:204
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_allClusters
bool m_allClusters
process all clusters without limits if true.
Definition: SiTrackerSpacePointFinder.h:202
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:388
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:63
python.JsonUtils.properties
properties
Definition: JsonUtils.py:96
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:241
InDet::SiTrackerSpacePointFinder::m_overlapLimitEtaMin
float m_overlapLimitEtaMin
low overlap limit for eta-neighbours.
Definition: SiTrackerSpacePointFinder.h:218
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:192
InDet::SiTrackerSpacePointFinder::m_overlapLimitEtaMax
float m_overlapLimitEtaMax
high overlap limit for eta-neighbours.
Definition: SiTrackerSpacePointFinder.h:219
SCT_ID::wafer_hash_max
size_type wafer_hash_max(void) const
Definition: SCT_ID.cxx:639
InDet::SiTrackerSpacePointFinder::SiTrackerSpacePointFinder
SiTrackerSpacePointFinder()=delete
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:912
InDet::SiTrackerSpacePointFinder::m_monTool
ToolHandle< GenericMonitoringTool > m_monTool
Definition: SiTrackerSpacePointFinder.h:184
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:125
EventInfo.h
IdentifiableContainerMT::IDC_WriteHandle::addOrDelete
StatusCode addOrDelete(std::unique_ptr< T > ptr)
Definition: IdentifiableContainerMT.h:56
InDet::SiTrackerSpacePointFinder::m_idHelper
const SCT_ID * m_idHelper
Definition: SiTrackerSpacePointFinder.h:192
SG::WriteHandle
Definition: StoreGate/StoreGate/WriteHandle.h:76
InDet::BeamSpotData
Definition: BeamSpotData.h:21
InDet::SiTrackerSpacePointFinder::finalize
virtual StatusCode finalize() override
Definition: SiTrackerSpacePointFinder.cxx:372
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
SpacePointCollection
Definition: SpacePointCollection.h:40
plotBeamSpotMon.mon
mon
Definition: plotBeamSpotMon.py:67
AthCommonMsg< Gaudi::Algorithm >::msg
MsgStream & msg() const
Definition: AthCommonMsg.h:24
InDet::SiTrackerSpacePointFinder::m_xVertex
float m_xVertex
Definition: SiTrackerSpacePointFinder.h:227
DataPool
a typed memory pool that saves time spent allocation small object. This is typically used by containe...
Definition: DataPool.h:47
declareProperty
#define declareProperty(n, p, h)
Definition: BaseFakeBkgTool.cxx:15
python.BuildSignatureFlags.beamSpot
AthConfigFlags beamSpot(AthConfigFlags flags, str instanceName, str recoMode)
Definition: BuildSignatureFlags.py:402
InDet::SiTrackerSpacePointFinder::m_SpacePointCache_PixKey
SG::UpdateHandleKey< SpacePointCache > m_SpacePointCache_PixKey
Definition: SiTrackerSpacePointFinder.h:176
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
Definition: IdentifierHash.h:38
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.
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:239
InDet::SiTrackerSpacePointFinder::m_overlapLimitOpposite
float m_overlapLimitOpposite
overlap limit for opposite-neighbours.
Definition: SiTrackerSpacePointFinder.h:216