ATLAS Offline Software
Loading...
Searching...
No Matches
InDet::InDetNNScoringTool Class Reference

Concrete implementation of the ITrackScoringTool pABC. More...

#include <InDetNNScoringTool.h>

Inheritance diagram for InDet::InDetNNScoringTool:
Collaboration diagram for InDet::InDetNNScoringTool:

Public Member Functions

 InDetNNScoringTool (const std::string &, const std::string &, const IInterface *)
virtual ~InDetNNScoringTool ()=default
virtual StatusCode initialize () override
virtual bool passBasicSelections (const Trk::Track &track) const override
 check track selections independent from TrackSummary
virtual Trk::TrackScore score (const Trk::Track &track, bool checkBasicSel) const override
 create a score based on how good the passed track is
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
Trk::TrackScore ambigScore (const Trk::Track &track, const Trk::TrackSummary &trackSum) const
Trk::TrackScore calcNnScore (const Trk::Track &track, const Trk::TrackSummary &trackSum, const Trk::Perigee *extrapolatedPerigee) const
ServiceHandle< StoreGateSvc > & evtStore ()
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
const ServiceHandle< StoreGateSvc > & detStore () const
 The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
virtual StatusCode sysInitialize () override
 Perform system initialization for an algorithm.
virtual StatusCode sysStart () override
 Handle START transition.
virtual std::vector< Gaudi::DataHandle * > inputHandles () const override
 Return this algorithm's input handles.
virtual std::vector< Gaudi::DataHandle * > outputHandles () const override
 Return this algorithm's output handles.
Gaudi::Details::PropertyBase & declareProperty (Gaudi::Property< T, V, H > &t)
void updateVHKA (Gaudi::Details::PropertyBase &)
MsgStream & msg () const
bool msgLvl (const MSG::Level lvl) const

Static Public Member Functions

static const InterfaceID & interfaceID ()

Protected Member Functions

void renounceArray (SG::VarHandleKeyArray &handlesArray)
 remove all handles from I/O resolution
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce (T &h)
void extraDeps_update_handler (Gaudi::Details::PropertyBase &ExtraDeps)
 Add StoreName to extra input/output deps as needed.

Private Types

typedef ServiceHandle< StoreGateSvcStoreGateSvc_t

Private Member Functions

void setupScoreModifiers ()
bool isEmCaloCompatible (const Trk::Track &track, const EventContext &ctx) const
 Check if the cluster is compatible with a EM cluster.
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey>

Private Attributes

std::unique_ptr< lwt::LightweightGraph > m_graph
std::map< std::string, double > m_DNN_inputValues
int m_maxDblHoles = -1
int m_maxPixHoles = -1
int m_maxSCT_Holes = -1
int m_maxHits = -1
int m_maxSigmaChi2 = -1
int m_maxTrtRatio = -1
int m_maxTrtFittedRatio = -1
int m_maxB_LayerHits = -1
int m_maxPixelHits = -1
int m_maxPixLay = -1
int m_maxGangedFakes = -1
std::vector< double > m_factorDblHoles
std::vector< double > m_factorPixHoles
std::vector< double > m_factorSCT_Holes
std::vector< double > m_factorHits
std::vector< double > m_factorSigmaChi2
std::vector< double > m_factorB_LayerHits
std::vector< double > m_factorPixelHits
std::vector< double > m_factorPixLay
std::vector< double > m_factorGangedFakes
std::vector< double > m_boundsSigmaChi2
std::vector< double > m_boundsTrtRatio
std::vector< double > m_factorTrtRatio
std::vector< double > m_boundsTrtFittedRatio
std::vector< double > m_factorTrtFittedRatio
ToolHandle< ITrtDriftCircleCutToolm_selectortool {this, "DriftCircleCutTool", "InDet::InDetTrtDriftCircleCutTool"}
 Returns minimum number of expected TRT drift circles depending on eta.
std::vector< Trk::TrackScorem_summaryTypeScore
 holds the scores assigned to each Trk::SummaryType from the track's Trk::TrackSummary
SG::ReadCondHandleKey< InDet::BeamSpotDatam_beamSpotKey { this, "BeamSpotKey", "BeamSpotData", "SG key for beam spot" }
ToolHandle< Trk::IExtrapolatorm_extrapolator {this, "Extrapolator", "Trk::Extrapolator"}
SG::ReadCondHandleKey< AtlasFieldCacheCondObjm_fieldCacheCondObjInputKey {this, "AtlasFieldCacheCondObj", "fieldCondObj", "Name of the Magnetic Field conditions object key"}
BooleanProperty m_useAmbigFcn {this, "useAmbigFcn", true}
 use the scoring tuned to Ambiguity processing or not
BooleanProperty m_useTRT_AmbigFcn {this, "useTRT_AmbigFcn", false}
BooleanProperty m_useSigmaChi2 {this, "useSigmaChi2", false}
StringProperty m_nnCutConfig {this, "nnCutConfig", ""}
DoubleProperty m_nnCutThreshold {this, "nnCutThreshold", -0.1}
BooleanProperty m_usePixel {this, "usePixel", true}
BooleanProperty m_useSCT {this, "useSCT", true}
DoubleProperty m_minPt {this, "minPt", 500., "minimal Pt cut"}
 cuts for selecting good tracks
DoubleProperty m_maxEta {this, "maxEta", 2.7, "maximal Eta cut"}
DoubleProperty m_maxRPhiImp {this, "maxRPhiImp", 10., "maximal RPhi impact parameter cut"}
DoubleProperty m_maxZImp {this, "maxZImp", 250., "maximal z impact parameter cut"}
IntegerProperty m_minSiClusters {this, "minSiClusters", 7, "minimal number of Si clusters"}
IntegerProperty m_maxDoubleHoles {this, "maxDoubleHoles", 2, "maximum number of SCT double holes"}
IntegerProperty m_maxSiHoles {this, "maxSiHoles", 5, "max number of Silicon (Pixel+SCT) holes"}
IntegerProperty m_maxPixelHoles {this, "maxPixelHoles", 5, "max number of Pixel holes"}
IntegerProperty m_maxSctHoles {this, "maxSCTHoles", 5, "max number of SCT holes"}
IntegerProperty m_minTRTonTrk {this, "minTRTonTrk", 9, "minimum number of TRT hits"}
DoubleProperty m_minTRTprecision {this, "minTRTPrecisionFraction", 0.5, "minimum fraction of TRT precision hits"}
IntegerProperty m_minPixel {this, "minPixel", 0, "minimum number of pixel clusters"}
DoubleProperty m_maxRPhiImpEM {this, "maxRPhiImpEM", 50., "maximal RPhi impact parameter cut track that match EM clusters"}
BooleanProperty m_useEmClusSeed {this, "doEmCaloSeed", true}
FloatProperty m_phiWidthEm {this, "phiWidthEM", 0.075}
FloatProperty m_etaWidthEm {this, "etaWidthEM", 0.05}
SG::ReadHandleKey< ROIPhiRZContainerm_caloClusterROIKey {this, "EMROIPhiRZContainer", "", "Name of the calo cluster ROIs in Phi,R,Z parameterization"}
StoreGateSvc_t m_evtStore
 Pointer to StoreGate (event store by default)
StoreGateSvc_t m_detStore
 Pointer to StoreGate (detector store by default)
std::vector< SG::VarHandleKeyArray * > m_vhka
bool m_varHandleArraysDeclared

Detailed Description

Concrete implementation of the ITrackScoringTool pABC.

Definition at line 47 of file InDetNNScoringTool.h.

Member Typedef Documentation

◆ StoreGateSvc_t

typedef ServiceHandle<StoreGateSvc> AthCommonDataStore< AthCommonMsg< AlgTool > >::StoreGateSvc_t
privateinherited

Definition at line 388 of file AthCommonDataStore.h.

Constructor & Destructor Documentation

◆ InDetNNScoringTool()

InDet::InDetNNScoringTool::InDetNNScoringTool ( const std::string & t,
const std::string & n,
const IInterface * p )

Definition at line 24 of file InDetNNScoringTool.cxx.

26 :
27 AthAlgTool(t,n,p),
28 // Initialization of ScoreModifiers variables
30{
31 declareInterface<Trk::ITrackScoringTool>(this);
32
33 //set values for scores
35 m_summaryTypeScore[Trk::numberOfPixelHoles] = -10; // a hole is bad
36 m_summaryTypeScore[Trk::numberOfInnermostPixelLayerHits] = 10; // addition for being b-layer
37 m_summaryTypeScore[Trk::numberOfGangedPixels] = -5; // decrease for being ganged
38 m_summaryTypeScore[Trk::numberOfGangedFlaggedFakes] = -10; // decrease for being ganged fake
39 m_summaryTypeScore[Trk::numberOfSCTHits] = 10; // half of a pixel, since only 1dim
40 m_summaryTypeScore[Trk::numberOfSCTHoles] = -5; // a hole is bad !
41 m_summaryTypeScore[Trk::numberOfSCTDoubleHoles] = -15; // a double hole is even worse !
42 m_summaryTypeScore[Trk::numberOfTRTHits] = 1; // 10 straws ~ 1 SCT
43 m_summaryTypeScore[Trk::numberOfTRTHighThresholdHits] = 0; // addition for being TR
44 m_summaryTypeScore[Trk::numberOfOutliersOnTrack] = -1; // -ME- TRT oulier should not kill 5 TRT on track (was -5)
45
46 // scoring for Muons not needed
54}
AthAlgTool()
Default constructor:
std::vector< Trk::TrackScore > m_summaryTypeScore
holds the scores assigned to each Trk::SummaryType from the track's Trk::TrackSummary
@ numberOfGangedPixels
number of Ganged Pixels flagged as fakes
@ numberOfPixelHits
number of pixel layers on track with absence of hits
@ numberOfInnermostPixelLayerHits
these are the hits in the 1st pixel layer
@ numberOfTRTHighThresholdHits
total number of TRT hits which pass the high threshold
@ numberOfSCTHoles
number of Holes in both sides of a SCT module
@ numberOfGangedFlaggedFakes
number of dead pixel sensors crossed
@ numberOfPixelHoles
number of pixels which have a ganged ambiguity.
@ numberOfOutliersOnTrack
100 times the standard deviation of the chi2 from the surfaces

