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 PID                                  //
//                                                                       //
//                                                                       //
/*
Detailed description


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

#include <TMath.h>
#include <TF1.h>
#include <TGraph.h>
#include <THnBase.h>

#include <AliVTrack.h>
#include <AliVCluster.h>
#include <AliLog.h>
#include <AliExternalTrackParam.h>
#include <AliPIDResponse.h>
#include <AliTRDPIDResponse.h>
#include <AliESDtrack.h> //!!!!! Remove once Eta correction is treated in the tender
#include <AliAODTrack.h>
#include <AliAODPid.h>

#include "AliDielectronVarManager.h"
#include "AliDielectronVarCuts.h"

#include "AliDielectronPID.h"

ClassImp(AliDielectronPID)

TGraph  *AliDielectronPID::fgFitCorr=0x0;
Double_t AliDielectronPID::fgCorr=0.0;
Double_t AliDielectronPID::fgCorrdEdx=1.0;
TF1     *AliDielectronPID::fgFunEtaCorr=0x0;
TH1     *AliDielectronPID::fgFunCntrdCorr=0x0;
TH1     *AliDielectronPID::fgFunWdthCorr=0x0;
TGraph  *AliDielectronPID::fgdEdxRunCorr=0x0;

AliDielectronPID::AliDielectronPID() :
  AliAnalysisCuts(),
  fUsedVars(new TBits(AliDielectronVarManager::kNMaxValues)),
  fNcuts(0),
  fPIDResponse(0x0)
{
  //
  // Default Constructor
  //
  for (Int_t icut=0; icut<kNmaxPID; ++icut){
    fDetType[icut]=kTPC;
    fPartType[icut]=AliPID::kPion;
    fNsigmaLow[icut]=0;
    fNsigmaUp[icut]=0;
    fmin[icut]=0;
    fmax[icut]=0;
    fExclude[icut]=kFALSE;
    fFunUpperCut[icut]=0x0;
    fFunLowerCut[icut]=0x0;
    fRequirePIDbit[icut]=0;
    fActiveCuts[icut]=-1;
    fSigmaFunLow[icut]=0;
    fSigmaFunUp[icut]=0;
    fFunSigma[icut]=0x0;
    fVarCuts[icut]=0x0;
    fMapElectronCutLow[icut]=0x0;
  }
}

//______________________________________________
AliDielectronPID::AliDielectronPID(const char* name, const char* title) :
  AliAnalysisCuts(name, title),
  fUsedVars(new TBits(AliDielectronVarManager::kNMaxValues)),
  fNcuts(0),
  fPIDResponse(0x0)
{
  //
  // Named Constructor
  //
  for (Int_t icut=0; icut<kNmaxPID; ++icut){
    fDetType[icut]=kTPC;
    fPartType[icut]=AliPID::kPion;
    fNsigmaLow[icut]=0;
    fNsigmaUp[icut]=0;
    fmin[icut]=0;
    fmax[icut]=0;
    fExclude[icut]=kFALSE;
    fFunUpperCut[icut]=0x0;
    fFunLowerCut[icut]=0x0;
    fRequirePIDbit[icut]=0;
    fActiveCuts[icut]=0;
    fSigmaFunLow[icut]=0;
    fSigmaFunUp[icut]=0;
    fFunSigma[icut]=0x0;
    fVarCuts[icut]=0x0;
    fMapElectronCutLow[icut]=0x0;
  }
}

//______________________________________________
AliDielectronPID::~AliDielectronPID()
{
  //
  // Default Destructor
  //
  if (fUsedVars) delete fUsedVars;
}

//______________________________________________
void AliDielectronPID::AddCut(DetType det, AliPID::EParticleType type, Double_t nSigmaLow, Double_t nSigmaUp/*=-99999.*/,
                              Double_t min/*=0*/, Double_t max/*=0*/, Bool_t exclude/*=kFALSE*/,
                              UInt_t pidBitType/*=AliDielectronPID::kRequire*/, Int_t var/*=-1*/)
{
  //
  // Add a pid nsigma cut
  // use response of detector 'det' in the range ['min'] to ['max'] for var
  // use a sigma band between 'nSigmaLow' and 'nSigmaUp'
  // if nSigmaUp==-99999. then nSigmaLow will be uesd as a symmetric band +- nSigmaLow
  // specify whether to 'exclude' the given band
  //

  if (fNcuts>=kNmaxPID){
    AliError(Form("only %d pid cut ranges allowed",kNmaxPID));
    return;
  }
  if (TMath::Abs(nSigmaUp+99999.)<1e-20){
    nSigmaUp=TMath::Abs(nSigmaLow);
    nSigmaLow=-1.*nSigmaUp;
  }
  fDetType[fNcuts]=det;
  fPartType[fNcuts]=type;
  fNsigmaLow[fNcuts]=nSigmaLow;
  fNsigmaUp[fNcuts]=nSigmaUp;
  fmin[fNcuts]=min;
  fmax[fNcuts]=max;
  fExclude[fNcuts]=exclude;
  fRequirePIDbit[fNcuts]=pidBitType;
  if(var==-1) var=AliDielectronVarManager::kP; // set default
  fActiveCuts[fNcuts]=var;
  fUsedVars->SetBitNumber(var,kTRUE);

  AliDebug(1,Form("Add PID cut %d: sigma [% .1f,% .1f] \t cut [% .1f,% .f] \t var %d->%s \n",
		  fNcuts,nSigmaLow,nSigmaUp,min,max,fActiveCuts[fNcuts],AliDielectronVarManager::GetValueName(fActiveCuts[fNcuts])));
  
  ++fNcuts;

}

