/[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.5 by pam-fi, Mon Oct 9 08:57:42 2006 UTC revision 1.6 by pam-fi, Tue Oct 24 10:24:27 2006 UTC
# Line 37  PamTrack::PamTrack(TrkTrack* t, CaloTrkV Line 37  PamTrack::PamTrack(TrkTrack* t, CaloTrkV
37  PamLevel2::PamLevel2(){  PamLevel2::PamLevel2(){
38                    
39      trk_l1_obj  = this->TrkLevel1::GetTrkLevel1();            trk_l1_obj  = this->TrkLevel1::GetTrkLevel1();      
40          trk_obj     = this->TrkLevel2::GetTrkLevel2();      trk_obj     = this->TrkLevel2::GetTrkLevel2();
41          calo_obj    = this->CaloLevel2::GetCaloLevel2();      calo_obj    = this->CaloLevel2::GetCaloLevel2();
42      tof_obj     = this->ToFLevel2::GetToFLevel2();      tof_obj     = this->ToFLevel2::GetToFLevel2();
43      trig_obj    = this->TrigLevel2::GetTrigLevel2();      trig_obj    = this->TrigLevel2::GetTrigLevel2();
44      s4_obj      = this->S4Level2::GetS4Level2();      s4_obj      = this->S4Level2::GetS4Level2();
45      nd_obj      = this->NDLevel2::GetNDLevel2();      nd_obj      = this->NDLevel2::GetNDLevel2();
46      ac_obj      = this->AcLevel2::GetAcLevel2();      ac_obj      = this->AcLevel2::GetAcLevel2();
47          orb_obj     = this->OrbitalInfo::GetOrbitalInfo();      orb_obj     = this->OrbitalInfo::GetOrbitalInfo();
48    
49          run_obj     = new GL_RUN();      run_obj     = new GL_RUN();
50                
51          sorted_tracks = new TRefArray();      sorted_tracks = new TRefArray();
52        
53          CAL = true;      CAL = true;
54          TRK = true;      TRK = true;
55          TRG = true;      TRG = true;
56          TOF = true;      TOF = true;
57          S4  = true;      S4  = true;
58          ND  = true;      ND  = true;
59          AC  = true;      AC  = true;
60          ORB = true;      ORB = true;
61        
62          TRK_L1 = false;      TRK_L1 = false;
63        
64          Tout  = NULL;      Tout  = NULL;
65  };  };
66  /**  /**
67   * Destructor   * Destructor
68   */   */
69  PamLevel2::~PamLevel2(){  PamLevel2::~PamLevel2(){
70                                    
71          TrkLevel1::Clear();      TrkLevel1::Clear();
72                
73          TrkLevel2::Clear();      TrkLevel2::Clear();
74          CaloLevel2::Clear();      CaloLevel2::Clear();
75          ToFLevel2::Clear();      ToFLevel2::Clear();
76          TrigLevel2::Clear();      TrigLevel2::Clear();
77          S4Level2::Clear();      S4Level2::Clear();
78          NDLevel2::Clear();      NDLevel2::Clear();
79          AcLevel2::Clear();      AcLevel2::Clear();
80          OrbitalInfo::Clear();      OrbitalInfo::Clear();
81                
82          delete run_obj;      delete run_obj;
83                
84  //      delete sorted_tracks;  //      delete sorted_tracks;
85          sorted_tracks->Delete(); // clean the reference array      sorted_tracks->Delete(); // clean the reference array
86                    
87          if(Tout)Tout->Delete(); // delete loaded tree from memory      if(Tout)Tout->Delete(); // delete loaded tree from memory
88                    
89  };  };
90  /**  /**
# Line 92  PamLevel2::~PamLevel2(){ Line 92  PamLevel2::~PamLevel2(){
92   */   */
93  void PamLevel2::Clear(){  void PamLevel2::Clear(){
94                    
95          TrkLevel1::Clear();      TrkLevel1::Clear();
           
         TrkLevel2::Clear();  
         CaloLevel2::Clear();  
         ToFLevel2::Clear();  
         TrigLevel2::Clear();  
         S4Level2::Clear();  
         NDLevel2::Clear();  
         AcLevel2::Clear();  
         OrbitalInfo::Clear();  
           
         sorted_tracks->Delete(); // clean the reference array  
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(); // clean the reference array
107        
108  };  };
109    
110    
# Line 118  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 ){       if( CaloLevel2::ntrk()==0 ){
122                   cout << "PamLevel2::GetCaloStoredTrack(int) : requested tracker SeqNo "<< seqno <<" but no Calorimeter tracks are stored"<<endl;           cout << "PamLevel2::GetCaloStoredTrack(int) : requested tracker SeqNo "<< seqno <<" but no Calorimeter tracks are stored"<<endl;
123                   return NULL;           return NULL;
124           };       };
125                
126           CaloTrkVar *c = 0;       CaloTrkVar *c = 0;
127           Int_t it_calo=0;       Int_t it_calo=0;
128                
129           do{       do{
130                   c = CaloLevel2::GetCaloTrkVar(it_calo);           c = CaloLevel2::GetCaloTrkVar(it_calo);
131                   it_calo++;           it_calo++;
132           } while( seqno != c->trkseqno && it_calo < CaloLevel2::ntrk());               } while( c && seqno != c->trkseqno && it_calo < CaloLevel2::ntrk());      
133                
134           if(seqno != c->trkseqno){       if(!c || seqno != c->trkseqno){
135                   c = 0;           c = 0;
136                   if(seqno!=-1)cout << "PamLevel2::GetCaloStoredTrack(int) : requested tracker SeqNo "<< seqno <<" does not match Calorimeter stored tracks"<<endl;           if(seqno!=-1)cout << "PamLevel2::GetCaloStoredTrack(int) : requested tracker SeqNo "<< seqno <<" does not match Calorimeter stored tracks"<<endl;
137           };       };
138           return c;       return c;
139        
140   };   };
141  //--------------------------------------  //--------------------------------------
142   //   //
# Line 148  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 ){       if( ToFLevel2::ntrk()==0 ){
152                   cout << "PamLevel2::GetToFStoredTrack(int) : requested tracker SeqNo "<< seqno <<" but no ToF tracks are stored"<<endl;           cout << "PamLevel2::GetToFStoredTrack(int) : requested tracker SeqNo "<< seqno <<" but no ToF tracks are stored"<<endl;
153                   return NULL;           return NULL;
154           };       };
155                
156           ToFTrkVar *c = 0;       ToFTrkVar *c = 0;
157           Int_t it_tof=0;       Int_t it_tof=0;
158                
159           do{       do{
160                   c = ToFLevel2::GetToFTrkVar(it_tof);           c = ToFLevel2::GetToFTrkVar(it_tof);
161                   it_tof++;           it_tof++;
162           } while( seqno != c->trkseqno && it_tof < ToFLevel2::ntrk());         } while( c && seqno != c->trkseqno && it_tof < ToFLevel2::ntrk());
163                
164           if(seqno != c->trkseqno){       if(!c || seqno != c->trkseqno){
165                   c = 0;           c = 0;
166                   if(seqno!=-1)cout << "PamLevel2::GetToFStoredTrack(int) : requested tracker SeqNo "<< seqno <<" does not match ToF stored tracks"<<endl;           if(seqno!=-1)cout << "PamLevel2::GetToFStoredTrack(int) : requested tracker SeqNo "<< seqno <<" does not match ToF stored tracks"<<endl;
167           };       };
168           return c;       return c;
169        
170   };   };
171    
172  //--------------------------------------  //--------------------------------------
# Line 178  void PamLevel2::Clear(){ Line 178  void PamLevel2::Clear(){
178   */   */
179   PamTrack* PamLevel2::GetPamTrackAlong(TrkTrack* t){   PamTrack* PamLevel2::GetPamTrackAlong(TrkTrack* t){
180                    
181           CaloTrkVar *c = 0;       CaloTrkVar *c = 0;
182           ToFTrkVar  *o = 0;       ToFTrkVar  *o = 0;
183                
184           if(CAL) c = GetCaloStoredTrack(t->GetSeqNo());       if(CAL) c = GetCaloStoredTrack(t->GetSeqNo());
185           if(TOF) 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);
189                
190           return track;       return track;
191    
192   };   };
193  //--------------------------------------  //--------------------------------------
# Line 202  void PamLevel2::Clear(){ Line 202  void PamLevel2::Clear(){
202    
203  PamTrack* PamLevel2::GetStoredTrack(Int_t itrk){  PamTrack* PamLevel2::GetStoredTrack(Int_t itrk){
204            
205          PamTrack *track = 0;      PamTrack *track = 0;
206        
207          if( itrk >=0 && itrk < TrkLevel2::ntrk() ){      if( itrk >=0 && itrk < TrkLevel2::ntrk() ){
                   
                 TrkTrack *t = TrkLevel2::GetStoredTrack(itrk);  
                 track = GetPamTrackAlong(t);  
208                    
209          }else{          TrkTrack *t = TrkLevel2::GetStoredTrack(itrk);
210                  cout << "PamLevel2::GetStoredTrack(int) : tracker track SeqNo "<< itrk <<" does not exist (GetNTracks() = "<<TrkLevel2::GetNTracks()<<")"<<endl;          track = GetPamTrackAlong(t);
         };  
   
         return track;  
211                    
212        }else{
213            cout << "PamLevel2::GetStoredTrack(int) : tracker track SeqNo "<< itrk <<" does not exist (GetNTracks() = "<<TrkLevel2::GetNTracks()<<")"<<endl;
214        };
215        
216        return track;
217        
218  }  }
219  //--------------------------------------  //--------------------------------------
220  //  //
# Line 234  PamTrack* PamLevel2::GetStoredTrack(Int_ Line 234  PamTrack* PamLevel2::GetStoredTrack(Int_
234  void PamLevel2::SortTracks(TString how){  void PamLevel2::SortTracks(TString how){
235    
236    //Save current Object count    //Save current Object count
237          Int_t ObjectNumber = TProcessID::GetObjectCount();      Int_t ObjectNumber = TProcessID::GetObjectCount();
238                
239          sorted_tracks->Delete(); //temporaneo???      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;      if( !CAL &&  use_CAL) use_CAL = false;
247          if( !TOF &&  use_TOF) use_TOF = false;      if( !TOF &&  use_TOF) use_TOF = false;
248                
249          if( !TRK ){      if( !TRK ){
250                  cout << "SortTracks() : without tracker does not work!!! (not yet)" << endl;          cout << "SortTracks() : without tracker does not work!!! (not yet)" << endl;
251                  return;          return;
252          };      };
253        
254        for(Int_t i=0; i < TrkLevel2::GetNTracks(); i++){
255            
256            TrkTrack *ts = 0;
257                    
         for(Int_t i=0; i < TrkLevel2::GetNTracks(); i++){  
   
                 TrkTrack *ts = 0;  
   
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;          CaloTrkVar *cp = 0;
263                  ToFTrkVar  *op = 0;          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;              CaloTrkVar *ci = 0;
272                          ToFTrkVar  *oi = 0;              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
276                          Int_t ti_score = 0;  //image track              Int_t ti_score = 0;  //image track
277                                                                
278              // ------------------------              // ------------------------
279              // calorimeter check              // calorimeter check
280              // ------------------------              // ------------------------
281                  // check the Y spatial residual on the first calorimeter plane              // check the Y spatial residual on the first calorimeter plane
282                  // (cut on calorimeter variables from Emiliano)              // (cut on calorimeter variables from Emiliano)
283                          if(              if(
284                                  use_CAL            &&                  use_CAL            &&
285                                  npcfit[1] > 15     &&   //no. of fit planes on Y view                  npcfit[1] > 15     &&   //no. of fit planes on Y view
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());                  cp = GetCaloStoredTrack(tp->GetSeqNo());
290                                  ci = GetCaloStoredTrack(ti->GetSeqNo());                  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                    
295                                  if(resy_p <= resy_i) tp_score++;                  if(resy_p <= resy_i) tp_score++;
296                                  else                 ti_score++;                  else                 ti_score++;
297                          };              };
298              // ------------------------              // ------------------------
299              // TOF check              // TOF check
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                          if( use_TOF ){              if( use_TOF ){
304                                            
305                                  Int_t nphit_p =0;                  Int_t nphit_p =0;
306                                  Int_t nphit_i =0;                  Int_t nphit_i =0;
307                                                            
308                                  op = GetToFStoredTrack(tp->GetSeqNo());                  op = GetToFStoredTrack(tp->GetSeqNo());
309                                  oi = GetToFStoredTrack(ti->GetSeqNo());                  oi = GetToFStoredTrack(ti->GetSeqNo());
310                                                    
311  /*                              cout << "track: npmtadc "<< op->npmtadc << endl;  /*                              cout << "track: npmtadc "<< op->npmtadc << endl;
312                                  cout << "track: npmttdc "<< op->npmttdc << endl;                                  cout << "track: npmttdc "<< op->npmttdc << endl;
313                                  cout << "image: npmtadc "<< oi->npmtadc << endl;                                  cout << "image: npmtadc "<< oi->npmtadc << endl;
314                                  cout << "image: npmttdc "<< oi->npmttdc << endl;*/                                  cout << "image: npmttdc "<< oi->npmttdc << endl;*/
315                                                    
316                                  for (Int_t ih=0; ih < op->npmtadc; ih++){                  for (Int_t ih=0; ih < op->npmtadc; ih++){
317                                          Int_t pl = GetPlaneIndex( (op->pmtadc).At(ih) );                      Int_t pl = GetPlaneIndex( (op->pmtadc).At(ih) );
318                                          if(pl == 1 || pl == 2 || pl == 5)nphit_p++;                      if(pl == 1 || pl == 2 || pl == 5)nphit_p++;
319                                  };                  };
320                                                                            
321                                  for (Int_t ih=0; ih < oi->npmtadc; ih++){                  for (Int_t ih=0; ih < oi->npmtadc; ih++){
322                                          Int_t pl = GetPlaneIndex( (oi->pmtadc).At(ih) );                      Int_t pl = GetPlaneIndex( (oi->pmtadc).At(ih) );
323                                          if(pl == 1 || pl == 2 || pl == 5)nphit_i++;                          if(pl == 1 || pl == 2 || pl == 5)nphit_i++;
324                                  };                  };
325                                                    
326                                  if(                  if(
327                                          use_TOF            &&                      use_TOF            &&
328                                          (nphit_p+nphit_i) !=0 &&                              (nphit_p+nphit_i) !=0 &&    
329                                          true){                      true){
330                                                                
331                                          if( nphit_p >= nphit_i) tp_score++;                      if( nphit_p >= nphit_i) tp_score++;
332                                          else                                              ti_score++;                      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
338              // ------------------------              // ------------------------
339                  // chi**2 difference is not always large enough to distinguish among              // chi**2 difference is not always large enough to distinguish among
340                  // the real track and its image.              // the real track and its image.
341                  // Tracker check will be applied always when calorimeter and tof information is ambiguous.              // Tracker check will be applied always when calorimeter and tof information is ambiguous.
342                          if(use_TRK){              if(use_TRK){
343                                  if(      tp->chi2 > 0 && tp->chi2 < ti->chi2 ) tp_score++ ;                  if(      tp->chi2 > 0 && tp->chi2 < ti->chi2 ) tp_score++ ;
344                                  else if( ti->chi2 > 0 && ti->chi2 < tp->chi2 ) ti_score++ ;                  else if( ti->chi2 > 0 && ti->chi2 < tp->chi2 ) ti_score++ ;
345                          };              };
346                
347              // ------------------------              // ------------------------
348              // the winner is....              // the winner is....
349              // ------------------------                  // ------------------------    
350                          if      (tp_score > ti_score) ts = tp;//the track sorted by the tracker!!              if      (tp_score > ti_score) ts = tp;//the track sorted by the tracker!!
351                          else if (tp_score < ti_score) ts = ti;//its image!!              else if (tp_score < ti_score) ts = ti;//its image!!
352                          else {              else {
353                                  ts = tp;                  ts = tp;
354  //                              cout << "Warning - track image ambiguity not solved" << endl;  //                              cout << "Warning - track image ambiguity not solved" << endl;
355  //                              cout << ts->GetNtot() << " "<< ts->chi2 << " " << npcfit[1] << " "<< nphit_p << endl;  //                              cout << ts->GetNtot() << " "<< ts->chi2 << " " << npcfit[1] << " "<< nphit_p << endl;
356                          };              };
357                
358                  }else{          }else{
359                          ts = tp;              ts = tp;
360                  };          };
361                            
362  //              cout <<" SortTracks() "<<i<<" -- "<<ts<<endl;  //              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;  //              cout << "SortTracks:: sorted_tracks->Add(it) "<<i<<" "<<ts<<endl;
365                            
366          };      };
367    //Restore Object count      //Restore Object count
368    //To save space in the table keeping track of all referenced objects      //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      //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.      //object count to what it was at the beginning of the event.
371          TProcessID::SetObjectCount(ObjectNumber);      TProcessID::SetObjectCount(ObjectNumber);
372        
373  };  };
374  //--------------------------------------  //--------------------------------------
375  //  //
# Line 399  PamTrack *PamLevel2::GetTrack(int it){ Line 399  PamTrack *PamLevel2::GetTrack(int it){
399                    
400  //  *-*-*-*-*-*-*  //  *-*-*-*-*-*-*
401  //      SortTracks("+CAL+TOF");  //      SortTracks("+CAL+TOF");
402          SortTracks("+CAL+TRK");//TEMP!!!!!!!!!!!!!      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() && it<sorted_tracks->GetEntriesFast() ){
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;          track = GetPamTrackAlong(t);
410                  track = GetPamTrackAlong(t);      }else{
411          }else{          cout << "PamLevel2::GetTrack(int) : tracker track SeqNo "<< it <<" does not exist (GetNTracks() = "<<TrkLevel2::GetNTracks()<<")"<<endl;
412                  cout << "PamLevel2::GetTrack(int) : tracker track SeqNo "<< it <<" does not exist (GetNTracks() = "<<TrkLevel2::GetNTracks()<<")"<<endl;      };
413          };      
414                return track;
415          return track;      
   
