ROOT logo
// 
// Utilities used in the forward multiplcity analysis 
// 
//
#include "AliForwardUtil.h"
//#include <ARVersion.h>
#include <AliAnalysisManager.h>
#include "AliAODForwardMult.h"
#include <AliLog.h>
#include <AliInputEventHandler.h>
#include <AliAODInputHandler.h>
#include <AliAODHandler.h>
#include <AliAODEvent.h>
#include <AliESDEvent.h>
#include <AliAnalysisTaskSE.h>
#include <AliPhysicsSelection.h>
#include <AliTriggerAnalysis.h>
#include <AliMultiplicity.h>
#include <TParameter.h>
#include <TH2D.h>
#include <TH1I.h>
#include <TF1.h>
#include <TFitResult.h>
#include <TMath.h>
#include <TError.h>
#include <TROOT.h>
#define FIT_OPTIONS "RNS"

//====================================================================
ULong_t AliForwardUtil::AliROOTRevision()
{
#ifdef ALIROOT_SVN_REVISION
  return ALIROOT_SVN_REVISION;
#elif defined(ALIROOT_REVISION)
  static ULong_t ret = 0;
  if (ret != 0) return ret;

  // Select first 32bits of the 40byte long check-sum
  TString rev(ALIROOT_REVISION, 8);
  for (ULong_t i = 0; i < 8; i++) {
    ULong_t p = 0;
    switch (rev[i]) { 
    case '0': p = 0; break;
    case '1': p = 1; break;
    case '2': p = 2; break;
    case '3': p = 3; break;
    case '4': p = 4; break;
    case '5': p = 5; break;
    case '6': p = 6; break;
    case '7': p = 7; break;
    case '8': p = 8; break;
    case '9': p = 9; break;
    case 'a': case 'A': p = 10; break;
    case 'b': case 'B': p = 11; break;
    case 'c': case 'C': p = 12; break;
    case 'd': case 'D': p = 13; break;
    case 'e': case 'E': p = 14; break;
    case 'f': case 'F': p = 15; break;
    }
    ret |= (p << (32-4*(i+1)));
  }
  return ret;
#else
  return 0;
#endif
}
//____________________________________________________________________
ULong_t AliForwardUtil::AliROOTBranch()
{
  // Do something here when we switch to git - sigh!
#if !defined(ALIROOT_SVN_BRANCH) && !defined(ALIROOT_BRANCH) 
  return 0;
#endif
  static ULong_t ret = 0;
  if (ret != 0) return ret;
  TString str;
  TString top;
#ifdef ALIROOT_SVN_BRANCH
  str = ALIROOT_SVN_BRANCH;
  top = "trunk";
#elif defined(ALIROOT_BRANCH)
  str = ALIROOT_BRANCH;
  top = "master";
#endif
  if (str.IsNull()) return 0xFFFFFFFF;
  if (str[0] == 'v') str.Remove(0,1);
  if (str.EqualTo(top)) return ret = 0xFFFFFFFF;

  TObjArray*   tokens = str.Tokenize("-");
  TObjString*  pMajor = tokens->GetEntries()>0 ? 
    (static_cast<TObjString*>(tokens->At(0))) : 0;
  TObjString*  pMinor = tokens->GetEntries()>1 ? 
    (static_cast<TObjString*>(tokens->At(1))) : 0;
  TObjString*  pRelea = tokens->GetEntries() > 2 ? 
    static_cast<TObjString*>(tokens->At(2)) : 0;
  TObjString* pAn     = tokens->GetEntries() > 3 ? 
    static_cast<TObjString*>(tokens->At(3)) : 0;
  TString sMajor,sMinor,sRelea;
  if (pMajor) sMajor = pMajor->String().Strip(TString::kLeading, '0'); 
  if (pMinor) sMinor = pMinor->String().Strip(TString::kLeading, '0');
  if (pRelea) sRelea = pRelea->String().Strip(TString::kLeading, '0');
  //
  ret = (((sMajor.Atoi() & 0xFF) << 12) |
    ((sMinor.Atoi() & 0xFF) <<  8) |
    ((sRelea.Atoi() & 0xFF) <<  4) |
    (pAn ? 0xAA : 0));
  
  return ret;
}

//====================================================================
UShort_t
AliForwardUtil::ParseCollisionSystem(const char* sys)
{
  // 
  // Parse a collision system spec given in a string.   Known values are 
  // 
  //  - "ppb", "p-pb", "pa", "p-a"  which returns kPPb
  //  - "pp", "p-p"                 which returns kPP 
  //  - "PbPb", "Pb-Pb", "A-A",     which returns kPbPb 
  //  - Everything else gives kUnknown 
  // 
  // Parameters:
  //    sys Collision system spec 
  // 
  // Return:
  //    Collision system id 
  //
  TString s(sys);
  s.ToLower();
  // we do pA first to avoid pp catch on ppb string (AH)
  if (s.Contains("p-pb")  || s.Contains("ppb"))   return AliForwardUtil::kPPb;
  if (s.Contains("p-a")   || s.Contains("pa"))    return AliForwardUtil::kPPb;
  if (s.Contains("a-p")   || s.Contains("ap"))    return AliForwardUtil::kPPb;
  if (s.Contains("p-p")   || s.Contains("pp"))    return AliForwardUtil::kPP; 
  if (s.Contains("pb-pb") || s.Contains("pbpb"))  return AliForwardUtil::kPbPb;
  if (s.Contains("a-a")   || s.Contains("aa"))    return AliForwardUtil::kPbPb;
  return AliForwardUtil::kUnknown;
}
//____________________________________________________________________
const char*
AliForwardUtil::CollisionSystemString(UShort_t sys)
{
  // 
  // Get a string representation of the collision system 
  // 
  // Parameters:
  //    sys  Collision system 
  // - kPP -> "pp"
  // - kPbPb -> "PbPb" 
  // - anything else gives "unknown"
  // 
  // Return:
  //    String representation of the collision system 
  //
  switch (sys) { 
  case AliForwardUtil::kPP:   return "pp";
  case AliForwardUtil::kPbPb: return "PbPb";
  case AliForwardUtil::kPPb:  return "pPb";
  }
  return "unknown";
}
//____________________________________________________________________
Float_t
AliForwardUtil::BeamRapidity(Float_t beam, UShort_t z, UShort_t a)
{
  const Double_t pMass = 9.38271999999999995e-01;
  const Double_t nMass = 9.39564999999999984e-01;
  Double_t       beamE = z * beam / 2;
  Double_t       beamM = z * pMass + (a - z) * nMass;
  Double_t       beamP = TMath::Sqrt(beamE * beamE - beamM * beamM);
  Double_t       beamY = .5* TMath::Log((beamE+beamP) / (beamE-beamP));
  return beamY;
}
//____________________________________________________________________
Float_t
AliForwardUtil::CenterOfMassEnergy(Float_t beam, 
				   UShort_t z1, 
				   UShort_t a1, 
				   Short_t z2, 
				   Short_t a2) 
{
  // Calculate the center of mass energy given target/projectile 
  // mass and charge numbers
  if (z2 < 0) z2 = z1;
  if (a2 < 0) a2 = a1;
  return TMath::Sqrt(Float_t(z1*z2)/a1/a2) * beam;
}
//____________________________________________________________________
Float_t
AliForwardUtil::CenterOfMassRapidity(UShort_t z1, 
				     UShort_t a1, 
				     Short_t z2, 
				     Short_t a2) 
{
  // Calculate the center of mass rapidity (shift) given target/projectile 
  // mass and charge numbers
  if (z2 < 0) z2 = z1;
  if (a2 < 0) a2 = a1;
  if (z2 == z1 && a2 == a1) return 0;
  return .5 * TMath::Log(Float_t(z1*a2)/z2/a1);
}

namespace {
  UShort_t CheckSNN(Float_t energy)
  {
    if (TMath::Abs(energy - 900.)   < 10)  return 900;
    if (TMath::Abs(energy - 2400.)  < 10)  return 2400;
    if (TMath::Abs(energy - 2760.)  < 20)  return 2760;
    if (TMath::Abs(energy - 4400.)  < 10)  return 4400;
    if (TMath::Abs(energy - 5022.)  < 10)  return 5023;
    if (TMath::Abs(energy - 5500.)  < 40)  return 5500;
    if (TMath::Abs(energy - 7000.)  < 10)  return 7000;
    if (TMath::Abs(energy - 8000.)  < 10)  return 8000;
    if (TMath::Abs(energy - 10000.) < 10)  return 10000;
    if (TMath::Abs(energy - 14000.) < 10)  return 14000;
    return 0;
  }
}
//____________________________________________________________________
UShort_t
AliForwardUtil::ParseCenterOfMassEnergy(UShort_t sys, Float_t beam)
{
  // 
  // Parse the center of mass energy given as a float and return known 
  // values as a unsigned integer
  // 
  // Parameters:
  //    sys   Collision system (needed for AA)
  //    beam  Center of mass energy * total charge 
  // 
  // Return:
  //    Center of mass energy per nucleon
  //
  Float_t energy = beam; 
  // Below no longer needed apparently
  // if (sys == AliForwardUtil::kPbPb) energy = energy / 208 * 82;
  if (sys == AliForwardUtil::kPPb) 
    energy = CenterOfMassEnergy(beam, 82, 208, 1, 1);
  else if (sys == AliForwardUtil::kPbPb) 
    energy = CenterOfMassEnergy(beam, 82, 208, 82, 208);
  UShort_t ret = CheckSNN(energy);
  if (ret > 1) return ret;
  if (sys == AliForwardUtil::kPbPb || sys == AliForwardUtil::kPPb) {
    ret = CheckSNN(beam);
  }
  return ret;
}
//____________________________________________________________________
const char* 
AliForwardUtil::CenterOfMassEnergyString(UShort_t cms)
{
  // 
  // Get a string representation of the center of mass energy per nuclean
  // 
  // Parameters:
  //    cms  Center of mass energy per nucleon
  // 
  // Return:
  //    String representation of the center of mass energy per nuclean
  //
  return Form("%04dGeV", cms);
}
//____________________________________________________________________
Short_t
AliForwardUtil::ParseMagneticField(Float_t v)
{
  // 
  // Parse the magnetic field (in kG) as given by a floating point number
  // 
  // Parameters:
  //    field  Magnetic field in kG 
  // 
  // Return:
  //    Short integer value of magnetic field in kG 
  //
  if (TMath::Abs(v - 5.) < 1 ) return +5;
  if (TMath::Abs(v + 5.) < 1 ) return -5;
  if (TMath::Abs(v) < 1)       return 0;
  return 999;
}
//____________________________________________________________________
const char* 
AliForwardUtil::MagneticFieldString(Short_t f)
{
  // 
  // Get a string representation of the magnetic field
  // 
  // Parameters:
  //    field Magnetic field in kG
  // 
  // Return:
  //    String representation of the magnetic field
  //
  return Form("%01dkG", f);
}
//_____________________________________________________________________
AliAODEvent* AliForwardUtil::GetAODEvent(AliAnalysisTaskSE* task)
{
  // Check if AOD is the output event
  if (!task) ::Fatal("GetAODEvent", "Null task given, cannot do that");

  AliAODEvent* ret = task->AODEvent();
  if (ret) return ret; 
  
  // Check if AOD is the input event 
  ret = dynamic_cast<AliAODEvent*>(task->InputEvent());
  if (!ret) ::Warning("GetAODEvent", "No AOD event found");
  
  return ret; 
}
//_____________________________________________________________________
UShort_t AliForwardUtil::CheckForAOD()
{
  AliAnalysisManager* am = AliAnalysisManager::GetAnalysisManager();
  if (dynamic_cast<AliAODInputHandler*>(am->GetInputEventHandler())) {
    // ::Info("CheckForAOD", "Found AOD Input handler");
    return 1;
  }
  if (dynamic_cast<AliAODHandler*>(am->GetOutputEventHandler())) {
    // ::Info("CheckForAOD", "Found AOD Output handler");
    return 2;
  }

  ::Warning("CheckForAOD", 
	    "Neither and input nor output AOD handler is specified");
  return 0;
}
//_____________________________________________________________________
Bool_t AliForwardUtil::CheckForTask(const char* clsOrName, Bool_t cls)
{
  AliAnalysisManager* am = AliAnalysisManager::GetAnalysisManager();
  if (!cls) { 
    AliAnalysisTask* t = am->GetTask(clsOrName);
    if (!t) { 
      ::Warning("CheckForTask", "Task %s not found in manager", clsOrName);
      return false;
    }
    ::Info("CheckForTask", "Found task %s", clsOrName);
    return true;
  }
  TClass* dep = gROOT->GetClass(clsOrName);
  if (!dep) { 
    ::Warning("CheckForTask", "Unknown class %s for needed task", clsOrName);
    return false;
  }
  TIter next(am->GetTasks());
  TObject* o = 0;
  while ((o = next())) { 
    if (o->IsA()->InheritsFrom(dep)) {
      ::Info("CheckForTask", "Found task of class %s: %s", 
	     clsOrName, o->GetName());
      return true;
    }
  }
  ::Warning("CheckForTask", "No task of class %s was found", clsOrName);
  return false;
}

//_____________________________________________________________________
TObject* AliForwardUtil::MakeParameter(const Char_t* name, UShort_t value)
{
  TParameter<int>* ret = new TParameter<int>(name, value);
  ret->SetMergeMode('f');
  ret->SetUniqueID(value);
  return ret;
}
//_____________________________________________________________________
TObject* AliForwardUtil::MakeParameter(const Char_t* name, Int_t value)
{
  TParameter<int>* ret = new TParameter<int>(name, value);
  ret->SetMergeMode('f');
  ret->SetUniqueID(value);
  return ret;
}
//_____________________________________________________________________
TObject* AliForwardUtil::MakeParameter(const Char_t* name, ULong_t value)
{
  TParameter<Long_t>* ret = new TParameter<Long_t>(name, value);
  ret->SetMergeMode('f');
  ret->SetUniqueID(value);
  return ret;
}
//_____________________________________________________________________
TObject* AliForwardUtil::MakeParameter(const Char_t* name, Double_t value)
{
  TParameter<double>* ret = new TParameter<double>(name, value);
  // Float_t v = value;
  // UInt_t* tmp = reinterpret_cast<UInt_t*>(&v);
  ret->SetMergeMode('f');
  // ret->SetUniqueID(*tmp);
  return ret;
}
//_____________________________________________________________________
TObject* AliForwardUtil::MakeParameter(const Char_t* name, Bool_t value)
{
  TParameter<bool>* ret = new TParameter<bool>(name, value);
  ret->SetMergeMode('f');
  ret->SetUniqueID(value);
  return ret;
}

//_____________________________________________________________________
void AliForwardUtil::GetParameter(TObject* o, UShort_t& value)
{
  if (!o) return;
  TParameter<int>* p = static_cast<TParameter<int>*>(o);
  if (p->TestBit(BIT(19)))
    value = p->GetVal(); 
  else
    value = o->GetUniqueID();
}
//_____________________________________________________________________
void AliForwardUtil::GetParameter(TObject* o, Int_t& value)
{
  if (!o) return;
  TParameter<int>* p = static_cast<TParameter<int>*>(o);
  if (p->TestBit(BIT(19)))
    value = p->GetVal(); 
  else
    value = o->GetUniqueID();
}
//_____________________________________________________________________
void AliForwardUtil::GetParameter(TObject* o, ULong_t& value)
{
  if (!o) return;
  TParameter<Long_t>* p = static_cast<TParameter<Long_t>*>(o);
  if (p->TestBit(BIT(19)))
    value = p->GetVal(); 
  else
    value = o->GetUniqueID();
}
//_____________________________________________________________________
void AliForwardUtil::GetParameter(TObject* o, Double_t& value)
{
  if (!o) return;
  TParameter<double>* p = static_cast<TParameter<double>*>(o);
  if (p->TestBit(BIT(19)))
    value = p->GetVal(); // o->GetUniqueID();
  else {
    UInt_t  i = o->GetUniqueID();
    Float_t v = *reinterpret_cast<Float_t*>(&i);
    value = v;
  }
}
//_____________________________________________________________________
void AliForwardUtil::GetParameter(TObject* o, Bool_t& value)
{
  if (!o) return;
  TParameter<bool>* p = static_cast<TParameter<bool>*>(o);
  if (p->TestBit(BIT(19)))
    value = p->GetVal(); // o->GetUniqueID();
  else
    value = o->GetUniqueID();
}
  
#if 0
//_____________________________________________________________________
Double_t AliForwardUtil::GetStripR(Char_t ring, UShort_t strip)
{
  // Get max R of ring
  // 
  // Optimized version that has a cache 
  static TArrayD inner;
  static TArrayD outer; 
  if (inner.GetSize() <= 0 || outer.GetSize() <= 0) {
    const Double_t minR[] = {  4.5213, 15.4 };
    const Double_t maxR[] = { 17.2,    28.0 };
    const Int_t    nStr[] = { 512,     256  };
    for (Int_t q = 0; q < 2; q++) { 
      TArrayD& a = (q == 0 ? inner : outer);
      a.Set(nStr[q]);

      for (Int_t it = 0; it < nStr[q]; it++) {
	Double_t   rad     = maxR[q] - minR[q];
	Double_t   segment = rad / nStr[q];
	Double_t   r       = minR[q] + segment*strip;
	a[it]              = r;
      }
    }
  }
  if (ring == 'I' || ring == 'i') return inner.At(strip);
  return outer.At(strip);
}
#else
//_____________________________________________________________________
Double_t AliForwardUtil::GetStripR(Char_t ring, UShort_t strip)
{
  // Get max R of ring
  // 
  // New implementation has only one branch
  const Double_t minR[] = {  4.5213, 15.4 };
  const Double_t maxR[] = { 17.2,    28.0 };
  const Int_t    nStr[] = { 512,     256  };

  Int_t      q       = (ring == 'I' || ring == 'i') ? 0 : 1;  
  Double_t   rad     = maxR[q] - minR[q];
  Double_t   segment = rad / nStr[q];
  Double_t   r       = minR[q] + segment*strip;

  return r;
}
#endif

