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.                  *
**************************************************************************/
//
// Get improved dca info. by ITS upgrade implemented by the ALICE Heavy Flavour Electron Group
//
// Authors:
//   MinJung Kweon <minjung@physi.uni-heidelberg.de>
//
#include <TBits.h>
#include <TClass.h>
#include <TH1F.h>
#include <TH2F.h>
#include <TList.h>
#include <TString.h>
#include <TMath.h>
#include <TGraph.h>
#include <TFile.h>

#include "AliAODTrack.h"
#include "AliAODPid.h"
#include "AliESDEvent.h"
#include "AliESDVertex.h"
#include "AliESDtrack.h"
#include "AliLog.h"
#include "AliMCParticle.h"
#include "AliVEvent.h"
#include "AliVTrack.h"
#include "AliVParticle.h"
#include "AliVertexerTracks.h"
#include "AliVVertex.h"
#include "AliExternalTrackParam.h"
#include "AliMCEvent.h"

#include "AliHFEsmearDCA.h"

ClassImp(AliHFEsmearDCA)


//______________________________________________________
AliHFEsmearDCA::AliHFEsmearDCA(const Char_t */*name*/, const char *resfileCurURI, const char *resfileUpgURI, const Char_t */*title*/):
   fEvent(NULL),
   fMCEvent(NULL),
   fD0ZResPCur  (0),
   fD0ZResKCur  (0),
   fD0ZResPiCur (0),
   fD0ZResECur  (0),
   fD0RPResPCur (0),
   fD0RPResKCur (0),
   fD0RPResPiCur(0),
   fD0RPResECur (0),
   fPt1ResPCur  (0),
   fPt1ResKCur  (0),
   fPt1ResPiCur (0),
   fPt1ResECur  (0),
   fD0ZResPUpg  (0),
   fD0ZResKUpg  (0),
   fD0ZResPiUpg (0),
   fD0ZResEUpg  (0),
   fD0RPResPUpg (0),
   fD0RPResKUpg (0),
   fD0RPResPiUpg(0),
   fD0RPResEUpg (0),
   fPt1ResPUpg  (0),
   fPt1ResKUpg  (0),
   fPt1ResPiUpg (0),
   fPt1ResEUpg  (0)
{
  //
  // Constructor to be used to create the task.
  // The the URIs specify the resolution files to be used. 
  // They are expected to contain TGraphs with the resolutions
  // for the current and the upgraded ITS (see code for details).
  // One may also specify for how many tracks debug information
  // is written to the output.
  //
  TFile *resfileCur=TFile::Open(resfileCurURI);
  fD0RPResPCur =new TGraph(*static_cast<TGraph*>(resfileCur->Get("D0RPResP" )));
  fD0RPResKCur =new TGraph(*static_cast<TGraph*>(resfileCur->Get("D0RPResK" )));
  fD0RPResPiCur=new TGraph(*static_cast<TGraph*>(resfileCur->Get("D0RPResPi")));
  fD0RPResECur =new TGraph(*static_cast<TGraph*>(resfileCur->Get("D0RPResE")));
  fD0ZResPCur  =new TGraph(*static_cast<TGraph*>(resfileCur->Get("D0ZResP"  )));
  fD0ZResKCur  =new TGraph(*static_cast<TGraph*>(resfileCur->Get("D0ZResK"  )));
  fD0ZResPiCur =new TGraph(*static_cast<TGraph*>(resfileCur->Get("D0ZResPi" )));
  fD0ZResECur  =new TGraph(*static_cast<TGraph*>(resfileCur->Get("D0ZResE")));
  fPt1ResPCur  =new TGraph(*static_cast<TGraph*>(resfileCur->Get("Pt1ResP"  )));
  fPt1ResKCur  =new TGraph(*static_cast<TGraph*>(resfileCur->Get("Pt1ResK"  )));
  fPt1ResPiCur =new TGraph(*static_cast<TGraph*>(resfileCur->Get("Pt1ResPi" )));
  fPt1ResECur  =new TGraph(*static_cast<TGraph*>(resfileCur->Get("Pt1ResE" )));
  fD0RPResPCur ->SetName("D0RPResPCur" );
  fD0RPResKCur ->SetName("D0RPResKCur" );
  fD0RPResPiCur->SetName("D0RPResPiCur");
  fD0RPResECur ->SetName("D0RPResECur");
  fD0ZResPCur  ->SetName("D0ZResPCur"  ); 
  fD0ZResKCur  ->SetName("D0ZResKCur"  );
  fD0ZResPiCur ->SetName("D0ZResPiCur" );
  fD0ZResECur  ->SetName("D0ZResECur" );
  fPt1ResPCur  ->SetName("Pt1ResPCur"  );
  fPt1ResKCur  ->SetName("Pt1ResKCur"  );
  fPt1ResPiCur ->SetName("Pt1ResPiCur" );
  fPt1ResECur  ->SetName("Pt1ResECur" );
  delete resfileCur;
  TFile *resfileUpg=TFile::Open(resfileUpgURI );
  fD0RPResPUpg =new TGraph(*static_cast<TGraph*>(resfileUpg->Get("D0RPResP" )));
  fD0RPResKUpg =new TGraph(*static_cast<TGraph*>(resfileUpg->Get("D0RPResK" )));
  fD0RPResPiUpg=new TGraph(*static_cast<TGraph*>(resfileUpg->Get("D0RPResPi")));
  fD0RPResEUpg =new TGraph(*static_cast<TGraph*>(resfileUpg->Get("D0RPResE")));
  fD0ZResPUpg  =new TGraph(*static_cast<TGraph*>(resfileUpg->Get("D0ZResP"  )));
  fD0ZResKUpg  =new TGraph(*static_cast<TGraph*>(resfileUpg->Get("D0ZResK"  )));
  fD0ZResPiUpg =new TGraph(*static_cast<TGraph*>(resfileUpg->Get("D0ZResPi" )));
  fD0ZResEUpg  =new TGraph(*static_cast<TGraph*>(resfileUpg->Get("D0ZResE" )));
  fPt1ResPUpg  =new TGraph(*static_cast<TGraph*>(resfileUpg->Get("Pt1ResP"  )));
  fPt1ResKUpg  =new TGraph(*static_cast<TGraph*>(resfileUpg->Get("Pt1ResK"  )));
  fPt1ResPiUpg =new TGraph(*static_cast<TGraph*>(resfileUpg->Get("Pt1ResPi" )));
  fPt1ResEUpg  =new TGraph(*static_cast<TGraph*>(resfileUpg->Get("Pt1ResE" )));
  fD0RPResPUpg ->SetName("D0RPResPUpg" );
  fD0RPResKUpg ->SetName("D0RPResKUpg" );
  fD0RPResPiUpg->SetName("D0RPResPiUpg");
  fD0RPResEUpg ->SetName("D0RPResEUpg");
  fD0ZResPUpg  ->SetName("D0ZResPUpg"  );
  fD0ZResKUpg  ->SetName("D0ZResKUpg"  );
  fD0ZResPiUpg ->SetName("D0ZResPiUpg" );
  fD0ZResEUpg  ->SetName("D0ZResEUpg" );
  fPt1ResPUpg  ->SetName("Pt1ResPUpg"  );
  fPt1ResKUpg  ->SetName("Pt1ResKUpg"  );
  fPt1ResPiUpg ->SetName("Pt1ResPiUpg" );
  fPt1ResEUpg  ->SetName("Pt1ResEUpg" );
  delete resfileUpg;

}

