FairRoot/PandaRoot
Public Member Functions | Private Attributes | List of all members
PndTrkFitter Class Reference

#include <PndTrkFitter.h>

Inheritance diagram for PndTrkFitter:

Public Member Functions

 PndTrkFitter ()
 
 PndTrkFitter (int verbose)
 
 ~PndTrkFitter ()
 
void Reset ()
 
void SetPointToFit (double x, double y, double sigma)
 
Bool_t StraightLineFit (Double_t &fitm, Double_t &fitp)
 
Double_t StraightLineFitWithChi2 (Double_t &fitm, Double_t &fitp)
 
Bool_t ConstrainedStraightLineFit (Double_t x0, Double_t y0, Double_t &fitm, Double_t &fitp)
 
Bool_t ParabolaFit (Double_t &fita, Double_t &fitb, Double_t &fitc)
 
void SetVerbose (int ver)
 

Private Attributes

Double_t fSx
 
Double_t fSy
 
Double_t fSxy
 
Double_t fSxx
 
Double_t fSxxy
 
Double_t fSxxx
 
Double_t fSxxxx
 
Double_t fS1
 
std::vector< double > fX
 
std::vector< double > fY
 
std::vector< double > fSigma
 
Int_t fVerbose
 

Detailed Description

Definition at line 7 of file PndTrkFitter.h.

Constructor & Destructor Documentation

PndTrkFitter::PndTrkFitter ( )

Definition at line 23 of file PndTrkFitter.cxx.

References fSigma, fX, and fY.

23  : fSx(0), fSy(0), fSxy(0), fSxx(0), fS1(0), fVerbose(0)
24 {
25  fX.clear();
26  fY.clear();
27  fSigma.clear();
28 }
Double_t fS1
Definition: PndTrkFitter.h:30
Double_t fSx
Definition: PndTrkFitter.h:30
Double_t fSy
Definition: PndTrkFitter.h:30
Double_t fSxx
Definition: PndTrkFitter.h:30
std::vector< double > fSigma
Definition: PndTrkFitter.h:31
Double_t fSxy
Definition: PndTrkFitter.h:30
Int_t fVerbose
Definition: PndTrkFitter.h:32
std::vector< double > fX
Definition: PndTrkFitter.h:31
std::vector< double > fY
Definition: PndTrkFitter.h:31
PndTrkFitter::PndTrkFitter ( int  verbose)

Definition at line 30 of file PndTrkFitter.cxx.

References fSigma, fX, and fY.

30  : fSx(0), fSy(0), fSxy(0), fSxx(0), fS1(0), fVerbose(verbose)
31 {
32  fX.clear();
33  fY.clear();
34  fSigma.clear();
35 }
Double_t fS1
Definition: PndTrkFitter.h:30
Double_t fSx
Definition: PndTrkFitter.h:30
Double_t fSy
Definition: PndTrkFitter.h:30
#define verbose
Double_t fSxx
Definition: PndTrkFitter.h:30
std::vector< double > fSigma
Definition: PndTrkFitter.h:31
Double_t fSxy
Definition: PndTrkFitter.h:30
Int_t fVerbose
Definition: PndTrkFitter.h:32
std::vector< double > fX
Definition: PndTrkFitter.h:31
std::vector< double > fY
Definition: PndTrkFitter.h:31
PndTrkFitter::~PndTrkFitter ( )

Definition at line 37 of file PndTrkFitter.cxx.

37  {
38 
39 }

Member Function Documentation

Bool_t PndTrkFitter::ConstrainedStraightLineFit ( Double_t  x0,
Double_t  y0,
Double_t fitm,
Double_t fitp 
)

Definition at line 133 of file PndTrkFitter.cxx.

References Double_t, fS1, fSigma, fSx, fSxx, fSxy, fSy, fVerbose, fX, fY, Reset(), and x0.

Referenced by PndTrkLegendreSecTask::ZPhiFit(), PndTrkLegendreTask::ZPhiFit(), and PndTrkLegendreSecTask2::ZPhiFit().

