ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
InnerDetector
InDetRecTools
SiDetElementsRoadTool_xk
src
SiDetElementsRoadUtils_xk.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
#include "
SiDetElementsRoadUtils_xk.h
"
6
#include <cmath>
7
9
// Output parameters: P[ 0] - radius centre of wafer
10
// P[ 1] - z centre of wafer
11
// P[ 2] - azimuthal angle centra of wifer
12
// P[ 3] - min. distance to surface
13
// P[ 4] - azimythal angle normal to surface
14
// P[ 5] - sin(P[4])
15
// P[ 6] - cos(P[4])
16
// P[ 7] - sin(Polar angle)
17
// P[ 8] - cos(Polar abgle)
18
// P[ 9] - min. radius
19
// P[10] - max. radius
20
// P[11] - min. z
21
// P[12] - max z
22
// P[13] - min. azimythal angle
23
// P[14] - max. azimuthal angle
24
// P[15] - tilt angle
25
// P[16] - min. dist to surface in XY-plane
26
// P[17] - Tilt angle
27
// P[18] - first local coordinate of wafer
28
// P[19] - second local coordinate of wafer
29
// P[20],P[21] - vector to -F boundary
30
// P[22],P[23] - vector to +ZR boundary
31
// P[24],P[25] - vector to +F boundary
32
// P[26],P[27] - vector to -ZR boundary
33
// P[28] - thikness of the detector element
34
// P[29] - Ax of Phi exis
35
// P[30] - Ay of Phi exis
36
// P[31] - Ax of Eta exis
37
// P[32] - Ay of Eta exis
39
40
namespace
InDet
{
41
namespace
SiDetElementsRoadUtils_xk
{
42
void
detElementInformation
(
const
InDetDD::SiDetectorElement
& Si,
double
*
P
)
43
{
44
const
double
pi2=2.*
M_PI
,
pi
=
M_PI
;
45
46
double
Sl = .5*Si.
design
().
length
();
47
double
Swmax = .5*Si.
design
().
maxWidth
();
48
double
Swmin = .5*Si.
design
().
minWidth
();
49
50
// Thickness of the waver
51
//
52
P
[28] = Si.
design
().
thickness
();
53
Amg::Vector3D
C
= Si.
center
();
double
x0=
C
.x(), y0=
C
.y(), z0=
C
.z();
54
Amg::Vector3D
AT = Si.
normal
();
55
Amg::Vector3D
AF = Si.
phiAxis
();
56
Amg::Vector3D
AE = Si.
etaAxis
();
57
58
double
A
[3]={AT.x(),AT.y(),AT.z()};
59
60
P
[ 0] = sqrt(x0*x0+y0*y0);
61
P
[ 1] = z0;
62
P
[ 2] = atan2(y0,x0);
63
P
[ 3] =
A
[0]*x0+
A
[1]*y0+
A
[2]*z0;
64
if
(
P
[3]<0.) {
P
[3]*=-1.;
A
[0]*=-1.;
A
[1]*=-1.;
A
[2]*=-1.;}
65
P
[ 7] = sqrt(
A
[0]*
A
[0]+
A
[1]*
A
[1]);
66
67
if
(
P
[7] >.000001)
P
[4]=atan2(
A
[1],
A
[0]);
else
P
[4]=
P
[2];
68
sincos(
P
[4],&
P
[5],&
P
[6]);
69
P
[ 8] =
A
[2];
70
71
if
( fabs(
P
[7]) <= .000001) {
72
73
P
[3] = fabs(
P
[1]);
74
if
(
P
[8] > 0.)
P
[8] = 1.;
else
P
[8] = -1.;
75
P
[7] = 0.;
76
}
77
78
double
x
[4],
y
[4],
z
[4];
79
80
x
[0] = x0+AF.x()*Swmax+AE.x()*Sl;
81
y
[0] = y0+AF.y()*Swmax+AE.y()*Sl;
82
z
[0] = z0+AF.z()*Swmax+AE.z()*Sl;
83
84
x
[1] = x0+AF.x()*Swmin-AE.x()*Sl;
85
y
[1] = y0+AF.y()*Swmin-AE.y()*Sl;
86
z
[1] = z0+AF.z()*Swmin-AE.z()*Sl;
87
88
x
[2] = x0-AF.x()*Swmin-AE.x()*Sl;
89
y
[2] = y0-AF.y()*Swmin-AE.y()*Sl;
90
z
[2] = z0-AF.z()*Swmin-AE.z()*Sl;
91
92
x
[3] = x0-AF.x()*Swmax+AE.x()*Sl;
93
y
[3] = y0-AF.y()*Swmax+AE.y()*Sl;
94
z
[3] = z0-AF.z()*Swmax+AE.z()*Sl;
95
96
double
rmin= 10000., rmax=-10000.;
97
double
zmin= 10000., zmax=-10000.;
98
double
fmin= 10000., fmax=-10000.;
99
for
(
int
i=0; i!=4; ++i) {
100
double
r
= sqrt(
x
[i]*
x
[i]+
y
[i]*
y
[i]);
101
double
f = atan2(
y
[i],
x
[i])-
P
[2];
if
(f<-
pi
) f+=pi2;
else
if
(f>
pi
) f-=pi2;
102
double
zf=
z
[i];
103
if
(
r
<rmin) rmin=
r
;
104
if
(
r
>rmax) rmax=
r
;
105
if
(zf<zmin) zmin=zf;
106
if
(zf>zmax) zmax=zf;
107
if
(f <fmin) fmin= f;
108
if
(f >fmax) fmax= f;
109
}
110
P
[ 9] = rmin;
111
P
[10] = rmax;
112
P
[11] = zmin;
113
P
[12] = zmax;
114
P
[13] =
P
[2]+fmin;
115
P
[14] =
P
[2]+fmax;
116
P
[15] =
P
[4]-
P
[2];
if
(
P
[15]<-
pi
)
P
[15]+=pi2;
else
if
(
P
[15]>
pi
)
P
[15]-=pi2;
117
P
[16] =
A
[0]*x0+
A
[1]*y0;
118
P
[17] = atan2(AE.y(),AE.x());
119
P
[17] =
P
[17]-
P
[2];
if
(
P
[17]<-
pi
)
P
[17]+=pi2;
else
if
(
P
[17]>
pi
)
P
[17]-=pi2;
120
121
// Calculation shape parameters
122
//
123
P
[18] = y0*
P
[6]-x0*
P
[5];
// F center
124
P
[19] =
P
[8]*(x0*
P
[6]+y0*
P
[5])-
P
[7]*z0;
// ZR center
125
P
[20] = +10000.;
// -F
126
P
[21] = 0. ;
//
127
P
[22] = 0. ;
// +ZR
128
P
[23] = -10000.;
//
129
P
[24] = -10000.;
// +F
130
P
[25] = 0. ;
//
131
P
[26] = 0. ;
// -ZR
132
P
[27] = +10000.;
//
133
//
134
for
(
int
i=0; i!=4; ++i) {
135
136
int
k1 = i;
137
int
k2 = i+1;
if
(k2>3) k2=0;
138
double
x1 =
y
[k1]*
P
[6]-
x
[k1]*
P
[5] -
P
[18];
139
double
y1 =
P
[8]*(
x
[k1]*
P
[6]+
y
[k1]*
P
[5])-
P
[7]*
z
[k1]-
P
[19];
140
double
x2 =
y
[k2]*
P
[6]-
x
[k2]*
P
[5] -
P
[18];
141
double
y2 =
P
[8]*(
x
[k2]*
P
[6]+
y
[k2]*
P
[5])-
P
[7]*
z
[k2]-
P
[19];
142
double
d = (x2-x1)*(x2-x1)+(y2-y1)*(y2-y1);
143
double
ax =-(y2-y1)*(y1*x2-x1*y2)/d;
144
double
ay = (x2-x1)*(y1*x2-x1*y2)/d;
145
if
(ax<
P
[20]) {
P
[20]=ax;
P
[21]=ay;}
146
if
(ax>
P
[24]) {
P
[24]=ax;
P
[25]=ay;}
147
if
(ay<
P
[27]) {
P
[26]=ax;
P
[27]=ay;}
148
if
(ay>
P
[23]) {
P
[22]=ax;
P
[23]=ay;}
149
}
150
151
// Directions Phi and Eta in local system coordinates
152
//
153
P
[29] = AF.y()*
P
[6]-AF.x()*
P
[5];
154
P
[30] =
P
[8]*(AF.x()*
P
[6]+AF.y()*
P
[5])-
P
[7]*AF.z();
155
P
[31] = AE.y()*
P
[6]-AE.x()*
P
[5];
156
P
[32] =
P
[8]*(AE.x()*
P
[6]+AE.y()*
P
[5])-
P
[7]*AE.z();
157
}
158
159
}
160
}
M_PI
#define M_PI
Definition
ActiveFraction.h:14
P
static Double_t P(Double_t *tt, Double_t *par)
Definition
LArPhysWaveHECTool.cxx:280
SiDetElementsRoadUtils_xk.h
pi
#define pi
Definition
TileMuonFitter.cxx:65
y
#define y
x
#define x
z
#define z
InDetDD::DetectorDesign::thickness
double thickness() const
Method which returns thickness of the silicon wafer.
Definition
DetectorDesign.h:271
InDetDD::DetectorDesign::maxWidth
virtual double maxWidth() const =0
Method to calculate maximum width of a module.
InDetDD::DetectorDesign::minWidth
virtual double minWidth() const =0
Method to calculate minimum width of a module.
InDetDD::DetectorDesign::length
virtual double length() const =0
Method to calculate length of a module.
InDetDD::SiDetectorElement
Class to hold geometrical description of a silicon detector element.
Definition
SiDetectorElement.h:109
InDetDD::SiDetectorElement::design
virtual const SiDetectorDesign & design() const override final
access to the local description (inline):
InDetDD::SolidStateDetectorElementBase::etaAxis
const Amg::Vector3D & etaAxis() const
Definition
SolidStateDetectorElementBase.cxx:88
InDetDD::SolidStateDetectorElementBase::normal
virtual const Amg::Vector3D & normal() const override final
Get reconstruction local normal axes in global frame.
InDetDD::SolidStateDetectorElementBase::center
virtual const Amg::Vector3D & center() const override final
Center in global coordinates.
InDetDD::SolidStateDetectorElementBase::phiAxis
const Amg::Vector3D & phiAxis() const
Definition
SolidStateDetectorElementBase.cxx:74
r
int r
Definition
globals.cxx:22
C
struct color C
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition
GeoPrimitives.h:47
InDet::SiDetElementsRoadUtils_xk
Definition
SiDetElementsRoadUtils_xk.cxx:41
InDet::SiDetElementsRoadUtils_xk::detElementInformation
void detElementInformation(const InDetDD::SiDetectorElement &Si, double *P)
Definition
SiDetElementsRoadUtils_xk.cxx:42
InDet
Primary Vertex Finder.
Definition
VP1ErrorUtils.h:36
A
hold the test vectors and ease the comparison
Generated on
for ATLAS Offline Software by
1.17.0