def getPU(self, runnr, jsonfile):

        url = "https://cmswbm.cern.ch/cmsdb/servlet/RunSummary?RUN=%s&DB=default" % (
            runnr)
        tables = parseURLTables(url)
        #print url
        #print tables
        lhcfill_key = tables[3][14][1]

        url = "https://cmswbm.cern.ch/cmsdb/servlet/FillReport?FILL=%s" % (
            lhcfill_key)
        tables = parseURLTables(url)
        nbunch = int(tables[3][18][1])

        totalLS = 0
        for l1 in jsonfile:
            totalLS = totalLS + l1[1] - l1[0] + 1

        sumPU = 0.
        sum_lumi = 0
        n_lumi = 0
        nLS = 0
        psAndInstLumis = self.getPSAndInstLumis(runnr)
        for ls in jsonfile:
            minLS = int(ls[0])
            maxLS = int(ls[1])
            nLS += (maxLS - minLS + 1)
            for lumi in range(minLS, maxLS + 1):
                if lumi in psAndInstLumis:
                    sum_lumi += psAndInstLumis[lumi][1]
                    tmp_pu = (psAndInstLumis[lumi][1] * 80000) / (11246 *
                                                                  nbunch)

                    if self.pu_write:
                        hltRates = getpartTriggerRates(runnr, lumi, lumi, 1)
                        print 'lumi section:', lumi, 'in Run: ', runnr, '  ', n_lumi, '/', totalLS
                        for path in PU_list:
                            print path, hltRates[path][0][3]
                            PU_file.write(path + ',%0.2f,%f\n' %
                                          (tmp_pu, hltRates[path][0][3]))

                    sumPU += psAndInstLumis[lumi][1] * tmp_pu
                    n_lumi += 1
        if n_lumi != nLS:
            print "warning! miss lumi section!"
        avePU = sumPU / sum_lumi
        aveLumi = float(sum_lumi) / float(nLS)

        return avePU, aveLumi
    def getL1Rates(self, runnr, minLS, maxLS):
        url = "https://cmswbm.cern.ch/cmsdb/servlet/RunSummary?RUN=%s&DB=default" % (
            runnr)
        tables = parseURLTables(url)
        l1_key_mode = tables[1][1][4]

        url = "https://cmswbm.cern.ch/cmsdb/servlet/L1Summary?fromLS=%s&toLS=%s&RUN=%s&KEY=%s" % (
            minLS, maxLS, runnr, l1_key_mode)
        tables = parseURLTables(url)

        l1Rates = {}
        for line in tables[7][2:]:
            if ('L1' in line[1]):
                rates = []
                for entry in line[4:8]:
                    rates.append(float(entry.replace(",", "")))

                l1Rates[line[1].strip()] = (rates, int(line[8]))
        return l1Rates
    def getpartTriggerRates(self, runnr, minLS, maxLS, totalLS):
        url = "https://cmswbm.cern.ch/cmsdb/servlet/HLTSummary?fromLS=%s&toLS=%s&RUN=%s" % (
            minLS, maxLS, runnr)
        tables = parseURLTables(url)

        hltpartRates = {}
        for line in tables[1][2:]:
            rates = []
            for entry in line[3:7]:
                rates.append(float(entry.replace(",", "")))
            rates[3] = rates[3] * (float(maxLS) - float(minLS) + 1.0) / totalLS
            hltpartRates[line[1].split("_v")[0]] = (rates, line[9])
        return hltpartRates
    def getHLTPrescales(self, runnr):
        url = "https://cmswbm.cern.ch/cmsdb/servlet/RunSummary?RUN=%s&DB=default" % (
            runnr)
        tables = parseURLTables(url)
        l1_hlt_mode = tables[1][1][3]

        url = "https://cmswbm.cern.ch/cmsdb/servlet/TriggerMode?KEY=%s" % (
            l1_hlt_mode)
        #print url
        tables = parseURLTables(url)

        prescales = {}

        for line in tables[2]:
            if ('Output' in line[1].split('_v')[0]): continue
            #                path                      lumi
            try:
                prescales[line[1].split('_v')[0]] = (int(
                    line[self.lumicolumn]), line[-1])
            except:
                prescales[line[1].split('_v')[0]] = (-1, 'null')

        return prescales
    def getL1Prescales(self, runnr):
        url = "https://cmswbm.cern.ch/cmsdb/servlet/PrescaleSets?RUN=%s" % (
            runnr)
        tables = parseURLTables(url)

        prescales = {}

        # l1 algo paths/prescales
        for line in tables[1]:
            if not 'L1_' in line[1]: continue
            #                path     lumi
            try:
                prescales[line[1]] = (int(line[self.lumicolumn]))
            except:
                prescales[line[1]] = (0)

        return prescales
    def getPSAndInstLumis(self, runnr):
        url = "https://cmswbm.cern.ch/cmsdb/servlet/LumiSections?RUN=%s" % runnr
        tables = parseURLTables(url)

        psAndInstLumis = {}

        for line in tables[1]:
            offset = 0
            if line[0] == "L S": offset = 41

            lumiSec = int(line[0 + offset])
            preScaleColumn = int(line[1 + offset])
            instLumi = float(line[3 + offset])
            if instLumi == 0.0: instLumi = 50
            psAndInstLumis[lumiSec] = (preScaleColumn, instLumi)

    #    print psAndInstLumis
        return psAndInstLumis
Esempio n. 7
0
sf = 1.0
if '/' in opts.scaleFactor:
    division_terms = opts.scaleFactor.split('/')
    sf = float(division_terms[0]) / float(division_terms[1])
else:
    sf = float(opts.scaleFactor)
print "Rates will be scaled by your input %s = %s" % (opts.scaleFactor, sf)

from cernSSOWebParser2 import parseURLTables
#https://cmswbm.cern.ch/cmsdb/servlet/HLTSummary?fromLS=14&toLS=17&RUN=306154

#Make a map linking L1 seeds to their PS
map_L1 = {}
url = "https://cmswbm.cern.ch/cmsdb/servlet/PrescaleSets?RUN=%s" % opts.RUN
tables = parseURLTables(url)
ps_col_L1 = -1
for i in range(0, len(tables)):
    ps_column = -1
    ps_string_tobefound = opts.PS
    L1seed_column = -1
    L1seed_string_tobefound = "L1 Algo Name"
    for k in range(0, len(tables[i][0])):
        if ps_string_tobefound in tables[i][0][k]:
            ps_column = k
        if L1seed_string_tobefound in tables[i][0][k]:
            L1seed_column = k
    if ps_column == -1 or L1seed_column == -1: continue
    ps_col_L1 = ps_column
    for j in range(1, len(tables[i])):
        L1seed = str(tables[i][j][L1seed_column])