ROOT logo
/*************************************************************************
* Copyright(c) 1998-1999, 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.                  *
**************************************************************************/
//
// Utility class for V0 PID
// Identifies Electrons, Pions and Protons using gamma conversions and
// the decays of K0s and Lambdas
// Containers with samples of Electrons, Pions and Protons can be accessed
// via GetListOfElectrons() etc.
//
// Authors:
//    Matus Kalisky <matus.kalisky@cern.ch>
//    Markus Heide <mheide@uni-muenster.de>
//    Markus Fasel <M.Fasel@gsi.de>
//
#include <TObjArray.h>

#include "AliAODEvent.h"
#include "AliAODv0.h"
#include "AliESDEvent.h"
#include "AliESDtrack.h"
#include "AliESDv0.h"
#include "AliKFVertex.h"
#include "AliVEvent.h"
#include "AliVTrack.h"
#include "AliMCParticle.h"
#include "AliStack.h"
#include "AliMCEvent.h"

#include "AliHFEV0cuts.h"
#include "AliHFEV0info.h"
#include "AliHFEcollection.h"

#include "AliHFEV0pid.h"
ClassImp(AliHFEV0pid)

AliHFEV0pid::AliHFEV0pid():
  TNamed()
  , fInputEvent(NULL)
  , fNtracks(0)
  , fMCEvent(NULL)
  , fMCon(kFALSE)
  , fPrimaryVertex(NULL)
  , fElectrons(NULL)
  , fPionsK0(NULL)
  , fPionsL(NULL)
  , fKaons(NULL)
  , fProtons(NULL)
  , fGammas(NULL)
  , fK0s(NULL)
  , fLambdas(NULL)
  , fAntiLambdas(NULL)
  , fIndices(NULL)
  , fQA(NULL)
  , fV0cuts(NULL)
  , fOutput(NULL)
  , fDestBits(0)

{
  //
  // Default constructor
  //
}
//____________________________________________________________
AliHFEV0pid::AliHFEV0pid(const char *name):
  TNamed(name, "")
  , fInputEvent(NULL)
  , fNtracks(0)
  , fMCEvent(NULL)
  , fMCon(kFALSE)
  , fPrimaryVertex(NULL)
  , fElectrons(NULL)
  , fPionsK0(NULL)
  , fPionsL(NULL)
  , fKaons(NULL)
  , fProtons(NULL)
  , fGammas(NULL)
  , fK0s(NULL)
  , fLambdas(NULL)
  , fAntiLambdas(NULL)
  , fIndices(NULL)
  , fQA(NULL)
  , fV0cuts(NULL)
  , fOutput(NULL)
  , fDestBits(0)
{
  //
  // Standard constructor
  //
  fElectrons = new TObjArray();
  fPionsK0 = new TObjArray();
  fPionsL = new TObjArray();
  fKaons = new TObjArray();
  fProtons = new TObjArray();

  fElectrons->SetOwner();
  fPionsK0->SetOwner();
  fProtons->SetOwner();
  fPionsL->SetOwner();
  fKaons->SetOwner();
  
  fGammas = new TObjArray();
  fK0s = new TObjArray();
  fLambdas = new TObjArray();
  fAntiLambdas = new TObjArray();

  fIndices = new AliHFEV0pidTrackIndex();
  
}
//____________________________________________________________

AliHFEV0pid::~AliHFEV0pid(){
  //
  // Destructor
  // Remove Containers
  //
  if(fElectrons) delete fElectrons;
  if(fPionsK0) delete fPionsK0;
  if(fPionsL) delete fPionsL;
  if(fKaons) delete fKaons;
  if(fProtons) delete fProtons;

  if(fGammas) delete fGammas;
  if(fK0s) delete fK0s;
  if(fLambdas) delete fLambdas;
  if(fAntiLambdas) delete fAntiLambdas;

  if(fIndices) delete fIndices;
  if(fV0cuts) delete fV0cuts;

  if(TESTBIT(fDestBits, 1)){
    if(fQA) delete fQA;
    if(fOutput) delete fOutput;
  }
}

