Hello,
I am trying to aggregate some NetCDF-4 or HDF-5 files and extract a window
from them into a single NetCDF-4 file.
In one of these files I have got a variable for zenithal angles that is
packed into signed ints. I the aggregated file, I want to reduce the
precision of this variable and pack it into signed shorts in the range
0-36000 degrees. But I do not manage...
I have not found any recipe in the docs I have read (I may not have found
the good one !), so if someone can help me, it would save my day !
Concretely, this is how I proceed (this is certainly not the easiest
way...), with NetCDF-java 4-3 (I have not yet planned to update):
I open a NcML file (without enhancement because I have to change only one
variable). This aggregates the whole input files.
*ncml = NetcdfDataset.openDataset(ncmlFile, false, -1, null, null);*
Then, I create a new NetCDF file to host the extracted window, some
modifications on global or variable attributes and so on.
*chunker = new Nc4ChunkingStrategyFromAttribute(deflate, shuffle);ncWriter
= NetcdfFileWriter.createNew(version, outFile, chunker);*
*// do some stuff*
*ncWriter.create();*
Then, I fill the data in this file. For my zenithal angles, I read the data
in the variable from the aggregated file (called var below), extract the
desired window and create an Array object containing the precision-reduced
data that is finally written:
*Array tmp = (ArrayInt.D2)(var.read().section(origin,
shape).copy());varData = Array.factory(DataType.SHORT,
shape);var.setUnsigned(true);Index2D idx = new Index2D(shape);for (i = 0; i
< shape[0]; i++) { for (j = 0; j < shape[1]; j++) { idx.set(i,
j); varData.setShort(idx,
(short)Math.round(tmp.getInt(idx)/100.)); }}*
*ncWriter.write(ncWriter.findVariable(var.getShortName()), varData);*
This is an extract of the NcML file, relative to this variable:
* <variable name="sat_azi_ang" shape="ny nx" type="short">
<attribute name="standard_name" value="platform_azimuth_angle" />
<attribute name="long_name" value="horizontal angle between the line of
sight from the observation point to the platform and a reference direction
at the observation point, which is due north" /> <attribute
name="units" value="degrees" /> <attribute name="scale_factor"
type="double" value="1.0E-2" /> <attribute name="add_offset"
type="double" value="0.0" /> <attribute name="valid_min"
type="short" value="0" /> <attribute name="valid_max" type="short"
value="36000" /> <attribute name="_FillValue" type="short"
value="65535" /> <attribute name="grid_mapping" value="geos" />
<attribute name="_Unsigned" value="true" />*
* </variable>*
As a result, I get a NetCDF file where the data for this variable do not
seem to be unsigned:
* short sat_azi_ang(ny=700, nx=1150); :standard_name =
"platform_azimuth_angle"; :long_name = "horizontal angle between the
line of sight from the observation point to the platform and a reference
direction at the observation point, which is due north"; :units =
"degrees"; :scale_factor = 0.01; // double :add_offset = 0.0; //
double :valid_min = 0S; // short :valid_max = -29536S; // short
:_FillValue = -1S; // short :grid_mapping = "GeosCoordinateSystem";
:_Unsigned = "true"; :_ChunkSize = 700, 1150; // int*