
Problem with SetFormula from a user defined function

Hello,
I'm having problems with the usage of the SetFormula command in combination with a user defined function.
I want a wave to be updated when at least one of the parameters of the user-defined function changes.
My user defined function is:
function /wave updateTransientV2(df, xp, yp, zp, bin) //needs rounded positions string df wave bin variable xp,yp,zp wave srcwv=$(df+"img_chunk") variable xbin = bin[0], ybin = bin[1] //nvar xp = $(df+"xp"); xp = round(xp) //nvar yp = $(df+"yp"); yp = round(yp) variable dim0 = dimsize(srcwv,0), dim1 = dimsize(srcwv,1), dim2=dimsize(srcwv,2) variable xlower = max(0, min(ceil(xp - (xbin / 2)), dim0-1)) variable xupper = max(0, min(ceil(xlower + xbin), dim0-1)) variable ylower = max(0, min(ceil(yp - (ybin / 2)), dim1-1)) variable yupper = max(0, min(ceil(ylower + ybin), dim1-1)) matrixop /o tmp = sumcols(sumrows(subrange(srcwv, xlower,xupper,ylower,yupper))) redimension /n=(dim2) tmp return tmp end
This should give me a 1d wave that can be assigned to an existing wave in another function using SetFormula.
For this purpose I used
execute "setformula "+df+"pz \"updateTransientV2("+ df +", round(xp), round(yp), round(zp), "+df+"bin)\""
in the other function so that "pz" is set to the returned wave.
I have searched for information about wave reference returns but I couldn't solve my problem.
To make clear what I need:
pz is a 1d wave. The function updateTransientV2 should calculate a new wave according to the parameters given and then return this to pz.
What am I doing wrong?
Thanks in advance
the expression in SetFormula returns values to be inserted in the named wave, not a wave.
If you need to recalculate all of the new values for the wave in one, you can set up a 'dummy' dependency to achieve that.
make some other wave or variable dependent upon a function in which you reset the wave pz.
In this code, the dummy variable vDummy is explicitly dependent upon wave foo and variable var1, and the wave foo is effectively dependent upon variable var1.
I think that reentry is somehow blocked so that func1 is executed only once when var1 is changed, otherwise we might do something like:
I recommend that you try first to set up the dependency from the commandline using the := syntax to check how things work.
June 18, 2024 at 05:17 am - Permalink
I would suggest to avoid dependency formulas. Nowadays you can nearly always achieve your goal without dependencies, the latter are really hard to debug.
June 18, 2024 at 06:12 am - Permalink
Thanks for the quick replies!
I now used dummy variables that are dependent on a user function which update the desired waves in the course of the function. This works very well for my use-case.
Thank you Tony for the tips, it really helped!
But I see the point of Thomas, I was also kind of lost in the debugging process with dependencies.
June 19, 2024 at 12:06 am - Permalink