BmnRoot 26.10.0-18-g4e3414f9
Software framework of the BM@N experiment
Loading...
Searching...
No Matches
FitWLSQ.cxx
Go to the documentation of this file.
1#include "FitWLSQ.h"
2
3#include <assert.h>
4#include <float.h>
5#include <iomanip>
6#include <iostream>
7#include <math.h>
8
9using namespace std;
10
12 Double_t cSigma1,
13 Double_t cSigma2,
14 Double_t cP1,
15 Int_t nNPoints,
16 Int_t nNParams,
17 Bool_t RBF,
18 Bool_t LHf,
19 Int_t RBfn)
20{
21 for (int i = 0; i < 3; i++) {
22 param[i] = 0;
23 for (int j = 0; j < 3; j++) {
24 cov[i][j] = 0;
25 }
26 }
27 RB_TYPE = RBfn;
28 if (RB_TYPE == 4 || RB_TYPE == 5) {
29 // Approximation-1
30 resolution = cSigma1;
31 } else {
32 // Approximation-2, Tukey weights, optimal weights
33 resolution = cSigma2;
34 }
35 Sigma1 = cSigma1;
36 Sigma2 = cSigma2;
37 P1 = cP1;
38 NParams = nNParams;
39 NPoints = nNPoints;
40 RB_FIT = RBF;
41 LH_INI = LHf;
42 numItera = 0;
43 // allocate internal dimensions
44 w = new Double_t[nNPoints];
45 wrb = new Double_t[nNPoints];
46 x = new Double_t[nNPoints];
47 // fill dimension with z coordinats
48 for (int i = 0; i < NPoints; i++) {
49 x[i] = xx[i];
50 w[i] = 0;
51 wrb[i] = 1;
52 }
53}
54
56{
57 // delete internal dimensions
58 delete[] w;
59 delete[] wrb;
60 delete[] x;
61}
62
64{
65 Double_t val;
66 val = a[0][0] * a[1][1] * a[2][2] + a[0][1] * a[1][2] * a[2][0] + a[0][2] * a[1][0] * a[2][1]
67 - a[0][1] * a[1][0] * a[2][2] - a[0][0] * a[1][2] * a[2][1] - a[0][2] * a[1][1] * a[2][0];
68 return val;
69}
70
72{
73 Int_t i, j, i_r, i_c;
74 Double_t alg_value = 0;
75 Double_t b[2][2];
76 Double_t bb;
77
78 if (NParams == 3) {
79 for (i = 0; i < 2; i++) {
80 for (j = 0; j < 2; j++) {
81 if (i < row)
82 i_r = i;
83 else
84 i_r = i + 1;
85 if (j < column)
86 i_c = j;
87 else
88 i_c = j + 1;
89
90 b[i][j] = a[i_r][i_c];
91 }
92 }
93 alg_value = pow(-1, row + column + 2) * (b[0][0] * b[1][1] - b[0][1] * b[1][0]);
94 }
95 if (NParams == 2) {
96 if (row < 1)
97 i_r = row + 1;
98 else
99 i_r = row - 1;
100
101 if (column < 1)
102 i_c = column + 1;
103 else
104 i_c = column - 1;
105
106 bb = a[i_r][i_c];
107 alg_value = pow(-1, row + column + 2) * bb;
108 }
109 return alg_value;
110}
111
113{
114 Double_t dfact;
115 Int_t i, j;
116
117 // clean all matrixes
118 for (i = 0; i < 3; i++) {
119 for (j = 0; j < 3; j++) {
120 cov[i][j] = 0;
121 }
122 }
123
124 if (NParams == 3) {
125 dfact = 1 / det3(a);
126 for (i = 0; i < 3; i++) {
127 for (j = 0; j < 3; j++) {
128 cov[i][j] = dfact * alg_add(a, i, j);
129 }
130 }
131 }
132 if (NParams == 2) {
133 dfact = 1 / (a[0][0] * a[1][1] - a[0][1] * a[1][0]);
134 for (i = 0; i < 2; i++) {
135 for (j = 0; j < 2; j++) {
136 cov[i][j] = dfact * alg_add(a, i, j);
137 }
138 }
139 }
140 return;
141}
142
144{
145 Double_t dcoef1, dcoef2, darg, deksp;
146 Double_t sum1, sum2, sum3;
147 Int_t npoint;
148 Int_t i;
149
150 dcoef1 = (Sigma2 * Sigma2 - Sigma1 * Sigma1);
151 dcoef1 = dcoef1 / (2. * Sigma1 * Sigma1 * Sigma2 * Sigma2);
152 dcoef2 = (1. - P1) * Sigma1 / (P1 * Sigma2);
153 sum1 = 0.;
154 sum2 = 0.;
155 npoint = 0;
156 for (i = 0; i < NPoints; i++) {
157 if (wlh[i]) {
158 if (NParams == 2)
159 darg = (par[1] * zz[i] + par[0] - yy[i]) * (par[1] * zz[i] + par[0] - yy[i]);
160
161 if (NParams == 3)
162 darg = (par[2] * zz[i] * zz[i] + par[1] * zz[i] + par[0] - yy[i])
163 * (par[2] * zz[i] * zz[i] + par[1] * zz[i] + par[0] - yy[i]);
164
165 if ((dcoef1 * darg) < 600.) {
166 deksp = exp(dcoef1 * darg);
167 sum1 = sum1 - darg / (2. * Sigma1 * Sigma1);
168 sum2 = sum2 + log(1. + dcoef2 * deksp);
169 } else {
170 sum1 = sum1 - darg / (2. * Sigma1 * Sigma1);
171 sum2 = sum2 + log(dcoef2) + dcoef1 * darg;
172 }
173 }
174 npoint++;
175 }
176 sum3 = npoint * log(P1 / (Sigma1 * sqrt(2. * 3.141593)));
177
178 return -sum1 - sum2 - sum3;
179}
180
182{
183 // unsigned char itera = 0;
184 Double_t fmin = 999999.;
185 Double_t f, rk1, rk2, rk3;
186 Double_t axmin[3] = {0};
187 Double_t axx[3] = {0};
188
189 // find initial approximation and fill dimesions to call fit iterations
190 for (int i = 0; i < NPoints; i++) {
191 w[i] = 1;
192 }
193 if (NPoints < 3) {
194 cout << "!!!Wrong number of points(<3) -> exit " << NPoints << endl;
195 return kFALSE;
196 }
197
199 cout << "!!!Wrong number of parameters -> exit" << NParams << endl;
200 return kFALSE;
201 }
202
203 // LINE
204 if (NParams == 2) {
205 for (int i = 1; i < NPoints; i++) {
206 for (int j = 0; j < i; j++) {
207 if (w[i] && w[j]) {
208 axx[1] = (trk[i] - trk[j]) / (x[i] - x[j]);
209 axx[0] = (x[i] * trk[j] - x[j] * trk[i]) / (x[i] - x[j]);
210 f = f_lh(trk, x, w, axx);
211 if (f < fmin) {
212 fmin = f;
213 for (int k = 0; k < 3; k++)
214 axmin[k] = axx[k];
215 }
216 }
217 }
218 }
219 }
220
221 // PARABOLA
222 if (NParams == 3) {
223 for (int i = 1; i < NPoints; i++) {
224 for (int j = 0; j < i; j++) {
225 for (int k = 0; k < j; k++) {
226 if (w[i] && w[j] && w[k]) {
227 rk1 = trk[i] / ((x[i] - x[j]) * (x[i] - x[k]));
228 rk2 = trk[j] / ((x[j] - x[i]) * (x[j] - x[k]));
229 rk3 = trk[k] / ((x[k] - x[i]) * (x[k] - x[j]));
230 axx[2] = rk1 + rk2 + rk3;
231 axx[1] = -rk1 * (x[j] + x[k]) - rk2 * (x[i] + x[k]) - rk3 * (x[i] + x[j]);
232 axx[0] = rk1 * x[j] * x[k] + rk2 * x[i] * x[k] + rk3 * x[i] * x[j];
233 f = f_lh(trk, x, w, axx);
234 if (f < fmin) {
235 fmin = f;
236 for (int n = 0; n < 3; n++)
237 axmin[n] = axx[n];
238 }
239 }
240 }
241 }
242 }
243 }
244 for (int k = 0; k < 3; k++)
245 param[k] = axmin[k];
246 if (!param[0] && !param[1] && !param[2]) {
247 cout << "!!!NOT VALID TRACK PARAMETERS!!!!!" << endl;
248 return kFALSE;
249 }
250 return kTRUE;
251}
252
254{
255 assert(pdA && pdB && NParams && sz);
256
257 // long l = cout.flags(ios::left);
258 cout << '\n' << sz;
259 cout << "\nMatrix A[n,n]:\n";
260 for (Int_t i = 0; i < NParams; i++) {
261 for (Int_t j = 0; j < NParams; j++)
262 cout << setw(12) << pdA[i + j * NParams];
263 cout << '\n';
264 }
265 cout << "Matrix B[n]:\n";
266 for (Int_t i = 0; i < NParams; i++)
267 cout << setw(12) << pdB[i];
268 // if (param) {
269 cout << "\nMatrix P[n]:\n";
270 for (Int_t i = 0; i < NParams; i++)
271 cout << setw(12) << param[i];
272 //}
273 cout << '\n' << flush;
274 // cout.flags( l );
275}
276
278{
279 assert(pdA && pdB && param && NParams);
280 Int_t n1 = NParams - 1;
281 for (Int_t i = 0u; i < n1; i++) {
282 Int_t in = i * NParams;
283 Double_t dPivot = -pdA[i + in];
284 Double_t dB = pdB[i];
285 Int_t i1 = i + 1;
286 for (Int_t j = i1; j < NParams; j++) {
287 Double_t dA = pdA[j + in];
288 Int_t jn = j * NParams;
289 pdA[jn] = dA / dPivot;
290 if (dA == 0.0)
291 continue;
292 for (Int_t k = i1; k <= j; k++) {
293 Int_t kn = k * NParams;
294 pdA[j + kn] += dA * pdA[kn];
295 }
296 pdB[j] += dB * pdA[jn];
297 }
298 }
299 Double_t dA = pdA[NParams * NParams - 1];
300 if (dA == 0.0) {
301 CheckMatrix(pdA, pdB, "matrix singularity!");
302 return kFALSE;
303 }
304 param[n1] = pdB[n1] /= dA;
305 Int_t ii = n1;
306 while (ii--) {
307 Double_t dB = -pdB[ii];
308 Int_t iin = ii * NParams;
309 for (Int_t j = ii + 1u; j < NParams; j++)
310 dB += pdA[j + iin] * param[j];
311 param[ii] = -dB / pdA[ii + iin];
312 }
313 return kTRUE;
314}
315
317{
318 Double_t left[3][3];
319 if (NPoints < 2 || !NParams)
320 return kFALSE;
321 Int_t nn = NParams * NParams;
322 Int_t nnn = nn + NParams;
323 Double_t* pdA = new Double_t[nnn];
324 assert(pdA);
325
326 Double_t* pdB = pdA + nn;
327 for (Int_t i = 0u; i < nnn; i++)
328 pdA[i] = 0.0;
329 // calculating coefficients of the normal equation system AxP=B
330 for (Int_t n = 0u; n < NPoints; n++) {
331 Double_t dX = x[n];
332 Double_t dY = pdY[n];
333 dY *= wrb[n];
334 Double_t dW = 1;
335
336 for (Int_t i = 0u; i < NParams; i++) {
337 pdB[i] += dW * dY * pow(dX, i);
338 for (Int_t j = 0u; j <= i; j++) {
339 pdA[i + j * NParams] += dW * pow(dX, j + i);
340 }
341 }
342 }
343
344 // covariance matrix calculation
345 for (Int_t i = 0; i < NParams; i++) {
346 for (Int_t j = 0; j < NParams; j++) {
347 left[i][j] = pdA[i + j * NParams];
348 }
349 }
350
351 left[0][1] = left[1][0];
352 left[0][2] = left[2][0];
353 left[1][2] = left[2][1];
354
355 cov_matrix(left);
356
357 // solve equation
358 Bool_t b = SymMatrix(pdA, pdB);
359 delete[] pdA;
360 return b;
361}
362
364{
365 assert(param && NParams);
366
367 Double_t dY = param[0];
368 Double_t d = dX;
369 for (Int_t i = 1u; i < NParams; i++) {
370 dY += param[i] * d;
371 d *= dX;
372 }
373 return dY;
374}
375
377{
378 Double_t dChi2 = 0.0;
379 Double_t dSW = 0.0;
380 for (Int_t i = 0u; i < NPoints; i++) {
381 Double_t dX = x[i];
382 Double_t dY = pdY[i];
383 Double_t dW = wrb[i];
384
385 dSW += dW;
386 dY -= WLSQGet(dX);
387
388 dChi2 += dY * dY * dW;
389 }
390 return sqrt(dChi2 / dSW);
391}
392
394{
395 Int_t i;
396 Double_t val;
397 Bool_t value;
398
399 value = kTRUE;
400 for (i = 0; i < NParams; i++) {
401 val = (par1[i] - par[i]) / par1[i];
402 if (val < 0)
403 val *= -1;
404 if (val > 0.001)
405 value = kFALSE;
406 }
407
408 return value;
409}
410
411void FitWLSQ::RB(Double_t* yy, Int_t itera_rb)
412{
413 Int_t i;
414 Double_t di;
415 Double_t fitval;
416 Double_t sum_w = 0;
417 Double_t sum_wd = 0;
418 Double_t sigma_param;
419 Double_t dval;
420
421 // without annealing
422 if (RB_TYPE == 2)
423 sigma_param = 3;
424 // annealing
425 if (RB_TYPE == 3) {
426 sigma_param = 5 - itera_rb * 0.5;
427 if (sigma_param < 3)
428 sigma_param = 3;
429 }
430
431 if (!itera_rb)
433 if (sigma_k < resolution)
435
436 // insert here switches
437 if (!RB_FIT || (!LH_INI && !itera_rb)) {
438 for (i = 0; i < NPoints; i++) {
439 wrb[i] = 1;
440 }
441 }
442 if ((LH_INI && RB_FIT) || (!LH_INI && itera_rb && RB_FIT)) {
443 for (i = 0; i < NPoints; i++) {
444 if (NParams == 2)
445 fitval = param[0] + param[1] * x[i];
446 if (NParams == 3)
447 fitval = param[0] + param[1] * x[i] + param[2] * x[i] * x[i];
448 di = yy[i] - fitval;
449 if (di < 0)
450 di *= -1;
451
452 dval = 1 - di * di / (sigma_param * sigma_param * sigma_k * sigma_k);
453 if (di > sigma_param * sigma_k)
454 wrb[i] = 0;
455 if (di < sigma_param * sigma_k)
456 wrb[i] = dval * dval;
457 sum_w += wrb[i];
458 sum_wd += wrb[i] * di * di;
459 }
460 }
461
462 if ((LH_INI && RB_FIT) || (!LH_INI && itera_rb && RB_FIT))
463 sigma_k = sqrt((Double_t)sum_wd / sum_w);
464
465 return;
466}
467
468void FitWLSQ::RBN(Double_t* yy, Int_t itera_rb)
469{
470 Int_t i;
471 Double_t di;
472 Double_t fitval;
473 Double_t sum_w = 0;
474 Double_t sum_wd = 0;
475 Double_t sigma_p2;
476 Double_t sigma_p4;
477 Double_t sigma_pw;
478 Double_t dval;
479
480 // without annealing
481 if (RB_TYPE == 4) {
482 sigma_p2 = 21;
483 sigma_p4 = 3.5;
484 sigma_pw = 3;
485 }
486 // annealing
487 if (RB_TYPE == 5) {
488 // nastroit' po dannym dlya analiza!!!???
489 sigma_p2 = 25 - itera_rb * 0.2;
490 sigma_p4 = 5 - itera_rb * 0.2;
491 sigma_pw = 4 - itera_rb * 0.2;
492 if (sigma_p2 < 21)
493 sigma_p2 = 21;
494 if (sigma_p4 < 3.5)
495 sigma_p4 = 3.5;
496 if (sigma_pw < 3)
497 sigma_pw = 3;
498 }
499
500 if (!itera_rb)
502 if (sigma_k < resolution)
504
505 if (!RB_FIT || (!LH_INI && !itera_rb)) {
506 for (i = 0; i < NPoints; i++) {
507 wrb[i] = 1;
508 }
509 }
510 if ((LH_INI && RB_FIT) || (!LH_INI && itera_rb && RB_FIT)) {
511 for (i = 0; i < NPoints; i++) {
512 if (NParams == 2)
513 fitval = param[0] + param[1] * x[i];
514 if (NParams == 3)
515 fitval = param[0] + param[1] * x[i] + param[2] * x[i] * x[i];
516 di = yy[i] - fitval;
517 if (di < 0)
518 di *= -1;
519
520 if (di > sigma_p2 * sigma_k)
521 wrb[i] = 0;
522 if (di < sigma_p2 * sigma_k && di > sigma_pw * sigma_k) {
523 dval = 1 - pow((di / (sigma_p2 * sigma_k)), 2);
524 wrb[i] = dval * dval * Sigma1 / (Sigma2 / P1);
525 }
526 if (di < sigma_pw * sigma_k) {
527 dval = 1 - pow((di / (sigma_p4 * sigma_k)), 4);
528 wrb[i] = dval * dval;
529 }
530
531 sum_w += wrb[i];
532 sum_wd += wrb[i] * di * di;
533 }
534 }
535
536 if ((LH_INI && RB_FIT) || (!LH_INI && itera_rb && RB_FIT))
537 sigma_k = sqrt((Double_t)sum_wd / sum_w);
538
539 return;
540}
541
542void FitWLSQ::RBM(Double_t* yy, Int_t itera_rb)
543{
544 // new weights definition
545 Int_t i;
546 Double_t di;
547 Double_t fitval;
548 Double_t sum_w = 0;
549 Double_t sum_wd = 0;
550 Double_t sigma_p;
551 Double_t dval;
552
553 // without annealing
554 if (RB_TYPE == 6)
555 sigma_p = 3.3;
556 // annealing
557 if (RB_TYPE == 7) {
558 sigma_p = 5. - itera_rb * 0.2;
559 if (sigma_p < 3.3)
560 sigma_p = 3.3;
561 }
562
563 if (!itera_rb)
565 if (sigma_k < resolution)
567
568 if (!RB_FIT || (!LH_INI && !itera_rb)) {
569 for (i = 0; i < NPoints; i++) {
570 wrb[i] = 1;
571 }
572 }
573 if ((LH_INI && RB_FIT) || (!LH_INI && itera_rb && RB_FIT)) {
574 for (i = 0; i < NPoints; i++) {
575 if (NParams == 2)
576 fitval = param[0] + param[1] * x[i];
577 if (NParams == 3)
578 fitval = param[0] + param[1] * x[i] + param[2] * x[i] * x[i];
579 di = yy[i] - fitval;
580 if (di < 0)
581 di *= -1;
582
583 if (di > sigma_p * sigma_k)
584 wrb[i] = 0;
585 if (di < sigma_p * Sigma2 && di > sigma_p * Sigma1) {
586 dval = 1 - pow((di / (sigma_p * sigma_k)), 2);
587 wrb[i] = dval * dval * Sigma1 / (Sigma2 / P1);
588 }
589 if (di < sigma_p * Sigma1) {
590 dval = 1 - pow((di / (sigma_p * sigma_k)), 8);
591 wrb[i] = dval * dval;
592 }
593
594 sum_w += wrb[i];
595 sum_wd += wrb[i] * di * di;
596 }
597 }
598
599 if ((LH_INI && RB_FIT) || (!LH_INI && itera_rb && RB_FIT))
600 sigma_k = sqrt((Double_t)sum_wd / sum_w);
601
602 return;
603}
604
605void FitWLSQ::RB_OPT(Double_t* yy, Int_t itera_rb)
606{
607 Int_t i;
608 Double_t di;
609 Double_t fitval;
610 Double_t sum_w = 0;
611 Double_t sum_wd = 0;
612 Double_t sigma_param;
613 Double_t exp1, exp2, a, b, c, d;
614
615 // annealing
616 // without annealing
617 if (RB_TYPE == 0)
618 sigma_param = 3;
619 if (RB_TYPE == 1) {
620 sigma_param = 5 - itera_rb;
621 if (sigma_param < 3)
622 sigma_param = 3;
623 }
624
625 if (!itera_rb)
627 if (sigma_k < resolution)
629
630 // insert here switches
631 if (!RB_FIT || (!LH_INI && !itera_rb)) {
632 for (i = 0; i < NPoints; i++) {
633 wrb[i] = 1;
634 }
635 }
636 if ((LH_INI && RB_FIT) || (!LH_INI && itera_rb && RB_FIT)) {
637 for (i = 0; i < NPoints; i++) {
638 if (NParams == 2)
639 fitval = param[0] + param[1] * x[i];
640 if (NParams == 3)
641 fitval = param[0] + param[1] * x[i] + param[2] * x[i] * x[i];
642 di = yy[i] - fitval;
643 if (di < 0)
644 di *= -1;
645
646 if (di > sigma_param * sigma_k)
647 wrb[i] = 0;
648 if (di < sigma_param * sigma_k) {
649 a = P1 * Sigma2 * Sigma2 * Sigma2;
650 b = (1 - P1) * Sigma1 * Sigma1 * Sigma1;
651 c = P1 * Sigma2;
652 d = (1 - P1) * Sigma1;
653 exp1 = exp((-1. * di * di) / (2. * Sigma1 * Sigma1));
654 exp2 = exp((-1. * di * di) / (2. * Sigma2 * Sigma2));
655 wrb[i] = ((a * exp1 + b * exp2) * (c + d)) / ((c * exp1 + d * exp2) * (a + b));
656 if (exp1 < 0.0001) {
657 wrb[i] = 0.01 - fabs(di * di * di);
658 }
659 }
660 sum_w += wrb[i];
661 sum_wd += wrb[i] * di * di;
662 }
663 }
664
665 if ((LH_INI && RB_FIT) || (!LH_INI && itera_rb && RB_FIT))
666 sigma_k = sqrt((Double_t)sum_wd / sum_w);
667
668 return;
669}
670
672{
673 Int_t itera;
674 Bool_t end_fit = kFALSE;
675 Bool_t stat;
676 Double_t par_c[3] = {0};
677 Double_t sumwrb;
678 Double_t* yyf;
679
680 Status = false;
681 yyf = new Double_t[NPoints];
682 if (LH_INI) {
683 stat = Initial(y);
684 if (!stat)
685 return kFALSE;
686 }
688 itera = 0;
689 while (!end_fit) {
690 for (int i = 0; i < NParams; i++)
691 par_c[i] = param[i];
692 if (RB_TYPE == 0 || RB_TYPE == 1)
693 RB_OPT(y, itera);
694 if (RB_TYPE == 2 || RB_TYPE == 3)
695 RB(y, itera);
696 if (RB_TYPE == 4 || RB_TYPE == 5)
697 RBN(y, itera);
698 if (RB_TYPE == 6 || RB_TYPE == 7)
699 RBM(y, itera);
700
701 // check number of points with non zero weights
702 //=============================================
703 sumwrb = 0;
704 for (int i = 0; i < NPoints; i++) {
705 if (wrb[i])
706 sumwrb++;
707 }
708 if (sumwrb < 4) {
709 // cout << "Problems with rb fit number of points with non zero weight: " << sumwrb << " " << itera << endl;
710 return kFALSE;
711 }
712 //=============================================
713
714 for (int i = 0; i < NPoints; i++) {
715 if (NParams == 3)
716 yyf[i] = y[i] - param[0] - param[1] * x[i] - param[2] * x[i] * x[i];
717 else
718 yyf[i] = y[i] - param[0] - param[1] * x[i];
719 }
720 stat = WLSQFit(yyf);
721
722 for (int i = 0; i < NParams; i++)
723 param[i] += par_c[i];
724 end_fit = par_check(param, par_c);
725 if (!stat)
726 return kFALSE;
727 itera++;
728 if (itera > 50) {
729 // cout << " To many robust fit iterations -> exit" << endl;
730 return kFALSE;
731 }
732 }
733 numItera = itera;
734 // CovarianceMatrixPrint();
735 delete[] yyf;
736 Status = kTRUE;
737 return kTRUE;
738}
739
741{
742 // Double_t rmsval;
743 cout << "WLSQ Covariance Matrix" << endl;
744 for (int i = 0; i < 3; i++) {
745 for (int j = 0; j < 3; j++) {
746 cout << " " << cov[i][j];
747 }
748 cout << endl;
749 }
750 return;
751}
friend F32vec4 fabs(const F32vec4 &a)
Definition P4_F32vec4.h:52
int i
Definition P4_F32vec4.h:22
bool Bool_t
int Int_t
constexpr Bool_t kFALSE
double Double_t
constexpr Bool_t kTRUE
Double_t WLSQGet(Double_t dX)
Definition FitWLSQ.cxx:363
Double_t * wrb
Definition FitWLSQ.h:28
FitWLSQ(Double_t *xx, Double_t cSigma1=0.01, Double_t cSigma2=0.07, Double_t cP1=0.9, Int_t nNPoints=6, Int_t nNParams=2, Bool_t RBF=kTRUE, Bool_t LHf=kTRUE, Int_t RBfn=7)
Definition FitWLSQ.cxx:11
void RB(Double_t *yy, Int_t)
Definition FitWLSQ.cxx:411
Double_t sigma_k
Definition FitWLSQ.h:69
void RBM(Double_t *yy, Int_t)
Definition FitWLSQ.cxx:542
Bool_t RB_FIT
Definition FitWLSQ.h:74
Double_t alg_add(Double_t a[3][3], Int_t row, Int_t column)
Definition FitWLSQ.cxx:71
Double_t P1
Definition FitWLSQ.h:72
Bool_t Status
Definition FitWLSQ.h:29
Bool_t LH_INI
Definition FitWLSQ.h:75
Int_t NPoints
Definition FitWLSQ.h:11
Bool_t par_check(Double_t *par, Double_t *par1)
Definition FitWLSQ.cxx:393
Double_t WLSQRms(Double_t *pdY)
Definition FitWLSQ.cxx:376
Double_t param[3]
Definition FitWLSQ.h:25
void cov_matrix(Double_t a[3][3])
Definition FitWLSQ.cxx:112
Int_t NParams
Definition FitWLSQ.h:12
void RBN(Double_t *yy, Int_t)
Definition FitWLSQ.cxx:468
Double_t resolution
Definition FitWLSQ.h:73
Double_t Sigma2
Definition FitWLSQ.h:71
Bool_t WLSQFit(Double_t *pdY)
Definition FitWLSQ.cxx:316
Bool_t SymMatrix(Double_t *pdA, Double_t *pdB)
Definition FitWLSQ.cxx:277
Bool_t Fit(Double_t *y)
Definition FitWLSQ.cxx:671
Double_t * w
Definition FitWLSQ.h:67
Double_t f_lh(Double_t *yy, Double_t *zz, Double_t *w, Double_t *par)
Definition FitWLSQ.cxx:143
Double_t cov[3][3]
Definition FitWLSQ.h:26
Double_t det3(Double_t a[3][3])
Definition FitWLSQ.cxx:63
Double_t Sigma1
Definition FitWLSQ.h:70
void RB_OPT(Double_t *yy, Int_t)
Definition FitWLSQ.cxx:605
Int_t RB_TYPE
Definition FitWLSQ.h:76
~FitWLSQ()
Definition FitWLSQ.cxx:55
void CheckMatrix(Double_t *pdA, Double_t *pdB, TString sz)
Definition FitWLSQ.cxx:253
void CovarianceMatrixPrint(void)
Definition FitWLSQ.cxx:740
Int_t numItera
Definition FitWLSQ.h:27
Bool_t Initial(Double_t *trk)
Definition FitWLSQ.cxx:181
Double_t * x
Definition FitWLSQ.h:68
RVec< PromoteType< T > > log(const RVec< T > &v)
RVec< PromoteTypes< T0, T1 > > pow(const RVec< T0 > &v, const T1 &y)
RVec< PromoteType< T > > sqrt(const RVec< T > &v)
RVec< PromoteType< T > > exp(const RVec< T > &v)
RVec< PromoteType< T > > exp2(const RVec< T > &v)
*brief user defined string literal for JSON values *sa std::size_t n
Definition json.hpp:20362
Definition json.hpp:4446