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 Correction framework manager                         //
//                                                                       //
/*









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

#include <TList.h>
#include <TObjArray.h>
#include <TVectorD.h>
#include <TString.h>
#include <TObjString.h>

#include <AliCFContainer.h>
#include <AliAnalysisFilter.h>
#include <AliAnalysisCuts.h>
#include <AliVParticle.h>
#include <AliLog.h>

#include "AliDielectronCF.h"
#include "AliDielectronMC.h"
#include "AliDielectronPair.h"
#include "AliDielectronSignalMC.h"

ClassImp(AliDielectronCF)

AliDielectronCF::AliDielectronCF() :
  TNamed("DielectronCF","DielectronCF"),
  fUsedVars(new TBits(AliDielectronVarManager::kNMaxValues)),
  fNSteps(0),
  fNVars(0),
  fVarBinLimits(0x0),
  fNVarsLeg(0),
  fVarBinLimitsLeg(0x0),
  fNCuts(0),
  fValues(0x0),
  fIsMCTruth(0x0),
  fStepForMCtruth(kFALSE),
  fStepForNoCutsMCmotherPid(kFALSE),
  fStepForAfterAllCuts(kTRUE),
  fStepForPreFilter(kFALSE),
  fStepsForEachCut(kFALSE),
  fStepsForCutsIncreasing(kFALSE),
  fStepsForSignal(kTRUE),
  fStepsForBackground(kFALSE),
  fStepsForMCtruthOnly(kFALSE),
  fNStepMasks(0),
  fPdgMother(-1),
  fSignalsMC(0x0),
  fCfContainer(0x0),
  fHasMC(kFALSE),
  fNAddSteps(0)
{
  //
  // Default constructor
  //
  for (Int_t i=0; i<AliDielectronVarManager::kNMaxValues; ++i){
    fVariables[i]=0;
    fVariablesLeg[i]=0;
  }

  for (Int_t i=0; i<kNmaxAddSteps; ++i){
    fStepMasks[i]=0xFFFFFF;
  }
}

//________________________________________________________________
AliDielectronCF::AliDielectronCF(const char* name, const char* title) :
  TNamed(name, title),
  fUsedVars(new TBits(AliDielectronVarManager::kNMaxValues)),
  fNSteps(0),
  fNVars(0),
  fVarBinLimits(0x0),
  fNVarsLeg(0),
  fVarBinLimitsLeg(0x0),
  fNCuts(0),
  fValues(0x0),
  fIsMCTruth(0x0),
  fStepForMCtruth(kFALSE),
  fStepForNoCutsMCmotherPid(kFALSE),
  fStepForAfterAllCuts(kTRUE),
  fStepForPreFilter(kFALSE),
  fStepsForEachCut(kFALSE),
  fStepsForCutsIncreasing(kFALSE),
  fStepsForSignal(kTRUE),
  fStepsForBackground(kFALSE),
  fStepsForMCtruthOnly(kFALSE),
  fNStepMasks(0),
  fPdgMother(-1),
  fSignalsMC(0x0),
  fCfContainer(0x0),
  fHasMC(kFALSE),
  fNAddSteps(0)
{
  //
  // Named constructor
  //
  for (Int_t i=0; i<AliDielectronVarManager::kNMaxValues; ++i){
    fVariables[i]=0;
    fVariablesLeg[i]=0;
  }
  
  for (Int_t i=0; i<kNmaxAddSteps; ++i){
    fStepMasks[i]=0xFFFFFF;
  }
}

//________________________________________________________________
AliDielectronCF::~AliDielectronCF()
{
  //
  // Destructor
  //
  if (fUsedVars) delete fUsedVars;
  if (fValues) delete [] fValues;
  if (fIsMCTruth) delete [] fIsMCTruth;
  if (fVarBinLimits) delete fVarBinLimits;
  if (fVarBinLimitsLeg) delete fVarBinLimitsLeg;
}

//________________________________________________________________
void AliDielectronCF::AddVariable(AliDielectronVarManager::ValueTypes type, Int_t nbins,
                                  Double_t min, Double_t max, Bool_t leg, Bool_t log)
{
  //
  // Add a variable to the CF configuration
  // if leg is true it will add the variables of the leg
  // if log is true log binning will be created
  //

  TVectorD *binLimits=0x0;
  if (!log) binLimits=MakeLinBinning(nbins,min,max);
  else binLimits=MakeLogBinning(nbins,min,max);
  AddVariable(type,binLimits,leg);
}

//________________________________________________________________
void AliDielectronCF::AddVariable(AliDielectronVarManager::ValueTypes type, const char* binLimitStr, Bool_t leg/*=kFALSE*/)
{
  //
  // Add a variable to the CF configuration
  // specify arbitrary binning in a string.
  // Bin limits need to be separated by a ","
  //
  TString limits(binLimitStr);
  if (limits.IsNull()){
    AliError(Form("Bin Limit string is empty, cannot add the variable '%s'",AliDielectronVarManager::GetValueName(type)));
    return;
  }

  TObjArray *arr=limits.Tokenize(",");
  Int_t nLimits=arr->GetEntries();
  if (nLimits<2){
    AliError(Form("Need at leas 2 bin limits, cannot add the variable '%s'",AliDielectronVarManager::GetValueName(type)));
    delete arr;
    return;
  }

  TVectorD *binLimits=new TVectorD(nLimits);
  for (Int_t iLim=0; iLim<nLimits; ++iLim){
    (*binLimits)[iLim]=(static_cast<TObjString*>(arr->At(iLim)))->GetString().Atof();
  }

  delete arr;
  AddVariable(type,binLimits,leg);
}

