CMS 3D CMS Logo

List of all members | Public Member Functions | Protected Member Functions | Private Attributes
TrapezoidalStripTopology Class Referencefinal

#include <TrapezoidalStripTopology.h>

Inheritance diagram for TrapezoidalStripTopology:
StripTopology Topology

Public Member Functions

int channel (const LocalPoint &) const override
 
LocalError localError (float strip, float stripErr2) const override
 
LocalError localError (const MeasurementPoint &, const MeasurementError &) const override
 
float localPitch (const LocalPoint &) const override
 
LocalPoint localPosition (float strip) const override
 
LocalPoint localPosition (const MeasurementPoint &) const override
 
float localStripLength (const LocalPoint &aLP) const override
 
MeasurementError measurementError (const LocalPoint &, const LocalError &) const override
 
MeasurementPoint measurementPosition (const LocalPoint &) const override
 
int nstrips () const override
 
float pitch () const override
 
float radius () const
 
float strip (const LocalPoint &) const override
 
float stripAngle (float strip) const override
 
float stripLength () const override
 det heigth (strip length in the middle) More...
 
 TrapezoidalStripTopology (int nstrip, float pitch, float detheight, float r0)
 
 TrapezoidalStripTopology (int nstrip, float pitch, float detheight, float r0, int yAx)
 
- 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...
 
 ~StripTopology () override
 
- 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 ()
 

Protected Member Functions

virtual float shiftOffset (float pitch_fraction)
 

Private Attributes

float theDetHeight
 
float theDistToBeam
 
int theNumberOfStrips
 
float theOffset
 
float thePitch
 
int theYAxOr
 

Additional Inherited Members

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

Detailed Description

Specialised strip topology for rectangular barrel detectors. The strips are parallel to the local Y axis, so X is the precisely measured coordinate.Specialization of StripTopology for detectors of symmetric trapezoidal shape. The local Y coordinate is parallel to the central strip, and prpendicular to the paralle sides of the trapezoid. The first and last strips are parallel to the corresponding sides of the trapezoid. The pitch is constant at constant y. This topology makes a non-linear transformation: the pitch is not constant along the strips.

Definition at line 21 of file TrapezoidalStripTopology.h.

Constructor & Destructor Documentation

TrapezoidalStripTopology::TrapezoidalStripTopology ( int  nstrip,
float  pitch,
float  detheight,
float  r0 
)

constructed from: number of strips pitch in the middle det heigth (strip length in the middle) radius of circle passing through the middle of the det with center at the crossing of the two sides.

Definition at line 7 of file TrapezoidalStripTopology.cc.

References gather_cfg::cout, theNumberOfStrips, theOffset, thePitch, and theYAxOr.

10  theYAxOr = 1;
11 #ifdef VERBOSE
12  cout << "Constructing TrapezoidalStripTopology with"
13  << " nstrips = " << ns << " pitch = " << p << " length = " << l << " r0 =" << r0 << endl;
14 #endif
15 }
TrapezoidalStripTopology::TrapezoidalStripTopology ( int  nstrip,
float  pitch,
float  detheight,
float  r0,
int  yAx 
)

Definition at line 17 of file TrapezoidalStripTopology.cc.

References gather_cfg::cout, theNumberOfStrips, theOffset, and thePitch.

20 #ifdef VERBOSE
21  cout << "Constructing TrapezoidalStripTopology with"
22  << " nstrips = " << ns << " pitch = " << p << " length = " << l << " r0 =" << r0 << " yAxOrientation =" << yAx
23  << endl;
24 #endif
25 }

Member Function Documentation

int TrapezoidalStripTopology::channel ( const LocalPoint lp) const
overridevirtual

Implements Topology.

Definition at line 102 of file TrapezoidalStripTopology.cc.

References min(), strip(), and theNumberOfStrips.

Referenced by GEMSignalModel::simulateClustering().

102  {
103  return std::min(int(strip(lp)), theNumberOfStrips - 1);
104 }
float strip(const LocalPoint &) const override
T min(T a, T b)
Definition: MathUtil.h:58
LocalError TrapezoidalStripTopology::localError ( float  strip,
float  stripErr2 
) const
overridevirtual

Implements StripTopology.

Definition at line 37 of file TrapezoidalStripTopology.cc.

References theDetHeight, theDistToBeam, theOffset, thePitch, and theYAxOr.

