matrixOP question

I am trying to sum up beams of a 3D wave between a lower and an upper limit. That is:
duplicate/o/r=[][][lower,upper] w3D, w3D_subset; matrixOP/o w2D=sumbeams(w3D_subset)
I was hoping to be able to do this in one matrixOP operation. Something like:
matrixOP/o w2D=sumbeams(w3D[][][lower,upper])
but this does not work for some reason, although Igor doesn't complain about the syntax. Does anyone know if this can be achieved within a matrixOP one-liner?

In this context I would like to post a feature request. I often display one column of a 2D wave in a graph (e.g. display w2D[][1]) and then change the displayed column with the column keyword of modifyGraph. This is very comfortable since it doesn't change the properties of the trace, such as color or attached cursors, etc.
Now I am dealing with 3D waves and it would be great to be able to change the displayed beam by a beam keyword, such as ModifyGraph beam=(1,2).
awirsing wrote:
matrixOP/o w2D=sumbeams(w3D[][][lower,upper])


The help for MatrixOP has a section on wave ranges. There it mentions that
Quote:
wave3d[][][a,b] matrixExpression is evaluated for all layers between layer a and layer b. The result is a 3D wave.


So what this syntax does, if I understand it correctly, is perform the calculation for each layer separately, and then to stack the layers in the end. I assume that the output of your calculation is a 3D wave, whereas you would expect it to be 2D. Still, the calculation is valid, if meaningless, and so there is little reason for Igor to complain.

I don't see a way to achieve this in a single line offhand. But I'm sure AG will be chipping in with a solution soon.
awirsing wrote:
In this context I would like to post a feature request. I often display one column of a 2D wave in a graph (e.g. display w2D[][1]) and then change the displayed column with the column keyword of modifyGraph. This is very comfortable since it doesn't change the properties of the trace, such as color or attached cursors, etc.
Now I am dealing with 3D waves and it would be great to be able to change the displayed beam by a beam keyword, such as ModifyGraph beam=(1,2).

When we add stuff like that, we have to think somewhat about how often the need will arise... you have proven to be a boundary-pusher!

You can use the less-convenient ReplaceWave command. Here is an example:
Make/N=(10,10,10) junk=gnoise(1)
Display junk[3][4][]
ReplaceWave/Y trace=junk, junk[5][6][]


John Weeks
WaveMetrics, Inc.
support@wavemetrics.com
741 wrote:
So what this syntax does, if I understand it correctly, is perform the calculation for each layer separately, and then to stack the layers in the end. I assume that the output of your calculation is a 3D wave, whereas you would expect it to be 2D. Still, the calculation is valid, if meaningless, and so there is little reason for Igor to complain.


I had the same assumption, but the output is also in this case a 2D wave (simply what you'll get if you omit the whole bracket stack).

johnweeks wrote:
When we add stuff like that, we have to think somewhat about how often the need will arise.


In the past 2D waves were enough to cover my experimental outputs: I measured any kind of spectra (photoelectron, mass, fluorescence, etc.) as a function of one single parameter (photon energy, time delay, pressure, etc.). I think this this approach is very common. In the setup I am using currently the fluorescence of nanoparticles is recorded that are deposited on a surface. In this case the spectra depend of two parameters: x and y position. I have the feeling that this setup is not so boundary-pushing...

Anyway, ReplaceWave does exactly what I need. Thanks John.
awirsing wrote:
I have the feeling that this setup is not so boundary-pushing...

Right- one of the challenges for us to keep up with our customer's changing requirements. So just because you got a somewhat negative response doesn't mean your words are wasted- they will go to help update our notion of what our customers need. It's a sort of moving average of what our customers ask for, where the averaging kernel is somewhat exponential...
Anyway, ReplaceWave does exactly what I need. Thanks John.[/quote]
Glad I could help.

John Weeks
WaveMetrics, Inc.
support@wavemetrics.com
awirsing wrote:
I have the feeling that this setup is not so boundary-pushing...

Right- one of the challenges for us to keep up with our customer's changing requirements. So just because you got a somewhat negative response doesn't mean your words are wasted- they will go to help update our notion of what our customers need. It's a sort of moving average of what our customers ask for, where the averaging kernel is somewhat exponential...
awirsing wrote:
Anyway, ReplaceWave does exactly what I need. Thanks John.

Glad I could help.

John Weeks
WaveMetrics, Inc.
support@wavemetrics.com[/quote]
John Weeks
WaveMetrics, Inc.
support@wavemetrics.com
... and as for the MatrixOP question:

741 is essentially correct: the multi-dimensional syntax applies to layer by layer calculation. The solution for the OP is a 2-step process. For example:

Make/N=(10,20,30) ddd=z
MatrixOP/o subset=ddd[][][5,10]
MatrixOP/O w2d=sumBeams(subset)

I hope this helps,

A.G.
WaveMetrics, Inc.