#include #include #include #include #include //**********<<< Lorentzian >>>********** double Lorentzian(double* x, double* p) { return pow(p[1], 2.) / (pow(x[0] - p[0], 2.) + pow(p[1], 2.)); } //**********<<< Gaussian >>>********** double Gaussian(double* x, double* p) { return exp(-log(2.) * pow((x[0] - p[0]) / p[1], 2.));//p[1] is half width at half maximum } void test() { if (gROOT->FindObject("h1") != 0) { gROOT->ProcessLine("delete h1"); } TH1D* h1 = new TH1D("h1", "h1", 1000, -10, 10); if (gROOT->FindObject("h2") != 0) { gROOT->ProcessLine("delete h2"); } TH1D* h2 = new TH1D("h2", "h2", 1000, -10, 10); if (gROOT->FindObject("h3") != 0) { gROOT->ProcessLine("delete h3"); } TH1D* h3 = new TH1D("h3", "h3", 1000, -10, 10); TF1* peak = new TF1("peak", Lorentzian, -100, 100, 2); peak->SetParameter(0, 0);//center value peak->SetParameter(1, 1);//half width at half maximum for (int i = 0; i < 10000; i++) { h1->Fill(peak->GetRandom()); } peak->SetParameter(0, 1);//center value peak->SetParameter(1, 1);//half width at half maximum for (int i = 0; i < 10000; i++) { h2->Fill(peak->GetRandom()); } peak->SetParameter(0, 0);//center value peak->SetParameter(1, 0.5);//half width at half maximum for (int i = 0; i < 10000; i++) { h3->Fill(peak->GetRandom()); } if (gROOT->FindObject("canv1") != 0) { gROOT->ProcessLine("delete canv1"); } TCanvas* canv1 = new TCanvas("canv1", "", 0, 0, 1000, 500); h1->Draw(); if (gROOT->FindObject("canv2") != 0) { gROOT->ProcessLine("delete canv2"); } TCanvas* canv2 = new TCanvas("canv2", "", 32, 62, 1000, 500); h2->Draw(); if (gROOT->FindObject("canv3") != 0) { gROOT->ProcessLine("delete canv3"); } TCanvas* canv3 = new TCanvas("canv3", "", 58, 93, 1000, 500); h3->Draw(); }