Merging root files with nested directories storing TGraphs

Hi,

I am trying to merge two root files which store TGraphs and have the following structure:

file1.root:

pid2212
     -- m5_m0_0_5
        --CorrGraph
     -- m10_m5_5_10
        --CorrGraph
     ....

file2.root:

pid-2212
     -- m5_m0_0_5
        --CorrGraph
     -- m10_m5_5_10
        --CorrGraph
   ....

Unfortunately I get the following crash with hadd merged.root file1.root file2.root:

hadd merged.root file1.root file2.root
hadd Target file: merged.root
hadd compression setting for all output: 1
hadd Source file 1: file1.root
hadd Source file 2: file2.root
hadd Target path: merged.root:/
hadd Target path: merged.root:/pid2212
hadd Target path: merged.root:/pid2212/m5_m0_0_5

 *** Break *** segmentation violation



===========================================================
There was a crash.
This is the entire stack trace of all threads:
===========================================================
    gdb.printing.register_pretty_printer(gdb.current_objfile(),
    gdb.printing.register_pretty_printer(gdb.current_objfile(),
#0  0x00007f5c2154441c in waitpid () from /lib64/libc.so.6
#1  0x00007f5c214c1f12 in do_system () from /lib64/libc.so.6
#2  0x00007f5c2253f09c in TUnixSystem::StackTrace() () from /usr/lib64/root/libCore.so.6.20
#3  0x00007f5c22541a6c in TUnixSystem::DispatchSignals(ESignals) () from /usr/lib64/root/libCore.so.6.20
#4  <signal handler called>
#5  0x00007f5c229d488b in TFileMerger::MergeRecursive(TDirectory*, TList*, int) () from /usr/lib64/root/libRIO.so.6.20
#6  0x00007f5c229d4748 in TFileMerger::MergeRecursive(TDirectory*, TList*, int) () from /usr/lib64/root/libRIO.so.6.20
#7  0x00007f5c229d6059 in TFileMerger::PartialMerge(int) () from /usr/lib64/root/libRIO.so.6.20
#8  0x0000000000405a8a in main ()
===========================================================


The lines below might hint at the cause of the crash.
You may get help by asking at the ROOT forum http://root.cern.ch/forum
Only if you are really convinced it is a bug in ROOT then please submit a
report at http://root.cern.ch/bugs Please post the ENTIRE stack trace
from above as an attachment in addition to anything else
that might help us fixing this issue.
===========================================================
#5  0x00007f5c229d488b in TFileMerger::MergeRecursive(TDirectory*, TList*, int) () from /usr/lib64/root/libRIO.so.6.20
#6  0x00007f5c229d4748 in TFileMerger::MergeRecursive(TDirectory*, TList*, int) () from /usr/lib64/root/libRIO.so.6.20
#7  0x00007f5c229d6059 in TFileMerger::PartialMerge(int) () from /usr/lib64/root/libRIO.so.6.20
#8  0x0000000000405a8a in main ()
===========================================================


Fatal in <TFileMerger::RecursiveRemove>: Output file of the TFile Merger (targeting merged.root) has been deleted (likely due to a TTree larger than 100Gb)
aborting



===========================================================
There was a crash.
This is the entire stack trace of all threads:
===========================================================
    gdb.printing.register_pretty_printer(gdb.current_objfile(),
    gdb.printing.register_pretty_printer(gdb.current_objfile(),
#0  0x00007f5c2154441c in waitpid () from /lib64/libc.so.6
#1  0x00007f5c214c1f12 in do_system () from /lib64/libc.so.6
#2  0x00007f5c2253f09c in TUnixSystem::StackTrace() () from /usr/lib64/root/libCore.so.6.20
#3  0x00007f5c22432831 in DefaultErrorHandler(int, bool, char const*, char const*) () from /usr/lib64/root/libCore.so.6.20
#4  0x00007f5c224321ba in ErrorHandler () from /usr/lib64/root/libCore.so.6.20
#5  0x00007f5c22444a21 in TObject::Fatal(char const*, char const*, ...) const () from /usr/lib64/root/libCore.so.6.20
#6  0x00007f5c224a8533 in THashList::RecursiveRemove(TObject*) () from /usr/lib64/root/libCore.so.6.20
#7  0x00007f5c224027d3 in TROOT::RecursiveRemove(TObject*) () from /usr/lib64/root/libCore.so.6.20
#8  0x00007f5c22443d3e in TNamed::~TNamed() () from /usr/lib64/root/libCore.so.6.20
#9  0x00007f5c229e9909 in TFile::~TFile() () from /usr/lib64/root/libRIO.so.6.20
#10 0x00007f5c224b008f in TList::Delete(char const*) () from /usr/lib64/root/libCore.so.6.20
#11 0x00007f5c22402b02 in TROOT::~TROOT() () from /usr/lib64/root/libCore.so.6.20
#12 0x00007f5c214b8c99 in __run_exit_handlers () from /lib64/libc.so.6
#13 0x00007f5c214b8ce7 in exit () from /lib64/libc.so.6
#14 0x00007f5c2253bbab in TUnixSystem::Exit(int, bool) () from /usr/lib64/root/libCore.so.6.20
#15 0x00007f5c22541b4b in TUnixSystem::DispatchSignals(ESignals) () from /usr/lib64/root/libCore.so.6.20
#16 <signal handler called>
#17 0x00007f5c229d488b in TFileMerger::MergeRecursive(TDirectory*, TList*, int) () from /usr/lib64/root/libRIO.so.6.20
#18 0x00007f5c229d4748 in TFileMerger::MergeRecursive(TDirectory*, TList*, int) () from /usr/lib64/root/libRIO.so.6.20
#19 0x00007f5c229d6059 in TFileMerger::PartialMerge(int) () from /usr/lib64/root/libRIO.so.6.20
#20 0x0000000000405a8a in main ()
===========================================================


The lines below might hint at the cause of the crash.
You may get help by asking at the ROOT forum http://root.cern.ch/forum
Only if you are really convinced it is a bug in ROOT then please submit a
report at http://root.cern.ch/bugs Please post the ENTIRE stack trace
from above as an attachment in addition to anything else
that might help us fixing this issue.
===========================================================
#17 0x00007f5c229d488b in TFileMerger::MergeRecursive(TDirectory*, TList*, int) () from /usr/lib64/root/libRIO.so.6.20
#18 0x00007f5c229d4748 in TFileMerger::MergeRecursive(TDirectory*, TList*, int) () from /usr/lib64/root/libRIO.so.6.20
#19 0x00007f5c229d6059 in TFileMerger::PartialMerge(int) () from /usr/lib64/root/libRIO.so.6.20
#20 0x0000000000405a8a in main ()
===========================================================


Aborted (core dumped)

A minimal reproducer can be found here: https://cernbox.cern.ch/index.php/s/JPdNoSVZbJDaxOq

It seems of with root master on my Mac:

$ ls -l file1.root file2.root merged.root 
-rw-r--r--@ 1 couet  staff   80405 May  4 13:41 file1.root
-rw-r--r--@ 1 couet  staff   81046 May  4 13:41 file2.root
-rw-r--r--+ 1 couet  staff  157253 May  4 13:52 merged.root

Hi @couet,

okay also seems to work with

ROOT Version: 6.18/04
Built for linuxx8664gcc on Sep 11 2019, 15:38:23
From tags/v6-18-04@v6-18-04

but not with

ROOT Version: 6.20/04
Built for linuxx8664gcc on Apr 01 2020, 08:28:48
From tags/v6-20-04@v6-20-04

I just tried with 6.20/05 and it is ok with this one also.

1 Like

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.