ROOT logo
// $Id$
// Main author: Davide Caffarri 2009

/**************************************************************************
 * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. *
 * ee http://aliceinfo.cern.ch/Offline/AliRoot/License.html for          *
 * full copyright notice.                                                 *
 **************************************************************************/

#include "AliEveHF.h"
#include "AliAODRecoDecay.h"

#include <TEveTrack.h>
#include <TEveTrackPropagator.h>
#include <TEveManager.h>

#include <TPolyLine3D.h>
#include <TPolyMarker3D.h>
#include <TColor.h>

#include <TDatabasePDG.h>
#include <TParticlePDG.h>

#include <vector>


/***********************************************************************
*
*  AliEveHF class
*
************************************************************************/


ClassImp(AliEveHF)

//______________________________________________________________________________
AliEveHF::AliEveHF():
  TEvePointSet(),

  fAODobj(0x0),
  fRecBirthHF(0,0,0),
  fRecDecayHF(0,0,0),
  fRecDecayMomHF(0,0,0),
  fPointingAngleHF(0),

  fNegTrack(0),
  fPosTrack(0),
  fRnrStyle(0),
  fPointingLine(0),

  fnProng(0),
  fAODIndex(-1),
  fChi2SecondVtx(-1),

  fProngDCA(0x0),
  fProngd0(0x0),
  fProngMaxProbPdg(0x0),
  fProngMaxProbPid(0x0),
  fInvariantMassPart(0),
  fInvariantMassAntiPart(0),
  fDecay(0)

{
  // Default constructor.

  // Override from TEveElement.
  fPickable = kTRUE;
  fMainColorPtr = &fMarkerColor;
}

//______________________________________________________________________________
AliEveHF::AliEveHF(TEveRecTrack* tNeg, TEveRecTrack* tPos, Double_t primVtx[3], AliAODRecoDecay* aodObj, TEveTrackPropagator* rs) :

  TEvePointSet(),

  fAODobj(aodObj),
  fRecBirthHF(primVtx[0], primVtx[1], primVtx[2]),
  fRecDecayHF(aodObj->GetSecVtxX(), aodObj->GetSecVtxY(), aodObj->GetSecVtxZ()),
  fRecDecayMomHF(aodObj->Px(),aodObj->Py(),aodObj->Pz()),
  fPointingAngleHF(aodObj->CosPointingAngle(primVtx)),

  fNegTrack(new TEveTrack(tNeg, rs)),
  fPosTrack(new TEveTrack(tPos, rs)),
  fRnrStyle(rs),
  fPointingLine(new TEveLine("Pointing line")),

  fnProng(aodObj->GetNProngs()),
  fAODIndex(-1),
  fChi2SecondVtx(aodObj->GetReducedChi2()),

  fProngDCA(0),
  fProngd0(0),
  fProngMaxProbPdg(0),
  fProngMaxProbPid(0),
  fInvariantMassPart(0),
  fInvariantMassAntiPart(0),
  fDecay(0)
{

  // Constructor with full HF specification.
  // Override from TEveElement.
  fPickable = kTRUE;
  fMainColorPtr = &fMarkerColor;

  fMarkerStyle = 2;
  fMarkerColor = kSpring + 6;
  fMarkerSize  = 0.3;

  fPointingLine->SetLineColor(fMarkerColor);
  fPointingLine->SetLineWidth(2);
  fPointingLine->IncDenyDestroy();
  AddElement(fPointingLine);

  fPosTrack->SetLineColor(2);  // red
  fPosTrack->SetStdTitle();
  fNegTrack->SetLineColor(7);  // light blue
  fNegTrack->SetStdTitle();

  fNegTrack->IncDenyDestroy();
  AddElement(fNegTrack);
  fPosTrack->IncDenyDestroy();
  AddElement(fPosTrack);
}

//______________________________________________________________________________
AliEveHF::~AliEveHF()
{
  // Destructor. Dereferences pos/neg tracks and pointing-line objects.

  fNegTrack->DecDenyDestroy();
  fPosTrack->DecDenyDestroy();
  fPointingLine->DecDenyDestroy();
}

//_____________________________________________________________________________
void AliEveHF::SetProngDCA() const
{
  for(Int_t ip=0; ip<fnProng; ip++)
    fProngDCA[ip] = fAODobj->GetDCA(ip);
}

//______________________________________________________________________________
void AliEveHF::Setd0Prong() const
{
  for(Int_t ip=0; ip<fnProng; ip++)
    fProngd0[ip] = fAODobj->Getd0Prong(ip);
}