◆ ~InDetNNScoringTool()

virtual InDet::InDetNNScoringTool::~InDetNNScoringTool ( )
virtualdefault

Member Function Documentation

◆ ambigScore()

Trk::TrackScore InDet::InDetNNScoringTool::ambigScore ( const Trk::Track & track,
const Trk::TrackSummary & trackSum ) const

Definition at line 342 of file InDetNNScoringTool.cxx.

343{
344 //
345 // --- start with bonus for high pt tracks
346 //
347 // double prob = 1.;
348 double pt = std::abs(track.trackParameters()->front()->pT());
349 double prob = log10( pt ) - 1.; // 100 MeV is min and gets score 1
350 ATH_MSG_DEBUG ("Modifier for pt = " << pt / 1000. << " GeV is: "<< prob);
351
352 //
353 // --- prob and cuts on holes
354 //
355 if (m_usePixel) {
356 // --- Pixel holes
357 int iPixHoles = trackSummary.get(Trk::numberOfPixelHoles);
358 if ( iPixHoles > -1 && m_maxPixHoles > 0) {
359 if (iPixHoles > m_maxPixHoles) {
360 prob /= (iPixHoles - m_maxPixHoles + 1); // holes are bad !
361 iPixHoles = m_maxPixHoles;
362 }
363 prob *= m_factorPixHoles[iPixHoles];
364 ATH_MSG_DEBUG ("Modifier for " << iPixHoles << " Pixel holes: "<<m_factorPixHoles[iPixHoles]
365 << " New score now: " << prob);
366 }
367 }
368
369 if (m_useSCT) {
370 // --- SCT holes
371 int iSCT_Holes = trackSummary.get(Trk::numberOfSCTHoles);
372 if (iSCT_Holes > -1 && m_maxSCT_Holes > 0) {
373 if (iSCT_Holes > m_maxSCT_Holes) {
374 prob /= (iSCT_Holes - m_maxSCT_Holes + 1); // holes are bad !
375 iSCT_Holes = m_maxSCT_Holes;
376 }
377 prob *= m_factorSCT_Holes[iSCT_Holes];
378 ATH_MSG_DEBUG ("Modifier for " << iSCT_Holes << " SCT holes: "<<m_factorSCT_Holes[iSCT_Holes]
379 << " New score now: " << prob);
380 }
381 // --- SCT double holes
382 int iDblHoles = trackSummary.get(Trk::numberOfSCTDoubleHoles);
383 if (iDblHoles > -1 && m_maxDblHoles > 0) {
384 if (iDblHoles > m_maxDblHoles) {
385 prob /= (iDblHoles - m_maxDblHoles + 1); // holes are bad !
386 iDblHoles = m_maxDblHoles;
387 }
388 prob *= m_factorDblHoles[iDblHoles];
389 ATH_MSG_DEBUG ("Modifier for " << iDblHoles << " double holes: "<<m_factorDblHoles[iDblHoles]
390 << " New score now: " << prob);
391 }
392 }
393 //
394 // --- prob for other counters
395 //
396 if (m_usePixel) {
397
398 // ME: this if statement needs to be removed...
399 // --- count layers only if holes are not searched for
400 // if (trackSummary.get(Trk::numberOfPixelHoles) == -1) {
401
402 // --- Pixel layers
403 int iPixLay = trackSummary.get(Trk::numberOfContribPixelLayers);
404 if (iPixLay > -1 && m_maxPixLay > 0) {
405 if (iPixLay > m_maxPixLay) {
406 prob *= (iPixLay - m_maxPixLay + 1); // layers are good !
407 iPixLay = m_maxPixLay;
408 }
409 prob *= m_factorPixLay[iPixLay];
410 ATH_MSG_DEBUG ("Modifier for " << iPixLay << " Pixel layers: "<<m_factorPixLay[iPixLay]
411 << " New score now: " << prob);
412 }
413
414 // --- Pixel hits
415 int pixelHits = trackSummary.get(Trk::numberOfPixelHits);
416 if (pixelHits > -1 && m_maxPixelHits > 0) {
417 if (pixelHits > m_maxPixelHits) {
418 prob *= (pixelHits - m_maxPixelHits + 1); // hits are good !
419 pixelHits = m_maxPixelHits;
420 }
421 prob *= m_factorPixelHits[pixelHits];
422 ATH_MSG_DEBUG ("Modifier for " << pixelHits << " Pixel hits: "<<m_factorPixelHits[pixelHits]
423 << " New score now: " << prob);
424 }
425 // --- Pixel blayer hits
426 int bLayerHits = trackSummary.get(Trk::numberOfInnermostPixelLayerHits);
427 if (bLayerHits > -1 && m_maxB_LayerHits > 0) {
428 if (bLayerHits > m_maxB_LayerHits) {
429 prob *= (bLayerHits - m_maxB_LayerHits + 1); // hits are good !
430 bLayerHits = m_maxB_LayerHits;
431 }
432 prob *= m_factorB_LayerHits[bLayerHits];
433 ATH_MSG_DEBUG ("Modifier for " << bLayerHits << " b-layer hits: "<<m_factorB_LayerHits[bLayerHits]
434 << " New score now: " << prob);
435 }
436 // --- Pixel Ganged fakes
437 int pixelGangedFakes = trackSummary.get(Trk::numberOfGangedFlaggedFakes);
438 if (pixelGangedFakes > -1 && m_maxGangedFakes > 0) {
439 if (pixelGangedFakes > m_maxGangedFakes) {
440 prob /= (pixelGangedFakes - m_maxGangedFakes + 1); // ganged are bad !
441 pixelGangedFakes = m_maxGangedFakes;
442 }
443 prob *= m_factorGangedFakes[pixelGangedFakes];
444 ATH_MSG_DEBUG ("Modifier for " << pixelGangedFakes << " ganged fakes hits: "<<m_factorGangedFakes[pixelGangedFakes]
445 << " New score now: " << prob);
446 }
447 }
448
449 int iHits = 0;
450 iHits += m_usePixel ? trackSummary.get(Trk::numberOfPixelHits) : 3; // if Pixel off, do not count as inefficient
451 iHits += m_useSCT ? trackSummary.get(Trk::numberOfSCTHits) : 8; // if SCT off, do not count as inefficient
452 if (iHits > -1 && m_maxHits > 0) {
453 if (iHits > m_maxHits) {
454 prob *= (iHits - m_maxHits + 1); // hits are good !
455 iHits = m_maxHits;
456 }
457 prob *= m_factorHits[iHits];
458 ATH_MSG_DEBUG ("Modifier for " << iHits << " Sihits: "<<m_factorHits[iHits]
459 << " New score now: " << prob);
460 }
461
462 //
463 // --- special treatment for TRT hits
464 //
465 int iTRT_Hits = trackSummary.get(Trk::numberOfTRTHits);
466 int iTRT_Outliers = trackSummary.get(Trk::numberOfTRTOutliers);
467 //
468 if ( iTRT_Hits > 0 && m_maxTrtRatio > 0) {
469 // get expected number of TRT hits
470 double nTrtExpected = 30.;
471 assert( m_selectortool.isEnabled() );
472 nTrtExpected = m_selectortool->minNumberDCs(track.trackParameters()->front());
473 ATH_MSG_DEBUG ("Expected number of TRT hits: " << nTrtExpected << " for eta: "
474 << std::abs(track.trackParameters()->front()->eta()));
475 double ratio = (nTrtExpected != 0) ? iTRT_Hits / nTrtExpected : 0;
477 for (int i=0; i<m_maxTrtRatio; ++i) {
478 if ( m_boundsTrtRatio[i] < ratio && ratio <= m_boundsTrtRatio[i+1]) {
480 ATH_MSG_DEBUG ("Modifier for " << iTRT_Hits << " TRT hits (ratio " << ratio
481 << ") is : "<< m_factorTrtRatio[i] << " New score now: " << prob);
482 break;
483 }
484 }
485 }
486 //
487 if ( iTRT_Hits > 0 && iTRT_Outliers >= 0 && m_maxTrtFittedRatio > 0) {
488 double fitted = double(iTRT_Hits) / double(iTRT_Hits + iTRT_Outliers);
490 for (int i=0; i<m_maxTrtFittedRatio; ++i) {
491 if (fitted <= m_boundsTrtFittedRatio[i+1]) {
493 ATH_MSG_DEBUG ("Modifier for TRT fitted ratio of " << fitted
494 << " is : "<< m_factorTrtFittedRatio[i] << " New score now: " << prob);
495 break;
496 }
497 }
498 }
499
500 // is this a track from the pattern or a fitted track ?
501 bool ispatterntrack = (track.info().trackFitter()==Trk::TrackInfo::Unknown);
502
503 //
504 // --- non binned Chi2
505 //
506 if (!ispatterntrack) {
507 if (track.fitQuality()!=nullptr && track.fitQuality()->chiSquared()>0 && track.fitQuality()->numberDoF()>0 ) {
508 int indf = track.fitQuality()->numberDoF();
509 double chi2 = track.fitQuality()->chiSquared();
510 double fac = 1. / log10 (10. + 10. * chi2 / indf); // very soft chi2
511 prob *= fac;
512 ATH_MSG_DEBUG ("Modifier for chi2 = " << chi2 << " and NDF = " << indf
513 << " is : "<< fac << " New score now: " << prob);
514
515 }
516 }
517 //
518 // --- fit quality prob
519 //
520 if ( !ispatterntrack && (m_useSigmaChi2) && track.fitQuality() ) {
521
522 int ndf = track.fitQuality()->numberDoF();
523 double chi2 = track.fitQuality()->chiSquared();
524 if (ndf > 0) {
525 //
526 // --- special variable for bad chi2 distribution
527 //
528 if (m_useSigmaChi2) {
529 int sigmaChi2times100 = trackSummary.get(Trk::standardDeviationOfChi2OS);
530 if (sigmaChi2times100 > 0) {
531 double testvar = double(sigmaChi2times100)/100. - sqrt(2.*chi2/ndf);
532 if (msgLvl(MSG::VERBOSE)) msg(MSG::VERBOSE) << "sigma chi2 = " << testvar << endmsg;
533 if ( testvar< m_boundsSigmaChi2[0] ) {
535 ATH_MSG_DEBUG ("Modifier for " << testvar << " sigma chi2: "<< m_factorSigmaChi2[0]
536 << " New score now: " << prob);
537 } else if (m_boundsSigmaChi2[m_maxSigmaChi2] <= testvar) {
539 ATH_MSG_DEBUG ("Modifier for " << testvar << " sigma chi2: "<< m_factorSigmaChi2[m_maxSigmaChi2-1]
540 << " New score now: " << prob);
541 } else {
542 for (int i = 0 ; i<m_maxSigmaChi2 ; ++i ) {
543 if ( m_boundsSigmaChi2[i]<=testvar && testvar<m_boundsSigmaChi2[i+1] ) {
545 ATH_MSG_DEBUG ("Modifier for " << testvar << " sigma chi2: "<< m_factorSigmaChi2[i]
546 << " New score now: " << prob);
547 break;
548 }
549 }
550 }
551 }
552 }
553 }
554 }
555
556 return Trk::TrackScore(prob);
557}
#define endmsg
#define ATH_MSG_DEBUG(x)
bool msgLvl(const MSG::Level lvl) const
MsgStream & msg() const
std::vector< double > m_factorPixHoles
std::vector< double > m_boundsSigmaChi2
std::vector< double > m_factorB_LayerHits
std::vector< double > m_factorDblHoles
std::vector< double > m_factorSCT_Holes
std::vector< double > m_factorHits
std::vector< double > m_factorGangedFakes
std::vector< double > m_factorTrtRatio
std::vector< double > m_boundsTrtFittedRatio
std::vector< double > m_factorSigmaChi2
ToolHandle< ITrtDriftCircleCutTool > m_selectortool
Returns minimum number of expected TRT drift circles depending on eta.
std::vector< double > m_factorPixelHits
std::vector< double > m_factorPixLay
std::vector< double > m_boundsTrtRatio
std::vector< double > m_factorTrtFittedRatio
double chi2(TH1 *h0, TH1 *h1)
float TrackScore
Definition TrackScore.h:10
@ numberOfContribPixelLayers
number of contributing layers of the pixel detector

