CMS 3D CMS Logo

List of all members | Public Types | Public Member Functions | Private Member Functions | Private Attributes
TwoBowedSurfacesAlignmentParameters Class Reference

#include <TwoBowedSurfacesAlignmentParameters.h>

Inheritance diagram for TwoBowedSurfacesAlignmentParameters:
AlignmentParameters

Public Types

enum  AlignmentParameterName {
  dx1 = BowedDerivs::dx, dy1 = BowedDerivs::dy, dz1 = BowedDerivs::dz, dslopeX1 = BowedDerivs::dslopeX,
  dslopeY1 = BowedDerivs::dslopeY, drotZ1 = BowedDerivs::drotZ, dsagittaX1 = BowedDerivs::dsagittaX, dsagittaXY1 = BowedDerivs::dsagittaXY,
  dsagittaY1 = BowedDerivs::dsagittaY, dx2 = BowedDerivs::dx + BowedDerivs::N_PARAM, dy2 = BowedDerivs::dy + BowedDerivs::N_PARAM, dz2 = BowedDerivs::dz + BowedDerivs::N_PARAM,
  dslopeX2 = BowedDerivs::dslopeX + BowedDerivs::N_PARAM, dslopeY2 = BowedDerivs::dslopeY + BowedDerivs::N_PARAM, drotZ2 = BowedDerivs::drotZ + BowedDerivs::N_PARAM, dsagittaX2 = BowedDerivs::dsagittaX + BowedDerivs::N_PARAM,
  dsagittaXY2 = BowedDerivs::dsagittaXY + BowedDerivs::N_PARAM, dsagittaY2 = BowedDerivs::dsagittaY + BowedDerivs::N_PARAM, N_PARAM = BowedDerivs::N_PARAM + BowedDerivs::N_PARAM
}
 
typedef BowedSurfaceAlignmentDerivatives BowedDerivs
 Give parameters a name (do not change order, see derivatives(..)!) More...
 
- Public Types inherited from AlignmentParameters
typedef AlignmentParametersData::DataContainer DataContainer
 

Public Member Functions

void apply () override
 apply parameters to alignable More...
 
TwoBowedSurfacesAlignmentParametersclone (const AlgebraicVector &parameters, const AlgebraicSymMatrix &covMatrix) const override
 Clone all parameters (for update of parameters) More...
 
TwoBowedSurfacesAlignmentParameterscloneFromSelected (const AlgebraicVector &parameters, const AlgebraicSymMatrix &covMatrix) const override
 Clone selected parameters (for update of parameters) More...
 
AlgebraicMatrix derivatives (const TrajectoryStateOnSurface &tsos, const AlignableDetOrUnitPtr &aliDet) const override
 Get all derivatives. More...
 
virtual void print () const
 print parameters to screen More...
 
 TwoBowedSurfacesAlignmentParameters (Alignable *alignable)
 Constructor with empty parameters/covariance. More...
 
 TwoBowedSurfacesAlignmentParameters (Alignable *alignable, const AlgebraicVector &parameters, const AlgebraicSymMatrix &covMatrix)
 Constructor for full set of parameters. More...
 
 TwoBowedSurfacesAlignmentParameters (Alignable *alignable, const AlgebraicVector &parameters, const AlgebraicSymMatrix &covMatrix, const std::vector< bool > &selection)
 Constructor for selection. More...
 
int type () const override
 tell type (AlignmentParametersFactory::ParametersType - but no circular dependency) More...
 
double ySplit () const
 
 ~TwoBowedSurfacesAlignmentParameters () override
 Destructor. More...
 
- Public Member Functions inherited from AlignmentParameters
Alignablealignable (void) const
 Get pointer to corresponding alignable. More...
 
 AlignmentParameters ()
 Default constructor. More...
 
 AlignmentParameters (Alignable *object, const AlgebraicVector &par, const AlgebraicSymMatrix &cov)
 Constructor from given input. More...
 
 AlignmentParameters (Alignable *object, const AlgebraicVector &par, const AlgebraicSymMatrix &cov, const std::vector< bool > &sel)
 Constructor including selection of active parameters. More...
 
 AlignmentParameters (Alignable *object, const DataContainer &data)
 Constructor. More...
 
