ROOT logo
// $Id$
// Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007

/**************************************************************************
 * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. *
 * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for          *
 * full copyright notice.                                                 *
 **************************************************************************/

#include "AliEveTRDLoader.h"
#include "AliEveTRDModuleImp.h"
#include "EveBase/AliEveEventManager.h"

#include <TEveManager.h>
#include <TEveGValuators.h>

#include "TGeoManager.h"
#include "TSystem.h"
#include "TFile.h"
#include "TTree.h"
#include "TObjString.h"
#include "TObjArray.h"
#include "TClonesArray.h"

#include <TGLabel.h>
#include <TGButton.h>
#include <TGTextEntry.h>
#include <TGFileDialog.h>

#include "AliLog.h"
#include "AliCDBManager.h"

#include "AliTRDhit.h"
#include "AliTRDcluster.h"
#include "AliTRDdigitsManager.h"
#include "AliTRDgeometry.h"

ClassImp(AliEveTRDLoader)
ClassImp(AliEveTRDLoaderEditor)

///////////////////////////////////////////////////////////
/////////////     AliEveTRDLoader     /////////////////////
///////////////////////////////////////////////////////////


//______________________________________________________________________________
AliEveTRDLoader::AliEveTRDLoader(const Text_t* n, const Text_t* t) : TEveElementList(n, t)
  ,fDataType(0)
  ,fSM(-1)
  ,fStack(-1)
  ,fLy(-1)
  ,fEvent(-1)
  ,fGeo(0x0)
  ,fFilename("")
  ,fDir(".")
{
  // Constructor.

  AliEveEventManager::AssertGeometry();

  fGeo = new AliTRDgeometry();
  //fGeo->CreateClusterMatrixArray();
}

//______________________________________________________________________________
void AliEveTRDLoader::AddChambers(int sm, int stk, int ly)
{
  // Add specified chambers.

  fSM=sm; fStack=stk; fLy=ly;
  Int_t ismStart = (sm == -1) ?  0 : sm;
  Int_t ismStop  = (sm == -1) ? 18 : sm+1;
  Int_t istkStart= (stk == -1)?  0 : stk;
  Int_t istkStop = (stk == -1)?  5 : stk+1;
  Int_t ilyStart = (ly == -1) ?  0 : ly;
  Int_t ilyStop  = (ly == -1) ?  6 : ly+1;

  List_i ichmb;
  ichmb = fChildren.begin();
  while(ichmb != fChildren.end()){
    (*ichmb)->SetRnrSelf(kFALSE);
    ichmb++;
  }

  AliEveTRDNode *lSM=0x0, *lSTK=0x0;
  AliEveTRDChamber *lCHMB = 0x0;
  int det;
  for (int ism=ismStart; ism<ismStop; ism++){
    if(!(lSM = (AliEveTRDNode*)FindChild(Form("SM%03d", ism)))){
      AddElement(lSM = new AliEveTRDNode("SM", ism));
      lSM->SetElementTitle(Form("Supermodule %2d", ism));
    }
    lSM->SetRnrSelf(kTRUE);

    for (int istk=istkStart; istk<istkStop; istk++) {
      if(!(lSTK = (AliEveTRDNode*)lSM->FindChild("Stack%03d"))){
        lSM->AddElement(lSTK = new AliEveTRDNode("Stack", istk));
        lSTK->SetElementTitle(Form("SM %2d Stack %1d", ism, istk));
      }
      lSTK->SetRnrSelf(kTRUE);
      
      for (int ily=ilyStart; ily<ilyStop; ily++) {
        det = fGeo->GetDetector(ily, istk, ism);
        if(!(lCHMB = (AliEveTRDChamber*)lSTK->FindChild(Form("Chmb%03d", det)))){
          lSTK->AddElement(lCHMB = new AliEveTRDChamber(det));
          lCHMB->SetGeometry(fGeo);
          lCHMB->SetElementTitle(Form("SM %2d Stack %1d Layer %1d", ism, istk, ily));
        }
        lCHMB->SetRnrSelf(kTRUE);
      }
    }
  }
  gEve->Redraw3D();
}

//______________________________________________________________________________
AliEveTRDChamber* AliEveTRDLoader::GetChamber(int d)
{
  // Get given chamber.

  Int_t ism  = fGeo->GetSector(d), 
        istk = fGeo->GetStack(d); 
  
  AliEveTRDNode *node = 0x0;
  if(!(node = (AliEveTRDNode*)FindChild(Form("SM%03d", ism)))) return 0x0;
  if(!(node = (AliEveTRDNode*)node->FindChild(Form("Stack%03d", istk)))) return 0x0;
  return (AliEveTRDChamber*)node->FindChild(Form("Chmb%03d", d));
}

//______________________________________________________________________________
Bool_t AliEveTRDLoader::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;
  }

  fEvent = ev;

  Unload();

  Int_t ndt(0);
  const Char_t *tn[] = {"TreeH", "TreeD", "TreeR", "tracklets-raw"};
  const Char_t *fn[] = {"Hits", "Digits", "RecPoints", "Tracklets"};
  TTree *t(NULL); TFile *f(NULL);
  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(!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(!(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;
      }
    }
    f->Close(); //delete f;
  }
  gEve->Redraw3D();

  return Bool_t(ndt);
}


