--- DarthVader/TrackerLevel2/src/TrkLevel2.cpp 2007/01/16 10:03:48 1.23 +++ DarthVader/TrackerLevel2/src/TrkLevel2.cpp 2007/03/28 09:22:28 1.31 @@ -13,10 +13,12 @@ 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_(); - void mini2_(int*,int*,int*); - void guess_(); +// int readb_(); + void mini2_(int*,int*,int*); + void guess_(); + void gufld_(float*, float*); } + //-------------------------------------- // // @@ -49,8 +51,8 @@ }; clx = 0; cly = 0; -// clx = new TRefArray(6,0); -// cly = new TRefArray(6,0); +// clx = new TRefArray(6,0); //forse causa memory leak??? +// cly = new TRefArray(6,0); //forse causa memory leak??? }; //-------------------------------------- // @@ -143,6 +145,11 @@ for (int i=0; i<5; i++) dal[i] = (double)al[i]; for (int i=0; inpoint; i++) dzin[i] = (double)t->z[i]; + TrkParams::Load(1); + if( !TrkParams::IsLoaded(1) ){ + cout << "int TrkTrack::DoTrack(Trajectory* t) --- ERROR --- m.field not loaded"<npoint),dzin,dxout,dyout,dal,&ifail); for (int i=0; inpoint; i++){ @@ -182,6 +189,11 @@ for (int i=0; i<5; i++) dal[i] = (double)al[i]; for (int i=0; inpoint; i++) dzin[i] = (double)t->z[i]; + TrkParams::Load(1); + if( !TrkParams::IsLoaded(1) ){ + cout << "int TrkTrack::DoTrack2(Trajectory* t) --- ERROR --- m.field not loaded"<npoint),dzin,dxout,dyout,dthxout,dthyout,dtlout,dal,&ifail); for (int i=0; inpoint; i++){ @@ -223,7 +235,8 @@ // Float_t TrkTrack::GetDEDX(){ Float_t dedx=0; - for(Int_t i=0; i<6; i++)dedx+=dedx_x[i]*xgood[i]+dedx_y[i]*ygood[i]; +// for(Int_t i=0; i<6; i++)dedx+=dedx_x[i]*xgood[i]+dedx_y[i]*ygood[i]; + for(Int_t i=0; i<6; i++)dedx+=dedx_x[i]*XGood(i)+dedx_y[i]*YGood(i); dedx = dedx/(this->GetNX()+this->GetNY()); return dedx; }; @@ -239,8 +252,8 @@ cout << endl << "al : "; for(int i=0; i<5; i++)cout << al[i] << " "; cout << endl << "chi^2 : "<< chi2; cout << endl << "n.step : "<< nstep; - cout << endl << "xgood : "; for(int i=0; i<6; i++)cout << xgood[i] ; - cout << endl << "ygood : "; for(int i=0; i<6; i++)cout << ygood[i] ; + cout << endl << "xgood : "; for(int i=0; i<6; i++)cout << XGood(i) ; + cout << endl << "ygood : "; for(int i=0; i<6; i++)cout << YGood(i) ; cout << endl << "xm : "; for(int i=0; i<6; i++)cout << xm[i] << " "; cout << endl << "ym : "; for(int i=0; i<6; i++)cout << ym[i] << " "; cout << endl << "zm : "; for(int i=0; i<6; i++)cout << zm[i] << " "; @@ -277,6 +290,7 @@ * Set the TrkTrack good measurement */ void TrkTrack::SetGood(int *xg, int *yg){ + // NB! si perdera` l'informazione sul numero del cluster for(int i=0; i<6; i++) xgood[i]=*xg++; for(int i=0; i<6; i++) ygood[i]=*yg++; } @@ -286,13 +300,17 @@ */ void TrkTrack::LoadField(TString path){ - strcpy(path_.path,path.Data()); - path_.pathlen = path.Length(); - path_.error = 0; - readb_(); +// strcpy(path_.path,path.Data()); +// path_.pathlen = path.Length(); +// path_.error = 0; +// readb_(); + + TrkParams::Set(path,1); + TrkParams::Load(1); }; + /** * Method to fill minimization-routine common */ @@ -300,8 +318,10 @@ for(int i=0; i<6; i++){ - track.xgood[i]=xgood[i]; - track.ygood[i]=ygood[i]; +// track.xgood[i]=xgood[i]; +// track.ygood[i]=ygood[i]; + track.xgood[i]=XGood(i); + track.ygood[i]=YGood(i); track.xm[i]=xm[i]; track.ym[i]=ym[i]; @@ -314,10 +334,10 @@ track.xm_b[i]=xm[i]; track.ym_a[i]=ym[i]; track.ym_b[i]=ym[i]; - if( xgood[i] && !ygood[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]){ + }else if( !XGood(i) && YGood(i)){ track.xm_a[i] = track.xm_a[i]+segment; track.xm_b[i] = track.xm_b[i]-segment; } @@ -353,7 +373,6 @@ axv[i] = track->axv[i]; ayv[i] = track->ayv[i]; } - } /** @@ -385,6 +404,11 @@ // ------------------------------------------ // call mini routine + TrkParams::Load(1); + if( !TrkParams::IsLoaded(1) ){ + cout << "void TrkTrack::Fit(double pfixed, int& fail, int iprint) --- ERROR --- m.field not loaded"<At(ip)); + return pt; +}; +/* + * Method to retrieve the Y-view clusters associated to the track. + * @param ip Tracker plane (0-5) + */ +TrkCluster *TrkTrack::GetClusterY(int ip){ + cout << " TrkCluster *TrkTrack::GetClusterY(int ip) -- momentaneamente fuori servizio --"<< endl; + if(!cly)return NULL; + TrkCluster *pt = (TrkCluster*)(cly->At(ip)); + return pt; +}; + //-------------------------------------- // @@ -535,7 +603,7 @@ // //-------------------------------------- TrkLevel2::TrkLevel2(){ - cout <<"TrkLevel2::TrkLevel2()"<good2; +// for(Int_t i=0; i<12 ; i++){ +// // crc[i] = l2->crc[i]; +// good[i] = l2->good[i]; +// }; +// // *** TRACKS *** +// if(!Track) Track = new TClonesArray("TrkTrack"); +// 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]; +// t_track->nstep = l2->nstep_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 *** +// if(!SingletX)SingletX = new TClonesArray("TrkSinglet"); +// 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]; +// // t_singlet->cls = 0; +// new(sx[i]) TrkSinglet(*t_singlet); +// t_singlet->Clear(); +// } +// if(!SingletY)SingletY = new TClonesArray("TrkSinglet"); +// 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]; +// // 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. If l1==NULL no references are set. + * (NB It make sense to set references only if events are stored in a tree that contains also the Level1 branch) + */ +void TrkLevel2::SetFromLevel2Struct(cTrkLevel2 *l2, TrkLevel1 *l1){ + +// cout << "void TrkLevel2::SetFromLevel2Struct(cTrkLevel2 *l2, TrkLevel1 *l1)"<good2; +// ----------------- +// general variables +// ----------------- for(Int_t i=0; i<12 ; i++){ -// crc[i] = l2->crc[i]; - good[i] = l2->good[i]; - }; - // *** TRACKS *** + good[i] = l2->good[i]; + }; +// -------------- +// *** TRACKS *** +// -------------- if(!Track) Track = new TClonesArray("TrkTrack"); TClonesArray &t = *Track; + //----------------------------------------------------- + if( l1 && !t_track->clx )t_track->clx = new TRefArray(6,0); + if( l1 && !t_track->cly )t_track->cly = new TRefArray(6,0); + //----------------------------------------------------- for(int i=0; intrk; i++){ +// cout <<" 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]; t_track->nstep = l2->nstep_nt[i]; for(int it1=0;it1<5;it1++){ @@ -622,8 +781,8 @@ 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->xgood[ip] = l2->cltrx[i][ip];//l2->xgood_nt[i][ip]; + t_track->ygood[ip] = l2->cltry[i][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]; @@ -636,13 +795,41 @@ 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; +// cout << " ip "<cltrx[i][ip] "<< l2->cltrx[i][ip]<cltry[i][ip] "<< l2->cltry[i][ip]<xgood[ip])t_track->clx->AddAt(l1->GetCluster(l2->cltrx[i][ip]-1),ip); +// if(l1 && t_track->ygood[ip])t_track->cly->AddAt(l1->GetCluster(l2->cltry[i][ip]-1),ip); + if(l2->xgood_nt[i][ip]){ +// cout << " ip "<cltrx[i][ip] "<< l2->cltrx[i][ip]<cltrx[i][ip] "<< l2->cltrx[i][ip]<<" "; +// if( l1->GetCluster(l2->cltrx[i][ip]-1)->TestBit(l1->GetCluster(l2->cltrx[i][ip]-1)->kIsReferenced) )cout << ">> is referenced "; + if(l1)t_track->clx->AddAt(l1->GetCluster(l2->cltrx[i][ip]-1),ip); +// cout << " --- "<GetCluster(l2->cltrx[i][ip]-1)->GetUniqueID()<xgood[ip] = l2->cltrx[i][ip]; // WORK-AROUND ***** + }else{ + if(l1)t_track->clx->RemoveAt(ip); + } + if(l2->ygood_nt[i][ip]){ +// cout << " ip "<cltry[i][ip] "<< l2->cltry[i][ip]<cltry[i][ip] "<< l2->cltry[i][ip]<<" "; +// if( l1->GetCluster(l2->cltry[i][ip]-1)->TestBit(l1->GetCluster(l2->cltry[i][ip]-1)->kIsReferenced) )cout << ">> is referenced "; + if(l1)t_track->cly->AddAt(l1->GetCluster(l2->cltry[i][ip]-1),ip); +// cout << " --- "<GetCluster(l2->cltry[i][ip]-1)->GetUniqueID()<ygood[ip] = l2->cltry[i][ip]; // WORK-AROUND ***** + }else{ + if(l1)t_track->cly->RemoveAt(ip); + } + //----------------------------------------------------- + //----------------------------------------------------- }; new(t[i]) TrkTrack(*t_track); t_track->Clear(); }; +// ---------------- // *** SINGLETS *** +// ---------------- if(!SingletX)SingletX = new TClonesArray("TrkSinglet"); TClonesArray &sx = *SingletX; for(int i=0; inclsx; i++){ @@ -650,7 +837,9 @@ 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; + //----------------------------------------------------- + if(l1) t_singlet->cls = l1->GetCluster(l2->clsx[i]-1); + //----------------------------------------------------- new(sx[i]) TrkSinglet(*t_singlet); t_singlet->Clear(); } @@ -661,7 +850,9 @@ 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; + //----------------------------------------------------- + if(l1) t_singlet->cls = l1->GetCluster(l2->clsy[i]-1); + //----------------------------------------------------- new(sy[i]) TrkSinglet(*t_singlet); t_singlet->Clear(); }; @@ -669,104 +860,6 @@ 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]; - good[i] = l2->good[i]; - }; -// *** TRACKS *** - if(!Track) Track = new TClonesArray("TrkTrack"); - TClonesArray &t = *Track; - if(!t_track->clx)t_track->clx = new TRefArray(6,0); - if(!t_track->cly)t_track->cly = new TRefArray(6,0); - 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]; - t_track->nstep = l2->nstep_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]<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); -// if(t_track->ygood[ip])cout<<" i "<cltry[i][ip] "<cltry[i][ip]<< " l1->GetCluster(l2->cltry[i][ip]-1) "<GetCluster(l2->cltry[i][ip]-1)<xgood[ip])cout<<" i "<cltrx[i][ip] "<cltrx[i][ip]<< " l1->GetCluster(l2->cltrx[i][ip]-1) "<GetCluster(l2->cltrx[i][ip]-1)<Clear(); - }; -// *** SINGLETS *** - if(!SingletX)SingletX = new TClonesArray("TrkSinglet"); - 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); -// cout<<" i "<clsx[i] "<clsx[i]<< " l1->GetCluster(l2->clsx[i]-1) "<GetCluster(l2->clsx[i]-1)<Clear(); - } - if(!SingletY)SingletY = new TClonesArray("TrkSinglet"); - 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); -// cout<<" i "<clsy[i] "<clsy[i]<< " l1->GetCluster(l2->clsy[i]-1) "<GetCluster(l2->clsy[i]-1)<Clear(); - }; - - delete t_track; - delete t_singlet; -} /** * Fills a struct cTrkLevel2 with values from a TrkLevel2 object (to put data into a F77 common). */ @@ -793,8 +886,8 @@ l2->coval[i][it2][it1] = ((TrkTrack *)Track->At(i))->coval[it1][it2]; }; for(int ip=0;ip<6;ip++){ - l2->xgood_nt[i][ip] = ((TrkTrack *)Track->At(i))->xgood[ip]; - l2->ygood_nt[i][ip] = ((TrkTrack *)Track->At(i))->ygood[ip]; + l2->xgood_nt[i][ip] = ((TrkTrack *)Track->At(i))->XGood(ip); + l2->ygood_nt[i][ip] = ((TrkTrack *)Track->At(i))->YGood(ip); l2->xm_nt[i][ip] = ((TrkTrack *)Track->At(i))->xm[ip]; l2->ym_nt[i][ip] = ((TrkTrack *)Track->At(i))->ym[ip]; l2->zm_nt[i][ip] = ((TrkTrack *)Track->At(i))->zm[ip]; @@ -881,7 +974,8 @@ int indo=0; int indi=0; - while(N != 0){ + while(N > 0){ +// while(N != 0){ int nfit =0; float chi2ref = numeric_limits::max(); @@ -892,9 +986,9 @@ } } //second loop to search minimum chi2 among selected - for(int i=0; intrk(); i++){ + for(int i=0; ichi2; - if(chi2 < 0) chi2 = chi2*1000; + if(chi2 < 0) chi2 = -chi2*1000; if( chi2 < chi2ref && ((TrkTrack *)t[i])->GetNtot() == nfit && m[i]==1){ @@ -906,17 +1000,17 @@ m[((TrkTrack *)t[indi])->image] = 0; N--; - // cout << "i** "<< ((TrkTrack *)t[indi])->image << " " << nfiti <<" "<image << " " << nfiti <<" "<Add( (TrkTrack*)t[indi] ); m[indi] = 0; -// cout << "SORTED "<< indo << " "<< indi << " "<< N << endl; +// cout << "SORTED "<< indo << " "<< indi << " "<< N << " "<<((TrkTrack *)t[indi])->image<<" "<