const AlgebraicSymMatrixcovariance (void) const
 Get parameter covariance matrix. More...
 
virtual unsigned int hierarchyLevel () const
 
bool isValid (void) const
 Get validity flag. More...
 
int numSelected (void) const
 Get number of selected parameters. More...
 
const AlgebraicVectorparameters (void) const
 Get alignment parameters. More...
 
AlgebraicSymMatrix selectedCovariance (void) const
 Get covariance matrix of selected parameters. More...
 
virtual AlgebraicMatrix selectedDerivatives (const TrajectoryStateOnSurface &tsos, const AlignableDetOrUnitPtr &alidet) const
 
AlgebraicVector selectedParameters (void) const
 Get selected parameters. More...
 
const std::vector< bool > & selector (void) const
 Get alignment parameter selector vector. More...
 
void setUserVariables (AlignmentUserVariables *auv)
 Set pointer to user variables. More...
 
void setValid (bool v)
 Set validity flag. More...
 
int size (void) const
 Get number of parameters. More...
 
AlignmentUserVariablesuserVariables (void) const
 Get pointer to user variables. More...
 
virtual ~AlignmentParameters ()
 Destructor. More...
 

Private Member Functions

double ySplitFromAlignable (const Alignable *ali) const
 

Private Attributes

double ySplit_
 

Additional Inherited Members

- Protected Member Functions inherited from AlignmentParameters
AlgebraicSymMatrix collapseSymMatrix (const AlgebraicSymMatrix &m, const std::vector< bool > &sel) const
 
AlgebraicVector collapseVector (const AlgebraicVector &m, const std::vector< bool > &sel) const
 
AlgebraicSymMatrix expandSymMatrix (const AlgebraicSymMatrix &m, const std::vector< bool > &sel) const
 
AlgebraicVector expandVector (const AlgebraicVector &m, const std::vector< bool > &sel) const
 
- Protected Attributes inherited from AlignmentParameters
bool bValid
 True if parameters are valid. More...
 
AlignabletheAlignable
 
DataContainer theData
 
AlignmentUserVariablestheUserVariables
 

Detailed Description

Concrete class for alignment parameters and associated quantities [derived from AlignmentParameters]. The alignable is assumed to have in fact two surfaces devided at a specific local ySplit. The number of parameters N_PARAM is 2x9, i.e. one set of

the half differences of the movements and rotations, to be taken into account, with positive/negative sign, for corrections for the surface at lower/higher y,

Definition at line 43 of file TwoBowedSurfacesAlignmentParameters.h.

Member Typedef Documentation

◆ BowedDerivs

Give parameters a name (do not change order, see derivatives(..)!)

Definition at line 46 of file TwoBowedSurfacesAlignmentParameters.h.

Member Enumeration Documentation

◆ AlignmentParameterName

Enumerator
dx1 
dy1 
dz1 
dslopeX1 
dslopeY1 
drotZ1 
dsagittaX1 
dsagittaXY1 
dsagittaY1 
dx2 
dy2 
dz2 
dslopeX2 
dslopeY2 
drotZ2 
dsagittaX2 
dsagittaXY2 
dsagittaY2 
N_PARAM 

Definition at line 47 of file TwoBowedSurfacesAlignmentParameters.h.

47  {
48  // 1st surface
52  dslopeX1 = BowedDerivs::dslopeX, // NOTE: slope(u) -> halfWidth*tan(beta),
53  dslopeY1 = BowedDerivs::dslopeY, // slope(v) -> halfLength*tan(alpha)
54  drotZ1 = BowedDerivs::drotZ, // rot(w) -> g-scale*gamma
58  // 2nd surface
62  dslopeX2 = BowedDerivs::dslopeX + BowedDerivs::N_PARAM, // NOTE: slope(u) -> k*tan(beta),
63  dslopeY2 = BowedDerivs::dslopeY + BowedDerivs::N_PARAM, // slope(v) -> k*tan(alpha)
64  drotZ2 = BowedDerivs::drotZ + BowedDerivs::N_PARAM, // rot(w) -> m*gamma
68  // number of parameters
70  };

