Ignore:
Timestamp:
19/01/16 15:35:04 (5 years ago)
Author:
mjuckes
Message:

debugging and code cleaning of overview tables

File:
1 edited

Legend:

Unmodified
Added
Removed
  • CMIP6dreqbuild/trunk/src/framework/dreqPy/scope.py

    r546 r553  
    285285      return thisvars 
    286286 
    287   def volByExpt( self, l1, ex, pmax=1, cc=None, retainRedundantRank=False, intersection=False,expFullEx=False ): 
     287  def volByExpt( self, l1, ex, pmax=1, cc=None, retainRedundantRank=False, intersection=False,expFullEx=False, adsCount=False ): 
    288288    """volByExpt: calculates the total data volume associated with an experiment/experiment group and a list of request items. 
    289289          The calculation has some approximations concerning the number of years in each experiment group. 
     
    395395        ##col1 = reduce( operator.or_, [set( inx.iref_by_sect[vg].a['requestVar'] ) for vg in rqvg ] ) 
    396396 
    397 ###The collector col1 here accumulates all the record uids, resulting in a single collection. These are request variables, to get a set of CMOR variables at priority <= pmax: 
    398         ##vars = set() 
    399         ##for l in list(col1): 
    400            ##if inx.uid[l].priority <= pmax: 
    401              ##vars.add(inx.uid[l].vid) 
    402 ## 
    403  
    404397### filter out cases where the request does not point to a CMOR variable. 
    405398    ##vars = {vid for vid in vars if inx.uid[vid][0] == u'CMORvar'} 
     
    434427## 
    435428    nym = {} 
     429 
     430## 
     431## if dataset count rather than volume is wanted, use item 3 from rqiExp tuple. 
     432    if adsCount: 
     433      irqi = 3 
     434    else: 
     435      irqi = 2 
     436 
    436437    for v in vars: 
    437438      s = set() 
     439      cc2 = collections.defaultdict( set ) 
    438440      for i in l1p: 
     441################## 
    439442        if i.esid in exset and v in e[i.rlid]: 
    440           s.add( self.rqiExp[i.uid][2] ) 
     443          ix = inx.uid[i.esid] 
     444          if ix._h.label == 'experiment': 
     445            cc2[i.esid].add( self.rqiExp[i.uid][irqi] ) 
     446          else: 
     447            if 'experiment' in inx.iref_by_sect[i.esid].a: 
     448              for u in inx.iref_by_sect[i.esid].a['experiment']: 
     449                cc2[u].add( self.rqiExp[i.uid][irqi] ) 
     450            ##else: 
     451              ##print 'WARNING .... empty experiment set' 
     452          s.add( self.rqiExp[i.uid][irqi] ) 
    441453      ##nym[v] = max( {self.rqiExp[i.uid][2] for i in l1p if i.esid == ex and v in e[i.rlid]} ) 
    442454      if len(s) == 0: 
    443         nym[v] == 0 
    444       else: 
    445         nym[v] = max( s ) 
     455        nym[v] = 0 
     456      else: 
     457        ##print 'debug2:: ',v,cc2 
     458        nym[v] = sum( [max( cc2[k] ) for k in cc2] ) 
    446459 
    447460    szv = {} 
     
    453466    ff = {} 
    454467    for v in vars: 
    455       ff[v] = self.sz[ inx.uid[v].stid ] * npy[inx.uid[v].frequency] * nym[v] 
     468      if adsCount: 
     469        ff[v] = nym[v] 
     470      else: 
     471        ff[v] = self.sz[ inx.uid[v].stid ] * npy[inx.uid[v].frequency] * nym[v] 
    456472    self.ngptot = sum( [  ff[v]  for v in vars] ) 
    457473    return (self.ngptot, ee, ff ) 
     
    514530    self.rqiExp = {} 
    515531    for rqi in self.dq.coll['requestItem'].items: 
    516       a,b,c = self.requestItemExp( rqi ) 
     532      a,b,c,d = self.requestItemExp( rqi ) 
    517533      if a != None: 
    518         self.rqiExp[rqi.uid] = (a,b,c) 
     534        self.rqiExp[rqi.uid] = (a,b,c,d) 
    519535 
    520536  def requestItemExp( self, rqi ): 
     
    532548      ##rqi.__info__() 
    533549      ##raise 
    534       return (None, None, None) 
     550      return (None, None, None, None) 
    535551 
    536552    if self.tierMax > 0: 
     
    549565      dat = [ (i.ntot, i.yps, i.ensz, i.tier, i.nstart, filter1(i.yps,rqi.nymax), filter2(i.ensz,rqi.nenmax,i.tier,self.tierMax) ) for i in e] 
    550566      nytot = sum( [x[-2]*x[-1] for x in dat ] ) 
    551       ##print dat, nytot, self.tierMax, rqi.nenmax 
     567      netot = sum( [x[-1] for x in dat ] ) 
     568      ##print 'debug1:: ',dat, nytot, netot 
    552569    else: 
    553570      dat = [ (0,0,0,0,0) ] 
    554571      nytot = 0 
     572      netot = 0 
    555573     
    556     return (expts, dat, nytot ) 
    557      
     574    return (expts, dat, nytot, netot ) 
    558575 
    559576  def setTierMax( self, tierMax ): 
     
    585602    return l1 
    586603       
    587   def volByMip( self, mip, pmax=2, retainRedundantRank=False, intersection=False): 
     604  def volByMip( self, mip, pmax=2, retainRedundantRank=False, intersection=False, adsCount=False, exptid=None): 
    588605 
    589606    l1 = self.rqiByMip( mip ) 
    590607       
    591608    #### The set of experiments/experiment groups: 
    592     exps = set() 
    593     for i in l1: 
    594       exps.add( i.esid ) 
    595     exps = self.mips 
     609    if exptid == None: 
     610      exps = self.mips 
     611    else: 
     612      exps = set( [exptid,] ) 
     613      ##print exptid, exps 
    596614    self.volByE = {} 
    597615    vtot = 0 
     
    601619      expts = self.esid_to_exptList(e,deref=True,full=False) 
    602620      if expts != None: 
    603         self.volByE[e] = self.volByExpt( l1, e, pmax=pmax, cc=cc, retainRedundantRank=retainRedundantRank, intersection=intersection ) 
     621        self.volByE[e] = self.volByExpt( l1, e, pmax=pmax, cc=cc, retainRedundantRank=retainRedundantRank, intersection=intersection, adsCount=adsCount ) 
    604622        vtot += self.volByE[e][0] 
    605623        self.allVars = self.allVars.union( self.vars ) 
     
    657675      -m <mip>:  MIP of list of MIPs (comma separated); 
    658676      -h :       help: print help text; 
     677      -e <expt>: experiment; 
    659678      -t <tier> maxmum tier; 
    660679      -p <priority>  maximum priority; 
     
    665684  def __init__(self,args): 
    666685    self.adict = {} 
    667     self.knownargs = {'-m':('m',True), '-p':('p',True), '-t':('t',True), '-h':('h',False), '--printLinesMax':('plm',True), '--printVars':('vars',False), '--intersection':('intersection',False)}  
     686    self.knownargs = {'-m':('m',True), '-p':('p',True), '-e':('e',True), '-t':('t',True), '-h':('h',False), '--printLinesMax':('plm',True), '--printVars':('vars',False), '--intersection':('intersection',False),'--count':('count',False)}  
    668687    aa = args[:] 
    669688    while len(aa) > 0: 
     
    707726        if i not in sc.mips: 
    708727          ok = False 
    709           mlg.prnt ( 'NOT FOUND: ',i ) 
     728          mlg.prnt ( 'NOT FOUND: %s' % i ) 
     729 
     730    eid = None 
     731    if self.adict.has_key('e'): 
     732      for i in self.dq.coll['experiment'].items: 
     733        if i.label == self.adict['e']: 
     734          eid = i.uid 
     735      assert eid != None, 'Experiment %s not found' % self.adict['e'] 
     736    print 'eid=',eid 
    710737    assert ok,'Available MIPs: %s' % str(sc.mips) 
    711  
    712     tierMax = self.adict.get( 't', 2 ) 
     738    adsCount = self.adict.get( 'count', False ) 
     739 
     740    tierMax = self.adict.get( 't', 1 ) 
    713741    sc.setTierMax(  tierMax ) 
    714     pmax = self.adict.get( 'p', 2 ) 
    715     v0 = sc.volByMip( self.adict['m'], pmax=pmax, intersection=self.intersection ) 
    716     mlg.prnt ( '%7.2fTb' % (v0*2.*1.e-12) ) 
     742    pmax = self.adict.get( 'p', 1 ) 
     743    v0 = sc.volByMip( self.adict['m'], pmax=pmax, intersection=self.intersection, adsCount=adsCount, exptid=eid ) 
     744    #mlg.prnt ( '%7.2fTb' % (v0*2.*1.e-12) ) 
     745    mlg.prnt ( '%s' % v0 ) 
    717746    cc = collections.defaultdict( int ) 
    718747    for e in sc.volByE: 
Note: See TracChangeset for help on using the changeset viewer.