ROOT logo
// Author: Benjamin Hess   29/01/2010

/*************************************************************************
 * Copyright (C) 2009-2010, Alexandru Bercuci, Benjamin Hess.            *
 * All rights reserved.                                                  *
 *************************************************************************/


//////////////////////////////////////////////////////////////////////////
//                                                                      //
// AliEveTRDTrackList                                                   //
//                                                                      //
// An AliEveTRDTrackList is, in principal, a TEveElementList with some  //
// sophisticated features. You can add macros to this list, which then  //
// can be applied to the list of tracks (these tracks can be added to   //
// the list in the same way as for the TEveElementList). In general,    //
// please use AddMacro(...) for this purpose.                           //
// Macros that are no longer needed can be removed from the list via    //
// RemoveSelectedMacros(...).This function takes an iterator of the     //
// list of macros that are to be removed.                               //
// be removed. An entry looks like:                                     //
// The data for each macro consists of path, name, type and the command //
// that will be used to apply the macro. This stuff is stored in a map  //
// which takes the macro name for the key and the above mentioned data  //
// in a TMacroData-object for the value.                                //
// You can get the macro type via GetMacroType(...).                    //
// With ApplySTSelectionMacros(...) or ApplyProcessMacros(...)          //
// respectively you can apply the macros to the track list via          //
// iterators (same style like for RemoveSelectedMacros(...)(cf. above)).//
// Selection macros (de-)select macros according to a selection rule    //
// by setting the rnr-state of the tracks.                              //
// If multiple selection macros are applied, a track is selected, if    //
// all selection macros select the track.                               //
// Process macros create data or histograms, which will be stored in    //
// a temporary file. The editor of this class will access this file     //
// and draw all the stuff within it's DrawHistos() function. The file   //
// will be deleted by the destructor.                                   //
//                                                                      //
// Currently, the following macro types are supported:                  //
// Selection macros:                                                    //
// Bool_t YourMacro(const AliTRDtrackV1*);                              //
// Bool_t YourMacro(const AliTRDtrackV1*, const AliTRDtrackV1*);        //
//                                                                      //
// Process macros:                                                      //
// void YourMacro(const AliTRDtrackV1*, Double_t*&, Int_t&);            //
// void YourMacro(const AliTRDtrackV1*, const AliTRDtrackV1*,           //
//                Double_t*&, Int_t&);                                  //
// TH1* YourMacro(const AliTRDtrackV1*);                                //
// TH1* YourMacro(const AliTRDtrackV1*, const AliTRDtrackV1*);          //
//                                                                      //
// The macros which take 2 tracks are applied to all track pairs        //
// (whereby BOTH tracks of the pair have to be selected by the single   //
// track selection macros and have to be unequal, otherwise they will   //
// be skipped) that have been selected by ALL correlated tracks         //
// selection macros. The selection macros with 2 tracks do NOT affect   //
// process macros that process only a single track!                     //
//////////////////////////////////////////////////////////////////////////


// Uncomment to display debugging infos
//#define ALIEVETRDTRACKLIST_DEBUG

#include <AliLog.h>
#include <TFile.h>
#include <TFunction.h>
#include <TH1.h>
#include <TList.h>
#include <TMap.h>
#include <TObjString.h>
#include <TROOT.h>
#include <TSystem.h>
#include <TTree.h>
//#include <TTreeStream.h>
#include <TMethodCall.h>

#include <AliTRDReconstructor.h>

#include <EveDet/AliEveTRDTrackList.h>
#include <EveDet/AliEveTRDTrackListEditor.h>

// #include <../PWGPP/TRD/AliTRDrecoTask.h>
// #include <../PWGPP/TRD/AliTRDpwgppHelper.h>

ClassImp(AliEveTRDTrackList)
TFile *AliEveTRDTrackList::fgData(NULL);

///////////////////////////////////////////////////////////
/////////////   AliEveTRDTrackList ////////////////////////
///////////////////////////////////////////////////////////
AliEveTRDTrackList::AliEveTRDTrackList(const Text_t* n, const Text_t* t, Bool_t doColor):
  TEveElementList(n, t, doColor),
  fEditor(NULL),
  fDataFromMacroList(NULL),
  fMacroList(NULL),
  fHistoDataSelected(0),
  fMacroListSelected(0),
  fSelectedTab(1),                              // Standard tab: "Apply macros" (index 1)
  fSelectedStyle(0)
{
  // Creates the AliEveTRDTrackList.

  // Only accept childs of type AliEveTRDTrack
  SetChildClass(AliEveTRDTrack::Class());

  // Allocate memory for the lists and declare them as owners of their contents
  fDataFromMacroList = new TList();
  fDataFromMacroList->TCollection::SetOwner(kTRUE);

  fMacroList = new TMap();
  // Set map to owner of it's objects to delete them, if they are removed from the map
  fMacroList->SetOwnerKeyValue(kTRUE, kTRUE);

  // Set the build directory for AClic
  if(gSystem->AccessPathName(Form("%s/.trdQArec" , gSystem->Getenv("HOME")))) gSystem->Exec("mkdir $HOME/.trdQArec");
  gSystem->SetBuildDir(Form("%s/.trdQArec", gSystem->Getenv("HOME")));

  AddStandardContent();
}

//______________________________________________________
AliEveTRDTrackList::~AliEveTRDTrackList()
{
  // Frees allocated memory (lists etc.).

  // Let the editor know that the list will be destroyed -> The editor will save the data
  if (fEditor != 0)
  {
    fEditor->SaveMacroList(fMacroList);
    fEditor = 0;
  }

  if (fDataFromMacroList != 0)
  {
    fDataFromMacroList->Delete();
    delete fDataFromMacroList;
    fDataFromMacroList = 0;
  } 
  if (fMacroList != 0)
  {
    fMacroList->DeleteAll();
    delete fMacroList;
    fMacroList = 0;
  }
  // Note: gSystem->AccessPathName(...) returns kTRUE, if the access FAILED!
  if(!gSystem->AccessPathName(Form("/tmp/TRD.TrackListMacroData_%s.root", gSystem->Getenv("USER")))) 
    gSystem->Exec(Form("rm /tmp/TRD.TrackListMacroData_%s.root", gSystem->Getenv("USER")));
}

//______________________________________________________
Int_t AliEveTRDTrackList::AddMacro(const Char_t* path, const Char_t* nameC, Bool_t forceReload)
{
  // Checks, if the file exists and if the signature is correct.
  // If these criteria are fullfilled, the library for this macro is built
  // and the macro is added to the corresponding list.
  // Supported macro types:
  // Selection macros:                                                    
  // Bool_t YourMacro(const AliTRDtrackV1*)
  // Bool_t YourMacro(const AliTRDtrackV1*, const AliTRDtrackV1*)
  //
  // Process macros:                                                      
  // void YourMacro(const AliTRDtrackV1*, Double_t*&, Int_t&)             
  // void YourMacro(const AliTRDtrackV1*, const AliTRDtrackV1*,           
  //                Double_t*&, Int_t&)                                   
  // TH1* YourMacro(const AliTRDtrackV1*)                                 
  // TH1* YourMacro(const AliTRDtrackV1*, const AliTRDtrackV1*)                              

  Char_t pathname[fkMaxMacroPathNameLength];
  memset(pathname, '\0', sizeof(Char_t) * fkMaxMacroPathNameLength);

  // Expand the path and create the pathname
  Char_t* systemPath = gSystem->ExpandPathName(path);
  snprintf(pathname, fkMaxMacroPathNameLength, "%s/%s", systemPath, nameC);
  delete systemPath;
  systemPath = 0;

  // Delete ".C" from filename
  Char_t name[fkMaxMacroNameLength];
  memset(name, '\0', sizeof(Char_t) * fkMaxMacroNameLength);
  
  for (UInt_t ind = 0; ind < fkMaxMacroNameLength && ind < strlen(nameC) - 2; ind++)  name[ind] = nameC[ind];

  // Check, if files exists
  FILE* fp = NULL;
  if((fp = fopen(pathname, "rb"))){
    fclose(fp);
    fp = NULL;
  } else  return NOT_EXIST_ERROR;
  
  // Clean up root, load the desired macro and then check the type of the macro
  // A.B. gROOT->Reset();
 
  gROOT->ProcessLineSync(Form(".L %s+%c", pathname, forceReload ? '+' : ' '));

  // We need this line... otherwise, in some cases, there will be problems concerning ACLIC
  gROOT->ProcessLineSync(Form(".L %s", pathname));

  AliEveTRDTrackListMacroType type = GetMacroType(name, kFALSE);

  // Clean up again
  // A.B. gROOT->Reset();
  
  // Has not the correct signature!
  if (type == kUnknown)  return SIGNATURE_ERROR;

  // Only add macro, if it is not already in the list
  Int_t returnValue = WARNING;
  if(fMacroList->GetValue(name) == 0) {
    returnValue = AddMacroFast(path, name, type) ? SUCCESS : ERROR;
  }
  return returnValue;
}

//______________________________________________________
Bool_t AliEveTRDTrackList::AddMacroFast(const Char_t* path, const Char_t* name, AliEveTRDTrackListMacroType type)
{
  // Adds a macro (path/name) to the corresponding list. No checks are performed (file exist, 
  // macro already in list/map, signature correct),  no libraries are created!
  // You can use this function only, if the macro has been added successfully before 
  // (and then maybe was removed). The function is very fast. On success kTRUE is returned, otherwise: kFALSE;

  Bool_t success = kFALSE;

  switch (type)
  {
    case kSingleTrackSelect:
    case kCorrelTrackSelect:
    case kSingleTrackAnalyse:
    case kSingleTrackHisto:
    case kCorrelTrackAnalyse:
    case kCorrelTrackHisto:
      fMacroList->Add(new TObjString(name), new TMacroData(name, path, type));

      // We do not know, where the element has been inserted - deselect this list
      fMacroListSelected = 0;
    
      success = kTRUE;

#ifdef ALIEVETRDTRACKLIST_DEBUG
      // Successfull add will only be displayed in debug mode
      printf("AliEveTRDTrackList::AddMacroFast: Added macro \"%s/%s\" to the corresponding list\n", path, name);
#endif

      break;

    default:
      // Error will always be displayed
      printf("AliEveTRDTrackList::AddMacroFast: ERROR: Could not add macro \"%s/%s\" to the corresponding list\n", 
             path, name);

      success = kFALSE;

      break;
  }

  return success;
}

