I'm trying to figure out how to use the areaxy function to generate a list of values between a single x-series (time) and 1,000 different y-series. I only have 6 time points and a corresponding number of y-values. Using the print areaxy command, I can get the area values, however, I don't want to manually do this 1,000 times. How can I import the data sets from Excel into Igor, have it automatically calculate the areas and generate a new wave containing those values? Can anybody help.
Thanks,
Mark
This should help with the loading of files. AC suggests a better way than I did.
AreaXY and storing the results should be obvious from the example codes.
I'm trying to figure out how to use the areaxy function to generate a list of values between a single x-series (time) and 1,000 different y-series.
I have posted a snippet that does the area work here. Copy and paste it to your procedure window. Read the comments to see how it works. You will need to find a way to come up with a list of your 1000 Y wave names. If they are named systematically then you can use WaveList as shown in the example.
mkeller3 wrote:
How can I import the data sets from Excel into Igor, have it automatically calculate the areas and generate a new wave containing those values?
You can load Excel data using the XLLoadWave operation. Execute this:
DisplayHelpTopic "XLLoadWave XOP"
For a discussion of loading multiple waves from a user-defined function:
DisplayHelpTopic "Loading Waves Using Igor Procedures"
You will have to modify the procedures shown there to use XLLoadWave instead of the LoadWave operation and will no doubt need to make other modifications.
[Mark has a table where column 0 is a wave containing x values, and the other columns (about 500 of them) contain Y values. He want the average of those Y values using the X wave to provide X coordinates, all of those averages in one wave.]
Here's the macro and function I came up with:
#pragma rtGlobals=1// Use modern global access method.Macro AreaXYOfTableXinFirstCol(outputWaveName, showResultInTable)String outputWaveName="AreaOut"Variable showResultInTable= 1// 1 == yes, 2 == NoPrompt outputWaveName, "Choose name for output wave:"Prompt showResultInTable, "Show result in new table?",popup,"Yes;No;"String tableName= WinName(0,2)if(strlen(tableName) == 0)DoAlert0, "Expected a table to read waves from"returnendifString pathToWave= fAreaXYOfTable(tableName,outputWaveName)if(strlen(pathToWave)&& showResultInTable == 1)Edit$pathToWaveendifEndFunction/S fAreaXYOfTable(tableName,outputWaveName)String tableName,outputWaveName
WAVE/Z wx= WaveRefIndexed("Table0",0,1)// first wave contains X valuesif(!WaveExists(wx))DoAlert0, "Expected wave in first column of table "+tableName
return""// failureendif// Figure out how many other waves are in the tableString ListOfAllWaves= WaveList("*", ";", "WIN:"+tableName)Variable numOfYWaves= ItemsInList(ListOfAllWaves) -1if( numOfYWaves <1)DoAlert0, "Expected wave in second and following columns of table "+tableName
return""// failureendifWAVE output= $outputWaveNameif(WaveExists(output))DoAlert1, "Wave "+outputWaveName+" exists. Overwrite?"if( V_Flag != 1)returnGetWavesDataFolder(output,2)endifendifMake/O/N=(numOfYWaves)$outputWaveNameWAVE output= $outputWaveNameVariable index= 1// skip 0, that's XdoWAVE/Z wy= WaveRefIndexed("Table0",index,1)if(!WaveExists(wy))DoAlert0, "Expected wave in column "+num2istr(index)+" of table "+tableName
breakendifif(WaveType(wy,1)!= 1)DoAlert0, "Expected numeric wave in column "+num2istr(index)+" of table "+tableName
breakendifVariable theArea=areaxy(wx,wy)
output[index-1] = theArea
index += 1while( index <= numOfYWaves )returnGetWavesDataFolder(output,2)End
Have a look here
http://www.igorexchange.com/node/1406
This should help with the loading of files. AC suggests a better way than I did.
AreaXY and storing the results should be obvious from the example codes.
Hope this helps,
Jason.
March 14, 2010 at 11:03 am - Permalink
I have posted a snippet that does the area work here. Copy and paste it to your procedure window. Read the comments to see how it works. You will need to find a way to come up with a list of your 1000 Y wave names. If they are named systematically then you can use WaveList as shown in the example.
You can load Excel data using the XLLoadWave operation. Execute this:
DisplayHelpTopic "XLLoadWave XOP"
For a discussion of loading multiple waves from a user-defined function:
DisplayHelpTopic "Loading Waves Using Igor Procedures"
You will have to modify the procedures shown there to use XLLoadWave instead of the LoadWave operation and will no doubt need to make other modifications.
March 14, 2010 at 11:28 am - Permalink
Here's the macro and function I came up with:
--Jim Prouty
Software Engineer, WaveMetrics, Inc.
March 15, 2010 at 11:29 am - Permalink