--- DarthVader/TrackerLevel2/src/TrkHough.cpp 2006/11/10 11:38:44 1.1 +++ DarthVader/TrackerLevel2/src/TrkHough.cpp 2009/02/03 13:57:15 1.4 @@ -39,32 +39,23 @@ houghtime=0; fittime=0; +// ntracks=0; +// al0=0; +// al1=0; +// al2=0; +// al3=0; +// al4=0; + + Candidates = 0; + }; //-------------------------------------- // // //-------------------------------------- -TrkHough::~TrkHough(){ - - delete [] alfayz1; - delete [] alfayz2; - delete [] db_cloud; - - delete [] alfaxz1; - delete [] alfaxz2; - delete [] alfaxz3; - delete [] tr_cloud; - - delete [] alfayz1_av; - delete [] alfayz2_av; - delete [] ptcloud_yz; - - delete [] alfaxz1_av; - delete [] alfaxz2_av; - delete [] alfaxz3_av; - delete [] ptcloud_xz; - -}; +void TrkHough::Set(){ + if(!Candidates)Candidates = new TClonesArray("TrkTrack"); +} //-------------------------------------- // // @@ -72,63 +63,178 @@ /** * Fills a TrkHough object with values from a struct cTrkhough (to get data from F77 common). */ -void TrkHough::SetFromHoughStruct(cTrkHough *lh){ +void TrkHough::SetFromHoughStruct(cTrkHough *lh, cTrkCandidates *lc){ - ndblt = lh->ndblt_nt; - ntrpt = lh->ntrpt_nt; - nclouds_yz = lh->nclouds_yz_nt; - nclouds_xz = lh->nclouds_xz_nt; - nclstr = lh->nclstr; - totaltime = lh->totaltime; - houghtime = lh->houghtime; - fittime = lh->fittime; - - alfayz1 = new Float_t[ndblt]; - alfayz2 = new Float_t[ndblt]; - db_cloud = new Int_t[ndblt]; - for(int i=0; ialfayz1_nt[i]; - alfayz2[i] = (Float_t) lh->alfayz2_nt[i]; - db_cloud[i] = (Int_t) lh->db_cloud_nt[i]; - } - - alfaxz1 = new Float_t[ntrpt]; - alfaxz2 = new Float_t[ntrpt]; - alfaxz3 = new Float_t[ntrpt]; - tr_cloud = new Int_t[ntrpt]; - for(int i=0; ialfaxz1_nt[i]; - alfaxz2[i] = (Float_t) lh->alfaxz2_nt[i]; - alfaxz3[i] = (Float_t) lh->alfaxz3_nt[i]; - tr_cloud[i] = (Int_t) lh->tr_cloud_nt[i]; - } + if(!lh) return; + // ------------------------- + // fill hough transform info + // ------------------------- + ndblt = lh->ndblt_nt; + ntrpt = lh->ntrpt_nt; + nclouds_yz = lh->nclouds_yz_nt; + nclouds_xz = lh->nclouds_xz_nt; + nclstr = lh->nclstr; + totaltime = lh->totaltime; + houghtime = lh->houghtime; + fittime = lh->fittime; + + alfayz1 = new Float_t[ndblt]; + alfayz2 = new Float_t[ndblt]; + db_cloud = new Int_t[ndblt]; + for(int i=0; ialfayz1_nt[i]; + alfayz2[i] = (Float_t) lh->alfayz2_nt[i]; + db_cloud[i] = (Int_t) lh->db_cloud_nt[i]; + } + + alfaxz1 = new Float_t[ntrpt]; + alfaxz2 = new Float_t[ntrpt]; + alfaxz3 = new Float_t[ntrpt]; + tr_cloud = new Int_t[ntrpt]; + for(int i=0; ialfaxz1_nt[i]; + alfaxz2[i] = (Float_t) lh->alfaxz2_nt[i]; + alfaxz3[i] = (Float_t) lh->alfaxz3_nt[i]; + tr_cloud[i] = (Int_t) lh->tr_cloud_nt[i]; + } - alfayz1_av = new Float_t[nclouds_yz]; - alfayz2_av = new Float_t[nclouds_yz]; - ptcloud_yz = new Int_t[nclouds_yz]; - for(int i=0; ialfayz1_av_nt[i]; - alfayz2_av[i] = (Float_t) lh->alfayz2_av_nt[i]; - ptcloud_yz[i] = (Int_t) lh->ptcloud_yz_nt[i]; - } + alfayz1_av = new Float_t[nclouds_yz]; + alfayz2_av = new Float_t[nclouds_yz]; + ptcloud_yz = new Int_t[nclouds_yz]; + for(int i=0; ialfayz1_av_nt[i]; + alfayz2_av[i] = (Float_t) lh->alfayz2_av_nt[i]; + ptcloud_yz[i] = (Int_t) lh->ptcloud_yz_nt[i]; + } - alfaxz1_av = new Float_t[nclouds_xz]; - alfaxz2_av = new Float_t[nclouds_xz]; - alfaxz3_av = new Float_t[nclouds_xz]; - ptcloud_xz = new Int_t[nclouds_xz]; - for(int i=0; ialfaxz1_av_nt[i] ; - alfaxz2_av[i] = (Float_t) lh->alfaxz2_av_nt[i]; - alfaxz3_av[i] = (Float_t) lh->alfaxz3_av_nt[i]; - ptcloud_xz[i] = (Int_t) lh->ptcloud_xz_nt[i]; - } + alfaxz1_av = new Float_t[nclouds_xz]; + alfaxz2_av = new Float_t[nclouds_xz]; + alfaxz3_av = new Float_t[nclouds_xz]; + ptcloud_xz = new Int_t[nclouds_xz]; + for(int i=0; ialfaxz1_av_nt[i] ; + alfaxz2_av[i] = (Float_t) lh->alfaxz2_av_nt[i]; + alfaxz3_av[i] = (Float_t) lh->alfaxz3_av_nt[i]; + ptcloud_xz[i] = (Int_t) lh->ptcloud_xz_nt[i]; + } + + if(!lc) return; + // -------------------------- + // fill track candidates info + // -------------------------- +// ntracks = lc->ntracks; +// al0 = new Float_t[ntracks]; +// al1 = new Float_t[ntracks]; +// al2 = new Float_t[ntracks]; +// al3 = new Float_t[ntracks]; +// al4 = new Float_t[ntracks]; +// for(int ii=0; iial[ii][0]; +// al1[ii] = (Float_t) lc->al[ii][1]; +// al2[ii] = (Float_t) lc->al[ii][2]; +// al3[ii] = (Float_t) lc->al[ii][3]; +// al4[ii] = (Float_t) lc->al[ii][4]; +// } + TrkTrack* t_track = new TrkTrack(); + if(!Candidates) Candidates = new TClonesArray("TrkTrack"); + TClonesArray &t = *Candidates; + + for(int i=0; intracks; i++){ +// cout << " - "<seqno = i; + t_track->image = 0; + t_track->chi2 = lc->chi2[i]; + t_track->nstep = 0; + for(int it1=0;it1<5;it1++){ + t_track->al[it1] = lc->al[i][it1]; + for(int it2=0;it2<5;it2++) + t_track->coval[it1][it2] = 0.; + }; + for(int ip=0;ip<6;ip++){ + // --------------------------------- + // new implementation of xgood/ygood + // --------------------------------- + t_track->xgood[ip] = (Int_t) lc->xgood[i][ip]; + t_track->ygood[ip] = (Int_t) lc->ygood[i][ip]; + int ssensor = lc->sensor[i][ip]; + int sladder = lc->ladder[i][ip]; + if(ip==5&&ssensor!=0)ssensor = 3 - ssensor; //notazione paolo x align + t_track->xgood[ip] += 10000000*ssensor+10*sladder ; // ladder+sensor + t_track->ygood[ip] += 10000000*ssensor+10*sladder ; // ladder+sensor +// if(l2->xbad[i][ip]>0)t_track->xgood[ip]=-t_track->xgood[ip]; +// if(l2->ybad[i][ip]>0)t_track->ygood[ip]=-t_track->ygood[ip]; + t_track->xm[ip] = lc->xm[i][ip]; + t_track->ym[ip] = lc->ym[i][ip]; + t_track->zm[ip] = lc->zm[i][ip]; + t_track->resx[ip] = lc->resx[i][ip]; + t_track->resy[ip] = lc->resy[i][ip]; + t_track->tailx[ip] = 0.; + t_track->taily[ip] = 0.; + t_track->xv[ip] = lc->xv[i][ip]; + t_track->yv[ip] = lc->yv[i][ip]; + t_track->zv[ip] = lc->zv[i][ip]; + t_track->axv[ip] = lc->axv[i][ip]; + t_track->ayv[ip] = lc->ayv[i][ip]; + t_track->dedx_x[ip] = 0.; + t_track->dedx_y[ip] = 0.; + t_track->multmaxx[ip] = 0; + t_track->multmaxy[ip] = 0; + t_track->seedx[ip] = 0.; + t_track->seedy[ip] = 0.; + t_track->xpu[ip] = 0.; + t_track->ypu[ip] = 0.; + //----------------------------------------------------- + //----------------------------------------------------- + //----------------------------------------------------- + //----------------------------------------------------- + }; + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // evaluated coordinates (to define GF) + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + int ngf = TrkParams::nGF; + float *zgf = TrkParams::zGF; + Trajectory tgf = Trajectory(ngf,zgf); + tgf.DoTrack(t_track->al);//<<<< integrate the trajectory + for(int ip=0; ipxGF[ip] = tgf.x[ip]; + t_track->yGF[ip] = tgf.y[ip]; + } +// if(t_track->IsSaturated())t_track->Dump(); + new(t[i]) TrkTrack(*t_track); + t_track->Clear(); + }; +// cout << t.GetEntries() <<" <> "<< Candidates->GetEntries()<= GetNCandidates()){ + cout << "** TrkHough ** Track-candidate "<< it << "does not exits! " << endl; + cout << " n.candidates = "<< GetNCandidates() << endl; + return 0; + } + if(!Candidates){ + cout << "TrkTrack *TrkHough::GetCandidate(int is) >> (TClonesArray*) Candidate ==0 "<Delete(); }; //-------------------------------------- // @@ -145,16 +253,33 @@ //-------------------------------------- void TrkHough::Delete(){ - ndblt = 0; - ntrpt = 0; - nclouds_yz = 0; - nclouds_xz = 0; - nclstr = 0; - totaltime = 0; - houghtime = 0; - fittime = 0; + Clear(); + + delete [] alfayz1; + delete [] alfayz2; + delete [] db_cloud; + + delete [] alfaxz1; + delete [] alfaxz2; + delete [] alfaxz3; + delete [] tr_cloud; + + delete [] alfayz1_av; + delete [] alfayz2_av; + delete [] ptcloud_yz; + + delete [] alfaxz1_av; + delete [] alfaxz2_av; + delete [] alfaxz3_av; + delete [] ptcloud_xz; + +// delete [] al0; +// delete [] al1; +// delete [] al2; +// delete [] al3; +// delete [] al4; - this->~TrkHough(); + if(Candidates)delete Candidates; };