Hi Michael, An example: void readall() { gDirectory->cd("Rint:/"); // make sure we are in default directory TDirectory *dir = gDirectory; //save pointer to Rint dir TFile *f = new TFile("hsimple.root"); f->ReadAll(); //read all objects in current directory in memory TIter next(f->GetList()); TObject *0bj; TH1 *h; while (( obj = next())) { if (obj->InheritsFrom("TH1")) { //keep only histograms TH1 *h = (TH1*)obj; h->SetDirectory(dir); } } delete f; dir->ls(); } Rene Brun On Fri, 7 Jun 2002, Michael Gold wrote: > 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