//____________________________________________________________
void AliHFEV0pid::InitQA(){
  //
  // Initialize QA histograms
  //
  
  memset(&fDestBits, 0, sizeof(fDestBits));
  SETBIT(fDestBits, 1);

  fOutput = new TList();
  fOutput->SetOwner();

  fV0cuts = new AliHFEV0cuts();
  fV0cuts->Init("V0cuts");

  if(!fQA){
    fQA = new AliHFEcollection("v0pidQA", "QA histograms for V0 selection");

    fQA->CreateTH1F("h_nV0s", "No. of found and accepted V0s", 5, -0.5, 4.5);

    // QA histograms for invariant mass
    fQA->CreateTH1F("h_InvMassGamma", "Gamma invariant mass; inv mass [GeV/c^{2}]; counts", 100, 0, 0.25);
    fQA->CreateTH1F("h_InvMassK0s", "K0s invariant mass; inv mass [GeV/c^{2}]; counts", 200, 0.4, 0.65);
    fQA->CreateTH1F("h_InvMassL", "Lambda invariant mass; inv mass [GeV/c^{2}]; counts", 100, 1.05, 1.15);
    fQA->CreateTH1F("h_InvMassAL", "Lambda invariant mass; inv mass [GeV/c^{2}]; counts", 100, 1.05, 1.15);
    
    // QA histograms for p distribution (of the daughters)
    fQA->CreateTH1F("h_P_electron", "P distribution of the gamma electrons; p (GeV/c); counts", 100, 0.1, 10);
    fQA->CreateTH1F("h_P_K0pion", "P distribution of the K0 pions; p (GeV/c); counts", 100, 0.1, 10);
    fQA->CreateTH1F("h_P_Lpion", "P distribution of the Lambda pions; p (GeV/c); counts", 100, 0.1, 10);
    fQA->CreateTH1F("h_P_Lproton", "P distribution of the Lambda protons; p (GeV/c); counts", 100, 0.1, 10);

    // QA pt of the V0
    fQA->CreateTH1F("h_Pt_Gamma", "Pt of the gamma conversion; p_{T} (GeV/c); counts", 100, 0, 10);
    fQA->CreateTH1F("h_Pt_K0", "Pt of the K0; p_{T} (GeV/c); counts", 100, 0, 10);
    fQA->CreateTH1F("h_Pt_L", "Pt of the Lambda; p_{T} (GeV/c); counts", 100, 0, 10);    
    fQA->CreateTH1F("h_Pt_AL", "Pt of the Lambda; p_{T} (GeV/c); counts", 100, 0, 10);    
    
    // Armenteros plot V0 preselection
    fQA->CreateTH2F("h_AP_all_V0s", "armenteros plot for all V0 candidates; #alpha; Q_{T}", 200, -1, 1, 200, 0, 0.25);
    fQA->CreateTH2F("h_AP_selected_V0s", "armenteros plot for all V0 candidates; #alpha; Q_{T}", 200, -1, 1, 200, 0, 0.25);

    //
    // !!! MC plots !!!
    // 
    fQA->CreateTH2F("h_AP_MC_all_V0s", "armenteros plot for all MC tagged V0s; #alpha; Q_{T}", 200, -1, 1, 200, 0, 0.25);
    fQA->CreateTH2F("h_AP_MC_Gamma", "armenteros plot for MC tagged Gammas; #alpha; Q_{T}",  200, -1, 1, 200, 0, 0.25);
    fQA->CreateTH2F("h_AP_MC_K0", "armenteros plot for MC tagged K0s; #alpha; Q_{T}",  200, -1, 1, 200, 0, 0.25);
    fQA->CreateTH2F("h_AP_MC_Lambda", "armenteros plot for MC tagged Lambdas; #alpha; Q_{T}",  200, -1, 1, 200, 0, 0.25);
    fQA->CreateTH2F("h_AP_MC_ALambda", "armenteros plot for MC tagged A-Lambdass; #alpha; Q_{T}",  200, -1, 1, 200, 0, 0.25);
 

   
    // armenteros plots for different V0 momenta - MC signal only
    fQA->CreateTH2Fvector1(12, "h_AP_MC_Gamma_p", "armenteros plot for MC tagged Gammas; #alpha; Q_{T}",  200, -1., 1., 200, 0., 0.25);
    fQA->CreateTH2Fvector1(12, "h_AP_MC_K0_p", "armenteros plot for MC tagged K0s; #alpha; Q_{T}",  200, -1., 1., 200, 0., 0.25);
    fQA->CreateTH2Fvector1(12, "h_AP_MC_Lambda_p", "armenteros plot for MC tagged Lambdas; #alpha; Q_{T}",  200, -1., 1., 200, 0., 0.25);
   //

    
  }
}

