Dear Rooters,
I have posted mail some time ago asking about possiblity to
save/export splies (and possibly other functions) from ROOT to C code.
I have written the simple function which does the job but asking whether
there is any general method?
// saves spline as the C code
// function returns the string with valid C code of with function body.
// the string can be saved in file and direcly compilled.
// The code is inaccurate (give invalid results) at ends.
//
TString CCode (TSpline3 &spline, const char *fname, double oret=-999. )
{
Int_t i; // inedx
Int_t N = spline.GetNpx();
TString *out = new TString();
// prepare function header
*out += "// the code generated automatically by root \n double ";
*out += fname;
*out += "( double x )\n{\n";
*out += "const int N =";
*out += N;
*out += ";\n";
*out += "int i;\n";
*out += "double coef[";
*out += N;
*out +="][5]= {\n";
double x,y,b,c,d;
for ( i = 0 ; i < N ; i++ )
{
spline.GetCoeff(i, x, y, b, c, d);
*out += "\t\t{";
*out += x; *out += ", ";
*out += y; *out += ", ";
*out += b; *out += ", ";
*out += c; *out += ", ";
*out += d; *out += " ";
*out += "}";
if (i != N-1)
*out += ",\n";
}
*out += "};\n";
*out += "if (x < coef[0][0] || x >= coef[N-1][0])\n\t return ";
*out += oret;
*out += ";\n";
*out += "
i = 0;
do {
// found section
if (coef[i][0] <= x && coef[i+1][0] > x ) {
double dx;
dx = x - coef[i][0];
return coef[i][1] +dx*(coef[i][2] + dx*(coef[i][3] +
dx*coef[i][3]));
}
i++;
} while (i < N-1);\n";
*out += "return -1;\n";
*out += "}\n";
return *out;
}
Any hints for general solution? I suppose that this would be usefull for
Analysis --->
production code cycle for HEP experiments as the HQUAD.F was in PAW since
many times the PDFs are used for reconstruction alogtithms (and others).
I need it for ATLAS analysis.
Best reagrds,
Tomasz Bold
This archive was generated by hypermail 2b29 : Sun Jan 02 2005 - 05:50:07 MET