[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Problems reading NetCDF data - get NaNs
- Subject: Re: Problems reading NetCDF data - get NaNs
- Date: Thu, 19 Oct 2006 15:45:45 +0100
Hi Don,
Thanks for your quick reply. I switched to 2.2.17 and the problem is
still there. The values of temperature from ncdump include (file is
large!):
32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, -20974,
-20974, -20979, -20985, 32767, 32767, 32767, 32767, -21054, -21072,
-21083, -21093, -21101, -21108, -21112, -21115, 32767, 32767, 32767,
32767 represents missing data (metadata has :_FillValue = 32767;) and,
for example, -21072 represents (-21072 * 0.001 + 20=) -1.072 degrees
C, which is within the valid range.
According to the file metadata, the convention is COARDS. Also, as I
said in my original post, ncBrowse displays the data without any
problems.
Thanks again,
Jon
On 19/10/06, Don Murray <address@hidden> wrote:
Hi Jon-
I suspect the problem is with the valid_max and valid_min
attributes. The library will return NaN if the
values are outside the range of the min/max. If the
type of the attribute is the same as the variable, they
are compared before scale and offset. If they are different
they are compared after scaling and offset. I recently
found a bug with this that was fixed in the 2.2.17 pre-release,
but I'm not sure if that is why you are seeing what you
are seeing.
What are the values for temperature in ncdump?
Don
*************************************************************
Don Murray UCAR Unidata Program
address@hidden P.O. Box 3000
(303) 497-8628 Boulder, CO 80307
http://www.unidata.ucar.edu/staff/donm
*************************************************************
Jon Blower wrote:
> Dear all,
>
> I'm having some problems reading data from a particular NetCDF file.
> The code i'm using is:
>
> NetcdfDataset nc =
> NetcdfDataset.openDataset("C:\\data\\OA_20060830.nc", true, null);
> GridDataset gd = new GridDataset(nc);
> GeoGrid gg = gd.findGridByName("temperature");
> Array arr = gg.readYXData(0, 0);
> IndexIterator it = arr.getIndexIteratorFast();
> while (it.hasNext()) {
> double val = it.getDoubleNext();
> System.out.println("" + val);
> }
> nc.close();
>
> I just get a load of NaNs, even though I know that there are valid
> data in the file (ncBrowse displays the data perfectly). The only
> unusual thing about the data is that the data are stored as short
> integers, with an offset and scale factor:
>
> short temperature(time, depth, latitude, longitude);
> :long_name = "Temperature";
> :missing_value = 32767; // short
> :_FillValue = 32767; // short
> :units = "degree_Celsius";
> :valid_min = -3; // short
> :valid_max = 40; // short
> :add_offset = 20.0; // double
> :scale_factor = 0.0010; // double
> :comment = "Temperature estimate (by objective analysis)";
>
> I understood that the NetcdfDataset class automatically dealt with
> offsets and scale factors in "enhanced" mode, which is what I am
> using (or trying to use). Hence I was expecting to "see" the data as
> an array of doubles. The same happens if I use getFloatNext() or
> getShortNext().
>
> Can anyone see what I'm doing wrong?
--
--------------------------------------------------------------
Dr Jon Blower Tel: +44 118 378 5213 (direct line)
Technical Director Tel: +44 118 378 8741 (ESSC)
Reading e-Science Centre Fax: +44 118 378 6413
ESSC Email: address@hidden
University of Reading
3 Earley Gate
Reading RG6 6AL, UK
--------------------------------------------------------------
===============================================================================
To unsubscribe netcdf-java, visit:
http://www.unidata.ucar.edu/mailing-list-delete-form.html
===============================================================================