37  {
38  float lt, lc2, ls2, lslc;
39  float localL2, localP2;
40  float sl2, sp2;
41  // angle from strip to local frame (see CMS TN / 95-170)
43  lc2 = 1.f / (1. + lt * lt);
44  lslc = lt * lc2;
45  ls2 = 1.f - lc2;
46  localL2 = theDetHeight * theDetHeight / lc2;
47  localP2 = thePitch * thePitch * lc2;
48  sl2 = localL2 / 12.;
49  sp2 = stripErr2 * localP2;
50  return LocalError(lc2 * sp2 + ls2 * sl2, lslc * (sp2 - sl2), ls2 * sp2 + lc2 * sl2);
51 }
float strip(const LocalPoint &) const override
LocalError TrapezoidalStripTopology::localError ( const MeasurementPoint mp,
const MeasurementError merr 
) const
overridevirtual

Implements Topology.

Definition at line 53 of file TrapezoidalStripTopology.cc.

References localPitch(), localPosition(), mathSSE::sqrt(), theDetHeight, theDistToBeam, theOffset, thePitch, theYAxOr, MeasurementError::uu(), MeasurementError::uv(), MeasurementError::vv(), and PV2DBase< T, PVType, FrameType >::x().

53  {
54  float lt, lc2, ls2, lslc;
55  float localL, localP;
56  float sl2, sp2, spl;
57  // angle from strip to local frame (see CMS TN / 95-170)
58  lt = -(mp.x() * thePitch + theOffset) * theYAxOr / theDistToBeam;
59  lc2 = 1. / (1. + lt * lt);
60  lslc = lt * lc2;
61  ls2 = 1.f - lc2;
62  localL = theDetHeight / std::sqrt(lc2);
63  localP = localPitch(localPosition(mp));
64  sp2 = merr.uu() * localP * localP;
65  sl2 = merr.vv() * localL * localL;
66  spl = merr.uv() * localP * localL;
67  return LocalError(lc2 * sp2 + ls2 * sl2 - 2 * lslc * spl,
68  lslc * (sp2 - sl2) + (lc2 - ls2) * spl,
69  ls2 * sp2 + lc2 * sl2 + 2 * lslc * spl);
70 }
float vv() const
LocalPoint localPosition(float strip) const override
float localPitch(const LocalPoint &) const override
T sqrt(T t)
Definition: SSEVec.h:19
float uu() const
T x() const
Definition: PV2DBase.h:43
float uv() const
float TrapezoidalStripTopology::localPitch ( const LocalPoint lp) const
overridevirtual

Implements StripTopology.

Definition at line 108 of file TrapezoidalStripTopology.cc.

References f, mathSSE::sqrt(), theDistToBeam, thePitch, theYAxOr, x, PV3DBase< T, PVType, FrameType >::x(), y, and PV3DBase< T, PVType, FrameType >::y().

Referenced by localError(), and measurementError().

108  {
109  float x = lp.x();
110  float y = theYAxOr * lp.y() + theDistToBeam;
111  return thePitch * y / (theDistToBeam * std::sqrt(1.f + x * x / (y * y)));
112 }
T y() const
Definition: PV3DBase.h:60
T sqrt(T t)
Definition: SSEVec.h:19
double f[11][100]
T x() const
Definition: PV3DBase.h:59
LocalPoint TrapezoidalStripTopology::localPosition ( float  strip) const
overridevirtual
LocalPoint TrapezoidalStripTopology::localPosition ( const MeasurementPoint mp) const
overridevirtual
float TrapezoidalStripTopology::localStripLength ( const LocalPoint aLP) const
overridevirtual

Implements StripTopology.

Definition at line 125 of file TrapezoidalStripTopology.cc.

References f, mathSSE::sqrt(), theDetHeight, theDistToBeam, theYAxOr, PV3DBase< T, PVType, FrameType >::x(), and PV3DBase< T, PVType, FrameType >::y().

Referenced by stripLength().

125  {
126  float ltan = -lp.x() / (theYAxOr * lp.y() + theDistToBeam) * theYAxOr;
127  float localL = theDetHeight * std::sqrt(1.f + ltan * ltan);
128  // float lcos2 = 1.f/(1.f+ltan*ltan);
129  // float localL = theDetHeight / std::sqrt(lcos2);
130 
131  return localL;
132 }
T sqrt(T t)
Definition: SSEVec.h:19
double f[11][100]
MeasurementError TrapezoidalStripTopology::measurementError ( const LocalPoint lp,
const LocalError lerr 
) const
overridevirtual

Implements Topology.

Definition at line 86 of file TrapezoidalStripTopology.cc.

References localPitch(), mathSSE::sqrt(), theDetHeight, theDistToBeam, theYAxOr, PV3DBase< T, PVType, FrameType >::x(), LocalError::xx(), LocalError::xy(), PV3DBase< T, PVType, FrameType >::y(), and LocalError::yy().

