ROOT logo
//  $Id$

//**************************************************************************
//* This file is property of and copyright by the ALICE Project            * 
//* ALICE Experiment at CERN, All rights reserved.                         *
//*                                                                        *
//* Primary Authors: Matthias Richter <Matthias.Richter@ift.uib.no>        *
//*                  Sedat Altinpinar <Sedat.Altinpinar@cern.ch>           *
//*                  Hege Erdal       <hege.erdal@gmail.com>               *
//*                                                                        *
//* 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.                  *
//**************************************************************************

/// @file   AliDxHFEParticleSelectionEl.cxx
/// @author Sedat Altinpinar, Hege Erdal, Matthias Richter
/// @date   2012-03-19
/// @brief  D0 selection for D0-HFE correlation
///
#include "AliDxHFEParticleSelectionEl.h"
#include "AliSelectNonHFE.h"
#include "AliReducedParticle.h"
#include "AliESDtrackCuts.h"
#include "AliVParticle.h"
#include "AliVEvent.h"
#include "AliPID.h"
#include "AliPIDResponse.h"
#include "AliHFEcontainer.h"
#include "AliHFEpid.h"
#include "AliHFEpidBase.h"
#include "AliHFEtools.h"
#include "AliHFEcuts.h"
#include "AliAODTrack.h"
#include "AliAODEvent.h"
#include "AliAnalysisDataSlot.h"
#include "AliAnalysisDataContainer.h"
#include "AliAnalysisManager.h"
#include "AliExternalTrackParam.h"
#include "AliAODVertex.h"
#include "AliHFEextraCuts.h"
#include "AliCFManager.h"
#include "THnSparse.h"
#include "AliLog.h"
#include "TH1F.h"
#include "TH2F.h"
#include "TAxis.h"
#include "TList.h"
#include "TObjArray.h"
#include "AliKFParticle.h"
#include "AliKFVertex.h"
#include <iostream>
#include <cerrno>
#include <memory>

using namespace std;

/// ROOT macro for the implementation of ROOT specific class methods
ClassImp(AliDxHFEParticleSelectionEl)

AliDxHFEParticleSelectionEl::AliDxHFEParticleSelectionEl(const char* opt)
  : AliDxHFEParticleSelection("electron", opt)
  , fPIDTOFTPC(NULL)
  , fPIDTOF(NULL)
  , fPIDTPC(NULL)
  , fElectronProperties(NULL)
  , fHistoList(NULL)
  , fCutPidList(NULL)
  , fPIDResponse(NULL)
  , fCuts(NULL)
  , fSelNHFE(NULL)
  , fTrackCuts(NULL)
  , fCFM(NULL)
  , fFinalCutStep(kPIDTOFTPC)
  , fInvMassLow(0.1)
  , fUseInvMassCut(kNoInvMass)
  , fSystem(0)
  , fTrackNum(0)
  , fImpactParamCutRadial(3)
  , fEtaCut(0.8)
  , fSurvivedCutStep(kNotSelected)
  , fStoreCutStepInfo(kFALSE)

{
  // constructor
  // 
  // 
  // 
  // 
  ParseArguments(opt);
}

AliDxHFEParticleSelectionEl::~AliDxHFEParticleSelectionEl()
{
  // destructor
  if (fElectronProperties) {
    delete fElectronProperties;
    fElectronProperties=NULL;
  }
  if(fHistoList){
    delete fHistoList;
    fHistoList=NULL;
  }
  if(fCFM){
    delete fCFM;
    fCFM=NULL;
  }
  if(fPIDResponse){
    delete fPIDResponse;
    fPIDResponse=NULL;
  }
  // NOTE: external objects fPID and fCuts are not deleted here
  fPIDTOFTPC=NULL;
  fPIDTOF=NULL;
  fPIDTPC=NULL;
  fCuts=NULL;
  if(fSelNHFE){
    delete fSelNHFE;
    fSelNHFE=NULL;
  }
  if(fTrackCuts){
    delete fTrackCuts;
    fTrackCuts=NULL;
  }
}

const char* AliDxHFEParticleSelectionEl::fgkCutBinNames[]={
  "kRecKineITSTPC",
  "kRecPrim",
  "kHFEcuts",
  "kHFEcutsTOFPID",
  "kHFEcutsTPCPID",
  "kPIDTOF",
  "kPIDTPC",
  "kPIDTPCTOF",
  "kINVMASS",
  "Selected e"
};