//______________________________________________________
AliHFEsmearDCA::AliHFEsmearDCA(const AliHFEsmearDCA &c):
   TObject(c),
   fEvent(c.fEvent),
   fMCEvent(c.fMCEvent),
   fD0ZResPCur  (c.fD0ZResPCur),
   fD0ZResKCur  (c.fD0ZResKCur),
   fD0ZResPiCur (c.fD0ZResPiCur),
   fD0ZResECur  (c.fD0ZResECur),
   fD0RPResPCur (c.fD0RPResPCur),
   fD0RPResKCur (c.fD0RPResKCur),
   fD0RPResPiCur(c.fD0RPResPiCur),
   fD0RPResECur (c.fD0RPResECur),
   fPt1ResPCur  (c.fPt1ResPCur),
   fPt1ResKCur  (c.fPt1ResKCur),
   fPt1ResPiCur (c.fPt1ResPiCur),
   fPt1ResECur  (c.fPt1ResECur),
   fD0ZResPUpg  (c.fD0ZResPUpg),
   fD0ZResKUpg  (c.fD0ZResKUpg),
   fD0ZResPiUpg (c.fD0ZResPiUpg),
   fD0ZResEUpg  (c.fD0ZResEUpg),
   fD0RPResPUpg (c.fD0RPResPUpg),
   fD0RPResKUpg (c.fD0RPResKUpg),
   fD0RPResPiUpg(c.fD0RPResPiUpg),
   fD0RPResEUpg (c.fD0RPResEUpg),
   fPt1ResPUpg  (c.fPt1ResPUpg),
   fPt1ResKUpg  (c.fPt1ResKUpg),
   fPt1ResPiUpg (c.fPt1ResPiUpg),
   fPt1ResEUpg  (c.fPt1ResEUpg)
{
  //
  // Copy constructor
  // Performs a deep copy
  //
}

