source: cp4cds-tmp/simChk1.py @ 870

Subversion URL: http://proj.badc.rl.ac.uk/svn/exarch/cp4cds-tmp/simChk1.py@870
Revision 870, 2.8 KB checked in by mjuckes, 3 years ago (diff)

added code to generate list of files for models with basic availability

Line 
1
2
3import os, collections, glob
4
5base = '/badc/cmip5/data/cmip5/output1/'
6
7
8vars1 = [('Amon','tas'),('Amon','tasmin'),('Amon','tasmax'),('Amon','uas'),('Amon','vas'),('Amon','hurs'),('Amon','pr'),('Amon','ps')]
9vars1 = [('Amon','tas'),('Amon','tasmin'),('Amon','tasmax'),('Amon','uas'),('Amon','vas'),('Amon','pr'),('Amon','ps')]
10spth = {'Amon':'mon/atmos/Amon/'}
11
12
13class models(object):
14  def __init__(self, base):
15    assert os.path.isdir( base ), '%s not found' % base
16    l10 = glob.glob( '%s/*' % base )
17    l1 = [i for i in l10 if os.path.isdir( i ) ]
18    self.files = dict()
19
20    self.im = []
21
22    for i in sorted( l1 ):
23      self.addModels( i )
24
25    si = set()
26    sm = set()
27    for i,m in self.im:
28      si.add(i)
29      sm.add(m)
30    print sorted( list( si ) )
31    print sorted( list( sm ) )
32    print self.im
33    self.filterModels(['piControl','historical','rcp45'])
34 
35  def addModels( self, x ):
36    l20 = glob.glob( '%s/*' % x)
37    l2 = [i for i in l20 if os.path.isdir( i ) ]
38    for i in sorted( l2 ):
39      inst, model = i.split( '/' )[-2:]
40      self.im.append( (inst,model) )
41
42  def filterModels(self,expts):
43    pths = set( [spth[t[0]] for t in vars1] )
44    n0 = len(self.im)
45    n1 = n2 = n3 = n4 = 0
46    sok = set()
47    sokk = set()
48    for i,m in self.im:
49      rcl = []
50      for expt in expts:
51        rcl.append( self.filterModel( expt,i,m,pths ) )
52      rc = min( rcl )
53      if rc != -2:
54        n1 += 1
55      if  rc > 0:
56        n2 += 1
57        sok.add( (i,m) )
58      if min(rcl[1:]) > 2 and rcl[0] > 0:
59        n3 += 1
60        sokk.add( (i,m) )
61      print '%12s: %12s: %s' % (i,m, rc)
62
63    print sok
64    print sokk
65    oo = open( 'fileList.txt', 'w' )
66    for e,i,m,rip in self.files:
67       if (i,m) in sok:
68         for f in self.files[ (e,i,m,rip) ]:
69           oo.write( f + '\n' )
70    oo.close()
71
72    print 'Models: %s; with historical, rcp45 and piControl: %s; with top variables in 1 simulation: %s; in 3: %s' % (n0,n1,n2,n3)
73
74  def filterModel(self,expt,inst,model,pths):
75    ens = set()
76    for p in pths:
77      x = glob.glob( '%s%s/%s/%s/%s*' % (base,inst,model,expt,p) )
78      for e in x:
79        rip = e.split('/')[-1]
80        ens.add(rip)
81    if len(ens) == 0:
82      return -2
83    else:
84      ens = sorted( list( ens ) )
85      eok = set()
86      for e in ens:
87        efl = []
88        missing = set()
89        for t,v in vars1:
90          p = spth[t]
91          if os.path.isdir( '%s%s/%s/%s/%s/%s/latest/%s' % (base,inst,model,expt,p,e,v) ):
92            fl =  glob.glob( '%s%s/%s/%s/%s/%s/latest/%s/*.nc' % (base,inst,model,expt,p,e,v) )
93            for f in fl:
94              efl.append(f)
95          else:
96            missing.add( (t,v) )
97        if len(missing) == 0:
98          eok.add(e)
99          self.files[ (expt,inst,model,e) ] = efl
100      if len( eok ) == 0:
101        return -1
102      else:
103        return len(eok)
104         
105
106m = models(base)
107
108
Note: See TracBrowser for help on using the repository browser.