133  {
134 
135  // cout << "xoy0 " << x0 << " " << y0 << endl;
136 
137  int nofPoints = fX.size();
138  if(nofPoints == 0) {
139  if(fVerbose > 1) cout << "PndTrkFitter::StraightLineFit: no points to fit! fill the array with PndTrkFitter::SetPointToFit()" << endl;
140  Reset();
141  return kFALSE; // CHECK
142  }
143 
144  // cout << "fittinh " << nofPoints << endl;
145 
146  for(int ipnt = 0; ipnt < nofPoints; ipnt++)
147  {
148  // cout << fX[ipnt] << " " << fY[ipnt] << " " << fSigma[ipnt] << endl;
149  fSx += fX[ipnt]/(fSigma[ipnt] * fSigma[ipnt]);
150  fSy += fY[ipnt]/(fSigma[ipnt] * fSigma[ipnt]);
151 
152  fSxy += fX[ipnt] * fY[ipnt]/(fSigma[ipnt] * fSigma[ipnt]);
153  fSxx += fX[ipnt]* fX[ipnt]/(fSigma[ipnt] * fSigma[ipnt]);
154 
155  fS1 += 1./(fSigma[ipnt] * fSigma[ipnt]);
156  }
157 
158  Double_t den = 2 * x0 * fSx - fSxx - x0 * x0 * fS1;
159  if(den == 0) {
160  if(fVerbose > 1) cout << "PndTrkFitter:StraightLineFit: DEN == 0" << endl; // CHECK
161  Reset();
162  return kFALSE;
163  }
164 
165 
166  fitm = (y0 * fSx + x0 * fSy - fSxy - x0 * y0 * fS1)/den;
167 
168  fitp = y0 - fitm * x0;
169 
170  Reset();
171  return kTRUE;
172 
173 }
Double_t x0
Definition: checkhelixhit.C:70
Double_t fS1
Definition: PndTrkFitter.h:30
Double_t fSx
Definition: PndTrkFitter.h:30
Double_t fSy
Definition: PndTrkFitter.h:30
Double_t fSxx
Definition: PndTrkFitter.h:30
std::vector< double > fSigma
Definition: PndTrkFitter.h:31
Double_t
Double_t y0
Definition: checkhelixhit.C:71
Double_t fSxy
Definition: PndTrkFitter.h:30
Int_t fVerbose
Definition: PndTrkFitter.h:32
std::vector< double > fX
Definition: PndTrkFitter.h:31
std::vector< double > fY
Definition: PndTrkFitter.h:31
Bool_t PndTrkFitter::ParabolaFit ( Double_t fita,
Double_t fitb,
Double_t fitc 
)

Definition at line 179 of file PndTrkFitter.cxx.

References CAMath::Abs(), Double_t, fS1, fSigma, fSx, fSxx, fSxxx, fSxxxx, fSxxy, fSxy, fSy, fVerbose, fX, fY, and Reset().

Referenced by PndTrkTrackFinder::AnalyticalParabolaFit().

179  {
180 
181  int nofPoints = fX.size();
182  if(nofPoints == 0) {
183  if(fVerbose > 1) cout << "PndTrkFitter::StraightLineFit: no points to fit! fill the array with PndTrkFitter::SetPointToFit()" << endl;
184  Reset();
185  return kFALSE; // CHECK
186  }
187 
188  for(int ipnt = 0; ipnt < nofPoints; ipnt++)
189  {
190 
191  fSx += fX[ipnt]/(fSigma[ipnt] * fSigma[ipnt]);
192  fSy += fY[ipnt]/(fSigma[ipnt] * fSigma[ipnt]);
193 
194  fSxy += fX[ipnt] * fY[ipnt]/(fSigma[ipnt] * fSigma[ipnt]);
195  fSxx += fX[ipnt]* fX[ipnt]/(fSigma[ipnt] * fSigma[ipnt]);
196 
197  fSxxy += fX[ipnt] * fX[ipnt] * fY[ipnt]/(fSigma[ipnt] * fSigma[ipnt]);
198  fSxxx += fX[ipnt] * fX[ipnt] * fX[ipnt]/(fSigma[ipnt] * fSigma[ipnt]);
199 
200  fSxxx += fX[ipnt] * fX[ipnt] * fX[ipnt] * fX[ipnt]/(fSigma[ipnt] * fSigma[ipnt]);
201 
202  fS1 += 1./(fSigma[ipnt] * fSigma[ipnt]);
203 
204  }
205 
206  TMatrixD matrix(3,3);
207  matrix[0][0] = fS1;
208  matrix[0][1] = fSx;
209  matrix[0][2] = fSxx;
210 
211  matrix[1][0] = fSx;
212  matrix[1][1] = fSxx;
213  matrix[1][2] = fSxxx;
214 
215  matrix[2][0] = fSxx;
216  matrix[2][1] = fSxxx;
217  matrix[2][2] = fSxxxx;
218 
219  Double_t determ;
220 
221  determ = matrix.Determinant();
222 
223  if (determ != 0) {
224  matrix.Invert();
225  }
226  else {
227  return 0;
228  if(fVerbose == 2) cout << "DET 0" << endl;
229  }
230 
231  TMatrixD column(3,1);
232  column[0][0] = fSy;
233  column[1][0] = fSxy;
234  column[2][0] = fSxxy;
235 
236  TMatrixD column2(3,1);
237  column2.Mult(matrix, column);
238 
239  //Double_t a, b, c; //[R.K. 01/2017] unused variable
240  fita = column2[0][0];
241  fitb = column2[1][0];
242  fitc = column2[2][0];
243 
244  if(fVerbose == 2) {
245  std::cout << "1) parabolic parameters:\n";
246  std::cout << "a = " << fita << "\n";
247  std::cout << "b = " << fitb << "\n";
248  std::cout << "c = " << fitc << "\n";
249  }
250  if(TMath::Abs(fita)<0.000001) return kFALSE;
251 
252  return kTRUE;
253 }
Double_t fS1
Definition: PndTrkFitter.h:30
Double_t fSx
Definition: PndTrkFitter.h:30
Double_t fSy
Definition: PndTrkFitter.h:30
static T Abs(const T &x)
Definition: PndCAMath.h:39
Double_t fSxx
Definition: PndTrkFitter.h:30
std::vector< double > fSigma
Definition: PndTrkFitter.h:31
Double_t
Double_t fSxy
Definition: PndTrkFitter.h:30
Double_t fSxxxx
Definition: PndTrkFitter.h:30
Int_t fVerbose
Definition: PndTrkFitter.h:32
Double_t fSxxy
Definition: PndTrkFitter.h:30
std::vector< double > fX
Definition: PndTrkFitter.h:31
std::vector< double > fY
Definition: PndTrkFitter.h:31
TMatrixT< double > TMatrixD
Definition: PndLmdDim.h:52
Double_t fSxxx
Definition: PndTrkFitter.h:30
void PndTrkFitter::Reset ( )

Definition at line 41 of file PndTrkFitter.cxx.

References fS1, fSigma, fSx, fSxx, fSxxx, fSxxxx, fSxxy, fSxy, fSy, fX, and fY.

Referenced by PndTrkLegendreNew::AnalyticalFit(), PndTrkTrackFinder::AnalyticalFit(), PndTrkCombiLegendreTask::AnalyticalFit(), PndTrkLegendreNew::AnalyticalFit2(), PndTrkTrackFinder::AnalyticalFit2(), PndTrkCombiLegendreTask::AnalyticalFit2(), PndTrkTrackFinder::AnalyticalParabolaFit(), ConstrainedStraightLineFit(), PndTrkLegendreSecTask2::Exec(), PndTrkLegendreSecTask::Exec(), PndTrkLegendreTask::Exec(), PndTrkTrackFinder::Exec(), ParabolaFit(), StraightLineFit(), StraightLineFitWithChi2(), PndTrkLegendreTask::ZPhiFit(), PndTrkLegendreSecTask::ZPhiFit(), and PndTrkLegendreSecTask2::ZPhiFit().

