update for PWG1-EVE matching
authorabercuci <abercuci@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 15 Dec 2011 10:22:30 +0000 (10:22 +0000)
committerabercuci <abercuci@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 15 Dec 2011 10:22:30 +0000 (10:22 +0000)
robust reading of all data types

EVE/EveDet/AliEveTRDData.cxx
EVE/EveDet/AliEveTRDLoader.cxx
EVE/EveDet/AliEveTRDTrackList.cxx

index 0e7888a..1ce0fed 100644 (file)
@@ -234,13 +234,15 @@ void AliEveTRDClusters::Load(const Char_t *w) const
   if(strcmp(w, "hit")==0) typ = 0;
   else if(strcmp(w, "dig")==0) typ = 1;
   else if(strcmp(w, "cls")==0) typ = 2;
-  else if(strcmp(w, "all")==0) typ = 3;
+  else if(strcmp(w, "tlt")==0) typ = 3;
+  else if(strcmp(w, "all")==0) typ = 4;
   else{
     AliInfo("The following arguments are accepted:");
     AliInfo("   \"hit\" : loading of MC hits");
     AliInfo("   \"dig\" : loading of digits");
     AliInfo("   \"cls\" : loading of reconstructed clusters");
-    AliInfo("   \"all\" : loading of MC hits+digits+clusters");
+    AliInfo("   \"tlt\" : loading of online tracklets");
+    AliInfo("   \"all\" : loading everything available");
     return;
   }
 
