lunedì, novembre 05, 2007
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 ;
}
Pubblicato da Unknown alle 23:28 0 commenti
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.
Pubblicato da Unknown alle 18:35 0 commenti
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 ;
}
Pubblicato da Unknown alle 12:16 0 commenti
venerdì, gennaio 19, 2007
mercoledì, gennaio 17, 2007
giovedì, gennaio 11, 2007
Iscriviti a:
Post (Atom)