Beispiel #1
0
def plot_training_phoeres_with_shape_and_fit():
    """Plot the nominal MC photon energy smearing overlayed with the pdf shape
    and fit."""
    canvases.next('TrainingPhoEResWithShapeAndFit')
    plot = phoERes.frame(roo.Range(-7.5, 5))
    plot.SetTitle("Photon energy smearing overlayed with PDF shape (blue) "
                  "and it's parametrized fit (dashed red)")
    data.plotOn(plot)
    ## Define model for the photon energy smearing function Ereco/Etrue - 1.
    phoEResPdf = ParametrizedKeysPdf('phoEResPdf', 'phoEResPdf', phoERes,
                                     phoScale, phoRes, data,
                                     ROOT.RooKeysPdf.NoMirror, 1.5)
    ## PDF shape
    phoEResPdf.shape.plotOn(plot)
    ## Parametrized fit of the PDF shape
    phoEResPdf.fitTo(data, roo.Range(-50, 50), roo.PrintLevel(-1))
    phoEResPdf.plotOn(plot, roo.LineColor(ROOT.kRed),
                      roo.LineStyle(ROOT.kDashed))
    plot.Draw()
    Latex([
        's_{shape}: %.3f %%' % phoEResPdf.shapemode,
        's_{fit}: %.3f #pm %.3f %%' % (phoScale.getVal(), phoScale.getError()),
        's_{fit} - s_{shape}: %.4f #pm %.4f %%' %
        (phoScale.getVal() - phoEResPdf.shapemode, phoScale.getError()),
        'r_{shape}: %.3f %%' % phoEResPdf.shapewidth,
        'r_{fit}: %.3f #pm %.3f %%' % (phoRes.getVal(), phoRes.getError()),
        'r_{fit} - r_{shape}: %.4f #pm %.4f %%' %
        (phoRes.getVal() - phoEResPdf.shapewidth, phoRes.getError()),
        'r_{fit}/r_{shape}: %.4f #pm %.4f' %
        (phoRes.getVal() / phoEResPdf.shapewidth,
         phoRes.getError() / phoEResPdf.shapewidth),
    ],
          position=(0.2, 0.8)).draw()
Beispiel #2
0
def make_resolution_plots():
    '''
    Makes canvases with resolution plots.
    '''
    global plotters
    #==========================================================================
    for cfg in get_resolution_configs()[:]:
        ## MC, EB, 2011A+B, 1 of 4 statistically independent tests
        xtitle = 'E_{T}^{#gamma} (GeV)'
        ytitle = 'E^{#gamma} Resolution (%)'
        plotter = FitResultPlotter(cfg.sources1, cfg.getters1, xtitle, ytitle, 
                                   title = 'MC Truth')                          
        plotter.getdata()
        plotter.makegraph()

        plotter.sources = cfg.sources2
        plotter.getters = cfg.getters2
        plotter.title = 'MC Fit'
        plotter.getdata()
        plotter.makegraph()

        plotter.sources = cfg.sources3
        plotter.getters = cfg.getters3
        plotter.title = 'Data Fit'
        plotter.getdata()
        plotter.makegraph()

        canvases.next('c_' + cfg.name).SetGrid()
        plotter.plotall(title = cfg.title,
                        styles = [20, 25, 26],
                        colors = [ROOT.kBlack, ROOT.kBlue, ROOT.kRed])
        plotters.append(plotter)
Beispiel #3
0
def plot_nominal_mmgmass_with_shape_and_fit():
    """Plot the nominal MC mmg mass data overlayed with the pdf shape and
    fit."""
    canvases.next('NominalMmgMassWithShapeAndFit')
    plot = mmgMass.frame(roo.Range(75, 105))
    plot.SetTitle("m(#mu#mu#gamma) overlayed with PDF shape (blue) "
                  "and it's parametrized fit (dashed red)")
    data.plotOn(plot)
    ## Define the mmg mass model.
    mmgMassPdf = ParametrizedKeysPdf('mmgMassPdf', 'mmgMassPdf', mmgMass,
                                     massPeak, massWidth, data,
                                     ROOT.RooKeysPdf.NoMirror, 1.5)
    ## PDF shape
    mmgMassPdf.shape.plotOn(plot)
    ## Parametrized fit of the PDF shape
    mmgMassPdf.fitTo(data, roo.Range(60, 120), roo.PrintLevel(-1))
    mmgMassPdf.plotOn(plot, roo.LineColor(ROOT.kRed),
                      roo.LineStyle(ROOT.kDashed))
    plot.Draw()
    sshape = 100 * (mmgMassPdf.shapemode / mZ.getVal() - 1)
    rshape = 100 * mmgMassPdf.shapewidth / mmgMassPdf.shapemode
    Latex([
        's_{shape}: %.3f %%' % sshape,
        's_{fit}: %.3f #pm %.3f %%' %
        (massScale.getVal(), massScale.getError()),
        's_{fit} - s_{shape}: %.4f #pm %.4f %%' %
        (massScale.getVal() - sshape, massScale.getError()),
        'r_{shape}: %.3f %%' % rshape,
        'r_{fit}: %.3f #pm %.3f %%' % (massRes.getVal(), massRes.getError()),
        'r_{fit} - r_{shape}: %.4f #pm %.4f %%' %
        (massRes.getVal() - rshape, massRes.getError()),
        'r_{fit}/r_{shape}: %.4f #pm %.4f' %
        (massRes.getVal() / rshape, massRes.getError() / rshape),
    ],
          position=(0.2, 0.8)).draw()
Beispiel #4
0
def plot_nominal_and_smeared_mmgmass():
    canvases.next('SmearedMMGMass').SetGrid()
    plot = mmgMass.frame(roo.Range(75, 105))
    plot.SetTitle("Nominal and smeared m_{#mu#mu#gamma}")
    data.plotOn(plot)
    mmgMassPdf.plotOn(plot, roo.LineColor(ROOT.kBlack))
    sdata.plotOn(plot, roo.MarkerColor(ROOT.kRed), roo.LineColor(ROOT.kRed))
    # mmgMassSmearPdf.fitTo(sdata)
    mmgMassSmearPdf.plotOn(plot, roo.LineColor(ROOT.kRed))
    plot.Draw()    
    Latex(['s_{0}^{#gamma}: %.2g %%' % phoScaleRef,
           'r_{0}^{#gamma}: %.2g %%' % phoResRef,
           '#mu_{0}: %.3f #pm %.3f GeV' % (
               mmgMassPeak.getVal(), mmgMassPeak.getError()
               ),
           '#sigma_{0}^{eff}: %.3f #pm %.3f GeV' % (
               mmgMassWidth.getVal(), mmgMassWidth.getError()
               )],
          position = (0.2, 0.8)).draw()
    Latex(['s^{#gamma}: %.2g %%' % targets,
           'r^{#gamma}: %.2g %%' % targetr,
           '#mu: %.3f #pm %.3f GeV' % (
               mmgMassSmearPeak.getVal(), mmgMassSmearPeak.getError()
               ),
           '#sigma^{eff}: %.3f #pm %.3f GeV' % (
               mmgMassSmearWidth.getVal(), mmgMassSmearWidth.getError()
               )],
          position = (0.65, 0.8),
          color = ROOT.kRed).draw()
Beispiel #5
0
def plot_shape_and_fit():
    # Extract the MC truth scale and resolution from MC
    phoEResPdf.fitTo(data, roo.PrintLevel(-1), roo.SumW2Error(False))
    phoScaleRef = phoScale.getVal()
    phoResRef = phoScale.getVal()

    # mmgMassPhoSmearE = w.factory('mmgMassPhoSmearE[40, 140]')
    # phoEResSmear = w.factory('phoEResSmear[-80, 110]')

    #------------------------------------------------------------------------------
    # Plot the nominal MC data overlayed with the pdf shape and fit
    canvases.next('pkeyspdf_fit')
    phoERes.setUnit("%")
    plot = phoERes.frame(roo.Range(-5, 5))
    plot.SetTitle('')
    data.plotOn(plot)
    phoEResPdf.shape.plotOn(plot)
    phoEResPdf.plotOn(plot, roo.LineColor(ROOT.kRed), roo.LineStyle(ROOT.kDashed))
    plot.Draw()
    Latex([
        's_{0} = %.3f %%' % phoEResPdf.shapemode,
        's_{fit} = %.3f #pm %.3f %%' % (phoScale.getVal(), phoScale.getError()),
        's_{fit} - s_{0} = %.3f #pm %.3f %%' % (
            phoScale.getVal() - phoEResPdf.shapemode,
            phoScale.getError()
            ),
        'r_{0} = %.3f %%' % phoEResPdf.shapewidth,
        'r_{fit} = %.3f #pm %.3f %%' % (phoRes.getVal(), phoRes.getError()),
        'r_{fit}/r_{0} = %.3f #pm %.3f' % (
            phoRes.getVal() / phoEResPdf.shapewidth,
            phoRes.getError() / phoEResPdf.shapewidth),
        ], position=(0.675, 0.82)).draw()