//______________________________________________________
AliHFEsmearDCA::~AliHFEsmearDCA(){
  //
  // Destructor
  //
}

//______________________________________________________
void AliHFEsmearDCA::SetRecEventInfo(const TObject *event){
  //
  // Set Virtual event an make a copy
  //
  if (!event) {
    AliError("Pointer to AliVEvent !");
    return;
  }
  TString className(event->ClassName());
  if (! (className.CompareTo("AliESDEvent")==0 || className.CompareTo("AliAODEvent")==0)) {
    AliError("argument must point to an AliESDEvent or AliAODEvent !");
    return ;
  }
  fEvent = (AliVEvent*) event;

}

//______________________________________________________
void AliHFEsmearDCA::GetImproveITSImpactParameters(AliVTrack *track, Double_t &dcaxyn, Double_t &dcaxyo, Double_t &dcaxySign, Double_t &dcaxySigo, Double_t &dcazn, Double_t &dcazo, Double_t &dcazSign, Double_t &dcazSigo){
  //
  // Get HFE impact parameter (with recalculated primary vertex)
  //
  if(!fEvent){
    AliDebug(1, "No Input event available\n");
    return;
  }
  const Double_t kBeampiperadius=3.;
  const Double_t kBeampiperadiusnew=1.9;
  TString type = track->IsA()->GetName();
  Double_t dcan[2]={-999.,-999.};
  Double_t covn[3]={-999.,-999.,-999.};
  Double_t dcao[2]={-999.,-999.};
  Double_t covo[3]={-999.,-999.,-999.};

  // Get reconstructed track parameters

  Double_t xyz[3],pxpypz[3],cv[21];
  track->GetXYZ(xyz);
  pxpypz[0]=track->Px();
  pxpypz[1]=track->Py(); 
  pxpypz[2]=track->Pz(); 
  track->GetCovarianceXYZPxPyPz(cv);
  Short_t sign = (Short_t)track->Charge();

  //AliExternalTrackParam et(track); //it doesn't work, i don't know why yet! so, I use the line below
  AliExternalTrackParam et(xyz,pxpypz,cv,sign);
  Double_t *param=const_cast<Double_t*>(et.GetParameter());

  const AliMCParticle *mc=static_cast<AliMCParticle *>(fMCEvent->GetTrack(TMath::Abs(track->GetLabel())));
  Double_t mcx[3];
  Double_t mcp[3];
  Double_t mccv[36]={0.};
  Short_t  mcc;
  mc->XvYvZv(mcx);
  mc->PxPyPz(mcp);
  mcc=mc->Charge();
  AliExternalTrackParam mct(mcx,mcp,mccv,mcc);
  const Double_t *parammc=mct.GetParameter();
  const AliVVertex *tmpvtx = fMCEvent->GetPrimaryVertex();

  AliVertex vtx(mcx,1.,1);
  AliVertex *tmpvtx2 = (AliVertex *)fMCEvent->GetPrimaryVertex();

  mct.PropagateToDCA(tmpvtx2,track->GetBz(),10.); //mjtest
  // Correct reference points and frames according to MC
  // TODO: B-Field correct?
  // TODO: failing propagation....
  et.PropagateToDCA(tmpvtx2,track->GetBz(),10.);
  et.Rotate(mct.GetAlpha());


  // Select appropriate smearing functions
  Double_t ptmc=TMath::Abs(mc->Pt());
  Double_t sd0rpn=0.;
  Double_t sd0zn =0.;
  Double_t spt1n =0.;
  Double_t sd0rpo=0.;
  Double_t sd0zo =0.;
  Double_t spt1o =0.;

  switch (mc->Particle()->GetPdgCode()) {
  case 2212: case -2212:
    sd0rpo=EvalGraph(fD0RPResPCur,ptmc);
    sd0zo =EvalGraph(fD0ZResPCur ,ptmc);
    spt1o =EvalGraph(fPt1ResPCur ,ptmc);
    sd0rpn=EvalGraph(fD0RPResPUpg,ptmc);
    sd0zn =EvalGraph(fD0ZResPUpg ,ptmc);
    spt1n =EvalGraph(fPt1ResPUpg ,ptmc);
    break;
  case 321: case -321:
    sd0rpo=EvalGraph(fD0RPResKCur,ptmc); 
    sd0zo =EvalGraph(fD0ZResKCur ,ptmc);
    spt1o =EvalGraph(fPt1ResKCur ,ptmc);
    sd0rpn=EvalGraph(fD0RPResKUpg,ptmc);
    sd0zn =EvalGraph(fD0ZResKUpg ,ptmc);
    spt1n =EvalGraph(fPt1ResKUpg ,ptmc);
    break;
  case 211: case -211:
    sd0rpo=EvalGraph(fD0RPResPiCur,ptmc); 
    sd0zo =EvalGraph(fD0ZResPiCur ,ptmc);
    spt1o =EvalGraph(fPt1ResPiCur ,ptmc);
    sd0rpn=EvalGraph(fD0RPResPiUpg,ptmc);
    sd0zn =EvalGraph(fD0ZResPiUpg ,ptmc);
    spt1n =EvalGraph(fPt1ResPiUpg ,ptmc);
    break;
  case 11: case -11:
    sd0rpo=EvalGraph(fD0RPResECur,ptmc); 
    sd0zo =EvalGraph(fD0ZResECur ,ptmc);
    spt1o =EvalGraph(fPt1ResECur ,ptmc);
    sd0rpn=EvalGraph(fD0RPResEUpg,ptmc);
    sd0zn =EvalGraph(fD0ZResEUpg ,ptmc);
    spt1n =EvalGraph(fPt1ResEUpg ,ptmc);
    break;
  default:
    return;
  }

  //mj special to check resolution smeared by 10 %
  sd0rpn = sd0rpo * 1.1;
  sd0zn = sd0zo * 1.1;
  spt1n = spt1o;

  // Use the same units (i.e. cm and GeV/c)! TODO: pt!
  sd0rpo*=1.e-4;
  sd0zo *=1.e-4;
  sd0rpn*=1.e-4;
  sd0zn *=1.e-4;

  // Apply the smearing
  Double_t d0zo  =param  [1];
  Double_t d0zmc =parammc[1];
  Double_t d0rpo =param  [0];
  Double_t d0rpmc=parammc[0];
  Double_t pt1o  =param  [4];
  Double_t pt1mc =parammc[4];
  Double_t dd0zo =d0zo-d0zmc;
  Double_t dd0zn =dd0zo *(sd0zo >0. ? (sd0zn /sd0zo ) : 1.);
  Double_t d0zn  =d0zmc+dd0zn;
  Double_t dd0rpo=d0rpo-d0rpmc;
  Double_t dd0rpn=dd0rpo*(sd0rpo>0. ? (sd0rpn/sd0rpo) : 1.);
  Double_t d0rpn =d0rpmc+dd0rpn;
  Double_t dpt1o =pt1o-pt1mc;
  Double_t dpt1n =dpt1o *(spt1o >0. ? (spt1n /spt1o ) : 1.);
  Double_t pt1n  =pt1mc+dpt1n;

  param[0]=d0rpn;
  param[1]=d0zn ;
  param[4]=pt1n ;

  //printf("d0rpo= %lf d0rpmc= %lf dd0rpo= %lf dd0rpn= %lf\n",d0rpo,d0rpmc,dd0rpo,dd0rpn);
  // Copy the smeared parameters to the AOD track
  Double_t x[3];
  Double_t p[3];
  et.GetXYZ(x);
  et.GetPxPyPz(p);
//  printf("x[0]= %lf x[1]= %lf x[2]= %lf \n",x[0],x[1],x[2]);
//  track->SetPosition(x,kFALSE);
//  track->SetP(p,kTRUE);

  AliESDEvent *esdevent = dynamic_cast<AliESDEvent *>(fEvent);
  if(!esdevent) return;
  //const AliVVertex *vtxESDSkip = esdevent->GetPrimaryVertex();
   // recalculate primary vertex for peri. and pp
   AliVertexerTracks vertexer(fEvent->GetMagneticField());
   vertexer.SetITSMode();
   vertexer.SetMinClusters(4);
   Int_t skipped[2];
   skipped[0] = track->GetID();
   vertexer.SetSkipTracks(1,skipped);
   vertexer.SetConstraintOn();
 //----diamond constraint-----------------------------
   Float_t diamondcovxy[3];
   esdevent->GetDiamondCovXY(diamondcovxy);
   Double_t pos[3]={esdevent->GetDiamondX(),esdevent->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;
 //----------------------------------------------------
   const AliVVertex *vtxESDSkip = (const AliVVertex *) vertexer.FindPrimaryVertex(fEvent);   
   //vtxESDSkip = vertexer.FindPrimaryVertex(fEvent);

   // Getting the DCA
   // Propagation always done on a working copy to not disturb the track params of the original track
   AliESDtrack *esdtrack = NULL;
   if(!TString(track->IsA()->GetName()).CompareTo("AliESDtrack")){
     // Case ESD track: take copy constructor
     AliESDtrack *tmptrack = dynamic_cast<AliESDtrack *>(track);
     if(tmptrack) esdtrack = new AliESDtrack(*tmptrack);
   } else {
    // Case AOD track: take different constructor
    esdtrack = new AliESDtrack(track);
   }
   if(esdtrack){
    et.PropagateToDCA(tmpvtx, fEvent->GetMagneticField(), kBeampiperadiusnew, dcan, covn);
    //et.PropagateToDCA(vtxESDSkip, fEvent->GetMagneticField(), kBeampiperadiusnew, dcan, covn);
    esdtrack->PropagateToDCA(vtxESDSkip, fEvent->GetMagneticField(), kBeampiperadius, dcao, covo);
    dcaxyn = dcan[0];
    dcaxyo = dcao[0];
    dcazn = dcan[1];
    dcazo = dcao[1];
    Double_t resfactor=1., resfactorz=1.;
    if(sd0rpo) resfactor = sd0rpn/sd0rpo;
    if(sd0zo) resfactorz = sd0zn/sd0zo;
    if(covo[0]) dcaxySign = dcan[0]/(TMath::Sqrt(covo[0])*resfactor);
    if(covo[0]) dcaxySigo = dcao[0]/TMath::Sqrt(covo[0]);
    if(covo[2]) dcazSign = dcan[1]/(TMath::Sqrt(covo[2])*resfactorz);
    if(covo[2]) dcazSigo = dcao[1]/TMath::Sqrt(covo[2]);
    //if(dcaxyo) printf("pt= %lf resolusion xy= %lf dcaxyo= %lf dcaxyn=  %lf ratio= %lf\n",pt1mc,resfactor,dcaxyo,dcaxyn,dcaxyn/dcaxyo); 

    if(!covo[0]){
     dcaxySigo = -49.;
     dcaxySign = -49.;
    }
    if(!covo[2]){
     dcazSigo = -49.;
     dcazSign = -49.;
    }
   }
   delete esdtrack;
   //delete vtxESDSkip;

}

//______________________________________________________
Double_t AliHFEsmearDCA::EvalGraph(const TGraph *graph,Double_t x) const {
  //
  // Evaluates a TGraph without linear extrapolation. Instead the last
  // valid point of the graph is used when out of range.
  // The function assumes an ascending order of X.
  //

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