CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions | Private Member Functions | Static Private Member Functions
FrameToFrameDerivative Class Reference

#include <FrameToFrameDerivative.h>

Public Member Functions

AlgebraicMatrix frameToFrameDerivative (const Alignable *object, const Alignable *composedObject) const
 Return the derivative DeltaFrame(object)/DeltaFrame(composedobject) More...
 
AlgebraicMatrix66 getDerivative (const align::RotationType &objectRot, const align::RotationType &composeRot, const align::GlobalPoint &objectPos, const align::GlobalPoint &composePos) const
 

Private Member Functions

AlgebraicMatrix derivativePosPos (const AlgebraicMatrix &RotDet, const AlgebraicMatrix &RotRot) const
 Calculates the derivative DPos/DPos. More...
 
AlgebraicMatrix derivativePosRot (const AlgebraicMatrix &RotDet, const AlgebraicMatrix &RotRot, const AlgebraicVector &S) const
 Calculates the derivative DPos/DRot. More...
 
AlgebraicMatrix derivativeRotRot (const AlgebraicMatrix &RotDet, const AlgebraicMatrix &RotRot) const
 Calculates the derivative DRot/DRot. More...
 
AlgebraicMatrix getDerivative (const align::RotationType &objectRot, const align::RotationType &composeRot, const align::GlobalVector &posVec) const
 Calculates derivatives using the orientation Matrixes and the origin difference vector. More...
 
AlgebraicVector linearEulerAngles (const AlgebraicMatrix &rotDelta) const
 Gets linear approximated euler Angles. More...
 

Static Private Member Functions

static AlgebraicMatrix transform (const align::RotationType &)
 Helper to transform from RotationType to AlgebraicMatrix. More...
 

Detailed Description

class for calculating derivatives between different frames

Date:
2010/12/14 01:02:34
Revision:
1.7

(last update by

Author:
flucke

)

Definition at line 17 of file FrameToFrameDerivative.h.

Member Function Documentation

AlgebraicMatrix FrameToFrameDerivative::derivativePosPos ( const AlgebraicMatrix RotDet,
const AlgebraicMatrix RotRot 
) const
private

Calculates the derivative DPos/DPos.

Definition at line 106 of file FrameToFrameDerivative.cc.

Referenced by getDerivative().

108 {
109 
110  return RotDet * RotRot.T();
111 
112 }
AlgebraicMatrix FrameToFrameDerivative::derivativePosRot ( const AlgebraicMatrix RotDet,
const AlgebraicMatrix RotRot,
const AlgebraicVector S 
) const
private

Calculates the derivative DPos/DRot.

Definition at line 117 of file FrameToFrameDerivative.cc.

Referenced by getDerivative().

120 {
121 
122  AlgebraicVector dEulerA(3);
123  AlgebraicVector dEulerB(3);
124  AlgebraicVector dEulerC(3);
125  AlgebraicMatrix RotDa(3,3);
126  AlgebraicMatrix RotDb(3,3);
127  AlgebraicMatrix RotDc(3,3);
128 
129  RotDa[1][2] = 1; RotDa[2][1] = -1;
130  RotDb[0][2] = -1; RotDb[2][0] = 1; // New beta sign
131  RotDc[0][1] = 1; RotDc[1][0] = -1;
132 
133  dEulerA = RotDet*( RotRot.T()*RotDa*RotRot*S );
134  dEulerB = RotDet*( RotRot.T()*RotDb*RotRot*S );
135  dEulerC = RotDet*( RotRot.T()*RotDc*RotRot*S );
136 
137  AlgebraicMatrix eulerDeriv(3,3);
138  eulerDeriv[0][0] = dEulerA[0];
139  eulerDeriv[1][0] = dEulerA[1];
140  eulerDeriv[2][0] = dEulerA[2];
141  eulerDeriv[0][1] = dEulerB[0];
142  eulerDeriv[1][1] = dEulerB[1];
143  eulerDeriv[2][1] = dEulerB[2];
144  eulerDeriv[0][2] = dEulerC[0];
145  eulerDeriv[1][2] = dEulerC[1];
146  eulerDeriv[2][2] = dEulerC[2];
147 
148  return eulerDeriv;
149 
150 }
CLHEP::HepMatrix AlgebraicMatrix
CLHEP::HepVector AlgebraicVector
AlgebraicMatrix FrameToFrameDerivative::derivativeRotRot ( const AlgebraicMatrix RotDet,
const AlgebraicMatrix RotRot 
) const
private

Calculates the derivative DRot/DRot.

Definition at line 155 of file FrameToFrameDerivative.cc.

References linearEulerAngles().

Referenced by getDerivative().