//______________________________________________________
void AliEveTRDTrackList::AddStandardContent()
{
  // Adds standard macros to the macro list.

  // Add your standard macros here, e.g.:
  // To add a macro use:
  // AddMacro("$(ALICE_ROOT)/myFolder", "myMacroName.C");
  // -> If the file does not exist, nothing happens. So if you want to handle this,
  // 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", "libCORRFW", "libTENDER.so", "libPWGPP.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;
//     AliError(Form("Fail loading %s.", libs[ilib]));
//     return;
//   }
// 
//   const Char_t *taskClassName[] = {"AliTRDcheckDET", "AliTRDresolution"};
//   AliTRDrecoTask *task(NULL);
//   TList *fPlots(NULL);
//   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 Track functors defined for task \"%s\"", taskClassName[it]));
//       delete task;
//       continue;
//     }
//     if(!(task->Histos())){
//       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;", 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);
//     }
//   }
}


//______________________________________________________
Bool_t AliEveTRDTrackList::ApplyProcessMacros(const TList* selIterator, const TList* procIterator)
{
  // Uses the procIterator (for the selected process macros) to apply the selected macros to the data.
  // Returns kTRUE on success, otherwise kFALSE. If there no process macros selected, kTRUE is returned 
  // (this is no error!).
  // The single track process macros are applied to all selected tracks.
  // The selIterator (for the selected selection macros) will be used to apply the correlated tracks selection
  // macros to all track pairs (whereby BOTH tracks have to be selected, otherwise they will be skipped).
  // All track pairs that have been selected by ALL correlated tracks selection macros will be processed by
  // the correlated tracks process macros.

  // No process macros need to be processed
  if (procIterator->GetEntries() <= 0)  return kTRUE;

  // Clear root
  // A.B. gROOT->Reset();
  
  // Clear old data and re-allocate
  TTree *treeSingle(NULL), *treeCorrel(NULL);
  Double_t singleTrackOut[100][10], correlTrackOut[100][10];
//  if (!fgData){
    TDirectory *cwd = gDirectory;
    fgData = TFile::Open(Form("/tmp/TRD.TrackListMacroData_%s.root", gSystem->Getenv("USER")), "RECREATE");
    treeSingle = new TTree("sTrack", "Data from single track processing");
    treeCorrel = new TTree("cTrack", "Data from correlated track processing");
    cwd->cd();
/*  } else {
    TDirectory *cwd = gDirectory;
    fgData = TFile::Open(Form("/tmp/TRD.TrackListMacroData_%s.root", gSystem->Getenv("USER")), "APPEND");
    treeSingle = (TTree*)fgData->Get("sTrack");
    treeCorrel = (TTree*)fgData->Get("cTrack");
    cwd->cd();
  }*/
  if (!treeSingle || !treeCorrel){
    Error("Apply process macros", "File \"/tmp/TRD.TrackListMacroData_%s.root\" could not be accessed properly!", gSystem->Getenv("USER"));
    return kFALSE;
  }
  
  if (fDataFromMacroList != 0) {
    fDataFromMacroList->Delete();
    delete fDataFromMacroList;
  }
  fDataFromMacroList = new TList();
  fDataFromMacroList->TCollection::SetOwner(kTRUE);

  fHistoDataSelected = 0;


  TMacroData* macro(NULL);

  TString* procName = new TString[procIterator->GetEntries()];
  TString* procCmds = new TString[procIterator->GetEntries()];
  AliEveTRDTrackListMacroType* mProcType = new AliEveTRDTrackListMacroType[procIterator->GetEntries()];

  TString* selCmds(NULL);
  AliEveTRDTrackListMacroType* mSelType(NULL);
  if (selIterator->GetEntries() > 0) {
    selCmds = new TString[selIterator->GetEntries()];
    mSelType = new AliEveTRDTrackListMacroType[selIterator->GetEntries()];
  }
  
  Bool_t selectedByCorrSelMacro = kFALSE;

  AliEveTRDTrackListMacroType macroType = kUnknown;
  Int_t numHistoMacros = 0;
  TH1** histos(NULL);

  AliEveTRDTrack* track1(NULL);
  AliEveTRDTrack* track2(NULL);

  // Collect the commands for each process macro and add them to "data-from-list"
  for (Int_t i = 0; i < procIterator->GetEntries(); i++){
    macro = (TMacroData*)fMacroList->GetValue(procIterator->At(i)->GetTitle());

    if (!macro){
      Error("Apply process macros", 
        "Macro list is corrupted: Macro \"%s\" is not registered!",
        procIterator->At(i)->GetTitle());
      continue;
    }

#ifdef ALIEVETRDTRACKLIST_DEBUG
    printf("AliEveTRDTrackList: Checking process macro: %s\n", macro->GetName());
#endif 
           
    // Find the type of the process macro
    macroType = macro->GetType();
    if (macroType == kSingleTrackHisto || macroType == kCorrelTrackHisto){
      mProcType[i] = macroType;
      numHistoMacros++;
      // Create the command 
      procCmds[i] = macro->GetCmd();
      procName[i] = macro->GetName();

      // Add to "data-from-list" -> Mark as a histo macro with the substring "(histo macro)"
      //fDataFromMacroList->Add(new TObjString(Form("%s (histo macro)", macro->GetName())));
    } else if (macroType == kSingleTrackAnalyse || macroType == kCorrelTrackAnalyse) {
      mProcType[i] = macroType;
      // Create the command 
      procCmds[i] = macro->GetCmd();
      procName[i] = macro->GetName();
    } else {
      Error("Apply process macros", 
        "Macro list corrupted: Macro \"%s/%s.C\" is not registered as a process macro!",
        macro->GetPath(), macro->GetName());
      mProcType[i] = kUnknown;
    } 
  }  

  // Collect the commands for each selection macro and add them to "data-from-list"
  for (Int_t i = 0; i < selIterator->GetEntries(); i++){
    macro = (TMacroData*)fMacroList->GetValue(selIterator->At(i)->GetTitle());

    if (!macro){
      AliError(Form("Macro list is corrupted: Macro \"%s\" is not registered!", selIterator->At(i)->GetTitle()));
      continue;
    }

#ifdef ALIEVETRDTRACKLIST_DEBUG
    printf("AliEveTRDTrackList: Checking selection macro: %s\n", macro->GetName());
#endif
       
    // Find the type of the process macro
    macroType = macro->GetType();

    // Single track select macro
    if (macroType == kSingleTrackSelect) {
      // Has already been processed by ApplySTSelectionMacros(...)
      if(mSelType) mSelType[i] = macroType;
    }
    // Correlated tracks select macro
    else if (macroType == kCorrelTrackSelect) {
      if(mSelType) mSelType[i] = macroType;  
 
      // Create the command
      if(selCmds) selCmds[i] = macro->GetCmd();
    } else {
      Error("Apply process macros", 
        "Macro list corrupted: Macro \"%s/%s.C\" is not registered as a selection macro!",
        macro->GetPath(), macro->GetName());
      if(mSelType) mSelType[i] = kUnknown;
    } 
  }  

  // Allocate memory for the histograms
  if (numHistoMacros > 0){
    histos = new TH1*[numHistoMacros];
    memset(histos, 0, numHistoMacros*sizeof(TH1*));
  }

  //////////////////////////////////
  // WALK THROUGH THE LIST OF TRACKS
  //////////////////////////////////     
  for (TEveElement::List_i iter = this->BeginChildren(); iter != this->EndChildren(); ++iter){
    if(!(track1 = dynamic_cast<AliEveTRDTrack*>(*iter))) continue;

    // Skip tracks that have not been selected
    if (!track1->GetRnrState())  continue;
    
    // Cast to AliTRDtrackV1
    gROOT->ProcessLineSync(Form("AliEveTRDTrack *automaticTrack = (AliEveTRDTrack*)%p;", (void*)track1));
    gROOT->ProcessLineSync("AliTRDtrackV1* automaticTrackV1_1 = (AliTRDtrackV1*)automaticTrack->GetUserData();");

    // Collect data for each macro
    for (Int_t i = 0, histoIndex = 0; i < procIterator->GetEntries(); i++){
      // Single track histo
      if (mProcType[i] == kSingleTrackHisto){
        if(!histos) continue;
        histos[histoIndex] = (TH1*)gROOT->ProcessLineSync(procCmds[i]);
        if(!fDataFromMacroList->FindObject(histos[histoIndex]->GetName())) {
          AliInfo(Form("Registering histo[%s] for cmd[%s]", histos[histoIndex]->GetName(), procName[i].Data()));
          fDataFromMacroList->Add(new TObjString(histos[histoIndex]->GetName()));
        }
        histoIndex++;
      } else if (mProcType[i] == kCorrelTrackHisto) {                              // CORRELATED TRACKS HISTO
        // 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)
        // and are not equal.
        // The correlated tracks process macro will be applied to all pairs that will be additionally selected by
        // all correlated tracks selection macros.
        TEveElement::List_i iter2 = iter;
        iter2++;
        for ( ; iter2 != this->EndChildren(); ++iter2){
          if(!(track2 = dynamic_cast<AliEveTRDTrack*>(*iter2))) continue;

          // Skip tracks that have not been selected
          if (!track2->GetRnrState())  continue;
      
          // Cast to AliTRDtrackV1
          gROOT->ProcessLineSync(Form("AliEveTRDTrack *automaticTrack = (AliEveTRDTrack*)%p;", (void*)track2));
          gROOT->ProcessLineSync("AliTRDtrackV1* automaticTrackV1_2 = (AliTRDtrackV1*)automaticTrack->GetUserData();");

          // Select track by default (so it will be processed, if there are no correlated tracks selection macros!)
          selectedByCorrSelMacro = kTRUE;
          for (Int_t j = 0; j < selIterator->GetEntries(); j++){
            if (mSelType && mSelType[j] == kCorrelTrackSelect){
              selectedByCorrSelMacro = (Bool_t)gROOT->ProcessLineSync(selCmds[j]);
              if (!selectedByCorrSelMacro)  break;
            }
          }       

          // If the pair has not been selected by the correlated tracks selection macros, skip it!
          if (!selectedByCorrSelMacro) continue;
          
          if(histos) histos[histoIndex] = (TH1*)gROOT->ProcessLineSync(procCmds[i]);
        } // End loop correl tracks
        histoIndex++;
      } else if (mProcType[i] == kSingleTrackAnalyse) {                         // SINGLE TRACK ANALYSE
        // Create data pointers in CINT, execute the macro and get the data
        gROOT->ProcessLineSync("Double_t results[10] = {0}, *presults=&results[0];");
        gROOT->ProcessLineSync("Int_t n = 0;");
        gROOT->ProcessLineSync(procCmds[i]);
        Int_t nResults = (Int_t)gROOT->ProcessLineSync("n;");
        if (!nResults) {
          AliError(Form("Error reading data from macro \"%s\"", procName[i].Data()));
          continue;
        }
        if(nResults>10){
          AliWarning(Form("Macro \"%s\" returns %d values. Limit set to 10.", procName[i].Data(), nResults));
          nResults=10;
        }
        if(!treeSingle->GetBranch(procName[i].Data())) {
          AliInfo(Form("Building branch[%s]", procName[i].Data()));
          treeSingle->Branch(procName[i].Data(), singleTrackOut[i], Form("%s[%d]/D", procName[i].Data(), nResults));
          // Add to "data-from-list"
          for(Int_t ir(0); ir<nResults; ir++) fDataFromMacroList->Add(new TObjString(Form("%s[%d]", procName[i].Data(), ir)));
        }
        for (Int_t resInd = 0; resInd < nResults; resInd++, gROOT->ProcessLineSync("presults++;")){
          Double_t *pres = (Double_t*)gROOT->ProcessLineSync("presults;");
          singleTrackOut[i][resInd] = *pres;
        }
      } else if (mProcType[i] == kCorrelTrackAnalyse){                         // CORRELATED TRACKS ANALYSE
        // 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)
        // and are not equal.
        // The correlated tracks process macro will be applied to all pairs that will be additionally selected by
        // all correlated tracks selection macros.
        TEveElement::List_i iter2 = iter;
        iter2++;

        for ( ; iter2 != this->EndChildren(); ++iter2) {
          if(!(track2 = dynamic_cast<AliEveTRDTrack*>(*iter2))) continue;
 
          // Skip tracks that have not been selected
          if (!track2->GetRnrState())  continue;
    
          // Cast to AliTRDtrackV1
          gROOT->ProcessLineSync(Form("AliEveTRDTrack *automaticTrack = (AliEveTRDTrack*)%p;", (void*)track2));
          gROOT->ProcessLineSync("AliTRDtrackV1* automaticTrackV1_2 = (AliTRDtrackV1*)automaticTrack->GetUserData();");

          // Select track by default (so it will be processed, if there are no correlated tracks selection macros!)
          selectedByCorrSelMacro = kTRUE;
          for (Int_t j = 0; j < selIterator->GetEntries(); j++) {
            if (mSelType && mSelType[j] == kCorrelTrackSelect) {
              selectedByCorrSelMacro = (Bool_t)gROOT->ProcessLineSync(selCmds[j]);
              if (!selectedByCorrSelMacro)  break;
            }
          }       

          // If the pair has not been selected by the correlated tracks selection macros, skip it!
          if (!selectedByCorrSelMacro) continue;
          
          // Create data pointers in CINT, execute the macro and get the data
          gROOT->ProcessLineSync("Double_t results[10] = {0}, *presults=&results[0];");
          gROOT->ProcessLineSync("Int_t n = 0;");
          gROOT->ProcessLineSync(procCmds[i]);
          Int_t nResults = (Int_t)gROOT->ProcessLineSync("n;");
          if (!nResults) {
            AliError(Form("Error reading data from macro \"%s\"", procName[i].Data()));
            continue;
          }
          if(nResults>10){
            AliWarning(Form("Macro \"%s\" returns %d values. Limit set to 10.", procName[i].Data(), nResults));
            nResults=10;
          }
          TBranch *b(treeCorrel->GetBranch(procName[i].Data()));
          if(!b) {
            AliInfo(Form("Building branch[%s]", procName[i].Data()));
            b = treeCorrel->Branch(procName[i].Data(), correlTrackOut[i], Form("%s[%d]/D", procName[i].Data(), nResults));
            // Add to "data-from-list"
            for(Int_t ir(0); ir<nResults; ir++) fDataFromMacroList->Add(new TObjString(Form("%s[%d]", procName[i].Data(), ir)));
          }
          for (Int_t resInd = 0; resInd < nResults; resInd++, gROOT->ProcessLineSync("presults++;")){
            Double_t *pres = (Double_t*)gROOT->ProcessLineSync("presults;");
            correlTrackOut[i][resInd] = *pres;
          }
          b->Fill();
        } // End loop correl tracks
      } // End if correl macros
    } // End loop all macro
    treeSingle->Fill();
    treeCorrel->Fill();
  } // End loop single tracks

  fgData->cd();
  for (Int_t i = 0, histoIndex = 0; i < procIterator->GetEntries() && histoIndex < numHistoMacros; i++) {
    if (mProcType[i] != kSingleTrackHisto && mProcType[i] != kCorrelTrackHisto) continue;
    // Might be empty (e.g. no tracks have been selected)!
    if(histos[histoIndex]) histos[histoIndex]->Write();
    histoIndex++;
  }
  treeSingle->Write();
  treeCorrel->Write();
  fgData->Close();

  if (procName)  delete [] procName; procName = NULL;
  if (procCmds)  delete [] procCmds; procCmds = NULL;
  if (mProcType)  delete [] mProcType; mProcType = NULL;

  if (selCmds)  delete [] selCmds; selCmds = NULL;
  if (mSelType)  delete [] mSelType; mSelType = NULL;

  if (histos)  delete [] histos; histos = NULL;

  // Clear root
  // A.B. gROOT->Reset();
  
  // If there is data, select the first data set
  if (procIterator->GetEntries() > 0) SETBIT(fHistoDataSelected, 0);

  // Now the data is stored in "/tmp/TRD.TrackListMacroData_$USER.root"
  // The editor will access this file to display the data
  return kTRUE;
}

