# if samp == 'Down': rcanvas.ylimits = (0., -1.) # else: # rcanvas.ylimits = (0., 0.05) rcanvas.SetLogy(False) rcanvas.legend.add(tname, title='transfer factor', lcolor=ROOT.kBlack, lwidth=2) rcanvas.legend.add(tname + 'Syst', title='impurity #pm 1#sigma', lcolor=ROOT.kBlack, lwidth=2, lstyle=ROOT.kDashed) rcanvas.legend.apply(tname, tfact) rcanvas.legend.apply(tname + 'Syst', tfactUp) rcanvas.legend.apply(tname + 'Syst', tfactDown) iNom = rcanvas.addHistogram(tfact, drawOpt='HIST') iUp = rcanvas.addHistogram(tfactUp, drawOpt='HIST') iDown = rcanvas.addHistogram(tfactDown, drawOpt='HIST') rcanvas.printWeb('monophoton/hadronTFactor' + suffix, 'tfactor' + confName, hList=[iUp, iDown, iNom], rList=[iNom, iUp, iDown])
fstyle=3003, lwidth=2) canvas.legend.add('mc', '', opt='LF', color=ROOT.kBlue, fstyle=3003, lwidth=2) canvas.legend.apply('data', dataDist) dataClone = dataDist.Clone('points') dataClone.SetFillStyle(0) dataClone.SetMarkerStyle(1) dataClone.SetMarkerColor(ROOT.kBlack) dataClone.SetLineWidth(2) dataClone.SetLineColor(ROOT.kBlack) for _, scenarioName in mcConfs: mcDist = outputFile.Get(scenarioName) canvas.legend.entries['mc'].SetLabel(scenarioName) canvas.legend.apply('mc', mcDist) imc = canvas.addHistogram(mcDist) idata = canvas.addHistogram(dataDist) iclone = canvas.addHistogram(dataClone, drawOpt='P') canvas.printWeb('puweight', scenarioName, logy=False, hList=[imc, idata], rList=[imc, iclone]) canvas.Clear() outputFile.Close()
effError = eff * math.sqrt( (passes[1]/passes[0])**2 + (totals[1]/totals[0])**2 + 2*corr*(passes[1]/passes[0])*(totals[1]/passes[0]) ) dataEff.SetPoint(iB, center, eff) dataEff.SetPointError(iB, exl, exh, effError, effError) sf = eff / mceffs[0] sfErrLow = effError / mceffs[0] sfErrHigh = effError / mceffs[0] gSF.SetPoint(iB, center, sf) gSF.SetPointError(iB, exl, exh, sfErrLow, sfErrHigh) print sf, sfErrLow, sfErrLow / sf rcanvas.legend.add("mc", title = "MC", mcolor = r.kRed, lcolor = r.kRed, lwidth = 2) rcanvas.legend.apply("mc", mcEff) rcanvas.addHistogram(mcEff, drawOpt = 'EP') rcanvas.legend.add("data", title = "Data", lcolor = r.kBlack, lwidth = 2) rcanvas.legend.apply("data", dataEff) rcanvas.addHistogram(dataEff, drawOpt = 'EP') rcanvas.ylimits = (0.0, 1.1) rcanvas.ytitle = 'Photon Efficiency' rcanvas.xtitle = 'E_{T}^{#gamma} (GeV)' plotName = "efficiency_"+str(loc)+"_"+str(pid) rcanvas.printWeb('purity/'+s.Version+'/ScaleFactors', plotName, logy = False) canvas.legend.add(loc+'-'+pid, title = loc+'-'+pid, color = r.kBlack, lwidth = 2) canvas.legend.apply(loc+'-'+pid, gSF) canvas.addHistogram(gSF, drawOpt = 'EP')
mcpdf.plotOn(frame, ROOT.RooFit.LineColor(ROOT.kRed), ROOT.RooFit.LineStyle(ROOT.kDotted)) frame.SetTitle("min#Delta#phi(j, E_{T}^{miss}) < 0.5") # frame.GetXaxis().SetTitle('E_{T}^{miss} (GeV)') frame.GetXaxis().SetTitle("") frame.GetXaxis().SetTitleSize(0.0) frame.GetXaxis().SetLabelSize(0.0) frame.GetYaxis().SetLabelSize(0.0) frame.GetYaxis().SetTickSize(0.0) canvas.xtitle = "E_{T}^{miss} (GeV)" canvas.legend.add("data", title="Data", mstyle=8, color=ROOT.kBlack, opt="LP") canvas.legend.add("fit", title="Fit", color=ROOT.kBlue, lwidth=2, opt="L") canvas.legend.add("gjets", title="#gamma+jets", color=ROOT.kGreen, lstyle=ROOT.kDashed, lwidth=2, opt="L") canvas.legend.add("mcpdf", title="#gamma+jets raw", color=ROOT.kRed, lstyle=ROOT.kDotted, lwidth=2, opt="L") canvas.addHistogram(frame, clone=False, drawOpt="") canvas.Update() fitcurve = frame.findObject("model_Norm[met]") rawcurve = frame.findObject("mcpdf_Norm[met]") rdata = ROOT.TGraphErrors(dmet.GetNbinsX()) for iP in range(rdata.GetN()): x = dmet.GetXaxis().GetBinCenter(iP + 1) norm = fitcurve.interpolate(x) rdata.SetPoint(iP, x, dmet.GetBinContent(iP + 1) / norm) rdata.SetPointError(iP, 0.0, dmet.GetBinError(iP + 1) / norm) rdata.SetMarkerStyle(8) rdata.SetMarkerColor(ROOT.kBlack)
loSumw = loTree.GetEntries() for vname, title, binning, cond, logy in plots: if type(binning) is tuple: hlo = ROOT.TH1D('lo', title, *binning) hnlo = ROOT.TH1D('nlo', title, *binning) else: hlo = ROOT.TH1D('lo', title, len(binning) - 1, array.array('d', binning)) hnlo = ROOT.TH1D('nlo', title, len(binning) - 1, array.array('d', binning)) nloTree.Draw(vname + '>>nlo', 'weight * ((%s) && (%s))' % (baseline, cond), 'goff') hnlo.Scale(nloSample.crosssection / nloSumw, 'width') canvas.addHistogram(hnlo) if lo is not None: loTree.Draw(vname + '>>lo', '(%s) && (%s)' % (baseline, cond), 'goff') hlo.Scale(loSample.crosssection / loSumw, 'width') canvas.addHistogram(hlo) canvas.applyStyles() canvas.printWeb('kfactor', name + '_' + vname, logy=logy) canvas.Clear() hnlo.Delete() hlo.Delete()
def plotFit(mass, targHist, model, dataType, suffix, bkgModel='nombkgModel', hmcbkg=None, alt='', plotName=''): global canvas if canvas is None: canvas = RatioCanvas(lumi=lumi, sim=(dataType == 'mc')) canvas.Clear(full=True) canvas.titlePave.SetX2NDC(0.5) canvas.legend.setPosition(0.6, 0.7, 0.9, 0.9) canvas.legend.add('obs', title='Observed', opt='LP', color=ROOT.kBlack, mstyle=8) canvas.legend.add('fit', title='Fit', opt='L', lcolor=ROOT.kBlue, lwidth=2, lstyle=ROOT.kSolid) canvas.legend.add('bkg', title='Bkg component', opt='L', lcolor=ROOT.kGreen, lwidth=2, lstyle=ROOT.kDashed) if hmcbkg: canvas.legend.add('mcbkg', title='Bkg (MC truth)', opt='LF', lcolor=ROOT.kRed, lwidth=1, fcolor=ROOT.kRed, fstyle=3003) if targHist.sumEntries() > 500.: plotBinning = plotBinningT else: plotBinning = plotBinningT2 frame = mass.frame() targHist.plotOn(frame, ROOT.RooFit.Binning(*plotBinning)) model.plotOn(frame) model.plotOn(frame, ROOT.RooFit.Components(bkgModel + '_' + suffix), ROOT.RooFit.LineStyle(ROOT.kDashed), ROOT.RooFit.LineColor(ROOT.kGreen)) frame.SetTitle('') frame.SetMinimum(0.) canvas.addHistogram(frame, clone=True, drawOpt='') if hmcbkg: htruth = hmcbkg.Rebin(hmcbkg.GetNbinsX() / plotBinning[0], 'truth') canvas.legend.apply('mcbkg', htruth) canvas.addHistogram(htruth) canvas.rlimits = (-2., 2.) canvas.Update(rList=[], logy=False) frame.Print() # adding ratio pad fitcurve = frame.findObject(model.GetName() + '_Norm[mass]') hresid = targHist.createHistogram('residual', mass, ROOT.RooFit.Binning(*plotBinning)) rdata = ROOT.TGraphErrors(hresid.GetNbinsX()) for iP in range(rdata.GetN()): x = hresid.GetXaxis().GetBinCenter(iP + 1) nData = hresid.GetBinContent(iP + 1) statErr = hresid.GetBinError(iP + 1) nFit = fitcurve.interpolate(x) if statErr > 0.: rdata.SetPoint(iP, x, (nData - nFit) / statErr) else: rdata.SetPoint(iP, x, (nData - nFit)) # rdata.SetPointError(iP, 0., dmet.GetBinError(iP + 1) / norm) rdata.SetMarkerStyle(8) rdata.SetMarkerColor(ROOT.kBlack) rdata.SetLineColor(ROOT.kBlack) canvas.ratioPad.cd() canvas.rtitle = '(data - fit) / #sigma_{data}' rframe = ROOT.TH1F('rframe', '', 1, *plotBinning[1:]) rframe.GetYaxis().SetRangeUser(-2., 2.) rframe.Draw() line = ROOT.TLine(plotBinning[1], 0., plotBinning[2], 0.) line.SetLineWidth(2) line.SetLineColor(ROOT.kBlue) line.Draw() rdata.Draw('EP') canvas._needUpdate = False if not plotName: plotName = 'fit_' + dataType + '_' + suffix if alt: plotName += '_' + alt canvas.printWeb(plotDir, plotName, logy=False) rframe.Delete() if hmcbkg: htruth.Delete() hresid.Delete()
canvas.addHistogram(fptDown, drawOpt = 'HIST') canvas.addHistogram(hpt, drawOpt = 'HIST') canvas.ylimits = (1.0, 2500000.) canvas.SetLogy(True) canvas.printWeb('monophoton/hadronTFactor', 'distributions'+samp) rcanvas.Clear() rcanvas.legend.Clear() if samp == 'Down': rcanvas.ylimits = (0., -1.) else: rcanvas.ylimits = (0., 0.15) rcanvas.SetLogy(False) rcanvas.legend.add(tname, title = 'transfer factor', lcolor = ROOT.kBlack, lwidth = 2) rcanvas.legend.add(tname+'Syst', title = 'impurity #pm 1#sigma', lcolor = ROOT.kBlack, lwidth = 2, lstyle = ROOT.kDashed) rcanvas.legend.apply(tname, tfact) rcanvas.legend.apply(tname+'Syst', tfactUp) rcanvas.legend.apply(tname+'Syst', tfactDown) iNom = rcanvas.addHistogram(tfact, drawOpt = 'HIST') iUp = rcanvas.addHistogram(tfactUp, drawOpt = 'HIST') iDown = rcanvas.addHistogram(tfactDown, drawOpt = 'HIST') rcanvas.printWeb('monophoton/hadronTFactor', 'tfactor'+samp, hList = [iUp, iDown, iNom], rList = [iUp, iDown, iNom] )
canvas.legend.apply('prefit', prefitUncRatio, opt = 'F') canvas.legend.apply('postfit', postfitTotal, opt = 'L') canvas.legend.apply('postfit', postfitUnc, opt = 'F') canvas.legend.apply('postfit', postfitRatio, opt = 'LP') canvas.legend.apply('postfit', postfitUncRatio, opt = 'F') if postfitSub: canvas.legend.apply('subdom', postfitSub) # reuse dataHist for unity line in ratio pad dataHist.SetLineColor(ROOT.kBlack) # dataHist.SetLineStyle(ROOT.kDashed) dataHist.SetLineWidth(2) iObs = canvas.addHistogram(obs) iPreUnc = canvas.addHistogram(prefitUnc, drawOpt = 'E2') iPre = canvas.addHistogram(prefitTotal, drawOpt = 'HIST') iPostUnc = canvas.addHistogram(postfitUnc, drawOpt = 'E2') iPost = canvas.addHistogram(postfitTotal, drawOpt = 'HIST') iLine = canvas.addHistogram(dataHist, drawOpt = 'HIST') iPreUncRatio = canvas.addHistogram(prefitUncRatio, drawOpt = 'E2') iPreRatio = canvas.addHistogram(prefitRatio, drawOpt = 'LP') iPostUncRatio = canvas.addHistogram(postfitUncRatio, drawOpt = 'E2') iPostRatio = canvas.addHistogram(postfitRatio, drawOpt = 'LP') if postfitSub: iSub = canvas.addHistogram(postfitSub) hList = [iSub, iPreUnc, iPre, iPostUnc, iPost, iObs]
nominal.GetXaxis().SetBinLabel(ibin + 1, binlabels[ibin]) measured.SetPoint(ibin, (binning[ibin] + binning[ibin + 1]) * 0.5, dsigma * cent[0]) measured.SetPointEYhigh(ibin, dsigma * up[0]) measured.SetPointEYlow(ibin, dsigma * down[0]) nominalLine = nominal.Clone('line') canvas.legend.apply('nominal', nominalLine) nominalLine.SetFillStyle(0) canvas.legend.apply('nominal', nominal) nominal.SetMaximum(nominal.GetMaximum() * 1.2) canvas.legend.apply('obs', measured) measured.SetTitle('') canvas.addHistogram(nominal, drawOpt='E2') canvas.addHistogram(nominalLine, drawOpt='HIST') canvas.addHistogram(measured, drawOpt='EP') canvas.xtitle = nominal.GetXaxis().GetTitle() canvas.ytitle = nominal.GetYaxis().GetTitle() canvas.rtitle = 'Fit / prediction' canvas.printWeb('hww/20190205', 'sigma_%s' % observable, logy=False) canvas.Clear() nominalLine.Delete() nominal.Delete()
model.plotOn(frame) model.plotOn(frame, ROOT.RooFit.Components('gjets'), ROOT.RooFit.LineColor(ROOT.kGreen), ROOT.RooFit.LineStyle(ROOT.kDashed)) mcpdf.plotOn(frame, ROOT.RooFit.LineColor(ROOT.kRed), ROOT.RooFit.LineStyle(ROOT.kDotted)) # frame.SetTitle('min#Delta#phi(j, E_{T}^{miss}) < 0.5') #frame.GetXaxis().SetTitle('E_{T}^{miss} (GeV)') frame.GetXaxis().SetTitle('') frame.GetXaxis().SetTitleSize(0.) frame.GetXaxis().SetLabelSize(0.) frame.GetYaxis().SetLabelSize(0.) frame.GetYaxis().SetTickSize(0.) canvas.Clear() canvas.xtitle = 'E_{T}^{miss} (GeV)' canvas.ylimits = (0.1, 1000000.) canvas.addHistogram(frame, clone = True, drawOpt = '') canvas.Update(rList = []) fitcurve = frame.findObject('model_Norm[met]') rawcurve = frame.findObject('mcpdf_Norm[met]') rdata = ROOT.TGraphErrors(dmet.GetNbinsX()) for iP in range(rdata.GetN()): x = dmet.GetXaxis().GetBinCenter(iP + 1) norm = fitcurve.interpolate(x) rdata.SetPoint(iP, x, dmet.GetBinContent(iP + 1) / norm) rdata.SetPointError(iP, 0., dmet.GetBinError(iP + 1) / norm) rdata.SetMarkerStyle(8) rdata.SetMarkerColor(ROOT.kBlack)