00001 #ifndef Geometry_CommonTopologies_StripTopology_H 00002 #define Geometry_CommonTopologies_StripTopology_H 00003 00004 #include "Geometry/CommonTopologies/interface/Topology.h" 00005 00011 class StripTopology : public Topology { 00012 public: 00013 00014 virtual ~StripTopology() {} 00015 00016 // GF: I hate the stupid hiding feature of C++, see 00017 // https://www.parashift.com/c%2B%2B-faq-lite/strange-inheritance.html#faq-23.9 00018 using Topology::localPosition; 00019 virtual LocalPoint localPosition( float strip ) const = 0; 00021 virtual LocalPoint localPosition( float strip, const Topology::LocalTrackPred &/*trkPred*/) const { 00022 return localPosition(strip); 00023 } 00024 virtual LocalError localError( float strip, float stripErr2 ) const = 0; 00025 00027 virtual LocalError localError( float strip, float stripErr2, 00028 const Topology::LocalTrackPred &/*trkPred*/) const { 00029 return localError(strip, stripErr2); 00030 } 00031 using Topology::localError; // see comment about hiding an C++ 'using' feature above 00032 virtual float strip( const LocalPoint& ) const = 0; 00033 00035 virtual float strip( const LocalPoint& lp, const Topology::LocalTrackAngles &/*ltp*/ ) const { 00036 return strip(lp); 00037 } 00038 virtual float pitch() const = 0; 00039 virtual float localPitch( const LocalPoint& ) const = 0; 00040 00042 virtual float localPitch( const LocalPoint& lp, const Topology::LocalTrackAngles &/*ltp*/ ) const { 00043 return localPitch(lp); 00044 } 00045 virtual float stripAngle( float strip ) const = 0; 00046 00047 virtual int nstrips() const = 0; 00048 00049 virtual float stripLength() const = 0; 00050 virtual float localStripLength(const LocalPoint& aLP) const = 0; 00051 00053 virtual float localStripLength( const LocalPoint& lp, const Topology::LocalTrackAngles &/*ltp*/ ) const { 00054 return localStripLength(lp); 00055 } 00056 00057 }; 00058 00059 #endif