Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:14:22

0001 #ifndef Geometry_CommonTopologies_GEMStripTopology_H
0002 #define Geometry_CommonTopologies_GEMStripTopology_H
0003 
0004 /** \class GEMStripTopology
0005  *  based on CSCRadialStripTopology and TrapezoidalStripTopology
0006  *  \author Hyunyong Kim - TAMU
0007  */
0008 
0009 #include "Geometry/CommonTopologies/interface/StripTopology.h"
0010 
0011 class GEMStripTopology final : public StripTopology {
0012 public:
0013   GEMStripTopology(int ns, float aw, float dh, float r0);
0014   GEMStripTopology(int ns, float aw, float dh, float r0, float yAx);
0015   ~GEMStripTopology() override {}
0016 
0017   using StripTopology::localPosition;
0018   LocalPoint localPosition(float strip) const override;
0019 
0020   LocalPoint localPosition(const MeasurementPoint&) const override;
0021 
0022   using StripTopology::localError;
0023   LocalError localError(float strip, float stripErr2) const override;
0024   LocalError localError(const MeasurementPoint&, const MeasurementError&) const override;
0025 
0026   float strip(const LocalPoint&) const override;
0027 
0028   int nearestStrip(const LocalPoint&) const;
0029 
0030   MeasurementPoint measurementPosition(const LocalPoint&) const override;
0031 
0032   MeasurementError measurementError(const LocalPoint&, const LocalError&) const override;
0033 
0034   int channel(const LocalPoint&) const override;
0035 
0036   float phiPitch(void) const { return angularWidth(); }
0037 
0038   float pitch() const override;
0039 
0040   float localPitch(const LocalPoint&) const override;
0041 
0042   float stripAngle(float strip) const override;
0043 
0044   int nstrips() const override { return numberOfStrips_; }
0045 
0046   float stripLength() const override { return detHeight_; }
0047 
0048   float localStripLength(const LocalPoint&) const override;
0049 
0050   float angularWidth() const { return angularWidth_; }
0051   float detHeight() const { return detHeight_; }
0052   float yExtentOfStripPlane() const { return detHeight_; }
0053   float centreToIntersection() const { return centreToIntersection_; }
0054   float radius() const { return centreToIntersection_; }
0055   float originToIntersection() const { return (centreToIntersection_ - yCentre_); }
0056 
0057   float yDistanceToIntersection(float y) const;
0058   float xOfStrip(int strip, float y) const;
0059   float yAxisOrientation() const { return yAxisOrientation_; }
0060   float phiOfOneEdge() const { return phiOfOneEdge_; }
0061   float yCentreOfStripPlane() const { return yCentre_; }
0062 
0063 private:
0064   int numberOfStrips_;          // total no. of strips in plane of strips
0065   float angularWidth_;          // angle subtended by each strip = phi pitch
0066   float detHeight_;             // length of long symmetry axis = twice the apothem of the enclosing trapezoid
0067   float centreToIntersection_;  // distance centre of detector face to intersection of edge strips (projected)
0068   float phiOfOneEdge_;          // local 'phi' of one edge of plane of strips (I choose it negative!)
0069   float yAxisOrientation_;      // 1 means y axis going from smaller to larger side, -1 means opposite direction
0070   float yCentre_;  // Non-zero if offset in local y between midpoint of detector (strip plane) extent and local origin.
0071 };
0072 
0073 #endif