#include // // void fit_LenteSottile(string dataFile="") { string fileNameString = ""; if (dataFile=="") { std::cout<<"Select an input data file as argument \n Example: \n root[0] .x fit_LenteSottile.C(\"mydata.data\"); \n Otherwise \n root[0] .x fit_LenteSottile.C(\"TEST\") to run this macro on test data"<Reset(); //c1 = new TCanvas("c1","Efficiency plateau",200,10,700,500); c1 = new TCanvas("c1","Punti Coniugati di una Lente Sottile"); gPad->SetFillColor(0); gPad->SetGrid(); gPad->GetFrame()->SetFillColor(21); gPad->GetFrame()->SetBorderSize(12); gStyle->SetOptFit(1112); // Reading input data file (x, dx, y, dy) char* fileName = fileNameString.c_str(); cout<<" *** Reading data from file <"<"<> xvar >> yvar >> dxvar >> dyvar; if (!inputFile.good()) break; cout<<" measurement n. "<SetTitle(MyTitle.c_str()); gr->SetMarkerColor(4); gr->SetMarkerStyle(21); gr->GetXaxis()->SetTitle("Distanza oggetto / units"); gr->GetYaxis()->SetTitle("Distanza immagine / units"); //gr->Draw("ALP"); gr->Draw("AP"); cout<<" ************************************************* Plot drawn "<SetParameter(0,9.); // fissiamo dei limiti per i valori del parametri //f1->SetParLimits(0,5.,20.); f1->SetLineColor(kRed); //fitta entro il range (opzione "R") specificato nella definizione della funzione gr->Fit("f1","R"); cout<<" ************************************************* Fit done "<Update(); } Double_t myfunction(Double_t *x, Double_t *par) { // par(0) -> distanza focale // x[0] = distanza oggetto //Double_t distanzaImmagine = 1./(1./par[0] - 1./x[0]); Double_t distanzaImmagine = x[0]*par[0]/(x[0] - par[0]); return distanzaImmagine; }