Esempi di analisi dati con ROOT Guida minima alluso di ROOT per le esperienze didattiche di...

Preview:

Citation preview

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:– andrea.ventura@le.infn.it

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;

Recommended