int AliDxHFEParticleSelectionEl::Init()
{
  //
  // init function
  // 
  int iResult=0;
  // TODO: think about initializing fSelNHFE and fTrackCuts from the macro
  //Initialization of invariant mass cut function (AliSelectNonHFE)
  fSelNHFE= new AliSelectNonHFE("IM","IM");
  // Cuts for associated track in Inv Mass cut
  fTrackCuts = new AliESDtrackCuts();
  fTrackCuts->SetAcceptKinkDaughters(kFALSE);
  fTrackCuts->SetRequireTPCRefit(kTRUE);
  fTrackCuts->SetEtaRange(-0.9,0.9);
  fTrackCuts->SetRequireSigmaToVertex(kTRUE);
  fTrackCuts->SetMaxChi2PerClusterTPC(4.0);
  fTrackCuts->SetMinNClustersTPC(80);
  fTrackCuts->SetPtRange(0.3,1e10);

  fSelNHFE->SetTrackCuts(-3, 3, fTrackCuts);
  fSelNHFE->SetInvariantMassCut(fInvMassLow);
  fSelNHFE->SetAlgorithm("KF");
  fSelNHFE->SetAODanalysis(kTRUE);


  // Implicit call to InitControlObjects() before setting up CFM and fCuts
  // (if not there)
  iResult=AliDxHFEParticleSelection::Init();
  if (iResult<0) return iResult;

  //--------Initialize correction Framework and Cuts-------------------------
  // Consider moving this, either to separate function or
  // add a set function for AliCFManager
  // Do we need this? Can we just call AliHFEcuts::CheckParticleCuts
  AliInfo("Setting up CFM");
  fCFM = new AliCFManager;
  // the setup of cut objects is done in AliHFEcuts::Initialize
  // the ids used by this class must be the same, the code might be broken if
  // the sequence in AliHFEcuts::Initialize is changed
  const Int_t kNcutSteps = AliHFEcuts::kNcutStepsMCTrack + AliHFEcuts::kNcutStepsRecTrack + AliHFEcuts::kNcutStepsDETrack;
  // reset pointers in the CF manager
  fCFM->SetNStepParticle(kNcutSteps);
  for(Int_t istep = 0; istep < kNcutSteps; istep++) {
    fCFM->SetParticleCutsList(istep, NULL);
  }
  if(!fCuts) {
    AliWarning("Cuts not available. Default cuts will be used");
    fCuts = new AliHFEcuts;
    fCuts->CreateStandardCuts();
  }
  // TODO: error handling?
  fCuts->Initialize(fCFM);

  //Setting up TPC PID
  //Add settings for asymmetric cut on nSigma TPC
  //TODO: have this completely set up from addtask 
  const int paramSize=4;
  Double_t params[paramSize];
  memset(params, 0, sizeof(Double_t)*paramSize);
  params[0]=-1.;
  fPIDTPC = new AliHFEpid("hfePidTPC");
  if(!fPIDTPC->GetNumberOfPIDdetectors()) { 
    fPIDTPC->AddDetector("TPC",1);
  }
  fPIDTPC->ConfigureTPCdefaultCut(NULL, params, 3.);
  fPIDTPC->InitializePID();

  if(fUseInvMassCut>kNoInvMass)  AliDebug(2,Form("Setting up with invariant mass cut of %f",fInvMassLow));
  if(fStoreCutStepInfo) AliDebug(2,"will store cut step info");
  AliDebug(2,Form("Stopping selection after step: %d", fFinalCutStep));
  
  return 0;

}

THnSparse* AliDxHFEParticleSelectionEl::DefineTHnSparse()
{
  //
  // Defines the THnSparse. For now, only calls CreatControlTHnSparse
  // TODO: Add also invariant mass? here and in correlation, to do cut afterwards..

  // here is the only place to change the dimension
  const int thnSize = 3;
  InitTHnSparseArray(thnSize);
  const double Pi=TMath::Pi();
  TString name;
  name.Form("%s info", GetName());

  //                                 0    1       2
  // 	 	                     Pt   Phi    Eta
  int         thnBins [thnSize] = { 1000,  200, 500};
  double      thnMin  [thnSize] = {    0,    0, -1.};
  double      thnMax  [thnSize] = {  100, 2*Pi,  1.};
  const char* thnNames[thnSize] = { "Pt","Phi","Eta"};

  return CreateControlTHnSparse(name,thnSize,thnBins,thnMin,thnMax,thnNames);
}

