source: CMIP6dreqbuild/trunk/src/framework/checkExpt.py @ 820

Subversion URL: http://proj.badc.rl.ac.uk/svn/exarch/CMIP6dreqbuild/trunk/src/framework/checkExpt.py@820
Revision 820, 5.9 KB checked in by mjuckes, 4 years ago (diff)

adding missing file

Line 
1
2import string, collections, shelve
3from dreqPy import dreq
4dq=dreq.loadDreq()
5
6def mycc(s):
7      if string.find(s, ' ') != -1:
8        s = string.split(s)[0]
9      s = string.replace( s, '&', '' )
10      s = string.replace( s, '_', ' ' )
11      if len(s) > 0 and s[-1] == '+':
12        s = s[:-1] + 'ETC'
13## camelcase the input string
14      s1 = string.lower( string.replace(string.strip(str( s) ), '-', ' ') )
15      return string.replace( string.capwords( s1 ), ' ', '' )
16
17class echck(object):
18  def __init__(self):
19    deck = {'control', '1pctCO2', 'abrupt4xCO2', 'historical', 'AMIP'}
20    pseudo = { 'CMIP6 historical':'historical', 'HiResMIP':'HighResMIP', 'AeroChemMIP':'AerChemMIP', 'LUMIP-ALL':'LUMIP', 'PMIP3-1':'PMIP-1', 'PMIP3-2':'PMIP-2', 'ScenarioMIP-ALL':'ScenarioMIP', 'OCMIP':'OMIP', 'VolShortIni':'VolShort' }
21    et = {i.label for i in dq.coll['experiment'].items}
22    self.mips = {i.mip for i in dq.coll['experiment'].items}
23   
24    self.lcmips = {}
25    for i in self.mips:
26      self.lcmips[ string.lower(i) ] = i
27
28    egt = {i.label for i in dq.coll['exptgroup'].items}
29
30    ep0 = {i.expt for i in dq.coll['requestItem'].items}
31
32    self.eta = egt.union( et ).union( self.mips ).union( deck )
33
34    ep = set()
35    esplit = collections.defaultdict( set )
36    esplitf = {}
37
38    emap = collections.defaultdict( list )
39
40##
41## first parse through list of requested experiments
42##
43    for e in ep0:
44      if string.find( e, '(' ) != -1:
45        e0 = string.split( e, '(', maxsplit=1 )[0]
46      else:
47        e0 = e
48
49      if string.find( e, ',' ) == -1:
50        ep.add(e)
51      else:
52        bits = [string.strip(i) for i in string.split( e0, ',' )]
53        esplitf[e] = set( bits )
54        for b in bits:
55          ep.add(b)
56          esplit[b].add( e )
57##
58## create dictionary pointing to resolved expt name.
59##
60    for i in ep.intersection( self.eta ):
61        emap[i].append( i )
62   
63    etal = {}
64    for e in self.eta:
65      etal[ string.lower(e) ] = e
66
67    for i in esplit.keys():
68        for e in esplit[i]:
69          if e in esplitf:
70            print 'INFO.001.00001: %s:: %s:: %s' % (e,i,str(esplitf[e]) )
71            for ex in esplitf[e]:
72              ex1 = mycc( ex )
73              if ex1 in self.eta:
74                emap[e].append(ex1 )
75              elif string.lower( ex1 ) in self.eta:
76                emap[e].append(string.lower(ex1) )
77              elif string.lower( ex1 ) in etal:
78                emap[e].append(etal[string.lower(ex1)] )
79              else:
80                print 'ERROR.001.00001: experiment %s not found [%s]' % (ex1,i)
81          elif i in self.eta:
82            print 'INFO.002.00001: %s:: %s' % (e,i)
83            emap[e].append( i )
84          else:
85            print 'WARN.001.00001: unresolved experiment name %s, %s' % (e,i)
86
87    mgn = {i for i in ep if i not in self.eta}
88#####
89#####
90    for i in mgn:
91      k, v = (None,None)
92     
93      if mycc(i) in self.eta:
94        k, v = (i,mycc(i))
95      elif pseudo.has_key(i):
96        if pseudo[i] in self.eta:
97           k, v = (i,pseudo[i])
98        elif mycc(  pseudo[i] ) in self.eta:
99           k, v = (i,mycc( pseudo[i] ))
100      if i == 'C4MIP-2':
101        print 'INFO.004.0001:', i,k,v,mycc(i) in self.eta
102      if k != None:
103        emap[k].append( v )
104        if esplit.has_key(k):
105           for e in esplit[k]:
106             emap[e].append( v )
107        else:
108           emap[k].append( v )
109
110    mgn2 = { i for i in mgn if (mycc(i) not in self.eta) and ( (not pseudo.has_key(i)) or ( ( pseudo[i] not in self.eta ) and ( mycc( pseudo[i] ) not in self.eta ) ) ) }
111
112    for i in mgn2:
113      if self.lcmips.has_key( string.lower(i) ):
114        emap[i].append( self.lcmips[string.lower(i)] )
115
116    mgn3b = { i for i in ep0 if not emap.has_key(i) }
117    mgn3 = { i for i in mgn2 if not self.lcmips.has_key( string.lower(i) ) }
118    print 'INFO.005.0001:', len(ep),len(mgn),len(mgn2), len(mgn3), len(mgn3b)
119    print 'INFO.005.0002:', mgn3
120    print 'INFO.005.0003:', mgn3b
121    self.res = (mgn,mgn2,mgn3)
122
123    cc = collections.defaultdict( set )
124    mgn3_e = set()
125    for k in esplit.keys():
126      mgn3_e = mgn3_e.union ( esplit[k] )
127
128    res = { cc[i.expt].add( i.mip ) for i in dq.coll['requestItem'].items if (i.expt in mgn3 or ( esplitf.has_key(i.expt) and len( mgn3.intersection( esplitf[i.expt] ) ) ) != 0 )}
129    ks = sorted( cc.keys() )
130    for k in ks:
131      print 'INFO.005.0004:',k, cc[k]
132
133    self.emap = emap
134    sh = shelve.open( 'sh_links/exptMappings', 'n' )
135    for k in emap.keys():
136      print 'INFO.0001.00002: ',k,emap[k]
137      sh[k] = emap[k]
138    sh.close()
139
140  def chck1(self,e):
141    ep = set()
142    esplit = collections.defaultdict( set )
143    esplitf = {}
144
145    emap = collections.defaultdict( list )
146   
147    if string.find( e, '(' ) != -1:
148        e0 = string.split( e, '(', maxsplit=1 )[0]
149    else:
150        e0 = e
151
152    if string.find( e, ',' ) == -1:
153        ep.add(e)
154    else:
155        bits = [string.strip(i) for i in string.split( e0, ',' )]
156        esplitf[e] = set( bits )
157        for b in bits:
158          ep.add(b)
159          esplit[b].add( e )
160##
161## create dictionary pointing to resolved expt name.
162##
163    for i in ep.intersection( self.eta ):
164      if not esplit.has_key(i):
165        emap[i].append( i )
166      else:
167        for e in esplit[i]:
168          emap[i].append( e )
169
170    mgn = {i for i in ep if i not in self.eta}
171
172    mgn2 = { i for i in mgn if (mycc(i) not in self.eta) and ( (not pseudo.has_key(i)) or ( ( pseudo[i] not in self.eta ) and ( mycc( pseudo[i] ) not in self.eta ) ) ) }
173    mgn3 = { i for i in mgn2 if string.lower(i) not in self.lcmips }
174    print len(ep),len(mgn),len(mgn2), len(mgn3)
175
176    cc = collections.defaultdict( set )
177    mgn3_e = set()
178    for k in esplit.keys():
179       mgn3_e = mgn3_e.union ( esplit[k] )
180
181    res = { cc[i.expt].add( i.mip ) for i in dq.coll['requestItem'].items if (i.expt in mgn3 or ( esplitf.has_key(i.expt) and len( mgn3.intersection( esplitf[i.expt] ) ) ) != 0 )}
182    ks = sorted( cc.keys() )
183    for k in ks:
184      print k, cc[k]
185
186ce = echck()
Note: See TracBrowser for help on using the repository browser.