ROOT logo
/*************************************************************************
* Copyright(c) 1998-2009, 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.                  *
**************************************************************************/

//
// Generic Histogram container with support for groups and filling of groups by passing
// a vector of data
//
// Authors: 
//   Jens Wiechula <Jens.Wiechula@cern.ch> 
//   Julian Book   <Julian.Book@cern.ch> 
// 

#include <TH1.h>
#include <TH1F.h>
#include <TH2.h>
#include <TH3.h>
#include <THnBase.h>
#include <THn.h>
#include <THnSparse.h>
#include <TProfile.h>
#include <TProfile2D.h>
#include <TProfile3D.h>
#include <TCollection.h>
#include <THashList.h>
#include <TString.h>
#include <TObjString.h>
#include <TObjArray.h>
#include <TFile.h>
#include <TError.h>
#include <TCanvas.h>
#include <TMath.h>
#include <TROOT.h>
#include <TLegend.h>
#include <TKey.h>
#include <TAxis.h>
#include <TVirtualPS.h>
#include <TVectorD.h>

#include "AliDielectronHelper.h"
#include "AliDielectronVarManager.h"
#include "AliDielectronHistos.h"

ClassImp(AliDielectronHistos)


AliDielectronHistos::AliDielectronHistos() :
//   TCollection(),
  TNamed("AliDielectronHistos","Dielectron Histogram Container"),
  fHistoList(),
  fList(0x0),
  fUsedVars(new TBits(AliDielectronVarManager::kNMaxValues)),
  fReservedWords(new TString)
{
  //
  // Default constructor
  //
  fHistoList.SetOwner(kTRUE);
  fHistoList.SetName("Dielectron_Histos");
}

//_____________________________________________________________________________
AliDielectronHistos::AliDielectronHistos(const char* name, const char* title) :
//   TCollection(),
  TNamed(name, title),
  fHistoList(),
  fList(0x0),
  fUsedVars(new TBits(AliDielectronVarManager::kNMaxValues)),
  fReservedWords(new TString)
{
  //
  // TNamed constructor
  //
  fHistoList.SetOwner(kTRUE);
  fHistoList.SetName(name);
}

//_____________________________________________________________________________
AliDielectronHistos::~AliDielectronHistos()
{
  //
  // Destructor
  //
  fHistoList.Clear();
  if (fUsedVars) delete fUsedVars;
  if (fList) fList->Clear();
  delete fReservedWords;
}

//_____________________________________________________________________________
void AliDielectronHistos::UserProfile(const char* histClass,const char *name, const char* title,
				      UInt_t valTypeP,
				      Int_t nbinsX, Double_t xmin, Double_t xmax,
				      UInt_t valTypeX, Bool_t logBinX, TString option,
				      UInt_t valTypeW)
{
  //
  // Default histogram creation 1D case
  //

  TVectorD *binLimX=0x0;
  
  if (logBinX) {
    binLimX=AliDielectronHelper::MakeLogBinning(nbinsX, xmin, xmax);
  } else {
    binLimX=AliDielectronHelper::MakeLinBinning(nbinsX, xmin, xmax);
  }
  UserProfile(histClass,name,title,valTypeP,binLimX,valTypeX,option,valTypeW);
}

//_____________________________________________________________________________
void AliDielectronHistos::UserProfile(const char* histClass,const char *name, const char* title,
				      UInt_t valTypeP,
				      Int_t nbinsX, Double_t xmin, Double_t xmax,
				      Int_t nbinsY, Double_t ymin, Double_t ymax,
				      UInt_t valTypeX, UInt_t valTypeY,
				      Bool_t logBinX, Bool_t logBinY, TString option,
				      UInt_t valTypeW)
{
  //
  // Default histogram creation 2D case
  //
  if (!IsHistogramOk(histClass,name)) return;

  TVectorD *binLimX=0x0;
  TVectorD *binLimY=0x0;
  
  if (logBinX) {
    binLimX=AliDielectronHelper::MakeLogBinning(nbinsX, xmin, xmax);
  } else {
    binLimX=AliDielectronHelper::MakeLinBinning(nbinsX, xmin, xmax);
  }
  if (logBinY) {
    binLimY=AliDielectronHelper::MakeLogBinning(nbinsY, ymin, ymax);
  } else {
    binLimY=AliDielectronHelper::MakeLinBinning(nbinsY, ymin, ymax);
  }
  UserProfile(histClass,name,title,valTypeP,binLimX,binLimY,valTypeX,valTypeY,option,valTypeW);
}


//_____________________________________________________________________________
void AliDielectronHistos::UserProfile(const char* histClass,const char *name, const char* title,
				      UInt_t valTypeP,
				      Int_t nbinsX, Double_t xmin, Double_t xmax,
				      Int_t nbinsY, Double_t ymin, Double_t ymax,
				      Int_t nbinsZ, Double_t zmin, Double_t zmax,
				      UInt_t valTypeX, UInt_t valTypeY, UInt_t valTypeZ,
				      Bool_t logBinX, Bool_t logBinY, Bool_t logBinZ, TString option,
				      UInt_t valTypeW)
{
  //
  // Default histogram creation 3D case
  //
  if (!IsHistogramOk(histClass,name)) return;

  TVectorD *binLimX=0x0;
  TVectorD *binLimY=0x0;
  TVectorD *binLimZ=0x0;
  
  if (logBinX) {
    binLimX=AliDielectronHelper::MakeLogBinning(nbinsX, xmin, xmax);
  } else {
    binLimX=AliDielectronHelper::MakeLinBinning(nbinsX, xmin, xmax);
  }
  
  if (logBinY) {
    binLimY=AliDielectronHelper::MakeLogBinning(nbinsY, ymin, ymax);
  } else {
    binLimY=AliDielectronHelper::MakeLinBinning(nbinsY, ymin, ymax);
  }
  
  if (logBinZ) {
    binLimZ=AliDielectronHelper::MakeLogBinning(nbinsZ, zmin, zmax);
  } else {
    binLimZ=AliDielectronHelper::MakeLinBinning(nbinsZ, zmin, zmax);
  }

  UserProfile(histClass,name,title,valTypeP,binLimX,binLimY,binLimZ,valTypeX,valTypeY,valTypeZ,option,valTypeW);
}

//_____________________________________________________________________________
void AliDielectronHistos::UserProfile(const char* histClass,const char *name, const char* title,
				      UInt_t valTypeP,
				      const char* binning,
				      UInt_t valTypeX, TString option,
				      UInt_t valTypeW)
{
  //
  // Histogram creation 1D case with arbitraty binning
  //

  TVectorD *binLimX=AliDielectronHelper::MakeArbitraryBinning(binning);
  UserProfile(histClass,name,title,valTypeP,binLimX,valTypeX,option,valTypeW);
}

//_____________________________________________________________________________
void AliDielectronHistos::UserProfile(const char* histClass,const char *name, const char* title,
				      UInt_t valTypeP,
				      const TVectorD * const binsX,
				      UInt_t valTypeX/*=kNoAutoFill*/, TString option,
				      UInt_t valTypeW)
{
  //
  // Histogram creation 1D case with arbitraty binning X
  // the TVectorD is assumed to be surplus after the creation and will be deleted!!!
  //

  Bool_t isOk=kTRUE;
  isOk&=IsHistogramOk(histClass,name);
  isOk&=(binsX!=0x0);
  TH1 *hist=0x0;

  if (isOk){
    if(valTypeP==kNoProfile)
      hist=new TH1F(name,title,binsX->GetNrows()-1,binsX->GetMatrixArray());
    else {
      TString opt=""; Double_t pmin=0., pmax=0.;
      if(!option.IsNull()) {
	TObjArray *arr=option.Tokenize(";");
	arr->SetOwner();
	opt=((TObjString*)arr->At(0))->GetString();
	if(arr->GetEntriesFast()>1) pmin=(((TObjString*)arr->At(1))->GetString()).Atof();
	if(arr->GetEntriesFast()>2) pmax=(((TObjString*)arr->At(2))->GetString()).Atof();
	delete arr;
      }
      hist=new TProfile(name,title,binsX->GetNrows()-1,binsX->GetMatrixArray(),pmin,pmax,opt.Data());
      //      printf(" name %s PROFILE options: pmin %.1f pmax %.1f err %s \n",name,((TProfile*)hist)->GetYmin(),((TProfile*)hist)->GetYmax(),((TProfile*)hist)->GetErrorOption() );
    }

    // store variales in axes
    UInt_t valType[20] = {0};
    valType[0]=valTypeX;     valType[1]=valTypeP;
    StoreVariables(hist, valType);
    hist->SetUniqueID(valTypeW); // store weighting variable

    // store which variables are used
    for(Int_t i=0; i<4; i++)   fUsedVars->SetBitNumber(valType[i],kTRUE);
    fUsedVars->SetBitNumber(valTypeW,kTRUE);

    // adapt the name and title of the histogram in case they are empty
    AdaptNameTitle(hist, histClass);

    Bool_t isReserved=fReservedWords->Contains(histClass);
    if(valTypeX==kNoAutoFill) hist->SetUniqueID(valTypeX);
    if (isReserved)
      UserHistogramReservedWords(histClass, hist, 999);
    else
      UserHistogram(histClass, hist, 999);
  }
  
  delete binsX;
}

//_____________________________________________________________________________
void AliDielectronHistos::UserProfile(const char* histClass,const char *name, const char* title,
				      UInt_t valTypeP,
				      const TVectorD * const binsX, const TVectorD * const binsY,
				      UInt_t valTypeX/*=kNoAutoFill*/, UInt_t valTypeY/*=0*/, TString option,
				      UInt_t valTypeW)
{
  //
  // Histogram creation 2D case with arbitraty binning X
  // the TVectorD is assumed to be surplus after the creation and will be deleted!!!
  //

  Bool_t isOk=kTRUE;
  isOk&=IsHistogramOk(histClass,name);
  isOk&=(binsX!=0x0);
  isOk&=(binsY!=0x0);
  TH1 *hist=0x0;

  if (isOk){
    if(valTypeP==kNoProfile) {
      hist=new TH2F(name,title,
                    binsX->GetNrows()-1,binsX->GetMatrixArray(),
                    binsY->GetNrows()-1,binsY->GetMatrixArray()); 
    }
    else  {
      TString opt=""; Double_t pmin=0., pmax=0.;
      if(!option.IsNull()) {
	TObjArray *arr=option.Tokenize(";");
	arr->SetOwner();
	opt=((TObjString*)arr->At(0))->GetString();
	if(arr->GetEntriesFast()>1) pmin=(((TObjString*)arr->At(1))->GetString()).Atof();
	if(arr->GetEntriesFast()>2) pmax=(((TObjString*)arr->At(2))->GetString()).Atof();
	delete arr;
      }
      hist=new TProfile2D(name,title,
                          binsX->GetNrows()-1,binsX->GetMatrixArray(),
                          binsY->GetNrows()-1,binsY->GetMatrixArray());
      ((TProfile2D*)hist)->BuildOptions(pmin,pmax,opt.Data());
      //      printf(" name %s PROFILE options: pmin %.1f pmax %.1f err %s \n",name,((TProfile*)hist)->GetYmin(),((TProfile*)hist)->GetYmax(),((TProfile*)hist)->GetErrorOption() );
    }

    // store variales in axes
    UInt_t valType[20] = {0};
    valType[0]=valTypeX;     valType[1]=valTypeY;     valType[2]=valTypeP;
    StoreVariables(hist, valType);
    hist->SetUniqueID(valTypeW); // store weighting variable

    // store which variables are used
    for(Int_t i=0; i<4; i++)   fUsedVars->SetBitNumber(valType[i],kTRUE);
    fUsedVars->SetBitNumber(valTypeW,kTRUE);

    // adapt the name and title of the histogram in case they are empty
    AdaptNameTitle(hist, histClass);

    Bool_t isReserved=fReservedWords->Contains(histClass);
    if(valTypeX==kNoAutoFill) hist->SetUniqueID(valTypeX);
    if (isReserved)
      UserHistogramReservedWords(histClass, hist, 999);
    else
      UserHistogram(histClass, hist, 999);
  }
  
  delete binsX;
  delete binsY;
  
}

//_____________________________________________________________________________
void AliDielectronHistos::UserProfile(const char* histClass,const char *name, const char* title,
				      UInt_t valTypeP,
				      const TVectorD * const binsX, const TVectorD * const binsY, const TVectorD * const binsZ,
				      UInt_t valTypeX/*=kNoAutoFill*/, UInt_t valTypeY/*=0*/, UInt_t valTypeZ/*=0*/, TString option,
				      UInt_t valTypeW)
{
  //
  // Histogram creation 3D case with arbitraty binning X
  // the TVectorD is assumed to be surplus after the creation and will be deleted!!!
  //

  Bool_t isOk=kTRUE;
  isOk&=IsHistogramOk(histClass,name);
  isOk&=(binsX!=0x0);
  isOk&=(binsY!=0x0);
  isOk&=(binsZ!=0x0);
  TH1 *hist=0x0;

  if (isOk) {
    if(valTypeP==kNoProfile) {
      hist=new TH3F(name,title,
		    binsX->GetNrows()-1,binsX->GetMatrixArray(),
		    binsY->GetNrows()-1,binsY->GetMatrixArray(),
		    binsZ->GetNrows()-1,binsZ->GetMatrixArray());
    }
    else {
      TString opt=""; Double_t pmin=0., pmax=0.;
      if(!option.IsNull()) {
	TObjArray *arr=option.Tokenize(";");
	arr->SetOwner();
	opt=((TObjString*)arr->At(0))->GetString();
	if(arr->GetEntriesFast()>1) pmin=(((TObjString*)arr->At(1))->GetString()).Atof();
	if(arr->GetEntriesFast()>2) pmax=(((TObjString*)arr->At(2))->GetString()).Atof();
	delete arr;
      }
      hist=new TProfile3D(name,title,
			  binsX->GetNrows()-1,binsX->GetMatrixArray(),
			  binsY->GetNrows()-1,binsY->GetMatrixArray(),
			  binsZ->GetNrows()-1,binsZ->GetMatrixArray());
      ((TProfile3D*)hist)->BuildOptions(pmin,pmax,opt.Data());
      //      printf(" name %s PROFILE options: pmin %.1f pmax %.1f err %s \n",name,((TProfile*)hist)->GetYmin(),((TProfile*)hist)->GetYmax(),((TProfile*)hist)->GetErrorOption() );
    }

    // store variales in axes
    UInt_t valType[20] = {0};
    valType[0]=valTypeX;     valType[1]=valTypeY;     valType[2]=valTypeZ;     valType[3]=valTypeP;
    StoreVariables(hist, valType);
    // (this is overwrites the profile variable, no weighting at the moment for TProfile3D)
    if(valTypeP==kNoProfile) hist->SetUniqueID(valTypeW); // store weighting variable

    // store which variables are used
    for(Int_t i=0; i<4; i++)   fUsedVars->SetBitNumber(valType[i],kTRUE);
    if(valTypeW!=kNoWeights)   fUsedVars->SetBitNumber(valTypeW,kTRUE);

    // adapt the name and title of the histogram in case they are empty
    AdaptNameTitle(hist, histClass);

    Bool_t isReserved=fReservedWords->Contains(histClass);
    if(valTypeX==kNoAutoFill) hist->SetUniqueID(valTypeX);
    if (isReserved)
      UserHistogramReservedWords(histClass, hist, 999);
    else
      UserHistogram(histClass, hist, 999);
  }
  
  delete binsX;
  delete binsY;
  delete binsZ;
}