int AliDxHFEParticleSelectionEl::InitControlObjects()
{
  /// init control and monitoring objects
  AliInfo("Electron THnSparse");

  fElectronProperties=DefineTHnSparse();
  AddControlObject(fElectronProperties);

  fHistoList=new TList;
  fHistoList->SetName("HFE Histograms");
  fHistoList->SetOwner();

  // Histogram storing which cuts have been applied to the tracks
  // TODO: revise the names of the histograms, starting with 'f'
  // confuses the reader to think of class members
  fHistoList->Add(CreateControlHistogram("fWhichCut","effective cut for a rejected particle", kNCutLabels, fgkCutBinNames));
  fHistoList->Add(CreateControlHistogram("fTPCnClAOD","Nr TPC clusters/track for all tracks", 160, 0., 159.));
  fHistoList->Add(CreateControlHistogram("fTPCnClSingleTrackCuts","Nr TPC clusters/track After SingleTrackCuts", 160, 0., 159.));
  fHistoList->Add(CreateControlHistogram("fTPCnClTPCTOFPID","Nr TPC clusters/track After TPCTOF PID", 160, 0., 159.));

  double dEdxBins[6]={1000,0.,10.,200,0.,200.};
  double nSigBins[6]={1000,0.,10.,200,-10.,10.};

  // dEdx plots, TPC signal vs momentum
  fHistoList->Add(CreateControl2DHistogram("fdEdx", "dEdx before cuts", dEdxBins,"momentum (GeV/c)","dE/dx in TPC (a.u.)"));
  fHistoList->Add(CreateControl2DHistogram("fdEdxCut", "dEdx after cuts",dEdxBins,"momentum (GeV/c)","dE/dx in TPC (a.u.)"));
  fHistoList->Add(CreateControl2DHistogram("fdEdxPidTOF", "dEdx after TOF pid",dEdxBins,"momentum (GeV/c)","dE/dx in TPC (a.u.)"));
  fHistoList->Add(CreateControl2DHistogram("fdEdxPidTPC", "dEdx after TPC pid",dEdxBins,"momentum (GeV/c)","dE/dx in TPC (a.u.)"));
  fHistoList->Add(CreateControl2DHistogram("fdEdxPid", "dEdx after pid",dEdxBins,"momentum (GeV/c)","dE/dx in TPC (a.u.)"));
  fHistoList->Add(CreateControl2DHistogram("fdEdxIM", "dEdx after Inv Mass",dEdxBins,"momentum (GeV/c)","dE/dx in TPC (a.u.)"));

  // nSigmaTPC vs momentum
  fHistoList->Add(CreateControl2DHistogram("fnSigTPC", "nSigTPC before cuts",nSigBins,"momentum (GeV/c)","nSigma in TPC (a.u.)"));
  fHistoList->Add(CreateControl2DHistogram("fnSigTPCCut", "nSigmaTPC after cuts",nSigBins,"momentum (GeV/c)","nSigma in TPC (a.u.)"));
  fHistoList->Add(CreateControl2DHistogram("fnSigTPCPidTPC", "nSigmaTPC after TPC PID", nSigBins,"momentum (GeV/c)","nSigma in TPC (a.u.)"));
  fHistoList->Add(CreateControl2DHistogram("fnSigTPCPidTOF", "nSigmaTPC after TOF PID", nSigBins,"momentum (GeV/c)","nSigma in TPC (a.u.)"));
  fHistoList->Add(CreateControl2DHistogram("fnSigTPCPid", "nSigmaTPC after PID", nSigBins,"momentum (GeV/c)","nSigma in TPC (a.u.)"));

  // nSigmaTOF vs momentum
  fHistoList->Add(CreateControl2DHistogram("fnSigTOF", "nSigmaTOF before cuts",nSigBins,"momentum (GeV/c)","nSigma in TOF (a.u.)"));  
  fHistoList->Add(CreateControl2DHistogram("fnSigTOFCut", "nSigmaTOF after cuts",nSigBins,"momentum (GeV/c)","nSigma in TOF (a.u.)"));  
  fHistoList->Add(CreateControl2DHistogram("fnSigTOFPidTOF", "nSigmaTOF after TOF PID", nSigBins,"momentum (GeV/c)","nSigma in TOF (a.u.)"));
  fHistoList->Add(CreateControl2DHistogram("fnSigTOFPidTPC", "nSigmaTOF after TPC PID", nSigBins,"momentum (GeV/c)","nSigma in TOF (a.u.)"));
  fHistoList->Add(CreateControl2DHistogram("fnSigTOFPid", "nSigmaTOF after PID", nSigBins,"momentum (GeV/c)","nSigma in TOF (a.u.)"));

  // Invariant mass LS and ULS without cut
  fHistoList->Add(CreateControlHistogram("fInvMassLS", "Invariant mass LS", 1000, 0., 0.5));
  fHistoList->Add(CreateControlHistogram("fInvMassULS", "Invariant mass ULS", 1000, 0., 0.5));

  // Invariant mass LS and ULS without cut, extended x-axis
  fHistoList->Add(CreateControlHistogram("fInvMass2SelLS", "Invariant mass two selected particles LS", 1000, 0., 5.));
  fHistoList->Add(CreateControlHistogram("fInvMass2SelULS", "Invariant mass two selected particles ULS", 1000, 0., 5.));

  // Invariant mass LS and ULS with cut
  // TODO: Remove if remove first try at invariant mass
  fHistoList->Add(CreateControlHistogram("fInvMass2SelLScut", "Invariant mass two selected particles LS (cut)", 1000, 0., 0.5));
  fHistoList->Add(CreateControlHistogram("fInvMass2SelULScut", "Invariant mass two selected particles ULS (cut)", 1000, 0., 0.5));

  fSelNHFE->SetHistMass((TH1F*)fHistoList->FindObject("fInvMassULS"));
  fSelNHFE->SetHistMassBack((TH1F*)fHistoList->FindObject("fInvMassLS"));
  
  AddControlObject(fHistoList);

  return AliDxHFEParticleSelection::InitControlObjects();
}

int AliDxHFEParticleSelectionEl::HistogramParticleProperties(AliVParticle* p, int selectionCode)
{
  /// histogram particle properties
  if (!p) return -EINVAL;
  //if (!fControlObjects) return 0;
  if(selectionCode==0) return  0;
  
  if(fElectronProperties && ParticleProperties()) {
    FillParticleProperties(p, ParticleProperties(), GetDimTHnSparse());
    fElectronProperties->Fill(ParticleProperties());
  }

  return 0;
}

