Hi Pascal, Look at $ROOTSYS/tutorials/hadd.C for an example. Rene Brun Pascal Perrodo wrote: > > Hi, > > I am trying to merge several ROOT files containing different hisotgrams > (I don't want to add histograms). Each file sizes about 5 Mbytes. > I haven't found any command in ROOT to do this, so I have written the > macro below, inspired from an example given in a ROOTtalk mail. It > works for a few files (4) but with more I get the message: > Fatal in <operator new>: storage exhausted > aborting > > How can I solve the problem ? Thanks in advance. Cheers. > Pascal. > -------------------------------------------------- > { > > // Merge ROOT files containing different objects. > > gROOT->Reset(); > > const char *cfiles[] = { > "file1.root", > "file2.root", > "file3.root", > ""}; > const char *outfile="fileout.root"; > > TFile *afile, *file1; > > // create the result file > TFile *fnew = new TFile(outfile,"RECREATE"); > > //create a support list for the input files > TList *flist = new TList(); > > //open all input files and insert them in the list of files > Int_t nfiles = 0; > while (strlen(cfiles[nfiles])) { > afile = new TFile(cfiles[nfiles]); > flist->Add(afile); > nfiles++; > } > > gROOT->GetListOfFiles()->Print(); > > //Get a pointer to the first file > afile = file1 = (TFile*)flist->First(); > > nfiles = 0; > while( afile != 0 ){ > printf("file %s\n",cfiles[nfiles]); > TList *l = afile->GetListOfKeys(); > TObject*obj = l->First(); > fnew->cd(); > while( obj != 0 ){ > afile->Get(obj->GetName())->Write(); > obj = l->After(obj); > } > l->Delete(); > > afile = (TFile*)flist->After((TObject*)afile); > nfiles++; > } > > //gROOT->GetListOfFiles()->Print(); > //wait(); > > fnew->Close(); > delete fnew; > printf("%s closed\n",outfile); > > flist->Delete(); > delete flist; > > }
This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:32 MET