Using Internal Wave Values As Means of Indexing
david.crowe
Hello all,
Say I have a wave, 'myWave' which looks like:
[0, 1]
280, 2
280.5, 4
281, 6
281.5, 8
...
900, 2480
901, 2482
902, 2484
Where somewhere in the data my delta changes from 0.5 to 1.
My simple goal is to retrieve the data in the 1-column by specifying that in the 0th column.
e.g. 'print myWave(900)[1]` should spit out 2482 (interpolation is fine)
I have tried `SetScale /I x, 280, 902, "", myWave' to no avail; Igor seems to really prefer its 0-DimSize indexing.
How can I use the internal data as my accessing index?
One way to find the change in step is to calculate a forward derivative and the do a findlevel. The derivative wave on your column zero should 0.5 unit; it jumps to 1.0. Do a find level for 1.0 or perhaps a touch less to handle rounding errors if your data is not completely exact on the 0.5 step and 1.0 step
Andy
April 15, 2019 at 01:18 pm - Permalink
Yes, wave scaling uses a constant delta, so it won't help you.
If your X column could be a separate wave, you can find the point number corresponding to a value using BinarySearch() or BinarySearchInterp(). Something like
Variable yval = ywave[BinarySearchInterp(xwave, xvalue)]
But you need to be careful- the way I've written it, if xvalue is outside the range of values, BinarySearch will return -1, or -2 depending on what direction it is out of range. To make it safe, you need more lines :)
April 15, 2019 at 04:20 pm - Permalink
In reply to Yes, wave scaling uses a… by johnweeks
Perfect! This is just what I needed john. Thanks once again!
April 16, 2019 at 07:38 am - Permalink