ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
InnerDetector
InDetRecTools
InDetTrackSelectorTool
src
InDetTrackSelectorTool.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
#include "
InDetTrackSelectorTool/InDetTrackSelectorTool.h
"
6
// forward declares
7
#include "
TrkToolInterfaces/ITrackSummaryTool.h
"
8
#include "
TrkExInterfaces/IExtrapolator.h
"
9
#include "
VxVertex/Vertex.h
"
10
#include "
TrkParticleBase/TrackParticleBase.h
"
11
#include "
TrkTrack/Track.h
"
12
// normal includes
13
#include "
TrkTrackSummary/TrackSummary.h
"
14
#include "CLHEP/Matrix/Vector.h"
15
16
namespace
InDet
17
{
18
19
//_______________________________________________________________________________
20
InDetTrackSelectorTool::InDetTrackSelectorTool
(
const
std::string & t,
const
std::string & n,
const
IInterface * p)
21
:
AthAlgTool
(t,n,p)
22
{
23
declareInterface<ITrackSelectorTool>(
this
);
24
}
25
26
//_______________________________________________________________________________
27
InDetTrackSelectorTool::~InDetTrackSelectorTool
()
28
=
default
;
29
30
//_______________________________________________________________________________
31
StatusCode
InDetTrackSelectorTool::initialize
()
32
{
33
m_trackSumToolAvailable
=
false
;
34
if
(!
m_trackSumTool
.empty())
35
{
36
if
(
m_trackSumTool
.retrieve().isFailure()) {
37
msg
(MSG::ERROR)<<
" Unable to retrieve "
<<
m_trackSumTool
<<
endmsg
;
38
return
StatusCode::FAILURE;
39
}
40
else
{
41
m_trackSumToolAvailable
=
true
;
42
}
43
}
44
45
if
(
m_extrapolator
.retrieve().isFailure() ) {
46
msg
(MSG::ERROR) <<
"Failed to retrieve tool "
<<
m_extrapolator
<<
endmsg
;
47
return
StatusCode::FAILURE;
48
}
49
50
return
StatusCode::SUCCESS;
51
}
52
53
54
//_______________________________________________________________________________
55
bool
InDetTrackSelectorTool::decision
(
const
Trk::Track
& track,
const
Trk::Vertex
* vertex)
const
56
{
57
// decision based on the track parameters
58
if
(!
decision
(track.perigeeParameters(), vertex, track.info().particleHypothesis()))
59
return
false
;
60
61
// number of hits, silicon hits, b-layer
62
// first ask track for summary
63
std::unique_ptr<Trk::TrackSummary> summaryUniquePtr;
64
const
Trk::TrackSummary
* summary = track.trackSummary();
65
if
(summary ==
nullptr
&&
m_trackSumToolAvailable
) {
66
summaryUniquePtr =
m_trackSumTool
->summary(Gaudi::Hive::currentContext(), track);
67
summary = summaryUniquePtr.get();
68
}
69
70
if
(
nullptr
==summary) {
71
ATH_MSG_DEBUG
(
"Track preselection: cannot create a track summary. This track will not pass."
);
72
return
false
;
73
}
74
75
int
nPixelHits = summary->get(
Trk::numberOfPixelHits
);
76
int
nPixelDead = summary->get(
Trk::numberOfPixelDeadSensors
);
77
if
(nPixelDead<0)
78
nPixelDead=0;
79
80
int
nInLayerHits = summary->get(
Trk::numberOfInnermostPixelLayerHits
);
81
82
if
(nPixelHits+nPixelDead<
m_numberOfPixelHits
|| nInLayerHits<
m_numberOfInLayerHits
)
83
return
false
;
84
85
// all ok
86
return
true
;
87
}
88
89
//_______________________________________________________________________________
90
bool
InDetTrackSelectorTool::decision
(
const
Trk::TrackParticleBase
& track,
const
Trk::Vertex
* vertex)
const
91
{
92
if
(!
decision
(&(track.definingParameters()), vertex,
Trk::pion
))
93
return
false
;
94
95
const
Trk::TrackSummary
* summary = track.trackSummary();
96
if
(summary ==
nullptr
) {
97
ATH_MSG_INFO
(
"TrackParticleBase does not have a Track Summary. Rejected."
);
98
return
false
;
99
}
100
int
nPixelHits = summary->get(
Trk::numberOfPixelHits
);
101
int
nPixelDead = summary->get(
Trk::numberOfPixelDeadSensors
);
102
if
(nPixelDead<0)
103
nPixelDead=0;
104
105
int
nInLayerHits = summary->get(
Trk::numberOfInnermostPixelLayerHits
);
106
107
return
nPixelHits+nPixelDead>=
m_numberOfPixelHits
&& nInLayerHits>=
m_numberOfInLayerHits
;
108
}
109
110
//_______________________________________________________________________________
111
bool
InDetTrackSelectorTool::decision
(
const
Trk::TrackParameters
* track,
const
Trk::Vertex
* vertex,
const
Trk::ParticleHypothesis
hyp)
const
112
{
113
// checking pointer first
114
if
(
nullptr
==track || !track->covariance()) {
115
ATH_MSG_WARNING
(
"Track preselection: Zero pointer to parameterbase* received (most likely a track without perigee). This track will not pass."
);
116
return
false
;
117
}
118
119
// getting the perigee parameters of the track
120
const
Trk::Perigee
* perigee(
nullptr
);
121
if
(vertex ==
nullptr
)
122
perigee =
dynamic_cast<
const
Trk::Perigee
*
>
(track);
123
else
{
124
Trk::PerigeeSurface
perigeeSurface(vertex->position());
125
std::unique_ptr<const Trk::TrackParameters> tmp =
126
m_extrapolator
->extrapolate(Gaudi::Hive::currentContext(),
127
*track,
128
perigeeSurface,
129
Trk::anyDirection
,
130
true
,
131
hyp);
132
//release only of right type
133
if
(tmp && tmp->associatedSurface().type() ==
Trk::SurfaceType::Perigee
) {
134
perigee =
static_cast<
const
Trk::Perigee
*
>
(tmp.release());
135
}
136
}
137
138
if
(
nullptr
== perigee || !perigee->covariance() ) {
139
ATH_MSG_INFO
(
"Track preselection: cannot make a measured perigee. This track will not pass."
);
140
delete
perigee;
141
return
false
;
142
}
143
144
AmgVector
(5) trackParameters = perigee->parameters();
145
146
// d0 and z0 cuts
147
double
d0 = trackParameters[
Trk::d0
];
148
if
(std::abs(d0) >
m_maxD0
) {
if
(vertex !=
nullptr
) {
delete
perigee; }
return
false
; }
149
150
double
z0 = trackParameters[
Trk::z0
];
151
if
(std::abs(z0)*sin(trackParameters[
Trk::theta
]) >
m_IPz0Max
)
152
{
if
(vertex !=
nullptr
) {
delete
perigee; }
return
false
; }
153
if
(std::abs(z0) >
m_maxZ0
)
154
{
if
(vertex !=
nullptr
) {
delete
perigee; }
return
false
; }
155
156
// transverse momentum
157
double
pt = perigee->
momentum
().perp();
158
if
(pt<
m_minPt
) {
if
(vertex !=
nullptr
) {
delete
perigee; }
return
false
; }
159
160
// d0 significance
161
double
d0Significance=std::abs(trackParameters[
Trk::d0
]/sqrt( (*perigee->covariance())(
Trk::d0
,
Trk::d0
) ));
162
if
(d0Significance>
m_maxD0overSigmaD0
)
163
{
if
(vertex !=
nullptr
) {
delete
perigee; }
return
false
; }
164
165
if
(vertex !=
nullptr
) {
delete
perigee; }
166
return
true
;
167
}
//end of selection method
168
169
}
//end of namespace definitions
endmsg
#define endmsg
Definition
AnalysisConfig_Ntuple.cxx:61
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition
AthMsgStreamMacros.h:31
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition
AthMsgStreamMacros.h:32
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition
AthMsgStreamMacros.h:29
AmgVector
#define AmgVector(rows)
Definition
EventPrimitives.h:55
IExtrapolator.h
InDetTrackSelectorTool.h
TrackParticleBase.h
TrackSummary.h
Track.h
Vertex.h
ITrackSummaryTool.h
AthAlgTool::AthAlgTool
AthAlgTool(const std::string &type, const std::string &name, const IInterface *parent)
Constructor with parameters:
Definition
AthAlgTool.cxx:16
AthCommonMsg< AlgTool >::msg
MsgStream & msg() const
Definition
AthCommonMsg.h:24
InDet::InDetTrackSelectorTool::m_minPt
DoubleProperty m_minPt
Definition
InDetTrackSelectorTool.h:69
InDet::InDetTrackSelectorTool::decision
virtual bool decision(const Trk::Track &track, const Trk::Vertex *vertex) const override
Definition
InDetTrackSelectorTool.cxx:55
InDet::InDetTrackSelectorTool::m_trackSumToolAvailable
bool m_trackSumToolAvailable
Definition
InDetTrackSelectorTool.h:81
InDet::InDetTrackSelectorTool::m_numberOfPixelHits
IntegerProperty m_numberOfPixelHits
Definition
InDetTrackSelectorTool.h:76
InDet::InDetTrackSelectorTool::m_trackSumTool
ToolHandle< Trk::ITrackSummaryTool > m_trackSumTool
Definition
InDetTrackSelectorTool.h:80
InDet::InDetTrackSelectorTool::m_IPz0Max
DoubleProperty m_IPz0Max
Definition
InDetTrackSelectorTool.h:71
InDet::InDetTrackSelectorTool::InDetTrackSelectorTool
InDetTrackSelectorTool(const std::string &t, const std::string &n, const IInterface *p)
Definition
InDetTrackSelectorTool.cxx:20
InDet::InDetTrackSelectorTool::m_extrapolator
ToolHandle< Trk::IExtrapolator > m_extrapolator
Definition
InDetTrackSelectorTool.h:84
InDet::InDetTrackSelectorTool::m_maxD0overSigmaD0
DoubleProperty m_maxD0overSigmaD0
Definition
InDetTrackSelectorTool.h:75
InDet::InDetTrackSelectorTool::m_maxZ0
DoubleProperty m_maxZ0
Definition
InDetTrackSelectorTool.h:72
InDet::InDetTrackSelectorTool::m_maxD0
DoubleProperty m_maxD0
Definition
InDetTrackSelectorTool.h:73
InDet::InDetTrackSelectorTool::~InDetTrackSelectorTool
~InDetTrackSelectorTool()
InDet::InDetTrackSelectorTool::initialize
virtual StatusCode initialize() override
Definition
InDetTrackSelectorTool.cxx:31
InDet::InDetTrackSelectorTool::m_numberOfInLayerHits
IntegerProperty m_numberOfInLayerHits
Definition
InDetTrackSelectorTool.h:78
Trk::ParametersBase::momentum
const Amg::Vector3D & momentum() const
Access method for the momentum.
Trk::PerigeeSurface
Class describing the Line to which the Perigee refers to.
Definition
PerigeeSurface.h:43
Trk::TrackParticleBase
Definition
TrackParticleBase.h:41
Trk::TrackSummary
A summary of the information contained by a track.
Definition
Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:287
Trk::Track
The ATLAS Track class.
Definition
Tracking/TrkEvent/TrkTrack/TrkTrack/Track.h:73
Trk::Vertex
This class is a simplest representation of a vertex candidate.
Definition
Tracking/TrkEvent/VxVertex/VxVertex/Vertex.h:26
InDet
Primary Vertex Finder.
Definition
VP1ErrorUtils.h:36
Trk::anyDirection
@ anyDirection
Definition
PropDirection.h:22
Trk::SurfaceType::Perigee
@ Perigee
Definition
SurfaceTypes.h:21
Trk::Perigee
ParametersT< TrackParametersDim, Charged, PerigeeSurface > Perigee
Definition
Tracking/TrkEvent/TrkParameters/TrkParameters/TrackParameters.h:33
Trk::theta
@ theta
Definition
ParamDefs.h:66
Trk::d0
@ d0
Definition
ParamDefs.h:63
Trk::z0
@ z0
Definition
ParamDefs.h:64
Trk::ParticleHypothesis
ParticleHypothesis
Enumeration for Particle hypothesis respecting the interaction with material.
Definition
ParticleHypothesis.h:28
Trk::pion
@ pion
Definition
ParticleHypothesis.h:32
Trk::TrackParameters
ParametersBase< TrackParametersDim, Charged > TrackParameters
Definition
Tracking/TrkEvent/TrkParameters/TrkParameters/TrackParameters.h:27
Trk::numberOfPixelHits
@ numberOfPixelHits
number of pixel layers on track with absence of hits
Definition
Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:57
Trk::numberOfInnermostPixelLayerHits
@ numberOfInnermostPixelLayerHits
these are the hits in the 1st pixel layer
Definition
Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:53
Trk::numberOfPixelDeadSensors
@ numberOfPixelDeadSensors
number of pixel hits with broad errors (width/sqrt(12))
Definition
Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:65
Generated on
for ATLAS Offline Software by
1.17.0