#if 1
//_____________________________________________________________________
Double_t AliForwardUtil::GetEtaFromStrip(UShort_t det, Char_t ring, 
					 UShort_t sec, UShort_t strip, 
					 Double_t zvtx)
{
  // Calculate eta from strip with vertex (redundant with
  // AliESDFMD::Eta but support displaced vertices)
  //
  // Slightly more optimized version that uses less branching 
  
  // Get R of the strip
  Double_t   r         = GetStripR(ring, strip);
  Int_t      hybrid    = sec / 2;
  Int_t      q        = (ring == 'I' || ring == 'i') ? 0 : 1;

  const Double_t zs[][2] = { { 320.266, -999999 }, 
			    {  83.666,  74.966 },
			    { -63.066, -74.966 } };
  if (det > 3 || zs[det-1][q] == -999999) return -999999;

  Double_t z = zs[det-1][q];
  if ((hybrid % 2) == 0) z -= .5;
  
  Double_t   theta = TMath::ATan2(r,z-zvtx);
  Double_t   eta   = -1*TMath::Log(TMath::Tan(0.5*theta));
  
  return eta;
}
#else
//_____________________________________________________________________
Double_t AliForwardUtil::GetEtaFromStrip(UShort_t det, Char_t ring, 
					 UShort_t sec, UShort_t strip, 
					 Double_t zvtx)
{
  // Calculate eta from strip with vertex (redundant with
  // AliESDFMD::Eta but support displaced vertices)
  
  //Get max R of ring
  Double_t   r         = GetStripR(ring, strip);
  Int_t      hybrid    = sec / 2;
  Bool_t     inner     = (ring == 'I' || ring == 'i');
  Double_t   z         = 0;


  switch (det) { 
  case 1: z = 320.266;                     break;
  case 2: z = (inner ?  83.666 :  74.966); break;
  case 3: z = (inner ? -63.066 : -74.966); break; 
  default: return -999999;
  }
  if ((hybrid % 2) == 0) z -= .5;
  
  Double_t   theta = TMath::ATan2(r,z-zvtx);
  Double_t   eta   = -1*TMath::Log(TMath::Tan(0.5*theta));
  
  return eta;
}
#endif

//_____________________________________________________________________
Double_t AliForwardUtil::GetPhiFromStrip(Char_t ring, UShort_t strip, 
					 Double_t phi,
					 Double_t xvtx, Double_t yvtx)
{
  // Calculate eta from strip with vertex (redundant with
  // AliESDFMD::Eta but support displaced vertices)

  // Unknown x,y -> no change
  if (yvtx > 999 || xvtx > 999) return phi;
  
  //Get max R of ring
  Double_t r   = GetStripR(ring, strip);
  Double_t amp = TMath::Sqrt(xvtx*xvtx+yvtx*yvtx) / r;
  Double_t pha = (TMath::Abs(yvtx) < 1e-12  ? 0 : TMath::ATan2(xvtx, yvtx));
  Double_t cha = amp * TMath::Cos(phi+pha);
  phi += cha;
  if (phi < 0)              phi += TMath::TwoPi();
  if (phi > TMath::TwoPi()) phi -= TMath::TwoPi();
  return phi;
}
//====================================================================
TAxis*
AliForwardUtil::MakeFullIpZAxis(Int_t nCenter)
{
  TArrayD bins;
  MakeFullIpZAxis(nCenter, bins);
  TAxis* a = new TAxis(bins.GetSize()-1,bins.GetArray());
  return a;
}
//____________________________________________________________________
void
AliForwardUtil::MakeFullIpZAxis(Int_t nCenter, TArrayD& bins)
{
  // Custom vertex axis that will include satellite vertices 
  // Satellite vertices are at k*37.5 where k=-10,-9,...,9,10 
  // Nominal vertices are usually in -10 to 10 and we should have 
  // 10 bins in that range.  That gives us a total of 
  //
  //   10+10+10=30 bins 
  // 
  // or 31 bin boundaries 
  if (nCenter % 2 == 1) 
    // Number of central bins is odd - make it even
    nCenter--;
  const Double_t mCenter = 20;
  const Int_t    nSat    = 10;
  const Int_t    nBins   = 2*nSat + nCenter;
  const Int_t    mBin    = nBins / 2;
  Double_t       dCenter = 2*mCenter / nCenter;
  bins.Set(nBins+1);
  bins[mBin] = 0;
  for (Int_t i = 1; i <= nCenter/2; i++) { 
    // Assign from the middle out 
    Double_t  v  = i * dCenter;
    // Printf("Assigning +/-%7.2f to %3d/%3d", v,mBin-i,mBin+i);
    bins[mBin-i] = -v;
    bins[mBin+i] = +v;
  }
  for (Int_t i = 1; i <= nSat; i++) { 
    Double_t v = (i+.5) * 37.5;
    Int_t    o = nCenter/2+i;
    // Printf("Assigning +/-%7.2f to %3d/%3d", v,mBin-o,mBin+o);
    bins[mBin-o] = -v;
    bins[mBin+o] = +v;
  }
}
//____________________________________________________________________
void 
AliForwardUtil::MakeLogScale(Int_t    nBins, 
			     Int_t    minOrder, 
			     Int_t    maxOrder, 
			     TArrayD& bins)
{
  Double_t dO = Double_t(maxOrder-minOrder) / nBins; 
  bins.Set(nBins+1);
  for (Int_t i = 0; i <= nBins; i++) bins[i] = TMath::Power(10, i * dO+minOrder);
}

//____________________________________________________________________
void 
AliForwardUtil::PrintTask(const TObject& o)
{
  Int_t ind = gROOT->GetDirLevel();
  if (ind > 0) 
    // Print indention 
    std::cout << std::setfill(' ') << std::setw(ind) << " " << std::flush;

  TString t = TString::Format("%s %s", o.GetName(), o.ClassName());
  const Int_t maxN = 75;
  std::cout << "--- " << t << " " << std::setfill('-') 
	    << std::setw(maxN-ind-5-t.Length()) << "-" << std::endl;
}
//____________________________________________________________________
void
AliForwardUtil::PrintName(const char* name)
{
  Int_t ind = gROOT->GetDirLevel();
  if (ind > 0) 
    // Print indention 
    std::cout << std::setfill(' ') << std::setw(ind) << " " << std::flush;
    
  // Now print field name 
  const Int_t maxN  = 29;
  Int_t       width = maxN - ind;
  TString     n(name);
  if (n.Length() > width-1) {
    // Truncate the string, and put in "..."
    n.Remove(width-4);
    n.Append("...");
  }
  n.Append(":");
  std::cout << std::setfill(' ') << std::left << std::setw(width) 
	    << n << std::right << std::flush;
}
//____________________________________________________________________
void
AliForwardUtil::PrintField(const char* name, const char* value, ...)
{
  PrintName(name);

  // Now format the field value 
  va_list ap;
  va_start(ap, value);
  static char buf[512];
  vsnprintf(buf, 511, value, ap);
  buf[511] = '\0';
  va_end(ap);

  std::cout << buf << std::endl;
}

//====================================================================
#if 0 // Moved to separate classes 
Int_t    AliForwardUtil::fgConvolutionSteps  = 100;
Double_t AliForwardUtil::fgConvolutionNSigma = 5;
namespace {
  // 
  // The shift of the most probable value for the ROOT function TMath::Landau 
  //
  const Double_t  mpshift  = -0.22278298;
  // 
  // Integration normalisation 
  //
  const Double_t  invSq2pi = 1. / TMath::Sqrt(2*TMath::Pi());

  // 
  // Utility function to use in TF1 defintition 
  //
  Double_t landauGaus1(Double_t* xp, Double_t* pp) 
  {
    Double_t x        = xp[0];
    Double_t constant = pp[AliForwardUtil::ELossFitter::kC];
    Double_t delta    = pp[AliForwardUtil::ELossFitter::kDelta];
    Double_t xi       = pp[AliForwardUtil::ELossFitter::kXi];
    Double_t sigma    = pp[AliForwardUtil::ELossFitter::kSigma];
    Double_t sigmaN   = pp[AliForwardUtil::ELossFitter::kSigmaN];

    return constant * AliForwardUtil::LandauGaus(x, delta, xi, sigma, sigmaN);
  }

  Double_t landauGausComposite(Double_t* xp, Double_t* pp)
  {
    Double_t x           = xp[0];
    Double_t cP          = pp[AliForwardUtil::ELossFitter::kC];
    Double_t deltaP      = pp[AliForwardUtil::ELossFitter::kDelta];
    Double_t xiP         = pp[AliForwardUtil::ELossFitter::kXi];
    Double_t sigmaP      = pp[AliForwardUtil::ELossFitter::kSigma];
    Double_t cS          = pp[AliForwardUtil::ELossFitter::kSigma+1];
    Double_t deltaS      = deltaP; // pp[AliForwardUtil::ELossFitter::kSigma+2];
    Double_t xiS         = pp[AliForwardUtil::ELossFitter::kSigma+2/*3*/];
    Double_t sigmaS      = sigmaP; // pp[AliForwardUtil::ELossFitter::kSigma+4];

    return (cP * AliForwardUtil::LandauGaus(x,deltaP,xiP,sigmaP,0) + 
	    cS * AliForwardUtil::LandauGaus(x,deltaS,xiS,sigmaS,0));
  }
    
  // 
  // Utility function to use in TF1 defintition 
  //
  Double_t landauGausN(Double_t* xp, Double_t* pp) 
  {
    Double_t  x        = xp[0];
    Double_t constant  = pp[AliForwardUtil::ELossFitter::kC];
    Double_t delta     = pp[AliForwardUtil::ELossFitter::kDelta];
    Double_t xi        = pp[AliForwardUtil::ELossFitter::kXi];
    Double_t sigma     = pp[AliForwardUtil::ELossFitter::kSigma];
    Double_t sigmaN    = pp[AliForwardUtil::ELossFitter::kSigmaN];
    Int_t     n        = Int_t(pp[AliForwardUtil::ELossFitter::kN]);
    Double_t* a        = &(pp[AliForwardUtil::ELossFitter::kA]);

    return constant * AliForwardUtil::NLandauGaus(x, delta, xi, sigma, sigmaN,
						  n, a);
  }
  // 
  // Utility function to use in TF1 defintition 
  //
  Double_t landauGausI(Double_t* xp, Double_t* pp) 
  {
    Double_t x         = xp[0];
    Double_t constant  = pp[AliForwardUtil::ELossFitter::kC];
    Double_t delta     = pp[AliForwardUtil::ELossFitter::kDelta];
    Double_t xi        = pp[AliForwardUtil::ELossFitter::kXi];
    Double_t sigma     = pp[AliForwardUtil::ELossFitter::kSigma];
    Double_t sigmaN    = pp[AliForwardUtil::ELossFitter::kSigmaN];
    Int_t    i         = Int_t(pp[AliForwardUtil::ELossFitter::kN]);

    return constant * AliForwardUtil::ILandauGaus(x,delta,xi,sigma,sigmaN,i);
  }


}
//____________________________________________________________________
Double_t 
AliForwardUtil::Landau(Double_t x, Double_t delta, Double_t xi)
{
  // 
  // Calculate the shifted Landau
  // @f[
  //    f'_{L}(x;\Delta,\xi) = f_L(x;\Delta+0.22278298\xi)
  // @f]
  //
  // where @f$ f_{L}@f$ is the ROOT implementation of the Landau
  // distribution (known to have @f$ \Delta_{p}=-0.22278298@f$ for
  // @f$\Delta=0,\xi=1@f$. 
  // 
  // Parameters:
  //    x      Where to evaluate @f$ f'_{L}@f$ 
  //    delta  Most probable value 
  //    xi     The 'width' of the distribution 
  //
  // Return:
  //    @f$ f'_{L}(x;\Delta,\xi) @f$
  //
  Double_t deltaP = delta - xi * mpshift;
  return TMath::Landau(x, deltaP, xi, true);
}
//____________________________________________________________________
Double_t 
AliForwardUtil::LandauGaus(Double_t x, Double_t delta, Double_t xi,
			   Double_t sigma, Double_t sigmaN)
{
  // 
  // Calculate the value of a Landau convolved with a Gaussian 
  // 
  // @f[ 
  // f(x;\Delta,\xi,\sigma') = \frac{1}{\sigma' \sqrt{2 \pi}}
  //    \int_{-\infty}^{+\infty} d\Delta' f'_{L}(x;\Delta',\xi)
  //    \exp{-\frac{(\Delta-\Delta')^2}{2\sigma'^2}}
  // @f]
  // 
  // where @f$ f'_{L}@f$ is the Landau distribution, @f$ \Delta@f$ the
  // energy loss, @f$ \xi@f$ the width of the Landau, and 
  // @f$ \sigma'^2=\sigma^2-\sigma_n^2 @f$.  Here, @f$\sigma@f$ is the
  // variance of the Gaussian, and @f$\sigma_n@f$ is a parameter modelling 
  // noise in the detector.  
  //
  // Note that this function uses the constants fgConvolutionSteps and
  // fgConvolutionNSigma
  // 
  // References: 
  //  - <a href="http://dx.doi.org/10.1016/0168-583X(84)90472-5">Nucl.Instrum.Meth.B1:16</a>
  //  - <a href="http://dx.doi.org/10.1103/PhysRevA.28.615">Phys.Rev.A28:615</a>
  //  - <a href="http://root.cern.ch/root/htmldoc/tutorials/fit/langaus.C.html">ROOT implementation</a>
  // 
  // Parameters:
  //    x         where to evaluate @f$ f@f$
  //    delta     @f$ \Delta@f$ of @f$ f(x;\Delta,\xi,\sigma')@f$
  //    xi        @f$ \xi@f$ of @f$ f(x;\Delta,\xi,\sigma')@f$
  //    sigma     @f$ \sigma@f$ of @f$\sigma'^2=\sigma^2-\sigma_n^2 @f$
  //    sigma_n   @f$ \sigma_n@f$ of @f$\sigma'^2=\sigma^2-\sigma_n^2 @f$
  // 
  // Return:
  //    @f$ f@f$ evaluated at @f$ x@f$.  
  //
  if (xi <= 0) return 0;

  Double_t deltaP = delta; // - sigma * sigmaShift; // + sigma * mpshift;
  Double_t sigma2 = sigmaN*sigmaN + sigma*sigma;
  Double_t sigma1 = sigmaN == 0 ? sigma : TMath::Sqrt(sigma2);
  Double_t xlow   = x - fgConvolutionNSigma * sigma1;
  Double_t xhigh  = x + fgConvolutionNSigma * sigma1;
  Double_t step   = (xhigh - xlow) / fgConvolutionSteps;
  Double_t sum    = 0;
  
  for (Int_t i = 0; i <= fgConvolutionSteps/2; i++) { 
    Double_t x1 = xlow  + (i - .5) * step;
    Double_t x2 = xhigh - (i - .5) * step;
    
    //sum += TMath::Landau(x1, deltap, xi, kTRUE) * TMath::Gaus(x, x1, sigma1);
    //sum += TMath::Landau(x2, deltap, xi, kTRUE) * TMath::Gaus(x, x2, sigma1);
    sum += Landau(x1, deltaP, xi) * TMath::Gaus(x, x1, sigma1);
    sum += Landau(x2, deltaP, xi) * TMath::Gaus(x, x2, sigma1);
  }
  return step * sum * invSq2pi / sigma1;
}

namespace { 
  const Double_t sigmaShift = 0.36390; // TMath::Log(TMath::Sqrt(2.));
  double deltaSigmaShift(Int_t i, Double_t sigma)
  {
    return 0; // - sigma * sigmaShift;
  }
  void getIPars(Int_t i, Double_t& delta, Double_t& xi, Double_t& sigma)
  {
    Double_t dsig = deltaSigmaShift(i, sigma);
    if (i == 1) { 
      delta += dsig;
      return; // { delta = delta + xi*mpshift; return; } // Do nothing 
    }
    
    delta = i * (delta + xi * TMath::Log(i)) + dsig;
    xi    = i * xi;
    sigma = TMath::Sqrt(Double_t(i)) * sigma;
  }
}
    
    
//____________________________________________________________________
Double_t 
AliForwardUtil::ILandauGaus(Double_t x, Double_t delta, Double_t xi, 
			    Double_t sigma, Double_t sigmaN, Int_t i)
{
  // 
  // Evaluate 
  // @f[ 
  //    f_i(x;\Delta,\xi,\sigma') = f(x;\Delta_i,\xi_i,\sigma_i')
  // @f] 
  // corresponding to @f$ i@f$ particles i.e., with the substitutions 
  // @f{eqnarray*}{ 
  //    \Delta    \rightarrow \Delta_i    &=& i(\Delta + \xi\log(i))
  //    \xi       \rightarrow \xi_i       &=& i \xi
  //    \sigma    \rightarrow \sigma_i    &=& \sqrt{i}\sigma
  //    \sigma'^2 \rightarrow \sigma_i'^2 &=& \sigma_n^2 + \sigma_i^2
  // @f} 
  // 
  // Parameters:
  //    x        Where to evaluate 
  //    delta    @f$ \Delta@f$ 
  //    xi       @f$ \xi@f$ 
  //    sigma    @f$ \sigma@f$ 
  //    sigma_n  @f$ \sigma_n@f$
  //    i        @f$ i @f$
  // 
  // Return:
  //    @f$ f_i @f$ evaluated
  //  
  Double_t deltaI = delta;
  Double_t xiI    = xi;
  Double_t sigmaI = sigma;
  getIPars(i, deltaI, xiI, sigmaI);
  if (sigmaI < 1e-10) { 
    // Fall back to landau 
    return AliForwardUtil::Landau(x, deltaI, xiI);
  }
  return AliForwardUtil::LandauGaus(x, deltaI, xiI, sigmaI, sigmaN);
}