int AliDxHFEParticleSelectionEl::FillParticleProperties(AliVParticle* p, Double_t* data, int dimension) const
{
  // fill the data array from the particle data
  if (!data) return -EINVAL;
  AliAODTrack *track=(AliAODTrack*)p;
  if (!track) return -ENODATA;
  int i=0;
  if (dimension!=GetDimTHnSparse()) {
    // TODO: think about filling only the available data and throwing a warning
    return -ENOSPC;
  }
  data[i++]=track->Pt();
  data[i++]=track->Phi();
  data[i++]=track->Eta();
  return i;
}


TObjArray* AliDxHFEParticleSelectionEl::Select(const AliVEvent* pEvent)
{
  /// create selection from 'Tracks' member of the event,
  /// array contains only pointers but does not own the objects
  /// object array needs to be deleted by caller
  if (!pEvent) return NULL;

  TList* selectedTracks=new TList;
  fSelNHFE->SetPIDresponse(fPIDResponse);
  fPIDTPC->SetPIDResponse(fPIDResponse);
  TObjArray* finalTracks=new TObjArray;
  if (!finalTracks) return NULL;
  finalTracks->SetOwner(kFALSE); // creating new track objects below
  TObjArray* finalTracksIM=new TObjArray;
  if (!finalTracksIM) return NULL;
  finalTracksIM->SetOwner(kFALSE); // creating new track objects below

  int nofTracks=pEvent->GetNumberOfTracks();
  fTrackNum=0;
  int selectionCode=0;
  //  int origin
  for (int itrack=0; itrack<nofTracks; itrack++) {
    selectionCode=0;
    AliVParticle* track=pEvent->GetTrack(itrack);
    selectionCode=IsSelected(track,pEvent);
    fTrackNum++; 
    // If fUseInvMassCut is set to true, only call HistogramParticleProperties
    // (here) for those who didn't pass single track cuts and pid. 
    // if fUseInvMassCut is not set, then call the function for all tracks
    // TODO: Change this when have added invariant mass i thnsparse
    //CHANGED FOR OLD INV MASS
    if (selectionCode==0) continue;
    AliReducedParticle *trackReduced2 =(AliReducedParticle*)CreateParticle(track);
    finalTracks->Add(trackReduced2);
    if(fUseInvMassCut!=kInvMassTwoSelected || selectionCode==0)
      HistogramParticleProperties(trackReduced2, selectionCode);
    selectedTracks->Add(track);
  }

  // Calculating invariant mass for electron pairs with same selection criteria
  // TODO: Could be removed if it is verified that looser cuts is better, but keep
  // for now
  if(selectedTracks->GetSize()>0)
    {
      Bool_t* selTrackIndex=new Bool_t[selectedTracks->GetSize()];
      if (selTrackIndex) {
      InvMassFilter(selectedTracks, selTrackIndex);

      //Only remove electrons if fUseInvMassCut is set
      if(fUseInvMassCut==kInvMassTwoSelected){
	for(Int_t k=0; k<selectedTracks->GetSize(); k++)
	  {
	    selectionCode=0; //Reset selectionCode here to be based on invariant mass cut 
	    //On the basis that selectedTracks and finalTracks contain same particles
	    AliAODTrack *trackIM=(AliAODTrack*)selectedTracks->At(k);
	    AliReducedParticle *trackReduced=(AliReducedParticle*)finalTracks->At(k);
	    if(selTrackIndex[k]==kTRUE)
	      {
		((TH2D*)fHistoList->FindObject("fdEdxIM"))->Fill(trackIM->GetTPCmomentum(), trackIM->GetTPCsignal());
		finalTracksIM->Add(trackReduced);
		selectionCode=1;
	      }
	    HistogramParticleProperties(trackReduced, selectionCode);
	  }
      }
      delete [] selTrackIndex;
      }
      
    }

  HistogramEventProperties(AliDxHFEParticleSelection::kHistoNrTracksPrEvent,finalTracks->GetEntries());
  if(fUseInvMassCut!=kInvMassTwoSelected) 
    return finalTracks; 
  else
    return finalTracksIM;

}