//______________________________________________
void AliDielectronPID::AddCut(DetType det, AliPID::EParticleType type, Double_t nSigmaLow, TF1 * const funUp,
                              Double_t min/*=0*/, Double_t max/*=0*/, Bool_t exclude/*=kFALSE*/,
                              UInt_t pidBitType/*=AliDielectronPID::kRequire*/, Int_t var/*=-1*/)
{
  //
  // cut using a TF1 as upper cut
  //
  if (funUp==0x0){
    AliError("A valid function is required for the upper cut. Not adding the cut!");
    return;
  }
  fFunUpperCut[fNcuts]=funUp;
  AddCut(det,type,nSigmaLow,0.,min,max,exclude,pidBitType,var);
}

//______________________________________________
void AliDielectronPID::AddCut(DetType det, AliPID::EParticleType type, TF1 * const funLow, Double_t nSigmaUp,
                              Double_t min/*=0*/, Double_t max/*=0*/, Bool_t exclude/*=kFALSE*/,
                              UInt_t pidBitType/*=AliDielectronPID::kRequire*/, Int_t var/*=-1*/)
{
  //
  // cut using a TF1 as lower cut
  //
  if (funLow==0x0){
    AliError("A valid function is required for the lower cut. Not adding the cut!");
    return;
  }
  fFunLowerCut[fNcuts]=funLow;
  AddCut(det,type,0.,nSigmaUp,min,max,exclude,pidBitType,var);
}

//______________________________________________
void AliDielectronPID::AddCut(DetType det, AliPID::EParticleType type, TF1 * const funLow, TF1 * const funUp,
                              Double_t min/*=0*/, Double_t max/*=0*/, Bool_t exclude/*=kFALSE*/,
                              UInt_t pidBitType/*=AliDielectronPID::kRequire*/, Int_t var/*=-1*/)
{
  //
  // cut using a TF1 as lower and upper cut
  //
  if ( (funUp==0x0) || (funLow==0x0) ){
    AliError("A valid function is required for upper and lower cut. Not adding the cut!");
    return;
  }
  fFunUpperCut[fNcuts]=funUp;
  fFunLowerCut[fNcuts]=funLow;
  AddCut(det,type,0.,0.,min,max,exclude,pidBitType,var);
}

//______________________________________________
void AliDielectronPID::AddCut(DetType det, AliPID::EParticleType type, Double_t nSigmaLow, Double_t nSigmaUp,
                              Double_t min, Double_t max, Bool_t exclude,
                              UInt_t pidBitType, TF1 * const funSigma)
{
  //
  // cut using a TF1 as lower cut
  //
  if (funSigma==0x0){
    AliError("A valid function is required for the sigma cut. Not adding the cut!");
    return;
  }
  fFunSigma[fNcuts]=funSigma;
  fSigmaFunLow[fNcuts]=min;
  fSigmaFunUp[fNcuts]=max;

  AddCut(det,type,nSigmaLow,nSigmaUp,0,0,exclude,pidBitType,-1);
}

