ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Tracking
TrkVertexFitter
TrkVKalVrtCore
src
cfTotCov.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
// Calculates COVF(21) - symmetric 6x6 covariance matrix
6
// for combined (X,Y,Z,Px,Py,Pz) vector after vertex fit
7
//
8
//-----------------------------------------------------
9
#include "
TrkVKalVrtCore/cfTotCov.h
"
10
#include "
TrkVKalVrtCore/CommonPars.h
"
11
#include "
TrkVKalVrtCore/VtCFitE.h
"
12
#include "
TrkVKalVrtCore/Utilities.h
"
13
#include "
TrkVKalVrtCore/TrkVKalVrtCoreBase.h
"
14
#include "
TrkVKalVrtCore/VKalVrtBMag.h
"
15
#include <cmath>
16
17
namespace
Trk
{
18
//
19
// Function calculates complete error matrix ADER and derivatives
20
// of fitted track parameters with respect to initial ones.
21
// It calculates also combined momentum and (VxVyVzPxPyPz) covarinace
22
// Complete error matrix is recalculated here via getFullVrtCov,
23
// so CPU CONSUMING!!!
24
//--------------------------------------------------------------
25
26
int
afterFit
(
VKVertex
*vk,
double
*ader,
double
* dcv,
double
* ptot,
double
* VrtMomCov,
const
VKalVrtControlBase
* CONTROL )
27
{
28
int
i,j;
29
double
px
,
py
,
pz
,pt,invR,cth;
30
double
verr[6][6]={{0.}};
//for (i=0; i<6*6; i++) verr[i]=0;
31
32
int
NTRK = vk->
TrackList
.size();
33
int
NVar = NTRK*3+3;
34
for
(i=1; i<=6; ++i) {
35
for
(j=1; j<=NVar ; ++j) dcv[i + j*6 - 7] = 0.;
36
}
37
cfsetdiag
( 6, VrtMomCov, 100.);
38
ptot[0] = 0.;
39
ptot[1] = 0.;
40
ptot[2] = 0.;
41
42
double
vBx,vBy,vBz,constBF;
43
Trk::vkalMagFld::getMagFld
(vk->
refIterV
[0],vk->
refIterV
[1],vk->
refIterV
[2],vBx,vBy,vBz,CONTROL);
44
45
for
(i = 1; i <= NTRK; ++i) {
46
VKTrack
*trk=vk->
TrackList
[i-1].get();
47
invR = trk->
fitP
[2];
48
cth = 1. / tan(trk->
fitP
[0]);
49
constBF=
Trk::vkalMagFld::getEffField
(vBx, vBy, vBz, trk->
fitP
[1], trk->
fitP
[0]) *
Trk::vkalMagFld::getCnvCst
();
50
pt = std::abs( constBF / invR);
51
px
= pt * cos(trk->
fitP
[1]);
52
py
= pt * sin(trk->
fitP
[1]);
53
pz
= pt * cth;
54
ptot[0] +=
px
;
55
ptot[1] +=
py
;
56
ptot[2] +=
pz
;
57
dcv[ (i*3 + 0)*6 + 5] = -pt * (cth * cth + 1);
/* dPz/d(theta) */
58
dcv[ (i*3 + 1)*6 + 3] = -
py
;
/* dPx/d(phi) */
59
dcv[ (i*3 + 1)*6 + 4] =
px
;
/* dPy/d(phi) */
60
dcv[ (i*3 + 2)*6 + 3] = -
px
/ invR;
/* dPx/d(rho) */
61
dcv[ (i*3 + 2)*6 + 4] = -
py
/ invR;
/* dPy/d(rho) */
62
dcv[ (i*3 + 2)*6 + 5] = -
pz
/ invR;
/* dPz/d(rho) */
63
}
64
dcv[0] = 1.;
65
dcv[7] = 1.;
66
dcv[14] = 1.;
67
if
(!ader)
return
0;
68
int
IERR=
getFullVrtCov
(vk, ader, dcv, verr);
if
(IERR)
return
IERR;
69
int
ijk = 0;
70
for
( i=0; i<6; ++i) {
71
for
(j=0; j<=i; ++j) {
72
VrtMomCov[ijk++] = verr[i][j];
73
}
74
}
75
return
0;
76
}
77
78
// The same as afterFit(), but instead of fitted track parameters
79
// it uses guessed track parameters. ( it's needed for cascade)
80
// Complete error matrix is recalculated here via getFullVrtCov,
81
// so CPU CONSUMING!!!
82
//--------------------------------------------------------------------------------------------------
83
int
afterFitWithIniPar
(
VKVertex
*vk,
double
*ader,
double
* dcv,
double
* ptot,
double
* VrtMomCov,
const
VKalVrtControlBase
* CONTROL )
84
{
85
int
i,j;
86
double
px
,
py
,
pz
,pt,invR,cth;
87
double
verr[6][6]={{0.}};
88
89
90
int
NTRK = vk->
TrackList
.size();
91
int
NVar = NTRK*3+3;
92
for
(i=1; i<=6; ++i) {
93
for
(j=1; j<=NVar ; ++j) dcv[i + j*6 - 7] = 0.;
94
}
95
cfsetdiag
( 6, VrtMomCov, 10.);
96
ptot[0] = 0.;
97
ptot[1] = 0.;
98
ptot[2] = 0.;
99
100
double
vBx,vBy,vBz,constBF;
101
Trk::vkalMagFld::getMagFld
(vk->
refIterV
[0],vk->
refIterV
[1],vk->
refIterV
[2],vBx,vBy,vBz,CONTROL);
102
103
for
(i = 1; i <= NTRK; ++i) {
104
VKTrack
*trk=vk->
TrackList
[i-1].get();
105
invR = trk->
iniP
[2];
106
cth = 1. / tan(trk->
iniP
[0]);
107
constBF=
Trk::vkalMagFld::getEffField
(vBx, vBy, vBz, trk->
fitP
[1], trk->
fitP
[0]) *
Trk::vkalMagFld::getCnvCst
();
108
pt = std::abs( constBF/invR );
109
px
= pt * cos(trk->
iniP
[1]);
110
py
= pt * sin(trk->
iniP
[1]);
111
pz
= pt * cth;
112
ptot[0] +=
px
;
113
ptot[1] +=
py
;
114
ptot[2] +=
pz
;
115
dcv[ (i*3 + 0)*6 + 5] = -pt * (cth * cth + 1);
/* dPz/d(theta) */
116
dcv[ (i*3 + 1)*6 + 3] = -
py
;
/* dPx/d(phi) */
117
dcv[ (i*3 + 1)*6 + 4] =
px
;
/* dPy/d(phi) */
118
dcv[ (i*3 + 2)*6 + 3] = -
px
/ invR;
/* dPx/d(rho) */
119
dcv[ (i*3 + 2)*6 + 4] = -
py
/ invR;
/* dPy/d(rho) */
120
dcv[ (i*3 + 2)*6 + 5] = -
pz
/ invR;
/* dPz/d(rho) */
121
}
122
dcv[0] = 1.;
123
dcv[7] = 1.;
124
dcv[14] = 1.;
125
if
(!ader)
return
0;
126
int
IERR=
getFullVrtCov
(vk, ader, dcv, verr);
if
(IERR)
return
IERR;
127
int
ijk = 0;
128
for
( i=0; i<6; ++i) {
129
for
(j=0; j<=i; ++j) {
130
VrtMomCov[ijk++] = verr[i][j];
131
}
132
}
133
return
0;
134
}
135
136
}
/* End of namespace */
137
138
CommonPars.h
Utilities.h
TrkVKalVrtCoreBase.h
VKalVrtBMag.h
VtCFitE.h
cfTotCov.h
Trk::VKTrack
Definition
TrkVKalVrtCoreBase.h:63
Trk::VKTrack::fitP
double fitP[3]
Definition
TrkVKalVrtCoreBase.h:75
Trk::VKTrack::iniP
double iniP[3]
Definition
TrkVKalVrtCoreBase.h:82
Trk::VKVertex
Definition
TrkVKalVrtCoreBase.h:127
Trk::VKVertex::refIterV
double refIterV[3]
Definition
TrkVKalVrtCoreBase.h:145
Trk::VKVertex::TrackList
std::vector< std::unique_ptr< VKTrack > > TrackList
Definition
TrkVKalVrtCoreBase.h:166
Trk::VKalVrtControlBase
Definition
TrkVKalVrtCore.h:26
Trk::vkalMagFld::getMagFld
static void getMagFld(const double, const double, const double, double &, double &, double &, const VKalVrtControlBase *)
Definition
VKalVrtBMag.cxx:24
Trk::vkalMagFld::getEffField
static double getEffField(double bx, double by, double bz, double phi, double theta)
Definition
VKalVrtBMag.h:60
Trk::vkalMagFld::getCnvCst
static double getCnvCst()
Definition
VKalVrtBMag.h:59
Trk
Ensure that the ATLAS eigen extensions are properly loaded.
Definition
FakeTrackBuilder.h:9
Trk::cfsetdiag
void cfsetdiag(long int n, double *matr, double value) noexcept
Definition
Tracking/TrkVertexFitter/TrkVKalVrtCore/src/Utilities.cxx:236
Trk::afterFitWithIniPar
int afterFitWithIniPar(VKVertex *vk, double *ader, double *dcv, double *ptot, double *VrtMomCov, const VKalVrtControlBase *CONTROL)
Definition
cfTotCov.cxx:83
Trk::pz
@ pz
global momentum (cartesian)
Definition
ParamDefs.h:61
Trk::px
@ px
Definition
ParamDefs.h:59
Trk::py
@ py
Definition
ParamDefs.h:60
Trk::getFullVrtCov
int getFullVrtCov(VKVertex *vk, double *ader, const double *dcv, double verr[6][6])
Definition
VtCFitE.cxx:25
Trk::afterFit
int afterFit(VKVertex *vk, double *ader, double *dcv, double *ptot, double *VrtMomCov, const VKalVrtControlBase *CONTROL)
Definition
cfTotCov.cxx:26
Generated on
for ATLAS Offline Software by
1.17.0