Skip to content

Cern Root

ROOT is open source data analysis framework, maintaned by CERN, used mainly by the high energy physics community to analyze, plot, and store data. ROOT is written in C++ and features a C++ REPL, cling, as well as python bindings. To give users more flexibility in version selection and maintnaince, on Perlmutter we encouraging users to use one of the following methods to install ROOT.

With a conda install

The ROOT project maintains a build which can can be installed with conda. This is the recommendation if you also intend to use the root python binding or jupyter for your analysis.

nersc$ module load python
nersc$ mamba create -c conda-forge --name cernroot root
nersc$ conda activate cernroot

To test:

(cernroot) nersc$ root -b 
root [0]

Or in python:

(cernroot) nersc$ python
>>> import ROOT
>>>

Using a container

There are a number of containers built and supported by the root project which you can find on their docker hub. To use these images on perlmutter, you can use the shifter runtime.

nersc$ shifterimg pull rootproject/root:latest
nersc$ shifter --image=rootproject/root:latest /bin/bash
nersc$ root -b
root [0] 

Docker containers are also helpful if your analysis software is built on top of root. You can use the original image provied from root and build your analysis software inside the container, upload your custom container to an image registry, and then download it with shifterimg pull onto perlmutter.

Dockerfile
FROM rootproject/root:6.26.10-conda

RUN conda install uproot

Building root on perlmutter

If you need specific options for your root build, you can build on perlmutter. Currently xrootd is not supported with this built type on perlmutter.

Example
nersc$ module load PrgEnv-gnu
nersc$ module load python
nersc$ git clone --depth=1 -b latest-stable https://github.com/root-project/root.git cernroot
nersc$ cd cernroot
nersc$ mkdir compile; cd compile
nersc$ cmake .. -Dxrootd=OFF -Dbuiltin_xrootd=OFF -DCMAKE_CXX_STANDARD=17 -DCMAKE_INSTALL_PREFIX=/path/to/install/root
nersc$ make -j8; make install