@@ -252,34 +254,38 @@ void AliEveTRDClusters::Load(const Char_t *w) const
   Int_t det = c->GetDetector();
   AliEveTRDLoader *loader(NULL);
   switch(typ){
-  case 3:
+  case 4:
     loader = new AliEveTRDLoaderSim("MC");
-    if(!loader->Open("galice.root")) delete loader;
+    if(!loader->Open("galice.root")){delete loader; loader=NULL;}
     else{
       loader->SetDataType(AliEveTRDLoader::kTRDHits | AliEveTRDLoader::kTRDDigits | AliEveTRDLoader::kTRDClusters);
       break;
     }
   case 0:  
     loader = new AliEveTRDLoader("Hits");
-    if(!loader->Open("TRD.Hits.root")) delete loader;
+    if(!loader->Open("TRD.Hits.root")){delete loader; loader=NULL;}
     else{
-      loader->SetDataType(AliEveTRDLoader::kTRDHits);
-      if(typ!=3) break;
+      if(typ!=4) break;
     }
   case 1:
     if(!loader) loader = new AliEveTRDLoader("Digits");
     if(!loader->Open("TRD.Digits.root")){
-      if(typ==1) delete loader;
+      if(typ==1){delete loader; loader=NULL;}
     } else {
-      loader->SetDataType(AliEveTRDLoader::kTRDDigits);
-      if(typ!=3) break;
+      if(typ!=4) break;
     }
   case 2:
     if(!loader) loader = new AliEveTRDLoader("Clusters");
     if(!loader->Open("TRD.RecPoints.root")){
-      if(typ ==2) delete loader;
+      if(typ ==2){delete loader; loader=NULL;}
+    } else {
+      if(typ!=4) break;
+    }
+  case 3:
+    if(!loader) loader = new AliEveTRDLoader("Tracklets");
+    if(!loader->Open("TRD.Tracklets.root")){
+      if(typ ==3) {delete loader; loader=NULL;}
     } else {
-      loader->SetDataType(AliEveTRDLoader::kTRDClusters);
       break;
     }
   default: return;
@@ -288,8 +294,7 @@ void AliEveTRDClusters::Load(const Char_t *w) const
 
   loader->AddChambers(AliTRDgeometry::GetSector(det),AliTRDgeometry::GetStack(det), AliTRDgeometry::GetLayer(det));
   // load first event
-  loader->GoToEvent(AliEveEventManager::GetCurrent()->GetEventId());
-  
+  if(!loader->GoToEvent(AliEveEventManager::GetCurrent()->GetEventId())) AliWarning(Form("No data loaded for event %d", AliEveEventManager::GetCurrent()->GetEventId()));
   // register loader with alieve
   gEve->AddElement(loader->GetChamber(det), *(BeginParents()));
   //loader->SpawnEditor();
@@ -307,10 +312,7 @@ AliEveTRDTracklet::AliEveTRDTracklet(AliTRDseedV1 *trklt):TEveLine()
   // Constructor.
   SetName("tracklet");
   
-  if(!gGeoManager){ 
-    AliEveEventManager::AssertGeometry();
-    AliInfo(Form("gGeo[%p] Closed[%c]", (void*)gGeoManager, gGeoManager->IsClosed()?'y':'n'));
-  }
+  if(!gGeoManager) AliEveEventManager::AssertGeometry();
   SetUserData(trklt);
   // init tracklet line
   Int_t sec = AliTRDgeometry::GetSector(trklt->GetDetector());
index 62d98eb..43ddb11 100644 (file)
@@ -141,51 +141,48 @@ Bool_t AliEveTRDLoader::GoToEvent(int ev)
 
   Unload();
 
+  Int_t ndt(0);
+  const Char_t *tn[] = {"TreeH", "TreeD", "TreeR", "tracklets"};
+  const Char_t *fn[] = {"Hits", "Digits", "RecPoints", "Tracklets"};
   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){
-    if(!(t = (TTree*)gDirectory->Get("TreeH"))){
-      AliError(Form("Tree[TreeH] not found for Event[%d].", ev));
-      return kFALSE;
+  for(Int_t idt(0); idt<4; idt++){
+    if(idt==0 && !(fDataType&kTRDHits)) continue;
+    else if(idt==1 && !(fDataType&kTRDDigits)) continue;
+    else if(idt==2 && !(fDataType&kTRDClusters)) continue;
+    else if(idt==3 && !(fDataType&kTRDTracklets)) continue;
+
+    if(!(f = TFile::Open(Form("%s/TRD.%s.root", fDir.Data(), fn[idt])))){
+      AliWarning(Form("File not found \"%s/TRD.%s.root\".", fDir.Data(), fn[idt]));
+      continue;
     }
-    if(!LoadHits(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(!f->cd(Form("Event%d", ev))){
+      AliError(Form("Event[%d] not found in file \"%s/TRD.%s.root\".", ev, fDir.Data(), fn[idt]));
+      f->Close(); //delete f;
+      continue;
     }
-    if(!LoadDigits(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(!(t = (TTree*)gDirectory->Get(tn[idt]))) AliError(Form("Tree[%s] not found for Event[%d].", tn[idt], ev));
+    else{
+      switch(idt){
+      case 0:
+        if(LoadHits(t)) ndt++;
+        break;
+      case 1:
+        if(LoadDigits(t)) ndt++;
+        break;
+      case 2:
+        if(LoadClusters(t)) ndt++;
+        break;
+      case 3:
+        if(LoadTracklets(t)) ndt++;
+        break;
+      }
     }
-    if(!LoadClusters(t)) return kFALSE;
+    f->Close(); //delete f;
   }
-  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.");
-
-  f->Close(); //delete f;
-
   gEve->Redraw3D();
 
-  return kTRUE;
+  return Bool_t(ndt);
 }
 
 
@@ -197,7 +194,7 @@ Bool_t AliEveTRDLoader::LoadHits(TTree *tH)
   AliInfo("Loading ...");
   if(!fChildren.size()) return kFALSE;
 
-  AliEveTRDChamber *chmb = 0x0;
+  AliEveTRDChamber *chmb(NULL);
   TClonesArray *hits = new TClonesArray("AliTRDhit", 100);
   tH->SetBranchAddress("TRD", &hits);
   Int_t idx, nhits;
@@ -211,7 +208,7 @@ Bool_t AliEveTRDLoader::LoadHits(TTree *tH)
       chmb = GetChamber(det);
       if(chmb) chmb->LoadHits(hits, idx);
       else{
-        AliTRDhit *hit = 0x0;
+        AliTRDhit *hit(NULL);
         while(idx < nhits){
           hit = (AliTRDhit*)hits->UncheckedAt(idx);
           if(hit->GetDetector() != det) break;
@@ -233,7 +230,7 @@ Bool_t AliEveTRDLoader::LoadClusters(TTree *tC)
   AliInfo("Loading ...");
   if(!fChildren.size()) return kFALSE;
 
-  TObjArray *clusters = new TObjArray();
+  TObjArray *clusters(NULL);
   tC->SetBranchAddress("TRDcluster", &clusters);
 
   AliEveTRDChamber *chmb(NULL);
@@ -257,14 +254,11 @@ Bool_t AliEveTRDLoader::LoadDigits(TTree *tD)
 
   if(!fChildren.size()) return kFALSE;
 
-  AliEveTRDChamber *chmb;
+  AliEveTRDChamber *chmb(NULL);
   AliTRDdigitsManager dm;
   dm.ReadDigits(tD);
   for(int idet=0; idet<AliTRDgeometry::kNdet; idet++){
     if(!(chmb=GetChamber(idet))) continue;
-    //  digits = dm.GetDigits(idet);
-    //  if(!digits) continue;
-    //  chmb->LoadDigits(digits);
     chmb->LoadDigits(&dm);
   }
   return kTRUE;
@@ -280,9 +274,9 @@ Bool_t AliEveTRDLoader::LoadTracklets(TTree *trklTree)
   if(!fChildren.size()) return kFALSE;
 
 
-  AliEveTRDChamber *chmb = 0x0;
+  AliEveTRDChamber *chmb(NULL);
 
-  for(int idet=0; idet<540; idet++){
+  for(int idet=0; idet<AliTRDgeometry::kNdet; idet++){
     if((chmb = GetChamber(idet)))
       chmb->LoadTracklets(trklTree);
   }
@@ -298,43 +292,36 @@ Bool_t AliEveTRDLoader::Open(const char *filename, const char *dir)
 
   fFilename = filename;
   fDir = dir;
-  Int_t count = 0;
-  count += fDataType&kTRDHits;
-  count += fDataType&kTRDDigits;
-  count += fDataType&kTRDClusters;
-  count += fDataType&kTRDTracklets;
-
   TObjArray *so = fFilename.Tokenize(".");
 
   if(((TObjString*)(*so)[0])->GetString().CompareTo("TRD") != 0){
-    AliError("Filename didn't fulfill naming conventions. No TRD data will be loaded.");
+    AliError(Form("Filename %s do not fulfill AliRoot naming conventions.", filename));
+    return kFALSE;
+  }
+  if(gSystem->AccessPathName(Form("%s/%s", dir, filename))){
+    AliError(Form("Missing file %s/%s", dir, filename));
     return kFALSE;
   }
-
   if(((TObjString*)(*so)[1])->GetString().CompareTo("Hits") == 0){
-    if(count && !(fDataType&kTRDHits)){ 
-      AliWarning("Data type set to HITS according to file name. Previous settings will be overwritten.");
-      fDataType = 0; 
+    if(!(fDataType&kTRDHits)){
+      AliInfo("Data type set to HITS according to file name.");
+      fDataType|=kTRDHits;
     }
-    fDataType|=kTRDHits;
   } else   if(((TObjString*)(*so)[1])->GetString().CompareTo("Digits") == 0){
-    if(count && !(fDataType&kTRDDigits)){ 
-      AliWarning("Data type set to DIGITS according to file name. Previous settings will be overwritten.");
-      fDataType = 0; 
+    if(!(fDataType&kTRDDigits)){
+      AliInfo("Data type set to DIGITS according to file name.");
+      fDataType|=kTRDDigits;
     }
-    fDataType|=kTRDDigits;
   } else if(((TObjString*)(*so)[1])->GetString().CompareTo("RecPoints") == 0){
-    if(count && !(fDataType&kTRDClusters)){ 
-      AliWarning("Data type set to CLUSTERS according to file name. Previous settings will be overwritten.");
-      fDataType = 0; 
+    if(!(fDataType&kTRDClusters)){
+      AliInfo("Data type set to CLUSTERS according to file name.");
+      fDataType|=kTRDClusters;
     }
-    fDataType|=kTRDClusters;  
   } 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; 
+    if(!(fDataType&kTRDTracklets)){
+      AliInfo("Data type set to TRACKLETS according to file name.");
+      fDataType|=kTRDTracklets;
     }
-    fDataType|=kTRDTracklets; 
   } else {
     AliError("Filename didn't fulfill naming conventions. No data will be loaded.");
     return kFALSE;
index 7c50115..44070f0 100644 (file)
@@ -271,7 +271,7 @@ void AliEveTRDTrackList::AddStandardContent()
   // use the return value of AddMacro (NOT_EXIST_ERROR is returned, if file does not exist)
   // (-> You can also check for other return values (see AddMacro(...)))
 
-  const Char_t *libs[] = {"libANALYSIS.so", "libANALYSISalice.so", "libTENDER.so", "libPWG1.so"};
+  const Char_t *libs[] = {"libANALYSIS.so", "libANALYSISalice.so", "libCORRFW", "libTENDER.so", "libPWG1.so"};
   Int_t nlibs = static_cast<Int_t>(sizeof(libs)/sizeof(Char_t *));
   for(Int_t ilib=0; ilib<nlibs; ilib++){
     if(gSystem->Load(libs[ilib]) >= 0) continue;
@@ -279,35 +279,28 @@ void AliEveTRDTrackList::AddStandardContent()
     return;
   }
 
-  const Char_t *fgkTRDPWG1taskClassName[AliTRDpwg1Helper::kNTRDQATASKS] = {
-    "AliTRDcheckESD"
-    ,"AliTRDinfoGen"
-    ,"AliTRDcheckDET"
-    ,"AliTRDefficiency"
-    ,"AliTRDresolution"
-    ,"AliTRDcheckPID"
-    ,"AliTRDv0Monitor"
-  };
+  const Char_t *taskClassName[] = {"AliTRDcheckDET", "AliTRDresolution"};
   AliTRDrecoTask *task(NULL);
   TList *fPlots(NULL);
-  for(Int_t it=2; it<AliTRDpwg1Helper::kNTRDQATASKS; it++){
-    TClass c(fgkTRDPWG1taskClassName[it]);
+  for(Int_t it=0; it<2; it++){
+    TClass c(taskClassName[it]);
     task = (AliTRDrecoTask*)c.New();
+    task->InitFunctorList();
     task->SetMCdata(kFALSE);
     if(!(fPlots = task->GetPlotFunctors())){
-      //AliWarning(Form("No Plot functors defined for task \"%s\"", fgkTRDtaskClassName[it]));
+      AliWarning(Form("No Track functors defined for task \"%s\"", taskClassName[it]));
       delete task;
       continue;
     }
     if(!(task->Histos())){
-      //AliWarning(Form("No Ref Histograms defined for task \"%s\"", fgkTRDtaskClassName[it]));
+      AliWarning(Form("No Ref Histograms defined for task \"%s\"", taskClassName[it]));
       delete task;
       continue;
     }
 
     // export task to CINT and add functions
-    gROOT->ProcessLine(Form("%s* %s = (%s*)%p;", fgkTRDPWG1taskClassName[it], task->GetName(), fgkTRDPWG1taskClassName[it], (void*)task));
-    TIter iter(fPlots); TMethodCall *m = 0x0;
+    gROOT->ProcessLine(Form("%s* %s = (%s*)%p;", taskClassName[it], task->GetName(), taskClassName[it], (void*)task));
+    TIter iter(fPlots); TMethodCall *m(NULL);
     while((m = dynamic_cast<TMethodCall*>(iter()))){
       AddMacroFast("", Form("%s->%s", task->GetName(), m->GetMethodName()), kSingleTrackHisto);
     }
@@ -354,7 +347,7 @@ Bool_t AliEveTRDTrackList::ApplyProcessMacros(const TList* selIterator, const TL
   fHistoDataSelected = 0;
 
 
-  TMacroData* macro = 0;
+  TMacroData* macro(NULL);
 
   TString* procCmds = new TString[procIterator->GetEntries()];
   AliEveTRDTrackListMacroType* mProcType = new AliEveTRDTrackListMacroType[procIterator->GetEntries()];
@@ -476,7 +469,7 @@ Bool_t AliEveTRDTrackList::ApplyProcessMacros(const TList* selIterator, const TL
       // Single track histo
       if (mProcType[i] == kSingleTrackHisto){
         if(histos) histos[histoIndex++] = (TH1*)gROOT->ProcessLineSync(procCmds[i]);
-       // Correlated tracks histo
+        // Correlated tracks histo
       } else if (mProcType[i] == kCorrelTrackHisto) {
         // Loop over all pairs behind the current one - together with the other loop this will be a loop
         // over all pairs. We have a pair of tracks, if and only if both tracks of the pair are selected (Rnr-state)