def draw(var1=None, cut=1, t1=None, t2=None, w1='1', w2='1', name1=None, name2=None, normalize=None, nbins=20, xmin=0, xmax=200, var2=None): if var2 is None: var2 = var1 if t1 is None: t1 = tree1 if t2 is None: t2 = tree2 if name1 is None: name1 = a1 if name2 is None: name2 = a2 print 'tree1', print '\t var : ' , var1 print '\t weight:', w1 print 'tree2', print '\t var : ' , var2 print '\t weight:', w2 print 'cut', cut global legend h1 = TH1F(hname(), '', nbins, xmin, xmax) h1.Sumw2() t1.Project(h1.GetName(), var1,'({cut})*({w1})'.format(cut=cut,w1=w1),'') h2 = h1.Clone(hname()) h2.Sumw2() t2.Project(h2.GetName(), var2,'({cut})*({w2})'.format(cut=cut,w2=w2),'') if normalize == None: pass elif normalize == -1: h1.Scale(1./h1.Integral()) h2.Scale(1./h2.Integral()) elif normalize>0: h2.Scale( normalize ) sBlue.markerStyle = 25 sBlue.formatHisto(h2) sData.formatHisto(h1) h2.SetFillStyle(1001) h2.SetFillColor(5) h1.SetMarkerSize(0.8) h2.SetMarkerSize(0.8) h1.SetStats(0) h2.SetStats(0) if name1 is None: name1 = t1.GetTitle() if name2 is None: name2 = t2.GetTitle() h1.SetTitle(name1) h2.SetTitle(name2) legend = TLegend(0.55,0.7,0.88,0.88) legend.SetFillColor(0) legend.AddEntry(h1, name1, 'lp') legend.AddEntry(h2, name2, 'lpf') print 'number of selected rows:', t1.GetSelectedRows(), t2.GetSelectedRows() comparator = HistComparator(var1, h1, h2) comparator.draw(opt2='e2') return comparator
def draw(var1=None, cut=1, t1=None, t2=None, w1='1', w2='1', name1=None, name2=None, normalize=None, nbins=20, xmin=0, xmax=200, var2=None): if var2 is None: var2 = var1 if t1 is None: t1 = tree1 if t2 is None: t2 = tree2 if name1 is None: name1 = a1 if name2 is None: name2 = a2 print 'tree1', print '\t var : ' , var1 print '\t weight:', w1 print 'tree2', print '\t var : ' , var2 print '\t weight:', w2 print 'cut', cut global legend h1 = TH1F(hname(), '', nbins, xmin, xmax) h1.Sumw2() t1.Project(h1.GetName(), var1,'({cut})*({w1})'.format(cut=cut,w1=w1),'') h2 = h1.Clone(hname()) h2.Sumw2() t2.Project(h2.GetName(), var2,'({cut})*({w2})'.format(cut=cut,w2=w2),'') if normalize == None: pass elif normalize == -1: h1.Scale(1./h1.Integral()) h2.Scale(1./h2.Integral()) elif normalize>0: h2.Scale( normalize ) sBlue.markerStyle = 25 sBlue.formatHisto(h2) sBlack.formatHisto(h1) h2.SetFillStyle(1001) h2.SetFillColor(5) h1.SetMarkerSize(0.8) h2.SetMarkerSize(0.8) h1.SetStats(0) h2.SetStats(0) if name1 is None: name1 = t1.GetTitle() if name2 is None: name2 = t2.GetTitle() h1.SetTitle(name1) h2.SetTitle(name2) legend = TLegend(0.55,0.7,0.88,0.88) legend.SetFillColor(0) legend.AddEntry(h1, name1, 'lp') legend.AddEntry(h2, name2, 'lpf') print 'number of selected rows:', t1.GetSelectedRows(), t2.GetSelectedRows() comparator = HistComparator(var1, h1, h2) comparator.draw() return comparator
class Comparator(object): '''Compare the histograms in a TDirectory to the histograms in another TDirectory''' def __init__(self, info1, info2, outdir='Plots_Comparator', filter='.*', title1=None, title2=None): ''' info1 and info2 are of the form <root_file>:<directory_in_file> filter is a regexp pattern to select histograms to be compared according to their name. title1 and title2 are titles for both sets of histograms. outdir is the directory where all plots will be saved. ''' self.info1 = info1 self.info2 = info2 self.outdir = outdir self.legend = None self.filter = re.compile(filter) self.hcomp = None self.title1 = title1 self.title2 = title2 def browse(self, wait=True): '''Browse the two directories and make the plots. if wait is True, waits for any key before moving to next histogram. ''' # self.can = TCanvas () # threshold = 0.3 # self.pad_ratio = TPad ('ratio','ratio',0,0,1,threshold) # self.pad_ratio.Draw() # self.pad_main = TPad ('main','main',0,threshold,1,1) # self.pad_main.Draw() maindir = self.outdir if os.path.isdir(maindir): os.system('rm -r ' + maindir) os.mkdir(maindir) for h1name, h1 in sorted(self.info1.hists.iteritems()): h2 = self.info2.hists.get(h1name, None) if h2 is None: pass # print h1name, 'not in', d2dir.GetName() else: plotdir = '/'.join([maindir, os.path.dirname(h1name)]) try: mkdir_p(plotdir) except: pass h1.SetTitle(h1name) h2.SetTitle(h1name) if not self.filter.search(h1name): print 'Skipping', h1name continue self._drawHists(h1, h2, h1name) if wait: res = raw_input('') def _drawHists(self, h1, h2, h1name): '''Compare 2 histograms''' h1.SetMarkerColor(1) h1.SetMarkerStyle(21) h1.SetLineColor(1) h1.SetMarkerSize(0.8) h2.SetFillColor(16) h2.SetFillStyle(1001) h2.SetMarkerColor(1) h2.SetMarkerStyle(4) h2.SetLineColor(1) h2.SetMarkerSize(0.8) title1 = self.title1 title2 = self.title2 if title1 is None: title1 = self.info1.name if title2 is None: title2 = self.info2.name # import pdb; pdb.set_trace() if not self.hcomp: self.hcomp = HistComparator(h1name, h1, h2, title1, title2) else: self.hcomp.set(h1name, h1, h2, title1, title2) self.hcomp.draw() print 'Draw', h1name, 'done' pngname = '/'.join([self.outdir, h1name + '.png']) print pngname self.hcomp.can.SaveAs(pngname) return True
class Comparator(object): '''Compare the histograms in a TDirectory to the histograms in another TDirectory''' def __init__(self, info1, info2, outdir='Plots_Comparator', filter='.*', title1=None, title2=None): ''' info1 and info2 are of the form <root_file>:<directory_in_file> filter is a regexp pattern to select histograms to be compared according to their name. title1 and title2 are titles for both sets of histograms. outdir is the directory where all plots will be saved. ''' self.info1 = info1 self.info2 = info2 self.outdir = outdir self.legend = None self.filter = re.compile(filter) self.hcomp = None self.title1 = title1 self.title2 = title2 def browse(self, wait = True): '''Browse the two directories and make the plots. if wait is True, waits for any key before moving to next histogram. ''' # self.can = TCanvas () # threshold = 0.3 # self.pad_ratio = TPad ('ratio','ratio',0,0,1,threshold) # self.pad_ratio.Draw() # self.pad_main = TPad ('main','main',0,threshold,1,1) # self.pad_main.Draw() maindir = self.outdir if os.path.isdir(maindir): os.system( 'rm -r ' + maindir) os.mkdir(maindir) for h1name, h1 in sorted(self.info1.hists.iteritems()): h2 = self.info2.hists.get(h1name, None) if h2 is None: pass # print h1name, 'not in', d2dir.GetName() else: plotdir = '/'.join([maindir,os.path.dirname(h1name)]) try: mkdir_p( plotdir ) except: pass h1.SetTitle(h1name) h2.SetTitle(h1name) if not self.filter.search( h1name ): print 'Skipping', h1name continue self._drawHists(h1, h2, h1name) if wait : res = raw_input('') def _drawHists(self, h1, h2, h1name): '''Compare 2 histograms''' h1.SetMarkerColor(1) h1.SetMarkerStyle(21) h1.SetLineColor(1) h1.SetMarkerSize(0.8) h2.SetFillColor(16) h2.SetFillStyle(1001) h2.SetMarkerColor(1) h2.SetMarkerStyle(4) h2.SetLineColor(1) h2.SetMarkerSize(0.8) title1=self.title1 title2=self.title2 if title1 is None: title1 = self.info1.name if title2 is None: title2 = self.info2.name # import pdb; pdb.set_trace() if not self.hcomp: self.hcomp = HistComparator(h1name,h1, h2, title1, title2) else: self.hcomp.set(h1name, h1, h2, title1, title2) self.hcomp.draw() print 'Draw', h1name, 'done' pngname = '/'.join([self.outdir,h1name+'.png']) print pngname self.hcomp.can.SaveAs(pngname) return True