def ensembleTest(self) : qqFracs = sorted([0.10, 0.12, 0.15, 0.20, 0.25, 0.30, 0.40, 0.60, 1.0]) dists = ['lHadtDeltaY', 'ttbarDeltaAbsY', 'leptonRelativeY', 'ttbarSignedDeltaY' ] args = sum([[(iStep, dist, qqFrac) for iStep in list(self.orgMelded.indicesOfStepsWithKey(dist))[:None] for qqFrac in qqFracs] for dist in dists],[]) utils.operateOnListUsingQueue(6, utils.qWorker(self.pickleEnsemble), args) ensembles = dict([(arg,utils.readPickle(self.ensembleFileName(*arg))) for arg in args]) for iStep in sorted(set([iStep for iStep,dist,qqFrac in ensembles])) : canvas = r.TCanvas() dists = sorted(set([dist for jStep,dist,qqFrac in ensembles if jStep==iStep])) legend = r.TLegend(0.7,0.5,0.9,0.9) graphs = {} for iDist,dist in enumerate(dists) : points = sorted([(qqFrac,ensemble.sensitivity) for (jStep, jDist, qqFrac),ensemble in ensembles.iteritems() if jStep==iStep and jDist==dist]) qqs,sens = zip(*points) graphs[dist] = r.TGraph(len(points),np.array(qqs),np.array(sens)) graphs[dist].SetLineColor(iDist+1) graphs[dist].Draw('' if iDist else "AL") graphs[dist].SetMinimum(0) graphs[dist].SetTitle("Sensitivity @ step %d;fraction of t#bar{t} from q#bar{q};expected uncertainty on R"%iStep) legend.AddEntry(graphs[dist],dist,'l') legend.Draw() utils.tCanvasPrintPdf(canvas, '%s/sensitivity_%d'%(self.globalStem,iStep))
def PEcurves(self) : if not hasattr(self, 'orgMelded') : return specs = ([{'var' : "ak5JetPFNTrkHiEffPat[i[%d]]:xcak5JetPFIndicesBtaggedPat"%bIndex, 'left':True, 'right':False} for bIndex in [0,1,2]] + [{'var' : "TopRatherThanWProbability", 'left':True, 'right':False}, {'var' : "TriDiscriminant", 'left':True, 'right':True}]) pes = {} for spec in specs : dists = dict(zip([ss['name'] for ss in self.orgMelded.samples ], self.orgMelded.steps[next(self.orgMelded.indicesOfStepsWithKey(spec['var']))][spec['var']] ) ) contours = utils.optimizationContours( [dists['top.t#bar{t}']], [dists[s] for s in ['QCD.Data 2011','top.w_jets']], **spec ) utils.tCanvasPrintPdf(contours[0], "%s/PE_%s"%(self.globalStem,spec['var'])) if spec['left']^spec['right'] : pes[spec['var']] = contours[1] c = r.TCanvas() leg = r.TLegend(0.5,0.8,1.0,1.0) graphs = [] for i,(var,pe) in enumerate(pes.iteritems()) : pur,eff = zip(*pe) g = r.TGraph(len(pe), np.array(eff), np.array(pur)) g.SetTitle(";efficiency;purity") g.SetLineColor(i+2) leg.AddEntry(g,var,'l') graphs.append(g) g.Draw('' if i else 'AL') leg.Draw() c.Update() utils.tCanvasPrintPdf(c, "%s/purity_v_efficiency"%self.globalStem) return
def measureFractions(dist) : before = next(self.orgMelded.indicesOfStep("label","selection complete")) distTup = self.orgMelded.steps[next(iter(filter(lambda i: before<i, self.orgMelded.indicesOfStepsWithKey(dist))))][dist] #distTup = self.orgMelded.steps[next(self.orgMelded.indicesOfStepsWithKey(dist))][dist] templateSamples = ['top.t#bar{t}','top.w_jets','QCD.Data 2011'] templates = [None] * len(templateSamples) for ss,hist in zip(self.orgMelded.samples,distTup) : contents = [hist.GetBinContent(i) for i in range(hist.GetNbinsX()+2)] if ss['name'] == "top.Data 2011" : observed = contents nEventsObserved = sum(observed) elif ss['name'] in templateSamples : templates[templateSamples.index(ss['name'])] = contents else : pass from core.fractions import componentSolver,drawComponentSolver cs = componentSolver(observed, templates, 1e4) csCanvas = drawComponentSolver(cs) name = "measuredFractions_%s"%dist utils.tCanvasPrintPdf(csCanvas[0], "%s/%s"%(self.globalStem,name)) with open(self.globalStem+"/%s.txt"%name,"w") as file : print >> file, cs print >> file, cs.components return distTup,cs
def measureQQbarComponent(self) : dist = "DiscriminantTopQqQg" dists = dict(zip([ss['name'] for ss in self.orgMelded.samples ], self.orgMelded.steps[next(self.orgMelded.indicesOfStepsWithKey(dist))][dist] ) ) def contents(name) : return np.array([dists[name].GetBinContent(i) for i in range(dists[name].GetNbinsX()+2)]) from core.fractions import componentSolver, drawComponentSolver cs = componentSolver(observed = contents('top.Data 2011'), components = [ contents('top.tt_tauola_fj.wTopAsymP00.tw.nvr'), contents('top.tt_tauola_fj.wNonQQbar.tw.nvr')], ensembleSize = 1e4, base = contents('top.w_jets') + contents('QCD.Data 2011') ) csCanvas = drawComponentSolver(cs) utils.tCanvasPrintPdf(csCanvas[0], "%s/measuredQQFractions"%self.globalStem) with open(self.globalStem+"/measuredQQFractions.txt","w") as file : print >> file, cs
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