Belle II Software development
CDCSZObservations Class Reference

Class serving as a storage of observed sz positions to present to the sz line fitters. More...

#include <CDCSZObservations.h>

Public Member Functions

 CDCSZObservations (EFitVariance fitVariance=EFitVariance::c_Proper, bool onlyStereo=false)
 Constructor taking in preferred variance which is taken from the various hit objects if present.
 
std::size_t size () const
 Returns the number of observations stored.
 
double * data ()
 Return the pointer to the number buffer.
 
bool empty () const
 Returns true if there are no observations stored.
 
void clear ()
 Removes all observations stored.
 
void reserve (std::size_t nObservations)
 Reserves enough space for nObservations.
 
double getS (int iObservation) const
 Getter for the arc length value of the observation at the given index.
 
double getZ (int iObservation) const
 Getter for the z value of the observation at the given index.
 
double getWeight (int iObservation) const
 Getter for the weight / inverse variance of the observation at the given index.
 
std::size_t fill (double s, double z, double weight=1.0)
 Appends the observed position.
 
std::size_t append (const CDCRecoHit3D &recoHit3D)
 Appends the observed position.
 
std::size_t appendRange (const std::vector< CDCRecoHit3D > &recoHit3Ds)
 Appends all reconstructed hits from the three dimensional track.
 
std::size_t appendRange (const CDCSegment3D &segment3D)
 Appends all reconstructed hits from the three dimensional segment.
 
std::size_t appendRange (const CDCTrack &track)
 Appends all reconstructed hits from the three dimensional track.
 
Vector2D getCentralPoint () const
 Extracts the observation center that is at the index in the middle.
 
void passiveMoveBy (const Vector2D &origin)
 Moves all observations passively such that the given vector becomes to origin of the new coordinate system.
 
Vector2D centralize ()
 Picks one observation as a reference point and transform all observations to that new origin.
 
void setFitVariance (EFitVariance fitVariance)
 Setter for the indicator that the drift variance should be used.
 

Private Attributes

std::vector< double > m_szObservations
 Memory for the individual observations.
 
EFitVariance m_fitVariance
 Indicator which variance information should preferably be extracted from hits in calls to append.
 
bool m_onlyStereo
 Switch to only use information from stereo hits.
 

Detailed Description

Class serving as a storage of observed sz positions to present to the sz line fitters.

Definition at line 26 of file CDCSZObservations.h.

Constructor & Destructor Documentation

◆ CDCSZObservations()

CDCSZObservations ( EFitVariance  fitVariance = EFitVariance::c_Proper,
bool  onlyStereo = false 
)
inlineexplicit

Constructor taking in preferred variance which is taken from the various hit objects if present.

Parameters
fitVarianceVariance information to be used Currently only c_Unit and c_Proper are supported.
onlyStereoSwitch to only use the information of stereo hits.

Definition at line 36 of file CDCSZObservations.h.

38 : m_fitVariance(fitVariance)
39 , m_onlyStereo(onlyStereo)
40 {
41 }
bool m_onlyStereo
Switch to only use information from stereo hits.
EFitVariance m_fitVariance
Indicator which variance information should preferably be extracted from hits in calls to append.

Member Function Documentation

◆ append()

std::size_t append ( const CDCRecoHit3D recoHit3D)

Appends the observed position.

Definition at line 38 of file CDCSZObservations.cc.

