CMS 3D CMS Logo

List of all members | Public Member Functions | Private Member Functions | Private Attributes | Friends
OffsetRadialStripTopology Class Referenceabstract

#include <OffsetRadialStripTopology.h>

Inheritance diagram for OffsetRadialStripTopology:
CSCRadialStripTopology RadialStripTopology StripTopology Topology CSCStripTopology CSCGangedStripTopology CSCUngangedStripTopology

Public Member Functions

virtual int channel (int strip) const =0
 
virtual int channel (const LocalPoint &lp) const =0
 
virtual LocalPoint localPosition (float strip) const
 
virtual LocalPoint localPosition (const MeasurementPoint &) const
 
virtual MeasurementPoint measurementPosition (const LocalPoint &) const
 
 OffsetRadialStripTopology (int numberOfStrips, float stripPhiPitch, float detectorHeight, float radialDistance, float stripOffset, float yCentre)
 
virtual float strip (const LocalPoint &) const
 
float stripAngle (float strip) const
 
virtual float stripOffset (void) const
 
virtual ~OffsetRadialStripTopology ()
 
- Public Member Functions inherited from CSCRadialStripTopology
float angularWidth () const
 
float centreToIntersection () const
 
 CSCRadialStripTopology (int ns, float aw, float dh, float r, float yAx=1.f, float yMid=0.)
 
float detHeight () const
 
virtual LocalError localError (float strip, float stripErr2) const
 
virtual LocalError localError (const MeasurementPoint &, const MeasurementError &) const
 
virtual float localPitch (const LocalPoint &) const
 
virtual float localStripLength (const LocalPoint &) const
 
virtual MeasurementError measurementError (const LocalPoint &, const LocalError &) const
 
virtual int nearestStrip (const LocalPoint &) const
 
virtual int nstrips () const
 
float originToIntersection () const
 
float phiOfOneEdge () const
 
virtual float phiPitch (void) const
 
virtual float stripLength () const
 
float xOfStrip (int strip, float y) const
 
float yAxisOrientation () const
 
float yCentreOfStripPlane () const
 
float yDistanceToIntersection (float y) const
 
float yExtentOfStripPlane () const
 
virtual ~CSCRadialStripTopology ()
 
- Public Member Functions inherited from RadialStripTopology
virtual float pitch () const final
 
virtual ~RadialStripTopology ()
 
- Public Member Functions inherited from StripTopology
virtual float coveredStrips (const LocalPoint &lp1, const LocalPoint &lp2) const
 
virtual LocalError localError (float strip, float stripErr2, const Topology::LocalTrackPred &) const
 conversion taking also the angle from the predicted track state More...
 
virtual float localPitch (const LocalPoint &lp, const Topology::LocalTrackAngles &) const
 conversion taking also the angle from the track state (LocalTrajectoryParameters) More...
 
virtual LocalPoint localPosition (float strip, const Topology::LocalTrackPred &) const
 conversion taking also the predicted track state More...
 
virtual float localStripLength (const LocalPoint &lp, const Topology::LocalTrackAngles &) const
 conversion taking also the angle from the track state (LocalTrajectoryParameters) More...
 
virtual float strip (const LocalPoint &lp, const Topology::LocalTrackAngles &) const
 conversion taking also the angle from the track state (LocalTrajectoryParameters) More...
 
virtual ~StripTopology ()
 
- Public Member Functions inherited from Topology
virtual int channel (const LocalPoint &lp, const LocalTrackAngles &) const
 conversion taking also the angle from the track state More...
 
virtual LocalError localError (const MeasurementPoint &mp, const MeasurementError &me, const LocalTrackPred &) const
 conversion taking also the angle from the predicted track state More...
 
virtual LocalPoint localPosition (const MeasurementPoint &mp, const LocalTrackPred &) const
 conversion taking also the angle from the predicted track state More...
 
virtual MeasurementError measurementError (const LocalPoint &lp, const LocalError &le, const LocalTrackAngles &) const
 conversion taking also the angle from the track state More...
 
virtual MeasurementPoint measurementPosition (const LocalPoint &lp, const LocalTrackAngles &) const
 conversion taking also the angle from the track state More...
 
