예제 #1
0
    canvas.addText(rlabel, 0.185, 0.82, 0.35, 0.86, size=0.04, align=12)

    resultLegend.setPosition(0.4, 0.88 - 0.04 * len(resultLegend.entries),
                             0.63, 0.88)
    canvas.legend.setPosition(0.63, 0.88 - 0.04 * len(canvas.legend.entries),
                              0.9, 0.88)

    resultLegend.SetTextSize(0.04)
    canvas.legend.SetTextSize(0.04)

    if config == 'monoph':
        canvas.xtitle = 'E_{T}^{#gamma} [GeV]'
    else:
        canvas.xtitle = 'M_{T}(#gamma, E_{T}^{miss}) [GeV]'
    canvas.ytitle = 'Events / GeV'
    canvas.rtitle = 'Data / Pred.'

    if pdir == 'p':
        outname = 'prefit_' + region
    elif pdir == 'c':
        outname = 'CRonly_' + region
    elif pdir == 'b':
        outname = 'bonly_' + region
    elif pdir == 's':
        outname = 'splusb_' + region

    resultLegend.construct()
    canvas.addObject(resultLegend.legend, clone=False)

    canvas.Update(
        hList=hList,
예제 #2
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()
예제 #3
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()