ATLAS Offline Software
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 
13 namespace Trk {
14 
15 void 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 
25 std::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 }
46 std::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 
62 std::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 }
79 std::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 
96 std::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 }
117 std::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 }
Trk::VKTrack::cnstP
double cnstP[3]
Definition: TrkVKalVrtCoreBase.h:80
CommonPars.h
test_pyathena.pt
pt
Definition: test_pyathena.py:11
Trk::VKVertex::refIterV
double refIterV[3]
Definition: TrkVKalVrtCoreBase.h:146
Trk::VKTrack
Definition: TrkVKalVrtCoreBase.h:64
drawFromPickle.cos
cos
Definition: drawFromPickle.py:36
Trk::vkPerigeeToP
void vkPerigeeToP(const double *perig3, double *pp, double effectiveBMAG)
Definition: cfMomentum.cxx:15
Trk::getCnstParticleMom
std::array< double, 4 > getCnstParticleMom(const VKTrack *trk, const VKVertex *vk)
Definition: cfMomentum.cxx:96
VKalVrtBMag.h
Trk::VKTrack::fitP
double fitP[3]
Definition: TrkVKalVrtCoreBase.h:76
TrkVKalVrtCoreBase.h
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:209
Trk::vkalMagFld::getCnvCst
static double getCnvCst()
Definition: VKalVrtBMag.h:59
Trk::VKVertex::fitV
double fitV[3]
Definition: TrkVKalVrtCoreBase.h:140
vkalMagCnvCst
#define vkalMagCnvCst
Definition: CommonPars.h:23
Trk::getIniParticleMom
std::array< double, 4 > getIniParticleMom(const VKTrack *trk, const VKVertex *vk)
Definition: cfMomentum.cxx:62
Trk::vkalMagFld::getMagFld
static void getMagFld(const double, const double, const double, double &, double &, double &, const VKalVrtControlBase *)
Definition: VKalVrtBMag.cxx:24
drawFromPickle.tan
tan
Definition: drawFromPickle.py:36
Trk
Ensure that the ATLAS eigen extensions are properly loaded.
Definition: FakeTrackBuilder.h:9
Trk::VKVertex::vk_fitterControl
std::unique_ptr< VKalVrtControl > vk_fitterControl
Definition: TrkVKalVrtCoreBase.h:194
Trk::getFitParticleMom
std::array< double, 4 > getFitParticleMom(const VKTrack *trk, const VKVertex *vk)
Definition: cfMomentum.cxx:25
Trk::VKVertex::cnstV
double cnstV[3]
Definition: TrkVKalVrtCoreBase.h:143
Trk::vkalMagFld::getEffField
static double getEffField(double bx, double by, double bz, double phi, double theta)
Definition: VKalVrtBMag.h:60
Trk::VKVertex
Definition: TrkVKalVrtCoreBase.h:128
Trk::phi
@ phi
Definition: ParamDefs.h:75
Trk::VKTrack::iniP
double iniP[3]
Definition: TrkVKalVrtCoreBase.h:83
Trk::VKTrack::getMass
double getMass() const
Definition: TrkVKalVrtCoreBase.h:100
drawFromPickle.sin
sin
Definition: drawFromPickle.py:36
cfMomentum.h
python.SystemOfUnits.m
float m
Definition: SystemOfUnits.py:106