Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-11-25 02:29:58

0001 # Note: this is specifically to parse a .csv file generated from a command like
0002 # pixelLumiCalc.py lumibyls -i json_DCSONLY_pp.txt --hltpath "HLT_Photon75_CaloIdVL_IsoL*" -o myHLTtest.out
0003 # format: Run,LS,HLTpath,L1bit,HLTpresc,L1presc,Recorded(/ub),Effective(/ub)
0004 import csv
0005 import re
0006 def is_intstr(s):
0007     try:
0008         int(s)
0009         return True
0010     except ValueError:
0011         return False
0012 class csvLumibyLSParser(object):
0013     def __init__(self,filename,RunX):
0014         self.__result={}
0015         self.__strresult={}
0016         self.__filename=filename
0017         self.__RunX=RunX
0018         csvReader=csv.reader(open(filename),delimiter=',')
0019         oldRun=0
0020         runnumber=0
0021         ldict = {}
0022         llist = []
0023         NonValidLumi = 0
0024         lastLumi = 0
0025         for row in csvReader:
0026             field0=str(row[0]).strip()
0027             fieldsplit=re.split(':',field0)
0028             runstring = fieldsplit[0]
0029             try:
0030                 field1=str(row[1]).strip()
0031                 fieldsplit=re.split(':',field1)
0032                 lsstring = fieldsplit[0]
0033             except Exception as e:
0034                 lsstring='1' # for list with run number only, fake lsnum
0035             if not is_intstr(runstring) or not  is_intstr(lsstring):
0036                 continue
0037             runnumber=int(runstring)
0038             lsnumber=int(lsstring)
0039 
0040             if runnumber != oldRun:
0041                 if oldRun>0:
0042                     self.__result[oldRun]=ldict
0043                     ldict = {}
0044                     oldRun = runnumber
0045                     lastLumi = 0
0046                     NonValidLumi = 0
0047                 else:
0048                     oldRun = runnumber
0049 
0050             try:
0051                 if RunX=='Run2':
0052                     delivered, recorded = float( row[4] ), float( row[5] )
0053                 if RunX=='Run1':
0054                     delivered, recorded = float( row[5] ), float( row[6] )
0055             except:
0056                 print('Record not parsed, Run = %d, LS = %d' % (runnumber, lsnumber))                
0057 
0058 # Commented out... If there is no value, there is no interpolation now...
0059 #            if recorded>0 :
0060 #                lastLumi = recorded
0061 #                if NonValidLumi>0:
0062 #                    # have to put real values in lumi list
0063 #                    for lnum in llist:
0064 #                        elems = [delivered, recorded]
0065 #                        ldict[lnum] = elems
0066 #                    NonValidLumi=0
0067 #                    llist = []
0068 #            else:
0069 #                if lastLumi>0:
0070 #                    recorded = lastLumi
0071 #                else:
0072 #                   # have to save lumi sections to fill once we get a non-zero lumi value
0073 #                   llist.append(lsnumber)
0074 #                   NonValidLumi=1
0075 
0076             elems = [ delivered,recorded ]
0077             ldict[lsnumber]=elems
0078 
0079         self.__result[runnumber]=ldict #catch the last one
0080 
0081     def runs(self):
0082         return self.__result.keys()
0083     def runsandls(self):
0084         '''return {run:lslist}
0085         '''
0086         return self.__result
0087 #    def runsandlsStr(self):
0088 #        '''return {'run':lslist}
0089 #        '''
0090 #        return self.__strresult
0091     def numruns(self):
0092         return len(self.__result)
0093     def numls(self,run):
0094         return len(self.__result[run])
0095 
0096 if __name__ == '__main__':
0097     result={}
0098     #filename='../test/lumi_by_LS_all.csv'
0099     filename='test.csv'
0100     s=csvLumibyLSParser(filename)
0101     print('runs : ',s.runs())
0102     print('full result : ',s.runsandls())
0103     #print 'str result : ',s.runsandlsStr()
0104     print('num runs : ',s.numruns())
0105     #print 'numls in run : ',s.numls(135175)
0106