ROOT

Fiche logiciel validé
  • Création ou MAJ importante : 04/03/13
  • Correction mineure : 04/03/13
  • Rédacteur de la fiche : Pierre-Antoine Delsart - LPSC (CNRS, Université Joseph Fourrier)
  • Relecteur(s) : John Idarraga (LAL)
    Benoit Clément (LPSC)
    Dirk Hoffmann (Centre de Physique des Particules de Marseille (CPPM-IN2P3))
  • Contributions importantes : Cette fiche avait été initiée par Christian Helft comme RT, puis reprise comme tel par Dirk Hoffmann qui avait fait un travail de relecteur jusqu'à ce moment-là.
  • Responsable thématique : Dirk Hoffmann (Centre de Physique des Particules de Marseille (CPPM-IN2P3))
Mots-clés

ROOT : framework d'analyse de données scientifiques

Description
Fonctionnalités générales

ROOT est une bibliothèque C++ destinée à l'analyse de larges volumes de données numériques. Écrit par et pour les physiciens des particules, ROOT est utilisé dans le cadre des principales expériences de physique des hautes énergies (LHC, Tevatron, SLAC...) depuis l'ère de HERA, par exemple par l'expérience H1 officiellement depuis 2000. ROOT est aussi utilisé par certaines communautés en biotechnologie et économie.

En résumé, ROOT sert

  • au stockage efficace de volumes importants de données numériques sous forme de ntuples ou d'objets structurés.
  • d'outil d'analyse de ces données. Pour les analyses simples, des fonctionnalités de visualisation interactive sont fournies. Une très riche API C++ est disponible pour les analyses plus complètes.

La taille et la modularité de la bibliothèque font de ROOT un outil flexible, mais nécessitant une connaissance du C++ pour une utilisation autre que superficielle.

Des interfaces en python et ruby rendent aussi ROOT utilisable à travers ces langages.
Les fonctions C++ sont accessibles à partir des langages C et FORTRAN moyennant une "traduction" (demangling, comme c++filt) des noms des méthodes. Et de ce fait, les méthodes C++ de ROOT peuvent également être utilisées à travers ces langages classiques.

Autres fonctionnalités

La bibliothèque est constituée essentiellement d'un ensemble d'objets C++ répartis en "modules".

Liste un peu plus détaillée de fonctionnalités :

  • Sauvegarde et accès aux données numériques.
  • Visualisation interactive sous diverses formes, en 1, 2 ou 3D : histogrammes, graphes, fonctions numériques, images. Export vers différents formats graphiques vectoriels et matriciels (voir détails et exemples dans le paragraphe "Interopérabilité").
  • Méthodes statistiques et d'ajustements ("fits") avancées, via le sous-projet RooStat.
  • Analyse discriminante multivariée (réseaux de neurones, rapports de vraisemblance, arbres de décision...), via le package TMVA.
  • Système de calcul distribué sur plusieurs processeurs/cœurs : PROOF.
  • Système complet d'interface graphique utilisateur (GUI).
  • Nombreuses classes utilitaires de programmation (conteneur, chaîne de caractères), pour la physique (ex: vecteur de Lorentz) ou mathématiques (ex: matrices, opération sur les matrices).
  • ...

Exemple de graphiques générées avec ROOT (CC BY-NC-SA/3.0, R. Brun) - cliquer pour un catalogue de captures d'écran :
Image 2d d une gerbeHistogramme

ROOT contient un interpréteur de C/C++ (CINT) pour une utilisation interactive en mode ligne de commande. Il inclut un générateur de dictionnaire fournissant l'introspection et permettant d'utiliser interactivement n'importe quelle classe C++ (avec complétion des noms de symboles par la touche de tabulation). Grâce à cet interpéteur, ROOT peut être utilisé en trois modes complémentaires:

  • Interprétation de lignes de commande, interprétées ligne par ligne et exécutées immédiatement
  • Interprétation d'un "script" contenant des instructions C++, également interprétées ligne par ligne
  • Compilation d'un bout de code source C++ valable, chargement dans la mémoire vive et mise à jour du dictionnaire des symboles, puis exécution directe ou via une instruction en ligne de commande qui fait appel aux symboles nouvellement chargés.

Selon la phase de développement d'un logiciel d'analyse, les trois modes rendent l'utilisation plus efficace et productive de la première ébauche jusqu'à la finalisation du code.
Le remplacement de CINT par l'interpréteur cling (basé sur LLVM) lors de la sortie de la version 6 de ROOT a été annoncé.

Illustration de l'utilisation de l'interpréteur interactif de ROOT pour générer des graphiques (CC BY-NC-SA/3.0, R. Brun) - cliquer pour un catalogue de captures d'écran :
UI et GUI

Panoplie de graphiques 2D générées avec ROOT (CC BY-NC-SA/3.0, R. Brun) - cliquer pour un catalogue de captures d'écran :
graphiques 2d

D'autre part, il est possible de se servir de ROOT uniquement comme une bibliothèque exhaustive de fonctions, algorithmes de calcul et de statistiques ainsi que d'outils graphiques qui sont intégrés directement dans une nouvelle application autonome, compilée à partir de code source utilisateur.

Interopérabilité

