Using the Treeviewer
Note
If you’re going to take The RDataframe Path, or terms like “cut” and “scatterplot” are unfamiliar to you, I advise you to work through this page. It introduces concepts that you’ll find useful later in this tutorial.
Otherwise, if you feel that this course has been too easy so far, you can skip the TreeViewer. It’s trivial to learn on your own if you want to. You can skip ahead to The Notebook Server.
Right-click the tree1
icon again and select StartViewer
.
Note
You’re looking at the TreeViewer, a tool for making plots from n-tuples interactively. The TreeViewer is handy for quick studies of n-tuples, but it’s almost certainly not enough to get you through the work you’ll have to do this summer. Any serious analysis work will involve some amount of coding.
Still, there are times when a simple tool can be useful. Let’s use the
TreeViewer to examine the tree1
n-tuple. Once you have an idea of
what’s inside tree1
, you’ll be ready to start writing programs to
analyze it.
In the second column of the large pane in the window, you’ll see the variables in the n-tuple; they all have a “leaf” icon next to them. Double-click on one of them and look the resulting histogram. Double-click on a few more variables and see how the histogram changes.

Figure 17: This is what I see when I run TreeViewer on my Macintosh.
Correlating variables: scatterplots
(10 minutes)
Left-click on a variable and hold the mouse down. Drag the variable next
to the blue curly X
in the first column, over the word -empty-
,
and let go of the button. Now select a different variable and drag it
over next to the curly Y
. Click on the scatterplot icon in the lower
left-hand corner of the TreeViewer (it’s next to a button labeled
SPIDER
1).
Note
This is a scatterplot, a handy way of observing the correlations between two variables. Be careful: it’s easy to fall into the trap of thinking that each (x,y) point on a scatterplot represents two values in your n-tuple. In fact, the scatterplot is a grid and each square in the grid is randomly populated with a density of dots that’s proportional to the number of values in that grid.
Drag different pairs of variables to the X
and Y
boxes and look
at the scatterplots. Do you see any correlations between the variables?
Tip
If you just see a shapeless blob on the scatterplot, the variables are
likely to be uncorrelated; for example, plot px
versus py
. If
you see a pattern, there may be a correlation; for example, plot pz
versus zv
. It appears that the higher pz
is, the lower zv
is. Perhaps the particle loses energy before it is deflected in the
target.

Figure 18: This is what I see when I make a scatterplot of zv versus ebeam. The variables look uncorrelated to me, except that we can’t have zv < 0.
New variables: expressions
(10 minutes)
Note
There are other quantities that we may be interested in apart from the ones already present in the n-tuple. One such quantity is \(p_{T}\) which is defined by:
This is the transverse momentum of the particle, that is, the component of the particle’s momentum that’s perpendicular to the z-axis.
You can use TreeViewer to create expressions that are functions of the
variables in the tree. Double-click on one the E() icons that has
the word -empty-
next to it. In the dialog box, type
sqrt(px*px+py*py)
in the box under Expression, and type
~pt
2 in the box under Alias. Then click on Done. Now
double-click on the word ~pt
in the TreeViewer.
Tip
When you’re typing in the expression, you don’t have to type the name of any variable in the tree. You can just click on the name in the TreeViewer.
The quantity theta, or the angle that the beam makes with the z-axis, is calculated by:
The units are radians. Let’s create a new expression to calculate theta.
Double-click on a different E() icon with -empty-
next to it.
Type atan2(~pt,pz)
under Expression, and ~theta
under
Alias. Click Done, then double-click on ~theta
. 3
Note
After an expression is no longer empty, you can’t double-click on it to edit it; that will just cause the expression to be plotted. To edit an existing expression, right-click on it and select EditExpression.
You can have expressions within expressions (such as ~pt
in the definition of ~theta
). All expressions that you create must
have names that begin with a tilde (~), and the expression editor will
enforce this. A common error is to forget the tilde when you’re typing
an expression; that’s the reason why it can be a good idea to insert a
variable or an alias into an expression by clicking on it in the
TreeViewer.
Restricting values: cuts
(10 minutes)
Let’s create a “cut” (a limit on the range of a variable to be
plotted). Edit another empty expression and give it the formula zv < 20
and the alias zcut
.
Note
Note how the icon changes in the TreeViewer. ROOT recognizes that you’ve typed a logical expression instead of a calculation.
Drag ~zcut
to the scissor icon. Double-click on zv
to plot it.
Double-click on some of the other variables and look at both the
histogram title and the Nent
in the statistics box of the
histograms; the z-cut affects all the plots, not just the plot of
zv
.
Double-click on the scissor icon to turn off the cut; note the change in the scissor icon. Double-click on the icon again to turn the cut back on.
Now edit ~zcut
by right-clicking on it and selecting
EditExpression
. Edit the expression to read zv<20 && zv>10
and
click Done
. Plot zv
. Has the cut changed? Now drag ~zcut
to
the scissors and plot zv
again.4

Figure 19: This is what I see when I make a plot of theta with the cut
zv<20 && zv>10
.
Note
If you wanted to display this plot in a talk, you’d have to label both
axes (which you’ve already learned how to do)
and do something about
that title. It’s not clear how to fix the title of a plot from
TreeViewer; if you right-click on it you see that it’s a TPaveText
with a number of options that don’t seem to do what you want.
I figured this out by saving the plot as c1.C, examining that file, and
looking up TPaveText
on the ROOT web site. The simplest way to edit
the title is right-click on it, select Clear
, then select
InsertText
and type in your new title.
An obscure ROOT trick
Once, in a quick-and-dirty analysis with TreeViewer, I set up a whole bunch of complex expressions
that I knew I’d want to use again. I had a file (let’s call it
vertexAnalysis.root
) that I was re-creating over and over again. After I re-made it, I always wanted
to view it with the same complicated expressions that I’d set up in TreeViewer.
I looked in TreeViewer’s vertexAnalysis.C
. After that, whenever I re-built vertexAnalysis.root
,
all I had to do was type
root vertexAnalysis.C
This would open vertexAnalysis.root
and the TreeViewer panel would be completely recreated.
All my complicated expressions were still in place. I could remake my plots with a simple
double-click.

Figure 20: https://xkcd.com/167/ by Randall Munroe. That’s why we climb (analyze) TTrees: the future is an adventure, and you don’t know what you’ll find. And perhaps the first speaker is wrong in other ways.
- 1
Go ahead and click on the SPIDER button if you want. A spider (or radar) chart is a way of displaying multivariant data in a two-dimensional graph.
I’ve never seen spider charts used in physics, except when I looked up the definition for this tutorial. By the way, if you clicked that link, you just looked up spider charts on the web. (OK, I’m no Randall Munroe.)
- 2
That first character is a tilde (~), not a dash.
- 3
The reason to use
atan2(y,x)
instead of justatan(y/x)
is that theatan2
function correctly handles the case when x=0.- 4
For those who know what a “weighted histogram” means: A “cut” is actually a weight ROOT applies when filling a histogram; a logical expression has the value 1 if true and the value 0 if false. If you want to fill a histogram with weighted values, use an expression for the cut that corresponds to the weight.
For example: a cut of
1/e
will fill a histogram with each event weighted by 1/e; a cut of(1/e)*(sqrt(z)>3.2)
will fill a histogram with events weighted by 1/e, for those events with sqrt(z) greater than 3.2.