La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

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

Presentazioni simili


Presentazione sul tema: "ROOT Tutorial Parte 2. Importare dati da file testo void readfile() { const char *nomeFile = "file.txt"; fstream file(nomeFile, ios::in); string variabile1;"— Transcript della presentazione:

1 ROOT Tutorial Parte 2

2 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

3 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 SetBinContenth1->SetBinContent(Int_t bin, Double_t content) Drawh1->Draw(Option_t *goption) Fith1->Fit(Fit(const char *fname, Option_t *option, Option_t *goption, Axis_t xxmin, Axis_t xxmax)

4 Riempimento degli istogrammi: Metodo SetBinContent ChFrequenza h1->SetBinContent(i,val_i) i = 0 underflow bin i = nbins+1 overflow bin nbins: numero canali xmin, xmax: range istogramma (i,val_i) Stabiliti dai dati in ingresso

5 Riempimento degli istogrammi: Metodo Fill Valore … h1->Fill(i) (i) ChFrequenza

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

7 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); }

8 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 SetBinContenth2->SetBinContent(Int_t binx, Int_t biny, Double_t content) Drawh2->Draw(Option_t *goption)

9 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) …

10 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 < ; 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

11 Un esercizio: simulare il fenomeno del decadimento radioattivo N 0 =100,  = 0.01 s -1, dt = 1s dN= -N  dt cioè N=N 0 e -  t

12 void decay(){ Float_t alfa = 0.01; Int_t deltaT = 1; Int_t N0 = 100; Int_t time = 300; Int_t nbins = time/deltaT; TH1I *h1 = new TH1I("h1","h1",nbins,0,time); h1->SetBinContent(1,N0); Int_t counter = 2; for(Int_t i=0; iUniform(0,1); if(randSetBinContent(counter,N0); counter++; } h1->Draw(); }

13 Distribuzione non uniformi disponibili in ROOT

14 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!

15 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 < ; 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(); }

16 5 cm

17 3 cm 15 cm


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

Presentazioni simili


Annunci Google