Hi Sidoti,
On Tue, 23 Oct 2001 16:03:44 +0200 (MET DST)
"Sidoti Antonio tel. +39+0461 88 1525" <sidoti@science.unitn.it> wrote
concerning "[ROOT] Table output":
> Hi Rooters,
> I am wondering if there is a function (or a simple way) that generates
> HTML and/or LateX tables filled with arrays calculated in a .C root script?
>
>
> Something like:
>
> Float_t x[n] = {,,,};
> Float_t y[n] = {,,,};
> gr = new THtmlTable(n,x,y,...,...);
> gr->Save(file_tex); // or file_html
> file_tex->Write();
>
> ________________________
> x[1] | x[2] | ... | x[n]|
> y[1] | y[2] | ....| y[n]|
> etc...
I don't think anything like that exists, but it'd be easy to
implement:
class TableWriter : public TNamed {
private:
Int_t fNCols;
Int_t fNRows;
TArrayD fData;
public:
TableWriter(const Char_t* name, const Char_t* caption,
Int_t ncols, Int_t nrows);
virtual void AddRow(Int_t n, Double_t* data);
virtual void WriteToStream(ostream& out) = 0;
...
};
class LaTeXTableWriter : public TableWriter {
private:
public:
LaTeXTableWriter(const Char_t* name, const Char_t* caption,
Int_t ncols, Int_t nrows);
virtual void WriteToStream(ostream& out) {
// Need this here for M$VC and KCC
Int_t i, j;
out << "\\begin{table}[htbp]" << endl
<< " \\begin{tabular}{|" << flush;
for (i = 0; i < fNCols; i++) {
out << "l" << flush;
out << "|}" << endl << " \\hline" << endl;
for (i = 0; i < fNRows; i++) {
for (j = 0; i < fNCols; i++) {
out << fData[i * fNCols + j] << flush;
if (j != fNRows - 1)
out << " & " << flush;
else
out << "\\\\" << endl;
}
}
out << " \\hline" << endl
<< " \\end{tabular}" << endl
<< " \\caption{" << GetTitle() << "}" << endl
<< " \\label{" << GetName() << "}" << endl
<< "\\end{table}" << endl;
}
};
class HtmlTableWriter : public TableWriter {
private:
public:
HtmlTableWriter(const Char_t* name, const Char_t* caption,
Int_t ncols, Int_t nrows);
virtual void WriteToStream(ostream& out) {
// Need this here for M$VC and KCC
Int_t i, j;
out << "<a name=\"" << GetName() << "\"" << endl
<< "<table>" << endl;
for (i = 0; i < fNRows; i++) {
out << "<tr>" << flush;
for (j = 0; i < fNCols; i++) {
out << "<td>" << fData[i * fNCols + j] << "</td>" << flush;
out << "</tr>" << endl;
}
out << " <caption>" << GetTitle() << "</caption>" << endl;
out << "</table>" << endl;
}
};
ostream file("foo.tex");
if (!file)
Bark();
file << "\\documentclass{article}" << endl
<< "\\begin{document}" << endl;
LaTeXTableWriter ltxWriter("foo", "Foo is bar");
...
ltxWriter.WriteToStream(file);
file << "\\end{docuiment}" << endl;
file.close();
gSystem->Exec("latex foo.tex");
gSystem->Exec("xdvi foo.dvi");
One can ofcourse do more fancy stuff, adding column labels and so on,
should one feel like it.
This sort of brings up another thing: It'd be nice if ROOT had
something parallel to THtml that could write
LaTeX/SGML/DocBook/etc. formatted files
[Ok, I'm throwing out a lot of suggestions today which I
unfortunately do not have the time to do something about myself -
sorry about that - anyway, it's suggestions to put (far down) on the
TODO list if you feel like it.]
Yours,
Christian Holm Christensen -------------------------------------------
Address: Sankt Hansgade 23, 1. th. Phone: (+45) 35 35 96 91
DK-2200 Copenhagen N Cell: (+45) 28 82 16 23
Denmark Office: (+45) 353 25 305
Email: cholm@nbi.dk Web: www.nbi.dk/~cholm
This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:51:04 MET