◆ calcNnScore()

Trk::TrackScore InDet::InDetNNScoringTool::calcNnScore ( const Trk::Track & track,
const Trk::TrackSummary & trackSum,
const Trk::Perigee * extrapolatedPerigee ) const

Definition at line 815 of file InDetNNScoringTool.cxx.

816{
817 ATH_MSG_DEBUG("Using NN Score Function");
818 // initialize with dummy score
819 double DNNscore(-1.0);
820
821 // This calculates a variant of the delta-eta variable used in large-d0 seeding
822 double d0 = extrapolatedPerigee->parameters()[Trk::d0];
823 double z0 = extrapolatedPerigee->parameters()[Trk::z0];
824 double deltaEta = std::abs(std::atan2(std::abs(d0), z0) - 2 * std::atan(std::exp(-track.trackParameters()->front()->eta())));
825
826 // Build dictionary of inputs for lwtnn to use
827 // It is ok to fill this with more variables than the model uses
828 // as long as no variables are missing
829 std::map<std::string, double> trackInputs{
830 {"pT", track.trackParameters()->front()->pT()},
831 {"eta", track.trackParameters()->front()->eta()},
832 {"numberOfSCTHoles", (double) trackSummary.get(Trk::numberOfSCTHoles)},
833 {"numberOfSCTHits", (double) trackSummary.get(Trk::numberOfSCTHits)},
834 {"numberDoF", (double) track.fitQuality()->numberDoF()},
835 {"Sihits", (double) (trackSummary.get(Trk::numberOfPixelHits) + trackSummary.get(Trk::numberOfSCTHits))},
836 {"d0", d0},
837 {"z0", z0},
838 {"deltaEta", deltaEta}
839 };
840
841 // Set up the nodes used for inputs
842 std::map<std::string, std::map<std::string, double> > inputs{
843 {"trackInputs", trackInputs}
844 };
845
846 // Evaluate the network
847 lwt::ValueMap output = m_graph->compute(inputs);
848
849 // Obtain the discriminant associated with the single output node
850 DNNscore = output["nnScore"];
851 // Return the discriminant as the score
852 ATH_MSG_DEBUG("DNNscore: " << DNNscore);
853 if (DNNscore < m_nnCutThreshold)
854 ATH_MSG_DEBUG("DNNscore is below threshold of " << m_nnCutThreshold << ", rejecting track. ");
855 if (DNNscore < 0)
856 ATH_MSG_ERROR("DNNscore should be 0 or greater.");
857 return Trk::TrackScore(DNNscore);
858}
#define ATH_MSG_ERROR(x)
std::unique_ptr< lwt::LightweightGraph > m_graph
double deltaEta(const I4Momentum &p1, const I4Momentum &p2)
Computes efficiently .
Definition P4Helpers.h:66
@ d0
Definition ParamDefs.h:63
@ z0
Definition ParamDefs.h:64
output
Definition merge.py:16

◆ declareGaudiProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< AlgTool > >::declareGaudiProperty ( Gaudi::Property< T, V, H > & hndl,
const SG::VarHandleKeyType &  )
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleKey>

Definition at line 156 of file AthCommonDataStore.h.

158 {
160 hndl.value(),
161 hndl.documentation());
162
163 }
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)

◆ declareProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( Gaudi::Property< T, V, H > & t)
inlineinherited

Definition at line 145 of file AthCommonDataStore.h.

145 {
146 typedef typename SG::HandleClassifier<T>::type htype;
148 }
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>

◆ detStore()

const ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< AlgTool > >::detStore ( ) const
inlineinherited

The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 95 of file AthCommonDataStore.h.

◆ evtStore()

ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< AlgTool > >::evtStore ( )
inlineinherited

The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 85 of file AthCommonDataStore.h.

◆ extraDeps_update_handler()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::extraDeps_update_handler ( Gaudi::Details::PropertyBase & ExtraDeps)
protectedinherited

Add StoreName to extra input/output deps as needed.

use the logic of the VarHandleKey to parse the DataObjID keys supplied via the ExtraInputs and ExtraOuputs Properties to add the StoreName if it's not explicitly given

◆ initialize()

StatusCode InDet::InDetNNScoringTool::initialize ( )
overridevirtual

Definition at line 58 of file InDetNNScoringTool.cxx.

59{
60 StatusCode sc = AlgTool::initialize();
61 if (sc.isFailure()) return sc;
62
63 sc = m_extrapolator.retrieve();
64 if (sc.isFailure()) {
65 msg(MSG::FATAL) << "Failed to retrieve tool " << m_extrapolator << endmsg;
66 return StatusCode::FAILURE;
67 } else
68 msg(MSG::DEBUG) << "Retrieved tool " << m_extrapolator << endmsg;
69
70 ATH_CHECK (m_selectortool.retrieve( DisableTool{ m_selectortool.empty() } ));
71 // Get segment selector tool
72 //
73
74 ATH_CHECK(m_beamSpotKey.initialize());
75
77 msg(MSG::FATAL) << "Both on, normal ambi funciton and the one for back tracking, configuration problem, not recoverable" << endmsg;
78 return StatusCode::FAILURE;
79 }
80
81 // Read handle for AtlasFieldCacheCondObj
83
85
86 // lwtnn initialization
87 if (m_nnCutThreshold > 0.0) { // Load NN only if it will be used
88 // Locate configuration file
89 std::string nnCutConfigPath = PathResolverFindCalibFile(m_nnCutConfig); //returns "" if file not found
90 if (nnCutConfigPath.empty()){
91 ATH_MSG_FATAL ( "Failed to find configuration file: " << m_nnCutConfig);
92 return StatusCode::FAILURE;
93 }
94 ATH_MSG_DEBUG ("Loading configuration file:" << nnCutConfigPath);
95 // Load NN weights
96 std::ifstream inFile(nnCutConfigPath);
97 lwt::GraphConfig config(lwt::parse_json_graph(inFile));
98 m_graph = std::make_unique<lwt::LightweightGraph>(config);
99 ATH_MSG_DEBUG ("NN configuration loaded");
100 inFile.close();
101 }
102
104
105 return StatusCode::SUCCESS;
106}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_FATAL(x)
static Double_t sc
std::string PathResolverFindCalibFile(const std::string &logical_file_name)
SG::ReadCondHandleKey< InDet::BeamSpotData > m_beamSpotKey
ToolHandle< Trk::IExtrapolator > m_extrapolator
SG::ReadHandleKey< ROIPhiRZContainer > m_caloClusterROIKey
BooleanProperty m_useAmbigFcn
use the scoring tuned to Ambiguity processing or not
SG::ReadCondHandleKey< AtlasFieldCacheCondObj > m_fieldCacheCondObjInputKey
::StatusCode StatusCode
StatusCode definition for legacy code.
str inFile
Definition makeTOC.py:5

