Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

TCircleFitter Class Reference

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

#include <TCircleFitter.h>

Inheritance diagram for TCircleFitter:

TMFitter TMFitter List of all members.

Public Member Functions

void dump (const std::string &message=std::string(""), const std::string &prefix=std::string("")) const
 dumps debug information.
void dump (const std::string &message=std::string(""), const std::string &prefix=std::string("")) const
 dumps debug information.
virtual int fit (TTrackBase &) const
virtual int fit (TTrackBase &) const
const std::string & name (void) const
 returns name.
const std::string & name (void) const
 returns name.
 TCircleFitter (const std::string &name)
 Constructor.
 TCircleFitter (const std::string &name)
 Constructor.
virtual ~TCircleFitter ()
 Destructor.
virtual ~TCircleFitter ()
 Destructor.

Protected Member Functions

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

Private Attributes

HepPoint3D _center
double _charge
double _radius

Detailed Description

A class to fit a TTrackBase object to a circle.


Constructor & Destructor Documentation

TCircleFitter::TCircleFitter const std::string &  name  ) 
 

Constructor.

00022 : TMFitter(name), _charge(0.), _radius(0.), _center(HepPoint3D(0., 0., 0.)) {
00023 }

TCircleFitter::~TCircleFitter  )  [virtual]
 

Destructor.

00025                               {
00026 }

TCircleFitter::TCircleFitter const std::string &  name  ) 
 

Constructor.

virtual TCircleFitter::~TCircleFitter  )  [virtual]
 

Destructor.


Member Function Documentation

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

dumps debug information.

Reimplemented from TMFitter.

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

dumps debug information.

Reimplemented from TMFitter.

virtual int TCircleFitter::fit TTrackBase  )  const [virtual]
 

Implements TMFitter.

int TCircleFitter::fit TTrackBase  )  const [virtual]
 

Implements TMFitter.

00029                                        {
00030 
00031 #ifdef TRKRECO_DEBUG_DETAIL
00032     std::cout << "    TCircleFitter::fit ..." << std::endl;
00033 #endif
00034 
00035     //...Already fitted ?...
00036     if (t.fitted()) return TFitAlreadyFitted;
00037 
00038     //...Check # of hits...
00039     if (t.links().length() < 3) return TFitErrorFewHits;
00040 
00041     //...Hit loop...
00042     Lpav circle;
00043 /*
00044     circle.add_point(-173.011, 94.3169);
00045     circle.add_point(-187.6, 101.528);
00046     circle.add_point(-202.018, 108.601);
00047     circle.add_point(-216.639, 115.691);
00048     circle.add_point(-231.152, 122.49);
00049     circle.add_point(-246.207, 129.496);
00050     circle.add_point(-261.179, 136.407);
00051     circle.add_point(-275.198, 142.764);
00052     circle.add_point(-290.519, 149.572);
00053     circle.add_point(-304.42, 155.7);
00054     circle.add_point(-319.947, 162.285);
00055     circle.add_point(-335.495, 168.731);
00056     circle.add_point(-608.394, 264.577);
00057     circle.add_point(-612.842, 265.869);
00058     circle.add_point(-627.175, 270.011);
00059     circle.add_point(-643.654, 274.719);
00060     circle.add_point(-657.809, 278.683);
00061     circle.add_point(-674.464, 283.209);
00062     circle.add_point(-690.7, 287.541);
00063     circle.add_point(-704.925, 291.091);
00064   */      
00065     unsigned n = t.links().length();
00066     
00067     for (unsigned i = 0; i < n; i++) {
00068         TMLink * l = t.links()[i];
00069         const TMDCWireHit * h = l->hit();
00070 
00071         //...Check next hit...
00072         HepPoint3D point;
00073         if (h->state() & WireHitPatternLeft)
00074             point = h->position(WireHitLeft);
00075         else if (h->state() & WireHitPatternRight)
00076             point = h->position(WireHitRight);
00077         else
00078             point = h->xyPosition();
00079         // float weight = 1. / (h->distance() * h->distance());
00080         // float weight = 1. / h->distance();
00081 
00082 //      if (h->state() & WireHitPatternLeft) cout<<"h: "<<h->wire()->layerId()<<" local: "
00083 //                                              <<h->wire()->localId()<<" TCirclefitter: L"<<endl;
00084 //      else cout<<"h: "<<h->wire()->layerId()<<" local: "
00085 //              <<h->wire()->localId()<<" TCirclefitter: R"<<endl;
00086 
00087         circle.add_point(point.x(), point.y()); //, weight);
00088         //yuany
00089         
00090 //      cout<<"TCirclefitter("<<sqrt(point.x()*point.x()+point.y()*point.y())<<","
00091 //      <<point.y()/point.x()<<") dis:"
00092 //      <<(h->drift(0))*10000/40<<" point "<<point<<" L "<<(h->state()&WireHitPatternLeft)
00093 //      <<" R "<<(h->state()&WireHitPatternRight)<<endl;
00094         
00095 //      cout<<"TCirclefitter "<<point.x()<<"    "<<point.y()<<"    L "<<(h->state()&WireHitPatternLeft)<<" R "<<(h->state()&WireHitPatternRight)<<endl;
00096     }
00097     
00098     if (circle.fit() < 0.0 || circle.kappa() == 0.0) return TFitFailed;
00099     //yuany
00100 //      cout<<"circle chi2:"<<circle.fit()<<" kappa:"<<circle.kappa()<<" center:"<<circle.center()<<" radius:"<<circle.radius()<<endl;
00101 
00102     HepVector v(circle.center());
00103     _center.setX(v(1));
00104     _center.setY(v(2));
00105     _radius = circle.radius();
00106 
00107     //...Determine charge...Better way???
00108     int qSum = 0;
00109     for (unsigned i = 0; i < n; i++) {
00110         TMLink * l = t.links()[i];
00111         if (l == 0) continue;
00112 
00113         const TMDCWireHit * h = l->hit();
00114         if (h == 0) continue;
00115 
00116         float q = (_center.cross(h->xyPosition())).z();
00117         if (q > 0.) qSum += 1;
00118         else        qSum -= 1;
00119     }
00120     if (qSum >= 0) _charge = +1.;
00121     else           _charge = -1.;
00122     _radius *= _charge;
00123 
00124     if (t.objectType() == Circle)
00125         ((TCircle &) t).property(_charge, _radius, _center);
00126     fitDone(t);
00127     return 0;    
00128 }

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

sets the fitted flag. (Bad implementation)

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

sets the fitted flag. (Bad implementation)

00024                                       {
00025     t._fitted = true;
00026 }

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

returns name.

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

returns name.

00073                          {
00074     return _name;
00075 }


Member Data Documentation

HepPoint3D TCircleFitter::_center [mutable, private]
 

double TCircleFitter::_charge [mutable, private]
 

double TCircleFitter::_radius [mutable, private]
 


The documentation for this class was generated from the following files:
Generated on Wed Feb 2 18:50:55 2011 for BOSS6.5.5 by  doxygen 1.3.9.1