21 for (
int i = 0;
i < 3;
i++) {
23 for (
int j = 0; j < 3; j++) {
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];
79 for (
i = 0;
i < 2;
i++) {
80 for (j = 0; j < 2; j++) {
90 b[
i][j] = a[i_r][i_c];
93 alg_value =
pow(-1, row + column + 2) * (b[0][0] * b[1][1] - b[0][1] * b[1][0]);
107 alg_value =
pow(-1, row + column + 2) * bb;
118 for (
i = 0;
i < 3;
i++) {
119 for (j = 0; j < 3; j++) {
126 for (
i = 0;
i < 3;
i++) {
127 for (j = 0; j < 3; j++) {
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++) {
145 Double_t dcoef1, dcoef2, darg, deksp;
159 darg = (par[1] * zz[
i] + par[0] - yy[
i]) * (par[1] * zz[
i] + par[0] - yy[
i]);
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]);
165 if ((dcoef1 * darg) < 600.) {
166 deksp =
exp(dcoef1 * darg);
168 sum2 = sum2 +
log(1. + dcoef2 * deksp);
171 sum2 = sum2 +
log(dcoef2) + dcoef1 * darg;
178 return -sum1 - sum2 - sum3;
194 cout <<
"!!!Wrong number of points(<3) -> exit " <<
NPoints << endl;
199 cout <<
"!!!Wrong number of parameters -> exit" <<
NParams << endl;
206 for (
int j = 0; j <
i; 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]);
213 for (
int k = 0; k < 3; k++)
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];
236 for (
int n = 0;
n < 3;
n++)
244 for (
int k = 0; k < 3; k++)
247 cout <<
"!!!NOT VALID TRACK PARAMETERS!!!!!" << endl;
255 assert(pdA && pdB &&
NParams && sz);
259 cout <<
"\nMatrix A[n,n]:\n";
262 cout << setw(12) << pdA[
i + j *
NParams];
265 cout <<
"Matrix B[n]:\n";
267 cout << setw(12) << pdB[
i];
269 cout <<
"\nMatrix P[n]:\n";
271 cout << setw(12) <<
param[
i];
273 cout <<
'\n' << flush;
289 pdA[jn] = dA / dPivot;
292 for (
Int_t k = i1; k <= j; k++) {
294 pdA[j + kn] += dA * pdA[kn];
296 pdB[j] += dB * pdA[jn];
304 param[n1] = pdB[n1] /= dA;
310 dB += pdA[j + iin] *
param[j];
311 param[ii] = -dB / pdA[ii + iin];
337 pdB[
i] += dW * dY *
pow(dX,
i);
338 for (
Int_t j = 0u; j <=
i; j++) {
351 left[0][1] = left[1][0];
352 left[0][2] = left[2][0];
353 left[1][2] = left[2][1];
388 dChi2 += dY * dY * dW;
390 return sqrt(dChi2 / dSW);
401 val = (par1[
i] - par[
i]) / par1[
i];
426 sigma_param = 5 - itera_rb * 0.5;
452 dval = 1 - di * di / (sigma_param * sigma_param *
sigma_k *
sigma_k);
453 if (di > sigma_param *
sigma_k)
455 if (di < sigma_param *
sigma_k)
456 wrb[
i] = dval * dval;
458 sum_wd +=
wrb[
i] * di * di;
489 sigma_p2 = 25 - itera_rb * 0.2;
490 sigma_p4 = 5 - itera_rb * 0.2;
491 sigma_pw = 4 - itera_rb * 0.2;
522 if (di < sigma_p2 * sigma_k && di > sigma_pw *
sigma_k) {
523 dval = 1 -
pow((di / (sigma_p2 *
sigma_k)), 2);
527 dval = 1 -
pow((di / (sigma_p4 *
sigma_k)), 4);
528 wrb[
i] = dval * dval;
532 sum_wd +=
wrb[
i] * di * di;
558 sigma_p = 5. - itera_rb * 0.2;
585 if (di < sigma_p * Sigma2 && di > sigma_p *
Sigma1) {
586 dval = 1 -
pow((di / (sigma_p *
sigma_k)), 2);
589 if (di < sigma_p *
Sigma1) {
590 dval = 1 -
pow((di / (sigma_p *
sigma_k)), 8);
591 wrb[
i] = dval * dval;
595 sum_wd +=
wrb[
i] * di * di;
620 sigma_param = 5 - itera_rb;
646 if (di > sigma_param *
sigma_k)
648 if (di < sigma_param *
sigma_k) {
655 wrb[
i] = ((a * exp1 + b *
exp2) * (c + d)) / ((c * exp1 + d *
exp2) * (a + b));
661 sum_wd +=
wrb[
i] * di * di;
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];
friend F32vec4 fabs(const F32vec4 &a)
Double_t WLSQGet(Double_t dX)
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)
void RB(Double_t *yy, Int_t)
void RBM(Double_t *yy, Int_t)
Double_t alg_add(Double_t a[3][3], Int_t row, Int_t column)
Bool_t par_check(Double_t *par, Double_t *par1)
Double_t WLSQRms(Double_t *pdY)
void cov_matrix(Double_t a[3][3])
void RBN(Double_t *yy, Int_t)
Bool_t WLSQFit(Double_t *pdY)
Bool_t SymMatrix(Double_t *pdA, Double_t *pdB)
Double_t f_lh(Double_t *yy, Double_t *zz, Double_t *w, Double_t *par)
Double_t det3(Double_t a[3][3])
void RB_OPT(Double_t *yy, Int_t)
void CheckMatrix(Double_t *pdA, Double_t *pdB, TString sz)
void CovarianceMatrixPrint(void)
Bool_t Initial(Double_t *trk)
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