//______________________________________________________
void AliEveTRDTrackList::ApplySTSelectionMacros(const TList* iterator)
{
  // Uses the iterator (for the selected selection macros) to apply the selected macros to the data.
  // The rnr-states of the tracks are set according to the result of the macro calls (kTRUE, if all
  // macros return kTRUE for this track, otherwise: kFALSE).
  // "ST" stands for "single track". This means that only single track selection macros are applied.
  // Correlated tracks selection macros will be used inside the call of ApplyProcessMacros(...)!

  TMacroData* macro = 0;
  AliEveTRDTrackListMacroType macroType = kUnknown;
  AliEveTRDTrack* track1 = 0;
  Bool_t selectedByMacro = kFALSE;

  // Clear root
  // A.B. gROOT->Reset();

  // Select all tracks at first. A track is then deselected, if at least one selection macro
  // returns kFALSE for this track.
  // Enable all tracks (Note: EnableListElements(..) will call "ElementChanged", which will cause unforeseen behaviour!)
  for (TEveElement::List_i iter = this->BeginChildren(); iter != this->EndChildren(); ++iter) ((TEveElement*)(*iter))->SetRnrState(kTRUE);
  SetRnrState(kTRUE);
  
  for (Int_t i = 0; i < iterator->GetEntries(); i++){
    macro = (TMacroData*)fMacroList->GetValue(iterator->At(i)->GetTitle());

    if (!macro){
      Error("Apply selection macros", 
            "Macro list is corrupted: Macro \"%s\" is not registered!", iterator->At(i)->GetTitle());
      continue;
    }

#ifdef ALIEVETRDTRACKLIST_DEBUG
    printf("AliEveTRDTrackList: Applying selection macro: %s\n", macro->GetName());
#endif
    
    // Determine macro type
    macroType = macro->GetType();

    // Single track select macro
    if (macroType == kSingleTrackSelect){
      // Walk through the list of tracks
      for (TEveElement::List_i iter = this->BeginChildren(); iter != this->EndChildren(); ++iter)
      {
        track1 = dynamic_cast<AliEveTRDTrack*>(*iter);

        if (!track1) continue;

        // If the track has already been deselected, nothing is to do here
        if (!track1->GetRnrState()) continue;

        // Cast to AliTRDtrackV1
        gROOT->ProcessLineSync(Form("AliEveTRDTrack *automaticTrack = (AliEveTRDTrack*)%p;", (void*)track1));
        gROOT->ProcessLineSync("AliTRDtrackV1* automaticTrackV1_1 = (AliTRDtrackV1*)automaticTrack->GetUserData();");
        selectedByMacro = (Bool_t)gROOT->ProcessLineSync(macro->GetCmd());
        track1->SetRnrState(selectedByMacro && track1->GetRnrState());               
      }
    }
    // Correlated tracks select macro
    else if (macroType == kCorrelTrackSelect){
      // Will be processed in ApplyProcessMacros(...)
      continue;
    } else {
      Error("Apply selection macros", 
        "Macro list corrupted: Macro \"%s/%s.C\" is not registered as a selection macro!",
        macro->GetPath(), macro->GetName());
    } 
  }

  // Clear root
  // A.B. gROOT->Reset();  
}