//______________________________________________
void AliDielectronPID::AddCut(DetType det, AliPID::EParticleType type, THnBase * const histLow, Double_t nSigmaUp,
                              Double_t min/*=0*/, Double_t max/*=0*/, Bool_t exclude/*=kFALSE*/,
                              UInt_t pidBitType/*=AliDielectronPID::kRequire*/, Int_t var/*=-1*/)
{
  //
  // cut using a THnBase as a lower cut
  //
  if(histLow==0x0){
    AliError("A valid histogram is required for the lower cut. Not adding the cut!");
    return;
  }
  fMapElectronCutLow[fNcuts]=histLow;
  // fill used variables into map
  for(Int_t idim=0; idim<fMapElectronCutLow[fNcuts]->GetNdimensions(); idim++) {
    TString vari(fMapElectronCutLow[fNcuts]->GetAxis(idim)->GetName());
    fUsedVars->SetBitNumber(AliDielectronVarManager::GetValueType(vari.Data()), kTRUE);
  }
  AddCut(det,type,0.,nSigmaUp,min,max,exclude,pidBitType,var);
}
//______________________________________________
void AliDielectronPID::AddCut(DetType det, AliPID::EParticleType type, Double_t nSigmaLow, Double_t nSigmaUp,
                              AliDielectronVarCuts *var, Bool_t exclude/*=kFALSE*/,
                              UInt_t pidBitType/*=AliDielectronPID::kRequire*/)
{
  //
  // Add a pid nsigma cut
  // use response of detector 'det' in the ranges for variables defined in var
  // use a sigma band between 'nSigmaLow' and 'nSigmaUp'
  // if nSigmaUp==-99999. then nSigmaLow will be uesd as a symmetric band +- nSigmaLow
  // specify whether to 'exclude' the given band
  //
  if(!var) return;
  if (fNcuts>=kNmaxPID){
    AliError(Form("only %d pid cut ranges allowed",kNmaxPID));
    return;
  }
  if (TMath::Abs(nSigmaUp+99999.)<1e-20){
    nSigmaUp=TMath::Abs(nSigmaLow);
    nSigmaLow=-1.*nSigmaUp;
  }
  fDetType[fNcuts]=det;
  fPartType[fNcuts]=type;
  fNsigmaLow[fNcuts]=nSigmaLow;
  fNsigmaUp[fNcuts]=nSigmaUp;
  fExclude[fNcuts]=exclude;
  fRequirePIDbit[fNcuts]=pidBitType;
  fVarCuts[fNcuts]=var;

  AliDebug(1,Form("Add PID cut %d: sigma [% .1f,% .1f] \n",
		  fNcuts,nSigmaLow,nSigmaUp));
  
  ++fNcuts;

}

