44 #include <TMatrixDSym.h> 75 for (Int_t i=0;i<6;i++) fParams[i] = 0;
76 for (Int_t i=0;i<9;i++) fSumXY[i] = 0;
77 for (Int_t i=0;i<9;i++) fSumXZ[i] = 0;
78 for (Int_t i=0;i<5;i++) {
89 fX(new Double_t[fCapacity]),
90 fY(new Double_t[fCapacity]),
91 fZ(new Double_t[fCapacity]),
92 fSy(new Double_t[fCapacity]),
93 fSz(new Double_t[fCapacity]),
94 fCovar(new TMatrixDSym(6)),
95 fCovarPolY(new TMatrixDSym(3)),
96 fCovarPolZ(new TMatrixDSym(2)),
106 for (Int_t i=0;i<6;i++)
fParams[i] = 0;
107 for (Int_t i=0;i<9;i++)
fSumXY[i] = 0;
108 for (Int_t i=0;i<9;i++)
fSumXZ[i] = 0;
109 for (Int_t i=0;i<5;i++) {
119 fX(new Double_t[
fN]),
120 fY(new Double_t[
fN]),
121 fZ(new Double_t[
fN]),
122 fSy(new Double_t[
fN]),
123 fSz(new Double_t[
fN]),
140 for (Int_t i=0;i<5;i++) {
144 for (Int_t i=0;i<rieman.
fN;i++){
145 fX[i] = rieman.
fX[i];
146 fY[i] = rieman.
fY[i];
147 fZ[i] = rieman.
fZ[i];
174 for (Int_t i=0;i<6;i++)
fParams[i] = 0;
175 for (Int_t i=0;i<9;i++)
fSumXY[i] = 0;
176 for (Int_t i=0;i<9;i++)
fSumXZ[i] = 0;
177 for (Int_t i=0;i<5;i++) {
219 Double_t t = x*x+y*y;
224 Double_t error = 2.*sy*t;
226 Double_t weight = 1./error;
236 Double_t r = TMath::Sqrt(x*x+y*y);
239 fSumXZ[5] +=weight*r*r*r/24;
fSumXZ[6] +=weight*r*r*r*r/12;
fSumXZ[7] +=weight*r*r*r*z/24;
240 fSumXZ[8] +=weight*r*r*r*r*r*r/(24*24);
245 Double_t maty = 1./(sy*sy);
246 Double_t matz = 1./(sz*sz);
247 for (Int_t i=0;i<5; i++){
263 for (Int_t i=0;i<6;i++)
fParams[i]=0;
268 TMatrixDSym smatrix(3);
280 if (smatrix.IsValid()){
281 for (Int_t i=0;i<3;i++)
282 for (Int_t j=0;j<=i;j++){
283 (*fCovar)(i,j)=smatrix(i,j);
285 TMatrixD
res = sums*smatrix;
303 TMatrixDSym smatrixz(2);
306 smatrixz(0,0) =
fSumXZ[0]; smatrixz(0,1) = sum1; smatrixz(1,1) = sum2;
307 smatrixz(1,0) = sum1;
309 TMatrixD sumsxz(1,2);
310 if (smatrixz.IsValid()){
314 TMatrixD
res = sumsxz*smatrixz;
318 for (Int_t i=0;i<2;i++)
319 for (Int_t j=0;j<=i;j++){
320 (*fCovar)(i+3,j+3)=smatrixz(i,j);
338 if (conv>1)
fConv =kTRUE;
349 for (Int_t i=0;i<6;i++)
fParams[i]=0;
354 TMatrixDSym smatrix(3);
374 if (smatrix.IsValid()){
375 for (Int_t i=0;i<3;i++)
376 for (Int_t j=0;j<3;j++){
377 (*fCovar)(i,j)=smatrix(i,j);
379 TMatrixD
res = sums*smatrix;
400 for (Int_t i=0;i<9;i++) sumXZ[i]=0;
401 for (Int_t i=0;i<
fN;i++){
402 Double_t phi = TMath::ASin((
fX[i]-x0)*rm1);
403 Double_t phi0 = TMath::ASin((0.-x0)*rm1);
404 Double_t weight = 1/
fSz[i];
406 Double_t dphi = (phi-phi0)/rm1;
408 sumXZ[1] +=weight*dphi;
409 sumXZ[2] +=weight*dphi*dphi;
410 sumXZ[3] +=weight*
fZ[i];
411 sumXZ[4] +=weight*dphi*fZ[i];
415 TMatrixDSym smatrixz(2);
417 smatrixz(0,0) = sumXZ[0]; smatrixz(0,1) = sumXZ[1]; smatrixz(1,1) = sumXZ[2];
418 smatrixz(1,0) = sumXZ[1];
420 if (smatrixz.IsValid()){
421 sumsz(0,0) = sumXZ[3];
422 sumsz(0,1) = sumXZ[4];
423 TMatrixD
res = sumsz*smatrixz;
426 for (Int_t i=0;i<2;i++)
427 for (Int_t j=0;j<2;j++){
428 (*fCovar)(i+3,j+3)=smatrixz(i,j);
446 if (conv>1)
fConv =kTRUE;
465 fCovarPolY->Invert();
470 fCovarPolZ->Invert();
487 TMatrixD covarX(trans,TMatrixD::kMult,*
fCovarPolY);
503 TMatrixD covarX(trans,TMatrixD::kMult,*
fCovarPolZ);
517 Double_t sign = (
GetC()>0) ? 1.:-1.;
521 params[2] = TMath::Sin(TMath::ATan(
GetDYat(xref)));
527 TMatrixD transY(3,3);
530 transY(0,2) = xref*xref;
534 TMatrixD covarY(transY,TMatrixD::kMult,*
fCovarPolY);
537 TMatrixD transZ(2,2);
541 TMatrixD covarZ(transZ,TMatrixD::kMult,*
fCovarPolZ);
546 covar[0] = covarY(0,0); covar[1] = 0; covar[2] = covarY(0,1); covar[3] = 0; covar[4] = TMath::Sqrt(2.)*covarY(0,2);
547 covar[5] = covarZ(0,0); covar[6] = 0; covar[7] = sign*covarZ(0,1); covar[8] = 0;
548 covar[9] = covarY(1,1); covar[10]= 0; covar[11]= TMath::Sqrt(2.)*covarY(1,2);
549 covar[12] = covarZ(1,1); covar[13]= 0;
550 covar[14] = 2.*covarY(2,2);
562 if (!
fConv)
return 0.;
566 if (res2<0)
return 0;
567 res2 = TMath::Sqrt(res2);
576 if (!
fConv)
return 0.;
580 Double_t arg = (1./rm1-(x-x0))*(1./rm1+(x-x0));
581 if ( arg <= 0)
return 0;
582 Double_t
res = (x-x0)/TMath::Sqrt(arg);
593 if (!
fConv)
return 0.;
597 Double_t phi = TMath::ASin((x-x0)*rm1);
598 Double_t phi0 = TMath::ASin((0.-x0)*rm1);
599 Double_t dphi = (phi-phi0);
608 if (!
fConv)
return 0.;
612 Double_t
res =
fParams[4]/TMath::Cos(TMath::ASin((x-x0)*rm1));
623 if (!
fConv)
return kFALSE;
627 if (res2<0)
return kFALSE;
628 res2 = TMath::Sqrt(res2);
631 if (!
fConv)
return kFALSE;
635 Double_t phi = TMath::ASin((r-x0)*rm1);
636 Double_t phi0 = TMath::ASin((0.-x0)*rm1);
637 Double_t dphi = (phi-phi0);
640 Double_t sin = TMath::Sin(alpha);
641 Double_t cos = TMath::Cos(alpha);
642 xyz[0] = r*cos - res2*sin;
643 xyz[1] = res2*cos + r*sin;
661 Double_t sumchi2 = 0;
662 for (Int_t i=0;i<
fN;i++){
674 Double_t sumchi2 = 0;
675 for (Int_t i=0;i<
fN;i++){
694 for (Int_t i=0;i<
fN;i++){
Double_t CalcChi2() const
Double_t GetErrY(Double_t x) const
void AddPoint(Double_t x, Double_t y, Double_t z, Double_t sy, Double_t sz)
Bool_t GetXYZat(Double_t r, Double_t alpha, Float_t *xyz) const
bool trans(const AliFMDIndex &x, const AliFMDIndex &y, const AliFMDIndex &z)
Bool_t GetExternalParameters(Double_t xref, Double_t *params, Double_t *covar)
Double_t GetYat(Double_t x) const
Double_t GetErrZ(Double_t x) const
Double_t GetDYat(Double_t x) const
Double_t CalcChi2Z() const
Double_t GetDZat(Double_t x) const
AliRieman * MakeResiduals() const
void UpdateCovariancePol()
Double_t CalcChi2Y() const
Double_t GetZat(Double_t x) const
for(Int_t itree=0;itree< arrInputTreesDistortionCalib->GetEntriesFast();++itree)