//______________________________________________________________________________
Bool_t AliEveTRDLoader::LoadHits(TTree *tH)
{
  // Load hits.

  AliInfo("Loading ...");
  if(!fChildren.size()) return kFALSE;

  AliEveTRDChamber *chmb(NULL);
  TClonesArray *hits = new TClonesArray("AliTRDhit", 100);
  tH->SetBranchAddress("TRD", &hits);
  Int_t idx, nhits;
  for(int iTrack=0; iTrack<tH->GetEntries(); iTrack++){
    if(!tH->GetEvent(iTrack)) continue;
    if(!(nhits = hits->GetEntriesFast())) continue;

    idx = 0;
    while(idx < nhits){
      Int_t det = ((AliTRDhit*)hits->UncheckedAt(idx))->GetDetector();
      chmb = GetChamber(det);
      if(chmb) chmb->LoadHits(hits, idx);
      else{
        AliTRDhit *hit(NULL);
        while(idx < nhits){
          hit = (AliTRDhit*)hits->UncheckedAt(idx);
          if(hit->GetDetector() != det) break;
          idx++;
        }
      }
    }
    hits->Delete();
  }
  return kTRUE;
}


//______________________________________________________________________________
Bool_t AliEveTRDLoader::LoadClusters(TTree *tC)
{
  // Load clusters.

  AliInfo("Loading ...");
  if(!fChildren.size()) return kFALSE;

  TObjArray *clusters(NULL);
  tC->SetBranchAddress("TRDcluster", &clusters);

  AliEveTRDChamber *chmb(NULL);
  AliTRDcluster *c(NULL);
  for(int idet=0; idet<AliTRDgeometry::kNdet; idet++){
    tC->GetEntry(idet);
    if(!clusters->GetEntriesFast()) continue;
    if(!(c = (AliTRDcluster*)clusters->UncheckedAt(0))) continue;
    if((chmb = GetChamber(c->GetDetector()))) chmb->LoadClusters(clusters);
  }
  return kTRUE;
}


//______________________________________________________________________________
Bool_t AliEveTRDLoader::LoadDigits(TTree *tD)
{
  // Load digits.

  AliInfo("Loading ...");

  if(!fChildren.size()) return kFALSE;

  AliEveTRDChamber *chmb(NULL);
  AliTRDdigitsManager dm;
  dm.ReadDigits(tD);
  for(int idet=0; idet<AliTRDgeometry::kNdet; idet++){
    if(!(chmb=GetChamber(idet))) continue;
    chmb->LoadDigits(&dm);
  }
  return kTRUE;
}


//______________________________________________________________________________
Bool_t AliEveTRDLoader::LoadTracklets(TTree *trklTree)
{
  // Load tracklets.

  AliInfo("Loading ...");
  if(!fChildren.size()) return kFALSE;


  AliEveTRDChamber *chmb(NULL);

  for(int idet=0; idet<AliTRDgeometry::kNdet; idet++){
    if((chmb = GetChamber(idet)))
      chmb->LoadTracklets(trklTree);
  }

  return kTRUE;
}


//______________________________________________________________________________
Bool_t AliEveTRDLoader::Open(const char *filename, const char *dir)
{
  // Open given file in given directory.

  fFilename = filename;
  fDir = dir;
  TObjArray *so = fFilename.Tokenize(".");

  if(((TObjString*)(*so)[0])->GetString().CompareTo("TRD") != 0){
    AliError(Form("Filename %s do not fulfill AliRoot naming conventions.", filename));
    delete so;
    return kFALSE;
  }
  if(gSystem->AccessPathName(Form("%s/%s", dir, filename))){
    AliError(Form("Missing file %s/%s", dir, filename));
    delete so;
    return kFALSE;
  }
  if(((TObjString*)(*so)[1])->GetString().CompareTo("Hits") == 0){
    if(!(fDataType&kTRDHits)){
      AliInfo("Data type set to HITS according to file name.");
      fDataType|=kTRDHits;
    }
  } else   if(((TObjString*)(*so)[1])->GetString().CompareTo("Digits") == 0){
    if(!(fDataType&kTRDDigits)){
      AliInfo("Data type set to DIGITS according to file name.");
      fDataType|=kTRDDigits;
    }
  } else if(((TObjString*)(*so)[1])->GetString().CompareTo("RecPoints") == 0){
    if(!(fDataType&kTRDClusters)){
      AliInfo("Data type set to CLUSTERS according to file name.");
      fDataType|=kTRDClusters;
    }
  } else if(((TObjString*)(*so)[1])->GetString().CompareTo("Tracklets") == 0){
    if(!(fDataType&kTRDTracklets)){
      AliInfo("Data type set to TRACKLETS according to file name.");
      fDataType|=kTRDTracklets;
    }
  } else {
    AliError("Filename didn't fulfill naming conventions. No data will be loaded.");
    delete so;
    return kFALSE;
  }
  delete so;
  SetDataLinked();
  return kTRUE;
}

//______________________________________________________________________________
void AliEveTRDLoader::Paint(Option_t *option)
{
  // Paint object.

  AliEveTRDModule *module(NULL);
  List_i ichmb = fChildren.begin();
  while(ichmb != fChildren.end()){
    if((module = dynamic_cast<AliEveTRDModule*>(*ichmb))) module->Paint(option);
    ichmb++;
  }
}


//______________________________________________________________________________
void AliEveTRDLoader::Unload()
{
  // Unload module data.

  List_i ichmb = fChildren.begin();
  while(ichmb != fChildren.end()){
    //(dynamic_cast<AliEveTRDModule*>(*ichmb))->Reset();
    ichmb++;
  }
}

