Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
Main Page
Related Pages
Modules
Namespaces
Namespace List
Namespace Members
All
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Functions
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Variables
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Typedefs
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
z
Enumerations
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
z
Enumerator
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Classes
Class List
Class Index
Class Hierarchy
Class Members
All
:
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
~
Functions
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
~
Variables
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Typedefs
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Enumerations
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Enumerator
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Properties
Related Functions
:
a
b
c
d
e
f
g
h
i
j
l
m
n
o
p
r
s
t
v
w
x
z
Files
File List
File Members
All
$
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Functions
_
a
b
c
d
e
f
g
h
i
j
l
m
n
o
p
q
r
s
t
u
v
w
x
z
Variables
$
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Typedefs
a
b
c
d
e
f
g
h
i
j
l
m
n
o
p
q
r
s
t
u
v
w
x
z
Enumerations
a
b
c
d
e
f
g
h
i
l
m
n
o
p
r
s
t
v
x
z
Enumerator
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Macros
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
GitLab
LXR
•
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Properties
Friends
Macros
Modules
Pages
ForwardDetectors
ForwardTracker
src
ForwardTracker/src/Magnet.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
#include "
ForwardTracker/IBender.h
"
6
#include "
ForwardTracker/Magnet.h
"
7
#include "
ForwardTracker/Particle.h
"
8
#include "
ForwardTracker/TransversePoint.h
"
9
10
namespace
ForwardTracker
{
11
12
Magnet::Magnet
(
double
x
,
13
double
y
,
14
double
z
,
15
double
length
,
16
const
std::string& aperType,
17
double
aper1,
18
double
aper2,
19
double
aper3,
20
double
aper4,
21
Side
side
,
22
IBender::ConstPtr_t
bender,
23
const
std::string&
label
):
24
m_label (
label
),
25
m_side (
side
),
26
m_frontFace(
z
>0 ?
z
- 0.5*
length
:
z
+ 0.5*
length
),
27
m_rearFace (
z
>0 ?
z
+ 0.5*
length
:
z
- 0.5*
length
),
28
m_position (
x
,
y
,
z
),
29
m_aperType (aperType),
30
m_A1 (aper1),
31
m_A2 (aper2),
32
m_A3 (aper3),
33
m_A4 (aper4),
34
m_bender (bender)
35
{}
36
37
void
Magnet::track
(
IParticle
& particle)
const
{
38
39
particle.setBeamCoordinateShift(
this
);
40
41
if
(particle.isOutOfAperture())
return
;
42
43
m_bender
->bend(particle);
44
45
particle.z() =
m_rearFace
;
46
47
if
(this->
isOutOfAperture
(particle)) particle.setOutOfAperture(
true
);
48
}
49
50
bool
Magnet::isOutOfAperture
(
IParticle
& particle)
const
{
51
52
TransversePoint
offCenter = particle.displacement();
53
54
if
(
m_aperType
==
"\"NONE\""
)
return
false
;
55
else
if
(
m_aperType
==
"\"CIRCLE\""
) {
56
57
if
(
m_A1
== 0)
return
false
;
58
59
if
(offCenter.
mag2
() >
m_A1
*
m_A1
) {
60
61
std::ostringstream
ost
;
ost
<<
m_label
<<
" isOutOfAperture "
;
62
63
ost
<<
"radius: "
<< offCenter.
mag2
() <<
" > A1*A1: "
<<
m_A1
*
m_A1
;
64
particle.addMsg(
ost
.str());
65
66
return
true
;
67
}
68
69
return
false
;
70
}
71
else
if
(
m_aperType
==
"\"RECTELLIPSE\""
) {
72
73
double
xx = (
m_A3
) ? offCenter.
x
()/
m_A3
:
throw
std::runtime_error(
"ERROR: m_A3 == 0"
);
74
double
yy
= (
m_A4
) ? offCenter.
y
()/
m_A4
:
throw
std::runtime_error(
"ERROR: m_A4 == 0"
);
75
double
rr
= xx*xx +
yy
*
yy
;
76
77
if
(
rr
> 1) {
78
79
std::ostringstream
ost
;
ost
<<
m_label
<<
" isOutOfAperture "
;
80
81
ost
<<
" x/A3: "
<< xx <<
" y/A4: "
<<
yy
<<
" (Squared sum: "
<<
rr
<<
" > 1)"
;
82
particle.addMsg(
ost
.str());
83
84
return
true
;
85
}
86
87
if
(
m_A1
> 0) {
88
89
if
(std::fabs(offCenter.
x
()) >
m_A1
) {
90
91
std::ostringstream
ost
;
ost
<<
m_label
<<
" isOutOfAperture "
;
92
93
ost
<<
" |x|: "
<< std::fabs(offCenter.
x
()) <<
" > A1: "
<<
m_A1
;
94
particle.addMsg(
ost
.str());
95
96
return
true
;
97
}
98
}
99
100
if
(
m_A2
> 0) {
101
102
if
(std::fabs(offCenter.
y
()) >
m_A2
) {
103
104
std::ostringstream
ost
;
ost
<<
m_label
<<
" isOutOfAperture "
;
105
106
ost
<<
" |y|: "
<< std::fabs(offCenter.
y
()) <<
" > A2: "
<<
m_A2
;
107
particle.addMsg(
ost
.str());
108
109
return
true
;
110
}
111
}
112
113
return
false
;
114
}
115
else
if
(
m_aperType
==
"\"OCTAGON\""
) {
116
117
if
(
m_A1
> 0. ) {
118
if
( std::fabs(offCenter.
x
())>
m_A1
) {
119
120
std::ostringstream
ost
;
ost
<<
m_label
<<
" isOutOfAperture "
;
121
122
ost
<<
" |x|: "
<< std::fabs(offCenter.
x
()) <<
" > A1: "
<<
m_A1
;
123
particle.addMsg(
ost
.str());
124
return
true
;
125
}
126
}
127
if
(
m_A2
> 0. ) {
128
if
( std::fabs(offCenter.
y
())>
m_A2
) {
129
130
std::ostringstream
ost
;
ost
<<
m_label
<<
" isOutOfAperture "
;
131
132
ost
<<
" |y|: "
<< std::fabs(offCenter.
y
()) <<
" > A2: "
<<
m_A2
;
133
particle.addMsg(
ost
.str());
134
return
true
;
135
}
136
}
137
if
(
m_A3
> 0. &&
m_A4
> 0. ) {
138
139
float
B3=
std::tan
(
m_A3
)*
m_A1
;
140
float
B4=
m_A2
/
std::tan
(
m_A4
);
141
float
d
=(
m_A1
-std::fabs(offCenter.
x
()))/(
m_A1
-B4)+(
m_A2
-std::fabs(offCenter.
y
()))/(
m_A2
-B3);
142
143
if
(
d
<1.) {
144
std::ostringstream
ost
;
ost
<<
m_label
<<
" isOutOfAperture "
;
145
146
ost
<<
" x: "
<<offCenter.
x
()<<
" y: "
<<offCenter.
y
()<<
" m_A1 "
<<
m_A1
<<
" m_A2 "
<<
m_A2
<<
" m_A3 "
<<
m_A3
<<
" m_A4 "
<<
m_A4
<<
" d: "
<<
d
;
147
particle.addMsg(
ost
.str() );
148
return
true
;
149
}
150
}
151
152
return
false
;
153
}
154
else
{
155
156
std::stringstream sstr; sstr <<
" Unknown magnet aperture type "
<<
m_aperType
<<
"\n"
;
157
throw
std::runtime_error(sstr.str().c_str());
158
}
159
160
return
false
;
161
}
162
163
std::string
Magnet::str
()
const
{
164
165
std::ostringstream
ost
;
166
167
ost
<<
"m_label "
<<
m_label
<<
"\n"
168
<<
"m_side "
<<
m_side
<<
"\n"
169
<<
"m_frontFace "
<<
m_frontFace
<<
"\n"
170
<<
"m_rearFace "
<<
m_rearFace
<<
"\n"
171
<<
"m_position "
<<
m_position
<<
"\n"
172
<<
"m_aperType "
<<
m_aperType
<<
"\n"
173
<<
"m_A1 "
<<
m_A1
<<
"\n"
174
<<
"m_A2 "
<<
m_A2
<<
"\n"
175
<<
"m_A3 "
<<
m_A3
<<
"\n"
176
<<
"m_A4 "
<<
m_A4
<<
"\n"
;
177
178
return
ost
.str();
179
}
180
181
std::ostream&
operator<<
(std::ostream&
os
,
const
Magnet
&
mag
) {
os
<<
mag
.str();
return
os
; }
182
}
ForwardTracker::Magnet::Magnet
Magnet(double x, double y, double z, double length, const std::string &aperType, double A1, double A2, double A3, double A4, Side side, IBender::ConstPtr_t bender, const std::string &label)
Definition:
ForwardTracker/src/Magnet.cxx:12
ForwardTracker::Magnet::m_frontFace
double m_frontFace
Definition:
ForwardTracker/ForwardTracker/Magnet.h:58
python.trigbs_prescaleL1.ost
ost
Definition:
trigbs_prescaleL1.py:104
PlotCalibFromCool.yy
yy
Definition:
PlotCalibFromCool.py:714
ForwardTracker::TransversePoint::y
double y() const
Definition:
ForwardTracker/ForwardTracker/TransversePoint.h:21
ForwardTracker::Magnet::m_A2
double m_A2
Definition:
ForwardTracker/ForwardTracker/Magnet.h:63
hist_file_dump.d
d
Definition:
hist_file_dump.py:143
ForwardTracker::TransversePoint::mag2
double mag2() const
Definition:
ForwardTracker/ForwardTracker/TransversePoint.h:22
Particle.h
ForwardTracker::Magnet::m_rearFace
double m_rearFace
Definition:
ForwardTracker/ForwardTracker/Magnet.h:59
x
#define x
ForwardTracker::Magnet::m_A1
double m_A1
Definition:
ForwardTracker/ForwardTracker/Magnet.h:62
ForwardTracker::operator<<
std::ostream & operator<<(std::ostream &, const Beamline &)
Definition:
ForwardTracker/src/Beamline.cxx:105
TRT::Hit::side
@ side
Definition:
HitInfo.h:83
TransversePoint.h
z
#define z
ForwardTracker::Magnet
Definition:
ForwardTracker/ForwardTracker/Magnet.h:19
ForwardTracker::Magnet::m_aperType
std::string m_aperType
Definition:
ForwardTracker/ForwardTracker/Magnet.h:61
ForwardTracker::Magnet::m_A4
double m_A4
Definition:
ForwardTracker/ForwardTracker/Magnet.h:65
Magnet.h
Side
Definition:
WaferTree.h:36
ForwardTracker::TransversePoint
Definition:
ForwardTracker/ForwardTracker/TransversePoint.h:13
drawFromPickle.tan
tan
Definition:
drawFromPickle.py:36
ForwardTracker::Magnet::m_bender
IBender::ConstPtr_t m_bender
Definition:
ForwardTracker/ForwardTracker/Magnet.h:66
ForwardTracker::IParticle
Definition:
ForwardDetectors/ForwardTracker/ForwardTracker/IParticle.h:16
ForwardTracker::Magnet::m_label
std::string m_label
Definition:
ForwardTracker/ForwardTracker/Magnet.h:56
ReadFromCoolCompare.os
os
Definition:
ReadFromCoolCompare.py:231
ForwardTracker::label
std::string label(Magnet::Type type)
Definition:
MagnetFactory.cxx:15
ForwardTracker::Magnet::m_position
Point m_position
Definition:
ForwardTracker/ForwardTracker/Magnet.h:60
IBender.h
ForwardTracker::Magnet::m_side
Side m_side
Definition:
ForwardTracker/ForwardTracker/Magnet.h:57
y
#define y
ForwardTracker::TransversePoint::x
double x() const
Definition:
ForwardTracker/ForwardTracker/TransversePoint.h:20
ForwardTracker::Magnet::m_A3
double m_A3
Definition:
ForwardTracker/ForwardTracker/Magnet.h:64
ForwardTracker::IBender::ConstPtr_t
std::shared_ptr< IBender > ConstPtr_t
Definition:
ForwardTracker/ForwardTracker/IBender.h:21
rr
const boost::regex rr(r_r)
ForwardTracker::Magnet::isOutOfAperture
bool isOutOfAperture(IParticle &) const
Definition:
ForwardTracker/src/Magnet.cxx:50
ForwardTracker
Definition:
ForwardTracker/ForwardTracker/Beamline.h:12
length
double length(const pvec &v)
Definition:
FPGATrackSimLLPDoubletHoughTransformTool.cxx:26
mag
Scalar mag() const
mag method
Definition:
AmgMatrixBasePlugin.h:26
ForwardTracker::Magnet::str
std::string str() const
Definition:
ForwardTracker/src/Magnet.cxx:163
ForwardTracker::Magnet::track
void track(IParticle &) const
Definition:
ForwardTracker/src/Magnet.cxx:37
Generated on Fri Apr 25 2025 21:14:24 for ATLAS Offline Software by
1.8.18