// Coefficiente di assorbimento dei gamma // // fit con la funzione: N(x) = N(0)*exp[-mu*x] + bck // Double_t fitf(Double_t *x, Double_t *par) { Double_t fitval = par[0]*TMath::Exp(-par[1]*x[0]) + par[2]; return fitval; } int macro3() { /////////////////////////////////////////////// // // assorbimento di gamma nel materiale // TGraphErrors *g2 = new TGraphErrors("Assorb.dat"); g2->SetName("graf2"); g2->SetLineColor(4); // blu g2->SetMarkerStyle(20); // pallino g2->SetMarkerColor(2); // rosso g2->SetTitle("Assorbimento #gamma nei materiali"); TCanvas *c2= new TCanvas("c2"); c2->cd(); g2->Draw("ap"); // fit con una funzione generica TF1 *func = new TF1("fitfunc",fitf,1,60,3); func->SetLineWidth(1); func->SetParameters(20000,0.01,0.0); func->SetParNames("N(0)","mu","background"); // g2->Fit("fitfunc","R"); // oppure g2->Fit("fitfunc","RNQ"); // RNQW double N0 = func->GetParameter(0); double eN0 = func->GetParError(0); double Mu = func->GetParameter(1); double eMu = func->GetParError(1); double Bkg = func->GetParameter(2); double eBkg = func->GetParError(2); printf("Risultati fit: N0 = %f +- %f\n",N0,eN0); printf(" Mu = %f +- %f\n",Mu,eMu); printf(" Bkg = %f +- %f\n",Bkg,eBkg); func->Draw("same"); // recupera gli elementi della matrice di covarianza TVirtualFitter *vf = TVirtualFitter::GetFitter(); double cm00 = vf->GetCovarianceMatrixElement(0,0); // sigma2 par0 double cm01 = vf->GetCovarianceMatrixElement(0,1); double cm02 = vf->GetCovarianceMatrixElement(0,2); double cm11 = vf->GetCovarianceMatrixElement(1,1); // sigma2 par1 double cm12 = vf->GetCovarianceMatrixElement(1,2); double cm22 = vf->GetCovarianceMatrixElement(2,2); // sigma2 par2 // calcola i coeff. di correlazione tra i parametri double rho01 = cm01/TMath::Sqrt(cm00)/TMath::Sqrt(cm11); double rho02 = cm02/TMath::Sqrt(cm00)/TMath::Sqrt(cm22); double rho12 = cm12/TMath::Sqrt(cm11)/TMath::Sqrt(cm22); printf("coeff. di correlazione:\n"); printf(" rho(0,1) = %f \n",rho01); printf(" rho(0,2) = %f \n",rho02); printf(" rho(1,2) = %f \n",rho12); return 0; }