///////////////////////////////////////////////////////////
/////////////   AliEveTRDLoaderEditor       /////////////////////
///////////////////////////////////////////////////////////

//______________________________________________________________________________
AliEveTRDLoaderEditor::AliEveTRDLoaderEditor(const TGWindow* p, Int_t width, Int_t height,
					     UInt_t options, Pixel_t back) :
  TGedFrame(p, width, height, options | kVerticalFrame, back),
  fM(0), fFile(0), fBrowse(0x0), fEvent(0),
  fSMNumber(0), fStackNumber(0), fPlaneNumber(0)
{
  // Constructor.

  MakeTitle("AliEveTRDLoader");

  // file browser frame
  Int_t labelW = 42;
  TGHorizontalFrame* f = new TGHorizontalFrame(this);
  TGHorizontalFrame* g = new TGHorizontalFrame(f, labelW, 0, kFixedWidth);
  TGLabel* l = new TGLabel(g, "File: ");
  g->AddFrame(l, new TGLayoutHints(kLHintsLeft, 0,0,4,0));
  f->AddFrame(g);
  fFile = new TGTextEntry(f);
  fFile->SetToolTipText("Select TRD data file or galice.root");
  fFile->SetWidth(140);
  fFile->Connect("DoubleClicked()", "AliEveTRDLoaderEditor", this, "FileOpen()");
  f->AddFrame(fFile);

  fBrowse = new TGTextButton(f, "Browse");
  f->AddFrame(fBrowse);
  fBrowse->Connect("Clicked()", "AliEveTRDLoaderEditor", this, "FileOpen()");
  AddFrame(f, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,5,5,5,5));


  // "Chamber(s) selector" group frame
  TGGroupFrame *fGroupFrame1974 = new TGGroupFrame(this,"Chamber(s) selector");
  TGVerticalFrame *fVerticalFrame1974 = new TGVerticalFrame(fGroupFrame1974, 150, 50,kVerticalFrame);

  fSMNumber = new TEveGValuator(fVerticalFrame1974, "SM:", 0, 0);
  fSMNumber->SetShowSlider(kFALSE);
  fSMNumber->SetLabelWidth(labelW);
  fSMNumber->SetNELength(6);
  fSMNumber->Build();
  fSMNumber->SetLimits(-1, 17);
  fSMNumber->SetToolTip("Supermodule id [-1 for all]");
  fVerticalFrame1974->AddFrame(fSMNumber, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterX | kLHintsExpandY,2,2,2,2));

  fStackNumber = new TEveGValuator(fVerticalFrame1974, "Stack:", 0, 0);
  fStackNumber->SetShowSlider(kFALSE);
  fStackNumber->SetLabelWidth(labelW);
  fStackNumber->SetNELength(6);
  fStackNumber->Build();
  fStackNumber->SetLimits(-1, 4);
  fStackNumber->SetToolTip("Stack id [-1 for all in this SM]");
  fVerticalFrame1974->AddFrame(fStackNumber, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterX | kLHintsExpandY,2,2,2,2));

  fPlaneNumber = new TEveGValuator(fVerticalFrame1974, "Plane:", 0, 0);
  fPlaneNumber->SetShowSlider(kFALSE);
  fPlaneNumber->SetLabelWidth(labelW);
  fPlaneNumber->SetNELength(6);
  fPlaneNumber->Build();
  fPlaneNumber->SetLimits(-1, 5);
  fPlaneNumber->SetToolTip("Plane id [-1 for all in this stack]");

  fVerticalFrame1974->AddFrame(fPlaneNumber, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterX | kLHintsExpandY,2,2,2,2));

  fGroupFrame1974->AddFrame(fVerticalFrame1974, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsExpandY | kLHintsCenterX,2,2,2,2));

  TGTextButton *fTextButton2037 = new TGTextButton(fGroupFrame1974,"Select");
  fTextButton2037->SetTextJustify(36);
  fGroupFrame1974->AddFrame(fTextButton2037, new TGLayoutHints(kLHintsExpandY | kLHintsCenterX,2,2,2,2));
  fTextButton2037->SetToolTipText("Apply selection", 400);
  fTextButton2037->Connect("Clicked()",
                           "AliEveTRDLoaderEditor", this, "AddChambers()");

  fGroupFrame1974->SetLayoutManager(new TGHorizontalLayout(fGroupFrame1974));
  AddFrame(fGroupFrame1974, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,5,5,5,5));


  // Event steering frame
  f = new TGHorizontalFrame(this);
  TGTextButton *fGoTo = new TGTextButton(f, "GoTo");
  fGoTo->SetTextJustify(36);
  fGoTo->Resize(164,22);
  f->AddFrame(fGoTo, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
  fGoTo->SetToolTipText("Skip to event", 400);
  fGoTo->Connect("Clicked()", "AliEveTRDLoaderEditor", this, "GoTo()");

  fEvent = new TEveGValuator(f, "Event:", 110, 0);
  fEvent->SetShowSlider(kFALSE);
  fEvent->SetLabelWidth(labelW);
  fEvent->SetNELength(6);
  fEvent->Build();
  fEvent->SetLimits(-1, 1000);
  fEvent->SetToolTip("Set event number to be monitored");
  fEvent->Connect("ValueSet(Double_t)",
                  "AliEveTRDLoaderEditor", this, "SetEvent(Double_t)");
  f->AddFrame(fEvent, new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 2,2,2,2));

  TGTextButton *fNext = new TGTextButton(f, "Next");
  fNext->SetTextJustify(36);
  fNext->Resize(164,22);
  f->AddFrame(fNext, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
  fNext->SetToolTipText("Next event", 400);
  fNext->Connect("Clicked()", "AliEveTRDLoaderEditor", this, "Next()");

  AddFrame(f,new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,5,5,5,5));

}