//______________________________________________________________________________
void AliEveHF::SetMaxProbPdgPid()
{
  // Sets the maximum probability Pdg value and Pid for one daughter
  // Should be moved to TEveTrack property eventually (or AliEveTrack creation)
  Double_t pid[5];
  Int_t    pos = -1;

  for (Int_t ip=0; ip<fnProng; ip++){
    fAODobj->GetPIDProng(ip, pid);

    fProngMaxProbPid[ip]=pid[0]; 
    for (Int_t pp=1; pp<5; pp++)
      if (pid[pp]>pid[pp-1]) {
	fProngMaxProbPid[ip]=pid[pp];
	pos = pp;}
    switch (pos)
      {
      case 0:
	fProngMaxProbPdg[ip] = -11;
	break;
      case 1:
	fProngMaxProbPdg[ip] = -13;
    break;
      case 2:
	fProngMaxProbPdg[ip] = 211;
    break;
      case 3:
	fProngMaxProbPdg[ip] = 321;
    break;
      case 4:
	fProngMaxProbPdg[ip] = 2212;
    break;
      }
  }

}

//________________________________________________________________________________________
void AliEveHF::CalculateInvMass(Int_t decay)
{

  //Method to calculate the invariant mass of the particle and the antiparticle. 
  UInt_t   pdg2[2];
  Double_t mPDG,minv;

  switch (decay)
    {
    case 0:                  // D0->Kpi
      pdg2[0]=211; pdg2[1]=321;
      mPDG=TDatabasePDG::Instance()->GetParticle(421)->Mass();
      minv = fAODobj->InvMass(fnProng,pdg2);
      fInvariantMassPart=minv;

      pdg2[0]=321; pdg2[1]=211;
      minv = fAODobj->InvMass(fnProng,pdg2);
      fInvariantMassAntiPart=minv;
      break;
    }

}

//______________________________________________________________________________
Bool_t AliEveHF::SelectInvMass(Int_t decay, Float_t decayCuts)
{

  //Member fuction to select particles using the invariant mass cuts. 
  UInt_t   pdg2[2];
  Double_t mPDG,minv;

  Bool_t retval=kFALSE;
  switch (decay)
    {
    case 0:                  // D0->Kpi
      pdg2[0]=211; pdg2[1]=321;
      mPDG=TDatabasePDG::Instance()->GetParticle(421)->Mass();
      minv = fAODobj->InvMass(fnProng,pdg2);
      fInvariantMassPart=minv;
      if(TMath::Abs(minv-mPDG)<decayCuts) retval=kTRUE;
      pdg2[0]=321; pdg2[1]=211;
      minv = fAODobj->InvMass(fnProng,pdg2);
      fInvariantMassAntiPart=minv;
      if(TMath::Abs(minv-mPDG)<decayCuts) retval=kTRUE;
      break;
    }
  return retval;

}


//______________________________________________________________________________
void AliEveHF::MakeHF()
{
  // Set all dependant components for drawing.

  SetPoint(0, fRecDecayHF.fX, fRecDecayHF.fY, fRecDecayHF.fZ);

  fNegTrack->MakeTrack();
  fPosTrack->MakeTrack();

  fPointingLine->SetPoint(0, fRecBirthHF.fX, fRecBirthHF.fY, fRecBirthHF.fZ);
  fPointingLine->SetPoint(1, fRecDecayHF.fX, fRecDecayHF.fY, fRecDecayHF.fZ);
}

/***********************************************************************
*
*  AliEveHFList class
*
************************************************************************/

ClassImp(AliEveHFList)

//______________________________________________________________________________
AliEveHFList::AliEveHFList() :
  TEveElementList(),
  fTitle(),
  fRnrStyle(0),
  fRnrDaughters(kTRUE),
  fRnrHFvtx(kTRUE),
  fRnrHFpath(kTRUE),
  fProngColor(0),
  fMinRCut(0),
  fMaxRCut(250),
  fMinDaughterDCA(0),
  fMaxDaughterDCA(1),
  fMinPt(0),
  fMaxPt(20),
  fMinCosPointingAngle(0),
  fMaxCosPointingAngle(1),
  fMind0(-3),
  fMaxd0(3),
  fProngCheckedPid(0x0),
  fProngCheckedProb(0x0),
  fDeltaInvariantMass(0),
  fDecay(0)
{
  // Default constructor.

  fChildClass = AliEveHF::Class(); // override member from base TEveElementList
}