◆ inputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< AlgTool > >::inputHandles ( ) const
overridevirtualinherited

Return this algorithm's input handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ interfaceID()

const InterfaceID & Trk::ITrackScoringTool::interfaceID ( )
inlinestaticinherited

Definition at line 37 of file ITrackScoringTool.h.

38{
40}
static const InterfaceID IID_ITrackScoringTool("Trk::ITrackScoringTool", 1, 0)

◆ isEmCaloCompatible()

bool InDet::InDetNNScoringTool::isEmCaloCompatible ( const Trk::Track & track,
const EventContext & ctx ) const
private

Check if the cluster is compatible with a EM cluster.

Definition at line 787 of file InDetNNScoringTool.cxx.

788{
789 const Trk::TrackParameters * Tp = track.trackParameters()->front();
790
791 //Switch to the track parameters of the first measurment instead of the perigee parameters
792 ATH_MSG_VERBOSE ("--> Looping over TSOS's");
793 for (const auto *tsos : *track.trackStateOnSurfaces() ) {
794 // get measurment from TSOS
795 const auto *meas = tsos->measurementOnTrack();
796 const auto *tp = tsos->trackParameters();
797 // if we do not have a measurement, we should just mark it
798 if (!meas || !tp) {
799 continue;
800 } else {
801 Tp = tp;
802 break;
803 }
804 }
805
806 double F = Tp->momentum().phi();
807 double E = Tp->momentum().eta();
808 double R = Tp->position().perp();
809 double Z = Tp->position().z();
810
811 SG::ReadHandle<ROIPhiRZContainer> calo(m_caloClusterROIKey, ctx);
812 return calo->hasMatchingROI(F, E, R, Z, m_phiWidthEm, m_etaWidthEm);
813}
#define ATH_MSG_VERBOSE(x)
static Double_t Tp(Double_t *t, Double_t *par)
#define F(x, y, z)
Definition MD5.cxx:112
double R(const INavigable4Momentum *p1, const double v_eta, const double v_phi)
ParametersBase< TrackParametersDim, Charged > TrackParameters

◆ msg()

MsgStream & AthCommonMsg< AlgTool >::msg ( ) const
inlineinherited

Definition at line 24 of file AthCommonMsg.h.

24 {
25 return this->msgStream();
26 }

◆ msgLvl()

bool AthCommonMsg< AlgTool >::msgLvl ( const MSG::Level lvl) const
inlineinherited

Definition at line 30 of file AthCommonMsg.h.

30 {
31 return this->msgLevel(lvl);
32 }

◆ outputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< AlgTool > >::outputHandles ( ) const
overridevirtualinherited

Return this algorithm's output handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ passBasicSelections()

bool InDet::InDetNNScoringTool::passBasicSelections ( const Trk::Track & track) const
overridevirtual

check track selections independent from TrackSummary

Implements Trk::ITrackScoringTool.

Definition at line 109 of file InDetNNScoringTool.cxx.

110{
111 //
112 // --- kinematic selection (done as well on input ?)
113 //
114 // --- beam spot position
115 Amg::Vector3D beamSpotPosition(0,0,0);
116 SG::ReadCondHandle<InDet::BeamSpotData> beamSpotHandle { m_beamSpotKey };
117 if (beamSpotHandle.isValid()) beamSpotPosition = beamSpotHandle->beamVtx().position();
118 // --- create surface
119 Trk::PerigeeSurface perigeeSurface(beamSpotPosition);
120
121 const Trk::TrackParameters* input = track.trackParameters()->front();
122
123 // cuts on parameters
124 const EventContext& ctx = Gaudi::Hive::currentContext();
125 SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx};
126 const AtlasFieldCacheCondObj* fieldCondObj{*readHandle};
127 if (fieldCondObj == nullptr) {
128 ATH_MSG_ERROR("simpleScore: Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key());
129 return false;
130 }
131 MagField::AtlasFieldCache fieldCache;
132 fieldCondObj->getInitializedCache (fieldCache);
133
134 if (fieldCache.solenoidOn()){
135 if (std::abs(input->pT()) < m_minPt) {
136 ATH_MSG_DEBUG ("Track pt < "<<m_minPt<<", reject it");
137 return false;
138 }
139 }
140 if (std::abs(input->eta()) > m_maxEta) {
141 ATH_MSG_DEBUG ("Track eta > "<<m_maxEta<<", reject it");
142 return false;
143 }
144
145 // uses perigee on track or extrapolates, no material in any case, we cut on impacts
146 // add back extrapolation without errors
147 std::unique_ptr<const Trk::TrackParameters> parm( m_extrapolator->extrapolateDirectly(ctx, *input, perigeeSurface) );
148
149 if (!parm || parm->surfaceType()!=Trk::SurfaceType::Perigee) {
150 ATH_MSG_WARNING( "Extrapolation of perigee failed, this should never happen" );
151 return false;
152 }
153
154 ATH_MSG_VERBOSE ("extrapolated perigee: "<<*parm);
155 if (std::abs(parm->parameters()[Trk::z0]) > m_maxZImp) {
156 ATH_MSG_DEBUG ("Track Z impact > "<<m_maxZImp<<", reject it");
157 return false;
158 }
159
160 double maxD0 = m_maxRPhiImp;
161 if(m_useEmClusSeed) {
162 if (isEmCaloCompatible( track, ctx ) ) {
163 maxD0 = m_maxRPhiImpEM;
164 }
165 }
166 if (std::abs(parm->parameters()[Trk::d0]) > maxD0) {
167 ATH_MSG_DEBUG ("Track Rphi impact > "<<maxD0<<", reject it");
168 return false;
169 }
170
171 return true;
172}
#define ATH_MSG_WARNING(x)
void getInitializedCache(MagField::AtlasFieldCache &cache) const
get B field cache for evaluation as a function of 2-d or 3-d position.
bool isEmCaloCompatible(const Trk::Track &track, const EventContext &ctx) const
Check if the cluster is compatible with a EM cluster.
DoubleProperty m_minPt
cuts for selecting good tracks
bool solenoidOn() const
status of the magnets
Eigen::Matrix< double, 3, 1 > Vector3D

◆ renounce()

std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > AthCommonDataStore< AthCommonMsg< AlgTool > >::renounce ( T & h)
inlineprotectedinherited

Definition at line 380 of file AthCommonDataStore.h.

381 {
382 h.renounce();
384 }
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce(T &h)

◆ renounceArray()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::renounceArray ( SG::VarHandleKeyArray & handlesArray)
inlineprotectedinherited

remove all handles from I/O resolution

Definition at line 364 of file AthCommonDataStore.h.

364 {
366 }

◆ score()

Trk::TrackScore InDet::InDetNNScoringTool::score ( const Trk::Track & track,
bool checkBasicSel ) const
overridevirtual

create a score based on how good the passed track is

Implements Trk::ITrackScoringTool.

Definition at line 176 of file InDetNNScoringTool.cxx.

177{
178 if(checkBasicSel && !passBasicSelections(track)){
179 ATH_MSG_VERBOSE ("Track fail basic selections");
180 return Trk::TrackScore(0);
181 }
182 if (!track.trackSummary()) {
183 ATH_MSG_FATAL("Track without a summary");
184 }
185 ATH_MSG_VERBOSE ("Track has TrackSummary "<<*track.trackSummary());
186 Trk::TrackScore score = Trk::TrackScore( simpleScore(track, *track.trackSummary()) );
187 ATH_MSG_DEBUG ("Track has Score: "<<score);
188 return score;
189}
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
virtual bool passBasicSelections(const Trk::Track &track) const override
check track selections independent from TrackSummary
virtual Trk::TrackScore score(const Trk::Track &track, bool checkBasicSel) const override
create a score based on how good the passed track is

◆ setupScoreModifiers()

void InDet::InDetNNScoringTool::setupScoreModifiers ( )
private

Definition at line 561 of file InDetNNScoringTool.cxx.

