Adding friend to TChain created from file saved using RDataFrame with EnableImplicitMT


Dear ROOT experts,

I am trying to add to a TChain a friend TTree, then pass this to a RDataFrame where I want to have access to the branches of both objects.

The TChain contains two TTrees from two root files created from a RDataFrame with EnableImplicitMT, and so, when I add the friend tree, I get

Error in <AddFriend>: Tree 't' has the kEntriesReshuffled bit set, and cannot be used as friend 
nor can be added as a friend unless the main tree has a TTreeIndex on the friend tree 't_friend'. 
You can also unset the bit manually if you know what you are doing.

As I know what I am doing, I tried unsetting the bit manually as in the minimal example attached bellow, and it didn’t work. The code bellow returns error because the column y doesn’t of course exist in the RDataFrame.

Is there a way to do this? I have checked several posts similar to this (specially this one but I can’t find a solution to my problem).


import ROOT

# -- Save several TTrees with ImplicitMT
ROOT.EnableImplicitMT(2)
ROOT.RDataFrame(5).Define("x", "42").Snapshot("t", "f1.root")
ROOT.RDataFrame(5).Define("x", "52").Snapshot("t", "f2.root")

ROOT.DisableImplicitMT()

chain = ROOT.TChain("t")
chain.Add("f1.root")
chain.Add("f2.root")

# Load first entry to initialize internal structures
chain.GetEntry(0)

# Now loop over all trees in the chain
n_trees = chain.GetNtrees()  # total number of files added
for i in range(n_trees):
    chain.LoadTree(chain.GetTreeOffset()[i])  # load first entry of this tree
    tree = chain.GetTree()  # get current TTree from the file
    tree.ResetBit( ROOT.TTree.EStatusBits.kEntriesReshuffled )

ROOT.RDataFrame(10).Define("y", "43").Snapshot("t_friend", "f_friend.root")
f2 = ROOT.TFile("f_friend.root")
t2 = f2.Get("t_friend")
t2.ResetBit(ROOT.TTree.EStatusBits.kEntriesReshuffled)
chain.AddFriend(t2)
f2.Close()

rdf = ROOT.RDataFrame(chain)

rdf.Display(["x","y"],10).Print()

ROOT Version: 6.28/04

Hi @lidia,

I believe your use case requires the use of the BuildIndex as shown in the example here. Let me know if implementing that helps in your case. I also recommend to update your ROOT to the latest stable version which is 6.36.02.

Cheers,
Marta

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