ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * 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.                  *
 **************************************************************************/


///////////////////////////////////////////////////////////////////////////
/*

Origin: marian.ivanov@cern.ch
Frequenlty used function for visualization 
marian.ivanov@cern.ch
*/

#if !defined(__CINT__) || defined(__MAKECINT__)
#include <stdio.h>
#include <string.h>
//ROOT includes
#include "TROOT.h"
#include "Rtypes.h"
#include "TFile.h"
#include "TTree.h"
#include "TChain.h"
#include "TCut.h"
#include "TString.h"
#include "TBenchmark.h"
#include "TStopwatch.h"
#include "TParticle.h"
#include "TSystem.h"
#include "TTimer.h"
#include "TVector3.h"
#include "TH1F.h"
#include "TH2F.h"
#include "TCanvas.h"
#include "TPad.h"
#include "TF1.h"
#include "TView.h"
#include "TView3D.h"
#include "TPolyLine3D.h"
#include "TPolyMarker3D.h"
#include "TObjString.h"


//ALIROOT includes
#include "AliTrackPointArray.h"
#include "AliTreeDraw.h" 

#endif

//
//     Class for visualization and some statistacal analysis using tree
//     To be used in comparisons
//                and calib viewers based on tree    


ClassImp(AliTreeDraw)


AliTreeDraw::AliTreeDraw():
  fTree(0),
  fRes(0),
  fMean(0),
  fPoints(0){
  //
  // default constructor
  //
}

void  AliTreeDraw::ClearHisto(){
  //
  //
  delete fRes; 
  delete fMean;
  fRes=0;
  fMean=0;
}



TH1F * AliTreeDraw::DrawXY(const char * chx, const char *chy, const char* selection, 
		const char * quality, Int_t nbins, Float_t minx, Float_t maxx, Float_t miny, Float_t maxy, Int_t nBinsRes)
{
  //
  Double_t* bins = CreateLogBins(nbins, minx, maxx);
  TH2F* hRes2 = new TH2F("hRes2", "residuals", nbins, minx, maxx, nBinsRes, miny, maxy);
  char cut[1000];
  snprintf(cut,1000,"%s&&%s",selection,quality);
  char expression[1000];
  snprintf(expression,1000,"%s:%s>>hRes2",chy,chx);
  fTree->Draw(expression, cut, "groff");
  TH1F* hMean=0;
  TH1F* hRes = CreateResHisto(hRes2, &hMean);
  AliLabelAxes(hRes, chx, chy);
  //
  delete hRes2;
  delete[] bins;
  ClearHisto();
  fRes  = hRes;
  fMean = hMean;
  return hRes;
}



TH1F * AliTreeDraw::DrawLogXY(const char * chx, const char *chy, const char* selection, 
				    const char * quality, Int_t nbins, Float_t minx, Float_t maxx, Float_t miny, Float_t maxy, Int_t nBinsRes)
{
  //
  // 
  //
  Double_t* bins = CreateLogBins(nbins, minx, maxx);
  TH2F* hRes2 = new TH2F("hRes2", "residuals", nbins, bins, nBinsRes, miny, maxy);
  char cut[1000];
  snprintf(cut,1000,"%s&&%s",selection,quality);
  char expression[1000];
  snprintf(expression,1000,"%s:%s>>hRes2",chy,chx);
  fTree->Draw(expression, cut, "groff");
  TH1F* hMean=0;  
  TH1F* hRes = CreateResHisto(hRes2, &hMean);
  AliLabelAxes(hRes, chx, chy);
  //
  delete hRes2;
  delete[] bins;
  ClearHisto();
  fRes  = hRes;
  fMean = hMean;
  return hRes;
}

///////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////
TH1F * AliTreeDraw::Eff(const char *variable, const char* selection, const char * quality, 
			      Int_t nbins, Float_t min, Float_t max)
{
  //
  //
  TH1F* hGen = new TH1F("hGen", "gen. tracks", nbins, min, max);
  TH1F* hRec = new TH1F("hRec", "rec. tracks", nbins, min, max);
  char inputGen[1000];  
  snprintf(inputGen,1000,"%s>>hGen", variable);
  fTree->Draw(inputGen, selection, "groff");
  char selectionRec[256];
  snprintf(selectionRec,256, "%s && %s", selection, quality);
  char inputRec[1000];  
  snprintf(inputRec,1000,"%s>>hRec", variable);
  fTree->Draw(inputRec, selectionRec, "groff");
  //
  TH1F* hEff = CreateEffHisto(hGen, hRec);
  AliLabelAxes(hEff, variable, "#epsilon [%]");
  fRes = hEff;
  delete hRec;
  delete hGen;
  return hEff;
}



