ROOT logo
// $Id$

//**************************************************************************
//* This file is property of and copyright by the ALICE HLT Project        * 
//* ALICE Experiment at CERN, All rights reserved.                         *
//*                                                                        *
//* Primary Authors: Timur Pocheptsov <Timur.Pocheptsov@cern.ch>           *
//*                  Matthias Richter <Matthias.Richter@cern.ch>
//*                  for The ALICE HLT Project.                            *
//*                                                                        *
//* Permission to use, copy, modify and distribute this software and its   *
//* documentation strictly for non-commercial purposes is hereby granted   *
//* without fee, provided that the above copyright notice appears in all   *
//* copies and that both the copyright notice and this permission notice   *
//* appear in the supporting documentation. The authors make no claims     *
//* about the suitability of this software for any purpose. It is          *
//* provided "as is" without express or implied warranty.                  *
//**************************************************************************

/// @file   AliHLTTTreeProcessor.cxx
/// @author Timur Pocheptsov, Matthias Richter
/// @date   05.07.2010
/// @brief  Generic component for data collection in a TTree

#include <cerrno>
#include <memory>

#include "AliHLTTTreeProcessor.h"
#include "AliHLTErrorGuard.h"
#include "TDirectory.h"
#include "TDatime.h"
#include "TString.h"
#include "TTree.h"
#include "TH1.h"
#include "TStopwatch.h"
#include "TUUID.h"
#include "TSystem.h"
#include "TRandom3.h"

/** ROOT macro for the implementation of ROOT specific class methods */
ClassImp(AliHLTTTreeProcessor)

AliHLTTTreeProcessor::AliHLTTTreeProcessor()
                        : AliHLTProcessor(), 
                          fDefinitions(),
                          fTree(0),
                          fMaxEntries(kMaxEntries),
                          fPublishInterval(kInterval),
                          fLastTime(0),
                          fpEventTimer(NULL),
                          fpCycleTimer(NULL),
                          fMaxMemory(700000),
                          fMaxEventTime(0),
                          fNofEventsForce(0),
                          fForcedEventsCount(0),
                          fSkippedEventsCount(0),
                          fNewEventsCount(0),
                          fUniqueId(0),
                          fIgnoreCycleTime(10),
                          fCycleTimeFactor(1.0)
{
  // see header file for class documentation
  // or
  // refer to README to build package
  // or
  // visit http://web.ift.uib.no/~kjeks/doc/alice-hlt
}

const AliHLTUInt32_t AliHLTTTreeProcessor::fgkTimeScale=1000000; // ticks per second

AliHLTTTreeProcessor::~AliHLTTTreeProcessor()
{
  // see header file for class documentation
}

AliHLTComponentDataType AliHLTTTreeProcessor::GetOutputDataType()
{
  // get the component output data type
  return kAliHLTDataTypeHistogram;
}

void AliHLTTTreeProcessor::GetOutputDataSize(unsigned long& constBase, double& inputMultiplier)
{
  // get the output size estimator
  //
  if (!fDefinitions.size()) {
    HLTError("Can not calculate output data size, no histogram definitions were provided");
    return;
  }

  constBase = 0;
  for (list_const_iterator i = fDefinitions.begin(); i != fDefinitions.end(); ++i)
    constBase += i->GetSize();

  inputMultiplier = 1.;
}