//____________________________________________________________
void AliHFEV0pid::Process(AliVEvent * const inputEvent){

  //
  // Find protons, pions and electrons using V0 decays and 
  // store the pointers in the TObjArray
  //
  


  Int_t nGamma = 0, nK0s = 0, nLambda = 0, nPhi = 0;
  fInputEvent = inputEvent;
  fNtracks = fInputEvent->GetNumberOfTracks();
  fIndices->Init(fInputEvent->GetNumberOfV0s() * 2);
  fPrimaryVertex = new AliKFVertex(*(fInputEvent->GetPrimaryVertex()));
  if(!fPrimaryVertex) return;
  fV0cuts->SetInputEvent(fInputEvent);
  fV0cuts->SetPrimaryVertex(fPrimaryVertex);
  if(fMCEvent) fV0cuts->SetMCEvent(fMCEvent);
  Int_t check[fNtracks];
  memset(check, 0, sizeof(Int_t)*fNtracks);
  Int_t v0status = 0;

  //BenchmarkV0finder();

  for(Int_t iv0 = 0; iv0 < fInputEvent->GetNumberOfV0s(); iv0++){
    if(!TString(fInputEvent->IsA()->GetName()).CompareTo("AliESDEvent")){
      // case ESD
      SetESDanalysis();
      AliESDv0 *esdV0 = (static_cast<AliESDEvent *>(fInputEvent))->GetV0(iv0);
      if(!esdV0) continue;
      if(!esdV0->GetOnFlyStatus()) continue; // Take only V0s from the On-the-fly v0 finder
      v0status = ProcessV0(esdV0);
    } else {
      // case AOD
      SetAODanalysis();
      AliAODv0 *aodV0 = (static_cast<AliAODEvent *>(fInputEvent))->GetV0(iv0);
      if(aodV0->GetOnFlyStatus()) continue; // Take only V0s from the On-the-fly v0 finder
      v0status = ProcessV0(aodV0);
      if(AliHFEV0cuts::kUndef != v0status){
      }
    }
    switch(v0status){
    case AliHFEV0cuts::kRecoGamma: nGamma++; break;
    case AliHFEV0cuts::kRecoK0: nK0s++; break;
    case AliHFEV0cuts::kRecoPhi: nPhi++; break;  
    case AliHFEV0cuts::kRecoLambda: nLambda++; break;
    };
  }

  AliDebug(1, Form("Number of gammas  : %d", nGamma));
  AliDebug(1, Form("Number of K0s     : %d", nK0s));
  AliDebug(1, Form("Number of Phis    : %d", nPhi));
  AliDebug(1, Form("Number of Lambdas : %d", nLambda));

  AliDebug(1, "Number of stored tracks:");
  AliDebug(1, Form("Number of electrons      : %d", fElectrons->GetEntries()));
  AliDebug(1, Form("Number of K0 pions       : %d", fPionsK0->GetEntries()));
  AliDebug(1, Form("Number of Lambda pions   : %d", fPionsL->GetEntries()));
  AliDebug(1, Form("Number of Phi kaons      : %d", fKaons->GetEntries()));
  AliDebug(1, Form("Number of protons        : %d", fProtons->GetEntries()));
  
  delete  fPrimaryVertex;

}

