524def make_ratio_plot(h_base, h_nightly, name, result_file, y_axis_label=None):
525 """
526
527 :param h_base: Baseline histogram
528 :param h_nightly: Nightly histogram
529 :param name: Human-readable name of the histogram
530 :param result_file: TFile where the output is saved
531 :param y_axis_label: Y axis label is case is needed
532 (fraction vs efficiency)
533 """
534 histogram_name = h_nightly.GetName()
535
536 type_name = histogram_name.split("_", 1)[0]
537 variable_name = histogram_name.split("_", 1)[1]
538
539 c1 = TCanvas()
540
541 main_pad = TPad("main_pad", "top", 0.00, 0.25, 1.00, 1.00)
542 main_pad.SetLeftMargin(0.12)
543 main_pad.SetRightMargin(0.04)
544 main_pad.SetTopMargin(0.02)
545 main_pad.SetBottomMargin(0.02)
546 main_pad.SetTicky(0)
547 main_pad.SetTickx(0)
548 main_pad.Draw()
549
550 ratio_pad = TPad("ratio_pad", "bottom", 0.00, 0.00, 1.00, 0.25)
551 ratio_pad.SetLeftMargin(0.12)
552 ratio_pad.SetRightMargin(0.04)
553 ratio_pad.SetTopMargin(0.03)
554 ratio_pad.SetTickx(0)
555 ratio_pad.SetBottomMargin(0.36)
556 ratio_pad.Draw()
557
558 h_base.SetLineColor(4)
559 h_base.SetLineWidth(2)
560
561 h_nightly.SetMarkerStyle(8)
562 h_nightly.SetMarkerSize(0.5)
563
564 main_pad.cd()
565
566 if y_axis_label is not None:
567 h_base.GetYaxis().SetTitle(y_axis_label)
568 h_base.GetYaxis().SetTitle(y_axis_label)
569
570 if '2D' not in variable_name or 'profile' in variable_name:
571 h_base.Draw()
572
573 h_nightly.Draw(
574 "same p" if '2D' not in variable_name or 'profile' in variable_name
575 else 'colz')
576
577 c1.Update()
578
579 h_base.GetXaxis().SetLabelSize(0)
580 h_base.GetXaxis().SetLabelOffset(999)
581
582 h_base.SetMinimum(
min(h_base.GetMinimum(), h_nightly.GetMinimum()) * 0.7)
583 h_base.SetMaximum(
max(h_base.GetMaximum(), h_nightly.GetMaximum()) * 1.3)
584
585 leg = TLegend(0.4, 0.88, 0.9, 0.95)
586 leg.SetHeader(name, "C")
587 leg.SetNColumns(2)
588 leg.SetFillStyle(0)
589 leg.SetBorderSize(0)
590 leg.AddEntry(h_base, "Baseline", "l")
591 leg.AddEntry(h_nightly, "Nightly", "p")
592 leg.Draw()
593
594 c1.Update()
595
596 ratio_pad.cd()
597
598 h1clone = h_nightly.Clone()
599 h1clone.Sumw2()
600 h1clone.SetStats(0)
601 h1clone.Divide(h_base)
602 h1clone.SetMarkerColor(1)
603 h1clone.SetMarkerStyle(20)
604 h1clone.GetYaxis().SetRangeUser(0.95, 1.05)
605 gStyle.SetOptStat(0)
606 h1clone.GetXaxis().SetLabelSize(0.10)
607 h1clone.GetXaxis().SetTitleSize(0.17)
608 h1clone.GetYaxis().SetLabelSize(0.10)
609 h1clone.GetYaxis().SetTitle("Ratio")
610 h1clone.GetYaxis().CenterTitle(1)
611 h1clone.GetYaxis().SetTitleSize(0.15)
612 h1clone.GetYaxis().SetTitleOffset(0.3)
613 h1clone.GetYaxis().SetNdivisions(505)
614
615 h1clone.Draw("hist")
616
617 c1.Update()
618
619 result_file.cd()
620
621 c1.SaveAs(type_name + '_' + variable_name + ".png")
622
623 c1.Write(type_name + '_' + variable_name)
624
625