//______________________________________________________________________________
AliEveHFList::AliEveHFList(TEveTrackPropagator* rs) :
  TEveElementList(),
  fTitle(),
  fRnrStyle(rs),
  fRnrDaughters(kTRUE),
  fRnrHFvtx(kTRUE),
  fRnrHFpath(kTRUE),
  fProngColor(0),
  fMinRCut(0),
  fMaxRCut(250),
  fMinDaughterDCA(0),
  fMaxDaughterDCA(1),
  fMinPt(0),
  fMaxPt(20),
  fMinCosPointingAngle(0),
  fMaxCosPointingAngle(1),
  fMind0(-3),
  fMaxd0(3),
  fProngCheckedPid(0x0),
  fProngCheckedProb(0x0),
  fDeltaInvariantMass(1),
  fDecay(0)
{
  // Constructor with given track-propagator..

  fChildClass = AliEveHF::Class(); // override member from base TEveElementList

  Init();
}

//______________________________________________________________________________
AliEveHFList::AliEveHFList(const Text_t* name, TEveTrackPropagator* rs) :
  TEveElementList(),
  fTitle(),
  fRnrStyle(rs),
  fRnrDaughters(kTRUE),
  fRnrHFvtx(kTRUE),
  fRnrHFpath(kTRUE),
  fProngColor(0),
  fMinRCut(0),
  fMaxRCut(100),
  fMinDaughterDCA(0),
  fMaxDaughterDCA(1),
  fMinPt(0),
  fMaxPt(20),
  fMinCosPointingAngle(0),
  fMaxCosPointingAngle(1),
  fMind0(-3),
  fMaxd0(3),
  fProngCheckedPid(0x0),
  fProngCheckedProb(0x0),
  fDeltaInvariantMass(1),
  fDecay(0)
{
  // Standard constructor.

  fChildClass = AliEveHF::Class(); // override member from base TEveElementList

  Init();
  SetName(name);
}

//______________________________________________________________________________
void AliEveHFList::Init()
{
  // Initialize members needed for drawing operations.

  if (fRnrStyle== 0) fRnrStyle = new TEveTrackPropagator;
}

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

//______________________________________________________________________________
void AliEveHFList::MakeHFs()
{
  // Call MakeHF() for all elements.

  for(List_i i=fChildren.begin(); i!=fChildren.end(); i++) {
    ((AliEveHF*)(*i))->MakeHF();
  }
  gEve->Redraw3D();
}

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


//______________________________________________________________________________
void AliEveHFList::FilterByPt(Float_t minPt, Float_t maxPt)
{

  //Select visibility of elements based on their Pt

  fMinPt = minPt;
  fMaxPt = maxPt;

  for(List_i i = fChildren.begin(); i != fChildren.end(); ++i)
    {
      AliEveHF *hf = (AliEveHF*) *i;
      Float_t  pt  = hf->GetPt();
      Bool_t  show = ((pt >= fMinPt) && (pt <= fMaxPt));
      hf->SetRnrState(show);
    }
  ElementChanged();
  gEve->Redraw3D();
}
//______________________________________________________________________________
void AliEveHFList::FilterByRadius(Float_t minR, Float_t maxR)
{
  // Select visibility of elements based on their axial radius.

  fMinRCut = minR;
  fMaxRCut = maxR;

  for(List_i i = fChildren.begin(); i != fChildren.end(); ++i)
    {
      AliEveHF *hf = (AliEveHF*) *i;
      Float_t  rad = hf->GetRadius();
      Bool_t  show = rad >= fMinRCut && rad <= fMaxRCut;
      hf->SetRnrState(show);
    }
  ElementChanged();
  gEve->Redraw3D();
}

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


//______________________________________________________________________________
void AliEveHFList::FilterByCosPointingAngle(Float_t minCosPointingAngle, Float_t maxCosPointingAngle)
{
  // Select visibility of elements based on the HF cosine of the pointing angle

  fMinCosPointingAngle = minCosPointingAngle;
  fMaxCosPointingAngle = maxCosPointingAngle;


  for(List_i i = fChildren.begin(); i != fChildren.end(); ++i)
    {
      AliEveHF *hf = (AliEveHF*) *i;
      Float_t  cosPointingAngle = hf->GetCosPointingAngle();
      Bool_t  show = cosPointingAngle >= fMinCosPointingAngle && cosPointingAngle <= fMaxCosPointingAngle;
      hf->SetRnrState(show);

      ElementChanged();
      gEve->Redraw3D();
    }
}
//______________________________________________________________________________
void AliEveHFList::FilterByd0(Float_t mind0, Float_t maxd0)
{
  // Select visibility of elements based on the HF impact parameter.

  fMind0 = mind0;
  fMaxd0 = maxd0;

  for(List_i i = fChildren.begin(); i != fChildren.end(); ++i)
    {
      AliEveHF *hf = (AliEveHF*) *i;
      Int_t nProng=(Int_t)hf->GetAODobj()->GetNProngs();
      for(Int_t ip = 1; ip < nProng; ++ip) {
	Double_t  d0 = hf->Getd0Prong(ip);
	Bool_t  show = d0 >= fMind0 && d0 <= fMaxd0;
	hf->SetRnrState(show);
      }
      ElementChanged();
      gEve->Redraw3D();
    }
}


 //______________________________________________________________________________
