source: CMIP6dreqbuild/trunk/src/workbook/importWbMods.py @ 546

Subversion URL: http://proj.badc.rl.ac.uk/svn/exarch/CMIP6dreqbuild/trunk/src/workbook/importWbMods.py@546
Revision 546, 3.6 KB checked in by mjuckes, 5 years ago (diff)

updates

Line 
1from utils_wb import workbook
2import string, collections
3
4class loadMipMaps(object):
5  def __init__(self,mip):
6    nt__mapr = collections.namedtuple( 'mapr', ['vid1','sn','lab1','vid2','lab2','group','mip','k','kk'] )
7    knownMips = {'SIMIP':'simipMap2.csv'}
8    assert mip in knownMips, 'mip %s not recognised' % mip
9    ##['CFMIP-OImon', '64c8d0c2-9671-11e5-b0d6-ac72891c3257', 'sea_ice_thickness', 'sit', 0, 1, 'f081b01e-960a-11e5-a98a-ac72891c3257', 'sithick']
10    ii = open('inputs/%s' % knownMips[mip] )
11    self.records = []
12    for l in ii.readlines():
13      rr = [string.strip(x) for x in string.split( l, '\t') ]
14      rr[7] = int(rr[7])
15      rr[8] = int(rr[8])
16      self.records.append( nt__mapr._make(  rr ) )
17    self.ss = collections.defaultdict( list )
18    for r in self.records:
19      self.ss[r.vid1].append( r )
20
21class loadVars(object):
22  def __init__(self,opt=1):
23    if opt == 0:
24      wb = workbook( 'inputs/var.xls' )
25    else:
26      wb = workbook( 'inputs/vars_20151201.xls' )
27    #x = ['label', 'title', 'description', 'procComment', 'procnote', 'prov', 'provmip', 'sn', 'units', 'uid','defaultp','tags','alias']
28    #nt_var = collections.namedtuple( 'var', x )
29
30    self.d1 = {}
31    self.c1 = collections.defaultdict(list)
32    s1 = wb.book.sheet_by_name(u'var')
33    for i in range(1,s1.nrows):
34      try:
35        rr = [x.value for x in s1.row(i)]
36        uid = rr[9]
37        assert uid not in self.d1, 'Duplicate uid in var.xls: %s, %s' % (uid,str(rr) )
38        rr[10] = int( rr[10] )
39        var = string.replace( rr[0], '_', '' )
40        if var != rr[0]:
41          print '++++++++',rr
42          rr[0] = var
43        self.d1[uid] = [str(x) for x in rr]
44        self.c1[rr[0]].append( uid )
45      except:
46        print rr
47        raise
48   
49class loadFixes(object):
50  def __init__(self):
51    wb = workbook( 'CMIP6_issues_and_fixes.xls' )
52
53    self.d1 = {}
54    self.d2 = {}
55    self.d3 = {}
56    s1 = wb.book.sheet_by_name(u'var')
57    for i in range(1,s1.nrows):
58      rr = [x.value for x in s1.row(i)]
59      if string.find( rr[0], '::' ) != -1:
60        a,b = string.split( rr[0], '::' )
61        assert str(a ) not in self.d1, 'Duplicate variable name in var sheet: %s' % rr[0]
62        rr[0] = b
63        self.d1[a] = rr
64      else:
65        assert str(rr[0] ) not in self.d1, 'Duplicate variable name in var sheet: %s' % rr[0]
66        self.d1[  str(rr[0]) ] = rr
67 
68    s2 = wb.book.sheet_by_name(u'CMORvar')
69    for i in range(1,s2.nrows):
70      rr = [x.value for x in s2.row(i)]
71      assert str(rr[1] ) not in self.d2, 'Duplicate identifier in CMORvar sheet: %s' % rr[1]
72      self.d2[  str(rr[1]) ] = rr
73
74class loadCmorDims(object):
75  def __init__(self):
76    wb = workbook( 'inputs/CMORdims.xls' )
77    s1 = wb.book.sheet_by_name(u'Sheet1')
78    self.ss = {}
79    for i in range(3,s1.nrows):
80      rr = [string.strip( str(x.value) ) for x in s1.row(i)]
81      assert rr[1] not in self.ss, 'Duplicate dimension: %s' % rr[1]
82      self.ss[ rr[1] ] = rr
83
84class loadSpatial(object):
85  def __init__(self):
86    wb = workbook( 'inputs/spatialShape_ref.xls' )
87    s1 = wb.book.sheet_by_name(u'ss_ref')
88    self.ss = {}
89    for i in range(s1.nrows):
90      rr = [x.value for x in s1.row(i)]
91      if rr[0] != 'label':
92        assert rr[2] not in self.ss, 'Duplicate dimension set in spatial shape sheet: %s' % rr[2]
93        a,b,k,lf = tuple( [string.strip(x) for x in rr[:4] ] )
94        li = str( int( rr[4] ) )
95        self.ss[ k ] = (a,b,lf,li)
96 
97class run(object):
98  def __init__(self):
99    self.fx = loadFixes()
100    self.vars = loadVars()
101    self.ls = loadSpatial()
102    self.cm = loadCmorDims()
103    self.mmsi = loadMipMaps( 'SIMIP' )
Note: See TracBrowser for help on using the repository browser.