CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_6_1_2_SLHC4_patch1/src/Geometry/CommonTopologies/interface/CSCRadialStripTopology.h

Go to the documentation of this file.
00001 #ifndef _CSCRADIAL_STRIP_TOPOLOGY_H_
00002 #define _CSCRADIAL_STRIP_TOPOLOGY_H_
00003 
00004 #include "Geometry/CommonTopologies/interface/RadialStripTopology.h"
00005 
00028 class CSCRadialStripTopology : public RadialStripTopology {
00029  public:
00030 
00045   CSCRadialStripTopology( int ns, float aw, float dh, float r, float yAx = 1.f, float yMid = 0.);
00046 
00050   virtual ~CSCRadialStripTopology(){}
00051 
00052   // =========================================================
00053   // StripTopology interface - implement pure virtual methods
00054   // =========================================================
00055 
00060   virtual LocalPoint localPosition(float strip) const;
00061 
00075   virtual LocalPoint localPosition(const MeasurementPoint&) const;
00076 
00083   virtual LocalError localError(float strip, float stripErr2) const;
00084 
00090   virtual LocalError localError(const MeasurementPoint&, const MeasurementError&) const;
00091 
00099   virtual float strip(const LocalPoint&) const;
00100 
00101 
00106   virtual float localPitch(const LocalPoint&) const;
00107 
00119   virtual float stripAngle(float strip) const;
00120 
00124   virtual int nstrips() const { return theNumberOfStrips; }
00125 
00129   virtual float stripLength() const { return theDetHeight; }
00130 
00134   virtual float localStripLength(const LocalPoint& ) const;
00135 
00136 
00137   // =========================================================
00138   // Topology interface (not already implemented for 
00139   // StripTopology interface)
00140   // =========================================================
00141 
00142   virtual MeasurementPoint measurementPosition( const LocalPoint& ) const;
00143 
00144   virtual MeasurementError measurementError( const LocalPoint&, const LocalError& ) const;
00145 
00153   virtual int channel( const LocalPoint& ) const;
00154 
00155 
00156   // =========================================================
00157   // RadialStripTopology interface itself
00158   // =========================================================
00159 
00163   float angularWidth() const { return theAngularWidth;}
00164 
00168   virtual float phiPitch(void) const { return angularWidth(); }
00169 
00173   float detHeight() const { return theDetHeight;}
00174 
00178   float yExtentOfStripPlane() const { return theDetHeight; } // same as detHeight()
00179 
00185   float centreToIntersection() const { return theCentreToIntersection; }
00186 
00192   float originToIntersection() const { return (theCentreToIntersection - yCentre); }
00193 
00206   float phiOfOneEdge() const { return thePhiOfOneEdge; }
00207 
00212   float xOfStrip(int strip, float y) const;
00213  
00217   virtual int nearestStrip(const LocalPoint&) const;
00218 
00222   float yAxisOrientation() const { return theYAxisOrientation; }
00223 
00227   float yCentreOfStripPlane() const { return yCentre; }
00228 
00232   float yDistanceToIntersection( float y ) const;
00233 
00234   friend std::ostream & operator<<(std::ostream&, const RadialStripTopology& );
00235 
00236  private:
00237 
00238   int   theNumberOfStrips; // total no. of strips in plane of strips
00239   float theAngularWidth;   // angle subtended by each strip = phi pitch
00240   float theDetHeight;      // length of long symmetry axis = twice the apothem of the enclosing trapezoid
00241   float theCentreToIntersection;  // distance centre of detector face to intersection of edge strips (projected)
00242   float thePhiOfOneEdge;   // local 'phi' of one edge of plane of strips (I choose it negative!)
00243   float theYAxisOrientation; // 1 means y axis going from smaller to larger side, -1 means opposite direction
00244   float yCentre; // Non-zero if offset in local y between midpoint of detector (strip plane) extent and local origin.
00245 };
00246 
00247 #endif
00248 
00249