TTreeReader vs RDataFrame vs branches to read TTree

I found a comment by @eguiraud in 2019

I don’t suggest using TTree directly to read ROOT data, it’s a low-level API, gives very few (type) safety guarantees, performs very few sanity checks and it’s also trickier to get good performance out of it.

For me a low-level API is usually performant; but maybe Enrico could explain.