make loader more tolerant to missing files
[u/mrichter/AliRoot.git] / EVE / EveDet / AliEveTRDLoader.cxx
index 92818a6..62d98eb 100644 (file)
@@ -141,31 +141,45 @@ Bool_t AliEveTRDLoader::GoToEvent(int ev)
 
   Unload();
 
-  TTree *t = 0x0;
-  TFile *f = TFile::Open(Form("%s/%s", fDir.Data(), fFilename.Data()));
-  if(! f->cd(Form("Event%d", ev))){
-    AliError(Form("Couldn't find event %d in file \"%s/%s\".", ev, fDir.Data(), fFilename.Data()));
+  TTree *t(NULL); TFile *f(NULL);
+  if(!(f = TFile::Open(Form("%s/%s", fDir.Data(), fFilename.Data())))){
+    AliWarning(Form("File not found \"%s/%s\".", fDir.Data(), fFilename.Data()));
+    return kFALSE;
+  }
+  if(!f->cd(Form("Event%d", ev))){
+    AliError(Form("Event[%d] not found in file \"%s/%s\".", ev, fDir.Data(), fFilename.Data()));
     f->Close(); //delete f;
     return kFALSE;
   }
 
   if(fDataType&kTRDHits){
-    t = (TTree*)gDirectory->Get("TreeH");
-    if(!t) return kFALSE;
+    if(!(t = (TTree*)gDirectory->Get("TreeH"))){
+      AliError(Form("Tree[TreeH] not found for Event[%d].", ev));
+      return kFALSE;
+    }
     if(!LoadHits(t)) return kFALSE;
-  } else if(fDataType&kTRDDigits){
-    t = (TTree*)gDirectory->Get("TreeD");
-    if(!t) return kFALSE;
+  }
+  if(fDataType&kTRDDigits){
+    if(!(t = (TTree*)gDirectory->Get("TreeD"))){
+      AliError(Form("Tree[TreeD] not found for Event[%d].", ev));
+      return kFALSE;
+    }
     if(!LoadDigits(t)) return kFALSE;
-  } else if(fDataType&kTRDClusters){
-    t = (TTree*)gDirectory->Get("TreeR");
-    if(!t) return kFALSE;
+  }
+  if(fDataType&kTRDClusters){
+    if(!(t = (TTree*)gDirectory->Get("TreeR"))){
+      AliError(Form("Tree[TreeR] not found for Event[%d].", ev));
+      return kFALSE;
+    }
     if(!LoadClusters(t)) return kFALSE;
-  } else if(fDataType&kTRDTracklets){
-    t = (TTree*)gDirectory->Get("tracklets");
-    if(!t) return kFALSE;
+  }
+  if(fDataType&kTRDTracklets){
+    if(!(t = (TTree*)gDirectory->Get("tracklets"))){
+      AliError(Form("Tree[tracklets] not found for Event[%d].", ev));
+      return kFALSE;
+    }
     if(!LoadTracklets(t)) return kFALSE;
-  } else AliWarning("Please select first the type of data that you want to monitor and then hit the \"Load\" button.");
+  }// else AliWarning("Please select first the type of data that you want to monitor and then hit the \"Load\" button.");
 
   f->Close(); //delete f;
 
@@ -222,13 +236,12 @@ Bool_t AliEveTRDLoader::LoadClusters(TTree *tC)
   TObjArray *clusters = new TObjArray();
   tC->SetBranchAddress("TRDcluster", &clusters);
 
-  AliEveTRDChamber *chmb = 0x0;
-  AliTRDcluster *c=0x0;
-  for(int idet=0; idet<540; idet++){
+  AliEveTRDChamber *chmb(NULL);
+  AliTRDcluster *c(NULL);
+  for(int idet=0; idet<AliTRDgeometry::kNdet; idet++){
     tC->GetEntry(idet);
     if(!clusters->GetEntriesFast()) continue;
-    c = (AliTRDcluster*)clusters->UncheckedAt(0);
-    if(!c) continue;
+    if(!(c = (AliTRDcluster*)clusters->UncheckedAt(0))) continue;
     if((chmb = GetChamber(c->GetDetector()))) chmb->LoadClusters(clusters);
   }
   return kTRUE;
@@ -247,7 +260,7 @@ Bool_t AliEveTRDLoader::LoadDigits(TTree *tD)
   AliEveTRDChamber *chmb;
   AliTRDdigitsManager dm;
   dm.ReadDigits(tD);
-  for(int idet=0; idet<540; idet++){
+  for(int idet=0; idet<AliTRDgeometry::kNdet; idet++){
     if(!(chmb=GetChamber(idet))) continue;
     //  digits = dm.GetDigits(idet);
     //  if(!digits) continue;
@@ -299,25 +312,25 @@ Bool_t AliEveTRDLoader::Open(const char *filename, const char *dir)
   }
 
   if(((TObjString*)(*so)[1])->GetString().CompareTo("Hits") == 0){
-    if(count && !fDataType&kTRDHits){ 
+    if(count && !(fDataType&kTRDHits)){ 
       AliWarning("Data type set to HITS according to file name. Previous settings will be overwritten.");
       fDataType = 0; 
     }
     fDataType|=kTRDHits;
   } else   if(((TObjString*)(*so)[1])->GetString().CompareTo("Digits") == 0){
-    if(count && !fDataType&kTRDDigits){ 
+    if(count && !(fDataType&kTRDDigits)){ 
       AliWarning("Data type set to DIGITS according to file name. Previous settings will be overwritten.");
       fDataType = 0; 
     }
     fDataType|=kTRDDigits;
   } else if(((TObjString*)(*so)[1])->GetString().CompareTo("RecPoints") == 0){
-    if(count && !fDataType&kTRDClusters){ 
+    if(count && !(fDataType&kTRDClusters)){ 
       AliWarning("Data type set to CLUSTERS according to file name. Previous settings will be overwritten.");
       fDataType = 0; 
     }
     fDataType|=kTRDClusters;  
   } else if(((TObjString*)(*so)[1])->GetString().CompareTo("Tracklets") == 0){
-    if(count && !fDataType&kTRDTracklets){ 
+    if(count && !(fDataType&kTRDTracklets)){ 
       AliWarning("Data type set to TRACKLETS according to file name. Previous settings will be overwritten.");
       fDataType = 0; 
     }
@@ -336,9 +349,10 @@ void AliEveTRDLoader::Paint(Option_t *option)
 {
   // Paint object.
 
+  AliEveTRDModule *module(NULL);
   List_i ichmb = fChildren.begin();
   while(ichmb != fChildren.end()){
-    (dynamic_cast<AliEveTRDModule*>(*ichmb))->Paint(option);
+    if((module = dynamic_cast<AliEveTRDModule*>(*ichmb))) module->Paint(option);
     ichmb++;
   }
 }
@@ -351,7 +365,7 @@ void AliEveTRDLoader::Unload()
 
   List_i ichmb = fChildren.begin();
   while(ichmb != fChildren.end()){
-    (dynamic_cast<AliEveTRDModule*>(*ichmb))->Reset();
+    //(dynamic_cast<AliEveTRDModule*>(*ichmb))->Reset();
     ichmb++;
   }
 }
@@ -471,7 +485,7 @@ void AliEveTRDLoaderEditor::SetModel(TObject* obj)
 {
   // Set model object.
 
-  fM = dynamic_cast<AliEveTRDLoader*>(obj);
+  if(!(fM = dynamic_cast<AliEveTRDLoader*>(obj))) return;
 
   fFile->SetEnabled(!fM->IsDataLinked());
   fFile->SetText(gSystem->BaseName(fM->fFilename.Data()));