//makro do narysowania logarytmu naturalnego z liczby kwantow gamma //w zaleznosci od grubosci absorbenta //dodatkowo dopasowanie funkcji liniowej { gROOT->Reset(); //deklarujemy tablice danych x-grubosc absorbenta //y - logarytm naturalny z liczby kwantow gamma //ex, ey - odpowiednie niepewnosci tych wartosci //8 - oznacza ile bedzie takich par xy double x[8]={2, 5, 7, 10, 12, 15, 17, 20}; double y[8]={log(1420), log(1154), log(946), log(822), log(712), log(625), log(543), log(447)}; double ex[8]={0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01}; double ey[8]={sqrt(1420)/1420, sqrt(1154)/1154, sqrt(946)/946, sqrt(822)/822, sqrt(712)/712, sqrt(625)/625, sqrt(543)/543, sqrt(447)/447}; /* //mozna tez szybciej: double x[8]={2, 5, 7, 10, 12, 15, 17, 20}; double y_original[8]={1420, 1154, 946, 822, 712, 625, 543, 447}; double ex[8]={0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01}; double y[8]; double ey[8]; for(int i=0; i<8; i++) { y[i]=log(y_original[i]); ey[i]=sqrt(y_original[i])/y_original[i]; } */ //deklarujemy wskaznik do obiektu klasy TGraphErrors TGraphErrors *gr = new TGraphErrors(8,x,y,ex,ey); //teraz opcje zeby rysunek ladniej wygladal gr->SetMarkerColor(9); //kolor markera gr->SetMarkerStyle(22); //typ punktow gr->SetLineColor(1); //ewentualny kolor linii gr->SetTitle("oslabienie promieniowania gamma"); gr->GetXaxis()->SetTitle("x (mm)"); gr->GetYaxis()->SetTitle("ln(N)"); gr->Draw("AP"); //teraz dopasowujemy krzywa o rownaniu: //ln(N(x))=ln(N0)-miu*x, czyli y=b-a*x //deklarujemy funkcje o dwoch parametrach [0] i [1] //i zakresie od 0 do 22: TF1 *fun = new TF1("fun","[0]-[1]*x",0,22); //uwaga: mozna tez od razu uzywac funkcji: "log([0])-[1]*x" i dostac od razu N0 z niepewnoscia, ale wtedy trzeba zmodyfikowac kod ponizej fun->SetParameter(0,1.00); //ustawiamy poczatkowe wartosci parametrow wolnych: [0] fun->SetParameter(1,1.00); //oraz [1] //mozna tez zrobic ladniejsza krzywa: fun->SetLineColor(2); fun->SetLineStyle(2); fun->SetLineWidth(4); gr->Fit("fun","",""); //ta komenda dopasowujemy funkcje fun //do punktow zawartych w gr //parametry dopasowania wypisuja sie na ekranie //ale mozna wypisac je dodatkowo: double lnN0=fun->GetParameter(0); double miu=fun->GetParameter(1); double erlnN0=fun->GetParError(0); double ermiu=fun->GetParError(1); double chi2ndf=fun->GetChisquare()/fun->GetNDF(); cout<<"*****************************"<GetChisquare()<GetNumberFitPoints()<GetNumberFreeParameters()<GetNDF()<