Belle II Software development
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 (TrackingUtilities::CDCRecoHit2D &recoHit2D)
 Update the drift length of the reconstructed hit in place.
 
double updateDriftLength (TrackingUtilities::CDCRecoHit3D &recoHit3D, double tanLambda)
 Update the drift length of the reconstructed hit in place.
 
void updateDriftLength (TrackingUtilities::CDCFacet &facet)
 Re-estimate the drift length of all three contained drift circles.
 
void updateDriftLength (TrackingUtilities::CDCSegment2D &segment)
 Update the drift length of the contained reconstructed hit in place.
 
void updateDriftLength (TrackingUtilities::CDCSegment3D &segment, double tanLambda)
 Update the drift length of the contained reconstructed hit in place.
 
void updateDriftLength (TrackingUtilities::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 38 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 45 of file DriftLengthEstimator.cc.

46{
47 moduleParamList->addParameter(prefixed(prefix, "useAlphaInDriftLength"),
49 "Switch to serve the alpha angle to the drift length translator",
51
52 moduleParamList->addParameter(prefixed(prefix, "tofMassScale"),
54 "Mass to estimate the velocity in the flight time to the hit",
56}
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 ( TrackingUtilities::CDCFacet & facet)

Re-estimate the drift length of all three contained drift circles.

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

Definition at line 89 of file DriftLengthEstimator.cc.

90{
91 CDC::RealisticTDCCountTranslator tdcCountTranslator;
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::instance().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}
short getTDCCount() const
Getter for TDC count.
Definition CDCHit.h:219
const WireID & getWireID() const
Getter for the wire id.
Definition CDCWire.h:114
double getRefZ() const
Getter for the wire reference z coordinate Gives the wire's reference z coordinate.
Definition CDCWire.h:228
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.
virtual double getFlightTime2D(const TrackingUtilities::Vector2D &, double, double=1) const
Default estimator for the flight time.
static const FlightTimeEstimator & instance(std::unique_ptr< FlightTimeEstimator > replacement=nullptr)
Getter for the instance.
const CDCWireHit & getWireHit() const
Getter for the wire hit associated with the oriented hit.
void setRefDriftLength(double driftLength)
Setter for the drift length at the reference position of the wire.
const CDC::CDCWire & getWire() const
Getter for the wire the oriented hit associated to.
ERightLeft getRLInfo() const
Getter for the right left passage information.
const CDCHit * getHit() const
Getter for the CDCHit pointer into the StoreArray.
Definition CDCWireHit.h:162
double angleWith(const Vector2D &rhs) const
The angle between this and rhs.
Definition Vector2D.h:228

◆ updateDriftLength() [2/6]

double updateDriftLength ( TrackingUtilities::CDCRecoHit2D & recoHit2D)

Update the drift length of the reconstructed hit in place.

Definition at line 58 of file DriftLengthEstimator.cc.

59{
60 CDC::RealisticTDCCountTranslator tdcCountTranslator;
61
62 Vector2D flightDirection = recoHit2D.getFlightDirection2D();
63 Vector2D recoPos2D = recoHit2D.getRecoPos2D();
64 double alpha = recoPos2D.angleWith(flightDirection);
65 const double beta = 1;
66 double flightTimeEstimate = FlightTimeEstimator::instance().getFlightTime2D(recoPos2D, alpha, beta);
67
68 const CDCWire& wire = recoHit2D.getWire();
69 const CDCHit* hit = recoHit2D.getWireHit().getHit();
70 const bool rl = recoHit2D.getRLInfo() == ERightLeft::c_Right;
71
73 alpha = 0;
74 }
75
76 double driftLength = tdcCountTranslator.getDriftLength(hit->getTDCCount(),
77 wire.getWireID(),
78 flightTimeEstimate,
79 rl,
80 wire.getRefZ(),
81 alpha);
82 if (driftLength > -2 and driftLength < 16) {
83 bool snapRecoPos = true;
84 recoHit2D.setRefDriftLength(driftLength, snapRecoPos);
85 }
86 return driftLength;
87}

◆ updateDriftLength() [3/6]

double updateDriftLength ( TrackingUtilities::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
143 Vector2D flightDirection = recoHit3D.getFlightDirection2D();
144 const Vector3D& recoPos3D = recoHit3D.getRecoPos3D();
145 const Vector2D& recoPos2D = recoPos3D.xy();
146 double alpha = recoPos2D.angleWith(flightDirection);
147 const double beta = 1;
148 double flightTimeEstimate = FlightTimeEstimator::instance().getFlightTime2D(recoPos2D, alpha, beta);
149
150 if (std::isnan(tanLambda)) {
151 tanLambda = recoPos3D.z() / recoPos3D.cylindricalR();
152 }
153 const double theta = M_PI / 2 - std::atan(tanLambda);
154 flightTimeEstimate *= hypot2(1, tanLambda);
155
156 const CDCWire& wire = recoHit3D.getWire();
157 const CDCHit* hit = recoHit3D.getWireHit().getHit();
158 const bool rl = recoHit3D.getRLInfo() == ERightLeft::c_Right;
159 double driftLength =
160 tdcCountTranslator.getDriftLength(hit->getTDCCount(),
161 wire.getWireID(),
162 flightTimeEstimate,
163 rl,
164 recoPos3D.z(),
165 alpha,
166 theta,
167 hit->getADCCount());
168 if (driftLength > -2 and driftLength < 16) {
169 bool snapRecoPos = true;
170 recoHit3D.setRecoDriftLength(driftLength, snapRecoPos);
171 }
172 return driftLength;
173}
unsigned short getADCCount() const
Getter for integrated charge.
Definition CDCHit.h:230
const Vector2D & xy() const
Getter for the xy projected vector ( reference ! )
Definition Vector3D.h:513
double cylindricalR() const
Getter for the cylindrical radius ( xy projected norm )
Definition Vector3D.h:539
double z() const
Getter for the z coordinate.
Definition Vector3D.h:501
HepGeom::Vector3D< double > Vector3D
3D Vector
Definition Cell.h:34

◆ updateDriftLength() [4/6]

void updateDriftLength ( TrackingUtilities::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}
double updateDriftLength(TrackingUtilities::CDCRecoHit2D &recoHit2D)
Update the drift length of the reconstructed hit in place.

◆ updateDriftLength() [5/6]

void updateDriftLength ( TrackingUtilities::CDCSegment3D & segment,
double tanLambda )

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

Definition at line 176 of file DriftLengthEstimator.cc.

178{
179 for (CDCRecoHit3D& recoHit3D : segment3D) {
180 updateDriftLength(recoHit3D, tanLambda);
181 }
182}

◆ updateDriftLength() [6/6]

void updateDriftLength ( TrackingUtilities::CDCTrack & track,
double tanLambda )

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

Definition at line 184 of file DriftLengthEstimator.cc.

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

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 69 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 66 of file DriftLengthEstimator.h.


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