///////////////////////// // esponenziale ///////////////////////// #include "TStyle.h" #include "TTimer.h" #include "Riostream.h" #include "TCanvas.h" #include "TGraph.h" #include "TROOT.h" #include "TGraphErrors.h" #include "TFrame.h" #include "TAxis.h" #include "TH1F.h" #include "TH2F.h" #include "TRandom.h" #include "TF1.h" #include "TFormula.h" #include "TFile.h" #include "TTree.h" #include "TMath.h" #include "TMultiGraph.h" #include "TPaveLabel.h" #include "TLatex.h" #include "TLegend.h" Double_t f_exp (Double_t* x, Double_t* par) { return par[0] * TMath::Exp(-x[0]/par[1]); } int main(){ using namespace std; // Parameteri per la simulatione. const int Nrep = 2000; // Numero di ripetizioni. double tau = 1; // Costante di decadimento dell'esponenziale. // Parametri per l'estetica dei grafici. int lf=133; // fonts scales int tf=13; // fonts label int cf=23; // legend label int ls=20; // size scales int ts=25; // size label int cs=25; // size label double xOffset = 1.2; double yOffset = 1.0; double ms=1.2; int mStylepos=20, mStyleneg=22; TLatex *t2 = new TLatex(); t2 = new TLatex(); t2->SetNDC(); t2->SetTextAlign(12); t2->SetTextFont(lf); t2->SetTextSize(ls); t2->SetTextColor(kBlack); // Dichiarazione istogramma da riempire con le variabili casuali generate. TH1F * hist = new TH1F("hist","",40,0,10*tau); hist->GetXaxis()->SetNdivisions(10); hist->GetYaxis()->SetNdivisions(10); hist->GetXaxis()->SetLabelFont(lf); hist->GetYaxis()->SetLabelFont(lf); hist->GetXaxis()->SetLabelSize(ls); hist->GetYaxis()->SetLabelSize(ls); hist->GetXaxis()->SetTitleFont(tf); hist->GetYaxis()->SetTitleFont(tf); hist->GetXaxis()->SetTitleSize(ts); hist->GetYaxis()->SetTitleSize(ts); hist->GetXaxis()->SetTitleOffset(1.0); hist->GetYaxis()->SetTitleOffset(1.0); hist->GetYaxis()->SetTitle( "counts" ); hist->GetXaxis()->SetTitle( "x" ); hist->SetFillColorAlpha(kGreen,0.8); hist->SetLineColor(kBlack); hist->SetLineWidth(2); // Funzione per il calcolo dei conteggi attesi. TF1* fexp = new TF1("fexp",f_exp,0,10*tau,2); fexp -> SetParameters(10, tau); fexp->SetLineColor(kBlack); fexp->SetLineStyle(1); fexp->SetLineWidth(2); // Oggetto latex per la scrittura di testo nel grafico. TLatex *lx = new TLatex(); lx->SetTextSize(0.06); lx->SetTextAlign(13); // Creazione finestra dove disegnare il grafico. TCanvas *c1 = new TCanvas("c1","Exponential",600,400); c1->cd(); c1->Update(); gPad->SetBottomMargin(0.2); gPad->SetLeftMargin(0.2); hist->Draw(); gPad->SetLogy(); TRandom *rnd = new TRandom(); // Generatore di numeri casuali. for(int irep = 0; irep < Nrep; irep++){ double rndx = rnd -> Uniform(); // Generazione numero casuale con distribuzione uniforme in [0:1]. double x = -tau*log(rndx); // Applicazione del metodo della funzione di ripartizione. hist->Fill(x); // Riempimento istogramma con la variabile casuale x appena generata. fexp->SetParameter(0,(irep+1)*hist->GetBinWidth(1)); // Funzione che descrive i conteggi attesi. hist->Draw("HIST,E"); // Disegno istogramma. fexp->Draw("same"); // Disegno conteggi attesi. lx->DrawLatex(4,hist->GetMaximum()*0.8,Form("#font[132]{#tau = %f}",tau)); gSystem->ProcessEvents(); // Commando per aggiornare le informazioni disegnate nella finestra. c1->Update(); } return 0; }