//______________________________________________
Bool_t AliDielectronPID::IsSelected(TObject* track)
{
  //
  // perform PID cuts
  //

  //loop over all cuts
  AliVTrack *part=static_cast<AliVTrack*>(track);
  AliESDtrack *esdTrack=0x0;
  AliAODTrack *aodTrack=0x0;
  Double_t origdEdx=-1;
  
  // apply ETa correction, remove once this is in the tender
  if( (part->IsA() == AliESDtrack::Class()) ){
    esdTrack=static_cast<AliESDtrack*>(part);
    origdEdx=esdTrack->GetTPCsignal();
    esdTrack->SetTPCsignal(origdEdx/GetEtaCorr(esdTrack)/fgCorrdEdx,esdTrack->GetTPCsignalSigma(),esdTrack->GetTPCsignalN());
  } else if ( (part->IsA() == AliAODTrack::Class()) ){
    aodTrack=static_cast<AliAODTrack*>(track);
    AliAODPid *pid=const_cast<AliAODPid*>(aodTrack->GetDetPid());
    if (pid){
      origdEdx=pid->GetTPCsignal();
      pid->SetTPCsignal(origdEdx/GetEtaCorr(aodTrack)/fgCorrdEdx);
    }
  }

  // check for corrections and add their variables to the fill map
  if(fgFunCntrdCorr)  {
    fUsedVars->SetBitNumber(fgFunCntrdCorr->GetXaxis()->GetUniqueID(), kTRUE);
    fUsedVars->SetBitNumber(fgFunCntrdCorr->GetYaxis()->GetUniqueID(), kTRUE);
    fUsedVars->SetBitNumber(fgFunCntrdCorr->GetZaxis()->GetUniqueID(), kTRUE);
  }
  if(fgFunWdthCorr)  {
    fUsedVars->SetBitNumber(fgFunWdthCorr->GetXaxis()->GetUniqueID(), kTRUE);
    fUsedVars->SetBitNumber(fgFunWdthCorr->GetYaxis()->GetUniqueID(), kTRUE);
    fUsedVars->SetBitNumber(fgFunWdthCorr->GetZaxis()->GetUniqueID(), kTRUE);
  }

  //Fill values
  Double_t values[AliDielectronVarManager::kNMaxValues];
  AliDielectronVarManager::SetFillMap(fUsedVars);
  AliDielectronVarManager::Fill(track,values);

  Bool_t selected=kFALSE;
  fPIDResponse=AliDielectronVarManager::GetPIDResponse();
  for (UChar_t icut=0; icut<fNcuts; ++icut){
    Double_t min=fmin[icut];
    Double_t max=fmax[icut];
    Double_t val=values[fActiveCuts[icut]];

    // test var range. In case min==max do not cut
    if ( fVarCuts[icut] ) {
      if ( !fVarCuts[icut]->IsSelected(part) ) continue;
    }
    else if ( ( (TMath::Abs(min-max)>1e-20) && (val<min || val>=max) ) ) {
	continue;
    }

    // check if fFunSigma is set, then check if 'part' is in sigma range of the function
    if(fFunSigma[icut]){
        val= fPIDResponse->NumberOfSigmasTPC(part, fPartType[icut]);
        if (fPartType[icut]==AliPID::kElectron){
            val-=fgCorr;
        }
        min= fFunSigma[icut]->Eval(part->GetTPCmomentum())+fSigmaFunLow[icut];
        max= fFunSigma[icut]->Eval(part->GetTPCmomentum())+fSigmaFunUp[icut];
        if(val<min || val>=max) continue;
    }

    switch (fDetType[icut]){
    case kITS:
      selected = IsSelectedITS(part,icut);
      break;
    case kTPC:
      selected = IsSelectedTPC(part,icut,values);
      break;
    case kTRD:
      selected = IsSelectedTRD(part,icut);
      break;
    case kTRDeleEff:
      selected = IsSelectedTRDeleEff(part,icut);
      break;
    case kTRDeleEff2D:
      selected = IsSelectedTRDeleEff(part,icut,AliTRDPIDResponse::kLQ2D);
      break;
    case kTOF:
      selected = IsSelectedTOF(part,icut);
      break;
    case kEMCAL:
      selected = IsSelectedEMCAL(part,icut);
      break;
    }
    if (!selected) {
      if (esdTrack) esdTrack->SetTPCsignal(origdEdx,esdTrack->GetTPCsignalSigma(),esdTrack->GetTPCsignalN());
      else if (aodTrack){
        AliAODPid *pid=const_cast<AliAODPid*>(aodTrack->GetDetPid());
        if (pid) pid->SetTPCsignal(origdEdx);
      }

      return kFALSE;
    }
  }

  if (esdTrack) esdTrack->SetTPCsignal(origdEdx,esdTrack->GetTPCsignalSigma(),esdTrack->GetTPCsignalN());
  else if (aodTrack){
    AliAODPid *pid=const_cast<AliAODPid*>(aodTrack->GetDetPid());
    if (pid) pid->SetTPCsignal(origdEdx);
  }
  return selected;
}

//______________________________________________
Bool_t AliDielectronPID::IsSelectedITS(AliVTrack * const part, Int_t icut)
{
  //
  // ITS part of the PID check
  // Don't accept the track if there was no pid bit set
  //
  AliPIDResponse::EDetPidStatus pidStatus = fPIDResponse->CheckPIDStatus(AliPIDResponse::kITS,part);
  if (fRequirePIDbit[icut]==AliDielectronPID::kRequire&&(pidStatus!=AliPIDResponse::kDetPidOk)) return kFALSE;
  if (fRequirePIDbit[icut]==AliDielectronPID::kIfAvailable&&(pidStatus!=AliPIDResponse::kDetPidOk)) return kTRUE;

  Double_t mom=part->P();
  
  Float_t numberOfSigmas=fPIDResponse->NumberOfSigmasITS(part, fPartType[icut]);
  
  // test if we are supposed to use a function for the cut
  if (fFunUpperCut[icut]) fNsigmaUp[icut] =fFunUpperCut[icut]->Eval(mom);
  if (fFunLowerCut[icut]) fNsigmaLow[icut]=fFunLowerCut[icut]->Eval(mom);
  
  Bool_t selected=((numberOfSigmas>=fNsigmaLow[icut])&&(numberOfSigmas<=fNsigmaUp[icut]))^fExclude[icut];
  return selected;
}

