sherry pan <chpan@glue.umd.edu> wrote concerning
[ROOT] read ASCII data file [Thu, 6 Feb 2003 09:03:11 -0500 (EST)]
----------------------------------------------------------------------
> Hi,
>
> How to read in an ASCII data file (2D or 3D array) to root?
Pretty simple:
int write(const TString& filename, Int_t ncol, int nrow)
{
ofstream out(filename.Data());
if (!out || out.bad()) return 1;
for (Int_t i = 0; i < nrow; i++) {
for (Int_t j = 0; j < ncol; j++)
out << i * nrow + j << "\t";
out << endl;
}
out.close();
return 0;
}
TTree* read (const TString& filename, Int_t ncol)
{
TString vars;
for (Int_t i = 0; i < ncol; i++) {
vars += Form("x%d", i);
if (i==0) vars += "/D";
if (i + 1 != ncol) vars += ":";
}
TArrayD x(ncol);
TTree* tree = new TTree("tree", "Tree");
tree->Branch("data", &x.fArray, vars.Data());
ifstream in(filename.Data());
if (!in || in->bad()) return 1;
while (!in.eof()) {
x.Reset();
for (Int_t i = 0; i < ncol; i++) in >> x[i];
tree->Fill();
}
in.close();
return tree;
}
Try this out by doing
prompt> root
root [0] .L foo.C
root [1] write("foo.dat", 3, 10)
root [2] TTree* t = read("foo.dat", 3);
root [3] t->Draw("x1:x2", "col");
Yours,
___ | Christian Holm Christensen
|_| | -------------------------------------------------------------
| | Address: Sankt Hansgade 23, 1. th. Phone: (+45) 35 35 96 91
_| DK-2200 Copenhagen N Cell: (+45) 24 61 85 91
_| Denmark Office: (+45) 353 25 305
____| Email: cholm@nbi.dk Web: www.nbi.dk/~cholm
| |
This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:09 MET