Ignore:
Timestamp:
22/06/16 16:17:43 (4 years ago)
Author:
mjuckes
Message:

01.beta.30

File:
1 edited

Legend:

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

    r673 r683  
    3434    self.a = collections.defaultdict( set ) 
    3535 
     36NT_txtopts = collections.namedtuple( 'txtopts', ['mode'] ) 
     37 
    3638class baseException(Exception): 
    3739  """Basic exception for general use in code.""" 
     
    5355    return cmp( self.d[x], self.d[y] ) 
    5456 
    55     self.default_mcfg = nt_mcfg._make( [259200,60,64800,40,20,5,100] ) 
    5657 
    5758def filter1( a, b ): 
     
    123124    self.default_mcfg = nt_mcfg._make( [259200,60,64800,40,20,5,100] ) 
    124125    self.mcfg = self.default_mcfg._asdict() 
    125     ##for k in self.default_mcfg.__dict__.keys(): 
    126       ##self.mcfg[k] = self.default_mcfg.__dict__[k] 
     126    self.mcfgNote = None 
    127127    self.szcfg() 
    128128    self.requestItemExpAll(  ) 
     129 
     130  def setMcfg(self, ll, msg=None ): 
     131    assert len(ll) == 7, 'Model config must be of length 7: %s' % str(ll) 
     132    assert all( [type(x) == type(1) for x in ll] ) 
     133    self.mcfg = nt_mcfg._make( ll )._asdict() 
     134    if msg == None: 
     135      self.mcfgNote = 'User supplied model configuration: %s' % str(ll) 
     136    else: 
     137      self.mcfgNote = msg 
     138    self.szcfg() 
    129139 
    130140  def szcfg(self): 
     
    280290    return rql, l1p, exset 
    281291 
    282   def varsByRql( self, rql, pmax=2, intersection=False):  
    283       """The complete set of variables associated with a set of rquest links.""" 
     292  def varsByRql( self, rql, pmax=2, intersection=False, asDict=False):  
     293      """The complete set of variables associated with a set of request links.""" 
    284294      inx = self.dq.inx 
    285295      cc1 = collections.defaultdict( set ) 
     
    329339###To obtain a set of variables associated with this collection of variable groups: 
    330340 
    331         vars = set() 
     341        if asDict: 
     342          vars = collections.defaultdict( list ) 
     343        else: 
     344          vars = set() 
    332345        for vg in rqvgs: 
    333346          for l in inx.iref_by_sect[vg].a['requestVar']: 
    334347            if inx.uid[l].priority <= min(pmax,max(rqvgs[vg])): 
    335                vars.add(inx.uid[l].vid) 
     348               if asDict: 
     349                 vars[inx.uid[l].vid].append( vg ) 
     350               else: 
     351                 vars.add(inx.uid[l].vid) 
    336352 
    337353        ##col1 = reduce( operator.or_, [set( inx.iref_by_sect[vg].a['requestVar'] ) for vg in rqvg ] ) 
     
    339355    ##vars = {vid for vid in vars if inx.uid[vid][0] == u'CMORvar'} 
    340356 
    341       thisvars = set() 
    342       for vid in vars: 
    343          if inx.uid[vid]._h.label == u'CMORvar': 
     357      if asDict: 
     358        thisvars = {} 
     359        for vid in vars: 
     360           if inx.uid[vid]._h.label == u'CMORvar': 
     361             thisvars[vid] = vars[vid] 
     362      else: 
     363        thisvars = set() 
     364        for vid in vars: 
     365           if inx.uid[vid]._h.label == u'CMORvar': 
    344366             thisvars.add(vid) 
    345367 
     
    378400 
    379401## The complete set of variables associated with these requests: 
    380     vars = self.varsByRql( rql, pmax=pmax, intersection=intersection)  
     402    vars = self.varsByRql( rql, pmax=pmax, intersection=intersection, asDict=True)  
    381403    tm = 3 
    382404    if tm == 0: 
     
    388410## 
    389411    if not retainRedundantRank: 
    390       len1 = len(vars) 
    391       cmv = self.cmvFilter.filterByChoiceRank(cmv=vars) 
     412      len1 = len(vars.keys()) 
     413      cmv = self.cmvFilter.filterByChoiceRank(cmv=vars.keys()) 
    392414 
    393415      vars = cmv 
     
    487509    ov = [] 
    488510    for v in vars: 
     511      if 'requestVar' not in inx.iref_by_sect[v].a: 
     512         print 'Variable with no request ....: %s, %s' % (inx.uid[v].label, inx.uid[v].mipTable) 
    489513      szv[v] = self.sz[inx.uid[v].stid]*npy[inx.uid[v].frequency] 
    490514      ov.append( self.dq.inx.uid[v] ) 
     
    683707 
    684708 
    685   def xlsByMipExpt(self,m,ex,pmax,odir='xls'): 
     709  def xlsByMipExpt(self,m,ex,pmax,odir='xls',xls=True,txt=False,txtOpts=None): 
    686710    import scope_utils 
    687     mxls = scope_utils.xlsTabs(self,tiermax=self.tierMax,pmax=pmax) 
    688  
    689     ##tabs = makeTables.tables( self, mips, odir=odir ) 
     711    mxls = scope_utils.xlsTabs(self,tiermax=self.tierMax,pmax=pmax,xls=xls, txt=txt, txtOpts=txtOpts,odir=odir) 
     712 
    690713    mlab = makeTables.setMlab( m ) 
    691     ##mm = list( m )[0] 
    692     ##r = overviewTabs.r1( self, tiermax=1, pmax=pmax, only=mm ) 
    693714 
    694715    mxls.run( m, mlab=mlab ) 
     
    781802      -p <priority>  maximum priority; 
    782803      --xls : Create Excel file with requested variables; 
     804      --txt : Create text file with requested variables; 
     805      --mcfg : Model configuration: 7 integers, comma separated, 'nho','nlo','nha','nla','nlas','nls','nh1' 
     806                 default: 259200,60,64800,40,20,5,100 
     807      --txtOpts : options for content of text file: (v|c)[(+|-)att1[,att2[...]]] 
    783808      --xlsDir <directory> : Directory in which to place variable listing [xls]; 
    784       --printLinesMax <n>: Maximum number of lines to be printed 
    785       --printVars  : If present, a summary of the variables fitting the selection options will be printed 
     809      --printLinesMax <n>: Maximum number of lines to be printed (default 20) 
     810      --printVars  : If present, a summary of the variables (see --printLinesMax) fitting the selection options will be printed 
    786811      --intersection : Analyse the intersection of requests rather than union. 
    787812 
     
    801826                      '--printVars':('vars',False), '--intersection':('intersection',False), \ 
    802827                      '--count':('count',False), \ 
     828                      '--txt':('txt',False), \ 
     829                      '--mcfg':('mcfg',True), \ 
     830                      '--txtOpts':('txtOpts',True), \ 
    803831                      '--xlsDir':('xlsdir',True), '--xls':('xls',False) \ 
    804832                       }  
     
    877905      return 
    878906 
     907    if 'mcfg' in self.adict: 
     908      ll = string.split( self.adict['mcfg'], ',' ) 
     909      assert len(ll) == 7, 'Length of model configuration argument must be 7 comma separated integers: %s' %  self.adict['mcfg'] 
     910      lli = [ int(x) for x in ll] 
     911      print lli 
     912 
    879913    self.sc = dreqQuery( dq=self.dq ) 
     914    if 'mcfg' in self.adict: 
     915      self.sc.setMcfg( lli ) 
    880916 
    881917    ok = True 
     
    902938    self.getVolByMip(pmax,eid,adsCount) 
    903939    makeXls = self.adict.get( 'xls', False ) 
    904     if makeXls: 
     940    makeTxt = self.adict.get( 'txt', False ) 
     941    if makeXls or makeTxt: 
    905942      mips = self.adict['m'] 
    906943      odir = self.adict.get( 'xlsdir', 'xls' ) 
     
    908945 
    909946      ##print mips, eid 
    910       self.sc.xlsByMipExpt(mips,eid,pmax,odir=odir) 
    911  
     947      if 'txtOpts' in self.adict: 
     948        if self.adict['txtOpts'][0] == 'v': 
     949          txtOpts = NT_txtopts( 'var' ) 
     950        else: 
     951          txtOpts = NT_txtopts( 'cmv' ) 
     952      else: 
     953        txtOpts=None 
     954 
     955      self.sc.xlsByMipExpt(mips,eid,pmax,odir=odir,xls=makeXls,txt=makeTxt,txtOpts=txtOpts) 
    912956 
    913957  def printList(self): 
     
    952996      for v in vl[:mx]: 
    953997        mlg.prnt ( '%s: %7.2fTb' % (self.dq.inx.uid[v].label, cc[v]*2.*1.e-12) ) 
    954  
     998      if mx < len(vl): 
     999        mlg.prnt ( '%s variables not listed (use --printLinesMax to print more)' % (len(vl)-mx) ) 
     1000 
Note: See TracChangeset for help on using the changeset viewer.