///////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////
TH1F * AliTreeDraw::EffLog(const char *variable, const char* selection, const char * quality, 
			      Int_t nbins, Float_t min, Float_t max)
{
  //
  //
  Double_t* bins = CreateLogBins(nbins, min, max);
  TH1F* hGen = new TH1F("hGen", "gen. tracks", nbins, bins);
  TH1F* hRec = new TH1F("hRec", "rec. tracks", nbins, bins);
  char inputGen[1000];  
  snprintf(inputGen,1000,"%s>>hGen", variable);
  fTree->Draw(inputGen, selection, "groff");
  char selectionRec[256];
  snprintf(selectionRec,256, "%s && %s", selection, quality);
  char inputRec[1000];  
  snprintf(inputRec,1000,"%s>>hRec", variable);
  fTree->Draw(inputRec, selectionRec, "groff");
  //
  TH1F* hEff = CreateEffHisto(hGen, hRec);
  AliLabelAxes(hEff, variable, "#epsilon [%]");
  fRes = hEff;
  delete hRec;
  delete hGen;
  delete[] bins;
  return hEff;
}


///////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////

Double_t* AliTreeDraw::CreateLogBins(Int_t nBins, Double_t xMin, Double_t xMax)
{
  Double_t* bins = new Double_t[nBins+1];
  bins[0] = xMin;
  Double_t factor = pow(xMax/xMin, 1./nBins);
  for (Int_t i = 1; i <= nBins; i++)
    bins[i] = factor * bins[i-1];
  return bins;
}




void AliTreeDraw::AliLabelAxes(TH1* histo, const char* xAxisTitle, const char* yAxisTitle)
{
  //
  histo->GetXaxis()->SetTitle(xAxisTitle);
  histo->GetYaxis()->SetTitle(yAxisTitle);
}


TH1F* AliTreeDraw::CreateEffHisto(TH1F* hGen, TH1F* hRec)
{
  //
  Int_t nBins = hGen->GetNbinsX();
  TH1F* hEff = (TH1F*) hGen->Clone("hEff");
  hEff->SetTitle("");
  hEff->SetStats(kFALSE);
  hEff->SetMinimum(0.);
  hEff->SetMaximum(110.);
  //
  for (Int_t iBin = 0; iBin <= nBins; iBin++) {
    Double_t nGen = hGen->GetBinContent(iBin);
    Double_t nRec = hRec->GetBinContent(iBin);
    if (nGen > 0) {
      Double_t eff = nRec/nGen;
      hEff->SetBinContent(iBin, 100. * eff);
      Double_t error = sqrt((eff*(1.-eff)+0.01) / nGen);      
      //      if (error == 0) error = sqrt(0.1/nGen);
      //
      if (error == 0) error = 0.0001;
      hEff->SetBinError(iBin, 100. * error);
    } else {
      hEff->SetBinContent(iBin, 100. * 0.5);
      hEff->SetBinError(iBin, 100. * 0.5);
    }
  }
  return hEff;
}



