CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_5_3_10_patch1/src/Alignment/CommonAlignmentParametrization/interface/TwoBowedSurfacesAlignmentParameters.h

Go to the documentation of this file.
00001 #ifndef Alignment_CommonAlignment_TwoBowedSurfacesAlignmentParameters_h
00002 #define Alignment_CommonAlignment_TwoBowedSurfacesAlignmentParameters_h
00003 
00004 #include "Alignment/CommonAlignment/interface/AlignmentParameters.h"
00005 #include "DataFormats/CLHEP/interface/AlgebraicObjects.h"
00006 #include "CondFormats/Alignment/interface/Definitions.h"
00007 
00008 #include "Alignment/CommonAlignmentParametrization/interface/BowedSurfaceAlignmentDerivatives.h"
00009 
00035 
00036 class Alignable;
00037 class AlignableDetOrUnitPtr;
00038 class TrajectoryStateOnSurface;
00039 
00040 class TwoBowedSurfacesAlignmentParameters : public AlignmentParameters 
00041 {
00042  public:
00044   typedef BowedSurfaceAlignmentDerivatives BowedDerivs;
00045   enum AlignmentParameterName {
00046     // 1st surface
00047     dx1 = BowedDerivs::dx,
00048     dy1 = BowedDerivs::dy,
00049     dz1 = BowedDerivs::dz,
00050     dslopeX1 = BowedDerivs::dslopeX, // NOTE: slope(u) -> halfWidth*tan(beta),
00051     dslopeY1 = BowedDerivs::dslopeY, //       slope(v) -> halfLength*tan(alpha)
00052     drotZ1   = BowedDerivs::drotZ,   //       rot(w)   -> g-scale*gamma
00053     dsagittaX1  = BowedDerivs::dsagittaX,
00054     dsagittaXY1 = BowedDerivs::dsagittaXY,
00055     dsagittaY1  = BowedDerivs::dsagittaY,
00056     // 2nd surface
00057     dx2 = BowedDerivs::dx + BowedDerivs::N_PARAM,
00058     dy2 = BowedDerivs::dy + BowedDerivs::N_PARAM,
00059     dz2 = BowedDerivs::dz + BowedDerivs::N_PARAM,
00060     dslopeX2 = BowedDerivs::dslopeX + BowedDerivs::N_PARAM, // NOTE: slope(u) -> k*tan(beta),
00061     dslopeY2 = BowedDerivs::dslopeY + BowedDerivs::N_PARAM, //       slope(v) -> k*tan(alpha)
00062     drotZ2   = BowedDerivs::drotZ   + BowedDerivs::N_PARAM, //       rot(w)   -> m*gamma
00063     dsagittaX2  = BowedDerivs::dsagittaX  + BowedDerivs::N_PARAM,
00064     dsagittaXY2 = BowedDerivs::dsagittaXY + BowedDerivs::N_PARAM,
00065     dsagittaY2  = BowedDerivs::dsagittaY  + BowedDerivs::N_PARAM,
00066     // number of parameters
00067     N_PARAM = BowedDerivs::N_PARAM + BowedDerivs::N_PARAM
00068   };
00069 
00071   TwoBowedSurfacesAlignmentParameters(Alignable *alignable);
00072 
00074   TwoBowedSurfacesAlignmentParameters(Alignable *alignable, 
00075                                const AlgebraicVector &parameters, 
00076                                const AlgebraicSymMatrix &covMatrix);
00077 
00079   TwoBowedSurfacesAlignmentParameters(Alignable *alignable, const AlgebraicVector &parameters, 
00080                                const AlgebraicSymMatrix &covMatrix, 
00081                                const std::vector<bool> &selection);
00082 
00084   virtual ~TwoBowedSurfacesAlignmentParameters() {};
00085   virtual void apply();
00086   virtual int type() const;
00087 
00089   virtual TwoBowedSurfacesAlignmentParameters* clone(const AlgebraicVector &parameters, 
00090                                                      const AlgebraicSymMatrix &covMatrix) const;
00091  
00093   virtual TwoBowedSurfacesAlignmentParameters*
00094     cloneFromSelected(const AlgebraicVector &parameters,
00095                       const AlgebraicSymMatrix &covMatrix) const;
00096   
00098   virtual AlgebraicMatrix derivatives(const TrajectoryStateOnSurface &tsos,
00099                                       const AlignableDetOrUnitPtr &aliDet) const;
00100 
00102   virtual void print() const;
00103 
00104   double ySplit() const { return ySplit_;}
00105 
00106  private:
00107   double ySplitFromAlignable(const Alignable *ali) const;
00108 
00109   double ySplit_;
00110 };
00111 
00112 #endif
00113