Belle II Software development
WireLine.h
1/**************************************************************************
2 * basf2 (Belle II Analysis Software Framework) *
3 * Author: The Belle II Collaboration *
4 * *
5 * See git log for contributors and copyright holders. *
6 * This file is licensed under LGPL-3.0, see LICENSE.md. *
7 **************************************************************************/
8#pragma once
9
10#include <tracking/trackFindingCDC/geometry/Vector3D.h>
11#include <tracking/trackFindingCDC/geometry/Vector2D.h>
12
13#include <cmath>
14
15namespace Belle2 {
20 namespace TrackFindingCDC {
31 class WireLine {
32
33 public:
36 {}
37
39 WireLine(const Vector3D& forward, const Vector3D& backward, double sagCoeff);
40
42 WireLine movedBy(const Vector3D& offset) const;
43
45 WireLine movedBy(const Vector2D& offset) const;
46
48 Vector3D nominalPos3DAtZ(const double z) const
49 { return Vector3D(nominalPos2DAtZ(z), z); }
50
52 Vector2D nominalPos2DAtZ(const double z) const
53 { return refPos2D() + nominalMovePerZ() * z; }
54
56 Vector3D sagPos3DAtZ(const double z) const
57 { return Vector3D(sagPos2DAtZ(z), z); }
58
60 Vector2D sagPos2DAtZ(const double z) const
61 {
63 Vector2D pos2D = nominalPos2DAtZ(z);
64 double xzFactorSquared = 1 + nominalMovePerZ().x() * nominalMovePerZ().x();
65 double sagY = - sagCoeff() * xzFactorSquared * (forwardZ() - z) * (z - backwardZ());
66 pos2D.setY(pos2D.y() + sagY);
67 return pos2D;
68 }
69
72 { return m_nominalMovePerZ; }
73
75 Vector2D sagMovePerZ(const double z) const
76 {
78 Vector2D movePerZ = nominalMovePerZ();
79 double xzFactorSquared = 1 + nominalMovePerZ().x() * nominalMovePerZ().x();
80 double sagDYDZ = - sagCoeff() * xzFactorSquared * (forwardZ() + backwardZ() - 2 * z);
81 movePerZ.setY(movePerZ.y() + sagDYDZ);
82 return movePerZ;
83 }
84
86 double nominalDistance(const Vector3D& pos3D) const
87 { return (pos3D - refPos3D()).orthogonalComp(Vector3D(nominalMovePerZ(), 1)); }
88
90 double sagDistance(const Vector3D& pos3D) const
91 {
92 Vector3D wirePos3D = sagPos3DAtZ(pos3D.z());
93 Vector3D movePerZ(sagMovePerZ(pos3D.z()), 1);
94 return (pos3D - wirePos3D).orthogonalComp(movePerZ);
95 }
96
99 { return refPos3D() - (point - refPos3D()).parallelVector(Vector3D(nominalMovePerZ(), 1)); }
100
102 Vector3D sagClosest3D(const Vector3D& point) const
103 {
104 Vector3D wirePos3D = sagPos3DAtZ(point.z());
105 Vector3D movePerZ(sagMovePerZ(point.z()), 1);
106 return wirePos3D - (point - wirePos3D).parallelVector(movePerZ);
107 }
108
111 { return nominalPos3DAtZ(forwardZ()); }
112
115 { return nominalPos2DAtZ(forwardZ()); }
116
119 { return nominalPos3DAtZ(backwardZ()); }
120
123 { return nominalPos2DAtZ(backwardZ()); }
124
127 { return Vector3D(nominalMovePerZ() * deltaZ(), deltaZ()); }
128
130 double forwardZ() const
131 { return m_forwardZ; }
132
134 double backwardZ() const
135 { return m_backwardZ; }
136
138 double deltaZ() const
139 { return forwardZ() - backwardZ(); }
140
142 double outOfZBoundsFactor(double z) const
143 { return std::fmax(backwardZ() - z, z - forwardZ()) / deltaZ(); }
144
146 double forwardPhi() const
147 { return forward2D().phi(); }
148
150 double backwardPhi() const
151 { return backward2D().phi(); }
152
154 double forwardCylindricalR() const
155 { return forward2D().cylindricalR(); }
156
158 double backwardCylindricalR() const
159 { return backward2D().cylindricalR(); }
160
162 double forwardPhiToRef() const
163 { return forward2D().angleWith(refPos2D()); }
164
166 double backwardPhiToRef() const
167 { return backward2D().angleWith(refPos2D()); }
168
170 /* backwardToForwardAngle means how far the backward position has to be rotated in the xy projection
171 in the mathematical positive sense that it seems to be coaligned with the forward position. */
173 { return backward2D().angleWith(forward2D()) ; }
174
176 double tanLambda() const
177 { return 1 / nominalMovePerZ().norm(); }
178
180 double lambda() const
181 { return std::atan(tanLambda()); }
182
187 double tanTheta() const
188 { return std::atan(nominalMovePerZ().norm()); }
189
191 double theta() const
192 { return std::atan(nominalMovePerZ().norm()); }
193
195 double nominalPerigeeZ() const
197
200 { return nominalPos3DAtZ(nominalPerigeeZ()); }
201
205
207 double refX() const
208 { return m_refPos3D.x(); }
209
211 double refY() const
212 { return m_refPos3D.y(); }
213
215 double refZ() const
216 { return m_refPos3D.z(); }
217
220 { return m_refPos3D.cylindricalRSquared(); }
221
223 const Vector2D& refPos2D() const
224 { return m_refPos3D.xy(); }
225
227 const Vector3D& refPos3D() const
228 { return m_refPos3D; }
229
231 double sagCoeff() const
232 { return m_sagCoeff; }
233
234 private:
237
240
242 double m_forwardZ = 0.0;
243
245 double m_backwardZ = 0.0;
246
248 double m_sagCoeff = 0.0;
249
250 };
251 }
253}
A two dimensional vector which is equipped with functions for correct handling of orientation relate...
Definition: Vector2D.h:32
double dot(const Vector2D &rhs) const
Calculates the two dimensional dot product.
Definition: Vector2D.h:158
double cylindricalR() const
Gives the cylindrical radius of the vector. Same as norm()
Definition: Vector2D.h:557
Vector2D orthogonalVector(const Vector2D &relativTo) const
Calculates the part of this vector that is parallel to the given vector.
Definition: Vector2D.h:438
double x() const
Getter for the x coordinate.
Definition: Vector2D.h:595
double phi() const
Gives the azimuth angle being the angle to the x axes ( range -M_PI to M_PI )
Definition: Vector2D.h:569
double normSquared() const
Calculates .
Definition: Vector2D.h:169
void setY(const double y)
Setter for the y coordinate.
Definition: Vector2D.h:610
double y() const
Getter for the y coordinate.
Definition: Vector2D.h:605
double angleWith(const Vector2D &rhs) const
The angle between this and rhs.
Definition: Vector2D.h:197
double norm() const
Calculates the length of the vector.
Definition: Vector2D.h:175
A three dimensional vector.
Definition: Vector3D.h:33
const Vector2D & xy() const
Getter for the xy projected vector ( reference ! )
Definition: Vector3D.h:508
double x() const
Getter for the x coordinate.
Definition: Vector3D.h:472
double cylindricalRSquared() const
Getter for the squared cylindrical radius ( xy projected squared norm )
Definition: Vector3D.h:528
double y() const
Getter for the y coordinate.
Definition: Vector3D.h:484
double z() const
Getter for the z coordinate.
Definition: Vector3D.h:496
A three dimensional limited line represented by its closest approach to the z-axes (reference positio...
Definition: WireLine.h:31
Vector2D backward2D() const
Gives the xy position of the backward point.
Definition: WireLine.h:122
const Vector3D & refPos3D() const
Returns the reference position.
Definition: WireLine.h:227
double refX() const
Returns the the x coordinate of the reference point.
Definition: WireLine.h:207
const Vector2D & nominalMovePerZ() const
Gives the positional move in the xy projection per unit z.
Definition: WireLine.h:71
double forwardPhiToRef() const
Gives the azimuth angle of the forward position relative to the reference position.
Definition: WireLine.h:162
double m_backwardZ
Memory for the backward end z coordinate.
Definition: WireLine.h:245
Vector2D sagMovePerZ(const double z) const
Gives the two dimensional position with wire sag effect of the line at the given z value.
Definition: WireLine.h:75
const Vector2D & refPos2D() const
Returns the xy vector of the reference position.
Definition: WireLine.h:223
Vector3D nominalPos3DAtZ(const double z) const
Gives the three dimensional position without wire sag effect of the line at the given z value.
Definition: WireLine.h:48
Vector3D nominalPerigee3D() const
Returns the point of nominal closest approach to the z axes.
Definition: WireLine.h:199
double lambda() const
Returns the nominal lambda angle of the line.
Definition: WireLine.h:180
double refCylindricalRSquared() const
Returns the cylindrical radius of the reference position.
Definition: WireLine.h:219
double backwardCylindricalR() const
Gives the cylindrical radius of the backward position.
Definition: WireLine.h:158
double backwardPhiToRef() const
Gives the azimuth angle of the backward position relative to the reference position.
Definition: WireLine.h:166
WireLine()
Default constructor initialising to all members to zero.
Definition: WireLine.h:35
double backwardZ() const
Gives the backward z coordinate.
Definition: WireLine.h:134
double forwardPhi() const
Gives the forward azimuth angle.
Definition: WireLine.h:146
double refZ() const
Returns the the z coordinate of the reference point.
Definition: WireLine.h:215
double backwardToForwardAngle() const
Gives the azimuth angle difference from backward to forward position.
Definition: WireLine.h:172
double tanTheta() const
Returns the tangent of the opening angle between tangential vector and the z axes Also know as ds / d...
Definition: WireLine.h:187
double forwardZ() const
Gives the forward z coordinate.
Definition: WireLine.h:130
double deltaZ() const
Returns the difference between forward and backward z.
Definition: WireLine.h:138
double tanLambda() const
Returns the nominal tan lambda of the line. Also know as dz / ds.
Definition: WireLine.h:176
Vector2D nominalPerigee2D() const
Returns the point of nominal closest approach to the z axes.
Definition: WireLine.h:203
Vector2D m_nominalMovePerZ
Memory for the nominal movement of the xy position per z unit off the reference.
Definition: WireLine.h:239
Vector3D sagPos3DAtZ(const double z) const
Gives the three dimensional position with wire sag effect of the line at the given z value.
Definition: WireLine.h:56
Vector3D sagClosest3D(const Vector3D &point) const
Returns the closest approach on the wire with wire sag effect to the give point.
Definition: WireLine.h:102
double nominalPerigeeZ() const
Returns the z coordinate of the point of nominal closest approach to the z axes.
Definition: WireLine.h:195
Vector3D backward3D() const
Gives the position of the backward point.
Definition: WireLine.h:118
double forwardCylindricalR() const
Gives the cylindrical radius of the forward position.
Definition: WireLine.h:154
double outOfZBoundsFactor(double z) const
Returns the amount how much the given z position is outside the bounds in units of the wire length.
Definition: WireLine.h:142
double sagCoeff() const
Returns the wire sag coefficient due to gravity.
Definition: WireLine.h:231
Vector2D sagPos2DAtZ(const double z) const
Gives the two dimensional position with wire sag effect of the line at the given z value.
Definition: WireLine.h:60
double m_forwardZ
Memory for the forward end z coordinate.
Definition: WireLine.h:242
double sagDistance(const Vector3D &pos3D) const
Calculates the distance of the given point to the wire with wire sag effect.
Definition: WireLine.h:90
Vector3D wireVector() const
Getter for the vector from backward to the forward position.
Definition: WireLine.h:126
double nominalDistance(const Vector3D &pos3D) const
Calculates the distance of the given point to the wire without wire sag effect.
Definition: WireLine.h:86
double refY() const
Returns the the y coordinate of the reference point.
Definition: WireLine.h:211
Vector3D forward3D() const
Gives the position of the forward point.
Definition: WireLine.h:110
Vector3D nominalClosest3D(const Vector3D &point) const
Returns the closest approach on the wire without wire sag effect to the give point.
Definition: WireLine.h:98
WireLine movedBy(const Vector3D &offset) const
Returns a copy of the wire line moved by a three dimensional offset.
Definition: WireLine.cc:27
double m_sagCoeff
Memory for the wire sag coefficient.
Definition: WireLine.h:248
Vector3D m_refPos3D
Memory for the reference position.
Definition: WireLine.h:236
double theta() const
Returns the nominal opening angle between tangential vector and the z axes.
Definition: WireLine.h:191
Vector2D forward2D() const
Gives the xy position of the forward point.
Definition: WireLine.h:114
Vector2D nominalPos2DAtZ(const double z) const
Gives the two dimensional position without wire sag effect of the line at the given z value.
Definition: WireLine.h:52
double backwardPhi() const
Gives the backward azimuth angle.
Definition: WireLine.h:150
Abstract base class for different kinds of events.