Constructor & Destructor Documentation

◆ TwoBowedSurfacesAlignmentParameters() [1/3]

TwoBowedSurfacesAlignmentParameters::TwoBowedSurfacesAlignmentParameters ( Alignable alignable)

Constructor with empty parameters/covariance.

Definition at line 27 of file TwoBowedSurfacesAlignmentParameters.cc.

Referenced by clone().

◆ TwoBowedSurfacesAlignmentParameters() [2/3]

TwoBowedSurfacesAlignmentParameters::TwoBowedSurfacesAlignmentParameters ( Alignable alignable,
const AlgebraicVector parameters,
const AlgebraicSymMatrix covMatrix 
)

Constructor for full set of parameters.

Definition at line 32 of file TwoBowedSurfacesAlignmentParameters.cc.

References Exception, N_PARAM, and AlignmentParameters::parameters().

35  : AlignmentParameters(alignable, parameters, covMatrix), ySplit_(this->ySplitFromAlignable(alignable)) {
36  if (parameters.num_row() != N_PARAM) {
37  throw cms::Exception("BadParameters") << "in TwoBowedSurfacesAlignmentParameters(): " << parameters.num_row()
38  << " instead of " << N_PARAM << " parameters.";
39  }
40 }
Alignable * alignable(void) const
Get pointer to corresponding alignable.
const AlgebraicVector & parameters(void) const
Get alignment parameters.
double ySplitFromAlignable(const Alignable *ali) const
AlignmentParameters()
Default constructor.

◆ TwoBowedSurfacesAlignmentParameters() [3/3]

TwoBowedSurfacesAlignmentParameters::TwoBowedSurfacesAlignmentParameters ( Alignable alignable,
const AlgebraicVector parameters,
const AlgebraicSymMatrix covMatrix,
const std::vector< bool > &  selection 
)

Constructor for selection.

Definition at line 43 of file TwoBowedSurfacesAlignmentParameters.cc.

References Exception, N_PARAM, and AlignmentParameters::parameters().

48  if (parameters.num_row() != N_PARAM) {
49  throw cms::Exception("BadParameters") << "in TwoBowedSurfacesAlignmentParameters(): " << parameters.num_row()
50  << " instead of " << N_PARAM << " parameters.";
51  }
52 }
Alignable * alignable(void) const
Get pointer to corresponding alignable.
selection
main part
Definition: corrVsCorr.py:100
const AlgebraicVector & parameters(void) const
Get alignment parameters.
double ySplitFromAlignable(const Alignable *ali) const
AlignmentParameters()
Default constructor.

◆ ~TwoBowedSurfacesAlignmentParameters()

TwoBowedSurfacesAlignmentParameters::~TwoBowedSurfacesAlignmentParameters ( )
inlineoverride

Destructor.

Definition at line 87 of file TwoBowedSurfacesAlignmentParameters.h.

87 {};

Member Function Documentation

◆ apply()

void TwoBowedSurfacesAlignmentParameters::apply ( )
overridevirtual

apply parameters to alignable

Implements AlignmentParameters.

Definition at line 115 of file TwoBowedSurfacesAlignmentParameters.cc.

References Alignable::addSurfaceDeformation(), AlignmentParameters::alignable(), particleFlowDisplacedVertex_cfi::angles, drotZ1, drotZ2, dsagittaX1, dsagittaX2, dsagittaXY1, dsagittaXY2, dsagittaY1, dsagittaY2, dslopeX1, dslopeX2, dslopeY1, dslopeY2, dx1, dy1, dz1, Exception, BowedSurfaceAlignmentDerivatives::gammaScale(), mps_fire::i, AlignableSurface::length(), Alignable::move(), BowedSurfaceAlignmentDerivatives::N_PARAM, submitPVValidationJobs::params, align::rectify(), makeMuonMisalignmentScenario::rot, Alignable::rotateInGlobalFrame(), AlignmentParameters::selector(), edm::shift, Alignable::surface(), AlignmentParameters::theData, AlignableSurface::toGlobal(), align::toMatrix(), AlignableSurface::width(), and ySplit_.

