Ignore:
Timestamp:
29/02/16 17:16:37 (4 years ago)
Author:
mjuckes
Message:

new distrib

File:
1 edited

Legend:

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

    r606 r609  
    108108    self.mips = set( [x.label for x in self.dq.coll['mip'].items ] ) 
    109109    self.experiments = set( [x.uid for x in self.dq.coll['experiment'].items ] ) 
     110    self.exptByLabel = {} 
     111    for x in self.dq.coll['experiment'].items: 
     112      if x.label in self.exptByLabel: 
     113        print ( 'ERROR: experiment label duplicated: %s' % x.label ) 
     114      self.exptByLabel[x.label] = x.uid 
    110115    self.mipls = sorted( list( self.mips ) ) 
    111116 
     
    169174  def getRequestLinkByMip( self, mipSel ): 
    170175    """Return the set of request links which are associated with specified MIP""" 
     176 
     177    if type(mipSel) == type( {} ): 
     178      return self.getRequestLinkByMipObjective(self,mipSel) 
     179 
    171180    if type(mipSel) == type(''): 
    172181      t1 = lambda x: x == mipSel 
     
    181190    self.rqs = list( s ) 
    182191    return self.rqs 
     192 
     193  def getRequestLinkByMipObjective( self, mipSel ): 
     194    """Return the set of request links which are associated with specified MIP and its objectives""" 
     195 
     196    assert type(mipSel) == type( {} ),'Argument must be a dictionary, listing objectives for each MIP' 
     197 
     198    s = set() 
     199    for i in self.dq.coll['objectiveLink'].items: 
     200      if i.label in mipSel: 
     201        if len(mipSel[i]) == 0 or self.dq.inx.uid[i.oid].label in mipSel[i]: 
     202          s.add( self.dq.inx.uid[i.rid] ) 
     203    ##self.rqs = list({self.dq.inx.uid[i.rid] for i in self.dq.coll['objectiveLink'].items if t1(i.label) }) 
     204    self.rqs = list( s ) 
     205    return self.rqs 
     206 
    183207 
    184208  def getRequestLinkByObjective( self, objSel ): 
     
    325349      for i in rql: 
    326350        r = inx.uid[i] 
    327         print r.label, r.title, r.uid 
     351        print ( '%s, %s, %s' % r.label, r.title, r.uid ) 
    328352 
    329353    dn = False 
     
    544568        else: 
    545569          if len( nymg[v] ) > 1: 
    546             print '########### Selecting first in list .............' 
    547           ks = nymg[v].keys()[0] 
     570            print ( '########### Selecting first in list .............' ) 
     571          ks = list( nymg[v].keys() )[0] 
    548572          ny = nymg[v][ks] 
    549573          ff[v] = self.szg[ks][ inx.uid[v].stid ] * npy[inx.uid[v].frequency] 
     
    683707        raise baseException( 'rqiByMip: Name of mip(s) not recognised: %s' % str(nf) ) 
    684708      l1 = [i for i in  self.dq.coll['requestItem'].items if i.mip in mip] 
     709    elif type(mip) == type( dict()): 
     710      nf = [ m for m in mip if m not in self.mips] 
     711      if len(nf) > 0: 
     712        raise baseException( 'rqiByMip: Name of mip(s) not recognised: %s' % str(nf) ) 
     713      l1 = [] 
     714      for i in  self.dq.coll['requestLink'].items: 
     715        if i.mip in mip: 
     716          ok = False 
     717          if len( mip[i.mip] ) == 0: 
     718            ok = True 
     719          else: 
     720            for ol in self.dq.inx.iref_by_sect[i.uid].a['objectiveLink']: 
     721              o = self.dq.inx.uid[ol] 
     722              if self.dq.inx.uid[o.oid].label in mip[i.mip]: 
     723                ok = True 
     724          if ok: 
     725              if 'requestItem' in self.dq.inx.iref_by_sect[i.uid].a: 
     726                for u in self.dq.inx.iref_by_sect[i.uid].a['requestItem']: 
     727                  l1.append( self.dq.inx.uid[u] ) 
    685728    else: 
    686729      raise baseException( 'rqiByMip: "mip" (1st explicit argument) should be type string or set: %s -- %s' % (mip, type(mip))   ) 
     730 
    687731    return l1 
    688732 
     
    806850 
    807851    if 'm' in self.adict: 
    808       self.adict['m'] = set(self.adict['m'].split(',') ) 
     852      if self.adict['m'].find( ':' ) != -1: 
     853        ee = {} 
     854        for i in self.adict['m'].split(','): 
     855          bits =  i.split( ':' ) 
     856          if len( bits ) == 1: 
     857             ee[bits[0]] = [] 
     858          else: 
     859             assert len(bits) == 2, 'Cannot parse %s' % self.adict['m'] 
     860             ee[bits[0]] = bits[1].split( '.' ) 
     861        self.adict['m'] = ee 
     862      else: 
     863        self.adict['m'] = set(self.adict['m'].split(',') ) 
    809864 
    810865    integerArgs = set( ['p','t','plm'] ) 
     
    839894    eid = None 
    840895    ex = None 
    841     if self.adict.has_key('e'): 
     896    if 'e' in self.adict: 
    842897      ex = self.adict['e'] 
    843898      for i in self.dq.coll['experiment'].items: 
Note: See TracChangeset for help on using the changeset viewer.