1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
#ifndef Geometry_CommonTopologies_TrapezoidalStripTopology_H
#define Geometry_CommonTopologies_TrapezoidalStripTopology_H
/** Specialised strip topology for rectangular barrel detectors.
* The strips are parallel to the local Y axis, so X is the precisely
* measured coordinate.
*/
#include "Geometry/CommonTopologies/interface/StripTopology.h"
/** 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.
*/
class TrapezoidalStripTopology final : public StripTopology {
public:
/** 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.
*/
TrapezoidalStripTopology(int nstrip, float pitch, float detheight, float r0);
TrapezoidalStripTopology(int nstrip, float pitch, float detheight, float r0, int yAx);
using StripTopology::localPosition;
LocalPoint localPosition(float strip) const override;
LocalPoint localPosition(const MeasurementPoint&) const override;
using StripTopology::localError;
LocalError localError(float strip, float stripErr2) const override;
LocalError localError(const MeasurementPoint&, const MeasurementError&) const override;
float strip(const LocalPoint&) const override;
MeasurementPoint measurementPosition(const LocalPoint&) const override;
MeasurementError measurementError(const LocalPoint&, const LocalError&) const override;
int channel(const LocalPoint&) const override;
/** Pitch in the middle of the DetUnit */
float pitch() const override;
float localPitch(const LocalPoint&) const override;
/** angle between strip and symmetry axis */
float stripAngle(float strip) const override;
int nstrips() const override;
/// det heigth (strip length in the middle)
float stripLength() const override { return theDetHeight; }
float localStripLength(const LocalPoint& aLP) const override;
/** radius of circle passing through the middle of the det
* with center at the crossing of the two sides.
*/
float radius() const { return theDistToBeam; }
protected:
virtual float shiftOffset(float pitch_fraction);
private:
int theNumberOfStrips;
float thePitch; // pitch at the middle of the det. plane
float theOffset;
float theDistToBeam;
float theDetHeight;
int theYAxOr;
};
#endif
|