ROOT
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.
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 :
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 :
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 :
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.
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 formatTTree
ouTNtuple
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.
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.
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é.
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.