BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
TrkHelixFitter Class Reference

#include <TrkHelixFitter.h>

Inheritance diagram for TrkHelixFitter:

Public Member Functions

 TrkHelixFitter (bool allowFlips=false, bool allowDrops=false)
virtual ~TrkHelixFitter ()
TrkHelixFitteroperator= (const TrkHelixFitter &right)
 TrkHelixFitter (const TrkHelixFitter &)
TrkErrCode fit (TrkHotList &hitList, TrkSimpTraj &)
void setFittingPar (bool allowFlips, bool allowDrops)
double lastChisq () const
 TrkHelixFitter (bool allowFlips=false, bool allowDrops=false)
virtual ~TrkHelixFitter ()
TrkHelixFitteroperator= (const TrkHelixFitter &right)
 TrkHelixFitter (const TrkHelixFitter &)
TrkErrCode fit (TrkHotList &hitList, TrkSimpTraj &)
void setFittingPar (bool allowFlips, bool allowDrops)
double lastChisq () const
 TrkHelixFitter (bool allowFlips=false, bool allowDrops=false)
virtual ~TrkHelixFitter ()
TrkHelixFitteroperator= (const TrkHelixFitter &right)
 TrkHelixFitter (const TrkHelixFitter &)
TrkErrCode fit (TrkHotList &hitList, TrkSimpTraj &)
void setFittingPar (bool allowFlips, bool allowDrops)
double lastChisq () const
Public Member Functions inherited from TrkHitOnTrkUpdater
virtual ~TrkHitOnTrkUpdater ()=0
virtual ~TrkHitOnTrkUpdater ()=0
virtual ~TrkHitOnTrkUpdater ()=0

Static Public Attributes

static bool m_debug = false
static double nSigmaCut [43]

Additional Inherited Members

Protected Member Functions inherited from TrkHitOnTrkUpdater
TrkErrCode updateMeasurement (TrkHitOnTrk &hot, const TrkDifTraj *traj=0, bool maintainAmbiguity=false) const
void setActivity (TrkHitOnTrk &hot, bool active) const
void setParent (TrkHitOnTrk &hot, TrkRep *parent) const
TrkBase::Functors::updateMeasurement updateMeasurement (const TrkDifTraj *traj=0, bool maintainAmbiguity=false) const
TrkBase::Functors::setParent setParent (TrkRep *parent) const
TrkBase::Functors::setActive setActive (bool active) const
TrkErrCode updateMeasurement (TrkHitOnTrk &hot, const TrkDifTraj *traj=0, bool maintainAmbiguity=false) const
void setActivity (TrkHitOnTrk &hot, bool active) const
void setParent (TrkHitOnTrk &hot, TrkRep *parent) const
TrkBase::Functors::updateMeasurement updateMeasurement (const TrkDifTraj *traj=0, bool maintainAmbiguity=false) const
TrkBase::Functors::setParent setParent (TrkRep *parent) const
TrkBase::Functors::setActive setActive (bool active) const
TrkErrCode updateMeasurement (TrkHitOnTrk &hot, const TrkDifTraj *traj=0, bool maintainAmbiguity=false) const
void setActivity (TrkHitOnTrk &hot, bool active) const
void setParent (TrkHitOnTrk &hot, TrkRep *parent) const
TrkBase::Functors::updateMeasurement updateMeasurement (const TrkDifTraj *traj=0, bool maintainAmbiguity=false) const
TrkBase::Functors::setParent setParent (TrkRep *parent) const
TrkBase::Functors::setActive setActive (bool active) const

Detailed Description

Constructor & Destructor Documentation

◆ TrkHelixFitter() [1/6]

TrkHelixFitter::TrkHelixFitter ( bool allowFlips = false,
bool allowDrops = false )

Definition at line 45 of file TrkHelixFitter.cxx.

46 : //------------------------------------------------------------------------
47 TrkHitOnTrkUpdater() {
48 _allowFlips = allowFlips;
49 _allowDrops = allowDrops;
50 _lastChisq = -1.;
51}

Referenced by operator=(), and TrkHelixFitter().

◆ ~TrkHelixFitter() [1/3]

TrkHelixFitter::~TrkHelixFitter ( )
virtual

Definition at line 41 of file TrkHelixFitter.cxx.

41{}

◆ TrkHelixFitter() [2/6]

