Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2021-02-14 13:07:52

0001 #ifndef Geometry_CommonTopologies_TrapezoidalStripTopology_H
0002 #define Geometry_CommonTopologies_TrapezoidalStripTopology_H
0003 
0004 /** Specialised strip topology for rectangular barrel detectors.
0005  *  The strips are parallel to the local Y axis, so X is the precisely
0006  *  measured coordinate.
0007  */
0008 
0009 #include "Geometry/CommonTopologies/interface/StripTopology.h"
0010 
0011 /** Specialization of StripTopology for detectors of symmetric trapezoidal
0012  *  shape. The local Y coordinate is parallel to the central strip,
0013  *  and prpendicular to the paralle sides of the trapezoid.
0014  *  The first and last strips are parallel to the corresponding sides
0015  *  of the trapezoid.
0016  *  The pitch is constant at constant y.
0017  *  This topology makes a non-linear transformation: the pitch is 
0018  *  not constant along the strips.
0019  */
0020 
0021 class TrapezoidalStripTopology final : public StripTopology {
0022 public:
0023   /** constructed from:
0024    *    number of strips
0025    *    pitch in the middle 
0026    *    det heigth (strip length in the middle)
0027    *    radius of circle passing through the middle of the det
0028    *    with center at the crossing of the two sides.
0029    */
0030   TrapezoidalStripTopology(int nstrip, float pitch, float detheight, float r0);
0031 
0032   TrapezoidalStripTopology(int nstrip, float pitch, float detheight, float r0, int yAx);
0033 
0034   using StripTopology::localPosition;
0035   LocalPoint localPosition(float strip) const override;
0036 
0037   LocalPoint localPosition(const MeasurementPoint&) const override;
0038 
0039   using StripTopology::localError;
0040   LocalError localError(float strip, float stripErr2) const override;
0041 
0042   LocalError localError(const MeasurementPoint&, const MeasurementError&) const override;
0043 
0044   float strip(const LocalPoint&) const override;
0045 
0046   MeasurementPoint measurementPosition(const LocalPoint&) const override;
0047 
0048   MeasurementError measurementError(const LocalPoint&, const LocalError&) const override;
0049 
0050   int channel(const LocalPoint&) const override;
0051 
0052   /** Pitch in the middle of the DetUnit */
0053   float pitch() const override;
0054 
0055   float localPitch(const LocalPoint&) const override;
0056 
0057   /** angle between strip and symmetry axis */
0058   float stripAngle(float strip) const override;
0059 
0060   int nstrips() const override;
0061 
0062   /// det heigth (strip length in the middle)
0063   float stripLength() const override { return theDetHeight; }
0064   float localStripLength(const LocalPoint& aLP) const override;
0065 
0066   /** radius of circle passing through the middle of the det
0067    *    with center at the crossing of the two sides.
0068    */
0069   float radius() const { return theDistToBeam; }
0070 
0071 protected:
0072   virtual float shiftOffset(float pitch_fraction);
0073 
0074 private:
0075   int theNumberOfStrips;
0076   float thePitch;  // pitch at the middle of the det. plane
0077   float theOffset;
0078   float theDistToBeam;
0079   float theDetHeight;
0080   int theYAxOr;
0081 };
0082 
0083 #endif