Double_t turnon(Double_t *x, Double_t *par) { double halfpoint = par[0]; double slope = par[1]; double plateau = par[2]; //double offset = par[3]; //double plateau = 1.0; double offset = 0; double pt = TMath::Max(x[0],0.000001); double arg = 0; arg = (pt - halfpoint)/(TMath::Sqrt(pt)*slope); double fitval = offset+0.5*plateau*(1+TMath::Erf(arg)); return fitval; } Double_t polynom2(Double_t *x, Double_t *par) { double p0 = par[0]; double p1 = par[1]; double p2 = par[2]; double pt = TMath::Max(x[0],0.000001); double fitval = p0+p1*pt+p2*pt*pt; return fitval; } Double_t ftotal(Double_t *x, Double_t *par) { return turnon(x,par) + polynom2(x,&par[3]); } void plot_turnon() { TFile *f = new TFile("presel.root"); TH1F *sht20_seta = (TH1F*)f->Get("sht20_seta"); TH1F *allem_seta = (TH1F*)f->Get("allem_seta"); gROOT->SetStyle("Plain"); gROOT->ForceStyle(); gStyle->SetOptTitle(1); gStyle->SetOptStat(0); sht20_seta->Rebin(2); sht20_seta->Sumw2(); allem_seta->Rebin(2); allem_seta->Sumw2(); TH1F *sht20_res = new TH1F("sht20_res","|#eta|<1.6, E*_SHT20",80,0.,80.); sht20_res->Rebin(2); sht20_res->Divide(sht20_seta,allem_seta,1,1,"B"); TCanvas *c1 = new TCanvas("c1","c1",700,400); c1->Divide(); sht20_res->Draw(); TF1 *f1 = new TF1("f1",turnon,0,27,3); TF1 *f2 = new TF1("f2",polynom2,28,60,3); TF1 *total =new TF1("total",ftotal,0,70,6); f1->SetParameters(14.,0.9,0.9); f2->SetParameters(7.44003e-01,7.50543e-03,-6.55469e-05); Double_t par[6]; sht20_res->Fit("f1","R"); sht20_res->Fit("f2","R+"); f1->GetParameters(&par[0]); f2->GetParameters(&par[3]); //par[5] *= 0.9; //cout << par[0] << endl; total->SetParameters(par); sht20_res->Fit(total,"R+"); }