Changeset 386


Ignore:
Timestamp:
21/09/15 23:13:46 (5 years ago)
Author:
mjuckes
Message:

fixing variable groups

Location:
CMIP6dreqbuild/trunk/srcMisc
Files:
1 added
3 edited

Legend:

Unmodified
Added
Removed
  • CMIP6dreqbuild/trunk/srcMisc/dreq_consol.py

    r382 r386  
     1"""Creates consolidated variable list""" 
    12import string 
    23from fcc_utils2 import snlist 
    3 import xlrd, string, shelve, os, re, sys 
     4import xlrd, string, shelve, os, re, sys, uuid 
    45import collections 
    56import xlutils, xlwt 
    67import xlutils.copy 
    78import xlutils.styles 
     9import dreq_utils 
    810#### 
    911import dreq_cfg 
     
    306308""" % (c1,c1)  ) 
    307309 
     310pobj = dreq_utils.probj() 
     311 
    308312oo1 = open( 'newVarCount.txt', 'w' ) 
    309313for k in keys: 
     
    314318    c = cpsh(wk0,k,path,kk=kk,oo=oo,mode=md) 
    315319    print c.nn 
     320    try: 
     321      sh = c.wk.book.sheet_by_name( 'Objectives' ) 
     322      pobj.parse( k, sh ) 
     323    except: 
     324      print 'ERROR: %s, %s --no objectives' % (k,cfg.ee[k]) 
     325      if k not in {"OMIP"}: 
     326        raise 
    316327    oo1.write( '%s %s %s\n' % (k,c.nnew,c.nn) ) 
    317328    c.parseRQ() 
     
    322333 
    323334wk0.write() 
     335odir = 'sh20150827' 
     336sh = shelve.open('%s/objectives' % odir, 'n' ) 
     337sh['__info__'] = { 'label':'objectives', 'title':'Scientific objectives', 'prov':'dreq_consol.py' } 
     338sh['__cols__'] = ['mip','label','title','description'] 
     339for r in pobj.records: 
     340  u = str( uuid.uuid1() ) 
     341  sh[u] = r[:] 
     342sh.close() 
  • CMIP6dreqbuild/trunk/srcMisc/dreq_consol_dreq.py

    r382 r386  
    88#### 
    99import dreq_cfg 
     10import dreq_utils 
    1011 
    1112cmip5Vg = ['Omon','fx','Oyr','Oclim','Omon_3d','Omon_oth','Amon','Lmon','LImon','OImon','aero_3d','aero_oth','cfDay_2d','cfDay_3d','cfMon_3dstd','cfMon_3dmod','cfMon_2dmod','cfMon_sim','day_oth','day_ss','cfOff','cfSites','6hrLev','6hrPlev','3hr','cf3hr_grid','cf3hr_sim'] 
     
    347348    self.rowList = [] 
    348349    self.records = [] 
     350    self.headers = {} 
    349351 
    350352  def add(self,mip,path): 
    351353    return rq(mip,path,parent=self) 
    352354 
    353   def addRow( self, mip, tab, obj, grid, gok, comment,opt='',opar='' ): 
    354     k = str( uuid.uuid1() ) 
     355  def addRow( self, mip, tab, obj, grid, gok, comment,opt='',opar='',uid=None ): 
     356    if uid == None: 
     357      k = str( uuid.uuid1() ) 
     358    else: 
     359      k = uid 
    355360    self.rowList.append( (k,mip,tab, obj, grid, gok, comment, opt, opar) ) 
    356361    return k 
     
    391396    self.mip = mip 
    392397    self.wk1 = wbcp( inbook=path ) 
     398    self.pr4 = dreq_utils.pr4() 
    393399    if u'Request scoping' in self.wk1.sns: 
    394400      self.wk1.focus( u'Request scoping') 
    395401 
    396402      self.parent = parent 
    397       self.ok = self.parse01() 
     403      self.ok = self.parse02() 
    398404    else: 
    399405      self.ok = False 
    400406 
    401   def parse01(self): 
     407  def parse02(self): 
    402408 
    403409    r4 = map( lambda x: x.value, self.wk1.currentSi.row(3) ) 
     410    r3 = map( lambda x: x.value, self.wk1.currentSi.row(2) ) 
     411    self.pr4.parse( self.mip, r4 ) 
     412    ##self.pr4.parse3( self.mip, r3 ) 
     413    self.parent.headers[self.mip] = r4[:] 
    404414    self.ixh = 0 
    405415    self.ixm = 0 
     416    self.mipl = None 
     417    self.nbl = None 
    406418    hhref = [u'control', u'AMIP', u'abrupt4xCO2', u'1pctCO2', u'CMIP6 historical'] 
    407419## 
     
    410422## NEED to scan and check all expt. names. 
    411423## 
    412     try: 
     424    lega = False 
     425    if lega: 
     426     try: 
    413427      self.ixh = r4.index( u'CMIP6 historical' ) 
    414428      self.ixm = r4.index( u'MIP name:' ) 
     
    422436      else: 
    423437        print 'ERROR.001.001: control expt. column not found', r4 
    424     except: 
     438     except: 
    425439      if self.mip == 'DCPP': 
    426440        self.ix0 = r4.index( u'DCPP-A' ) 
     
    433447      else: 
    434448        print 'Failed to parse Row 4' 
    435         return False 
    436     nn = len(r4) - self.ixm 
    437     self.mipl = [] 
    438     self.mipix = [] 
    439     for v in r4[self.ixm+1:]: 
     449        raise 
     450     nn = len(r4) - self.ixm 
     451     self.mipl = [] 
     452     self.mipix = [] 
     453     for v in r4[self.ixm+1:]: 
    440454      if v not in ['',u'MIP name:']: 
    441455        self.mipl.append( v ) 
    442456        self.mipix.append( r4.index(v) ) 
    443457 
    444     if self.ixh > 0: 
     458     if self.ixh > 0: 
    445459      i0 = self.ixh - 8 
    446     else: 
     460     else: 
    447461      i0 = self.ix0 
    448     if len(self.mipix) == 0: 
     462     if len(self.mipix) == 0: 
    449463      i9 = self.ixm-1 
    450     else: 
     464     else: 
    451465      i9 = max( self.mipix ) + 1 
    452     self.nbl = [] 
    453     self.hnbl = [] 
    454  
    455     for j in range(5,self.wk1.currentSi.nrows): 
     466     self.nbl = [] 
     467     self.hnbl = [] 
     468 
     469     for j in range(5,self.wk1.currentSi.nrows): 
    456470      rv = map( lambda x: x.value, self.wk1.currentSi.row(j) ) 
    457471      isblnk = all( map( lambda x: x == '', rv[i0:i9] ) ) 
     
    463477          self.hnbl.append(j) 
    464478 
    465     self.opt = 'self' 
    466 ## historical 
    467     self.opt = 'deck' 
    468     self.opt = 'all' 
    469     if self.opt == 'hist': 
    470       for j in self.hnbl: 
    471         rv = map( lambda x: x.value, self.wk1.currentSi.row(j)[:7] ) 
     479    ##self.opt = 'self' 
     480    ##self.opt = 'deck' 
     481    ##self.opt = 'all' 
     482    r4i = self.pr4.r4info 
     483    ##for j in self.nbl: 
     484    for j in range(5,self.wk1.currentSi.nrows): 
     485        rv = map( lambda x: x.value, self.wk1.currentSi.row(j)[:8] ) 
    472486        tab = rv[0] 
    473487        grid = rv[3] 
    474         gok = rv[4] 
    475         comment = rv[5] 
    476         obj = rv[6] 
     488        gok = rv[r4i.mode-2] 
     489        comment = rv[r4i.mode-1] 
     490        obj = rv[r4i.mode] 
    477491        opt = rv[1] 
    478492        opar = rv[2] 
    479         uid = self.parent.addRow( self.mip, tab, obj, grid, gok, comment, opt=opt, opar=opar ) 
    480         self.readDeckColPair( j, self.ixh, 160, rid=uid ) 
    481     elif self.opt == 'deck': 
    482       for j in self.hnbl: 
    483         rv = map( lambda x: x.value, self.wk1.currentSi.row(j)[:7] ) 
    484         tab = rv[0] 
    485         grid = rv[3] 
    486         gok = rv[4] 
    487         comment = rv[5] 
    488         obj = rv[6] 
    489         opt = rv[1] 
    490         opar = rv[2] 
    491         uid = self.parent.addRow( self.mip, tab, obj, grid, gok, comment, opt=opt, opar=opar ) 
    492         for je in range(5): 
    493           self.readDeckColPair( j, self.iccntl + je*2, 160, expt=hh[je], rid=uid ) 
    494     elif self.opt == 'all': 
    495       for j in self.nbl: 
    496         rv = map( lambda x: x.value, self.wk1.currentSi.row(j)[:7] ) 
    497         tab = rv[0] 
    498         grid = rv[3] 
    499         gok = rv[4] 
    500         comment = rv[5] 
    501         obj = rv[6] 
    502         opt = rv[1] 
    503         opar = rv[2] 
    504         uid = self.parent.addRow( self.mip, tab, obj, grid, gok, comment, opt=opt, opar=opar ) 
    505         for je in range(5): 
    506           self.readDeckColPair( j, self.iccntl + je*2, 160, expt=hh[je], rid=uid ) 
    507     else: 
    508       if self.ixh > 0: 
    509         i0 = self.ixh + 2 
     493        uid = str( uuid.uuid1() ) 
     494        nbl = False 
     495        if not tab in ['',u'']: 
     496          ##uid = self.parent.addRow( self.mip, tab, obj, grid, gok, comment, opt=opt, opar=opar ) 
     497          if self.mip != 'DCPP': 
     498              for je in range(5): 
     499                j1 = r4i.ixcntl + je*2 
     500                ok = self.readDeckColPair( j, j1, 160, expt=string.strip(r4[j1]), rid=uid ) 
     501                if ok: 
     502                  nbl = True 
     503          for je in r4i.ownix: 
     504                ok = self.readDeckColPair( j, je, 100, expt=string.strip(r4[je]), rid=uid ) 
     505                if ok: 
     506                  nbl = True 
     507          for je in r4i.othix: 
     508                ok = self.readDeckColPair( j, je, 100, expt=string.strip(r4[je+1]), rid=uid,mode=3 ) 
     509                if ok: 
     510                  nbl = True 
     511### add row if non-blank element found 
     512        if nbl: 
     513          uid = self.parent.addRow( self.mip, tab, obj, grid, gok, comment, opt=opt, opar=opar, uid=uid ) 
     514           
     515 
     516 
     517    return True 
     518 
     519  def readDeckColPair( self,j, ix, nydef, expt=None, rid=None, mode=2 ): 
     520      assert mode in [2,3], 'Only modes 2,3 supported, not mode=%s' % mode 
     521      this = map( lambda x: x.value, self.wk1.currentSi.row(j)[ix:ix+mode] ) 
     522##  if this element is empty, return .. nothing to do. 
     523      if all( [x in {u'','',0,0.0} for x in this] ): 
     524        return False 
     525 
     526      if mode == 2: 
     527        snens, sny = this  
    510528      else: 
    511         i0 = self.ix0 
    512       hv = map( lambda x: x.value, self.wk1.currentSi.row(3)[i0:self.ixm] ) 
    513       hfnd = [] 
    514       for k in range(len(hv)/2): 
    515         h = hv[2*k] 
    516         if string.find( h, 'PMIP3' ) != -1: 
    517           h = string.replace(h,'PMIP3','PMIP') 
    518         ok = self.parent.exptInfo[0].has_key(h) 
    519         if not ok: 
    520           if string.find( h, '\n' ) != -1: 
    521             bits = string.split( h, '\n' ) 
     529        snex, snens, sny = this  
     530 
     531      nex = 0 
     532      if mode == 3: 
     533        print '######### MODE = 3: %s' % str(this) 
     534        if type( snex ) in  {type(u' '),type(' ')}: 
     535          if snex[:3] in {u'tbd',u'TBD','tbd','TBD'}: 
     536            print 'WARN:005.0001: tbd encountered in experiment number' 
     537            nex = 5 
    522538          else: 
    523             bits = string.split( h, ' ' ) 
    524           if self.parent.exptInfo[0].has_key(bits[0]): 
    525             hv[2*k] = bits[0] 
    526             ok = True 
    527         hfnd.append( ok ) 
    528         if not hfnd[-1]: 
    529              print self.mip, h, 'NOT FOUND' 
    530       for j in self.nbl: 
    531         rv = map( lambda x: x.value, self.wk1.currentSi.row(j)[i0:self.ixm] ) 
    532         ntot = 0 
    533         tab = self.wk1.currentSi.row(j)[0].value 
    534         for k in range(len(rv)/2): 
    535           h = hv[2*k] 
    536           if self.parent.exptInfo != None: 
    537             if h == 'VolShortIni': 
    538                 nensDef = 10 
    539                 nyDef = 10 
    540             elif h == 'VolShort': 
    541                 nensDef = 100 
    542                 nyDef = 3 
    543             elif self.parent.exptInfo[0].has_key(h): 
    544               nensDef = self.parent.exptInfo[1][h] 
    545               nyDef = self.parent.exptInfo[2][h] 
    546             else: 
    547               nensDef = 1 
    548               nyDef = 100 
    549           if rv[2*k+0] == u'all': 
    550             nens = nensDef 
    551           elif rv[2*k+0] == '': 
    552             nens = 0 
    553           else: 
    554             nens = rv[2*k+0] 
    555           if rv[2*k+1] == u'all': 
    556             ny = nyDef 
    557           elif rv[2*k+1] == '': 
    558             ny = 0 
    559           elif type(rv[2*k+1]) in [type('x'),type(u'x')]: 
    560             s = rv[2*k+1] 
    561             print 'WARNING: %s' % s 
    562             if string.find( s, '\n' ) != -1: 
    563               bits = string.split( s, '\n' ) 
    564               ny = int( bits[0] ) 
    565             elif string.find( s, '/' ) != -1: 
    566               bits = string.split( s, '/' ) 
    567               ny = int( bits[0] ) 
    568             else: 
    569               ny = int( string.split( rv[2*k+1] )[0] ) 
    570           else: 
    571             ny = rv[2*k+1] 
    572           try: 
    573             ntot += ny*nens 
    574           except: 
    575             print 'FAILED: ',ny,nens 
    576           if tab == 'day_oth' and self.mip == 'DAMIP': 
    577             print ny, nens, ntot 
    578  
    579  
    580         if self.mip == 'DAMIP': 
    581           print self.mip,tab,ntot 
    582         self.parent.addItem( self.mip, tab, ntot ) 
    583  
    584     return True 
    585  
    586   def readDeckColPair( self,j, ix, nydef, expt=None, rid=None ): 
     539            print 'ERROR.001.0010: string in experiment number: %s' % snex 
     540            nex = 0 
     541        else: 
     542          nex = int(snex) 
     543        if type(nex) not in {type(1.), type(1)}: 
     544          print 'ERROR.099.0100: non integer nex: %s:: %s:: %s' % (str(this),snex, type(snex)) 
     545          raise 
     546 
    587547      try: 
    588         rv = map( lambda x: x.value, self.wk1.currentSi.row(j)[ix:ix+2] ) 
    589         if rv[0] == u'all': 
     548        if snens == u'all': 
    590549          nens = 1 
    591         elif rv[0] == '': 
     550        elif snens == '': 
    592551          nens = 0 
    593552        else: 
    594           nens = rv[0] 
    595         if rv[1] == u'all': 
     553          nens = snens 
     554        if sny == u'all': 
    596555          ny = nydef 
    597         elif rv[1] == '': 
     556        elif sny == '': 
    598557          ny = 0 
    599         elif type(rv[1]) in [type('x'),type(u'x')]: 
    600             s = rv[1] 
    601             print 'WARNING: %s' % s 
     558        elif type(sny) in [type('x'),type(u'x')]: 
     559            s = sny 
     560            print 'WARN.001.0002: %s' % s 
    602561            if string.find( s, '\n' ) != -1: 
    603562              bits = string.split( s, '\n' ) 
     
    608567                bb = string.split(x, '-' ) 
    609568                ny = int(bb[1])-int(bb[0]) 
     569              elif string.find( x, '/' ) != -1: 
     570                bb = string.split(x, '/' ) 
     571                ny = int(bb[0]) 
     572                print 'WARN.001.0001: ignoring second time period option' 
    610573              else: 
    611574                ny = int( x ) 
    612575        else: 
    613           ny = rv[1] 
     576          ny = sny 
    614577 
    615578        if type( ny ) in [type( 'x' ),type( u'x' )]: 
     
    621584        tab = self.wk1.currentSi.row(j)[0].value 
    622585        try: 
    623           ntot = nens*ny 
     586          if mode == 2: 
     587            ntot = nens*ny 
     588          else: 
     589            ntot = nex*nens*ny 
     590          if type(ntot) not in {type(1.), type(1)}: 
     591            print 'ERROR.099.0101: non integer ntot: %s:: %s' % (str([mode,nex,nens,ny]),str(this)) 
     592            raise 
    624593        except: 
    625594          print self.mip, tab, nens, ny 
     
    630599          if not ( tab[:5] == 'SPECS' or tab[:4] == 'CCMI' ): 
    631600            tab = '%s!!%s' % (self.mip,tab) 
     601 
    632602        self.parent.addItem( self.mip, tab, ntot, expt=expt, rid=rid ) 
     603        return True 
    633604      except: 
    634605        print 'ERROR.002.0001: Failed trying to scan deck column pair.' 
     
    656627expgsYpe = collections.defaultdict( int ) 
    657628tier0 = 1 
     629pre = dreq_utils.prcexr() 
     630elist = [] 
    658631for k in range(2,wke.currentSi.nrows): 
    659632  vals = map( lambda x: x.value, wke.currentSi.row(k) ) 
     633  pre.parse( vals ) 
     634  elist.append( pre.row ) 
    660635  g = string.strip( vals[1] ) 
    661636  tier = vals[5] 
     
    685660    thisrq = rqs.add( k, path ) 
    686661    if thisrq.ok: 
    687       print thisrq.ok, k, thisrq.ixh, thisrq.ixm, thisrq.mipl, [len(thisrq.nbl),len(thisrq.hnbl)] 
     662      print thisrq.ok, k, thisrq.ixh, thisrq.ixm, thisrq.mipl 
    688663    else: 
    689664      print thisrq.ok, k 
     
    713688  kk ='%s.%s' % (i[1],i[2]) 
    714689  rvgps[kk].append(i)  
     690 
    715691for k in rvgps.keys(): 
    716692  if len(rvgps[k]) > 1: 
     
    719695      print i 
    720696  i = rvgps[k][0] 
     697  print 'requestVarGroup: %s' % str(i) 
    721698  sh[i[0]] = (i[0],i[1],k,k) 
    722699sh.close() 
     
    726703for i in rqs.rowList: 
    727704  sh[i[0]] = i[:] 
     705  if i[3] in {'',u''}: 
     706    print 'ERROR.099.0060: Blank objective: %s' % str(i) 
    728707sh.close() 
    729708sh = shelve.open( '%s/requestItems' % odir, 'n' ) 
     
    734713for i in rqs.records: 
    735714  k = str( uuid.uuid1() ) 
     715  if type(i[4]) not in  (type( 0 ),type(1.)): 
     716    print 'ERROR.099.0001: non-integer ny: %s' % str(i) 
    736717  sh[k] = i[:] 
    737718sh.close() 
  • CMIP6dreqbuild/trunk/srcMisc/sx2.py

    r382 r386  
    88import shelve 
    99import dreqSX as sx 
     10import dreq_utils 
     11import utils_wb 
    1012from sets import Set 
    1113odir = 'sh20150827' 
     
    1517  os.mkdir( odir ) 
    1618 
     19def labcoerce(s): 
     20  s = string.replace(s, '.', '' ) 
     21  s = string.replace(s, '+', '' ) 
     22  s = string.replace(s, '/', ' ' ) 
     23  s = string.replace(s, '--', '-' ) 
     24  if string.find(s, '-' ) != -1: 
     25    s = string.replace(s, '-', ' ' ) 
     26  if string.find(s, ' ' ) != -1: 
     27    s = string.replace( string.capwords( s ), ' ', '' ) 
     28  return s 
     29 
    1730sh1 = shelve.open( '%s/cmip5Groups' % odir, 'n' ) 
     31## 
     32## list of CMIP5 tables which have groups 
     33## 
     34cmip5GroupsIx = set() 
     35## 
     36## dictionary, specifying group for each variable in table 
     37## 
     38cmip5GroupsIVAR = collections.defaultdict( dict ) 
    1839for k in sx.cmip5so.sop.keys(): 
    1940  sh1[k] = sx.cmip5so.sop[k][:] 
     41  cmip5GroupsIx.add( string.split( k, '_' )[0] ) 
     42  for v in sx.cmip5so.sop[k]: 
     43    cmip5GroupsIVAR[ string.split( k, '_' )[0] ][v] = k 
    2044sh1.close() 
    2145#### 'uuid', 'mip', 'label','title','ref','refNote' 
     
    2852  cmip5gplk[k] = u 
    2953  cmip5tbs.append( [u,"CMIP6",k,"CMIP6 CMOR Table: %s" % k, "CMIP5", "CMIP5 MIP Table: %s" % k] ) 
     54 
    3055for k in sx.cmip5so.sop.keys(): 
    3156  u = str( uuid.uuid1() ) 
     
    565590## 
    566591      tup = shb[r][v] 
     592      ### tup=(ix,p,sect,rowix) 
    567593      if tup[2] != None: 
    568594        tabsects[mip].add( (tab,tup[2]) ) 
    569         tabsectbyvar[mip][v] = (tup[2],tup[3]) 
     595        tabsectbyvar[mip][v] = tup 
    570596        if not tabsectuuid[mip].has_key( tup[2] ): 
    571597          tabsectuuid[mip][tup[2]] = str( uuid.uuid1() ) 
     
    639665      if b in cmip5vgr: 
    640666        kmapk2[k0] = ('CMIP5',b) 
     667      elif b in cmip5tbs: 
     668        kmapk2[k0] = ('CMIP5',b) 
    641669      else: 
    642670        kmapk2[k0] = ('nomap',k) 
     
    673701      rvgref2[kkk].append( shrvg[k][0] ) 
    674702 
     703 
    675704for k in lookup1a.keys(): 
    676705  for k2 in lookup1a[k].d.keys(): 
     
    679708    lookup1[k].d[k2].append( id) 
    680709    lookup1b[id0] = id 
     710 
     711### 
     712## add cmip5tbs to lookup, so that these will be picked up in links from "rqeuestLinks" 
     713for g in cmip5tbs: 
     714  ####cmip5tbs.append( [u,"CMIP6",k,"CMIP6 CMOR Table: %s" % k, "CMIP5", "CMIP5 MIP Table: %s" % k] ) 
     715  k = g[2] 
     716  u = g[0] 
     717  lookup1['CMIP5'].d[k] = [u,] 
     718   
     719      
    681720  
    682721### shlnks carries the "request scoping rows" ### 
     
    706745assert ndup==0, ndup 
    707746 
     747tmp = collections.defaultdict( list ) 
    708748for k in lookup1.keys(): 
    709749  for k2 in lookup1[k].d.keys(): 
    710     id = lookup1[k].d[k2][0] 
    711     idi = lookup1a[k].d[k2][0] 
    712     id0 = shrvg[idi][2] 
    713     mip = shrvg[idi][1] 
    714     ttt,kkk = kmapk2[id0] 
    715     cls = k 
    716     assert  cls == k, 'Mismatch in lookup1' 
    717     refNote = k2 
     750    for idi in lookup1a[k].d[k2]: 
     751      id = lookup1[k].d[k2][0] 
     752    ####idi = lookup1a[k].d[k2][0] 
     753      id0 = shrvg[idi][2] 
     754      mip = shrvg[idi][1] 
     755      ttt,kkk = kmapk2[id0] 
     756      cls = k 
     757      assert  cls == k, 'Mismatch in lookup1' 
     758      refNote = k2 
    718759    ##print k2, cls  
    719     if cls == 'new': 
    720       if kkk in revisedTabKeys: 
    721         lab = kkk 
    722         cls = 'rev' 
    723         lab = string.replace( kkk, '.', '-' ) 
     760      if cls == 'new': 
     761        if kkk in revisedTabKeys: 
     762          lab = kkk 
     763          cls = 'rev' 
     764          lab = string.replace( kkk, '.', '-' ) 
     765        else: 
     766          if not sx2e.ngmap.has_key(kkk): 
     767            print 'ERROR.002.0001: key %s not found' % kkk 
     768          else: 
     769            lab = sx2e.ngmap[kkk] 
     770      elif cls == 'CMIP5': 
     771        lab = string.replace( k2, '_', '-' ) 
     772      elif cls in ['CMIP5Rev','rev']: 
     773        lab = string.replace( k2, '.', '-' ) 
     774      elif cls == 'nomap': 
     775        lab = string.replace( k2, '.', '-' ) 
     776        lab = string.replace( lab, '_', '-' ) 
    724777      else: 
    725         if not sx2e.ngmap.has_key(kkk): 
    726           print 'ERROR.002.0001: key %s not found' % kkk 
    727         else: 
    728           lab = sx2e.ngmap[kkk] 
    729     elif cls == 'CMIP5': 
    730       lab = string.replace( k2, '_', '-' ) 
    731     elif cls in ['CMIP5Rev','rev']: 
    732       lab = string.replace( k2, '.', '-' ) 
    733     elif cls == 'nomap': 
    734       lab = string.replace( k2, '.', '-' ) 
    735       lab = string.replace( lab, '_', '-' ) 
    736     else: 
    737       lab = '%s-%s' % (mip,k2) 
    738     if sx2e.r1.match( lab ) == None: 
    739       print 'NON_COMPLIANT label', lab,k2, cls 
     778        lab = '%s-%s' % (mip,k2) 
     779      if sx2e.r1.match( lab ) == None: 
     780        print 'NON_COMPLIANT label', lab,k2, cls 
    740781      ## print k,k2,shrvg[id] 
    741782      ## assert False 
    742     sh[id] = [id,mip,lab,'%s: %s' % (mip,lab), cls, refNote] 
    743     print '>>>>>>>>>',sh[id] 
     783      tmp[id].append(  ([id,mip,lab,'%s: %s' % (mip,lab), cls, refNote],[ttt,kkk]) ) 
     784 
     785sss = collections.defaultdict( list ) 
     786for id in tmp.keys(): 
     787  dosh = False 
     788  if len(tmp[id]) == 1: 
     789    rec,sup = tmp[id][0] 
     790    dosh = True 
     791    tr = 1 
     792  else: 
     793    s = {tuple(sup) for rec,sup in tmp[id]} 
     794    if len(s) == 1: 
     795      rec,sup = tmp[id][0] 
     796      dosh = True 
     797      tr=2 
     798    else: 
     799      print 'ERROR.070.0020: ambiguous variable groups ' 
     800      for l in tmp[id]:  
     801        print l 
     802  if sup[0] not in ['new','CMIP5Rev']: 
     803      ttt, kkk = sup 
     804      lab = '%s-%s' % (ttt,kkk) 
     805      cls, refNote = rec[-2:] 
     806      rec = [id,ttt,lab,'%s: %s' % (ttt,kkk), cls, refNote] 
     807      print 'INFO:070.0001: modifying record: %s  --> %s' % (mip,ttt) 
     808      tr += 0.5 
     809  kc = '%s.%s' % (rec[-2],rec[-1]) 
     810  if kc == 'SPECS.6hr': 
     811     print kc, rec, tr 
     812  sss[kc].append( id ) 
     813  sh[rec[0]] = rec 
     814 
     815a = {k for k in sss.keys() if len(sss[k]) > 1} 
     816if len(a) > 0: 
     817  for k in a: 
     818    print 'SEVERE.090.0001: ',k,sss[k] 
    744819 
    745820for k in ['seaiceday', 'seaicemon']: 
     
    755830## add CMIP5 groups ......... 
    756831for g in cmip5tbs: 
     832  kc = '%s.%s' % (g[-2],g[-1]) 
     833  sss[kc].append( g[0] ) 
    757834  sh[g[0]] = g[:] 
    758835sh.close() 
     836a = {k for k in sss.keys() if len(sss[k]) > 1} 
     837if len(a) > 0: 
     838  for k in a: 
     839    print 'SEVERE.090.0002: ',k,sss[k] 
     840 
    759841sh = shelve.open( '%s/requestVarSections' % odir, 'n' ) 
    760842sh['__info__'] = { 'label':'requestVarGroup', 'title':'Identify variable groups' } 
     
    764846  sh[g[0]] = g[:] 
    765847sh.close() 
     848######## 
     849######## this does not work .... the variables need to be added to "revTabItems", with link to variable group associated with the CMIP5 group. 
     850######## latter should be available through "CMIP5-Omon_3d" etc....:w 
     851 
    766852 
    767853err001 = collections.defaultdict( int ) 
     
    842928### 
    843929### BUT need to get full OMIP records in here ...... 
     930 cmip5GroupCol = collections.defaultdict( list ) 
    844931 sh = shelve.open( '%s/refTableItems' % odir, 'n' ) 
    845932 sh['__info__'] =  {'label':'refTableItems', 'title':'List of items in reference tables', 'prov':'sx.ee_mip' } 
     
    860947  if tabuuid.has_key( mipt ): 
    861948    gpid = tabuuid[mipt] 
     949  p = 0 
    862950  if mipt[:6] == "CMIP5_": 
    863951    m,t = string.split( mipt, '_' ) 
    864952    assert cmip5gplk.has_key(t), 'ERROR.009.0010: CMIP5 table link not found for %s' % mipt 
    865953    gpid = cmip5gplk[t] 
     954# output name 
     955    v0 = sx.ee_mip[k][15] 
     956# variable name 
     957    v1 = sx.ee_mip[k][21] 
     958    if type(v0) == type( 'y' ) and v0 not in ['', ' ']: 
     959      v1 = v0 
     960    assert sx.cmip5so.so.has_key(t), 'Key %s not found in cmip5.so keys' % t 
     961    if not sx.cmip5so.so[t].a.has_key(v1): 
     962      print 'ERROR.030.0001: Variable %s not found in cmip5so %s' % (v1,t) 
     963      p = 0 
     964    else: 
     965      p = sx.cmip5so.so[t].a[v1][0] 
     966 
     967## the "Oyr" group is for import, not needed in request 
     968    if t in cmip5GroupsIx and t not in ['Oyr','Amon']: 
     969      ##assert cmip5GroupsIVAR[t].has_key(v1) or cmip5GroupsIVAR[t].has_key(v0), '%s not found in table %s' % (v1,t) 
     970      if not (cmip5GroupsIVAR[t].has_key(v1) or cmip5GroupsIVAR[t].has_key(v0) ): 
     971         print 'ERROR.080.0020: %s not found in table %s' % (v1,t) 
     972      else: 
     973        if cmip5GroupsIVAR[t].has_key(v1): 
     974          gp = cmip5GroupsIVAR[t][v1] 
     975        else: 
     976          gp = cmip5GroupsIVAR[t][v0] 
     977##  
     978## collect variables in each group, along with key and priority, to create "revTabItems" 
     979## 
     980        cmip5GroupCol[ gp ].append( (v1,k,p) ) 
     981         
    866982  elif mipt[:5] == "OMIP.": 
    867983    m,t = string.split( mipt, '.' ) 
     
    874990## check to see if sections are defined. 
    875991    if tabsectbyvar.has_key(m): 
    876       print m, sx.ee_mip[k][15], v0, tabsectbyvar[m].has_key(v1), sx.ee_mip[k] 
    877992      if tabsectbyvar[m].has_key(v1): 
    878         gpid = tabsectuuid[m][ tabsectbyvar[m][v1][0] ] 
    879         rwix = tabsectbyvar[m][v1][1] 
     993        gpid = tabsectuuid[m][ tabsectbyvar[m][v1][2] ] 
     994        rwix = tabsectbyvar[m][v1][3] 
     995        p = tabsectbyvar[m][v1][1] 
    880996        rwixkkk += 1 
    881     ##    tabsects[mip].add( (tab,tup[2]) ) 
    882         ##tabsectbyvar[mip][v] = tup[2] 
    883         ##if not tabsectuuid[mip].has_key( tup[2] ): 
    884           ##tabsectuuid[mip][tup[2]] = str( uuid.uuid1() ) 
     997 
    885998    if gpid == '__group_unknown__': 
    886999      print 'ERROR.040.0010: OMIP group not found %s, %s, %s' % (mipt,v0,)  
     
    9271040    if len( sx.ee_mip[k][:] ) != 24: 
    9281041      print 'ERROR.015.0002: Bad record length %s: %s' % (k,sx.ee_mip[k]) 
    929     sh[k] = sx.ee_mip[k][:]  + [kl[0],gpid,rwix]  
     1042    sh[k] = sx.ee_mip[k][:]  + [kl[0],gpid,rwix,p]  
    9301043 sh.close() 
    9311044 
     
    10131126      kv = str( uuid.uuid1() ) 
    10141127      sh[kv] = [v,t,m,thisu,vars[v0][1]] 
     1128 
     1129        ### cmip5GroupCol[ gp ].append( (v1,k,p) ) 
     1130 gpextra = [] 
     1131 for gp in cmip5GroupCol.keys(): 
     1132   for v,k,p in cmip5GroupCol[gp]: 
     1133     kv = str( uuid.uuid1() ) 
     1134     rec = [v,gp,'CMIP5',k,int(p)] 
     1135     gpextra.append(rec) 
     1136     sh[kv] = rec[:] 
    10151137 dop.close('omip',rename='omip.csv') 
    10161138 dop.close('omip2',rename='omip2.csv') 
     
    10341156 print nomip 
    10351157 
     1158 
     1159 wb = utils_wb.workbook( 'CMIP6DataRequest_ConsolidatedExperiments_20150618.xls' ) 
     1160 sht = wb.book.sheet_by_name( 'Experiments' ) 
     1161 p = dreq_utils.prconsolexpt() 
     1162 p.parse(sht) 
     1163 sh = shelve.open( '%s/experiments' % odir, 'n' ) 
     1164 sh['__info__'] = { 'label':'experiments', 'title':'Experiments', 'prov':'ConsolidatedExperiments' } 
     1165 sh['__cols__'] = ['uuid','egid','label','description','mip','mcfg','tier','nstart','starty','endy','yps','ensz','ntot','comment'] 
     1166 ##['label','group','mip','description','modelClass','tier','nstart','starty','endy','yps','ensz','ntot','comment'] 
     1167 eegg = {} 
     1168 eetm = collections.defaultdict( set ) 
     1169 eent = collections.defaultdict( int ) 
     1170 for r in p.records: 
     1171   u = str( uuid.uuid1() ) 
     1172   gp = r[1] 
     1173   if not eegg.has_key(gp): 
     1174     eegg[gp] = str( uuid.uuid1() ) 
     1175   
     1176   eetm[gp].add( r[5] ) 
     1177   eent[gp] += r[11] 
     1178   label = labcoerce( r[0] ) 
     1179   oo = [u,eegg[gp],label] 
     1180   for j in [3,2,4,5,6,7,8,9,10,11,12]: 
     1181     oo.append( r[j] ) 
     1182   sh[u] = oo[:] 
     1183 sh.close() 
     1184 
     1185 sh = shelve.open( '%s/exptGroups' % odir, 'n' ) 
     1186 sh['__info__'] = { 'label':'exptGroups', 'title':'Experiment groups', 'prov':'ConsolidatedExperiments' } 
     1187 sh['__cols__'] = ['uuid','label','tiermin','ntot'] 
     1188 for k in eegg.keys(): 
     1189   if not eegg.has_key(gp): 
     1190     eegg[gp] = str( uuid.uuid1() ) 
     1191   
     1192   lab = labcoerce(k) 
     1193   oo = [eegg[k],lab,min(eetm[k]),eent[k]] 
     1194   sh[oo[0]] = oo[:] 
     1195 sh.close() 
     1196 
Note: See TracChangeset for help on using the changeset viewer.