# 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()
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') canvas.ylimits = (0.0, 2.0) canvas.ytitle = 'Photon Scale Factor' canvas.xtitle = 'E_{T}^{#gamma} (GeV)' plotName = "scalefactor_"+str(loc)+"_"+str(pid) canvas.printWeb('purity/'+s.Version+'/ScaleFactors', plotName, logy = False)
iP = 0 while iP <= pre: rraw.SetPoint(iP, rawcurve.GetX()[iP], rraw.GetY()[pre + 1]) iP += 1 rraw.SetLineWidth(2) rraw.SetLineColor(ROOT.kRed) rraw.SetLineStyle(ROOT.kDotted) canvas.ratioPad.cd() rframe = ROOT.TH1F("rframe", "", 1, 0.0, 200.0) rframe.GetYaxis().SetRangeUser(0.0, 2.0) rframe.Draw() line = ROOT.TLine(0.0, 1.0, 200.0, 1.0) line.SetLineWidth(2) line.SetLineColor(ROOT.kBlue) line.Draw() rraw.Draw("L") rdata.Draw("EP") canvas._needUpdate = False canvas.printWeb("smearfit", "direct") outputFile.cd() space.Write()
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()
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] )
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()
iP = 0 while iP <= pre: rraw.SetPoint(iP, rawcurve.GetX()[iP], rraw.GetY()[pre + 1]) iP += 1 rraw.SetLineWidth(2) rraw.SetLineColor(ROOT.kRed) rraw.SetLineStyle(ROOT.kDotted) canvas.ratioPad.cd() rframe = ROOT.TH1F('rframe', '', 1, 0., 200.) rframe.GetYaxis().SetRangeUser(0., 2.) rframe.Draw() line = ROOT.TLine(0., 1., 200., 1.) line.SetLineWidth(2) line.SetLineColor(ROOT.kBlue) line.Draw() rraw.Draw('L') rdata.Draw('EP') canvas._needUpdate = False canvas.printWeb('smearfit', 'direct') outputFile.cd() space.Write()
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] else: hList = [iPreUnc, iPre, iPostUnc, iPost, iObs] canvas.rlimits = (0.0, 2.0) canvas.xtitle = 'E_{T}^{#gamma} (GeV)' canvas.ytitle = 'Events / GeV' canvas.printWeb('monophoton/fit', region, hList = hList, rList = [iLine, iPreUncRatio, iPostUncRatio, iPreRatio, iPostRatio]) canvas.Clear() dataHist.Delete() if postfitSub: postfitSub.Delete()
if 'prefit' in name: orig = prefitTotal else: orig = postfitTotal for iBin in zeroBins: scale = 1. / orig.GetBinContent(iBin) if 'Unc' in name: # prim is a TH1 prim.SetBinContent(iBin, 1.) prim.SetBinError(iBin, orig.GetBinError(iBin) * scale) else: # prim is a TGraphAsymmErrors prim.SetPoint(iBin - 1, prim.GetX()[iBin - 1], 0.) prim.SetPointEYhigh(iBin - 1, obs.GetErrorYhigh(iBin - 1) * scale) canvas.printWeb( 'EXO16053/fit', outname, hList=hList, rList=[iLine, iPreUncRatio, iPostUncRatio, iPreRatio, iPostRatio], logy=True) canvas.Clear() dataHist.Delete() if postfitSub: postfitSub.Delete()
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()
rraw.SetLineWidth(2) rraw.SetLineColor(ROOT.kRed) rraw.SetLineStyle(ROOT.kDotted) canvas.ratioPad.cd() rframe = ROOT.TH1F('rframe', '', 1, 0., 400.) rframe.GetYaxis().SetRangeUser(0., 2.) rframe.Draw() line = ROOT.TLine(0., 1., 400., 1.) line.SetLineWidth(2) line.SetLineColor(ROOT.kBlue) line.Draw() rraw.Draw('L') rdata.Draw('EP') canvas._needUpdate = False canvas.printWeb('monophoton/smearfit', sname) ### outputFile.cd() space.Write() outputFile.Close() print 'done'