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.                  *
 **************************************************************************/

//Utils for identified fragmentation function (IDFF) analysis
//Author: Xianguo Lu (xianguo.lu@cern.ch)

#include "AliIDFFUtils.h"
#include "AliAODEvent.h"
#include "AliAODMCParticle.h"
#include "AliESDtrack.h"

#include "TClonesArray.h"

ClassImp(AliIDFFUtils);

AliPIDResponse * AliIDFFUtils::fPid=0x0;

Int_t AliIDFFUtils::PDG2Type(const Int_t pdg)
{
  //
  //conversion from pdg code to local definition of particle type
  //

  Int_t itype = kNOTSELECTED;
  switch(pdg){
  case 11:
    itype = kELECTRON;
    break;
  case 211:
    itype = kPION;
    break;
  case 2212:
    itype = kPROTON;
    break;
  case 321:
    itype = kKAON;
    break;
  default:
    itype = kNOTSELECTED;
    break;
  }
  return itype;
}

THnSparseD *AliIDFFUtils::GetTHn(const TString name)
{
  //
  //get THnSparseD
  //

  const Int_t nvar = 11;
  //                                   0       1              2              3               4     5      6       7       8         9     10   
  const TString atitle[nvar]={"TrackEta","JetPt", "TrackTPCsig", "Log10TrackP", "Log10TrackPt",  "z",  "xi",  "pdg",  "comb",   "tof",  "tpc"};
  const Int_t nbins[nvar]   ={         4,     15,          1200,          Nx(),             50,   30,    60,      7,      7,        7,      7};
  const Double_t xmins[nvar]={         0,      5,             0,        Xmin(),         Xmin(),    0,     0,   -3.5,   -3.5,     -3.5,   -3.5};
  const Double_t xmaxs[nvar]={       0.9,     20,           200,        Xmax(),         Xmax(),  1.2,     6,    3.5,    3.5,      3.5,    3.5};

  THnSparseD * hh = new THnSparseD(name,"", nvar, nbins, xmins, xmaxs);
  for(Int_t ia=0; ia<nvar; ia++){
    hh->GetAxis(ia)->SetTitle(atitle[ia]);
  }

  TAxis * ax = 0x0;
  Int_t nb = 0;

  //0: eta bin
  ax = hh->GetAxis(0);
  nb = ax->GetNbins();
  const Double_t etas[]={0, 0.2, 0.4, 0.6, 0.9};
  ax->Set(nb, etas);

  return hh;
}

