Go to the documentation of this file.00001 import sys,os,os.path,glob,csv,math,datetime
00002 def parseplotcache(filelist,fillmin,fillmax):
00003 result={}
00004 for f in filelist:
00005 fileobj=open(f,'rb')
00006 plotreader=csv.reader(fileobj,delimiter=',')
00007 idx=0
00008 for row in plotreader:
00009 if idx!=0:
00010 [run,fill]=row[0].split(':')
00011 [lumils,cmsls]=row[1].split(':')
00012 if int(fill) not in range(fillmin,fillmax+1):
00013 continue
00014 delivered=float(row[5])
00015 if not result.has_key(int(fill)):
00016 result[int(fill)]={}
00017 if result[int(fill)].has_key(int(run)):
00018 result[int(fill)][int(run)]+=delivered
00019 else:
00020 result[int(fill)][int(run)]=delivered
00021 idx+=1
00022 fileobj.close()
00023 return result
00024 def findlpcdir(lpcdir,fillmin):
00025 result=[]
00026 cachedir=lpcdir
00027 lpcfilldir=[f for f in glob.glob(cachedir+'/????') if os.path.isdir(f) ]
00028 lpcfills=[os.path.split(f)[1] for f in lpcfilldir]
00029
00030 result=[int(f) for f in lpcfills if int(f)>=fillmin]
00031 return result
00032
00033 if __name__ == "__main__" :
00034 ofile=open('checklumi.log','w')
00035 lpcdir='/afs/cern.ch/cms/CAF/CMSCOMM/COMM_GLOBAL/LHCFILES/'
00036 plotcachedir='/afs/cern.ch/cms/lumi/www/publicplots/public_lumi_plots_cache/pp_all'
00037 plotfiles=[f for f in glob.glob(os.path.join(plotcachedir,'lumicalc_cache_2012-??-??.csv')) if os.path.getsize(f)>0]
00038 fillmin=2450
00039 lpcfill2012=findlpcdir(lpcdir,fillmin)
00040 lpcfill2012.sort()
00041 lpcresult={}
00042
00043 plotfilldata={}
00044 plotfilldata=parseplotcache(plotfiles,min(lpcfill2012),max(lpcfill2012))
00045
00046 ofile.write('checking fills %s\n'%str(lpcfill2012))
00047 ofile.write("-----------------------------------------------------------------------------------\n")
00048 ofile.write('on %s\n'%str(datetime.datetime.now()) )
00049 ofile.write("-----------------------------------------------------------------------------------\n")
00050 tot_lumipplot=0.
00051 tot_nrunpplot=0
00052 tot_lumilpc=0.
00053 tot_nrunlpc=0
00054
00055 for fill in lpcfill2012:
00056 nruns_pplot=0
00057 nrun_lpc=0
00058 lumi_pplot=0.
00059 lumi_lpc=0.
00060 dellumi=0.
00061 delta=0.
00062 lpcfile=os.path.join(lpcdir,str(fill),str(fill)+'_summary_CMS.txt')
00063 if not os.path.exists(lpcfile):
00064 continue
00065 l=open(lpcfile,'rb')
00066 for line in l.readlines():
00067 line=line.strip()
00068 rundataline=line.split()
00069 if len(rundataline)!=4: continue
00070 lpcdelperrun=float(rundataline[3])
00071 lpcresult.setdefault(fill,[]).append(lpcdelperrun)
00072 nrun_lpc+=1
00073 lumi_lpc+=lpcdelperrun
00074 tot_nrunlpc+=1
00075 l.close()
00076 if plotfilldata.has_key(fill):
00077 runs=plotfilldata[fill].keys()
00078 if not runs: continue
00079 nruns_pplot=len(runs)
00080 tot_nrunpplot+=nruns_pplot
00081 runs.sort()
00082 for run in runs:
00083 lumi_pplot+=plotfilldata[fill][run]
00084 tot_lumipplot+=lumi_pplot
00085 tot_lumilpc+=lumi_lpc
00086 delta=lumi_pplot-lumi_lpc
00087 if lumi_lpc:
00088 dellumi=1.-math.fabs(lumi_pplot/lumi_lpc)
00089 if nruns_pplot!=nrun_lpc:
00090 ofile.write('fill: %d plot=%.2f plotrun=%d lpc=%.2f lpcrun=%d diff=%.2f rel=%.3f *\n'%(fill,lumi_pplot,nruns_pplot,lumi_lpc,nrun_lpc,delta,dellumi))
00091 else:
00092 ofile.write('fill: %d plot=%.2f plotrun=%d lpc=%.2f lpcrun=%d diff=%.2f rel=%.3f \n'%(fill,lumi_pplot,nruns_pplot,lumi_lpc,nrun_lpc,delta,dellumi))
00093 tot_diff=tot_lumipplot-tot_lumilpc
00094 tot_rel=0.
00095 if tot_lumilpc!=0:
00096 tot_rel=1.-tot_lumipplot/tot_lumilpc
00097
00098 ofile.write("-----------------------------------------------------------------------------------\n")
00099 ofile.write("tot : plot=%.2f lpc=%.2f diff=%.2f rel=%.3f\n" % (tot_lumipplot,tot_lumilpc,tot_diff,tot_rel))
00100 ofile.write("tot : plotnrun=%d lpcnrun=%d\n"%(tot_nrunpplot,tot_nrunlpc))