TrkHelixFitter::TrkHelixFitter ( const TrkHelixFitter & right)

Definition at line 54 of file TrkHelixFitter.cxx.

55 : //------------------------------------------------------------------------
56 TrkHitOnTrkUpdater() {
57 _allowFlips = right._allowFlips;
58 _allowDrops = right._allowDrops;
59 _lastChisq = -1.;
60}

◆ TrkHelixFitter() [3/6]

TrkHelixFitter::TrkHelixFitter ( bool allowFlips = false,
bool allowDrops = false )

◆ ~TrkHelixFitter() [2/3]

virtual TrkHelixFitter::~TrkHelixFitter ( )
virtual

◆ TrkHelixFitter() [4/6]

TrkHelixFitter::TrkHelixFitter ( const TrkHelixFitter & )

◆ TrkHelixFitter() [5/6]

TrkHelixFitter::TrkHelixFitter ( bool allowFlips = false,
bool allowDrops = false )

◆ ~TrkHelixFitter() [3/3]

virtual TrkHelixFitter::~TrkHelixFitter ( )
virtual

◆ TrkHelixFitter() [6/6]

TrkHelixFitter::TrkHelixFitter ( const TrkHelixFitter & )

Member Function Documentation

◆ fit() [1/3]

TrkErrCode TrkHelixFitter::fit ( TrkHotList & hitList,
TrkSimpTraj & theTraj )

Definition at line 82 of file TrkHelixFitter.cxx.

