ATLAS Offline Software
Loading...
Searching...
No Matches
cfMomentum.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4
9#include <cmath>
10#include <array>
11#include <iostream>
12
13namespace Trk {
14
15void vkPerigeeToP( const double *perig3, double *pp, double effectiveBMAG)
16{
17 double constB = effectiveBMAG * vkalMagCnvCst;
18 double phiv = perig3[1];
19 double pt = std::abs( constB/perig3[2] );
20 pp[0] = pt * cos(phiv);
21 pp[1] = pt * sin(phiv);
22 pp[2] = pt / tan(perig3[0]);
23}
24
25std::array<double, 4> getFitParticleMom( const VKTrack * trk, const VKVertex *vk)
26{
27 std::array<double, 4> p{};
28 double fieldPos[3];
29 fieldPos[0]=vk->refIterV[0]+vk->fitV[0];
30 fieldPos[1]=vk->refIterV[1]+vk->fitV[1];
31 fieldPos[2]=vk->refIterV[2]+vk->fitV[2];
32 double vBx,vBy,vBz,magConst;
33 Trk::vkalMagFld::getMagFld(fieldPos[0], fieldPos[1], fieldPos[2],vBx,vBy,vBz,(vk->vk_fitterControl).get());
34 magConst = Trk::vkalMagFld::getEffField(vBx, vBy, vBz, trk->fitP[1], trk->fitP[0]) * Trk::vkalMagFld::getCnvCst();
35
36 double cth = 1. / tan( trk->fitP[0]);
37 double phi = trk->fitP[1];
38 double pt = std::abs( magConst/trk->fitP[2] );
39 double m = trk->getMass();
40 p[0] = pt * cos(phi);
41 p[1] = pt * sin(phi);
42 p[2] = pt * cth;
43 p[3] = sqrt(p[0]*p[0]+p[1]*p[1]+p[2]*p[2] + m*m );
44 return p;
45}
46std::array<double, 4> getFitParticleMom(const VKTrack * trk, double effectiveBMAG)
47{
48 std::array<double, 4> p{};
49 double magConst = effectiveBMAG * vkalMagCnvCst;
50
51 double cth = 1. / tan( trk->fitP[0]);
52 double phi = trk->fitP[1];
53 double pt = std::abs( magConst/trk->fitP[2] );
54 double m = trk->getMass();
55 p[0] = pt * cos(phi);
56 p[1] = pt * sin(phi);
57 p[2] = pt * cth;
58 p[3] = sqrt(p[0]*p[0]+p[1]*p[1]+p[2]*p[2] + m*m );
59 return p;
60}
61
62std::array<double, 4> getIniParticleMom( const VKTrack * trk, const VKVertex *vk)
63{
64 std::array<double, 4> p{};
65 double vBx,vBy,vBz,magConst;
66 Trk::vkalMagFld::getMagFld(vk->refIterV[0],vk->refIterV[1],vk->refIterV[2],vBx,vBy,vBz,(vk->vk_fitterControl).get());
67 magConst = Trk::vkalMagFld::getEffField(vBx, vBy, vBz, trk->iniP[1], trk->iniP[0]) * Trk::vkalMagFld::getCnvCst();
68
69 double cth = 1. / tan( trk->iniP[0]);
70 double phi = trk->iniP[1];
71 double pt = std::abs( magConst/trk->iniP[2] );
72 double m = trk->getMass();
73 p[0] = pt * cos(phi);
74 p[1] = pt * sin(phi);
75 p[2] = pt * cth;
76 p[3] = sqrt(p[0]*p[0]+p[1]*p[1]+p[2]*p[2] + m*m );
77 return p;
78}
79std::array<double, 4> getIniParticleMom(const VKTrack * trk, double effectiveBMAG)
80{
81 std::array<double, 4> p{};
82 double magConst = effectiveBMAG * vkalMagCnvCst;
83
84 double cth = 1. / tan( trk->iniP[0]);
85 double phi = trk->iniP[1];
86 double pt = std::abs( magConst/trk->iniP[2] );
87 double m = trk->getMass();
88 p[0] = pt * cos(phi);
89 p[1] = pt * sin(phi);
90 p[2] = pt * cth;
91 p[3] = sqrt(p[0]*p[0]+p[1]*p[1]+p[2]*p[2] + m*m );
92 return p;
93}
94
95
96std::array<double, 4> getCnstParticleMom( const VKTrack * trk, const VKVertex *vk )
97{
98 std::array<double, 4> p{};
99 double cnstPos[3];
100 cnstPos[0]=vk->refIterV[0]+vk->cnstV[0];
101 cnstPos[1]=vk->refIterV[1]+vk->cnstV[1];
102 cnstPos[2]=vk->refIterV[2]+vk->cnstV[2];
103 double vBx,vBy,vBz,magConst;
104 Trk::vkalMagFld::getMagFld(cnstPos[0],cnstPos[1],cnstPos[2],vBx,vBy,vBz,(vk->vk_fitterControl).get());
105 magConst = Trk::vkalMagFld::getEffField(vBx, vBy, vBz, trk->cnstP[1], trk->cnstP[0]) * Trk::vkalMagFld::getCnvCst();
106
107 double cth = 1. / tan( trk->cnstP[0]);
108 double phi = trk->cnstP[1];
109 double pt = std::abs( magConst/trk->cnstP[2] );
110 double m = trk->getMass();
111 p[0] = pt * cos(phi);
112 p[1] = pt * sin(phi);
113 p[2] = pt * cth;
114 p[3] = sqrt(p[0]*p[0]+p[1]*p[1]+p[2]*p[2] + m*m );
115 return p;
116}
117std::array<double, 4> getCnstParticleMom(const VKTrack * trk, double effectiveBMAG )
118{
119 std::array<double, 4> p{};
120 double magConst = effectiveBMAG * vkalMagCnvCst;
121
122 double cth = 1. / tan( trk->cnstP[0]);
123 double phi = trk->cnstP[1];
124 double pt = std::abs( magConst/trk->cnstP[2] );
125 double m = trk->getMass();
126 p[0] = pt * cos(phi);
127 p[1] = pt * sin(phi);
128 p[2] = pt * cth;
129 p[3] = sqrt(p[0]*p[0]+p[1]*p[1]+p[2]*p[2] + m*m );
130 return p;
131}
132
133}
#define vkalMagCnvCst
Definition CommonPars.h:23
double getMass() const
std::unique_ptr< VKalVrtControl > vk_fitterControl
static void getMagFld(const double, const double, const double, double &, double &, double &, const VKalVrtControlBase *)
static double getEffField(double bx, double by, double bz, double phi, double theta)
Definition VKalVrtBMag.h:60
static double getCnvCst()
Definition VKalVrtBMag.h:59
Ensure that the ATLAS eigen extensions are properly loaded.
void vkPerigeeToP(const double *perig3, double *pp, double effectiveBMAG)
std::array< double, 4 > getIniParticleMom(const VKTrack *trk, const VKVertex *vk)
@ phi
Definition ParamDefs.h:75
std::array< double, 4 > getCnstParticleMom(const VKTrack *trk, const VKVertex *vk)
std::array< double, 4 > getFitParticleMom(const VKTrack *trk, const VKVertex *vk)