Ignore:
Timestamp:
19/01/16 15:35:04 (5 years ago)
Author:
mjuckes
Message:

debugging and code cleaning of overview tables

File:
1 edited

Legend:

Unmodified
Added
Removed
  • CMIP6dreqbuild/trunk/src/framework/overviewTabs.py

    r552 r553  
    2121              s = '%3iT' % int( x*1.e-12 ) 
    2222            else: 
    23               s = '{:,.2f}'.format 
     23              s = '{:,.2f}'.format( x*1.e-9 )  
    2424            return s 
    2525 
     
    3333class r1(object): 
    3434  def __init__(self,sc,tiermax=1,pmax=1): 
     35    self.pmax=pmax 
     36    self.tiermax=tiermax 
    3537    self.sc = sc 
    3638    sc.setTierMax( tiermax ) 
    3739    self.cc = collections.defaultdict( c1 ) 
    3840    self.dq = sc.dq 
    39     mips = ['AerChemMIP', 'C4MIP', 'CFMIP', 'DAMIP', 'DCPP', 'FAFMIP', 'GeoMIP', 'GMMIP', 'HighResMIP', 'ISMIP6', 'LS3MIP', 'LUMIP', 'OMIP', 'PMIP', 'RFMIP', 'ScenarioMIP', 'VolMIP', 'CORDEX', 'DynVar', 'SIMIP', 'VIACSAB'] 
    40     mipsp = ['DECK','CMIP6',] + mips[:-4] 
    41     for m in mips + ['TOTAL',]: 
     41    self.mips = ['AerChemMIP', 'C4MIP', 'CFMIP', 'DAMIP', 'DCPP', 'FAFMIP', 'GeoMIP', 'GMMIP', 'HighResMIP', 'ISMIP6', 'LS3MIP', 'LUMIP', 'OMIP', 'PMIP', 'RFMIP', 'ScenarioMIP', 'VolMIP', 'CORDEX', 'DynVar', 'SIMIP', 'VIACSAB'] 
     42    self.mipsp = ['DECK','CMIP6',] + self.mips[:-4] 
     43    for m in self.mips + ['TOTAL',]: 
    4244      if m == 'TOTAL': 
    43         l1 = sc.rqiByMip( set( mips ) ) 
     45        l1 = sc.rqiByMip( set( self.mips ) ) 
    4446      else: 
    4547        l1 = sc.rqiByMip( m ) 
     48 
    4649      self.cc[m].dd = {} 
    47       for m2 in mipsp: 
    48         x = sc.volByExpt( l1, m2, expFullEx=True ) 
    49         self.cc[m].a[m2] += x[0] 
    50 # 
    51 # create sum for each table 
    52 # 
    53         for k in x[2].keys(): 
    54           i = self.dq.inx.uid[k] 
    55           xxx =  x[2][k] 
    56           if xxx > 0: 
    57             self.cc['_%s_%s' % (m,m2)].a[i.mipTable] += xxx 
     50      self.cc[m].ee = {} 
     51      for m2 in self.mipsp: 
     52        xx = [i for i in self.dq.coll['experiment'].items if i.mip == m2] 
     53        self.cc[m].ee[m2] = xx 
     54## 
     55## need to check this option, and add a template for a view summarising the experiments for each mip-mip combinations 
     56## 
     57## sss=True not yet tested 
     58## 
     59        sss = False 
     60        if sss: 
     61          for i in xx: 
     62            self.doTable(m,l1,i.uid,self.cc) 
     63        else: 
     64          self.doTable(m,l1,m2,self.cc) 
    5865 
    59         self.cc[m].a['TOTAL'] += x[0] 
    60         dd = collections.defaultdict( list ) 
    61         lll = set() 
    62         for v in x[2].keys(): 
    63           vi = sc.dq.inx.uid[v] 
    64           if vi._h.label != 'remarks': 
    65             f,t,l,tt,d,u = (vi.frequency,vi.mipTable,vi.label,vi.title,vi.description,vi.uid) 
    66             lll.add(u) 
    67             dd[t].append( (f,t,l,tt,d,u) ) 
    68         if len( dd.keys() ) > 0: 
    69           self.cc[m].dd[m2] = dd 
    70           makeTables.makeTab( subset=lll, dest='tab2/%s-%s_%s_%s.xlsx' % (m,m2,tiermax,pmax) ) 
    71           
    72     oo = open( 'tab01_%s_%s.texfrag' % (tiermax,pmax), 'w' ) 
     66    self.writeMips() 
     67 
     68  def writeMips(self): 
     69 
     70    oo = open( 'tab01_%s_%s.texfrag' % (self.tiermax,self.pmax), 'w' ) 
    7371    mmh = [] 
    74     mhdr = [ '\\rot{80}{%s}' % m for m in mipsp + ['TOTAL',]] 
    75     mhdrh = [ '<th><div><span>%s</span></div></th>' % m for m in mipsp] 
     72    mhdr = [ '\\rot{80}{%s}' % m for m in self.mipsp + ['TOTAL',]] 
     73    mhdrh = [ '<th><div><span>%s</span></div></th>' % m for m in self.mipsp] 
    7674    oo.write( string.join(['',] + mhdr, ' & ' ) + '\\\\ \n\\hline\n' ) 
    7775    mmh.append( '<table>\n<tr class="rotate">' + string.join(['<th></th>',] + mhdrh ) + '</tr>\n' ) 
    7876    htmltmpl_head = '<html><body>\n'  
    79     for m in mips + ['TOTAL',]: 
     77 
     78    for m in self.mips + ['TOTAL',]: 
    8079      ll = [m,] 
    8180      llh = [m,] 
    8281      ttl = 0. 
    83       for m2 in mipsp + ['TOTAL',]: 
     82      for m2 in self.mipsp + ['TOTAL',]: 
    8483       if m2 in self.cc[m].dd: 
    8584        oo1 = open( 'html/tt/rq-%s-expt-%s.html' % (m,m2), 'w' ) 
     
    110109        else: 
    111110          try: 
    112             x = self.cc[m].a[m2] 
     111            x = self.cc[m].a[m2]*2. 
    113112            s = vfmt( x ) 
    114             ##if x < 1.e12: 
    115               ##s = '%sG' % int( x*1.e-9 )  
    116             ##elif x < 1.e13: 
    117               ##s = '%3.1fT' % ( x*1.e-12 ) 
    118             ##elif x < 1.e15: 
    119               ##s = '%3iT' % int( x*1.e-12 ) 
    120             ##else: 
    121               ##s = '{:,.2f}'.format( self.cc[m].a[m2]*1.e-9 )  
    122113            if m2 == 'TOTAL': 
    123114              s1 = '<b>%s</b>' % s 
    124115              s = '{\\bf %s}' % s 
    125116            ll.append( s ) 
    126             fn = '%s-%s_%s_%s.xlsx' % (m,m2,tiermax, pmax) 
     117            fn = '%s-%s_%s_%s.xlsx' % (m,m2,self.tiermax, self.pmax) 
    127118            kc = '_%s_%s' % (m,m2) 
    128119            sm = string.join( ['%s: %s' % (k,vfmt(self.cc[kc].a[k])) for k in sorted( self.cc[kc].a.keys() ) ], '; ' ) 
     
    137128          ll.append( '' ) 
    138129          llh.append( '' ) 
     130      print ll 
    139131      oo.write( string.join(ll, ' & ' ) + '\\\\ \n\\hline\n' ) 
    140132      mmh.append( '<tr>' + string.join(['<td>%s</td>' % x for x in llh] ) + '</tr>\n' ) 
    141133    mmh.append( '</table>' ) 
    142     ttl = 'Data volume overview, upto tier %s and priority %s -- provisional' % (tiermax, pmax)  
     134    ttl = 'Data volume overview, upto tier %s and priority %s -- provisional' % (self.tiermax, self.pmax)  
    143135    bdy = '''<h1>%s</h1> 
    144136<p>Data volumes are estimated for nominal model with 1 degree resolution and 40 levels in the atmosphere and 0.5 degrees with 60 levels in the ocean.  The "Requesting MIP" (rows) is the MIP specifying the data required to meet their scientific objectives. The "designing MIP" (columns) is the MIP specifying the experimental design. <b>The figures below represent work in progress: there are still omissions and flaws, more details are on the  
     
    146138''' % ttl 
    147139    bdy += string.join( mmh, '\n' ) 
    148     ooh = open( 'tab01_%s_%s.html' % (tiermax,pmax), 'w' ) 
     140    ooh = open( 'tab01_%s_%s.html' % (self.tiermax,self.pmax), 'w' ) 
    149141    ooh.write( self.dq.pageTmpl % (ttl, jsh, './', './index.html', bdy ) ) 
    150142    ooh.close() 
    151143    oo.close() 
    152144 
     145  def doTable(self,m,l1,m2,collector): 
     146         
     147        x = sc.volByExpt( l1, m2, expFullEx=True,pmax=self.pmax ) 
     148        collector[m].a[m2] += x[0] 
     149# 
     150# create sum for each table 
     151# 
     152        for k in x[2].keys(): 
     153          i = self.dq.inx.uid[k] 
     154          xxx =  x[2][k] 
     155          if xxx > 0: 
     156            collector['_%s_%s' % (m,m2)].a[i.mipTable] += xxx 
     157        if m == 'FAFMIP' and m2 == 'DECK': 
     158          print 'FAFMIP [1]:: ',x[1].keys() 
     159          print 'FAFMIP [2]:: ',collector['_FAFMIP_DECK'].a.keys() 
     160 
     161        collector[m].a['TOTAL'] += x[0] 
     162        dd = collections.defaultdict( list ) 
     163        lll = set() 
     164        for v in x[2].keys(): 
     165          vi = sc.dq.inx.uid[v] 
     166          if vi._h.label != 'remarks': 
     167            f,t,l,tt,d,u = (vi.frequency,vi.mipTable,vi.label,vi.title,vi.description,vi.uid) 
     168            lll.add(u) 
     169            dd[t].append( (f,t,l,tt,d,u) ) 
     170        if len( dd.keys() ) > 0: 
     171          collector[m].dd[m2] = dd 
     172          makeTables.makeTab( subset=lll, dest='tab2/%s-%s_%s_%s.xlsx' % (m,m2,self.tiermax,self.pmax) ) 
     173          
     174 
    153175if __name__ == "__main__": 
    154176  sc = scope.dreqQuery() 
    155   r = r1( sc, tiermax=1, pmax=1 ) 
     177  #r = r1( sc, tiermax=1, pmax=1 ) 
    156178  r = r1( sc, tiermax=3, pmax=3 ) 
Note: See TracChangeset for help on using the changeset viewer.