//____________________________________________________________
Int_t AliHFEV0pid::ProcessV0(TObject *v0){
  //
  // Process single V0
  // Apply general cut and special cuts for gamma, K0s, Lambda
  //
  if(!v0)  return AliHFEV0cuts::kUndef;
  // CHECK
  AliESDv0* esdV0 =  dynamic_cast<AliESDv0 *>(v0);
  if( ! esdV0 ) {
    AliError("Unexpected v0 type.");
    return AliHFEV0cuts::kUndef;
  }  
  AliVTrack* daughter[2];
  daughter[0] = dynamic_cast<AliVTrack *>(fInputEvent->GetTrack(esdV0->GetPindex()));
  daughter[1] = dynamic_cast<AliVTrack *>(fInputEvent->GetTrack(esdV0->GetNindex()));
  if(!daughter[0] || !daughter[1]) return AliHFEV0cuts::kUndef;

  if(fMCEvent != NULL) fMCon = kTRUE;
  //printf("-D: fMCEvent %x, fMCon: %i\n", fMCEvent, fMCon);


  Int_t dMC[2] = {-1, -1};
  Int_t idMC = AliHFEV0cuts::kUndef; 

  if(IsESDanalysis()){
    if(fMCon){
      idMC = IdentifyV0(v0, dMC);
      //printf("--D: V0 pid: %i, P: %i, N: %i\n", id, d[0], d[1]);
      fV0cuts->SetCurrentV0id(idMC);
      fV0cuts->SetDaughtersID(dMC);
    }
    // check common single track cuts
    for(Int_t i=0; i<2; ++i){
      if(!fV0cuts->TrackCutsCommon(static_cast<AliESDtrack*>(daughter[i]))) return AliHFEV0cuts::kUndef;
    }
    // check commom V0 cuts
    // CHECK
    if(!fV0cuts->V0CutsCommon(esdV0)) return AliHFEV0cuts::kUndef;
  }

  // preselect the V0 candidates based on the Armenteros plot
  Int_t id = PreselectV0(esdV0, idMC);
  // store the resutls
  if(AliHFEV0cuts::kRecoGamma == id && IsGammaConv(v0)){
    fQA->Fill("h_nV0s", AliHFEV0cuts::kRecoGamma);
    return AliHFEV0cuts::kRecoGamma;
  }
  else if(AliHFEV0cuts::kRecoK0 == id && IsK0s(v0)){
    fQA->Fill("h_nV0s", AliHFEV0cuts::kRecoK0);
    return AliHFEV0cuts::kRecoK0;
  }
  else if(AliHFEV0cuts::kRecoLambda == TMath::Abs(id) && IsLambda(v0)){
    fQA->Fill("h_nV0s", AliHFEV0cuts::kRecoLambda);    
    return AliHFEV0cuts::kRecoLambda;
  }
  else return AliHFEV0cuts::kUndef; 


    
}
//____________________________________________________________
void AliHFEV0pid::Flush(){
  //
  // Clear the Lists
  //
  AliDebug(1, "Flushing containers");
  fProtons->Delete();
  fPionsK0->Delete();
  fPionsL->Delete();
  fElectrons->Delete();
  fIndices->Flush();
}
//____________________________________________________________
Int_t AliHFEV0pid::PreselectV0(AliESDv0 * const v0, Int_t idMC){
  //
  // Based on Armenteros plot preselet the possible identity of the V0 candidate
  //

  if(!v0) return -1;

  // momentum dependent armenteros plots
  ArmenterosPlotMC(v0, idMC);

  // comupte the armenteros variables
  Float_t ar[2];
  fV0cuts->Armenteros(v0, ar);
  // for clarity
  const Float_t alpha = ar[0];
  const Float_t qt = ar[1];
  //printf(" -D: Alpha: %f, QT: %f \n", alpha, qt);

  if(TMath::Abs(alpha) > 1) return AliHFEV0cuts::kUndef;

  fQA->Fill("h_AP_all_V0s", alpha, qt);

  // fill a few MC tagged histograms - AP plots
  if(fMCEvent){
    switch(idMC){
    case AliHFEV0cuts::kRecoGamma :
      fQA->Fill("h_AP_MC_all_V0s", alpha, qt);
      fQA->Fill("h_AP_MC_Gamma", alpha, qt);
      break;
    case AliHFEV0cuts::kRecoK0 :
      fQA->Fill("h_AP_MC_all_V0s", alpha, qt);
    fQA->Fill("h_AP_MC_K0", alpha, qt);
      break;
    case AliHFEV0cuts::kRecoLambda :
      fQA->Fill("h_AP_MC_all_V0s", alpha, qt);
      fQA->Fill("h_AP_MC_Lambda", alpha, qt);
      break;
    case AliHFEV0cuts::kRecoALambda :
      fQA->Fill("h_AP_MC_all_V0s", alpha, qt);
      fQA->Fill("h_AP_MC_ALambda", alpha, qt);
      break;
    }
  }

  // Gamma cuts
  const Double_t cutAlphaG = 0.35; 
  const Double_t cutQTG = 0.05;
  const Double_t cutAlphaG2[2] = {0.6, 0.8};
  const Double_t cutQTG2 = 0.04;

  // K0 cuts
  const Float_t cutQTK0[2] = {0.1075, 0.215};
  const Float_t cutAPK0[2] = {0.199, 0.8};   // parameters for curved QT cut
  
  // Lambda & A-Lambda cuts
  const Float_t cutQTL = 0.03;
  const Float_t cutAlphaL[2] = {0.35, 0.7};
  const Float_t cutAlphaAL[2] = {-0.7,  -0.35};
  const Float_t cutAPL[3] = {0.107, -0.69, 0.5};  // parameters fir curved QT cut


  // Check for Gamma candidates
  if(qt < cutQTG){
    if( (TMath::Abs(alpha) < cutAlphaG) ){
      fQA->Fill("h_AP_selected_V0s", alpha, qt);
      return  AliHFEV0cuts::kRecoGamma;
    }
  }
  // additional region - should help high pT gammas
  if(qt < cutQTG2){
    if( (TMath::Abs(alpha) > cutAlphaG2[0]) &&  (TMath::Abs(alpha) < cutAlphaG2[1]) ){
      fQA->Fill("h_AP_selected_V0s", alpha, qt);
      return  AliHFEV0cuts::kRecoGamma;
    }
  }


  // Check for K0 candidates
  Float_t q = cutAPK0[0] * TMath::Sqrt(TMath::Abs(1 - alpha*alpha/(cutAPK0[1]*cutAPK0[1])));
  if( (qt > cutQTK0[0]) && (qt < cutQTK0[1]) && (qt > q) ){
    fQA->Fill("h_AP_selected_V0s", alpha, qt);
    return AliHFEV0cuts::kRecoK0;
  }
  
  if( (alpha > 0) && (alpha > cutAlphaL[0])  && (alpha < cutAlphaL[1]) && (qt > cutQTL)){
    q = cutAPL[0] * TMath::Sqrt(1 - ( (alpha + cutAPL[1]) * (alpha + cutAPL[1]))  / (cutAPL[2]*cutAPL[2]) );
    if( qt < q  ){
      fQA->Fill("h_AP_selected_V0s", alpha, qt);
      return AliHFEV0cuts::kRecoLambda;
    }
  }

  // Check for A-Lambda candidates
  if( (alpha < 0) && (alpha > cutAlphaAL[0]) && (alpha < cutAlphaAL[1]) && (qt > cutQTL)){
    q = cutAPL[0] * TMath::Sqrt(1 - ( (alpha - cutAPL[1]) * (alpha - cutAPL[1]) ) / (cutAPL[2]*cutAPL[2]) );
    if( qt < q ){
      fQA->Fill("h_AP_selected_V0s", alpha, qt);
      return AliHFEV0cuts::kRecoLambda;
    }
  }
  
  return AliHFEV0cuts::kUndef;

}
//____________________________________________________________
Bool_t AliHFEV0pid::IsGammaConv(TObject *v0){
  //
  // Identify Gamma
  //

  if(!v0) return kFALSE;

  AliVTrack* daughter[2];
  Int_t pIndex = 0, nIndex = 0;
  Double_t invMass = 0.;
  Double_t mPt = 0.;
  Int_t v0id = -1;
  if(IsESDanalysis()){
    // ESD - cut V0
    AliESDv0 *esdV0 = static_cast<AliESDv0 *>(v0);
    v0id = esdV0->GetLabel();
    // apply FULL gamma cuts
    if(!fV0cuts->GammaCuts(esdV0)) return kFALSE;
    invMass = esdV0->GetEffMass(AliPID::kElectron, AliPID::kElectron);
    pIndex = esdV0->GetPindex();
    nIndex = esdV0->GetNindex();
    mPt = esdV0->Pt();
  } else {
    // AOD Analysis - not possible to cut
    AliAODv0 *aodV0 = static_cast<AliAODv0 *>(v0);
    v0id = aodV0->GetID();
    pIndex = aodV0->GetPosID();
    nIndex = aodV0->GetNegID();
    invMass = aodV0->InvMass2Prongs(0, 1, kElectron, kElectron);
  }
  daughter[0] = dynamic_cast<AliVTrack *>(fInputEvent->GetTrack(pIndex));
  daughter[1] = dynamic_cast<AliVTrack *>(fInputEvent->GetTrack(nIndex));
  if(!daughter[0] || !daughter[1]) return kFALSE;
 
  // DEBUG
  AliDebug(1, Form("Gamma identified, daughter IDs: %d,%d", daughter[0]->GetID(), daughter[1]->GetID()));

  // AFTER all gamma cuts
  fQA->Fill("h_Pt_Gamma", mPt);
  fQA->Fill("h_InvMassGamma", invMass);

  // Identified gamma - store tracks in the electron containers
  if(!fIndices->Find(daughter[0]->GetID())){
    AliDebug(1, Form("Gamma identified, daughter IDs: %d,%d", daughter[0]->GetID(), daughter[1]->GetID()));    
    fElectrons->Add(new AliHFEV0info(daughter[0], daughter[1]->GetID(), v0id));
    fIndices->Add(daughter[0]->GetID(), AliHFEV0cuts::kRecoElectron);
  }
  if(!fIndices->Find(daughter[1]->GetID())){
    AliDebug(1, Form("Gamma identified, daughter IDs: %d,%d", daughter[1]->GetID(), daughter[1]->GetID()));
    fElectrons->Add(new AliHFEV0info(daughter[1], daughter[0]->GetID(), v0id));
    fIndices->Add(daughter[1]->GetID(), AliHFEV0cuts::kRecoElectron);
  }
  fGammas->Add(v0);
  
  return kTRUE;
}
//____________________________________________________________
Bool_t AliHFEV0pid::IsK0s(TObject *v0){
  //
  // Identify K0s
  //

  if(!v0) return kFALSE;

  AliVTrack* daughter[2];
  Int_t pIndex = 0, nIndex = 0;
  Int_t v0id = -1;
  Double_t invMass = 0.;
  Double_t mPt = 0.;
  if(IsESDanalysis()){
    // ESD - cut V0
    AliESDv0 *esdV0 = static_cast<AliESDv0 *>(v0);
    if(!fV0cuts->K0Cuts(esdV0)) return kFALSE;
    v0id = esdV0->GetLabel();
    pIndex = esdV0->GetPindex();
    nIndex = esdV0->GetNindex();
    invMass = esdV0->GetEffMass(AliPID::kPion, AliPID::kPion);
    mPt = esdV0->Pt();
  } else {
    // AOD Analysis - not possible to cut
    AliAODv0 *aodV0 = static_cast<AliAODv0 *>(v0);
    aodV0->GetID();
    pIndex = aodV0->GetPosID();
    nIndex = aodV0->GetNegID();
    invMass = aodV0->MassK0Short();
  }
  daughter[0] = dynamic_cast<AliVTrack *>(fInputEvent->GetTrack(pIndex));
  daughter[1] = dynamic_cast<AliVTrack *>(fInputEvent->GetTrack(nIndex));
  if(!daughter[0] || !daughter[1]) return kFALSE;

  fQA->Fill("h_Pt_K0", mPt);
  fQA->Fill("h_InvMassK0s", invMass);

  AliDebug(1, Form("K0 identified, daughter IDs: %d,%d", daughter[0]->GetID(), daughter[1]->GetID()));

  // AFTER all K0 cuts
  // Identified gamma - store tracks in the electron containers
  if(!fIndices->Find(daughter[0]->GetID())){
    AliDebug(1, Form("Adding K0 Pion track with ID %d", daughter[0]->GetID()));
    fPionsK0->Add(new AliHFEV0info(daughter[0], daughter[1]->GetID(), v0id));
    fIndices->Add(daughter[0]->GetID(), AliHFEV0cuts::kRecoPionK0);
  }
  if(!fIndices->Find(daughter[1]->GetID())){
    AliDebug(1, Form("Adding K0 Pion track with ID %d", daughter[1]->GetID()));
    fPionsK0->Add(new AliHFEV0info(daughter[1], daughter[0]->GetID(), v0id));
    fIndices->Add(daughter[1]->GetID(), AliHFEV0cuts::kRecoPionK0);
  }
  fK0s->Add(v0);
  return kTRUE; 
}

