CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
Functions | Variables
specificLumi-2011 Namespace Reference

Functions

def calculateSpecificLumi
 
def filltofiles
 output methods#### More...
 
def getFillFromDB
 
def getFillFromFile
 
def getSpecificLumi
 
def specificlumiTofile
 

Variables

tuple allfillF = open(os.path.join(options.inputdir,allfillname),'r')
 
string allfillname = 'allfills.txt'
 
tuple allfillsFromDB = lumiQueryAPI.allfills(q)
 
list allfillsFromFile = []
 query DB for all fills and compare with allfills.txt if found newer fills, store in mem fill number reprocess anyway the last 1 fill in the dir redo specific lumi for all marked fills More...
 
list allruns = [item for sublist in runs for item in sublist]
 
tuple filldata = getSpecificLumi(session,parameters,fillnum,options.inputdir)
 
list fillstoprocess = []
 
tuple l = line.strip()
 
tuple options = parser.parse_args()
 
tuple parameters = lumiQueryAPI.ParametersObject()
 
tuple parser = argparse.ArgumentParser(prog=os.path.basename(sys.argv[0]),description = "Dump Fill",formatter_class=argparse.ArgumentDefaultsHelpFormatter)
 
tuple q = session.nominalSchema()
 
tuple runs = runsperfillFromDB.values()
 
dictionary runsperfillFromDB = {}
 
dictionary runtimes = {}
 

Function Documentation

def specificLumi-2011.calculateSpecificLumi (   lumi,
  lumierr,
  beam1intensity,
  beam1intensityerr,
  beam2intensity,
  beam2intensityerr 
)
 

Definition at line 16 of file specificLumi-2011.py.

Referenced by getSpecificLumi().

16 
17 def calculateSpecificLumi(lumi,lumierr,beam1intensity,beam1intensityerr,beam2intensity,beam2intensityerr):
18  '''
19  '''
20  specificlumi=0.0
21  specificlumierr=0.0
22  if lumi!=0.0 and beam1intensity!=0.0 and beam2intensity!=0.0:
23  specificlumi=float(lumi)/(float(beam1intensity)*float(beam2intensity))
24  specificlumierr=specificlumi*math.sqrt(lumierr**2/lumi**2+beam1intensityerr**2/beam1intensity**2+beam2intensityerr**2/beam2intensity**2)
25  return (specificlumi,specificlumierr)
def specificLumi-2011.filltofiles (   allfills,
  runsperfill,
  runtimes,
  dirname 
)

output methods####

Definition at line 136 of file specificLumi-2011.py.

137 def filltofiles(allfills,runsperfill,runtimes,dirname):
138  f=open(os.path.join(dirname,allfillname),'w')
139  for fill in allfills:
140  print >>f,'%d'%(fill)
141  f.close()
142  for fill,runs in runsperfill.items():
143  filename='fill_'+str(fill)+'.txt'
144  if len(runs)!=0:
145  f=open(os.path.join(dirname,filename),'w')
146  for run in runs:
147  print >>f,'%d,%s'%(run,runtimes[run])
148  f.close()
def filltofiles
output methods####
def specificLumi-2011.getFillFromDB (   dbsession,
  parameters,
  fillnum 
)

Definition at line 26 of file specificLumi-2011.py.

References lumiQueryAPI.runsByfillrange(), and lumiQueryAPI.runsummaryByrun().

Referenced by getSpecificLumi().

26 
27 def getFillFromDB(dbsession,parameters,fillnum):
28  runtimesInFill={}
29  q=dbsession.nominalSchema().newQuery()
30  fillrundict=lumiQueryAPI.runsByfillrange(q,fillnum,fillnum)
31  del q
32  if len(fillrundict)>0:
33  for fill,runs in fillrundict.items():
34  for run in runs:
35  q=dbsession.nominalSchema().newQuery()
36  rresult=lumiQueryAPI.runsummaryByrun(q,run)
37  del q
38  if len(rresult)==0: continue
39  runtimesInFill[run]=rresult[3]
40  return runtimesInFill
def specificLumi-2011.getFillFromFile (   fillnum,
  inputdir 
)

Definition at line 41 of file specificLumi-2011.py.

Referenced by getSpecificLumi().

