Changeset 615


Ignore:
Timestamp:
17/03/16 14:59:43 (4 years ago)
Author:
mjuckes
Message:

modifications for better treatment of sub-groups

Location:
CMIP6dreqbuild/trunk/src/workbook
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • CMIP6dreqbuild/trunk/src/workbook/choiceCfg.py

    r613 r615  
    100100    this = {'uid':uid, 'label':label, 'title':title, 'class':thisClass, 'varList':var, 'optionList':'', 'description':desc } 
    101101    self.choices[uid] = this 
     102 
     103## advection terms can be optional 
     104## opottemp*, ocontemp* and osalt* 
     105## Xrmadvect, Xpadvect, Xpsmadvect 
     106##  opottemppadvect 
    102107 
    103108  def highResMip(self): 
  • CMIP6dreqbuild/trunk/src/workbook/importShDreq2.py

    r613 r615  
    3333 
    3434WbMods = importWbMods.run() 
     35tableUtils = ivg.tableUtils() 
    3536 
    3637nt__trace = collections.namedtuple( 'trace', ['GROUPITEM_ta','SPATIALSHAPE_01'] ) 
     
    165166    self.skey = {'experiment':rq.expt, 'exptgroup':rq.exgp, \ 
    166167         'objective':rq.objec, 'var':rq.vars,'ovar':rq.refti, 'groupitem':rq.grps, \ 
    167          'revisedtabitem':rq.revti, 'requestlink':rq.rqli, 'requestitem':rq.rqit, \ 
     168         'revisedtabitem_xxx':rq.revti, 'requestlink':rq.rqli, 'requestitem':rq.rqit, \ 
    168169         'requestvargroup':rq.rqvg, 'tablesection':rq.rqsect, 'requestvar':rq.revti} 
    169170 
     
    332333      item.setAttribute( 'title', title  ) 
    333334      item.setAttribute( 'units', str(u) ) 
    334       item.setAttribute( 'description', str(d) ) 
     335      item.setAttribute( 'description', uniCleanFunc( d ) ) 
    335336      thiss.appendChild( item ) 
    336337 
     
    685686                    'deflate_level', 'shuffle', 'ok_max_mean_abs', 'flag_meanings', 'type', 'ok_min_mean_abs',  \ 
    686687                    'deflate', 'valid_min', 'flag_values', 'modeling_realm', 'valid_max', 'positive', 'mipTable', \ 
    687                     'prov', 'provNote', 'frequency', 'rowIndex', 'coordinates','defaultPriority') 
     688                    'prov', 'provNote', 'frequency', 'rowIndex', 'coordinates','defaultPriority','mipTableSection') 
    688689    self.cmvinfo2 = ('uid','stid','label','title','description','vid', \ 
    689690                    'deflate_level', 'shuffle', 'ok_max_mean_abs', 'type', 'ok_min_mean_abs',  \ 
    690                     'deflate', 'valid_min', 'modeling_realm', 'valid_max', 'positive', 'mipTable', \ 
     691                    'deflate', 'valid_min', 'modeling_realm', 'valid_max', 'positive', 'mipTable', 'mipTableSection',  \ 
    691692                    'prov', 'provNote', 'frequency', 'rowIndex', 'defaultPriority') 
    692693    self.rqvinfo = ('uid','label','vid','gpid','priority','mip','table' ) 
     
    807808                      tt.deflate_level, tt.shuffle, tt.ok_max_mean_abs, tt.flag_meanings, tt.type, tt.ok_min_mean_abs, \ 
    808809                      tt.deflate, tt.valid_min, tt.flag_values, tt.modeling_realm, tt.valid_max, tt.positive, tt.mipTable, \ 
    809                       prov, tt.ssect, fr, tt.rowIndex, '',int(tt.priority)) ) 
     810                      prov, tt.ssect, fr, tt.rowIndex, '',int(tt.priority), tt.ssect) ) 
    810811                    self.realmByVar[ lab ].append( tt.modeling_realm ) 
    811812                    if string.strip( tt.gpid ) == '': 
     
    10491050                    tt1.deflate_level, tt1.shuffle, tt1.ok_max_mean_abs, tt1.flag_meanings, tt1.type, tt1.ok_min_mean_abs, \ 
    10501051                    tt1.deflate, tt1.valid_min, tt1.flag_values, thisrealm, tt1.valid_max, tt1.positive, ntab, \ 
    1051                     prov, provNote, tt.freq, tt.rowIndex, '', int(p))  
     1052                    prov, provNote, tt.freq, tt.rowIndex, '', int(p),'')  
    10521053                  self.realmByVar[ lab ].append( thisrealm ) 
    10531054                  thisrqv = [str( uuid.uuid1() ),lab, tt.uid, tt.gpid, p, tt.mip, tt.group] 
     
    10801081                    0, 0, 0, 0, '', 0, \ 
    10811082                    0,0,0, thisrealm, 0, '', ntab, \ 
    1082                     prov, provNote, tt.freq, tt.rowIndex, '', str(p))  
     1083                    prov, provNote, tt.freq, tt.rowIndex, '', str(p), '')  
    10831084                  self.realmByVar[ lab ].append( thisrealm ) 
    10841085 
     
    13431344        freq = freq_map.get( tt.freq, tt.freq ) 
    13441345        ntab = 'aer%s' % freq 
    1345         thiscmv = (str(uuid.uuid1()), (tt.splab,tt.tm), tt.label, 'AerChemMIP', tt.description, self.vars1[v1][0], '','','','','float','','','','',"aero",'','',ntab,'AerChemMIP','',freq, 0, '', 1) 
     1346        thiscmv = (str(uuid.uuid1()), (tt.splab,tt.tm), tt.label, 'AerChemMIP', tt.description, self.vars1[v1][0], '','','','','float','','','','',"aero",'','',ntab,'AerChemMIP','',freq, 0, '', 1, '') 
    13461347        self.cmv.append( thiscmv ) 
    13471348      print 'INFO.kkkkk: AerChem Vars found: %s: %s' % (t,nn) 
     
    18041805            if thisl == 'clic': 
    18051806              print 'INFO.clic.00001: ',ll, k 
     1807            elif thisl == 'rhopoto': 
     1808              print 'INFO.rhopoto.00001: ',ll, k 
    18061809            item.setAttribute( 'title', thisl + ' ((isd.005))' ) 
    18071810            item.setAttribute( 'uid', thisuuid ) 
     
    20532056            if len( r[1] ) == 2: 
    20542057              spid = self.spLab2Uid[r[1][0]] 
    2055               print 'INFO.klklkl: AerChemMIP structure .... ',r[1] 
     2058              ##print 'INFO.klklkl: AerChemMIP structure .... ',r[1] 
    20562059            else: 
    20572060              try: 
     
    20722075            else: 
    20732076              lsfx = '' 
     2077 
    20742078               
    20752079            if r[0] in self.fix.fixcmv: 
     
    20902094                      vid = self.importWbMods.vars.vmap[vid] 
    20912095                      print 'INFO.040.04444: mapping',ov,vid 
     2096 
     2097                  if n == "rowIndex": 
     2098                    ix = str(r[k]) 
     2099                  if n == "title": 
     2100                    title = str(r[k]) 
     2101 
    20922102                  if n == "stid": 
    20932103                    item.setAttribute( n, stid ) 
     2104                  elif n == "mipTableSection": 
     2105                    if str(r[k]) != '': 
     2106                      item.setAttribute( n, str(r[k]) ) 
    20942107                  elif n == "label": 
    20952108                    thisl = string.replace( r[k], '_', '' ) 
     
    21372150              if mtable != r[ktable]: 
    21382151                item.setAttribute( 'mipTable', mtable ) 
     2152 
     2153              if tableUtils.getSubGroup(spinfo[3],mtable,thisl,ix,title): 
     2154                item.setAttribute( 'subGroup', tableUtils.subGroup ) 
     2155 
    21392156              if str(vid) not in self.importWbMods.vars.d1: 
    21402157  
     
    21672184                      print 'INFO.050.00050: replacing values in cmv: %s old:%s new:%s' % (tag,old,new) 
    21682185              self.ff[ksect][0].appendChild( item ) 
     2186          assert tableUtils.subGroupCheck(), 'Failed to identify expected table sub-groups' 
     2187          ##print 'INFO.sgsg.00001: sub groups: ',tableUtils.sgset 
    21692188        elif ksect == u'structure': 
    21702189          ers = {} 
     
    23462365                self.ff[ksect][0].appendChild( item ) 
    23472366################################## 
    2348                  
    23492367 
    23502368  def _editRequestVar01( self, item, mm, t, vid=None ): 
  • CMIP6dreqbuild/trunk/src/workbook/ivg.py

    r613 r615  
    1616      else: 
    1717        return (cm,0) 
     18 
     19class tableUtils(object): 
     20  def __init__(self): 
     21    self.subGroup = None 
     22    self.sgset = set() 
     23    self.dset001 = set() 
     24    self.sgsetExpected = {'Amon_2d', 'Omon_3d', 'Omon_oth', 'Oyr_3dtr', 'aero_3d', 'aero_oth', 'cf3hr_grid', 'cf3hr_sim', 'cfDay_2d', 'cfDay_3d', 'cfMon_2dmod', 'cfMon_3dmod', 'cfMon_3dstd', 'cfMon_sim', 'day_oth', 'day_ss'} 
     25 
     26  def subGroupCheck(self): 
     27    d1 = list( self.sgsetExpected.difference( self.sgset ) ) 
     28    d2 = list( self.sgset.difference( self.sgsetExpected ) ) 
     29    ok = True 
     30    if len(d1) > 0: 
     31      print 'ERROR.sg01.00001: not all expected subgroups found ',sorted(d1) 
     32      ok = False 
     33    if len(d2) > 0: 
     34      print 'ERROR.sg01.00002: not all found subgroups expected ',sorted(d2) 
     35      ok = False 
     36    return ok 
     37     
     38  def getSubGroup(self,dims,tab0,var,ixs,ttl): 
     39    '''Used to identify subgroups of variables in CMIP5 tables and revised versions of these tables''' 
     40    self.subGroup = None 
     41    sg = None 
     42    if tab0[:5] == 'CMIP5': 
     43      tab = tab0[6:] 
     44    elif tab0[:4] == 'OMIP': 
     45      tab = tab0[5:] 
     46    else: 
     47      tab = tab0 
     48    ix = int( ixs ) 
     49    
     50    if tab == 'Oyr' and ix < 60: 
     51          sg = 'Oyr_3dtr' 
     52    elif tab == 'Amon': 
     53          if string.find( dims, 'lev' ) == -1 and string.find( dims, 'longitude|latitude') != -1: 
     54            sg = 'Amon_2d' 
     55    elif tab == 'Omon': 
     56          if string.find( dims, 'longitude|latitude|olevel' ) != -1: 
     57            sg = 'Omon_3d' 
     58          else: 
     59            sg = 'Omon_oth' 
     60    elif tab == 'cfMon': 
     61          if ttl[:5] in ['ISCCP','PARAS','CALIP']: 
     62            sg = 'cfMon_sim' 
     63          elif var[-3:] == 'co2': 
     64            if string.find( dims, 'longitude|latitude|alev' ) != -1: 
     65              sg = 'cfMon_3dmod' 
     66            else: 
     67              sg = 'cfMon_2dmod' 
     68          else: 
     69            sg = 'cfMon_3dstd' 
     70    elif tab == 'cfDay': 
     71        try: 
     72          bits = string.split( dims, '|' ) 
     73          if string.find( dims, 'longitude|latitude' ) != -1 and len(bits) > 2 and bits[2] in ['alev','alevel','alevhalf','alt40','plev7','alt40']: 
     74              sg = 'cfDay_3d' 
     75          else: 
     76              sg = 'cfDay_2d' 
     77        except: 
     78          print 'Failed to parse: ',dims 
     79    elif tab == 'cf3hr': 
     80          if string.find( dims, 'longitude|latitude' ) != -1: 
     81              sg = 'cf3hr_grid' 
     82          else: 
     83              sg = 'cf3hr_sim' 
     84    elif tab == 'aero': 
     85          if string.find( dims, 'longitude|latitude|alevel' ) != -1: 
     86              sg = 'aero_3d' 
     87          else: 
     88              sg = 'aero_oth' 
     89    elif tab == 'day': 
     90          if ix < 28: 
     91              sg = 'day_ss' 
     92          else: 
     93              sg = 'day_oth' 
     94    if sg != None: 
     95      self.subGroup = sg 
     96      self.sgset.add(sg) 
     97      return True 
     98    else: 
     99      if tab0 not in self.dset001: 
     100        print 'No SUBGROUP: ', tab0 
     101        self.dset001.add(tab0) 
     102      return False 
    18103 
    19104class structureList(object): 
  • CMIP6dreqbuild/trunk/src/workbook/loadcf.py

    r508 r615  
    1111class cf(object): 
    1212  def __init__(self): 
    13     vocabs = xml.dom.minidom.parse( 'cf-standard-name-table_v26.xml' ) 
     13    vocabs = xml.dom.minidom.parse( 'cf-standard-name-table_v31.xml' ) 
    1414 
    1515    el = vocabs.getElementsByTagName( 'entry' ) 
Note: See TracChangeset for help on using the changeset viewer.