Referenced by heavyIonTools.ConfigureHeavyIons::__call__(), coreTools.RunOnData::__call__(), trackTools.MakeAODTrackCandidates::__call__(), runJetUncertainties.RunJetUncertainties::__call__(), metTools.AddMETCollection::__call__(), heavyIonTools.ProductionDefaults::__call__(), cmsswVersionTools.PickRelValInputFiles::__call__(), coreTools.RemoveMCMatching::__call__(), trackTools.MakePATTrackCandidates::__call__(), trigTools.SwitchOnTrigger::__call__(), runMETCorrectionsAndUncertainties.RunMETCorrectionsAndUncertainties::__call__(), heavyIonTools.SelectionDefaults::__call__(), heavyIonTools.DisbaleMonteCarloDeps::__call__(), trigTools.SwitchOnTriggerStandAlone::__call__(), tauTools.AddTauCollection::__call__(), trackTools.MakeTrackCandidates::__call__(), trigTools.SwitchOnTriggerMatching::__call__(), trigTools.SwitchOnTriggerMatchingStandAlone::__call__(), trigTools.SwitchOnTriggerMatchEmbedding::__call__(), jetTools.AddJetCollection::__call__(), jetTools.SwitchJetCollection::__call__(), jetTools.UpdateJetCollection::__call__(), jetTools.AddJetID::__call__(), and jetTools.SetTagInfos::__call__().

