26 : fPlane(owner), fPointPair(nullptr), fTrack(nullptr), fTrkNum(0),
29 fPivot(nullptr), fTimeCorrection(0),
30 fFitOK(false), fChi2(
kBig), fNDoF(0.0), fClsBeg(
kMaxInt), fClsEnd(-1)
45 fHits.push_back( hit );
48 if( fClsEnd < hit->GetWireNum() )
92 if( !obj ||
IsA() != obj->
IsA() )
118 for (
int i = 0; i <
GetSize(); i++) {
120 if (
time < minTime) {
149 for (
int i = 0; i <
GetSize(); i++)
170 for (
int j = 0; j <
GetSize(); j++) {
184 return make_pair( chi2, npt );
193 for (
int j = 0; j <
GetSize(); j++) {
263 for (
int i = 0; i <
GetSize(); i++) {
287 const Int_t nSignCombos = 2;
288 for (
int i = 0; i < nSignCombos; i++) {
301 for (
int j = pivotNum+1; j <
GetSize(); j++)
306 for (
int j = 0; j <
GetSize(); j++) {
311 if (
w <= 0)
continue;
324 Double_t Delta = W * sumXX - sumX * sumX;
327 Double_t F = (sumXX * sumY - sumX * sumXY) / Delta;
328 Double_t sigmaF2 = ( sumXX / Delta );
330 Double_t G = (W * sumXY - sumX * sumY) / Delta;
334 Double_t sigmaFG = ( -sumX / Delta );
355 if (i == 0 || chi2.first < bestFit) {
356 bestFit =
fChi2 = chi2.first;
357 fNDoF = chi2.second - 2;
402 Double_t sigmaM = 0, sigmaB = 0, sigmaD0 = 0;
416 assert( ihit >= 0 && ihit <
GetSize() );
443 for(
Int_t ipivot = 0; ipivot < ilast; ++ipivot ) {
462 if( ipivot == 0 || chi2.first < bestFit ) {
463 bestFit =
fChi2 = chi2.first;
464 fNDoF = chi2.second - 3;
510 for (
int j = 0; j <
GetSize(); j++) {
516 if (
w <= 0)
continue;
525 sumSDX += s *
d *
x *
w;
535 sumXX * ( sumW * sumW - sumW * sumS ) -
536 sumX * ( sumX * sumW - sumX * sumS );
539 sumSDX * ( sumW * sumW - sumW * sumS ) -
540 sumSD * ( sumX * sumW - sumW * sumSX ) +
541 sumD * ( sumX * sumS - sumW * sumSX );
544 -sumSDX * ( sumX * sumW - sumX * sumS ) +
545 sumSD * ( sumXX * sumW - sumX * sumSX ) -
546 sumD * ( sumXX * sumS - sumX - sumSX );
548 d0 = ( sumD - sumSD ) * ( sumXX * sumW - sumX * sumX );
588 for(
int i=0; i<
GetSize(); i++ ) {
594 fHits[i]->SetTrkNum( num );
606 for(
int j = 0; j <
GetSize(); ++j ) {
611 if(
w < 0 )
continue;
616 return make_pair( chi2, npt );
621 Double_t slope,
bool do_print )
const
638 bool past_pivot =
false;
640 for (
int j = 0; j < nHits; ++j) {
664 if (dy <= 0)
continue;
667 cout <<
" " << (
y-Y)/dy;
672 chi2 += (Y -
y)/dy * (Y -
y)/dy;
694 cout <<
"Size: " << nHits << endl;
696 cout <<
"Wire numbers:";
697 for(
int i = 0; i < nHits; i++ ) {
698 cout <<
" " <<
fHits[i]->GetWireNum();
703 cout <<
"Wire raw times:";
704 for(
int i = 0; i < nHits; i++ ) {
705 cout <<
" " <<
fHits[i]->GetRawTime();
710 cout <<
"Wire times:";
711 for(
int i = 0; i < nHits; i++ ) {
712 cout <<
" " <<
fHits[i]->GetTime();
717 cout <<
"Wire positions:";
718 for(
int i = 0; i < nHits; i++ ) {
719 cout <<
" " <<
fHits[i]->GetPos();
724 cout <<
"Wire drifts:";
725 for(
int i = 0; i < nHits; i++ ) {
726 cout <<
" " <<
fHits[i]->GetDist();
731 cout <<
"Wire drifts sigmas:";
732 for(
int i = 0; i < nHits; i++ ) {
733 cout <<
" " <<
fHits[i]->GetdDist();
739 cout <<
"Fit done: " <<
fFitOK << endl;
740 cout <<
"Crossing pos (err) = "
742 <<
"Local slope (err) = "
746 <<
"Time offset (err) = "
752 cout <<
"Local residuals = ";
756 cout <<
"Global residuals = ";
759 cout <<
"Local/global chi2 = " << lchi2 <<
", " << chi2 << endl;
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t b
Option_t Option_t TPoint TPoint const char mode
static const Int_t kDefaultNHit
const char * GetPrefix() const
Double_t GetDTheta() const
Int_t GetTrackIndex() const
virtual void Clear(Option_t *opt="")
virtual void EstTrackParameters()
VDC::VDCpp_t * fPointPair
virtual void Print(Option_t *opt="") const
void SetTrack(THaTrack *track)
void FitSimpleTrack(Bool_t weighted=false)
virtual void ConvertTimeToDist()
virtual void AddHit(THaVDCHit *hit)
virtual Int_t Compare(const TObject *obj) const
virtual void FitTrack(EMode mode=kSimple)
virtual void CalcChisquare(Double_t &chi2, Int_t &nhits) const
void Linear3DFit(Double_t &slope, Double_t &icpt, Double_t &d0) const
Int_t GetPivotWireNum() const
Int_t LinearClusterFitWithT0()
THaVDCCluster(THaVDCPlane *owner=nullptr)
void DoCalcChisquare(Double_t &chi2, Int_t &nhits, Double_t slope, bool do_print=false) const
Double_t GetSinWAngle() const
Double_t GetWSpac() const
Double_t GetCosWAngle() const
Double_t GetDriftVel() const
virtual TClass * IsA() const
Double_t Sqrt(Double_t x)
std::pair< Double_t, Int_t > chi2_t