CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_4_4_5_patch3/src/RecoLuminosity/LumiDB/python/lumiCalcAPI.py

Go to the documentation of this file.
00001 import os,coral,datetime,fnmatch
00002 from RecoLuminosity.LumiDB import nameDealer,revisionDML,dataDML,lumiTime,CommonUtil,selectionParser,hltTrgSeedMapper
00003 
00004 def runList(schema,fillnum=None,runmin=None,runmax=None,startT=None,stopT=None,l1keyPattern=None,hltkeyPattern=None,amodetag=None,nominalEnergy=None,energyFlut=0.2,requiretrg=True,requirehlt=True):
00005     return dataDML.runList(schema,fillnum,runmin,runmax,startT,stopT,l1keyPattern,hltkeyPattern,amodetag,nominalEnergy,energyFlut,requiretrg,requirehlt)
00006 
00007 def lslengthsec(numorbit, numbx):
00008     '''
00009     input:
00010        numorbit : number of orbit in the lumi section
00011        numbx : number of orbits
00012     output:
00013        lumi section length in sec
00014     '''
00015     l = numorbit * numbx * 25.0e-09
00016     return l
00017 def hltpathsForRange(schema,runlist):
00018     '''
00019     input: runlist [run],     (required)      
00020            datatag: data version (optional)
00021     output : {runnumber,{hltpath:(l1bitname,l1seedexpr)}}
00022     '''
00023     result={}
00024     if isinstance(inputRange,list):
00025         for run in runlist:
00026             extendedmap={}
00027             hlttrgmap=dataDML.hlttrgMappingByrun(run)
00028             for hltpath,l1seedexpr in  hlttrgmap.items():
00029                 l1bitname=hltTrgSeedMapper(hltpath,l1seedexpr)
00030                 extendedmap[hltpath]=(l1bitname,l1seedexpr)
00031             result[run]=extendedmap
00032     return result
00033 def trgbitsForRange(schema,runlist,datatag=None):
00034     '''
00035     input: runlist [run],(required)
00036            datatag: data version (optional)
00037     output: {runnumber:bitzeroname,[bitnames]}
00038     '''
00039     pass
00040 
00041 def hltForRange(schema,inputRange,hltpathname=None,hltpathpattern=None,datatag=None):
00042     '''
00043     input:
00044            inputRange: {run:[cmsls]} (required)
00045            hltpathname: exact match hltpathname  (optional) 
00046            hltpathpattern: regex match hltpathpattern (optional)
00047            datatag : data version
00048     output: {runnumber:{hltpath:[[cmslsnum,l1pass,hltaccept,hltprescale]]})}
00049     '''
00050     pass
00051 
00052 def trgForRange(schema,inputRange,trgbitname=None,trgbitnamepattern=None,datatag=None):
00053     '''
00054     input :
00055             inputRange  {run:[cmsls]} (required)
00056             trgbitname exact match  trgbitname (optional)
00057             trgbitnamepattern regex match trgbitname (optional)
00058             datatag : data version
00059     output
00060             result {run,{cmslsnum:[deadtimecount,bitzero_count,bitzero_prescale,deadfraction,{bitname:[prescale,counts]}]}}
00061     '''
00062     pass
00063 
00064 def instLumiForRange(schema,inputRange,beamstatus=None,withBXInfo=False,bxAlgo='OCC1',xingMinLum=1.0e-4,withBeamIntensity=False,datatag=None):
00065     '''
00066     input:
00067            inputRange  {run:[cmsls]} (required)
00068            beamstatus: LS filter on beamstatus (optional)
00069            beamenergy: LS filter on beamenergy (optional)  beamenergy+-beamenergyFluc
00070            withBXInfo: get per bunch info (optional)
00071            bxAlgo: algoname for bx values (optional) ['OCC1','OCC2','ET']
00072            xingMinLum: cut on bx lumi value (optional)
00073            withBeamInfo: get beam intensity info (optional)
00074            datatag: data version
00075     output:
00076            result {run:{(lumilsnum,cmslsnum):[timestamp,beamstatus,beamenergy,instlumi,instlumierr,startorbit,numorbit,(bxvalues,bxerrs),(bxidx,b1intensities,b2intensities)]}}
00077            lumi unit: HZ/ub
00078     '''
00079     pass
00080 
00081 def instCalibratedLumiForRange(schema,inputRange,amodetag='PROTPHYS',nominalegev=3500,beamstatus=None,withBXInfo=False,bxAlgo='OCC1',xingMinLum=1.0e-4,withBeamInfo=False,normname=None,datatag=None):
00082     '''
00083     Inst luminosity after calibration
00084     input:
00085            inputRange  {run:[cmsls]} (required)
00086            amodetag : accelerator mode for all the runs (optional) ['PROTPHYS','HIPHYS']
00087            beamstatus: LS filter on beamstatus (optional)
00088            beamenergy: LS filter on beamenergy (optional)  beamenergy+-beamenergyFluc
00089            withBXInfo: get per bunch info (optional)
00090            bxAlgo: algoname for bx values (optional) ['OCC1','OCC2','ET']
00091            xingMinLum: cut on bx lumi value (optional)
00092            withBeamInfo: get beam intensity info (optional)
00093            normname: norm factor name to use (optional)
00094            datatag: data version
00095     output:
00096            result {run:{(lumilsnum,cmslsnum):[timestamp,beamstatus,beamenergy,calibratedlumi,calibratedlumierr,startorbit,numorbit,(bxvalues,bxerrs),(bxidx,b1intensities,b2intensities)]}}
00097            lumi unit: HZ/ub
00098     '''
00099     result = {}
00100     normid=None
00101     if not normname:
00102         normid=dataDML.guessnormIdByContext(schema,amodetag,nominalegev)
00103     if not normid:
00104         raise ValueError('cannot find a normalization factor for the combined condition '+amodetag+' '+nominalegev)
00105     normval=dataDML.luminormById(schema,normid)[2]
00106     perbunchnormval=float(normval)/float(1000)
00107     instresult=instLumiForRange(schema,inputRange,beamstatus,withBXInfo,bxAlgo,withBeamIntensity,datatag)
00108     for run,lsdict in instresult.items():
00109         result[run]={}
00110         for (lumilsnum,cmslsnum),perlsdata in lsdict.items():
00111             timestamp=perlsdata[0]
00112             beamstatus=perlsdata[1]
00113             beamenergy=perlsdata[2]
00114             calibratedlumi=perlsdata[3]*normval             
00115             calibratedlumierr=perlsdata[4]*normval
00116             startorbit=perlsdata[5]
00117             numorbit=perlsdata[6]
00118             bxdata=perlsdata[7]
00119             calibfatedbxdata=None
00120             if bxdata:
00121                 calibratedbxdata=([x*perbunchnormval for x in bxdata[0]],[x*perbunchnormval for x in bxdata[1]])
00122             intensitydata=perlsdata[8]             
00123             result[run][(lumilsnum,cmslsnum)]=[timestamp,beamstatus,beamenergy,calibratedlumi,calibratedlumierr,startorbit,numorbit,calibfatedbxdata,intensitydata]
00124     return result
00125          
00126 def deliveredLumiForRange(schema,inputRange,amodetag='PROTPHYS',nominalegev=3500,beamstatus=None,withBXInfo=False,bxAlgo='OCC1',xingMinLum=1.0e-4,withBeamIntensity=False,normname=None,datatag=None):
00127     '''
00128     input:
00129            inputRange  {run:[lsnum]} (required) [lsnum]==None means all ; [lsnum]==[] means selected ls 
00130            amodetag : accelerator mode for all the runs (optional) ['PROTPHYS','HIPHYS']
00131            beamstatus: LS filter on beamstatus (optional)
00132            beamenergy: LS filter on beamenergy (optional)  beamenergy+-beamenergyFluc
00133            withBXInfo: get per bunch info (optional)
00134            bxAlgo: algoname for bx values (optional) ['OCC1','OCC2','ET']
00135            xingMinLum: cut on bx lumi value (optional)
00136            withBeamInfo: get beam intensity info (optional)
00137            normname: norm factor name to use (optional)
00138            datatag: data version
00139     output:
00140            result {run:{(lumilsnum,cmslsnum):[timestamp,beamstatus,beamenergy,deliveredlumi,calibratedlumierr,(bxvalues,bxerrs),(bxidx,b1intensities,b2intensities)]}}
00141            avg lumi unit: 1/ub
00142     '''
00143     result = {}
00144     normid=None
00145     if not normname:
00146         normid=dataDML.guessnormIdByContext(schema,amodetag,nominalegev)
00147     if not normid:
00148         raise ValueError('cannot find a normalization factor for the combined condition '+amodetag+' '+nominalegev)
00149     normval=dataDML.luminormById(schema,normid)[2]
00150     perbunchnormval=float(normval)/float(1000)
00151     instresult=instLumiForRange(schema,inputRange,beamstatus,withBXInfo,bxAlgo,withBeamIntensity,datatag)
00152     for run,lslist in inputRange.items():
00153         result[run]={}
00154         for (lumilsnum,cmslsnum),perlsdata in lsdict.items():
00155             timestamp=perlsdata[0]
00156             beamstatus=perlsdata[1]
00157             beamenergy=perlsdata[2]
00158             calibratedlumi=perlsdata[3]*normval
00159             calibratedlumierr=perlsdata[4]*normval
00160             numorbit=perlsdata[6]
00161             numbx=3564
00162             lslen=lslengthsec(numorbit,numbx)
00163             deliveredlumi=calibratedlumi*lslen
00164             bxdata=perlsdata[7]
00165             calibratedbxdata=None
00166             if bxdata:
00167                 calibratedbxdata=([x*perbunchnormval for x in bxdata[0]],[x*perbunchnormval for x in bxdata[1]])
00168             intensitydata=perlsdata[8]             
00169             result[run][(lumilsnum,cmslsnum)]=[timestamp,beamstatus,beamenergy,deliveredlumi,calibratedlumierr,calibratedbxdata,intensitydata]
00170     return result
00171                        
00172 def lumiForRange(schema,inputRange,amodetag='PROTPHYS',beamstatus=None,beamenergy=None,beamenergyFluc=0.2,withBXInfo=False,bxAlgo='OCC1',xingMinLum=1.0e-4,withBeamInfo=False,normname=None,datatag=None):
00173     '''
00174     input:
00175            inputRange  {run:[cmsls]} (required)
00176            amodetag : accelerator mode for all the runs (optional) ['PROTPHYS','HIPHYS']
00177            beamstatus: LS filter on beamstatus (optional)
00178            beamenergy: LS filter on beamenergy (optional)  beamenergy+-beamenergyFluc
00179            withBXInfo: get per bunch info (optional)
00180            bxAlgo: algoname for bx values (optional) ['OCC1','OCC2','ET']
00181            xingMinLum: cut on bx lumi value (optional)
00182            withBeamInfo: get beam intensity info (optional)
00183            normname: norm factor name to use (optional)
00184            datatag: data version
00185     output:
00186            result {run:{(lumilsnum,cmslsnum):[timestamp,beamstatus,beamenergy,deliveredlumi,recordedlumi,calibratedlumierror,((bxidx,bxvalues,bxerrs),(bxidx,b1intensities,b2intensities)]}}
00187            lumi unit: 1/ub
00188     '''
00189            result = {}
00190            normid=None
00191            if not normname:
00192                normid=dataDML.guessnormIdByContext(schema,amodetag,nominalegev)
00193            if not normid:
00194                raise ValueError('cannot find a normalization factor for the combined condition '+amodetag+' '+nominalegev)
00195            normval=dataDML.luminormById(schema,normid)[2]
00196            perbunchnormval=float(normval)/float(1000)
00197            c=lumiTime.lumiTime()
00198            for run,lslist in inputRange.items():
00199                if lslist is not None and len(lslist)==0:#no selected ls, do nothing for this run
00200                    result[run]={}
00201                    continue
00202                cmsrunsummary=dataDML.runsummary(schema,run)
00203                startTimeStr=cmsrunsummary[6]
00204                lumidataid=None
00205                trgdataid=None
00206                hltdataid=None
00207                (lumidataid,trgdataid,hltdataid)=dataDML.guessDataIdByRun(schema,run)
00208                (lumirunnum,lumidata)=dataDML.lumiLSById(schema,lumidataid,beamstatus,beamenergy,beamenergyFluc,withBXInfo,bxAlgo,withBeamInfo)
00209                (trgrunnum,trgdata)=dataDML.trgLSById(schema,trgdataid,withblobdata=False)
00210                perrunresult={}
00211                for lumilsnum,perlsdata in lumidata.items():
00212                    cmslsnum=perlsdata[0]
00213                    if lslist is not None and cmslsnum not in lslist:
00214                        continue
00215                    instlumi=perlsdata[1]
00216                    instlumierror=perlsdata[2]
00217                    calibratedlumi=instlumi*normval
00218                    calibratedlumierror=instlumierror*normval
00219                    beamstatus=perlsdata[4]
00220                    beamenergy=perlsdata[5]
00221                    numorbit=perlsdata[6]
00222                    startorbit=perlsdata[7]
00223                    timestamp=c.OrbitToUTCTimestamp(startTimeStr,numorbit,startorbit+numorbit,0)
00224                    numbx=3564
00225                    lslen=lslengthsec(numorbit,numbx)
00226                    deliveredlumi=calibratedlumi*lslen
00227                    recordedlumi=0.0
00228                    if cmslsnum!=0:                       
00229                        deadcount=trgdata[cmslsnum][0] ##subject to change !!
00230                        bitzerocount=trgdata[cmslsnum][1]
00231                        bitzeroprescale=trgdata[cmslsnum][2]
00232                        deadfrac=float(deadcount)/(float(bitzerocount)*float(bitzeroprescale))
00233                        if deadfrac>1.0:
00234                            deadfrac=0.0  #artificial correction in case of trigger wrong prescale
00235                        recordedlumi=deliveredlumi*(1.0-deadfrac)
00236                    bxdata=None
00237                    if withBXInfo:
00238                        bxvalueblob=lumidata[8]
00239                        bxerrblob=lumidata[9]
00240                        bxidxlist=[]
00241                        bxvaluelist=[]
00242                        bxerrorlist=[]
00243                        if bxvalueblob is not None and bxerrblob is not None:
00244                            bxvaluearray=CommonUtil.unpackBlobtoArray(bxvalueblob,'f')
00245                            bxerrorarray=CommonUtil.unpackBlobtoArray(bxerrblob,'f')
00246                            for idx,bxval in enumerate(bxvaluearray):
00247                                if bxval*perbunchnormval>xingMinLum:
00248                                    bxidxlist.append(idx)
00249                                    bxvaluelist.append(bxval*perbunchnormval)
00250                                    bxerrorlist.append(bxerrorarray[idx]*perbunchnormval)
00251                        bxdata=(bxidxlist,bxvaluelist,bxerrorlist)
00252                    beamdata=None
00253                    if withBeamInfo:
00254                        bxindexblob=lumidata[10]
00255                        beam1intensityblob=lumidata[11]
00256                        beam2intensityblob=lumidata[12]
00257                        bxindexlist=[]
00258                        b1intensitylist=[]
00259                        b2intensitylist=[]
00260                        if bxindexblob is not None and beam1intensity is not None and beam2intensity is not None:
00261                            bxindexlist=CommonUtil.unpackBlobtoArray(bxindexblob,'h').tolist()
00262                            beam1intensitylist=CommonUtil.unpackBlobtoArray(beam1intensityblob,'f').tolist()
00263                            beam2intensitylist=CommonUtil.unpackBlobtoArray(beam2intensityblob,'f').tolist()
00264                        beamdata=(bxindexlist,b1intensitylist,b2intensitylist)
00265                    perrunresult[(lumilsnum,cmslsnum)]=[timestamp,beamstatus,beamenergy,deliveredlumi,recordedlumi,calibratedlumierror,bxdata,beamdata]
00266                lumidata.clear() #clean lumi memory    
00267                trgdata.clear()
00268                result[run]=perrunresult
00269            return result
00270        
00271 def effectiveLumiForRange(schema,inputRange,hltpathname=None,hltpathpattern=None,amodetag='PROTPHYS',beamstatus=None,beamenergy=None,beamenergyFluc=0.2,withBXInfo=False,xingMinLum=1.0e-4,bxAlgo='OCC1',withBeamInfo=False,normname=None,datatag=None):
00272     '''
00273     input:
00274            inputRange  {run:[cmsls]} (required)
00275            hltpathname: selected hltpathname
00276            hltpathpattern: regex select hltpaths
00277            amodetag : accelerator mode for all the runs (optional) ['PROTPHYS','HIPHYS']
00278            beamstatus: LS filter on beamstatus (optional)
00279            beamenergy: LS filter on beamenergy (optional)  beamenergy+-beamenergyFluc
00280            withBXInfo: get per bunch info (optional)
00281            bxAlgo: algoname for bx values (optional) ['OCC1','OCC2','ET']
00282            xingMinLum: cut on bx lumi value (optional)
00283            withBeamInfo: get beam intensity info (optional)
00284            normname: norm factor name to use (optional)
00285            datatag: data version
00286     output:
00287     result {run:{(lumilsnum,cmslsnum):[timestamp,beamstatus,beamenergy,deliveredlumi,recordedlumi,calibratedlumierror,{hltpath:[l1name,l1prescale,hltprescale,efflumi]},bxdata,beamdata]}}
00288            lumi unit: 1/ub
00289     '''
00290            result = {}
00291            normid=None
00292            if not normname:
00293                normid=dataDML.guessnormIdByContext(schema,amodetag,nominalegev)
00294            if not normid:
00295                raise ValueError('cannot find a normalization factor for the combined condition '+amodetag+' '+nominalegev)
00296            normval=dataDML.luminormById(schema,normid)[2]
00297            perbunchnormval=float(normval)/float(1000)
00298            c=lumiTime.lumiTime()
00299            for run,lslist in inputRange.items():
00300                if lslist is not None and len(lslist)==0:#no selected ls, do nothing for this run
00301                    result[run]={}
00302                    continue
00303                cmsrunsummary=dataDML.runsummary(schema,run)
00304                startTimeStr=cmsrunsummary[6]
00305                lumidataid=None
00306                trgdataid=None
00307                hltdataid=None
00308                (lumidataid,trgdataid,hltdataid)=dataDML.guessDataIdByRun(schema,run)
00309                (lumirunnum,lumidata)=dataDML.lumiLSById(schema,lumidataid,beamstatus,beamenergy,beamenergyFluc,withBXInfo,bxAlgo,withBeamInfo)
00310                (trgrunnum,trgdata)=dataDML.trgLSById(schema,trgdataid,withblobdata=True)
00311                (hltrunnum,hltdata)=dataDML.hltLSById(schema,hltdataid)
00312                trgrundata=dataDML.trgRunById(schema,trgdataid)
00313                hltrundata=dataDML.hltRunById(schema,hltdataid)
00314                bitnames=trgrundata[3].split(',')
00315                hlttrgmap=dataDML.hlttrgMappingByrun(schema,run)
00316                pathnames=hltrundata[3].split(',')
00317                perrunresult={}
00318                for lumilsnum,perlsdata in lumidata.items():
00319                    cmslsnum=perlsdata[0]
00320                    if lslist is not None and cmslsnum not in lslist:
00321                        continue
00322                    instlumi=perlsdata[1]
00323                    instlumierror=perlsdata[2]
00324                    calibratedlumi=instlumi*normval
00325                    calibratedlumierror=instlumierror*normval
00326                    beamstatus=perlsdata[4]
00327                    beamenergy=perlsdata[5]
00328                    numorbit=perlsdata[6]
00329                    startorbit=perlsdata[7]
00330                    timestamp=c.OrbitToUTCTimestamp(startTimeStr,numorbit)
00331                    numbx=3564
00332                    lslen=lslengthsec(numorbit,numbx)
00333                    deliveredlumi=calibratedlumi*lslen
00334                    recordedlumi=0.0
00335                    
00336                    if cmslsnum==0: continue # skip lumils
00337                    
00338                    deadcount=trgdata[cmslsnum][0] ##subject to change !!
00339                    bitzerocount=trgdata[cmslsnum][1]
00340                    bitzeroprescale=trgdata[cmslsnum][2]
00341                    deadfrac=float(deadcount)/(float(bitzerocount)*float(bitzeroprescale))
00342                    if deadfrac>1.0:
00343                        deadfrac=0.0  #artificial correction in case of trigger wrong prescale
00344                    recordedlumi=deliveredlumi*(1.0-deadfrac)
00345                    efflumidict={}
00346                    l1prescaleblob=trgdata[cmslsnum][4]
00347                    l1prescalearray=CommonUtil.unpackBlobtoArray(l1prescaleblob,'h')
00348                    hltprescaleblob=hltdata[cmslsnum][0]
00349                    hltprescalearray=CommonUtil.unpackBlobtoArray(hltprescaleblob,'h')
00350                    trgprescalemap={} #build trg prescale map {bitname:l1prescale}
00351                    for bitnum,bitprescale in enumerate(l1prescalearray):
00352                        thisbitname=bitnames[bitnum]
00353                        trgprescalemap[thisbitname]=bitprescale
00354                        
00355                    if hltpathname is None and hltpathpattern is None: #get all paths                       
00356                        for hpath,l1seedexpr in hlttrgmap.items():
00357                            hltprescale=None
00358                            l1prescale=None
00359                            efflumi=None
00360                            for pathidx,nm in enumerate(hltpathnames):
00361                                if nm==hpath:
00362                                    hltprescale=hltprescalearray[pathidx]
00363                                    break
00364                            try:
00365                                l1bitname=hltTrgSeedMapper.findUniqueSeed(hpath,l1seedexpr)
00366                                if l1bitname:
00367                                    l1prescale=trgprescalemap[l1bitname]
00368                            except KeyError:
00369                                l1prescale=None
00370                            if l1prescale and hltprescale:
00371                                efflumi=recordedlumi*l1prescale*hltprescale                           
00372                            efflumidict[hpath]=[l1bitname,l1prescale,hltprescale,efflumi]                       
00373                    elif hltpathname is not None:  #get one path
00374                        hltprescale=None
00375                        l1prescale=None
00376                        efflumi=None
00377                        for pathidx,nm in enumerate(hltpathnames):
00378                            if nm==hltpathname:
00379                                hltprescale=hltprescalearray[pathidx]
00380                                break
00381                        try:
00382                            l1bitname=hltTrgSeedMapper.findUniqueSeed(hltpathname,l1seedexpr)
00383                            if l1bitname:
00384                                l1prescale=trgprescalemap[l1bitname]
00385                        except KeyError:
00386                            l1prescale=None
00387                        if l1prescale and hltprescale:
00388                                efflumi=recordedlumi*l1prescale*hltprescale                           
00389                        efflumidict[hpath]=[l1bitname,l1prescale,hltprescale,efflumi]                           
00390                    elif hltpathpattern is not None: #get paths matching pattern                       
00391                        for hpath,l1seexexpr in hlttrgmap.items():
00392                            hltprescale=None
00393                            l1prescale=None
00394                            efflumi=None
00395                            if fnmatch.fnmatch(hpath,hltpathpattern):#use fnmatch rules
00396                                for pathidx,nm in enumerate(hltpathnames):
00397                                    if nm==hpath:
00398                                        hltprescale=hltprescalearray[pathidx]
00399                                        break
00400                            try:
00401                                l1bitname=hltTrgSeedMapper.findUniqueSeed(hpath,l1seedexpr)
00402                                if l1bitname:
00403                                    l1prescale=trgprescalemap[l1bitname]
00404                            except KeyError:
00405                                l1prescale=None
00406                            if l1prescale and hltprescale:
00407                                efflumi=recordedlumi*l1prescale*hltprescale                           
00408                            efflumidict[hpath]=[l1bitname,l1prescale,hltprescale,efflumi]    
00409                    bxdata=None
00410                    if withBXInfo:
00411                        bxvalueblob=lumidata[8]
00412                        bxerrblob=lumidata[9]
00413                        bxidxlist=[]
00414                        bxvaluelist=[]
00415                        bxerrorlist=[]
00416                        if bxvalueblob is not None and bxerrblob is not None:
00417                            bxvaluearray=CommonUtil.unpackBlobtoArray(bxvalueblob,'f')
00418                            bxerrorarray=CommonUtil.unpackBlobtoArray(bxerrblob,'f')
00419                            for idx,bxval in enumerate(bxvaluearray):
00420                                if bxval*perbunchnormval>xingMinLum:
00421                                    bxidxlist.append(idx)
00422                                    bxvaluelist.append(bxval*perbunchnormval)
00423                                    bxerrorlist.append(bxerrorarray[idx]*perbunchnormval)
00424                        bxdata=(bxidxlist,bxvaluelist,bxerrorlist)
00425                    beamdata=None
00426                    if withBeamInfo:
00427                        bxindexblob=lumidata[10]
00428                        beam1intensityblob=lumidata[11]
00429                        beam2intensityblob=lumidata[12]
00430                        bxindexlist=[]
00431                        b1intensitylist=[]
00432                        b2intensitylist=[]
00433                        if bxindexblob is not None and beam1intensity is not None and beam2intensity is not None:
00434                            bxindexlist=CommonUtil.unpackBlobtoArray(bxindexblob,'h').tolist()
00435                            beam1intensitylist=CommonUtil.unpackBlobtoArray(beam1intensityblob,'f').tolist()
00436                            beam2intensitylist=CommonUtil.unpackBlobtoArray(beam2intensityblob,'f').tolist()
00437                        beamdata=(bxindexlist,b1intensitylist,b2intensitylist)
00438                    perrunresult[(lumilsnum,cmslsnum)]=[timestamp,beamstatus,beamenergy,deliveredlumi,recordedlumi,calibratedlumierror,efflumidict,bxdata,beamdata]
00439                lumidata.clear() #clean lumi memory    
00440                trgdata.clear()
00441                hltdata.clear()
00442                result[run]=perrunresult
00443            return result
00444 ##===printers
00445     
00446