115  {
116  Alignable *alignable = this->alignable();
117  if (!alignable) {
118  throw cms::Exception("BadParameters") << "TwoBowedSurfacesAlignmentParameters::apply: parameters without "
119  "alignable";
120  }
121 
122  // Some repeatedly needed variables
123  const AlignableSurface &surface = alignable->surface();
124  const double halfLength = surface.length() * 0.5; // full module
125  const double halfLength1 = (halfLength + ySplit_) * 0.5; // low-y surface
126  const double halfLength2 = (halfLength - ySplit_) * 0.5; // high-y surface
127 
128  // first copy the parameters into separate parts for the two surfaces
129  const AlgebraicVector &params = theData->parameters();
130  std::vector<double> rigidBowPar1(BowedDerivs::N_PARAM); // 1st surface (y < ySplit_)
131  std::vector<double> rigidBowPar2(BowedDerivs::N_PARAM); // 2nd surface (y >= ySplit_)
132  for (unsigned int i = 0; i < BowedDerivs::N_PARAM; ++i) {
133  rigidBowPar1[i] = params[i];
134  rigidBowPar2[i] = params[i + BowedDerivs::N_PARAM];
135  }
136  // Now adjust slopes to angles, note that dslopeX <-> -beta & dslopeY <->
137  // alpha, see BowedSurfaceAlignmentParameters::rotation(): FIXME: use atan?
138  rigidBowPar1[3] = params[dslopeY1] / halfLength1; // alpha1
139  rigidBowPar2[3] = params[dslopeY2] / halfLength2; // alpha2
140  rigidBowPar1[4] = -params[dslopeX1] / (surface.width() * 0.5); // beta1
141  rigidBowPar2[4] = -params[dslopeX2] / (surface.width() * 0.5); // beta2
142  // gamma is simply scaled
143  const double gammaScale1 = BowedDerivs::gammaScale(surface.width(), 2.0 * halfLength1);
144  rigidBowPar1[5] = params[drotZ1] / gammaScale1;
145  // const double gammaScale2 = std::sqrt(halfLength2 * halfLength2
146  // + surface.width() * surface.width()/4.);
147  const double gammaScale2 = BowedDerivs::gammaScale(surface.width(), 2.0 * halfLength2);
148  rigidBowPar2[5] = params[drotZ2] / gammaScale2;
149 
150  // Get rigid body rotations of full module as mean of the two surfaces:
151  align::EulerAngles angles(3); // to become 'common' rotation in local frame
152  for (unsigned int i = 0; i < 3; ++i) {
153  angles[i] = (rigidBowPar1[i + 3] + rigidBowPar2[i + 3]) * 0.5;
154  }
155  // Module rotations are around other axes than the one we determined,
156  // so we have to correct that the surfaces are shifted by the rotation around
157  // the module axis - in linear approximation just an additional shift:
158  const double yMean1 = -halfLength + halfLength1; // y of alpha1 rotation axis in module frame
159  const double yMean2 = halfLength - halfLength2; // y of alpha2 rotation axis in module frame
160  rigidBowPar1[dz1] -= angles[0] * yMean1; // correct w1 for alpha
161  rigidBowPar2[dz1] -= angles[0] * yMean2; // correct w2 for alpha
162  // Nothing for beta1/2 since anyway both around the y-axis of the module.
163  rigidBowPar1[dx1] += angles[2] * yMean1; // correct x1 for gamma
164  rigidBowPar2[dx1] += angles[2] * yMean2; // correct x1 for gamma
165 
166  // Get rigid body shifts of full module as mean of the two surfaces:
167  const align::LocalVector shift((rigidBowPar1[dx1] + rigidBowPar2[dx1]) * 0.5, // dx1!
168  (rigidBowPar1[dy1] + rigidBowPar2[dy1]) * 0.5, // dy1!
169  (rigidBowPar1[dz1] + rigidBowPar2[dz1]) * 0.5); // dz1!
170  // Apply module shift and rotation:
171  alignable->move(surface.toGlobal(shift));
172  // original code:
173  // alignable->rotateInLocalFrame( align::toMatrix(angles) );
174  // correct for rounding errors:
178 
179  // only update the surface deformations if they were selected for alignment
182  // Fill surface structures with mean bows and half differences for all
183  // parameters:
184  std::vector<align::Scalar> deformations;
185  deformations.reserve(13);
186  // first part: average bows
187  deformations.push_back((params[dsagittaX1] + params[dsagittaX2]) * 0.5);
188  deformations.push_back((params[dsagittaXY1] + params[dsagittaXY2]) * 0.5);
189  deformations.push_back((params[dsagittaY1] + params[dsagittaY2]) * 0.5);
190  // second part: half difference of all corrections
191  for (unsigned int i = 0; i < BowedDerivs::N_PARAM; ++i) {
192  // sign means that we have to apply e.g.
193  // - sagittaX for sensor 1: deformations[0] + deformations[9]
194  // - sagittaX for sensor 2: deformations[0] - deformations[9]
195  // - additional dx for sensor 1: deformations[3]
196  // - additional dx for sensor 2: -deformations[3]
197  deformations.push_back((rigidBowPar1[i] - rigidBowPar2[i]) * 0.5);
198  }
199  // finally: keep track of where we have split the module
200  deformations.push_back(ySplit_); // index is 12
201 
202  const TwoBowedSurfacesDeformation deform{deformations};
203 
204  // FIXME: true to propagate down?
205  // Needed for hierarchy with common deformation parameter,
206  // but that is not possible now anyway.
207  alignable->addSurfaceDeformation(&deform, false);
208  }
209 }
align::GlobalPoints toGlobal(const align::LocalPoints &) const
Return in global coord given a set of local points.
const AlignableSurface & surface() const
Return the Surface (global position and orientation) of the object.
Definition: Alignable.h:132
Alignable * alignable(void) const
Get pointer to corresponding alignable.
align::Scalar width() const
virtual void move(const GlobalVector &displacement)=0
Movement with respect to the global reference frame.
void rectify(RotationType &)
Correct a rotation matrix for rounding errors.
Definition: Utilities.cc:185
virtual void addSurfaceDeformation(const SurfaceDeformation *deformation, bool propagateDown)=0
static double gammaScale(double width, double splitLength)
CLHEP::HepVector AlgebraicVector
AlgebraicVector EulerAngles
Definition: Definitions.h:34
virtual void rotateInGlobalFrame(const RotationType &rotation)=0
align::Scalar length() const
const std::vector< bool > & selector(void) const
Get alignment parameter selector vector.
RotationType toMatrix(const EulerAngles &)
Convert rotation angles about x-, y-, z-axes to matrix.
Definition: Utilities.cc:34
static unsigned int const shift

