ROOT

ROOT is an open-source data analysis framework born at CERN in the 1990s. While it is targeted primarily for high energy physics experiments, its utility extends beyond this relm, providing many features that are useful across all branches of experimental science (e.g., saving, processing, and fitting data). As such, the following taglines can be found on the web, succinctly advertising ROOT’s capabilities:

  • ROOT: a modular scientific software framework.
  • ROOT: analyzing petabytes of data, scientifically.
  • ROOT: analyzing, storing and visualizing big data, scientifically.

The source code for ROOT and related projects are hosted on GitHub and further details, including documentation and tutorials, can be found on the ROOT homepage.

The canonical citation for the ROOT framework is:


Title
ROOT - an object oriented data analysis framework
Author
R. Brun, F. Rademakers
Journal
Nucl. Instrum. Methods Phys. Res., Sect. A
Volume
389
Issue
1-2
Pages
81-86
Year
1997
Abstract
The ROOT system in an Object Oriented framework for large scale data analysis. ROOT written in C++, contains, among others, an efficient hierarchical OO database, a C++ interpreter, advanced statistical analysis (multi-dimensional histogramming, fitting, minimization, cluster finding algorithms) and visualization tools. The user interacts with ROOT via a graphical user interface, the command line or batch scripts. The command and scripting language is C++ (using the interpreter) and large scripts can be compiled and dynamically linked in. The OO database design has been optimized for parallel access (reading as well as writing) by multiple processes.
Logo
10.1016/S0168-9002(97)00048-X
root-project/root

While I have used ROOT for many years (espcially during my PhD), I wouldn’t describe the entire experience as “smooth” or “pleasant”. While it’s likely some of the discomfort was to due to my own ignorance, others have made stronger claims (e.g., calling it “the ROOT of all evil”).

In my opinion, ROOT suffers from what I assume all old codes of substantial size do: legacy issues. The ROOT codebase, written C++ (with bindings to other languages like Python), is gigantic and somewhat difficult to navigate. It implements a staggering number of individual components, which all interact together - many through multiple inheritance - with some rather curious designs/interfaces. Some of this is certainly related to the age of the code. That is, the optimal solution for a problem ~20 years ago may no longer be the optimal implementation today. Part of this is due to the continued evolution of C++, with recent “versions” of language greatly improving its usability. As such, some of facilities in ROOT are wrought with unecessary idiosyncrasies and complexity.

That said, ROOT does allow one to do some rather complicated things (e.g., parallelized and vectorized fitting of data) without having to implement all the low-level details yourself. Similarly, when a histogram is involved, ROOT is pretty much “king”. It is for these reasons that I still often find myself turning to ROOT when tackling certain problems.

Here I will try to document how I overcame some use-case hurdles or give examples of nice features others might like to make use of.


Table of contents


Copyright © 2020-2023 Ryan M. L. McFadden.