//______________________________________________________
AliEveTRDTrackList::AliEveTRDTrackListMacroType AliEveTRDTrackList::GetMacroType(const Char_t* name, Bool_t UseList) const
{
  // Returns the type of the corresponding macro. 
  // If "UseList" is kTRUE, the type will be looked up in the internal list (very fast). But if this list
  // does not exist, you have to use kFALSE for this parameter. Then the type will be determined by the
  // prototype! NOTE: It is assumed that the macro has been compiled! If not, the return value is not
  // predictable, but normally will be kUnknown.
  // Note: AddMacro(Fast) will update the internal list and RemoveMacros respectively.

  AliEveTRDTrackListMacroType type = kUnknown;

  // Re-do the check of the macro type
  if (!UseList){
    // Single track select macro or single track histo macro?
    TFunction* f = gROOT->GetGlobalFunctionWithPrototype(name, "const AliTRDtrackV1*", kTRUE);
    if (f != NULL)
    {
      // Some additional check (is the parameter EXACTLY of the desired type?)
      if (strstr(f->GetMangledName(), "oPconstsPAliTRDtrackV1mUsP") != NULL)
      {
        // Single track select macro?
        if (!strcmp(f->GetReturnTypeName(), "Bool_t")) 
        { 
          type = kSingleTrackSelect;     
        }
        // single track histo macro?
        else if (!strcmp(f->GetReturnTypeName(), "TH1*"))
        {
          type = kSingleTrackHisto;
        }
      }
    }
    // Single track analyse macro?
    else if ((f = gROOT->GetGlobalFunctionWithPrototype(name, "const AliTRDtrackV1*, Double_t*, Int_t&", kTRUE))
             != NULL)
    {
      if (!strcmp(f->GetReturnTypeName(), "void"))
      {
        // Some additional check (are the parameters EXACTLY of the desired type?)
        if (strstr(f->GetMangledName(), "oPconstsPAliTRDtrackV1mUsP") != NULL &&
            strstr(f->GetMangledName(), "cODouble_tmUsP") != NULL &&
            strstr(f->GetMangledName(), "cOInt_taNsP") != NULL)
        {
          type = kSingleTrackAnalyse;
        }
      }
    }    
    // Correlated tracks select macro or correlated tracks histo macro?
    else if ((f = gROOT->GetGlobalFunctionWithPrototype(name, "const AliTRDtrackV1*, const AliTRDtrackV1*", kTRUE)) 
             != NULL)
    {
      // Some additional check (is the parameter EXACTLY of the desired type?)
      if (strstr(f->GetMangledName(), "oPconstsPAliTRDtrackV1mUsP") != NULL &&
          strstr(f->GetMangledName(), "cOconstsPAliTRDtrackV1mUsP") != NULL)
      {
        // Correlated track select macro?
        if (!strcmp(f->GetReturnTypeName(), "Bool_t")) 
        { 
          type = kCorrelTrackSelect;     
        }
        // Correlated track histo macro?
        else if (!strcmp(f->GetReturnTypeName(), "TH1*"))
        {
          type = kCorrelTrackHisto;
        }
      }
    }    
    // Correlated tracks analyse macro?
    else if ((f = gROOT->GetGlobalFunctionWithPrototype(name, 
                              "const AliTRDtrackV1*, const AliTRDtrackV1*, Double_t*, Int_t&", kTRUE))
             != NULL)
    {
      if (!strcmp(f->GetReturnTypeName(), "void"))
      {
        // Some additional check (is the parameter EXACTLY of the desired type?)
        if (strstr(f->GetMangledName(), "oPconstsPAliTRDtrackV1mUsP") != NULL &&
            strstr(f->GetMangledName(), "cOconstsPAliTRDtrackV1mUsP") != NULL &&
            strstr(f->GetMangledName(), "cODouble_tmUsP") != NULL &&
            strstr(f->GetMangledName(), "cOInt_taNsP") != NULL)
        {
          type = kCorrelTrackAnalyse;
        }
      }
    }    
  }
  // Use list to look up the macro type
  else
  {
    TMacroData* macro = 0;
    macro = (TMacroData*)fMacroList->GetValue(name);
    if (macro == 0)  return kUnknown; 
    
    type = macro->GetType();
    switch (type)
    {
      case kSingleTrackSelect:
      case kSingleTrackAnalyse:
      case kSingleTrackHisto:
      case kCorrelTrackSelect:
      case kCorrelTrackAnalyse:
      case kCorrelTrackHisto:      
        break;
    default:
      type = kUnknown;
      break;
    }
  }

  return type;
}

//______________________________________________________
void AliEveTRDTrackList::RemoveSelectedMacros(const TList* iterator) 
{
  // Uses the iterator (for the selected macros) to remove the selected macros from 
  // the corresponding list.
   
  TObject* key = 0;
  TPair*   entry = 0;
  for (Int_t i = 0; i < iterator->GetEntries(); i++)
  {
    entry = (TPair*)fMacroList->FindObject(iterator->At(i)->GetTitle());

    if (entry == 0)
    {
      Error("AliEveTRDTrackList::RemoveSelectedMacros", "Macro \"%s\" not found in list!",
                                                             iterator->At(i)->GetTitle());
      continue;
    }
    key = entry->Key();

    if (key == 0)   
    {
      Error("AliEveTRDTrackList::RemoveSelectedMacros", "Key for macro \"%s\" not found in list!",
                                                             iterator->At(i)->GetTitle());
      continue;
    }

    // Key and value will be deleted, too, since fMacroList is the owner of them
    Bool_t rem = fMacroList->DeleteEntry(key);

    if (rem)
    {
#ifdef ALIEVETRDTRACKLIST_DEBUG
    printf("AliEveTRDTrackList::RemoveSelectedMacros(): Removed macro: %s\n", iterator->At(i)->GetTitle());
#endif
    }
    else
    {
      Error("AliEveTRDTrackList::RemoveSelectedMacros", "Macro \"%s\" could not be removed from the list!",
                                                             iterator->At(i)->GetTitle());
    }
  }
}