/*
Bool_t AliIDFFUtils::HMPIDAcceptance(const AliAODTrack *track)
{
  //
  //check HMPID acceptance
  //From S. Pochybova
  //

  Double_t tEta = TMath::Abs(track->Eta());
  Double_t tPhi = track->Phi();
  if(tPhi < 0.) tPhi += TMath::TwoPi();
  if(tPhi > TMath::TwoPi()) tPhi -= TMath::TwoPi();

  if(tEta > 0.46){
    return kFALSE;
  }

  if(tPhi < 0.08 || tPhi > 1.12){
    return kFALSE;
  }

  return kTRUE;
}

Bool_t AliIDFFUtils::HMPIDQA(const AliAODTrack *track)
{
  //
  //check HMPID PID quality
  //From S. Pochybova
  //

  if(track->GetHMPIDsignal() <= 0.){
    return kFALSE;
  }
  
  //check track-quality cuts
  //dist_(mip-trk)
  //track variables
  Float_t tX, tY, tTh, tPh;
  //mip variables
  Float_t mpX, mpY;
  Int_t mpQ, mpNph;
  track->GetHMPIDtrk(tX, tY, tTh, tPh);
  track->GetHMPIDmip(mpX, mpY, mpQ, mpNph);
  const Double_t dist = TMath::Sqrt((tX-mpX)*(tX-mpX)+(tY-mpY)*(tY-mpY));

  //taking the pass 2 case for the moment
  if(dist > 1){
    //Printf("Track did not pass the distance cut");
    return kFALSE;
  }

  //cut on charge
  //have to check if this also varies with pass
  //taking the pass 2 case for the moment
  if(mpQ < 120){
    //Printf("Track did not pass the MipQ cut");
    return kFALSE;
  }

  return kTRUE;
}

Int_t AliIDFFUtils::HMPIDType(const AliAODTrack * track)
{
  //
  //return the (locally defined) particle type judged by HMPID
  //From S. Pochybova
  //

  if(!HMPIDAcceptance(track))
    return kNOTACCEPTED;

  if(!HMPIDQA(track))
    return kNOINFO;

  Double_t nsigma[]={-999,-999,-999};
  nsigma[kPION]     = fPid->NumberOfSigmasHMPID( track, AliPID::kPion);
  nsigma[kKAON]     = fPid->NumberOfSigmasHMPID( track, AliPID::kKaon);
  nsigma[kPROTON]   = fPid->NumberOfSigmasHMPID( track, AliPID::kProton);

  const Double_t inclusion=2;
  const Double_t exclusion=3;

  if(TMath::Abs(nsigma[kPION])<inclusion && TMath::Abs(nsigma[kKAON])>exclusion && TMath::Abs(nsigma[kPROTON])>exclusion) return kPION;
  if(TMath::Abs(nsigma[kPION])>exclusion && TMath::Abs(nsigma[kKAON])<inclusion && TMath::Abs(nsigma[kPROTON])>exclusion) return kKAON;
  if(TMath::Abs(nsigma[kPION])>exclusion && TMath::Abs(nsigma[kKAON])>exclusion && TMath::Abs(nsigma[kPROTON])<inclusion) return kPROTON;

  return kNOTSELECTED;
}
*/


Int_t AliIDFFUtils::TPCType(const AliAODTrack * trackptr)
{
  //
  //return the (locally defined) particle type judged by TPC
  //use tofmode for TPC mode
  //

  const AliPIDResponse::EDetPidStatus tpcstatus =  fPid->CheckPIDStatus(AliPIDResponse::kTPC, trackptr);
  if(tpcstatus != AliPIDResponse::kDetPidOk)
    return kNOINFO;

  Double_t nsigma[]={-999,-999,-999, -999};
  nsigma[kPION]     = fPid->NumberOfSigmasTPC( trackptr, AliPID::kPion);
  nsigma[kKAON]     = fPid->NumberOfSigmasTPC( trackptr, AliPID::kKaon);
  nsigma[kPROTON]   = fPid->NumberOfSigmasTPC( trackptr, AliPID::kProton);
  nsigma[kELECTRON] = fPid->NumberOfSigmasTPC( trackptr, AliPID::kElectron);

  //so that the effective region is really low momentum
  const Double_t inclusion=5;
  const Double_t exclusion=5;

  //don't destroy TPC signal shape below 120
  const Double_t maxsig = 150;
  if(trackptr->GetTPCsignal()> maxsig){
    if(TMath::Abs(nsigma[kPION])<inclusion && TMath::Abs(nsigma[kKAON])>exclusion && TMath::Abs(nsigma[kPROTON])>exclusion && TMath::Abs(nsigma[kELECTRON])>exclusion) return kPION;
    if(TMath::Abs(nsigma[kPION])>exclusion && TMath::Abs(nsigma[kKAON])<inclusion && TMath::Abs(nsigma[kPROTON])>exclusion && TMath::Abs(nsigma[kELECTRON])>exclusion) return kKAON;
    if(TMath::Abs(nsigma[kPION])>exclusion && TMath::Abs(nsigma[kKAON])>exclusion && TMath::Abs(nsigma[kPROTON])<inclusion && TMath::Abs(nsigma[kELECTRON])>exclusion) return kPROTON;
    if(TMath::Abs(nsigma[kPION])>exclusion && TMath::Abs(nsigma[kKAON])>exclusion && TMath::Abs(nsigma[kPROTON])>exclusion && TMath::Abs(nsigma[kELECTRON])<inclusion) return kELECTRON;
  }

  return kNOTSELECTED;
}

