//file fit3.C #include "TRandom3.h" #include "Riostream.h" #include #include "TH3.h" #include "TF3.h" #include "TMath.h" double myfunc3(double *x, double *par) { double xx = (x[0] - par[1])/par[2]; double yy = (x[1] - par[3])/par[4]; double zz = (x[2] - par[5])/par[6]; double rx = TMath::Exp(-xx*xx); double ry = TMath::Exp(-yy*yy); double rz = TMath::Exp(-zz*zz); double result = par[0]*rx*ry*rz; return result; } void fit3() { const unsigned nPts1 = 15; ifstream in1; in1.open("data_test.txt"); Float_t x1,y1,z1; TCanvas *c1 = new TCanvas("c1"," ",0,0,700,350); TH3F *h1 = new TH3F("h1","h1",100,1000,3000,100,0.5,1.0,100,0.0,1.0); for (unsigned i = 0; i < nPts1; ++i) { in1 >> x1 >> y1 >> z1; if (!in1.good()) break; h1->Fill(x1,y1,z1); } in1.close(); c1->cd(); TF3 *func3 = new TF3("func3",myfunc3,1000,3000,0.5,1.0,0.0,1.0,7); func3->SetParameters(h1->GetMaximum(),0,0.5,0,0.5,0,0.5); h1->Fit(func3,"r+","E"); h1->Draw("col"); func3->Draw("same"); func3->SetLineColor(kOrange+8); func3->SetLineStyle(1); func3->SetLineWidth(2); h1->SetMarkerStyle(20); h1->SetMarkerSize(1.0); h1->SetMarkerColor(kBlue); c1->Update(); }