//____________________________________________________________
Bool_t AliHFEV0pid::IsPhi(const TObject *v0) const {
  //
  // Identify Phi - very preliminary - requires diffrent approach (V0 fnder is not effective)
  //

  //const Double_t kPhiMass=TDatabasePDG::Instance()->GetParticle(333)->Mass();  // PDG phi mass
  //AliVTrack* daughter[2];
  //Double_t invMass = 0.;

  if(!v0) return kFALSE;
 
  //Int_t pIndex = 0, nIndex = 0;
  if(IsESDanalysis()){
    // ESD - cut V0
    //AliESDv0 *esdV0 = static_cast<AliESDv0 *>(v0);
    //pIndex = esdV0->GetPindex();
    //nIndex = esdV0->GetNindex();
  } else {
    // PRELIMINARY - !!!
    // AOD Analysis - not possible to cut
  } 

  return kTRUE;
}

//____________________________________________________________
Bool_t AliHFEV0pid::IsLambda(TObject *v0){
  //
  // Identify Lambda
  //

  if(!v0) return kFALSE;

  AliVTrack* daughter[2];
  Int_t pIndex = 0, nIndex = 0;
  Double_t invMass = 0.;
  Bool_t isLambda = kTRUE; // Lambda - kTRUE, Anti Lambda - kFALSE
  Double_t mPt = 0.;
  Int_t v0id = -1;
  if(IsESDanalysis()){
    // ESD - cut V0
    AliESDv0 *esdV0 = static_cast<AliESDv0 *>(v0);
    v0id = esdV0->GetLabel();
    if(!fV0cuts->LambdaCuts(esdV0,isLambda)) return kFALSE; 
    mPt = esdV0->Pt();
    if(fV0cuts->CheckSigns(esdV0)){
      pIndex = esdV0->GetPindex();
      nIndex = esdV0->GetNindex();
    }
    else{
      pIndex = esdV0->GetNindex();
      nIndex = esdV0->GetPindex();      
    }
  } else {
    // PRELIMINARY - !!!
    // AOD Analysis - not possible to cut
    
    // again - two cases as above
    AliAODv0 *aodV0 = static_cast<AliAODv0 *>(v0);
    v0id = aodV0->GetID();
    pIndex = aodV0->GetPosID();
    nIndex = aodV0->GetNegID();
    invMass = aodV0->MassLambda();
  } 
  
  daughter[0] = dynamic_cast<AliVTrack *>(fInputEvent->GetTrack(pIndex));
  daughter[1] = dynamic_cast<AliVTrack *>(fInputEvent->GetTrack(nIndex));
  if(!daughter[0] || !daughter[1]) return kFALSE;
  
  // lambda
  if(isLambda){
    fQA->Fill("h_Pt_L", mPt);
    fQA->Fill("h_InvMassL", invMass);

    if(!fIndices->Find(daughter[0]->GetID())){
      fProtons->Add(new AliHFEV0info(daughter[0], daughter[1]->GetID(), v0id));
      fIndices->Add(daughter[0]->GetID(), AliHFEV0cuts::kRecoProton);
    }
    if(!fIndices->Find(daughter[1]->GetID())){
      fPionsL->Add(new AliHFEV0info(daughter[1], daughter[0]->GetID(), v0id));
      fIndices->Add(daughter[1]->GetID(), AliHFEV0cuts::kRecoPionL);
    }
  }
  // antilambda
  else{
    fQA->Fill("h_Pt_AL", mPt);
    fQA->Fill("h_InvMassAL", invMass);
    if(!fIndices->Find(daughter [1]->GetID())){
      fProtons->Add(new AliHFEV0info(daughter[1], daughter[0]->GetID(), v0id));
      fIndices->Add(daughter[1]->GetID(), AliHFEV0cuts::kRecoProton);
    }
    if(!fIndices->Find(daughter [0]->GetID())){
      fPionsL->Add(new AliHFEV0info(daughter[0], daughter[1]->GetID(), v0id));
      fIndices->Add(daughter [0]->GetID(), AliHFEV0cuts::kRecoPionL);
    }
  }
  if(isLambda) fLambdas->Add(v0);
  else fAntiLambdas->Add(v0);

  return kTRUE;
}