Int_t AliIDFFUtils::TOFType(const AliAODTrack * trackptr, const Int_t tofmode)
{
  //
  //return the (locally defined) particle type judged by TOF
  //

  //check kTOFout, kTIME, mismatch 
  const AliPIDResponse::EDetPidStatus tofstatus =  fPid->CheckPIDStatus(AliPIDResponse::kTOF, trackptr);
  if(tofstatus != AliPIDResponse::kDetPidOk)
    return kNOINFO;

  Double_t nsigma[]={-999,-999,-999, -999};
  nsigma[kPION]     = fPid->NumberOfSigmasTOF( trackptr, AliPID::kPion);
  nsigma[kKAON]     = fPid->NumberOfSigmasTOF( trackptr, AliPID::kKaon);
  nsigma[kPROTON]   = fPid->NumberOfSigmasTOF( trackptr, AliPID::kProton);
  nsigma[kELECTRON] = fPid->NumberOfSigmasTOF( trackptr, AliPID::kElectron);

  Double_t inclusion=-999;
  Double_t exclusion=-999;
  if(tofmode == 1){
    inclusion = 2;
    exclusion = 2;
  }
  else if(tofmode == 2){
    inclusion = 2;
    exclusion = 3;
  }
  else if(tofmode == 3){
    inclusion = 3;
    exclusion = 3;
  }
  else if(tofmode == 4){
    inclusion = 3;
    exclusion = 4;
  }
  else{
    printf("AliIDFFUtils::TOFType bad tofmode ! %d\n", tofmode); exit(1);
  }

  const Bool_t kpassEle = kTRUE;
  /*
  const Double_t cutEle = 1.5; 
  //tofmode = 1x then require electron exclusion cut
  if( tofmode == 4 ){
    if(TMath::Abs(nsigma[kELECTRON])> cutEle ){
      kpassEle = kTRUE;
    }
    else{
      kpassEle = kFALSE;
    }
  }
  */

  //cut on electron for pion because the precision of pion is good and the contamination of electron can not be ignored
  //+1 exclusion sigma in electron/pion to enforce better purity, otherwise not only pion, but also kaon is bias for jet pt 5-10 GeV/c
  if(TMath::Abs(nsigma[kPION])<inclusion     && TMath::Abs(nsigma[kKAON])>exclusion && TMath::Abs(nsigma[kPROTON])>exclusion && kpassEle) return kPION;
  if(TMath::Abs(nsigma[kPION])>exclusion     && TMath::Abs(nsigma[kKAON])<inclusion && TMath::Abs(nsigma[kPROTON])>exclusion && kpassEle) return kKAON;
  if(TMath::Abs(nsigma[kPION])>exclusion     && TMath::Abs(nsigma[kKAON])>exclusion && TMath::Abs(nsigma[kPROTON])<inclusion && kpassEle) return kPROTON;
  if(TMath::Abs(nsigma[kPION])>exclusion+0.5 && TMath::Abs(nsigma[kKAON])>exclusion && TMath::Abs(nsigma[kPROTON])>exclusion && TMath::Abs(nsigma[kELECTRON])<inclusion) return kELECTRON;

  return kNOTSELECTED;
}

Int_t AliIDFFUtils::CombineTPCTOF(const Int_t ktpc, const Int_t ktof)
{
  //tpc and tof, if <0 only noinfo or notselected
  if(ktpc == ktof)
    return ktpc;
  else if(ktpc < 0 && ktof >= 0 )
    return ktof;
  else if(ktof < 0 && ktpc >= 0)
    return ktpc;
  else
    return kNOTACCEPTED;
}

