root tutorial parte 2. importare dati da file testo void readfile() { const char *nomefile =...

15
ROOT Tutorial Parte 2

Upload: nino-martelli

Post on 02-May-2015

226 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: ROOT Tutorial Parte 2. Importare dati da file testo void readfile() { const char *nomeFile = "file.txt"; fstream file(nomeFile, ios::in); string variabile1;

ROOT Tutorial Parte 2

Page 2: ROOT Tutorial Parte 2. Importare dati da file testo void readfile() { const char *nomeFile = "file.txt"; fstream file(nomeFile, ios::in); string variabile1;

Importare dati da file testo

void readfile(){ const char *nomeFile = "file.txt"; fstream file(nomeFile, ios::in); string variabile1; string variabile2; file >> variabile1 >> variabile2; Int_t x[10], y[10]; Int_t n = 0; while(file >> x[n] >> y[n]) n++; cout << "Ho letto " << n << " righe" << endl; cout << variabile1 << " " << variabile2 << endl; for(Int_t i=0; i<n; i++) cout << x[i] << " " << y[i] << endl;

}

Esempio:

Page 3: ROOT Tutorial Parte 2. Importare dati da file testo void readfile() { const char *nomeFile = "file.txt"; fstream file(nomeFile, ios::in); string variabile1;

Istogrammi

ROOT permette di gestire vari tipi di istogrammi:

• 1-D • 2-D • 3-D

short, integer, float, double

TH1F(const char name,const *title,Int_t nbins,Float_t xmin,Float_t xmax)

Istogrammi 1-D

Metodi comunemente usati:• Fill

h1->Fill(x); h1->Fill(x,w); //with weight

• SetBinContent h1->SetBinContent(Int_t bin, Double_t content)• Draw h1->Draw(Option_t *goption)• Fit h1->Fit(Fit(const char *fname, Option_t *option,

Option_t *goption, Axis_t xxmin, Axis_t xxmax)

Page 4: ROOT Tutorial Parte 2. Importare dati da file testo void readfile() { const char *nomeFile = "file.txt"; fstream file(nomeFile, ios::in); string variabile1;

Riempimento degli istogrammi: Metodo SetBinContent

0

2

4

6

8

10

12

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

Ch Frequenza

1 0

2 0

3 0

4 2

5 1

6 3

7 5

8 8

9 11

10 10

11 8

12 6

13 6

14 4

15 2

16 1

17 0

18 0

19 0

h1->SetBinContent(i,val_i)i = 0 underflow bini = nbins+1 overflow bin

nbins: numero canalixmin, xmax: range istogramma

(i,val_i)

Stabiliti dai dati in ingresso

Page 5: ROOT Tutorial Parte 2. Importare dati da file testo void readfile() { const char *nomeFile = "file.txt"; fstream file(nomeFile, ios::in); string variabile1;

Riempimento degli istogrammi: Metodo Fill

Valore

7

5

9

11

13

8

16

4

h1->Fill(i)

(i)

Ch Frequenza

1 0

2 0

3 0

4 2

5 1

6 3

7 5

8 8

9 11

10 10

11 8

12 6

13 6

14 4

15 2

16 1

17 0

18 0

19 0

0

2

4

6

8

10

12

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

Page 6: ROOT Tutorial Parte 2. Importare dati da file testo void readfile() { const char *nomeFile = "file.txt"; fstream file(nomeFile, ios::in); string variabile1;

Esercizio: importare i dati in formato ASCII relativi all’esperienza sulla sorgente

Page 7: ROOT Tutorial Parte 2. Importare dati da file testo void readfile() { const char *nomeFile = "file.txt"; fstream file(nomeFile, ios::in); string variabile1;

void alfa(){ const char *nomeFile = "spectrum.Spe"; fstream file(nomeFile, ios::in); string dummy; for(Int_t i=0; i<12; i++) getline(file, dummy); TH1I *hspectrum = new TH1I("hspectrum","hspectrum",2048,0,2047); Int_t n=0; Int_t counts; while((file >> counts) && n < 2048){ hspectrum->SetBinContent(n+1,counts); n++; } hspectrum->Draw(); hspectrum->GetXaxis()->SetRangeUser(200,320); hspectrum->Fit("gaus","","",237,243);}

Page 8: ROOT Tutorial Parte 2. Importare dati da file testo void readfile() { const char *nomeFile = "file.txt"; fstream file(nomeFile, ios::in); string variabile1;

Istogrammi 2-D

TH2F(const char name,const *title,Int_t nbinsx,Float_t xmin,Float_t xmax, Int_t nbinsy,Float_t ymin,Float_t ymax)

Metodi comunemente usati:• Fill

h2->Fill(x,y); h2->Fill(x,y,w); //with weight

• SetBinContent h2->SetBinContent(Int_t binx, Int_t biny, Double_t content)

• Draw h2->Draw(Option_t *goption)

Page 9: ROOT Tutorial Parte 2. Importare dati da file testo void readfile() { const char *nomeFile = "file.txt"; fstream file(nomeFile, ios::in); string variabile1;

Opzioni grafiche valide per tutti i tipi di istogramma:

"AXIS": Disegna solo l’asse indicato. "SAME": Disegna l’istogramma nella pad corrente."CYL": Usa le coordinate cilindriche. "POL": Usa le coordinate polari. "SPH": Usa le coordinate sferiche. "LEGO”, "LEGO1”, "LEGO2": Disegna un lego plot. "SURF”, "SURF1”, "SURF2”, "SURF3”, "SURF4”: Disegna plot di

superficie…

Opzioni grafiche valide per istogrammi 2-D:

"COL": Mappa di colori"COLZ": Mappa di colori + palette "CONT": Contour plot "CONTZ": Contour plot + palette"CONT1“, "CONT2“, "CONT3“, "CONT4“, "CONT5“, : Diversi stili di

contour plot"SCAT": Disegna uno scatter-plot (default) …

Page 10: ROOT Tutorial Parte 2. Importare dati da file testo void readfile() { const char *nomeFile = "file.txt"; fstream file(nomeFile, ios::in); string variabile1;

In ROOT numeri pseudo - casuali sono generati usando le classi TRandom. Esistono 4 differenti classi (TRandom, TRandom1, TRandom2 e TRandom3), ciascuna delle quali implementa un differente tipo di generatore di numeri casuali.

Il metodo SetSeed permette di scegliere il seme.gRandom->SetSeed(Int_t seed);

Se non specificato, il seme è stabilito dal clock del PC

Esempio: distribuzione uniforme

void randomUni(){Double_t x, y;TH2D *h2 = new TH2D(“h2”,”Uniform Distribution”, 100,0,10,100,0,10);for(Int_t i=0; i < 100000; i++){

x = gRandom->Uniform(0,10);y = gRandom->Uniform(0,10);h2->Fill(x,y);

}gStyle->SetPalette(1);h2->Draw(“colz”);}

Generatori di numeri casuali

Page 11: ROOT Tutorial Parte 2. Importare dati da file testo void readfile() { const char *nomeFile = "file.txt"; fstream file(nomeFile, ios::in); string variabile1;

Distribuzione non uniformi disponibili in ROOT

Page 12: ROOT Tutorial Parte 2. Importare dati da file testo void readfile() { const char *nomeFile = "file.txt"; fstream file(nomeFile, ios::in); string variabile1;

Esercizio: simulazione MC per valutare la distanza relativa tra due contatori geiger

Ipotesi:

1) Contatori Geiger bidimensionali r = 0.5 Geiger radius in cm

l = 6 Geiger length in cm 2) Distanza nominale d = 5 cm 3) Estrazione uniforme dei punti

Possibili miglioramenti:

1) Contatori Geiger in 3D

DA VERIFICARE!

Page 13: ROOT Tutorial Parte 2. Importare dati da file testo void readfile() { const char *nomeFile = "file.txt"; fstream file(nomeFile, ios::in); string variabile1;

void geigerMC(){ gROOT->SetStyle("Plain"); Double_t x1, y1, x2, y2;

//Define the experimental setup const int d = 5; // Distance between geigers Double_t r = 0.5; // Geiger radius in cm Double_t l = 6; // Geiger length in cm

TH1D *h1 = new TH1D("h1","Distances distribution", 100,0,10); TH2D *h2 = new TH2D("h2","Points distribution", 150, -5, 10, 100, -5, 5);

for(Int_t i=0; i < 100000; i++){ x1 = gRandom->Uniform(-r,r); y1 = gRandom->Uniform(-l/2,l/2); x2 = gRandom->Uniform(d-r,d+r); y2 = gRandom->Uniform(-l/2,l/2); h2->Fill(x1,y1); h2->Fill(x2,y2); Double_t distance = TMath::Sqrt((x1-x2)**2+(y1-y2)**2); h1->Fill(distance);

} TCanvas *c1 = new TCanvas();gStyle->SetPalette(1);h2->Draw("colz");TCanvas *c2 = new TCanvas();h1->Draw();}

Page 14: ROOT Tutorial Parte 2. Importare dati da file testo void readfile() { const char *nomeFile = "file.txt"; fstream file(nomeFile, ios::in); string variabile1;

5 cm

Page 15: ROOT Tutorial Parte 2. Importare dati da file testo void readfile() { const char *nomeFile = "file.txt"; fstream file(nomeFile, ios::in); string variabile1;

3 cm

15 cm