コード例 #1
0
def addPlots(plots):
    from ROOT import RooCurve, RooHist, TLine, TLegend, RooPlot, RooAbsData, \
         SetOwnership, TGraphErrors
    #print plots
    outplot = plots[0].emptyClone(plots[0].GetName())
    newMax = 0.
    for item in range(0, int(plots[0].numItems())):
        itemName = plots[0].nameOf(item)
        firstItem = plots[0].getObject(item)
        if (type(firstItem) == RooCurve):
            fullCurve = clipCurve(firstItem)
            for plot in range(1, len(plots)):
                nextCurve = clipCurve(plots[plot].getCurve(itemName))
                fullCurve = RooCurve(fullCurve.GetName(), fullCurve.GetTitle(),
                                     fullCurve, nextCurve)
            fullCurve.addPoint(fullCurve.GetX()[fullCurve.GetN() - 1], 0)
            fullCurve.addPoint(fullCurve.GetX()[0], 0)
            fullCurve.SetLineColor(firstItem.GetLineColor())
            fullCurve.SetLineStyle(firstItem.GetLineStyle())
            fullCurve.SetFillColor(firstItem.GetFillColor())
            fullCurve.SetFillStyle(firstItem.GetFillStyle())
            outplot.addPlotable(fullCurve,
                                plots[0].getDrawOptions(itemName).Data())
            SetOwnership(fullCurve, False)

        if (type(firstItem) == RooHist):
            fullHist = firstItem
            for plot in range(1, len(plots)):
                nextHist = plots[plot].getHist(itemName)
                fullHist = addHists(fullHist, nextHist)
            fullHist.SetName(itemName)
            fullHist.SetTitle(firstItem.GetTitle())
            outplot.addPlotable(fullHist,
                                plots[0].getDrawOptions(itemName).Data())
            SetOwnership(fullHist, False)

        if (type(firstItem) == TGraphErrors):
            fullErrors = firstItem
            for plot in range(1, len(plots)):
                nextErrors = plots[plot].findObject(itemName)
                fullErrors = addErrors(fullErrors, nextErrors)
            fullErrors.SetName(itemName)
            fullErrors.SetTitle(firstItem.GetTitle())
            outplot.addObject(fullErrors,
                              plots[0].getDrawOptions(itemName).Data())
            SetOwnership(fullErrors, False)

        if (type(firstItem) == TLine):
            newLine = TLine(firstItem)
            newLine.SetY2(outplot.GetMaximum())
            SetOwnership(newLine, False)
            outplot.addObject(newLine)
            pass

        if (type(firstItem) == TLegend):
            newLeg = TLegend(firstItem)
            newLeg.SetY1NDC(0.92 - \
                            0.04*newLeg.GetListOfPrimitives().GetSize() - \
                            0.02)
            newLeg.SetY1(newLeg.GetY1NDC())
            SetOwnership(newLeg, False)
            outplot.addObject(newLeg)

    for plot in plots:
        newMax += plot.GetMaximum()

    outplot.SetMaximum(outplot.GetMaximum() * 1.3)
    outplot.GetYaxis().SetTitle("Events / GeV")
    ##     outplot.SetMaximum(newMax)
    ##         outplot.Print("v")

    return outplot
コード例 #2
0
            corrPull.SetMinimum(-5.)
            corrPull.SetMaximum(5.)
            corrPull.GetXaxis().SetTitle('m_{jj} (GeV)')
            corrPull.GetYaxis().SetTitle('pull (#sigma)')
            corrPull.GetXaxis().Set(corrPull.GetN(),
                                    outPlot.GetXaxis().GetXmin(),
                                    outPlot.GetXaxis().GetXmax())
            canpf = TCanvas()
            canpf.SetGridy()
            cans.append(canpf)
            corrPull.Draw('ap0')
            for item in range(0, int(outPlot.numItems())):
                firstItem = outPlot.getObject(item)
                if (type(firstItem) == TLine):
                    newLine = TLine(firstItem)
                    newLine.SetY1(4.)
                    newLine.SetY2(-4.)
                    newLine.Draw()
                    SetOwnership(newLine, False)
            pyroot_logon.cmsLabel(canpf, opts.lumi / 1000.)
            gPad.Update()
            canpf.Print('%s_%s_combined.png' % (opts.prefix, 'Pull'))
            canpf.Print('%s_%s_combined.pdf' % (opts.prefix, 'Pull'))
            corrPull.Write()

        gPad.Update()
        can.Print('%s_combined.png' % (plot))
        can.Print('%s_combined.pdf' % (plot))

    outFile.Close()
コード例 #3
0
def main(argv):
    VERBOSE = False

    # Read in command line args
    parser = OptionParser(usage=str(
        "\n" +
        "create_resource_correlation_plots.py [run period] [minversion] [version]\n"
        + "example: create_resource_correlation_plots.py 2015_03 15 20\n" +
        "\n" + "Input xml file should be created with\n" +
        "hdswif.py summary [workflow]"))

    parser.add_option("-V", "--verbose", dest="verbose", help="verbose output")

    (options, args) = parser.parse_args(argv)

    if (options.verbose):
        VERBOSE = True

    if len(args) != 3:
        print "Usage:"
        print "create_resource_correlation_plots.py [run period] [minversion] [version]"
        print "example: create_resource_correlation_plots.py 2015_03 15 20"
        exit()

    RUNPERIOD = ""
    VERSION = ""

    # RUNPERIOD is with underscore
    RUNPERIOD = args[0]
    RUNPERIOD = RUNPERIOD.replace('-', '_')
    RUNPERIOD_HYPHEN = RUNPERIOD.replace('_', '-')
    MINVERSION = int(args[1])
    VERSION = int(args[2])
    #assert MINVERSION < VERSION

    # List of all valid launch vers
    launchlist = []
    # Only run over launches that had table created in DB
    # Create MySQL connection
    db_conn = MySQLdb.connect(host='hallddb',
                              user='******',
                              passwd='',
                              db='farming')
    cursor = db_conn.cursor()
    for ver in range(MINVERSION, VERSION):
        formatted_vernum = "%02d" % ver
        tablename = 'cross_analysis_table_' + RUNPERIOD + '_ver' + formatted_vernum
        cursor.execute("SHOW TABLES LIKE '" + tablename + "'")
        results = cursor.fetchall()

        if len(results) == 0:
            print 'table ' + tablename + ' does NOT exist, skipping...'
        else:
            # print 'table ' + tablename + ' exists'
            launchlist.append(ver)

    print 'Launch vers to compare: ' + str(launchlist)

    # Dictionary between ver to be filled and TGraph
    dict_cpu_sec = {}
    dict_wall_sec = {}
    dict_mem_kb = {}
    dict_vmem_kb = {}
    dict_nevents = {}
    dict_input_copy_sec = {}
    dict_plugin_sec = {}
    # This one is a TH1F
    dict_nevents_diff = {}

    for ver in launchlist:
        dict_cpu_sec[ver] = TGraph()
        dict_wall_sec[ver] = TGraph()
        dict_mem_kb[ver] = TGraph()
        dict_vmem_kb[ver] = TGraph()
        dict_nevents[ver] = TGraph()
        dict_input_copy_sec[ver] = TGraph()
        dict_plugin_sec[ver] = TGraph()
        hname = 'dict_nevents_diff_' + format(ver, 2)
        dict_nevents_diff[ver] = TH1F(
            hname, ';#events ver' + str(VERSION) + ' - ver' + str(ver) + ';',
            400, -200, 200)

    # Create MySQL connection
    db_conn = MySQLdb.connect(host='hallddb',
                              user='******',
                              passwd='',
                              db='farming')
    cursor = db_conn.cursor()

    # Get all runs and files for the launch of interest (ver VERSION)
    formatted_mainvernum = "%02d" % VERSION
    tablename = 'cross_analysis_table_' + RUNPERIOD + '_ver' + formatted_mainvernum
    cursor.execute('SELECT run, file FROM ' + tablename)
    results = cursor.fetchall()

    # Keep the run/file combination in a set. The entries in the DB
    # should be unique, but this acts as a guard.
    set_run_file = Set()
    for row in results:
        run_file = format(row[0], 6) + '_' + format(row[1], 3)
        if run_file in set_run_file:
            print run_file + ' has already been accounted for, skipping'
            continue

        set_run_file.add(run_file)

    npoints = 0
    for run_file in set_run_file:
        npoints += 1
        if npoints % 500 == 0:
            print 'processing ' + format(npoints, 4) + ' / ' + str(
                len(set_run_file)) + '...'

        match = re.search(r"(\d\d\d\d\d\d)_(\d\d\d)", run_file)
        run_num = match.group(1)
        file_num = match.group(2)
        if VERBOSE:
            print '-------------------------------------------------------------------'
            print 'run = ' + str(run_num) + ' file = ' + str(file_num)

        # Grab results from DB for each version for this file,
        # fill into dicts

        # Dictionaries between [version] : [resources]
        cpu_sec = {}
        wall_sec = {}
        mem_kb = {}
        vmem_kb = {}
        nevents = {}
        input_copy_sec = {}
        plugin_sec = {}

        # Iterate over VERSION and launchlist.
        # Start with VERSION so that the condition for
        # filling the correlation plots gets satsified
        # for each of the vers in launchlist
        noValue = -999
        for ver in [VERSION] + launchlist:
            cpu_sec[ver] = noValue
            wall_sec[ver] = noValue
            mem_kb[ver] = noValue
            vmem_kb[ver] = noValue
            nevents[ver] = noValue
            input_copy_sec[ver] = noValue
            plugin_sec[ver] = noValue

            formatted_vernum = "%02d" % ver
            tablename = 'cross_analysis_table_' + RUNPERIOD + '_ver' + formatted_vernum
            cursor.execute('SELECT cpu_sec, wall_sec, mem_kb, vmem_kb, nevents, input_copy_sec, plugin_sec FROM ' \
                               + tablename + ' WHERE run = ' + str(run_num) + ' AND file = ' + str(file_num))
            results = cursor.fetchall()

            for row in results:
                cpu_sec[ver] = row[0]
                wall_sec[ver] = row[1]
                mem_kb[ver] = row[2]
                vmem_kb[ver] = row[3]
                nevents[ver] = row[4]
                input_copy_sec[ver] = row[5]
                plugin_sec[ver] = row[6]

            if ver == VERSION:
                # Nothing to fill for ver VERSION
                continue

            # Fill correlations plots
            if cpu_sec[VERSION] != noValue and cpu_sec[ver] != noValue:
                dict_cpu_sec[ver].SetPoint(dict_cpu_sec[ver].GetN(),
                                           float(cpu_sec[VERSION]) / 60,
                                           float(cpu_sec[ver]) / 60)
            if wall_sec[VERSION] != noValue and wall_sec[ver] != noValue:
                dict_wall_sec[ver].SetPoint(dict_wall_sec[ver].GetN(),
                                            float(wall_sec[VERSION]) / 60,
                                            float(wall_sec[ver]) / 60)
            if mem_kb[VERSION] != noValue and mem_kb[ver] != noValue:
                dict_mem_kb[ver].SetPoint(dict_mem_kb[ver].GetN(),
                                          float(mem_kb[VERSION]) / 1024 / 1024,
                                          float(mem_kb[ver]) / 1024 / 1024)
            if vmem_kb[VERSION] != noValue and vmem_kb[ver] != noValue:
                dict_vmem_kb[ver].SetPoint(
                    dict_vmem_kb[ver].GetN(),
                    float(vmem_kb[VERSION]) / 1024 / 1024,
                    float(vmem_kb[ver]) / 1024 / 1024)
            if nevents[VERSION] != noValue and nevents[ver] != noValue:
                dict_nevents[ver].SetPoint(dict_nevents[ver].GetN(),
                                           float(nevents[VERSION]),
                                           float(nevents[ver]))
                dict_nevents_diff[ver].Fill(
                    float(nevents[VERSION]) - float(nevents[ver]))
            if input_copy_sec[VERSION] != noValue and input_copy_sec[
                    ver] != noValue:
                dict_input_copy_sec[ver].SetPoint(
                    dict_input_copy_sec[ver].GetN(),
                    float(input_copy_sec[VERSION]) / 60,
                    float(input_copy_sec[ver]) / 60)
            if plugin_sec[VERSION] != noValue and plugin_sec[ver] != noValue:
                dict_plugin_sec[ver].SetPoint(dict_plugin_sec[ver].GetN(),
                                              float(plugin_sec[VERSION]) / 60,
                                              float(plugin_sec[ver]) / 60)

        # end of loop over vers
    # end of loop over run and files

    # Create html page
    htmlDir = 'resource_use'
    if not os.path.exists(htmlDir):
        os.makedirs(htmlDir)
    htmlfilename = htmlDir + '/resource_use_' + RUNPERIOD + '_ver' + format(
        VERSION, 2) + '.html'
    htmlfile = open(htmlfilename, 'w')

    htmlfile.write('<!-- launch ver ' + format(VERSION, 2) + '-->\n')
    htmlfile.write('<html>\n')
    htmlfile.write('\n')
    htmlfile.write('<head>\n')
    htmlfile.write(
        '<link rel="stylesheet" type="text/css" href="mystyle.css">\n')
    htmlfile.write(
        '<meta http-equiv="content-style-type" content="text/css">\n')
    htmlfile.write('<title>Offline Monitoring Results 2015-03</title>\n')
    htmlfile.write('\n')
    htmlfile.write('<style>\n')
    htmlfile.write(' #content iframe{\n')
    htmlfile.write('        overflow: hidden;\n')
    htmlfile.write('        width:100%;\n')
    htmlfile.write('        border:none;\n')
    htmlfile.write('        margin: 0;\n')
    htmlfile.write('        padding: 0;\n')
    htmlfile.write('    }\n')
    htmlfile.write('</style>\n')
    htmlfile.write('\n')
    htmlfile.write('<script language="javascript" type="text/javascript">\n')
    htmlfile.write('  function resizeIframe(obj) {\n')
    htmlfile.write(
        "    obj.style.height = obj.contentWindow.document.body.scrollHeight + 'px';\n"
    )
    htmlfile.write('  }\n')
    htmlfile.write('</script>\n')
    htmlfile.write('\n')
    htmlfile.write('</head>\n')
    htmlfile.write('\n')
    htmlfile.write('<body>\n')

    htmlfile.write('<h2>Comparison of ver' + format(VERSION, 2) +
                   ' and older</h2>\n')
    tablewidth = (VERSION - MINVERSION) * 20
    htmlfile.write('<table style="width:' + str(tablewidth) + '%">\n')
    # cpu_sec
    htmlfile.write('  <tr>\n')
    htmlfile.write('    <td colspan="' + str(VERSION - MINVERSION) +
                   '"> CPU time (min) </td>\n')
    htmlfile.write('  </tr>\n')
    htmlfile.write('  <tr>\n')
    for ver in launchlist:
        htmlfile.write('    <!-- 01___cpu_sec ver' + format(ver, 2) + '-->\n')
        htmlfile.write('    <td style="width:20%">\n')
        htmlfile.write('      <a href="./figures/SWIF/ver' + format(VERSION,2) + '/01___cpu_sec_ver' \
                           + format(VERSION,2) + '_ver' + format(ver,2) + '.png">\n')
        htmlfile.write('        <img src="./figures/SWIF/ver' + format(VERSION,2) + '/01___cpu_sec_ver' \
                           + format(VERSION,2) + '_ver' + format(ver,2) + '.png" width="100%">\n')
        htmlfile.write('    </a>\n')
        htmlfile.write('    </td>\n')
    htmlfile.write('  </tr>\n')

    # wall_sec
    htmlfile.write('  <tr>\n')
    htmlfile.write('    <td colspan="' + str(VERSION - MINVERSION) +
                   '"> wall time (min) </td>\n')
    htmlfile.write('  </tr>\n')
    htmlfile.write('  <tr>\n')
    for ver in launchlist:
        htmlfile.write('    <!-- 02___wall_sec ver' + format(ver, 2) + '-->\n')
        htmlfile.write('    <td style="width:20%">\n')
        htmlfile.write('      <a href="./figures/SWIF/ver' + format(VERSION,2) + '/02___wall_sec_ver' \
                           + format(VERSION,2) + '_ver' + format(ver,2) + '.png">\n')
        htmlfile.write('        <img src="./figures/SWIF/ver' + format(VERSION,2) + '/02___wall_sec_ver' \
                           + format(VERSION,2) + '_ver' + format(ver,2) + '.png" width="100%">\n')
        htmlfile.write('    </a>\n')
        htmlfile.write('    </td>\n')
    htmlfile.write('  </tr>\n')

    # mem_kb
    htmlfile.write('  <tr>\n')
    htmlfile.write('    <td colspan="' + str(VERSION - MINVERSION) +
                   '"> Memory (GB) </td>\n')
    htmlfile.write('  </tr>\n')
    htmlfile.write('  <tr>\n')
    for ver in launchlist:
        htmlfile.write('    <!-- 03___mem_kb ver' + format(ver, 2) + '-->\n')
        htmlfile.write('    <td style="width:20%">\n')
        htmlfile.write('      <a href="./figures/SWIF/ver' + format(VERSION,2) + '/03___mem_kb_ver' \
                           + format(VERSION,2) + '_ver' + format(ver,2) + '.png">\n')
        htmlfile.write('        <img src="./figures/SWIF/ver' + format(VERSION,2) + '/03___mem_kb_ver' \
                           + format(VERSION,2) + '_ver' + format(ver,2) + '.png" width="100%">\n')
        htmlfile.write('    </a>\n')
        htmlfile.write('    </td>\n')
    htmlfile.write('  </tr>\n')

    # vmem_kb
    htmlfile.write('  <tr>\n')
    htmlfile.write('    <td colspan="' + str(VERSION - MINVERSION) +
                   '"> Virtual memory (GB) </td>\n')
    htmlfile.write('  </tr>\n')
    htmlfile.write('  <tr>\n')
    for ver in launchlist:
        htmlfile.write('    <!-- 04___vmem_kb ver' + format(ver, 2) + '-->\n')
        htmlfile.write('    <td style="width:20%">\n')
        htmlfile.write('      <a href="./figures/SWIF/ver' + format(VERSION,2) + '/04___vmem_kb_ver' \
                           + format(VERSION,2) + '_ver' + format(ver,2) + '.png">\n')
        htmlfile.write('        <img src="./figures/SWIF/ver' + format(VERSION,2) + '/04___vmem_kb_ver' \
                           + format(VERSION,2) + '_ver' + format(ver,2) + '.png" width="100%">\n')
        htmlfile.write('    </a>\n')
        htmlfile.write('    </td>\n')
    htmlfile.write('  </tr>\n')

    # nevents
    htmlfile.write('  <tr>\n')
    htmlfile.write('    <td colspan="' + str(VERSION - MINVERSION) +
                   '"> #events </td>\n')
    htmlfile.write('  </tr>\n')
    htmlfile.write('  <tr>\n')
    for ver in launchlist:
        htmlfile.write('    <!-- 05___nevents ver' + format(ver, 2) + '-->\n')
        htmlfile.write('    <td style="width:20%">\n')
        htmlfile.write('      <a href="./figures/SWIF/ver' + format(VERSION,2) + '/05___nevents_ver' \
                           + format(VERSION,2) + '_ver' + format(ver,2) + '.png">\n')
        htmlfile.write('        <img src="./figures/SWIF/ver' + format(VERSION,2) + '/05___nevents_ver' \
                           + format(VERSION,2) + '_ver' + format(ver,2) + '.png" width="100%">\n')
        htmlfile.write('    </a>\n')
        htmlfile.write('    </td>\n')
    htmlfile.write('  </tr>\n')

    # nevents_diff
    htmlfile.write('  <tr>\n')
    htmlfile.write('    <td colspan="' + str(VERSION - MINVERSION) +
                   '"> &Delta; events </td>\n')
    htmlfile.write('  </tr>\n')
    htmlfile.write('  <tr>\n')
    for ver in launchlist:
        htmlfile.write('    <!-- 06___nevents_diff ver' + format(ver, 2) +
                       '-->\n')
        htmlfile.write('    <td style="width:20%">\n')
        htmlfile.write('      <a href="./figures/SWIF/ver' + format(VERSION,2) + '/06___nevents_diff_ver' \
                           + format(VERSION,2) + '_ver' + format(ver,2) + '.png">\n')
        htmlfile.write('        <img src="./figures/SWIF/ver' + format(VERSION,2) + '/06___nevents_diff_ver' \
                           + format(VERSION,2) + '_ver' + format(ver,2) + '.png" width="100%">\n')
        htmlfile.write('    </a>\n')
        htmlfile.write('    </td>\n')
    htmlfile.write('  </tr>\n')

    # input_copy_sec
    htmlfile.write('  <tr>\n')
    htmlfile.write('    <td colspan="' + str(VERSION - MINVERSION) +
                   '"> input copy time (min) </td>\n')
    htmlfile.write('  </tr>\n')
    htmlfile.write('  <tr>\n')
    for ver in launchlist:
        htmlfile.write('    <!-- 07___input_copy_sec ver' + format(ver, 2) +
                       '-->\n')
        htmlfile.write('    <td style="width:20%">\n')
        htmlfile.write('      <a href="./figures/SWIF/ver' + format(VERSION,2) + '/07___input_copy_sec_ver' \
                           + format(VERSION,2) + '_ver' + format(ver,2) + '.png">\n')
        htmlfile.write('        <img src="./figures/SWIF/ver' + format(VERSION,2) + '/07___input_copy_sec_ver' \
                           + format(VERSION,2) + '_ver' + format(ver,2) + '.png" width="100%">\n')
        htmlfile.write('    </a>\n')
        htmlfile.write('    </td>\n')
    htmlfile.write('  </tr>\n')

    # plugin_time
    htmlfile.write('  <tr>\n')
    htmlfile.write('    <td colspan="' + str(VERSION - MINVERSION) +
                   '"> plugin time (min) </td>\n')
    htmlfile.write('  </tr>\n')
    htmlfile.write('  <tr>\n')
    for ver in launchlist:
        htmlfile.write('    <!-- 08___plugin_time ver' + format(ver, 2) +
                       '-->\n')
        htmlfile.write('    <td style="width:20%">\n')
        htmlfile.write('      <a href="./figures/SWIF/ver' + format(VERSION,2) + '/08___plugin_time_ver' \
                           + format(VERSION,2) + '_ver' + format(ver,2) + '.png">\n')
        htmlfile.write('        <img src="./figures/SWIF/ver' + format(VERSION,2) + '/08___plugin_time_ver' \
                           + format(VERSION,2) + '_ver' + format(ver,2) + '.png" width="100%">\n')
        htmlfile.write('    </a>\n')
        htmlfile.write('    </td>\n')
    htmlfile.write('  </tr>\n')

    htmlfile.write('</table>\n')
    htmlfile.write('</body>\n')
    htmlfile.write('</html>\n')
    htmlfile.close()

    line = TLine(0, 0, 0, 0)

    latex = TLatex()
    latex.SetTextColor(ROOT.kBlack)
    latex.SetTextSize(0.06)
    latex.SetTextAlign(12)
    latex.SetNDC(1)

    figureDir = htmlDir + '/figures/SWIF/ver' + format(VERSION, 2)
    if not os.path.exists(figureDir):
        os.makedirs(figureDir)

    for ver in launchlist:
        #--------------------------------------------------------------------
        #                                cpu_sec
        #--------------------------------------------------------------------
        c1 = TCanvas('c1', 'canvas', 0, 0, 1600, 1200)
        c1.SetTopMargin(0.02)
        c1.SetRightMargin(0.02)
        c1.SetLeftMargin(0.15)
        c1.SetBottomMargin(0.14)

        dict_cpu_sec[ver].GetXaxis().SetTitleSize(0.06)
        dict_cpu_sec[ver].GetXaxis().SetTitleOffset(0.900)
        dict_cpu_sec[ver].GetXaxis().SetLabelSize(0.05)
        dict_cpu_sec[ver].GetYaxis().SetTitleSize(0.06)
        dict_cpu_sec[ver].GetYaxis().SetTitleOffset(1.200)
        dict_cpu_sec[ver].GetYaxis().CenterTitle()
        dict_cpu_sec[ver].GetYaxis().SetLabelSize(0.05)
        dict_cpu_sec[ver].SetMarkerColor(ROOT.kRed)
        dict_cpu_sec[ver].SetMarkerStyle(20)
        dict_cpu_sec[ver].SetMarkerSize(1.2)
        dict_cpu_sec[ver].SetLineColor(ROOT.kRed)
        dict_cpu_sec[ver].SetLineStyle(1)
        dict_cpu_sec[ver].SetLineWidth(1)
        dict_cpu_sec[ver].GetXaxis().SetTitle('CPU time (min) for ver' +
                                              format(VERSION, 2))
        dict_cpu_sec[ver].GetYaxis().SetTitle('CPU time (min) for ver' +
                                              format(ver, 2))

        X = dict_cpu_sec[ver].GetXaxis().GetXmax()
        Y = dict_cpu_sec[ver].GetYaxis().GetXmax()
        larger = Y if X < Y else X

        # don't show negative values (should not exist)
        dict_cpu_sec[ver].GetXaxis().SetLimits(0, larger)
        dict_cpu_sec[ver].SetMinimum(0)
        dict_cpu_sec[ver].SetMaximum(larger)

        dict_cpu_sec[ver].Draw('AP')

        line.SetX1(0)
        line.SetY1(0)
        line.SetX2(larger)
        line.SetY2(larger)
        line.SetLineColor(ROOT.kMagenta)
        line.SetLineStyle(2)
        line.DrawClone("same")

        text = "total: " + str(dict_cpu_sec[ver].GetN())
        latex.SetTextColor(ROOT.kBlue)
        latex.DrawLatex(0.75, 0.92, text)

        c1.SaveAs(figureDir + '/01___cpu_sec_ver' + format(VERSION, 2) +
                  '_ver' + format(ver, 2) + '.png')
        c1.Close()

        #--------------------------------------------------------------------
        #                                wall_sec
        #--------------------------------------------------------------------
        c1 = TCanvas('c1', 'canvas', 0, 0, 1600, 1200)
        c1.SetTopMargin(0.02)
        c1.SetRightMargin(0.02)
        c1.SetLeftMargin(0.15)
        c1.SetBottomMargin(0.14)

        dict_wall_sec[ver].GetXaxis().SetTitleSize(0.06)
        dict_wall_sec[ver].GetXaxis().SetTitleOffset(0.900)
        dict_wall_sec[ver].GetXaxis().SetLabelSize(0.05)
        dict_wall_sec[ver].GetYaxis().SetTitleSize(0.06)
        dict_wall_sec[ver].GetYaxis().SetTitleOffset(1.200)
        dict_wall_sec[ver].GetYaxis().CenterTitle()
        dict_wall_sec[ver].GetYaxis().SetLabelSize(0.05)
        dict_wall_sec[ver].SetMarkerColor(ROOT.kRed)
        dict_wall_sec[ver].SetMarkerStyle(20)
        dict_wall_sec[ver].SetMarkerSize(1.2)
        dict_wall_sec[ver].SetLineColor(ROOT.kRed)
        dict_wall_sec[ver].SetLineStyle(1)
        dict_wall_sec[ver].SetLineWidth(1)
        dict_wall_sec[ver].GetXaxis().SetTitle('wall time (min) for ver' +
                                               format(VERSION, 2))
        dict_wall_sec[ver].GetYaxis().SetTitle('wall time (min) for ver' +
                                               format(ver, 2))

        X = dict_wall_sec[ver].GetXaxis().GetXmax()
        Y = dict_wall_sec[ver].GetYaxis().GetXmax()
        larger = Y if X < Y else X

        # don't show negative values (should not exist)
        dict_wall_sec[ver].GetXaxis().SetLimits(0, larger)
        dict_wall_sec[ver].SetMinimum(0)
        dict_wall_sec[ver].SetMaximum(larger)

        dict_wall_sec[ver].Draw('AP')

        line.SetX1(0)
        line.SetY1(0)
        line.SetX2(larger)
        line.SetY2(larger)
        line.SetLineColor(ROOT.kMagenta)
        line.SetLineStyle(2)
        line.DrawClone("same")

        text = "total: " + str(dict_wall_sec[ver].GetN())
        latex.SetTextColor(ROOT.kBlue)
        latex.DrawLatex(0.75, 0.92, text)

        c1.SaveAs(figureDir + '/02___wall_sec_ver' + format(VERSION, 2) +
                  '_ver' + format(ver, 2) + '.png')
        c1.Close()

        #--------------------------------------------------------------------
        #                                mem_kb
        #--------------------------------------------------------------------
        c1 = TCanvas('c1', 'canvas', 0, 0, 1600, 1200)
        c1.SetTopMargin(0.02)
        c1.SetRightMargin(0.02)
        c1.SetLeftMargin(0.15)
        c1.SetBottomMargin(0.14)

        dict_mem_kb[ver].GetXaxis().SetTitleSize(0.06)
        dict_mem_kb[ver].GetXaxis().SetTitleOffset(0.900)
        dict_mem_kb[ver].GetXaxis().SetLabelSize(0.05)
        dict_mem_kb[ver].GetYaxis().SetTitleSize(0.06)
        dict_mem_kb[ver].GetYaxis().SetTitleOffset(1.200)
        dict_mem_kb[ver].GetYaxis().CenterTitle()
        dict_mem_kb[ver].GetYaxis().SetLabelSize(0.05)
        dict_mem_kb[ver].SetMarkerColor(ROOT.kRed)
        dict_mem_kb[ver].SetMarkerStyle(20)
        dict_mem_kb[ver].SetMarkerSize(1.2)
        dict_mem_kb[ver].SetLineColor(ROOT.kRed)
        dict_mem_kb[ver].SetLineStyle(1)
        dict_mem_kb[ver].SetLineWidth(1)
        dict_mem_kb[ver].GetXaxis().SetTitle('mem (GB) for ver' +
                                             format(VERSION, 2))
        dict_mem_kb[ver].GetYaxis().SetTitle('mem (GB) for ver' +
                                             format(ver, 2))

        X = dict_mem_kb[ver].GetXaxis().GetXmax()
        Y = dict_mem_kb[ver].GetYaxis().GetXmax()
        larger = Y if X < Y else X

        # don't show negative values (should not exist)
        dict_mem_kb[ver].GetXaxis().SetLimits(0, larger)
        dict_mem_kb[ver].SetMinimum(0)
        dict_mem_kb[ver].SetMaximum(larger)

        dict_mem_kb[ver].Draw('AP')

        line.SetX1(0)
        line.SetY1(0)
        line.SetX2(larger)
        line.SetY2(larger)
        line.SetLineColor(ROOT.kMagenta)
        line.SetLineStyle(2)
        line.DrawClone("same")

        text = "total: " + str(dict_mem_kb[ver].GetN())
        latex.SetTextColor(ROOT.kBlue)
        latex.DrawLatex(0.75, 0.92, text)

        c1.SaveAs(figureDir + '/03___mem_kb_ver' + format(VERSION, 2) +
                  '_ver' + format(ver, 2) + '.png')
        c1.Close()

        #--------------------------------------------------------------------
        #                                vmem_kb
        #--------------------------------------------------------------------
        c1 = TCanvas('c1', 'canvas', 0, 0, 1600, 1200)
        c1.SetTopMargin(0.02)
        c1.SetRightMargin(0.02)
        c1.SetLeftMargin(0.15)
        c1.SetBottomMargin(0.14)

        dict_vmem_kb[ver].GetXaxis().SetTitleSize(0.06)
        dict_vmem_kb[ver].GetXaxis().SetTitleOffset(0.900)
        dict_vmem_kb[ver].GetXaxis().SetLabelSize(0.05)
        dict_vmem_kb[ver].GetYaxis().SetTitleSize(0.06)
        dict_vmem_kb[ver].GetYaxis().SetTitleOffset(1.200)
        dict_vmem_kb[ver].GetYaxis().CenterTitle()
        dict_vmem_kb[ver].GetYaxis().SetLabelSize(0.05)
        dict_vmem_kb[ver].SetMarkerColor(ROOT.kRed)
        dict_vmem_kb[ver].SetMarkerStyle(20)
        dict_vmem_kb[ver].SetMarkerSize(1.2)
        dict_vmem_kb[ver].SetLineColor(ROOT.kRed)
        dict_vmem_kb[ver].SetLineStyle(1)
        dict_vmem_kb[ver].SetLineWidth(1)
        dict_vmem_kb[ver].GetXaxis().SetTitle('vmem (GB) for ver' +
                                              format(VERSION, 2))
        dict_vmem_kb[ver].GetYaxis().SetTitle('vmem (GB) for ver' +
                                              format(ver, 2))

        X = dict_vmem_kb[ver].GetXaxis().GetXmax()
        Y = dict_vmem_kb[ver].GetYaxis().GetXmax()
        larger = Y if X < Y else X

        # don't show negative values (should not exist)
        dict_vmem_kb[ver].GetXaxis().SetLimits(0, larger)
        dict_vmem_kb[ver].SetMinimum(0)
        dict_vmem_kb[ver].SetMaximum(larger)

        dict_vmem_kb[ver].Draw('AP')

        line.SetX1(0)
        line.SetY1(0)
        line.SetX2(larger)
        line.SetY2(larger)
        line.SetLineColor(ROOT.kMagenta)
        line.SetLineStyle(2)
        line.DrawClone("same")

        text = "total: " + str(dict_vmem_kb[ver].GetN())
        latex.SetTextColor(ROOT.kBlue)
        latex.DrawLatex(0.75, 0.92, text)

        c1.SaveAs(figureDir + '/04___vmem_kb_ver' + format(VERSION, 2) +
                  '_ver' + format(ver, 2) + '.png')
        c1.Close()

        #--------------------------------------------------------------------
        #                                nevents
        #--------------------------------------------------------------------
        c1 = TCanvas('c1', 'canvas', 0, 0, 1600, 1200)
        c1.SetTopMargin(0.04)
        c1.SetRightMargin(0.04)
        c1.SetLeftMargin(0.15)
        c1.SetBottomMargin(0.14)

        dict_nevents[ver].GetXaxis().SetTitleSize(0.06)
        dict_nevents[ver].GetXaxis().SetTitleOffset(0.900)
        dict_nevents[ver].GetXaxis().SetLabelSize(0.05)
        dict_nevents[ver].GetYaxis().SetTitleSize(0.06)
        dict_nevents[ver].GetYaxis().SetTitleOffset(1.200)
        dict_nevents[ver].GetYaxis().CenterTitle()
        dict_nevents[ver].GetYaxis().SetLabelSize(0.05)
        dict_nevents[ver].SetMarkerColor(ROOT.kRed)
        dict_nevents[ver].SetMarkerStyle(20)
        dict_nevents[ver].SetMarkerSize(1.2)
        dict_nevents[ver].SetLineColor(ROOT.kRed)
        dict_nevents[ver].SetLineStyle(1)
        dict_nevents[ver].SetLineWidth(1)
        dict_nevents[ver].GetXaxis().SetTitle('#events for ver' +
                                              format(VERSION, 2))
        dict_nevents[ver].GetYaxis().SetTitle('#events for ver' +
                                              format(ver, 2))

        X = dict_nevents[ver].GetXaxis().GetXmax()
        Y = dict_nevents[ver].GetYaxis().GetXmax()
        larger = Y if X < Y else X

        # don't show negative values (should not exist)
        dict_nevents[ver].GetXaxis().SetLimits(0, larger)
        dict_nevents[ver].SetMinimum(0)
        dict_nevents[ver].SetMaximum(larger)

        dict_nevents[ver].Draw('AP')

        line.SetX1(0)
        line.SetY1(0)
        line.SetX2(larger)
        line.SetY2(larger)
        line.SetLineColor(ROOT.kMagenta)
        line.SetLineStyle(2)
        line.DrawClone("same")

        text = "total: " + str(dict_nevents[ver].GetN())
        latex.SetTextColor(ROOT.kBlue)
        latex.DrawLatex(0.75, 0.92, text)

        c1.SaveAs(figureDir + '/05___nevents_ver' + format(VERSION, 2) +
                  '_ver' + format(ver, 2) + '.png')
        c1.Close()

        #--------------------------------------------------------------------
        #                                nevents_diff
        #--------------------------------------------------------------------
        c1 = TCanvas('c1', 'canvas', 0, 0, 1600, 1200)
        c1.SetTopMargin(0.04)
        c1.SetRightMargin(0.04)
        c1.SetLeftMargin(0.15)
        c1.SetBottomMargin(0.14)

        dict_nevents_diff[ver].GetXaxis().SetTitleSize(0.06)
        dict_nevents_diff[ver].GetXaxis().SetTitleOffset(0.900)
        dict_nevents_diff[ver].GetXaxis().SetLabelSize(0.05)
        dict_nevents_diff[ver].GetYaxis().SetTitleSize(0.06)
        dict_nevents_diff[ver].GetYaxis().SetTitleOffset(1.200)
        dict_nevents_diff[ver].GetYaxis().CenterTitle()
        dict_nevents_diff[ver].GetYaxis().SetLabelSize(0.05)
        dict_nevents_diff[ver].SetLineColor(ROOT.kRed)
        dict_nevents_diff[ver].SetLineStyle(1)
        dict_nevents_diff[ver].SetLineWidth(1)

        c1.SetLogy(1)
        dict_nevents_diff[ver].Draw()

        text = "total: " + str(int(dict_nevents_diff[ver].GetEntries()))
        latex.SetTextColor(ROOT.kBlue)
        latex.DrawLatex(0.75, 0.92, text)

        c1.SaveAs(figureDir + '/06___nevents_diff_ver' + format(VERSION, 2) +
                  '_ver' + format(ver, 2) + '.png')
        c1.Close()

        #--------------------------------------------------------------------
        #                                input_copy_sec
        #--------------------------------------------------------------------
        c1 = TCanvas('c1', 'canvas', 0, 0, 1600, 1200)
        c1.SetTopMargin(0.02)
        c1.SetRightMargin(0.02)
        c1.SetLeftMargin(0.15)
        c1.SetBottomMargin(0.14)

        dict_input_copy_sec[ver].GetXaxis().SetTitleSize(0.06)
        dict_input_copy_sec[ver].GetXaxis().SetTitleOffset(0.900)
        dict_input_copy_sec[ver].GetXaxis().SetLabelSize(0.05)
        dict_input_copy_sec[ver].GetYaxis().SetTitleSize(0.06)
        dict_input_copy_sec[ver].GetYaxis().SetTitleOffset(1.200)
        dict_input_copy_sec[ver].GetYaxis().CenterTitle()
        dict_input_copy_sec[ver].GetYaxis().SetLabelSize(0.05)
        dict_input_copy_sec[ver].SetMarkerColor(ROOT.kRed)
        dict_input_copy_sec[ver].SetMarkerStyle(20)
        dict_input_copy_sec[ver].SetMarkerSize(1.2)
        dict_input_copy_sec[ver].SetLineColor(ROOT.kRed)
        dict_input_copy_sec[ver].SetLineStyle(1)
        dict_input_copy_sec[ver].SetLineWidth(1)
        dict_input_copy_sec[ver].GetXaxis().SetTitle(
            'input copy time (min) for ver' + format(VERSION, 2))
        dict_input_copy_sec[ver].GetYaxis().SetTitle(
            'input copy time (min) for ver' + format(ver, 2))

        X = dict_input_copy_sec[ver].GetXaxis().GetXmax()
        Y = dict_input_copy_sec[ver].GetYaxis().GetXmax()
        larger = Y if X < Y else X

        # don't show negative values (should not exist)
        dict_input_copy_sec[ver].GetXaxis().SetLimits(0, larger)
        dict_input_copy_sec[ver].SetMinimum(0)
        dict_input_copy_sec[ver].SetMaximum(larger)

        dict_input_copy_sec[ver].Draw('AP')

        line.SetX1(0)
        line.SetY1(0)
        line.SetX2(larger)
        line.SetY2(larger)
        line.SetLineColor(ROOT.kMagenta)
        line.SetLineStyle(2)
        line.DrawClone("same")

        text = "total: " + str(dict_input_copy_sec[ver].GetN())
        latex.SetTextColor(ROOT.kBlue)
        latex.DrawLatex(0.75, 0.92, text)

        c1.SaveAs(figureDir + '/07___input_copy_sec_ver' + format(VERSION, 2) +
                  '_ver' + format(ver, 2) + '.png')
        c1.Close()

        #--------------------------------------------------------------------
        #                                plugin_sec
        #--------------------------------------------------------------------
        c1 = TCanvas('c1', 'canvas', 0, 0, 1600, 1200)
        c1.SetTopMargin(0.02)
        c1.SetRightMargin(0.02)
        c1.SetLeftMargin(0.15)
        c1.SetBottomMargin(0.14)

        dict_plugin_sec[ver].GetXaxis().SetTitleSize(0.06)
        dict_plugin_sec[ver].GetXaxis().SetTitleOffset(0.900)
        dict_plugin_sec[ver].GetXaxis().SetLabelSize(0.05)
        dict_plugin_sec[ver].GetYaxis().SetTitleSize(0.06)
        dict_plugin_sec[ver].GetYaxis().SetTitleOffset(1.200)
        dict_plugin_sec[ver].GetYaxis().CenterTitle()
        dict_plugin_sec[ver].GetYaxis().SetLabelSize(0.05)
        dict_plugin_sec[ver].SetMarkerColor(ROOT.kRed)
        dict_plugin_sec[ver].SetMarkerStyle(20)
        dict_plugin_sec[ver].SetMarkerSize(1.2)
        dict_plugin_sec[ver].SetLineColor(ROOT.kRed)
        dict_plugin_sec[ver].SetLineStyle(1)
        dict_plugin_sec[ver].SetLineWidth(1)
        dict_plugin_sec[ver].GetXaxis().SetTitle('plugin time (min) for ver' +
                                                 format(VERSION, 2))
        dict_plugin_sec[ver].GetYaxis().SetTitle('plugin time (min) for ver' +
                                                 format(ver, 2))

        X = dict_plugin_sec[ver].GetXaxis().GetXmax()
        Y = dict_plugin_sec[ver].GetYaxis().GetXmax()
        larger = Y if X < Y else X

        # don't show negative values (should not exist)
        dict_plugin_sec[ver].GetXaxis().SetLimits(0, larger)
        dict_plugin_sec[ver].SetMinimum(0)
        dict_plugin_sec[ver].SetMaximum(larger)

        dict_plugin_sec[ver].Draw('AP')

        line.SetX1(0)
        line.SetY1(0)
        line.SetX2(larger)
        line.SetY2(larger)
        line.SetLineColor(ROOT.kMagenta)
        line.SetLineStyle(2)
        line.DrawClone("same")

        text = "total: " + str(dict_plugin_sec[ver].GetN())
        latex.SetTextColor(ROOT.kBlue)
        latex.DrawLatex(0.75, 0.92, text)

        c1.SaveAs(figureDir + '/08___plugin_time_ver' + format(VERSION, 2) +
                  '_ver' + format(ver, 2) + '.png')
        c1.Close()

    # Copy all files to web-accessible directory
    outDir = '/group/halld/www/halldweb/html/data_monitoring/launch_analysis/' + RUNPERIOD + '/resource_use/'
    shutil.copy(htmlfilename, outDir)
    outputfigureDir = outDir + '/figures/SWIF/ver' + format(VERSION, 2)
    # delete directory if it already exists (necessary for shutil.copytree)
    if os.path.exists(outputfigureDir):
        shutil.rmtree(outputfigureDir)
    shutil.copytree(figureDir, outputfigureDir + '/')

    # Create link from main [RUNPERIOD].html file

    # Add the newest row into the html table using the hook
    # that is added at the end of each launch version.

    runperiodfilename = '/group/halld/www/halldweb/html/data_monitoring/launch_analysis/' + RUNPERIOD + '/' + RUNPERIOD + '.html'
    with open(runperiodfilename, 'r') as runperiodfile:
        alllines = runperiodfile.readlines()

    # Reverse the lines and find the first occurrence of the hook
    # this is the final (most recent hook)
    alllines.reverse()

    nlines = 0
    pos = 0
    old_hook = ''
    for line in alllines:
        nlines += 1
        if re.search(
                '<!--20[1-3][0-9]_[0-1][0-9]_ver[0-9][0-9] resource_use-->',
                line):
            pos = nlines
            old_hook = line
            break

    if old_hook == '':
        print 'Did not find old hook, make sure that file'
        print runperiodfilename
        print 'has a line containing <!--[RUNPERIOD]_ver[VERSION] resource_use-->'
        exit()

    # position to seek is total number of lines in file minus pos + 1
    pos = len(alllines) - pos + 1

    # lines for link
    linklines = []
    linklines.append('  <li style="color:blue;">\n')
    linklines.append('    <h3><a href = "resource_use/resource_use_' + RUNPERIOD + '_ver' + format(VERSION,2) + '.html">' \
                         + 'ver' + format(VERSION,2) + '</a></h3> <!--' + RUNPERIOD + '_ver' \
                         + format(VERSION,2) + ' resource_use-->\n')

    # Reopen stats html file and insert newlines into line pos
    with open(runperiodfilename, 'r+') as runperiodfile:
        alllines = runperiodfile.readlines()

    alllines[pos:pos] = linklines

    # Write the new file
    with open(runperiodfilename, 'w') as runperiodfile:
        for line in alllines:
            runperiodfile.write(line)

    exit()
コード例 #4
0
def make_time_rod_evo(error_dict, rod_dict, results, doLock):
 
    c2 = TCanvas( 'c2', 'c2', 1000, 600)
    leg = TLegend(0.18,0.85,0.45,0.55)
    leg.SetLineColor(0)
    leg.SetFillStyle(0)
    leg.SetShadowColor(0)
    leg.SetBorderSize(0)
    leg.SetNColumns(2)
     
    R15 = TLine(431,0,431,60)
    R15.SetLineColorAlpha(kPink+10,0.4)
    R15.SetLineWidth(4)

    R16 = TLine(1820,0,1820,60)
    R16.SetLineColorAlpha(kMagenta+10,0.4)
    R16.SetLineWidth(4)

    R17 = TLine(3376,0,3376,60)
    R17.SetLineColorAlpha(kGreen-3,0.4)
    R17.SetLineWidth(4)


    TS1 = TLine(431,0,432,60)
    TS1.SetLineColorAlpha(kPink+10,0.5)
    TS1.SetLineWidth(5)

    TS2 = TLine(1415,0,1415,60)
    TS2.SetLineColorAlpha(kMagenta+3,0.5)
    TS2.SetLineWidth(5)

    leg2 = TLegend(0.18,0.45,0.35,0.55)
    leg2.SetLineColor(0)
    leg2.SetFillStyle(0)
    leg2.SetShadowColor(0)
    leg2.SetBorderSize(0)
    gStyle.SetLegendTextSize(0.030)

    leg2.AddEntry(R15, "End of 2015", 'lf')
    leg2.AddEntry(R16, "End of 2016", 'lf')
    leg2.AddEntry(R17, "End of 2017", 'lf')
    #leg2.AddEntry(TS2, "TS2", 'lf')


    for key,val in rod_dict.items(): 
        TS1.SetY2(val*0.5)
        TS2.SetY2(val+1)

        R15.SetY2(val*0.3)
        R16.SetY2(val*0.5)
        R17.SetY2(val*0.8)

        times = {}
        times.clear()
        for e in error_bits:
            times['0x'+e] = [0] 
        for error in results:
            pos_rod  = error.text.find("ROD") + 4
            pos_lock = error.text.find("Lock") + 15
            pos_buff = error.text.find("buffer") + 17

            if error.msgID == 'TRT::ROD05Module':
                rod  = '0x'+str(error.text[pos_rod:pos_rod+6])
            else:
                rod  = str(error.text[pos_rod:pos_rod+8])

            lock = str(error.text[pos_lock:pos_lock+3])
            buff = str(error.text[pos_buff:pos_buff+3])

            if key == rod and doLock and lock != '0xf':
                times[lock].append(error.sb_total_time)


        leg.Clear()
        mg = TMultiGraph()

        for e in error_bits:
            errs = []
            for i,x in enumerate(times['0x'+e]):
                errs.append(i+0.0)
            errs.append(errs[-1])
            #times['0x'+e].append(1800.0)
            times['0x'+e].append(results[-1].sb_total_time)
            gr = TGraph(len(times['0x'+e]), array(times['0x'+e]), array(errs))
            gr.SetMarkerSize(0.7)
            if bin(int('0x'+e, 16))[2:].zfill(4) == '0111':
                leg.AddEntry(gr,'GOL 3',"lp");
            elif bin(int('0x'+e, 16))[2:].zfill(4) == '1011':
                leg.AddEntry(gr,'GOL 2',"lp");
            elif bin(int('0x'+e, 16))[2:].zfill(4) == '1101':
                leg.AddEntry(gr,'GOL 1',"lp");
            elif bin(int('0x'+e, 16))[2:].zfill(4) == '1110':
                leg.AddEntry(gr,'GOL 0',"lp");
            else:
                leg.AddEntry(gr,bin(int('0x'+e, 16))[2:].zfill(4),"lp");
            mg.Add(gr,"pl");

        mg.SetTitle("; Hours of stable beams; # of rocketio io lock errors");
        mg.Draw("PMC PLC a");
        R15.Draw()
        R16.Draw()
        R17.Draw()
        #TS1.Draw()
        #TS2.Draw()
        
        AtlasStyle.ATLAS_LABEL(0.19,.88, 1, "Internal")
        leg.Draw()
        leg2.Draw()
        AtlasStyle.myText(0.4, 0.88, kBlack, "ROD: " + key)
        
        
        leg.SetMargin(0.5)
        gPad.Modified()
        mg.GetXaxis().SetLimits(0,results[-1].sb_total_time)
        mg.SetMinimum(0.)
        mg.SetMaximum(val+1)
        c2.Update()
        c2.Print("plots/time_"+key+".pdf")
        c2.Clear()
コード例 #5
0
def plot2BodyDist(theFitter, pars, chi2, ndf, 
                  Err = -1, NP = False, Prefix = "Mjj", Left = False):
    from ROOT import gPad, TLatex, TCanvas, kRed, kCyan, kBlue, \
         RooFit, RooPlot, RooCurve, RooAbsReal, TGraphErrors, TLine, \
         RooWjjMjjFitter

    if pars.includeMuons and pars.includeElectrons:
        modeString = ''
    elif pars.includeMuons:
        modeString = 'Muon'
    elif pars.includeElectrons:
        modeString = 'Electron'
    else:
        modeString = ''

    mf = theFitter.stackedPlot(False, RooWjjMjjFitter.mjj, Left)
    mf.SetName("%s_Stacked" % (Prefix));
    sf = theFitter.residualPlot(mf, "h_background", "dibosonPdf", False)
    sf.SetName("%s_Subtracted" % (Prefix));
    pf = theFitter.residualPlot(mf, "h_total", "", True)
    pf.SetName("%s_Pull" % (Prefix))
    pf2 = pf.emptyClone("%s_Pull_Corrected" % (Prefix))
    pf2.SetMinimum(-5.)
    pf2.SetMaximum(5.)
    corrPull = False
    lf = theFitter.stackedPlot(True, RooWjjMjjFitter.mjj, Left)
    lf.SetName("%s_Stacked_Log" % (Prefix));

    if Err > 0:
        totalPdf = theFitter.getWorkSpace().pdf('totalPdf')
        ## Ntotal = totalPdf.expectedEvents(iset)

        ## print 'Ntotal:',Ntotal
        h_dibosonPdf = sf.getCurve('h_dibosonPdf')
        totalPdf.plotOn(sf,
                        RooFit.ProjWData(theFitter.getWorkSpace().data('data')),
                        RooFit.Normalization(Err, RooAbsReal.Raw),
                        #RooFit.AddTo('h_dibosonPdf', 1., 1.),
                        #RooFit.Invisible(),
                        RooFit.Name('h_ErrUp'),
                        RooFit.Range('RangeForPlot'),
                        RooFit.NormRange('RangeForPlot'),
                        RooFit.LineColor(kRed), RooFit.LineStyle(3))
        h_ErrUp = sf.getCurve('h_ErrUp')
        sf.remove('h_ErrUp', False)

        ErrBand = TGraphErrors(h_dibosonPdf.GetN(), h_dibosonPdf.GetX(),
                               h_dibosonPdf.GetY())
        for pt in range(1, ErrBand.GetN()):
            ErrBand.SetPointError(pt, 0,
                                  h_ErrUp.interpolate(ErrBand.GetX()[pt]))
        ErrBand.SetName("ErrBand")
        ErrBand.SetTitle("Uncertainty")
        ErrBand.SetLineColor(kRed)
##         ErrBand.SetLineWidth(0)
##         ErrBand.SetLineStyle(0)
        ErrBand.SetFillColor(kRed)
        ErrBand.SetFillStyle(3353)

        
        #ErrBand.Draw('ap3')
        #h_ErrUp.Draw('lp')
        #gPad.Update()
        #gPad.WaitPrimitive()
##         h_ErrUp.Draw("al")
##         h_ErrUp.GetXaxis().Set(36, 40., 400.)
##         gPad.Update()
##         gPad.WaitPrimitive()
##         h_UpBand = RooCurve("h_UpBand", "Uncertainty", h_dibosonPdf, h_ErrUp,
##                             1., 1.)
##         h_UpBand.SetLineStyle(3)
##         h_UpBand.SetLineColor(kBlue+1)
##         h_DownBand = RooCurve("h_DownBand", "Uncertainty", h_dibosonPdf, h_ErrUp,
##                               1., -1.)
##         h_DownBand.SetLineStyle(3)
##         h_DownBand.SetLineColor(kBlue+1)

##         sf.addPlotable(h_UpBand, "L")
##         sf.addPlotable(h_DownBand, "L")
        sf.addObject(ErrBand, "3")
        #sf.Print("v")
        sf.drawAfter('h_dibosonPdf', 'ErrBand')
        #sf.Print("v")
        sf.drawAfter('ErrBand', 'theData')
        #sf.Print("v")
        sf.findObject('theLegend').AddEntry(ErrBand, 'Uncertainty', 'f')
        sf.findObject('theLegend').SetY1NDC(sf.findObject('theLegend').GetY1NDC() - 0.057)
        sf.findObject('theLegend').SetY1(sf.findObject('theLegend').GetY1NDC())

        corrPull = True
        pf2.addObject(sub2pull(sf.getHist('theData'),
                               sf.findObject('ErrBand')),
                      'p0')
        for item in range(0, int(pf.numItems())):
            firstItem = pf.getObject(item)
            if (type(firstItem) == TLine):
                newLine = TLine(firstItem)
                newLine.SetY1(4.)
                newLine.SetY2(-4.)
                pf2.addObject(newLine, 'l')
                #SetOwnership(newLine, False)


    if NP:
        NPPdf = theFitter.makeNPPdf();
        NPNorm = 4.*0.11*46.8/12.*pars.intLumi

        if (modeString == 'Electron'):
            if pars.njets == 2:
                NPNorm *= 0.0381
            elif pars.njets == 3:
                NPNorm *= 0.0123
        else:
            if pars.njets == 2:
                NPNorm *= 0.0550
            elif pars.njets == 3:
                NPNorm *= 0.0176

        print '**** N_NP:', NPNorm,'****'

        NPPdf.plotOn(sf, RooFit.ProjWData(theFitter.getWorkSpace().data('data')),
                     RooFit.Normalization(NPNorm, RooAbsReal.Raw),
                     RooFit.AddTo('h_dibosonPdf', 1., 1.),
                     RooFit.Name('h_NP'),
                     RooFit.Range('RangeForPlot'),
                     RooFit.NormRange('RangeForPlot'),
                     RooFit.LineColor(kBlue), RooFit.LineStyle(2))

        h_NP = sf.getCurve('h_NP')

        sf.drawBefore('h_dibosonPdf', 'h_NP')
        #sf.Print("v")
        sf.findObject('theLegend').AddEntry(h_NP, "CDF-like Signal", "L")
        sf.findObject('theLegend').SetY1NDC(sf.findObject('theLegend').GetY1NDC() - 0.057)
        sf.findObject('theLegend').SetY1(sf.findObject('theLegend').GetY1NDC())

    l = TLatex()
    l.SetNDC()
    l.SetTextSize(0.045)
    l.SetTextFont(42)

    cstacked = TCanvas("cstacked", "stacked")
    mf.Draw()
    if (chi2 > 0):
        l.DrawLatex(0.55, 0.49,
                    '#chi^{2}/dof = %0.3f/%d' % (chi2, ndf)
                    )
    pyroot_logon.cmsLabel(cstacked, pars.intLumi/1000, prelim = True)
    cstacked.Print('Wjj_%s_%s_%ijets_Stacked.pdf' % (Prefix, modeString,
                                                     pars.njets))
    cstacked.Print('Wjj_%s_%s_%ijets_Stacked.png' % (Prefix, modeString,
                                                     pars.njets))
    c2 = TCanvas("c2", "stacked_log")
    c2.SetLogy()
    lf.Draw()
    pyroot_logon.cmsPrelim(c2, pars.intLumi/1000)
    c2.Print('Wjj_%s_%s_%ijets_Stacked_log.pdf' % (Prefix, modeString,
                                                    pars.njets))
    c2.Print('Wjj_%s_%s_%ijets_Stacked_log.png' % (Prefix, modeString,
                                                    pars.njets))
    c3 = TCanvas("c3", "subtracted")
    sf.Draw()
    pyroot_logon.cmsLabel(c3, pars.intLumi/1000, prelim = True)
    c3.Print('Wjj_%s_%s_%ijets_Subtracted.pdf' % (Prefix, modeString,
                                                  pars.njets))
    c3.Print('Wjj_%s_%s_%ijets_Subtracted.png' % (Prefix, modeString,
                                                  pars.njets))
    c4 = TCanvas("c4", "pull")
    pf.Draw()
    c4.SetGridy()
    pyroot_logon.cmsPrelim(c4, pars.intLumi/1000)
    c4.Print('Wjj_%s_%s_%ijets_Pull.pdf' % (Prefix, modeString, pars.njets))
    c4.Print('Wjj_%s_%s_%ijets_Pull.png' % (Prefix, modeString, pars.njets))

    c5 = None
    if corrPull:
        c5 = TCanvas("c5", "corrected pull")
        pf2.Draw()
        c5.SetGridy()
        pyroot_logon.cmsPrelim(c5, pars.intLumi/1000)
        c5.Print('Wjj_%s_%s_%ijets_Pull_Corrected.pdf' % (Prefix, modeString,
                                                          pars.njets))
        c5.Print('Wjj_%s_%s_%ijets_Pull_Corrected.png' % (Prefix, modeString,
                                                          pars.njets))

    return ([mf,sf,pf2,lf],[cstacked,c2,c3,c5])