ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

/* $Id$ */
// Class for global helix fit of a track
// Author: M.Ivanov
// The method uses the following idea:
//------------------------------------------------------
// XY direction
//
//  (x-x0)^2+(y-y0)^2-R^2=0 ===>
//
//  (x^2+y^2 -2*x*x0 - 2*y*y0+ x0^2 -y0^2 -R^2 =0;  ==>
//
//   substitution t = 1/(x^2+y^2),   u = 2*x*t, v = 2*y*t,  D0 = R^2 - x0^2- y0^2
//
//  1 - u*x0 - v*y0 - t *D0 =0 ;  - linear equation
//     
//  next substition   a = 1/y0    b = -x0/y0   c = -D0/y0
//
//  final linear equation :   a + u*b +t*c - v =0;
//
// Minimization :
//
// sum( (a + ui*b +ti*c - vi)^2)/(sigmai)^2 = min;
//
// where sigmai is the error of  maesurement  (a + ui*b +ti*c - vi)
//
// neglecting error of xi, and supposing  xi>>yi    sigmai ~ sigmaVi ~ 2*sigmay*t  


#include <TMatrixDSym.h>
#include <TMath.h>
#include <TMatrixD.h>

#include "AliRieman.h"

ClassImp(AliRieman)



AliRieman::AliRieman() :
  TObject(),
  fCapacity(0),
  fN(0),
  fX(0),
  fY(0),
  fZ(0),
  fSy(0),
  fSz(0),
  fCovar(0),
  fCovarPolY(0),
  fCovarPolZ(0),
  fSumZZ(0),
  fChi2(0),
  fChi2Y(0),
  fChi2Z(0),
  fConv(kFALSE)
{
  //
  // default constructor
  //
  for (Int_t i=0;i<6;i++) fParams[i] = 0;
  for (Int_t i=0;i<9;i++) fSumXY[i] = 0;
  for (Int_t i=0;i<9;i++) fSumXZ[i] = 0;
  for (Int_t i=0;i<5;i++) {
    fSumPolY[i]=0;
    fSumPolZ[i]=0;
  }
}


AliRieman::AliRieman(Int_t capacity) :
  TObject(),
  fCapacity(capacity),
  fN(0),
  fX(new Double_t[fCapacity]),
  fY(new Double_t[fCapacity]),
  fZ(new Double_t[fCapacity]),
  fSy(new Double_t[fCapacity]),
  fSz(new Double_t[fCapacity]),
  fCovar(new TMatrixDSym(6)),
  fCovarPolY(new TMatrixDSym(3)),
  fCovarPolZ(new TMatrixDSym(2)),
  fSumZZ(0),
  fChi2(0),
  fChi2Y(0),
  fChi2Z(0),
  fConv(kFALSE)
{
  //
  // default constructor
  //
  for (Int_t i=0;i<6;i++) fParams[i] = 0;
  for (Int_t i=0;i<9;i++) fSumXY[i] = 0;
  for (Int_t i=0;i<9;i++) fSumXZ[i] = 0;
  for (Int_t i=0;i<5;i++) {
    fSumPolY[i]=0;
    fSumPolZ[i]=0;
  }
}

AliRieman::AliRieman(const AliRieman &rieman):
  TObject(rieman),
  fCapacity(rieman.fN),
  fN(rieman.fN),
  fX(new Double_t[fN]),
  fY(new Double_t[fN]),
  fZ(new Double_t[fN]),
  fSy(new Double_t[fN]),
  fSz(new Double_t[fN]),
  fCovar(new TMatrixDSym(*(rieman.fCovar))), 
  fCovarPolY(new TMatrixDSym(*(rieman.fCovarPolY))), 
  fCovarPolZ(new TMatrixDSym(*(rieman.fCovarPolZ))), 
  fSumZZ(rieman.fSumZZ),
  fChi2(rieman.fChi2),
  fChi2Y(rieman.fChi2Y),
  fChi2Z(rieman.fChi2Z),
  fConv(rieman.fConv)

{
  //
  // copy constructor
  // 
  for (Int_t i=0;i<6;i++) fParams[i] = rieman.fParams[i];
  for (Int_t i=0;i<9;i++) fSumXY[i]  = rieman.fSumXY[i];
  for (Int_t i=0;i<9;i++) fSumXZ[i]  = rieman.fSumXZ[i];
  for (Int_t i=0;i<5;i++) {
    fSumPolY[i]=rieman.fSumPolY[i];
    fSumPolZ[i]=rieman.fSumPolZ[i];
  }
  for (Int_t i=0;i<rieman.fN;i++){
    fX[i]   = rieman.fX[i];
    fY[i]   = rieman.fY[i];
    fZ[i]   = rieman.fZ[i];
    fSy[i]  = rieman.fSy[i];
    fSz[i]  = rieman.fSz[i];
  }
}

AliRieman::~AliRieman()
{
  //
  // Destructor
  //
  delete[]fX;
  delete[]fY;
  delete[]fZ;
  delete[]fSy;
  delete[]fSz;
  delete fCovar;
  delete fCovarPolY;
  delete fCovarPolZ;
}

void AliRieman::Reset()
{
  //
  // Reset all the data members
  //
  fN=0;
  for (Int_t i=0;i<6;i++) fParams[i] = 0;
  for (Int_t i=0;i<9;i++) fSumXY[i] = 0;
  for (Int_t i=0;i<9;i++) fSumXZ[i] = 0; 
  for (Int_t i=0;i<5;i++) {
    fSumPolY[i]=0;
    fSumPolZ[i]=0;
  }
  fSumZZ =0;
  fConv =kFALSE;
}


