#define BCR_PDF_cxx #include TString chNum[10]={"0","1","2","3","4","5","6","7","8","9"}; bool debug=kFALSE; BCR_PDF::BCR_PDF(const BCR_PDF &other) : TNamed(other) { for (int lg=0; lg> xl_bin[lg][lx]; // cout << lx << ": " << xl_bin[lx] << endl; } for (int lq2=0;lq2> q2l_bin[lg][lq2]; // cout << lq2 << ": " << q2l_bin[lq2] << endl; q2l_bin[lg][lq2] = TMath::Log(q2l_bin[lg][lq2]); } for (int lq2=0;lq2> f[lg][lx][lq2]; // cout << lx << ", " << lq2 << ": " << f[lx][lq2] << endl; } } fin.close(); } } void BCR_PDF::ReadZeusKN(TString chPDF,TString chPath) { TString chFile = chPath + "/kn_zeusxs4bcr." +chPDF + ".out"; Float_t xold=-1., q2old=-1.; Int_t ic=-1,ix=-1,iq2=-1; Float_t q2=0.,xx=0.,ffff=0.,fmax=0.,fmin=0.; FILE * fp = fopen(chFile,"r"); while (fscanf(fp,"%f %f %f %f %f", &q2,&xx,&ffff,&fmax,&fmin) != EOF) { ic++; if (q2!=q2old) { q2old = q2; ix=-1; iq2++; } if (xx!=xold) { xold = xx; ix++; } cout << setw(6) << ic << setw(4) << iq2 << setw(4) << ix << ": " << q2 << " " << xx << " " << ffff << " " << fmax << " " << fmin << " " <= 0 && ix < n_bin_x) && (iq2 >= 0 && iq2 < n_bin_q2)) { xl_bin[0][ix] = TMath::Log(xx); xl_bin[1][ix] = TMath::Log(xx); xl_bin[2][ix] = TMath::Log(xx); q2l_bin[0][iq2] = TMath::Log(q2); q2l_bin[1][iq2] = TMath::Log(q2); q2l_bin[2][iq2] = TMath::Log(q2); f[0][ix][iq2] = ffff; f[1][ix][iq2] = fmax; f[2][ix][iq2] = fmin; cout << setw(6) << ic << setw(4) << iq2 << setw(4) << ix << ": " << TMath::Exp(q2l_bin[0][iq2]) << " " << TMath::Exp(xl_bin[0][ix]) << " " << f[0][ix][iq2] << " " << f[1][ix][iq2] << " " << f[2][ix][iq2] << " " <= 0 && ix < n_bin_x) && (iq2 >= 0 && iq2 < n_bin_q2)) { xl_bin[0][ix] = TMath::Log(xx); q2l_bin[0][iq2] = TMath::Log(q2); f[0][ix][iq2] = fun; } else { cout << "BCR_PDF::ReadHector index out of bound: " << ix << " " << iq2 << " " << q2 << " " << q2old << " " << xx << " " << xold << " " << endl; } } fclose(fp); fp = NULL; } Double_t BCR_PDF::Eval(const Double_t xin, const Double_t q2in, const Int_t ig) const { Double_t x = TMath::Log(xin); Double_t y = TMath::Log(q2in); if (ig<0||ig>n_grid) return 0.; Int_t i = n_bin_x-1; for (int lx=1; lx = 0.) {i=lx;break;} } i = i-1; // FORTRAN to C++ conversion Int_t j = n_bin_q2-1; for (int lq2=1; lq2