41 
42 def getFillFromFile(fillnum,inputdir):
43  runtimesInFill={}
44  #look for files 'fill_num.txt' in inputdir
45  for filename in os.listdir(inputdir):
46  filename=filename.strip()
47  if filename.find('.')==-1: continue
48  basename,extension=filename.split('.')
49  if not extension or extension!='txt':
50  continue
51  if basename.find('_')==-1: continue
52  prefix,number=basename.split('_')
53  if not number : continue
54  if fillnum!=int(number):continue
55  f=open(os.path.join(inputdir,'fill_'+number+'.txt'),'r')
56  for line in f:
57  l=line.strip()
58  fields=l.split(',')
59  if len(fields)<2 : continue
60  runtimesInFill[int(fields[0])]=fields[1]
61  f.close()
62  return runtimesInFill
def specificLumi-2011.getSpecificLumi (   dbsession,
  parameters,
  fillnum,
  inputdir 
)
specific lumi in 1e-30 (ub-1s-1) unit
lumidetail occlumi in 1e-27
1309_lumi_401_CMS.txt
time(in seconds since January 1,2011,00:00:00 UTC) stab(fraction of time spent in stable beams for this time bin) l(lumi in Hz/ub) dl(point-to-point error on lumi in Hz/ub) sl(specific lumi in Hz/ub) dsl(error on specific lumi)
20800119.0 1 -0.889948 0.00475996848729 0.249009 0.005583287562 -0.68359 6.24140208607 0.0 0.0 0.0 0.0 0.0 0.0 0.0383576 0.00430892097862 0.0479095 0.00430892097862 66.6447 4.41269758764 0.0 0.0 0.0
result [(time,beamstatusfrac,lumi,lumierror,speclumi,speclumierror)]

Definition at line 63 of file specificLumi-2011.py.

References python.multivaluedict.append(), lumiQueryAPI.beamIntensityForRun(), calculateSpecificLumi(), lumiQueryAPI.calibratedDetailForRunLimitresult(), getFillFromDB(), getFillFromFile(), and lumiQueryAPI.lumisummaryByrun().

63 
64 def getSpecificLumi(dbsession,parameters,fillnum,inputdir):
65  '''
66  specific lumi in 1e-30 (ub-1s-1) unit
67  lumidetail occlumi in 1e-27
68  1309_lumi_401_CMS.txt
69  time(in seconds since January 1,2011,00:00:00 UTC) stab(fraction of time spent in stable beams for this time bin) l(lumi in Hz/ub) dl(point-to-point error on lumi in Hz/ub) sl(specific lumi in Hz/ub) dsl(error on specific lumi)
70  20800119.0 1 -0.889948 0.00475996848729 0.249009 0.005583287562 -0.68359 6.24140208607 0.0 0.0 0.0 0.0 0.0 0.0 0.0383576 0.00430892097862 0.0479095 0.00430892097862 66.6447 4.41269758764 0.0 0.0 0.0
71  result [(time,beamstatusfrac,lumi,lumierror,speclumi,speclumierror)]
72  '''
73  #result=[]
74  runtimesInFill=getFillFromFile(fillnum,inputdir)#{runnum:starttimestr}
75  beamstatusDict={}#{runnum:{(startorbit,cmslsnum):beamstatus}}
77  fillbypos={}#{bxidx:(lstime,beamstatusfrac,lumi,lumierror,specificlumi,specificlumierror)}
78  #referencetime=time.mktime(datetime.datetime(2010,1,1,0,0,0).timetuple())
79  referencetime=0
80  if fillnum and len(runtimesInFill)==0:
81  runtimesInFill=getFillFromDB(dbsession,parameters,fillnum)#{runnum:starttimestr}
82  #precheck
83  totalstablebeamLS=0
84  for runnum in runtimesInFill.keys():
85  q=dbsession.nominalSchema().newQuery()
86  runinfo=lumiQueryAPI.lumisummaryByrun(q,runnum,'0001',beamstatus=None)
87  del q
88  lsbeamstatusdict={}
89  for perlsdata in runinfo:
90  cmslsnum=perlsdata[0]
91  startorbit=perlsdata[3]
92  beamstatus=perlsdata[4]
93  lsbeamstatusdict[(startorbit,cmslsnum)]=beamstatus
94  #print (startorbit,cmslsnum),beamstatus
95  if beamstatus=='STABLE BEAMS':
96  totalstablebeamLS+=1
97  beamstatusDict[runnum]=lsbeamstatusdict
98  if totalstablebeamLS<10:#less than 10 LS in a fill has 'stable beam', it's no a good fill
99  print 'fill ',fillnum,' , having less than 10 stable beam lS, is not good, skip'
100  return fillbypos
101  for runnum,starttime in runtimesInFill.items():
102  if not runtimesInFill.has_key(runnum):
103  print 'run '+str(runnum)+' does not exist'
104  continue
105  q=dbsession.nominalSchema().newQuery()
106  occlumidata=lumiQueryAPI.calibratedDetailForRunLimitresult(q,parameters,runnum)#{(startorbit,cmslsnum):[(bxidx,lumivalue,lumierr)]} #values after cut
107  del q
108  #print occlumidata
109  q=dbsession.nominalSchema().newQuery()
110  beamintensitydata=lumiQueryAPI.beamIntensityForRun(q,parameters,runnum)#{startorbit:[(bxidx,beam1intensity,beam2intensity)]}
111  #print 'beamintensity for run ',runnum,beamintensitydata
112  del q
113  for (startorbit,cmslsnum),lumilist in occlumidata.items():
114  if len(lumilist)==0: continue
115  beamstatusflag=beamstatusDict[runnum][(startorbit,cmslsnum)]
116  beamstatusfrac=0.0
117  if beamstatusflag=='STABLE BEAMS':
118  beamstatusfrac=1.0
119  lstimestamp=t.OrbitToUTCTimestamp(starttime,startorbit)
120  if beamintensitydata.has_key(startorbit) and len(beamintensitydata[startorbit])>0:
121  for lumidata in lumilist:
122  bxidx=lumidata[0]
123  lumi=lumidata[1]
124  lumierror=lumidata[2]
125  for beamintensitybx in beamintensitydata[startorbit]:
126  if beamintensitybx[0]==bxidx:
127  if not fillbypos.has_key(bxidx):
128  fillbypos[bxidx]=[]
129  beam1intensity=beamintensitybx[1]
130  beam2intensity=beamintensitybx[2]
131  speclumi=calculateSpecificLumi(lumi,lumierror,beam1intensity,0.0,beam2intensity,0.0)
132  fillbypos[bxidx].append([lstimestamp-referencetime,beamstatusfrac,lumi,lumierror,beam1intensity,beam2intensity,speclumi[0],speclumi[1]])
133  #print fillbypos
134  return fillbypos
def calibratedDetailForRunLimitresult
def beamIntensityForRun
def specificLumi-2011.specificlumiTofile (   fillnum,
  filldata,
  outdir 
)

