//////////////////////////////////////////////////////////////// ////// Fitting Function (for BukinFn) ////// ////// Written by Kim Alwyn (30/03/2006) ////// Editted by Kim Alwyn (21/05/2006) ////// (27/09/2006) ////// ////// ////// This takes the mass spectrums from the data. ////// Then BukinFn is fitted to the spectrum. ////// The fit is saved onto a file called newOmega.root. ////// //////////////////////////////////////////////////////////////// #include "BukinFn.C" #include "TMath.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; //define a class Bukin called "buk". class Bukin buk; //define a function MyFn. //this simply returns the BukinFn so that it is in the right form to be used //in the definition of TF1 "myfit". Double_t MyFn(Double_t *x, Double_t *params){ return buk.BukinFn(x, params); } int FittingComplex() { TFile * dat = new TFile("data_15-08-06.root"); TH2F * h1; h1 = (TH2F*)dat->Get("h2d710"); TCanvas * c1 = new TCanvas("c1_FittingComplex","fittingComplex",10,10,500,500); c1->Clear(); //Function Load() performs actions that only need to be done once. buk.Load(); //Define myfit. TF1 * myfit = new TF1("myfit", MyFn, 0.4, 1.4, 14); // myfit->SetParameters(6.2, 2.06, 0.846, 0.064, 1.53, 0.136, 0.0155, 0.0327, 2.683, 4.16, -9.4); // myfit->SetParameter(11, 16.8); //->SetParameters only takes 10 parameters // myfit->SetParameter(12, 0.0); // myfit->SetParameter(13, 0.0); double p[14] = {4.885, 1.935, 0.2238, -0.3353, 1.395, -0.01562, 0.006453, -0.05269, 3.033, -0.5169, 6.753, -27.12, -68., 179.3}; myfit->SetParameters(p); //myfit->SetParameter(11, -27.12); //myfit->SetParameter(12, -68.); //myfit->SetParameter(13, 179.3); myfit->SetLineWidth(0.1); //Get projection of data. TH1 * h2 = h1->ProjectionX("binData", 1, 1, "e"); h2->Draw(); cout << "Fitting bin 1..." <SetNpx(10000); //TVirtualFitter::SetMaxIterations(10000); TVirtualFitter::SetPrecision(1.0E-4); h2->Fit(myfit, "R0", "", 0.4, 1.4); cout << "Fit done " <Draw("same"); gStyle->SetOptStat(); gStyle->SetOptFit(); c1->SaveAs("screen1.eps"); //This output gives a "goodScreen.eps" which is attached TFile * om = new TFile("newOmega1.root","UPDATE"); h2->Write("SeenData",TObject::kOverwrite); myfit->Write("fitSD",TObject::kOverwrite); //Once the output is saved it gives "badScreen.eps" which is attached om->Close(); return 1; }