// Coefficiente di assorbimento dei gamma // fit con la funzione: N(x) = N(0)*exp[-mu*x] + bck // definizione della funzione di fit Double_t fitf(Double_t *x, Double_t *par) { Double_t fitval = par[0]*TMath::Exp(-par[1]*x[0]) + par[2]; return fitval; } void Assorbimento() { // carica la libreria gSystem->Load("LibEsp3_C.so"); // apre la finestra grafica TCanvas *c1 = new TCanvas("c1"); // legge i dati e crea il grafico con errori TGraphErrors *gr=LoadGraphErrors("assorb.dat"); // scrive le label gr->GetXaxis()->SetTitle("Spessore [mm]"); gr->GetXaxis()->CenterTitle(); gr->GetYaxis()->SetTitle("Conteggi"); gr->GetYaxis()->CenterTitle(); // crea la funzione da usare per il fit prendendo la fitf di sopra TF1 *func = new TF1("fit",fitf,1,60,3); func->SetLineWidth(1); // setta i parametri iniziali func->SetParameters(20000,0.01,0.0); func->SetParNames("N(0)","mu","background"); // esegue il fit nella regione specificata (1-60) gr->Fit("fit","R"); gr->Draw("AP"); // recupera i parametri Double_t N,eN,mu,emu,B,eB; N=func->GetParameter(0); eN=func->GetParError(0); mu=func->GetParameter(1); emu=func->GetParError(1); B=func->GetParameter(2); eB=func->GetParError(2); // stampa i risultati printf("\nRisultati fit:\n"); printf("N(0) = %f +- %f\n",N,eN); printf("mu = %f +- %f\n",mu,emu); printf("bck = %f +- %f\n",B,eB); // un po' di grafica TPaveText *pt = new TPaveText(-4,32000,24,35000,"br"); pt->SetFillColor(9); pt->SetTextColor(5); TText *text = pt->AddText("Gamma Absorption"); pt->Draw(); tex = new TLatex(27,22000,"#mu = 0.045 #pm 0.003 mm^{-1}"); tex->SetTextSize(0.05); tex->SetLineWidth(2); tex->Draw(); // salva il contenuto della finestra grafica in formato gif // e in formato root (che puo' essere modificato in seguito) c1->Modified(); c1->cd(); c1->Print("Assorbimento.gif"); c1->Print("Assorbimento.root"); }