int AliHLTTTreeProcessor::DoInit(int argc, const char** argv)
{
  // init component
  // ask child to create the tree.
  int iResult = 0;

  // component configuration
  //Stage 1: default initialization.
  //"Default" (for derived component) histograms.
  FillHistogramDefinitions();
  //Default values.
  fMaxEntries = kMaxEntries;
  fPublishInterval = kInterval;
  fLastTime = 0;
  //Stage 2: OCDB.
  TString cdbPath("HLT/ConfigHLT/");
  cdbPath += GetComponentID();
  //
  iResult = ConfigureFromCDBTObjString(cdbPath);
  //
  if (iResult < 0)
    return iResult;
  //Stage 3: command line arguments.
  if (argc && (iResult = ConfigureFromArgumentString(argc, argv)) < 0)
    return iResult;

  // calculating a unique id from the hostname and process id
  // used for identifying output of multiple components
  TUUID guid = GenerateGUID();
  union
  {
    UChar_t buf[16];
    UInt_t bufAsInt[4];
  };
  guid.GetUUID(buf);
  fUniqueId = bufAsInt[0];
  
  if (!fTree) {
    // originally foreseen to pass the arguments to the function, however
    // this is not appropriate. Argument scan via overloaded function
    // ScanConfigurationArgument
    std::auto_ptr<TTree> ptr(CreateTree(0, NULL));
    if (ptr.get()) {
      ptr->SetDirectory(0);
      ptr->SetCircular(fMaxEntries);
      fTree = ptr.release();
    } else //No way to process error correctly - error is unknown here.
      return -EINVAL;
  } else {
    HLTError("fTree pointer must be null before DoInit call");
    return -EINVAL;
  }

  if (iResult>=0 && fMaxEventTime>0) {
    fpEventTimer=new TStopwatch;
    if (fpEventTimer) {
      fpEventTimer->Reset();
    }
    fpCycleTimer=new TStopwatch;
    if (fpCycleTimer) {
      fpCycleTimer->Reset();
    }
  }
  fSkippedEventsCount=0;

  return iResult;
}

int AliHLTTTreeProcessor::DoDeinit()
{
  // cleanup component
  delete fTree;
  fTree = 0;
  fDefinitions.clear();

  if (fpEventTimer) delete fpEventTimer;
  fpEventTimer=NULL;
  if (fpCycleTimer) delete fpCycleTimer;
  fpCycleTimer=NULL;

  return 0;
}

