Ignore:
Timestamp:
22/02/16 16:45:22 (4 years ago)
Author:
mjuckes
Message:

resolved some bugs in volume estimate and cf3hr variable definitions

File:
1 edited

Legend:

Unmodified
Added
Removed
  • CMIP6dreq/trunk/dreqPy/scope.py

    r601 r606  
    3030  def __init__(self): 
    3131    self.a = collections.defaultdict( int ) 
     32class c1s(object): 
     33  def __init__(self): 
     34    self.a = collections.defaultdict( set ) 
    3235 
    3336class baseException(Exception): 
     
    104107 
    105108    self.mips = set( [x.label for x in self.dq.coll['mip'].items ] ) 
     109    self.experiments = set( [x.uid for x in self.dq.coll['experiment'].items ] ) 
    106110    self.mipls = sorted( list( self.mips ) ) 
    107111 
     
    114118 
    115119  def szcfg(self): 
     120    szr = {'100km':64800, '1deg':64800, '2deg':16200 } 
    116121    self.szss = {} 
    117122    self.sz = {} 
     123    self.szg = collections.defaultdict( dict ) 
     124    self.szgss = collections.defaultdict( dict ) 
    118125    for i in self.dq.coll['spatialShape'].items: 
    119126      type = 'a' 
     
    150157 
    151158      self.szss[i.uid] = nh*nz 
     159      for k in szr: 
     160        self.szgss[k][i.uid] = szr[k]*nz 
    152161    for i in self.dq.coll['structure'].items: 
    153       s = self.szss[i.spid] 
     162      s = 1 
    154163      if i.odims != '': 
    155164        s = s*5 
    156       self.sz[i.uid] = s 
     165      self.sz[i.uid] = self.szss[i.spid]*s 
     166      for k in szr: 
     167        self.szg[k][i.uid] = self.szgss[k][i.spid]*s 
    157168 
    158169  def getRequestLinkByMip( self, mipSel ): 
     
    310321     
    311322    rql, l1p, exset = self.rqlByExpt( l1, ex, pmax=pmax, expFullEx=expFullEx ) 
     323    verbose = False 
     324    if verbose: 
     325      for i in rql: 
     326        r = inx.uid[i] 
     327        print r.label, r.title, r.uid 
     328 
    312329    dn = False 
    313330    if dn: 
     
    435452      i = inx.uid[u] 
    436453      e[i.uid] = set() 
     454      si = collections.defaultdict( list ) 
    437455      for x in inx.iref_by_sect[i.refid].a['requestVar']: 
    438456           if inx.uid[x].priority <= pmax: 
    439457              e[i.uid].add( inx.uid[x].vid ) 
     458 
     459              if verbose: 
     460                cmv = inx.uid[inx.uid[x].vid] 
     461                if cmv._h.label == 'CMORvar': 
     462                  si[ cmv.mipTable ].append( inx.uid[x].label ) 
    440463# 
    441464# for each variable, calculate the maximum number of years across all the request links which reference that variable. 
     
    444467## 
    445468    nym = {} 
     469    nymg = collections.defaultdict( dict ) 
    446470 
    447471## 
     
    452476      irqi = 2 
    453477 
     478    sgg = set() 
    454479    for v in vars: 
    455480      s = set() 
     481      sg = collections.defaultdict( set ) 
    456482      cc2 = collections.defaultdict( set ) 
     483      cc2s = collections.defaultdict( c1s ) 
    457484      for i in l1p: 
    458485################## 
    459486        if i.esid in exset and v in e[i.rlid]: 
    460487          ix = inx.uid[i.esid] 
     488          rl = inx.uid[i.rlid] 
     489          sgg.add( rl.grid ) 
     490          if rl.grid in ['100km','1deg','2deg']: 
     491            grd = rl.grid 
     492          else: 
     493            grd = 'native' 
     494 
    461495          if exi._h.label == 'experiment': 
    462496            if ex in self.rqiExp[i.uid][1]: 
    463497              this = self.rqiExp[i.uid][1][ex] 
    464               cc2[i.esid].add( this[-1]*this[-2] ) 
     498              thisz = this[-1]*this[-2] 
     499            else: 
     500              thisz = None 
    465501          elif ix._h.label == 'experiment': 
    466             cc2[i.esid].add( self.rqiExp[i.uid][irqi] ) 
     502            #cc2s[grd].a[i.esid].add( self.rqiExp[i.uid][irqi] ) 
     503            thisz = self.rqiExp[i.uid][irqi] 
    467504          else: 
     505            thisz = None 
    468506            if 'experiment' in inx.iref_by_sect[i.esid].a: 
    469507              for u in inx.iref_by_sect[i.esid].a['experiment']: 
    470508                if u in self.rqiExp[i.uid][1]: 
    471509                  this = self.rqiExp[i.uid][1][u] 
    472                   cc2[u].add( this[-1]*this[-2] ) 
    473                 ###cc2[u].add( self.rqiExp[i.uid][irqi] ) 
    474             ##else: 
    475               ##print 'WARNING .... empty experiment set' 
    476           s.add( self.rqiExp[i.uid][irqi] ) 
    477       ##nym[v] = max( {self.rqiExp[i.uid][2] for i in l1p if i.esid == ex and v in e[i.rlid]} ) 
     510                  cc2s[grd].a[u].add( this[-1]*this[-2] ) 
     511 
     512          if thisz != None: 
     513              cc2s[grd].a[i.esid].add( thisz ) 
     514          ##if rl.grid in ['100km','1x1']: 
     515            ##sg[rl.grid].add( self.rqiExp[i.uid][irqi] ) 
     516          ##else: 
     517          sg[grd].add( self.rqiExp[i.uid][irqi] ) 
     518       
    478519      if len(s) == 0: 
    479520        nym[v] = 0 
    480521      else: 
    481         ##print 'debug2:: ',v,cc2 
     522### 
     523### sum over experiments of maximum within eacj experiment 
     524### 
    482525        nym[v] = sum( [max( cc2[k] ) for k in cc2] ) 
     526      for g in sg: 
     527        nymg[v][g] = sum( [max( cc2s[g].a[k] ) for k in cc2s[g].a] ) 
    483528 
    484529    szv = {} 
     
    488533      ov.append( self.dq.inx.uid[v] ) 
    489534    ee = self.listIndexDual( ov, 'mipTable', 'label', acount=None, alist=None, cdict=szv, cc=cc ) 
     535 
    490536    ff = {} 
    491537    for v in vars: 
     
    493539        ff[v] = 1 
    494540      else: 
    495         ff[v] = self.sz[ inx.uid[v].stid ] * npy[inx.uid[v].frequency] 
     541        if 'native' in nymg[v]: 
     542          ff[v] = self.sz[ inx.uid[v].stid ] * npy[inx.uid[v].frequency] 
     543          ny = nymg[v]['native'] 
     544        else: 
     545          if len( nymg[v] ) > 1: 
     546            print '########### Selecting first in list .............' 
     547          ks = nymg[v].keys()[0] 
     548          ny = nymg[v][ks] 
     549          ff[v] = self.szg[ks][ inx.uid[v].stid ] * npy[inx.uid[v].frequency] 
     550 
    496551        if inx.uid[v].frequency != 'monClim': 
    497           ff[v] = ff[v]*nym[v] 
     552          ff[v] = ff[v]*ny 
    498553    self.ngptot = sum( [  ff[v]  for v in vars] ) 
    499554    return (self.ngptot, ee, ff ) 
     
    654709    #### The set of experiments/experiment groups: 
    655710    if exptid == None: 
    656       exps = self.mips 
     711      ##exps = self.mips 
     712      exps = self.experiments 
    657713    else: 
    658714      exps = set( [exptid,] ) 
     
    810866    v0 = self.sc.volByMip( self.adict['m'], pmax=pmax, intersection=self.intersection, adsCount=adsCount, exptid=eid ) 
    811867    #mlg.prnt ( '%7.2fTb' % (v0*2.*1.e-12) ) 
    812     mlg.prnt ( '%s' % v0 ) 
     868    mlg.prnt ( '%s [%s]' % (v0,makeTables.vfmt(v0*2.)) ) 
    813869    cc = collections.defaultdict( int ) 
    814870    for e in self.sc.volByE: 
Note: See TracChangeset for help on using the changeset viewer.