//______________________________________________________
void AliEveTRDTrackList::UpdateTrackStyle(AliEveTRDTrack::AliEveTRDTrackState s, UChar_t ss)
{
  // Updates the track style and sets this style for each track.

  switch(s)
  {
    case AliEveTRDTrack::kSource:
      SETBIT(fSelectedStyle, AliEveTRDTrack::kSource);
      break;  
    case AliEveTRDTrack::kPID:
      CLRBIT(fSelectedStyle, AliEveTRDTrack::kSource);
      switch(ss)
      {
      case AliTRDpidUtil::kLQ:
        CLRBIT(fSelectedStyle, AliEveTRDTrack::kPID);
        break;
      case AliTRDpidUtil::kNN:
        SETBIT(fSelectedStyle, AliEveTRDTrack::kPID);
        break;
      }
      break;  
    case AliEveTRDTrack::kTrackCosmics:
      SETBIT(fSelectedStyle, AliEveTRDTrack::kTrackCosmics);
      break;  
    case AliEveTRDTrack::kTrackModel:
      CLRBIT(fSelectedStyle, AliEveTRDTrack::kTrackCosmics);
      switch(ss)
      {
      case AliEveTRDTrack::kRieman:
        CLRBIT(fSelectedStyle, AliEveTRDTrack::kTrackModel);
        break;
      case AliEveTRDTrack::kKalman:
        //AliWarning("Kalman fit under testing for the moment.");
        SETBIT(fSelectedStyle, AliEveTRDTrack::kTrackModel);
        break;
      }
      break;  
  }


  // Walk through the list of tracks     
  AliEveTRDTrack* track = NULL;
  for (TEveElement::List_i iter = this->BeginChildren(); iter != this->EndChildren(); ++iter) 
  {
    if (!(track = dynamic_cast<AliEveTRDTrack*>(*iter)))  continue;

    track->SetStatus(fSelectedStyle);
  }
}
 AliEveTRDTrackList.cxx:1
 AliEveTRDTrackList.cxx:2
 AliEveTRDTrackList.cxx:3
 AliEveTRDTrackList.cxx:4
 AliEveTRDTrackList.cxx:5
 AliEveTRDTrackList.cxx:6
 AliEveTRDTrackList.cxx:7
 AliEveTRDTrackList.cxx:8
 AliEveTRDTrackList.cxx:9
 AliEveTRDTrackList.cxx:10
 AliEveTRDTrackList.cxx:11
 AliEveTRDTrackList.cxx:12
 AliEveTRDTrackList.cxx:13
 AliEveTRDTrackList.cxx:14
 AliEveTRDTrackList.cxx:15
 AliEveTRDTrackList.cxx:16
 AliEveTRDTrackList.cxx:17
 AliEveTRDTrackList.cxx:18
 AliEveTRDTrackList.cxx:19
 AliEveTRDTrackList.cxx:20
 AliEveTRDTrackList.cxx:21
 AliEveTRDTrackList.cxx:22
 AliEveTRDTrackList.cxx:23
 AliEveTRDTrackList.cxx:24
 AliEveTRDTrackList.cxx:25
 AliEveTRDTrackList.cxx:26
 AliEveTRDTrackList.cxx:27
 AliEveTRDTrackList.cxx:28
 AliEveTRDTrackList.cxx:29
 AliEveTRDTrackList.cxx:30
 AliEveTRDTrackList.cxx:31
 AliEveTRDTrackList.cxx:32
 AliEveTRDTrackList.cxx:33
 AliEveTRDTrackList.cxx:34
 AliEveTRDTrackList.cxx:35
 AliEveTRDTrackList.cxx:36
 AliEveTRDTrackList.cxx:37
 AliEveTRDTrackList.cxx:38
 AliEveTRDTrackList.cxx:39
 AliEveTRDTrackList.cxx:40
 AliEveTRDTrackList.cxx:41
 AliEveTRDTrackList.cxx:42
 AliEveTRDTrackList.cxx:43
 AliEveTRDTrackList.cxx:44
 AliEveTRDTrackList.cxx:45
 AliEveTRDTrackList.cxx:46
 AliEveTRDTrackList.cxx:47
 AliEveTRDTrackList.cxx:48
 AliEveTRDTrackList.cxx:49
 AliEveTRDTrackList.cxx:50
 AliEveTRDTrackList.cxx:51
 AliEveTRDTrackList.cxx:52
 AliEveTRDTrackList.cxx:53
 AliEveTRDTrackList.cxx:54
 AliEveTRDTrackList.cxx:55
 AliEveTRDTrackList.cxx:56
 AliEveTRDTrackList.cxx:57
 AliEveTRDTrackList.cxx:58
 AliEveTRDTrackList.cxx:59
 AliEveTRDTrackList.cxx:60
 AliEveTRDTrackList.cxx:61
 AliEveTRDTrackList.cxx:62
 AliEveTRDTrackList.cxx:63
 AliEveTRDTrackList.cxx:64
 AliEveTRDTrackList.cxx:65
 AliEveTRDTrackList.cxx:66
 AliEveTRDTrackList.cxx:67
 AliEveTRDTrackList.cxx:68
 AliEveTRDTrackList.cxx:69
 AliEveTRDTrackList.cxx:70
 AliEveTRDTrackList.cxx:71
 AliEveTRDTrackList.cxx:72
 AliEveTRDTrackList.cxx:73
 AliEveTRDTrackList.cxx:74
 AliEveTRDTrackList.cxx:75
 AliEveTRDTrackList.cxx:76
 AliEveTRDTrackList.cxx:77
 AliEveTRDTrackList.cxx:78
 AliEveTRDTrackList.cxx:79
 AliEveTRDTrackList.cxx:80
 AliEveTRDTrackList.cxx:81
 AliEveTRDTrackList.cxx:82
 AliEveTRDTrackList.cxx:83
 AliEveTRDTrackList.cxx:84
 AliEveTRDTrackList.cxx:85
 AliEveTRDTrackList.cxx:86
 AliEveTRDTrackList.cxx:87
 AliEveTRDTrackList.cxx:88
 AliEveTRDTrackList.cxx:89
 AliEveTRDTrackList.cxx:90
 AliEveTRDTrackList.cxx:91
 AliEveTRDTrackList.cxx:92
 AliEveTRDTrackList.cxx:93
 AliEveTRDTrackList.cxx:94
 AliEveTRDTrackList.cxx:95
 AliEveTRDTrackList.cxx:96
 AliEveTRDTrackList.cxx:97
 AliEveTRDTrackList.cxx:98
 AliEveTRDTrackList.cxx:99
 AliEveTRDTrackList.cxx:100
 AliEveTRDTrackList.cxx:101
 AliEveTRDTrackList.cxx:102
 AliEveTRDTrackList.cxx:103
 AliEveTRDTrackList.cxx:104
 AliEveTRDTrackList.cxx:105
 AliEveTRDTrackList.cxx:106
 AliEveTRDTrackList.cxx:107
 AliEveTRDTrackList.cxx:108
 AliEveTRDTrackList.cxx:109
 AliEveTRDTrackList.cxx:110
 AliEveTRDTrackList.cxx:111
 AliEveTRDTrackList.cxx:112
 AliEveTRDTrackList.cxx:113
 AliEveTRDTrackList.cxx:114
 AliEveTRDTrackList.cxx:115
 AliEveTRDTrackList.cxx:116
 AliEveTRDTrackList.cxx:117
 AliEveTRDTrackList.cxx:118
 AliEveTRDTrackList.cxx:119
 AliEveTRDTrackList.cxx:120
 AliEveTRDTrackList.cxx:121
 AliEveTRDTrackList.cxx:122
 AliEveTRDTrackList.cxx:123
 AliEveTRDTrackList.cxx:124
 AliEveTRDTrackList.cxx:125
 AliEveTRDTrackList.cxx:126
 AliEveTRDTrackList.cxx:127
 AliEveTRDTrackList.cxx:128
 AliEveTRDTrackList.cxx:129
 AliEveTRDTrackList.cxx:130
 AliEveTRDTrackList.cxx:131
 AliEveTRDTrackList.cxx:132
 AliEveTRDTrackList.cxx:133
 AliEveTRDTrackList.cxx:134
 AliEveTRDTrackList.cxx:135
 AliEveTRDTrackList.cxx:136
 AliEveTRDTrackList.cxx:137
 AliEveTRDTrackList.cxx:138
 AliEveTRDTrackList.cxx:139
 AliEveTRDTrackList.cxx:140
 AliEveTRDTrackList.cxx:141
 AliEveTRDTrackList.cxx:142
 AliEveTRDTrackList.cxx:143
 AliEveTRDTrackList.cxx:144
 AliEveTRDTrackList.cxx:145
 AliEveTRDTrackList.cxx:146
 AliEveTRDTrackList.cxx:147
 AliEveTRDTrackList.cxx:148
 AliEveTRDTrackList.cxx:149
 AliEveTRDTrackList.cxx:150
 AliEveTRDTrackList.cxx:151
 AliEveTRDTrackList.cxx:152
 AliEveTRDTrackList.cxx:153
 AliEveTRDTrackList.cxx:154
 AliEveTRDTrackList.cxx:155
 AliEveTRDTrackList.cxx:156
 AliEveTRDTrackList.cxx:157
 AliEveTRDTrackList.cxx:158
 AliEveTRDTrackList.cxx:159
 AliEveTRDTrackList.cxx:160
 AliEveTRDTrackList.cxx:161
 AliEveTRDTrackList.cxx:162
 AliEveTRDTrackList.cxx:163
 AliEveTRDTrackList.cxx:164
 AliEveTRDTrackList.cxx:165
 AliEveTRDTrackList.cxx:166
 AliEveTRDTrackList.cxx:167
 AliEveTRDTrackList.cxx:168
 AliEveTRDTrackList.cxx:169
 AliEveTRDTrackList.cxx:170
 AliEveTRDTrackList.cxx:171
 AliEveTRDTrackList.cxx:172
 AliEveTRDTrackList.cxx:173
 AliEveTRDTrackList.cxx:174
 AliEveTRDTrackList.cxx:175
 AliEveTRDTrackList.cxx:176
 AliEveTRDTrackList.cxx:177
 AliEveTRDTrackList.cxx:178
 AliEveTRDTrackList.cxx:179
 AliEveTRDTrackList.cxx:180
 AliEveTRDTrackList.cxx:181
 AliEveTRDTrackList.cxx:182
 AliEveTRDTrackList.cxx:183
 AliEveTRDTrackList.cxx:184
 AliEveTRDTrackList.cxx:185
 AliEveTRDTrackList.cxx:186
 AliEveTRDTrackList.cxx:187
 AliEveTRDTrackList.cxx:188
 AliEveTRDTrackList.cxx:189
 AliEveTRDTrackList.cxx:190
 AliEveTRDTrackList.cxx:191
 AliEveTRDTrackList.cxx:192
 AliEveTRDTrackList.cxx:193
 AliEveTRDTrackList.cxx:194
 AliEveTRDTrackList.cxx:195
 AliEveTRDTrackList.cxx:196
 AliEveTRDTrackList.cxx:197
 AliEveTRDTrackList.cxx:198
 AliEveTRDTrackList.cxx:199
 AliEveTRDTrackList.cxx:200
 AliEveTRDTrackList.cxx:201
 AliEveTRDTrackList.cxx:202
 AliEveTRDTrackList.cxx:203
 AliEveTRDTrackList.cxx:204
 AliEveTRDTrackList.cxx:205
 AliEveTRDTrackList.cxx:206
 AliEveTRDTrackList.cxx:207
 AliEveTRDTrackList.cxx:208
 AliEveTRDTrackList.cxx:209
 AliEveTRDTrackList.cxx:210
 AliEveTRDTrackList.cxx:211
 AliEveTRDTrackList.cxx:212
 AliEveTRDTrackList.cxx:213
 AliEveTRDTrackList.cxx:214
 AliEveTRDTrackList.cxx:215
 AliEveTRDTrackList.cxx:216
 AliEveTRDTrackList.cxx:217
 AliEveTRDTrackList.cxx:218
 AliEveTRDTrackList.cxx:219
 AliEveTRDTrackList.cxx:220
 AliEveTRDTrackList.cxx:221
 AliEveTRDTrackList.cxx:222
 AliEveTRDTrackList.cxx:223
 AliEveTRDTrackList.cxx:224
 AliEveTRDTrackList.cxx:225
 AliEveTRDTrackList.cxx:226
 AliEveTRDTrackList.cxx:227
 AliEveTRDTrackList.cxx:228
 AliEveTRDTrackList.cxx:229
 AliEveTRDTrackList.cxx:230
 AliEveTRDTrackList.cxx:231
 AliEveTRDTrackList.cxx:232
 AliEveTRDTrackList.cxx:233
 AliEveTRDTrackList.cxx:234
 AliEveTRDTrackList.cxx:235
 AliEveTRDTrackList.cxx:236
 AliEveTRDTrackList.cxx:237
 AliEveTRDTrackList.cxx:238
 AliEveTRDTrackList.cxx:239
 AliEveTRDTrackList.cxx:240
 AliEveTRDTrackList.cxx:241
 AliEveTRDTrackList.cxx:242
 AliEveTRDTrackList.cxx:243
 AliEveTRDTrackList.cxx:244
 AliEveTRDTrackList.cxx:245
 AliEveTRDTrackList.cxx:246
 AliEveTRDTrackList.cxx:247
 AliEveTRDTrackList.cxx:248
 AliEveTRDTrackList.cxx:249
 AliEveTRDTrackList.cxx:250
 AliEveTRDTrackList.cxx:251
 AliEveTRDTrackList.cxx:252
 AliEveTRDTrackList.cxx:253
 AliEveTRDTrackList.cxx:254
 AliEveTRDTrackList.cxx:255
 AliEveTRDTrackList.cxx:256
 AliEveTRDTrackList.cxx:257
 AliEveTRDTrackList.cxx:258
 AliEveTRDTrackList.cxx:259
 AliEveTRDTrackList.cxx:260
 AliEveTRDTrackList.cxx:261
 AliEveTRDTrackList.cxx:262
 AliEveTRDTrackList.cxx:263
 AliEveTRDTrackList.cxx:264
 AliEveTRDTrackList.cxx:265
 AliEveTRDTrackList.cxx:266
 AliEveTRDTrackList.cxx:267
 AliEveTRDTrackList.cxx:268
 AliEveTRDTrackList.cxx:269
 AliEveTRDTrackList.cxx:270
 AliEveTRDTrackList.cxx:271
 AliEveTRDTrackList.cxx:272
 AliEveTRDTrackList.cxx:273
 AliEveTRDTrackList.cxx:274
 AliEveTRDTrackList.cxx:275
 AliEveTRDTrackList.cxx:276
 AliEveTRDTrackList.cxx:277
 AliEveTRDTrackList.cxx:278
 AliEveTRDTrackList.cxx:279
 AliEveTRDTrackList.cxx:280
 AliEveTRDTrackList.cxx:281
 AliEveTRDTrackList.cxx:282
 AliEveTRDTrackList.cxx:283
 AliEveTRDTrackList.cxx:284
 AliEveTRDTrackList.cxx:285
 AliEveTRDTrackList.cxx:286
 AliEveTRDTrackList.cxx:287
 AliEveTRDTrackList.cxx:288
 AliEveTRDTrackList.cxx:289
 AliEveTRDTrackList.cxx:290
 AliEveTRDTrackList.cxx:291
 AliEveTRDTrackList.cxx:292
 AliEveTRDTrackList.cxx:293
 AliEveTRDTrackList.cxx:294
 AliEveTRDTrackList.cxx:295
 AliEveTRDTrackList.cxx:296
 AliEveTRDTrackList.cxx:297
 AliEveTRDTrackList.cxx:298
 AliEveTRDTrackList.cxx:299
 AliEveTRDTrackList.cxx:300
 AliEveTRDTrackList.cxx:301
 AliEveTRDTrackList.cxx:302
 AliEveTRDTrackList.cxx:303
 AliEveTRDTrackList.cxx:304
 AliEveTRDTrackList.cxx:305
 AliEveTRDTrackList.cxx:306
 AliEveTRDTrackList.cxx:307
 AliEveTRDTrackList.cxx:308
 AliEveTRDTrackList.cxx:309
 AliEveTRDTrackList.cxx:310
 AliEveTRDTrackList.cxx:311
 AliEveTRDTrackList.cxx:312
 AliEveTRDTrackList.cxx:313
 AliEveTRDTrackList.cxx:314
 AliEveTRDTrackList.cxx:315
 AliEveTRDTrackList.cxx:316
 AliEveTRDTrackList.cxx:317
 AliEveTRDTrackList.cxx:318
 AliEveTRDTrackList.cxx:319
 AliEveTRDTrackList.cxx:320
 AliEveTRDTrackList.cxx:321
 AliEveTRDTrackList.cxx:322
 AliEveTRDTrackList.cxx:323
 AliEveTRDTrackList.cxx:324
 AliEveTRDTrackList.cxx:325
 AliEveTRDTrackList.cxx:326
 AliEveTRDTrackList.cxx:327
 AliEveTRDTrackList.cxx:328
 AliEveTRDTrackList.cxx:329
 AliEveTRDTrackList.cxx:330
 AliEveTRDTrackList.cxx:331
 AliEveTRDTrackList.cxx:332
 AliEveTRDTrackList.cxx:333
 AliEveTRDTrackList.cxx:334
 AliEveTRDTrackList.cxx:335
 AliEveTRDTrackList.cxx:336
 AliEveTRDTrackList.cxx:337
 AliEveTRDTrackList.cxx:338
 AliEveTRDTrackList.cxx:339
 AliEveTRDTrackList.cxx:340
 AliEveTRDTrackList.cxx:341
 AliEveTRDTrackList.cxx:342
 AliEveTRDTrackList.cxx:343
 AliEveTRDTrackList.cxx:344
 AliEveTRDTrackList.cxx:345
 AliEveTRDTrackList.cxx:346
 AliEveTRDTrackList.cxx:347
 AliEveTRDTrackList.cxx:348
 AliEveTRDTrackList.cxx:349
 AliEveTRDTrackList.cxx:350
 AliEveTRDTrackList.cxx:351
 AliEveTRDTrackList.cxx:352
 AliEveTRDTrackList.cxx:353
 AliEveTRDTrackList.cxx:354
 AliEveTRDTrackList.cxx:355
 AliEveTRDTrackList.cxx:356
 AliEveTRDTrackList.cxx:357
 AliEveTRDTrackList.cxx:358
 AliEveTRDTrackList.cxx:359
 AliEveTRDTrackList.cxx:360
 AliEveTRDTrackList.cxx:361
 AliEveTRDTrackList.cxx:362
 AliEveTRDTrackList.cxx:363
 AliEveTRDTrackList.cxx:364
 AliEveTRDTrackList.cxx:365
 AliEveTRDTrackList.cxx:366
 AliEveTRDTrackList.cxx:367
 AliEveTRDTrackList.cxx:368
 AliEveTRDTrackList.cxx:369
 AliEveTRDTrackList.cxx:370
 AliEveTRDTrackList.cxx:371
 AliEveTRDTrackList.cxx:372
 AliEveTRDTrackList.cxx:373
 AliEveTRDTrackList.cxx:374
 AliEveTRDTrackList.cxx:375
 AliEveTRDTrackList.cxx:376
 AliEveTRDTrackList.cxx:377
 AliEveTRDTrackList.cxx:378
 AliEveTRDTrackList.cxx:379
 AliEveTRDTrackList.cxx:380
 AliEveTRDTrackList.cxx:381
 AliEveTRDTrackList.cxx:382
 AliEveTRDTrackList.cxx:383
 AliEveTRDTrackList.cxx:384
 AliEveTRDTrackList.cxx:385
 AliEveTRDTrackList.cxx:386
 AliEveTRDTrackList.cxx:387
 AliEveTRDTrackList.cxx:388
 AliEveTRDTrackList.cxx:389
 AliEveTRDTrackList.cxx:390
 AliEveTRDTrackList.cxx:391
 AliEveTRDTrackList.cxx:392
 AliEveTRDTrackList.cxx:393
 AliEveTRDTrackList.cxx:394
 AliEveTRDTrackList.cxx:395
 AliEveTRDTrackList.cxx:396
 AliEveTRDTrackList.cxx:397
 AliEveTRDTrackList.cxx:398
 AliEveTRDTrackList.cxx:399
 AliEveTRDTrackList.cxx:400
 AliEveTRDTrackList.cxx:401
 AliEveTRDTrackList.cxx:402
 AliEveTRDTrackList.cxx:403
 AliEveTRDTrackList.cxx:404
 AliEveTRDTrackList.cxx:405
 AliEveTRDTrackList.cxx:406
 AliEveTRDTrackList.cxx:407
 AliEveTRDTrackList.cxx:408
 AliEveTRDTrackList.cxx:409
 AliEveTRDTrackList.cxx:410
 AliEveTRDTrackList.cxx:411
 AliEveTRDTrackList.cxx:412
 AliEveTRDTrackList.cxx:413
 AliEveTRDTrackList.cxx:414
 AliEveTRDTrackList.cxx:415
 AliEveTRDTrackList.cxx:416
 AliEveTRDTrackList.cxx:417
 AliEveTRDTrackList.cxx:418
 AliEveTRDTrackList.cxx:419
 AliEveTRDTrackList.cxx:420
 AliEveTRDTrackList.cxx:421
 AliEveTRDTrackList.cxx:422
 AliEveTRDTrackList.cxx:423
 AliEveTRDTrackList.cxx:424
 AliEveTRDTrackList.cxx:425
 AliEveTRDTrackList.cxx:426
 AliEveTRDTrackList.cxx:427
 AliEveTRDTrackList.cxx:428
 AliEveTRDTrackList.cxx:429
 AliEveTRDTrackList.cxx:430
 AliEveTRDTrackList.cxx:431
 AliEveTRDTrackList.cxx:432
 AliEveTRDTrackList.cxx:433
 AliEveTRDTrackList.cxx:434
 AliEveTRDTrackList.cxx:435
 AliEveTRDTrackList.cxx:436
 AliEveTRDTrackList.cxx:437
 AliEveTRDTrackList.cxx:438
 AliEveTRDTrackList.cxx:439
 AliEveTRDTrackList.cxx:440
 AliEveTRDTrackList.cxx:441
 AliEveTRDTrackList.cxx:442
 AliEveTRDTrackList.cxx:443
 AliEveTRDTrackList.cxx:444
 AliEveTRDTrackList.cxx:445
 AliEveTRDTrackList.cxx:446
 AliEveTRDTrackList.cxx:447
 AliEveTRDTrackList.cxx:448
 AliEveTRDTrackList.cxx:449
 AliEveTRDTrackList.cxx:450
 AliEveTRDTrackList.cxx:451
 AliEveTRDTrackList.cxx:452
 AliEveTRDTrackList.cxx:453
 AliEveTRDTrackList.cxx:454
 AliEveTRDTrackList.cxx:455
 AliEveTRDTrackList.cxx:456
 AliEveTRDTrackList.cxx:457
 AliEveTRDTrackList.cxx:458
 AliEveTRDTrackList.cxx:459
 AliEveTRDTrackList.cxx:460
 AliEveTRDTrackList.cxx:461
 AliEveTRDTrackList.cxx:462
 AliEveTRDTrackList.cxx:463
 AliEveTRDTrackList.cxx:464
 AliEveTRDTrackList.cxx:465
 AliEveTRDTrackList.cxx:466
 AliEveTRDTrackList.cxx:467
 AliEveTRDTrackList.cxx:468
 AliEveTRDTrackList.cxx:469
 AliEveTRDTrackList.cxx:470
 AliEveTRDTrackList.cxx:471
 AliEveTRDTrackList.cxx:472
 AliEveTRDTrackList.cxx:473
 AliEveTRDTrackList.cxx:474
 AliEveTRDTrackList.cxx:475
 AliEveTRDTrackList.cxx:476
 AliEveTRDTrackList.cxx:477
 AliEveTRDTrackList.cxx:478
 AliEveTRDTrackList.cxx:479
 AliEveTRDTrackList.cxx:480
 AliEveTRDTrackList.cxx:481
 AliEveTRDTrackList.cxx:482
 AliEveTRDTrackList.cxx:483
 AliEveTRDTrackList.cxx:484
 AliEveTRDTrackList.cxx:485
 AliEveTRDTrackList.cxx:486
 AliEveTRDTrackList.cxx:487
 AliEveTRDTrackList.cxx:488
 AliEveTRDTrackList.cxx:489
 AliEveTRDTrackList.cxx:490
 AliEveTRDTrackList.cxx:491
 AliEveTRDTrackList.cxx:492
 AliEveTRDTrackList.cxx:493
 AliEveTRDTrackList.cxx:494
 AliEveTRDTrackList.cxx:495
 AliEveTRDTrackList.cxx:496
 AliEveTRDTrackList.cxx:497
 AliEveTRDTrackList.cxx:498
 AliEveTRDTrackList.cxx:499
 AliEveTRDTrackList.cxx:500
 AliEveTRDTrackList.cxx:501
 AliEveTRDTrackList.cxx:502
 AliEveTRDTrackList.cxx:503
 AliEveTRDTrackList.cxx:504
 AliEveTRDTrackList.cxx:505
 AliEveTRDTrackList.cxx:506
 AliEveTRDTrackList.cxx:507
 AliEveTRDTrackList.cxx:508
 AliEveTRDTrackList.cxx:509
 AliEveTRDTrackList.cxx:510
 AliEveTRDTrackList.cxx:511
 AliEveTRDTrackList.cxx:512
 AliEveTRDTrackList.cxx:513
 AliEveTRDTrackList.cxx:514
 AliEveTRDTrackList.cxx:515
 AliEveTRDTrackList.cxx:516
 AliEveTRDTrackList.cxx:517
 AliEveTRDTrackList.cxx:518
 AliEveTRDTrackList.cxx:519
 AliEveTRDTrackList.cxx:520
 AliEveTRDTrackList.cxx:521
 AliEveTRDTrackList.cxx:522
 AliEveTRDTrackList.cxx:523
 AliEveTRDTrackList.cxx:524
 AliEveTRDTrackList.cxx:525
 AliEveTRDTrackList.cxx:526
 AliEveTRDTrackList.cxx:527
 AliEveTRDTrackList.cxx:528
 AliEveTRDTrackList.cxx:529
 AliEveTRDTrackList.cxx:530
 AliEveTRDTrackList.cxx:531
 AliEveTRDTrackList.cxx:532
 AliEveTRDTrackList.cxx:533
 AliEveTRDTrackList.cxx:534
 AliEveTRDTrackList.cxx:535
 AliEveTRDTrackList.cxx:536
 AliEveTRDTrackList.cxx:537
 AliEveTRDTrackList.cxx:538
 AliEveTRDTrackList.cxx:539
 AliEveTRDTrackList.cxx:540
 AliEveTRDTrackList.cxx:541
 AliEveTRDTrackList.cxx:542
 AliEveTRDTrackList.cxx:543
 AliEveTRDTrackList.cxx:544
 AliEveTRDTrackList.cxx:545
 AliEveTRDTrackList.cxx:546
 AliEveTRDTrackList.cxx:547
 AliEveTRDTrackList.cxx:548
 AliEveTRDTrackList.cxx:549
 AliEveTRDTrackList.cxx:550
 AliEveTRDTrackList.cxx:551
 AliEveTRDTrackList.cxx:552
 AliEveTRDTrackList.cxx:553
 AliEveTRDTrackList.cxx:554
 AliEveTRDTrackList.cxx:555
 AliEveTRDTrackList.cxx:556
 AliEveTRDTrackList.cxx:557
 AliEveTRDTrackList.cxx:558
 AliEveTRDTrackList.cxx:559
 AliEveTRDTrackList.cxx:560
 AliEveTRDTrackList.cxx:561
 AliEveTRDTrackList.cxx:562
 AliEveTRDTrackList.cxx:563
 AliEveTRDTrackList.cxx:564
 AliEveTRDTrackList.cxx:565
 AliEveTRDTrackList.cxx:566
 AliEveTRDTrackList.cxx:567
 AliEveTRDTrackList.cxx:568
 AliEveTRDTrackList.cxx:569
 AliEveTRDTrackList.cxx:570
 AliEveTRDTrackList.cxx:571
 AliEveTRDTrackList.cxx:572
 AliEveTRDTrackList.cxx:573
 AliEveTRDTrackList.cxx:574
 AliEveTRDTrackList.cxx:575
 AliEveTRDTrackList.cxx:576
 AliEveTRDTrackList.cxx:577
 AliEveTRDTrackList.cxx:578
 AliEveTRDTrackList.cxx:579
 AliEveTRDTrackList.cxx:580
 AliEveTRDTrackList.cxx:581
 AliEveTRDTrackList.cxx:582
 AliEveTRDTrackList.cxx:583
 AliEveTRDTrackList.cxx:584
 AliEveTRDTrackList.cxx:585
 AliEveTRDTrackList.cxx:586
 AliEveTRDTrackList.cxx:587
 AliEveTRDTrackList.cxx:588
 AliEveTRDTrackList.cxx:589
 AliEveTRDTrackList.cxx:590
 AliEveTRDTrackList.cxx:591
 AliEveTRDTrackList.cxx:592
 AliEveTRDTrackList.cxx:593
 AliEveTRDTrackList.cxx:594
 AliEveTRDTrackList.cxx:595
 AliEveTRDTrackList.cxx:596
 AliEveTRDTrackList.cxx:597
 AliEveTRDTrackList.cxx:598
 AliEveTRDTrackList.cxx:599
 AliEveTRDTrackList.cxx:600
 AliEveTRDTrackList.cxx:601
 AliEveTRDTrackList.cxx:602
 AliEveTRDTrackList.cxx:603
 AliEveTRDTrackList.cxx:604
 AliEveTRDTrackList.cxx:605
 AliEveTRDTrackList.cxx:606
 AliEveTRDTrackList.cxx:607
 AliEveTRDTrackList.cxx:608
 AliEveTRDTrackList.cxx:609
 AliEveTRDTrackList.cxx:610
 AliEveTRDTrackList.cxx:611
 AliEveTRDTrackList.cxx:612
 AliEveTRDTrackList.cxx:613
 AliEveTRDTrackList.cxx:614
 AliEveTRDTrackList.cxx:615
 AliEveTRDTrackList.cxx:616
 AliEveTRDTrackList.cxx:617
 AliEveTRDTrackList.cxx:618
 AliEveTRDTrackList.cxx:619
 AliEveTRDTrackList.cxx:620
 AliEveTRDTrackList.cxx:621
 AliEveTRDTrackList.cxx:622
 AliEveTRDTrackList.cxx:623
 AliEveTRDTrackList.cxx:624
 AliEveTRDTrackList.cxx:625
 AliEveTRDTrackList.cxx:626
 AliEveTRDTrackList.cxx:627
 AliEveTRDTrackList.cxx:628
 AliEveTRDTrackList.cxx:629
 AliEveTRDTrackList.cxx:630
 AliEveTRDTrackList.cxx:631
 AliEveTRDTrackList.cxx:632
 AliEveTRDTrackList.cxx:633
 AliEveTRDTrackList.cxx:634
 AliEveTRDTrackList.cxx:635
 AliEveTRDTrackList.cxx:636
 AliEveTRDTrackList.cxx:637
 AliEveTRDTrackList.cxx:638
 AliEveTRDTrackList.cxx:639
 AliEveTRDTrackList.cxx:640
 AliEveTRDTrackList.cxx:641
 AliEveTRDTrackList.cxx:642
 AliEveTRDTrackList.cxx:643
 AliEveTRDTrackList.cxx:644
 AliEveTRDTrackList.cxx:645
 AliEveTRDTrackList.cxx:646
 AliEveTRDTrackList.cxx:647
 AliEveTRDTrackList.cxx:648
 AliEveTRDTrackList.cxx:649
 AliEveTRDTrackList.cxx:650
 AliEveTRDTrackList.cxx:651
 AliEveTRDTrackList.cxx:652
 AliEveTRDTrackList.cxx:653
 AliEveTRDTrackList.cxx:654
 AliEveTRDTrackList.cxx:655
 AliEveTRDTrackList.cxx:656
 AliEveTRDTrackList.cxx:657
 AliEveTRDTrackList.cxx:658
 AliEveTRDTrackList.cxx:659
 AliEveTRDTrackList.cxx:660
 AliEveTRDTrackList.cxx:661
 AliEveTRDTrackList.cxx:662
 AliEveTRDTrackList.cxx:663
 AliEveTRDTrackList.cxx:664
 AliEveTRDTrackList.cxx:665
 AliEveTRDTrackList.cxx:666
 AliEveTRDTrackList.cxx:667
 AliEveTRDTrackList.cxx:668
 AliEveTRDTrackList.cxx:669
 AliEveTRDTrackList.cxx:670
 AliEveTRDTrackList.cxx:671
 AliEveTRDTrackList.cxx:672
 AliEveTRDTrackList.cxx:673
 AliEveTRDTrackList.cxx:674
 AliEveTRDTrackList.cxx:675
 AliEveTRDTrackList.cxx:676
 AliEveTRDTrackList.cxx:677
 AliEveTRDTrackList.cxx:678
 AliEveTRDTrackList.cxx:679
 AliEveTRDTrackList.cxx:680
 AliEveTRDTrackList.cxx:681
 AliEveTRDTrackList.cxx:682
 AliEveTRDTrackList.cxx:683
 AliEveTRDTrackList.cxx:684
 AliEveTRDTrackList.cxx:685
 AliEveTRDTrackList.cxx:686
 AliEveTRDTrackList.cxx:687
 AliEveTRDTrackList.cxx:688
 AliEveTRDTrackList.cxx:689
 AliEveTRDTrackList.cxx:690
 AliEveTRDTrackList.cxx:691
 AliEveTRDTrackList.cxx:692
 AliEveTRDTrackList.cxx:693
 AliEveTRDTrackList.cxx:694
 AliEveTRDTrackList.cxx:695
 AliEveTRDTrackList.cxx:696
 AliEveTRDTrackList.cxx:697
 AliEveTRDTrackList.cxx:698
 AliEveTRDTrackList.cxx:699
 AliEveTRDTrackList.cxx:700
 AliEveTRDTrackList.cxx:701
 AliEveTRDTrackList.cxx:702
 AliEveTRDTrackList.cxx:703
 AliEveTRDTrackList.cxx:704
 AliEveTRDTrackList.cxx:705
 AliEveTRDTrackList.cxx:706
 AliEveTRDTrackList.cxx:707
 AliEveTRDTrackList.cxx:708
 AliEveTRDTrackList.cxx:709
 AliEveTRDTrackList.cxx:710
 AliEveTRDTrackList.cxx:711
 AliEveTRDTrackList.cxx:712
 AliEveTRDTrackList.cxx:713
 AliEveTRDTrackList.cxx:714
 AliEveTRDTrackList.cxx:715
 AliEveTRDTrackList.cxx:716
 AliEveTRDTrackList.cxx:717
 AliEveTRDTrackList.cxx:718
 AliEveTRDTrackList.cxx:719
 AliEveTRDTrackList.cxx:720
 AliEveTRDTrackList.cxx:721
 AliEveTRDTrackList.cxx:722
 AliEveTRDTrackList.cxx:723
 AliEveTRDTrackList.cxx:724
 AliEveTRDTrackList.cxx:725
 AliEveTRDTrackList.cxx:726
 AliEveTRDTrackList.cxx:727
 AliEveTRDTrackList.cxx:728
 AliEveTRDTrackList.cxx:729
 AliEveTRDTrackList.cxx:730
 AliEveTRDTrackList.cxx:731
 AliEveTRDTrackList.cxx:732
 AliEveTRDTrackList.cxx:733
 AliEveTRDTrackList.cxx:734
 AliEveTRDTrackList.cxx:735
 AliEveTRDTrackList.cxx:736
 AliEveTRDTrackList.cxx:737
 AliEveTRDTrackList.cxx:738
 AliEveTRDTrackList.cxx:739
 AliEveTRDTrackList.cxx:740
 AliEveTRDTrackList.cxx:741
 AliEveTRDTrackList.cxx:742
 AliEveTRDTrackList.cxx:743
 AliEveTRDTrackList.cxx:744
 AliEveTRDTrackList.cxx:745
 AliEveTRDTrackList.cxx:746
 AliEveTRDTrackList.cxx:747
 AliEveTRDTrackList.cxx:748
 AliEveTRDTrackList.cxx:749
 AliEveTRDTrackList.cxx:750
 AliEveTRDTrackList.cxx:751
 AliEveTRDTrackList.cxx:752
 AliEveTRDTrackList.cxx:753
 AliEveTRDTrackList.cxx:754
 AliEveTRDTrackList.cxx:755
 AliEveTRDTrackList.cxx:756
 AliEveTRDTrackList.cxx:757
 AliEveTRDTrackList.cxx:758
 AliEveTRDTrackList.cxx:759
 AliEveTRDTrackList.cxx:760
 AliEveTRDTrackList.cxx:761
 AliEveTRDTrackList.cxx:762
 AliEveTRDTrackList.cxx:763
 AliEveTRDTrackList.cxx:764
 AliEveTRDTrackList.cxx:765
 AliEveTRDTrackList.cxx:766
 AliEveTRDTrackList.cxx:767
 AliEveTRDTrackList.cxx:768
 AliEveTRDTrackList.cxx:769
 AliEveTRDTrackList.cxx:770
 AliEveTRDTrackList.cxx:771
 AliEveTRDTrackList.cxx:772
 AliEveTRDTrackList.cxx:773
 AliEveTRDTrackList.cxx:774
 AliEveTRDTrackList.cxx:775
 AliEveTRDTrackList.cxx:776
 AliEveTRDTrackList.cxx:777
 AliEveTRDTrackList.cxx:778
 AliEveTRDTrackList.cxx:779
 AliEveTRDTrackList.cxx:780
 AliEveTRDTrackList.cxx:781
 AliEveTRDTrackList.cxx:782
 AliEveTRDTrackList.cxx:783
 AliEveTRDTrackList.cxx:784
 AliEveTRDTrackList.cxx:785
 AliEveTRDTrackList.cxx:786
 AliEveTRDTrackList.cxx:787
 AliEveTRDTrackList.cxx:788
 AliEveTRDTrackList.cxx:789
 AliEveTRDTrackList.cxx:790
 AliEveTRDTrackList.cxx:791
 AliEveTRDTrackList.cxx:792
 AliEveTRDTrackList.cxx:793
 AliEveTRDTrackList.cxx:794
 AliEveTRDTrackList.cxx:795
 AliEveTRDTrackList.cxx:796
 AliEveTRDTrackList.cxx:797
 AliEveTRDTrackList.cxx:798
 AliEveTRDTrackList.cxx:799
 AliEveTRDTrackList.cxx:800
 AliEveTRDTrackList.cxx:801
 AliEveTRDTrackList.cxx:802
 AliEveTRDTrackList.cxx:803
 AliEveTRDTrackList.cxx:804
 AliEveTRDTrackList.cxx:805
 AliEveTRDTrackList.cxx:806
 AliEveTRDTrackList.cxx:807
 AliEveTRDTrackList.cxx:808
 AliEveTRDTrackList.cxx:809
 AliEveTRDTrackList.cxx:810
 AliEveTRDTrackList.cxx:811
 AliEveTRDTrackList.cxx:812
 AliEveTRDTrackList.cxx:813
 AliEveTRDTrackList.cxx:814
 AliEveTRDTrackList.cxx:815
 AliEveTRDTrackList.cxx:816
 AliEveTRDTrackList.cxx:817
 AliEveTRDTrackList.cxx:818
 AliEveTRDTrackList.cxx:819
 AliEveTRDTrackList.cxx:820
 AliEveTRDTrackList.cxx:821
 AliEveTRDTrackList.cxx:822
 AliEveTRDTrackList.cxx:823
 AliEveTRDTrackList.cxx:824
 AliEveTRDTrackList.cxx:825
 AliEveTRDTrackList.cxx:826
 AliEveTRDTrackList.cxx:827
 AliEveTRDTrackList.cxx:828
 AliEveTRDTrackList.cxx:829
 AliEveTRDTrackList.cxx:830
 AliEveTRDTrackList.cxx:831
 AliEveTRDTrackList.cxx:832
 AliEveTRDTrackList.cxx:833
 AliEveTRDTrackList.cxx:834
 AliEveTRDTrackList.cxx:835
 AliEveTRDTrackList.cxx:836
 AliEveTRDTrackList.cxx:837
 AliEveTRDTrackList.cxx:838
 AliEveTRDTrackList.cxx:839
 AliEveTRDTrackList.cxx:840
 AliEveTRDTrackList.cxx:841
 AliEveTRDTrackList.cxx:842
 AliEveTRDTrackList.cxx:843
 AliEveTRDTrackList.cxx:844
 AliEveTRDTrackList.cxx:845
 AliEveTRDTrackList.cxx:846
 AliEveTRDTrackList.cxx:847
 AliEveTRDTrackList.cxx:848
 AliEveTRDTrackList.cxx:849
 AliEveTRDTrackList.cxx:850
 AliEveTRDTrackList.cxx:851
 AliEveTRDTrackList.cxx:852
 AliEveTRDTrackList.cxx:853
 AliEveTRDTrackList.cxx:854
 AliEveTRDTrackList.cxx:855
 AliEveTRDTrackList.cxx:856
 AliEveTRDTrackList.cxx:857
 AliEveTRDTrackList.cxx:858
 AliEveTRDTrackList.cxx:859
 AliEveTRDTrackList.cxx:860
 AliEveTRDTrackList.cxx:861
 AliEveTRDTrackList.cxx:862
 AliEveTRDTrackList.cxx:863
 AliEveTRDTrackList.cxx:864
 AliEveTRDTrackList.cxx:865
 AliEveTRDTrackList.cxx:866
 AliEveTRDTrackList.cxx:867
 AliEveTRDTrackList.cxx:868
 AliEveTRDTrackList.cxx:869
 AliEveTRDTrackList.cxx:870
 AliEveTRDTrackList.cxx:871
 AliEveTRDTrackList.cxx:872
 AliEveTRDTrackList.cxx:873
 AliEveTRDTrackList.cxx:874
 AliEveTRDTrackList.cxx:875
 AliEveTRDTrackList.cxx:876
 AliEveTRDTrackList.cxx:877
 AliEveTRDTrackList.cxx:878
 AliEveTRDTrackList.cxx:879
 AliEveTRDTrackList.cxx:880
 AliEveTRDTrackList.cxx:881
 AliEveTRDTrackList.cxx:882
 AliEveTRDTrackList.cxx:883
 AliEveTRDTrackList.cxx:884
 AliEveTRDTrackList.cxx:885
 AliEveTRDTrackList.cxx:886
 AliEveTRDTrackList.cxx:887
 AliEveTRDTrackList.cxx:888
 AliEveTRDTrackList.cxx:889
 AliEveTRDTrackList.cxx:890
 AliEveTRDTrackList.cxx:891
 AliEveTRDTrackList.cxx:892
 AliEveTRDTrackList.cxx:893
 AliEveTRDTrackList.cxx:894
 AliEveTRDTrackList.cxx:895
 AliEveTRDTrackList.cxx:896
 AliEveTRDTrackList.cxx:897
 AliEveTRDTrackList.cxx:898
 AliEveTRDTrackList.cxx:899
 AliEveTRDTrackList.cxx:900
 AliEveTRDTrackList.cxx:901
 AliEveTRDTrackList.cxx:902
 AliEveTRDTrackList.cxx:903
 AliEveTRDTrackList.cxx:904
 AliEveTRDTrackList.cxx:905
 AliEveTRDTrackList.cxx:906
 AliEveTRDTrackList.cxx:907
 AliEveTRDTrackList.cxx:908
 AliEveTRDTrackList.cxx:909
 AliEveTRDTrackList.cxx:910
 AliEveTRDTrackList.cxx:911