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