//______________________________________________________________________________
void AliEveTRDLoaderEditor::SetModel(TObject* obj)
{
  // Set model object.

  if(!(fM = dynamic_cast<AliEveTRDLoader*>(obj))) return;

  fFile->SetEnabled(!fM->IsDataLinked());
  fFile->SetText(gSystem->BaseName(fM->fFilename.Data()));
  fBrowse->SetEnabled(!fM->IsDataLinked());

  fEvent->SetEnabled(fM->IsDataLinked());
  fEvent->GetEntry()->SetIntNumber(fM->fEvent);

  fSMNumber->SetEnabled(fM->IsDataLinked());
  fSMNumber->GetEntry()->SetIntNumber(fM->fSM);


  fStackNumber->SetEnabled(fM->IsDataLinked());
  fStackNumber->GetEntry()->SetIntNumber(fM->fStack);


  fPlaneNumber->SetEnabled(fM->IsDataLinked());
  fPlaneNumber->GetEntry()->SetIntNumber(fM->fLy);
}

//______________________________________________________________________________
void AliEveTRDLoaderEditor::AddChambers()
{
  // Slot to add chambers.

  fM->fSM    = (int)fSMNumber->GetEntry()->GetNumber();
  fM->fStack = (int)fStackNumber->GetEntry()->GetNumber();
  fM->fLy    = (int)fPlaneNumber->GetEntry()->GetNumber();
  fM->AddChambers(fM->fSM, fM->fStack, fM->fLy);
}

//______________________________________________________________________________
void AliEveTRDLoaderEditor::FileOpen()
{
  // Slot for opening of file.

  TGFileInfo fi;
  fi.fIniDir    = StrDup(gSystem->DirName (fM->fFilename.Data()));
  fi.fFilename  = StrDup(gSystem->BaseName(fM->fFilename.Data()));
  //  fi.fFileTypes = tpcfiletypes;

  new TGFileDialog(fClient->GetRoot(), gEve->GetMainWindow(), kFDOpen, &fi);
  if (!fi.fFilename) return;

  if(fM->Open(gSystem->BaseName(fi.fFilename), gSystem->DirName (fi.fFilename))){ 
    fFile->SetToolTipText(gSystem->DirName (fi.fFilename));
    fFile->SetText       (gSystem->BaseName(fi.fFilename));
  } else fFile->Clear();

  this->SetModel(fM);
}

void AliEveTRDLoaderEditor::GoTo()
{
  // Slot for loading of event.

  fM->GoToEvent(fM->fEvent);
}

