Belle II Software release-09-00-00
DriftLengthEstimator Struct Reference

Helper construct implementing the (re)estimation of the drift length for various hit objects. More...

#include <DriftLengthEstimator.h>

Public Member Functions

void exposeParameters (ModuleParamList *moduleParamList, const std::string &prefix)
 Add the parameters of the estimator to the module.
 
double updateDriftLength (CDCRecoHit2D &recoHit2D)
 Update the drift length of the reconstructed hit in place.
 
double updateDriftLength (CDCRecoHit3D &recoHit3D, double tanLambda)
 Update the drift length of the reconstructed hit in place.
 
void updateDriftLength (CDCFacet &facet)
 Reestimate the drift length of all three contained drift circles.
 
void updateDriftLength (CDCSegment2D &segment)
 Update the drift length of the contained reconstructed hit in place.
 
void updateDriftLength (CDCSegment3D &segment, double tanLambda)
 Update the drift length of the contained reconstructed hit in place.
 
void updateDriftLength (CDCTrack &track, double tanLambda)
 Update the drift length of the contained reconstructed hit in place.
 

Public Attributes

bool m_param_useAlphaInDriftLength = true
 Parameter : Switch to serve the alpha angle to the drift length translator.
 
double m_param_tofMassScale = NAN
 Parameter : Mass to estimate the velocity in the flight time to the hit.
 

Detailed Description

Helper construct implementing the (re)estimation of the drift length for various hit objects.

Definition at line 36 of file DriftLengthEstimator.h.

Member Function Documentation

◆ exposeParameters()

void exposeParameters ( ModuleParamList moduleParamList,
const std::string &  prefix 
)

Add the parameters of the estimator to the module.

Definition at line 43 of file DriftLengthEstimator.cc.