Formats de données numériques :

  • Natif 'ROOT': un format indépendent de l'architecture matériel et du système d'exploitation.
    Typiquement le format TTree ou TNtuple sont utilisé comme une sorte de standard de fait.
  • Certaines classes peuvent lire le csv.
  • Interface pour base de données SQL.
  • Mathematica (pour la version 5.30)
  • Interface pour XML et des extensions comme GDML, utilisé dans Geant4.
  • Des interfaces pour des structures simples de donnés tels que ceux crées par des générateurs de MonteCarlo, tels que Pythia.

Export graphique : jpeg, png, gif, svg, ps, eps, tiff, xpm, xml.

Contexte d'utilisation dans mon laboratoire/service

ROOT est un standard de fait pour tous les physiciens des particules (communauté de plus de 10 000 chercheurs en Europe) et leur collaborateurs. Le nombre de téléchargements a dépassé pour les seules sources du logiciel, la marque symbolique de 100 000 en 2011. De par son origine et sa conception il est particulièrement adapté au domaine. Il est utilisé quotidiennement et de façon satisfaisante (malgré certains points agaçants, c.f. ci-dessous) par nombre de ces chercheurs.

Limitations, difficultés, fonctionnalités importantes non couvertes

Quelques aspects critiquables résultent de la (trop) grande taille de la bibliothèque : syndrome de "ré-invention de la roue". Un exemple typique est le "ToolKit" graphique intégré qui parait peu abouti par rapport à des alternatives open source (GTK ou Qt).

En revanche, le projet évolue régulièrement et l'équipe de développement est réactive, il y a un bon soutien de la communauté.

Environnement du logiciel
Distributions dans lesquelles ce logiciel est intégré

Fedora14. Les distributions Scientific Linux ne contiennent généralement pas de paquet de ROOT, probablement parce que cette communauté préfére de loin les versions fraîchement distribuées par les auteurs au CERN.
Le site ROOT au CERN (root.cern.ch) propose, outre les sources, des paquets précompilés de binaires pour Scientific Linux (RPM, normalement compatibles avec la famille RedHat), Mac OS X, Solaris 11, AIX ainsi que Windows, mais pas Debian/Ubuntu.
Les différentes versions de ROOT ainsi que dernière version de développement du code source sont accessibles par svn

Plates-formes

Linux, Windows, Mac OS X, nombreuses variantes d'Unix. Plus généralement tout système d'exploitation avec un compilateur GNU et la bibliothèque graphique Qt.
Testé sur Scientific Linux (SL4, SL5, SL6, SLD, SLC, ...), Fedora.

Autres logiciels aux fonctionnalités équivalentes

Tous les logiciels d'analyse de données numériques : octave, R, GDL, JavaAnalysisStudio (JAS), Matlab, Mathematica, Maple, etc...

Environnement de développement
Type de structure associée au développement

Développé au CERN avec une participation significative et régulière du FNAL ainsi que des centaines de développeurs plus ou moins occasionnels de la communauté de la physique des particules (HEP - "high energy physics" en anglais).

Eléments de pérennité

Sous les auspices du CERN, le "cœur" des développeurs officiellement annoncé sur le site (début 2012) est au nombre de douze et réparti sur plusieurs continents. Le projet soutient activement tous les développeurs occasionnels de la communauté.
La pérennité est excellente pour plusieurs années, la version 1.00 de ROOT étant sortie en 1997. Il peut être considéré comme le successeur du logiciel d'analyse statistique PAW écrit en FORTRAN et développé à partir des années 1970 jusqu'à l'avènement de ROOT. Devenu projet officiel du département de physique du CERN en 2002, il sera de fait irremplaçable pour les expériences pendant la durée de vie du LHC (30 ans à partir de 2008) et des analyses de ses données qui s'ensuivront.

Références d'utilisateurs institutionnels

IN2P3 (regroupant une bonne vingtaine de laboratoires de recherche en physique), CERN, FERMILAB, DESY, SLAC

Selon cette présentation à CHEP2012, ROOT serait le deuxième logiciel le plus souvent cité (après GEANT) dans les publications du domaine de la recherche en physique des particules autour du CERN.

Environnement utilisateur
Liste de diffusion ou de discussion, support et forums
Documentation utilisateur

Commentaires

ENVOL 2012

Une présentation de ROOT a été faite lors d'ENVOL 2012, en janvier 2013 : https://www.projet-plume.org/ENVOL-2012

Une question ...

... concernant l'interopérabilité / compatibilité : Quel est le rapport avec BOOST et HepVec ? C'est utilisé dans ROOT, ou ils ont réinventé la roue ? (Je crois que la vérité est entre les deux.)

the wheel

I believe ROOT tries to be an effort where most things are self contained and a certain set of classes like 3Vectors, Matrixes and 2,3D transformations could have well been taken from other existing libs like clhep. They probably re-invented the wheel with their own reflexion mechanism but I don't think that is fundamentally wrong. One can always choose.

To my knowledge BOOST is not used in ROOT for now, and i don't know what the plans are in that sense. I am a fan of keeping things simple but scalable. In that sense ROOT can take external projects properly. Such is the case of Roofit. But sometimes wanting to make everything inherit from TObject can become an issue. That is a design pattern decision which pays off in some cases. I think it depends on the goals of the user/developer. I wouldn't take sides there. And besides, if you think you need boost capabilities in your ROOT-based project, you are free to go to include them.