ROOT logo
/**************************************************************************
 * Copyright(c) 1998-2006, 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.                  *
 **************************************************************************/

/* $Id$ */

/////////////////////////////////////////////////////////////
//
// Base class for AOD reconstructed heavy-flavour decay
//
// Author: A.Dainese, andrea.dainese@lnl.infn.it
/////////////////////////////////////////////////////////////

#include <TDatabasePDG.h>
#include <TVector3.h>
#include <TRandom.h>
#include "AliAODRecoDecay.h"
#include "AliAODRecoDecayHF.h"
#include "AliAODEvent.h"
#include "AliVertexerTracks.h"
#include "AliExternalTrackParam.h"
#include "AliKFVertex.h"
#include "AliVVertex.h"
#include "AliESDVertex.h"

ClassImp(AliAODRecoDecayHF)

//--------------------------------------------------------------------------
AliAODRecoDecayHF::AliAODRecoDecayHF() :
  AliAODRecoDecay(),
  fOwnPrimaryVtx(0x0),
  fEventPrimaryVtx(),
  fListOfCuts(),
  fd0err(0x0), 
  fProngID(0x0),
  fSelectionMap(0)
{
  //
  // Default Constructor
  //
}
//--------------------------------------------------------------------------
AliAODRecoDecayHF::AliAODRecoDecayHF(AliAODVertex *vtx2,Int_t nprongs,Short_t charge,
				     Double_t *px,Double_t *py,Double_t *pz,
				     Double_t *d0,Double_t *d0err) :
  AliAODRecoDecay(vtx2,nprongs,charge,px,py,pz,d0),
  fOwnPrimaryVtx(0x0),
  fEventPrimaryVtx(),
  fListOfCuts(),
  fd0err(0x0),
  fProngID(0x0),
  fSelectionMap(0)
{
  //
  // Constructor with AliAODVertex for decay vertex
  //
  fd0err = new Double_t[GetNProngs()];
  for(Int_t i=0; i<GetNProngs(); i++) fd0err[i] = d0err[i];
}
//--------------------------------------------------------------------------
AliAODRecoDecayHF::AliAODRecoDecayHF(AliAODVertex *vtx2,Int_t nprongs,Short_t charge,
				     Double_t *d0,Double_t *d0err) :
  AliAODRecoDecay(vtx2,nprongs,charge,d0),
  fOwnPrimaryVtx(0x0),
  fEventPrimaryVtx(),
  fListOfCuts(),
  fd0err(0x0),
  fProngID(0x0),
  fSelectionMap(0)
{
  //
  // Constructor with AliAODVertex for decay vertex and without prongs momenta
  //
  fd0err = new Double_t[GetNProngs()];
  for(Int_t i=0; i<GetNProngs(); i++) fd0err[i] = d0err[i];
}
//--------------------------------------------------------------------------
AliAODRecoDecayHF::AliAODRecoDecayHF(Double_t vtx1[3],Double_t vtx2[3],
				     Int_t nprongs,Short_t charge,
				     Double_t *px,Double_t *py,Double_t *pz,
				     Double_t *d0) :
  AliAODRecoDecay(0x0,nprongs,charge,px,py,pz,d0),
  fOwnPrimaryVtx(0x0),
  fEventPrimaryVtx(),
  fListOfCuts(),
  fd0err(0x0),
  fProngID(0x0), 
  fSelectionMap(0)
{
  //
  // Constructor that can used for a "MC" object
  //

  fOwnPrimaryVtx = new AliAODVertex(vtx1);

  AliAODVertex *vtx = new AliAODVertex(vtx2);
  SetOwnSecondaryVtx(vtx);

}
//--------------------------------------------------------------------------
AliAODRecoDecayHF::AliAODRecoDecayHF(const AliAODRecoDecayHF &source) :
  AliAODRecoDecay(source),
  fOwnPrimaryVtx(0x0),
  fEventPrimaryVtx(source.fEventPrimaryVtx),
  fListOfCuts(source.fListOfCuts),
  fd0err(0x0),
  fProngID(0x0),
  fSelectionMap(source.fSelectionMap)
{
  //
  // Copy constructor
  //
  if(source.GetOwnPrimaryVtx()) fOwnPrimaryVtx = new AliAODVertex(*(source.GetOwnPrimaryVtx()));

  if(source.GetNProngs()>0) {
    fd0err = new Double_t[GetNProngs()];
    memcpy(fd0err,source.fd0err,GetNProngs()*sizeof(Double_t));
    if(source.fProngID) {
      fProngID = new UShort_t[GetNProngs()];
      memcpy(fProngID,source.fProngID,GetNProngs()*sizeof(UShort_t));
    }
  }
}
//--------------------------------------------------------------------------
AliAODRecoDecayHF &AliAODRecoDecayHF::operator=(const AliAODRecoDecayHF &source)
{
  //
  // assignment operator
  //
  if(&source == this) return *this;

  AliAODRecoDecay::operator=(source);

  fEventPrimaryVtx = source.fEventPrimaryVtx;
  fListOfCuts = source.fListOfCuts;
  fSelectionMap = source.fSelectionMap;

  if(source.GetOwnPrimaryVtx()) {
    delete fOwnPrimaryVtx;
    fOwnPrimaryVtx = new AliAODVertex(*(source.GetOwnPrimaryVtx()));
  }

  if(source.GetNProngs()>0) {
    if(source.fd0err) {
      delete [] fd0err;
      fd0err = new Double_t[GetNProngs()];
      memcpy(fd0err,source.fd0err,GetNProngs()*sizeof(Double_t));
    }
    if(source.fProngID) {
      delete [] fProngID;
      fProngID = new UShort_t[GetNProngs()];
      memcpy(fProngID,source.fProngID,GetNProngs()*sizeof(UShort_t));
    }
  }
  return *this;
}
//--------------------------------------------------------------------------
AliAODRecoDecayHF::~AliAODRecoDecayHF() {
  //  
  // Default Destructor
  //
  if(fOwnPrimaryVtx) delete fOwnPrimaryVtx;
  if(fd0err) delete [] fd0err;
  if(fProngID) delete [] fProngID;
}
//---------------------------------------------------------------------------
AliKFParticle *AliAODRecoDecayHF::ApplyVertexingKF(Int_t *iprongs,Int_t nprongs,Int_t *pdgs,Bool_t topoCostraint, Double_t bzkG, Double_t *mass) const {
  //
  // Applies the KF vertexer 
  // Int_t iprongs[nprongs] = indices of the prongs to be used from the vertexer
  // Int_t pdgs[nprongs] = pdgs assigned to the prongs, needed to define the AliKFParticle
  // Bool_t topoCostraint = if kTRUE, the topological constraint is applied
  // Double_t bzkG = magnetic field
  // Double_t mass[2] = {mass, sigma} for the mass constraint (if mass[0]>0 the constraint is applied).
  //

  AliKFParticle::SetField(bzkG);
  AliKFParticle *vertexKF=0;
  
  AliKFVertex copyKF;
  Int_t nt=0,ntcheck=0;

  Double_t pos[3]={0.,0.,0.};
  if(!fOwnPrimaryVtx) {
    printf("AliAODRecoDecayHF::ApplyVertexingKF(): cannot apply because primary vertex is not found\n");
    return vertexKF;
  }
  fOwnPrimaryVtx->GetXYZ(pos);
  Int_t contr=fOwnPrimaryVtx->GetNContributors();
  Double_t covmatrix[6]={0.,0.,0.,0.,0.,0.};
  fOwnPrimaryVtx->GetCovarianceMatrix(covmatrix);
  Double_t chi2=fOwnPrimaryVtx->GetChi2();
  AliESDVertex primaryVtx2(pos,covmatrix,chi2,contr,"Vertex");
 

  if(topoCostraint){
   copyKF=AliKFVertex(primaryVtx2);
   nt=primaryVtx2.GetNContributors();
   ntcheck=nt;
  }

  vertexKF = new AliKFParticle();
  for(Int_t i= 0;i<nprongs;i++){
    Int_t ipr=iprongs[i];
    AliAODTrack *aodTrack = (AliAODTrack*)GetDaughter(ipr);
    if(!aodTrack) {
      printf("AliAODRecoDecayHF::ApplyVertexingKF(): no daughters available\n");
      delete vertexKF; vertexKF=NULL;
      return vertexKF;
    }
    AliKFParticle daughterKF(*aodTrack,pdgs[i]);
    vertexKF->AddDaughter(daughterKF);
    
    if(topoCostraint && nt>0){
      //Int_t index=(Int_t)GetProngID(ipr);
      if(!aodTrack->GetUsedForPrimVtxFit()) continue;
      copyKF -= daughterKF;
      ntcheck--;
    }
  }
  
  if(topoCostraint){
    if(ntcheck>0) {
      copyKF += (*vertexKF);
      vertexKF->SetProductionVertex(copyKF);
    }
 }
  
  if(mass[0]>0.){
    vertexKF->SetMassConstraint(mass[0],mass[1]);
  }
  
  return vertexKF;
}
//---------------------------------------------------------------------------
AliAODVertex* AliAODRecoDecayHF::RemoveDaughtersFromPrimaryVtx(AliAODEvent *aod) {
  //
  // This method returns a primary vertex without the daughter tracks of the 
  // candidate and it recalculates the impact parameters and errors.
  // 
  // The output vertex is created with "new". The user has to 
  // set it to the candidate with SetOwnPrimaryVtx(), unset it at the end 
  // of processing with UnsetOwnPrimaryVtx() and delete it.
  // If a NULL pointer is returned, the removal failed (too few tracks left).
  //
  // For the moment, the primary vertex is recalculated from scratch without
  // the daughter tracks.
  //

  AliAODVertex *vtxAOD = aod->GetPrimaryVertex();
  if(!vtxAOD) return 0;
  TString title=vtxAOD->GetTitle();
  if(!title.Contains("VertexerTracks")) return 0;



  AliVertexerTracks *vertexer = new AliVertexerTracks(aod->GetMagneticField());

  Int_t ndg = GetNDaughters();

  vertexer->SetITSMode();
  vertexer->SetMinClusters(3);
  vertexer->SetConstraintOff();

  if(title.Contains("WithConstraint")) {
    Float_t diamondcovxy[3];
    aod->GetDiamondCovXY(diamondcovxy);
    Double_t pos[3]={aod->GetDiamondX(),aod->GetDiamondY(),0.};
    Double_t cov[6]={diamondcovxy[0],diamondcovxy[1],diamondcovxy[2],0.,0.,10.*10.};
    AliESDVertex *diamond = new AliESDVertex(pos,cov,1.,1);
    vertexer->SetVtxStart(diamond);
    delete diamond; diamond=NULL;
  }

  Int_t skipped[10]; for(Int_t i=0;i<10;i++) skipped[i]=-1;
  Int_t nTrksToSkip=0,id;
  AliAODTrack *t = 0;
  for(Int_t i=0; i<ndg; i++) {
    t = (AliAODTrack*)GetDaughter(i);
    id = (Int_t)t->GetID();
    if(id<0) continue;
    skipped[nTrksToSkip++] = id;
  }

  vertexer->SetSkipTracks(nTrksToSkip,skipped);
  AliESDVertex *vtxESDNew = vertexer->FindPrimaryVertex(aod);

  delete vertexer; vertexer=NULL;

  if(!vtxESDNew) return 0;
  if(vtxESDNew->GetNContributors()<=0) { 
    delete vtxESDNew; vtxESDNew=NULL;
    return 0;
  }

  // convert to AliAODVertex
  Double_t pos[3],cov[6],chi2perNDF;
  vtxESDNew->GetXYZ(pos); // position
  vtxESDNew->GetCovMatrix(cov); //covariance matrix
  chi2perNDF = vtxESDNew->GetChi2toNDF();
  delete vtxESDNew; vtxESDNew=NULL;

  AliAODVertex *vtxAODNew = new AliAODVertex(pos,cov,chi2perNDF);

  RecalculateImpPars(vtxAODNew,aod);

  return vtxAODNew;
}
//-----------------------------------------------------------------------------------
void AliAODRecoDecayHF::RecalculateImpPars(AliAODVertex *vtxAODNew,AliAODEvent* aod) {
  //
  // now recalculate the daughters impact parameters
  //
  Double_t dz[2],covdz[3];
  for(Int_t i=0; i<GetNDaughters(); i++) {
    AliAODTrack *t = (AliAODTrack*)GetDaughter(i);
    AliExternalTrackParam etp; etp.CopyFromVTrack(t);
    if(etp.PropagateToDCA(vtxAODNew,aod->GetMagneticField(),3.,dz,covdz)) {
      fd0[i]    = dz[0];
      fd0err[i] = TMath::Sqrt(covdz[0]);
    }
  }

  return;
}
//-----------------------------------------------------------------------------------
void AliAODRecoDecayHF::Misalign(TString misal) {
  //
  // Method to smear the impact parameter of the duaghter tracks
  // and the sec. vtx position accordinlgy 
  // Useful to study effect of misalignment.
  // The starting point are parameterisations of the impact parameter resolution
  // from MC and data 
  // Errors on d0 and vtx are not recalculated (to be done)
  //
  if(misal=="null")return;
  Double_t pard0rphiMC[3]={36.7,36.,1.25};// d0(pt)=[0]+[1]/(pt^[2]); in micron, conversion to cm is done later
  Double_t pard0rphimisal[3]={0,0,0};
  Double_t pard0zMC[3]={85.,130.,0.7};// d0(pt)=[0]+[1]/(pt^[2]); in micron, conversion to cm is done later
  Double_t pard0zmisal[3]={0,0,0};
  if(misal=="data") {
    //use this to reproduce data d0(pt) trend for pions
    pard0rphimisal[0]=37.;
    pard0rphimisal[1]=37.5;
    pard0rphimisal[2]=1.25;
    pard0zmisal[0]=96.;
    pard0zmisal[1]=131.;
    pard0zmisal[2]=0.7;
  }
  else if(misal=="resB") {
    // temporary values: asymptotic value larger by a factor 1.2 w.r.t. MC
    pard0rphimisal[0]=44.4;
    pard0rphimisal[1]=37.5;
    pard0rphimisal[2]=1.25;
    pard0zmisal[0]=115.2;
    pard0zmisal[1]=131.;
    pard0zmisal[2]=0.7;
  }
  else if(misal=="resC") {
    // temporary values: slightly larger asymptotic value, larger values at low pt
    pard0rphimisal[0]=40.;
    pard0rphimisal[1]=40.;
    pard0rphimisal[2]=1.3;
    pard0zmisal[0]=125.;
    pard0zmisal[1]=131.;
    pard0zmisal[2]=0.85;
  }
  else printf("AliAODRecoDecayHF::Misalign():  wrong misalign type specified \n");
 

  AliAODVertex *evVtx=0x0,*secVtx=0x0;
  Double_t evVtxPos[3]={-9999.,-9999.,-9999.},secVtxPos[3]={-9999.,9999.,9999.};
  if(fOwnPrimaryVtx)fOwnPrimaryVtx->GetXYZ(evVtxPos);
  else {
    evVtx=(AliAODVertex*)(fEventPrimaryVtx.GetObject());
    evVtx->GetXYZ(evVtxPos);
  }
  secVtx=(AliAODVertex*)GetSecondaryVtx();
  secVtx->GetXYZ(secVtxPos);
  
  TVector3 v2v1(secVtxPos[0]-evVtxPos[0],secVtxPos[1]-evVtxPos[1],0.);

  Double_t sigmarphinull,sigmarphimisal,sigmarphiadd;
  Double_t sigmaznull,sigmazmisal,sigmazadd;
  Double_t deltad0rphi[10],deltad0z[10];
  
  // loop on the two prongs
  for(Int_t i=0; i<fNProngs; i++) { 
    sigmarphinull = pard0rphiMC[0]+pard0rphiMC[1]/TMath::Power(PtProng(i),pard0rphiMC[2]);
    sigmarphimisal = pard0rphimisal[0]+pard0rphimisal[1]/TMath::Power(PtProng(i),pard0rphimisal[2]);
    if(sigmarphimisal>sigmarphinull) {
      sigmarphiadd = TMath::Sqrt(sigmarphimisal*sigmarphimisal-
				 sigmarphinull*sigmarphinull);
      deltad0rphi[i] = gRandom->Gaus(0.,sigmarphiadd);
    } else {
      deltad0rphi[i] = 0.;
    }

    sigmaznull =  pard0zMC[0]+pard0zMC[1]/TMath::Power(PtProng(i),pard0zMC[2]);
    sigmazmisal = pard0zmisal[0]+pard0zmisal[1]/TMath::Power(PtProng(i),pard0zmisal[2]);
    if(sigmazmisal>sigmaznull) {
      sigmazadd = TMath::Sqrt(sigmazmisal*sigmazmisal-
			      sigmaznull*sigmaznull);
      deltad0z[i] = gRandom->Gaus(0.,sigmazadd);
    } else {
      deltad0z[i] = 0.;
    }

    TVector3 pxy(fPx[i],fPy[i],0.);
    TVector3 pxycrossv2v1=pxy.Cross(v2v1);
    if( pxycrossv2v1.Z()*fd0[i] > 0 ) {
      secVtxPos[0]+=1.e-4*deltad0rphi[i]*(-fPy[i])/PtProng(i);// e-4: conversion to cm
      secVtxPos[1]+=1.e-4*deltad0rphi[i]*(+fPx[i])/PtProng(i);    
    } else {
      secVtxPos[0]+=1.e-4*deltad0rphi[i]*(+fPy[i])/PtProng(i);
      secVtxPos[1]+=1.e-4*deltad0rphi[i]*(-fPx[i])/PtProng(i);    
    }
    
    // change d0rphi
    fd0[i] += 1.e-4*deltad0rphi[i]; // e-4: conversion to cm
    // change secondary vertex z
    secVtxPos[2]+=0.5e-4*deltad0z[i];
  }
  secVtx->SetX(secVtxPos[0]);
  secVtx->SetY(secVtxPos[1]);
  secVtx->SetZ(secVtxPos[2]);

  return;
}
 AliAODRecoDecayHF.cxx:1
 AliAODRecoDecayHF.cxx:2
 AliAODRecoDecayHF.cxx:3
 AliAODRecoDecayHF.cxx:4
 AliAODRecoDecayHF.cxx:5
 AliAODRecoDecayHF.cxx:6
 AliAODRecoDecayHF.cxx:7
 AliAODRecoDecayHF.cxx:8
 AliAODRecoDecayHF.cxx:9
 AliAODRecoDecayHF.cxx:10
 AliAODRecoDecayHF.cxx:11
 AliAODRecoDecayHF.cxx:12
 AliAODRecoDecayHF.cxx:13
 AliAODRecoDecayHF.cxx:14
 AliAODRecoDecayHF.cxx:15
 AliAODRecoDecayHF.cxx:16
 AliAODRecoDecayHF.cxx:17
 AliAODRecoDecayHF.cxx:18
 AliAODRecoDecayHF.cxx:19
 AliAODRecoDecayHF.cxx:20
 AliAODRecoDecayHF.cxx:21
 AliAODRecoDecayHF.cxx:22
 AliAODRecoDecayHF.cxx:23
 AliAODRecoDecayHF.cxx:24
 AliAODRecoDecayHF.cxx:25
 AliAODRecoDecayHF.cxx:26
 AliAODRecoDecayHF.cxx:27
 AliAODRecoDecayHF.cxx:28
 AliAODRecoDecayHF.cxx:29
 AliAODRecoDecayHF.cxx:30
 AliAODRecoDecayHF.cxx:31
 AliAODRecoDecayHF.cxx:32
 AliAODRecoDecayHF.cxx:33
 AliAODRecoDecayHF.cxx:34
 AliAODRecoDecayHF.cxx:35
 AliAODRecoDecayHF.cxx:36
 AliAODRecoDecayHF.cxx:37
 AliAODRecoDecayHF.cxx:38
 AliAODRecoDecayHF.cxx:39
 AliAODRecoDecayHF.cxx:40
 AliAODRecoDecayHF.cxx:41
 AliAODRecoDecayHF.cxx:42
 AliAODRecoDecayHF.cxx:43
 AliAODRecoDecayHF.cxx:44
 AliAODRecoDecayHF.cxx:45
 AliAODRecoDecayHF.cxx:46
 AliAODRecoDecayHF.cxx:47
 AliAODRecoDecayHF.cxx:48
 AliAODRecoDecayHF.cxx:49
 AliAODRecoDecayHF.cxx:50
 AliAODRecoDecayHF.cxx:51
 AliAODRecoDecayHF.cxx:52
 AliAODRecoDecayHF.cxx:53
 AliAODRecoDecayHF.cxx:54
 AliAODRecoDecayHF.cxx:55
 AliAODRecoDecayHF.cxx:56
 AliAODRecoDecayHF.cxx:57
 AliAODRecoDecayHF.cxx:58
 AliAODRecoDecayHF.cxx:59
 AliAODRecoDecayHF.cxx:60
 AliAODRecoDecayHF.cxx:61
 AliAODRecoDecayHF.cxx:62
 AliAODRecoDecayHF.cxx:63
 AliAODRecoDecayHF.cxx:64
 AliAODRecoDecayHF.cxx:65
 AliAODRecoDecayHF.cxx:66
 AliAODRecoDecayHF.cxx:67
 AliAODRecoDecayHF.cxx:68
 AliAODRecoDecayHF.cxx:69
 AliAODRecoDecayHF.cxx:70
 AliAODRecoDecayHF.cxx:71
 AliAODRecoDecayHF.cxx:72
 AliAODRecoDecayHF.cxx:73
 AliAODRecoDecayHF.cxx:74
 AliAODRecoDecayHF.cxx:75
 AliAODRecoDecayHF.cxx:76
 AliAODRecoDecayHF.cxx:77
 AliAODRecoDecayHF.cxx:78
 AliAODRecoDecayHF.cxx:79
 AliAODRecoDecayHF.cxx:80
 AliAODRecoDecayHF.cxx:81
 AliAODRecoDecayHF.cxx:82
 AliAODRecoDecayHF.cxx:83
 AliAODRecoDecayHF.cxx:84
 AliAODRecoDecayHF.cxx:85
 AliAODRecoDecayHF.cxx:86
 AliAODRecoDecayHF.cxx:87
 AliAODRecoDecayHF.cxx:88
 AliAODRecoDecayHF.cxx:89
 AliAODRecoDecayHF.cxx:90
 AliAODRecoDecayHF.cxx:91
 AliAODRecoDecayHF.cxx:92
 AliAODRecoDecayHF.cxx:93
 AliAODRecoDecayHF.cxx:94
 AliAODRecoDecayHF.cxx:95
 AliAODRecoDecayHF.cxx:96
 AliAODRecoDecayHF.cxx:97
 AliAODRecoDecayHF.cxx:98
 AliAODRecoDecayHF.cxx:99
 AliAODRecoDecayHF.cxx:100
 AliAODRecoDecayHF.cxx:101
 AliAODRecoDecayHF.cxx:102
 AliAODRecoDecayHF.cxx:103
 AliAODRecoDecayHF.cxx:104
 AliAODRecoDecayHF.cxx:105
 AliAODRecoDecayHF.cxx:106
 AliAODRecoDecayHF.cxx:107
 AliAODRecoDecayHF.cxx:108
 AliAODRecoDecayHF.cxx:109
 AliAODRecoDecayHF.cxx:110
 AliAODRecoDecayHF.cxx:111
 AliAODRecoDecayHF.cxx:112
 AliAODRecoDecayHF.cxx:113
 AliAODRecoDecayHF.cxx:114
 AliAODRecoDecayHF.cxx:115
 AliAODRecoDecayHF.cxx:116
 AliAODRecoDecayHF.cxx:117
 AliAODRecoDecayHF.cxx:118
 AliAODRecoDecayHF.cxx:119
 AliAODRecoDecayHF.cxx:120
 AliAODRecoDecayHF.cxx:121
 AliAODRecoDecayHF.cxx:122
 AliAODRecoDecayHF.cxx:123
 AliAODRecoDecayHF.cxx:124
 AliAODRecoDecayHF.cxx:125
 AliAODRecoDecayHF.cxx:126
 AliAODRecoDecayHF.cxx:127
 AliAODRecoDecayHF.cxx:128
 AliAODRecoDecayHF.cxx:129
 AliAODRecoDecayHF.cxx:130
 AliAODRecoDecayHF.cxx:131
 AliAODRecoDecayHF.cxx:132
 AliAODRecoDecayHF.cxx:133
 AliAODRecoDecayHF.cxx:134
 AliAODRecoDecayHF.cxx:135
 AliAODRecoDecayHF.cxx:136
 AliAODRecoDecayHF.cxx:137
 AliAODRecoDecayHF.cxx:138
 AliAODRecoDecayHF.cxx:139
 AliAODRecoDecayHF.cxx:140
 AliAODRecoDecayHF.cxx:141
 AliAODRecoDecayHF.cxx:142
 AliAODRecoDecayHF.cxx:143
 AliAODRecoDecayHF.cxx:144
 AliAODRecoDecayHF.cxx:145
 AliAODRecoDecayHF.cxx:146
 AliAODRecoDecayHF.cxx:147
 AliAODRecoDecayHF.cxx:148
 AliAODRecoDecayHF.cxx:149
 AliAODRecoDecayHF.cxx:150
 AliAODRecoDecayHF.cxx:151
 AliAODRecoDecayHF.cxx:152
 AliAODRecoDecayHF.cxx:153
 AliAODRecoDecayHF.cxx:154
 AliAODRecoDecayHF.cxx:155
 AliAODRecoDecayHF.cxx:156
 AliAODRecoDecayHF.cxx:157
 AliAODRecoDecayHF.cxx:158
 AliAODRecoDecayHF.cxx:159
 AliAODRecoDecayHF.cxx:160
 AliAODRecoDecayHF.cxx:161
 AliAODRecoDecayHF.cxx:162
 AliAODRecoDecayHF.cxx:163
 AliAODRecoDecayHF.cxx:164
 AliAODRecoDecayHF.cxx:165
 AliAODRecoDecayHF.cxx:166
 AliAODRecoDecayHF.cxx:167
 AliAODRecoDecayHF.cxx:168
 AliAODRecoDecayHF.cxx:169
 AliAODRecoDecayHF.cxx:170
 AliAODRecoDecayHF.cxx:171
 AliAODRecoDecayHF.cxx:172
 AliAODRecoDecayHF.cxx:173
 AliAODRecoDecayHF.cxx:174
 AliAODRecoDecayHF.cxx:175
 AliAODRecoDecayHF.cxx:176
 AliAODRecoDecayHF.cxx:177
 AliAODRecoDecayHF.cxx:178
 AliAODRecoDecayHF.cxx:179
 AliAODRecoDecayHF.cxx:180
 AliAODRecoDecayHF.cxx:181
 AliAODRecoDecayHF.cxx:182
 AliAODRecoDecayHF.cxx:183
 AliAODRecoDecayHF.cxx:184
 AliAODRecoDecayHF.cxx:185
 AliAODRecoDecayHF.cxx:186
 AliAODRecoDecayHF.cxx:187
 AliAODRecoDecayHF.cxx:188
 AliAODRecoDecayHF.cxx:189
 AliAODRecoDecayHF.cxx:190
 AliAODRecoDecayHF.cxx:191
 AliAODRecoDecayHF.cxx:192
 AliAODRecoDecayHF.cxx:193
 AliAODRecoDecayHF.cxx:194
 AliAODRecoDecayHF.cxx:195
 AliAODRecoDecayHF.cxx:196
 AliAODRecoDecayHF.cxx:197
 AliAODRecoDecayHF.cxx:198
 AliAODRecoDecayHF.cxx:199
 AliAODRecoDecayHF.cxx:200
 AliAODRecoDecayHF.cxx:201
 AliAODRecoDecayHF.cxx:202
 AliAODRecoDecayHF.cxx:203
 AliAODRecoDecayHF.cxx:204
 AliAODRecoDecayHF.cxx:205
 AliAODRecoDecayHF.cxx:206
 AliAODRecoDecayHF.cxx:207
 AliAODRecoDecayHF.cxx:208
 AliAODRecoDecayHF.cxx:209
 AliAODRecoDecayHF.cxx:210
 AliAODRecoDecayHF.cxx:211
 AliAODRecoDecayHF.cxx:212
 AliAODRecoDecayHF.cxx:213
 AliAODRecoDecayHF.cxx:214
 AliAODRecoDecayHF.cxx:215
 AliAODRecoDecayHF.cxx:216
 AliAODRecoDecayHF.cxx:217
 AliAODRecoDecayHF.cxx:218
 AliAODRecoDecayHF.cxx:219
 AliAODRecoDecayHF.cxx:220
 AliAODRecoDecayHF.cxx:221
 AliAODRecoDecayHF.cxx:222
 AliAODRecoDecayHF.cxx:223
 AliAODRecoDecayHF.cxx:224
 AliAODRecoDecayHF.cxx:225
 AliAODRecoDecayHF.cxx:226
 AliAODRecoDecayHF.cxx:227
 AliAODRecoDecayHF.cxx:228
 AliAODRecoDecayHF.cxx:229
 AliAODRecoDecayHF.cxx:230
 AliAODRecoDecayHF.cxx:231
 AliAODRecoDecayHF.cxx:232
 AliAODRecoDecayHF.cxx:233
 AliAODRecoDecayHF.cxx:234
 AliAODRecoDecayHF.cxx:235
 AliAODRecoDecayHF.cxx:236
 AliAODRecoDecayHF.cxx:237
 AliAODRecoDecayHF.cxx:238
 AliAODRecoDecayHF.cxx:239
 AliAODRecoDecayHF.cxx:240
 AliAODRecoDecayHF.cxx:241
 AliAODRecoDecayHF.cxx:242
 AliAODRecoDecayHF.cxx:243
 AliAODRecoDecayHF.cxx:244
 AliAODRecoDecayHF.cxx:245
 AliAODRecoDecayHF.cxx:246
 AliAODRecoDecayHF.cxx:247
 AliAODRecoDecayHF.cxx:248
 AliAODRecoDecayHF.cxx:249
 AliAODRecoDecayHF.cxx:250
 AliAODRecoDecayHF.cxx:251
 AliAODRecoDecayHF.cxx:252
 AliAODRecoDecayHF.cxx:253
 AliAODRecoDecayHF.cxx:254
 AliAODRecoDecayHF.cxx:255
 AliAODRecoDecayHF.cxx:256
 AliAODRecoDecayHF.cxx:257
 AliAODRecoDecayHF.cxx:258
 AliAODRecoDecayHF.cxx:259
 AliAODRecoDecayHF.cxx:260
 AliAODRecoDecayHF.cxx:261
 AliAODRecoDecayHF.cxx:262
 AliAODRecoDecayHF.cxx:263
 AliAODRecoDecayHF.cxx:264
 AliAODRecoDecayHF.cxx:265
 AliAODRecoDecayHF.cxx:266
 AliAODRecoDecayHF.cxx:267
 AliAODRecoDecayHF.cxx:268
 AliAODRecoDecayHF.cxx:269
 AliAODRecoDecayHF.cxx:270
 AliAODRecoDecayHF.cxx:271
 AliAODRecoDecayHF.cxx:272
 AliAODRecoDecayHF.cxx:273
 AliAODRecoDecayHF.cxx:274
 AliAODRecoDecayHF.cxx:275
 AliAODRecoDecayHF.cxx:276
 AliAODRecoDecayHF.cxx:277
 AliAODRecoDecayHF.cxx:278
 AliAODRecoDecayHF.cxx:279
 AliAODRecoDecayHF.cxx:280
 AliAODRecoDecayHF.cxx:281
 AliAODRecoDecayHF.cxx:282
 AliAODRecoDecayHF.cxx:283
 AliAODRecoDecayHF.cxx:284
 AliAODRecoDecayHF.cxx:285
 AliAODRecoDecayHF.cxx:286
 AliAODRecoDecayHF.cxx:287
 AliAODRecoDecayHF.cxx:288
 AliAODRecoDecayHF.cxx:289
 AliAODRecoDecayHF.cxx:290
 AliAODRecoDecayHF.cxx:291
 AliAODRecoDecayHF.cxx:292
 AliAODRecoDecayHF.cxx:293
 AliAODRecoDecayHF.cxx:294
 AliAODRecoDecayHF.cxx:295
 AliAODRecoDecayHF.cxx:296
 AliAODRecoDecayHF.cxx:297
 AliAODRecoDecayHF.cxx:298
 AliAODRecoDecayHF.cxx:299
 AliAODRecoDecayHF.cxx:300
 AliAODRecoDecayHF.cxx:301
 AliAODRecoDecayHF.cxx:302
 AliAODRecoDecayHF.cxx:303
 AliAODRecoDecayHF.cxx:304
 AliAODRecoDecayHF.cxx:305
 AliAODRecoDecayHF.cxx:306
 AliAODRecoDecayHF.cxx:307
 AliAODRecoDecayHF.cxx:308
 AliAODRecoDecayHF.cxx:309
 AliAODRecoDecayHF.cxx:310
 AliAODRecoDecayHF.cxx:311
 AliAODRecoDecayHF.cxx:312
 AliAODRecoDecayHF.cxx:313
 AliAODRecoDecayHF.cxx:314
 AliAODRecoDecayHF.cxx:315
 AliAODRecoDecayHF.cxx:316
 AliAODRecoDecayHF.cxx:317
 AliAODRecoDecayHF.cxx:318
 AliAODRecoDecayHF.cxx:319
 AliAODRecoDecayHF.cxx:320
 AliAODRecoDecayHF.cxx:321
 AliAODRecoDecayHF.cxx:322
 AliAODRecoDecayHF.cxx:323
 AliAODRecoDecayHF.cxx:324
 AliAODRecoDecayHF.cxx:325
 AliAODRecoDecayHF.cxx:326
 AliAODRecoDecayHF.cxx:327
 AliAODRecoDecayHF.cxx:328
 AliAODRecoDecayHF.cxx:329
 AliAODRecoDecayHF.cxx:330
 AliAODRecoDecayHF.cxx:331
 AliAODRecoDecayHF.cxx:332
 AliAODRecoDecayHF.cxx:333
 AliAODRecoDecayHF.cxx:334
 AliAODRecoDecayHF.cxx:335
 AliAODRecoDecayHF.cxx:336
 AliAODRecoDecayHF.cxx:337
 AliAODRecoDecayHF.cxx:338
 AliAODRecoDecayHF.cxx:339
 AliAODRecoDecayHF.cxx:340
 AliAODRecoDecayHF.cxx:341
 AliAODRecoDecayHF.cxx:342
 AliAODRecoDecayHF.cxx:343
 AliAODRecoDecayHF.cxx:344
 AliAODRecoDecayHF.cxx:345
 AliAODRecoDecayHF.cxx:346
 AliAODRecoDecayHF.cxx:347
 AliAODRecoDecayHF.cxx:348
 AliAODRecoDecayHF.cxx:349
 AliAODRecoDecayHF.cxx:350
 AliAODRecoDecayHF.cxx:351
 AliAODRecoDecayHF.cxx:352
 AliAODRecoDecayHF.cxx:353
 AliAODRecoDecayHF.cxx:354
 AliAODRecoDecayHF.cxx:355
 AliAODRecoDecayHF.cxx:356
 AliAODRecoDecayHF.cxx:357
 AliAODRecoDecayHF.cxx:358
 AliAODRecoDecayHF.cxx:359
 AliAODRecoDecayHF.cxx:360
 AliAODRecoDecayHF.cxx:361
 AliAODRecoDecayHF.cxx:362
 AliAODRecoDecayHF.cxx:363
 AliAODRecoDecayHF.cxx:364
 AliAODRecoDecayHF.cxx:365
 AliAODRecoDecayHF.cxx:366
 AliAODRecoDecayHF.cxx:367
 AliAODRecoDecayHF.cxx:368
 AliAODRecoDecayHF.cxx:369
 AliAODRecoDecayHF.cxx:370
 AliAODRecoDecayHF.cxx:371
 AliAODRecoDecayHF.cxx:372
 AliAODRecoDecayHF.cxx:373
 AliAODRecoDecayHF.cxx:374
 AliAODRecoDecayHF.cxx:375
 AliAODRecoDecayHF.cxx:376
 AliAODRecoDecayHF.cxx:377
 AliAODRecoDecayHF.cxx:378
 AliAODRecoDecayHF.cxx:379
 AliAODRecoDecayHF.cxx:380
 AliAODRecoDecayHF.cxx:381
 AliAODRecoDecayHF.cxx:382
 AliAODRecoDecayHF.cxx:383
 AliAODRecoDecayHF.cxx:384
 AliAODRecoDecayHF.cxx:385
 AliAODRecoDecayHF.cxx:386
 AliAODRecoDecayHF.cxx:387
 AliAODRecoDecayHF.cxx:388
 AliAODRecoDecayHF.cxx:389
 AliAODRecoDecayHF.cxx:390
 AliAODRecoDecayHF.cxx:391
 AliAODRecoDecayHF.cxx:392
 AliAODRecoDecayHF.cxx:393
 AliAODRecoDecayHF.cxx:394
 AliAODRecoDecayHF.cxx:395
 AliAODRecoDecayHF.cxx:396
 AliAODRecoDecayHF.cxx:397
 AliAODRecoDecayHF.cxx:398
 AliAODRecoDecayHF.cxx:399
 AliAODRecoDecayHF.cxx:400
 AliAODRecoDecayHF.cxx:401
 AliAODRecoDecayHF.cxx:402
 AliAODRecoDecayHF.cxx:403
 AliAODRecoDecayHF.cxx:404
 AliAODRecoDecayHF.cxx:405
 AliAODRecoDecayHF.cxx:406
 AliAODRecoDecayHF.cxx:407
 AliAODRecoDecayHF.cxx:408
 AliAODRecoDecayHF.cxx:409
 AliAODRecoDecayHF.cxx:410
 AliAODRecoDecayHF.cxx:411
 AliAODRecoDecayHF.cxx:412
 AliAODRecoDecayHF.cxx:413
 AliAODRecoDecayHF.cxx:414
 AliAODRecoDecayHF.cxx:415
 AliAODRecoDecayHF.cxx:416
 AliAODRecoDecayHF.cxx:417
 AliAODRecoDecayHF.cxx:418
 AliAODRecoDecayHF.cxx:419
 AliAODRecoDecayHF.cxx:420
 AliAODRecoDecayHF.cxx:421
 AliAODRecoDecayHF.cxx:422
 AliAODRecoDecayHF.cxx:423
 AliAODRecoDecayHF.cxx:424
 AliAODRecoDecayHF.cxx:425
 AliAODRecoDecayHF.cxx:426
 AliAODRecoDecayHF.cxx:427
 AliAODRecoDecayHF.cxx:428
 AliAODRecoDecayHF.cxx:429
 AliAODRecoDecayHF.cxx:430
 AliAODRecoDecayHF.cxx:431
 AliAODRecoDecayHF.cxx:432
 AliAODRecoDecayHF.cxx:433
 AliAODRecoDecayHF.cxx:434
 AliAODRecoDecayHF.cxx:435
 AliAODRecoDecayHF.cxx:436
 AliAODRecoDecayHF.cxx:437
 AliAODRecoDecayHF.cxx:438
 AliAODRecoDecayHF.cxx:439
 AliAODRecoDecayHF.cxx:440