def templates(self, iStep, dist, qqFrac) : if not hasattr(self,'orgMelded') : print 'run meldScale() before asking for templates()'; return topQQs = [s['name'] for s in self.orgMelded.samples if 'wTopAsym' in s['name']] asymm = [eval(name.replace("top.tt_tauola_fj.wTopAsym","").replace(".tw.nvr","").replace("P",".").replace("N","-.")) for name in topQQs] distTup = self.orgMelded.steps[iStep][dist] edges = utils.edgesRebinned( distTup[ self.orgMelded.indexOfSampleWithName("S.M.") ], targetUncRel = 0.015, offset = 2 ) def nparray(name, scaleToN = None) : hist_orig = distTup[ self.orgMelded.indexOfSampleWithName(name) ] hist = hist_orig.Rebin(len(edges)-1, "%s_rebinned"%hist_orig.GetName(), edges) bins = np.array([hist.GetBinContent(j) for j in range(hist.GetNbinsX()+2)]) if scaleToN : bins *= (scaleToN / sum(bins)) return bins nTT = sum(nparray('top.t#bar{t}')) observed = nparray('top.Data 2011') base = ( nparray('QCD.Data 2011') + nparray('top.w_jets') + nparray('top.tt_tauola_fj.wNonQQbar.tw.nvr', scaleToN = (1-qqFrac) * nTT ) ) templates = [base + nparray(qqtt, qqFrac*nTT ) for qqtt in topQQs] return zip(asymm, templates), observed
def setup(self,*_) : import numpy as np orig = self.fromCache( [self.sample], [self.dist], tag = self.tag)[self.sample][self.dist] if not orig : return edges = utils.edgesRebinned(orig, targetUncRel = 0.065) hist = orig.Rebin(len(edges)-1, "tmp", edges) vals = [hist.GetBinContent(i) for i in range(1,len(edges))] del hist iZero = edges.index(0) R = np.array(vals[iZero:]) L = np.array(vals[:iZero])[::-1] p = R / ( R + L ) self.p = r.TH1D(self.name, ";|%s|;p of correct qDir"%self.var, len(edges[iZero:])-1, edges[iZero:]) for i in range(len(p)) : self.p.SetBinContent(i+1,p[i]) self.p.SetBinContent(len(edges[iZero:])+2, edges[-1]) if self.path is not None : c = r.TCanvas() self.p.Draw('hist') utils.tCanvasPrintPdf(c,'%s/%s'%(self.path,'.'.join([self.name,self.sample,self.tag]))) del c