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
 
virtual LocalError localError (float strip, float stripErr2) const=0
 
virtual LocalError localError (float strip, float stripErr2, const Topology::LocalTrackPred &) const
 conversion taking also the angle from the predicted track state More...
 
virtual LocalError localError (const MeasurementPoint &, const MeasurementError &) const =0
 
virtual LocalError localError (const MeasurementPoint &mp, const MeasurementError &me, const LocalTrackPred &) const
 conversion taking also the angle from the predicted track state More...
 
LocalError localError (float strip, float stripErr2) const override
 
LocalError localError (const MeasurementPoint &, const MeasurementError &) const override
 
float localPitch (const LocalPoint &) const override
 
virtual LocalPoint localPosition (float strip) const=0
 
virtual LocalPoint localPosition (float strip, const Topology::LocalTrackPred &) const
 conversion taking also 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 LocalPoint localPosition (const MeasurementPoint &) const =0
 
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 LocalError localError (const MeasurementPoint &, const MeasurementError &) const=0
 
virtual LocalError localError (const MeasurementPoint &mp, const MeasurementError &me, const 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 (const MeasurementPoint &) const=0
 
virtual LocalPoint localPosition (const MeasurementPoint &mp, const LocalTrackPred &) const
 conversion taking also the angle from the predicted track state 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() [1/2]

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 10 of file TrapezoidalStripTopology.cc.

References MainPageGenerator::l, AlCaHLTBitMon_ParallelJobs::p, theNumberOfStrips, theOffset, thePitch, and theYAxOr.

13  theYAxOr = 1;
14 #ifdef EDM_ML_DEBUG
15  edm::LogVerbatim("CommonTopologies") << "Constructing TrapezoidalStripTopology with nstrips = " << ns
16  << " pitch = " << p << " length = " << l << " r0 =" << r0;
17 #endif
18 }
Log< level::Info, true > LogVerbatim

◆ TrapezoidalStripTopology() [2/2]

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

Definition at line 20 of file TrapezoidalStripTopology.cc.

References MainPageGenerator::l, AlCaHLTBitMon_ParallelJobs::p, theNumberOfStrips, theOffset, and thePitch.

23 #ifdef EDM_ML_DEBUG
24  edm::LogVerbatim("CommonTopologies") << "Constructing TrapezoidalStripTopology with nstrips = " << ns
25  << " pitch = " << p << " length = " << l << " r0 =" << r0
26  << " yAxOrientation =" << yAx;
27 #endif
28 }
Log< level::Info, true > LogVerbatim

Member Function Documentation

◆ channel()

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

Implements Topology.

Definition at line 105 of file TrapezoidalStripTopology.cc.

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

105  {
106  return std::min(int(strip(lp)), theNumberOfStrips - 1);
107 }
float strip(const LocalPoint &) const override

◆ localError() [1/6]

virtual LocalError StripTopology::localError

◆ localError() [2/6]

virtual LocalError StripTopology::localError
inline

conversion taking also the angle from the predicted track state

Definition at line 26 of file StripTopology.h.

26  {
27  return localError(strip, stripErr2);
28  }
float strip(const LocalPoint &) const override
LocalError localError(float strip, float stripErr2) const override

◆ localError() [3/6]

virtual LocalError Topology::localError

◆ localError() [4/6]

virtual LocalError Topology::localError
inline

conversion taking also the angle from the predicted track state

Definition at line 94 of file Topology.h.

96  {
97  return localError(mp, me);
98  }
LocalError localError(float strip, float stripErr2) const override

◆ localError() [5/6]

LocalError TrapezoidalStripTopology::localError ( float  strip,
float  stripErr2 
) const
overridevirtual

Implements StripTopology.

Definition at line 40 of file TrapezoidalStripTopology.cc.

References strip(), theDetHeight, theDistToBeam, theOffset, thePitch, and theYAxOr.

40  {
41  float lt, lc2, ls2, lslc;
42  float localL2, localP2;
43  float sl2, sp2;
44  // angle from strip to local frame (see CMS TN / 95-170)
46  lc2 = 1.f / (1. + lt * lt);
47  lslc = lt * lc2;
48  ls2 = 1.f - lc2;
49  localL2 = theDetHeight * theDetHeight / lc2;
50  localP2 = thePitch * thePitch * lc2;
51  sl2 = localL2 / 12.;
52  sp2 = stripErr2 * localP2;
53  return LocalError(lc2 * sp2 + ls2 * sl2, lslc * (sp2 - sl2), ls2 * sp2 + lc2 * sl2);
54 }
float strip(const LocalPoint &) const override

◆ localError() [6/6]

LocalError TrapezoidalStripTopology::localError ( const MeasurementPoint mp,
const MeasurementError merr 
) const
overridevirtual

Implements Topology.

Definition at line 56 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().

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

◆ localPitch()

float TrapezoidalStripTopology::localPitch ( const LocalPoint lp) const
overridevirtual

Implements StripTopology.

Definition at line 111 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().