int AliHLTTTreeProcessor::DoEvent(const AliHLTComponentEventData& evtData, AliHLTComponentTriggerData& trigData)
{
  //Process event and publish histograms.
  AliHLTUInt32_t eventType=0;
  if (!IsDataEvent(&eventType) && eventType!=gkAliEventTypeEndOfRun) return 0;

  //I'm pretty sure, that if fTree == 0 (DoInit failed) DoEvent is not called.
  //But interface itself does not force you to call DoInit before DoEvent, so,
  //I make this check explicit.
  if (!fTree) {
    HLTError("fTree is a null pointer, try to call AliHLTTTreeProcessor::DoInit first.");
    return -EINVAL;//-ENULLTREE? :)
  }

  AliHLTUInt32_t averageEventTime=0;
  AliHLTUInt32_t averageCycleTime=0;

  int fillingtime=0;
  int publishtime=0;
  bool bDoFilling=true;
  bool bDoPublishing=false;
  const int cycleResetInterval=1000;
  if (fpEventTimer && fpCycleTimer) {
    averageEventTime=AliHLTUInt32_t(fpEventTimer->RealTime()*fgkTimeScale)/(GetEventCount()+1);
    fillingtime=int(fpEventTimer->RealTime()*fgkTimeScale);
    publishtime=fillingtime;
    fpEventTimer->Start(kFALSE);
    fpCycleTimer->Stop();
    averageCycleTime=AliHLTUInt32_t(fpCycleTimer->RealTime()*fgkTimeScale)/((GetEventCount()%cycleResetInterval)+1);
    // adapt processing to 3/4 of the max time
    bDoFilling=4*averageEventTime<3*fMaxEventTime ||
      (averageEventTime<fCycleTimeFactor*averageCycleTime && fpCycleTimer->RealTime()>fIgnoreCycleTime);
    if (fNofEventsForce>0 && fForcedEventsCount<fNofEventsForce) {
      fForcedEventsCount++;
      bDoFilling=true;
    }
  }

  // FIXME: there is still an unclear increase in memory consumption, even if the number of entries
  // in the tree is restricted. Valgrind studies did not show an obvious memory leak. This is likely
  // to be caused by something deep in the Root TTree functionality and needs to be studied in detail.
  ProcInfo_t ProcInfo;
  gSystem->GetProcInfo(&ProcInfo);
  if (ProcInfo.fMemResident>fMaxMemory) bDoFilling=false;

  // process input data blocks and fill the tree
  int iResult = 0;
  if (eventType!=gkAliEventTypeEndOfRun) {
    if (bDoFilling) {iResult=FillTree(fTree, evtData, trigData); fNewEventsCount++;}
    else fSkippedEventsCount++;
  }
  if (fpEventTimer) {
    fpEventTimer->Stop();
    fillingtime=int(fpEventTimer->RealTime()*fgkTimeScale)-fillingtime;
    if (fillingtime<0) fillingtime=0;
    fpEventTimer->Start(kFALSE);
  }

  if (iResult < 0) {
    ALIHLTERRORGUARD(5, "FillTree failed with %d, first event %d", iResult, GetEventCount());
    return iResult;
  }

  const TDatime time;

  if (( time.Get() - fLastTime > fPublishInterval && fNewEventsCount>0) ||
      eventType==gkAliEventTypeEndOfRun) {
    if ((bDoPublishing=fLastTime>0)) { // publish earliest after the first interval but set the timer

    for (list_const_iterator i = fDefinitions.begin(); i != fDefinitions.end(); ++i) {
      if (TH1* h = CreateHistogram(*i)) {
        //I do not care about errors here - since I'm not able
        //to rollback changes.
	// TODO: in case of -ENOSPC et the size of the last object by calling
	// GetLastObjectSize() and accumulate the necessary output buffer size
        PushBack(h, GetOriginDataType(), GetDataSpec());
	delete h;
      }
    }
    unsigned eventcount=GetEventCount()+1;
    HLTBenchmark("publishing %d histograms, %d entries in tree, %d new events since last publishing, accumulated %d of %d events (%.1f%%)", fDefinitions.size(), fTree->GetEntriesFast(), fNewEventsCount, eventcount-fSkippedEventsCount, eventcount, eventcount>0?(100*float(eventcount-fSkippedEventsCount)/eventcount):0);
    fNewEventsCount=0;
    HLTBenchmark("current memory usage %d %d", ProcInfo.fMemResident, ProcInfo.fMemVirtual);
    }

    fLastTime=time.Get();
    if (fLastTime==0) {
      // choose a random offset at beginning to equalize traffic for multiple instances
      // of the component
      gRandom->SetSeed(fUniqueId);
      fLastTime-=gRandom->Integer(fPublishInterval);
    }
  }

  if (fpEventTimer) {
    fpEventTimer->Stop();
    publishtime=int(fpEventTimer->RealTime()*fgkTimeScale)-publishtime;
    if (publishtime>fillingtime) publishtime-=fillingtime;
    else publishtime=0;

    averageEventTime=AliHLTUInt32_t(fpEventTimer->RealTime()*fgkTimeScale)/(GetEventCount()+1);

    // info output once every 5 seconds
    static UInt_t lastTime=0;
    if (time.Get()-lastTime>5 ||
	eventType==gkAliEventTypeEndOfRun ||
	bDoPublishing) {
      lastTime=time.Get();
      unsigned eventcount=GetEventCount()+1;
      HLTBenchmark("filling time %d us, publishing time %d, average total processing time %d us, cycle time %d us, accumulated %d of %d events (%.1f%%)", fillingtime, publishtime, averageEventTime, averageCycleTime, eventcount-fSkippedEventsCount, eventcount, eventcount>0?(100*float(eventcount-fSkippedEventsCount)/eventcount):0);
    }
  }
  if (fpCycleTimer) {
    bool bReset=(GetEventCount()%cycleResetInterval)==0;
    fpCycleTimer->Start(bReset);
  }

  return iResult;
}