//_____________________________________________________________________________
void AliDielectronHistos::UserHistogram(const char* histClass, Int_t ndim, Int_t *bins, Double_t *mins, Double_t *maxs, UInt_t *vars, UInt_t valTypeW)
{
  //
  // Histogram creation 4-n dimension only with linear binning
  //

  Bool_t isOk=kTRUE;
  isOk&=(ndim<21 && ndim>3);
  if(!isOk) { Warning("UserHistogram","Array sizes should be between 3 and 20. Not adding Histogram to '%s'.", histClass); return; }

  // set automatic histo name
  TString name;
  for(Int_t iv=0; iv < ndim; iv++)
    name+=Form("%s_",AliDielectronVarManager::GetValueName(vars[iv]));
  name.Resize(name.Length()-1);

  isOk&=IsHistogramOk(histClass,name);

  THnD *hist;
  if (isOk) {
    hist=new THnD(name.Data(),"", ndim, bins, mins, maxs);

    // store variales in axes
    StoreVariables(hist, vars);
    hist->SetUniqueID(valTypeW); // store weighting variable

    // store which variables are used
    for(Int_t i=0; i<20; i++)   fUsedVars->SetBitNumber(vars[i],kTRUE);
    fUsedVars->SetBitNumber(valTypeW,kTRUE);

    Bool_t isReserved=fReservedWords->Contains(histClass);
    if (isReserved)
      UserHistogramReservedWords(histClass, hist, 999);
    else
      UserHistogram(histClass, hist, 999);

  }
}

//_____________________________________________________________________________
void AliDielectronHistos::UserHistogram(const char* histClass, Int_t ndim, TObjArray *limits, UInt_t *vars, UInt_t valTypeW)
{
  //
  // Histogram creation n>3 dimension only with non-linear binning
  //

  Bool_t isOk=kTRUE;
  isOk&=(ndim<21 && ndim>3);
  if(!isOk) { Warning("UserHistogram","Array sizes should be between 3 and 20. Not adding Histogram to '%s'.", histClass); return; }
  isOk&=(ndim==limits->GetEntriesFast());
  if(!isOk) return;

  // set automatic histo name
  TString name;
  for(Int_t iv=0; iv < ndim; iv++)
    name+=Form("%s_",AliDielectronVarManager::GetValueName(vars[iv]));
  name.Resize(name.Length()-1);

  isOk&=IsHistogramOk(histClass,name);

  THnD *hist;
  Int_t bins[ndim];
  if (isOk) {
    // get number of bins
    for(Int_t idim=0 ;idim<ndim; idim++) {
      TVectorD *vec = (TVectorD*) limits->At(idim);
      bins[idim]=vec->GetNrows()-1;
    }

    hist=new THnD(name.Data(),"", ndim, bins, 0x0, 0x0);

    // set binning
    for(Int_t idim=0 ;idim<ndim; idim++) {
      TVectorD *vec = (TVectorD*) limits->At(idim);
      hist->SetBinEdges(idim,vec->GetMatrixArray());
    }

    // store variales in axes
    StoreVariables(hist, vars);
    hist->SetUniqueID(valTypeW); // store weighting variable

    // store which variables are used
    for(Int_t i=0; i<20; i++)   fUsedVars->SetBitNumber(vars[i],kTRUE);
    fUsedVars->SetBitNumber(valTypeW,kTRUE);

    Bool_t isReserved=fReservedWords->Contains(histClass);
    if (isReserved)
      UserHistogramReservedWords(histClass, hist, 999);
    else
      UserHistogram(histClass, hist, 999);

  }
}

//_____________________________________________________________________________
void AliDielectronHistos::UserSparse(const char* histClass, Int_t ndim, Int_t *bins, Double_t *mins, Double_t *maxs, UInt_t *vars,
				     UInt_t valTypeW)
{
  //
  // THnSparse creation with linear binning
  //

  Bool_t isOk=kTRUE;

  // set automatic histo name
  TString name;
  for(Int_t iv=0; iv < ndim; iv++)
    name+=Form("%s_",AliDielectronVarManager::GetValueName(vars[iv]));
  name.Resize(name.Length()-1);

  isOk&=IsHistogramOk(histClass,name);

  THnSparseD *hist;
  if (isOk) {
    hist=new THnSparseD(name.Data(),"", ndim, bins, mins, maxs);

    // store variales in axes
    StoreVariables(hist, vars);
    hist->SetUniqueID(valTypeW); // store weighting variable

    // store which variables are used
    for(Int_t i=0; i<20; i++)   fUsedVars->SetBitNumber(vars[i],kTRUE);
    fUsedVars->SetBitNumber(valTypeW,kTRUE);

    Bool_t isReserved=fReservedWords->Contains(histClass);
    if (isReserved)
      UserHistogramReservedWords(histClass, hist, 999);
    else
      UserHistogram(histClass, hist, 999);

  }
}

//_____________________________________________________________________________
void AliDielectronHistos::UserSparse(const char* histClass, Int_t ndim, TObjArray *limits, UInt_t *vars, UInt_t valTypeW)
{
  //
  // THnSparse creation with non-linear binning
  //

  Bool_t isOk=kTRUE;
  isOk&=(ndim==limits->GetEntriesFast());
  if(!isOk) return;

  // set automatic histo name
  TString name;
  for(Int_t iv=0; iv < ndim; iv++)
    name+=Form("%s_",AliDielectronVarManager::GetValueName(vars[iv]));
  name.Resize(name.Length()-1);

  isOk&=IsHistogramOk(histClass,name);

  THnSparseD *hist;
  Int_t bins[ndim];
  if (isOk) {
    // get number of bins
    for(Int_t idim=0 ;idim<ndim; idim++) {
      TVectorD *vec = (TVectorD*) limits->At(idim);
      bins[idim]=vec->GetNrows()-1;
    }

    hist=new THnSparseD(name.Data(),"", ndim, bins, 0x0, 0x0);

    // set binning
    for(Int_t idim=0 ;idim<ndim; idim++) {
      TVectorD *vec = (TVectorD*) limits->At(idim);
      hist->SetBinEdges(idim,vec->GetMatrixArray());
    }

    // store variales in axes
    StoreVariables(hist, vars);
    hist->SetUniqueID(valTypeW); // store weighting variable

    // store which variables are used
    for(Int_t i=0; i<20; i++)   fUsedVars->SetBitNumber(vars[i],kTRUE);
    fUsedVars->SetBitNumber(valTypeW,kTRUE);

    Bool_t isReserved=fReservedWords->Contains(histClass);
    if (isReserved)
      UserHistogramReservedWords(histClass, hist, 999);
    else
      UserHistogram(histClass, hist, 999);

  }
}

//_____________________________________________________________________________
void AliDielectronHistos::UserHistogram(const char* histClass, TObject* hist, UInt_t valTypes)
{
  //
  // Add any type of user histogram
  //

  //special case for the calss Pair. where histograms will be created for all pair classes
  Bool_t isReserved=fReservedWords->Contains(histClass);
  if (isReserved) {
    UserHistogramReservedWords(histClass, hist, valTypes);
    return;
  }

  if (!IsHistogramOk(histClass,hist->GetName())) return;
  THashList *classTable=(THashList*)fHistoList.FindObject(histClass);
  //  hist->SetDirectory(0);

  // store variables axis
  UInt_t valType[20] = {0};
  // incase valTypes is given old way of extracting variables
  if(valTypes!=999) {
    valType[0]=valTypes%1000;          //last three digits
    valType[1]=valTypes/1000%1000;     //second last three digits
    valType[2]=valTypes/1000000%1000;  //third last three digits
    hist->SetUniqueID(valTypes);
  }
  else {
    // extract variables from axis
    FillVarArray(hist, valType);
    StoreVariables(hist, valType);
    hist->SetUniqueID(valType[19]); // store weighting variable
  }

  classTable->Add(hist);
}

//_____________________________________________________________________________
void AliDielectronHistos::AddClass(const char* histClass)
{
  //
  // Add a class of histograms
  // Several classes can be added by separating them by a ';' e.g. 'class1;class2;class3'
  //
  TString hists(histClass);
  TObjArray *arr=hists.Tokenize(";");
  TIter next(arr);
  TObject *o=0;
  while ( (o=next()) ){
    if (fHistoList.FindObject(o->GetName())){
      Warning("AddClass","Cannot create class '%s' it already exists.",histClass);
      continue;
    }
    if (fReservedWords->Contains(o->GetName())){
      Error("AddClass","Pair is a reserved word, please use another name");
      continue;
    }
    THashList *table=new THashList;
    table->SetOwner(kTRUE);
    table->SetName(o->GetName());
    fHistoList.Add(table);
  }
  delete arr;
}

//_____________________________________________________________________________
void AliDielectronHistos::Fill(const char* histClass, const char* name, Double_t xval)
{
  //
  // Fill function 1D case
  //
  THashList *classTable=(THashList*)fHistoList.FindObject(histClass);
  TH1* hist=0;
  if (!classTable || !(hist=(TH1*)classTable->FindObject(name)) ){
    Warning("Fill","Cannot fill histogram. Either class '%s' or histogram '%s' not existing.",histClass,name);
    return;
  }
  hist->Fill(xval);
}

//_____________________________________________________________________________
void AliDielectronHistos::Fill(const char* histClass, const char* name, Double_t xval, Double_t yval)
{
  //
  // Fill function 2D case
  //
  THashList *classTable=(THashList*)fHistoList.FindObject(histClass);
  TH2* hist=0;
  if (!classTable || !(hist=(TH2*)classTable->FindObject(name)) ){
    Warning("UserHistogram","Cannot fill histogram. Either class '%s' or histogram '%s' not existing.",histClass,name);
    return;
  }
  hist->Fill(xval,yval);
}

//_____________________________________________________________________________
void AliDielectronHistos::Fill(const char* histClass, const char* name, Double_t xval, Double_t yval, Double_t zval)
{
  //
  // Fill function 3D case
  //
  THashList *classTable=(THashList*)fHistoList.FindObject(histClass);
  TH3* hist=0;
  if (!classTable || !(hist=(TH3*)classTable->FindObject(name)) ){
    Warning("UserHistogram","Cannot fill histogram. Either class '%s' or histogram '%s' not existing.",histClass,name);
    return;
  }
  hist->Fill(xval,yval,zval);
}

//_____________________________________________________________________________
void AliDielectronHistos::FillClass(const char* histClass, Int_t nValues, const Double_t *values)
{
  //
  // Fill class 'histClass' (by name)
  //

  THashList *classTable=(THashList*)fHistoList.FindObject(histClass);
  if (!classTable){
    Warning("FillClass","Cannot fill class '%s' its not defined. nValues %d",histClass,nValues);
    return;
  }

  TIter nextHist(classTable);
  TObject *obj=0;
  while ( (obj=(TObject*)nextHist()) )  FillValues(obj, values);

  return;
}

//_____________________________________________________________________________
// void AliDielectronHistos::FillClass(const char* histClass, const TVectorD &vals)
// {
//   //
//   //
//   //
//   FillClass(histClass, vals.GetNrows(), vals.GetMatrixArray());
// }

//_____________________________________________________________________________
void AliDielectronHistos::UserHistogramReservedWords(const char* histClass, const TObject *hist, UInt_t valTypes)
{
  //
  // Creation of histogram for all pair types
  //
  TString title(hist->GetTitle());
  // Same Event Like Sign
  TIter nextClass(&fHistoList);
  THashList *l=0;
  while ( (l=static_cast<THashList*>(nextClass())) ){
    TString name(l->GetName());
    if (name.Contains(histClass)){
      TObject *h=hist->Clone();
      // Tobject has no function SetDirectory, didn't we need this???
      //      h->SetDirectory(0);
      ((TH1*)h)->SetTitle(Form("%s %s",title.Data(),l->GetName()));

      UserHistogram(l->GetName(),h,valTypes);
    }
  }
  delete hist;
}

//_____________________________________________________________________________
void AliDielectronHistos::DumpToFile(const char* file)
{
  //
  // Dump the histogram list to a newly created root file
  //
  TFile f(file,"recreate");
  fHistoList.Write(fHistoList.GetName(),TObject::kSingleKey);
  f.Close();
}

//_____________________________________________________________________________
TObject* AliDielectronHistos::GetHist(const char* histClass, const char* name) const
{
  //
  // return object 'name' in 'histClass'
  //
  THashList *classTable=(THashList*)fHistoList.FindObject(histClass);
  if (!classTable) return 0x0;
  return classTable->FindObject(name);
}

//_____________________________________________________________________________
TH1* AliDielectronHistos::GetHistogram(const char* histClass, const char* name) const
{
  //
  // return histogram 'name' in 'histClass'
  //
  return ((TH1*) GetHist(histClass, name));
}

//_____________________________________________________________________________
TObject* AliDielectronHistos::GetHist(const char* cutClass, const char* histClass, const char* name) const
{
  //
  // return object from list of list of histograms
  // this function is thought for retrieving histograms if a list of AliDielectronHistos is set
  //
  
  if (!fList) return 0x0;
  THashList *h=dynamic_cast<THashList*>(fList->FindObject(cutClass));
  if (!h)return 0x0;
  THashList *classTable=dynamic_cast<THashList*>(h->FindObject(histClass));
  if (!classTable) return 0x0;
  return classTable->FindObject(name);
}

//_____________________________________________________________________________
TH1* AliDielectronHistos::GetHistogram(const char* cutClass, const char* histClass, const char* name) const
{
  //
  // return histogram from list of list of histograms
  // this function is thought for retrieving histograms if a list of AliDielectronHistos is set
  //
  return ((TH1*) GetHist(cutClass, histClass, name));
}

