26 #include <TGeoMatrix.h> 33 #include <TMatrixDSym.h> 34 #include <TMatrixDSymEigen.h> 44 for (Int_t i = 0; i < 27; i++) fSum[i] = 0;
53 for (Int_t i = 0; i < 27; i++)
fSum[i] = 0;
62 memcpy(
fSum,res.
fSum,27*
sizeof(Double_t));
73 memcpy(
fSum,res.
fSum,27*
sizeof(Double_t));
90 for (Int_t i = 0; i < 27; i++)
fSum[i] = 0;
95 for (Int_t itrack = 0; itrack <
fLast; itrack++) {
126 Float_t xyz[3],xyzp[3];
127 Float_t cov[6],covp[6];
130 mcov(0,0) = cov[0]; mcov(0,1) = cov[1]; mcov(0,2) = cov[2];
131 mcov(1,0) = cov[1]; mcov(1,1) = cov[3]; mcov(1,2) = cov[4];
132 mcov(2,0) = cov[2]; mcov(2,1) = cov[4]; mcov(2,2) = cov[5];
133 TMatrixDSym mcovp(3);
134 mcovp(0,0) = covp[0]; mcovp(0,1) = covp[1]; mcovp(0,2) = covp[2];
135 mcovp(1,0) = covp[1]; mcovp(1,1) = covp[3]; mcovp(1,2) = covp[4];
136 mcovp(2,0) = covp[2]; mcovp(2,1) = covp[4]; mcovp(2,2) = covp[5];
137 TMatrixDSym msum = mcov + mcovp;
143 if (!msum.IsValid())
return;
146 sums(0,0) = (xyzp[0]-xyz[0]);
147 sums(1,0) = (xyzp[1]-xyz[1]);
148 sums(2,0) = (xyzp[2]-xyz[2]);
149 TMatrixD sumst = sums.T(); sums.T();
152 mf(0,0) = 1; mf(1,0) = 0; mf(2,0) = 0;
153 mf(0,1) = 0; mf(1,1) = 1; mf(2,1) = 0;
154 mf(0,2) = 0; mf(1,2) = 0; mf(2,2) = 1;
155 mf(0,3) = 0; mf(1,3) = -xyz[2]; mf(2,3) = xyz[1];
156 mf(0,4) = xyz[2]; mf(1,4) = 0; mf(2,4) =-xyz[0];
157 mf(0,5) =-xyz[1]; mf(1,5) = xyz[0]; mf(2,5) = 0;
159 for(Int_t j=0;j<6;j++){
161 mf(0,j)=0.;mf(1,j)=0.;mf(2,j)=0.;
170 fSum[0] += smatrix(0,0);
171 fSum[1] += smatrix(0,1);
172 fSum[2] += smatrix(0,2);
173 fSum[3] += smatrix(0,3);
174 fSum[4] += smatrix(0,4);
175 fSum[5] += smatrix(0,5);
176 fSum[6] += smatrix(1,1);
177 fSum[7] += smatrix(1,2);
178 fSum[8] += smatrix(1,3);
179 fSum[9] += smatrix(1,4);
180 fSum[10]+= smatrix(1,5);
181 fSum[11]+= smatrix(2,2);
182 fSum[12]+= smatrix(2,3);
183 fSum[13]+= smatrix(2,4);
184 fSum[14]+= smatrix(2,5);
185 fSum[15]+= smatrix(3,3);
186 fSum[16]+= smatrix(3,4);
187 fSum[17]+= smatrix(3,5);
188 fSum[18]+= smatrix(4,4);
189 fSum[19]+= smatrix(4,5);
190 fSum[20]+= smatrix(5,5);
191 fSum[21] += sums2(0,0);
192 fSum[22] += sums2(1,0);
193 fSum[23] += sums2(2,0);
194 fSum[24] += sums2(3,0);
195 fSum[25] += sums2(4,0);
196 fSum[26] += sums2(5,0);
210 TMatrixDSym smatrix(6);
213 smatrix(0,0) =
fSum[0];
214 smatrix(0,1) = smatrix(1,0) =
fSum[1];
215 smatrix(0,2) = smatrix(2,0) =
fSum[2];
216 smatrix(0,3) = smatrix(3,0) =
fSum[3];
217 smatrix(0,4) = smatrix(4,0) =
fSum[4];
218 smatrix(0,5) = smatrix(5,0) =
fSum[5];
219 smatrix(1,1) =
fSum[6];
220 smatrix(1,2) = smatrix(2,1) =
fSum[7];
221 smatrix(1,3) = smatrix(3,1) =
fSum[8];
222 smatrix(1,4) = smatrix(4,1) =
fSum[9];
223 smatrix(1,5) = smatrix(5,1) =
fSum[10];
224 smatrix(2,2) =
fSum[11];
225 smatrix(2,3) = smatrix(3,2) =
fSum[12];
226 smatrix(2,4) = smatrix(4,2) =
fSum[13];
227 smatrix(2,5) = smatrix(5,2) =
fSum[14];
228 smatrix(3,3) =
fSum[15];
229 smatrix(3,4) = smatrix(4,3) =
fSum[16];
230 smatrix(3,5) = smatrix(5,3) =
fSum[17];
231 smatrix(4,4) =
fSum[18];
232 smatrix(4,5) = smatrix(5,4) =
fSum[19];
233 smatrix(5,5) =
fSum[20];
235 sums(0,0) =
fSum[21]; sums(0,1) =
fSum[22]; sums(0,2) =
fSum[23];
236 sums(0,3) =
fSum[24]; sums(0,4) =
fSum[25]; sums(0,5) =
fSum[26];
239 Int_t fixedparamat[6]={0,0,0,0,0,0};
241 Int_t position[6]={0,0,0,0,0,0};
252 for(Int_t j=1;j<6;j++){
254 fixedparamat[j]=fixedparamat[j-1]+1;
257 fixedparamat[j]=fixedparamat[j-1];
263 TMatrixDSym smatrixRedu(unfixedparam);
264 for(Int_t i=0;i<unfixedparam;i++){
265 for(Int_t j=0;j<unfixedparam;j++){
266 smatrixRedu(i,j)=smatrix(position[i],position[j]);
271 smatrixRedu.Invert();
273 if (!smatrixRedu.IsValid()) {
274 printf(
"Minimization Failed! \n");
278 TMatrixDSym smatrixUp(6);
279 for(Int_t i=0;i<6;i++){
280 for(Int_t j=0;j<6;j++){
282 else smatrixUp(i,j)=smatrixRedu(i-fixedparamat[i],j-fixedparamat[j]);
286 Double_t covmatrarray[21];
288 for(Int_t i=0;i<6;i++){
289 for(Int_t j=0;j<=i;j++){
291 if(TMath::Abs(smatrixUp(i,j)/TMath::Sqrt(TMath::Abs(smatrixUp(i,i)*smatrixUp(j,j))))>1.01)
printf(
"Too large Correlation number!\n");
293 covmatrarray[i*(i+1)/2+j]=smatrixUp(i,j);
299 TMath::RadToDeg()*
res(0,3),
300 TMath::RadToDeg()*
res(0,4),
301 TMath::RadToDeg()*
res(0,5));
306 fNdf -= unfixedparam;
printf("Chi2/npoints = %f\n", TMath::Sqrt(chi2/npoints))
AliTrackResiduals & operator=(const AliTrackResiduals &res)
void SetCorrMatrix(Double_t *cov)
virtual void SetPars(Double_t x, Double_t y, Double_t z, Double_t psi, Double_t theta, Double_t phi)
Bool_t GetPoint(AliTrackPoint &p, Int_t i) const
AliTrackPointArray ** fVolArray
AliTrackResidualsFast & operator=(const AliTrackResidualsFast &res)
Float_t fChi2
Pointers to the arrays containing track extrapolation points.
AliTrackPointArray ** fTrackArray
Pointers to the arrays containing space points.
void AddPoints(AliTrackPoint &p, AliTrackPoint &pprime)
class TMatrixT< Double_t > TMatrixD
void GetXYZ(Float_t *xyz, Float_t *cov=0) const