Changeset 485


Ignore:
Timestamp:
18/11/15 22:30:46 (5 years ago)
Author:
mjuckes
Message:

various

Location:
CMIP6dreqbuild/trunk/src/workbook
Files:
1 added
2 edited

Legend:

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

    r470 r485  
    2121import collections, string, re 
    2222import choiceCfg 
     23import importWbMods 
    2324from utils_wb import uniCleanFunc 
    2425import ivg 
     
    2728tableNameMap = {'CMIP5_3hr':'3hr', 'CMIP5_6hrLev':'6hrLev', 'CMIP5_6hrPlev':'6hrPlev', 'CMIP5_Amon':'Amon', 'CMIP5_LImon':'LImon', 'CMIP5_Lmon':'Lmon', 'CMIP5_OImon':'CMIP5_OImon', 'CMIP5_Oclim':'Oclim', 'CMIP5_Omon':'CMIP5_Omon', 'CMIP5_Oyr':'CMIP5_Oyr', 'CMIP5_aero':'aero', 'CMIP5_cf3hr':'cf3hr', 'CMIP5_cfDay':'cfDay', 'CMIP5_cfMon':'cfMon', 'CMIP5_cfOff':'cfOff', 'CMIP5_cfSites':'cfsites', 'CMIP5_day':'day', 'CMIP5_fx':'fx', 'OMIP.Omon':'Omon', 'OMIP.Oyr':'Oyr', 'OMIP.day':'Oday', 'OMIP.fx':'Ofx' } 
    2829 
     30reportedRedundantTables = set() 
    2931redundantTables = ['CORDEX_3h', 'CORDEX_6h', 'CORDEX_fx', 'CORDEX_mon', 'CORDEX_sem', 'PMIP3_Aclim', 'PMIP3_Amon', 'PMIP3_LIclim', 'PMIP3_LImon', 'PMIP3_Lclim', 'PMIP3_Lmon', 'PMIP3_OIclim', 'PMIP3_OImon', 'PMIP3_Oclim', 'PMIP3_Omon', 'PMIP3_day', 'PMIP3_fx', 'SPECS_6hr', 'SPECS_Lmon', 'SPECS_fx'] 
    3032 
     
    9193    fok = [test(os.path.isfile(src),'%s not found' % src), ] 
    9294    assert all( fok), 'Required input file(s) missing' 
     95    self.fx = importWbMods.fx 
    9396 
    9497    for sh in [rq.expt,rq.exgp,rq.objec,rq.refti, rq.revti, rq.vars, rq.grps, rq.rqvg, rq.rqli, rq.rqit, rq.rqsect]: 
     
    499502       u'PMIP3_Oclim':'monClim', u'SPECS_Amon':'mon', u'SPECS_Lmon':'mon', u'CMIP5_cf3hr':'3hr', u'CORDEX_3h':'3hr', \ 
    500503       u'CCMI1_annual':'yr', u'CMIP5_Oyr':'yr'} 
    501             kk = ['uid', 'comment', 'deflate_level', 'shuffle', 'ok_max_mean_abs', 'flag_meanings', 'type', 'ok_min_mean_abs', 'sn', 'deflate', 'title', 'valid_min', 'cell_methods', 'flag_values', 'cell_measures', 'out_name', 'modeling_realm', 'units', 'cell_methods_xx', 'valid_max', 'positive', 'var', 'mipTable', 'dimensions', 'vid', 'gpid','rowIndex','priority'] 
     504            kk = ['uid', 'comment', 'deflate_level', 'shuffle', 'ok_max_mean_abs', 'flag_meanings', 'type', 'ok_min_mean_abs', 'sn', 'deflate', 'title', 'valid_min', 'cell_methods', 'flag_values', 'cell_measures', 'out_name', 'modeling_realm', 'units', 'cell_methods_xx', 'valid_max', 'positive', 'var', 'mipTable', 'dimensions', 'vid', 'gpid','rowIndex','ssect', 'priority'] 
    502505            id = kk.index('dimensions') 
    503506            thisnt = collections.namedtuple( 'ovar', kk ) 
     
    512515                  print 'ERROR.060.0001: bad dimension string detected and corrected: %s' % rr[id] 
    513516                  rr[id] = 'scalar' 
     517                if string.find( rr[23], 'plevs' ) != -1: 
     518                   print 'INFO.qqqq01: ',rr[21:24] 
     519                rr[23] = string.replace(rr[23], 'plevs', 'plev17') 
    514520                tt = thisnt._make( rr )  
    515521                if tt.uid in setu1: 
     
    544550## insert conditional on redundant tables here ... 
    545551## 
    546                   if tt.mipTable in redundantTables: 
     552                  if tt.mipTable in redundantTables and tt.mipTable not in reportedRedundantTables: 
    547553                    print 'INFO.000.11111: redundant table spotted: ',tt.mipTable 
     554                    reportedRedundantTables.add( tt.mipTable ) 
    548555                  else: 
    549556                    if tt.uid in self.cmvs: 
     
    553560                      tt.deflate_level, tt.shuffle, tt.ok_max_mean_abs, tt.flag_meanings, tt.type, tt.ok_min_mean_abs, \ 
    554561                      tt.deflate, tt.valid_min, tt.flag_values, tt.modeling_realm, tt.valid_max, tt.positive, tt.mipTable, \ 
    555                       prov, '', fr, tt.rowIndex, '',int(tt.priority)) ) 
     562                      prov, tt.ssect, fr, tt.rowIndex, '',int(tt.priority)) ) 
    556563                    if string.strip( tt.gpid ) == '': 
    557564                       print 'ERROR.090.0990: blank gpid: ',lab,tt.mipTable 
     
    622629                  varsets.append( (rr0[iu], 0, rr[iu], 0, 'Variables on model levels or 27 pressure levels' ) ) 
    623630                else: 
     631## 
     632## this point ... to mark HighResMIP 7 levels as distinct from CFMIP. 
     633## enough information in "mip" tag of tt record 
     634## 
     635                  if type( rr[il] ) == type(1.): 
     636                    if rr[il] == 7. and rr[10] == 'HighResMIP': 
     637                      print 'INFO.qqq03:',rr[il],rr 
     638                      rr[5] = rr[5] + '*' 
    624639                  if str(rr[ixvid]) == '__var_not_found_012__': 
    625640                    ok = False 
     
    663678                if tt.mip == 'OMIP' or any( [string.find(tt.table,i) != -1 for i in ['Omon','Oyr','Oclim','OImon'] ] ): 
    664679                  gr = 'o' 
     680## 
     681## adding label for mip here messes up referencing later ...  
     682## 
    665683                dset.add( (tt.shape,tt.levels,tt.tstyle,gr) ) 
    666684                dsgpi.add( (tt.shape,tt.levels,tt.tstyle,gr,smdd[tt.mask], 'None', 'None') ) 
     
    743761             'time2':['climatoglogy','Climatological mean'], \ 
    744762             '':['None','No spatial dimensions ... fixed field'], 'xxxx':['unknown','dimension not recognised'] } 
     763 
    745764    for ksect in [ 'ovar','groupitem']: 
    746765#### create structure list for spatial and temporal dimensions 
     
    788807        prov = 'CMIP5/OMIP' 
    789808        desc = '' 
     809        print 'INFO.zzz01: ',dims 
     810        strdd[(dims,cmet,cmea,flgv,flgm)] = u 
     811        if cmet == 'None': 
     812          cmet = '' 
     813        if cmea == 'None': 
     814          cmea = '' 
     815        if flgv == 'None': 
     816          flgv = '' 
     817        if flgm == 'None': 
     818          flgm = '' 
    790819        strdd[(dims,cmet,cmea,flgv,flgm)] = u 
    791820        ll.append( nt_dims._make( [u,label,spid,tmid, odim, crd, cmet, cmea, flgv, flgm, desc, proc, prov] ) ) 
     
    794823        {'Mean', u'time: mean', u'Time mean', u'daily mean', u'mean', u'time mean', u'time: day', u'time: mean', u'weighted time mean', 'Cumulative annual fraction'}, set(), {''}] 
    795824    cmetl = ['time: point', 'time: mean', 'time: mean within years time: mean over years ', ''] 
     825    ee1 = {} 
    796826    for shp,lvls,sty,gr,tmsk, flgv, flgm in dsgpi: 
    797827        t = (shp,lvls,sty,gr) 
     
    818848        prov = 'CMIP5, endorsed MIPs' 
    819849        desc = '' 
     850        dims = tt[0] 
     851        if tdim != '': 
     852          dims += '|' + tdim 
     853        if strdd.has_key( (dims,cmet,cmea,'','') ): 
     854          u = strdd[ (dims,cmet,cmea,'','') ] 
     855          print 'INFO.zzz03: ',tt, tdim 
     856        elif ee1.has_key( (tmid, spid, odim, cmet, cmea, crd) ): 
     857          u = ee1[(tmid, spid, odim, cmet, cmea, crd)] 
     858          print 'INFO.zzz04: ', tt, tdim 
     859        else: 
     860          print 'INFO.zzz02: ',tt, tdim 
     861          ee1[(tmid, spid, odim, cmet, cmea, crd)] = u 
     862          ll.append( nt_dims._make( [u,label,spid,tmid, odim, crd, cmet, cmea, '', '', desc, proc, prov] ) ) 
    820863        strdd[(shp,lvls,sty,gr,tmsk,flgv,flgm)] = u 
    821         ll.append( nt_dims._make( [u,label,spid,tmid, odim, crd, cmet, cmea, '', '', desc, proc, prov] ) ) 
    822864 
    823865    self.structList = ll 
     
    884926            sss[k].add(tup[k]) 
    885927 
    886         ##print 'dimensions:',dl 
    887         ##print 'spatial:',sss[0] 
    888         ##print 'other:',sss[1] 
    889         ##print 'temporal:',sss[2] 
    890         ##print 'coord:',sss[3] 
    891928        lcount = {} 
    892929        for s in sss[0]: 
     
    922959             'XYZKT':('longitude|latitude|%s','effectRad','time','',True), \ 
    923960             'XYZT':('longitude|latitude|%s','','time','',True), \ 
     961             'XYZT*':('longitude|latitude|%st','','time','',True), \ 
    924962              'KZT':('alevel','spectband','time','',False), \ 
    925963              'XYT':('longitude|latitude','','time','',False), \ 
     
    937975          for k in range(3): 
    938976            sss[k].add( d[k] ) 
    939         ##print 'shape: ',sss[0] 
    940         ##print 'levels: ',sss[1] 
    941         ##print 'tstyle: ',sss[2] 
    942977        ls0 = set() 
    943978        ls1 = set() 
     
    9741009          else: 
    9751010            ii = int( float(l) ) 
    976             if ii > 1.5: 
     1011            if ii > 39.5: 
     1012              this = 'alt%s' % ii 
     1013            elif ii > 1.5: 
    9771014              this = 'plev%s' % ii 
    9781015            else: 
     
    10071044            print sc, tt[0], tt[-1], n 
    10081045            raise 
     1046          print 'INFO:qqq05: ',d, sc, tt, ttdd[d[2]] 
    10091047          eed[d] = (sc,tt[1],ttdd[d[2]],tt[3]) 
    10101048      self.dsortdd[mode] = (eed,lcount) 
     
    11381176                  else: 
    11391177                    item.setAttribute( tag, self.upda[thisuuid][tag] ) 
     1178              if thisl in self.fx.d1: 
     1179                item.setAttribute( 'title', str( self.fx.d1[thisl][2] ) ) 
     1180                item.setAttribute( 'description', str( self.fx.d1[thisl][3] ) ) 
     1181                print 'INFO.qqq13: updating title and desc %s' % str( self.fx.d1[thisl] ) 
    11401182            else:  
    11411183              print 'Omitting: ',ll 
     
    12461288              print 'ERROR.090.08801: bad variable ref [%s]' % vid,ll 
    12471289 
     1290            if vid in self.fx.d2: 
     1291               if self.fx.d2[vid][3] == u'replace': 
     1292                 item.setAttribute( 'vid', str( self.fx.d2[vid][4] ) ) 
     1293                 print 'INFO.qqq11: replacing link in requestVar  %s' % str(ll) 
     1294               else: 
     1295                 print 'INFO.qqq22: not replacing link in requestVar  %s' % str(ll) 
     1296                
    12481297            did = '%s__%s' % (vid,vgid) 
    12491298            if self.vgcheck.has_key(did) and did[0] != '_': 
     
    13721421              raise 
    13731422               
    1374             item = self.doc.createElement( 'item' ) 
    1375             for k in range(len(self.cmvinfo)): 
    1376               n = self.cmvinfo[k] 
    1377               if n in self.cmvinfo2: 
    1378                 if n == "vid": 
    1379                   if str(r[k]) == '__var_not_found_012__': 
    1380                     print 'ERROR.099.00202: bad vid string: %s [%s]' % (r[k],str(r[:3])) 
    1381                 if n == "stid": 
    1382                   item.setAttribute( n, stid ) 
    1383                 elif n == "label": 
    1384                   thisl = string.replace( r[k], '_', '' ) 
    1385                   item.setAttribute( n, thisl ) 
    1386                 elif n == "frequency": 
    1387                   fr = freqmap.get( str(r[k]), str(r[k]) ) 
    1388                   item.setAttribute( n, fr ) 
    1389                 elif n == "mipTable": 
    1390                   tn = tableNameMap.get( str(r[k]), str(r[k]) ) 
    1391                   item.setAttribute( n, tn ) 
    1392                 else: 
    1393                   item.setAttribute( n, str(r[k]) ) 
    1394             thisuid = r[0] 
    1395             if self.repl.has_key( thisuid ): 
    1396               for tag,old,new in self.repl[thisuid]: 
    1397                 thisold = item.getAttribute( tag ) 
    1398                 assert thisold == old, 'Attempt to replace value which is not present' 
    1399                 item.setAttribute( tag, new ) 
    1400                 print 'INFO.050.00050: replacing values in cmv: %s old:%s new:%s' % (tag,old,new) 
    1401             self.ff[ksect][0].appendChild( item ) 
     1423            if r[0] in self.fx.d2: 
     1424              print 'INFO.qqq10: omitting record %s' % str( self.fx.d2[r[0]] ) 
     1425            else: 
     1426              item = self.doc.createElement( 'item' ) 
     1427              for k in range(len(self.cmvinfo)): 
     1428                n = self.cmvinfo[k] 
     1429                if n in self.cmvinfo2: 
     1430                  if n == "vid": 
     1431                    if str(r[k]) == '__var_not_found_012__': 
     1432                      print 'ERROR.099.00202: bad vid string: %s [%s]' % (r[k],str(r[:3])) 
     1433                  if n == "stid": 
     1434                    item.setAttribute( n, stid ) 
     1435                  elif n == "label": 
     1436                    thisl = string.replace( r[k], '_', '' ) 
     1437                    item.setAttribute( n, thisl ) 
     1438                  elif n == "frequency": 
     1439                    fr = freqmap.get( str(r[k]), str(r[k]) ) 
     1440                    item.setAttribute( n, fr ) 
     1441                  elif n == "mipTable": 
     1442                    tn = tableNameMap.get( str(r[k]), str(r[k]) ) 
     1443                    item.setAttribute( n, tn ) 
     1444                  else: 
     1445                    item.setAttribute( n, str(r[k]) ) 
     1446              thisuid = r[0] 
     1447              if self.repl.has_key( thisuid ): 
     1448                for tag,old,new in self.repl[thisuid]: 
     1449                  thisold = item.getAttribute( tag ) 
     1450                  assert thisold == old, 'Attempt to replace value which is not present' 
     1451                  item.setAttribute( tag, new ) 
     1452                  print 'INFO.050.00050: replacing values in cmv: %s old:%s new:%s' % (tag,old,new) 
     1453              self.ff[ksect][0].appendChild( item ) 
    14021454        elif ksect == u'structure': 
    14031455          flds = self.structList[0]._fields 
     
    14441496              else: 
    14451497                item.setAttribute( kk[i], str( v ) ) 
     1498 
     1499            vid = str( t[2] ) 
     1500            if vid in self.fx.d2: 
     1501               if self.fx.d2[vid][3] == u'replace': 
     1502                 item.setAttribute( 'vid', str( self.fx.d2[vid][4] ) ) 
     1503                 print 'INFO.qqq12: replacing link in requestVar  %s' % str(t) 
    14461504            did = '%s__%s' % (t[2],t[3]) 
    14471505            if self.vgcheck.has_key(did): 
  • CMIP6dreqbuild/trunk/src/workbook/scansh.py

    r384 r485  
    6767  if k[0] != '_': 
    6868    r = rq.refti[k] 
    69     if r[-3] != '__none__': 
    70       if rq.vars.has_key(r[-3]): 
     69    if r[-4] != '__none__': 
     70      if rq.vars.has_key(r[-4]): 
    7171        nok += 1 
    7272      else: 
Note: See TracChangeset for help on using the changeset viewer.