CMS 3D CMS Logo

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_6_2_5/src/RecoLuminosity/LumiDB/plotdata/checklumidiff.py

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={}#{fill:{run:delivered}}
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     #print lpcfills
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={}#{fill:[delivered]}
00042 
00043     plotfilldata={}#{fill:{run:delivered}}
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))