]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - EVE/EveDet/AliEveTRDLoaderImp.cxx
Merge branch 'master' of https://git.cern.ch/reps/AliRoot
[u/mrichter/AliRoot.git] / EVE / EveDet / AliEveTRDLoaderImp.cxx
index 88889156620c85c27571cb948bb442487b977d91..e7132227e0d9c7ef3a61c680b56375419ecc6457 100644 (file)
@@ -9,10 +9,11 @@
 
 #include "AliEveTRDLoaderImp.h"
 #include "AliEveTRDModuleImp.h"
+#include "AliEveEventManager.h"
 
 #include <TEveManager.h>
 
-#include "TFile.h"
+//#include "TFile.h"
 #include "TTree.h"
 
 #include <TGButton.h>
 #include "AliLog.h"
 #include "AliRun.h"
 #include "AliRunLoader.h"
-#include "AliLoader.h"
 #include "AliTRDrawData.h"
+#include "AliTRDrawStream.h"
+#include "AliTRDdigitsManager.h"
 #include "AliRawReaderRoot.h"
 #include "AliRawReaderDate.h"
 
-#include "AliTRDv1.h"
-#include "AliTRDhit.h"
-#include "AliTRDdigitsManager.h"
-
 ClassImp(AliEveTRDLoaderSim)
 ClassImp(AliEveTRDLoaderRaw)
 ClassImp(AliEveTRDLoaderSimEditor)
@@ -41,22 +39,23 @@ ClassImp(AliEveTRDLoaderSimEditor)
 
 //______________________________________________________________________________
 AliEveTRDLoaderSim::AliEveTRDLoaderSim(const Text_t* n, const Text_t* t) :
