7 #include "TGraphErrors.h"
23 Double_t f1=TMath::Exp((-(par[0]-x[0])*(par[0]-x[0]))/(2.*par[1]*par[1]));
24 Double_t f2=(x[0]-par[2])*(x[0]-par[2])+par[3]*par[3]/4.;
42 func->SetParameter(0,xx);
43 func->SetParameter(1,par[3]);
44 func->SetParameter(2,par[4]);
45 func->SetParameter(3,par[5]);
57 func->SetParameter(0,xx);
58 func->SetParameter(1,par[3]);
59 func->SetParameter(2,par[4]);
60 func->SetParameter(3,par[5]);
69 Double_t f2=(x[0]-par[1])*(x[0]-par[1])+par[2]*par[2]/4.;
82 fResponse->SetParameter(1,1./peaktobackground);
84 fResponse->FixParameter(3,beamresolution*1e-6);
86 fResponse->SetParameter(5,resonancewidth*1e-6);
93 for (Int_t
i=0;
i<
n;
i++)
103 Double_t xbins[13]={3.523, 3.525, 3.5252, 3.5254, 3.5256, 3.5258, 3.5260, 3.5262, 3.5264, 3.5266, 3.5268, 3.527, 3.529};
110 for (Int_t
i=0;
i<13;
i++)
112 masses[
i]=(xbins[
i]+xbins[
i+1])/2.;
116 sprintf(command,
"output_stat=%i_p2b=%i_pres=%i_width=%i.root",(
int) stat, (
int) peaktobackground, (
int) beamresolution, (
int) resonancewidth);
117 TFile *
f=
new TFile(command,
"RECREATE");
119 TH1D *hisData=
new TH1D(
"hisData",
"",12,xbins);
120 TH1D *his=
new TH1D(
"hisWidth",
"",100,resonancewidth-10*beamresolution,resonancewidth+10*beamresolution);
121 TH1D *his2=
new TH1D(
"hisMass",
"",100,-resonancewidth*2e-7+(
xmin+
xmax)/2.,resonancewidth*2e-7+(
xmin+
xmax)/2.);
123 TH1D *his3=
new TH1D(
"hiseMass",
"",100,0,beamresolution);
124 TH1D *his4=
new TH1D(
"hiseWidth",
"",100,0,resonancewidth);
126 TH2D *hisMassvsError=
new TH2D(
"hisMassvsError",
"",100,-resonancewidth*2e-7+(
xmin+
xmax)/2.,resonancewidth*2e-7+(
xmin+
xmax)/2.,100,0,beamresolution);
127 TH2D *hisWidthvsError=
new TH2D(
"hisWidthvsError",
"",100,resonancewidth-10*beamresolution,resonancewidth+10*beamresolution,100,0,resonancewidth);
129 TH1D *hisxsq=
new TH1D(
"hisxsq",
"",100,0,5);
135 TGraphErrors *grData=
new TGraphErrors(12);
137 for (Int_t
i=0;
i<nroftests;
i++)
139 setShape(stat,peaktobackground,beamresolution,resonancewidth,resonancemass);
141 for (Int_t j=0; j<12; j++)
143 hisData->SetBinContent(j+1,counts[j]);
145 grData->SetPoint(j,masses[j],counts[j]);
148 if (!silent) cout <<
i <<
" of the " << nroftests << endl;
149 Int_t retval = hisData->Fit(
"fResponse",option);
161 cout <<
"Chisq = " << chisqr << endl;
162 cout <<
"Mass = " << (
Double_t) mass[0] <<
" +- " << (
Double_t) mass[1] <<
" GeV" << endl;
163 cout <<
"Width = " << (
Double_t) width[0] <<
" +- " << (
Double_t) width[1] <<
" keV" << endl;
167 hisxsq->Fill(chisqr);
169 his3->Fill(mass[1]*1e6);
170 his4->Fill(width[1]);
172 hisMassvsError->Fill(mass[0],mass[1]*1e6);
173 hisWidthvsError->Fill(width[0],width[1]);
185 for (Int_t
i=0;
i<6;
i++)
194 fBW->SetLineColor(kBlue);
204 cout <<
"Mass error " << 1e6*sumemass/((
Double_t) count) << endl;
205 cout <<
"Width error " << sumewidth/((
Double_t) count) << endl;
209 TH1D *dum=
new TH1D(
"dum",
"",100,
xmin,
xmax);
211 dum->SetMaximum(1.2*
fResponse->Eval(resonancemass));
214 fBW->SetParameter(0,val*
fBW->GetParameter(0));
226 hisMassvsError->Write();
227 hisWidthvsError->Write();
Double_t signalResponse(Double_t *x, Double_t *par)
void setShape(Double_t stat, Double_t peaktobackground, Double_t beamresolution, Double_t resonancewidth, Double_t resonancemass)
Double_t val[nBoxes][nFEBox]
static T Sqrt(const T &x)
Double_t nastyFunction(Double_t *x, Double_t *par)
friend F32vec4 fabs(const F32vec4 &a)
Double_t breitWigner(Double_t *x, Double_t *par)
Double_t pandaResponse(Double_t *x, Double_t *par)
void getCounts(Int_t n, Double_t *masses, Double_t *counts)
void fittest(Int_t nroftests=1, Char_t option[]="LQN", Double_t stat=200, Double_t peaktobackground=8, Double_t beamresolution=50., Double_t resonancewidth=500., Double_t resonancemass=3.526, Int_t seed=0, Bool_t silent=kFALSE)