TH1F* AliTreeDraw::CreateResHisto(TH2F* hRes2, TH1F **phMean,  Bool_t drawBinFits, 
		     Bool_t overflowBinFits)
{
  TVirtualPad* currentPad = gPad;
  TAxis* axis = hRes2->GetXaxis();
  Int_t nBins = axis->GetNbins();
  TH1F* hRes, *hMean;
  if (axis->GetXbins()->GetSize()){
    hRes = new TH1F("hRes", "", nBins, axis->GetXbins()->GetArray());
    hMean = new TH1F("hMean", "", nBins, axis->GetXbins()->GetArray());
  }
  else{
    hRes = new TH1F("hRes", "", nBins, axis->GetXmin(), axis->GetXmax());
    hMean = new TH1F("hMean", "", nBins, axis->GetXmin(), axis->GetXmax());

  }
  hRes->SetStats(false);
  hRes->SetOption("E");
  hRes->SetMinimum(0.);
  //
  hMean->SetStats(false);
  hMean->SetOption("E");
 
  // create the fit function
  TF1 * fitFunc = new TF1("G","[0]*exp(-(x-[1])*(x-[1])/(2.*[2]*[2]))",-3,3);
  
  fitFunc->SetLineWidth(2);
  fitFunc->SetFillStyle(0);
  // create canvas for fits
  TCanvas* canBinFits = NULL;
  Int_t nPads = (overflowBinFits) ? nBins+2 : nBins;
  Int_t nx = Int_t(sqrt(nPads-1.));// + 1;
  Int_t ny = (nPads-1) / nx + 1;
  if (drawBinFits) {
    canBinFits = (TCanvas*)gROOT->FindObject("canBinFits");
    if (canBinFits) delete canBinFits;
    canBinFits = new TCanvas("canBinFits", "fits of bins", 200, 100, 500, 700);
    canBinFits->Divide(nx, ny);
  }

  // loop over x bins and fit projection
  Int_t dBin = ((overflowBinFits) ? 1 : 0);
  for (Int_t bin = 1-dBin; bin <= nBins+dBin; bin++) {
    if (drawBinFits) canBinFits->cd(bin + dBin);
    TH1D* hBin = hRes2->ProjectionY("hBin", bin, bin);
    //    
    if (hBin->GetEntries() > 5) {
      fitFunc->SetParameters(hBin->GetMaximum(),hBin->GetMean(),hBin->GetRMS());
      hBin->Fit(fitFunc,"s");
      Double_t sigma = TMath::Abs(fitFunc->GetParameter(2));

      if (sigma > 0.){
	hRes->SetBinContent(bin, TMath::Abs(fitFunc->GetParameter(2)));
	hMean->SetBinContent(bin, fitFunc->GetParameter(1));	
      }
      else{
	hRes->SetBinContent(bin, 0.);
	hMean->SetBinContent(bin,0);
      }
      hRes->SetBinError(bin, fitFunc->GetParError(2));
      hMean->SetBinError(bin, fitFunc->GetParError(1));
      
      //
      //

    } else {
      hRes->SetBinContent(bin, 0.);
      hRes->SetBinError(bin, 0.);
      hMean->SetBinContent(bin, 0.);
      hMean->SetBinError(bin, 0.);
    }
    

    if (drawBinFits) {
      char name[256];
      if (bin == 0) {
	snprintf(name,256, "%s < %.4g", axis->GetTitle(), axis->GetBinUpEdge(bin));
      } else if (bin == nBins+1) {
	snprintf(name,256, "%.4g < %s", axis->GetBinLowEdge(bin), axis->GetTitle());
      } else {
	snprintf(name,256, "%.4g < %s < %.4g", axis->GetBinLowEdge(bin),
		axis->GetTitle(), axis->GetBinUpEdge(bin));
      }
      canBinFits->cd(bin + dBin);
      hBin->SetTitle(name);
      hBin->SetStats(kTRUE);
      hBin->DrawCopy("E");
      canBinFits->Update();
      canBinFits->Modified();
      canBinFits->Update();
    }
    
    delete hBin;
  }

  delete fitFunc;
  currentPad->cd();
  *phMean = hMean;
  return hRes;
}

