/[PAMELA software]/PamelaLevel2/src/PamLevel2.cpp
ViewVC logotype

Diff of /PamelaLevel2/src/PamLevel2.cpp

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

revision 1.21 by pam-fi, Mon Feb 19 11:21:36 2007 UTC revision 1.33 by pam-fi, Wed Mar 21 09:07:32 2007 UTC
# Line 103  PamLevel2::PamLevel2(){ Line 103  PamLevel2::PamLevel2(){
103            
104      h0_obj    = 0;      h0_obj    = 0;
105      trk0_obj  = 0;      trk0_obj  = 0;
106        calo0_obj  = 0;
107    
108      trk2_obj  = 0;      trk2_obj  = 0;
109      trk1_obj  = 0;      trk1_obj  = 0;
# Line 118  PamLevel2::PamLevel2(){ Line 119  PamLevel2::PamLevel2(){
119    
120      run_obj   = 0;//new GL_RUN();      run_obj   = 0;//new GL_RUN();
121      soft_obj   = 0;// Emiliano      soft_obj   = 0;// Emiliano
122      irun = -1;      irun = -1LL;
123      runfirstentry = 0ULL;      runfirstentry = 0LL;
124      runlastentry = 0ULL;      runlastentry = 0LL;
125    
126      l0_file = NULL;      l0_file = NULL;
127      l0_tree = NULL;      l0_tree = NULL;
128      iroot   = -1;      iroot   = -1;
129      dbc     = 0;      dbc     = 0;
130    
131        prevshift = 0;
132            
     irun = -1;  
