//------------------------------------------------------------------------------ // GetScaleFactors //------------------------------------------------------------------------------ void GetScaleFactors(float* box_ww, float* box_top) { if (_verbosity > 0) { printf("\n-------------------------------------------------------------\n\n"); printf(" box = { njmin, njmax, nbmin, nbmax, }\n"); printf(" ww box = {"); for (UInt_t i=0; i<4; i++) printf("%6.0f,", box_ww [i]); printf(" }\n"); printf(" top box = {"); for (UInt_t i=0; i<4; i++) printf("%6.0f,", box_top[i]); printf(" }"); } float r1b1_data, r1b2_data, r2b1_data, r2b2_data; float r1b1_top, r1b2_top, r2b1_top, r2b2_top; float r1b1_ww, r1b2_ww, r2b1_ww, r2b2_ww; float r1b1_hz, r1b2_hz, r2b1_hz, r2b2_hz; float r1b1_wz, r1b2_wz, r2b1_wz, r2b2_wz; float r1b1_zz, r1b2_zz, r2b1_zz, r2b2_zz; float r1b1_wg, r1b2_wg, r2b1_wg, r2b2_wg; float r1b1_zj, r1b2_zj, r2b1_zj, r2b2_zj; float r1b1_ttv, r1b2_ttv, r2b1_ttv, r2b2_ttv; float r1b1_st, r1b2_st, r2b1_st, r2b2_st; float r1b1_fakes, r1b2_fakes, r2b1_fakes, r2b2_fakes; GetBoxPopulation("01_Data", box_ww, box_top, r1b1_data, r1b2_data, r2b1_data, r2b2_data); GetBoxPopulation("04_TTTo2L2Nu", box_ww, box_top, r1b1_top, r1b2_top, r2b1_top, r2b2_top); GetBoxPopulation("06_WW", box_ww, box_top, r1b1_ww, r1b2_ww, r2b1_ww, r2b2_ww); GetBoxPopulation("14_HZ", box_ww, box_top, r1b1_hz, r1b2_hz, r2b1_hz, r2b2_hz); GetBoxPopulation("02_WZTo3LNu", box_ww, box_top, r1b1_wz, r1b2_wz, r2b1_wz, r2b2_wz); GetBoxPopulation("03_ZZ", box_ww, box_top, r1b1_zz, r1b2_zz, r2b1_zz, r2b2_zz); GetBoxPopulation("11_Wg", box_ww, box_top, r1b1_wg, r1b2_wg, r2b1_wg, r2b2_wg); GetBoxPopulation("07_ZJets", box_ww, box_top, r1b1_zj, r1b2_zj, r2b1_zj, r2b2_zj); GetBoxPopulation("09_TTV", box_ww, box_top, r1b1_ttv, r1b2_ttv, r2b1_ttv, r2b2_ttv); GetBoxPopulation("05_ST", box_ww, box_top, r1b1_st, r1b2_st, r2b1_st, r2b2_st); GetBoxPopulation("00_Fakes", box_ww, box_top, r1b1_fakes, r1b2_fakes, r2b1_fakes, r2b2_fakes); GetBoxPopulation(_signal, box_ww, box_top, r1b1_fakes, r1b2_fakes, r2b1_fakes, r2b2_fakes); float r1b1_bkg = r1b1_hz + r1b1_wz + r1b1_zz + r1b1_wg + r1b1_zj + r1b1_ttv + r1b1_st + r1b1_fakes; float r1b2_bkg = r1b2_hz + r1b2_wz + r1b2_zz + r1b2_wg + r1b2_zj + r1b2_ttv + r1b2_st + r1b2_fakes; float r2b1_bkg = r2b1_hz + r2b1_wz + r2b1_zz + r2b1_wg + r2b1_zj + r2b1_ttv + r2b1_st + r2b1_fakes; float r2b2_bkg = r2b2_hz + r2b2_wz + r2b2_zz + r2b2_wg + r2b2_zj + r2b2_ttv + r2b2_st + r2b2_fakes; printf("\n"); SolveSystem("[ cut-0.2 < MVA < cut ]", r1b1_data, r1b1_bkg, r1b1_top, r1b1_ww, r1b2_data, r1b2_bkg, r1b2_top, r1b2_ww); SolveSystem("[ cut-0.4 < MVA < cut-0.2 ]", r2b1_data, r2b1_bkg, r2b1_top, r2b1_ww, r2b2_data, r2b2_bkg, r2b2_top, r2b2_ww); printf("\n"); }
void Interpolate(int n) { delete x; delete fv; delete xi; delete v; delete aa; delete bb; x = new double[n]; fv = new double[n]; xi = new double[n+1]; v = new double[n+1]; aa = new double[(n+1)*(n+1)]; bb = new double[n+1]; GetNodesAndValues(n); for (int i = 1; i <= n+1; i++) for (int j = 1; j <= n+1; j++) A(i,j) = 0; for (int i = 2; i <= n; i++) //make system { A(i,i-1) = 1.0/(X(i-1)-XI(i-1)) - 1/(XI(i)-XI(i-1)); A(i,i) = 1.0/(XI(i)-X(i-1)) + 1.0/(XI(i)-XI(i-1)) + 1.0/(X(i)-XI(i)) + 1.0 /(XI(i+1)-XI(i)); A(i,i+1) = 1.0/(XI(i+1)-X(i)) - 1.0/(XI(i+1)-XI(i)); B(i) = F(i-1) * (1.0/(X(i-1)-XI(i-1)) + 1.0/(XI(i)-X(i-1)))+ F(i) * (1.0/(X(i)-XI(i)) + 1.0/(XI(i+1)-X(i))); } // border conditions int i; i = 1; A(i,i) = 1.0/(X(i)-XI(i)); A(i,i+1) = 1.0/(XI(i+1)-X(i)); B(i) = F(i)*(1.0/(X(i)-XI(i))+ 1.0/(XI(i+1)-X(i))); i = n; A(i+1,i) = 1.0/(X(i)-XI(i)); A(i+1,i+1) = 1.0/(XI(i+1)-X(i)); B(i+1) = F(i)*(1.0/(X(i)-XI(i))+ 1.0/(XI(i+1)-X(i))); // PrintMatrix(aa,bb,n+1); SolveSystem(n+1,aa,bb,v); }
int main() { int n, TC; printf("Input dimension (n): "); scanf("%d", &n); if (n <= 0) return -1; printf("Input number of the threads: "); scanf("%d", &TC); if (n <= 0) return -2; double * a = new double[n*n]; double * b = new double[n]; double * x = new double[n]; int * index = new int[n]; double * ac = new double[n*n]; double * bc = new double[n*n]; FillMatrix(a, b, n); for (int i = 0; i < n*n; i++) ac[i] = a[i]; // copy of A for (int i = 0; i < n; i++) bc[i] = b[i]; // copy of B PrintMatrix(a, b, n); timeval tv1; gettimeofday(&tv1, 0); if (!SolveSystem(n, a, b, x, index, TC)) { printf("Bad matrix!\n"); return -3; } timeval tv2; gettimeofday(&tv2,0); double Time = double(tv2.tv_sec)*1000000.0+double(tv2.tv_usec)-double(tv1.tv_sec)*1000000.0+double(tv1.tv_usec); printf("Result:\n"); PrintSolution(x, n); printf("\n\nThreads: %d,\nError: %1.17lf,\nTime=%1.4lf sec.\n", TC, GetError(ac, bc, x, n), Time/1000000.0); delete a; delete b; delete x; delete index; delete ac; return 0; }
void Interpolate(int n) { FreeMem(); GetMem(n); GetMaxMin(); GetNodesAndValues(n); MakeMatrix(n); double *ss = new double[n - 2]; SolveSystem(n - 2, aa, bb, ss); for (int i = 2; i < n; i++) D(i) = ss[i - 2 - 1]; delete ss; EM(1, 1) = X(1) * X(1) * X(1); EM(1, 2) = X(1) * X(1); EM(1, 3) = X(1); EM(1, 4) = 1.0; EM(2, 1) = X(2) * X(2) * X(2); EM(2, 2) = X(2) * X(2); EM(2, 3) = X(2); EM(2, 4) = 1.0; EM(3, 1) = X(3) * X(3) * X(3); EM(3, 2) = X(3) * X(3); EM(3, 3) = X(3); EM(3, 4) = 1.0; EM(4, 1) = 3.0 * X(3) * X(3); EM(4, 2) = 2.0 * X(3); EM(4, 3) = X(3); EM(4, 4) = 0.0; eb[0] = F(1); eb[1] = F(2); eb[2] = F(3); eb[3] = D(3); SolveSystem(4, em, eb, exs); EM(1, 1) = X(n - 2) * X(n - 2) * X(n - 2); EM(1, 2) = X(n - 2) * X(n - 2); EM(1, 3) = X(n - 2); EM(1, 4) = 1.0; EM(2, 1) = X(n - 1) * X(n - 1) * X(n - 1); EM(2, 2) = X(n - 1) * X(n - 1); EM(2, 3) = X(n - 1); EM(2, 4) = 1.0; EM(3, 1) = X(n) * X(n) * X(n); EM(3, 2) = X(n) * X(n); EM(3, 3) = X(n); EM(3, 4) = 1.0; EM(4, 1) = 3.0 * X(n - 2) * X(n - 2); EM(4, 2) = 2.0 * X(n - 2); EM(4, 3) = X(n - 2); EM(4, 4) = 0.0; eb[0] = F(n - 2); eb[1] = F(n - 1); eb[2] = F(n); eb[3] = D(n - 2); SolveSystem(4, em, eb, exe); }