44{
45 moduleParamList->addParameter(prefixed(prefix, "useAlphaInDriftLength"),
47 "Switch to serve the alpha angle to the drift length translator",
49
50 moduleParamList->addParameter(prefixed(prefix, "tofMassScale"),
52 "Mass to estimate the velocity in the flight time to the hit",
54}
void addParameter(const std::string &name, T &paramVariable, const std::string &description, const T &defaultValue)
Adds a new parameter to the module list.
double m_param_tofMassScale
Parameter : Mass to estimate the velocity in the flight time to the hit.
bool m_param_useAlphaInDriftLength
Parameter : Switch to serve the alpha angle to the drift length translator.

◆ updateDriftLength() [1/6]

void updateDriftLength ( CDCFacet facet)

Reestimate the drift length of all three contained drift circles.

Using the additional flight direction information the accuracy of the drift length can be increased alot helping the filters following this step

Definition at line 88 of file DriftLengthEstimator.cc.

89{
90 CDC::RealisticTDCCountTranslator tdcCountTranslator;
91 const FlightTimeEstimator& flightTimeEstimator = FlightTimeEstimator::instance();
92
93 const UncertainParameterLine2D& line = facet.getFitLine();
94 Vector2D flightDirection = line->tangential();
95 Vector2D centralPos2D = line->closest(facet.getMiddleWire().getRefPos2D());
96 double alpha = centralPos2D.angleWith(flightDirection);
98 alpha = 0;
99 }
100
101 auto doUpdate = [&](CDCRLWireHit & rlWireHit, Vector2D recoPos2D) {
102 const CDCWire& wire = rlWireHit.getWire();
103 const CDCHit* hit = rlWireHit.getWireHit().getHit();
104 const bool rl = rlWireHit.getRLInfo() == ERightLeft::c_Right;
105 const double beta = 1;
106 double flightTimeEstimate = flightTimeEstimator.getFlightTime2D(recoPos2D, alpha, beta);
107 double driftLength = tdcCountTranslator.getDriftLength(hit->getTDCCount(),
108 wire.getWireID(),
109 flightTimeEstimate,
110 rl,
111 wire.getRefZ(),
112 alpha);
113 rlWireHit.setRefDriftLength(driftLength);
114 };
115
116 doUpdate(facet.getStartRLWireHit(), facet.getStartRecoPos2D());
117 doUpdate(facet.getMiddleRLWireHit(), facet.getMiddleRecoPos2D());
118 doUpdate(facet.getEndRLWireHit(), facet.getEndRecoPos2D());
119
120 // More accurate implementation
121 // double startDriftLength = updateDriftLength(facet.getStartRecoHit2D());
122 // facet.getStartRLWireHit().setRefDriftLength(startDriftLength);
123
124 // double middleDriftLength = updateDriftLength(facet.getMiddleRecoHit2D());
125 // facet.getMiddleRLWireHit().setRefDriftLength(middleDriftLength);
126
127 // double endDriftLength = updateDriftLength(facet.getEndRecoHit2D());
128 // facet.getEndRLWireHit().setRefDriftLength(endDriftLength);
129}
Class containing the result of the unpacker in raw data and the result of the digitizer in simulation...
Definition: CDCHit.h:40
Translator mirroring the realistic Digitization.
double getDriftLength(unsigned short tdcCount, const WireID &wireID=WireID(), double timeOfFlightEstimator=0, bool leftRight=false, double z=0, double alpha=0, double theta=static_cast< double >(TMath::Pi()/2.), unsigned short adcCount=0) override
Get Drift length.
Vector2D getEndRecoPos2D() const
Getter for the reconstructed position at the third hit on the fit line.
Definition: CDCFacet.cc:81
const UncertainParameterLine2D & getFitLine() const
Getter for the contained line fit information.
Definition: CDCFacet.h:61
Vector2D getMiddleRecoPos2D() const
Getter for the reconstructed position at the second hit on the fit line.
Definition: CDCFacet.cc:76
Vector2D getStartRecoPos2D() const
Getter for the reconstructed position at the first hit on the fit line.
Definition: CDCFacet.cc:71
const CDCWire & getMiddleWire() const
Getter for the wire the second oriented wire hit is based on.
CDCRLWireHit & getStartRLWireHit()
Getter for the first oriented wire hit.
CDCRLWireHit & getEndRLWireHit()
Getter for the third oriented wire hit.
CDCRLWireHit & getMiddleRLWireHit()
Getter for the second oriented wire hit.
Class representing an oriented hit wire including a hypotheses whether the causing track passes left ...
Definition: CDCRLWireHit.h:41
const CDCWireHit & getWireHit() const
Getter for the wire hit associated with the oriented hit.
Definition: CDCRLWireHit.h:192
void setRefDriftLength(double driftLength)
Setter for the drift length at the reference position of the wire.
Definition: CDCRLWireHit.h:210
const CDCWire & getWire() const
Getter for the wire the oriented hit associated to.
ERightLeft getRLInfo() const
Getter for the right left passage information.
Definition: CDCRLWireHit.h:234
const CDCHit * getHit() const
Getter for the CDCHit pointer into the StoreArray.
Definition: CDCWireHit.h:159
Class representing a sense wire in the central drift chamber.
Definition: CDCWire.h:58
const WireID & getWireID() const
Getter for the wire id.
Definition: CDCWire.h:122
const Vector2D & getRefPos2D() const
Getter for the wire reference position for 2D tracking Gives the wire's reference position projected ...
Definition: CDCWire.h:229
double getRefZ() const
Getter for the wire reference z coordinate Gives the wire's reference z coordinate.
Definition: CDCWire.h:236
Helper struct to provide consistent flight time estimation throughout the CDC track finding.
static const FlightTimeEstimator & instance(std::unique_ptr< FlightTimeEstimator > replacement=nullptr)
Getter for the instance.
virtual double getFlightTime2D(const Vector2D &, double, double=1) const
Default estimator for the flight time.
A parameter line including including an line covariance matrix which is interpreted as located in the...
A two dimensional vector which is equipped with functions for correct handeling of orientation relat...
Definition: Vector2D.h:32
double angleWith(const Vector2D &rhs) const
The angle between this and rhs.
Definition: Vector2D.h:197

◆ updateDriftLength() [2/6]

double updateDriftLength ( CDCRecoHit2D recoHit2D)

Update the drift length of the reconstructed hit in place.

Definition at line 56 of file DriftLengthEstimator.cc.

57{
58 CDC::RealisticTDCCountTranslator tdcCountTranslator;
59 const FlightTimeEstimator& flightTimeEstimator = FlightTimeEstimator::instance();
60
61 Vector2D flightDirection = recoHit2D.getFlightDirection2D();
62 Vector2D recoPos2D = recoHit2D.getRecoPos2D();
63 double alpha = recoPos2D.angleWith(flightDirection);
64 const double beta = 1;
65 double flightTimeEstimate = flightTimeEstimator.getFlightTime2D(recoPos2D, alpha, beta);
66
67 const CDCWire& wire = recoHit2D.getWire();
68 const CDCHit* hit = recoHit2D.getWireHit().getHit();
69 const bool rl = recoHit2D.getRLInfo() == ERightLeft::c_Right;
70
72 alpha = 0;
73 }
74
75 double driftLength = tdcCountTranslator.getDriftLength(hit->getTDCCount(),
76 wire.getWireID(),
77 flightTimeEstimate,
78 rl,
79 wire.getRefZ(),
80 alpha);
81 if (driftLength > -2 and driftLength < 16) {
82 bool snapRecoPos = true;
83 recoHit2D.setRefDriftLength(driftLength, snapRecoPos);
84 }
85 return driftLength;
86}
const CDCWireHit & getWireHit() const
Getter for the wire hit assoziated with the reconstructed hit.
Definition: CDCRecoHit2D.h:193
void setRefDriftLength(double driftLength, bool snapRecoPos)
Setter for the drift length at the wire reference position.
const CDCWire & getWire() const
Getter for the wire the reconstructed hit assoziated to.
Definition: CDCRecoHit2D.h:175
Vector2D getFlightDirection2D() const
Getter for the direction of flight.
Definition: CDCRecoHit2D.h:256
Vector2D getRecoPos2D() const
Getter for the position in the reference plane.
Definition: CDCRecoHit2D.h:238
ERightLeft getRLInfo() const
Getter for the right left passage information.
Definition: CDCRecoHit2D.h:205