562{
563 //
564 // --- number of Pixel holes
565 //
566 // --- NewTracking and BackTracking
567 const int maxPixHoles = 2; // there is an explicit cut
568 const double goodPixHoles[maxPixHoles+1] = {1.0 , 0.04 , 0.004 };
569 const double fakePixHoles[maxPixHoles+1] = {1.0 , 0.30 , 0.200 };
570 // put it into the private members
571 m_maxPixHoles = maxPixHoles;
572 for (int i=0; i<=m_maxPixHoles; ++i) m_factorPixHoles.push_back(goodPixHoles[i]/fakePixHoles[i]);
573
574 //
575 // --- number of SCT holes
576 //
577 if (!m_useTRT_AmbigFcn) {
578 // --- NewTracking
579 const int maxSCT_Holes = 5; // moved from 3 -> 5 , there is an explicit cut anyway
580 const double goodSCT_Holes[maxSCT_Holes+1] = { 1.0 , 0.06 , 0.010 , 0.0007, 0.0005, 0.0003 };
581 const double fakeSCT_Holes[maxSCT_Holes+1] = { 1.0 , 0.15 , 0.100 , 0.0100, 0.0100, 0.0100 };
582 // put it into the private members
583 m_maxSCT_Holes = maxSCT_Holes;
584 for (int i=0; i<=m_maxSCT_Holes; ++i) m_factorSCT_Holes.push_back(goodSCT_Holes[i]/fakeSCT_Holes[i]);
585 } else {
586 // --- BackTracking
587 const int maxSCT_Holes = 6;
588 const double goodSCT_Holes[maxSCT_Holes+1] = {0.910, 0.074, 0.014, 0.001, 0.001, 0.00001, 0.00001};
589 const double fakeSCT_Holes[maxSCT_Holes+1] = {0.910, 0.192, 0.229, 0.061, 0.065, 0.016 , 0.025};
590 // put it into the private members
591 m_maxSCT_Holes = maxSCT_Holes;
592 for (int i=0; i<=m_maxSCT_Holes; ++i) m_factorSCT_Holes.push_back(goodSCT_Holes[i]/fakeSCT_Holes[i]);
593 }
594
595 //
596 // --- number of SCT double holes
597 //
598 // --- NewTracking and BackTracking
599 const int maxDblHoles = 3; // there is a cut on this anyway !
600 const double goodDblHoles[maxDblHoles+1] = { 1. , 0.03 , 0.007 , 0.0003 };
601 const double fakeDblHoles[maxDblHoles+1] = { 1. , 0.09 , 0.09 , 0.008 };
602 // put it into the private members
603 m_maxDblHoles = maxDblHoles;
604 for (int i=0; i<=m_maxDblHoles; ++i) m_factorDblHoles.push_back(goodDblHoles[i]/fakeDblHoles[i]);
605
606 //
607 // --- number of Blayer hits
608 //
609 if (!m_useTRT_AmbigFcn) {
610 // --- NewTracking
611 const int maxB_LayerHits = 3;
612 const double goodB_LayerHits[maxB_LayerHits+1] = {0.203, 0.732, 0.081, 0.010};
613 const double fakeB_LayerHits[maxB_LayerHits+1] = {0.808, 0.174, 0.018, 0.002};
614 // put it into the private members
615 m_maxB_LayerHits = maxB_LayerHits;
616 for (int i=0; i<=m_maxB_LayerHits; ++i) m_factorB_LayerHits.push_back(goodB_LayerHits[i]/fakeB_LayerHits[i]);
617 } else {
618 // --- BackTracking
619 const int maxB_LayerHits = 3;
620 const double goodB_LayerHits[maxB_LayerHits+1] = {0.605, 0.349, 0.044, 0.010};
621 const double fakeB_LayerHits[maxB_LayerHits+1] = {0.865, 0.124, 0.011, 0.002};
622 // put it into the private members
623 m_maxB_LayerHits = maxB_LayerHits;
624 for (int i=0; i<=m_maxB_LayerHits; ++i) m_factorB_LayerHits.push_back(goodB_LayerHits[i]/fakeB_LayerHits[i]);
625 }
626
627 //
628 // --- number of Pixel hits without Blayer
629 //
630 if (!m_useTRT_AmbigFcn) {
631 // --- NewTracking
632 const int maxPixelHits = 8; // we see up to 8 with IBL (was 6)
633 const double goodPixelHits[maxPixelHits+1] = {0.095, 0.031, 0.118, 0.615, 0.137, 0.011, 0.01 , 0.011, 0.012};
634 const double fakePixelHits[maxPixelHits+1] = {0.658, 0.100, 0.091, 0.124, 0.026, 0.002, 0.001 , 0.001, 0.001};
635 m_maxPixelHits = maxPixelHits;
636 for (int i=0; i<=m_maxPixelHits; ++i) m_factorPixelHits.push_back(goodPixelHits[i]/fakePixelHits[i]);
637 } else {
638 // --- BackTracking
639 const int maxPixelHits = 8; // we see up to 8 with IBL (was 6)
640 const double goodPixelHits[maxPixelHits+1] = {0.401, 0.079, 0.140, 0.291, 0.011, 0.078, 0.01 , 0.011, 0.012};
641 const double fakePixelHits[maxPixelHits+1] = {0.673, 0.138, 0.113, 0.057, 0.002, 0.011, 0.001 , 0.001, 0.001};
642 m_maxPixelHits = maxPixelHits;
643 for (int i=0; i<=m_maxPixelHits; ++i) m_factorPixelHits.push_back(goodPixelHits[i]/fakePixelHits[i]);
644 }
645
646 //
647 // --- number of Pixel layers
648 //
649 if (!m_useTRT_AmbigFcn) {
650 // --- NewTracking
651 const int maxPixLay = 7; // 3 barrel, 3 endcap, IBL, in practice one should see maybe 5 (was 3)
652 const double goodPixLay[maxPixLay+1] = {0.095, 0.033, 0.131, 0.740, 0.840, 0.940, 1.040,1.140};
653 const double fakePixLay[maxPixLay+1] = {0.658, 0.106, 0.092, 0.144, 0.144, 0.144, 0.144,0.144};
654 // put it into the private members
655 m_maxPixLay = maxPixLay;
656 for (int i=0; i<=m_maxPixLay; ++i) m_factorPixLay.push_back(goodPixLay[i]/fakePixLay[i]);
657 } else {
658 // --- BackTracking
659 const int maxPixLay = 7; // 3 barrel, 3 endcap, IBL, in practice one should see maybe 5 (was 5)
660 const double goodPixLay[maxPixLay+1] = {0.401, 0.088, 0.152, 0.355, 0.405, 0.455, 0.505, 0.555};
661 const double fakePixLay[maxPixLay+1] = {0.673, 0.146, 0.115, 0.065, 0.065, 0.065, 0.065, 0.065};
662 // put it into the private members
663 m_maxPixLay = maxPixLay;
664 for (int i=0; i<=m_maxPixLay; ++i) m_factorPixLay.push_back(goodPixLay[i]/fakePixLay[i]);
665 }
666
667 //
668 // --- number of Pixel Ganged Fakes
669 //
670 // --- NewTracking and BackTracking
671 const int maxGangedFakes = 2; // there is an explicit cut
672 const double goodGangedFakes[maxGangedFakes+1] = {0.62 , 0.23 , 0.15 };
673 const double fakeGangedFakes[maxGangedFakes+1] = {0.12 , 0.41 , 0.47 };
674 // put it into the private members
675 m_maxGangedFakes = maxGangedFakes;
676 for (int i=0; i<=m_maxGangedFakes; ++i) m_factorGangedFakes.push_back(goodGangedFakes[i]/fakeGangedFakes[i]);
677
678 //
679 // --- total number of SCT+Pixel hits
680 //
681 // --- NewTracking and BackTracking
682 const int maxHits = 19; // there is a min cut on this anyway !
683 const double goodSiHits[maxHits+1] = { 0.001 , 0.002 , 0.003 , 0.004 , 0.01 , 0.01 , 0.01 ,
684 0.015 , 0.02 , 0.06 , 0.1 , 0.3 , 0.2 , 0.50 , 0.055,
685 0.03 , 0.015 , 0.010 , 0.002 , 0.0005 };
686 const double fakeSiHits[maxHits+1] = { 1.0 , 1.0 , 1.0 , 1.0 , 0.5 , 0.25 , 0.15 ,
687 0.20 , 0.1 , 0.2 , 0.08 , 0.07 , 0.035 , 0.08 , 0.008,
688 0.004 , 0.0015 , 0.0008 , 0.0001 , 0.00001 };
689 // put it into the private members
690 m_maxHits = maxHits;
691 for (int i=0; i<=m_maxHits; ++i) m_factorHits.push_back(goodSiHits[i]/fakeSiHits[i]);
692
693 //
694 // --- ratio of TRT hits over expected
695 //
696 // --- NewTracking and BackTracking
697 const int maxTrtRatio = 7 ;
698 const double TrtRatioBounds[maxTrtRatio+1] = { 0, 0.2, 0.4, 0.6, 0.8, 1.0, 1.2, 2.4};
699 // this needs tuning !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
700 const double goodTrtRatio[maxTrtRatio] = { 0.05, 0.11, 0.12, 0.15, 0.20, 0.16, 0.17};
701 const double fakeTrtRatio[maxTrtRatio] = { 0.6 , 0.08, 0.06, 0.05, 0.04, 0.03, 0.03};
702 // put it into the private members
703 m_maxTrtRatio = m_selectortool.isEnabled() ? maxTrtRatio : 0;
704 for (int i=0; i<m_maxTrtRatio; ++i) m_factorTrtRatio.push_back(goodTrtRatio[i]/fakeTrtRatio[i]);
705 for (int i=0; i<=m_maxTrtRatio; ++i) m_boundsTrtRatio.push_back(TrtRatioBounds[i]);
706
707 //
708 // --- ratio of TRT fitted to (fitted+outliers)
709 //
710 // --- NewTracking and BackTracking
711 const int maxTrtFittedRatio = 4;
712 const double TrtFittedRatioBounds[maxTrtFittedRatio+1] = { 0, 0.3, 0.6, 0.9, 1.0};
713 // this needs tuning !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
714 const double goodTrtFittedRatio[maxTrtFittedRatio] = { 0.1, 0.2, 0.3, 0.5};
715 const double fakeTrtFittedRatio[maxTrtFittedRatio] = { 0.6, 0.1, 0.1, 0.1};
716 // put it into the private members
717 m_maxTrtFittedRatio = maxTrtFittedRatio;
718 for (int i=0; i<m_maxTrtFittedRatio; ++i) m_factorTrtFittedRatio.push_back(goodTrtFittedRatio[i]/fakeTrtFittedRatio[i]);
719 for (int i=0; i<=m_maxTrtFittedRatio; ++i) m_boundsTrtFittedRatio.push_back(TrtFittedRatioBounds[i]);
720
721
722 //
723 // --- sigma chi2
724 //
725 if (!m_useSigmaChi2) {
726 m_maxSigmaChi2 = -1 ;
727 } else {
728 // --- NewTracking and BackTracking
729 const int maxSigmaChi2 = 13 ;
730 const double SigmaChi2Bounds[maxSigmaChi2+1] = { -5.,-4.,-3.,-2.,-1.,0.,1.,2.,3.,4.,5.,6.,7.,8.};
731 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};
732 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};
733 // put it into the private members
734 m_maxSigmaChi2 = maxSigmaChi2;
735 for (int i=0; i<m_maxSigmaChi2; ++i) m_factorSigmaChi2.push_back(goodSigmaChi2[i]/fakeSigmaChi2[i]);
736 for (int i=0; i<=m_maxSigmaChi2; ++i) m_boundsSigmaChi2.push_back(SigmaChi2Bounds[i]);
737 }
738
739 //
740 // --- debug output
741 //
742 if (msgLvl(MSG::VERBOSE)) {
743
744 for (int i=0; i<=m_maxPixHoles; ++i)
745 msg(MSG::VERBOSE) << "Modifier for " << i << " Pixel holes: " << m_factorPixHoles[i] <<endmsg;
746
747 for (int i=0; i<=m_maxSCT_Holes; ++i)
748 msg(MSG::VERBOSE) << "Modifier for " << i << " SCT holes: " << m_factorSCT_Holes[i] <<endmsg;
749
750 for (int i=0; i<=m_maxDblHoles; ++i)
751 msg(MSG::VERBOSE) << "Modifier for " << i << " double SCT holes: " << m_factorDblHoles[i] <<endmsg;
752
753 for (int i=0; i<=m_maxPixLay; ++i)
754 msg(MSG::VERBOSE) << "Modifier for " << i << " Pixel layers: " << m_factorPixLay[i] <<endmsg;
755
756 for (int i=0; i<=m_maxB_LayerHits; ++i)
757 msg(MSG::VERBOSE) << "Modifier for " << i << " b-layer hits: " << m_factorB_LayerHits[i] <<endmsg;
758
759 for (int i=0; i<=m_maxPixelHits; ++i)
760 msg(MSG::VERBOSE) << "Modifier for " << i << " Pixel hits: " << m_factorPixelHits[i] <<endmsg;
761
762 for (int i=0; i<=m_maxGangedFakes; ++i)
763 msg(MSG::VERBOSE) << "Modifier for " << i << " ganged fakes: " << m_factorGangedFakes[i] <<endmsg;
764
765 for (int i=0; i<=m_maxHits; ++i)
766 msg(MSG::VERBOSE) << "Modifier for " << i << " Si hits: " << m_factorHits[i] <<endmsg;
767
768 if (m_selectortool.isEnabled()) {
769 for (int i=0; i<m_maxTrtRatio; ++i)
770 msg(MSG::VERBOSE) << "Modifier for " << m_boundsTrtRatio[i] << " < TRT ratio < "
771 << m_boundsTrtRatio[i+1] <<" : " <<m_factorTrtRatio[i] <<endmsg;
772 }
773
774 for (int i=0; i<m_maxTrtFittedRatio; ++i)
775 msg(MSG::VERBOSE) << "Modifier for " << m_boundsTrtFittedRatio[i] << " < TRT fitted ratio < "
777
778
779 // only if used
780 for (int i=0; i<m_maxSigmaChi2; ++i)
781 msg(MSG::VERBOSE) << "Modifier for " << m_boundsSigmaChi2[i] << " < sigma(chi2) - sqrt(2chi2) < " << m_boundsSigmaChi2[i+1]
782 <<" : " <<m_factorSigmaChi2[i] <<endmsg;
783 }
784
785}

