lunedì, novembre 05, 2007

prime live-slides

Grazie a google-docs, ecco le slides sempre aggiornate (ovvero, sempre work in progress...)

venerdì, febbraio 02, 2007

fit gaussiano bidimensionale

ciao a tutti,

oggi durante l'esame mi e' stato chiesto di implmentare un fit gaussiano di un istogramma bidimensionale. Ecco la mia implementazione.

#include "TFile.h"
#include "TH1F.h"
#include "TH2F.h"
#include "TStyle.h"
#include "TProfile.h"
#include "TCanvas.h"
#include "TMath.h"
#include "TF2.h"

#include <iostream>
#include <iomanip>


double randFlat (double min, double max)
{
return min + (max-min) * rand () / static_cast<double> (RAND_MAX) ;
}


// ------------------------------------------------


//! gaussiana 2D senza termini misti
double func2 (double * x, double * par)
{
/*
par 0 = ampiezza
par 1 = mean x
par 2 = sigma x
par 3 = man y
par 4 = sigma y
*/

double argx = 0;
if (par[2] != 0) argx = (x[0] - par[1]) / par[2] ;
double argy = 0;
if (par[4] != 0) argy = (x[1] - par[3]) / par[4] ;

double fitval = par[0] * TMath::Exp (-1 * argx * argx - 1 * argy * argy) ;
return fitval;
}


// ------------------------------------------------


int main ()
{
gROOT->SetStyle ("Plain") ; // sfondo bianco
gStyle->SetPalette (1) ; // scala di colori "termica"
TFile salvo ("casuali2.root","RECREATE") ;
TH2F campana ("campana","campana",50,-5,5,50,-5,5) ;
TF2 funzione ("gaussiana",func2,-5,5,-5,5,5) ;
double parameters[5] = {1,0,1,0,2} ;
funzione.SetParameters (parameters) ;


for (int i=0 ; i<100000 ; ++i)
{
double x,y,z ;
do
{
x = randFlat (-5, 5) ;
y = randFlat (-5, 5) ;
z = randFlat (0, 1.5) ;
}
while (funzione.Eval (x,y) < z) ;
campana.Fill (x,y) ;
}
salvo.Write () ;

double fitParameters[5] = {1,0,1,0,1} ;

funzione.SetParameters (fitParameters) ;
campana.Fit ("gaussiana") ;
funzione.GetParameters (fitParameters) ;

TCanvas c1 ;
campana.Draw ("LEGO2") ;
funzione.Draw ("surfsame") ;
c1.Print ("fit2d.eps","eps") ;

std::cout << std::setprecision (2) ;
std::cout << "-----------------------------\n" ;
std::cout << "param number | gen | his \n" ;
std::cout << "-----------------------------\n" ;
for (int i=0 ; i<5 ; ++i)
{
std::cout << "parametro " << i
<< "\t" << parameters[i]
<< "\t" << fitParameters[i]
<< "\n" ;
}
std::cout << "-----------------------------\n" ;

return 0 ;
}

venerdì, gennaio 26, 2007

esercizi di preparazione all'esame

si trova nel file esame_feb-mar_07.pdf la versione digitale degli esercizi preparatori agli esami.

altri esercizi con ROOT

domenica, gennaio 21, 2007

macro di test di ROOT

Io ci metto questa macro, aspetto le altre!


  • Chi posta la lettura di un istogramma da file di testo?
  • Chi posta il fit gaussiano con funzione definita dall'utente, compresa l'impostazione dei parametri iniziali?
  • Chi posta la lettura del TGraph da file di testo?
  • Chi posta il fit del TGraph e il modo di recuperare dall'oggetto TF1, via TGraph, i valori dei parametri del fit?
  • Chi posta la lettura di un TH1F da un file di ROOT?
  • Chi posta la lettura di una TNtuple da un file di root ed il suo disegno?
  • Oppure la produzione e il rimepimento di un TGraphErrors, con ciascun punto determinato da una funzione nota, un po' spostato sia in x che in y con un numero casuale e con un errore determinato altrettanto casualmente, sia in x che in y?
  • ... ed il fit di questo TGraph?


testRootHisto.C



// macro di test di un istogramma ROOT
void testRootHisto ()
{
// creo un nuovo istogramma
TH1F * histoProva = new TH1F ("histoProva","istogramma di test",10,0,10) ;
// nomeOggettto nomeXroot titolo bins,min,max
histoProva->Fill (1) ;
histoProva->Fill (3) ;
histoProva->Fill (4) ;
histoProva->Fill (6.3) ;
histoProva->Fill (6.8) ;
histoProva->Fill (3) ;

// per visualizzare nel box di statistica tutte le statistiche
// relative all'istogramma (media, rms, overfflow, underflow...)
gStyle->SetOptStat (1111111) ;
// per visualizzare nel box di statistica tutte le statistiche
// relative ad eventuali fit fatti all'istogramma
gStyle->SetOptFit (1111) ;

// preparo la cornice dove disegnare l'istogramma

TCanvas * c1 = new TCanvas ;
// imposto opzioni grafiche dell'istogramma: il colore di riempimento ...

histoProva->SetFillColor (8) ;
// ... ed il titolo per l'asse x

histoProva->GetXaxis ()->SetTitle ("asse x") ;
// disegno l'istogramma

histoProva->Draw () ;
histoProva->Fit ("gaus") ;


return ;
}

venerdì, gennaio 19, 2007

altri esercizi con ROOT

mercoledì, gennaio 17, 2007

analisi dati con ROOT

giovedì, gennaio 11, 2007

l'ereditarieta'