86  {
87  float lt, lc2, ls2, lslc;
88  float localL, localP;
89  float sl2, sp2, spl;
90  lt = -lp.x() / (theYAxOr * lp.y() + theDistToBeam) * theYAxOr;
91  lc2 = 1. / (1. + lt * lt);
92  lslc = lt * lc2;
93  ls2 = 1. - lc2;
94  localL = theDetHeight / std::sqrt(lc2);
95  localP = localPitch(lp);
96  sp2 = lc2 * lerr.xx() + ls2 * lerr.yy() + 2 * lslc * lerr.xy();
97  sl2 = ls2 * lerr.xx() + lc2 * lerr.yy() - 2 * lslc * lerr.xy();
98  spl = lslc * (lerr.yy() - lerr.xx()) + (lc2 - ls2) * lerr.xy();
99  return MeasurementError(sp2 / (localP * localP), spl / (localP * localL), sl2 / (localL * localL));
100 }
float xx() const
Definition: LocalError.h:22
float localPitch(const LocalPoint &) const override
T y() const
Definition: PV3DBase.h:60
float xy() const
Definition: LocalError.h:23
float yy() const
Definition: LocalError.h:24
T sqrt(T t)
Definition: SSEVec.h:19
T x() const
Definition: PV3DBase.h:59
MeasurementPoint TrapezoidalStripTopology::measurementPosition ( const LocalPoint lp) const
overridevirtual

Implements Topology.

Definition at line 81 of file TrapezoidalStripTopology.cc.

References theDetHeight, theDistToBeam, theOffset, thePitch, theYAxOr, PV3DBase< T, PVType, FrameType >::x(), and PV3DBase< T, PVType, FrameType >::y().

81  {
82  return MeasurementPoint(((lp.x() * theDistToBeam / (theYAxOr * lp.y() + theDistToBeam)) - theOffset) / thePitch,
83  lp.y() / theDetHeight);
84 }
T y() const
Definition: PV3DBase.h:60
Measurement2DPoint MeasurementPoint
Measurement points are two-dimensional by default.
T x() const
Definition: PV3DBase.h:59
int TrapezoidalStripTopology::nstrips ( ) const
overridevirtual
float TrapezoidalStripTopology::pitch ( ) const
overridevirtual

Pitch in the middle of the DetUnit

Implements StripTopology.

Definition at line 106 of file TrapezoidalStripTopology.cc.

References thePitch.

Referenced by CSCSegtoRPC::CSCSegtoRPC(), and ME0ReDigiProducer::getStripProperties().

float TrapezoidalStripTopology::radius ( void  ) const
inline

radius of circle passing through the middle of the det with center at the crossing of the two sides.

Definition at line 69 of file TrapezoidalStripTopology.h.

References shiftOffset(), and theDistToBeam.

Referenced by ME0ReDigiProducer::getStripProperties(), and ME0ReDigiProducer::TemporaryGeometry::TemporaryGeometry().

float TrapezoidalStripTopology::shiftOffset ( float  pitch_fraction)
protectedvirtual

Definition at line 120 of file TrapezoidalStripTopology.cc.

References theOffset, and thePitch.

Referenced by radius().

120  {
121  theOffset += thePitch * pitch_fraction;
122  return theOffset;
123 }
float TrapezoidalStripTopology::strip ( const LocalPoint lp) const
overridevirtual

Implements StripTopology.

Definition at line 72 of file TrapezoidalStripTopology.cc.

References theDistToBeam, theNumberOfStrips, theOffset, thePitch, theYAxOr, PV3DBase< T, PVType, FrameType >::x(), and PV3DBase< T, PVType, FrameType >::y().

Referenced by channel().

72  {
73  float aStrip = ((lp.x() * theDistToBeam / (theYAxOr * lp.y() + theDistToBeam)) - theOffset) / thePitch;
74  if (aStrip < 0)
75  aStrip = 0;
76  else if (aStrip > theNumberOfStrips)
77  aStrip = theNumberOfStrips;
78  return aStrip;
79 }
T y() const
Definition: PV3DBase.h:60
T x() const
Definition: PV3DBase.h:59
float TrapezoidalStripTopology::stripAngle ( float  strip) const
overridevirtual

angle between strip and symmetry axis

Implements StripTopology.

Definition at line 114 of file TrapezoidalStripTopology.cc.

References theDistToBeam, theOffset, thePitch, and theYAxOr.

float TrapezoidalStripTopology::stripLength ( ) const
inlineoverridevirtual

Member Data Documentation

float TrapezoidalStripTopology::theDetHeight
private
float TrapezoidalStripTopology::theDistToBeam
private
int TrapezoidalStripTopology::theNumberOfStrips
private

Definition at line 75 of file TrapezoidalStripTopology.h.

Referenced by channel(), nstrips(), strip(), and TrapezoidalStripTopology().

float TrapezoidalStripTopology::theOffset
private
float TrapezoidalStripTopology::thePitch
private
int TrapezoidalStripTopology::theYAxOr
private