//______________________________________________
Bool_t AliDielectronPID::IsSelectedTPC(AliVTrack * const part, Int_t icut, Double_t *values)
{
  //
  // TPC part of the PID check
  // Don't accept the track if there was no pid bit set
  //
  AliPIDResponse::EDetPidStatus pidStatus = fPIDResponse->CheckPIDStatus(AliPIDResponse::kTPC,part);
  if (fRequirePIDbit[icut]==AliDielectronPID::kRequire&&(pidStatus!=AliPIDResponse::kDetPidOk)) return kFALSE;
  if (fRequirePIDbit[icut]==AliDielectronPID::kIfAvailable&&(pidStatus!=AliPIDResponse::kDetPidOk)) return kTRUE;

  
  Float_t numberOfSigmas=fPIDResponse->NumberOfSigmasTPC(part, fPartType[icut]);

  // eta corrections
  if (fPartType[icut]==AliPID::kElectron){
    // old way 1D
    numberOfSigmas-=fgCorr;
    // via functions (1-3D)
    numberOfSigmas-=GetCntrdCorr(part);
    numberOfSigmas/=GetWdthCorr(part);
  }

  // matching of MC and data //

  // test if we are supposed to use a function for the cut (matching via fits)
  if (fFunUpperCut[icut]) fNsigmaUp[icut] =fFunUpperCut[icut]->Eval(values[AliDielectronVarManager::kPIn]);
  if (fFunLowerCut[icut]) fNsigmaLow[icut]=fFunLowerCut[icut]->Eval(values[AliDielectronVarManager::kPIn]);

  // test if we are using cut maps (in calibrated units)
  Double_t lowElectronCut = fNsigmaLow[icut];
  Double_t upElectronCut  = fNsigmaUp[icut];

  if((fPartType[icut]==AliPID::kElectron) && (fMapElectronCutLow[icut] )) {
    Double_t *vals = new Double_t[fMapElectronCutLow[icut]->GetNdimensions()];//={-1};
    // get array of values for the corresponding dimensions using axis names
    for(Int_t idim=0; idim<fMapElectronCutLow[icut]->GetNdimensions(); idim++) {
      vals[idim] = values[AliDielectronVarManager::GetValueType(fMapElectronCutLow[icut]->GetAxis(idim)->GetName())];
      // printf(" \t %s %.3f ",fMapElectronCutLow[icut]->GetAxis(idim)->GetName(),vals[idim]);
    }
    // find bin for values (w/o creating it in case it is not filled)
    Long_t bin = fMapElectronCutLow[icut]->GetBin(vals,kFALSE);
    if(bin>0) lowElectronCut=fMapElectronCutLow[icut]->GetBinContent(bin);
    else lowElectronCut=100;
    //    printf("  low cut %.3f (%ld) \n", lowElectronCut,bin);
    delete [] vals;
  }


  Bool_t selected=((numberOfSigmas>=lowElectronCut)&&(numberOfSigmas<=upElectronCut))^fExclude[icut];
  return selected;
}

//______________________________________________
Bool_t AliDielectronPID::IsSelectedTRD(AliVTrack * const part, Int_t icut)
{
  //   
  // TRD part of the pid check
  // the TRD checks on the probabilities.
  //

  AliPIDResponse::EDetPidStatus pidStatus = fPIDResponse->CheckPIDStatus(AliPIDResponse::kTRD,part);
  if (fRequirePIDbit[icut]==AliDielectronPID::kRequire&&(pidStatus!=AliPIDResponse::kDetPidOk)) return kFALSE;
  if (fRequirePIDbit[icut]==AliDielectronPID::kIfAvailable&&(pidStatus!=AliPIDResponse::kDetPidOk)) return kTRUE;

  if (fRequirePIDbit[icut]==AliDielectronPID::kIfAvailable && (part->GetTRDntrackletsPID()<4)) return kTRUE;

  Double_t p[AliPID::kSPECIES]={0.};
  fPIDResponse->ComputeTRDProbability(part,AliPID::kSPECIES,p);
  Float_t particleProb=p[fPartType[icut]];

  Bool_t selected=((particleProb>=fNsigmaLow[icut])&&(particleProb<=fNsigmaUp[icut]))^fExclude[icut];
  return selected;
}

