--- DarthVader/TrackerLevel2/src/TrkLevel2.cpp 2006/10/27 16:59:20 1.14 +++ DarthVader/TrackerLevel2/src/TrkLevel2.cpp 2006/11/15 15:19:34 1.19 @@ -12,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_(); } //-------------------------------------- // @@ -248,89 +250,139 @@ /** * 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_(); + }; + +/** + * Method to fill minimization-routine common + */ +void TrkTrack::FillMiniStruct(cMini2track& track){ + + for(int i=0; i<6; i++){ + + track.xgood[i]=xgood[i]; + track.ygood[i]=ygood[i]; + + track.xm[i]=xm[i]; + track.ym[i]=ym[i]; + track.zm[i]=zm[i]; + +// --- temporaneo ---------------------------- +// andrebbe inserita la dimensione del sensore + float segment = 100.; + track.xm_a[i]=xm[i]; + track.xm_b[i]=xm[i]; + track.ym_a[i]=ym[i]; + track.ym_b[i]=ym[i]; + if( xgood[i] && !ygood[i] ){ + track.ym_a[i] = track.ym_a[i]+segment; + track.ym_b[i] = track.ym_b[i]-segment; + }else if( !xgood[i] && ygood[i]){ + track.xm_a[i] = track.xm_a[i]+segment; + track.xm_b[i] = track.xm_b[i]-segment; + } +// --- temporaneo ---------------------------- + + track.resx[i]=resx[i]; + track.resy[i]=resy[i]; + } + + for(int i=0; i<5; i++) track.al[i]=al[i]; + track.zini = 23.5; +// ZINI = 23.5 !!! it should be the same parameter in all codes + +} +/** + * Method to set values from minimization-routine common + */ +void TrkTrack::SetFromMiniStruct(cMini2track *track){ + + for(int i=0; i<5; i++) { + al[i]=track->al[i]; + for(int j=0; j<5; j++) coval[i][j]=track->cov[i][j]; + } + chi2 = track->chi2; + nstep = track->nstep; + for(int i=0; i<6; i++){ + xv[i] = track->xv[i]; + yv[i] = track->yv[i]; + zv[i] = track->zv[i]; + xm[i] = track->xm[i]; + ym[i] = track->ym[i]; + zm[i] = track->zm[i]; + axv[i] = track->axv[i]; + ayv[i] = track->ayv[i]; + } + + +} /** * 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]; - for(int i=0; i<6; i++) track_.resx[i]=resx[i]; - 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; - for(int i=0; i<5; i++) al[i]=track_.al[i]; - chi2=track_.chi2; - nstep=track_.nstep; - for(int i=0; i<6; i++) xv[i]=track_.xv[i]; - for(int i=0; i<6; i++) yv[i]=track_.yv[i]; - for(int i=0; i<6; i++) zv[i]=track_.zv[i]; - for(int i=0; i<6; i++) axv[i]=track_.axv[i]; - for(int i=0; i<6; i++) ayv[i]=track_.ayv[i]; - for(int i=0; i<5; i++) { - for(int j=0; j<5; j++) coval[i][j]=track_.cov[i][j]; - } +// for(int i=0; i<5; i++) al[i]=track_.al[i]; +// chi2=track_.chi2; +// nstep=track_.nstep; +// for(int i=0; i<6; i++) xv[i]=track_.xv[i]; +// for(int i=0; i<6; i++) yv[i]=track_.yv[i]; +// for(int i=0; i<6; i++) zv[i]=track_.zv[i]; +// for(int i=0; i<6; i++) axv[i]=track_.axv[i]; +// for(int i=0; i<6; i++) ayv[i]=track_.ayv[i]; +// for(int i=0; i<5; i++) { +// for(int j=0; j<5; j++) coval[i][j]=track_.cov[i][j]; +// } + +// if(fail && iprint){ +// cout << " >>>> fit failed >>>> drawing initial par"<