void AliRieman::AddPoint(Double_t x, Double_t y, Double_t z, Double_t sy, Double_t sz)
{
  //
  //  Rieman update
  //
  //------------------------------------------------------
  // XY direction
  //
  //  (x-x0)^2+(y-y0)^2-R^2=0 ===>
  //
  //  (x^2+y^2 -2*x*x0 - 2*y*y0+ x0^2 -y0^2 -R^2 =0;  ==>
  //
  //   substitution t = 1/(x^2+y^2),   u = 2*x*t, v = 2*y*t,  D0 = R^2 - x0^2- y0^2
  //
  //  1 - u*x0 - v*y0 - t *D0 =0 ;  - linear equation
  //     
  //  next substition   a = 1/y0    b = -x0/y0   c = -D0/y0
  //
  //  final linear equation :   a + u*b +t*c - v =0;
  //
  // Minimization :
  //
  // sum( (a + ui*b +ti*c - vi)^2)/(sigmai)^2 = min;
  //
  // where sigmai is the error of  maesurement  (a + ui*b +ti*c - vi)
  //
  // neglecting error of xi, and supposing  xi>>yi    sigmai ~ sigmaVi ~ 2*sigmay*t  
  //
  if (fN==fCapacity-1) return;  // out of capacity
  fX[fN] = x; fY[fN]=y; fZ[fN]=z; fSy[fN]=sy; fSz[fN]=sz;
  //
  // XY part
  //
  Double_t  t  =  x*x+y*y;
  if (t<2) return;
  t            = 1./t;
  Double_t  u  =  2.*x*t;
  Double_t  v  =  2.*y*t;
  Double_t  error = 2.*sy*t;
  error *=error;
  Double_t weight = 1./error;
  fSumXY[0] +=weight;
  fSumXY[1] +=u*weight;      fSumXY[2]+=v*weight;  fSumXY[3]+=t*weight;
  fSumXY[4] +=u*u*weight;    fSumXY[5]+=t*t*weight;
  fSumXY[6] +=u*v*weight;    fSumXY[7]+=u*t*weight; fSumXY[8]+=v*t*weight;
  //
  // XZ part
  //
  weight = 1./(sz*sz);
  fSumXZ[0] +=weight;
  Double_t r = TMath::Sqrt(x*x+y*y);
  fSumXZ[1] +=weight*r;   fSumXZ[2] +=weight*r*r; fSumXZ[3] +=weight*z; fSumXZ[4] += weight*r*z;
  // Now the auxulary sums
  fSumXZ[5] +=weight*r*r*r/24; fSumXZ[6] +=weight*r*r*r*r/12; fSumXZ[7] +=weight*r*r*r*z/24;
  fSumXZ[8] +=weight*r*r*r*r*r*r/(24*24);
  fSumZZ += z*z*weight;
  //
  // sum accumulation for rough error estimates of the track extrapolation error
  //
  Double_t maty = 1./(sy*sy);
  Double_t matz = 1./(sz*sz);
  for (Int_t i=0;i<5; i++){
    fSumPolY[i] += maty;
    fSumPolZ[i] += matz;
    maty *= x;
    matz *= x;
  }
  fN++;
}


void AliRieman::UpdatePol(){
  //
  //  Rieman update
  //
  //
  if (fN==0) return;
  for (Int_t i=0;i<6;i++)fParams[i]=0;
  Int_t conv=0;
  //
  // XY part
  //
  TMatrixDSym     smatrix(3);
  TMatrixD        sums(1,3);
  //
  //   smatrix(0,0) = s0; smatrix(1,1)=su2; smatrix(2,2)=st2;
  //   smatrix(0,1) = su; smatrix(0,2)=st; smatrix(1,2)=sut;
  //   sums(0,0)    = sv; sums(0,1)=suv; sums(0,2)=svt;

  smatrix(0,0) = fSumXY[0]; smatrix(1,1)=fSumXY[4]; smatrix(2,2)=fSumXY[5];
  smatrix(0,1) = fSumXY[1]; smatrix(0,2)=fSumXY[3]; smatrix(1,2)=fSumXY[7];
  smatrix(1,0) = fSumXY[1]; smatrix(2,0)=fSumXY[3]; smatrix(2,1)=fSumXY[7];
  sums(0,0)    = fSumXY[2]; sums(0,1)   =fSumXY[6]; sums(0,2)   =fSumXY[8];
  smatrix.Invert();
  if (smatrix.IsValid()){
    for (Int_t i=0;i<3;i++)
      for (Int_t j=0;j<=i;j++){
	(*fCovar)(i,j)=smatrix(i,j);
      }
    TMatrixD  res = sums*smatrix;
    fParams[0] = res(0,0);
    fParams[1] = res(0,1);
    fParams[2] = res(0,2);
    conv++;
  }
  //
  // XZ part
  //
  Double_t rm1  = fParams[0]/TMath::Sqrt(-fParams[2]*fParams[0]+fParams[1]*fParams[1]+1); 
  
//   fSumXZ[1] += fSumXZ[5]*rm1*rm1;
//   fSumXZ[2] += fSumXZ[6]*rm1*rm1 + fSumXZ[8]*rm1*rm1*rm1*rm1;
//   fSumXZ[4] += fSumXZ[7]*rm1*rm1;
  Double_t sum1 = fSumXZ[1] + fSumXZ[5]*rm1*rm1;
  Double_t sum2 = fSumXZ[2] + fSumXZ[6]*rm1*rm1 + fSumXZ[8]*rm1*rm1*rm1*rm1;
  Double_t sum4 = fSumXZ[4] + fSumXZ[7]*rm1*rm1;
  
  TMatrixDSym     smatrixz(2);
  //  smatrixz(0,0) = fSumXZ[0]; smatrixz(0,1) = fSumXZ[1]; smatrixz(1,1) = fSumXZ[2];
  //smatrixz(1,0) = fSumXZ[1];
  smatrixz(0,0) = fSumXZ[0]; smatrixz(0,1) = sum1; smatrixz(1,1) = sum2;
  smatrixz(1,0) = sum1;
  smatrixz.Invert();
  TMatrixD        sumsxz(1,2);
  if (smatrixz.IsValid()){
    sumsxz(0,0)    = fSumXZ[3];
    //    sumsxz(0,1)    = fSumXZ[4];
    sumsxz(0,1)    = sum4;
    TMatrixD res = sumsxz*smatrixz;
    fParams[3] = res(0,0);
    fParams[4] = res(0,1);
    fParams[5] = 0;
    for (Int_t i=0;i<2;i++)
      for (Int_t j=0;j<=i;j++){
	(*fCovar)(i+3,j+3)=smatrixz(i,j);
      }
    conv++;
  }
  UpdateCovariancePol();
  //  (x-x0)^2+(y-y0)^2-R^2=0 ===>
  //
  //  (x^2+y^2 -2*x*x0 - 2*y*y0+ x0^2 -y0^2 -R^2 =0;  ==>
  //   substitution t = 1/(x^2+y^2),   u = 2*x*t, y = 2*y*t,  D0 = R^2 - x0^2- y0^2
  //
  //  1 - u*x0 - v*y0 - t *D0 =0 ;  - linear equation
  //     
  //  next substition   a = 1/y0    b = -x0/y0   c = -D0/y0
  //  final linear equation :   a + u*b +t*c - v =0;
  //
  //  fParam[0]  = 1/y0
  //  fParam[1]  = -x0/y0
  //  fParam[2]  = - (R^2 - x0^2 - y0^2)/y0
  if (conv>1) fConv =kTRUE;
  else
    fConv=kFALSE;
}