-  AliEveTRDLoader(n, t),
-  fRunLoader(0)
-{}
-
-//______________________________________________________________________________
-AliEveTRDLoaderSim::~AliEveTRDLoaderSim()
-{}
+  AliEveTRDLoader(n, t)
+  ,fRunLoader(0x0)
+{
+  // Constructor.
+  if(gAlice && (fRunLoader = AliEveEventManager::AssertRunLoader())) SetDataLinked();
+}
 
 //______________________________________________________________________________
 Bool_t AliEveTRDLoaderSim::GoToEvent(int ev)
 {
+  // Go to given event.
+
   if(!fChildren.size()){
     AliWarning("Please select first the chamber that you want to monitor from \"Chamber(s) selector\".");
     return kFALSE;
   }
-  if(!fLoadHits && !fLoadDigits && !fLoadClusters && !fLoadTracks){
+  if(!fDataType){
     AliWarning("Please select first the type of data that you want to monitor and then hit the \"Load\" button.");
     return kFALSE;
   }
@@ -72,27 +71,25 @@ Bool_t      AliEveTRDLoaderSim::GoToEvent(int ev)
 
   if(fRunLoader->GetEvent(ev)) return kFALSE;
   TTree *t = 0;
-  if(fLoadHits){
+  if(fDataType&kTRDHits){
     fRunLoader->LoadHits("TRD", "READ");
     t = fRunLoader->GetTreeH("TRD", kFALSE);
     if(!t) return kFALSE;
-    fTRD->SetTreeAddress();
     if(!LoadHits(t)) return kFALSE;
   }
-  if(fLoadDigits){
+  if(fDataType&kTRDDigits){
     fRunLoader->LoadDigits("TRD", "READ");
     t = fRunLoader->GetTreeD("TRD", kFALSE);
     if(!t) return kFALSE;
-    fTRD->SetTreeAddress();
     if(!LoadDigits(t)) return kFALSE;
   }
-  if(fLoadClusters){
+  if(fDataType&kTRDClusters){
     fRunLoader->LoadRecPoints("TRD", "READ");
     t = fRunLoader->GetTreeR("TRD", kFALSE);
     if(!t) return kFALSE;
     if(!LoadClusters(t)) return kFALSE;
   }
-  if(fLoadTracks){
+  if(fDataType&kTRDTracklets){
     fRunLoader->LoadTracks("TRD", "READ");
     t = fRunLoader->GetTreeT("TRD", kFALSE);
     if(!t) return kFALSE;
@@ -104,70 +101,32 @@ Bool_t    AliEveTRDLoaderSim::GoToEvent(int ev)
 }
 
 
-//______________________________________________________________________________
-Bool_t AliEveTRDLoaderSim::LoadHits(TTree *tH)
-{
-  Info("LoadHits()", "Loading ...");
-  if(!fChildren.size()) return kTRUE;
-
-  AliEveTRDChamber *chmb = 0x0;
-  AliTRDhit *hit = 0x0;
-  Int_t d;
-  for(int iTrack=0; iTrack<tH->GetEntries(); iTrack++){
-    gAlice->ResetHits();
-    if(!tH->GetEvent(iTrack)) continue;
-    hit = (AliTRDhit*)fTRD->FirstHit(-1);
-    if(!hit) continue;
-    d = hit->GetDetector();
-    chmb = GetChamber(d);
-    while(hit){
-      if(d != hit->GetDetector()){
-        d = hit->GetDetector();
-        chmb = GetChamber(d);
-      }
-      if(chmb) chmb->AddHit(hit);
-      hit = (AliTRDhit*)fTRD->NextHit();
-    }
-  }
-  return kTRUE;
-}
-
 //______________________________________________________________________________
 Bool_t AliEveTRDLoaderSim::Open(const char *filename, const char *dir)
 {
-  //Info("Open()", "");
+  // Open file in given dir.
 
+  if(fRunLoader) return kTRUE;
+  
+  fRunLoader = AliRunLoader::Instance();
+  if(!fRunLoader) fRunLoader = AliRunLoader::Open(filename,
+         AliConfig::GetDefaultEventFolderName(),"read");
+  if(!fRunLoader) return kFALSE;
 
+  gAlice = fRunLoader->GetAliRun();
+  if(!gAlice && fRunLoader->LoadgAlice()) return kFALSE;
+  if(!gAlice) return kFALSE;
   fFilename = filename;
   fDir = dir;
   fDir += "/";
-
-  fRunLoader = AliRunLoader::GetRunLoader();
-  if(!fRunLoader) fRunLoader = AliRunLoader::Open(filename,
-                                                  AliConfig::GetDefaultEventFolderName(),"read");
-  if(!fRunLoader){
-    AliError("Couldn't find run loader");
-    return kFALSE;
-  }
   fRunLoader->SetDirName(fDir);
 
-  gAlice = fRunLoader->GetAliRun();
-  if(!gAlice) fRunLoader->LoadgAlice();
-  if(!gAlice){
-    AliError("Couldn't find gAlice object");
-    return kFALSE;
-  }
-  fTRD = (AliTRDv1*)gAlice->GetDetector("TRD");
-  if(!fTRD){
-    AliError("Couldn't find TRD");
-    return kFALSE;
-  }
-
+  SetDataLinked();
   return kTRUE;
 }
 
 
-
 ///////////////////////////////////////////////////////////
 /////////////   AliEveTRDLoaderRaw    /////////////////////
 ///////////////////////////////////////////////////////////
@@ -175,114 +134,125 @@ Bool_t  AliEveTRDLoaderSim::Open(const char *filename, const char *dir)
 
 //______________________________________________________________________________
 AliEveTRDLoaderRaw::AliEveTRDLoaderRaw(const Text_t* n, const Text_t* t) :
-  AliEveTRDLoader(n, t),
-  fRawDateReader (0),
-  fRawRootReader (0),
-  fRaw           (0),
-  fDataRoot      (kTRUE),
-  fEventOld      (-1)
-{}
-
-//______________________________________________________________________________
-AliEveTRDLoaderRaw::~AliEveTRDLoaderRaw()
-{}
-
+  AliEveTRDLoader(n, t)
+  ,fRawDateReader (0x0)
+  ,fRawRootReader (0x0)
+  ,fRaw           (0x0)
+  ,fEventCnt(-1)
+{
+  // Constructor.
+}
 
 //______________________________________________________________________________
 Bool_t  AliEveTRDLoaderRaw::Open(const char *filename, const char *dir)
 {
-  //   Info("Open()", Form("Open %s/%s", dir, filename));
+  // Open file in gvenn dir.
+
   fFilename = filename;
   fDir = dir;
   fDir += "/";
 
-
   if(fRaw) delete fRaw;
   fRaw = new AliTRDrawData();
 
-  if(fDataRoot){
+  if(fDataType&kTRDRawRoot){
     if(fRawRootReader) delete fRawRootReader;
     fRawRootReader = new AliRawReaderRoot(filename);
-  } else {
+  } else if(fDataType&kTRDRawDate){
     if(fRawDateReader) delete fRawDateReader;
     fRawDateReader = new AliRawReaderDate(fDir+fFilename);
+  } else {
+    AliError("No data type was set.");
+    return kFALSE;
   }
-
+  SetDataLinked();
   return kTRUE;
 }
 
-//______________________________________________________________________________
-void AliEveTRDLoaderRaw::SetDataType(TRDDataTypes type)
-{
-  fDataRoot = (type == kRawRoot) ? kTRUE : kFALSE;
-}
 
 //______________________________________________________________________________
 Bool_t AliEveTRDLoaderRaw::GoToEvent(int ev)
 {
+  // Go to given event.
+
+  //AliInfo(Form("Event %d %d %d", ev, fEvent, fEventCnt));
+
+
   if(!fChildren.size()){
     AliWarning("Please select first the chamber that you want to monitor from \"Chamber(s) selector\".");
     return kFALSE;
   }
 
-  static const TEveException eH("AliEveTRDLoader::GotoEvent ");
-  if(fRawRootReader == 0x0) throw(eH + "data file not opened.");
-
+  static const TEveException kEH("AliEveTRDLoader::GotoEvent ");
+  if(fRawRootReader == 0x0) throw(kEH + "data file not opened.");
 
-  if(ev == fEventOld) return kTRUE;
-  Bool_t checkEnd;
-  if(ev < fEventOld) {
+  fEvent = ev;
+  if(ev == fEventCnt) return kTRUE;
+  if(ev < fEventCnt) {
     fRawRootReader->RewindEvents();
-    fEventOld = -1;
-    checkEnd = kFALSE;
-  } else checkEnd = kTRUE;
+    fEventCnt = -1;
+  }
 
-  do NextEvent(); while(fEventOld != ev && !(checkEnd == kTRUE && fEventOld == 0));
+  Bool_t FOUND = kFALSE;
+  while(fRawRootReader->NextEvent()){ 
+    fEventCnt++;
+    if(fEventCnt == ev){
+      FOUND = kTRUE;
+      break;
+    }  
+  }
+  if(!FOUND) return kFALSE;
+  
   LoadEvent();
   gEve->Redraw3D();
-  //gEve->EnableRedraw();
+
   return kTRUE;
 }
 
+
 //______________________________________________________________________________
 Bool_t AliEveTRDLoaderRaw::LoadEvent()
 {
-  Info("LoadEvent()", "Loading ...");
+  // Load event.
+  AliInfo("Loading ...");
 
-  static const TEveException eH("AliEveTRDLoader::LoadEvent ");
-  if(fRawRootReader == 0x0) throw(eH + "data file not opened.");
+  static const TEveException kEH("AliEveTRDLoader::LoadEvent ");
+  if(fRawRootReader == 0x0) throw(kEH + "data file not opened.");
 
 
   fRawRootReader->Reset();
+  fRawRootReader->SelectEquipment(0, 1024, 1041);
+  fRawRootReader->Select("TRD");
+  
+//   AliTRDrawStream::AllowCorruptedData();
+//   AliTRDrawStream::DisableStackNumberChecker();
+//   AliTRDrawStream::DisableStackLinkNumberChecker();
+
+  AliTRDrawStream *pinput = new AliTRDrawStream(fRawRootReader);
+  AliTRDrawStream &input = *pinput;
+
+ // AliInfo(Form("Stream version: %s", input.IsA()->GetName()));
 
   AliEveTRDChamber *chmb;
-  AliTRDdigitsManager *dm;
-  dm = fRaw->Raw2Digits(fRawRootReader);
+  AliTRDdigitsManager *dm = new AliTRDdigitsManager();
+  dm->CreateArrays();
 
-  for(int idet=0; idet<540; idet++){
-    if(!(chmb=GetChamber(idet))) continue;
+  Int_t det    = 0;
+  while ((det = input.NextChamber(dm)) >= 0){
+    if(!(chmb=GetChamber(det))) continue;
     chmb->LoadDigits(dm);
-  }
-  return kTRUE;
-}
 
-//______________________________________________________________________________
-void AliEveTRDLoaderRaw::NextEvent(Bool_t rewindOnEnd)
-{
-  static const TEveException eH("AliEveTRDLoader::NextEvent ");
-  if(fRawRootReader == 0x0) throw(eH + "data file not opened.");
-
-
-  if(fRawRootReader->NextEvent() == kTRUE) ++fEventOld;
-  else {
-    if(fEventOld == -1) throw(eH + "no events available.");
-    if(rewindOnEnd) {
-      Warning("NextEvent()", Form("Reached end of stream (event=%d), rewinding to first event.", fEventOld));
-      fRawRootReader->RewindEvents();
-      fRawRootReader->NextEvent();
-      fEventOld = 0;
-    } else throw(eH + "last event reached.");
+    dm->RemoveDigits(det);
+    dm->RemoveDictionaries(det);
+    dm->ClearIndexes(det);
   }
+
+
+  delete pinput;
+  pinput = NULL;
+
+
+  return kTRUE;
 }
 
 
@@ -294,91 +264,77 @@ void AliEveTRDLoaderRaw::NextEvent(Bool_t rewindOnEnd)
 //______________________________________________________________________________
 AliEveTRDLoaderSimEditor::AliEveTRDLoaderSimEditor(const TGWindow* p, Int_t width, Int_t height,
                                                    UInt_t options, Pixel_t back) :
-  TGedFrame(p, width, height, options | kVerticalFrame, back),
-  fM(0), fLoadHits(0), fLoadDigits(0), fLoadClusters(0), fLoadTracks(0)
+  TGedFrame(p, width, height, options | kVerticalFrame, back)
+  ,fM(0x0)
+  ,fCheckedHits(0x0)
+  ,fCheckedDigits(0x0)
+  ,fCheckedClusters(0x0)
+  ,fCheckedTracklets(0x0)
 {
+  // Constructor.
+
   MakeTitle("AliEveTRDLoaderSim");
 
   // "Data selector" group frame
   TGGroupFrame *fGroupFrame = new TGGroupFrame(this,"Data selector");
-  fLoadHits = new TGCheckButton(fGroupFrame,"  Hits");
-  fLoadHits->Connect("Clicked()", "AliEveTRDLoaderSimEditor", this, "Toggle(=0)");
-  fGroupFrame->AddFrame(fLoadHits, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
+  fCheckedHits = new TGCheckButton(fGroupFrame,"  Hits");
+  fCheckedHits->Connect("Clicked()", "AliEveTRDLoaderSimEditor", this, Form("Toggle(=%d)", (Int_t)AliEveTRDLoader::kTRDHits));
+  fGroupFrame->AddFrame(fCheckedHits, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
 
-  fLoadDigits = new TGCheckButton(fGroupFrame,"  Digits");
-  fLoadDigits->Connect("Clicked()", "AliEveTRDLoaderSimEditor", this, "Toggle(=1)");
-  fGroupFrame->AddFrame(fLoadDigits, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
+  fCheckedDigits = new TGCheckButton(fGroupFrame,"  Digits");
+  fCheckedDigits->Connect("Clicked()", "AliEveTRDLoaderSimEditor", this, Form("Toggle(=%d)", (Int_t)AliEveTRDLoader::kTRDDigits));
+  fGroupFrame->AddFrame(fCheckedDigits, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
 
-  fLoadClusters = new TGCheckButton(fGroupFrame,"  Clusters");
-  fLoadClusters->Connect("Clicked()", "AliEveTRDLoaderSimEditor", this, "Toggle(=2)");
-  fGroupFrame->AddFrame(fLoadClusters, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
+  fCheckedClusters = new TGCheckButton(fGroupFrame,"  Clusters");
+  fCheckedClusters->Connect("Clicked()", "AliEveTRDLoaderSimEditor", this, Form("Toggle(=%d)", (Int_t)AliEveTRDLoader::kTRDClusters));
+  fGroupFrame->AddFrame(fCheckedClusters, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
 
-  fLoadTracks = new TGCheckButton(fGroupFrame,"  Tracklets ");
-  fLoadTracks->Connect("Clicked()", "AliEveTRDLoaderSimEditor", this, "Toggle(=3)");
-  fGroupFrame->AddFrame(fLoadTracks, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
+  fCheckedTracklets = new TGCheckButton(fGroupFrame,"  Tracklets ");
+  fCheckedTracklets->Connect("Clicked()", "AliEveTRDLoaderSimEditor", this, Form("Toggle(=%d)", (Int_t)AliEveTRDLoader::kTRDTracklets));
+  fGroupFrame->AddFrame(fCheckedTracklets, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
 
   fGroupFrame->SetLayoutManager(new TGVerticalLayout(fGroupFrame));
   //   fGroupFrame->Resize(164,116);
   AddFrame(fGroupFrame, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
 }
 
-//______________________________________________________________________________
-AliEveTRDLoaderSimEditor::~AliEveTRDLoaderSimEditor()
-{}
-
 //______________________________________________________________________________
 void AliEveTRDLoaderSimEditor::SetModel(TObject* obj)
 {
-  fM = dynamic_cast<AliEveTRDLoaderSim*>(obj);
-
-  Bool_t kFile = kTRUE;
-  if(fM->fFilename.CompareTo("") == 0) kFile = kFALSE;
-
-  /*   printf("\thits      %s\n", fM->fLoadHits ? "true" : "false");
-    printf("\tdigits    %s\n", fM->fLoadDigits ? "true" : "false");
-    printf("\tclusters  %s\n", fM->fLoadClusters ? "true" : "false");
-    printf("\ttracklets %s\n", fM->fLoadTracks ? "true" : "false");*/
-  fLoadHits->SetEnabled(kFile);
-  if(kFile) fLoadHits->SetState(fM->fLoadHits ? kButtonDown : kButtonUp);
-  fLoadDigits->SetEnabled(kFile);
-  if(kFile) fLoadDigits->SetState(fM->fLoadDigits ? kButtonDown : kButtonUp);
-  fLoadClusters->SetEnabled(kFile);
-  if(kFile) fLoadClusters->SetState(fM->fLoadClusters ? kButtonDown : kButtonUp);
-  fLoadTracks->SetEnabled(kFile);
-  if(kFile) fLoadTracks->SetState(fM->fLoadTracks ? kButtonDown : kButtonUp);
+  // Set model object.
+
+  if(!(fM = dynamic_cast<AliEveTRDLoaderSim*>(obj))) return;
+
+  Bool_t kRL   = (fM->IsDataLinked()) ? kTRUE : kFALSE;
+
+  fCheckedHits->SetEnabled(kRL);
+  if(kRL) fCheckedHits->SetState(fM->fDataType&AliEveTRDLoader::kTRDHits ? kButtonDown : kButtonUp);
+  fCheckedDigits->SetEnabled(kRL);
+  if(kRL) fCheckedDigits->SetState(fM->fDataType&AliEveTRDLoader::kTRDDigits ? kButtonDown : kButtonUp);
+  fCheckedClusters->SetEnabled(kRL);
+  if(kRL) fCheckedClusters->SetState(fM->fDataType&AliEveTRDLoader::kTRDClusters ? kButtonDown : kButtonUp);
+  fCheckedTracklets->SetEnabled(kRL);
+  if(kRL) fCheckedTracklets->SetState(fM->fDataType&AliEveTRDLoader::kTRDTracklets ? kButtonDown : kButtonUp);
 }
 
 //______________________________________________________________________________
 void AliEveTRDLoaderSimEditor::Toggle(Int_t id)
 {
+  // Toggle given button id.
+
   switch(id){
-    case 0:
-      fM->fLoadHits = fLoadHits->IsDown() ? kTRUE : kFALSE;
-      break;
-    case 1:
-      fM->fLoadDigits = fLoadDigits->IsDown() ? kTRUE : kFALSE;
-      break;
-    case 2:
-      fM->fLoadClusters = fLoadClusters->IsDown() ? kTRUE : kFALSE;
-      break;
-    case 3:
-      fM->fLoadTracks = fLoadTracks->IsDown() ? kTRUE : kFALSE;
-      break;
+  case AliEveTRDLoader::kTRDHits:
+    fM->fDataType |= fCheckedHits->IsDown() ? AliEveTRDLoader::kTRDHits : 0;
+    break;
+  case AliEveTRDLoader::kTRDDigits:
+    fM->fDataType |= fCheckedDigits->IsDown() ? AliEveTRDLoader::kTRDDigits : 0;
+    break;
+  case AliEveTRDLoader::kTRDClusters:
+    fM->fDataType |= fCheckedClusters->IsDown() ? AliEveTRDLoader::kTRDClusters : 0;
+    break;
+  case AliEveTRDLoader::kTRDTracklets:
+    fM->fDataType |= fCheckedTracklets->IsDown() ? AliEveTRDLoader::kTRDTracklets : 0;
+    break;
   }
 }
 
-///////////////////////////////////////////////////////////
-/////////////   TRDLoaderRawEditor    /////////////////////
-///////////////////////////////////////////////////////////
-
-// //________________________________________________________
-// TRDLoaderRawEditor::TRDLoaderRawEditor(const TGWindow* p, Int_t width, Int_t height, UInt_t options, Pixel_t back) : TGedFrame(p, width, height, options | kVerticalFrame, back)
-// {
-//     MakeTitle("AliEveTRDLoaderRaw");
-// }
-//
-// void        TRDLoaderRawEditor::SetModel(TObject* obj)
-// {
-//     Info("SetModel()", "");
-//     fM = dynamic_cast<AliEveTRDLoaderRaw*>(obj);
-// }