void AliEveHFList::FilterByDCA(Float_t minDaughterDCA, Float_t maxDaughterDCA)
{
  // Select visibility of elements based on the DCA between daughters.

  fMinDaughterDCA = minDaughterDCA;
  fMaxDaughterDCA = maxDaughterDCA;

  Double_t dca;
  AliEveHF *hf();


  for(List_i i = fChildren.begin(); i != fChildren.end(); ++i)
  {
    AliEveHF* hf = (AliEveHF*) *i;
    Int_t nProng=(Int_t)hf->GetAODobj()->GetNProngs();
    for(Int_t ip = 1; ip < nProng; ++ip) {
      dca = hf->GetProngDCA(ip);
      Bool_t  show = dca >= fMinDaughterDCA && dca <= fMaxDaughterDCA;
      hf->SetRnrState(show);
    }
  }
  ElementChanged();
  gEve->Redraw3D();
}

/******************************************************************************/
//______________________________________________________________________________
/*void AliEveHFList::FilterByCheckedPidMinProb(Int_t rFlag,Int_t rDaughter, Int_t rPid, Float_t rProb)
{

   if (!rDaughter){
    fNegCheckedPid  = rPid;
    fNegCheckedProb = rProb;
  }
  else {
    fPosCheckedPid  = rPid;
    fPosCheckedProb = rProb;
  }

  // Select visibility of elements based on one of the V0 daughters PID
  for(List_i i = fChildren.begin(); i != fChildren.end(); ++i)
  {
    AliEveHF* hf = (AliEveHF*) *i;
    Int_t   pid = 0;
    Float_t prob = 0.0;
    Bool_t  show = 0;
    if     (!rDaughter) {// Negative daughter checked
      pid  = hf->GetNegMaxProbPdg();
      prob = hf->GetNegMaxProbPid();
      show = (pid == fNegCheckedPid && prob > fNegCheckedProb) || !rFlag ;
    }
    else if (rDaughter) {// Positive daughter checked
      pid = hf->GetPosMaxProbPdg();
      prob = hf->GetPosMaxProbPid();
      show = (pid == fPosCheckedPid && prob > fPosCheckedProb) || !rFlag ;
    }
    hf->SetRnrState(show);
exit  }
  ElementChanged();
  gEve->Redraw3D();
  }*/

//______________________________________________________________________________