int AliDxHFEParticleSelectionEl::IsSelected(AliVParticle* pEl, const AliVEvent* pEvent)
{
  /// select El candidates
  if(!pEvent){
    AliError("No event information");
    return 0;
  }  
  fSurvivedCutStep=kNotSelected;

  AliAODTrack *track=(AliAODTrack*)pEl;
  fCFM->SetRecEventInfo(pEvent);
  
  ((TH2D*)fHistoList->FindObject("fdEdx"))->Fill(track->GetTPCmomentum(), track->GetTPCsignal());
  ((TH2D*)fHistoList->FindObject("fnSigTPC"))->Fill(track->GetTPCmomentum(), fPIDResponse->NumberOfSigmasTPC(track,AliPID::kElectron));
  ((TH2D*)fHistoList->FindObject("fnSigTOF"))->Fill(track->P(), fPIDResponse->NumberOfSigmasTOF(track,AliPID::kElectron));
  ((TH1D*)fHistoList->FindObject("fTPCnClAOD"))->Fill(track->GetTPCNcls());


  if(fFinalCutStep==kNoCuts){
    Float_t radial=999;
    //Float_t z=999;
    Bool_t acceptTrack=kFALSE;

    //Cut on Eta
    if(TMath::Abs(track->Eta()) < fEtaCut) {
      acceptTrack=kTRUE;
    }

    const Double_t kBeampiperadius=fImpactParamCutRadial;
    Double_t dcaD[2]={-999.,-999.}, covD[3]={-999.,-999.,-999.};

    AliAODEvent *aodevent = (AliAODEvent*)(pEvent);
    if(!aodevent) {
      AliDebug(1, "No aod event available\n");
      return 0;
    }

    AliAODVertex *vtxAODSkip  = aodevent->GetPrimaryVertex();
    if(!vtxAODSkip) return 0;
    AliExternalTrackParam etp; etp.CopyFromVTrack(track);
    if(etp.PropagateToDCA(vtxAODSkip, aodevent->GetMagneticField(), kBeampiperadius, dcaD, covD)) {
      radial = dcaD[0];
      //z = dcaD[1];
    }

    // Cut on z  
    if(acceptTrack && TMath::Abs(radial) < fImpactParamCutRadial){
      acceptTrack=kTRUE;
    }
    
    if(acceptTrack)
      fSurvivedCutStep=kNoCuts;

    if(!acceptTrack) return 0;

    // Should only return at this point if you only want to store all tracks
    AliDebug(2,"Returns after kNoCuts"); 
    ((TH1D*)fHistoList->FindObject("fWhichCut"))->Fill(kSelected); 
    return 1;
  }

  //--------track cut selection-----------------------
  //Using AliHFECuts:
  // RecKine: ITSTPC cuts  
  if(!ProcessCutStep(AliHFEcuts::kStepRecKineITSTPC, track)){
    AliDebug(4,"Cut: kStepRecKineITSTPC");
    ((TH1D*)fHistoList->FindObject("fWhichCut"))->Fill(kRecKineITSTPC);
    return 0;
  }
  if(fStoreCutStepInfo) fSurvivedCutStep=kRecKineITSTPC;
  if(fFinalCutStep==kRecKineITSTPC) {AliDebug(2,"Returns after kStepRecKineITSTPC"); ((TH1D*)fHistoList->FindObject("fWhichCut"))->Fill(kSelected); return 1;}

  // RecPrim
  if(!ProcessCutStep(AliHFEcuts::kStepRecPrim, track)) {
    AliDebug(4,"Cut: kStepRecPrim");
    ((TH1D*)fHistoList->FindObject("fWhichCut"))->Fill(kRecPrim);
    if(!fStoreCutStepInfo) return 0;
    else return 1; //return 1 because it passed cuts above, but not this (no need to go further)
  }
  if(fStoreCutStepInfo) fSurvivedCutStep=kRecPrim;
  if(fFinalCutStep==kRecPrim) {AliDebug(2,"Returns after kRecPrim"); ((TH1D*)fHistoList->FindObject("fWhichCut"))->Fill(kSelected); return 1;}

  // HFEcuts: ITS layers cuts
  if(!ProcessCutStep(AliHFEcuts::kStepHFEcutsITS, track)) {
    AliDebug(4,"Cut: kStepHFEcutsITS");
    ((TH1D*)fHistoList->FindObject("fWhichCut"))->Fill(kHFEcutsITS);
    if(!fStoreCutStepInfo) return 0;
    else return 1; //return 1 because it passed cuts above, but not this (no need to go further)

  }
  if(fStoreCutStepInfo) fSurvivedCutStep=kHFEcutsITS;
  if(fFinalCutStep==kHFEcutsITS) {AliDebug(2,"Returns after kHFEcutsITS "); ((TH1D*)fHistoList->FindObject("fWhichCut"))->Fill(kSelected); return 1;}
  
  // HFE cuts: TOF PID and mismatch flag
  if(!ProcessCutStep(AliHFEcuts::kStepHFEcutsTOF, track)) {
    AliDebug(4,"Cut: kStepHFEcutsTOF");
    ((TH1D*)fHistoList->FindObject("fWhichCut"))->Fill(kHFEcutsTOF);
    if(!fStoreCutStepInfo) return 0;
    else return 1; //return 1 because it passed cuts above, but not this (no need to go further)
  }
  if(fStoreCutStepInfo) fSurvivedCutStep=kHFEcutsTOF;
  if(fFinalCutStep==kHFEcutsTOF) {AliDebug(2,"Returns after kHFEcutsTOF"); ((TH1D*)fHistoList->FindObject("fWhichCut"))->Fill(kSelected); return 1;}
  
  // HFE cuts: TPC PID cleanup
  if(!ProcessCutStep(AliHFEcuts::kStepHFEcutsTPC, track)){
    AliDebug(4,"Cut: kStepHFEcutsTPC");
    ((TH1D*)fHistoList->FindObject("fWhichCut"))->Fill(kHFEcutsTPC);
    if(!fStoreCutStepInfo) return 0;
    else return 1; //return 1 because it passed cuts above, but not this (no need to go further)
  } 
  if(fStoreCutStepInfo) fSurvivedCutStep=kHFEcutsTPC;

  ((TH2D*)fHistoList->FindObject("fdEdxCut"))->Fill(track->GetTPCmomentum(), track->GetTPCsignal());
  ((TH2D*)fHistoList->FindObject("fnSigTPCCut"))->Fill(track->GetTPCmomentum(), fPIDResponse->NumberOfSigmasTPC(track,AliPID::kElectron));
  ((TH2D*)fHistoList->FindObject("fnSigTOFCut"))->Fill(track->P(), fPIDResponse->NumberOfSigmasTOF(track,AliPID::kElectron));
  ((TH1D*)fHistoList->FindObject("fTPCnClSingleTrackCuts"))->Fill(track->GetTPCNcls());

  if(fFinalCutStep==kHFEcutsTPC) {AliDebug(2,"Returns after track cuts"); ((TH1D*)fHistoList->FindObject("fWhichCut"))->Fill(kSelected); return 1;}


  //--------PID selection-----------------------
  AliHFEpidObject hfetrack;
  hfetrack.SetAnalysisType(AliHFEpidObject::kAODanalysis);
  hfetrack.SetRecTrack(track);

  // TODO: configurable colliding system
  // TODO: Check problem with PbPb, for now workaround with setting multiplicity to -1
  if(GetSystem()==1) {
    hfetrack.SetPbPb();
    hfetrack.SetCentrality(-1); 
  }
  else  hfetrack.SetPP();
  //  hfetrack.SetMulitplicity(ncontribVtx);

  // TODO: Put this into a while-loop instead, looping over the number of pid objects in the cut-list?
  // This needs a bit of thinking and finetuning (wrt histogramming)
  if(fPIDTOF && fPIDTOF->IsSelected(&hfetrack)) {
    ((TH2D*)fHistoList->FindObject("fdEdxPidTOF"))->Fill(track->GetTPCmomentum(), track->GetTPCsignal());
    ((TH2D*)fHistoList->FindObject("fnSigTPCPidTOF"))->Fill(track->GetTPCmomentum(), fPIDResponse->NumberOfSigmasTPC(track,AliPID::kElectron));
    ((TH2D*)fHistoList->FindObject("fnSigTOFPidTOF"))->Fill(track->P(), fPIDResponse->NumberOfSigmasTOF(track,AliPID::kElectron));
    if(fStoreCutStepInfo){fSurvivedCutStep=kPIDTOF; }
    if(fFinalCutStep==kPIDTOF) {AliDebug(2,"Returns at PIDTOF");((TH1D*)fHistoList->FindObject("fWhichCut"))->Fill(kSelected); return 1;}
  }
  else{
    ((TH1D*)fHistoList->FindObject("fWhichCut"))->Fill(kPIDTOF);
  }

  if(fFinalCutStep==kPIDTOF) {AliDebug(2,"Returns at PIDTOF"); return 0;}


  if(fPIDTPC && fPIDTPC->IsSelected(&hfetrack)) {
    ((TH2D*)fHistoList->FindObject("fdEdxPidTPC"))->Fill(track->GetTPCmomentum(), track->GetTPCsignal());
    ((TH2D*)fHistoList->FindObject("fnSigTPCPidTPC"))->Fill(track->GetTPCmomentum(), fPIDResponse->NumberOfSigmasTPC(track,AliPID::kElectron));
    ((TH2D*)fHistoList->FindObject("fnSigTOFPidTPC"))->Fill(track->P(), fPIDResponse->NumberOfSigmasTOF(track,AliPID::kElectron));
    if(fStoreCutStepInfo){fSurvivedCutStep=kPIDTPC; }
    if(fFinalCutStep==kPIDTPC) {AliDebug(2,"Returns at PIDTPC"); ((TH1D*)fHistoList->FindObject("fWhichCut"))->Fill(kSelected); return 1;}
  }
  else{
    ((TH1D*)fHistoList->FindObject("fWhichCut"))->Fill(kPIDTPC);
    //return 0; //if rejected by TOF, will also be rejected by TPCTOF
  }
  if(fFinalCutStep==kPIDTPC) {AliDebug(2,"Returns at PIDTTPC"); return 0;}

  //Combined tof & tpc pid
  if(fPIDTOFTPC && fPIDTOFTPC->IsSelected(&hfetrack)) {
    AliDebug(3,"Inside FilldPhi, electron is selected");
    ((TH2D*)fHistoList->FindObject("fdEdxPid"))->Fill(track->GetTPCmomentum(), track->GetTPCsignal());
    ((TH2D*)fHistoList->FindObject("fnSigTPCPid"))->Fill(track->GetTPCmomentum(), fPIDResponse->NumberOfSigmasTPC(track,AliPID::kElectron));
    ((TH2D*)fHistoList->FindObject("fnSigTOFPid"))->Fill(track->P(), fPIDResponse->NumberOfSigmasTOF(track,AliPID::kElectron));
    ((TH1D*)fHistoList->FindObject("fTPCnClTPCTOFPID"))->Fill(track->GetTPCNcls());
    // Only do this if 
    if(fStoreCutStepInfo){
      fSurvivedCutStep=kPIDTOFTPC;

    }
  }
  else{
    ((TH1D*)fHistoList->FindObject("fWhichCut"))->Fill(kPIDTOFTPC);
    AliDebug(4,"Cut: kTPCTOFPID");
    if(!fStoreCutStepInfo) return 0;
    else { return 1; }//return 1 because it passed cuts above, but not this (no need to go further)
  }
  
  if(fUseInvMassCut==kInvMassSingleSelected)
    {
      AliDebug(4,"invmass check");
      fSelNHFE->FindNonHFE(fTrackNum, track, const_cast<AliVEvent*>(pEvent));
      if(fSelNHFE->IsLS() || fSelNHFE->IsULS())
	{
	  //Not selected
	  ((TH1D*)fHistoList->FindObject("fWhichCut"))->Fill(kINVMASS);
	  AliDebug(4,"Cut: Invmass");
	  if(!fStoreCutStepInfo) return 0;
	}
      else
	if(fStoreCutStepInfo) fSurvivedCutStep=kINVMASS;

    }
  ((TH1D*)fHistoList->FindObject("fWhichCut"))->Fill(kSelected);
  return 1;
  
}

