ROOT É un potente strumento object oriented per analisi di dati, preparato al CERN http://root.cern.ch Può essere pensato come una grande libreria Object-Oriented di classi C++ con un interprete C++ (CINT) che fa da interfaccia all’utente per eseguire istruzioni C++ o semplici macro (programmi) a.a. 2005/2006 Introduzione a ROOT: E. Meroni Concetti di Object Oriented Classe: la descrizione di una “cosa” nel sistema Oggetto: istanza di una classe Metodi: funzioni per una classe Esempio: definizione di un istogramma: TH1F *h = new TH1F (“h”,”nome “,100,-2.8,1.8) Classe: TH1F Operatore: new (crea una zona di memoria) h : puntatore alla zona di memoria Metodo : h->Fill(xx) funzione che agisce sulle variabili della classe h->Draw() istanza: h1,h2,… a.a. 2005/2006 Introduzione a ROOT: E. Meroni Cosa può fare ROOT ? Molte cose fra cui: Istogrammi e fit Grafici (2D, 3D) I/O file : specialmente per istogrammi, Trees a.a. 2005/2006 Introduzione a ROOT: E. Meroni Analisi di dati istogramma fit funzione funzione a.a. 2005/2006 Introduzione a ROOT: E. Meroni Analisi di dati 2D Lego Plot sovrapposizione a.a. 2005/2006 Introduzione a ROOT: E. Meroni Analisi di dati grafico a.a. 2005/2006 Introduzione a ROOT: E. Meroni Come si usa ? Interfaccia dell’utente: GUI: Browsers, Panels, Tree Viewer Command Line interface: C++ interpreter CINT Script Processor (C++ compiled C++ interpreted) Per iniziare root > root Per uscire da root root[0].q a.a. 2005/2006 Introduzione a ROOT: E. Meroni GUI di Base • • • • • • • • • (Interfaccia grafica per l’utilizzatore) root[0]TBrowser *b= new TBrowser(“nome”); Browsing and opening files GUI Drawing histograms Right click, left click, middle click Draw Panel Fit Panel Adding Color and Zooming Adding text and other objects Dividing the canvas Setting the log scale a.a. 2005/2006 Introduzione a ROOT: E. Meroni Displaying a Histogram Finestrella creata da TBrowser: Aprire un ROOT file che contiene istogrammi già precedentemente salvati Display di un istogramma La finestrella si chiama Canvas a.a. 2005/2006 Introduzione a ROOT: E. Meroni Basic Navigation by Clicking ( con il mouse ) • Left Click – select the object – drag the object – resize the object • Right Click – context menu – class::name – methods • Middle Click – activate canvas – freezes event status bar a.a. 2005/2006 Introduzione a ROOT: E. Meroni Fitting, Coloring, and Zooming • Adding a gaussian fit • Coloring the histogram • Zooming/unzooming a.a. 2005/2006 Introduzione a ROOT: E. Meroni Adding Objects to the Canvas • The Editor • Adding an Arrow • Adding Text a.a. 2005/2006 Introduzione a ROOT: E. Meroni Dividing the Canvas • Create a new Canvas • Divide it in 2 • Draw two histograms. 1. Lego plot 2. LogY a.a. 2005/2006 Introduzione a ROOT: E. Meroni Comandi in linea Si usano le frecce per richiamare i comandi • • • • • Aprire e guardare un file Disegnare istogrammi Aggiungere un Fit Aggiungere le barre di errore Aggiungere colori a.a. 2005/2006 Introduzione a ROOT: E. Meroni Aprire un File • Open a file for reading root [] TFile *f= new TFile("Example.root") • Look at the contents of the file root [] f.ls() TFile** Example.root ROOT file TFile* Example.root ROOT file KEY: TTree myTree;1 Example ROOT tree KEY: TH1F totalHistogram;1 Total Distribution KEY: TH1F mainHistogram;1 Main Contributor KEY: TH1F s1Histogram;1 First Signal KEY: TH1F s2Histogram;1 Second Signal a.a. 2005/2006 Introduzione a ROOT: E. Meroni Definire e Disegnare una funzione root[] TF1*f1 = new TF1("f1","sin(x)/x",-2.,13.); root[] TCanvas *c1= new TCanvas("c1","funz",600,400); root[] f1->Draw(); a.a. 2005/2006 Introduzione a ROOT: E. Meroni Definire la finestrella Canvas root[] TCanvas *c1 =new TCanvas("c1",“nome",600,400) root[] c1->Divide(1,2) c1->cd(1) root[] h1->Draw() root[] c1->cd(2) root[] h1->Fit(“gaus”) root[] h1->Draw() root[] a.a. 2005/2006 Introduzione a ROOT: E. Meroni Fitting es: gaus root [] h1->Draw() root root root root [] [] [] [] h1->Fit("gaus") h1->SetFillColor(9) h1->SetLineColor(2) h1->Draw() a.a. 2005/2006 Introduzione a ROOT: E. Meroni Tipi di Comandi 1. CINT commands start with “.” root[0].? this command will list all the CINT commands root[1].x [filename] load [filename] and execute function [filename] root[2].L [filename] load [filename] 2. SHELL commands start with “.!” for example: root[3] .! ls a.a. 2005/2006 Introduzione a ROOT: E. Meroni Scripts o Macro Un-named Script Start with "{" and end with "}" All variables are in the global scope Named Script C++ functions Scope rules follow standard C++ Function with the same name as the file is executed with a .x Parameters a.a. 2005/2006 Introduzione a ROOT: E. Meroni Scripts Examples • Un-named Script: hello.C { cout << "Hello" << endl; } • Named Script:say.C void say(char * what = "Hello") { cout << what << endl; } • Executing the Named Script root [3] .x hello.C Hello root [4] .x say.C("Hi there") Hi there a.a. 2005/2006 Introduzione a ROOT: E. Meroni Script es: histo.C { gROOT->Reset(); TH1F * h1 =new TH1F ("h1","Istogramma 1D",100,5.,5.); float x; fstream f; f.open("gaus.dat",ios::in); for (int i = 0; i < 10000; i++) { f >> x; h1->Fill(x); } f.close(); h1->Draw(); } root[].x histo.C a.a. 2005/2006 Introduzione a ROOT: E. Meroni Script es:funzione.C { gROOT->Reset(); TF1 f1("f1","sin(x)/x",0.,10.); TCanvas c1("c1","funzione",600,400); f1.Draw(); } root[].x funzione.C a.a. 2005/2006 Introduzione a ROOT: E. Meroni Costruttori TF1 2. Same as the previous TF1 with Parameters Call the constructor with parameter indices TF1 *f1 = new TF1 ("f1","[0] *x*sin( [1] *x)",-3,3); Set the parameters explicitly f1->SetParameter(0,10); f1->SetParameter(1,5); f1->Draw(); a.a. 2005/2006 Introduzione a ROOT: E. Meroni