Beispiel #6
0
def plot_training_phoeres_with_shape_and_fit():
    """Plot the nominal MC data overlayed with the pdf shape and fit."""
    canvases.next('TrainingSampleWithShapeAndFit')
    plot = phoERes.frame(roo.Range(-7.5, 5))
    plot.SetTitle("MC overlayed with PDF shape (blue) and it's parametrized fit"
                  "(dashed red)")
    data.plotOn(plot)
    calibrator.w.loadSnapshot('sr0_mctruth')
    phoScale.setVal(calibrator.s0.getVal())
    phoRes.setVal(calibrator.r0.getVal())
    phoEResPdf.shape.plotOn(plot)
    phoEResPdf.plotOn(plot, roo.LineColor(ROOT.kRed),
                      roo.LineStyle(ROOT.kDashed))
    plot.Draw()
    Latex([
        's_{shape}: %.3f %%' % phoEResPdf.shapemode,
        's_{fit}: %.3f #pm %.3f %%' % (calibrator.s.getVal(),
                                       phoScale.getError()),
        's_{fit} - s_{shape}: %.4f #pm %.4f %%' % (
            phoScale.getVal() - phoEResPdf.shapemode,
            phoScale.getError()
            ),
        'r_{shape}: %.3f %%' % phoEResPdf.shapewidth,
        'r_{fit}: %.3f #pm %.3f %%' % (phoRes.getVal(), phoRes.getError()),
        'r_{fit} - r_{shape}: %.4f #pm %.4f %%' % (
            phoRes.getVal() - phoEResPdf.shapewidth,
            phoRes.getError()),
        'r_{fit}/r_{shape}: %.4f #pm %.4f' % (
            phoRes.getVal() / phoEResPdf.shapewidth,
            phoRes.getError() / phoEResPdf.shapewidth),
        ], position=(0.2, 0.8)).draw()
Beispiel #7
0
 def make_plot(self):
     '''
     Creates a canvas and draws the histogram on it.
     '''
     canvases.next(self.GetName())
     self.DrawCopy()
     canvases.update()
Beispiel #8
0
def make_scale_dependence_plot():
    ## Plot the phoEResPdf for various values of the scale
    canvases.next('ShapeScaleScan').SetGrid()
    phoRes.setVal(1)
    plot = phoERes.frame(roo.Range(-6, 8))
    latexlabels = []

    for i, color in enumerate(colors):
        scale = -4 + 2*i
        phoScale.setVal(scale)
        phoEResPdf.plotOn(plot, roo.LineColor(color), roo.Precision(1e-4))
        label = Latex(['s = %d %%' % scale,],
                      position=(0.8, 0.75 - (i+1) * 0.055),
                      textsize=24)
        label.SetTextColor(color)
        latexlabels.append(label)

    # plot.SetTitle('Dependence on Scale')
    plot.SetTitle('')
    plot.GetYaxis().SetTitle('Probability Density f(x|s,r) (1/%)')
    plot.Draw()
    #Latex(cutlabels, position=(0.2, 0.75)).draw()
    Latex(['r = 1 %',], position=(0.8, 0.8), textsize=24).draw()
    for l in latexlabels:
        l.draw()
Beispiel #9
0
def plot_smeared_phoeres_with_fit():
    phoEResPdf.fitTo(sdata, roo.PrintLevel(-1), roo.SumW2Error(False),
                     roo.Range(-50, 50))
    canvases.next('SmearedSampleWithFit')
    savtitle = phoERes.GetTitle()
    phoERes.SetTitle('smeared E_{reco}^{#gamma}/E_{gen}^{#gamma} - 1')
    plot = phoERes.frame(roo.Range(-30, 30))
    phoERes.SetTitle(savtitle)
    plot.SetTitle("Smeared MC with paremetrized fit")
    sdata.plotOn(plot)
    phoEResPdf.plotOn(plot)
    # phoEResPdf.paramOn(plot)
    plot.Draw()
    Latex([
        's_{target}: %.3g %%' % targets,
        's_{fit}: %.3g #pm %.3g %%' % (phoScale.getVal(), phoScale.getError()),
        's_{fit} - s_{target}: %.3g #pm %.3g %%' % (
            phoScale.getVal() - targets, phoScale.getError()
            ),
        'r_{target}: %.3g %%' % targetr,
        'r_{fit}: %.3g #pm %.3g %%' % (phoRes.getVal(), phoRes.getError()),
        'r_{fit} - r_{target}: %.3g #pm %.3g %%' % (
            phoRes.getVal() - targetr, phoRes.getError()
            ),
        'r_{fit}/r_{target}: %.3g #pm %.3g %%' % (
            phoRes.getVal() / targetr, phoRes.getError() / targetr
            ),
        ], position=(0.2, 0.75)).draw()
Beispiel #10
0
def plot_fit_to_real_data(label):
    """
    Plot fit to real data for a dataset specified by the label:
    "data" (full 2011A+B), "2011A" or "2011B".
    """
    # mmgMass.setRange('plot', 70, 110)
    mmgMass.setBins(80)
    plot = mmgMass.frame(roo.Range("plot"))
    if label == "data":
        title_start = "2011A+B"
    else:
        title_start = label

    plot.SetTitle("%s, %s" % (title_start, latex_title))
    data[label].plotOn(plot)
    pm.plotOn(plot, roo.Range("plot"), roo.NormRange("plot"))
    if use_exp_bkg:
        pm.plotOn(
            plot, roo.Range("plot"), roo.NormRange("plot"), roo.Components("*zj*,*exp*"), roo.LineStyle(ROOT.kDashed)
        )
    else:
        pm.plotOn(plot, roo.Range("plot"), roo.NormRange("plot"), roo.Components("*zj*"), roo.LineStyle(ROOT.kDotted))
    # pm.plotOn(plot, roo.Range('plot'), roo.NormRange('plot'),
    # roo.Components('bkg*'), roo.LineStyle(ROOT.kDotted))
    canvases.next(name + "_" + label).SetGrid()
    plot.Draw()
Beispiel #11
0
def make_resolution_scan_plot():
    ## Plot the phoEResPdf for various values of the effective sigma
    canvases.next('ShapeWidthScan').SetGrid()
    plot = phoERes.frame(roo.Range(-7, 8))
    phoScale.setVal(0)
    latexlabels = []
    for i, color in enumerate(colors):
        res = 1./(1. + 0.25*(2-i))
        phoRes.setVal(res)
        phoEResPdf.plotOn(plot, roo.LineColor(color), roo.Precision(1e-4))
        label = Latex(['r = %.2g %%' % res,],
                      position=(0.75, 0.75 - (i+1) * 0.055),
                      textsize=24)
        label.SetTextColor(color)
        latexlabels.append(label)

    phoScale.setVal(-4)
    for res, color in zip([1./(1. + 0.25*(2-i)) for i in range(5)], colors):
        phoRes.setVal(res)
        phoEResPdf.plotOn(plot, roo.LineColor(color))

    phoScale.setVal(2)
    for res, color in zip([1./(1. + 0.25*(2-i)) for i in range(5)], colors):
        phoRes.setVal(res)
        phoEResPdf.plotOn(plot, roo.LineColor(color))

    #plot.SetTitle('Dependence on Scale and Resolution')
    plot.SetTitle('')
    plot.GetYaxis().SetTitle('Probability Density f(x|s,r) (1/%)')
    plot.Draw()
    # Latex(cutlabels, position=(0.2, 0.75)).draw()
    Latex(['s = -4, 0, 2 %',], position=(0.75, 0.8), textsize=24).draw()
    for l in latexlabels:
        l.draw()
Beispiel #12
0
 def make_plot(self):
     '''
     Creates a canvas and draws the histogram on it.
     '''
     canvases.next(self.GetName())
     self.DrawCopy()
     canvases.update()
Beispiel #13
0
def plot_t2():
    ## Plot fT2(t2|s,r) fitted to training data.
    canvases.next('t2pdf').SetGrid()
    t.setRange(*t2range)
    t.setVal(0)
    t.SetTitle('log(E_{reco}^{#gamma}/E_{gen}^{#gamma})')
    phoScale.setVal(t2pdf.s0val)
    phoRes.setVal(t2pdf.r0val)
    t2pdf.fitTo(t2data, roo.Range(ROOT.TMath.Log(0.5), ROOT.TMath.Log(1.5)),
                roo.NumCPU(8), roo.SumW2Error(True))
    myrange = (math.log(1 + 0.01 * (t2pdf.s0val - 5*t2pdf.r0val)),
               math.log(1 + 0.01 * (t2pdf.s0val + 5*t2pdf.r0val)))
    plot = t.frame(roo.Range(*myrange))
    t2data.plotOn(plot)
    t2pdf.plotOn(plot)
    plot.Draw()
    Latex([
        's_{shape}: %.3f %%' % t2pdf.s0val,
        's_{fit}: %.3f #pm %.3f %%' % (phoScale.getVal(), phoScale.getError()),
        's_{fit} - s_{shape}: %.4f #pm %.4f %%' % (
            phoScale.getVal() - t2pdf.s0val,
            phoScale.getError()
            ),
        'r_{shape}: %.3f %%' % t2pdf.r0val,
        'r_{fit}: %.3f #pm %.3f %%' % (phoRes.getVal(), phoRes.getError()),
        'r_{fit}/r_{shape}: %.4f #pm %.4f' % (
            phoRes.getVal() / t2pdf.r0val,
            phoRes.getError() / t2pdf.r0val),
        ], position=(0.2, 0.75)).draw()
    plots.append(plot)