//________________________________________________________________
void AliDielectronCF::AddVariable(AliDielectronVarManager::ValueTypes type, TVectorD *binLimits, Bool_t leg/*=kFALSE*/)
{
  //
  // Add variable with the binning given in the TVectorD
  //
  if (!leg){
    if (!fVarBinLimits){
      fVarBinLimits=new TObjArray;
      fVarBinLimits->SetOwner();
    }
    fVarBinLimits->Add(binLimits);
    fVariables[fNVars]  = (UInt_t)type;
    ++fNVars;
  } else {
    if (!fVarBinLimitsLeg){
      fVarBinLimitsLeg=new TObjArray;
      fVarBinLimitsLeg->SetOwner();
    }
    fVarBinLimitsLeg->Add(binLimits);
    fVariablesLeg[fNVarsLeg]  = (UInt_t)type;
    fUsedVars->SetBitNumber(type,kTRUE);
    ++fNVarsLeg;
  }
}

//________________________________________________________________
void AliDielectronCF::InitialiseContainer(const AliAnalysisFilter& filter)
{
  //
  // Initialise container based on the cuts in the analysis filter
  //

  fNCuts=filter.GetCuts()->GetEntries();

  fHasMC=AliDielectronMC::Instance()->HasMC();
  fNAddSteps=1;
  if (fHasMC){
    if (fStepsForSignal && fSignalsMC) fNAddSteps+=fSignalsMC->GetEntries();
    if (fStepsForBackground) ++fNAddSteps;
    if (fStepsForMCtruthOnly) --fNAddSteps; // No Step for Pair information
  } else {
    //if 
    fStepForMCtruth=kFALSE;
    fStepForNoCutsMCmotherPid=kFALSE;
    fStepsForSignal=kFALSE;
    fStepsForBackground=kFALSE;
  }
  // consitency checks to not duplicate steps
  if (fStepsForCutsIncreasing)     fStepForAfterAllCuts=kFALSE;
  if (fStepsForEachCut&&fNCuts==1) fStepForAfterAllCuts=kFALSE;
  
  fNSteps=0;
  if (fStepForMCtruth && fSignalsMC)           fNSteps+=fSignalsMC->GetEntries();
  if (fStepForNoCutsMCmotherPid && fSignalsMC) fNSteps+=fSignalsMC->GetEntries();
  if (fStepForAfterAllCuts)                    fNSteps+=fNAddSteps;
  
  if (fStepsForEachCut)         fNSteps+=(fNAddSteps*fNCuts); //one step for each cut + Signal (MC)
  if (fStepsForCutsIncreasing)  fNSteps+=(fNAddSteps*fNCuts); //one step for the increasing cuts + Signal (MC)
  // e.g. cut1, cut1&cut2, cut1&cut2&cut3, ...
  
  fNSteps+=(fNAddSteps*fNStepMasks);                              // cuts for the additional cut masks

  if (fStepForPreFilter) fNSteps+=fNAddSteps; //Add at the end for Prefilter (maxcutmask+1)
  
  // create the container
  
  Int_t *nbins=new Int_t[fNVars+2*fNVarsLeg];
  for (Int_t i=0;i<fNVars;++i) {
    Int_t nBins=(static_cast<TVectorD*>(fVarBinLimits->At(i)))->GetNrows()-1;
    nbins[i]=nBins;
  }
  for (Int_t i=0;i<fNVarsLeg;++i){
    Int_t nBins=(static_cast<TVectorD*>(fVarBinLimitsLeg->At(i)))->GetNrows()-1;
    nbins[i+fNVars]=nBins;
    nbins[i+fNVars+fNVarsLeg]=nBins;
  }
  
  fCfContainer = new AliCFContainer(GetName(), GetTitle(), fNSteps, fNVars+2*fNVarsLeg, nbins);
  delete [] nbins;
  
  // initialize the variables and their bin limits
  for (Int_t iVar=0; iVar<fNVars; iVar++) {
    UInt_t type=fVariables[iVar];
    Double_t *binLim = (static_cast<TVectorD*>(fVarBinLimits->At(iVar)))->GetMatrixArray();

    fCfContainer->SetBinLimits(iVar, binLim);
    fCfContainer->SetVarTitle(iVar, AliDielectronVarManager::GetValueName(type));
  }
  
  // initialize the variables and their bin limits for the Legs
  for (Int_t iVar=0; iVar<fNVarsLeg; iVar++) {
    UInt_t type=fVariablesLeg[iVar];
    Double_t *binLim=(static_cast<TVectorD*>(fVarBinLimitsLeg->At(iVar)))->GetMatrixArray();

    //Leg1
    fCfContainer->SetBinLimits(iVar+fNVars, binLim);
    fCfContainer->SetVarTitle(iVar+fNVars, Form("Leg1_%s",AliDielectronVarManager::GetValueName(type)));
    
    //Leg2
    fCfContainer->SetBinLimits(iVar+fNVars+fNVarsLeg, binLim);
    fCfContainer->SetVarTitle(iVar+fNVars+fNVarsLeg, Form("Leg2_%s",AliDielectronVarManager::GetValueName(type)));
  }

  // array for storing values
  fValues = new Double_t[fNVars+2*fNVarsLeg];

  // array for storing MC info
  if (fHasMC && fSignalsMC && fSignalsMC->GetEntries()>0) fIsMCTruth=new Bool_t[fSignalsMC->GetEntries()];
  //=================//
  // Set step titles //
  //=================//
  Int_t step=0;

  //Pure MC truth
  if(fStepForMCtruth && fSignalsMC) {
    for(Int_t i=0; i<fSignalsMC->GetEntries(); i++)
      fCfContainer->SetStepTitle(step++, Form("MC truth (Signal: %s)", fSignalsMC->At(i)->GetTitle()));
  }

  //before cuts (MC truth)
  if (fStepForNoCutsMCmotherPid && fSignalsMC){
    for(Int_t i=0; i<fSignalsMC->GetEntries(); i++)
      fCfContainer->SetStepTitle(step++,Form("No cuts (Signal: %s)",fSignalsMC->At(i)->GetTitle()));
  }
  
  TString cutName;
  //Steps for each of the cuts
  if (fStepsForEachCut){
    for (Int_t iCut=0; iCut<fNCuts;++iCut) {
      cutName=filter.GetCuts()->At(iCut)->GetName(); //TODO: User GetTitle???
      if (!fStepsForMCtruthOnly) {
        fCfContainer->SetStepTitle(step++, cutName.Data()); //Step for the cut
      }
      if (fHasMC){
        if (fStepsForSignal && fSignalsMC) {
          for(Int_t i=0; i<fSignalsMC->GetEntries(); i++) {
            fCfContainer->SetStepTitle(step++, Form("%s (Signal: %s)", cutName.Data(), fSignalsMC->At(i)->GetTitle())); //Step for  the cut with MC truth
          } 
        }
        if (fStepsForBackground)
          fCfContainer->SetStepTitle(step++, (cutName+" (Background)").Data()); //Step for the cut with MC truth
      }
    }
  }

  //Steps for increasing cut match
  if (fStepsForCutsIncreasing){
    cutName=""; //TODO: User GetTitle???
    for (Int_t iCut=0; iCut<fNCuts;++iCut) {
      if (!cutName.IsNull()) cutName+="&";
      cutName+=filter.GetCuts()->At(iCut)->GetName();
      if (!fStepsForMCtruthOnly) {
        fCfContainer->SetStepTitle(step++, cutName.Data()); //Step for the cut
      }
      if (fHasMC){
        if (fStepsForSignal && fSignalsMC)
          for(Int_t i=0; i<fSignalsMC->GetEntries(); i++) {
            fCfContainer->SetStepTitle(step++, Form("%s (Signal: %s)", cutName.Data(), fSignalsMC->At(i)->GetTitle())); //Step for the cut with MC truth
          }
          if (fStepsForBackground)
            fCfContainer->SetStepTitle(step++, (cutName+" (Background)").Data()); //Step for the cut with MC truth
      }
    }
  }

  //Steps of user defined cut combinations
  for (UInt_t iComb=0; iComb<fNStepMasks; ++iComb){
    cutName="";
    UInt_t mask=fStepMasks[iComb];
    for (Int_t iCut=0; iCut<fNCuts;++iCut) {
      if (mask&(1<<iCut)){
        if (cutName.IsNull()){
          cutName=filter.GetCuts()->At(iCut)->GetName();
        }else{
          cutName+="&";
          cutName+=filter.GetCuts()->At(iCut)->GetName();
        }
      }
    }
    
    fCfContainer->SetStepTitle(step++, cutName.Data()); //Step for the cut
    
    if (fHasMC){
      if (fStepsForSignal && fSignalsMC)
        for(Int_t i=0; i<fSignalsMC->GetEntries(); i++) {
          fCfContainer->SetStepTitle(step++, Form("%s (Signal: %s)", cutName.Data(), fSignalsMC->At(i)->GetTitle())); //Step for the cut with MC truth
        }
      if (fStepsForBackground)
        fCfContainer->SetStepTitle(step++, (cutName+" (Background)").Data()); //Step for the cut with MC truth
    }
  }

  //After All cuts
  if (fStepForAfterAllCuts){
    cutName="No pair cuts";
    if (filter.GetCuts()->At(0)){
      cutName=filter.GetCuts()->At(0)->GetName(); //TODO: User GetTitle???
      for (Int_t iCut=1; iCut<fNCuts;++iCut) {
        cutName+="&";
        cutName+=filter.GetCuts()->At(iCut)->GetName();
      }
    }
    if (!fStepsForMCtruthOnly) {
      fCfContainer->SetStepTitle(step++, cutName.Data()); //Step for the cut
    }
    if (fHasMC){
      if (fStepsForSignal && fSignalsMC)
        for(Int_t i=0; i<fSignalsMC->GetEntries(); i++) {
          fCfContainer->SetStepTitle(step++, Form("%s (Signal: %s)", cutName.Data(), fSignalsMC->At(i)->GetTitle())); //Step for the cut with MC truth
        }
        if (fStepsForBackground)
          fCfContainer->SetStepTitle(step++, (cutName+" (Background)").Data()); //Step for the cut with MC truth
    }
  }

  //Additional Step for result after PreFilter
  if (fStepForPreFilter){
    cutName="PreFilter";
    fCfContainer->SetStepTitle(step++, cutName.Data()); //Step for the cut
    if (fHasMC){
      if (fStepsForSignal && fSignalsMC)
        for(Int_t i=0; i<fSignalsMC->GetEntries(); i++) {
          fCfContainer->SetStepTitle(step++, Form("%s (Signal %s)", cutName.Data(), fSignalsMC->At(i)->GetTitle())); //Step for the cut with MC truth
        }
        if (fStepsForBackground)
          fCfContainer->SetStepTitle(step++, (cutName+" (Background)").Data()); //Step for the cut with MC truth
    }
  }



  if (step!=fNSteps) {
    AliError(Form("Something went wrong in the naming of the steps!!! (%d != %d)",step,fNSteps));
  }
}