133      run_tree = NULL;      run_tree = NULL;
134      run_tree_clone = NULL;      run_tree_clone = NULL;
135      sel_tree = NULL;      sel_tree = NULL;
136      sel_tree_clone = NULL;      sel_tree_clone = NULL;
137            
138      irunentry = -1;      irunentry = -1LL;
139      pam_tree = NULL;      pam_tree = NULL;
140      for(Int_t i=0; i<NCLONES; i++ )pam_tree_clone[i]=NULL;      for(Int_t i=0; i<NCLONES; i++ )pam_tree_clone[i]=NULL;
141    
# Line 188  void PamLevel2::Delete(){ Line 190  void PamLevel2::Delete(){
190  //    cout << "void PamLevel2::Clear()"<<endl;  //    cout << "void PamLevel2::Clear()"<<endl;
191      if(h0_obj)   delete h0_obj;      if(h0_obj)   delete h0_obj;
192      if(trk0_obj) delete trk0_obj;            if(trk0_obj) delete trk0_obj;      
193        if(calo0_obj) delete calo0_obj;    
194      if(trk1_obj) delete trk1_obj;            if(trk1_obj) delete trk1_obj;      
195      if(trk2_obj) delete trk2_obj;      if(trk2_obj) delete trk2_obj;
196      if(trkh_obj) delete trkh_obj;      if(trkh_obj) delete trkh_obj;
# Line 241  void PamLevel2::Clear(){ Line 244  void PamLevel2::Clear(){
244  //    if(soft_obj) soft_obj->Clear();  //    if(soft_obj) soft_obj->Clear();
245    
246      if(h0_obj)   h0_obj->Clear();            if(h0_obj)   h0_obj->Clear();      
247      if(trk0_obj) trk0_obj->Clear();      //    if(trk0_obj) trk0_obj->Clear();  
248        if(calo0_obj) calo0_obj->Clear();  
249      if(trk1_obj) trk1_obj->Clear();          if(trk1_obj) trk1_obj->Clear();    
250      if(trk2_obj) trk2_obj->Clear();      if(trk2_obj) trk2_obj->Clear();
251      if(trkh_obj) trkh_obj->Clear();      if(trkh_obj) trkh_obj->Clear();
# Line 554  void PamLevel2::SortTracks(TString how){ Line 558  void PamLevel2::SortTracks(TString how){
558                  use_CAL            &&                  use_CAL            &&
559                  calo2_obj->npcfit[1] > 15     &&   //no. of fit planes on Y view                  calo2_obj->npcfit[1] > 15     &&   //no. of fit planes on Y view
560                  calo2_obj->varcfit[1] < 1000. &&  //fit variance on Y view                  calo2_obj->varcfit[1] < 1000. &&  //fit variance on Y view
561                    cp && ci &&
562                  true){                  true){
563    
564                                    
# Line 575  void PamLevel2::SortTracks(TString how){ Line 580  void PamLevel2::SortTracks(TString how){
580                  cout << "void PamLevel2::SortTracks(TString how): how= "<<how<<" but ToFLevel2 not loaded !!!";                  cout << "void PamLevel2::SortTracks(TString how): how= "<<how<<" but ToFLevel2 not loaded !!!";
581                  return;                  return;
582              };              };
583              if( use_TOF ){              if( use_TOF && op && oi ){
584                                    
585                  Int_t nphit_p =0;                  Int_t nphit_p =0;
586                  Int_t nphit_i =0;                  Int_t nphit_i =0;
# Line 968  TTree *PamLevel2::GetPamTree(TFile *f, T Line 973  TTree *PamLevel2::GetPamTree(TFile *f, T
973      };      };
974            
975      cout<<endl<<" Number of entries: "<<Trout->GetEntries()<<endl<<endl;      cout<<endl<<" Number of entries: "<<Trout->GetEntries()<<endl<<endl;
976    
977        pam_tree = (TChain*)Trout;
978            
979      return Trout;      return Trout;
980            
# Line 1006  TList*  PamLevel2::GetListOfLevel2Files( Line 1013  TList*  PamLevel2::GetListOfLevel2Files(
1013  //          return 0;  //          return 0;
1014  //      }        //      }      
1015  //      flisttxt = fullpath;  //      flisttxt = fullpath;
1016          if ( !flisttxt.EndsWith(".root") ){
1017    
1018          flisttxt = gSystem->ConcatFileName(gSystem->DirName(flisttxt),gSystem->BaseName(flisttxt));          flisttxt = gSystem->ConcatFileName(gSystem->DirName(flisttxt),gSystem->BaseName(flisttxt));
1019    
# Line 1047  TList*  PamLevel2::GetListOfLevel2Files( Line 1055  TList*  PamLevel2::GetListOfLevel2Files(
1055  //          };  //          };
1056          };          };
1057          in.close();          in.close();
1058                  } else {
1059              char *fullpath = gSystem->ConcatFileName(gSystem->DirName(flisttxt),gSystem->BaseName(flisttxt));
1060              contents->Add(new TSystemFile(fullpath,gSystem->DirName(fullpath)));// add file to the list
1061              delete fullpath;
1062          };        
1063      }else{      }else{
1064                    
1065          cout << "No input file list given."<<endl;          cout << "No input file list given."<<endl;
# Line 1497  TTree *PamLevel2::GetRunTree(TFile *f){ Line 1509  TTree *PamLevel2::GetRunTree(TFile *f){
1509          R->SetBranchAddress("SoftInfo", GetPointerTo("SoftInfo")); // Emiliano          R->SetBranchAddress("SoftInfo", GetPointerTo("SoftInfo")); // Emiliano
1510          cout << "Software    : set branch address SoftInfo"<<endl; // Emiliano          cout << "Software    : set branch address SoftInfo"<<endl; // Emiliano
1511      }      }
1512    
1513        run_tree = (TChain*)R;
1514    
1515      return R;      return R;
1516            
1517  }  }
# Line 1505  TTree *PamLevel2::GetRunTree(TFile *f){ Line 1520  TTree *PamLevel2::GetRunTree(TFile *f){
1520   * @param run Pointer to the chain/tree which contains run infos   * @param run Pointer to the chain/tree which contains run infos
1521   * @return true if a new run has been read, false if it is still the same run   * @return true if a new run has been read, false if it is still the same run
1522   */   */
1523  Bool_t PamLevel2::UpdateRunInfo(TChain *run, ULong64_t iev){  Bool_t PamLevel2::UpdateRunInfo(TChain *run, Long64_t iev){
1524    //    //
1525    // check if we have already called once GetEntry, if not call it    // check if we have already called once GetEntry, if not call it
1526    //    //
1527    if ( run->GetEntries() <= 0 ) return(false);    if ( run->GetEntries() <= 0 ) return(false);
1528    //    //
1529        
1530    Int_t oldrun = irun;  //  Int_t oldrun = irun;
1531      Long64_t oldrun = irun;
1532    // --------------------------------------    // --------------------------------------
1533    // if it is a full file (not preselected)    // if it is a full file (not preselected)
1534    // --------------------------------------    // --------------------------------------
1535    if(SELLI==0){    if(SELLI==0){
1536    
1537          if( !GetOrbitalInfo() ){
1538              cout << "Bool_t PamLevel2::UpdateRunInfo(TChain *run, ULong64_t iev) -- ERROR -- missing OrbitalInfo "<<endl;
1539              return(false);
1540          }
1541    
1542        if ( irun < 0 ){        if ( irun < 0 ){
1543            irun = 0;            irun = 0;
1544            run->GetEntry(0);            run->GetEntry(irun);
1545            runfirstentry = 0ULL;            runfirstentry = 0LL;
1546            runlastentry += (ULong64_t)(this->GetRunInfo()->NEVENTS) - 1ULL;            runlastentry += (Long64_t)(this->GetRunInfo()->NEVENTS);
1547        };            if ( (Long64_t)(this->GetRunInfo()->NEVENTS) > 0LL ) runlastentry -= 1LL;
1548        while ( iev > (runfirstentry+(ULong64_t)(this->GetRunInfo()->NEVENTS-1)) && irun < run->GetEntries() ){  //        cout << " ))))) UPDATE RUN INFO (((((  @iev "<<iev<<" run "<<GetRunInfo()->ID<<" irun "<<irun<<endl;
1549            //    printf(" iev %llu %u %llu \n",iev,this->GetRunInfo()->NEVENTS,(ULong64_t)(runfirstentry+(ULong64_t)(this->GetRunInfo()->NEVENTS)));  //        cout << "runfirstentry "<<runfirstentry<<endl;
1550    //        return(true);
1551          };      
1552    
1553          // modificato il controllo sull'aggiornamento del run, per evitare problemi
1554          // dovuti agli eventi annidati (NB! NEVENTS conta anche questi!!)
1555          //
1556          bool fromfirst = true;
1557          //
1558          while ( !(GetOrbitalInfo()->absTime >= GetRunInfo()->RUNHEADER_TIME && GetOrbitalInfo()->absTime <= GetRunInfo()->RUNTRAILER_TIME) && irun < run->GetEntries()-1 ){
1559    //      while ( iev > (runfirstentry+(ULong64_t)(this->GetRunInfo()->NEVENTS-1)) && irun < run->GetEntries() ){
1560            irun++;            irun++;
1561            run->GetEntry(irun);            run->GetEntry(irun);
1562            runfirstentry = runlastentry+1ULL;            runfirstentry = runlastentry;
1563            runlastentry += (ULong64_t)(this->GetRunInfo()->NEVENTS);            if ( (Long64_t)(this->GetRunInfo()->NEVENTS) > 0LL ) runfirstentry += 1LL;
1564              runlastentry += (Long64_t)(this->GetRunInfo()->NEVENTS);
1565    //        cout << " ))))) UPDATE RUN INFO (((((  @iev "<<iev<<" run "<<GetRunInfo()->ID<<" irun "<<irun<<endl;
1566    //        cout << "runfirstentry "<<runfirstentry<<endl;
1567              //      printf(" iev %llu %u %llu \n",iev,this->GetRunInfo()->NEVENTS,(ULong64_t)(runfirstentry+(ULong64_t)(this->GetRunInfo()->NEVENTS)));
1568              //      printf(" abstime %u trailertime %u \n",GetOrbitalInfo()->absTime,GetRunInfo()->RUNTRAILER_TIME);
1569              //      printf(" IDRUN %u \n",GetRunInfo()->ID);
1570              //
1571    //        prevshift = 0;
1572              //
1573              if ( irun == run->GetEntries()-1 && fromfirst && !(GetOrbitalInfo()->absTime >= GetRunInfo()->RUNHEADER_TIME && GetOrbitalInfo()->absTime <= GetRunInfo()->RUNTRAILER_TIME)){
1574                  printf(" resetting irun  (it should NOT happen!!!)\n");
1575                  fromfirst = false;
1576                  irun = 0;
1577                  run->GetEntry(irun);
1578                  runfirstentry = 0ULL;
1579                  runlastentry += (Long64_t)(this->GetRunInfo()->NEVENTS);
1580                  if ( (Long64_t)(this->GetRunInfo()->NEVENTS) > 0LL ) runlastentry -= 1LL;
1581              };
1582              //
1583        };        };
1584        //        //
1585          if ( !fromfirst &&
1586               !(GetOrbitalInfo()->absTime >= GetRunInfo()->RUNHEADER_TIME &&
1587                 GetOrbitalInfo()->absTime <= GetRunInfo()->RUNTRAILER_TIME)
1588              ) {
1589              printf(" Something very wrong here: cannot find RUN containing absolute time %u \n",GetOrbitalInfo()->absTime);
1590              return false;
1591          }
1592          //
1593        if ( irun == oldrun || irun >= run->GetEntries() ) return(false);        if ( irun == oldrun || irun >= run->GetEntries() ) return(false);
1594        //        //
1595        //  printf(" iev %llu irun %i nevents %u 1st %llu last %llu \n",iev,irun,this->GetRunInfo()->NEVENTS,(ULong64_t)runfirstentry,(ULong64_t)runlastentry);        //  printf(" iev %llu irun %i nevents %u 1st %llu last %llu \n",iev,irun,this->GetRunInfo()->NEVENTS,(ULong64_t)runfirstentry,(ULong64_t)runlastentry);
1596        //        //
1597          prevshift = 0;
1598          cout << " ))))) UPDATE RUN INFO (((((  @iev "<<iev<<" run "<<GetRunInfo()->ID<<" irun "<<irun<<endl;
1599          cout << "runfirstentry "<<runfirstentry<<endl;
1600        return(true);            return(true);    
1601    };    };
1602    // ----------------------------------------------------    // ----------------------------------------------------
# Line 1545  Bool_t PamLevel2::UpdateRunInfo(TChain * Line 1607  Bool_t PamLevel2::UpdateRunInfo(TChain *
1607        sel_tree->GetEntry(iev);        sel_tree->GetEntry(iev);
1608        if(irun != oldrun){        if(irun != oldrun){
1609            run->GetEntry(irun);            run->GetEntry(irun);
1610              cout << " ))))) UPDATE RUN INFO (((((  @iev "<<iev<<" run "<<GetRunInfo()->ID<<" irun "<<irun<<endl;
1611              prevshift = 0;
1612            return true;            return true;
1613        }        }
1614        return false;        return false;
# Line 1553  Bool_t PamLevel2::UpdateRunInfo(TChain * Line 1617  Bool_t PamLevel2::UpdateRunInfo(TChain *
1617    return false;    return false;
1618    //    //
1619  };  };
1620    
1621    // Bool_t PamLevel2::UpdateRunInfo(ULong64_t iev){
1622    //   //
1623    //   // check if we have already called once GetEntry, if not call it
1624    //   //
1625    //     if(!run_tree){
1626    //      cout << " Bool_t PamLevel2::UpdateRunInfo(ULong64_t iev) -- ERROR -- run tree not loaded"<<endl;
1627    //      return false;
1628    //     }
1629    //     if ( run_tree->GetEntries() <= 0 ) {
1630    //      cout << " Bool_t PamLevel2::UpdateRunInfo(ULong64_t iev) -- ERROR -- run tree is empty"<<endl;
1631    //      return(false);
1632    //     }
1633    //   //
1634      
1635    //   Int_t oldrun = irun;
1636    //   // --------------------------------------
1637    //   // if it is a full file (not preselected)
1638    //   // --------------------------------------
1639    //   if(SELLI==0){
1640    
1641    //       if( !GetOrbitalInfo() ){
1642    //        cout << "Bool_t PamLevel2::UpdateRunInfo(TChain *run, ULong64_t iev) -- ERROR -- missing OrbitalInfo "<<endl;
1643    //        return(false);
1644    //       }
1645    
1646    //       if ( irun < 0 ){
1647    //        irun = 0;
1648    //        run_tree->GetEntry(irun);
1649    //        runfirstentry = iev;
1650    //        if( iev != 0){
1651    //            cout << "Bool_t PamLevel2::UpdateRunInfo(TChain *run, ULong64_t iev) -- WARNING -- "<<endl;
1652    //        }
1653    //       };      
1654    
1655    //       bool fromfirst = true;
1656    
1657    //       while ( !(GetOrbitalInfo()->absTime >= GetRunInfo()->RUNHEADER_TIME && GetOrbitalInfo()->absTime <= GetRunInfo()->RUNTRAILER_TIME) && irun < run->GetEntries() ){
1658    //        irun++;
1659    //        if( irun == run->GetEntries() ){
1660    //            if(!fromfirst){
1661    //                cout << "Bool_t PamLevel2::UpdateRunInfo(TChain *run, ULong64_t iev) -- ERROR -- event entry #"<<iev<<" does not belong to any run (should not happen)" <<endl;
1662    //                return false;
1663    //            }
1664    //            cout << "Bool_t PamLevel2::UpdateRunInfo(TChain *run, ULong64_t iev) -- ERROR -- reached end of run tree. searchin again from beginning (should not happen)" <<endl;
1665    //            fromfirst = false;
1666    //            irun =0;
1667    //        }
1668    //        run_tree->GetEntry(irun);
1669    //        runfirstentry = iev;
1670    //       };
1671    //       //
1672    //       if ( irun == oldrun ) return(false);
1673    //       //
1674    //       cout << " ))))) UPDATE RUN INFO (((((  @iev "<<iev<<" run "<<GetRunInfo()->ID<<" irun "<<irun<<endl;
1675    //       cout << "runfirstentry "<<runfirstentry<<endl;
1676    //       prevshift = 0;
1677    //       return(true);    
1678    //   };
1679    //   // ----------------------------------------------------
1680    //   // if it is a preselected file (there is SelectionList)
1681    //   // NBNB - the event tree MUST be read first
1682    //   // ----------------------------------------------------
1683    //   if(SELLI==1){      
1684    //       sel_tree->GetEntry(iev);
1685    //       if(irun != oldrun){
1686    //        run->GetEntry(irun);
1687    //        cout << " ))))) UPDATE RUN INFO (((((  @iev "<<iev<<" run "<<GetRunInfo()->ID<<" irun "<<irun<<endl;
1688    //        prevshift = 0;
1689    //        return true;
1690    //       }
1691    //       return false;
1692    //   }
1693    
1694    //   return false;
1695    //   //
1696    // };
1697  /**  /**
1698   * Update the runinfo informations (to be used to have Run infos event by event basis)   * Update the runinfo informations (to be used to have Run infos event by event basis)
1699   * @param run Pointer to the chain/tree which contains run infos   * @param run Pointer to the chain/tree which contains run infos
1700   * @return true if a new run has been read, false if it is still the same run   * @return true if a new run has been read, false if it is still the same run
1701   */   */
1702  Bool_t PamLevel2::UpdateRunInfo(TTree *run, ULong64_t iev){  Bool_t PamLevel2::UpdateRunInfo(TTree *run, Long64_t iev){
1703    return(UpdateRunInfo((TChain*)run,iev));    return(UpdateRunInfo((TChain*)run,iev));
1704  };  };
1705    
# Line 2208  void PamLevel2::CreateCloneTrees(TFile * Line 2349  void PamLevel2::CreateCloneTrees(TFile *
2349              pam_tree_clone[i]->Branch("TrkLevel1","TrkLevel1", GetPointerTo("TrkLevel1"));              pam_tree_clone[i]->Branch("TrkLevel1","TrkLevel1", GetPointerTo("TrkLevel1"));
2350              pam_tree_clone[i]->BranchRef();              pam_tree_clone[i]->BranchRef();
2351              cout << "Tracker      : branch TrkLevel1"<<endl;              cout << "Tracker      : branch TrkLevel1"<<endl;
2352                cout << "CreateCloneTrees " << GetTrkLevel1()<<endl;
2353          };          };
2354          if(TRK2) {          if(TRK2) {
2355              pam_tree_clone[i]->Branch("TrkLevel2", "TrkLevel2",GetPointerTo("TrkLevel2"));              pam_tree_clone[i]->Branch("TrkLevel2", "TrkLevel2",GetPointerTo("TrkLevel2"));
# Line 2289  void PamLevel2::CreateCloneTrees(TFile * Line 2431  void PamLevel2::CreateCloneTrees(TFile *
2431  void PamLevel2::FillCloneTrees(){  void PamLevel2::FillCloneTrees(){
2432            
2433  //    cout << "PamLevel2::FillCloneTrees()" << irunentry << endl;  //    cout << "PamLevel2::FillCloneTrees()" << irunentry << endl;
2434    
2435      for(Int_t i=0; i<NCLONES; i++){      for(Int_t i=0; i<NCLONES; i++){
2436          if(pam_tree_clone[i])pam_tree_clone[i]->Fill();          if(pam_tree_clone[i])pam_tree_clone[i]->Fill();
2437      }      }
2438      if(sel_tree_clone)sel_tree_clone->Fill();          if(sel_tree_clone)sel_tree_clone->Fill();    
 //    if( irunentry == 0 || run_tree_clone->GetEntries()==0 )run_tree_clone->Fill();  
 //    Int_t nstoredruns = run_tree_clone->GetEntries();  
 //     if( irun ==  nstoredruns )run_tree_clone->Fill();  
 //     else if( irun > nstoredruns || irun < nstoredruns-1){  
 //      cout << " PamLevel2::FillCloneTrees() -- ERROR -- current run "<< irun <<" stored runs "<< nstoredruns <<endl;  
 //     }  
2439    
2440  }  }
2441    
# Line 2340  void PamLevel2::WriteCloneTrees(){ Line 2477  void PamLevel2::WriteCloneTrees(){
2477  }  }
2478    
2479  /**  /**
2480   * Method to get both level2-trees entry and corresponding run entry.   * Method to get level2-trees entry, the corresponding run entry and (if required) the level0 entry.
2481   */   */
2482    //Int_t PamLevel2::GetEntry(Int_t iee){
2483    Int_t PamLevel2::GetEntry(Long64_t iee){
 Int_t PamLevel2::GetEntry(Int_t iee){  
2484            
2485      if(!pam_tree){      if(!pam_tree){
2486          cout << " Int_t PamLevel2::GetEntry(Int_t) -- ERROR -- level2 trees not loeaded"<<endl;          cout << " Int_t PamLevel2::GetEntry(Int_t) -- ERROR -- level2 trees not loaded"<<endl;
         return 0;  
     }  
     if(!run_tree ){  
         cout << " Int_t PamLevel2::GetEntry(Int_t) -- ERROR -- run tree not loeaded"<<endl;  
2487          return 0;          return 0;
2488      }      }
2489    
2490      Int_t ii=0;  
2491        //
2492        // This is a sort of bug: if you don't have the run tree you don't want to exit here you want to have loaded the event anyway...
2493        //
2494        //    if(!run_tree ){
2495        //  cout << " Int_t PamLevel2::GetEntry(Int_t) -- ERROR -- run tree not loeaded"<<endl;
2496        //  return 0;
2497        //    }
2498    
2499        Long64_t ii=0;
2500      //-------------------------------      //-------------------------------
2501      ii = iee;      ii = iee;
2502      if( !pam_tree->GetEntry(ii) ) return 0;      if( !pam_tree->GetEntry(ii) ){      
2503            cout << " Int_t PamLevel2::GetEntry(Int_t) -- ERROR -- error reading pam tree"<<endl;
2504            return 0;
2505        }
2506        //
2507        // ... that's way I put it here. Notice that nothing change in the code (is backward compatible) since in any case you return with 0.
2508        // in theory one would like to return 1 if run is not loaded but now I don't have the will to add that 2 lines of code and it is not
2509        // a problem if you don't check the return code of getentry.
2510        //
2511        if(!run_tree ){
2512            if ( TRK0 || CAL0 || TOF0 || RUN ) { //forse cosi` va bene per tornare 1?
2513                    cout << " Int_t PamLevel2::GetEntry(Int_t) -- ERROR -- run tree not loaded"<<endl;
2514                    return 0;
2515            }  else {
2516                    return 1; //cosi` se non c'e` run esce qua...
2517            }
2518        }
2519    
2520      //-------------------------------      //-------------------------------
2521      ii = iee;      ii = iee;
2522      Bool_t UPDATED = UpdateRunInfo(run_tree,ii);  //    Bool_t UPDATED = UpdateRunInfo(run_tree,ii);
2523        Bool_t UPDATED = UpdateRunInfo(ii);
2524      if(SELLI==0)irunentry = iee-runfirstentry;      if(SELLI==0)irunentry = iee-runfirstentry;
2525      if(UPDATED && run_tree_clone)run_tree_clone->Fill();      if(UPDATED && run_tree_clone)run_tree_clone->Fill();
2526    
# Line 2394  TTree* PamLevel2::GetYodaTree( ){ Line 2553  TTree* PamLevel2::GetYodaTree( ){
2553          return NULL;          return NULL;
2554      }          }    
2555      Int_t irootnew = run_obj->ID_ROOT_L0;      Int_t irootnew = run_obj->ID_ROOT_L0;
2556  //    cout << "iroot    "<<iroot<<endl;  //     cout << "iroot    "<<iroot<<endl;
2557  //    cout << "irootnew "<<irootnew<<endl;  //     cout << "irootnew "<<irootnew<<endl;
2558    
2559      //===================================      //===================================
2560      // load the level0 file      // load the level0 file
# Line 2422  TTree* PamLevel2::GetYodaTree( ){ Line 2581  TTree* PamLevel2::GetYodaTree( ){
2581  //          cout<<"DB already connected"<<endl;  //          cout<<"DB already connected"<<endl;
2582          }          }
2583          GL_ROOT glroot = GL_ROOT();          GL_ROOT glroot = GL_ROOT();
2584          if( glroot.Query_GL_ROOT(iroot,dbc) )return NULL;          if( glroot.Query_GL_ROOT(iroot,dbc) ){
2585                cout << "TTree* PamLevel2::GetYodaTree( ) -- ERROR -- level0 file iroot = "<<iroot<< " does not exists"<<endl;
2586                return NULL;
2587            };
2588          TString filename = glroot.PATH + glroot.NAME;          TString filename = glroot.PATH + glroot.NAME;
2589          if(l0_file){          if(l0_file){
2590              l0_file->Close();              l0_file->Close();
# Line 2439  TTree* PamLevel2::GetYodaTree( ){ Line 2601  TTree* PamLevel2::GetYodaTree( ){
2601          l0_tree = (TTree*)l0_file->Get("Physics");          l0_tree = (TTree*)l0_file->Get("Physics");
2602          if(!h0_obj)h0_obj = new EventHeader();          if(!h0_obj)h0_obj = new EventHeader();
2603          l0_tree->SetBranchAddress("Header" ,&h0_obj);          l0_tree->SetBranchAddress("Header" ,&h0_obj);
2604            prevshift = 0;
2605          //---------------------------------------------------          //---------------------------------------------------
2606          // TRACKER:          // TRACKER:
2607          if(TRK0){          if(TRK0){
# Line 2447  TTree* PamLevel2::GetYodaTree( ){ Line 2610  TTree* PamLevel2::GetYodaTree( ){
2610                  trk0_obj->Set();                  trk0_obj->Set();
2611              };              };
2612              l0_tree->SetBranchAddress("Tracker" ,trk0_obj->GetPointerToTrackerEvent());              l0_tree->SetBranchAddress("Tracker" ,trk0_obj->GetPointerToTrackerEvent());
             TrkParams::SetCalib(run_obj,dbc);  
2613          }          }
2614          //---------------------------------------------------          //---------------------------------------------------
2615          // CALORIMETER:          // CALORIMETER:
2616          if(CAL0){          if(CAL0){
2617              cout << "PamLevel2::GetYodaTree() --- level0 calorimeter not implemented "<<endl;              if(!calo0_obj){
2618                    calo0_obj = new CaloLevel0();
2619                    calo0_obj->Set();
2620                };
2621                l0_tree->SetBranchAddress("Calorimeter" ,calo0_obj->GetPointerToCalorimeterEvent());
2622                //      cout << "PamLevel2::GetYodaTree() --- level0 calorimeter not implemented "<<endl;
2623          }          }
2624          //---------------------------------------------------          //---------------------------------------------------
2625          // TOF:          // TOF:
# Line 2462  TTree* PamLevel2::GetYodaTree( ){ Line 2629  TTree* PamLevel2::GetYodaTree( ){
2629    
2630      };      };
2631    
2632        if(!dbc || (dbc && !dbc->IsConnected())){
2633            cout << " TTree* PamLevel2::GetYodaTree( ) -- no DB connected... hai fatto qualche cazzata "<<endl;
2634        }
2635    
2636        if ( TRK0 ){
2637            TrkParams::Load(6);
2638            if( !TrkParams::IsLoaded(6) ){
2639                cout << " TTree* PamLevel2::GetYodaTree( ) -- WARNING -- VK-mask not loaded"<<endl;
2640            };
2641            TrkParams::SetCalib(run_obj,dbc);
2642            TrkParams::LoadCalib( );
2643            if( !TrkParams::CalibIsLoaded() ){
2644                cout << " TTree* PamLevel2::GetYodaTree( ) -- WARNING -- Calibration not loaded"<<endl;
2645            };
2646        }
2647    
2648    //    cout << l0_tree << endl;
2649        
2650      return l0_tree;      return l0_tree;
2651    
2652  }  }
# Line 2474  Int_t PamLevel2::GetYodaEntry(){ Line 2659  Int_t PamLevel2::GetYodaEntry(){
2659  //    cout << "Int_t PamLevel2::GetYodaEntry()"<<endl;  //    cout << "Int_t PamLevel2::GetYodaEntry()"<<endl;
2660      if(!GetYodaTree())return 0;      if(!GetYodaTree())return 0;
2661            
2662        // patch
2663        if( irunentry < 0){
2664            cout << "Int_t PamLevel2::GetYodaEntry() -- ATTENZIONE -- irunentry negativo?!?! "<<(Int_t)irunentry<<endl;
2665            irunentry=0LL;
2666        }
2667      //  ---------------------------------      //  ---------------------------------
2668      //  if file is NOT a preselected file      //  if file is NOT a preselected file
2669      //  ---------------------------------      //  ---------------------------------
2670      Int_t quellagiusta = irunentry + run_obj->EV_FROM;      Long64_t quellagiusta = irunentry + (Long64_t)(run_obj->EV_FROM);
2671      //  ------------------------------------------      
2672      //  otherwise read the "preselected-list" tree  
2673      //  ------------------------------------------  //     cout << " irun "<< irun << " irunentry "<< irunentry<<" run_obj->EV_FROM "<<run_obj->EV_FROM <<" quella giusta "<<quellagiusta << endl;
2674    //     cout << " iroot "<<iroot<<" run_obj->ID_ROOT_L0 "<<run_obj->ID_ROOT_L0<<endl;
2675    //     cout << " time "<< GetOrbitalInfo()->absTime << endl;
2676    //     cout << " trk_calib_used "<<run_obj->TRK_CALIB_USED<< endl;
2677        
2678        if( !GetOrbitalInfo() ){
2679            cout << "Int_t PamLevel2::GetYodaEntry() -- ERROR -- missing OrbitalInfo "<<endl;
2680            return 0;
2681        }
2682    
2683        // ---------------------------------------------------------------------
2684        // ATTENTION!!!
2685        // If data are not pre-processed with cleaner, the level0 tree may contain
2686        // spurious nested physics packets.
2687        // The GL_RUN variables EV_FROM, EV_TO and NEVENTS counts also these entries
2688        // while level2 tree DOES NOT!!
2689        // This means that "quellagiusta" in these cases is not correct.
2690        // In order to retrieve the correct level0 event, I implemented a check
2691        // of the OBT and pkt-number. In case of mismatch, the level0 entry number
2692        // is shift forward until when the packets match.
2693        // ---------------------------------------------------------------------
2694        Int_t answer = 0;
2695        Int_t shift =0;
2696        //    printf(" siamo qui %i %i \n",shift,prevshift);
2697        do{
2698            if(shift>0){    
2699                cout << " level0 <--> level2 mismatch ( irun "<<irun<<" irunentry "<<irunentry<<" shift "<<shift<<" prevshift "<<prevshift<<" )"<<endl;
2700            }
2701            answer = l0_tree->GetEntry(quellagiusta+(Long64_t)shift+(Long64_t)prevshift);
2702            shift++;
2703            if( !GetEventHeader() ){
2704                cout << "Int_t PamLevel2::GetYodaEntry() -- ERROR -- missing EventHeader "<<endl;
2705                return 0;
2706            }
2707            cout << "PKTNUM "<<shift<<" ==  L2 --- "<< GetOrbitalInfo()->pkt_num << " --- L0 --- "<< GetEventHeader()->GetPscuHeader()->GetCounter()<<endl;
2708    //      cout << " L2 --- "<< GetOrbitalInfo()->OBT << " --- L0 --- "<< GetEventHeader()->GetPscuHeader()->GetOrbitalTime()<<endl;
2709    //      if( (quellagiusta+shift) == l0_tree->GetEntries()+1 )cout << ">>> end of level0 tree <<<"<<endl;
2710    //      cout << " GetOrbitalInfo()->OBT "<< GetOrbitalInfo()->OBT << endl;
2711    //      cout << " GetEventHeader()->GetPscuHeader()->GetOrbitalTime() "<< GetEventHeader()->GetPscuHeader()->GetOrbitalTime() << endl;
2712    //      cout << " GetOrbitalInfo()->pkt_num "<< GetOrbitalInfo()->pkt_num << endl;
2713    //      cout << " GetEventHeader()->GetPscuHeader()->GetCounter() "<< GetEventHeader()->GetPscuHeader()->GetCounter() << endl;
2714    //      printf(" IDRUN %u \n",GetRunInfo()->ID);
2715    //
2716            if ( prevshift != 0 && (quellagiusta+(Long64_t)shift) == GetYodaTree()->GetEntries() ){
2717              prevshift = 0;
2718              shift = -1;
2719            };
2720    
2721        }while( ( GetOrbitalInfo()->OBT != (UInt_t)(GetEventHeader()->GetPscuHeader()->GetOrbitalTime()) || GetOrbitalInfo()->pkt_num != (UInt_t)(GetEventHeader()->GetPscuHeader()->GetCounter())) && (quellagiusta+(Long64_t)shift) < GetYodaTree()->GetEntries() );
2722    
2723        if ( (quellagiusta+(Long64_t)shift) == GetYodaTree()->GetEntries() ) cout << " Big trouble here, no such event in Level0 data! " <<endl;
2724    
2725  //    cout << "LA ENTRY GIUSTA E`: "<<quellagiusta<<" (spero...)"<<endl;  //    cout << "LA ENTRY GIUSTA E`: "<<quellagiusta<<" (spero...)"<<endl;
2726      return GetYodaTree()->GetEntry(quellagiusta);  //    return GetYodaTree()->GetEntry(quellagiusta);
2727        if ( shift > 1 ) prevshift += (shift-1);
2728            
2729      return 1;      return answer;
2730            
2731  }  }
2732    
2733    

Legend:
Removed from v.1.21  
changed lines
  Added in v.1.33

  ViewVC Help
Powered by ViewVC 1.1.23