virtual ~Topology ()
 

Private Member Functions

LocalPoint toLocal (float xprime, float yprime) const
 
LocalPoint toPrime (const LocalPoint &) const
 

Private Attributes

float theCosOff
 
float theSinOff
 
float theStripOffset
 

Friends

std::ostream & operator<< (std::ostream &, const OffsetRadialStripTopology &)
 

Additional Inherited Members

- Public Types inherited from Topology
typedef Point2DBase< double, LocalTagLocal2DPoint
 
typedef Vector2D::MathVector MathVector2D
 
typedef Basic2DVector< double > Vector2D
 

Detailed Description

ABC defining RadialStripTopology with shifted offset so that it is not centred on local y (of parent chamber)

The offset is specified as a fraction of the strip angular width.

Author
Tim Cox

Definition at line 17 of file OffsetRadialStripTopology.h.

Constructor & Destructor Documentation

OffsetRadialStripTopology::OffsetRadialStripTopology ( int  numberOfStrips,
float  stripPhiPitch,
float  detectorHeight,
float  radialDistance,
float  stripOffset,
float  yCentre 
)

Constructor Note that yCentre is local y of symmetry centre of strip plane before the rotation shift: it is passed directly to RST base.

Definition at line 26 of file OffsetRadialStripTopology.cc.

References CSCRadialStripTopology::angularWidth(), funct::cos(), LogTrace, funct::sin(), theCosOff, and theSinOff.

29  :
30  CSCRadialStripTopology( numberOfStrips, stripPhiPitch, detectorHeight, radialDistance, +1, yCentre),
32 {
33  float rotate_by = stripOffset * angularWidth(); // now in angular units (radians, I hope)
34  theCosOff = cos(rotate_by);
35  theSinOff = sin(rotate_by);
36 
37  LogTrace("CSCStripTopology|CSC") << "fractional strip offset = " << stripOffset <<
38  "\n angle = " << rotate_by <<
39  " cos = " << theCosOff << " sin = " << theSinOff;
40 }
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
CSCRadialStripTopology(int ns, float aw, float dh, float r, float yAx=1.f, float yMid=0.)
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
#define LogTrace(id)
virtual float stripOffset(void) const
virtual OffsetRadialStripTopology::~OffsetRadialStripTopology ( )
inlinevirtual

Definition at line 28 of file OffsetRadialStripTopology.h.

28 {};

Member Function Documentation

virtual int OffsetRadialStripTopology::channel ( int  strip) const
pure virtual

Channel number corresponding to a strip or a LocalPoint. Sometimes more than one strip is OR'ed into one channel.

Implemented in CSCUngangedStripTopology, and CSCGangedStripTopology.

Referenced by CSCLayerGeometry::channel(), and localPosition().

virtual int OffsetRadialStripTopology::channel ( const LocalPoint lp) const
pure virtual

Channel number corresponding to a given LocalPoint.
This is effectively an integer version of strip(), with range 0 to nstrips-1.
LocalPoints outside the detector strip plane will be considered as contributing to the edge channels 0 or nstrips-1.

Reimplemented from CSCRadialStripTopology.

Implemented in CSCUngangedStripTopology, and CSCGangedStripTopology.

virtual LocalPoint OffsetRadialStripTopology::localPosition ( float  strip) const
inlinevirtual

LocalPoint for a given strip

Reimplemented from CSCRadialStripTopology.

Definition at line 37 of file OffsetRadialStripTopology.h.

References channel(), CSCRadialStripTopology::localPosition(), measurementPosition(), operator<<, strip(), stripAngle(), toLocal(), and toPrime().

37  {
38  // Pass through to base class since otherwise it is shadowed by the localPosition(const MP&).
39  // Note that base class version is OK because it uses stripAngle() which is overridden in ORST!
40  // Also note that xOfStrip from base class RST also works for ORST for the same reason.
42  }
virtual LocalPoint localPosition(float strip) const
virtual float strip(const LocalPoint &) const
LocalPoint OffsetRadialStripTopology::localPosition ( const MeasurementPoint mp) const
virtual