//________________________________________________________________
void AliDielectronCF::Fill(UInt_t mask, const AliDielectronPair *particle)
{
  //
  // Fill the containers
  //

  // Check the MC truths
  if(fIsMCTruth) {
    for(Int_t i=0; i<fSignalsMC->GetEntries(); i++) fIsMCTruth[i]=kFALSE;
  }

  //TODO: for the moment don't fill truth information for mixed event paris. No valid MC info is available
  //      in the mixing handler
  Bool_t isMixedPair=(particle->GetType()>2&&particle->GetType()<10);
  
  Bool_t isBackground = kFALSE;
  if(fIsMCTruth && !isMixedPair) {
    for(Int_t i=0; i<fSignalsMC->GetEntries(); ++i) { 
      fIsMCTruth[i] = AliDielectronMC::Instance()->IsMCTruth(particle, (AliDielectronSignalMC*)fSignalsMC->At(i));
      isBackground = (isBackground || fIsMCTruth[i]);
    }
    // background is considered that pair which does not fulfill any of the signals
    isBackground = !isBackground;
  }
  
  Double_t valuesPair[AliDielectronVarManager::kNMaxValues];
  AliDielectronVarManager::SetFillMap(fUsedVars);
  AliDielectronVarManager::Fill(particle,valuesPair);

  for (Int_t iVar=0; iVar<fNVars; ++iVar){
    Int_t var=fVariables[iVar];
    fValues[iVar]=valuesPair[var];
  }

  if (fNVarsLeg>0){
    Double_t valuesLeg1[AliDielectronVarManager::kNMaxValues]={0};
    AliDielectronVarManager::Fill(particle->GetFirstDaughterP(),valuesLeg1);
    Double_t valuesLeg2[AliDielectronVarManager::kNMaxValues]={0};
    AliDielectronVarManager::Fill(particle->GetSecondDaughterP(),valuesLeg2);

    for (Int_t iVar=0; iVar<fNVarsLeg; ++iVar){
      Int_t var=fVariablesLeg[iVar];
      fValues[iVar+fNVars]=valuesLeg1[var];
      fValues[iVar+fNVars+fNVarsLeg]=valuesLeg2[var];
    }
  }
  
  UInt_t selectedMask=(1<<fNCuts)-1;

  //============//
  // Fill steps //
  //============//
  // Pure MC steps are handled in FillMC
  Int_t step=0;
  if (fStepForMCtruth && fIsMCTruth) step+=fSignalsMC->GetEntries();
  
  //No cuts (MC truth)
  if (fStepForNoCutsMCmotherPid && fIsMCTruth){
    for(Int_t i=0; i<fSignalsMC->GetEntries(); ++i) {
      if(fIsMCTruth[i]) {
        fCfContainer->Fill(fValues,step);
      }
      ++step;
    }
  }
  
  //Steps for each of the cuts
  if (fStepsForEachCut){
    for (Int_t iCut=0; iCut<fNCuts;++iCut) {
      UInt_t cutMask=1<<iCut;
      if ((mask&cutMask)==cutMask) {
        if(!fStepsForMCtruthOnly) {
          fCfContainer->Fill(fValues,step);
          ++step;
        }
        if (fHasMC){
          if ( fStepsForSignal && fIsMCTruth){
            for(Int_t i=0; i<fSignalsMC->GetEntries(); ++i) {
              if(fIsMCTruth[i]) {
                fCfContainer->Fill(fValues,step);
              }
              ++step;
            }
          }
          if ( fStepsForBackground ){
            if (isBackground) fCfContainer->Fill(fValues,step);
            ++step;
          }
        }
      } else {
        step+=fNAddSteps;
      }
    }
  }
  

  //Steps for increasing cut match
  if (fStepsForCutsIncreasing&&fNCuts>2){
    for (Int_t iCut=0; iCut<fNCuts;++iCut) {
      UInt_t cutMask=(1<<(iCut+1))-1;
      if ((mask&cutMask)==cutMask) {
        if(!fStepsForMCtruthOnly) {
          fCfContainer->Fill(fValues,step);
          ++step;
        }

        if (fHasMC){
          if ( fStepsForSignal && fIsMCTruth){
            for(Int_t i=0; i<fSignalsMC->GetEntries(); ++i) {
              if(fIsMCTruth[i]) {
                fCfContainer->Fill(fValues,step);
              }
              ++step;
            }
          }
          if ( fStepsForBackground ){
            if (isBackground) fCfContainer->Fill(fValues,step);
            ++step;
          }
        }
      } else {
        step+=fNAddSteps;
      }
    }
  }

  //Steps of user defined cut combinations
  for (UInt_t iComb=0; iComb<fNStepMasks; ++iComb){
    UInt_t userMask=fStepMasks[iComb];
    if ((mask&userMask)==userMask) {
      if(!fStepsForMCtruthOnly) {
        fCfContainer->Fill(fValues,step);
        ++step;
      }
      if (fHasMC){
        if ( fStepsForSignal && fIsMCTruth){
          for(Int_t i=0; i<fSignalsMC->GetEntries(); ++i) {
            if(fIsMCTruth[i]) {
              fCfContainer->Fill(fValues,step);
            }
            ++step;
          }
        }
        if ( fStepsForBackground ){
          if (isBackground) fCfContainer->Fill(fValues,step);
          ++step;
        }
      }
    } else {
      step+=fNAddSteps;
    }
  }
  
  //All cuts
  if (fStepForAfterAllCuts){
    if (mask == selectedMask){
      if(!fStepsForMCtruthOnly) {
        fCfContainer->Fill(fValues,step);
        ++step;
      }

      if (fHasMC){
        if ( fStepsForSignal && fIsMCTruth){
          for(Int_t i=0; i<fSignalsMC->GetEntries(); ++i) {
            if(fIsMCTruth[i]) {
              fCfContainer->Fill(fValues,step);
            }
            ++step;
          }
        }
        if ( fStepsForBackground ){
          if (isBackground) fCfContainer->Fill(fValues,step);
          ++step;
        }
      }
    } else {
      step+=fNAddSteps;
    }
  }

  //prefilter
  if (fStepForPreFilter) {
    if (mask&(1<<fNCuts)) {
      if(!fStepsForMCtruthOnly) {
        fCfContainer->Fill(fValues,step);
        ++step;
      }
      if (fHasMC){
        if ( fStepsForSignal && fIsMCTruth){
          for(Int_t i=0; i<fSignalsMC->GetEntries(); ++i) {
            if(fIsMCTruth[i]) {
              fCfContainer->Fill(fValues,step);
            }
            ++step;
          }
        }
        if ( fStepsForBackground ){
          if (isBackground) fCfContainer->Fill(fValues,step);
          ++step;
        }
      }
    }
    else {
      step+=fNAddSteps;
    }
  }
  
  if (step!=fNSteps) {
    AliError("Something went wrong in the step filling!!!");
  }
}