void AliDxHFEParticleSelectionEl::SetCuts(TObject* cuts, int level)
{
  /// set cut objects
  if (level==kCutHFE) {
    fCuts=dynamic_cast<AliHFEcuts*>(cuts);
    if (!fCuts && cuts) {
      AliError(Form("Cut object is not of required type AliHFEcuts but %s", cuts->ClassName()));
    }
    return;
  }

  if (level==kCutPIDTOFTPC) {
    fPIDTOFTPC=dynamic_cast<AliHFEpid*>(cuts);
    if (!fPIDTOFTPC && cuts) {
      AliError(Form("cuts object is not of required type AliHFEpid but %s", cuts->ClassName()));
    }
    return;
  }

  if (level==kCutPIDTOF) {
    fPIDTOF=dynamic_cast<AliHFEpid*>(cuts);
    if (!fPIDTOF && cuts) {
      AliError(Form("cuts object is not of required type AliHFEpid but %s", cuts->ClassName()));
    }
    return;
  }
  if(level==kCutList){
    fCutPidList=dynamic_cast<TList*>(cuts);
    if (!fCutPidList && cuts) {
      AliError(Form("cuts object is not of required type TList but %s", cuts->ClassName()));
    }
    else{
      // TODO: Could be done more elegantly, at the moment requires that the cut and pid objects are in 
      // a specific order..
      TObject *obj=NULL;
      int iii=0;
      TIter next(fCutPidList);
      while((obj = next())){
	iii++;
	if(iii==1) {
	  fCuts=dynamic_cast<AliHFEcuts*>(obj);
	  if (!fCuts) 
	    AliError(Form("Cut object is not of required type AliHFEcuts but %s", cuts->ClassName()));
	}
	if(iii==2){
	  fPIDTOFTPC=dynamic_cast<AliHFEpid*>(obj);
	  if (!fPIDTOFTPC) 
	    AliError(Form("(TOFTPC) cuts object is not of required type AliHFEpid but %s", cuts->ClassName()));
	}
	if(iii==3){ 
	  fPIDTOF=dynamic_cast<AliHFEpid*>(obj);
	  if (!fPIDTOF) 
	    AliError(Form("(TOF) cuts object is not of required type AliHFEpid but %s", cuts->ClassName()));
	}
	/*if(iii=4){
	  fPIDTPC=dynamic_cast<AliHFEpid*>(obj);
	  if (!fPIDTPC) 
	    AliError(Form("(TPC) cuts object is not of required type AliHFEpid but %s", cuts->ClassName()));
	    }*/
      }
      
    }
    return;
  }
}