41  {
42  fSx = 0;
43  fSy = 0;
44  fSxy = 0;
45  fSxx = 0;
46  fSxxy = 0;
47  fSxxx = 0;
48  fSxxxx = 0;
49  fS1 = 0;
50  fX.clear();
51  fY.clear();
52  fSigma.clear();
53 }
Double_t fS1
Definition: PndTrkFitter.h:30
Double_t fSx
Definition: PndTrkFitter.h:30
Double_t fSy
Definition: PndTrkFitter.h:30
Double_t fSxx
Definition: PndTrkFitter.h:30
std::vector< double > fSigma
Definition: PndTrkFitter.h:31
Double_t fSxy
Definition: PndTrkFitter.h:30
Double_t fSxxxx
Definition: PndTrkFitter.h:30
Double_t fSxxy
Definition: PndTrkFitter.h:30
std::vector< double > fX
Definition: PndTrkFitter.h:31
std::vector< double > fY
Definition: PndTrkFitter.h:31
Double_t fSxxx
Definition: PndTrkFitter.h:30
void PndTrkFitter::SetPointToFit ( double  x,
double  y,
double  sigma 
)
void PndTrkFitter::SetVerbose ( int  ver)
inline

Definition at line 26 of file PndTrkFitter.h.

References fVerbose.

26 { fVerbose = ver; }
Int_t fVerbose
Definition: PndTrkFitter.h:32
Bool_t PndTrkFitter::StraightLineFit ( Double_t fitm,
Double_t fitp 
)

Definition at line 61 of file PndTrkFitter.cxx.

References Double_t, fS1, fSigma, fSx, fSxx, fSxy, fSy, fVerbose, fX, fY, and Reset().

Referenced by PndTrkLegendreNew::AnalyticalFit(), PndTrkTrackFinder::AnalyticalFit(), PndTrkCombiLegendreTask::AnalyticalFit(), PndTrkLegendreNew::AnalyticalFit2(), PndTrkTrackFinder::AnalyticalFit2(), PndTrkCombiLegendreTask::AnalyticalFit2(), PndTrkLegendreTask::Exec(), PndTrkLegendreSecTask::Exec(), PndTrkLegendreSecTask2::Exec(), PndTrkTrackFinder::Exec(), PndTrkLegendreTask::ZPhiFit(), PndTrkLegendreSecTask::ZPhiFit(), and PndTrkLegendreSecTask2::ZPhiFit().

61  {
62 
63  int nofPoints = fX.size();
64  if(nofPoints == 0) {
65  if(fVerbose > 1) cout << "PndTrkFitter::StraightLineFit: no points to fit! fill the array with PndTrkFitter::SetPointToFit()" << endl;
66  Reset();
67  return kFALSE; // CHECK
68  }
69  for(int ipnt = 0; ipnt < nofPoints; ipnt++)
70  {
71  fSx += fX[ipnt]/(fSigma[ipnt] * fSigma[ipnt]);
72  fSy += fY[ipnt]/(fSigma[ipnt] * fSigma[ipnt]);
73 
74  fSxy += fX[ipnt] * fY[ipnt]/(fSigma[ipnt] * fSigma[ipnt]);
75  fSxx += fX[ipnt]* fX[ipnt]/(fSigma[ipnt] * fSigma[ipnt]);
76 
77  fS1 += 1./(fSigma[ipnt] * fSigma[ipnt]);
78  }
79 
80  Double_t den = fSxx * fS1 - fSx * fSx;
81  if(den == 0) {
82  if(fVerbose > 1) cout << "PndTrkFitter:StraightLineFit: DEN == 0" << endl; // CHECK
83  Reset();
84  return kFALSE;
85  }
86 
87  fitm = (fSxy * fS1 - fSx * fSy)/den;
88  fitp = (fSxx * fSy - fSx * fSxy)/den;
89  Reset();
90  return kTRUE;
91 
92 }
Double_t fS1
Definition: PndTrkFitter.h:30
Double_t fSx
Definition: PndTrkFitter.h:30
Double_t fSy
Definition: PndTrkFitter.h:30
Double_t fSxx
Definition: PndTrkFitter.h:30
std::vector< double > fSigma
Definition: PndTrkFitter.h:31
Double_t
Double_t fSxy
Definition: PndTrkFitter.h:30
Int_t fVerbose
Definition: PndTrkFitter.h:32
std::vector< double > fX
Definition: PndTrkFitter.h:31
std::vector< double > fY
Definition: PndTrkFitter.h:31
Double_t PndTrkFitter::StraightLineFitWithChi2 ( Double_t fitm,
Double_t fitp 
)

