93 <<
"GRV98LO algorithm was not initialized succesfully";
107 <<
"Inputs x = " << x <<
", Q2 = " << Q2;
111 if(Q2 <= 0.8) Q2 = 0.80001;
116 double logx = std::log(x);
117 double logQ2 = std::log(Q2);
119 double xv = std::sqrt(x);
120 double xs = std::pow(x, -0.2);
121 double x1p3 = x1*x1*x1;
122 double x1p4 = x1*x1p3;
123 double x1p5 = x1*x1p4;
124 double x1p7 = x1p3*x1p4;
126 double uv =
fXUVF->Eval(logx,logQ2) * x1p3 * xv;
127 double dv =
fXDVF->Eval(logx,logQ2) * x1p4 * xv;
128 double de =
fXDEF->Eval(logx,logQ2) * x1p7 * xv;
129 double ud =
fXUDF->Eval(logx,logQ2) * x1p7 * xs;
130 double us = 0.5 * (ud - de);
131 double ds = 0.5 * (ud + de);
132 double ss =
fXSF->Eval(logx,logQ2) * x1p7 * xs;
133 double gl =
fXGF->Eval(logx,logQ2) * x1p5 * xs;
164 const char *
genie_dir = gSystem->Getenv(
"GENIE");
167 string grid_file_name =
168 string(gSystem->Getenv(
"GENIE")) + string(
"/data/evgen/pdfs/GRV98lo_patched.LHgrid");
171 <<
"Reading grid file from:\n " << grid_file_name;
174 grid_file.open (grid_file_name.c_str());
178 const int nskip = 21;
179 for(
int i=0; i<nskip; i++) {
180 grid_file.getline(rubbish,1000);
181 LOG(
"GRV98LO",
pDEBUG) <<
"Skipping: " << rubbish;
187 LOG(
"GRV98LO",
pDEBUG) <<
"Reading x_bj grid values";
188 for(
int j=0; j <
kNXbj; j++) {
196 ostringstream grid_values;
198 for(
int j=0; j <
kNXbj; j++) {
200 if(j ==
kNXbj - 1) { grid_values <<
")"; }
201 else { grid_values <<
", "; }
204 <<
"x_bj grid values: " << grid_values.str();
209 LOG(
"GRV98LO",
pDEBUG) <<
"Reading Q^2 grid values.";
210 for(
int i=0; i <
kNQ2; i++) {
220 for(
int i=0; i <
kNQ2; i++) {
222 if(i ==
kNQ2 - 1) { grid_values <<
")"; }
223 else { grid_values <<
", "; }
226 <<
"Q^2 grid values: " << grid_values.str() <<
"GeV^2";
229 grid_file.getline(rubbish,1000);
230 LOG(
"GRV98LO",
pDEBUG) <<
"Skipping: " << rubbish;
231 grid_file.getline(rubbish,1000);
232 LOG(
"GRV98LO",
pDEBUG) <<
"Skipping: " << rubbish;
237 LOG(
"GRV98LO",
pDEBUG) <<
"Reading PDF values on grid points";
240 for(
int j=0; j <
kNXbj-1; j++) {
241 for(
int i=0; i <
kNQ2; i++) {
248 grid_file >> p0 >> p1 >> p2 >> p3 >> p4 >> p5;
250 <<
"Row: " << k <<
", grid point: (" << i <<
", " << j <<
") ->"
272 vector<double> gridLogQ2 (
kNQ2);
273 vector<double> gridLogXbj(
kNXbj);
282 for(
int i=0; i <
kNQ2; i++) {
283 double logQ2 = std::log(
fGridQ2[i]);
284 gridLogQ2[i] = logQ2;
285 for(
int j=0; j <
kNXbj - 1; j++) {
286 double logx = std::log(
fGridXbj[j]);
287 gridLogXbj[j] = logx;
288 double xb0v = std::sqrt(
fGridXbj[j]);
289 double xb0s = std::pow(
fGridXbj[j], -0.2);
291 double xb1p3 = std::pow(xb1, 3.);
292 double xb1p4 = std::pow(xb1, 4.);
293 double xb1p5 = std::pow(xb1, 5.);
294 double xb1p7 = std::pow(xb1, 7.);
295 knotsXUVF[k] =
fParton[0][i][j] / (xb1p3 * xb0v);
296 knotsXDVF[k] =
fParton[1][i][j] / (xb1p4 * xb0v);
297 knotsXDEF[k] =
fParton[2][i][j] / (xb1p7 * xb0v);
298 knotsXUDF[k] =
fParton[3][i][j] / (xb1p7 * xb0s);
299 knotsXSF [k] =
fParton[4][i][j] / (xb1p7 * xb0s);
300 knotsXGF [k] =
fParton[5][i][j] / (xb1p5 * xb0s);
304 gridLogXbj[
kNXbj-1] = logxmax;
314 fXUVF = std::make_unique<Interpolator2D>(gridLogXbj.size(),&gridLogXbj[0],gridLogQ2.size(),&gridLogQ2[0],&knotsXUVF[0]);
315 fXDVF = std::make_unique<Interpolator2D>(gridLogXbj.size(),&gridLogXbj[0],gridLogQ2.size(),&gridLogQ2[0],&knotsXDVF[0]);
316 fXDEF = std::make_unique<Interpolator2D>(gridLogXbj.size(),&gridLogXbj[0],gridLogQ2.size(),&gridLogQ2[0],&knotsXDEF[0]);
317 fXUDF = std::make_unique<Interpolator2D>(gridLogXbj.size(),&gridLogXbj[0],gridLogQ2.size(),&gridLogQ2[0],&knotsXUDF[0]);
318 fXSF = std::make_unique<Interpolator2D>(gridLogXbj.size(),&gridLogXbj[0],gridLogQ2.size(),&gridLogQ2[0],&knotsXSF [0]);
319 fXGF = std::make_unique<Interpolator2D>(gridLogXbj.size(),&gridLogXbj[0],gridLogQ2.size(),&gridLogQ2[0],&knotsXGF [0]);
#define LOG(stream, priority)
A macro that returns the requested log4cpp::Category appending a string (using the FILE,...