◆ simpleScore()

Trk::TrackScore InDet::InDetNNScoringTool::simpleScore ( const Trk::Track & track,
const Trk::TrackSummary & trackSum ) const
overridevirtual

create a score based on how good the passed TrackSummary is

Implements Trk::ITrackScoringTool.

Definition at line 193 of file InDetNNScoringTool.cxx.

194{
195 int numPixel = trackSummary.get(Trk::numberOfPixelHits);
196 int numSCT = trackSummary.get(Trk::numberOfSCTHits);
197 int numTRT = trackSummary.get(Trk::numberOfTRTHits);
198 int numTRTTube = trackSummary.get(Trk::numberOfTRTTubeHits);
199 int numPixelHoles = trackSummary.get(Trk::numberOfPixelHoles);
200 int numSCTHoles = trackSummary.get(Trk::numberOfSCTHoles);
201 int numSCTDoubleHoles = trackSummary.get(Trk::numberOfSCTDoubleHoles);
202 int numPixelDead = trackSummary.get(Trk::numberOfPixelDeadSensors);
203 int numSCTDead = trackSummary.get(Trk::numberOfSCTDeadSensors);
204
205 if (numPixelDead<0) numPixelDead = 0;
206 if (numSCTDead<0) numSCTDead = 0;
207
208 // is this a track from the pattern or a fitted track ?
209 bool ispatterntrack = (track.info().trackFitter()==Trk::TrackInfo::Unknown);
210 //
211 // --- reject bad tracks
212 //
213 //
214 // --- the following cuts we only apply to fitted tracks
215 //
216 if (ispatterntrack) {
217 ATH_MSG_DEBUG ("==> this is a pattern track, no hit cuts !");
218 } else {
219 ATH_MSG_DEBUG ("==> this is a refitted track, so we can use the chi2 and other stuff ! ");
220
221 // NdF cut :
222 if (track.fitQuality()) {
223 ATH_MSG_DEBUG ("numberDoF = "<<track.fitQuality()->numberDoF());
224 }
225 // Number of double Holes
226 if (numSCTDoubleHoles>=0) {
227 if (numSCTDoubleHoles > m_maxDoubleHoles ) {
228 ATH_MSG_DEBUG ("Track has "<< numSCTDoubleHoles <<" double holes, reject it!");
229 return Trk::TrackScore(0);
230 }
231 }
232 // Number of Si (Pixel+SCT) Holes
233 if (numSCTHoles>=0 && numPixelHoles>=0) {
234 if (numPixelHoles+numSCTHoles > m_maxSiHoles ) {
235 ATH_MSG_DEBUG ("Track has "<< numPixelHoles <<" Pixel and " << numSCTHoles << " SCT holes, reject it!");
236 return Trk::TrackScore(0);
237 }
238 }
239 // Number of Pixel Holes
240 if ( numPixelHoles>=0 ) {
241 if (numPixelHoles > m_maxPixelHoles ) {
242 ATH_MSG_DEBUG ("Track has "<< numPixelHoles <<" Pixel holes, reject it!");
243 return Trk::TrackScore(0);
244 }
245 }
246 // Number of SCT Holes
247 if ( numSCTHoles>=0 ) {
248 if ( numSCTHoles > m_maxSctHoles ) {
249 ATH_MSG_DEBUG ("Track has "<< numSCTHoles << " SCT holes, reject it!");
250 return Trk::TrackScore(0);
251 }
252 }
253 // TRT cut
254 if (numTRT > 0 && numTRT < m_minTRTonTrk) {
255 ATH_MSG_DEBUG ("Track has " << numTRT << " TRT hits, reject it");
256 return Trk::TrackScore(0);
257 }
258 // TRT precision hits cut
259 if (numTRT >= 15 && ((double)(numTRT-numTRTTube))/numTRT < m_minTRTprecision) {
260 ATH_MSG_DEBUG ("Track has " << ((double)numTRTTube)/numTRT << " TRT tube hit fraction, reject it");
261 return Trk::TrackScore(0);
262 }
263 // Number of Si Clusters
264 if ( numSCT>=0 && numPixel>=0) {
265 if (numPixel+numSCT+numPixelDead+numSCTDead < m_minSiClusters) {
266 ATH_MSG_DEBUG ("Track has " << numPixel+numSCT << " Si clusters and " << numPixelDead+numSCTDead << " dead sensors, reject it");
267 return Trk::TrackScore(0);
268 }
269 }
270 // Number of pixel clusters
271 if (numPixel>=0 && numPixel < m_minPixel) {
272 ATH_MSG_DEBUG ("Track has " << numPixel << " pixel hits, reject it");
273 return Trk::TrackScore(0);
274 }
275 }
276
277 // check if nn cut is enabled
278 if (m_useAmbigFcn && m_nnCutThreshold > 0.0) {
279 if (track.fitQuality()) { // check if track has been fitted
280 Amg::Vector3D beamSpotPosition(0,0,0);
281 SG::ReadCondHandle<InDet::BeamSpotData> beamSpotHandle { m_beamSpotKey };
282 if (beamSpotHandle.isValid()) beamSpotPosition = beamSpotHandle->beamVtx().position();
283 // --- create surface
284 Trk::PerigeeSurface perigeeSurface(beamSpotPosition);
285
286 const Trk::TrackParameters* input = track.trackParameters()->front();
287 const EventContext& ctx = Gaudi::Hive::currentContext();
288 std::unique_ptr<const Trk::TrackParameters> parm( m_extrapolator->extrapolateDirectly(ctx, *input, perigeeSurface) );
289 const Trk::Perigee* extrapolatedPerigee = dynamic_cast<const Trk::Perigee*> (parm.get());
290
291 if (calcNnScore(track, trackSummary, extrapolatedPerigee) < m_nnCutThreshold) {
292 ATH_MSG_DEBUG ("Rejecting track for falling below nn threshold");
293 return Trk::TrackScore(0); // scores of 0 are rejected by ambisolver
294 }
295 }
296 }
297
298 //
299 // --- now start scoring
300 //
301
303
304 //
305 // --- use scoring function
306 //
307
308 return ambigScore(track,trackSummary);
309
310 } else {
311
312 //
313 // use classical score
314 //
315 // score of 100 per track
317 // --- summary score analysis
318 for (int i=0; i<Trk::numberOfTrackSummaryTypes; ++i) {
319 int value = trackSummary.get(static_cast<Trk::SummaryType>(i));
320 //value is -1 if undefined.
321 if (value>0) {
323 ATH_MSG_DEBUG ("\tType ["<<i<<"], value \t= "<<value<<"], score \t="<<score);
324 }
325 }
326 // --- prob(chi2,NDF), protect for chi2 <= 0
327 if (track.fitQuality()!=nullptr && track.fitQuality()->chiSquared()>0 && track.fitQuality()->numberDoF()>0 ) {
328 double p = 1.0-Genfun::CumulativeChiSquare(track.fitQuality()->numberDoF())(track.fitQuality()->chiSquared());
329 if ( p > 0 )
330 score += log10( p );
331 else
332 score -= 50;
333 }
334
335 return score;
336 }
337
338}
Trk::TrackScore ambigScore(const Trk::Track &track, const Trk::TrackSummary &trackSum) const
Trk::TrackScore calcNnScore(const Trk::Track &track, const Trk::TrackSummary &trackSum, const Trk::Perigee *extrapolatedPerigee) const
float chiSquared(const U &p)
ParametersT< TrackParametersDim, Charged, PerigeeSurface > Perigee
SummaryType
enumerates the different types of information stored in Summary.
@ numberOfTRTTubeHits
number of TRT hits on track in straws with xenon
@ numberOfPixelDeadSensors
number of pixel hits with broad errors (width/sqrt(12))

