14 #define TRGCDC_SHORT_NAMES
16 #include "trg/trg/Debug.h"
17 #include "trg/cdc/CircleFitter.h"
18 #include "trg/cdc/TrackBase.h"
19 #include "trg/cdc/Circle.h"
20 #include "trg/cdc/Link.h"
21 #include "trg/cdc/Lpav.h"
31 TCCFitter::TCCFitter(
const std::string& name)
32 : TCFitter(name), _charge(0.), _radius(0.), _center(
Point3D(0., 0., 0.))
36 TCCFitter::~TCCFitter()
41 TCCFitter::fit(TCTBase& t)
const
51 cout <<
TRGDebug::tab() <<
"Circle is fitted already" << endl;
57 if (t.links().size() < 3) {
66 const unsigned n = t.links().size();
67 for (
unsigned i = 0; i < n; i++) {
68 const TCLink* l = t.links()[i];
73 if (h->state() & CellHitPatternLeft)
74 point = h->position(CellHitLeft);
75 else if (h->state() & CellHitPatternRight)
76 point = h->position(CellHitRight);
78 point = h->xyPosition();
84 circle.add_point(point.x(), point.y());
88 cout << point << endl;
92 if (circle.fit() < 0.0 || circle.kappa() == 0.0) {
98 CLHEP::HepVector v(circle.center());
101 _radius = circle.radius();
105 for (
unsigned i = 0; i < n; i++) {
106 const TCLink* l = t.links()[i];
107 if (l == 0)
continue;
110 if (h == 0)
continue;
112 float q = (_center.cross(h->xyPosition())).z();
113 if (q > 0.) qSum += 1;
116 if (qSum >= 0) _charge = +1.;
120 if (t.objectType() == TRGCDCCircleType)
121 ((TRGCDCCircle&) t).property(_charge, _radius, _center);
125 for (
unsigned i = 0; i < n; i++) {
126 TCLink* l = t.links()[i];
127 if (l == 0)
continue;
135 <<
",radius=" << _radius <<
",center=" << _center << endl;