CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_4_1_8_patch9/src/Geometry/TrackerGeometryBuilder/interface/ProxyStripTopology.h

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