82 {
83 //------------------------------------------------------------------------
84 // Assumes that weight matrix is diagonal. */
85 /* Least-squares fit; the measured
86 quantity is the residual. The fit is accomplished by linearizing
87 the equation, using the derivatives of the residual w/r/t the
88 track parameters; because of this approximation, the fit may be iterated.
89 The fitted parameters are given by:
90 delta-param() = Vparam * Atran * Vyinv * delChi
91 where Vyinv = covariance matrix for the measurements
92 Atran = transpose of A
93 A = matrix of derivatives of delChi wrt trk params
94 (size = no. of params x no. of hits)
95 Vparam = covariance (error)" matrix of the fitted parameters
96 = (Atran * Vyinv * A)**-1
97 */
98
99 bool permitFlips = _allowFlips;
100 bool lPickHits = _allowDrops;
101 // permitFlips = 1 => permit state changes like ambiguity flips
102 // lPickHits = 1 => choose the best set of active hits on each iteration
103 int i;
104 TrkErrCode status( TrkErrCode::succeed );
105 int lPicked = 0; // = 1 => have either picked up or dropped an active hit
106 // on this iteration
107 register double chisqold;
108 double chisqnew, chichange;
109 double chitest = 0.01; // delta(chi2) < chitest => fit has converged
110 int nZ = 0, nXY = 0; // # active hits in each view
111 int nActive = 0;
112
113 // vparam = Vparam defined above ( = symmetric matrix)
114 // diffsum = Atran * Vyinv * delChi defined above (column vector)
115 // iter = iteration loop index
116 // itermax = max number of iterations
117 // delpar = change in parameters during this iteration
118 // chisqold, chisqnew = chisq before and after latest iteration
119
120 /***************************************************************************/
121 setLastChisq( -1. );
122 // bool shiftRef = false;//yzhang FIXME
123 // HepPoint3D storePoint;
124
125 // Change reference point of trajectory to be at first hit -- reduces
126 // numerical problems
127 // double oldT0 = hitlist[0]->parentTrack()->trackT0();
128 // if (shiftRef) {
129 // double firstFlight = hitlist[0]->fltLen();
130 // double newTime = hitlist[0]->parentTrack()->fitResult()->arrivalTime(firstFlight);
131 // hitlist[0]->parentTrack()->resetT0(newTime);
132 // Point3D.here = theTraj.position(firstFlight);
133 //
134 // storePoint = here;
135 // DifPoint dfPos;
136 // DifVector dfDir, dfDelDir;
137 // theTraj.getDFInfo(firstFlight, dfPos, dfDir, dfDelDir);
138 //
139 // theTraj.changePoint(here, fltOffset);
140 //}
141
142 //*** Things that don't change with each iteration
143 int nhits = hitlist.nHit();
144 std::vector<double> delChi( nhits, 0 );
145 std::vector<std::vector<double>> deriv( nhits );
146
147 TrkParams& params = *( theTraj.parameters() );
148 // int npar = params.nPar();//yzhang temp
149 int npar = theTraj.nPar(); // yzhang temp
150
151 // Decide minimum numbers of hits required. This could turn out to be wrong
152 // someday.
153
154 bool l3d = ( npar > 3 ); // I hope always true
155 const int minZ = l3d ? 2 : 0;
156 const int minXY = npar - minZ;
157 const int minAct = minZ + minXY;
158
159 HepSymMatrix vparam( npar, 0 );
160 HepVector diffsum( npar );
161 HepVector delpar( npar );
162
163 std::vector<std::vector<double>>::iterator ideriv = deriv.begin();
164 std::vector<double>::iterator idelChi = delChi.begin();
165 assert( ( (int)deriv.size() ) == ( hitlist.end() - hitlist.begin() ) );
166 for ( TrkHotList::nc_hot_iterator ihit = hitlist.begin(); ihit != hitlist.end();
167 ++ihit, ++ideriv, ++idelChi )
168 {
169 ideriv->resize( npar );
170 if ( ihit->isActive() )
171 {
172 nActive++;
173 if ( ihit->whatView() == TrkEnums::xyView ) nXY++;
174 else if ( ihit->whatView() == TrkEnums::zView ) nZ++;
175 else if ( ihit->whatView() == TrkEnums::bothView )
176 {
177 nZ++;
178 nXY++;
179 }
180 }
181
182 // Update the Hots to reflect new reference point
183 // if (shiftRef) {
184 // ihit->setFltLen( ihit->fltLen() - fltOffset );
185 //}
186 } // end loop over hits
187 if ( nXY < minXY || nZ < minZ || nActive < minAct )
188 {
189 status.setFailure( 11, "Not enough hits in TrkHelixFitter! " );
190 return status;
191 }
192
193 // if (shiftRef) {
194 // double firstFlight = hitlist[0]->fltLen();
195 // Point3D.here = theTraj.position(firstFlight);
196 // DifPoint dfPos;
197 // DifVector dfDir, dfDelDir;
198 // theTraj.getDFInfo(firstFlight, dfPos, dfDir, dfDelDir);
199 // double dummy = 0.;
200 // hitlist[0]->updateFitStuff(dummy, 0, !permitFlips);
201 // hitlist[0]->updateMeasurement();
202 // hitlist[0]->updateFitStuff(dummy, 0, !permitFlips);
203 // }
204 // static HepVector derivs(npar);//yzhang temp
205 HepVector derivs( npar ); // zhang change
206 // HepVector derivs(npar);//yzhang temp
207 TrkErrCode calcResult;
208 //**** Iterate fit.
209 size_t itermax = 12;
210 for ( size_t iter = 1; iter <= itermax; iter++ )
211 {
212 bool mustIterate( false ); // flag to force another iteration
213 chisqold = 0.0;
214 for ( i = 0; i < npar; i++ ) diffsum[i] = 0.0;
215 vparam *= 0.0; // dumb way of clearing matrix
216
217 /* Loop over hits, accumulate sums, calculate chisq for current params. */
218 std::vector<std::vector<double>>::iterator ideriv = deriv.begin();
219 std::vector<double>::iterator idelChi = delChi.begin();
220 assert( ( (int)deriv.size() ) == ( hitlist.end() - hitlist.begin() ) );
221 for ( TrkHotList::nc_hot_iterator ihit = hitlist.begin(); ihit != hitlist.end();
222 ++ihit, ++ideriv, ++idelChi )
223 {
224
225 // Ask the hit to do the calculations
226 calcResult = updateMeasurement( *ihit, 0, !permitFlips );
227 double deltaChiNew;
228 if ( calcResult.success() )
229 {
230 if ( iter < 2 )
231 { // FIXME? only update derivatives at first iteration...
232 calcResult = ihit->getFitStuff( derivs, deltaChiNew );
233 for ( i = 0; i < npar; ++i ) ( *ideriv )[i] = derivs[i];
234 // if(m_debug){
235 // std::cout<<"in TrkHelixFitter " <<std::endl;//yzhang deubg
236 // cout << "deriv: ";
237 // for (i=0;i<npar;++i) cout << (*ideriv)[i] << " " ;
238 // cout << endl;
239 // }
240 }
241 else { calcResult = ihit->getFitStuff( deltaChiNew ); }
242 }
243 if ( calcResult.failure() )
244 {
245 if ( m_debug )
246 {
247 cout << "ErrMsg(warning) TrkHelixFitter:"
248 << "unable to getFitStuff for hit " << *ihit << endl;
249 }
250 ihit->setUsability( false ); // something bombed
251 continue;
252 }
253 mustIterate = ( mustIterate || ( calcResult.success() != 1 ) );
254 *idelChi = deltaChiNew;
255 if ( m_debug )
256 {
257 cout << ( ihit - hitlist.begin() );
258 ihit->print( std::cout );
259 cout << " dChi " << *idelChi << " amb " << ihit->ambig() << " resid " << ihit->resid()
260 << " rms " << ihit->hitRms() << " hitlen " << ihit->hitLen() << " fltlen "
261 << ihit->fltLen() << endl;
262 }
263 if ( ihit->isActive() == false )
264 {
265 if ( m_debug ) std::cout << "SKIP not active hit" << std::endl;
266 continue;
267 }
268 chisqold += deltaChiNew * deltaChiNew;
269
270 for ( i = 0; i < npar; ++i )
271 {
272 diffsum[i] += ( *ideriv )[i] * deltaChiNew;
273 for ( int j = 0; j < i + 1; ++j )
274 { vparam.fast( i + 1, j + 1 ) += ( *ideriv )[i] * ( *ideriv )[j]; }
275 }
276 } // end loop over hits
277
278 //**** Calculate new paramters
279 int ierr;
280 vparam.invert( ierr );
281 if ( ierr )
282 {
283 if ( m_debug )
284 {
285 cout << "ErrMsg(warning) TrkHelixFitter:"
286 << "Matrix inversion failed " << endl;
287 }
288 status.setFailure( 12, "Matrix inversion failed in TrkHelixFitter" );
289 // break;
290 }
291 delpar = vparam * ( -diffsum );
292 if ( m_debug ) { cout << " delpar = " << delpar << endl; }
293 // The following test relies on having a fixed location for phi0 in
294 // all simple params; it should be made robust somehow!!!
295 if ( fabs( delpar[1] ) > 1. )
296 {
297 if ( m_debug )
298 {
299 cout << "ErrMsg(warning) TrkHelixFitter:"
300 << "Pathological fit " << endl;
301 }
302 status.setFailure( 13, "Pathological fit in TrkHelixFitter." );
303 // break;
304 }
305
306 for ( i = 0; i < npar; ++i ) params.parameter()[i] += delpar[i];
307 if ( m_debug ) { cout << " params " << params.parameter() << endl; }
308
309 //***** Loop through the hits again, calculating the approx change
310 // in residuals and chisq., and picking which hits should be active
311 // for next iteration.
312
313 chisqnew = 0.0;
314 lPicked = 0;
315 double bigDelChi = 0.0;
316 TrkHotList::nc_hot_iterator bigHit = hitlist.end();
317
318 mustIterate =
319 ( mustIterate || ( iter <= 2 && lPickHits ) ); // iterate until hit-dropping allowed
320 ideriv = deriv.begin();
321 idelChi = delChi.begin();
322 for ( TrkHotList::nc_hot_iterator ihit = hitlist.begin(); ihit != hitlist.end();
323 ++ihit, ++ideriv, ++idelChi )
324 {
325 if ( m_debug ) { ihit->print( std::cout ); }
326 if ( !ihit->isUsable() )
327 {
328 if ( m_debug ) { std::cout << "hit NOT usable " << std::endl; }
329 continue;
330 }
331 // double weight = ihit->weight(); // FIXME: why isn't weight used???
332 for ( i = 0; i < npar; i++ ) { *idelChi += ( *ideriv )[i] * delpar[i]; }
333 if ( ihit->isActive() ) chisqnew += *idelChi * *idelChi;
334
335 // Hit-picking
336 if ( !mustIterate && lPickHits )
337 {
338 double abDelChi = fabs( *idelChi );
339 // yzhang fix nSigmaCut for each layers 2010-04-13
340 if ( abDelChi <= nSigmaCut[ihit->layerNumber()] )
341 {
342 if ( m_debug )
343 {
344 std::cout << "abDelChi " << abDelChi << "<?" << nSigmaCut[ihit->layerNumber()]
345 << std::endl; // yzhang debug
346 }
347 if ( ihit->isActive() == 0 )
348 {
349 ihit->setActivity( 1 ); // reactivate hit
350 if ( m_debug ) { cout << "set ACTIVE, Added " << endl; }
351 lPicked = 1;
352 nActive++;
353 if ( ihit->whatView() == TrkEnums::xyView ) nXY++;
354 else if ( ihit->whatView() == TrkEnums::zView ) nZ++;
355 else if ( ihit->whatView() == TrkEnums::bothView )
356 {
357 nZ++;
358 nXY++;
359 }
360 }
361 }
362 else
363 {
364 if ( ihit->isActive() )
365 {
366 if ( abDelChi > bigDelChi )
367 {
368 if ( m_debug )
369 {
370 std::cout << "bigest set INACTIVE, abDelChi = " << abDelChi << ">"
371 << nSigmaCut[ihit->layerNumber()] << " bigDelChi=" << bigDelChi
372 << std::endl;
373 }
374 bigDelChi = abDelChi;
375 bigHit = ihit;
376 }
377 }
378 }
379 } // end if iter > 2 (hit-picking)
380 } // end loop over hits
381
382 // Drop hit with worst residual
383 if ( lPickHits )
384 {
385 int lDrop = 0;
386 if ( bigHit != hitlist.end() && ( nActive > minAct ) )
387 {
388 if ( bigHit->whatView() == TrkEnums::xyView && nXY > minXY )
389 {
390 nXY--;
391 lDrop = 1;
392 }
393 else if ( bigHit->whatView() == TrkEnums::zView && nZ > minZ )
394 {
395 nZ--;
396 lDrop = 1;
397 }
398 else if ( bigHit->whatView() == TrkEnums::bothView && nZ > minZ && nXY > minXY )
399 {
400 nZ--;
401 nXY--;
402 lDrop = 1;
403 }
404 if ( lDrop == 1 )
405 {
406 lPicked = 1;
407 nActive--;
408 bigHit->setActivity( 0 ); // deactivate hit
409 if ( m_debug )
410 {
411 std::cout << "---deactivate hit!! delChi2=" << bigDelChi << std::endl;
412 std::cout << "---";
413 bigHit->print( std::cout );
414 std::cout << "--------------------!! " << std::endl;
415 }
416 }
417 }
418 } // end if lPickHits
419
420 /* Test for convergence. */
421 chichange = chisqold - chisqnew;
422 if ( m_debug ) { cout << "chisq from " << chisqold << " -> " << chisqnew << endl; }
423 if ( chichange < -0.5 && !mustIterate && lPicked == 0 )
424 {
425 if ( m_debug )
426 {
427 cout << "ErrMsg(warning)"
428 << " blowing up: " << chichange << endl;
429 }
430 /* It's blowing up. */
431 setLastChisq( chisqnew );
432 status.setFailure( 1 );
433
434 if ( m_debug ) std::cout << "failure 1 " << std::endl;
435 break;
436 }
437 else if ( chichange < chitest && !mustIterate && lPicked == 0 )
438 {
439 // We converged.
440 status.setSuccess( 1 );
441 setLastChisq( chisqnew );
442 if ( m_debug ) std::cout << "success 1 " << std::endl;
443 break;
444 }
445
446 if ( iter == itermax )
447 {
448 setLastChisq( chisqnew );
449 status.setSuccess( 2 );
450 if ( m_debug ) std::cout << "success 2 " << std::endl;
451 }
452 } /* end iteration loop */
453
454 // store the error matrix
455 params.covariance() = vparam;
456
457 // Attempt to calculate deltaChisq for this hit (compared to leaving hit
458 // out of the fit).
459 /* chisqnew = 0;
460 if (status.success()) {
461 HepVector deltaAlpha(npar);
462 for (ihit = 0; ihit < nhits; ihit++) {
463 thisHot = hitlist(ihit);
464 if (!thisHot->isActive()) continue;
465 HepVector derivs(npar, 0);
466 for (i = 0; i < npar; i++) {
467 derivs[i] = deriv[ihit][i];
468 }
469 double weight = thisHot->weight();
470 double resid = thisHot->resid();
471 deltaAlpha = vparam * derivs;
472 deltaAlpha *= (resid * weight);
473 // cout << resid * resid * weight
474 // << " " << resid * weight * dot(derivs, deltaAlpha) << endl;
475 // thisHot->chi2Contrib = -dot(deltaAlpha, temp) + resid * resid * weight
476 // + 2. * resid * weight * dot(derivs, deltaAlpha);
477 }
478 }
479 */
480
481 // Change reference point back to origin
482 // if (shiftRef) {
483 // Point3D.home(0.,0.,0.);
484 // theTraj.changePoint(home, fltOffset);
485 // hitlist[0]->parentTrack()->resetT0(oldT0);
486 // for (ihit = 0; ihit < nhits; ihit++) {
487 // thisHot = hitlist[ihit];
488 // thisHot->setFltLen( thisHot->fltLen() - fltOffset );
489 // }
490 //}
491 return status;
492}
EvtStreamInputIterator< typename Generator::result_type > iter(Generator gen, int N=0)
TrkErrCode updateMeasurement(TrkHitOnTrk &hot, const TrkDifTraj *traj=0, bool maintainAmbiguity=false) const
void setActivity(bool turnOn)
virtual TrkEnums::TrkViewInfo whatView() const =0
virtual void print(std::ostream &) const
TrkHitOnTrkIter< TrkHotList::iterator_traits > nc_hot_iterator

