/[PAMELA software]/DarthVader/TrackerLevel2/src/TrkLevel2.cpp
ViewVC logotype

Diff of /DarthVader/TrackerLevel2/src/TrkLevel2.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.1.1.1 by mocchiut, Fri May 19 13:15:54 2006 UTC revision 1.8 by pam-fi, Fri Aug 4 08:18:06 2006 UTC
# Line 10  using namespace std; Line 10  using namespace std;
10  //......................................  //......................................
11  extern "C" {      extern "C" {    
12      void dotrack_(int*, double*, double*, double*, double*, int*);      void dotrack_(int*, double*, double*, double*, double*, int*);
13        void dotrack2_(int*, double*, double*, double*, double*,double*, double*, double*,int*);
14      int  readb_(const char*);      int  readb_(const char*);
15  }  }
16  //--------------------------------------  //--------------------------------------
# Line 17  extern "C" {     Line 18  extern "C" {    
18  //  //
19  //--------------------------------------  //--------------------------------------
20  TrkTrack::TrkTrack(){  TrkTrack::TrkTrack(){
21      image = 0;      seqno = -1;
22        image = -1;
23      chi2  = 0;      chi2  = 0;
24      for(int it1=0;it1<5;it1++){      for(int it1=0;it1<5;it1++){
25          al[it1] = 0;          al[it1] = 0;
# Line 46  TrkTrack::TrkTrack(){ Line 48  TrkTrack::TrkTrack(){
48  //  //
49  //--------------------------------------  //--------------------------------------
50  TrkTrack::TrkTrack(const TrkTrack& t){  TrkTrack::TrkTrack(const TrkTrack& t){
51        seqno = t.seqno;
52      image = t.image;      image = t.image;
53      chi2  = t.chi2;      chi2  = t.chi2;
54      for(int it1=0;it1<5;it1++){      for(int it1=0;it1<5;it1++){
# Line 110  int TrkTrack::DoTrack(Trajectory* t){ Line 113  int TrkTrack::DoTrack(Trajectory* t){
113  //  //
114  //  //
115  //--------------------------------------  //--------------------------------------
116    /**
117     * Evaluates the trajectory in the apparatus associated to the track.
118     * It integrates the equations of motion in the magnetic field. The magnetic field should be previously loaded ( by calling  TrkLevel2::LoadField() ), otherwise an error message is returned.  
119     * @param t pointer to an object of the class Trajectory,
120     * which z coordinates should be previously initialized by calling the proper constructor ( Trajectory::Trajectory(int n, float* zin) ).
121     * @return error flag.
122     */
123    int TrkTrack::DoTrack2(Trajectory* t){
124    
125        double *dxout   = new double[t->npoint];
126        double *dyout   = new double[t->npoint];
127        double *dthxout = new double[t->npoint];
128        double *dthyout = new double[t->npoint];
129        double *dtlout  = new double[t->npoint];
130        double *dzin    = new double[t->npoint];
131        double dal[5];
132    
133        int ifail = 0;
134    
135        for (int i=0; i<5; i++)         dal[i]  = (double)al[i];
136        for (int i=0; i<t->npoint; i++) dzin[i] = (double)t->z[i];
137    
138        dotrack2_(&(t->npoint),dzin,dxout,dyout,dthxout,dthyout,dtlout,dal,&ifail);
139        
140        for (int i=0; i<t->npoint; i++){
141            t->x[i]   = (float)*dxout++;
142            t->y[i]   = (float)*dyout++;
143            t->thx[i] = (float)*dthxout++;
144            t->thy[i] = (float)*dthyout++;
145            t->tl[i]  = (float)*dtlout++;
146        }
147    
148    //    delete [] dxout;
149    //    delete [] dyout;
150    //    delete [] dzin;
151    
152        return ifail;
153    };
154    //--------------------------------------
155    //
156    //
157    //--------------------------------------
158  //float TrkTrack::BdL(){  //float TrkTrack::BdL(){
159  //};  //};
160  //--------------------------------------  //--------------------------------------
# Line 195  TrkLevel2::TrkLevel2(){ Line 240  TrkLevel2::TrkLevel2(){
240      Track    = new TClonesArray("TrkTrack");      Track    = new TClonesArray("TrkTrack");
241      SingletX = new TClonesArray("TrkSinglet");      SingletX = new TClonesArray("TrkSinglet");
242      SingletY = new TClonesArray("TrkSinglet");      SingletY = new TClonesArray("TrkSinglet");
243    
244    //      PhysicalTrack = new TClonesArray("TrkTrack");
245            //sostituire con TRefArray... appena ho capito come si usa
246  }  }
247  //--------------------------------------  //--------------------------------------
248  //  //
# Line 222  void TrkLevel2::Dump(){ Line 270  void TrkLevel2::Dump(){
270  /**  /**
271   * Fills a TrkLevel2 object with values from a struct cTrkLevel2 (to get data from F77 common).   * Fills a TrkLevel2 object with values from a struct cTrkLevel2 (to get data from F77 common).
272   */   */
273  void TrkLevel2::FillCommonVar(cTrkLevel2 *l2){  void TrkLevel2::SetFromLevel2Struct(cTrkLevel2 *l2){
274        //
275    //    Track    = new TClonesArray("TrkTrack");
276    //    SingletX = new TClonesArray("TrkSinglet");
277    //    SingletY = new TClonesArray("TrkSinglet");
278  //  temporary objects:  //  temporary objects:
279      TrkSinglet* t_singlet = new TrkSinglet();      TrkSinglet* t_singlet = new TrkSinglet();
280      TrkTrack*   t_track   = new TrkTrack();      TrkTrack*   t_track   = new TrkTrack();
# Line 234  void TrkLevel2::FillCommonVar(cTrkLevel2 Line 286  void TrkLevel2::FillCommonVar(cTrkLevel2
286  //  *** TRACKS ***  //  *** TRACKS ***
287      TClonesArray &t = *Track;      TClonesArray &t = *Track;
288      for(int i=0; i<l2->ntrk; i++){      for(int i=0; i<l2->ntrk; i++){
289            t_track->seqno = i;
290          t_track->image = l2->image[i]-1;          t_track->image = l2->image[i]-1;
291    //      cout << "track "<<i<<t_track->seqno << t_track->image<<endl;
292          t_track->chi2  = l2->chi2_nt[i];          t_track->chi2  = l2->chi2_nt[i];
293          for(int it1=0;it1<5;it1++){          for(int it1=0;it1<5;it1++){
294              t_track->al[it1] = l2->al_nt[i][it1];              t_track->al[it1] = l2->al_nt[i][it1];
# Line 279  void TrkLevel2::FillCommonVar(cTrkLevel2 Line 333  void TrkLevel2::FillCommonVar(cTrkLevel2
333          new(sy[i]) TrkSinglet(*t_singlet);          new(sy[i]) TrkSinglet(*t_singlet);
334          t_singlet->Clear();          t_singlet->Clear();
335          };          };
336            
337            delete t_track;
338            delete t_singlet;
339    }
340    /**
341     * Fills a struct cTrkLevel2 with values from a TrkLevel2 object (to put data into a F77 common).
342     */
343    
344    void TrkLevel2::GetLevel2Struct(cTrkLevel2 *l2) const {
345      
346    //  general variables
347        l2->good2 = good2 ;
348        for(Int_t i=0; i<12 ; i++){
349            l2->crc[i] = crc[i];
350        };
351    //  *** TRACKS ***
352    
353        l2->ntrk              =  Track->GetEntries();    
354        for(Int_t i=0;i<l2->ntrk;i++){
355          l2->image[i] = 1 + ((TrkTrack *)Track->At(i))->image;
356          l2->chi2_nt[i] =  ((TrkTrack *)Track->At(i))->chi2;
357          for(int it1=0;it1<5;it1++){
358            l2->al_nt[i][it1] = ((TrkTrack *)Track->At(i))->al[it1];
359            for(int it2=0;it2<5;it2++)
360              l2->coval[i][it2][it1] = ((TrkTrack *)Track->At(i))->coval[it1][it2];
361          };
362          for(int ip=0;ip<6;ip++){
363            l2->xgood_nt[i][ip] = ((TrkTrack *)Track->At(i))->xgood[ip];
364            l2->ygood_nt[i][ip] = ((TrkTrack *)Track->At(i))->ygood[ip];
365            l2->xm_nt[i][ip]    = ((TrkTrack *)Track->At(i))->xm[ip];
366            l2->ym_nt[i][ip]    = ((TrkTrack *)Track->At(i))->ym[ip];
367            l2->zm_nt[i][ip]    = ((TrkTrack *)Track->At(i))->zm[ip];
368            l2->resx_nt[i][ip]  = ((TrkTrack *)Track->At(i))->resx[ip];
369            l2->resy_nt[i][ip]  = ((TrkTrack *)Track->At(i))->resy[ip];
370            l2->xv_nt[i][ip]    = ((TrkTrack *)Track->At(i))->xv[ip];
371            l2->yv_nt[i][ip]    = ((TrkTrack *)Track->At(i))->yv[ip];
372            l2->zv_nt[i][ip]    = ((TrkTrack *)Track->At(i))->zv[ip];
373            l2->axv_nt[i][ip]   = ((TrkTrack *)Track->At(i))->axv[ip];
374            l2->ayv_nt[i][ip]   = ((TrkTrack *)Track->At(i))->ayv[ip];
375            l2->dedx_x[i][ip]   = ((TrkTrack *)Track->At(i))->dedx_x[ip];
376            l2->dedx_y[i][ip]   = ((TrkTrack *)Track->At(i))->dedx_y[ip];
377          };
378        }
379    
380    //  *** SINGLETS ***    
381        l2->nclsx              = SingletX->GetEntries();
382        for(Int_t i=0;i<l2->nclsx;i++){
383          l2->planex[i]  = ((TrkSinglet *)SingletX->At(i))->plane;
384          l2->xs[i][0]   = ((TrkSinglet *)SingletX->At(i))->coord[0];
385          l2->xs[i][1]   = ((TrkSinglet *)SingletX->At(i))->coord[1];
386          l2->signlxs[i] = ((TrkSinglet *)SingletX->At(i))->sgnl;
387        }
388        l2->nclsy              = SingletY->GetEntries();
389        for(Int_t i=0;i<l2->nclsy;i++){
390          l2->planey[i]  = ((TrkSinglet *)SingletY->At(i))->plane;
391          l2->ys[i][0]   = ((TrkSinglet *)SingletY->At(i))->coord[0];
392          l2->ys[i][1]   = ((TrkSinglet *)SingletY->At(i))->coord[1];
393          l2->signlys[i] = ((TrkSinglet *)SingletY->At(i))->sgnl;
394        }
395  }  }
396  //--------------------------------------  //--------------------------------------
397  //  //
# Line 289  void TrkLevel2::Clear(){ Line 402  void TrkLevel2::Clear(){
402      for(Int_t i=0; i<12 ; i++){      for(Int_t i=0; i<12 ; i++){
403          crc[i] = -1;          crc[i] = -1;
404      };      };
405      Track->RemoveAll();  /*    Track->RemoveAll();
406      SingletX->RemoveAll();      SingletX->RemoveAll();
407      SingletY->RemoveAll();      SingletY->RemoveAll();*/
408            // modify to avoid memory leakage
409            Track->Clear();
410            SingletX->Clear();
411            SingletY->Clear();
412  }  }
413  //--------------------------------------  //--------------------------------------
414  //  //
# Line 301  void TrkLevel2::Clear(){ Line 418  void TrkLevel2::Clear(){
418   * Sort physical tracks and stores them in a TObjectArray, ordering by increasing chi**2 value (in case of track image, it selects the one with lower chi**2). The total number of physical tracks is given by GetNTracks() and the it-th physical track can be retrieved by means of the method GetTrack(int it).   * Sort physical tracks and stores them in a TObjectArray, ordering by increasing chi**2 value (in case of track image, it selects the one with lower chi**2). The total number of physical tracks is given by GetNTracks() and the it-th physical track can be retrieved by means of the method GetTrack(int it).
419   * This method is overridden by PamLevel2::GetTracks(), where calorimeter and TOF information is used.   * This method is overridden by PamLevel2::GetTracks(), where calorimeter and TOF information is used.
420   */   */
421  TClonesArray *TrkLevel2::GetTracks(){  // TClonesArray *TrkLevel2::GetTracks(){
422    //      TClonesArray *sorted = GetTracks_NFitSorted();
423    //      return sorted;
424    // };
425    
426    /*TClonesArray *TrkLevel2::GetTracks_Chi2Sorted(){
427    
428      TClonesArray *sorted = new TClonesArray("TrkTrack");      TClonesArray *sorted = new TClonesArray("TrkTrack");
429      TClonesArray &t = *Track;      TClonesArray &t = *Track;
# Line 329  TClonesArray *TrkLevel2::GetTracks(){ Line 451  TClonesArray *TrkLevel2::GetTracks(){
451          indo++;          indo++;
452      }      }
453      return sorted;      return sorted;
454    }*/
455    /*TClonesArray *TrkLevel2::GetTracks_NFitSorted(){
456    
457            TClonesArray *sorted = new TClonesArray("TrkTrack");    
458        TClonesArray &t  = *Track;
459            TClonesArray &ts = *sorted;
460    //    TClonesArray &ts = *PhysicalTrack;
461            int N = ntrk();
462        vector<int> m(N); for(int i=0; i<N; i++)m[i]=1;
463    //      int m[50]; for(int i=0; i<N; i++)m[i]=1;
464            
465        int indo=0;
466        int indi=0;
467        while(N != 0){
468                    int nfit =0;
469                    float chi2ref = numeric_limits<float>::max();
470                    // first loop to search maximum num. of fit points
471                    for(int i=0; i < ntrk(); i++){
472    //                      if(N==ntrk())cout << "** "<<i<< " " << ((TrkTrack *)t[i])->GetImageSeqNo()<< " " <<((TrkTrack *)t[i])->GetNtot() << " " <<((TrkTrack *)t[i])->chi2 << endl;
473                            if( ((TrkTrack *)t[i])->GetNtot() >= nfit && m[i]==1){
474                            nfit =    ((TrkTrack *)t[i])->GetNtot();
475                            }
476                    }
477                    //second loop to search minimum chi2 among selected
478                    for(int i=0; i<this->ntrk(); i++){
479                            if(    ((TrkTrack *)t[i])->chi2 < chi2ref
480                            && ((TrkTrack *)t[i])->GetNtot()== nfit
481                            && m[i]==1){
482                            chi2ref = ((TrkTrack *)t[i])->chi2;
483                            indi = i;
484            //              cout << "2** "<<i<< " " << nfit <<" "<<chi2ref<<endl;
485                            }
486                    }
487                    if( ((TrkTrack *)t[indi])->HasImage() ){
488                            m[((TrkTrack *)t[indi])->image] = 0;
489                            N--;
490            
491            //          Int_t nfiti=((TrkTrack *)t[((TrkTrack *)t[indi])->image  ])->GetNtot();
492            //          Float_t chi2i=((TrkTrack *)t[((TrkTrack *)t[indi])->image  ])->chi2;
493                            
494            //          cout << "i** "<< ((TrkTrack *)t[indi])->image << " " << nfiti <<" "<<chi2i<<endl;
495                    }
496                    new(ts[indo]) TrkTrack(*(TrkTrack*)t[indi]);
497                    m[indi] = 0;
498    //              cout << "SORTED "<< indo << " "<< indi << " "<< N << endl;
499                    N--;    
500                    indo++;
501        }
502            m.clear();
503        return sorted;
504    //    return PhysicalTrack;
505    }*/
506    //TClonesArray *TrkLevel2::GetTracks_NFitSorted(){
507    TRefArray *TrkLevel2::GetTracks_NFitSorted(){
508    
509    //      cout << "GetTracks_NFitSorted(it): new TRefArray()"<< endl;
510    //      TClonesArray *sorted = new TClonesArray("TrkTrack");
511    //      TClonesArray &ts = *sorted;
512            TRefArray *sorted = new TRefArray();
513            
514            TClonesArray &t  = *Track;
515    //    TClonesArray &ts = *PhysicalTrack;
516            int N = ntrk();
517            vector<int> m(N); for(int i=0; i<N; i++)m[i]=1;
518    //      int m[50]; for(int i=0; i<N; i++)m[i]=1;
519            
520            int indo=0;
521            int indi=0;
522            while(N != 0){
523                    int nfit =0;
524                    float chi2ref = numeric_limits<float>::max();
525                    // first loop to search maximum num. of fit points
526                    for(int i=0; i < ntrk(); i++){
527    //                      if(N==ntrk())cout << "** "<<i<< " " << ((TrkTrack *)t[i])->GetImageSeqNo()<< " " <<((TrkTrack *)t[i])->GetNtot() << " " <<((TrkTrack *)t[i])->chi2 << endl;
528                            if( ((TrkTrack *)t[i])->GetNtot() >= nfit && m[i]==1){
529                                    nfit =    ((TrkTrack *)t[i])->GetNtot();
530                            }
531                    }
532                    //second loop to search minimum chi2 among selected
533                    for(int i=0; i<this->ntrk(); i++){
534                            if(    ((TrkTrack *)t[i])->chi2 < chi2ref
535                                                              && ((TrkTrack *)t[i])->GetNtot()== nfit
536                                                              && m[i]==1){
537                                    chi2ref = ((TrkTrack *)t[i])->chi2;
538                                    indi = i;
539            //              cout << "2** "<<i<< " " << nfit <<" "<<chi2ref<<endl;
540                                                              }
541                    }
542                    if( ((TrkTrack *)t[indi])->HasImage() ){
543                            m[((TrkTrack *)t[indi])->image] = 0;
544                            N--;
545            
546            //          Int_t nfiti=((TrkTrack *)t[((TrkTrack *)t[indi])->image  ])->GetNtot();
547            //          Float_t chi2i=((TrkTrack *)t[((TrkTrack *)t[indi])->image  ])->chi2;
548                            
549            //          cout << "i** "<< ((TrkTrack *)t[indi])->image << " " << nfiti <<" "<<chi2i<<endl;
550                    }
551    //              new(ts[indo]) TrkTrack(*(TrkTrack*)t[indi]);
552    //              cout << "GetTracks_NFitSorted(it): Add("<<indo<<")"<< endl;
553                    sorted->Add( (TrkTrack*)t[indi] );      
554                    
555                    m[indi] = 0;
556    //              cout << "SORTED "<< indo << " "<< indi << " "<< N << endl;
557                    N--;    
558                    indo++;
559            }
560            m.clear();
561    //      cout << "GetTracks_NFitSorted(it): Done"<< endl;
562    
563            return sorted;
564    //    return PhysicalTrack;
565  }  }
566  //--------------------------------------  //--------------------------------------
567  //  //
# Line 355  TrkTrack *TrkLevel2::GetStoredTrack(int Line 588  TrkTrack *TrkLevel2::GetStoredTrack(int
588  //  //
589  //--------------------------------------  //--------------------------------------
590  /**  /**
591     * Retrieves the is-th stored X singlet.
592     * @param it Singlet number, ranging from 0 to nclsx().
593     */
594    TrkSinglet *TrkLevel2::GetSingletX(int is){
595    
596            if(is >= this->nclsx()){
597                    cout << "** TrkLevel2 ** Singlet "<< is << "doen not exits! " << endl;
598                    cout << "                Stored x-singlets nclsx() = "<< this->nclsx() << endl;
599                    return 0;
600            }
601            TClonesArray &t = *(SingletX);
602            TrkSinglet *singlet = (TrkSinglet*)t[is];
603            return singlet;
604    }
605    //--------------------------------------
606    //
607    //
608    //--------------------------------------
609    /**
610     * Retrieves the is-th stored Y singlet.
611     * @param it Singlet number, ranging from 0 to nclsx().
612     */
613    TrkSinglet *TrkLevel2::GetSingletY(int is){
614    
615            if(is >= this->nclsy()){
616                    cout << "** TrkLevel2 ** Singlet "<< is << "doen not exits! " << endl;
617                    cout << "                Stored y-singlets nclsy() = "<< this->nclsx() << endl;
618                    return 0;
619            }
620            TClonesArray &t = *(SingletY);
621            TrkSinglet *singlet = (TrkSinglet*)t[is];
622            return singlet;
623    }
624    //--------------------------------------
625    //
626    //
627    //--------------------------------------
628    /**
629   * Retrieves the it-th "physical" track, sorted by the method GetNTracks().   * Retrieves the it-th "physical" track, sorted by the method GetNTracks().
630   * @param it Track number, ranging from 0 to GetNTracks().   * @param it Track number, ranging from 0 to GetNTracks().
631   */   */
632  TrkTrack *TrkLevel2::GetTrack(int it){  /*TrkTrack *TrkLevel2::GetTrack(int it){
633            
634      if(it >= this->GetNTracks()){      if(it >= this->GetNTracks()){
635          cout << "** TrkLevel2 ** Track "<< it << "does not exits! " << endl;          cout << "** TrkLevel2 ** Track "<< it << "does not exits! " << endl;
636          cout << "                Physical tracks GetNTracks() = "<< this->ntrk() << endl;          cout << "                Physical tracks GetNTracks() = "<< this->ntrk() << endl;
637          return 0;          return 0;
638      }      }
639      TrkTrack *track = (TrkTrack*)(*(this->GetTracks()))[it];          TClonesArray* sorted = GetTracks();
640      return track;          TClonesArray &ts = *sorted;
641            
642    //    TrkTrack *track = (TrkTrack*)ts[it];
643            TrkTrack *track = new TrkTrack( *(TrkTrack*)ts[it] ); //copia
644            sorted->Delete("all");////TEMPORANEO
645            return track;
646    }*/
647    TrkTrack *TrkLevel2::GetTrack(int it){
648        
649            if(it >= this->GetNTracks()){
650                    cout << "** TrkLevel2 ** Track "<< it << "does not exits! " << endl;
651                    cout << "                Physical tracks GetNTracks() = "<< this->ntrk() << endl;
652                    return 0;
653            }
654            
655            TRefArray *sorted = GetTracks();  //TEMPORANEO  
656            TrkTrack *track = (TrkTrack*)sorted->At(it);
657            sorted->Delete();
658            return track;
659  }  }
660    /**
661     * Give the number of "physical" tracks, sorted by the method GetTracks().
662     */
663    Int_t TrkLevel2::GetNTracks(){
664                    
665            Float_t ntot=0;
666            TClonesArray &t = *Track;
667            for(int i=0; i<ntrk(); i++) {
668                    if( ((TrkTrack *)t[i])->GetImageSeqNo() == -1 ) ntot+=1.;
669                    else ntot+=0.5;
670            }
671            return (Int_t)ntot;
672    
673    };
674  //--------------------------------------  //--------------------------------------
675  //  //
676  //  //
# Line 376  TrkTrack *TrkLevel2::GetTrack(int it){ Line 679  TrkTrack *TrkLevel2::GetTrack(int it){
679   * Retrieves (if present) the image of the it-th "physical" track, sorted by the method GetNTracks().   * Retrieves (if present) the image of the it-th "physical" track, sorted by the method GetNTracks().
680   * @param it Track number, ranging from 0 to GetNTracks().   * @param it Track number, ranging from 0 to GetNTracks().
681   */   */
682  TrkTrack *TrkLevel2::GetTrackImage(int it){  /*TrkTrack *TrkLevel2::GetTrackImage(int it){
683    
684      if(it >= this->GetNTracks()){      if(it >= this->GetNTracks()){
685          cout << "** TrkLevel2 ** Track "<< it << "does not exits! " << endl;          cout << "** TrkLevel2 ** Track "<< it << "does not exits! " << endl;
686          cout << "                Physical tracks GetNTracks() = "<< this->ntrk() << endl;          cout << "                Physical tracks GetNTracks() = "<< this->ntrk() << endl;
687          return 0;          return 0;
688      }      }
689      TrkTrack *track = (TrkTrack*)(*(this->GetTracks()))[it];          
690      if(!track->HasImage()){          TClonesArray* sorted = GetTracks();
691            TClonesArray &ts = *sorted;
692            TrkTrack *track = (TrkTrack*)ts[it];
693    //    TrkTrack *track = (TrkTrack*)(*(this->GetTracks()))[it];
694        
695            if(!track->HasImage()){
696          cout << "** TrkLevel2 ** Track "<< it << "does not have image! " << endl;          cout << "** TrkLevel2 ** Track "<< it << "does not have image! " << endl;
697          return 0;          return 0;
698      }      }
699      TrkTrack *image = (TrkTrack*)(*Track)[track->image];      TrkTrack *image = (TrkTrack*)(*Track)[track->image];
700    
701    //      GetTracks()->Delete(); ////TEMPORANEO
702            sorted->Delete(); ////TEMPORANEO
703            
704      return image;      return image;
705            
706    }*/
707    TrkTrack *TrkLevel2::GetTrackImage(int it){
708    
709            if(it >= this->GetNTracks()){
710                    cout << "** TrkLevel2 ** Track "<< it << "does not exits! " << endl;
711                    cout << "                Physical tracks GetNTracks() = "<< this->ntrk() << endl;
712                    return 0;
713            }
714            
715            TRefArray* sorted = GetTracks(); //TEMPORANEO
716            TrkTrack *track = (TrkTrack*)sorted->At(it);
717            
718            if(!track->HasImage()){
719                    cout << "** TrkLevel2 ** Track "<< it << "does not have image! " << endl;
720                    return 0;
721            }
722            TrkTrack *image = (TrkTrack*)(*Track)[track->image];
723    
724            sorted->Delete();
725            
726            return image;
727        
728  }  }
729  //--------------------------------------  //--------------------------------------
730  //  //
# Line 408  void TrkLevel2::LoadField(TString s){ Line 742  void TrkLevel2::LoadField(TString s){
742  //  //
743  //--------------------------------------  //--------------------------------------
744  /**  /**
745     * Get tracker-plane (mechanical) z-coordinate
746     * @param plane_id plane index (1=TOP,2,3,4,5,6=BOTTOM)
747     */
748    Float_t TrkLevel2::GetZTrk(Int_t plane_id){
749            switch(plane_id){
750                    case 1: return ZTRK1;
751                    case 2: return ZTRK2;
752                    case 3: return ZTRK3;
753                    case 4: return ZTRK4;
754                    case 5: return ZTRK5;
755                    case 6: return ZTRK6;
756                    default: return 0.;
757            };
758    };
759    //--------------------------------------
760    //
761    //
762    //--------------------------------------
763    /**
764     * Trajectory default constructor.
765     * (By default is created with z-coordinates inside the tracking volume)
766      */
767    Trajectory::Trajectory(){
768        npoint = 10;
769        x = new float[npoint];
770        y = new float[npoint];
771        z = new float[npoint];
772        thx = new float[npoint];
773        thy = new float[npoint];
774        tl = new float[npoint];
775        float dz = ((ZTRK1)-(ZTRK6))/(npoint-1);
776        for(int i=0; i<npoint; i++){
777            x[i] = 0;
778            y[i] = 0;
779            z[i] = (ZTRK1) - i*dz;
780            thx[i] = 0;
781            thy[i] = 0;
782            tl[i] = 0;
783        }
784    }
785    //--------------------------------------
786    //
787    //
788    //--------------------------------------
789    /**
790   * Trajectory constructor.   * Trajectory constructor.
791     * (By default is created with z-coordinates inside the tracking volume)
792   * \param n Number of points   * \param n Number of points
793   */   */
794  Trajectory::Trajectory(int n){  Trajectory::Trajectory(int n){
795        if(n<=0){
796            cout << "NB! Trajectory must have at least 1 point >>> created with 10 points" << endl;
797            n=10;
798        }
799      npoint = n;      npoint = n;
800      x = new float[npoint];      x = new float[npoint];
801      y = new float[npoint];      y = new float[npoint];
802      z = new float[npoint];      z = new float[npoint];
803        thx = new float[npoint];
804        thy = new float[npoint];
805        tl = new float[npoint];
806        float dz = ((ZTRK1)-(ZTRK6))/(npoint-1);
807      for(int i=0; i<npoint; i++){      for(int i=0; i<npoint; i++){
808          x[i] = 0;          x[i] = 0;
809          y[i] = 0;          y[i] = 0;
810          z[i] = 0;          z[i] = (ZTRK1) - i*dz;
811            thx[i] = 0;
812            thy[i] = 0;
813            tl[i] = 0;
814      }      }
815  }  }
816  //--------------------------------------  //--------------------------------------
# Line 432  Trajectory::Trajectory(int n){ Line 823  Trajectory::Trajectory(int n){
823   * \param pz Pointer to float array, defining z coordinates   * \param pz Pointer to float array, defining z coordinates
824   */   */
825  Trajectory::Trajectory(int n, float* zin){  Trajectory::Trajectory(int n, float* zin){
826      npoint = n;      npoint = 10;
827        if(n>0)npoint = n;
828      x = new float[npoint];      x = new float[npoint];
829      y = new float[npoint];      y = new float[npoint];
830      z = new float[npoint];      z = new float[npoint];
831      for(int i=0; i<npoint; i++){      thx = new float[npoint];
832        thy = new float[npoint];
833        tl = new float[npoint];
834        int i=0;
835        do{
836          x[i] = 0;          x[i] = 0;
837          y[i] = 0;          y[i] = 0;
838          z[i] = zin[i];          z[i] = zin[i];
839      }          thx[i] = 0;
840            thy[i] = 0;
841            tl[i] = 0;
842            i++;            
843        }while(zin[i-1] > zin[i] && i < npoint);
844        npoint=i;
845        if(npoint != n)cout << "NB! Trajectory created with "<<npoint<<" points"<<endl;
846  }  }
847  //--------------------------------------  //--------------------------------------
848  //  //
# Line 452  Trajectory::Trajectory(int n, float* zin Line 854  Trajectory::Trajectory(int n, float* zin
854  void Trajectory::Dump(){  void Trajectory::Dump(){
855      cout <<endl<< "Trajectory ========== "<<endl;      cout <<endl<< "Trajectory ========== "<<endl;
856      for (int i=0; i<npoint; i++){      for (int i=0; i<npoint; i++){
857          cout << i <<" >> " << x[i] <<" "<< y[i] <<" "<< z[i] << endl;;          cout << i <<" >> " << x[i] <<" "<< y[i] <<" "<< z[i] ;
858            cout <<" -- " << thx[i] <<" "<< thy[i] ;
859            cout <<" -- " << tl[i] << endl;
860        };
861    }
862    //--------------------------------------
863    //
864    //
865    //--------------------------------------
866    /**
867     * Get trajectory length between two points
868     * @param ifirst first point (default 0)
869     * @param ilast last point (default npoint)
870     */
871    float Trajectory::GetLength(int ifirst, int ilast){
872        if( ifirst<0    ) ifirst = 0;
873        if( ilast>=npoint) ilast  = npoint-1;
874        float l=0;
875        for(int i=ifirst;i<=ilast;i++){
876            l=l+tl[i];
877      };      };
878        if(z[ilast] > ZINI)l=l-tl[ilast];
879        if(z[ifirst] < ZINI)   l=l-tl[ifirst];
880        
881        return l;
882    
883  }  }
884    
885  ClassImp(TrkLevel2);  ClassImp(TrkLevel2);

Legend:
Removed from v.1.1.1.1  
changed lines
  Added in v.1.8

  ViewVC Help
Powered by ViewVC 1.1.23