- New syntax for specifying color levels based on variance (automatic open-ended color levels).
- New syntax for specifying color levels based on a histogram calculation.
- New symbols are defined after any 2-D plot: XAXIS_REVERSED,YAXIS_REVERSED.
- New argument to the RETURN= keyword: RETURN=isdepth
- The family of SCAT2GRIDGAUSS* functions make a search of the area surrounding a grid cell for scattered points. The CUTOFF parameter determines the size of this area. Now the weights are calculated so that the points included are in an ellipse, as described in the documentation; previously it was a box. For backwards compatibility, the previous functions are still available, named SCAT2GRIDGAUSS_XY_V0, etc.
- The value of the offset in SET AXIS/STRIDES/OFFSET= is now the value of the offset the delta from the first index value. Previously it indicated the index at which to start.That is, SET AXIS/STRIDE=n/OFFSET=0 means no offset is applied; /OFFSET=1 means start with the coordinate at the second index.
- The Index to the Users Guide has been reformatted to make it easier to read.
- An IF block inside a REPEAT loop caused an error in some instances.
- The correction to grid-cell sizes for the latitude of the cell on theEarth was incorrect when the coordinate location was not centeredwithin the grid cell.
- After a plot using open-ended levels a subsequent plot call with standard levels did not revert to closed-ended levels.
- On multi-year or multi-decade time-axis plots, the dark line every year or 5- or 10-years, sometimes disappeared.
- In the SAMPLEXY function, the code to handle modulo longitudes missed some data.
- For a curvilinear variable a fix has been made to the plot titles.
- A bug in contouring/ color-fill of curvilinear variables which are not defined in terms of latitude and longitude, has been corrected.
- Appending an irregular to a regular time axis gave an obscure message.
- If a single-point axis has bounds defined, then the bounds that were SAVEd was incorrect.
- When saving a reversed axis with /EDGES we got an error.
- SAVE of a string variable defined from grid-changing functions used the wrong data type.
- Variance-based levels (automatic open-ended levels).
The syntax /LEV=(-inf)(lo,hi,del)(inf) lets us specify open-ended levels, where values outside of (lo,hi) are represented by a single color at each end of the color spectrum. Here we introduce a new syntax to let Ferret determine open-ended levels automatically. Ferret finds the mean and standard deviation of the data to be color-filled. Within the mean plus-or-minus 1 std, fine levels are chosen, and between 1 std and 2 std on each end, coarser levels are used. An open-ended level is used to represent values outside 2 std.
yes? SHADE/lev=50v ! var-based levels using approx 50 levels
yes? SHADE/lev=50vc ! var-based levels, use 0 as the "mean"
- Histogram-based levels.
With histogram-based levels, Ferret sorts the observations and computes the color levels so that each color band containes approximately equal numbers of data points. This form of color management best brings out the fine structure in the data.
yes? FILL/lev=50h ! histogram-based levels using approx 50 levels
- Two new symbols are defined for 2D plot; XAXIS_REVERSED, YAXIS_REVERSED. These are among the symbols that are automatically defined by Ferret when any plot is drawn.They take the values 0 or 1, so that for instance, a depth axis which is reversed with 0 at the top and the deepest depth at the bottom results in YAXIS_REVERSED=1.
yes? FILL/y=0 TEMP
yes? SHOW SYMBOL *AXIS_REVERSED
XAXIS_REVERSED = "0"
YAXIS_REVERSED = "1"
- New argument to the RETURN= keyword. RETURN=isdepth takes the value 1 if the variable has a depth axis, 0 if its Z axis is positive upwards, and returns NORMAL if there is no depth axis.
yes? DEFINE AXIS/UNITS=meters/Z=0:100:2 zup
yes? LET zz = z[gz=zup]
yes? SAY `zz,RETURN=isdepth`
!-> MESSAGE/CONTINUE 0
yes? DEFINE AXIS/UNITS=meters/Z=0:200:2/DEPTH zdn
yes? LET zz = Z[GZ=zdn]
yes? SAY `zz,RETURN=isdepth`
!-> MESSAGE/CONTINUE 1
yes? USE coads_climatology
yes? SAY `sst,RETURN=isdepth`
!-> MESSAGE/CONTINUE NORMAL
- An IF block inside a REPEAT loop caused an error. (see the report in the Ferret Users List).This has been fixed.
- The correction to grid-cell sizes for thelatitude of the cell on the Earth was incorrect when the coordinate location was not centeredwithin the grid cell. (See the discussion in this thread on theFerret Users List).This has been corrected.
- After a plot using open-ended levels, e.g. SHADE/LEV=(-inf)(2,24,2)(inf) var, a subsequent plot call with standard levels did not revert to closed-ended levels. This is fixed.
- On multi-year or multi-decade time-axis plots, the dark line every year or 5- or 10-years, sometimes disappeared. This was due to pixel aliasing. The method for drawing the lines has been changed to fix this.
- In the SAMPLEXY function, the code to handle modulo longitudescorrectly deals with points outside the x range of the data, forinstance if the grid uses 0:359, it translates a scattered location atx= -10 degrees to 350. However it did not match points in the lowerhalf of the first grid cell and the upper half of the last grid cell.This is fixed.
- For a curvilinear variable defined withcoordinate variables that come from different datasets, the title onthe plots was the variable definition not its title. This is fixed.
- A bug in 2-D plots of curvilinear variables where the coordinate variables do not have units of latitude and longitude, has been corrected.For instance in this plot, some contour lines went zig-zagging across the entire plot. Now this is fixed.
yes? LET xb=x[x=0:290:10]
yes? LET yb=y[y=0:290:10]
yes? LET xb2 = xb + 0*yb
yes? LET zb=I[x=0:290:10]*J[y=0:290:10]
yes? CONTOUR xb2+zb,xb2,zb
- If a regular time axis is written to a file, and then times are appendedsuch that the new times are irregularly spaced, we got an error message,
** netCDF error: Variable not found.
This is because when an irregularly-spaced coordinate axis is written to a netCDF file, the behavior is that a bounds attribute iswritten for the irregular axis, but from the previous write operation the bounds variable is not in theexisting file. The message above comes from the OPeNDAP library which is looking for the bounds variable. The messages have been changed to clarify this:
** netCDF error: Variable not found
T_AXIS_bnds not found. Attempt to append irregular coordinates to NetCDF axis which has no bounds attribute.
Write data originally with the /BOUNDS qualifier.
- If a single-point axis has bounds defined, then on aSAVE/BOUNDS, Ferret did not save the correct bounds (but instead savedcoordinate+/- 0.5). Now the correct bounds are written.
- When saving a reversed axis with /EDGES we got an error:
*** NOTE: Edges "" do not enclose point on axis ZAXLEVITR
*** NOTE: Substituting coordinate midpoints
We now get the correct edges, and no warning messages.
- SAVE of a string variable defined from some grid-changing functions was written as a float. This is fixed.