Double_t lorentzianPeak(Double_t *x, Double_t *par) { /* fitしたい関数の定義 */ return (0.25*par[0]*par[1]*par[1])/ TMath::Max(1.e-10, (x[0]-par[2])*(x[0]-par[2]) + 0.25*par[1]*par[1]); } void fitLolenzian(TH1F *h1) { TF1 *fitFcn = new TF1("fitFcn", lorentzianPeak, -10.0, 10.0, 3); /*初期パラメーターの設定*/ fitFcn->SetParameter(0, 600); fitFcn->SetParameter(1, 0.003); fitFcn->SetParameter(2, 0.0); /*実際にfit*/ h1->Fit("fitFcn"); /*ここから先のプログラムは本質的なものではありません*/ double mean, width; double x1,x2; int bin1, bin2; int n; double probability; double sigma; sigma = 3.0; width = fitFcn->GetParameter(1); mean = fitFcn->GetParameter(2); x1 = mean - sigma*width/2.0; x2 = mean + sigma*width/2.0; bin1 = h1->GetXaxis()->FindBin(x1); bin2 = h1->GetXaxis()->FindBin(x2); n = h1->Integral(bin1, bin2); probability = (double)n/(double)h1->GetEntries(); printf("n=%d pro=%f\n", n, probability); }