Loading [MathJax]/extensions/tex2jax.js
Logo ROOT   6.18/05
Reference Guide
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
copyFiles.C File Reference

Detailed Description

View in nbviewer Open in SWAN Example of script showing how to copy all objects (including directories) from a source file.

For each input file, a new directory is created in the current directory with the name of the source file. After the execution of:

root [0] .x copyFiles.C

the file result.root will contain 4 subdirectories: "tot100.root", "hsimple.root", "hs1.root","hs2.root"

#include "TROOT.h"
#include "TKey.h"
#include "TFile.h"
#include "TSystem.h"
#include "TTree.h"
void CopyDir(TDirectory *source) {
//copy all objects and subdirs of directory source as a subdir of the current directory
source->ls();
TDirectory *adir = savdir->mkdir(source->GetName());
adir->cd();
//loop on all entries of this directory
TKey *key;
//Loop in reverse order to make sure that the order of cycles is
//preserved.
TIter nextkey(source->GetListOfKeys(),kIterBackward);
while ((key = (TKey*)nextkey())) {
const char *classname = key->GetClassName();
TClass *cl = gROOT->GetClass(classname);
if (!cl) continue;
source->cd(key->GetName());
adir->cd();
CopyDir(subdir);
adir->cd();
} else if (cl->InheritsFrom(TTree::Class())) {
TTree *T = (TTree*)source->Get(key->GetName());
// Avoid writing the data of a TTree more than once.
// Note this assume that older cycles are (as expected) older
// snapshots of the TTree meta data.
if (!adir->FindObject(key->GetName())) {
adir->cd();
TTree *newT = T->CloneTree(-1,"fast");
newT->Write();
}
} else {
source->cd();
TObject *obj = key->ReadObj();
adir->cd();
obj->Write();
delete obj;
}
}
adir->SaveSelf(kTRUE);
savdir->cd();
}
void CopyFile(const char *fname) {
//Copy all objects and subdirs of file fname as a subdir of the current directory
TFile *f = TFile::Open(fname);
if (!f || f->IsZombie()) {
printf("Cannot copy file: %s\n",fname);
target->cd();
return;
}
target->cd();
CopyDir(f);
delete f;
target->cd();
}
void copyFiles() {
//prepare files to be copied
if(gSystem->AccessPathName("tot100.root")) {
gSystem->CopyFile("hsimple.root", "tot100.root");
gSystem->CopyFile("hsimple.root", "hs1.root");
gSystem->CopyFile("hsimple.root", "hs2.root");
}
//main function copying 4 files as subdirectories of a new file
TFile *f = new TFile("result.root","recreate");
CopyFile("tot100.root");
CopyFile("hsimple.root");
CopyFile("hs1.root");
CopyFile("hs2.root");
f->ls();
delete f;
}
void Class()
Definition: Class.C:29
#define f(i)
Definition: RSha256.hxx:104
const Bool_t kTRUE
Definition: RtypesCore.h:87
const Bool_t kIterBackward
Definition: TCollection.h:41
#define gDirectory
Definition: TDirectory.h:218
#define gROOT
Definition: TROOT.h:414
R__EXTERN TSystem * gSystem
Definition: TSystem.h:560
TClass instances represent classes, structs and namespaces in the ROOT type system.
Definition: TClass.h:75
Bool_t InheritsFrom(const char *cl) const
Return kTRUE if this class inherits from a class with name "classname".
Definition: TClass.cxx:4737
Describe directory structure in memory.
Definition: TDirectory.h:34
virtual void ls(Option_t *option="") const
List Directory contents.
virtual TObject * Get(const char *namecycle)
Return pointer to object identified by namecycle.
Definition: TDirectory.cxx:805
virtual Bool_t cd(const char *path=0)
Change current directory to "this" directory.
Definition: TDirectory.cxx:497
virtual TObject * FindObject(const char *name) const
Find object by name in the list of memory objects.
Definition: TDirectory.cxx:723
virtual void SaveSelf(Bool_t=kFALSE)
Definition: TDirectory.h:186
virtual TList * GetListOfKeys() const
Definition: TDirectory.h:155
virtual TDirectory * mkdir(const char *name, const char *title="")
Create a sub-directory "a" or a hierarchy of sub-directories "a/b/c/...".
A ROOT file is a suite of consecutive data records (TKey instances) with a well defined format.
Definition: TFile.h:48
static TFile * Open(const char *name, Option_t *option="", const char *ftitle="", Int_t compress=ROOT::RCompressionSetting::EDefaults::kUseGeneralPurpose, Int_t netopt=0)
Create / open a file.
Definition: TFile.cxx:3980
Book space in a file, create I/O buffers, to fill them, (un)compress them.
Definition: TKey.h:24
virtual const char * GetClassName() const
Definition: TKey.h:71
virtual TObject * ReadObj()
To read a TObject* from the file.
Definition: TKey.cxx:722
virtual const char * GetName() const
Returns name of object.
Definition: TNamed.h:47
Mother of all ROOT objects.
Definition: TObject.h:37
virtual Int_t Write(const char *name=0, Int_t option=0, Int_t bufsize=0)
Write this object to the current directory.
Definition: TObject.cxx:785
virtual int CopyFile(const char *from, const char *to, Bool_t overwrite=kFALSE)
Copy a file.
Definition: TSystem.cxx:1331
virtual Bool_t AccessPathName(const char *path, EAccessMode mode=kFileExists)
Returns FALSE if one can access a file using the specified access mode.
Definition: TSystem.cxx:1286
A TTree represents a columnar dataset.
Definition: TTree.h:71
virtual Int_t Write(const char *name=0, Int_t option=0, Int_t bufsize=0)
Write this object to the current directory.
Definition: TTree.cxx:9370
double T(double x)
Definition: ChebyshevPol.h:34
Author
Rene Brun

Definition in file copyFiles.C.