LocalPoint for a given MeasurementPoint

What's a MeasurementPoint?
A MeasurementPoint is a 2-dim object, with the 1st dim specifying the angular position in strip widths, and the 2nd dim specifying the fractional distance alone a strip.

Thus the 1st dimension measures the angular position wrt central line of symmetry of detector, in units of strip (angular) widths (range 0 to total angle subtended by a detector). The 2nd dimension measures the fractional position along the strip (range -0.5 to +0.5).

BEWARE! The components are not Cartesian.
BEWARE! Neither coordinate may correspond to either local x or local y.
BEWARE! This involves ONLY strip-related measurements, not CSC wires!

Reimplemented from CSCRadialStripTopology.

Definition at line 42 of file OffsetRadialStripTopology.cc.

References CSCRadialStripTopology::angularWidth(), CSCRadialStripTopology::detHeight(), CSCRadialStripTopology::originToIntersection(), phi, CSCRadialStripTopology::phiOfOneEdge(), funct::tan(), toLocal(), PV2DBase< T, PVType, FrameType >::x(), PV2DBase< T, PVType, FrameType >::y(), and CSCRadialStripTopology::yCentreOfStripPlane().

42  {
43  // Local coordinates are (x,y). Coordinates along symmetry axes of strip
44  // plane are (x',y'). These are rotated w.r.t. (x,y)
45 
46  // You might first think you could implement this as follows (cf. measurementPosition below):
47  // LocalPoint lpp = RST::localPosition(MP);
48  // return this->toLocal(lpp);
49  // But this does not work because RST::localPosition makes use of stripAngle() - virtual - and thus
50  // this is not the appropriate angle - it has the offset added, which is unwanted in this case!
51  // So have to implement it directly...
52 
53  // 1st component of MP measures angular position within strip plane
54  float phi = phiOfOneEdge() + mp.x() * angularWidth();
55  // 2nd component of MP is fractional position along strip, with range +/-0.5,
56  // so distance along strip, measured from mid-point of length of strip, is
57  // mp.y() * (length of strip).
58  // Distance in direction of coordinate y' is
59  // mp.y() * (length of strip) * cos(phi)
60  // where phi is angle between strip and y' axis.
61  // But (length of strip) = detHeight/cos(phi), so
62  float yprime = mp.y() * detHeight() + yCentreOfStripPlane();
63  float xprime = ( originToIntersection() + yprime ) * tan ( phi );
64  // Rotate to (x,y)
65  return toLocal(xprime, yprime);
66 }
LocalPoint toLocal(float xprime, float yprime) const
T y() const
Definition: PV2DBase.h:46
Tan< T >::type tan(const T &t)
Definition: Tan.h:22
T x() const
Definition: PV2DBase.h:45
MeasurementPoint OffsetRadialStripTopology::measurementPosition ( const LocalPoint lp) const
virtual

MeasurementPoint corresponding to given LocalPoint

Reimplemented from CSCRadialStripTopology.

Definition at line 68 of file OffsetRadialStripTopology.cc.

References CSCRadialStripTopology::measurementPosition(), and toPrime().

Referenced by localPosition().

68  {
69  LocalPoint lpp = this->toPrime(lp); // in prime system, aligned with strip plane sym axes
70  return CSCRadialStripTopology::measurementPosition(lpp); // now can use the base class method
71 }
LocalPoint toPrime(const LocalPoint &) const
virtual MeasurementPoint measurementPosition(const LocalPoint &) const
float OffsetRadialStripTopology::strip ( const LocalPoint lp) const
virtual

Strip in which a given LocalPoint lies. This is a float which represents the fractional strip position within the detector.
Returns zero if the LocalPoint falls at the extreme low edge of the detector or BELOW, and float(nstrips) if it falls at the extreme high edge or ABOVE.

Reimplemented from CSCRadialStripTopology.

Definition at line 73 of file OffsetRadialStripTopology.cc.

References CSCRadialStripTopology::angularWidth(), CSCRadialStripTopology::nstrips(), CSCRadialStripTopology::originToIntersection(), phi, CSCRadialStripTopology::phiOfOneEdge(), toPrime(), PV3DBase< T, PVType, FrameType >::x(), and PV3DBase< T, PVType, FrameType >::y().