//____________________________________________________________________
Double_t 
AliForwardUtil::IdLandauGausdPar(Double_t x, 
				 UShort_t par,   Double_t dPar, 
				 Double_t delta, Double_t xi, 
				 Double_t sigma, Double_t sigmaN, 
				 Int_t    i)
{
  // 
  // Numerically evaluate 
  // @f[ 
  //    \left.\frac{\partial f_i}{\partial p_i}\right|_{x}
  // @f] 
  // where @f$ p_i@f$ is the @f$ i^{\mbox{th}}@f$ parameter.  The mapping 
  // of the parameters is given by 
  //
  // - 0: @f$\Delta@f$ 
  // - 1: @f$\xi@f$ 
  // - 2: @f$\sigma@f$ 
  // - 3: @f$\sigma_n@f$ 
  //
  // This is the partial derivative with respect to the parameter of
  // the response function corresponding to @f$ i@f$ particles i.e.,
  // with the substitutions
  // @f[ 
  //    \Delta    \rightarrow \Delta_i    = i(\Delta + \xi\log(i))
  //    \xi       \rightarrow \xi_i       = i \xi
  //    \sigma    \rightarrow \sigma_i    = \sqrt{i}\sigma
  //    \sigma'^2 \rightarrow \sigma_i'^2 = \sigma_n^2 + \sigma_i^2
  // @f] 
  // 
  // Parameters:
  //    x        Where to evaluate 
  //    ipar     Parameter number 
  //    dp       @f$ \epsilon\delta p_i@f$ for some value of @f$\epsilon@f$
  //    delta    @f$ \Delta@f$ 
  //    xi       @f$ \xi@f$ 
  //    sigma    @f$ \sigma@f$ 
  //    sigma_n  @f$ \sigma_n@f$
  //    i        @f$ i@f$
  // 
  // Return:
  //    @f$ f_i@f$ evaluated
  //  
  if (dPar == 0) return 0;
  Double_t dp      = dPar;
  Double_t d2      = dPar / 2;
  Double_t deltaI  =  i * (delta + xi * TMath::Log(i));
  Double_t xiI     =  i * xi;
  Double_t si      =  TMath::Sqrt(Double_t(i));
  Double_t sigmaI  =  si*sigma;
  Double_t y1      = 0;
  Double_t y2      = 0;
  Double_t y3      = 0;
  Double_t y4      = 0;
  switch (par) {
  case 0: 
    y1 = ILandauGaus(x, deltaI+i*dp, xiI, sigmaI, sigmaN, i);
    y2 = ILandauGaus(x, deltaI+i*d2, xiI, sigmaI, sigmaN, i);
    y3 = ILandauGaus(x, deltaI-i*d2, xiI, sigmaI, sigmaN, i);
    y4 = ILandauGaus(x, deltaI-i*dp, xiI, sigmaI, sigmaN, i);
    break;
  case 1: 
    y1 = ILandauGaus(x, deltaI, xiI+i*dp, sigmaI, sigmaN, i);
    y2 = ILandauGaus(x, deltaI, xiI+i*d2, sigmaI, sigmaN, i);
    y3 = ILandauGaus(x, deltaI, xiI-i*d2, sigmaI, sigmaN, i);
    y4 = ILandauGaus(x, deltaI, xiI-i*dp, sigmaI, sigmaN, i);
    break;
  case 2: 
    y1 = ILandauGaus(x, deltaI, xiI, sigmaI+si*dp, sigmaN, i);
    y2 = ILandauGaus(x, deltaI, xiI, sigmaI+si*d2, sigmaN, i);
    y3 = ILandauGaus(x, deltaI, xiI, sigmaI-si*d2, sigmaN, i);
    y4 = ILandauGaus(x, deltaI, xiI, sigmaI-si*dp, sigmaN, i);
    break;
  case 3: 
    y1 = ILandauGaus(x, deltaI, xiI, sigmaI, sigmaN+dp, i);
    y2 = ILandauGaus(x, deltaI, xiI, sigmaI, sigmaN+d2, i);
    y3 = ILandauGaus(x, deltaI, xiI, sigmaI, sigmaN-d2, i);
    y4 = ILandauGaus(x, deltaI, xiI, sigmaI, sigmaN-dp, i);
    break;
  default:
    return 0;
  } 
  
  Double_t d0  = y1 - y4;
  Double_t d1  = 2 * (y2 - y3);
  
  Double_t g   = 1/(2*dp) * (4*d1 - d0) / 3;
   
  return g;
}

//____________________________________________________________________
Double_t 
AliForwardUtil::NLandauGaus(Double_t x, Double_t delta, Double_t xi, 
			    Double_t sigma, Double_t sigmaN, Int_t n, 
			    const Double_t* a)
{
  // 
  // Evaluate 
  // @f[ 
  //   f_N(x;\Delta,\xi,\sigma') = \sum_{i=1}^N a_i f_i(x;\Delta,\xi,\sigma'a)
  // @f] 
  // 
  // where @f$ f(x;\Delta,\xi,\sigma')@f$ is the convolution of a
  // Landau with a Gaussian (see LandauGaus).  Note that 
  // @f$ a_1 = 1@f$, @f$\Delta_i = i(\Delta_1 + \xi\log(i))@f$, 
  // @f$\xi_i=i\xi_1@f$, and @f$\sigma_i'^2 = \sigma_n^2 + i\sigma_1^2@f$. 
  //  
  // References: 
  //  - <a href="http://dx.doi.org/10.1016/0168-583X(84)90472-5">Nucl.Instrum.Meth.B1:16</a>
  //  - <a href="http://dx.doi.org/10.1103/PhysRevA.28.615">Phys.Rev.A28:615</a>
  //  - <a href="http://root.cern.ch/root/htmldoc/tutorials/fit/langaus.C.html">ROOT implementation</a>
  // 
  // Parameters:
  //    x        Where to evaluate @f$ f_N@f$
  //    delta    @f$ \Delta_1@f$ 
  //    xi       @f$ \xi_1@f$
  //    sigma    @f$ \sigma_1@f$ 
  //    sigma_n  @f$ \sigma_n@f$ 
  //    n        @f$ N@f$ in the sum above.
  //    a        Array of size @f$ N-1@f$ of the weights @f$ a_i@f$ for 
  //                 @f$ i > 1@f$ 
  // 
  // Return:
  //    @f$ f_N(x;\Delta,\xi,\sigma')@f$ 
  //
  Double_t result = ILandauGaus(x, delta, xi, sigma, sigmaN, 1);
  for (Int_t i = 2; i <= n; i++) 
    result += a[i-2] * AliForwardUtil::ILandauGaus(x,delta,xi,sigma,sigmaN,i);
  return result;
}
namespace { 
  const Int_t kColors[] = { kRed+1, 
			    kPink+3, 
			    kMagenta+2, 
			    kViolet+2, 
			    kBlue+1, 
			    kAzure+3, 
			    kCyan+1, 
			    kTeal+2, 
			    kGreen+2, 
			    kSpring+3, 
			    kYellow+2, 
			    kOrange+2 };
}

//____________________________________________________________________
TF1*
AliForwardUtil::MakeNLandauGaus(Double_t  c, 
				Double_t  delta, Double_t xi, 
				Double_t  sigma, Double_t sigmaN, Int_t n, 
				const Double_t* a, 
				Double_t  xmin, Double_t xmax)
{
  // 
  // Generate a TF1 object of @f$ f_N@f$ 
  // 
  // Parameters:
  //    c         Constant			       
  //    delta     @f$ \Delta@f$ 		       
  //    xi 	      @f$ \xi_1@f$	       	       
  //    sigma     @f$ \sigma_1@f$ 	       	       
  //    sigma_n   @f$ \sigma_n@f$ 	       	       
  //    n 	      @f$ N@f$ - how many particles to sum to
  //    a         Array of size @f$ N-1@f$ of the weights @f$ a_i@f$ for 
  //                  @f$ i > 1@f$ 
  //    xmin      Least value of range  
  //    xmax      Largest value of range
  // 
  // Return:
  //    Newly allocated TF1 object
  //
  Int_t npar       = AliForwardUtil::ELossFitter::kN+n;
  TF1* landaun     = new TF1(Form("nlandau%d", n), &landauGausN,xmin,xmax,npar);
  // landaun->SetLineStyle(((n-2) % 10)+2); // start at dashed
  landaun->SetLineColor(kColors[((n-1) % 12)]); // start at red
  landaun->SetLineWidth(2);
  landaun->SetNpx(500);
  landaun->SetParNames("C","#Delta_{p}","#xi", "#sigma", "#sigma_{n}", "N");

  // Set the initial parameters from the seed fit 
  landaun->SetParameter(AliForwardUtil::ELossFitter::kC,      c);       
  landaun->SetParameter(AliForwardUtil::ELossFitter::kDelta,  delta);   
  landaun->SetParameter(AliForwardUtil::ELossFitter::kXi,     xi);      
  landaun->SetParameter(AliForwardUtil::ELossFitter::kSigma,  sigma);   
  landaun->SetParameter(AliForwardUtil::ELossFitter::kSigmaN, sigmaN); 
  landaun->FixParameter(AliForwardUtil::ELossFitter::kN,      n);       

  // Set the range and name of the scale parameters 
  for (UShort_t i = 2; i <= n; i++) {// Take parameters from last fit 
    landaun->SetParameter(AliForwardUtil::ELossFitter::kA+i-2, a[i-2]);
    landaun->SetParName(AliForwardUtil::ELossFitter::kA+i-2, Form("a_{%d}", i));
  }
  return landaun;
}
//____________________________________________________________________
TF1*
AliForwardUtil::MakeILandauGaus(Double_t  c, 
				Double_t  delta, Double_t xi, 
				Double_t  sigma, Double_t sigmaN, Int_t i, 
				Double_t  xmin, Double_t xmax)
{
  // 
  // Generate a TF1 object of @f$ f_I@f$ 
  // 
  // Parameters:
  //    c        Constant
  //    delta    @f$ \Delta@f$ 
  //    xi       @f$ \xi_1@f$	       
  //    sigma    @f$ \sigma_1@f$ 	       
  //    sigma_n  @f$ \sigma_n@f$ 	       
  //    i 	     @f$ i@f$ - the number of particles
  //    xmin     Least value of range
  //    xmax     Largest value of range
  // 
  // Return:
  //    Newly allocated TF1 object
  //
  Int_t npar       = AliForwardUtil::ELossFitter::kN+1;
  TF1* landaui     = new TF1(Form("ilandau%d", i), &landauGausI,xmin,xmax,npar);
  // landaui->SetLineStyle(((i-2) % 10)+2); // start at dashed
  landaui->SetLineColor(kColors[((i-1) % 12)]); // start at red
  landaui->SetLineWidth(1);
  landaui->SetNpx(500);
  landaui->SetParNames("C","#Delta_{p}","#xi", "#sigma", "#sigma_{n}", "i");

  // Set the initial parameters from the seed fit 
  landaui->SetParameter(AliForwardUtil::ELossFitter::kC,      c);       
  landaui->SetParameter(AliForwardUtil::ELossFitter::kDelta,  delta);   
  landaui->SetParameter(AliForwardUtil::ELossFitter::kXi,     xi);      
  landaui->SetParameter(AliForwardUtil::ELossFitter::kSigma,  sigma);   
  landaui->SetParameter(AliForwardUtil::ELossFitter::kSigmaN, sigmaN); 
  landaui->FixParameter(AliForwardUtil::ELossFitter::kN,      i);       

  return landaui;
}

//====================================================================
AliForwardUtil::ELossFitter::ELossFitter(Double_t lowCut, 
					 Double_t maxRange, 
					 UShort_t minusBins) 
  : fLowCut(lowCut), fMaxRange(maxRange), fMinusBins(minusBins), 
    fFitResults(0), fFunctions(0), fDebug(false)
{
  // 
  // Constructor 
  // 
  // Parameters:
  //    lowCut     Lower cut of spectrum - data below this cuts is ignored
  //    maxRange   Maximum range to fit to 
  //    minusBins  The number of bins below maximum to use 
  //
  fFitResults.SetOwner();
  fFunctions.SetOwner();
}
//____________________________________________________________________
AliForwardUtil::ELossFitter::~ELossFitter()
{
  // 
  // Destructor
  // 
  //
  fFitResults.Delete();
  fFunctions.Delete();
}
//____________________________________________________________________
void
AliForwardUtil::ELossFitter::Clear()
{
  // 
  // Clear internal arrays 
  // 
  //
  fFitResults.Clear();
  fFunctions.Clear();
}
namespace { 
  void setParLimit(TF1* f, Int_t iPar, Bool_t debug,
		   Double_t test, Double_t low, Double_t high)
  {
    if (test >= low && test <= high) { 
      if (debug) 
	printf("Fit: Set par limits on %s: %f, %f\n", 
	       f->GetParName(iPar), low, high);
      f->SetParLimits(iPar, low, high);
    }
  }
}

//____________________________________________________________________
TF1*
AliForwardUtil::ELossFitter::Fit1Particle(TH1* dist, Double_t sigman)
{
  // 
  // Fit a 1-particle signal to the passed energy loss distribution 
  // 
  // Note that this function clears the internal arrays first 
  // 
  // Parameters:
  //    dist    Data to fit the function to 
  //    sigman If larger than zero, the initial guess of the
  //               detector induced noise. If zero or less, then this 
  //               parameter is ignored in the fit (fixed at 0)
  // 
  // Return:
  //    The function fitted to the data 
  //

  // Clear the cache 
  Clear();
  
  // Find the fit range 
  // Find the fit range 
  Int_t    cutBin  = TMath::Max(dist->GetXaxis()->FindBin(fLowCut),3);
  Int_t    maxBin  = TMath::Min(dist->GetXaxis()->FindBin(fMaxRange),
				dist->GetNbinsX());
  dist->GetXaxis()->SetRange(cutBin, maxBin);
  // dist->GetXaxis()->SetRangeUser(fLowCut, fMaxRange);
  
  // Get the bin with maximum 
  Int_t    peakBin = dist->GetMaximumBin();
  Double_t peakE   = dist->GetBinLowEdge(peakBin);
  Double_t rmsE    = dist->GetRMS();
  
  // Get the low edge 
  // dist->GetXaxis()->SetRangeUser(fLowCut, peakE);
  Int_t    minBin = peakBin - fMinusBins; // dist->GetMinimumBin();
  Double_t minE   = TMath::Max(dist->GetBinCenter(minBin),fLowCut);
  Double_t maxE   = dist->GetBinCenter(peakBin+2*fMinusBins);

  Int_t    minEb = dist->GetXaxis()->FindBin(minE);
  Int_t    maxEb = dist->GetXaxis()->FindBin(maxE);
  Double_t intg  = dist->Integral(minEb, maxEb);
  if (intg <= 0) {
    ::Warning("Fit1Particle", 
	      "Integral of %s between [%f,%f] [%03d,%03d] = %f < 0", 
	      dist->GetName(), minE, maxE, minEb, maxEb, intg);
    return 0;
  }
    
  // Restore the range 
  dist->GetXaxis()->SetRange(1, maxBin);
  
  // Define the function to fit 
  TF1* landau1 = new TF1("landau1", landauGaus1, minE,maxE,kSigmaN+1);

  // Set initial guesses, parameter names, and limits  
  landau1->SetParameters(intg,peakE,peakE/10,peakE/5,sigman);
  landau1->SetParNames("C","#Delta_{p}","#xi", "#sigma", "#sigma_{n}");
  landau1->SetNpx(500);
  setParLimit(landau1, kDelta, fDebug, peakE,   minE, fMaxRange);
  setParLimit(landau1, kXi,    fDebug, peakE,   0,    rmsE); // 0.1
  setParLimit(landau1, kSigma, fDebug, peakE/5, 1e-5, rmsE); // 0.1
  if (sigman <= 0)  landau1->FixParameter(kSigmaN, 0);
  else 
    setParLimit(landau1, kSigmaN, fDebug, peakE, 0, rmsE);
  

  TString opts(Form("%s%s", FIT_OPTIONS, fDebug ? "" : "Q"));
  // Do the fit, getting the result object 
  if (fDebug) 
    ::Info("Fit1Particle", "Fitting in the range %f,%f", minE, maxE);
  TFitResultPtr r = dist->Fit(landau1, opts, "", minE, maxE);
  if (!r.Get()) { 
    ::Warning("Fit1Particle", 
	      "No fit returned when processing %s in the range [%f,%f] "
	      "options %s", dist->GetName(), minE, maxE, FIT_OPTIONS);
    return 0;
  }
  // landau1->SetRange(minE, fMaxRange);
  fFitResults.AddAtAndExpand(new TFitResult(*r), 0);
  fFunctions.AddAtAndExpand(landau1, 0);

  return landau1;
}
//____________________________________________________________________
TF1*
AliForwardUtil::ELossFitter::FitNParticle(TH1* dist, UShort_t n, 
					  Double_t sigman)
{
  // 
  // Fit a N-particle signal to the passed energy loss distribution 
  //
  // If there's no 1-particle fit present, it does that first 
  // 
  // Parameters:
  //    dist   Data to fit the function to 
  //    n      Number of particle signals to fit 
  //    sigman If larger than zero, the initial guess of the
  //               detector induced noise. If zero or less, then this 
  //               parameter is ignored in the fit (fixed at 0)
  // 
  // Return:
  //    The function fitted to the data 
  //

  // Get the seed fit result 
  TFitResult* r = static_cast<TFitResult*>(fFitResults.At(0));
  TF1*        f = static_cast<TF1*>(fFunctions.At(0));
  if (!r || !f) { 
    f = Fit1Particle(dist, sigman);
    r = static_cast<TFitResult*>(fFitResults.At(0));
    if (!r || !f) { 
      ::Warning("FitNLandau", "No first shot at landau fit");
      return 0;
    }
  }

  // Get some parameters from seed fit 
  Double_t delta1  = r->Parameter(kDelta);
  Double_t xi1     = r->Parameter(kXi);
  Double_t maxEi   = n * (delta1 + xi1 * TMath::Log(n)) + 2 * n * xi1;
  Double_t minE    = f->GetXmin();

  Int_t    minEb = dist->GetXaxis()->FindBin(minE);
  Int_t    maxEb = dist->GetXaxis()->FindBin(maxEi);
  Double_t rmsE  = dist->GetRMS();
  Double_t intg  = dist->Integral(minEb, maxEb);
  if (intg <= 0) {
    ::Warning("FitNParticle",
	      "Integral of %s between [%f,%f] [%03d,%03d] = %f < 0", 
	      dist->GetName(), minE, maxEi, minEb, maxEb, intg);
    return 0;
  }

  // Array of weights 
  TArrayD a(n-1);
  for (UShort_t i = 2; i <= n; i++) 
    a.fArray[i-2] = (n == 2 ? 0.05 : 0.000001);
  // Make the fit function 
  TF1* landaun = MakeNLandauGaus(r->Parameter(kC),
				 r->Parameter(kDelta),
				 r->Parameter(kXi),
				 r->Parameter(kSigma),
				 r->Parameter(kSigmaN),
				 n, a.fArray, minE, maxEi);
  setParLimit(landaun, kDelta, fDebug, r->Parameter(kDelta), minE, fMaxRange);
  setParLimit(landaun, kXi,    fDebug, r->Parameter(kXi),    0,    rmsE); // 0.1
  setParLimit(landaun, kSigma, fDebug, r->Parameter(kSigma), 1e-5, rmsE); // 0.1
  if (sigman <= 0)  landaun->FixParameter(kSigmaN, 0);
  else 
    setParLimit(landaun, kSigmaN, fDebug, r->Parameter(kSigmaN), 0, rmsE);

  // Set the range and name of the scale parameters 
  for (UShort_t i = 2; i <= n; i++) {// Take parameters from last fit 
    setParLimit(landaun, kA+i-2, fDebug, a[i-2], 0, 1);
  }

  // Do the fit 
  TString opts(Form("%s%s", FIT_OPTIONS, fDebug ? "" : "Q"));
  if (fDebug) 
    ::Info("FitNParticle", "Fitting in the range %f,%f (%d)", minE, maxEi, n);
  TFitResultPtr tr = dist->Fit(landaun, opts, "", minE, maxEi);
  
  // landaun->SetRange(minE, fMaxRange);
  fFitResults.AddAtAndExpand(new TFitResult(*tr), n-1);
  fFunctions.AddAtAndExpand(landaun, n-1);
  
  return landaun;
}  
//____________________________________________________________________
TF1*
AliForwardUtil::ELossFitter::FitComposite(TH1* dist, Double_t sigman)
{
  // 
  // Fit a composite particle signal to the passed energy loss
  // distribution  // 
  // Parameters:
  //    dist    Data to fit the function to 
  //    sigman If larger than zero, the initial guess of the
  //               detector induced noise. If zero or less, then this 
  //               parameter is ignored in the fit (fixed at 0)
  // 
  // Return:
  //    The function fitted to the data 
  //

  // Find the fit range 
  Int_t    cutBin  = TMath::Max(dist->GetXaxis()->FindBin(fLowCut),3);
  Int_t    maxBin  = TMath::Min(dist->GetXaxis()->FindBin(fMaxRange),
				dist->GetNbinsX());
  dist->GetXaxis()->SetRange(cutBin, maxBin);
  
  // Get the bin with maximum 
  Int_t    peakBin = dist->GetMaximumBin();
  Double_t peakE   = dist->GetBinLowEdge(peakBin);
  
  // Get the low edge 
  // dist->GetXaxis()->SetRangeUser(fLowCut, peakE);
  Int_t    minBin = peakBin - fMinusBins; // dist->GetMinimumBin();
  Double_t minE   = TMath::Max(dist->GetBinCenter(minBin),fLowCut);
  Double_t maxE   = dist->GetBinCenter(peakBin+2*fMinusBins);

  // Get the range in bins and the integral of that range 
  Int_t    minEb = dist->GetXaxis()->FindBin(minE);
  Int_t    maxEb = dist->GetXaxis()->FindBin(maxE);
  Double_t intg  = dist->Integral(minEb, maxEb);
  if (intg <= 0) {
    ::Warning("Fit1Particle", 
	      "Integral of %s between [%f,%f] [%03d,%03d] = %f < 0", 
	      dist->GetName(), minE, maxE, minEb, maxEb, intg);
    return 0;
  }
    
  // Restore the range 
  dist->GetXaxis()->SetRange(1, maxBin);
  
  // Define the function to fit 
  TF1* seed = new TF1("landauSeed", landauGaus1, minE,maxE,kSigmaN+1);

  // Set initial guesses, parameter names, and limits  
  seed->SetParameters(1,peakE,peakE/10,peakE/5,sigman);
  seed->SetParNames("C","#Delta_{p}","#xi", "#sigma", "#sigma_{n}");
  seed->SetNpx(500);
  seed->SetParLimits(kDelta, minE, fMaxRange);
  seed->SetParLimits(kXi,    0.00, 0.1); // Was fMaxRange - too wide
  seed->SetParLimits(kSigma, 1e-5, 0.1); // Was fMaxRange - too wide
  if (sigman <= 0)  seed->FixParameter(kSigmaN, 0);
  else              seed->SetParLimits(kSigmaN, 0, fMaxRange);

  // Do the fit, getting the result object 
  if (fDebug) 
    ::Info("FitComposite", "Fitting seed in the range %f,%f", minE, maxE);
  /* TFitResultPtr r = */ dist->Fit(seed, FIT_OPTIONS, "", minE, maxE);

  maxE = dist->GetXaxis()->GetXmax();
#if 1
  TF1* comp = new TF1("composite", landauGausComposite, 
		      minE, maxE, kSigma+1+2);
  comp->SetParNames("C",       "#Delta_{p}",       "#xi",       "#sigma",
		    "C#prime", "#xi#prime");
  comp->SetParameters(0.8 * seed->GetParameter(kC),  // 0 Primary weight 
		      seed->GetParameter(kDelta),    // 1 Primary Delta
		      seed->GetParameter(kDelta)/10, // 2 primary Xi
		      seed->GetParameter(kDelta)/5,  // 3 primary sigma
		      1.20 * seed->GetParameter(kC), // 5 Secondary weight
		      seed->GetParameter(kXi));      // 7 secondary Xi
  // comp->SetParLimits(kC,       minE, fMaxRange); // C
  comp->SetParLimits(kDelta,      minE, fMaxRange); // Delta
  comp->SetParLimits(kXi,         0.00, fMaxRange); // Xi 
  comp->SetParLimits(kSigma,      1e-5, fMaxRange); // Sigma
  // comp->SetParLimits(kSigma+1, minE, fMaxRange); // C
  comp->SetParLimits(kSigma+2,    0.00, fMaxRange); // Xi'
#else
  TF1* comp = new TF1("composite", landauGausComposite, 
		      minE, maxE, kSigma+1+4);
  comp->SetParNames("C",       "#Delta_{p}",       "#xi",       "#sigma",
		    "C#prime", "#Delta_{p}#prime", "#xi#prime", "#sigma#prim");
  comp->SetParameters(0.8 * seed->GetParameter(kC),  // 0 Primary weight 
		      seed->GetParameter(kDelta),    // 1 Primary Delta
		      seed->GetParameter(kDelta)/10, // 2 primary Xi
		      seed->GetParameter(kDelta)/5,  // 3 primary sigma
		      1.20 * seed->GetParameter(kC), // 5 Secondary weight
		      seed->GetParameter(kDelta),    // 6 secondary Delta
		      seed->GetParameter(kXi),       // 7 secondary Xi
		      seed->GetParameter(kSigma));   // 8 secondary sigma
  // comp->SetParLimits(kC,       minE, fMaxRange); // C
  comp->SetParLimits(kDelta,      minE, fMaxRange); // Delta
  comp->SetParLimits(kXi,         0.00, fMaxRange); // Xi 
  comp->SetParLimits(kSigma,      1e-5, fMaxRange); // Sigma
  // comp->SetParLimits(kSigma+1, minE, fMaxRange); // C
  comp->SetParLimits(kSigma+2,    minE/10, fMaxRange); // Delta
  comp->SetParLimits(kSigma+3,    0.00,    fMaxRange); // Xi 
  comp->SetParLimits(kSigma+4,    1e-6,    fMaxRange); // Sigma
#endif		      
  comp->SetLineColor(kRed+1);
  comp->SetLineWidth(3);
  
  // Do the fit, getting the result object 
  TString opts(Form("%s%s", FIT_OPTIONS, fDebug ? "" : "Q"));
  if (fDebug) 
    ::Info("FitComposite", "Fitting composite in the range %f,%f", minE, maxE);
  /* TFitResultPtr r = */ dist->Fit(comp, opts, "", minE, maxE);

#if 0
  TF1* part1 = static_cast<TF1*>(seed->Clone("part1"));
  part1->SetLineColor(kGreen+1);
  part1->SetLineWidth(4);
  part1->SetRange(minE, maxE);
  part1->SetParameters(comp->GetParameter(0), // C 
		       comp->GetParameter(1), // Delta
		       comp->GetParameter(2), // Xi
		       comp->GetParameter(3), // sigma
		       0);
  part1->Save(minE,maxE,0,0,0,0);
  dist->GetListOfFunctions()->Add(part1);

  TF1* part2 = static_cast<TF1*>(seed->Clone("part2"));
  part2->SetLineColor(kBlue+1);
  part2->SetLineWidth(4);
  part2->SetRange(minE, maxE);
  part2->SetParameters(comp->GetParameter(4), // C 
		       comp->GetParameter(5), // Delta
		       comp->GetParameter(6), // Xi
		       comp->GetParameter(7), // sigma
		       0);
  part2->Save(minE,maxE,0,0,0,0);
  dist->GetListOfFunctions()->Add(part2);
#endif
  return comp;
}
#endif

//====================================================================
AliForwardUtil::Histos::~Histos()
{
  // 
  // Destructor
  //
}

//____________________________________________________________________
void
AliForwardUtil::Histos::Delete(Option_t* opt)
{
  if (fFMD1i) delete fFMD1i;
  if (fFMD2i) delete fFMD2i;
  if (fFMD2o) delete fFMD2o;
  if (fFMD3i) delete fFMD3i;
  if (fFMD3o) delete fFMD3o;
  fFMD1i = 0;
  fFMD2i = 0;
  fFMD2o = 0;
  fFMD3i = 0;
  fFMD3o = 0;
  TObject::Delete(opt);
}

//____________________________________________________________________
TH2D*
AliForwardUtil::Histos::Make(UShort_t d, Char_t r, const TAxis& etaAxis)
{
  // 
  // Make a histogram 
  // 
  // Parameters:
  //    d        Detector
  //    r        Ring 
  //    etaAxis  Eta axis to use
  // 
  // Return:
  //    Newly allocated histogram 
  //
  Int_t ns = (r == 'I' || r == 'i') ? 20 : 40;
  TH2D* hist = 0;
  if (etaAxis.GetXbins() && etaAxis.GetXbins()->GetArray())
    hist = new TH2D(Form("FMD%d%c_cache", d, r), 
		    Form("FMD%d%c cache", d, r),
		    etaAxis.GetNbins(), etaAxis.GetXbins()->GetArray(), 
		    ns, 0, TMath::TwoPi());
  else
    hist = new TH2D(Form("FMD%d%c_cache", d, r), 
		    Form("FMD%d%c cache", d, r),
		    etaAxis.GetNbins(), etaAxis.GetXmin(), 
		    etaAxis.GetXmax(), ns, 0, TMath::TwoPi());
  hist->SetXTitle("#eta");
  hist->SetYTitle("#phi [radians]");
  hist->SetZTitle("d^{2}N_{ch}/d#etad#phi");
  hist->Sumw2();
  hist->SetDirectory(0);

  return hist;
}
//____________________________________________________________________
void
AliForwardUtil::Histos::RebinEta(TH2D* hist, const TAxis& etaAxis)
{
  TAxis* xAxis = hist->GetXaxis();
  if (etaAxis.GetXbins() && etaAxis.GetXbins()->GetArray())
    xAxis->Set(etaAxis.GetNbins(), etaAxis.GetXbins()->GetArray());
  else
    xAxis->Set(etaAxis.GetNbins(), etaAxis.GetXmin(), etaAxis.GetXmax());
  hist->Rebuild();
}
  

//____________________________________________________________________
void
AliForwardUtil::Histos::Init(const TAxis& etaAxis)
{
  // 
  // Initialize the object 
  // 
  // Parameters:
  //    etaAxis Eta axis to use 
  //
  fFMD1i = Make(1, 'I', etaAxis);
  fFMD2i = Make(2, 'I', etaAxis);
  fFMD2o = Make(2, 'O', etaAxis);
  fFMD3i = Make(3, 'I', etaAxis);
  fFMD3o = Make(3, 'O', etaAxis);
}
//____________________________________________________________________
void
AliForwardUtil::Histos::ReInit(const TAxis& etaAxis)
{
  // 
  // Initialize the object 
  // 
  // Parameters:
  //    etaAxis Eta axis to use 
  //
  if (!fFMD1i) fFMD1i = Make(1, 'i', etaAxis); else RebinEta(fFMD1i, etaAxis);
  if (!fFMD2i) fFMD2i = Make(2, 'i', etaAxis); else RebinEta(fFMD2i, etaAxis);
  if (!fFMD2o) fFMD2o = Make(2, 'o', etaAxis); else RebinEta(fFMD2o, etaAxis);
  if (!fFMD3i) fFMD3i = Make(3, 'i', etaAxis); else RebinEta(fFMD3i, etaAxis);
  if (!fFMD3o) fFMD3o = Make(3, 'o', etaAxis); else RebinEta(fFMD3o, etaAxis);
}

//____________________________________________________________________
void
AliForwardUtil::Histos::Clear(Option_t* option)
{
  // 
  // Clear data 
  // 
  // Parameters:
  //    option Not used 
  //
  if (fFMD1i) { fFMD1i->Reset(option); fFMD1i->ResetBit(kSkipRing); }
  if (fFMD2i) { fFMD2i->Reset(option); fFMD2i->ResetBit(kSkipRing); }
  if (fFMD2o) { fFMD2o->Reset(option); fFMD2o->ResetBit(kSkipRing); }
  if (fFMD3i) { fFMD3i->Reset(option); fFMD3i->ResetBit(kSkipRing); }
  if (fFMD3o) { fFMD3o->Reset(option); fFMD3o->ResetBit(kSkipRing); }
}

//____________________________________________________________________
TH2D*
AliForwardUtil::Histos::Get(UShort_t d, Char_t r) const
{
  // 
  // Get the histogram for a particular detector,ring
  // 
  // Parameters:
  //    d Detector 
  //    r Ring 
  // 
  // Return:
  //    Histogram for detector,ring or nul 
  //
  switch (d) { 
  case 1: return fFMD1i;
  case 2: return (r == 'I' || r == 'i' ? fFMD2i : fFMD2o);
  case 3: return (r == 'I' || r == 'i' ? fFMD3i : fFMD3o);
  }
  return 0;
}
//====================================================================
TList*
AliForwardUtil::RingHistos::DefineOutputList(TList* d) const
{
  // 
  // Define the outout list in @a d
  // 
  // Parameters:
  //    d Where to put the output list
  // 
  // Return:
  //    Newly allocated TList object or null
  //
  if (!d) return 0;
  TList* list = new TList;
  list->SetOwner();
  list->SetName(fName.Data());
  d->Add(list);
  return list;
}
//____________________________________________________________________
TList*
AliForwardUtil::RingHistos::GetOutputList(const TList* d) const
{
  // 
  // Get our output list from the container @a d
  // 
  // Parameters:
  //    d where to get the output list from 
  // 
  // Return:
  //    The found TList or null
  //
  if (!d) return 0;
  TList* list = static_cast<TList*>(d->FindObject(fName.Data()));
  return list;
}

//____________________________________________________________________
TH1*
AliForwardUtil::RingHistos::GetOutputHist(const TList* d, const char* name) const
{
  // 
  // Find a specific histogram in the source list @a d
  // 
  // Parameters:
  //    d     (top)-container 
  //    name  Name of histogram
  // 
  // Return:
  //    Found histogram or null
  //
  return static_cast<TH1*>(d->FindObject(name));
}

//====================================================================
AliForwardUtil::DebugGuard::DebugGuard(Int_t lvl, Int_t msgLvl, 
				       const char* format, ...)
  : fMsg("")
{
  if (lvl < msgLvl) return; 
  va_list ap;
  va_start(ap, format);
  Format(fMsg, format, ap);
  va_end(ap);
  Output(+1, fMsg);
}
//____________________________________________________________________
AliForwardUtil::DebugGuard::~DebugGuard()
{
  if (fMsg.IsNull()) return;
  Output(-1, fMsg);
}
//____________________________________________________________________
void
AliForwardUtil::DebugGuard::Message(Int_t lvl, Int_t msgLvl, 
				    const char* format, ...)
{
  if (lvl < msgLvl) return; 
  TString msg;
  va_list ap;
  va_start(ap, format);
  Format(msg, format, ap);
  va_end(ap);
  Output(0, msg);
}

//____________________________________________________________________
void
AliForwardUtil::DebugGuard::Format(TString& out, const char* format, va_list ap)
{
  static char buf[512];
  Int_t n = gROOT->GetDirLevel() + 2;
  for (Int_t i = 0; i < n; i++) buf[i] = ' ';
  vsnprintf(&(buf[n]), 511-n, format, ap);
  buf[511] = '\0';
  out = buf;  
}
//____________________________________________________________________
void
AliForwardUtil::DebugGuard::Output(int in, TString& msg)
{
  msg[0] = (in > 0 ? '>' :  in < 0 ? '<' : '=');
  AliLog::Message(AliLog::kInfo, msg, 0, 0, "PWGLF/forward", 0, 0);
  if      (in > 0) gROOT->IncreaseDirLevel();
  else if (in < 0) gROOT->DecreaseDirLevel();
}



//
// EOF
//
 AliForwardUtil.cxx:1
 AliForwardUtil.cxx:2
 AliForwardUtil.cxx:3
 AliForwardUtil.cxx:4
 AliForwardUtil.cxx:5
 AliForwardUtil.cxx:6
 AliForwardUtil.cxx:7
 AliForwardUtil.cxx:8
 AliForwardUtil.cxx:9
 AliForwardUtil.cxx:10
 AliForwardUtil.cxx:11
 AliForwardUtil.cxx:12
 AliForwardUtil.cxx:13
 AliForwardUtil.cxx:14
 AliForwardUtil.cxx:15
 AliForwardUtil.cxx:16
 AliForwardUtil.cxx:17
 AliForwardUtil.cxx:18
 AliForwardUtil.cxx:19
 AliForwardUtil.cxx:20
 AliForwardUtil.cxx:21
 AliForwardUtil.cxx:22
 AliForwardUtil.cxx:23
 AliForwardUtil.cxx:24
 AliForwardUtil.cxx:25
 AliForwardUtil.cxx:26
 AliForwardUtil.cxx:27
 AliForwardUtil.cxx:28
 AliForwardUtil.cxx:29
 AliForwardUtil.cxx:30
 AliForwardUtil.cxx:31
 AliForwardUtil.cxx:32
 AliForwardUtil.cxx:33
 AliForwardUtil.cxx:34
 AliForwardUtil.cxx:35
 AliForwardUtil.cxx:36
 AliForwardUtil.cxx:37
 AliForwardUtil.cxx:38
 AliForwardUtil.cxx:39
 AliForwardUtil.cxx:40
 AliForwardUtil.cxx:41
 AliForwardUtil.cxx:42
 AliForwardUtil.cxx:43
 AliForwardUtil.cxx:44
 AliForwardUtil.cxx:45
 AliForwardUtil.cxx:46
 AliForwardUtil.cxx:47
 AliForwardUtil.cxx:48
 AliForwardUtil.cxx:49
 AliForwardUtil.cxx:50
 AliForwardUtil.cxx:51
 AliForwardUtil.cxx:52
 AliForwardUtil.cxx:53
 AliForwardUtil.cxx:54
 AliForwardUtil.cxx:55
 AliForwardUtil.cxx:56
 AliForwardUtil.cxx:57
 AliForwardUtil.cxx:58
 AliForwardUtil.cxx:59
 AliForwardUtil.cxx:60
 AliForwardUtil.cxx:61
 AliForwardUtil.cxx:62
 AliForwardUtil.cxx:63
 AliForwardUtil.cxx:64
 AliForwardUtil.cxx:65
 AliForwardUtil.cxx:66
 AliForwardUtil.cxx:67
 AliForwardUtil.cxx:68
 AliForwardUtil.cxx:69
 AliForwardUtil.cxx:70
 AliForwardUtil.cxx:71
 AliForwardUtil.cxx:72
 AliForwardUtil.cxx:73
 AliForwardUtil.cxx:74
 AliForwardUtil.cxx:75
 AliForwardUtil.cxx:76
 AliForwardUtil.cxx:77
 AliForwardUtil.cxx:78
 AliForwardUtil.cxx:79
 AliForwardUtil.cxx:80
 AliForwardUtil.cxx:81
 AliForwardUtil.cxx:82
 AliForwardUtil.cxx:83
 AliForwardUtil.cxx:84
 AliForwardUtil.cxx:85
 AliForwardUtil.cxx:86
 AliForwardUtil.cxx:87
 AliForwardUtil.cxx:88
 AliForwardUtil.cxx:89
 AliForwardUtil.cxx:90
 AliForwardUtil.cxx:91
 AliForwardUtil.cxx:92
 AliForwardUtil.cxx:93
 AliForwardUtil.cxx:94
 AliForwardUtil.cxx:95
 AliForwardUtil.cxx:96
 AliForwardUtil.cxx:97
 AliForwardUtil.cxx:98
 AliForwardUtil.cxx:99
 AliForwardUtil.cxx:100
 AliForwardUtil.cxx:101
 AliForwardUtil.cxx:102
 AliForwardUtil.cxx:103
 AliForwardUtil.cxx:104
 AliForwardUtil.cxx:105
 AliForwardUtil.cxx:106
 AliForwardUtil.cxx:107
 AliForwardUtil.cxx:108
 AliForwardUtil.cxx:109
 AliForwardUtil.cxx:110
 AliForwardUtil.cxx:111
 AliForwardUtil.cxx:112
 AliForwardUtil.cxx:113
 AliForwardUtil.cxx:114
 AliForwardUtil.cxx:115
 AliForwardUtil.cxx:116
 AliForwardUtil.cxx:117
 AliForwardUtil.cxx:118
 AliForwardUtil.cxx:119
 AliForwardUtil.cxx:120
 AliForwardUtil.cxx:121
 AliForwardUtil.cxx:122
 AliForwardUtil.cxx:123
 AliForwardUtil.cxx:124
 AliForwardUtil.cxx:125
 AliForwardUtil.cxx:126
 AliForwardUtil.cxx:127
 AliForwardUtil.cxx:128
 AliForwardUtil.cxx:129
 AliForwardUtil.cxx:130
 AliForwardUtil.cxx:131
 AliForwardUtil.cxx:132
 AliForwardUtil.cxx:133
 AliForwardUtil.cxx:134
 AliForwardUtil.cxx:135
 AliForwardUtil.cxx:136
 AliForwardUtil.cxx:137
 AliForwardUtil.cxx:138
 AliForwardUtil.cxx:139
 AliForwardUtil.cxx:140
 AliForwardUtil.cxx:141
 AliForwardUtil.cxx:142
 AliForwardUtil.cxx:143
 AliForwardUtil.cxx:144
 AliForwardUtil.cxx:145
 AliForwardUtil.cxx:146
 AliForwardUtil.cxx:147
 AliForwardUtil.cxx:148
 AliForwardUtil.cxx:149
 AliForwardUtil.cxx:150
 AliForwardUtil.cxx:151
 AliForwardUtil.cxx:152
 AliForwardUtil.cxx:153
 AliForwardUtil.cxx:154
 AliForwardUtil.cxx:155
 AliForwardUtil.cxx:156
 AliForwardUtil.cxx:157
 AliForwardUtil.cxx:158
 AliForwardUtil.cxx:159
 AliForwardUtil.cxx:160
 AliForwardUtil.cxx:161
 AliForwardUtil.cxx:162
 AliForwardUtil.cxx:163
 AliForwardUtil.cxx:164
 AliForwardUtil.cxx:165
 AliForwardUtil.cxx:166
 AliForwardUtil.cxx:167
 AliForwardUtil.cxx:168
 AliForwardUtil.cxx:169
 AliForwardUtil.cxx:170
 AliForwardUtil.cxx:171
 AliForwardUtil.cxx:172
 AliForwardUtil.cxx:173
 AliForwardUtil.cxx:174
 AliForwardUtil.cxx:175
 AliForwardUtil.cxx:176
 AliForwardUtil.cxx:177
 AliForwardUtil.cxx:178
 AliForwardUtil.cxx:179
 AliForwardUtil.cxx:180
 AliForwardUtil.cxx:181
 AliForwardUtil.cxx:182
 AliForwardUtil.cxx:183
 AliForwardUtil.cxx:184
 AliForwardUtil.cxx:185
 AliForwardUtil.cxx:186
 AliForwardUtil.cxx:187
 AliForwardUtil.cxx:188
 AliForwardUtil.cxx:189
 AliForwardUtil.cxx:190
 AliForwardUtil.cxx:191
 AliForwardUtil.cxx:192
 AliForwardUtil.cxx:193
 AliForwardUtil.cxx:194
 AliForwardUtil.cxx:195
 AliForwardUtil.cxx:196
 AliForwardUtil.cxx:197
 AliForwardUtil.cxx:198
 AliForwardUtil.cxx:199
 AliForwardUtil.cxx:200
 AliForwardUtil.cxx:201
 AliForwardUtil.cxx:202
 AliForwardUtil.cxx:203
 AliForwardUtil.cxx:204
 AliForwardUtil.cxx:205
 AliForwardUtil.cxx:206
 AliForwardUtil.cxx:207
 AliForwardUtil.cxx:208
 AliForwardUtil.cxx:209
 AliForwardUtil.cxx:210
 AliForwardUtil.cxx:211
 AliForwardUtil.cxx:212
 AliForwardUtil.cxx:213
 AliForwardUtil.cxx:214
 AliForwardUtil.cxx:215
 AliForwardUtil.cxx:216
 AliForwardUtil.cxx:217
 AliForwardUtil.cxx:218
 AliForwardUtil.cxx:219
 AliForwardUtil.cxx:220
 AliForwardUtil.cxx:221
 AliForwardUtil.cxx:222
 AliForwardUtil.cxx:223
 AliForwardUtil.cxx:224
 AliForwardUtil.cxx:225
 AliForwardUtil.cxx:226
 AliForwardUtil.cxx:227
 AliForwardUtil.cxx:228
 AliForwardUtil.cxx:229
 AliForwardUtil.cxx:230
 AliForwardUtil.cxx:231
 AliForwardUtil.cxx:232
 AliForwardUtil.cxx:233
 AliForwardUtil.cxx:234
 AliForwardUtil.cxx:235
 AliForwardUtil.cxx:236
 AliForwardUtil.cxx:237
 AliForwardUtil.cxx:238
 AliForwardUtil.cxx:239
 AliForwardUtil.cxx:240
 AliForwardUtil.cxx:241
 AliForwardUtil.cxx:242
 AliForwardUtil.cxx:243
 AliForwardUtil.cxx:244
 AliForwardUtil.cxx:245
 AliForwardUtil.cxx:246
 AliForwardUtil.cxx:247
 AliForwardUtil.cxx:248
 AliForwardUtil.cxx:249
 AliForwardUtil.cxx:250
 AliForwardUtil.cxx:251
 AliForwardUtil.cxx:252
 AliForwardUtil.cxx:253
 AliForwardUtil.cxx:254
 AliForwardUtil.cxx:255
 AliForwardUtil.cxx:256
 AliForwardUtil.cxx:257
 AliForwardUtil.cxx:258
 AliForwardUtil.cxx:259
 AliForwardUtil.cxx:260
 AliForwardUtil.cxx:261
 AliForwardUtil.cxx:262
 AliForwardUtil.cxx:263
 AliForwardUtil.cxx:264
 AliForwardUtil.cxx:265
 AliForwardUtil.cxx:266
 AliForwardUtil.cxx:267
 AliForwardUtil.cxx:268
 AliForwardUtil.cxx:269
 AliForwardUtil.cxx:270
 AliForwardUtil.cxx:271
 AliForwardUtil.cxx:272
 AliForwardUtil.cxx:273
 AliForwardUtil.cxx:274
 AliForwardUtil.cxx:275
 AliForwardUtil.cxx:276
 AliForwardUtil.cxx:277
 AliForwardUtil.cxx:278
 AliForwardUtil.cxx:279
 AliForwardUtil.cxx:280
 AliForwardUtil.cxx:281
 AliForwardUtil.cxx:282
 AliForwardUtil.cxx:283
 AliForwardUtil.cxx:284
 AliForwardUtil.cxx:285
 AliForwardUtil.cxx:286
 AliForwardUtil.cxx:287
 AliForwardUtil.cxx:288
 AliForwardUtil.cxx:289
 AliForwardUtil.cxx:290
 AliForwardUtil.cxx:291
 AliForwardUtil.cxx:292
 AliForwardUtil.cxx:293
 AliForwardUtil.cxx:294
 AliForwardUtil.cxx:295
 AliForwardUtil.cxx:296
 AliForwardUtil.cxx:297
 AliForwardUtil.cxx:298
 AliForwardUtil.cxx:299
 AliForwardUtil.cxx:300
 AliForwardUtil.cxx:301
 AliForwardUtil.cxx:302
 AliForwardUtil.cxx:303
 AliForwardUtil.cxx:304
 AliForwardUtil.cxx:305
 AliForwardUtil.cxx:306
 AliForwardUtil.cxx:307
 AliForwardUtil.cxx:308
 AliForwardUtil.cxx:309
 AliForwardUtil.cxx:310
 AliForwardUtil.cxx:311
 AliForwardUtil.cxx:312
 AliForwardUtil.cxx:313
 AliForwardUtil.cxx:314
 AliForwardUtil.cxx:315
 AliForwardUtil.cxx:316
 AliForwardUtil.cxx:317
 AliForwardUtil.cxx:318
 AliForwardUtil.cxx:319
 AliForwardUtil.cxx:320
 AliForwardUtil.cxx:321
 AliForwardUtil.cxx:322
 AliForwardUtil.cxx:323
 AliForwardUtil.cxx:324
 AliForwardUtil.cxx:325
 AliForwardUtil.cxx:326
 AliForwardUtil.cxx:327
 AliForwardUtil.cxx:328
 AliForwardUtil.cxx:329
 AliForwardUtil.cxx:330
 AliForwardUtil.cxx:331
 AliForwardUtil.cxx:332
 AliForwardUtil.cxx:333
 AliForwardUtil.cxx:334
 AliForwardUtil.cxx:335
 AliForwardUtil.cxx:336
 AliForwardUtil.cxx:337
 AliForwardUtil.cxx:338
 AliForwardUtil.cxx:339
 AliForwardUtil.cxx:340
 AliForwardUtil.cxx:341
 AliForwardUtil.cxx:342
 AliForwardUtil.cxx:343
 AliForwardUtil.cxx:344
 AliForwardUtil.cxx:345
 AliForwardUtil.cxx:346
 AliForwardUtil.cxx:347
 AliForwardUtil.cxx:348
 AliForwardUtil.cxx:349
 AliForwardUtil.cxx:350
 AliForwardUtil.cxx:351
 AliForwardUtil.cxx:352
 AliForwardUtil.cxx:353
 AliForwardUtil.cxx:354
 AliForwardUtil.cxx:355
 AliForwardUtil.cxx:356
 AliForwardUtil.cxx:357
 AliForwardUtil.cxx:358
 AliForwardUtil.cxx:359
 AliForwardUtil.cxx:360
 AliForwardUtil.cxx:361
 AliForwardUtil.cxx:362
 AliForwardUtil.cxx:363
 AliForwardUtil.cxx:364
 AliForwardUtil.cxx:365
 AliForwardUtil.cxx:366
 AliForwardUtil.cxx:367
 AliForwardUtil.cxx:368
 AliForwardUtil.cxx:369
 AliForwardUtil.cxx:370
 AliForwardUtil.cxx:371
 AliForwardUtil.cxx:372
 AliForwardUtil.cxx:373
 AliForwardUtil.cxx:374
 AliForwardUtil.cxx:375
 AliForwardUtil.cxx:376
 AliForwardUtil.cxx:377
 AliForwardUtil.cxx:378
 AliForwardUtil.cxx:379
 AliForwardUtil.cxx:380
 AliForwardUtil.cxx:381
 AliForwardUtil.cxx:382
 AliForwardUtil.cxx:383
 AliForwardUtil.cxx:384
 AliForwardUtil.cxx:385
 AliForwardUtil.cxx:386
 AliForwardUtil.cxx:387
 AliForwardUtil.cxx:388
 AliForwardUtil.cxx:389
 AliForwardUtil.cxx:390
 AliForwardUtil.cxx:391
 AliForwardUtil.cxx:392
 AliForwardUtil.cxx:393
 AliForwardUtil.cxx:394
 AliForwardUtil.cxx:395
 AliForwardUtil.cxx:396
 AliForwardUtil.cxx:397
 AliForwardUtil.cxx:398
 AliForwardUtil.cxx:399
 AliForwardUtil.cxx:400
 AliForwardUtil.cxx:401
 AliForwardUtil.cxx:402
 AliForwardUtil.cxx:403
 AliForwardUtil.cxx:404
 AliForwardUtil.cxx:405
 AliForwardUtil.cxx:406
 AliForwardUtil.cxx:407
 AliForwardUtil.cxx:408
 AliForwardUtil.cxx:409
 AliForwardUtil.cxx:410
 AliForwardUtil.cxx:411
 AliForwardUtil.cxx:412
 AliForwardUtil.cxx:413
 AliForwardUtil.cxx:414
 AliForwardUtil.cxx:415
 AliForwardUtil.cxx:416
 AliForwardUtil.cxx:417
 AliForwardUtil.cxx:418
 AliForwardUtil.cxx:419
 AliForwardUtil.cxx:420
 AliForwardUtil.cxx:421
 AliForwardUtil.cxx:422
 AliForwardUtil.cxx:423
 AliForwardUtil.cxx:424
 AliForwardUtil.cxx:425
 AliForwardUtil.cxx:426
 AliForwardUtil.cxx:427
 AliForwardUtil.cxx:428
 AliForwardUtil.cxx:429
 AliForwardUtil.cxx:430
 AliForwardUtil.cxx:431
 AliForwardUtil.cxx:432
 AliForwardUtil.cxx:433
 AliForwardUtil.cxx:434
 AliForwardUtil.cxx:435
 AliForwardUtil.cxx:436
 AliForwardUtil.cxx:437
 AliForwardUtil.cxx:438
 AliForwardUtil.cxx:439
 AliForwardUtil.cxx:440
 AliForwardUtil.cxx:441
 AliForwardUtil.cxx:442
 AliForwardUtil.cxx:443
 AliForwardUtil.cxx:444
 AliForwardUtil.cxx:445
 AliForwardUtil.cxx:446
 AliForwardUtil.cxx:447
 AliForwardUtil.cxx:448
 AliForwardUtil.cxx:449
 AliForwardUtil.cxx:450
 AliForwardUtil.cxx:451
 AliForwardUtil.cxx:452
 AliForwardUtil.cxx:453
 AliForwardUtil.cxx:454
 AliForwardUtil.cxx:455
 AliForwardUtil.cxx:456
 AliForwardUtil.cxx:457
 AliForwardUtil.cxx:458
 AliForwardUtil.cxx:459
 AliForwardUtil.cxx:460
 AliForwardUtil.cxx:461
 AliForwardUtil.cxx:462
 AliForwardUtil.cxx:463
 AliForwardUtil.cxx:464
 AliForwardUtil.cxx:465
 AliForwardUtil.cxx:466
 AliForwardUtil.cxx:467
 AliForwardUtil.cxx:468
 AliForwardUtil.cxx:469
 AliForwardUtil.cxx:470
 AliForwardUtil.cxx:471
 AliForwardUtil.cxx:472
 AliForwardUtil.cxx:473
 AliForwardUtil.cxx:474
 AliForwardUtil.cxx:475
 AliForwardUtil.cxx:476
 AliForwardUtil.cxx:477
 AliForwardUtil.cxx:478
 AliForwardUtil.cxx:479
 AliForwardUtil.cxx:480
 AliForwardUtil.cxx:481
 AliForwardUtil.cxx:482
 AliForwardUtil.cxx:483
 AliForwardUtil.cxx:484
 AliForwardUtil.cxx:485
 AliForwardUtil.cxx:486
 AliForwardUtil.cxx:487
 AliForwardUtil.cxx:488
 AliForwardUtil.cxx:489
 AliForwardUtil.cxx:490
 AliForwardUtil.cxx:491
 AliForwardUtil.cxx:492
 AliForwardUtil.cxx:493
 AliForwardUtil.cxx:494
 AliForwardUtil.cxx:495
 AliForwardUtil.cxx:496
 AliForwardUtil.cxx:497
 AliForwardUtil.cxx:498
 AliForwardUtil.cxx:499
 AliForwardUtil.cxx:500
 AliForwardUtil.cxx:501
 AliForwardUtil.cxx:502
 AliForwardUtil.cxx:503
 AliForwardUtil.cxx:504
 AliForwardUtil.cxx:505
 AliForwardUtil.cxx:506
 AliForwardUtil.cxx:507
 AliForwardUtil.cxx:508
 AliForwardUtil.cxx:509
 AliForwardUtil.cxx:510
 AliForwardUtil.cxx:511
 AliForwardUtil.cxx:512
 AliForwardUtil.cxx:513
 AliForwardUtil.cxx:514
 AliForwardUtil.cxx:515
 AliForwardUtil.cxx:516
 AliForwardUtil.cxx:517
 AliForwardUtil.cxx:518
 AliForwardUtil.cxx:519
 AliForwardUtil.cxx:520
 AliForwardUtil.cxx:521
 AliForwardUtil.cxx:522
 AliForwardUtil.cxx:523
 AliForwardUtil.cxx:524
 AliForwardUtil.cxx:525
 AliForwardUtil.cxx:526
 AliForwardUtil.cxx:527
 AliForwardUtil.cxx:528
 AliForwardUtil.cxx:529
 AliForwardUtil.cxx:530
 AliForwardUtil.cxx:531
 AliForwardUtil.cxx:532
 AliForwardUtil.cxx:533
 AliForwardUtil.cxx:534
 AliForwardUtil.cxx:535
 AliForwardUtil.cxx:536
 AliForwardUtil.cxx:537
 AliForwardUtil.cxx:538
 AliForwardUtil.cxx:539
 AliForwardUtil.cxx:540
 AliForwardUtil.cxx:541
 AliForwardUtil.cxx:542
 AliForwardUtil.cxx:543
 AliForwardUtil.cxx:544
 AliForwardUtil.cxx:545
 AliForwardUtil.cxx:546
 AliForwardUtil.cxx:547
 AliForwardUtil.cxx:548
 AliForwardUtil.cxx:549
 AliForwardUtil.cxx:550
 AliForwardUtil.cxx:551
 AliForwardUtil.cxx:552
 AliForwardUtil.cxx:553
 AliForwardUtil.cxx:554
 AliForwardUtil.cxx:555
 AliForwardUtil.cxx:556
 AliForwardUtil.cxx:557
 AliForwardUtil.cxx:558
 AliForwardUtil.cxx:559
 AliForwardUtil.cxx:560
 AliForwardUtil.cxx:561
 AliForwardUtil.cxx:562
 AliForwardUtil.cxx:563
 AliForwardUtil.cxx:564
 AliForwardUtil.cxx:565
 AliForwardUtil.cxx:566
 AliForwardUtil.cxx:567
 AliForwardUtil.cxx:568
 AliForwardUtil.cxx:569
 AliForwardUtil.cxx:570
 AliForwardUtil.cxx:571
 AliForwardUtil.cxx:572
 AliForwardUtil.cxx:573
 AliForwardUtil.cxx:574
 AliForwardUtil.cxx:575
 AliForwardUtil.cxx:576
 AliForwardUtil.cxx:577
 AliForwardUtil.cxx:578
 AliForwardUtil.cxx:579
 AliForwardUtil.cxx:580
 AliForwardUtil.cxx:581
 AliForwardUtil.cxx:582
 AliForwardUtil.cxx:583
 AliForwardUtil.cxx:584
 AliForwardUtil.cxx:585
 AliForwardUtil.cxx:586
 AliForwardUtil.cxx:587
 AliForwardUtil.cxx:588
 AliForwardUtil.cxx:589
 AliForwardUtil.cxx:590
 AliForwardUtil.cxx:591
 AliForwardUtil.cxx:592
 AliForwardUtil.cxx:593
 AliForwardUtil.cxx:594
 AliForwardUtil.cxx:595
 AliForwardUtil.cxx:596
 AliForwardUtil.cxx:597
 AliForwardUtil.cxx:598
 AliForwardUtil.cxx:599
 AliForwardUtil.cxx:600
 AliForwardUtil.cxx:601
 AliForwardUtil.cxx:602
 AliForwardUtil.cxx:603
 AliForwardUtil.cxx:604
 AliForwardUtil.cxx:605
 AliForwardUtil.cxx:606
 AliForwardUtil.cxx:607
 AliForwardUtil.cxx:608
 AliForwardUtil.cxx:609
 AliForwardUtil.cxx:610
 AliForwardUtil.cxx:611
 AliForwardUtil.cxx:612
 AliForwardUtil.cxx:613
 AliForwardUtil.cxx:614
 AliForwardUtil.cxx:615
 AliForwardUtil.cxx:616
 AliForwardUtil.cxx:617
 AliForwardUtil.cxx:618
 AliForwardUtil.cxx:619
 AliForwardUtil.cxx:620
 AliForwardUtil.cxx:621
 AliForwardUtil.cxx:622
 AliForwardUtil.cxx:623
 AliForwardUtil.cxx:624
 AliForwardUtil.cxx:625
 AliForwardUtil.cxx:626
 AliForwardUtil.cxx:627
 AliForwardUtil.cxx:628
 AliForwardUtil.cxx:629
 AliForwardUtil.cxx:630
 AliForwardUtil.cxx:631
 AliForwardUtil.cxx:632
 AliForwardUtil.cxx:633
 AliForwardUtil.cxx:634
 AliForwardUtil.cxx:635
 AliForwardUtil.cxx:636
 AliForwardUtil.cxx:637
 AliForwardUtil.cxx:638
 AliForwardUtil.cxx:639
 AliForwardUtil.cxx:640
 AliForwardUtil.cxx:641
 AliForwardUtil.cxx:642
 AliForwardUtil.cxx:643
 AliForwardUtil.cxx:644
 AliForwardUtil.cxx:645
 AliForwardUtil.cxx:646
 AliForwardUtil.cxx:647
 AliForwardUtil.cxx:648
 AliForwardUtil.cxx:649
 AliForwardUtil.cxx:650
 AliForwardUtil.cxx:651
 AliForwardUtil.cxx:652
 AliForwardUtil.cxx:653
 AliForwardUtil.cxx:654
 AliForwardUtil.cxx:655
 AliForwardUtil.cxx:656
 AliForwardUtil.cxx:657
 AliForwardUtil.cxx:658
 AliForwardUtil.cxx:659
 AliForwardUtil.cxx:660
 AliForwardUtil.cxx:661
 AliForwardUtil.cxx:662
 AliForwardUtil.cxx:663
 AliForwardUtil.cxx:664
 AliForwardUtil.cxx:665
 AliForwardUtil.cxx:666
 AliForwardUtil.cxx:667
 AliForwardUtil.cxx:668
 AliForwardUtil.cxx:669
 AliForwardUtil.cxx:670
 AliForwardUtil.cxx:671
 AliForwardUtil.cxx:672
 AliForwardUtil.cxx:673
 AliForwardUtil.cxx:674
 AliForwardUtil.cxx:675
 AliForwardUtil.cxx:676
 AliForwardUtil.cxx:677
 AliForwardUtil.cxx:678
 AliForwardUtil.cxx:679
 AliForwardUtil.cxx:680
 AliForwardUtil.cxx:681
 AliForwardUtil.cxx:682
 AliForwardUtil.cxx:683
 AliForwardUtil.cxx:684
 AliForwardUtil.cxx:685
 AliForwardUtil.cxx:686
 AliForwardUtil.cxx:687
 AliForwardUtil.cxx:688
 AliForwardUtil.cxx:689
 AliForwardUtil.cxx:690
 AliForwardUtil.cxx:691
 AliForwardUtil.cxx:692
 AliForwardUtil.cxx:693
 AliForwardUtil.cxx:694
 AliForwardUtil.cxx:695
 AliForwardUtil.cxx:696
 AliForwardUtil.cxx:697
 AliForwardUtil.cxx:698
 AliForwardUtil.cxx:699
 AliForwardUtil.cxx:700
 AliForwardUtil.cxx:701
 AliForwardUtil.cxx:702
 AliForwardUtil.cxx:703
 AliForwardUtil.cxx:704
 AliForwardUtil.cxx:705
 AliForwardUtil.cxx:706
 AliForwardUtil.cxx:707
 AliForwardUtil.cxx:708
 AliForwardUtil.cxx:709
 AliForwardUtil.cxx:710
 AliForwardUtil.cxx:711
 AliForwardUtil.cxx:712
 AliForwardUtil.cxx:713
 AliForwardUtil.cxx:714
 AliForwardUtil.cxx:715
 AliForwardUtil.cxx:716
 AliForwardUtil.cxx:717
 AliForwardUtil.cxx:718
 AliForwardUtil.cxx:719
 AliForwardUtil.cxx:720
 AliForwardUtil.cxx:721
 AliForwardUtil.cxx:722
 AliForwardUtil.cxx:723
 AliForwardUtil.cxx:724
 AliForwardUtil.cxx:725
 AliForwardUtil.cxx:726
 AliForwardUtil.cxx:727
 AliForwardUtil.cxx:728
 AliForwardUtil.cxx:729
 AliForwardUtil.cxx:730
 AliForwardUtil.cxx:731
 AliForwardUtil.cxx:732
 AliForwardUtil.cxx:733
 AliForwardUtil.cxx:734
 AliForwardUtil.cxx:735
 AliForwardUtil.cxx:736
 AliForwardUtil.cxx:737
 AliForwardUtil.cxx:738
 AliForwardUtil.cxx:739
 AliForwardUtil.cxx:740
 AliForwardUtil.cxx:741
 AliForwardUtil.cxx:742
 AliForwardUtil.cxx:743
 AliForwardUtil.cxx:744
 AliForwardUtil.cxx:745
 AliForwardUtil.cxx:746
 AliForwardUtil.cxx:747
 AliForwardUtil.cxx:748
 AliForwardUtil.cxx:749
 AliForwardUtil.cxx:750
 AliForwardUtil.cxx:751
 AliForwardUtil.cxx:752
 AliForwardUtil.cxx:753
 AliForwardUtil.cxx:754
 AliForwardUtil.cxx:755
 AliForwardUtil.cxx:756
 AliForwardUtil.cxx:757
 AliForwardUtil.cxx:758
 AliForwardUtil.cxx:759
 AliForwardUtil.cxx:760
 AliForwardUtil.cxx:761
 AliForwardUtil.cxx:762
 AliForwardUtil.cxx:763
 AliForwardUtil.cxx:764
 AliForwardUtil.cxx:765
 AliForwardUtil.cxx:766
 AliForwardUtil.cxx:767
 AliForwardUtil.cxx:768
 AliForwardUtil.cxx:769
 AliForwardUtil.cxx:770
 AliForwardUtil.cxx:771
 AliForwardUtil.cxx:772
 AliForwardUtil.cxx:773
 AliForwardUtil.cxx:774
 AliForwardUtil.cxx:775
 AliForwardUtil.cxx:776
 AliForwardUtil.cxx:777
 AliForwardUtil.cxx:778
 AliForwardUtil.cxx:779
 AliForwardUtil.cxx:780
 AliForwardUtil.cxx:781
 AliForwardUtil.cxx:782
 AliForwardUtil.cxx:783
 AliForwardUtil.cxx:784
 AliForwardUtil.cxx:785
 AliForwardUtil.cxx:786
 AliForwardUtil.cxx:787
 AliForwardUtil.cxx:788
 AliForwardUtil.cxx:789
 AliForwardUtil.cxx:790
 AliForwardUtil.cxx:791
 AliForwardUtil.cxx:792
 AliForwardUtil.cxx:793
 AliForwardUtil.cxx:794
 AliForwardUtil.cxx:795
 AliForwardUtil.cxx:796
 AliForwardUtil.cxx:797
 AliForwardUtil.cxx:798
 AliForwardUtil.cxx:799
 AliForwardUtil.cxx:800
 AliForwardUtil.cxx:801
 AliForwardUtil.cxx:802
 AliForwardUtil.cxx:803
 AliForwardUtil.cxx:804
 AliForwardUtil.cxx:805
 AliForwardUtil.cxx:806
 AliForwardUtil.cxx:807
 AliForwardUtil.cxx:808
 AliForwardUtil.cxx:809
 AliForwardUtil.cxx:810
 AliForwardUtil.cxx:811
 AliForwardUtil.cxx:812
 AliForwardUtil.cxx:813
 AliForwardUtil.cxx:814
 AliForwardUtil.cxx:815
 AliForwardUtil.cxx:816
 AliForwardUtil.cxx:817
 AliForwardUtil.cxx:818
 AliForwardUtil.cxx:819
 AliForwardUtil.cxx:820
 AliForwardUtil.cxx:821
 AliForwardUtil.cxx:822
 AliForwardUtil.cxx:823
 AliForwardUtil.cxx:824
 AliForwardUtil.cxx:825
 AliForwardUtil.cxx:826
 AliForwardUtil.cxx:827
 AliForwardUtil.cxx:828
 AliForwardUtil.cxx:829
 AliForwardUtil.cxx:830
 AliForwardUtil.cxx:831
 AliForwardUtil.cxx:832
 AliForwardUtil.cxx:833
 AliForwardUtil.cxx:834
 AliForwardUtil.cxx:835
 AliForwardUtil.cxx:836
 AliForwardUtil.cxx:837
 AliForwardUtil.cxx:838
 AliForwardUtil.cxx:839
 AliForwardUtil.cxx:840
 AliForwardUtil.cxx:841
 AliForwardUtil.cxx:842
 AliForwardUtil.cxx:843
 AliForwardUtil.cxx:844
 AliForwardUtil.cxx:845
 AliForwardUtil.cxx:846
 AliForwardUtil.cxx:847
 AliForwardUtil.cxx:848
 AliForwardUtil.cxx:849
 AliForwardUtil.cxx:850
 AliForwardUtil.cxx:851
 AliForwardUtil.cxx:852
 AliForwardUtil.cxx:853
 AliForwardUtil.cxx:854
 AliForwardUtil.cxx:855
 AliForwardUtil.cxx:856
 AliForwardUtil.cxx:857
 AliForwardUtil.cxx:858
 AliForwardUtil.cxx:859
 AliForwardUtil.cxx:860
 AliForwardUtil.cxx:861
 AliForwardUtil.cxx:862
 AliForwardUtil.cxx:863
 AliForwardUtil.cxx:864
 AliForwardUtil.cxx:865
 AliForwardUtil.cxx:866
 AliForwardUtil.cxx:867
 AliForwardUtil.cxx:868
 AliForwardUtil.cxx:869
 AliForwardUtil.cxx:870
 AliForwardUtil.cxx:871
 AliForwardUtil.cxx:872
 AliForwardUtil.cxx:873
 AliForwardUtil.cxx:874
 AliForwardUtil.cxx:875
 AliForwardUtil.cxx:876
 AliForwardUtil.cxx:877
 AliForwardUtil.cxx:878
 AliForwardUtil.cxx:879
 AliForwardUtil.cxx:880
 AliForwardUtil.cxx:881
 AliForwardUtil.cxx:882
 AliForwardUtil.cxx:883
 AliForwardUtil.cxx:884
 AliForwardUtil.cxx:885
 AliForwardUtil.cxx:886
 AliForwardUtil.cxx:887
 AliForwardUtil.cxx:888
 AliForwardUtil.cxx:889
 AliForwardUtil.cxx:890
 AliForwardUtil.cxx:891
 AliForwardUtil.cxx:892
 AliForwardUtil.cxx:893
 AliForwardUtil.cxx:894
 AliForwardUtil.cxx:895
 AliForwardUtil.cxx:896
 AliForwardUtil.cxx:897
 AliForwardUtil.cxx:898
 AliForwardUtil.cxx:899
 AliForwardUtil.cxx:900
 AliForwardUtil.cxx:901
 AliForwardUtil.cxx:902
 AliForwardUtil.cxx:903
 AliForwardUtil.cxx:904
 AliForwardUtil.cxx:905
 AliForwardUtil.cxx:906
 AliForwardUtil.cxx:907
 AliForwardUtil.cxx:908
 AliForwardUtil.cxx:909
 AliForwardUtil.cxx:910
 AliForwardUtil.cxx:911
 AliForwardUtil.cxx:912
 AliForwardUtil.cxx:913
 AliForwardUtil.cxx:914
 AliForwardUtil.cxx:915
 AliForwardUtil.cxx:916
 AliForwardUtil.cxx:917
 AliForwardUtil.cxx:918
 AliForwardUtil.cxx:919
 AliForwardUtil.cxx:920
 AliForwardUtil.cxx:921
 AliForwardUtil.cxx:922
 AliForwardUtil.cxx:923
 AliForwardUtil.cxx:924
 AliForwardUtil.cxx:925
 AliForwardUtil.cxx:926
 AliForwardUtil.cxx:927
 AliForwardUtil.cxx:928
 AliForwardUtil.cxx:929
 AliForwardUtil.cxx:930
 AliForwardUtil.cxx:931
 AliForwardUtil.cxx:932
 AliForwardUtil.cxx:933
 AliForwardUtil.cxx:934
 AliForwardUtil.cxx:935
 AliForwardUtil.cxx:936
 AliForwardUtil.cxx:937
 AliForwardUtil.cxx:938
 AliForwardUtil.cxx:939
 AliForwardUtil.cxx:940
 AliForwardUtil.cxx:941
 AliForwardUtil.cxx:942
 AliForwardUtil.cxx:943
 AliForwardUtil.cxx:944
 AliForwardUtil.cxx:945
 AliForwardUtil.cxx:946
 AliForwardUtil.cxx:947
 AliForwardUtil.cxx:948
 AliForwardUtil.cxx:949
 AliForwardUtil.cxx:950
 AliForwardUtil.cxx:951
 AliForwardUtil.cxx:952
 AliForwardUtil.cxx:953
 AliForwardUtil.cxx:954
 AliForwardUtil.cxx:955
 AliForwardUtil.cxx:956
 AliForwardUtil.cxx:957
 AliForwardUtil.cxx:958
 AliForwardUtil.cxx:959
 AliForwardUtil.cxx:960
 AliForwardUtil.cxx:961
 AliForwardUtil.cxx:962
 AliForwardUtil.cxx:963
 AliForwardUtil.cxx:964
 AliForwardUtil.cxx:965
 AliForwardUtil.cxx:966
 AliForwardUtil.cxx:967
 AliForwardUtil.cxx:968
 AliForwardUtil.cxx:969
 AliForwardUtil.cxx:970
 AliForwardUtil.cxx:971
 AliForwardUtil.cxx:972
 AliForwardUtil.cxx:973
 AliForwardUtil.cxx:974
 AliForwardUtil.cxx:975
 AliForwardUtil.cxx:976
 AliForwardUtil.cxx:977
 AliForwardUtil.cxx:978
 AliForwardUtil.cxx:979
 AliForwardUtil.cxx:980
 AliForwardUtil.cxx:981
 AliForwardUtil.cxx:982
 AliForwardUtil.cxx:983
 AliForwardUtil.cxx:984
 AliForwardUtil.cxx:985
 AliForwardUtil.cxx:986
 AliForwardUtil.cxx:987
 AliForwardUtil.cxx:988
 AliForwardUtil.cxx:989
 AliForwardUtil.cxx:990
 AliForwardUtil.cxx:991
 AliForwardUtil.cxx:992
 AliForwardUtil.cxx:993
 AliForwardUtil.cxx:994
 AliForwardUtil.cxx:995
 AliForwardUtil.cxx:996
 AliForwardUtil.cxx:997
 AliForwardUtil.cxx:998
 AliForwardUtil.cxx:999
 AliForwardUtil.cxx:1000
 AliForwardUtil.cxx:1001
 AliForwardUtil.cxx:1002
 AliForwardUtil.cxx:1003
 AliForwardUtil.cxx:1004
 AliForwardUtil.cxx:1005
 AliForwardUtil.cxx:1006
 AliForwardUtil.cxx:1007
 AliForwardUtil.cxx:1008
 AliForwardUtil.cxx:1009
 AliForwardUtil.cxx:1010
 AliForwardUtil.cxx:1011
 AliForwardUtil.cxx:1012
 AliForwardUtil.cxx:1013
 AliForwardUtil.cxx:1014
 AliForwardUtil.cxx:1015
 AliForwardUtil.cxx:1016
 AliForwardUtil.cxx:1017
 AliForwardUtil.cxx:1018
 AliForwardUtil.cxx:1019
 AliForwardUtil.cxx:1020
 AliForwardUtil.cxx:1021
 AliForwardUtil.cxx:1022
 AliForwardUtil.cxx:1023
 AliForwardUtil.cxx:1024
 AliForwardUtil.cxx:1025
 AliForwardUtil.cxx:1026
 AliForwardUtil.cxx:1027
 AliForwardUtil.cxx:1028
 AliForwardUtil.cxx:1029
 AliForwardUtil.cxx:1030
 AliForwardUtil.cxx:1031
 AliForwardUtil.cxx:1032
 AliForwardUtil.cxx:1033
 AliForwardUtil.cxx:1034
 AliForwardUtil.cxx:1035
 AliForwardUtil.cxx:1036
 AliForwardUtil.cxx:1037
 AliForwardUtil.cxx:1038
 AliForwardUtil.cxx:1039
 AliForwardUtil.cxx:1040
 AliForwardUtil.cxx:1041
 AliForwardUtil.cxx:1042
 AliForwardUtil.cxx:1043
 AliForwardUtil.cxx:1044
 AliForwardUtil.cxx:1045
 AliForwardUtil.cxx:1046
 AliForwardUtil.cxx:1047
 AliForwardUtil.cxx:1048
 AliForwardUtil.cxx:1049
 AliForwardUtil.cxx:1050
 AliForwardUtil.cxx:1051
 AliForwardUtil.cxx:1052
 AliForwardUtil.cxx:1053
 AliForwardUtil.cxx:1054
 AliForwardUtil.cxx:1055
 AliForwardUtil.cxx:1056
 AliForwardUtil.cxx:1057
 AliForwardUtil.cxx:1058
 AliForwardUtil.cxx:1059
 AliForwardUtil.cxx:1060
 AliForwardUtil.cxx:1061
 AliForwardUtil.cxx:1062
 AliForwardUtil.cxx:1063
 AliForwardUtil.cxx:1064
 AliForwardUtil.cxx:1065
 AliForwardUtil.cxx:1066
 AliForwardUtil.cxx:1067
 AliForwardUtil.cxx:1068
 AliForwardUtil.cxx:1069
 AliForwardUtil.cxx:1070
 AliForwardUtil.cxx:1071
 AliForwardUtil.cxx:1072
 AliForwardUtil.cxx:1073
 AliForwardUtil.cxx:1074
 AliForwardUtil.cxx:1075
 AliForwardUtil.cxx:1076
 AliForwardUtil.cxx:1077
 AliForwardUtil.cxx:1078
 AliForwardUtil.cxx:1079
 AliForwardUtil.cxx:1080
 AliForwardUtil.cxx:1081
 AliForwardUtil.cxx:1082
 AliForwardUtil.cxx:1083
 AliForwardUtil.cxx:1084
 AliForwardUtil.cxx:1085
 AliForwardUtil.cxx:1086
 AliForwardUtil.cxx:1087
 AliForwardUtil.cxx:1088
 AliForwardUtil.cxx:1089
 AliForwardUtil.cxx:1090
 AliForwardUtil.cxx:1091
 AliForwardUtil.cxx:1092
 AliForwardUtil.cxx:1093
 AliForwardUtil.cxx:1094
 AliForwardUtil.cxx:1095
 AliForwardUtil.cxx:1096
 AliForwardUtil.cxx:1097
 AliForwardUtil.cxx:1098
 AliForwardUtil.cxx:1099
 AliForwardUtil.cxx:1100
 AliForwardUtil.cxx:1101
 AliForwardUtil.cxx:1102
 AliForwardUtil.cxx:1103
 AliForwardUtil.cxx:1104
 AliForwardUtil.cxx:1105
 AliForwardUtil.cxx:1106
 AliForwardUtil.cxx:1107
 AliForwardUtil.cxx:1108
 AliForwardUtil.cxx:1109
 AliForwardUtil.cxx:1110
 AliForwardUtil.cxx:1111
 AliForwardUtil.cxx:1112
 AliForwardUtil.cxx:1113
 AliForwardUtil.cxx:1114
 AliForwardUtil.cxx:1115
 AliForwardUtil.cxx:1116
 AliForwardUtil.cxx:1117
 AliForwardUtil.cxx:1118
 AliForwardUtil.cxx:1119
 AliForwardUtil.cxx:1120
 AliForwardUtil.cxx:1121
 AliForwardUtil.cxx:1122
 AliForwardUtil.cxx:1123
 AliForwardUtil.cxx:1124
 AliForwardUtil.cxx:1125
 AliForwardUtil.cxx:1126
 AliForwardUtil.cxx:1127
 AliForwardUtil.cxx:1128
 AliForwardUtil.cxx:1129
 AliForwardUtil.cxx:1130
 AliForwardUtil.cxx:1131
 AliForwardUtil.cxx:1132
 AliForwardUtil.cxx:1133
 AliForwardUtil.cxx:1134
 AliForwardUtil.cxx:1135
 AliForwardUtil.cxx:1136
 AliForwardUtil.cxx:1137
 AliForwardUtil.cxx:1138
 AliForwardUtil.cxx:1139
 AliForwardUtil.cxx:1140
 AliForwardUtil.cxx:1141
 AliForwardUtil.cxx:1142
 AliForwardUtil.cxx:1143
 AliForwardUtil.cxx:1144
 AliForwardUtil.cxx:1145
 AliForwardUtil.cxx:1146
 AliForwardUtil.cxx:1147
 AliForwardUtil.cxx:1148
 AliForwardUtil.cxx:1149
 AliForwardUtil.cxx:1150
 AliForwardUtil.cxx:1151
 AliForwardUtil.cxx:1152
 AliForwardUtil.cxx:1153
 AliForwardUtil.cxx:1154
 AliForwardUtil.cxx:1155
 AliForwardUtil.cxx:1156
 AliForwardUtil.cxx:1157
 AliForwardUtil.cxx:1158
 AliForwardUtil.cxx:1159
 AliForwardUtil.cxx:1160
 AliForwardUtil.cxx:1161
 AliForwardUtil.cxx:1162
 AliForwardUtil.cxx:1163
 AliForwardUtil.cxx:1164
 AliForwardUtil.cxx:1165
 AliForwardUtil.cxx:1166
 AliForwardUtil.cxx:1167
 AliForwardUtil.cxx:1168
 AliForwardUtil.cxx:1169
 AliForwardUtil.cxx:1170
 AliForwardUtil.cxx:1171
 AliForwardUtil.cxx:1172
 AliForwardUtil.cxx:1173
 AliForwardUtil.cxx:1174
 AliForwardUtil.cxx:1175
 AliForwardUtil.cxx:1176
 AliForwardUtil.cxx:1177
 AliForwardUtil.cxx:1178
 AliForwardUtil.cxx:1179
 AliForwardUtil.cxx:1180
 AliForwardUtil.cxx:1181
 AliForwardUtil.cxx:1182
 AliForwardUtil.cxx:1183
 AliForwardUtil.cxx:1184
 AliForwardUtil.cxx:1185
 AliForwardUtil.cxx:1186
 AliForwardUtil.cxx:1187
 AliForwardUtil.cxx:1188
 AliForwardUtil.cxx:1189
 AliForwardUtil.cxx:1190
 AliForwardUtil.cxx:1191
 AliForwardUtil.cxx:1192
 AliForwardUtil.cxx:1193
 AliForwardUtil.cxx:1194
 AliForwardUtil.cxx:1195
 AliForwardUtil.cxx:1196
 AliForwardUtil.cxx:1197
 AliForwardUtil.cxx:1198
 AliForwardUtil.cxx:1199
 AliForwardUtil.cxx:1200
 AliForwardUtil.cxx:1201
 AliForwardUtil.cxx:1202
 AliForwardUtil.cxx:1203
 AliForwardUtil.cxx:1204
 AliForwardUtil.cxx:1205
 AliForwardUtil.cxx:1206
 AliForwardUtil.cxx:1207
 AliForwardUtil.cxx:1208
 AliForwardUtil.cxx:1209
 AliForwardUtil.cxx:1210
 AliForwardUtil.cxx:1211
 AliForwardUtil.cxx:1212
 AliForwardUtil.cxx:1213
 AliForwardUtil.cxx:1214
 AliForwardUtil.cxx:1215
 AliForwardUtil.cxx:1216
 AliForwardUtil.cxx:1217
 AliForwardUtil.cxx:1218
 AliForwardUtil.cxx:1219
 AliForwardUtil.cxx:1220
 AliForwardUtil.cxx:1221
 AliForwardUtil.cxx:1222
 AliForwardUtil.cxx:1223
 AliForwardUtil.cxx:1224
 AliForwardUtil.cxx:1225
 AliForwardUtil.cxx:1226
 AliForwardUtil.cxx:1227
 AliForwardUtil.cxx:1228
 AliForwardUtil.cxx:1229
 AliForwardUtil.cxx:1230
 AliForwardUtil.cxx:1231
 AliForwardUtil.cxx:1232
 AliForwardUtil.cxx:1233
 AliForwardUtil.cxx:1234
 AliForwardUtil.cxx:1235
 AliForwardUtil.cxx:1236
 AliForwardUtil.cxx:1237
 AliForwardUtil.cxx:1238
 AliForwardUtil.cxx:1239
 AliForwardUtil.cxx:1240
 AliForwardUtil.cxx:1241
 AliForwardUtil.cxx:1242
 AliForwardUtil.cxx:1243
 AliForwardUtil.cxx:1244
 AliForwardUtil.cxx:1245
 AliForwardUtil.cxx:1246
 AliForwardUtil.cxx:1247
 AliForwardUtil.cxx:1248
 AliForwardUtil.cxx:1249
 AliForwardUtil.cxx:1250
 AliForwardUtil.cxx:1251
 AliForwardUtil.cxx:1252
 AliForwardUtil.cxx:1253
 AliForwardUtil.cxx:1254
 AliForwardUtil.cxx:1255
 AliForwardUtil.cxx:1256
 AliForwardUtil.cxx:1257
 AliForwardUtil.cxx:1258
 AliForwardUtil.cxx:1259
 AliForwardUtil.cxx:1260
 AliForwardUtil.cxx:1261
 AliForwardUtil.cxx:1262
 AliForwardUtil.cxx:1263
 AliForwardUtil.cxx:1264
 AliForwardUtil.cxx:1265
 AliForwardUtil.cxx:1266
 AliForwardUtil.cxx:1267
 AliForwardUtil.cxx:1268
 AliForwardUtil.cxx:1269
 AliForwardUtil.cxx:1270
 AliForwardUtil.cxx:1271
 AliForwardUtil.cxx:1272
 AliForwardUtil.cxx:1273
 AliForwardUtil.cxx:1274
 AliForwardUtil.cxx:1275
 AliForwardUtil.cxx:1276
 AliForwardUtil.cxx:1277
 AliForwardUtil.cxx:1278
 AliForwardUtil.cxx:1279
 AliForwardUtil.cxx:1280
 AliForwardUtil.cxx:1281
 AliForwardUtil.cxx:1282
 AliForwardUtil.cxx:1283
 AliForwardUtil.cxx:1284
 AliForwardUtil.cxx:1285
 AliForwardUtil.cxx:1286
 AliForwardUtil.cxx:1287
 AliForwardUtil.cxx:1288
 AliForwardUtil.cxx:1289
 AliForwardUtil.cxx:1290
 AliForwardUtil.cxx:1291
 AliForwardUtil.cxx:1292
 AliForwardUtil.cxx:1293
 AliForwardUtil.cxx:1294
 AliForwardUtil.cxx:1295
 AliForwardUtil.cxx:1296
 AliForwardUtil.cxx:1297
 AliForwardUtil.cxx:1298
 AliForwardUtil.cxx:1299
 AliForwardUtil.cxx:1300
 AliForwardUtil.cxx:1301
 AliForwardUtil.cxx:1302
 AliForwardUtil.cxx:1303
 AliForwardUtil.cxx:1304
 AliForwardUtil.cxx:1305
 AliForwardUtil.cxx:1306
 AliForwardUtil.cxx:1307
 AliForwardUtil.cxx:1308
 AliForwardUtil.cxx:1309
 AliForwardUtil.cxx:1310
 AliForwardUtil.cxx:1311
 AliForwardUtil.cxx:1312
 AliForwardUtil.cxx:1313
 AliForwardUtil.cxx:1314
 AliForwardUtil.cxx:1315
 AliForwardUtil.cxx:1316
 AliForwardUtil.cxx:1317
 AliForwardUtil.cxx:1318
 AliForwardUtil.cxx:1319
 AliForwardUtil.cxx:1320
 AliForwardUtil.cxx:1321
 AliForwardUtil.cxx:1322
 AliForwardUtil.cxx:1323
 AliForwardUtil.cxx:1324
 AliForwardUtil.cxx:1325
 AliForwardUtil.cxx:1326
 AliForwardUtil.cxx:1327
 AliForwardUtil.cxx:1328
 AliForwardUtil.cxx:1329
 AliForwardUtil.cxx:1330
 AliForwardUtil.cxx:1331
 AliForwardUtil.cxx:1332
 AliForwardUtil.cxx:1333
 AliForwardUtil.cxx:1334
 AliForwardUtil.cxx:1335
 AliForwardUtil.cxx:1336
 AliForwardUtil.cxx:1337
 AliForwardUtil.cxx:1338
 AliForwardUtil.cxx:1339
 AliForwardUtil.cxx:1340
 AliForwardUtil.cxx:1341
 AliForwardUtil.cxx:1342
 AliForwardUtil.cxx:1343
 AliForwardUtil.cxx:1344
 AliForwardUtil.cxx:1345
 AliForwardUtil.cxx:1346
 AliForwardUtil.cxx:1347
 AliForwardUtil.cxx:1348
 AliForwardUtil.cxx:1349
 AliForwardUtil.cxx:1350
 AliForwardUtil.cxx:1351
 AliForwardUtil.cxx:1352
 AliForwardUtil.cxx:1353
 AliForwardUtil.cxx:1354
 AliForwardUtil.cxx:1355
 AliForwardUtil.cxx:1356
 AliForwardUtil.cxx:1357
 AliForwardUtil.cxx:1358
 AliForwardUtil.cxx:1359
 AliForwardUtil.cxx:1360
 AliForwardUtil.cxx:1361
 AliForwardUtil.cxx:1362
 AliForwardUtil.cxx:1363
 AliForwardUtil.cxx:1364
 AliForwardUtil.cxx:1365
 AliForwardUtil.cxx:1366
 AliForwardUtil.cxx:1367
 AliForwardUtil.cxx:1368
 AliForwardUtil.cxx:1369
 AliForwardUtil.cxx:1370
 AliForwardUtil.cxx:1371
 AliForwardUtil.cxx:1372
 AliForwardUtil.cxx:1373
 AliForwardUtil.cxx:1374
 AliForwardUtil.cxx:1375
 AliForwardUtil.cxx:1376
 AliForwardUtil.cxx:1377
 AliForwardUtil.cxx:1378
 AliForwardUtil.cxx:1379
 AliForwardUtil.cxx:1380
 AliForwardUtil.cxx:1381
 AliForwardUtil.cxx:1382
 AliForwardUtil.cxx:1383
 AliForwardUtil.cxx:1384
 AliForwardUtil.cxx:1385
 AliForwardUtil.cxx:1386
 AliForwardUtil.cxx:1387
 AliForwardUtil.cxx:1388
 AliForwardUtil.cxx:1389
 AliForwardUtil.cxx:1390
 AliForwardUtil.cxx:1391
 AliForwardUtil.cxx:1392
 AliForwardUtil.cxx:1393
 AliForwardUtil.cxx:1394
 AliForwardUtil.cxx:1395
 AliForwardUtil.cxx:1396
 AliForwardUtil.cxx:1397
 AliForwardUtil.cxx:1398
 AliForwardUtil.cxx:1399
 AliForwardUtil.cxx:1400
 AliForwardUtil.cxx:1401
 AliForwardUtil.cxx:1402
 AliForwardUtil.cxx:1403
 AliForwardUtil.cxx:1404
 AliForwardUtil.cxx:1405
 AliForwardUtil.cxx:1406
 AliForwardUtil.cxx:1407
 AliForwardUtil.cxx:1408
 AliForwardUtil.cxx:1409
 AliForwardUtil.cxx:1410
 AliForwardUtil.cxx:1411
 AliForwardUtil.cxx:1412
 AliForwardUtil.cxx:1413
 AliForwardUtil.cxx:1414
 AliForwardUtil.cxx:1415
 AliForwardUtil.cxx:1416
 AliForwardUtil.cxx:1417
 AliForwardUtil.cxx:1418
 AliForwardUtil.cxx:1419
 AliForwardUtil.cxx:1420
 AliForwardUtil.cxx:1421
 AliForwardUtil.cxx:1422
 AliForwardUtil.cxx:1423
 AliForwardUtil.cxx:1424
 AliForwardUtil.cxx:1425
 AliForwardUtil.cxx:1426
 AliForwardUtil.cxx:1427
 AliForwardUtil.cxx:1428
 AliForwardUtil.cxx:1429
 AliForwardUtil.cxx:1430
 AliForwardUtil.cxx:1431
 AliForwardUtil.cxx:1432
 AliForwardUtil.cxx:1433
 AliForwardUtil.cxx:1434
 AliForwardUtil.cxx:1435
 AliForwardUtil.cxx:1436
 AliForwardUtil.cxx:1437
 AliForwardUtil.cxx:1438
 AliForwardUtil.cxx:1439
 AliForwardUtil.cxx:1440
 AliForwardUtil.cxx:1441
 AliForwardUtil.cxx:1442
 AliForwardUtil.cxx:1443
 AliForwardUtil.cxx:1444
 AliForwardUtil.cxx:1445
 AliForwardUtil.cxx:1446
 AliForwardUtil.cxx:1447
 AliForwardUtil.cxx:1448
 AliForwardUtil.cxx:1449
 AliForwardUtil.cxx:1450
 AliForwardUtil.cxx:1451
 AliForwardUtil.cxx:1452
 AliForwardUtil.cxx:1453
 AliForwardUtil.cxx:1454
 AliForwardUtil.cxx:1455
 AliForwardUtil.cxx:1456
 AliForwardUtil.cxx:1457
 AliForwardUtil.cxx:1458
 AliForwardUtil.cxx:1459
 AliForwardUtil.cxx:1460
 AliForwardUtil.cxx:1461
 AliForwardUtil.cxx:1462
 AliForwardUtil.cxx:1463
 AliForwardUtil.cxx:1464
 AliForwardUtil.cxx:1465
 AliForwardUtil.cxx:1466
 AliForwardUtil.cxx:1467
 AliForwardUtil.cxx:1468
 AliForwardUtil.cxx:1469
 AliForwardUtil.cxx:1470
 AliForwardUtil.cxx:1471
 AliForwardUtil.cxx:1472
 AliForwardUtil.cxx:1473
 AliForwardUtil.cxx:1474
 AliForwardUtil.cxx:1475
 AliForwardUtil.cxx:1476
 AliForwardUtil.cxx:1477
 AliForwardUtil.cxx:1478
 AliForwardUtil.cxx:1479
 AliForwardUtil.cxx:1480
 AliForwardUtil.cxx:1481
 AliForwardUtil.cxx:1482
 AliForwardUtil.cxx:1483
 AliForwardUtil.cxx:1484
 AliForwardUtil.cxx:1485
 AliForwardUtil.cxx:1486
 AliForwardUtil.cxx:1487
 AliForwardUtil.cxx:1488
 AliForwardUtil.cxx:1489
 AliForwardUtil.cxx:1490
 AliForwardUtil.cxx:1491
 AliForwardUtil.cxx:1492
 AliForwardUtil.cxx:1493
 AliForwardUtil.cxx:1494
 AliForwardUtil.cxx:1495
 AliForwardUtil.cxx:1496
 AliForwardUtil.cxx:1497
 AliForwardUtil.cxx:1498
 AliForwardUtil.cxx:1499
 AliForwardUtil.cxx:1500
 AliForwardUtil.cxx:1501
 AliForwardUtil.cxx:1502
 AliForwardUtil.cxx:1503
 AliForwardUtil.cxx:1504
 AliForwardUtil.cxx:1505
 AliForwardUtil.cxx:1506
 AliForwardUtil.cxx:1507
 AliForwardUtil.cxx:1508
 AliForwardUtil.cxx:1509
 AliForwardUtil.cxx:1510
 AliForwardUtil.cxx:1511
 AliForwardUtil.cxx:1512
 AliForwardUtil.cxx:1513
 AliForwardUtil.cxx:1514
 AliForwardUtil.cxx:1515
 AliForwardUtil.cxx:1516
 AliForwardUtil.cxx:1517
 AliForwardUtil.cxx:1518
 AliForwardUtil.cxx:1519
 AliForwardUtil.cxx:1520
 AliForwardUtil.cxx:1521
 AliForwardUtil.cxx:1522
 AliForwardUtil.cxx:1523
 AliForwardUtil.cxx:1524
 AliForwardUtil.cxx:1525
 AliForwardUtil.cxx:1526
 AliForwardUtil.cxx:1527
 AliForwardUtil.cxx:1528
 AliForwardUtil.cxx:1529
 AliForwardUtil.cxx:1530
 AliForwardUtil.cxx:1531
 AliForwardUtil.cxx:1532
 AliForwardUtil.cxx:1533
 AliForwardUtil.cxx:1534
 AliForwardUtil.cxx:1535
 AliForwardUtil.cxx:1536
 AliForwardUtil.cxx:1537
 AliForwardUtil.cxx:1538
 AliForwardUtil.cxx:1539
 AliForwardUtil.cxx:1540
 AliForwardUtil.cxx:1541
 AliForwardUtil.cxx:1542
 AliForwardUtil.cxx:1543
 AliForwardUtil.cxx:1544
 AliForwardUtil.cxx:1545
 AliForwardUtil.cxx:1546
 AliForwardUtil.cxx:1547
 AliForwardUtil.cxx:1548
 AliForwardUtil.cxx:1549
 AliForwardUtil.cxx:1550
 AliForwardUtil.cxx:1551
 AliForwardUtil.cxx:1552
 AliForwardUtil.cxx:1553
 AliForwardUtil.cxx:1554
 AliForwardUtil.cxx:1555
 AliForwardUtil.cxx:1556
 AliForwardUtil.cxx:1557
 AliForwardUtil.cxx:1558
 AliForwardUtil.cxx:1559
 AliForwardUtil.cxx:1560
 AliForwardUtil.cxx:1561
 AliForwardUtil.cxx:1562
 AliForwardUtil.cxx:1563
 AliForwardUtil.cxx:1564
 AliForwardUtil.cxx:1565
 AliForwardUtil.cxx:1566
 AliForwardUtil.cxx:1567
 AliForwardUtil.cxx:1568
 AliForwardUtil.cxx:1569
 AliForwardUtil.cxx:1570
 AliForwardUtil.cxx:1571
 AliForwardUtil.cxx:1572
 AliForwardUtil.cxx:1573
 AliForwardUtil.cxx:1574
 AliForwardUtil.cxx:1575
 AliForwardUtil.cxx:1576
 AliForwardUtil.cxx:1577
 AliForwardUtil.cxx:1578
 AliForwardUtil.cxx:1579
 AliForwardUtil.cxx:1580
 AliForwardUtil.cxx:1581
 AliForwardUtil.cxx:1582
 AliForwardUtil.cxx:1583
 AliForwardUtil.cxx:1584
 AliForwardUtil.cxx:1585
 AliForwardUtil.cxx:1586
 AliForwardUtil.cxx:1587
 AliForwardUtil.cxx:1588
 AliForwardUtil.cxx:1589
 AliForwardUtil.cxx:1590
 AliForwardUtil.cxx:1591
 AliForwardUtil.cxx:1592
 AliForwardUtil.cxx:1593
 AliForwardUtil.cxx:1594
 AliForwardUtil.cxx:1595
 AliForwardUtil.cxx:1596
 AliForwardUtil.cxx:1597
 AliForwardUtil.cxx:1598
 AliForwardUtil.cxx:1599
 AliForwardUtil.cxx:1600
 AliForwardUtil.cxx:1601
 AliForwardUtil.cxx:1602
 AliForwardUtil.cxx:1603
 AliForwardUtil.cxx:1604
 AliForwardUtil.cxx:1605
 AliForwardUtil.cxx:1606
 AliForwardUtil.cxx:1607
 AliForwardUtil.cxx:1608
 AliForwardUtil.cxx:1609
 AliForwardUtil.cxx:1610
 AliForwardUtil.cxx:1611
 AliForwardUtil.cxx:1612
 AliForwardUtil.cxx:1613
 AliForwardUtil.cxx:1614
 AliForwardUtil.cxx:1615
 AliForwardUtil.cxx:1616
 AliForwardUtil.cxx:1617
 AliForwardUtil.cxx:1618
 AliForwardUtil.cxx:1619
 AliForwardUtil.cxx:1620
 AliForwardUtil.cxx:1621
 AliForwardUtil.cxx:1622
 AliForwardUtil.cxx:1623
 AliForwardUtil.cxx:1624
 AliForwardUtil.cxx:1625
 AliForwardUtil.cxx:1626
 AliForwardUtil.cxx:1627
 AliForwardUtil.cxx:1628
 AliForwardUtil.cxx:1629
 AliForwardUtil.cxx:1630
 AliForwardUtil.cxx:1631
 AliForwardUtil.cxx:1632
 AliForwardUtil.cxx:1633
 AliForwardUtil.cxx:1634
 AliForwardUtil.cxx:1635
 AliForwardUtil.cxx:1636
 AliForwardUtil.cxx:1637
 AliForwardUtil.cxx:1638
 AliForwardUtil.cxx:1639
 AliForwardUtil.cxx:1640
 AliForwardUtil.cxx:1641
 AliForwardUtil.cxx:1642
 AliForwardUtil.cxx:1643
 AliForwardUtil.cxx:1644
 AliForwardUtil.cxx:1645
 AliForwardUtil.cxx:1646
 AliForwardUtil.cxx:1647
 AliForwardUtil.cxx:1648
 AliForwardUtil.cxx:1649
 AliForwardUtil.cxx:1650
 AliForwardUtil.cxx:1651
 AliForwardUtil.cxx:1652
 AliForwardUtil.cxx:1653
 AliForwardUtil.cxx:1654
 AliForwardUtil.cxx:1655
 AliForwardUtil.cxx:1656
 AliForwardUtil.cxx:1657
 AliForwardUtil.cxx:1658
 AliForwardUtil.cxx:1659
 AliForwardUtil.cxx:1660
 AliForwardUtil.cxx:1661
 AliForwardUtil.cxx:1662
 AliForwardUtil.cxx:1663
 AliForwardUtil.cxx:1664
 AliForwardUtil.cxx:1665
 AliForwardUtil.cxx:1666
 AliForwardUtil.cxx:1667
 AliForwardUtil.cxx:1668
 AliForwardUtil.cxx:1669
 AliForwardUtil.cxx:1670
 AliForwardUtil.cxx:1671
 AliForwardUtil.cxx:1672
 AliForwardUtil.cxx:1673
 AliForwardUtil.cxx:1674
 AliForwardUtil.cxx:1675
 AliForwardUtil.cxx:1676
 AliForwardUtil.cxx:1677
 AliForwardUtil.cxx:1678
 AliForwardUtil.cxx:1679
 AliForwardUtil.cxx:1680
 AliForwardUtil.cxx:1681
 AliForwardUtil.cxx:1682
 AliForwardUtil.cxx:1683
 AliForwardUtil.cxx:1684
 AliForwardUtil.cxx:1685
 AliForwardUtil.cxx:1686
 AliForwardUtil.cxx:1687
 AliForwardUtil.cxx:1688
 AliForwardUtil.cxx:1689
 AliForwardUtil.cxx:1690
 AliForwardUtil.cxx:1691
 AliForwardUtil.cxx:1692
 AliForwardUtil.cxx:1693
 AliForwardUtil.cxx:1694
 AliForwardUtil.cxx:1695
 AliForwardUtil.cxx:1696
 AliForwardUtil.cxx:1697
 AliForwardUtil.cxx:1698
 AliForwardUtil.cxx:1699
 AliForwardUtil.cxx:1700
 AliForwardUtil.cxx:1701
 AliForwardUtil.cxx:1702
 AliForwardUtil.cxx:1703
 AliForwardUtil.cxx:1704
 AliForwardUtil.cxx:1705
 AliForwardUtil.cxx:1706
 AliForwardUtil.cxx:1707
 AliForwardUtil.cxx:1708
 AliForwardUtil.cxx:1709
 AliForwardUtil.cxx:1710
 AliForwardUtil.cxx:1711
 AliForwardUtil.cxx:1712
 AliForwardUtil.cxx:1713
 AliForwardUtil.cxx:1714
 AliForwardUtil.cxx:1715
 AliForwardUtil.cxx:1716
 AliForwardUtil.cxx:1717
 AliForwardUtil.cxx:1718
 AliForwardUtil.cxx:1719
 AliForwardUtil.cxx:1720
 AliForwardUtil.cxx:1721
 AliForwardUtil.cxx:1722
 AliForwardUtil.cxx:1723
 AliForwardUtil.cxx:1724
 AliForwardUtil.cxx:1725
 AliForwardUtil.cxx:1726
 AliForwardUtil.cxx:1727
 AliForwardUtil.cxx:1728
 AliForwardUtil.cxx:1729
 AliForwardUtil.cxx:1730
 AliForwardUtil.cxx:1731
 AliForwardUtil.cxx:1732
 AliForwardUtil.cxx:1733
 AliForwardUtil.cxx:1734
 AliForwardUtil.cxx:1735
 AliForwardUtil.cxx:1736
 AliForwardUtil.cxx:1737
 AliForwardUtil.cxx:1738
 AliForwardUtil.cxx:1739
 AliForwardUtil.cxx:1740
 AliForwardUtil.cxx:1741
 AliForwardUtil.cxx:1742
 AliForwardUtil.cxx:1743
 AliForwardUtil.cxx:1744
 AliForwardUtil.cxx:1745
 AliForwardUtil.cxx:1746
 AliForwardUtil.cxx:1747
 AliForwardUtil.cxx:1748
 AliForwardUtil.cxx:1749
 AliForwardUtil.cxx:1750
 AliForwardUtil.cxx:1751
 AliForwardUtil.cxx:1752
 AliForwardUtil.cxx:1753
 AliForwardUtil.cxx:1754
 AliForwardUtil.cxx:1755
 AliForwardUtil.cxx:1756
 AliForwardUtil.cxx:1757
 AliForwardUtil.cxx:1758
 AliForwardUtil.cxx:1759
 AliForwardUtil.cxx:1760
 AliForwardUtil.cxx:1761
 AliForwardUtil.cxx:1762
 AliForwardUtil.cxx:1763
 AliForwardUtil.cxx:1764
 AliForwardUtil.cxx:1765
 AliForwardUtil.cxx:1766
 AliForwardUtil.cxx:1767
 AliForwardUtil.cxx:1768
 AliForwardUtil.cxx:1769
 AliForwardUtil.cxx:1770
 AliForwardUtil.cxx:1771
 AliForwardUtil.cxx:1772
 AliForwardUtil.cxx:1773
 AliForwardUtil.cxx:1774
 AliForwardUtil.cxx:1775
 AliForwardUtil.cxx:1776
 AliForwardUtil.cxx:1777
 AliForwardUtil.cxx:1778
 AliForwardUtil.cxx:1779
 AliForwardUtil.cxx:1780
 AliForwardUtil.cxx:1781
 AliForwardUtil.cxx:1782
 AliForwardUtil.cxx:1783