//________________________________________________________________________
Bool_t AliDxHFEParticleSelectionEl::ProcessCutStep(Int_t cutStep, AliVParticle *track)
{
  // Check single track cuts for a given cut step
  const Int_t kMCOffset = AliHFEcuts::kNcutStepsMCTrack;
  if(!fCFM->CheckParticleCuts(cutStep + kMCOffset, track)) return kFALSE;
  //if(!fCuts->CheckParticleCuts(cutStep + kMCOffset, track)) return kFALSE;
  return kTRUE;
}

int AliDxHFEParticleSelectionEl::ParseArguments(const char* arguments)
{
  // parse arguments and set internal flags
  TString strArguments(arguments);
  auto_ptr<TObjArray> tokens(strArguments.Tokenize(" "));
  if (!tokens.get()) return 0;

  AliInfo(strArguments);
  TIter next(tokens.get());
  TObject* token;
  while ((token=next())) {
    TString argument=token->GetName();
    if(argument.BeginsWith("elreco=")){
      argument.ReplaceAll("elreco=", "");
      int selectionStep=kPIDTOFTPC; //Default
      if(argument.CompareTo("alltracks")==0) selectionStep=kNoCuts;      
      if(argument.CompareTo("afterreckineitstpc")==0) selectionStep=kRecKineITSTPC;
      if(argument.CompareTo("afterrecprim")==0) selectionStep=kRecPrim;
      if(argument.CompareTo("afterhfeits")==0) selectionStep=kHFEcutsITS;
      if(argument.CompareTo("afterhfetof")==0) selectionStep=kHFEcutsTOF;
      if(argument.CompareTo("afterhfetpc")==0) selectionStep=kHFEcutsTPC;
      if(argument.CompareTo("aftertrackcuts")==0) selectionStep=kHFEcutsTPC;
      if(argument.CompareTo("aftertofpid")==0) selectionStep=kPIDTOF;
      if(argument.CompareTo("aftertpcpid")==0) selectionStep=kPIDTPC;
      if(argument.CompareTo("afterfullpid")==0) selectionStep=kPIDTOFTPC;
      SetFinalCutStep(selectionStep); 
      continue;   
    }
    if(argument.BeginsWith("twoselectedinvmasscut")){
      fUseInvMassCut=kInvMassTwoSelected;
      AliInfo("Using Invariant mass cut for two selected particles");
      continue;   
    }
    if(argument.BeginsWith("useinvmasscut")){
      fUseInvMassCut=kInvMassSingleSelected;
      AliInfo("Using Invariant mass cut for single selected particle and looser cuts on partner");
      continue;   
    }
    if(argument.BeginsWith("invmasscut=")){
      argument.ReplaceAll("invmasscut=", "");
      fInvMassLow=argument.Atof();
      AliInfo(Form("Using invariant mass cut: %f",fInvMassLow));
      //      fUseInvMassCut=kInvMassSingleSelected;
      continue;   
    }
    if(argument.BeginsWith("impactparamcut=")){
      argument.ReplaceAll("impactparamcut=", "");
      fImpactParamCutRadial=argument.Atof();
      AliInfo(Form("Using impact parameter cut: %f",fImpactParamCutRadial));
      continue;   
    }
    if(argument.BeginsWith("etacut=")){
      argument.ReplaceAll("etacut=", "");
      fEtaCut=argument.Atof();
      AliInfo(Form("Using Eta cut: %f",fEtaCut));
      continue;   
    }
    if(argument.BeginsWith("storelastcutstep")){
      AliInfo("Stores the last cut step");
      SetStoreLastCutStep(kTRUE);
      continue;
    }
    // forwarding of single argument works, unless key-option pairs separated
    // by blanks are introduced
    AliDxHFEParticleSelection::ParseArguments(argument);
  }
  
  return 0;
}


