--- DarthVader/TrackerLevel2/src/TrkLevel2.cpp 2006/08/04 08:18:06 1.8 +++ DarthVader/TrackerLevel2/src/TrkLevel2.cpp 2006/09/05 12:52:20 1.9 @@ -22,26 +22,29 @@ image = -1; chi2 = 0; for(int it1=0;it1<5;it1++){ - al[it1] = 0; - for(int it2=0;it2<5;it2++) - coval[it1][it2] = 0; + al[it1] = 0; + for(int it2=0;it2<5;it2++)coval[it1][it2] = 0; }; for(int ip=0;ip<6;ip++){ - xgood[ip] = 0; - ygood[ip] = 0; - xm[ip] = 0; - ym[ip] = 0; - zm[ip] = 0; - resx[ip] = 0; - resy[ip] = 0; - xv[ip] = 0; - yv[ip] = 0; - zv[ip] = 0; - axv[ip] = 0; - ayv[ip] = 0; - dedx_x[ip] = 0; - dedx_y[ip] = 0; - }; + xgood[ip] = 0; + ygood[ip] = 0; + xm[ip] = 0; + ym[ip] = 0; + zm[ip] = 0; + resx[ip] = 0; + resy[ip] = 0; + xv[ip] = 0; + yv[ip] = 0; + zv[ip] = 0; + axv[ip] = 0; + ayv[ip] = 0; + dedx_x[ip] = 0; + dedx_y[ip] = 0; +// clx[ip] = 0; +// cly[ip] = 0; + }; + clx = new TRefArray(6,0); + cly = new TRefArray(6,0); }; //-------------------------------------- // @@ -52,26 +55,30 @@ image = t.image; chi2 = t.chi2; 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]; + 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]; - ygood[ip] = t.ygood[ip]; - xm[ip] = t.xm[ip]; - ym[ip] = t.ym[ip]; - zm[ip] = t.zm[ip]; - resx[ip] = t.resx[ip]; - resy[ip] = t.resy[ip]; - xv[ip] = t.xv[ip]; - yv[ip] = t.yv[ip]; - zv[ip] = t.zv[ip]; - axv[ip] = t.axv[ip]; - ayv[ip] = t.ayv[ip]; - dedx_x[ip] = t.dedx_x[ip]; - dedx_y[ip] = t.dedx_y[ip]; - }; + xgood[ip] = t.xgood[ip]; + ygood[ip] = t.ygood[ip]; + xm[ip] = t.xm[ip]; + ym[ip] = t.ym[ip]; + zm[ip] = t.zm[ip]; + resx[ip] = t.resx[ip]; + resy[ip] = t.resy[ip]; + xv[ip] = t.xv[ip]; + yv[ip] = t.yv[ip]; + zv[ip] = t.zv[ip]; + axv[ip] = t.axv[ip]; + ayv[ip] = t.ayv[ip]; + dedx_x[ip] = t.dedx_x[ip]; + dedx_y[ip] = t.dedx_y[ip]; + // clx[ip] = 0;//<<<ntrk; i++){ - t_track->seqno = i; - t_track->image = l2->image[i]-1; -// cout << "track "<seqno << t_track->image<chi2 = l2->chi2_nt[i]; - for(int it1=0;it1<5;it1++){ - t_track->al[it1] = l2->al_nt[i][it1]; - for(int it2=0;it2<5;it2++) - t_track->coval[it1][it2] = l2->coval[i][it2][it1]; - }; - for(int ip=0;ip<6;ip++){ - t_track->xgood[ip] = l2->xgood_nt[i][ip]; - t_track->ygood[ip] = l2->ygood_nt[i][ip]; - t_track->xm[ip] = l2->xm_nt[i][ip]; - t_track->ym[ip] = l2->ym_nt[i][ip]; - t_track->zm[ip] = l2->zm_nt[i][ip]; - t_track->resx[ip] = l2->resx_nt[i][ip]; - t_track->resy[ip] = l2->resy_nt[i][ip]; - t_track->xv[ip] = l2->xv_nt[i][ip]; - t_track->yv[ip] = l2->yv_nt[i][ip]; - t_track->zv[ip] = l2->zv_nt[i][ip]; - t_track->axv[ip] = l2->axv_nt[i][ip]; - t_track->ayv[ip] = l2->ayv_nt[i][ip]; - t_track->dedx_x[ip] = l2->dedx_x[i][ip]; - t_track->dedx_y[ip] = l2->dedx_y[i][ip]; - }; - new(t[i]) TrkTrack(*t_track); - t_track->Clear(); + t_track->seqno = i;// NBNBNBNB deve sempre essere = i + t_track->image = l2->image[i]-1; + // cout << "track "<seqno << t_track->image<chi2 = l2->chi2_nt[i]; + for(int it1=0;it1<5;it1++){ + t_track->al[it1] = l2->al_nt[i][it1]; + for(int it2=0;it2<5;it2++) + t_track->coval[it1][it2] = l2->coval[i][it2][it1]; + }; + for(int ip=0;ip<6;ip++){ + t_track->xgood[ip] = l2->xgood_nt[i][ip]; + t_track->ygood[ip] = l2->ygood_nt[i][ip]; + t_track->xm[ip] = l2->xm_nt[i][ip]; + t_track->ym[ip] = l2->ym_nt[i][ip]; + t_track->zm[ip] = l2->zm_nt[i][ip]; + t_track->resx[ip] = l2->resx_nt[i][ip]; + t_track->resy[ip] = l2->resy_nt[i][ip]; + t_track->xv[ip] = l2->xv_nt[i][ip]; + t_track->yv[ip] = l2->yv_nt[i][ip]; + t_track->zv[ip] = l2->zv_nt[i][ip]; + t_track->axv[ip] = l2->axv_nt[i][ip]; + t_track->ayv[ip] = l2->ayv_nt[i][ip]; + t_track->dedx_x[ip] = l2->dedx_x[i][ip]; + t_track->dedx_y[ip] = l2->dedx_y[i][ip]; +// t_track->clx[ip] = 0; +// t_track->cly[ip] = 0; + }; + new(t[i]) TrkTrack(*t_track); + t_track->Clear(); }; // *** SINGLETS *** TClonesArray &sx = *SingletX; for(int i=0; inclsx; i++){ - t_singlet->plane = l2->planex[i]; - t_singlet->coord[0] = l2->xs[i][0]; - t_singlet->coord[1] = l2->xs[i][1]; - t_singlet->sgnl = l2->signlxs[i]; - new(sx[i]) TrkSinglet(*t_singlet); - t_singlet->Clear(); + t_singlet->plane = l2->planex[i]; + t_singlet->coord[0] = l2->xs[i][0]; + t_singlet->coord[1] = l2->xs[i][1]; + t_singlet->sgnl = l2->signlxs[i]; +// t_singlet->cls = 0; + new(sx[i]) TrkSinglet(*t_singlet); + t_singlet->Clear(); } TClonesArray &sy = *SingletY; for(int i=0; inclsy; i++){ - t_singlet->plane = l2->planey[i]; - t_singlet->coord[0] = l2->ys[i][0]; - t_singlet->coord[1] = l2->ys[i][1]; - t_singlet->sgnl = l2->signlys[i]; - new(sy[i]) TrkSinglet(*t_singlet); - t_singlet->Clear(); + t_singlet->plane = l2->planey[i]; + t_singlet->coord[0] = l2->ys[i][0]; + t_singlet->coord[1] = l2->ys[i][1]; + t_singlet->sgnl = l2->signlys[i]; +// t_singlet->cls = 0; + new(sy[i]) TrkSinglet(*t_singlet); + t_singlet->Clear(); + }; + + delete t_track; + delete t_singlet; +} +//-------------------------------------- +// +// +//-------------------------------------- +/** + * Fills a TrkLevel2 object with values from a struct cTrkLevel2 (to get data from F77 common). + * Ref to Level1 data (clusters) is also set. + */ +void TrkLevel2::SetFromLevel2Struct(cTrkLevel2 *l2, TrkLevel1 *l1){ + +// temporary objects: + TrkSinglet* t_singlet = new TrkSinglet(); + TrkTrack* t_track = new TrkTrack(); +// general variables + good2 = l2->good2; + for(Int_t i=0; i<12 ; i++){ + crc[i] = l2->crc[i]; + }; +// *** TRACKS *** + TClonesArray &t = *Track; + for(int i=0; intrk; i++){ + t_track->seqno = i;// NBNBNBNB deve sempre essere = i + t_track->image = l2->image[i]-1; +// cout << "track "<seqno << t_track->image<chi2 = l2->chi2_nt[i]; + for(int it1=0;it1<5;it1++){ + t_track->al[it1] = l2->al_nt[i][it1]; + for(int it2=0;it2<5;it2++) + t_track->coval[it1][it2] = l2->coval[i][it2][it1]; + }; + for(int ip=0;ip<6;ip++){ + t_track->xgood[ip] = l2->xgood_nt[i][ip]; + t_track->ygood[ip] = l2->ygood_nt[i][ip]; + t_track->xm[ip] = l2->xm_nt[i][ip]; + t_track->ym[ip] = l2->ym_nt[i][ip]; + t_track->zm[ip] = l2->zm_nt[i][ip]; + t_track->resx[ip] = l2->resx_nt[i][ip]; + t_track->resy[ip] = l2->resy_nt[i][ip]; + t_track->xv[ip] = l2->xv_nt[i][ip]; + t_track->yv[ip] = l2->yv_nt[i][ip]; + t_track->zv[ip] = l2->zv_nt[i][ip]; + t_track->axv[ip] = l2->axv_nt[i][ip]; + t_track->ayv[ip] = l2->ayv_nt[i][ip]; + t_track->dedx_x[ip] = l2->dedx_x[i][ip]; + t_track->dedx_y[ip] = l2->dedx_y[i][ip]; +// cout << "traccia "<cltrx[i][ip] <<" "<< l2->cltry[i][ip] <<" "<< t_track->xgood[ip] << t_track->ygood[ip]<clx[ip] = l1->GetCluster(l2->cltrx[i][ip]-1); +// t_track->cly[ip] = l1->GetCluster(l2->cltry[i][ip]-1); + if(t_track->xgood[ip])t_track->clx->AddAt(l1->GetCluster(l2->cltrx[i][ip]-1),ip); + if(t_track->ygood[ip])t_track->cly->AddAt(l1->GetCluster(l2->cltry[i][ip]-1),ip); + //----------------------------------------------------- + }; + new(t[i]) TrkTrack(*t_track); + t_track->Clear(); + }; +// *** SINGLETS *** + TClonesArray &sx = *SingletX; + for(int i=0; inclsx; i++){ + t_singlet->plane = l2->planex[i]; + t_singlet->coord[0] = l2->xs[i][0]; + t_singlet->coord[1] = l2->xs[i][1]; + t_singlet->sgnl = l2->signlxs[i]; + //----------------------------------------------------- +// cout << "singolo x "<clsx[i] <cls = l1->GetCluster(l2->clsx[i]-1); + //----------------------------------------------------- + new(sx[i]) TrkSinglet(*t_singlet); + t_singlet->Clear(); + } + TClonesArray &sy = *SingletY; + for(int i=0; inclsy; i++){ + t_singlet->plane = l2->planey[i]; + t_singlet->coord[0] = l2->ys[i][0]; + t_singlet->coord[1] = l2->ys[i][1]; + t_singlet->sgnl = l2->signlys[i]; + //----------------------------------------------------- +// cout << "singolo y "<clsy[i] <cls = l1->GetCluster(l2->clsy[i]-1); + //----------------------------------------------------- + new(sy[i]) TrkSinglet(*t_singlet); + t_singlet->Clear(); }; delete t_track; @@ -522,23 +623,24 @@ while(N != 0){ int nfit =0; float chi2ref = numeric_limits::max(); + // first loop to search maximum num. of fit points for(int i=0; i < ntrk(); i++){ -// if(N==ntrk())cout << "** "<GetImageSeqNo()<< " " <<((TrkTrack *)t[i])->GetNtot() << " " <<((TrkTrack *)t[i])->chi2 << endl; if( ((TrkTrack *)t[i])->GetNtot() >= nfit && m[i]==1){ nfit = ((TrkTrack *)t[i])->GetNtot(); } } //second loop to search minimum chi2 among selected for(int i=0; intrk(); i++){ - if( ((TrkTrack *)t[i])->chi2 < chi2ref - && ((TrkTrack *)t[i])->GetNtot()== nfit - && m[i]==1){ + Float_t chi2 = ((TrkTrack *)t[i])->chi2; + if(chi2 < 0) chi2 = chi2*1000; + if( chi2 < chi2ref + && ((TrkTrack *)t[i])->GetNtot() == nfit + && m[i]==1){ chi2ref = ((TrkTrack *)t[i])->chi2; indi = i; - // cout << "2** "<HasImage() ){ m[((TrkTrack *)t[indi])->image] = 0; N--; @@ -547,7 +649,7 @@ // Float_t chi2i=((TrkTrack *)t[((TrkTrack *)t[indi])->image ])->chi2; // cout << "i** "<< ((TrkTrack *)t[indi])->image << " " << nfiti <<" "<Add( (TrkTrack*)t[indi] ); @@ -833,13 +935,13 @@ tl = new float[npoint]; int i=0; do{ - x[i] = 0; - y[i] = 0; - z[i] = zin[i]; - thx[i] = 0; - thy[i] = 0; - tl[i] = 0; - i++; + x[i] = 0; + y[i] = 0; + z[i] = zin[i]; + thx[i] = 0; + thy[i] = 0; + tl[i] = 0; + i++; }while(zin[i-1] > zin[i] && i < npoint); npoint=i; if(npoint != n)cout << "NB! Trajectory created with "<