Changeset 236


Ignore:
Timestamp:
10/10/14 13:08:53 (5 years ago)
Author:
mjuckes
Message:

fixed bug in json dump to Rec code

Location:
CCCC/trunk/ceda_cc
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • CCCC/trunk/ceda_cc/c4.py

    r235 r236  
    340340 
    341341    if self.project[:2] == '__': 
     342       self.source = 'dummy' 
    342343       flist = [] 
    343344       ss = 'abcdefgijk' 
     
    615616def dump_drs_list(drs_list, filename): 
    616617    import json 
    617     with open(filename, 'a+' as fh): 
     618    with open(filename, 'a+') as fh: 
    618619          for drs in drs_list: 
    619620                fh.write(json.dumps(drs)) 
  • CCCC/trunk/ceda_cc/extractMipInfo.py

    r232 r236  
    158158  def __init__(self,mips,helper=None): 
    159159    self.vl0 = [] 
     160    self.al0 = [] 
    160161    self.tl = [] 
     162    self.dl = [] 
    161163    self.td = {} 
     164    self.dd = {} 
    162165    self.helper = helper 
    163166    for mip in mips: 
     
    170173    dl.sort() 
    171174    for d in dl: 
     175     if d[-5:] != 'grids': 
    172176      tab = string.split( d, '/')[-1] 
    173177      isoceanic = tab[:7] == "CMIP5_O" 
    174178      l2 = ms.scan_table( open( d ).readlines(), None, asDict=True, lax=True, tag="x", warn=True) 
    175179      l2k = [] 
     180      usedDims = [] 
    176181      for k in l2.keys(): 
    177182        if k not in cmip5_ignore: 
    178183          l2k.append(k) 
     184          if l2[k][0] != 'scalar': 
     185            usedDims += l2[k][0] 
    179186      l2k.sort() 
     187      usedDims.sort() 
     188      usedDims = uniquify( usedDims ) 
     189       
     190      ##self.al0 += ms.adict.keys() 
    180191      self.vl0 += l2k 
    181192      self.tl.append( [tab,l2, l2k,isoceanic] ) 
    182193      self.td[tab] = l2 
     194      ##self.dd[tab] = ms.adict.copy() 
     195      self.dd[tab] = {} 
     196      for k in ms.adict.keys(): 
     197        if k not in usedDims: 
     198          print "WARNING: axis %s declared and not used in table %s" % (k,tab) 
     199      for u in usedDims: 
     200        if ms.adict.has_key(u): 
     201           self.dd[tab][u] = ms.adict[u] 
     202        else: 
     203           print 'USED DIMENSION %s not in table %s' % (u,tab) 
     204      ##self.dl.append( [tab, ms.adict.copy()] ) 
     205      self.dl.append( [tab, self.dd[tab].copy() ] ) 
     206      self.al0 += self.dd[tab].keys() 
    183207 
    184208    self.vl0.sort() 
     
    190214        self.vl.append(v) 
    191215        self.vdict[v] = [] 
     216    self.al0.sort() 
     217    self.al = [self.al0[0],] 
     218    self.adict = { self.al[0]:[] } 
     219    for v in self.al0[1:]: 
     220      if v != self.al[-1]: 
     221        self.al.append(v) 
     222        self.adict[v] = [] 
    192223 
    193224    for t in self.tl: 
     
    195226        self.vdict[k].append(t[0]) 
    196227 
     228## create list of tables for each dimension. 
     229    for a in self.dl: 
     230      for k in a[1].keys(): 
     231        self.adict[k].append(a[0]) 
     232 
     233    self.dims = self.adict.keys() 
     234    self.dims.sort() 
    197235    self.vars = self.vdict.keys() 
    198236    self.vars.sort() 
     
    203241 
    204242class runcheck1: 
    205   def __init__( self, m, thisatts): 
    206     vars = m.vars 
    207     vdict = m.vdict 
    208     td = m.td 
     243  def __init__( self, m, thisatts, isAxes=False): 
     244    self.errors = [] 
     245    if not isAxes: 
     246      vars = m.vars 
     247      vdict = m.vdict 
     248      td = m.td 
     249      ix = 1 
     250      xxx = '' 
     251    else: 
     252      vars = m.dims 
     253      vdict = m.adict 
     254      td = m.dd 
     255      ix = 0 
     256      xxx = 'dim: ' 
    209257    vd2 = {} 
    210258    for v in vars: 
     
    217265           atl = map( lambda x: string.join( td[x][v][0] ), l ) 
    218266         else: 
    219            atl = map( lambda x: td[x][v][1].get(att,'__ABSENT__'), l ) 
     267           atl = map( lambda x: td[x][v][ix].get(att,'__ABSENT__'), l ) 
    220268         atl.sort() 
    221269         av = [atl[0],] 
     
    226274           for a in av: 
    227275             if a not in snl and a not in snla: 
    228                print "INVALID STANDARD NAME: ",a 
     276               print xxx,"INVALID STANDARD NAME: ",a,v 
     277               self.errors.append( "INVALID STANDARD NAME: %s [%s]" % (a,v) ) 
    229278         if len(av) > 1: 
    230279           ee = {} 
     
    235284           isol = [] 
    236285           for x in l: 
    237              a = td[x][v][1].get(att,'__ABSENT__') 
     286             a = td[x][v][ix].get(att,'__ABSENT__') 
    238287             try: 
    239288              if att == 'standard_name' or ( att == 'long_name' and vd2[v][0] == 2): 
     
    266315    
    267316             if not ok: 
    268                 print 'E001: Multiple values : ',att,v 
     317                print xxx,'E001: Multiple values : ',att,v 
    269318                for t in isol: 
    270319                  if t[0] == a: 
    271320                    tab = t[1] 
    272321                    if att in ['standard_name','long_name']: 
    273                       print tab,td[tab][v][1].get('standard_name','__ABSENT__'),td[tab][v][1].get('long_name','__ABSENT__') 
     322                      print xxx,tab,td[tab][v][ix].get('standard_name','__ABSENT__'),td[tab][v][ix].get('long_name','__ABSENT__') 
    274323                    else: 
    275                       print tab,td[tab][v][1].get(att,'__ABSENT__') 
     324                      print xxx,tab,td[tab][v][ix].get(att,'__ABSENT__') 
    276325                    
    277326           if att == "standard_name": 
     
    287336     elif len(l) == 1: 
    288337           tab = vdict[v][0] 
    289            a = td[tab][v][1].get('standard_name','__ABSENT__') 
     338           a = td[tab][v][ix].get('standard_name','__ABSENT__') 
    290339           tt = snsubber.isFalseSn( v, a ) 
    291340           if tt[0]: 
     
    296345           ##print 'MULTIPLE VALUES: ',v,att,av 
    297346     else: 
    298       print 'Zero length element: %s' % v 
    299        
     347      print xxx, 'Zero length element: %s' % v 
    300348    
    301349class typecheck1: 
     
    363411               av.append(a) 
    364412         adict[att] = av 
    365          if v == "snd": 
    366            print adict 
     413         ##if v == "snd": 
     414           ##print adict 
    367415        
    368416## check for type 2 
     
    377425       else: 
    378426           l = map( lambda x: '%s:%s, ' % (x,len(adict[x]) ), self.type2Atts ) 
    379            ## print '%s: t3:: ' % v,string.join(l) 
    380427       if tval == 2: 
    381428         type2.append( v) 
     
    486533mips = ( NT_mip( 'cmip5','cmip5_vocabs/mip/', 'CMIP5_*' ), 
    487534         NT_mip( 'ccmi', 'ccmi_vocabs/mip/', 'CCMI1_*')  ) 
     535cordex_mip = NT_mip( 'cordex', 'cordex_vocabs/mip/', 'CORDEX_*') 
     536specs_mip = NT_mip( 'specs', 'specs_vocabs/mip/', 'SPECS_*') 
     537mips = ( cordex_mip, NT_mip( 'ccmi', 'ccmi_vocabs/mip/', 'CCMI1_*'), NT_mip( 'cmip5','cmip5_vocabs/mip/', 'CMIP5_*' ), ) 
     538mips = ( cordex_mip, ) 
    488539mips = ( NT_mip( 'ccmi', 'ccmi_vocabs/mip/', 'CCMI1_*'),  ) 
    489 cordex_mip = NT_mip( 'cordex', 'cordex_vocabs/mip/', 'CORDEX_*') 
    490 mips = ( cordex_mip, NT_mip( 'ccmi', 'ccmi_vocabs/mip/', 'CCMI1_*'), NT_mip( 'cmip5','cmip5_vocabs/mip/', 'CMIP5_*' ), ) 
    491540mips = ( NT_mip( 'cmip5','cmip5_vocabs/mip/', 'CMIP5_*' ), ) 
     541mips = ( specs_mip, ) 
    492542m = mipCo( mips )   
    493543h = helper() 
     544 
     545al = [] 
     546for k0 in m.dd.keys(): 
     547  for k1 in m.dd[k0].keys(): 
     548    al += m.dd[k0][k1][0].keys() 
     549ald = uniquify( al ) 
     550ald.sort() 
     551i = ald.index('standard_name') 
     552ald.pop(i) 
     553ald = ['standard_name', ] + ald 
     554 
     555cmip5AxesAtts = ['axis', 'bounds_values', 'climatology', 'coords_attrib', 'formula', 'index_only', 'long_name', 'must_call_cmor_grid', 'must_have_bounds', 'out_name', 'positive', 'requested', 'requested_bounds', 'standard_name', 'stored_direction', 'tolerance', 'type', 'units', 'valid_max', 'valid_min', 'value', 'z_bounds_factors', 'z_factors'] 
     556 
     557## check consistency of dimensions 
     558r = runcheck1( m, ald, isAxes=True ) 
     559for e in r.errors: 
     560  print e 
    494561 
    495562allatts = ms.al 
  • CCCC/trunk/ceda_cc/fcc_utils2.py

    r216 r236  
    3737 
    3838    eee = [] 
     39    fff = [] 
    3940    nal = [] 
    4041    for s in sll: 
    41       if s[0] == 'variable_entry': 
    42          bits = string.split(s[1][0],':') 
    43          assert len(bits) == 2, 'Can not unpack: %s' % str(s[1]) 
    44          k,var =  map( string.strip, string.split(s[1][0],':') ) 
    45          aa = {'standard_name':None, 'long_name':None,'units':None,'cell_methods':None } 
    46          ds = 'scalar' 
    47          for l in s[1][1:]: 
    48            bits = string.split(l,':') 
    49            k = string.strip(bits[0]) 
    50            v = string.strip( string.join( bits[1:], ':' ) ) 
    51            if k == 'dimensions': 
    52              ds = string.split(v) 
    53            else: 
    54              aa[k] = v 
    55              nal.append(k) 
    56          if self.project == 'CMIP5': 
    57            if var == 'tos': 
    58              if aa['standard_name'] != 'sea_surface_temperature': 
    59                print 'Overriding incorrect CMIP5 standard_name for %s' % var 
    60                aa['standard_name'] = 'sea_surface_temperature' 
    61            elif var == 'ps': 
    62              if aa['long_name'] != 'Surface Air Pressure': 
    63                print 'Overriding inconsistent CMIP5 long_name for %s' % var 
    64                aa['long_name'] = 'Surface Air Pressure' 
    65          eee.append( (var,ds,aa,tag) ) 
    66  
    67  
     42      if s[0] in ['variable_entry','axis_entry']: 
     43        x = self.scan_entry_01( s,tag ) 
     44        if s[0] == 'variable_entry': 
     45           eee.append(x[0]) 
     46           nal += x[1] 
     47        else: 
     48           fff.append(x[0]) 
     49 
     50    self.axes = fff 
    6851    nal.sort() 
    6952    nalu = [nal[0],] 
     
    11598## l[0] = var name, l[1] = dimensions, l[2] = attributes, l[3] = tag 
    11699      for l in eee: 
    117         ff[l[0]] = ( l[1], l[2], l[3], tag ) 
     100        ff[l[0]] = ( l[1], l[2], l[3] ) 
     101      self.adict = {} 
     102## l[0] = axis name, l[1] = attributes, l[2] = tag 
     103      for l in fff: 
     104        self.adict[l[0]] = ( l[1], l[2] ) 
    118105      if appendTo != None: 
    119106        for k in ff.keys(): 
     
    150137        return ff 
    151138 
     139  def scan_entry_01(self,s,tag): 
     140      assert s[0] in ['variable_entry','axis_entry'],'scan_entry_01 called with unsupported entry type: %s' % s[0] 
     141      bits = string.split(s[1][0],':') 
     142      assert len(bits) == 2, 'Can not unpack: %s' % str(s[1]) 
     143      k,var =  map( string.strip, string.split(s[1][0],':') ) 
     144      nal = [] 
     145      if s[0] == 'variable_entry': 
     146         aa = {'standard_name':None, 'long_name':None,'units':None,'cell_methods':None } 
     147         ds = 'scalar' 
     148      else: 
     149         aa = {'standard_name':None, 'long_name':None,'units':None } 
     150         ds = None 
     151      for l in s[1][1:]: 
     152           bits = string.split(l,':') 
     153           k = string.strip(bits[0]) 
     154           v = string.strip( string.join( bits[1:], ':' ) ) 
     155           if k == 'dimensions': 
     156             ds = string.split(v) 
     157           else: 
     158             aa[k] = v 
     159             nal.append(k) 
     160      if self.project == 'CMIP5': 
     161           if var == 'tos': 
     162             if aa['standard_name'] != 'sea_surface_temperature': 
     163               print 'Overriding incorrect CMIP5 standard_name for %s' % var 
     164               aa['standard_name'] = 'sea_surface_temperature' 
     165           elif var == 'ps': 
     166             if aa['long_name'] != 'Surface Air Pressure': 
     167               print 'Overriding inconsistent CMIP5 long_name for %s' % var 
     168               aa['long_name'] = 'Surface Air Pressure' 
     169      if s[0] == 'variable_entry': 
     170        return ((var,ds,aa,tag), nal) 
     171      else: 
     172        return ((var,aa,tag), nal) 
    152173 
    153174class snlist: 
Note: See TracChangeset for help on using the changeset viewer.