39{
40 if (m_onlyStereo and recoHit3D.isAxial()) return 0;
41
42 const double s = recoHit3D.getArcLength2D();
43 const double z = recoHit3D.getRecoPos3D().z();
44
45 double weight = 1.0;
46 if (m_fitVariance == EFitVariance::c_Unit) {
47 weight = 1;
48 } else {
49 // Translate the drift length uncertainty to a uncertainty in z
50 // by the taking the projected wire vector part parallel to the displacement
51 // as a proportionality factor to the z direction.
52 const CDCWire& wire = recoHit3D.getWire();
53 const Vector3D& wireVector = wire.getWireVector();
54 const Vector2D disp2D = recoHit3D.getRecoDisp2D();
55 const double driftlengthVariance = recoHit3D.getRecoDriftLengthVariance();
56
57 double dispNorm = disp2D.norm();
58
59 double zeta = 1.0;
60 if (dispNorm == 0.0) {
61 zeta = wireVector.xy().norm() / wireVector.z();
62 } else {
63 zeta = wireVector.xy().dot(disp2D) / wireVector.z() / dispNorm;
64 }
65
66 weight = zeta * zeta / driftlengthVariance;
67 }
68
69 size_t appendedHit = fill(s, z, weight);
70 return appendedHit;
71}
const Vector3D & getRecoPos3D() const
Getter for the 3d position of the hit.
Definition: CDCRecoHit3D.h:285
bool isAxial() const
Indicator if the underlying wire is axial.
Definition: CDCRecoHit3D.h:214
const CDCWire & getWire() const
Getter for the wire.
Definition: CDCRecoHit3D.h:226
double getRecoDriftLengthVariance() const
Returns the drift length variance next to the reconstructed position.
Definition: CDCRecoHit3D.h:358
double getArcLength2D() const
Getter for the travel distance in the xy projection.
Definition: CDCRecoHit3D.h:370
Vector2D getRecoDisp2D() const
Gets the displacement from the wire position in the xy plain at the reconstructed position.
std::size_t fill(double s, double z, double weight=1.0)
Appends the observed position.
Class representing a sense wire in the central drift chamber.
Definition: CDCWire.h:58
Vector3D getWireVector() const
Getter for the vector pointing from the back end of the wire to the front end of the wire.
Definition: CDCWire.h:248
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 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 z() const
Getter for the z coordinate.
Definition: Vector3D.h:496

◆ appendRange() [1/3]

std::size_t appendRange ( const CDCSegment3D segment3D)

Appends all reconstructed hits from the three dimensional segment.

Returns
Number of added hits

Definition at line 82 of file CDCSZObservations.cc.

83{
84 const std::vector<CDCRecoHit3D> recoHit3Ds = segment3D;
85 return this->appendRange(recoHit3Ds);
86}
std::size_t appendRange(const std::vector< CDCRecoHit3D > &recoHit3Ds)
Appends all reconstructed hits from the three dimensional track.

◆ appendRange() [2/3]

std::size_t appendRange ( const CDCTrack track)

Appends all reconstructed hits from the three dimensional track.

Returns
Number of added hits

Definition at line 88 of file CDCSZObservations.cc.

89{
90 const std::vector<CDCRecoHit3D> recoHit3Ds = track;
91 return this->appendRange(recoHit3Ds);
92}

◆ appendRange() [3/3]

std::size_t appendRange ( const std::vector< CDCRecoHit3D > &  recoHit3Ds)

Appends all reconstructed hits from the three dimensional track.

Returns
Number of added hits

Definition at line 73 of file CDCSZObservations.cc.

74{
75 std::size_t nAppendedHits = 0;
76 for (const CDCRecoHit3D& recoHit3D : recoHit3Ds) {
77 nAppendedHits += append(recoHit3D);
78 }
79 return nAppendedHits;
80}
Class representing a three dimensional reconstructed hit.
Definition: CDCRecoHit3D.h:52
std::size_t append(const CDCRecoHit3D &recoHit3D)
Appends the observed position.

◆ centralize()

Vector2D centralize ( )

Picks one observation as a reference point and transform all observations to that new origin.

Definition at line 118 of file CDCSZObservations.cc.

119{
120 // Pick an observation at the center
121 Vector2D centralPoint = getCentralPoint();
122 passiveMoveBy(centralPoint);
123 return centralPoint;
124}
Vector2D getCentralPoint() const
Extracts the observation center that is at the index in the middle.
void passiveMoveBy(const Vector2D &origin)
Moves all observations passively such that the given vector becomes to origin of the new coordinate s...

◆ clear()

void clear ( )
inline

Removes all observations stored.

Definition at line 63 of file CDCSZObservations.h.

64 {
65 m_szObservations.clear();
66 }
std::vector< double > m_szObservations
Memory for the individual observations.

◆ data()

double * data ( )
inline

Return the pointer to the number buffer.

Definition at line 51 of file CDCSZObservations.h.

52 {
53 return m_szObservations.data();
54 }

◆ empty()

bool empty ( ) const
inline

Returns true if there are no observations stored.

Definition at line 57 of file CDCSZObservations.h.

58 {
59 return m_szObservations.empty();
60 }

◆ fill()

std::size_t fill ( double  s,
double  z,
double  weight = 1.0 
)

Appends the observed position.

