22 #include <TVirtualFitter.h> 23 #include <TGeoMatrix.h> 44 dummy->
Chi2(npar, gin, f, par, iflag);
59 TVirtualFitter *fitter = TVirtualFitter::Fitter(
this,6);
61 ierflg = fitter->ExecuteCommand(
"SET PRINT", arglist, 1);
66 ierflg = fitter->ExecuteCommand(
"SET ERR", arglist ,1);
69 Double_t pars[6] = {0,0,0,0,0,0};
71 Double_t step[6] = {0.0001,0.0001,0.0001,0.0001,0.0001,0.0001};
72 ierflg = fitter->SetParameter(0,
"dx", pars[0], step[0], 0,0);
73 ierflg = fitter->SetParameter(1,
"dy", pars[1], step[1], 0,0);
74 ierflg = fitter->SetParameter(2,
"dz", pars[2], step[2], 0,0);
75 ierflg = fitter->SetParameter(3,
"psi", pars[3], step[3], 0,0);
76 ierflg = fitter->SetParameter(4,
"theta", pars[4], step[4], 0,0);
77 ierflg = fitter->SetParameter(5,
"phi", pars[5], step[5], 0,0);
80 if(
fBFixed[0]) {
printf(
"Fixing dx=%f\n",pars[0]); fitter->FixParameter(0);}
81 if(
fBFixed[1]) {
printf(
"Fixing dy=%f\n",pars[1]); fitter->FixParameter(1);}
82 if(
fBFixed[2]) {
printf(
"Fixing dz=%f\n",pars[2]); fitter->FixParameter(2);}
83 if(
fBFixed[3]) {
printf(
"Fixing psi=%f\n",pars[3]); fitter->FixParameter(3);}
84 if(
fBFixed[4]) {
printf(
"Fixing theta=%f\n",pars[4]); fitter->FixParameter(4);}
85 if(
fBFixed[5]) {
printf(
"Fixing phi=%f\n",pars[5]); fitter->FixParameter(5);}
90 fitter->ExecuteCommand(
"MIGRAD", arglist ,2);
93 Double_t amin,edm,errdef;
94 Int_t nvpar,nparx,icstat;
95 icstat = fitter->GetStats(amin,edm,errdef,nvpar,nparx);
98 Double_t *cov=fitter->GetCovarianceMatrix();
100 Int_t fixedparamat[6]={0,0,0,0,0,0};
105 for(Int_t j=1;j<6;j++){
108 fixedparamat[j]=fixedparamat[j-1]+1;
110 else fixedparamat[j]=fixedparamat[j-1];
114 for(Int_t i=0;i<6;i++){
115 for(Int_t j=0;j<6;j++){
119 else cov2[i+6*j]=cov[i-fixedparamat[i]+6*(j-fixedparamat[j])];
124 Double_t covmatrarray[21];
125 for(Int_t j=0;j<6;j++){
126 for(Int_t i=j;i<6;i++){
127 covmatrarray[i*(i+1)/2+j]=cov2[i+6*j];
151 Bool_t count = kFALSE;
152 if (
fNdf == 0) count = kTRUE;
154 for (Int_t itrack = 0; itrack <
fLast; itrack++) {
162 if (count)
fNdf += 3;
printf("Chi2/npoints = %f\n", TMath::Sqrt(chi2/npoints))
void SetCorrMatrix(Double_t *cov)
void Transform(AliTrackPoint &p, Bool_t copycov=kFALSE) const
virtual void SetPars(Double_t x, Double_t y, Double_t z, Double_t psi, Double_t theta, Double_t phi)
void Chi2(Int_t &, Double_t *, Double_t &f, Double_t *par, Int_t)
Bool_t GetPoint(AliTrackPoint &p, Int_t i) const
AliTrackPointArray ** fVolArray
void TrackResidualsChi2Fcn(Int_t &npar, Double_t *gin, Double_t &f, Double_t *x, Int_t iflag)
Float_t fChi2
Pointers to the arrays containing track extrapolation points.
AliTrackPointArray ** fTrackArray
Pointers to the arrays containing space points.
Float_t GetResidual(const AliTrackPoint &p, Bool_t weighted=kFALSE) const