00001 #ifndef ABS_OFFSET_RADIAL_STRIP_TOPOLOGY_H 00002 #define ABS_OFFSET_RADIAL_STRIP_TOPOLOGY_H 00003 00014 #include "Geometry/CommonTopologies/interface/RadialStripTopology.h" 00015 #include <iosfwd> 00016 00017 class OffsetRadialStripTopology : public RadialStripTopology 00018 { 00019 public: 00020 00025 OffsetRadialStripTopology( int numberOfStrips, float stripPhiPitch, 00026 float detectorHeight, float radialDistance, float stripOffset, float yCentre); 00027 00028 virtual ~OffsetRadialStripTopology(){}; 00029 00033 virtual float stripOffset( void ) const { return theStripOffset; } 00034 00037 virtual LocalPoint localPosition(float strip) const { 00038 // Pass through to base class since otherwise it is shadowed by the localPosition(const MP&). 00039 // Note that base class version is OK because it uses stripAngle() which is overridden in ORST! 00040 // Also note that xOfStrip from base class RST also works for ORST for the same reason. 00041 return RadialStripTopology::localPosition( strip ); 00042 } 00043 00061 virtual LocalPoint localPosition(const MeasurementPoint&) const; 00062 00066 virtual MeasurementPoint measurementPosition( const LocalPoint& ) const; 00067 00074 virtual float strip(const LocalPoint&) const; 00075 00079 float stripAngle(float strip) const; 00080 00085 virtual int channel(int strip) const = 0; 00086 virtual int channel(const LocalPoint& lp) const = 0; 00087 00088 friend std::ostream & operator<<(std::ostream &, const OffsetRadialStripTopology &); 00089 00090 private: 00095 LocalPoint toLocal(float xprime, float yprime) const; 00100 LocalPoint toPrime(const LocalPoint&) const; 00101 00102 float theStripOffset; // fraction of a strip offset from sym about y 00103 float theCosOff; // cosine of angular offset 00104 float theSinOff; // sine of angular offset 00105 }; 00106 00107 #endif 00108