View Raw SPL
/*****************************************************************************
* *
* IDXTOX.SPL Copyright (C) 2003 DSP Development Corporation *
* All Rights Reserved *
* *
* Author: Randy Race *
* *
* Synopsis: Converts an index to an x value *
* *
* Revisions: 30 Jan 2003 RRR Creation *
* *
*****************************************************************************/
#include
#if @HELP_IDXTOX
IDXTOX
Purpose: Converts index values of a series to X values.
Syntax: IDXTOX(series, idx)
series - input series
idx - An integer or series of integers. The indices
ranging from 1 to length(s)
Returns: A real or series.
Example:
W1: 1..0.1..10
W2: idxtox(w1, 1..5)
W2 contains the series {1, 1.1, 1.2, 1.3, 1.4}, the first 5
X values of W1.
Remarks:
For XY or XYZ series, the actual X values are looked up.
For interval series, the X values are computed as follows:
x = (idx - start) * deltax(s) + xoffset(s)
where start is the value of SPL_START_INDEX.
See Also:
Idx
Xtoidx
Xvals
#endif
/* convert index to x value */
idxtox(s, idx)
{
local x, ptype, isnum;
if (argc < 2)
{
error("idxtox - input series and index value required");
}
/* check if scalar */
isnum = isscalar(idx);
if (isxy(s) || isxyz(s))
{
/* lookup actual x values */
x = idxtox_lookup(s, idx);
}
else if (numcols(s) > 1)
{
ptype = getplottype(s);
if (itemtype(s) == 2 && ptype >= 1 && ptype <= 5)
{
/* waterfall, contour, density, Z surface, image */
x = idxtox_interval(s, idx);
}
else
{
/* multi-column series */
x = idxtox_interval_iterate(s, idx);
}
}
else
{
/* interval series */
x = idxtox_interval(s, idx);
}
/* convert back to scalar if necessary */
if (isnum)
{
x = castreal(x);
}
return(x);
}
/* xy or xyz lookup */
ITERATE idxtox_lookup(s, idx)
{
local x;
/* lookup actual x values */
x = xvals(s);
x = x[idx];
return(x);
}
/* 2D interval */
idxtox_interval(s, idx)
{
local start, scale, x;
/* starting index */
start = castint(getconf("SPL_START_INDEX"));
scale = gethunitsscale(s);
/* interval series - use faster computation */
x = (idx - start) * (deltax(s) / scale) + xoffset(s);
return(x);
}
/* multi-column interval */
ITERATE idxtox_interval_iterate(s, idx)
{
local x;
x = idxtox_interval(s, idx);
return(x);
}