//_____________________________________________________________________________
void AliDielectronHistos::Draw(const Option_t* option)
{
  //
  // Draw histograms
  //

  TString drawStr(option);
  TObjArray *arr=drawStr.Tokenize(";");
  arr->SetOwner();
  TIter nextOpt(arr);

  TString drawClasses;
  TObjString *ostr=0x0;

  TString currentOpt;
  TString testOpt;
  while ( (ostr=(TObjString*)nextOpt()) ){
    currentOpt=ostr->GetString();
    currentOpt.Remove(TString::kBoth,'\t');
    currentOpt.Remove(TString::kBoth,' ');

    testOpt="classes=";
    if ( currentOpt.Contains(testOpt.Data()) ){
      drawClasses=currentOpt(testOpt.Length(),currentOpt.Length());
    }
  }

  delete arr;
  drawStr.ToLower();
  //optionsfList
//   Bool_t same=drawOpt.Contains("same"); //FIXME not yet implemented

  TCanvas *c=0x0;
  if (gVirtualPS) {
    if (!gPad){
      Error("Draw","When writing to a file you have to create a canvas before opening the file!!!");
      return;
    }
    c=gPad->GetCanvas();
    c->cd();
//     c=new TCanvas;
  }
  
  TIter nextClass(&fHistoList);
  THashList *classTable=0;
//   Bool_t first=kTRUE;
  while ( (classTable=(THashList*)nextClass()) ){
    //test classes option
    if (!drawClasses.IsNull() && !drawClasses.Contains(classTable->GetName())) continue;
    //optimised division
    Int_t nPads = classTable->GetEntries();
    Int_t nCols = (Int_t)TMath::Ceil( TMath::Sqrt(nPads) );
    Int_t nRows = (Int_t)TMath::Ceil( (Double_t)nPads/(Double_t)nCols );

    //create canvas
    if (!gVirtualPS){
      TString canvasName;
      canvasName.Form("c%s_%s",GetName(),classTable->GetName());
      c=(TCanvas*)gROOT->FindObject(canvasName.Data());
      if (!c) c=new TCanvas(canvasName.Data(),Form("%s: %s",GetName(),classTable->GetName()));
      c->Clear();
    } else {
//       if (first){
//         first=kFALSE;
//         if (nPads>1) gVirtualPS->NewPage();
//       } else {
        if (nPads>1) c->Clear();
//       }
    }
    if (nCols>1||nRows>1) c->Divide(nCols,nRows);
    
    //loop over histograms and draw them
    TIter nextHist(classTable);
    Int_t iPad=0;
    TH1 *h=0;
    while ( (h=(TH1*)nextHist()) ){
      TString drawOpt;
      if ( (h->InheritsFrom(TH2::Class())) ) drawOpt="colz";
      if (nCols>1||nRows>1) c->cd(++iPad);
      if ( TMath::Abs(h->GetXaxis()->GetBinWidth(1)-h->GetXaxis()->GetBinWidth(2))>1e-10 ) gPad->SetLogx();
      if ( TMath::Abs(h->GetYaxis()->GetBinWidth(1)-h->GetYaxis()->GetBinWidth(2))>1e-10 ) gPad->SetLogy();
      if ( TMath::Abs(h->GetZaxis()->GetBinWidth(1)-h->GetZaxis()->GetBinWidth(2))>1e-10 ) gPad->SetLogz();
      TString histOpt=h->GetOption();
      histOpt.ToLower();
      if (histOpt.Contains("logx")) gPad->SetLogx();
      if (histOpt.Contains("logy")) gPad->SetLogy();
      if (histOpt.Contains("logz")) gPad->SetLogz();
      histOpt.ReplaceAll("logx","");
      histOpt.ReplaceAll("logy","");
      histOpt.ReplaceAll("logz","");
      h->Draw(drawOpt.Data());
    }
    if (gVirtualPS) {
      c->Update();
    }
    
  }
//   if (gVirtualPS) delete c;
}

//_____________________________________________________________________________
void AliDielectronHistos::Print(const Option_t* option) const
{
  //
  // Print classes and histograms
  //
  TString optString(option);

  if (optString.IsNull()) PrintStructure();



}

//_____________________________________________________________________________
void AliDielectronHistos::PrintStructure() const
{
  //
  // Print classes and histograms in the class to stdout
  //
  if (!fList){
    TIter nextClass(&fHistoList);
    THashList *classTable=0;
    while ( (classTable=(THashList*)nextClass()) ){
      TIter nextHist(classTable);
      TObject *o=0;
      printf("+ %s\n",classTable->GetName());
      while ( (o=nextHist()) )
        printf("| ->%s\n",o->GetName());
    }
  } else {
    TIter nextCutClass(fList);
    THashList *cutClass=0x0;
    while ( (cutClass=(THashList*)nextCutClass()) ) {
      printf("+ %s\n",cutClass->GetName());
      TIter nextClass(cutClass);
      THashList *classTable=0;
      while ( (classTable=(THashList*)nextClass()) ){
        TIter nextHist(classTable);
        TObject *o=0;
        printf("|  + %s\n",classTable->GetName());
        while ( (o=nextHist()) )
          printf("|  | ->%s\n",o->GetName());
      }
      
    }
  }
}

//_____________________________________________________________________________
void AliDielectronHistos::SetHistogramList(THashList &list, Bool_t setOwner/*=kTRUE*/)
{
  //
  // set histogram classes and histograms to this instance. It will take onwnership!
  //
  ResetHistogramList();
  TString name(GetName());
  if (name == "AliDielectronHistos") SetName(list.GetName());
  TIter next(&list);
  TObject *o;
  while ( (o=next()) ){
    fHistoList.Add(o);
  }
  if (setOwner){
    list.SetOwner(kFALSE);
    fHistoList.SetOwner(kTRUE);
  } else {
    fHistoList.SetOwner(kFALSE);
  }
}

//_____________________________________________________________________________
Bool_t AliDielectronHistos::SetCutClass(const char* cutClass)
{
  //
  // Assign histogram list according to cutClass
  //

  if (!fList) return kFALSE;
  ResetHistogramList();
  THashList *h=dynamic_cast<THashList*>(fList->FindObject(cutClass));
  if (!h) {
    Warning("SetCutClass","cutClass '%s' not found", cutClass);
    return kFALSE;
  }
  SetHistogramList(*h,kFALSE);
  return kTRUE;
}

//_____________________________________________________________________________
Bool_t AliDielectronHistos::IsHistogramOk(const char* histClass, const char* name)
{
  //
  // check whether the histogram class exists and the histogram itself does not exist yet
  //
  Bool_t isReserved=fReservedWords->Contains(histClass);
  if (!fHistoList.FindObject(histClass)&&!isReserved){
    Warning("IsHistogramOk","Cannot create histogram. Class '%s' not defined. Please create it using AddClass before.",histClass);
    return kFALSE;
  }
  if (GetHist(histClass,name)){
    Warning("IsHistogramOk","Cannot create histogram '%s' in class '%s': It already exists!",name,histClass);
    return kFALSE;
  }
  return kTRUE;
}

// //_____________________________________________________________________________
// TIterator* AliDielectronHistos::MakeIterator(Bool_t dir) const
// {
//   //
//   //
//   //
//   return new TListIter(&fHistoList, dir);
// }

//_____________________________________________________________________________
void AliDielectronHistos::ReadFromFile(const char* file)
{
  //
  // Read histos from file
  //
  TFile f(file);
  TIter nextKey(f.GetListOfKeys());
  TKey *key=0;
  while ( (key=(TKey*)nextKey()) ){
    TObject *o=f.Get(key->GetName());
    THashList *list=dynamic_cast<THashList*>(o);
    if (!list) continue;
    SetHistogramList(*list);
    break;
  }
  f.Close();
}

//_____________________________________________________________________________
void AliDielectronHistos::DrawSame(const char* histName, const Option_t *opt)
{
  //
  // Draw all histograms with the same name into one canvas
  // if option contains 'leg' a legend will be created with the class name as caption
  // if option contains 'can' a new canvas is created
  //

  TString optString(opt);
  optString.ToLower();
  Bool_t optLeg=optString.Contains("leg");
  Bool_t optCan=optString.Contains("can");

  TLegend *leg=0;
  TCanvas *c=0;
  if (optCan){
    c=(TCanvas*)gROOT->FindObject(Form("c%s",histName));
    if (!c) c=new TCanvas(Form("c%s",histName),Form("All '%s' histograms",histName));
    c->Clear();
    c->cd();
  }

  if (optLeg) leg=new TLegend(.8,.3,.99,.9);
  
  Int_t i=0;
  TIter next(&fHistoList);
  THashList *classTable=0;
  Double_t max=-1e10;
  TH1 *hFirst=0x0;
  while ( (classTable=(THashList*)next()) ){
    if ( TH1 *h=(TH1*)classTable->FindObject(histName) ){
      if (i==0) hFirst=h;
      h->SetLineColor(i+1);
      h->SetMarkerColor(i+1);
      h->Draw(i>0?"same":"");
      if (leg) leg->AddEntry(h,classTable->GetName(),"lp");
      ++i;
      max=TMath::Max(max,h->GetMaximum());
    }
  }
  if (leg){
    leg->SetFillColor(10);
    leg->SetY1(.9-i*.05);
    leg->Draw();
  }
  if (hFirst&&(hFirst->GetYaxis()->GetXmax()<max)){
    hFirst->SetMaximum(max);
  }
}

//_____________________________________________________________________________
void AliDielectronHistos::SetReservedWords(const char* words)
{
  //
  // set reserved words
  //

  (*fReservedWords)=words;
}

//_____________________________________________________________________________
void AliDielectronHistos::StoreVariables(TObject *obj, UInt_t valType[20])
{
  //
  //
  //
  if (!obj) return;
  if      (obj->InheritsFrom(TH1::Class()))         StoreVariables(static_cast<TH1*>(obj), valType);
  else if (obj->InheritsFrom(THnBase::Class()))     StoreVariables(static_cast<THnBase*>(obj), valType);

  return;

}


//_____________________________________________________________________________
void AliDielectronHistos::StoreVariables(TH1 *obj, UInt_t valType[20])
{
  //
  // store variables in the axis (special for TProfile3D)
  //

  Int_t dim   = obj->GetDimension();

  // dimension correction for profiles
  if(obj->IsA() == TProfile::Class() || obj->IsA() == TProfile2D::Class() || obj->IsA() == TProfile3D::Class()) {
    dim++;
  }

  switch( dim ) {
  case 4:
    obj->SetUniqueID(valType[3]); // Tprofile3D variable
  case 3:
    obj->GetZaxis()->SetUniqueID(valType[2]);
    obj->GetZaxis()->SetName(Form("%s", AliDielectronVarManager::GetValueName(valType[2])));
  case 2:
    obj->GetYaxis()->SetUniqueID(valType[1]);
    obj->GetYaxis()->SetName(Form("%s", AliDielectronVarManager::GetValueName(valType[1])));
  case 1:
    obj->GetXaxis()->SetUniqueID(valType[0]);
    obj->GetXaxis()->SetName(Form("%s", AliDielectronVarManager::GetValueName(valType[0])));
  }

  return;
}

//_____________________________________________________________________________
void AliDielectronHistos::StoreVariables(THnBase *obj, UInt_t valType[20])
{
  //
  // store variables in the axis
  //

  Int_t dim = obj->GetNdimensions();

  for(Int_t it=0; it<dim; it++) {
    obj->GetAxis(it)->SetUniqueID(valType[it]);
    obj->GetAxis(it)->SetName(Form("%s", AliDielectronVarManager::GetValueName(valType[it])));
    obj->GetAxis(it)->SetTitle(Form("%s %s", AliDielectronVarManager::GetValueLabel(valType[it]), AliDielectronVarManager::GetValueUnit(valType[it])));
  }
  obj->Sumw2();
  return;
}

//_____________________________________________________________________________
void AliDielectronHistos::FillValues(TObject *obj, const Double_t *values)
{
  //
  //
  //
  if (!obj) return;
  if      (obj->InheritsFrom(TH1::Class()))       FillValues(static_cast<TH1*>(obj), values);
  else if (obj->InheritsFrom(THnBase::Class()))   FillValues(static_cast<THnBase*>(obj), values);

  return;

}

//_____________________________________________________________________________
void AliDielectronHistos::FillValues(TH1 *obj, const Double_t *values)
{
  //
  // fill values for TH1 inherted classes
  //

  Int_t dim   = obj->GetDimension();
  Bool_t bprf = kFALSE;
  //  UInt_t nValues = (UInt_t) AliDielectronVarManager::kNMaxValues;

  UInt_t valueTypes=obj->GetUniqueID();
  if (valueTypes==(UInt_t)AliDielectronHistos::kNoAutoFill) return;
  Bool_t weight = (valueTypes!=kNoWeights);

  if(obj->IsA() == TProfile::Class() || obj->IsA() == TProfile2D::Class() || obj->IsA() == TProfile3D::Class())
    bprf=kTRUE;

  // TO BEAUTIFY: switch off manually weighting of profile3Ds
  if(obj->IsA() == TProfile3D::Class()) weight=kFALSE;

  UInt_t value1=obj->GetXaxis()->GetUniqueID();
  UInt_t value2=obj->GetYaxis()->GetUniqueID();
  UInt_t value3=obj->GetZaxis()->GetUniqueID();
  UInt_t value4=obj->GetUniqueID();            // get profile var stored in the unique ID

  // ask for inclusive trigger map variables
  if(value1!=AliDielectronVarManager::kTriggerInclONL && value1!=AliDielectronVarManager::kTriggerInclOFF &&
     value2!=AliDielectronVarManager::kTriggerInclONL && value2!=AliDielectronVarManager::kTriggerInclOFF &&
     value3!=AliDielectronVarManager::kTriggerInclONL && value3!=AliDielectronVarManager::kTriggerInclOFF &&
     value4!=AliDielectronVarManager::kTriggerInclONL && value4!=AliDielectronVarManager::kTriggerInclOFF ) {
    // no trigger map variable selected
    switch ( dim ) {
    case 1:
      if(!bprf && !weight)     obj->Fill(values[value1]);                 // histograms
      else if(!bprf && weight) obj->Fill(values[value1], values[value4]); // weighted histograms
      else if(bprf && !weight) ((TProfile*)obj)->Fill(values[value1],values[value2]);   // profiles
      else                     ((TProfile*)obj)->Fill(values[value1],values[value2], values[value4]); // weighted profiles
      break;
    case 2:
      if(!bprf && !weight)     obj->Fill(values[value1], values[value2]);                 // histograms
      else if(!bprf && weight) ((TH2*)obj)->Fill(values[value1], values[value2], values[value4]); // weighted histograms
      else if(bprf && !weight) ((TProfile2D*)obj)->Fill(values[value1], values[value2], values[value3]); // profiles
      else                     ((TProfile2D*)obj)->Fill(values[value1], values[value2], values[value3], values[value4]); // weighted profiles
      break;
    case 3:
      if(!bprf && !weight)     ((TH3*)obj)->Fill(values[value1], values[value2], values[value3]);                 // histograms
      else if(!bprf && weight) ((TH3*)obj)->Fill(values[value1], values[value2], values[value3], values[value4]); // weighted histograms
      else if(bprf && !weight) ((TProfile3D*)obj)->Fill(values[value1], values[value2], values[value3], values[value4]); // profiles
      else                     printf(" WARNING: weighting NOT yet possible for TProfile3Ds ! \n");
      break;
    }
  }
  else {
    // fill inclusive trigger map variables
    if(weight) return;
    switch ( dim ) {
    case 1:
      for(Int_t i=0; i<30; i++) { if(TESTBIT((UInt_t)values[value1],i)) obj->Fill(i); }
      break;
    case 2:
      if((value1==AliDielectronVarManager::kTriggerInclOFF && value2==AliDielectronVarManager::kTriggerInclONL) ||
	 (value1==AliDielectronVarManager::kTriggerInclONL && value2==AliDielectronVarManager::kTriggerInclOFF) ) {
	for(Int_t i=0; i<30; i++) {
	  if((UInt_t)values[value1]==BIT(i)) {
	    for(Int_t i2=0; i2<30; i2++) {
	      if((UInt_t)values[value2]==BIT(i2)) {
		obj->Fill(i, i2);
	      } // bit fired
	    } //loop 2
	  }//bit fired
	} // loop 1
      }
      else if(value1==AliDielectronVarManager::kTriggerInclONL || value1==AliDielectronVarManager::kTriggerInclOFF) {
	for(Int_t i=0; i<30; i++) { if(TESTBIT((UInt_t)values[value1],i)) obj->Fill(i, values[value2]); }
      }
      else if(value2==AliDielectronVarManager::kTriggerInclONL || value2==AliDielectronVarManager::kTriggerInclOFF) {
	for(Int_t i=0; i<30; i++) { if(TESTBIT((UInt_t)values[value2],i)) obj->Fill(values[value1], i); }
      }
      else //makes no sense
	return;
      break;
    default: return;
    }

  } //end: trigger filling


  return;
}

