#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;
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)
{
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)
{
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)
{
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)
{
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()
{
delete fParSol;
delete[] fCovI;
delete[] fCurT;
delete[] fElsId;
delete[] fElsDR;
}
void AliITSTPArrayFit::Reset()
{
if (fParSol) fParSol->Clear();
fkPoints=0;
fNElsPnt = 0;
fFirstPosT = 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)
{
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)
{
const AliTrackPointArray* pnts = fkPoints;
if (!pnts) {AliError("TrackPointArray is not attached yet"); return kFALSE;}
AttachPoints(pnts,pfirst,plast);
return kTRUE;
}
Bool_t AliITSTPArrayFit::InvertPointsCovMat()
{
for (int i=fPntFirst;i<=fPntLast;i++) {
float *cov = (float*)fkPoints->GetCov() + i*6;
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)) {
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();
hcov.Multiply(&hrotI);
hcov.MultiplyLeft(&hrot);
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;
hcov.Multiply(&hrot);
hcov.MultiplyLeft(&hrotI);
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()
{
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()
{
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)
{
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
{
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
{
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
{
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
{
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
{
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) const
{
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 *covI) const
{
Double_t dTdP[3];
GetDtDPosLine(dTdP, covI);
for (int i=3;i--;) {
int var = fkAxID[i];
Double_t *curd = dXYZdP + var*3;
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) const
{
Double_t dTdP[4];
Double_t t = GetDtDParamsLine(dTdP, xyz, covI );
Double_t *curd = dXYZdP + kA0*3;
curd[ fkAxID[kX] ] = fParams[kB0]*dTdP[kA0] + 1.;
curd[ fkAxID[kY] ] = fParams[kB1]*dTdP[kA0];
curd[ fkAxID[kZ] ] = dTdP[kA0];
curd = dXYZdP + kB0*3;
curd[ fkAxID[kX] ] = fParams[kB0]*dTdP[kB0] + t;
curd[ fkAxID[kY] ] = fParams[kB1]*dTdP[kB0];
curd[ fkAxID[kZ] ] = dTdP[kB0];
curd = dXYZdP + kA1*3;
curd[ fkAxID[kX] ] = fParams[kB0]*dTdP[kA1];
curd[ fkAxID[kY] ] = fParams[kB1]*dTdP[kA1] + 1.;
curd[ fkAxID[kZ] ] = dTdP[kA1];
curd = dXYZdP + kB1*3;
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
{
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;
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 *covI) const
{
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] ];
denom = -(fParams[kB0]*(covI[ fkAxCID[kXZ] ] + tx) + fParams[kB1]*(covI[ fkAxCID[kYZ] ] + ty) + covI[ fkAxCID[kZZ] ]);
rhsDX = -tx;
rhsDY = -ty;
rhsDZ = -tz;
}
else {
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;
}
void AliITSTPArrayFit::GetDResDParamsLine(Double_t *dXYZdP, Int_t ipnt) const
{
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
{
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));
}
void AliITSTPArrayFit::GetDResDParams(Double_t *dXYZdP, Int_t ipnt)
{
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)
{
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)
{
if (!IsHelix()) {
GetDResDParamsLine(dXYZdP, xyz, covI );
return;
}
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;
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
{
if (!IsHelix()) {
GetDResDPosLine(dXYZdP, covI );
return;
}
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;
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
{
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]);
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];
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 {
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
{
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
{
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
{
Double_t chi2 = 0;
Double_t dr[3];
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];
chi2 += chi2p;
}
int ndf = (fPntLast-fPntFirst+1)*3 - GetNParams();
chi2 /= ndf;
return chi2;
}
void AliITSTPArrayFit::GetResiduals(Double_t *res,Int_t ipnt) const
{
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
{
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++) {
int indE = fElsId[i];
if ( t<fCurT[indE] ) break;
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];
}
} else {
for (int i=fFirstPosT;i--;) {
int indE = fElsId[i];
if ( t>=fCurT[indE] ) break;
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];
}
}
}
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);
}
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
{
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];
}
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;
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];
}
else if (dircos[kY]>0) for (int i=3;i--;) dircos[i] = -dircos[i];
}
}
Double_t AliITSTPArrayFit::GetMachinePrec()
{
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)
{
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;
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;
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);
double yshift = (ymx+ymn)/2 - 10*(xmx-xmn);
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++) {
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;
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 eg2 = trace3 - p*(csp+kSqrt3*snp);
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;
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);
int sqb;
if (extQ) {
SetCharge(extQ);
sqb = fBz<0 ? -GetCharge():GetCharge();
}
else {
if ( IsTypeCosmics() ) sqb = xc>0 ? -1:1;
else {
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];
UInt_t hitLrPos=0;
UInt_t hitLrNeg=0;
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];
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;
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);
else hitLrNeg |= (1<<lr);
}
}
}
double det = ss*stt - st*st;
if (TMath::Abs(det)<fgkAlmostZero) {
fParams[kDZ] = sz/ss;
fParams[kDip] = 0;
}
else {
fParams[kDZ] = (sz*stt-st*szt)/det;
fParams[kDip] = -(ss*szt-st*sz)/det/fParams[kR0];
}
if (eloss) {
fNElsPnt = fPntLast - fPntFirst + 1;
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;
tcur[fNElsPnt] = GetSignQB()>0 ? -tp : tp;
ecur[fNElsPnt] = fgRhoLITS[ id ];
fNElsPnt++;
if (IsTypeCosmics() && !IsZero(tp)) {
tcur[fNElsPnt] = -tcur[fNElsPnt-1];
ecur[fNElsPnt] = ecur[fNElsPnt-1];
fNElsPnt++;
}
}
for (int ilp=6;ilp--;) {
int id = fgkActiveLrITS[ilp];
double tp = GetHelixParAtR( fgkRLayITS[ id ] );
if (tp<0) continue;
if ( (GetSignQB()>0||IsTypeCosmics()) && !(hitLrNeg & (1<<id)) ) {
tcur[fNElsPnt] = -tp;
ecur[fNElsPnt] = fgRhoLITS[ id ];
fNElsPnt++;
}
if ( (GetSignQB()<0||IsTypeCosmics()) && !(hitLrPos & (1<<id)) ) {
tcur[fNElsPnt] = tp;
ecur[fNElsPnt] = fgRhoLITS[ id ];
fNElsPnt++;
}
}
TMath::Sort(fNElsPnt,fCurT+fPntFirst,fElsId,kFALSE);
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);
Double_t etot = TMath::Sqrt(ptot*ptot + fMass*fMass);
Double_t normS[3];
for (int ip=fFirstPosT;ip<fNElsPnt;ip++) {
int tID = fElsId[ip];
Double_t t = fCurT[ tID ];
if (tID>fPntLast) {
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);
normS[1] = -TMath::Sin(php);
normS[2] = 0;
}
else GetNormal(normS,fkPoints->GetCov()+tID*6);
fElsDR[tID] = GetDRofELoss(t,cdip,fElsDR[tID],normS,ptot,etot);
}
for (int ip=fFirstPosT;ip--;) {
int tID = fElsId[ip];
Double_t t = fCurT[ tID ];
if (tID>fPntLast) {
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);
normS[1] = -TMath::Sin(php);
normS[2] = 0;
}
else GetNormal(normS,fkPoints->GetCov()+tID*6);
fElsDR[tID] = GetDRofELoss(t,cdip,fElsDR[tID],normS,ptot,etot);
}
}
return kTRUE;
}
Double_t AliITSTPArrayFit::FitHelix(Int_t extQ, Double_t extPT,Double_t extPTerr)
{
double chiprev=1e99;
Double_t dXYZdGlo[3*5],dXYZdLoc[3],xyzRes[3];
SetFitDone(kFALSE);
fChi2NDF = -1;
if (!FitHelixCrude(extQ)) return -1;
if (TMath::Abs(fParams[kR0])>fMaxRforHelix && extPT<=0) {
fSwitch2Line = kTRUE;
return FitLine();
}
if (!IsCovInv()) InvertPointsCovMat();
if (!fParSol) fParSol = new AliParamSolver(5);
fParSol->SetNGlobal(5);
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);
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;
dXYZdGlo[offs + kX] = cs0;
dXYZdGlo[offs + kY] = sn0;
dXYZdGlo[offs + kZ] = 0;
offs = kPhi0*3;
dXYZdGlo[offs + kX] = -rrho*sn0 + fParams[kR0]*snt;
dXYZdGlo[offs + kY] = rrho*cs0 - fParams[kR0]*cst;
dXYZdGlo[offs + kZ] = 0;
offs = kR0*3;
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;
dXYZdGlo[offs + kX] = 0;
dXYZdGlo[offs + kY] = 0;
dXYZdGlo[offs + kZ] = 1.;
offs = kDip*3;
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];
fParSol->AddEquation(dXYZdGlo,dXYZdLoc,xyzRes,GetCovI(ip),GetCovIScale(ip));
}
if (extPT>0) {
if (extPTerr<fgkAlmostZero) extPTerr = 1e-6*extPT;
Double_t cf = fBz*GetCharge()*fgkCQConv;
Double_t err2i = extPTerr/cf;
err2i = 1./err2i/err2i;
fParSol->AddConstraint(kR0,-extPT/cf+fParams[kR0],err2i);
}
if (!fParSol->Solve()) { AliError("Failed to fit helix"); return -1; }
Double_t *deltaG = fParSol->GetGlobals();
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);
}
iter++;
fChi2NDF = CalcChi2NDF();
double difchi2 = chiprev - fChi2NDF;
if ( difchi2<fEps && TMath::Abs(difchi2)<1e-4) {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();
return fChi2NDF;
}
Double_t AliITSTPArrayFit::FitLine()
{
double chiprev=1e99;
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;
if (!fParSol) fParSol = new AliParamSolver(5);
fParSol->SetNGlobal(4);
for (int ip=fPntFirst;ip<=fPntLast;ip++) fCurT[ip] = xyzp[fParAxis][ip];
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);
offs = kA0*3;
dXYZdGlo[offs + fkAxID[kX]] = 1;
dXYZdGlo[offs + fkAxID[kY]] = 0;
dXYZdGlo[offs + fParAxis ] = 0;
offs = kB0*3;
dXYZdGlo[offs + fkAxID[kX]] = fCurT[ip];
dXYZdGlo[offs + fkAxID[kY]] = 0;
dXYZdGlo[offs + fParAxis ] = 0;
offs = kA1*3;
dXYZdGlo[offs + fkAxID[kX]] = 0;
dXYZdGlo[offs + fkAxID[kY]] = 1;
dXYZdGlo[offs + fParAxis ] = 0;
offs = kB1*3;
dXYZdGlo[offs + fkAxID[kX]] = 0;
dXYZdGlo[offs + fkAxID[kY]] = fCurT[ip];
dXYZdGlo[offs + fParAxis ] = 0;
dXYZdLoc[ fkAxID[kX] ] = fParams[kB0];
dXYZdLoc[ fkAxID[kY] ] = fParams[kB1];
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();
double difchi2 = chiprev - fChi2NDF;
if ( difchi2<fEps && TMath::Abs(difchi2)<1e-4) {converged = kTRUE; break;}
chiprev = fChi2NDF;
}
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();
return fChi2NDF;
}
void AliITSTPArrayFit::GetNormal(Double_t *norm, const Float_t *covMat)
{
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
{
Double_t dirTr[3];
dirTr[0] = -TMath::Sin(fParams[kPhi0]+t);
dirTr[1] = TMath::Cos(fParams[kPhi0]+t);
dirTr[2] = fParams[kDip];
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
{
if (fParAxis<0) return -1E6;
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
{
if (fParAxis<0) return -1E6;
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
{
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)
{
if (!AliGeomManager::GetGeometry()) AliFatal("Geometry is not loaded");
const double kLayr[9][4] = {{0. ,60. , 2.80,3.00},
{1.28,7.07,-0.20,0.22},
{1.28,7.07,-0.20,0.22},
{0. ,76.0, 10.4,11.8},
{7.02,7.53,-1.00,4.50},
{7.02,7.53,-1.00,4.50},
{0. ,102., 29.0,30.0},
{7.50,4.20,-0.15,4.50},
{7.50,4.20,-0.15,4.50}};
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])) {
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;
pg2[0] -= 2*shift;
pg1[1] = tpars[2];
pg2[1] = tpars[3];
pg1[2] = pg2[2] = (gRandom->Rndm()-0.5)*tpars[1] + shift;
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;
pg2[2] -= 2*shift;
}
AliTracker::MeanMaterialBudget(pg1,pg2,res);
rhol += res[0]*res[4];
}
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
{
double xyzp[3] = {0,0,0};
xyzp[axis] = axval;
double covI[6] = {1e-4,0,0,1e-4,0,1e-4};
covI[4*axis - axis*(axis+1)/2] = 1e8;
double t = GetPosition(xyz, xyzp, covI);
if (dir) GetDirCos(dir,t);
return t;
}
void AliITSTPArrayFit::GetT0Info(Double_t* xyz, Double_t *dir) const
{
GetPosition(xyz, 0);
if (dir) GetDirCos(dir,0);
}
Bool_t AliITSTPArrayFit::CalcErrorMatrix()
{
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()) {
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
{
const double *xyz = GetPoint(ipnt);
const double *covI = GetCovI(ipnt);
if (IsHelix()) return GetParPCAHelix(xyz,covI,covI[kScl]);
else return GetParPCALine(xyz,covI);
}
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);
}
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