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)
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")
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()
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 = ""
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