void AliEveTRDLoaderEditor::Next()
{
  // Slot for loading of event.

  fM->NextEvent();
}
 AliEveTRDLoader.cxx:1
 AliEveTRDLoader.cxx:2
 AliEveTRDLoader.cxx:3
 AliEveTRDLoader.cxx:4
 AliEveTRDLoader.cxx:5
 AliEveTRDLoader.cxx:6
 AliEveTRDLoader.cxx:7
 AliEveTRDLoader.cxx:8
 AliEveTRDLoader.cxx:9
 AliEveTRDLoader.cxx:10
 AliEveTRDLoader.cxx:11
 AliEveTRDLoader.cxx:12
 AliEveTRDLoader.cxx:13
 AliEveTRDLoader.cxx:14
 AliEveTRDLoader.cxx:15
 AliEveTRDLoader.cxx:16
 AliEveTRDLoader.cxx:17
 AliEveTRDLoader.cxx:18
 AliEveTRDLoader.cxx:19
 AliEveTRDLoader.cxx:20
 AliEveTRDLoader.cxx:21
 AliEveTRDLoader.cxx:22
 AliEveTRDLoader.cxx:23
 AliEveTRDLoader.cxx:24
 AliEveTRDLoader.cxx:25
 AliEveTRDLoader.cxx:26
 AliEveTRDLoader.cxx:27
 AliEveTRDLoader.cxx:28
 AliEveTRDLoader.cxx:29
 AliEveTRDLoader.cxx:30
 AliEveTRDLoader.cxx:31
 AliEveTRDLoader.cxx:32
 AliEveTRDLoader.cxx:33
 AliEveTRDLoader.cxx:34
 AliEveTRDLoader.cxx:35
 AliEveTRDLoader.cxx:36
 AliEveTRDLoader.cxx:37
 AliEveTRDLoader.cxx:38
 AliEveTRDLoader.cxx:39
 AliEveTRDLoader.cxx:40
 AliEveTRDLoader.cxx:41
 AliEveTRDLoader.cxx:42
 AliEveTRDLoader.cxx:43
 AliEveTRDLoader.cxx:44
 AliEveTRDLoader.cxx:45
 AliEveTRDLoader.cxx:46
 AliEveTRDLoader.cxx:47
 AliEveTRDLoader.cxx:48
 AliEveTRDLoader.cxx:49
 AliEveTRDLoader.cxx:50
 AliEveTRDLoader.cxx:51
 AliEveTRDLoader.cxx:52
 AliEveTRDLoader.cxx:53
 AliEveTRDLoader.cxx:54
 AliEveTRDLoader.cxx:55
 AliEveTRDLoader.cxx:56
 AliEveTRDLoader.cxx:57
 AliEveTRDLoader.cxx:58
 AliEveTRDLoader.cxx:59
 AliEveTRDLoader.cxx:60
 AliEveTRDLoader.cxx:61
 AliEveTRDLoader.cxx:62
 AliEveTRDLoader.cxx:63
 AliEveTRDLoader.cxx:64
 AliEveTRDLoader.cxx:65
 AliEveTRDLoader.cxx:66
 AliEveTRDLoader.cxx:67
 AliEveTRDLoader.cxx:68
 AliEveTRDLoader.cxx:69
 AliEveTRDLoader.cxx:70
 AliEveTRDLoader.cxx:71
 AliEveTRDLoader.cxx:72
 AliEveTRDLoader.cxx:73
 AliEveTRDLoader.cxx:74
 AliEveTRDLoader.cxx:75
 AliEveTRDLoader.cxx:76
 AliEveTRDLoader.cxx:77
 AliEveTRDLoader.cxx:78
 AliEveTRDLoader.cxx:79
 AliEveTRDLoader.cxx:80
 AliEveTRDLoader.cxx:81
 AliEveTRDLoader.cxx:82
 AliEveTRDLoader.cxx:83
 AliEveTRDLoader.cxx:84
 AliEveTRDLoader.cxx:85
 AliEveTRDLoader.cxx:86
 AliEveTRDLoader.cxx:87
 AliEveTRDLoader.cxx:88
 AliEveTRDLoader.cxx:89
 AliEveTRDLoader.cxx:90
 AliEveTRDLoader.cxx:91
 AliEveTRDLoader.cxx:92
 AliEveTRDLoader.cxx:93
 AliEveTRDLoader.cxx:94
 AliEveTRDLoader.cxx:95
 AliEveTRDLoader.cxx:96
 AliEveTRDLoader.cxx:97
 AliEveTRDLoader.cxx:98
 AliEveTRDLoader.cxx:99
 AliEveTRDLoader.cxx:100
 AliEveTRDLoader.cxx:101
 AliEveTRDLoader.cxx:102
 AliEveTRDLoader.cxx:103
 AliEveTRDLoader.cxx:104
 AliEveTRDLoader.cxx:105
 AliEveTRDLoader.cxx:106
 AliEveTRDLoader.cxx:107
 AliEveTRDLoader.cxx:108
 AliEveTRDLoader.cxx:109
 AliEveTRDLoader.cxx:110
 AliEveTRDLoader.cxx:111
 AliEveTRDLoader.cxx:112
 AliEveTRDLoader.cxx:113
 AliEveTRDLoader.cxx:114
 AliEveTRDLoader.cxx:115
 AliEveTRDLoader.cxx:116
 AliEveTRDLoader.cxx:117
 AliEveTRDLoader.cxx:118
 AliEveTRDLoader.cxx:119
 AliEveTRDLoader.cxx:120
 AliEveTRDLoader.cxx:121
 AliEveTRDLoader.cxx:122
 AliEveTRDLoader.cxx:123
 AliEveTRDLoader.cxx:124
 AliEveTRDLoader.cxx:125
 AliEveTRDLoader.cxx:126
 AliEveTRDLoader.cxx:127
 AliEveTRDLoader.cxx:128
 AliEveTRDLoader.cxx:129
 AliEveTRDLoader.cxx:130
 AliEveTRDLoader.cxx:131
 AliEveTRDLoader.cxx:132
 AliEveTRDLoader.cxx:133
 AliEveTRDLoader.cxx:134
 AliEveTRDLoader.cxx:135
 AliEveTRDLoader.cxx:136
 AliEveTRDLoader.cxx:137
 AliEveTRDLoader.cxx:138
 AliEveTRDLoader.cxx:139
 AliEveTRDLoader.cxx:140
 AliEveTRDLoader.cxx:141
 AliEveTRDLoader.cxx:142
 AliEveTRDLoader.cxx:143
 AliEveTRDLoader.cxx:144
 AliEveTRDLoader.cxx:145
 AliEveTRDLoader.cxx:146
 AliEveTRDLoader.cxx:147
 AliEveTRDLoader.cxx:148
 AliEveTRDLoader.cxx:149
 AliEveTRDLoader.cxx:150
 AliEveTRDLoader.cxx:151
 AliEveTRDLoader.cxx:152
 AliEveTRDLoader.cxx:153
 AliEveTRDLoader.cxx:154
 AliEveTRDLoader.cxx:155
 AliEveTRDLoader.cxx:156
 AliEveTRDLoader.cxx:157
 AliEveTRDLoader.cxx:158
 AliEveTRDLoader.cxx:159
 AliEveTRDLoader.cxx:160
 AliEveTRDLoader.cxx:161
 AliEveTRDLoader.cxx:162
 AliEveTRDLoader.cxx:163
 AliEveTRDLoader.cxx:164
 AliEveTRDLoader.cxx:165
 AliEveTRDLoader.cxx:166
 AliEveTRDLoader.cxx:167
 AliEveTRDLoader.cxx:168
 AliEveTRDLoader.cxx:169
 AliEveTRDLoader.cxx:170
 AliEveTRDLoader.cxx:171
 AliEveTRDLoader.cxx:172
 AliEveTRDLoader.cxx:173
 AliEveTRDLoader.cxx:174
 AliEveTRDLoader.cxx:175
 AliEveTRDLoader.cxx:176
 AliEveTRDLoader.cxx:177
 AliEveTRDLoader.cxx:178
 AliEveTRDLoader.cxx:179
 AliEveTRDLoader.cxx:180
 AliEveTRDLoader.cxx:181
 AliEveTRDLoader.cxx:182
 AliEveTRDLoader.cxx:183
 AliEveTRDLoader.cxx:184
 AliEveTRDLoader.cxx:185
 AliEveTRDLoader.cxx:186
 AliEveTRDLoader.cxx:187
 AliEveTRDLoader.cxx:188
 AliEveTRDLoader.cxx:189
 AliEveTRDLoader.cxx:190
 AliEveTRDLoader.cxx:191
 AliEveTRDLoader.cxx:192
 AliEveTRDLoader.cxx:193
 AliEveTRDLoader.cxx:194
 AliEveTRDLoader.cxx:195
 AliEveTRDLoader.cxx:196
 AliEveTRDLoader.cxx:197
 AliEveTRDLoader.cxx:198
 AliEveTRDLoader.cxx:199
 AliEveTRDLoader.cxx:200
 AliEveTRDLoader.cxx:201
 AliEveTRDLoader.cxx:202
 AliEveTRDLoader.cxx:203
 AliEveTRDLoader.cxx:204
 AliEveTRDLoader.cxx:205
 AliEveTRDLoader.cxx:206
 AliEveTRDLoader.cxx:207
 AliEveTRDLoader.cxx:208
 AliEveTRDLoader.cxx:209
 AliEveTRDLoader.cxx:210
 AliEveTRDLoader.cxx:211
 AliEveTRDLoader.cxx:212
 AliEveTRDLoader.cxx:213
 AliEveTRDLoader.cxx:214
 AliEveTRDLoader.cxx:215
 AliEveTRDLoader.cxx:216
 AliEveTRDLoader.cxx:217
 AliEveTRDLoader.cxx:218
 AliEveTRDLoader.cxx:219
 AliEveTRDLoader.cxx:220
 AliEveTRDLoader.cxx:221
 AliEveTRDLoader.cxx:222
 AliEveTRDLoader.cxx:223
 AliEveTRDLoader.cxx:224
 AliEveTRDLoader.cxx:225
 AliEveTRDLoader.cxx:226
 AliEveTRDLoader.cxx:227
 AliEveTRDLoader.cxx:228
 AliEveTRDLoader.cxx:229
 AliEveTRDLoader.cxx:230
 AliEveTRDLoader.cxx:231
 AliEveTRDLoader.cxx:232
 AliEveTRDLoader.cxx:233
 AliEveTRDLoader.cxx:234
 AliEveTRDLoader.cxx:235
 AliEveTRDLoader.cxx:236
 AliEveTRDLoader.cxx:237
 AliEveTRDLoader.cxx:238
 AliEveTRDLoader.cxx:239
 AliEveTRDLoader.cxx:240
 AliEveTRDLoader.cxx:241
 AliEveTRDLoader.cxx:242
 AliEveTRDLoader.cxx:243
 AliEveTRDLoader.cxx:244
 AliEveTRDLoader.cxx:245
 AliEveTRDLoader.cxx:246
 AliEveTRDLoader.cxx:247
 AliEveTRDLoader.cxx:248
 AliEveTRDLoader.cxx:249
 AliEveTRDLoader.cxx:250
 AliEveTRDLoader.cxx:251
 AliEveTRDLoader.cxx:252
 AliEveTRDLoader.cxx:253
 AliEveTRDLoader.cxx:254
 AliEveTRDLoader.cxx:255
 AliEveTRDLoader.cxx:256
 AliEveTRDLoader.cxx:257
 AliEveTRDLoader.cxx:258
 AliEveTRDLoader.cxx:259
 AliEveTRDLoader.cxx:260
 AliEveTRDLoader.cxx:261
 AliEveTRDLoader.cxx:262
 AliEveTRDLoader.cxx:263
 AliEveTRDLoader.cxx:264
 AliEveTRDLoader.cxx:265
 AliEveTRDLoader.cxx:266
 AliEveTRDLoader.cxx:267
 AliEveTRDLoader.cxx:268
 AliEveTRDLoader.cxx:269
 AliEveTRDLoader.cxx:270
 AliEveTRDLoader.cxx:271
 AliEveTRDLoader.cxx:272
 AliEveTRDLoader.cxx:273
 AliEveTRDLoader.cxx:274
 AliEveTRDLoader.cxx:275
 AliEveTRDLoader.cxx:276
 AliEveTRDLoader.cxx:277
 AliEveTRDLoader.cxx:278
 AliEveTRDLoader.cxx:279
 AliEveTRDLoader.cxx:280
 AliEveTRDLoader.cxx:281
 AliEveTRDLoader.cxx:282
 AliEveTRDLoader.cxx:283
 AliEveTRDLoader.cxx:284
 AliEveTRDLoader.cxx:285
 AliEveTRDLoader.cxx:286
 AliEveTRDLoader.cxx:287
 AliEveTRDLoader.cxx:288
 AliEveTRDLoader.cxx:289
 AliEveTRDLoader.cxx:290
 AliEveTRDLoader.cxx:291
 AliEveTRDLoader.cxx:292
 AliEveTRDLoader.cxx:293
 AliEveTRDLoader.cxx:294
 AliEveTRDLoader.cxx:295
 AliEveTRDLoader.cxx:296
 AliEveTRDLoader.cxx:297
 AliEveTRDLoader.cxx:298
 AliEveTRDLoader.cxx:299
 AliEveTRDLoader.cxx:300
 AliEveTRDLoader.cxx:301
 AliEveTRDLoader.cxx:302
 AliEveTRDLoader.cxx:303
 AliEveTRDLoader.cxx:304
 AliEveTRDLoader.cxx:305
 AliEveTRDLoader.cxx:306
 AliEveTRDLoader.cxx:307
 AliEveTRDLoader.cxx:308
 AliEveTRDLoader.cxx:309
 AliEveTRDLoader.cxx:310
 AliEveTRDLoader.cxx:311
 AliEveTRDLoader.cxx:312
 AliEveTRDLoader.cxx:313
 AliEveTRDLoader.cxx:314
 AliEveTRDLoader.cxx:315
 AliEveTRDLoader.cxx:316
 AliEveTRDLoader.cxx:317
 AliEveTRDLoader.cxx:318
 AliEveTRDLoader.cxx:319
 AliEveTRDLoader.cxx:320
 AliEveTRDLoader.cxx:321
 AliEveTRDLoader.cxx:322
 AliEveTRDLoader.cxx:323
 AliEveTRDLoader.cxx:324
 AliEveTRDLoader.cxx:325
 AliEveTRDLoader.cxx:326
 AliEveTRDLoader.cxx:327
 AliEveTRDLoader.cxx:328
 AliEveTRDLoader.cxx:329
 AliEveTRDLoader.cxx:330
 AliEveTRDLoader.cxx:331
 AliEveTRDLoader.cxx:332
 AliEveTRDLoader.cxx:333
 AliEveTRDLoader.cxx:334
 AliEveTRDLoader.cxx:335
 AliEveTRDLoader.cxx:336
 AliEveTRDLoader.cxx:337
 AliEveTRDLoader.cxx:338
 AliEveTRDLoader.cxx:339
 AliEveTRDLoader.cxx:340
 AliEveTRDLoader.cxx:341
 AliEveTRDLoader.cxx:342
 AliEveTRDLoader.cxx:343
 AliEveTRDLoader.cxx:344
 AliEveTRDLoader.cxx:345
 AliEveTRDLoader.cxx:346
 AliEveTRDLoader.cxx:347
 AliEveTRDLoader.cxx:348
 AliEveTRDLoader.cxx:349
 AliEveTRDLoader.cxx:350
 AliEveTRDLoader.cxx:351
 AliEveTRDLoader.cxx:352
 AliEveTRDLoader.cxx:353
 AliEveTRDLoader.cxx:354
 AliEveTRDLoader.cxx:355
 AliEveTRDLoader.cxx:356
 AliEveTRDLoader.cxx:357
 AliEveTRDLoader.cxx:358
 AliEveTRDLoader.cxx:359
 AliEveTRDLoader.cxx:360
 AliEveTRDLoader.cxx:361
 AliEveTRDLoader.cxx:362
 AliEveTRDLoader.cxx:363
 AliEveTRDLoader.cxx:364
 AliEveTRDLoader.cxx:365
 AliEveTRDLoader.cxx:366
 AliEveTRDLoader.cxx:367
 AliEveTRDLoader.cxx:368
 AliEveTRDLoader.cxx:369
 AliEveTRDLoader.cxx:370
 AliEveTRDLoader.cxx:371
 AliEveTRDLoader.cxx:372
 AliEveTRDLoader.cxx:373
 AliEveTRDLoader.cxx:374
 AliEveTRDLoader.cxx:375
 AliEveTRDLoader.cxx:376
 AliEveTRDLoader.cxx:377
 AliEveTRDLoader.cxx:378
 AliEveTRDLoader.cxx:379
 AliEveTRDLoader.cxx:380
 AliEveTRDLoader.cxx:381
 AliEveTRDLoader.cxx:382
 AliEveTRDLoader.cxx:383
 AliEveTRDLoader.cxx:384
 AliEveTRDLoader.cxx:385
 AliEveTRDLoader.cxx:386
 AliEveTRDLoader.cxx:387
 AliEveTRDLoader.cxx:388
 AliEveTRDLoader.cxx:389
 AliEveTRDLoader.cxx:390
 AliEveTRDLoader.cxx:391
 AliEveTRDLoader.cxx:392
 AliEveTRDLoader.cxx:393
 AliEveTRDLoader.cxx:394
 AliEveTRDLoader.cxx:395
 AliEveTRDLoader.cxx:396
 AliEveTRDLoader.cxx:397
 AliEveTRDLoader.cxx:398
 AliEveTRDLoader.cxx:399
 AliEveTRDLoader.cxx:400
 AliEveTRDLoader.cxx:401
 AliEveTRDLoader.cxx:402
 AliEveTRDLoader.cxx:403
 AliEveTRDLoader.cxx:404
 AliEveTRDLoader.cxx:405
 AliEveTRDLoader.cxx:406
 AliEveTRDLoader.cxx:407
 AliEveTRDLoader.cxx:408
 AliEveTRDLoader.cxx:409
 AliEveTRDLoader.cxx:410
 AliEveTRDLoader.cxx:411
 AliEveTRDLoader.cxx:412
 AliEveTRDLoader.cxx:413
 AliEveTRDLoader.cxx:414
 AliEveTRDLoader.cxx:415
 AliEveTRDLoader.cxx:416
 AliEveTRDLoader.cxx:417
 AliEveTRDLoader.cxx:418
 AliEveTRDLoader.cxx:419
 AliEveTRDLoader.cxx:420
 AliEveTRDLoader.cxx:421
 AliEveTRDLoader.cxx:422
 AliEveTRDLoader.cxx:423
 AliEveTRDLoader.cxx:424
 AliEveTRDLoader.cxx:425
 AliEveTRDLoader.cxx:426
 AliEveTRDLoader.cxx:427
 AliEveTRDLoader.cxx:428
 AliEveTRDLoader.cxx:429
 AliEveTRDLoader.cxx:430
 AliEveTRDLoader.cxx:431
 AliEveTRDLoader.cxx:432
 AliEveTRDLoader.cxx:433
 AliEveTRDLoader.cxx:434
 AliEveTRDLoader.cxx:435
 AliEveTRDLoader.cxx:436
 AliEveTRDLoader.cxx:437
 AliEveTRDLoader.cxx:438
 AliEveTRDLoader.cxx:439
 AliEveTRDLoader.cxx:440
 AliEveTRDLoader.cxx:441
 AliEveTRDLoader.cxx:442
 AliEveTRDLoader.cxx:443
 AliEveTRDLoader.cxx:444
 AliEveTRDLoader.cxx:445
 AliEveTRDLoader.cxx:446
 AliEveTRDLoader.cxx:447
 AliEveTRDLoader.cxx:448
 AliEveTRDLoader.cxx:449
 AliEveTRDLoader.cxx:450
 AliEveTRDLoader.cxx:451
 AliEveTRDLoader.cxx:452
 AliEveTRDLoader.cxx:453
 AliEveTRDLoader.cxx:454
 AliEveTRDLoader.cxx:455
 AliEveTRDLoader.cxx:456
 AliEveTRDLoader.cxx:457
 AliEveTRDLoader.cxx:458
 AliEveTRDLoader.cxx:459
 AliEveTRDLoader.cxx:460
 AliEveTRDLoader.cxx:461
 AliEveTRDLoader.cxx:462
 AliEveTRDLoader.cxx:463
 AliEveTRDLoader.cxx:464
 AliEveTRDLoader.cxx:465
 AliEveTRDLoader.cxx:466
 AliEveTRDLoader.cxx:467
 AliEveTRDLoader.cxx:468
 AliEveTRDLoader.cxx:469
 AliEveTRDLoader.cxx:470
 AliEveTRDLoader.cxx:471
 AliEveTRDLoader.cxx:472
 AliEveTRDLoader.cxx:473
 AliEveTRDLoader.cxx:474
 AliEveTRDLoader.cxx:475
 AliEveTRDLoader.cxx:476
 AliEveTRDLoader.cxx:477
 AliEveTRDLoader.cxx:478
 AliEveTRDLoader.cxx:479
 AliEveTRDLoader.cxx:480
 AliEveTRDLoader.cxx:481
 AliEveTRDLoader.cxx:482
 AliEveTRDLoader.cxx:483
 AliEveTRDLoader.cxx:484
 AliEveTRDLoader.cxx:485
 AliEveTRDLoader.cxx:486
 AliEveTRDLoader.cxx:487
 AliEveTRDLoader.cxx:488
 AliEveTRDLoader.cxx:489
 AliEveTRDLoader.cxx:490
 AliEveTRDLoader.cxx:491
 AliEveTRDLoader.cxx:492
 AliEveTRDLoader.cxx:493
 AliEveTRDLoader.cxx:494
 AliEveTRDLoader.cxx:495
 AliEveTRDLoader.cxx:496
 AliEveTRDLoader.cxx:497
 AliEveTRDLoader.cxx:498
 AliEveTRDLoader.cxx:499
 AliEveTRDLoader.cxx:500
 AliEveTRDLoader.cxx:501
 AliEveTRDLoader.cxx:502
 AliEveTRDLoader.cxx:503
 AliEveTRDLoader.cxx:504
 AliEveTRDLoader.cxx:505
 AliEveTRDLoader.cxx:506
 AliEveTRDLoader.cxx:507
 AliEveTRDLoader.cxx:508
 AliEveTRDLoader.cxx:509
 AliEveTRDLoader.cxx:510
 AliEveTRDLoader.cxx:511
 AliEveTRDLoader.cxx:512
 AliEveTRDLoader.cxx:513
 AliEveTRDLoader.cxx:514
 AliEveTRDLoader.cxx:515
 AliEveTRDLoader.cxx:516
 AliEveTRDLoader.cxx:517
 AliEveTRDLoader.cxx:518
 AliEveTRDLoader.cxx:519
 AliEveTRDLoader.cxx:520
 AliEveTRDLoader.cxx:521
 AliEveTRDLoader.cxx:522
 AliEveTRDLoader.cxx:523
 AliEveTRDLoader.cxx:524
 AliEveTRDLoader.cxx:525
 AliEveTRDLoader.cxx:526
 AliEveTRDLoader.cxx:527
 AliEveTRDLoader.cxx:528
 AliEveTRDLoader.cxx:529
 AliEveTRDLoader.cxx:530
 AliEveTRDLoader.cxx:531
 AliEveTRDLoader.cxx:532
 AliEveTRDLoader.cxx:533
 AliEveTRDLoader.cxx:534
 AliEveTRDLoader.cxx:535
 AliEveTRDLoader.cxx:536
 AliEveTRDLoader.cxx:537
 AliEveTRDLoader.cxx:538
 AliEveTRDLoader.cxx:539
 AliEveTRDLoader.cxx:540
 AliEveTRDLoader.cxx:541
 AliEveTRDLoader.cxx:542
 AliEveTRDLoader.cxx:543