23 #ifndef ROOTSPY_MACROS
24 #define rs_SetFlag(A) cout<<"rs_SetFlag ignored outside of RootSpy context"<<endl
25 #define rs_GetFlag(A) 0
26 #define rs_ResetHisto(A) cout<<"rs_ResetHisto ignored outside of RootSpy context"<<endl
27 #define rs_RestoreHisto(A) cout<<"rs_RestoreHisto ignored outside of RootSpy context"<<endl
28 #define InsertSeriesData(A) cout<<"InsertSeriesData ignored outside of RootSpy context"<<endl
29 #define InsertSeriesMassFit(A,B,C,D,E,F) cout<<"InsertSeriesMassFit ignored outside of RootSpy context"<<endl
49 static Double_t mass_bg_1(Double_t *xptr, Double_t *p)
53 if(x-p[1] >0.) bg=p[0]*pow((x-p[1]),p[2])*exp(-p[3]*x);
63 static Double_t peak_gs(Double_t *xptr, Double_t *p)
69 gs=p[0]/
sqrt(2.0*3.1416)/p[2] * exp(-pow((x-p[1])/p[2],2)/2.0);
79 static Double_t fun_peak_bg_1(Double_t *xptr, Double_t *p)
82 Int_t n_peaks=Int_t(p[0]+0.1);
84 Double_t fun = mass_bg_1(xptr,&p[1]);
85 for(
int i=0;i<n_peaks;i++){
86 Int_t iflg=Int_t(p[5+4*i]+0.5);
87 if(p[5+4*i]<0.) iflg=Int_t(p[5+4*i]-0.5);
89 fun+=peak_gs( xptr,&p[5+4*i+1]);
92 if(x>p[5+4*i+2]-p[5+4*i+3]*3. && x<p[5+4*i+2]+p[5+4*i+3]*3.){
106 static Double_t FitPeaksWithBackgr(
108 Double_t mass_thresh = 0.139*2.+0.135,
109 Double_t bg_pos = 1.2,
110 TString type_peaks =
"G",
112 Double_t peak_pos_1 = 0.78,
113 Double_t peak_width_1 = 0.03,
114 Double_t peak_pos_2 = 0.0,
115 Double_t peak_width_2 = 0.0,
116 Double_t peak_pos_3 = 0.0,
117 Double_t peak_width_3 = 0.0,
118 Double_t peak_pos_4 = 0.0,
119 Double_t peak_width_4 = 0.0,
120 Double_t *pars_out = NULL,
121 Double_t *errs_out = NULL)
128 TString hname = TString(h1->GetName());
129 Int_t nbins=h1->GetNbinsX();
131 cout <<
"FitPeaksWithBackgr: Histogram name " <<hname <<
" N bins "<<nbins << endl;
134 Double_t xmin = h1->GetXaxis()->GetXmin();
135 Double_t xmax = h1->GetXaxis()->GetXmax();
136 Double_t xbin = (xmax-xmin)/nbins;
138 gPad->SetLeftMargin(0.12);
139 h1->GetYaxis()->SetTitleOffset(0.75);
140 h1->GetYaxis()->SetTitle(Form(
"Combinations / %5.1f MeV",xbin*1000.));
144 cout <<
"FitPeaksWithBackgr: No fit - too few bins " << nbins << endl;
148 if(h1->GetEntries()<20){
149 cout <<
"FitPeaksWithBackgr: No fit - too few entries " << h1->GetEntries() << endl;
154 Double_t set_peaks[10][2];
156 set_peaks[0][0]=peak_pos_1;
157 set_peaks[0][1]=peak_width_1;
158 set_peaks[1][0]=peak_pos_2;
159 set_peaks[1][1]=peak_width_2;
160 set_peaks[2][0]=peak_pos_3;
161 set_peaks[2][1]=peak_width_3;
162 set_peaks[3][0]=peak_pos_4;
163 set_peaks[3][1]=peak_width_4;
165 for(
int i=0; i<int(type_peaks.Length()) && i<4 ; i++){
167 if(set_peaks[i][1]>0.){
168 set_peaks[n_peaks][0]=set_peaks[i][0];
169 set_peaks[n_peaks][1]=set_peaks[i][1];
170 cod_peaks[n_peaks]=1;
171 if(
char(type_peaks(i))==
'G' ||
char(type_peaks(i))==
'g') cod_peaks[n_peaks]=1;
179 Double_t xminfit = mass_thresh;
180 if(xminfit<xmin) xminfit=xmin;
181 Double_t xmaxfit = xmax;
184 if( bg_pos - 5.*xbin < xminfit || bg_pos + 5.*xbin > xmaxfit){
185 cout <<
"FitPeaksWithBackgr: No fit - the specified bg position "<< bg_pos <<
186 " is outside of the fit range, or too close to the edge "<<endl;
189 for(
int i=0;i<n_peaks;i++){
190 if( bg_pos + 5.*xbin > set_peaks[i][0]-3.*set_peaks[i][1] &&
191 bg_pos - 5.*xbin < set_peaks[i][0]+3.*set_peaks[i][1] ){
192 cout <<
"FitPeaksWithBackgr: No fit - the specified bg position "<< bg_pos <<
193 " is too close to peak "<< i <<endl;
200 Int_t n_par = 1+4+4*n_peaks;
201 TString fun_name = hname + TString(
"_fun");
202 TF1 *ftf = (TF1 *)gROOT->FindObject(fun_name);
204 if(ftf->GetNpar() != n_par){
205 cout <<
" Function exists with wrong parameter number " << ftf->GetNpar() << endl;
210 if(ftf == NULL) ftf =
new TF1(fun_name, fun_peak_bg_1, 0., 0., n_par);
211 ftf->SetRange(xminfit, xmaxfit);
212 ftf->SetParName( 0,
"Function code .");
213 ftf->SetParName( 1,
"Bkgnd Amp .");
214 ftf->SetParName( 2,
"Bkgnd threshold");
215 ftf->SetParName( 3,
"Bkgnd power .");
216 ftf->SetParName( 4,
"Bkgnd exponent.");
217 for(
int i=0;i<n_peaks;i++){
218 TString nam_p=
"Peak ";
219 if(
char(type_peaks(i))==
'G' ||
char(type_peaks(i))==
'g') nam_p=
"Gauss ";
220 nam_p.Append(Form(
"%d",i+1));
221 ftf->SetParName( 5+i*4+0,nam_p+TString(
" code ."));
222 ftf->SetParName( 5+i*4+1,nam_p+TString(
" integr."));
223 ftf->SetParName( 5+i*4+2,nam_p+TString(
" mean ."));
224 ftf->SetParName( 5+i*4+3,nam_p+TString(
" width ."));
230 ftf->FixParameter(0, Double_t(n_peaks));
231 ftf->SetParameter(1, 1.0);
232 ftf->FixParameter(2, mass_thresh);
233 ftf->SetParameter(3, 2.0);
234 ftf->SetParameter(4, 4.0);
236 for(
int i=0;i<n_peaks;i++){
237 ftf->FixParameter(5+i*4+0,-2.);
238 ftf->FixParameter(5+i*4+1, 0.);
239 ftf->FixParameter(5+i*4+2, set_peaks[i][0]);
240 ftf->FixParameter(5+i*4+3, set_peaks[i][1]);
244 Double_t x1=bg_pos-5.*xbin;
245 Double_t x2=bg_pos+5.*xbin;
246 Int_t ix1=h1->GetXaxis()->FindBin(x1);
247 Int_t ix2=h1->GetXaxis()->FindBin(x2);
248 Double_t bg=h1->Integral(ix1,ix2)/(ix2-ix1+1);
249 Double_t fun=ftf->Eval((x1+x2)/2.);
251 if(fun>0.) norm=bg/fun;
252 ftf->SetParameter(1, norm);
254 ftf->SetParLimits(3,0.3,4.);
255 ftf->SetParLimits(4,0.5,8.);
257 Int_t fit_status = h1->Fit(ftf,
"0Q",
"", xminfit, xmaxfit);
258 if(fit_status != 0 ){
259 cout <<
"FitPeaksWithBackgr: Fit of backgound failed, code "<< fit_status <<endl;
265 for(
int i=n_peaks-1;i>=0;i--){
267 x1=set_peaks[i][0]-set_peaks[i][1]*3.;
268 x2=set_peaks[i][0]+set_peaks[i][1]*3.;
269 ix1=h1->GetXaxis()->FindBin(x1);
270 ix2=h1->GetXaxis()->FindBin(x2);
271 Double_t peak_tot=h1->Integral(ix1,ix2);
273 ftf->FixParameter(5+i*4,0.);
274 Double_t peak_bg=ftf->Integral(x1,x2)/xbin;
276 ftf->SetParameter(5+i*4+1,(peak_tot-peak_bg)*xbin);
278 ftf->FixParameter(5+i*4,Double_t(cod_peaks[i]));
279 ftf->ReleaseParameter(5+i*4+1);
280 ftf->ReleaseParameter(5+i*4+2);
281 ftf->ReleaseParameter(5+i*4+3);
282 Double_t wd=ftf->GetParameter(5+i*4+3);
283 ftf->SetParLimits(5+i*4+3,wd*0.3,wd*3.);
285 fit_status = h1->Fit(ftf,
"0Q",
"", xminfit, xmaxfit);
286 if(fit_status != 0 ){
287 cout <<
"FitPeaksWithBackgr: Fit of peak+backgound failed, code "<< fit_status <<endl;
297 TString fun_name_bg = fun_name + TString(
"_bg");
298 TF1 *fbg = (TF1 *)gROOT->FindObject(fun_name_bg);
300 if(fbg->GetNpar() != n_par){
301 cout <<
"FitPeaksWithBackgr: Function exists with wrong parameter number " << fbg->GetNpar() << endl;
306 if(fbg == NULL) fbg =
new TF1(
"fun_bg", fun_peak_bg_1, 0., 0., n_par);
307 fbg->SetParameters(ftf->GetParameters());
308 for(
int i=0;i<n_peaks;i++){fbg->FixParameter(5+i*4,0.);}
309 fbg->SetLineStyle(2);
310 fbg->SetRange(xminfit, xmaxfit);
314 if(n_peaks != n_ok_fit){
315 cout <<
"FitPeaksWithBackgr: Fit of " << n_peaks <<
" failed: successes = " << n_ok_fit << endl;
320 cout <<
" Peak Integral Center Width " << endl;
321 Double_t peak_integral=0.;
322 for(
int i=0;i<n_peaks;i++){
323 Double_t par[3], epar[3];
324 for(
int j=0;j<3;j++){
325 par[j]=ftf->GetParameter(5+i*4+1+j);
326 epar[j]=ftf->GetParError(5+i*4+1+j);
327 if(pars_out) pars_out[i*3 + j] = par[j];
328 if(errs_out) errs_out[i*3 + j] = epar[j];
330 printf(
" %d %8.1f +/- %7.1f ",i+1,par[0]/xbin,epar[0]/xbin);
331 printf(
" %8.4f +/- %7.4f ",par[1],epar[1]);
332 printf(
" %8.4f +/- %7.4f ",par[2],epar[2]);
335 peak_integral=par[0]/xbin;
341 Double_t
ymax = 1.05*h1->GetMaximum();
344 lin.SetLineColor(kMagenta);
346 lin.DrawLine(set_peaks[0][0], ymin, set_peaks[0][0], ymax);
349 sprintf(str,
"%d MeV", (
int)(1000*set_peaks[0][0]));
352 latex.SetTextAngle(90.0);
353 latex.SetTextSize(0.030);
354 latex.SetTextAlign(21);
355 latex.SetTextColor(kMagenta);
356 latex.DrawLatex(set_peaks[0][0] - (xmax-xmin)*0.02, ymin*0.8+ymax*0.2, str);
359 return peak_integral;
374 static Double_t gauss_bg1(Double_t *xptr, Double_t *p)
376 Double_t x = xptr[0];
377 Double_t xexcl_min = p[7];
378 Double_t xexcl_max = p[8];
379 if( x>xexcl_min && x<xexcl_max ){
384 Double_t signal = p[0]*TMath::Gaus(x, p[1],p[2]);
385 Double_t bkgnd = p[3]*pow((x-p[4]),p[5])*exp(-x*p[6]);
387 return signal + bkgnd;
393 static Double_t FitWithBackground(
397 Double_t mass_thresh,
398 Double_t xmaxfit=0.0)
402 if(h1->GetEntries()<100){
412 sprintf(ftfname,
"f%s_signal", h1->GetName());
413 sprintf(fbgname,
"f%s_bkgrnd", h1->GetName());
416 TF1 *ftf = (TF1 *)gROOT->FindObject(ftfname);
418 ftf =
new TF1(ftfname, gauss_bg1, 0.0, 0.0, 9);
419 ftf->SetParName(0,
"Gauss Amp");
420 ftf->SetParName(1,
"Gauss mean");
421 ftf->SetParName(2,
"Gauss sigma");
422 ftf->SetParName(3,
"Bkgnd Amp");
423 ftf->SetParName(4,
"Bkgnd offset");
424 ftf->SetParName(5,
"Bkgnd exponent");
425 ftf->SetParName(6,
"Bkgnd expo-rate");
426 ftf->SetParName(7,
"xmin excluded region");
427 ftf->SetParName(8,
"xmax excluded region");
431 Double_t xmin = h1->GetXaxis()->GetXmin();
435 ftf->FixParameter(0, 0.5*h1->GetBinContent(h1->FindBin(peak_pos)));
436 ftf->FixParameter(1, peak_pos);
437 ftf->FixParameter(2, peak_width);
438 ftf->SetParameter(3, 1.0);
439 ftf->SetParameter(4, mass_thresh>xmin ? mass_thresh:xmin);
440 ftf->SetParameter(5, 2.0);
441 ftf->SetParameter(6, 4.0);
444 Double_t xexcl_1 = peak_pos - 3.0*peak_width;
445 Double_t xexcl_2 = peak_pos + 3.0*peak_width;
446 ftf->FixParameter(7, xexcl_1);
447 ftf->FixParameter(8, xexcl_2);
450 Double_t xminfit = mass_thresh;
451 if(xmaxfit==0.0) xmaxfit = h1->GetXaxis()->GetXmax();
452 Int_t minbin_int = h1->FindBin(xexcl_2);
453 Int_t maxbin_int = minbin_int + 5;
454 Double_t xmin_int = h1->GetBinLowEdge(minbin_int);
455 Double_t xmax_int = h1->GetBinLowEdge(maxbin_int+1);
456 Double_t norm = h1->GetBinContent(minbin_int, maxbin_int)/h1->GetBinWidth(minbin_int)/ftf->Integral(xmin_int, xmax_int);
457 ftf->SetParameter(3, norm);
458 h1->Fit(ftf,
"0Q",
"", xminfit, xmaxfit);
461 ftf->ReleaseParameter(0);
462 ftf->ReleaseParameter(1);
463 ftf->ReleaseParameter(2);
464 ftf->ReleaseParameter(9);
465 ftf->FixParameter(7, -1.0E6);
466 ftf->FixParameter(8, -1.0E6);
467 h1->Fit(ftf,
"Q",
"", xminfit, xmaxfit);
470 TF1 *fbg = (TF1 *)gROOT->FindObject(fbgname);
471 if(!fbg) fbg =
new TF1(fbgname, gauss_bg1, xminfit, xmaxfit, ftf->GetNpar());
472 fbg->SetParameters(ftf->GetParameters());
473 fbg->SetParameter(0, 0.0);
474 fbg->SetLineStyle(2);
475 fbg->SetLineColor(kMagenta);
479 double max = 1.05*h1->GetMaximum();
481 lin.SetLineColor(kMagenta);
483 lin.DrawLine(peak_pos, 0.0, peak_pos, max);
486 sprintf(str,
"%d MeV", (
int)(1000*peak_pos));
489 latex.SetTextAngle(90.0);
490 latex.SetTextSize(0.035);
491 latex.SetTextAlign(21);
492 latex.SetTextColor(kMagenta);
493 latex.DrawLatex(peak_pos - 0.005, max/2.0, str);
496 Double_t
I = ftf->Integral(xminfit, xmaxfit) - fbg->Integral(xminfit, xmaxfit);
497 I /= h1->GetBinWidth(1);
506 vector<bool>
trig(34,
false);
512 TDirectory *
locDirectory = (TDirectory*)gDirectory->FindObjectAny(
"highlevel");
513 if(!locDirectory)
return;
540 if( !PIDNorms ) PIDNorms =
new TH1I(
"PIDNorms",
"",
NORM_NUM, 0.0,
NORM_NUM);
552 if(TVirtualPad::Pad() == NULL)
553 locCanvas =
new TCanvas(
"PID",
"PID", 1200, 600);
555 locCanvas = gPad->GetCanvas();
556 locCanvas->Divide(2, 2);
562 for(
int itrig=1; itrig<=
trig.size(); itrig++){
563 if(itrig > L1bits_gtp->GetNbinsX())
break;
564 if(
trig[itrig-1]) Ntrig_tot += (double)L1bits_gtp->GetBinContent(itrig);
566 Ntrig_phys = (double)(L1bits_gtp->GetBinContent(1) + L1bits_gtp->GetBinContent(2));
567 Ntrig_ps = (double)L1bits_gtp->GetBinContent(4);
572 Nps = PSPairEnergy->Integral();
578 Double_t Nunix = EventInfo->GetBinContent(1);
580 Double_t sum_unix_time = EventInfo->GetBinContent(2);
581 unix_time = (sum_unix_time/Nunix);
582 time_t t = (time_t)unix_time;
594 if(TwoGammaMass != NULL)
597 TwoGammaMass->GetXaxis()->SetTitleSize(0.05);
598 TwoGammaMass->GetYaxis()->SetTitleSize(0.05);
599 TwoGammaMass->GetXaxis()->SetLabelSize(0.05);
600 TwoGammaMass->GetYaxis()->SetLabelSize(0.035);
601 TwoGammaMass->SetStats(0);
604 TF1 *fun = (TF1*)gDirectory->FindObjectAny(
"fun_pi0_fit");
605 if(!fun)fun =
new TF1(
"fun_pi0_fit",
"gaus(0) + pol2(3)");
608 fun->FixParameter(0, TwoGammaMass->GetBinContent(TwoGammaMass->FindBin(0.134))*0.1);
609 fun->FixParameter(1, 0.134);
610 fun->FixParameter(2, 0.01);
611 fun->SetParameter(3, 0.0);
612 fun->SetParameter(4, 0.0);
613 fun->SetParameter(5, 0.0);
620 TwoGammaMass->Fit(fun,
"Q",
"", lo, hi);
623 fun->ReleaseParameter(0);
624 fun->ReleaseParameter(1);
625 fun->ReleaseParameter(2);
628 TwoGammaMass->Fit(fun,
"Q",
"", lo, hi);
631 TF1 *fun2 = (TF1*)gDirectory->FindObjectAny(
"fun_pi0_fit2");
632 if(!fun2) fun2 =
new TF1(
"fun_pi0_fit",
"pol2(0)" , lo, hi);
634 fun->GetParameters(pars);
635 const Double_t *errs = fun->GetParErrors();
636 fun2->SetParameters(&pars[3]);
637 fun2->SetLineColor(kMagenta);
638 fun2->SetLineStyle(2);
642 double I = fun->GetParameter(0)*fun->GetParameter(2)*
sqrt(TMath::TwoPi());
643 I /= TwoGammaMass->GetBinWidth(1);
647 sprintf(str,
"num. #pi^{o} : %g", I);
649 double max = 1.05*TwoGammaMass->GetMaximum();
650 latex.SetTextColor(kBlack);
651 latex.SetTextAngle(0.0);
652 latex.SetTextAlign(11);
653 latex.SetTextSize(0.075);
654 latex.DrawLatex(0.175, max*3.0/4.0, str);
658 double rate_per_1ktrig = I/Ntrig*1000.0;
660 sprintf(str,
"%3.1f per 1k triggers (bits 1,3)", rate_per_1ktrig);
661 latex.SetTextSize(0.06);
662 latex.DrawLatex(0.3, max*0.65, str);
667 double rate_per_ps = I/Nmy_ps*1000.0;
669 sprintf(str,
"%3.1f per 1k PS coin(>7GeV)", rate_per_ps);
670 latex.SetTextSize(0.06);
671 latex.DrawLatex(0.3, max*0.565, str);
675 cout <<
"====== pi0: I="<<I<<
" mean: " << pars[1] <<
" +/- " << errs[1] <<
" sigma: "<< pars[2] <<
" +/- " << errs[2] << endl;
676 if( (I>2000.0) && (errs[1]<0.07*pars[1]) && (errs[2]<0.2*pars[2]) ){
683 ss <<
"fit_stats,ptype=pi0 ";
684 ss <<
"rate_per_1ktrig="<<rate_per_1ktrig;
685 ss <<
",rate_per_1kps="<<rate_per_ps;
689 ss <<
",Nps="<<Nmy_ps;
690 if(unix_time!=0.0) ss<<
" "<<(uint64_t)(unix_time*1.0E9);
703 lin.SetLineColor(kMagenta);
705 lin.DrawLine(0.135, 0.0, 0.135, max);
707 latex.SetTextAngle(90.0);
708 latex.SetTextSize(0.035);
709 latex.SetTextAlign(21);
710 latex.SetTextColor(kMagenta);
711 latex.DrawLatex(0.131, max/2.0,
"135 MeV");
714 latex.SetTextColor(kBlack);
715 latex.SetTextAngle(0.0);
716 latex.SetTextSize(0.05);
717 latex.SetTextAlign(12);
719 sprintf(str,
"trig bit 1 (FCAL/BCAL): %g", (
double)L1bits_gtp->GetBinContent(1));
720 latex.DrawLatex(0.4, max*0.45, str);
721 sprintf(str,
"trig bit 3 (BCAL): %g", (
double)L1bits_gtp->GetBinContent(3));
722 latex.DrawLatex(0.4, max*0.35, str);
723 sprintf(str,
"trig bit 4 (PS): %g", (
double)L1bits_gtp->GetBinContent(4));
724 latex.DrawLatex(0.4, max*0.25, str);
732 if(KPlusKMinus != NULL)
734 KPlusKMinus->GetXaxis()->SetTitleSize(0.05);
735 KPlusKMinus->GetYaxis()->SetTitleSize(0.05);
736 KPlusKMinus->GetXaxis()->SetLabelSize(0.05);
737 KPlusKMinus->GetYaxis()->SetLabelSize(0.035);
738 KPlusKMinus->SetStats(0);
739 KPlusKMinus->GetXaxis()->SetRangeUser(0.8, 2.0);
741 Double_t pars_out[3*2];
742 Double_t errs_out[3*2];
743 Double_t I = FitWrapper::FitPeaksWithBackgr(KPlusKMinus, 0.494*2, 1.8,
"GG", 1.02, 0.01, 1.22, 0.05, 0.0, 0.0, 0.0, 0.0, pars_out, errs_out);
747 sprintf(str,
"num. #phi : %g", I);
749 double max = 1.05*KPlusKMinus->GetMaximum();
750 latex.SetTextColor(kBlack);
751 latex.SetTextAngle(0.0);
752 latex.SetTextAlign(11);
753 latex.SetTextSize(0.075);
754 latex.DrawLatex(1.4, max*3.0/4.0, str);
758 double rate_per_1ktrig = I/Ntrig*1000.0;
760 sprintf(str,
"%3.3f per 1k triggers (bits 1,3)", rate_per_1ktrig);
761 latex.SetTextSize(0.06);
762 latex.DrawLatex(1.4, max*0.65, str);
767 double rate_per_ps = I/Nmy_ps*1000.0;
769 sprintf(str,
"%3.3f per 1k PS coin(>7GeV)", rate_per_ps);
770 latex.SetTextSize(0.06);
771 latex.DrawLatex(1.4, max*0.565, str);
775 cout <<
"====== phi: I="<<I<<
" mean: " << pars_out[1] <<
" +/- " << errs_out[1] <<
" sigma: "<< pars_out[2] <<
" +/- " << errs_out[2] << endl;
776 if( (I>200.0) && (errs_out[1]<0.07*pars_out[1]) && (errs_out[2]<0.2*pars_out[2]) ){
784 ss <<
"fit_stats,ptype=phi ";
785 ss <<
"rate_per_1ktrig="<<rate_per_1ktrig;
786 ss <<
",rate_per_1kps="<<rate_per_ps;
790 ss <<
",Nps="<<Nmy_ps;
791 if(unix_time!=0.0) ss<<
" "<<(uint64_t)(unix_time*1.0E9);
809 if(PiPlusPiMinus != NULL)
811 PiPlusPiMinus->GetXaxis()->SetTitleSize(0.05);
812 PiPlusPiMinus->GetYaxis()->SetTitleSize(0.05);
813 PiPlusPiMinus->GetXaxis()->SetLabelSize(0.05);
814 PiPlusPiMinus->GetYaxis()->SetLabelSize(0.035);
815 PiPlusPiMinus->SetStats(0);
817 Double_t pars_out[3*2];
818 Double_t errs_out[3*2];
820 Double_t I = FitWrapper::FitPeaksWithBackgr(PiPlusPiMinus, 0.139*2, 1.8,
"G", 0.770, 0.085, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, pars_out, errs_out);
824 sprintf(str,
"num. #rho : %g", I);
826 double max = 1.05*PiPlusPiMinus->GetMaximum();
827 latex.SetTextColor(kBlack);
828 latex.SetTextAngle(0.0);
829 latex.SetTextAlign(11);
830 latex.SetTextSize(0.075);
831 latex.DrawLatex(1.005, max*3.0/4.0, str);
835 double rate_per_1ktrig = I/Ntrig*1000.0;
837 sprintf(str,
"%3.3f per 1k triggers (bits 1,3)", rate_per_1ktrig);
838 latex.SetTextSize(0.06);
839 latex.DrawLatex(1.010, max*0.65, str);
844 double rate_per_ps = I/Nmy_ps*1000.0;
846 sprintf(str,
"%3.3f per 1k PS coin(>7GeV)", rate_per_ps);
847 latex.SetTextSize(0.06);
848 latex.DrawLatex(1.010, max*0.565, str);
852 cout <<
"====== rho: I="<<I<<
" mean: " << pars_out[1] <<
" +/- " << errs_out[1] <<
" sigma: "<< pars_out[2] <<
" +/- " << errs_out[2] << endl;
853 if( (I>1000.0) && (errs_out[1]<0.07*pars_out[1]) && (errs_out[2]<0.2*pars_out[2]) ){
860 ss <<
"fit_stats,ptype=rho ";
861 ss <<
"rate_per_1ktrig="<<rate_per_1ktrig;
862 ss <<
",rate_per_1kps="<<rate_per_ps;
866 ss <<
",Nps="<<Nmy_ps;
867 if(unix_time!=0.0) ss<<
" "<<(uint64_t)(unix_time*1.0E9);
885 if(PiPlusPiMinusPiZero != NULL)
887 PiPlusPiMinusPiZero->GetXaxis()->SetTitleSize(0.05);
888 PiPlusPiMinusPiZero->GetYaxis()->SetTitleSize(0.05);
889 PiPlusPiMinusPiZero->GetXaxis()->SetLabelSize(0.05);
890 PiPlusPiMinusPiZero->GetYaxis()->SetLabelSize(0.035);
891 PiPlusPiMinusPiZero->SetStats(0);
893 Double_t pars_out[3*2];
894 Double_t errs_out[3*2];
896 Double_t I = FitWrapper::FitPeaksWithBackgr(PiPlusPiMinusPiZero, 0.139*2+0.135, 1.3,
"G", 0.782, 0.009, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, pars_out, errs_out);
900 sprintf(str,
"num. #omega : %g", I);
902 double max = 1.05*PiPlusPiMinusPiZero->GetMaximum();
903 latex.SetTextColor(kBlack);
904 latex.SetTextAngle(0.0);
905 latex.SetTextAlign(11);
906 latex.SetTextSize(0.075);
907 latex.DrawLatex(1.005, max*0.8, str);
911 double rate_per_1ktrig = I/Ntrig*1000.0;
913 sprintf(str,
"%3.3f per 1k triggers (bits 1,3)", rate_per_1ktrig);
914 latex.SetTextSize(0.06);
915 latex.DrawLatex(1.010, max*0.65, str);
920 double rate_per_ps = I/Nmy_ps*1000.0;
922 sprintf(str,
"%3.3f per 1k PS coin(>7GeV)", rate_per_ps);
923 latex.SetTextSize(0.06);
924 latex.DrawLatex(1.010, max*0.565, str);
928 cout <<
"====== omega: I="<<I<<
" mean: " << pars_out[1] <<
" +/- " << errs_out[1] <<
" sigma: "<< pars_out[2] <<
" +/- " << errs_out[2] << endl;
929 if( (I>200.0) && (errs_out[1]<0.07*pars_out[1]) && (errs_out[2]<0.2*pars_out[2]) ){
931 InsertSeriesMassFit(
"omega", pars_out[1], pars_out[2], errs_out[1], errs_out[2], unix_time);
936 ss <<
"fit_stats,ptype=omega ";
937 ss <<
"rate_per_1ktrig="<<rate_per_1ktrig;
938 ss <<
",rate_per_1kps="<<rate_per_ps;
942 ss <<
",Nps="<<Nmy_ps;
943 if(unix_time!=0.0) ss<<
" "<<(uint64_t)(unix_time*1.0E9);
TH1 * PiPlusPiMinusPiZero
sprintf(text,"Post KinFit Cut")
#define InsertSeriesData(A)
TDirectory * locTopDirectory
#define InsertSeriesMassFit(A, B, C, D, E, F)
TDirectory * locDirectory
printf("string=%s", string)