source: CMIP6dreqbuild/trunk/src/framework/requestReview.py @ 1241

Subversion URL: http://proj.badc.rl.ac.uk/svn/exarch/CMIP6dreqbuild/trunk/src/framework/requestReview.py@1241
Revision 1241, 22.9 KB checked in by mjuckes, 16 months ago (diff)

cand. 01.00.27

Line 
1
2import collections, xlsxwriter, uuid, json
3
4import docAppend
5
6from dreqPy import dreq
7from dreqPy import scope
8from dreqPy import volsum
9from dreqPy.extensions import collect
10
11###
12### need to check that Omon-3d and Omon-oth are complete .....
13### extend revocean3d method .....
14
15class uuidManage(object):
16  ##uuidlist = ['x%5.5i_%s' % (i,str( uuid.uuid1() ) ) for i in range(5000)]
17  uuidlist = [x.strip() for x in open( 'uuid_july6.txt' ).readlines() ]
18  def __init__(self):
19    self.l = list()
20    self.used = set()
21
22  def pop(self):
23    u = self.uuidlist.pop()
24    self.used.add( u )
25    return u
26
27uuidlist = uuidManage()
28 
29newUid = collections.defaultdict( set )
30
31class rev01(object):
32  def __init__(self):
33    """Identify variables which are commonly used in the historical and piControl experiments and append them to the ScenarioMIP experiment request;
34       Add ESMval low frequency request to all experiments."""
35
36    self.dq = dreq.loadDreq(manifest='dreqManifest_review.txt')
37    collect.add( self.dq )
38    self.l00 = tuple([len( self.dq.coll[x].items ) for x in ['requestVarGroup','requestLink','requestItem','requestVar'] ] )
39
40    self.exptix = dict()
41    self.varix = dict()
42    self.cmvix = dict()
43
44    for i in self.dq.coll['experiment'].items:
45      self.exptix[i.label] = i.uid
46
47    for i in self.dq.coll['var'].items:
48      self.varix[i.label] = i.uid
49
50    for i in self.dq.coll['CMORvar'].items:
51      self.cmvix[(i.mipTable,i.label)] = i.uid
52
53  def revocean3d(self):
54    o3d = self.dq.inx.uid['efc154f6-5629-11e6-9079-ac72891c3257']
55    ooth = self.dq.inx.uid['efc143a8-5629-11e6-9079-ac72891c3257']
56    omon_table = self.dq.inx.uid['MIPtable::Omon']
57    s3d = set()
58    soth = set()
59    for i in self.dq.inx.iref_by_sect[omon_table.uid].a['CMORvar']:
60      cmv = self.dq.inx.uid[i]
61      st = self.dq.inx.uid[cmv.stid]
62      sp = self.dq.inx.uid[st.spid]
63      if sp.dimensions.find( 'olevel' ) != -1 and sp.dimensions.find( 'latitude' ) != -1 and sp.dimensions.find( 'longitude' ) != -1:
64        s3d.add( i )
65      else:
66        soth.add( i )
67
68    cc = collections.defaultdict( set )
69    s3dx = set()
70    for i in self.dq.inx.iref_by_sect[o3d.uid].a['requestVar']:
71      rv = self.dq.inx.uid[i]
72      cmv = self.dq.inx.uid[rv.vid]
73      s3dx.add(rv.vid)
74      st = self.dq.inx.uid[cmv.stid]
75      sp = self.dq.inx.uid[st.spid]
76      if sp.dimensions.find( 'olevel' ) == -1:
77        cc[st.uid].add( rv.uid )
78
79    sothx = set()
80    for i in self.dq.inx.iref_by_sect[ooth.uid].a['requestVar']:
81      rv = self.dq.inx.uid[i]
82      cmv = self.dq.inx.uid[rv.vid]
83      sothx.add( rv.vid )
84      st = self.dq.inx.uid[cmv.stid]
85      sp = self.dq.inx.uid[st.spid]
86      if sp.dimensions.find( 'olevel' ) != -1:
87        cc[st.uid].add( rv.uid )
88
89    rqv1 = {'priority':1, 'vgid':'efc143a8-5629-11e6-9079-ac72891c3257', 'mip':'OMIP'}
90    thisrqv = self.dq.coll['requestVar'].items[0]
91    for u in soth:
92      if u not in sothx:
93          cmv = self.dq.inx.uid[u]
94          this = rqv1.copy()
95          this['vid'] = u
96          this['priority'] = cmv.defaultPriority
97          this['uid'] = uuidlist.pop()
98          this['label'] = 'OMIP-%s' % cmv.label
99          this['title'] = 'OMIP monthly, excluding 3d: %s' % cmv.label
100          thisrqv._append( this )
101
102    rqv1 = {'priority':1, 'vgid':'efc154f6-5629-11e6-9079-ac72891c3257', 'mip':'OMIP'}
103    for u in s3d:
104      if u not in s3dx:
105          cmv = self.dq.inx.uid[u]
106          this = rqv1.copy()
107          this['vid'] = u
108          this['priority'] = cmv.defaultPriority
109          this['uid'] = uuidlist.pop()
110          this['label'] = 'OMIP-%s' % cmv.label
111          this['title'] = 'OMIP monthly, 3d: %s' % cmv.label
112          thisrqv._append( this )
113
114    print 'Found in Omon-oth group:'
115    for s in cc:
116      print '%s: %s' % (s,len(cc[s]))
117    self.rmu = cc['f7e4000e-562c-11e6-a2a4-ac72891c3257']
118
119  def reva(self):
120
121# expand experiment label list to set of uid's of experiments + mips + experiment groups which, if referenced by esid attribute, imply a request from these experiments.
122    eset = set( ['historical','piControl'] )
123    esetx = set()
124    for lab in eset:
125      u = self.exptix[lab]
126      esetx.add(u)
127      i = self.dq.inx.uid[u]
128      esetx.add(i.mip)
129      esetx.add(i.egid)
130
131## find set of ScenarioMIP experiments and experiment groups
132    esetr = set(['ScenarioMIP',])
133    i = self.dq.inx.uid['ScenarioMIP']
134    for u in self.dq.inx.iref_by_sect[i.uid].a['experiment']:
135      esetr.add(u)
136      esetr.add(self.dq.inx.uid[u].egid)
137   
138## find requestLink items which link to an experiment in eset.
139    rql01 = self._eset_to_rqlset(esetx)
140    rqlScen = self._eset_to_rqlset(esetr)
141
142## for each variable, collect names of mips requesting it
143    cc = self._rqlset_to_varmipdict(rql01)
144    self.ccScen = self._rqlset_to_varmipdict(rqlScen)
145
146## rank variables
147    ee = collections.defaultdict( set )
148    for i in self.dq.coll['CMORvar'].items:
149      t = (i.mipTable,i.label)
150      ee[len(cc[t])].add( t )
151
152    ks = sorted( ee.keys() )
153    ks.reverse()
154
155    kac = 0
156    ll = len( self.dq.coll['CMORvar'].items )
157    fac = 100./ll
158    for k in ks:
159      kac += len( ee[k] )
160      print '%2s: %4s (%6.2f%%)' % (k, len(ee[k]), kac*fac)
161
162
163    for k in ks:
164      vv = collections.defaultdict( set )
165      print '%s:: Request Rank %s' % (k,k)
166      for t in ee[k]:
167        vv[t[0]].add(t[1])
168      for t in sorted( vv.keys() ):
169        print '%s:: %s' % (t, ','.join( sorted( vv[t] ) ) )
170
171    self.rankedList = ee
172    self.dumpXlsx( 'test' )
173    eset = self._eset_per_mip_by_request()
174    depcomp = self._mip_dep_comp(eset)
175
176  def _rev_thetao(self):
177    self.vgid_with_thetao_only = dict()
178    for tab in ['Omon','Odec']:
179      thetao = self.cmvix[(tab,'thetao')]
180      bigthetao = self.cmvix[(tab,'bigthetao')]
181      s1 = set()
182      s2 = set()
183      for i in self.dq.inx.iref_by_sect[thetao].a['requestVar']:
184        vgid = self.dq.inx.uid[i].vgid
185        s1.add( vgid )
186      for i in self.dq.inx.iref_by_sect[bigthetao].a['requestVar']:
187        vgid = self.dq.inx.uid[i].vgid
188        s2.add( vgid )
189      ss = {x for x in s1 if x not in s2}
190
191      self.vgid_with_thetao_only[tab] = (ss,bigthetao)
192      print 'THETAO: %s: variable groups to edit: %s' % (tab, len(ss) )
193
194  def _add_bigthetao(self):
195## add in requestVars
196##[u'uid', u'vid', u'title', u'label', u'priority', u'vgid', u'mip']
197    rqv1 = {'priority':1, 'mip':'OMIP'}
198    thisrqv = self.dq.coll['requestVar'].items[0]
199
200    for tab in ['Omon','Odec']:
201      ss, bigthetao = self.vgid_with_thetao_only[tab]
202      for vgid in ss:
203          this = rqv1.copy()
204          this['vid'] = bigthetao
205          this['vgid'] = vgid
206          this['uid'] = uuidlist.pop()
207          this['label'] = 'OMIP-bigthetao' 
208          this['title'] = 'bigthetao -- alternative to thetao use in some models'
209          thisrqv._append( this )
210       
211
212  def dumpXlsx(self,fn):
213    wb = xlsxwriter.Workbook('%s.xlsx' % fn)
214    s = wb.add_worksheet(name='Info')
215    s.write( 0,0, 'Review of Data Request: Summary' )
216    s.write( 1,0, 'Rank' )
217    s.write( 1,1, 'Number of MIPs requesting variable for either historical or piControl' )
218    s.write( 1,0, "Count" )
219    s.write( 1,1, "Number of variables" )
220    s.write( 2,0, "Cumulative %" )
221    s.write( 2,1, "Cumulative number of variables, as a percentage" )
222    s.write( 3,0, "Count*" )
223    s.write( 3,1, "Number of variables which in this set which are already requested for ScenarioMIP experiments by VIACSAB" )
224    s.write( 4,0, "Rank" )
225    s.write( 4,1, "Count" )
226    s.write( 4,2, "Cumulative" )
227    s.write( 4,3, "Cumulative %" )
228    s.write( 4,4, "Count*" )
229    s.write( 4,5, "Cumulative*" )
230
231
232    ks = sorted( self.rankedList.keys() )
233    ks.reverse()
234    kac = 0
235    kvac = 0
236    ll = len( self.dq.coll['CMORvar'].items )
237    fac = 100./ll
238    ir = 4
239    for k in ks:
240      kac += len( self.rankedList[k] )
241      kv = len( [t for t in self.rankedList[k] if 'VIACSAB' in self.ccScen[t] ] )
242      kv2 = len( [t for t in self.rankedList[k] if len( self.ccScen[t] ) > 0 ] )
243      kvac += kv
244      ir += 1
245      s.write( ir,0, k )
246      s.write( ir,1, len( self.rankedList[k] ) )
247      s.write( ir,2, kac )
248      s.write( ir,3, (kac*fac) )
249      s.write( ir,4, kv )
250      s.write( ir,5, kvac )
251      s.write( ir,6, kv2 )
252
253    for k in ks:
254      s = wb.add_worksheet(name='Rank %s' % k)
255      s.write( 0,0, "Table" )
256      s.write( 0,1, "Variable" )
257      ##vv = collections.defaultdict( set )
258      tt = sorted( list( self.rankedList[k] ) )
259      ir = 0
260      for t in tt:
261        ir += 1
262        s.write( ir,0, t[0] )
263        s.write( ir,1, t[1] )
264        s.write( ir,2, 'VIACSAB' in self.ccScen[t] )
265        s.write( ir,3, self.dq.inx.uid[ self.cmvix[t] ].title )
266
267    wb.close()
268
269  def _review_table_groups(self):
270    ss = set()
271    for i in self.dq.coll['requestVarGroup'].items:
272      if i.refNote.find( 'MIP Table: ' ) != -1:
273        tab = i.refNote.split( )[-1]
274        u = 'MIPtable::%s' % tab
275        if u in self.dq.inx.uid:
276          ss.add((i,u))
277        else:
278          print i.title, '%s not found' % u
279
280    for i,u in ss:
281      ## CMORvar items in table
282      s1 = self.dq.inx.iref_by_sect[u].a['CMORvar']
283      ## CMORvar items in group
284      s2 = [self.dq.inx.uid[k].vid for k in self.dq.inx.iref_by_sect[i.uid].a['requestVar']]
285      s1x = [k for k in s1 if k not in s2]
286      s2x = [k for k in s2 if k not in s1]
287      if len(s1x) == 0 and len(s2x) == 0:
288        print 'Table %s OK [%s/%s]' % (i.title, len(s1), len(s2))
289      else:
290        print 'ERROR: Table %s: %s;; %s' % (i.title, len(s1x), len(s2x))
291
292   
293
294  def _mip_dep_comp(self,eset):
295    esdoc = json.load( open( 'ingest/mipExptDep.json', 'r' ) )
296    es = esdoc['mips']
297    esex = set()
298    drex = set()
299    for k in es:
300      for e in es[k]['expts']:
301        esex.add(e)
302    for k in eset:
303      for e in eset[k]:
304        drex.add(e)
305    d1 = esex.difference( drex )
306    if len( d1 ) > 0:
307       print 'EXPERIMENTS ONLY IN es-doc:', d1
308    else:
309       print 'experiments not different, %s -- %s' % (len(esex), len(drex))
310    d1 = drex.difference( esex )
311    if len( d1 ) > 0:
312       print 'EXPERIMENTS ONLY IN dreq:', d1
313
314    for k in es:
315      if k not in eset:
316        print 'SEVERE.eset.0001: esdoc key not in request dict: %s' % k
317    for k in eset:
318      if k not in es:
319        print 'SEVERE.eset.0001: request dict key not in esdoc dict: %s' % k
320    res = dict()
321    consistent = set()
322    for k in es:
323      if k in eset:
324        esdoc_dependency_only = set()
325        dreq_requests_only = set()
326        for e in es[k]['expts']:
327          if e not in eset[k]:
328            esdoc_dependency_only.add(e)
329        for e in eset[k]:
330          if e not in es[k]['expts']:
331            dreq_requests_only.add(e)
332        if len( dreq_requests_only ) == 0 and len( esdoc_dependency_only ) == 0:
333          consistent.add( k )
334        else:
335          res[k] = {'esdoc_only':sorted(list(esdoc_dependency_only)), 'dreq_only':sorted(list(dreq_requests_only))}
336
337    ee =  {'consistent':sorted(list(consistent)), 'differences':res}
338    oo = open( 'mipExptDepComp.json', 'w' )
339    json.dump( {'info':{'title':'Analysis of dependencies of MIPS on expts'}, 'analysis':ee}, oo, indent=4, sort_keys=True )
340    oo.close()
341    oo = open( 'esdoc_only.csv', 'w' )
342    for k in sorted(list(res.keys())):
343      if len( res[k]['esdoc_only'] ) > 0:
344        oo.write( '\t'.join( [k,] + res[k]['esdoc_only'] ) + '\n' )
345    oo.close()
346    oo = open( 'dreq_only.csv', 'w' )
347    for k in sorted(list(res.keys())):
348      if len( res[k]['dreq_only'] ) > 0:
349        oo.write( '\t'.join( [k,] + res[k]['dreq_only'] ) + '\n' )
350    oo.close()
351    return ee
352
353       
354  def _eset_per_mip_by_request(self):
355    """Find set of experiments from which a MIP requests data"""
356    eset = collections.defaultdict(set)
357    for i in self.dq.coll['requestLink'].items:
358      for u in self.dq.inx.iref_by_sect[i.uid].a['requestItem']:
359        this = self.dq.inx.uid[u]
360        ex = self.dq.inx.uid[this.esid]
361        if ex._h.label == 'experiment':
362          eset[i.mip].add(ex.label)
363        else:
364          for uuu in self.dq.inx.iref_by_sect[this.esid].a['experiment']:
365            eset[i.mip].add(self.dq.inx.uid[uuu].label )
366 
367    res = dict()
368    for k in eset:
369      res[k] = eset[k]
370    if 'DECK' in res:
371      print 'DECK???????? :',res[k]
372    else:
373      print 'DECK not here ....'
374    return res
375   
376  def _eset_to_rqlset(self,eset):
377    """Find requestLink items which link to an experiment in eset.
378       Input:
379         eset: set of uid's of experiments, experiment groups and mips;
380       Output:
381         rqlset: set of uid's of requestLink records.
382    """
383    rqlset = set()
384    for i in self.dq.coll['requestLink'].items:
385      for u in self.dq.inx.iref_by_sect[i.uid].a['requestItem']:
386        this = self.dq.inx.uid[u]
387        if this.esid in eset:
388          rqlset.add( i.uid )
389    return rqlset
390
391  def _rqlset_to_varmipdict(self,rqlset):
392    """For each variable, collect names of mips requesting it:
393     Input:
394       rqlset: set of uid's of requestLink records;
395     Output:
396       cc: dictionary (collections.defaultdict instance): keys: tuple of (mipTable, label), values: set of MIPS.
397    """
398    cc = collections.defaultdict( set )
399    for i in rqlset:
400      rvg = self.dq.inx.uid[i].refid
401      mip = self.dq.inx.uid[i].mip
402      for u in self.dq.inx.iref_by_sect[rvg].a['requestVar']:
403        this = self.dq.inx.uid[u]
404        cmv = self.dq.inx.uid[this.vid]
405        cc[(cmv.mipTable,cmv.label)].add( mip )
406    return cc
407
408
409  def _add_areatype(self):
410    s1 = set()
411    for  i in self.dq.coll['grids'].items:
412      if i.standardName == 'area_type':
413        for u in self.dq.inx.iref_by_sect[i.uid].a['structure']:
414          s1.add(u)
415
416    s2 = set()
417    for u in s1:
418      for k in self.dq.inx.iref_by_sect[u].a['CMORvar']:
419        s2.add(k)
420
421    ss = set()
422    for k in s2:
423      i = self.dq.inx.uid[k]
424      v = self.dq.inx.uid[i.vid]
425      if v.sn.find( 'area_fraction' ) != -1 and i.mipTable not in ['IyrGre', 'IyrAnt', 'SIDay']:
426        ss.add(i)
427
428#
429    for u in ['MIPtable::Ofx','MIPtable::fx']:
430      for k in self.dq.inx.iref_by_sect[u].a['CMORvar']:
431        i = self.dq.inx.uid[k]
432        ss.add(i)
433
434    rvg1 = {u'refNote':'rvg1', u'uid':uuidlist.pop(), u'title':'Baseline set of variables for all experiments (fixed and masks)', u'label':'maskBaseline', u'mip':'CMIP', u'ref':'auto'}
435    self.dq.coll['requestVarGroup'].items[0]._append( rvg1 )
436
437    rql1 = {u'comment':'Baseline set of variables for all experiments (fixed and masks)', u'refNote':'added by requestReview script',
438           u'uid':uuidlist.pop(), u'opar':'', u'title':'Masks baseline',
439           u'opt':'', u'label':'maskBaseline', u'grid':'', u'tab':'',
440           u'objective':'ModelIntercomparison1', u'mip':'CMIP', u'ref':'', u'refid':rvg1['uid'], u'gridreq':''}
441    objl1 = {u'uid':uuidlist.pop(), u'title':'',
442             u'label':'ModelIntercomparison1', 'oid':self.modelIntObjUid, 'rid':rql1['uid']}
443    rqi1 = {u'nexmax':1, u'uid':None, u'title':'', u'nenmax':1, u'nymax':999, 'preset':-1, u'expt':'', u'ny':10, u'rlid':rql1['uid'], u'tab':'', u'esid':'', u'mip':'CMIP', u'label':'', u'esidComment':''}
444   
445    self.dq.coll['objectiveLink'].items[0]._append( objl1 )
446    self.dq.coll['requestLink'].items[0]._append( rql1 )
447    thisrqi = self.dq.coll['requestItem'].items[0]
448    for exg in self.dq.coll['exptgroup'].items:
449      this = rqi1.copy()
450      this['uid'] = uuidlist.pop()
451      this['esid'] = exg.uid
452      this['expt'] = exg.label
453      this['label'] = 'CMIP-masks-%s' % exg.label
454      this['title'] = 'Masks baseline: Link to %s' % exg.label
455      thisrqi._append( this )
456
457## add in requestVars
458##[u'uid', u'vid', u'title', u'label', u'priority', u'vgid', u'mip']
459    rqv1 = {'priority':1, 'vgid':rvg1['uid'], 'mip':'CMIP'}
460    thisrqv = self.dq.coll['requestVar'].items[0]
461    for cmv in ss:
462          u = cmv.uid
463          this = rqv1.copy()
464          this['vid'] = u
465          this['uid'] = uuidlist.pop()
466          this['label'] = 'CMIP-%s' % cmv.label
467          this['title'] = 'Masks baseline .. %s' % cmv.label
468          thisrqv._append( this )
469
470     
471
472
473  def _add_esmvalBaseline(self):
474
475## add request for esmval low freq. groupd (b7d445ce-c16a-11e6-bb6a-ac72891c3257) to every expt.
476    esmvalBase = "b7d445ce-c16a-11e6-bb6a-ac72891c3257"
477    rvg1 = {u'refNote':'rvg1', u'uid':uuidlist.pop(), u'title':'Baseline set of esmval variables for all experiments', u'label':'validationBaseline', u'mip':'CMIP', u'ref':'auto'}
478    self.dq.coll['requestVarGroup'].items[0]._append( rvg1 )
479
480    rql1 = {u'comment':'Baseline set of variables for all experiments', u'refNote':'added by requestReview script',
481           u'uid':uuidlist.pop(), u'opar':'', u'title':'ESMval baseline',
482           u'opt':'', u'label':'esmvalBaseline', u'grid':'', u'tab':'',
483           u'objective':'ModelIntercomparison1', u'mip':'CMIP', u'ref':'', u'refid':rvg1['uid'], u'gridreq':''}
484
485    thisobj = self.dq.coll['objective'].items
486    obj1 = {u'uid':uuidlist.pop(), u'title':'Diagnostics for model intercomparison',
487             'desription':'Diagnostics for model intercomparison',
488             u'label':'ModelIntercomparison1', 'mip':'CMIP'}
489    self.modelIntObjUid = obj1['uid']
490    objl1 = {u'uid':uuidlist.pop(), u'title':'',
491             u'label':'ModelIntercomparison1', 'oid':obj1['uid'], 'rid':rql1['uid']}
492    thisobj.append( thisobj[0].__class__( idict=obj1, id='auto' ) )
493    thisobjl = self.dq.coll['objectiveLink'].items
494    thisobjl.append( thisobjl[0].__class__( idict=objl1, id='auto' ) )
495
496    thislist = self.dq.coll['requestLink'].items
497    thislist.append( thislist[0].__class__( idict=rql1, id='auto' ) )
498    thisrqi = self.dq.coll['requestItem'].items
499    rqi1 = {u'nexmax':1, u'uid':None, u'title':'', u'nenmax':1, u'nymax':999, 'preset':-1, u'expt':'', u'ny':10, u'rlid':rql1['uid'], u'tab':'', u'esid':'', u'mip':'CMIP', u'label':'', u'esidComment':''}
500    for exg in self.dq.coll['exptgroup'].items:
501      this = rqi1.copy()
502      this['uid'] = uuidlist.pop()
503      this['esid'] = exg.uid
504      this['expt'] = exg.label
505      this['label'] = 'CMIP-esmval-%s' % exg.label
506      this['title'] = 'ESMVal baseline: Link to %s' % exg.label
507      thisrqi.append( thisrqi[0].__class__( idict=this, id='auto' ) )
508
509    ss = set()
510    for i in self.dq.inx.iref_by_sect[esmvalBase].a['requestVar']:
511      rqv = self.dq.inx.uid[i]
512      cmv = self.dq.inx.uid[rqv.vid]
513      st = self.dq.inx.uid[cmv.stid]
514      sp = self.dq.inx.uid[st.spid]
515      if not (cmv.frequency == 'day' and (sp.dimensions.find( 'plev8' ) != -1)):
516        ss.add(cmv)
517
518## add in requestVars
519##[u'uid', u'vid', u'title', u'label', u'priority', u'vgid', u'mip']
520    rqv1 = {'priority':1, 'vgid':rvg1['uid'], 'mip':'CMIP'}
521    thisrqv = self.dq.coll['requestVar'].items[0]
522    for cmv in ss:
523          u = cmv.uid
524          this = rqv1.copy()
525          this['vid'] = u
526          this['uid'] = uuidlist.pop()
527          this['label'] = 'CMIP-%s' % cmv.label
528          this['title'] = 'Validation baseline .. %s' % cmv.label
529          thisrqv._append( this )
530
531     
532  def _add_rql(self):
533##[u'refNote', u'uid', u'title', u'label', u'mip', u'ref']
534    rvg1 = {u'refNote':'rvg1', u'uid':uuidlist.pop(), u'title':'Baseline set of variables for ScenarioMIP experiments', u'label':'scenarioMipBaseline', u'mip':'CMIP', u'ref':'auto'}
535##[u'comment', u'refNote', u'uid', u'opar', u'title', u'opt', u'label', u'grid', u'tab', u'objective', u'mip', u'ref', u'refid', u'gridreq']
536    thisrvg = self.dq.coll['requestVarGroup'].items
537    thislist = self.dq.coll['requestLink'].items
538    thisrqi = self.dq.coll['requestItem'].items
539    thisrqv = self.dq.coll['requestVar'].items
540    rql1 = {u'comment':'Baseline set of variables for ScenarioMIP experiments', u'refNote':'added by requestReview script', u'uid':uuidlist.pop(), u'opar':'', u'title':'ScenarioMIP baseline',
541           u'opt':'', u'label':'scenarioMipBaseline', u'grid':'', u'tab':'', u'objective':'ModelIntercomparison2', u'mip':'CMIP', u'ref':'', u'refid':rvg1['uid'], u'gridreq':''}
542    thislist.append( thislist[0].__class__( idict=rql1, id='auto' ) )
543    thisrvg.append( thisrvg[0].__class__( idict=rvg1, id='auto' ) )
544    thisobj = self.dq.coll['objective'].items
545    thisobjl = self.dq.coll['objectiveLink'].items
546    obj1 = {u'uid':uuidlist.pop(), u'title':'Diagnostics for model intercomparison',
547             'desription':'Diagnostics for model intercomparison from ScenarioMIP experiments',
548             u'label':'ModelIntercomparison2', 'mip':'CMIP'}
549    objl1 = {u'uid':uuidlist.pop(), u'title':'',
550             u'label':'ModelIntercomparison2', 'oid':obj1['uid'], 'rid':rql1['uid']}
551    thisobj.append( thisobj[0].__class__( idict=obj1, id='auto' ) )
552    thisobjl.append( thisobjl[0].__class__( idict=objl1, id='auto' ) )
553
554
555
556## add in requestItems, linking to scenarioMip experiments
557##[u'treset', u'nexmax', u'uid', u'title', u'nenmax', u'nymax', u'expt', u'ny', u'preset', u'tslice', u'rlid', u'tab', u'esid', u'mip', u'label', u'esidComment']
558    rqi1 = {u'nexmax':1, u'uid':None, u'title':'', u'nenmax':1, u'nymax':999, 'preset':-1, u'expt':'', u'ny':1, u'rlid':rql1['uid'], u'tab':'', u'esid':'', u'mip':'CMIP', u'label':'', u'esidComment':''}
559    i = self.dq.inx.uid['ScenarioMIP']
560    for u in self.dq.inx.iref_by_sect[i.uid].a['experiment']:
561      ex = self.dq.inx.uid[u]
562      this = rqi1.copy()
563      this['uid'] = uuidlist.pop()
564      this['esid'] = u
565      this['expt'] = ex.label
566      this['label'] = 'CMIP-scenario-%s' % ex.label
567      this['title'] = 'Link to %s' % ex.label
568      thisrqi.append( thisrqi[0].__class__( idict=this, id='auto' ) )
569
570## add in requestVars
571##[u'uid', u'vid', u'title', u'label', u'priority', u'vgid', u'mip']
572    rqv1 = {'priority':1, 'vgid':rvg1['uid'], 'mip':'CMIP'}
573    for k in self.rankedList.keys():
574      if k > 6:
575        for t in self.rankedList[k]:
576          u = self.cmvix[t]
577          cmv = self.dq.inx.uid[u]
578          this = rqv1.copy()
579          this['vid'] = u
580          this['uid'] = uuidlist.pop()
581          this['label'] = 'CMIP-%s' % cmv.label
582          this['title'] = 'ScenMipBase .. %s' % cmv.label
583          self.dq.coll['requestVar'].items.append( thisrqv[0].__class__( idict=this, id='auto' ) )
584
585
586  def _finish(self,go=False,delt=True):
587    self.dq.inx = dreq.index( self.dq.coll )
588    l11 = tuple([len( self.dq.coll[x].items ) for x in ['requestVarGroup','requestLink','requestItem','requestVar'] ] )
589    if delt==True:
590      assert self.l00 != l11, 'Failed to append items ....'
591    print self.l00, l11
592    if go:
593      x = scope.dreqUI(['-m','CMIP:ModelIntercomparison2.ModelIntercomparison1','-p','3','-t','3'])
594      x.run(dq=self.dq)
595      sc = scope.dreqQuery( dq=self.dq )
596      sc.setTierMax(  3 )
597      sc.gridPolicyDefaultNative = False
598      pmax = 3
599      vs = volsum.vsum( sc, scope.odsz, scope.npy, odir='revXls', tabByFreqRealm=False )
600      vs.analAll(pmax)
601     
602r = rev01()
603r.reva()
604r._rev_thetao()
605r._add_rql()
606r._add_bigthetao()
607r._add_esmvalBaseline()
608r._add_areatype()
609r._review_table_groups()
610r.revocean3d()
611r._finish(go=False,delt=False)
612
613
614ifile = 'out/annotated_20150731_chk.xml'
615ifile = 'ing02/test.xml'
616ofile = 'ing02/test_01.xml'
617da = docAppend.dreqAppend(ifile, r.dq, uuidlist.used, rmu=r.rmu )
618da.write(ofile=ofile)
619
Note: See TracBrowser for help on using the repository browser.