Beispiel #14
0
def plot_xt1_proj_x():
    ## Plot fXT1(x, t1) projected on x axis
    canvases.next('xt1_proj_x')
    plot = mmMass.frame()
    xt1data.plotOn(plot)
    xt1pdf.plotOn(plot)
    plot.Draw()
    plots.append(plot)
Beispiel #15
0
def plot_xt1_proj_t1():
    ## Plot fXT1(x, t1) projected on t1 axis
    canvases.next('xt1_proj_t1')
    t.setRange(*t1range)
    t.SetTitle('log(m_{#mu#mu#gamma,E_{gen}^{#gamma}}^{2} - m_{#mu#mu}^{2})')
    plot = t.frame()
    xt1data.plotOn(plot)
    xt1pdf.plotOn(plot)
    plot.Draw()
    plots.append(plot)
Beispiel #16
0
def fit_and_plot(pdf):
    canvases.next(pdf.GetName())
    plot = x.frame()
    data.plotOn(plot)
    print '+++ Fitting', pdf.GetName()
    w.var('m').setVal(m0)
    w.var('s').setVal(s0)
    pdf.fitTo(data, roo.Timer())
    pdf.plotOn(plot)
    pdf.paramOn(plot)
    plot.Draw()
    check_timer('fit_' + pdf.GetName())
Beispiel #17
0
def make_plots(configurations):
    """
    For each configuration in the given list, overlays the graphs of 
    scale versus pt for all sets of measurements specified.
    These measurements are either from the true or the PHOSPHOR fit.
    """
    for cfg in configurations[:]:
        ## Only check EE 2011AB
        # if (not 'EE_lowR9' in cfg.name) or (not 'AB' in cfg.name):
        # continue
        ### Only check 2011AB
        # if not 'AB' in cfg.name:
        # continue
        ## MC, EB, 2011A+B, 1 of 4 statistically independent tests
        plotter = FitResultPlotter(
            cfg.sources[0],
            cfg.getters[0],
            cfg.xtitle,
            cfg.ytitle,
            title=cfg.titles[0],
            name=cfg.name,
            xasymmerrors=True,
            yasymmerrors=True,
            colors=[ROOT.kBlack],
        )

        for isources, igetters, ititle in zip(cfg.sources, cfg.getters, cfg.titles):
            plotter.sources = isources
            plotter.getters = igetters
            plotter.title = ititle
            plotter.getdata()
            plotter.makegraph()
            plotter.graph.Fit("pol1")

        canvases.next("c_" + cfg.name).SetGrid()
        plotter.graph.Draw("ap")
        plotter.graph.GetXaxis().SetTitle(cfg.xtitle)
        plotter.graph.GetYaxis().SetTitle(cfg.ytitle)
        # if 'EE_highR9' in cfg.name:
        # plotter.plotall(title = cfg.title,
        ##xrange = (0, 10),
        ##yrange = (0, 10),
        # legend_position = 'topright')
        # else:
        # plotter.plotall(title = cfg.title,
        ##xrange = (5, 55),
        # legend_position = 'topright')
        # plotter.graphs[0].Draw('p')
        canvases.canvases[-1].Modified()
        canvases.canvases[-1].Update()
        canvases.update()
        plotters.append(plotter)
Beispiel #18
0
def plot_nominal_and_smeared_mmgmass():
    canvases.next('SmearedMMGMass').SetGrid()
    plot = mmgMass.frame(roo.Range(76, 106))
    plot.SetTitle("Nominal (black) and smeared (red) mmg mass")
    data.plotOn(plot)
    datasmeared.plotOn(plot, roo.MarkerColor(ROOT.kRed),
                       roo.LineColor(ROOT.kRed))
    plot.Draw()
    Latex([
        's_{0}: %.2g %%, s: %.2g %%' % (phoScaleRef, targets),
        'r_{0}: %.2g %%, r: %.2g %%' % (phoResRef, targetr)
    ],
          position=(0.2, 0.8)).draw()
Beispiel #19
0
def plot_smeared_phoeres_with_fit():
    phoEResPdf.fitTo(datasmeared, roo.PrintLevel(-1), roo.SumW2Error(False))
    canvases.next('SmearedSampleWithFit')
    plot = phoERes.frame(roo.Range(-30, 30))
    plot.SetTitle("Smeared MC with paremetrized fit")
    datasmeared.plotOn(plot)
    phoEResPdf.plotOn(plot)
    phoEResPdf.paramOn(plot)
    plot.Draw()
    Latex([
        'target s: %.3g %%' % targets,
        'target r: %.3g %%' % targetr,
    ],
          position=(0.2, 0.75)).draw()
Beispiel #20
0
def make_plots(configurations):
    '''
    For each configuration in the given list, overlays the graphs of 
    scale versus pt for all sets of measurements specified.
    These measurements are either from the true or the PHOSPHOR fit.
    '''
    for cfg in configurations[:]:
        ## Only check EE 2011AB
        #if (not 'EE_lowR9' in cfg.name) or (not 'AB' in cfg.name):
            #continue
        ### Only check 2011AB
        #if not 'AB' in cfg.name:
            #continue
        ## MC, EB, 2011A+B, 1 of 4 statistically independent tests
        plotter = FitResultPlotter(cfg.sources[0], cfg.getters[0], cfg.xtitle, 
                                   cfg.ytitle, title = cfg.titles[0],
                                   name=cfg.name, yasymmerrors=True)                          

        for isources, igetters, ititle in zip(cfg.sources, 
                                              cfg.getters, 
                                              cfg.titles):
            plotter.sources = isources
            plotter.getters = igetters
            plotter.title = ititle
            plotter.getdata()
            plotter.makegraph()
            plotter.plot()

        canvases.next('c_' + cfg.name).SetGrid()

        ## Check if there is a problem with the ranges
        # yrange = 'auto'
        yrange = (-10, 10)
        for graph in plotter.graphs:
            if (graph.GetHistogram().GetMaximum() -
                graph.GetHistogram().GetMinimum()) < 0.1:
                print cfg.name, graph.GetTitle(), 'min:', graph.GetMaximum(),
                print ', max:', graph.GetMaximum
                yrange = (-5, 10)

        plotter.plotall(title = cfg.title,
                        xrange = (5, 55),
                        yrange = yrange,
                        legend_position = 'topright')

        #plotter.graphs[0].Draw('p')
        canvases.canvases[-1].Modified()
        canvases.canvases[-1].Update()
        canvases.update()
        plotters.append(plotter)
Beispiel #21
0
def get_canvas():
    '''
    Returns the canvas based on the name.
    '''
    c1 = canvases.next(name, name)
    c1.SetTopMargin(0.1)
    return c1
Beispiel #22
0
def plot_mmgmass_with_fit_for_multiple_smearings(name, stargets, rtargets,
                                                 colors, plotrange=(60, 105)):
    """Plot the smeared mmg mass for a number of different smearings."""
    canvases.next(name).SetGrid()
    mmgMass.setRange('plot', *plotrange)
    plot = mmgMass.frame(roo.Range('plot'))
    plot.SetTitle("")
    slabels = []
    rlabels = []
    ## Loop over the various smearings.
    for starget, rtarget, color in zip(stargets, rtargets, colors):
        mydata = calibrator.get_smeared_data(starget, rtarget)
        model = ParametrizedKeysPdf('model',
                                    'model',
                                    mmgMass, mmgMassSmearPeak,
                                    mmgMassSmearWidth, mydata,
                                    ROOT.RooKeysPdf.NoMirror, 1.5)
        model.fitTo(mydata, roo.PrintLevel(-1), roo.Range(60, 120),
                    roo.SumW2Error(False))
        mydata.plotOn(plot, roo.LineColor(color), roo.MarkerColor(color))
        model.plotOn(plot, roo.LineColor(color), roo.Range('plot'),
                     roo.NormRange('plot'))
        slabels.append([
            's\' = % 3.f %%,  ' % starget +
            '#Delta m_{#mu#mu#gamma} = %.2f #pm %.2f %%' % (
                100 * (mmgMassSmearPeak.getVal() / 91.2 - 1.),
                100 * mmgMassSmearPeak.getError() / 91.2
                ),
            ])
        rlabels.append([
            'r\' = %.1f %%,  ' % rtarget +
            '#sigma_{eff}/#mu(m_{\mu\mu\gamma}) = % .2f #pm %.2f %%' % (
                100 * mmgMassSmearWidth.getVal() / mmgMassSmearPeak.getVal(),
                100 * mmgMassSmearWidth.getError() / mmgMassSmearPeak.getVal(),
                ),
            ])
    ## End of loop over the various smearings.
    plot.Draw()
    for i, (labels, color) in enumerate(zip(slabels, colors)):
        latex = Latex(labels, position=(0.18, 0.85 - i*0.055))
        latex.SetTextColor(color)
        latex.draw()
    for i, (labels, color) in enumerate(zip(rlabels, colors)):
        latex = Latex(labels,
                      position=(0.18, 0.85 - (len(slabels)+1) * 0.055 - i*0.055))
        latex.SetTextColor(color)
        latex.draw()
Beispiel #23
0
def plot_xy_proj_y():
    'Plot fXY(x,y|s,r) projected on mmgMass.'
    c1 = canvases.next('xy_proj_y').SetGrid()
    plot = mmgMass.frame(roo.Range(75, 105))
    # plot = mmgMass.frame()
    data.plotOn(plot)
    xypdf.plotOn(plot)
    plot.Draw()
Beispiel #24
0
def plot_xy_proj_x():
    'Plot fXY(x,y|s,r) projected on mmMass.'
    c1 = canvases.next('xy_proj_x').SetGrid()
    # plot = mmMass.frame(roo.Range(40, 90))
    plot = mmMass.frame()
    data.plotOn(plot)
    xypdf.plotOn(plot)
    plot.Draw()
Beispiel #25
0
def plot_mmgmass_for_multiple_smearings(name, stargets, rtargets,
                                        colors, plotrange=(76, 106)):
    canvases.next(name).SetGrid()
    plot = mmgMass.frame(roo.Range(*plotrange))
    plot.SetTitle("MC for multiple smearing scenarious")
    multilabels = []
    ## Loop over the various smearings.
    for starget, rtarget, color in zip(stargets, rtargets, colors):
        mydata = calibrator.get_smeared_data(starget, rtarget)
        mydata.plotOn(plot, roo.LineColor(color), roo.MarkerColor(color))
        multilabels.append(['s_{target}: %.1f %%' % starget,
                            'r_{target}: %.1f %%'% rtarget,])
    ## End of loop over the various smearings.
    plot.Draw()
    for i, (labels, color) in enumerate(zip(multilabels, colors)):
        latex = Latex(labels, position=(0.2, 0.85 - i*0.11))
        latex.SetTextColor(color)
        latex.draw()
Beispiel #26
0
def plotxy(pdf, xyexpr='x:y'):
    h_pdf = pdf.createHistogram(xyexpr)
    h_pdf.SetLineColor(ROOT.kBlue)
    xname, yname = xyexpr.split(':')
    for xbin in range(h_pdf.GetNbinsX() + 1):
        for ybin in range(h_pdf.GetNbinsY() + 1):
            xval = h_pdf.GetXaxis().GetBinCenter(xbin)
            yval = h_pdf.GetYaxis().GetBinCenter(ybin)
            w.var(xname).setVal(xval)
            w.var(yname).setVal(yval)
            if xval < w.var(xname).getMin() or w.var(xname).getMax() < xval:
                h_pdf.SetBinContent(h_pdf.GetBin(xbin, ybin), 0)
            if yval < w.var(yname).getMin() or w.var(yname).getMax() < yval:
                h_pdf.SetBinContent(h_pdf.GetBin(xbin, ybin), 0)
    canvases.next(h_pdf.GetName())
    h_pdf.Draw('surf')
    canvases.next(h_pdf.GetName() + '_cont1')
    h_pdf.Draw('cont1')
def plotxy(pdf, xyexpr = 'x:y'):
    h_pdf = pdf.createHistogram(xyexpr)
    h_pdf.SetLineColor(ROOT.kBlue)
    xname, yname = xyexpr.split(':')
    for xbin in range(h_pdf.GetNbinsX() + 1):
        for ybin in range(h_pdf.GetNbinsY() + 1):
            xval = h_pdf.GetXaxis().GetBinCenter(xbin)
            yval = h_pdf.GetYaxis().GetBinCenter(ybin)
            w.var(xname).setVal(xval)
            w.var(yname).setVal(yval)
            if xval < w.var(xname).getMin() or w.var(xname).getMax() < xval:
                h_pdf.SetBinContent(h_pdf.GetBin(xbin, ybin), 0)
            if yval < w.var(yname).getMin() or w.var(yname).getMax() < yval:
                h_pdf.SetBinContent(h_pdf.GetBin(xbin, ybin), 0)            
    canvases.next(h_pdf.GetName())
    h_pdf.Draw('surf')
    canvases.next(h_pdf.GetName() + '_cont1')
    h_pdf.Draw('cont1')
Beispiel #28
0
def plot_xy(xname, yname, filemask, xtype='var', ytype='var'):
    filename = filemask % ptbinedges[0]
    ## Mass scale vs photon scale
    frp = FitResultPlotter(
        sources = sources(filename, wsname),
        getters = xygetters(xname, yname, xtype, ytype),
        xtitle = axistitles[xname],
        ytitle = axistitles[yname],
        title = 'Dummy Legend Entry',
        )
    for ptrange in ptbinedges:
        filename = filemask % ptrange
        frp.sources = sources(filename, wsname)
        frp.title = 'E_{T}^{#gamma} #in [%d, %d] GeV' % ptrange
        frp.getdata()
        frp.makegraph()
    canvases.next(yname + '_vs_' + xname).SetGrid()
    frp.plotall(title = ptitle)
    frps.append(frp)
Beispiel #29
0
def plot_fit_to_real_data(label):
    '''
    Plot fit to real data for a dataset specified by the label:
    "data" (full 2011A+B), "2011A" or "2011B".
    '''
    # mmgMass.setRange('plot', 70, 110)
    mmgMass.setBins(80)
    plot = mmgMass.frame(roo.Range('plot'))
    if label == 'data':
        title_start = '2011A+B'
    else:
        title_start = label
       
    plot.SetTitle('%s, %s' % (title_start, latex_title))
    data[label].plotOn(plot)
    pm.plotOn(plot, roo.Range('plot'), roo.NormRange('plot'))
    pm.plotOn(plot, roo.Range('plot'), roo.NormRange('plot'),
              roo.Components('*zj*'), roo.LineStyle(ROOT.kDashed))
    canvases.next(name + '_' + label).SetGrid()
    plot.Draw()
Beispiel #30
0
def plot_xy_slice_y():    
    'Plot fXY(x,y|s,r) slice at mmMass = [55, 60, 65, 70, 75] GeV.'
    c1 = canvases.next('xy_slice_y').SetGrid()
    plot = mmgMass.frame()
    for mval, color in zip(
        [45, 50, 55, 60, 65, 70, 75, 80],
        'Red Yellow Orange Spring Green Magenta Blue Black'.split()
        ):
        mmMass.setVal(mval)
        xypdf.plotOn(plot, roo.LineColor(getattr(ROOT, 'k' + color)))

    plot.Draw()
Beispiel #31
0
def plot_xy_slice_x():
    'Plot fXY(x,y|s,r) slice at mmgMass values.'
    c1 = canvases.next('xy_slice_x').SetGrid()
    plot = mmMass.frame()
    for mval, color in zip(
        [70, 75, 80, 85, 90, 95, 100, 105],
        'Red Yellow Orange Spring Green Magenta Blue Black'.split()
        ):
        mmgMass.setVal(mval)
        xypdf.plotOn(plot, roo.LineColor(getattr(ROOT, 'k' + color)))

    plot.Draw()
def make_scale_plots(configurations):
    '''
    For each configuration in the given list, overlays the graphs of 
    scale versus pt for all sets of measurements specified.
    These measurements are either from the true or the PHOSPHOR fit.
    '''
    for cfg in configurations[:2]:
        ## Only check EE 2011AB
        #if (not 'EE_lowR9' in cfg.name) or (not 'AB' in cfg.name):
            #continue
        ### Only check 2011AB
        #if not 'AB' in cfg.name:
            #continue
        ## MC, EB, 2011A+B, 1 of 4 statistically independent tests
        plotter = FitResultPlotter(cfg.sources[1], cfg.getters_true[1], cfg.xtitle, 
                                  cfg.ytitle, title = 'MC Truth 1', name=cfg.name)                          

        for i in range(1,5):
            plotter.sources = cfg.sources[i]
            plotter.getters = cfg.getters_true[i]
            plotter.title = 'MC Truth %d' % i
            plotter.getdata()
            plotter.makegraph()

        for i in range(1,5):
            plotter.sources = cfg.sources[i]
            plotter.getters = cfg.getters_fit[i]
            plotter.title = 'MC Fit %d' % i
            plotter.getdata()
            plotter.makegraph()

        canvases.next('c_' + cfg.name).SetGrid()
        plotter.plotall(title = cfg.title,
                        xrange = (0, 80),
                        legend_position = 'topright')
        plotter.graphs[0].Draw('p')
        canvases.canvases[-1].Modified()
        canvases.canvases[-1].Update()
        canvases.update()
        plotters.append(plotter)
Beispiel #33
0
def plot_sanity_checks(data):
    pdfname = '_'.join(['bananaPdf', data.GetName()])
    pdf = ROOT.RooNDKeysPdf(pdfname, pdfname, ROOT.RooArgList(mmMass, mmgMass),
                            data, "a", 1.5)

    canvases.next(pdf.GetName() + '_mmgMassProj')
    plot = mmgMass.frame(roo.Range(60, 120))
    data.plotOn(plot)
    pdf.plotOn(plot)
    plot.Draw()

    canvases.next(pdf.GetName() + '_mmMassProj')
    plot = mmMass.frame(roo.Range(10, 120))
    data.plotOn(plot)
    pdf.plotOn(plot)
    plot.Draw()

    canvases.next(pdf.GetName()).SetGrid()
    h_pdf = pdf.createHistogram('h_' + pdf.GetName(), mmMass,
                                roo.Binning(40, 40, 80),
                                roo.YVar(mmgMass, roo.Binning(40, 70, 110)))
    h_pdf.Draw("cont1")

    canvases.next(data.GetName()).SetGrid()
    h_data = data.createHistogram(mmMass, mmgMass, 130, 100, '',
                                  'h_' + data.GetName())
    h_data.GetXaxis().SetRangeUser(40, 80)
    h_data.GetYaxis().SetRangeUser(70, 110)
    h_data.Draw("cont1")

    canvases.next('_'.join([pdf.GetName(), 'mmgMassSlices']))
    plot = mmgMass.frame(roo.Range(60, 120))
    for mmmassval, color in zip([55, 60, 65, 70],
                                'Red Orange Green Blue'.split()):
        mmMass.setVal(mmmassval)
        color = getattr(ROOT, 'k' + color)
        pdf.plotOn(plot, roo.LineColor(color))

    plot.Draw()
    canvases.update()
Beispiel #34
0
def plot_nominal_mmgmass_with_shape_and_fit():
    """Plot the nominal MC mmg mass data overlayed with the pdf shape and
    fit."""
    canvases.next('NominalMmgMassWithShapeAndFit')
    plot = mmgMass.frame(roo.Range(75, 105))
    plot.SetTitle("m(#mu#mu#gamma) overlayed with PDF shape (blue) "
                  "and it's parametrized fit (dashed red)")
    data.plotOn(plot)
    ## Define the mmg mass model.
    mmgMassPdf = ParametrizedKeysPdf('mmgMassPdf', 'mmgMassPdf', mmgMass,
                                     massPeak, massWidth, data,
                                     ROOT.RooKeysPdf.NoMirror, 1.5)
    ## PDF shape
    mmgMassPdf.shape.plotOn(plot)
    ## Parametrized fit of the PDF shape
    mmgMassPdf.fitTo(data, roo.Range(60, 120), roo.PrintLevel(-1))
    mmgMassPdf.plotOn(plot, roo.LineColor(ROOT.kRed),
                      roo.LineStyle(ROOT.kDashed))
    plot.Draw()
    sshape = 100 * (mmgMassPdf.shapemode / mZ.getVal() - 1)
    rshape = 100 * mmgMassPdf.shapewidth / mmgMassPdf.shapemode
    Latex([
        's_{shape}: %.3f %%' % sshape,
        's_{fit}: %.3f #pm %.3f %%' % (massScale.getVal(),
                                       massScale.getError()),
        's_{fit} - s_{shape}: %.4f #pm %.4f %%' % (
            massScale.getVal() - sshape,
            massScale.getError()
            ),
        'r_{shape}: %.3f %%' % rshape,
        'r_{fit}: %.3f #pm %.3f %%' % (
            massRes.getVal(), massRes.getError()
            ),
        'r_{fit} - r_{shape}: %.4f #pm %.4f %%' % (
            massRes.getVal() - rshape,
            massRes.getError()),
        'r_{fit}/r_{shape}: %.4f #pm %.4f' % (
            massRes.getVal() / rshape,
            massRes.getError() / rshape),
        ], position=(0.2, 0.8)).draw()
Beispiel #35
0
def plot_phoeres_with_fit_for_multiple_smearings(name, stargets, rtargets,
                                                 colors, plotrange=(-30, 30)):
    """Plot the smeared photon energy response for a number of different
    smearings."""
    canvases.next(name).SetGrid()
    phoERes.setRange('plot', *plotrange)
    plot = phoERes.frame(roo.Range('plot'))
    #plot.SetTitle("MC with paremetrized fit for multiple smearing scenarious")
    plot.SetTitle("")
    slabels = []
    rlabels = []
    ## Loop over the various smearings.
    for starget, rtarget, color in zip(stargets, rtargets, colors):
        mydata = calibrator.get_smeared_data(starget, rtarget)
        phoEResPdf.fitTo(mydata, roo.PrintLevel(-1), roo.SumW2Error(False))
        mydata.plotOn(plot, roo.LineColor(color), roo.MarkerColor(color))
        phoEResPdf.plotOn(plot, roo.LineColor(color), roo.Range('plot'), roo.NormRange('plot'))
        slabels.append([
            's\' = % 3.f %%,  #Delta s_{fit} = % .2f #pm %.2f %%' % (
                starget, phoScale.getVal() - starget, phoScale.getError()
                ),
            ])
        rlabels.append([
            'r\' = %3.1f %%,  #Delta r_{fit} = % .2f #pm %.2f %%' % (
                rtarget, phoRes.getVal() - rtarget, phoRes.getError()
                ),
            ])
    ## End of loop over the various smearings.
    plot.Draw()
    for i, (labels, color) in enumerate(zip(slabels, colors)):
        latex = Latex(labels, position=(0.18, 0.85 - i*0.055))
        latex.SetTextColor(color)
        latex.draw()
    for i, (labels, color) in enumerate(zip(rlabels, colors)):
        latex = Latex(labels,
                      position=(0.18, 0.85 - (len(slabels) + 1) * 0.055 -  i * 0.055))
        latex.SetTextColor(color)
        latex.draw()
Beispiel #36
0
def plot_training_phoeres_with_shape_and_fit():
    canvases.next('TrainingSampleWithShapeAndFit')
    plot = phoERes.frame(roo.Range(-7.5, 7.5))
    plot.SetTitle(
        "MC overlayed with PDF shape (blue) and it's parametrized fit"
        "(dashed red)")
    data.plotOn(plot)
    phoEResPdf.shape.plotOn(plot)
    phoEResPdf.plotOn(plot, roo.LineColor(ROOT.kRed),
                      roo.LineStyle(ROOT.kDashed))
    plot.Draw()
    Latex([
        's_{shape}: %.3f %%' % phoEResPdf.shapemode,
        's_{fit}: %.3f #pm %.3f %%' % (phoScale.getVal(), phoScale.getError()),
        's_{fit} - s_{shape}: %.4f #pm %.4f' %
        (phoScale.getVal() - phoEResPdf.shapemode, phoScale.getError()),
        'r_{shape}: %.3f %%' % phoEResPdf.shapewidth,
        'r_{fit}: %.3f #pm %.3f %%' % (phoRes.getVal(), phoRes.getError()),
        'r_{fit}/r_{shape}: %.4f #pm %.4f' %
        (phoRes.getVal() / phoEResPdf.shapewidth,
         phoRes.getError() / phoEResPdf.shapewidth),
    ],
          position=(0.2, 0.75)).draw()
Beispiel #37
0
def plot_multiple_models():
    linestyles = [
        ROOT.kDashed,
        ROOT.kSolid,
        ROOT.kDotted,
        #ROOT.kDashDotted,
        #ROOT.kSolid
        ]
    colors = [
        ROOT.kRed + 1,
        ROOT.kBlack,
        ROOT.kBlue + 1,
        ]
    build_multiple_models()
    canvases.next('rho_scan')
    phoERes.setUnit("%")
    plot = phoERes.frame(roo.Range(-5, 5))
    plot.SetTitle("")
    data.plotOn(plot)
    for i, model in enumerate(models):
        model.shape.plotOn(plot, roo.LineColor(colors[i]),
                           roo.LineStyle(linestyles[i]))
    plot.Draw()
Beispiel #38
0
def plot_training_phoeres_with_shape_and_fit():
    """Plot the nominal MC photon energy smearing overlayed with the pdf shape
    and fit."""
    canvases.next('TrainingPhoEResWithShapeAndFit')
    plot = phoERes.frame(roo.Range(-7.5, 5))
    plot.SetTitle("Photon energy smearing overlayed with PDF shape (blue) "
                  "and it's parametrized fit (dashed red)")
    data.plotOn(plot)
    ## Define model for the photon energy smearing function Ereco/Etrue - 1.
    phoEResPdf = ParametrizedKeysPdf('phoEResPdf', 'phoEResPdf', phoERes,
                                     phoScale, phoRes, data,
                                     ROOT.RooKeysPdf.NoMirror, 1.5)
    ## PDF shape
    phoEResPdf.shape.plotOn(plot)
    ## Parametrized fit of the PDF shape
    phoEResPdf.fitTo(data, roo.Range(-50, 50), roo.PrintLevel(-1))
    phoEResPdf.plotOn(plot, roo.LineColor(ROOT.kRed),
                      roo.LineStyle(ROOT.kDashed))
    plot.Draw()
    Latex([
        's_{shape}: %.3f %%' % phoEResPdf.shapemode,
        's_{fit}: %.3f #pm %.3f %%' % (phoScale.getVal(),
                                       phoScale.getError()),
        's_{fit} - s_{shape}: %.4f #pm %.4f %%' % (
            phoScale.getVal() - phoEResPdf.shapemode,
            phoScale.getError()
            ),
        'r_{shape}: %.3f %%' % phoEResPdf.shapewidth,
        'r_{fit}: %.3f #pm %.3f %%' % (phoRes.getVal(), phoRes.getError()),
        'r_{fit} - r_{shape}: %.4f #pm %.4f %%' % (
            phoRes.getVal() - phoEResPdf.shapewidth,
            phoRes.getError()),
        'r_{fit}/r_{shape}: %.4f #pm %.4f' % (
            phoRes.getVal() / phoEResPdf.shapewidth,
            phoRes.getError() / phoEResPdf.shapewidth),
        ], position=(0.2, 0.8)).draw()
Beispiel #39
0
 def plot_quantiles(self, granularity=100):
     '''
     Plots the quantile curve.
     '''
     ## Calculate the quantiles if need be
     if not hasattr(self, 'quantiles'):
         self.get_quantiles(granularity)
     canvas = canvases.next(self.GetName() + '_quant')
     canvas.SetGrid()
     self.quantiles.Draw('al')
     ## Decorate the axis
     self.quantiles.GetXaxis().SetTitle('Fraction of %s (%%)' %
                                        self.GetYaxis().GetTitle())
     self.quantiles.GetYaxis().SetTitle(self.GetXaxis().GetTitle())
     self.quantiles.GetYaxis().SetRangeUser(10., self.quantiles.Eval(95.))
     canvases.update()
Beispiel #40
0
 def draw_plot(self, frame):
     ## Draw the plot on a canvas
     #print "## Draw the plot on a canvas"
     canvases.wwidth = 600
     canvases.wheight = 600
     canvas = canvases.next(self.name)
     canvas.SetGrid()
     canvas.SetLeftMargin(0.15)
     canvas.SetTopMargin(0.1)
     frame.GetYaxis().SetTitleOffset(1.0)
     frame.GetYaxis().SetTitle('E_{#gamma} Resolution '
                               '#sigma_{eff}/E (%)')
     if self.yrange:
         frame.GetYaxis().SetRangeUser(*self.yrange)
     frame.Draw()
     canvas.RedrawAxis('g')
     canvases.update()
Beispiel #41
0
        ROOT.kRed,
        ROOT.kBlack,
        ROOT.kBlue,
    ],
    ltitles=['Spring11 MC', 'Summer11 MC', 'Winter11 MC'],
    drawopts='e0 e0hist e0'.split(),
    markerstyles=[20, 21, 22],
    normalize_to_unit_area=True,
    legendkwargs=dict(position=(0.2, 0.9, 0.475, 0.7)),
    labels_layout=(0.2, 0.6),
)

plots.append(plot)

#### Meat
c1 = canvases.next(plot.name)
plot.draw()
c1.SetGrid()
c1.RedrawAxis()
c1.Update()

## Plot Endcaps
plot = plot.clone(name='r9_EE')
plots.append(plot)
plot.cuts.remove('isEB')
plot.cuts.append('!isEB')
plot.labels.remove('barrel')
plot.labels.append('endcaps')
c1 = canvases.next(plot.name)
plot.draw()
c1.SetGrid()
Beispiel #42
0
## End of main()

##------------------------------------------------------------------------------
sw = ROOT.TStopwatch()
sw.Start()

init()
get_data()

phoEResPdf = ParametrizedKeysPdf('phoEResPdf', 'phoEResPdf', phoERes, phoScale,
                                 phoRes, data, ROOT.RooKeysPdf.NoMirror, 1.5)

phoEResPdf.fitTo(data, roo.Range(-50, 50))

canvases.next('phoEResPdf').SetGrid()
plot = phoERes.frame(roo.Range(-10, 10))
data.plotOn(plot)
phoEResPdf.plotOn(plot)
phoEResPdf.paramOn(plot)
plot.Draw()

t = w.factory('t[0,-1,1]')
t.SetTitle('log(E_{reco}^{#gamma}/E_{gen}^{#gamma})')
tfunc = w.factory('expr::tfunc("log(0.01 * phoERes + 1)", {phoERes})')
tfunc.SetName('t')
data.addColumn(tfunc)

## Build the model for log(Ereco/Egen) ft2(t2|r,s)
t2pdf = LogPhoeresKeysPdf('t2pdf',
                          't2pdf',
Beispiel #43
0
    )
    frp.getdata()
    frp.makegraph()

    ## New Baseline
    frp.sources = zip(cfg.filenames, cfg.wsnames, cfg.sreco_snapshots)
    frp.getters = var_vs_pt('#Deltas')
    frp.title = 'Baseline'
    frp.getdata()
    frp.makegraph()

    ## True
    frp.sources = zip(cfg.filenames, cfg.wsnames, cfg.strue_snapshots)
    frp.getters = var_vs_pt('#Deltas')
    frp.title = 'MC Truth'
    frp.getdata()
    frp.makegraph()

    ## Compare New Baseline, MC PDF and MC truth scale
    canvases.next('s_' + cfg.name).SetGrid()
    frp.plotall(title=cfg.title,
                styles=[20, 25, 22],
                colors=[kBlue, kRed, kBlack])

    plotters.append(frp)

## end of loop over cfgs

if __name__ == '__main__':
    import user
Beispiel #44
0
## Make the pull plots
defaultp = pull.frame()
binp = pull.frame()
medianp = pull.frame()
pdgp = pull.frame()

defaultp.SetTitle('Default RooFit: Any Bin Content, Interpolate Bin Center')
binp.SetTitle('Bin Content > %d, Interpolate Bin Center' % minBinContent)
medianp.SetTitle('Bin Content > %d, Interpolate Bin Median' % minBinContent)
pdgp.SetTitle('(Almost) PDG: Bin Content > %d, Integrate over Bin' %
              minBinContent)

## Make the canvas
canvases.wwidth = 800
canvases.wheight = 800
c1 = canvases.next('Fit_Examples')
c1.Divide(2, 3)

## Display the plot with y log scale
for i, p, logy in zip([1, 2, 3, 4, 5, 6], [
        log_plot, lin_plot, log_plot_bins, lin_plot_bins, log_plot_medians,
        lin_plot_medians
], [True, False, True, False, True, False]):
    c1.cd(i)
    if logy:
        ROOT.gPad.SetLogy()
    p.Draw()

c1.Update()

canvases.wwidth = 800
Beispiel #45
0
                          't2pdf',
                          phoERes,
                          t,
                          phoScale,
                          phoRes,
                          data,
                          rho=1.5)

## Build the model for fT(t|s,r) = fT1(t1) * fT2(t2|s,r)
t.setRange(5, 10)
t.setBins(1000, "cache")
tpdf = ROOT.RooFFTConvPdf('tpdf', 'tpdf', t, t1pdf, t2pdf)
tpdf.setBufferFraction(0.1)