//______________________________________________
Bool_t AliDielectronPID::IsSelectedTRDeleEff(AliVTrack * const part, Int_t icut, AliTRDPIDResponse::ETRDPIDMethod PIDmethod)
{
  //
  // TRD part of the pid check using electron efficiency requirement
  // in this case the upper limit as well as the particle specie is ignored 
  //   and the lower limit regarded as the requested electron efficiency
  //

  AliPIDResponse::EDetPidStatus pidStatus = fPIDResponse->CheckPIDStatus(AliPIDResponse::kTRD,part);
  if (fRequirePIDbit[icut]==AliDielectronPID::kRequire&&(pidStatus!=AliPIDResponse::kDetPidOk)) return kFALSE;
  if (fRequirePIDbit[icut]==AliDielectronPID::kIfAvailable&&(pidStatus!=AliPIDResponse::kDetPidOk)) return kTRUE;

  Double_t centrality = -1.;
  if(part->IsA() == AliESDtrack::Class())
    centrality=(const_cast<AliESDEvent*>( (static_cast<const AliESDtrack*>(part))->GetESDEvent()) )->GetCentrality()->GetCentralityPercentile("V0M");
  if(part->IsA() == AliAODTrack::Class())
    centrality=(const_cast<AliAODEvent*>( (static_cast<const AliAODTrack*>(part))->GetAODEvent()) )->GetCentrality()->GetCentralityPercentile("V0M");

  Bool_t selected=fPIDResponse->IdentifiedAsElectronTRD(part,fNsigmaLow[icut], centrality, PIDmethod)^fExclude[icut];
  return selected;
}

//______________________________________________
Bool_t AliDielectronPID::IsSelectedTOF(AliVTrack * const part, Int_t icut)
{
  //
  // TOF part of the PID check
  // Don't accept the track if there was no pid bit set
  //
  AliPIDResponse::EDetPidStatus pidStatus = fPIDResponse->CheckPIDStatus(AliPIDResponse::kTOF,part);
  if (fRequirePIDbit[icut]==AliDielectronPID::kRequire&&(pidStatus!=AliPIDResponse::kDetPidOk)) return kFALSE;
  if (fRequirePIDbit[icut]==AliDielectronPID::kIfAvailable&&(pidStatus!=AliPIDResponse::kDetPidOk)) return kTRUE;

  Float_t numberOfSigmas=fPIDResponse->NumberOfSigmasTOF(part, fPartType[icut]);
  
  Bool_t selected=((numberOfSigmas>=fNsigmaLow[icut])&&(numberOfSigmas<=fNsigmaUp[icut]))^fExclude[icut];
  return selected;
}

//______________________________________________
Bool_t AliDielectronPID::IsSelectedEMCAL(AliVTrack * const part, Int_t icut)
{
  //
  // emcal pid selecttion
  //

  //TODO: correct way to check for emcal pid?
  Float_t numberOfSigmas=fPIDResponse->NumberOfSigmasEMCAL(part, fPartType[icut]);

  Bool_t hasPID=numberOfSigmas>-998.;

  if (fRequirePIDbit[icut]==AliDielectronPID::kRequire&&!hasPID) return kFALSE;
  if (fRequirePIDbit[icut]==AliDielectronPID::kIfAvailable&&!hasPID) return kTRUE;


  Bool_t selected=((numberOfSigmas>=fNsigmaLow[icut])&&(numberOfSigmas<=fNsigmaUp[icut]))^fExclude[icut];
  return selected;
}

