--- DarthVader/TrackerLevel2/src/TrkLevel2.cpp 2006/10/26 16:22:37 1.13 +++ DarthVader/TrackerLevel2/src/TrkLevel2.cpp 2006/11/08 16:42:28 1.16 @@ -4,6 +4,7 @@ */ #include #include +#include using namespace std; //...................................... // F77 routines @@ -11,8 +12,10 @@ extern "C" { void dotrack_(int*, double*, double*, double*, double*, int*); void dotrack2_(int*, double*, double*, double*, double*,double*, double*, double*,int*); - int readb_(const char*); +// int readb_(const char*); + int readb_(); void mini2_(int*,int*,int*); + void guess_(); } //-------------------------------------- // @@ -22,10 +25,10 @@ seqno = -1; image = -1; chi2 = 0; - nstep = 0; - for(int it1=0;it1<5;it1++){ - al[it1] = 0; - for(int it2=0;it2<5;it2++)coval[it1][it2] = 0; + nstep = 0; + for(int it1=0;it1<5;it1++){ + al[it1] = 0; + for(int it2=0;it2<5;it2++)coval[it1][it2] = 0; }; for(int ip=0;ip<6;ip++){ xgood[ip] = 0; @@ -56,10 +59,10 @@ seqno = t.seqno; image = t.image; chi2 = t.chi2; - nstep = t.nstep; - for(int it1=0;it1<5;it1++){ - al[it1] = t.al[it1]; - for(int it2=0;it2<5;it2++)coval[it1][it2] = t.coval[it1][it2]; + nstep = t.nstep; + for(int it1=0;it1<5;it1++){ + al[it1] = t.al[it1]; + for(int it2=0;it2<5;it2++)coval[it1][it2] = t.coval[it1][it2]; }; for(int ip=0;ip<6;ip++){ xgood[ip] = t.xgood[ip]; @@ -219,6 +222,7 @@ cout << endl << " "; for(int i=0; i<5; i++)cout << coval[4][i]<<" "; cout << endl << "dedx_x : "; for(int i=0; i<6; i++)cout << dedx_x[i] << " "; cout << endl << "dedx_y : "; for(int i=0; i<6; i++)cout << dedx_y[i] << " "; + cout << endl; } /** * Set the TrkTrack position measurements @@ -246,18 +250,24 @@ /** * Load the magnetic field */ -void TrkTrack::LoadField(TString s){ - readb_(s.Data()); +void TrkTrack::LoadField(TString path){ + + strcpy(path_.path,path.Data()); + path_.pathlen = path.Length(); + path_.error = 0; + readb_(); + }; /** * Tracking method. It calls F77 mini routine. */ void TrkTrack::Fit(double pfixed, int& fail, int iprint){ + + float al_ini[] = {0.,0.,0.,0.,0.}; + extern cMini2track track_; fail = 0; -// extern cMini2fitinfo fit_info_; -// extern void mini_2_(int*,int*); -// track_.xm[0]=1.0; + for(int i=0; i<6; i++) track_.xm[i]=xm[i]; for(int i=0; i<6; i++) track_.ym[i]=ym[i]; for(int i=0; i<6; i++) track_.zm[i]=zm[i]; @@ -265,40 +275,59 @@ for(int i=0; i<6; i++) track_.resy[i]=resy[i]; for(int i=0; i<6; i++) track_.xgood[i]=xgood[i]; for(int i=0; i<6; i++) track_.ygood[i]=ygood[i]; + // initial guess of "al" with linear fit - if(al[0]==-9999.&&al[1]==-9999.&&al[2]==-9999.&&al[3]==-9999.&&al[4]==-9999.){ - double szz=0., szx=0., szy=0., ssx=0., ssy=0., sz=0., s1=0.; - double det, ax, ay, bx, by; - for(int i=0; i " << track_.al[4] << endl; @@ -321,9 +351,15 @@ for(int i=0; i<5; i++) { for(int j=0; j<5; j++) coval[i][j]=track_.cov[i][j]; } + + if(fail){ + cout << " >>>> fit failed >>>> drawing initial par"<