ATLAS Offline Software
InDetDetailedTrackSelectorTool.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 // forward declares
10 #include "VxVertex/Vertex.h"
11 #include "VxVertex/RecVertex.h"
13 #include "TrkTrack/Track.h"
17 
19 #include "xAODTracking/Vertex.h"
20 
21 
22 // normal includes
23 #include "CLHEP/GenericFunctions/CumulativeChiSquare.hh"
24 #include "CLHEP/Units/SystemOfUnits.h"
28 #include <cmath>
29 
30 using CLHEP::GeV;
31 using CLHEP::mm;
32 
33 namespace InDet
34 {
35 
36  // ---------------------------------------------------------------------
37  InDetDetailedTrackSelectorTool::InDetDetailedTrackSelectorTool(const std::string& t, const std::string& n, const IInterface* p)
38  : AthAlgTool(t,n,p)
39  , m_trackSumTool("Trk::TrackSummaryTool", this)
40  , m_particleCreator("", this)
41  , m_extrapolator("Trk::Extrapolator", this)
42  , m_trtDCTool("InDet::InDetTrtDriftCircleCutTool", this)
43  , m_inDetTestPixelLayerTool("", this)
44  , m_trackSumToolAvailable(true)
45  , m_partCreatorToolAvailable(false)
46  , m_usePtDependentCuts(false)
47  , m_useEventInfoBs(false)
48 
49 
50  {
51  declareInterface<ITrackSelectorTool>(this);
52  declareProperty("pTMin" , m_pTMin = 1.*GeV);
53  declareProperty("pMin" , m_pMin = 0.);
54  declareProperty("IPd0Max" , m_IPd0Max = 2.*mm);
55  declareProperty("IPz0Max" , m_IPz0Max = 1.5*mm);
56  declareProperty("z0Max" , m_z0Max = 9999.*mm);
57  declareProperty("sigIPd0Max" , m_sigIPd0Max = 999.*mm);
58  declareProperty("sigIPz0Max" , m_sigIPz0Max = 999.*mm);
59  declareProperty("d0significanceMax", m_d0significanceMax = -1.);
60  declareProperty("z0significanceMax", m_z0significanceMax = -1.);
61  declareProperty("etaMax" , m_etaMax = 9999.);
62 
63  declareProperty("useTrackSummaryInfo", m_useTrackSummaryInfo = true);
64 
65  declareProperty("nHitBLayer" , m_nHitBLayer = 1);
66  declareProperty("nHitPix" , m_nHitPix = 2);
67  declareProperty("nHitBLayerPlusPix", m_nHitBLayerPlusPix = 0);
68  declareProperty("nHitSct" , m_nHitSct = 0);
69  declareProperty("nHitSi" , m_nHitSi = 7);
70 
71  declareProperty("nHitPixPhysical", m_nHitPixPhysical = 0);
72  declareProperty("nHitSiPhysical", m_nHitSiPhysical = 3);
73 
74  declareProperty("nHitTrt" , m_nHitTrt = 0);
75  declareProperty("nHitTrtPlusOutliers" , m_nHitTrtPlusOutliers = 0);
76  declareProperty("nHitTrtHighE" , m_nHitTrtHighE = 0);
77  declareProperty("nHitTrtPlusOutliersHighE" , m_nHitTrtPlusOutliersHighE = 0);
78  declareProperty("nHitTrtHighEFractionMax" , m_nHitTrtHighEFraction = 999);
79  declareProperty("nHitTrtHighEFractionWithOutliersMax", m_nHitTrtHighEFractionWithOutliers = 999);
80 
81  declareProperty("useSharedHitInfo", m_useSharedHitInfo = false);
82  declareProperty("nSharedBLayer" , m_nSharedBLayer = 0);
83  declareProperty("nSharedPix" , m_nSharedPix = 0);
84  declareProperty("nSharedSct" , m_nSharedSct = 1);
85  declareProperty("nSharedSi" , m_nSharedSi = 999);
86 
87  declareProperty("nHoles" , m_nHoles = 999);
88  declareProperty("nDoubleHoles", m_nDoubleHoles = 999);
89  declareProperty("nHolesPixel" , m_nHolesPix = 999);
90  declareProperty("nHolesSct" , m_nHolesSct = 999);
91 
92  declareProperty("useTrackQualityInfo", m_useTrackQualityInfo = true);
93  declareProperty("fitChi2" , m_fitChi2 = 99999.);
94  declareProperty("fitProb" , m_fitProb = -1.);
95  declareProperty("fitChi2OnNdfMax" , m_fitChi2OnNdfMax = 999.);
96  declareProperty("TrtMaxEtaAcceptance", m_TrtMaxEtaAcceptance = 999.);
97 
98  declareProperty("usePreselectionCuts", m_usePreselectionCuts = false);
99  declareProperty("d0MaxPreselection" , m_d0MaxPreselection = 10.);
100 
101  declareProperty("useEtaDepententMinHitTrt", m_useEtaDepententMinHitTrt = false);
102  declareProperty("scaleMinHitTrt" , m_scaleMinHitTrt = 1.);
103  declareProperty("addToMinHitTrt" , m_addToMinHitTrt = 0);
104 
105  declareProperty("useEtaDepententMinHitTrtWithOutliers", m_useEtaDepententMinHitTrtWithOutliers = false);
106  declareProperty("scaleMinHitTrtWithOutliers" , m_scaleMinHitTrtWithOutliers = 1.);
107  declareProperty("addToMinHitTrtWithOutliers" , m_addToMinHitTrtWithOutliers = 0);
108 
109  declareProperty("TrackSummaryTool" , m_trackSumTool);
110  declareProperty("TrackParticleCreatorTool", m_particleCreator);
111  declareProperty("Extrapolator" , m_extrapolator);
112  declareProperty("TrtDCCutTool" , m_trtDCTool);
113  declareProperty("InDetTestPixelLayerTool", m_inDetTestPixelLayerTool);
114 
115 
116  declareProperty("UsePtDependentCuts", m_usePtDependentCuts = false);
117  declareProperty("PtBenchmarks" , m_ptBenchmarks);
118  declareProperty("SCTCutValues" , m_nSCTValues);
119  declareProperty("UseEventInfoBS" , m_useEventInfoBs);
120  }
121 
123  {
124  if(m_useEventInfoBs){
126  if (evt.isValid()) {
127  InDet::BeamSpotData temp(evt->beamStatus(), evt->beamPosX(), evt->beamPosY(), evt->beamPosZ(),
128  evt->beamPosSigmaX(), evt->beamPosSigmaY(), evt->beamPosSigmaZ(),
129  evt->beamTiltXZ(), evt->beamTiltYZ(), evt->beamPosSigmaXY());
130  return new Trk::RecVertex(temp.beamVtx());
131  } else {
132  ATH_MSG_WARNING( " Cannot get beamSpot center from xAOD::EventInfo. Using (0,0,0)... " );
133  return new Trk::Vertex(Amg::Vector3D(0,0,0));
134  }
135  }else{
137  if (beamSpotHandle.isValid()) {
138  return new Trk::RecVertex(beamSpotHandle->beamVtx());
139  } else {
140  ATH_MSG_WARNING( " Cannot get beamSpot center from BeamSpotData. Using (0,0,0)... " );
141  return new Trk::Vertex(Amg::Vector3D(0,0,0));
142  }
143  }
144  }
145 
146  // ---------------------------------------------------------------------
148  = default;
149 
150  // ---------------------------------------------------------------------
151  StatusCode
153  if(m_trackSumTool.empty()){
154  ATH_MSG_DEBUG("No TrackSummaryTool set. OK if running on AOD.");
155  }
157  ATH_CHECK(m_trackSumTool.retrieve(DisableTool{!m_trackSumToolAvailable}));
158 
159  if(m_useSharedHitInfo && m_particleCreator.empty()){
160  ATH_MSG_DEBUG("No TrackParticleCreatorTool set but shared hit selection used. OK if running on AOD.");
161  }
163  ATH_CHECK(m_particleCreator.retrieve(DisableTool{!m_partCreatorToolAvailable}));
164 
165  ATH_CHECK( m_extrapolator.retrieve() );
169  if(m_trtDCTool.empty()) {
170  ATH_MSG_ERROR(" Eta dependent cut on number of TRT hits requested but TrtDCCutTool not specified. ");
171  return StatusCode::FAILURE;
172  } else if(m_trtDCTool.retrieve().isFailure()) {
173  ATH_MSG_ERROR(" Unable to retrieve tool "<<m_trtDCTool);
174  return StatusCode::FAILURE;
175  }
176  ATH_MSG_DEBUG("Retrieved tool "<<m_trtDCTool);
178  ATH_MSG_DEBUG("Using eta dependent cut on number of TRT hits.");
179  }
181  ATH_MSG_DEBUG("Using eta dependent cut on number of TRT hits + outliers.");
182  }
183  }else{
184  m_trtDCTool.disable();
185  }
186 
187  // Read handle for AtlasFieldCacheCondObj
189 
190  ATH_MSG_DEBUG("Using cuts on the number of Silicon hits");
192  //checking whether sizes of cuts and pt interval expressed in vectors match
193  if( m_ptBenchmarks.size() != m_nSCTValues.size()){
194  ATH_MSG_ERROR( "Number of cuts DOES NOT match the number of intervals to apply. Please check jobOptions. ");
195  return StatusCode::FAILURE;
196  } else if (m_ptBenchmarks.empty()){
197  ATH_MSG_ERROR( "Zero vectors for number of cuts and pt intervals. Please check jobOptions. ");
198  return StatusCode::FAILURE;
199  }//end of vector size protection block
200  }//end of memory protection
201  return StatusCode::SUCCESS;
202  }
203 
204  // ---------------------------------------------------------------------
206  {
207  ATH_MSG_DEBUG( "Finalize successful" );
208  return StatusCode::SUCCESS;
209  }
210 
211  // ---------------------------------------------------------------------
212  bool
214  int nHitTrt = m_nHitTrt;
215  int nHitTrtPlusOutliers = m_nHitTrtPlusOutliers;
216  const Trk::Perigee* perigeeBeforeExtrapolation=dynamic_cast<const Trk::Perigee*>(track.perigeeParameters());
217  if (perigeeBeforeExtrapolation && m_usePreselectionCuts){
218  bool preselectionDecision=preselectionBeforeExtrapolation(*perigeeBeforeExtrapolation);
219  if (!preselectionDecision) {
220  ATH_MSG_DEBUG("Track rejected because of preselection decision!");
221  return false;
222  }
223  } else if (m_usePreselectionCuts){
224  ATH_MSG_DEBUG( " Preselection was requested but cannot be made since no Perigee in Track is available. This is not an error." );
225  }
226  const Trk::Vertex* myVertex=vertex;
227  //in case no Vertex is provided by the user, beam position will be used if available
228  if (myVertex==nullptr) {
229  myVertex = getBeamSpot(Gaudi::Hive::currentContext());
230  }
231  Trk::PerigeeSurface perigeeSurface(myVertex->position());
232  const Trk::TrackParameters *firstmeaspar=nullptr;
233  for (const auto *i : *track.trackParameters()){
234  if ( i->covariance() && !dynamic_cast<const Trk::Perigee*>(i)) {
235  firstmeaspar=i;
236  break;
237  }
238  }
239  if (!firstmeaspar) {
240  //assumes perigeeParameters exist...
241  //no track selection if firstmeas + perigee does not exist !
242  firstmeaspar=track.perigeeParameters();
243  if (!firstmeaspar){
244  ATH_MSG_WARNING( " First measurment on track is missing. Using perigee Parameters, but they are missing: 0 pointer! Track selection failed " );
245  //clean up vertex
246  if (myVertex!=vertex) {
247  delete myVertex;
248  myVertex=nullptr;
249  }
250  return false;
251  }
252  }
253  const Trk::TrackParameters* extrapolatedParameters= m_extrapolator->extrapolate(Gaudi::Hive::currentContext(),
254  *firstmeaspar,
255  perigeeSurface,
257  true,
258  track.info().particleHypothesis() ).release();
259  const Trk::Perigee* extrapolatedPerigee = extrapolatedParameters ? dynamic_cast<const Trk::Perigee*>(extrapolatedParameters) : nullptr;
260  if (!extrapolatedPerigee || !extrapolatedPerigee->covariance() ) {
261  ATH_MSG_WARNING( "Track Selector failed to extrapolate track to the vertex: " << myVertex->position() );
262  if (extrapolatedParameters) {
263  ATH_MSG_WARNING( "The return object of the extrapolator was not a perigee even if a perigeeSurface was used!" );
264  delete extrapolatedParameters;
265  extrapolatedParameters=nullptr;
266  }
267  }
268 
269  //decision based on the track parameters
270  const Trk::RecVertex* recVertex = dynamic_cast<const Trk::RecVertex*>(myVertex);
271  bool dec = decision(extrapolatedPerigee, recVertex ? &recVertex->covariancePosition() : nullptr );
272  if (myVertex!=vertex) {
273  delete myVertex;
274  myVertex=nullptr;
275  }
276  bool isInTrtAcceptance=true;
277  if (!extrapolatedPerigee || std::fabs(extrapolatedPerigee->momentum().eta())>m_TrtMaxEtaAcceptance) {
278  isInTrtAcceptance=false;
279  }
280  if (extrapolatedPerigee!=track.perigeeParameters()) {
281  delete extrapolatedPerigee;
282  extrapolatedPerigee=nullptr;
283  }
284  if(!dec) {
285  ATH_MSG_DEBUG("Track rejected because of perigee parameters!");
286  return false;
287  }
288  if (m_useTrackQualityInfo) {
289  const Trk::FitQuality* TrkQuality=track.fitQuality();
290  if (TrkQuality==nullptr) {
291  ATH_MSG_WARNING( "Requested cut on track quality was not possible. Track has no FitQuality object attached. Selection failed." );
292  return false;
293  }
294  if (!decision(TrkQuality)) {
295  return false;
296  }
297  }
298  if (m_useTrackSummaryInfo) {
299  //number of hits, silicon hits, b-layer
300  // first ask track for summary
301  std::unique_ptr<Trk::TrackSummary> summaryUniquePtr;
302  const Trk::TrackSummary* summary = track.trackSummary();
303  if (m_trackSumToolAvailable && summary == nullptr) {
304  summaryUniquePtr = m_trackSumTool->summary(track);
305  summary = summaryUniquePtr.get();
306  }
307  if (nullptr==summary ) {
308  ATH_MSG_FATAL( "Track preselection: cannot create a track summary (but useTrackSummary is true). Selection failed." );
309  return false;
310  }
311 
312  // Create xAOD::TrackParticle to retrieve shared hit info
313  const xAOD::TrackParticle* tp = m_partCreatorToolAvailable ? m_particleCreator->createParticle(track) : nullptr;
314  if(m_useSharedHitInfo && tp==nullptr){
315  ATH_MSG_FATAL( "Track preselection: cannot create a track particle (but useSharedHitInfo is true). Selection failed." );
316  return false;
317  }
318 
319  // get the minimum nimber of TRT hits based on eta of the track
321  nHitTrt = m_trtDCTool->minNumberDCs( (*track.trackParameters())[0] );
322  if(m_addToMinHitTrt!=0){
323  nHitTrt += m_addToMinHitTrt;
324  }else{
325  nHitTrt = (int)((double)nHitTrt*m_scaleMinHitTrt);
326  }
327  }
328 
329  // get the minimum nimber of TRT hits + outliers based on eta of the track
331  nHitTrtPlusOutliers = m_trtDCTool->minNumberDCs( (*track.trackParameters())[0] );
333  nHitTrtPlusOutliers += m_addToMinHitTrtWithOutliers;
334  }else{
335  nHitTrtPlusOutliers = (int)((double)nHitTrtPlusOutliers*m_scaleMinHitTrtWithOutliers);
336  }
337  }
338 
339  if (!decision(summary, tp, m_useSharedHitInfo,isInTrtAcceptance, perigeeBeforeExtrapolation,
340  nHitTrt, nHitTrtPlusOutliers)) {
341  return false;
342  }
343  }
344  return true;
345  }
346 
347  // ---------------------------------------------------------------------
348  bool
350  int nHitTrt = m_nHitTrt;
351  int nHitTrtPlusOutliers = m_nHitTrtPlusOutliers;
352  const Trk::TrackParameters* definintParameters=&(track.definingParameters());
353  const Trk::Perigee* perigeeBeforeExtrapolation=dynamic_cast<const Trk::Perigee*>(definintParameters);
354  if (perigeeBeforeExtrapolation && m_usePreselectionCuts) {
355  bool preselectionDecision=preselectionBeforeExtrapolation(*perigeeBeforeExtrapolation);
356  if (!preselectionDecision) {
357  ATH_MSG_DEBUG("Track rejected because of preselection decision!");
358  return false;
359  }
360  } else if (m_usePreselectionCuts) {
361  ATH_MSG_WARNING( " Preselection was requested but cannot be made since the Perigee is not the defining Parameter of the TrackParticle. This is not an error." );
362  }
363  bool isInTrtAcceptance=true;
364  if (!perigeeBeforeExtrapolation || std::fabs(perigeeBeforeExtrapolation->momentum().eta())>m_TrtMaxEtaAcceptance) {
365  isInTrtAcceptance=false;
366  }
367  if (m_useTrackQualityInfo) {
368  const Trk::FitQuality* TrkQuality=track.fitQuality();
369  if (TrkQuality==nullptr) {
370  ATH_MSG_WARNING( "Requested cut on track quality was not possible. TrackParticleBase has no FitQuality object attached. Selection failed." );
371  return false;
372  }
373  if (!decision(TrkQuality)) {
374  return false;
375  }
376  }
377  if (m_useTrackSummaryInfo) {
378  //number of hits, silicon hits, b-layer
379  const Trk::TrackSummary* summary = track.trackSummary();
380  if (nullptr==summary ) {
381  ATH_MSG_WARNING( "Track preselection: cannot create a track summary (but useTrackSummary is true). Selection failed." );
382  return false;
383  }
384 
385 
386  if (m_useSharedHitInfo) {
387  ATH_MSG_ERROR( "Use of InDetDetailedTrackSelectorTool with Trk::TrackParticleBase and useSharedHitInfo is not supported");
388  return false;
389  }
390  const xAOD::TrackParticle* tp = nullptr;
391 
393  nHitTrt = m_trtDCTool->minNumberDCs( (track.trackParameters())[0] );
394  if(m_addToMinHitTrt!=0){
395  nHitTrt += m_addToMinHitTrt;
396  }else{
397  nHitTrt = (int)((double)nHitTrt*m_scaleMinHitTrt);
398  }
399  }
400 
402  nHitTrtPlusOutliers = m_trtDCTool->minNumberDCs( (track.trackParameters())[0] );
404  nHitTrtPlusOutliers += m_addToMinHitTrtWithOutliers;
405  }else{
406  nHitTrtPlusOutliers = (int)((double)nHitTrtPlusOutliers*m_scaleMinHitTrtWithOutliers);
407  }
408  }
409 
410  if ((!perigeeBeforeExtrapolation) or
411  (!decision(summary, tp, m_useSharedHitInfo, isInTrtAcceptance, perigeeBeforeExtrapolation,
412  nHitTrt, nHitTrtPlusOutliers))) {
413  return false;
414  }
415  }
416  const Trk::Perigee* extrapolatedPerigee=dynamic_cast<const Trk::Perigee*>(definintParameters);
417  const Trk::Vertex* myVertex=vertex;
418  if (vertex==nullptr) {
419  myVertex = getBeamSpot(Gaudi::Hive::currentContext());
420  }
421  Trk::PerigeeSurface perigeeSurface(myVertex->position());
422  const Trk::TrackParameters *firstmeaspar=nullptr;
423  for (const auto *i : track.trackParameters()) {
424  if (i->covariance() &&
425  !dynamic_cast<const Trk::Perigee*>(i)) {
426  firstmeaspar=i;
427  break;
428  }
429  }
430  if (!firstmeaspar) {
431  if (!extrapolatedPerigee || !extrapolatedPerigee->covariance() ) {
432  ATH_MSG_DEBUG( " Track Paraemters at first measurement not found. Perigee not found. Cannot do TrackSelection..." );
433  if (myVertex!=vertex) {
434  delete myVertex;
435  myVertex=nullptr;
436  }
437  return false;
438  }
439  //using perigee instead of firstmeasurement, since first measurement was not found...
440  firstmeaspar=&(track.definingParameters());
441  }
442 
443  ATH_MSG_VERBOSE ("Input to extrapolation: " << *firstmeaspar);
444  ATH_MSG_VERBOSE ("Extrapolating to position: " << myVertex->position()[0] << " , " <<
445  myVertex->position()[1] << " , " << myVertex->position()[2]);
446  const Trk::TrackParameters* extrapolatedParameters= firstmeaspar ?
447  m_extrapolator->extrapolate(Gaudi::Hive::currentContext(),
448  *firstmeaspar,
449  perigeeSurface,
451  true,Trk::pion ).release() : nullptr;
452  extrapolatedPerigee = extrapolatedParameters ? dynamic_cast<const Trk::Perigee*>(extrapolatedParameters) : nullptr;
453  if (extrapolatedPerigee==nullptr || !extrapolatedPerigee->covariance()) {
454  ATH_MSG_WARNING( "Track Selector failed to extrapolate track to the vertex: " << myVertex->position() );
455  if (extrapolatedParameters) {
456  ATH_MSG_WARNING( "The return object of the extrapolator was not a perigee even if a perigeeSurface was used!" );
457  delete extrapolatedParameters;
458  extrapolatedParameters = nullptr;
459  }
460  }
461  if (extrapolatedParameters) ATH_MSG_VERBOSE ("Result: " << *extrapolatedParameters);
462  const Trk::RecVertex* recVertex = dynamic_cast<const Trk::RecVertex*>(myVertex);
463  bool dec = decision(extrapolatedPerigee, recVertex ? &recVertex->covariancePosition() : nullptr );
464  if (myVertex!=vertex) {
465  delete myVertex;
466  myVertex=nullptr;
467  }
468  if (extrapolatedPerigee!=&(track.definingParameters())) {
469  delete extrapolatedPerigee;
470  extrapolatedPerigee=nullptr;
471  }
472  if(!dec) {
473  ATH_MSG_DEBUG("Track rejected because of perigee parameters!");
474  return false;
475  }
476  return true;
477  }
478 
480  {
481  if(vertex) return vertex->position();
482  if(m_useEventInfoBs){
484  if (evt.isValid()) {
485  InDet::BeamSpotData temp(evt->beamStatus(), evt->beamPosX(), evt->beamPosY(), evt->beamPosZ(),
486  evt->beamPosSigmaX(), evt->beamPosSigmaY(), evt->beamPosSigmaZ(),
487  evt->beamTiltXZ(), evt->beamTiltYZ(), evt->beamPosSigmaXY());
488  return temp.beamVtx().position();
489  } else {
490  ATH_MSG_WARNING( " Cannot get beamSpot center from xAOD::EventInfo. Using (0,0,0)... " );
491  return Amg::Vector3D(0,0,0);
492  }
493  }else{
495  if (beamSpotHandle.isValid()) {
496  return beamSpotHandle->beamVtx().position();
497  } else {
498  ATH_MSG_WARNING( " Cannot get beamSpot center from BeamSpotData. Using (0,0,0)... " );
499  return Amg::Vector3D(0,0,0);
500  }
501  }
502  }
503 
504  // ---------------------------------------------------------------------
505  bool
507  {
508  int nHitTrt = m_nHitTrt;
509  int nHitTrtPlusOutliers = m_nHitTrtPlusOutliers;
510 
511  const Trk::Perigee& perigee=tp.perigeeParameters();
513  ATH_MSG_DEBUG("Track rejected because of preselection decision!");
514  return false;
515  }
516 
517  if (m_useTrackQualityInfo && !decision(tp.chiSquared(),tp.numberDoF())) {
518  ATH_MSG_DEBUG("Track rejected because of bad fit quality!");
519  return false;
520  }
521 
522  if (m_useTrackSummaryInfo) {
523  //number of hits, silicon hits, b-layer
524 
526  nHitTrt = m_trtDCTool->minNumberDCs( &perigee );
527  if(m_addToMinHitTrt!=0){
528  nHitTrt += m_addToMinHitTrt;
529  }else{
530  nHitTrt = (int)((double)nHitTrt*m_scaleMinHitTrt);
531  }
532  }
534  nHitTrtPlusOutliers = m_trtDCTool->minNumberDCs( &perigee );
536  nHitTrtPlusOutliers += m_addToMinHitTrtWithOutliers;
537  }else{
538  nHitTrtPlusOutliers = (int)((double)nHitTrtPlusOutliers*m_scaleMinHitTrtWithOutliers);
539  }
540  }
546  int nhs = getCount(tp,xAOD::numberOfSCTHoles );
549 
550  //**-----------------------------------------------------------------------
552  double pt = tp.pt();
553  unsigned int it = 0;
554  for(; it< m_ptBenchmarks.size()-1; ++it ) {
555  if(pt>m_ptBenchmarks[it] && pt <=m_ptBenchmarks[it+1] && ns < m_nSCTValues[it]) {
556  ATH_MSG_DEBUG("Track rejected because of Pt-Dependent SCT Hit cut (CAREFUL! Excludes dead modules)") ;
557  return false;
558  }
559  }//end of pt intervals loop
560 
561  //now cutting all the rest by the last value in the vector
562  if(pt>m_ptBenchmarks[it+1] && ns < m_nSCTValues[it+1]) {
563  ATH_MSG_DEBUG("Track rejected because of Pt-Dependent SCT Hit cut (CAREFUL! Excludes dead modules)") ;
564  return false;
565  }
566  }
567 
568  //*--------------------------------------------------------------------------------
569 
570  //normal cuts in all their variety
571 
572  if(nb == 0 && nb < m_nHitBLayer) {
573  ATH_MSG_DEBUG("Track rejected because of nHitBLayer "<<nb<<" < "<<m_nHitBLayer);
574  if (eiph) {
575  ATH_MSG_DEBUG("and track rejected because at least one hit is expected in the innermost pixel layer") ;
576  return false;
577  }else ATH_MSG_DEBUG("recovered track as no b-layer expected") ;
578  }//end of checking the b-layer
579 
580  if(np+npd < m_nHitPix) {
581  ATH_MSG_DEBUG("Track rejected because of nHitPix "<<np+npd<<" < "<<m_nHitPix);
582  return false;
583  }
584 
585  if(np < m_nHitPixPhysical) {
586  ATH_MSG_DEBUG("Track rejected because of nHitPixPhysical "<<np<<" < "<<m_nHitPixPhysical);
587  return false;
588  }
589 
591  if(ns+nsd < m_nHitSct) {
592  ATH_MSG_DEBUG("Track rejected because of nHitSct "<<ns+nsd<<" < "<<m_nHitSct);
593  return false;
594  }
595 
596  if(np+ns+npd+nsd < m_nHitSi) {
597  ATH_MSG_DEBUG("Track rejected because of nHitSi "<<np+npd+ns+nsd<<" < "<<m_nHitSi);
598  return false;
599  }
600 
601  if(np+ns < m_nHitSiPhysical) {
602  ATH_MSG_DEBUG("Track rejected because of nHitSiPhysical "<<np+ns<<" < "<<m_nHitSiPhysical);
603  return false;
604  }
605 
606  if (nb+np+npd< m_nHitBLayerPlusPix){
607  ATH_MSG_DEBUG("Track rejected because of nHitBLayerPlusPix "<<nb+np+npd<<" < "<<m_nHitBLayerPlusPix);
608  return false;
609  }
610 
611  // Cuts on number of Holes
612  if (nhp+nhs > m_nHoles){
613  ATH_MSG_DEBUG("Track rejected because of nHolesPixPlusSCT "<<nhp+nhs<<" > "<<m_nHoles);
614  return false;
615  }
616 
617  if(ndhs > m_nDoubleHoles){
618  ATH_MSG_DEBUG("Track rejected because of nDoubleHolesSCT "<<ndhs<<" > "<<m_nDoubleHoles);
619  return false;
620  }
621 
622  if(nhp > m_nHolesPix){
623  ATH_MSG_DEBUG("Track rejected because of nHolesPix "<<nhp<<" > "<<m_nHolesPix);
624  return false;
625  }
626 
627  if (nhs > m_nHolesSct){
628  ATH_MSG_DEBUG("Track rejected because of nHolesSct "<<nhs<<" > "<<m_nHolesSct);
629  return false;
630  }
631 
632  if (std::fabs(tp.eta())>m_TrtMaxEtaAcceptance) {
634  if(nh < nHitTrt) {
635  ATH_MSG_DEBUG("Track rejected because of nHitTrt "<<nh<<" < "<<nHitTrt);
636  return false;
637  }
638 
640  if (nhh<nHitTrtPlusOutliers) {
641  ATH_MSG_DEBUG("Track rejected because of nHitTrtPlusOutliers "<<nhh<<" < "<<nHitTrtPlusOutliers);
642  return false;
643  }
644 
646  if (nhthits<m_nHitTrtHighE) {
647  ATH_MSG_DEBUG("Track rejected because of nHitTrtHighE "<<nhthits<<" < "<<m_nHitTrtHighE);
648  return false;
649  }
650 
652  if (nhthitsWithOutliers<m_nHitTrtPlusOutliersHighE) {
653  ATH_MSG_DEBUG("Track rejected because of nHitTrtPlusOutliersHighE "<<nhthitsWithOutliers<<" < "<<m_nHitTrtPlusOutliersHighE);
654  return false;
655  }
656 
657  if ( getCount(tp, xAOD::numberOfTRTHits )>0) {
660  if(nhe > m_nHitTrtHighEFraction ) {
661  ATH_MSG_DEBUG("Track rejected because of nHitTrtHighEFraction "<<nhe<<" < "<<m_nHitTrtHighEFraction);
662  return false;
663  }
664  }
665 
669  if(nheh<0.) nheh=0.;
670  if (nheh>1.) nheh=1.;
672  ATH_MSG_DEBUG("Track rejected because of nHitTrtHighEFractionWithOutliers "<<nheh<<" < "<<m_nHitTrtHighEFractionWithOutliers);
673  return false;
674  }
675  }
676  }
677  if (m_useSharedHitInfo) {
679  if (nbs>1) nbs=1;
680  if(nbs>m_nSharedBLayer) {
681  ATH_MSG_DEBUG("Track rejected because of nSharedBLayer "<<nbs<<" < "<<m_nSharedBLayer);
682  return false;
683  }
684 
686  if(nps>m_nSharedPix) {
687  ATH_MSG_DEBUG("Track rejected because of nSharedPix "<<nps<<" < "<<m_nSharedPix);
688  return false;
689  }
690 
692  if(nss > m_nSharedSct) {
693  ATH_MSG_DEBUG("Track rejected because of nSharedSct "<<nss<<" < "<<m_nSharedSct);
694  return false;
695  }
696 
697  int nst = nps + nss;
698  if(nst>m_nSharedSi) {
699  ATH_MSG_DEBUG("Track rejected because of nSharedSi "<<nst<<" < "<<m_nSharedSi);
700  return false;
701  }
702  }
703  }
704  Trk::PerigeeSurface perigeeSurface( getPosOrBeamSpot(vertex) );
705 
706  const Trk::TrackParameters* extrapolatedParameters= m_extrapolator->extrapolate(
707  Gaudi::Hive::currentContext(),
708  perigee,perigeeSurface,
709  Trk::anyDirection,true,Trk::pion).release();
710  const Trk::Perigee* extrapolatedPerigee = extrapolatedParameters ? dynamic_cast<const Trk::Perigee*>(extrapolatedParameters) : nullptr;
711  if (extrapolatedPerigee==nullptr) {
712  ATH_MSG_WARNING( "Extrapolation to the vertex failed: " << perigeeSurface << std::endl << perigee );
713  if (extrapolatedParameters!=nullptr) {
714  ATH_MSG_WARNING( "The return object of the extrapolator was not a perigee even if a perigeeSurface was used!" );
715  delete extrapolatedParameters;
716  extrapolatedParameters=nullptr;
717  }
718  return false;
719  }
720  bool dec = false;
721  if( vertex ){
722  // for now copy the position error
723  AmgSymMatrix(3) vertexError = vertex->covariancePosition();
724  dec = decision(extrapolatedPerigee,&vertexError);
725  }else{
726  dec = decision(extrapolatedPerigee,nullptr);
727  }
728 
729  delete extrapolatedPerigee;
730 
731  if(!dec) {
732  ATH_MSG_DEBUG("Track rejected because of perigee parameters!");
733  return false;
734  }
735 
736  return true;
737  }
738 
739 
740  // ---------------------------------------------------------------------
741  bool InDetDetailedTrackSelectorTool::decision(const Trk::Perigee* track,const AmgSymMatrix(3)* covariancePosition) const {
742 
743  // checking pointer first
744  if(nullptr==track || !track->covariance()) {
745  ATH_MSG_WARNING( "Decision on measured perigee: Zero pointer to measured perigee passed. Selection failed." );
746  return false;
747  }
748 
749  const AmgVector(5)& perigeeParms = track->parameters();
750 
751  // only check pt if mag. field is on
752  const EventContext& ctx = Gaudi::Hive::currentContext();
754  const AtlasFieldCacheCondObj* fieldCondObj{*readHandle};
755  if (fieldCondObj == nullptr) {
756  ATH_MSG_ERROR("execute: Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key());
757  return false;
758  }
759  MagField::AtlasFieldCache fieldCache;
760  fieldCondObj->getInitializedCache (fieldCache);
761 
762  if (fieldCache.solenoidOn()){//B field
763  if (perigeeParms[Trk::qOverP] == 0.) {
764  ATH_MSG_DEBUG("Track rejected because of qOverP == 0.");
765  return false;
766  }
767  double p = std::fabs(1./perigeeParms[Trk::qOverP]);
768  if (p<m_pMin) {
769  ATH_MSG_DEBUG("Track rejected because of p " << p << " < " << m_pMin);
770  return false;
771  }
772  double pt = p*std::sin(perigeeParms[Trk::theta]);
773  if (pt<m_pTMin) {
774  ATH_MSG_DEBUG("Track rejected because of pt " << pt << " < " << m_pTMin);
775  return false;
776  }
777  }
778 
779  if (std::fabs(perigeeParms[Trk::d0]) > m_IPd0Max) {
780  ATH_MSG_DEBUG("Track rejected because of fabs(d0) " << std::fabs(perigeeParms[Trk::d0]) << " > " << m_IPd0Max);
781  return false;
782  }
783 
784  if (std::fabs(perigeeParms[Trk::z0]*std::sin(perigeeParms[Trk::theta])) > m_IPz0Max) {
785  ATH_MSG_DEBUG("Track rejected because of fabs(z0*sin(theta)) " << std::fabs(perigeeParms[Trk::z0]*std::sin(perigeeParms[Trk::theta])) << " > " << m_IPz0Max);
786  return false;
787  }
788 
789  if (std::fabs(perigeeParms[Trk::z0]) > m_z0Max) {
790  ATH_MSG_DEBUG("Track rejected because of fabs(z0) " << std::fabs(perigeeParms[Trk::z0]) << " > " << m_z0Max);
791  return false;
792  }
793 
794  if (sqrt( (*track->covariance())(Trk::z0,Trk::z0) )*std::sin(perigeeParms[Trk::theta])>m_sigIPz0Max) {
795  ATH_MSG_DEBUG("Track rejected because of err(z0)*sin(theta) " << sqrt( (*track->covariance())(Trk::z0,Trk::z0) )*std::sin(perigeeParms[Trk::theta]) << " > " << m_sigIPz0Max);
796  return false;
797  }
798 
799  if (sqrt( (*track->covariance())(Trk::d0,Trk::d0) )>m_sigIPd0Max) {
800  ATH_MSG_DEBUG("Track rejected because of err(d0) " << sqrt( (*track->covariance())(Trk::d0,Trk::d0) ) << " > " << m_sigIPd0Max);
801  return false;
802  }
803 
805 
806  double sinTheta = std::sin(perigeeParms[Trk::theta]);
807  double cosTheta = std::cos(perigeeParms[Trk::theta]);
808  double d0wrtPriVtx = perigeeParms[Trk::d0];
809  double deltaZ = perigeeParms[Trk::z0];
810  double z0wrtPriVtx = deltaZ*sinTheta;
811  double testtrackSigD0 = sqrt( (*track->covariance())(Trk::d0,Trk::d0) );
812  double testtrackSigZ0 = sqrt( (*track->covariance())(Trk::z0,Trk::z0) );
813  double testtrackSigTh = sqrt( (*track->covariance())(Trk::theta,Trk::theta) );
814  // error on IP:
815  double trackPhi = perigeeParms[Trk::phi];
816  double dIPdx = std::sin(trackPhi);
817  double dIPdy = -std::cos(trackPhi);
818  double DD0 = testtrackSigD0*testtrackSigD0;
819  double newD0Err=0;
820  if (covariancePosition) {
821  double DXX = dIPdx*dIPdx* (*covariancePosition)(0,0);
822  double DYY = dIPdy*dIPdy* (*covariancePosition)(1,1);
823  double DXY = 2.*dIPdx*dIPdy* (*covariancePosition)(0,1);
824  newD0Err = DD0 + DXX + DYY + DXY;
825  } else {
826  newD0Err = DD0;
827  }
828 
829  double d0ErrwrtPriVtx = (newD0Err>0 ? sqrt(newD0Err) : -10e-9);
830 
831  if (d0ErrwrtPriVtx<0) {
832  ATH_MSG_WARNING( " error on d0 is negative: numeric error... (not expected. please report!)" );
833  }
834 
835  if (m_d0significanceMax>0) {
836  if (std::fabs(d0wrtPriVtx/d0ErrwrtPriVtx)>m_d0significanceMax) {
837  ATH_MSG_DEBUG("Track rejected because of fabs(d0wrtPriVtx/d0ErrwrtPriVtx) " << std::fabs(d0wrtPriVtx/d0ErrwrtPriVtx) << " > " << m_d0significanceMax);
838  return false;
839  }
840  }
841 
842  if (m_z0significanceMax>0) {
843 
844  // error on zIP:
845  double dZIPdTheta = deltaZ*cosTheta;
846  double dZIPdz0 = sinTheta;
847  double dZIPdzV = -sinTheta;
848  double DTheta2 = dZIPdTheta*dZIPdTheta*testtrackSigTh*testtrackSigTh;
849  double DZ02 = dZIPdz0*dZIPdz0*testtrackSigZ0*testtrackSigZ0;
850  double DThetaZ0 = 2.*dZIPdTheta*dZIPdz0*(*track->covariance())(Trk::theta,Trk::z0);
851  double newZ0Err(0);
852  if (covariancePosition) {
853  double DZV2 = dZIPdzV*dZIPdzV* (*covariancePosition)(2,2);
854  newZ0Err = DTheta2 + DZ02 + DZV2 + DThetaZ0;
855  } else {
856  newZ0Err = DTheta2 + DZ02 + DThetaZ0;
857  }
858 
859  double z0ErrwrtPriVtx = (newZ0Err>0 ? sqrt(newZ0Err) : -10e-9);
860 
861  if (z0ErrwrtPriVtx<0) {
862  ATH_MSG_WARNING( " error on z0 is negative: numeric error... (not expected. please report!)" );
863  }
864 
865  if (std::fabs(z0wrtPriVtx/z0ErrwrtPriVtx)>m_z0significanceMax) {
866  ATH_MSG_DEBUG("Track rejected because of fabs(z0wrtPriVtx/z0ErrwrtPriVtx) " << std::fabs(z0wrtPriVtx/z0ErrwrtPriVtx) << " > " << m_z0significanceMax);
867  return false;
868  }
869  }
870 
871  }
872 
873  if (std::fabs(track->momentum().eta())>m_etaMax) {
874  ATH_MSG_DEBUG("Track rejected because of fabs(eta) " << std::fabs(track->momentum().eta()) << " > " << m_etaMax);
875  return false;
876  }
877 
878  return true;
879  }
880 
881  // ---------------------------------------------------------------------
883  {
884  if(nullptr == trkQuality) {
885  ATH_MSG_WARNING( "Null FitQuality pointer passed. No track Quality cut possible. Selection failed." );
886  return false;
887  }
888  return decision(trkQuality->chiSquared(),trkQuality->numberDoF());
889  }
890 
892 
893  double proba = 1.;
894 
895  if(ndf>0 && chi2>=0.) {
896  Genfun::CumulativeChiSquare myCumulativeChiSquare(ndf);
897  proba = 1.-myCumulativeChiSquare(chi2);
898  }
899 
900  if(chi2>m_fitChi2) {
901  ATH_MSG_DEBUG("Track rejected because of chi2 "<<chi2<<" > "<<m_fitChi2);
902  return false;
903  }
904 
905  if(proba<m_fitProb) {
906  ATH_MSG_DEBUG("Track rejected because of fit probability "<<proba<<" > "<<m_fitProb);
907  return false;
908  }
909  if(!ndf) {
910  ATH_MSG_DEBUG("Track rejected because of ndof = "<<ndf);
911  return false;
912  }
913  if(chi2/double(ndf)>m_fitChi2OnNdfMax) {
914  ATH_MSG_DEBUG("Track rejected because of chi2/ndof "<<chi2/double(ndf)<<" > "<<m_fitChi2OnNdfMax);
915  return false;
916  }
917 
918  return true;
919  }
920 
921 
922  // ---------------------------------------------------------------------
924  const xAOD::TrackParticle* tp,
925  bool useSharedHitInfo,
926  bool useTrtHitInfo,
927  const Trk::Perigee * track,
928  const int nHitTrt,
929  const int nHitTrtPlusOutliers) const
930  {
931  if (summary==nullptr) {
932  ATH_MSG_WARNING( "Null TrackSummary pointer passed. Selection failed." );
933  return false;
934  }
935 
937 
938  if(nb<0) nb=0;
939 
940  int np = summary->get(Trk::numberOfPixelHits);
941  if(np<0) np=0;
942 
943  int npd = summary->get(Trk::numberOfPixelDeadSensors);
944  if(npd<0) npd=0;
945 
946  int ns = summary->get(Trk::numberOfSCTHits);
947  if(ns<0) ns=0;
948 
949  int nhp = summary->get(Trk::numberOfPixelHoles);
950  if (nhp < 0) nhp = 0;
951 
952  int nhs = summary->get(Trk::numberOfSCTHoles);
953  if (nhs < 0) nhs = 0;
954 
955  int ndhs = summary->get(Trk::numberOfSCTDoubleHoles);
956  if (ndhs < 0) ndhs = 0;
957 
958  //**-----------------------------------------------------------------------
959 
961  if (!track) {
962  return false;
963  }
964  const AmgVector(5)& perigeeParms = track->parameters();
965  double p = std::fabs(1./perigeeParms[Trk::qOverP]);
966  double pt = p*std::sin(perigeeParms[Trk::theta]);
967 
968  unsigned int it = 0;
969  for(; it< m_ptBenchmarks.size()-1; ++it ) {
970  if(pt>m_ptBenchmarks[it] && pt <=m_ptBenchmarks[it+1] && ns < m_nSCTValues[it]) {
971  ATH_MSG_DEBUG("Track rejected because of Pt-Dependent SCT Hit cut (CAREFUL! Excludes dead modules)") ;
972  return false;
973  }
974  }//end of pt intervals loop
975 
976  //now cutting all the rest by the last value in the vector
977  if(pt>m_ptBenchmarks[it+1] && ns < m_nSCTValues[it+1]) {
978  ATH_MSG_DEBUG("Track rejected because of Pt-Dependent SCT Hit cut (CAREFUL! Excludes dead modules)") ;
979  return false;
980  }
981 
982  }
983 
984  //*--------------------------------------------------------------------------------
985 
986  //normal cuts in all their variety
987 
988  if(nb == 0 && nb < m_nHitBLayer) {
989  ATH_MSG_DEBUG("Track rejected because of nHitBLayer "<<nb<<" < "<<m_nHitBLayer);
990  if(m_inDetTestPixelLayerTool.empty()) {
991  ATH_MSG_DEBUG("and no blayer tool configured, so will not try to recover track");
992  return false;
993  } else if (m_inDetTestPixelLayerTool->expectHitInInnermostPixelLayer(track)) {
994  ATH_MSG_DEBUG("and track rejected because at least one hit is expected in the innermost pixel layer") ;
995  return false;
996  }else ATH_MSG_DEBUG("recovered track as no b-layer expected") ;
997  }//end of checking the b-layer
998 
999  if(np+npd < m_nHitPix) {
1000  ATH_MSG_DEBUG("Track rejected because of nHitPix "<<np+npd<<" < "<<m_nHitPix);
1001  return false;
1002  }
1003 
1004  if(np < m_nHitPixPhysical) {
1005  ATH_MSG_DEBUG("Track rejected because of nHitPixPhysical "<<np<<" < "<<m_nHitPixPhysical);
1006  return false;
1007  }
1008 
1009  int nsd = summary->get(Trk::numberOfSCTDeadSensors);
1010  if(nsd<0)
1011  nsd=0;
1012 
1013  if(ns+nsd < m_nHitSct)
1014  {
1015  ATH_MSG_DEBUG("Track rejected because of nHitSct "<<ns+nsd<<" < "<<m_nHitSct);
1016  return false;
1017  }
1018 
1019  if((np+ns+npd+nsd) < m_nHitSi)
1020  {
1021  ATH_MSG_DEBUG("Track rejected because of nHitSi "<<np+npd+ns+nsd<<" < "<<m_nHitSi);
1022  return false;
1023  }
1024 
1025  if((np+ns) < m_nHitSiPhysical)
1026  {
1027  ATH_MSG_DEBUG("Track rejected because of nHitSiPhysical "<<np+ns<<" < "<<m_nHitSiPhysical);
1028  return false;
1029  }
1030 
1031  if ((nb+np+npd)< m_nHitBLayerPlusPix)
1032  {
1033  ATH_MSG_DEBUG("Track rejected because of nHitBLayerPlusPix "<<nb+np+npd<<" < "<<m_nHitBLayerPlusPix);
1034  return false;
1035  }
1036 
1037  // Cuts on number of Holes
1038 
1039  if ((nhp+nhs) > m_nHoles)
1040  {
1041  ATH_MSG_DEBUG("Track rejected because of nHolesPixPlusSCT "<<nhp+nhs<<" > "<<m_nHoles);
1042  return false;
1043  }
1044 
1045  if (ndhs > m_nDoubleHoles)
1046  {
1047  ATH_MSG_DEBUG("Track rejected because of nDoubleHolesSCT "<<ndhs<<" > "<<m_nDoubleHoles);
1048  return false;
1049  }
1050 
1051  if (nhp > m_nHolesPix)
1052  {
1053  ATH_MSG_DEBUG("Track rejected because of nHolesPix "<<nhp<<" > "<<m_nHolesPix);
1054  return false;
1055  }
1056 
1057  if (nhs > m_nHolesSct)
1058  {
1059  ATH_MSG_DEBUG("Track rejected because of nHolesSct "<<nhs<<" > "<<m_nHolesSct);
1060  return false;
1061  }
1062 
1063  if (useTrtHitInfo) {
1064 
1065  int nh = summary->get(Trk::numberOfTRTHits);
1066  if(nh<0) nh=0;
1067  if(nh < nHitTrt) {
1068  ATH_MSG_DEBUG("Track rejected because of nHitTrt "<<nh<<" < "<<nHitTrt);
1069  return false;
1070  }
1071 
1072  int nhh = summary->get( Trk::numberOfTRTHits ) + summary->get( Trk::numberOfTRTOutliers );
1073  if (nhh<0) nhh=0;
1074  if (nhh<nHitTrtPlusOutliers) {
1075  ATH_MSG_DEBUG("Track rejected because of nHitTrtPlusOutliers "<<nhh<<" < "<<nHitTrtPlusOutliers);
1076  return false;
1077  }
1078 
1079  int nhthits=summary->get(Trk::numberOfTRTHighThresholdHits);
1080  if (nhthits<0) nhthits=0;
1081  if (nhthits<m_nHitTrtHighE) {
1082  ATH_MSG_DEBUG("Track rejected because of nHitTrtHighE "<<nhthits<<" < "<<m_nHitTrtHighE);
1083  return false;
1084  }
1085 
1087  if (nhthitsWithOutliers<0) nhthitsWithOutliers=0;
1088  if (nhthitsWithOutliers<m_nHitTrtPlusOutliersHighE) {
1089  ATH_MSG_DEBUG("Track rejected because of nHitTrtPlusOutliersHighE "<<nhthitsWithOutliers<<" < "<<m_nHitTrtPlusOutliersHighE);
1090  return false;
1091  }
1092 
1093  if (summary->get( Trk :: numberOfTRTHits )>0) {
1095  if(nhe<0.) nhe=0.;
1096  if(nhe > m_nHitTrtHighEFraction ) {
1097  ATH_MSG_DEBUG("Track rejected because of nHitTrtHighEFraction "<<nhe<<" < "<<m_nHitTrtHighEFraction);
1098  return false;
1099  }
1100  }
1101 
1102  if ( summary->get( Trk :: numberOfTRTHits ) + summary->get( Trk :: numberOfTRTOutliers ) > 0 ) {
1104  (double)(summary->get( Trk::numberOfTRTHits) + summary->get( Trk :: numberOfTRTOutliers ) );
1105  if(nheh<0.) nheh=0.;
1106  if (nheh>1.) nheh=1.;
1108  ATH_MSG_DEBUG("Track rejected because of nHitTrtHighEFractionWithOutliers "<<nheh<<" < "<<m_nHitTrtHighEFractionWithOutliers);
1109  return false;
1110  }
1111  }
1112  }
1113 
1114  if (useSharedHitInfo) {
1115  if(!tp){
1116  ATH_MSG_DEBUG("Track rejected because xAOD::TrackParticle not available");
1117  return false;
1118  }
1119 
1121  if(nbs < 0) nbs = 0;
1122  if (nbs>1) nbs=1;
1123  if(nbs>m_nSharedBLayer) {
1124  ATH_MSG_DEBUG("Track rejected because of nSharedBLayer "<<nbs<<" < "<<m_nSharedBLayer);
1125  return false;
1126  }
1127 
1129  if(nps < 0) nps = 0;
1130  if(nps>m_nSharedPix) {
1131  ATH_MSG_DEBUG("Track rejected because of nSharedPix "<<nps<<" < "<<m_nSharedPix);
1132  return false;
1133  }
1134 
1136  if(nss < 0) nss = 0;
1137  if(nss > m_nSharedSct) {
1138  ATH_MSG_DEBUG("Track rejected because of nSharedSct "<<nss<<" < "<<m_nSharedSct);
1139  return false;
1140  }
1141 
1142  int nst = nps + nss;
1143  if(nst>m_nSharedSi) {
1144  ATH_MSG_DEBUG("Track rejected because of nSharedSi "<<nst<<" < "<<m_nSharedSi);
1145  return false;
1146  }
1147  }
1148 
1149  return true;
1150 
1151  }
1152 
1153  // ---------------------------------------------------------------------
1155  {
1156  const AmgVector(5)& perigeeParms = myPerigee.parameters();
1157 
1158  // only check pt if mag. field is on
1159  const EventContext& ctx = Gaudi::Hive::currentContext();
1161  const AtlasFieldCacheCondObj* fieldCondObj{*readHandle};
1162  if (fieldCondObj == nullptr) {
1163  ATH_MSG_ERROR("execute: Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key());
1164  return false;
1165  }
1166  MagField::AtlasFieldCache fieldCache;
1167  fieldCondObj->getInitializedCache (fieldCache);
1168 
1169  if (fieldCache.solenoidOn()){//B field
1170  if (perigeeParms[Trk::qOverP] == 0.) {
1171  ATH_MSG_DEBUG("Track rejected because of perigee qOverP == 0.");
1172  return false;
1173  }
1174  double p = std::fabs(1./perigeeParms[Trk::qOverP]);
1175  if (p<m_pMin) {
1176  ATH_MSG_DEBUG("Track rejected because of p " << p << " < " << m_pMin);
1177  return false;
1178  }
1179  double pt = p*std::sin(perigeeParms[Trk::theta]);
1180  if (pt<m_pTMin) {
1181  ATH_MSG_DEBUG("Track rejected because of pt " << pt << " < " << m_pTMin);
1182  return false;
1183  }
1184  }
1185 
1186  if (std::fabs(perigeeParms[Trk::d0]) > m_d0MaxPreselection) {
1187  ATH_MSG_DEBUG("Track rejected because of fabs(d0) "<<std::fabs(perigeeParms[Trk::d0])<<" < "<<m_d0MaxPreselection);
1188  return false;
1189  }
1190 
1191  return true;
1192  }
1193 
1194 } //end of namespace definitions
InDet::InDetDetailedTrackSelectorTool::m_IPz0Max
double m_IPz0Max
Definition: InDetDetailedTrackSelectorTool.h:101
InDet::InDetDetailedTrackSelectorTool::m_trackSumTool
ToolHandle< Trk::ITrackSummaryTool > m_trackSumTool
Track summary tool.
Definition: InDetDetailedTrackSelectorTool.h:158
covarianceTool.ndf
ndf
Definition: covarianceTool.py:678
Trk::numberOfPixelHits
@ numberOfPixelHits
number of pixel layers on track with absence of hits
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:57
Trk::anyDirection
@ anyDirection
Definition: PropDirection.h:22
RecVertex.h
xAOD::numberOfPixelHoles
@ numberOfPixelHoles
number of pixel layers on track with absence of hits [unit8_t].
Definition: TrackingPrimitives.h:261
InDet::InDetDetailedTrackSelectorTool::m_z0Max
double m_z0Max
Definition: InDetDetailedTrackSelectorTool.h:102
Trk::Vertex
Definition: Tracking/TrkEvent/VxVertex/VxVertex/Vertex.h:26
ITrackSummaryTool.h
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
Trk::numberOfTRTHighThresholdHits
@ numberOfTRTHighThresholdHits
total number of TRT hits which pass the high threshold
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:87
InDet::InDetDetailedTrackSelectorTool::m_nHitBLayerPlusPix
int m_nHitBLayerPlusPix
Definition: InDetDetailedTrackSelectorTool.h:113
python.PerfMonSerializer.p
def p
Definition: PerfMonSerializer.py:743
InDet::InDetDetailedTrackSelectorTool::m_etaMax
double m_etaMax
Definition: InDetDetailedTrackSelectorTool.h:107
Trk::numberOfTRTHighThresholdOutliers
@ numberOfTRTHighThresholdOutliers
number of dead TRT straws crossed
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:93
Trk::numberOfInnermostPixelLayerHits
@ numberOfInnermostPixelLayerHits
these are the hits in the 1st pixel layer
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:53
xAOD::numberOfSCTSharedHits
@ numberOfSCTSharedHits
number of SCT hits shared by several tracks [unit8_t].
Definition: TrackingPrimitives.h:272
xAOD::Vertex
Vertex_v1 Vertex
Define the latest version of the vertex class.
Definition: Event/xAOD/xAODTracking/xAODTracking/Vertex.h:16
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
PerigeeSurface.h
Trk::Track
The ATLAS Track class.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/Track.h:73
AtlasFieldCacheCondObj
Definition: AtlasFieldCacheCondObj.h:19
InDetDetailedTrackSelectorTool.h
CaloCellPos2Ntuple.int
int
Definition: CaloCellPos2Ntuple.py:24
Trk::PerigeeSurface
Definition: PerigeeSurface.h:43
InDet::InDetDetailedTrackSelectorTool::m_nHitSiPhysical
int m_nHitSiPhysical
at least n physical hits in pixel+SCT
Definition: InDetDetailedTrackSelectorTool.h:118
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
InDet::InDetDetailedTrackSelectorTool::m_nHitTrt
int m_nHitTrt
Definition: InDetDetailedTrackSelectorTool.h:120
InDet::InDetDetailedTrackSelectorTool::preselectionBeforeExtrapolation
bool preselectionBeforeExtrapolation(const Trk::Perigee &myPerigee) const
Definition: InDetDetailedTrackSelectorTool.cxx:1154
Trk::numberOfSCTDeadSensors
@ numberOfSCTDeadSensors
number of TRT hits
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:76
Trk::ParametersT
Dummy class used to allow special convertors to be called for surfaces owned by a detector element.
Definition: EMErrorDetail.h:25
InDet
DUMMY Primary Vertex Finder.
Definition: VP1ErrorUtils.h:36
InDet::InDetDetailedTrackSelectorTool::~InDetDetailedTrackSelectorTool
~InDetDetailedTrackSelectorTool()
InDet::InDetDetailedTrackSelectorTool::m_ptBenchmarks
std::vector< float > m_ptBenchmarks
Definition: InDetDetailedTrackSelectorTool.h:174
InDet::InDetDetailedTrackSelectorTool::m_fieldCacheCondObjInputKey
SG::ReadCondHandleKey< AtlasFieldCacheCondObj > m_fieldCacheCondObjInputKey
Definition: InDetDetailedTrackSelectorTool.h:166
InDet::InDetDetailedTrackSelectorTool::m_nSCTValues
std::vector< int > m_nSCTValues
Definition: InDetDetailedTrackSelectorTool.h:176
InDet::InDetDetailedTrackSelectorTool::m_nHolesPix
int m_nHolesPix
Definition: InDetDetailedTrackSelectorTool.h:139
ITrackParticleCreatorTool.h
InDet::InDetDetailedTrackSelectorTool::m_nSharedSct
int m_nSharedSct
Definition: InDetDetailedTrackSelectorTool.h:134
skel.it
it
Definition: skel.GENtoEVGEN.py:423
InDet::InDetDetailedTrackSelectorTool::decision
bool decision(const Trk::Track &track, const Trk::Vertex *vertex) const
Definition: InDetDetailedTrackSelectorTool.cxx:213
test_pyathena.pt
pt
Definition: test_pyathena.py:11
InDet::InDetDetailedTrackSelectorTool::m_IPd0Max
double m_IPd0Max
Definition: InDetDetailedTrackSelectorTool.h:100
InDet::InDetDetailedTrackSelectorTool::getCount
int getCount(const xAOD::TrackParticle &tp, xAOD::SummaryType type) const
Definition: InDetDetailedTrackSelectorTool.h:79
ITrtDriftCircleCutTool.h
ParticleTest.tp
tp
Definition: ParticleTest.py:25
Trk::z0
@ z0
Definition: ParamDefs.h:70
InDet::InDetDetailedTrackSelectorTool::m_nSharedBLayer
int m_nSharedBLayer
Definition: InDetDetailedTrackSelectorTool.h:132
InDet::InDetDetailedTrackSelectorTool::m_inDetTestPixelLayerTool
ToolHandle< InDet::IInDetTestPixelLayerTool > m_inDetTestPixelLayerTool
Definition: InDetDetailedTrackSelectorTool.h:164
IExtrapolator.h
xAOD::numberOfPixelHits
@ numberOfPixelHits
these are the pixel hits, including the b-layer [unit8_t].
Definition: TrackingPrimitives.h:259
xAOD::expectInnermostPixelLayerHit
@ expectInnermostPixelLayerHit
Do we expect a 0th-layer barrel hit for this track?
Definition: TrackingPrimitives.h:236
xAOD::numberOfTRTHits
@ numberOfTRTHits
number of TRT hits [unit8_t].
Definition: TrackingPrimitives.h:275
LArG4FSStartPointFilter.evt
evt
Definition: LArG4FSStartPointFilter.py:42
InDet::BeamSpotData::beamVtx
const Trk::RecVertex & beamVtx() const noexcept
Definition: BeamSpotData.h:79
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
drawFromPickle.cos
cos
Definition: drawFromPickle.py:36
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::InDetDetailedTrackSelectorTool::m_trackSumToolAvailable
bool m_trackSumToolAvailable
Definition: InDetDetailedTrackSelectorTool.h:168
InDet::InDetDetailedTrackSelectorTool::m_nHitPix
int m_nHitPix
Definition: InDetDetailedTrackSelectorTool.h:112
PlotPulseshapeFromCool.np
np
Definition: PlotPulseshapeFromCool.py:64
InDet::InDetDetailedTrackSelectorTool::m_addToMinHitTrt
int m_addToMinHitTrt
Definition: InDetDetailedTrackSelectorTool.h:148
InDet::InDetDetailedTrackSelectorTool::m_partCreatorToolAvailable
bool m_partCreatorToolAvailable
Definition: InDetDetailedTrackSelectorTool.h:169
Trk::numberOfSCTHoles
@ numberOfSCTHoles
number of Holes in both sides of a SCT module
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:73
InDet::InDetDetailedTrackSelectorTool::initialize
StatusCode initialize()
Definition: InDetDetailedTrackSelectorTool.cxx:152
InDet::InDetDetailedTrackSelectorTool::m_fitChi2
double m_fitChi2
Definition: InDetDetailedTrackSelectorTool.h:143
InDet::InDetDetailedTrackSelectorTool::m_TrtMaxEtaAcceptance
double m_TrtMaxEtaAcceptance
Definition: InDetDetailedTrackSelectorTool.h:130
AmgSymMatrix
#define AmgSymMatrix(dim)
Definition: EventPrimitives.h:52
InDet::InDetDetailedTrackSelectorTool::InDetDetailedTrackSelectorTool
InDetDetailedTrackSelectorTool(const std::string &t, const std::string &n, const IInterface *p)
Definition: InDetDetailedTrackSelectorTool.cxx:37
InDet::InDetDetailedTrackSelectorTool::m_nSharedPix
int m_nSharedPix
Definition: InDetDetailedTrackSelectorTool.h:133
Trk::RecVertex
Trk::RecVertex inherits from Trk::Vertex.
Definition: RecVertex.h:44
InDet::InDetDetailedTrackSelectorTool::m_z0significanceMax
double m_z0significanceMax
Definition: InDetDetailedTrackSelectorTool.h:106
xAOD::numberOfTRTHighThresholdHits
@ numberOfTRTHighThresholdHits
number of TRT hits which pass the high threshold (only xenon counted) [unit8_t].
Definition: TrackingPrimitives.h:278
InDet::InDetDetailedTrackSelectorTool::m_scaleMinHitTrt
double m_scaleMinHitTrt
Definition: InDetDetailedTrackSelectorTool.h:147
Track.h
InDet::InDetDetailedTrackSelectorTool::m_nHitTrtHighE
int m_nHitTrtHighE
Definition: InDetDetailedTrackSelectorTool.h:124
Trk::TrackParticleBase
Definition: TrackParticleBase.h:41
InDet::InDetDetailedTrackSelectorTool::getBeamSpot
Trk::Vertex * getBeamSpot(const EventContext &) const
Definition: InDetDetailedTrackSelectorTool.cxx:122
IInDetTestPixelLayerTool.h
GeoPrimitives.h
InDet::InDetDetailedTrackSelectorTool::m_scaleMinHitTrtWithOutliers
double m_scaleMinHitTrtWithOutliers
Definition: InDetDetailedTrackSelectorTool.h:149
InDet::InDetDetailedTrackSelectorTool::m_d0MaxPreselection
double m_d0MaxPreselection
Definition: InDetDetailedTrackSelectorTool.h:153
InDet::InDetDetailedTrackSelectorTool::m_d0significanceMax
double m_d0significanceMax
Definition: InDetDetailedTrackSelectorTool.h:105
xAOD::numberOfTRTHighThresholdOutliers
@ numberOfTRTHighThresholdOutliers
number of TRT high threshold outliers (only xenon counted) [unit8_t].
Definition: TrackingPrimitives.h:281
InDet::InDetDetailedTrackSelectorTool::m_nHitTrtPlusOutliersHighE
int m_nHitTrtPlusOutliersHighE
Definition: InDetDetailedTrackSelectorTool.h:125
xAOD::numberOfPixelSharedHits
@ numberOfPixelSharedHits
number of Pixel all-layer hits shared by several tracks [unit8_t].
Definition: TrackingPrimitives.h:262
InDet::InDetDetailedTrackSelectorTool::m_nHoles
int m_nHoles
Definition: InDetDetailedTrackSelectorTool.h:137
InDet::InDetDetailedTrackSelectorTool::m_usePtDependentCuts
bool m_usePtDependentCuts
Definition: InDetDetailedTrackSelectorTool.h:172
InDet::InDetDetailedTrackSelectorTool::m_particleCreator
ToolHandle< Trk::ITrackParticleCreatorTool > m_particleCreator
TrackParticle creator tool.
Definition: InDetDetailedTrackSelectorTool.h:159
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
InDet::InDetDetailedTrackSelectorTool::getPosOrBeamSpot
Amg::Vector3D getPosOrBeamSpot(const xAOD::Vertex *) const
Definition: InDetDetailedTrackSelectorTool.cxx:479
InDet::InDetDetailedTrackSelectorTool::m_sigIPz0Max
double m_sigIPz0Max
Definition: InDetDetailedTrackSelectorTool.h:104
lumiFormat.i
int i
Definition: lumiFormat.py:92
Trk::numberOfTRTOutliers
@ numberOfTRTOutliers
number of TRT holes
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:81
beamspotman.n
n
Definition: beamspotman.py:731
Trk::theta
@ theta
Definition: ParamDefs.h:72
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
Trk::numberOfSCTHits
@ numberOfSCTHits
number of SCT holes
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:71
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
AmgVector
AmgVector(4) T2BSTrackFilterTool
Definition: T2BSTrackFilterTool.cxx:114
InDet::InDetDetailedTrackSelectorTool::m_fitProb
double m_fitProb
Definition: InDetDetailedTrackSelectorTool.h:144
Trk::numberOfPixelDeadSensors
@ numberOfPixelDeadSensors
number of pixel hits with broad errors (width/sqrt(12))
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:65
Trk::pion
@ pion
Definition: ParticleHypothesis.h:29
chi2
double chi2(TH1 *h0, TH1 *h1)
Definition: comparitor.cxx:522
InDet::InDetDetailedTrackSelectorTool::m_nHitTrtHighEFractionWithOutliers
double m_nHitTrtHighEFractionWithOutliers
Definition: InDetDetailedTrackSelectorTool.h:128
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
InDet::InDetDetailedTrackSelectorTool::m_nHolesSct
int m_nHolesSct
Definition: InDetDetailedTrackSelectorTool.h:140
InDet::InDetDetailedTrackSelectorTool::m_pTMin
double m_pTMin
Definition: InDetDetailedTrackSelectorTool.h:98
InDet::InDetDetailedTrackSelectorTool::m_fitChi2OnNdfMax
double m_fitChi2OnNdfMax
Definition: InDetDetailedTrackSelectorTool.h:145
Trk::FitQuality
Class to represent and store fit qualities from track reconstruction in terms of and number of degre...
Definition: FitQuality.h:97
TrackSummary.h
Trk::ParametersBase
Definition: ParametersBase.h:55
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
Trk::Vertex::position
const Amg::Vector3D & position() const
return position of vertex
Definition: Vertex.cxx:72
xAOD::double
double
Definition: CompositeParticle_v1.cxx:159
xAOD::numberOfSCTHoles
@ numberOfSCTHoles
number of SCT holes [unit8_t].
Definition: TrackingPrimitives.h:270
InDet::InDetDetailedTrackSelectorTool::m_addToMinHitTrtWithOutliers
int m_addToMinHitTrtWithOutliers
Definition: InDetDetailedTrackSelectorTool.h:150
Vertex.h
InDet::InDetDetailedTrackSelectorTool::m_nHitSct
int m_nHitSct
Definition: InDetDetailedTrackSelectorTool.h:114
MagField::AtlasFieldCache::solenoidOn
bool solenoidOn() const
status of the magnets
InDet::InDetDetailedTrackSelectorTool::m_pMin
double m_pMin
Definition: InDetDetailedTrackSelectorTool.h:99
Trk::numberOfPixelHoles
@ numberOfPixelHoles
number of pixels which have a ganged ambiguity.
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:59
InDet::InDetDetailedTrackSelectorTool::m_eventInfo_key
SG::ReadHandleKey< xAOD::EventInfo > m_eventInfo_key
Definition: InDetDetailedTrackSelectorTool.h:177
EventPrimitives.h
Trk::numberOfTRTHits
@ numberOfTRTHits
number of TRT outliers
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:79
InDet::InDetDetailedTrackSelectorTool::m_beamSpotKey
SG::ReadCondHandleKey< InDet::BeamSpotData > m_beamSpotKey
Definition: InDetDetailedTrackSelectorTool.h:161
InDet::InDetDetailedTrackSelectorTool::m_extrapolator
ToolHandle< Trk::IExtrapolator > m_extrapolator
Extrapolator tool.
Definition: InDetDetailedTrackSelectorTool.h:160
Trk::TrackSummary
A summary of the information contained by a track.
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:287
Trk::d0
@ d0
Definition: ParamDefs.h:69
InDet::InDetDetailedTrackSelectorTool::m_nHitTrtHighEFraction
double m_nHitTrtHighEFraction
Definition: InDetDetailedTrackSelectorTool.h:127
Vertex.h
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
InDet::InDetDetailedTrackSelectorTool::m_useTrackSummaryInfo
bool m_useTrackSummaryInfo
Definition: InDetDetailedTrackSelectorTool.h:109
InDet::InDetDetailedTrackSelectorTool::m_useEtaDepententMinHitTrtWithOutliers
bool m_useEtaDepententMinHitTrtWithOutliers
Definition: InDetDetailedTrackSelectorTool.h:156
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
InDet::InDetDetailedTrackSelectorTool::m_nHitBLayer
int m_nHitBLayer
Definition: InDetDetailedTrackSelectorTool.h:111
xAOD::numberOfTRTOutliers
@ numberOfTRTOutliers
number of TRT outliers [unit8_t].
Definition: TrackingPrimitives.h:276
python.SystemOfUnits.mm
int mm
Definition: SystemOfUnits.py:83
TrackParticle.h
Trk::vertex
@ vertex
Definition: MeasurementType.h:21
InDet::BeamSpotData
Definition: BeamSpotData.h:21
DiTauMassTools::MaxHistStrategyV2::e
e
Definition: PhysicsAnalysis/TauID/DiTauMassTools/DiTauMassTools/HelperFunctions.h:26
InDet::InDetDetailedTrackSelectorTool::finalize
StatusCode finalize()
Definition: InDetDetailedTrackSelectorTool.cxx:205
InDet::InDetDetailedTrackSelectorTool::m_usePreselectionCuts
bool m_usePreselectionCuts
Definition: InDetDetailedTrackSelectorTool.h:152
xAOD::Vertex_v1
Class describing a Vertex.
Definition: Vertex_v1.h:42
InDet::InDetDetailedTrackSelectorTool::m_nDoubleHoles
int m_nDoubleHoles
Definition: InDetDetailedTrackSelectorTool.h:138
InDet::InDetDetailedTrackSelectorTool::m_nSharedSi
int m_nSharedSi
Definition: InDetDetailedTrackSelectorTool.h:135
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
xAOD::numberOfSCTDeadSensors
@ numberOfSCTDeadSensors
number of dead SCT sensors crossed [unit8_t].
Definition: TrackingPrimitives.h:273
InDet::InDetDetailedTrackSelectorTool::m_useSharedHitInfo
bool m_useSharedHitInfo
Definition: InDetDetailedTrackSelectorTool.h:131
MagField::AtlasFieldCache
Local cache for magnetic field (based on MagFieldServices/AtlasFieldSvcTLS.h)
Definition: AtlasFieldCache.h:43
Trk::qOverP
@ qOverP
perigee
Definition: ParamDefs.h:73
InDet::InDetDetailedTrackSelectorTool::m_trtDCTool
ToolHandle< ITrtDriftCircleCutTool > m_trtDCTool
Tool to get eta dependent cut on number of TRT hits.
Definition: InDetDetailedTrackSelectorTool.h:162
xAOD::numberOfInnermostPixelLayerSharedHits
@ numberOfInnermostPixelLayerSharedHits
number of Pixel 0th layer barrel hits shared by several tracks.
Definition: TrackingPrimitives.h:239
InDet::InDetDetailedTrackSelectorTool::m_nHitTrtPlusOutliers
int m_nHitTrtPlusOutliers
Definition: InDetDetailedTrackSelectorTool.h:121
xAOD::numberOfSCTHits
@ numberOfSCTHits
number of hits in SCT [unit8_t].
Definition: TrackingPrimitives.h:268
Trk::FitQuality::chiSquared
double chiSquared() const
returns the of the overall track fit
Definition: FitQuality.h:56
python.SystemOfUnits.ns
int ns
Definition: SystemOfUnits.py:130
InDet::InDetDetailedTrackSelectorTool::m_useTrackQualityInfo
bool m_useTrackQualityInfo
Definition: InDetDetailedTrackSelectorTool.h:142
InDet::InDetDetailedTrackSelectorTool::m_nHitPixPhysical
int m_nHitPixPhysical
at least n physical hits in pixel
Definition: InDetDetailedTrackSelectorTool.h:117
TauGNNUtils::Variables::Track::trackPhi
bool trackPhi(const xAOD::TauJet &, const xAOD::TauTrack &track, double &out)
Definition: TauGNNUtils.cxx:480
Trk::phi
@ phi
Definition: ParamDefs.h:81
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
InDet::InDetDetailedTrackSelectorTool::m_nHitSi
int m_nHitSi
Definition: InDetDetailedTrackSelectorTool.h:115
InDet::InDetDetailedTrackSelectorTool::m_useEtaDepententMinHitTrt
bool m_useEtaDepententMinHitTrt
Definition: InDetDetailedTrackSelectorTool.h:155
xAOD::numberOfPixelDeadSensors
@ numberOfPixelDeadSensors
number of dead pixel sensors crossed [unit8_t].
Definition: TrackingPrimitives.h:266
xAOD::track
@ track
Definition: TrackingPrimitives.h:512
xAOD::TrackParticle_v1
Class describing a TrackParticle.
Definition: TrackParticle_v1.h:43
InDet::InDetDetailedTrackSelectorTool::m_useEventInfoBs
bool m_useEventInfoBs
Access beamspot via the EvenInfo object.
Definition: InDetDetailedTrackSelectorTool.h:178
InDet::InDetDetailedTrackSelectorTool::m_sigIPd0Max
double m_sigIPd0Max
Definition: InDetDetailedTrackSelectorTool.h:103
drawFromPickle.sin
sin
Definition: drawFromPickle.py:36
xAOD::numberOfSCTDoubleHoles
@ numberOfSCTDoubleHoles
number of Holes in both sides of a SCT module [unit8_t].
Definition: TrackingPrimitives.h:271
AthAlgTool
Definition: AthAlgTool.h:26
makeComparison.deltaZ
int deltaZ
Definition: makeComparison.py:46
FitQuality.h
hotSpotInTAG.nb
nb
Definition: hotSpotInTAG.py:164
Trk::numberOfSCTDoubleHoles
@ numberOfSCTDoubleHoles
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:75
GeV
#define GeV
Definition: CaloTransverseBalanceVecMon.cxx:30
xAOD::numberOfInnermostPixelLayerHits
@ numberOfInnermostPixelLayerHits
these are the hits in the 0th pixel barrel layer
Definition: TrackingPrimitives.h:237
SCT_Monitoring::summary
@ summary
Definition: SCT_MonitoringNumbers.h:65