ATLAS Offline Software
InDetAmbiTrackSelectionTool.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 // InDetAmbiTrackSelectionTool.cxx, (c) ATLAS Detector software
7 // Markus Elsing
9 
11 
20 #include "TrkSurfaces/Surface.h"
21 #include "TrkTrack/Track.h"
22 #include "TrkTrack/TrackInfo.h"
26 
27 //================ Constructor =================================================
28 
30  const std::string& n,
31  const IInterface* p) :
32  base_class(t, n, p)
33 {
34  // compute the number of shared hits from the number of max shared modules
36 }
37 
38 //================ Initialisation =================================================
39 
41 {
42  // Get segment selector tool
43  //
44  ATH_CHECK(m_selectortool.retrieve(DisableTool{!m_parameterization}));
45  ATH_CHECK(detStore()->retrieve(m_detID, "SiliconID" ));
46  ATH_MSG_DEBUG( "initialize() successful" );
47 
48  ATH_CHECK(m_assoTool.retrieve() );
49  return StatusCode::SUCCESS;
50 }
51 
52 //================ Finalisation =================================================
53 
55 {
56  return StatusCode::SUCCESS;
57 }
58 
59 //============================================================================================
60 std::tuple<Trk::Track*,bool> InDet::InDetAmbiTrackSelectionTool::getCleanedOutTrack(const Trk::Track *ptrTrack,
61  const Trk::TrackScore score,
62  Trk::ClusterSplitProbabilityContainer &splitProbContainer,
63  Trk::PRDtoTrackMap &prd_to_track_map,
64  int trackId /* = -1*/,
65  int subtrackId /* = -1*/) const
66 {
67  // flag if the track is ok (true) or needs cleaning (false)
68  bool TrkCouldBeAccepted = true;
69 
70  // some counters used in the logic
71  int numUnused = 0;
72  int numTRT_Unused = 0;
73  int numShared = 0;
74  int numWeightedShared = 0;
75  bool thishasblayer = false;
76  bool hassharedblayer = false;
77  bool hassharedpixel = false;
78  bool firstisshared = true; // logic is that it is set to false if we find a first hit unshared
79 
80  // let's remember the last 2 ROTs on the track
81  const Trk::RIO_OnTrack* lastrot = nullptr;
82  const Trk::RIO_OnTrack* lastbutonerot = nullptr;
83  int lastrotindex = 0;
84 
85  // cut on TRT hits, might use eta dependent cuts here
86  int nCutTRT = m_minTRT_Hits;
87  if (m_parameterization) {
89  const Trk::TrackParameters* par = (*vpar)[0];
90  // ME bugfix
91  int expected = m_selectortool->minNumberDCs(par);
92  if (expected > nCutTRT) nCutTRT = expected;
93  }
94 
95  // get all TSOS the track
96  const Trk::TrackStates* tsos = ptrTrack->trackStateOnSurfaces();
97  ATH_MSG_DEBUG ("Study new Track "<< ptrTrack<<"\t , it has "<<tsos->size()<<"\t track states");
98  ATH_MSG_DEBUG ("trackId "<< trackId <<", subtrackId "<<subtrackId);
99 
100  // is this a track from the pattern or a fitted track ?
101  bool ispatterntrack = (ptrTrack->info().trackFitter()==Trk::TrackInfo::Unknown);
102  if (ispatterntrack) {
103  ATH_MSG_DEBUG ("==> this is a pattern track, outliers are good hits (reintegration) !");
104  } else {
105  ATH_MSG_DEBUG ("==> this is a refitted track, so we can use the chi2 ! ");
106  }
107 
108  // some pre-processing of the summary information, if available, needed for special cuts
109  int nPixelDeadSensor = -1;
110  int nSCTDeadSensor = -1;
111  int npixel = 0;
112  int npixholes = 0;
113  int nsctholes = 0;
114  const Trk::TrackSummary* trkSummary=ptrTrack->trackSummary();
115  if (trkSummary) {
116  ATH_MSG_VERBOSE ("---> Found summary information");
117  nPixelDeadSensor = trkSummary->get(Trk::numberOfPixelDeadSensors);
118  nSCTDeadSensor = trkSummary->get(Trk::numberOfSCTDeadSensors);
119  npixel = trkSummary->get(Trk::numberOfPixelHits);
120  npixholes = trkSummary->get(Trk::numberOfPixelHoles);
121  nsctholes = trkSummary->get(Trk::numberOfSCTHoles);
122  }
123  // set nDeadSensors to 0 in case trkSummary wasn't called with HoleSearch
124  // (i.e. number of deadSensors not available)
125  if (nPixelDeadSensor == -1) nPixelDeadSensor = 0;
126  if (nSCTDeadSensor == -1) nSCTDeadSensor = 0;
127  ATH_MSG_VERBOSE ("---> Number of dead si sensors: " << nPixelDeadSensor + nSCTDeadSensor);
128 
129  // possible classification of TSOS
130  enum TsosTypes {
131  // A measurement not yet used in any other track
132  UnusedHit = 1,
133  // A measurement shared with another track
134  SharedHit = 2,
135  // A hit that needs to be removed from the track
136  RejectedHit = 3,
137  // an outlier, to be copied in case
138  Outlier = 4,
139  // other TSOS types to be copied in case
140  OtherTsos = 5
141  };
142  // create an array of types for each TSOS
143  std::vector<int> tsosType;
144  tsosType.resize(tsos->size());
145 
146  // loop over TSOS
147  Trk::TrackStates::const_iterator iTsos = tsos->begin();
148  Trk::TrackStates::const_iterator iTsosEnd = tsos->end();
149  for (int index = 0 ; iTsos != iTsosEnd ; ++iTsos, ++index) {
150 
151  // init array
152  tsosType[index] = OtherTsos;
153 
154  // get measurment from TSOS
155  const Trk::MeasurementBase* meas = (*iTsos)->measurementOnTrack();
156 
157  // if we do not have a measurement, we should just mark it
158  if (!meas) {
159  ATH_MSG_VERBOSE ("-> No measurement on TSOS, it is another type, to be copied over");
160  tsosType[index] = OtherTsos;
161  continue;
162  }
163 
164  // ok, let try to get the ROT then
165  const Trk::RIO_OnTrack* rot = dynamic_cast <const Trk::RIO_OnTrack*> (meas);
166  if (!rot) {
167  // could be a Pseudo-Measurement ?
168  const Trk::PseudoMeasurementOnTrack* pseudo = dynamic_cast <const Trk::PseudoMeasurementOnTrack*> (meas);
169  if (pseudo){
170  ATH_MSG_VERBOSE ("-> Copy pseudo measurement");
171  } else {
172  ATH_MSG_WARNING ("-> Measurement is not a pseudo measurment, not yet supported, try to copy !");
173  }
174  tsosType[index] = OtherTsos;
175  continue;
176  }
177 
178  //
179  // we have a TSOS with a measurement, keep analysing it
180  //
181 
182  // let's get some information about the measurement
183  const Identifier& id = rot->identify();
184  bool isTRT = m_detID->is_trt(id);
185  bool isPixel = m_detID->is_pixel(id);
186  bool isBlayer = isPixel ? m_detID->is_blayer(id) : false;
187  bool isoutlier = (*iTsos)->type(Trk::TrackStateOnSurface::Outlier);
188 
189  // do we have some b-layer hit here (sorting of TSOS is inside out)
190  if (isBlayer && (!isoutlier || ispatterntrack)) thishasblayer = true; // we may reintegrate outliers from pattern
191 
192  // special cut to remove problematic combinations in the pixels
193  if ( isPixel && !thishasblayer && npixholes>0 && // a pixel hit, no b-layer, we do have pixel holes
194  ( ( npixel==1 && !isoutlier ) || // one pixel on track, it is not an additional outlier
195  ( ispatterntrack && npixel==0 && isoutlier) ) ) { // pattern track, no pixels, but an outlier (we may reintegrate it)
196  ATH_MSG_VERBOSE ("-> Special case, problematic single pixel hit on track, reject it !");
197  tsosType[index] = RejectedHit;
198  // mark track as bad !
199  TrkCouldBeAccepted = false;
200  continue;
201  }
202 
203  // do we have an outlier (an not a pattern track) ?
204  // if ( (isoutlier && !ispatterntrack) || !(m_detID->is_indet(id)) ) {
205  if ( (isoutlier && !ispatterntrack) || !(m_detID->is_indet(id)) ) {
206  ATH_MSG_VERBOSE ("-> Prd is outlier on a fitter track (or not InDet), copy it over");
207  tsosType[index] = Outlier;
208  continue;
209  }
210 
211  // let's check if this is a shared hit (even if it is an outlier on a pattern track) ?
212  if (!prd_to_track_map.isUsed(*(rot->prepRawData()))) {
213  if ( !isoutlier ) {
214  ATH_MSG_VERBOSE ("-> Prd is unused, copy it over");
215  } else {
216  ATH_MSG_VERBOSE ("-> Prd is outlier on a pattern track and is unused, copy it over");
217  }
218 
219  tsosType[index] = UnusedHit;
220  // increase some counters
221  if (isTRT) numTRT_Unused++;
222  else numUnused++;
223  // remember if first hit is shared, we need that later
224  if (numShared == 0) firstisshared = false;
225  // remember the last 2 ROTs
226  lastbutonerot = lastrot;
227  lastrot = rot;
228  lastrotindex = index;
229 
230  continue;
231  }
232 
233  //
234  // ok, we have a shared hit
235  //
236 
237  // do we have an outlier and a pattern track, but the hit is shared, so reject it (we reintegrate it otherwise)
238  if ( isoutlier && ispatterntrack ) {
239  ATH_MSG_VERBOSE ("-> Shared Prd is outlier on a pattern track, we do not want to reintegrate it, so reject it ");
240  tsosType[index] = RejectedHit;
241  // mark track as bad !
242  TrkCouldBeAccepted = false;
243  continue;
244  }
245 
246  // first check if it is a shared TRT hit, this is not allowed
247  if (isTRT) {
248  ATH_MSG_VERBOSE ("-> Share TRT hit, drop it !");
249  tsosType[index] = RejectedHit;
250  // mark track as bad !
251  TrkCouldBeAccepted = false;
252  continue;
253  }
254 
255  /* consider hit to be a shared one, if
256  - not too many tracks share this hit already
257  - the score of the track is high enough to allow for shared hits
258  */
260  int numberOfTracksWithThisPrd = std::distance(range.first,range.second);
261  ATH_MSG_VERBOSE ("---> number of tracks with this share Prd: " << numberOfTracksWithThisPrd << " maxtracks: " << m_maxTracksPerPRD);
262 
263  // see if we try keeping it as a shared hit ?
264  if ( numberOfTracksWithThisPrd < m_maxTracksPerPRD && // we do not allow to share with to many tracks
265  score > m_minScoreShareTracks && // score needs to be good
266  (!isPixel || npixholes<=0) ) { // we do not share pixels if there are holes in pixels
267 
268  // special treatment of share split pixel clusters...
269  if (m_doPixelClusterSplitting && isPixel) {
270  // get pixel cluster
271  const InDet::PixelCluster* clus = dynamic_cast <const InDet::PixelCluster*> (rot->prepRawData());
272 
273  if ( !clus ) {
274  ATH_MSG_WARNING ("-----> cast to Pixel cluster failed, should not happen !");
275  // mark track as bad !
276  TrkCouldBeAccepted = false; // we have to remove at least one PRD
277  continue;
278  } else {
279 
280  // split clusters are not allowed to be shared at all, unless
281  const Trk::ClusterSplitProbabilityContainer::ProbabilityInfo &splitProb = splitProbContainer.splitProbability(clus);
282  if ( splitProb.isSplit() ) {
283  ATH_MSG_VERBOSE ("-----> Pixel cluster is split, reject shared hit !!!");
284  tsosType[index] = RejectedHit;
285  // mark track as bad !
286  TrkCouldBeAccepted = false; // we have to remove at least one PRD
287  continue;
288  }
289 
290  // is cluster compatible with being a shared cluster ?
291  // A.S.: also a hack for the max size: allows large clusters that are exluded from the splitter to be shared
292  // needs isExcluded() flag in the future
293  if (splitProb.splitProbability1() < m_sharedProbCut && clus->rdoList().size() <= size_t(m_maxSplitSize) ) {
294  ATH_MSG_VERBOSE ("-----> Pixel cluster is not compatible with being shared (splitProb = "
295  << splitProb.splitProbability1() << ") , reject shared hit !!!");
296  tsosType[index] = RejectedHit;
297  // mark track as bad !
298  TrkCouldBeAccepted = false; // we have to remove at least one PRD
299  continue;
300  }
301  }
302  }
303 
304  ATH_MSG_VERBOSE ("---> Shared hit, but good track, let's enter hit in the list and try to keep it !");
305  tsosType[index] = SharedHit;
306  numShared++; // increase counter
307  numWeightedShared += (isPixel ? 2 : 1); // increase counter
308 
309  // some additional bookkeeping, we need this later
310  if (isPixel) {
311  // ME: bugfix, either shared blayer or shared pixel
312  if (isBlayer) hassharedblayer = true;
313  else hassharedpixel = true;
314  }
315  // remember the last 2 ROTs
316  lastbutonerot = lastrot;
317  lastrot = rot;
318  lastrotindex = index;
319 
320  continue;
321  }
322 
323  // ok, we failed to keep the share hit, let's reject it.
324  ATH_MSG_VERBOSE ("---> Share hit and bad track, reject it !");
325  tsosType[index] = RejectedHit;
326  // mark track as bad !
327  TrkCouldBeAccepted = false; // we have to remove at least one PRD
328  }
329 
330  // total number of hits with dead modules
331  int totalSiHits = numUnused + nPixelDeadSensor + nSCTDeadSensor;
332 
333  // special cut, do not allow the last hit to be to far away or after to many holes
334  if (ispatterntrack && // pattern track and
335  totalSiHits > m_minHits && // we have enough hits on the track
336  (lastrot && lastbutonerot) && // has enough ROTs
337  (lastrot->globalPosition()-lastbutonerot->globalPosition()).mag()>1000*CLHEP::mm) { // distance cut
338  ATH_MSG_DEBUG ("Special cut on distance, reject last hit on track !");
339  tsosType[lastrotindex] = RejectedHit;
340  numUnused--; // update counter
341  // mark track as bad !
342  TrkCouldBeAccepted = false;
343  }
344 
345  // special cut, do not allow the last hit to be after to many holes
346  if (ispatterntrack && // pattern track and
347  totalSiHits > m_minHits && // we have enough hits on the track
348  nsctholes>3 ) { // too many holes cut
349  ATH_MSG_DEBUG ("Special cut on too many holes, reject last hit on track !");
350  tsosType[lastrotindex] = RejectedHit;
351  numUnused--; // update counter
352  // mark track as bad !
353  TrkCouldBeAccepted = false;
354  }
355 
356 
357 
358  // get chi2/NDF, if track is fitted
359  if ( !ispatterntrack ) {
360  double trackchi2 = 0.;
361  if (ptrTrack->fitQuality() && ptrTrack->fitQuality()->numberDoF()>0 )
362  trackchi2 = ptrTrack->fitQuality()->chiSquared()/ptrTrack->fitQuality()->numberDoF();
363 
364  // if we have share hits and this is a bad track, we reject it
365  if ( numShared > 0 && !ispatterntrack && trackchi2 > 3 ) {
366  ATH_MSG_DEBUG ("Shared hits, we have a bad chi2 track, mark it as bad !");
367  // mark track as bad !
368  TrkCouldBeAccepted = false;
369  }
370  }
371 
372 
373  // numTRT cut, special for back tracking
374  if ( numTRT_Unused < nCutTRT) {
375  ATH_MSG_DEBUG ("Track fails TRT hit cut, mark it as bad !");
376  // mark track as bad !
377  TrkCouldBeAccepted = false;
378  }
379 
380  //
381  // now see what to do with the track
382  //
383 
384  // best case, we like this track and it passes this complex if statement
385  if ( TrkCouldBeAccepted && // we did not mark the track as bad before
386  ( !hassharedblayer || npixholes<=1 ) && // if blayer, at most 1 pixel hole
387  !hassharedpixel && // no shared pixel hits
388  ( ( totalSiHits >= m_minHits && numShared == 0 ) || // no shared and enough hits OR
389  ( totalSiHits >= m_minNotShared && numWeightedShared <= m_maxShared && // shared hits and enough unique hits and shared hits with good quality
391  ATH_MSG_DEBUG ("=> Suggest to keep track with "<<numShared<<" shared hits !");
392  return std::make_tuple(static_cast<Trk::Track *>(nullptr),true); // keep input track
393 
394  // ok, failed that one, can we recover the track ?
395  } else if ( numTRT_Unused >= nCutTRT && // TRT track or no TRT at all (back tracking)
396  ( totalSiHits >= m_minHits || // we have enough hits OR
397  ( totalSiHits >= m_minNotShared && // shared hits and enough unique hits and shared hits with good quality
399  // catch, if this is cosmics, accept the incoming track
400  if (m_cosmics) {
401  ATH_MSG_DEBUG ("=> Cosmics, accept input track even with shared hits");
402  return std::make_tuple(static_cast<Trk::Track *>(nullptr),true); // keep input track;
403  }
404 
405  // if ( numShared == 0 && TrkCouldBeAccepted ) {
406  // ATH_MSG_DEBUG ("=> Nothing to recover from, drop track !");
407  // return std::make_tuple(static_cast<Trk::Track *>(nullptr),false); // reject input track;
408  // }
409 
410  // Track is potentially ok, create a stripped down version from the unused hits and the allowed shared hits
411  // join shared to unused hits, if requirements are met
412 
413  ATH_MSG_VERBOSE ("Trying to recover track, allow for some shared hits is possible.");
414 
415  // new TSOS vector
416  std::vector<const Trk::TrackStateOnSurface*> newTSOS;
417 
418  // counter for the weighted number of added shared hits
419  int cntIns = 0;
420 
421  // loop over all TSOS (and types) and copy the good ones over
422  Trk::TrackStates::const_iterator iTsos = tsos->begin();
423  Trk::TrackStates::const_iterator iTsosEnd = tsos->end();
424 
425  for (int index = 0 ; iTsos != iTsosEnd ; ++iTsos,++index ) {
426 
427  // remove rejected hits
428  if (tsosType[index] == RejectedHit) {
429  ATH_MSG_VERBOSE ("-> Dropping rejected hit");
430 
431  } else if (tsosType[index] != SharedHit ) {
432  ATH_MSG_VERBOSE ("-> Copy good TSOS");
433  newTSOS.push_back(*iTsos);
434 
435  } else if (cntIns >= m_maxShared) {
436  ATH_MSG_VERBOSE ("-> Too many share hits, dropping outer hit(s)");
437 
438  } else {
439  ATH_MSG_VERBOSE ("-> Try to recover a shared hit");
440 
441  // get measurment from TSOS
442  const Trk::MeasurementBase* meas = (*iTsos)->measurementOnTrack();
443  // get ROT from this TSOS
444  const Trk::RIO_OnTrack* rot = dynamic_cast <const Trk::RIO_OnTrack*> (meas);
445 
446  if (!rot) {
447  ATH_MSG_WARNING ("Cast to RIO_OnTrack failed, should never happen !");
448  continue;
449  }
450 
451  // is it a pixel cluster ?
452  bool isPixel = m_detID->is_pixel(rot->identify());
453 
454  // find out how many tracks use this hit already
456  int numberOfTracksWithThisPrd = std::distance(range.first,range.second);
457  ATH_MSG_VERBOSE ("---> number of tracks with this shared Prd: " << numberOfTracksWithThisPrd << " maxtracks: " << m_maxTracksPerPRD);
458 
459  // check if this newly shared hit would exceed the shared hits limit of the already accepted track (**)
460  int iShared = 0;
461  int othernpixel = 0;
462  bool otherhasblayer = false;
463  if ( numberOfTracksWithThisPrd == 1 ) {
464  // @TODO is it ensured that the prds of all tracks have been registered already ?
465  std::vector< const Trk::PrepRawData* > prdsToCheck = m_assoTool->getPrdsOnTrack(prd_to_track_map,*(range.first->second));
466  for (const Trk::PrepRawData* prd : prdsToCheck) {
467  if (prd_to_track_map.isShared(*prd))
468  ++iShared;
469  if (m_detID->is_pixel(prd->identify())) {
470  othernpixel++;
471  if (m_detID->is_blayer(prd->identify())) otherhasblayer=true;
472  }
473  }
474  }
475 
476  // now decide what to do, can we keep the shared hit
477  if ( numberOfTracksWithThisPrd < m_maxTracksPerPRD && // number of tracks sharing hit
478  score > m_minScoreShareTracks && // score cut
479  (!isPixel || !hassharedblayer || npixholes <= 0) && // shared b-layer only if no pixel holes
480  ( iShared < m_maxShared || (isPixel && !firstisshared) ) && // do not allow other accepted track to exceed the shared limit, if first pixel hit is shared
481  (!isPixel || thishasblayer == otherhasblayer ) && // only allow shared pixel if both have blayer or both not
482  (!isPixel || npixel >= othernpixel ) ) { // only allow shared pixel if new track as at least as many pixel hits
483 
484  ATH_MSG_VERBOSE ("---> Accepted hit shared with " << numberOfTracksWithThisPrd << " tracks !");
485  newTSOS.push_back(*iTsos);
486  numUnused++; // update counter
487 
488  // update shared hit counter
489  cntIns += (isPixel ? 2 : 1);
490 
491  } else {
492  ATH_MSG_VERBOSE ("---> Reject hit shared with " << numberOfTracksWithThisPrd << " tracks !");
493  }
494  }
495  }
496 
497  // this still may happen per (**) see above.
498  if ( numUnused+nPixelDeadSensor+nSCTDeadSensor < m_minHits || newTSOS.size() <= 3 ) {
499  ATH_MSG_DEBUG ("=> Too few hits, reject track with shared hits");
500  return std::make_tuple(static_cast<Trk::Track *>(nullptr),false); // reject input track;
501  }
502 
503  // check that this is not the input track
504  if ( newTSOS.size() == tsos->size() ) {
505  ATH_MSG_DEBUG ("=> Recovered input track, accept it !");
506  return std::make_tuple(static_cast<Trk::Track *>(nullptr),true); // keep input track;
507  } else {
508  // ok, done, create subtrack
509  Trk::Track* newTrack = createSubTrack(newTSOS,ptrTrack);
510  if (!newTrack) {
511  ATH_MSG_DEBUG ("=> Failed to create subtrack");
512  return std::make_tuple(static_cast<Trk::Track *>(nullptr),false); // reject input track;
513  }
514 
516  info.addPatternRecoAndProperties(ptrTrack->info());
517  Trk::TrackInfo newInfo;
519  info.addPatternReco(newInfo);
520  newTrack->info().addPatternReco(ptrTrack->info());
521 
522  ATH_MSG_DEBUG ("=> Successfully created subtrack with shared hits recovered !");
523  return std::make_tuple(newTrack,false); // new cleaned track, reject input track ;
524  }
525  } else {
526  ATH_MSG_DEBUG ("=> Track is recommended to be dropped");
527  }
528 
529  return std::make_tuple(static_cast<Trk::Track *>(nullptr),false); // reject input track;
530 }
531 
532 //==========================================================================================
533 
534 Trk::Track* InDet::InDetAmbiTrackSelectionTool::createSubTrack( const std::vector<const Trk::TrackStateOnSurface*>& tsos, const Trk::Track* track ) const
535 {
536  int nmeas=0;
537  for (const Trk::TrackStateOnSurface* tsosIt : tsos) {
538  if (tsosIt->type(Trk::TrackStateOnSurface::Measurement)) nmeas++;
539  }
540  if (nmeas<3) {
541  ATH_MSG_DEBUG ("Less than 3 measurements, reject track !");
542  return nullptr;
543  }
544 
545  auto vecTsos = std::make_unique<Trk::TrackStates>();
546 
547  // loop over TSOS, copy TSOS and push into vector
548  for (const Trk::TrackStateOnSurface* tsosIt : tsos) {
549  const Trk::TrackStateOnSurface* newTsos = new Trk::TrackStateOnSurface(*tsosIt);
550  vecTsos->push_back(newTsos);
551  }
552 
554  info.addPatternRecoAndProperties(track->info());
555  Trk::TrackInfo newInfo;
557  info.addPatternReco(newInfo);
558 
559  Trk::Track* newTrack = new Trk::Track(info, std::move(vecTsos),nullptr);
560 
561  return newTrack;
562 
563 }
grepfile.info
info
Definition: grepfile.py:38
InDet::InDetAmbiTrackSelectionTool::m_minScoreShareTracks
FloatProperty m_minScoreShareTracks
Definition: InDetAmbiTrackSelectionTool.h:87
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
AtlasDetectorID::is_pixel
bool is_pixel(Identifier id) const
Definition: AtlasDetectorID.h:760
Trk::numberOfPixelHits
@ numberOfPixelHits
number of pixel layers on track with absence of hits
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:57
xAOD::numWeightedShared
@ numWeightedShared
Definition: TrackingPrimitives.h:541
PRDtoTrackMap.h
xAOD::numUnused
@ numUnused
Definition: TrackingPrimitives.h:535
TrkDetElementBase.h
Trk::TrackInfo
Contains information about the 'fitter' of this track.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/TrackInfo.h:32
DataModel_detail::const_iterator
Const iterator class for DataVector/DataList.
Definition: DVLIterator.h:82
InDet::InDetAmbiTrackSelectionTool::createSubTrack
Trk::Track * createSubTrack(const std::vector< const Trk::TrackStateOnSurface * > &tsos, const Trk::Track *track) const
method to create a new track from a vector of TSOS's
Definition: InDetAmbiTrackSelectionTool.cxx:534
Trk::Track::fitQuality
const FitQuality * fitQuality() const
return a pointer to the fit quality const-overload
python.PerfMonSerializer.p
def p
Definition: PerfMonSerializer.py:743
InDet::InDetAmbiTrackSelectionTool::m_maxTracksPerPRD
IntegerProperty m_maxTracksPerPRD
Definition: InDetAmbiTrackSelectionTool.h:85
MeasurementBase.h
Surface.h
Trk::Track
The ATLAS Track class.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/Track.h:73
Trk::ClusterSplitProbabilityContainer::ProbabilityInfo::isSplit
bool isSplit() const
Definition: ClusterSplitProbabilityContainer.h:27
Trk::PRDtoTrackMap::onTracks
PrepRawDataTrackMapRange onTracks(const PrepRawData &prd)
get the Tracks associated with this PrepRawData.
InDet::InDetAmbiTrackSelectionTool::m_parameterization
BooleanProperty m_parameterization
Definition: InDetAmbiTrackSelectionTool.h:89
PixelCluster.h
Trk::PRDtoTrackMap
Definition: PRDtoTrackMap.h:17
index
Definition: index.py:1
Trk::numberOfSCTDeadSensors
@ numberOfSCTDeadSensors
number of TRT hits
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:76
Trk::Track::trackStateOnSurfaces
const Trk::TrackStates * trackStateOnSurfaces() const
return a pointer to a const DataVector of const TrackStateOnSurfaces.
Trk::ClusterSplitProbabilityContainer::ProbabilityInfo
Definition: ClusterSplitProbabilityContainer.h:22
Trk::Track::info
const TrackInfo & info() const
Returns a const ref to info of a const tracks.
Trk::RIO_OnTrack::globalPosition
virtual const Amg::Vector3D & globalPosition() const override=0
Interface method to get the global Position.
xAOD::JetInput::Track
@ Track
Definition: JetContainerInfo.h:61
Trk::PrepRawData::rdoList
const std::vector< Identifier > & rdoList() const
return the List of rdo identifiers (pointers)
InDet::InDetAmbiTrackSelectionTool::m_doPixelClusterSplitting
BooleanProperty m_doPixelClusterSplitting
Definition: InDetAmbiTrackSelectionTool.h:90
Trk::RIO_OnTrack
Definition: RIO_OnTrack.h:70
AtlasDetectorID::is_trt
bool is_trt(Identifier id) const
Definition: AtlasDetectorID.h:782
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
Trk::TrackInfo::InDetAmbiTrackSelectionTool
@ InDetAmbiTrackSelectionTool
Added because of compilation problems.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/TrackInfo.h:159
Trk::numberOfSCTHoles
@ numberOfSCTHoles
number of Holes in both sides of a SCT module
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:73
InDet::InDetAmbiTrackSelectionTool::m_minTRT_Hits
IntegerProperty m_minTRT_Hits
Definition: InDetAmbiTrackSelectionTool.h:82
PrepRawData.h
Trk::TrackStateOnSurface::Outlier
@ Outlier
This TSoS contains an outlier, that is, it contains a MeasurementBase/RIO_OnTrack which was not used ...
Definition: TrackStateOnSurface.h:122
Track.h
SiliconID::is_blayer
bool is_blayer(const Identifier &id) const
Test for pixle b-layer - generic, i.e. works for EITHER pixel or sct id.
Definition: SiliconID.h:171
Trk::PseudoMeasurementOnTrack
Class to handle pseudo-measurements in fitters and on track objects.
Definition: PseudoMeasurementOnTrack.h:44
Trk::TrackInfo::addPatternReco
void addPatternReco(const TrackInfo &)
A method adding just pattern recognition info without adding the actual properties.
InDet::InDetAmbiTrackSelectionTool::m_cosmics
BooleanProperty m_cosmics
Definition: InDetAmbiTrackSelectionTool.h:88
InDet::InDetAmbiTrackSelectionTool::finalize
virtual StatusCode finalize() override
standard Athena-Algorithm method
Definition: InDetAmbiTrackSelectionTool.cxx:54
InDet::InDetAmbiTrackSelectionTool::m_assoTool
ToolHandle< Trk::IPRDtoTrackMapTool > m_assoTool
Definition: InDetAmbiTrackSelectionTool.h:75
xAOD::totalSiHits
@ totalSiHits
Definition: TrackingPrimitives.h:525
Identifier
Definition: DetectorDescription/Identifier/Identifier/Identifier.h:32
beamspotman.n
n
Definition: beamspotman.py:731
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
Trk::numberOfPixelDeadSensors
@ numberOfPixelDeadSensors
number of pixel hits with broad errors (width/sqrt(12))
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:65
plotBeamSpotVxVal.range
range
Definition: plotBeamSpotVxVal.py:195
PseudoMeasurementOnTrack.h
SiliconID.h
This is an Identifier helper class for both the Pixel and SCT subdetectors. This class defines identi...
Trk::TrackScore
float TrackScore
Definition: TrackScore.h:10
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
InDet::InDetAmbiTrackSelectionTool::initialize
virtual StatusCode initialize() override
standard Athena-Algorithm method
Definition: InDetAmbiTrackSelectionTool.cxx:40
TrackSummary.h
Trk::ParametersBase
Definition: ParametersBase.h:55
InDet::InDetAmbiTrackSelectionTool::m_selectortool
PublicToolHandle< ITrtDriftCircleCutTool > m_selectortool
TRT minimum number of drift circles tool- returns allowed minimum number of TRT drift circles.
Definition: InDetAmbiTrackSelectionTool.h:72
DataVector
Derived DataVector<T>.
Definition: DataVector.h:581
Trk::PRDtoTrackMap::isUsed
bool isUsed(const PrepRawData &prd) const
does this PRD belong to at least one track?
min
#define min(a, b)
Definition: cfImp.cxx:40
Trk::numberOfPixelHoles
@ numberOfPixelHoles
number of pixels which have a ganged ambiguity.
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:59
Trk::PrepRawData
Definition: PrepRawData.h:62
Trk::MeasurementBase
Definition: MeasurementBase.h:58
Trk::Track::trackParameters
const DataVector< const TrackParameters > * trackParameters() const
Return a pointer to a vector of TrackParameters.
Definition: Tracking/TrkEvent/TrkTrack/src/Track.cxx:97
python.PyKernel.detStore
detStore
Definition: PyKernel.py:41
Trk::TrackStateOnSurface
represents the track state (measurement, material, fit parameters and quality) at a surface.
Definition: TrackStateOnSurface.h:71
Trk::TrackSummary
A summary of the information contained by a track.
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:287
TrackInfo.h
createCoolChannelIdFile.par
par
Definition: createCoolChannelIdFile.py:29
RIO_OnTrack.h
Trk::ClusterSplitProbabilityContainer
Container to associate Cluster with cluster splitting probabilities.
Definition: ClusterSplitProbabilityContainer.h:17
AtlasDetectorID::is_indet
bool is_indet(Identifier id) const
Definition: AtlasDetectorID.h:683
Trk::RIO_OnTrack::prepRawData
virtual const Trk::PrepRawData * prepRawData() const =0
returns the PrepRawData (also known as RIO) object to which this RIO_OnTrack is associated.
InDet::InDetAmbiTrackSelectionTool::getCleanedOutTrack
virtual std::tuple< Trk::Track *, bool > getCleanedOutTrack(const Trk::Track *track, const Trk::TrackScore score, Trk::ClusterSplitProbabilityContainer &splitProbContainer, Trk::PRDtoTrackMap &prd_to_track_map, int trackId=-1, int subtrackId=-1) const override
Definition: InDetAmbiTrackSelectionTool.cxx:60
xAOD::score
@ score
Definition: TrackingPrimitives.h:513
InDet::PixelCluster
Definition: InnerDetector/InDetRecEvent/InDetPrepRawData/InDetPrepRawData/PixelCluster.h:49
DataVector::end
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
python.SystemOfUnits.mm
int mm
Definition: SystemOfUnits.py:83
DataVector.h
An STL vector of pointers that by default owns its pointed-to elements.
DeMoScan.index
string index
Definition: DeMoScan.py:362
InDet::InDetAmbiTrackSelectionTool::m_minNotShared
IntegerProperty m_minNotShared
Definition: InDetAmbiTrackSelectionTool.h:86
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
Trk::Track::trackSummary
const Trk::TrackSummary * trackSummary() const
Returns a pointer to the const Trk::TrackSummary owned by this const track (could be nullptr)
Trk::RIO_OnTrack::identify
virtual Identifier identify() const final
return the identifier -extends MeasurementBase
Definition: RIO_OnTrack.h:155
ClusterSplitProbabilityContainer.h
InDet::InDetAmbiTrackSelectionTool::InDetAmbiTrackSelectionTool
InDetAmbiTrackSelectionTool(const std::string &, const std::string &, const IInterface *)
Definition: InDetAmbiTrackSelectionTool.cxx:29
Trk::FitQuality::chiSquared
double chiSquared() const
returns the of the overall track fit
Definition: FitQuality.h:56
InDet::InDetAmbiTrackSelectionTool::m_maxShared
int m_maxShared
Definition: InDetAmbiTrackSelectionTool.h:83
xAOD::numTRT_Unused
@ numTRT_Unused
Definition: TrackingPrimitives.h:536
InDet::InDetAmbiTrackSelectionTool::m_sharedProbCut
FloatProperty m_sharedProbCut
Definition: InDetAmbiTrackSelectionTool.h:91
Trk::FitQuality::numberDoF
int numberDoF() const
returns the number of degrees of freedom of the overall track or vertex fit as integer
Definition: FitQuality.h:60
Trk::ClusterSplitProbabilityContainer::ProbabilityInfo::splitProbability1
float splitProbability1() const
Definition: ClusterSplitProbabilityContainer.h:24
Trk::ClusterSplitProbabilityContainer::splitProbability
const ProbabilityInfo & splitProbability(const PrepRawData *cluster) const
Definition: ClusterSplitProbabilityContainer.h:35
xAOD::track
@ track
Definition: TrackingPrimitives.h:512
Trk::TrackInfo::setPatternRecognitionInfo
void setPatternRecognitionInfo(const TrackPatternRecoInfo &patternReco)
Method setting the pattern recognition algorithm.
Trk::TrackSummary::get
int get(const SummaryType &type) const
returns the summary information for the passed SummaryType.
InDet::InDetAmbiTrackSelectionTool::m_maxSplitSize
IntegerProperty m_maxSplitSize
Definition: InDetAmbiTrackSelectionTool.h:92
xAOD::numShared
@ numShared
Definition: TrackingPrimitives.h:523
OfflineHitType::Outlier
@ Outlier
Trk::TrackInfo::trackFitter
const TrackFitter & trackFitter() const
Access methods for track fitter.
InDet::InDetAmbiTrackSelectionTool::m_minHits
IntegerProperty m_minHits
some cut values
Definition: InDetAmbiTrackSelectionTool.h:81
Amg::distance
float distance(const Amg::Vector3D &p1, const Amg::Vector3D &p2)
calculates the distance between two point in 3D space
Definition: GeoPrimitivesHelpers.h:54
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
InDetAmbiTrackSelectionTool.h
Trk::PRDtoTrackMap::isShared
bool isShared(const PrepRawData &prd) const
does this PRD belong to more than one track?
InDet::InDetAmbiTrackSelectionTool::m_maxSharedModules
IntegerProperty m_maxSharedModules
Definition: InDetAmbiTrackSelectionTool.h:84
Trk::TrackStateOnSurface::Measurement
@ Measurement
This is a measurement, and will at least contain a Trk::MeasurementBase.
Definition: TrackStateOnSurface.h:101
Trk::PRDtoTrackMap::ConstPrepRawDataTrackMapRange
std::pair< PrepRawDataTrackMap::const_iterator, PrepRawDataTrackMap::const_iterator > ConstPrepRawDataTrackMapRange
Definition: PRDtoTrackMap.h:44
InDet::InDetAmbiTrackSelectionTool::m_detID
const SiliconID * m_detID
atlas id helper
Definition: InDetAmbiTrackSelectionTool.h:78
DataVector::begin
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
Trk::TrackInfo::Unknown
@ Unknown
Track fitter not defined.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/TrackInfo.h:41