//______________________________________________
void AliDielectronPID::SetDefaults(Int_t def){
  //
  // initialise default pid strategies
  //

  if (def==0){
    // 2sigma bands TPC:
    // - include e
    // - exclude mu,K,pi,p
    // -complete p range
    AddCut(kTPC,AliPID::kElectron,2);
    AddCut(kTPC,AliPID::kMuon,-2.,2.,0.,0.,kTRUE);
    AddCut(kTPC,AliPID::kPion,-2.,2.,0.,0.,kTRUE);
    AddCut(kTPC,AliPID::kKaon,-2.,2.,0.,0.,kTRUE);
    AddCut(kTPC,AliPID::kProton,-2.,2.,0.,0.,kTRUE);
  } else if (def==1) {
    // 2sigma bands TPC:
    // - include e 0<p<inf
    // - exclude mu,K,pi,p 0<p<2
    AddCut(kTPC,AliPID::kElectron,2.);
    AddCut(kTPC,AliPID::kMuon,-2.,2.,0.,2.,kTRUE);
    AddCut(kTPC,AliPID::kPion,-2.,2.,0.,2.,kTRUE);
    AddCut(kTPC,AliPID::kKaon,-2.,2.,0.,2.,kTRUE);
    AddCut(kTPC,AliPID::kProton,-2.,2.,0.,2.,kTRUE);
    
  } else if (def==2) {
    // include 2sigma e TPC
    // 3sigma bands TOF
    // - exclude K,P
    AddCut(kTPC,AliPID::kElectron,-3.,3.);
    AddCut(kTPC,AliPID::kPion,-3.,3.,0.,0.,kTRUE);
    AddCut(kTPC,AliPID::kProton,-3.,3.,0.,0.,kTRUE);

  } else if (def==3 || def==4) { // def3 and def4 are the same??
    // include 2sigma e TPC
    // 3sigma bands TOF
    // - exclude K 0<p<1
    // - exclude P 0<p<2
    AddCut(kTPC,AliPID::kElectron,2);
    AddCut(kTOF,AliPID::kKaon,-3.,3.,0.,1.,kTRUE);
    AddCut(kTOF,AliPID::kProton,-6.,6.,0.,1.,kTRUE);
    AddCut(kTOF,AliPID::kProton,-3.,3.,1.,2.,kTRUE);
    
  } else if (def==5) {
    AddCut(kTPC,AliPID::kElectron,-0.5,3);
    AddCut(kTOF,AliPID::kElectron,-3,3,0,1.5);
  } else if (def==6) {
    // lower cut TPC: parametrisation by HFE
    // upper cut TPC: 3 sigma
    // TOF ele band 3sigma 0<p<1.5GeV
    TF1 *lowerCut=new TF1("lowerCut", "[0] * TMath::Exp([1]*x)", 0, 100);
    lowerCut->SetParameters(-2.7,-0.4357);
    AddCut(kTPC,AliPID::kElectron,lowerCut,3.);
    AddCut(kTOF,AliPID::kElectron,-3,3,0,1.5);
  } else if (def==7) {
    // wide TPC cut
    // TOF ele band 3sigma 0<p<1.5GeV
    AddCut(kTPC,AliPID::kElectron,10.);
    AddCut(kTOF,AliPID::kElectron,-3,3,0,1.5);
  } else if (def==8) {
    // TOF 5 sigma inclusion if TOFpid available
    // this should reduce K,p,Pi to a large extent
    AddCut(kTOF,AliPID::kElectron,-5,5,0,200,kFALSE,AliDielectronPID::kIfAvailable);
  } else if (def==9) {
    // lower cut TPC: parametrisation by HFE
    // upper cut TPC: 3 sigma
    // TOF 5 sigma inclusion if TOFpid available
    // this should reduce K,p,Pi to a large extent
    TF1 *lowerCut=new TF1("lowerCut", "[0] * TMath::Exp([1]*x)", 0, 100);
    lowerCut->SetParameters(-2.65,-0.6757);
    AddCut(kTPC,AliPID::kElectron,lowerCut,4.);
    AddCut(kTOF,AliPID::kElectron,-5,5,0,200,kFALSE,AliDielectronPID::kIfAvailable);

  } else if (def==10) {
    AddCut(kTOF,AliPID::kElectron,-5,5,0,200,kFALSE,AliDielectronPID::kIfAvailable);
    AddCut(kTPC,AliPID::kElectron,3.);
    AddCut(kTPC,AliPID::kPion,-3.,3.,0.,0.,kTRUE);
    AddCut(kTPC,AliPID::kProton,-3.,3.,0.,0.,kTRUE);
    
  } else if (def==11) {
    // lower cut TPC: parametrisation by HFE
    // only use from period d on !!
    // upper cut TPC: 3 sigma
    // TOF ele band 3sigma 0<p<2.0GeV
    TF1 *lowerCut=new TF1("lowerCut", "[0] * TMath::Exp([1]*x)+[2]", 0, 100);
    lowerCut->SetParameters(-3.718,-0.4,0.27);
    AddCut(kTPC,AliPID::kElectron,lowerCut,3.);
    AddCut(kTOF,AliPID::kElectron,-3,3,0,2.);
  } else if (def==12) {
    // lower cut TPC: parametrisation by HFE
    // only use from period d on !!
    // upper cut TPC: 3 sigma
    // TOF 5 sigma inclusion if TOFpid available
    // this should reduce K,p,Pi to a large extent
    TF1 *lowerCut=new TF1("lowerCut", "[0] * TMath::Exp([1]*x)+[2]", 0, 100);
    lowerCut->SetParameters(-3.718,-0.4,0.27);
    AddCut(kTPC,AliPID::kElectron,lowerCut,4.);
    AddCut(kTOF,AliPID::kElectron,-5,5,0,200,kFALSE,AliDielectronPID::kIfAvailable);
  }
  else if (def==13) {
    // TPC electron inclusion
    // TOF electron inclusion if available
    AddCut(kTOF,AliPID::kElectron,-3.,3.,0,200,kFALSE,AliDielectronPID::kIfAvailable);
    AddCut(kTPC,AliPID::kElectron,10.);
  }
  else if (def==14) {
    // TRD 1D 90% elec eff, 4-6 tracklets
    // TPC electron inclusion
    // TOF electron inclusion if available
    AddCut(AliDielectronPID::kTRDeleEff,AliPID::kElectron,.9,1.,3.5,6.,kFALSE,
	   AliDielectronPID::kIfAvailable,AliDielectronVarManager::kTRDpidQuality);
    AddCut(kTOF,AliPID::kElectron,-3.,3.,0,200,kFALSE,AliDielectronPID::kIfAvailable);
    AddCut(kTPC,AliPID::kElectron,10.);
  }
  else if (def==15) {
    // TRD 1D 90% elec eff, 4-6 tracklets, chi2 < 2
    // TPC electron inclusion
    // TOF electron inclusion if available
    AddCut(AliDielectronPID::kTRDeleEff,AliPID::kElectron,.9,1.,3.5,6.,kFALSE,
	   AliDielectronPID::kIfAvailable,AliDielectronVarManager::kTRDpidQuality);
    AddCut(AliDielectronPID::kTRDeleEff,AliPID::kElectron,.9,1.,0.,2.,kFALSE,
	   AliDielectronPID::kIfAvailable,AliDielectronVarManager::kTRDchi2);
    AddCut(kTOF,AliPID::kElectron,-3.,3.,0,200,kFALSE,AliDielectronPID::kIfAvailable);
    AddCut(kTPC,AliPID::kElectron,10.);
  }
  else if (def==16) {
    // TPC electron inclusion
    // TOF electron inclusion if available
    AddCut(kTOF,AliPID::kElectron,-3.,3.,0,200,kFALSE,AliDielectronPID::kIfAvailable);
    AddCut(kTPC,AliPID::kElectron,-3.5,+3.5);
  }

}