157 {
158 
159  AlgebraicVector dEulerA(3);
160  AlgebraicVector dEulerB(3);
161  AlgebraicVector dEulerC(3);
162  AlgebraicMatrix RotDa(3,3);
163  AlgebraicMatrix RotDb(3,3);
164  AlgebraicMatrix RotDc(3,3);
165 
166  RotDa[1][2] = 1; RotDa[2][1] = -1;
167  RotDb[0][2] = -1; RotDb[2][0] = 1; // New beta sign
168  RotDc[0][1] = 1; RotDc[1][0] = -1;
169 
170  dEulerA = linearEulerAngles( RotDet*RotRot.T()*RotDa*RotRot*RotDet.T() );
171  dEulerB = linearEulerAngles( RotDet*RotRot.T()*RotDb*RotRot*RotDet.T() );
172  dEulerC = linearEulerAngles( RotDet*RotRot.T()*RotDc*RotRot*RotDet.T() );
173 
174  AlgebraicMatrix eulerDeriv(3,3);
175 
176  eulerDeriv[0][0] = dEulerA[0];
177  eulerDeriv[1][0] = dEulerA[1];
178  eulerDeriv[2][0] = dEulerA[2];
179  eulerDeriv[0][1] = dEulerB[0];
180  eulerDeriv[1][1] = dEulerB[1];
181  eulerDeriv[2][1] = dEulerB[2];
182  eulerDeriv[0][2] = dEulerC[0];
183  eulerDeriv[1][2] = dEulerC[1];
184  eulerDeriv[2][2] = dEulerC[2];
185 
186  return eulerDeriv;
187 
188 }
CLHEP::HepMatrix AlgebraicMatrix
CLHEP::HepVector AlgebraicVector
AlgebraicVector linearEulerAngles(const AlgebraicMatrix &rotDelta) const
Gets linear approximated euler Angles.
AlgebraicMatrix FrameToFrameDerivative::frameToFrameDerivative ( const Alignable object,
const Alignable composedObject 
) const

Return the derivative DeltaFrame(object)/DeltaFrame(composedobject)

Definition at line 16 of file FrameToFrameDerivative.cc.

References getDerivative(), Alignable::globalPosition(), and Alignable::globalRotation().

Referenced by RigidBodyAlignmentParameters4D::derivatives(), BeamSpotAlignmentParameters::derivatives(), RigidBodyAlignmentParameters::derivatives(), MillePedeMonitor::fillFrameToFrame(), ParametersToParametersDerivatives::initBowedRigid(), and ParametersToParametersDerivatives::initRigidRigid().

18 {
19 
20  return getDerivative( object->globalRotation(),
21  composedObject->globalRotation(),
22  composedObject->globalPosition() - object->globalPosition() );
23 
24 }
const RotationType & globalRotation() const
Return the global orientation of the object.
Definition: Alignable.h:132
AlgebraicMatrix66 getDerivative(const align::RotationType &objectRot, const align::RotationType &composeRot, const align::GlobalPoint &objectPos, const align::GlobalPoint &composePos) const
const PositionType & globalPosition() const
Return the global position of the object.
Definition: Alignable.h:129
AlgebraicMatrix66 FrameToFrameDerivative::getDerivative ( const align::RotationType objectRot,
const align::RotationType composeRot,
const align::GlobalPoint objectPos,
const align::GlobalPoint composePos 
) const

Calculates derivatives DeltaFrame(object)/DeltaFrame(composedobject) using their positions and orientations. As a new method it gets a new interface avoiding CLHEP that should anyway be replaced by SMatrix at some point...

Definition at line 28 of file FrameToFrameDerivative.cc.

Referenced by frameToFrameDerivative().

32 {
33  return asSMatrix<6,6>(this->getDerivative(objectRot, composeRot, composePos - objectPos));
34 }
AlgebraicMatrix66 getDerivative(const align::RotationType &objectRot, const align::RotationType &composeRot, const align::GlobalPoint &objectPos, const align::GlobalPoint &composePos) const
AlgebraicMatrix FrameToFrameDerivative::getDerivative ( const align::RotationType objectRot,
const align::RotationType composeRot,
const align::GlobalVector posVec 
) const
private

Calculates derivatives using the orientation Matrixes and the origin difference vector.

Definition at line 38 of file FrameToFrameDerivative.cc.

References funct::derivative(), derivativePosPos(), derivativePosRot(), derivativeRotRot(), transform(), PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