◆ fit() [2/3]

TrkErrCode TrkHelixFitter::fit ( TrkHotList & hitList,
TrkSimpTraj &  )

◆ fit() [3/3]

TrkErrCode TrkHelixFitter::fit ( TrkHotList & hitList,
TrkSimpTraj &  )

◆ lastChisq() [1/3]

double TrkHelixFitter::lastChisq ( ) const
inline

Definition at line 39 of file InstallArea/x86_64-el9-gcc13-dbg/include/TrkFitter/TrkHelixFitter.h.

39{ return _lastChisq; }

◆ lastChisq() [2/3]

double TrkHelixFitter::lastChisq ( ) const
inline

Definition at line 39 of file InstallArea/x86_64-el9-gcc13-opt/include/TrkFitter/TrkHelixFitter.h.

39{ return _lastChisq; }

◆ lastChisq() [3/3]

double TrkHelixFitter::lastChisq ( ) const
inline

Definition at line 39 of file Reconstruction/MdcPatRec/TrkFitter/include/TrkFitter/TrkHelixFitter.h.

39{ return _lastChisq; }

◆ operator=() [1/3]

TrkHelixFitter & TrkHelixFitter::operator= ( const TrkHelixFitter & right)

Definition at line 63 of file TrkHelixFitter.cxx.

