ATLAS Offline Software
SimpleTRT_SeededSpacePointFinder_ATL.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 
7 // Implementation file for class TRT_SeededSpacePointFinder_ATL
9 // (c) ATLAS Detector software
11 // Version 1.0 04/2007 Martin Siebel
13 
14 #include <iostream>
15 #include <iomanip>
16 #include <set>
17 #include "GaudiKernel/MsgStream.h"
18 #include "CLHEP/Vector/ThreeVector.h"
19 #include "CLHEP/Units/SystemOfUnits.h"
22 #include "InDetIdentifier/SCT_ID.h"
23 #include "InDetIdentifier/TRT_ID.h"
24 #include "TrkSurfaces/Surface.h"
26 
28 // Constructor
30 
32 (const std::string& t,const std::string& n,const IInterface* p)
33  : AthAlgTool(t,n,p),
34  m_useROI(true),
35  m_maxHoles(1),
36  m_perigeeCut(200),
37  m_directionPhiCut(0.05),
38  m_sctId(nullptr),
39  m_trtId(nullptr)
40 {
41 
42  declareInterface<ITRT_SeededSpacePointFinder>(this);
43 
44  declareProperty("RestrictROI" ,m_useROI );
45  declareProperty("MaxHoles" ,m_maxHoles );
46  declareProperty("PerigeeCut" ,m_perigeeCut );
47  declareProperty("DirectionPhiCut" ,m_directionPhiCut );
48 
49 }
50 
52 // Destructor
54 
56 = default;
57 
59 // Initialisation
61 
63 {
64 
65  // msg().setLevel(outputLevel());
66 
67  // PRD-to-track association (optional)
69 
70  // get region selector
71  StatusCode sc = m_pRegionSelector.retrieve();
72  if( sc.isFailure() )
73  {
74  msg(MSG::FATAL) << "Failed to retrieve RegionSelector Service";
75  return sc;
76  }
77 
78  sc = detStore()->retrieve(m_sctId, "SCT_ID");
79  if (sc.isFailure())
80  {
81  msg(MSG::ERROR) << "Could not get SCT_ID helper !" << endmsg;
82  return StatusCode::FAILURE;
83  }
84 
85  sc = detStore()->retrieve(m_trtId, "TRT_ID");
86  if (sc.isFailure())
87  {
88  msg(MSG::ERROR) << "Could not get TRT_ID helper !" << endmsg;
89  return StatusCode::FAILURE;
90  }
91 
93 
96 
97  return sc;
98 }
99 
101 // Finalize
103 
105 {
107  return sc;
108 }
109 //============================================================================================
110 
112 // Initialize tool for new region
114 
115 std::unique_ptr<InDet::ITRT_SeededSpacePointFinder::IEventData> InDet::SimpleTRT_SeededSpacePointFinder_ATL::newRegion
116 (const std::vector<IdentifierHash>& /*vPixel*/, const std::vector<IdentifierHash>& /*vSCT*/) const
117 {
118  return {};
119 }
120 
121 std::list<std::pair<const Trk::SpacePoint*, const Trk::SpacePoint*> >
123  const Trk::TrackParameters& directionTRT,
125 {
146  msg(MSG::VERBOSE) << "Enter getListOfSpacePointPairs, TrackParameter given is: " << endmsg;
147  msg(MSG::VERBOSE) << directionTRT << endmsg;
148 
149  // clear output buffer
150 
151  std::list<std::pair<const Trk::SpacePoint*, const Trk::SpacePoint*> > listOfSpacePointPairsBuffer;
152 
153  // IdHash in ROI
154  std::set<IdentifierHash> setOfSCT_Hashes;
155 
156  if (m_useROI)
157  {
158  // fill IdHashes in ROI
159  getHashesInROI(directionTRT,setOfSCT_Hashes);
160  msg(MSG::VERBOSE) << "Retrieved " << setOfSCT_Hashes.size() << " potentially interesting detector elements." << endmsg;
161  }
162 
163  if ( !m_useROI || !setOfSCT_Hashes.empty())
164  {
165  // map of < SCT layer number, SP* >
166  std::multimap<int,const Trk::SpacePoint*> relevantSpacePoints;
167 
168  // fill the map of relevant SP as defined by hashes from ROI
169  int modulTRT = TRT_Module(directionTRT);
170  getSpacePointsInROI(ctx, setOfSCT_Hashes, modulTRT, relevantSpacePoints);
171 
172  msg(MSG::VERBOSE) << "Retrieved " << relevantSpacePoints.size() << " potentially interesting SpacePoints" << endmsg;
173 
174  // build pairs of the relevant SP according to the look-up table
175  combineSpacePoints(relevantSpacePoints, directionTRT, modulTRT, listOfSpacePointPairsBuffer);
176 
177  /* output for debug purposes, deactivated now. Once development is finished, it will be removed.
178  */
179  Amg::Vector3D r0 = directionTRT.position();
180  const Amg::Vector3D& v0(directionTRT.momentum());
181  msg(MSG::VERBOSE) << "------------------------------------------------------------------------------------------" << endmsg;
182  msg(MSG::VERBOSE) << "Final SpacePoint pairs: " << listOfSpacePointPairsBuffer.size() << endmsg;
183  msg(MSG::VERBOSE) << " Position of initial vector: ( " << r0.x() << ", " << r0.y() << ", "<< r0.z() << " ) " << endmsg;
184  msg(MSG::VERBOSE) << " Direction of initial vector: ( " << v0.unit().x() << ", " << v0.unit().y() << ", "<< v0.unit().z() << " ) , phi = "
185  << v0.phi() << " theta = " << v0.theta() << " eta = "<< v0.eta() << endmsg;
186  msg(MSG::VERBOSE) << "------------------------------------------------------------------------------------------" << endmsg;
187  msg(MSG::VERBOSE) << " Direction of space Point vectors: "<< endmsg;
188  msg(MSG::VERBOSE) << ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . " << endmsg;
189  for (auto & it : listOfSpacePointPairsBuffer)
190  {
191  Amg::Vector3D s1 = it.first->globalPosition();
192  Amg::Vector3D s2 = it.second->globalPosition();
193  Amg::Vector3D s1s2 = s2-s1; // vector from s1 to s2
194  msg(MSG::VERBOSE) << " Positions: ( " << s1.x() << " , "<< s1.y() << " , "<< s1.z() << " ) " << endmsg;
195  msg(MSG::VERBOSE) << " ( " << s2.x() << " , "<< s2.y() << " , "<< s2.z() << " ) " << endmsg;
196  msg(MSG::VERBOSE) << " direction: ( "
197  << s1s2.unit().x() << ", " << s1s2.unit().y() << ", " << s1s2.unit().z() <<" ) , phi = "
198  << s1s2.phi() << " theta = " << s1s2.theta() << " eta = "<< s1s2.eta() << endmsg;
199  msg(MSG::VERBOSE) << ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . " << endmsg;
200  }
201  msg(MSG::VERBOSE) << "------------------------------------------------------------------------------------------" << endmsg;
202  }
203 
204  return listOfSpacePointPairsBuffer;
205 }
206 
207 //=====================================================================================================
208 
209 void InDet::SimpleTRT_SeededSpacePointFinder_ATL::getHashesInROI(const Trk::TrackParameters& directionTRT, std::set<IdentifierHash>& setOfSCT_Hashes) const
210 {
217  //double eta = directionTRT.eta();
218  //double phi = directionTRT.position().phi();
219  double phi = directionTRT.parameters()[Trk::phi];
220  double eta = directionTRT.position().eta();
221  double deltaPhi = 0.;
222  double deltaEta = 0.;
223 
224  // define tolerance for ROI
225  //getSearchRange(directionTRT, deltaPhi, deltaEta);
227 
228  // retrieve SCT hashes in Region of interest
229  std::vector<IdentifierHash> listOfSCT_Hashes;
230 
233 
234  m_pRegionSelector->HashIDList( roi, listOfSCT_Hashes );
235 
236  // copy Hashes into Set to be able to search them
237  for (auto listOfSCT_Hashe : listOfSCT_Hashes)
238  setOfSCT_Hashes.insert(listOfSCT_Hashe);
239 }
240 
241 //=====================================================================================================
242 
244  std::set<IdentifierHash>& setOfSCT_Hashes,
245  int modulTRT, std::multimap<int,
246  const Trk::SpacePoint*>& relevantSpacePoints) const
247 {
265  const std::set<IdentifierHash>::const_iterator endSCT_Hashes = setOfSCT_Hashes.end();
266 
267  SG::ReadHandle<Trk::PRDtoTrackMap> prd_to_track_map;
268  const Trk::PRDtoTrackMap *prd_to_track_map_cptr = nullptr;
269  if (!m_prdToTrackMap.key().empty()) {
271  if (!prd_to_track_map.isValid()) {
272  ATH_MSG_ERROR("Failed to read PRD to track association map: " << m_prdToTrackMap.key());
273  }
274  prd_to_track_map_cptr = prd_to_track_map.cptr();
275  }
276 
277  // retrieve SP Container
279  if(spacepointsSCT.isValid())
280  {
281  // loop over SP collections in SP container
282  SpacePointContainer::const_iterator itCont = spacepointsSCT->begin();
283  SpacePointContainer::const_iterator endCont = spacepointsSCT->end ();
284  for(; itCont != endCont; ++itCont)
285  {
286  bool acceptCollection = true;
287 
288  if (m_useROI)
289  {
290  // Check if IdHash of the Collection is in the list of ROI hashes
291  IdentifierHash idHash = (*itCont)->identifyHash();
292  acceptCollection = ( idHash.is_valid() && setOfSCT_Hashes.find( idHash ) != endSCT_Hashes );
293  }
294 
295  int SCT_LayerNumber = -99;
296  if (acceptCollection)
297  {
298  // check if the module is on a relevant layer
299  Identifier id = (*itCont)->identify();
300  int detRegionIndex = m_sctId->barrel_ec(id) ;
301  if ( detRegionIndex == -2 || detRegionIndex == 0 || detRegionIndex == 2 )
302  {
303  // conversion factors for layer numbering
304  int detLayerOffset = 1;
305  int detLayerSign = 1;
306  if (detRegionIndex == 0) detLayerOffset = 10;
307  if (detRegionIndex == -2) detLayerSign = -1;
308 
309  // retrieve layer number from IdHelper
310  int detLayerIndex = m_sctId->layer_disk(id);
311  SCT_LayerNumber = detLayerSign*(detLayerIndex+detLayerOffset);
312  }
313  else
314  {
315  msg(MSG::VERBOSE) << "detRegionIndex " << detRegionIndex << " recieved. " << endmsg;
316  acceptCollection = false;
317  }
318  }
319 
320  if (acceptCollection)
321  {
322  if (modulTRT > -14 && modulTRT < 15 )
323  {
324  std::set<int>::const_iterator pos = m_modulLookupTableIndex[modulTRT+SIMPLE_TRT_INDEX_OFFSET].find(SCT_LayerNumber);
325  if ( pos == m_modulLookupTableIndex[modulTRT+SIMPLE_TRT_INDEX_OFFSET].end() ) acceptCollection = false;
326  }
327  else
328  {
329  msg(MSG::WARNING) << "Received TRTmodul number " << modulTRT << endmsg;
330  acceptCollection = false;
331  }
332  }
333 
334  if (acceptCollection)
335  {
336  // Loop over SP Collection and add SP if they are not yet used (or if this does not matter).
337  SpacePointCollection::const_iterator itColl = (*itCont)->begin();
338  SpacePointCollection::const_iterator endColl = (*itCont)->end ();
339  for(; itColl != endColl; ++itColl)
340  if ( !prd_to_track_map_cptr
341  || !( prd_to_track_map_cptr->isUsed(*((*itColl)->clusterList().first))
342  || prd_to_track_map_cptr->isUsed(*((*itColl)->clusterList().second)) ) )
343  {
344  relevantSpacePoints.insert(std::make_pair( SCT_LayerNumber ,*itColl));
345  msg(MSG::VERBOSE) << "Added SpacePoint for layer " << SCT_LayerNumber << " at ( "
346  << (*itColl)->globalPosition().x() << " , "
347  << (*itColl)->globalPosition().y() << " , "
348  << (*itColl)->globalPosition().z() << " ) " << endmsg;
349  }
350  }
351  }
352  }
353 
354  // retrieve the overlap collection
356  if(spacepointsOverlap.isValid())
357  {
358 
359  // Loop over Overlap SP
360  SpacePointOverlapCollection::const_iterator itColl = spacepointsOverlap->begin();
361  SpacePointOverlapCollection::const_iterator endColl = spacepointsOverlap->end ();
362  for (; itColl != endColl; ++itColl)
363  {
364  // check if SP is in ROI
365  std::pair<IdentifierHash, IdentifierHash> idHashPair = (*itColl)->elementIdList();
366  if ( !m_useROI
367  || (idHashPair.first.is_valid() && setOfSCT_Hashes.find( idHashPair.first ) != endSCT_Hashes)
368  || (idHashPair.second.is_valid() && setOfSCT_Hashes.find( idHashPair.second ) != endSCT_Hashes) )
369  {
370 
371  // find out if one of the Clusters has already been used, if relevant
372  if(prd_to_track_map_cptr)
373  {
374  bool u1=false;
375  bool u2=false;
376  const Trk::PrepRawData* p1=(*itColl)->clusterList().first;
377  u1=prd_to_track_map->isUsed(*p1);
378  const Trk::PrepRawData* p2=(*itColl)->clusterList().second;
379  u2=prd_to_track_map->isUsed(*p2);
380  if(u1 || u2) continue;
381  }
382 
383  // retrieve identifier and fill SP in SP buffer.
384  Identifier id = (*itColl)->associatedSurface().associatedDetectorElementIdentifier();
385  if ( id.is_valid() )
386  {
387  int detRegionIndex = m_sctId->barrel_ec(id) ;
388  if ( detRegionIndex == -2 || detRegionIndex == 0 || detRegionIndex == 2 )
389  {
390  int detLayerOffset = 1;
391  int detLayerSign = 1;
392  if (detRegionIndex == 0) detLayerOffset = 10;
393  if (detRegionIndex == -2) detLayerSign = -1;
394  int detLayerIndex = m_sctId->layer_disk(id);
395 
396  relevantSpacePoints.insert(std::make_pair(detLayerSign*(detLayerIndex+detLayerOffset),*itColl));
397  msg(MSG::VERBOSE) << "Added OverlapSpacePoint for layer " << detLayerSign*(detLayerIndex+detLayerOffset) << " at ( "
398  << (*itColl)->globalPosition().x() << " , "
399  << (*itColl)->globalPosition().y() << " , "
400  << (*itColl)->globalPosition().z() << " ) " << endmsg;
401  }
402  else
403  msg(MSG::VERBOSE) << "detRegionIndex " << detRegionIndex << " recieved. " << endmsg;
404  }
405  else
406  msg(MSG::DEBUG) << "Invalid Id from OverlapCollection recieved. " << endmsg;
407  }
408  }
409  }
410 }
411 
412 
413 //=====================================================================================================
414 
415 //void InDet::SimpleTRT_SeededSpacePointFinder_ATL::getSearchRange(const Trk::TrackParameters& directionTRT, double& deltaPhi, double& deltaEta)
417 {
423  // first guess: the ROI tolerance is constant
424  deltaPhi = 0.05;
425  deltaEta = .2;
426 }
427 
428 //=====================================================================================================
429 
430 void InDet::SimpleTRT_SeededSpacePointFinder_ATL::combineSpacePoints(const std::multimap<int,const Trk::SpacePoint*>& relevantSpacePoints,
431  const Trk::TrackParameters& directionTRT, int modulNumber,
432  std::list<std::pair<const Trk::SpacePoint*, const Trk::SpacePoint*> > &listOfSpacePointPairsBuffer) const
433 {
446  if ( modulNumber+SIMPLE_TRT_INDEX_OFFSET < 29 && -1 < modulNumber+SIMPLE_TRT_INDEX_OFFSET)
447  {
448  modulLookupTable::const_iterator itTable = m_modulLookupTable[modulNumber+SIMPLE_TRT_INDEX_OFFSET].begin();
449  modulLookupTable::const_iterator endTable = m_modulLookupTable[modulNumber+SIMPLE_TRT_INDEX_OFFSET].end();
450  for ( ; itTable != endTable ; ++itTable)
451  {
452  msg(MSG::VERBOSE) << " Combining Space Poinst from modules " << itTable->first << " and " << itTable->second << endmsg;
453  // SPs from SCT layer 1
454  std::pair< std::multimap<int,const Trk::SpacePoint*>::const_iterator,
455  std::multimap<int,const Trk::SpacePoint*>::const_iterator >
456  range1 = relevantSpacePoints.equal_range(itTable->first);
457  // if (range1.second != relevantSpacePoints.end() ) ++(range1.second); // transforming the 2nd pointer to an end of range
458 
459  //SPs from SCT layer 2
460  std::pair< std::multimap<int,const Trk::SpacePoint*>::const_iterator,
461  std::multimap<int,const Trk::SpacePoint*>::const_iterator >
462  range2 = relevantSpacePoints.equal_range(itTable->second);
463  // if (range2.second != relevantSpacePoints.end() ) ++(range2.second); // transforming the 2nd pointer to an end of range
464 
465  // add the SP pairs
466  for ( std::multimap<int,const Trk::SpacePoint*>::const_iterator it1 = range1.first;
467  it1 != range1.second ; ++it1 )
468  for ( std::multimap<int,const Trk::SpacePoint*>::const_iterator it2 = range2.first;
469  it2 != range2.second ; ++it2 )
470  if ( pairIsOk(it1->second,it2->second,directionTRT) )
471  listOfSpacePointPairsBuffer.emplace_back(it2->second,it1->second);
472 
473  }
474  }
475  else
476  msg(MSG::WARNING) << "TRT module not in look-up table --> no SP pairs formed" << endmsg;
477 
478 }
479 //=====================================================================================================
480 
482 {
494  //Amg::Vector3D r0 = directionTRT.position();
495  const Amg::Vector3D& v0(directionTRT.momentum());
496  Amg::Vector3D s1s2 = s2-s1; // vector from s1 to s2
497 
498  msg(MSG::VERBOSE) << "Checking Space Point Pair at ( "<< s1.x() << ", " << s1.y() << ", " << s1.z()
499  << " ) and ( "<< s2.x() << ", " << s2.y() << ", " << s2.z() << " )" << endmsg;
500 
501  // Cut on closest approach to z-axis
502  double t = ( s1.x()-s2.x() )*( s1.x()-s2.x() ) + ( s1.y()-s2.y() )*( s1.y()-s2.y() ) ;
503  if (t)
504  {
505  t = ( s1.x()*(s2.x()-s1.x()) + s1.y()*(s2.y()-s1.y()) ) / t;
506  Amg::Vector3D perigee = s1 + t*(s1-s2);
507  msg(MSG::VERBOSE) << " closest approach to beam-pipe at ( "<< perigee.x() << ", " << perigee.y() << ", " << perigee.z() << " ) transversal: " << perigee.perp()<<endmsg;
508  if (perigee.perp() > m_perigeeCut ) return false;
509  }
510  msg(MSG::VERBOSE) << " Passed cut on r-phi impact parameter" <<endmsg;
511 
512 
513  // Cut on angle between s1-s2 and parameter direction
514  double diffPhi= std::abs(s1s2.phi()-v0.phi());
515 
516  if (diffPhi > CLHEP::pi ) diffPhi = 2.*CLHEP::pi - diffPhi;
517  if (diffPhi > CLHEP::pi/2. ) diffPhi = CLHEP::pi - diffPhi;
518  msg(MSG::VERBOSE) << "Phi directions differ by "<< diffPhi << endmsg;
519  if ( diffPhi > m_directionPhiCut ) return false;
520 
521  msg(MSG::VERBOSE) << " Passed cut on direction phi deviation" <<endmsg;
522 
523  return true;
524 }
525 //=====================================================================================================
527 {
563  m_modulLookupTable[0+SIMPLE_TRT_INDEX_OFFSET].emplace_back(12,13);
564  if (m_maxHoles > 0 )
565  {
566  m_modulLookupTable[0+SIMPLE_TRT_INDEX_OFFSET].emplace_back(11,12);
567  m_modulLookupTable[0+SIMPLE_TRT_INDEX_OFFSET].emplace_back(11,13);
568  m_modulLookupTable[0+SIMPLE_TRT_INDEX_OFFSET].emplace_back(10,12);
569  }
570  if (m_maxHoles > 1 )
571  {
572  m_modulLookupTable[0+SIMPLE_TRT_INDEX_OFFSET].emplace_back(10,13);
573  m_modulLookupTable[0+SIMPLE_TRT_INDEX_OFFSET].emplace_back(10,11);
574  }
575 
576  m_modulLookupTable[1+SIMPLE_TRT_INDEX_OFFSET].emplace_back(12,13);
577  m_modulLookupTable[1+SIMPLE_TRT_INDEX_OFFSET].emplace_back(11,12);
578  m_modulLookupTable[1+SIMPLE_TRT_INDEX_OFFSET].emplace_back(10,11);
579  m_modulLookupTable[1+SIMPLE_TRT_INDEX_OFFSET].emplace_back(13,1);
580  m_modulLookupTable[1+SIMPLE_TRT_INDEX_OFFSET].emplace_back(12,1);
581  m_modulLookupTable[1+SIMPLE_TRT_INDEX_OFFSET].emplace_back(11,1);
582  m_modulLookupTable[1+SIMPLE_TRT_INDEX_OFFSET].emplace_back(10,1);
583  m_modulLookupTable[1+SIMPLE_TRT_INDEX_OFFSET].emplace_back(1,2);
584  if (m_maxHoles > 0 )
585  {
586  m_modulLookupTable[1+SIMPLE_TRT_INDEX_OFFSET].emplace_back(11,13);
587  m_modulLookupTable[1+SIMPLE_TRT_INDEX_OFFSET].emplace_back(10,12);
588  m_modulLookupTable[1+SIMPLE_TRT_INDEX_OFFSET].emplace_back(13,2);
589  m_modulLookupTable[1+SIMPLE_TRT_INDEX_OFFSET].emplace_back(12,2);
590  m_modulLookupTable[1+SIMPLE_TRT_INDEX_OFFSET].emplace_back(11,2);
591  m_modulLookupTable[1+SIMPLE_TRT_INDEX_OFFSET].emplace_back(10,2);
592  }
593  if (m_maxHoles > 1 )
594  {
595  m_modulLookupTable[1+SIMPLE_TRT_INDEX_OFFSET].emplace_back(10,13);
596  }
597 
598  // TRT wheels 2 and 3
599  for (int i = 2; i<4 ; ++ i)
600  {
601  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(12,13);
602  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(13,1);
603  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(12,1);
604  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(11,1);
605  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(10,1);
606  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(1,2);
607  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(2,3);
608  if (m_maxHoles > 0 )
609  {
610  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(11,12);
611  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(13,2);
612  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(12,2);
613  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(11,2);
614  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(10,2);
615  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(1,3);
616  }
617  if (m_maxHoles > 1 )
618  {
619  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(10,11);
620  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(10,12);
621  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(13,3);
622  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(12,3);
623  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(11,3);
624  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(10,3);
625  }
626  }
627 
628  // TRT wheels 4 - 6
629  for (int i = 4 ; i < 7 ; ++i )
630  {
631  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(12,13);
632  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(13,1);
633  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(12,1);
634  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(11,1);
635  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(10,1);
636  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(1,2);
637  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(2,3);
638  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(3,4);
639  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(4,5);
640  if (m_maxHoles > 0 )
641  {
642  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(11,13);
643  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(11,12);
644  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(13,2);
645  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(12,2);
646  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(11,2);
647  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(10,2);
648  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(1,3);
649  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(2,4);
650  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(3,5);
651  }
652  if (m_maxHoles > 1 )
653  {
654  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(13,3);
655  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(12,3);
656  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(11,3);
657  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(10,3);
658  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(1,4);
659  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(2,5);
660  }
661  }
662 
663 
664  // TRT wheels 7 - 9
665  for ( int i = 7 ; i < 10 ; ++i)
666  {
667  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(2,3);
668  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(3,4);
669  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(4,5);
670  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(5,6);
671  if (m_maxHoles > 0 )
672  {
673  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(1,2);
674  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(1,3);
675  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(2,4);
676  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(3,5);
677  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(4,6);
678  }
679  if (m_maxHoles > 1 )
680  {
681  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(13,3);
682  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(12,3);
683  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(1,4);
684  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(2,5);
685  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(3,6);
686  }
687  }
688 
689 
690  // TRT wheels 10 - 12
691  for (int i = 10 ; i < 13 ; ++i )
692  {
693  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(4,5);
694  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(5,6);
695  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(6,7);
696  if (m_maxHoles > 0 )
697  {
698  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(3,4);
699  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(3,5);
700  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(4,6);
701  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(5,7);
702  }
703  if (m_maxHoles > 1 )
704  {
705  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(2,3);
706  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(2,4);
707  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(2,5);
708  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(3,6);
709  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(4,7);
710  }
711  }
712 
713 
714  // TRT - wheels 13 and 14
715  for (int i = 13 ; i < 15 ; ++i )
716  {
717  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(5,6);
718  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(6,7);
719  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(7,8);
720  if (m_maxHoles > 0 )
721  {
722  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(4,5);
723  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(4,6);
724  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(5,7);
725  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(6,8);
726  }
727  if (m_maxHoles > 0 )
728  {
729  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(3,4);
730  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(3,5);
731  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(3,6);
732  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(4,7);
733  m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].emplace_back(5,8);
734  }
735  }
736 
737 
738  // mirror the endcap information
739  for ( int iTable = 1 ; iTable < 15 ; ++iTable )
740  {
741  std::list<std::pair<int,int> >::const_iterator itList = m_modulLookupTable[iTable+SIMPLE_TRT_INDEX_OFFSET].begin();
742  std::list<std::pair<int,int> >::const_iterator endList = m_modulLookupTable[iTable+SIMPLE_TRT_INDEX_OFFSET].end();
743  for ( ; itList != endList ; ++itList )
744  {
745  int i = itList->first;
746  int j = itList->second;
747  if (i<10) i*=-1; // don't change the sign of the barrel modules...
748  if (j<10) j*=-1;
750  }
751  }
752 
753  // fill the short index for the lookup table
754  for ( int iTable = -14 ; iTable < 15 ; ++iTable )
755  {
756  std::list<std::pair<int,int> >::const_iterator itList = m_modulLookupTable[iTable+SIMPLE_TRT_INDEX_OFFSET].begin();
757  std::list<std::pair<int,int> >::const_iterator endList = m_modulLookupTable[iTable+SIMPLE_TRT_INDEX_OFFSET].end();
758  for ( ; itList != endList ; ++itList )
759  {
762  }
763  }
764 
766 
767 }
768 
769 //=====================================================================================================
770 
772 {
773  out << "to be implemented soon..." << std::endl;
774 
775  return out;
776 }
777 //=====================================================================================================
778 
779 std::ostream& InDet::SimpleTRT_SeededSpacePointFinder_ATL::dump( std::ostream& out ) const
780 {
781  out << "to be implemented soon..." << std::endl;
782  return out;
783 }
784 
785 
786 //=====================================================================================================
787 
789 {
793  msg(MSG::VERBOSE) << "=====================================================================================================================" << endmsg;
794  msg(MSG::VERBOSE) << " Module Lookup table: " << endmsg;
795  msg(MSG::VERBOSE) << "---------------------------------------------------------------------------------------------------------------------" << endmsg;
796  for (int i = -14; i<15 ; ++i)
797  {
798  msg(MSG::VERBOSE) << "Module "<< i << " : " << endmsg;
799  std::list<std::pair<int,int> >::const_iterator itList = m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].begin();
800  std::list<std::pair<int,int> >::const_iterator endList = m_modulLookupTable[i+SIMPLE_TRT_INDEX_OFFSET].end();
801  for ( ; itList != endList ; ++itList )
802  msg(MSG::VERBOSE) << " (" << itList->first << ", " << itList->second << ") " ;
803  msg(MSG::VERBOSE) << " " << endmsg;
804  std::set<int>::const_iterator itIndex = m_modulLookupTableIndex[i+SIMPLE_TRT_INDEX_OFFSET].begin();
805  std::set<int>::const_iterator endIndex = m_modulLookupTableIndex[i+SIMPLE_TRT_INDEX_OFFSET].end();
806  msg(MSG::VERBOSE) << "Needs Layers: { " ;
807  for ( ; itIndex != endIndex ; ++ itIndex )
808  msg(MSG::VERBOSE) << *itIndex << ", " ;
809  msg(MSG::VERBOSE) << " } " << endmsg;
810  msg(MSG::VERBOSE) << "...................................................................................................................." << endmsg;
811 
812  }
813  msg(MSG::VERBOSE) << "=====================================================================================================================" << endmsg;
814 
815 }
816 
817 //=====================================================================================================
818 
820 {
825  // find out from which SCT part the segment is built
826  Identifier id ;
827 
829 
830  if (!id.is_valid())
831  {
832  msg(MSG::WARNING) << " Id not valid "<<endmsg;
833  return -999;
834  }
835  int modulNumber;
836  int detRegionIndex = m_trtId->barrel_ec(id) ;
837  if ( detRegionIndex == -1 || detRegionIndex == 1 )
838  modulNumber = 0; // central TRT
839  else if ( detRegionIndex == -2 || detRegionIndex == 2 )
840  {
841  modulNumber = m_trtId->layer_or_wheel(id) + 1 ; // forward/bachward wheels
842  modulNumber *= (detRegionIndex/2) ; // add sign to distinguish forward and backward
843  }
844  else
845  {
846  msg(MSG::WARNING) << "TRT barrel-endcap id not in {-2;-1;1;2}" << endmsg;
847  return -999;
848  }
849 
850  return modulNumber;
851 
852 }
Trk::SpacePoint
Definition: Tracking/TrkEvent/TrkSpacePoint/TrkSpacePoint/SpacePoint.h:35
InDet::SimpleTRT_SeededSpacePointFinder_ATL::setupLookUpTable
void setupLookUpTable()
the name says it
Definition: SimpleTRT_SeededSpacePointFinder_ATL.cxx:526
ReadCellNoiseFromCoolCompare.s1
s1
Definition: ReadCellNoiseFromCoolCompare.py:378
beamspotnt.iTable
int iTable
Definition: bin/beamspotnt.py:1282
InDet::SimpleTRT_SeededSpacePointFinder_ATL::m_directionPhiCut
double m_directionPhiCut
Definition: SimpleTRT_SeededSpacePointFinder_ATL.h:101
python.tests.PyTestsLib.finalize
def finalize(self)
_info( "content of StoreGate..." ) self.sg.dump()
Definition: PyTestsLib.py:53
DataModel_detail::const_iterator
Const iterator class for DataVector/DataList.
Definition: DVLIterator.h:82
SCT_ID.h
This is an Identifier helper class for the SCT subdetector. This class is a factory for creating comp...
InDet::SimpleTRT_SeededSpacePointFinder_ATL::TRT_Module
int TRT_Module(const Trk::TrackParameters &directionTRT) const
returns the number of the TRT wheel or barrel where the TP belongs to
Definition: SimpleTRT_SeededSpacePointFinder_ATL.cxx:819
python.PerfMonSerializer.p
def p
Definition: PerfMonSerializer.py:743
InDet::ITRT_SeededSpacePointFinder::IEventData
Definition: ITRT_SeededSpacePointFinder.h:51
InDet::SimpleTRT_SeededSpacePointFinder_ATL::newRegion
virtual std::unique_ptr< InDet::ITRT_SeededSpacePointFinder::IEventData > newRegion(const std::vector< IdentifierHash > &, const std::vector< IdentifierHash > &) const override
Definition: SimpleTRT_SeededSpacePointFinder_ATL.cxx:116
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:64
python.Constants.FATAL
int FATAL
Definition: Control/AthenaCommon/python/Constants.py:19
SG::ReadHandle::cptr
const_pointer_type cptr()
Dereference the pointer.
Surface.h
Trk::SpacePoint::globalPosition
virtual const Amg::Vector3D & globalPosition() const override final
Interface method to get the global Position.
Definition: Tracking/TrkEvent/TrkSpacePoint/TrkSpacePoint/SpacePoint.h:146
eta
Scalar eta() const
pseudorapidity method
Definition: AmgMatrixBasePlugin.h:79
Trk::ParametersBase::position
const Amg::Vector3D & position() const
Access method for the position.
Trk::PRDtoTrackMap
Definition: PRDtoTrackMap.h:17
SG::ReadHandle< Trk::PRDtoTrackMap >
InDet::SimpleTRT_SeededSpacePointFinder_ATL::getSpacePointsInROI
void getSpacePointsInROI(const EventContext &ctx, std::set< IdentifierHash > &setOfSCT_Hashes, int modulTRT, std::multimap< int, const Trk::SpacePoint * > &relevantSpacePoints) const
retrieves SP Collections of modules in the ROI and sorts them by SCT layer
Definition: SimpleTRT_SeededSpacePointFinder_ATL.cxx:243
Trk::ParametersBase::associatedSurface
virtual const Surface & associatedSurface() const override=0
Access to the Surface associated to the Parameters.
AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
xAOD::deltaPhi
setSAddress setEtaMS setDirPhiMS setDirZMS setBarrelRadius setEndcapAlpha setEndcapRadius setInterceptInner setEtaMap setEtaBin setIsTgcFailure setDeltaPt deltaPhi
Definition: L2StandAloneMuon_v1.cxx:160
InDet::SimpleTRT_SeededSpacePointFinder_ATL::~SimpleTRT_SeededSpacePointFinder_ATL
virtual ~SimpleTRT_SeededSpacePointFinder_ATL()
SIMPLE_TRT_INDEX_OFFSET
#define SIMPLE_TRT_INDEX_OFFSET
Definition: SimpleTRT_SeededSpacePointFinder_ATL.h:18
Trk::Surface::associatedDetectorElementIdentifier
Identifier associatedDetectorElementIdentifier() const
return Identifier of the associated Detector Element
InDet::SimpleTRT_SeededSpacePointFinder_ATL::getSearchRange
static void getSearchRange(double &deltaPhi, double &deltaEta)
List with SP pairs as seed for the Si part of the back-track.
Definition: SimpleTRT_SeededSpacePointFinder_ATL.cxx:416
skel.it
it
Definition: skel.GENtoEVGEN.py:423
TRT_ID.h
This is an Identifier helper class for the TRT subdetector. This class is a factory for creating comp...
python.AthDsoLogger.out
out
Definition: AthDsoLogger.py:71
InDet::SimpleTRT_SeededSpacePointFinder_ATL::combineSpacePoints
void combineSpacePoints(const std::multimap< int, const Trk::SpacePoint * > &relevantSpacePoints, const Trk::TrackParameters &directionTRT, int modulTRT, std::list< std::pair< const Trk::SpacePoint *, const Trk::SpacePoint * > > &listOfSpacePointPairsBuffer) const
builds pairs of SP according to the kook-up table
Definition: SimpleTRT_SeededSpacePointFinder_ATL.cxx:430
SCT_ID::barrel_ec
int barrel_ec(const Identifier &id) const
Values of different levels (failure returns 0)
Definition: SCT_ID.h:728
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
InDet::SimpleTRT_SeededSpacePointFinder_ATL::m_useROI
bool m_useROI
Controls, if SP have to be checked with the AssociationTool of the forward tracking and to avoid doub...
Definition: SimpleTRT_SeededSpacePointFinder_ATL.h:90
SG::VarHandleKey::key
const std::string & key() const
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:141
InDet::SimpleTRT_SeededSpacePointFinder_ATL::m_spacepointsOverlapname
SG::ReadHandleKey< SpacePointOverlapCollection > m_spacepointsOverlapname
Definition: SimpleTRT_SeededSpacePointFinder_ATL.h:110
pi
#define pi
Definition: TileMuonFitter.cxx:65
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
mergePhysValFiles.end
end
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:93
AthCommonDataStore< AthCommonMsg< AlgTool > >::detStore
const ServiceHandle< StoreGateSvc > & detStore() const
The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:95
InDet::SimpleTRT_SeededSpacePointFinder_ATL::finalize
virtual StatusCode finalize() override
Definition: SimpleTRT_SeededSpacePointFinder_ATL.cxx:104
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
P4Helpers::deltaEta
double deltaEta(const I4Momentum &p1, const I4Momentum &p2)
Computes efficiently .
Definition: P4Helpers.h:53
parseMapping.v0
def v0
Definition: parseMapping.py:149
lumiFormat.i
int i
Definition: lumiFormat.py:92
InDet::SimpleTRT_SeededSpacePointFinder_ATL::printLookupTable
void printLookupTable() const
Definition: SimpleTRT_SeededSpacePointFinder_ATL.cxx:788
InDet::SimpleTRT_SeededSpacePointFinder_ATL::SimpleTRT_SeededSpacePointFinder_ATL
SimpleTRT_SeededSpacePointFinder_ATL(const std::string &, const std::string &, const IInterface *)
Definition: SimpleTRT_SeededSpacePointFinder_ATL.cxx:32
Identifier
Definition: DetectorDescription/Identifier/Identifier/Identifier.h:32
beamspotman.n
n
Definition: beamspotman.py:731
InDet::SimpleTRT_SeededSpacePointFinder_ATL::m_pRegionSelector
ToolHandle< IRegSelTool > m_pRegionSelector
Region Selector.
Definition: SimpleTRT_SeededSpacePointFinder_ATL.h:121
DetDescrDictionaryDict::it1
std::vector< HWIdentifier >::iterator it1
Definition: DetDescrDictionaryDict.h:17
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
SpacePointCLASS_DEF.h
RoiDescriptor.h
TRT_PAI_physicsConstants::r0
const double r0
electron radius{cm}
Definition: TRT_PAI_physicsConstants.h:20
InDet::SimpleTRT_SeededSpacePointFinder_ATL::getHashesInROI
void getHashesInROI(const Trk::TrackParameters &directionTRT, std::set< IdentifierHash > &setOfSCT_Hashes) const
obtains the hashes of modules in the ROI
Definition: SimpleTRT_SeededSpacePointFinder_ATL.cxx:209
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
IdentifiableContainerMT::end
const_iterator end() const
return const_iterator for end of container
Definition: IdentifiableContainerMT.h:242
RoiDescriptor
Describes the Region of Ineterest geometry It has basically 9 parameters.
Definition: RoiDescriptor.h:40
histSizes.list
def list(name, path='/')
Definition: histSizes.py:38
IdentifiableContainerMT::const_iterator
Definition: IdentifiableContainerMT.h:82
Trk::ParametersBase
Definition: ParametersBase.h:55
IdentifiableContainerMT::begin
const_iterator begin() const
return const_iterator for first entry
Definition: IdentifiableContainerMT.h:236
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
TRT_ID::barrel_ec
int barrel_ec(const Identifier &id) const
Values of different levels (failure returns 0)
Definition: TRT_ID.h:866
InDet::SimpleTRT_SeededSpacePointFinder_ATL::initialize
virtual StatusCode initialize() override
Definition: SimpleTRT_SeededSpacePointFinder_ATL.cxx:62
TRT_ID::layer_or_wheel
int layer_or_wheel(const Identifier &id) const
Definition: TRT_ID.h:884
Trk::PRDtoTrackMap::isUsed
bool isUsed(const PrepRawData &prd) const
does this PRD belong to at least one track?
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
InDet::SimpleTRT_SeededSpacePointFinder_ATL::m_modulLookupTable
modulLookupTable m_modulLookupTable[2 *SIMPLE_TRT_INDEX_OFFSET+1]
Lookup table that contains the SCT Layers to be considered to provide SP for the pairing in dependenc...
Definition: SimpleTRT_SeededSpacePointFinder_ATL.h:116
IdentifierHash::is_valid
bool is_valid() const
Check if id is in a valid state.
InDet::SimpleTRT_SeededSpacePointFinder_ATL::m_perigeeCut
double m_perigeeCut
rough cuts on the quality of the suggested SP pair
Definition: SimpleTRT_SeededSpacePointFinder_ATL.h:100
Trk::PrepRawData
Definition: PrepRawData.h:62
InDet::SimpleTRT_SeededSpacePointFinder_ATL::m_maxHoles
int m_maxHoles
controls how many not considered SCT layers are allowed between two SP in order to form a seed pair
Definition: SimpleTRT_SeededSpacePointFinder_ATL.h:97
id
SG::auxid_t id
Definition: Control/AthContainers/Root/debug.cxx:191
SCT_ID::layer_disk
int layer_disk(const Identifier &id) const
Definition: SCT_ID.h:734
SimpleTRT_SeededSpacePointFinder_ATL.h
InDet::SimpleTRT_SeededSpacePointFinder_ATL::pairIsOk
bool pairIsOk(const Trk::SpacePoint *sp1, const Trk::SpacePoint *sp2, const Trk::TrackParameters &directionTRT) const
applies rough cuts on the quality of a SP pair
Definition: SimpleTRT_SeededSpacePointFinder_ATL.cxx:481
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
InDet::SimpleTRT_SeededSpacePointFinder_ATL::dump
MsgStream & dump(MsgStream &out) const override
Definition: SimpleTRT_SeededSpacePointFinder_ATL.cxx:771
python.LumiBlobConversion.pos
pos
Definition: LumiBlobConversion.py:18
DataVector::end
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
Trk::ParametersBase::momentum
const Amg::Vector3D & momentum() const
Access method for the momentum.
InDet::SimpleTRT_SeededSpacePointFinder_ATL::find2Sp
std::list< std::pair< const Trk::SpacePoint *, const Trk::SpacePoint * > > find2Sp(const EventContext &ctx, const Trk::TrackParameters &, InDet::ITRT_SeededSpacePointFinder::IEventData &event_data) const override
main method, calls the private methods and returns a pointer to the list of SpacePointpairs.
Definition: SimpleTRT_SeededSpacePointFinder_ATL.cxx:122
DEBUG
#define DEBUG
Definition: page_access.h:11
ReadCellNoiseFromCoolCompare.s2
s2
Definition: ReadCellNoiseFromCoolCompare.py:379
AthCommonMsg< AlgTool >::msg
MsgStream & msg() const
Definition: AthCommonMsg.h:24
InDet::SimpleTRT_SeededSpacePointFinder_ATL::m_prdToTrackMap
SG::ReadHandleKey< Trk::PRDtoTrackMap > m_prdToTrackMap
Definition: SimpleTRT_SeededSpacePointFinder_ATL.h:112
InDet::SimpleTRT_SeededSpacePointFinder_ATL::m_sctId
const SCT_ID * m_sctId
ID SCT helper.
Definition: SimpleTRT_SeededSpacePointFinder_ATL.h:124
Trk::phi
@ phi
Definition: ParamDefs.h:81
InDet::SimpleTRT_SeededSpacePointFinder_ATL::m_trtId
const TRT_ID * m_trtId
ID TRT helper.
Definition: SimpleTRT_SeededSpacePointFinder_ATL.h:127
python.Constants.VERBOSE
int VERBOSE
Definition: Control/AthenaCommon/python/Constants.py:14
AthAlgTool
Definition: AthAlgTool.h:26
IdentifierHash
Definition: IdentifierHash.h:38
InDet::SimpleTRT_SeededSpacePointFinder_ATL::m_spacepointsSCTname
SG::ReadHandleKey< SpacePointContainer > m_spacepointsSCTname
Definition: SimpleTRT_SeededSpacePointFinder_ATL.h:109
InDet::SimpleTRT_SeededSpacePointFinder_ATL::m_modulLookupTableIndex
std::set< int > m_modulLookupTableIndex[2 *SIMPLE_TRT_INDEX_OFFSET+1]
Definition: SimpleTRT_SeededSpacePointFinder_ATL.h:117
DataVector::begin
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.