14 #if !defined(__CINT__) || defined(__MAKECINT__) 17 #include <TDirectoryFile.h> 35 #include <TGraphErrors.h> 60 TString histoName =
"SMM02NoCut",
71 Int_t color[] = {1,4,2,kYellow-2,8,kCyan,kOrange+2,kViolet,kOrange-2,4,2,6,8,9,kYellow-6,kCyan,kOrange+2,kViolet,kOrange-2};
76 if ( histoName.Contains(
"SMM02") )
81 if ( histoName ==
"SMNCell" && !histoName.Contains(
"Module") )
86 if ( histoName.Contains(
"SMM20Low") )
88 xmin = 0.05; xmax = 0.25;
90 if ( histoName.Contains(
"SMM20Hig") )
92 xmin = 0.05; xmax = 0.30;
94 if ( histoName.Contains(
"Module") )
96 xmin = 0.0; xmax = 100000;
100 TFile *
file = TFile::Open(Form(
"figures/%s/Projections_%s.root",histoName.Data(),inputFileName.Data()));;
107 binEErr[ie] = (
binE.At(ie+1)-
binE.At(ie))/2;
112 for(
Int_t iprod = 0; iprod < nProd-1; iprod++)
114 prodParamE[iprod] = (prodParam.At(iprod+1)-prodParam.At(iprod))/2;
115 if ( debug ) printf(
"mc iprod %d: param %2.5f, next %2.5f, err %2.5f\n",
116 iprod,prodParam.At(iprod),prodParam.At(iprod+1),prodParamE[iprod]);
118 prodParamE[
nProd] = prodParamE[nProd-1];
123 printf(
"N MC prod %d N e bins %d, nSM %d\n", nProd, nEBins, nSM);
135 hData[iebin][ism-firstSM] = (
TH1D *) file->Get(Form(
"Prod%d_Ebin%d_Param%d",dataProd,iebin,ism));
137 hData[iebin][ism-firstSM]->Rebin(
rebin);
139 printf(
"data ie %d, ism %d, %p\n",iebin,ism,hData[iebin][ism-firstSM]);
141 hSimu[dataProd][iebin][ism-firstSM] = 0;
144 hSimu[iprod][iebin][ism-firstSM] = (
TH1D *) file->Get(Form(
"Prod%d_Ebin%d_Param%d",iprod+dataProd+1,iebin,ism));
146 hSimu[iprod][iebin][ism-firstSM]->Rebin(
rebin);
149 printf(
"mc %d ie %d, ism %d, %p\n",iprod,iebin,ism,hSimu[iprod][iebin][ism-firstSM]);
163 printf(
"Make Chi2 distributions");
171 hChi2[iprod][iebin][ism-firstSM] =0;
172 hDiff[iprod][iebin][ism-firstSM] = 0;
175 printf(
"prod %d, ebin %d, sm %d\n",iprod,iebin,ism);
177 Chi2(hSimu[iprod][iebin][ism-firstSM],hData[iebin][ism-firstSM],
178 hChi2[iprod][iebin][ism-firstSM],hDiff[iprod][iebin][ism-firstSM], debug);
181 printf(
"\t %p %p\n",hChi2[iprod][iebin][ism-firstSM],hDiff[iprod][iebin][ism-firstSM]);
183 if(hChi2[iprod][iebin][ism-firstSM])hChi2[iprod][iebin][ism-firstSM]->SetTitle(Form(
"SM = %d",ism));
184 if(hDiff[iprod][iebin][ism-firstSM])hDiff[iprod][iebin][ism-firstSM]->SetTitle(Form(
"SM = %d",ism));
196 if ( debug ) printf(
"Plot Chi2-Diff\n");
206 if ( debug ) printf(
"iebin %d",iebin);
208 gStyle->SetOptTitle(1);
209 gStyle->SetPadTopMargin(0.1);
213 TCanvas * cchi2 =
new TCanvas
214 (Form(
"cchi2_ebin%d_%s",iebin,histoName.Data()),
215 Form(
"Chi2 %2.1f < E < %2.1f, %s",
binE[iebin],
binE[iebin+1],histoName.Data()),
216 ncol*2000,nrow*2000);
218 cchi2->Divide(ncol,nrow);
220 TLegend *l =
new TLegend(-0.04,0,1,1);
225 l->SetTextSize(0.07);
226 if((histoName.Contains(
"MM02") || histoName.Contains(
"MM20")) && !histoName.Contains(
"NoCut") )
227 l->SetHeader(Form(
" %2.1f < #it{E} < %2.1f GeV, #it{n}^{w}_{cells} > 4",
binE[iebin],
binE[iebin+1]));
229 l->SetHeader(Form(
" %2.1f < #it{E} < %2.1f GeV",
binE[iebin],
binE[iebin+1]));
238 if ( debug ) printf(
"iE %d ism %d\n",iebin,ism);
239 if ( !hData[iebin][ism-firstSM] )
continue;
244 printf(
"\t Chi2 prod %d %p %p\n",iprod,hChi2[iprod][iebin][ism-firstSM],hDiff[iprod][iebin][ism-firstSM]);
246 if(!hChi2[iprod][iebin][ism-firstSM])
continue;
248 hChi2[iprod][iebin][ism-firstSM]->SetTitleOffset(1.8,
"Y");
249 hChi2[iprod][iebin][ism-firstSM]->SetYTitle(
"(x_{simu}-x_{Data})^{2}/(#sigma_{x,simu}^{2}+#sigma_{x,data}^{2})");
254 if(iprod==1) hChi2[iprod][iebin][ism-firstSM]->Draw(
"H");
255 else hChi2[iprod][iebin][ism-firstSM]->Draw(
"H same");
258 hChi2[iprod][iebin][ism-firstSM]->SetMinimum(1e-2);
259 if(hChi2[1][iebin][ism-firstSM] && hChi2[iprod][iebin][ism-firstSM]->GetMaximum() > hChi2[1][iebin][ism-firstSM]->GetMaximum())
260 hChi2[1][iebin][ism-firstSM]->SetMaximum(hChi2[iprod][iebin][ism-firstSM]->GetMaximum()*1.2);
263 l->AddEntry(hChi2[iprod][iebin][ism-firstSM],Form(
"%f",prodParam[iprod]),
"PL");
267 cchi2->cd(ncol*nrow);
270 fileName = Form(
"figures/%s/Comparison_Chi2_Ebin%d_%s",
271 histoName.Data(),iebin,inputFileName.Data());
273 cchi2->Print(fileName);
277 TCanvas * cdiff =
new TCanvas(Form(
"cdiff_ebin%d_%s",
278 iebin,histoName.Data()),
279 Form(
"MC-Data %2.1f < E < %2.1f, %s",
282 ncol*2000,nrow*2000);
283 cdiff->Divide(ncol,nrow);
299 if( debug ) printf(
"iE %d ism %d\n",iebin,ism);
300 if ( !hData[iebin][ism-firstSM] )
continue;
305 printf(
"\t Diff A prod %d %p\n",iprod,hDiff[iprod][iebin][ism-firstSM]);
307 if(!hDiff[iprod][iebin][ism-firstSM])
continue;
309 hDiff[iprod][iebin][ism-firstSM]->SetTitleOffset(1.8,
"Y");
313 hDiff[iprod][iebin][ism-firstSM]->SetYTitle(
"x_{simu}-x_{Data}");
319 if(iprod==1) hDiff[iprod][iebin][ism-firstSM]->Draw(
"H");
320 else hDiff[iprod][iebin][ism-firstSM]->Draw(
"H same");
324 if(hDiff[1][iebin][ism-firstSM] && hDiff[iprod][iebin][ism-firstSM]->GetMaximum() > hDiff[1][iebin][ism-firstSM]->GetMaximum())
325 hDiff[1][iebin][ism-firstSM]->SetMaximum(hDiff[iprod][iebin][ism-firstSM]->GetMaximum()*1.2);
332 cdiff->cd(ncol*nrow);
335 fileName = Form(
"figures/%s/Comparison_DiffMCData_Ebin%d_%s",
336 histoName.Data(),iebin,inputFileName.Data());
338 cdiff->Print(fileName);
347 if ( debug ) printf (
"Compare param\n");
349 const Int_t nX = hData[0][0]->GetNbinsX();
350 const Int_t nXbins = nX;
369 for(
Int_t ix = 0; ix < nXbins; ix++)
372 xaxisErr[ix] = hData[0][0]->GetBinWidth(ix+1)/2;
373 xaxis [ix] = hData[0][0]->GetBinCenter(ix+1);
385 for(
Int_t ix = 0; ix < nXbins; ix++)
395 if ( !hDiff[iprod][iebin][ism-firstSM] )
continue;
397 Double_t content = TMath::Abs(hDiff[iprod][iebin][ism-firstSM]->GetBinContent(ix+1));
398 if(min > content && iprod > 0)
401 yaxis[ix] = prodParam[iprod];
407 gDiffMin[iebin][ism-firstSM] =
new TGraphErrors(nXbins,xaxis,yaxis,xaxisErr,yaxisErr);
410 if ( hDiff[1][iebin][ism-firstSM] )
411 gDiffMin[iebin][ism-firstSM]->GetHistogram()->SetXTitle(hDiff[1][iebin][ism-firstSM]->GetXaxis()->GetTitle());
417 for(
Int_t iprod = 1; iprod < nProd-1; iprod++)
419 if ( !hChi2[iprod][iebin][ism-firstSM] )
continue;
421 Int_t minChi2Bin = hChi2[iprod][iebin][ism-firstSM]->FindBin(xmin);
422 Int_t maxChi2Bin = hChi2[iprod][iebin][ism-firstSM]->FindBin(xmax);
424 if ( maxChi2Bin-minChi2Bin > 0 )
426 chi2axis [iprod-1] = hChi2[iprod][iebin][ism-firstSM]->
427 IntegralAndError(minChi2Bin,maxChi2Bin,error)/(maxChi2Bin-minChi2Bin);
428 chi2axisErr[iprod-1] = error / (maxChi2Bin-minChi2Bin);
435 chi2axis [iprod-1] = 0;
436 chi2axisErr[iprod-1] = 0;
439 if ( minChi2SM > chi2axis[iprod-1] )
441 minChi2SM = chi2axis[iprod-1];
442 chi2axisMin [iebin] = prodParam[iprod-1];
444 chi2axisMinErr[iebin] = 0.1;
449 (nProd,prodParam.GetArray(),chi2axis,prodParamE,chi2axisErr);
450 gChi2[iebin][ism-firstSM]->GetHistogram()->SetXTitle(
"#mu_{1} (%)");
455 gChi2Min[ism-firstSM]->GetHistogram()->SetXTitle(
"E_{cluster} (GeV)");
463 printf(
"Plot Diff Graphs!\n");
467 TCanvas * cDiffgraph =
new TCanvas(Form(
"cDiff_graph_%s",
471 ncol*2000,nrow*2000);
472 cDiffgraph->Divide(ncol,nrow);
474 TLegend *lg =
new TLegend(-0.04,0,1,1);
478 lg->SetBorderSize(0);
479 lg->SetTextSize(0.07);
483 cDiffgraph->cd(ism+1);
490 if(!gDiffMin[
firstEbin][ism-firstSM])
continue;
495 if(!gDiffMin[iebin][ism-firstSM])
continue;
497 gDiffMin[iebin][ism-firstSM]->SetMarkerColor(color[iebin]);
498 gDiffMin[iebin][ism-firstSM]->SetLineColor (color[iebin]);
499 gDiffMin[iebin][ism-firstSM]->SetMarkerStyle(24);
500 gDiffMin[iebin][ism-firstSM]->SetMarkerSize(3);
502 gDiffMin[iebin][ism-firstSM]->GetHistogram()->SetTitleOffset(1.8,
"Y");
507 gDiffMin[iebin][ism-firstSM]->GetHistogram()->SetYTitle(
"#mu_{1} %");
508 gDiffMin[iebin][ism-firstSM]->SetTitle(Form(
"SM %d",ism));
515 gDiffMin[iebin][ism-firstSM]->Draw(
"APL");
517 gDiffMin[iebin][ism-firstSM]->Draw(
"PL");
519 gDiffMin[iebin][ism-firstSM]->SetMaximum(2);
520 gDiffMin[iebin][ism-firstSM]->SetMinimum(-0.1);
526 lg->AddEntry(gDiffMin[iebin][ism-firstSM],
527 Form(
"%2.1f < #it{E} < %2.1f GeV",
binE[iebin],
binE[iebin+1]),
"PL");
535 cDiffgraph->cd(ncol*nrow);
538 fileName = Form(
"figures/%s/Comparison_MinDiff_PerSM_Ebin_%s",
539 histoName.Data(),inputFileName.Data());
541 cDiffgraph->Print(fileName);
545 TCanvas * cDiffgraph2 =
new TCanvas(Form(
"cMinDiff_graph2_%s",
550 cDiffgraph2->Divide(3,2);
552 TLegend *lg2 =
new TLegend(-0.04,0,1,1);
553 lg2->SetFillColor(0);
554 lg2->SetFillStyle(0);
555 lg2->SetLineColor(0);
556 lg2->SetBorderSize(0);
557 lg2->SetTextSize(0.07);
560 cDiffgraph2->cd(iebin-2);
566 if(!gDiffMin[iebin][0])
continue;
571 if(!gDiffMin[iebin][ism-firstSM])
continue;
573 gDiffMin[iebin][ism-firstSM]->SetMarkerColor(color[ism-firstSM]);
574 gDiffMin[iebin][ism-firstSM]->SetLineColor (color[ism-firstSM]);
575 gDiffMin[iebin][ism-firstSM]->SetMarkerStyle(24);
576 gDiffMin[iebin][ism-firstSM]->SetMarkerSize(3);
578 gDiffMin[iebin][ism-firstSM]->GetHistogram()->SetTitleOffset(1.8,
"Y");
583 gDiffMin[iebin][ism-firstSM]->GetHistogram()->SetYTitle(
"#mu_{1} %");
585 gDiffMin[iebin][ism-firstSM]->SetTitle(Form(
"%2.1f < #it{E} < %2.1f GeV",
binE[iebin],
binE[iebin+1]));
591 gDiffMin[iebin][ism-firstSM]->Draw(
"APL");
593 gDiffMin[iebin][ism-firstSM]->Draw(
"PL");
595 gDiffMin[iebin][ism-firstSM]->SetMaximum(2);
596 gDiffMin[iebin][ism-firstSM]->SetMinimum(-0.1);
602 lg2->AddEntry(gDiffMin[iebin][ism-firstSM],(Form(
"SM %d",ism)),
"PL");
613 fileName = Form(
"figures/%s/Comparison_MinDiff_PerEBin_SM_%s",
614 histoName.Data(),inputFileName.Data());
616 cDiffgraph2->Print(fileName);
622 printf(
"Plot Chi2 Graphs!\n");
626 TCanvas * gChi2graph =
new TCanvas(Form(
"cChi2_graph_%s",
630 ncol*2000,nrow*2000);
631 gChi2graph->Divide(ncol,nrow);
633 TLegend *lgchi2 =
new TLegend(-0.04,0,1,1);
634 lgchi2->SetFillColor(0);
635 lgchi2->SetFillStyle(0);
636 lgchi2->SetLineColor(0);
637 lgchi2->SetBorderSize(0);
638 lgchi2->SetTextSize(0.07);
642 gChi2graph->cd(ism+1);
649 if(!gChi2[
firstEbin][ism-firstSM])
continue;
654 if(!gChi2[iebin][ism-firstSM])
continue;
656 gChi2[iebin][ism-firstSM]->SetMarkerColor(color[iebin]);
657 gChi2[iebin][ism-firstSM]->SetLineColor (color[iebin]);
658 gChi2[iebin][ism-firstSM]->SetMarkerStyle(24);
659 gChi2[iebin][ism-firstSM]->SetMarkerSize(3);
661 gChi2[iebin][ism-firstSM]->GetHistogram()->SetTitleOffset(1.6,
"Y");
666 gChi2[iebin][ism-firstSM]->GetHistogram()->SetYTitle(
"#chi^{2} / #nu");
667 gChi2[iebin][ism-firstSM]->SetTitle(Form(
"SM %d",ism));
674 gChi2[iebin][ism-firstSM]->Draw(
"APL");
676 gChi2[iebin][ism-firstSM]->Draw(
"PL");
678 gChi2[iebin][ism-firstSM]->SetMaximum(200);
679 gChi2[iebin][ism-firstSM]->SetMinimum(0.25);
685 lgchi2->AddEntry(gChi2[iebin][ism-firstSM],
686 Form(
"%2.1f < #it{E} < %2.1f GeV",
binE[iebin],
binE[iebin+1]),
"PL");
694 gChi2graph->cd(ncol*nrow);
697 fileName = Form(
"figures/%s/Comparison_Chi2_PerSM_Ebin_%s",
698 histoName.Data(),inputFileName.Data());
700 gChi2graph->Print(fileName);
704 TCanvas * gChi2Mingraph =
new TCanvas(Form(
"cChi2Min_graph_%s",
708 ncol*2000,nrow*2000);
709 gChi2Mingraph->Divide(ncol,nrow);
711 TLegend *lgChi2Min =
new TLegend(-0.04,0,1,1);
712 lgChi2Min->SetFillColor(0);
713 lgChi2Min->SetFillStyle(0);
714 lgChi2Min->SetLineColor(0);
715 lgChi2Min->SetBorderSize(0);
716 lgChi2Min->SetTextSize(0.07);
720 gChi2Mingraph->cd(ism+1);
726 if(!gChi2Min[ism-firstSM])
continue;
729 if(!gChi2Min[ism-firstSM])
continue;
731 gChi2Min[ism-firstSM]->SetMarkerColor(color[ism-firstSM]);
732 gChi2Min[ism-firstSM]->SetLineColor (color[ism-firstSM]);
733 gChi2Min[ism-firstSM]->SetMarkerStyle(24);
734 gChi2Min[ism-firstSM]->SetMarkerSize(3);
736 gChi2Min[ism-firstSM]->GetHistogram()->SetTitleOffset(1.8,
"Y");
741 gChi2Min[ism-firstSM]->GetHistogram()->SetYTitle(
"#mu_{1} (%)");
742 gChi2Min[ism-firstSM]->SetTitle(Form(
"SM %d",ism));
749 gChi2Min[ism-firstSM]->Draw(
"APL");
751 gChi2Min[ism-firstSM]->SetMaximum(1.7);
752 gChi2Min[ism-firstSM]->SetMinimum(-0.1);
756 gChi2Mingraph->cd(ncol*nrow);
759 fileName = Form(
"figures/%s/Comparison_Chi2Min_PerSM_Ebin_%s",
760 histoName.Data(),inputFileName.Data());
762 gChi2Mingraph->Print(fileName);
765 TString inputFileName2 = inputFileName;
766 inputFileName2.ReplaceAll(
"ForChi2",
"");
768 TFile*
fout =
new TFile(Form(
"figures/%s/Chi2Distributions_%s_PerSM_Ebin.root",
769 histoName.Data(),inputFileName2.Data()),
"recreate");
772 gChi2Min[ism-firstSM]->SetName(Form(
"Chi2Min_SM%d",ism));
773 gChi2Min[ism-firstSM]->Write();
776 gChi2[iebin][ism-firstSM]->SetName(Form(
"Chi2_SM%d_EBin%d",ism,iebin));
777 gChi2[iebin][ism-firstSM]->SetTitle(Form(
"%2.1f < #it{E} < %2.1f GeV",
binE[iebin],
binE[iebin+1]));
778 gChi2[iebin][ism-firstSM]->Write();
796 if ( !h || !hD ) return ;
798 hChi2 = (
TH1D*) h->Clone(Form(
"%s_Chi2",h->GetName()));
799 hDiff = (
TH1D*) h->Clone(Form(
"%s_Diff",h->GetName()));
803 for(
Int_t ibin = 1; ibin < h->GetNbinsX(); ibin++)
806 Double_t content = h ->GetBinContent(ibin);
807 Double_t contentD = hD->GetBinContent(ibin);
811 Double_t econtent2 = h->GetBinError(ibin);
812 Double_t econtent2D = hD->GetBinError(ibin);
814 Double_t esum = econtent2D+econtent2;
817 econtent2 *=econtent2;
818 econtent2D*=econtent2D;
820 Double_t esum2 = econtent2D+econtent2;
824 if(debug) printf(
"ibin %d, value2 %e, esum %e\n",ibin,value2,esum2);
826 hDiff->SetBinContent(ibin,content-contentD);
827 hDiff->SetBinError (ibin,h->GetBinError(ibin)+hD->GetBinError(ibin));
833 printf(
"\t ibin %d, x %2.2f, vS %2.4f, vD %2.4f, |vS-vD| %2.4e |vS-vD|^2 %2.4e, Err|vS-vD|^2 %2.4e\n",
834 ibin, hD->GetBinCenter(ibin), content, contentD, TMath::Abs(content-contentD),value2,esum);
836 hChi2->SetBinContent(ibin,value2);
837 hChi2->SetBinError(ibin,esum);
841 hChi2->SetBinContent(ibin,0);
842 hChi2->SetBinError(ibin,0);
843 hDiff->SetBinContent(ibin,0);
844 hDiff->SetBinError(ibin,0);
849 printf(
"\t func %p %p\n",hChi2,hDiff);
Int_t color[]
print message on plot with ok/not ok
void CalculateParamChi2MCxTalkDataPerSM(TString histoName="SMM02NoCut", TString inputFileName="", Int_t dataProd=0, Int_t firstSM=0, Int_t lastSM=9, TArrayD binE=0, TArrayD prodParam=0, Int_t rebin=1, Bool_t debug=kFALSE)
void Chi2(TH1D *h, TH1D *hD, TH1D *&hChi2, TH1D *&hDiff, Bool_t debug=kFALSE)
TFile * file
TList with histograms for a given trigger.
void GetCanvasColRowNumber(Int_t npad, Int_t &ncol, Int_t &nrow, Bool_t square=kFALSE)
TFile * fout
input train file