[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: OPLOT fails intermittently, any ideas?
I think IDL 5.2 plots everything in single precision - no matter what you actually arrays
are typed as. So you may be getting no valid numbers, or distinct ones, if all the digits
that matter (beyond the 6 or so available for single precision) are being truncated and
tossed. This has been talked about previously on this ng with respect to the same thing:
epoch, long digits times/dates etc.
A solution may be to test the single precision unique values of (epoch-base_epoch) before
to see if this really is what is causing it. Or, you could subtract and scale the x-axis
values so that single precision can handle any value (then just modify your axis label
with "Time (x1.0e+08)" or something like that).
Lawrence Bleau wrote:
> Hello, IDLers, I have a tricky problem here. First, my config: I'm on OpenVMS
> 7.1-2, running IDL 5.2. I'm using PLOT and OPLOT to generate a graph for
> display on a web page. Most of the time this works well. Once in a while,
> though, with no change in the IDL code, I get the error message
> % OPLOT: No valid points, must have at least 2 distinct points
> % Execution halted at: $MAIN$ 253
> Line 253 is the oplot command. Here it is:
> oplot, epoch-base_epoch, values(*,k), $
> max_value = 9999998., $
> psym = 8, $ ; plots a circle (user defined)
> symsize = .4, $ ; scale factor for plot symbol
> thick = plot_thickness(k), $
> color = 13 ; change this for colored data line
> A word here about the odd construct. The X array is a double precision vector
> (epoch) containing times minus a scalar (base_epoch), which is slightly less
> than the first (lowest) value of epoch, which is monotonically increasing.
> Since plot and oplot convert from double to single internally, when labelling
> the time axis this causes incorret labels to be used. By passing the
> difference this puts the values to be plotted in a range in which roundoff is
> not a problem. The X range that was set on the previous plot command has been
> adjusted similarly.
> Here's a diagnostic output; the first column is the date in Gregorian format,
> the second in Epoch format, and the third in Epoch format minus the base_epoch
> value. The two lines are the low and high end used for the x-axis range; the
> third colum is what I passed to the previous call to plot for the x_range
> range used on X-axis is:
> 2001/07/16 11:00:00 3.6412920e+08 0.00000000
> 2001/07/16 15:00:00 3.6414360e+08 14400.000
> I checked the arrays being passed to oplot; both are vectors of length 410.
> I also dumped a couple points in the x-axis vector (epoch) to make sure they
> are different; they are. The y-axis values look fine, too. Here's the output
> of the following commands:
> <Expression> DOUBLE = Array
> <Expression> FLOAT = Array
> 2001/07/16 11:00:46
> 2001/07/16 15:03:01
> 2001/07/16 11:00:00
> I'm puzzled by the error message that oplot gave me (No valid points, must have
> at least 2 distinct points). The obvious reason - one of the vectors has only
> one point - is false, as seen above.
> The second reason I thought might be the case is that the range given to the
> plot command, and therefore in use for the call to oplot, did not contain the
> values passsed to oplot for the x-axis. This, too, is shown to be false.
> I'm out of ideas. What's worse, this problem is not consistent. It appears
> every few days, once that day, then goes away. This IDL code is called from a
> procedure that runs hourly and works on slightly different data each time. So
> it would appear to be data dependent. I managed to save a copy of the data set
> that caused it to fail today, and can reproduce the failed behavior, so I have
> a chance at diagnosing this. I just need some hints at where to look next.
> Lawrence Bleau
> University of Maryland
> Physics Dept., Space Physics Group
Paul van Delst A little learning is a dangerous thing;
CIMSS @ NOAA/NCEP Drink deep, or taste not the Pierian spring;
Ph: (301)763-8000 x7274 There shallow draughts intoxicate the brain,
Fax:(301)763-8545 And drinking largely sobers us again.