source: CMIP6dreqbuild/trunk/src/framework/scanLims.py @ 1139

Subversion URL: http://proj.badc.rl.ac.uk/svn/exarch/CMIP6dreqbuild/trunk/src/framework/scanLims.py@1291
Revision 1139, 2.8 KB checked in by mjuckes, 2 years ago (diff)

add missing

Line 
1import utils_wb
2import collections, re
3import shelve
4
5re_vstat = re.compile( '[str]{4}' ) 
6nt_range = collections.namedtuple('range', ['mn', 'mx', 'amn', 'amx', 'smn', 'smx', 'samn', 'samx', 'comment', 'prov', 'url', 'label', 'title'] )
7status = {'r':'robust','t':'tentative', 's':'suggested'}
8
9def parseVarNote0( r ):
10   var,tab0 = [x.strip() for x in r.split(':')]
11   if tab0.find( ',' ) == -1:
12     return [(var,tab0),]
13   else:
14     return [(var, x.strip() ) for x in tab0.split( ',' )]
15
16class scan(object):
17
18  def __init__(self):
19    self.wb = utils_wb.workbook( '../workbook/CMIP6_issues_and_fixes.xls' )
20
21    print self.wb.sns
22    self.cc = collections.defaultdict( dict )
23    self.cm5 = collections.defaultdict( dict )
24    self.ccc = collections.defaultdict( dict )
25
26    for l in open( 'ingest/cmip5_flat.csv' ).readlines():
27      r = l.strip().split( '\t' )
28      self.cm5[r[0][6:]][r[1]] = r[2:]
29
30
31  def _pval(self,x,tol):
32    if type( x ) == type(u''):
33      if x == u'=':
34        return x
35      ix = x.find( 'tol' )
36      if ix != -1:
37        x = x.replace( 'tol', '%s' % tol )
38
39      s = eval(x)
40      return s
41    else:
42      return x
43     
44  def run(self):
45
46   sht = self.wb.book.sheet_by_name( 'varNotes' )
47   print sht.nrows
48
49   tol = 1.e-3
50   for i in range(1,sht.nrows):
51     rr = [x.value for x in sht.row(i)] + ['','','']
52     if rr[0] != '' and rr[8] != 'xxxx':
53       print rr[0],[self._pval(x,tol) for x in rr[3:7]]
54       vals = [self._pval(x,tol) for x in rr[3:7]]
55       vstat = rr[8]
56       if not re_vstat.match( vstat ):
57         print 'ERROR.vstat.00001: unrecognised status (%s) overwritten:' % vstat, rr
58         vstat = 'tttt' 
59       vinfo = [rr[1],rr[7],rr[9],rr[10]]
60       for var,tab in parseVarNote0( rr[0] ):
61         self.cc[tab][var] = (vals, vstat, vinfo )
62
63   for t in self.cc:
64     for v in self.cc[t]:
65       mn, mx, amn, amx = self.cc[t][v][0]
66       smn, smx, samn, samx = [status[x] for x in self.cc[t][v][1] ]
67       vinfo = self.cc[t][v][2]
68       comment = vinfo[0]
69       prov = vinfo[2]
70       url = vinfo[3]
71       if len(url) > 0 and url[0] == '$':
72         url = 'http://w3id.org/cmip6dr/ranges' + url[1:]
73       else:
74         url = None
75       label = '%s-%s' % ( t,v)
76       title = 'Guide ranges for %s (table %s)' % (v,t)
77       tt = nt_range( mn, mx, amn, amx, smn, smx, samn, samx, comment, prov, url, label, title )
78       self.ccc[t][v] = tt
79
80   sh = shelve.open( 'misc/varRanges' )
81   sh['__info__'] = {'source':'scanLims.py', 'description':'varible limits for CMIP variables'}
82   sh['__cols__'] = ['table','var','vals:l,h,al,ah; vstat [string]; info:desc,how,prov']
83   for t in sorted( self.cc.keys() ):
84     for v in sorted( self.cc[t].keys() ):
85       print t,v, self.cc[t][v]
86       sh['%s.%s' % (str(t),str(v))] = (t,v,self.cc[t][v][:] )
87   sh.close()
88
89s = scan()
90s.run()
Note: See TracBrowser for help on using the repository browser.