33 return asSMatrix<6,6>(this->
getDerivative(objectRot, composeRot, composePos - objectPos));
48 diffVec(1) = posVec.
x();
49 diffVec(2) = posVec.
y();
50 diffVec(3) = posVec.
z();
62 derivative[0][0] = derivAA[0][0];
63 derivative[0][1] = derivAA[0][1];
64 derivative[0][2] = derivAA[0][2];
65 derivative[0][3] = derivAB[0][0];
66 derivative[0][4] = derivAB[0][1];
67 derivative[0][5] = derivAB[0][2];
68 derivative[1][0] = derivAA[1][0];
69 derivative[1][1] = derivAA[1][1];
70 derivative[1][2] = derivAA[1][2];
71 derivative[1][3] = derivAB[1][0];
72 derivative[1][4] = derivAB[1][1];
73 derivative[1][5] = derivAB[1][2];
74 derivative[2][0] = derivAA[2][0];
75 derivative[2][1] = derivAA[2][1];
76 derivative[2][2] = derivAA[2][2];
77 derivative[2][3] = derivAB[2][0];
78 derivative[2][4] = derivAB[2][1];
79 derivative[2][5] = derivAB[2][2];
83 derivative[3][3] = derivBB[0][0];
84 derivative[3][4] = derivBB[0][1];
85 derivative[3][5] = derivBB[0][2];
89 derivative[4][3] = derivBB[1][0];
90 derivative[4][4] = derivBB[1][1];
91 derivative[4][5] = derivBB[1][2];
95 derivative[5][3] = derivBB[2][0];
96 derivative[5][4] = derivBB[2][1];
97 derivative[5][5] = derivBB[2][2];
109 return RotDet * RotRot.T();
128 RotDa[1][2] = 1; RotDa[2][1] = -1;
129 RotDb[0][2] = -1; RotDb[2][0] = 1;
130 RotDc[0][1] = 1; RotDc[1][0] = -1;
132 dEulerA = RotDet*( RotRot.T()*RotDa*RotRot*
S );
133 dEulerB = RotDet*( RotRot.T()*RotDb*RotRot*
S );
134 dEulerC = RotDet*( RotRot.T()*RotDc*RotRot*
S );
137 eulerDeriv[0][0] = dEulerA[0];
138 eulerDeriv[1][0] = dEulerA[1];
139 eulerDeriv[2][0] = dEulerA[2];
140 eulerDeriv[0][1] = dEulerB[0];
141 eulerDeriv[1][1] = dEulerB[1];
142 eulerDeriv[2][1] = dEulerB[2];
143 eulerDeriv[0][2] = dEulerC[0];
144 eulerDeriv[1][2] = dEulerC[1];
145 eulerDeriv[2][2] = dEulerC[2];
165 RotDa[1][2] = 1; RotDa[2][1] = -1;
166 RotDb[0][2] = -1; RotDb[2][0] = 1;
167 RotDc[0][1] = 1; RotDc[1][0] = -1;
175 eulerDeriv[0][0] = dEulerA[0];
176 eulerDeriv[1][0] = dEulerA[1];
177 eulerDeriv[2][0] = dEulerA[2];
178 eulerDeriv[0][1] = dEulerB[0];
179 eulerDeriv[1][1] = dEulerB[1];
180 eulerDeriv[2][1] = dEulerB[2];
181 eulerDeriv[0][2] = dEulerC[0];
182 eulerDeriv[1][2] = dEulerC[1];
183 eulerDeriv[2][2] = dEulerC[2];
208 eulerAngles = eulerAB*rotDelta*aB + eulerC*rotDelta*
C;
Derivative< X, A >::type derivative(const A &_)
ROOT::Math::SMatrix< double, 6, 6, ROOT::Math::MatRepStd< double, 6, 6 > > AlgebraicMatrix66
const RotationType & globalRotation() const
Return the global orientation of the object.
static AlgebraicMatrix transform(const align::RotationType &)
Helper to transform from RotationType to AlgebraicMatrix.
AlgebraicMatrix66 getDerivative(const align::RotationType &objectRot, const align::RotationType &composeRot, const align::GlobalPoint &objectPos, const align::GlobalPoint &composePos) const
CLHEP::HepMatrix AlgebraicMatrix
AlgebraicMatrix frameToFrameDerivative(const Alignable *object, const Alignable *composedObject) const
CLHEP::HepVector AlgebraicVector
AlgebraicMatrix derivativeRotRot(const AlgebraicMatrix &RotDet, const AlgebraicMatrix &RotRot) const
Calculates the derivative DRot/DRot.
double S(const TLorentzVector &, const TLorentzVector &)
AlgebraicMatrix derivativePosRot(const AlgebraicMatrix &RotDet, const AlgebraicMatrix &RotRot, const AlgebraicVector &S) const
Calculates the derivative DPos/DRot.
const PositionType & globalPosition() const
Return the global position of the object.
AlgebraicMatrix derivativePosPos(const AlgebraicMatrix &RotDet, const AlgebraicMatrix &RotRot) const
Calculates the derivative DPos/DPos.
AlgebraicVector linearEulerAngles(const AlgebraicMatrix &rotDelta) const
Gets linear approximated euler Angles.