//____________________________________________________________
Int_t AliHFEV0pid::IdentifyV0(TObject *esdV0, Int_t d[2]){
  //
  // for MC only, returns the V0 Id
  //

  //
  // be carefull about changing the return values - they are used later selectively
  // In particulra "-2" means that identity of either of the daughters could not be
  // estimated
  //

  AliESDv0 *v0 = dynamic_cast<AliESDv0 *>(esdV0);
  
  if(!v0) return -1;
  AliESDtrack* dN, *dP; 
  Int_t iN, iP;
  iN = iP = -1;
  iP = v0->GetPindex();
  iN = v0->GetNindex();
  if(iN < 0 || iP < 0) return -1;
  if(iN >= fNtracks || iP >= fNtracks) return -1;
  dP = dynamic_cast<AliESDtrack *>(fInputEvent->GetTrack(iP));
  dN = dynamic_cast<AliESDtrack *>(fInputEvent->GetTrack(iN));  
  if(!dN || !dP) return -1;

  // as of 26/10/2010
  // there is still a problem with wrong assignment of positive and negative
  // V0 daughter in V0 finder - a check is necessary
  // if the V0 daughters are miss-assigned - swap their labels
  Bool_t sign = fV0cuts->CheckSigns(v0);

  // get the MC labels
  Int_t lN, lP;
  if(sign){
    lN = dN->GetLabel();
    lP = dP->GetLabel();
  }
  else{
    lP = dN->GetLabel();
    lN = dP->GetLabel();
  }
  if(lN < 0 || lP < 0) return -2;
  // get the associated MC particles
  AliMCParticle *mcP, *mcN;
  mcP = dynamic_cast<AliMCParticle*>(fMCEvent->GetTrack(lP));
  mcN = dynamic_cast<AliMCParticle*>(fMCEvent->GetTrack(lN));
  if(!mcP || !mcN) return -2;
  
  // identify the daughter tracks and their mothers
  Int_t pdgP, pdgN;
  pdgP = TMath::Abs(mcP->PdgCode());
  pdgN = TMath::Abs(mcN->PdgCode());
  // store the daughter ID for later use
  d[0] = pdgP;
  d[1] = pdgN;
  //printf(" -D: pdgP: %i, pdgN: %i\n", pdgP, pdgN);
  // lablel of the mother particle
  // -1 may mean it was a primary particle
  Int_t lPm, lNm;
  lPm = mcP->GetMother();
  lNm = mcN->GetMother();
  if(-1==lPm || -1==lNm) return -3;

  // return if mothers are not the same particle
  if(lPm != lNm) return -3;
  // get MC mother particle - now we need only 1
  AliMCParticle *m = dynamic_cast<AliMCParticle*>(fMCEvent->GetTrack(lPm));
  if(!m) return -2;
  // mother PDG
  Int_t pdgM = m->PdgCode();

  //   if(3122 == TMath::Abs(pdgM)){
  //     printf("-D: v0 signs: %i\n", fV0cuts->CheckSigns(v0));
  //     printf("-D: pdgM: %i, pdgN: %i, pdgP: %i \n", pdgM, pdgN, pdgP);
  //   }
  
 
  // now check the mother and daughters identity
  if(22 == TMath::Abs(pdgM) && 11 == pdgN && 11 == pdgP) return AliHFEV0cuts::kRecoGamma;
  if(310 == TMath::Abs(pdgM) && 211 == pdgN && 211 == pdgP) return AliHFEV0cuts::kRecoK0;
  if(-3122 == pdgM && 2212 == pdgN && 211 == pdgP) return AliHFEV0cuts::kRecoALambda;
  if(3122 == pdgM && 211 == pdgN && 2212 == pdgP) return AliHFEV0cuts::kRecoLambda;
    
  return AliHFEV0cuts::kUndef;

}
//____________________________________________________________
void AliHFEV0pid::BenchmarkV0finder(){
  //
  // produce histograms for all findable V0s that are
  // were selected byt the (oline) V0 finder and can
  // be used to estimate the efficiency of teh V0 cuts
  //

  for(Int_t iv0 = 0; iv0 < fInputEvent->GetNumberOfV0s(); iv0++){
    AliESDv0 *esdV0 = (static_cast<AliESDEvent *>(fInputEvent))->GetV0(iv0);
    if(!esdV0) continue;
    if(!esdV0->GetOnFlyStatus()) continue; // Take only V0s from the On-the-fly v0 finder
    // indetify the V0 candidate
    //Int_t idV0 = AliHFEV0cuts::kUndef;
    Int_t idD[2] = {-1, -1};
    //idV0 = IdentifyV0(esdV0, idD);
    IdentifyV0(esdV0, idD);
  }
}
//____________________________________________________________
void   AliHFEV0pid::ArmenterosPlotMC(AliESDv0 * const v0, Int_t idMC){
  //
  // Armenteros plots as a function of Mohter Momentum
  //
  //const Float_t minP = 0.1;
  //const Float_t maxP = 10.;
  // approx log bins - over the 0.1 - 10 GeV/c
  const Float_t bins[13] = {0.1, 0.1468, 0.2154, 0.3162, 0.4642, 0.6813, 1.0, 1.4678, 2.1544, 3.1623, 4.6416, 6.8129, 10.0};
  
  Float_t ar[2];
  fV0cuts->Armenteros(v0, ar);
  Float_t p = v0->P();
 
  if( (p <=  bins[0]) || (p >= bins[12])) return;

  Int_t pBin = 0;
  Float_t tmp = bins[0];
  while(tmp < p){
    ++pBin;
    tmp = bins[pBin];
  }
  pBin--;

  if(AliHFEV0cuts::kRecoGamma == idMC) fQA->Fill("h_AP_MC_Gamma_p", pBin, ar[0], ar[1]);
  if(AliHFEV0cuts::kRecoK0 == idMC) fQA->Fill("h_AP_MC_K0_p", pBin, ar[0], ar[1]);
  if(AliHFEV0cuts::kRecoLambda == TMath::Abs(idMC)) fQA->Fill("h_AP_MC_Lambda_p", pBin, ar[0], ar[1]);
  
  

}
//____________________________________________________________
AliHFEV0pid::AliHFEV0pidTrackIndex::AliHFEV0pidTrackIndex():
    fNElectrons(0)
  , fNPionsK0(0)
  , fNPionsL(0)
  , fNKaons(0)
  , fNProtons(0)
  , fIndexElectron(NULL)
  , fIndexPionK0(NULL)
  , fIndexPionL(NULL)
  , fIndexKaon(NULL)
  , fIndexProton(NULL)
{
  //
  // Default Constructor
  //
}

