/[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.3 by pam-fi, Mon Aug 7 08:24:49 2006 UTC revision 1.5 by pam-fi, Mon Oct 9 08:57:42 2006 UTC
# Line 36  PamTrack::PamTrack(TrkTrack* t, CaloTrkV Line 36  PamTrack::PamTrack(TrkTrack* t, CaloTrkV
36   */   */
37  PamLevel2::PamLevel2(){  PamLevel2::PamLevel2(){
38                    
39      trk_obj  = this->TrkLevel2::GetTrkLevel2();      trk_l1_obj  = this->TrkLevel1::GetTrkLevel1();      
40      calo_obj = this->CaloLevel2::GetCaloLevel2();          trk_obj     = this->TrkLevel2::GetTrkLevel2();
41      tof_obj  = this->ToFLevel2::GetToFLevel2();          calo_obj    = this->CaloLevel2::GetCaloLevel2();
42      trig_obj = this->TrigLevel2::GetTrigLevel2();      tof_obj     = this->ToFLevel2::GetToFLevel2();
43      s4_obj   = this->S4Level2::GetS4Level2();      trig_obj    = this->TrigLevel2::GetTrigLevel2();
44      nd_obj   = this->NDLevel2::GetNDLevel2();      s4_obj      = this->S4Level2::GetS4Level2();
45      ac_obj   = this->AcLevel2::GetAcLevel2();      nd_obj      = this->NDLevel2::GetNDLevel2();
46          orb_obj  = this->OrbitalInfo::GetOrbitalInfo();      ac_obj      = this->AcLevel2::GetAcLevel2();
47            orb_obj     = this->OrbitalInfo::GetOrbitalInfo();
48    
49            run_obj     = new GL_RUN();
50            
51          sorted_tracks = new TRefArray();          sorted_tracks = new TRefArray();
52    
53          CAL = true;          CAL = true;
# Line 56  PamLevel2::PamLevel2(){ Line 59  PamLevel2::PamLevel2(){
59          AC  = true;          AC  = true;
60          ORB = true;          ORB = true;
61    
62            TRK_L1 = false;
63    
64            Tout  = NULL;
65  };  };
66  /**  /**
67   * Destructor   * Destructor
68   */   */
69  PamLevel2::~PamLevel2(){  PamLevel2::~PamLevel2(){
70                                    
71            TrkLevel1::Clear();
72            
73          TrkLevel2::Clear();          TrkLevel2::Clear();
74          CaloLevel2::Clear();          CaloLevel2::Clear();
75          ToFLevel2::Clear();          ToFLevel2::Clear();
# Line 71  PamLevel2::~PamLevel2(){ Line 79  PamLevel2::~PamLevel2(){
79          AcLevel2::Clear();          AcLevel2::Clear();
80          OrbitalInfo::Clear();          OrbitalInfo::Clear();
81                    
82          delete sorted_tracks;          delete run_obj;
83            
84    //      delete sorted_tracks;
85            sorted_tracks->Delete(); // clean the reference array
86            
87            if(Tout)Tout->Delete(); // delete loaded tree from memory
88                    
89  };  };
90  /**  /**
# Line 79  PamLevel2::~PamLevel2(){ Line 92  PamLevel2::~PamLevel2(){
92   */   */
93  void PamLevel2::Clear(){  void PamLevel2::Clear(){
94                    
95            TrkLevel1::Clear();
96            
97            TrkLevel2::Clear();
98            CaloLevel2::Clear();
99            ToFLevel2::Clear();
100            TrigLevel2::Clear();
101            S4Level2::Clear();
102            NDLevel2::Clear();
103            AcLevel2::Clear();
104            OrbitalInfo::Clear();
105                    
106          sorted_tracks->Delete();          sorted_tracks->Delete(); // clean the reference array
107                    
108  };  };
109    
# Line 95  void PamLevel2::Clear(){ Line 118  void PamLevel2::Clear(){
118   */   */
119   CaloTrkVar *PamLevel2::GetCaloStoredTrack(int seqno){   CaloTrkVar *PamLevel2::GetCaloStoredTrack(int seqno){
120                    
121             if( CaloLevel2::ntrk()==0 ){
122                     cout << "PamLevel2::GetCaloStoredTrack(int) : requested tracker SeqNo "<< seqno <<" but no Calorimeter tracks are stored"<<endl;
123                     return NULL;
124             };
125            
126           CaloTrkVar *c = 0;           CaloTrkVar *c = 0;
127           Int_t it_calo=0;           Int_t it_calo=0;
128                    
# Line 120  void PamLevel2::Clear(){ Line 148  void PamLevel2::Clear(){
148   */   */
149   ToFTrkVar *PamLevel2::GetToFStoredTrack(int seqno){   ToFTrkVar *PamLevel2::GetToFStoredTrack(int seqno){
150                    
151             if( ToFLevel2::ntrk()==0 ){
152                     cout << "PamLevel2::GetToFStoredTrack(int) : requested tracker SeqNo "<< seqno <<" but no ToF tracks are stored"<<endl;
153                     return NULL;
154             };
155            
156           ToFTrkVar *c = 0;           ToFTrkVar *c = 0;
157           Int_t it_tof=0;           Int_t it_tof=0;
158                    
# Line 148  void PamLevel2::Clear(){ Line 181  void PamLevel2::Clear(){
181           CaloTrkVar *c = 0;           CaloTrkVar *c = 0;
182           ToFTrkVar  *o = 0;           ToFTrkVar  *o = 0;
183                    
184           c = GetCaloStoredTrack(t->GetSeqNo());           if(CAL) c = GetCaloStoredTrack(t->GetSeqNo());
185           o = GetToFStoredTrack(t->GetSeqNo());           if(TOF) o = GetToFStoredTrack(t->GetSeqNo());
186                    
187  //    if(t && c && o)track = new PamTrack(t,c,o);  //    if(t && c && o)track = new PamTrack(t,c,o);
188           PamTrack *track = new PamTrack(t,c,o);           PamTrack *track = new PamTrack(t,c,o);
# Line 200  PamTrack* PamLevel2::GetStoredTrack(Int_ Line 233  PamTrack* PamLevel2::GetStoredTrack(Int_
233   */   */
234  void PamLevel2::SortTracks(TString how){  void PamLevel2::SortTracks(TString how){
235    
236          sorted_tracks->Delete(); //temporaneo    //Save current Object count
237            Int_t ObjectNumber = TProcessID::GetObjectCount();
238            
239            sorted_tracks->Delete(); //temporaneo???
240            
241      // loop over the tracks sorted by the tracker      // loop over the tracks sorted by the tracker
242          Bool_t use_TRK = how.Contains("TRK", TString::kIgnoreCase);          Bool_t use_TRK = how.Contains("TRK", TString::kIgnoreCase);
243          Bool_t use_CAL = how.Contains("CAL", TString::kIgnoreCase);          Bool_t use_CAL = how.Contains("CAL", TString::kIgnoreCase);
244          Bool_t use_TOF = how.Contains("TOF", TString::kIgnoreCase);          Bool_t use_TOF = how.Contains("TOF", TString::kIgnoreCase);
245                    
246            if( !CAL &&  use_CAL) use_CAL = false;
247            if( !TOF &&  use_TOF) use_TOF = false;
248            
249            if( !TRK ){
250                    cout << "SortTracks() : without tracker does not work!!! (not yet)" << endl;
251                    return;
252            };
253                    
254          for(Int_t i=0; i < TrkLevel2::GetNTracks(); i++){          for(Int_t i=0; i < TrkLevel2::GetNTracks(); i++){
255    
# Line 213  void PamLevel2::SortTracks(TString how){ Line 257  void PamLevel2::SortTracks(TString how){
257    
258          // get tracker tracks          // get tracker tracks
259                  TrkTrack   *tp = TrkLevel2::GetTrack(i);                    //tracker                  TrkTrack   *tp = TrkLevel2::GetTrack(i);                    //tracker
260                  CaloTrkVar *cp = GetCaloStoredTrack(tp->GetSeqNo());  //              CaloTrkVar *cp = GetCaloStoredTrack(tp->GetSeqNo());
261                  ToFTrkVar  *op = GetToFStoredTrack(tp->GetSeqNo());  //              ToFTrkVar  *op = GetToFStoredTrack(tp->GetSeqNo());
262                    CaloTrkVar *cp = 0;
263                    ToFTrkVar  *op = 0;
264    
265          // if track has an image, check image selection          // if track has an image, check image selection
266                  if(tp->HasImage()){                  if(tp->HasImage()){
267                                                    
268                          TrkTrack   *ti = TrkLevel2::GetTrackImage(i);              //tracker (image)                          TrkTrack   *ti = TrkLevel2::GetTrackImage(i);              //tracker (image)
269                          CaloTrkVar *ci = GetCaloStoredTrack(ti->GetSeqNo());  //                      CaloTrkVar *ci = GetCaloStoredTrack(ti->GetSeqNo());
270                          ToFTrkVar  *oi = GetToFStoredTrack(ti->GetSeqNo());  //                      ToFTrkVar  *oi = GetToFStoredTrack(ti->GetSeqNo());
271                            CaloTrkVar *ci = 0;
272                            ToFTrkVar  *oi = 0;
273    
274              //assign starting scores              //assign starting scores
275                          Int_t tp_score = 0;  //main track sorted by the tracker                          Int_t tp_score = 0;  //main track sorted by the tracker
# Line 238  void PamLevel2::SortTracks(TString how){ Line 286  void PamLevel2::SortTracks(TString how){
286                                  varcfit[1] < 1000. &&  //fit variance on Y view                                  varcfit[1] < 1000. &&  //fit variance on Y view
287                                  true){                                  true){
288    
289                                    cp = GetCaloStoredTrack(tp->GetSeqNo());
290                                    ci = GetCaloStoredTrack(ti->GetSeqNo());
291                                    
292                                  Float_t resy_p = cp->tbar[0][1] - cbar[0][1]; if(resy_p < 0)resy_p= - resy_p;                                  Float_t resy_p = cp->tbar[0][1] - cbar[0][1]; if(resy_p < 0)resy_p= - resy_p;
293                                  Float_t resy_i = ci->tbar[0][1] - cbar[0][1]; if(resy_i < 0)resy_i= - resy_i;                                  Float_t resy_i = ci->tbar[0][1] - cbar[0][1]; if(resy_i < 0)resy_i= - resy_i;
294    
# Line 249  void PamLevel2::SortTracks(TString how){ Line 300  void PamLevel2::SortTracks(TString how){
300              // ------------------------                  // ------------------------    
301                  // check the number of hit pmts along the track                  // check the number of hit pmts along the track
302                  // on S12 S21 and S32, where paddles are parallel to Y axis                  // on S12 S21 and S32, where paddles are parallel to Y axis
303                          Int_t nphit_p =0;                          if( use_TOF ){
                         Int_t nphit_i =0;  
                                   
                         for (Int_t ih=0; ih < op->npmtadc; ih++){  
                                 Int_t pl = GetPlaneIndex( (op->pmtadc).At(ih) );  
                                 if(pl == 1 || pl == 2 || pl == 5)nphit_p++;  
                         };  
                                                   
                         for (Int_t ih=0; ih < oi->npmtadc; ih++){  
                                 Int_t pl = GetPlaneIndex( (oi->pmtadc).At(ih) );  
                                 if(pl == 1 || pl == 2 || pl == 5)nphit_i++;      
                         };  
304                                                    
305                          if(                                  Int_t nphit_p =0;
306                                  use_TOF            &&                                  Int_t nphit_i =0;
307                                  (nphit_p+nphit_i) !=0 &&                                                  
308                                  true){                                  op = GetToFStoredTrack(tp->GetSeqNo());
309                                    oi = GetToFStoredTrack(ti->GetSeqNo());
310                                  if( nphit_p >= nphit_i) tp_score++;                                  
311                                  else                                              ti_score++;  /*                              cout << "track: npmtadc "<< op->npmtadc << endl;
312                                    cout << "track: npmttdc "<< op->npmttdc << endl;
313                                    cout << "image: npmtadc "<< oi->npmtadc << endl;
314                                    cout << "image: npmttdc "<< oi->npmttdc << endl;*/
315                                    
316                                    for (Int_t ih=0; ih < op->npmtadc; ih++){
317                                            Int_t pl = GetPlaneIndex( (op->pmtadc).At(ih) );
318                                            if(pl == 1 || pl == 2 || pl == 5)nphit_p++;
319                                    };
320                                                            
321                                    for (Int_t ih=0; ih < oi->npmtadc; ih++){
322                                            Int_t pl = GetPlaneIndex( (oi->pmtadc).At(ih) );
323                                            if(pl == 1 || pl == 2 || pl == 5)nphit_i++;    
324                                    };
325                                    
326                                    if(
327                                            use_TOF            &&
328                                            (nphit_p+nphit_i) !=0 &&        
329                                            true){
330                                            
331                                            if( nphit_p >= nphit_i) tp_score++;
332                                            else                                              ti_score++;
333                                    };
334                          };                          };
               
335                          if(tp_score == ti_score) use_TRK = true;                          if(tp_score == ti_score) use_TRK = true;
336                  // ------------------------                  // ------------------------
337              // tracker check              // tracker check
# Line 297  void PamLevel2::SortTracks(TString how){ Line 358  void PamLevel2::SortTracks(TString how){
358                  }else{                  }else{
359                          ts = tp;                          ts = tp;
360                  };                  };
361                                            
362    //              cout <<" SortTracks() "<<i<<" -- "<<ts<<endl;
363                  sorted_tracks->Add(ts);//save the track in the sorted array                  sorted_tracks->Add(ts);//save the track in the sorted array
364    //              cout << "SortTracks:: sorted_tracks->Add(it) "<<i<<" "<<ts<<endl;
365                                    
366          };          };
367      //Restore Object count
368      //To save space in the table keeping track of all referenced objects
369      //we assume that our events do not address each other. We reset the
370      //object count to what it was at the beginning of the event.
371            TProcessID::SetObjectCount(ObjectNumber);
372    
373  };  };
374  //--------------------------------------  //--------------------------------------
# Line 312  void PamLevel2::SortTracks(TString how){ Line 380  void PamLevel2::SortTracks(TString how){
380   * PamLevel2::GetTracks() keeps the same track order given by TrkLevel2::GetTracks(), but checks image selection by using calorimeter and ToF tracking information.   * PamLevel2::GetTracks() keeps the same track order given by TrkLevel2::GetTracks(), but checks image selection by using calorimeter and ToF tracking information.
381   */   */
382   TRefArray *PamLevel2::GetTracks(){   TRefArray *PamLevel2::GetTracks(){
383          SortTracks("+CAL+TOF");           //
384    //      SortTracks("+CAL+TOF");
385             SortTracks("+CAL+TRK");//TEMP!!!!!!!!!!!!!
386            //
387          return sorted_tracks;          return sorted_tracks;
388   };   };
389  //--------------------------------------  //--------------------------------------
# Line 327  void PamLevel2::SortTracks(TString how){ Line 398  void PamLevel2::SortTracks(TString how){
398  PamTrack *PamLevel2::GetTrack(int it){  PamTrack *PamLevel2::GetTrack(int it){
399                    
400  //  *-*-*-*-*-*-*  //  *-*-*-*-*-*-*
401          SortTracks("+CAL+TOF");  //      SortTracks("+CAL+TOF");
402            SortTracks("+CAL+TRK");//TEMP!!!!!!!!!!!!!
403  //  *-*-*-*-*-*-*  //  *-*-*-*-*-*-*
404    
405          PamTrack *track = 0;          PamTrack *track = 0;
406                    
407          if( it >=0 && it < TrkLevel2::GetNTracks() ){          if( it >=0 && it < TrkLevel2::GetNTracks() ){
408                  TrkTrack   *t = (TrkTrack*)sorted_tracks->At(it);                  TrkTrack   *t = (TrkTrack*)sorted_tracks->At(it);
409    //              cout << "GetTrack(int it):: sorted_tracks->At(it) "<<it<<" "<<t<<endl;
410                  track = GetPamTrackAlong(t);                  track = GetPamTrackAlong(t);
411          }else{          }else{
412                  cout << "PamLevel2::GetTrack(int) : tracker track SeqNo "<< it <<" does not exist (GetNTracks() = "<<TrkLevel2::GetNTracks()<<")"<<endl;                  cout << "PamLevel2::GetTrack(int) : tracker track SeqNo "<< it <<" does not exist (GetNTracks() = "<<TrkLevel2::GetNTracks()<<")"<<endl;
# Line 353  PamTrack *PamLevel2::GetTrack(int it){ Line 426  PamTrack *PamLevel2::GetTrack(int it){
426   */   */
427  PamTrack *PamLevel2::GetTrackImage(int it){  PamTrack *PamLevel2::GetTrackImage(int it){
428    
429          SortTracks("+CAL+TOF");  //      SortTracks("+CAL+TOF");
430            SortTracks("+CAL+TRK");//TEMP!!!!!!!!!!!!!
431                    
432          PamTrack *image = 0;          PamTrack *image = 0;
433    
# Line 382  PamTrack *PamLevel2::GetTrackImage(int i Line 456  PamTrack *PamLevel2::GetTrackImage(int i
456   * @param detlist String to select trees to be included   * @param detlist String to select trees to be included
457   * @return Pointer to a TTree   * @return Pointer to a TTree
458   */   */
459  TTree *PamLevel2::LoadPamTrees(TFile *f, TString detlist="+ALL"){  TTree *PamLevel2::GetPamTree(TFile *f, TString detlist="+ALL"){
460        
461      TTree *Tout =0;  //      cout << "WARNING!!! -- obsolete method -- \n";
462    //      cout << "better use TChain *PamLevel2::GetPamTree(TList*, TString) \n";
463                    
464          SetWhichTrees(detlist);          TTree *Trout =0;
465                    
466      // Tracker          SetWhichTrees(detlist);
467    // Tracker
468      TTree *T = (TTree*)f->Get("Tracker");      TTree *T = (TTree*)f->Get("Tracker");
469      if(T && TRK) {      if(T && TRK) {
470          T->SetBranchAddress("TrkLevel2", GetPointerToTrk());                  if(TRK_L1){
471          cout << "Tracker      : set branch address TrkLevel2"<<endl;                          T->SetBranchAddress("TrkLevel1", GetPointerToTrk(1));
472          if(!Tout)Tout=T;                          cout << "Tracker      : set branch address TrkLevel1"<<endl;
473                    };
474                    T->SetBranchAddress("TrkLevel2", GetPointerToTrk(2));
475                    cout << "Tracker      : set branch address TrkLevel2"<<endl;
476                    Trout=T;
477      }else{      }else{
478          cout << "Tracker      : missing tree"<<endl;          cout << "Tracker      : missing tree"<<endl;
479      };      };
# Line 402  TTree *PamLevel2::LoadPamTrees(TFile *f, Line 482  TTree *PamLevel2::LoadPamTrees(TFile *f,
482      if(C && CAL) {      if(C && CAL) {
483          C->SetBranchAddress("CaloLevel2", GetPointerToCalo());          C->SetBranchAddress("CaloLevel2", GetPointerToCalo());
484          cout << "Calorimeter  : set branch address CaloLevel2"<<endl;          cout << "Calorimeter  : set branch address CaloLevel2"<<endl;
485          if(!Tout)Tout=C;          if(!Trout)Trout=C;
486          else Tout->AddFriend(C);          else Trout->AddFriend(C);
487      }else{      }else{
488          cout << "Calorimeter  : missing tree"<<endl;          cout << "Calorimeter  : missing tree"<<endl;
489      };      };
# Line 412  TTree *PamLevel2::LoadPamTrees(TFile *f, Line 492  TTree *PamLevel2::LoadPamTrees(TFile *f,
492      if(O && TOF) {      if(O && TOF) {
493          O->SetBranchAddress("ToFLevel2", GetPointerToToF());          O->SetBranchAddress("ToFLevel2", GetPointerToToF());
494          cout << "ToF          : set branch address ToFLevel2"<<endl;          cout << "ToF          : set branch address ToFLevel2"<<endl;
495          if(!Tout)Tout=O;          if(!Trout)Trout=O;
496          else Tout->AddFriend(O);          else Trout->AddFriend(O);
497      }else{      }else{
498          cout << "ToF         : missing tree"<<endl;          cout << "ToF         : missing tree"<<endl;
499      };      };
# Line 422  TTree *PamLevel2::LoadPamTrees(TFile *f, Line 502  TTree *PamLevel2::LoadPamTrees(TFile *f,
502      if(R && TRG) {      if(R && TRG) {
503          R->SetBranchAddress("TrigLevel2", GetPointerToTrig());          R->SetBranchAddress("TrigLevel2", GetPointerToTrig());
504          cout << "Trigger      : set branch address TrigLevel2"<<endl;          cout << "Trigger      : set branch address TrigLevel2"<<endl;
505          if(!Tout)Tout=O;          if(!Trout)Trout=O;
506          else Tout->AddFriend(R);          else Trout->AddFriend(R);
507      }else{      }else{
508          cout << "Trigger      : missing tree"<<endl;          cout << "Trigger      : missing tree"<<endl;
509      };      };
# Line 432  TTree *PamLevel2::LoadPamTrees(TFile *f, Line 512  TTree *PamLevel2::LoadPamTrees(TFile *f,
512      if(S && S4) {      if(S && S4) {
513          S->SetBranchAddress("S4Level2", GetPointerToS4());          S->SetBranchAddress("S4Level2", GetPointerToS4());
514          cout << "S4           : set branch address S4Level2"<<endl;          cout << "S4           : set branch address S4Level2"<<endl;
515          if(!Tout)Tout=O;          if(!Trout)Trout=O;
516          else Tout->AddFriend(S);          else Trout->AddFriend(S);
517      }else{      }else{
518          cout << "S4           : missing tree"<<endl;          cout << "S4           : missing tree"<<endl;
519      };      };
# Line 442  TTree *PamLevel2::LoadPamTrees(TFile *f, Line 522  TTree *PamLevel2::LoadPamTrees(TFile *f,
522      if(N && ND) {      if(N && ND) {
523          N->SetBranchAddress("NDLevel2", GetPointerToND());          N->SetBranchAddress("NDLevel2", GetPointerToND());
524          cout << "NeutronD     : set branch address NDLevel2"<<endl;          cout << "NeutronD     : set branch address NDLevel2"<<endl;
525          if(!Tout)Tout=O;          if(!Trout)Trout=O;
526          else Tout->AddFriend(N);          else Trout->AddFriend(N);
527      }else{      }else{
528          cout << "NeutronD     : missing tree"<<endl;          cout << "NeutronD     : missing tree"<<endl;
529      };      };
# Line 452  TTree *PamLevel2::LoadPamTrees(TFile *f, Line 532  TTree *PamLevel2::LoadPamTrees(TFile *f,
532      if(A && AC) {      if(A && AC) {
533          A->SetBranchAddress("AcLevel2", GetPointerToAc());          A->SetBranchAddress("AcLevel2", GetPointerToAc());
534          cout << "Anticounter  : set branch address AcLevel2"<<endl;          cout << "Anticounter  : set branch address AcLevel2"<<endl;
535          if(!Tout)Tout=O;          if(!Trout)Trout=O;
536          else Tout->AddFriend(A);          else Trout->AddFriend(A);
537      }else{      }else{
538          cout << "Anticounter  : missing tree"<<endl;          cout << "Anticounter  : missing tree"<<endl;
539      };      };
# Line 462  TTree *PamLevel2::LoadPamTrees(TFile *f, Line 542  TTree *PamLevel2::LoadPamTrees(TFile *f,
542          if(B && ORB) {          if(B && ORB) {
543                  B->SetBranchAddress("OrbitalInfo", GetPointerToOrb());                  B->SetBranchAddress("OrbitalInfo", GetPointerToOrb());
544                  cout << "OrbitalInfo  : set branch address OrbitalInfo"<<endl;                  cout << "OrbitalInfo  : set branch address OrbitalInfo"<<endl;
545                  if(!Tout)Tout=O;                  if(!Trout)Trout=O;
546                  else Tout->AddFriend(B);                  else Trout->AddFriend(B);
547          }else{          }else{
548                  cout << "OrbitalInfo  : missing tree"<<endl;                  cout << "OrbitalInfo  : missing tree"<<endl;
549          };          };
550            
551      return Tout;          cout<<endl<<" Number of entries: "<<Trout->GetEntries()<<endl<<endl;
       
 }  
 //--------------------------------------  
 //  
 //  
 //--------------------------------------  
 /**  
  * Get all the Pamela detector trees in a single file and make them friends.  
  * @param f TFile pointer  
  * @return Pointer to a TTree  
  */  
 TTree *PamLevel2::LoadPamTrees(TFile *f){  
       
         TTree *Tout =0;  
552                    
553          SetWhichTrees("+ALL");          return Trout;
           
     // Tracker  
         TTree *T = (TTree*)f->Get("Tracker");  
         if(T && TRK) {  
                 T->SetBranchAddress("TrkLevel2", GetPointerToTrk());  
                 cout << "Tracker      : set branch address TrkLevel2"<<endl;  
                 if(!Tout)Tout=T;  
         }else{  
                 cout << "Tracker      : missing tree"<<endl;  
         };  
     // Calorimeter  
         TTree *C = (TTree*)f->Get("Calorimeter");  
         if(C && CAL) {  
                 C->SetBranchAddress("CaloLevel2", GetPointerToCalo());  
                 cout << "Calorimeter  : set branch address CaloLevel2"<<endl;  
                 if(!Tout)Tout=C;  
                 else Tout->AddFriend(C);  
         }else{  
                 cout << "Calorimeter  : missing tree"<<endl;  
         };  
     // ToF      
         TTree *O = (TTree*)f->Get("ToF");  
         if(O && TOF) {  
                 O->SetBranchAddress("ToFLevel2", GetPointerToToF());  
                 cout << "ToF          : set branch address ToFLevel2"<<endl;  
                 if(!Tout)Tout=O;  
                 else Tout->AddFriend(O);  
         }else{  
                 cout << "ToF         : missing tree"<<endl;  
         };  
     // Trigger  
         TTree *R = (TTree*)f->Get("Trigger");  
         if(R && TRG) {  
                 R->SetBranchAddress("TrigLevel2", GetPointerToTrig());  
                 cout << "Trigger      : set branch address TrigLevel2"<<endl;  
                 if(!Tout)Tout=O;  
                 else Tout->AddFriend(R);  
         }else{  
                 cout << "Trigger      : missing tree"<<endl;  
         };  
     // S4  
         TTree *S = (TTree*)f->Get("S4");  
         if(S && S4) {  
                 S->SetBranchAddress("S4Level2", GetPointerToS4());  
                 cout << "S4           : set branch address S4Level2"<<endl;  
                 if(!Tout)Tout=O;  
                 else Tout->AddFriend(S);  
         }else{  
                 cout << "S4           : missing tree"<<endl;  
         };  
     // Neutron Detector  
         TTree *N = (TTree*)f->Get("NeutronD");  
         if(N && ND) {  
                 N->SetBranchAddress("NDLevel2", GetPointerToND());  
                 cout << "NeutronD     : set branch address NDLevel2"<<endl;  
                 if(!Tout)Tout=O;  
                 else Tout->AddFriend(N);  
         }else{  
                 cout << "NeutronD     : missing tree"<<endl;  
         };  
     // Anticounters  
         TTree *A = (TTree*)f->Get("Anticounter");  
         if(A && AC) {  
                 A->SetBranchAddress("AcLevel2", GetPointerToAc());  
                 cout << "Anticounter  : set branch address AcLevel2"<<endl;  
                 if(!Tout)Tout=O;  
                 else Tout->AddFriend(A);  
         }else{  
                 cout << "Anticounter  : missing tree"<<endl;  
         };  
     // Orbital Info  
         TTree *B = (TTree*)f->Get("OrbitalInfo");  
         if(B && ORB) {  
                 B->SetBranchAddress("OrbitalInfo", GetPointerToOrb());  
                 cout << "OrbitalInfo  : set branch address OrbitalInfo"<<endl;  
                 if(!Tout)Tout=O;  
                 else Tout->AddFriend(B);  
         }else{  
                 cout << "OrbitalInfo  : missing tree"<<endl;  
         };  
       
         return Tout;  
554            
555  }  }
556  //--------------------------------------  //--------------------------------------
# Line 585  TList*  PamLevel2::GetListOfLevel2Files( Line 569  TList*  PamLevel2::GetListOfLevel2Files(
569          TString wdir = gSystem->WorkingDirectory();              TString wdir = gSystem->WorkingDirectory();    
570                    
571          if(ddir=="")ddir = wdir;          if(ddir=="")ddir = wdir;
572          TSystemDirectory *datadir = new TSystemDirectory(gSystem->BaseName(ddir),ddir);  //      TSystemDirectory *datadir = new TSystemDirectory(gSystem->BaseName(ddir),ddir);
573          cout << "Level2 data directory : "<< endl <<  ddir << endl;          cout << "Level2 data directory : "<<  ddir << endl;
574                                    
575          TList *contents  = new TList; // create output list          TList *contents  = new TList; // create output list
576          contents->SetOwner();          contents->SetOwner();
577            
578            char *fullpath;
579                                    
580          // if no input file list is given:                // if no input file list is given:      
581          if ( flisttxt != "" ){          if ( flisttxt != "" ){
582                                    
583                    if( !gSystem->IsFileInIncludePath(flisttxt,&fullpath) )return 0;
584                                    
585                  if( !gSystem->ChangeDirectory(ddir) )return 0;  //              flisttxt = gSystem->ConcatFileName(gSystem->DirName(flisttxt),gSystem->BaseName(flisttxt));
586                            flisttxt = fullpath;
                 flisttxt = gSystem->ConcatFileName(wdir,gSystem->BaseName(flisttxt));  
587                                    
588                  cout <<"Input file list : "<< endl << flisttxt <<endl;                  if( !gSystem->ChangeDirectory(ddir) )return 0;
589                  ifstream in;          
590                  in.open(flisttxt, ios::in);                  cout <<"Input file list : " << flisttxt <<endl;
591                    ifstream in;
592                    in.open(flisttxt, ios::in); //open input file list
593                  while (1) {                  while (1) {
594                          TString file;                          TString file;
595                          in >> file;                          in >> file;
596                          if (!in.good()) break;                          if (!in.good()) break;
                         char *fullpath;  
597                          if( gSystem->IsFileInIncludePath(file,&fullpath) ){                          if( gSystem->IsFileInIncludePath(file,&fullpath) ){
598  //                              contents->Add(new TSystemDirectory(fullpath,ddir)); // add file to the list  //                              contents->Add(new TSystemDirectory(fullpath,ddir)); // add file to the list
599  //                              contents->Add(new TSystemFile(fullpath,ddir)); // add file to the list  //                              contents->Add(new TSystemFile(fullpath,ddir)); // add file to the list
# Line 622  TList*  PamLevel2::GetListOfLevel2Files( Line 610  TList*  PamLevel2::GetListOfLevel2Files(
610                  cout << "Check for existing root files."<<endl;                  cout << "Check for existing root files."<<endl;
611  //              cout << "Warking directory: "<< gSystem->WorkingDirectory()<< endl;  //              cout << "Warking directory: "<< gSystem->WorkingDirectory()<< endl;
612                                    
613                    TSystemDirectory *datadir = new TSystemDirectory(gSystem->BaseName(ddir),ddir);
614                  TList *temp = datadir->GetListOfFiles();                  TList *temp = datadir->GetListOfFiles();
615  //              temp->Print();  //              temp->Print();
616  //              cout << "*************************************" << endl;  //              cout << "*************************************" << endl;
# Line 639  TList*  PamLevel2::GetListOfLevel2Files( Line 628  TList*  PamLevel2::GetListOfLevel2Files(
628                          };                          };
629                  }                  }
630                  delete temp;                  delete temp;
631                    delete datadir;
632                    
633          };          };
634          gSystem->ChangeDirectory(wdir);          gSystem->ChangeDirectory(wdir); // back to the working directory
635          cout << endl << "Selected files:" << endl;  //      cout << endl << "Selected files:" << endl;
636          contents->Print();  //      contents->Print();
637          cout << endl;          cout << contents->GetEntries()<<" files selected\n";
638  //      cout << "Warking directory: "<< gSystem->WorkingDirectory()<< endl;  //      cout << endl;
639    //      cout << "Working directory: "<< gSystem->WorkingDirectory()<< endl;
640          return contents;          return contents;
641  };  };
642  //--------------------------------------  //--------------------------------------
# Line 658  TList*  PamLevel2::GetListOfLevel2Files( Line 649  TList*  PamLevel2::GetListOfLevel2Files(
649   * @param detlist String to select trees to be included   * @param detlist String to select trees to be included
650   * @return Pointer to a TChain   * @return Pointer to a TChain
651   */   */
652  TChain *PamLevel2::LoadPamTrees(TList *fl, TString detlist="+ALL"){  TChain *PamLevel2::GetPamTree(TList *fl, TString detlist="+ALL"){
653    
654          TChain *Tout=0;  //      TChain *Tout=0;
655            if(Tout)Tout->Delete();
656            Tout = NULL;
657                    
658          SetWhichTrees(detlist);          SetWhichTrees(detlist);
659                    
# Line 699  TChain *PamLevel2::LoadPamTrees(TList *f Line 692  TChain *PamLevel2::LoadPamTrees(TList *f
692                          if(ORB) B->Add(name);                          if(ORB) B->Add(name);
693                  };                  };
694          }          }
695                            
696      // Tracker              // Tracker
697          if(TRK) {          if(TRK) if(!Tout)Tout=T;
698                  T->SetBranchAddress("TrkLevel2", GetPointerToTrk());              
                 cout << "Tracker      : set branch address TrkLevel2"<<endl;  
                 if(!Tout)Tout=T;  
         };  
       
699          // Calorimeter          // Calorimeter
700          if(CAL) {          if(CAL) {              
                 C->SetBranchAddress("CaloLevel2", GetPointerToCalo());  
                 cout << "Calorimeter  : set branch address CaloLevel2"<<endl;  
701                  if(!Tout)Tout=C;                  if(!Tout)Tout=C;
702                  else Tout->AddFriend("Calorimeter");                  else Tout->AddFriend("Calorimeter");
703          };          };
704                    
705      // ToF          // ToF    
706          if(TOF) {          if(TOF) {
                 O->SetBranchAddress("ToFLevel2", GetPointerToToF());  
                 cout << "ToF          : set branch address ToFLevel2"<<endl;  
707                  if(!Tout)Tout=O;                  if(!Tout)Tout=O;
708                  else Tout->AddFriend("ToF");                  else Tout->AddFriend("ToF");
709          };          };
710      // Trigger      // Trigger
711          if(TRG) {          if(TRG) {
                 R->SetBranchAddress("TrigLevel2", GetPointerToTrig());  
                 cout << "Trigger      : set branch address TrigLevel2"<<endl;  
712                  if(!Tout)Tout=O;                  if(!Tout)Tout=O;
713                  else Tout->AddFriend("Trigger");                  else Tout->AddFriend("Trigger");
714          };          };
715      // S4      // S4
716          if(S4) {          if(S4) {
                 S->SetBranchAddress("S4Level2", GetPointerToS4());  
                 cout << "S4           : set branch address S4Level2"<<endl;  
717                  if(!Tout)Tout=O;                  if(!Tout)Tout=O;
718                  else Tout->AddFriend("S4");                  else Tout->AddFriend("S4");
719          };          };
720      // Neutron Detector      // Neutron Detector
721          if(ND) {          if(ND) {
                 N->SetBranchAddress("NDLevel2", GetPointerToND());  
                 cout << "NeutronD     : set branch address NDLevel2"<<endl;  
722                  if(!Tout)Tout=O;                  if(!Tout)Tout=O;
723                  else Tout->AddFriend("NeutronD");                  else Tout->AddFriend("NeutronD");
724          };          };
725      // Anticounters      // Anticounters
726          if(AC) {          if(AC) {
                 A->SetBranchAddress("AcLevel2", GetPointerToAc());  
                 cout << "Anticounter  : set branch address AcLevel2"<<endl;  
727                  if(!Tout)Tout=O;                  if(!Tout)Tout=O;
728                  else Tout->AddFriend("Anticounter");                  else Tout->AddFriend("Anticounter");
729          };          };
730      // OrbitalInfo      // OrbitalInfo
731          if(ORB) {          if(ORB) {
                 B->SetBranchAddress("OrbitalInfo", GetPointerToOrb());  
                 cout << "OrbitalInfo  : set branch address OrbitalInfo"<<endl;  
732                  if(!Tout)Tout=O;                  if(!Tout)Tout=O;
733                  else Tout->AddFriend("OrbitalInfo");                  else Tout->AddFriend("OrbitalInfo");
734          };          };
735                
736            cout<<endl<<" Number of entries: "<<Tout->GetEntries()<<endl<<endl;
737            
738            PamLevel2::SetBranchAddress();
739            
740          return Tout;          return Tout;
741    }
742    //--------------------------------------
743    //
744    //
745    //--------------------------------------
746    /**
747     * Set branch addresses for Pamela friend trees
748     */
749    void PamLevel2::SetBranchAddress(){
750        // Tracker
751            if(TRK) {
752                    if(TRK_L1){
753                            Tout->SetBranchAddress("TrkLevel1", GetPointerToTrk(1));
754                            cout << "Tracker      : set branch address TrkLevel1"<<endl;
755                    };
756                    Tout->SetBranchAddress("TrkLevel2", GetPointerToTrk(2));
757                    cout << "Tracker      : set branch address TrkLevel2"<<endl;
758            };
759                
760            // Calorimeter
761            if(CAL) {
762                    Tout->SetBranchAddress("CaloLevel2", GetPointerToCalo());
763                    cout << "Calorimeter  : set branch address CaloLevel2"<<endl;
764            };
765            
766        // ToF    
767            if(TOF) {
768                    Tout->SetBranchAddress("ToFLevel2", GetPointerToToF());
769                    cout << "ToF          : set branch address ToFLevel2"<<endl;
770            };
771        // Trigger
772            if(TRG) {
773                    Tout->SetBranchAddress("TrigLevel2", GetPointerToTrig());
774                    cout << "Trigger      : set branch address TrigLevel2"<<endl;
775            };
776        // S4
777            if(S4) {
778                    Tout->SetBranchAddress("S4Level2", GetPointerToS4());
779                    cout << "S4           : set branch address S4Level2"<<endl;
780            };
781        // Neutron Detector
782            if(ND) {
783                    Tout->SetBranchAddress("NDLevel2", GetPointerToND());
784                    cout << "NeutronD     : set branch address NDLevel2"<<endl;
785            };
786        // Anticounters
787            if(AC) {
788                    Tout->SetBranchAddress("AcLevel2", GetPointerToAc());
789                    cout << "Anticounter  : set branch address AcLevel2"<<endl;
790            };
791        // OrbitalInfo
792            if(ORB) {
793                    Tout->SetBranchAddress("OrbitalInfo", GetPointerToOrb());
794                    cout << "OrbitalInfo  : set branch address OrbitalInfo"<<endl;
795            };
796            
797    }
798    
799    //--------------------------------------
800    //
801    //
802    //--------------------------------------
803    void *PamLevel2::GetPointerTo(const char* c ){
804    //      cout << "objname "<< objname << endl;
805            TString objname = c;
806            if(!objname.CompareTo("TrkLevel1"))return &trk_l1_obj;
807            if(!objname.CompareTo("TrkLevel2"))return &trk_obj;
808            
809            return NULL;
810    };
811    //--------------------------------------
812    //
813    //
814    //--------------------------------------
815    /**
816     * Get the Run tree chain from a list of files.
817     * @param fl Pointer to a TList of TSystemFiles
818     * @return Pointer to a TChain
819     */
820    TChain *PamLevel2::GetRunTree(TList *fl){
821            
822            TChain *R = new TChain("Run");
823    
824            // loop over files and create chains    
825            TIter next(fl);
826            TSystemFile *questo = 0;
827            while ( (questo = (TSystemFile*) next()) ) {
828                    TString name =  questo->GetName();
829    //              cout << "File: "<< name << endl;
830                    if( CheckLevel2File(name) ){
831                            R->Add(name);
832                    };
833            }
834            
835            R->SetBranchAddress("RunInfo", GetPointerToRun());
836            cout << "Run         : set branch address RunInfo"<<endl;
837        
838            return R;
839        
840    }
841    //--------------------------------------
842    //
843    //
844    //--------------------------------------
845    /**
846     * Get the Run tree  from a file.
847     * @param f Pointer to a TFile
848     * @return Pointer to a TTree
849     */
850    TTree *PamLevel2::GetRunTree(TFile *f){
851    
852    
853            TTree *R = (TTree*)f->Get("Run");
854    
855            R->SetBranchAddress("RunInfo", GetPointerToRun());
856            cout << "Run         : set branch address RunInfo"<<endl;
857        
858            return R;
859            
860  }  }
861  //--------------------------------------  //--------------------------------------
# Line 774  void PamLevel2::SetWhichTrees(TString de Line 871  void PamLevel2::SetWhichTrees(TString de
871          if(detlist.Contains("+ALL", TString::kIgnoreCase)){          if(detlist.Contains("+ALL", TString::kIgnoreCase)){
872                  CAL = true;                  CAL = true;
873                  TRK = true;                  TRK = true;
874                    TRK_L1 = false;
875                  TRG = true;                  TRG = true;
876                  TOF = true;                  TOF = true;
877                  S4  = true;                  S4  = true;
# Line 783  void PamLevel2::SetWhichTrees(TString de Line 881  void PamLevel2::SetWhichTrees(TString de
881          }else if( detlist.Contains("-ALL", TString::kIgnoreCase) ){          }else if( detlist.Contains("-ALL", TString::kIgnoreCase) ){
882                  CAL = false;                  CAL = false;
883                  TRK = false;                  TRK = false;
884                    TRK_L1 = false;
885                  TRG = false;                  TRG = false;
886                  TOF = false;                  TOF = false;
887                  S4  = false;                  S4  = false;
# Line 797  void PamLevel2::SetWhichTrees(TString de Line 896  void PamLevel2::SetWhichTrees(TString de
896          if( detlist.Contains("-TRK", TString::kIgnoreCase) )TRK = false;          if( detlist.Contains("-TRK", TString::kIgnoreCase) )TRK = false;
897          else if( detlist.Contains("+TRK", TString::kIgnoreCase) )TRK = true;          else if( detlist.Contains("+TRK", TString::kIgnoreCase) )TRK = true;
898                    
899            if( detlist.Contains("-TRK1", TString::kIgnoreCase) )TRK_L1 = false;
900            else if( detlist.Contains("+TRK1", TString::kIgnoreCase) )TRK_L1 = true;
901            
902          if( detlist.Contains("-TRG", TString::kIgnoreCase) )TRG = false;          if( detlist.Contains("-TRG", TString::kIgnoreCase) )TRG = false;
903          else if( detlist.Contains("+TRG", TString::kIgnoreCase) )TRG = true;          else if( detlist.Contains("+TRG", TString::kIgnoreCase) )TRG = true;
904                    
# Line 823  void PamLevel2::SetWhichTrees(TString de Line 925  void PamLevel2::SetWhichTrees(TString de
925  /**  /**
926   * Check if a file contains selected Pamela Level2 trees.   * Check if a file contains selected Pamela Level2 trees.
927   * @param name File name   * @param name File name
928   * @return Pointer to a TChain   * @return true if the file is ok.
929   */   */
930  Bool_t  PamLevel2::CheckLevel2File(TString name){  Bool_t  PamLevel2::CheckLevel2File(TString name){
931                    
932          Bool_t CAL__ok = false;          Bool_t CAL__ok = false;
933          Bool_t TRK__ok = false;          Bool_t TRK__ok = false;
934            Bool_t TRK_L1__ok = false;
935          Bool_t TRG__ok = false;          Bool_t TRG__ok = false;
936          Bool_t TOF__ok = false;          Bool_t TOF__ok = false;
937          Bool_t S4__ok  = false;          Bool_t S4__ok  = false;
# Line 846  Bool_t  PamLevel2::CheckLevel2File(TStri Line 949  Bool_t  PamLevel2::CheckLevel2File(TStri
949          while( (key = (TKey*)next()) ){          while( (key = (TKey*)next()) ){
950  //              cout << key->GetName() << endl;  //              cout << key->GetName() << endl;
951                  if( !strcmp(key->GetName(),"Calorimeter") )CAL__ok = true;                  if( !strcmp(key->GetName(),"Calorimeter") )CAL__ok = true;
952                  if( !strcmp(key->GetName(),"Tracker"    ) )TRK__ok = true;  //              if( !strcmp(key->GetName(),"Tracker"    ) )TRK__ok = true;
953                  if( !strcmp(key->GetName(),"Trigger"    ) )TRG__ok = true;                  if( !strcmp(key->GetName(),"Trigger"    ) )TRG__ok = true;
954                  if( !strcmp(key->GetName(),"ToF"        ) )TOF__ok = true;                  if( !strcmp(key->GetName(),"ToF"        ) )TOF__ok = true;
955                  if( !strcmp(key->GetName(),"S4"         ) )S4__ok = true;                  if( !strcmp(key->GetName(),"S4"         ) )S4__ok = true;
# Line 854  Bool_t  PamLevel2::CheckLevel2File(TStri Line 957  Bool_t  PamLevel2::CheckLevel2File(TStri
957                  if( !strcmp(key->GetName(),"Anticounter") )AC__ok = true;                  if( !strcmp(key->GetName(),"Anticounter") )AC__ok = true;
958                  if( !strcmp(key->GetName(),"OrbitalInfo") )ORB__ok = true;                  if( !strcmp(key->GetName(),"OrbitalInfo") )ORB__ok = true;
959                  if( !strcmp(key->GetName(),"Run"        ) )RUN__ok = true;                  if( !strcmp(key->GetName(),"Run"        ) )RUN__ok = true;
960                    
961                    if( !strcmp(key->GetName(),"Tracker"    ) ){
962                            TRK__ok = true;
963                            TTree *T = (TTree*)f->Get("Tracker");
964                            for(Int_t i=0; i<T->GetListOfBranches()->GetEntries(); i++){
965                                    TString name = T->GetListOfBranches()->At(i)->GetName();
966                                    if( !name.CompareTo("TrkLevel1") )TRK_L1__ok=true;
967                            };
968                    };
969    
970          };          };
971                                    
972          lk->Delete();          lk->Delete();
# Line 872  Bool_t  PamLevel2::CheckLevel2File(TStri Line 985  Bool_t  PamLevel2::CheckLevel2File(TStri
985                  cout << "File: "<< f->GetName() <<" discarded ---- Missing Tracker tree"<< endl;                  cout << "File: "<< f->GetName() <<" discarded ---- Missing Tracker tree"<< endl;
986                  FLAG = false;                  FLAG = false;
987          };          };
988            if(TRK_L1 && !TRK_L1__ok){
989                    cout << "File: "<< f->GetName() <<" discarded ---- Missing Tracker Level1 Branch"<< endl;
990                    FLAG = false;
991            };
992          if(TRG && !TRG__ok){          if(TRG && !TRG__ok){
993                  cout << "File: "<< f->GetName() <<" discarded ---- Missing Trigger tree"<< endl;                  cout << "File: "<< f->GetName() <<" discarded ---- Missing Trigger tree"<< endl;
994                  FLAG = false;                  FLAG = false;

Legend:
Removed from v.1.3  
changed lines
  Added in v.1.5

  ViewVC Help
Powered by ViewVC 1.1.23