void grapherrorfit() { TFile *_file1 = new TFile("~/Desktop/grapherror.root","READ"); TGraphErrors *g; g = (TGraphErrors*)_file1->Get("g1_MMGA09L1"); auto *expfunc = new TF1("Exponential fit","[0]+[1]*exp(-x*[2])",0,500); expfunc->SetParameters(200,7e03,0.01); g->Fit(expfunc,"RMS+"); g->Draw("AP"); expfunc->Draw("SAME"); auto fitResult = g->Fit(expfunc,"S"); auto covMatrix = fitResult->GetCovarianceMatrix(); std::cout << "Covariance matrix from the fit "; covMatrix.Print(); cout << "*******************\n"; std::cout << covMatrix(0,0) << std::endl; cout << "**********************\n"; double * p = expfunc->GetParameters(); const double * parErrors = expfunc->GetParErrors(); cout << parErrors[0] << " " << parErrors[1] << " "<< parErrors[2] << endl; cout << p[0] << " " << p[1] << " " << p[2] << endl; double df_dp0 = 1; double df_dp1 = exp(-p[2] * 100); double df_dp2 = -p[1]*p[2]*exp(-p[2] * 100); double sigma_exp = sqrt( pow(df_dp0,2)*covMatrix(0,0) + pow(df_dp1,2)*covMatrix(1,1) + pow(df_dp2,2)*covMatrix(2,2) + 2 * df_dp0 * df_dp1 *covMatrix(0,1) + 2 * df_dp0 * df_dp2 *covMatrix(0,2) + 2 * df_dp1 * df_dp2 *covMatrix(0,2) ); cout << "Real Hit rate error at r=100cm: " << sigma_exp << endl; cout << "Real Hit rate at r=100cm: " << p[0]+p[1]*exp(-p[2]*100) << " +- " << sigma_exp << endl; _file1->Close(); }