//________________________________________________________________
void AliDielectronCF::FillMC(const TObject *particle)
{
  //
  // fill MC part of the Container
  //
  if (!fStepForMCtruth) return;
  
  Double_t valuesPair[AliDielectronVarManager::kNMaxValues];
  AliDielectronVarManager::SetFillMap(fUsedVars);
  AliDielectronVarManager::Fill(particle,valuesPair);

  AliVParticle *d1=0x0;
  AliVParticle *d2=0x0;
  AliDielectronMC::Instance()->GetDaughters(particle,d1,d2);
  
  //TODO: temporary solution, set manually the pair type to 1: unlikesign SE
  valuesPair[AliDielectronVarManager::kPairType]=1;
  
  for (Int_t iVar=0; iVar<fNVars; ++iVar){
    Int_t var=fVariables[iVar];
    fValues[iVar]=valuesPair[var];
  }
  
  if (fNVarsLeg>0){
    Double_t valuesLeg1[AliDielectronVarManager::kNMaxValues];
    Double_t valuesLeg2[AliDielectronVarManager::kNMaxValues];
    if (d1->Pt()>d2->Pt()){
      AliDielectronVarManager::Fill(d1,valuesLeg1);
      AliDielectronVarManager::Fill(d2,valuesLeg2);
    } else {
      AliDielectronVarManager::Fill(d2,valuesLeg1);
      AliDielectronVarManager::Fill(d1,valuesLeg2);
    }
    
    for (Int_t iVar=0; iVar<fNVarsLeg; ++iVar){
      Int_t var=fVariablesLeg[iVar];
      fValues[iVar+fNVars]=valuesLeg1[var];
      fValues[iVar+fNVars+fNVarsLeg]=valuesLeg2[var];
    }
  }
  
  fCfContainer->Fill(fValues,0);
}


