File indexing completed on 2024-04-06 11:59:13
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029 #include "TCanvas.h"
0030 #include "TDirectory.h"
0031 #include "TF1.h"
0032 #include "TFile.h"
0033 #include "TFitResult.h"
0034 #include "TGraph.h"
0035 #include "TGraphAsymmErrors.h"
0036 #include "TH1D.h"
0037 #include "TH2D.h"
0038 #include "THStack.h"
0039 #include "TLegend.h"
0040 #include "TMath.h"
0041 #include "TProfile.h"
0042 #include "TPaveStats.h"
0043 #include "TPaveText.h"
0044 #include "TROOT.h"
0045 #include "TString.h"
0046 #include "TStyle.h"
0047
0048 #include <iostream>
0049 #include <iomanip>
0050 #include <vector>
0051 #include <string>
0052
0053 TH1D* getEffi(TFile* file, std::string varname, unsigned int ifl);
0054 TCanvas* plotEffi(int type, bool approve);
0055 TCanvas* plotEffiRatio(int type, bool approve);
0056 void plotEffiAll(bool approve = true, bool ratio = true, int savePlot = 2);
0057 void plotCompare(const char* infile1,
0058 const char* text1,
0059 const char* infile2,
0060 const char* text2,
0061 int type1 = -1,
0062 int type2 = -1,
0063 int type3 = -1,
0064 bool ratio = false,
0065 bool logy = true,
0066 std::string postfix = "",
0067 bool save = false,
0068 bool normalize = false);
0069 void plotCompareAll(std::string cdir1 = "11.0.r06.g4",
0070 std::string cdir2 = "11.0.r06.vg",
0071 std::string cvers = "11.0.r06 MinBias",
0072 std::string cfil1 = "minbias.root",
0073 std::string cfil2 = "minbias.root",
0074 std::string ctype1 = "Native",
0075 std::string ctype2 = "VecGeom v1.1.20",
0076 std::string postfix = "MBR",
0077 bool ratio = false,
0078 bool logy = true,
0079 bool save = true,
0080 bool norm = true);
0081
0082 int markStyle[7] = {23, 22, 24, 25, 21, 33, 20};
0083 int colors[7] = {2, 4, 6, 7, 46, 3, 1};
0084 int lineStyle[7] = {1, 2, 3, 4, 1, 2, 3};
0085
0086
0087
0088
0089
0090
0091
0092
0093
0094
0095
0096
0097 const unsigned int nmodels = 5;
0098 std::string filem[nmodels] = {"pikp/FBE4p3vMixStudyHLT.root",
0099 "pikp/FBE7p02vMixStudyHLT.root",
0100 "pikp/FBE110p01vMixStudyHLT.root",
0101 "pikp/FBE110r04MixStudyHLT.root",
0102 "pikp/FBE110r06vMixStudyHLT.root"};
0103 std::string typem[nmodels] = {"10.4.p03 FTFP_BERT_EMM",
0104 "10.7.p01 FTFP_BERT_EMM",
0105 "11.0.p01 FTFP_BERT_EMM",
0106 "11.0.ref04 FTFP_BERT_EMM",
0107 "11.0.ref06 FTFP_BERT_EMM"};
0108
0109 TH1D* getEffi(TFile* file, std::string varname, unsigned int ifl) {
0110 char name[100];
0111 sprintf(name, "h_%s_All_0", varname.c_str());
0112 TH1D* hist1 = (TH1D*)file->FindObjectAny(name);
0113 sprintf(name, "h_%s_All_1", varname.c_str());
0114 TH1D* hist2 = (TH1D*)file->FindObjectAny(name);
0115 if (hist1 && hist2) {
0116 sprintf(name, "h_%s_Effy_%d", varname.c_str(), ifl);
0117 int nbins = hist1->GetNbinsX();
0118 double xl = hist1->GetBinLowEdge(1);
0119 double xh = hist1->GetBinLowEdge(nbins) + hist1->GetBinWidth(nbins);
0120 TH1D* hist = new TH1D(name, hist1->GetTitle(), nbins, xl, xh);
0121 for (int i = 1; i < nbins; ++i) {
0122 double den = hist1->GetBinContent(i);
0123 double val = (den > 0) ? (hist2->GetBinContent(i)) / den : 0;
0124 double err = (den > 0) ? (hist1->GetBinError(i)) * (val / den) : 0;
0125 hist->SetBinContent(i, val);
0126 hist->SetBinError(i, err);
0127 }
0128 return hist;
0129 } else {
0130 return 0;
0131 }
0132 }
0133
0134 TCanvas* plotEffi(int type, bool approve) {
0135 std::string varnam[4] = {"pt", "p", "eta", "phi"};
0136 std::string xvtitl[4] = {"p_{T} (GeV)", "p (GeV)", "#eta", "#phi"};
0137 bool irng[4] = {true, true, true, false};
0138 double xlowr[4] = {0.0, 0.0, -2.2, -3.1415926};
0139 double xtopr[4] = {20.0, 20.0, 2.2, 3.1415926};
0140
0141 TCanvas* c(0);
0142 if (type < 0 || type > 3)
0143 type = 0;
0144 TObjArray histArr;
0145 for (unsigned k = 0; k < nmodels; ++k) {
0146 TFile* file = TFile::Open(filem[k].c_str());
0147 TH1D* hist = getEffi(file, varnam[type], k);
0148 if (hist) {
0149 hist->GetXaxis()->SetTitle(xvtitl[type].c_str());
0150 hist->GetYaxis()->SetTitle("Efficiency");
0151 if (irng[type])
0152 hist->GetXaxis()->SetRangeUser(xlowr[type], xtopr[type]);
0153 histArr.AddLast(hist);
0154 }
0155 }
0156 if (histArr.GetEntries() > 0) {
0157 gStyle->SetCanvasBorderMode(0);
0158 gStyle->SetCanvasColor(kWhite);
0159 gStyle->SetPadColor(kWhite);
0160 gStyle->SetFillColor(kWhite);
0161 gStyle->SetOptTitle(kFALSE);
0162 gStyle->SetPadBorderMode(0);
0163 gStyle->SetCanvasBorderMode(0);
0164 gStyle->SetOptStat(0);
0165
0166 char cname[50];
0167 sprintf(cname, "c_%sEff", varnam[type].c_str());
0168 c = new TCanvas(cname, cname, 500, 500);
0169 gPad->SetTopMargin(0.10);
0170 gPad->SetBottomMargin(0.10);
0171 gPad->SetLeftMargin(0.15);
0172 gPad->SetRightMargin(0.025);
0173
0174 TLegend* legend = new TLegend(0.30, 0.15, 0.975, 0.30);
0175 TPaveText* text1 = new TPaveText(0.05, 0.94, 0.35, 0.99, "brNDC");
0176 legend->SetBorderSize(1);
0177 legend->SetFillColor(kWhite);
0178 char texts[200];
0179 sprintf(texts, "CMS Preliminary");
0180 text1->AddText(texts);
0181 THStack* Hs = new THStack("hs2", " ");
0182 for (int i = 0; i < histArr.GetEntries(); i++) {
0183 TH1D* h = (TH1D*)histArr[i];
0184 h->SetLineColor(colors[i]);
0185 h->SetLineWidth(2);
0186 h->SetMarkerSize(markStyle[i]);
0187 Hs->Add(h, "hist sames");
0188 legend->AddEntry(h, typem[i].c_str(), "l");
0189 }
0190 Hs->Draw("nostack");
0191 c->Update();
0192 Hs->GetHistogram()->GetXaxis()->SetTitle(xvtitl[type].c_str());
0193 Hs->GetHistogram()->GetXaxis()->SetLabelSize(0.035);
0194 Hs->GetHistogram()->GetYaxis()->SetTitleOffset(1.6);
0195 Hs->GetHistogram()->GetYaxis()->SetTitle("Track Reconstruction Efficiency");
0196 Hs->GetHistogram()->GetYaxis()->SetRangeUser(0.0, 1.2);
0197 if (irng[type])
0198 Hs->GetHistogram()->GetXaxis()->SetRangeUser(xlowr[type], xtopr[type]);
0199 c->Modified();
0200 c->Update();
0201 legend->Draw("");
0202 if (approve)
0203 text1->Draw("same");
0204 c->Modified();
0205 c->Update();
0206 }
0207 return c;
0208 }
0209
0210 TCanvas* plotEffiRatio(int type, bool approve) {
0211 std::string varnam[4] = {"pt", "p", "eta", "phi"};
0212 std::string xvtitl[4] = {"p_{T} (GeV)", "p (GeV)", "#eta", "#phi"};
0213 bool irng[4] = {true, true, true, false};
0214 double xlowr[4] = {0.0, 0.0, -2.2, -3.1415926};
0215 double xtopr[4] = {20.0, 20.0, 2.2, 3.1415926};
0216
0217 TCanvas* c(0);
0218 if (type < 0 || type > 3)
0219 type = 0;
0220 TObjArray histArr;
0221 TH1D* hist0(0);
0222 for (unsigned k = 0; k < nmodels; ++k) {
0223 TFile* file = TFile::Open(filem[k].c_str());
0224 TH1D* hist = getEffi(file, varnam[type], k);
0225 if (hist) {
0226 if (hist0 == nullptr) {
0227 hist0 = hist;
0228 } else {
0229 int nbin = hist->GetNbinsX();
0230 int npt1(0), npt2(0);
0231 double sumNum(0), sumDen(0);
0232 for (int i = 1; i < nbin; ++i) {
0233 double val1 = hist->GetBinContent(i);
0234 double err1 = (val1 > 0) ? ((hist->GetBinError(i)) / val1) : 0;
0235 double val2 = hist0->GetBinContent(i);
0236 double err2 = (val2 > 0) ? ((hist0->GetBinError(i)) / val2) : 0;
0237 double ratio = (val2 > 0) ? (val1 / val2) : 0;
0238 double drat = ratio * sqrt(err1 * err1 + err2 * err2);
0239 if ((((hist->GetBinLowEdge(i)) >= xlowr[type]) &&
0240 ((hist->GetBinLowEdge(i) + hist->GetBinWidth(i)) <= xtopr[type])) ||
0241 (!irng[type])) {
0242 ++npt1;
0243 if (val2 > 0) {
0244 double temp1 = (ratio > 1.0) ? 1.0 / ratio : ratio;
0245 double temp2 = (ratio > 1.0) ? drat / (ratio * ratio) : drat;
0246 sumNum += (fabs(1 - temp1) / (temp2 * temp2));
0247 sumDen += (1.0 / (temp2 * temp2));
0248 ++npt2;
0249 }
0250 }
0251 hist->SetBinContent(i, ratio);
0252 hist->SetBinError(i, drat);
0253 }
0254 sumNum = (sumDen > 0) ? (sumNum / sumDen) : 0;
0255 sumDen = (sumDen > 0) ? 1.0 / sqrt(sumDen) : 0;
0256 std::cout << "Get Ratio of mean for " << npt2 << ":" << npt1 << ":" << nbin << " points: Mean " << sumNum
0257 << " +- " << sumDen << " from " << filem[k] << std::endl;
0258 hist->GetXaxis()->SetTitle(xvtitl[type].c_str());
0259 hist->GetYaxis()->SetTitle("Efficiency Ratio");
0260 hist->GetYaxis()->SetRangeUser(0.8, 1.2);
0261 if (irng[type])
0262 hist->GetXaxis()->SetRangeUser(xlowr[type], xtopr[type]);
0263 histArr.AddLast(hist);
0264 }
0265 }
0266 }
0267
0268 if (histArr.GetEntries() > 0) {
0269 gStyle->SetCanvasBorderMode(0);
0270 gStyle->SetCanvasColor(kWhite);
0271 gStyle->SetPadColor(kWhite);
0272 gStyle->SetFillColor(kWhite);
0273 gStyle->SetOptTitle(kFALSE);
0274 gStyle->SetPadBorderMode(0);
0275 gStyle->SetCanvasBorderMode(0);
0276 gStyle->SetOptStat(0);
0277
0278 char cname[50];
0279 sprintf(cname, "c_%sEffRat", varnam[type].c_str());
0280 c = new TCanvas(cname, cname, 500, 500);
0281 gPad->SetTopMargin(0.10);
0282 gPad->SetBottomMargin(0.10);
0283 gPad->SetLeftMargin(0.15);
0284 gPad->SetRightMargin(0.025);
0285
0286 TLegend* legend = new TLegend(0.30, 0.15, 0.975, 0.30);
0287 TPaveText* text1 = new TPaveText(0.05, 0.94, 0.35, 0.99, "brNDC");
0288 legend->SetBorderSize(1);
0289 legend->SetFillColor(kWhite);
0290 char texts[200];
0291 sprintf(texts, "CMS Preliminary");
0292 text1->AddText(texts);
0293 THStack* Hs = new THStack("hs2", " ");
0294 for (int i = 0; i < histArr.GetEntries(); i++) {
0295 TH1D* h = (TH1D*)histArr[i];
0296 h->SetLineColor(colors[i + 1]);
0297 h->SetLineWidth(2);
0298 h->SetMarkerSize(markStyle[i + 1]);
0299 Hs->Add(h, "hist sames");
0300 legend->AddEntry(h, typem[i + 1].c_str(), "l");
0301 }
0302 Hs->Draw("nostack");
0303 c->Update();
0304 Hs->GetHistogram()->GetXaxis()->SetTitle(xvtitl[type].c_str());
0305 Hs->GetHistogram()->GetXaxis()->SetLabelSize(0.035);
0306 Hs->GetHistogram()->GetYaxis()->SetTitleOffset(1.6);
0307 Hs->GetHistogram()->GetYaxis()->SetTitle("Track Reconstruction Efficiency Ratio");
0308 Hs->GetHistogram()->GetYaxis()->SetRangeUser(0.8, 1.2);
0309 if (irng[type])
0310 Hs->GetHistogram()->GetXaxis()->SetRangeUser(xlowr[type], xtopr[type]);
0311 c->Modified();
0312 c->Update();
0313 legend->Draw("");
0314 if (approve)
0315 text1->Draw("same");
0316 c->Modified();
0317 c->Update();
0318 }
0319 return c;
0320 }
0321
0322 void plotEffiAll(bool approve, bool ratio, int savePlot) {
0323 for (int var = 0; var <= 4; ++var) {
0324 TCanvas* c = (ratio) ? plotEffiRatio(var, approve) : plotEffi(var, approve);
0325 if (c != 0 && savePlot >= 0 && savePlot < 3) {
0326 std::string ext[3] = {"eps", "gif", "pdf"};
0327 char name[200];
0328 sprintf(name, "%s.%s", c->GetName(), ext[savePlot].c_str());
0329 c->Print(name);
0330 }
0331 }
0332 }
0333
0334 void plotCompare(const char* infile1,
0335 const char* text1,
0336 const char* infile2,
0337 const char* text2,
0338 int type1,
0339 int type2,
0340 int type3,
0341 bool ratio,
0342 bool logy,
0343 std::string postfix,
0344 bool save,
0345 bool normalize) {
0346 int ndets[4] = {1, 9, 9, 15};
0347 int types[4] = {7, 8, 2, 3};
0348 std::string htype0[7] = {"PtInc", "EneInc", "EtaInc", "PhiInc", "HitLow", "HitHigh", "HitMu"};
0349 int rebin0[7] = {1, 1, 1, 1, 10, 10, 10};
0350 std::string htype1[8] = {"Hit", "Time", "Edep", "Etot", "TimeAll", "EdepEM", "EdepHad", "EtotG"};
0351 int rebin1[8] = {10, 10, 100, 100, 10, 50, 50, 50};
0352 std::string htype2[2] = {"EdepCal", "EdepCalT"};
0353 int rebin2[2] = {50, 50};
0354 std::string htype3[3] = {"HitTk", "TimeTk", "EdepTk"};
0355 int rebin3[3] = {10, 10, 50};
0356 const double ymin(10.0);
0357
0358 gStyle->SetCanvasBorderMode(0);
0359 gStyle->SetCanvasColor(kWhite);
0360 gStyle->SetPadColor(kWhite);
0361 gStyle->SetFillColor(kWhite);
0362 gStyle->SetOptTitle(0);
0363 gStyle->SetOptFit(0);
0364 if (ratio || normalize)
0365 gStyle->SetOptStat(0);
0366 else
0367 gStyle->SetOptStat(1110);
0368
0369 int itmin1 = (type1 >= 0) ? type1 : 0;
0370 int itmax1 = (type1 >= 0) ? type1 : 3;
0371 TFile* file1 = new TFile(infile1);
0372 TFile* file2 = new TFile(infile2);
0373 std::cout << "File1: " << infile1 << ":" << file1 << " File2: " << infile2 << ":" << file2 << std::endl;
0374 if (file1 != 0 && file2 != 0) {
0375 for (int it1 = itmin1; it1 <= itmax1; ++it1) {
0376 int itmin2 = (type2 >= 0) ? type2 : 0;
0377 int itmax2 = (type2 >= 0) ? type2 : ((type1 == 1) ? 3 : types[it1] - 1);
0378 int itmin3 = (type3 >= 0) ? type3 : 0;
0379 int itmax3 = (type3 >= 0) ? type3 : ndets[it1] - 1;
0380 for (int it2 = itmin2; it2 <= itmax2; ++it2) {
0381 int rebin(1);
0382 if (it1 == 0)
0383 rebin = rebin0[it2];
0384 else if (it1 == 1)
0385 rebin = rebin1[it2];
0386 else if (it1 == 2)
0387 rebin = rebin2[it2];
0388 else if (it1 == 3)
0389 rebin = rebin3[it2];
0390 for (int it3 = itmin3; it3 <= itmax3; ++it3) {
0391 if (type1 == 1 && (it3 == 1 || it3 == 2))
0392 continue;
0393 char name[20], namec[22];
0394 if (it1 == 0)
0395 sprintf(name, "%s", htype0[it2].c_str());
0396 else if (it1 == 1)
0397 sprintf(name, "%s%d", htype1[it2].c_str(), it3);
0398 else if (it1 == 2)
0399 sprintf(name, "%s%d", htype2[it2].c_str(), it3);
0400 else
0401 sprintf(name, "%s%d", htype3[it2].c_str(), it3);
0402 TH1D* hist[2];
0403 hist[0] = (TH1D*)file1->FindObjectAny(name);
0404 hist[1] = (TH1D*)file2->FindObjectAny(name);
0405 std::cout << name << " Hist " << hist[0] << ":" << hist[1] << std::endl;
0406 if (hist[0] != 0 && hist[1] != 0) {
0407 sprintf(namec, "c_%s%s", name, postfix.c_str());
0408 TCanvas* pad = new TCanvas(namec, namec, 500, 500);
0409 pad->SetRightMargin(0.10);
0410 pad->SetTopMargin(0.10);
0411 if (logy)
0412 pad->SetLogy();
0413 double xedge = (ratio) ? 0.88 : 0.64;
0414 TLegend* legend = new TLegend(0.12, 0.79, xedge, 0.89);
0415 legend->SetFillColor(kWhite);
0416 if (ratio) {
0417 int nbin = hist[0]->GetNbinsX();
0418 int nbinX = nbin / rebin;
0419 sprintf(namec, "%sR", name);
0420 TH1D* hist0 = (TH1D*)gROOT->FindObjectAny(namec);
0421 if (hist0)
0422 hist0->Delete();
0423 double xlow = hist[0]->GetBinLowEdge(1);
0424 double xhigh = hist[0]->GetBinLowEdge(nbin) + hist[0]->GetBinWidth(nbin);
0425 hist0 = new TH1D(namec, hist[0]->GetTitle(), nbinX, xlow, xhigh);
0426 int npt1(0), npt2(0);
0427 double sumNum(0), sumDen(0);
0428 xhigh = hist0->GetBinLowEdge(1) + hist0->GetBinWidth(1);
0429 double fact = (hist[1]->GetEntries()) / (hist[0]->GetEntries());
0430 bool empty(false);
0431 for (int i = 1; i < nbinX; ++i) {
0432 double val1(0), err1(0), val2(0), err2(0);
0433 for (int j = 0; j < rebin; ++j) {
0434 int i1 = (i - 1) * rebin + j + 1;
0435 val1 += hist[0]->GetBinContent(i1);
0436 val2 += hist[1]->GetBinContent(i1);
0437 err1 += ((hist[0]->GetBinError(i1)) * (hist[0]->GetBinError(i1)));
0438 err2 += ((hist[1]->GetBinError(i1)) * (hist[1]->GetBinError(i1)));
0439 }
0440 err1 = (val1 > 0) ? (sqrt(err1) / val1) : 0;
0441 err2 = (val2 > 0) ? (sqrt(err2) / val2) : 0;
0442 double ratio = (((val1 > 0) && (val2 > 0)) ? fact * (val1 / val2) : 1);
0443 double drat = (((val1 > 0) && (val2 > 0)) ? (ratio * sqrt(err1 * err1 + err2 * err2)) : 0);
0444 ++npt1;
0445 if ((val1 > ymin) && (val2 > ymin)) {
0446 double temp1 = (ratio > 1.0) ? 1.0 / ratio : ratio;
0447 double temp2 = (ratio > 1.0) ? drat / (ratio * ratio) : drat;
0448 sumNum += (fabs(1 - temp1) / (temp2 * temp2));
0449 sumDen += (1.0 / (temp2 * temp2));
0450 ++npt2;
0451 }
0452 hist0->SetBinContent(i, ratio);
0453 hist0->SetBinError(i, drat);
0454 if (i <= 10)
0455 xhigh = (hist0->GetBinLowEdge(i) + hist0->GetBinWidth(i));
0456 else if (val1 > 0 && val2 > 0 && (!empty))
0457 xhigh = (hist0->GetBinLowEdge(i) + hist0->GetBinWidth(i));
0458 else if ((val1 <= 0 || val2 <= 0) && i > 10)
0459 empty = true;
0460 }
0461 sumNum = (sumDen > 0) ? (sumNum / sumDen) : 0;
0462 sumDen = (sumDen > 0) ? 1.0 / sqrt(sumDen) : 0;
0463 std::cout << "Get Ratio of mean for " << hist[0]->GetTitle() << " with " << npt2 << ":" << npt1 << ":"
0464 << nbinX << " points: Mean " << sumNum << " +- " << sumDen << std::endl;
0465 if (it1 == 0)
0466 sprintf(namec, "Ratio for %s", htype0[it2].c_str());
0467 else if (it1 == 1)
0468 sprintf(namec, "Ratio for %s", htype1[it2].c_str());
0469 else if (it1 == 2)
0470 sprintf(namec, "Ratio for %s", htype2[it2].c_str());
0471 else
0472 sprintf(namec, "Ratio for %s", htype3[it2].c_str());
0473 hist0->SetMarkerStyle(markStyle[0]);
0474 hist0->SetMarkerColor(colors[0]);
0475 hist0->SetLineStyle(lineStyle[0]);
0476 hist0->SetLineColor(colors[0]);
0477 hist0->GetXaxis()->SetTitle(hist[0]->GetTitle());
0478 hist0->GetXaxis()->SetRangeUser(xlow, xhigh);
0479 hist0->GetYaxis()->SetTitle(namec);
0480 hist0->GetYaxis()->SetRangeUser(0.0, 2.0);
0481 hist0->GetYaxis()->SetTitleOffset(1.3);
0482 sprintf(namec, "%s vs %s", text1, text2);
0483 legend->AddEntry(hist0, namec, "lp");
0484 hist0->Draw();
0485 pad->Update();
0486 TLine* line = new TLine(xlow, 1.0, xhigh, 1.0);
0487 line->SetLineWidth(2);
0488 line->SetLineStyle(2);
0489 line->Draw("same");
0490 TPaveText* text0 = new TPaveText(0.12, 0.12, 0.65, 0.17, "brNDC");
0491 char texts[200];
0492 sprintf(texts, "Mean Deviation = %5.3f #pm %5.3f", sumNum, sumDen);
0493 text0->SetFillColor(kWhite);
0494 text0->AddText(texts);
0495 text0->Draw("same");
0496 } else {
0497 double ymax(0.90), dy(0.08);
0498 for (int ih = 0; ih < 2; ++ih) {
0499 hist[ih]->GetXaxis()->SetTitle(hist[ih]->GetTitle());
0500 hist[ih]->SetMarkerStyle(markStyle[ih]);
0501 hist[ih]->SetMarkerColor(colors[ih]);
0502 hist[ih]->SetLineStyle(lineStyle[ih]);
0503 hist[ih]->SetLineColor(colors[ih]);
0504 hist[ih]->SetLineWidth(2);
0505 hist[ih]->GetYaxis()->SetTitleOffset(1.20);
0506 if (rebin > 1)
0507 hist[ih]->Rebin(rebin);
0508 if (ih == 0) {
0509 legend->AddEntry(hist[ih], text1, "lp");
0510 if (normalize)
0511 hist[ih]->DrawNormalized("hist");
0512 else
0513 hist[ih]->Draw();
0514 } else {
0515 legend->AddEntry(hist[ih], text2, "lp");
0516 if (normalize)
0517 hist[ih]->DrawNormalized("sames hist");
0518 else
0519 hist[ih]->Draw("sames");
0520 }
0521 pad->Update();
0522 TPaveStats* st1 = (TPaveStats*)hist[ih]->GetListOfFunctions()->FindObject("stats");
0523 if (st1 != NULL) {
0524 st1->SetLineColor(colors[ih]);
0525 st1->SetTextColor(colors[ih]);
0526 st1->SetY1NDC(ymax - dy);
0527 st1->SetY2NDC(ymax);
0528 st1->SetX1NDC(0.65);
0529 st1->SetX2NDC(0.90);
0530 ymax -= dy;
0531 }
0532 pad->Update();
0533 }
0534 }
0535 legend->Draw("same");
0536 pad->Update();
0537 if (save) {
0538 sprintf(name, "%s.pdf", pad->GetName());
0539 pad->Print(name);
0540 }
0541 }
0542 }
0543 }
0544 }
0545 }
0546 }
0547
0548 void plotCompareAll(std::string cdir1,
0549 std::string cdir2,
0550 std::string cvers,
0551 std::string cfil1,
0552 std::string cfil2,
0553 std::string ctype1,
0554 std::string ctype2,
0555 std::string postfix,
0556 bool ratio,
0557 bool logy,
0558 bool save,
0559 bool norm) {
0560 char infile1[200], infile2[200], text1[200], text2[200];
0561 sprintf(infile1, "%s/%s", cdir1.c_str(), cfil1.c_str());
0562 sprintf(infile2, "%s/%s", cdir2.c_str(), cfil2.c_str());
0563 sprintf(text1, "%s (%s)", cvers.c_str(), ctype1.c_str());
0564 sprintf(text2, "%s (%s)", cvers.c_str(), ctype2.c_str());
0565 plotCompare(infile1, text1, infile2, text2, 1, -1, 0, ratio, logy, postfix, save, norm);
0566 plotCompare(infile1, text1, infile2, text2, 1, -1, 3, ratio, logy, postfix, save, norm);
0567 plotCompare(infile1, text1, infile2, text2, 1, -1, 4, ratio, logy, postfix, save, norm);
0568 plotCompare(infile1, text1, infile2, text2, 1, -1, 5, ratio, logy, postfix, save, norm);
0569 plotCompare(infile1, text1, infile2, text2, 1, -1, 6, ratio, logy, postfix, save, norm);
0570 plotCompare(infile1, text1, infile2, text2, 1, -1, 7, ratio, logy, postfix, save, norm);
0571 plotCompare(infile1, text1, infile2, text2, 1, -1, 8, ratio, logy, postfix, save, norm);
0572 }