void AliEveHFList::FilterByInvariantMass(Int_t decay, Float_t deltaInvariantMass)
{
  // Select visibility of elements based on the HF  invariant mass.

  fDeltaInvariantMass = deltaInvariantMass;
  fDecay = decay;

  for(List_i i = fChildren.begin(); i != fChildren.end(); ++i)
  {
    AliEveHF* hf = (AliEveHF*) *i;
    Bool_t show  = hf->SelectInvMass(decay, fDeltaInvariantMass);
    // if (show) show = (invMass >= (fInvariantMass-fDeltaInvariantMass)) && (invMass <= (fInvariantMass+fDeltaInvariantMass));
    hf->SetRnrState(show);
  }
  ElementChanged();
  gEve->Redraw3D();
}
 AliEveHF.cxx:1
 AliEveHF.cxx:2
 AliEveHF.cxx:3
 AliEveHF.cxx:4
 AliEveHF.cxx:5
 AliEveHF.cxx:6
 AliEveHF.cxx:7
 AliEveHF.cxx:8
 AliEveHF.cxx:9
 AliEveHF.cxx:10
 AliEveHF.cxx:11
 AliEveHF.cxx:12
 AliEveHF.cxx:13
 AliEveHF.cxx:14
 AliEveHF.cxx:15
 AliEveHF.cxx:16
 AliEveHF.cxx:17
 AliEveHF.cxx:18
 AliEveHF.cxx:19
 AliEveHF.cxx:20
 AliEveHF.cxx:21
 AliEveHF.cxx:22
 AliEveHF.cxx:23
 AliEveHF.cxx:24
 AliEveHF.cxx:25
 AliEveHF.cxx:26
 AliEveHF.cxx:27
 AliEveHF.cxx:28
 AliEveHF.cxx:29
 AliEveHF.cxx:30
 AliEveHF.cxx:31
 AliEveHF.cxx:32
 AliEveHF.cxx:33
 AliEveHF.cxx:34
 AliEveHF.cxx:35
 AliEveHF.cxx:36
 AliEveHF.cxx:37
 AliEveHF.cxx:38
 AliEveHF.cxx:39
 AliEveHF.cxx:40
 AliEveHF.cxx:41
 AliEveHF.cxx:42
 AliEveHF.cxx:43
 AliEveHF.cxx:44
 AliEveHF.cxx:45
 AliEveHF.cxx:46
 AliEveHF.cxx:47
 AliEveHF.cxx:48
 AliEveHF.cxx:49
 AliEveHF.cxx:50
 AliEveHF.cxx:51
 AliEveHF.cxx:52
 AliEveHF.cxx:53
 AliEveHF.cxx:54
 AliEveHF.cxx:55
 AliEveHF.cxx:56
 AliEveHF.cxx:57
 AliEveHF.cxx:58
 AliEveHF.cxx:59
 AliEveHF.cxx:60
 AliEveHF.cxx:61
 AliEveHF.cxx:62
 AliEveHF.cxx:63
 AliEveHF.cxx:64
 AliEveHF.cxx:65
 AliEveHF.cxx:66
 AliEveHF.cxx:67
 AliEveHF.cxx:68
 AliEveHF.cxx:69
 AliEveHF.cxx:70
 AliEveHF.cxx:71
 AliEveHF.cxx:72
 AliEveHF.cxx:73
 AliEveHF.cxx:74
 AliEveHF.cxx:75
 AliEveHF.cxx:76
 AliEveHF.cxx:77
 AliEveHF.cxx:78
 AliEveHF.cxx:79
 AliEveHF.cxx:80
 AliEveHF.cxx:81
 AliEveHF.cxx:82
 AliEveHF.cxx:83
 AliEveHF.cxx:84
 AliEveHF.cxx:85
 AliEveHF.cxx:86
 AliEveHF.cxx:87
 AliEveHF.cxx:88
 AliEveHF.cxx:89
 AliEveHF.cxx:90
 AliEveHF.cxx:91
 AliEveHF.cxx:92
 AliEveHF.cxx:93
 AliEveHF.cxx:94
 AliEveHF.cxx:95
 AliEveHF.cxx:96
 AliEveHF.cxx:97
 AliEveHF.cxx:98
 AliEveHF.cxx:99
 AliEveHF.cxx:100
 AliEveHF.cxx:101
 AliEveHF.cxx:102
 AliEveHF.cxx:103
 AliEveHF.cxx:104
 AliEveHF.cxx:105
 AliEveHF.cxx:106
 AliEveHF.cxx:107
 AliEveHF.cxx:108
 AliEveHF.cxx:109
 AliEveHF.cxx:110
 AliEveHF.cxx:111
 AliEveHF.cxx:112
 AliEveHF.cxx:113
 AliEveHF.cxx:114
 AliEveHF.cxx:115
 AliEveHF.cxx:116
 AliEveHF.cxx:117
 AliEveHF.cxx:118
 AliEveHF.cxx:119
 AliEveHF.cxx:120
 AliEveHF.cxx:121
 AliEveHF.cxx:122
 AliEveHF.cxx:123
 AliEveHF.cxx:124
 AliEveHF.cxx:125
 AliEveHF.cxx:126
 AliEveHF.cxx:127
 AliEveHF.cxx:128
 AliEveHF.cxx:129
 AliEveHF.cxx:130
 AliEveHF.cxx:131
 AliEveHF.cxx:132
 AliEveHF.cxx:133
 AliEveHF.cxx:134
 AliEveHF.cxx:135
 AliEveHF.cxx:136
 AliEveHF.cxx:137
 AliEveHF.cxx:138
 AliEveHF.cxx:139
 AliEveHF.cxx:140
 AliEveHF.cxx:141
 AliEveHF.cxx:142
 AliEveHF.cxx:143
 AliEveHF.cxx:144
 AliEveHF.cxx:145
 AliEveHF.cxx:146
 AliEveHF.cxx:147
 AliEveHF.cxx:148
 AliEveHF.cxx:149
 AliEveHF.cxx:150
 AliEveHF.cxx:151
 AliEveHF.cxx:152
 AliEveHF.cxx:153
 AliEveHF.cxx:154
 AliEveHF.cxx:155
 AliEveHF.cxx:156
 AliEveHF.cxx:157
 AliEveHF.cxx:158
 AliEveHF.cxx:159
 AliEveHF.cxx:160
 AliEveHF.cxx:161
 AliEveHF.cxx:162
 AliEveHF.cxx:163
 AliEveHF.cxx:164
 AliEveHF.cxx:165
 AliEveHF.cxx:166
 AliEveHF.cxx:167
 AliEveHF.cxx:168
 AliEveHF.cxx:169
 AliEveHF.cxx:170
 AliEveHF.cxx:171
 AliEveHF.cxx:172
 AliEveHF.cxx:173
 AliEveHF.cxx:174
 AliEveHF.cxx:175
 AliEveHF.cxx:176
 AliEveHF.cxx:177
 AliEveHF.cxx:178
 AliEveHF.cxx:179
 AliEveHF.cxx:180
 AliEveHF.cxx:181
 AliEveHF.cxx:182
 AliEveHF.cxx:183
 AliEveHF.cxx:184
 AliEveHF.cxx:185
 AliEveHF.cxx:186
 AliEveHF.cxx:187
 AliEveHF.cxx:188
 AliEveHF.cxx:189
 AliEveHF.cxx:190
 AliEveHF.cxx:191
 AliEveHF.cxx:192
 AliEveHF.cxx:193
 AliEveHF.cxx:194
 AliEveHF.cxx:195
 AliEveHF.cxx:196
 AliEveHF.cxx:197
 AliEveHF.cxx:198
 AliEveHF.cxx:199
 AliEveHF.cxx:200
 AliEveHF.cxx:201
 AliEveHF.cxx:202
 AliEveHF.cxx:203
 AliEveHF.cxx:204
 AliEveHF.cxx:205
 AliEveHF.cxx:206
 AliEveHF.cxx:207
 AliEveHF.cxx:208
 AliEveHF.cxx:209
 AliEveHF.cxx:210
 AliEveHF.cxx:211
 AliEveHF.cxx:212
 AliEveHF.cxx:213
 AliEveHF.cxx:214
 AliEveHF.cxx:215
 AliEveHF.cxx:216
 AliEveHF.cxx:217
 AliEveHF.cxx:218
 AliEveHF.cxx:219
 AliEveHF.cxx:220
 AliEveHF.cxx:221
 AliEveHF.cxx:222
 AliEveHF.cxx:223
 AliEveHF.cxx:224
 AliEveHF.cxx:225
 AliEveHF.cxx:226
 AliEveHF.cxx:227
 AliEveHF.cxx:228
 AliEveHF.cxx:229
 AliEveHF.cxx:230
 AliEveHF.cxx:231
 AliEveHF.cxx:232
 AliEveHF.cxx:233
 AliEveHF.cxx:234
 AliEveHF.cxx:235
 AliEveHF.cxx:236
 AliEveHF.cxx:237
 AliEveHF.cxx:238
 AliEveHF.cxx:239
 AliEveHF.cxx:240
 AliEveHF.cxx:241
 AliEveHF.cxx:242
 AliEveHF.cxx:243
 AliEveHF.cxx:244
 AliEveHF.cxx:245
 AliEveHF.cxx:246
 AliEveHF.cxx:247
 AliEveHF.cxx:248
 AliEveHF.cxx:249
 AliEveHF.cxx:250
 AliEveHF.cxx:251
 AliEveHF.cxx:252
 AliEveHF.cxx:253
 AliEveHF.cxx:254
 AliEveHF.cxx:255
 AliEveHF.cxx:256
 AliEveHF.cxx:257
 AliEveHF.cxx:258
 AliEveHF.cxx:259
 AliEveHF.cxx:260
 AliEveHF.cxx:261
 AliEveHF.cxx:262
 AliEveHF.cxx:263
 AliEveHF.cxx:264
 AliEveHF.cxx:265
 AliEveHF.cxx:266
 AliEveHF.cxx:267
 AliEveHF.cxx:268
 AliEveHF.cxx:269
 AliEveHF.cxx:270
 AliEveHF.cxx:271
 AliEveHF.cxx:272
 AliEveHF.cxx:273
 AliEveHF.cxx:274
 AliEveHF.cxx:275
 AliEveHF.cxx:276
 AliEveHF.cxx:277
 AliEveHF.cxx:278
 AliEveHF.cxx:279
 AliEveHF.cxx:280
 AliEveHF.cxx:281
 AliEveHF.cxx:282
 AliEveHF.cxx:283
 AliEveHF.cxx:284
 AliEveHF.cxx:285
 AliEveHF.cxx:286
 AliEveHF.cxx:287
 AliEveHF.cxx:288
 AliEveHF.cxx:289
 AliEveHF.cxx:290
 AliEveHF.cxx:291
 AliEveHF.cxx:292
 AliEveHF.cxx:293
 AliEveHF.cxx:294
 AliEveHF.cxx:295
 AliEveHF.cxx:296
 AliEveHF.cxx:297
 AliEveHF.cxx:298
 AliEveHF.cxx:299
 AliEveHF.cxx:300
 AliEveHF.cxx:301
 AliEveHF.cxx:302
 AliEveHF.cxx:303
 AliEveHF.cxx:304
 AliEveHF.cxx:305
 AliEveHF.cxx:306
 AliEveHF.cxx:307
 AliEveHF.cxx:308
 AliEveHF.cxx:309
 AliEveHF.cxx:310
 AliEveHF.cxx:311
 AliEveHF.cxx:312
 AliEveHF.cxx:313
 AliEveHF.cxx:314
 AliEveHF.cxx:315
 AliEveHF.cxx:316
 AliEveHF.cxx:317
 AliEveHF.cxx:318
 AliEveHF.cxx:319
 AliEveHF.cxx:320
 AliEveHF.cxx:321
 AliEveHF.cxx:322
 AliEveHF.cxx:323
 AliEveHF.cxx:324
 AliEveHF.cxx:325
 AliEveHF.cxx:326
 AliEveHF.cxx:327
 AliEveHF.cxx:328
 AliEveHF.cxx:329
 AliEveHF.cxx:330
 AliEveHF.cxx:331
 AliEveHF.cxx:332
 AliEveHF.cxx:333
 AliEveHF.cxx:334
 AliEveHF.cxx:335
 AliEveHF.cxx:336
 AliEveHF.cxx:337
 AliEveHF.cxx:338
 AliEveHF.cxx:339
 AliEveHF.cxx:340
 AliEveHF.cxx:341
 AliEveHF.cxx:342
 AliEveHF.cxx:343
 AliEveHF.cxx:344
 AliEveHF.cxx:345
 AliEveHF.cxx:346
 AliEveHF.cxx:347
 AliEveHF.cxx:348
 AliEveHF.cxx:349
 AliEveHF.cxx:350
 AliEveHF.cxx:351
 AliEveHF.cxx:352
 AliEveHF.cxx:353
 AliEveHF.cxx:354
 AliEveHF.cxx:355
 AliEveHF.cxx:356
 AliEveHF.cxx:357
 AliEveHF.cxx:358
 AliEveHF.cxx:359
 AliEveHF.cxx:360
 AliEveHF.cxx:361
 AliEveHF.cxx:362
 AliEveHF.cxx:363
 AliEveHF.cxx:364
 AliEveHF.cxx:365
 AliEveHF.cxx:366
 AliEveHF.cxx:367
 AliEveHF.cxx:368
 AliEveHF.cxx:369
 AliEveHF.cxx:370
 AliEveHF.cxx:371
 AliEveHF.cxx:372
 AliEveHF.cxx:373
 AliEveHF.cxx:374
 AliEveHF.cxx:375
 AliEveHF.cxx:376
 AliEveHF.cxx:377
 AliEveHF.cxx:378
 AliEveHF.cxx:379
 AliEveHF.cxx:380
 AliEveHF.cxx:381
 AliEveHF.cxx:382
 AliEveHF.cxx:383
 AliEveHF.cxx:384
 AliEveHF.cxx:385
 AliEveHF.cxx:386
 AliEveHF.cxx:387
 AliEveHF.cxx:388
 AliEveHF.cxx:389
 AliEveHF.cxx:390
 AliEveHF.cxx:391
 AliEveHF.cxx:392
 AliEveHF.cxx:393
 AliEveHF.cxx:394
 AliEveHF.cxx:395
 AliEveHF.cxx:396
 AliEveHF.cxx:397
 AliEveHF.cxx:398
 AliEveHF.cxx:399
 AliEveHF.cxx:400
 AliEveHF.cxx:401
 AliEveHF.cxx:402
 AliEveHF.cxx:403
 AliEveHF.cxx:404
 AliEveHF.cxx:405
 AliEveHF.cxx:406
 AliEveHF.cxx:407
 AliEveHF.cxx:408
 AliEveHF.cxx:409
 AliEveHF.cxx:410
 AliEveHF.cxx:411
 AliEveHF.cxx:412
 AliEveHF.cxx:413
 AliEveHF.cxx:414
 AliEveHF.cxx:415
 AliEveHF.cxx:416
 AliEveHF.cxx:417
 AliEveHF.cxx:418
 AliEveHF.cxx:419
 AliEveHF.cxx:420
 AliEveHF.cxx:421
 AliEveHF.cxx:422
 AliEveHF.cxx:423
 AliEveHF.cxx:424
 AliEveHF.cxx:425
 AliEveHF.cxx:426
 AliEveHF.cxx:427
 AliEveHF.cxx:428
 AliEveHF.cxx:429
 AliEveHF.cxx:430
 AliEveHF.cxx:431
 AliEveHF.cxx:432
 AliEveHF.cxx:433
 AliEveHF.cxx:434
 AliEveHF.cxx:435
 AliEveHF.cxx:436
 AliEveHF.cxx:437
 AliEveHF.cxx:438
 AliEveHF.cxx:439
 AliEveHF.cxx:440
 AliEveHF.cxx:441
 AliEveHF.cxx:442
 AliEveHF.cxx:443
 AliEveHF.cxx:444
 AliEveHF.cxx:445
 AliEveHF.cxx:446
 AliEveHF.cxx:447
 AliEveHF.cxx:448
 AliEveHF.cxx:449
 AliEveHF.cxx:450
 AliEveHF.cxx:451
 AliEveHF.cxx:452
 AliEveHF.cxx:453
 AliEveHF.cxx:454
 AliEveHF.cxx:455
 AliEveHF.cxx:456
 AliEveHF.cxx:457
 AliEveHF.cxx:458
 AliEveHF.cxx:459
 AliEveHF.cxx:460
 AliEveHF.cxx:461
 AliEveHF.cxx:462
 AliEveHF.cxx:463
 AliEveHF.cxx:464
 AliEveHF.cxx:465
 AliEveHF.cxx:466
 AliEveHF.cxx:467
 AliEveHF.cxx:468
 AliEveHF.cxx:469
 AliEveHF.cxx:470
 AliEveHF.cxx:471
 AliEveHF.cxx:472
 AliEveHF.cxx:473
 AliEveHF.cxx:474
 AliEveHF.cxx:475
 AliEveHF.cxx:476
 AliEveHF.cxx:477
 AliEveHF.cxx:478
 AliEveHF.cxx:479
 AliEveHF.cxx:480
 AliEveHF.cxx:481
 AliEveHF.cxx:482
 AliEveHF.cxx:483
 AliEveHF.cxx:484
 AliEveHF.cxx:485
 AliEveHF.cxx:486
 AliEveHF.cxx:487
 AliEveHF.cxx:488
 AliEveHF.cxx:489
 AliEveHF.cxx:490
 AliEveHF.cxx:491
 AliEveHF.cxx:492
 AliEveHF.cxx:493
 AliEveHF.cxx:494
 AliEveHF.cxx:495
 AliEveHF.cxx:496
 AliEveHF.cxx:497
 AliEveHF.cxx:498
 AliEveHF.cxx:499
 AliEveHF.cxx:500
 AliEveHF.cxx:501
 AliEveHF.cxx:502
 AliEveHF.cxx:503
 AliEveHF.cxx:504
 AliEveHF.cxx:505
 AliEveHF.cxx:506
 AliEveHF.cxx:507
 AliEveHF.cxx:508
 AliEveHF.cxx:509
 AliEveHF.cxx:510
 AliEveHF.cxx:511
 AliEveHF.cxx:512
 AliEveHF.cxx:513
 AliEveHF.cxx:514
 AliEveHF.cxx:515
 AliEveHF.cxx:516
 AliEveHF.cxx:517
 AliEveHF.cxx:518
 AliEveHF.cxx:519
 AliEveHF.cxx:520
 AliEveHF.cxx:521
 AliEveHF.cxx:522
 AliEveHF.cxx:523
 AliEveHF.cxx:524
 AliEveHF.cxx:525
 AliEveHF.cxx:526
 AliEveHF.cxx:527
 AliEveHF.cxx:528
 AliEveHF.cxx:529
 AliEveHF.cxx:530
 AliEveHF.cxx:531
 AliEveHF.cxx:532
 AliEveHF.cxx:533
 AliEveHF.cxx:534
 AliEveHF.cxx:535
 AliEveHF.cxx:536
 AliEveHF.cxx:537
 AliEveHF.cxx:538
 AliEveHF.cxx:539
 AliEveHF.cxx:540
 AliEveHF.cxx:541
 AliEveHF.cxx:542
 AliEveHF.cxx:543