Go to the documentation of this file.00001 #ifndef Geometry_TrackerTopology_ProxyStripTopology_H
00002 #define Geometry_TrackerTopology_ProxyStripTopology_H
00003
00015
00029
00030 #include "DataFormats/GeometryCommonDetAlgo/interface/DeepCopyPointerByClone.h"
00031
00032 #include "Geometry/CommonTopologies/interface/SurfaceDeformation.h"
00033 #include "Geometry/CommonTopologies/interface/StripTopology.h"
00034
00035 class StripGeomDetType;
00036 class BoundPlane;
00037
00038 class ProxyStripTopology : public StripTopology {
00039 public:
00040
00041 ProxyStripTopology(StripGeomDetType* type, BoundPlane * bp);
00042
00043 virtual LocalPoint localPosition( const MeasurementPoint& mp ) const;
00045 virtual LocalPoint localPosition( const MeasurementPoint& mp, const Topology::LocalTrackPred &trkPred ) const;
00046
00047 virtual LocalPoint localPosition( float strip ) const;
00049 virtual LocalPoint localPosition( float strip, const Topology::LocalTrackPred &trkPred) const;
00050
00051 virtual LocalError localError( float strip, float stripErr2 ) const;
00053 virtual LocalError localError( float strip, float stripErr2, const Topology::LocalTrackPred &trkPred) const;
00054
00055 virtual LocalError localError( const MeasurementPoint& mp,
00056 const MeasurementError& me) const;
00058 virtual LocalError localError( const MeasurementPoint& mp,
00059 const MeasurementError& me,
00060 const Topology::LocalTrackPred &trkPred) const;
00061
00062 virtual MeasurementPoint measurementPosition( const LocalPoint& lp) const;
00063 virtual MeasurementPoint measurementPosition( const LocalPoint &lp,
00064 const Topology::LocalTrackAngles &dir) const;
00065
00066 virtual MeasurementError measurementError( const LocalPoint& lp,
00067 const LocalError& le ) const;
00068 virtual MeasurementError measurementError( const LocalPoint &lp, const LocalError &le,
00069 const Topology::LocalTrackAngles &dir) const;
00070
00071 virtual int channel( const LocalPoint& lp) const;
00072 virtual int channel( const LocalPoint &lp, const Topology::LocalTrackAngles &dir) const;
00073
00074 virtual float strip( const LocalPoint& lp) const;
00076 virtual float strip( const LocalPoint& lp, const Topology::LocalTrackAngles &dir ) const;
00077
00078 virtual float pitch() const;
00079 virtual float localPitch( const LocalPoint& lp) const;
00081 virtual float localPitch( const LocalPoint& lp, const Topology::LocalTrackAngles &dir ) const;
00082
00083 virtual float stripAngle( float strip ) const;
00084
00085 virtual int nstrips() const;
00086
00087 virtual float stripLength() const;
00088 virtual float localStripLength(const LocalPoint& lp) const;
00089 virtual float localStripLength( const LocalPoint& lp, const Topology::LocalTrackAngles &dir ) const;
00090
00091 virtual const GeomDetType& type() const;
00092 virtual StripGeomDetType& specificType() const;
00093
00094 const SurfaceDeformation * surfaceDeformation() const {
00095 return theSurfaceDeformation.operator->();
00096 }
00097 virtual void setSurfaceDeformation(const SurfaceDeformation * deformation);
00098
00099 private:
00100
00101 virtual const StripTopology& specificTopology() const;
00104 SurfaceDeformation::Local2DVector
00105 positionCorrection(const LocalPoint &pos, const Topology::LocalTrackAngles &dir) const;
00108 SurfaceDeformation::Local2DVector
00109 positionCorrection(const Topology::LocalTrackPred &trk) const;
00110
00111 StripGeomDetType* theType;
00112 float theLength, theWidth;
00113 DeepCopyPointerByClone<const SurfaceDeformation> theSurfaceDeformation;
00114 };
00115
00116 #endif