111  {
112  float x = lp.x();
113  float y = theYAxOr * lp.y() + theDistToBeam;
114  return thePitch * y / (theDistToBeam * std::sqrt(1.f + x * x / (y * y)));
115 }
T x() const
Definition: PV3DBase.h:59
T y() const
Definition: PV3DBase.h:60
T sqrt(T t)
Definition: SSEVec.h:23
double f[11][100]

◆ localPosition() [1/6]

virtual LocalPoint StripTopology::localPosition

◆ localPosition() [2/6]

virtual LocalPoint StripTopology::localPosition
inline

conversion taking also the predicted track state

Definition at line 20 of file StripTopology.h.

20  {
21  return localPosition(strip);
22  }
float strip(const LocalPoint &) const override
LocalPoint localPosition(float strip) const override

◆ localPosition() [3/6]

virtual LocalPoint Topology::localPosition

◆ localPosition() [4/6]

virtual LocalPoint Topology::localPosition
inline

conversion taking also the angle from the predicted track state

Definition at line 89 of file Topology.h.

89  {
90  return localPosition(mp);
91  }
LocalPoint localPosition(float strip) const override

◆ localPosition() [5/6]

LocalPoint TrapezoidalStripTopology::localPosition ( float  strip) const
overridevirtual

◆ localPosition() [6/6]

LocalPoint TrapezoidalStripTopology::localPosition ( const MeasurementPoint mp) const
overridevirtual

◆ localStripLength()

float TrapezoidalStripTopology::localStripLength ( const LocalPoint aLP) const
overridevirtual

Implements StripTopology.

Definition at line 128 of file TrapezoidalStripTopology.cc.

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

128  {
129  float ltan = -lp.x() / (theYAxOr * lp.y() + theDistToBeam) * theYAxOr;
130  float localL = theDetHeight * std::sqrt(1.f + ltan * ltan);
131  // float lcos2 = 1.f/(1.f+ltan*ltan);
132  // float localL = theDetHeight / std::sqrt(lcos2);
133 
134  return localL;
135 }
T sqrt(T t)
Definition: SSEVec.h:23
double f[11][100]

◆ measurementError()

MeasurementError TrapezoidalStripTopology::measurementError ( const LocalPoint lp,
const LocalError lerr 
) const
overridevirtual

Implements Topology.

Definition at line 89 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().

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

◆ measurementPosition()

MeasurementPoint TrapezoidalStripTopology::measurementPosition ( const LocalPoint lp) const
overridevirtual

Implements Topology.

Definition at line 84 of file TrapezoidalStripTopology.cc.

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

84  {
85  return MeasurementPoint(((lp.x() * theDistToBeam / (theYAxOr * lp.y() + theDistToBeam)) - theOffset) / thePitch,
86  lp.y() / theDetHeight);
87 }
T x() const
Definition: PV3DBase.h:59
T y() const
Definition: PV3DBase.h:60
Measurement2DPoint MeasurementPoint
Measurement points are two-dimensional by default.

◆ nstrips()

int TrapezoidalStripTopology::nstrips ( ) const
overridevirtual

◆ pitch()

float TrapezoidalStripTopology::pitch ( ) const
overridevirtual

Pitch in the middle of the DetUnit

Implements StripTopology.

Definition at line 109 of file TrapezoidalStripTopology.cc.

References thePitch.

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

◆ radius()

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 theDistToBeam.

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

◆ shiftOffset()

float TrapezoidalStripTopology::shiftOffset ( float  pitch_fraction)
protectedvirtual

Definition at line 123 of file TrapezoidalStripTopology.cc.

References theOffset, and thePitch.

123  {
124  theOffset += thePitch * pitch_fraction;
125  return theOffset;
126 }

◆ strip()

float TrapezoidalStripTopology::strip ( const LocalPoint lp) const
overridevirtual

Implements StripTopology.

Definition at line 75 of file TrapezoidalStripTopology.cc.

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

Referenced by channel(), localError(), localPosition(), and stripAngle().

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

◆ stripAngle()

float TrapezoidalStripTopology::stripAngle ( float  strip) const
overridevirtual

angle between strip and symmetry axis

Implements StripTopology.

Definition at line 117 of file TrapezoidalStripTopology.cc.

References strip(), theDistToBeam, theOffset, thePitch, and theYAxOr.

◆ stripLength()

float TrapezoidalStripTopology::stripLength ( ) const
inlineoverridevirtual

Member Data Documentation

◆ theDetHeight

float TrapezoidalStripTopology::theDetHeight
private

◆ theDistToBeam

float TrapezoidalStripTopology::theDistToBeam
private

◆ theNumberOfStrips

int TrapezoidalStripTopology::theNumberOfStrips
private

Definition at line 75 of file TrapezoidalStripTopology.h.

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

◆ theOffset

float TrapezoidalStripTopology::theOffset
private

◆ thePitch

float TrapezoidalStripTopology::thePitch
private

◆ theYAxOr

int TrapezoidalStripTopology::theYAxOr
private