//____________________________________________________________
AliHFEV0pid::AliHFEV0pidTrackIndex::~AliHFEV0pidTrackIndex(){
  //
  // Destructor
  //
  if(fIndexElectron) delete[] fIndexElectron;
  if(fIndexPionK0) delete[] fIndexPionK0;
  if(fIndexPionL) delete[] fIndexPionL;
  if(fIndexProton) delete[] fIndexProton;
}

//____________________________________________________________
void AliHFEV0pid::AliHFEV0pidTrackIndex::Flush(){
  //
  // Reset containers
  //
  
  if(fIndexElectron) delete[] fIndexElectron;
  fIndexElectron = NULL;
  if(fIndexPionK0) delete[] fIndexPionK0;
  fIndexPionK0 = NULL;
  if(fIndexPionL) delete[] fIndexPionL;
  fIndexPionL = NULL;
  if(fIndexKaon) delete[] fIndexKaon;
  fIndexKaon = NULL;
  if(fIndexProton) delete[] fIndexProton;
  fIndexProton = NULL;

  fNElectrons = 0;
  fNPionsK0 = 0;
  fNPionsL = 0;
  fNKaons = 0;
  fNProtons = 0;
}

//____________________________________________________________
void AliHFEV0pid::AliHFEV0pidTrackIndex::Init(Int_t capacity){
  //
  // Initialize container
  //
  fIndexElectron = new Int_t[capacity];
  fIndexPionK0 = new Int_t[capacity];
  fIndexPionL = new Int_t[capacity];
  fIndexProton = new Int_t[capacity];
}

