This is an introductory “hands-on” tutorial on ROOT, a C++ and Python-based data-analysis software toolkit developed at CERN, a high-energy particle-physics accelerator research facility on the French-Swiss border.


The target audience for this workshop are undergraduate students in the sciences who are looking for summer research experience; for example, those in the US National Science Foundation’s Research Experience for Undergraduates (REU) program.

Many parts of this tutorial are optional or are advanced exercises. No one expects you to get through all these pages before you start your physics work for the summer. Much of the material, especially from Intermediate Topics on, is intended to use as a reference if you continue to use ROOT in the future.

However, I tried to “aim low” in terms of expectations on the required knowledge of computing, math, and science. Anyone with access to a computer with ROOT installed, or with a laptop on which they’re willing to put in the effort to install ROOT, should be able to work their way through this material.


This workshop is taught at Nevis Labs. I’ve provided a number of convenient resources for those with login access to the Nevis particle-physics Linux cluster, such as a JupyterHub server with ROOT pre-installed. Therefore, some of the set-up instructions are Nevis-specific.

I’ve tried to provide alternative instructions for anyone to be able to take this tutorial, even if they’re not at Nevis. There are several ways to install ROOT, and any files can be easily copied.

In addition to the web site you’re reading now, you can find this tutorial in PDF format, along with related material, on my ROOT Tutorial page.


The lessons have time estimates at the top. These are only rough estimates. Don’t be concerned about time. The important thing is for you to learn something, not to punch a time clock.

If you’re programming for the first time, then the exercises are challenging. Getting to all but the last exercise (the stand-alone program) in either The C++ Path or The Python Path is a respectable achievement on its own.

On the other hand, if the class seems too easy, just keep going. I gradually ramp up the difficulty. The lessons do not stay at the level of “ROOT does what physicists do.”


This tutorial started as a one-day class I taught at Columbia University’s Nevis Laboratories in 2001. Over the years, I’ve revised it as different versions of ROOT came out, and in response to comments received from the students.



Although the developers of ROOT have always been ready to answer my questions, they have had no direct input on the contents of this tutorial.

In particular, they had no say in the flippant, humorous, and occasionally sarcastic tone in which I’ve decided to present the material. This includes the over-use of smart-aleck footnotes and xkcd cartoons.1

Any errors in this tutorial are my own.2


At the end of the summer, let me know which parts you found useful or useless to you. I’ll consider your suggestions for next year’s workshop.

Have fun!

Bill Seligman


I’ve included a link in each figure caption of any xkcd cartoon I use. However, I don’t include the hover-text, which is occasionally funnier than the cartoon itself. For extra added xkcd goodness, click on the link in the figure caption and hover your mouse over the cartoon.


Unless someone else wants to take responsiblity for a given blunder on my part, in which case I’ll gladly cede the privilege.