from Ganga.GPIDev.Base import GangaObject from Ganga.GPIDev.Adapters.IPostProcessor import PostProcessException, IPostProcessor from Ganga.GPIDev.Base.Proxy import GPIProxyObject from Ganga.GPIDev.Schema import ComponentItem, FileItem, Schema, SimpleItem, Version from Ganga.Utility.Config import makeConfig, ConfigError, getConfig from Ganga.Utility.Plugin import allPlugins from Ganga.Utility.logging import getLogger, log_user_exception import commands import copy import os import string import re from ROOT import * def displace(th1, dist=0,name=""): graph = TGraphErrors() counter=0 for x in range( 0 , th1.GetNbinsX() ) : # print "Setting point %d %f %f" %( x, dist + x*th1.GetBinWidth(0), th1.GetBinContent(x) ) if th1.GetBinContent(x) == 0 : continue graph.SetPoint( counter , dist + x*th1.GetBinWidth(0) , th1.GetBinContent(x) ) graph.SetPointError( counter, 0, th1.GetBinError(x) ) counter = counter + 1 return graph class TbStack(GangaObject): _category = 'postprocessor' _exportmethods = ['merge'] _name = 'TbStack' _schema = Schema(Version(1,0), { 'Output' : SimpleItem(defvalue="Kepler-Meta-Histos.root"), 'Labels' : SimpleItem(defvalue={}), 'DrawOptions' : SimpleItem(defvalue=""), 'StackOptions' : SimpleItem(defvalue=""), 'Hist' : SimpleItem(defvalue={}), 'Displace' : SimpleItem(defvalue={}), 'Title' : SimpleItem(defvalue="") }) def merge(self, job): out_file = TFile(self.Output,"UPDATE") for key in self.Hist: print "Making histogram: " + key histogram_name = self.Hist[key] stack = TMultiGraph(key, self.Title ) legend = TLegend(0.8,0.3,0.995,0.4) counter=0 color_counter=1 xtitle="" ytitle="" for run in job.splitter.Files.keys(): if run not in self.Labels.keys(): counter = counter + 1 continue j=job.subjobs(counter) print "Reading " + j.name + " output files" in_file = TFile(j.outputdir+"Kepler-histos.root" ,'READ') if in_file.IsOpen() == False: continue obj = in_file.Get(histogram_name) if obj == 0: continue gROOT.cd() dd = 0 if run in self.Displace.keys(): dd = self.Displace[run] if self.Title == "": title = obj.GetTitle() if xtitle == "": xtitle = obj.GetXaxis().GetTitle() if ytitle == "": ytitle = obj.GetYaxis().GetTitle() thing = displace( obj, dd , j.name ) thing.SetLineColor( color_counter ) thing.SetLineWidth( 1 ) stack.Add( thing , self.DrawOptions ) legend.AddEntry( thing, self.Labels[ run ],"L") in_file.Close() del in_file counter = counter + 1 color_counter = color_counter + 1 stack.SetDrawOption("nostack") stack.ls() out_file.cd() stack.Write() legend.Write() c1 = TCanvas(key+"_canvas","",800,600) # c1.SetLogy() stack.Draw(self.StackOptions) print "Titles = %s %s %s" %( title, xtitle, ytitle) stack.GetXaxis().SetTitle(xtitle) stack.GetYaxis().SetTitle(ytitle) stack.SetTitle(self.Title) stack.Draw(self.StackOptions) legend.Draw() c1.Write()