Esempi di analisi dati con ROOT Guida minima alluso di ROOT per le esperienze didattiche di...
-
Upload
beppe-lamberti -
Category
Documents
-
view
219 -
download
0
Transcript of Esempi di analisi dati con ROOT Guida minima alluso di ROOT per le esperienze didattiche di...
Esempi di analisi dati con ROOT
Guida minima all’uso di ROOT per le esperienze didattiche di
Laboratorio di ElettromagnetismoPiano Lauree Scientifiche
Andrea Ventura
Dipartimento di Fisica – Università del Salento
Lecce, gennaio 20131
Introduzione
ROOT è un programma molto utilizzato nell’ambito della Fisica delle Alte Energie, che permette di analizzare anche grandi quantità di dati, produrre risultati statistici, realizzare grafici, adattare dati sperimentali a funzioni, e molto altro ancora.E’ un programma molto versatile e gratuito: l’attuale versione per Windows può essere scaricata dall’indirizzo: ftp://root.cern.ch/root/root_v5.34.04.win32.vc90.msi
Senza la pretesa di conoscere l’intero pacchetto, qui considereremo alcune semplici applicazioni per un impiego immediato.
2
Installazione del pacchetto
• Una volta scaricato il file di setup (root*.msi), si segue la procedura standard di installazione, al termine della quale compare un’icona sul desktop su cui cliccare per avviare ROOT
• ROOT è disponibile anche per altri sistemi operativi (Linux, Mac OS).
• All’avvio, appare una finestra (“shell”) per i comandi da sottomettere al programma.
3
Avvio di ROOT
4
Iniziare con ROOT
• ROOT è basato su CINT, un interprete di C/C++• Blocchi di comandi possono essere racchiusi tra
parentesi graffe, intervallati da punti e virgola, ovvero: {...; ...; ...}
• I comandi precedenti possono essere richiamati tramite la freccia verso l’alto ()
• Per non digitare ogni volta gli stessi comandi, possiamo scriverli in un file (ad esempio miaMacro.C) ed eseguirli con “.x miaMacro.C” – la directory di lavoro è tipicamente C:\root
• Per uscire da ROOT digitare “.q” 5
Semplici operazioni
• Possiamo fare qualche calcolo, ad esempio: 7 · 9
• Possiamo elencare i quadrati dei primi 5 numeri pari:
• Possiamo disegnare una funzione, f(x) = 2 senx (x–1)2
– Per avere la griglia, anteporre
– Per conoscere il valore di f(3)
root [0] 7*sqrt(9)
root [1] for (int i=1; i<=5; i++) printf(“%d^2 = %d ”, 2*i, 4*i*i);
root [2] TF1 f("f","2*sin(x)*(x-1)**2",-3,7); root [3] f.Draw();
c1 = new TCanvas; c1->SetGrid();
f(3)(const Double_t)1.12896006447893770e+000
6
Effettuare un fit a una funzione• Si salvi in un file e si esegua il seguente esempio:
{ // Creazione di una canvas con griglia: gROOT->Reset(); c1 = new TCanvas("c1", "Fit dei dati con errori su x e y", 200, 10, 700, 500); c1->SetGrid(); Int_t n = 10; // Inizializzazione di 4 vettori: // x[] e ex[] sono le misure in ascissa x_i e i loro errori Float_t x[n] = {0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.65, 0.75, 0.95, 1.2}; Float_t ex[n] = {0.05, 0.05, 0.04, 0.05, 0.04, 0.05, 0.06, 0.06, 0.05, 0.05}; // y[] e ey[] sono le misure in ordinata y_i e i loro errori Float_t y[n] = {0.1, 0.3, 0.55, 0.67, 0.75, 0.79, 0.71, 0.63, 0.45, 0.35}; Float_t ey[n] = {0.04, 0.03, 0.03, 0.02, 0.02, 0.02, 0.03, 0.03, 0.04, 0.04}; // Creazione di un grafico x-y con errori gr = new TGraphErrors(n,x,y,ex,ey); gr->SetTitle("Fit della funzione"); gr->SetMarkerColor(4); gr->SetMarkerStyle(21); gr->Draw("AP"); gStyle->SetOptFit(1111); // Fit dei dati del grafico con un polinomio di terzo grado gr->Fit("pol3"); c1->Update();}
7
Risultato del fit
• Il fit a una polinomiale di terzo grado è soddisfacente (il 2/ndf è prossimo a 1)
• Provare altre funzioni, come “pol2”, “pol4” o “expo”8
Fit con altre funzioni• All’interno della macro inserire la funzione desiderata:
• Lanciare la macro. Il fit potrebbe non funzionare per via di inadeguati valori iniziali dei parametri p0, p1, p2.– Definirli con “SetParameters” e rilanciare:
{ ... // Creazione di una canvas con griglia // Inizializzazione dei 4 vettori x[] ex[] y[] ey[] // Creazione di un grafico x-y con errori ...
// Definizione di una nuova funzione TF1 *funz = new TF1("funz","[0]*x*exp([1]*x+[2])",0.5,100); // Fit in un intervallo di interesse, tra -3 e 7 gr->Fit("funz","","",-3,7); c1->Update();}
9
TF1 *funz = new TF1("funz","[0]*x*exp([1]*x+[2])",0.5,100); funz->SetParameters(5.,-1.,0.);
Risultato del nuovo fit
• Il nuovo fit alla funzione desiderata è soddisfacente• Si provino altre funzioni arbitrarie o altri set di punti
10
Altre operazioni con ROOT
• Si possono visualizzare i valori dei parametri del fit:
• Si possono salvare i grafici ottenuti tramite l’interfaccia grafica: “File -> Save As…” oppure
• Maggiori dettagli su http://root.cern.ch• Per ulteriori aiuti o chiarimenti:– [email protected]
c1->SaveAs(“mioGrafico.gif”)
11
float p0=funz->GetParameter(0), dp0=funz->GetParError(0);float p1=funz->GetParameter(1), dp1=funz->GetParError(1);float p2=funz->GetParameter(2), dp2=funz->GetParError(2);cout << "p0 = " << p0 << " +- " << dp0 << endl;cout << "p1 = " << p1 << " +- " << dp1 << endl;cout << "p2 = " << p2 << " +- " << dp2 << endl;