ATLAS Offline Software
InDetCosmicScoringTool.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 #include "TrkTrack/Track.h"
11 #include "CLHEP/GenericFunctions/CumulativeChiSquare.hh"
12 #include <vector>
13 
14 //---------------------------------------------------------------------------------------------------------------------
15 
17  const std::string& n,
18  const IInterface* p ) :
19  AthAlgTool(t,n,p)
20 {
21  declareInterface<Trk::ITrackScoringTool>(this);
22  declareProperty("nWeightedClustersMin", m_nWeightedClustersMin = 0);
23  declareProperty("minTRTHits", m_minTRTHits = 0);
24 }
25 
27 {
28  if (!track.trackSummary()) {
29  ATH_MSG_FATAL("Track without a summary");
30  }
31  ATH_MSG_VERBOSE( "Track has TrackSummary "<< *track.trackSummary() );
33  ATH_MSG_DEBUG( "Track has Score: "<<score );
34  return score;
35 }
36 
37 //---------------------------------------------------------------------------------------------------------------------
38 
40 {
41 
42  if (msgLvl(MSG::VERBOSE)) msg(MSG::VERBOSE) << "Summary for track: " << trackSummary << endmsg;
43 
44  if (!track.fitQuality()){
45  msg(MSG::WARNING) << "No fit quality! Track info=" << track.info().dumpInfo() << endmsg;
46  return Trk::TrackScore(track.measurementsOnTrack()->size());
47  }
48  else {
49  int pixelhits = trackSummary.get(Trk::numberOfPixelHits);
50  int scthits = trackSummary.get(Trk::numberOfSCTHits);
51  int trthits = trackSummary.get(Trk::numberOfTRTHits);
52 
53  int nWeightedClusters = 2 * pixelhits + scthits;
54 
55  if (msgLvl(MSG::VERBOSE)) msg(MSG::VERBOSE) << "pixelhits: " << pixelhits << "; scthits: " << scthits
56  << "; trthits: " << trthits << "; nWeightedClusters: " << nWeightedClusters << endmsg;
57 
58  if ((nWeightedClusters >= m_nWeightedClustersMin) and (trthits >= m_minTRTHits)){
59  // calculate track score only if min number of hits
60  int tubehits=0;
61  for (const auto *i : *track.measurementsOnTrack()){
62  if (dynamic_cast<const InDet::TRT_DriftCircleOnTrack*>(i)){
63  double error=sqrt(i->localCovariance()(0,0));
64  if (error>1) tubehits++;
65 
66 
67  }
68  }
69  int hitscore = 0;
70  if (m_nWeightedClustersMin > 0) hitscore = 10 * nWeightedClusters + trthits;
71  else hitscore = 10 * (pixelhits + scthits) + trthits;
72 
73  double fitscore = 0;
74  if (track.fitQuality()->numberDoF() > 0) fitscore = 0.0001*track.fitQuality()->chiSquared()
75  / track.fitQuality()->numberDoF();
76 
77  if (msgLvl(MSG::VERBOSE)) msg(MSG::VERBOSE) << "track score: " << hitscore - 0.25*tubehits - fitscore << endmsg;
78  return Trk::TrackScore (hitscore - 0.25*tubehits - fitscore);
79 
80  }
81  else return Trk::TrackScore( 0 );
82  }
83 }
84 
85 //---------------------------------------------------------------------------------------------------------------------
86 
Trk::numberOfPixelHits
@ numberOfPixelHits
number of pixel layers on track with absence of hits
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:57
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
python.PerfMonSerializer.p
def p
Definition: PerfMonSerializer.py:743
TrackParameters.h
Trk::Track
The ATLAS Track class.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/Track.h:73
AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
InDet::InDetCosmicScoringTool::score
virtual Trk::TrackScore score(const Trk::Track &track) const override
create a score based on how good the passed track is
Definition: InDetCosmicScoringTool.cxx:26
InDet::InDetCosmicScoringTool::m_nWeightedClustersMin
int m_nWeightedClustersMin
Definition: InDetCosmicScoringTool.h:44
AthCommonMsg< AlgTool >::msgLvl
bool msgLvl(const MSG::Level lvl) const
Definition: AthCommonMsg.h:30
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
InDet::TRT_DriftCircleOnTrack
Definition: TRT_DriftCircleOnTrack.h:53
Track.h
lumiFormat.i
int i
Definition: lumiFormat.py:92
beamspotman.n
n
Definition: beamspotman.py:731
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
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::TrackScore
float TrackScore
Definition: TrackScore.h:10
TrackSummary.h
TRT_DriftCircleOnTrack.h
Trk::numberOfTRTHits
@ numberOfTRTHits
number of TRT outliers
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:79
Trk::TrackSummary
A summary of the information contained by a track.
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:287
InDet::InDetCosmicScoringTool::InDetCosmicScoringTool
InDetCosmicScoringTool(const std::string &, const std::string &, const IInterface *)
Definition: InDetCosmicScoringTool.cxx:16
AthCommonMsg< AlgTool >::msg
MsgStream & msg() const
Definition: AthCommonMsg.h:24
InDet::InDetCosmicScoringTool::m_minTRTHits
int m_minTRTHits
Definition: InDetCosmicScoringTool.h:45
InDet::InDetCosmicScoringTool::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: InDetCosmicScoringTool.cxx:39
xAOD::track
@ track
Definition: TrackingPrimitives.h:512
python.Constants.VERBOSE
int VERBOSE
Definition: Control/AthenaCommon/python/Constants.py:14
Trk::TrackSummary::get
int get(const SummaryType &type) const
returns the summary information for the passed SummaryType.
AthAlgTool
Definition: AthAlgTool.h:26
FitQuality.h
error
Definition: IImpactPoint3dEstimator.h:70
InDetCosmicScoringTool.h