void AliRieman::Update(){
  //
  //  Rieman update
  //
  //
  if (fN==0) return;
  for (Int_t i=0;i<6;i++)fParams[i]=0;
  Int_t conv=0;
  //
  // XY part
  //
  TMatrixDSym     smatrix(3);
  TMatrixD        sums(1,3);
  //
  //   smatrix(0,0) = s0; smatrix(1,1)=su2; smatrix(2,2)=st2;
  //   smatrix(0,1) = su; smatrix(0,2)=st; smatrix(1,2)=sut;
  //   sums(0,0)    = sv; sums(0,1)=suv; sums(0,2)=svt;

  smatrix(0,0) = fSumXY[0]; smatrix(1,1)=fSumXY[4]; smatrix(2,2)=fSumXY[5];
  smatrix(0,1) = fSumXY[1]; smatrix(0,2)=fSumXY[3]; smatrix(1,2)=fSumXY[7];
  //
  smatrix(1,0) = fSumXY[1];
  smatrix(2,0) = fSumXY[3];
  smatrix(2,1) = fSumXY[7];

  sums(0,0)    = fSumXY[2]; sums(0,1)   =fSumXY[6]; sums(0,2)   =fSumXY[8];
  //TDecompChol decomp(smatrix);
  //decomp.SetTol(1.0e-14);
  //smatrix = 
  //decomp.Invert();
  smatrix.Invert();
  if (smatrix.IsValid()){
    for (Int_t i=0;i<3;i++)
      for (Int_t j=0;j<3;j++){
	(*fCovar)(i,j)=smatrix(i,j);
      }
    TMatrixD  res = sums*smatrix;
    fParams[0] = res(0,0);
    fParams[1] = res(0,1);
    fParams[2] = res(0,2);
    conv++;
  }
  if (conv==0){
    fConv = kFALSE;   //non converged
    return;
  }
  if (-fParams[2]*fParams[0]+fParams[1]*fParams[1]+1.<0){
    fConv = kFALSE;   //non converged
    return;
  }
  //
  // XZ part
  //
  Double_t x0 = -fParams[1]/fParams[0];
  Double_t rm1  = fParams[0]/TMath::Sqrt(-fParams[2]*fParams[0]+fParams[1]*fParams[1]+1.); 
  Double_t sumXZ[9];

  for (Int_t i=0;i<9;i++) sumXZ[i]=0;
  for (Int_t i=0;i<fN;i++){
    Double_t phi  = TMath::ASin((fX[i]-x0)*rm1);
    Double_t phi0 = TMath::ASin((0.-x0)*rm1);
    Double_t weight = 1/fSz[i];
    weight *=weight;
    Double_t dphi = (phi-phi0)/rm1;
    sumXZ[0] +=weight;
    sumXZ[1] +=weight*dphi;
    sumXZ[2] +=weight*dphi*dphi;
    sumXZ[3] +=weight*fZ[i];
    sumXZ[4] +=weight*dphi*fZ[i];

  }

  TMatrixDSym     smatrixz(2);
  TMatrixD        sumsz(1,2);
  smatrixz(0,0) = sumXZ[0]; smatrixz(0,1) = sumXZ[1]; smatrixz(1,1) = sumXZ[2];
  smatrixz(1,0) = sumXZ[1];
  smatrixz.Invert();
  if (smatrixz.IsValid()){
    sumsz(0,0)    = sumXZ[3];
    sumsz(0,1)    = sumXZ[4];
    TMatrixD res = sumsz*smatrixz;
    fParams[3] = res(0,0);
    fParams[4] = res(0,1);
    for (Int_t i=0;i<2;i++)
      for (Int_t j=0;j<2;j++){
	(*fCovar)(i+3,j+3)=smatrixz(i,j);
    }
    conv++;
  }
  UpdateCovariancePol();
  //  (x-x0)^2+(y-y0)^2-R^2=0 ===>
  //
  //  (x^2+y^2 -2*x*x0 - 2*y*y0+ x0^2 -y0^2 -R^2 =0;  ==>
  //   substitution t = 1/(x^2+y^2),   u = 2*x*t, v = 2*y*t,  D0 = R^2 - x0^2- y0^2
  //
  //  1 - u*x0 - v*y0 - t *D0 =0 ;  - linear equation
  //     
  //  next substition   a = 1/y0    b = -x0/y0   c = -D0/y0
  //  final linear equation :   a + u*b +t*c - v =0;
  //
  //  fParam[0]  = 1/y0
  //  fParam[1]  = -x0/y0
  //  fParam[2]  = - (R^2 - x0^2 - y0^2)/y0
  if (conv>1) fConv =kTRUE;
  else
    fConv=kFALSE;
  fChi2Y = CalcChi2Y();
  fChi2Z = CalcChi2Z();
  fChi2  = fChi2Y +fChi2Z;
}

void AliRieman::UpdateCovariancePol(){
  //
  // covariance matrices for rough extrapolation error estimate
  // covariance matrix - get error estimates at point x = 0 
  // ! NOTE - error estimates is very rough and it is valid only if dl<<R
  // when dl is the distance between first and last point  
  //
  //
  (*fCovarPolY)(0,0) = fSumPolY[0]; (*fCovarPolY)(0,1) = fSumPolY[1]; (*fCovarPolY)(0,2) = fSumPolY[2];
  (*fCovarPolY)(1,0) = fSumPolY[1]; (*fCovarPolY)(1,1) = fSumPolY[2]; (*fCovarPolY)(1,2) = fSumPolY[3];
  (*fCovarPolY)(2,0) = fSumPolY[2]; (*fCovarPolY)(2,1) = fSumPolY[3]; (*fCovarPolY)(2,2) = fSumPolY[4];
  fCovarPolY->Invert();
  //

  (*fCovarPolZ)(0,0) = fSumPolZ[0]; (*fCovarPolZ)(0,1) = fSumPolZ[1];
  (*fCovarPolZ)(1,0) = fSumPolZ[1]; (*fCovarPolZ)(1,1) = fSumPolZ[2];
  fCovarPolZ->Invert();
  //
}