◆ sysInitialize()

virtual StatusCode AthCommonDataStore< AthCommonMsg< AlgTool > >::sysInitialize ( )
overridevirtualinherited

Perform system initialization for an algorithm.

We override this to declare all the elements of handle key arrays at the end of initialization. See comments on updateVHKA.

Reimplemented in asg::AsgMetadataTool, AthCheckedComponent< AthAlgTool >, AthCheckedComponent<::AthAlgTool >, and DerivationFramework::CfAthAlgTool.

◆ sysStart()

virtual StatusCode AthCommonDataStore< AthCommonMsg< AlgTool > >::sysStart ( )
overridevirtualinherited

Handle START transition.

We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container.

◆ updateVHKA()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::updateVHKA ( Gaudi::Details::PropertyBase & )
inlineinherited

Definition at line 308 of file AthCommonDataStore.h.

308 {
309 // debug() << "updateVHKA for property " << p.name() << " " << p.toString()
310 // << " size: " << m_vhka.size() << endmsg;
311 for (auto &a : m_vhka) {
313 for (auto k : keys) {
314 k->setOwner(this);
315 }
316 }
317 }
std::vector< SG::VarHandleKeyArray * > m_vhka

Member Data Documentation

◆ m_beamSpotKey

SG::ReadCondHandleKey<InDet::BeamSpotData> InDet::InDetNNScoringTool::m_beamSpotKey { this, "BeamSpotKey", "BeamSpotData", "SG key for beam spot" }
private

Definition at line 95 of file InDetNNScoringTool.h.

95{ this, "BeamSpotKey", "BeamSpotData", "SG key for beam spot" };

◆ m_boundsSigmaChi2

std::vector<double> InDet::InDetNNScoringTool::m_boundsSigmaChi2
private

Definition at line 85 of file InDetNNScoringTool.h.

◆ m_boundsTrtFittedRatio

std::vector<double> InDet::InDetNNScoringTool::m_boundsTrtFittedRatio
private

Definition at line 86 of file InDetNNScoringTool.h.

◆ m_boundsTrtRatio

std::vector<double> InDet::InDetNNScoringTool::m_boundsTrtRatio
private

Definition at line 86 of file InDetNNScoringTool.h.

◆ m_caloClusterROIKey

SG::ReadHandleKey<ROIPhiRZContainer> InDet::InDetNNScoringTool::m_caloClusterROIKey {this, "EMROIPhiRZContainer", "", "Name of the calo cluster ROIs in Phi,R,Z parameterization"}
private

Definition at line 146 of file InDetNNScoringTool.h.

147{this, "EMROIPhiRZContainer", "", "Name of the calo cluster ROIs in Phi,R,Z parameterization"};

◆ m_detStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< AlgTool > >::m_detStore
privateinherited

Pointer to StoreGate (detector store by default)

Definition at line 393 of file AthCommonDataStore.h.

◆ m_DNN_inputValues

std::map<std::string, double> InDet::InDetNNScoringTool::m_DNN_inputValues
private

Definition at line 72 of file InDetNNScoringTool.h.

◆ m_etaWidthEm

FloatProperty InDet::InDetNNScoringTool::m_etaWidthEm {this, "etaWidthEM", 0.05}
private

Definition at line 144 of file InDetNNScoringTool.h.

144{this, "etaWidthEM", 0.05};

◆ m_evtStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< AlgTool > >::m_evtStore
privateinherited

Pointer to StoreGate (event store by default)

Definition at line 390 of file AthCommonDataStore.h.

◆ m_extrapolator

ToolHandle<Trk::IExtrapolator> InDet::InDetNNScoringTool::m_extrapolator {this, "Extrapolator", "Trk::Extrapolator"}
private

Definition at line 97 of file InDetNNScoringTool.h.

98{this, "Extrapolator", "Trk::Extrapolator"};

◆ m_factorB_LayerHits

std::vector<double> InDet::InDetNNScoringTool::m_factorB_LayerHits
private

Definition at line 84 of file InDetNNScoringTool.h.

◆ m_factorDblHoles

std::vector<double> InDet::InDetNNScoringTool::m_factorDblHoles
private

Definition at line 83 of file InDetNNScoringTool.h.

◆ m_factorGangedFakes

std::vector<double> InDet::InDetNNScoringTool::m_factorGangedFakes
private

Definition at line 84 of file InDetNNScoringTool.h.

◆ m_factorHits

std::vector<double> InDet::InDetNNScoringTool::m_factorHits
private

Definition at line 83 of file InDetNNScoringTool.h.

◆ m_factorPixelHits

std::vector<double> InDet::InDetNNScoringTool::m_factorPixelHits
private

Definition at line 84 of file InDetNNScoringTool.h.

◆ m_factorPixHoles

std::vector<double> InDet::InDetNNScoringTool::m_factorPixHoles
private

Definition at line 83 of file InDetNNScoringTool.h.

◆ m_factorPixLay

std::vector<double> InDet::InDetNNScoringTool::m_factorPixLay
private

Definition at line 84 of file InDetNNScoringTool.h.

◆ m_factorSCT_Holes

std::vector<double> InDet::InDetNNScoringTool::m_factorSCT_Holes
private

Definition at line 83 of file InDetNNScoringTool.h.

◆ m_factorSigmaChi2

std::vector<double> InDet::InDetNNScoringTool::m_factorSigmaChi2
private

Definition at line 84 of file InDetNNScoringTool.h.

◆ m_factorTrtFittedRatio

std::vector<double> InDet::InDetNNScoringTool::m_factorTrtFittedRatio
private

Definition at line 86 of file InDetNNScoringTool.h.

◆ m_factorTrtRatio

std::vector<double> InDet::InDetNNScoringTool::m_factorTrtRatio
private

Definition at line 86 of file InDetNNScoringTool.h.

◆ m_fieldCacheCondObjInputKey

SG::ReadCondHandleKey<AtlasFieldCacheCondObj> InDet::InDetNNScoringTool::m_fieldCacheCondObjInputKey {this, "AtlasFieldCacheCondObj", "fieldCondObj", "Name of the Magnetic Field conditions object key"}
private

Definition at line 101 of file InDetNNScoringTool.h.

101{this, "AtlasFieldCacheCondObj", "fieldCondObj", "Name of the Magnetic Field conditions object key"};

◆ m_graph

std::unique_ptr<lwt::LightweightGraph> InDet::InDetNNScoringTool::m_graph
private

Definition at line 71 of file InDetNNScoringTool.h.

◆ m_maxB_LayerHits

int InDet::InDetNNScoringTool::m_maxB_LayerHits = -1
private

Definition at line 81 of file InDetNNScoringTool.h.

◆ m_maxDblHoles

int InDet::InDetNNScoringTool::m_maxDblHoles = -1
private

