Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:14:22

0001 #ifndef Geometry_CommonTopologies_BowedSurfaceDeformation_H
0002 #define Geometry_CommonTopologies_BowedSurfaceDeformation_H
0003 
0004 /// BowedSurfaceAlignmentParameters
0005 ///
0006 /// Class to apply corrections to local positions resulting
0007 /// from a non-planar surface. The bows are parametrised using
0008 /// Legendre polynomials up to second order, excluding
0009 /// 0th and 1st order that are already treated by local w
0010 /// shift and rotations around local u and v axes.
0011 ///
0012 ///  \author    : Gero Flucke
0013 ///  date       : October 2010
0014 
0015 #include "Geometry/CommonTopologies/interface/SurfaceDeformation.h"
0016 
0017 // already included in the above:
0018 // #include <vector>
0019 
0020 class BowedSurfaceDeformation : public SurfaceDeformation {
0021 public:
0022   /// constructor from sagittae, i.e. coefficients of Legendre polynomials
0023   BowedSurfaceDeformation(double sagittaX, double sagittaXY, double sagittaY)
0024       : theSagittaX(sagittaX), theSagittaY(sagittaY), theSagittaXY(sagittaXY) {}
0025   /// constructor from vector of sagittae, parameters.size() must be
0026   /// between minParameterSize() and maxParameterSize()
0027   BowedSurfaceDeformation(const std::vector<double> &parameters);
0028 
0029   BowedSurfaceDeformation *clone() const override;
0030 
0031   /// specific type, i.e. SurfaceDeformationFactory::kBowedSurface
0032   int type() const override;
0033 
0034   /// correction to add to local position depending on
0035   /// - track parameters in local frame (from LocalTrajectoryParameters):
0036   ///   * track position as Local2DPoint(x,y)
0037   ///   * track angles   as LocalTrackAngles(dxdz, dydz)
0038   /// - length of surface (local y-coordinate)
0039   /// - width of surface (local x-coordinate)
0040   Local2DVector positionCorrection(const Local2DPoint &localPos,
0041                                    const LocalTrackAngles &localAngles,
0042                                    double length,
0043                                    double width) const override;
0044 
0045   /// update information with parameters of 'other',
0046   /// false in case the type or some parameters do not match and thus
0047   /// the information cannot be used (then no changes are done),
0048   /// true if merge was successful
0049   bool add(const SurfaceDeformation &other) override;
0050 
0051   /// parameters, i.e. sagittae as given in the constructor
0052   std::vector<double> parameters() const override;
0053 
0054   // the size
0055   static constexpr unsigned int parSize = 3;
0056   static constexpr unsigned int parameterSize() { return parSize; }
0057 
0058   /// minimum size of vector that is accepted by constructor from vector
0059   static constexpr unsigned int minParameterSize() { return parameterSize(); }
0060   /// maximum size of vector that is accepted by constructor from vector
0061   static constexpr unsigned int maxParameterSize() { return parameterSize(); }
0062 
0063 private:
0064   double theSagittaX;
0065   double theSagittaY;
0066   double theSagittaXY;
0067   // double theRelWidthLowY; // could be used for non-rectangular modules
0068 };
0069 
0070 #endif