//____________________________________________________________
void AliHFEV0pid::AliHFEV0pidTrackIndex::Add(Int_t index, Int_t species){
  //
  // Add new index to the list of identified particles
  //
  switch(species){
    case AliHFEV0cuts::kRecoElectron:
      fIndexElectron[fNElectrons++] = index;
      break;
    case AliHFEV0cuts::kRecoPionK0:
      fIndexPionK0[fNPionsK0++] = index;
      break;
    case AliHFEV0cuts::kRecoPionL:
      fIndexPionL[fNPionsL++] = index;
      break;
    case AliHFEV0cuts::kRecoProton:
      fIndexProton[fNProtons++] = index;
      break;
  };
}

//____________________________________________________________
Bool_t AliHFEV0pid::AliHFEV0pidTrackIndex::Find(Int_t index, Int_t species) const {
  //
  // Find track index in the specific sample of particles
  //

  Int_t *container = NULL; Int_t n = 0;
  switch(species){
  case AliHFEV0cuts::kRecoElectron:
    container = fIndexElectron;
    n = fNElectrons;
    break;
  case AliHFEV0cuts::kRecoPionK0:
    container = fIndexPionK0;
    n = fNPionsK0;
    break;
  case AliHFEV0cuts::kRecoPionL:
    container = fIndexPionL;
    n = fNPionsL;
    break;
  case AliHFEV0cuts::kRecoProton:
    container = fIndexProton;
    n = fNProtons;
    break;
  }
  if(!container) return kFALSE;
  if(n == 0) return kFALSE;
  Bool_t found = kFALSE;
  for(Int_t i = 0; i < n; i++){
    if(container[i] == index){
      found = kTRUE;
      break;
    }
  }
  return found;
}

//____________________________________________________________
Bool_t AliHFEV0pid::AliHFEV0pidTrackIndex::Find(Int_t index) const {
  // 
  // Find index in all samples
  //
  if(Find(index, AliHFEV0cuts::kRecoElectron)) return kTRUE;
  else if(Find(index, AliHFEV0cuts::kRecoPionK0)) return kTRUE;
  else if(Find(index, AliHFEV0cuts::kRecoPionL)) return kTRUE;
  else return Find(index, AliHFEV0cuts::kRecoProton);
}

//____________________________________________________________
TList *AliHFEV0pid::GetListOfQAhistograms(){
  //
  // Getter for V0 PID QA histograms
  //

  CLRBIT(fDestBits, 1);

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