Note
Observations are skipped, if one of the given variables is NAN.
Parameters
sS coordinate of the center of the observed position.
zZ coordinate of the center of the observed position.
weightThe relative weight of the observation. In order to generate a unit less chi^2 measure the weight should be chosen as the inverse variance of the drift length. Defaults to 1.
Returns
Number of observations added. One if the observation was added. Zero if one of the given variables is NAN.

Definition at line 23 of file CDCSZObservations.cc.

24{
25 if (std::isnan(s)) return 0;
26 if (std::isnan(z)) return 0;
27 if (std::isnan(weight)) {
28 B2WARNING("Weight is nan. Skipping observation");
29 return 0;
30 }
31
32 m_szObservations.push_back(s);
33 m_szObservations.push_back(z);
34 m_szObservations.push_back(weight);
35 return 1;
36}

◆ getCentralPoint()

Vector2D getCentralPoint ( ) const

Extracts the observation center that is at the index in the middle.

Definition at line 94 of file CDCSZObservations.cc.

95{
96 std::size_t n = size();
97 if (n == 0) return Vector2D(NAN, NAN);
98 std::size_t i = n / 2;
99
100 if (isEven(n)) {
101 // For even number of observations use the middle one with the bigger distance from IP
102 Vector2D center1(getS(i), getZ(i));
103 Vector2D center2(getS(i - 1), getZ(i - 1));
104 return center1.normSquared() > center2.normSquared() ? center1 : center2;
105 } else {
106 Vector2D center1(getS(i), getZ(i));
107 return center1;
108 }
109}
double getZ(int iObservation) const
Getter for the z value of the observation at the given index.
std::size_t size() const
Returns the number of observations stored.
double getS(int iObservation) const
Getter for the arc length value of the observation at the given index.

◆ getS()

double getS ( int  iObservation) const
inline

Getter for the arc length value of the observation at the given index.

Definition at line 75 of file CDCSZObservations.h.

76 {
77 return m_szObservations[iObservation * 3];
78 }

◆ getWeight()

double getWeight ( int  iObservation) const
inline

Getter for the weight / inverse variance of the observation at the given index.

Definition at line 87 of file CDCSZObservations.h.

88 {
89 return m_szObservations[iObservation * 3 + 2];
90 }

◆ getZ()

double getZ ( int  iObservation) const
inline

Getter for the z value of the observation at the given index.

Definition at line 81 of file CDCSZObservations.h.

82 {
83 return m_szObservations[iObservation * 3 + 1];
84 }

◆ passiveMoveBy()

void passiveMoveBy ( const Vector2D origin)

Moves all observations passively such that the given vector becomes to origin of the new coordinate system.

Definition at line 111 of file CDCSZObservations.cc.

112{
113 Eigen::Matrix<double, 1, 2> eigenOrigin(origin.x(), origin.y());
114 EigenObservationMatrix eigenObservations = getEigenObservationMatrix(this);
115 eigenObservations.leftCols<2>().rowwise() -= eigenOrigin;
116}
double x() const
Getter for the x coordinate.
Definition: Vector2D.h:595
double y() const
Getter for the y coordinate.
Definition: Vector2D.h:605

◆ reserve()

void reserve ( std::size_t  nObservations)
inline

Reserves enough space for nObservations.

Definition at line 69 of file CDCSZObservations.h.

70 {
71 m_szObservations.reserve(nObservations * 3);
72 }

◆ setFitVariance()

void setFitVariance ( EFitVariance  fitVariance)
inline

Setter for the indicator that the drift variance should be used.

Definition at line 137 of file CDCSZObservations.h.

138 {
139 m_fitVariance = fitVariance;
140 }

◆ size()

std::size_t size ( ) const
inline

Returns the number of observations stored.

Definition at line 45 of file CDCSZObservations.h.

46 {
47 return m_szObservations.size() / 3;
48 }

Member Data Documentation

◆ m_fitVariance

EFitVariance m_fitVariance
private

Indicator which variance information should preferably be extracted from hits in calls to append.

Meaning of the constants detailed in EFitVariance.

Definition at line 154 of file CDCSZObservations.h.

◆ m_onlyStereo

bool m_onlyStereo
private

Switch to only use information from stereo hits.

Definition at line 157 of file CDCSZObservations.h.

◆ m_szObservations

std::vector<double> m_szObservations
private

Memory for the individual observations.

Arrangement of values is s, z, weight, s, z, .....

Definition at line 147 of file CDCSZObservations.h.


The documentation for this class was generated from the following files: