source: cp4cds-tmp/simChk1.py @ 868

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

Simple code to check basic availability of files on disk

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
19    self.im = []
20
21    for i in sorted( l1 ):
22      self.addModels( i )
23    print self.im
24    self.filterModels(['piControl','historical','rcp45'])
25 
26  def addModels( self, x ):
27    l20 = glob.glob( '%s/*' % x)
28    l2 = [i for i in l20 if os.path.isdir( i ) ]
29    for i in sorted( l2 ):
30      inst, model = i.split( '/' )[-2:]
31      self.im.append( (inst,model) )
32
33  def filterModels(self,expts):
34    pths = set( [spth[t[0]] for t in vars1] )
35    n0 = len(self.im)
36    n1 = n2 = n3 = n4 = 0
37    sok = set()
38    sokk = set()
39    for i,m in self.im:
40      rcl = []
41      for expt in expts:
42        rcl.append( self.filterModel( expt,i,m,pths ) )
43      rc = min( rcl )
44      if rc != -2:
45        n1 += 1
46      if  rc > 0:
47        n2 += 1
48        sok.add( (i,m) )
49      if min(rcl[1:]) > 2 and rcl[0] > 0:
50        n3 += 1
51        sokk.add( (i,m) )
52      print '%12s: %12s: %s' % (i,m, rc)
53
54    print sok
55    print sokk
56
57    print 'Models: %s; with historical, rcp45 and piControl: %s; with top variables in 1 simulation: %s; in 3: %s' % (n0,n1,n2,n3)
58
59  def filterModel(self,expt,inst,model,pths):
60    ens = set()
61    for p in pths:
62      x = glob.glob( '%s%s/%s/%s/%s*' % (base,inst,model,expt,p) )
63      for e in x:
64        rip = e.split('/')[-1]
65        ens.add(rip)
66    if len(ens) == 0:
67      return -2
68    else:
69      ens = sorted( list( ens ) )
70      eok = set()
71      for e in ens:
72        missing = set()
73        for t,v in vars1:
74          p = spth[t]
75          if os.path.isdir( '%s%s/%s/%s/%s/%s/latest/%s' % (base,inst,model,expt,p,e,v) ):
76            fl =  glob.glob( '%s%s/%s/%s/%s/%s/latest/%s/*.nc' % (base,inst,model,expt,p,e,v) )
77          else:
78            missing.add( (t,v) )
79        if len(missing) == 0:
80          eok.add(e)
81      if len( eok ) == 0:
82        return -1
83      else:
84        return len(eok)
85         
86
87m = models(base)
88
89
Note: See TracBrowser for help on using the repository browser.