I have a simple function to merge some trees given a list of filenames. The whole function just does
def mergeOther(listOfTrees,treeName):
outFileName = getOutputFileName(listOfTrees[0])
collection = ROOT.TList()
for elem in listOfTrees:
tfile = ROOT.TFile(elem,'read')
ttree = tfile.Get(treeName)
collection.Add(ttree)
outputFile = ROOT.TFile(outFileName,'recreate')
outputFile.cd()
outputTree = ROOT.TTree.MergeTrees(collection)
outputTree.Write()
outputFile.Close()
When I execute this function I get occasional, non-reproducible segmentation violations:
*** Break *** segmentation violation
Traceback (most recent call last):
File "/u/kocolosk/afsdir/scripts/mergeTrees.py", line 150, in ?
sys.exit(main())
File "/u/kocolosk/afsdir/scripts/mergeTrees.py", line 141, in main
[mergeOther(li,'chargedPionTree') for li in listsOfFiles if len(li) > 1]
File "/u/kocolosk/afsdir/scripts/mergeTrees.py", line 97, in mergeOther
outputTree = ROOT.TTree.MergeTrees(collection)
SystemError: problem in C++; program state has been reset
The input trees seem valid, and the segfault occurs on different sets of input trees each time I run the macro. Is there a way for me to debug what’s going on underneath? The full script is at
/afs/rhic.bnl.gov/star/users/kocolosk/public/scripts/mergeTrees.py