Changeset 3482 for nappy/trunk


Ignore:
Timestamp:
20/02/08 17:18:00 (12 years ago)
Author:
astephen
Message:

Fixed and broken - got 2110 and 2310 writing from NetCDF. But the solution breaks the basic readNA/writeNA cycle. The reason is that the new code writes the data from NX, DX and X rather than A and NAUXV. Maybe the data really needs to be encoded to NAUXV and A in order for this to work unformly. Hmmmm.

Location:
nappy/trunk/nappy
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • nappy/trunk/nappy/cdms_utils/axis_utils.py

    r3442 r3482  
    2020import cdms 
    2121 
    22 def areAxesIdentical(ax1, ax2, is_subset=False): 
     22def areAxesIdentical(ax1, ax2, is_subset=False, check_id=True): 
    2323    """ 
    2424    Takes 2 CDMS axis objects returning True if they are essentially 
     
    2626    If is_subset == True then return True if ax1 is same as ax2 except that it is 
    2727    only defined on a subset of regularly spaced values within ax2. 
     28    If is_subset is used then return value is False or (len(ax2)/len(ax1)). 
     29    If check_id == False then don't compare the ids of the axes. 
    2830    """ 
    2931    for axtype in ("time", "level", "latitude", "longitude"): 
     
    3234 
    3335    # Check ids 
    34     if ax1.id != ax2.id: return False 
     36    if check_id: 
     37        if ax1.id != ax2.id: return False 
     38 
    3539    # Check units 
    3640    if ax1.units != ax2.units: return False 
     
    4448        len1 = len(ax1) 
    4549        len2 = len(ax2) 
     50 
    4651        # Check length of 1 divides into length of 2 
    4752        if len2 % len1 != 0: 
     
    5560            if ax2_value != test_value: 
    5661                return False 
     62         
     63        # If we got here then return len2/len1 
     64        return n 
    5765 
    5866    # OK, I think they are the same axis! 
    5967    return True 
     68 
    6069 
    6170def isAxisRegularlySpacedSubsetOf(ax1, ax2): 
     
    6473    subset of regularly spaced values within ax2. Otherwise returns False. 
    6574    """ 
    66     return areAxesIdentical(ax1, ax2, is_subset=True) 
     75    return areAxesIdentical(ax1, ax2, is_subset=True, check_id=False) 
     76 
     77 
     78def isUniformlySpaced(ax): 
     79    "Returns True is axis values are uniformaly spaced else returns False." 
     80    if len(ax) == 1: return False 
     81    incr = ax[1] - ax[0] 
     82 
     83    for i in range(1, len(ax)): 
     84        i1 = ax[i - 1] 
     85        i2 = ax[i]  
     86        if (i2 - i1) != incr: 
     87            return False 
     88 
     89    return True 
     90 
  • nappy/trunk/nappy/cdms_utils/var_utils.py

    r3441 r3482  
    8181            miss = var.getMissing() 
    8282        except: 
    83             miss = 1.E20 
     83            miss = -1.e20 
    8484 
    8585    return miss 
  • nappy/trunk/nappy/na_file/na_file_2110.py

    r3477 r3482  
    120120            var_string = var_string + (self.format % self.NX[m]) 
    121121 
    122             for a in range(self.NAUXV - 1): 
     122            # Loop through aux vars minus 1 because NX is used as first aux var 
     123            for a in range(self.NAUXV - 1):  
    123124                var_string = var_string + (self.format % self.A[a][m]) 
    124125            self.file.write("%s\n" % var_string.rstrip(" ,")) 
  • nappy/trunk/nappy/na_file/na_file_2310.py

    r3461 r3482  
    9999            var_string = self.format % self.X[m][0] 
    100100 
    101             for a in range(self.NAUXV): 
     101            var_string = var_string + (self.format % self.NX[m]) + (self.format % self.X[m][0]) + \ 
     102                                      (self.format % self.DX[m]) 
     103 
     104            # Loop through NAUXV minus 3 because NX, X[0], DX are first 3 aux vars 
     105            for a in range(self.NAUXV - 3): 
    102106                var_string = var_string + (self.format % self.A[a][m]) 
     107 
    103108            self.file.write("%s\n" % var_string.rstrip(" ,")) 
    104109 
  • nappy/trunk/nappy/nc_interface/na_content_collector.py

    r3474 r3482  
    149149        self.na_dict["NIV"] = number_of_dims 
    150150 
     151 
     152        # If 2D then do a quick test to see if 2310 is feasible (i.e. uniformly spaced 2nd axis) 
     153        if number_of_dims == 2: 
     154            ffis_limited = [2010, 2110] 
     155            axis = best_var.getAxis(1) 
     156            if nappy.cdms_utils.axis_utils.isUniformlySpaced(axis): 
     157                ffis_limited.append(2310) 
     158 
    151159        # Get the axes for the main variable being used 
    152160        best_var_axes = best_var.getAxisList() 
     
    278286            ffi = 10 + (number_of_dims * 1000) 
    279287        elif number_of_dims == 2: 
    280             if self.requested_ffi == 2310: 
    281                 raise Exception("FFI '" + str(self.requested_ffi) + "' conversion not yet supported.") 
    282             elif self.requested_ffi in (2010, 2110): 
     288            if self.requested_ffi in (2010, 2110, 2310): 
    283289                ffi = self.requested_ffi  
    284290            else: 
     
    374380                    self.na_dict["ASCAL"] = [1.0] 
    375381 
     382                # If FFI is 2310 then need to modify na_dict items for that 
     383                elif self.na_dict["FFI"] == 2310: 
     384                    new_x = [] 
     385                    new_nx = [] 
     386                    new_dx = [] 
     387                    ax2_values = var.getAxis(1)[:].tolist() 
     388                    incr = ax2_values[1] - ax2_values[0] 
     389 
     390                    for i in self.ax0[:]: 
     391                        new_x.append([i, ax2_values]) 
     392                        new_nx.append(len(ax2_values)) 
     393                        new_dx.append(incr) 
     394 
     395                    # Re-assign to new lists 
     396                    self.na_dict["NX"] = new_nx 
     397                    self.na_dict["X"] = new_x 
     398                    self.na_dict["DX"] = new_dx 
     399 
     400                    # Now auxiliary variable info here with independent var info 
     401                    ind_var_name = self.na_dict["XNAME"][0] 
     402                    self.na_dict["ANAME"] = ["Number of '%s' values recorded in subsequent data records" % ind_var_name, 
     403                                             "'%s' value for first data point" % ind_var_name, 
     404                                             "'%s' increment" % ind_var_name] 
     405                    self.na_dict["AMISS"] = [-9999.999, -9999.999, -9999.999] 
     406                    self.na_dict["ASCAL"] = [1.0, 1.0, 1.0] 
     407  
    376408 
    377409    def _defineNAAuxVars(self, aux_vars): 
Note: See TracChangeset for help on using the changeset viewer.