Simulation, modélisation, traitement des données
description
Transcript of Simulation, modélisation, traitement des données
D. Buskulic, Maubuisson 2001 1
Simulation, modélisation, traitement des données
Une approche pragmatique
D. Buskulic, Maubuisson 2001 2
I. Généralités
I.1 Contraintes sur les outils de Physique Corpusculaire
D. Buskulic, Maubuisson 2001 3
Quantité de données à traiter
1 Teraoctet à quelques Petaoctets/an ! 1015 octets 1000 Teraoctets 20 000 bandes d'aujourd'hui 100 000 DVD RAM double face 1 500 000 exemplaires de l'Encyclopaedia
Universalis !
Seulement 1 evt sur 106 est intéressant ! 1 sur 109 REELLEMENT intéressant !
-> Data Mining (recherche d'une aiguille dans une botte de foin)
D. Buskulic, Maubuisson 2001 4
Ca va plus vite que la loi de Moore
Données Babar
D. Buskulic, Maubuisson 2001 5
Conséquences
Importance des outils de gestion des données (bases de données)
Importance des outils d'analyse statistique L'analyse requiert un accès efficace aux
données et aux fonctions
D. Buskulic, Maubuisson 2001 6
Quantité de calculs nécessaires
Grande puissance de calcul nécessaire pour simuler/reconstruire/analyser les données
1000 à 10000 PC d'aujourd'hui (fermes) Importance du calcul parallèle Futur : calcul distribué
D. Buskulic, Maubuisson 2001 7
I. Généralités
I.2 Critères et fonctionnalités à respecter
D. Buskulic, Maubuisson 2001 8
Comment faisait-on une analyse ?
Détecteur
Traitementbatch
histos…
Modèle "Batch"
Données
D. Buskulic, Maubuisson 2001 9
Un meilleur modèle
Détecteur ou simulationRaw Datacoups ADC…
DSTtraces, etc…
Ntuplevaleurs calculées
histos…
Reconstruction
Analyse
une fois
un grand nombrede fois
Mais ca ne suffit pas pour traiter les données LHC !
D. Buskulic, Maubuisson 2001 10
Tâches à effectuer : exemple
Calibrer les signaux Extraire les composants
élémentaires (traces) Reconnaître les particules
individuelles Reconnaître les
caractéristiques physiques de l'événement
Extraire les quantités physiques
Recette :
Et ceci 10 millions de fois !
D. Buskulic, Maubuisson 2001 11
Tout ceci dans une grande variété de situations : Près du détecteur : algorithmes de reconstruction, études sur
l'évolution des performances…
Etude d'une grande quantité d'événements Etude d'un seul événement marquant Analyse de signal Comparer théorie et résultats expérimentaux
Title: dtall.epsCreator: HIGZ Version 1.26/04Preview: This EPS picture was not saved with a preview (TIFF or PICT) included in itComment: This EPS picture will print to a postscript printer but not to other types of printers
Reste à étudier la physique, mesurer, publier…
D. Buskulic, Maubuisson 2001 12
Problèmes cruciaux
Où se trouvent les données ? Plusieurs Petaoctets doivent être distribués
Plusieurs centres de stockage interconnectés
Où sont-elles traitées ? Traitement également distribué, au plus près des
données
Un problème d'une telle dimension ne peut être résolu qu'internationalement Exemple : Babar a deux sites de stockage/calcul,
Stanford et Lyon (CCIN2P3)
D. Buskulic, Maubuisson 2001 13
Influence sur les modèles d'environnement de travail
Concilier : Point de vue de l'utilisateur
Besoin de "toucher et voir", manipuler les données pour acquérir une compréhension des problèmes
La boucle expérimentale est dans l'analyse Doit pouvoir traiter aussi bien de petites quantités de
données "à fond" que de grosses quantités
Point de vue du concepteur du système Fermes de production centralisées Calcul local/distribué Modèles informatiques ? (Software Engineering)
Frameworks vs Composants, méthodes de conception
D. Buskulic, Maubuisson 2001 14
Influence sur les modèles d'environnement de travail
Modèles d'environnements de travail :
Composants Boite à outils Services
D. Buskulic, Maubuisson 2001 15
Comparaison des approches
Physiciens habitués à la boîte à outils Outils puissants Contrôle tout depuis le début Mais pas adapté aux flux de données actuels
Approche "composants" (Plug-ins) permet de se concentrer plus sur le problème
peut oublier certains "détails" -> lesquels ? Peut-on faire tout ce que l'on veut ?
Approche "services" comme compromis En s'assurant que l'on peut tout contrôler
Exemple des approches actuelles : dans la suite du cours
D. Buskulic, Maubuisson 2001 16
II. Programmation et langagesOrientés Objet
II.1 Motivations
D. Buskulic, Maubuisson 2001 17
Evolution
La quantité et la complexité des données rendent nécessaire une certaine forme d'abstraction des détails de base
Exemple : fabrication des ordinateurs
1950 : tubes 1960 : transistors 1970 : circuits intégrés 1980 : microprocesseur 1990 : microcontrôleurs 2000 : ordinateur sur une puce
Quel concepteur de PC s'occupe de savoir ce que fait chacun de 20 Millions de transistors dans un microprocesseur ?
Com
plexité des tâches
Com
plexité des briquesélém
entaires
D. Buskulic, Maubuisson 2001 18
On peut essayer d'adapter les vieux outils
Mais il faut parfois faire des sauts conceptuels
D. Buskulic, Maubuisson 2001 19
Couplage
Des parties de code d'analyse (reconstruction) vont remonter le diagramme
Réutilisation du code, simplicité
Peut-on transférer un objet complexe dans un nœud de trigger ?
Ex : une trace qui sait comment calculer sa quantité de mouvement
Ex : un histo qui sait comment se tracer lui-même
Ntuples
Raw
DST
Histos
D. Buskulic, Maubuisson 2001 20
Un bon logiciel c'est…
Vous écrivez vos logiciels pour les autres ! Un bon logiciel doit :
Avoir une structure aisément compréhensible Pouvoir être facilement débogué Autoriser facilement le changement d'une partie
sans affecter les autres parties Avoir un code modulaire et réutilisable Etre simple à maintenir et mettre à jour Etc…
La programmation orientée objet (POO) vous aide à écrire de bons logiciels… mais…
D. Buskulic, Maubuisson 2001 21
Ce n'est pas la panacée ! L'utilisation d'un langage dit "orienté objet" ne
garantit pas une "programmation orientée objet" Un code mal écrit en C++ est pire qu'un code mal
écrit en Fortran Les langages OO ne sont destinés qu'a
simplifier une bonne programmation OO Le langage est un outil pour arriver à l'orientation
objet
D. Buskulic, Maubuisson 2001 22
Programmation orientée objet : histoire
Plus de 30 ans de développements, d'expérience et de pratique de programmation
1967 : Simula67 1980 : Smalltalk80 Lisp, Clu, Actor, Eiffel, Objective C C++ et Java
Motivation La crise du logiciel (1980-1990):
Matériel de plus en plus puissant et peu cher Logiciel de plus en plus complexe et cher
Besoin de rendre le code réutilisable Cache les détails de l'implémentation d'un algorithme,
programme ou structure au monde extérieur, montre juste une interface.
D. Buskulic, Maubuisson 2001 23
II. Programmation et langagesOrientés Objet
II.2 Principe et concepts de base
D. Buskulic, Maubuisson 2001 24
Principe de base
L'idée est de représenter le comportement du monde réel sous une forme qui cache les détails de l'implémentation
Lorsque ca fonctionne, la POO permet de penser en termes de domaine élargi du problème
D. Buskulic, Maubuisson 2001 25
Trois idées de base
Trois idées fondamentales caractérisent la Programmation Orientée Objet : Classe/Objet
Encapsulation Hiérarchies de classes Héritage Abstraction / Polymorphisme
D. Buskulic, Maubuisson 2001 26
II. Programmation et langagesOrientés Objet
II.3 Classes, Objets et Encapsulation
D. Buskulic, Maubuisson 2001 27
Classes et Objets
La POO est une manière de programmer centrée sur les objets (Quoi ?) plutôt que sur les procédures (Comment ?)
Les objets et leur comportement sont très fortement liés
Données et comportements sont regroupés dans des classes dont les instances sont des objets
Une classe représente un type de "chose" dans le système, un objet représente une chose particulière.
Ex. : classe "trace" est un type, la trace particulière "+no 23" est un objet
D. Buskulic, Maubuisson 2001 28
Classes et Objets
Finalement, la POO voit la programmation comme une activité de simulation de comportement.
Ce qui est simulé, ce sont des objets représentés par une abstraction dans le programme
D. Buskulic, Maubuisson 2001 29
Classes et objets
Les classes sont responsables de leur comportement
class Impulsion{public : Impulsion(double x0, double y0, double z0, double e); ~Impulsion(); Impulsion& operator= (const Impulsion & droite); Impulsion& operator+ (const Impulsion & droite); double Module();…
D. Buskulic, Maubuisson 2001 30
Classes et objets
En C++, on peut définir les opérateurs standard (=, +, -, *, / ) pour une classe
Une classe est un type comme un autre (float, double,…)
Améliore la lisibilité du code
Impulsion a,b,c;c=a+b;
D. Buskulic, Maubuisson 2001 31
Classes et objets
Les données membres d'une classe ont une relation d'appartenance (possède un)
D. Buskulic, Maubuisson 2001 32
Encapsulation
Une classe possède une implémentation des détails de son comportement et une interface vers l'extérieur
Les détails d'implémentation doivent être inaccessibles de l'extérieur, c'est à dire des codes et objets qui utilisent la classe.
Les données membres de la classe doivent être privées, accessibles seulement à travers des fonctions membres (méthodes) du type Set/Get
D. Buskulic, Maubuisson 2001 33
Les changements de l'implémentation interne ne doivent pas modifier la façon dont on accède et utilise la classe extérieurement
Encapsulation
class Impulsion{…private: double m_Px; double m_Py; double m_Pz; double m_E;public: double GetP() const; void SetP(double p);
class Impulsion{…private: double m_P; double m_Theta; double m_Phi; double m_E;public: double GetP() const; void SetP(double p);
Données internes(privéees)
Méthodespubliques
D. Buskulic, Maubuisson 2001 34
II. Programmation et langagesOrientés Objet
II.4 Hiérarchies de classes et héritage
D. Buskulic, Maubuisson 2001 35
Héritage et hiérarchies de classes
L'héritage est un moyen de dériver une nouvelle classe de classes préexistantes, appelées classes de base
La nouvelle classe dérivée peut utiliser le code de sa ou ses classes de base
A travers l'héritage, on peut créer une hiérarchie de classes qui partagent du code et des interfaces
L'héritage est une méthode pour gérer la complexité
D. Buskulic, Maubuisson 2001 36
Hiérarchie de classes
L'héritage correspond à une notiond'identité ("est un")
D. Buskulic, Maubuisson 2001 37
TObject
Event
Segment
Track
Vertex
Momentum
MassSquared
InterceptAtVertex
est un possèdeun
•po
ss èd
eu
n
•possèdeun
•possèdeun
•po
ss èd
eu
n
•possèdeun
D. Buskulic, Maubuisson 2001 38
II. Programmation et langagesOrientés Objet
II.5 Abstraction et polymorphisme
D. Buskulic, Maubuisson 2001 39
Abstraction
On peut définir des classes destinées uniquement à donner naissance à d'autres classes par héritage
Ce sont des classes "abstraites" Permet
De définir une interface générale ("abstraite") De simplifier la modularité et la portabilité du code
Par exemple GEANT4 est libre de tout choix de techniques d'entrées/sorties ou d'histogrammation. De même, le GUI (Graphical User Interface) et la visualisation sont complètement isolées du noyau de GEANT4 par l'intermédiaire d'interfaces abstraites
D. Buskulic, Maubuisson 2001 40
Polymorphisme
Le polymorphisme prend de nombreuses formes : Surcharge de fonctions et d'opérateurs Redéfinition de fonctions membres d'une classe
de base par une classe dérivée Patrons (templates) de classes
D. Buskulic, Maubuisson 2001 41
Polymorphisme : surcharge
En POO, une fonction peut avoir le même nom, mais des arguments différents. Exemple
Draw(TLine* ligne)Draw(TBox* carre)
On ne trace pas de la même manière une ligne et un carré
La distinction est faite par le compilateur sur le type des arguments ("signature" de la fonction)
D. Buskulic, Maubuisson 2001 42
Polymorphisme : surcharge
On peut également en C++ surcharger des opérateurs
Ex: La somme de deux histogrammes peut avoir un sens. On peut surcharger les opérateurs "+" et "=" pour permettre h3 = h1 + h2;
Ne le faites que si vous savez où vous mettez les pieds !
D. Buskulic, Maubuisson 2001 43
Polymorphisme : redéfinition
Lorsqu'une classe dérivée a besoin de réaliser une opération définie dans la classe de base mais un peu différemment, elle peut redéfinir la fonction membre de la classe de base
Ex. : fonction "Draw". Si la classe "TArrow" dérive de la classe "TLine", il faudra ajouter le code de tracé de la pointe de la flèche. Ceci peut se faire dans la classe dérivée en redéfinissant la fonction membre "Draw".
D. Buskulic, Maubuisson 2001 44
Polymorphisme : redéfinition et … pièges ! class Base{
public: Base() {;} virtual void Affiche(int i) {cout<<"Int"<<endl;} virtual void Affiche(double i) {cout<<"Double"<<endl;}}
class Derive : public Base{
public: Derive() {;} virtual void Affiche(int i) {cout<<"Int"<<endl;}}
main(){ Base* a = new Derive(); a->Affiche(1.0);}
-> affiche "Int" !
D. Buskulic, Maubuisson 2001 45
Polymorphisme : Patrons de classes
C++ a la notion de polymorphisme paramétrique. Kézaco ?
Un patron de classe (template) permet de définir une classe indépendamment d'un type
Ex : un tableau de nombres, qu'ils soient entiers, longs, float ou doubles
Principalement utilisé dans la librairie STL (Standard Template Library). Facilite le développement.
Conseil personnel : n'allez pas au delà de l'utilisation de STL…
D. Buskulic, Maubuisson 2001 46
II. Programmation et langagesOrientés Objet
II.6 C++ et Java
D. Buskulic, Maubuisson 2001 47
C++
Origine : les labos AT&T (Bjarne Stroustrup) Le C++ a été conçu comme une extension du C qui
prend certaines libertés avec les concepts POO "purs" L'encapsulation n'est pas obligatoire On mélange les fonctions (procédures) du C et les classes et
leurs fonctions membres Conséquence : on peut très bien écrire un programme
procédural en C++ Principal mérite : a permis une transition "acceptable"
de la programmation procédurale vers la POO Principal défaut : trop de liberté d'action. Il est facile de
mettre le fouillis dans du code Quelqu'un a déjà eu des démêlés avec des pointeurs ?
D. Buskulic, Maubuisson 2001 48
Java
Origine : Sun Microsystems (1991) Objectifs :
Simple : syntaxe "C" Sûr : pas de manipulation de pointeurs, vérification du code
à l'exécution Orienté Objet : Ni variables, ni fonctions globales Robuste : Ramasse-miettes, fortement typé, gestion des
exceptions Indépendant de l'architecture sous sa forme "interprétée"
-> mais lent dans ce cas
C'est de la POO "pure"
D. Buskulic, Maubuisson 2001 49
Java : langage orienté objet
Langage orienté objet : TOUT est classe (pas de fonctions) sauf les types
primitifs (int, float,…) et les tableaux Toutes les classes héritent d'une classe de base
java.lang.Object Héritage simple
D. Buskulic, Maubuisson 2001 50
Java : avantages
Portabilité Le compilateur java génère du "byte-code" Les "Java Virtual Machine" présentes sur de
nombreuses plateformes : Unix, Win32, Mac, Netscape, IE,…
La taille des types primitifs est indépendante de la plateforme
Java est toujours accompagné d'une librairie standard
Robustesse Compilateur contraignant
D. Buskulic, Maubuisson 2001 51
Java : différences avec le C++
Pas de structures, d'unions Pas de types énumérés Pas de typedef Pas de préprocesseur Pas de variables, de fonctions en dehors des classes Pas d'héritage multiple Pas de surcharge d'opérateurs Pas de passage par copie pour les objets Pas de pointeurs, manipulation de référence seulement
D. Buskulic, Maubuisson 2001 52
Java : l'avenir ?
Peu de compilateurs natifs sont disponibles handicap, ne peut pas pour l'instant faire de calcul
scientifique sérieux Mais ca change (compilateurs JIT = Just In Time)
Avantages de robustesse et l'approche "OO pur" Très séduisant
Les utilisateurs, en physique corpusculaire, commencent juste à intégrer les concepts OO et à basculer en partie vers le C++
-> peut-on leur demander encore un effort ? Et Quand ? Heureusement, la syntaxe est proche du C/C++
D. Buskulic, Maubuisson 2001 53
III. Panorama des outils de simulation et d'analyse
disponibles et à venir…
D. Buskulic, Maubuisson 2001 54
Outils de simulation
Passé, présent : Simulation de détecteurs : GEANT 3 Generateurs d'événements : Pythia, Venus,
FLUKA,…. Futur :
Simulation de détecteurs : GEANT 4 Générateurs d'événements : interfacés aux
environnements de travail et/ou réécrits en C++
D. Buskulic, Maubuisson 2001 55
Environnements d'analyse
Passé, présent PAW Environnements "maison"
Futur ROOT JAS (Java Analysis Studio) Anaphe (ex LHC++) Open Scientist
On a le choix… quoique…
D. Buskulic, Maubuisson 2001 56
JAS (Java Analysis Studio)
Basé entièrement sur Java En hérite les avantages et inconvénients
Inclut en gros les fonctionnalités dont nous avons besoin en Physique corpusculaire
Très modulaire Indépendant du format de données Reste du travail à faire, mais concept
intéressant
http://jas.freehep.org/
D. Buskulic, Maubuisson 2001 57
Anaphe
Ex LHC++ Principalement basé sur des produits
commerciaux
http://anaphe.web.cern.ch/anaphe/
D. Buskulic, Maubuisson 2001 58
Open Scientist
Extrêmement modulaire (pb de cohérence ?) Essaye de récupérer et intégrer des codes
libres existants
http://www.lal.in2p3.fr/OpenScientist/
D. Buskulic, Maubuisson 2001 59
ROOT
On va en reparler de façon extensive…
D. Buskulic, Maubuisson 2001 60
IV. Exemple d'un outil de simulation : GEANT 4
IV.1 Introduction
D. Buskulic, Maubuisson 2001 61
GEANT4 : Introduction
GEANT est un outil de simulation pour les détecteurs. Il fournit une infrastructure générale pour :
La description des géométries et matériaux Le transport de particules et leur interaction avec la matière La description de la réponse du détecteur La visualisation des géométries, traces et coups
L'utilisateur développe le code pour Le générateur d'événements primaire La description de la géométrie du détecteur La numérisation de la réponse du détecteur
D. Buskulic, Maubuisson 2001 62
Historique GEANT3 Utilisé par la plupart des expériences de physique
corpusculaire Développement terminé depuis Mars 1994
(Geant3.21) Utilisé également en médecine, dans le spatial,… Résultat : système complexe
Domaine complexe Nécessité d'un outil flexible Maintenance inextricable
D. Buskulic, Maubuisson 2001 63
Limitations de la maintenance GEANT3 : Il devenait impossible d'ajouter une fonctionnalité
ou de rechercher un bug, à cause de la structure trop complexe dominée par des contraintes historiques
Limitation de FORTRAN Problème de main-d'œuvre au CERN Limitations d'un support centralisé
D. Buskulic, Maubuisson 2001 64
GEANT4 Collaboration internationale Adoption de méthodes d'ingénierie logicielle (OOA
et OOD) Choix de l'orientation objet et C++
D. Buskulic, Maubuisson 2001 65
GEANT4 : historique et futur Début du projet : Déc. 94 Geant4 0.1 : Juillet 99 Geant4 2.0 : Juin 2000 Geant4 3.2 : Juin 2001 Encore 10 ans de maintenance et améliorations
D. Buskulic, Maubuisson 2001 66
GEANT4 : Performance "Geant4 is faster than Geant3 in all aspects when its power
and features are well exploited" GEANT4 : Flexibilité
Implémentations et modèles alternatifs Ouvert à une évolution future :
Interfaces pour logiciels externes Extensible, implémentation de nouveaux modèles et
algorithmes sans interférer avec logiciel existant Tout est ouvert à l'utilisateur :
Choix des processus physiques et des modèles Choix de l'interface graphique / technologie de visualisation
D. Buskulic, Maubuisson 2001 67
IV. Exemple d'un outil de simulation : GEANT 4
IV.2 Présentation
D. Buskulic, Maubuisson 2001 68
Simulation de détecteur dans un cadre OO
En physique corpusculaire, la simulation revient à faire de la réalité virtuelle
Pour aider à la conception des détecteurs durant la R&D Pour comprendre la réponse du détecteur pour les études
de physique Nécessité de modéliser les interactions particules-
matière, la géométrie et les matériaux pour propager les particules élémentaires à l'intérieur du détecteur
Il faut également décrire la sensibilité du détecteur pour générer les données brutes (RAW data)
D. Buskulic, Maubuisson 2001 69
Simulation de détecteur dans un cadre OO
GEANT4 est une boite à outils orientée objet fournissant les fonctionnalités nécessaires pour les simulations de détecteurs
Les bénéfices inhérents aux concepts OO permettent un logiciel Facile à maintenir et développer Modulaire Aisé à comprendre pour les non initiés
D. Buskulic, Maubuisson 2001 70
IV. Exemple d'un outil de simulation : GEANT 4
IV.3 Concepts de base
D. Buskulic, Maubuisson 2001 71
Concepts de base
Run, Event, Track, Step, Trajectory Processus physiques Partie sensible d'un détecteur et coups Classes Manager
D. Buskulic, Maubuisson 2001 72
Run
Un "run" dans Geant4, comme dans une expérience réelle, commence par "BeamOn"
Un run est un ensemble d'événements partageant les mêmes conditions de détection Dans un Run, l'utilisateur ne peut pas changer
La géométrie du détecteur Les réglages des processus de physique Le détecteur n'est pas accessible durant un Run !
D. Buskulic, Maubuisson 2001 73
Evénement (Event)
Au démarrage d'un traitement, un événement contient des particules primaires
Ces primaires sont poussées dans une pile (stack) Lorsque la pile devient vide, le traitement de
l'événement est terminé La classe G4Event représente un événement. On
accède aux objets suivants à la fin du traitement : Liste des vertex primaires et des particules Ensemble des trajectoires (option) Ensembles des coups (Hits) Ensemble des digits
D. Buskulic, Maubuisson 2001 74
Trace (Track)
Une trace est un instantané de l'état d'une particule
Un pas (Step) est une information de variation pour la trace Une trace n'est pas un ensemble de pas
Une trace disparaît lorsque Elle passe au delà du volume "monde" Elle disparaît (ex : désintégration) Elle ralentit jusqu'à une énergie cinétique nulle et il
ne reste plus de processus au repos à traiter L'utilisateur décide de la tuer
D. Buskulic, Maubuisson 2001 75
Pas (Step)
Un pas possède deux points et une information de variation (delta) pour la particule (variation d'énergie lors du pas, temps de vol, etc…)
Chaque point connaît les caractéristiques des volumes. Dans le cas où un pas est limité par le bord d'un volume, le point de fin se tient sur le bord et appartient au volume suivant
D. Buskulic, Maubuisson 2001 76
Trajectoire
Une trajectoire est l'historique d'une trace. Elle contient une information sur chaque pas fait par le trace (objets de classe G4TrajectoryPoint)
Mieux vaut ne pas mettre les traces des particules secondaires d'une gerbe dans des trajectoires (pensez à la mémoire)
L'utilisateur peut créer sa propre classe de trajectoire dérivant des classes de base G4VTrajectory et G4VTrajectoryPoint. Ce faisant, on peut enregistrer n'importe quelle information additionnelle pour la simulation
D. Buskulic, Maubuisson 2001 77
Processus physiques
Trois types de base Processus au repos (ex : désintégration au repos) Processus continu (ex: ionisation) Processus discret (ex: désintégration en vol)
Le transport est aussi un processus Interaction avec les limites de volumes
D. Buskulic, Maubuisson 2001 78
Détecteur sensible et coups (hits)
Chaque volume logique peut posséder un pointeur sur un détecteur sensible
Un coup est un instantané de l'interaction physique d'une trace (ou une accumulation d'interactions d'un ensemble de traces) dans une région sensible de votre détecteur
Un détecteur sensible crée des coups (hits) en utilisant l'information donnée dans un objet G4Step. L'utilisateur doit fournir sa propre implémentation de la réponse du détecteur
Les coups (appartenant à l'objet de la classe utilisateur) sont collectés et transmis dans un objet G4Event à la fin de l'événement
D. Buskulic, Maubuisson 2001 79
Classes "Manager"
Classes de gestion d'un run, de l'interface avec le système de visualisation,… G4RunManager G4SDManager G4UIManager G4FieldManager G4VVisManager …
D. Buskulic, Maubuisson 2001 80
En pratique
Le programme "main" C'est à l'utilisateur de l'écrire Construit un G4RunManager (ou classe dérivée) Indique à cet objet les classes utilisateur
G4VUserDetectorConstruction G4VUserPhysicsList G4VUserPrimaryGeneratorAction
Peut définir le VisManager, la session (G)UI (Graphical User interface), classes d'action utilisateur optionnelles, etc…
D. Buskulic, Maubuisson 2001 81
IV. Exemple d'un outil de simulation : GEANT 4
IV.4 Caractéristiques
D. Buskulic, Maubuisson 2001 82
Le noyau
Gère la boucle d'événements Le run manager peut gérer plusieurs événements -> gère le pile-up
Tracking Découplé de la physique, tous les processus sont
gérés à travers la même interface abstraite Indépendant du type de particule Possibilité d'ajouter de nouveaux processus
physiques sans gêner le tracking
D. Buskulic, Maubuisson 2001 83
Géométrie
Description du détecteur et navigation
BaBarXMM-Newton
On peut faire des opérations sur les
solides
Et décrire des géométries complexes :
CMS
D. Buskulic, Maubuisson 2001 84
Physique
Approche : Grande variété de modèles physiques indépendants et
alternatifs Pas de "packages" ou boites noires, les utilisateurs sont en
prise directe avec la physique Validation plus aisée des résultats expérimentaux Distinction entre processus et modèle. Plusieurs modèles
pour le même processus Traitement uniforme de la physique électromagnétique et
hadronique Utilisation de bases de données expérimentales du monde
entier Validation des résultats physiques
D. Buskulic, Maubuisson 2001 85
Physique électromagnétique
Objets : Électrons et positrons Photons : , X et optiques Muons Hadrons chargés Ions
Extension vers les hautes énergies LHC, rayons cosmiques de haute énergie
Extension vers les basses énergies Applications spatiales, médicales, expériences ,
spectroscopie d'antimatière, etc…
•Diffusion multiple•Bremsstrahlung•Ionisation•Annihilation•Effet photoélectrique•Diffusion Compton•Effet Rayleigh•Conversion •Production de paires e+e-•Rayonnement synchrotron•Rayonnement de transition•Cerenkov•Réfraction•Réflexion•Absorption•Scintillation•Fluorescence•Auger (en cours)
D. Buskulic, Maubuisson 2001 86
Physique hadronique
Modèles paramétrés et basés sur les données expérimentales (data driven)
nuclear deexcitation
absorption
Stopping
MeV
Energy
Certains modèles sont complètement nouveaux :•Particules à l'arrêt•Transport de neutrons•Production d'isotopes
D. Buskulic, Maubuisson 2001 87
Autres composants
Matériaux (éléments, isotopes, alliages, composés,…)
Particules (PDG) Coups et numérisation Persistance (enregistrement des résultats) Visualisation
Lien avec OpenGL, OpenInventor, X11, Postscript, DAWN, OPACS, VRML
Interfaces utilisateur Interfaces avec des générateurs d'événements
D. Buskulic, Maubuisson 2001 88
IV. Exemple d'un outil de simulation : GEANT 4
IV.5 Applications
D. Buskulic, Maubuisson 2001 89
Physique corpusculaire ATLAS, BaBar, CMS, HARP, LHCb
Espace, astrophysique XMM, Chandra (observatoires X) Integral
Médical Brachithérapie Planning de traitement de tumeurs Dosimétrie pour mammographies Etude des dommages causés à l'ADN par les
radiations dans l'espace
D. Buskulic, Maubuisson 2001 90
IV. Exemple d'un outil de simulation : GEANT 4
IV.6 Et ce n'est pas tout…
D. Buskulic, Maubuisson 2001 91
Je ne vous ai pas tout dit…
Loin s'en faut… Plus de détails :
Site web : http://geant4.web.cern.ch/geant4/ Sur le Web :
Doc, doc, doc Sources (nécessite CLHEP)
D. Buskulic, Maubuisson 2001 92
V. Un outil d'analyse concret : ROOT
V.1 Un point de philosophie
D. Buskulic, Maubuisson 2001 93
Modèle de développement
ROOT a adopté la "philosophie" Open Source Un noyau dur de développeurs définit les grandes
orientations, à l'écoute des utilisateurs Le code est ouvert, tout le monde peut suggérer des
modifications, améliorations, etc… "Release early, release often"
Modèle "Bazaar" Les utilisateurs participent à la chasse aux bugs
Nécessité d'une grande réactivité de la part des développeurs. Les bugs sont corrigés très rapidement
Ce n'est pas contradictoire avec une analyse ou conception OO
D. Buskulic, Maubuisson 2001 94
Approche "Framework"
Définition Ensemble de catégories de classes cohérentes construites
sur des composants robustes Accent mis sur les entrées/sorties, les conteneurs et
l'interface utilisateur Besoin de contraindre la cohérence de l'application (on a vu
ce que trop de liberté donnait parfois…) Contraintes
Un framework doit être utilisé dans de nombreux endroits Si il n'est utilisé que par une seule expérience, il devient
fragile C'est un investissement à moyen et long terme
D. Buskulic, Maubuisson 2001 95
Approche Framework
Doit toujours penser à l'utilisateur : simplicité d'utilisation
Et garder les pieds sur terre !
D. Buskulic, Maubuisson 2001 96
V. ROOT
V.2 Structure générale
D. Buskulic, Maubuisson 2001 97
RTTI
Fonctionnalités d'un "framework" orienté objet
Services dePersistance
Données
Fonctions
Interface Utilisateur
C++
Java
D. Buskulic, Maubuisson 2001 98
Ce qu'il faut…
Gestion des données Très grandes quantités… qques petaoctets
Interpréteur (langage de macros) Lien simple avec le code compilé
Outils graphiques de présentation et d'analyse interactives
Outils scientifiques (histogrammes, minimisation…) Aides diverses à la programmation (conteneurs…) Connexion réseau Gestion du code source Capacités de calcul distribué ou/et parallèle
D. Buskulic, Maubuisson 2001 99
Les librairies
Plus de 350 classes
700000 lignes de code Core (4 Moctets) CINT (1.5 Moctets) Toutes les librairies (17
Moctets) En vert les librairies
chargées à la demande
D. Buskulic, Maubuisson 2001 100
Modularité
Librairies avec une structure en couches Les classes "CORE" sont toujours chargées (support
RTTI, interpréteur et entrées/sorties de base) Librairies d'application
Charge uniquement ce dont on a besoin Séparation entre objets manipulées et classes de haut
niveau agissant dessus Ex : Dans un job batch, pas besoin de charger HistPainter
(dessin des histogrammes) lorsqu'on a besoin de la librairie Hist (histogrammes)
Librairies partagées -> réduction du temps de lien Librairies ROOT peuvent être utilisées avec des
librairies externes
D. Buskulic, Maubuisson 2001 101
Interfaces abstraites
Utilisation de classes de base abstraites pour améliorer la modularité
Les librairies de bas niveau ne parlent qu'aux classes de base abstraites
Seules les applications utilisant une implémentation dans les classes dérivées devront être liées avec les librairies correspondantes
Exemple : La classe de base abstraite TVirtualPad représente l'interface graphique vers une fenêtre (canvas) ou une sous-fenêtre (pad) mais ne contient aucune implémentation (code source). L'implémentation est dans des classes dérivées Tpad et Tcanvas contenues dans les librairies libGpad et libGraf. libCore a des références vers TVirtualPad, mais seules les applications qui font réellement du graphique devront être liées avec les librairies graphiques libGpad et libGraf
D. Buskulic, Maubuisson 2001 102
D. Buskulic, Maubuisson 2001 103
V. ROOT
V.3 Interpréteur de commandes : CINT
D. Buskulic, Maubuisson 2001 104
Nécessité d'un langage interprété
GUI
Commandes
ScriptsInterprétés Scripts
Compilés
D. Buskulic, Maubuisson 2001 105
Nécessité d'un langage interprété
L'analyse de données requiert un accès efficace aux objets (données et fonctions)
Elle requiert aussi un langage de programmation puissant En mode interprété En mode compilé La transition entre mode interprété et compilé doit
se faire de façon fluide et transparente
Choix de ROOT : CINT CINT = interpréteur C/C++
D. Buskulic, Maubuisson 2001 106
CINT
Interpréteur C/C++ Ecrit par Masaharu GOTO sous licence Open
Source Reconnaît 95% du C ANSI et 90% du
standard C++ ANSI (et ça s'améliore) Peut s'interpréter lui-même (80000 lignes de
C, 5000 lignes de C++) Utilitaires de déboguage
D. Buskulic, Maubuisson 2001 107
CINT dans ROOT
CINT est utilisé dans ROOT: Comme interpréteur de commandes Comme interpréteur de scripts Pour générer un dictionnaire complet des classes Pour générer les fonctions "stubs" (voir plus loin RTTI pour ces deux derniers points)
Le langage de ligne de commandes, de scripts et de programmation sont une seule et même chose
Les gros scripts peuvent être compilés pour une performance optimale
D. Buskulic, Maubuisson 2001 108
CINT est utilisé comme un interpréteur de ligne de commande :
Et interpréteur de scripts
CINT comme interpréteur
root [0] for (int i = 0; i < 10; i++) printf(“Hello\n”)root [1] TF1 f(“f”, “sin(x)/x”, 0, 10)root [2] f.Draw()
bash$ vi script.C{ for (int i = 0; i < 10; i++) printf(“Hello\n”); TF1 f(“f”, “sin(x)/x”, 0, 10); f.Draw();}root [0] .x script.C
D. Buskulic, Maubuisson 2001 109
RTTI (Real Time Type Information)
La RTTI (Real Time Type Information) est la capacité qu'a un système de connaître en cours d'exécution les caractéristiques d'un objet (classe, structure, etc…)
Ex: Dans un programme, je veux savoir de quel type est l'objet A et si il possède la fonction "Draw"
Lorsque vous écrivez un programme, vous avez cette information dans votre tête, mais si vous récupérez un pointeur en cours d'exécution, vous n'avez à priori aucune information sur lui
Nécessité d'un dictionnaire décrivant les classes
D. Buskulic, Maubuisson 2001 110
RTTI dans ROOT
La RTTI est un élément fondamental d'un système Dans ROOT, fourni par CINT
Gestion des services d'entrées/sorties L'interpréteur est basé dessus
-> Lien entre ce qui est interprété et la fonction/classe compilée
Les classes utilisateur peuvent être analysées pour être intégrées au système, ce qui permettra de les appeler interactivement. Le code d'entrée/sortie pour ces classes peut également être généré automatiquement.
Les menus déroulants correspondant aux objets graphiques également basé sur RTTI
D. Buskulic, Maubuisson 2001 111
Intégration des classes utilisateur dans ROOT
D. Buskulic, Maubuisson 2001 112
Le préprocesseur rootcint
UserClass1.hUserClass1.h
UserClass1.hUserClass1.h
UserClass1.hUserClass1.h
rootcint
UserCint.C
Code C++Pour créer
la RTTI
Interface pourl'interpréteur
Streamers(fonctions d'E/S
élémentaires)
D. Buskulic, Maubuisson 2001 113
V. ROOT
V.4 Graphique : GUI (Graphical User Interface) et graphique de base
D. Buskulic, Maubuisson 2001 114
Trois interfaces utilisateur
GUI (Graphical User Interface) Fenêtres, boutons,
menus Ligne de commande
Root CINT (Interpréteur C+
+) Macros, applications,
librairies Compilateur C++ et
interpréteur
D. Buskulic, Maubuisson 2001 115
Premiers pas avec le GUI
Le BrowserROOT
Interfaceligne de commandes
D. Buskulic, Maubuisson 2001 116
"Widgets" de base
D. Buskulic, Maubuisson 2001 117
Exemple d'un GUI utilisateur
Exemple d'un GUIbasé sur les outils ROOT
On peut clicker chaque élément
L'élément Hydrogène a étésélectionné
D. Buskulic, Maubuisson 2001 118
Exemple d'un GUI dans un cadre "on-line"
D. Buskulic, Maubuisson 2001 119
Graphique 2D
Primitives de base (lignes, texte, marqueurs, …) Graphes, annotations Support LaTeX (écran et postscript) Editeur graphique Fenêtre graphique = Canvas, sous-fenêtre = Pad Interaction des objets avec le graphique via
TObject::Draw/Paint TObject::DistanceToPrimitive/ExecuteEvent
D. Buskulic, Maubuisson 2001 120
GraphiquesOrientés Objetavec actions et
sélectionsincluses
D. Buskulic, Maubuisson 2001 121
TCurlyArcTCurlyLineTWavyLine
Et autres briques pour
diagrammes de Feynman
Les formules et
diagrammes peuvent être édités avec
la souris
Support LaTeX
D. Buskulic, Maubuisson 2001 122
V. ROOT
V.5 Gestion des données
V.5.1 La persistance
D. Buskulic, Maubuisson 2001 123
Définition
La persistance est la capacité qu'a un objet à retrouver son état d'une session à l'autre Objets transitoires : en mémoire Objets persistants : savent "se sauver" sur disque
D. Buskulic, Maubuisson 2001 124
La persistance idéale
transitoire
persistant
Convertisseursautomatiques
obj1;1, obj1;2,obj1;3obj2;1, obj2;2
Evolution deschéma
automatique
Compressionefficace
Granularitécorrespondant
aux motifsd'accès
Accèsdistant
LANWAN
Formatmachine
indépendant
Pas de contraintessur
le modèle d'objet
D. Buskulic, Maubuisson 2001 125
Séquentiel/platLes entrées/sorties dans ROOT
Object in memoryObject in
memoryObject in memoryObject in
memoryObjet en mémoire
Streamer ("sérialiseur")
TFile
Objet en mémoire
ObjectGramTBuffer
Un objet transitoireest sérialisé
par son StreamerPas besoin de deux
types de classestransitoire/persistante
TWebFileServeur web
TNetFilerootd
OFileDémon RFIO
Mémoire partagée
sockets
http
D. Buskulic, Maubuisson 2001 126
Sérialiser un objet
root [0] TFile micro(”demo.root","new")
root [1] TH1F hg("hg","filled with a gaussian",100,-4,4)
root [2] hg.FillRandom("gaus",5000)
root [3] hg.Write()
root [4] micro.Map() 20000511/092959 At:64 N=92 TFile
20000511/093055 At:156 N=423 TH1F CX = 2.10
root [5] .qLa fonction Write
appelle TH1F::StreamerLa fonction Streamergénérée par rootcint
remplit un tampon (buffer)avec tous les constituants
de l'objet
D. Buskulic, Maubuisson 2001 127
Macro hsimple.C Macro qui enregistre des histogrammes et
un ntupledans un fichier ROOTroot > .x hsimple.C
Structure trèssimple du fichier
D. Buskulic, Maubuisson 2001 128
Tout ce qu'il fautsavoir pour naviguer
dans un fichier ROOT
D. Buskulic, Maubuisson 2001 129
Les fichiers ROOTpeuvent être structurés
comme un système de fichiersUnix
D. Buskulic, Maubuisson 2001 130
Fichiers déportés
Fichier localFichier déporté
accès viaun serveur Web
Fichier déportéaccès via
le démon ROOT
Accès à un fichier dans un stockage de masse
hpss, castor, via RFIO
Fichiers et répertoires Un répertoire (directory) contient une liste d'objets nommés Un fichier peut contenir une hiérarchie de répertoires (à la
Unix) Les fichiers ROOT sont machine indépendants Compression des données intégrée
Support pour les fichiers locaux ou déportés TFile f1("myfile.root") TFile f2("http://pcbrun.cern.ch/Renefile.root") TFile f3("root://cdfsga.fnal.gov/bigfile.root") TFile f4("rfio://alice/run678.root")
D. Buskulic, Maubuisson 2001 131
V. ROOT
V.5 Gestion des données
V.5.2 Ntuples et arbres
D. Buskulic, Maubuisson 2001 132
Ntuples et arbres (Trees)
Ntuples Ensemble d'entrées comprenant chacune une ou plusieurs
valeurs numériques = très grand tableau Peut faire des des corrélations entre les colonnes Support des Ntuples à la PAW, peut importer des histos et
ntuples au format PAW Arbres (Trees)
Extension des Ntuples pour les objets Chaque entrée peut correspondre à un événement Recueil (collection) de branches (chaque branche a son
propre tampon (buffer) Peut entrer un événement partiellement rempli Peut avoir plusieurs arbres en parallèle
Chaîne (Chain) = Recueil d'arbres
D. Buskulic, Maubuisson 2001 133
Dis, ça sert à quoi, un arbre ?
Tout objet qui dérive de TObject peut être écrit dans un fichier avec une clé (Key) associée via object.Write()
Mais chaque clé produit un excès de 60 octets dans la structure du répertoire en mémoire
object.Write() est adapté pour des objets "esseulés" tels des histogrammes, objets du détecteur, étalonnage mais pas pour des objets "événements"
D. Buskulic, Maubuisson 2001 134
Dis, ça sert à quoi, un arbre ?
Les arbres ont été conçus pour contenir de très grands ensembles d'objets. L'excès en mémoire ne dépasse pas en général 4 octets par entrée
L'accès se fait de façon séquentielle ou aléatoire (l'accès séquentiel est le plus efficace)
Les arbres ont des branches et des feuilles. On peut lire seulement un sous ensemble de toutes les branches. Cela peut grandement accélérer l'analyse de données
Un Ntuple est un cas particulier d'arbre Les arbres sont conçus pour contenir des objets
complexes
D. Buskulic, Maubuisson 2001 135
Remarques importantes
Les fichiers ROOT sont autonomes : Les objets dans les fichiers ROOT (par ex. les
arbres) peuvent référencer d'autres fichiers (arbres)
On peut lire un arbre sans les classes correspondant aux objets qu'il contient
Le dictionnaire est sauvegardé en tant qu'objet dans la structure arbre/branche
Il est possible de générer un squelette de code automatiquement avec TTree::MakeClass
D. Buskulic, Maubuisson 2001 136
Création d'un arbre
Un arbre est une liste de branches Constructeur de la classe Ttree :
Nom de l'arbre (par ex. "myTree") Titre de l'arbre Taille maximale totale des tampons
(buffers) gardés en mémoire vive(défaut : 64 Mo)
TTree *tree = new TTree("T","A ROOT tree");
D. Buskulic, Maubuisson 2001 137
Ajout d'une branche
Nom de la branche Nom de la classe des objets que la
branche va contenir Adresse du pointeur vers l'objet à
enregistrer (dérive de TObject) Taille du tampon (défaut = 32000) Niveau de scission (split level), défaut = 1
Event *event = new Event();myTree->Branch(”eBranch","Event",&event,64000,1);
D. Buskulic, Maubuisson 2001 138
Scission d'une branche
Niveau de scissionsplit level = 0
Niveau de scissionsplit level = 1
Exemple:
tree->Branch("EvBr","Event",&ev,64000,0);
D. Buskulic, Maubuisson 2001 139
Ajout d'une branche avec une liste de variables
Nom de la branche Adresse du premier élément
d'une structure Leaflist = noms et types de
toutes les variables Ordonner les variables selon
leur taille
ExampleTBranch *b = tree->Branch ("Ev_Branch",&event,
"ntrack/I:nseg:nvtex:flag/i:temp/F");
D. Buskulic, Maubuisson 2001 140
Remplissage d'un arbre
Créer une boucle "for" Créer des objets Event Appeler la méthode Fill() de l'arbre
myTree->Fill()
D. Buskulic, Maubuisson 2001 141
Ecriture du fichier
La commande TFile::Write() Ecrit les histogrammes et les arbres Write est nécessaire pour écrire l'en-tête du fichier
hfile->Write()
D. Buskulic, Maubuisson 2001 142
Exemple complet de création d'un arbre
Quelques lignesde code de création
d'un arbre pour des structures
qui peuvent êtretrès complexes
D. Buskulic, Maubuisson 2001 143
Le "Browser" parcoureur ? brouteur ? feuilleteur ?
8 branches de l'arbre "T"
8 feuilles de la brancheElectrons
D. Buskulic, Maubuisson 2001 144
Les Chaînes (Chains)
Scénario : Réaliser une analyse sur de multiples fichiers ROOT. Tous les fichiers ont la même structure et le même arbre
Des Chaînes sontdes recueils
de chaînes de fichiers
D. Buskulic, Maubuisson 2001 145
Chaînes de fichiers
Un TChain est un recueil (collection) d'arbres Même syntaxe pour les chaînes et les arbres
root > .x h1chain.C root > chain.Process("h1analysis.C")
{ //creates a TChain to be used by the h1analysis.C class //the symbol H1 must point to a directory where the H1 data sets //have been installed TChain chain("h42"); chain.Add("$H1/dstarmb.root"); chain.Add("$H1/dstarp1a.root"); chain.Add("$H1/dstarp1b.root"); chain.Add("$H1/dstarp2.root");}
D. Buskulic, Maubuisson 2001 146
Structure conçue pour supporter de
très grosses bases de données
D. Buskulic, Maubuisson 2001 147
Analyse de données dans un arbre
Via TTree::Draw(), à la PAW, par ex. root > tree.Draw("px","pt>1.2")
Via click dans le TBrowser Via la classe spécialisée TTreeViewer Via la même classe que celle qui a généré
l'arbre Via un code généré par TTree::MakeClass Via un code généré par TTree::MakeSelector
D. Buskulic, Maubuisson 2001 148
Analyse "interactive" Dans TBrowser :un double click
pour histogrammerune feuille
TTreeViewer :Coupures complexes,listes d'événements,
vues 1D, 2D, 3D,traitement en parallèle
D. Buskulic, Maubuisson 2001 149
Générateurs de code automatiques
On doit pouvoir lire les données sans les classes qui ont servi à les créer. Ces classes peuvent ne plus être disponibles après un certain temps
ROOT fournit deux utilitaires pour générer un squelette de classe qui puisse lire les données, en préservant les attributs de nom, de type et de structure. TTree::MakeClass TTree::MakeSelector
D. Buskulic, Maubuisson 2001 150
TTree::MakeClass
tree.MakeClass(“myClass”); génère deux fichiers: myClass.h et myClass.C
myClass.h contient la déclaration de classe et le code des fonctions membres qui sont "sélection invariantes".
myClass.C contient un exemple de boucle vide ou l'on peut insérer le code d'analyse
Utilisation: root > .L myClass.C or .L myClass.C++ root > myClass xx; root > xx.Loop();
Utilisation de l'interpréteur
Utilisation du compilateur natifLe fichier myClass.Cest automatiquement
compiléet lié !!
D. Buskulic, Maubuisson 2001 151
TTree::MakeSelector
tree.MakeSelector(“myClass”); génère deux fichiers: myClass.h and myClass.C qui peuvent être utilisées dans un système parallèle comme PROOF. La boucle d'événements n'est plus sous le contrôle de l'utilisateur.
myClass.h contient la déclaration de classe et le code des fonctions membres qui sont "sélection invariantes".
myClass.C contient le squelette de 4 fonctions: Begin, ProcessCut, ProcessFill, Terminate.
Utilisation: root > tree.Process(“myClass.C”); root > chain.Process(“myClass.C++”);
La macro estautomatiquementcompilée et liée…
D. Buskulic, Maubuisson 2001 152
V. ROOT
V.5 Gestion des données
V.5.3 Approche base de données dans ROOT
D. Buskulic, Maubuisson 2001 153
Les tendances
Mettre tout dans des systèmes de gestion de bases de données orientées objet
Encore beaucoup de travail pour éviter les écueils (trop gros fichiers, transferts de données non optimisés, etc…)
D. Buskulic, Maubuisson 2001 154
Les tendances "à la sauce ROOT"
Met les données écrites une seule fois (typiquement les données brutes, mais également toutes les données non destinées à être modifiées) dans un système de stockage d'objets
Utilise les RDBMS (Relational Database Management System) comme Oracle ou MySQL pour
Catalogues Run/Evénements Géométrie, étalonnages Par ex. interface ROOT<-> Oracle
Utilise le mode scindé (split) de ROOT pour faire l'analyse de physique (efficacité de l'accès)
ROOT Oracle
Combine les deux technologies
D. Buskulic, Maubuisson 2001 155
histograms
Etalonnages
Géométries
CatalogueRun/Fichiers
Trees
Stockage d'événements
FichiersROOT
OracleMySQL
D. Buskulic, Maubuisson 2001 156
V. ROOT
V.6 Graphique : présentation des données 1, 2 et 3D
D. Buskulic, Maubuisson 2001 157
Représentation graphique des objets
Les objets de ROOT dérivent de la classe de base TObject
Cette classe possède une fonction Draw(), surdéfinie dans les classes dérivées
Chaque objet se dessine lui même Ce que l'on voit sur l'écran est l'objet lui-
même et non une copie -> si on modifie la représentation de l'objet à
l'écran, on modifie également l'objet en mémoire
D. Buskulic, Maubuisson 2001 158
Options graphiques 1D
Tout objet dans le canvaspeut être clické et édité
D. Buskulic, Maubuisson 2001 159
Options graphiques 2D
Plusieurs vuesdifférentes
du même objet
D. Buskulic, Maubuisson 2001 160
Options graphiques 2D
Le nombre et le typedes contours peut-
êtremodifié avec la
souris.Chaque contour
est un objet
D. Buskulic, Maubuisson 2001 161
Options graphiques 2D
Tous ces graphiques
peuvent être
tournés avec la souris
D. Buskulic, Maubuisson 2001 162
Options graphiques 2D
Même image sur l'écran etsur une sortie Postscript
D. Buskulic, Maubuisson 2001 163
V. ROOT
V.7 Outils "physiques"
D. Buskulic, Maubuisson 2001 164
Outils "physiques"
Graphes Fonctions Histogrammes 1D, 2D, 3D Minimisations
D. Buskulic, Maubuisson 2001 165
Graphes
Un ensemble de points (x,y) peut être représenté par un graphe (TGraph)
Les options graphiques supportées sont celles correspondant au cas 1D
D. Buskulic, Maubuisson 2001 166
Fonctions
Fonctions 1D, 2D et 3D (classes TF1,2,3) Un objet TF1 est une fonction à 1 dimension définie entre un
minimum et un maximum La fonction peut être une fonction simple ou une fonction
précompilée Elle peut avoir des
paramètres associés Exemple de création et
affichage d'une fonction TF1 f1("f1","sin(x)/x",0,10); f->Draw();
D. Buskulic, Maubuisson 2001 167
Les classes d'histogrammes
1-Dim
2-Dim
3-Dim
Pas dans PAW/Hbook
D. Buskulic, Maubuisson 2001 168
Sauvegarde/Lecture d'un histogramme de/vers un fichier ROOT
Les lignes suivantes créent un fichier Root et y sauvent un histogramme
TFile f("histo.root","new"); TH1F h1("hgaus","histo gaussienne",100,-3,3); h1.FillRandom("gaus",10000); h1.Write();
Pour lire cet histogramme dans une autre session ROOT, effectuer : TFile f("histos.root"); TH1F *h = (TH1F*)f.Get("hgaus");
On peut sauvegarder TOUS les histos en mémoire dans le fichier : f.Write();
D. Buskulic, Maubuisson 2001 169
Remplissage des histogrammes
Un histogramme est rempli à l'aide de commandes telles que : h1->Fill(x); h1->Fill(x,w); //remplissage avec poids h2->Fill(x,y); h2->Fill(x,y,w); h3->Fill(x,y,z); h3->Fill(x,y,z,w);
Si TH1::Sumw2 a été appelé avant le remplissage, la somme des carrés des poids sera également sauvegardée
Il est possible d'incrémenter directement un canal particulier via TH1::AddBinContent() ou remplacer le contenu existant par TH1::SetBinContent()
L'accès au contenu d'un canal (bin) donné se fait par : Double_t bincontent = h->GetBinContent();
D. Buskulic, Maubuisson 2001 170
"Binning" et "rebinning" automatique
Lorsque l'option de binning automatique est sélectionnée, la fonction Fill va étendre les limites des axes pour les adapter à la valeur passée en argument
Ce binning automatique est utilisé dans TTree::Draw pour histogrammer les variables d'un arbre sans connaître l'étendue de leurs valeurs.
Un histogramme peut être "rebinné" (changement du nombre de canaux) à l'aide de TH1::Rebin()
Les erreurs sont recalculées durant ce processus
D. Buskulic, Maubuisson 2001 171
Incertitudes associées
Par défaut, pour chaque canal, on calcule la somme des poids au remplissage
On peut également appeler TH1::Sumw2 pour forcer la sauvegarde de la somme des carrés des poids pour chaque canal
Si Sumw2 a été appelé, l'incertitude par canal (bin) est calculée comme sqrt(somme des carrés des poids), sinon elle est mise à sqrt(contenu du canal)
Pour obtenir l'incertitude correspondant à un canal donné, faire :
Double_t err = h->GetBinError(bin);
D. Buskulic, Maubuisson 2001 172
Opérations sur les histogrammes
Un grand nombre d'opérations sont implémentées sur les histogrammes :
Ajout, produit, quotient d'un histogramme par celui qui est courant
Ajout, produit, quotient de deux histogrammes avec des coefficients et sauvegarde dans l'histogramme courant
Ajout, produit, quotient d'un histogramme par une fonction Les incertitudes sont recalculées en supposant des
histogrammes indépendants Les opérateurs +, -, *, / sont supportés
D. Buskulic, Maubuisson 2001 173
Projections
Sont prévues : La projection 1D d'un histogramme 2D ou Profile.
Voir TH2::ProjectionX,Y, TH2::ProfileX,Y, TProfile::ProjectionX
Une projection 1D, 2D ou un profile d'un histo 3D. Voir TH3::ProjectionZ, TH3::Project3D
On peut ajuster ces projections par TH2::FitSlicesX,Y, TH3::FitSlicesZ
D. Buskulic, Maubuisson 2001 174
Nombres aléatoires et histogrammes
Plusieurs générateurs de nombres aléatoires sont prévus. Voir classes TRandom, TRandom2,3
On peut remplir aléatoirement un histogramme par TH1::FillRandom en utilisant
Une fonction analytique de type TF1 existante Un autre histogramme (toutes les dimensions)
Exemple : les deux lignes suivantes créent et remplissent un histogramme de 10000 entrées correspondant à une distribution gaussienne (moyenne = 0, sigma = 1 par défaut) :
TH1F h1("h1","histo gaussienne",100,-3,3); h1.FillRandom("gaus",10000);
TH1::GetRandom est utilisé pour renvoyer un nombre aléatoire distribué selon le contenu d'un histogramme
D. Buskulic, Maubuisson 2001 175
Dessin et affichage des histogrammes
Lorsque vous appelez la méthode Draw (TH1::Draw()) d'un histogramme pour la première fois, un objet THistPainter est créé et son pointeur sauvé comme donnée membre de l'objet histogramme
La classe THistPainter est spécialisée dans le dessin des histogrammes. Elle a été séparée de l'histogramme lui-même pour permettre l'utilisation des objets histogrammes sans la surcharge due au graphique (programme batch par ex.)
Lorsqu'un histogramme est modifié, pas besoin d'appeler Draw() de nouveau. Son image est rafraîchie lorsque le Pad est rafraîchi
On peut dessiner le même histo dans des pads différents avec des options graphiques différentes
Lorsqu'on détruit un histo, son image est automatiquement enlevée du pad
D. Buskulic, Maubuisson 2001 176
Ajustement (fit) des histogrammes avec Minuit
Les histogrammes (1D, 2D et 3D et Profiles) peuvent être ajustés avec une fonction utilisateur via TH1::Fit.
Deux algorithmes d'ajustement sont possibles : Méthode du chi carré et max vraisemblance (Log Likelihood)
Les fonctions utilisateur peuvent être : Standard : gaus, landau, expo, poln Combinaison de fonctions standard : poln+gaus Une fonction C++ interprétée ou précompilée
Lors de l'ajustement d'un histogramme, la fonction résultante et ses paramètres est ajoutée à la liste de fonctions de cet histogramme. Si l'histogramme est sauvé, cette liste également
On peut récupérer les paramètres de la fonction/ajustement à l'aide de commandes telles que :
Double_t chi2 = myfunc->GetChisquare(); Double_t par0 = myfunc->GetParameter(0); // valeur 1er paramètre Double_t err0 = myfunc->GetParError(0); // erreur 1er paramètre
D. Buskulic, Maubuisson 2001 177
Exemple d'ajustement
Voir FittingDemo.C
Macro non nommée fitf.C
Macro nommée
Tourne FittingDemo.CPlus d'infos:http://root.cern.ch/root/html/examples/fit1.C.htmlhttp://root.cern.ch/root/html/examples/myfit.C.htmlhttp://root.cern.ch/root/html/examples/backsig.C.html
D. Buskulic, Maubuisson 2001 178
Combinaison de fonctions
y(E) = a1 + a2E + a3E2 + AP ( / 2 )/( (E-)2 + (/2)2)
background lorenzianPeakpar[0] = a1 par[0] = AP
par[1] = a2 par[1] = par[2] = a3 par[2] =
fitFunction = background (x, par ) + lorenzianPeak (x, &par[3])par[0] = a1 par[1] = a2 par[2] = a3
par[3] = Ap
par[4] = par[5] =
On peut minimiser des fonctions avec un grand nombre de
paramètres (> 200)Pas de limitations
D. Buskulic, Maubuisson 2001 179
Fonctions associées
Un ou plusieurs objets (typiquement un TF1*) peuvent être ajoutés à la liste de fonctions associées à un histogramme
Lorsque TF1::Fit est appelé, la fonction résultante est ajoutée à la liste Soit un histogramme h, on peut récupérer une fonction associée par :
TF1* myfunc = h->GetFunction("myfunc");
D. Buskulic, Maubuisson 2001 180
V. ROOT
V.8 Outils "techniques"
D. Buskulic, Maubuisson 2001 181
Outils techniques
Conteneurs = objets destinés à contenir d'autres objets (tableaux, listes, cartes,…) Fonctionnalités globalement équivalentes à STL On parcourt le contenu à l'aide d'un "itérateur" Certains conteneurs sont particulièrement
efficaces dans le cadre ROOT : TClonesArray
D. Buskulic, Maubuisson 2001 182
V. ROOT
V.9 Calcul parallèle
D. Buskulic, Maubuisson 2001 183
Calcul parallèle dans ROOT : PROOF
PROOF est une implémentation d'un système de calcul parallèle dans ROOT
Il permet le traitement en parallèle de chaînes d'arbres sur des grappes de machines hétérogènes
Ce développement se fait avec en arrière plan les développements récents de GRID
GRID = concept d'un ensemble de machines dispersées sur la terre devant traiter une très grande quantité de données en parallèle Exemple simpliste : projet SETI@home
D. Buskulic, Maubuisson 2001 184
ROOT/PROOF et les GRIDs
SélectionParamètres
DB1
DB4
DB5
DB6
CPU
Local
Remote
Procédure
Proc.C
Proc.C
Proc.C
Proc.C
Proc.C
PROOF
CPU
CPU
CPU
CPU
CPU
TagDB
RDB
DB3
DB2
Autant que possible,transférer la tâchevers les donnéeset non l'inverse
D. Buskulic, Maubuisson 2001 185
La "Parallel ROOT Facility"
Les serveurs esclaves forment la partie active, demandant au serveur maître du travail lorsqu'ils sont prêts
-> envoi de paquets de données par le maître Paramètres cruciaux
la taille des paquets envoyés Au maître de n'envoyer à l'esclave que ce qu'il peut traiter (ni
trop, ni trop peu). Ceci se décide en fonction du comportement précédent de l'esclave (vitesse, crash, etc…)
La localisation des données Au maître de faire attention à envoyer du travail sur des
données qui sont proches de l'esclave (si possible sur l'esclave lui-même)
D. Buskulic, Maubuisson 2001 186
Diagramme de traitement des données
Initialisation
Traitement
Traitement
Traitement
Traitement
Attentecommande
Esclave 1Tree->Draw()
Gén
érat
eur
de
paq
uet
s Initialisation
Traitement
Traitement
Traitement
Traitement
Attentecommande
Esclave NMaîtreTree->Draw()
GetNextPacket()
GetNextPacket()
GetNextPacket()
GetNextPacket()
GetNextPacket()
GetNextPacket()
GetNextPacket()
GetNextPacket()
SendObject(histo)SendObject(histo)
Sommehistogrammes
Affichehistogrammes
0,100
200,100
340,100
490,100
100,100
300,40
440,50
590,60
D. Buskulic, Maubuisson 2001 187
Exemple d'une session PROOF
root [0] .! ls -l run846_tree.root-rw-r-r-- 1 rdm cr 598223259 Feb 1 16:20 run846_tree.root
root [1] TFile f("run846_tree.root")
root [2] gROOT->Time()
root [3] T49->Draw("fPx")Real time 0:0:11, CP time 10.860
root [4] gROOT->Proof()*** Proof slave server : pcna49a.cern.ch started ****** Proof slave server : pcna49b.cern.ch started ****** Proof slave server : pcna49c.cern.ch started ****** Proof slave server : pcna49d.cern.ch started ****** Proof slave server : pcna49e.cern.ch started ***Real time 0:0:4, CP time 0.140
root [5] T49->Draw("fPx")Real time 0:0:3, CP time 0.240
D. Buskulic, Maubuisson 2001 188
V. ROOT
V.10 Documentation automatique
D. Buskulic, Maubuisson 2001 189
Documentation
La documentation est très importante dans tous les grands projets Pour l'utilisateur : Manuels, exemples, etc… Pour le développeur : documentation du code, de
la structure, etc… Mais documenter du code est une tâche
ardue -> documentation automatique à partir du
code source
D. Buskulic, Maubuisson 2001 190
Documentation automatique
ROOT dispose d'un mécanisme de documentation automatique basé sur le dictionnaire généré par l'interpréteur à partir des en-têtes de classe (fichiers xxx.h)
Produit des pages web, avec liens permettant de naviguer dans le code
Dictionnaire CINTet sources
xxx.h, xxx.cc
PagesHTMLTHtml
D. Buskulic, Maubuisson 2001 191
Allez voir vous-même http://root.cern.ch/root/htmldoc/ClassIndex.html
D. Buskulic, Maubuisson 2001 192
V. ROOT
V.11 Et ce n'est pas tout…
D. Buskulic, Maubuisson 2001 193
Je ne vous ai pas tout dit…
Loin s'en faut… Plus de détails :
Site web : http://root.cern.ch Manuel ROOT
Sur le Web : Doc, doc, doc Source et binaires pour une trentaine de
combinaisons compilateurs/plateformes