Double_t  AliRieman::GetErrY(Double_t x) const{
  //
  //    P0'  = P0 + P1 * x +  P2 * x^2 
  //    P1'  =      P1     +  P2 * x
  //    P2'  =             +  P2
  TMatrixD trans(3,3);
  trans(0,0) = 1;
  trans(0,1) = x;
  trans(0,2) = x*x;
  trans(1,1) = 1;
  trans(1,2) = x;
  trans(2,2) = 1;
  //
  TMatrixD covarX(trans,TMatrixD::kMult,*fCovarPolY);
  covarX*=trans.T();
  return covarX(0,0);
}

Double_t  AliRieman::GetErrZ(Double_t x) const{
  //
  //    assumption error of curvature determination neggligible
  //
  //    P0'  = P0 + P1 * x  
  //    P1'  =      P1    
  TMatrixD trans(2,2);
  trans(0,0) = 1;
  trans(0,1) = x;
  trans(1,1) = 1;
  //
  TMatrixD covarX(trans,TMatrixD::kMult,*fCovarPolZ);
  covarX*=trans.T();
  return covarX(0,0);
}

Bool_t AliRieman::GetExternalParameters(Double_t xref, Double_t *params, Double_t * covar){
  //
  // Get external parameters
  // + approximative covariance  
  //  0  1  2  3  4      // y   - local y
  //     5  6  7  8      // z   - local z
  //        9  10 11     // snp - local sin fi  
  //           12 13     // tgl - deep angle
  //              14     // C   - curvature
  Double_t sign = (GetC()>0) ? 1.:-1.;

  params[0] = GetYat(xref);
  params[1] = GetZat(xref);
  params[2] = TMath::Sin(TMath::ATan(GetDYat(xref)));
  params[3] = sign*fParams[4];
  params[4] = GetC();
  //
  // covariance matrix in y 
  //
  TMatrixD transY(3,3);
  transY(0,0) = 1;
  transY(0,1) = xref;
  transY(0,2) = xref*xref;
  transY(1,1) = 1;
  transY(1,2) = xref;
  transY(2,2) = 1;
  TMatrixD covarY(transY,TMatrixD::kMult,*fCovarPolY);
  covarY*=transY.T();
  //
  TMatrixD transZ(2,2);
  transZ(0,0) = 1;
  transZ(0,1) = xref;
  transZ(1,1) = 1;
  TMatrixD covarZ(transZ,TMatrixD::kMult,*fCovarPolZ);
  covarZ*=transZ.T();
  //
  // C ~ 2*P2 - in rotated frame
  //
  covar[0]  = covarY(0,0);  covar[1] = 0; covar[2] = covarY(0,1); covar[3] = 0; covar[4] = TMath::Sqrt(2.)*covarY(0,2);
  covar[5]  = covarZ(0,0);  covar[6] = 0; covar[7] = sign*covarZ(0,1); covar[8] = 0;
  covar[9]  = covarY(1,1);  covar[10]= 0; covar[11]= TMath::Sqrt(2.)*covarY(1,2);  
  covar[12] = covarZ(1,1);  covar[13]= 0; 
  covar[14] = 2.*covarY(2,2);
  //
  return fConv;
}




Double_t AliRieman::GetYat(Double_t x) const {
  //
  // get y at given x position
  //
  if (!fConv) return 0.;
  Double_t res2 = (x*fParams[0]+fParams[1]);
  res2*=res2;
  res2 = 1.-fParams[2]*fParams[0]+fParams[1]*fParams[1]-res2;
  if (res2<0) return 0;
  res2 = TMath::Sqrt(res2);
  res2 = (1-res2)/fParams[0];
  return res2;
}

Double_t AliRieman::GetDYat(Double_t x) const {
  //
  // get dy/dx at given x position
  //
  if (!fConv) return 0.;
  Double_t x0 = -fParams[1]/fParams[0];
  if (-fParams[2]*fParams[0]+fParams[1]*fParams[1]+1<0) return 0;
  Double_t rm1  = fParams[0]/TMath::Sqrt(-fParams[2]*fParams[0]+fParams[1]*fParams[1]+1); 
  Double_t arg = (1./rm1-(x-x0))*(1./rm1+(x-x0));
  if ( arg <= 0) return 0;
  Double_t res = (x-x0)/TMath::Sqrt(arg);
  if (fParams[0]<0) res*=-1.;
  return res;
}



Double_t AliRieman::GetZat(Double_t x) const {
  //
  // get z at given x position
  //
  if (!fConv) return 0.;
  Double_t x0 = -fParams[1]/fParams[0];
  if (-fParams[2]*fParams[0]+fParams[1]*fParams[1]+1<=0) return 0;
  Double_t rm1  = fParams[0]/TMath::Sqrt(-fParams[2]*fParams[0]+fParams[1]*fParams[1]+1); 
  Double_t phi  = TMath::ASin((x-x0)*rm1);
  Double_t phi0 = TMath::ASin((0.-x0)*rm1);
  Double_t dphi = (phi-phi0);
  Double_t res = fParams[3]+fParams[4]*dphi/rm1;
  return res;
}

Double_t AliRieman::GetDZat(Double_t x) const {
  //
  // get dz/dx at given x postion
  //
  if (!fConv) return 0.;
  Double_t x0 = -fParams[1]/fParams[0]; 
  if  (-fParams[2]*fParams[0]+fParams[1]*fParams[1]+1<=0) return 0;
  Double_t rm1  = fParams[0]/TMath::Sqrt(-fParams[2]*fParams[0]+fParams[1]*fParams[1]+1); 
  Double_t res = fParams[4]/TMath::Cos(TMath::ASin((x-x0)*rm1));
  return res;
}