TH1F* AliTreeDraw::CreateResHistoI(TH2F* hRes2, TH1F **phMean, Int_t integ,  Bool_t drawBinFits)
{
  TVirtualPad* currentPad = gPad;
  TAxis* axis = hRes2->GetXaxis();
  Int_t nBins = axis->GetNbins();
  //Bool_t overflowBinFits = kFALSE;
  
  TH1F* hRes, *hMean;
  if (axis->GetXbins()->GetSize()){
    hRes = new TH1F("hRes", "", nBins, axis->GetXbins()->GetArray());
    hMean = new TH1F("hMean", "", nBins, axis->GetXbins()->GetArray());
  }
  else{
    hRes = new TH1F("hRes", "", nBins, axis->GetXmin(), axis->GetXmax());
    hMean = new TH1F("hMean", "", nBins, axis->GetXmin(), axis->GetXmax());

  }
  hRes->SetStats(false);
  hRes->SetOption("E");
  hRes->SetMinimum(0.);
  //
  hMean->SetStats(false);
  hMean->SetOption("E");
 
  // create the fit function
  TF1 * fitFunc = new TF1("G","[0]*exp(-(x-[1])*(x-[1])/(2.*[2]*[2]))",-3,3);
  
  fitFunc->SetLineWidth(2);
  fitFunc->SetFillStyle(0);
  // create canvas for fits
  TCanvas* canBinFits = NULL;
  //Int_t nPads = (overflowBinFits) ? nBins+2 : nBins;
  Int_t nPads = nBins;
  Int_t nx = Int_t(sqrt(nPads-1.));// + 1;
  Int_t ny = (nPads-1) / nx + 1;
  if (drawBinFits) {
    canBinFits = (TCanvas*)gROOT->FindObject("canBinFits");
    if (canBinFits) delete canBinFits;
    canBinFits = new TCanvas("canBinFits", "fits of bins", 200, 100, 500, 700);
    canBinFits->Divide(nx, ny);
  }

  // loop over x bins and fit projection
  //Int_t dBin = ((overflowBinFits) ? 1 : 0);
  Int_t dBin =  0;
  for (Int_t bin = 1-dBin; bin <= nBins+dBin; bin++) {
    if (drawBinFits) canBinFits->cd(bin + dBin);
    Int_t bin0=TMath::Max(bin-integ,0);
    Int_t bin1=TMath::Min(bin+integ,nBins);
    TH1D* hBin = hRes2->ProjectionY("hBin", bin0, bin1);
    //    
    if (hBin->GetEntries() > 5) {
      fitFunc->SetParameters(hBin->GetMaximum(),hBin->GetMean(),hBin->GetRMS());
      hBin->Fit(fitFunc,"s");
      Double_t sigma = TMath::Abs(fitFunc->GetParameter(2));

      if (sigma > 0.){
	hRes->SetBinContent(bin, TMath::Abs(fitFunc->GetParameter(2)));
	hMean->SetBinContent(bin, fitFunc->GetParameter(1));	
      }
      else{
	hRes->SetBinContent(bin, 0.);
	hMean->SetBinContent(bin,0);
      }
      hRes->SetBinError(bin, fitFunc->GetParError(2));
      hMean->SetBinError(bin, fitFunc->GetParError(1));
      
      //
      //

    } else {
      hRes->SetBinContent(bin, 0.);
      hRes->SetBinError(bin, 0.);
      hMean->SetBinContent(bin, 0.);
      hMean->SetBinError(bin, 0.);
    }
    

    if (drawBinFits) {
      char name[256];
      if (bin == 0) {
	snprintf(name,256, "%s < %.4g", axis->GetTitle(), axis->GetBinUpEdge(bin));
      } else if (bin == nBins+1) {
	snprintf(name,256, "%.4g < %s", axis->GetBinLowEdge(bin), axis->GetTitle());
      } else {
	snprintf(name,256, "%.4g < %s < %.4g", axis->GetBinLowEdge(bin),
		axis->GetTitle(), axis->GetBinUpEdge(bin));
      }
      canBinFits->cd(bin + dBin);
      hBin->SetTitle(name);
      hBin->SetStats(kTRUE);
      hBin->DrawCopy("E");
      canBinFits->Update();
      canBinFits->Modified();
      canBinFits->Update();
    }
    
    delete hBin;
  }

  delete fitFunc;
  currentPad->cd();
  *phMean = hMean;
  return hRes;
}

