00001 #ifndef Geometry_CommonTopologies_SurfaceDeformation_H 00002 #define Geometry_CommonTopologies_SurfaceDeformation_H 00003 00010 00011 #include "DataFormats/GeometryVector/interface/Vector2DBase.h" 00012 #include "DataFormats/GeometryVector/interface/Point2DBase.h" 00013 #include "DataFormats/GeometryVector/interface/LocalTag.h" 00014 #include "Geometry/CommonTopologies/interface/Topology.h" 00015 00016 #include <vector> 00017 00018 class SurfaceDeformation 00019 { 00020 public: 00021 typedef Vector2DBase<double, LocalTag> Local2DVector; 00022 typedef Topology::Local2DPoint Local2DPoint; 00023 typedef Topology::LocalTrackAngles LocalTrackAngles; 00024 typedef Topology::Vector2D Vector2D; 00025 typedef Topology::MathVector2D MathVector2D; 00026 00027 virtual SurfaceDeformation* clone() const = 0; 00028 00030 virtual int type() const = 0; 00031 00038 virtual Local2DVector positionCorrection(const Local2DPoint &localPos, 00039 const LocalTrackAngles &localAngles, 00040 double length, double width) const = 0; 00041 00046 virtual bool add(const SurfaceDeformation &other) = 0; 00047 00048 // Seems like only GeometryAligner and derived classes need access 00049 // to parameters, so we could make it a friend and protect parameters()... 00050 // friend class GeometryAligner; // to be able to call parameters 00051 // protected: 00052 00054 virtual std::vector<double> parameters() const = 0; 00055 00056 }; 00057 00058 #endif