1 | #include "TMinuit.h"
|
---|
2 | #include "TMatrix.h"
|
---|
3 | #include "TString.h"
|
---|
4 | #include "TCanvas.h"
|
---|
5 | #include "TH1F.h"
|
---|
6 | #include "TF1.h"
|
---|
7 | #include "TLegend.h"
|
---|
8 | #include "TFile.h"
|
---|
9 | #include "TArrayF.h"
|
---|
10 | #include "TGraphErrors.h"
|
---|
11 | #include "MRawRunHeader.h"
|
---|
12 | #include "TPad.h"
|
---|
13 | #include "TPaveText.h"
|
---|
14 | #include "iostream.h"
|
---|
15 | #include "TObjArray.h"
|
---|
16 |
|
---|
17 | #include "MHMatrix.h"
|
---|
18 |
|
---|
19 | //--------------------------------------------------------------------------------------
|
---|
20 | // MAIN INPUT/OUTPUT
|
---|
21 |
|
---|
22 | #include "IOMkn421.h"
|
---|
23 | //--------------------------------------------------------------------------------------
|
---|
24 |
|
---|
25 | Double_t acut = 10; // alpha region of excess
|
---|
26 | Bool_t aplot = 1; // make only alpha plot (1) , do sig. optimization and alpha plot (0)
|
---|
27 |
|
---|
28 | //--------------------------------------------------------------------------------------------------------------
|
---|
29 | //--------------------------------------------------------------------------------------------------------------
|
---|
30 |
|
---|
31 | const TMatrix *matOn;
|
---|
32 | const TMatrix *matOff;
|
---|
33 |
|
---|
34 | Int_t isize = 0;
|
---|
35 | Int_t idist = 1;
|
---|
36 | Int_t iwidth = 2;
|
---|
37 | Int_t ilength = 3;
|
---|
38 | Int_t ialpha = 4;
|
---|
39 |
|
---|
40 | //------------------------------------------------------------------------------
|
---|
41 | //------------------------------------------------------------------------------
|
---|
42 |
|
---|
43 | Double_t signal(Double_t *x, Double_t *par){
|
---|
44 | return par[0]/(TMath::Sqrt(2.*TMath::Pi())*par[1])*TMath::Exp(-(x[0]-par[2])*(x[0]-par[2])/2./par[1]/par[1]);
|
---|
45 | }
|
---|
46 |
|
---|
47 | Double_t background(Double_t *x, Double_t *par){
|
---|
48 | return par[0]+par[1]*x[0]+par[2]*pow(x[0],2.)+par[3]*x[0]*x[0]*x[0];
|
---|
49 | //return par[0]+par[1]*x[0]+par[2]*x[0]*x[0]+par[3]*x[0]*x[0]*x[0];
|
---|
50 | }
|
---|
51 |
|
---|
52 | Double_t fitFunction(Double_t *x, Double_t *par){
|
---|
53 | return signal(x,par) + background(x,&par[3]);
|
---|
54 | }
|
---|
55 |
|
---|
56 | //------------------------------------------------------------------------------
|
---|
57 | //------------------------------------------------------------------------------
|
---|
58 | void fcn(Int_t &npar, Double_t *gin, Double_t &f, Double_t *par, Int_t iflag)
|
---|
59 | {
|
---|
60 | Double_t w1=par[0];
|
---|
61 | Double_t w2=par[1];
|
---|
62 | Double_t l1=par[2];
|
---|
63 | Double_t l2=par[3];
|
---|
64 | Double_t d1=par[4];
|
---|
65 | Double_t d2=par[5];
|
---|
66 |
|
---|
67 | Double_t non=0;
|
---|
68 | Double_t noff=0;
|
---|
69 |
|
---|
70 | TH1F hon("hon","",18,0.,90.);//5 deg bins
|
---|
71 | for(Int_t i=0;i<matOn->GetNrows();i++)
|
---|
72 | {
|
---|
73 | if( (*matOn)(i,isize)<SizeLo) continue;
|
---|
74 | if(((*matOn)(i,idist)>d1) ||((*matOn)(i,idist)<d2 )) continue;
|
---|
75 |
|
---|
76 | if(((*matOn)(i,iwidth)>w1) ||((*matOn)(i,iwidth)<w2)) continue;
|
---|
77 | if(((*matOn)(i,ilength)>l1)||((*matOn)(i,ilength)<l2)) continue;
|
---|
78 |
|
---|
79 | Float_t alpha=(*matOn)(i,ialpha);
|
---|
80 | hon.Fill(TMath::Abs(alpha));
|
---|
81 | }
|
---|
82 |
|
---|
83 | for(Int_t i=1;i<=4;i++)
|
---|
84 | non+=hon.GetBinContent(i);
|
---|
85 |
|
---|
86 | //-----------------------------------------------------------------
|
---|
87 | /*TH1F hoff("hoff","",18,0.,90.);//5 deg bins
|
---|
88 | for(Int_t i=0;i<matOff->GetNrows();i++)
|
---|
89 | {
|
---|
90 | if( (*matOff)(i,isize)<SizeLo) continue;
|
---|
91 | if(((*matOff)(i,idist)>d1) ||((*matOff)(i,idist)<d2 )) continue;
|
---|
92 |
|
---|
93 | if(((*matOff)(i,iwidth)>w1) ||((*matOff)(i,iwidth)<w2)) continue;
|
---|
94 | if(((*matOff)(i,ilength)>l1)||((*matOff)(i,ilength)<l2)) continue;
|
---|
95 |
|
---|
96 | Float_t alpha=(*matOff)(i,ialpha);
|
---|
97 | hoff.Fill(TMath::Abs(alpha));
|
---|
98 | }
|
---|
99 |
|
---|
100 | for(Int_t i=1;i<=4;i++)
|
---|
101 | noff+=hoff.GetBinContent(i);*/
|
---|
102 | //-----------------------------------------------------------------
|
---|
103 |
|
---|
104 | // flat background region
|
---|
105 | for(Int_t i=7;i<=15;i++)
|
---|
106 | noff+=hon.GetBinContent(i);
|
---|
107 |
|
---|
108 | Float_t offscale=4./9.;
|
---|
109 | noff*=offscale;
|
---|
110 |
|
---|
111 | if(non+noff<0.001)
|
---|
112 | f=0.;
|
---|
113 | else
|
---|
114 | f = -(non-noff)/(TMath::Sqrt(non+noff));
|
---|
115 |
|
---|
116 | cout<<"Non="<<non<<" Noff="<<noff*offscale<<" Sig="<<-f<<endl;
|
---|
117 | }
|
---|
118 | //------------------------------------------------------------------------------
|
---|
119 | //------------------------------------------------------------------------------
|
---|
120 | void CutOptim()
|
---|
121 | {
|
---|
122 | //-----------------------------------------------------------------------
|
---|
123 | // read matrices
|
---|
124 |
|
---|
125 | MHMatrix hmatOn;
|
---|
126 | TFile *fileOn=new TFile(fileMatOn.Data());
|
---|
127 | hmatOn.Read("Matrix");
|
---|
128 | delete fileOn;
|
---|
129 | const TMatrix &mOn=hmatOn.GetM();
|
---|
130 | matOn=(const TMatrix*)&mOn;
|
---|
131 |
|
---|
132 | MHMatrix hmatOff;
|
---|
133 | TFile *fileOff=new TFile(fileMatOff.Data());
|
---|
134 | hmatOff.Read("Matrix");
|
---|
135 | delete fileOff;
|
---|
136 | const TMatrix &mOff=hmatOff.GetM();
|
---|
137 | matOff=(const TMatrix*)&mOff;
|
---|
138 |
|
---|
139 | //-----------------------------------------------------------------------
|
---|
140 |
|
---|
141 | Int_t nrowOn = matOn->GetNrows();
|
---|
142 | Int_t nrowOff = matOff->GetNrows();
|
---|
143 |
|
---|
144 | Int_t ncolOn = matOn->GetNcols();
|
---|
145 | Int_t ncolOff = matOff->GetNcols();
|
---|
146 |
|
---|
147 | cout<<"matrix On: ncol="<<ncolOn<<" nrow="<<nrowOn<<endl;
|
---|
148 | cout<<"matrix Off: ncol="<<ncolOff<<" nrow="<<nrowOff<<endl;
|
---|
149 |
|
---|
150 | TCanvas *c = new TCanvas("c1","Alpha distribution after g/h separation",200,10,800,500);
|
---|
151 | c->SetFillColor(0);
|
---|
152 |
|
---|
153 | //-----------------------------------------------------------------------
|
---|
154 | // optimize cuts
|
---|
155 |
|
---|
156 | Int_t iflag;
|
---|
157 | Double_t val;
|
---|
158 | Double_t vstart[6];
|
---|
159 |
|
---|
160 | Double_t *gin=NULL;
|
---|
161 |
|
---|
162 | Double_t arglist[10];
|
---|
163 | Int_t ierflg = 0;
|
---|
164 |
|
---|
165 | TMinuit *gMinuit = new TMinuit(10);
|
---|
166 | TGraph* gr=NULL;
|
---|
167 |
|
---|
168 | if(!aplot)
|
---|
169 | c->Divide(2,1);
|
---|
170 | else
|
---|
171 | goto APlot;
|
---|
172 |
|
---|
173 | // start values
|
---|
174 | vstart[0]=WidthUp;
|
---|
175 | vstart[1]=WidthLo;
|
---|
176 | vstart[2]=LengthUp;
|
---|
177 | vstart[3]=LengthLo;
|
---|
178 | vstart[4]=DistUp;
|
---|
179 | vstart[5]=DistLo;
|
---|
180 |
|
---|
181 | gMinuit->SetFCN(fcn);
|
---|
182 |
|
---|
183 | arglist[0] = 1;
|
---|
184 | gMinuit->mnexcm("SET ERR", arglist ,1,ierflg);
|
---|
185 |
|
---|
186 | // Set starting values and step sizes for parameters
|
---|
187 | static Double_t step[6];
|
---|
188 | const Double_t def_step=0.2;
|
---|
189 | step[0]=def_step;
|
---|
190 | step[1]=def_step;
|
---|
191 | step[2]=def_step;
|
---|
192 | step[3]=def_step;
|
---|
193 | step[4]=def_step;
|
---|
194 | step[5]=def_step;
|
---|
195 |
|
---|
196 | gMinuit->mnparm(0,"w1", vstart[0], step[0], 0.,0.,ierflg);
|
---|
197 | gMinuit->mnparm(1,"w2", vstart[1], step[1], 0.,0.,ierflg);
|
---|
198 | gMinuit->mnparm(2,"l1", vstart[2], step[2], 0.,0.,ierflg);
|
---|
199 | gMinuit->mnparm(3,"l2", vstart[3], step[3], 0.,0.,ierflg);
|
---|
200 | gMinuit->mnparm(4,"d1", vstart[4], step[4], 0.2,1.,ierflg);
|
---|
201 | gMinuit->mnparm(5,"d2", vstart[5], step[5], 0.5,1.5,ierflg);
|
---|
202 |
|
---|
203 | //gMinuit->FixParameter(0); // WidthUp
|
---|
204 | gMinuit->FixParameter(1); // WidthLo
|
---|
205 | //gMinuit->FixParameter(2); // LengthUp
|
---|
206 | gMinuit->FixParameter(3); // LengthLo
|
---|
207 | gMinuit->FixParameter(4); // DistUp
|
---|
208 | gMinuit->FixParameter(5); // DistLo
|
---|
209 |
|
---|
210 | gMinuit->Eval(6,gin,val,vstart,iflag);
|
---|
211 |
|
---|
212 | arglist[0] = 5000;
|
---|
213 | arglist[1] = 1.;
|
---|
214 |
|
---|
215 | //gMinuit->mnexcm("MIGRAD", arglist ,2,ierflg);
|
---|
216 | gMinuit->mnexcm("SIM", arglist ,2,ierflg);
|
---|
217 |
|
---|
218 | // Print results
|
---|
219 | Double_t amin,edm,errdef;
|
---|
220 | Int_t nvpar,nparx,icstat;
|
---|
221 | gMinuit->mnstat(amin,edm,errdef,nvpar,nparx,icstat);
|
---|
222 | gMinuit->mnprin(3,amin);
|
---|
223 |
|
---|
224 | Double_t fpar[6];
|
---|
225 | Double_t fparerr[6];
|
---|
226 | for(Int_t i=0;i<6;i++)
|
---|
227 | gMinuit->GetParameter(i,fpar[i],fparerr[i]);
|
---|
228 |
|
---|
229 | WidthUp = fpar[0];
|
---|
230 | WidthLo = fpar[1];
|
---|
231 | LengthUp = fpar[2];
|
---|
232 | LengthLo = fpar[3];
|
---|
233 | DistUp = fpar[4];
|
---|
234 | DistLo = fpar[5];
|
---|
235 |
|
---|
236 |
|
---|
237 | // parameter's sigma plots
|
---|
238 | c->cd(2);
|
---|
239 | // 2 sigma contour
|
---|
240 | /*
|
---|
241 | gMinuit->SetErrorDef(4);
|
---|
242 | gr = (TGraph*) gMinuit->Contour(100,0,2);
|
---|
243 | gr->DrawClone("AL");*/
|
---|
244 |
|
---|
245 | // 1 sigma contour
|
---|
246 | gMinuit->SetErrorDef(1);
|
---|
247 | gr = (TGraph*) gMinuit->Contour(100,0,2);
|
---|
248 | gr->DrawClone("AL");
|
---|
249 | /*
|
---|
250 | // contour of min. function
|
---|
251 | c->cd(2);
|
---|
252 | arglist[0] = 1; // WidthUp
|
---|
253 | gMinuit->mnexcm("SCA", arglist ,1,ierflg);
|
---|
254 | TGraph* gr = (TGraph*)gMinuit->GetPlot();
|
---|
255 | gr->DrawClone("al");
|
---|
256 |
|
---|
257 | c->cd(4);
|
---|
258 | arglist[0] = 4; // LengthLo
|
---|
259 | gMinuit->mnexcm("SCA", arglist ,1,ierflg);
|
---|
260 | gr = (TGraph*)gMinuit->GetPlot();
|
---|
261 | gr->DrawClone("al");//*/
|
---|
262 |
|
---|
263 | c->cd(1);
|
---|
264 |
|
---|
265 | APlot:
|
---|
266 | //-----------------------------------------------------------------------
|
---|
267 | // plot alpha histogram with current cuts and calc significance
|
---|
268 |
|
---|
269 | // alpha histogram
|
---|
270 | TH1F *halpha=new TH1F("halpha","",18,0.,90.);
|
---|
271 | TH1F *halphaOff=new TH1F("halphaOff","",18,0.,90.);
|
---|
272 |
|
---|
273 | halpha->SetStats(kFALSE);
|
---|
274 | halphaOff->SetStats(kFALSE);
|
---|
275 |
|
---|
276 | for(Int_t i=0;i<nrowOn;i++)
|
---|
277 | {
|
---|
278 | if (mOn(i,isize)<SizeLo) continue;
|
---|
279 | if((mOn(i,idist)<DistLo)||(mOn(i,idist)>DistUp)) continue;
|
---|
280 |
|
---|
281 | if((mOn(i,iwidth) < WidthLo) ||(mOn(i,iwidth) > WidthUp)) continue;
|
---|
282 | if((mOn(i,ilength)< LengthLo)||(mOn(i,ilength)> LengthUp)) continue;
|
---|
283 |
|
---|
284 | halpha->Fill(TMath::Abs(mOn(i,ialpha)));
|
---|
285 | }
|
---|
286 | halpha->SetLineWidth(2);
|
---|
287 | halpha->DrawClone();
|
---|
288 |
|
---|
289 | for(Int_t i=0;i<nrowOff;i++)
|
---|
290 | {
|
---|
291 | if (mOff(i,isize)<SizeLo) continue;
|
---|
292 | if((mOff(i,idist)<DistLo)||(mOff(i,idist)>DistUp)) continue;
|
---|
293 |
|
---|
294 | if((mOff(i,iwidth) < WidthLo) ||(mOff(i,iwidth) > WidthUp)) continue;
|
---|
295 | if((mOff(i,ilength)< LengthLo)||(mOff(i,ilength)> LengthUp)) continue;
|
---|
296 |
|
---|
297 | halphaOff->Fill(TMath::Abs(mOff(i,ialpha)));
|
---|
298 |
|
---|
299 | }
|
---|
300 |
|
---|
301 | // scale Off histogram to On data using bins 6-18
|
---|
302 | Double_t nsample_on=0;
|
---|
303 | Double_t nsample_off=0;
|
---|
304 | for(Int_t i=6;i<18;i++)
|
---|
305 | nsample_on+=halpha->GetBinContent(i);
|
---|
306 | for(Int_t i=6;i<18;i++)
|
---|
307 | nsample_off+=halphaOff->GetBinContent(i);
|
---|
308 |
|
---|
309 | Double_t scal=nsample_on/nsample_off;
|
---|
310 |
|
---|
311 | halphaOff->SetLineColor(2);
|
---|
312 | halphaOff->Scale(scal);
|
---|
313 | halphaOff->Draw("same");
|
---|
314 |
|
---|
315 | gPad->SetGridx();
|
---|
316 | gPad->SetGridy();
|
---|
317 |
|
---|
318 | // define functions
|
---|
319 | TF1 *backFcn = new TF1("backFcn",background,20.,89.5,4);
|
---|
320 | backFcn->SetLineWidth(2);
|
---|
321 | backFcn->SetLineColor(kRed);
|
---|
322 |
|
---|
323 | TF1 *signalFcn = new TF1("signalFcn",signal,0.,89.5,3);
|
---|
324 | signalFcn->SetLineWidth(2);
|
---|
325 | signalFcn->SetLineColor(kBlue);
|
---|
326 | signalFcn->SetNpx(500);
|
---|
327 |
|
---|
328 | TF1 *fitFcn = new TF1("fitFcn",fitFunction,0.,89.5,7);
|
---|
329 | fitFcn->SetNpx(500);
|
---|
330 | fitFcn->SetLineWidth(2);
|
---|
331 | fitFcn->SetLineColor(kMagenta);
|
---|
332 |
|
---|
333 | // start-parameters
|
---|
334 | Double_t p3start=halpha->GetBinContent(halpha->GetNbinsX()-1);
|
---|
335 | Double_t p4start=0.;
|
---|
336 | Double_t p5start=0.;
|
---|
337 | Double_t p6start=0.;
|
---|
338 |
|
---|
339 | Double_t p0start=(halpha->GetEntries()*halpha->GetBinWidth(1)-p3start)*0.05;
|
---|
340 | Double_t p1start=5.;
|
---|
341 | Double_t p2start=0.;
|
---|
342 |
|
---|
343 | cout<<"start values:"<<endl;
|
---|
344 |
|
---|
345 | cout<<" gaussian:"<<endl;
|
---|
346 | cout<<" p0 = "<<p0start<<endl;
|
---|
347 | cout<<" p1 = "<<p1start<<endl;
|
---|
348 | cout<<" p2 = "<<p2start<<endl;
|
---|
349 |
|
---|
350 | cout<<" pol3:"<<endl;
|
---|
351 | cout<<" p0 = "<<p3start<<endl;
|
---|
352 | cout<<" p1 = "<<p4start<<endl;
|
---|
353 | cout<<" p2 = "<<p5start<<endl;
|
---|
354 | cout<<" p3 = "<<p6start<<endl<<endl;
|
---|
355 |
|
---|
356 |
|
---|
357 | // background fit
|
---|
358 | Double_t parb[4];
|
---|
359 | backFcn->SetParameters(p3start,p4start,p5start,p6start);
|
---|
360 | backFcn->FixParameter(1,0); // deriv. at zero equal zero
|
---|
361 | //backFcn->FixParameter(2,0); // no 2nd order term
|
---|
362 | backFcn->FixParameter(3,0); // no 3rd order term
|
---|
363 | //halphaOff->Fit ("backFcn","RN");
|
---|
364 | halpha->Fit ("backFcn","RN");
|
---|
365 | backFcn->GetParameters(parb);
|
---|
366 |
|
---|
367 | // total fit
|
---|
368 | Double_t par[7];
|
---|
369 | fitFcn->SetParameters(p0start,p1start,p2start,
|
---|
370 | parb[0],parb[1],parb[2],parb[3]);
|
---|
371 |
|
---|
372 | fitFcn->FixParameter(2,0.);
|
---|
373 | fitFcn->FixParameter(3,parb[0]);
|
---|
374 | fitFcn->FixParameter(4,parb[1]);
|
---|
375 | fitFcn->FixParameter(5,parb[2]);
|
---|
376 | fitFcn->FixParameter(6,parb[3]);
|
---|
377 | halpha->Fit ("fitFcn","RN");
|
---|
378 |
|
---|
379 | // draw the legend
|
---|
380 | TLegend *legend=new TLegend(0.4,0.5,0.93,0.65);
|
---|
381 | legend->SetTextFont(40);
|
---|
382 | legend->SetTextSize(0.04);
|
---|
383 | legend->SetFillColor(19);
|
---|
384 | legend->AddEntry(halpha,"Data","lp");
|
---|
385 | TString strpol("");
|
---|
386 | strpol=Form("Polynom");
|
---|
387 | legend->AddEntry(backFcn,strpol.Data(),"l");
|
---|
388 | legend->AddEntry(fitFcn,"Global Fit","l");
|
---|
389 | //legend->Draw();
|
---|
390 |
|
---|
391 | // drawing the functions
|
---|
392 | fitFcn->GetParameters(par);
|
---|
393 | fitFcn->SetRange(-90.,90.);
|
---|
394 | fitFcn->SetLineWidth(2);
|
---|
395 | fitFcn->Draw("same");
|
---|
396 |
|
---|
397 | signalFcn->SetParameters(par);
|
---|
398 | signalFcn->SetLineWidth(2);
|
---|
399 | //signalFcn->Draw("same");
|
---|
400 |
|
---|
401 | backFcn->SetParameters(&par[3]);
|
---|
402 | backFcn->SetRange(-90,90);
|
---|
403 | backFcn->SetLineWidth(2);
|
---|
404 | backFcn->Draw("same");
|
---|
405 |
|
---|
406 |
|
---|
407 | //-----------------------------------------------------------------------
|
---|
408 | // calculate significance
|
---|
409 |
|
---|
410 | // analytical method
|
---|
411 | Double_t nSig=signalFcn->Integral(0.,acut)/halpha->GetBinWidth(1);
|
---|
412 | Double_t nOffScaled=backFcn->Integral(0.,acut)/halpha->GetBinWidth(1);
|
---|
413 |
|
---|
414 | Double_t nOn=nSig+nOffScaled;
|
---|
415 |
|
---|
416 | // significance after Li/Ma
|
---|
417 | Double_t theta=1.; // should be = Ton/Toff ???
|
---|
418 | nSig=nOn-nOffScaled;
|
---|
419 | Double_t nOff=nOffScaled/theta;
|
---|
420 |
|
---|
421 | Double_t siglima = sqrt(2*(nOn*TMath::Log((1+theta)*nOn/(theta*(nOn+nOff)))
|
---|
422 | +nOff*TMath::Log((1+theta)*(nOff/(nOn+nOff)))));
|
---|
423 |
|
---|
424 | // "standard" significance
|
---|
425 | Double_t sigstd = nSig/sqrt(nOn+nOffScaled);
|
---|
426 |
|
---|
427 |
|
---|
428 | TPaveText *pt = new TPaveText(0.25,0.75,0.56,0.98,"brNDC");
|
---|
429 |
|
---|
430 | pt->SetTextFont(60);
|
---|
431 | pt->SetTextSize(0.03);
|
---|
432 | pt->SetTextAlign(12);
|
---|
433 |
|
---|
434 | TString strcut1(Form("cuts:"));
|
---|
435 | TString strcut3(Form(" |alpha| < %4.2f ",acut));
|
---|
436 | pt->AddText(strcut3.Data());
|
---|
437 | TString str("");
|
---|
438 | pt->AddText(str);
|
---|
439 |
|
---|
440 | TString strsig(Form("NExcess = %d",Int_t(nSig)));
|
---|
441 | pt->AddText(strsig.Data());
|
---|
442 | TString strbak(Form("NOff = %d",Int_t(nOffScaled)));
|
---|
443 | pt->AddText(strbak.Data());
|
---|
444 | pt->AddText(str);
|
---|
445 |
|
---|
446 | TString strsg(Form("Significance (Li/Ma) = %4.2f",siglima));
|
---|
447 | pt->AddText(strsg.Data());
|
---|
448 |
|
---|
449 | cout<<"results for events with alpha < "<<acut<<" degrees :"<<endl;
|
---|
450 | cout<<" nbackground = "<<nOffScaled<<endl;
|
---|
451 | cout<<" theta = "<<theta<<endl;
|
---|
452 | cout<<" nsignal = "<<nSig<<endl;
|
---|
453 | cout<<" sig. (Li/Ma) = "<<siglima<<endl;
|
---|
454 | cout<<" sig.-std = "<<sigstd<<endl;
|
---|
455 | pt->Draw();
|
---|
456 | gPad->SetGridx();
|
---|
457 | gPad->SetGridy();
|
---|
458 |
|
---|
459 | c->Update();
|
---|
460 |
|
---|
461 | cout<<endl<<"Optimized Cuts:"<<endl;
|
---|
462 | cout<<" "<<DistLo<<" < dist <"<<DistUp<<endl;
|
---|
463 | cout<<" "<<WidthLo<<" < width <"<<WidthUp<<endl;
|
---|
464 | cout<<" "<<LengthLo<<" < length <"<<LengthUp<<endl;
|
---|
465 |
|
---|
466 | return;
|
---|
467 | }
|
---|
468 |
|
---|