#include <OffsetRadialStripTopology.h>
Public Member Functions | |
virtual int | channel (int strip) const =0 |
virtual int | channel (const LocalPoint &lp) const =0 |
virtual LocalPoint | localPosition (const MeasurementPoint &) const |
virtual LocalPoint | localPosition (float strip) 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 () |
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 &) |
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.
Definition at line 17 of file OffsetRadialStripTopology.h.
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 RadialStripTopology::angularWidth(), funct::cos(), LogTrace, funct::sin(), theCosOff, and theSinOff.
: RadialStripTopology( numberOfStrips, stripPhiPitch, detectorHeight, radialDistance, +1, yCentre), theStripOffset( stripOffset ) { float rotate_by = stripOffset * angularWidth(); // now in angular units (radians, I hope) theCosOff = cos(rotate_by); theSinOff = sin(rotate_by); LogTrace("CSCStripTopology|CSC") << "fractional strip offset = " << stripOffset << "\n angle = " << rotate_by << " cos = " << theCosOff << " sin = " << theSinOff; }
virtual OffsetRadialStripTopology::~OffsetRadialStripTopology | ( | ) | [inline, virtual] |
Definition at line 28 of file OffsetRadialStripTopology.h.
{};
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 CSCGangedStripTopology, and CSCUngangedStripTopology.
Referenced by CSCLayerGeometry::channel().
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 RadialStripTopology.
Implemented in CSCGangedStripTopology, and CSCUngangedStripTopology.
virtual LocalPoint OffsetRadialStripTopology::localPosition | ( | float | strip | ) | const [inline, virtual] |
LocalPoint for a given strip
Reimplemented from RadialStripTopology.
Definition at line 37 of file OffsetRadialStripTopology.h.
{ // Pass through to base class since otherwise it is shadowed by the localPosition(const MP&). // Note that base class version is OK because it uses stripAngle() which is overridden in ORST! // Also note that xOfStrip from base class RST also works for ORST for the same reason. return RadialStripTopology::localPosition( strip ); }
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 RadialStripTopology.
Definition at line 42 of file OffsetRadialStripTopology.cc.
References RadialStripTopology::angularWidth(), RadialStripTopology::detHeight(), RadialStripTopology::originToIntersection(), phi, RadialStripTopology::phiOfOneEdge(), funct::tan(), toLocal(), PV2DBase< T, PVType, FrameType >::x(), PV2DBase< T, PVType, FrameType >::y(), and RadialStripTopology::yCentreOfStripPlane().
{ // Local coordinates are (x,y). Coordinates along symmetry axes of strip // plane are (x',y'). These are rotated w.r.t. (x,y) // You might first think you could implement this as follows (cf. measurementPosition below): // LocalPoint lpp = RST::localPosition(MP); // return this->toLocal(lpp); // But this does not work because RST::localPosition makes use of stripAngle() - virtual - and thus // this is not the appropriate angle - it has the offset added, which is unwanted in this case! // So have to implement it directly... // 1st component of MP measures angular position within strip plane float phi = phiOfOneEdge() + mp.x() * angularWidth(); // 2nd component of MP is fractional position along strip, with range +/-0.5, // so distance along strip, measured from mid-point of length of strip, is // mp.y() * (length of strip). // Distance in direction of coordinate y' is // mp.y() * (length of strip) * cos(phi) // where phi is angle between strip and y' axis. // But (length of strip) = detHeight/cos(phi), so float yprime = mp.y() * detHeight() + yCentreOfStripPlane(); float xprime = ( originToIntersection() + yprime ) * tan ( phi ); // Rotate to (x,y) return toLocal(xprime, yprime); }
MeasurementPoint OffsetRadialStripTopology::measurementPosition | ( | const LocalPoint & | lp | ) | const [virtual] |
MeasurementPoint corresponding to given LocalPoint
Reimplemented from RadialStripTopology.
Definition at line 68 of file OffsetRadialStripTopology.cc.
References toPrime().
{ LocalPoint lpp = this->toPrime(lp); // in prime system, aligned with strip plane sym axes return RadialStripTopology::measurementPosition(lpp); // now can use the base class method }
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 RadialStripTopology.
Definition at line 73 of file OffsetRadialStripTopology.cc.
References RadialStripTopology::angularWidth(), RadialStripTopology::nstrips(), RadialStripTopology::originToIntersection(), phi, RadialStripTopology::phiOfOneEdge(), toPrime(), PV3DBase< T, PVType, FrameType >::x(), and PV3DBase< T, PVType, FrameType >::y().
Referenced by CSCGangedStripTopology::channel(), CSCUngangedStripTopology::channel(), CSCLayerGeometry::inside(), and CSCLayerGeometry::strip().
{ LocalPoint pnt = toPrime(lp); float phi = atan2( pnt.x(), pnt.y()+originToIntersection() ); float fstrip = ( phi - phiOfOneEdge() ) / angularWidth(); fstrip = ( fstrip>=0. ? fstrip : 0. ); fstrip = ( fstrip<=nstrips() ? fstrip : nstrips() ); return fstrip; }
float OffsetRadialStripTopology::stripAngle | ( | float | strip | ) | const [virtual] |
Angle between strip and local y axis (measured clockwise from y axis)
Reimplemented from RadialStripTopology.
Definition at line 82 of file OffsetRadialStripTopology.cc.
References RadialStripTopology::angularWidth(), RadialStripTopology::phiOfOneEdge(), and theStripOffset.
Referenced by CSCStripTopology::equationOfStrip(), and CSCLayerGeometry::stripAngle().
{ return ( phiOfOneEdge() + (strip+theStripOffset)*angularWidth() ); }
virtual float OffsetRadialStripTopology::stripOffset | ( | void | ) | const [inline, virtual] |
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(), FWTGeoRecoGeometryESProducer::addCSCGeometry(), operator<<(), CSCLayerGeometry::stripOffset(), and ValidateGeometry::validateCSCLayerGeometry().
{ return theStripOffset; }
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 RadialStripTopology::originToIntersection(), theCosOff, theSinOff, x, and detailsBasic3DVector::y.
Referenced by localPosition().
{ float x = theCosOff * xprime + theSinOff * yprime + originToIntersection() * theSinOff; float y = -theSinOff * xprime + theCosOff * yprime - originToIntersection() * (1. - theCosOff); return LocalPoint(x, y); }
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 RadialStripTopology::originToIntersection(), theCosOff, theSinOff, PV3DBase< T, PVType, FrameType >::x(), and PV3DBase< T, PVType, FrameType >::y().
Referenced by measurementPosition(), and strip().
{ float xprime = theCosOff * lp.x() - theSinOff * lp.y() - originToIntersection() * theSinOff; float yprime = theSinOff * lp.x() + theCosOff * lp.y() - originToIntersection() * (1. - theCosOff); return LocalPoint(xprime, yprime); }
std::ostream& operator<< | ( | std::ostream & | os, |
const OffsetRadialStripTopology & | orst | ||
) | [friend] |
Definition at line 102 of file OffsetRadialStripTopology.cc.
{ os << "OffsetRadialStripTopology isa " << static_cast<const RadialStripTopology&>( orst ) << "fractional strip offset " << orst.stripOffset() << "\ncos(angular offset) " << orst.theCosOff << "\nsin(angular offset) " << orst.theSinOff << std::endl; return os; }
float OffsetRadialStripTopology::theCosOff [private] |
Definition at line 103 of file OffsetRadialStripTopology.h.
Referenced by OffsetRadialStripTopology(), operator<<(), toLocal(), and toPrime().
float OffsetRadialStripTopology::theSinOff [private] |
Definition at line 104 of file OffsetRadialStripTopology.h.
Referenced by OffsetRadialStripTopology(), operator<<(), toLocal(), and toPrime().
float OffsetRadialStripTopology::theStripOffset [private] |
Definition at line 102 of file OffsetRadialStripTopology.h.
Referenced by stripAngle(), and stripOffset().