ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Trigger
EFTracking
FPGATrackSim
FPGATrackSimBinning
src
FPGATrackSimKeyLayerTool.cxx
Go to the documentation of this file.
1
// Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
2
3
#include "
FPGATrackSimKeyLayerTool.h
"
4
5
//
6
//
7
// Tool for doing Key Layer Math
8
//
9
//
10
11
std::pair<double, double>
FPGATrackSimKeyLayerTool::getXY
(
double
r
,
double
phi
)
const
12
{
13
return
std::pair<double, double>(
r
* cos(
phi
),
r
* sin(
phi
));
14
}
15
16
std::pair<double, double>
FPGATrackSimKeyLayerTool::getRotationAngles
(
const
std::pair<double, double>& xy1,
const
std::pair<double, double>& xy2)
const
17
{
18
double
dr12x = xy2.first - xy1.first;
19
double
dr12y = xy2.second - xy1.second;
20
double
dr12mag = std::hypot(dr12x, dr12y);
21
double
cos_rot = dr12y / dr12mag;
22
double
sin_rot = -dr12x / dr12mag;
23
return
std::pair<double, double>(cos_rot, sin_rot);
24
}
25
26
std::pair<double, double>
FPGATrackSimKeyLayerTool::rotateXY
(
const
std::pair<double, double>& xy,
const
std::pair<double, double>& ang)
const
27
{
28
return
std::pair<double, double>(xy.first * ang.first + xy.second * ang.second,
29
-xy.first * ang.second + xy.second * ang.first);
30
}
31
32
FPGATrackSimKeyLayerTool::rotatedConfig
FPGATrackSimKeyLayerTool::getRotatedConfig
(
const
KeyLyrPars
&keypars)
const
33
{
34
rotatedConfig
result;
35
36
auto
xy1 =
getXY
(
m_R1
, keypars.
phi1
);
37
auto
xy2 =
getXY
(
m_R2
, keypars.
phi2
);
38
39
result.rotang =
getRotationAngles
(xy1, xy2);
40
result.xy1p =
rotateXY
(xy1, result.rotang);
41
result.xy2p =
rotateXY
(xy2, result.rotang);
42
result.y = result.xy2p.second - result.xy1p.second;
43
44
return
result;
45
}
46
47
std::pair<double, double>
FPGATrackSimKeyLayerTool::getRotatedHit
(
const
std::pair<double, double>& rotang,
double
rHit,
double
phiHit)
const
48
{
49
auto
xyh =
getXY
(rHit, phiHit);
50
return
rotateXY
(xyh, rotang);
51
}
52
53
FPGATrackSimKeyLayerTool::KeyLyrPars
FPGATrackSimKeyLayerTool::trackParsToKeyPars
(
const
FPGATrackSimTrackPars
&pars)
const
54
{
55
KeyLyrPars
retv;
56
retv.
z1
=
FPGATrackSimBinUtil::GeomHelpers::zFromPars
(
m_R1
, pars);
57
retv.
z2
=
FPGATrackSimBinUtil::GeomHelpers::zFromPars
(
m_R2
, pars);
58
retv.
phi1
=
FPGATrackSimBinUtil::GeomHelpers::phiFromPars
(
m_R1
, pars);
59
retv.
phi2
=
FPGATrackSimBinUtil::GeomHelpers::phiFromPars
(
m_R2
, pars);
60
61
double
Rinv = pars[
FPGATrackSimTrackPars::IHIP
] * (2.0 *
FPGATrackSimBinUtil::GeomHelpers::CurvatureConstant
);
62
if
(Rinv != 0)
63
{
64
double
R = 1 / Rinv;
65
auto
xy1 =
getXY
(
m_R1
, retv.
phi1
);
66
auto
xy2 =
getXY
(
m_R2
, retv.
phi2
);
67
double
ysqr = (xy2.first - xy1.first) * (xy2.first - xy1.first) + (xy2.second - xy1.second) * (xy2.second - xy1.second);
68
double
sign
= (R > 0) - (R < 0);
69
retv.
xm
= -1 *
sign
* (std::abs(R) - sqrt(R * R - ysqr / 4.0));
70
}
71
else
72
{
73
retv.
xm
= 0;
74
}
75
76
return
retv;
77
}
78
79
FPGATrackSimTrackPars
FPGATrackSimKeyLayerTool::keyParsToTrackPars
(
const
KeyLyrPars
&keypars)
const
80
{
81
82
FPGATrackSimTrackPars
pars;
83
pars[
FPGATrackSimTrackPars::IZ0
] = (keypars.
z1
*
m_R2
- keypars.
z2
*
m_R1
) / (
m_R2
-
m_R1
);
84
pars[
FPGATrackSimTrackPars::IETA
] =
FPGATrackSimBinUtil::GeomHelpers::EtaFromTheta
(std::atan2(
m_R2
-
m_R1
, keypars.
z2
- keypars.
z1
));
85
86
// This is the exact math which is a bit messy
87
// if you want the math contact lipeles@sas.upenn.edu
88
89
double
xm = keypars.
xm
;
90
91
auto
rotated_coords =
getRotatedConfig
(keypars);
92
auto
xy1p = rotated_coords.xy1p;
93
auto
rotang = rotated_coords.rotang;
94
auto
y
= rotated_coords.y;
95
96
// reverse rotation
97
auto
revang = rotang;
98
revang.second = -rotang.second;
99
100
if
(xm != 0)
101
{
102
double
Rinv = 2 * xm / (xm * xm + (
y
/ 2) * (
y
/ 2));
103
double
d = (
y
*
y
/ 4.0 - xm * xm) / (2.0 * xm);
104
double
sign
= (xm > 0) - (xm < 0);
105
106
pars[
FPGATrackSimTrackPars::IHIP
] = -1 * Rinv / (2.0 *
FPGATrackSimBinUtil::GeomHelpers::CurvatureConstant
);
107
108
109
std::pair<double, double> xycp(-d + xy1p.first,
y
/ 2.0 + xy1p.second);
110
111
pars[
FPGATrackSimTrackPars::ID0
] = -1 *
sign
* (std::abs(1 / Rinv) - std::hypot(xycp.first, xycp.second));
112
113
auto
xyc =
rotateXY
(xycp, revang);
114
115
pars[
FPGATrackSimTrackPars::IPHI
] = std::atan2(
sign
* -xyc.first,
sign
* xyc.second);
116
}
117
else
118
{
119
pars[
FPGATrackSimTrackPars::IHIP
] = 0.0;
120
pars[
FPGATrackSimTrackPars::ID0
] = -1 * xy1p.first;
121
pars[
FPGATrackSimTrackPars::IPHI
] = std::atan2(rotang.first, -rotang.second);
122
}
123
124
return
pars;
125
}
126
127
double
FPGATrackSimKeyLayerTool::zExpected
(
const
KeyLyrPars
& keypars,
double
r
)
const
128
{
129
return
(keypars.
z2
- keypars.
z1
) / (
m_R2
-
m_R1
) * (
r
-
m_R1
) + keypars.
z1
;
130
}
131
132
// takes hit position and calculated what xm should be for that hit
133
double
FPGATrackSimKeyLayerTool::xmForHit
(
const
KeyLyrPars
& keypars,
double
rHit,
double
phiHit)
const
134
{
135
auto
rotated_coords =
getRotatedConfig
(keypars);
136
auto
xy1p = rotated_coords.xy1p;
137
auto
rotang = rotated_coords.rotang;
138
auto
y
= rotated_coords.y;
139
140
auto
xyhp =
getRotatedHit
(rotang, rHit, phiHit);
141
double
xh = xyhp.first - xy1p.first;
142
double
yh = xyhp.second - xy1p.second;
143
144
// use taylor expanded xm calculation
145
double
sign
= ((yh > 0) && (yh <
y
)) ? 1 : -1;
146
if
((std::abs(yh) < std::abs(xh)) || (std::abs(
y
- yh) < std::abs(xh)))
147
{
148
return
((xh > 0) ? 1 : -1) * 100000;
149
}
150
151
double
xm_taylor =
sign
*
y
*
y
/ (
y
*
y
- 4 * xh * xh - 4 * (yh -
y
/ 2.0) * (yh -
y
/ 2.0)) * xh;
152
153
return
xm_taylor;
154
}
155
156
// Find shift from nominal track to hit in the "x" direction
157
double
FPGATrackSimKeyLayerTool::deltaX
(
const
KeyLyrPars
& keypars,
double
rHit,
double
phiHit)
const
158
{
159
auto
rotated_coords =
getRotatedConfig
(keypars);
160
161
auto
rotang = rotated_coords.rotang;
162
163
auto
xyhp =
getRotatedHit
(rotang, rHit, phiHit);
164
165
double
xh = xyhp.first-rotated_coords.xy1p.first;
166
167
return
xh -
xExpected
(keypars,rHit, phiHit);
168
}
169
170
// Find shift from nominal track to hit in the "x" direction
171
double
FPGATrackSimKeyLayerTool::xExpected
(
const
KeyLyrPars
& keypars,
double
rHit,
double
phiHit)
const
172
{
173
auto
rotated_coords =
getRotatedConfig
(keypars);
174
175
auto
rotang = rotated_coords.rotang;
176
auto
y
= rotated_coords.y;
177
178
auto
xyhp =
getRotatedHit
(rotang, rHit, phiHit);
179
180
double
yh = xyhp.second-rotated_coords.xy1p.second;
181
182
return
keypars.
xm
* (keypars.
xm
* keypars.
xm
+ yh * (
y
- yh)) / (keypars.
xm
* keypars.
xm
+ (
y
/ 2) * (
y
/ 2));
183
}
184
185
phi
Scalar phi() const
phi method
Definition
AmgMatrixBasePlugin.h:67
FPGATrackSimKeyLayerTool.h
Binning Classes for BinTool.
sign
int sign(int a)
Definition
TRT_StrawNeighbourSvc.h:108
y
#define y
FPGATrackSimBinUtil::GeomHelpers::phiFromPars
static double phiFromPars(double r, const FPGATrackSimTrackPars &pars)
Definition
FPGATrackSimBinUtil.cxx:166
FPGATrackSimBinUtil::GeomHelpers::CurvatureConstant
static constexpr double CurvatureConstant
Definition
FPGATrackSimBinUtil.h:113
FPGATrackSimBinUtil::GeomHelpers::zFromPars
static double zFromPars(double r, const FPGATrackSimTrackPars &pars)
Definition
FPGATrackSimBinUtil.cxx:151
FPGATrackSimBinUtil::GeomHelpers::EtaFromTheta
static double EtaFromTheta(double theta)
Definition
FPGATrackSimBinUtil.cxx:143
FPGATrackSimKeyLayerTool::deltaX
double deltaX(const KeyLyrPars &keypars, double rHit, double phiHit) const
Definition
FPGATrackSimKeyLayerTool.cxx:157
FPGATrackSimKeyLayerTool::m_R1
double m_R1
Definition
FPGATrackSimKeyLayerTool.h:104
FPGATrackSimKeyLayerTool::getRotatedConfig
rotatedConfig getRotatedConfig(const KeyLyrPars &keypars) const
Definition
FPGATrackSimKeyLayerTool.cxx:32
FPGATrackSimKeyLayerTool::getXY
std::pair< double, double > getXY(double r, double phi) const
Definition
FPGATrackSimKeyLayerTool.cxx:11
FPGATrackSimKeyLayerTool::m_R2
double m_R2
Definition
FPGATrackSimKeyLayerTool.h:105
FPGATrackSimKeyLayerTool::trackParsToKeyPars
KeyLyrPars trackParsToKeyPars(const FPGATrackSimTrackPars &pars) const
Definition
FPGATrackSimKeyLayerTool.cxx:53
FPGATrackSimKeyLayerTool::xExpected
double xExpected(const KeyLyrPars &keypars, double rHit, double phiHit) const
Definition
FPGATrackSimKeyLayerTool.cxx:171
FPGATrackSimKeyLayerTool::getRotatedHit
std::pair< double, double > getRotatedHit(const std::pair< double, double > &rotang, double rHit, double phiHit) const
Definition
FPGATrackSimKeyLayerTool.cxx:47
FPGATrackSimKeyLayerTool::rotateXY
std::pair< double, double > rotateXY(const std::pair< double, double > &xy, const std::pair< double, double > &ang) const
Definition
FPGATrackSimKeyLayerTool.cxx:26
FPGATrackSimKeyLayerTool::keyParsToTrackPars
FPGATrackSimTrackPars keyParsToTrackPars(const KeyLyrPars &keypars) const
Definition
FPGATrackSimKeyLayerTool.cxx:79
FPGATrackSimKeyLayerTool::zExpected
double zExpected(const KeyLyrPars &keypars, double r) const
Definition
FPGATrackSimKeyLayerTool.cxx:127
FPGATrackSimKeyLayerTool::getRotationAngles
std::pair< double, double > getRotationAngles(const std::pair< double, double > &xy1, const std::pair< double, double > &xy2) const
Definition
FPGATrackSimKeyLayerTool.cxx:16
FPGATrackSimKeyLayerTool::xmForHit
double xmForHit(const KeyLyrPars &keypars, double rHit, double phiHit) const
Definition
FPGATrackSimKeyLayerTool.cxx:133
FPGATrackSimTrackPars
Definition
FPGATrackSimTrackPars.h:22
FPGATrackSimTrackPars::IHIP
@ IHIP
Definition
FPGATrackSimTrackPars.h:49
FPGATrackSimTrackPars::ID0
@ ID0
Definition
FPGATrackSimTrackPars.h:49
FPGATrackSimTrackPars::IETA
@ IETA
Definition
FPGATrackSimTrackPars.h:49
FPGATrackSimTrackPars::IPHI
@ IPHI
Definition
FPGATrackSimTrackPars.h:49
FPGATrackSimTrackPars::IZ0
@ IZ0
Definition
FPGATrackSimTrackPars.h:49
r
int r
Definition
globals.cxx:22
FPGATrackSimKeyLayerTool::KeyLyrPars
Definition
FPGATrackSimKeyLayerTool.h:47
FPGATrackSimKeyLayerTool::KeyLyrPars::z2
double z2
Definition
FPGATrackSimKeyLayerTool.h:52
FPGATrackSimKeyLayerTool::KeyLyrPars::xm
double xm
Definition
FPGATrackSimKeyLayerTool.h:55
FPGATrackSimKeyLayerTool::KeyLyrPars::phi2
double phi2
Definition
FPGATrackSimKeyLayerTool.h:54
FPGATrackSimKeyLayerTool::KeyLyrPars::phi1
double phi1
Definition
FPGATrackSimKeyLayerTool.h:53
FPGATrackSimKeyLayerTool::KeyLyrPars::z1
double z1
Definition
FPGATrackSimKeyLayerTool.h:51
FPGATrackSimKeyLayerTool::rotatedConfig
Definition
FPGATrackSimKeyLayerTool.h:70
Generated on
for ATLAS Offline Software by
1.17.0