Logo ROOT  
Reference Guide
 
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
Loading...
Searching...
No Matches
mergeSelective.C File Reference

Detailed Description

View in nbviewer Open in SWAN
Merge only part of the content of a set of files.

This macro demonstrates how to merge only a part of the content of a set of input files, specified via the interface.

TFileMerger::AddObjectNames(const char *names)
void AddObjectNames(const char *name)

The method can be called several times to add object names, or using a single string with names separated by a blank. Directory names contained in the files to be merged are accepted.

Two modes are supported:

  1. kOnlyListed: via TFileMerger::PartialMerge(kOnlyListed) This will merge only the objects in the files having the names in the specified list. If a folder is specified, its whole content will be merged
  2. kSkipListed: via TFileMerger::PartialMerge(kSkipListed) This will skip merging of specified objects. If a folder is specified, its whole content will be skipped.

Important note: the kOnlyListed and kSkipListed flags have to be bitwise OR-ed on top of the merging defaults: kAll | kIncremental (as in the example)

The files to be merged have the following structure:

The example first merges exclusively hprof and the content of "folder", producing the file exclusive.root, then merges all content but skipping hprof and the content of "folder". The result can be inspected in the browser.

void CreateFile(const char *);
{
// Create the files to be merged
timer.Start();
TString tutdir = gROOT->GetTutorialDir();
if (gROOT->LoadMacro(tutdir + "/hsimple.C")) return;
Int_t i;
for (i=0; i<nfiles; i++) CreateFile(Form("tomerge%03d.root",i));
//------------------------------------
// Merge only the listed objects
//------------------------------------
fm->OutputFile("exclusive.root");
fm->AddObjectNames("hprof folder");
for (i=0; i<nfiles; i++) fm->AddFile(Form("tomerge%03d.root",i));
// Must add new merging flag on top of the default ones
fm->PartialMerge(mode);
fm->Reset();
//------------------------------------
// Skip merging of the listed objects
//------------------------------------
fm->OutputFile("skipped.root");
fm->AddObjectNames("hprof folder");
for (i=0; i<nfiles; i++) fm->AddFile(Form("tomerge%03d.root",i));
// Must add new merging flag on top of the default ones
fm->PartialMerge(mode);
delete fm;
// Cleanup initial files
for (i=0; i<nfiles; i++) gSystem->Unlink(Form("tomerge%03d.root",i));
// Open files to inspect in the browser
TFile::Open("exclusive.root");
TFile::Open("skipped.root");
new TBrowser();
timer.Stop();
timer.Print();
}
void CreateFile(const char *fname)
{
TFile *example = (TFile*)gROOT->ProcessLineFast("hsimple(1)");
if (!example) return;
TH1F *hpx = (TH1F*)example->Get("hpx");
hpx->SetName("hpx1");
TFile::Cp(example->GetName(), fname);
TFile *file = TFile::Open(fname, "UPDATE");
file->mkdir("folder")->cd();
hpx->Write();
file->Close();
example->Close();
if (sname.Contains("000")) {
TFile::Cp(fname, "original.root");
TFile::Open("original.root");
}
}
int Int_t
Definition RtypesCore.h:45
constexpr Bool_t kFALSE
Definition RtypesCore.h:101
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
Option_t Option_t TPoint TPoint const char mode
#define gROOT
Definition TROOT.h:406
char * Form(const char *fmt,...)
Formats a string in a circular formatting buffer.
Definition TString.cxx:2489
R__EXTERN TSystem * gSystem
Definition TSystem.h:566
Using a TBrowser one can browse all ROOT objects.
Definition TBrowser.h:37
TDirectory * mkdir(const char *name, const char *title="", Bool_t returnExistingDirectory=kFALSE) override
Create a sub-directory "a" or a hierarchy of sub-directories "a/b/c/...".
virtual Bool_t cd()
Change current directory to "this" directory.
This class provides file copy and merging services.
Definition TFileMerger.h:30
@ kAll
Merge all type of objects (default)
Definition TFileMerger.h:76
@ kIncremental
Merge the input file with the content of the output file (if already existing).
Definition TFileMerger.h:71
@ kSkipListed
Skip objects specified in fObjectNames list.
Definition TFileMerger.h:80
@ kOnlyListed
Only the objects specified in fObjectNames list.
Definition TFileMerger.h:79
A ROOT file is an on-disk file, usually with extension .root, that stores objects in a file-system-li...
Definition TFile.h:53
virtual Bool_t Cp(const char *dst, Bool_t progressbar=kTRUE, UInt_t buffersize=1000000)
Allows to copy this file to the dst URL.
Definition TFile.cxx:5008
static TFile * Open(const char *name, Option_t *option="", const char *ftitle="", Int_t compress=ROOT::RCompressionSetting::EDefaults::kUseCompiledDefault, Int_t netopt=0)
Create / open a file.
Definition TFile.cxx:4094
void Close(Option_t *option="") override
Close a file.
Definition TFile.cxx:955
1-D histogram with a float per channel (see TH1 documentation)
Definition TH1.h:621
Stopwatch class.
Definition TStopwatch.h:28
Basic string class.
Definition TString.h:139
virtual int Unlink(const char *name)
Unlink, i.e.
Definition TSystem.cxx:1381
Author
The Root Team

Definition in file mergeSelective.C.