//________________________________________________________________
void AliDielectronCF::FillMC(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)
  //
  if (!fStepForMCtruth) 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
  if (fNVarsLeg>0){
    Double_t valuesLeg1[AliDielectronVarManager::kNMaxValues];
    Double_t valuesLeg2[AliDielectronVarManager::kNMaxValues];
    if (part1->Pt()>part2->Pt()){
      AliDielectronVarManager::Fill(part1,valuesLeg1);
      AliDielectronVarManager::Fill(part2,valuesLeg2);
    } else {
      AliDielectronVarManager::Fill(part2,valuesLeg1);
      AliDielectronVarManager::Fill(part1,valuesLeg2);
    }
    
    for (Int_t iVar=0; iVar<fNVarsLeg; ++iVar){
      Int_t var=fVariablesLeg[iVar];
      fValues[iVar+fNVars]=valuesLeg1[var];
      fValues[iVar+fNVars+fNVarsLeg]=valuesLeg2[var];
    }
  }

  Double_t valuesPair[AliDielectronVarManager::kNMaxValues];
  AliDielectronVarManager::Fill(dieMC->GetMCEvent(), valuesPair);
  AliDielectronVarManager::FillVarMCParticle2(part1,part2,valuesPair);

  if(part1->Charge()*part2->Charge()<0)
    valuesPair[AliDielectronVarManager::kPairType]=1;
  else if(part1->Charge()>0)
    valuesPair[AliDielectronVarManager::kPairType]=0;
  else
    valuesPair[AliDielectronVarManager::kPairType]=2; // if one of the two particles is neutral, the pair will go here

  for(Int_t iVar=0; iVar<fNVars; ++iVar){
    Int_t var=fVariables[iVar];
    fValues[iVar]=valuesPair[var];
  }

  fCfContainer->Fill(fValues,nSignal);
}