TH1F* AliTreeDraw::CreateResHistoII(TH2F* hRes2, TH1F **phMean, Int_t integ,  Bool_t drawBinFits, Int_t cut)
{
  TVirtualPad* currentPad = gPad;
  TAxis* axis = hRes2->GetXaxis();
  Int_t nBins = axis->GetNbins();
  //Bool_t overflowBinFits = kFALSE;
  TH1F* hRes, *hMean;
  if (axis->GetXbins()->GetSize()){
    hRes = new TH1F("hRes", "", nBins, axis->GetXbins()->GetArray());
    hMean = new TH1F("hMean", "", nBins, axis->GetXbins()->GetArray());
  }
  else{
    hRes = new TH1F("hRes", "", nBins, axis->GetXmin(), axis->GetXmax());
    hMean = new TH1F("hMean", "", nBins, axis->GetXmin(), axis->GetXmax());

  }
  hRes->SetStats(false);
  hRes->SetOption("E");
  hRes->SetMinimum(0.);
  //
  hMean->SetStats(false);
  hMean->SetOption("E");
 
  // create the fit function
  TF1 * fitFunc = new TF1("G","[0]*exp(-(x-[1])*(x-[1])/(2.*[2]*[2]))",-3,3);
  fitFunc->SetParLimits(2,0.0001,100.);
  
  fitFunc->SetLineWidth(2);
  fitFunc->SetFillStyle(0);
  // create canvas for fits
  TCanvas* canBinFits = NULL;
  //Int_t nPads = (overflowBinFits) ? nBins+2 : nBins;
  Int_t nPads = nBins;
  Int_t nx = Int_t(sqrt(nPads-1.));// + 1;
  Int_t ny = (nPads-1) / nx + 1;
  if (drawBinFits) {
    canBinFits = (TCanvas*)gROOT->FindObject("canBinFits");
    if (canBinFits) delete canBinFits;
    canBinFits = new TCanvas("canBinFits", "fits of bins", 200, 100, 500, 700);
    canBinFits->Divide(nx, ny);
  }

  // loop over x bins and fit projection
  //Int_t dBin = ((overflowBinFits) ? 1 : 0);
  Int_t dBin = 0;
  for (Int_t bin = 1-dBin; bin <= nBins+dBin; bin++) {
    if (drawBinFits) canBinFits->cd(bin + dBin);
    Int_t bin0=TMath::Max(bin-integ,0);
    Int_t bin1=TMath::Min(bin+integ,nBins);
    TH1D* hBin = hRes2->ProjectionY("hBin", bin0, bin1);
    //    
    if (hBin->GetEntries() > cut) {
      fitFunc->SetParameters(hBin->GetMaximum(),hBin->GetMean(),hBin->GetRMS());
      hBin->Fit(fitFunc,"s");
      Double_t sigma = TMath::Abs(fitFunc->GetParameter(2));

      if (sigma > 0.){
	hRes->SetBinContent(bin, TMath::Abs(fitFunc->GetParameter(2)));
	hMean->SetBinContent(bin, fitFunc->GetParameter(1));	
      }
      else{
	hRes->SetBinContent(bin, 0.);
	hMean->SetBinContent(bin,0);
      }
      hRes->SetBinError(bin, fitFunc->GetParError(2));
      hMean->SetBinError(bin, fitFunc->GetParError(1));
      
      //
      //

    } else {
      hRes->SetBinContent(bin, 0.);
      hRes->SetBinError(bin, 0.);
      hMean->SetBinContent(bin, 0.);
      hMean->SetBinError(bin, 0.);
    }
    

    if (drawBinFits) {
      char name[256];
      if (bin == 0) {
	snprintf(name,256, "%s < %.4g", axis->GetTitle(), axis->GetBinUpEdge(bin));
      } else if (bin == nBins+1) {
	snprintf(name,256, "%.4g < %s", axis->GetBinLowEdge(bin), axis->GetTitle());
      } else {
	snprintf(name,256, "%.4g < %s < %.4g", axis->GetBinLowEdge(bin),
		axis->GetTitle(), axis->GetBinUpEdge(bin));
      }
      canBinFits->cd(bin + dBin);
      hBin->SetTitle(name);
      hBin->SetStats(kTRUE);
      hBin->DrawCopy("E");
      canBinFits->Update();
      canBinFits->Modified();
      canBinFits->Update();
    }
    
    delete hBin;
  }

  delete fitFunc;
  currentPad->cd();
  *phMean = hMean;
  return hRes;
}




