Dear Rooters:
I am trying to read histograms from a file into local memory.
The first routine below tries the ReadAll method, which fails.
The second method is a modification of the ReadAll method
which works as long as the file stays open. I guess I am
happy with this. However, am I doing something wrong with
the ReadAll method? Do I need to keep the file open?
I guess I am thinking of what I used to do in Paw with HRIN.
-Michael Gold
/****************************************
A routine to get histograms from a file
in a sub directory
*****************************************/
void getSub(Option_t* fileName, Option_t* subDir="muTuple" )
{
gDirectory->cd("Rint:/"); // make sure we are in default directory
TDirectory *dir = gDirectory; //save pointer to Rint dir
TFile *f = new TFile(fileName); // open in read mode
// check that file is opened
if(f->IsZombie()) {
cout <<" Sorry, file " << fileName << " not opened !! " << endl;
return;
}
f->cd(subDir);
gDirectory->pwd();
gDirectory->ls();
gDirectory->ReadAll();
dir->ls(); // this lists nothing
delete f;
}
/****************************************
A routine to get histograms from a file
*****************************************/
void getHist(Option_t* fileName )
{
gDirectory->cd("Rint:/"); // make sure we are in default directory
TDirectory *dir = gDirectory; //save pointer to Rint dir
TFile *f = new TFile(fileName); // open in read mode
if(f->IsZombie()) { // check that file is opened
cout <<" Sorry, file " << fileName << " not opened !! " << endl;
return;
}
// loop over keys
TKey *key;
TIter next(f->GetListOfKeys());
while ((key = (TKey *) next())) {
// cout << key->GetClassName() << ": "<< key->GetName() << endl; // this
works
TNamed *thing = (TNamed*)gDirectory->GetList()->FindObject(key->GetName());
if (thing) delete thing;
TObject *obj=key->ReadObj();
dir->Add(obj);
// dir->Copy(key->ReadObj());
}
dir->pwd();
dir->ls(); // this works as long as file stays open
// delete f; << but only if the file stays open
}
This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:50:56 MET