CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_4_4_5_patch3/src/Geometry/CommonTopologies/interface/RadialStripTopology.h

Go to the documentation of this file.
00001 #ifndef _RADIAL_STRIP_TOPOLOGY_H_
00002 #define _RADIAL_STRIP_TOPOLOGY_H_
00003 
00004 #include "Geometry/CommonTopologies/interface/StripTopology.h"
00005 
00026 class RadialStripTopology : public StripTopology {
00027  public:
00028 
00043   RadialStripTopology( int ns, float aw, float dh, float r, int yAx = 1, float yMid = 0.);
00044 
00048   virtual ~RadialStripTopology(){}
00049 
00050   // =========================================================
00051   // StripTopology interface - implement pure virtual methods
00052   // =========================================================
00053 
00058   virtual LocalPoint localPosition(float strip) const;
00059 
00073   virtual LocalPoint localPosition(const MeasurementPoint&) const;
00074 
00081   virtual LocalError localError(float strip, float stripErr2) const;
00082 
00088   virtual LocalError localError(const MeasurementPoint&, const MeasurementError&) const;
00089 
00097   virtual float strip(const LocalPoint&) const;
00098 
00099 
00106   virtual float pitch() const;
00107 
00112   virtual float localPitch(const LocalPoint&) const;
00113 
00125   virtual float stripAngle(float strip) const;
00126 
00130   virtual int nstrips() const { return theNumberOfStrips; }
00131 
00135   virtual float stripLength() const { return theDetHeight; }
00136 
00140   virtual float localStripLength(const LocalPoint& ) const;
00141 
00142 
00143   // =========================================================
00144   // Topology interface (not already implemented for 
00145   // StripTopology interface)
00146   // =========================================================
00147 
00148   virtual MeasurementPoint measurementPosition( const LocalPoint& ) const;
00149 
00150   virtual MeasurementError measurementError( const LocalPoint&, const LocalError& ) const;
00151 
00159   virtual int channel( const LocalPoint& ) const;
00160 
00161 
00162   // =========================================================
00163   // RadialStripTopology interface itself
00164   // =========================================================
00165 
00169   float angularWidth() const { return theAngularWidth;}
00170 
00174   virtual float phiPitch(void) const { return angularWidth(); }
00175 
00179   float detHeight() const { return theDetHeight;}
00180 
00184   float yExtentOfStripPlane() const { return theDetHeight; } // same as detHeight()
00185 
00191   float centreToIntersection() const { return theCentreToIntersection; }
00192 
00198   float originToIntersection() const { return (theCentreToIntersection - yCentre); }
00199 
00212   float phiOfOneEdge() const { return thePhiOfOneEdge; }
00213 
00218   float xOfStrip(int strip, float y) const;
00219  
00223   virtual int nearestStrip(const LocalPoint&) const;
00224 
00228   int yAxisOrientation() const { return theYAxisOrientation; }
00229 
00233   float yCentreOfStripPlane() const { return yCentre; }
00234 
00238   float yDistanceToIntersection( float y ) const;
00239 
00240   friend std::ostream & operator<<(std::ostream&, const RadialStripTopology& );
00241 
00242  private:
00243 
00244   int   theNumberOfStrips; // total no. of strips in plane of strips
00245   float theAngularWidth;   // angle subtended by each strip = phi pitch
00246   float theDetHeight;      // length of long symmetry axis = twice the apothem of the enclosing trapezoid
00247   float theCentreToIntersection;  // distance centre of detector face to intersection of edge strips (projected)
00248   float thePhiOfOneEdge;   // local 'phi' of one edge of plane of strips (I choose it negative!)
00249   int   theYAxisOrientation; // 1 means y axis going from smaller to larger side, -1 means opposite direction
00250   float yCentre; // Non-zero if offset in local y between midpoint of detector (strip plane) extent and local origin.
00251 };
00252 
00253 #endif
00254 
00255