//_____________________________________________________________________________
Bool_t AliRieman::GetXYZat(Double_t r, Double_t alpha, Float_t *xyz) const
{
  //
  // Returns position given radius
  //
  if (!fConv) return kFALSE;
  Double_t res2 = (r*fParams[0]+fParams[1]);
  res2*=res2;
  res2 = 1.-fParams[2]*fParams[0]+fParams[1]*fParams[1]-res2;
  if (res2<0) return kFALSE;
  res2 = TMath::Sqrt(res2);
  res2 = (1-res2)/fParams[0];

  if (!fConv) return kFALSE;
  Double_t x0 = -fParams[1]/fParams[0];
  if (-fParams[2]*fParams[0]+fParams[1]*fParams[1]+1<=0) return 0;
  Double_t rm1  = fParams[0]/TMath::Sqrt(-fParams[2]*fParams[0]+fParams[1]*fParams[1]+1); 
  Double_t phi  = TMath::ASin((r-x0)*rm1);
  Double_t phi0 = TMath::ASin((0.-x0)*rm1);
  Double_t dphi = (phi-phi0);
  Double_t res = fParams[3]+fParams[4]*dphi/rm1;

  Double_t sin = TMath::Sin(alpha);
  Double_t cos = TMath::Cos(alpha);
  xyz[0] = r*cos - res2*sin;
  xyz[1] = res2*cos + r*sin;
  xyz[2] = res;

  return kTRUE;
}


Double_t AliRieman::GetC() const{
  //
  // get curvature
  //
  return fParams[0]/TMath::Sqrt(-fParams[2]*fParams[0]+fParams[1]*fParams[1]+1);
}

Double_t AliRieman::CalcChi2Y() const{ 
  //
  // calculate chi2 for Y
  //
  Double_t sumchi2 = 0;
  for (Int_t i=0;i<fN;i++){
    Double_t chi2 = (fY[i] - GetYat(fX[i]))/fSy[i];
    sumchi2+=chi2*chi2;    
  }  
  return sumchi2;
}


Double_t AliRieman::CalcChi2Z() const{
  //
  // calculate chi2 for Z
  //
  Double_t sumchi2 = 0;
  for (Int_t i=0;i<fN;i++){
    Double_t chi2 = (fZ[i] - GetZat(fX[i]))/fSy[i];
    sumchi2+=chi2*chi2;    
  }  
  return sumchi2;
}

Double_t AliRieman::CalcChi2() const{
  //
  // sum chi2 in both coord - supposing Y and Z independent
  //
  return CalcChi2Y()+CalcChi2Z();
}

AliRieman * AliRieman::MakeResiduals() const{
  //
  // create residual structure - ONLY for debug purposes
  //
  AliRieman *rieman = new AliRieman(fN);  
  for (Int_t i=0;i<fN;i++){
    rieman->AddPoint(fX[i],fY[i]-GetYat(fX[i]),fZ[i]-GetZat(fX[i]), fSy[i],fSz[i]);
  }
  return rieman;
}


 AliRieman.cxx:1
 AliRieman.cxx:2
 AliRieman.cxx:3
 AliRieman.cxx:4
 AliRieman.cxx:5
 AliRieman.cxx:6
 AliRieman.cxx:7
 AliRieman.cxx:8
 AliRieman.cxx:9
 AliRieman.cxx:10
 AliRieman.cxx:11
 AliRieman.cxx:12
 AliRieman.cxx:13
 AliRieman.cxx:14
 AliRieman.cxx:15
 AliRieman.cxx:16
 AliRieman.cxx:17
 AliRieman.cxx:18
 AliRieman.cxx:19
 AliRieman.cxx:20
 AliRieman.cxx:21
 AliRieman.cxx:22
 AliRieman.cxx:23
 AliRieman.cxx:24
 AliRieman.cxx:25
 AliRieman.cxx:26
 AliRieman.cxx:27
 AliRieman.cxx:28
 AliRieman.cxx:29
 AliRieman.cxx:30
 AliRieman.cxx:31
 AliRieman.cxx:32
 AliRieman.cxx:33
 AliRieman.cxx:34
 AliRieman.cxx:35
 AliRieman.cxx:36
 AliRieman.cxx:37
 AliRieman.cxx:38
 AliRieman.cxx:39
 AliRieman.cxx:40
 AliRieman.cxx:41
 AliRieman.cxx:42
 AliRieman.cxx:43
 AliRieman.cxx:44
 AliRieman.cxx:45
 AliRieman.cxx:46
 AliRieman.cxx:47
 AliRieman.cxx:48
 AliRieman.cxx:49
 AliRieman.cxx:50
 AliRieman.cxx:51
 AliRieman.cxx:52
 AliRieman.cxx:53
 AliRieman.cxx:54
 AliRieman.cxx:55
 AliRieman.cxx:56
 AliRieman.cxx:57
 AliRieman.cxx:58
 AliRieman.cxx:59
 AliRieman.cxx:60
 AliRieman.cxx:61
 AliRieman.cxx:62
 AliRieman.cxx:63
 AliRieman.cxx:64
 AliRieman.cxx:65
 AliRieman.cxx:66
 AliRieman.cxx:67
 AliRieman.cxx:68
 AliRieman.cxx:69
 AliRieman.cxx:70
 AliRieman.cxx:71
 AliRieman.cxx:72
 AliRieman.cxx:73
 AliRieman.cxx:74
 AliRieman.cxx:75
 AliRieman.cxx:76
 AliRieman.cxx:77
 AliRieman.cxx:78
 AliRieman.cxx:79
 AliRieman.cxx:80
 AliRieman.cxx:81
 AliRieman.cxx:82
 AliRieman.cxx:83
 AliRieman.cxx:84
 AliRieman.cxx:85
 AliRieman.cxx:86
 AliRieman.cxx:87
 AliRieman.cxx:88
 AliRieman.cxx:89
 AliRieman.cxx:90
 AliRieman.cxx:91
 AliRieman.cxx:92
 AliRieman.cxx:93
 AliRieman.cxx:94
 AliRieman.cxx:95
 AliRieman.cxx:96
 AliRieman.cxx:97
 AliRieman.cxx:98
 AliRieman.cxx:99
 AliRieman.cxx:100
 AliRieman.cxx:101
 AliRieman.cxx:102
 AliRieman.cxx:103
 AliRieman.cxx:104
 AliRieman.cxx:105
 AliRieman.cxx:106
 AliRieman.cxx:107
 AliRieman.cxx:108
 AliRieman.cxx:109
 AliRieman.cxx:110
 AliRieman.cxx:111
 AliRieman.cxx:112
 AliRieman.cxx:113
 AliRieman.cxx:114
 AliRieman.cxx:115
 AliRieman.cxx:116
 AliRieman.cxx:117
 AliRieman.cxx:118
 AliRieman.cxx:119
 AliRieman.cxx:120
 AliRieman.cxx:121
 AliRieman.cxx:122
 AliRieman.cxx:123
 AliRieman.cxx:124
 AliRieman.cxx:125
 AliRieman.cxx:126
 AliRieman.cxx:127
 AliRieman.cxx:128
 AliRieman.cxx:129
 AliRieman.cxx:130
 AliRieman.cxx:131
 AliRieman.cxx:132
 AliRieman.cxx:133
 AliRieman.cxx:134
 AliRieman.cxx:135
 AliRieman.cxx:136
 AliRieman.cxx:137
 AliRieman.cxx:138
 AliRieman.cxx:139
 AliRieman.cxx:140
 AliRieman.cxx:141
 AliRieman.cxx:142
 AliRieman.cxx:143
 AliRieman.cxx:144
 AliRieman.cxx:145
 AliRieman.cxx:146
 AliRieman.cxx:147
 AliRieman.cxx:148
 AliRieman.cxx:149
 AliRieman.cxx:150
 AliRieman.cxx:151
 AliRieman.cxx:152
 AliRieman.cxx:153
 AliRieman.cxx:154
 AliRieman.cxx:155
 AliRieman.cxx:156
 AliRieman.cxx:157
 AliRieman.cxx:158
 AliRieman.cxx:159
 AliRieman.cxx:160
 AliRieman.cxx:161
 AliRieman.cxx:162
 AliRieman.cxx:163
 AliRieman.cxx:164
 AliRieman.cxx:165
 AliRieman.cxx:166
 AliRieman.cxx:167
 AliRieman.cxx:168
 AliRieman.cxx:169
 AliRieman.cxx:170
 AliRieman.cxx:171
 AliRieman.cxx:172
 AliRieman.cxx:173
 AliRieman.cxx:174
 AliRieman.cxx:175
 AliRieman.cxx:176
 AliRieman.cxx:177
 AliRieman.cxx:178
 AliRieman.cxx:179
 AliRieman.cxx:180
 AliRieman.cxx:181
 AliRieman.cxx:182
 AliRieman.cxx:183
 AliRieman.cxx:184
 AliRieman.cxx:185
 AliRieman.cxx:186
 AliRieman.cxx:187
 AliRieman.cxx:188
 AliRieman.cxx:189
 AliRieman.cxx:190
 AliRieman.cxx:191
 AliRieman.cxx:192
 AliRieman.cxx:193
 AliRieman.cxx:194
 AliRieman.cxx:195
 AliRieman.cxx:196
 AliRieman.cxx:197
 AliRieman.cxx:198
 AliRieman.cxx:199
 AliRieman.cxx:200
 AliRieman.cxx:201
 AliRieman.cxx:202
 AliRieman.cxx:203
 AliRieman.cxx:204
 AliRieman.cxx:205
 AliRieman.cxx:206
 AliRieman.cxx:207
 AliRieman.cxx:208
 AliRieman.cxx:209
 AliRieman.cxx:210
 AliRieman.cxx:211
 AliRieman.cxx:212
 AliRieman.cxx:213
 AliRieman.cxx:214
 AliRieman.cxx:215
 AliRieman.cxx:216
 AliRieman.cxx:217
 AliRieman.cxx:218
 AliRieman.cxx:219
 AliRieman.cxx:220
 AliRieman.cxx:221
 AliRieman.cxx:222
 AliRieman.cxx:223
 AliRieman.cxx:224
 AliRieman.cxx:225
 AliRieman.cxx:226
 AliRieman.cxx:227
 AliRieman.cxx:228
 AliRieman.cxx:229
 AliRieman.cxx:230
 AliRieman.cxx:231
 AliRieman.cxx:232
 AliRieman.cxx:233
 AliRieman.cxx:234
 AliRieman.cxx:235
 AliRieman.cxx:236
 AliRieman.cxx:237
 AliRieman.cxx:238
 AliRieman.cxx:239
 AliRieman.cxx:240
 AliRieman.cxx:241
 AliRieman.cxx:242
 AliRieman.cxx:243
 AliRieman.cxx:244
 AliRieman.cxx:245
 AliRieman.cxx:246
 AliRieman.cxx:247
 AliRieman.cxx:248
 AliRieman.cxx:249
 AliRieman.cxx:250
 AliRieman.cxx:251
 AliRieman.cxx:252
 AliRieman.cxx:253
 AliRieman.cxx:254
 AliRieman.cxx:255
 AliRieman.cxx:256
 AliRieman.cxx:257
 AliRieman.cxx:258
 AliRieman.cxx:259
 AliRieman.cxx:260
 AliRieman.cxx:261
 AliRieman.cxx:262
 AliRieman.cxx:263
 AliRieman.cxx:264
 AliRieman.cxx:265
 AliRieman.cxx:266
 AliRieman.cxx:267
 AliRieman.cxx:268
 AliRieman.cxx:269
 AliRieman.cxx:270
 AliRieman.cxx:271
 AliRieman.cxx:272
 AliRieman.cxx:273
 AliRieman.cxx:274
 AliRieman.cxx:275
 AliRieman.cxx:276
 AliRieman.cxx:277
 AliRieman.cxx:278
 AliRieman.cxx:279
 AliRieman.cxx:280
 AliRieman.cxx:281
 AliRieman.cxx:282
 AliRieman.cxx:283
 AliRieman.cxx:284
 AliRieman.cxx:285
 AliRieman.cxx:286
 AliRieman.cxx:287
 AliRieman.cxx:288
 AliRieman.cxx:289
 AliRieman.cxx:290
 AliRieman.cxx:291
 AliRieman.cxx:292
 AliRieman.cxx:293
 AliRieman.cxx:294
 AliRieman.cxx:295
 AliRieman.cxx:296
 AliRieman.cxx:297
 AliRieman.cxx:298
 AliRieman.cxx:299
 AliRieman.cxx:300
 AliRieman.cxx:301
 AliRieman.cxx:302
 AliRieman.cxx:303
 AliRieman.cxx:304
 AliRieman.cxx:305
 AliRieman.cxx:306
 AliRieman.cxx:307
 AliRieman.cxx:308
 AliRieman.cxx:309
 AliRieman.cxx:310
 AliRieman.cxx:311
 AliRieman.cxx:312
 AliRieman.cxx:313
 AliRieman.cxx:314
 AliRieman.cxx:315
 AliRieman.cxx:316
 AliRieman.cxx:317
 AliRieman.cxx:318
 AliRieman.cxx:319
 AliRieman.cxx:320
 AliRieman.cxx:321
 AliRieman.cxx:322
 AliRieman.cxx:323
 AliRieman.cxx:324
 AliRieman.cxx:325
 AliRieman.cxx:326
 AliRieman.cxx:327
 AliRieman.cxx:328
 AliRieman.cxx:329
 AliRieman.cxx:330
 AliRieman.cxx:331
 AliRieman.cxx:332
 AliRieman.cxx:333
 AliRieman.cxx:334
 AliRieman.cxx:335
 AliRieman.cxx:336
 AliRieman.cxx:337
 AliRieman.cxx:338
 AliRieman.cxx:339
 AliRieman.cxx:340
 AliRieman.cxx:341
 AliRieman.cxx:342
 AliRieman.cxx:343
 AliRieman.cxx:344
 AliRieman.cxx:345
 AliRieman.cxx:346
 AliRieman.cxx:347
 AliRieman.cxx:348
 AliRieman.cxx:349
 AliRieman.cxx:350
 AliRieman.cxx:351
 AliRieman.cxx:352
 AliRieman.cxx:353
 AliRieman.cxx:354
 AliRieman.cxx:355
 AliRieman.cxx:356
 AliRieman.cxx:357
 AliRieman.cxx:358
 AliRieman.cxx:359
 AliRieman.cxx:360
 AliRieman.cxx:361
 AliRieman.cxx:362
 AliRieman.cxx:363
 AliRieman.cxx:364
 AliRieman.cxx:365
 AliRieman.cxx:366
 AliRieman.cxx:367
 AliRieman.cxx:368
 AliRieman.cxx:369
 AliRieman.cxx:370
 AliRieman.cxx:371
 AliRieman.cxx:372
 AliRieman.cxx:373
 AliRieman.cxx:374
 AliRieman.cxx:375
 AliRieman.cxx:376
 AliRieman.cxx:377
 AliRieman.cxx:378
 AliRieman.cxx:379
 AliRieman.cxx:380
 AliRieman.cxx:381
 AliRieman.cxx:382
 AliRieman.cxx:383
 AliRieman.cxx:384
 AliRieman.cxx:385
 AliRieman.cxx:386
 AliRieman.cxx:387
 AliRieman.cxx:388
 AliRieman.cxx:389
 AliRieman.cxx:390
 AliRieman.cxx:391
 AliRieman.cxx:392
 AliRieman.cxx:393
 AliRieman.cxx:394
 AliRieman.cxx:395
 AliRieman.cxx:396
 AliRieman.cxx:397
 AliRieman.cxx:398
 AliRieman.cxx:399
 AliRieman.cxx:400
 AliRieman.cxx:401
 AliRieman.cxx:402
 AliRieman.cxx:403
 AliRieman.cxx:404
 AliRieman.cxx:405
 AliRieman.cxx:406
 AliRieman.cxx:407
 AliRieman.cxx:408
 AliRieman.cxx:409
 AliRieman.cxx:410
 AliRieman.cxx:411
 AliRieman.cxx:412
 AliRieman.cxx:413
 AliRieman.cxx:414
 AliRieman.cxx:415
 AliRieman.cxx:416
 AliRieman.cxx:417
 AliRieman.cxx:418
 AliRieman.cxx:419
 AliRieman.cxx:420
 AliRieman.cxx:421
 AliRieman.cxx:422
 AliRieman.cxx:423
 AliRieman.cxx:424
 AliRieman.cxx:425
 AliRieman.cxx:426
 AliRieman.cxx:427
 AliRieman.cxx:428
 AliRieman.cxx:429
 AliRieman.cxx:430
 AliRieman.cxx:431
 AliRieman.cxx:432
 AliRieman.cxx:433
 AliRieman.cxx:434
 AliRieman.cxx:435
 AliRieman.cxx:436
 AliRieman.cxx:437
 AliRieman.cxx:438
 AliRieman.cxx:439
 AliRieman.cxx:440
 AliRieman.cxx:441
 AliRieman.cxx:442
 AliRieman.cxx:443
 AliRieman.cxx:444
 AliRieman.cxx:445
 AliRieman.cxx:446
 AliRieman.cxx:447
 AliRieman.cxx:448
 AliRieman.cxx:449
 AliRieman.cxx:450
 AliRieman.cxx:451
 AliRieman.cxx:452
 AliRieman.cxx:453
 AliRieman.cxx:454
 AliRieman.cxx:455
 AliRieman.cxx:456
 AliRieman.cxx:457
 AliRieman.cxx:458
 AliRieman.cxx:459
 AliRieman.cxx:460
 AliRieman.cxx:461
 AliRieman.cxx:462
 AliRieman.cxx:463
 AliRieman.cxx:464
 AliRieman.cxx:465
 AliRieman.cxx:466
 AliRieman.cxx:467
 AliRieman.cxx:468
 AliRieman.cxx:469
 AliRieman.cxx:470
 AliRieman.cxx:471
 AliRieman.cxx:472
 AliRieman.cxx:473
 AliRieman.cxx:474
 AliRieman.cxx:475
 AliRieman.cxx:476
 AliRieman.cxx:477
 AliRieman.cxx:478
 AliRieman.cxx:479
 AliRieman.cxx:480
 AliRieman.cxx:481
 AliRieman.cxx:482
 AliRieman.cxx:483
 AliRieman.cxx:484
 AliRieman.cxx:485
 AliRieman.cxx:486
 AliRieman.cxx:487
 AliRieman.cxx:488
 AliRieman.cxx:489
 AliRieman.cxx:490
 AliRieman.cxx:491
 AliRieman.cxx:492
 AliRieman.cxx:493
 AliRieman.cxx:494
 AliRieman.cxx:495
 AliRieman.cxx:496
 AliRieman.cxx:497
 AliRieman.cxx:498
 AliRieman.cxx:499
 AliRieman.cxx:500
 AliRieman.cxx:501
 AliRieman.cxx:502
 AliRieman.cxx:503
 AliRieman.cxx:504
 AliRieman.cxx:505
 AliRieman.cxx:506
 AliRieman.cxx:507
 AliRieman.cxx:508
 AliRieman.cxx:509
 AliRieman.cxx:510
 AliRieman.cxx:511
 AliRieman.cxx:512
 AliRieman.cxx:513
 AliRieman.cxx:514
 AliRieman.cxx:515
 AliRieman.cxx:516
 AliRieman.cxx:517
 AliRieman.cxx:518
 AliRieman.cxx:519
 AliRieman.cxx:520
 AliRieman.cxx:521
 AliRieman.cxx:522
 AliRieman.cxx:523
 AliRieman.cxx:524
 AliRieman.cxx:525
 AliRieman.cxx:526
 AliRieman.cxx:527
 AliRieman.cxx:528
 AliRieman.cxx:529
 AliRieman.cxx:530
 AliRieman.cxx:531
 AliRieman.cxx:532
 AliRieman.cxx:533
 AliRieman.cxx:534
 AliRieman.cxx:535
 AliRieman.cxx:536
 AliRieman.cxx:537
 AliRieman.cxx:538
 AliRieman.cxx:539
 AliRieman.cxx:540
 AliRieman.cxx:541
 AliRieman.cxx:542
 AliRieman.cxx:543
 AliRieman.cxx:544
 AliRieman.cxx:545
 AliRieman.cxx:546
 AliRieman.cxx:547
 AliRieman.cxx:548
 AliRieman.cxx:549
 AliRieman.cxx:550
 AliRieman.cxx:551
 AliRieman.cxx:552
 AliRieman.cxx:553
 AliRieman.cxx:554
 AliRieman.cxx:555
 AliRieman.cxx:556
 AliRieman.cxx:557
 AliRieman.cxx:558
 AliRieman.cxx:559
 AliRieman.cxx:560
 AliRieman.cxx:561
 AliRieman.cxx:562
 AliRieman.cxx:563
 AliRieman.cxx:564
 AliRieman.cxx:565
 AliRieman.cxx:566
 AliRieman.cxx:567
 AliRieman.cxx:568
 AliRieman.cxx:569
 AliRieman.cxx:570
 AliRieman.cxx:571
 AliRieman.cxx:572
 AliRieman.cxx:573
 AliRieman.cxx:574
 AliRieman.cxx:575
 AliRieman.cxx:576
 AliRieman.cxx:577
 AliRieman.cxx:578
 AliRieman.cxx:579
 AliRieman.cxx:580
 AliRieman.cxx:581
 AliRieman.cxx:582
 AliRieman.cxx:583
 AliRieman.cxx:584
 AliRieman.cxx:585
 AliRieman.cxx:586
 AliRieman.cxx:587
 AliRieman.cxx:588
 AliRieman.cxx:589
 AliRieman.cxx:590
 AliRieman.cxx:591
 AliRieman.cxx:592
 AliRieman.cxx:593
 AliRieman.cxx:594
 AliRieman.cxx:595
 AliRieman.cxx:596
 AliRieman.cxx:597
 AliRieman.cxx:598
 AliRieman.cxx:599
 AliRieman.cxx:600
 AliRieman.cxx:601
 AliRieman.cxx:602
 AliRieman.cxx:603
 AliRieman.cxx:604
 AliRieman.cxx:605
 AliRieman.cxx:606
 AliRieman.cxx:607
 AliRieman.cxx:608
 AliRieman.cxx:609
 AliRieman.cxx:610
 AliRieman.cxx:611
 AliRieman.cxx:612
 AliRieman.cxx:613
 AliRieman.cxx:614
 AliRieman.cxx:615
 AliRieman.cxx:616
 AliRieman.cxx:617
 AliRieman.cxx:618
 AliRieman.cxx:619
 AliRieman.cxx:620
 AliRieman.cxx:621
 AliRieman.cxx:622
 AliRieman.cxx:623
 AliRieman.cxx:624
 AliRieman.cxx:625
 AliRieman.cxx:626
 AliRieman.cxx:627
 AliRieman.cxx:628
 AliRieman.cxx:629
 AliRieman.cxx:630
 AliRieman.cxx:631
 AliRieman.cxx:632
 AliRieman.cxx:633
 AliRieman.cxx:634
 AliRieman.cxx:635
 AliRieman.cxx:636
 AliRieman.cxx:637
 AliRieman.cxx:638
 AliRieman.cxx:639
 AliRieman.cxx:640
 AliRieman.cxx:641
 AliRieman.cxx:642
 AliRieman.cxx:643
 AliRieman.cxx:644
 AliRieman.cxx:645
 AliRieman.cxx:646
 AliRieman.cxx:647
 AliRieman.cxx:648
 AliRieman.cxx:649
 AliRieman.cxx:650
 AliRieman.cxx:651
 AliRieman.cxx:652
 AliRieman.cxx:653
 AliRieman.cxx:654
 AliRieman.cxx:655
 AliRieman.cxx:656
 AliRieman.cxx:657
 AliRieman.cxx:658
 AliRieman.cxx:659
 AliRieman.cxx:660
 AliRieman.cxx:661
 AliRieman.cxx:662
 AliRieman.cxx:663
 AliRieman.cxx:664
 AliRieman.cxx:665
 AliRieman.cxx:666
 AliRieman.cxx:667
 AliRieman.cxx:668
 AliRieman.cxx:669
 AliRieman.cxx:670
 AliRieman.cxx:671
 AliRieman.cxx:672
 AliRieman.cxx:673
 AliRieman.cxx:674
 AliRieman.cxx:675
 AliRieman.cxx:676
 AliRieman.cxx:677
 AliRieman.cxx:678
 AliRieman.cxx:679
 AliRieman.cxx:680
 AliRieman.cxx:681
 AliRieman.cxx:682
 AliRieman.cxx:683
 AliRieman.cxx:684
 AliRieman.cxx:685
 AliRieman.cxx:686
 AliRieman.cxx:687
 AliRieman.cxx:688
 AliRieman.cxx:689
 AliRieman.cxx:690
 AliRieman.cxx:691
 AliRieman.cxx:692
 AliRieman.cxx:693
 AliRieman.cxx:694
 AliRieman.cxx:695
 AliRieman.cxx:696
 AliRieman.cxx:697
 AliRieman.cxx:698
 AliRieman.cxx:699
 AliRieman.cxx:700