Definition at line 149 of file specificLumi-2011.py.

References python.multivaluedict.append(), python.multivaluedict.map(), max(), and CommonUtil.transposed().

150 def specificlumiTofile(fillnum,filldata,outdir):
151  timedict={}#{lstime:[[stablebeamfrac,lumi,lumierr,speclumi,speclumierr]]}
152  #
153  #check outdir/fillnum subdir exists; if not, create it; else outdir=outdir/fillnum
154  #
155  filloutdir=os.path.join(outdir,str(fillnum))
156  print 'filloutdir ',filloutdir
157  if not os.path.exists(filloutdir):
158  os.mkdir(filloutdir)
159  for cmsbxidx,perbxdata in filldata.items():
160  lhcbucket=0
161  if cmsbxidx!=0:
162  lhcbucket=(cmsbxidx-1)*10+1
163  a=sorted(perbxdata,key=lambda x:x[0])
164  filename=str(fillnum)+'_lumi_'+str(lhcbucket)+'_CMS.txt'
165  linedata=[]
166  for perlsdata in a:
167  ts=int(perlsdata[0])
168  beamstatusfrac=perlsdata[1]
169  lumi=perlsdata[2]
170  lumierror=perlsdata[3]
171  beam1intensity=perlsdata[4]
172  beam2intensity=perlsdata[5]
173  speclumi=perlsdata[6]
174  speclumierror= perlsdata[7]
175  if lumi>0 and lumierror>0 and speclumi>0:
176  linedata.append([ts,beamstatusfrac,lumi,lumierror,speclumi,speclumierror])
177  if not timedict.has_key(ts):
178  timedict[ts]=[]
179  timedict[ts].append([beamstatusfrac,lumi,lumierror,speclumi,speclumierror])
180  if len(linedata)>10:#at least 10 good ls
181  f=open(os.path.join(filloutdir,filename),'w')
182  for line in linedata:
183  print >>f, '%d\t%e\t%e\t%e\t%e\t%e'%(line[0],line[1],line[2],line[3],line[4],line[5])
184  f.close()
185  #print 'writing avg file'
186  summaryfilename=str(fillnum)+'_lumi_CMS.txt'
187  f=None
188  lstimes=timedict.keys()
189  lstimes.sort()
190  fillseg=[]
191  lscounter=0
192  for lstime in lstimes:
193  allvalues=timedict[lstime]
194  transposedvalues=CommonUtil.transposed(allvalues,0.0)
195  bstatfrac=transposedvalues[0][0]#beamstatus does not change with bx position
196  lumivals=transposedvalues[1]
197  lumitot=sum(lumivals)
198  if bstatfrac==1.0 :
199  fillseg.append([lstime,lumitot])
200  lumierrs=transposedvalues[2]
201  lumierrortot=math.sqrt(sum(map(lambda x:x**2,lumierrs)))
202  specificvals=transposedvalues[3]
203  specificavg=sum(specificvals)/float(len(specificvals))#avg spec lumi
204  specificerrs=transposedvalues[4]
205  specifictoterr=math.sqrt(sum(map(lambda x:x**2,specificerrs)))
206  specificerravg=specifictoterr/float(len(specificvals))
207  if lscounter==0:
208  f=open(os.path.join(filloutdir,summaryfilename),'w')
209  lscounter+=1
210  print >>f,'%d\t%e\t%e\t%e\t%e\t%e'%(lstime,bstatfrac,lumitot,lumierrortot,specificavg,specificerravg)
211  if f is not None:
212  f.close()
213  #print 'writing summary file'
214  fillsummaryfilename=str(fillnum)+'_summary_CMS.txt'
215  f=open(os.path.join(filloutdir,fillsummaryfilename),'w')
216  if len(fillseg)==0:
217  print >>f,'%s'%('#no stable beams')
218  f.close()
219  return
220  previoustime=fillseg[0][0]
221  boundarytime=fillseg[0][0]
222  #print 'boundary time ',boundarytime
223  summaryls={}
224  summaryls[boundarytime]=[]
225  for [lstime,lumitot] in fillseg:#fillseg is everything with stable beam flag
226  if lstime-previoustime>50.0:
227  boundarytime=lstime
228  #print 'found new boundary ',boundarytime
229  summaryls[boundarytime]=[]
230  # print 'appending ',boundarytime,lstime,lumitot
231  summaryls[boundarytime].append([lstime,lumitot])
232  previoustime=lstime
233  #print summaryls
234 
235  summarylstimes=summaryls.keys()
236  summarylstimes.sort()
237  for bts in summarylstimes:
238  startts=bts
239  tsdatainseg=summaryls[bts]
240  #print 'tsdatainseg ',tsdatainseg
241  stopts=tsdatainseg[-1][0]
242  plu=max(CommonUtil.transposed(tsdatainseg,0.0)[1])
243  lui=sum(CommonUtil.transposed(tsdatainseg,0.0)[1])*23.357
244  print >>f,'%d\t%d\t%e\t%e'%(startts,stopts,plu,lui)
245  f.close()
def transposed
Definition: CommonUtil.py:52
const T & max(const T &a, const T &b)

Variable Documentation

tuple specificLumi-2011.allfillF = open(os.path.join(options.inputdir,allfillname),'r')

Definition at line 285 of file specificLumi-2011.py.

string specificLumi-2011.allfillname = 'allfills.txt'

Definition at line 14 of file specificLumi-2011.py.

tuple specificLumi-2011.allfillsFromDB = lumiQueryAPI.allfills(q)

Definition at line 282 of file specificLumi-2011.py.

list specificLumi-2011.allfillsFromFile = []

query DB for all fills and compare with allfills.txt if found newer fills, store in mem fill number reprocess anyway the last 1 fill in the dir redo specific lumi for all marked fills

Definition at line 275 of file specificLumi-2011.py.

list specificLumi-2011.allruns = [item for sublist in runs for item in sublist]

Definition at line 318 of file specificLumi-2011.py.

tuple specificLumi-2011.filldata = getSpecificLumi(session,parameters,fillnum,options.inputdir)

Definition at line 332 of file specificLumi-2011.py.

specificLumi-2011.fillstoprocess = []

Definition at line 276 of file specificLumi-2011.py.

tuple specificLumi-2011.l = line.strip()

Definition at line 287 of file specificLumi-2011.py.

tuple specificLumi-2011.options = parser.parse_args()

Definition at line 258 of file specificLumi-2011.py.

tuple specificLumi-2011.parameters = lumiQueryAPI.ParametersObject()

Definition at line 261 of file specificLumi-2011.py.

tuple specificLumi-2011.parser = argparse.ArgumentParser(prog=os.path.basename(sys.argv[0]),description = "Dump Fill",formatter_class=argparse.ArgumentDefaultsHelpFormatter)

Definition at line 247 of file specificLumi-2011.py.

tuple specificLumi-2011.q = session.nominalSchema()

Definition at line 281 of file specificLumi-2011.py.

tuple specificLumi-2011.runs = runsperfillFromDB.values()

Definition at line 317 of file specificLumi-2011.py.

tuple specificLumi-2011.runsperfillFromDB = {}

Definition at line 311 of file specificLumi-2011.py.

dictionary specificLumi-2011.runtimes = {}

Definition at line 316 of file specificLumi-2011.py.