416  };  };
417    
418  //--------------------------------------  //--------------------------------------
# Line 461  TTree *PamLevel2::GetPamTree(TFile *f, T Line 460  TTree *PamLevel2::GetPamTree(TFile *f, T
460  //      cout << "WARNING!!! -- obsolete method -- \n";  //      cout << "WARNING!!! -- obsolete method -- \n";
461  //      cout << "better use TChain *PamLevel2::GetPamTree(TList*, TString) \n";  //      cout << "better use TChain *PamLevel2::GetPamTree(TList*, TString) \n";
462                    
463          TTree *Trout =0;      TTree *Trout =0;
464                
465          SetWhichTrees(detlist);      SetWhichTrees(detlist);
466  // Tracker  // Tracker
467      TTree *T = (TTree*)f->Get("Tracker");      TTree *T = (TTree*)f->Get("Tracker");
468      if(T && TRK) {      if(T && TRK) {
469                  if(TRK_L1){          if(TRK_L1){
470                          T->SetBranchAddress("TrkLevel1", GetPointerToTrk(1));              T->SetBranchAddress("TrkLevel1", GetPointerToTrk(1));
471                          cout << "Tracker      : set branch address TrkLevel1"<<endl;              cout << "Tracker      : set branch address TrkLevel1"<<endl;
472                  };          };
473                  T->SetBranchAddress("TrkLevel2", GetPointerToTrk(2));          T->SetBranchAddress("TrkLevel2", GetPointerToTrk(2));
474                  cout << "Tracker      : set branch address TrkLevel2"<<endl;          cout << "Tracker      : set branch address TrkLevel2"<<endl;
475                  Trout=T;          Trout=T;
476      }else{      }else{
477          cout << "Tracker      : missing tree"<<endl;          cout << "Tracker      : missing tree"<<endl;
478      };      };
# Line 566  TTree *PamLevel2::GetPamTree(TFile *f, T Line 565  TTree *PamLevel2::GetPamTree(TFile *f, T
565   */   */
566  TList*  PamLevel2::GetListOfLevel2Files(TString ddir, TString flisttxt = ""){  TList*  PamLevel2::GetListOfLevel2Files(TString ddir, TString flisttxt = ""){
567                    
568          TString wdir = gSystem->WorkingDirectory();          TString wdir = gSystem->WorkingDirectory();
569                
570          if(ddir=="")ddir = wdir;      if(ddir=="")ddir = wdir;
571  //      TSystemDirectory *datadir = new TSystemDirectory(gSystem->BaseName(ddir),ddir);  //      TSystemDirectory *datadir = new TSystemDirectory(gSystem->BaseName(ddir),ddir);
572          cout << "Level2 data directory : "<<  ddir << endl;      cout << "Level2 data directory : "<<  ddir << endl;
573                        
574          TList *contents  = new TList; // create output list      TList *contents  = new TList; // create output list
575          contents->SetOwner();      contents->SetOwner();
576        
577        char *fullpath;
578        
579        // if no input file list is given:  
580        if ( flisttxt != "" ){
581            
582            if( !gSystem->IsFileInIncludePath(flisttxt,&fullpath) )return 0;
583                    
         char *fullpath;  
                   
         // if no input file list is given:        
         if ( flisttxt != "" ){  
                                   
                 if( !gSystem->IsFileInIncludePath(flisttxt,&fullpath) )return 0;  
                   
584  //              flisttxt = gSystem->ConcatFileName(gSystem->DirName(flisttxt),gSystem->BaseName(flisttxt));  //              flisttxt = gSystem->ConcatFileName(gSystem->DirName(flisttxt),gSystem->BaseName(flisttxt));
585                  flisttxt = fullpath;          flisttxt = fullpath;
                   
                 if( !gSystem->ChangeDirectory(ddir) )return 0;  
586                    
587                  cout <<"Input file list : " << flisttxt <<endl;          if( !gSystem->ChangeDirectory(ddir) )return 0;
588                  ifstream in;          
589                  in.open(flisttxt, ios::in); //open input file list          cout <<"Input file list : " << flisttxt <<endl;
590                  while (1) {          ifstream in;
591                          TString file;          in.open(flisttxt, ios::in); //open input file list
592                          in >> file;          while (1) {
593                          if (!in.good()) break;              TString file;
594                          if( gSystem->IsFileInIncludePath(file,&fullpath) ){              in >> file;
595                if (!in.good()) break;
596                if( gSystem->IsFileInIncludePath(file,&fullpath) ){
597  //                              contents->Add(new TSystemDirectory(fullpath,ddir)); // add file to the list  //                              contents->Add(new TSystemDirectory(fullpath,ddir)); // add file to the list
598  //                              contents->Add(new TSystemFile(fullpath,ddir)); // add file to the list  //                              contents->Add(new TSystemFile(fullpath,ddir)); // add file to the list
599                                  contents->Add(new TSystemFile(fullpath,gSystem->DirName(fullpath)));// add file to the list                  contents->Add(new TSystemFile(fullpath,gSystem->DirName(fullpath)));// add file to the list
600                          }else{              }else{
601                                  cout << "warning! --- File "<<file<<" does not exists"<< endl;                  cout << "warning! --- File "<<file<<" does not exists"<< endl;
602                          };              };
603                  };          };
604                  in.close();          in.close();
605                            
606          }else{      }else{
607                    
608                  cout << "No input file list given."<<endl;          cout << "No input file list given."<<endl;
609                  cout << "Check for existing root files."<<endl;          cout << "Check for existing root files."<<endl;
610  //              cout << "Warking directory: "<< gSystem->WorkingDirectory()<< endl;  //              cout << "Warking directory: "<< gSystem->WorkingDirectory()<< endl;
611                            
612                  TSystemDirectory *datadir = new TSystemDirectory(gSystem->BaseName(ddir),ddir);          TSystemDirectory *datadir = new TSystemDirectory(gSystem->BaseName(ddir),ddir);
613                  TList *temp = datadir->GetListOfFiles();          TList *temp = datadir->GetListOfFiles();
614  //              temp->Print();  //              temp->Print();
615  //              cout << "*************************************" << endl;  //              cout << "*************************************" << endl;
                   
                 TIter next(temp);  
                 TSystemFile *questo = 0;  
                   
                   
                 while ( (questo = (TSystemFile*) next()) ) {  
                         TString name =  questo-> GetName();  
                         if( name.EndsWith(".root") ){  
                                 char *fullpath;  
                                 gSystem->IsFileInIncludePath(name,&fullpath);  
                                 contents->Add(new TSystemFile(fullpath,gSystem->DirName(fullpath)));  
                         };  
                 }  
                 delete temp;  
                 delete datadir;  
616                    
617          };          TIter next(temp);
618          gSystem->ChangeDirectory(wdir); // back to the working directory          TSystemFile *questo = 0;
619            
620            
621            while ( (questo = (TSystemFile*) next()) ) {
622                TString name =  questo-> GetName();
623                if( name.EndsWith(".root") ){
624                    char *fullpath;
625                    gSystem->IsFileInIncludePath(name,&fullpath);
626                    contents->Add(new TSystemFile(fullpath,gSystem->DirName(fullpath)));
627                };
628            }
629            delete temp;
630            delete datadir;
631            
632        };
633        gSystem->ChangeDirectory(wdir); // back to the working directory
634  //      cout << endl << "Selected files:" << endl;  //      cout << endl << "Selected files:" << endl;
635  //      contents->Print();  //      contents->Print();
636          cout << contents->GetEntries()<<" files selected\n";      cout << contents->GetEntries()<<" files selected\n";
637  //      cout << endl;  //      cout << endl;
638  //      cout << "Working directory: "<< gSystem->WorkingDirectory()<< endl;  //      cout << "Working directory: "<< gSystem->WorkingDirectory()<< endl;
639          return contents;      return contents;
640  };  };
641  //--------------------------------------  //--------------------------------------
642  //  //
# Line 652  TList*  PamLevel2::GetListOfLevel2Files( Line 651  TList*  PamLevel2::GetListOfLevel2Files(
651  TChain *PamLevel2::GetPamTree(TList *fl, TString detlist="+ALL"){  TChain *PamLevel2::GetPamTree(TList *fl, TString detlist="+ALL"){
652    
653  //      TChain *Tout=0;  //      TChain *Tout=0;
654          if(Tout)Tout->Delete();      if(Tout)Tout->Delete();
655          Tout = NULL;      Tout = NULL;
656                
657          SetWhichTrees(detlist);      SetWhichTrees(detlist);
658                
659          TChain *T = 0;        TChain *T = 0;      
660          TChain *C = 0;      TChain *C = 0;
661          TChain *O = 0;      TChain *O = 0;
662          TChain *R = 0;      TChain *R = 0;
663          TChain *S = 0;      TChain *S = 0;
664          TChain *N = 0;      TChain *N = 0;
665          TChain *A = 0;      TChain *A = 0;
666          TChain *B = 0;      TChain *B = 0;
667                
668          if(TRK) T = new TChain("Tracker");            if(TRK) T = new TChain("Tracker");  
669          if(CAL) C = new TChain("Calorimeter");      if(CAL) C = new TChain("Calorimeter");
670          if(TOF) O = new TChain("ToF");      if(TOF) O = new TChain("ToF");
671          if(TRG) R = new TChain("Trigger");      if(TRG) R = new TChain("Trigger");
672          if(S4)  S = new TChain("S4");      if(S4)  S = new TChain("S4");
673          if(ND)  N = new TChain("NeutronD");      if(ND)  N = new TChain("NeutronD");
674          if(AC)  A = new TChain("Anticounter");      if(AC)  A = new TChain("Anticounter");
675          if(ORB) B = new TChain("OrbitalInfo");      if(ORB) B = new TChain("OrbitalInfo");
676                
677          // loop over files and create chains          // loop over files and create chains        
678          TIter next(fl);      TIter next(fl);
679          TSystemFile *questo = 0;      TSystemFile *questo = 0;
680          while ( (questo = (TSystemFile*) next()) ) {      while ( (questo = (TSystemFile*) next()) ) {
681                  TString name =  questo->GetName();          TString name =  questo->GetName();
682  //              cout << "File: "<< name << endl;  //              cout << "File: "<< name << endl;
683                  if( CheckLevel2File(name) ){          if( CheckLevel2File(name) ){
684                          if(TRK) T->Add(name);              if(TRK) T->Add(name);
685                          if(CAL) C->Add(name);              if(CAL) C->Add(name);
686                          if(TOF) O->Add(name);              if(TOF) O->Add(name);
687                          if(TRG) R->Add(name);              if(TRG) R->Add(name);
688                          if(S4)  S->Add(name);              if(S4)  S->Add(name);
689                          if(ND)  N->Add(name);              if(ND)  N->Add(name);
690                          if(AC)  A->Add(name);              if(AC)  A->Add(name);
691                          if(ORB) B->Add(name);              if(ORB) B->Add(name);
                 };  
         }  
                   
             // Tracker  
         if(TRK) if(!Tout)Tout=T;  
               
         // Calorimeter  
         if(CAL) {                
                 if(!Tout)Tout=C;  
                 else Tout->AddFriend("Calorimeter");  
692          };          };
693                }
694        
695        cout << "done chain \n";
696    
697        // Tracker
698        if(TRK) if(!Tout)Tout=T;
699        // Calorimeter
700        if(CAL) {          
701            if(!Tout)Tout=C;
702            else Tout->AddFriend("Calorimeter");
703        };
704      // ToF          // ToF    
705          if(TOF) {      if(TOF) {
706                  if(!Tout)Tout=O;          if(!Tout)Tout=O;
707                  else Tout->AddFriend("ToF");          else Tout->AddFriend("ToF");
708          };      };
709      // Trigger      // Trigger
710          if(TRG) {      if(TRG) {
711                  if(!Tout)Tout=O;          if(!Tout)Tout=O;
712                  else Tout->AddFriend("Trigger");          else Tout->AddFriend("Trigger");
713          };      };
714      // S4      // S4
715          if(S4) {      if(S4) {
716                  if(!Tout)Tout=O;          if(!Tout)Tout=O;
717                  else Tout->AddFriend("S4");          else Tout->AddFriend("S4");
718          };      };
719      // Neutron Detector      // Neutron Detector
720          if(ND) {      if(ND) {
721                  if(!Tout)Tout=O;          if(!Tout)Tout=O;
722                  else Tout->AddFriend("NeutronD");          else Tout->AddFriend("NeutronD");
723          };      };
724      // Anticounters      // Anticounters
725          if(AC) {      if(AC) {
726                  if(!Tout)Tout=O;          if(!Tout)Tout=O;
727                  else Tout->AddFriend("Anticounter");          else Tout->AddFriend("Anticounter");
728          };      };
729      // OrbitalInfo      // OrbitalInfo
730          if(ORB) {      if(ORB) {
731                  if(!Tout)Tout=O;          if(!Tout)Tout=O;
732                  else Tout->AddFriend("OrbitalInfo");          else Tout->AddFriend("OrbitalInfo");
733          };      };
734                
735          cout<<endl<<" Number of entries: "<<Tout->GetEntries()<<endl<<endl;  //    cout<<endl<<" Number of entries: "<<Tout->GetEntries()<<endl<<endl;
736                
737          PamLevel2::SetBranchAddress();      if( Tout->GetEntries() )PamLevel2::SetBranchAddress();
738                
739          return Tout;      return Tout;
740  }  }
741  //--------------------------------------  //--------------------------------------
742  //  //
# Line 748  TChain *PamLevel2::GetPamTree(TList *fl, Line 747  TChain *PamLevel2::GetPamTree(TList *fl,
747   */   */
748  void PamLevel2::SetBranchAddress(){  void PamLevel2::SetBranchAddress(){
749      // Tracker      // Tracker
750          if(TRK) {      if(TRK) {
751                  if(TRK_L1){          if(TRK_L1){
752                          Tout->SetBranchAddress("TrkLevel1", GetPointerToTrk(1));              Tout->SetBranchAddress("TrkLevel1", GetPointerToTrk(1));
753                          cout << "Tracker      : set branch address TrkLevel1"<<endl;              cout << "Tracker      : set branch address TrkLevel1"<<endl;
                 };  
                 Tout->SetBranchAddress("TrkLevel2", GetPointerToTrk(2));  
                 cout << "Tracker      : set branch address TrkLevel2"<<endl;  
754          };          };
755                        Tout->SetBranchAddress("TrkLevel2", GetPointerToTrk(2));
756          // Calorimeter          cout << "Tracker      : set branch address TrkLevel2"<<endl;
757          if(CAL) {      };
758                  Tout->SetBranchAddress("CaloLevel2", GetPointerToCalo());      
759                  cout << "Calorimeter  : set branch address CaloLevel2"<<endl;      // Calorimeter
760          };      if(CAL) {
761                    Tout->SetBranchAddress("CaloLevel2", GetPointerToCalo());
762            cout << "Calorimeter  : set branch address CaloLevel2"<<endl;
763        };
764        
765      // ToF          // ToF    
766          if(TOF) {      if(TOF) {
767                  Tout->SetBranchAddress("ToFLevel2", GetPointerToToF());          Tout->SetBranchAddress("ToFLevel2", GetPointerToToF());
768                  cout << "ToF          : set branch address ToFLevel2"<<endl;          cout << "ToF          : set branch address ToFLevel2"<<endl;
769          };      };
770      // Trigger      // Trigger
771          if(TRG) {      if(TRG) {
772                  Tout->SetBranchAddress("TrigLevel2", GetPointerToTrig());          Tout->SetBranchAddress("TrigLevel2", GetPointerToTrig());
773                  cout << "Trigger      : set branch address TrigLevel2"<<endl;          cout << "Trigger      : set branch address TrigLevel2"<<endl;
774          };      };
775      // S4      // S4
776          if(S4) {      if(S4) {
777                  Tout->SetBranchAddress("S4Level2", GetPointerToS4());          Tout->SetBranchAddress("S4Level2", GetPointerToS4());
778                  cout << "S4           : set branch address S4Level2"<<endl;          cout << "S4           : set branch address S4Level2"<<endl;
779          };      };
780      // Neutron Detector      // Neutron Detector
781          if(ND) {      if(ND) {
782                  Tout->SetBranchAddress("NDLevel2", GetPointerToND());          Tout->SetBranchAddress("NDLevel2", GetPointerToND());
783                  cout << "NeutronD     : set branch address NDLevel2"<<endl;          cout << "NeutronD     : set branch address NDLevel2"<<endl;
784          };      };
785      // Anticounters      // Anticounters
786          if(AC) {      if(AC) {
787                  Tout->SetBranchAddress("AcLevel2", GetPointerToAc());          Tout->SetBranchAddress("AcLevel2", GetPointerToAc());
788                  cout << "Anticounter  : set branch address AcLevel2"<<endl;          cout << "Anticounter  : set branch address AcLevel2"<<endl;
789          };      };
790      // OrbitalInfo      // OrbitalInfo
791          if(ORB) {      if(ORB) {
792                  Tout->SetBranchAddress("OrbitalInfo", GetPointerToOrb());          Tout->SetBranchAddress("OrbitalInfo", GetPointerToOrb());
793                  cout << "OrbitalInfo  : set branch address OrbitalInfo"<<endl;          cout << "OrbitalInfo  : set branch address OrbitalInfo"<<endl;
794          };      };
795                
796  }  }
797    
798  //--------------------------------------  //--------------------------------------
# Line 802  void PamLevel2::SetBranchAddress(){ Line 801  void PamLevel2::SetBranchAddress(){
801  //--------------------------------------  //--------------------------------------
802  void *PamLevel2::GetPointerTo(const char* c ){  void *PamLevel2::GetPointerTo(const char* c ){
803  //      cout << "objname "<< objname << endl;  //      cout << "objname "<< objname << endl;
804          TString objname = c;      TString objname = c;
805          if(!objname.CompareTo("TrkLevel1"))return &trk_l1_obj;      if(!objname.CompareTo("TrkLevel1"))return &trk_l1_obj;
806          if(!objname.CompareTo("TrkLevel2"))return &trk_obj;      if(!objname.CompareTo("TrkLevel2"))return &trk_obj;
807                
808          return NULL;      return NULL;
809  };  };
810  //--------------------------------------  //--------------------------------------
811  //  //
# Line 819  void *PamLevel2::GetPointerTo(const char Line 818  void *PamLevel2::GetPointerTo(const char
818   */   */
819  TChain *PamLevel2::GetRunTree(TList *fl){  TChain *PamLevel2::GetRunTree(TList *fl){
820                    
821          TChain *R = new TChain("Run");      TChain *R = new TChain("Run");
822        
823          // loop over files and create chains          // loop over files and create chains        
824          TIter next(fl);      TIter next(fl);
825          TSystemFile *questo = 0;      TSystemFile *questo = 0;
826          while ( (questo = (TSystemFile*) next()) ) {      while ( (questo = (TSystemFile*) next()) ) {
827                  TString name =  questo->GetName();          TString name =  questo->GetName();
828  //              cout << "File: "<< name << endl;  //              cout << "File: "<< name << endl;
829                  if( CheckLevel2File(name) ){          if( CheckLevel2File(name) ){
830                          R->Add(name);              R->Add(name);
831                  };          };
832          }      }
833                
834          R->SetBranchAddress("RunInfo", GetPointerToRun());      R->SetBranchAddress("RunInfo", GetPointerToRun());
835          cout << "Run         : set branch address RunInfo"<<endl;      cout << "Run         : set branch address RunInfo"<<endl;
836            
837          return R;      return R;
838            
839  }  }
840  //--------------------------------------  //--------------------------------------
# Line 850  TChain *PamLevel2::GetRunTree(TList *fl) Line 849  TChain *PamLevel2::GetRunTree(TList *fl)
849  TTree *PamLevel2::GetRunTree(TFile *f){  TTree *PamLevel2::GetRunTree(TFile *f){
850    
851    
852          TTree *R = (TTree*)f->Get("Run");      TTree *R = (TTree*)f->Get("Run");
853        
854          R->SetBranchAddress("RunInfo", GetPointerToRun());      R->SetBranchAddress("RunInfo", GetPointerToRun());
855          cout << "Run         : set branch address RunInfo"<<endl;      cout << "Run         : set branch address RunInfo"<<endl;
856            
857          return R;      return R;
858            
859  }  }
860  //--------------------------------------  //--------------------------------------
# Line 868  TTree *PamLevel2::GetRunTree(TFile *f){ Line 867  TTree *PamLevel2::GetRunTree(TFile *f){
867  */  */
868  void PamLevel2::SetWhichTrees(TString detlist){  void PamLevel2::SetWhichTrees(TString detlist){
869                    
870          if(detlist.Contains("+ALL", TString::kIgnoreCase)){      if(detlist.Contains("+ALL", TString::kIgnoreCase)){
871                  CAL = true;          CAL = true;
872                  TRK = true;          TRK = true;
873                  TRK_L1 = false;          TRK_L1 = false;
874                  TRG = true;          TRG = true;
875                  TOF = true;          TOF = true;
876                  S4  = true;          S4  = true;
877                  ND  = true;          ND  = true;
878                  AC  = true;          AC  = true;
879                  ORB = true;          ORB = true;
880          }else if( detlist.Contains("-ALL", TString::kIgnoreCase) ){      }else if( detlist.Contains("-ALL", TString::kIgnoreCase) ){
881                  CAL = false;          CAL = false;
882                  TRK = false;          TRK = false;
883                  TRK_L1 = false;          TRK_L1 = false;
884                  TRG = false;          TRG = false;
885                  TOF = false;          TOF = false;
886                  S4  = false;          S4  = false;
887                  ND  = false;          ND  = false;
888                  AC  = false;          AC  = false;
889                  ORB = false;          ORB = false;
890          };      };
891                
892          if( detlist.Contains("-CAL", TString::kIgnoreCase) )CAL = false;      if( detlist.Contains("-CAL", TString::kIgnoreCase) )CAL = false;
893          else if( detlist.Contains("+CAL", TString::kIgnoreCase) )CAL = true;      else if( detlist.Contains("+CAL", TString::kIgnoreCase) )CAL = true;
894                
895          if( detlist.Contains("-TRK", TString::kIgnoreCase) )TRK = false;      if( detlist.Contains("-TRK", TString::kIgnoreCase) )TRK = false;
896          else if( detlist.Contains("+TRK", TString::kIgnoreCase) )TRK = true;      else if( detlist.Contains("+TRK", TString::kIgnoreCase) )TRK = true;
897                
898          if( detlist.Contains("-TRK1", TString::kIgnoreCase) )TRK_L1 = false;      if( detlist.Contains("-TRK1", TString::kIgnoreCase) )TRK_L1 = false;
899          else if( detlist.Contains("+TRK1", TString::kIgnoreCase) )TRK_L1 = true;      else if( detlist.Contains("+TRK1", TString::kIgnoreCase) )TRK_L1 = true;
900                
901          if( detlist.Contains("-TRG", TString::kIgnoreCase) )TRG = false;      if( detlist.Contains("-TRG", TString::kIgnoreCase) )TRG = false;
902          else if( detlist.Contains("+TRG", TString::kIgnoreCase) )TRG = true;      else if( detlist.Contains("+TRG", TString::kIgnoreCase) )TRG = true;
903                
904          if( detlist.Contains("-TOF", TString::kIgnoreCase) )TOF = false;      if( detlist.Contains("-TOF", TString::kIgnoreCase) )TOF = false;
905          else if( detlist.Contains("+TOF", TString::kIgnoreCase) )TOF = true;      else if( detlist.Contains("+TOF", TString::kIgnoreCase) )TOF = true;
906                
907          if( detlist.Contains("-S4",  TString::kIgnoreCase) )S4  = false;      if( detlist.Contains("-S4",  TString::kIgnoreCase) )S4  = false;
908          else if( detlist.Contains("+S4",  TString::kIgnoreCase) )S4  = true;      else if( detlist.Contains("+S4",  TString::kIgnoreCase) )S4  = true;
909                
910          if( detlist.Contains("-ND",  TString::kIgnoreCase) )ND  = false;      if( detlist.Contains("-ND",  TString::kIgnoreCase) )ND  = false;
911          else if( detlist.Contains("+ND",  TString::kIgnoreCase) )ND  = true;      else if( detlist.Contains("+ND",  TString::kIgnoreCase) )ND  = true;
912                
913          if( detlist.Contains("-AC",  TString::kIgnoreCase) )AC  = false;      if( detlist.Contains("-AC",  TString::kIgnoreCase) )AC  = false;
914          else if( detlist.Contains("+AC",  TString::kIgnoreCase) )AC  = true;      else if( detlist.Contains("+AC",  TString::kIgnoreCase) )AC  = true;
915                
916          if( detlist.Contains("-ORB", TString::kIgnoreCase) )ORB = false;      if( detlist.Contains("-ORB", TString::kIgnoreCase) )ORB = false;
917          else if( detlist.Contains("+ORB", TString::kIgnoreCase) )ORB = true;      else if( detlist.Contains("+ORB", TString::kIgnoreCase) )ORB = true;
918                
919  };  };
920  //--------------------------------------  //--------------------------------------
921  //  //
# Line 929  void PamLevel2::SetWhichTrees(TString de Line 928  void PamLevel2::SetWhichTrees(TString de
928   */   */
929  Bool_t  PamLevel2::CheckLevel2File(TString name){  Bool_t  PamLevel2::CheckLevel2File(TString name){
930                    
931          Bool_t CAL__ok = false;      Bool_t CAL__ok = false;    
932          Bool_t TRK__ok = false;      Bool_t TRK__ok = false;    
933          Bool_t TRK_L1__ok = false;      Bool_t TRK_L1__ok = false;    
934          Bool_t TRG__ok = false;      Bool_t TRG__ok = false;    
935          Bool_t TOF__ok = false;      Bool_t TOF__ok = false;    
936          Bool_t S4__ok  = false;      Bool_t S4__ok  = false;    
937          Bool_t ND__ok  = false;      Bool_t ND__ok  = false;    
938          Bool_t AC__ok  = false;      Bool_t AC__ok  = false;    
939          Bool_t ORB__ok = false;      Bool_t ORB__ok = false;    
940                
941          Bool_t RUN__ok = false;      Bool_t RUN__ok = false;
942                
943          TFile *f = new TFile(name.Data());  //    cout << "Checking file: "<<name<<endl;
944          TList *lk = f->GetListOfKeys();      TFile *f = new TFile(name.Data());
945        if( !f || f->IsZombie() ){
946            cout << "File: "<< f->GetName() <<" discarded ---- Non valid root file"<< endl; return false;
947        }
948        //   cout << "Get list of keys: "<<f<<endl;
949        TList *lk = f->GetListOfKeys();
950  //      lk->Print();  //      lk->Print();
951          TIter next(lk);      TIter next(lk);
952          TKey *key =0;      TKey *key =0;
953          while( (key = (TKey*)next()) ){      Int_t nev =0;
954  //              cout << key->GetName() << endl;      Int_t nev_previous =0;
955                  if( !strcmp(key->GetName(),"Calorimeter") )CAL__ok = true;      while( (key = (TKey*)next()) ){
956  //              if( !strcmp(key->GetName(),"Tracker"    ) )TRK__ok = true;          
957                  if( !strcmp(key->GetName(),"Trigger"    ) )TRG__ok = true;          nev_previous = nev;
958                  if( !strcmp(key->GetName(),"ToF"        ) )TOF__ok = true;          nev = ((TTree*)f->Get(key->GetName()))->GetEntries();
959                  if( !strcmp(key->GetName(),"S4"         ) )S4__ok = true;          if( key->GetClassName()=="TTree" && nev_previous && nev != nev_previous ){
960                  if( !strcmp(key->GetName(),"NeutronD"   ) )ND__ok = true;              cout << "File: "<< f->GetName() <<" discarded ---- "<< key->GetName() << " tree: n.entries does not match "<<nev<<" "<<nev_previous<< endl;
961                  if( !strcmp(key->GetName(),"Anticounter") )AC__ok = true;              return false;
962                  if( !strcmp(key->GetName(),"OrbitalInfo") )ORB__ok = true;          };
963                  if( !strcmp(key->GetName(),"Run"        ) )RUN__ok = true;  
964                            if( !strcmp(key->GetName(),"Calorimeter") )CAL__ok = true;
965                  if( !strcmp(key->GetName(),"Tracker"    ) ){          if( !strcmp(key->GetName(),"Trigger"    ) )TRG__ok = true;
966                          TRK__ok = true;          if( !strcmp(key->GetName(),"ToF"        ) )TOF__ok = true;
967                          TTree *T = (TTree*)f->Get("Tracker");          if( !strcmp(key->GetName(),"S4"         ) )S4__ok = true;
968                          for(Int_t i=0; i<T->GetListOfBranches()->GetEntries(); i++){          if( !strcmp(key->GetName(),"NeutronD"   ) )ND__ok = true;
969                                  TString name = T->GetListOfBranches()->At(i)->GetName();          if( !strcmp(key->GetName(),"Anticounter") )AC__ok = true;
970                                  if( !name.CompareTo("TrkLevel1") )TRK_L1__ok=true;          if( !strcmp(key->GetName(),"OrbitalInfo") )ORB__ok = true;
971                          };          if( !strcmp(key->GetName(),"Run"        ) )RUN__ok = true;      
972                  };          if( !strcmp(key->GetName(),"Tracker"    ) ){
973                TRK__ok = true;
974                TTree *T = (TTree*)f->Get("Tracker");
975                for(Int_t i=0; i<T->GetListOfBranches()->GetEntries(); i++){
976                    TString name = T->GetListOfBranches()->At(i)->GetName();
977                    if( !name.CompareTo("TrkLevel1") )TRK_L1__ok=true;
978                };
979          };          };
                   
         lk->Delete();  
         f->Close();  
980                    
981          Bool_t FLAG = true;      };
982          if(!RUN__ok) {      
983                  cout << "File: "<< f->GetName() <<" discarded ---- Missing RunInfo tree"<< endl;      lk->Delete();
984                  FLAG = false;      f->Close();
985          };      
986          if(CAL && !CAL__ok){      Bool_t FLAG = true;
987                  cout << "File: "<< f->GetName() <<" discarded ---- Missing Calorimeter tree"<< endl;      if(!RUN__ok) {
988                  FLAG = false;          cout << "File: "<< f->GetName() <<" discarded ---- Missing RunInfo tree"<< endl; return false;
989          };  //      FLAG = false;
990          if(TRK && !TRK__ok){      };
991                  cout << "File: "<< f->GetName() <<" discarded ---- Missing Tracker tree"<< endl;      if(CAL && !CAL__ok){
992                  FLAG = false;          cout << "File: "<< f->GetName() <<" discarded ---- Missing Calorimeter tree"<< endl; return false;
993          };  //      FLAG = false;
994          if(TRK_L1 && !TRK_L1__ok){      };
995                  cout << "File: "<< f->GetName() <<" discarded ---- Missing Tracker Level1 Branch"<< endl;      if(TRK && !TRK__ok){
996                  FLAG = false;          cout << "File: "<< f->GetName() <<" discarded ---- Missing Tracker tree"<< endl; return false;
997          };  //      FLAG = false;
998          if(TRG && !TRG__ok){      };
999                  cout << "File: "<< f->GetName() <<" discarded ---- Missing Trigger tree"<< endl;      if(TRK_L1 && !TRK_L1__ok){
1000                  FLAG = false;          cout << "File: "<< f->GetName() <<" discarded ---- Missing Tracker Level1 Branch"<< endl; return false;
1001          };  //      FLAG = false;
1002          if(TOF && !TOF__ok){      };
1003                  cout << "File: "<< f->GetName() <<" discarded ---- Missing ToF tree"<< endl;      if(TRG && !TRG__ok){
1004                  FLAG = false;          cout << "File: "<< f->GetName() <<" discarded ---- Missing Trigger tree"<< endl; return false;
1005          };  //      FLAG = false;
1006          if(S4 && !S4__ok){      };
1007                  cout << "File: "<< f->GetName() <<" discarded ---- Missing S4 tree"<< endl;      if(TOF && !TOF__ok){
1008                  FLAG = false;          cout << "File: "<< f->GetName() <<" discarded ---- Missing ToF tree"<< endl; return false;
1009          };  //      FLAG = false;
1010          if(ND && !ND__ok){      };
1011                  cout << "File: "<< f->GetName() <<" discarded ---- Missing ND tree"<< endl;      if(S4 && !S4__ok){
1012                  FLAG = false;          cout << "File: "<< f->GetName() <<" discarded ---- Missing S4 tree"<< endl; return false;
1013          };  //      FLAG = false;
1014          if(AC && !AC__ok){      };
1015                  cout << "File: "<< f->GetName() <<" discarded ---- Missing AC tree"<< endl;      if(ND && !ND__ok){
1016                  FLAG = false;          cout << "File: "<< f->GetName() <<" discarded ---- Missing ND tree"<< endl; return false;
1017          };  //      FLAG = false;
1018          if(ORB && !ORB__ok){      };
1019                  cout << "File: "<< f->GetName() <<" discarded ---- Missing ORB tree"<< endl;      if(AC && !AC__ok){
1020                  FLAG = false;          cout << "File: "<< f->GetName() <<" discarded ---- Missing AC tree"<< endl; return false;
1021          };  //      FLAG = false;
1022                };
1023          return FLAG;      if(ORB && !ORB__ok){
1024            cout << "File: "<< f->GetName() <<" discarded ---- Missing ORB tree"<< endl; return false;
1025    //      FLAG = false;
1026        };
1027        
1028        return FLAG;
1029                    
1030  };  };
1031    

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

  ViewVC Help
Powered by ViewVC 1.1.23