/[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.7 by pam-fi, Fri Jul 21 11:03:14 2006 UTC revision 1.8 by pam-fi, Fri Aug 4 08:18:06 2006 UTC
# Line 418  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();  //      TClonesArray *sorted = GetTracks_NFitSorted();
423      return sorted;  //      return sorted;
424            // };
         // fare di meglio...  
 /*      PhysicalTrack->Clear();  
         if(ntrk() > 0) GetTracks_NFitSorted();  
         return PhysicalTrack;*/  
 };  
425    
426  /*TClonesArray *TrkLevel2::GetTracks_Chi2Sorted(){  /*TClonesArray *TrkLevel2::GetTracks_Chi2Sorted(){
427    
# Line 457  TClonesArray *TrkLevel2::GetTracks(){ Line 452  TClonesArray *TrkLevel2::GetTracks(){
452      }      }
453      return sorted;      return sorted;
454  }*/  }*/
455  TClonesArray *TrkLevel2::GetTracks_NFitSorted(){  /*TClonesArray *TrkLevel2::GetTracks_NFitSorted(){
456    
457          TClonesArray *sorted = new TClonesArray("TrkTrack");              TClonesArray *sorted = new TClonesArray("TrkTrack");    
458      TClonesArray &t = *Track;      TClonesArray &t  = *Track;
459          TClonesArray &ts = *sorted;          TClonesArray &ts = *sorted;
460  //    TClonesArray &ts = *PhysicalTrack;  //    TClonesArray &ts = *PhysicalTrack;
461          int N=this->ntrk();          int N = ntrk();
462      vector<int> m(N); for(int i=0; i<N; i++)m[i]=1;      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;      int indo=0;
466      int indi=0;      int indi=0;
467      while(N != 0){      while(N != 0){
468          int nfit =0;                  int nfit =0;
469          float chi2ref=1000000;                  float chi2ref = numeric_limits<float>::max();
470          // first loop to search maximum num. of fit points                  // first loop to search maximum num. of fit points
471          for(int i=0; i<this->ntrk(); i++){                  for(int i=0; i < ntrk(); i++){
472              if( ((TrkTrack *)t[i])->GetNtot() >= nfit && m[i]==1){  //                      if(N==ntrk())cout << "** "<<i<< " " << ((TrkTrack *)t[i])->GetImageSeqNo()<< " " <<((TrkTrack *)t[i])->GetNtot() << " " <<((TrkTrack *)t[i])->chi2 << endl;
473                  nfit =    ((TrkTrack *)t[i])->GetNtot();                          if( ((TrkTrack *)t[i])->GetNtot() >= nfit && m[i]==1){
474  //              cout << "1** "<<i<< " " << nfit<<endl;                          nfit =    ((TrkTrack *)t[i])->GetNtot();
475              }                          }
476          }                  }
477          //second loop to search minimum chi2 among selected                  //second loop to search minimum chi2 among selected
478          for(int i=0; i<this->ntrk(); i++){                  for(int i=0; i<this->ntrk(); i++){
479              if(    ((TrkTrack *)t[i])->chi2 < chi2ref                          if(    ((TrkTrack *)t[i])->chi2 < chi2ref
480                  && ((TrkTrack *)t[i])->GetNtot()== nfit                          && ((TrkTrack *)t[i])->GetNtot()== nfit
481                  && m[i]==1){                          && m[i]==1){
482                  chi2ref = ((TrkTrack *)t[i])->chi2;                          chi2ref = ((TrkTrack *)t[i])->chi2;
483                  indi = i;                          indi = i;
484  //              cout << "2** "<<i<< " " << nfit <<" "<<chi2ref<<endl;          //              cout << "2** "<<i<< " " << nfit <<" "<<chi2ref<<endl;
485              }                          }
486          }                  }
487          if( ((TrkTrack *)t[indi])->HasImage() ){                  if( ((TrkTrack *)t[indi])->HasImage() ){
488              m[((TrkTrack *)t[indi])->image] = 0;                          m[((TrkTrack *)t[indi])->image] = 0;
489              N--;                          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  //          Int_t nfiti=((TrkTrack *)t[((TrkTrack *)t[indi])->image  ])->GetNtot();  //      cout << "GetTracks_NFitSorted(it): new TRefArray()"<< endl;
510  //          Float_t chi2i=((TrkTrack *)t[((TrkTrack *)t[indi])->image  ])->chi2;  //      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  //          cout << "i** "<< ((TrkTrack *)t[indi])->image << " " << nfiti <<" "<<chi2i<<endl;                  m[indi] = 0;
556    //              cout << "SORTED "<< indo << " "<< indi << " "<< N << endl;
557                    N--;    
558                    indo++;
559          }          }
560          new(ts[indo]) TrkTrack(*(TrkTrack*)t[indi]);          m.clear();
561          m[indi] = 0;  //      cout << "GetTracks_NFitSorted(it): Done"<< endl;
562          N--;      
563          indo++;          return sorted;
     }  
     return sorted;  
564  //    return PhysicalTrack;  //    return PhysicalTrack;
565  }  }
566  //--------------------------------------  //--------------------------------------
# Line 571  TrkSinglet *TrkLevel2::GetSingletY(int i Line 629  TrkSinglet *TrkLevel2::GetSingletY(int i
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          GetTracks()->Delete();////TEMPORANEO          TClonesArray &ts = *sorted;
641      return track;          
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().   * Give the number of "physical" tracks, sorted by the method GetTracks().
662   */   */
663  Int_t TrkLevel2::GetNTracks(){  Int_t TrkLevel2::GetNTracks(){
664          Int_t ntot=0;                  
665          ntot = GetTracks()->GetEntries();          Float_t ntot=0;
666          GetTracks()->Delete();////TEMPORANEO          TClonesArray &t = *Track;
667          return ntot;          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  //  //
# Line 599  Int_t TrkLevel2::GetNTracks(){ Line 679  Int_t TrkLevel2::GetNTracks(){
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          GetTracks()->Delete(); ////TEMPORANEO  
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  //  //

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

  ViewVC Help
Powered by ViewVC 1.1.23