Variables into new wave

Dear Igor Users,

For the last past days I have been trying to work with Igor Pro, to see if it can replace Origin Pro, which is to cryptic for me (in terms of automating).
So I am new to Igor, and as I was trying to write some procedures all went well, untill... A very simple problem I hope but here it is:

I have loaded 10 waves, each consisting of 10,000 values (electrophysiological recordings, representing Current). I can write the procedure for plotting these against there own x-axis, place cursors (A and B) and, through a while-loop, calculate the mean value between the two cursors. These means are printed into the history-window. The same procedure goes on 10 other waves, representing to Voltage to these currents.

The next thing I can't get to work: I want to plot the mean of Current Wave against the mean of the respective Voltage-wave. From this point on, I can't figure it out. I can create a new wave, but it will contain 128 zeroes, and not my 10 means.

Therefore my question is: how can I put these ten values into a wave? Or is there better way to do this? I need to be doing this a lot, so therefore I would like this to be performed as automated as possible.

Thanks in advance for any help,


Olav
This sounds simple enough. If you post your code we can see where you're going wrong.

Software Engineer, WaveMetrics, Inc.
For sure I hope it is something simple! Here is the code (not very well polished yet, but was still scrambling around a bit):

#pragma rtGlobals=1 // Use modern global access method. #include <FilterDialog> menus=0 #include <Waves Average> Function CreateGraphs() String x_as = "Time1" String framelist = WaveList("Current*",";","") processWaves(framelist, x_as) end //########################################## Function processWaves(list, xaxis) String list // A semicolon-separated list. String xaxis String theWave String newWaveName = "MeansBetweenCursors" Variable meanBC Variable index=0 do // Get the next wave name theWave = StringFromList(index, list) if (strlen(theWave) == 0) break // Ran out of waves endif if (index == 0) // Is this the first wave? Display $theWave vs $xaxis else AppendToGraph $theWave vs $xaxis endif placeCursors(theWave) meanBC = meanBetweenCursors(theWave) print meanBC // Here I would like the means to be put in a list // or sent to the wave that is created in the next // statement. newWave(newWaveName, meanBC) index += 1 while (1) // Loop until break above End //########################################## Function placeCursors(theWave) String theWave Cursor/P A, $theWave, 5394 Cursor/P B, $theWave, 5494 end //########################################## Function meanBetweenCursors(theWave) string theWave Variable x1= pcsr(A) Variable x2= pcsr(B) Variable meanBC = mean($theWave,x1,x2) return meanBC end //########################################## // This part is where I get stuck. Function newWave(newWaveName, values) Wave $newWaveName Make/O newWaveName{values} end
Try this:

//##########################################
Function processWavesFixed(list, xaxis)
    String list // A semicolon-separated list.
    String xaxis

    String theWave
    Variable meanBC
    Variable index=0
   
    Variable numWaves= ItemsInList(list)
    Make/O/N=(numWaves) MeansBetweenCursors
   
    do // Get the next wave name
        theWave = StringFromList(index, list)
       
        if (strlen(theWave) == 0)
            break // Ran out of waves
        endif
        if (index == 0) // Is this the first wave?
            Display $theWave vs $xaxis
        else
            AppendToGraph $theWave vs $xaxis
        endif
       
        placeCursors(theWave)
       
        meanBC = meanBetweenCursors(theWave)
        // Here I would like the means to be put in a list
        // or sent to the wave that is created in the next
        // statement.
        MeansBetweenCursors[index]= meanBC
       
        index += 1
    while (1) // Loop until break above
End
Here is your one function that works as I believe you wish it to:
Function processWaves(list, xaxis)

    String list // A semicolon-separated list.
    String xaxis
    String theWave
    String newWaveName = "MeansBetweenCursors"
    Variable meanBC
    Variable index=0
   
    Variable numWaves = ItemsInList(list, ";")
    Make/N=(numWaves) meanValuesWave

    do // Get the next wave name
        theWave = StringFromList(index, list)

        if (strlen(theWave) == 0)
            break // Ran out of waves
        endif
        if (index == 0) // Is this the first wave?
            Display $theWave vs $xaxis
        else
            AppendToGraph $theWave vs $xaxis
        endif

        placeCursors(theWave)

        // Here I would like the means to be put in a list
        // or sent to the wave that is created in the next
        // statement.
        meanValuesWave[index] = meanBetweenCursors(theWave)
        print meanValuesWave[index]

        index += 1
    while (1) // Loop until break above
End


And, just for fun, here's how I would have written the code you posted above. Note that, you might have simplified this to some degree such that several of the functions you use might actually be necessary if they would normally do something else. Also, there might be even better ways to do this, depending on what exactly it is that you are trying to do. I haven't tested the code below, but I think it will do the same as your code is currently doing, though it won't actually place the cursors on the graph.

Function CreateGraphs()

    String x_as = "Time1"
    String framelist = WaveList("Current*",";","")
    processWaves(framelist, x_as, 5394, 5494)

end

//##########################################
Function processWaves(list, xaxis, firstPoint, lastPoint)
    String list // A semicolon-separated list.
    String xaxis
    Variable firstPoint
    Variable lastPoint
   
    String theWaveName
    String newWaveName = "MeansBetweenCursors"
    Variable meanBC
    Variable index=0
   
    Variable numWaves = ItemsInList(list, ";")
    Make/N=(numWaves) $(newWaveName)
    WAVE meanValuesWave = $(newWaveName)

    For (index = 0; index<numWaves; index += 1)
        theWaveName = StringFromList(index, list)
        WAVE thisWave = $(theWaveName)

        if (index == 0) // Is this the first wave?
            Display $theWaveName vs $xaxis
        else
            AppendToGraph $theWaveName vs $xaxis
        endif

        // Here I would like the means to be put in a list
        // or sent to the wave that is created in the next
        // statement.
        meanValuesWave[index] = mean(thisWave,pnt2x(thisWave, firstPoint), pnt2x(thisWave, lastPoint))
        print meanValuesWave[index]

        index += 1
    EndFor
End
Great!

Just what I was looking for! I see now how to create a wave from my variables. This really helps me a lot, since this will be something I'll be doing a lot.
Thanks for the the help!

Olav Kiam