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.                  *
**************************************************************************/

///////////////////////////////////////////////////////////////////////////
//                Dielectron HF                                  //
//                                                                       //
//                                                                       //
/*
Detailed description


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

#include <TVectorD.h>
#include <TH1.h>
#include <TH1F.h>
#include <TH2.h>
#include <TH3.h>
#include <TProfile.h>
#include <TProfile2D.h>
#include <TProfile3D.h>
#include <THnSparse.h>
#include <TAxis.h>
#include <TString.h>
#include <TObjString.h>
#include <TObjArray.h>

#include <AliVParticle.h>
#include <AliLog.h>

#include "AliDielectron.h"
#include "AliDielectronHelper.h"
#include "AliDielectronMC.h"
#include "AliDielectronPair.h"
#include "AliDielectronSignalMC.h"

#include "AliDielectronHistos.h"
#include "AliDielectronHF.h"

ClassImp(AliDielectronHF)

AliDielectronHF::AliDielectronHF() :
  TNamed(),
  fUsedVars(new TBits(AliDielectronVarManager::kNMaxValues)),
  fArrPairType(),
  fPairType(kSeOnlyOS),
  fSignalsMC(0x0),
  fVarCutType(new TBits(kMaxCuts)),
  fAxes(kMaxCuts),
  fHasMC(kFALSE),
  fStepGenerated(kFALSE),
  fEventArray(kFALSE),
  fRefObj(1)
{
  //
  // Default Constructor
  //
  for (Int_t i=0; i<kMaxCuts; ++i){
    fVarCuts[i]=0;
    //    fVarCutType[i]=0;
    fBinType[i]=kStdBin;
  }
  fAxes.SetOwner(kTRUE);
  fRefObj.SetOwner(kTRUE);
  fArrPairType.SetOwner(kTRUE);
}

//______________________________________________
AliDielectronHF::AliDielectronHF(const char* name, const char* title) :
  TNamed(name, title),
  fUsedVars(new TBits(AliDielectronVarManager::kNMaxValues)),
  fArrPairType(),
  fPairType(kSeOnlyOS),
  fSignalsMC(0x0),
  fVarCutType(new TBits(kMaxCuts)),
  fAxes(kMaxCuts),
  fHasMC(kFALSE),
  fStepGenerated(kFALSE),
  fEventArray(kFALSE),
  fRefObj(1)
{
  //
  // Named Constructor
  //
  for (Int_t i=0; i<kMaxCuts; ++i){
    fVarCuts[i]=0;
    //    fVarCutType[i]=0;
    fBinType[i]=kStdBin;
  }
  fAxes.SetOwner(kTRUE);
  fRefObj.SetOwner(kTRUE);
  fArrPairType.SetOwner(kTRUE);
}

//______________________________________________
AliDielectronHF::~AliDielectronHF()
{
  //
  // Default Destructor
  //
  if(fUsedVars)   delete fUsedVars;
  if(fVarCutType) delete fVarCutType;
  fAxes.Delete();
  fRefObj.Delete();
  fArrPairType.Delete();
}

//_____________________________________________________________________________
void AliDielectronHF::UserProfile(const char* histClass, UInt_t valTypeP,
				      const TVectorD * const binsX,
				      UInt_t valTypeX, 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!!!
  //

  TH1 *hist=0x0;
  if(valTypeP==AliDielectronHistos::kNoProfile)
    hist=new TH1F("","",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("","",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[4] = {0};
  valType[0]=valTypeX;     valType[1]=valTypeP;
  AliDielectronHistos::StoreVariables(hist, valType);
  hist->SetUniqueID(valTypeW); // store weighting variable

  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
  AliDielectronHistos::AdaptNameTitle(hist, histClass);
  hist->SetName(Form("HF_%s",hist->GetName()));

  fRefObj.AddLast(hist);
  delete binsX;
}

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

  TH1 *hist=0x0;
  if(valTypeP==AliDielectronHistos::kNoProfile) {
    hist=new TH2F("","",
		  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("","",
			binsX->GetNrows()-1,binsX->GetMatrixArray(),
			binsY->GetNrows()-1,binsY->GetMatrixArray());
    ((TProfile2D*)hist)->BuildOptions(pmin,pmax,opt.Data());
  }

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

  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
  AliDielectronHistos::AdaptNameTitle(hist, histClass);
  hist->SetName(Form("HF_%s",hist->GetName()));

  fRefObj.AddLast(hist);
  delete binsX;
  delete binsY;
}

//_____________________________________________________________________________
void AliDielectronHF::UserProfile(const char* histClass, UInt_t valTypeP,
				      const TVectorD * const binsX, const TVectorD * const binsY, const TVectorD * const binsZ,
				      UInt_t valTypeX, UInt_t valTypeY, UInt_t valTypeZ, TString option, UInt_t valTypeW)
{
  //
  // Histogram creation 3D case with arbitraty binning X, Y, Z
  // the TVectorD is assumed to be surplus after the creation and will be deleted!!!
  //
  TH1 *hist=0x0;
  if(valTypeP==AliDielectronHistos::kNoProfile) {
    hist=new TH3F("","",
		  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("","",
			binsX->GetNrows()-1,binsX->GetMatrixArray(),
			binsY->GetNrows()-1,binsY->GetMatrixArray(),
			binsZ->GetNrows()-1,binsZ->GetMatrixArray());
    ((TProfile3D*)hist)->BuildOptions(pmin,pmax,opt.Data());
  }

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

  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
  AliDielectronHistos::AdaptNameTitle(hist, histClass);
  hist->SetName(Form("HF_%s",hist->GetName()));

  fRefObj.AddLast(hist);
  delete binsX;
  delete binsY;
  delete binsZ;
}

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

  THnSparseF *hist=0;
  Int_t bins[ndim];
  // 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 THnSparseF("",histClass, 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
  AliDielectronHistos::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);

  // adapt the name and title of the histogram in case they are empty
  TString name;
  for(Int_t iv=0; iv < ndim; iv++) name+=Form("%s_",AliDielectronVarManager::GetValueName(vars[iv]));
  name.Resize(name.Length()-1);
  hist->SetName(Form("HF_%s",name.Data()));

  fRefObj.AddLast(hist);
  delete limits;
  
}

//________________________________________________________________
void AliDielectronHF::AddCutVariable(AliDielectronVarManager::ValueTypes type,
				     Int_t nbins, Double_t min, Double_t max, Bool_t log, Bool_t leg, EBinType btype)
{
  //
  // Add a variable to the mixing handler
  //

  // limit number of variables to kMaxCuts
  if (fAxes.GetEntriesFast()>=kMaxCuts) return;
  
  TVectorD *binLimits=0x0;
  if (!log) binLimits=AliDielectronHelper::MakeLinBinning(nbins,min,max);
  else binLimits=AliDielectronHelper::MakeLogBinning(nbins,min,max);
  if (!binLimits) return;

  Int_t size=fAxes.GetEntriesFast();
  fVarCuts[size]=(UShort_t)type;
  //  fVarCutType[size]=leg;
  fVarCutType->SetBitNumber(size,leg);
  fAxes.Add(binLimits->Clone());
  fBinType[size]=btype;
  fUsedVars->SetBitNumber(type,kTRUE);
}

//________________________________________________________________
void AliDielectronHF::AddCutVariable(AliDielectronVarManager::ValueTypes type,
                                             const char* binLimitStr, Bool_t leg, EBinType btype)
{
  //
  // Add a variable to the mixing handler with arbitrary binning
  //

  // limit number of variables to kMaxCuts
  if (fAxes.GetEntriesFast()>=kMaxCuts) return;
  
  TVectorD *binLimits=AliDielectronHelper::MakeArbitraryBinning(binLimitStr);
  if (!binLimits) return;
  
  Int_t size=fAxes.GetEntriesFast();
  fVarCuts[size]=(UShort_t)type;
  //  fVarCutType[size]=leg;
  fVarCutType->SetBitNumber(size,leg);
  fAxes.Add(binLimits);
  fBinType[size]=btype;
  fUsedVars->SetBitNumber(type,kTRUE);
}

//________________________________________________________________
void AliDielectronHF::AddCutVariable(AliDielectronVarManager::ValueTypes type,
                                             TVectorD * binLimits, Bool_t leg, EBinType btype)
{
  //
  // Add a variable to the mixing handler with a vector
  // the TVectorD is assumed to be surplus after the creation and will be deleted!!!
  //

  // limit number of variables to kMaxCuts
  if (fAxes.GetEntriesFast()>=kMaxCuts) return;
  
  if (!binLimits) return;
  
  Int_t size=fAxes.GetEntriesFast();
  fVarCuts[size]=(UShort_t)type;
  //  fVarCutType[size]=leg;
  fVarCutType->SetBitNumber(size,leg);
  fAxes.Add(binLimits);
  fBinType[size]=btype;
  fUsedVars->SetBitNumber(type,kTRUE);
}

//______________________________________________
void AliDielectronHF::Fill(Int_t label1, Int_t label2, Int_t nSignal) 
{
  //
  // fill the pure MC part of the container starting from a pair of 2 particles (part1 and part2 are legs)
  //
  // fill only if we have asked for these steps
  if(!fStepGenerated || fEventArray) return;

  AliVParticle* part1 = AliDielectronMC::Instance()->GetMCTrackFromMCEvent(label1);
  AliVParticle* part2 = AliDielectronMC::Instance()->GetMCTrackFromMCEvent(label2);
  if(!part1 || !part2) return;

  AliDielectronMC* dieMC = AliDielectronMC::Instance();
  
  Int_t mLabel1 = dieMC->GetMothersLabel(label1);    // should work for both ESD and AOD
  Int_t mLabel2 = dieMC->GetMothersLabel(label2);

  // check the same mother option
  AliDielectronSignalMC* sigMC = (AliDielectronSignalMC*)fSignalsMC->At(nSignal);
  if(sigMC->GetMothersRelation()==AliDielectronSignalMC::kSame && mLabel1!=mLabel2) return;
  if(sigMC->GetMothersRelation()==AliDielectronSignalMC::kDifferent && mLabel1==mLabel2) return;
    
  AliDielectronVarManager::SetFillMap(fUsedVars);
  // fill the leg variables
  Double_t valuesLeg1[AliDielectronVarManager::kNMaxValues];
  Double_t valuesLeg2[AliDielectronVarManager::kNMaxValues];
  AliDielectronVarManager::Fill(part1,valuesLeg1);
  AliDielectronVarManager::Fill(part2,valuesLeg2);
    
  // fill the pair and event variables
  Double_t valuesPair[AliDielectronVarManager::kNMaxValues];
  AliDielectronVarManager::Fill(dieMC->GetMCEvent(), valuesPair);
  AliDielectronVarManager::FillVarMCParticle2(part1,part2,valuesPair);

  // if pair types are filled, fill mc sources at the end
  Int_t istep=0;
  if(fPairType!=kMConly) istep=AliDielectron::kEv1PMRot+1;

  // only OS at the moment
  if(part1->Charge()*part2->Charge()<0) {
    Fill(istep+nSignal+fSignalsMC->GetEntries(), valuesPair,  valuesLeg1, valuesLeg2);
  }

  return;
}
//______________________________________________
void AliDielectronHF::Fill(Int_t pairIndex, const AliDielectronPair *particle)
{
  //
  // fill histograms for event, pair and daughter cuts and pair types
  //
  
  // only OS pairs in case of MC
  //////////////////////////////  if(fHasMC && pairIndex!=AliDielectron::kEv1PM) return;

  // only selected pair types in case of data
  if(!IsPairTypeSelected(pairIndex) || fEventArray) return;

  // get event and pair variables
  Double_t valuesPair[AliDielectronVarManager::kNMaxValues];
  AliDielectronVarManager::SetFillMap(fUsedVars);
  AliDielectronVarManager::Fill(particle,valuesPair);

  // get leg variables (TODO: do not fill for the moment since leg cuts are not opened)
  Double_t valuesLeg1[AliDielectronVarManager::kNMaxValues]={0};
  if(fVarCutType->CountBits())  AliDielectronVarManager::Fill(particle->GetFirstDaughterP(),valuesLeg1);
  Double_t valuesLeg2[AliDielectronVarManager::kNMaxValues]={0};
  if(fVarCutType->CountBits())  AliDielectronVarManager::Fill(particle->GetSecondDaughterP(),valuesLeg2);

  // fill

  // if pair types are filled, fill mc sources at the end
  Int_t istep = 0;
  if(fPairType!=kMConly) istep=AliDielectron::kEv1PMRot+1;

  // mc source steps (only OS SE pairs)
  if(fHasMC && fSignalsMC && pairIndex==AliDielectron::kEv1PM) {
    for(Int_t i=0; i<fSignalsMC->GetEntries(); i++) {
      if(AliDielectronMC::Instance()->IsMCTruth(particle, (AliDielectronSignalMC*)fSignalsMC->At(i)))
	Fill(istep+i, valuesPair,  valuesLeg1, valuesLeg2);
    }
  }

  // all pair types w/o use of mc information
  if(fPairType==kMConly) return;

  // remove comments
  //// select correct step if we are looking at signals too
  ////  if(fHasMC && fSignalsMC) pairIndex += ( fSignalsMC->GetEntries() * (fStepGenerated ? 2 : 1) );
  Fill(pairIndex, valuesPair,  valuesLeg1, valuesLeg2); 

  return;
}

//______________________________________________
void AliDielectronHF::Fill(Int_t index, Double_t * const valuesPair, Double_t * const valuesLeg1, Double_t * const valuesLeg2)
{
  //
  // main fill function using index and values as input
  //

  TObjArray *histArr = static_cast<TObjArray*>(fArrPairType.At(index));
  if(!histArr) return;

  Int_t size  = GetNumberOfBins();
  // loop over all histograms
  for(Int_t ihist=0; ihist<size; ihist++) {

    Int_t sizeAdd   = 1;
    Bool_t selected = kTRUE;
    
    // loop over all cut variables
    Int_t nvars = fAxes.GetEntriesFast();
    for(Int_t ivar=0; ivar<nvars; ivar++) {
      
      // get bin limits
      TVectorD *bins = static_cast<TVectorD*>(fAxes.At(ivar));
      Int_t nbins    = bins->GetNrows()-1;

      // bin limits for current ivar bin
      Int_t ibin   = (ihist/sizeAdd)%nbins;
      Double_t lowEdge = (*bins)[ibin];
      Double_t upEdge  = (*bins)[ibin+1];
      switch(fBinType[ivar]) {
      case kStdBin:     upEdge=(*bins)[ibin+1];     break;
      case kBinToMax:   upEdge=(*bins)[nbins];      break;
      case kBinFromMin: lowEdge=(*bins)[0];         break;
      case kSymBin:     upEdge=(*bins)[nbins-ibin];
	if(ibin>=((Double_t)(nbins+1))/2) upEdge=(*bins)[nbins]; // to avoid low>up
	break;
      }

      // leg variable
      if(fVarCutType->TestBitNumber(ivar)) {
	if( (valuesLeg1[fVarCuts[ivar]] < lowEdge || valuesLeg1[fVarCuts[ivar]] >= upEdge) ||
	    (valuesLeg2[fVarCuts[ivar]] < lowEdge || valuesLeg2[fVarCuts[ivar]] >= upEdge) ) {
	  selected=kFALSE;
	  break;
	}
      }
      else { // pair and event variables
	if( (valuesPair[fVarCuts[ivar]] < lowEdge || valuesPair[fVarCuts[ivar]] >= upEdge) ) {
	  selected=kFALSE;
	  break;
	}
      }

      sizeAdd*=nbins;
    } //end of var cut loop

    // do not fill the histogram
    if(!selected) continue;

    // fill the object with Pair and event values
    TObjArray *tmp = (TObjArray*) histArr->At(ihist);
    TString title = tmp->GetName();
    AliDebug(10,title.Data());
    for(Int_t i=0; i<tmp->GetEntriesFast(); i++) {
      AliDielectronHistos::FillValues(tmp->At(i), valuesPair);
    }
    //    AliDebug(10,Form("Fill var %d %s value %f in %s \n",fVar,AliDielectronVarManager::GetValueName(fVar),valuesPair[fVar],tmp->GetName()));
  } //end of hist loop

}

//______________________________________________
void AliDielectronHF::Init()
{
  //
  // initialise event buffers
  //

  // has MC signals
  fHasMC=AliDielectronMC::Instance()->HasMC();
  Int_t steps = 0;
  if(fHasMC) steps=fSignalsMC->GetEntries();
  if(fStepGenerated) steps*=2;
  if(fEventArray) steps=1;

  // init pair type array
  fArrPairType.SetName(Form("%s_HF",GetName()));
  if( (fHasMC && fPairType==kMConly) || fEventArray) fArrPairType.Expand(steps);
  else fArrPairType.Expand(AliDielectron::kEv1PMRot+1+steps);

  Int_t size  = GetNumberOfBins();
  AliDebug(10,Form("Creating a histo array with size %d \n",size));

  Int_t sizeAdd  = 1; 

  // fill object array with the array of bin cells
  TObjArray *histArr = new TObjArray(0);
  if(!histArr) return;
  histArr->SetOwner(kTRUE);
  histArr->Expand(size);

  //  printf("fRefObj %p \n",fRefObj);
  // array of histograms to each bin cell
  for(Int_t ihist=0; ihist<size; ihist++) {
    histArr->AddAt(fRefObj.Clone(""), ihist);
    //histArr->AddAt(fRefObj.Clone(Form("h%04d",ihist)), ihist);
  }

  // loop over all cut variables and do the naming according to its bin cell
  Int_t nvars = fAxes.GetEntriesFast();
  for(Int_t ivar=0; ivar<nvars; ivar++) {
    
    // get bin limits
    TVectorD *bins = static_cast<TVectorD*>(fAxes.At(ivar));
    Int_t nbins    = bins->GetNrows()-1;


    // loop over all bin cells an set unique titles
    for(Int_t ihist=0; ihist<size; ihist++) {

      // get the lower limit for current ivar bin
      Int_t ibin   = (ihist/sizeAdd)%nbins; 
      Double_t lowEdge = (*bins)[ibin];
      Double_t upEdge  = (*bins)[ibin+1];
      switch(fBinType[ivar]) {
      case kStdBin:     upEdge=(*bins)[ibin+1];     break;
      case kBinToMax:   upEdge=(*bins)[nbins];      break;
      case kBinFromMin: lowEdge=(*bins)[0];         break;
      case kSymBin:     upEdge=(*bins)[nbins-ibin];
	if(ibin>=((Double_t)(nbins+1))/2) upEdge=(*bins)[nbins]; // to avoid low>up
	break;
      }

      TObjArray *tmp= (TObjArray*) histArr->At(ihist);
      TString title = tmp->GetName();
      if(!ivar)             title ="";
      if( ivar)             title+=":";
      if(fVarCutType->TestBitNumber(ivar)) title+="Leg";
      title+=AliDielectronVarManager::GetValueName(fVarCuts[ivar]);
      title+=Form("#%.2f#%.2f",lowEdge,upEdge);
      tmp->SetName(title.Data());
      AliDebug(10,title.Data());
    } // end: array of bin cell
    sizeAdd*=nbins;
  } //end: cut loop

  // copy array to the selected event,  pair types/ MC sources
  Int_t istep=0;

  ////////////////// only event array
  if(fEventArray) {
    // add a deep copy of the array
    fArrPairType[istep]=(TObjArray*)histArr->Clone("Event");
    ((TObjArray*)fArrPairType[istep])->SetOwner();
  }
  else {
    /////////////// pair types
    if(fPairType != kMConly) {
      for(istep=0; istep<AliDielectron::kEv1PMRot+1; istep++) {

	// pair type should be filled
	if(IsPairTypeSelected(istep)) {
	  // add a deep copy of the array
	  fArrPairType[istep]=(TObjArray*)histArr->Clone(AliDielectron::PairClassName(istep));
	  ((TObjArray*)fArrPairType[istep])->SetOwner();
	}
	else { //empty array
	  fArrPairType[istep]=new TObjArray(0);
	  ((TObjArray*)fArrPairType[istep])->SetOwner();
	  ((TObjArray*)fArrPairType[istep])->SetName(AliDielectron::PairClassName(istep));
	}
      } //end: loop over pair types
    }

    // mc sources
    if(fHasMC) {
      for(Int_t i=0; i<fSignalsMC->GetEntries(); i++) {
	TString title = Form("(Signal: %s)",fSignalsMC->At(i)->GetTitle());
	fArrPairType[istep+i]=(TObjArray*)histArr->Clone(title.Data());
	if(fStepGenerated)  {
	  title+=" MC truth";
	  fArrPairType[istep+i+fSignalsMC->GetEntries()]=(TObjArray*)histArr->Clone(title.Data());
	}
      } // end: loop over sources
    } //end: hasMC
  } //end: pair type array

  // clean up
  if(histArr) {
    delete histArr;
    histArr=0;
  }

}

//______________________________________________
Int_t AliDielectronHF::GetNumberOfBins() const
{
  //
  // return the number of bins this histogram grid has
  //
  Int_t size=1;
  for (Int_t i=0; i<fAxes.GetEntriesFast(); ++i)
    size*=((static_cast<TVectorD*>(fAxes.At(i)))->GetNrows()-1);
  return size;
}

//______________________________________________
Bool_t AliDielectronHF::IsPairTypeSelected(Int_t itype)
{
  //
  // check whether a pair type was selected
  // TODO: cross check or replace by mixinghandlers processsing

  Bool_t selected = kFALSE;

  // fill all
  if(fPairType==kAll) return kTRUE;

  switch(itype) {
  case AliDielectron::kEv1PP:
  case AliDielectron::kEv1MM:
    if(fPairType==kSeAll || fPairType==kSeMeAll || fPairType==kSeReAll )   selected = kTRUE;
    break;
  case AliDielectron::kEv1PM:
    if(fPairType!=kMeOnlyOS)  selected = kTRUE;
    break;
  case AliDielectron::kEv1PEv2P:
  case AliDielectron::kEv1MEv2M:
    if(fPairType==kMeAll || fPairType==kSeMeAll)   selected = kTRUE;
    break;
  case AliDielectron::kEv1PEv2M:
    if(fPairType==kMeAll || fPairType==kSeMeAll) selected = kTRUE;
    break;
  case AliDielectron::kEv1MEv2P:
    if(fPairType==kMeAll || fPairType==kSeMeAll || fPairType==kMeOnlyOS || fPairType==kSeMeOnlyOS)   selected = kTRUE;
    break;
  case AliDielectron::kEv2PP:
  case AliDielectron::kEv2PM:
  case AliDielectron::kEv2MM:
    selected = kFALSE;
    break;
  case AliDielectron::kEv1PMRot:
    if(fPairType==kSeReAll || fPairType==kSeReOnlyOS)   selected = kTRUE;
    break;
  }

  return selected;

}


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