Changeset 209


Ignore:
Timestamp:
06/09/14 08:47:15 (5 years ago)
Author:
mjuckes
Message:

tidied up ncq3 and associated unit test; added force-<nclib> options; debugged Scientific and python netCDF4 support

Location:
CCCC/trunk/ceda_cc
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • CCCC/trunk/ceda_cc/c4.py

    r208 r209  
    9999  def checktids(self): 
    100100## sort by tracking id 
     101    if len( self.tidtupl ) == 1: 
     102      return 
    101103    self.tidtupl.sort( cmp=tupsort(k=1).cmp ) 
    102104    nd = 0 
     
    255257      return 
    256258 
     259    self.forceNetcdfLib = None 
    257260    fltype = None 
    258261    argu = [] 
     
    270273        elif x in ['single','s']: 
    271274           forceLogOrg = 'single' 
     275      elif next == '--force-ncq': 
     276        self.forceNetcdfLib = 'ncq3' 
     277      elif next == '--force-cdms2': 
     278        self.forceNetcdfLib = 'cdms2' 
     279      elif next == '--force-pync4': 
     280        self.forceNetcdfLib = 'netCDF4' 
     281      elif next == '--force-scientific': 
     282        self.forceNetcdfLib = 'Scientific' 
    272283      elif next == '--flfmode': 
    273284        lfmk = args.pop(0) 
     
    454465       raise baseException( 'Cannot proceed with non-dummy [%s] project without a netcdf API' % (c4i.project) ) 
    455466    pcfg = config.projectConfig( c4i.project ) 
    456     ncReader = fileMetadata(dummy=isDummy, attributeMappingsLog=c4i.attributeMappingsLog) 
     467    ncReader = fileMetadata(dummy=isDummy, attributeMappingsLog=c4i.attributeMappingsLog,forceLib=c4i.forceNetcdfLib) 
    457468    self.cc = checker(pcfg, c4i.project, ncReader,abortMessageCount=abortMessageCount) 
    458469    rec = recorder( c4i.project, c4i.recordFile, dummy=isDummy ) 
  • CCCC/trunk/ceda_cc/file_utils.py

    r207 r209  
    3434         Execution may fail, depending on options chosen. 
    3535         """ % str(supportedNetcdf) 
    36   import ncq3 
    3736  ncLib = 'ncq3' 
    3837 
     
    4948class fileMetadata(object): 
    5049 
    51   def __init__(self,dummy=False,attributeMappingsLog=None): 
     50  def __init__(self,dummy=False,attributeMappingsLog=None,forceLib=None): 
    5251      
    5352     self.dummy = dummy 
    5453     self.atMapLog = attributeMappingsLog 
     54     self.forceLib = forceLib 
    5555     if self.atMapLog == None: 
    5656       self.atMapLog = open( 'cccc_atMapLog.txt', 'a' ) 
     
    6969      self.makeDummyFileImage() 
    7070      return 
    71     if ncLib == 'cdms2': 
     71    if self.forceLib == 'ncq3': 
     72      import ncq3 
     73      self.ncq3 = ncq3 
     74      self.loadNc__ncq(fpath) 
     75    elif self.forceLib == 'cdms2': 
     76      import cdms2 
     77      self.cdms2 = cdms2 
     78      self.loadNc__Cdms(fpath) 
     79    elif self.forceLib == 'netCDF4': 
     80      import netCDF4 
     81      self.netCDF4 = netCDF4 
     82      self.loadNc__Netcdf4(fpath) 
     83    elif self.forceLib == 'Scientific': 
     84      import Scientific 
     85      from Scientific.IO import NetCDF as ncdf 
     86      self.ncdf = ncdf 
     87      self.loadNc__Scientific(fpath) 
     88    elif ncLib == 'cdms2': 
     89      self.cdms2 = cdms2 
    7290      self.loadNc__Cdms(fpath) 
    7391    elif ncLib == 'netCDF4': 
     92      self.netCDF4 = netCDF4 
    7493      self.loadNc__Netcdf4(fpath) 
    7594    elif ncLib == 'Scientific': 
     95      self.ncdf = ncdf 
    7696      self.loadNc__Scientific(fpath) 
    7797    else: 
     
    80100 
    81101  def loadNc__ncq(self,fpath): 
    82     self.nc0 = ncq3.open( fpath ) 
     102    self.nc0 = self.ncq3.open( fpath ) 
    83103    self.nc0.getDigest() 
    84     self.nc0.info() 
    85     self.nc = ncq3.Browse( self.nc0.digest ) 
     104    self.ncq3.close( self.nc0 ) 
     105    self.nc = self.ncq3.Browse( self.nc0.digest ) 
    86106    for a in self.nc._gal: 
    87107       self.ga[a.name] = a.value 
     
    107127     
    108128  def loadNc__Cdms(self,fpath): 
    109     self.nc = cdms2.open( fpath ) 
     129    self.nc = self.cdms2.open( fpath ) 
    110130    for k in self.nc.attributes.keys(): 
    111131      self.ga[k] = self.nc.attributes[k] 
     
    146166### 
    147167  def loadNc__Scientific(self,fpath): 
    148     self.nc = ncdf.NetCDFFile( fpath, 'r' ) 
     168    self.nc = self.ncdf.NetCDFFile( fpath, 'r' ) 
    149169    for k in self.nc.__dict__.keys(): 
    150170      self.ga[k] = self.nc.__dict__[k] 
    151       ##if len( self.ga[k] ) == 1: 
    152         ##self.ga[k] = self.ga[k][0] 
     171      if type(self.ga[k]) not in [type('x'),type(1),type(1.)] and len(self.ga[k]) == 1: 
     172        self.ga[k] = self.ga[k][0] 
    153173    for v in self.nc.variables.keys(): 
    154174      if v not in self.nc.dimensions.keys(): 
     
    177197 
    178198  def loadNc__Netcdf4(self,fpath): 
    179     self.nc = netCDF4.Dataset(fpath, 'r') 
     199    self.nc = self.netCDF4.Dataset(fpath, 'r') 
    180200    for k in self.nc.ncattrs(): 
    181201      self.ga[k] = self.nc.getncattr(k) 
    182       if len( self.ga[k] ) == 1: 
    183         self.ga[k] = self.ga[k][0] 
     202      if type( self.ga[k] ) in [ type([]),type(()) ]: 
     203        if len( self.ga[k] ) == 1: 
     204          self.ga[k] = self.ga[k][0] 
    184205    for v in self.nc.variables.keys(): 
    185206      if v not in self.nc.dimensions.keys(): 
  • CCCC/trunk/ceda_cc/ncq3.py

    r208 r209  
    271271        err = libnetcdf.nc_get_att(self.id, vid, c_char_p(name), byref(data)) 
    272272        if err != 0: raise NCError( 'Error reading attribute value %s, type:%s' % (name,type) ) 
    273         if type == 5: 
    274           dv = c_float( data.value ).value 
    275         else: 
    276           dv = data.value 
     273        dv = data.value 
    277274        return Attribute( name, 0, vid, aid, t2, len, dv ) 
    278275 
  • CCCC/trunk/ceda_cc/unitTestsS2.py

    r180 r209  
    1  
    2 import logging, time 
     1import logging, time, os 
    32import utils_c4 
    43import config_c4 as config 
    54from c4 import fileMetadata, dummy, main 
    65from xceptions import * 
     6 
     7from file_utils import installedSupportedNetcdf 
    78 
    89#### set up log file #### 
     
    4142  print 'Failed [%s] %s: valid file name' % (module,fn) 
    4243 
    43  
    4444testId = '#11.001' 
    4545try: 
     
    6262except: 
    6363  print 'OK [%s]: attempt to trigger exception successful' % testId 
     64 
     65 
     66extras = [ 
     67( '/data/work/cmip5/output1/pr_20110323/pr_3hr_HadGEM2-ES_historical_r2i1p1_196001010130-196412302230.nc', 'CMIP5', 0 ) ] 
     68 
     69 
     70kt = 0 
     71for e in extras: 
     72  kt += 1 
     73  if os.path.isfile( e[0] ): 
     74    if 'cdms2' in installedSupportedNetcdf: 
     75      testId = '#20.%3.3i' % kt 
     76      m = main( args=['-p', e[1], '-f', e[0], '--force-cdms2','--ld', 'ld_test1' ], abortMessageCount=10 ) 
     77      if m.ok: 
     78         print 'OK [%s]: successfully checked test file with cdms2' % testId 
     79      else: 
     80         print 'Failed [%s]: incorrect test results' % testId 
     81 
     82    testId = '#21.%3.3i' % kt 
     83    m = main( args=['-p', e[1], '-f', e[0], '--force-ncq','--ld', 'ld_test2' ], abortMessageCount=10 ) 
     84    if m.ok: 
     85       print 'OK [%s]: successfully checked test file with ncq3' % testId 
     86    else: 
     87       print 'Failed [%s]: incorrect test results' % testId 
     88 
     89    if 'netCDF4' in installedSupportedNetcdf: 
     90      testId = '#22.%3.3i' % kt 
     91      m = main( args=['-p', e[1], '-f', e[0], '--force-pync4','--ld', 'ld_test3' ], abortMessageCount=10 ) 
     92      if m.ok: 
     93         print 'OK [%s]: successfully checked test file with python NetCDF4' % testId 
     94      else: 
     95         print 'Failed [%s]: incorrect test results' % testId 
     96 
     97    if 'Scientific' in installedSupportedNetcdf: 
     98      testId = '#23.%3.3i' % kt 
     99      m = main( args=['-p', e[1], '-f', e[0], '--force-scientific','--ld', 'ld_test4' ], abortMessageCount=10 ) 
     100      if m.ok: 
     101         print 'OK [%s]: successfully checked test file with python Scientific' % testId 
     102      else: 
     103         print 'Failed [%s]: incorrect test results' % testId 
     104       
     105     
  • CCCC/trunk/ceda_cc/utils_c4.py

    r208 r209  
    386386           ## print varAts[varName]['missing_value'], type(varAts[varName]['missing_value']) 
    387387           ## print self.missingValue, type(self.missingValue) 
     388### need to use ctypes here when using ncq3 to read files -- appears OK for other libraries. 
    388389           ok &= self.test( ctypes.c_float(varAts[varName]['missing_value']).value == ctypes.c_float(self.missingValue).value, msg, part=True ) 
    389390        if varAts[varName].has_key( '_FillValue' ): 
Note: See TracChangeset for help on using the changeset viewer.