//_____________________________________________________________________________
void AliDielectronHistos::FillValues(THnBase *obj, const Double_t *values)
{
  //
  // fill values for THn inherted classes
  //

  const Int_t dim   = obj->GetNdimensions();

  UInt_t valueTypes=obj->GetUniqueID();
  if (valueTypes==(UInt_t)AliDielectronHistos::kNoAutoFill) return;
  Bool_t weight = (valueTypes!=kNoWeights);

  UInt_t value4=obj->GetUniqueID();            // weight variable

  Double_t fill[dim];
  for(Int_t it=0; it<dim; it++)   fill[it] = values[obj->GetAxis(it)->GetUniqueID()];
  if(!weight) obj->Fill(fill);
  else obj->Fill(fill, values[value4]);


  return;
}

//_____________________________________________________________________________
void AliDielectronHistos::FillVarArray(TObject *obj, UInt_t *valType)
{
  //
  // extract variables stored in the axis (special for TProfile3D)
  //


  if (!obj) return;
  //  printf(" fillvararray %s \n",obj->GetName());

  if (obj->InheritsFrom(TH1::Class())) {
    valType[0]=((TH1*)obj)->GetXaxis()->GetUniqueID();
    valType[1]=((TH1*)obj)->GetYaxis()->GetUniqueID();
    valType[2]=((TH1*)obj)->GetZaxis()->GetUniqueID();
    valType[3]=((TH1*)obj)->GetUniqueID();  // tprofile var stored in unique ID
  }
  else if (obj->InheritsFrom(THnBase::Class())) {
    for(Int_t it=0; it<((THn*)obj)->GetNdimensions(); it++)
      valType[it]=((THn*)obj)->GetAxis(it)->GetUniqueID();
  }
  valType[19]=obj->GetUniqueID(); //weights
  return;
}

//_____________________________________________________________________________
void AliDielectronHistos::AdaptNameTitle(TH1 *hist, const char* histClass) {

  //
  // adapt name and title of the histogram
  //

  Int_t dim            = hist->GetDimension();
  TString currentName  = hist->GetName();
  TString currentTitle = hist->GetTitle();


  Bool_t bname  = (currentName.IsNull());
  Bool_t btitle = (currentTitle.IsNull());
  Bool_t bprf   = kFALSE;
  if(hist->IsA() == TProfile::Class() || hist->IsA() == TProfile2D::Class() || hist->IsA() == TProfile3D::Class())
    bprf=kTRUE;

  // tprofile options
  Double_t pmin=0., pmax=0.;
  TString option = "", calcrange="";
  Bool_t bStdOpt=kTRUE;
  if(bprf) {
    switch( dim ) {
    case 3:
      option = ((TProfile3D*)hist)->GetErrorOption();
      pmin   = ((TProfile3D*)hist)->GetTmin();
      pmax   = ((TProfile3D*)hist)->GetTmax();
      break;
    case 2:
      option = ((TProfile2D*)hist)->GetErrorOption();
      pmin   = ((TProfile2D*)hist)->GetZmin();
      pmax   = ((TProfile2D*)hist)->GetZmax();
      break;
    case 1:
      option = ((TProfile*)hist)->GetErrorOption();
      pmin   = ((TProfile*)hist)->GetYmin();
      pmax   = ((TProfile*)hist)->GetYmax();
      break;
    }
    if(option.Contains("s",TString::kIgnoreCase)) bStdOpt=kFALSE;
    if(pmin!=pmax) calcrange=Form("#cbar_{%+.*f}^{%+.*f}",GetPrecision(pmin),pmin,GetPrecision(pmax),pmax);
  }

  UInt_t varx = hist->GetXaxis()->GetUniqueID();
  UInt_t vary = hist->GetYaxis()->GetUniqueID();
  UInt_t varz = hist->GetZaxis()->GetUniqueID();
  UInt_t varp = hist->GetUniqueID();
  Bool_t weight = (varp!=kNoWeights);
  if(bprf && dim==3) weight=kFALSE; // no weighting for profile3D

  // store titles in the axis
  if(btitle) {
    switch( dim ) {
    case 3:
      hist->GetXaxis()->SetNameTitle(AliDielectronVarManager::GetValueName(varx),
				     Form("%s %s",
				      AliDielectronVarManager::GetValueLabel(varx),
				      AliDielectronVarManager::GetValueUnit(varx))
				 );
      hist->GetYaxis()->SetNameTitle(AliDielectronVarManager::GetValueName(vary),
				     Form("%s %s",
				      AliDielectronVarManager::GetValueLabel(vary),
				      AliDielectronVarManager::GetValueUnit(vary))
				 );
      hist->GetZaxis()->SetNameTitle(AliDielectronVarManager::GetValueName(varz),
				     Form("%s %s",
				      AliDielectronVarManager::GetValueLabel(varz),
				      AliDielectronVarManager::GetValueUnit(varz))
				 );
      if(bprf)
	hist->SetNameTitle(AliDielectronVarManager::GetValueName(varp),
			   Form("%s  %s%s%s%s %s",
			    hist->GetTitle(),
			    (bStdOpt ? "#LT" : "RMS("),
			    AliDielectronVarManager::GetValueLabel(varp),
			    (bStdOpt ? "#GT" : ")"),
			    calcrange.Data(),
			    AliDielectronVarManager::GetValueUnit(varp))
		       );
      break;
    case 2:
      hist->GetXaxis()->SetNameTitle(AliDielectronVarManager::GetValueName(varx),
				     Form("%s %s",
				      AliDielectronVarManager::GetValueLabel(varx),
				      AliDielectronVarManager::GetValueUnit(varx))
				 );
      hist->GetYaxis()->SetNameTitle(AliDielectronVarManager::GetValueName(vary),
				     Form("%s %s",
				      AliDielectronVarManager::GetValueLabel(vary),
				      AliDielectronVarManager::GetValueUnit(vary))
				 );
      hist->GetZaxis()->SetTitle(Form("#%ss",histClass));
      if(bprf)
	hist->GetZaxis()->SetNameTitle(AliDielectronVarManager::GetValueName(varz),
				       Form("%s%s%s%s %s",
					(bStdOpt ? "#LT" : "RMS("),
					AliDielectronVarManager::GetValueLabel(varz),
					(bStdOpt ? "#GT" : ")"),
					calcrange.Data(),
					AliDielectronVarManager::GetValueUnit(varz))
				   );
      if(weight) hist->GetZaxis()->SetTitle(Form("%s weighted %s",
						 AliDielectronVarManager::GetValueLabel(varp),
						 hist->GetZaxis()->GetTitle() )
					    );

      break;
    case 1:
      hist->GetXaxis()->SetNameTitle(AliDielectronVarManager::GetValueName(varx),
				     Form("%s %s",
				      AliDielectronVarManager::GetValueLabel(varx),
				      AliDielectronVarManager::GetValueUnit(varx))
				 );
      hist->GetYaxis()->SetTitle(Form("#%ss",histClass));
      if(bprf)
	hist->GetYaxis()->SetNameTitle(AliDielectronVarManager::GetValueName(vary),
				       Form("%s%s%s%s %s",
					(bStdOpt ? "#LT" : "RMS("),
					AliDielectronVarManager::GetValueLabel(vary), 
					(bStdOpt ? "#GT" : ")"),
					calcrange.Data(),
					AliDielectronVarManager::GetValueUnit(vary))
				   );
      if(weight) hist->GetYaxis()->SetTitle(Form("%s weighted %s",
						 AliDielectronVarManager::GetValueLabel(varp),
						 hist->GetYaxis()->GetTitle() )
					    );

      break;
    }

    // create an unique name
    if(bname)
      switch(dim) {
      case 3:
	currentName+=Form("%s_",AliDielectronVarManager::GetValueName(varx));
	currentName+=Form("%s_",AliDielectronVarManager::GetValueName(vary));
	currentName+=Form("%s",AliDielectronVarManager::GetValueName(varz));
	if(bprf)   currentName+=Form("-%s%s",AliDielectronVarManager::GetValueName(varp),(bStdOpt ? "avg" : "rms"));
	if(weight&&!bprf) currentName+=Form("-wght%s",AliDielectronVarManager::GetValueName(varp));
	break;
      case 2:
	currentName+=Form("%s_",AliDielectronVarManager::GetValueName(varx));
	currentName+=Form("%s",AliDielectronVarManager::GetValueName(vary));
	if(bprf)   currentName+=Form("-%s%s",AliDielectronVarManager::GetValueName(varz),(bStdOpt ? "avg" : "rms"));
	if(weight) currentName+=Form("-wght%s",AliDielectronVarManager::GetValueName(varp));
	break;
      case 1:
	currentName+=Form("%s",AliDielectronVarManager::GetValueName(varx));
	if(bprf)   currentName+=Form("-%s%s",AliDielectronVarManager::GetValueName(vary),(bStdOpt ? "avg" : "rms"));
	if(weight) currentName+=Form("-wght%s",AliDielectronVarManager::GetValueName(varp));
	break;
      }
    // to differentiate btw. leg and pair histos
    if(!strcmp(histClass,"Pair")) currentName.Prepend("p");
    hist->SetName(currentName.Data());
  }

}

