Esempi di analisi dati con ROOT
Guida minima all’uso di ROOT
per le esperienze didattiche di
Laboratorio di Elettromagnetismo
Piano Lauree Scientifiche
Andrea Ventura
Dipartimento di Matematica e Fisica – Università del Salento
Lecce, gennaio 2015
1
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: una versione
per Windows può essere scaricata dall’indirizzo:
http://www.dmf.unisalento.it/LaureeScientifiche/Download/root/ro
ot_v5.34.14.win32.vc10.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
root [0]
7*sqrt(9)
• Possiamo elencare i quadrati dei primi 5 numeri pari:
root [1]
for (int i=1; i<=5; i++) printf(“%d^2 = %d
”, 2*i, 4*i*i);
• Possiamo disegnare una funzione, f(x) = 2 senx (x–1)2
root [2]
root [3]
TF1 f("f","2*sin(x)*(x-1)**2",-3,7);
f.Draw();
– Per avere la griglia, anteporre
c1 = new TCanvas;
c1->SetGrid();
– Per conoscere il valore di f(3)
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:
{
...
// 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();
}
• Lanciare la macro. Il fit potrebbe non funzionare per
via di inadeguati valori iniziali dei parametri p0, p1, p2.
– Definirli con “SetParameters” e rilanciare:
TF1 *funz = new TF1("funz","[0]*x*exp([1]*x+[2])",0.5,100);
funz->SetParameters(5.,-1.,0.);
9
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:
float p0=funz->GetParameter(0),
float p1=funz->GetParameter(1),
float p2=funz->GetParameter(2),
cout << "p0 = " << p0 << " +- "
cout << "p1 = " << p1 << " +- "
cout << "p2 = " << p2 << " +- "
dp0=funz->GetParError(0);
dp1=funz->GetParError(1);
dp2=funz->GetParError(2);
<< dp0 << endl;
<< dp1 << endl;
<< dp2 << endl;
• Si possono salvare i grafici ottenuti tramite l’interfaccia
grafica: “File -> Save As…” oppure
c1->SaveAs(“mioGrafico.gif”)
• Maggiori dettagli su http://root.cern.ch
• Per ulteriori aiuti o chiarimenti:
– [email protected]
11
Scarica

Esempi di analisi dati con ROOT - “E. De Giorgi” – Università del