int AliHLTTTreeProcessor::ScanConfigurationArgument(int argc, const char** argv)
{
  // scan one argument and its parameters from the list
  // return number of processed entries.
  // possible arguments: 
  // -maxentries number
  // -interval number
  // -histogram name -size number -expression expression [-title expression ] -cut expression ][-opt option]
  // As soon as "-histogram" found, -size and -expression and -outtype are required, 
  // cut and option can be omitted.
  if (argc <= 0)
    return 0;

  std::list<AliHLTHistogramDefinition> newDefs;
  AliHLTHistogramDefinition def;

  int i = 0;
  int maxEntries = fMaxEntries;

  while (i < argc) {
    const TString argument(argv[i]);

    if (argument.CompareTo("-maxentries") == 0) { //1. Max entries argument for TTree.
      if (i + 1 == argc) {
        HLTError("Numeric value for '-maxentries' is expected");
        return -EPROTO;
      }
      //Next must be a number.
      //TString returns 0 (number) even if string contains non-numeric symbols.
      maxEntries = TString(argv[i + 1]).Atoi();
      if (maxEntries <= 0) {
        HLTError("Bad value for '-maxentries': %d", maxEntries);
        return -EPROTO;
      }
  
      i += 2;
    } else if (argument.CompareTo("-interval") == 0) { //2. Interval argument for publishing.
      if (i + 1 == argc) {
        HLTError("Numeric value for '-interval' is expected");
        return -EPROTO;
      }

      const Int_t interval = TString(argv[i + 1]).Atoi();
      if (interval < 0) {
        HLTError("Bad value for '-interval' argument: %d", interval);
        return -EPROTO;
      }

      fPublishInterval = interval;

      i += 2;
    } else if (argument.CompareTo("-maxeventtime") == 0) { // max average processing time in us
      if (i + 1 == argc) {
        HLTError("Numeric value for '-maxeventtime' is expected");
        return -EPROTO;
      }

      const Int_t time = TString(argv[i + 1]).Atoi();
      if (time < 0) {
        HLTError("Bad value for '-maxeventtime' argument: %d", time);
        return -EPROTO;
      }

      fMaxEventTime = time;

      i += 2;
    } else if (argument.CompareTo("-forced-events") == 0) { // number of forced events
      if (i + 1 == argc) {
        HLTError("Numeric value for '-forced-events' is expected");
        return -EPROTO;
      }

      const Int_t count = TString(argv[i + 1]).Atoi();
      if (count < 0) {
        HLTError("Bad value for '-forced-events' argument: %d", count);
        return -EPROTO;
      }

      fNofEventsForce = count;
      fForcedEventsCount=0;

      i += 2;
    } else if (argument.CompareTo("-ignore-cycletime") == 0) { // ignore cycle time for n sec
      if (i + 1 == argc) {
        HLTError("Numeric value for '-ignore-cycletime' is expected");
        return -EPROTO;
      }

      const Int_t time = TString(argv[i + 1]).Atoi();
      if (time < 0) {
        HLTError("Bad value for '-ignore-cycletime' argument: %d", time);
        return -EPROTO;
      }

      fIgnoreCycleTime = time;
      i += 2;
    } else if (argument.CompareTo("-maxmemory") == 0) { // maximum of memory in kByte to be used by the component
      if (i + 1 == argc) {
        HLTError("Numeric value for '-maxmemory' is expected");
        return -EPROTO;
      }

      const Int_t mem = TString(argv[i + 1]).Atoi();
      if (mem < 0) {
        HLTError("Bad value for '-maxmemory' argument: %d", time);
        return -EPROTO;
      }

      fMaxMemory = mem;
      i += 2;
    } else if (argument.CompareTo("-cycletime-factor") == 0) { // weight factor for cycle time
      if (i + 1 == argc) {
        HLTError("Numeric value for '-cycletime-factor' is expected");
        return -EPROTO;
      }

      const Float_t factor = TString(argv[i + 1]).Atof();
      if (factor < 0) {
        HLTError("Bad value for '-cycletime-factor' argument: %f", factor);
        return -EPROTO;
      }

      fCycleTimeFactor = factor;
      i += 2;
    } else if (argument.CompareTo("-histogram") == 0) { //3. Histogramm definition.
      const int nParsed = ParseHistogramDefinition(argc, argv, i, def);
      if (!nParsed)
        return -EPROTO;

      newDefs.push_back(def);

      i += nParsed;   
    } else {
      HLTError("Unknown argument %s", argument.Data());
      return -EPROTO;
    }
  }

  if (maxEntries != fMaxEntries) {
    fMaxEntries = maxEntries;
    if (fTree) {
      fTree->Reset();
      fTree->SetCircular(fMaxEntries);
    }
  }

  if (newDefs.size())
    fDefinitions.swap(newDefs);

  return i;
}

