Hinweis:Dieser Abschnitt ist nur in englischer Sprache verfügbar. Wir bitten um Ihr Verständnis.
5.10 Peak Analysis with Labtalk
Contents
Summary
This tutorial demonstrates using labtalk for peak analysis.
What You Will Learn
This tutorial will show you how to use Labtalk script to:
- Subtract a line from source data
- Find the highest peaks of each dataset
- Calculate the area, height and FWHM of the highest peak
- Create a graph of the quantities of the peak
- Create a theme of Peak Analyzer and run batch processing with the pre-saved theme
Steps
Example 1: Peak Analysis with Scripts
- Import the data file Waterfall.dat under <Origin EXE folder>\Samples\Graphing folder with the associated import filter into the workbook Waterfall.
- Use a loop and the subtract_line X-Function to subtract a simple baseline of end points connection.
- Create new sheet for summary report
- To calculate the quantities of the highest peak of the data, we should find the highest peak with the pkfind X-Function and then calculate the quantities of the peak with the integ1 X-Function
- Create a graph of the quantities as a function of excitation wavelength with the plotxy X-Function
// Create a newbook and name it Waterfall (both long and short name) newbook name:="Waterfall" option:=lsname; // Define the file name and filter name string fname$ = system.path.program$ + "Samples\Graphing\Waterfall.dat"; string filtername$ = "waterfall.oif"; // Use the impfile x-function to import the specified file with the import filter impfile fname:=fname$ filtername:=filtername$ location:=data orng:=[Waterfall]1!;
//Create new sheet named as SubtractedData newsheet name:=SubtractedData; //Define the newly created worksheet(current active) as a range variable range sdwk = !; //Active the "Waterfall" worksheet by its name page.active$ = "Waterfall"; //Define an integer to hold the number of columns in Waterfall sheet int nc = wks.nCols; //Find out the columns for excitation wavelength = 600, 610, 620, 630 ect //Use the loop and subtract_line x-function to subtract baseline //The first and last data points are found and connected linearly //This line will be subtracted as baseline from source data //Subtracted data will be named by excitation wavelength of source data int nexc; loop(ii, 2, nc) { range ry = [Waterfall]Waterfall!col($(ii)); int nWave = %(ry[D1]$); if (mod(nWave, 10)==0) { nexc = nexc + 1; range rx = [Waterfall]Waterfall!col(1); range rr = [Waterfall]SubtractedData!(1,$(nexc)); subtract_line iy:=ry x1:=rx[1] /* Specifies the X value of the first point*/ y1:=ry[1] /* Specifies the Y value of the first point*/ x2:=rx[$(wks.maxRows)] /* Specifies the X value of the last point*/ y2:=ry[$(wks.maxRows)] /* Specifies the Y value of the last point*/ oy:=rr; //Rename the column long names in SubtractedData sheet //Use the User Defined Parameter Wavelength in Waterfall sheet rr[L]$ = ry[D1]$; //add a new column for next loop wks.addcol(); } else { continue; } }
// Create new sheet for summary report and define ranges newsheet cols:=7 xy:="XYYYYYY" name:="Summary"; range rWaveLength = 1, rCntrInd = 2, rLtInd =3, rRtInd = 4; range rArea = 5, rCntr = 6, rHt = 7, rFWHM = 8; rWaveLength[L]$ = "WaveLength"; rCntrInd[L]$ = "Peak Center Index"; rLtInd[L]$ = "Peak Left Index"; rRtInd[L]$ = "Peak Right Index"; rArea[L]$ = "Peak Area"; rCntr[L]$ = "Peak Center"; rHt[L]$ = "Peak Height"; rFWHM[L]$ = "FWHM";
//active the SubtractedData sheet page.active$="SubtractedData"; //add columns for temp results of the finded peaks loop(cc, 1, 2) { wks.addcol(); }; loop(ii, 2, nexc) { //find the highest peak range rData = col($(ii)); range pcenter= $(nexc+1), pleft= $(nexc+2), pright= $(nexc+3); pkfind rData filter:=num value:= 1 ocenter:=pcenter oleft:=pleft oright:=pright; //find a highest peak //copy the result from the temp columns to summary sheet wrcopy iw:=SubtractedData ow:=Summary c1:=nexc+1 c2:=nexc+3 r1:=1 r2:=1 dc1:=2 dr1:= ii-1; //compute the quantities of the highest peak with integ1 int n1 = pleft[1]; //specify the peak left index int n2 = pright[1]; //specify the peak right index range rint = rData[$(n1):$(n2)]; // range of data to be integrated double aa, cc, hh, fw; integ1 iy:=rint area:=aa x0:=cc y0:=hh dx:=fw oy:=<optional>; //put the quantities to summary sheet rArea[$(ii-1)] = aa; rCntr[$(ii-1)] = cc; rHt[$(ii-1)] = hh; rFWHM[$(ii-1)] =fw; //copy the longname of calculated data to summary sheet rWaveLength[$(ii-1)] = %(rData[L]$); }
//create a graph of the quantities as a function of excitation wavelength plotxy iy:=(rWaveLength, rArea) plot:=202 ogl:=[<new>]; plotxy iy:=(rWaveLength, rHt) plot:=202 ogl:=[<new>]; plotxy iy:=(rWaveLength, rFWHM) plot:=202 ogl:=[<new>];
Example 2: Running Batch Processing with pre-saved Theme
- Drag and drop the prepared theme,0-PA-BatchPA.ois, under the <Origin EXE folder>\Samples\Batch Processing folder into Origin.
- Open the project file with data for peak analysis
- Perform the peak analysis batch processing with the pre-saved theme with the pamultiY X-Function
// Open an Origin Project file string fname$ = system.path.program$ + "Samples\Batch Processing\Batch Peak Analysis.opj"; doc -o %(fname$); // Abbreviation of ''document -open''
paMultiY iy:=2:end theme:="BatchPA" append:=4 dataid:="My Parameter";