Changeset 216 for CCCC


Ignore:
Timestamp:
08/09/14 21:53:32 (6 years ago)
Author:
mjuckes
Message:

updates to extractMipInfo.py

Location:
CCCC/trunk/ceda_cc
Files:
3 edited

Legend:

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

    r215 r216  
    302302    validate('all',c) 
    303303    print """Number of tables=%s\nNumber of variables=%s\nNumber of standard names=%s\n""" % (ms.nn_tab,c.nn_var,c.nn_sn) 
     304    print ms.al 
    304305else: 
    305306  for tab in tlist: 
  • CCCC/trunk/ceda_cc/extractMipInfo.py

    r215 r216  
    103103cmip5_ignore = ['pfull','phalf','depth','depth_c','eta','nsigma','vertices_latitude','vertices_longitude','ztop','ptop','p0','z1','z2','href','k_c','a','a_bnds','ap','ap_bnds','b','b_bnds','sigma','sigma_bnds','zlev','zlev_bnds','zfull','zhalf'] 
    104104 
    105 vl0 = [] 
    106 tl = [] 
    107 td = {} 
    108  
    109 for mip in mips: 
     105class mipCo: 
     106 
     107  def __init__(self,mips): 
     108    self.vl0 = [] 
     109    self.tl = [] 
     110    self.td = {} 
     111    for mip in mips: 
     112      self._scan(mip) 
     113 
     114  def _scan(self,mip): 
     115     
    110116 ## dl = glob.glob( '%s%s' % (mip.dir,mip.pattern) ) 
    111   dl = glob.glob( '%s/%s%s' % (CC_CONFIG_DIR, mip.dir,mip.pattern) ) 
    112   dl.sort() 
    113   for d in dl: 
    114     tab = string.split( d, '/')[-1] 
    115     isoceanic = tab[:7] == "CMIP5_O" 
    116     l2 = ms.scan_table( open( d ).readlines(), None, asDict=True, lax=True, tag="x", warn=True) 
    117     l2k = [] 
    118     for k in l2.keys(): 
    119       if k not in cmip5_ignore: 
    120         l2k.append(k) 
    121     l2k.sort() 
    122     vl0 += l2k 
    123     tl.append( [tab,l2, l2k,isoceanic] ) 
    124     td[tab] = l2 
    125  
    126 vl0.sort() 
    127 vl = [] 
    128 vl.append( vl0[0] ) 
    129 vdict = { vl[0]:[] } 
    130 for v in vl0[1:]: 
    131   if v != vl[-1]: 
    132     vl.append(v) 
    133     vdict[v] = [] 
    134  
    135 for t in tl: 
    136   print t[0],t[2] 
    137   for k in t[2]: 
    138     vdict[k].append(t[0]) 
    139  
    140 vars = vdict.keys() 
    141 vars.sort() 
    142 for v in vars: 
    143   l = vdict[v] 
    144   l.sort() 
     117    dl = glob.glob( '%s/%s%s' % (CC_CONFIG_DIR, mip.dir,mip.pattern) ) 
     118    dl.sort() 
     119    for d in dl: 
     120      tab = string.split( d, '/')[-1] 
     121      isoceanic = tab[:7] == "CMIP5_O" 
     122      l2 = ms.scan_table( open( d ).readlines(), None, asDict=True, lax=True, tag="x", warn=True) 
     123      l2k = [] 
     124      for k in l2.keys(): 
     125        if k not in cmip5_ignore: 
     126          l2k.append(k) 
     127      l2k.sort() 
     128      self.vl0 += l2k 
     129      self.tl.append( [tab,l2, l2k,isoceanic] ) 
     130      self.td[tab] = l2 
     131 
     132    self.vl0.sort() 
     133    self.vl = [] 
     134    self.vl.append( self.vl0[0] ) 
     135    self.vdict = { self.vl[0]:[] } 
     136    for v in self.vl0[1:]: 
     137      if v != self.vl[-1]: 
     138        self.vl.append(v) 
     139        self.vdict[v] = [] 
     140 
     141    for t in self.tl: 
     142      for k in t[2]: 
     143        self.vdict[k].append(t[0]) 
     144 
     145    self.vars = self.vdict.keys() 
     146    self.vars.sort() 
     147    ##for v in self.vars: 
     148      ##l = self.vdict[v] 
     149      ##l.sort() 
    145150##  print v, l, td[l[0]][v][1].get('standard_name','__NO_STANDARD_NAME__') 
     151m = mipCo( mips )   
     152vars = m.vars 
     153vdict = m.vdict 
     154td = m.td 
     155 
     156allatts = ms.al 
     157thisatts = ['standard_name','units','long_name'] 
     158## need to have standard name first. 
     159for a in allatts: 
     160  if a not in thisatts: 
     161    thisatts.append(a) 
    146162 
    147163vd2 = {} 
     
    150166  l.sort() 
    151167  if len(l) > 1: 
    152     for att in ['standard_name','units','long_name']: 
     168    for att in thisatts: 
    153169    ##for att in ['standard_name','units']: 
    154170      atl = map( lambda x: td[x][v][1].get(att,'__ABSENT__'), l ) 
     
    171187        for x in l: 
    172188          a = td[x][v][1].get(att,'__ABSENT__') 
    173           if att == 'standard_name' or ( att == 'long_name' and vd2[v][0] == 2): 
     189          try: 
     190           if att == 'standard_name' or ( att == 'long_name' and vd2[v][0] == 2): 
    174191            iso = x[:7] == 'CMIP5_O' 
    175192            tt = snsubber.isFalseSn( v, a ) 
    176           elif att == 'long_name': 
     193           elif att == 'long_name': 
    177194            tt = snsubber.isFalseLn( v, a ) 
    178195            dims = td[x][v][0] 
    179196            iso = 'depth0m' in dims 
    180           else: 
     197           else: 
    181198            iso = False 
    182199            tt = (False,) 
    183200      ##    iso = False 
     201          except: 
     202            print att,v 
     203            raise 
    184204          isol.append((iso,x)) 
    185205          if tt[0]: 
     
    197217 
    198218          if not ok: 
    199              print 'Multiple values : ',att,v 
     219             print 'E001: Multiple values : ',att,v 
    200220             for t in isol: 
    201221               if t[0] == a: 
    202222                 tab = t[1] 
    203                  print tab,td[tab][v][1].get('standard_name','__ABSENT__'),td[tab][v][1].get('long_name','__ABSENT__') 
     223                 if att in ['standard_name','long_name']: 
     224                   print tab,td[tab][v][1].get('standard_name','__ABSENT__'),td[tab][v][1].get('long_name','__ABSENT__') 
     225                 else: 
     226                   print tab,td[tab][v][1].get(att,'__ABSENT__') 
    204227                 
    205228        if att == "standard_name": 
  • CCCC/trunk/ceda_cc/fcc_utils2.py

    r212 r216  
    1111 
    1212  def __init__(self, vats = ['standard_name','long_name','units','cell_methods'] ): 
     13    self.al = [] 
    1314    self.vats = vats 
    1415    self.re_cmor_mip2 = re.compile( 'dimensions:(?P<dims>.*?):::' ) 
     
    3637 
    3738    eee = [] 
     39    nal = [] 
    3840    for s in sll: 
    3941      if s[0] == 'variable_entry': 
     
    5153           else: 
    5254             aa[k] = v 
     55             nal.append(k) 
    5356         if self.project == 'CMIP5': 
    5457           if var == 'tos': 
     
    6265         eee.append( (var,ds,aa,tag) ) 
    6366 
     67 
     68    nal.sort() 
     69    nalu = [nal[0],] 
     70    for a in nal[1:]: 
     71      if a != nalu[-1]: 
     72        nalu.append(a) 
     73        if a not in self.al: 
     74          self.al.append( a ) 
    6475 
    6576    checkOldMethod = False 
Note: See TracChangeset for help on using the changeset viewer.