7 TrapezoidalStripTopology::TrapezoidalStripTopology(
int ns,
float p,
10 theNumberOfStrips(ns), thePitch(p),
11 theDistToBeam(r0), theDetHeight(l) {
12 theOffset = -theNumberOfStrips/2. * thePitch;
15 cout<<
"Constructing TrapezoidalStripTopology with"
24 TrapezoidalStripTopology::TrapezoidalStripTopology(
int ns,
float p,
27 theNumberOfStrips(ns), thePitch(p),
28 theDistToBeam(r0), theDetHeight(l), theYAxOr(yAx){
29 theOffset = -theNumberOfStrips/2. * thePitch;
31 cout<<
"Constructing TrapezoidalStripTopology with"
36 <<
" yAxOrientation ="<<yAx
42 TrapezoidalStripTopology::localPosition(
float strip)
const {
43 return LocalPoint( strip*thePitch + theOffset, 0.0);
48 float y = mp.
y()*theDetHeight;
49 float x = (mp.
x()*thePitch +
50 theOffset)*(theYAxOr*y+theDistToBeam)/theDistToBeam;
55 TrapezoidalStripTopology::localError(
float strip,
float stripErr2)
const {
56 float lt,lc2,ls2,lslc;
57 float localL2,localP2;
60 lt = -(strip*thePitch + theOffset)*theYAxOr/theDistToBeam;
64 localL2 = theDetHeight*theDetHeight / lc2;
65 localP2 = thePitch*thePitch*lc2;
67 sp2 = stripErr2*localP2;
76 float lt,lc2,ls2,lslc;
80 lt = -(mp.
x()*thePitch + theOffset)*theYAxOr/theDistToBeam;
85 localP = localPitch(localPosition(mp));
86 sp2 = merr.
uu() * localP*localP;
87 sl2 = merr.
vv() * localL*localL;
88 spl = merr.
uv() * localP*localL;
90 lslc*(sp2-sl2)+(lc2-ls2)*spl,
91 ls2*sp2+lc2*sl2+2*lslc*spl);
95 TrapezoidalStripTopology::strip(
const LocalPoint& lp)
const {
97 ((lp.
x()*theDistToBeam/(theYAxOr*lp.
y()+theDistToBeam))-theOffset)/thePitch;
98 if (aStrip < 0 ) aStrip = 0;
99 else if (aStrip > theNumberOfStrips) aStrip = theNumberOfStrips;
104 TrapezoidalStripTopology::measurementPosition(
const LocalPoint& lp)
const {
106 MeasurementPoint(((lp.
x()*theDistToBeam/(theYAxOr*lp.
y()+theDistToBeam))-theOffset)/thePitch,
107 lp.
y()/theDetHeight);
111 TrapezoidalStripTopology::measurementError(
const LocalPoint& lp,
113 float lt,lc2,ls2,lslc;
116 lt = -lp.
x()/(theYAxOr*lp.
y()+theDistToBeam)*theYAxOr;
121 localP = localPitch(lp);
122 sp2 = lc2*lerr.
xx()+ls2*lerr.
yy()+2*lslc*lerr.
xy();
123 sl2 = ls2*lerr.
xx()+lc2*lerr.
yy()-2*lslc*lerr.
xy();
124 spl = lslc*(lerr.
yy()-lerr.
xx())+(lc2-ls2)*lerr.
xy();
127 sl2/(localL*localL));
132 TrapezoidalStripTopology::channel(
const LocalPoint& lp)
const {
133 return std::min(
int(strip(lp)),theNumberOfStrips-1);
137 TrapezoidalStripTopology::pitch()
const {
142 TrapezoidalStripTopology::localPitch(
const LocalPoint& lp)
const {
144 float y=theYAxOr*lp.
y()+theDistToBeam;
145 return thePitch*y/(theDistToBeam*
std::sqrt(1.
f+x*x/(y*y)));
149 TrapezoidalStripTopology::stripAngle(
float strip)
const {
150 return std::atan( -(strip*thePitch + theOffset)*theYAxOr/theDistToBeam );
154 TrapezoidalStripTopology::nstrips()
const {
155 return theNumberOfStrips;
158 float TrapezoidalStripTopology::shiftOffset(
float pitch_fraction) {
159 theOffset += thePitch * pitch_fraction;
163 float TrapezoidalStripTopology::localStripLength(
const LocalPoint& lp)
165 float ltan = -lp.
x()/(theYAxOr*lp.
y()+theDistToBeam)*theYAxOr;
166 float localL = theDetHeight *
std::sqrt(1.
f+ltan*ltan);
Measurement2DPoint MeasurementPoint
Measurement points are two-dimensional by default.
< trclass="colgroup">< tdclass="colgroup"colspan=5 > DT local reconstruction</td ></tr >< tr >< td >< ahref="classDTRecHit1DPair.html"> DTRecHit1DPair</a ></td >< td >< ahref="DataFormats_DTRecHit.html"> edm::RangeMap & lt