void Calib() { TGraph *gr1 = new TGraph(); TCanvas *c1=new TCanvas("MB","Calibration Curve",100,100,900,500); fstream file; file.open("Core_CristalA_Calib.txt", ios::in); float Channel, Energy; while(1) { file >> Channel >> Energy; gr1->SetPoint(gr1->GetN(), Channel, Energy); if(file.eof()) break; } file.close(); TF1 *fit_1 = new TF1("fit_1","pol1"); // <-------------- calib function gr1->Fit(fit_1,"","",40,16000); fit_1->SetLineWidth(2); //width of fit line fit_1->SetLineColor(kBlue); fit_1->SetLineStyle(2); c1->GetTickx(); c1->GetTicky(); c1->SetGridx(); c1->SetGridy(); c1->Divide(1,2); c1->cd(1); gr1->Draw("A*"); gr1->GetXaxis()->SetTitle("Channel"); gr1->GetYaxis()->SetTitle("Energy(kev)"); float a,b,c; a=fit_1->GetParameter(0); //off b=fit_1->GetParameter(1); //gain c=0.0; // c=fit_1->GetParameter(2); //gain2 // <----------------- ATTENTION float cal=0; for(Int_t l = 0 ; l<(int)(Channel.size());l++){ for(Int_t k = 0 ; k<(int)(Energy.size());k++){ cal=cal+Energy.at(k)-(Channel.at(l)*b+a); } } TGraph *gr2 = new TGraph(14,Energy.at(k),cal.at(k)); /* float cal[14]; for(Int_t i=0 ; i<14;i++){ cal[i]=Energy[i]-(Channel[i]*Channel[i]*c+Channel[i]*b+a); printf("%f\n",Channel[i]*Channel[i]*c); } */ c1->cd(2); gr2->Draw("A*"); gr2->GetXaxis()->SetTitle("Channel"); gr2->GetYaxis()->SetTitle("Residuals(kev)"); TF1 *fit_2 = new TF1("fit_2","pol0"); fit_2->SetLineWidth(2); //width of fit line fit_2->SetLineColor(kBlue); fit_2->SetLineStyle(2); gr2->Fit(fit_2,"","",10,30000); //gr2->Fit("pol0","","",10,30000); //direct way of writing the zero degree polynomial line printf("Result [offset] [gain] [quadratic gain] %f %f %e\n",a,b,c); }