File indexing completed on 2023-10-25 09:31:54
0001 #ifndef Alignment_CommonAlignment_TwoBowedSurfacesAlignmentParameters_h
0002 #define Alignment_CommonAlignment_TwoBowedSurfacesAlignmentParameters_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
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039 class Alignable;
0040 class AlignableDetOrUnitPtr;
0041 class TrajectoryStateOnSurface;
0042
0043 class TwoBowedSurfacesAlignmentParameters : public AlignmentParameters {
0044 public:
0045
0046 typedef BowedSurfaceAlignmentDerivatives BowedDerivs;
0047 enum AlignmentParameterName {
0048
0049 dx1 = BowedDerivs::dx,
0050 dy1 = BowedDerivs::dy,
0051 dz1 = BowedDerivs::dz,
0052 dslopeX1 = BowedDerivs::dslopeX,
0053 dslopeY1 = BowedDerivs::dslopeY,
0054 drotZ1 = BowedDerivs::drotZ,
0055 dsagittaX1 = BowedDerivs::dsagittaX,
0056 dsagittaXY1 = BowedDerivs::dsagittaXY,
0057 dsagittaY1 = BowedDerivs::dsagittaY,
0058
0059 dx2 = BowedDerivs::dx + BowedDerivs::N_PARAM,
0060 dy2 = BowedDerivs::dy + BowedDerivs::N_PARAM,
0061 dz2 = BowedDerivs::dz + BowedDerivs::N_PARAM,
0062 dslopeX2 = BowedDerivs::dslopeX + BowedDerivs::N_PARAM,
0063 dslopeY2 = BowedDerivs::dslopeY + BowedDerivs::N_PARAM,
0064 drotZ2 = BowedDerivs::drotZ + BowedDerivs::N_PARAM,
0065 dsagittaX2 = BowedDerivs::dsagittaX + BowedDerivs::N_PARAM,
0066 dsagittaXY2 = BowedDerivs::dsagittaXY + BowedDerivs::N_PARAM,
0067 dsagittaY2 = BowedDerivs::dsagittaY + BowedDerivs::N_PARAM,
0068
0069 N_PARAM = BowedDerivs::N_PARAM + BowedDerivs::N_PARAM
0070 };
0071
0072
0073 TwoBowedSurfacesAlignmentParameters(Alignable *alignable);
0074
0075
0076 TwoBowedSurfacesAlignmentParameters(Alignable *alignable,
0077 const AlgebraicVector ¶meters,
0078 const AlgebraicSymMatrix &covMatrix);
0079
0080
0081 TwoBowedSurfacesAlignmentParameters(Alignable *alignable,
0082 const AlgebraicVector ¶meters,
0083 const AlgebraicSymMatrix &covMatrix,
0084 const std::vector<bool> &selection);
0085
0086
0087 ~TwoBowedSurfacesAlignmentParameters() override{};
0088 void apply() override;
0089 int type() const override;
0090
0091
0092 TwoBowedSurfacesAlignmentParameters *clone(const AlgebraicVector ¶meters,
0093 const AlgebraicSymMatrix &covMatrix) const override;
0094
0095
0096 TwoBowedSurfacesAlignmentParameters *cloneFromSelected(const AlgebraicVector ¶meters,
0097 const AlgebraicSymMatrix &covMatrix) const override;
0098
0099
0100 AlgebraicMatrix derivatives(const TrajectoryStateOnSurface &tsos, const AlignableDetOrUnitPtr &aliDet) const override;
0101
0102
0103 virtual void print() const;
0104
0105 double ySplit() const { return ySplit_; }
0106
0107 private:
0108 double ySplitFromAlignable(const Alignable *ali) const;
0109
0110 double ySplit_;
0111 };
0112
0113 #endif