File indexing completed on 2024-04-06 12:29:48
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
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064
0065
0066
0067 #include <TCanvas.h>
0068 #include <TChain.h>
0069 #include <TFile.h>
0070 #include <TFitResult.h>
0071 #include <TFitResultPtr.h>
0072 #include <TGraphAsymmErrors.h>
0073 #include <TH1D.h>
0074 #include <TH2D.h>
0075 #include <TLegend.h>
0076 #include <TPaveStats.h>
0077 #include <TPaveText.h>
0078 #include <TProfile.h>
0079 #include <TROOT.h>
0080 #include <TStyle.h>
0081
0082 #include <fstream>
0083 #include <iomanip>
0084 #include <iostream>
0085 #include <string>
0086 #include <vector>
0087
0088 void setTDRStyle();
0089
0090 void makeGVPlots(std::string fname = "analG4.root",
0091 bool ifG4 = true,
0092 int todomin = 0,
0093 int todomax = 3,
0094 std::string tag = "",
0095 std::string text = "",
0096 bool save = false,
0097 std::string dirnm = "caloSimHitAnalysis") {
0098 std::string names[17] = {"EdepT",
0099 "TimeT",
0100 "Etot",
0101 "Edep15",
0102 "rz",
0103 "rz2",
0104 "etaphi",
0105 "Edep",
0106 "Time",
0107 "EdepT15",
0108 "EtotG",
0109 "EdepEM",
0110 "EdepHad",
0111 "rr",
0112 "zz",
0113 "eta",
0114 "phi"};
0115 std::string namex[17] = {"Edep",
0116 "Time",
0117 "Etot",
0118 "Edep15",
0119 "rz",
0120 "rz2",
0121 "etaphi",
0122 "EdepX",
0123 "TimeX",
0124 "EdepT15",
0125 "EtotG",
0126 "EdepEM",
0127 "EdepHad",
0128 "rr",
0129 "zz",
0130 "eta",
0131 "phi"};
0132 int types[17] = {1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
0133 int dets[4] = {0, 1, 2, 3};
0134 std::string detName[4] = {"EB", "EE", "HB", "HE"};
0135 std::string xtitle[17] = {"Energy deposit per Hit (GeV)",
0136 "Hit time (ns)",
0137 "Total energy deposit (GeV)",
0138 "Energy deposit (GeV) after 15 ns",
0139 "z (cm)",
0140 "z (cm)",
0141 "#eta",
0142 "Energy deposit (GeV)",
0143 "Time of Hit (ns)",
0144 "Energy deposit (GeV) per Hit after 15 ns",
0145 "Total energy deposit (GeV) in 100 ns",
0146 "Energy deposit (GeV) for EM particles",
0147 "Energy deposit (GeV) for non-EM particles",
0148 "R (cm)",
0149 "z (cm)",
0150 "#eta",
0151 "phi"};
0152 std::string ytitle[17] = {"Hits",
0153 "Hits",
0154 "Events",
0155 "Hits",
0156 "R (cm)",
0157 "R (cm)",
0158 "#phi",
0159 "Hits",
0160 "Hits",
0161 "Hits",
0162 "Events",
0163 "Hits",
0164 "Hits",
0165 "Hits",
0166 "Hits",
0167 "Hits",
0168 "Hits"};
0169
0170 gStyle->SetCanvasBorderMode(0);
0171 gStyle->SetCanvasColor(kWhite);
0172 gStyle->SetPadColor(kWhite);
0173 gStyle->SetFillColor(kWhite);
0174 gStyle->SetOptStat(111110);
0175 TFile *file = new TFile(fname.c_str());
0176 if (file) {
0177 TDirectory *dir = (TDirectory *)file->FindObjectAny(dirnm.c_str());
0178 char cname[100], name[100], name1[100], title[100];
0179 for (int i1 = 0; i1 < 4; ++i1) {
0180 for (int i2 = todomin; i2 <= todomax; ++i2) {
0181 if (types[i2] == 1) {
0182 sprintf(name, "%s%d", names[i2].c_str(), dets[i1]);
0183 sprintf(name1, "%s%d", namex[i2].c_str(), dets[i1]);
0184 if (ifG4)
0185 sprintf(title, "%s %s (Geant4 Simulation)", text.c_str(), detName[i1].c_str());
0186 else
0187 sprintf(title, "%s %s (GeantV Simulation)", text.c_str(), detName[i1].c_str());
0188 } else if (i1 == 0) {
0189 sprintf(name, "%s", names[i2].c_str());
0190 sprintf(name1, "%s", namex[i2].c_str());
0191 if (ifG4)
0192 sprintf(title, "%s (Geant4 Simulation)", text.c_str());
0193 else
0194 sprintf(title, "%s (GeantV Simulation)", text.c_str());
0195 } else {
0196 continue;
0197 }
0198 TH1D *hist1(nullptr);
0199 TH2D *hist2(nullptr);
0200 if (types[i2] == 1)
0201 hist1 = (TH1D *)dir->FindObjectAny(name);
0202 else
0203 hist2 = (TH2D *)dir->FindObjectAny(name);
0204
0205 if ((hist1 != nullptr) || (hist2 != nullptr)) {
0206 if (ifG4)
0207 sprintf(cname, "%sG4%s", name1, tag.c_str());
0208 else
0209 sprintf(cname, "%sGV%s", name1, tag.c_str());
0210 TCanvas *pad = new TCanvas(cname, cname, 500, 500);
0211 pad->SetRightMargin(0.10);
0212 pad->SetTopMargin(0.10);
0213 if (types[i2] == 1) {
0214 hist1->GetYaxis()->SetTitleOffset(1.2);
0215 hist1->GetYaxis()->SetTitle(ytitle[i2].c_str());
0216 hist1->GetXaxis()->SetTitle(xtitle[i2].c_str());
0217 hist1->SetTitle(title);
0218 pad->SetLogy();
0219 hist1->Draw();
0220 } else {
0221 hist2->GetYaxis()->SetTitleOffset(1.2);
0222 hist2->GetYaxis()->SetTitle(ytitle[i2].c_str());
0223 hist2->GetXaxis()->SetTitle(xtitle[i2].c_str());
0224 hist2->SetTitle(title);
0225 hist2->Draw();
0226 }
0227 pad->Update();
0228 TPaveStats *st1 = ((hist1 != nullptr) ? ((TPaveStats *)hist1->GetListOfFunctions()->FindObject("stats"))
0229 : ((TPaveStats *)hist2->GetListOfFunctions()->FindObject("stats")));
0230 if (st1 != NULL) {
0231 st1->SetY1NDC(0.70);
0232 st1->SetY2NDC(0.90);
0233 st1->SetX1NDC(0.65);
0234 st1->SetX2NDC(0.90);
0235 }
0236 pad->Modified();
0237 pad->Update();
0238 if (save) {
0239 sprintf(name, "c_%s.jpg", pad->GetName());
0240 pad->Print(name);
0241 }
0242 }
0243 }
0244 }
0245 }
0246 }
0247
0248 void makeGV2Plots(std::string fnmG4 = "analG4.root",
0249 std::string fnmGV = "analGV.root",
0250 int todomin = 0,
0251 int todomax = 2,
0252 bool normalize = true,
0253 std::string tag = "",
0254 std::string text = "",
0255 int save = 0,
0256 int modet = 0,
0257 int mode = 0,
0258 std::string dirnm = "caloSimHitAnalysis") {
0259 std::string names[14] = {"EdepT",
0260 "TimeT",
0261 "Etot",
0262 "Edep15",
0263 "Edep",
0264 "Time",
0265 "EdepT15",
0266 "EtotG",
0267 "EdepEM",
0268 "EdepHad",
0269 "rr",
0270 "zz",
0271 "eta",
0272 "phi"};
0273 std::string namex[14] = {"Edep",
0274 "Time",
0275 "Etot",
0276 "Edep15",
0277 "EdepX",
0278 "TimeX",
0279 "EdepT15",
0280 "EtotG",
0281 "EdepEM",
0282 "EdepHad",
0283 "rr",
0284 "zz",
0285 "eta",
0286 "phi"};
0287 int dets[4] = {0, 1, 2, 3};
0288 std::string detName[4] = {"EB", "EE", "HB", "HE"};
0289 std::string xtitle[14] = {"Energy deposit per Hit (GeV)",
0290 "Hit time (ns)",
0291 "Total energy deposit (GeV)",
0292 "Energy deposit (GeV) after 15 ns",
0293 "Energy deposit (GeV)",
0294 "Time of Hit (ns)",
0295 "Energy deposit (GeV) per Hit after 15 ns",
0296 "Total energy deposit (GeV) in 100 ns",
0297 "Energy deposit (GeV) for EM particles",
0298 "Energy deposit (GeV) for non-EM particles",
0299 "R (cm)",
0300 "z (cm)",
0301 "#eta",
0302 "phi"};
0303 std::string ytitle[14] = {"Hits",
0304 "Hits",
0305 "Events",
0306 "Hits",
0307 "Hits",
0308 "Hits",
0309 "Hits",
0310 "Events",
0311 "Hits",
0312 "Hits",
0313 "Hits",
0314 "Hits",
0315 "Hits",
0316 "Hits"};
0317 std::string title1[4] = {"2 GeV", "10 GeV", "50 GeV", "100 GeV"};
0318 std::string title2[2] = {"#eta = 1.0; #phi = 1.0", "|#eta| < 3.0; 0.0 < #phi < 2#pi"};
0319 std::string title3[4] = {
0320 "B = 0.0 Tesla", "B = 3.8 Tesla", "Multithreaded (B = 0.0 Tesla)", "Multithreaded (B = 3.8 Tesla)"};
0321
0322 if (modet >= 10) {
0323 setTDRStyle();
0324 } else {
0325 gStyle->SetCanvasBorderMode(0);
0326 gStyle->SetCanvasColor(kWhite);
0327 gStyle->SetPadColor(kWhite);
0328 gStyle->SetFillColor(kWhite);
0329 }
0330
0331 if (normalize)
0332 gStyle->SetOptStat(0);
0333 else
0334 gStyle->SetOptStat(111110);
0335 TFile *file1 = new TFile(fnmG4.c_str());
0336 TFile *file2 = new TFile(fnmGV.c_str());
0337 if (file1 && file2) {
0338 TDirectory *dir1 = (TDirectory *)file1->FindObjectAny(dirnm.c_str());
0339 TDirectory *dir2 = (TDirectory *)file2->FindObjectAny(dirnm.c_str());
0340 char name[100], cname[100], title[100];
0341 for (int i1 = 0; i1 < 4; ++i1) {
0342 for (int i2 = todomin; i2 <= todomax; ++i2) {
0343 sprintf(name, "%s%d", names[i2].c_str(), dets[i1]);
0344 sprintf(cname, "%s%s%s", namex[i2].c_str(), detName[i1].c_str(), tag.c_str());
0345 if (modet >= 10)
0346 sprintf(title, "");
0347 else if (mode == 1)
0348 sprintf(title, "%s %s (2 runs of GeantV)", text.c_str(), detName[i1].c_str());
0349 else if (mode == 2)
0350 sprintf(title, "%s %s (2 runs of Geant4)", text.c_str(), detName[i1].c_str());
0351 else
0352 sprintf(title, "%s %s (Geant4 vs GeantV)", text.c_str(), detName[i1].c_str());
0353 TH1D *hist[2];
0354 hist[0] = (TH1D *)dir1->FindObjectAny(name);
0355 hist[1] = (TH1D *)dir2->FindObjectAny(name);
0356 if ((hist[0] != nullptr) && (hist[1] != nullptr)) {
0357
0358 double ymx(0.78);
0359 TCanvas *pad = new TCanvas(cname, cname, 500, 500);
0360 TLegend *legend = new TLegend(0.44, ymx, 0.64, 0.89);
0361 pad->SetRightMargin(0.10);
0362 pad->SetTopMargin(0.10);
0363 pad->SetLogy();
0364 pad->SetFillColor(kWhite);
0365 legend->SetFillColor(kWhite);
0366 int icol[2] = {1, 2};
0367 int isty[2] = {1, 2};
0368 int imty[2] = {20, 24};
0369 std::string type[2] = {"Geant4", "GeantV"};
0370 double ymax(0.90);
0371 double total[2] = {0, 0};
0372 for (int i = 0; i < 2; ++i) {
0373 hist[i]->GetYaxis()->SetTitleOffset(1.2);
0374 hist[i]->GetYaxis()->SetTitle(ytitle[i2].c_str());
0375 hist[i]->GetXaxis()->SetTitle(xtitle[i2].c_str());
0376 hist[i]->SetTitle(title);
0377 hist[i]->SetMarkerStyle(imty[i]);
0378 hist[i]->SetMarkerColor(icol[i]);
0379 hist[i]->SetLineColor(icol[i]);
0380 hist[i]->SetLineStyle(isty[i]);
0381 hist[i]->SetNdivisions(505, "X");
0382 total[i] = hist[i]->GetEntries();
0383 if (mode == 1)
0384 sprintf(name, "%s (run %d)", type[1].c_str(), i);
0385 else if (mode == 2)
0386 sprintf(name, "%s (run %d)", type[0].c_str(), i);
0387 else
0388 sprintf(name, "%s", type[i].c_str());
0389 legend->AddEntry(hist[i], name, "lp");
0390 if (i == 0) {
0391 if (normalize)
0392 hist[i]->DrawNormalized("hist");
0393 else
0394 hist[i]->Draw();
0395 } else {
0396 if (normalize)
0397 hist[i]->DrawNormalized("sames hist");
0398 else
0399 hist[i]->Draw("sames");
0400 }
0401 pad->Update();
0402 }
0403 legend->Draw("same");
0404 pad->Modified();
0405 pad->Update();
0406 for (int i = 0; i < 2; ++i) {
0407 TPaveStats *st = (TPaveStats *)hist[i]->GetListOfFunctions()->FindObject("stats");
0408 if (st != NULL) {
0409 st->SetLineColor(icol[i]);
0410 st->SetTextColor(icol[i]);
0411 st->SetY1NDC(ymax - 0.15);
0412 st->SetY2NDC(ymax);
0413 st->SetX1NDC(0.65);
0414 st->SetX2NDC(0.90);
0415 ymax -= 0.15;
0416 }
0417 }
0418 pad->Modified();
0419 pad->Update();
0420 if (ymx > ymax)
0421 ymx = ymax;
0422 ymx -= 0.005;
0423 int indx = (modet / 10) % 10;
0424 double ymi = ymx - 0.05;
0425 if (indx > 0 && indx <= 4) {
0426 sprintf(title, "%s Electrons", title1[indx - 1].c_str());
0427 TPaveText *txt0 = new TPaveText(0.70, ymi, 0.895, ymx, "blNDC");
0428 txt0->SetFillColor(0);
0429 txt0->AddText(title);
0430 txt0->Draw("same");
0431 ymx -= 0.05;
0432 }
0433 indx = (modet / 100) % 10;
0434 ymi = ymx - 0.05;
0435 if (indx > 0 && indx <= 2) {
0436 sprintf(title, "%s", title2[indx - 1].c_str());
0437 TPaveText *txt0 = new TPaveText(0.65, ymi, 0.895, ymx, "blNDC");
0438 txt0->SetFillColor(0);
0439 txt0->AddText(title);
0440 txt0->Draw("same");
0441 ymx -= 0.05;
0442 }
0443 indx = (modet / 1000) % 10;
0444 ymi = ymx - 0.05;
0445 if (indx > 0 && indx <= 4) {
0446 sprintf(title, "%s", title3[indx - 1].c_str());
0447 TPaveText *txt0 = new TPaveText(0.55, ymi, 0.895, ymx, "blNDC");
0448 txt0->SetFillColor(0);
0449 txt0->AddText(title);
0450 txt0->Draw("same");
0451 ymx -= 0.05;
0452 }
0453 indx = modet % 10;
0454 if (indx > 0) {
0455 sprintf(title, "CMS Simulation");
0456 TPaveText *txt0 = new TPaveText(0.10, 0.91, 0.35, 0.96, "blNDC");
0457 txt0->SetFillColor(0);
0458 txt0->AddText(title);
0459 txt0->Draw("same");
0460 }
0461 if (save != 0) {
0462 if (save > 0)
0463 sprintf(name, "c_%s.pdf", pad->GetName());
0464 else
0465 sprintf(name, "c_%s.jpg", pad->GetName());
0466 pad->Print(name);
0467 }
0468
0469
0470 if (normalize) {
0471 int nbin = hist[0]->GetNbinsX();
0472 double xmin = hist[0]->GetBinLowEdge(1);
0473 double dx = hist[0]->GetBinWidth(1);
0474 double xmax = xmin + nbin * dx;
0475 double fac = total[1] / total[0];
0476 int npt = 0;
0477 double sumNum(0), sumDen(0), xpt[200], dxp[200], ypt[200], dyp[200];
0478 for (int i = 0; i < nbin; ++i) {
0479 if (hist[0]->GetBinContent(i + 1) > 0 && hist[1]->GetBinContent(i + 1) > 0) {
0480 ypt[npt] = (fac * hist[0]->GetBinContent(i + 1) / hist[1]->GetBinContent(i + 1));
0481 double er1 = hist[0]->GetBinError(i + 1) / hist[0]->GetBinContent(i + 1);
0482 double er2 = hist[1]->GetBinError(i + 1) / hist[1]->GetBinContent(i + 1);
0483 dyp[npt] = ypt[npt] * sqrt(er1 * er1 + er2 * er2);
0484 xpt[npt] = xmin + (i - 0.5) * dx;
0485 dxp[npt] = 0;
0486 double temp1 = (ypt[npt] > 1.0) ? 1.0 / ypt[npt] : ypt[npt];
0487 double temp2 = (ypt[npt] > 1.0) ? dyp[npt] / (ypt[npt] * ypt[npt]) : dyp[npt];
0488 sumNum += (fabs(1 - temp1) / (temp2 * temp2));
0489 sumDen += (1.0 / (temp2 * temp2));
0490 ++npt;
0491 }
0492 }
0493 sumNum = (sumDen > 0) ? (sumNum / sumDen) : 0;
0494 sumDen = (sumDen > 0) ? 1.0 / sqrt(sumDen) : 0;
0495 TGraphAsymmErrors *graph = new TGraphAsymmErrors(npt, xpt, ypt, dxp, dxp, dyp, dyp);
0496 graph->SetMarkerStyle(24);
0497 graph->SetMarkerColor(1);
0498 graph->SetMarkerSize(0.8);
0499 graph->SetLineColor(1);
0500 graph->SetLineWidth(2);
0501 sprintf(name, "%sRatio", pad->GetName());
0502 TCanvas *canvas = new TCanvas(name, name, 500, 400);
0503 gStyle->SetOptStat(0);
0504 gPad->SetTopMargin(0.05);
0505 gPad->SetLeftMargin(0.15);
0506 gPad->SetRightMargin(0.025);
0507 gPad->SetBottomMargin(0.20);
0508 TH1F *vFrame = canvas->DrawFrame(xmin, 0.01, xmax, 0.5);
0509 vFrame->GetYaxis()->SetRangeUser(0.4, 1.5);
0510 vFrame->GetXaxis()->SetLabelSize(0.035);
0511 vFrame->GetYaxis()->SetLabelSize(0.04);
0512 vFrame->GetXaxis()->SetTitleSize(0.045);
0513 vFrame->GetYaxis()->SetTitleSize(0.045);
0514 vFrame->GetYaxis()->SetTitleOffset(1.2);
0515 vFrame->GetXaxis()->SetRangeUser(xmin, xmax);
0516 vFrame->GetYaxis()->SetTitle("Geant4/GeantV");
0517 sprintf(name, "%s in %s", xtitle[i2].c_str(), detName[i1].c_str());
0518 vFrame->GetXaxis()->SetTitle(name);
0519 graph->Draw("P");
0520 TLine *line = new TLine(xmin, 1.0, xmax, 1.0);
0521 line->SetLineStyle(2);
0522 line->SetLineWidth(2);
0523 line->SetLineColor(kRed);
0524 line->Draw();
0525 sprintf(title, "Mean Deviation = %5.3f #pm %5.3f", sumNum, sumDen);
0526 TPaveText *text = new TPaveText(0.16, 0.85, 0.60, 0.90, "brNDC");
0527 text->AddText(title);
0528 text->Draw("same");
0529 canvas->Modified();
0530 canvas->Update();
0531 if (save != 0) {
0532 if (save > 0)
0533 sprintf(name, "c_%s.pdf", canvas->GetName());
0534 else
0535 sprintf(name, "c_%s.jpg", canvas->GetName());
0536 canvas->Print(name);
0537 }
0538 }
0539 }
0540 }
0541 }
0542 }
0543 }
0544
0545 void makeGVSPlots(std::string fnmG4 = "analG4.root",
0546 std::string fnmGV = "analGV.root",
0547 int todomin = 0,
0548 int todomax = 7,
0549 std::string tag = "",
0550 std::string text = "",
0551 bool save = false,
0552 std::string dirnm = "caloSimHitAnalysis") {
0553 std::string names[8] = {"hitp", "trackp", "stepp", "edepp", "timep", "volp", "edept", "timet"};
0554 std::string xtitle[8] = {"Hits",
0555 "Tracks",
0556 "Step Length (cm)",
0557 "Energy Deposit (MeV)",
0558 "Time (ns)",
0559 "Volume elements",
0560 "Energy Deposit (MeV)",
0561 "Time (ns)"};
0562 std::string ytitle[8] = {"Events", "Events", "Hits", "Hits", "Hits", "Events", "Hits", "Hits"};
0563 std::string detName[6] = {"Barrel Pixel", "Forward Pixel", "TIB", "TID", "TOB", "TEC"};
0564 std::string particles[3] = {"Electrons", "Positrons", "Photons"};
0565 int boxp[8] = {0, 1, 0, 0, 0, 0, 0, 0};
0566 int nhis[8] = {-4, -4, -4, 1, 1, 1, 6, 6};
0567
0568 gStyle->SetCanvasBorderMode(0);
0569 gStyle->SetCanvasColor(kWhite);
0570 gStyle->SetPadColor(kWhite);
0571 gStyle->SetFillColor(kWhite);
0572 gStyle->SetOptStat(111110);
0573 TFile *file1 = new TFile(fnmG4.c_str());
0574 TFile *file2 = new TFile(fnmGV.c_str());
0575 if (file1 && file2) {
0576 TDirectory *dir1 = (TDirectory *)file1->FindObjectAny(dirnm.c_str());
0577 TDirectory *dir2 = (TDirectory *)file2->FindObjectAny(dirnm.c_str());
0578 char name[100], cname[100], title[100];
0579 for (int i2 = todomin; i2 <= todomax; ++i2) {
0580 int nhism = (nhis[i2] >= 0) ? nhis[i2] : -nhis[i2];
0581 for (int i1 = 0; i1 < nhism; ++i1) {
0582 if (nhis[i2] <= 1 && i1 == 0) {
0583 sprintf(name, "%s", names[i2].c_str());
0584 sprintf(cname, "%s%s", names[i2].c_str(), tag.c_str());
0585 sprintf(title, "%s (Geant4 vs GeantV)", text.c_str());
0586 } else if (nhis[i2] < 0) {
0587 sprintf(name, "%s%d", names[i2].c_str(), i1 - 1);
0588 sprintf(cname, "%s%d%s", names[i2].c_str(), i1 - 1, tag.c_str());
0589 sprintf(title, "%s in %s (Geant4 vs GeantV)", particles[i1 - 1].c_str(), text.c_str());
0590 } else {
0591 sprintf(name, "%s%d", names[i2].c_str(), i1);
0592 sprintf(cname, "%s%d%s", names[i2].c_str(), i1, tag.c_str());
0593 sprintf(title, "%s in %s (Geant4 vs GeantV)", text.c_str(), detName[i1].c_str());
0594 }
0595 TH1D *hist[2];
0596 hist[0] = (TH1D *)dir1->FindObjectAny(name);
0597 hist[1] = (TH1D *)dir2->FindObjectAny(name);
0598 if ((hist[0] != nullptr) && (hist[1] != nullptr)) {
0599
0600 TCanvas *pad = new TCanvas(cname, cname, 500, 500);
0601 TLegend *legend = new TLegend(0.44, 0.78, 0.64, 0.89);
0602 pad->SetRightMargin(0.10);
0603 pad->SetTopMargin(0.10);
0604 pad->SetLogy();
0605 pad->SetFillColor(kWhite);
0606 legend->SetFillColor(kWhite);
0607 int icol[2] = {1, 2};
0608 int isty[2] = {1, 2};
0609 int imty[2] = {20, 24};
0610 std::string type[2] = {"Geant4", "GeantV"};
0611 double ymax(0.90);
0612 double total[2] = {0, 0};
0613 double ymaxv[2] = {0, 0};
0614 for (int i = 0; i < 2; ++i) {
0615 hist[i]->GetYaxis()->SetTitleOffset(1.2);
0616 hist[i]->GetYaxis()->SetTitle(ytitle[i2].c_str());
0617 hist[i]->GetXaxis()->SetTitle(xtitle[i2].c_str());
0618 hist[i]->SetTitle(title);
0619 hist[i]->SetMarkerStyle(imty[i]);
0620 hist[i]->SetMarkerColor(icol[i]);
0621 hist[i]->SetLineColor(icol[i]);
0622 hist[i]->SetLineStyle(isty[i]);
0623 hist[i]->SetNdivisions(505, "X");
0624 total[i] = hist[i]->GetEntries();
0625 legend->AddEntry(hist[i], type[i].c_str(), "lp");
0626 ymaxv[i] = hist[i]->GetMaximum();
0627 }
0628 int first = (ymaxv[0] > ymaxv[1]) ? 0 : 1;
0629 int next = 1 - first;
0630 hist[first]->Draw();
0631 hist[next]->Draw("sames");
0632 pad->Update();
0633 legend->Draw("same");
0634 pad->Modified();
0635 pad->Update();
0636 for (int i = 0; i < 2; ++i) {
0637 TPaveStats *st = (TPaveStats *)hist[i]->GetListOfFunctions()->FindObject("stats");
0638 if (st != NULL) {
0639 double xl = (boxp[i2] == 0) ? 0.65 : 0.10;
0640 st->SetLineColor(icol[i]);
0641 st->SetTextColor(icol[i]);
0642 st->SetY1NDC(ymax - 0.15);
0643 st->SetY2NDC(ymax);
0644 st->SetX1NDC(xl);
0645 st->SetX2NDC(xl + 0.25);
0646 ymax -= 0.15;
0647 }
0648 }
0649 pad->Modified();
0650 pad->Update();
0651 if (save) {
0652 sprintf(name, "c_%s.jpg", pad->GetName());
0653 pad->Print(name);
0654 }
0655 }
0656 }
0657 }
0658 }
0659 }
0660
0661 void setTDRStyle() {
0662 TStyle *tdrStyle = new TStyle("tdrStyle", "Style for P-TDR");
0663
0664
0665 tdrStyle->SetCanvasBorderMode(0);
0666 tdrStyle->SetCanvasColor(kWhite);
0667 tdrStyle->SetCanvasDefH(600);
0668 tdrStyle->SetCanvasDefW(600);
0669 tdrStyle->SetCanvasDefX(0);
0670 tdrStyle->SetCanvasDefY(0);
0671
0672
0673 tdrStyle->SetPadBorderMode(0);
0674 tdrStyle->SetPadColor(kWhite);
0675 tdrStyle->SetPadGridX(false);
0676 tdrStyle->SetPadGridY(false);
0677 tdrStyle->SetGridColor(0);
0678 tdrStyle->SetGridStyle(3);
0679 tdrStyle->SetGridWidth(1);
0680
0681
0682 tdrStyle->SetFrameBorderMode(0);
0683 tdrStyle->SetFrameBorderSize(1);
0684 tdrStyle->SetFrameFillColor(0);
0685 tdrStyle->SetFrameFillStyle(0);
0686 tdrStyle->SetFrameLineColor(1);
0687 tdrStyle->SetFrameLineStyle(1);
0688 tdrStyle->SetFrameLineWidth(1);
0689
0690
0691 tdrStyle->SetHistLineColor(1);
0692 tdrStyle->SetHistLineStyle(0);
0693 tdrStyle->SetHistLineWidth(1);
0694 tdrStyle->SetEndErrorSize(2);
0695
0696 tdrStyle->SetMarkerStyle(20);
0697
0698
0699 tdrStyle->SetOptFit(1);
0700 tdrStyle->SetFitFormat("5.4g");
0701 tdrStyle->SetFuncColor(2);
0702 tdrStyle->SetFuncStyle(1);
0703 tdrStyle->SetFuncWidth(1);
0704
0705
0706 tdrStyle->SetOptDate(0);
0707
0708
0709 tdrStyle->SetOptFile(0);
0710 tdrStyle->SetOptStat(0);
0711 tdrStyle->SetStatColor(kWhite);
0712 tdrStyle->SetStatFont(42);
0713 tdrStyle->SetStatFontSize(0.025);
0714 tdrStyle->SetStatTextColor(1);
0715 tdrStyle->SetStatFormat("6.4g");
0716 tdrStyle->SetStatBorderSize(1);
0717 tdrStyle->SetStatH(0.1);
0718 tdrStyle->SetStatW(0.15);
0719
0720
0721 tdrStyle->SetPadTopMargin(0.05);
0722 tdrStyle->SetPadBottomMargin(0.13);
0723 tdrStyle->SetPadLeftMargin(0.16);
0724 tdrStyle->SetPadRightMargin(0.02);
0725
0726
0727
0728 tdrStyle->SetOptTitle(0);
0729 tdrStyle->SetTitleFont(42);
0730 tdrStyle->SetTitleColor(1);
0731 tdrStyle->SetTitleTextColor(1);
0732 tdrStyle->SetTitleFillColor(10);
0733 tdrStyle->SetTitleFontSize(0.05);
0734
0735
0736
0737 tdrStyle->SetTitleColor(1, "XYZ");
0738 tdrStyle->SetTitleFont(42, "XYZ");
0739 tdrStyle->SetTitleSize(0.06, "XYZ");
0740 tdrStyle->SetTitleXOffset(0.9);
0741 tdrStyle->SetTitleYOffset(1.25);
0742
0743
0744
0745 tdrStyle->SetLabelColor(1, "XYZ");
0746 tdrStyle->SetLabelFont(42, "XYZ");
0747 tdrStyle->SetLabelOffset(0.007, "XYZ");
0748 tdrStyle->SetLabelSize(0.05, "XYZ");
0749
0750
0751
0752 tdrStyle->SetAxisColor(1, "XYZ");
0753 tdrStyle->SetStripDecimals(kTRUE);
0754 tdrStyle->SetTickLength(0.03, "XYZ");
0755 tdrStyle->SetNdivisions(510, "XYZ");
0756 tdrStyle->SetPadTickX(1);
0757 tdrStyle->SetPadTickY(1);
0758
0759
0760 tdrStyle->SetOptLogx(0);
0761 tdrStyle->SetOptLogy(0);
0762 tdrStyle->SetOptLogz(0);
0763
0764
0765 tdrStyle->SetPaperSize(20., 20.);
0766 tdrStyle->SetOptLogy(0);
0767 tdrStyle->SetOptLogz(0);
0768
0769
0770 tdrStyle->SetPaperSize(20., 20.);
0771
0772 tdrStyle->SetHatchesLineWidth(5);
0773 tdrStyle->SetHatchesSpacing(0.05);
0774
0775 tdrStyle->cd();
0776 }