//______________________________________________
void AliDielectronPID::SetCorrVal(Double_t run)
{
  //
  // set correction value for run
  //
  fgCorr=0.;
  fgCorrdEdx=1.;
  
  if (fgFitCorr){
    fgCorr=fgFitCorr->Eval(run);
    if (run<fgFitCorr->GetX()[0]) fgCorr=fgFitCorr->GetY()[0];
    if (run>fgFitCorr->GetX()[fgFitCorr->GetN()-1]) fgCorr=fgFitCorr->GetY()[fgFitCorr->GetN()-1];
  }

  if (fgdEdxRunCorr){
    fgCorrdEdx=fgdEdxRunCorr->Eval(run);
    if (run<fgdEdxRunCorr->GetX()[0]) fgCorrdEdx=fgdEdxRunCorr->GetY()[0];
    if (run>fgdEdxRunCorr->GetX()[fgdEdxRunCorr->GetN()-1]) fgCorrdEdx=fgdEdxRunCorr->GetY()[fgdEdxRunCorr->GetN()-1];
  }
}

//______________________________________________
Double_t AliDielectronPID::GetEtaCorr(const AliVTrack *track)
{
  //
  // return eta correction
  //
  if (!fgFunEtaCorr) return 1;
  return fgFunEtaCorr->Eval(track->Eta());
}

//______________________________________________
Double_t AliDielectronPID::GetPIDCorr(const AliVTrack *track, TH1 *hist)
{
  //
  // return correction value
  //
  //TODO: think about taking an values array as argument to reduce # var fills

  //Fill only event and vparticle values (otherwise we end up in a circle)
  Double_t values[AliDielectronVarManager::kNMaxValues];
  AliDielectronVarManager::FillVarVParticle(track,values);

  TF1 *fun = (TF1*)hist->GetListOfFunctions()->At(0);
  Int_t dim=(fun?fun->GetNdim():hist->GetDimension());

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