TLineFitter Class Reference

A class to fit a TTrackBase object to a line. More...

#include <TLineFitter.h>

Inheritance diagram for TLineFitter:

TMFitter TRobustLineFitter List of all members.

Public Member Functions

 TLineFitter (const std::string &name)
 Constructor.
virtual ~TLineFitter ()
 Destructor.
void dump (const std::string &message=std::string(""), const std::string &prefix=std::string("")) const
 dumps debug information.
double a (void) const
double b (void) const
double det (void) const
virtual int fit (TTrackBase &) const
const std::stringname (void) const
 returns name.

Protected Member Functions

void fitDone (TTrackBase &) const
 sets the fitted flag. (Bad implementation)

Private Attributes

double _a
double _b
double _det

Detailed Description

A class to fit a TTrackBase object to a line.

Definition at line 28 of file TLineFitter.h.


Constructor & Destructor Documentation

TLineFitter::TLineFitter ( const std::string name  ) 

Constructor.

Definition at line 18 of file TLineFitter.cxx.

00019 : TMFitter(name), _a(0.), _b(0.), _det(0.) {
00020 }

TLineFitter::~TLineFitter (  )  [virtual]

Destructor.

Definition at line 22 of file TLineFitter.cxx.

00022                           {
00023 }


Member Function Documentation

double TLineFitter::a ( void   )  const [inline]

Reimplemented in TRobustLineFitter.

Definition at line 67 of file TLineFitter.h.

References _a.

Referenced by TRobustLineFitter::fit().

00067                          {
00068     return _a;
00069 }

double TLineFitter::b ( void   )  const [inline]

Reimplemented in TRobustLineFitter.

Definition at line 73 of file TLineFitter.h.

References _b.

Referenced by TRobustLineFitter::fit().

00073                          {
00074     return _b;
00075 }

double TLineFitter::det ( void   )  const [inline]

Reimplemented in TRobustLineFitter.

Definition at line 79 of file TLineFitter.h.

References _det.

Referenced by TRobustLineFitter::fit().

00079                            {
00080     return _det;
00081 }

void TLineFitter::dump ( const std::string message = std::string(""),
const std::string prefix = std::string("") 
) const

dumps debug information.

Reimplemented from TMFitter.

Reimplemented in TRobustLineFitter.

int TLineFitter::fit ( TTrackBase  )  const [virtual]

Implements TMFitter.

Reimplemented in TRobustLineFitter.

Definition at line 26 of file TLineFitter.cxx.

References _a, _b, _det, TMFitter::fitDone(), genRecEmupikp::i, Line, t(), TFitAlreadyFitted, TFitErrorFewHits, TFitFailed, and x.

Referenced by TRobustLineFitter::fit().

00026                                      {
00027 
00028     //...Already fitted ?...
00029     if (t.fitted()) return TFitAlreadyFitted;
00030 
00031     //...Check # of hits...
00032     if (t.links().length() < 2) return TFitErrorFewHits;
00033 
00034     unsigned n = t.links().length();
00035     if (_det == 0. && n == 2) {
00036         double x0 = t.links()[0]->position().x();
00037         double y0 = t.links()[0]->position().y();
00038         double x1 = t.links()[1]->position().x();
00039         double y1 = t.links()[1]->position().y();
00040         if (x0 == x1) return TFitFailed;
00041         _a = (y0 - y1) / (x0 - x1);
00042         _b = - _a * x1 + y1;
00043     }
00044     else {
00045         double sum = (double) n;
00046         double sumX = 0., sumY = 0., sumX2 = 0., sumXY = 0., sumY2 = 0.;
00047         for (unsigned i = 0; i < n; i++) {
00048             const HepPoint3D & p = t.links()[i]->position();
00049             double x = p.x();
00050             double y = p.y();
00051             sumX  += x;
00052             sumY  += y;
00053             sumX2 += x * x;
00054             sumXY += x * y;
00055             sumY2 += y * y;
00056         }
00057 
00058         _det = sum * sumX2 - sumX * sumX;
00059 #ifdef TRKRECO_DEBUG_DETAIL
00060         cout << "        TLineFitter::fit ... det=" << _det << std::endl;
00061 #endif
00062         if (_det == 0.) {
00063             return TFitFailed;
00064         }
00065         else {
00066             _a = (sumXY * sum - sumX * sumY) / _det;
00067             _b = (sumX2 * sumY - sumX * sumXY) / _det;
00068         }
00069     }
00070 
00071     if (t.objectType() == Line)
00072         ((TMLine &) t).property(_a, _b, _det);
00073     fitDone(t);
00074     return 0;
00075 }

void TMFitter::fitDone ( TTrackBase  )  const [protected, inherited]

sets the fitted flag. (Bad implementation)

Definition at line 24 of file TMFitter.cxx.

References t().

Referenced by TRobustLineFitter::fit(), fit(), and TCircleFitter::fit().

00024                                       {
00025     t._fitted = true;
00026 }

const std::string & TMFitter::name ( void   )  const [inline, inherited]

returns name.

Definition at line 73 of file TMFitter.h.

References TMFitter::_name.

00073                          {
00074     return _name;
00075 }


Member Data Documentation

double TLineFitter::_a [mutable, private]

Reimplemented in TRobustLineFitter.

Definition at line 49 of file TLineFitter.h.

Referenced by a(), and fit().

double TLineFitter::_b [mutable, private]

Reimplemented in TRobustLineFitter.

Definition at line 50 of file TLineFitter.h.

Referenced by b(), and fit().

double TLineFitter::_det [mutable, private]

Reimplemented in TRobustLineFitter.

Definition at line 51 of file TLineFitter.h.

Referenced by det(), and fit().


Generated on Tue Nov 29 23:36:01 2016 for BOSS_7.0.2 by  doxygen 1.4.7