void AliDxHFEParticleSelectionEl::InvMassFilter(TList *elList, Bool_t *selIndx)
{

  //Function for getting invariant mass of electron pairs
   
  for(int i=0; i<((elList->GetSize())-1); i++)
    {
      AliAODTrack *trackAsso=(AliAODTrack*)elList->At(i);
      for(int j=i+1; j<elList->GetSize(); j++)
	{
	  
	  AliAODTrack *track=(AliAODTrack*)elList->At(j);
	  if(trackAsso && track)
	    {
	      
	      Double_t mass=-999., width = -999;
	      Bool_t fFlagLS=kFALSE, fFlagULS=kFALSE;
	      
	      Int_t chargeAsso = trackAsso->Charge();
	      Int_t charge = track->Charge();
	      
	      Int_t fPDGe1 = 11; Int_t fPDGe2 = 11;
	      if(charge>0) fPDGe1 = -11;
	      if(chargeAsso>0) fPDGe2 = -11;
	      
	      if(charge == chargeAsso) fFlagLS = kTRUE;
	      if(charge != chargeAsso) fFlagULS = kTRUE;
	      
	      AliKFParticle ge1 = AliKFParticle(*track, fPDGe1);
	      AliKFParticle ge2 = AliKFParticle(*trackAsso, fPDGe2);
	      AliKFParticle recg(ge1, ge2);
	      
	      if(recg.GetNDF()<1) continue;
	      Double_t chi2recg = recg.GetChi2()/recg.GetNDF();
	      if(TMath::Sqrt(TMath::Abs(chi2recg))>3.) continue;
	      
	      recg.GetMass(mass,width);

	      if(fFlagLS) {
		//		if(mass<0.5)
		// ((TH1D*)fHistoList->FindObject("fInvMass2SelLScut"))->Fill(mass);
		((TH1D*)fHistoList->FindObject("fInvMass2SelLS"))->Fill(mass);
		if(mass>fInvMassLow)
		  {
		    ((TH1D*)fHistoList->FindObject("fInvMass2SelLScut"))->Fill(mass);
		    selIndx[i]=kTRUE;
		    selIndx[j]=kTRUE;
		  }
	      }
	      if(fFlagULS) {
		//if(mass<0.5)
		//  ((TH1D*)fHistoList->FindObject("fInvMass2SelULScut"))->Fill(mass);
		((TH1D*)fHistoList->FindObject("fInvMass2SelULS"))->Fill(mass);
		if(mass>fInvMassLow)
		  {
		    ((TH1D*)fHistoList->FindObject("fInvMass2SelULScut"))->Fill(mass);
		    selIndx[i]=kTRUE;
		    selIndx[j]=kTRUE;
		  }

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