41 {
42 
43  AlgebraicMatrix rotDet = transform(objectRot);
44  AlgebraicMatrix rotCompO = transform(composeRot);
45 
46  AlgebraicVector diffVec(3);
47 
48  diffVec(1) = posVec.x();
49  diffVec(2) = posVec.y();
50  diffVec(3) = posVec.z();
51 
53 
54  AlgebraicMatrix derivAA(3,3);
55  AlgebraicMatrix derivAB(3,3);
56  AlgebraicMatrix derivBB(3,3);
57 
58  derivAA = derivativePosPos( rotDet, rotCompO );
59  derivAB = derivativePosRot( rotDet, rotCompO, diffVec );
60  derivBB = derivativeRotRot( rotDet, rotCompO );
61 
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];
80  derivative[3][0] = 0;
81  derivative[3][1] = 0;
82  derivative[3][2] = 0;
83  derivative[3][3] = derivBB[0][0];
84  derivative[3][4] = derivBB[0][1];
85  derivative[3][5] = derivBB[0][2];
86  derivative[4][0] = 0;
87  derivative[4][1] = 0;
88  derivative[4][2] = 0;
89  derivative[4][3] = derivBB[1][0];
90  derivative[4][4] = derivBB[1][1];
91  derivative[4][5] = derivBB[1][2];
92  derivative[5][0] = 0;
93  derivative[5][1] = 0;
94  derivative[5][2] = 0;
95  derivative[5][3] = derivBB[2][0];
96  derivative[5][4] = derivBB[2][1];
97  derivative[5][5] = derivBB[2][2];
98 
99  return(derivative.T());
100 
101 }
T y() const
Definition: PV3DBase.h:63
static AlgebraicMatrix transform(const align::RotationType &)
Helper to transform from RotationType to AlgebraicMatrix.
CLHEP::HepMatrix AlgebraicMatrix
T z() const
Definition: PV3DBase.h:64
CLHEP::HepVector AlgebraicVector
AlgebraicMatrix derivativeRotRot(const AlgebraicMatrix &RotDet, const AlgebraicMatrix &RotRot) const
Calculates the derivative DRot/DRot.
AlgebraicMatrix derivativePosRot(const AlgebraicMatrix &RotDet, const AlgebraicMatrix &RotRot, const AlgebraicVector &S) const
Calculates the derivative DPos/DRot.
T x() const
Definition: PV3DBase.h:62
A derivative(const A &_)
Definition: Derivative.h:18
AlgebraicMatrix derivativePosPos(const AlgebraicMatrix &RotDet, const AlgebraicMatrix &RotRot) const
Calculates the derivative DPos/DPos.
AlgebraicVector FrameToFrameDerivative::linearEulerAngles ( const AlgebraicMatrix rotDelta) const
private

Gets linear approximated euler Angles.

Definition at line 194 of file FrameToFrameDerivative.cc.

References funct::C.

Referenced by derivativeRotRot().

195 {
196 
197  AlgebraicMatrix eulerAB(3,3);
198  AlgebraicVector aB(3);
199  eulerAB[0][1] = 1;
200  eulerAB[1][0] = -1; // New beta sign
201  aB[2] = 1;
202 
203  AlgebraicMatrix eulerC(3,3);
204  AlgebraicVector C(3);
205  eulerC[2][0] = 1;
206  C[1] = 1;
207 
208  AlgebraicVector eulerAngles(3);
209  eulerAngles = eulerAB*rotDelta*aB + eulerC*rotDelta*C;
210  return eulerAngles;
211 
212 }
CLHEP::HepMatrix AlgebraicMatrix
CLHEP::HepVector AlgebraicVector
AlgebraicMatrix FrameToFrameDerivative::transform ( const align::RotationType rot)
inlinestaticprivate

Helper to transform from RotationType to AlgebraicMatrix.

Definition at line 61 of file FrameToFrameDerivative.h.

References dttmaxenums::R, TkRotation< T >::xx(), TkRotation< T >::xy(), TkRotation< T >::xz(), TkRotation< T >::yx(), TkRotation< T >::yy(), TkRotation< T >::yz(), TkRotation< T >::zx(), TkRotation< T >::zy(), and TkRotation< T >::zz().

Referenced by Vispa.Views.LineDecayView.DecayLine::boundingRect(), Vispa.Views.LineDecayView.DecayLine::containsPoint(), getDerivative(), and Vispa.Views.LineDecayView.DecayLine::paint().

62 {
63  AlgebraicMatrix R(3, 3);
64 
65  R(1, 1) = rot.xx(); R(1, 2) = rot.xy(); R(1, 3) = rot.xz();
66  R(2, 1) = rot.yx(); R(2, 2) = rot.yy(); R(2, 3) = rot.yz();
67  R(3, 1) = rot.zx(); R(3, 2) = rot.zy(); R(3, 3) = rot.zz();
68 
69  return R;
70 }
T xx() const
T yx() const
T zx() const
T xy() const
T zz() const
CLHEP::HepMatrix AlgebraicMatrix
T zy() const
T yy() const
T xz() const
T yz() const