def define_bottom_hist(self):
     """
     self.bottom_hist must be set here.
     """
     nominator   = add_histo_stack_up(self.stack_data.histo)
     denominator = add_histo_stack_up(self.stack_mc.histo)
     self.bottom_hist = denominator.Clone()
     self.bottom_hist.Divide(nominator, denominator)
예제 #2
0
    def start(self, process):
        """
        Example only. So it's just an exponential fit...

        ..Sadly it's not possible to fit a THStack directly...
        """


        #read from file
        file = TFile(
            root_style.DIR_PLOTS + "/plotgroup/stacks/photonPT.root",
            "READ"
        )

        stack = file.GetKey("photonPT_mc").ReadObj()

        sum_hist = add_histo_stack_up(stack)

        sum_hist.Fit("expo")

        c1 = TCanvas()
        stack.Draw()
        sum_hist.GetFunction("expo").Draw("same")
        c1.BuildLegend()
        c1.SaveAs(root_style.DIR_PLOTS + "/my_fitted_histogram.root")
        c1.SaveAs(root_style.DIR_PLOTS + "/my_fitted_histogram.png")
예제 #3
0
    def save_stacks(self):
        """
        Saves finished stacks. No canvas...
        """

        output_dir = root_style.DIR_PLOTS + "/stacks"
        if not os.path.exists(root_style.DIR_PLOTS):
            os.mkdir(root_style.DIR_PLOTS)
        if not os.path.exists(output_dir):
            os.mkdir(output_dir)

        filename = output_dir + "/" + self.ana_histo_name + ".root"
        file = TFile(filename, "RECREATE")
        file.cd()
        name = self.ana_histo_name
        if self.stack_data:
            histo = self.stack_data.histo
            histo.Write(name + "_data")
            add_histo_stack_up(histo).Write(name + "_data_sum")
        if self.stack_overlay_mc:
            histo = self.stack_overlay_mc.histo
            histo.Write(name + "_overlay_mc")
            add_histo_stack_up(histo).Write(name + "_overlay_mc_sum")
        if self.stack_mc:
            histo = self.stack_mc.histo
            histo.Write(name + "_mc")
            add_histo_stack_up(histo).Write(name + "_mc_sum")
        file.Close()
예제 #4
0
 def __init__(self, histo, sample = "", analyzer = "", stack = None):
     if stack:
         self.stack = stack
         histo = add_histo_stack_up(stack)
     self.histo          = histo
     self.is_data        = False
     self.is_overlay_mc  = False
     self.name           = None
     if histo: self.name = histo.GetName()
     self.sample         = sample
     self.analyzer       = analyzer
     self.lumi           = 1.
     self.legend         = ""
예제 #5
0
    def draw_full_plot(self):
        """
        Puts everything together. Data and MC are plotted and saved.
        """

        if not self.canvas:
            name = self.get_canvas_name()
            self.canvas = TCanvas(name, name, 800, 800)
            self.main_pad = self.canvas
        self.legend = None

        # draw mc first
        if self.stack_mc:
            self.stack_mc.histo.Draw("hist")
            self.first_drawed = self.stack_mc.histo
            histo_total = add_histo_stack_up(self.stack_mc.histo)
            histo_total.SetFillColor(1)
            histo_total.SetMarkerColor(1)
            histo_total.SetMarkerSize(0)
            histo_total.SetFillStyle(3005)
            histo_total.SetLineColor(1)
            histo_total.SetTitle("stat. uncert. MC")
            self.histo_total = histo_total
            histo_total.Draw("sameE2")

            if self.stack_data:
                self.stack_data.histo.Draw("sameE1X0")

            if self.stack_overlay_mc:
                self.stack_overlay_mc.histo.Draw("samehist")

        # no mc present
        elif self.stack_data:
            self.stack_data.histo.Draw("E1X0")
            self.first_drawed = self.stack_data.histo

            if self.stack_overlay_mc:
                self.stack_overlay_mc.Draw("samehist")

        # no mc and no data present
        elif self.stack_overlay_mc:
            self.stack_overlay_mc.Draw("hist")
            self.first_drawed = self.stack_overlay_mc.histo