--- DarthVader/TrackerLevel2/src/TrkLevel2.cpp 2007/02/19 16:28:39 1.27 +++ DarthVader/TrackerLevel2/src/TrkLevel2.cpp 2007/03/15 12:17:10 1.29 @@ -51,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??? }; //-------------------------------------- // @@ -304,6 +304,7 @@ // readb_(); TrkParams::Set(path,1); + TrkParams::Load(1); }; @@ -455,6 +456,29 @@ track_.trackmode = trackmode; } + +/* + * Method to retrieve the X-view clusters associated to the track. + * @param ip Tracker plane (0-5) + */ +TrkCluster *TrkTrack::GetClusterX(int ip){ + cout << " TrkCluster *TrkTrack::GetClusterX(int ip) -- momentaneamente fuori servizio --"<< endl; + if(!clx)return NULL; + TrkCluster *pt = (TrkCluster*)(clx->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; +}; + + //-------------------------------------- // // @@ -698,92 +722,122 @@ //-------------------------------------- /** * Fills a TrkLevel2 object with values from a struct cTrkLevel2 (to get data from F77 common). - * Ref to Level1 data (clusters) is also set. + * 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; - for(Int_t i=0; i<12 ; i++){ -// crc[i] = l2->crc[i]; - good[i] = l2->good[i]; + TrkSinglet* t_singlet = new TrkSinglet(); + TrkTrack* t_track = new TrkTrack(); + +// ----------------- +// general variables +// ----------------- + for(Int_t i=0; i<12 ; i++){ + 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; + t_track->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]; }; -// *** TRACKS *** - if(!Track) Track = new TClonesArray("TrkTrack"); - TClonesArray &t = *Track; + for(int ip=0;ip<6;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]; + 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 << " 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++){ + 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]; //----------------------------------------------------- - if(l1 && !t_track->clx)t_track->clx = new TRefArray(6,0); - if(l1 && !t_track->cly)t_track->cly = new TRefArray(6,0); + if(l1) t_singlet->cls = l1->GetCluster(l2->clsx[i]-1); //----------------------------------------------------- - 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]; - //----------------------------------------------------- - //----------------------------------------------------- - if(l1 && t_track->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); - //----------------------------------------------------- - //----------------------------------------------------- - }; - 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]; - //----------------------------------------------------- - if(l1) t_singlet->cls = l1->GetCluster(l2->clsx[i]-1); - //----------------------------------------------------- - 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]; - //----------------------------------------------------- - if(l1) t_singlet->cls = l1->GetCluster(l2->clsy[i]-1); - //----------------------------------------------------- - new(sy[i]) TrkSinglet(*t_singlet); - t_singlet->Clear(); - }; + 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]; + //----------------------------------------------------- + if(l1) t_singlet->cls = l1->GetCluster(l2->clsy[i]-1); + //----------------------------------------------------- + new(sy[i]) TrkSinglet(*t_singlet); + t_singlet->Clear(); + }; - delete t_track; - delete t_singlet; + delete t_track; + delete t_singlet; } /** * Fills a struct cTrkLevel2 with values from a TrkLevel2 object (to put data into a F77 common). @@ -1091,6 +1145,7 @@ // readb_(); TrkParams::Set(path,1); + TrkParams::Load(1); // };