![]() |
|
|||
File indexing completed on 2024-09-07 04:36:28
0001 #ifndef ABS_OFFSET_RADIAL_STRIP_TOPOLOGY_H 0002 #define ABS_OFFSET_RADIAL_STRIP_TOPOLOGY_H 0003 0004 /** \class OffsetRadialStripTopology 0005 * ABC defining RadialStripTopology with shifted offset so that it 0006 * is not centred on local y (of parent chamber) 0007 * 0008 * The offset is specified as a fraction of the strip angular width. 0009 * 0010 * \author Tim Cox 0011 * 0012 */ 0013 0014 #include "Geometry/CommonTopologies/interface/CSCRadialStripTopology.h" 0015 #include <iosfwd> 0016 0017 class OffsetRadialStripTopology : public CSCRadialStripTopology { 0018 public: 0019 /** Constructor 0020 * Note that yCentre is local y of symmetry centre of strip plane 0021 * _before_ the rotation shift: it is passed directly to RST base. 0022 */ 0023 OffsetRadialStripTopology(int numberOfStrips, 0024 float stripPhiPitch, 0025 float detectorHeight, 0026 float radialDistance, 0027 float stripOffset, 0028 float yCentre); 0029 0030 ~OffsetRadialStripTopology() override {} 0031 0032 /** Fraction of a strip offset of layer relative to 0033 * symmetry axis (local y). (This is an _angular_ value) 0034 */ 0035 virtual float stripOffset(void) const { return theStripOffset; } 0036 0037 /** LocalPoint for a given strip 0038 */ 0039 LocalPoint localPosition(float strip) const override { 0040 // Pass through to base class since otherwise it is shadowed by the localPosition(const MP&). 0041 // Note that base class version is OK because it uses stripAngle() which is overridden in ORST! 0042 // Also note that xOfStrip from base class RST also works for ORST for the same reason. 0043 return CSCRadialStripTopology::localPosition(strip); 0044 } 0045 0046 /** LocalPoint for a given MeasurementPoint <BR> 0047 * 0048 * What's a MeasurementPoint? <BR> 0049 * A MeasurementPoint is a 2-dim object, with the 1st dim specifying the angular position 0050 * in strip widths, and the 2nd dim specifying the fractional distance alone a strip.<BR> 0051 * 0052 * Thus the 1st dimension measures the 0053 * angular position wrt central line of symmetry of detector, 0054 * in units of strip (angular) widths (range 0 to total angle subtended 0055 * by a detector). 0056 * The 2nd dimension measures 0057 * the fractional position along the strip (range -0.5 to +0.5).<BR> 0058 * 0059 * BEWARE! The components are not Cartesian.<BR> 0060 * BEWARE! Neither coordinate may correspond to either local x or local y.<BR> 0061 * BEWARE! This involves ONLY strip-related measurements, not CSC wires! 0062 */ 0063 LocalPoint localPosition(const MeasurementPoint&) const override; 0064 0065 /** 0066 * MeasurementPoint corresponding to given LocalPoint 0067 */ 0068 MeasurementPoint measurementPosition(const LocalPoint&) const override; 0069 0070 /** Strip in which a given LocalPoint lies. This is a float which 0071 * represents the fractional strip position within the detector.<BR> 0072 * Returns zero if the LocalPoint falls at the extreme low edge of the 0073 * detector or BELOW, and float(nstrips) if it falls at the extreme high 0074 * edge or ABOVE. 0075 */ 0076 float strip(const LocalPoint&) const override; 0077 0078 /** 0079 * Angle between strip and local y axis (measured clockwise from y axis) 0080 */ 0081 float stripAngle(float strip) const override; 0082 0083 /** 0084 * Channel number corresponding to a strip or a LocalPoint. 0085 * Sometimes more than one strip is OR'ed into one channel. 0086 */ 0087 virtual int channel(int strip) const = 0; 0088 int channel(const LocalPoint& lp) const override = 0; 0089 0090 friend std::ostream& operator<<(std::ostream&, const OffsetRadialStripTopology&); 0091 0092 private: 0093 /** 0094 * Transform from coordinates wrt strip plane symmetry axes to 0095 * local coordinates 0096 */ 0097 LocalPoint toLocal(float xprime, float yprime) const; 0098 /** 0099 * Transform from local coordinates to coordinates wrt strip plane 0100 * symmetry axes 0101 */ 0102 LocalPoint toPrime(const LocalPoint&) const; 0103 0104 float theStripOffset; // fraction of a strip offset from sym about y 0105 float theCosOff; // cosine of angular offset 0106 float theSinOff; // sine of angular offset 0107 }; 0108 0109 #endif
[ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
This page was automatically generated by the 2.2.1 LXR engine. The LXR team |
![]() ![]() |