◆ updateDriftLength() [3/6]

double updateDriftLength ( CDCRecoHit3D recoHit3D,
double  tanLambda 
)

Update the drift length of the reconstructed hit in place.

Definition at line 138 of file DriftLengthEstimator.cc.

140{
141 CDC::RealisticTDCCountTranslator tdcCountTranslator;
142 const FlightTimeEstimator& flightTimeEstimator = FlightTimeEstimator::instance();
143
144 Vector2D flightDirection = recoHit3D.getFlightDirection2D();
145 const Vector3D& recoPos3D = recoHit3D.getRecoPos3D();
146 const Vector2D& recoPos2D = recoPos3D.xy();
147 double alpha = recoPos2D.angleWith(flightDirection);
148 const double beta = 1;
149 double flightTimeEstimate = flightTimeEstimator.getFlightTime2D(recoPos2D, alpha, beta);
150
151 if (std::isnan(tanLambda)) {
152 tanLambda = recoPos3D.z() / recoPos3D.cylindricalR();
153 }
154 const double theta = M_PI / 2 - std::atan(tanLambda);
155 flightTimeEstimate *= hypot2(1, tanLambda);
156
157 const CDCWire& wire = recoHit3D.getWire();
158 const CDCHit* hit = recoHit3D.getWireHit().getHit();
159 const bool rl = recoHit3D.getRLInfo() == ERightLeft::c_Right;
160 double driftLength =
161 tdcCountTranslator.getDriftLength(hit->getTDCCount(),
162 wire.getWireID(),
163 flightTimeEstimate,
164 rl,
165 recoPos3D.z(),
166 alpha,
167 theta,
168 hit->getADCCount());
169 if (driftLength > -2 and driftLength < 16) {
170 bool snapRecoPos = true;
171 recoHit3D.setRecoDriftLength(driftLength, snapRecoPos);
172 }
173 return driftLength;
174}
const CDCWireHit & getWireHit() const
Getter for the wire hit.
Definition: CDCRecoHit3D.h:238
const Vector3D & getRecoPos3D() const
Getter for the 3d position of the hit.
Definition: CDCRecoHit3D.h:285
const CDCWire & getWire() const
Getter for the wire.
Definition: CDCRecoHit3D.h:226
Vector2D getFlightDirection2D() const
Getter for the direction of flight.
Definition: CDCRecoHit3D.h:312
void setRecoDriftLength(double driftLength, bool snapRecoPos)
Setter to update the drift length of the hit.
ERightLeft getRLInfo() const
Getter for the right left passage information.
Definition: CDCRecoHit3D.h:267
A three dimensional vector.
Definition: Vector3D.h:33
const Vector2D & xy() const
Getter for the xy projected vector ( reference ! )
Definition: Vector3D.h:508
double cylindricalR() const
Getter for the cylindrical radius ( xy projected norm )
Definition: Vector3D.h:534
double z() const
Getter for the z coordinate.
Definition: Vector3D.h:496

◆ updateDriftLength() [4/6]

void updateDriftLength ( CDCSegment2D segment)

Update the drift length of the contained reconstructed hit in place.

Definition at line 131 of file DriftLengthEstimator.cc.

132{
133 for (CDCRecoHit2D& recoHit2D : segment) {
134 updateDriftLength(recoHit2D);
135 }
136}
Class representing a two dimensional reconstructed hit in the central drift chamber.
Definition: CDCRecoHit2D.h:47
double updateDriftLength(CDCRecoHit2D &recoHit2D)
Update the drift length of the reconstructed hit in place.

◆ updateDriftLength() [5/6]

void updateDriftLength ( CDCSegment3D segment,
double  tanLambda 
)

Update the drift length of the contained reconstructed hit in place.

Definition at line 177 of file DriftLengthEstimator.cc.

179{
180 for (CDCRecoHit3D& recoHit3D : segment3D) {
181 updateDriftLength(recoHit3D, tanLambda);
182 }
183}
Class representing a three dimensional reconstructed hit.
Definition: CDCRecoHit3D.h:52

◆ updateDriftLength() [6/6]

void updateDriftLength ( CDCTrack track,
double  tanLambda 
)

Update the drift length of the contained reconstructed hit in place.

Definition at line 185 of file DriftLengthEstimator.cc.

187{
188 for (CDCRecoHit3D& recoHit3D : track) {
189 updateDriftLength(recoHit3D, tanLambda);
190 }
191}

Member Data Documentation

◆ m_param_tofMassScale

double m_param_tofMassScale = NAN

Parameter : Mass to estimate the velocity in the flight time to the hit.

Definition at line 67 of file DriftLengthEstimator.h.

◆ m_param_useAlphaInDriftLength

bool m_param_useAlphaInDriftLength = true

Parameter : Switch to serve the alpha angle to the drift length translator.

Definition at line 64 of file DriftLengthEstimator.h.


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