Definition at line 94 of file PndTrkFitter.cxx.

References Double_t, fS1, fSigma, fSx, fSxx, fSxy, fSy, fVerbose, fX, fY, and Reset().

94  {
95 int nofPoints = fX.size();
96  if(nofPoints == 0) {
97  if(fVerbose > 1) cout << "PndTrkFitter::StraightLineFit: no points to fit! fill the array with PndTrkFitter::SetPointToFit()" << endl;
98  Reset();
99  return kFALSE; // CHECK
100  }
101  double Syy = 0;
102  for(int ipnt = 0; ipnt < nofPoints; ipnt++)
103  {
104  fSx += fX[ipnt]/(fSigma[ipnt] * fSigma[ipnt]);
105  fSy += fY[ipnt]/(fSigma[ipnt] * fSigma[ipnt]);
106 
107  fSxy += fX[ipnt] * fY[ipnt]/(fSigma[ipnt] * fSigma[ipnt]);
108  fSxx += fX[ipnt]* fX[ipnt]/(fSigma[ipnt] * fSigma[ipnt]);
109 
110  fS1 += 1./(fSigma[ipnt] * fSigma[ipnt]);
111 
112  Syy += fY[ipnt] * fY[ipnt]/(fSigma[ipnt] * fSigma[ipnt]);
113  }
114 
115  Double_t den = fSxx * fS1 - fSx * fSx;
116  if(den == 0) {
117  if(fVerbose > 1) cout << "PndTrkFitter:StraightLineFit: DEN == 0" << endl; // CHECK
118  Reset();
119  return kFALSE;
120  }
121 
122  fitm = (fSxy * fS1 - fSx * fSy)/den;
123  fitp = (fSxx * fSy - fSx * fSxy)/den;
124 
125  double chi2 = Syy + fitm * fitm * fSxx + fitp * fitp * fS1 + 2 * fitm * fitp * fSx - 2 * fitm * fSxy - 2 * fitp * fSy;
126 
127  Reset();
128 
129  return chi2;
130 
131 }
Double_t fS1
Definition: PndTrkFitter.h:30
Double_t fSx
Definition: PndTrkFitter.h:30
Double_t fSy
Definition: PndTrkFitter.h:30
Double_t fSxx
Definition: PndTrkFitter.h:30
std::vector< double > fSigma
Definition: PndTrkFitter.h:31
Double_t
Double_t fSxy
Definition: PndTrkFitter.h:30
Int_t fVerbose
Definition: PndTrkFitter.h:32
std::vector< double > fX
Definition: PndTrkFitter.h:31
std::vector< double > fY
Definition: PndTrkFitter.h:31

Member Data Documentation

Double_t PndTrkFitter::fS1
private
std::vector<double> PndTrkFitter::fSigma
private
Double_t PndTrkFitter::fSx
private
Double_t PndTrkFitter::fSxx
private
Double_t PndTrkFitter::fSxxx
private

Definition at line 30 of file PndTrkFitter.h.

Referenced by ParabolaFit(), and Reset().

Double_t PndTrkFitter::fSxxxx
private

Definition at line 30 of file PndTrkFitter.h.

Referenced by ParabolaFit(), and Reset().

Double_t PndTrkFitter::fSxxy
private

Definition at line 30 of file PndTrkFitter.h.

Referenced by ParabolaFit(), and Reset().

Double_t PndTrkFitter::fSxy
private
Double_t PndTrkFitter::fSy
private
Int_t PndTrkFitter::fVerbose
private
std::vector<double> PndTrkFitter::fX
private
std::vector<double> PndTrkFitter::fY
private

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