void   AliTreeDraw::GetPoints3D(const char * label, const char * chpoints, 
				const char* selection, TTree * tpoints, Int_t color,Float_t rmin){
  //
  // load selected points from tree
  //
   if (!fPoints) fPoints = new TObjArray;
   if (tpoints->GetIndex()==0) tpoints->BuildIndex("fLabel","Label");
   TBranch * br = tpoints->GetBranch(chpoints);
   if (!br) return;
   AliTrackPointArray * points = new AliTrackPointArray;
   br->SetAddress(&points);

   Int_t npoints = fTree->Draw(label,selection);
   Float_t xyz[30000];
   rmin*=rmin;
   for (Int_t ii=0;ii<npoints;ii++){
     Int_t index = (Int_t)fTree->GetV1()[ii];
     tpoints->GetEntryWithIndex(index,index);
     if (points->GetNPoints()<2) continue;
     Int_t goodpoints=0;
     for (Int_t i=0;i<points->GetNPoints(); i++){
       xyz[goodpoints*3]   = points->GetX()[i];
       xyz[goodpoints*3+1] = points->GetY()[i];
       xyz[goodpoints*3+2] = points->GetZ()[i];
       if ( points->GetX()[i]*points->GetX()[i]+points->GetY()[i]*points->GetY()[i]>rmin) goodpoints++;
     } 
     TPolyMarker3D * marker = new TPolyMarker3D(goodpoints,xyz); 
     marker->SetMarkerColor(color);
     marker->SetMarkerStyle(1);
     fPoints->AddLast(marker);
   }
}




TString* AliTreeDraw::FitPlane(const char* drawCommand, const char* formula, const char* cuts, Double_t & chi2, TVectorD &fitParam, TMatrixD &covMatrix, Int_t start, Int_t stop){
   //
   // fit an arbitrary function, specified by formula into the data, specified by drawCommand and cuts
   // returns chi2, fitParam and covMatrix
   // returns TString with fitted formula
   //
    
   TString formulaStr(formula); 
   TString drawStr(drawCommand);
   TString cutStr(cuts);
      
   formulaStr.ReplaceAll("++", "~");
   TObjArray* formulaTokens = formulaStr.Tokenize("~"); 
   Int_t dim = formulaTokens->GetEntriesFast();
   
   fitParam.ResizeTo(dim);
   covMatrix.ResizeTo(dim,dim);
   
   TLinearFitter* fitter = new TLinearFitter(dim+1, Form("hyp%d",dim));
   fitter->StoreData(kTRUE);   
   fitter->ClearPoints();
   
   Int_t entries = fTree->Draw(drawStr.Data(), cutStr.Data(), "goff",  stop-start, start);
   if (entries == -1) return new TString("An ERROR has occured during fitting!");
   Double_t **values = new Double_t*[dim+1] ; 

   for (Int_t i = 0; i < dim + 1; i++) {
      values[i] = 0;
   }

   for (Int_t i = 0; i < dim + 1; i++) {
      Int_t centries = 0;
      if (i < dim) centries = fTree->Draw(((TObjString*)formulaTokens->At(i))->GetName(), cutStr.Data(), "goff", stop-start,start);
      else  centries = fTree->Draw(drawStr.Data(), cutStr.Data(), "goff", stop-start,start);

      if (entries != centries) { 
	for (Int_t j = 0; j < dim + 1; j++) {
          if(values[j]) delete values[j];
	} 
        delete[] values;
        return new TString("An ERROR has occured during fitting!");
      }
      else {
        values[i] = new Double_t[entries];
        memcpy(values[i],  fTree->GetV1(), entries*sizeof(Double_t)); 
      }
   }
   
   // add points to the fitter
   for (Int_t i = 0; i < entries; i++) {
      Double_t x[1000];
      for (Int_t j=0; j<dim;j++) x[j]=values[j][i];
      fitter->AddPoint(x, values[dim][i], 1);
   }

   fitter->Eval();
   fitter->GetParameters(fitParam);
   fitter->GetCovarianceMatrix(covMatrix);
   chi2 = fitter->GetChisquare();
   
   TString *preturnFormula = new TString(Form("( %f+",fitParam[0])), &returnFormula = *preturnFormula; 
   
   for (Int_t iparam = 0; iparam < dim; iparam++) {
     returnFormula.Append(Form("%s*(%f)",((TObjString*)formulaTokens->At(iparam))->GetName(),fitParam[iparam+1]));
     if (iparam < dim-1) returnFormula.Append("+");
   }
   returnFormula.Append(" )");
   delete formulaTokens;
   delete fitter;

   for (Int_t i = 0; i < dim + 1; i++) {
     delete[] values[i];
   }
   delete[] values;
   return preturnFormula;
}

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