source: CMIP6dreqbuild/trunk/srcMisc/dreq_consol_dreq.py @ 374

Subversion URL: http://proj.badc.rl.ac.uk/svn/exarch/CMIP6dreqbuild/trunk/srcMisc/dreq_consol_dreq.py@376
Revision 374, 21.9 KB checked in by mjuckes, 4 years ago (diff)

update

Line 
1import string, uuid, shelve
2from fcc_utils2 import snlist
3import xlrd, string, shelve, os, re, sys
4import collections
5import xlutils, xlwt
6import xlutils.copy
7import xlutils.styles
8####
9import dreq_cfg
10
11cmip5Vg = ['Omon','fx','Oyr','Oclim','Omon_3d','Omon_oth','Amon','Lmon','LImon','OImon','aero_3d','aero_oth','cfDay_2d','cfDay_3d','cfMon_3dstd','cfMon_3dmod','cfMon_2dmod','cfMon_sim','day_oth','day_ss','cfOff','cfSites','6hrLev','6hrPlev','3hr','cf3hr_grid','cf3hr_sim']
12cmip5Tabs = ['fx','Oyr','Oclim','Omon','Amon','Lmon','LImon','OImon','cfMon','aero','cfDay','day','cfOff','cfSites','6hrLev','6hrPlev','3hr','cf3hr']
13
14nt__deckrq = collections.namedtuple( 'dckrq', ['control','AMIP','abrupt4xCO2','rq_1pctCO2','historical'] )
15dd_rq = collections.defaultdict( dict )
16dd_tbl = collections.defaultdict( int )
17
18class wbcp(object):
19  def __init__( self, inbook=dreq_cfg.rqcfg.tmpl ):
20    self.book = xlrd.open_workbook(inbook,formatting_info=True)
21    self.sns = self.book.sheet_names()
22    self.wb = xlutils.copy.copy(self.book)
23    ##self.book = xlrd.open_workbook(inbook,formatting_info=True)
24    self.plain = xlwt.easyxf('')
25    self.styles = xlutils.styles.Styles(self.book)
26
27  def styleUpdate(self,other):
28    self.styles.cell_styles.update( other.styles.cell_styles )
29  def _getOutCell(self, rowIndex, colIndex,stbk=None):
30    """ HACK: Extract the internal xlwt cell representation. """
31   
32    if stbk == None:
33      this = self
34    else:
35      this = stbk
36    row = this.currentSo._Worksheet__rows.get(rowIndex)
37
38    if not row: return None
39
40    cell = row._Row__cells.get(colIndex)
41    return cell
42
43  def putValue2(self, row, col, value,sti=None,stj=None,stbk=None,style=0):
44    """ Change cell value without changing formatting. """
45    # HACK to retain cell style.
46    if sti == None:
47      sti = col
48    if stj == None:
49      stj = row
50    self.previousCell = self._getOutCell( stj,sti,stbk=stbk )
51    # END HACK, PART I
52
53    if style==0:
54      self.currentSo.write(row, col, value)
55    else:
56      self.currentSo.write(row, col, value,style=style)
57
58    # HACK, PART II
59
60    do_style = False
61    if self.previousCell and style==0 and do_style:
62        self.newCell = self._getOutCell( row, col)
63        if self.newCell:
64          if stbk == None:
65            self.newCell.xf_idx = self.previousCell.xf_idx
66          else:
67            self.newCell.xf_idx = self.previousCell.xf_idx
68            ##nn = len( self.styles.cell_styles.keys() )
69            ##print stj,sti,self.previousCell.xf_idx, nn
70            ##self.styles.cell_styles[nn] = stbk.styles.cell_styles.items()[self.previousCell.xf_idx]
71            ##self.newCell.xf_idx = nn
72    # END HACK
73
74  def focus( self, name ):
75    if name not in self.sns:
76       print '%s not in %s' % (name,str(self.sns) )
77       raise
78    self.currentIndex = self.sns.index(name)
79    if self.currentIndex == -1:
80      self.currentSi = None
81    else:
82      self.currentSi = self.book.sheet_by_name( name )
83      self.currentSo = self.wb.get_sheet( self.currentIndex )
84
85  def putValue(self,i,j,value,sti=None,stj=None):
86    ##self.currentSi.write(i,j,value,self.plain)
87    if sti == None:
88      sti = i
89    if stj == None:
90      stj = j
91    cell_style = self.styles[self.currentSi.cell(sti,stj)]
92    self.currentSo.write(i,j,value,cell_style)
93
94  def write(self,file='output.xls'):
95    self.wb.save( file )
96
97class tupsort:
98   def __init__(self,k=0):
99     self.k = k
100   def cmp(self,x,y):
101     return cmp( x[self.k], y[self.k] )
102
103def uniquify( ll ):
104  ll.sort()
105  l0 = [ll[0],]
106  for l in ll[1:]:
107    if l != l0[-1]:
108      l0.append(l)
109  return l0
110
111class workbook(object):
112  def __init__(self,file):
113    assert os.path.isfile(file), 'File %s not found' % file
114    self.book = xlrd.open_workbook( file )
115    self.sns = self.book.sheet_names()
116
117clabs = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
118def clab(n):
119  i = n/26
120  assert i < 26, 'Not ready for row number greater than 26*26'
121  if i == 0:
122    return clabs[n]
123  else:
124    return clabs[i-1] + clabs[ n - i*26]
125
126def getRow(sht):
127  ee = {}
128  for i in range(sht.nrows):
129    if sht.row(i)[0].ctype == 2 and str( sht.row(i)[0].value ) != '0.0':
130      l = map( lambda x: str( x.value ), sht.row(i) )
131      ##k = string.replace( l[5], ' ','')
132      k = l[5]
133      try:
134        ee[k] = l
135      except:
136        print l
137        raise
138  return ee
139   
140def outvSer( ov ):
141  ll = []
142  for i in ov:
143    ll.append( '%s|%s|%s' % tuple( map( str, i) ) )
144  return string.join(ll, '; ' )
145 
146class cpsh(object):
147
148  def __init__(self,wk0,mip,path,kk=3,oo=None):
149    self.oo = oo
150    self.nn = 0
151    self.kk = kk
152    wk = wbcp( path )
153    wk0.focus( u'New variables')
154    self.wk = wk
155    self.mip = mip
156    self.nvgs = []
157    for s in wk.sns:
158      if s not in ['Objectives','Experiments','Experiment Groups','Request scoping','New variables','__lists__']:
159        self.nvgs.append(s)
160    self.outv = collections.defaultdict(list)
161    for s in self.nvgs:
162      thiss = wk.book.sheet_by_name( s )
163      for k in range(4,thiss.nrows):
164        r = thiss.row(k)
165        v = r[1].value
166        t = r[2].value
167        f = r[3].value
168        s = r[5].value
169        m = r[7].value
170        if t[:3] == 'new':
171          self.outv[v].append( (f,s,m) )
172    this = wk.book.sheet_by_name(u'New variables')
173    ee = collections.defaultdict( list )
174    for i in range(3,this.nrows):
175      r = this.row(i)
176      if r[0].value == "**end**":
177        break
178      v = r[0].value
179      ee[v].append(i)
180
181    for i in range(3,this.nrows):
182      r = this.row(i)
183      if r[0].value == "**end**":
184        break
185
186      v = r[0].value
187      l = r[4].value
188      novar = v == '' and l == ''
189      omitOld = True
190      omit = False
191      if vdict.has_key(v) and omitOld:
192        omit = True
193
194      if not omit:
195        if not novar:
196          wk0.putValue2( self.kk, 0, mip )
197          s = r[1].value
198          if s in ['','?']:
199            chk = 0
200          elif esn.has_key(s):
201            chk = 1
202          elif esna.has_key(s):
203            chk = 2
204          else:
205            chk = -1
206          wk0.putValue2( self.kk, 1, chk )
207          self.nn += 1
208          htmlline = "<td>%s</td>" % mip
209        else:
210          chk = 0
211          htmlline = "<td></td>"
212     
213        j = 3
214        jo = 1
215        wk0.putValue2( self.kk, 3, outvSer( self.outv[v] ) )
216        for x in r:
217          if j == 3:
218            v = x.value
219            v0 = x.value
220            if str(v0) != "":
221              if len(ee[v0]) != 1:
222                 v += '!'
223              if vdict.has_key(v0):
224                 v += '**'
225            wk0.putValue2( self.kk, j+jo, v )
226          else:
227            wk0.putValue2( self.kk, j+jo, x.value )
228          if j in [3,7]:
229            htmlline += "<td>%s</td>\n" % x.value
230          elif j == 4:
231            if chk == -1:
232              htmlline += "<td>?%s?</td>\n" % x.value
233            else:
234              htmlline += "<td>%s</td>\n" % x.value
235          elif j == 8:
236            y = x.value
237          elif j == 9:
238            htmlline += '<td><span title="%s">%s</span></td>\n' % (x.value,y)
239          j += 1
240        self.kk += 1
241        if not novar:
242          if mip == "SIMIP":
243            print htmlline
244          htmlline = string.replace( htmlline, u'\u2013', '-' )
245          htmlline = string.replace( htmlline, u'\u2018', "'" )
246          htmlline = string.replace( htmlline, u'\u2019', "'" )
247          htmlline = string.replace( htmlline, u'\u2026', '...' )
248          htmlline = string.replace( htmlline, u'\u25e6', 'o' )
249          htmlline = string.replace( htmlline, u'\xb2', '2' )
250          htmlline = string.replace( htmlline, u'\xb3', '3' )
251          if self.oo != None:
252            self.oo.write( "<tr>%s</tr>" % str(htmlline) + '\n' )
253
254  def parseRQ(self):
255    this = self.wk.book.sheet_by_name(u'Request scoping')
256    for i in range(6,this.nrows):
257      r = this.row(i)
258      mipt = r[0].value
259      s = r[1].value
260      if mipt[:4]  in ['SPEC','CORD', 'CCMI'] and s != 'none':
261        print self.mip,mipt
262def lennbl(ll):
263  i = 0
264  ii = 0
265  for l in ll:
266    i+= 1
267    if l != '':
268      ii = i
269  return ii
270
271def  matchVals( thisv, valset ):
272  ll1 = []
273  ll2 = []
274  lk0 = []
275  kk = 0
276  for vals in valset:
277    l1 = min( [lennbl(thisv), lennbl(vals)] )
278    l2 = max( [lennbl(thisv), lennbl(vals)] )
279    ll = []
280    for i in range(l1):
281      ll.append( vals[i] == thisv[i] )
282    for i in range(l2-l1):
283      ll.append(False)
284    if all(ll):
285      return ll
286    k = 0
287    for l in ll:
288      if l:
289        k+=1
290    if ll[0]:
291      lk0.append( kk )
292     
293    ll1.append(k)
294    ll2.append(ll)
295    kk += 1
296  k0 = max( ll1 )
297  if len(lk0) > 0:
298    k0 = lk0[0]
299    return ll2[ k0 ]
300  return ll2[ ll1.index(k0) ]
301   
302kk=3
303
304base = '/home/martin/2014/wip/dreq/'
305dir0 = '/home/martin/2014/wip/dreq/input/'
306file = 'PMIP/CMIP6DataRequestCompilationTemplate_20141218_PMIP_v150228_final.xls'
307file = 'C4MIP/CMIP6DataRequestCompilationTemplate_C4MIP_06March2015_submitted.xls'
308fileTmpl = 'CMIP6DataRequestCompilationTemplate_20141218.xls'
309
310wk0 = wbcp( inbook=base+fileTmpl )
311cfg = dreq_cfg.rqcfg()
312wk0.focus( u'Experiments')
313mlist = collections.defaultdict( list )
314for i in range(2,wk0.currentSi.nrows):
315  mip = str(wk0.currentSi.row(i)[3].value)
316  vals = map( lambda x: x.value, wk0.currentSi.row(i) )
317  if mip != '':
318    mlist[mip].append( vals )
319
320keys = mlist.keys()
321keys.sort()
322print keys
323
324mipTrans ={ 'geoMIP':'GeoMIP' }
325diagMips = ['DynVar','SIMIP','CORDEX']
326k2 = cfg.ee.keys()
327k2.sort()
328nn = 0
329for k in k2:
330  k = mipTrans.get( k,k)
331  if k not in keys and k not in diagMips:
332     print '%s not found' % k
333     nn += 1
334assert nn == 0, 'MIP naming error?'
335
336
337class rqsummary(object):
338  __doc__ = """Create a request summary table, by MIP and variable table.
339Creates a list of default dictionaries, one for each table. An entry for each MIP in each dictionary.
340"""
341
342  def __init__(self,exptInfo=None):
343    self.tablist = []
344    self.tabindx = {}
345    self.mips = collections.defaultdict( int )
346    self.exptInfo = exptInfo
347    self.rowList = []
348    self.records = []
349
350  def add(self,mip,path):
351    return rq(mip,path,parent=self)
352
353  def addRow( self, mip, tab, obj, grid, gok, comment ):
354    k = str( uuid.uuid1() )
355    self.rowList.append( (k,mip,tab, obj, grid, gok, comment) )
356    return k
357
358  def addItem( self, mip, tab, nn, expt=None, rid=None ):
359    if not self.tabindx.has_key( tab ):
360      self.tabindx[tab] = len(self.tablist)
361      self.tablist.append( collections.defaultdict( int ) )
362    ix = self.tabindx[tab]
363    self.tablist[ix][mip] = nn
364    self.mips[mip] += 1
365    self.records.append( (mip,tab,expt, rid,nn) )
366
367  def show(self,oo):
368    mips = self.mips.keys()
369    mips.sort()
370    keys = self.tabindx.keys()
371    keys.sort()
372    oo.write( ',' + string.join(mips, ',') + ',\n' )
373    for k in keys:
374      r = []
375      ix = self.tabindx[k]
376      for m in mips:
377        r.append( self.tablist[ix][m] )
378      print k,r
379      if max(r) > 0:
380        rec = '%s,' % k
381        for i in r:
382          rec += '%s,' %  i
383        oo.write( rec + '\n' )
384
385
386#dd_rq = collections.defaultdict( dict )
387#dd_tbl = collections.defaultdict( int )
388class rq(object):
389
390  def __init__(self, mip,path, parent=None ):
391    self.mip = mip
392    self.wk1 = wbcp( inbook=path )
393    if u'Request scoping' in self.wk1.sns:
394      self.wk1.focus( u'Request scoping')
395
396      self.parent = parent
397      self.ok = self.parse01()
398    else:
399      self.ok = False
400
401  def parse01(self):
402
403    r4 = map( lambda x: x.value, self.wk1.currentSi.row(3) )
404    self.ixh = 0
405    self.ixm = 0
406    hhref = [u'control', u'AMIP', u'abrupt4xCO2', u'1pctCO2', u'CMIP6 historical']
407##
408## identify key start and end columns
409##
410## NEED to scan and check all expt. names.
411##
412    try:
413      self.ixh = r4.index( u'CMIP6 historical' )
414      self.ixm = r4.index( u'MIP name:' )
415      if r4[self.ixh-8] == u'control':
416        self.iccntl = self.ixh-8
417        hh = []
418        for j in range(5):
419          hh.append( r4[self.iccntl + j*2] )
420          if hh[j] != hhref[j]:
421            print 'ERROR.001.002: mismatch in heading %s' %j, r4
422      else:
423        print 'ERROR.001.001: control expt. column not found', r4
424    except:
425      if self.mip == 'DCPP':
426        self.ix0 = r4.index( u'DCPP-A' )
427        self.ixm = self.ix0+8
428        self.ixh = -1
429        self.iccntl = self.ix0
430        hh = []
431        for j in range(5):
432          hh.append( r4[self.iccntl + j*2] )
433      else:
434        print 'Failed to parse Row 4'
435        return False
436    nn = len(r4) - self.ixm
437    self.mipl = []
438    self.mipix = []
439    for v in r4[self.ixm+1:]:
440      if v not in ['',u'MIP name:']:
441        self.mipl.append( v )
442        self.mipix.append( r4.index(v) )
443
444    if self.ixh > 0:
445      i0 = self.ixh - 8
446    else:
447      i0 = self.ix0
448    if len(self.mipix) == 0:
449      i9 = self.ixm-1
450    else:
451      i9 = max( self.mipix ) + 1
452    self.nbl = []
453    self.hnbl = []
454
455    for j in range(5,self.wk1.currentSi.nrows):
456      rv = map( lambda x: x.value, self.wk1.currentSi.row(j) )
457      isblnk = all( map( lambda x: x == '', rv[i0:i9] ) )
458      if not isblnk:
459        self.nbl.append(j)
460      if self.ixh > 0:
461        ishblnk = all( map( lambda x: x == '', rv[self.ixh:self.ixh+2] ) )
462        if not isblnk:
463          self.hnbl.append(j)
464
465    self.opt = 'self'
466## historical
467    self.opt = 'deck'
468    self.opt = 'all'
469    if self.opt == 'hist':
470      for j in self.hnbl:
471        rv = map( lambda x: x.value, self.wk1.currentSi.row(j)[:7] )
472        tab = rv[0]
473        grid = rv[3]
474        gok = rv[4]
475        comment = rv[5]
476        obj = rv[6]
477        uid = self.parent.addRow( self.mip, tab, obj, grid, gok, comment )
478        self.readDeckColPair( j, self.ixh, 160, rid=uid )
479    elif self.opt == 'deck':
480      for j in self.hnbl:
481        rv = map( lambda x: x.value, self.wk1.currentSi.row(j)[:7] )
482        tab = rv[0]
483        grid = rv[3]
484        gok = rv[4]
485        comment = rv[5]
486        obj = rv[6]
487        uid = self.parent.addRow( self.mip, tab, obj, grid, gok, comment )
488        for je in range(5):
489          self.readDeckColPair( j, self.iccntl + je*2, 160, expt=hh[je], rid=uid )
490    elif self.opt == 'all':
491      for j in self.nbl:
492        rv = map( lambda x: x.value, self.wk1.currentSi.row(j)[:7] )
493        tab = rv[0]
494        grid = rv[3]
495        gok = rv[4]
496        comment = rv[5]
497        obj = rv[6]
498        uid = self.parent.addRow( self.mip, tab, obj, grid, gok, comment )
499        for je in range(5):
500          self.readDeckColPair( j, self.iccntl + je*2, 160, expt=hh[je], rid=uid )
501    else:
502      if self.ixh > 0:
503        i0 = self.ixh + 2
504      else:
505        i0 = self.ix0
506      hv = map( lambda x: x.value, self.wk1.currentSi.row(3)[i0:self.ixm] )
507      hfnd = []
508      for k in range(len(hv)/2):
509        h = hv[2*k]
510        if string.find( h, 'PMIP3' ) != -1:
511          h = string.replace(h,'PMIP3','PMIP')
512        ok = self.parent.exptInfo[0].has_key(h)
513        if not ok:
514          if string.find( h, '\n' ) != -1:
515            bits = string.split( h, '\n' )
516          else:
517            bits = string.split( h, ' ' )
518          if self.parent.exptInfo[0].has_key(bits[0]):
519            hv[2*k] = bits[0]
520            ok = True
521        hfnd.append( ok )
522        if not hfnd[-1]:
523             print self.mip, h, 'NOT FOUND'
524      for j in self.nbl:
525        rv = map( lambda x: x.value, self.wk1.currentSi.row(j)[i0:self.ixm] )
526        ntot = 0
527        tab = self.wk1.currentSi.row(j)[0].value
528        for k in range(len(rv)/2):
529          h = hv[2*k]
530          if self.parent.exptInfo != None:
531            if h == 'VolShortIni':
532                nensDef = 10
533                nyDef = 10
534            elif h == 'VolShort':
535                nensDef = 100
536                nyDef = 3
537            elif self.parent.exptInfo[0].has_key(h):
538              nensDef = self.parent.exptInfo[1][h]
539              nyDef = self.parent.exptInfo[2][h]
540            else:
541              nensDef = 1
542              nyDef = 100
543          if rv[2*k+0] == u'all':
544            nens = nensDef
545          elif rv[2*k+0] == '':
546            nens = 0
547          else:
548            nens = rv[2*k+0]
549          if rv[2*k+1] == u'all':
550            ny = nyDef
551          elif rv[2*k+1] == '':
552            ny = 0
553          elif type(rv[2*k+1]) in [type('x'),type(u'x')]:
554            s = rv[2*k+1]
555            print 'WARNING: %s' % s
556            if string.find( s, '\n' ) != -1:
557              bits = string.split( s, '\n' )
558              ny = int( bits[0] )
559            elif string.find( s, '/' ) != -1:
560              bits = string.split( s, '/' )
561              ny = int( bits[0] )
562            else:
563              ny = int( string.split( rv[2*k+1] )[0] )
564          else:
565            ny = rv[2*k+1]
566          try:
567            ntot += ny*nens
568          except:
569            print 'FAILED: ',ny,nens
570          if tab == 'day_oth' and self.mip == 'DAMIP':
571            print ny, nens, ntot
572
573
574        if self.mip == 'DAMIP':
575          print self.mip,tab,ntot
576        self.parent.addItem( self.mip, tab, ntot )
577
578    return True
579
580  def readDeckColPair( self,j, ix, nydef, expt=None, rid=None ):
581      try:
582        rv = map( lambda x: x.value, self.wk1.currentSi.row(j)[ix:ix+2] )
583        if rv[0] == u'all':
584          nens = 1
585        elif rv[0] == '':
586          nens = 0
587        else:
588          nens = rv[0]
589        if rv[1] == u'all':
590          ny = nydef
591        elif rv[1] == '':
592          ny = 0
593        elif type(rv[1]) in [type('x'),type(u'x')]:
594            s = rv[1]
595            print 'WARNING: %s' % s
596            if string.find( s, '\n' ) != -1:
597              bits = string.split( s, '\n' )
598              ny = int( bits[0] )
599            else:
600              x = string.split( s )[0]
601              if string.find( x, '-' ) != -1:
602                bb = string.split(x, '-' )
603                ny = int(bb[1])-int(bb[0])
604              else:
605                ny = int( x )
606        else:
607          ny = rv[1]
608
609        if type( ny ) in [type( 'x' ),type( u'x' )]:
610          bits = string.split(ny) 
611          if bits[1] == u'period':
612            bb = string.split( bits[0], '-' )
613            ny = int(bb[1]) - int(bb[0])
614
615        tab = self.wk1.currentSi.row(j)[0].value
616        try:
617          ntot = nens*ny
618        except:
619          print self.mip, tab, nens, ny
620          raise
621        if tab in self.wk1.sns:
622          tab = '%s:%s' % (self.mip,tab)
623        elif tab not in cmip5Vg:
624          if not ( tab[:5] == 'SPECS' or tab[:4] == 'CCMI' ):
625            tab = '%s!!%s' % (self.mip,tab)
626        self.parent.addItem( self.mip, tab, ntot, expt=expt, rid=rid )
627      except:
628        print 'ERROR.002.0001: Failed trying to scan deck column pair.'
629        print self.mip,expt
630        raise
631
632#https://secure.simplistix.co.uk/svn/xlwt/tags/0.7.2/xlwt/Style.py
633## following style used for a changed cell.
634style_string = "border: top thick, right thick, bottom thick, left thick; pattern: pattern fine_dots, fore_color white, back_color yellow;"
635deltaStyle = xlwt.easyxf(style_string)
636## following style is used in the 1st column if there is a change somewhere in the row and not in 1st column
637style_string = "border: top thick, right thick, bottom thick, left thick; pattern: pattern fine_dots, fore_color white, back_color orange;"
638delta0Style = xlwt.easyxf(style_string)
639style_string = "border: top thin, right thin, bottom thin, left thin; pattern: pattern fine_dots, fore_color white, back_color pale_blue;"
640toggleStyle = xlwt.easyxf(style_string)
641mipPrev=None
642ktog = 0
643jj = 2
644
645##wke = wbcp( 'CMIP6_consolidatedExptList_20150408.xls' )
646wke = wbcp( 'CMIP6DataRequest_ConsolidatedExperiments_20150618.xls' )
647wke.focus( 'Experiments' )
648expgs = collections.defaultdict( int )
649expgsEns = collections.defaultdict( int )
650expgsYpe = collections.defaultdict( int )
651tier0 = 1
652for k in range(2,wke.currentSi.nrows):
653  vals = map( lambda x: x.value, wke.currentSi.row(k) )
654  g = string.strip( vals[1] )
655  tier = vals[5]
656  if g[:5] == 'DAMIP':
657    print '######',g,vals[12],vals[13],tier
658  if tier0 >= tier:
659    expgs[g] += vals[13]
660    expgsEns[g] = vals[12]
661for k in expgs.keys():
662  if expgsEns[k] == 0:
663    expgsYpe[k] = 0
664  else:
665    try:
666      expgsYpe[k] = expgs[k]/expgsEns[k]
667    except:
668      print k, expgs[k], expgsEns[k]
669      raise
670
671rqs= rqsummary(exptInfo=(expgs,expgsEns,expgsYpe))
672
673##for k in keys:
674for k in k2:
675  ktog = 1 - ktog
676  if k in k2:
677    path = '%s%s/%s' % (dir0,k,cfg.ee[k])
678    print path
679    thisrq = rqs.add( k, path )
680    if thisrq.ok:
681      print thisrq.ok, k, thisrq.ixh, thisrq.ixm, thisrq.mipl, [len(thisrq.nbl),len(thisrq.hnbl)]
682    else:
683      print thisrq.ok, k
684
685oo = open( 'request.csv', 'w' )
686rqs.show( oo )
687oo.close()
688
689sh = shelve.open( 'dreq_consol_tables_reviewed_b_v20150827', 'r' )
690revTabIds = sh.keys()[:]
691sh.close()
692odir = 'sh20150708'
693odir = 'sh20150827'
694### need to split this, so that a collection of variables can be used in more than one request row.
695## check for duplicates
696## look to see if a reference to, e.g. Omon is CMIP5 or a revised list ....
697### requestVarGroup = mip, label, title, uuid
698### requestLinks = vgid, objective, grid, gridreq, comment, uuid -- inherits label and title
699sh = shelve.open( '%s/requestVarGroup_tmp' % odir, 'n' )
700sh['__info__'] = { 'label':'requestVarGroup_tmp', 'title':'Identify variable groups' }
701sh['__cols__'] = [ 'uuid', 'mip', 'label','title']
702rvgps = collections.defaultdict( list )
703### need to give temporary labels/titles here and consolidate after all variables have been collated in
704### sx2.
705for i in rqs.rowList:
706  kk ='%s.%s' % (i[1],i[2])
707  rvgps[kk].append(i) 
708for k in rvgps.keys():
709  if len(rvgps[k]) > 1:
710    print '################',k,'############# MULTIPLE ENTRIES'
711    for i in rvgps[k]:
712      print i
713  i = rvgps[k][0]
714  sh[i[0]] = (i[0],i[1],k,k)
715sh.close()
716sh = shelve.open( '%s/requestLinks_tmp' % odir, 'n' )
717sh['__info__'] = { 'label':'requestLinks', 'title':'Links from variable groups to a request id' }
718sh['__cols__'] = [ 'uid', 'mip', 'tab','objective','grid','gridreq','comment']
719for i in rqs.rowList:
720  sh[i[0]] = i[:]
721sh.close()
722sh = shelve.open( '%s/requestItems' % odir, 'n' )
723sh['__info__'] = { 'label':'requestItems', 'title':'Specification for a single experiment' , \
724     'comment':'Currently only has number of years -- need to include more details' }
725sh['__cols__'] = [ 'mip', 'tab', 'expt','rlid','ny']
726##('AerChemMIP', u'Omon_3d', u'CMIP6 historical', 'ad74be9a-26ef-11e5-8d9b-ac72891c3257', 0.0)
727for i in rqs.records:
728  k = str( uuid.uuid1() )
729  sh[k] = i[:]
730sh.close()
Note: See TracBrowser for help on using the repository browser.