CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
checklumidiff.py
Go to the documentation of this file.
1 import sys,os,os.path,glob,csv,math,datetime
2 def parseplotcache(filelist,fillmin,fillmax):
3  result={}#{fill:{run:delivered}}
4  for f in filelist:
5  fileobj=open(f,'rb')
6  plotreader=csv.reader(fileobj,delimiter=',')
7  idx=0
8  for row in plotreader:
9  if idx!=0:
10  [run,fill]=row[0].split(':')
11  [lumils,cmsls]=row[1].split(':')
12  if int(fill) not in range(fillmin,fillmax+1):
13  continue
14  delivered=float(row[5])
15  if not result.has_key(int(fill)):
16  result[int(fill)]={}
17  if result[int(fill)].has_key(int(run)):
18  result[int(fill)][int(run)]+=delivered
19  else:
20  result[int(fill)][int(run)]=delivered
21  idx+=1
22  fileobj.close()
23  return result
24 def findlpcdir(lpcdir,fillmin):
25  result=[]
26  cachedir=lpcdir
27  lpcfilldir=[f for f in glob.glob(cachedir+'/????') if os.path.isdir(f) ]
28  lpcfills=[os.path.split(f)[1] for f in lpcfilldir]
29  #print lpcfills
30  result=[int(f) for f in lpcfills if int(f)>=fillmin]
31  return result
32 
33 if __name__ == "__main__" :
34  ofile=open('checklumi.log','w')
35  lpcdir='/afs/cern.ch/cms/CAF/CMSCOMM/COMM_GLOBAL/LHCFILES/'
36  plotcachedir='/afs/cern.ch/cms/lumi/www/publicplots/public_lumi_plots_cache/pp_all'
37  plotfiles=[f for f in glob.glob(os.path.join(plotcachedir,'lumicalc_cache_2012-??-??.csv')) if os.path.getsize(f)>0]
38  fillmin=2450
39  lpcfill2012=findlpcdir(lpcdir,fillmin)
40  lpcfill2012.sort()
41  lpcresult={}#{fill:[delivered]}
42 
43  plotfilldata={}#{fill:{run:delivered}}
44  plotfilldata=parseplotcache(plotfiles,min(lpcfill2012),max(lpcfill2012))
45 
46  ofile.write('checking fills %s\n'%str(lpcfill2012))
47  ofile.write("-----------------------------------------------------------------------------------\n")
48  ofile.write('on %s\n'%str(datetime.datetime.now()) )
49  ofile.write("-----------------------------------------------------------------------------------\n")
50  tot_lumipplot=0.
51  tot_nrunpplot=0
52  tot_lumilpc=0.
53  tot_nrunlpc=0
54 
55  for fill in lpcfill2012:
56  nruns_pplot=0
57  nrun_lpc=0
58  lumi_pplot=0.
59  lumi_lpc=0.
60  dellumi=0.
61  delta=0.
62  lpcfile=os.path.join(lpcdir,str(fill),str(fill)+'_summary_CMS.txt')
63  if not os.path.exists(lpcfile):
64  continue
65  l=open(lpcfile,'rb')
66  for line in l.readlines():
67  line=line.strip()
68  rundataline=line.split()
69  if len(rundataline)!=4: continue
70  lpcdelperrun=float(rundataline[3])
71  lpcresult.setdefault(fill,[]).append(lpcdelperrun)
72  nrun_lpc+=1
73  lumi_lpc+=lpcdelperrun
74  tot_nrunlpc+=1
75  l.close()
76  if plotfilldata.has_key(fill):
77  runs=plotfilldata[fill].keys()
78  if not runs: continue
79  nruns_pplot=len(runs)
80  tot_nrunpplot+=nruns_pplot
81  runs.sort()
82  for run in runs:
83  lumi_pplot+=plotfilldata[fill][run]
84  tot_lumipplot+=lumi_pplot
85  tot_lumilpc+=lumi_lpc
86  delta=lumi_pplot-lumi_lpc
87  if lumi_lpc:
88  dellumi=1.-math.fabs(lumi_pplot/lumi_lpc)
89  if nruns_pplot!=nrun_lpc:
90  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))
91  else:
92  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))
93  tot_diff=tot_lumipplot-tot_lumilpc
94  tot_rel=0.
95  if tot_lumilpc!=0:
96  tot_rel=1.-tot_lumipplot/tot_lumilpc
97 
98  ofile.write("-----------------------------------------------------------------------------------\n")
99  ofile.write("tot : plot=%.2f lpc=%.2f diff=%.2f rel=%.3f\n" % (tot_lumipplot,tot_lumilpc,tot_diff,tot_rel))
100  ofile.write("tot : plotnrun=%d lpcnrun=%d\n"%(tot_nrunpplot,tot_nrunlpc))
const T & max(const T &a, const T &b)
double split
Definition: MVATrainer.cc:139