CMS 3D CMS Logo

RigidBodyAlignmentParameters.cc
Go to the documentation of this file.
1 
9 
16 
17 // This class's header
19 
20 //__________________________________________________________________________________________________
22  : AlignmentParameters(ali, displacementFromAlignable(calcMis ? ali : nullptr), AlgebraicSymMatrix(N_PARAM, 0)) {}
23 
24 //__________________________________________________________________________________________________
27  const AlgebraicSymMatrix &covMatrix)
28  : AlignmentParameters(alignable, parameters, covMatrix) {
29  if (parameters.num_row() != N_PARAM) {
30  throw cms::Exception("BadParameters")
31  << "in RigidBodyAlignmentParameters(): " << parameters.num_row() << " instead of " << N_PARAM << " parameters.";
32  }
33 }
34 
35 //__________________________________________________________________________________________________
38  const AlgebraicSymMatrix &covMatrix,
39  const std::vector<bool> &selection)
40  : AlignmentParameters(alignable, parameters, covMatrix, selection) {
41  if (parameters.num_row() != N_PARAM) {
42  throw cms::Exception("BadParameters")
43  << "in RigidBodyAlignmentParameters(): " << parameters.num_row() << " instead of " << N_PARAM << " parameters.";
44  }
45 }
46 
47 //__________________________________________________________________________________________________
49  const AlgebraicSymMatrix &covMatrix) const {
51 
52  if (userVariables())
54  rbap->setValid(isValid());
55 
56  return rbap;
57 }
58 
59 //__________________________________________________________________________________________________
61  const AlgebraicVector &parameters, const AlgebraicSymMatrix &covMatrix) const {
64 
65  if (userVariables())
67  rbap->setValid(isValid());
68 
69  return rbap;
70 }
71 
72 //__________________________________________________________________________________________________
74  const AlignableDetOrUnitPtr &alidet) const {
75  const Alignable *ali = this->alignable(); // Alignable of these parameters
76 
77  if (ali == alidet) { // same alignable => same frame
78  return KarimakiAlignmentDerivatives()(tsos);
79  } else { // different alignable => transform into correct frame
80  const AlgebraicMatrix deriv = KarimakiAlignmentDerivatives()(tsos);
82  return ftfd.frameToFrameDerivative(alidet, ali).T() * deriv;
83  }
84 }
85 
86 //__________________________________________________________________________________________________
88  const AlignableDetOrUnitPtr &alignableDet) const {
89  const AlgebraicMatrix dev = this->derivatives(tsos, alignableDet);
90 
91  int ncols = dev.num_col();
92  int nrows = dev.num_row();
93  int nsel = numSelected();
94 
95  AlgebraicMatrix seldev(nsel, ncols);
96 
97  int ir2 = 0;
98  for (int irow = 0; irow < nrows; ++irow) {
99  if (selector()[irow]) {
100  for (int icol = 0; icol < ncols; ++icol)
101  seldev[ir2][icol] = dev[irow][icol];
102  ++ir2;
103  }
104  }
105 
106  return seldev;
107 }
108 
109 //__________________________________________________________________________________________________
112  for (int i = 0; i < 3; ++i)
113  shift[i] = theData->parameters()[i];
114 
115  return shift;
116 }
117 
118 //__________________________________________________________________________________________________
120  AlgebraicVector rot(3);
121  for (int i = 0; i < 3; ++i)
122  rot[i] = theData->parameters()[i + 3];
123 
124  return rot;
125 }
126 
127 //__________________________________________________________________________________________________
129  Alignable *alignable = this->alignable();
130  if (!alignable) {
131  throw cms::Exception("BadParameters") << "RigidBodyAlignmentParameters::apply: parameters without alignable";
132  }
133 
134  // Translation in local frame
135  AlgebraicVector shift = this->translation(); // fixme: should be LocalVector
136 
137  // Translation local->global
138  align::LocalVector lv(shift[0], shift[1], shift[2]);
140 
141  // Rotation in local frame
143  // original code:
144  // alignable->rotateInLocalFrame( align::toMatrix(angles) );
145  // correct for rounding errors:
149 }
150 
151 //__________________________________________________________________________________________________
153 
154 //__________________________________________________________________________________________________
156  AlgebraicVector m_GlobalParameters(N_PARAM, 0);
157 
158  const AlgebraicVector shift = translation(); // fixme: should return LocalVector
159 
160  const align::LocalVector lv(shift[0], shift[1], shift[2]);
162 
163  m_GlobalParameters[0] = dg.x();
164  m_GlobalParameters[1] = dg.y();
165  m_GlobalParameters[2] = dg.z();
166 
167  const align::EulerAngles eulerglob = theAlignable->surface().toGlobal(rotation());
168 
169  m_GlobalParameters[3] = eulerglob(1);
170  m_GlobalParameters[4] = eulerglob(2);
171  m_GlobalParameters[5] = eulerglob(3);
172 
173  return m_GlobalParameters;
174 }
175 
176 //__________________________________________________________________________________________________
178  std::cout << "Contents of RigidBodyAlignmentParameters:"
179  << "\nParameters: " << theData->parameters() << "\nCovariance: " << theData->covariance() << std::endl;
180 }
181 
182 //__________________________________________________________________________________________________
184  AlgebraicVector displacement(N_PARAM);
185 
186  if (ali) {
187  const align::RotationType &dR = ali->rotation();
188 
189  const align::LocalVector shifts(ali->globalRotation() * (dR.transposed() * ali->displacement().basicVector()));
190 
192 
193  displacement[0] = shifts.x();
194  displacement[1] = shifts.y();
195  displacement[2] = shifts.z();
196  displacement[3] = angles(1);
197  displacement[4] = angles(2);
198  displacement[5] = angles(3);
199  }
200 
201  return displacement;
202 }
Vector3DBase
Definition: Vector3DBase.h:8
AlignmentParameters::theAlignable
Alignable * theAlignable
Definition: AlignmentParameters.h:121
align::toAngles
EulerAngles toAngles(const RotationType &)
Convert rotation matrix to angles about x-, y-, z-axes (frame rotation).
Definition: Utilities.cc:8
AlignmentParameters::expandVector
AlgebraicVector expandVector(const AlgebraicVector &m, const std::vector< bool > &sel) const
Definition: AlignmentParameters.cc:215
RigidBodyAlignmentParameters::displacementFromAlignable
static AlgebraicVector displacementFromAlignable(const Alignable *ali)
Definition: RigidBodyAlignmentParameters.cc:183
TkRotation< Scalar >
hgcalPlots.ncols
ncols
Definition: hgcalPlots.py:105
AlignmentParametersFactory.h
mps_fire.i
i
Definition: mps_fire.py:355
AlignmentParameters::theData
DataContainer theData
Definition: AlignmentParameters.h:123
RigidBodyAlignmentParameters::rotation
AlgebraicVector rotation(void) const
Get rotation parameters.
Definition: RigidBodyAlignmentParameters.cc:119
PV3DBase::x
T x() const
Definition: PV3DBase.h:59
FrameToFrameDerivative.h
Alignable::rotateInGlobalFrame
virtual void rotateInGlobalFrame(const RotationType &rotation)=0
RigidBodyAlignmentParameters::derivatives
AlgebraicMatrix derivatives(const TrajectoryStateOnSurface &tsos, const AlignableDetOrUnitPtr &) const override
Get all derivatives.
Definition: RigidBodyAlignmentParameters.cc:73
Alignable
Definition: Alignable.h:27
gather_cfg.cout
cout
Definition: gather_cfg.py:144
AlignmentParameters::userVariables
AlignmentUserVariables * userVariables(void) const
Get pointer to user variables.
Definition: AlignmentParameters.cc:101
RigidBodyAlignmentParameters::clone
RigidBodyAlignmentParameters * clone(const AlgebraicVector &parameters, const AlgebraicSymMatrix &covMatrix) const override
Clone all parameters (for update of parameters)
Definition: RigidBodyAlignmentParameters.cc:48
AlignableSurface::toLocal
align::RotationType toLocal(const align::RotationType &) const
Return in local frame a rotation given in global frame.
Definition: AlignableSurface.cc:35
AlignableDetOrUnitPtr
Definition: AlignableDetOrUnitPtr.h:30
RigidBodyAlignmentParameters.h
AlignmentParameters::isValid
bool isValid(void) const
Get validity flag.
Definition: AlignmentParameters.cc:134
KarimakiAlignmentDerivatives.h
AlignmentParameters
Definition: AlignmentParameters.h:35
parameters
parameters
Definition: BeamSpot_PayloadInspector.cc:14
PV3DBase::z
T z() const
Definition: PV3DBase.h:61
RigidBodyAlignmentParameters::N_PARAM
Definition: RigidBodyAlignmentParameters.h:24
FrameToFrameDerivative::frameToFrameDerivative
AlgebraicMatrix frameToFrameDerivative(const Alignable *object, const Alignable *composedObject) const
Definition: FrameToFrameDerivative.cc:16
TrajectoryStateOnSurface
Definition: TrajectoryStateOnSurface.h:16
AlgebraicVector
CLHEP::HepVector AlgebraicVector
Definition: AlgebraicObjects.h:13
AlignmentParametersFactory::kRigidBody
Definition: AlignmentParametersFactory.h:22
corrVsCorr.selection
selection
main part
Definition: corrVsCorr.py:100
RigidBodyAlignmentParameters::globalParameters
AlgebraicVector globalParameters(void) const
calculate and return parameters in global frame
Definition: RigidBodyAlignmentParameters.cc:155
RigidBodyAlignmentParameters::print
void print(void) const
print parameters to screen
Definition: RigidBodyAlignmentParameters.cc:177
KarimakiAlignmentDerivatives
Definition: KarimakiAlignmentDerivatives.h:16
align::rectify
void rectify(RotationType &)
Correct a rotation matrix for rounding errors.
Definition: Utilities.cc:185
AlignableSurface::toGlobal
align::GlobalPoints toGlobal(const align::LocalPoints &) const
Return in global coord given a set of local points.
Definition: AlignableSurface.cc:15
Alignable::surface
const AlignableSurface & surface() const
Return the Surface (global position and orientation) of the object.
Definition: Alignable.h:132
Alignable::displacement
const GlobalVector & displacement() const
Return change of the global position since the creation of the object.
Definition: Alignable.h:141
Alignable::rotation
const RotationType & rotation() const
Return change of orientation since the creation of the object.
Definition: Alignable.h:144
AlignableDetOrUnitPtr.h
RigidBodyAlignmentParameters::translation
AlgebraicVector translation(void) const
Get translation parameters.
Definition: RigidBodyAlignmentParameters.cc:110
RigidBodyAlignmentParameters
Definition: RigidBodyAlignmentParameters.h:21
RigidBodyAlignmentParameters::apply
void apply() override
apply parameters to alignable
Definition: RigidBodyAlignmentParameters.cc:128
Definitions.h
PV3DBase::y
T y() const
Definition: PV3DBase.h:60
RigidBodyAlignmentParameters::type
int type() const override
tell type (AlignmentParametersFactory::ParametersType - but no circular dependency)
Definition: RigidBodyAlignmentParameters.cc:152
FrameToFrameDerivative
Definition: FrameToFrameDerivative.h:20
AlgebraicSymMatrix
CLHEP::HepSymMatrix AlgebraicSymMatrix
Definition: AlgebraicObjects.h:15
RigidBodyAlignmentParameters::cloneFromSelected
RigidBodyAlignmentParameters * cloneFromSelected(const AlgebraicVector &parameters, const AlgebraicSymMatrix &covMatrix) const override
Clone selected parameters (for update of parameters)
Definition: RigidBodyAlignmentParameters.cc:60
AlignmentParameters::expandSymMatrix
AlgebraicSymMatrix expandSymMatrix(const AlgebraicSymMatrix &m, const std::vector< bool > &sel) const
Definition: AlignmentParameters.cc:190
RigidBodyAlignmentParameters::RigidBodyAlignmentParameters
RigidBodyAlignmentParameters(Alignable *alignable, bool calcMis)
Definition: RigidBodyAlignmentParameters.cc:21
align::EulerAngles
AlgebraicVector EulerAngles
Definition: Definitions.h:34
Alignable::move
virtual void move(const GlobalVector &displacement)=0
Movement with respect to the global reference frame.
PV3DBase::basicVector
const BasicVectorType & basicVector() const
Definition: PV3DBase.h:53
AlgebraicMatrix
CLHEP::HepMatrix AlgebraicMatrix
Definition: AlgebraicObjects.h:14
particleFlowDisplacedVertex_cfi.angles
angles
Definition: particleFlowDisplacedVertex_cfi.py:84
AlignmentParameters::setValid
void setValid(bool v)
Set validity flag.
Definition: AlignmentParameters.cc:137
edm::shift
static unsigned const int shift
Definition: LuminosityBlockID.cc:7
Exception
Definition: hltDiff.cc:246
AlignmentParameters::numSelected
int numSelected(void) const
Get number of selected parameters.
Definition: AlignmentParameters.cc:51
makeMuonMisalignmentScenario.rot
rot
Definition: makeMuonMisalignmentScenario.py:322
Alignable.h
Exception.h
align::toMatrix
RotationType toMatrix(const EulerAngles &)
Convert rotation angles about x-, y-, z-axes to matrix.
Definition: Utilities.cc:34
AlignmentParameters::alignable
Alignable * alignable(void) const
Get pointer to corresponding alignable.
Definition: AlignmentParameters.cc:104
AlignmentParameters::selector
const std::vector< bool > & selector(void) const
Get alignment parameter selector vector.
Definition: AlignmentParameters.cc:48
HGC3DClusterGenMatchSelector_cfi.dR
dR
Definition: HGC3DClusterGenMatchSelector_cfi.py:7
RigidBodyAlignmentParameters::selectedDerivatives
AlgebraicMatrix selectedDerivatives(const TrajectoryStateOnSurface &tsos, const AlignableDetOrUnitPtr &) const override
Get selected derivatives.
Definition: RigidBodyAlignmentParameters.cc:87
Alignable::globalRotation
const RotationType & globalRotation() const
Return the global orientation of the object.
Definition: Alignable.h:138
AlignmentParameters::setUserVariables
void setUserVariables(AlignmentUserVariables *auv)
Set pointer to user variables.
Definition: AlignmentParameters.cc:94