15 #include <boost/program_options.hpp> 19 #include "TBufferFile.h" 38 descString +=
" [options] [--";
40 descString +=
"] branch_name [--";
44 "\n The program dumps information about how much storage space is needed to store a given TBranch within a ROOT " 47 boost::program_options::options_description desc(descString);
49 boost::program_options::value<int>(),
50 "read branch from the given entry value (default 0)")(
53 boost::program_options::positional_options_description
p;
57 boost::program_options::variables_map vm;
59 store(boost::program_options::command_line_parser(argc, argv).
options(desc).positional(p).
run(), vm);
62 std::cerr <<
"failed to parse command line \n" << iException.what() <<
"\n";
88 TFile*
file = TFile::Open(fileName.c_str());
89 if (
nullptr == file) {
90 std::cerr <<
"failed to open '" << fileName <<
"'";
94 TTree* eventTree =
dynamic_cast<TTree*
>(file->Get(
"Events"));
96 if (
nullptr == eventTree) {
97 std::cerr <<
"The file '" << fileName <<
"' does not contain an 'Events' TTree";
101 TBranch*
branch = eventTree->GetBranch(branchName.c_str());
103 if (
nullptr == branch) {
110 TClass* cls = TClass::GetClass(branch->GetClassName());
111 if (
nullptr == cls) {
112 std::cerr <<
"class '" << branch->GetClassName() <<
"' is unknown by ROOT\n";
116 void* objInstance = cls->New();
117 if (
nullptr == objInstance) {
118 std::cerr <<
"unable to create a default instance of the class " << branch->GetClassName();
123 void* pObjInstance = &objInstance;
125 branch->SetAddress(pObjInstance);
127 branch->GetEntry(entryNumber);
129 TBufferFile bf(TBuffer::kWrite);
132 cls->WriteBuffer(bf, objInstance);
135 std::cout <<
"Total amount stored: " << bf.Length() <<
" bytes" << std::endl;
136 std::cout <<
"\nNOTE: add 4 bytes for each 'has written' value because of a bug in ROOT's printout of the accounting" 137 <<
"\n Each class (inheriting or as member data) has metadata an overhead of 10 bytes" << std::endl;
int main(int argc, char *argv[])
virtual std::string explainSelf() const
static char const *const kEntryNumberOpt
static char const *const kFileNameOpt
char const * what() const override
static void enable()
enable automatic library loading
static char const *const kBranchNameOpt
static char const *const kEntryNumberCommandOpt
static char const *const kHelpCommandOpt
static char const *const kHelpOpt