ATLAS Offline Software
InDetAmbiScoringTool.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 // Markus Elsing
8 
10 #include "TrkTrack/Track.h"
14 #include "CLHEP/GenericFunctions/CumulativeChiSquare.hh"
16 #include "StoreGate/ReadHandle.h"
17 #include "StoreGate/WriteHandle.h"
18 
19 
20 //---------------------------------------------------------------------------------------------------------------------
21 
23  const std::string& n,
24  const IInterface* p ) :
25  AthAlgTool(t,n,p),
26  // Initialization of ScoreModifiers variables
27  m_maxDblHoles(-1),
28  m_maxPixHoles(-1),
29  m_maxSCT_Holes(-1),
30  m_maxHits(-1),
31  m_maxSigmaChi2(-1),
32  m_maxTrtRatio(-1),
33  m_maxTrtFittedRatio(-1),
34  m_maxB_LayerHits(-1),
35  m_maxPixelHits(-1),
36  m_maxPixLay(-1),
37  m_maxGangedFakes(-1),
38  m_selectortool("InDet::InDetTrtDriftCircleCutTool", this),
39  m_summaryTypeScore(Trk::numberOfTrackSummaryTypes),
40  m_extrapolator("Trk::Extrapolator", this)
41 {
42  declareInterface<Trk::ITrackScoringTool>(this);
43 
44  // declare properties
45  declareProperty("minPt", m_minPt = 500.);
46  declareProperty("maxEta", m_maxEta = 2.7);
47  declareProperty("maxRPhiImp", m_maxRPhiImp = 10.);
48  declareProperty("maxZImp", m_maxZImp = 250.);
49 
50  // changed cuts on the selction of tracks
51  declareProperty("minSiClusters", m_minSiClusters = 7);
52  declareProperty("maxDoubleHoles", m_maxDoubleHoles = 2);
53  declareProperty("maxSiHoles", m_maxSiHoles = 5, "max number of Silicon (Pixel+SCT) holes");
54  declareProperty("maxPixelHoles", m_maxPixelHoles = 5, "max number of Pixel holes");
55  declareProperty("maxSCTHoles", m_maxSctHoles = 5, "max number of SCT holes");
56  declareProperty("minTRTonTrk", m_minTRTonTrk = 9);
57  declareProperty("minTRTPrecisionFraction", m_minTRTprecision = 0.5);
58  declareProperty("minPixel", m_minPixel = 0);
59 
60  // which detectors to use
61  declareProperty("usePixel", m_usePixel = true);
62  declareProperty("useSCT", m_useSCT = true);
63 
64  // switches and tools
65  declareProperty("useAmbigFcn", m_useAmbigFcn = true);
66  declareProperty("useTRT_AmbigFcn", m_useTRT_AmbigFcn = false);
67  declareProperty("useSigmaChi2", m_useSigmaChi2 = false);
68 
69  // tools
70  declareProperty("Extrapolator", m_extrapolator);
71  declareProperty("DriftCircleCutTool",m_selectortool );
72 
73  declareProperty("maxRPhiImpEM", m_maxRPhiImpEM = 50. );
74  declareProperty("doEmCaloSeed", m_useEmClusSeed = true );
75  declareProperty("phiWidthEM", m_phiWidthEm = 0.075 );
76  declareProperty("etaWidthEM", m_etaWidthEm = 0.05 );
77 
78  declareProperty("useITkAmbigFcn", m_useITkAmbigFcn = false);
79 
80 
81  //set values for scores
83  m_summaryTypeScore[Trk::numberOfPixelHoles] = -10; // a hole is bad
84  m_summaryTypeScore[Trk::numberOfInnermostPixelLayerHits] = 10; // addition for being b-layer
85  m_summaryTypeScore[Trk::numberOfGangedPixels] = -5; // decrease for being ganged
86  m_summaryTypeScore[Trk::numberOfGangedFlaggedFakes] = -10; // decrease for being ganged fake
87  m_summaryTypeScore[Trk::numberOfSCTHits] = 10; // half of a pixel, since only 1dim
88  m_summaryTypeScore[Trk::numberOfSCTHoles] = -5; // a hole is bad !
89  m_summaryTypeScore[Trk::numberOfSCTDoubleHoles] = -15; // a double hole is even worse !
90  m_summaryTypeScore[Trk::numberOfTRTHits] = 1; // 10 straws ~ 1 SCT
91  m_summaryTypeScore[Trk::numberOfTRTHighThresholdHits] = 0; // addition for being TR
92  m_summaryTypeScore[Trk::numberOfOutliersOnTrack] = -1; // -ME- TRT oulier should not kill 5 TRT on track (was -5)
93 
94  // scoring for Muons not needed
102 
103 }
104 
105 //---------------------------------------------------------------------------------------------------------------------
106 
108 {
110  if (sc.isFailure()) return sc;
111 
112  sc = m_extrapolator.retrieve();
113  if (sc.isFailure()) {
114  msg(MSG::FATAL) << "Failed to retrieve tool " << m_extrapolator << endmsg;
115  return StatusCode::FAILURE;
116  } else
117  msg(MSG::DEBUG) << "Retrieved tool " << m_extrapolator << endmsg;
118 
119  // Get segment selector tool
120  //
121  ATH_CHECK(m_selectortool.retrieve( DisableTool{m_selectortool.empty()} ) );
122 
124 
126  msg(MSG::FATAL) << "Both on, normal ambi funciton and the one for back tracking, configuration problem, not recoverable" << endmsg;
127  return StatusCode::FAILURE;
128  }
129 
130  // Read handle for AtlasFieldCacheCondObj
132 
133  if (not m_etaDependentCutsSvc.name().empty()) ATH_CHECK(m_etaDependentCutsSvc.retrieve());
134 
136 
138 
139  return StatusCode::SUCCESS;
140 }
141 
142 //---------------------------------------------------------------------------------------------------------------------
143 
145 {
146  if (!track.trackSummary()) {
147  ATH_MSG_FATAL("Track without a summary");
148  }
149  ATH_MSG_VERBOSE ("Track has TrackSummary "<<*track.trackSummary());
151 
152  ATH_MSG_DEBUG ("Track has Score: "<<score);
153 
154  return score;
155 }
156 
157 //---------------------------------------------------------------------------------------------------------------------
158 
160 {
161  int numPixel = trackSummary.get(Trk::numberOfPixelHits);
162  int numSCT = trackSummary.get(Trk::numberOfSCTHits);
163  int numTRT = trackSummary.get(Trk::numberOfTRTHits);
164  int numTRTTube = trackSummary.get(Trk::numberOfTRTTubeHits);
165  int numPixelHoles = trackSummary.get(Trk::numberOfPixelHoles);
166  int numSCTHoles = trackSummary.get(Trk::numberOfSCTHoles);
167  int numSCTDoubleHoles = trackSummary.get(Trk::numberOfSCTDoubleHoles);
168  int numPixelDead = trackSummary.get(Trk::numberOfPixelDeadSensors);
169  int numSCTDead = trackSummary.get(Trk::numberOfSCTDeadSensors);
170 
171  if (numPixelDead<0) numPixelDead = 0;
172  if (numSCTDead<0) numSCTDead = 0;
173 
174  // is this a track from the pattern or a fitted track ?
175  bool ispatterntrack = (track.info().trackFitter()==Trk::TrackInfo::Unknown);
176  //
177  // --- reject bad tracks
178  //
179  //
180  // --- the following cuts we only apply to fitted tracks
181  //
182  if (ispatterntrack) {
183  ATH_MSG_DEBUG ("==> this is a pattern track, no hit cuts !");
184  } else {
185  ATH_MSG_DEBUG ("==> this is a refitted track, so we can use the chi2 and other stuff ! ");
186 
187  double trackEta = track.trackParameters()->front()->eta();
188 
189  // NdF cut :
190  if (track.fitQuality()) {
191  ATH_MSG_DEBUG ("numberDoF = "<<track.fitQuality()->numberDoF());
192  }
193  // Number of double Holes
194  if (numSCTDoubleHoles>=0) {
195  int maxDoubleHoles = m_etaDependentCutsSvc.name().empty() ?
196  m_maxDoubleHoles : m_etaDependentCutsSvc->getMaxDoubleHolesAtEta(trackEta);
197  if (numSCTDoubleHoles > maxDoubleHoles ) {
198  ATH_MSG_DEBUG ("Track has "<< numSCTDoubleHoles <<" double holes, reject it!");
199  return Trk::TrackScore(0);
200  }
201  }
202  // Number of Si (Pixel+SCT) Holes
203  if (numSCTHoles>=0 && numPixelHoles>=0) {
204  int maxSiHoles = m_etaDependentCutsSvc.name().empty() ?
205  m_maxSiHoles : m_etaDependentCutsSvc->getMaxSiHolesAtEta(trackEta);
206  if (numPixelHoles+numSCTHoles > maxSiHoles ) {
207  ATH_MSG_DEBUG ("Track has "<< numPixelHoles <<" Pixel and " << numSCTHoles << " SCT holes, reject it!");
208  return Trk::TrackScore(0);
209  }
210  }
211  // Number of Pixel Holes
212  if ( numPixelHoles>=0 ) {
213  int maxPixelHoles = m_etaDependentCutsSvc.name().empty() ?
214  m_maxPixelHoles : m_etaDependentCutsSvc->getMaxPixelHolesAtEta(trackEta);
215  if (numPixelHoles > maxPixelHoles ) {
216  ATH_MSG_DEBUG ("Track has "<< numPixelHoles <<" Pixel holes, reject it!");
217  return Trk::TrackScore(0);
218  }
219  }
220  // Number of SCT Holes
221  if ( numSCTHoles>=0 ) {
222  int maxSctHoles = m_etaDependentCutsSvc.name().empty() ?
223  m_maxSctHoles : m_etaDependentCutsSvc->getMaxSctHolesAtEta(trackEta);
224  if ( numSCTHoles > maxSctHoles ) {
225  ATH_MSG_DEBUG ("Track has "<< numSCTHoles << " SCT holes, reject it!");
226  return Trk::TrackScore(0);
227  }
228  }
229  // TRT cut
230  if (!m_useITkAmbigFcn && numTRT > 0 && numTRT < m_minTRTonTrk) {
231  ATH_MSG_DEBUG ("Track has " << numTRT << " TRT hits, reject it");
232  return Trk::TrackScore(0);
233  }
234  // TRT precision hits cut
235  if (!m_useITkAmbigFcn && numTRT >= 15 && ((double)(numTRT-numTRTTube))/numTRT < m_minTRTprecision) {
236  ATH_MSG_DEBUG ("Track has " << ((double)numTRTTube)/numTRT << " TRT tube hit fraction, reject it");
237  return Trk::TrackScore(0);
238  }
239  // Number of Si Clusters
240  if ( numSCT>=0 && numPixel>=0) {
241  int minSiClusters = m_etaDependentCutsSvc.name().empty() ?
242  m_minSiClusters : m_etaDependentCutsSvc->getMinSiHitsAtEta(trackEta);
243  if (numPixel+numSCT+numPixelDead+numSCTDead < minSiClusters) {
244  ATH_MSG_DEBUG ("Track has " << numPixel+numSCT << " Si clusters and " << numPixelDead+numSCTDead << " dead sensors, reject it");
245  return Trk::TrackScore(0);
246  }
247  }
248  // Number of pixel clusters
249  if (numPixel>=0) {
250  int minPixel = m_etaDependentCutsSvc.name().empty() ?
251  m_minPixel : m_etaDependentCutsSvc->getMinPixelHitsAtEta(trackEta);
252  if(numPixel < minPixel) {
253  ATH_MSG_DEBUG ("Track has " << numPixel << " pixel hits, reject it");
254  return Trk::TrackScore(0);
255  }
256  }
257  }
258  //
259  // --- kinematic selection (done as well on input ?)
260  //
261  // --- beam spot position
262  Amg::Vector3D beamSpotPosition(0,0,0);
264  if (beamSpotHandle.isValid()) beamSpotPosition = beamSpotHandle->beamVtx().position();
265  // --- create surface
266  Trk::PerigeeSurface perigeeSurface(beamSpotPosition);
267 
268  const Trk::TrackParameters* input = track.trackParameters()->front();
269  double trackEta = input->eta();
270 
271  // cuts on parameters
272  const EventContext& ctx = Gaudi::Hive::currentContext();
274  const AtlasFieldCacheCondObj* fieldCondObj{*readHandle};
275  if (fieldCondObj == nullptr) {
276  ATH_MSG_ERROR("simpleScore: Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key());
277  return Trk::TrackScore(0);
278  }
279  MagField::AtlasFieldCache fieldCache;
280  fieldCondObj->getInitializedCache (fieldCache);
281 
282  if (fieldCache.solenoidOn()){
283  double minPt = m_etaDependentCutsSvc.name().empty() ?
284  m_minPt : m_etaDependentCutsSvc->getMinPtAtEta(trackEta);
285  if (std::abs(input->pT()) < minPt) {
286  ATH_MSG_DEBUG ("Track pt < "<<m_minPt<<", reject it");
287  return Trk::TrackScore(0);
288  }
289  }
290  double maxEta = m_etaDependentCutsSvc.name().empty() ?
291  m_maxEta : m_etaDependentCutsSvc->getMaxEta();
292  if (std::abs(input->eta()) > maxEta) {
293  ATH_MSG_DEBUG ("Track eta > "<<maxEta<<", reject it");
294  return Trk::TrackScore(0);
295  }
296 
297  // uses perigee on track or extrapolates, no material in any case, we cut on impacts
298  // add back extrapolation without errors
299  std::unique_ptr<const Trk::TrackParameters> parm( m_extrapolator->extrapolateDirectly(ctx,*input, perigeeSurface) );
300 
301  const Trk::Perigee*extrapolatedPerigee = dynamic_cast<const Trk::Perigee*> (parm.get());
302  if (!extrapolatedPerigee) {
303  ATH_MSG_WARNING( "Extrapolation of perigee failed, this should never happen" );
304  return Trk::TrackScore(0);
305  }
306 
307  ATH_MSG_VERBOSE ("extrapolated perigee: "<<*extrapolatedPerigee);
308  double maxZ0 = m_etaDependentCutsSvc.name().empty() ?
309  m_maxZImp : m_etaDependentCutsSvc->getMaxZImpactAtEta(trackEta);
310  if (std::abs(extrapolatedPerigee->parameters()[Trk::z0]) > maxZ0) {
311  ATH_MSG_DEBUG ("Track Z impact > "<<m_maxZImp<<", reject it");
312  return Trk::TrackScore(0);
313  }
314 
315  double maxD0 = m_etaDependentCutsSvc.name().empty() ?
316  m_maxRPhiImp : m_etaDependentCutsSvc->getMaxPrimaryImpactAtEta(trackEta);
317  if(m_useEmClusSeed) {
318  if (isEmCaloCompatible( track, ctx ) ) {
319  maxD0 = m_maxRPhiImpEM;
320  }
321  }
322  if (std::abs(extrapolatedPerigee->parameters()[Trk::d0]) > maxD0) {
323  ATH_MSG_DEBUG ("Track Rphi impact > "<<maxD0<<", reject it");
324  return Trk::TrackScore(0);
325  }
326 
327  //
328  // --- now start scoring
329  //
330 
332 
333  //
334  // --- use scoring function
335  //
336 
337  return ambigScore(track,trackSummary);
338 
339  } else {
340 
341  //
342  // use classical score
343  //
344  // score of 100 per track
345  Trk::TrackScore score (100);
346  // --- summary score analysis
347  for (int i=0; i<Trk::numberOfTrackSummaryTypes; ++i) {
348  int value = trackSummary.get(static_cast<Trk::SummaryType>(i));
349  //value is -1 if undefined.
350  if (value>0) {
352  ATH_MSG_DEBUG ("\tType ["<<i<<"], value \t= "<<value<<"], score \t="<<score);
353  }
354  }
355  // --- prob(chi2,NDF), protect for chi2 <= 0
356  if (track.fitQuality()!=nullptr && track.fitQuality()->chiSquared()>0 && track.fitQuality()->numberDoF()>0 ) {
357  double p = 1.0-Genfun::CumulativeChiSquare(track.fitQuality()->numberDoF())(track.fitQuality()->chiSquared());
358  if ( p > 0 )
359  score += log10( p );
360  else
361  score -= 50;
362  }
363 
364  return score;
365  }
366 
367 }
368 
369 //---------------------------------------------------------------------------------------------------------------------
370 
372 {
373  //
374  // --- start with bonus for high pt tracks
375  //
376  // double prob = 1.;
377  double pt = fabs(track.trackParameters()->front()->pT());
378  double prob = log10( pt ) - 1.; // 100 MeV is min and gets score 1
379  ATH_MSG_DEBUG ("Modifier for pt = " << pt / 1000. << " GeV is: "<< prob);
380 
381  //
382  // --- prob and cuts on holes
383  //
384  if (m_usePixel) {
385  // --- Pixel holes
386  int iPixHoles = trackSummary.get(Trk::numberOfPixelHoles);
387  if ( iPixHoles > -1 && m_maxPixHoles > 0) {
388  if (iPixHoles > m_maxPixHoles) {
389  prob /= (iPixHoles - m_maxPixHoles + 1); // holes are bad !
390  iPixHoles = m_maxPixHoles;
391  }
392  prob *= m_factorPixHoles[iPixHoles];
393  ATH_MSG_DEBUG ("Modifier for " << iPixHoles << " Pixel holes: "<<m_factorPixHoles[iPixHoles]
394  << " New score now: " << prob);
395  }
396  }
397 
398  if (m_useSCT) {
399  // --- SCT holes
400  int iSCT_Holes = trackSummary.get(Trk::numberOfSCTHoles);
401  if (iSCT_Holes > -1 && m_maxSCT_Holes > 0) {
402  if (iSCT_Holes > m_maxSCT_Holes) {
403  prob /= (iSCT_Holes - m_maxSCT_Holes + 1); // holes are bad !
404  iSCT_Holes = m_maxSCT_Holes;
405  }
406  prob *= m_factorSCT_Holes[iSCT_Holes];
407  ATH_MSG_DEBUG ("Modifier for " << iSCT_Holes << " SCT holes: "<<m_factorSCT_Holes[iSCT_Holes]
408  << " New score now: " << prob);
409  }
410  // --- SCT double holes
411  int iDblHoles = trackSummary.get(Trk::numberOfSCTDoubleHoles);
412  if (iDblHoles > -1 && m_maxDblHoles > 0) {
413  if (iDblHoles > m_maxDblHoles) {
414  prob /= (iDblHoles - m_maxDblHoles + 1); // holes are bad !
415  iDblHoles = m_maxDblHoles;
416  }
417  prob *= m_factorDblHoles[iDblHoles];
418  ATH_MSG_DEBUG ("Modifier for " << iDblHoles << " double holes: "<<m_factorDblHoles[iDblHoles]
419  << " New score now: " << prob);
420  }
421  }
422  //
423  // --- prob for other counters
424  //
425  if (m_usePixel) {
426 
427  // ME: this if statement needs to be removed...
428  // --- count layers only if holes are not searched for
429  // if (trackSummary.get(Trk::numberOfPixelHoles) == -1) {
430 
431  // --- Pixel layers
432  int iPixLay = trackSummary.get(Trk::numberOfContribPixelLayers);
433  if (iPixLay > -1 && m_maxPixLay > 0) {
434  if (iPixLay > m_maxPixLay) {
435  prob *= (iPixLay - m_maxPixLay + 1); // layers are good !
436  iPixLay = m_maxPixLay;
437  }
438  prob *= m_factorPixLay[iPixLay];
439  ATH_MSG_DEBUG ("Modifier for " << iPixLay << " Pixel layers: "<<m_factorPixLay[iPixLay]
440  << " New score now: " << prob);
441  }
442 
443  // --- Pixel hits
444  int pixelHits = trackSummary.get(Trk::numberOfPixelHits);
445  if (pixelHits > -1 && m_maxPixelHits > 0) {
446  if (pixelHits > m_maxPixelHits) {
447  prob *= (pixelHits - m_maxPixelHits + 1); // hits are good !
448  pixelHits = m_maxPixelHits;
449  }
450  prob *= m_factorPixelHits[pixelHits];
451  ATH_MSG_DEBUG ("Modifier for " << pixelHits << " Pixel hits: "<<m_factorPixelHits[pixelHits]
452  << " New score now: " << prob);
453  }
454  // --- Pixel blayer hits
455  int bLayerHits = trackSummary.get(Trk::numberOfInnermostPixelLayerHits);
456  if (bLayerHits > -1 && m_maxB_LayerHits > 0) {
457  if (bLayerHits > m_maxB_LayerHits) {
458  prob *= (bLayerHits - m_maxB_LayerHits + 1); // hits are good !
459  bLayerHits = m_maxB_LayerHits;
460  }
461  prob *= m_factorB_LayerHits[bLayerHits];
462  ATH_MSG_DEBUG ("Modifier for " << bLayerHits << " b-layer hits: "<<m_factorB_LayerHits[bLayerHits]
463  << " New score now: " << prob);
464  }
465  // --- Pixel Ganged fakes
466  int pixelGangedFakes = trackSummary.get(Trk::numberOfGangedFlaggedFakes);
467  if (pixelGangedFakes > -1 && m_maxGangedFakes > 0) {
468  if (pixelGangedFakes > m_maxGangedFakes) {
469  prob /= (pixelGangedFakes - m_maxGangedFakes + 1); // ganged are bad !
470  pixelGangedFakes = m_maxGangedFakes;
471  }
472  prob *= m_factorGangedFakes[pixelGangedFakes];
473  ATH_MSG_DEBUG ("Modifier for " << pixelGangedFakes << " ganged fakes hits: "<<m_factorGangedFakes[pixelGangedFakes]
474  << " New score now: " << prob);
475  }
476  }
477 
478  int iHits = 0;
479  iHits += m_usePixel ? trackSummary.get(Trk::numberOfPixelHits) : 3; // if Pixel off, do not count as inefficient
480  iHits += m_useSCT ? trackSummary.get(Trk::numberOfSCTHits) : 8; // if SCT off, do not count as inefficient
481  if (iHits > -1 && m_maxHits > 0) {
482  if (iHits > m_maxHits) {
483  prob *= (iHits - m_maxHits + 1); // hits are good !
484  iHits = m_maxHits;
485  }
486  prob *= m_factorHits[iHits];
487  ATH_MSG_DEBUG ("Modifier for " << iHits << " Sihits: "<<m_factorHits[iHits]
488  << " New score now: " << prob);
489  }
490 
491  //
492  // --- special treatment for TRT hits
493  //
494  if (!m_useITkAmbigFcn) {
495  int iTRT_Hits = trackSummary.get(Trk::numberOfTRTHits);
496  int iTRT_Outliers = trackSummary.get(Trk::numberOfTRTOutliers);
497  //
498  if ( iTRT_Hits > 0 && m_maxTrtRatio > 0) {
499  // get expected number of TRT hits
500  double nTrtExpected = 30.;
501  assert( m_selectortool.isEnabled() );
502  nTrtExpected = m_selectortool->minNumberDCs(track.trackParameters()->front());
503  ATH_MSG_DEBUG ("Expected number of TRT hits: " << nTrtExpected << " for eta: "
504  << fabs(track.trackParameters()->front()->eta()));
505  double ratio = (nTrtExpected != 0) ? iTRT_Hits / nTrtExpected : 0;
507  for (int i=0; i<m_maxTrtRatio; ++i) {
508  if ( m_boundsTrtRatio[i] < ratio && ratio <= m_boundsTrtRatio[i+1]) {
510  ATH_MSG_DEBUG ("Modifier for " << iTRT_Hits << " TRT hits (ratio " << ratio
511  << ") is : "<< m_factorTrtRatio[i] << " New score now: " << prob);
512  break;
513  }
514  }
515  }
516  //
517  if ( iTRT_Hits > 0 && iTRT_Outliers >= 0 && m_maxTrtFittedRatio > 0) {
518  double fitted = double(iTRT_Hits) / double(iTRT_Hits + iTRT_Outliers);
520  for (int i=0; i<m_maxTrtFittedRatio; ++i) {
521  if (fitted <= m_boundsTrtFittedRatio[i+1]) {
523  ATH_MSG_DEBUG ("Modifier for TRT fitted ratio of " << fitted
524  << " is : "<< m_factorTrtFittedRatio[i] << " New score now: " << prob);
525  break;
526  }
527  }
528  }
529  } // end if(!m_useITkAmbigFcn)
530 
531  // is this a track from the pattern or a fitted track ?
532  bool ispatterntrack = (track.info().trackFitter()==Trk::TrackInfo::Unknown);
533 
534  //
535  // --- non binned Chi2
536  //
537  if (!ispatterntrack) {
538  if (track.fitQuality()!=nullptr && track.fitQuality()->chiSquared()>0 && track.fitQuality()->numberDoF()>0 ) {
539  int indf = track.fitQuality()->numberDoF();
540  double chi2 = track.fitQuality()->chiSquared();
541  double fac = 1. / log10 (10. + 10. * chi2 / indf); // very soft chi2
542  prob *= fac;
543  ATH_MSG_DEBUG ("Modifier for chi2 = " << chi2 << " and NDF = " << indf
544  << " is : "<< fac << " New score now: " << prob);
545 
546  }
547  }
548  //
549  // --- fit quality prob
550  //
551  if ( !ispatterntrack && (m_useSigmaChi2) && track.fitQuality() ) {
552 
553  int ndf = track.fitQuality()->numberDoF();
554  double chi2 = track.fitQuality()->chiSquared();
555  if (ndf > 0) {
556  //
557  // --- special variable for bad chi2 distribution
558  //
559  if (m_useSigmaChi2) {
560  int sigmaChi2times100 = trackSummary.get(Trk::standardDeviationOfChi2OS);
561  if (sigmaChi2times100 > 0) {
562  double testvar = double(sigmaChi2times100)/100. - sqrt(2.*chi2/ndf);
563  if (msgLvl(MSG::VERBOSE)) msg(MSG::VERBOSE) << "sigma chi2 = " << testvar << endmsg;
564  if ( testvar< m_boundsSigmaChi2[0] ) {
565  prob *= m_factorSigmaChi2[0];
566  ATH_MSG_DEBUG ("Modifier for " << testvar << " sigma chi2: "<< m_factorSigmaChi2[0]
567  << " New score now: " << prob);
568  } else if (m_boundsSigmaChi2[m_maxSigmaChi2] <= testvar) {
570  ATH_MSG_DEBUG ("Modifier for " << testvar << " sigma chi2: "<< m_factorSigmaChi2[m_maxSigmaChi2-1]
571  << " New score now: " << prob);
572  } else {
573  for (int i = 0 ; i<m_maxSigmaChi2 ; ++i ) {
574  if ( m_boundsSigmaChi2[i]<=testvar && testvar<m_boundsSigmaChi2[i+1] ) {
576  ATH_MSG_DEBUG ("Modifier for " << testvar << " sigma chi2: "<< m_factorSigmaChi2[i]
577  << " New score now: " << prob);
578  break;
579  }
580  }
581  }
582  }
583  }
584  }
585  }
586 
587  return Trk::TrackScore(prob);
588 }
589 
590 //---------------------------------------------------------------------------------------------------------------------
591 
593 {
594  //
595  // --- number of Pixel holes
596  //
597  // --- NewTracking and BackTracking
598  const int maxPixHoles = 2; // there is an explicit cut
599  const double goodPixHoles[maxPixHoles+1] = {1.0 , 0.04 , 0.004 };
600  const double fakePixHoles[maxPixHoles+1] = {1.0 , 0.30 , 0.200 };
601  // put it into the private members
602  m_maxPixHoles = maxPixHoles;
603  for (int i=0; i<=m_maxPixHoles; ++i) m_factorPixHoles.push_back(goodPixHoles[i]/fakePixHoles[i]);
604 
605  //
606  // --- number of SCT holes
607  //
608  if (!m_useTRT_AmbigFcn) {
609  // --- NewTracking
610  const int maxSCT_Holes = 5; // moved from 3 -> 5 , there is an explicit cut anyway
611  const double goodSCT_Holes[maxSCT_Holes+1] = { 1.0 , 0.06 , 0.010 , 0.0007, 0.0005, 0.0003 };
612  const double fakeSCT_Holes[maxSCT_Holes+1] = { 1.0 , 0.15 , 0.100 , 0.0100, 0.0100, 0.0100 };
613  // put it into the private members
614  m_maxSCT_Holes = maxSCT_Holes;
615  for (int i=0; i<=m_maxSCT_Holes; ++i) m_factorSCT_Holes.push_back(goodSCT_Holes[i]/fakeSCT_Holes[i]);
616  } else {
617  // --- BackTracking
618  const int maxSCT_Holes = 6;
619  const double goodSCT_Holes[maxSCT_Holes+1] = {0.910, 0.074, 0.014, 0.001, 0.001, 0.00001, 0.00001};
620  const double fakeSCT_Holes[maxSCT_Holes+1] = {0.910, 0.192, 0.229, 0.061, 0.065, 0.016 , 0.025};
621  // put it into the private members
622  m_maxSCT_Holes = maxSCT_Holes;
623  for (int i=0; i<=m_maxSCT_Holes; ++i) m_factorSCT_Holes.push_back(goodSCT_Holes[i]/fakeSCT_Holes[i]);
624  }
625 
626  //
627  // --- number of SCT double holes
628  //
629  // --- NewTracking and BackTracking
630  const int maxDblHoles = 3; // there is a cut on this anyway !
631  const double goodDblHoles[maxDblHoles+1] = { 1. , 0.03 , 0.007 , 0.0003 };
632  const double fakeDblHoles[maxDblHoles+1] = { 1. , 0.09 , 0.09 , 0.008 };
633  // put it into the private members
634  m_maxDblHoles = maxDblHoles;
635  for (int i=0; i<=m_maxDblHoles; ++i) m_factorDblHoles.push_back(goodDblHoles[i]/fakeDblHoles[i]);
636 
637  //
638  // --- number of Blayer hits
639  //
640  if (!m_useTRT_AmbigFcn) {
641  // --- NewTracking
642  if (m_useITkAmbigFcn) {
643  const int maxB_LayerHitsITk = 8;
644  m_maxB_LayerHits = maxB_LayerHitsITk;
645  const double blayModi[maxB_LayerHitsITk + 1] = {0.25, 4.0, 4.5, 5.0, 5.5, 6.0, 6.5, 7.0, 7.5};
646  for (int i = 0; i <= m_maxB_LayerHits; ++i) m_factorB_LayerHits.push_back(blayModi[i]);
647  } else {
648  const int maxB_LayerHits = 3;
649  const double goodB_LayerHits[maxB_LayerHits+1] = {0.203, 0.732, 0.081, 0.010};
650  const double fakeB_LayerHits[maxB_LayerHits+1] = {0.808, 0.174, 0.018, 0.002};
651  // put it into the private members
652  m_maxB_LayerHits = maxB_LayerHits;
653  for (int i=0; i<=m_maxB_LayerHits; ++i) m_factorB_LayerHits.push_back(goodB_LayerHits[i]/fakeB_LayerHits[i]);
654  }
655  } else {
656  // --- BackTracking
657  const int maxB_LayerHits = 3;
658  const double goodB_LayerHits[maxB_LayerHits+1] = {0.605, 0.349, 0.044, 0.010};
659  const double fakeB_LayerHits[maxB_LayerHits+1] = {0.865, 0.124, 0.011, 0.002};
660  // put it into the private members
661  m_maxB_LayerHits = maxB_LayerHits;
662  for (int i=0; i<=m_maxB_LayerHits; ++i) m_factorB_LayerHits.push_back(goodB_LayerHits[i]/fakeB_LayerHits[i]);
663  }
664 
665  //
666  // --- number of Pixel hits without Blayer
667  //
668  if (!m_useTRT_AmbigFcn) {
669  // --- NewTracking
670  if (m_useITkAmbigFcn) {
671  const int maxPixelHitsITk = 26;
672  m_maxPixelHits = maxPixelHitsITk;
673  double maxScore = 30.0;
674  double minScore = 5.00;
675  int maxBarrel = 10;
676  int minBarrel = 3;
677  int minEnd = 5;
678 
679  double step[2] = {
680  (maxScore - minScore) / (maxBarrel - minBarrel), (maxScore - minScore) / (maxPixelHitsITk - minEnd)
681  };
682 
683  for (int i = 0; i <= maxPixelHitsITk; i++) {
684  if (i < minEnd) m_factorPixelHits.push_back(0.01 + (i * 0.33));
685  else m_factorPixelHits.push_back(minScore + ((i - minEnd) * step[1]));
686  }
687  } else {
688  const int maxPixelHits = 8; // we see up to 8 with IBL (was 6)
689  const double goodPixelHits[maxPixelHits+1] = {0.095, 0.031, 0.118, 0.615, 0.137, 0.011, 0.01 , 0.011, 0.012};
690  const double fakePixelHits[maxPixelHits+1] = {0.658, 0.100, 0.091, 0.124, 0.026, 0.002, 0.001 , 0.001, 0.001};
691  m_maxPixelHits = maxPixelHits;
692  for (int i=0; i<=m_maxPixelHits; ++i) m_factorPixelHits.push_back(goodPixelHits[i]/fakePixelHits[i]);
693  }
694  } else {
695  // --- BackTracking
696  const int maxPixelHits = 8; // we see up to 8 with IBL (was 6)
697  const double goodPixelHits[maxPixelHits+1] = {0.401, 0.079, 0.140, 0.291, 0.011, 0.078, 0.01 , 0.011, 0.012};
698  const double fakePixelHits[maxPixelHits+1] = {0.673, 0.138, 0.113, 0.057, 0.002, 0.011, 0.001 , 0.001, 0.001};
699  m_maxPixelHits = maxPixelHits;
700  for (int i=0; i<=m_maxPixelHits; ++i) m_factorPixelHits.push_back(goodPixelHits[i]/fakePixelHits[i]);
701  }
702 
703  //
704  // --- number of Pixel layers
705  //
706  if (!m_useTRT_AmbigFcn) {
707  // --- NewTracking
708  if (m_useITkAmbigFcn) {
709  const int maxPixelLayITk = 16;
710  m_maxPixLay = maxPixelLayITk;
711  double maxScore = 30.0;
712  double minScore = 5.00;
713  int maxBarrel = 10;
714  int minBarrel = 3;
715  int minEnd = 5;
716 
717  double step[2] = {
718  (maxScore - minScore) / (maxBarrel - minBarrel), (maxScore - minScore) / (maxPixelLayITk - minEnd)
719  };
720 
721  for (int i = 0; i <= maxPixelLayITk; i++) {
722  if (i < minEnd) m_factorPixLay.push_back(0.01 + (i * 0.33));
723  else m_factorPixLay.push_back(minScore + ((i - minEnd) * step[1]));
724  }
725  } else {
726  const int maxPixLay = 7; // 3 barrel, 3 endcap, IBL, in practice one should see maybe 5 (was 3)
727  const double goodPixLay[maxPixLay+1] = {0.095, 0.033, 0.131, 0.740, 0.840, 0.940, 1.040,1.140};
728  const double fakePixLay[maxPixLay+1] = {0.658, 0.106, 0.092, 0.144, 0.144, 0.144, 0.144,0.144};
729  // put it into the private members
730  m_maxPixLay = maxPixLay;
731  for (int i=0; i<=m_maxPixLay; ++i) m_factorPixLay.push_back(goodPixLay[i]/fakePixLay[i]);
732  }
733  } else {
734  // --- BackTracking
735  const int maxPixLay = 7; // 3 barrel, 3 endcap, IBL, in practice one should see maybe 5 (was 5)
736  const double goodPixLay[maxPixLay+1] = {0.401, 0.088, 0.152, 0.355, 0.405, 0.455, 0.505, 0.555};
737  const double fakePixLay[maxPixLay+1] = {0.673, 0.146, 0.115, 0.065, 0.065, 0.065, 0.065, 0.065};
738  // put it into the private members
739  m_maxPixLay = maxPixLay;
740  for (int i=0; i<=m_maxPixLay; ++i) m_factorPixLay.push_back(goodPixLay[i]/fakePixLay[i]);
741  }
742 
743  //
744  // --- number of Pixel Ganged Fakes
745  //
746  // --- NewTracking and BackTracking
747  const int maxGangedFakes = 2; // there is an explicit cut
748  const double goodGangedFakes[maxGangedFakes+1] = {0.62 , 0.23 , 0.15 };
749  const double fakeGangedFakes[maxGangedFakes+1] = {0.12 , 0.41 , 0.47 };
750  // put it into the private members
751  m_maxGangedFakes = maxGangedFakes;
752  for (int i=0; i<=m_maxGangedFakes; ++i) m_factorGangedFakes.push_back(goodGangedFakes[i]/fakeGangedFakes[i]);
753 
754  //
755  // --- total number of SCT+Pixel hits
756  //
757  // --- NewTracking and BackTracking
758  if (m_useITkAmbigFcn) {
759  const int maxHitsITk = 26;
760  m_maxHits = maxHitsITk;
761  double maxScore = 40.0;
762  double minScore = 5.00;
763  int maxBarrel = 25;
764  int minBarrel = 9;
765  int minEnd = 12;
766 
767  double step[2] = {
768  (maxScore - minScore) / (maxBarrel - minBarrel), (maxScore - minScore) / (maxHitsITk - minEnd)
769  };
770 
771  for (int i = 0; i <= maxHitsITk; i++) {
772  if (i < minEnd) m_factorHits.push_back(0.01 + (i * 1.0 / minEnd));
773  else m_factorHits.push_back(minScore + ((i - minEnd) * step[1]));
774  }
775  } else {
776  const int maxHits = 19; // there is a min cut on this anyway !
777  const double goodSiHits[maxHits+1] = { 0.001 , 0.002 , 0.003 , 0.004 , 0.01 , 0.01 , 0.01 ,
778  0.015 , 0.02 , 0.06 , 0.1 , 0.3 , 0.2 , 0.50 , 0.055,
779  0.03 , 0.015 , 0.010 , 0.002 , 0.0005 };
780  const double fakeSiHits[maxHits+1] = { 1.0 , 1.0 , 1.0 , 1.0 , 0.5 , 0.25 , 0.15 ,
781  0.20 , 0.1 , 0.2 , 0.08 , 0.07 , 0.035 , 0.08 , 0.008,
782  0.004 , 0.0015 , 0.0008 , 0.0001 , 0.00001 };
783  // put it into the private members
784  m_maxHits = maxHits;
785  for (int i=0; i<=m_maxHits; ++i) m_factorHits.push_back(goodSiHits[i]/fakeSiHits[i]);
786  }
787 
788  //
789  // --- ratio of TRT hits over expected
790  //
791  // --- NewTracking and BackTracking
792  const int maxTrtRatio = 7 ;
793  const double TrtRatioBounds[maxTrtRatio+1] = { 0, 0.2, 0.4, 0.6, 0.8, 1.0, 1.2, 2.4};
794  // this needs tuning !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
795  const double goodTrtRatio[maxTrtRatio] = { 0.05, 0.11, 0.12, 0.15, 0.20, 0.16, 0.17};
796  const double fakeTrtRatio[maxTrtRatio] = { 0.6 , 0.08, 0.06, 0.05, 0.04, 0.03, 0.03};
797  // put it into the private members
798  m_maxTrtRatio = m_selectortool.isEnabled() ? maxTrtRatio : 0;
799  for (int i=0; i<m_maxTrtRatio; ++i) m_factorTrtRatio.push_back(goodTrtRatio[i]/fakeTrtRatio[i]);
800  for (int i=0; i<=m_maxTrtRatio; ++i) m_boundsTrtRatio.push_back(TrtRatioBounds[i]);
801 
802  //
803  // --- ratio of TRT fitted to (fitted+outliers)
804  //
805  // --- NewTracking and BackTracking
806  const int maxTrtFittedRatio = 4;
807  const double TrtFittedRatioBounds[maxTrtFittedRatio+1] = { 0, 0.3, 0.6, 0.9, 1.0};
808  // this needs tuning !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
809  const double goodTrtFittedRatio[maxTrtFittedRatio] = { 0.1, 0.2, 0.3, 0.5};
810  const double fakeTrtFittedRatio[maxTrtFittedRatio] = { 0.6, 0.1, 0.1, 0.1};
811  // put it into the private members
812  m_maxTrtFittedRatio = maxTrtFittedRatio;
813  for (int i=0; i<m_maxTrtFittedRatio; ++i) m_factorTrtFittedRatio.push_back(goodTrtFittedRatio[i]/fakeTrtFittedRatio[i]);
814  for (int i=0; i<=m_maxTrtFittedRatio; ++i) m_boundsTrtFittedRatio.push_back(TrtFittedRatioBounds[i]);
815 
816 
817  //
818  // --- sigma chi2
819  //
820  if (!m_useSigmaChi2) {
821  m_maxSigmaChi2 = -1 ;
822  } else {
823  // --- NewTracking and BackTracking
824  const int maxSigmaChi2 = 13 ;
825  const double SigmaChi2Bounds[maxSigmaChi2+1] = { -5.,-4.,-3.,-2.,-1.,0.,1.,2.,3.,4.,5.,6.,7.,8.};
826  const double goodSigmaChi2[maxSigmaChi2] = {0.00004, 0.0004, 0.002, 0.15, 0.8, 0.015, 0.01 , 0.009, 0.008, 0.0007 , 0.0006 , 0.0005, 0.00004};
827  const double fakeSigmaChi2[maxSigmaChi2] = {0.0008 , 0.005 , 0.02 , 0.2 , 0.3, 0.1 , 0.1 , 0.1 , 0.1 , 0.01 , 0.01 , 0.01 , 0.001};
828  // put it into the private members
829  m_maxSigmaChi2 = maxSigmaChi2;
830  for (int i=0; i<m_maxSigmaChi2; ++i) m_factorSigmaChi2.push_back(goodSigmaChi2[i]/fakeSigmaChi2[i]);
831  for (int i=0; i<=m_maxSigmaChi2; ++i) m_boundsSigmaChi2.push_back(SigmaChi2Bounds[i]);
832  }
833 
834  //
835  // --- debug output
836  //
837  if (msgLvl(MSG::VERBOSE)) {
838 
839  for (int i=0; i<=m_maxPixHoles; ++i)
840  msg(MSG::VERBOSE) << "Modifier for " << i << " Pixel holes: " << m_factorPixHoles[i] <<endmsg;
841 
842  for (int i=0; i<=m_maxSCT_Holes; ++i)
843  msg(MSG::VERBOSE) << "Modifier for " << i << " SCT holes: " << m_factorSCT_Holes[i] <<endmsg;
844 
845  for (int i=0; i<=m_maxDblHoles; ++i)
846  msg(MSG::VERBOSE) << "Modifier for " << i << " double SCT holes: " << m_factorDblHoles[i] <<endmsg;
847 
848  for (int i=0; i<=m_maxPixLay; ++i)
849  msg(MSG::VERBOSE) << "Modifier for " << i << " Pixel layers: " << m_factorPixLay[i] <<endmsg;
850 
851  for (int i=0; i<=m_maxB_LayerHits; ++i)
852  msg(MSG::VERBOSE) << "Modifier for " << i << " b-layer hits: " << m_factorB_LayerHits[i] <<endmsg;
853 
854  for (int i=0; i<=m_maxPixelHits; ++i)
855  msg(MSG::VERBOSE) << "Modifier for " << i << " Pixel hits: " << m_factorPixelHits[i] <<endmsg;
856 
857  for (int i=0; i<=m_maxGangedFakes; ++i)
858  msg(MSG::VERBOSE) << "Modifier for " << i << " ganged fakes: " << m_factorGangedFakes[i] <<endmsg;
859 
860  for (int i=0; i<=m_maxHits; ++i)
861  msg(MSG::VERBOSE) << "Modifier for " << i << " Si hits: " << m_factorHits[i] <<endmsg;
862 
863  if (m_selectortool.isEnabled()) {
864  for (int i=0; i<m_maxTrtRatio; ++i)
865  msg(MSG::VERBOSE) << "Modifier for " << m_boundsTrtRatio[i] << " < TRT ratio < "
866  << m_boundsTrtRatio[i+1] <<" : " <<m_factorTrtRatio[i] <<endmsg;
867  }
868 
869  for (int i=0; i<m_maxTrtFittedRatio; ++i)
870  msg(MSG::VERBOSE) << "Modifier for " << m_boundsTrtFittedRatio[i] << " < TRT fitted ratio < "
872 
873 
874  // only if used
875  for (int i=0; i<m_maxSigmaChi2; ++i)
876  msg(MSG::VERBOSE) << "Modifier for " << m_boundsSigmaChi2[i] << " < sigma(chi2) - sqrt(2chi2) < " << m_boundsSigmaChi2[i+1]
877  <<" : " <<m_factorSigmaChi2[i] <<endmsg;
878  }
879 
880 }
881 
882 bool InDet::InDetAmbiScoringTool::isEmCaloCompatible(const Trk::Track& track, const EventContext& ctx) const
883 {
884  const Trk::TrackParameters * Tp = track.trackParameters()->front();
885 
886  //Switch to the track parameters of the first measurment instead of the perigee parameters
887  ATH_MSG_VERBOSE ("--> Looping over TSOS's");
888  for (const auto *tsos : *track.trackStateOnSurfaces() ) {
889  // get measurment from TSOS
890  const auto *meas = tsos->measurementOnTrack();
891  const auto *tp = tsos->trackParameters();
892  // if we do not have a measurement, we should just mark it
893  if (!meas || !tp) {
894  continue;
895  } else {
896  Tp = tp;
897  break;
898  }
899  }
900 
901  double F = Tp->momentum().phi();
902  double E = Tp->momentum().eta();
903  double R = Tp->position().perp();
904  double Z = Tp->position().z();
906  return calo->hasMatchingROI(F, E, R, Z, m_phiWidthEm, m_etaWidthEm);
907 }
908 
909 
InDet::maxPixelHoles
@ maxPixelHoles
Definition: IInDetEtaDependentCutsSvc.h:16
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::numberOfContribPixelLayers
@ numberOfContribPixelLayers
number of contributing layers of the pixel detector
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:49
InDet::InDetAmbiScoringTool::m_boundsTrtRatio
std::vector< double > m_boundsTrtRatio
Definition: InDetAmbiScoringTool.h:72
InDet::InDetAmbiScoringTool::m_etaWidthEm
float m_etaWidthEm
Definition: InDetAmbiScoringTool.h:113
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::InDetAmbiScoringTool::isEmCaloCompatible
bool isEmCaloCompatible(const Trk::Track &track, const EventContext &ctx) const
Check if the cluster is compatible with a EM cluster.
Definition: InDetAmbiScoringTool.cxx:882
InDet::InDetAmbiScoringTool::m_minTRTprecision
double m_minTRTprecision
minimum fraction of TRT precision hits
Definition: InDetAmbiScoringTool.h:107
python.PerfMonSerializer.p
def p
Definition: PerfMonSerializer.py:743
Trk::numberOfInnermostPixelLayerHits
@ numberOfInnermostPixelLayerHits
these are the hits in the 1st pixel layer
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:53
InDet::InDetAmbiScoringTool::m_minPixel
int m_minPixel
minimum number of pixel clusters
Definition: InDetAmbiScoringTool.h:108
TrackParameters.h
InDet::InDetAmbiScoringTool::simpleScore
virtual Trk::TrackScore simpleScore(const Trk::Track &track, const Trk::TrackSummary &trackSum) const override
create a score based on how good the passed TrackSummary is
Definition: InDetAmbiScoringTool.cxx:159
python.Constants.FATAL
int FATAL
Definition: Control/AthenaCommon/python/Constants.py:19
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
Trk::Track
The ATLAS Track class.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/Track.h:73
AtlasFieldCacheCondObj
Definition: AtlasFieldCacheCondObj.h:19
InDet::InDetAmbiScoringTool::m_maxHits
int m_maxHits
Definition: InDetAmbiScoringTool.h:67
Trk::numberOfCscEtaHits
@ numberOfCscEtaHits
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:108
Trk::PerigeeSurface
Definition: PerigeeSurface.h:43
Trk::ParametersBase::position
const Amg::Vector3D & position() const
Access method for the position.
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
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::InDetAmbiScoringTool::m_etaDependentCutsSvc
ServiceHandle< IInDetEtaDependentCutsSvc > m_etaDependentCutsSvc
ITk eta-dependent cuts.
Definition: InDetAmbiScoringTool.h:122
InDet::InDetAmbiScoringTool::m_factorDblHoles
std::vector< double > m_factorDblHoles
Definition: InDetAmbiScoringTool.h:69
initialize
void initialize()
Definition: run_EoverP.cxx:894
InDet::InDetAmbiScoringTool::m_maxSigmaChi2
int m_maxSigmaChi2
Definition: InDetAmbiScoringTool.h:67
InDet::InDetAmbiScoringTool::m_maxZImp
double m_maxZImp
maximal z impact parameter cut
Definition: InDetAmbiScoringTool.h:100
InDet::InDetAmbiScoringTool::m_useAmbigFcn
bool m_useAmbigFcn
use the scoring tuned to Ambiguity processing or not
Definition: InDetAmbiScoringTool.h:89
InDet::InDetAmbiScoringTool::m_useEmClusSeed
bool m_useEmClusSeed
Definition: InDetAmbiScoringTool.h:111
Trk::numberOfTrackSummaryTypes
@ numberOfTrackSummaryTypes
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:189
test_pyathena.pt
pt
Definition: test_pyathena.py:11
InDet::InDetAmbiScoringTool::m_useTRT_AmbigFcn
bool m_useTRT_AmbigFcn
Definition: InDetAmbiScoringTool.h:90
InDet::InDetAmbiScoringTool::m_factorSCT_Holes
std::vector< double > m_factorSCT_Holes
Definition: InDetAmbiScoringTool.h:69
ROIPhiRZContainer::hasMatchingROI
bool hasMatchingROI(float phi, double eta, double r, double z, float roi_phi_width, double roi_eta_width) const
Test whether there is a matching ROI for the given phi and r,z corrected eta.
Definition: ROIPhiRZContainer.h:55
ParticleTest.tp
tp
Definition: ParticleTest.py:25
InDet::InDetAmbiScoringTool::m_boundsSigmaChi2
std::vector< double > m_boundsSigmaChi2
Definition: InDetAmbiScoringTool.h:71
Trk::z0
@ z0
Definition: ParamDefs.h:70
AthCommonMsg< AlgTool >::msgLvl
bool msgLvl(const MSG::Level lvl) const
Definition: AthCommonMsg.h:30
athena.value
value
Definition: athena.py:122
InDet::InDetAmbiScoringTool::m_useSigmaChi2
bool m_useSigmaChi2
Definition: InDetAmbiScoringTool.h:91
Trk::numberOfOutliersOnTrack
@ numberOfOutliersOnTrack
100 times the standard deviation of the chi2 from the surfaces
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:148
Trk::numberOfTgcPhiHits
@ numberOfTgcPhiHits
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:105
InDet::InDetAmbiScoringTool::m_minSiClusters
int m_minSiClusters
minimal number of Si clusters
Definition: InDetAmbiScoringTool.h:101
Trk::standardDeviationOfChi2OS
@ standardDeviationOfChi2OS
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:150
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
InDet::InDetAmbiScoringTool::m_factorTrtRatio
std::vector< double > m_factorTrtRatio
Definition: InDetAmbiScoringTool.h:72
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::InDetAmbiScoringTool::m_factorPixLay
std::vector< double > m_factorPixLay
Definition: InDetAmbiScoringTool.h:70
InDet::InDetAmbiScoringTool::m_extrapolator
ToolHandle< Trk::IExtrapolator > m_extrapolator
Definition: InDetAmbiScoringTool.h:82
InDet::InDetAmbiScoringTool::m_maxTrtRatio
int m_maxTrtRatio
Definition: InDetAmbiScoringTool.h:67
covarianceTool.prob
prob
Definition: covarianceTool.py:678
Trk::numberOfSCTHoles
@ numberOfSCTHoles
number of Holes in both sides of a SCT module
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:73
InDet::InDetAmbiScoringTool::m_minPt
double m_minPt
cuts for selecting good tracks
Definition: InDetAmbiScoringTool.h:97
InDet::maxSctHoles
@ maxSctHoles
Definition: IInDetEtaDependentCutsSvc.h:16
InDet::InDetAmbiScoringTool::m_maxDblHoles
int m_maxDblHoles
Definition: InDetAmbiScoringTool.h:67
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
PUfitVar::maxEta
constexpr float maxEta
Definition: GepMETPufitAlg.cxx:13
InDet::InDetAmbiScoringTool::m_maxB_LayerHits
int m_maxB_LayerHits
Definition: InDetAmbiScoringTool.h:68
Track.h
InDet::InDetAmbiScoringTool::m_factorB_LayerHits
std::vector< double > m_factorB_LayerHits
Definition: InDetAmbiScoringTool.h:70
GeoPrimitives.h
InDet::InDetAmbiScoringTool::m_useITkAmbigFcn
bool m_useITkAmbigFcn
use the ITk scoring tuned to Ambiguity processing or not
Definition: InDetAmbiScoringTool.h:119
WriteHandle.h
Handle class for recording to StoreGate.
InDet::InDetAmbiScoringTool::m_maxSctHoles
int m_maxSctHoles
maximal number of SCT holes
Definition: InDetAmbiScoringTool.h:105
Trk::numberOfTRTTubeHits
@ numberOfTRTTubeHits
number of TRT hits on track in straws with xenon
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:97
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
InDet::InDetAmbiScoringTool::m_factorTrtFittedRatio
std::vector< double > m_factorTrtFittedRatio
Definition: InDetAmbiScoringTool.h:72
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
InDet::InDetAmbiScoringTool::m_summaryTypeScore
std::vector< Trk::TrackScore > m_summaryTypeScore
holds the scores assigned to each Trk::SummaryType from the track's Trk::TrackSummary
Definition: InDetAmbiScoringTool.h:78
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
Trk::numberOfSCTHits
@ numberOfSCTHits
number of SCT holes
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:71
InDet::InDetAmbiScoringTool::m_caloClusterROIKey
SG::ReadHandleKey< ROIPhiRZContainer > m_caloClusterROIKey
Definition: InDetAmbiScoringTool.h:116
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
InDet::InDetAmbiScoringTool::m_factorPixelHits
std::vector< double > m_factorPixelHits
Definition: InDetAmbiScoringTool.h:70
InDet::InDetAmbiScoringTool::setupScoreModifiers
void setupScoreModifiers()
Definition: InDetAmbiScoringTool.cxx:592
Trk::numberOfPixelDeadSensors
@ numberOfPixelDeadSensors
number of pixel hits with broad errors (width/sqrt(12))
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:65
InDet::InDetAmbiScoringTool::ambigScore
Trk::TrackScore ambigScore(const Trk::Track &track, const Trk::TrackSummary &trackSum) const
Definition: InDetAmbiScoringTool.cxx:371
PlotPulseshapeFromCool.input
input
Definition: PlotPulseshapeFromCool.py:106
chi2
double chi2(TH1 *h0, TH1 *h1)
Definition: comparitor.cxx:522
InDetAmbiScoringTool.h
Trk::TrackScore
float TrackScore
Definition: TrackScore.h:10
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
InDet::InDetAmbiScoringTool::m_factorSigmaChi2
std::vector< double > m_factorSigmaChi2
Definition: InDetAmbiScoringTool.h:70
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
xAOD::double
double
Definition: CompositeParticle_v1.cxx:159
InDet::InDetAmbiScoringTool::m_maxSiHoles
int m_maxSiHoles
maximal number of holes (Pixel+SCT)
Definition: InDetAmbiScoringTool.h:103
xAOD::numberOfTrackSummaryTypes
@ numberOfTrackSummaryTypes
Definition: TrackingPrimitives.h:319
MagField::AtlasFieldCache::solenoidOn
bool solenoidOn() const
status of the magnets
Trk::numberOfTgcEtaHits
@ numberOfTgcEtaHits
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:106
Trk::numberOfPixelHoles
@ numberOfPixelHoles
number of pixels which have a ganged ambiguity.
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:59
Trk::numberOfGangedPixels
@ numberOfGangedPixels
number of Ganged Pixels flagged as fakes
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:61
Trk::numberOfTRTHits
@ numberOfTRTHits
number of TRT outliers
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:79
Trk
Ensure that the ATLAS eigen extensions are properly loaded.
Definition: FakeTrackBuilder.h:9
Trk::numberOfRpcPhiHits
@ numberOfRpcPhiHits
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:109
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
VP1PartSpect::E
@ E
Definition: VP1PartSpectFlags.h:21
InDet::InDetAmbiScoringTool::m_maxSCT_Holes
int m_maxSCT_Holes
Definition: InDetAmbiScoringTool.h:67
InDet::InDetAmbiScoringTool::m_selectortool
ToolHandle< ITrtDriftCircleCutTool > m_selectortool
Returns minimum number of expected TRT drift circles depending on eta.
Definition: InDetAmbiScoringTool.h:75
InDet::InDetAmbiScoringTool::m_maxDoubleHoles
int m_maxDoubleHoles
Definition: InDetAmbiScoringTool.h:102
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
InDet::InDetAmbiScoringTool::m_maxEta
double m_maxEta
maximal Eta cut
Definition: InDetAmbiScoringTool.h:98
InDet::InDetAmbiScoringTool::m_factorPixHoles
std::vector< double > m_factorPixHoles
Definition: InDetAmbiScoringTool.h:69
InDet::InDetAmbiScoringTool::InDetAmbiScoringTool
InDetAmbiScoringTool(const std::string &, const std::string &, const IInterface *)
Definition: InDetAmbiScoringTool.cxx:22
Trk::ParametersBase::momentum
const Amg::Vector3D & momentum() const
Access method for the momentum.
InDet::InDetAmbiScoringTool::m_useSCT
bool m_useSCT
Definition: InDetAmbiScoringTool.h:94
InDet::InDetAmbiScoringTool::m_factorHits
std::vector< double > m_factorHits
Definition: InDetAmbiScoringTool.h:69
python.compareTCTs.ratio
ratio
Definition: compareTCTs.py:295
InDet::InDetAmbiScoringTool::m_maxRPhiImp
double m_maxRPhiImp
maximal RPhi impact parameter cut
Definition: InDetAmbiScoringTool.h:99
InDet::InDetAmbiScoringTool::m_maxPixHoles
int m_maxPixHoles
Definition: InDetAmbiScoringTool.h:67
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
InDet::InDetAmbiScoringTool::m_usePixel
bool m_usePixel
Definition: InDetAmbiScoringTool.h:93
DEBUG
#define DEBUG
Definition: page_access.h:11
F
#define F(x, y, z)
Definition: MD5.cxx:112
AthCommonMsg< AlgTool >::msg
MsgStream & msg() const
Definition: AthCommonMsg.h:24
MagField::AtlasFieldCache
Local cache for magnetic field (based on MagFieldServices/AtlasFieldSvcTLS.h)
Definition: AtlasFieldCache.h:43
InDet::InDetAmbiScoringTool::m_fieldCacheCondObjInputKey
SG::ReadCondHandleKey< AtlasFieldCacheCondObj > m_fieldCacheCondObjInputKey
Definition: InDetAmbiScoringTool.h:85
InDet::InDetAmbiScoringTool::m_factorGangedFakes
std::vector< double > m_factorGangedFakes
Definition: InDetAmbiScoringTool.h:70
InDet::InDetAmbiScoringTool::m_maxRPhiImpEM
double m_maxRPhiImpEM
maximal RPhi impact parameter cut track that match EM clusters
Definition: InDetAmbiScoringTool.h:109
LArCellBinning.step
step
Definition: LArCellBinning.py:158
xAOD::numPixelHoles
@ numPixelHoles
Definition: TrackingPrimitives.h:517
InDet::InDetAmbiScoringTool::m_maxPixelHoles
int m_maxPixelHoles
maximal number of Pixel holes
Definition: InDetAmbiScoringTool.h:104
InDet::InDetAmbiScoringTool::m_minTRTonTrk
int m_minTRTonTrk
minimum number of TRT hits
Definition: InDetAmbiScoringTool.h:106
xAOD::numSCTHoles
@ numSCTHoles
Definition: TrackingPrimitives.h:518
Trk::numberOfGangedFlaggedFakes
@ numberOfGangedFlaggedFakes
number of dead pixel sensors crossed
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:63
Trk::SummaryType
SummaryType
enumerates the different types of information stored in Summary.
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:45
xAOD::track
@ track
Definition: TrackingPrimitives.h:512
python.Constants.VERBOSE
int VERBOSE
Definition: Control/AthenaCommon/python/Constants.py:14
Trk::numberOfRpcEtaHits
@ numberOfRpcEtaHits
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:110
Trk::TrackSummary::get
int get(const SummaryType &type) const
returns the summary information for the passed SummaryType.
ReadHandle.h
Handle class for reading from StoreGate.
AthAlgTool
Definition: AthAlgTool.h:26
FitQuality.h
InDet::InDetAmbiScoringTool::initialize
virtual StatusCode initialize() override
Definition: InDetAmbiScoringTool.cxx:107
InDet::InDetAmbiScoringTool::m_boundsTrtFittedRatio
std::vector< double > m_boundsTrtFittedRatio
Definition: InDetAmbiScoringTool.h:72
Trk::numberOfSCTDoubleHoles
@ numberOfSCTDoubleHoles
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:75
InDet::InDetAmbiScoringTool::m_phiWidthEm
float m_phiWidthEm
Definition: InDetAmbiScoringTool.h:112
InDet::InDetAmbiScoringTool::score
virtual Trk::TrackScore score(const Trk::Track &track) const override
create a score based on how good the passed track is
Definition: InDetAmbiScoringTool.cxx:144
InDet::InDetAmbiScoringTool::m_maxGangedFakes
int m_maxGangedFakes
Definition: InDetAmbiScoringTool.h:68
InDet::InDetAmbiScoringTool::m_maxPixelHits
int m_maxPixelHits
Definition: InDetAmbiScoringTool.h:68
Trk::numberOfCscPhiHits
@ numberOfCscPhiHits
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:107
InDet::InDetAmbiScoringTool::m_beamSpotKey
SG::ReadCondHandleKey< InDet::BeamSpotData > m_beamSpotKey
Definition: InDetAmbiScoringTool.h:80
InDet::InDetAmbiScoringTool::m_maxPixLay
int m_maxPixLay
Definition: InDetAmbiScoringTool.h:68
TauGNNUtils::Variables::Track::trackEta
bool trackEta(const xAOD::TauJet &, const xAOD::TauTrack &track, double &out)
Definition: TauGNNUtils.cxx:475
Trk::numberOfMdtHits
@ numberOfMdtHits
number of mdt hits
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:103
InDet::maxDoubleHoles
@ maxDoubleHoles
Definition: IInDetEtaDependentCutsSvc.h:15
InDet::InDetAmbiScoringTool::m_maxTrtFittedRatio
int m_maxTrtFittedRatio
Definition: InDetAmbiScoringTool.h:67
Trk::TrackInfo::Unknown
@ Unknown
Track fitter not defined.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/TrackInfo.h:41