CMS 3D CMS Logo

BeamSpotAlignmentParameters.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 BeamSpotAlignmentParameters(): " << 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 BeamSpotAlignmentParameters(): " << parameters.num_row() << " instead of " << N_PARAM << " parameters.";
44  }
45 }
46 
47 //__________________________________________________________________________________________________
49 
50 //__________________________________________________________________________________________________
52  const AlgebraicSymMatrix &covMatrix) const {
54 
55  if (userVariables())
57  rbap->setValid(isValid());
58 
59  return rbap;
60 }
61 
62 //__________________________________________________________________________________________________
64  const AlgebraicSymMatrix &covMatrix) const {
67 
68  if (userVariables())
70  rbap->setValid(isValid());
71 
72  return rbap;
73 }
74 
75 //__________________________________________________________________________________________________
77  const AlignableDetOrUnitPtr &alidet) const {
78  const Alignable *ali = this->alignable(); // Alignable of these parameters
79 
80  if (ali == alidet) { // same alignable => same frame
81  return BeamSpotAlignmentDerivatives()(tsos);
82  } else {
83  throw cms::Exception("MisMatch") << "BeamSpotAlignmentParameters::derivatives: The hit alignable must "
84  "match the "
85  << "aligned one, i.e. these parameters make only sense for "
86  "AlignableBeamSpot.\n";
87  return AlgebraicMatrix(N_PARAM, 2); // please compiler
88  }
89 }
90 
91 //__________________________________________________________________________________________________
93  const AlignableDetOrUnitPtr &alignableDet) const {
94  const AlgebraicMatrix dev = this->derivatives(tsos, alignableDet);
95 
96  int ncols = dev.num_col();
97  int nrows = dev.num_row();
98  int nsel = numSelected();
99 
100  AlgebraicMatrix seldev(nsel, ncols);
101 
102  int ir2 = 0;
103  for (int irow = 0; irow < nrows; ++irow) {
104  if (selector()[irow]) {
105  for (int icol = 0; icol < ncols; ++icol)
106  seldev[ir2][icol] = dev[irow][icol];
107  ++ir2;
108  }
109  }
110 
111  return seldev;
112 }
113 
114 //__________________________________________________________________________________________________
117  for (int i = 0; i < 2; ++i)
118  shift[i] = theData->parameters()[i];
119  shift[2] = 0.0;
120 
121  return shift;
122 }
123 
124 //__________________________________________________________________________________________________
126  AlgebraicVector rot(3);
127 
128  double dxdz = theData->parameters()[2];
129  double dydz = theData->parameters()[3];
130  double angleY = std::atan(dxdz);
131  double angleX = -std::atan(dydz);
132 
133  align::RotationType rotY(std::cos(angleY), 0., -std::sin(angleY), 0., 1., 0., std::sin(angleY), 0., std::cos(angleY));
134 
135  align::RotationType rotX(1., 0., 0., 0., std::cos(angleX), std::sin(angleX), 0., -std::sin(angleX), std::cos(angleX));
136 
138 
139  rot[0] = angles(1);
140  rot[1] = angles(2);
141  rot[2] = angles(3);
142 
143  return rot;
144 }
145 
146 //__________________________________________________________________________________________________
148  Alignable *alignable = this->alignable();
149  if (!alignable) {
150  throw cms::Exception("BadParameters") << "BeamSpotAlignmentParameters::apply: parameters without alignable";
151  }
152 
153  // Translation in local frame
154  AlgebraicVector shift = this->translation(); // fixme: should be LocalVector
155 
156  // Translation local->global
157  align::GlobalVector gv(shift[0], shift[1], shift[2]);
158  alignable->move(gv);
159 
160  // Rotation in local frame
162  // original code:
163  // alignable->rotateInLocalFrame( align::toMatrix(angles) );
164  // correct for rounding errors:
168 }
169 
170 //__________________________________________________________________________________________________
172 
173 //__________________________________________________________________________________________________
175  AlgebraicVector m_GlobalParameters(N_PARAM, 0);
176 
177  const AlgebraicVector shift = translation(); // fixme: should return LocalVector
178 
179  const align::GlobalVector dg(shift[0], shift[1], 0);
180 
181  m_GlobalParameters[0] = dg.x();
182  m_GlobalParameters[1] = dg.y();
183 
184  align::LocalVector lv(0.0, 0.0, 1.0);
186 
187  double dxdz = gv.x() / gv.z();
188  double dydz = gv.x() / gv.z();
189 
190  m_GlobalParameters[2] = dxdz;
191  m_GlobalParameters[3] = dydz;
192 
193  return m_GlobalParameters;
194 }
195 
196 //__________________________________________________________________________________________________
198  std::cout << "Contents of BeamSpotAlignmentParameters:"
199  << "\nParameters: " << theData->parameters() << "\nCovariance: " << theData->covariance() << std::endl;
200 }
201 
202 //__________________________________________________________________________________________________
204  AlgebraicVector displacement(N_PARAM);
205 
206  if (ali) {
207  const align::RotationType &dR = ali->rotation();
208 
209  const align::LocalVector shifts(ali->globalRotation() * (dR.transposed() * ali->displacement().basicVector()));
210 
211  align::GlobalVector gv(0.0, 0.0, 1.0);
212  align::LocalVector lv(dR.transposed() * gv.basicVector());
213 
214  displacement[0] = shifts.x();
215  displacement[1] = shifts.y();
216  displacement[2] = lv.x() / lv.z();
217  displacement[3] = lv.y() / lv.z();
218  }
219 
220  return displacement;
221 }
Vector3DBase< Scalar, GlobalTag >
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
BeamSpotAlignmentParameters::rotation
AlgebraicVector rotation(void) const
Get rotation parameters.
Definition: BeamSpotAlignmentParameters.cc:125
AlignmentParameters::expandVector
AlgebraicVector expandVector(const AlgebraicVector &m, const std::vector< bool > &sel) const
Definition: AlignmentParameters.cc:215
TkRotation< Scalar >
BeamSpotAlignmentParameters::type
int type() const override
tell type (AlignmentParametersFactory::ParametersType - but no circular dependency)
Definition: BeamSpotAlignmentParameters.cc:171
hgcalPlots.ncols
ncols
Definition: hgcalPlots.py:105
BeamSpotFakeParameters_cfi.dxdz
dxdz
Definition: BeamSpotFakeParameters_cfi.py:12
AlignmentParametersFactory.h
mps_fire.i
i
Definition: mps_fire.py:355
AlignmentParameters::theData
DataContainer theData
Definition: AlignmentParameters.h:123
BeamSpotAlignmentParameters::translation
AlgebraicVector translation(void) const
Get translation parameters.
Definition: BeamSpotAlignmentParameters.cc:115
BeamSpotAlignmentParameters::derivatives
AlgebraicMatrix derivatives(const TrajectoryStateOnSurface &tsos, const AlignableDetOrUnitPtr &) const override
Get all derivatives.
Definition: BeamSpotAlignmentParameters.cc:76
PV3DBase::x
T x() const
Definition: PV3DBase.h:59
Alignable::rotateInGlobalFrame
virtual void rotateInGlobalFrame(const RotationType &rotation)=0
BeamSpotAlignmentDerivatives
Definition: BeamSpotAlignmentDerivatives.h:16
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
BeamSpotAlignmentParameters::BeamSpotAlignmentParameters
BeamSpotAlignmentParameters(Alignable *alignable, bool calcMis)
Definition: BeamSpotAlignmentParameters.cc:21
BeamSpotAlignmentParameters::cloneFromSelected
BeamSpotAlignmentParameters * cloneFromSelected(const AlgebraicVector &parameters, const AlgebraicSymMatrix &covMatrix) const override
Clone selected parameters (for update of parameters)
Definition: BeamSpotAlignmentParameters.cc:63
BeamSpotAlignmentParameters::clone
BeamSpotAlignmentParameters * clone(const AlgebraicVector &parameters, const AlgebraicSymMatrix &covMatrix) const override
Clone all parameters (for update of parameters)
Definition: BeamSpotAlignmentParameters.cc:51
AlignableDetOrUnitPtr
Definition: AlignableDetOrUnitPtr.h:30
AlignmentParameters::isValid
bool isValid(void) const
Get validity flag.
Definition: AlignmentParameters.cc:134
AlignmentParameters
Definition: AlignmentParameters.h:35
parameters
parameters
Definition: BeamSpot_PayloadInspector.cc:14
funct::sin
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
PV3DBase::z
T z() const
Definition: PV3DBase.h:61
BeamSpotAlignmentParameters::apply
void apply() override
apply parameters to alignable
Definition: BeamSpotAlignmentParameters.cc:147
TrajectoryStateOnSurface
Definition: TrajectoryStateOnSurface.h:16
BeamSpotAlignmentParameters::selectedDerivatives
AlgebraicMatrix selectedDerivatives(const TrajectoryStateOnSurface &tsos, const AlignableDetOrUnitPtr &) const override
Get selected derivatives.
Definition: BeamSpotAlignmentParameters.cc:92
funct::cos
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
AlgebraicVector
CLHEP::HepVector AlgebraicVector
Definition: AlgebraicObjects.h:13
BeamSpotAlignmentParameters.h
corrVsCorr.selection
selection
main part
Definition: corrVsCorr.py:100
BeamSpotAlignmentParameters::globalParameters
AlgebraicVector globalParameters(void) const
calculate and return parameters in global frame
Definition: BeamSpotAlignmentParameters.cc:174
BeamSpotAlignmentParameters::~BeamSpotAlignmentParameters
~BeamSpotAlignmentParameters() override
Destructor.
Definition: BeamSpotAlignmentParameters.cc:48
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
BeamSpotAlignmentParameters::N_PARAM
Definition: BeamSpotAlignmentParameters.h:24
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
Definitions.h
PV3DBase::y
T y() const
Definition: PV3DBase.h:60
BeamSpotAlignmentParameters
Definition: BeamSpotAlignmentParameters.h:21
Utilities.h
AlgebraicSymMatrix
CLHEP::HepSymMatrix AlgebraicSymMatrix
Definition: AlgebraicObjects.h:15
AlignmentParameters::expandSymMatrix
AlgebraicSymMatrix expandSymMatrix(const AlgebraicSymMatrix &m, const std::vector< bool > &sel) const
Definition: AlignmentParameters.cc:190
align::EulerAngles
AlgebraicVector EulerAngles
Definition: Definitions.h:34
BeamSpotFakeParameters_cfi.dydz
dydz
Definition: BeamSpotFakeParameters_cfi.py:13
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
BeamSpotAlignmentDerivatives.h
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
BeamSpotAlignmentParameters::displacementFromAlignable
static AlgebraicVector displacementFromAlignable(const Alignable *ali)
Definition: BeamSpotAlignmentParameters.cc:203
AlignmentParametersFactory::kBeamSpot
Definition: AlignmentParametersFactory.h:26
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
BeamSpotAlignmentParameters::print
void print(void) const
print parameters to screen
Definition: BeamSpotAlignmentParameters.cc:197