ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Trigger
TrigTools
TrigVertexFitter
src
TrigPrimaryVertexTrack.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 "
TrigInDetEvent/TrigL2Vertex.h
"
6
#include "
TrigPrimaryVertexTrack.h
"
7
#include "
TrkParameters/TrackParameters.h
"
8
#include "
TrkTrack/Track.h
"
9
10
11
TrigPrimaryVertexTrack::TrigPrimaryVertexTrack
(
const
Trk::Track
* pT)
12
{
13
m_nTrackType
=2;
m_active
=
true
;
14
m_pTrkTrack
=pT;
m_dChi2
=-100.0;
15
16
const
Trk::Perigee
* pP= pT->perigeeParameters();
17
18
if
(pP!=NULL) {
19
m_u
[0]=pP->parameters()[
Trk::d0
];
20
m_u
[1]=pP->parameters()[
Trk::z0
];
21
m_q
[0]=pP->parameters()[
Trk::phi0
];
22
m_q
[1]=pP->parameters()[
Trk::theta
];
23
24
const
double
ptC=1000.0*pP->parameters()[
Trk::qOverP
];
25
const
double
inv_ptC = 1. / ptC;
26
27
m_q
[2]=sin(pP->parameters()[
Trk::theta
])*inv_ptC;
28
29
const
AmgSymMatrix
(5)& TC= (*pP->covariance());
30
31
const
double
a
=cos(pP->parameters()[
Trk::theta
])*inv_ptC;
32
const
double
b=-sin(pP->parameters()[
Trk::theta
])/(pP->parameters()[
Trk::qOverP
]*ptC);
33
34
35
const
double
Ck[5][5] = {{TC(0,0), TC(1,0), TC(2,0), TC(3,0),
a
*TC(3,0) + b*TC(4,0)},
36
{TC(1,0), TC(1,1), TC(2,1), TC(3,1),
a
*TC(3,1) + b*TC(4,1)},
37
{TC(2,0), TC(2,1), TC(2,2), TC(3,2),
a
*TC(3,2) + b*TC(4,2)},
38
{TC(3,0), TC(3,1), TC(3,2), TC(3,3),
a
*TC(3,3) + b*TC(4,3)},
39
{
a
*TC(3,0) + b*TC(4,0),
a
*TC(3,1) + b*TC(4,1),
a
*TC(3,2) + b*TC(4,2),
a
*TC(3,3) + b*TC(4,3),
a
*
a
*TC(3,3) + 2*
a
*b*TC(4,3) + b*b*TC(4,4)}};
40
41
for
(
int
i=0;i<2;i++)
for
(
int
j=0;j<2;j++)
m_Vuu
[i][j]=Ck[i][j];
42
for
(
int
i=0;i<3;i++)
for
(
int
j=0;j<3;j++)
m_Vqq
[i][j]=Ck[i+2][j+2];
43
for
(
int
i=0;i<2;i++)
for
(
int
j=0;j<3;j++)
m_Vuq
[i][j]=Ck[i][j+2];
44
45
m_Perigee
[0]=
m_u
[0];
m_Perigee
[1]=
m_u
[1];
m_Perigee
[2]=
m_q
[0];
m_Perigee
[3]=
m_q
[1];
m_Perigee
[4]=
m_q
[2];
46
}
47
}
48
49
TrigPrimaryVertexTrack::~TrigPrimaryVertexTrack
()
50
{
51
52
}
53
54
void
TrigPrimaryVertexTrack::mask
()
55
{
56
m_active
=
false
;
57
}
58
59
void
TrigPrimaryVertexTrack::activate
()
60
{
61
m_active
=
true
;
62
}
63
64
bool
TrigPrimaryVertexTrack::isActive
()
65
{
66
return
m_active
;
67
}
68
69
int
TrigPrimaryVertexTrack::getTrackType
()
70
{
71
return
m_nTrackType
;
72
}
73
74
75
const
Trk::Track
*
TrigPrimaryVertexTrack::getTrkTrack
()
76
{
77
return
m_pTrkTrack
;
78
}
79
80
void
TrigPrimaryVertexTrack::setIndex
(
int
i)
81
{
82
m_index
=i;
83
}
84
85
int
TrigPrimaryVertexTrack::getIndex
()
const
86
{
87
return
m_index
;
88
}
89
90
const
double
*
TrigPrimaryVertexTrack::Perigee
()
const
91
{
92
return
&
m_Perigee
[0];
93
}
94
95
double
TrigPrimaryVertexTrack::PerigeeCovariance
(
int
i,
int
j)
const
96
{
97
return
m_PerigeeCovariance
[i][j];
98
}
99
100
double
TrigPrimaryVertexTrack::getChi2Distance
(
class
TrigL2Vertex
* pV)
101
{
102
const
double
C
=0.02997;
103
const
double
B=20.84;
104
105
double
Sk[2][2],detr,
chi2
;
106
double
AC[2][3],BV[2][3],
h
[2];
107
int
i,j,k;
108
double
psi,sinPsi,xv,yv,zv,
109
cosPhi0,sinPhi0,ctt,sint,phi0,theta0,P0;
110
const
double
alpha =
C
*B*1e-3;
111
const
double
inv_alpha = 1. / alpha;
112
113
xv=pV->
getParametersVector
()[0];
114
yv=pV->
getParametersVector
()[1];
115
zv=pV->
getParametersVector
()[2];
116
117
phi0=
m_q
[0];
118
theta0=
m_q
[1];
119
P0=
m_q
[2];
120
121
cosPhi0=cos(phi0);sinPhi0=sin(phi0);
122
sinPsi=-alpha*(xv*cosPhi0+yv*sinPhi0)/P0;
123
if
(fabs(sinPsi)>1.0)
return
-999.9;
124
const
double
cosPsi=sqrt(1.0-sinPsi*sinPsi);
125
const
double
inv_cosPsi = 1. / cosPsi;
126
psi=asin(sinPsi);
127
sint=sin(theta0);
128
ctt=cos(theta0)/sint;
129
130
m_A
[0][0]=-sin(phi0+psi)*inv_cosPsi;
131
m_A
[0][1]= cos(phi0+psi)*inv_cosPsi;
132
m_A
[0][2]=0.0;
133
134
m_A
[1][0]=-ctt*cosPhi0*inv_cosPsi;
135
m_A
[1][1]=-ctt*sinPhi0*inv_cosPsi;
136
m_A
[1][2]=1.0;
137
138
m_B
[0][0]=-xv*
m_A
[0][1]+yv*
m_A
[0][0];
139
m_B
[0][1]=0.0;
140
m_B
[0][2]=(1.0-inv_cosPsi)*inv_alpha;
141
142
m_B
[1][0]=-xv*
m_A
[1][1]+yv*
m_A
[1][0];
143
m_B
[1][1]=-P0*psi/(alpha*sint*sint);
144
m_B
[1][2]=ctt*(psi-sinPsi*inv_cosPsi)*inv_alpha;
145
146
h
[0]=yv*cosPhi0-xv*sinPhi0+P0*(1-cosPsi)*inv_alpha;
147
h
[1]=zv+P0*ctt*psi*inv_alpha;
148
149
m_resid
[0]=
m_u
[0]-
h
[0];
150
m_resid
[1]=
m_u
[1]-
h
[1];
151
152
for
(i=0;i<2;i++)
for
(j=0;j<2;j++) Sk[i][j]=
m_Vuu
[i][j];
153
for
(i=0;i<2;i++)
for
(j=0;j<3;j++)
154
{
155
AC[i][j]=0.0;
156
for
(k=0;k<3;k++) AC[i][j]+=
m_A
[i][k]*pV->
m_Gk
[k][j];
157
}
158
for
(i=0;i<2;i++)
for
(j=0;j<2;j++)
159
{
160
for
(k=0;k<3;k++) Sk[i][j]+=AC[i][k]*
m_A
[j][k];
161
}
162
for
(i=0;i<2;i++)
163
for
(j=0;j<3;j++)
164
{
165
BV[i][j]=0.0;
166
for
(k=0;k<3;k++) BV[i][j]+=
m_B
[i][k]*
m_Vqq
[k][j];
167
}
168
for
(i=0;i<2;i++)
169
for
(j=0;j<2;j++)
170
{
171
for
(k=0;k<3;k++) Sk[i][j]+=BV[i][k]*
m_B
[j][k];
172
}
173
Sk[0][0]-=2.0*(
m_Vuq
[0][0]*
m_B
[0][0]+
m_Vuq
[0][1]*
m_B
[0][1]+
m_Vuq
[0][2]*
m_B
[0][2]);
174
Sk[1][1]-=2.0*(
m_Vuq
[1][0]*
m_B
[1][0]+
m_Vuq
[1][1]*
m_B
[1][1]+
m_Vuq
[1][2]*
m_B
[1][2]);
175
Sk[0][1]-=
m_Vuq
[1][0]*
m_B
[0][0]+
m_Vuq
[1][1]*
m_B
[0][1]+
m_Vuq
[1][2]*
m_B
[0][2]+
176
m_Vuq
[0][0]*
m_B
[1][0]+
m_Vuq
[0][1]*
m_B
[1][1]+
m_Vuq
[0][2]*
m_B
[1][2];
177
Sk[1][0]=Sk[0][1];
178
179
detr=1.0/(Sk[0][0]*Sk[1][1]-Sk[0][1]*Sk[1][0]);
180
m_V
[0][0]=Sk[1][1]*detr;
181
m_V
[1][1]=Sk[0][0]*detr;
182
m_V
[0][1]=
m_V
[1][0]=-Sk[0][1]*detr;
183
184
chi2
=
m_V
[0][0]*
m_resid
[0]*
m_resid
[0]+
m_V
[1][1]*
m_resid
[1]*
m_resid
[1]+
185
2.0*
m_V
[0][1]*
m_resid
[1]*
m_resid
[0];
186
187
for
(i=0;i<2;i++)
188
for
(j=0;j<3;j++)
m_D
[i][j]=AC[i][j];
189
190
m_dChi2
=
chi2
;
191
return
chi2
;
192
}
193
194
double
TrigPrimaryVertexTrack::getChi2Contribution
()
195
{
196
return
m_dChi2
;
197
}
198
199
void
TrigPrimaryVertexTrack::updateVertex
(
class
TrigL2Vertex
* pV)
200
{
201
int
i,j,k;
202
203
double
K[2][3];
204
205
for
(i=0;i<2;i++)
206
{
207
for
(j=0;j<3;j++)
208
{
209
K[i][j]=0.0;
210
for
(k=0;k<2;k++) K[i][j]+=
m_D
[k][j]*
m_V
[k][i];
211
}
212
}
213
for
(i=0;i<3;i++)
214
{
215
pV->
getParametersVector
()[i]+=K[0][i]*
m_resid
[0]+K[1][i]*
m_resid
[1];
216
for
(j=i;j<3;j++)
217
{
218
pV->
m_Gk
[i][j]-=K[0][i]*
m_D
[0][j]+K[1][i]*
m_D
[1][j];
219
pV->
m_Gk
[j][i]=pV->
m_Gk
[i][j];
220
}
221
}
222
}
223
224
MsgStream&
TrigPrimaryVertexTrack::report
( MsgStream& out )
const
225
{
226
int
i;
227
228
out<<
"Primary track "
<<
m_index
<<
endmsg
;
229
for
(i=0;i<2;i++)
230
{
231
out<<
" u"
<<i<<
" = "
<<
m_u
[i]<<
" "
<<
m_Vuu
[i][0]<<
" "
<<
m_Vuu
[i][1]<<
endmsg
;
232
}
233
for
(i=0;i<3;i++)
234
{
235
out<<
" q"
<<i<<
" = "
<<
m_q
[i]<<
" "
<<
m_Vqq
[i][0]<<
" "
<<
m_Vqq
[i][1]<<
" "
<<
m_Vqq
[i][2]<<
endmsg
;
236
}
237
return
out;
238
}
239
240
241
endmsg
#define endmsg
Definition
AnalysisConfig_Ntuple.cxx:54
AmgSymMatrix
#define AmgSymMatrix(dim)
Definition
EventPrimitives.h:50
a
static Double_t a
Definition
LArPhysWaveHECTool.cxx:38
TrackParameters.h
Track.h
TrigL2Vertex.h
TrigPrimaryVertexTrack.h
h
Header file for AthHistogramAlgorithm.
TrigL2Vertex
Definition
TrigL2Vertex.h:146
TrigL2Vertex::getParametersVector
double * getParametersVector()
returns vector of vertex fit parameters: vertex position + refitted track momenta at-perigee (sic !...
Definition
TrigL2Vertex.cxx:651
TrigL2Vertex::m_Gk
double m_Gk[MAX_SIZE_VERT_COVM][MAX_SIZE_VERT_COVM]
Definition
TrigL2Vertex.h:182
TrigPrimaryVertexTrack::m_Perigee
double m_Perigee[5]
Definition
TrigPrimaryVertexTrack.h:41
TrigPrimaryVertexTrack::m_u
double m_u[2]
Definition
TrigPrimaryVertexTrack.h:39
TrigPrimaryVertexTrack::updateVertex
virtual void updateVertex(TrigL2Vertex *)
implementation of abstract method from the base class
Definition
TrigPrimaryVertexTrack.cxx:199
TrigPrimaryVertexTrack::setIndex
void setIndex(int)
to be used by TrigVertexingTool
Definition
TrigPrimaryVertexTrack.cxx:80
TrigPrimaryVertexTrack::activate
void activate()
sets m_isActive to true
Definition
TrigPrimaryVertexTrack.cxx:59
TrigPrimaryVertexTrack::m_PerigeeCovariance
double m_PerigeeCovariance[5][5]
Definition
TrigPrimaryVertexTrack.h:42
TrigPrimaryVertexTrack::m_pTrkTrack
const Trk::Track * m_pTrkTrack
Definition
TrigPrimaryVertexTrack.h:33
TrigPrimaryVertexTrack::TrigPrimaryVertexTrack
TrigPrimaryVertexTrack(const Trk::Track *)
constructor for EF (offline) tracks
Definition
TrigPrimaryVertexTrack.cxx:11
TrigPrimaryVertexTrack::getIndex
int getIndex() const
to be used by TrigVertexingTool
Definition
TrigPrimaryVertexTrack.cxx:85
TrigPrimaryVertexTrack::m_Vuu
double m_Vuu[2][2]
Definition
TrigPrimaryVertexTrack.h:38
TrigPrimaryVertexTrack::m_dChi2
double m_dChi2
Definition
TrigPrimaryVertexTrack.h:45
TrigPrimaryVertexTrack::report
virtual MsgStream & report(MsgStream &) const
Definition
TrigPrimaryVertexTrack.cxx:224
TrigPrimaryVertexTrack::m_A
double m_A[2][3]
Definition
TrigPrimaryVertexTrack.h:43
TrigPrimaryVertexTrack::m_index
int m_index
Definition
TrigPrimaryVertexTrack.h:35
TrigPrimaryVertexTrack::mask
void mask()
sets m_isActive to false
Definition
TrigPrimaryVertexTrack.cxx:54
TrigPrimaryVertexTrack::PerigeeCovariance
double PerigeeCovariance(int, int) const
covariance of track parameters at the perigee
Definition
TrigPrimaryVertexTrack.cxx:95
TrigPrimaryVertexTrack::getChi2Contribution
double getChi2Contribution()
chi2-contribution to the vertex fit
Definition
TrigPrimaryVertexTrack.cxx:194
TrigPrimaryVertexTrack::getTrkTrack
const Trk::Track * getTrkTrack()
getter for EF (offline) tracks
Definition
TrigPrimaryVertexTrack.cxx:75
TrigPrimaryVertexTrack::m_active
bool m_active
Definition
TrigPrimaryVertexTrack.h:46
TrigPrimaryVertexTrack::~TrigPrimaryVertexTrack
~TrigPrimaryVertexTrack()
Definition
TrigPrimaryVertexTrack.cxx:49
TrigPrimaryVertexTrack::Perigee
const double * Perigee() const
track parameters at the perigee
Definition
TrigPrimaryVertexTrack.cxx:90
TrigPrimaryVertexTrack::getTrackType
int getTrackType()
0: L2 track, 1: EF(offline) track
Definition
TrigPrimaryVertexTrack.cxx:69
TrigPrimaryVertexTrack::getChi2Distance
virtual double getChi2Distance(TrigL2Vertex *)
implementation of abstract method from the base class
Definition
TrigPrimaryVertexTrack.cxx:100
TrigPrimaryVertexTrack::m_Vqq
double m_Vqq[3][3]
Definition
TrigPrimaryVertexTrack.h:36
TrigPrimaryVertexTrack::isActive
bool isActive()
if true this track will be used in the vertex fit otherwise it will be masked
Definition
TrigPrimaryVertexTrack.cxx:64
TrigPrimaryVertexTrack::m_q
double m_q[3]
Definition
TrigPrimaryVertexTrack.h:40
TrigPrimaryVertexTrack::m_Vuq
double m_Vuq[2][3]
Definition
TrigPrimaryVertexTrack.h:37
TrigPrimaryVertexTrack::m_B
double m_B[2][3]
Definition
TrigPrimaryVertexTrack.h:44
TrigPrimaryVertexTrack::m_nTrackType
int m_nTrackType
Definition
TrigPrimaryVertexTrack.h:34
TrigVertexFittingNode::m_D
double m_D[2][MAX_SIZE_VERT_COVM]
Definition
TrigL2Vertex.h:48
TrigVertexFittingNode::m_resid
double m_resid[2]
Definition
TrigL2Vertex.h:46
TrigVertexFittingNode::m_V
double m_V[2][2]
Definition
TrigL2Vertex.h:47
Trk::Track
The ATLAS Track class.
Definition
Tracking/TrkEvent/TrkTrack/TrkTrack/Track.h:73
chi2
double chi2(TH1 *h0, TH1 *h1)
Definition
comparitor.cxx:775
C
struct color C
Trk::Perigee
ParametersT< TrackParametersDim, Charged, PerigeeSurface > Perigee
Definition
Tracking/TrkEvent/TrkParameters/TrkParameters/TrackParameters.h:33
Trk::phi0
@ phi0
Definition
ParamDefs.h:65
Trk::theta
@ theta
Definition
ParamDefs.h:66
Trk::qOverP
@ qOverP
perigee
Definition
ParamDefs.h:67
Trk::d0
@ d0
Definition
ParamDefs.h:63
Trk::z0
@ z0
Definition
ParamDefs.h:64
Generated on
for ATLAS Offline Software by
1.17.0