◆ clone()

TwoBowedSurfacesAlignmentParameters * TwoBowedSurfacesAlignmentParameters::clone ( const AlgebraicVector parameters,
const AlgebraicSymMatrix covMatrix 
) const
overridevirtual

Clone all parameters (for update of parameters)

Implements AlignmentParameters.

Definition at line 55 of file TwoBowedSurfacesAlignmentParameters.cc.

References AlignmentParameters::alignable(), AlignmentParameters::isValid(), AlignmentParameters::selector(), AlignmentParameters::setUserVariables(), AlignmentParameters::setValid(), TwoBowedSurfacesAlignmentParameters(), and AlignmentParameters::userVariables().

Referenced by cloneFromSelected().

56  {
59 
60  if (this->userVariables())
61  rbap->setUserVariables(this->userVariables()->clone());
62  rbap->setValid(this->isValid());
63 
64  return rbap;
65 }
Alignable * alignable(void) const
Get pointer to corresponding alignable.
const AlgebraicVector & parameters(void) const
Get alignment parameters.
void setValid(bool v)
Set validity flag.
AlignmentUserVariables * userVariables(void) const
Get pointer to user variables.
TwoBowedSurfacesAlignmentParameters * clone(const AlgebraicVector &parameters, const AlgebraicSymMatrix &covMatrix) const override
Clone all parameters (for update of parameters)
bool isValid(void) const
Get validity flag.
void setUserVariables(AlignmentUserVariables *auv)
Set pointer to user variables.
const std::vector< bool > & selector(void) const
Get alignment parameter selector vector.
TwoBowedSurfacesAlignmentParameters(Alignable *alignable)
Constructor with empty parameters/covariance.

◆ cloneFromSelected()

TwoBowedSurfacesAlignmentParameters * TwoBowedSurfacesAlignmentParameters::cloneFromSelected ( const AlgebraicVector parameters,
const AlgebraicSymMatrix covMatrix 
) const
overridevirtual

Clone selected parameters (for update of parameters)

Implements AlignmentParameters.

Definition at line 68 of file TwoBowedSurfacesAlignmentParameters.cc.

References clone(), AlignmentParameters::expandSymMatrix(), AlignmentParameters::expandVector(), and AlignmentParameters::selector().

69  {
70  return this->clone(this->expandVector(parameters, this->selector()),
71  this->expandSymMatrix(covMatrix, this->selector()));
72 }
const AlgebraicVector & parameters(void) const
Get alignment parameters.
AlgebraicVector expandVector(const AlgebraicVector &m, const std::vector< bool > &sel) const
AlgebraicSymMatrix expandSymMatrix(const AlgebraicSymMatrix &m, const std::vector< bool > &sel) const
TwoBowedSurfacesAlignmentParameters * clone(const AlgebraicVector &parameters, const AlgebraicSymMatrix &covMatrix) const override
Clone all parameters (for update of parameters)
const std::vector< bool > & selector(void) const
Get alignment parameter selector vector.

◆ derivatives()

AlgebraicMatrix TwoBowedSurfacesAlignmentParameters::derivatives ( const TrajectoryStateOnSurface tsos,
const AlignableDetOrUnitPtr aliDet 
) const
overridevirtual

Get all derivatives.

Implements AlignmentParameters.

Definition at line 75 of file TwoBowedSurfacesAlignmentParameters.cc.

References AlignmentParameters::alignable(), BowedSurfaceAlignmentDerivatives::dx, dx2, Exception, mps_fire::i, AlignableSurface::length(), TrajectoryStateOnSurface::localParameters(), pixelTopology::localY(), LocalTrajectoryParameters::mixedFormatVector(), BowedSurfaceAlignmentDerivatives::N_PARAM, N_PARAM, mps_fire::result, Alignable::surface(), AlignableSurface::width(), and ySplit_.