//_____________________________________________________________________________
TVectorD* AliDielectronCF::MakeLogBinning(Int_t nbinsX, Double_t xmin, Double_t xmax) const
{
  //
  // Make logarithmic binning
  // the user has to delete the array afterwards!!!
  //
  
  //check limits
  if (xmin<1e-20 || xmax<1e-20){
    AliError("For Log binning xmin and xmax must be > 1e-20. Using linear binning instead!");
    return MakeLinBinning(nbinsX, xmin, xmax);
  }
  if (xmax<xmin){
    Double_t tmp=xmin;
    xmin=xmax;
    xmax=tmp;
  }
  TVectorD *binLim=new TVectorD(nbinsX+1);
  Double_t first=xmin;
  Double_t last=xmax;
  Double_t expMax=TMath::Log(last/first);
  for (Int_t i=0; i<nbinsX+1; ++i){
    (*binLim)[i]=first*TMath::Exp(expMax/nbinsX*(Double_t)i);
  }
  return binLim;
}

//_____________________________________________________________________________
TVectorD* AliDielectronCF::MakeLinBinning(Int_t nbinsX, Double_t xmin, Double_t xmax) const
{
  //
  // Make logarithmic binning
  // the user has to delete the array afterwards!!!
  //
  if (xmax<xmin){
    Double_t tmp=xmin;
    xmin=xmax;
    xmax=tmp;
  }
  TVectorD *binLim=new TVectorD(nbinsX+1);
  Double_t first=xmin;
  Double_t last=xmax;
  Double_t binWidth=(last-first)/nbinsX;
  for (Int_t i=0; i<nbinsX+1; ++i){
    (*binLim)[i]=first+binWidth*(Double_t)i;
  }
  return binLim;
}

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