TH1* AliHLTTTreeProcessor::CreateHistogram(const AliHLTHistogramDefinition& d)
{

  // create a histogram from the tree
  if (!fTree) {
    HLTError("fTree is a null pointer, try to call AliHLTTTreeProcessor::DoInit first.");
    return 0;
  }

  TString histName(d.GetName());
  if (!histName.Contains("(")) {
    //Without number of bins, the histogram will be "fixed"
    //and most of values can go to underflow/overflow bins,
    //since kCanRebin will be false.
    histName += TString::Format("(%d)", Int_t(kDefaultNBins));
  }

  const Long64_t rez = fTree->Project(histName.Data(), d.GetExpression().Data(), d.GetCut().Data(), d.GetDrawOption().Data());

  if (rez == -1) {
    HLTError("TTree::Project failed");
    return 0;
  }

  //Now, cut off the binning part of a name
  histName = histName(0, histName.Index("("));
  TH1 * hist = dynamic_cast<TH1*>(gDirectory->Get(histName.Data()));
  if (!hist) {
    const TString msg(Form("Hist %s is a null pointer, selection was %s, strange name or hist's type\n", histName.Data(), d.GetExpression().Data()));
    HLTError(msg.Data());
  }else if (d.GetDrawOption().Length()) {
    hist->SetOption(d.GetDrawOption().Data());
  }

  //Reformatting the histogram name
  TString str2=d.GetCut().Data();
  str2.ReplaceAll("Track_", "");
  str2.ReplaceAll("&&", " ");
  str2 = histName+" "+str2;
  hist->SetTitle(str2);

  if(d.GetTitle().Length()){
  
    //removing underscore
    TString axis=d.GetTitle().Data();
    axis.ReplaceAll("_{T}", "underscore{T}");
    axis.ReplaceAll("_", " ");
    axis.ReplaceAll("underscore{T}", "_{T}");
  
    hist->SetXTitle(axis);
    hist->GetXaxis()->CenterTitle();
  }
  return hist;
}

int AliHLTTTreeProcessor::ParseHistogramDefinition(int argc, const char** argv, int pos, AliHLTHistogramDefinition& dst)const
{
  //Histogram-definition:
  //    -histogram name -size number -expression expression [-title expression][-cut expression][-opt option]

  //at pos we have '-histogram', at pos + 1 must be the name.
  if (pos + 1 == argc) {
    HLTError("Bad histogram definition, histogram name is expected");
    return 0;
  }

  dst.SetName(argv[pos + 1]);
  pos += 2;
  
  //At pos must be '-size', and number at pos + 1.
  if (pos == argc || TString(argv[pos]).CompareTo("-size")) {
    HLTError("Bad histogram definition, '-size' is expected");
    return 0;
  }

  if (pos + 1 == argc) {
    HLTError("Bad histogram definition, size is expected");
    return 0;
  }

  dst.SetSize(TString(argv[pos + 1]).Atoi());
  if (dst.GetSize() <= 0) {
    HLTError("Bad histogram definition, positive size is required");
    return 0;
  }

  pos += 2;
  //At pos must be '-expression', and expression at pos + 1. 
  if (pos == argc || TString(argv[pos]).CompareTo("-expression")) {
    HLTError("Bad histogram definition, '-expression' is expected");
    return 0;
  }

  if (pos + 1 == argc) {
    HLTError("Bad histogram definition, expression is expected");
    return 0;
  }

  dst.SetExpression(argv[pos + 1]);
  pos += 2;

  int processed = 6;
  dst.SetTitle("");
  dst.SetCut("");
  dst.SetDrawOption("");

  //remaining options can be the title, cut and Draw option.
  //title must be first
  if (pos + 1 >= argc){
    return processed;
  }
  if (TString(argv[pos]).CompareTo("-title") == 0) {
    dst.SetTitle(argv[pos + 1]);
    pos += 2;
    processed += 2;
  }

  //cut must be second.
  if (pos + 1 >= argc)
    return processed;

  if (TString(argv[pos]).CompareTo("-cut") == 0) {
    dst.SetCut(argv[pos + 1]);
    pos += 2;
    processed += 2;
  }

  if (pos + 1 >= argc)
    return processed;

  if (TString(argv[pos]).CompareTo("-opt") == 0) {
    dst.SetDrawOption(argv[pos + 1]);
    processed += 2;
  }

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