Alignment
CommonAlignmentParametrization
src
FrameToFrameDerivative.cc
Go to the documentation of this file.
1
7
#include "
Alignment/CommonAlignmentParametrization/interface/FrameToFrameDerivative.h
"
8
9
#include "
Alignment/CommonAlignment/interface/Alignable.h
"
10
11
// already in header: #include
12
// "DataFormats/Math/interface/AlgebraicROOTObjects.h"
13
#include "
DataFormats/CLHEP/interface/Migration.h
"
14
15
//__________________________________________________________________________________________________
16
AlgebraicMatrix
FrameToFrameDerivative::frameToFrameDerivative
(
const
Alignable
*
object
,
17
const
Alignable
*composedObject)
const
{
18
return
getDerivative
(
object
->globalRotation(),
19
composedObject->
globalRotation
(),
20
composedObject->
globalPosition
() -
object
->globalPosition());
21
}
22
23
//__________________________________________________________________________________________________
24
AlgebraicMatrix66
FrameToFrameDerivative::getDerivative
(
const
align::RotationType
&objectRot,
25
const
align::RotationType
&composeRot,
26
const
align::GlobalPoint
&objectPos,
27
const
align::GlobalPoint
&composePos)
const
{
28
return
asSMatrix<6, 6>(this->
getDerivative
(objectRot, composeRot, composePos - objectPos));
29
}
30
31
//__________________________________________________________________________________________________
32
AlgebraicMatrix
FrameToFrameDerivative::getDerivative
(
const
align::RotationType
&objectRot,
33
const
align::RotationType
&composeRot,
34
const
align::GlobalVector
&posVec)
const
{
35
AlgebraicMatrix
rotDet =
transform
(objectRot);
36
AlgebraicMatrix
rotCompO =
transform
(composeRot);
37
38
AlgebraicVector
diffVec(3);
39
40
diffVec(1) = posVec.
x
();
41
diffVec(2) = posVec.
y
();
42
diffVec(3) = posVec.
z
();
43
44
AlgebraicMatrix
derivative
(6, 6);
45
46
AlgebraicMatrix
derivAA(3, 3);
47
AlgebraicMatrix
derivAB(3, 3);
48
AlgebraicMatrix
derivBB(3, 3);
49
50
derivAA =
derivativePosPos
(rotDet, rotCompO);
51
derivAB =
derivativePosRot
(rotDet, rotCompO, diffVec);
52
derivBB =
derivativeRotRot
(rotDet, rotCompO);
53
54
derivative
[0][0] = derivAA[0][0];
55
derivative
[0][1] = derivAA[0][1];
56
derivative
[0][2] = derivAA[0][2];
57
derivative
[0][3] = derivAB[0][0];
58
derivative
[0][4] = derivAB[0][1];
59
derivative
[0][5] = derivAB[0][2];
60
derivative
[1][0] = derivAA[1][0];
61
derivative
[1][1] = derivAA[1][1];
62
derivative
[1][2] = derivAA[1][2];
63
derivative
[1][3] = derivAB[1][0];
64
derivative
[1][4] = derivAB[1][1];
65
derivative
[1][5] = derivAB[1][2];
66
derivative
[2][0] = derivAA[2][0];
67
derivative
[2][1] = derivAA[2][1];
68
derivative
[2][2] = derivAA[2][2];
69
derivative
[2][3] = derivAB[2][0];
70
derivative
[2][4] = derivAB[2][1];
71
derivative
[2][5] = derivAB[2][2];
72
derivative
[3][0] = 0;
73
derivative
[3][1] = 0;
74
derivative
[3][2] = 0;
75
derivative
[3][3] = derivBB[0][0];
76
derivative
[3][4] = derivBB[0][1];
77
derivative
[3][5] = derivBB[0][2];
78
derivative
[4][0] = 0;
79
derivative
[4][1] = 0;
80
derivative
[4][2] = 0;
81
derivative
[4][3] = derivBB[1][0];
82
derivative
[4][4] = derivBB[1][1];
83
derivative
[4][5] = derivBB[1][2];
84
derivative
[5][0] = 0;
85
derivative
[5][1] = 0;
86
derivative
[5][2] = 0;
87
derivative
[5][3] = derivBB[2][0];
88
derivative
[5][4] = derivBB[2][1];
89
derivative
[5][5] = derivBB[2][2];
90
91
return
derivative
;
92
}
93
94
//__________________________________________________________________________________________________
95
AlgebraicMatrix
FrameToFrameDerivative::derivativePosPos
(
const
AlgebraicMatrix
&RotDet,
96
const
AlgebraicMatrix
&RotRot)
const
{
97
return
RotDet * RotRot.T();
98
}
99
100
//__________________________________________________________________________________________________
101
AlgebraicMatrix
FrameToFrameDerivative::derivativePosRot
(
const
AlgebraicMatrix
&RotDet,
102
const
AlgebraicMatrix
&RotRot,
103
const
AlgebraicVector
&
S
)
const
{
104
AlgebraicVector
dEulerA(3);
105
AlgebraicVector
dEulerB(3);
106
AlgebraicVector
dEulerC(3);
107
AlgebraicMatrix
RotDa(3, 3);
108
AlgebraicMatrix
RotDb(3, 3);
109
AlgebraicMatrix
RotDc(3, 3);
110
111
RotDa[1][2] = 1;
112
RotDa[2][1] = -1;
113
RotDb[0][2] = -1;
114
RotDb[2][0] = 1;
// New beta sign
115
RotDc[0][1] = 1;
116
RotDc[1][0] = -1;
117
118
dEulerA = RotDet * (RotRot.T() * RotDa * RotRot *
S
);
119
dEulerB = RotDet * (RotRot.T() * RotDb * RotRot *
S
);
120
dEulerC = RotDet * (RotRot.T() * RotDc * RotRot *
S
);
121
122
AlgebraicMatrix
eulerDeriv(3, 3);
123
eulerDeriv[0][0] = dEulerA[0];
124
eulerDeriv[1][0] = dEulerA[1];
125
eulerDeriv[2][0] = dEulerA[2];
126
eulerDeriv[0][1] = dEulerB[0];
127
eulerDeriv[1][1] = dEulerB[1];
128
eulerDeriv[2][1] = dEulerB[2];
129
eulerDeriv[0][2] = dEulerC[0];
130
eulerDeriv[1][2] = dEulerC[1];
131
eulerDeriv[2][2] = dEulerC[2];
132
133
return
eulerDeriv;
134
}
135
136
//__________________________________________________________________________________________________
137
AlgebraicMatrix
FrameToFrameDerivative::derivativeRotRot
(
const
AlgebraicMatrix
&RotDet,
138
const
AlgebraicMatrix
&RotRot)
const
{
139
AlgebraicVector
dEulerA(3);
140
AlgebraicVector
dEulerB(3);
141
AlgebraicVector
dEulerC(3);
142
AlgebraicMatrix
RotDa(3, 3);
143
AlgebraicMatrix
RotDb(3, 3);
144
AlgebraicMatrix
RotDc(3, 3);
145
146
RotDa[1][2] = 1;
147
RotDa[2][1] = -1;
148
RotDb[0][2] = -1;
149
RotDb[2][0] = 1;
// New beta sign
150
RotDc[0][1] = 1;
151
RotDc[1][0] = -1;
152
153
dEulerA =
linearEulerAngles
(RotDet * RotRot.T() * RotDa * RotRot * RotDet.T());
154
dEulerB =
linearEulerAngles
(RotDet * RotRot.T() * RotDb * RotRot * RotDet.T());
155
dEulerC =
linearEulerAngles
(RotDet * RotRot.T() * RotDc * RotRot * RotDet.T());
156
157
AlgebraicMatrix
eulerDeriv(3, 3);
158
159
eulerDeriv[0][0] = dEulerA[0];
160
eulerDeriv[1][0] = dEulerA[1];
161
eulerDeriv[2][0] = dEulerA[2];
162
eulerDeriv[0][1] = dEulerB[0];
163
eulerDeriv[1][1] = dEulerB[1];
164
eulerDeriv[2][1] = dEulerB[2];
165
eulerDeriv[0][2] = dEulerC[0];
166
eulerDeriv[1][2] = dEulerC[1];
167
eulerDeriv[2][2] = dEulerC[2];
168
169
return
eulerDeriv;
170
}
171
172
//__________________________________________________________________________________________________
173
AlgebraicVector
FrameToFrameDerivative::linearEulerAngles
(
const
AlgebraicMatrix
&rotDelta)
const
{
174
AlgebraicMatrix
eulerAB(3, 3);
175
AlgebraicVector
aB(3);
176
eulerAB[0][1] = 1;
177
eulerAB[1][0] = -1;
// New beta sign
178
aB[2] = 1;
179
180
AlgebraicMatrix
eulerC(3, 3);
181
AlgebraicVector
C
(3);
182
eulerC[2][0] = 1;
183
C
[1] = 1;
184
185
AlgebraicVector
eulerAngles(3);
186
eulerAngles = eulerAB * rotDelta * aB + eulerC * rotDelta *
C
;
187
return
eulerAngles;
188
}
Vector3DBase< Scalar, GlobalTag >
TkRotation< Scalar >
resolutioncreator_cfi.object
object
Definition:
resolutioncreator_cfi.py:4
PV3DBase::x
T x() const
Definition:
PV3DBase.h:59
FrameToFrameDerivative::transform
static AlgebraicMatrix transform(const align::RotationType &)
Helper to transform from RotationType to AlgebraicMatrix.
Definition:
FrameToFrameDerivative.h:72
FrameToFrameDerivative.h
Alignable
Definition:
Alignable.h:27
funct::derivative
Derivative< X, A >::type derivative(const A &_)
Definition:
Derivative.h:18
FrameToFrameDerivative::getDerivative
AlgebraicMatrix66 getDerivative(const align::RotationType &objectRot, const align::RotationType &composeRot, const align::GlobalPoint &objectPos, const align::GlobalPoint &composePos) const
Definition:
FrameToFrameDerivative.cc:24
PV3DBase::z
T z() const
Definition:
PV3DBase.h:61
FrameToFrameDerivative::frameToFrameDerivative
AlgebraicMatrix frameToFrameDerivative(const Alignable *object, const Alignable *composedObject) const
Definition:
FrameToFrameDerivative.cc:16
FrameToFrameDerivative::derivativeRotRot
AlgebraicMatrix derivativeRotRot(const AlgebraicMatrix &RotDet, const AlgebraicMatrix &RotRot) const
Calculates the derivative DRot/DRot.
Definition:
FrameToFrameDerivative.cc:137
FrameToFrameDerivative::linearEulerAngles
AlgebraicVector linearEulerAngles(const AlgebraicMatrix &rotDelta) const
Gets linear approximated euler Angles.
Definition:
FrameToFrameDerivative.cc:173
AlgebraicVector
CLHEP::HepVector AlgebraicVector
Definition:
AlgebraicObjects.h:13
Point3DBase< Scalar, GlobalTag >
FrameToFrameDerivative::derivativePosRot
AlgebraicMatrix derivativePosRot(const AlgebraicMatrix &RotDet, const AlgebraicMatrix &RotRot, const AlgebraicVector &S) const
Calculates the derivative DPos/DRot.
Definition:
FrameToFrameDerivative.cc:101
S
double S(const TLorentzVector &, const TLorentzVector &)
Definition:
Particle.cc:97
FrameToFrameDerivative::derivativePosPos
AlgebraicMatrix derivativePosPos(const AlgebraicMatrix &RotDet, const AlgebraicMatrix &RotRot) const
Calculates the derivative DPos/DPos.
Definition:
FrameToFrameDerivative.cc:95
PV3DBase::y
T y() const
Definition:
PV3DBase.h:60
Migration.h
AlgebraicMatrix
CLHEP::HepMatrix AlgebraicMatrix
Definition:
AlgebraicObjects.h:14
AlgebraicMatrix66
ROOT::Math::SMatrix< double, 6, 6, ROOT::Math::MatRepStd< double, 6, 6 > > AlgebraicMatrix66
Definition:
AlgebraicROOTObjects.h:62
gen::C
C
Definition:
PomwigHadronizer.cc:78
Alignable.h
S
Definition:
CSCDBL1TPParametersExtended.h:16
Alignable::globalPosition
const PositionType & globalPosition() const
Return the global position of the object.
Definition:
Alignable.h:135
Alignable::globalRotation
const RotationType & globalRotation() const
Return the global orientation of the object.
Definition:
Alignable.h:138
Generated for CMSSW Reference Manual by
1.8.16