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
00047 dx1 = BowedDerivs::dx,
00048 dy1 = BowedDerivs::dy,
00049 dz1 = BowedDerivs::dz,
00050 dslopeX1 = BowedDerivs::dslopeX,
00051 dslopeY1 = BowedDerivs::dslopeY,
00052 drotZ1 = BowedDerivs::drotZ,
00053 dsagittaX1 = BowedDerivs::dsagittaX,
00054 dsagittaXY1 = BowedDerivs::dsagittaXY,
00055 dsagittaY1 = BowedDerivs::dsagittaY,
00056
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,
00061 dslopeY2 = BowedDerivs::dslopeY + BowedDerivs::N_PARAM,
00062 drotZ2 = BowedDerivs::drotZ + BowedDerivs::N_PARAM,
00063 dsagittaX2 = BowedDerivs::dsagittaX + BowedDerivs::N_PARAM,
00064 dsagittaXY2 = BowedDerivs::dsagittaXY + BowedDerivs::N_PARAM,
00065 dsagittaY2 = BowedDerivs::dsagittaY + BowedDerivs::N_PARAM,
00066
00067 N_PARAM = BowedDerivs::N_PARAM + BowedDerivs::N_PARAM
00068 };
00069
00071 TwoBowedSurfacesAlignmentParameters(Alignable *alignable);
00072
00074 TwoBowedSurfacesAlignmentParameters(Alignable *alignable,
00075 const AlgebraicVector ¶meters,
00076 const AlgebraicSymMatrix &covMatrix);
00077
00079 TwoBowedSurfacesAlignmentParameters(Alignable *alignable, const AlgebraicVector ¶meters,
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 ¶meters,
00090 const AlgebraicSymMatrix &covMatrix) const;
00091
00093 virtual TwoBowedSurfacesAlignmentParameters*
00094 cloneFromSelected(const AlgebraicVector ¶meters,
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