예제 #1
0
    # 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])
예제 #2
0
파일: puweight.py 프로젝트: yiiyama/MonoX
                  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()
예제 #3
0
파일: calcSF.py 프로젝트: dabercro/MonoX
                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')
예제 #4
0
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)
예제 #5
0
        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()
예제 #6
0
파일: efake_plot.py 프로젝트: yiiyama/MonoX
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()
예제 #7
0
    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] )
예제 #8
0
파일: plotFit.py 프로젝트: yiiyama/MonoX
    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]
예제 #9
0
            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()
예제 #10
0
파일: smearfit.py 프로젝트: yiiyama/MonoX
    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)