make loader more tolerant to missing files
[u/mrichter/AliRoot.git] / EVE / EveDet / AliEveTRDLoader.cxx
index d78c9d1..62d98eb 100644 (file)
 
 #include "AliTRDhit.h"
 #include "AliTRDcluster.h"
-#include "AliTRDmcmTracklet.h"
 #include "AliTRDdigitsManager.h"
 #include "AliTRDgeometry.h"
 
-class AliTRDdataArrayI;
-
 ClassImp(AliEveTRDLoader)
 ClassImp(AliEveTRDLoaderEditor)
 
@@ -59,13 +56,7 @@ AliEveTRDLoader::AliEveTRDLoader(const Text_t* n, const Text_t* t) : TEveElement
 {
   // Constructor.
 
-  AliCDBManager *fCDBManager=AliCDBManager::Instance();
-  fCDBManager->SetDefaultStorage("local://$ALICE_ROOT");
-  fCDBManager->SetRun(0);
-
-  if(!AliEveEventManager::AssertGeometry()){
-    TGeoManager::Import("geometry.root");
-  }
+  AliEveEventManager::AssertGeometry();
 
   fGeo = new AliTRDgeometry();
   //fGeo->CreateClusterMatrixArray();
@@ -150,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("TreeT");
-    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;
 
@@ -226,18 +231,17 @@ Bool_t AliEveTRDLoader::LoadClusters(TTree *tC)
   // Load clusters.
 
   AliInfo("Loading ...");
-  if(!fChildren.size()) return kTRUE;
+  if(!fChildren.size()) return kFALSE;
 
   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;
@@ -251,12 +255,12 @@ Bool_t AliEveTRDLoader::LoadDigits(TTree *tD)
 
   AliInfo("Loading ...");
 
-  if(!fChildren.size()) return kTRUE;
+  if(!fChildren.size()) return kFALSE;
 
   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;
@@ -268,22 +272,19 @@ Bool_t AliEveTRDLoader::LoadDigits(TTree *tD)
 
 
 //______________________________________________________________________________
-Bool_t AliEveTRDLoader::LoadTracklets(TTree *tT)
+Bool_t AliEveTRDLoader::LoadTracklets(TTree *trklTree)
 {
   // Load tracklets.
 
   AliInfo("Loading ...");
-  if(!fChildren.size()) return kTRUE;
+  if(!fChildren.size()) return kFALSE;
 
-  TObjArray *tracks = new TObjArray();
-  tT->SetBranchAddress("TRDmcmTracklet",&tracks);
 
   AliEveTRDChamber *chmb = 0x0;
-  AliTRDmcmTracklet *trk=0x0;
+
   for(int idet=0; idet<540; idet++){
-    if(!tT->GetEntry(idet)) continue;
-    if(tracks->GetEntriesFast()) trk = (AliTRDmcmTracklet*)tracks->UncheckedAt(0);
-    if((chmb = GetChamber(trk->GetDetector()))) chmb->LoadTracklets(tracks);
+    if((chmb = GetChamber(idet)))
+      chmb->LoadTracklets(trklTree);
   }
 
   return kTRUE;
@@ -311,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("Tracks") == 0){
-    if(count && !fDataType&kTRDTracklets){ 
+  } else if(((TObjString*)(*so)[1])->GetString().CompareTo("Tracklets") == 0){
+    if(count && !(fDataType&kTRDTracklets)){ 
       AliWarning("Data type set to TRACKLETS according to file name. Previous settings will be overwritten.");
       fDataType = 0; 
     }
@@ -348,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++;
   }
 }
@@ -363,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++;
   }
 }
@@ -483,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()));