Referenced by CSCGangedStripTopology::channel(), CSCUngangedStripTopology::channel(), CSCLayerGeometry::inside(), localPosition(), and CSCLayerGeometry::strip().

73  {
74  LocalPoint pnt = toPrime(lp);
75  float phi = atan2( pnt.x(), pnt.y()+originToIntersection() );
76  float fstrip = ( phi - phiOfOneEdge() ) / angularWidth();
77  fstrip = ( fstrip>=0. ? fstrip : 0. );
78  fstrip = ( fstrip<=nstrips() ? fstrip : nstrips() );
79  return fstrip;
80 }
virtual int nstrips() const
T y() const
Definition: PV3DBase.h:63
LocalPoint toPrime(const LocalPoint &) const
T x() const
Definition: PV3DBase.h:62
float OffsetRadialStripTopology::stripAngle ( float  strip) const
virtual
virtual float OffsetRadialStripTopology::stripOffset ( void  ) const
inlinevirtual

Fraction of a strip offset of layer relative to symmetry axis (local y). (This is an angular value)

Definition at line 33 of file OffsetRadialStripTopology.h.

References theStripOffset.

Referenced by FWRecoGeometryESProducer::addCSCGeometry(), operator<<(), CSCLayerGeometry::stripOffset(), and ValidateGeometry::validateCSCLayerGeometry().

LocalPoint OffsetRadialStripTopology::toLocal ( float  xprime,
float  yprime 
) const
private

Transform from coordinates wrt strip plane symmetry axes to local coordinates

Definition at line 86 of file OffsetRadialStripTopology.cc.

References CSCRadialStripTopology::originToIntersection(), theCosOff, theSinOff, x, and y.

Referenced by localPosition().

86  {
87  float x = theCosOff * xprime + theSinOff * yprime
89  float y = -theSinOff * xprime + theCosOff * yprime
90  - originToIntersection() * (1. - theCosOff);
91  return LocalPoint(x, y);
92 }
Point3DBase< Scalar, LocalTag > LocalPoint
Definition: Definitions.h:32
LocalPoint OffsetRadialStripTopology::toPrime ( const LocalPoint lp) const
private

Transform from local coordinates to coordinates wrt strip plane symmetry axes

Definition at line 94 of file OffsetRadialStripTopology.cc.

References CSCRadialStripTopology::originToIntersection(), theCosOff, theSinOff, PV3DBase< T, PVType, FrameType >::x(), and PV3DBase< T, PVType, FrameType >::y().

Referenced by localPosition(), measurementPosition(), and strip().

94  {
95  float xprime = theCosOff * lp.x() - theSinOff * lp.y()
97  float yprime = theSinOff * lp.x() + theCosOff * lp.y()
98  - originToIntersection() * (1. - theCosOff);
99  return LocalPoint(xprime, yprime);
100 }
Point3DBase< Scalar, LocalTag > LocalPoint
Definition: Definitions.h:32
T y() const
Definition: PV3DBase.h:63
T x() const
Definition: PV3DBase.h:62

Friends And Related Function Documentation

std::ostream& operator<< ( std::ostream &  os,
const OffsetRadialStripTopology orst 
)
friend

Definition at line 102 of file OffsetRadialStripTopology.cc.

Referenced by localPosition().

103 {
104  os << "OffsetRadialStripTopology isa "
105  << static_cast<const CSCRadialStripTopology&>( orst )
106  << "fractional strip offset " << orst.stripOffset()
107  << "\ncos(angular offset) " << orst.theCosOff
108  << "\nsin(angular offset) " << orst.theSinOff << std::endl;
109  return os;
110 }
virtual float stripOffset(void) const

Member Data Documentation

float OffsetRadialStripTopology::theCosOff
private
float OffsetRadialStripTopology::theSinOff
private
float OffsetRadialStripTopology::theStripOffset
private

Definition at line 102 of file OffsetRadialStripTopology.h.

Referenced by stripAngle(), and stripOffset().