76  {
77  const Alignable *ali = this->alignable(); // Alignable of these parameters
78  AlgebraicMatrix result(N_PARAM, 2); // initialised with zeros
79 
80  if (ali == alidet) {
81  const AlignableSurface &surf = ali->surface();
82 
83  // matrix of dimension BowedDerivs::N_PARAM x 2
84  const AlgebraicMatrix derivs(BowedDerivs()(tsos, surf.width(), surf.length(), true, ySplit_)); // split at ySplit_!
85 
86  // Parameters belong to surface part with y < ySplit_ or y >= ySplit_?
87  const double localY = tsos.localParameters().mixedFormatVector()[4];
88  const unsigned int indexOffset = (localY < ySplit_ ? 0 : dx2);
89  // Copy derivatives to relevant part of result
90  for (unsigned int i = BowedDerivs::dx; i < BowedDerivs::N_PARAM; ++i) {
91  result[indexOffset + i][0] = derivs[i][0];
92  result[indexOffset + i][1] = derivs[i][1];
93  }
94  } else {
95  // The following is even more difficult for
96  // TwoBowedSurfacesAlignmentParameters than for
97  // BowedSurfaceAlignmentParameters where this text comes from:
98  //
99  // We could give this a meaning by applying frame-to-frame derivatives
100  // to the rigid body part of the parameters (be careful that alpha ~=
101  // dslopeY and beta ~= -dslopeX, but with changed scale!) and keep the
102  // surface structure parameters untouched in local meaning. In this way we
103  // could do higher level alignment and determine 'average' surface
104  // structures for the components.
105  throw cms::Exception("MisMatch") << "TwoBowedSurfacesAlignmentParameters::derivatives: The hit "
106  "alignable must match the "
107  << "aligned one (i.e. bowed surface parameters cannot be used for "
108  "composed alignables)\n";
109  }
110 
111  return result;
112 }
const AlignableSurface & surface() const
Return the Surface (global position and orientation) of the object.
Definition: Alignable.h:132
Alignable * alignable(void) const
Get pointer to corresponding alignable.
align::Scalar width() const
const LocalTrajectoryParameters & localParameters() const
CLHEP::HepMatrix AlgebraicMatrix
AlgebraicVector5 mixedFormatVector() const
BowedSurfaceAlignmentDerivatives BowedDerivs
Give parameters a name (do not change order, see derivatives(..)!)
align::Scalar length() const
constexpr uint16_t localY(uint16_t py, uint16_t n)

◆ print()

void TwoBowedSurfacesAlignmentParameters::print ( void  ) const
virtual

print parameters to screen

Definition at line 215 of file TwoBowedSurfacesAlignmentParameters.cc.

References gather_cfg::cout, and AlignmentParameters::theData.

215  {
216  std::cout << "Contents of TwoBowedSurfacesAlignmentParameters:"
217  << "\nParameters: " << theData->parameters() << "\nCovariance: " << theData->covariance() << std::endl;
218 }

◆ type()

int TwoBowedSurfacesAlignmentParameters::type ( ) const
overridevirtual

◆ ySplit()

double TwoBowedSurfacesAlignmentParameters::ySplit ( ) const
inline

◆ ySplitFromAlignable()

double TwoBowedSurfacesAlignmentParameters::ySplitFromAlignable ( const Alignable ali) const
private

Definition at line 221 of file TwoBowedSurfacesAlignmentParameters.cc.

References Alignable::globalPosition(), and alignCSCRings::r.