## Plot fT1(t1) with training data.
canvases.next('t1pdf').SetGrid()
t.setRange(5, 10)
t.SetTitle('log(m_{#mu#mu#gamma,E_{gen}^{#gamma}}^{2} - m_{#mu#mu}^{2})')
plot = t.frame(roo.Range(6, 9))
t1data.plotOn(plot)
t1pdf.shape.plotOn(plot)
t1pdf.plotOn(plot, roo.LineColor(ROOT.kRed), roo.LineStyle(ROOT.kDashed))
plot.Draw()
Latex([
    's_{shape}: %.3f' % t1pdf.shapemode,
    's_{fit}: %.3f #pm %.3f' % (t1mode.getVal(), t1mode.getError()),
    's_{fit} - s_{shape}: %.4f #pm %.4f' %
    (t1mode.getVal() - t1pdf.shapemode, t1mode.getError()),
    'r_{shape}: %.3f' % t1pdf.shapewidth,
    'r_{fit}: %.3f #pm %.3f' % (t1width.getVal(), t1width.getError()),
    'r_{fit} - r_{shape}: %.4f #pm %.4f' %
Beispiel #46
0
def test_substituting_for_mmgMassPhoGenE():
    pdfname = '_'.join(['pdf_mmMass_mmgMassPhoGenE', data.GetName()])
    pdf_mmMass_mmgMassPhoGenE = ROOT.RooNDKeysPdf(
        pdfname, pdfname, ROOT.RooArgList(mmMass, mmgMassPhoGenE), data, "a",
        1.5)
    ## Test substituting for mmgMassPhoGenE
    ## This formula is approximate for s = phoERes << 1
    ## 1/(1+s) - 1 ~ -s
    ## chachebins = ROOT.RooUniformBinning(-10, 10, 2, 'cache')
    ## phoERes.setBinning(chachebins)
    phoERes.setBins(3, 'cache')

    mmgMassFunc = w.factory('''expr::mmgMassFunc(
        "sqrt(mmgMass^2 - 0.01 * phoERes * (mmgMass^2 - mmMass^2))",
        {mmMass, mmgMass, phoERes}
            )''')
    ## mmgMassFunc = w.factory('''cexpr::mmgMassFunc(
    ##     "sqrt(mmgMass*mmgMass - 0.01 * phoERes * (mmgMass*mmgMass - mmMass*mmMass))",
    ##     {mmMass, mmgMass, phoERes}
    ##         )'''
    ##     )

    cust = ROOT.RooCustomizer(pdf_mmMass_mmgMassPhoGenE, 'subs')
    cust.replaceArg(mmgMassPhoGenE, mmgMassFunc)
    pdf_mmMass_mmgMass = cust.build()
    pdf_mmMass_mmgMass.addOwnedComponents(ROOT.RooArgSet(mmgMassFunc))
    pdf_mmMass_mmgMass.SetName('pdf_mmMass_mmgMass')

    ## WARNING: The caching related lines below cause segmentation violation!
    ## pdf_mmMass_mmgMass.setNormValueCaching(2)

    ## print '-- Before chache --'
    ## w.Print()

    ## print '-- Calculating cache ... --'
    ## ## Trigger the cache calculation
    ## pdf_mmMass_mmgMass.getVal(ROOT.RooArgSet(mmMass, mmgMass))

    ## print '-- After chache --'
    ## w.Print()

    pdf = pdf_mmMass_mmgMassPhoGenE
    canvases.next(pdf.GetName()).SetGrid()
    h_pdf = pdf.createHistogram(
        'h_' + pdf.GetName(), mmMass, roo.Binning(40, 40, 80),
        roo.YVar(mmgMassPhoGenE, roo.Binning(40, 70, 110)))
    h_pdf.Draw("cont1")

    pdf = pdf_mmMass_mmgMass
    phoERes.setVal(0)
    canvases.next(pdf.GetName() + '_s0').SetGrid()
    h_pdf = pdf.createHistogram('h_' + pdf.GetName() + '_s0', mmMass,
                                roo.Binning(40, 40, 80),
                                roo.YVar(mmgMass, roo.Binning(40, 70, 110)))
    h_pdf.Draw("cont1")

    phoERes.setVal(10)
    canvases.next(pdf.GetName() + '_s10').SetGrid()
    h_pdf = pdf.createHistogram('h_' + pdf.GetName() + '_s10', mmMass,
                                roo.Binning(40, 40, 80),
                                roo.YVar(mmgMass, roo.Binning(40, 70, 110)))
    h_pdf.Draw("cont1")

    phoERes.setVal(-10)
    canvases.next(pdf.GetName() + '_sm10').SetGrid()
    h_pdf = pdf.createHistogram('h_' + pdf.GetName() + '_sm10', mmMass,
                                roo.Binning(40, 40, 80),
                                roo.YVar(mmgMass, roo.Binning(40, 70, 110)))
    h_pdf.Draw("cont1")
Beispiel #47
0
## pdf = w.factory('''MomentMorph::{pdf}(
##                        phoScale, {{mmgMass}}, {{{pdflist}}}, {{{mreflist}}}
##                        )'''.format(pdf=pdfname,
##                                    pdflist=','.join(spdflist),
##                                    mreflist=','.join(sreflist)))
## w.Import(pdf)

w.Print()

pdf.fitTo(data, roo.Range(60, 120), roo.Minos())

tdata = calibrator.get_smeared_data(stest, rtest)
tdata.SetName('tdata')
pdf.fitTo(tdata, roo.Range(60, 120), roo.Minos())
calibrator.phoEResPdf.fitTo(tdata, roo.Range(-50, 50))
canvases.next('test_fit')
plot = mmgMass.frame(roo.Range(70, 110))
tdata.plotOn(plot)
pdf.plotOn(plot)
plot.Draw()
Latex(
    [
        's_{true}: %.3f #pm %.3f %%' %
        (calibrator.s.getVal(), calibrator.s.getError()),
        ## 's_{fit}: %.3f #pm %.3f %%' % (phoScale.getVal(),
        ##                                phoScale.getError()),
        'r_{true}: %.3f #pm %.3f %%' %
        (calibrator.r.getVal(), calibrator.r.getError()),
        'r_{fit}: %.3f ^{+%.3f}_{%.3f} %%' %
        (phoRes.getVal(), phoRes.getErrorHi(), phoRes.getErrorLo()),
    ],
Beispiel #48
0
t.setVal(0)
t2pdf = LogPhoeresKeysPdf('t2pdf', 't2pdf', phoERes, t, phoScale, phoRes, data,
                          rho=1.5)

## Build the model for fT(t|s,r) = fT1(t1) * fT2(t2|s,r)
t.setRange(*t1range)
mmMass.setRange(*mmMass_range)
t.setBins(100, "cache")
mmMass.setBins(20, "cache")
xtpdf = ROOT.RooFFTConvPdf('tpdf', 'tpdf', t, xt1pdf, t2pdf)
xtpdf.setBufferFraction(0)
xtpdf.setCacheObservables(ROOT.RooArgSet(mmMass, t))
xtpdf.setNormValueCaching(2)

## Plot fXT1(x, t1) with training data.
c1 = canvases.next('xt1')
c1.SetWindowSize(800, 400)
c1.Divide(2,1)
c1.cd(1).SetGrid()
t.setRange(*t1range)
t.SetTitle('log(m_{#mu#mu#gamma,E_{gen}^{#gamma}}^{2} - m_{#mu#mu}^{2})')
hxt1d = xt1data.createHistogram(mmMass, t, 100, 100, '', 'hxt1')
hxt1d.SetTitle('Data')
hxt1d.GetXaxis().SetTitle(mmMass.GetTitle() + ' (GeV)')
hxt1d.GetYaxis().SetTitle(t.GetTitle())
hxt1d.GetXaxis().SetRangeUser(*mmMass_range)
hxt1d.GetYaxis().SetRangeUser(*t1range)
hxt1d.Draw('cont0')

c1.cd(2).SetGrid()
hxt1f = xt1pdf.createHistogram('hxt1f', mmMass, roo.YVar(t))
Beispiel #49
0
    variable of a given name and x and ex are pt bins."""
    return (
        lambda ws, i=iter(bincenters): i.next(),  # x
        lambda ws: ws.var(name).getVal(),  # y
        lambda ws, i=iter(binhalfwidths): i.next(),  # ex
        lambda ws: ws.var(name).getError(),  # ey
    )


frp = FitResultPlotter(
    sources=zip(filenames, wsnames, strue_snapshots),
    getters=var_vs_pt('#Deltas'),
    xtitle='E_{T}^{#gamma} (GeV)',
    ytitle='s_{true} = E^{#gamma}_{reco}/E^{#gamma}_{gen} - 1 (%)')

canvases.next()
frp.main()
print frp.ytitle
frp.dump()
print

## MC truth resolution
# canvases.next()
# frp.main(getters = var_vs_pt('#sigma'),
#          ytitle = '#sigma(E^{#gamma}_{reco}/E^{#gamma}_{gen})')
# frp.dump()

## Scale from mmg
canvases.next()
frp.main(sources=zip(filenames, wsnames, sreco_snapshots),
         getters=var_vs_pt('#Deltas'),
Beispiel #50
0
        ytitle='s_{gen} = E^{#gamma}_{reco}/E^{#gamma}_{gen} - 1 (%)',
    )
    for fitrange, title in zip(['FitRange' + x for x in '65 68 71'.split()],
                               '-3% Nominal +3%'.split()):
        filenames = [os.path.join(path, 'strue_%s.root' % fitrange)] * n
        snapshots = [
            snapshot.format(f=fitrange, c=etar9.name, l=lo, h=hi)
            for lo, hi in binedges
        ]
        frp.sources = zip(filenames, workspaces, snapshots)
        frp.getters = var_vs_pt('#Deltas')
        frp.title = title
        frp.getdata()
        frp.makegraph()

    canvases.next('strue_FitRangeSystematics' + etar9.name)
    frp.plotall(title=etar9.title)
    plotters.append(frp)

    graph = frp.graphs[0].Clone('g_' + etar9.name)
    for i in range(graph.GetN()):
        x = graph.GetX()[i]
        ylo = min([g.GetY()[i] for g in frp.graphs])
        yhi = max([g.GetY()[i] for g in frp.graphs])
        graph.SetPoint(i, x, 0.5 * (yhi - ylo))
        graph.SetPointError(i, graph.GetEX()[i], 0)

    plotter.graphs.append(graph)
    plotter.titles.append(etar9.title)

canvases.next('strue_FitRangeSystematics')
Beispiel #51
0
    ## Proposal 2
    frp.sources = zip(cfg.filenames2, cfg.wsnames, cfg.sreco_snapshots2)
    frp.getters = var_vs_pt('#Deltas')
    frp.title = 'm_{#mu#mu} < 90 GeV'
    frp.getdata()
    frp.makegraph()

    ## True
    frp.sources = zip(cfg.filenames2, cfg.wsnames, cfg.strue_snapshots)
    frp.getters = var_vs_pt('#Deltas')
    frp.title = 'MC Truth'
    frp.getdata()
    frp.makegraph()

    ## Compare Proposal 1, Baseline and MC truth scale
    canvases.next('s_' + cfg.name).SetGrid()
    frp.plotall(title = cfg.title,
                styles = [20, 25, 22],
                colors = [kBlue, kRed, kBlack])

    plotters.append(frp)

    #------------------------------------------------------------------------------
    ## S width Comparison
    ## Baseline
    ## frp = FitResultPlotter(
    ##     sources = zip(cfg.filenames, cfg.wsnames, cfg.sreco_snapshots),
    ##     getters = (
    ##         lambda ws, i = iter(bincenters): i.next(),    # x
    ##         lambda ws, i = iter(lyonmc[cfg.name]['sigma']): i.next(),    # y
    ##         lambda ws, i = iter(binhalfwidths): i.next(), # ex
Beispiel #52
0
    ## mmMass < 90 GeV
    frp.sources = zip(cfg.filenames4, cfg.wsnames, cfg.sreco_snapshots4)
    frp.getters = var_vs_pt('#Deltas')
    frp.title = 'm_{#mu#mu} + m_{#mu#mu#gamma} < 190 GeV'
    frp.getdata()
    frp.makegraph()

    ## True
    frp.sources = zip(cfg.filenames3, cfg.wsnames, cfg.strue_snapshots)
    frp.getters = var_vs_pt('#Deltas')
    frp.title = 'MC Truth'
    frp.getdata()
    frp.makegraph()

    ## Compare Proposal 1, Baseline and MC truth scale
    canvases.next('s_' + cfg.name).SetGrid()
    frp.plotall(title = cfg.title,
                styles = [20, 25, 26, 22],
                colors = [kBlue, kRed, kGreen, kBlack])

    plotters.append(frp)

    #------------------------------------------------------------------------------
    ## S width Comparison
    ## Baseline
    ## frp = FitResultPlotter(
    ##     sources = zip(cfg.filenames, cfg.wsnames, cfg.sreco_snapshots),
    ##     getters = (
    ##         lambda ws, i = iter(bincenters): i.next(),    # x
    ##         lambda ws, i = iter(lyonmc[cfg.name]['sigma']): i.next(),    # y
    ##         lambda ws, i = iter(binhalfwidths): i.next(), # ex
Beispiel #53
0
def plotxy(pdf, xyexpr='x:y'):
    h_pdf = pdf.createHistogram(xyexpr)
    h_pdf.SetLineColor(ROOT.kBlue)
    canvases.next(h_pdf.GetName())
    h_pdf.Draw('surf')
Beispiel #54
0
                          '!isFSR', 'mmgMass < 200', 'mmMass < 200',
                          'phoPt > 15', 'Entry$ < 500000'
                      ])
mmgMassIsrData = dataset.get(variable=mmgMass)
m1gOplusM2gIsrData = dataset.get(variable=m1gOplusM2g)

isrData.merge(mmgMassIsrData, m1gOplusM2gIsrData)

## Fit the model to the data
mmMassPdf.fitTo(isrData, roofit.Range(60, 120))

## Plot the data and the fit
mmPlot = mmMass.frame(roofit.Range(60, 120))
isrData.plotOn(mmPlot)
mmMassPdf.plotOn(mmPlot)
canvases.next('mmMass')
mmPlot.Draw()

## Model for the reconstructed mmg mass of the ISR through transformation
# mmgMassIsrPdf = ROOT.RooFFTConvPdf('mmgMassIsrPdf', 'mmgMassIsrPdf', mmMassFunc,
#                                    mmMass, zmmGenShape, mmMassRes)
mmgMassPdf = w.factory('Voigtian::mmgMassPdf(mmMassFunc, mmMean, GZ, mmRes)')

## Plot the mmg mass data and model overlaid without fitting (!)
mmgPlot = mmgMass.frame(roofit.Range(60, 200))
isrData.plotOn(mmgPlot)
isrData_m1gOplusM2g = isrData.reduce(ROOT.RooArgSet(m1gOplusM2g))
isrData_m1gOplusM2g_binned = isrData_m1gOplusM2g.binnedClone()
isrData_m1gOplusM2g.get().find('m1gOplusM2g').setBins(40)
isrData_m1gOplusM2g_binned2 = isrData_m1gOplusM2g.binnedClone()
Beispiel #55
0
    colors=[
        ROOT.kRed,
        ROOT.kBlack,
        ROOT.kBlue,
    ],
    ltitles=['Spring11 MC', 'Summer11 MC', 'Winter11 MC'],
    drawopts='e0 e0hist e0'.split(),
    markerstyles=[20, 21, 22],
    normalize_to_unit_area=True,
    legendkwargs=dict(position=(0.675, 0.9, 0.95, 0.7)),
)

plots.append(plot)

#### Meat
c1 = canvases.next('raw_over_gen_module_p4')
plot.draw()
c1.SetGrid()
c1.RedrawAxis()
c1.Update()

## Plot Module -4
plots.append(
    plot.clone(
        name='mm4',
        cuts=[
            '!isEBEtaGap',
            '!isEBPhiGap',
            ## Module +4
            '-1.44 < scEta & scEta < -1.16',
        ],
Beispiel #56
0
def process_monte_carlo():
    '''
    Get, fit and plot monte carlo.
    '''
    global fitdata1
    fitdata1 = fit_calibrator.get_smeared_data(
        sfit, rfit, 'fitdata1', 'fitdata1', True
        )
    fitdata1.reduce(ROOT.RooArgSet(mmgMass, mmMass))
    fitdata1.append(data['zj1'])
    fitdata1.SetName('fitdata1')
    data['fit1'] = fitdata1

    if reduce_data == True:
        fitdata1 = fitdata1.reduce(roo.Range(reduced_entries,
                                           fitdata1.numEntries()))
    check_timer('3. get fit data (%d entries)' % fitdata1.numEntries())

    nll = pm.createNLL(fitdata1, roo.Range('fit'), roo.NumCPU(8))

    minuit = ROOT.RooMinuit(nll)
    minuit.setProfile()
    minuit.setVerbose()

    phoScale.setError(1)
    phoRes.setError(1)

    ## Initial HESSE
    status = minuit.hesse()
    fitres = minuit.save(name + '_fitres1_inithesse')
    w.Import(fitres, fitres.GetName())
    check_timer('4. initial hesse (status: %d)' % status)

    ## Minimization
    minuit.setStrategy(2)
    status = minuit.migrad()
    fitres = minuit.save(name + '_fitres2_migrad')
    w.Import(fitres, fitres.GetName())
    check_timer('5. migrad (status: %d)' % status)

    ## Parabolic errors
    status = minuit.hesse()
    fitres = minuit.save(name + '_fitres3_hesse')
    w.Import(fitres, fitres.GetName())
    check_timer('6. hesse (status: %d)' % status)

    ## Minos errors
    status = minuit.minos()
    fitres = minuit.save(name + '_fitres4_minos')
    w.Import(fitres, fitres.GetName())
    check_timer('7. minos (status: %d)' % status)

    #fres = pm.fitTo(fitdata1, roo.SumW2Error(True),
                    #roo.Range('fit'),
                    ## roo.Strategy(2),
                    #roo.InitialHesse(True),
                    #roo.Minos(),
                    #roo.Verbose(True),
                    #roo.NumCPU(8), roo.Save(), roo.Timer())

    signal_model._phorhist.GetXaxis().SetRangeUser(75, 105)
    signal_model._phorhist.GetYaxis().SetRangeUser(0, 15)
    signal_model._phorhist.GetXaxis().SetTitle('%s (%s)' % (mmgMass.GetTitle(),
                                                  mmgMass.getUnit()))
    signal_model._phorhist.GetYaxis().SetTitle('E^{#gamma} Resolution (%)')
    signal_model._phorhist.GetZaxis().SetTitle('Probability Density (1/GeV/%)')
    signal_model._phorhist.SetTitle(latex_title)
    signal_model._phorhist.GetXaxis().SetTitleOffset(1.5)
    signal_model._phorhist.GetYaxis().SetTitleOffset(1.5)
    signal_model._phorhist.GetZaxis().SetTitleOffset(1.5)
    signal_model._phorhist.SetStats(False)
    canvases.next(name + '_phorhist')
    signal_model._phorhist.Draw('surf1')

    global graph
    graph = signal_model.make_mctrue_graph()
    graph.GetXaxis().SetTitle('E^{#gamma} resolution (%)')
    graph.GetYaxis().SetTitle('m_{#mu^{+}#mu^{-}#gamma} effective #sigma (GeV)')
    graph.SetTitle(latex_title)
    canvases.next(name + '_mwidth_vs_phor').SetGrid()
    graph.Draw('ap')

    mmgMass.setBins(80)
    plot = mmgMass.frame(roo.Range('plot'))
    plot.SetTitle('Fall11 MC, ' + latex_title)
    fitdata1.plotOn(plot)
    pm.plotOn(plot, roo.Range('plot'), roo.NormRange('plot'))
    pm.plotOn(plot, roo.Range('plot'), roo.NormRange('plot'),
              roo.Components('*zj*'), roo.LineStyle(ROOT.kDashed))     
    canvases.next(name + '_fit').SetGrid()
    plot.Draw()
    ## Estimate the MC truth phos and phor:
    old_precision = set_default_integrator_precision(2e-9, 2e-9)
    calibrator0.s.setRange(-15, 15)
    calibrator0.r.setRange(0,25)
    calibrator0.phoEResPdf.fitTo(fitdata1, roo.Range(-50, 50), roo.Strategy(2))
    set_default_integrator_precision(*old_precision)
    set_mc_truth(calibrator0.s, calibrator0.r)

    ## Store the result in the workspace:
    w.saveSnapshot('mc_fit', ROOT.RooArgSet(phoScale, phoRes,
                                            phoScaleTrue, phoResTrue))
    ## Draw the results on the canvas:
    Latex([
        'E^{#gamma} Scale (%)',
        '  MC Truth: %.2f #pm %.2f' % (calibrator0.s.getVal(),
                                       calibrator0.s.getError()),
        '  MC Fit: %.2f #pm %.2f ^{+%.2f}_{%.2f}' % (
            phoScale.getVal(), phoScale.getError(), phoScale.getErrorHi(),
            phoScale.getErrorLo()
            ),
        '',
        'E^{#gamma} Resolution (%)',
        '  MC Truth: %.2f #pm %.2f' % (calibrator0.r.getVal(),
                                       calibrator0.r.getError()),
        '  MC Fit: %.2f #pm %.2f ^{+%.2f}_{%.2f}' % (
            phoRes.getVal(), phoRes.getError(), phoRes.getErrorHi(),
            phoRes.getErrorLo()
            ),
        '',
            'Signal Purity (%)',
            '  MC Truth: %.2f' % fsr_purity,
            '  MC Fit: %.2f #pm %.2f' % (
                100 * w.var('signal_f').getVal(),
                100 * w.var('signal_f').getError()
                )
        ],
        position=(0.2, 0.8)
        ).draw()
    
    check_timer('8. fast plots')