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