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