Dear ROOT users
How can I merge .root files larger than 100 GB?
Thank you
Thank you for your reply.
Should I create a shared library and set the LD_LIBRARY_PATH to it?
I am a Geant4/GATE Monte Carlo user, where do I create the shared library?
Thank you again.
Hello,
Actually what @pcanal suggests is to create a shared library that you preload before running hadd
:
LD_PRELOAD=startup_C.so hadd output.root input_*
You can create the shared library in the same directory where the ROOT files to be merged are.
Hi Enric
Thank you for your reply. BUT I have a problem when I merge the root files:
When the size of all splits was about 420 GB it was merged to about 300 GB and then stopped. To override this, I reduced my run time and the size of all splits was about 250 GB but when I used this method to merge them it stopped at about 186 GB. How can I resolve this error? Did you face the same condition?
Cheers,
Hadi
I compiled directly the C++ program using “root.exe -b -l -q startup.C+” command in the directory where the root files are in and then used “LD_PRELOAD=startup_C.so hadd output.root input_*”. Should I do separate work to create a shared library and addressed it in .bashrc using LD_LIBRARY_PATH?
Thank you so much.
@pcanal can you comment on why it can be that the size of the merged result is smaller than the sum of the size of the individual fragments?
I compiled directly the C++ program using “root.exe -b -l -q startup.C+” command in the directory where the root files are in and then used “LD_PRELOAD=startup_C.so hadd output.root input_*”. Should I do separate work to create a shared library and addressed it in .bashrc using LD_LIBRARY_PATH?
No, it should be enough to preload that little shared library that sets the maximum tree size before hadd operates.
@pcanal I have a problem merging the root files larger than 100 GB that I described in previous messages. How can I resolve it? I used root_v6.14.00 and I addressed the startup_C.so directory in .bashrc using LD_LIBRARY_PATH.
Thank you so much.
@hadirezaei I am not sure. What is the result of calling:
file = TFile::Open(filename);
file->ls();
for both one of the input and the result.
and
tree->Print();
for your TTree (both for one input and the output).
Cheers,
Philippe.
@pcanal thank you for your response.
How can I use these commands?
and another point is that when I compile the startup.C program I find this warning: " Warning in cling::IncrementalParser::CheckABICompatibility():
Possible C++ standard library mismatch, compiled with GLIBCXX ‘20180415’
Extraction of runtime standard library version was: ‘20191114’
(int) 0"
Could the merging issue be the cause of this warning? and How can I resolve it?
Thank you so much.
Hadi
I used ROOT 6.14/00 and g++ (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0.
Cheers,
Hadi
Dear ROOT users
which version of the gcc match to the ROOT 6.14/00?
Best
Hadi
This warning is fatal … and make the library unused. So we need to fix that problem first.
It depends where/when/how it was built. You indeed need to make sure that you use the same gcc version for your code as with the one use to build ROOT.
By using the same compiler for ROOT and your code.
So the primary question is “where/when/how ROOT was built.” and/or where did you get it from? From that answer you will be able to tell whether you need to:
- Select a different build from the same place
- or Find another place to download ROOT from
- or Use a different compiler
- or Build ROOT yourself.
So you downloaded the source tar file and built it using cmake and the default compiler?