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 49 of file DriftLengthEstimator.cc.

50{
51 moduleParamList->addParameter(prefixed(prefix, "useAlphaInDriftLength"),
53 "Switch to serve the alpha angle to the drift length translator",
55
56 moduleParamList->addParameter(prefixed(prefix, "tofMassScale"),
58 "Mass to estimate the velocity in the flight time to the hit",
60}
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 93 of file DriftLengthEstimator.cc.

94{
95 CDC::RealisticTDCCountTranslator tdcCountTranslator;
96
97 const UncertainParameterLine2D& line = facet.getFitLine();
98 ROOT::Math::XYVector flightDirection = line->tangential();
99 ROOT::Math::XYVector centralPos2D = line->closest(facet.getMiddleWire().getRefPos2D());
100 double alpha = ROOT::Math::VectorUtil::DeltaPhi(centralPos2D, flightDirection);
102 alpha = 0;
103 }
104
105 auto doUpdate = [&](CDCRLWireHit & rlWireHit, ROOT::Math::XYVector recoPos2D) {
106 const CDCWire& wire = rlWireHit.getWire();
107 const CDCHit* hit = rlWireHit.getWireHit().getHit();
108 const bool rl = rlWireHit.getRLInfo() == ERightLeft::c_Right;
109 const double beta = 1;
110 double flightTimeEstimate = FlightTimeEstimator::instance().getFlightTime2D(recoPos2D, alpha, beta);
111 double driftLength = tdcCountTranslator.getDriftLength(hit->getTDCCount(),
112 wire.getWireID(),
113 flightTimeEstimate,
114 rl,
115 wire.getRefZ(),
116 alpha);
117 rlWireHit.setRefDriftLength(driftLength);
118 };
119
120 doUpdate(facet.getStartRLWireHit(), facet.getStartRecoPos2D());
121 doUpdate(facet.getMiddleRLWireHit(), facet.getMiddleRecoPos2D());
122 doUpdate(facet.getEndRLWireHit(), facet.getEndRecoPos2D());
123
124 // More accurate implementation
125 // double startDriftLength = updateDriftLength(facet.getStartRecoHit2D());
126 // facet.getStartRLWireHit().setRefDriftLength(startDriftLength);
127
128 // double middleDriftLength = updateDriftLength(facet.getMiddleRecoHit2D());
129 // facet.getMiddleRLWireHit().setRefDriftLength(middleDriftLength);
130
131 // double endDriftLength = updateDriftLength(facet.getEndRecoHit2D());
132 // facet.getEndRLWireHit().setRefDriftLength(endDriftLength);
133}
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.
static const FlightTimeEstimator & instance(std::unique_ptr< FlightTimeEstimator > replacement=nullptr)
Getter for the instance.
virtual double getFlightTime2D(const ROOT::Math::XYVector &, double, double=1) const
Default estimator for the flight time.
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:160

◆ updateDriftLength() [2/6]

double updateDriftLength ( TrackingUtilities::CDCRecoHit2D & recoHit2D)

Update the drift length of the reconstructed hit in place.

Definition at line 62 of file DriftLengthEstimator.cc.

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

◆ updateDriftLength() [3/6]

double updateDriftLength ( TrackingUtilities::CDCRecoHit3D & recoHit3D,
double tanLambda )

Update the drift length of the reconstructed hit in place.

Definition at line 142 of file DriftLengthEstimator.cc.

144{
145 CDC::RealisticTDCCountTranslator tdcCountTranslator;
146
147 ROOT::Math::XYVector flightDirection = recoHit3D.getFlightDirection2D();
148 const ROOT::Math::XYZVector& recoPos3D = recoHit3D.getRecoPos3D();
149 const ROOT::Math::XYVector& recoPos2D = VectorUtil::getXYVector(recoPos3D);
150 double alpha = ROOT::Math::VectorUtil::DeltaPhi(recoPos2D, flightDirection);
151 const double beta = 1;
152 double flightTimeEstimate = FlightTimeEstimator::instance().getFlightTime2D(recoPos2D, alpha, beta);
153
154 if (std::isnan(tanLambda)) {
155 tanLambda = recoPos3D.z() / recoPos3D.Rho();
156 }
157 const double theta = M_PI / 2 - std::atan(tanLambda);
158 flightTimeEstimate *= hypot2(1, tanLambda);
159
160 const CDCWire& wire = recoHit3D.getWire();
161 const CDCHit* hit = recoHit3D.getWireHit().getHit();
162 const bool rl = recoHit3D.getRLInfo() == ERightLeft::c_Right;
163 double driftLength =
164 tdcCountTranslator.getDriftLength(hit->getTDCCount(),
165 wire.getWireID(),
166 flightTimeEstimate,
167 rl,
168 recoPos3D.z(),
169 alpha,
170 theta,
171 hit->getADCCount());
172 if (driftLength > -2 and driftLength < 16) {
173 bool snapRecoPos = true;
174 recoHit3D.setRecoDriftLength(driftLength, snapRecoPos);
175 }
176 return driftLength;
177}
unsigned short getADCCount() const
Getter for integrated charge.
Definition CDCHit.h:230

◆ updateDriftLength() [4/6]

void updateDriftLength ( TrackingUtilities::CDCSegment2D & segment)

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

Definition at line 135 of file DriftLengthEstimator.cc.

136{
137 for (CDCRecoHit2D& recoHit2D : segment) {
138 updateDriftLength(recoHit2D);
139 }
140}
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 180 of file DriftLengthEstimator.cc.

182{
183 for (CDCRecoHit3D& recoHit3D : segment3D) {
184 updateDriftLength(recoHit3D, tanLambda);
185 }
186}

◆ updateDriftLength() [6/6]

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

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

Definition at line 188 of file DriftLengthEstimator.cc.

190{
191 for (CDCRecoHit3D& recoHit3D : track) {
192 updateDriftLength(recoHit3D, tanLambda);
193 }
194}

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: