ROOT logo
/**************************************************************************
 * Copyright(c) 2009-2011, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/
/* $Id$ */
///////////////////////////////////////////////////////////////////////////////////////////////
//                                                                                           //
// The line is defined by equations (1)                                                      //
// a0*z+a1*x-a0*a1=0 and                                                                     //
// b0*z+b1*y-b0*b1=0                                                                         //
// where x,y,z are NOT the lab axes but z is the lab axis along which the track              //
// has the largest lever arm and x,y are the remaining 2 axis in                             //
// the order of fgkAxisID[z][0], fgkAxisID[z][1]                                             //
// The parameters are fParams[kA0,kB0,kA1,kB1] and the axis chosen as the independent        //
// var. is fParAxis (i.e. if fParAxis==kZ, then a0=ax,b0=bx, a1=ay,b1=by)                    //
//                                                                                           //
//                                                                                           //
// The helix is defined by the equations (2)                                                 //
// X(t) = (dr+R)*cos(phi0) - (R+sum{dRi})*cos(t+phi0) + sum{dRi*cos(phi0+ti)}                //
// Y(t) = (dr+R)*sin(phi0) - (R+sum{dRi})*sin(t+phi0) + sum{dRi*sin(phi0+ti)}                //
// Z(t) = dz - (R+sum{dRi})*t*tg(dip) + sum{dRi*ti}*tg(dip)                                  //
// where dRi is the change of the radius due to the ELoss at parameter ti                    //
//                                                                                           //
// Author: ruben.shahoyan@cern.ch                                                            //
//                                                                                           //
///////////////////////////////////////////////////////////////////////////////////////////////

#include "AliITSTPArrayFit.h"
#include "AliExternalTrackParam.h"
#include "AliSymMatrix.h"
#include "AliLog.h"
#include "AliParamSolver.h"
#include "AliGeomManager.h"
#include "AliITSgeomTGeo.h"
#include "AliTracker.h"
#include <TRandom.h>
#include <TArrayD.h>

ClassImp(AliITSTPArrayFit)

const Int_t  AliITSTPArrayFit::fgkAxisID[3][3] = { 
  {AliITSTPArrayFit::kY,AliITSTPArrayFit::kZ,AliITSTPArrayFit::kX},
  {AliITSTPArrayFit::kZ,AliITSTPArrayFit::kX,AliITSTPArrayFit::kY},
  {AliITSTPArrayFit::kX,AliITSTPArrayFit::kY,AliITSTPArrayFit::kZ} };

const Int_t  AliITSTPArrayFit::fgkAxisCID[3][6] = { 
  {AliITSTPArrayFit::kYY,AliITSTPArrayFit::kYZ,AliITSTPArrayFit::kXY,
   AliITSTPArrayFit::kZZ,AliITSTPArrayFit::kXZ,AliITSTPArrayFit::kXX},
  //
  {AliITSTPArrayFit::kZZ,AliITSTPArrayFit::kXZ,AliITSTPArrayFit::kYZ,
   AliITSTPArrayFit::kXX,AliITSTPArrayFit::kYX,AliITSTPArrayFit::kYY},
  //
  {AliITSTPArrayFit::kXX,AliITSTPArrayFit::kXY,AliITSTPArrayFit::kXZ,
   AliITSTPArrayFit::kYY,AliITSTPArrayFit::kYZ,AliITSTPArrayFit::kZZ}
};
//

const Double_t AliITSTPArrayFit::fgkAlmostZero = 1E-55;
const Double_t AliITSTPArrayFit::fgkCQConv = 0.299792458e-3;// R = PT/Bz/fgkCQConv with GeV,kGauss,cm
const Double_t AliITSTPArrayFit::fgkZSpanITS[AliITSTPArrayFit::kMaxLrITS] = {
  36. ,14.1,14.1,  38., 22.2,29.7, 51.   ,43.1,48.9};

const Double_t AliITSTPArrayFit::fgkRLayITS[AliITSTPArrayFit::kMaxLrITS] = {
  2.94, 3.9,7.6, 11.04, 15.0,23.9, 29.44 ,38.0,43.0};

const Int_t    AliITSTPArrayFit::fgkPassivLrITS[3] = 
  {AliITSTPArrayFit::kLrBeamPime,AliITSTPArrayFit::kLrShield1,AliITSTPArrayFit::kLrShield2};

const Int_t    AliITSTPArrayFit::fgkActiveLrITS[6] = 
  {AliITSTPArrayFit::kLrSPD1,AliITSTPArrayFit::kLrSPD2,
   AliITSTPArrayFit::kLrSDD1,AliITSTPArrayFit::kLrSDD2,
   AliITSTPArrayFit::kLrSSD1,AliITSTPArrayFit::kLrSSD2};

Double_t AliITSTPArrayFit::fgRhoLITS[AliITSTPArrayFit::kMaxLrITS] = {
  1.48e-01, 2.48e-01,2.57e-01, 1.34e-01, 3.34e-01,3.50e-01, 2.22e-01, 2.38e-01,2.25e-01};

//____________________________________________________
AliITSTPArrayFit::AliITSTPArrayFit() :
  fkPoints(0),fParSol(0),fBz(0),fCharge(0),fPntFirst(-1),
  fPntLast(-1),fNPBooked(0),fParAxis(-1),fCovI(0),fChi2NDF(0),
  fMaxIter(20),fIter(0),fEps(1e-6),fMass(0),fSwitch2Line(kFALSE),fMaxRforHelix(6.e5),
  fkAxID(0),fkAxCID(0),fCurT(0),
  fFirstPosT(0),fNElsPnt(0),fElsId(0),fElsDR(0)
{
  // default constructor
  for (int i=kMaxParam;i--;)   fParams[i] = 0;
  for (int i=kMaxParamSq;i--;) fParamsCov[i] = 0;
  SetMass();
}

//____________________________________________________
AliITSTPArrayFit::AliITSTPArrayFit(Int_t np) :
  fkPoints(0),fParSol(0),fBz(0),fCharge(0),fPntFirst(-1),
  fPntLast(-1),fNPBooked(np),fParAxis(-1),fCovI(0),fChi2NDF(0),
  fMaxIter(20),fIter(0),fEps(1e-6),fMass(0),fSwitch2Line(kFALSE),fMaxRforHelix(6.e5),
  fkAxID(0),fkAxCID(0),fCurT(0),fFirstPosT(0),fNElsPnt(0),fElsId(0),fElsDR(0)
{
  // constructor with booking of np points
  for (int i=kMaxParam;i--;)   fParams[i] = 0;
  for (int i=kMaxParamSq;i--;) fParamsCov[i] = 0;
  InitAux();
  SetEps();
  SetMass();
  SetMaxIterations();
}

//____________________________________________________
AliITSTPArrayFit::AliITSTPArrayFit(const AliITSTPArrayFit &src) : 
  TObject(src),fkPoints(src.fkPoints),fParSol(0),fBz(src.fBz),
  fCharge(src.fCharge),fPntFirst(src.fPntFirst),fPntLast(src.fPntLast),fNPBooked(src.fNPBooked),
  fParAxis(src.fParAxis),fCovI(0),fChi2NDF(0),fMaxIter(20),fIter(0),fEps(0),fMass(src.fMass),
  fSwitch2Line(src.fSwitch2Line),fMaxRforHelix(src.fMaxRforHelix),fkAxID(0),fkAxCID(0),fCurT(0),
  fFirstPosT(0),fNElsPnt(0),fElsId(0),fElsDR(0)
{
  // copy constructor
  InitAux();
  memcpy(fCovI,src.fCovI,fNPBooked*kNCov*sizeof(Double_t));
  for (int i=kMaxParam;i--;)   fParams[i] = src.fParams[i];
  for (int i=kMaxParamSq;i--;) fParamsCov[i] = src.fParamsCov[i];
  memcpy(fCurT,src.fCurT,fNPBooked*sizeof(Double_t));
  SetEps(src.fEps);
  SetMaxIterations(src.fMaxIter);
  //  
}

//____________________________________________________
AliITSTPArrayFit &AliITSTPArrayFit::operator =(const AliITSTPArrayFit& src)
{
  // assignment operator
  if (this==&src) return *this;
  ((TObject*)this)->operator=(src);
  fkPoints   = src.fkPoints;
  if (!fParSol) fParSol = new AliParamSolver(*src.fParSol);
  else *fParSol = *src.fParSol; 
  fBz       = src.fBz; 
  fCharge   = src.fCharge;
  fNPBooked = src.fNPBooked;
  fPntFirst = src.fPntFirst;
  fPntLast  = src.fPntLast;
  InitAux();
  memcpy(fCovI,src.fCovI,fNPBooked*kNCov*sizeof(Double_t));
  for (int i=kMaxParam;i--;)   fParams[i] = src.fParams[i];
  for (int i=kMaxParamSq;i--;) fParamsCov[i] = src.fParamsCov[i];
  SetParAxis(src.fParAxis);
  fNElsPnt   = src.fNElsPnt;
  fFirstPosT = src.fFirstPosT;
  memcpy(fCurT  ,src.fCurT  ,fNPBooked*sizeof(Double_t));
  memcpy(fElsId ,src.fElsId ,fNPBooked*sizeof(Int_t));
  memcpy(fElsDR ,src.fElsDR ,fNPBooked*sizeof(Double_t));
  memcpy(fCurT  ,src.fCurT  ,fNPBooked*sizeof(Double_t));
  SetEps(src.fEps);
  SetMaxIterations(src.fMaxIter);
  //
  return *this;
  //
}

//____________________________________________________
AliITSTPArrayFit::~AliITSTPArrayFit()
{
  // destructor
  delete   fParSol;
  delete[] fCovI;
  delete[] fCurT;
  delete[] fElsId;
  delete[] fElsDR;
}

//____________________________________________________
void AliITSTPArrayFit::Reset()
{
  // reset to process new track
  if (fParSol) fParSol->Clear();
  fkPoints=0; 
  fNElsPnt = 0;
  fFirstPosT = 0;
  //  fBz = 0;
  fCharge = 0;
  fIter = 0;
  fPntFirst=fPntLast=-1; 
  SetParAxis(-1);
  fSwitch2Line = kFALSE;
  ResetBit(kFitDoneBit|kCovInvBit);
}

//____________________________________________________
void AliITSTPArrayFit::AttachPoints(const AliTrackPointArray* points, Int_t pfirst,Int_t plast) 
{
  // create from piece of AliTrackPointArray
  Reset();
  fkPoints = points;
  int np = points->GetNPoints();
  if (fNPBooked<np) {
    fNPBooked = np;
    InitAux();
  }
  fPntFirst = pfirst<0 ? 0 : pfirst;
  fPntLast  = plast<fPntFirst ? np-1 : plast;
  //
  for (int i=kMaxParam;i--;)   fParams[i] = 0;
  for (int i=kMaxParamSq;i--;) fParamsCov[i] = 0;
  //
  InvertPointsCovMat();
  ResetCovIScale();
  //
}

//____________________________________________________
Bool_t AliITSTPArrayFit::SetFirstLast(Int_t pfirst,Int_t plast) 
{
  // set first and last point to fit
  const AliTrackPointArray* pnts = fkPoints;
  if (!pnts) {AliError("TrackPointArray is not attached yet"); return kFALSE;}
  AttachPoints(pnts,pfirst,plast);
  return kTRUE;
  //
}

//____________________________________________________
Bool_t AliITSTPArrayFit::InvertPointsCovMat()
{
  // invert the cov.matrices of the points
  for (int i=fPntFirst;i<=fPntLast;i++) {
    //
    float *cov = (float*)fkPoints->GetCov() + i*6; // pointer on cov.matrix
    //
    Double_t t0 = cov[kYY]*cov[kZZ] - cov[kYZ]*cov[kYZ];
    Double_t t1 = cov[kXY]*cov[kZZ] - cov[kXZ]*cov[kYZ];
    Double_t t2 = cov[kXY]*cov[kYZ] - cov[kXZ]*cov[kYY];
    Double_t det = cov[kXX]*t0 - cov[kXY]*t1 + cov[kXZ]*t2;
    if (IsZero(det,1e-18)) { // one of errors is 0, fix this
      double norm[3];
      TGeoHMatrix hcov;
      TGeoRotation hrot,hrotI;
      GetNormal(norm,cov);
      double phi = TMath::ATan2(norm[1],norm[0]);
      hrot.SetAngles(-phi*TMath::RadToDeg(),0.,0.);
      hrotI.SetAngles(phi*TMath::RadToDeg(),0.,0.);
      //      
      Double_t hcovel[9];
      hcovel[0] = cov[kXX];
      hcovel[1] = cov[kXY];
      hcovel[2] = cov[kXZ];
      hcovel[3] = cov[kXY];
      hcovel[4] = cov[kYY];
      hcovel[5] = cov[kYZ];
      hcovel[6] = cov[kXZ];
      hcovel[7] = cov[kYZ];
      hcovel[8] = cov[kZZ];
      hcov.SetRotation(hcovel);
      //
      Double_t *hcovscl = hcov.GetRotationMatrix(); 
      //      printf(">> %+e %+e %+e\n   %+e %+e %+e\n   %+e %+e %+e\n\n",hcovscl[0],hcovscl[1],hcovscl[2],hcovscl[3],hcovscl[4],hcovscl[5],hcovscl[6],hcovscl[7],hcovscl[8]);
      //      printf("Rot by %+.e (%+.e %+.e %+.e)\n",phi, norm[0],norm[1],norm[2]);
      hcov.Multiply(&hrotI);
      hcov.MultiplyLeft(&hrot);
      //      printf("|| %+e %+e %+e\n   %+e %+e %+e\n   %+e %+e %+e\n\n",hcovscl[0],hcovscl[1],hcovscl[2],hcovscl[3],hcovscl[4],hcovscl[5],hcovscl[6],hcovscl[7],hcovscl[8]);
      if (hcovscl[0]<1e-8) hcovscl[0] = 1e-8;
      if (hcovscl[4]<1e-8) hcovscl[4] = 1e-8;
      if (hcovscl[8]<1e-8) hcovscl[8] = 1e-8;
      //      printf("** %+e %+e %+e\n   %+e %+e %+e\n   %+e %+e %+e\n\n",hcovscl[0],hcovscl[1],hcovscl[2],hcovscl[3],hcovscl[4],hcovscl[5],hcovscl[6],hcovscl[7],hcovscl[8]);
      hcov.Multiply(&hrot);
      hcov.MultiplyLeft(&hrotI);
      //      printf("^^ %+e %+e %+e\n   %+e %+e %+e\n   %+e %+e %+e\n\n",hcovscl[0],hcovscl[1],hcovscl[2],hcovscl[3],hcovscl[4],hcovscl[5],hcovscl[6],hcovscl[7],hcovscl[8]);
      cov[kXX] = hcovscl[0];
      cov[kXY] = hcovscl[1];
      cov[kXZ] = hcovscl[2];
      cov[kYY] = hcovscl[4];
      cov[kYZ] = hcovscl[5];
      cov[kZZ] = hcovscl[8];
    }
    t0 = cov[kYY]*cov[kZZ] - cov[kYZ]*cov[kYZ];
    t1 = cov[kXY]*cov[kZZ] - cov[kXZ]*cov[kYZ];
    t2 = cov[kXY]*cov[kYZ] - cov[kXZ]*cov[kYY];
    det = cov[kXX]*t0 - cov[kXY]*t1 + cov[kXZ]*t2;
    //
    AliDebug(2,Form("%+.4e %+.4e %+.4e -> %+.4e",t0,t1,t2,det));
    if (IsZero(det,fgkAlmostZero)) {
      AliInfo(Form("Cov.Matrix for point %d is singular",i));
      return kFALSE;
    }
    //
    Double_t *covI = GetCovI(i);
    covI[kXX] =  t0/det;
    covI[kXY] = -t1/det;
    covI[kXZ] =  t2/det;
    covI[kYY] =  (cov[kXX]*cov[kZZ] - cov[kXZ]*cov[kXZ])/det;
    covI[kYZ] =  (cov[kXY]*cov[kXZ] - cov[kXX]*cov[kYZ])/det;
    covI[kZZ] =  (cov[kXX]*cov[kYY] - cov[kXY]*cov[kXY])/det;
    //
  }
  SetCovInv();
  return kTRUE;
}

//____________________________________________________
void AliITSTPArrayFit::InitAux()
{
  // init auxiliary space
  if (fCovI) delete[] fCovI;
  if (fCurT) delete[] fCurT;
  //
  fCovI   = new Double_t[kNCov*fNPBooked];
  fCurT   = new Double_t[fNPBooked+kMaxLrITS];
  fElsId  = new Int_t[fNPBooked+kMaxLrITS];
  fElsDR  = new Double_t[fNPBooked+kMaxLrITS];
  memset(fElsDR,0,(fNPBooked+kMaxLrITS)*sizeof(Double_t));
  memset(fCovI,0,fNPBooked*kNCov*sizeof(Double_t));
  ResetCovIScale();
  //
}

//____________________________________________________
Bool_t AliITSTPArrayFit::FitLineCrude()
{
  // perform linear fit w/o accounting the errors
  // fit is done in the parameterization
  // x = res[0] + res[1]*z
  // y = res[2] + res[3]*z
  // where x,y,z are NOT the lab axes but z is the lab axis along which the track 
  // has the largest lever arm and x,y are the remaining 2 axis in 
  // the order of fgkAxisID[z][0], fgkAxisID[z][1]
  //
  int np = fPntLast - fPntFirst + 1;
  if (np<2) {
    AliError("At least 2 points are needed for straight line fit");
    return kFALSE;
  }
  //
  if (fParAxis<0) SetParAxis(ChoseParAxis());
  Double_t sZ=0,sZZ=0,sY=0,sYZ=0,sX=0,sXZ=0,det=0;
  //
  const float *coord[3] = {fkPoints->GetX(),fkPoints->GetY(),fkPoints->GetZ()};
  const Float_t *varZ = coord[ fParAxis  ];
  const Float_t *varX = coord[ fkAxID[kX] ];
  const Float_t *varY = coord[ fkAxID[kY] ];
  //
  for (int i=fPntFirst;i<=fPntLast;i++) {
    sZ  += varZ[i];
    sZZ += varZ[i]*varZ[i];
    //
    sX  += varX[i];
    sXZ += varX[i]*varZ[i];
    //
    sY  += varY[i];
    sYZ += varY[i]*varZ[i];
  }
  det = sZZ*np-sZ*sZ;
  if (TMath::Abs(det)<fgkAlmostZero) return kFALSE;
  fParams[0] = (sX*sZZ-sZ*sXZ)/det;
  fParams[1] = (sXZ*np-sZ*sX)/det;
  //
  fParams[2] = (sY*sZZ-sZ*sYZ)/det;
  fParams[3] = (sYZ*np-sZ*sY)/det;
  //
  return kTRUE;
  //
}

//____________________________________________________
void AliITSTPArrayFit::SetParAxis(Int_t ax)
{
  // select the axis which will be used as a parameter for the line: longest baseline
  if (ax>kZ) {
    AliInfo(Form("Wrong axis choice: %d",ax));
    fParAxis = -1;
  }
  fParAxis = ax;
  if (ax>=0) {
    fkAxID  = fgkAxisID[ax];
    fkAxCID = fgkAxisCID[ax];
  }
  else {
    fkAxID = fkAxCID = 0;
  }
  //
}

//____________________________________________________
Int_t AliITSTPArrayFit::ChoseParAxis() const
{
  // select the variable with largest base as a parameter
  Double_t cmn[3]={1.e9,1.e9,1.e9},cmx[3]={-1.e9,-1.e9,-1.e9};
  //
  const float *coord[3] = {fkPoints->GetX(),fkPoints->GetY(),fkPoints->GetZ()};
  for (int i=fPntFirst;i<=fPntLast;i++) {
    for (int j=3;j--;) {
      Double_t val = coord[j][i];
      if (cmn[j]>val) cmn[j] = val;
      if (cmx[j]<val) cmx[j] = val;
    }
  }
  //
  int axis = kZ;
  if (cmx[axis]-cmn[axis] < cmx[kX]-cmn[kX]) axis = kX;
  if (cmx[axis]-cmn[axis] < cmx[kY]-cmn[kY]) axis = kY;
  return axis;
  //
}

//____________________________________________________
Double_t AliITSTPArrayFit::GetPosition(Double_t *xyzPCA, const Double_t *xyz, const Double_t *covI, Double_t sclCovI) const
{
  // calculate the position of the track at PCA to xyz
  Double_t t = GetParPCA(xyz,covI,sclCovI);
  GetPosition(xyzPCA,t);
  return t;
}

//____________________________________________________
Double_t AliITSTPArrayFit::GetPosition(Double_t *xyzPCA, const AliTrackPoint *pntCovInv, Bool_t useErr) const
{
  // calculate the position of the track at PCA to pntCovInv
  // NOTE: the covariance matrix of the point must be inverted
  double t;
  double xyz[3] = {pntCovInv->GetX(),pntCovInv->GetY(),pntCovInv->GetZ()};
  if (useErr) {
    Double_t covI[6];;
    for (int i=6;i--;) covI[i] = pntCovInv->GetCov()[i];
    t = GetParPCA(xyz,covI);
  }
  else t = GetParPCA(xyz);
  GetPosition(xyzPCA,t);
  return t;
}

//____________________________________________________
void AliITSTPArrayFit::GetResiduals(Double_t *resPCA, const AliTrackPoint *pntCovInv, Bool_t useErr) const
{
  // calculate the residuals  of the track at PCA to pntCovInv
  // NOTE: the covariance matrix of the point must be inverted
  GetPosition(resPCA,pntCovInv,useErr);
  resPCA[0] -= pntCovInv->GetX();
  resPCA[1] -= pntCovInv->GetY();
  resPCA[2] -= pntCovInv->GetZ();
}

//____________________________________________________
void AliITSTPArrayFit::GetResiduals(Double_t *resPCA, const Double_t *xyz, const Double_t *covI, Double_t sclCovI) const
{
  // calculate the residuals of the track at PCA to xyz
  GetPosition(resPCA,xyz,covI,sclCovI);
  resPCA[kX] -= xyz[kX];
  resPCA[kY] -= xyz[kY];
  resPCA[kZ] -= xyz[kZ];
}

//____________________________________________________
Double_t AliITSTPArrayFit::GetParPCALine(const Double_t *xyz, const Double_t *covI/*, Double_t sclCovI*/) const
{
  // get parameter for the point with least weighted distance to the point
  //
  Double_t rhs,denom;
  Double_t dx = fParams[kA0]-xyz[ fkAxID[kX] ];
  Double_t dy = fParams[kA1]-xyz[ fkAxID[kY] ];
  Double_t dz =             -xyz[ fkAxID[kZ] ];
  //
  if (covI) {
    Double_t tx = fParams[kB0]*covI[ fkAxCID[kXX] ] + fParams[kB1]*covI[ fkAxCID[kXY] ] + covI[ fkAxCID[kXZ] ];
    Double_t ty = fParams[kB0]*covI[ fkAxCID[kXY] ] + fParams[kB1]*covI[ fkAxCID[kYY] ] + covI[ fkAxCID[kYZ] ];
    Double_t tz = fParams[kB0]*covI[ fkAxCID[kXZ] ] + fParams[kB1]*covI[ fkAxCID[kYZ] ] + covI[ fkAxCID[kZZ] ];
    rhs   = tx*dx + ty*dy + tz*dz;
    denom = -(fParams[kB0]*(covI[ fkAxCID[kXZ] ] + tx) + fParams[kB1]*(covI[ fkAxCID[kYZ] ] + ty) + covI[ fkAxCID[kZZ] ]);
  }
  else {
    rhs = fParams[kB0]*dx + fParams[kB1]*dy + dz;
    denom = -(fParams[kB0]*fParams[kB0] + fParams[kB1]*fParams[kB1] + 1);
  }
  //
  return rhs/denom;
  //
}

//____________________________________________________
void AliITSTPArrayFit::GetDResDPosLine(Double_t *dXYZdP, /*const Double_t *xyz,*/ const Double_t *covI/*,Double_t sclCovI*/) const
{
  // calculate detivative of the PCA residuals vs point position and fill in user provide
  // array in the format {dXdXp,dY/dXp,dZdXp, ... dXdZp,dYdZp,dZdZp}
  //
  Double_t dTdP[3];
  GetDtDPosLine(dTdP, /*xyz,*/ covI/*,sclCovI*/); // derivative of the t-param over point position
  //
  for (int i=3;i--;) {
    int var = fkAxID[i];
    Double_t *curd = dXYZdP + var*3;   // d/dCoord_i
    curd[ fkAxID[kX] ] = fParams[kB0]*dTdP[var];
    curd[ fkAxID[kY] ] = fParams[kB1]*dTdP[var];
    curd[ fkAxID[kZ] ] = dTdP[var];
    curd[    var     ]-= 1.;
  }
  //
}

//____________________________________________________
void AliITSTPArrayFit::GetDResDParamsLine(Double_t *dXYZdP, const Double_t *xyz, const Double_t *covI/*,Double_t sclCovI*/) const
{
  // calculate detivative of the PCA residuals vs line parameters and fill in user provide
  // array in the format {dXdP0,dYdP0,dZdP0, ... dXdPn,dYdPn,dZdPn}
  //
  Double_t dTdP[4];
  Double_t t = GetDtDParamsLine(dTdP, xyz, covI /*,sclCovI*/); // derivative of the t-param over line params
  //
  Double_t *curd = dXYZdP + kA0*3; // d/dA0
  curd[ fkAxID[kX] ] = fParams[kB0]*dTdP[kA0] + 1.;
  curd[ fkAxID[kY] ] = fParams[kB1]*dTdP[kA0];
  curd[ fkAxID[kZ] ] = dTdP[kA0];
  //
  curd = dXYZdP + kB0*3; // d/dB0
  curd[ fkAxID[kX] ] = fParams[kB0]*dTdP[kB0] + t;
  curd[ fkAxID[kY] ] = fParams[kB1]*dTdP[kB0];
  curd[ fkAxID[kZ] ] = dTdP[kB0];
  //
  curd = dXYZdP + kA1*3; // d/dA1
  curd[ fkAxID[kX] ] = fParams[kB0]*dTdP[kA1];
  curd[ fkAxID[kY] ] = fParams[kB1]*dTdP[kA1] + 1.;
  curd[ fkAxID[kZ] ] = dTdP[kA1];
  //
  curd = dXYZdP + kB1*3; // d/dB1
  curd[ fkAxID[kX] ] = fParams[kB0]*dTdP[kB1];
  curd[ fkAxID[kY] ] = fParams[kB1]*dTdP[kB1] + t;
  curd[ fkAxID[kZ] ] = dTdP[kB1];
  //
}

//____________________________________________________
Double_t AliITSTPArrayFit::GetDtDParamsLine(Double_t *dtparam,const Double_t *xyz, const Double_t *covI) const
{
  // get t-param detivative over the parameters for the point with least weighted distance to the point
  //
  Double_t rhs,denom;
  Double_t dx = fParams[kA0]-xyz[ fkAxID[kX] ];
  Double_t dy = fParams[kA1]-xyz[ fkAxID[kY] ];
  Double_t dz =             -xyz[ fkAxID[kZ] ];
  Double_t rhsDA0,rhsDA1,rhsDB0,rhsDB1,denDB0,denDB1;
  //
  if (covI) {
    Double_t tx = fParams[kB0]*covI[ fkAxCID[kXX] ] + fParams[kB1]*covI[ fkAxCID[kXY] ] + covI[ fkAxCID[kXZ] ];
    Double_t ty = fParams[kB0]*covI[ fkAxCID[kXY] ] + fParams[kB1]*covI[ fkAxCID[kYY] ] + covI[ fkAxCID[kYZ] ];
    Double_t tz = fParams[kB0]*covI[ fkAxCID[kXZ] ] + fParams[kB1]*covI[ fkAxCID[kYZ] ] + covI[ fkAxCID[kZZ] ];
    rhs = tx*dx + ty*dy + tz*dz;
    denom = -(fParams[kB0]*(covI[ fkAxCID[kXZ] ] + tx) + fParams[kB1]*(covI[ fkAxCID[kYZ] ] + ty) + covI[ fkAxCID[kZZ] ]);
    //
    rhsDA0 = tx;
    rhsDA1 = ty;
    rhsDB0 = covI[ fkAxCID[kXX] ]*dx + covI[ fkAxCID[kXY] ]*dy + covI[ fkAxCID[kXZ] ]*dz;
    rhsDB1 = covI[ fkAxCID[kXY] ]*dx + covI[ fkAxCID[kYY] ]*dy + covI[ fkAxCID[kYZ] ]*dz;
    //
    denDB0 = -(tx + tx);
    denDB1 = -(ty + ty);
  }
  else {
    rhs = fParams[kB0]*dx + fParams[kB1]*dy + dz;
    denom = -(fParams[kB0]*fParams[kB0]	+ fParams[kB1]*fParams[kB1] + 1);
    //
    rhsDA0 = fParams[kB0];
    rhsDB0 = dx;
    rhsDA1 = fParams[kB1];
    rhsDB1 = dy;
    //
    denDB0 = -(fParams[kB0]+fParams[kB0]);
    denDB1 = -(fParams[kB1]+fParams[kB1]);
    //
  }
  //
  Double_t denom2 = denom*denom;
  dtparam[kA0] = rhsDA0/denom;    // denom does not depend on A0,A1
  dtparam[kA1] = rhsDA1/denom;
  dtparam[kB0] = rhsDB0/denom - rhs/denom2 * denDB0;
  dtparam[kB1] = rhsDB1/denom - rhs/denom2 * denDB1;
  //
  return rhs/denom;
}

//____________________________________________________
void AliITSTPArrayFit::GetDtDPosLine(Double_t *dtpos,/*const Double_t *xyz,*/ const Double_t *covI) const
{
  // get t-param detivative over the parameters for the point with least weighted distance to the point
  //
  //  Double_t rhs;
  //  Double_t dx = fParams[kA0]-xyz[ fkAxID[kX] ];
  //  Double_t dy = fParams[kA1]-xyz[ fkAxID[kY] ];
  //  Double_t dz =             -xyz[ fkAxID[kZ] ];
  Double_t denom;
  Double_t rhsDX,rhsDY,rhsDZ;
  //
  if (covI) {
    Double_t tx = fParams[kB0]*covI[ fkAxCID[kXX] ] + fParams[kB1]*covI[ fkAxCID[kXY] ] + covI[ fkAxCID[kXZ] ];
    Double_t ty = fParams[kB0]*covI[ fkAxCID[kXY] ] + fParams[kB1]*covI[ fkAxCID[kYY] ] + covI[ fkAxCID[kYZ] ];
    Double_t tz = fParams[kB0]*covI[ fkAxCID[kXZ] ] + fParams[kB1]*covI[ fkAxCID[kYZ] ] + covI[ fkAxCID[kZZ] ];
    // rhs = tx*dx + ty*dy + tz*dz;
    denom = -(fParams[kB0]*(covI[ fkAxCID[kXZ] ] + tx) + fParams[kB1]*(covI[ fkAxCID[kYZ] ] + ty) + covI[ fkAxCID[kZZ] ]);
    //
    rhsDX = -tx;
    rhsDY = -ty;
    rhsDZ = -tz;
  }
  else {
    // rhs = fParams[kB0]*dx + fParams[kB1]*dy + dz;
    denom = -(fParams[kB0]*fParams[kB0]	+ fParams[kB1]*fParams[kB1] + 1);
    //
    rhsDX = -fParams[kB0];
    rhsDY = -fParams[kB1];
    rhsDZ = -1;
    //
  }
  //
  dtpos[ fkAxID[kX] ] = rhsDX/denom;
  dtpos[ fkAxID[kY] ] = rhsDY/denom;
  dtpos[ fkAxID[kZ] ] = rhsDZ/denom;
  //
  //  return rhs/denom;
}

//____________________________________________________
void AliITSTPArrayFit::GetDResDParamsLine(Double_t *dXYZdP, Int_t ipnt) const
{
  // calculate detivative of the PCA residuals vs line parameters and fill in user provide
  // array in the format {dXdP0,dYdP0,dZdP0, ... dXdPn,dYdPn,dZdPn}
  //
  if (ipnt<fPntFirst || ipnt>fPntLast) {
    AliError(Form("Attempt to access the point %d not in the fitted points [%d:%d]",ipnt,fPntFirst,fPntLast));
    return;
  }
  GetDResDParamsLine(dXYZdP, GetPoint(ipnt) , IsCovIgnored() ? 0 : GetCovI(ipnt));
}

//____________________________________________________
void AliITSTPArrayFit::GetDResDPosLine(Double_t *dXYZdP, Int_t ipnt) const
{
  // calculate detivative of the PCA residuals vs point position and fill in user provide
  // array in the format {dXdXp,dY/dXp,dZdXp, ... dXdZp,dYdZp,dZdZp}
  //
  if (ipnt<fPntFirst || ipnt>fPntLast) {
    AliError(Form("Attempt to access the point %d not in the fitted points [%d:%d]",ipnt,fPntFirst,fPntLast));
    return;
  }
  GetDResDPosLine(dXYZdP,IsCovIgnored() ? 0 : GetCovI(ipnt)/*,GetCovIScale(ipnt)*/);
}

//____________________________________________________
void AliITSTPArrayFit::GetDResDParams(Double_t *dXYZdP, Int_t ipnt)
{
  // calculate detivative of the PCA residuals vs track parameters and fill in user provide
  // array in the format {dXdP0,dYdP0,dZdP0, ... dXdPn,dYdPn,dZdPn}
  //
  if (ipnt<fPntFirst || ipnt>fPntLast) {
    AliError(Form("Attempt to access the point %d not in the fitted points [%d:%d]",ipnt,fPntFirst,fPntLast));
    return;
  }
  GetDResDParams(dXYZdP, GetPoint(ipnt) , IsCovIgnored() ? 0 : GetCovI(ipnt),GetCovIScale(ipnt));
}

//____________________________________________________
void AliITSTPArrayFit::GetDResDPos(Double_t *dXYZdP, Int_t ipnt)
{
  // calculate detivative of the PCA residuals vs point position and fill in user provide
  // array in the format {dXdXp,dY/dXp,dZdXp, ... dXdZp,dYdZp,dZdZp} 
  //
  if (ipnt<fPntFirst || ipnt>fPntLast) {
    AliError(Form("Attempt to access the point %d not in the fitted points [%d:%d]",ipnt,fPntFirst,fPntLast));
    return;
  }
  GetDResDPos(dXYZdP, GetPoint(ipnt), IsCovIgnored() ? 0 : GetCovI(ipnt), GetCovIScale(ipnt));
}

//____________________________________________________
void AliITSTPArrayFit::GetDResDParams(Double_t *dXYZdP, const Double_t *xyz, const Double_t *covI, Double_t sclCovI) 
{
  // get residual detivatives over the track parameters for the point with least weighted distance to the point
  //
  if (!IsHelix()) { // for the straight line calculate analytically
    GetDResDParamsLine(dXYZdP, xyz, covI /*,sclCovI*/);
    return;
  }
  //
  // calculate derivative numerically
  const Double_t delta = 0.01;
  Double_t xyzVar[4][3];
  //
  for (int ipar = 5;ipar--;) {
    double sav = fParams[ipar];
    fParams[ipar] -= delta;
    GetPosition(xyzVar[0],xyz,covI,sclCovI);
    fParams[ipar] += delta/2;
    GetPosition(xyzVar[1],xyz,covI,sclCovI);
    fParams[ipar] += delta;
    GetPosition(xyzVar[2],xyz,covI,sclCovI);
    fParams[ipar] += delta/2;
    GetPosition(xyzVar[3],xyz,covI,sclCovI);
    fParams[ipar] = sav;  // restore
    //
    double *curd = dXYZdP + 3*ipar;
    for (int i=3;i--;) curd[i] = (8.*(xyzVar[2][i]-xyzVar[1][i]) - (xyzVar[3][i]-xyzVar[0][i]))/6./delta;
  }
  //
}


//____________________________________________________
void AliITSTPArrayFit::GetDResDPos(Double_t *dXYZdP, const Double_t *xyz, const Double_t *covI,Double_t sclCovI) const
{
  // get residuals detivative over the point position for the point with least weighted distance to the point
  //

  if (!IsHelix()) { // for the straight line calculate analytically
    GetDResDPosLine(dXYZdP, /*xyz,*/ covI /*,sclCovI*/);
    return;
  }
  //
  // calculate derivative numerically
  const Double_t delta = 0.005;
  Double_t xyzVar[4][3];
  Double_t xyzv[3] = {xyz[0],xyz[1],xyz[2]};
  //
  for (int ipar = 3;ipar--;) {
    double sav = xyzv[ipar];
    xyzv[ipar] -= delta;
    GetPosition(xyzVar[0],xyzv,covI,sclCovI);
    xyzv[ipar] += delta/2;
    GetPosition(xyzVar[1],xyzv,covI,sclCovI);
    xyzv[ipar] += delta;
    GetPosition(xyzVar[2],xyzv,covI,sclCovI);
    xyzv[ipar] += delta/2;
    GetPosition(xyzVar[3],xyzv,covI,sclCovI);
    xyzv[ipar] = sav;  // restore
    //
    double *curd = dXYZdP + 3*ipar;
    for (int i=3;i--;) curd[i] = (8.*(xyzVar[2][i]-xyzVar[1][i]) - (xyzVar[3][i]-xyzVar[0][i]))/6./delta;
    curd[ipar] -= 1.;
  }
  //
}

//________________________________________________________________________________________________________
Double_t AliITSTPArrayFit::GetParPCAHelix(const Double_t* xyz, const Double_t* covI,Double_t sclCovI) const
{
  // find track parameter t (eq.2) corresponding to point of closest approach to xyz
  //
  Double_t phi  = GetParPCACircle(xyz[kX],xyz[kY]); 
  Double_t cs = TMath::Cos(fParams[kPhi0]);
  Double_t sn = TMath::Sin(fParams[kPhi0]);
  Double_t xc = (fParams[kD0]+fParams[kR0])*cs;
  Double_t yc = (fParams[kD0]+fParams[kR0])*sn;
  Double_t dchi2,ddchi2;
  //
  Double_t dzD  = -fParams[kR0]*fParams[kDip];
  Double_t dphi = 0;
  //
  double rEps = 1e-5/TMath::Abs(fParams[kR0]); // dphi corresponding to 0.1 micron
  if (rEps>fEps) rEps = fEps;
  //
  int it=0;
  do {
    cs = TMath::Cos(phi + fParams[kPhi0]);
    sn = TMath::Sin(phi + fParams[kPhi0]);
    //
    Double_t dxD  =  fParams[kR0]*sn;
    Double_t dyD  = -fParams[kR0]*cs;
    Double_t dxDD = -dyD;
    Double_t dyDD =  dxD;
    //
    Double_t dx   = xc - fParams[kR0]*cs - xyz[kX];
    Double_t dy   = yc - fParams[kR0]*sn - xyz[kY];
    Double_t dz   = fParams[kDZ] + dzD*phi- xyz[kZ];
    //
    if (covI) {
      Double_t tx = dx*covI[kXX] + dy*covI[kXY] + dz*covI[kXZ];
      Double_t ty = dx*covI[kXY] + dy*covI[kYY] + dz*covI[kYZ];
      Double_t tz = dx*covI[kXZ] + dy*covI[kYZ] + dz*covI[kZZ];
      //
      Double_t ttx = dxD*covI[kXX] + dyD*covI[kXY] + dzD*covI[kXZ];
      Double_t tty = dxD*covI[kXY] + dyD*covI[kYY] + dzD*covI[kYZ];
      Double_t ttz = dxD*covI[kXZ] + dyD*covI[kYZ] + dzD*covI[kZZ];
      //
      // chi2   = dx*tx + dy*ty + dz*tz;
      dchi2  = dxD*tx  + dyD*ty  + dzD*tz;
      ddchi2 = dxDD*tx + dyDD*ty           + dxD *ttx + dyD *tty + dzD *ttz;
      //
      if (sclCovI>0) {dchi2 *= sclCovI; ddchi2 *= sclCovI;}
    }
    else {
      // chi2   = dx*dx + dy*dy + dz*dz;
      dchi2  = dxD*dx  + dyD*dy  + dzD*dz;
      ddchi2 = dxDD*dx + dyDD*dy +         + dxD*dxD + dyD*dyD + dzD*dzD;
    }
    //
    if (TMath::Abs(ddchi2)<fgkAlmostZero || TMath::Abs(dphi=dchi2/ddchi2)<rEps) break;
    phi -= dphi;    
  } while(++it<fMaxIter);

  //
  return phi;
}

//________________________________________________________________________________________________________
Double_t AliITSTPArrayFit::GetParPCACircle(Double_t x,Double_t y)  const
{
  // find track parameter t (eq.2) corresponding to point on the circle with closest approach to x,y
  //
  Double_t r = fParams[kD0]+fParams[kR0];
  Double_t t = TMath::ATan2( r*TMath::Sin(fParams[kPhi0])-y, r*TMath::Cos(fParams[kPhi0])-x ) - fParams[kPhi0]; 
  if (fParams[kR0] < 0) t += TMath::Pi();
  if (t > TMath::Pi())  t -= TMath::Pi()*2;
  if (t <-TMath::Pi())  t += TMath::Pi()*2;
  return t;
}

//________________________________________________________________________________________________________
Double_t AliITSTPArrayFit::GetHelixParAtR(Double_t r)  const
{
  // find helix parameter t (eq.2) corresponding to point on the circle of radius t
  //
  double gam = 1. - (r-fParams[kD0])*(r+fParams[kD0])/fParams[kR0]/(fParams[kD0]+fParams[kR0])/2.;
  return (TMath::Abs(gam)>1) ?  -1e9 : TMath::ACos(gam);
}

//________________________________________________________________________________________________________
Double_t AliITSTPArrayFit::CalcChi2NDF() const
{
  // calculate fit chi2/ndf
  Double_t chi2 = 0;
  Double_t dr[3]; // residuals
  //if (!IsFitDone()) return -1;
  for (int ipnt=fPntFirst;ipnt<=fPntLast;ipnt++) {
    GetResiduals(dr,ipnt);
    Double_t* covI = GetCovI(ipnt);
    Double_t chi2p = dr[kX]*(dr[kX]*covI[ kXX ]+dr[kY]*covI[ kXY ]+dr[kZ]*covI[ kXZ ])
      +              dr[kY]*(dr[kX]*covI[ kXY ]+dr[kY]*covI[ kYY ]+dr[kZ]*covI[ kYZ ])
      +              dr[kZ]*(dr[kX]*covI[ kXZ ]+dr[kY]*covI[ kYZ ]+dr[kZ]*covI[ kZZ ]);
    if (covI[kScl]>0) chi2p *= covI[kScl]; // rescaling was requested for this point's errors
    chi2 += chi2p;
  }
  int ndf = (fPntLast-fPntFirst+1)*3 - GetNParams();
  chi2 /= ndf;
  return chi2;
}

//________________________________________________________________________________________________________
void AliITSTPArrayFit::GetResiduals(Double_t *res,Int_t ipnt) const
{
  // calculate residuals at point
  if (ipnt<fPntFirst || ipnt>fPntLast) {
    AliError(Form("Attempt to access the point %d not in the fitted points [%d:%d]",ipnt,fPntFirst,fPntLast));
    return;
  }
  GetPosition(res,fCurT[ipnt]);
  res[kX] -= fkPoints->GetX()[ipnt];
  res[kY] -= fkPoints->GetY()[ipnt];
  res[kZ] -= fkPoints->GetZ()[ipnt];
}

//________________________________________________________________________________________________________
void AliITSTPArrayFit::GetPosition(Double_t *xyz, Double_t t) const
{
  // calculate track position for parameter value t
  if (IsHelix()) {
    //
    Double_t rrho = fParams[kD0]+fParams[kR0];
    Double_t xc = rrho*TMath::Cos(fParams[kPhi0]);
    Double_t yc = rrho*TMath::Sin(fParams[kPhi0]);
    Double_t r  = fParams[kR0];
    Double_t ze = 0;
    //
    if (IsELossON()) {
      if (t>0) {
	for (int i=fFirstPosT;i<fNElsPnt;i++) { // along the track direction
	  int indE = fElsId[i];
	  if ( t<fCurT[indE] ) break;       // does not reach this layer on  its way to t 
	  xc += fElsDR[indE] * TMath::Cos(fParams[kPhi0] + fCurT[indE]);
	  yc += fElsDR[indE] * TMath::Sin(fParams[kPhi0] + fCurT[indE]);
	  ze += fElsDR[indE] * fCurT[indE];
	  r  += fElsDR[indE];
	  //printf("ELoss@ %+.2e r:%+.3e got %+.3e\n",fCurT[indE],r,fElsDR[indE]);
	}
      }	else {
	for (int i=fFirstPosT;i--;) { // against the track direction
	  int indE = fElsId[i];
	  if ( t>=fCurT[indE] ) break;       // does not reach this layer on  its way to t 
	  xc += fElsDR[indE] * TMath::Cos(fParams[kPhi0] + fCurT[indE]);
	  yc += fElsDR[indE] * TMath::Sin(fParams[kPhi0] + fCurT[indE]);
	  ze += fElsDR[indE] * fCurT[indE];
	  r  += fElsDR[indE];
	  //printf("ELoss@ %+.2e r:%+.3e got %+.3e\n",fCurT[indE],r,fElsDR[indE]);
	}     
      }
    }
    //
    xyz[kZ] = fParams[kDZ] - fParams[kDip]*(t*r - ze);
    //
    t += fParams[kPhi0];    
    xyz[kX] = xc - r*TMath::Cos(t);
    xyz[kY] = yc - r*TMath::Sin(t);
    //    printf("t: %+.3e xyz:%+.2e %+.2e %+.2e | R %+.6e -> %+.6e | sign %d\n",t-fParams[kPhi0],xyz[0],xyz[1],xyz[2],fParams[kR0],r,GetSignQB());
  }
  else {
    xyz[ fkAxID[kX] ] = fParams[kA0] + fParams[kB0]*t;
    xyz[ fkAxID[kY] ] = fParams[kA1] + fParams[kB1]*t;
    xyz[ fParAxis   ] = t;
  }
}

//________________________________________________________________________________________________________
void AliITSTPArrayFit::GetDirCos(Double_t *dircos, Double_t t) const
{
  // calculate track direction cosines for parameter value t
  if (IsHelix()) {
    dircos[kZ] = -fParams[kDip];
    t += fParams[kPhi0];    
    dircos[kX] = TMath::Sin(t);
    dircos[kY] =-TMath::Cos(t);
    double gam = TMath::Sign(1/TMath::Sqrt(dircos[kZ]*dircos[kZ]+dircos[kY]*dircos[kY]+dircos[kX]*dircos[kX]),fParams[kR0]);
    for (int i=3;i--;) dircos[i] *= gam;
    if (GetSignQB()>0) for (int i=3;i--;) dircos[i] = -dircos[i]; // positive tracks move along decreasing t
  }
  else {
    double gam = 1/TMath::Sqrt( fParams[kB0]*fParams[kB0] + fParams[kB1]*fParams[kB1] + 1.);
    dircos[ fkAxID[kX] ] = fParams[kB0]*gam;
    dircos[ fkAxID[kY] ] = fParams[kB1]*gam;
    dircos[ fParAxis   ] = gam;
    // decide direction
    if (IsTypeCollision()) {
      static double xyzF[3],xyzL[3];
      GetPosition(xyzF,fPntFirst);
      GetPosition(xyzL,fPntLast);
      double dif = fCurT[fPntLast] - fCurT[fPntFirst];
      double dr = (xyzL[kX]-xyzF[kX])*(xyzL[kX]+xyzF[kX]) + (xyzL[kY]-xyzF[kY])*(xyzL[kY]+xyzF[kY]);
      if (dr*dif<0) for (int i=3;i--;) dircos[i] = -dircos[i]; // with increasing t the tracks comes closer to origin
    }
    else if (dircos[kY]>0) for (int i=3;i--;) dircos[i] = -dircos[i];  // cosmic tracks have negative angle to Y axis
  }
  //
}

//________________________________________________________________________________________________________
Double_t AliITSTPArrayFit::GetMachinePrec()
{
  // estimate machine precision
  Double_t eps=1.0,a;
  do { a = 1. + (eps=eps/2.0); } while(a>1.);
  return TMath::Abs(2.*eps);
}

//________________________________________________________________________________________________________
Bool_t AliITSTPArrayFit::FitHelixCrude(Int_t extQ)
{
  // crude estimate of helix parameters, w/o errors and Eloss.
  // Fast Riemann fit: Comp.Phy.Comm.131 (2000) 95
  //
  // if charge is not imposed (extQ==0) then it will be determined from the collision type
  //
  static TArrayD arrU,arrV,arrW;
  double *parrW,*parrU,*parrV;
  Bool_t eloss = IsELossON();
  //
  int np = fPntLast - fPntFirst + 1;
  if (np<3) { AliError("At least 3 points are needed for helix fit"); return kFALSE; }
  //
  const float *x=fkPoints->GetX(),*y=fkPoints->GetY(),*z=fkPoints->GetZ(),*cov=fkPoints->GetCov();
  //
  if (fPntLast>=arrU.GetSize()) {
    arrU.Set(2*fPntLast);
    arrV.Set(2*fPntLast);
    arrW.Set(2*fPntLast);
  }
  parrU = arrU.GetArray();
  parrV = arrV.GetArray();
  parrW = arrW.GetArray();
  //
  double uav=0,vav=0,wav=0,muu=0,muv=0,muw=0,mvv=0,mvw=0,mww=0;
  int minRId = fPntFirst;
  //  
  // get points span
  double xmn=1e9,xmx=-1e9, ymn=1e9,ymx=-1e9;
  for (int i=fPntFirst;i<=fPntLast;i++) {
    parrW[i] = x[i]*x[i]+y[i]*y[i];
    if (parrW[i]<parrW[minRId]) minRId = i; // point closest to origin
    if (xmn>x[i]) xmn = x[i];
    if (xmx<x[i]) xmx = x[i];
    if (ymn>y[i]) ymn = y[i];
    if (ymx<y[i]) ymx = y[i];
  }
  int minRId1 = minRId>fPntFirst ? fPntFirst:fPntFirst+1;
  for (int i=fPntFirst;i<=fPntLast;i++) if (parrW[i]<parrW[minRId1] && i!=minRId) minRId1 = i; 
  //
  double xshift = (xmx+xmn)/2 + 10*(ymx-ymn); // shift origin to have uniform weights
  double yshift = (ymx+ymn)/2 - 10*(xmx-xmn);
  //  printf("X: %+e %+e Y: %+e %+e | shift: %+e %+e\n",xmn,xmx,ymn,ymx,xshift,yshift);
  //
  for (int i=fPntFirst;i<=fPntLast;i++) {
    double xs = x[i] - xshift;
    double ys = y[i] - yshift;
    double w = xs*xs + ys*ys;
    double scl = 1./(1.+w);
    int i0 = i-fPntFirst;
    wav += parrW[i0] = w*scl;
    uav += parrU[i0] = xs*scl;
    vav += parrV[i0] = ys*scl;
  }
  uav /= np;    vav /= np;   wav /= np;
  //
  for (int i=fPntFirst;i<=fPntLast;i++) {
    //
    // point next to closest
    int i0 = i-fPntFirst;
    if (parrW[i0]<parrW[minRId1-fPntFirst] && i!=minRId) minRId1 = i; 
    double u = parrU[i0] - uav;
    double v = parrV[i0] - vav;
    double w = parrW[i0] - wav;
    muu += u*u;
    muv += u*v;
    muw += u*w;
    mvv += v*v;
    mvw += v*w;
    mww += w*w;
  } 
  muu/=np; muv/=np; muw/=np; mvv/=np; mvw/=np; mww/=np;
  //
  // find eigenvalues:
  double trace3 = (muu + mvv + mww)/3.;
  double muut = muu-trace3;
  double mvvt = mvv-trace3;
  double mwwt = mww-trace3;
  double q = (muut*(mvvt*mwwt-mvw*mvw) - muv*(muv*mwwt-mvw*muw) + muw*(muv*mvw-mvvt*muw))/2;
  double p = (muut*muut+mvvt*mvvt+mwwt*mwwt+2*(muv*muv+muw*muw+mvw*mvw))/6;
  double dfpp = p*p*p-q*q;
  dfpp = dfpp>0 ? TMath::Sqrt(dfpp)/q : 0;
  double ph = TMath::ATan( dfpp )/3.;
  if (ph<0) ph += TMath::Pi()/3;
  p = p>0 ? TMath::Sqrt(p) : 0;
  const double kSqrt3 = 1.73205080;
  double snp = TMath::Sin(ph);
  double csp = TMath::Cos(ph);
  //  double eg1 = trace3 + 2*p*csp;
  double eg2 = trace3 - p*(csp+kSqrt3*snp); // smallest one
  //  double eg3 = trace3 - p*(csp-kSqrt3*snp);
  // eigenvector for min.eigenvalue
  muut = muu-eg2;
  mvvt = mvv-eg2;
  mwwt = mww-eg2;
  double n0 = muv*mvw-muw*mvvt;
  double n1 = muv*muw-mvw*muut;
  double n2 = muut*mvvt-muv*muv;
  // normalize to largest one
  double nrm = TMath::Abs(n0);
  if (nrm<TMath::Abs(n1)) nrm = TMath::Abs(n1);
  if (nrm<TMath::Abs(n2)) nrm = TMath::Abs(n2);
  n0/=nrm; n1/=nrm; n2/=nrm;
  //
  double cpar = -(uav*n0 + vav*n1 + wav*n2);
  double xc = -n0/(cpar+n2)/2 + xshift;
  double yc = -n1/(cpar+n2)/2 + yshift;
  double rad = TMath::Sqrt(n0*n0+n1*n1-4*cpar*(cpar+n2))/2./TMath::Abs(cpar+n2);
  //
  //  printf("Rad: %+e xc: %+e yc: %+e | X0: %+e Y0: %+e | X1: %+e Y1: %+e\n",rad,xc,yc, x[minRId],y[minRId],x[minRId1],y[minRId1]);

  // linear circle fit --------------------------------------------------- <<<
  //
  // decide sign(Q*B) and fill cicrle parameters ------------------------- >>>
  int sqb;
  if (extQ) {
    SetCharge(extQ); 
    sqb = fBz<0 ? -GetCharge():GetCharge();
  }
  else { 
    // determine the charge from the collision type and field sign
    // the negative Q*B will have positive Vc x dir product Z component
    // with Vc={-xc,-yc} : vector from circle center to the origin
    // and V0 - track direction vector (take {0,-1,1} for cosmics)
    // If Bz is not provided, assume positive Bz
    if ( IsTypeCosmics() ) sqb = xc>0 ? -1:1;
    else {
      // track direction vector as a - diference between the closest and the next to closest to origin points
      double v0X = x[minRId1] - x[minRId];
      double v0Y = y[minRId1] - y[minRId];
      sqb = (yc*v0X - xc*v0Y)>0 ? -1:1;
    }
    SetCharge( fBz<0 ? -sqb : sqb);
  }
  //
  Double_t phi = TMath::ATan2(yc,xc);
  if (sqb<0) phi += TMath::Pi();
  if      (phi > TMath::Pi()) phi -= 2.*TMath::Pi();
  else if (phi <-TMath::Pi()) phi += 2.*TMath::Pi();
  fParams[kPhi0] = phi;  
  fParams[kR0]   = sqb<0 ? -rad:rad;  
  fParams[kD0] = xc*TMath::Cos(phi) + yc*TMath::Sin(phi) - fParams[kR0];
  //
  // decide sign(Q*B) and fill cicrle parameters ------------------------- <<<
  //
  // find z-offset and dip + the parameter t of closest approach to hits - >>>
  //
  UInt_t hitLrPos=0;  // pattern of hit layers at pos
  UInt_t hitLrNeg=0;  // and negative t's

  Double_t ss=0,st=0,sz=0,stt=0,szt=0;
  for (int i=fPntFirst;i<=fPntLast;i++) {
    //
    Double_t ze2 = cov[i*6 + kZZ];
    Double_t t = TMath::ATan2(yc-y[i],xc-x[i]) - fParams[kPhi0]; // angle at measured z
    if (fParams[kR0]<0)  t += TMath::Pi();
    if      (t > TMath::Pi()) t -= TMath::Pi()*2;
    else if (t <-TMath::Pi()) t += TMath::Pi()*2;
    if (ze2<fgkAlmostZero) ze2 = 1E-8;
    ze2 = 1./ze2;
    ss += ze2;
    st += t*ze2;
    stt+= t*t*ze2;
    sz += z[i]*ze2;
    szt+= z[i]*t*ze2;
    //
    fCurT[i] = t; // parameter of the closest approach to the point
    //    printf("%d %+e %+e %+e %+e\n",i,x[i],y[i],z[i],t);
    if (eloss) {
      double r = TMath::Sqrt(x[i]*x[i]+y[i]*y[i]);
      int lr;
      for (lr=kMaxLrITS;lr--;) if ( IsZero(r-fgkRLayITS[ lr ],1.) ) break;
      if (lr<kMaxLrITS) {
	if (t>0) hitLrPos |= (1<<lr);  // set bit of the layer
	else     hitLrNeg |= (1<<lr);  // set bit of the layer
      }
    }
  }
  double det = ss*stt - st*st;
  if (TMath::Abs(det)<fgkAlmostZero) { // no Z dependence
    fParams[kDZ]  = sz/ss;
    fParams[kDip] = 0;
  }
  else {
    fParams[kDZ]  =  (sz*stt-st*szt)/det;
    fParams[kDip] = -(ss*szt-st*sz)/det/fParams[kR0];
  }
  //
  // find z-offset and dip + the parameter t of closest approach to hits - <<<
  //
  // fill info needed to account for ELoss ------------------------------- >>>
  if (eloss) {
    fNElsPnt = fPntLast - fPntFirst + 1;
    //
    // to account for the energy loss in the passive volumes, calculate the relevant t-parameters 
    double* tcur = fCurT + fPntFirst;
    double* ecur = fElsDR+ fPntFirst;
    //
    for (int ilp=3;ilp--;) {
      int id = fgkPassivLrITS[ilp];
      double tp = GetHelixParAtR( fgkRLayITS[ id ] );
      if (tp<0) continue; // does not hit this radius
      //
      tcur[fNElsPnt] = GetSignQB()>0 ? -tp : tp;
      ecur[fNElsPnt] = fgRhoLITS[ id ];
      fNElsPnt++;
      //      printf("Passive  on lr %d  %+e\n",ilp,tcur[fNElsPnt-1]);
      //
      if (IsTypeCosmics() && !IsZero(tp)) { // 2 crossings for cosmics
	tcur[fNElsPnt] = -tcur[fNElsPnt-1];
	ecur[fNElsPnt] =  ecur[fNElsPnt-1];
	fNElsPnt++;
	//printf("Passive* on lr %d  %+e\n",ilp,-tcur[fNElsPnt-1]);
      }
      //
    }
    // check if some active layers did not miss the hit, treat them as passive
    for (int ilp=6;ilp--;) {
      int id = fgkActiveLrITS[ilp];
      double tp = GetHelixParAtR( fgkRLayITS[ id ] );
      if (tp<0) continue; // does not hit this radius
      //
      if ( (GetSignQB()>0||IsTypeCosmics()) && !(hitLrNeg & (1<<id)) ) {
	tcur[fNElsPnt] = -tp;
	ecur[fNElsPnt] = fgRhoLITS[ id ];
	fNElsPnt++;
	//printf("Missed  on lr %d  %+e\n",ilp,-tp);
      }
      //
      if ( (GetSignQB()<0||IsTypeCosmics()) && !(hitLrPos & (1<<id)) ) {
	tcur[fNElsPnt] = tp;
	ecur[fNElsPnt] = fgRhoLITS[ id ];
	fNElsPnt++;
	//printf("Missed* on lr %d  %e\n",ilp,tp);
      }
    }
    //
    TMath::Sort(fNElsPnt,fCurT+fPntFirst,fElsId,kFALSE);    // index e-loss points in increasing order
    // find the position of smallest positive t-param
    for (fFirstPosT=0;fFirstPosT<fNElsPnt;fFirstPosT++) if (fCurT[ fElsId[ fFirstPosT ] ]>0) break;
    //
    Double_t cdip = 1./TMath::Sqrt(1.+fParams[kDip]*fParams[kDip]);
    Double_t ptot = TMath::Abs(fParams[kR0]*fgkCQConv*fBz/cdip); // momentum and energy
    Double_t etot = TMath::Sqrt(ptot*ptot + fMass*fMass);      // in the point of closest approach to beam
    Double_t normS[3];
    //
    // Positive t-params: along the track direction for negative track, against for positive
    //   Double_t pcur = ptot, ecurr = etot;
    for (int ip=fFirstPosT;ip<fNElsPnt;ip++) {
      int tID = fElsId[ip];
      Double_t t = fCurT[ tID ];
      //
      if (tID>fPntLast) { // this is not a hit layer but passive layer
	double php = TMath::ATan2(yc-fParams[kR0]*TMath::Cos(fParams[kPhi0]+t),
				  xc-fParams[kR0]*TMath::Cos(fParams[kPhi0]+t));
	normS[0] = -TMath::Cos(php);  // normal to the cylinder at intersection point
	normS[1] = -TMath::Sin(php);
	normS[2] = 0;
      }
      else GetNormal(normS,fkPoints->GetCov()+tID*6);   // vector normal to hit module
      fElsDR[tID] = GetDRofELoss(t,cdip,fElsDR[tID],normS,ptot,etot);
    }
    //
    // negaive t-params: against the track direction for negative track, along for positive
    //    pcur  = ptot;
    //    ecurr = etot;
    for (int ip=fFirstPosT;ip--;) {
      int tID = fElsId[ip];
      Double_t t = fCurT[ tID ];
      //
      if (tID>fPntLast) { // this is not a hit layer but passive layer
	double php = TMath::ATan2(yc-fParams[kR0]*TMath::Cos(fParams[kPhi0]+t),
				  xc-fParams[kR0]*TMath::Cos(fParams[kPhi0]+t));
	normS[0] = -TMath::Cos(php);  // normal to the cylinder at intersection point
	normS[1] = -TMath::Sin(php);
	normS[2] = 0;	
      }
      else GetNormal(normS,fkPoints->GetCov()+tID*6);   // vector normal to hit module
      //
      fElsDR[tID] = GetDRofELoss(t,cdip,fElsDR[tID],normS,ptot,etot);
    }
  }
  // fill info needed to account for ELoss ------------------------------- <<<
  //
  return kTRUE;
}

/*
//________________________________________________________________________________________________________
Bool_t AliITSTPArrayFit::FitHelixCrude(Int_t extQ)
{
  // crude estimate of helix parameters, w/o errors and Eloss.
  // 1st fit the circle (R,xc,yc) by minimizing
  // chi2 = sum{ (bx*xi + by*yi + xi^2+yi^2 + rho)^2 } vs bx,by,rho
  // with bx = -2*xc, by = -2*yc , rho = xc^2+yc^2 - R2
  //
  // if charge is not imposed (extQ==0) then it will be determined from the collision type
  //
  Bool_t eloss = IsELossON();
  //
  int np = fPntLast - fPntFirst + 1;
  if (np<3) { AliError("At least 3 points are needed for helix fit"); return kFALSE; }
  //
  const float *x=fkPoints->GetX(),*y=fkPoints->GetY(),*z=fkPoints->GetZ(),*cov=fkPoints->GetCov();
  //
  // linear circle fit --------------------------------------------------- >>>
  Double_t sxx=0,sxy=0,syy=0,sx=0,sy=0,rhs0=0,rhs1=0,rhs2=0,minR=1E9;
  int minRId = 0;
  for (int i=fPntFirst;i<=fPntLast;i++) {
    Double_t xx = x[i]*x[i];
    Double_t yy = y[i]*y[i];
    Double_t xy = x[i]*y[i];
    Double_t xxyy = xx + yy;
    //
    sxx += xx;
    sxy += xy;
    syy += yy;
    sx  += x[i];
    sy  += y[i];
    //
    rhs0 -= xxyy*x[i];
    rhs1 -= xxyy*y[i];
    rhs2 -= xxyy;
    // 
    // remember Id of the point closest to origin, to determine the charge  
    if (xxyy<minR) { minR   = xxyy; minRId = i; }
    //
    if (eloss) { // find layer id
      int lrid,volid = fkPoints->GetVolumeID()[i];
      if (volid>0) lrid = fgkActiveLrITS[AliGeomManager::VolUIDToLayer(fkPoints->GetVolumeID()[i])-1];
      else { // missing layer info, find from radius
	double r = TMath::Sqrt(xxyy);
	for (lrid=kMaxLrITS;lrid--;) if ( IsZero(r-fgkRLayITS[ lrid ],1.) ) break;
      }
      fElsDR[i] = (lrid>=0 && lrid<kMaxLrITS) ? fgRhoLITS[ lrid ] : 0;   // eloss for normal track
    }
    //
  }
  //
  Double_t mn00 = syy*np-sy*sy;
  Double_t mn01 = sxy*np-sy*sx;
  Double_t mn02 = sxy*sy-syy*sx;
  Double_t det  = sxx*mn00 - sxy*mn01 + sx*mn02; 
  if (TMath::Abs(det)<fgkAlmostZero) return kFALSE;
  //
  Double_t mn11 = sxx*np-sx*sx;
  Double_t mn12 = sxx*sy-sxy*sx;
  Double_t mn22 = sxx*syy-sxy*sxy;
  //
  Double_t mi00 =  mn00/det;
  Double_t mi01 = -mn01/det;
  Double_t mi02 =  mn02/det;
  Double_t mi11 =  mn11/det;
  Double_t mi12 = -mn12/det;
  Double_t mi22 =  mn22/det;
  //
  Double_t xc   = -(rhs0*mi00 + rhs1*mi01 + rhs2*mi02)/2;
  Double_t yc   = -(rhs0*mi01 + rhs1*mi11 + rhs2*mi12)/2;
  Double_t rho2 =  (rhs0*mi02 + rhs1*mi12 + rhs2*mi22);

  //
  // check
  double bx = -2*xc;
  double by = -2*yc;
  double sm0=0,sm1=0;
  for (int i=fPntFirst;i<=fPntLast;i++) {
    double dst = bx*x[i]+by*y[i]+x[i]*x[i]+y[i]*y[i]+rho2;
    sm0 += dst;
    sm1 += dst*dst;
    printf("Point %d: %+e %+e %+e\n",i,dst,sm0,sm1);
  }

  //
  Double_t rad = xc*xc + yc*yc - rho2;
  rad = (rad>fgkAlmostZero) ? (TMath::Sqrt(rad)):fgkAlmostZero;
  //
  //  printf("Rad: %+e xc: %+e yc: %+e\n",rad,xc,yc);

  // linear circle fit --------------------------------------------------- <<<
  //
  // decide sign(Q*B) and fill cicrle parameters ------------------------- >>>
  int sqb;
  if (extQ) {
    SetCharge(extQ); 
    sqb = fBz<0 ? -GetCharge():GetCharge();
  }
  else { 
    // determine the charge from the collision type and field sign
    // the negative Q*B will have positive Vc x V0 product Z component
    // with Vc={-xc,-yc} : vector from circle center to the origin
    // and V0 - track direction vector (take {0,-1,1} for cosmics)
    // If Bz is not provided, assume positive Bz
    sqb = ( IsTypeCosmics() ? xc:(yc*x[minRId]-xc*y[minRId]) ) > 0 ? -1:1;
    SetCharge( fBz<0 ? -sqb : sqb);
  }
  //
  Double_t phi = TMath::ATan2(yc,xc);
  if (sqb<0) phi += TMath::Pi();
  if      (phi > TMath::Pi()) phi -= 2.*TMath::Pi();
  else if (phi <-TMath::Pi()) phi += 2.*TMath::Pi();
  fParams[kPhi0] = phi;  
  fParams[kR0]   = sqb<0 ? -rad:rad;  
  fParams[kD0] = xc*TMath::Cos(phi) + yc*TMath::Sin(phi) - fParams[kR0];
  //
  // decide sign(Q*B) and fill cicrle parameters ------------------------- <<<
  //
  // find z-offset and dip + the parameter t of closest approach to hits - >>>
  //
  UInt_t hitLrPos=0;  // pattern of hit layers at pos
  UInt_t hitLrNeg=0;  // and negative t's

  Double_t ss=0,st=0,sz=0,stt=0,szt=0;
  for (int i=fPntFirst;i<=fPntLast;i++) {
    //
    Double_t ze2 = cov[i*6 + kZZ];
    Double_t t = TMath::ATan2(yc-y[i],xc-x[i]) - fParams[kPhi0]; // angle at measured z
    if (fParams[kR0]<0)  t += TMath::Pi();
    if      (t > TMath::Pi()) t -= TMath::Pi()*2;
    else if (t <-TMath::Pi()) t += TMath::Pi()*2;
    if (ze2<fgkAlmostZero) ze2 = 1E-8;
    ze2 = 1./ze2;
    ss += ze2;
    st += t*ze2;
    stt+= t*t*ze2;
    sz += z[i]*ze2;
    szt+= z[i]*t*ze2;
    //
    fCurT[i] = t; // parameter of the closest approach to the point
    //    printf("%d %+e %+e %+e %+e\n",i,x[i],y[i],z[i],t);
    if (eloss) {
      double r = TMath::Sqrt(x[i]*x[i]+y[i]*y[i]);
      int lr;
      for (lr=kMaxLrITS;lr--;) if ( IsZero(r-fgkRLayITS[ lr ],1.) ) break;
      if (lr<kMaxLrITS) {
	if (t>0) hitLrPos |= (1<<lr);  // set bit of the layer
	else     hitLrNeg |= (1<<lr);  // set bit of the layer
      }
    }
  }
  det = ss*stt - st*st;
  if (TMath::Abs(det)<fgkAlmostZero) { // no Z dependence
    fParams[kDZ]  = sz/ss;
    fParams[kDip] = 0;
  }
  else {
    fParams[kDZ]  =  (sz*stt-st*szt)/det;
    fParams[kDip] = -(ss*szt-st*sz)/det/fParams[kR0];
  }
  //
  // find z-offset and dip + the parameter t of closest approach to hits - <<<
  //
  // fill info needed to account for ELoss ------------------------------- >>>
  if (eloss) {
    fNElsPnt = fPntLast - fPntFirst + 1;
    //
    // to account for the energy loss in the passive volumes, calculate the relevant t-parameters 
    double* tcur = fCurT + fPntFirst;
    double* ecur = fElsDR+ fPntFirst;
    //
    for (int ilp=3;ilp--;) {
      int id = fgkPassivLrITS[ilp];
      double tp = GetHelixParAtR( fgkRLayITS[ id ] );
      if (tp<0) continue; // does not hit this radius
      //
      tcur[fNElsPnt] = GetSignQB()>0 ? -tp : tp;
      ecur[fNElsPnt] = fgRhoLITS[ id ];
      fNElsPnt++;
      //      printf("Passive  on lr %d  %+e\n",ilp,tcur[fNElsPnt-1]);
      //
      if (IsTypeCosmics() && !IsZero(tp)) { // 2 crossings for cosmics
	tcur[fNElsPnt] = -tcur[fNElsPnt-1];
	ecur[fNElsPnt] =  ecur[fNElsPnt-1];
	fNElsPnt++;
	//printf("Passive* on lr %d  %+e\n",ilp,-tcur[fNElsPnt-1]);
      }
      //
    }
    // check if some active layers did not miss the hit, treat them as passive
    for (int ilp=6;ilp--;) {
      int id = fgkActiveLrITS[ilp];
      double tp = GetHelixParAtR( fgkRLayITS[ id ] );
      if (tp<0) continue; // does not hit this radius
      //
      if ( (GetSignQB()>0||IsTypeCosmics()) && !(hitLrNeg & (1<<id)) ) {
	tcur[fNElsPnt] = -tp;
	ecur[fNElsPnt] = fgRhoLITS[ id ];
	fNElsPnt++;
	//printf("Missed  on lr %d  %+e\n",ilp,-tp);
      }
      //
      if ( (GetSignQB()<0||IsTypeCosmics()) && !(hitLrPos & (1<<id)) ) {
	tcur[fNElsPnt] = tp;
	ecur[fNElsPnt] = fgRhoLITS[ id ];
	fNElsPnt++;
	//printf("Missed* on lr %d  %e\n",ilp,tp);
      }
    }
    //
    TMath::Sort(fNElsPnt,fCurT+fPntFirst,fElsId,kFALSE);    // index e-loss points in increasing order
    // find the position of smallest positive t-param
    for (fFirstPosT=0;fFirstPosT<fNElsPnt;fFirstPosT++) if (fCurT[ fElsId[ fFirstPosT ] ]>0) break;
    //
    Double_t cdip = 1./TMath::Sqrt(1.+fParams[kDip]*fParams[kDip]);
    Double_t ptot = TMath::Abs(fParams[kR0]*fgkCQConv*fBz/cdip); // momentum and energy
    Double_t etot = TMath::Sqrt(ptot*ptot + fMass*fMass);      // in the point of closest approach to beam
    Double_t normS[3];
    //
    // Positive t-params: along the track direction for negative track, against for positive
    Double_t pcur = ptot, ecurr = etot;
    for (int ip=fFirstPosT;ip<fNElsPnt;ip++) {
      int tID = fElsId[ip];
      Double_t t = fCurT[ tID ];
      //
      if (tID>fPntLast) { // this is not a hit layer but passive layer
	double php = TMath::ATan2(yc-fParams[kR0]*TMath::Cos(fParams[kPhi0]+t),
				  xc-fParams[kR0]*TMath::Cos(fParams[kPhi0]+t));
	normS[0] = -TMath::Cos(php);  // normal to the cylinder at intersection point
	normS[1] = -TMath::Sin(php);
	normS[2] = 0;
      }
      else GetNormal(normS,fkPoints->GetCov()+tID*6);   // vector normal to hit module
      fElsDR[tID] = GetDRofELoss(t,cdip,fElsDR[tID],normS,ptot,etot);
    }
    //
    // negaive t-params: against the track direction for negative track, along for positive
    pcur  = ptot;
    ecurr = etot;
    for (int ip=fFirstPosT;ip--;) {
      int tID = fElsId[ip];
      Double_t t = fCurT[ tID ];
      //
      if (tID>fPntLast) { // this is not a hit layer but passive layer
	double php = TMath::ATan2(yc-fParams[kR0]*TMath::Cos(fParams[kPhi0]+t),
				  xc-fParams[kR0]*TMath::Cos(fParams[kPhi0]+t));
	normS[0] = -TMath::Cos(php);  // normal to the cylinder at intersection point
	normS[1] = -TMath::Sin(php);
	normS[2] = 0;	
      }
      else GetNormal(normS,fkPoints->GetCov()+tID*6);   // vector normal to hit module
      //
      fElsDR[tID] = GetDRofELoss(t,cdip,fElsDR[tID],normS,ptot,etot);
    }
  }
  // fill info needed to account for ELoss ------------------------------- <<<
  //
  return kTRUE;
}
*/
//____________________________________________________
Double_t AliITSTPArrayFit::FitHelix(Int_t extQ, Double_t extPT,Double_t extPTerr)
{
  // fit by helix accounting for the errors of all coordinates (and energy loss if requested)
  // 
  // If extQ is non-0, its sign is imposed as a charge of the track
  // If extPT>0 and extPTerr>=0, constrain to measured tr.momentum PT 
  // with corresponding error (err=0 -> rel.err=1e-6)
  //
  double chiprev=1e99;
  //const Double_t kMaxTEffect = 1E-6;
  Double_t dXYZdGlo[3*5],dXYZdLoc[3],xyzRes[3];
  //
  SetFitDone(kFALSE);
  fChi2NDF = -1;
  //
  if (!FitHelixCrude(extQ)) return -1; // get initial estimate, ignoring the errors
  //
  if (TMath::Abs(fParams[kR0])>fMaxRforHelix && extPT<=0) {
    fSwitch2Line = kTRUE;
    return FitLine();
  }
  //
  //
  if (!IsCovInv()) InvertPointsCovMat();    // prepare inverted errors
  if (!fParSol) fParSol = new AliParamSolver(5);
  fParSol->SetNGlobal(5);
  //
  //  printf("-1 | %+.2e %+.2e %+.2e %+.2e %+.2e | chi2: %+.4e\n",fParams[0],fParams[1],fParams[2],fParams[3],fParams[4],CalcChi2NDF());
  int iter = 0;
  fChi2NDF = 1e99;
  Bool_t converged = kFALSE;
  while(iter<fMaxIter) {
    chiprev = fChi2NDF;
    fParSol->Clear();
    for (int ip=fPntFirst;ip<=fPntLast;ip++) {
      //
      GetResiduals(xyzRes, ip); // current residuals at point ip
      Double_t rrho = fParams[kR0]+fParams[kD0];
      Double_t cs0  = TMath::Cos(fParams[kPhi0]);
      Double_t sn0  = TMath::Sin(fParams[kPhi0]);
      Double_t cst  = TMath::Cos(fCurT[ip]+fParams[kPhi0]);
      Double_t snt  = TMath::Sin(fCurT[ip]+fParams[kPhi0]);
      //
      int offs = kD0;                  // dXYZ/dD0
      dXYZdGlo[offs + kX] = cs0;
      dXYZdGlo[offs + kY] = sn0;
      dXYZdGlo[offs + kZ] = 0;
      //
      offs = kPhi0*3;                  // dXYZ/dPhi0
      dXYZdGlo[offs + kX] = -rrho*sn0 + fParams[kR0]*snt;
      dXYZdGlo[offs + kY] =  rrho*cs0 - fParams[kR0]*cst;
      dXYZdGlo[offs + kZ] = 0;
      //
      offs = kR0*3;                   // dXYZ/dR0
      if (TMath::Abs(fParams[kR0])<0.9*fMaxRforHelix) {
	dXYZdGlo[offs + kX] =  cs0 - cst;
	dXYZdGlo[offs + kY] =  sn0 - snt;
	dXYZdGlo[offs + kZ] =  -fParams[kDip]*fCurT[ip];
      }
      else {
	dXYZdGlo[offs + kX] = dXYZdGlo[offs + kY] = dXYZdGlo[offs + kZ] = 0;
	fParSol->AddConstraint(kR0,0,1.e2);
      }
      //
      offs = kDZ*3;                   // dXYZ/dDZ
      dXYZdGlo[offs + kX] =  0;
      dXYZdGlo[offs + kY] =  0;
      dXYZdGlo[offs + kZ] =  1.;
      //
      offs = kDip*3;                  // dXYZ/dDip
      dXYZdGlo[offs + kX] =  0;
      dXYZdGlo[offs + kY] =  0;
      dXYZdGlo[offs + kZ] = -fParams[kR0]*fCurT[ip];
      //
      //      /*
      dXYZdLoc[kX] =  fParams[kR0]*snt;
      dXYZdLoc[kY] = -fParams[kR0]*cst;
      dXYZdLoc[kZ] = -fParams[kR0]*fParams[kDip];
      //      */
      //      dXYZdLoc[0] = dXYZdLoc[1] = dXYZdLoc[2] = 0;
      //
      fParSol->AddEquation(dXYZdGlo,dXYZdLoc,xyzRes,GetCovI(ip),GetCovIScale(ip));
    }
    //
    if (extPT>0) { // add constraint on pt
      if (extPTerr<fgkAlmostZero) extPTerr = 1e-6*extPT;
      Double_t cf = fBz*GetCharge()*fgkCQConv;
      Double_t err2i = extPTerr/cf;
      err2i = 1./err2i/err2i;
      //      printf("Constrain R to %+e\n",extPT/cf);
      fParSol->AddConstraint(kR0,-extPT/cf+fParams[kR0],err2i);
    }
    if (!fParSol->Solve()) { AliError("Failed to fit helix"); return -1; }
    Double_t *deltaG = fParSol->GetGlobals();
    //    Double_t *deltaT = fParSol->GetLocals();
    for (int ipar=5;ipar--;) fParams[ipar] -= deltaG[ipar];
    //
    if (TMath::Abs(fParams[kR0])>0.9*fMaxRforHelix) fParams[kR0] = TMath::Sign(0.9*fMaxRforHelix,fParams[kR0]);
    //
    for (int ip=fPntFirst;ip<=fPntLast;ip++) {
      fCurT[ip] = CalcParPCA(ip);
      //      printf("iter%d : delta%2d : expl: %+e | %+e | R=%+e p0=%+e\n",iter,ip,deltaT[ip-fPntFirst], fCurT[ip],fParams[kR0],fParams[kPhi0]);
      //      fCurT[ip] -= deltaT[ip-fPntFirst];
    }
    iter++;
    //
    fChi2NDF = CalcChi2NDF();
    //        printf("%2d | %+.2e %+.2e %+.2e %+.2e %+.2e | chi2: %+.4e %+.4e\n",iter,deltaG[0],deltaG[1],deltaG[2],deltaG[3],deltaG[4],fChi2NDF,fChi2NDF-chiprev);
    //        printf("->>  %+.2e %+.2e %+.2e %+.2e %+.2e | Chi2: %+.6e %+.6e\n",fParams[0],fParams[1],fParams[2],fParams[3],fParams[4],fChi2NDF,fChi2NDF-chiprev);
    double difchi2 = chiprev - fChi2NDF;
    if ( difchi2<fEps && TMath::Abs(difchi2)<1e-4) {converged = kTRUE; break;} 
    //    if (errT*TMath::Abs(fParams[kR0])<kMaxTEffect && errP<fEps) {converged = kTRUE; break;} 
  }
  //
  if (!converged) {
    AliDebug(2,Form("Max number of %d iteration reached, Current chi2:%.3e, chi2 change %+.3e",iter,
		    fChi2NDF,chiprev-fChi2NDF));
    for (int ip=fPntFirst;ip<=fPntLast;ip++)
      AliDebug(2,Form("P%2d| %+.3e %+.3e %+.3e\n",ip,fkPoints->GetX()[ip],fkPoints->GetY()[ip],fkPoints->GetZ()[ip]));

  }
  fIter = iter;
  SetCharge( fParams[kR0]>0 ? (fBz<0?-1:1):(fBz>0?-1:1) );
  SetFitDone();
  //  printf("F1>> %+.7e %+.7e %+.7e %+.7e %.7e\n",fParams[0],fParams[1],fParams[2],fParams[3],fParams[4]);
  //
  return fChi2NDF;
}

//____________________________________________________
Double_t AliITSTPArrayFit::FitLine()
{
  // fit by helix accounting for the errors of all coordinates (and energy loss if requested)
  // 
  double chiprev=1e99;
  //  const Double_t kMaxTEffect = 1.e-6;
  Double_t dXYZdGlo[3*4],dXYZdLoc[3],xyzRes[3];
  SetFitDone(kFALSE);
  fChi2NDF = -1;
  //
  if (fParAxis<0) SetParAxis(ChoseParAxis());
  //
  const float *xyzp[3]={fkPoints->GetX(),fkPoints->GetY(),fkPoints->GetZ()};
  if (!IsCovInv()) InvertPointsCovMat();
  if (!FitLineCrude()) return -1; // get initial estimate, ignoring the errors
  //
  if (!fParSol) fParSol = new AliParamSolver(5);
  fParSol->SetNGlobal(4);
  // initial set of parameters
  for (int ip=fPntFirst;ip<=fPntLast;ip++) fCurT[ip] = xyzp[fParAxis][ip]; // use measured param-coordinate
  //
  int iter = 0;
  Bool_t converged = kFALSE;
  fChi2NDF = 1e99;
  while(iter<fMaxIter) {
    chiprev = fChi2NDF;
    fParSol->Clear();
    for (int ip=fPntFirst;ip<=fPntLast;ip++) {
      //
      int offs;
      GetResiduals(xyzRes, ip); // current residuals at point ip
      //
      offs = kA0*3;                   // dXYZ/dA0
      dXYZdGlo[offs + fkAxID[kX]] = 1;
      dXYZdGlo[offs + fkAxID[kY]] = 0;
      dXYZdGlo[offs + fParAxis  ] = 0;
      //
      offs = kB0*3;                   // dXYZ/dB0
      dXYZdGlo[offs + fkAxID[kX]] = fCurT[ip];
      dXYZdGlo[offs + fkAxID[kY]] = 0;
      dXYZdGlo[offs + fParAxis  ] = 0;
      //
      offs = kA1*3;                   // dXYZ/dA1
      dXYZdGlo[offs + fkAxID[kX]] = 0;
      dXYZdGlo[offs + fkAxID[kY]] = 1;
      dXYZdGlo[offs + fParAxis  ] = 0;
      //
      offs = kB1*3;                   // dXYZ/dB1
      dXYZdGlo[offs + fkAxID[kX]] = 0;
      dXYZdGlo[offs + fkAxID[kY]] = fCurT[ip];
      dXYZdGlo[offs + fParAxis  ] = 0;
      //
      dXYZdLoc[ fkAxID[kX] ] =  fParams[kB0];  // dX/dt
      dXYZdLoc[ fkAxID[kY] ] =  fParams[kB1];  // dY/dt
      dXYZdLoc[ fParAxis   ] =  1;
      //
      fParSol->AddEquation(dXYZdGlo,dXYZdLoc,xyzRes,GetCovI(ip),GetCovIScale(ip));
    }
    //
    if (!fParSol->Solve()) { AliError("Failed to fit line"); return -1; }
    Double_t *deltaG = fParSol->GetGlobals();
    Double_t *deltaT = fParSol->GetLocals();
    for (int ipar=4;ipar--;) fParams[ipar] -= deltaG[ipar];
    for (int ip=fPntFirst;ip<=fPntLast;ip++) fCurT[ip] -= deltaT[ip-fPntFirst];
    iter++;
    fChi2NDF = CalcChi2NDF();
    //    printf("%d %+e %+e | %+.2e %+.2e %+.2e %+.2e | chi2: %+.4e %+.4e\n",iter,errP,errT, deltaG[0],deltaG[1],deltaG[2],deltaG[3],fChi2NDF,fChi2NDF-chiprev);
    //    printf("->> %+.2e %+.2e %+.2e %+.2e %+.2e | Chi2: %+.6e %+.6e\n",fParams[0],fParams[1],fParams[2],fParams[3],fParams[4],fChi2NDF,fChi2NDF-chiprev);
    double difchi2 = chiprev - fChi2NDF;
    if ( difchi2<fEps && TMath::Abs(difchi2)<1e-4) {converged = kTRUE; break;} 
    chiprev = fChi2NDF;
    //    if (errT<kMaxTEffect && errP<fEps) {converged = kTRUE; break;} 
  }
  //
  if (!converged) {
    AliDebug(2,Form("Max number of %d iteration reached, Current chi2:%.3e, chi2 change %+.3e",iter,
		    fChi2NDF,chiprev-fChi2NDF));
    for (int ip=fPntFirst;ip<=fPntLast;ip++)
      AliDebug(2,Form("P%2d| %+.3e %+.3e %+.3e\n",ip,fkPoints->GetX()[ip],fkPoints->GetY()[ip],fkPoints->GetZ()[ip]));
  }
  fIter = iter;
  SetFitDone();
  //printf("F1>> %+.2e %+.2e %+.2e %+.2e\n",fParams[0],fParams[1],fParams[2],fParams[3]);
  return fChi2NDF;
  //
}

//____________________________________________________
void AliITSTPArrayFit::GetNormal(Double_t *norm, const Float_t *covMat) 
{
  // obtain the lab normal vector to the sensor from the covariance matrix
  // in such a way that when the local frame of the sensor coincides with 
  // the lab frame, the vector {0,1,0} is obtained
  Double_t tgxy = TMath::Tan(0.5*TMath::ATan2(2.*covMat[kXY],covMat[kYY]-covMat[kXX]));
  Double_t tgyz = TMath::Tan(0.5*TMath::ATan2(2.*covMat[kYZ],covMat[kZZ]-covMat[kYY]));
  norm[kY] = 1./TMath::Sqrt(1 + tgxy*tgxy + tgyz*tgyz);
  norm[kX] = norm[kY]*tgxy;
  norm[kZ] = norm[kY]*tgyz;
  //
}

//____________________________________________________
Double_t AliITSTPArrayFit::GetDRofELoss(Double_t t,Double_t cdip,Double_t rhoL,const Double_t *normS, 
					Double_t &p,Double_t &e) const
{
  // Calculate energy loss of the particle at given t-param on the layer with rhoL (thickness*density) with
  // normal vector normS in the lab. The particle before eloss has energy "e" and momentum "p"
  // cdip = cosine of the dip angle = 1/sqrt(1+tgL^2)
  // Return the change DR of the radius due to the ELoss 
  //
  // NOTE: with B>0 the negative particles propagate along increasing t-param and positive 
  // particles - against.
  // t-param = 0 corresponds to the point of closest approach of the track to the beam.
  // Since the fitted helix parameters of the track are defined in this PCA point, when the correction
  // is applied upstream of the PCS, the energy must be increased (DR>0) rather than decreased (DR<0)
  //
  Double_t dirTr[3];
  dirTr[0] = -TMath::Sin(fParams[kPhi0]+t);
  dirTr[1] =  TMath::Cos(fParams[kPhi0]+t);
  dirTr[2] =  fParams[kDip];
  // cosine of the impact angle
  Double_t cosImp = cdip*TMath::Abs(dirTr[0]*normS[0]+dirTr[1]*normS[1]+dirTr[2]*normS[2]);
  //
  if (cosImp<0.3) cosImp = 0.3; //?
  Double_t dE = AliExternalTrackParam::BetheBlochSolid(p/fMass)*rhoL/cosImp;
  Double_t dP = e/p*dE;
  //
  if (t*GetSignQB() < 0) {
    dP =  -dP;
    dE =  -dE;
  }
  //
  if (p+dP<0) {
    AliInfo(Form("Estimated PLoss %.3f is larger than particle momentum %.3f. Skipping",dP,p));
    return 0;
  }
  //
  p += dP;
  e += dE;
  //
  return fCharge*dP*cdip/fBz/fgkCQConv;
}

//_____________________________________________________________
Double_t AliITSTPArrayFit::GetLineOffset(Int_t axis) const
{
  // return intercept of the parameterization coord = intercept + slope*t for given axis
  if (fParAxis<0) return -1E6; // no line fit
  if (axis==fParAxis) return 0;
  if (fParAxis==kX) return fParams[axis==kY ? kA0 : kA1 ];
  if (fParAxis==kY) return fParams[axis==kZ ? kA0 : kA1 ];
  return fParams[axis==kX ? kA0 : kA1 ];
}

//_____________________________________________________________
Double_t AliITSTPArrayFit::GetLineSlope(Int_t axis) const
{
  // return intercept of the parameterization coord = intercept + slope*t for given axis
  if (fParAxis<0) return -1E6; // no line fit
  if (axis==fParAxis) return 1.;
  if (fParAxis==kX) return fParams[axis==kY ? kB0 : kB1 ];
  if (fParAxis==kY) return fParams[axis==kZ ? kB0 : kB1 ];
  return fParams[axis==kX ? kB0 : kB1 ];
}

//_____________________________________________________________
void AliITSTPArrayFit::Print(Option_t *) const
{
  // print results of the fit
  //
  const char kCxyz[] = "XYZ";
  if (!fkPoints) return;
  //
  printf("Track of %3d points in Bz=%+.1f |Fit ",fPntLast-fPntFirst+1,fBz);
  if ( IsFitDone() ) {
    if (IsHelix())
      printf("Helix: Chi2: %5.1f | %+.2e %+.2e %+.2e %+.2e %+.2e\n",
	     fChi2NDF,fParams[kD0],fParams[kPhi0],fParams[kR0],fParams[kDZ],fParams[kDip]);
    else 
      printf("Line%c: Chi2: %5.1f | %+.2e %+.2e %+.2e %+.2e\n",
	     kCxyz[fParAxis],fChi2NDF,fParams[kA0],fParams[kB0],fParams[kA1],fParams[kB1]);
  }
  else printf("N/A\n");
}




//____________________________________________________
void AliITSTPArrayFit::BuildMaterialLUT(Int_t ntri) 
{
  // Fill a look-up table with mean material a la AliITSTrackerMI
  //
  if (!AliGeomManager::GetGeometry()) AliFatal("Geometry is not loaded");
  //
  // detector layer to check: dX,dZ,Ymin,Ymax
  const double kLayr[9][4] =  {{0.  ,60. , 2.80,3.00},  // beam pipe
			       {1.28,7.07,-0.20,0.22},  // SPD1
			       {1.28,7.07,-0.20,0.22},  // SPD2
			       {0.  ,76.0, 10.4,11.8},  // Shield1
			       {7.02,7.53,-1.00,4.50},  // SDD1
			       {7.02,7.53,-1.00,4.50},  // SDD2
			       {0.  ,102., 29.0,30.0},  // Shield2
			       {7.50,4.20,-0.15,4.50},  // SSD1
			       {7.50,4.20,-0.15,4.50}}; // SSD2
  //
  //
  // build <dens*L> for detectors (track hitting the sensor in normal direction)
  double pg1[3],pg2[3],res[7];
  //
  int sID = 0;
  int actLrID = 0;
  for (int lr=0;lr<9;lr++) {
    //
    Bool_t active = kFALSE;
    const double* tpars = kLayr[lr];
    //
    if (IsZero(tpars[0])) { // passive layer
      active = kFALSE;
      AliInfo(Form("Probing passive layer (total layer #%d)",lr));
    }  
    else {
      active = kTRUE;
      sID += AliGeomManager::LayerSize(++actLrID);
      AliInfo(Form("Probing sensors of active layer #%d (total layers #%d)",actLrID,lr));
    }
    double shift = TMath::Abs(tpars[2]-tpars[3])*1E-4;
    double rhol = 0;
    for (int i=ntri;i--;) {
      //
      if (active) {
	int ssID = sID -1 - (int)(AliGeomManager::LayerSize(actLrID)*gRandom->Rndm());
	pg1[0] = pg2[0] = (gRandom->Rndm()-0.5)*tpars[0] + shift; // local X
	pg2[0] -= 2*shift;
	pg1[1] = tpars[2];
	pg2[1] = tpars[3];
	pg1[2] = pg2[2] = (gRandom->Rndm()-0.5)*tpars[1] + shift; // local Z
	pg2[2] -= 2*shift;
	AliITSgeomTGeo::LocalToGlobal(ssID,pg1,pg1);    
	AliITSgeomTGeo::LocalToGlobal(ssID,pg2,pg2);	
      }
      else {
	double ang = gRandom->Rndm()*TMath::Pi()*2;
	pg1[0] = tpars[2]*TMath::Cos(ang)+shift;
	pg2[0] = tpars[3]*TMath::Cos(ang)-shift;
	pg1[1] = tpars[2]*TMath::Sin(ang);
	pg2[1] = tpars[3]*TMath::Sin(ang);
	pg1[2] = pg2[2] = (gRandom->Rndm()-0.5)*tpars[1]+shift; // local Z
	pg2[2] -= 2*shift;
      }

      //
      AliTracker::MeanMaterialBudget(pg1,pg2,res);
      rhol += res[0]*res[4];   // rho*L
    }
    fgRhoLITS[lr] = rhol/ntri;
    AliInfo(Form("Obtained <rho*L> = %e\n",fgRhoLITS[lr]));
  }
  //
  return;
}

//____________________________________________________
Double_t AliITSTPArrayFit::GetPCA2PlaneInfo(Double_t *xyz, Double_t *dir, Int_t axis, Double_t axval) const
{
  // calculate the PCA to plane normal ti axis and crossing it at axval
  // fill the position and direction cosines at this point
  //
  double xyzp[3] = {0,0,0};                // create fake point
  xyzp[axis] = axval;
  double covI[6] = {1e-4,0,0,1e-4,0,1e-4}; // fake cov.matrix loose in all directions
  covI[4*axis - axis*(axis+1)/2] = 1e8;    // except axis
  //
  double t = GetPosition(xyz, xyzp, covI); // got pca
  //
  if (dir) GetDirCos(dir,t);
  return t;
}

//____________________________________________________
void AliITSTPArrayFit::GetT0Info(Double_t* xyz, Double_t *dir) const
{
  // get direction cosines for t = 0;
  GetPosition(xyz, 0);
  if (dir) GetDirCos(dir,0);
}

//____________________________________________________
Bool_t AliITSTPArrayFit::CalcErrorMatrix()
{
  // compute covariance matrix in lenear approximation of residuals on parameters
  static AliSymMatrix cv(5);
  static Double_t dres[5][3]; 
  cv.Reset();
  int npar = IsHelix() ? 5:4;
  //
  for (int ip=fPntFirst;ip<=fPntLast;ip++) {
    GetDResDParams(&dres[0][0],ip);
    Double_t* covI = GetCovI(ip);
    for (int i=npar;i--;) 
      for (int j=i+1;j--;) {
	double cvadd = dres[i][kX]*(dres[j][kX]*covI[ kXX ] + dres[j][kY]*covI[ kXY ] + dres[j][kZ]*covI[ kXZ ])
	  +            dres[i][kY]*(dres[j][kX]*covI[ kXY ] + dres[j][kY]*covI[ kYY ] + dres[j][kZ]*covI[ kYZ ])
	  +            dres[i][kZ]*(dres[j][kX]*covI[ kXZ ] + dres[j][kY]*covI[ kYZ ] + dres[j][kZ]*covI[ kZZ ]);
	if (covI[kScl]>0) cvadd *= covI[kScl];
	cv(i,j) += cvadd;
      }
  }
  cv.SetSizeUsed(npar);
  if (cv.InvertChol()) {
    //cv.Print("l");
    int cnt = 0;
    for (int i=npar;i--;) for (int j=i+1;j--;)fParamsCov[cnt++] = cv(i,j);
    return kTRUE;
  }
  //
  return kFALSE;
}

//____________________________________________________
Double_t AliITSTPArrayFit::CalcParPCA(Int_t ipnt) const
{
  // get parameter for the point with least weighted distance to the point
  const double *xyz  = GetPoint(ipnt);
  const double *covI = GetCovI(ipnt);
  if (IsHelix()) return GetParPCAHelix(xyz,covI,covI[kScl]);
  else           return GetParPCALine(xyz,covI/*,covI[kScl]*/);
}

//____________________________________________________
Double_t AliITSTPArrayFit::GetPt() const 
{
  return IsFieldON()&&IsHelix() ? TMath::Abs(fParams[kR0]*fBz*fgkCQConv) : -1;
}

//____________________________________________________
Double_t AliITSTPArrayFit::GetP() const 
{
  if (!IsFieldON()) return -1;
  Double_t cdip = 1./TMath::Sqrt(1.+fParams[kDip]*fParams[kDip]);
  return TMath::Abs(fParams[kR0]*fgkCQConv*fBz/cdip); // momentum
}

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