Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-09-07 04:34:29

0001 #ifndef Alignment_CommonAlignment_BowedSurfaceAlignmentParameters_h
0002 #define Alignment_CommonAlignment_BowedSurfaceAlignmentParameters_h
0003 
0004 #include "Alignment/CommonAlignment/interface/AlignmentParameters.h"
0005 #include "CondFormats/Alignment/interface/Definitions.h"
0006 #include "DataFormats/CLHEP/interface/AlgebraicObjects.h"
0007 
0008 #include "Alignment/CommonAlignmentParametrization/interface/BowedSurfaceAlignmentDerivatives.h"
0009 
0010 /// \class BowedSurfaceAlignmentParameters
0011 ///
0012 /// Concrete class for alignment parameters and associated quantities
0013 /// [derived from AlignmentParameters].
0014 /// The number of parameters N_PARAM is 9
0015 ///  - 3 translations
0016 ///  - 3 rotations/slopes
0017 ///  - 3 bows/sagittas (u, v and mixed term)
0018 ///
0019 ///  $Date: 2008/09/02 15:08:12 $
0020 ///  $Revision: 1.13 $
0021 /// (last update by $Author: flucke $)
0022 
0023 class Alignable;
0024 class AlignableDetOrUnitPtr;
0025 class TrajectoryStateOnSurface;
0026 
0027 class BowedSurfaceAlignmentParameters : public AlignmentParameters {
0028 public:
0029   /// Give parameters a name
0030   typedef BowedSurfaceAlignmentDerivatives BowedDerivs;
0031   enum AlignmentParameterName {
0032     dx = BowedDerivs::dx,
0033     dy = BowedDerivs::dy,
0034     dz = BowedDerivs::dz,
0035     dslopeX = BowedDerivs::dslopeX,  // NOTE: slope(u) -> k*tan(beta),
0036     dslopeY = BowedDerivs::dslopeY,  //       slope(v) -> l*tan(alpha)
0037     drotZ = BowedDerivs::drotZ,      //       rot(w)   -> m*gamma
0038     dsagittaX = BowedDerivs::dsagittaX,
0039     dsagittaXY = BowedDerivs::dsagittaXY,
0040     dsagittaY = BowedDerivs::dsagittaY,
0041     N_PARAM = BowedDerivs::N_PARAM
0042   };
0043 
0044   /// Constructor with empty parameters/covariance
0045   BowedSurfaceAlignmentParameters(Alignable *alignable);
0046 
0047   /// Constructor for full set of parameters
0048   BowedSurfaceAlignmentParameters(Alignable *alignable,
0049                                   const AlgebraicVector &parameters,
0050                                   const AlgebraicSymMatrix &covMatrix);
0051 
0052   /// Constructor for selection
0053   BowedSurfaceAlignmentParameters(Alignable *alignable,
0054                                   const AlgebraicVector &parameters,
0055                                   const AlgebraicSymMatrix &covMatrix,
0056                                   const std::vector<bool> &selection);
0057 
0058   /// Destructor
0059   ~BowedSurfaceAlignmentParameters() override {}
0060   void apply() override;
0061   int type() const override;
0062 
0063   /// Clone all parameters (for update of parameters)
0064   BowedSurfaceAlignmentParameters *clone(const AlgebraicVector &parameters,
0065                                          const AlgebraicSymMatrix &covMatrix) const override;
0066 
0067   /// Clone selected parameters (for update of parameters)
0068   BowedSurfaceAlignmentParameters *cloneFromSelected(const AlgebraicVector &parameters,
0069                                                      const AlgebraicSymMatrix &covMatrix) const override;
0070 
0071   /// Get all derivatives
0072   AlgebraicMatrix derivatives(const TrajectoryStateOnSurface &tsos, const AlignableDetOrUnitPtr &aliDet) const override;
0073 
0074   /// Get translation parameters in double precision
0075   align::LocalVector translation() const;
0076 
0077   /// Get rotation parameters
0078   align::EulerAngles rotation() const;
0079 
0080   /// print parameters to screen
0081   void print() const;
0082 };
0083 
0084 #endif