Revision: 4786
          http://matplotlib.svn.sourceforge.net/matplotlib/?rev=4786&view=rev
Author:   jswhit
Date:     2007-12-21 10:53:29 -0800 (Fri, 21 Dec 2007)

Log Message:
-----------
return masked array if data equals default netcdf _FillValue for that 
data type.

Modified Paths:
--------------
    trunk/toolkits/basemap/lib/matplotlib/toolkits/basemap/pupynere.py

Modified: trunk/toolkits/basemap/lib/matplotlib/toolkits/basemap/pupynere.py
===================================================================
--- trunk/toolkits/basemap/lib/matplotlib/toolkits/basemap/pupynere.py  
2007-12-21 16:22:42 UTC (rev 4785)
+++ trunk/toolkits/basemap/lib/matplotlib/toolkits/basemap/pupynere.py  
2007-12-21 18:53:29 UTC (rev 4786)
@@ -31,7 +31,8 @@
 import itertools
 import mmap
 
-from numpy import ndarray, empty, array, ma, squeeze
+from numpy import ndarray, empty, array, ma, squeeze, zeros 
+import numpy
 
 from dap.client import open as open_remote
 from dap.dtypes import ArrayType, GridType, typemap
@@ -55,6 +56,19 @@
 NC_ATTRIBUTE = '\x00\x00\x00\x0c'
 
 _typecodes = dict([[_v,_k] for _k,_v in typemap.items()])
+# default _FillValue for netcdf types (apply also to corresponding
+# DAP types).
+_default_fillvals = {'c':'\0',
+                     'S':"",
+                     'b':-127,
+                     'B':-127,
+                     'h':-32767,
+                     'H':65535,
+                     'i':-2147483647L,
+                     'L':4294967295L,
+                     'q':-2147483647L,
+                     'f':9.9692099683868690e+36,
+                     'd':9.9692099683868690e+36}
 
 def NetCDFFile(file, maskandscale=True):
     """NetCDF File reader.  API is the same as Scientific.IO.NetCDF.
@@ -95,12 +109,21 @@
         return f
  
 def _maskandscale(var,datout):
+    totalmask = zeros(datout.shape,numpy.bool)
+    fillval = None
     if hasattr(var, 'missing_value') and (datout == var.missing_value).any():
-        datout = ma.masked_array(datout,mask=datout==var.missing_value,
-                                 fill_value=var.missing_value)
-    elif hasattr(var, '_FillValue') and (datout == var._FillValue).any():
-        datout = ma.masked_array(datout,mask=datout==var._FillValue,
-                                 fill_value=var._FillValue)
+        fillval = var.missing_value
+        totalmask = totalmask + datout==fillval
+    if hasattr(var, '_FillValue') and (datout == var._FillValue).any():
+        if fillval is None:
+            fillval = var._FillValue
+        totalmask = totalmask + datout==var._FillValue
+    elif (datout == _default_fillvals[var.typecode()]).any():
+        if fillval is None:
+            fillval = _default_fillvals[var.typecode()]
+        totalmask = totalmask + datout==_default_fillvals[var.dtype]
+    if fillval is not None:
+        datout = ma.masked_array(datout,mask=totalmask,fill_value=fillval)
     try:
         datout = var.scale_factor*datout + var.add_offset
     except:


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Matplotlib-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/matplotlib-checkins

Reply via email to