void AliIDFFUtils::FillTHn(THnSparseD * hh, Double_t jetpt, const AliAODTrack * track,  AliAODEvent *aodevent, const Int_t tofmode) //AliMCEvent * mcevent)
{
  //
  //fill variables
  //

  Int_t mcpdg = kNOINFO;

  TClonesArray *tca = dynamic_cast<TClonesArray*>(aodevent->FindListObject(AliAODMCParticle::StdBranchName()));
  if(tca){
    const Int_t mclabel = TMath::Abs(track->GetLabel());

    AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tca->At(mclabel));
    if(gentrack){
      //printf("null gentrack in AliIDFFUtils::FillTHn mclabel %d\n", mclabel);
      mcpdg = PDG2Type(TMath::Abs(gentrack->GetPdgCode()));
    }
  }
  
  //===========================================================================================================

  //use tofmode for tpcmode
  const Int_t ktpc = TPCType(track);
  const Int_t ktof = TOFType(track, tofmode);

  //fake kcomb by pretpc+pretof
  const Int_t kcomb = CombineTPCTOF(ktpc, ktof);

  //const Int_t khmpid = HMPIDType(track);

  //===========================================================================================================

  const Double_t eps = 1e-6;
  const Double_t tracketa = TMath::Abs(track->Eta());
  Double_t tracktpc = track->GetTPCsignal();
  if(tracktpc>=200)
    tracktpc = 200 - eps;
  const Double_t tracklogmom = TMath::Log10(track->P());
  const Double_t tracklogpt  = TMath::Log10(track->Pt());

  Double_t zz = -999;
  Double_t xi = -999;
  if(jetpt<-990){
    jetpt = zz = xi = eps;
  }
  //from Oliver
  else if(track->Pt()>(1-eps)*jetpt && track->Pt()<(1+eps)*jetpt){ // case z=1 : move entry to last histo bin <1
    zz  = 1-eps;
    xi = eps;
  }
  else if(jetpt>0){
    zz = track->Pt()/jetpt;
    xi = TMath::Log(1/zz);
  }

  //===========================================================================================================

  const Double_t vars[]={tracketa, jetpt, tracktpc, tracklogmom, tracklogpt, zz, xi, (Double_t)mcpdg, (Double_t)kcomb, (Double_t)ktof, (Double_t)ktpc};
  
  hh->Fill(vars);
}

//_________________________________________________________________________________
Bool_t AliIDFFUtils::TPCCutPIDN(const AliAODTrack * track)
{
  //
  //TPC Cut kPIDN
  //

  //assuming this cut is particle type independent, then it is fine
  //need further investigation
  if(track->GetTPCsignalN()<60){
    return kFALSE;
  }

  return kTRUE;
}

//_________________________________________________________________________________
Bool_t AliIDFFUtils::TPCCutMIGeo(const AliAODTrack * track, const AliVEvent* evt, TTreeStream * streamer)
{
  //
  //TPC Cut MIGeo
  //

  Short_t sign = track->Charge();
  Double_t xyz[50];
  Double_t pxpypz[50];
  Double_t cv[100];

  track->GetXYZ(xyz);
  track->GetPxPyPz(pxpypz);

  AliExternalTrackParam * par = new AliExternalTrackParam(xyz, pxpypz, cv, sign);
  AliESDtrack dummy;

  Double_t varGeom = dummy.GetLengthInActiveZone(par,3,236, evt->GetMagneticField(), 0,0);
  Double_t varNcr  = track->GetTPCClusterInfo(3,1);
  Double_t varNcls = track->GetTPCsignalN();

  Bool_t cutGeom     = varGeom > 1.*(130-5*TMath::Abs(1./track->Pt()));
  Bool_t cutNcr      = varNcr  > 0.85*(130-5*TMath::Abs(1./track->Pt()));
  Bool_t cutNcls     = varNcls > 0.7*(130-5*TMath::Abs(1./track->Pt()));

  Bool_t kout = cutGeom && cutNcr && cutNcls;

  if(streamer){
    Double_t dedx = track->GetTPCsignal();

    (*streamer)<<"tree"<<
      "param.="<< par<<

      "varGeom="<<varGeom<<
      "varNcr="<<varNcr<<
      "varNcls="<<varNcls<<

      "cutGeom="<<cutGeom<<
      "cutNcr="<<cutNcr<<
      "cutNcls="<<cutNcls<<

      "kout="<<kout<<
      "dedx="<<dedx<<

      "\n";
  }

  delete par;

  return kout;
}

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