Appending Values (string and variable) to a Table
I successfully added the code into mine, but I would like to also add a text column corresponding to the value. How do I add another column to the table? If there is a better way to perform category plotting from the graph without use of table, the suggestion is also welcomed.
(currently, I used the function print to display the value of "tracename" and "ratioValue", then perform copy-past function to the table for category plotting. )
Menu "Ratiometric",dynamic TraceNameList ("",";",1), donor_acceptor() "Ratio all", donor_acceptorAll() End Function donor_acceptor() variable donor variable acceptor prompt acceptor,"Acceptor peak" Prompt donor,"Donor peak" Doprompt "Enter values", acceptor,donor if (V_flag == 0) ratiometric(donor, acceptor) endif end Function ratiometric(donor,acceptor) variable donor,acceptor GetLastUserMenuInfo // sets S_value, V_value, etc. ratiometric_value(S_value,donor,acceptor) end Function ratiometric_value(tracename,donor,acceptor) string tracename variable donor,acceptor wave w= traceNametowaveRef("",traceName) wavestats/q w variable xPeak = V_maxloc VARIABLE ratioValue = w(acceptor)/w(donor) //scale value indexing // VARIABLE ratioValue = w[acceptor]/w[donor] // point value indexing String TextItRatio sprintf TextItRatio, "\\Z09 \\K(0,65280,0)\\ON \rRatio=%g",ratioValue Tag /F=2/S=3/A=MT/B=(0,0,0) $tracename,xPeak, TextItRatio //Appending values to a table, found in igorexchange.com/node/4857 Wave/Z/D ratioValueTable // Look for ratioValue wave in current data folder if (!WaveExists(ratioValueTable)) Make/O/D/N=0 ratioValueTable endif Wave ratioValueTable Variable numPoints = numpnts(ratioValueTable) ratioValueTable[numPoints] = {ratioValue} // Add new point to integrals print tracename, ratioValue End Function donor_acceptorAll() variable donor variable acceptor variable ratioValue prompt acceptor,"Acceptor peak" Prompt donor,"Donor peak" Doprompt "Enter values", acceptor,donor if (V_flag == 0) ratiometricall(donor, acceptor) endif end Function ratiometricall(donor,acceptor) variable donor,acceptor variable ratioValue String list = TraceNameList("", ";", 1) String tracename Variable index = 0 do traceName = StringFromList(index, list) if (strlen(traceName) == 0) break // No more traces. endif ratiometric_value(tracename,donor,acceptor) index += 1 while(1) wave ratioValueTable edit ratioValueTable end Thank you!
Do you want a second column containing the ratios? That would work with
Edit LabelWave, ValueWaveor
If you want to concatenate both properties use
num2strand "+"Labels=LabelWave+" "+num2str(ValueWave)For testing:
Hope it covers your concern,
HJ
July 13, 2015 at 11:40 am - Permalink
I tried the following and I only get the first set of data.
string tracename
variable ratiovalue
.....
Make /N=2 /T NameofTrace={traceName}
Make /N=2 ratioTabe={ratiovalue}
edit nameofTrace,ratioTable
Any suggestions?
Thank you!
[quote=HJDrescher]I don't fully get your request.
Do you want a second column containing the ratios? That would work with
Edit LabelWave, ValueWaveor
If you want to concatenate both properties use
num2strand "+"Labels=LabelWave+" "+num2str(ValueWave)For testing:
Hope it covers your concern,
HJ[/quote]
July 13, 2015 at 03:14 pm - Permalink
print tracename, ratioValue make me think you want one string for one pair of tracename and ratio combined in one text label.
create a text wave (Make /T) called "ratioValueLables" and change
ratioValueTable[numPoints] = {ratioValue}to
There are more elegant ways to do something like this, but it is still not clear what you are about to do.
HJ
July 13, 2015 at 03:48 pm - Permalink
A. Obtaining ratio by B/A
B. Making table Name(a) <---> Ratio(a)
C. Plotting with category
I can obtain ratio value (ratioVAlue) and their name (tracename), but I struggled to plot them with one or two steps.
Can you point me to that direction?
Thank you!
[quote=HJDrescher]Note the comma in the curly brackets in my test example. I separates entries. You also get a wave with one row although /N=2 creates a wave with 2 rows: "{...}" overwrites the original size.
print tracename, ratioValue make me think you want one string for one pair of tracename and ratio combined in one text label.
create a text wave (Make /T) called "ratioValueLables" and change
ratioValueTable[numPoints] = {ratioValue}to
There are more elegant ways to do something like this, but it is still not clear what you are about to do.
HJ[/quote]
July 14, 2015 at 09:46 am - Permalink
but I'm still not sure if this is what you want. Maybe you also want to have a look at
displayhelptopic "Tag"HJ
July 14, 2015 at 10:44 am - Permalink
The detail:
First, what I want to do is to create a functions to measure a ratio from a lambda plot (a raw data format : intensity vs. wavelength).
To do this, I have to measure the ratio between lambda position at 580nm / 483 nm.
After obtaining the ratio (RatioValue in this case) by presenting in the same plot with tag operation.
Then I would like to create the bar chart with category plot. This is the step I struggle to transfer the values into category plot automatically.
Ultimately, I want to build a function to do the task with one step.
First, obtaining ratio value from raw lambda data
Second, automatically plot into category bar chart.
Does it clear to you? I really appreciate your helps.
[quote=HJDrescher]Try (in the command line)
but I'm still not sure if this is what you want. Maybe you also want to have a look at
displayhelptopic "Tag"HJ[/quote]
July 14, 2015 at 01:04 pm - Permalink
It is ok that the LabelText wave gets overwritten each time.
HJ
July 14, 2015 at 02:21 pm - Permalink
[quote=HJDrescher]You can simply copy this fragment into your code (with the WAVE and WAVE /T references) at the end of your procedure generating the Name and Ratio waves (the display command is most likely to be omitted or at least it is necessary to check if this window is already displayed) to update your categories.
It is ok that the LabelText wave gets overwritten each time.
HJ[/quote]
July 14, 2015 at 02:53 pm - Permalink