Int_t AliDielectronHistos::GetPrecision(Double_t value) {

  //
  // computes the precision of a double
  // usefull for axis ranges etc
  //

  Bool_t bfnd     = kFALSE;
  Int_t precision = 0;
  value*=1e6;
  while(!bfnd) {
    //    printf(" value %f precision %d bfnd %d \n",TMath::Abs(value*TMath::Power(10,precision)), precision, bfnd);
    bfnd = ((TMath::Abs(value*TMath::Power(10,precision))/1e6  -  TMath::Floor(TMath::Abs(value*TMath::Power(10,precision))/1e6)) != 0.0
	    ? kFALSE
	    : kTRUE);
    if(!bfnd) precision++;
  }

  //  printf("precision for %f found to be %d \n", value, precision);
  return precision;

}



 AliDielectronHistos.cxx:1
 AliDielectronHistos.cxx:2
 AliDielectronHistos.cxx:3
 AliDielectronHistos.cxx:4
 AliDielectronHistos.cxx:5
 AliDielectronHistos.cxx:6
 AliDielectronHistos.cxx:7
 AliDielectronHistos.cxx:8
 AliDielectronHistos.cxx:9
 AliDielectronHistos.cxx:10
 AliDielectronHistos.cxx:11
 AliDielectronHistos.cxx:12
 AliDielectronHistos.cxx:13
 AliDielectronHistos.cxx:14
 AliDielectronHistos.cxx:15
 AliDielectronHistos.cxx:16
 AliDielectronHistos.cxx:17
 AliDielectronHistos.cxx:18
 AliDielectronHistos.cxx:19
 AliDielectronHistos.cxx:20
 AliDielectronHistos.cxx:21
 AliDielectronHistos.cxx:22
 AliDielectronHistos.cxx:23
 AliDielectronHistos.cxx:24
 AliDielectronHistos.cxx:25
 AliDielectronHistos.cxx:26
 AliDielectronHistos.cxx:27
 AliDielectronHistos.cxx:28
 AliDielectronHistos.cxx:29
 AliDielectronHistos.cxx:30
 AliDielectronHistos.cxx:31
 AliDielectronHistos.cxx:32
 AliDielectronHistos.cxx:33
 AliDielectronHistos.cxx:34
 AliDielectronHistos.cxx:35
 AliDielectronHistos.cxx:36
 AliDielectronHistos.cxx:37
 AliDielectronHistos.cxx:38
 AliDielectronHistos.cxx:39
 AliDielectronHistos.cxx:40
 AliDielectronHistos.cxx:41
 AliDielectronHistos.cxx:42
 AliDielectronHistos.cxx:43
 AliDielectronHistos.cxx:44
 AliDielectronHistos.cxx:45
 AliDielectronHistos.cxx:46
 AliDielectronHistos.cxx:47
 AliDielectronHistos.cxx:48
 AliDielectronHistos.cxx:49
 AliDielectronHistos.cxx:50
 AliDielectronHistos.cxx:51
 AliDielectronHistos.cxx:52
 AliDielectronHistos.cxx:53
 AliDielectronHistos.cxx:54
 AliDielectronHistos.cxx:55
 AliDielectronHistos.cxx:56
 AliDielectronHistos.cxx:57
 AliDielectronHistos.cxx:58
 AliDielectronHistos.cxx:59
 AliDielectronHistos.cxx:60
 AliDielectronHistos.cxx:61
 AliDielectronHistos.cxx:62
 AliDielectronHistos.cxx:63
 AliDielectronHistos.cxx:64
 AliDielectronHistos.cxx:65
 AliDielectronHistos.cxx:66
 AliDielectronHistos.cxx:67
 AliDielectronHistos.cxx:68
 AliDielectronHistos.cxx:69
 AliDielectronHistos.cxx:70
 AliDielectronHistos.cxx:71
 AliDielectronHistos.cxx:72
 AliDielectronHistos.cxx:73
 AliDielectronHistos.cxx:74
 AliDielectronHistos.cxx:75
 AliDielectronHistos.cxx:76
 AliDielectronHistos.cxx:77
 AliDielectronHistos.cxx:78
 AliDielectronHistos.cxx:79
 AliDielectronHistos.cxx:80
 AliDielectronHistos.cxx:81
 AliDielectronHistos.cxx:82
 AliDielectronHistos.cxx:83
 AliDielectronHistos.cxx:84
 AliDielectronHistos.cxx:85
 AliDielectronHistos.cxx:86
 AliDielectronHistos.cxx:87
 AliDielectronHistos.cxx:88
 AliDielectronHistos.cxx:89
 AliDielectronHistos.cxx:90
 AliDielectronHistos.cxx:91
 AliDielectronHistos.cxx:92
 AliDielectronHistos.cxx:93
 AliDielectronHistos.cxx:94
 AliDielectronHistos.cxx:95
 AliDielectronHistos.cxx:96
 AliDielectronHistos.cxx:97
 AliDielectronHistos.cxx:98
 AliDielectronHistos.cxx:99
 AliDielectronHistos.cxx:100
 AliDielectronHistos.cxx:101
 AliDielectronHistos.cxx:102
 AliDielectronHistos.cxx:103
 AliDielectronHistos.cxx:104
 AliDielectronHistos.cxx:105
 AliDielectronHistos.cxx:106
 AliDielectronHistos.cxx:107
 AliDielectronHistos.cxx:108
 AliDielectronHistos.cxx:109
 AliDielectronHistos.cxx:110
 AliDielectronHistos.cxx:111
 AliDielectronHistos.cxx:112
 AliDielectronHistos.cxx:113
 AliDielectronHistos.cxx:114
 AliDielectronHistos.cxx:115
 AliDielectronHistos.cxx:116
 AliDielectronHistos.cxx:117
 AliDielectronHistos.cxx:118
 AliDielectronHistos.cxx:119
 AliDielectronHistos.cxx:120
 AliDielectronHistos.cxx:121
 AliDielectronHistos.cxx:122
 AliDielectronHistos.cxx:123
 AliDielectronHistos.cxx:124
 AliDielectronHistos.cxx:125
 AliDielectronHistos.cxx:126
 AliDielectronHistos.cxx:127
 AliDielectronHistos.cxx:128
 AliDielectronHistos.cxx:129
 AliDielectronHistos.cxx:130
 AliDielectronHistos.cxx:131
 AliDielectronHistos.cxx:132
 AliDielectronHistos.cxx:133
 AliDielectronHistos.cxx:134
 AliDielectronHistos.cxx:135
 AliDielectronHistos.cxx:136
 AliDielectronHistos.cxx:137
 AliDielectronHistos.cxx:138
 AliDielectronHistos.cxx:139
 AliDielectronHistos.cxx:140
 AliDielectronHistos.cxx:141
 AliDielectronHistos.cxx:142
 AliDielectronHistos.cxx:143
 AliDielectronHistos.cxx:144
 AliDielectronHistos.cxx:145
 AliDielectronHistos.cxx:146
 AliDielectronHistos.cxx:147
 AliDielectronHistos.cxx:148
 AliDielectronHistos.cxx:149
 AliDielectronHistos.cxx:150
 AliDielectronHistos.cxx:151
 AliDielectronHistos.cxx:152
 AliDielectronHistos.cxx:153
 AliDielectronHistos.cxx:154
 AliDielectronHistos.cxx:155
 AliDielectronHistos.cxx:156
 AliDielectronHistos.cxx:157
 AliDielectronHistos.cxx:158
 AliDielectronHistos.cxx:159
 AliDielectronHistos.cxx:160
 AliDielectronHistos.cxx:161
 AliDielectronHistos.cxx:162
 AliDielectronHistos.cxx:163
 AliDielectronHistos.cxx:164
 AliDielectronHistos.cxx:165
 AliDielectronHistos.cxx:166
 AliDielectronHistos.cxx:167
 AliDielectronHistos.cxx:168
 AliDielectronHistos.cxx:169
 AliDielectronHistos.cxx:170
 AliDielectronHistos.cxx:171
 AliDielectronHistos.cxx:172
 AliDielectronHistos.cxx:173
 AliDielectronHistos.cxx:174
 AliDielectronHistos.cxx:175
 AliDielectronHistos.cxx:176
 AliDielectronHistos.cxx:177
 AliDielectronHistos.cxx:178
 AliDielectronHistos.cxx:179
 AliDielectronHistos.cxx:180
 AliDielectronHistos.cxx:181
 AliDielectronHistos.cxx:182
 AliDielectronHistos.cxx:183
 AliDielectronHistos.cxx:184
 AliDielectronHistos.cxx:185
 AliDielectronHistos.cxx:186
 AliDielectronHistos.cxx:187
 AliDielectronHistos.cxx:188
 AliDielectronHistos.cxx:189
 AliDielectronHistos.cxx:190
 AliDielectronHistos.cxx:191
 AliDielectronHistos.cxx:192
 AliDielectronHistos.cxx:193
 AliDielectronHistos.cxx:194
 AliDielectronHistos.cxx:195
 AliDielectronHistos.cxx:196
 AliDielectronHistos.cxx:197
 AliDielectronHistos.cxx:198
 AliDielectronHistos.cxx:199
 AliDielectronHistos.cxx:200
 AliDielectronHistos.cxx:201
 AliDielectronHistos.cxx:202
 AliDielectronHistos.cxx:203
 AliDielectronHistos.cxx:204
 AliDielectronHistos.cxx:205
 AliDielectronHistos.cxx:206
 AliDielectronHistos.cxx:207
 AliDielectronHistos.cxx:208
 AliDielectronHistos.cxx:209
 AliDielectronHistos.cxx:210
 AliDielectronHistos.cxx:211
 AliDielectronHistos.cxx:212
 AliDielectronHistos.cxx:213
 AliDielectronHistos.cxx:214
 AliDielectronHistos.cxx:215
 AliDielectronHistos.cxx:216
 AliDielectronHistos.cxx:217
 AliDielectronHistos.cxx:218
 AliDielectronHistos.cxx:219
 AliDielectronHistos.cxx:220
 AliDielectronHistos.cxx:221
 AliDielectronHistos.cxx:222
 AliDielectronHistos.cxx:223
 AliDielectronHistos.cxx:224
 AliDielectronHistos.cxx:225
 AliDielectronHistos.cxx:226
 AliDielectronHistos.cxx:227
 AliDielectronHistos.cxx:228
 AliDielectronHistos.cxx:229
 AliDielectronHistos.cxx:230
 AliDielectronHistos.cxx:231
 AliDielectronHistos.cxx:232
 AliDielectronHistos.cxx:233
 AliDielectronHistos.cxx:234
 AliDielectronHistos.cxx:235
 AliDielectronHistos.cxx:236
 AliDielectronHistos.cxx:237
 AliDielectronHistos.cxx:238
 AliDielectronHistos.cxx:239
 AliDielectronHistos.cxx:240
 AliDielectronHistos.cxx:241
 AliDielectronHistos.cxx:242
 AliDielectronHistos.cxx:243
 AliDielectronHistos.cxx:244
 AliDielectronHistos.cxx:245
 AliDielectronHistos.cxx:246
 AliDielectronHistos.cxx:247
 AliDielectronHistos.cxx:248
 AliDielectronHistos.cxx:249
 AliDielectronHistos.cxx:250
 AliDielectronHistos.cxx:251
 AliDielectronHistos.cxx:252
 AliDielectronHistos.cxx:253
 AliDielectronHistos.cxx:254
 AliDielectronHistos.cxx:255
 AliDielectronHistos.cxx:256
 AliDielectronHistos.cxx:257
 AliDielectronHistos.cxx:258
 AliDielectronHistos.cxx:259
 AliDielectronHistos.cxx:260
 AliDielectronHistos.cxx:261
 AliDielectronHistos.cxx:262
 AliDielectronHistos.cxx:263
 AliDielectronHistos.cxx:264
 AliDielectronHistos.cxx:265
 AliDielectronHistos.cxx:266
 AliDielectronHistos.cxx:267
 AliDielectronHistos.cxx:268
 AliDielectronHistos.cxx:269
 AliDielectronHistos.cxx:270
 AliDielectronHistos.cxx:271
 AliDielectronHistos.cxx:272
 AliDielectronHistos.cxx:273
 AliDielectronHistos.cxx:274
 AliDielectronHistos.cxx:275
 AliDielectronHistos.cxx:276
 AliDielectronHistos.cxx:277
 AliDielectronHistos.cxx:278
 AliDielectronHistos.cxx:279
 AliDielectronHistos.cxx:280
 AliDielectronHistos.cxx:281
 AliDielectronHistos.cxx:282
 AliDielectronHistos.cxx:283
 AliDielectronHistos.cxx:284
 AliDielectronHistos.cxx:285
 AliDielectronHistos.cxx:286
 AliDielectronHistos.cxx:287
 AliDielectronHistos.cxx:288
 AliDielectronHistos.cxx:289
 AliDielectronHistos.cxx:290
 AliDielectronHistos.cxx:291
 AliDielectronHistos.cxx:292
 AliDielectronHistos.cxx:293
 AliDielectronHistos.cxx:294
 AliDielectronHistos.cxx:295
 AliDielectronHistos.cxx:296
 AliDielectronHistos.cxx:297
 AliDielectronHistos.cxx:298
 AliDielectronHistos.cxx:299
 AliDielectronHistos.cxx:300
 AliDielectronHistos.cxx:301
 AliDielectronHistos.cxx:302
 AliDielectronHistos.cxx:303
 AliDielectronHistos.cxx:304
 AliDielectronHistos.cxx:305
 AliDielectronHistos.cxx:306
 AliDielectronHistos.cxx:307
 AliDielectronHistos.cxx:308
 AliDielectronHistos.cxx:309
 AliDielectronHistos.cxx:310
 AliDielectronHistos.cxx:311
 AliDielectronHistos.cxx:312
 AliDielectronHistos.cxx:313
 AliDielectronHistos.cxx:314
 AliDielectronHistos.cxx:315
 AliDielectronHistos.cxx:316
 AliDielectronHistos.cxx:317
 AliDielectronHistos.cxx:318
 AliDielectronHistos.cxx:319
 AliDielectronHistos.cxx:320
 AliDielectronHistos.cxx:321
 AliDielectronHistos.cxx:322
 AliDielectronHistos.cxx:323
 AliDielectronHistos.cxx:324
 AliDielectronHistos.cxx:325
 AliDielectronHistos.cxx:326
 AliDielectronHistos.cxx:327
 AliDielectronHistos.cxx:328
 AliDielectronHistos.cxx:329
 AliDielectronHistos.cxx:330
 AliDielectronHistos.cxx:331
 AliDielectronHistos.cxx:332
 AliDielectronHistos.cxx:333
 AliDielectronHistos.cxx:334
 AliDielectronHistos.cxx:335
 AliDielectronHistos.cxx:336
 AliDielectronHistos.cxx:337
 AliDielectronHistos.cxx:338
 AliDielectronHistos.cxx:339
 AliDielectronHistos.cxx:340
 AliDielectronHistos.cxx:341
 AliDielectronHistos.cxx:342
 AliDielectronHistos.cxx:343
 AliDielectronHistos.cxx:344
 AliDielectronHistos.cxx:345
 AliDielectronHistos.cxx:346
 AliDielectronHistos.cxx:347
 AliDielectronHistos.cxx:348
 AliDielectronHistos.cxx:349
 AliDielectronHistos.cxx:350
 AliDielectronHistos.cxx:351
 AliDielectronHistos.cxx:352
 AliDielectronHistos.cxx:353
 AliDielectronHistos.cxx:354
 AliDielectronHistos.cxx:355
 AliDielectronHistos.cxx:356
 AliDielectronHistos.cxx:357
 AliDielectronHistos.cxx:358
 AliDielectronHistos.cxx:359
 AliDielectronHistos.cxx:360
 AliDielectronHistos.cxx:361
 AliDielectronHistos.cxx:362
 AliDielectronHistos.cxx:363
 AliDielectronHistos.cxx:364
 AliDielectronHistos.cxx:365
 AliDielectronHistos.cxx:366
 AliDielectronHistos.cxx:367
 AliDielectronHistos.cxx:368
 AliDielectronHistos.cxx:369
 AliDielectronHistos.cxx:370
 AliDielectronHistos.cxx:371
 AliDielectronHistos.cxx:372
 AliDielectronHistos.cxx:373
 AliDielectronHistos.cxx:374
 AliDielectronHistos.cxx:375
 AliDielectronHistos.cxx:376
 AliDielectronHistos.cxx:377
 AliDielectronHistos.cxx:378
 AliDielectronHistos.cxx:379
 AliDielectronHistos.cxx:380
 AliDielectronHistos.cxx:381
 AliDielectronHistos.cxx:382
 AliDielectronHistos.cxx:383
 AliDielectronHistos.cxx:384
 AliDielectronHistos.cxx:385
 AliDielectronHistos.cxx:386
 AliDielectronHistos.cxx:387
 AliDielectronHistos.cxx:388
 AliDielectronHistos.cxx:389
 AliDielectronHistos.cxx:390
 AliDielectronHistos.cxx:391
 AliDielectronHistos.cxx:392
 AliDielectronHistos.cxx:393
 AliDielectronHistos.cxx:394
 AliDielectronHistos.cxx:395
 AliDielectronHistos.cxx:396
 AliDielectronHistos.cxx:397
 AliDielectronHistos.cxx:398
 AliDielectronHistos.cxx:399
 AliDielectronHistos.cxx:400
 AliDielectronHistos.cxx:401
 AliDielectronHistos.cxx:402
 AliDielectronHistos.cxx:403
 AliDielectronHistos.cxx:404
 AliDielectronHistos.cxx:405
 AliDielectronHistos.cxx:406
 AliDielectronHistos.cxx:407
 AliDielectronHistos.cxx:408
 AliDielectronHistos.cxx:409
 AliDielectronHistos.cxx:410
 AliDielectronHistos.cxx:411
 AliDielectronHistos.cxx:412
 AliDielectronHistos.cxx:413
 AliDielectronHistos.cxx:414
 AliDielectronHistos.cxx:415
 AliDielectronHistos.cxx:416
 AliDielectronHistos.cxx:417
 AliDielectronHistos.cxx:418
 AliDielectronHistos.cxx:419
 AliDielectronHistos.cxx:420
 AliDielectronHistos.cxx:421
 AliDielectronHistos.cxx:422
 AliDielectronHistos.cxx:423
 AliDielectronHistos.cxx:424
 AliDielectronHistos.cxx:425
 AliDielectronHistos.cxx:426
 AliDielectronHistos.cxx:427
 AliDielectronHistos.cxx:428
 AliDielectronHistos.cxx:429
 AliDielectronHistos.cxx:430
 AliDielectronHistos.cxx:431
 AliDielectronHistos.cxx:432
 AliDielectronHistos.cxx:433
 AliDielectronHistos.cxx:434
 AliDielectronHistos.cxx:435
 AliDielectronHistos.cxx:436
 AliDielectronHistos.cxx:437
 AliDielectronHistos.cxx:438
 AliDielectronHistos.cxx:439
 AliDielectronHistos.cxx:440
 AliDielectronHistos.cxx:441
 AliDielectronHistos.cxx:442
 AliDielectronHistos.cxx:443
 AliDielectronHistos.cxx:444
 AliDielectronHistos.cxx:445
 AliDielectronHistos.cxx:446
 AliDielectronHistos.cxx:447
 AliDielectronHistos.cxx:448
 AliDielectronHistos.cxx:449
 AliDielectronHistos.cxx:450
 AliDielectronHistos.cxx:451
 AliDielectronHistos.cxx:452
 AliDielectronHistos.cxx:453
 AliDielectronHistos.cxx:454
 AliDielectronHistos.cxx:455
 AliDielectronHistos.cxx:456
 AliDielectronHistos.cxx:457
 AliDielectronHistos.cxx:458
 AliDielectronHistos.cxx:459
 AliDielectronHistos.cxx:460
 AliDielectronHistos.cxx:461
 AliDielectronHistos.cxx:462
 AliDielectronHistos.cxx:463
 AliDielectronHistos.cxx:464
 AliDielectronHistos.cxx:465
 AliDielectronHistos.cxx:466
 AliDielectronHistos.cxx:467
 AliDielectronHistos.cxx:468
 AliDielectronHistos.cxx:469
 AliDielectronHistos.cxx:470
 AliDielectronHistos.cxx:471
 AliDielectronHistos.cxx:472
 AliDielectronHistos.cxx:473
 AliDielectronHistos.cxx:474
 AliDielectronHistos.cxx:475
 AliDielectronHistos.cxx:476
 AliDielectronHistos.cxx:477
 AliDielectronHistos.cxx:478
 AliDielectronHistos.cxx:479
 AliDielectronHistos.cxx:480
 AliDielectronHistos.cxx:481
 AliDielectronHistos.cxx:482
 AliDielectronHistos.cxx:483
 AliDielectronHistos.cxx:484
 AliDielectronHistos.cxx:485
 AliDielectronHistos.cxx:486
 AliDielectronHistos.cxx:487
 AliDielectronHistos.cxx:488
 AliDielectronHistos.cxx:489
 AliDielectronHistos.cxx:490
 AliDielectronHistos.cxx:491
 AliDielectronHistos.cxx:492
 AliDielectronHistos.cxx:493
 AliDielectronHistos.cxx:494
 AliDielectronHistos.cxx:495
 AliDielectronHistos.cxx:496
 AliDielectronHistos.cxx:497
 AliDielectronHistos.cxx:498
 AliDielectronHistos.cxx:499
 AliDielectronHistos.cxx:500
 AliDielectronHistos.cxx:501
 AliDielectronHistos.cxx:502
 AliDielectronHistos.cxx:503
 AliDielectronHistos.cxx:504
 AliDielectronHistos.cxx:505
 AliDielectronHistos.cxx:506
 AliDielectronHistos.cxx:507
 AliDielectronHistos.cxx:508
 AliDielectronHistos.cxx:509
 AliDielectronHistos.cxx:510
 AliDielectronHistos.cxx:511
 AliDielectronHistos.cxx:512
 AliDielectronHistos.cxx:513
 AliDielectronHistos.cxx:514
 AliDielectronHistos.cxx:515
 AliDielectronHistos.cxx:516
 AliDielectronHistos.cxx:517
 AliDielectronHistos.cxx:518
 AliDielectronHistos.cxx:519
 AliDielectronHistos.cxx:520
 AliDielectronHistos.cxx:521
 AliDielectronHistos.cxx:522
 AliDielectronHistos.cxx:523
 AliDielectronHistos.cxx:524
 AliDielectronHistos.cxx:525
 AliDielectronHistos.cxx:526
 AliDielectronHistos.cxx:527
 AliDielectronHistos.cxx:528
 AliDielectronHistos.cxx:529
 AliDielectronHistos.cxx:530
 AliDielectronHistos.cxx:531
 AliDielectronHistos.cxx:532
 AliDielectronHistos.cxx:533
 AliDielectronHistos.cxx:534
 AliDielectronHistos.cxx:535
 AliDielectronHistos.cxx:536
 AliDielectronHistos.cxx:537
 AliDielectronHistos.cxx:538
 AliDielectronHistos.cxx:539
 AliDielectronHistos.cxx:540
 AliDielectronHistos.cxx:541
 AliDielectronHistos.cxx:542
 AliDielectronHistos.cxx:543
 AliDielectronHistos.cxx:544
 AliDielectronHistos.cxx:545
 AliDielectronHistos.cxx:546
 AliDielectronHistos.cxx:547
 AliDielectronHistos.cxx:548
 AliDielectronHistos.cxx:549
 AliDielectronHistos.cxx:550
 AliDielectronHistos.cxx:551
 AliDielectronHistos.cxx:552
 AliDielectronHistos.cxx:553
 AliDielectronHistos.cxx:554
 AliDielectronHistos.cxx:555
 AliDielectronHistos.cxx:556
 AliDielectronHistos.cxx:557
 AliDielectronHistos.cxx:558
 AliDielectronHistos.cxx:559
 AliDielectronHistos.cxx:560
 AliDielectronHistos.cxx:561
 AliDielectronHistos.cxx:562
 AliDielectronHistos.cxx:563
 AliDielectronHistos.cxx:564
 AliDielectronHistos.cxx:565
 AliDielectronHistos.cxx:566
 AliDielectronHistos.cxx:567
 AliDielectronHistos.cxx:568
 AliDielectronHistos.cxx:569
 AliDielectronHistos.cxx:570
 AliDielectronHistos.cxx:571
 AliDielectronHistos.cxx:572
 AliDielectronHistos.cxx:573
 AliDielectronHistos.cxx:574
 AliDielectronHistos.cxx:575
 AliDielectronHistos.cxx:576
 AliDielectronHistos.cxx:577
 AliDielectronHistos.cxx:578
 AliDielectronHistos.cxx:579
 AliDielectronHistos.cxx:580
 AliDielectronHistos.cxx:581
 AliDielectronHistos.cxx:582
 AliDielectronHistos.cxx:583
 AliDielectronHistos.cxx:584
 AliDielectronHistos.cxx:585
 AliDielectronHistos.cxx:586
 AliDielectronHistos.cxx:587
 AliDielectronHistos.cxx:588
 AliDielectronHistos.cxx:589
 AliDielectronHistos.cxx:590
 AliDielectronHistos.cxx:591
 AliDielectronHistos.cxx:592
 AliDielectronHistos.cxx:593
 AliDielectronHistos.cxx:594
 AliDielectronHistos.cxx:595
 AliDielectronHistos.cxx:596
 AliDielectronHistos.cxx:597
 AliDielectronHistos.cxx:598
 AliDielectronHistos.cxx:599
 AliDielectronHistos.cxx:600
 AliDielectronHistos.cxx:601
 AliDielectronHistos.cxx:602
 AliDielectronHistos.cxx:603
 AliDielectronHistos.cxx:604
 AliDielectronHistos.cxx:605
 AliDielectronHistos.cxx:606
 AliDielectronHistos.cxx:607
 AliDielectronHistos.cxx:608
 AliDielectronHistos.cxx:609
 AliDielectronHistos.cxx:610
 AliDielectronHistos.cxx:611
 AliDielectronHistos.cxx:612
 AliDielectronHistos.cxx:613
 AliDielectronHistos.cxx:614
 AliDielectronHistos.cxx:615
 AliDielectronHistos.cxx:616
 AliDielectronHistos.cxx:617
 AliDielectronHistos.cxx:618
 AliDielectronHistos.cxx:619
 AliDielectronHistos.cxx:620
 AliDielectronHistos.cxx:621
 AliDielectronHistos.cxx:622
 AliDielectronHistos.cxx:623
 AliDielectronHistos.cxx:624
 AliDielectronHistos.cxx:625
 AliDielectronHistos.cxx:626
 AliDielectronHistos.cxx:627
 AliDielectronHistos.cxx:628
 AliDielectronHistos.cxx:629
 AliDielectronHistos.cxx:630
 AliDielectronHistos.cxx:631
 AliDielectronHistos.cxx:632
 AliDielectronHistos.cxx:633
 AliDielectronHistos.cxx:634
 AliDielectronHistos.cxx:635
 AliDielectronHistos.cxx:636
 AliDielectronHistos.cxx:637
 AliDielectronHistos.cxx:638
 AliDielectronHistos.cxx:639
 AliDielectronHistos.cxx:640
 AliDielectronHistos.cxx:641
 AliDielectronHistos.cxx:642
 AliDielectronHistos.cxx:643
 AliDielectronHistos.cxx:644
 AliDielectronHistos.cxx:645
 AliDielectronHistos.cxx:646
 AliDielectronHistos.cxx:647
 AliDielectronHistos.cxx:648
 AliDielectronHistos.cxx:649
 AliDielectronHistos.cxx:650
 AliDielectronHistos.cxx:651
 AliDielectronHistos.cxx:652
 AliDielectronHistos.cxx:653
 AliDielectronHistos.cxx:654
 AliDielectronHistos.cxx:655
 AliDielectronHistos.cxx:656
 AliDielectronHistos.cxx:657
 AliDielectronHistos.cxx:658
 AliDielectronHistos.cxx:659
 AliDielectronHistos.cxx:660
 AliDielectronHistos.cxx:661
 AliDielectronHistos.cxx:662
 AliDielectronHistos.cxx:663
 AliDielectronHistos.cxx:664
 AliDielectronHistos.cxx:665
 AliDielectronHistos.cxx:666
 AliDielectronHistos.cxx:667
 AliDielectronHistos.cxx:668
 AliDielectronHistos.cxx:669
 AliDielectronHistos.cxx:670
 AliDielectronHistos.cxx:671
 AliDielectronHistos.cxx:672
 AliDielectronHistos.cxx:673
 AliDielectronHistos.cxx:674
 AliDielectronHistos.cxx:675
 AliDielectronHistos.cxx:676
 AliDielectronHistos.cxx:677
 AliDielectronHistos.cxx:678
 AliDielectronHistos.cxx:679
 AliDielectronHistos.cxx:680
 AliDielectronHistos.cxx:681
 AliDielectronHistos.cxx:682
 AliDielectronHistos.cxx:683
 AliDielectronHistos.cxx:684
 AliDielectronHistos.cxx:685
 AliDielectronHistos.cxx:686
 AliDielectronHistos.cxx:687
 AliDielectronHistos.cxx:688
 AliDielectronHistos.cxx:689
 AliDielectronHistos.cxx:690
 AliDielectronHistos.cxx:691
 AliDielectronHistos.cxx:692
 AliDielectronHistos.cxx:693
 AliDielectronHistos.cxx:694
 AliDielectronHistos.cxx:695
 AliDielectronHistos.cxx:696
 AliDielectronHistos.cxx:697
 AliDielectronHistos.cxx:698
 AliDielectronHistos.cxx:699
 AliDielectronHistos.cxx:700
 AliDielectronHistos.cxx:701
 AliDielectronHistos.cxx:702
 AliDielectronHistos.cxx:703
 AliDielectronHistos.cxx:704
 AliDielectronHistos.cxx:705
 AliDielectronHistos.cxx:706
 AliDielectronHistos.cxx:707
 AliDielectronHistos.cxx:708
 AliDielectronHistos.cxx:709
 AliDielectronHistos.cxx:710
 AliDielectronHistos.cxx:711
 AliDielectronHistos.cxx:712
 AliDielectronHistos.cxx:713
 AliDielectronHistos.cxx:714
 AliDielectronHistos.cxx:715
 AliDielectronHistos.cxx:716
 AliDielectronHistos.cxx:717
 AliDielectronHistos.cxx:718
 AliDielectronHistos.cxx:719
 AliDielectronHistos.cxx:720
 AliDielectronHistos.cxx:721
 AliDielectronHistos.cxx:722
 AliDielectronHistos.cxx:723
 AliDielectronHistos.cxx:724
 AliDielectronHistos.cxx:725
 AliDielectronHistos.cxx:726
 AliDielectronHistos.cxx:727
 AliDielectronHistos.cxx:728
 AliDielectronHistos.cxx:729
 AliDielectronHistos.cxx:730
 AliDielectronHistos.cxx:731
 AliDielectronHistos.cxx:732
 AliDielectronHistos.cxx:733
 AliDielectronHistos.cxx:734
 AliDielectronHistos.cxx:735
 AliDielectronHistos.cxx:736
 AliDielectronHistos.cxx:737
 AliDielectronHistos.cxx:738
 AliDielectronHistos.cxx:739
 AliDielectronHistos.cxx:740
 AliDielectronHistos.cxx:741
 AliDielectronHistos.cxx:742
 AliDielectronHistos.cxx:743
 AliDielectronHistos.cxx:744
 AliDielectronHistos.cxx:745
 AliDielectronHistos.cxx:746
 AliDielectronHistos.cxx:747
 AliDielectronHistos.cxx:748
 AliDielectronHistos.cxx:749
 AliDielectronHistos.cxx:750
 AliDielectronHistos.cxx:751
 AliDielectronHistos.cxx:752
 AliDielectronHistos.cxx:753
 AliDielectronHistos.cxx:754
 AliDielectronHistos.cxx:755
 AliDielectronHistos.cxx:756
 AliDielectronHistos.cxx:757
 AliDielectronHistos.cxx:758
 AliDielectronHistos.cxx:759
 AliDielectronHistos.cxx:760
 AliDielectronHistos.cxx:761
 AliDielectronHistos.cxx:762
 AliDielectronHistos.cxx:763
 AliDielectronHistos.cxx:764
 AliDielectronHistos.cxx:765
 AliDielectronHistos.cxx:766
 AliDielectronHistos.cxx:767
 AliDielectronHistos.cxx:768
 AliDielectronHistos.cxx:769
 AliDielectronHistos.cxx:770
 AliDielectronHistos.cxx:771
 AliDielectronHistos.cxx:772
 AliDielectronHistos.cxx:773
 AliDielectronHistos.cxx:774
 AliDielectronHistos.cxx:775
 AliDielectronHistos.cxx:776
 AliDielectronHistos.cxx:777
 AliDielectronHistos.cxx:778
 AliDielectronHistos.cxx:779
 AliDielectronHistos.cxx:780
 AliDielectronHistos.cxx:781
 AliDielectronHistos.cxx:782
 AliDielectronHistos.cxx:783
 AliDielectronHistos.cxx:784
 AliDielectronHistos.cxx:785
 AliDielectronHistos.cxx:786
 AliDielectronHistos.cxx:787
 AliDielectronHistos.cxx:788
 AliDielectronHistos.cxx:789
 AliDielectronHistos.cxx:790
 AliDielectronHistos.cxx:791
 AliDielectronHistos.cxx:792
 AliDielectronHistos.cxx:793
 AliDielectronHistos.cxx:794
 AliDielectronHistos.cxx:795
 AliDielectronHistos.cxx:796
 AliDielectronHistos.cxx:797
 AliDielectronHistos.cxx:798
 AliDielectronHistos.cxx:799
 AliDielectronHistos.cxx:800
 AliDielectronHistos.cxx:801
 AliDielectronHistos.cxx:802
 AliDielectronHistos.cxx:803
 AliDielectronHistos.cxx:804
 AliDielectronHistos.cxx:805
 AliDielectronHistos.cxx:806
 AliDielectronHistos.cxx:807
 AliDielectronHistos.cxx:808
 AliDielectronHistos.cxx:809
 AliDielectronHistos.cxx:810
 AliDielectronHistos.cxx:811
 AliDielectronHistos.cxx:812
 AliDielectronHistos.cxx:813
 AliDielectronHistos.cxx:814
 AliDielectronHistos.cxx:815
 AliDielectronHistos.cxx:816
 AliDielectronHistos.cxx:817
 AliDielectronHistos.cxx:818
 AliDielectronHistos.cxx:819
 AliDielectronHistos.cxx:820
 AliDielectronHistos.cxx:821
 AliDielectronHistos.cxx:822
 AliDielectronHistos.cxx:823
 AliDielectronHistos.cxx:824
 AliDielectronHistos.cxx:825
 AliDielectronHistos.cxx:826
 AliDielectronHistos.cxx:827
 AliDielectronHistos.cxx:828
 AliDielectronHistos.cxx:829
 AliDielectronHistos.cxx:830
 AliDielectronHistos.cxx:831
 AliDielectronHistos.cxx:832
 AliDielectronHistos.cxx:833
 AliDielectronHistos.cxx:834
 AliDielectronHistos.cxx:835
 AliDielectronHistos.cxx:836
 AliDielectronHistos.cxx:837
 AliDielectronHistos.cxx:838
 AliDielectronHistos.cxx:839
 AliDielectronHistos.cxx:840
 AliDielectronHistos.cxx:841
 AliDielectronHistos.cxx:842
 AliDielectronHistos.cxx:843
 AliDielectronHistos.cxx:844
 AliDielectronHistos.cxx:845
 AliDielectronHistos.cxx:846
 AliDielectronHistos.cxx:847
 AliDielectronHistos.cxx:848
 AliDielectronHistos.cxx:849
 AliDielectronHistos.cxx:850
 AliDielectronHistos.cxx:851
 AliDielectronHistos.cxx:852
 AliDielectronHistos.cxx:853
 AliDielectronHistos.cxx:854
 AliDielectronHistos.cxx:855
 AliDielectronHistos.cxx:856
 AliDielectronHistos.cxx:857
 AliDielectronHistos.cxx:858
 AliDielectronHistos.cxx:859
 AliDielectronHistos.cxx:860
 AliDielectronHistos.cxx:861
 AliDielectronHistos.cxx:862
 AliDielectronHistos.cxx:863
 AliDielectronHistos.cxx:864
 AliDielectronHistos.cxx:865
 AliDielectronHistos.cxx:866
 AliDielectronHistos.cxx:867
 AliDielectronHistos.cxx:868
 AliDielectronHistos.cxx:869
 AliDielectronHistos.cxx:870
 AliDielectronHistos.cxx:871
 AliDielectronHistos.cxx:872
 AliDielectronHistos.cxx:873
 AliDielectronHistos.cxx:874
 AliDielectronHistos.cxx:875
 AliDielectronHistos.cxx:876
 AliDielectronHistos.cxx:877
 AliDielectronHistos.cxx:878
 AliDielectronHistos.cxx:879
 AliDielectronHistos.cxx:880
 AliDielectronHistos.cxx:881
 AliDielectronHistos.cxx:882
 AliDielectronHistos.cxx:883
 AliDielectronHistos.cxx:884
 AliDielectronHistos.cxx:885
 AliDielectronHistos.cxx:886
 AliDielectronHistos.cxx:887
 AliDielectronHistos.cxx:888
 AliDielectronHistos.cxx:889
 AliDielectronHistos.cxx:890
 AliDielectronHistos.cxx:891
 AliDielectronHistos.cxx:892
 AliDielectronHistos.cxx:893
 AliDielectronHistos.cxx:894
 AliDielectronHistos.cxx:895
 AliDielectronHistos.cxx:896
 AliDielectronHistos.cxx:897
 AliDielectronHistos.cxx:898
 AliDielectronHistos.cxx:899
 AliDielectronHistos.cxx:900
 AliDielectronHistos.cxx:901
 AliDielectronHistos.cxx:902
 AliDielectronHistos.cxx:903
 AliDielectronHistos.cxx:904
 AliDielectronHistos.cxx:905
 AliDielectronHistos.cxx:906
 AliDielectronHistos.cxx:907
 AliDielectronHistos.cxx:908
 AliDielectronHistos.cxx:909
 AliDielectronHistos.cxx:910
 AliDielectronHistos.cxx:911
 AliDielectronHistos.cxx:912
 AliDielectronHistos.cxx:913
 AliDielectronHistos.cxx:914
 AliDielectronHistos.cxx:915
 AliDielectronHistos.cxx:916
 AliDielectronHistos.cxx:917
 AliDielectronHistos.cxx:918
 AliDielectronHistos.cxx:919
 AliDielectronHistos.cxx:920
 AliDielectronHistos.cxx:921
 AliDielectronHistos.cxx:922
 AliDielectronHistos.cxx:923
 AliDielectronHistos.cxx:924
 AliDielectronHistos.cxx:925
 AliDielectronHistos.cxx:926
 AliDielectronHistos.cxx:927
 AliDielectronHistos.cxx:928
 AliDielectronHistos.cxx:929
 AliDielectronHistos.cxx:930
 AliDielectronHistos.cxx:931
 AliDielectronHistos.cxx:932
 AliDielectronHistos.cxx:933
 AliDielectronHistos.cxx:934
 AliDielectronHistos.cxx:935
 AliDielectronHistos.cxx:936
 AliDielectronHistos.cxx:937
 AliDielectronHistos.cxx:938
 AliDielectronHistos.cxx:939
 AliDielectronHistos.cxx:940
 AliDielectronHistos.cxx:941
 AliDielectronHistos.cxx:942
 AliDielectronHistos.cxx:943
 AliDielectronHistos.cxx:944
 AliDielectronHistos.cxx:945
 AliDielectronHistos.cxx:946
 AliDielectronHistos.cxx:947
 AliDielectronHistos.cxx:948
 AliDielectronHistos.cxx:949
 AliDielectronHistos.cxx:950
 AliDielectronHistos.cxx:951
 AliDielectronHistos.cxx:952
 AliDielectronHistos.cxx:953
 AliDielectronHistos.cxx:954
 AliDielectronHistos.cxx:955
 AliDielectronHistos.cxx:956
 AliDielectronHistos.cxx:957
 AliDielectronHistos.cxx:958
 AliDielectronHistos.cxx:959
 AliDielectronHistos.cxx:960
 AliDielectronHistos.cxx:961
 AliDielectronHistos.cxx:962
 AliDielectronHistos.cxx:963
 AliDielectronHistos.cxx:964
 AliDielectronHistos.cxx:965
 AliDielectronHistos.cxx:966
 AliDielectronHistos.cxx:967
 AliDielectronHistos.cxx:968
 AliDielectronHistos.cxx:969
 AliDielectronHistos.cxx:970
 AliDielectronHistos.cxx:971
 AliDielectronHistos.cxx:972
 AliDielectronHistos.cxx:973
 AliDielectronHistos.cxx:974
 AliDielectronHistos.cxx:975
 AliDielectronHistos.cxx:976
 AliDielectronHistos.cxx:977
 AliDielectronHistos.cxx:978
 AliDielectronHistos.cxx:979
 AliDielectronHistos.cxx:980
 AliDielectronHistos.cxx:981
 AliDielectronHistos.cxx:982
 AliDielectronHistos.cxx:983
 AliDielectronHistos.cxx:984
 AliDielectronHistos.cxx:985
 AliDielectronHistos.cxx:986
 AliDielectronHistos.cxx:987
 AliDielectronHistos.cxx:988
 AliDielectronHistos.cxx:989
 AliDielectronHistos.cxx:990
 AliDielectronHistos.cxx:991
 AliDielectronHistos.cxx:992
 AliDielectronHistos.cxx:993
 AliDielectronHistos.cxx:994
 AliDielectronHistos.cxx:995
 AliDielectronHistos.cxx:996
 AliDielectronHistos.cxx:997
 AliDielectronHistos.cxx:998
 AliDielectronHistos.cxx:999
 AliDielectronHistos.cxx:1000
 AliDielectronHistos.cxx:1001
 AliDielectronHistos.cxx:1002
 AliDielectronHistos.cxx:1003
 AliDielectronHistos.cxx:1004
 AliDielectronHistos.cxx:1005
 AliDielectronHistos.cxx:1006
 AliDielectronHistos.cxx:1007
 AliDielectronHistos.cxx:1008
 AliDielectronHistos.cxx:1009
 AliDielectronHistos.cxx:1010
 AliDielectronHistos.cxx:1011
 AliDielectronHistos.cxx:1012
 AliDielectronHistos.cxx:1013
 AliDielectronHistos.cxx:1014
 AliDielectronHistos.cxx:1015
 AliDielectronHistos.cxx:1016
 AliDielectronHistos.cxx:1017
 AliDielectronHistos.cxx:1018
 AliDielectronHistos.cxx:1019
 AliDielectronHistos.cxx:1020
 AliDielectronHistos.cxx:1021
 AliDielectronHistos.cxx:1022
 AliDielectronHistos.cxx:1023
 AliDielectronHistos.cxx:1024
 AliDielectronHistos.cxx:1025
 AliDielectronHistos.cxx:1026
 AliDielectronHistos.cxx:1027
 AliDielectronHistos.cxx:1028
 AliDielectronHistos.cxx:1029
 AliDielectronHistos.cxx:1030
 AliDielectronHistos.cxx:1031
 AliDielectronHistos.cxx:1032
 AliDielectronHistos.cxx:1033
 AliDielectronHistos.cxx:1034
 AliDielectronHistos.cxx:1035
 AliDielectronHistos.cxx:1036
 AliDielectronHistos.cxx:1037
 AliDielectronHistos.cxx:1038
 AliDielectronHistos.cxx:1039
 AliDielectronHistos.cxx:1040
 AliDielectronHistos.cxx:1041
 AliDielectronHistos.cxx:1042
 AliDielectronHistos.cxx:1043
 AliDielectronHistos.cxx:1044
 AliDielectronHistos.cxx:1045
 AliDielectronHistos.cxx:1046
 AliDielectronHistos.cxx:1047
 AliDielectronHistos.cxx:1048
 AliDielectronHistos.cxx:1049
 AliDielectronHistos.cxx:1050
 AliDielectronHistos.cxx:1051
 AliDielectronHistos.cxx:1052
 AliDielectronHistos.cxx:1053
 AliDielectronHistos.cxx:1054
 AliDielectronHistos.cxx:1055
 AliDielectronHistos.cxx:1056
 AliDielectronHistos.cxx:1057
 AliDielectronHistos.cxx:1058
 AliDielectronHistos.cxx:1059
 AliDielectronHistos.cxx:1060
 AliDielectronHistos.cxx:1061
 AliDielectronHistos.cxx:1062
 AliDielectronHistos.cxx:1063
 AliDielectronHistos.cxx:1064
 AliDielectronHistos.cxx:1065
 AliDielectronHistos.cxx:1066
 AliDielectronHistos.cxx:1067
 AliDielectronHistos.cxx:1068
 AliDielectronHistos.cxx:1069
 AliDielectronHistos.cxx:1070
 AliDielectronHistos.cxx:1071
 AliDielectronHistos.cxx:1072
 AliDielectronHistos.cxx:1073
 AliDielectronHistos.cxx:1074
 AliDielectronHistos.cxx:1075
 AliDielectronHistos.cxx:1076
 AliDielectronHistos.cxx:1077
 AliDielectronHistos.cxx:1078
 AliDielectronHistos.cxx:1079
 AliDielectronHistos.cxx:1080
 AliDielectronHistos.cxx:1081
 AliDielectronHistos.cxx:1082
 AliDielectronHistos.cxx:1083
 AliDielectronHistos.cxx:1084
 AliDielectronHistos.cxx:1085
 AliDielectronHistos.cxx:1086
 AliDielectronHistos.cxx:1087
 AliDielectronHistos.cxx:1088
 AliDielectronHistos.cxx:1089
 AliDielectronHistos.cxx:1090
 AliDielectronHistos.cxx:1091
 AliDielectronHistos.cxx:1092
 AliDielectronHistos.cxx:1093
 AliDielectronHistos.cxx:1094
 AliDielectronHistos.cxx:1095
 AliDielectronHistos.cxx:1096
 AliDielectronHistos.cxx:1097
 AliDielectronHistos.cxx:1098
 AliDielectronHistos.cxx:1099
 AliDielectronHistos.cxx:1100
 AliDielectronHistos.cxx:1101
 AliDielectronHistos.cxx:1102
 AliDielectronHistos.cxx:1103
 AliDielectronHistos.cxx:1104
 AliDielectronHistos.cxx:1105
 AliDielectronHistos.cxx:1106
 AliDielectronHistos.cxx:1107
 AliDielectronHistos.cxx:1108
 AliDielectronHistos.cxx:1109
 AliDielectronHistos.cxx:1110
 AliDielectronHistos.cxx:1111
 AliDielectronHistos.cxx:1112
 AliDielectronHistos.cxx:1113
 AliDielectronHistos.cxx:1114
 AliDielectronHistos.cxx:1115
 AliDielectronHistos.cxx:1116
 AliDielectronHistos.cxx:1117
 AliDielectronHistos.cxx:1118
 AliDielectronHistos.cxx:1119
 AliDielectronHistos.cxx:1120
 AliDielectronHistos.cxx:1121
 AliDielectronHistos.cxx:1122
 AliDielectronHistos.cxx:1123
 AliDielectronHistos.cxx:1124
 AliDielectronHistos.cxx:1125
 AliDielectronHistos.cxx:1126
 AliDielectronHistos.cxx:1127
 AliDielectronHistos.cxx:1128
 AliDielectronHistos.cxx:1129
 AliDielectronHistos.cxx:1130
 AliDielectronHistos.cxx:1131
 AliDielectronHistos.cxx:1132
 AliDielectronHistos.cxx:1133
 AliDielectronHistos.cxx:1134
 AliDielectronHistos.cxx:1135
 AliDielectronHistos.cxx:1136
 AliDielectronHistos.cxx:1137
 AliDielectronHistos.cxx:1138
 AliDielectronHistos.cxx:1139
 AliDielectronHistos.cxx:1140
 AliDielectronHistos.cxx:1141
 AliDielectronHistos.cxx:1142
 AliDielectronHistos.cxx:1143
 AliDielectronHistos.cxx:1144
 AliDielectronHistos.cxx:1145
 AliDielectronHistos.cxx:1146
 AliDielectronHistos.cxx:1147
 AliDielectronHistos.cxx:1148
 AliDielectronHistos.cxx:1149
 AliDielectronHistos.cxx:1150
 AliDielectronHistos.cxx:1151
 AliDielectronHistos.cxx:1152
 AliDielectronHistos.cxx:1153
 AliDielectronHistos.cxx:1154
 AliDielectronHistos.cxx:1155
 AliDielectronHistos.cxx:1156
 AliDielectronHistos.cxx:1157
 AliDielectronHistos.cxx:1158
 AliDielectronHistos.cxx:1159
 AliDielectronHistos.cxx:1160
 AliDielectronHistos.cxx:1161
 AliDielectronHistos.cxx:1162
 AliDielectronHistos.cxx:1163
 AliDielectronHistos.cxx:1164
 AliDielectronHistos.cxx:1165
 AliDielectronHistos.cxx:1166
 AliDielectronHistos.cxx:1167
 AliDielectronHistos.cxx:1168
 AliDielectronHistos.cxx:1169
 AliDielectronHistos.cxx:1170
 AliDielectronHistos.cxx:1171
 AliDielectronHistos.cxx:1172
 AliDielectronHistos.cxx:1173
 AliDielectronHistos.cxx:1174
 AliDielectronHistos.cxx:1175
 AliDielectronHistos.cxx:1176
 AliDielectronHistos.cxx:1177
 AliDielectronHistos.cxx:1178
 AliDielectronHistos.cxx:1179
 AliDielectronHistos.cxx:1180
 AliDielectronHistos.cxx:1181
 AliDielectronHistos.cxx:1182
 AliDielectronHistos.cxx:1183
 AliDielectronHistos.cxx:1184
 AliDielectronHistos.cxx:1185
 AliDielectronHistos.cxx:1186
 AliDielectronHistos.cxx:1187
 AliDielectronHistos.cxx:1188
 AliDielectronHistos.cxx:1189
 AliDielectronHistos.cxx:1190
 AliDielectronHistos.cxx:1191
 AliDielectronHistos.cxx:1192
 AliDielectronHistos.cxx:1193
 AliDielectronHistos.cxx:1194
 AliDielectronHistos.cxx:1195
 AliDielectronHistos.cxx:1196
 AliDielectronHistos.cxx:1197
 AliDielectronHistos.cxx:1198
 AliDielectronHistos.cxx:1199
 AliDielectronHistos.cxx:1200
 AliDielectronHistos.cxx:1201
 AliDielectronHistos.cxx:1202
 AliDielectronHistos.cxx:1203
 AliDielectronHistos.cxx:1204
 AliDielectronHistos.cxx:1205
 AliDielectronHistos.cxx:1206
 AliDielectronHistos.cxx:1207
 AliDielectronHistos.cxx:1208
 AliDielectronHistos.cxx:1209
 AliDielectronHistos.cxx:1210
 AliDielectronHistos.cxx:1211
 AliDielectronHistos.cxx:1212
 AliDielectronHistos.cxx:1213
 AliDielectronHistos.cxx:1214
 AliDielectronHistos.cxx:1215
 AliDielectronHistos.cxx:1216
 AliDielectronHistos.cxx:1217
 AliDielectronHistos.cxx:1218
 AliDielectronHistos.cxx:1219
 AliDielectronHistos.cxx:1220
 AliDielectronHistos.cxx:1221
 AliDielectronHistos.cxx:1222
 AliDielectronHistos.cxx:1223
 AliDielectronHistos.cxx:1224
 AliDielectronHistos.cxx:1225
 AliDielectronHistos.cxx:1226
 AliDielectronHistos.cxx:1227
 AliDielectronHistos.cxx:1228
 AliDielectronHistos.cxx:1229
 AliDielectronHistos.cxx:1230
 AliDielectronHistos.cxx:1231
 AliDielectronHistos.cxx:1232
 AliDielectronHistos.cxx:1233
 AliDielectronHistos.cxx:1234
 AliDielectronHistos.cxx:1235
 AliDielectronHistos.cxx:1236
 AliDielectronHistos.cxx:1237
 AliDielectronHistos.cxx:1238
 AliDielectronHistos.cxx:1239
 AliDielectronHistos.cxx:1240
 AliDielectronHistos.cxx:1241
 AliDielectronHistos.cxx:1242
 AliDielectronHistos.cxx:1243
 AliDielectronHistos.cxx:1244
 AliDielectronHistos.cxx:1245
 AliDielectronHistos.cxx:1246
 AliDielectronHistos.cxx:1247
 AliDielectronHistos.cxx:1248
 AliDielectronHistos.cxx:1249
 AliDielectronHistos.cxx:1250
 AliDielectronHistos.cxx:1251
 AliDielectronHistos.cxx:1252
 AliDielectronHistos.cxx:1253
 AliDielectronHistos.cxx:1254
 AliDielectronHistos.cxx:1255
 AliDielectronHistos.cxx:1256
 AliDielectronHistos.cxx:1257
 AliDielectronHistos.cxx:1258
 AliDielectronHistos.cxx:1259
 AliDielectronHistos.cxx:1260
 AliDielectronHistos.cxx:1261
 AliDielectronHistos.cxx:1262
 AliDielectronHistos.cxx:1263
 AliDielectronHistos.cxx:1264
 AliDielectronHistos.cxx:1265
 AliDielectronHistos.cxx:1266
 AliDielectronHistos.cxx:1267
 AliDielectronHistos.cxx:1268
 AliDielectronHistos.cxx:1269
 AliDielectronHistos.cxx:1270
 AliDielectronHistos.cxx:1271
 AliDielectronHistos.cxx:1272
 AliDielectronHistos.cxx:1273
 AliDielectronHistos.cxx:1274
 AliDielectronHistos.cxx:1275
 AliDielectronHistos.cxx:1276
 AliDielectronHistos.cxx:1277
 AliDielectronHistos.cxx:1278
 AliDielectronHistos.cxx:1279
 AliDielectronHistos.cxx:1280
 AliDielectronHistos.cxx:1281
 AliDielectronHistos.cxx:1282
 AliDielectronHistos.cxx:1283
 AliDielectronHistos.cxx:1284
 AliDielectronHistos.cxx:1285
 AliDielectronHistos.cxx:1286
 AliDielectronHistos.cxx:1287
 AliDielectronHistos.cxx:1288
 AliDielectronHistos.cxx:1289
 AliDielectronHistos.cxx:1290
 AliDielectronHistos.cxx:1291
 AliDielectronHistos.cxx:1292
 AliDielectronHistos.cxx:1293
 AliDielectronHistos.cxx:1294
 AliDielectronHistos.cxx:1295
 AliDielectronHistos.cxx:1296
 AliDielectronHistos.cxx:1297
 AliDielectronHistos.cxx:1298
 AliDielectronHistos.cxx:1299
 AliDielectronHistos.cxx:1300
 AliDielectronHistos.cxx:1301
 AliDielectronHistos.cxx:1302
 AliDielectronHistos.cxx:1303
 AliDielectronHistos.cxx:1304
 AliDielectronHistos.cxx:1305
 AliDielectronHistos.cxx:1306
 AliDielectronHistos.cxx:1307
 AliDielectronHistos.cxx:1308
 AliDielectronHistos.cxx:1309
 AliDielectronHistos.cxx:1310
 AliDielectronHistos.cxx:1311
 AliDielectronHistos.cxx:1312
 AliDielectronHistos.cxx:1313
 AliDielectronHistos.cxx:1314
 AliDielectronHistos.cxx:1315
 AliDielectronHistos.cxx:1316
 AliDielectronHistos.cxx:1317
 AliDielectronHistos.cxx:1318
 AliDielectronHistos.cxx:1319
 AliDielectronHistos.cxx:1320
 AliDielectronHistos.cxx:1321
 AliDielectronHistos.cxx:1322
 AliDielectronHistos.cxx:1323
 AliDielectronHistos.cxx:1324
 AliDielectronHistos.cxx:1325
 AliDielectronHistos.cxx:1326
 AliDielectronHistos.cxx:1327
 AliDielectronHistos.cxx:1328
 AliDielectronHistos.cxx:1329
 AliDielectronHistos.cxx:1330
 AliDielectronHistos.cxx:1331
 AliDielectronHistos.cxx:1332
 AliDielectronHistos.cxx:1333
 AliDielectronHistos.cxx:1334
 AliDielectronHistos.cxx:1335
 AliDielectronHistos.cxx:1336
 AliDielectronHistos.cxx:1337
 AliDielectronHistos.cxx:1338
 AliDielectronHistos.cxx:1339
 AliDielectronHistos.cxx:1340
 AliDielectronHistos.cxx:1341
 AliDielectronHistos.cxx:1342
 AliDielectronHistos.cxx:1343
 AliDielectronHistos.cxx:1344
 AliDielectronHistos.cxx:1345
 AliDielectronHistos.cxx:1346
 AliDielectronHistos.cxx:1347
 AliDielectronHistos.cxx:1348
 AliDielectronHistos.cxx:1349
 AliDielectronHistos.cxx:1350
 AliDielectronHistos.cxx:1351
 AliDielectronHistos.cxx:1352
 AliDielectronHistos.cxx:1353
 AliDielectronHistos.cxx:1354
 AliDielectronHistos.cxx:1355
 AliDielectronHistos.cxx:1356
 AliDielectronHistos.cxx:1357
 AliDielectronHistos.cxx:1358
 AliDielectronHistos.cxx:1359
 AliDielectronHistos.cxx:1360
 AliDielectronHistos.cxx:1361
 AliDielectronHistos.cxx:1362
 AliDielectronHistos.cxx:1363
 AliDielectronHistos.cxx:1364
 AliDielectronHistos.cxx:1365
 AliDielectronHistos.cxx:1366
 AliDielectronHistos.cxx:1367
 AliDielectronHistos.cxx:1368
 AliDielectronHistos.cxx:1369
 AliDielectronHistos.cxx:1370
 AliDielectronHistos.cxx:1371
 AliDielectronHistos.cxx:1372
 AliDielectronHistos.cxx:1373
 AliDielectronHistos.cxx:1374
 AliDielectronHistos.cxx:1375
 AliDielectronHistos.cxx:1376
 AliDielectronHistos.cxx:1377
 AliDielectronHistos.cxx:1378
 AliDielectronHistos.cxx:1379
 AliDielectronHistos.cxx:1380
 AliDielectronHistos.cxx:1381
 AliDielectronHistos.cxx:1382
 AliDielectronHistos.cxx:1383
 AliDielectronHistos.cxx:1384
 AliDielectronHistos.cxx:1385
 AliDielectronHistos.cxx:1386
 AliDielectronHistos.cxx:1387
 AliDielectronHistos.cxx:1388
 AliDielectronHistos.cxx:1389
 AliDielectronHistos.cxx:1390
 AliDielectronHistos.cxx:1391
 AliDielectronHistos.cxx:1392
 AliDielectronHistos.cxx:1393
 AliDielectronHistos.cxx:1394
 AliDielectronHistos.cxx:1395
 AliDielectronHistos.cxx:1396
 AliDielectronHistos.cxx:1397
 AliDielectronHistos.cxx:1398
 AliDielectronHistos.cxx:1399
 AliDielectronHistos.cxx:1400
 AliDielectronHistos.cxx:1401
 AliDielectronHistos.cxx:1402
 AliDielectronHistos.cxx:1403
 AliDielectronHistos.cxx:1404
 AliDielectronHistos.cxx:1405
 AliDielectronHistos.cxx:1406
 AliDielectronHistos.cxx:1407
 AliDielectronHistos.cxx:1408
 AliDielectronHistos.cxx:1409
 AliDielectronHistos.cxx:1410
 AliDielectronHistos.cxx:1411
 AliDielectronHistos.cxx:1412
 AliDielectronHistos.cxx:1413
 AliDielectronHistos.cxx:1414
 AliDielectronHistos.cxx:1415
 AliDielectronHistos.cxx:1416
 AliDielectronHistos.cxx:1417
 AliDielectronHistos.cxx:1418
 AliDielectronHistos.cxx:1419
 AliDielectronHistos.cxx:1420
 AliDielectronHistos.cxx:1421
 AliDielectronHistos.cxx:1422
 AliDielectronHistos.cxx:1423
 AliDielectronHistos.cxx:1424
 AliDielectronHistos.cxx:1425
 AliDielectronHistos.cxx:1426
 AliDielectronHistos.cxx:1427
 AliDielectronHistos.cxx:1428
 AliDielectronHistos.cxx:1429
 AliDielectronHistos.cxx:1430
 AliDielectronHistos.cxx:1431
 AliDielectronHistos.cxx:1432
 AliDielectronHistos.cxx:1433
 AliDielectronHistos.cxx:1434
 AliDielectronHistos.cxx:1435
 AliDielectronHistos.cxx:1436
 AliDielectronHistos.cxx:1437
 AliDielectronHistos.cxx:1438
 AliDielectronHistos.cxx:1439
 AliDielectronHistos.cxx:1440
 AliDielectronHistos.cxx:1441
 AliDielectronHistos.cxx:1442
 AliDielectronHistos.cxx:1443
 AliDielectronHistos.cxx:1444
 AliDielectronHistos.cxx:1445
 AliDielectronHistos.cxx:1446
 AliDielectronHistos.cxx:1447
 AliDielectronHistos.cxx:1448
 AliDielectronHistos.cxx:1449
 AliDielectronHistos.cxx:1450
 AliDielectronHistos.cxx:1451
 AliDielectronHistos.cxx:1452
 AliDielectronHistos.cxx:1453
 AliDielectronHistos.cxx:1454
 AliDielectronHistos.cxx:1455
 AliDielectronHistos.cxx:1456
 AliDielectronHistos.cxx:1457
 AliDielectronHistos.cxx:1458
 AliDielectronHistos.cxx:1459
 AliDielectronHistos.cxx:1460
 AliDielectronHistos.cxx:1461
 AliDielectronHistos.cxx:1462
 AliDielectronHistos.cxx:1463
 AliDielectronHistos.cxx:1464
 AliDielectronHistos.cxx:1465
 AliDielectronHistos.cxx:1466
 AliDielectronHistos.cxx:1467
 AliDielectronHistos.cxx:1468
 AliDielectronHistos.cxx:1469
 AliDielectronHistos.cxx:1470
 AliDielectronHistos.cxx:1471
 AliDielectronHistos.cxx:1472
 AliDielectronHistos.cxx:1473
 AliDielectronHistos.cxx:1474
 AliDielectronHistos.cxx:1475
 AliDielectronHistos.cxx:1476
 AliDielectronHistos.cxx:1477
 AliDielectronHistos.cxx:1478
 AliDielectronHistos.cxx:1479
 AliDielectronHistos.cxx:1480
 AliDielectronHistos.cxx:1481
 AliDielectronHistos.cxx:1482
 AliDielectronHistos.cxx:1483
 AliDielectronHistos.cxx:1484
 AliDielectronHistos.cxx:1485
 AliDielectronHistos.cxx:1486
 AliDielectronHistos.cxx:1487
 AliDielectronHistos.cxx:1488
 AliDielectronHistos.cxx:1489
 AliDielectronHistos.cxx:1490
 AliDielectronHistos.cxx:1491
 AliDielectronHistos.cxx:1492
 AliDielectronHistos.cxx:1493
 AliDielectronHistos.cxx:1494
 AliDielectronHistos.cxx:1495
 AliDielectronHistos.cxx:1496
 AliDielectronHistos.cxx:1497
 AliDielectronHistos.cxx:1498
 AliDielectronHistos.cxx:1499
 AliDielectronHistos.cxx:1500
 AliDielectronHistos.cxx:1501
 AliDielectronHistos.cxx:1502
 AliDielectronHistos.cxx:1503
 AliDielectronHistos.cxx:1504
 AliDielectronHistos.cxx:1505
 AliDielectronHistos.cxx:1506
 AliDielectronHistos.cxx:1507
 AliDielectronHistos.cxx:1508
 AliDielectronHistos.cxx:1509
 AliDielectronHistos.cxx:1510
 AliDielectronHistos.cxx:1511