221  {
222  if (!ali)
223  return 0.;
224 
225  const align::PositionType pos(ali->globalPosition());
226  const double r = pos.perp();
227 
228  // The returned numbers for TEC are calculated as stated below from
229  // what is found in CMS-NOTE 2003/20.
230  // Note that at that time it was planned to use ST sensors for the outer TEC
231  // while in the end there are only a few of them in the tracker - the others
232  // are HPK. No idea whether there are subtle changes in geometry. The numbers
233  // have been cross checked with y-residuals in data, see
234  // https://hypernews.cern.ch/HyperNews/CMS/get/recoTracking/1018/1/1/2/1/1/1/2/1.html.
235 
236  if (r < 58.) { // Pixel, TIB, TID or TEC ring 1-4
237  edm::LogError("Alignment") << "@SUB=TwoBowedSurfacesAlignmentParameters::ySplitFromAlignable"
238  << "There are no split modules for radii < 58, but r = " << r;
239  return 0.;
240  } else if (fabs(pos.z()) < 118.) { // TOB
241  return 0.;
242  } else if (r > 90.) { // TEC ring 7
243  // W7a Height active= 106.900mm (Tab. 2) (but 106.926 mm p. 40!?)
244  // W7a R min active = 888.400mm (Paragraph 5.5.7)
245  // W7a R max active = W7a R min active + W7a Height active =
246  // = 888.400mm + 106.900mm = 995.300mm
247  // W7b Height active= 94.900mm (Tab. 2) (but 94.876 mm p. 41!?)
248  // W7b R min active = 998.252mm (Paragraph 5.5.8)
249  // W7b R max active = 998.252mm + 94.900mm = 1093.152mm
250  // mean radius module = 0.5*(1093.152mm + 888.400mm) = 990.776mm
251  // mean radius gap = 0.5*(998.252mm + 995.300mm) = 996.776mm
252  // ySplit = (mean radius gap - mean radius module) // local y and r have
253  // same directions!
254  // = 996.776mm - 990.776mm = 6mm
255  return 0.6;
256  } else if (r > 75.) { // TEC ring 6
257  // W6a Height active= 96.100mm (Tab. 2) (but 96.136 mm p. 38!?)
258  // W6a R min active = 727.000mm (Paragraph 5.5.5)
259  // W6a R max active = W6a R min active + W6a Height active =
260  // = 727.000mm + 96.100mm = 823.100mm
261  // W6b Height active= 84.900mm (Tab. 2) (but 84.936 mm p. 39!?)
262  // W6b R min active = 826.060mm (Paragraph 5.5.6)
263  // W6b R max active = 826.060mm + 84.900mm = 910.960mm
264  // mean radius module = 0.5*(910.960mm + 727.000mm) = 818.980mm
265  // mean radius gap = 0.5*(826.060mm + 823.100mm) = 824.580mm
266  // -1: local y and r have opposite directions!
267  // ySplit = -1*(mean radius gap - mean radius module)
268  // = -1*(824.580mm - 818.980mm) = -5.6mm
269  return -0.56;
270  } else { // TEC ring 5 - smaller radii alreay excluded before
271  // W5a Height active= 81.200mm (Tab. 2) (but 81.169 mm p. 36!?)
272  // W5a R min active = 603.200mm (Paragraph 5.5.3)
273  // W5a R max active = W5a R min active + W5a Height active =
274  // = 603.200mm + 81.200mm = 684.400mm
275  // W5b Height active= 63.200mm (Tab. 2) (63.198 mm on p. 37)
276  // W5b R min active = 687.293mm (Abschnitt 5.5.4 der note)
277  // W5b R max active = 687.293mm + 63.200mm = 750.493mm
278  // mean radius module = 0.5*(750.493mm + 603.200mm) = 676.8465mm
279  // mean radius gap = 0.5*(687.293mm + 684.400mm) = 685.8465mm
280  // -1: local y and r have opposite directions!
281  // ySplit = -1*(mean radius gap - mean radius module)
282  // = -1*(685.8465mm - 676.8465mm) = -9mm
283  return -0.9;
284  }
285  // return 0.;
286 }
Log< level::Error, false > LogError
const PositionType & globalPosition() const
Return the global position of the object.
Definition: Alignable.h:135

Member Data Documentation

◆ ySplit_

double TwoBowedSurfacesAlignmentParameters::ySplit_
private

Definition at line 110 of file TwoBowedSurfacesAlignmentParameters.h.

Referenced by apply(), derivatives(), and ySplit().