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