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