Definition at line 79 of file InDetNNScoringTool.h.

◆ m_maxDoubleHoles

IntegerProperty InDet::InDetNNScoringTool::m_maxDoubleHoles {this, "maxDoubleHoles", 2, "maximum number of SCT double holes"}
private

Definition at line 125 of file InDetNNScoringTool.h.

126{this, "maxDoubleHoles", 2, "maximum number of SCT double holes"};

◆ m_maxEta

DoubleProperty InDet::InDetNNScoringTool::m_maxEta {this, "maxEta", 2.7, "maximal Eta cut"}
private

Definition at line 117 of file InDetNNScoringTool.h.

117{this, "maxEta", 2.7, "maximal Eta cut"};

◆ m_maxGangedFakes

int InDet::InDetNNScoringTool::m_maxGangedFakes = -1
private

Definition at line 82 of file InDetNNScoringTool.h.

◆ m_maxHits

int InDet::InDetNNScoringTool::m_maxHits = -1
private

Definition at line 80 of file InDetNNScoringTool.h.

◆ m_maxPixelHits

int InDet::InDetNNScoringTool::m_maxPixelHits = -1
private

Definition at line 81 of file InDetNNScoringTool.h.

◆ m_maxPixelHoles

IntegerProperty InDet::InDetNNScoringTool::m_maxPixelHoles {this, "maxPixelHoles", 5, "max number of Pixel holes"}
private

Definition at line 129 of file InDetNNScoringTool.h.

130{this, "maxPixelHoles", 5, "max number of Pixel holes"};

◆ m_maxPixHoles

int InDet::InDetNNScoringTool::m_maxPixHoles = -1
private

Definition at line 79 of file InDetNNScoringTool.h.

◆ m_maxPixLay

int InDet::InDetNNScoringTool::m_maxPixLay = -1
private

Definition at line 82 of file InDetNNScoringTool.h.

◆ m_maxRPhiImp

DoubleProperty InDet::InDetNNScoringTool::m_maxRPhiImp {this, "maxRPhiImp", 10., "maximal RPhi impact parameter cut"}
private

Definition at line 118 of file InDetNNScoringTool.h.

119{this, "maxRPhiImp", 10., "maximal RPhi impact parameter cut"};

◆ m_maxRPhiImpEM

DoubleProperty InDet::InDetNNScoringTool::m_maxRPhiImpEM {this, "maxRPhiImpEM", 50., "maximal RPhi impact parameter cut track that match EM clusters"}
private

Definition at line 140 of file InDetNNScoringTool.h.

141{this, "maxRPhiImpEM", 50., "maximal RPhi impact parameter cut track that match EM clusters"};

◆ m_maxSCT_Holes

int InDet::InDetNNScoringTool::m_maxSCT_Holes = -1
private

Definition at line 79 of file InDetNNScoringTool.h.

◆ m_maxSctHoles

IntegerProperty InDet::InDetNNScoringTool::m_maxSctHoles {this, "maxSCTHoles", 5, "max number of SCT holes"}
private

Definition at line 131 of file InDetNNScoringTool.h.

132{this, "maxSCTHoles", 5, "max number of SCT holes"};

◆ m_maxSigmaChi2

int InDet::InDetNNScoringTool::m_maxSigmaChi2 = -1
private

Definition at line 80 of file InDetNNScoringTool.h.

◆ m_maxSiHoles

IntegerProperty InDet::InDetNNScoringTool::m_maxSiHoles {this, "maxSiHoles", 5, "max number of Silicon (Pixel+SCT) holes"}
private

Definition at line 127 of file InDetNNScoringTool.h.

128{this, "maxSiHoles", 5, "max number of Silicon (Pixel+SCT) holes"};

◆ m_maxTrtFittedRatio

int InDet::InDetNNScoringTool::m_maxTrtFittedRatio = -1
private

Definition at line 81 of file InDetNNScoringTool.h.

◆ m_maxTrtRatio

int InDet::InDetNNScoringTool::m_maxTrtRatio = -1
private

Definition at line 80 of file InDetNNScoringTool.h.

◆ m_maxZImp

DoubleProperty InDet::InDetNNScoringTool::m_maxZImp {this, "maxZImp", 250., "maximal z impact parameter cut"}
private

Definition at line 120 of file InDetNNScoringTool.h.

121{this, "maxZImp", 250., "maximal z impact parameter cut"};

◆ m_minPixel

IntegerProperty InDet::InDetNNScoringTool::m_minPixel {this, "minPixel", 0, "minimum number of pixel clusters"}
private

Definition at line 137 of file InDetNNScoringTool.h.

138{this, "minPixel", 0, "minimum number of pixel clusters"};

◆ m_minPt

DoubleProperty InDet::InDetNNScoringTool::m_minPt {this, "minPt", 500., "minimal Pt cut"}
private

cuts for selecting good tracks

Definition at line 116 of file InDetNNScoringTool.h.

116{this, "minPt", 500., "minimal Pt cut"};

◆ m_minSiClusters

IntegerProperty InDet::InDetNNScoringTool::m_minSiClusters {this, "minSiClusters", 7, "minimal number of Si clusters"}
private

Definition at line 123 of file InDetNNScoringTool.h.

124{this, "minSiClusters", 7, "minimal number of Si clusters"};

◆ m_minTRTonTrk

IntegerProperty InDet::InDetNNScoringTool::m_minTRTonTrk {this, "minTRTonTrk", 9, "minimum number of TRT hits"}
private

Definition at line 133 of file InDetNNScoringTool.h.

134{this, "minTRTonTrk", 9, "minimum number of TRT hits"};

◆ m_minTRTprecision

DoubleProperty InDet::InDetNNScoringTool::m_minTRTprecision {this, "minTRTPrecisionFraction", 0.5, "minimum fraction of TRT precision hits"}
private

Definition at line 135 of file InDetNNScoringTool.h.

136{this, "minTRTPrecisionFraction", 0.5, "minimum fraction of TRT precision hits"};

◆ m_nnCutConfig

StringProperty InDet::InDetNNScoringTool::m_nnCutConfig {this, "nnCutConfig", ""}
private

Definition at line 109 of file InDetNNScoringTool.h.

109{this, "nnCutConfig", ""};

◆ m_nnCutThreshold

DoubleProperty InDet::InDetNNScoringTool::m_nnCutThreshold {this, "nnCutThreshold", -0.1}
private

Definition at line 110 of file InDetNNScoringTool.h.

110{this, "nnCutThreshold", -0.1};

◆ m_phiWidthEm

FloatProperty InDet::InDetNNScoringTool::m_phiWidthEm {this, "phiWidthEM", 0.075}
private

Definition at line 143 of file InDetNNScoringTool.h.

143{this, "phiWidthEM", 0.075};

◆ m_selectortool

ToolHandle<ITrtDriftCircleCutTool> InDet::InDetNNScoringTool::m_selectortool {this, "DriftCircleCutTool", "InDet::InDetTrtDriftCircleCutTool"}
private

Returns minimum number of expected TRT drift circles depending on eta.

Definition at line 89 of file InDetNNScoringTool.h.

90{this, "DriftCircleCutTool", "InDet::InDetTrtDriftCircleCutTool"};

◆ m_summaryTypeScore

std::vector<Trk::TrackScore> InDet::InDetNNScoringTool::m_summaryTypeScore
private

holds the scores assigned to each Trk::SummaryType from the track's Trk::TrackSummary

Definition at line 93 of file InDetNNScoringTool.h.

◆ m_useAmbigFcn

BooleanProperty InDet::InDetNNScoringTool::m_useAmbigFcn {this, "useAmbigFcn", true}
private

use the scoring tuned to Ambiguity processing or not

Definition at line 105 of file InDetNNScoringTool.h.

105{this, "useAmbigFcn", true};

◆ m_useEmClusSeed

BooleanProperty InDet::InDetNNScoringTool::m_useEmClusSeed {this, "doEmCaloSeed", true}
private

Definition at line 142 of file InDetNNScoringTool.h.

142{this, "doEmCaloSeed", true};

◆ m_usePixel

BooleanProperty InDet::InDetNNScoringTool::m_usePixel {this, "usePixel", true}
private

Definition at line 112 of file InDetNNScoringTool.h.

112{this, "usePixel", true};

◆ m_useSCT

BooleanProperty InDet::InDetNNScoringTool::m_useSCT {this, "useSCT", true}
private

Definition at line 113 of file InDetNNScoringTool.h.

113{this, "useSCT", true};

◆ m_useSigmaChi2

BooleanProperty InDet::InDetNNScoringTool::m_useSigmaChi2 {this, "useSigmaChi2", false}
private

Definition at line 107 of file InDetNNScoringTool.h.

107{this, "useSigmaChi2", false};

◆ m_useTRT_AmbigFcn

BooleanProperty InDet::InDetNNScoringTool::m_useTRT_AmbigFcn {this, "useTRT_AmbigFcn", false}
private

Definition at line 106 of file InDetNNScoringTool.h.

106{this, "useTRT_AmbigFcn", false};

◆ m_varHandleArraysDeclared

bool AthCommonDataStore< AthCommonMsg< AlgTool > >::m_varHandleArraysDeclared
privateinherited

Definition at line 399 of file AthCommonDataStore.h.

◆ m_vhka

std::vector<SG::VarHandleKeyArray*> AthCommonDataStore< AthCommonMsg< AlgTool > >::m_vhka
privateinherited

Definition at line 398 of file AthCommonDataStore.h.


The documentation for this class was generated from the following files: