Ho Tomasz,
In the CVS version, I have implemented the functions
TSpline3::SaveAs(const char *filename) const
TSpline5::SaveAs(const char *filename) const
These functions generate the C++ code (no ROOT calls) corresponding
to the spline object.
Rene Brun
Tomasz Bold wrote:
>
> 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