/// simplified version of hadd to merge two files into a new one /// necessary since we want to merge our own classes... void MergeFiles(const Char_t* outFile, const Char_t* file1, const Char_t* file2) { //gSystem->Load("StFStatTools"); TFileMerger* merger = new TFileMerger(kFALSE); merger->AddFile(file1); merger->AddFile(file2); merger->PrintFiles(NULL); merger->OutputFile(outFile); merger->Merge(); } void MergeFiles(const Char_t* outFile, const Char_t* files) { //gSystem->Load("StFStatTools"); TFileMerger* merger = new TFileMerger(kFALSE); merger->OutputFile(outFile); // handle files if (!TString(files).MaybeWildcard()) { cout << "WARNING - Merging one file only is just copying" << endl; merger->AddFile(files); } else { // wildcard - merge multiple files TString basename(files); Int_t slashpos = basename.Last('/'); TString directory; if (slashpos >= 0) { directory = basename(0, slashpos); basename.Remove(0, slashpos + 1); } else { directory = gSystem->UnixPathName(gSystem->WorkingDirectory()); } const Char_t* file = NULL; const Char_t* epath = gSystem->ExpandPathName(directory.Data()); void *dir = gSystem->OpenDirectory(epath); delete[] epath; if (dir) { TRegexp re(basename, kTRUE); while ((file = gSystem->GetDirEntry(dir))) { if (!strcmp(file, ".") || !strcmp(file, "..")) { continue; } TString s = file; if ((basename != file) && s.Index(re) != kNPOS) { TString f = directory; f += "/"; f += file; merger->AddFile(f.Data()); //cout << f.Data() << endl; } } } } merger->Merge(); }