65{
66 if ( &right == this ) return *this;
67 _allowFlips = right._allowFlips;
68 _allowDrops = right._allowDrops;
69 _lastChisq = right._lastChisq;
70
71 return *this;
72}

◆ operator=() [2/3]

TrkHelixFitter & TrkHelixFitter::operator= ( const TrkHelixFitter & right)

◆ operator=() [3/3]

TrkHelixFitter & TrkHelixFitter::operator= ( const TrkHelixFitter & right)

◆ setFittingPar() [1/3]

void TrkHelixFitter::setFittingPar ( bool allowFlips,
bool allowDrops )

Definition at line 75 of file TrkHelixFitter.cxx.

75 {
76 //------------------------------------------------------------------------
77 _allowFlips = allowFlips;
78 _allowDrops = allowDrops;
79}

Referenced by TrkHelixMaker::addZValues().

◆ setFittingPar() [2/3]

void TrkHelixFitter::setFittingPar ( bool allowFlips,
bool allowDrops )

◆ setFittingPar() [3/3]

void TrkHelixFitter::setFittingPar ( bool allowFlips,
bool allowDrops )

Member Data Documentation

◆ m_debug

◆ nSigmaCut

double TrkHelixFitter::nSigmaCut
static
Initial value:
= {
10., 5., 5., 10., 10., 5., 5., 10.,
10., 5., 5., 5., 5., 5., 5., 5., 5., 5., 5., 10.,
10., 5., 5., 5., 5., 5., 5., 5., 5., 5., 5., 5., 5., 5., 5., 10.,
10., 5., 5., 5., 5., 5., 10.
}

Definition at line 34 of file InstallArea/x86_64-el9-gcc13-dbg/include/TrkFitter/TrkHelixFitter.h.

39 { return _lastChisq; }

Referenced by fit(), MdcTrkRecon::initialize(), MdcxTrackFinder::initialize(), and MdcFlagHold::printPar().


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