LabTalk Scripting Guide
LabTalk Scripting Guide
OriginLab Corporation
One Roundhouse Plaza
Northampton, MA 01060
USA
(413) 586-2013
(800) 969-7720
Fax (413) 585-0126
www.OriginLab.com
Table of Contents
1 Introduction.......................................................................................................... 1
2 Getting Started with LabTalk............................................................................... 3
2.1 Hello World .....................................................................................................................3
2.1.1
2.1.2
3 Language Fundamentals..................................................................................... 9
3.1 General Language Features...........................................................................................9
3.1.1
3.1.2
3.1.3
3.1.4
3.1.5
3.1.6
7 Graphing ...........................................................................................................187
7.1 Creating Graphs......................................................................................................... 187
7.1.1
7.1.2
7.1.3
7.1.4
Table of Contents
Labels .........................................................................................................................198
Graph Legend .............................................................................................................199
Draw............................................................................................................................201
9 Exporting.......................................................................................................... 213
9.1 Exporting Worksheets ................................................................................................213
9.1.1
X-Functions................................................................................................................. 235
X-Function Input and Output....................................................................................... 237
X-Function Execution Options .................................................................................... 240
X-Function Exception Handling................................................................................... 242
Table of Contents
12.6.3 Apply Rainbow Palette to Gray Image ........................................................................271
12.6.4 Converting Image to Data ...........................................................................................272
Index .......................................................................................................................365
viii
Introduction
Origin provides two programming languages: LabTalk and Origin C. This guide covers the
LabTalk scripting language. The guide is example based and provides numerous examples of
accessing various aspects of Origin from script.
The guide should be used in conjunction with the LabTalk Language Reference help file, which
is accessible from the Origin Help menu. The most up-to-date source of documentation
including detailed examples can be found at our wiki site: wiki.OriginLab.com
We begin with a classic example to show you how to execute LabTalk script.
2.1.1
1.
2.
Script Window
Open Origin, and from the Window pulldown menu, select the Script Window option. A
new window called Classic Script Window will open.
In this new window, type the following text exactly and then press Enter:
type "Hello World"
Origin will output the text Hello World directly beneath your command.
2.1.2
Custom Routine
Origin provides a convenient way to save a script and run it with the push of a button.
1.
2.
While holding down Ctrl+Shift on your keyboard, press the Custom Routine button (
on the Standard Toolbar.
This opens Code Builder, Origin's native script editor. The file being edited is called
Custom.ogs. The code has one section, [Main], and contains one line of script:
[Main]
type -b $General.Userbutton;
4.
Origin will again output the text Hello World, but this time, because of the -b switch, to a popout window.
Origin will output the following text in the same window, directly below your command:
In Book1, there are 2 columns.
%H is a String Register that holds the currently active window name (this could be a workbook,
a matrix, or a graph), while wks is a LabTalk Object that refers to the active worksheet; ncols
is one attribute of the wks object. The value of wks.ncols is then the number of columns in the
active worksheet. The $ is one of the substitution notations; it tells Origin to evaluate the
expression that follows and return its value.
Origin computes and types the result in the next line after equal sign:
3+5=8
The = character is typically used as an assignment, with a left hand side and a right hand side.
When the right hand side is missing, the interpreter will evaluate the expression on the left and
print the result in the script window.
In the example below, we will introduce the concept of variables in LabTalk. Entering the
following assignment statement in the Script window:
A = 2
creates the variable A, and sets A equal to 2. Then you can do some arithmetic on variable A,
like multiply PI (a constant defined in Origin,) and assign back to A
A = A*PI
In addition, there are LabTalk Commands to view a list of variables and their values. Type list
or edit and press Enter:
list
Origin will open the LabTalk Variables and Functions dialog that lists all types of Origin
variables as shown below.
LabTalk supports various types of variables. See Data Types and Variables.
Open a new Origin project. On a clean line of the Classic Script Window type the following
text exactly and press Enter:
Col(1) = {1:10}
In the above script, Col function is used to refer to the dataset in a worksheet column. Now
look at the worksheet in the Book1 window; the first 10 rows should contain the values 1--10.
You have just created a data series. So now you might want to do something with that series,
say, multiply all of its values by a constant. On another line of the Classic Script Window type
Col(2) = Col(1)*4
The first 10 rows of the second column of the worksheet in Book1 should now contain the
values corresponding to the first column, each multiplied by the constant 4.
Origin also provides several built-in functions for generating data. For instance, the following
code fills the first 100 rows of column 2 (in the active worksheet) with uniformly distributed
random numbers:
Col(2) = uniform(100)
2.4.2
Import
Most likely, you will want to do more than create simple data series; you will want to import
data from external applications and use Origin to plot and analyze that data. In LabTalk script,
the easiest and best way to do this is to use the impASC X-Function. For example:
// Specify the path to the desired data file.
string path$ = "D:\SampleData\Waveform.dat";
// Import the file into a new workbook (ImpMode = 3).
impasc fname:=path$ options.ImpMode:=3;
This example illustrates a script with more than one command. The path$ in the first line is a
String Variable that holds the file you want to import, then we pass this string variable as an
argument to the impASC X-Function. The semicolon at the end of each line tells Origin where a
command ends. Two forward-slash characters, //, tell Origin to treat the text afterward (until the
end of the line) as a comment. To run both of the commands above together, paste or type
them into the Script Window, select both lines (as you would a block of text to copy, they
should be highlighted) and press enter. Origin runs the entire selection (and ignores the
comments).
There are also many files containing sample data that come with your Origin installation. They
are located in the Samples folder under the path that you installed Origin locally (the system
path). This example accesses one such file:
string fn$=system.path.program$ + "Samples\Spectroscopy\HiddenPeaks.dat";
// Start with a new worksheet (ImpMode = 4).
impasc fname:=fn$ options.ImpMode:=4;
The data tree named options stores all of the input parameters, which can be changed by
direct access as in the example.
Once you have your data inside Origin, you will want a convenient way to access it from script.
The best way to do this is using the new Range Notation introduced since Origin 8:
// Assign your data of interest to a range variable.
range rr = [Book1]Sheet2!Col(4);
// Assign the range data to column 1 of the active worksheet.
Col(1) = rr;
// Change the value of the 4th element of the range to the value 10.
rr[4] = 10;
2.4.2 Import
Although this example is trivial it shows off the power of range notation to access, move, and
process your data.
Language Fundamentals
In any programming language, there are general tasks that one will need to perform. They
include: importing, parsing, graphing, and exporting data; initializing, assigning, and deleting
variables; performing mathematical and textual operations on data and variables; imposing
conditions on program flow (i.e., if, if-else, break, continue); performing sets of tasks in a batch
(e.g., macro) or in a loop structure; calling and passing arguments to and from functions; and
creating user-defined functions. Then there are advanced tasks or functionalities specific to
each language. This section demonstrates and explains how to both carry out general
programming tasks and utilize unique, advanced features in LabTalk. In addition, we explain
how to run LabTalk scripts within an Origin project.
3.1.1
Double
Integer
Constant
Dataset
String
String Array
Range
Tree
Graphic Object
Numeric
LabTalk supports three numeric data types: double, int, and const.
1.
2.
3.
Double: double-precision floating-point number; this is the default variable type in Origin.
Integer: integers (int) are stored as double in LabTalk; truncation is performed during
assignment.
Constant: constants (const) are a third numeric data type in LabTalk. Once declared, the
value of a constant cannot be changed.
Note: LabTalk does not have a complex datatype. You can use a complex number in a
LabTalk expression only in the case where you are adding or subtracting. LabTalk will simply
ignore the imaginary part and return only the real part. (The real part would be wrong in the
case of multiplication or division.) Use Origin C if you need the complex datatype.
// Only valid for addition or subtraction:
realresult = (3-13i) - (7+2i);
realresult=;
// realresult = -4
Dataset
The Dataset data type is designed to hold an array of numeric values.
Temporary Loose Dataset
When you declare a dataset variable it is stored internally as a local, temporary loose dataset.
Temporary means it will not be saved with the Origin project; loose means it is not affiliated
with a particular worksheet. Temporary loose datasets are used for computation only, and
cannot be used for plotting.
The following brief example demonstrates the use of this data type (Dataset Method and $
Substitution Notation are used in this example):
// Declare a dataset 'aa' with values from 1-10,
// with an increment of 0.2:
dataset aa={1:0.2:10};
// Declare integer 'nSize',
// and assign to it the length of the new array:
int nSize = aa.GetSize();
// Output the number of values in 'aa' to the Script Window:
type "aa has $(nSize) values";
10
Language Fundamentals
For more on project-level and local-level variables see the section below on Scope of
Variables.
For more on working with Datasets, see Datasets.
For more on working with %( ), see Substitution Notation.
String
LabTalk supports string handling in two ways: string variables and string registers.
String Variables
String variables may be created by declaration and assignment or by assignment alone
(depending on desired variable scope), and are denoted in LabTalk by a name comprised of
continuous characters (see Naming Rules below) followed by a $-sign (i.e., stringName$):
// Create a string with local/session scope by declaration and assignment
// Creates a string named "greeting",
// and assigns to it the value "Hello":
string greeting$ = "Hello";
// $ termination is optional in declaration, mandatory for assignment
string FirstName, LastName;
FirstName$ = Isaac;
LastName$ = Newton;
// Create a project string by assignment without declaration:
greeting2$ = "World";//global scope and saved with OPJ
For more information on working with string variables, see the String Processing section.
String Registers
Strings may be stored in String registers, denoted by a leading %-sign followed by a letter of
the alphabet (i.e., %A-%Z).
/* Assign to the string register %A the string "Hello World": */
%A = "Hello World";
For current versions of Origin, we encourage the use of string variables for
working with strings, as they are supported by several useful built-in methods;
for more, see String(Object). If, however, you are already using string registers,
see String Registers for complete documentation on their use.
StringArray
The StringArray data type handles arrays of strings in the same way that the Datasets data
type handles arrays of numbers. Like the String data type, StringArray is supported by several
built-in methods; for more, see StringArray (Object).
The following example demonstrates the use of StringArray:
Language Fundamentals
11
aa.Add("New York");
Range
The range data type allows functional access to any Origin object, referring to a specific region
in a workbook, worksheet, graph, layer, or window.
The general syntax is:
range rangeName = [WindowName]LayerNameOrIndex!DataRange
which can be made specific to data in a workbook, matrix, or graph:
range rangeName =
[BookName]SheetNameOrIndex!ColumnNameOrIndex[RowBegin:RowEnd]
range rangeName = [MatrixBookName]MatrixSheetNameOrIndex!MatrixObjectNameOrIndex
range rangeName =[GraphName]LayerNameOrIndex!DataPlotIndex
The special syntax [??] is used to create a range variable to access a loose dataset.
For example:
// Access Column 3 on Book1, Sheet2:
range cc = [Book1]Sheet2!Col(3);
// Access second curve on Graph1, layer1:
range ll = [Graph1]Layer1!2;
// Access second matrix object on MBook1, MSheet1:
range mm = [MBook1]MSheet1!2;
// Access loose dataset tmpdata_a:
range xx = [??]!tmpdata_a;
Notes:
CellRange can be a single cell, (part of) a row or column, a group of cells, or a
noncontiguous selection of cells.
Worksheets, Matrix Sheets and Graph Layers can each be referenced by name or index.
You can define a range variable to represent an origin object, or use range directly as an XFunction argument.
Much more details on the range data type and uses of range variables can be found in
the Range Notation.
Tree
LabTalk supports the standard tree data type, which emulates a tree structure with a set of
branches and leaves. Branches contain leaves, and leaves contain data. Both branches and
leaves are called nodes.
12
Language Fundamentals
A leaf node may contain a variable that is of numeric, string, or dataset (vector) type.
Trees are commonly used in Origin to set and store parameters. For example, when a dataset
is imported into the Origin workspace, a tree called options holds the parameters which
determine how the import is performed.
Specifically, the following commands import ASCII data from a file called "SampleData.dat",
and set values in the options tree to control the way the import is handled. Setting the
ImpMode leaf to a value of 4 tells Origin to import the data to a new worksheet. Setting the
NumCols leaf (on the Cols branch) to a value of 3 tells Origin to only import the first three
columns of the SampleData.dat file.
impasc fname:="SampleData.dat"
/* Start with new sheet */
options.ImpMode:=4
/* Only import the first three columns */
options.Cols.NumCols:=3
The tree data type is often used in X-Functions as a input and output data structure. For
example:
// Put import file info into 'trInfo'.
impinfo t:=trInfo;
Tree nodes can be string. The following example shows how to copy treenode with string data
to worksheet column:
//Import the data file into worksheet
newbook;
string fn$=system.path.program$ + "\samples\statistics\automobile.dat";
impasc fname:=fn$;
tree tr;
//Perform statistics on a column and save results to a tree variable
discfreqs 2 rd:=tr;
// Assign strings to worksheet column.
newsheet name:=Result;
col(1) = tr.freqcount1.data1;
col(2) = tr.freqcount1.count1;
Language Fundamentals
13
Tree nodes can also be vectors. Prior to Origin 8.1 SR1 the only way to access a vector in a
Tree variable was to make a direct assignment, as shown in the example code below:
tree tr;
// If you assign a dataset to a tree node,
// it will be a vector node automatically:
tr.a=data(1,10);
// A vector treenode can be assigned to a column:
col(1)=tr.a;
// A vector treenode can be assigned to a loose dataset, which is
// convenient since a tree node cannot be used for direct calculations
dataset temp=tr.a;
// Perform calculation on the loose dataset:
col(2)=temp*2;
Now, however, you can access elements of a vector tree node directly, with statements such
as:
// Following the example immediately above,
col(3)[1] = tr.a[3];
that assigns the third element of vector tr.a to the first row of column 3 in the current
worksheet.
You can also output analysis results to a tree variable, like the example below.
newbook;
//Import the data file into worksheet
string fn$=system.path.program$ + "\samples\Signal Processing\fftfilter1.dat";
impasc fname:=fn$;
tree mytr;
//Perform FFT and save results to a tree variable
fft1 ix:=col(2) rd:=mytr;
page.active=1;
col(3) = mytr.fft.real;
col(4) = mytr.fft.imag;
More information on trees can be found in the chapter on the Origin Project, Accessing
Metadata section.
Graphic Objects
New LabTalk variable type to allow control of graphic objects in any book/layer.
The general syntax is:
GObject name = [GraphPageName]LayerIndex!ObjectName;
GObject name = [GraphPageName]LayerName!ObjectName;
GObject name = LayerName!ObjectName; // active graph
GObject name = LayerIndex!ObjectName; // active graph
GObject name = ObjectName; // active layer
14
Language Fundamentals
You can declare GObject variables for both existing objects as well as for not-yet created
object.
For example:
GObject myLine = line1;
draw -n myLine -l {1,2,3,4};
win -t plot;
myLine.X+=2;
/* Even though myLine is in a different graph
that is not active, you can still control it! */
For a full description of Graphic Objects and their properties and methods, please see Graphic
Objects.
Variables
A variable is simply an instance of a particular data type. Every variable has a name, or
identifier, which is used to assign data to it, or access data from it. The assignment operator is
the equal sign (=), and it is used to simultaneously create a variable (if it does not already exist)
and assign a value to it.
Description
@ppv=0
This is the DEFAULT option and allows both session variables and local variables to
use existing project variable names. In the event of a conflict, session or local
variables are used.
@ppv=1
This option makes declaring a session variable with the same name as an existing
project variable illegal. Upon loading a new project, session variables with a name
Language Fundamentals
15
@ppv=2
This option makes declaring a local variable with the same name as an existing
project variable illegal. Upon loading of new project, local variables with a name
conflict will be disabled until the project is closed or the project variable with the
same name is deleted.
@ppv=3
This is the combination of @ppv=1 and @ppv=2. In this case, all session and local
variables will not be allowed to use project variable names. If a new project is
loaded, existing session or local variables of the same name will be disabled.
list v;
list vs;
list vt;
Please see the List (Command), and Del (Command) (in Language Reference: Command
Reference) for all listing and deleting options.
If no options specified, List or Edit command will open the LabTalk Variables and Functions
dialog to list all variables and functions.
Scope of Variables
The scope of a variable determines which portions of the Origin project can see and be seen
by that variable. With the exception of the string, double (numeric), and dataset data types,
LabTalk variables must be declared. The way a variable is declared determines its scope.
Variables created without declaration (double, string, and dataset only!) are assigned the
Project/Global scope. Declared variables are given Local or Session scope. Scope in LabTalk
consists of three (nested) levels of visibility:
16
Language Fundamentals
Project variables
Session variables
Local variables
Project variables , also called Global variables , are saved with the Origin Project (*.OPJ).
Project variables or Global variables are said to have Project scope or Global scope .
Project variables are automatically created without declarations for variables of type
double, string, and dataset as in:
// Define a project (global scope) variable of type double:
myvar = 3.5;
// Define a loose dataset (global scope):
temp = {1,2,3,4,5};
// Define a project (global scope) variable of type string:
str$ = "Hello";
All other variable types must be declared, which makes their default scope either Session or
Local. For these you can force Global scope using the @global system variable (below).
Session Variables
Session variables are not saved with the Origin Project, and are available in the current
Origin session across projects. Thus, once a session variable has been defined, they exist
until the Origin application is terminated or the variable is deleted.
When there are a session variable and a project variable of the same name, the session
variable takes precedence.
Session variables are defined with variable declarations, such as:
// Defines a variable of type double:
double var1 = 4.5;
// Define loose dataset:
dataset mytemp = {1,2,3,4,5};
It is possible to have a Project variable and a Session variable of the same name. In such a
case, the session variable takes precedence. See the script example below:
aa = 10;
type "First, aa is a project variable equal to $(aa)";
double aa = 20;
type "Then aa is a session variable equal to $(aa)";
del -al aa;
type "Now aa is project variable equal to $(aa)";
Language Fundamentals
17
Local Variables
Local variables exist only within the current scope of a particular script.
Script-level scope exists for scripts:
enclosed in curly braces {},
in separate *.OGS files or individual sections of *.OGS files,
inside the Column/Matrix Values Dialog, or
behind a custom button (Button Script).
Local variables are declared and assigned value in the same way as session variables:
loop(i,1,10){
double a = 3.5;
const e = 2.718;
// some other lines of script...
}
// "a" and "e" exist only inside the code enclosed by {}
It is possible to have local variables with the same name as session variables or project
variables. In this case, the local variable takes precedence over the session or project variable
of the same name, within the scope of the script. For example, if you run the following script:
[Main]
double aa = 10;
type "In the main section, aa equals $(aa)";
run.section(, section1);
run.section(, section2);
[section1]
double aa = 20;
type "In section1, aa equals $(aa)";
[section2]
type "In Section 2, aa equals $(aa)";
18
Language Fundamentals
Upon exiting the *.OGS, the @global variable is automatically restored to its default value, 0.
Note that one can also control a block of code by placing @global at the beginning and end
such as:
@global=1;
double alpha=1.2;
double beta=2.3;
Function double myPeak(double x, double x0)
{
double y = 10*exp(-(x-x0)^2/4);
return y;
}
@global=0;
double gamma=3.45;
In the above case variables alpha, beta and the user-defined function myPeak will have global
scope, where as the variable gamma will not.
3.1.2
Programming Syntax
A LabTalk script is a single block of code that is received by the LabTalk interpreter. A LabTalk
script is composed of one or more complete programming statements, each of which performs
an action.
Each statement in a script should end with a semicolon, which separates it from other
statements. However, single statements typed into the Script window for execution should not
end with a semicolon.
Each statement in a script is composed of words. Words are any group of text separated by
white space. Text enclosed in parentheses is treated as a single word, regardless of white
space. For example:
type This is a statement;
ty s1; ty s2; ty s3;
Parentheses are used to create long words containing white space. For example, in the script:
menu 3 (Long Menu Name);
the open parenthesis signifies the beginning of a single word, and the close parenthesis
signifies the end of the word.
Language Fundamentals
19
Statement Types
LabTalk supports five types of statements :
Assignment Statements
Macro Statements
Command Statements
Arithmetic Statement
Function Statements
Assignment Statements
The assignment statement takes the general form:
LHS = expression;
expression (RHS, right hand side) is evaluated and put into LHS (left hand side). If LHS does
not exist, it is created if possible, otherwise an error will be reported.
When a new data object is created with an assignment statement, the object created is:
A string variable if LHS ends with a $ as in stringVar$ = "Hello."
A numeric variable if expression evaluates to a scalar.
A dataset if expression evaluates to a range.
When new values are assigned to an existing data object, the following conventions apply:
If LHS is a dataset and expression is a scalar, every value in LHS is set equal to expression.
If LHS is a numeric variable, then expression must evaluate into a scalar. If expression
evaluates into a dataset, LHS retrieves the first element of the dataset.
If both LHS and expression represent datasets, each value in LHS is set equal to the
corresponding value in expression.
If LHS is a string, then expression is assumed to be a string expression.
If the LHS is the object.property notation, with or without $ at the end, then this notation
is used to set object properties, such as the number of columns in a worksheet, like
wks.ncols=3;
Sets the row heading width for the Book1 worksheet to 100, using the worksheet object's rhw
property. The doc -uw command refreshes the window.
Book1!wks.rhw = 100;
20
doc -uw;
Language Fundamentals
The calculation is carried out for the values at the corresponding index numbers in more and
yetmore. The result is put into myData at the same index number.
myData = 3 * more + yetmore;
Note: If a string register to the left of the assignment operator is enclosed in parentheses, the
string register is substitution processed before assignment. For example:
%B = DataSet;
(%B) = 2 * %B;
The values in DataSet are multiplied by 2 and put back into DataSet. %B still holds the string
"DataSet".
Similar to string registers, assignment statement is also used for string variables, like:
fname$=fdlg.path$+"test.csv";
In this case, the expression is a string expression which can be string literals, string variables,
or concatenation of multiple strings with the + character.
Macro Statements
Macros provide a way to alias a script, that is, to associate a given script with a specific name.
This name can then be used as a command that invokes the script.
For more information on macros, see Macros
Command Statements
The third statement type is the command statement. LabTalk offers commands to control or
modify most program functions.
Each command statement begins with the command itself, which is a unique identifier that can
be abbreviated to as little as two letters (as long as the abbreviation remains unique, which is
true in most cases). Most commands can take options (also known as switches), which are
single letters that modify the operation of the command. Options are always preceded by the
dash "-" character. Commands can also take arguments . Arguments are either a script or a
data object. In many cases, options can also take their own arguments.
Command statements take the general form:
command [option] [argument(s)];
The brackets [] indicate that the enclosed component is optional; not all commands take both
options and arguments. The brackets are not typed with the command statement (they merely
denote an optional component).
Methods (Object) are another form of command statement. They execute immediate actions
relating to the named object. Object method statements use the following syntax:
ObjectName.Method([options]);
For example:
The following script adds a column named new to the active worksheet and refreshes the
window:
wks.addcol(new);
doc -uw;
Language Fundamentals
21
Adding the -r option and its argument, baseline, causes myData to be integrated from a
reference curve named baseline.
integ -r baseline myData;
This command statement prints "Hello World" in a dialog box three times.
repeat 3 {type -b "Hello World"}
Arithmetic Statement
The arithmetic statement takes the general form:
dataObject1 operator dataObject2;
where
dataObject1 is a dataset or a numeric variable.
dataObject2 is a dataset, variable, or a constant.
operator can be +, -, *, /, or ^.
The result of the calculation is put into dataObject1. Note that dataObject1 cannot be a
function. For example, col(3) + 25 is an illegal usage of this statement form.
The following examples illustrate different forms of arithmetic statements:
If myData is a dataset, this divides each value in myData by 10.
myData / 10;
Subtract otherData from myData, and put the result into myData. Both datasets must be Y or
Z datasets (see Note).
myData - otherData;
Note: There is a difference between using datasets in arithmetic statements versus using
datasets in assignment statements. For example, data1_b + data2_b is computed quite
differently from data1_b = data1_b + data2_b. The latter case yields the true point-by-point
sum without regard to the two datasets' respective X-values. The former statement, data1_b +
data2_b, adds the two data sets as if each were a curve in the XY-plane. If therefore, data1_b
and data2_b have different associated X-values, one of the two series will require
interpolation. In this event, Origin interpolates based on the first dataset's (data1_b in this
case) X-values.
Function Statements
The function statement begins with the characteristics of a function -- an identifier -- followed
by a quantity, enclosed by parentheses, upon which the function acts.
22
Language Fundamentals
Do not use a semicolon when executing a single statement script in the Script window.
o An example of the proper syntax is: type "hello" (ENTER).
o The interpreter automatically places a semicolon after the statement to indicate
that it has been executed.
Statements ending with { } block can skip the semicolon.
The last statement in a { } block can also skip the semicolon.
In the following example, please note the differences between the three type command:
if (m>2) {type "hello";} else {type "goodbye"}
type "the end";
or
if (m>2) {type "hello"} else {type "goodbye"};
type "the end";
The leading ';' will place all scripts following it to be delayed-executed. Sometimes you may
want a specific group of statements delayed, then you can put them inside {script} with a
leading ';', for example:
// button to close this window
type "closing this window";
Language Fundamentals
23
axis x;};
Both scripts are executed as a single statement, even though the second statement extends
over four lines.
Note: There is a limit to the length of script that can be included between a set of braces {}.
The scripts between the {} are translated internally and the translated scripts must be less than
1140 bytes (after substitution). In place of long blocks of LabTalk code, programmers can use
LabTalk macros or the run.section() and run.file() object methods. To learn more, see Passing
Arguments.
Comments
LabTalk script accepts two comment formats:
Use the "//" character to ignore all text from // to the end of the line. For example:
type "Hello World";
Use the combination of "/*" and "*/" character pairs to begin and end, respectively, any block of
code or text that you do not want executed. For example:
type Hello /* Place comment text here,
or a line of code:
and even more ... */
World;
Note: Use the "#!" characters to begin debugging lines of script. The lines are only executed if
system.debug = 1.
24
Language Fundamentals
3.1.3 Operators
assigns the value 1 to the variable type. This occurs even though type is (also) a LabTalk
command, since assignments come before commands in recognition order. However, since
commands precede arithmetic expressions in recognition order, in the following statement:
type + 1;
the command is carried out first, and the string, + 1, prints out.
The statements are executed in the order received, using the following evaluation
priority
3.1.3
Assignment statements: String variables to the left of the assignment operator are not
expressed unless enclosed by parentheses. Otherwise, all string variables are expressed,
and all special notation ( %() and $()) is substitution processed.
Macro statements: Macro arguments are substitution processed and passed.
Command statements: If a command is a raw string, it is not sent to the substitution
processor. Otherwise, all special notation is substitution processed.
Arithmetic statements: All expressions are substitution processed and expressed.
Operators
Introduction
LabTalk supports assignment, arithmetic, logical, relational, and conditional operators. These
operations can be performed on scalars and in many cases they can also be performed on
vectors (datasets). Origin also provides a variety of built-in numeric, trigonometric, and
statistical functions which can act on datasets.
When evaluating an expression, Origin observes the following precedence rules:
1.
2.
3.
4.
5.
6.
Language Fundamentals
25
Arithmetic Operators
Origin recognizes the following arithmetic operators:
Operator
Use
Addition
Subtraction
Multiplication
Division
&
Note: For 0 raised to the power n (0^n), if n > 0, 0 is returned. If n < 0, a missing value is
returned. If n = 0, then 1 is returned (if @ZZ = 1) or a missing value is returned (if @ZZ = 0).
These operations can be performed on scalars and on vectors (datasets). For more information
on scalar and vector calculations, see Performing Calculations below.
The following example illustrates the use of the exponentiate operator: Enter the following
script in the Command window:
1.3 ^ 4.7 =
After pressing ENTER, 3.43189 is printed in the Command window. The next example
illustrates the use of the bitwise and operator: Enter the following script in the Command
window:
if (27&41 == 9)
{type "Yes!"}
Note: Multiplication must be explicitly included in an expression (for example, 2*X rather than
2X to indicate the multiplication of the variable X by the constant 2).
26
Language Fundamentals
3.1.3 Operators
Define a constant
We can also define constant is defined in ORGSYS.CNF file as:
pi = 3.141592653589793
String Concatenation
Very often you need to concatenate two or more strings of either the string variable or string
register type. All of the code segments in this section return the string "Hello World."
The string concatenation operator is the plus-sign (+), and can be used to concatenate two
strings:
aa$ ="Hello";
bb$="World";
cc$=aa$+" "+bb$;
cc$=;
To concatenate two string registers, you can simply place them together:
%J="Hello";
%k="World";
%L=%J %k;
%L=;
If you need to work with both a string variable and a string register, follow these examples
utilizing %( ) substitution:
aa$ ="Hello";
%K="World";
dd$=%(aa$) %K;
dd$=;
dd$=%K;
dd$=aa$+" "+dd$;
dd$=;
%M=%(aa$) %K;
%M=;
Language Fundamentals
27
Assignment Operators
Origin recognizes the following assignment operators:
Operator
Use
Simple assignment.
+=
Addition assignment.
-=
Subtraction assignment.
*=
Multiplication assignment.
/=
Division assignment.
^=
Exponential assignment.
These operations can be performed on scalars and on vectors (datasets). For more information
on scalar and vector calculations, see Performing Calculations in this topic.
The following example illustrates the use of the -= operator.
In this example, 5 is subtracted from the value of A and the result is assigned to A:
A -= 5;
In the next example, each value in Data1_B is divided by the corresponding value in Book1_A,
and the resulting values are assigned to Book1_B.
Book1_B /= Book1_A;
In addition to these assignment operators, LabTalk also supports the increment and decrement
operators for scalar calculations (not vector).
Operator
++
--
Use
The following for loop expression illustrates a common use of the increment operator ++. The
script types the cell values in the second column of the current worksheet to the Command
window:
28
Language Fundamentals
3.1.3 Operators
for (ii = 1; ii <= wks.maxrows; ii++)
{type ($(col(2)[ii])); }
>
>=
<
Use
Greater than
Less than
<=
==
Equal to
!=
Not equal to
&&
And
||
Or
Numeric Comparison
The most common comparison is between two numeric values. Generally, at least one is a
variable. For instance:
if aa<3 type "aa<3";
It is also possible, using parentheses, to make multiple comparisons in the same logical
statement:
if (aa<3 && aa<bb) type "aa is lower";
Language Fundamentals
29
String Comparison
You can use the == and != operators to compare two strings. String comparison (rather than
numeric comparison) is indicated by open and close double quotations (" ") either before, or
after, the operator. The following script determines if the %A string is empty:
if (%A == ""){type "empty"};
// variable x is set to 1
// string a is set to "x"
if (%a == 1);
type "yes";
else
type "no";
The result will be yes, because Origin looks for the value of %a (the value of x), which is 1. In
the following script:
x = 1;
// variable x is set to 1
%a = x;
// string a is set to "x"
if ("%a" == 1)
type "yes";
else
type "no";
The result will be no, because Origin finds the quotation marks around %a, and therefore treats
it as a string, which has a character x, rather than the value 1.
Language Fundamentals
3.1.3 Operators
condition. In the treplace(dataset, value1, value2 [, condition]) function, each value in dataset is
compared to value1 according to the condition. When the comparison is true, the value may be
replaced with Value2 or -Value2 depending on the value of condition. When the comparison is
false, the value is retained or replaced with a missing value depending on the value of
condition. The treplace() function is much faster than the ternary operator.
Performing Calculations
You can use LabTalk to perform both
Scalar Calculations
You can use LabTalk to express a calculation and store the result in a numeric variable. For
example, consider the following script:
inputVal = 21;
myResult = 4 * 32 * inputVal;
The second line of this example performs a calculation and creates the variable, myResult. The
value of the calculation is stored in myResult.
When a variable is used as an operand, and will store a result, shorthand notation can be
used. For example, the following script:
B = B * 3;
In this example, multiplication is performed with the result assigned to the variable B. Similarly,
you can use +=, -=, /=, and ^=. Using shorthand notation produces script that executes faster.
Vector Calculations
In addition to performing calculations and storing the result in a variable (scalar calculation),
you can use LabTalk to perform calculations on entire datasets as well.
Vector calculations can be performed in one of two ways: (1) strictly row-by-row, or (2) using
linear interpolation.
Row-by-Row Calculations
Vector calculations are always performed row-by-row when you use the two general notations:
datasetB = scalarOrConstant <operator> datasetA;
datasetC = datasetA <operator> datasetB;
This is the case even if the datasets have different numbers of elements. Suppose there are
three empty columns in your worksheet: A, B and C. Run the following script:
col(a) = {1, 2, 3};
col(b) = {4, 5};
col(c) = col(a) + col(b);
Language Fundamentals
31
The result in column C will be {5, 7, --}. That is, Origin outputs a missing value for rows in
which one or both datasets do not contain a value.
The vector calculation can also involve a scalar. In the above example, type:
col(c) = 2 * col(a);
Column A is multiplied by 2 and the results are put into the corresponding rows of column C.
Instead, execute the following script (assuming newData does not previously exist):
newData = 3 * Book1_A;
A temporary dataset called newData is created and assigned the result of the vector operation.
Calculations Using Interpolation
Origin supports interpolation through range notation and X-Functions such as interp1 and
interp1xy. Please refer to Interpolation for more details.
3.1.4
Loop Structures
All LabTalk loops take a script as an argument. These scripts are executed repetitively under
specified circumstances. LabTalk provides four loop commands:
1.
2.
3.
4.
repeat
loop
doc -e
for
The LabTalk for-loop is similar to the for loop in other languages. The repeat, loop, and doc -e
loops are less familiar, but are easy to use.
Repeat
The repeat loop is used when a set of actions must be repeated without any alterations.
Syntax: repeat value {script};
Execute script the number of times specified by value, or until an error occurs, or until the
break command is executed.
For example, the following script types the string three times:
repeat 3 { type "line of output"; };
Loop
The loop loop is used when a single variable is being incremented with each successive loop.
Syntax: loop (variable, startVal, endVal) {script};
32
Language Fundamentals
A simple increment loop structure. Initializes variable with a value of starVal. Executes script.
Increments variable and tests if it is greater than endVal. If it is not, executes script and
continues to loop.
For example, the following script outputs numbers from 1 to 4:
loop (ii, 1, 4)
{type "$(ii)";};
Note: The loop command provides faster looping through a block of script than does the for
command. The enhanced speed is a result of not having to parse out a LabTalk expression for
the condition required to stop the loop.
Doc -e
The doc -e loop is used when a script is being executed to affect objects of a specific type,
such as graph windows. The doc -e loop tells Origin to execute the script for each instance of
the specified object type.
Syntax: doc -e object {script};
The different object types are listed in the document command
For example, the following script prints the windows title of all graph windows in the project:
doc -e P {%H=}
For
The for loop is used for all other situations.
Syntax: for (expression1; expression2; expression3) {script};
In the for statement, expression1 is evaluated. This specifies initialization for the loop. Second,
expression2 is evaluated and if true (non-zero), the script is executed. Third, expression3,
often incrementing of a counter, is executed. The process repeats at the second step. The loop
terminates when expression2 is found to be false (zero). Any expression can consist of multiple
statements, each separated by a comma.
For example, the following script output numbers from 1 to 4:
for(ii=1; ii<=4; ii++)
{
type "$(ii)";
}
Note: The loop command provides faster looping through a block of script.
Decision Structures
Decision structures allow the program to perform different sets of actions depending on the
circumstances. LabTalk has three decision-making structures: if, if-else, and switch.
Language Fundamentals
33
If, If-Else
Syntax:
1.
2.
Evaluate testCondition and if true, execute script1. Expressions without conditional operators
are considered true if the result of the expression is non-zero.
If the optional else is present and testCondition is false (zero), then execute script2. There
should be a space after the else. Strings should be quoted and string comparisons are not
case sensitive.
Single statement script arguments should end with a semicolon. Multiple statement script
arguments must be surrounded by braces {}. Each statement within the braces should end with
a semicolon. It is not necessary to follow the final brace of a script with a semicolon.
For example, the following script opens a message box displaying "Yes!":
%M = test;
if (%M == "TEST") type -b "Yes!";
else type -b "No!";
The next script finds the first point in column A that is greater than -1.95:
newbook;
col(1)=data(-2,2,0.01);
val = -1.95;
get col(A) -e numpoints;
for(ii = 1 ; ii <= numpoints ; ii++)
{
// This will terminate the loop early if true
if (Col(A)[ii] > val) break;
}
if(ii > numpoints - 1)
ty -b No number exceeds $(val);
else
type -b The index number of first value > $(val) is $(ii)
The value is $(col(a)[ii]);
It is possible to test more than one condition with a single if statement, for instance:
if(a>1 && a<3) b+=1;
// If true, increment b by 1
The && (logical And) operator is one of several logical operators supported in LabTalk.
Switch
The switch command is used when more than two possibilities are included in a script. For
example, the following script returns b:
ii=2;
switch (ii)
{
case 1:
34
Language Fundamentals
Exit
The exit command prompts an exit from Origin unless a flag is set to restrict the exit.
Continue
The continue command can be used within the loop script. When executed, the remainder of
the loop script is ignored and the interpreter jumps to the next iteration of the loop. This is often
used with a decision structure inside a loop and can exclude illegal values from being
processed by the loop script.
For example, in the following for loop, continue skips the type statement when ii is less than
zero.
for (ii = -10; ii <= 10; ii += 2)
{
if (ii < 0)
continue;
type "$(sqrt(ii))";
}
35
[SectionName]
Scripts under a section declaration belong to that section until another section declaration is
met. A framework for a script with sections will look like the following:
...
Scripts;
...
[Section 1]
...
Scripts;
...
[Section 2]
...
Scripts;
...
Scripts will be run in sequence until a new section flag is encountered, a return statement is
executed or an error occurs. To run a script in sections, you should use the
run.section(FileName, SectionName)
command. When filename is not included, the current running script file is assumed, for
example:
run.section(, Init)
The following script illustrates how to call sections in an OGS file:
type "Hello, we will run section 2";
run.section(, section2);
[section1]
type "This is section 1, End the script.";
[section2]
type "This is section 2, run section 1.";
run.section(, section1);
To run the script, you can save it to your Origin user folder (Such as save as test.ogs), and
type the following in the command window:
run.section(test);
If code in a section could cause an error condition which would prematurely terminate a
section, you can use a variable to test for that case, as in:
[Test]
SectionPassed = 0;
// Here is where code that could fail can be run
...
SectionPassed = 1;
If the code failed, then SectionPassed will still have a value of 0. If the code succeeded, then
SectionPassed will have a value of 1.
36
Language Fundamentals
3.1.5 Macros
3.1.5
Macros
defines a macro called macroName, and associates it with the given script. MacroName can
then be used like a command, and invokes the given script.
For example, the following script defines a macro that uses a loop to print a text string three
times.
def hello
{
loop (ii, 1, 3)
{ type "$(ii). Hello World"; }
};
Once the hello macro is defined, typing the word hello in the Script window results in the
printout:
1. Hello World
2. Hello World
3. Hello World
Once a macro is defined, you can also see the script associated with it by typing
define macroName;
If you define this macro and then type the following in the Script window:
double 5
Language Fundamentals
37
Origin outputs:
20
Macro Property
The macro object contains one property which, when inside a macro, contains the value for the
number of arguments.
Property
Access
Macro.nArg
Read only,
numeric
Description
Inside any macro, this property contains the value for the
number of arguments.
For example:
The following script defines a macro called TypeArgs. If three arguments are passed to the
TypeArgs macro, the macro types the three arguments to the Script window.
Def TypeArgs
{
if (macro.narg != 3)
{
type "Error! You must pass 3 arguments!";
}
else
{
type "The first argument passed was %1.";
type "The second argument passed was %2.";
type "The third argument passed was %3.";
}
};
If you define the TypeArgs macro as in the example, and then type the following in the Script
window:
TypeArgs
One;
If you define the TypeArgs macro as in the example, and then type the following in the Script
window:
TypeArgs
38
Language Fundamentals
3.1.6 Functions
3.1.6
Functions
Functions are the core of almost every programming language; the following introduces
function syntax and use in LabTalk.
Built-In Functions
LabTalk supports many operations through built-in function s, a listing and description of each
can be found in Function Reference. Functions are called with the following syntax:
outputVariable = FunctionName(Arg1 Arg2 ... Arg N);
Below are a few examples of built-in functions in use.
The Count (Function) returns an integer count of the number of elements in a vector.
// Return the number of elements in Column A of the active worksheet:
int cc = count(col(A));
The Ave (Function) performs a group average on a dataset, returning the result as a range
variable.
range ra = [Book1]Sheet1!Col(A);
range rb = [Book1]Sheet1!Col(B);
// Return the group-averaged values:
rb = ave(ra, 5);
// 5 = group size
The Sin (Function) returns the sin of the input angle as type double (the units of the input
angle are determined by the value of system.math.angularunits):
system.math.angularunits=1;
// 1 = input in degrees
double dd = sin(45);
// ANS: DD = 0.7071
User-Defined Functions
Support for multi-argument user-defined function s has been introduced in LabTalk since Origin
8.1. The syntax for user-defined functions is:
function dataType funcName(Arg1 Arg2 ... ArgN) {script;}
Note:
1.
2.
3.
Language Fundamentals
39
This example defines a function that accepts a range argument and returns the mean of the
data in that range:
// Calculate the mean of a range
function double dsmean(range ra)
{
stats ra;
return stats.mean;
}
// Pass a range that specifies all columns ...
// in the first sheet of the active book:
range rAll = 1!(1:end);
dsMean(rAll)=;
This example defines a function that counts the occurrences of a particular weekday in a Date
dataset:
function int iCountDays(dataset ds, int iDay)
{
int iCount = 0;
for(int ii = 1 ; ii <= ds.GetSize() ; ii++)
{
if(weekday(ds[ii], 1) == iDay) iCount++;
}
return iCount;
}
// Here we count Fridays
iVal = iCountDays(col(1),6); // 6 is Friday in weekday(data, 1) sense
iVal=;
40
Language Fundamentals
3.1.6 Functions
{
dataset ds2;
int iRow = 1;
for(int ii = 1 ; ii <= ds1.GetSize() ; ii++)
{
if(ds1[ii] < 0)
{
ds2[iRow] = ds1[ii];
iRow++;
}
}
return ds2;
}
// Assign all negative values in column 1 to column 2
col(2) = dsSub(col(1));
or strings ..
// Get all values in a dataset where a substring occurs
function string strFind(dataset ds, string strVal)
{
string strTest, strResult;
for( int ii = 1 ; ii <= ds.GetSize() ; ii++ )
{
strTest$ = ds[ii]$;
if( strTest.Find(strVal$) > 0 )
{
strResult$ = %(strResult$)%(CRLF)%(strTest$);
}
}
return strResult$;
}
// Gather all instances in column 3 where "hadron" occurs
string MyResults$ = strFind(col(3),"hadron")$; // Note ending '$'
MyResults$=;
Language Fundamentals
41
A more detailed example using tree variables in LabTalk functions and passing variables by
reference, is available in our online Wiki.
Another example of passing string argument by reference is given below that shows that the $
termination should not be used in the function call:
//return range string of the 1st sheet
//actual new book shortname will be returned by Name$
Function string GetNewBook(int nSheets, ref string Name$)
{
newbook sheet:= nSheets result:=Name$;
string strRange$ = "[%(Name$)]1!";
return strRange$;
}
When calling the above function, it is very important that the Name$ argument should not have
the $, as shown below:
string strName$;
string strR$ = GetNewBook(1, strName)$;
strName$=;
strR$=;
Dataset Functions
Origin also supports defining mathematical functions that accept arguments of type double and
return type double. The general syntax for such functions is:
funcName(X) = expressionInvolvingX.
We call these dataset functions because when they are defined, a dataset by that name is
created. This dataset, associated with the function, is then saved as part of the Origin project.
Once defined, a dataset function can be referred to by name and used as you would a built-in
LabTalk function.
For example, enter the following script in the Script window to define a function named Salary:
Salary(x) = 52 * x
which yields the result Salary(100)=5200. In this case, the resulting dataset has only one
element. But if a vector (or dataset) were passed as an input argument, the output would be a
dataset of the same number of elements as the input.
42
Language Fundamentals
3.1.6 Functions
As with other datasets, user-defined dataset functions are listed in dialogs such as Plot Setup
(and can be plotted like any other dataset), and in the Available Data list in dialogs such as
Layer n.
If a 2D graph layer is the active layer when a function is defined, then a dataset of 100 points is
created using the X axis scale as the X range and the function dataset is automatically added
to the plot layer.
The Function Graph Template (FUNCTION.OTP, accessible from the Standard Toolbar or
the File: New menu) also creates and plots dataset functions.
Origin's Function Plots feature allows new dataset functions to be easily created from any
combination of built-in and user-defined functions. In addition, the newly created function is
immediately plotted for your reference.
Access this feature in either of two ways:
1.
2.
From there, in the Function tab of the Plot Details dialog that opens, enter the function
definition, such as, F1(x) = 5*sin(x)+1 and press OK. The function will be plotted in the graph.
You may define another function by clicking on the New Function button in the graph and
adding another function in Plot Details. Press OK, and the new function plot will be added to
the graph. Repeat if more functions are desired.
Fitting Functions
In addition to supporting many common functions, Origin also allows you to create your own
fitting functions to be used in non-linear curve fitting. User-defined fitting functions can also be
used to generate new datasets, but calling them requires a special syntax:
nlf_FitFuncName(ds, p1, p2, ... pn)
where the fitting function is named FitFuncName, ds is a dataset to be used as the
independent variable, and p1--pn are the parameters of the fitting function.
As a simple example, if you defined a simple straight-line fitting function called MyLine that
expected a y-intercept and slope as input parameters (in that order), and you wanted column C
in the active worksheet to be the independent variable (X), and column D to be used for the
function output, enter:
// Intercept = 0, Slope = 4
Col(D) = nlf_MyLine(Col(C), 0, 4)
Scope of Functions
User-defined functions have a scope (like variables) that can be controlled. For more on scope
see Data Types and Variables. Please note that there are no project functions or global
functions, that is different from scope of variable.
Language Fundamentals
43
If the function is defined in a section of *.ogs file without @global=1, then it can only be called
in its own section.
[Main]
function double dGeoMean(dataset ds)
{
double dG = ds[1];
for(int ii = 2 ; ii <= ds.GetSize() ; ii++)
dG *= ds[ii]; // All values in dataset multiplied together
return exp(ln(dG)/ds.GetSize());
}
// can call the function in [main] section
dGeoMean(col(1))=;
[section1]
// the function can NOT be called in this section
dGeoMean(col(1))=;
44
Language Fundamentals
3.1.6 Functions
If the function is defined in a block without @global=1, it can not be called outside this block.
[Main]
{ // define the function between braces
function double dGeoMean(dataset ds)
{
double dG = ds[1];
for(int ii = 2 ; ii <= ds.GetSize() ; ii++)
dG *= ds[ii]; // All values in dataset multiplied together
return exp(ln(dG)/ds.GetSize());
}
}
// can Not call the function outside the braces
dGeoMean(col(1))=; // an error: Unknown function
Start a new Project and use View: Code Builder menu item to open Code
Builder
2.
Expand the Project branch on the left panel tree and double-click to open
the ProjectEvents.OGS file. This file exists by default in any new Project.
3.
4.
5.
In Origin, save the Project to a desired folder location. The OGS file is saved
with the Project, so the user-defined function is available for use in the
Project.
6.
Open the just saved project again. This will trigger the [AfterOpenDoc]
section to be executed and thus our myPeak function to be defined.
7.
8.
In the Function tab of Plot Details dialog that opens, enter the function
definition:
F1(x) = myPeak(x, 3)
and press OK. The function will be plotted in the graph.
9.
Click on the New Function button in the graph and add another function in
Plot Details using the expression:
F2(x) = myPeak(x, 4)
and press OK
Language Fundamentals
45
3.2.1
Range Notation
Introduction to Range
Inside your Origin Project, data exists in four primary places: in the columns of a worksheet, in
a matrix, in a loose dataset, or in a graph. In any of these forms, the range data type allows
you to access your data easily and in a standard way.
Once a range variable is created, you can work with the range data directly; reading and
writing to the range. Examples below demonstrate the creation and use of many types of range
variables.
Before Origin Version 8.0, data were accessed via datasets as well as cell(), col() and wcol()
functions. The cell(), col() and wcol() functions are still very effective for data access, provided
that you are working with the active sheet in the active book. The Range notation essentially
expanded upon these functions to provide general access to any book, any sheet, or any plot
inside the Origin Project.
Note : Not all X-Functions can handle complexities of ranges such as multiple columns or
noncontiguous data. Where logic or documentation does not indicate support, a little
experimentation is in order.
Note : Data inside a graph are in the form of Data Plots and they are essentially references to
columns, matrix or loose datasets. There is no actual data stored in graphs.
Language Fundamentals
The right-hand side of the range assignment, RangeString, changes depending on what type
of object the range points to. Individual Range Strings are defined in the sections below on
Types of Range Data.
Range notation is used exclusively to define range variables. It cannot be used
as a general notation for data access on either side of an expression.
column subrange
block of cells
XY range
XYZ range
composite range
In the case of rows the indices must be surrounded by square brackets, so a full range
assignment statement for several rows of a worksheet column looks like:
range rc1 = [Book1]Sheet2!Col(3)[10:end];
Language Fundamentals
47
The old way of accessing cell contents, via the Cell function is still supported.
If you wish to access column label rows using range, please see Accessing Metadata and the
Column Label Row Reference Table.
Column
When declaring range variable for a column on the active worksheet, the book and sheet part
can be dropped, such as:
range rc = Col(3)
You can further simplify the notation, as long as the actual column can be identified, as shown
below:
range aa=1;
range bb=B;
range cc="Test A"; // col with Long Name ("Test A"), active worksheet
Multiple range variables can be declared on the same line, separated by comma. The above
example could also have been written as:
range aa = 1, bb = B, cc = "Test A";
Or if you need to refer to a different book sheet, and all in the same sheet, then the book sheet
portion can be combined as follows:
range [Book2]Sheet3 aa=1, bb=B, cc="Test A";
Because Origin does not force a column's Long Name to be unique (i.e., multiple columns in a
worksheet can have the same Long Name), the Short Name and Long Name may be specified
together to be more precise:
range dd = D"Test 4";
Once you have a column range, use it to access and change the parameters of a column:
range rColumn = [Book1]1!2;
rColumn.digitMode = 1;
// Range is a Column
// Use Set Decimal Places for display
rColumn.digits = 2;
Or perform computations:
// Point to column 1 of sheets 1, 2 and 3 of the active workbook:
range aa = 1!col(1);
range bb = 2!col(1);
range cc = 3!col(1);
cc = aa+bb;
When performing arithmetic on data in different sheets, you need to use range
variables. Direct references to range strings are not yet supported. For
example, the script Sheet3!col(1) = Sheet1!col(1) + Sheet2!col(1); will not
work! If you really need to write in a single line without having to declare range
variables, then another alternative is to use Dataset Substitution
Page and Sheet
Besides a single column of data, range can be used to access any portion of a page object:
Use a range variable to access an entire workbook:
// 'rPage' points to the workbook named 'Book1'
48
Language Fundamentals
rSheet.AddCol(StdDev);
Column Subrange
Use a range variable to address a column subrange, such as
// A subrange of col(a) in book1 sheet2
range cc = [book1]sheet2!col(a)[3:10];
Or if the desired workbook and worksheet are active, the shortened notation can be used:
// A subrange of col(a) in book1 sheet2
range cc = col(a)[3:10];
Use range variables, you can perform computation or other operations on part of a column. For
example:
range r1=1[5:10];
range r2=2[1:6];
r1 = r2; // copy values in row 1 to 6 of column 2 to rows 5 to 10 of column 1
r1[1]=;
// this should output value in row 5 of column 1, which equates to row 1 of column 2
Block of Cells
Use a range to access a single cell or block of cells (may span many rows and columns) as in:
range aa = 1[2];
range bb = 1[1]:3[10];
Note: a range variable representing a block of cells can be used as an X-Function argument
only, direct calculations are not supported.
Matrix Data
For matrix data, the RangeString is
[MatrixBookName]MatrixSheetNameOrIndex!MatrixObject
Make an assignment such as:
// Second matrix object on MBook1, MSheet1
range mm = [MBook1]MSheet1!2;
Access the cell contents of a matrix range using the notation RangeName[row, col]. For
example:
range mm=[MBook1]1!1;
mm[2,3]=10;
The above range assignment is a shortened notation for the full expression,
[MBook1]MSheet1!1 (i.e., [PageName]LayerName!ObjectNumber )
which could have also been used.
Language Fundamentals
49
If the matrix contains complex numbers, the string representing the complex number can be
accessed as below:
string str$;
str$ = mm[3,4]$;
Graph Data
For graph data, the RangeString is
[GraphWindowName]LayerNameOrIndex!DataPlot
An example assignment looks like
range ll = [Graph1]Layer1!2;
50
Language Fundamentals
Additional documentation is available for the Create (Command) (for creating loose datasets),
the [??] range notation (for creating a range from a loose dataset), the fitlr X-Function, and the
StringArray (Object) (specifically, the Append method, which is introduced since Origin 8.0
SR6).
Loose Dataset
Loose Datasets are similar to columns in a worksheet but they don't have the overhead of the
book-sheet-column organization. They are typically created with the create command, or
automatically created from an assignment statement without Dataset declaration.
The RangeString for a loose dataset is:
[??]!LooseDatasetName
An example assignment looks like this:
range xx = [??]!tmpdata_a;
To show how this works, we use the plotxy X-Function to plot a graph of a loose dataset.
// Create 2 loose datasets
create tmpdata -wd 50 a b;
tmpdata_a=data(50,1,-1);
tmpdata_b=normal(50);
// Declare the range and explicitly point to the loose dataset
range aa=[??]!(tmpdata_a, tmpdata_b);
// Make a scatter graph with it:
plotxy aa;
Language Fundamentals
51
// Delay
r2/=4;
sec -p 1.5;
r2+=.4;
sec -p 1.5;
// Delay
r1=10+r1/3;
Direct calculations on a column range variable that addresses a range of cells is supported.
For example:
range aa = Col(A)[10:19]; // Row 10 to 19 of column A
aa += 10;
Language Fundamentals
And now define another range that resolves to the last (rightmost) column of range rwks; that
is, it will point to the newly made column:
range r2 = %(rwks)wcol( %(rwks)!wks.ncols );
With the range assignments in place it is easy to perform calculations and assignments, such
as:
r2=r1/10;
which divides the data in range r1 by 10 and places the result in the column associated with
range r2.
X-Function Argument
Many X-functions use ranges as arguments. For example, the stats X-Function takes vector as
input and calculates descriptive statistics on the specified range. So you can type:
stats [Book1]Sheet2!(1:end); // stats on the second sheet of book1
stats Col(2);
The input vector argument for this X-Function is then specified by a range variable
Some X-Functions use a special type of range called XYRange, which is essentially a
composite range containing X and Y as well as error bar ranges.
The general syntax for an XYRange is
(rangeX, rangeY)
Language Fundamentals
53
but you can also skip the rangeX portion and use the standard range notation to specify an
XYRange, in which case the default X data is assumed.
The following two notations are identical for XYRange,
(, rangeY)
rangeY
For example, the integ1 X-Function takes both input and output XYRange,
// integrate col(1) as X and col(2) as Y,
// and put integral curve into columns 3 as X and 4 as Y
integ1 iy:=(1,2) oy:=(3,4);
// same as above except result integral curve output to col(3) as Y,
// and sharing input's X of col(1):
integ1 iy:=2 oy:=3;
If you issue this command in the Command Window, it prints a list such as:
Session:
1
2
MYRANGE
MYSTR
PI
[book1]sheet1!col(b)
"abc"
3.1415926535898
From Origin 8.1, we added more switches (given below) to list particular session variables:
Option
54
Option
aa
ac
Constants (session)
af
afc
afp
ag
ar
as
at
Language Fundamentals
--
--
range ab=2;
range ac=3;
range bb=4;
list a;
Option
ra
al
same as -ra
rar
Range variable
ras
String variable
rav
Numeric variable
rac
Constant
rat
Tree variable
raa
String array
rag
Graphic object
raf
Local/Session Function
Language Fundamentals
55
These notations are particularly handy in the plotxy X-Function, as demonstrated here:
// Plot all columns in worksheet using their column designations:
plotxy (?,1:end);
Composite Range
A Composite Range is a range consisting of multiple subranges. You can construct composite
ranges using the following syntax:
// Basic combination of three ranges:
(range1, range2, range3)
// Common column ranges from multiple sheets:
(sheet1,sheet2,sheet3)!range1
// Common column ranges from a range of sheets
(sheet1:sheetn)!range1
To show how this works, we will use the wcellcolor X-Function to show range and plotxy to
show XYRange. Assume we are working on the active book/sheet, with at least four columns
filled with numeric data:
// color several different blocks with blue color
wcellcolor (1[1]:2[3], 1[5]:2[5], 2[7]) color(blue);
// set font color as red on some of them
56
Language Fundamentals
To try plotxy, we will put some numbers into the first sheet, add a new sheet, and put more
numbers into the second sheet.
// plot A(X)B(Y) from both sheets into the same graph.
plotxy (1:2)!(1,2);
// Activate workbook again and add more sheets and fill them with data.
// Plot A(X)B(Y) from all sheets between row2 and row10:
plotxy (1:end)!(1,2)[2:10];
Note: There exists an inherent ambiguity between a composite range, composed of ranges r1
and r2 as in (r1,r2), and an XY range composed of columns named r1 and r2, i.e., (r1,r2).
Therefore, it is important that one keep in mind what type of object is assigned to a given range
variable!
3.2.2
Substitution Notation
Introduction
When a script is executed, it is sent to the LabTalk interpreter. Among other tasks, the
interpreter searches for special substitution notations which are identified by their initial
characters, % or $. When a substitution notation is found, the interpreter replaces the original
string with another string, as described in the following section. The value of the substituted
string is unknown until the statement is actually executed. Thus, this procedure is called a runtime string substitution.
There are three types of substitutions described below:
%A - %Z
Using a string register is the simplest form of substitution. String registers are substituted by
their contents during script execution, for example
FDLOG.Open(A);
%B=FDLOG.path$;
String registers are used more often in older scripts, before the introduction of string variables
(since Origin 8), which allows for more reliable codes. To resolve string variables, %( )
substitution is used, and is discussed in the next section.
Language Fundamentals
57
%( ) Substitution
String Expression Substitution
While LabTalk commands often accept numeric expressions as arguments, none accept a
string expression. So if a string is needed as an argument, you have to pass in a string variable
or a string expression using the %( ) substitution to resolve run-time values. The simplest form
of a string expression is a single string variable, like in the example below:
string str$ = "Book2";
win -o %(str$) {wks.ncols=;}
Keyword Substitution
The %( ) substitution notation is also used to insert non-printing characters (also called control
characters), such as tabs or carriage returns into strings. Use LabTalk keywords to access
these non-printing characters. For example,
// Insert a carriage-return, line-feed (CRLF) into a string:
string ss$ = "Hello%(CRLF)Goodbye";
ss$=;
// ANS: 'Hello', 'Goodbye' printed on separate lines
// Or use %() substitution to display the string variable:
type %(ss$);
Before 8.1, you must use column and row index and numeric cell will always return full
precision. Origin 8.1 had added support for column to allow both index and name, and row will
58
Language Fundamentals
also support Label Row Characters such as L for longname. There is also an optional format
argument that you can use to further specify numeric cell format when converting to string.
Assuming Book2, sheet3 col(Signal)[3] has a numeric value of 12.3456789, then
//format string C to use current column format
type "Col(Signal)[3] displayed value is %([Book2]Sheet3,Signal,3,C)";
A=%([Book2]Sheet3,Signal,3);//full precision if format not specified
A=;// shows 12.3456789
type "Showing 2 decimal places:%([Book2]Sheet3,Signal,3,.2)";
type %A;
%B = %([Book1]Sheet3,2); // Column 2 of Book1, Sheet3
type %B;
In the above example, the name of the dataset in column 2 in the active worksheet is
substituted for the expression on the right, and then assigned to %A and %B. In the second
case, if the named book or sheet does not exist, no error occurs but the substitution will be
invalid.
Note: You can use parentheses to force assignment to be performed on the dataset whose
name is contained in a string register variable instead of performing the assignment on the
string register variable itself.
%A = %(Book1,2);
type %A;
Language Fundamentals
59
The column name should be quoted if using long name. If not quoted, then Origin will first
assume short name, if not found, then it will try using long name. So in the example above,
%([%H]sheet3, "calibrated")
will use long name only if there is no column with such a short name.
Return Value
@#
@C
Remove trailing zeros when Set Decimal Places or Significant Digits is chosen in
Numeric Display drop down list of the Worksheet Column Format dialog box.
@DZ
60
0 = display trailing zeros. 1 = remove trailing zeros for Set Decimal Places =. 2
= remove trailing zeros for Significant Digits =. 3 = remove for both.
@E#
@H#
@PC
Page Comments
@PC1
Language Fundamentals
@OY
Returns the offset from the left-most selected Y column to the columnNumber column
in the current selection.
@OYX
Returns the offset from the left-most selected Y column to the columnNumber Y
column counting on Y columns in the current selection.
@OYY
Returns the offset from the left-most selected Y column to the columnNumber X
column counting on X columns in the current selection.
@T
@W
Returns information stored at the Book or Sheet level as well as imported file
information. Refer to the table below for the @W group of variables.
@X
Returns the number of the worksheet's X column. Columns are enumerated from left
to right, starting from 1. Use the syntax: %(worksheetName, @X);
@Xn
Returns the name of the worksheet's X column. Use the syntax: %(worksheetName,
@Xn);
@Y
Returns the offset from the left-most selected column to the columnNumber column
in the current selection.
@Y-
Returns the column number of the first Y column to the left. Returns columnNumber if
the column is a Y column, or returns 0 when the Y column doesn't exist. Use the
syntax: %(worksheetName, @Y-, ColumnNumber);
@Y#
@Y+
Returns the column number of the first Y column to the right. Returns columnNumber
if the column is a Y column, or returns 0 when the Y column doesn't exist. Use the
syntax: %(worksheetName, @Y+, ColumnNumber);
@YS
Returns the number of the first selected Y column to the right of (and including) the
columnNumber column.
Language Fundamentals
61
@Z#
Return Value
@W
@WFn
Returns the information in varOrNodeName for the nth imported file. The variable can
be seen in workbook Organizer.
@WS
@WC
Examples of @ Substitution
This script returns the column name of the first column in the current selection range (for
information on the selc1 numeric system variable, see System Variables):
%N = %(%H, @col, selc1);
%N =;
The following line returns the active page's long name to a string variable:
string PageName$ = %(%H, @PL);
The script below returns the column type for the fourth column in Book 2, Sheet 3:
string colType$ = %([Book2]Sheet3, @T, 4);
colType$=;
An import filter can create a tree structure of information about the imported file that gets stored
with the workbook. Here, for a multifile import, we return the number of points in the 3rd
dataset imported into the current book:
%z=%(%H,@WF3,variables.header.noofpoints);
%z=
62
Language Fundamentals
If the currently active worksheet window has six columns (XYYYYY) and columns 2, 4, and 5
are selected, then the following script shows the number of the first selected Y column to the
right of (and including) the column whose index is equal to columnNumber (the third
argument):
loop(ii,1,6)
{
type -l %(%H, @YS, ii),;
}
type;
This outputs:
2,2,4,4,5,0,
Legend Substitution
Graph legends also employ the %( ) substitution notation. The first argument must be an
integer to differentiate from other %( ) notations where the first argument is a worksheet
specifier. The legend substitution syntax is:
%(n[, @option])
where n is the index of the desired data plot in the current layer; n might be followed by more
options, typically plot designation character(X, Y or Z) associated with the data plot, which
when not specified, will assumed to be Y; @option if specified, controls the legend contents.
For example:
// In the legend of the current graph layer ...
// display the Long Name for the first dependent dataset.
legend.text$ = %(1Y, @LL)
// Equivalent command (where, Y, the default, is understood):
legend.text$ = %(1, @LL)
Alternatively, display in the legend the Short Name for the second independent (i.e., X)
dataset:
legend.text$ = %(2X, @LS)
Language Fundamentals
63
$( ) Substitution
The $() notation is used for numeric to string conversion. This notation evaluates the given
expression at run-time, converts the result to a numeric string, and then substitutes the string
for itself.
The notation has the following form:
$(expression [, format])
where expression can be any mathematical expression, but typically a single number or
variable, and format can be an Origin output format or a C-language format.
Default Format
The square brackets indicate that format is an optional argument for the $() substitution
notation. If format is excluded Origin will carry expression to the number of decimal digits or
significant figures specified in the Tools:Options dialog. To achieve the appropriate output,
Origin will use scientific notation where necessary. For example, if Tools:Options:Numeric
Format:Digits is set to 5 decimal places, we get the following:
double aa = 9.5892345823;
type $(aa);
// ANS: 9.58923
double bb = 20346598723456;
type $(bb);
// ANS: 2.03466E13
double cc = 0.0000000000003245234;
type $(cc);
// ANS: 3.24523E-13
Origin Formats
Origin has several native options to format your output.
Format
*n
*n*
S*n
E*n
.n
S.n
64
Description
Language Fundamentals
Dn
Display date in format n from the Display drop down list of the Column Properties
dialog box
Tn
Display time in format n from the Display drop down list of the Column Properties
dialog box
#n
// ANS: 1.2
// ANS: 1.23
yy = 1.10001;
type "yy = $(yy, *4)";
type "yy = $(yy, *4*)";
// ANS: 1.100
// ANS: 1.1
zz = 203465987;
type "zz = $(zz, E*3)";
type "zz = $(zz, S*3)";
// ANS: 203M
// ANS: 2.03E+08
// ANS: 02 PM
// ANS: 00045
C-Language Formats
The format portion of the $() notation also supports C-language formatting statements.
Option
Un/Signed
Output
Input Range
d, i
SIGNED
-2^31 -- 2^31 -1
f, e, E, g,
G
SIGNED
+/-1e290 -- +/-1e290
Language Fundamentals
65
UNSIGNED
-2^31 -- 2^32 - 1
Note that in the last category, negative values will be expressed as twos complements.
Here are a few examples of C codes in use in LabTalk:
double nn = -247.56;
type "Value: $(nn,%d)";
// ANS: -247
double nn = 1.23456e5;
type "Values: $(nn, %9.4f), $(nn, %9.4E), $(nn, %g)";
// ANS: 123456.0000, 1.2346E+005, 123456
double nn = 1.23456e6;
type "Values: $(nn, %9.4f), $(nn, %9.4E), $(nn, %g)";
// ANS: 123456.0000, 1.2346E+006, 1.23456e+006
double nn = 65551;
type "Values: $(nn, %o), $(nn, %u), $(nn, %X)";
// ANS: 200017, 65551, 1000F
// ANS: 1.00M
Then we can create a variable A2 with the value 3 with this notation:
A$(A) = 3;
66
Language Fundamentals
3.2.3
LabTalk Objects
LabTalk script programming provides access to various objects and their properties. These
objects include components of the Origin project that are visible in the graphical interface, such
as worksheets columns and data plots in graphs. Such objects are referred to as Origin
Objects, and are the subject of the next section, Origin Objects.
The collection of objects also includes other objects that are not visible in the interface, such as
the INI object or the System object. The entire set of objects accessible from LabTalk script is
found in Alphabetical Listing of Objects.
In general, every object has properties that describe it, and methods that operate on it. What
those properties and methods are depend on the particular object. For instance, a data column
will have different properties than a graph, and the operations you perform on each will be
different as well. In either case, we need a general syntax for accessing an object's properties
and calling it's methods. These are summarized below.
Also, because objects can be renamed, and objects of different scope may even share a
name, object names can at times be ambiguous identifiers. For that reason, each object is
assigned a unique universal identifier (UID) by Origin and functions are provided to go back
and forth between an object's name and it's UID.
Properties
A property either sets or returns a number or a text string associated with an object with the
following syntax:
objName.property (For numeric properties)
objName.property$ (For text properties)
Where objName is the name of the object; property is a valid property for the type of object.
When accessing text objects, you should add the $ symbol after property.
Language Fundamentals
67
For example, you can set object properties in the following way:
// Set the number of columns on the active worksheet to 10
wks.ncols = 10;
// Rename the active worksheet 'MySheet'
wks.name$ = MySheet;
Methods
Method s are a form of immediate command. When executed, they carry out a function related
to the object and return a value. Object methods use the following syntax:
objName.method(arguments)
Where objName is the name of the object; method is a valid method for the type of object; and
arguments determine how the method functions. Some arguments are optional and some
methods do not require any arguments. However, the parentheses "()" must be included in
every object method statement, even if their contents are empty.
For example, the following code uses the section method of the run object to call the Main
section within a script named computeCircle, and passes it three arguments:
double RR = 4.5;
string PA$ = "Perimeter and Area";
run.section(computeCircle, Main, PA$ 3.14 R);
68
Language Fundamentals
Besides a range name, the UID can be recovered from the names of columns, sheets, or
books themselves:
// Return the UID of column 2
int nColUID = range2uid(col(2));
// Return the UID of a sheet or layer
int nLayerUID = range2uid([book2]Sheet3!);
// Return the UID of the active sheet or layer
nLayerUID =range2uid(!);
// Return the UID of sheet3 of the active workbook
nLayerUID =range2uid(sheet3!);
// Return the UID of the column with index 'jj' within a specific sheet
nColUID = range2uid([Book1]sheet2!wcol(jj));
Additionally, the range2uid function works with the system variable %C, which holds the name
of the active data plot or data column:
// Return the UID of the active data plot or selected column
nDataSetUID = range2uid(%C);
Language Fundamentals
69
There is also a simpler way to directly use the range string return from GetLayer and GetPage
in string form:
// col range for active plot, -w switch default to get the Y column
range -w aa=%C;
// sheet range string for the sheet the column belongs to
range ss = aa.GetLayer()$;
// show sheet name
ss.name$=;
// book range string from that col
range bb = aa.GetPage()$;
// show book name
bb.name$=;
When you create a range mapped to a page, the range variable has the properties of a PAGE
(Object).
When you create a range mapped to a graph layer, the range variable has the properties of a
LAYER (Object).
When you create a range mapped to a workbook layer (a worksheet or matrix sheet), the range
variable has the properties of a WKS (Object).
3.2.4
Origin Objects
There is a set of LabTalk Objects that is so integral to scripting in Origin that we give them a
separate name: Origin Objects. These objects are visible in the graphical interface, and will be
saved in an Origin project file (.OPJ). Origin Objects are the primary components of your Origin
Project. They are the following:
Page (Workbook/Graph Window/Matrix Book) Object
Worksheet Object
Column Object
Layer Object
Matrix Object
Dataset Object
Graphic Object
In the sections that follow, tables list object methods and examples demonstrate the use of
these objects in script.
70
Language Fundamentals
Page
LabTalk Object Type:
Window
In Origin, there are several kinds of windows, workbook window, matrix book window and
graph window. Each of these windows contains three hierarchies.
Workbook -> Worksheet -> Column
Matrix Book -> Matrix Sheet -> Matrix Object
Graph Window -> Layer -> Dataplot
Page object can be used to read/control the properties of graph, workbook and matrix window.
For example, we can active a worksheet or a graph layer by page.active property. Or using
the page.nlayers property, we can either know how many layers in a graph window, or the
number of sheets in a workbook. For more details, you can see examples below.
Properties:
Page properties can be accessed using the following syntax:
[winName!]page.property =
Applies To
Access
Description
page.active
graphs,
workbooks,
matrices
Read/write,
numeric
page.active$
workbooks,
matrices
Read/write,
string
page.activedataindicator
workbooks,
matrices
Read/write,
numeric
page.baseColor
graphs
Read/write,
numeric
page.closeBits
graphs
Read/write,
numeric
page.cntrl
graphs,
matrices
Read/write,
numeric
Language Fundamentals
71
72
page.cntrlColor
graphs
Read/write,
numeric
page.cntrlHeight
graphs
Read/write,
numeric
page.cntrlRegion
graphs
Read/write,
numeric
Set page.cntrlregion = 1 to
display a control region. A control
region provides a convenient
location for placing tools. Set
page.contrlregion = 0 to disable
the display.
page.cntrlWidth
graphs
Read/write,
numeric
page.comments$
graphs,
workbooks,
matrices
Read/write,
string
Page-level comments.
page.connect
graphs
Read/write,
numeric
Language Fundamentals
page.customheight
page.customwidth
page.dvHeight
page.dvLeft
page.dvTop
graphs
Read/write,
numeric
Print cropmarks
graphs
Read/write,
numeric
graphs
Read/write,
numeric
Read only,
numeric
When page.viewPaper = 0
(viewpaper off), page.dvheight =
pixel height of the page (white
area). When page.viewPaper = 1
(viewpaper on), page.dvheight
will be reduced by 2*page.dvtop.
The property value changes as the
window is resized.
Read only,
numeric
When page.viewPaper = 0
(viewpaper off), page.dvleft = 0.
When page.viewPaper = 1
(viewpaper on), page.dvleft = 12.
The property value changes as the
window is resized.
Read only,
numeric
When page.viewPaper = 0
(viewpaper off), page.dvtop = 0.
When page.viewPaper = 1
(viewpaper on), page.dvtop = 9.
The property value changes as the
window is resized.
graphs
graphs
graphs
page.dvWidth
graphs
Read only,
numeric
When page.viewPaper = 0
(viewpaper off), page.dvwidth =
pixel width of the page (white
area). When page.viewPaper = 1
(viewpaper on), page.dvwidth will
be reduced by 2*page.dvleft. The
property value changes as the
window is resized.
page.extInfo
workbooks
Read only,
numeric
Language Fundamentals
73
page.filename$,
page.filepath$
page.gradColor
graphs,
workbooks
Read/write,
string
Read/write,
numeric
page.height
graphs
Read/write,
numeric
page.icons
graphs
Read/write,
numeric
Read only,
numeric
page.isEmbedded
(8.0 SR0)
74
workbooks,
matrices
graphs
page.label$
graphs,
workbooks,
matrices
Read/write,
string
page.layoutCntrl
graphs
Read/write,
numeric
page.layoutSpeed
layout
Read/write,
Language Fundamentals
numeric
page.longname$
workbooks,
matrices
Read/write,
string
page.name$
graphs,
workbooks
Read only,
string
Short name
page.nLayers
graphs,
workbooks,
matrices
Read only,
numeric
page.nLinks
graphs
Read only,
numeric
page.noClick
graphs,
workbooks,
matrices
Read/write,
numeric
page.order
graphs
Read/write,
numeric
Slide Index
page.orientation
workbooks,
matrices
Read/write,
numeric
page.resx
graphs,
workbooks,
matrices
Read/write,
numeric
page.resy
graphs,
workbooks,
matrices
Read/write,
numeric
Language Fundamentals
75
page.rtMaxPts
graphs
Read/write,
numeric
page.sysWin
graphs,
workbooks,
matrices
Read/write,
numeric
page.title
graphs,
worksheets,
matrices
Read/write,
numeric
graphs
Read/write,
numeric
graphs
Read/write,
numeric
page.viewPaper
graphs
Read/write,
numeric
page.width
graphs
Read/write,
numeric
Read/write,
numeric
page.unit
page.viewmode
page.zoomIn,
page.zoomOut,
page.zoomWhole,
page.zoomLayer
76
graphs
Language Fundamentals
Methods:
To run the object methods, use the following script:
[winName!]page.method(argument)
Method
Description
page.dimUpdate()
page.getFileName(A)
page.layerNumber(layerName)
page.reorder(n[, m])
Examples:
Active Page Layer
This script uses the active property to set layer 2 in the Graph1 window as the active layer .
Graph1!page.active = 2;
Active Worksheet
Page.active property can also activate a worksheet. Such as:
page.active = 2; // Active the 2nd worksheet
page.active$ = "Raw Data" // Active the worksheet named "Raw Data"
Note that when specifying window's name in page.active property, it just make the layer or
worksheet as active worksheet on the window, but not active the window. The below example
demonstrates how this happens.
// Create a new workbook and save the name to bkn$
newbook result:=bkn$;
// Add a new worksheet to bkn$, now there are two worksheets
// and sheet2 is active worksheet
Language Fundamentals
77
Reorder Layers
This script uses the reorder() method to change layer 1 to layer 2. Layer 2 will move up a
position to layer 1. Use the Edit: Add & Arrange Layers menu command to physically move
the positions.
Graph1!page.reorder(1,2);
Although there is a page.name$, this property is read only, so you can just get the window's
name by this property. To rename a window , use win -r command.
string wn$ = page.name$; // Get the window name
win -r %(wn$) Source; // Rename the window name to Source
And you can use a similar way to get the number of worksheets in a book.
book1!page.nlayers=;
Wks
The WKS object has properties and methods related to an Origin sheet (Note: A sheet can be
either Worksheet or Matrix Sheet). You can use range notation to define a worksheet object:
range wksObject = [winName]sheetName!
If no range is specified, Origin will work on the active sheet. Once a worksheet (matrix sheet)
object is defined, the object properties and methods can be accessed using the following
syntax:
78
Language Fundamentals
wksObject.property
wksObject.method(argument)
For example:
range rWa = [Book2]Sheet2!;
rWa.colSel(2,1);
rWa.vGrids = 0;
range rWb = !;
rWb.AddCol(NewColumn);
NumColumns = rWb.ncols;
Properties
When operating on the active worksheet or matrix sheet, you can use wks.property to access
sheet properties; otherwise, range notation should be used.
Property
Access
Description
Example:
range aa=[book1]sheet2!;
wks.AutoAddRows
(8.0 SR0)
Read/write
integer
Read only
integer
wks.cNamen$
Read only
string
Read/write
integer
wks.cNameMode
Language Fundamentals
79
wks.col
Read/write
integer
wks.colWidth
Read/write
integer
wks.export
Read/write
wks.font
Read/write
integer
Font (by index) of the Standard name style in the sheet. You
can use the font(name) function to get a font's index, like
wks.font = font(Courier New);
wks.fSize
Read/write
float
wks.hGrids
wks.vGrids
Read/write
integer
wks.import
Read/write
wks.index
Read only
integer
wks.joinMode
80
Read/write
integer
Language Fundamentals
wks.maxRows
Read only
integer
Scan all columns and find the largest row index that has
value. You can setup a worksheet with wks.nRows, but before
filling it with values, wks.maxRows will still be zero. To reduce
the size of a worksheet, use wks.nRows, as this property is
only to get the longest column row size.
wks.multiX
Read only
integer
wks.name$
Read/write
string
Worksheet name.
Read/write
integer
wks.nCols
Read/write
integer
wks.nRows
Read/write
integer
wks.loadedgrid
wks.nMats
(8.5.0)
Example:
wks.rhw
Read/write
integer
wks.sel
Read only
integer
wks.useFont
Read/write
integer
Read/write
integer
wks.userParamn
(8.0 SR0)
Language Fundamentals
81
Read/write
string
(8.0 SR0)
Methods
Method
82
Description
wks.addCol(name)
wks.colSel(colNum, n)
wks.findLabels(ind, K, [n])
wks.insert(name list)
Language Fundamentals
wks.isColSel([colNum])
[ToWks!]wks.join(FromWks)
wks.labels(str)
(8.0 SR1)
wks.labels(0);
// Set to show long name, units
and comments
wks.labels(LUC)
// Show Comments, User Parameter
1, and Long Name
wks.labels(CD1L)
Language Fundamentals
83
wks.template( FileName[,[WinName],NumRows])
Examples
Work with Worksheet Columns and Rows
When a new worksheet is created, there are 2 columns and 32 rows by default. To read or set
the number of worksheet columns and rows, you can use the wks.ncols and wks.nrows
properties.
newsheet; // Add a new worksheet
wks.ncols = 5; // Set the number of columns to 5
wks.nrows = 100; // Set the number of rows to 100
Note that Origin will delete columns beyond (i.e., to the right of) the number you specify. So, in
general, it is safer to use the wks.addCol(name) method to add columns.
wks.addCol(Does); // Add a column with short name 'Does'
Regarding worksheet rows, two properties are similar, wks.maxRows and wks.nRows. The
former finds the largest row index in the worksheet that has a value, while the latter sets or
reads the number of rows in the worksheet. The following script illustrates how to use these
two properties:
newbook; // Create a new workbook
col(b) = {1:10}; // Fill 10 numbers to column B
wks.maxRows = ; // Returns 10
wks.nRows = ; // Returns 32
84
Language Fundamentals
See Also
Worksheet Manipulation X-Functions
Wks.Col
Columns in a worksheet are handled as objects in Origin. Columns can contain much
information, such as column name, column numeric type, data formats, etc. The column
attributes can be accessed and changed using the properties in the table below.
wks.col.comment$
Access
Description
Read/write
string
wks.col.digitMode
Read/write
numeric
wks.col.digits
Read/write
numeric
wks.col.index
Read/write
numeric
wks.col.format
Read/write
(8.0 SR0)
Language Fundamentals
85
wks.col.justify
Read/write
numeric
wks.col.label$
Read/write
string
Read/write
numeric
Read/write
string
Read/write
int
Read/write
int
Number of rows
wks.col.missing
(8.0 SR1)
wks.col.name$
wks.col.nCols
(8.0 SR1)
wks.col.nRows
(8.0 SR1)
wks.col.numerictype
(8.0 SR1)
wks.col.setformat
(8.0 SR2)
86
Read/write
numeric
Write
numeric
string
Language Fundamentals
Read/write
numeric
Read/write
integer
wks.col.tWidth
Read/write
numeric
wks.col.type
Read/write
numeric
wks.col.unit
Read/write
string
wks.col.width
Read/write
numeric
wks.col.subformat
wks.col.svrm
(8.0 SR0)
wks.col.xinit
(8.0 SR2)
wks.col.xinc
(8.0 SR2)
wks.col.xuints$
(8.0 SR2)
wks.col.xname$
(8.0 SR2)
Read/write
numeric
Read/write
numeric
Read/write
string
Read/write
string
Language Fundamentals
87
Examples
Worksheet Column Access
Worksheet Column objects can be accessed in the following two ways:
For column labels, you can access by column label row characters.
Set Column Type
This script sets column 1 of the active window to be an X column.
wks.col1.type = 4;
88
Language Fundamentals
Note that all non-date characters to be included in the custom string specifier must be
surrounded by single quotes.
Dates entered into this column will now be displayed in the specified custom format. Enter 0729-09 into one or more cells and confirm the display to show 2009.07.29.
Layer
LabTalk Object Type:
Window
Note: A layer in Origin can be either a graph layer or a Worksheet or Matrixsheet (i.e. each
Worksheet/Matrixsheet in a Workbook/Matrix is a layer). The layer object in LabTalk is
mapped to a graph layer. The wks object is the layer analogue for Worksheets and
Matrixsheets.
The layer object controls the appearance of the specified (or active) layer on a graph page.
The layer object contains the axis sub-object. The axis object also contains sub-objects. You
can either use the layer.property notation to access the active layer's properties, or use the
range notation to define a layer range:
range layerObject = [winName]layerIndex!
For example:
// Use layer object to access active layer properties ...
layer.tickl = layer.tickl * 2; // Double the tick length
// or specify the layer (which need not be active) in the active graph ...
layer3.color = color(cyan); // Set layer3 background color to cyan
// or refer to layer in another window ...
// Set width of layer 2 in 'Graph2' to 50 (current units)
Graph2!layer2.width = 50;
// Define two range variables ...
range layA = [Graph1]1!, layB = [Graph2]1!;
layB.width = layA.width; // Make width of 'B' layer same as 'A'
Language Fundamentals
89
Properties:
[winName!]layer[n].property =
WinName! is optional. If winName! is not specified, a layer in the active window is affected.
n is the layer number. If n is not specified, the active layer is used.
Property
90
Applies
Access
Description
layer.3DCoor
graphs
Read/write,
numeric
layer.border
graphs
Read/write,
numeric
layer.bounds.height
N/A
N/A
layer.bounds.left
N/A
N/A
layer.bounds.top
N/A
N/A
layer.bounds.width
N/A
N/A
layer.color
graphs,
worksheets
Read/write,
numeric
layer.coortype
graphs,
worksheets
Read,
numeric
layer.disp
graphs
Read/write,
numeric
layer.exchangexy
graphs,
worksheets
Read/write,
numeric
layer.factor
graphs
Read/write,
numeric
Language Fundamentals
layer.fixed
graphs
Read/write,
numeric
layer.height
graphs
Read/write,
numeric
layer.include.group
graphs,
worksheets
Read/write,
numeric
graphs,
worksheets
Read/write,
numeric
layer.is3D
graphs
Read only,
numeric
layer.left
graphs
Read/write,
numeric
layer.link
graphs
Read/Write,
numeric
layer.include.useAll
graphs
Read/Write,
numeric
layer.matmaxcols
graphs
Read/Write,
numeric
See also:
layer.matmaxrows
layer.matmaxcols
Origin Version: 8.1 SR2
Maximum columns to show when
speed mode is on. This value should
greater or equal to 2.
Language Fundamentals
91
See also:
layer.matmaxptsenabled
Origin Version: 8.1 SR2
layer.matmaxrows
92
graphs
Read/Write,
numeric
See also:
layer.matmaxptsenabled
Origin Version: 8.1 SR2
layer.maxpts
graphs,
worksheets
Read/write,
numeric
layer.name$
worksheets
Read/write,
string
layer.period
N/A
N/A
layer.plot
graphs
Read/write,
numeric
layer.showData
graphs,
worksheets
Read/write,
numeric
layer.showLabel
graphs,
worksheets
Read/write,
numeric
layer.showx
layer.showy
graphs,
worksheets
Read/write,
numeric
layer.tickL
graphs
Read/write,
Language Fundamentals
layer.tickW
graphs
Read/write,
numeric
layer.top
graphs
Read/write,
numeric
layer.unit
graphs
Read/write,
numeric
layer.width
graphs
Read/write,
numeric
Methods:
Method
Description
layer.include(Dataset [,PlotType])
Language Fundamentals
93
layer.plotxy(Xdataset, Ydataset[,
PlotType])
Examples:
This script changes the color of layer 1 in the Graph1 window to green
Graph1!layer1.color = color(green);
This script sets layer 2 of the Graph1 window active, and then types the height of the layer 2
frame to the Script window.
Graph1!page.active = 2;
layer.height = ;
This script plots Data1_B as a column plot in the active graph layer.
Layer.include(Data1_B, 203);
Mat
LabTalk Object Type:
External Object
The mat object handles many operations on matrices including conversion between
worksheets and matrices, mathematical operations such as inverse, transpose, computing the
X and Y projections, multiplication, and data preparation such as gridding.
Please see the m2w, w2m, minverse,mexpand X-Functions for Matrix to
Worksheet conversion, Worksheet to Matrix conversion, Inversion of a Matrix
and Matrix expansion.
Note: The mat object does not contain matrix sheet properties. Properties for sheets such as
sheet dimensions (wks.ncols, wks.nrows), sheet name (wks.name$), and number of objects in a
matrix sheet (wks.nmats) are controlled by the wks object. Also view the section on common
properties and methods of external objects.
Besides controlling matrix sheets using this mat object and the wks object, you can also use
matrix related X-Functions, such as mdim, and msetvalue, to change matrix dimension and set
cell values.
94
Language Fundamentals
Properties:
Property
Access
Description
mat.edgeView.xeCol$
Read/write
string
mat.edgeView.xeWksName$
Read/write
string
mat.edgeView.yeCol$
Read/write
string
mat.edgeView.yeWksName$
Read/write
string
mat.edgeView.zxeCol$
Read/write
string
mat.edgeView.zxsCol$
Read/write
string
mat.edgeView.zyeCol$
Read/write
string
mat.edgeView.zysCol$
Read/write
string
mat.exp2m.cols
Read/write
Language Fundamentals
95
mat.expand.col
Read/write
numeric
mat.expand.row
Read/write
numeric
mat.grid.average
Read/write,
numeric
mat.grid.dCluster
Read/write
numeric
mat.grid.gcSize
Read/write
numeric
mat.grid.grSize
Read/write
numeric
mat.grid.maxSubpts
Read/write
numeric
Read/write
numeric
Read/write
numeric
mat.grid.maxUseAll
mat.grid.minQuadra
96
Language Fundamentals
Read/write
numeric
mat.grid.nMatRows
Read/write
numeric
mat.grid.radius
Read/write
numeric
mat.grid.rule
Read/write
numeric
mat.grid.smooth
Read/write
numeric
mat.interpolate
Read/write
numeric
mat.interpolatePts
Read/write
numeric
mat.matName$
Read/write
string
mat.profile.angle
Read/write
numeric
mat.profile.hSection
Read/write
numeric
mat.profile.hwksName$
Read/write
string
Language Fundamentals
97
98
mat.profile.hXCol
Read/write
numeric
mat.profile.hZCol
Read/write
numeric
mat.profile.sSection
Read/write
numeric
mat.profile.vSection
Read/write
numeric
mat.profile.vWksName$
Read/write
string
mat.profile.vYCol
Read/write
numeric
mat.profile.vZCol
Read/write
numeric
mat.res, mat.resolution
Read/write
numeric
mat.shrink.col
Read/write
numeric
mat.shrink.row
Read/write
numeric
Language Fundamentals
mat.type
Read/write
numeric
mat.wksName$
Read/write
string
mat.xCol
Read/write
numeric
mat.yCol
Read/write
numeric
mat.zCol
Read/write
numeric
Methods:
Method
Description
mat.edgeView( )
mat.exp2m( )
mat.expand( )
mat.grid(coo)
Correlation gridding.
Language Fundamentals
99
mat.grid(check)
mat.integrate([varName])
mat.inv( )
mat.m2w( )
mat.m2xyz( )
mat.multiply(matrix1,
matrix2)
mat.profile(x1, y1)
1.
2.
3.
Horizontal: mat.profile.hwksname,
mat.profile.hXcol, mat.profile.hZcol.
2.
Vertical: mat.profile.vwksname,
mat.profile.vYcol, mat.profile.vZcol.
3.
Language Fundamentals
Find the profile between (x1, y1) and (x2, y2). The results
are written to mat.wksName$. Control whether
interpolation is used with the mat.interpolate and the
mat.interpolatePts properties.
mat.shrink( )
Elmat.w2m( )
mat.xyz2m( )
Examples:
This script converts a matrix to a worksheet using the matrix to regular XYZ format. The
mat.type property determines the type of data transfer from the worksheet to the matrix. When
mat.type = 0 or not specified (default), data copying follows the "X First" rule, i.e., the X axis of
the matrix is the independent axis. When mat.type is any integer greater than zero, data
copying follows the "Y First" rule.
//Create a matrix
win -t mat;
//Set the dimensions to 10X10
matrix -ps DIM 10 10;
//Fill the cells of the matrix
(%H) = Data(1,100,1);
mat.matname$ = %H;
//Create an XYZ worksheet
win -t wks xyz;
mat.wksname$ = %H;
mat.type = 1;
//Convert the matrix to regular XYZ format
mat.m2xyz();
Language Fundamentals
101
Note: %H is used only if the name of the window to be specified is the active window.
Otherwise, specify the name of the window enclosed in double quotes, such as "data1" and
"matrix1".
This script converts a worksheet to a matrix using the regular XYZ to matrix format. X, Y, and Z
columns for the matrix are specified within the worksheet. The X column contains the
independent data. The Y column contains the dependent data. The Z column contains data
that are to be placed in the corresponding cells in the matrix.
mat.wksname$ = %H;
mat.xcol = 1;
mat.ycol = 2;
mat.zcol = 3;
//Create a new matrix
win -t mat;
mat.matname$ = %H;
//Convert the XYZ data to a matrix
mat.xyz2m();
This script converts a matrix to a worksheet using the column-row format. The resultant
worksheet is exactly the same as the matrix.
mat.matname$ = %H;
//Create a new worksheet
win -t wks;
mat.wksname$ = %H;
//Convert the matrix directly to a worksheet
mat.m2W();
102
Language Fundamentals
Datasets
Introduction
A dataset is a basic Origin object. It is essentially a one-dimensional array that can contain
numeric and/or text values.
A dataset is often associated with a worksheet column and/or one or more data plots. Datasets
are defined such that, when a dataset is deleted, associated worksheet columns and data plots
are also deleted.
A dataset is also a LabTalk Variable, so it can either belong to the project, or be declared as a
local variable. The following types of datasets are supported in Origin:
Column or Matrix Object: A dataset that is associated with a column in a worksheet or a Matrix
Object in a Matrix Sheet.
Loose Dataset: A Dataset which is not attached to a worksheet or matrix sheet.
Temporary Dataset: A type of loose dataset which can be used as a temporary dataset
storage. Temporary datasets are deleted when the project is saved or a graph page is
Language Fundamentals
103
printed/copied. A temporary dataset has a name which starts with an underscore ("_")
character, e.g., _temp.
To see the names of the existing datasets, use List s command.
A dataset may also be associated with a Data Plot. Since a Temporary Dataset cannot be
plotted, a data plot is always associated either with a column/matrix-Object dataset, or with a
loose dataset.
Creating a Dataset
For datasets in worksheet and matrix layer, they are automatically created when a column or
matrix object is added. A column or a matrix object is automatically added when it is requested
as an output, like when it is on the left hand side of an assignment, for example:
wks.ncols = 3; // set active sheet to be only 3 columns
col(4)={1,2,3}; // col(4) will be automatically added
104
Language Fundamentals
Accessing Datasets
Datasets in Worksheets and in Matrices can be accessed by the following means:
1.
2.
3.
4.
5.
Range Variables
Col() or Mat() function and WCol() function
Cell() function
Substitution Notation
Dataset name
Range Variables
Range variables can be used to access data in worksheets, graphs, and matrices.
Language Fundamentals
105
range mm=[MBook1]MSheet1!1;
Besides, a matrix can be treated as a single-dimensional array using row major ordering, and
you can access a matrix value by:
MatrixObject[N*(i - 1) + j]
where N is the number of columns in the matrix, and i and j is the row and column number. So
for a 4 rows by 5 columns matrix, using [2, 3] and [8] returns the same cell. For example:
range mm = [MBook1]MSheet1!Mat(1);
if(mm[2, 3] == mm[8])
ty "They are the same!";
page.active$ = strSh$;
// col( ) function can take a column number (1..n)
col(1) = {1:30};
loop(ii,2,10)
{
// wcol( ) takes column number or an integer variable
wcol(ii) = normal(30);
// col( ) function can also take a Short Name
wcol(ii) += col(A);
}
page.active = temp;
}
// Exit 'win -o', returning to previously active window
106
Language Fundamentals
Cell Function
The Cell( ) function can be used with either a worksheet or a matrix. When referring to a nonactive book, this notation will only support the bookname! prefix for the active sheet.
cell(5,2) = 50; // Sets row 5, column 2 cell in active window
//(worksheet or matrix) to 50
// You can use prefix for different active page,
// but target is still the active sheet in that page
// Sets row 10, column 1 in active sheet of Book5 to 100
Book5!cell(10,1) = 100;
// Function accepts variables
for(ii = 1 ; ii <= 32 ; ii++)
{
for(jj = 1 ; jj <= 32 ; jj++)
{
MBook1!cell(ii,jj) = (ii-1) * 32 + jj;
}
}
Substitution Notation
// This notation accepts book name and sheet name
//to access data directly :
%([Book2]Sheet3,2,1) = 100;
// but does not resolve to active sheet of named book :
%([Book2],2,1) = 10; // THIS PRODUCES A COMMAND ERROR
// unless we just use the page name, as in :
%(Book2,2,1) = 10;
// Use active sheet of Book2
// or :
%(%H,2,1) = 1;
Language Fundamentals
107
By Dataset Name
This is the oldest notation in LabTalk and should not be used unless you have to maintain old
LabTalk code, or when you know the workbook has only one sheet or you are working with
loose datasets.
// Dataset Name
// Using the formal name of a dataset :
// PageName_ColumnName[@SheetIndex]
// Where PageName and ColumnName are the Short Name
// and SheetIndex is a creation order index
// (SheetIndex is not the order of the sheet tabs in the window)
Book1_B = Uniform(100);
// Can fill datasets
Book1_B@2 = Data(1,365);
July_Week1@3[5]$ = Sell;
BSmith = 6;
ChemLab_Grade@3[BSmith] = 86;
// Can use a variable to access row
//(6th row of 'Grade' in third sheet of 'ChemLab')
Masking Cells
Cells in worksheet columns and matrix sheets can be masked by setting
dataset<index> = 1
For example:
// Masking the cell 3 in column A
col(a)<3> = 1;
// Mask a cell in matrix
range rr = [mbook1]msheet1!mat(1);
rr<2> = 1;
// Unmask a cell
col(a)<3> = 0;
For matrix, you can also use <row, col> to specify a cell:
// Mask the 2nd row, 3rd column of current matrix sheet
%C<2,3> = 1;
// Mask the whole 2nd row of the current matrix sheet
%C<2,0> = 1;
// Mask the whole 3rd column of the current matrix sheet
%C<0,3> = 1;
108
Language Fundamentals
Many X-Functions produce outputs in the form of a tree and some of the tree nodes can be
vectors. To access such a vector, you need to copy it to a dataset. You may directly put the
tree vector into a column, but if the vector is used in subsequent calculations, it is more
efficient to use a loose dataset.
Graphic Objects
Visual objects can also be created by the Origin user and placed in an Origin child window.
These objects include labels, arrows, lines, and other user-created graphic elements. These
objects are accessed from script by their name, as defined in the associated Programming
Control dialog box.
To open the Programming Control dialog box, use one of these methods:
Click on the object to select it, then choose Format: Programming Control from the
Origin menu.
Right Click on the Object and select Programming Control.
Alt+DoubleClick on the object.
Note: Objects can be set as not selectable. To access such objects you need to be in Button Edit
Mode found on the Edit menu.
Scripts can be attached to these labels by typing the script into the text box of the
Programming Control dialog box. The Script execution trigger is set from the Script, Run
After drop-down list.
In general, only named objects can be accessed from LabTalk script. However, an unnamed
object can be accessed by a script from within its own Programming Control dialog box with
this. notation, as described below.
Language Fundamentals
109
Note: A list o with the original graph active will show line1 which is the physical object name,
but will not show myLine which is a programming construct.
Properties
The generic properties of these objects are listed below. Not all properties apply to all objects.
For example, the text property does not apply to a Line object.
Syntax
[winName!]objName.property = value;
or
this.property = value;
110
Language Fundamentals
WinName! is required if a Graphic Object exists in a non-active page. It specifies the window
that the named object resides in. The layer the object resides in must be the active layer of
that page. When using a declared GObject, WinName is never needed.
objName is the object's name, as shown in the Object Name text box in the Programming
Control dialog box or the name of a declared GObject variable.
Property is one of the available objName properties.
General Properties
Property
Access
Description
object.arrowBeginLength
Read/write,
numeric
object.arrowBeginShape
Read/write,
numeric
object.arrowBeginWidth
Read/write,
numeric
object.arrowEndLength
Read/write,
numeric
object.arrowEndShape
Read/write,
numeric
object.arrowEndWidth
Read/write,
numeric
object.arrowPosition
Note that
object.arrowBeginShape
and
object.arrowEndShape
must also
be set.
0 = no arrow heads.
1 = arrow at beginning of each segment.
2 = arrow at end of each segment.
3 = arrow at both ends of each segment.
Attach to method:
object.attach
Read/write,
numeric
0 = layer
1 = page
2 = axes scales
Language Fundamentals
111
112
object.attach$
Read only,
string
object.auto
Read/write,
numeric
object.background
Read/write,
numeric
object.color
Read/write,
numeric
object.dx, object.dy
Read/write,
numeric
object.enable
Read/write,
numeric
object.event
Read only,
numeric
object.fillColor
Read/write,
numeric
object.font
Read/write,
numeric
object.fSize
Read/write,
numeric
object.height
Read only,
numeric
object.hMove
Read/write,
numeric
Language Fundamentals
object.index
Read only,
numeric
object.keepInside
Read/write,
numeric
object.left
Read/write,
numeric
object.lineType
Read/write,
numeric
object.lineWidth
Read/write,
numeric
object.mouse
Read/write,
numeric
object.name$
Write only,
string
Object name.
object.realTime
Read/write,
numeric
object.revVideo
Read/write,
numeric
object.rotate
Read/write,
numeric
object.script
Read/write,
numeric
object.show
Read/write,
numeric
Language Fundamentals
113
object.states
Read/Write,
numeric
object.text$
Read/write,
string
object.top
Read/write,
numeric
object.vMove
Read/write,
numeric
object.width
Read only,
numeric
Notes:
object.x, object.y
114
Read/write,
numeric
1.
2.
Language Fundamentals
object.x#, object.y#
Read/write
loop(ii,1,4) {circle.x$(ii)=;circle.y$(ii)=;}
Examples
Position the legend in the upper left of a layer
legend.background = 1;
legend.y = layer1.y.to - legend.dy / 2;
legend.x = layer1.x.from + legend.dx / 2;
Methods
The generic methods of these objects are listed below. Not all methods apply to all objects. For
example, the addtext method does not apply to a Line object.
Syntax
[winName!]objName.Method(arguments)
or
this.Method(argument)
WinName! is required if a Graphic Object exists in a non-active page. It specifies the window
that the named object resides in. The layer the object resides in must be the active layer of
that page. When using a declared GObject, WinName is never needed.
objName is the object's name, as shown in the Object Name text box in the Programming
Control dialog box or the name of a declared GObject variable.
Method is one of the available objName methods.
arguments are specific to the method.
General Methods
Method
Description
object.addText(string)
object.click(n)
Simulate a click on the nth hot spot of the object. Multiple hot spots
are a feature of UIM objects.
object.draw(option)
115
Examples
Append text.
// Declare a string variable and assign a value
string stringVariable$ = " (modified)";
// Assign a value to a string register (A)
// Note how new line is contained in the value
%A = "
Final";
// Now add various text to an existing object named 'text'
text.addtext("%(stringVariable$)");
text.addtext("%(CRLF)Data passes all tests");
text.addtext(A); // No quotes and no % needed for string register
// And force it to refresh
text.draw();
Note : %(CRLF) is a substitution notation that adds a DOS new line (Carriage Return, Line
Feed) to a declared or literal string.
Simulate a click on the nth hot spot of the object. Multiple hot spots are a feature of UIM
objects.
object.click(n);
Redraw the object. Option = local to redraw hot spots. Option = global to redraw the entire
object.
object.draw(option);
Connect method
Graphic Objects may be connected using the connect method with various options controlling
the connection behavior and displaying an optional connection line.
Syntax
sourceObject.Connect(targetObject, bVisible, dwRigid, nTargetRefPt, nSourceRefPt)
116
Language Fundamentals
Parameters
Name
Description
targetObject
bVisible
dwRigid
nTargetRefPt
5 = right top
6 = right
7 = right bottom
8 = bottom
9 = free 1
10 = free 2
11 = free 3
12 = size
nSourceRefPt
Language Fundamentals
117
Examples
// using GObject variables
GObject aa = [Graph1]1!text;
GObject bb = [Graph1]2!text;
bb.Connect(aa);
// using object names
myTextLabel.Connect(myLine,0);
// using GObject variable and object name
GObject aa = [Graph1]1!myTextLabel;
aa.Connect(myLine,0);
GetConnected method
One graphic object can get all its connected graphic objects by this method.
See also: label command
Syntax
graphicObject.GetConnected(stringArray, option=0)
graphicObject can be an object name or a GObject variable.
Return Value
Return the number of the connected graphic objects. If there is no connected graphic object, it
will return zero.
Parameters
Name
Description
stringArray
The string array used to store the names of all connected graphic objects.
option
If zero, only get the direct connected graphic objects. If one, get graphic
objects recursively.
Example
// using GObject variables
GObject go = [Graph1]1!text;
StringArray sa;
numObjs = go.GetConnected(sa);
// using object names, recursively
StringArray sa;
numObjs = myLine.GetConnected(sa, 1);
// get names of connected graphic objects
StringArray sa;
numObjs = myLine.GetConnected(sa,1);
if(numObjs>0) // if has connected objects
{
118
Language Fundamentals
}
}
General Examples
This script disables horizontal movement for the Arrow object in the Graph2 window.
Graph2!Arrow.hmove = 0;
When entered in the Script window, the next script types the X and Y coordinates of the
center of the Button object to the Script window.
Button.x =;
Button.y =;
The following script runs the script associated with an object named Mode in the Graph1
window.
Graph1!mode.run();
The last script uses the draw() method to redraw the WksData object in the Data2 window.
Data2!WksData.draw(global);
3.2.5
String registers
Introduction
String Registers are one means of handling string data in Origin. Before Version 8.0, they were
the only way and, as such, current versions of Origin continue to support the use of string
registers. However, users are now encouraged to migrate their string processing routines
toward the use of proper string variables, see String Processing for comparative use.
String register names are comprised of a %-character followed by a single alphabetic character
(a letter from A to Z). Therefore, there are 26 string registers, i.e., %A--%Z, and each can hold
266 characters (except %Z, which can hold up to 6290 characters).
String registers are of global (session) scope ; this means that they can be
changed by any script, any time. Sometimes this is useful, other times it is
dangerous, as one script could change the value in a string register that is being
used by another script with erroneous and confusing results.
Ten (10) of the 26 string registers are reserved for use as system variables, and
their use could result in errors in your script. They are grouped in the ranges
%C--%I, and %X--%Z. All of the reserved string registers are summarized in the
table below.
Language Fundamentals
119
Description
%C
%D
%E
%F
%G
%H
%I
%X
The full path name to the User Files folder, where the user .INI files as well as
other user-customizable files are located. %Y can be different for each user
depending on the location they selected when Origin was started for the first time.
%Y
Prior to Origin 7.5, the path to the various user .INI files was the same as it
was to the Origin .EXE. Beginning with Origin 7.5, we added multi-user-onsingle-workstation support by creating a separate "User Files" folder.
To get the Origin .EXE path(program path), use the following LabTalk
statement:
%a = system.path.program$
Language Fundamentals
String registers containing system variables can be used anywhere a name can be used, as in
the following example:
// Deletes the current active dataset:
del %C;
This sets %B equal to John F Smith. Thus, the string variable to the right of the assignment
operator is expressed, and the result is assigned to the identifier on the left of the assignment
operator.
As with numeric variables, if you enter the following assignment statement in the Script
window:
%B =
This statement assigns the string register %B the value Book1_A. If Book1_A is a dataset
name, then entering the following assignment statement in the Script window:
(%B) = 2*%B
results in the dataset being multiplied by 2. String register %B, however, still contains the string
Book1_A.
String Comparison
When comparing string registers, use the "equal to" operator (==).
Language Fundamentals
121
If string registers are surrounded by quotation marks (as in, "%a"), Origin literally compares
the string characters that make up each variable name. For example:
aaa = 4;
bbb = 4;
%A = aaa;
%B = bbb;
if ("%A" == "%B")
type "YES";
else
type "NO";
If string registers are not surrounded by quotation marks (as in, %a), Origin compares the
values of the variables stored in the string registers. For example:
aaa = 4;
bbb = 4;
%A = aaa;
%B = bbb;
if (%A == %B)
type "YES";
else
type "NO"
The result will be YES, because in this case the values of the strings (rather than the
characters) are compared, and aaa == bbb == 4.
Substring Notation
Substring notation returns the specified portion of a string. The general form of this notation is:
%[string, argument];
where string contains the string itself, and argument specifies which portion of the string to
return.
For the examples that follow, enter this assignment statement in the Script window:
%A = "Results from Data2_Test"
122
Return
value:
%B = %[%A, '_']; %B =
Results from
Data2
%B = %[%A, >'_']; %B =
Test
Language Fundamentals
%B = %[%A, 8]; %B =
Results
%B = %[%A, 14:18]; %B =
Data2
%B = %[%A, #2]; %B =
from<
ii = %[%A]; ii =
ii = 23
Return value:
};
%Z = "First line
second line";
%A = %[%Z, @2];
Note:
When using quotation marks in substring or substitution notation:
Space characters are not ignored.
String length notation includes space characters.
For example, to set %A equal to 5 and find the length of %A, type the following in the Script
window and press Enter:
%A = " 5 ";
ii = %[%A];
ii = ;
Origin returns: ii = 3.
A Note on Tokens
A token can be a word surrounded by white space (spaces or TABS), or a group of words
enclosed in any kind of brackets. For example, if:
%A = These (are all) "different tokens"
Language Fundamentals
123
Returns
These
are all
different tokens
3.2.6
X-Functions
The X-Function is a new technology, introduced in Origin 8, that provides a framework for
building Origin tools. Most X-Functions can be accessed from LabTalk script to perform tasks
like object manipulation or data analysis.
The general syntax for issuing an X-Function command from script is as follows, where squarebrackets [ ] indicate optional statements:
xfname [-options] arg1:=value arg2:=value ... argN:=value;
Note that when running X-Functions, Origin uses a combined colon-equal symbol, ":=" , to
assign argument values. For example, to perform a simple linear fit, the fitlr X-Function is used:
// Data to be fit, Col(A) and Col(B) of the active worksheet,
// is assigned, using :=, to the input variable 'iy'
fitlr iy:=(col(a), col(b));
Also note that, while most X-Functions have optional arguments, it is often possible to call an
X-Function with no arguments, in which case Origin uses default values and settings. For
example, to create a new workbook, call the newbook X-Function:
newbook;
Since X-Functions are easy and useful to run, we will use many of them in the following script
examples. Details on the options (including getting help, opening the dialog and creating autoupdate output) and arguments for running X-Functions are discussed in the Calling XFunctions and Origin C Functions section.
Language Fundamentals
3.2.6 X-Functions
wrong results. If duplicate names are unavoidable, LabTalk will run the script by the following
priority order:
1.
2.
3.
4.
5.
6.
Macros
OGS File
X-Functions
LT object methods, like run.file(FileName)
LT callable Origin C functions
LT commands (can be abbreviated)
Language Fundamentals
125
Origin provides several options for executing and storing LabTalk scripts. The first part of this
chapter profiles these options. The second part of the chapter outlines the script debugging
features supported by Origin.
However, working on active windows with win -a may not be stable. In the execution sequence
of the script, switching active windows or layers may have delay and may lead to unpredictable
outcome.
It is preferable to always use win -o winName {script} to enclose the script, then Origin will
temporarily set the window you specified as the active window (internally) and execute the
enclosed script exclusively on that window. For example, the following code fill default book
with some data and make a plot and then go back to add a new sheet into that book and make
a second plot with the data from the second sheet:
doc -s;doc -n;//new project with default worksheet
string bk$=%H;//save its book short name
//fill some data and make new plot
wks.ncols=2;col(1)=data(1,10);col(2)=normal(10);
plotxy (1,2) o:=<new>;
//now the newly created graph is the active window
//but we want to run some script on the original workbook
win -o bk$ {
newsheet xy:="XYY";
col(1)=data(0,1,0.1);col(2)=col(1)*2;col(3)=col(1)*3;
plotxy (1,2:3) plot:=200 o:=<new>;
}
Please note that win -o is the only LabTalk command that allows a string variable to be used.
127
as this particular command is used so often that it has been modified since Origin 8.0 to allow
string variables. In all other places you must use the %( ) substitution notation if a string
variable is used as an argument to a LabTalk command.
Where to Run LabTalk Scripts
While there are many places in Origin that scripts can be stored and run, they are not all
equally likely. The following sub-sections have been arranged in an assumed order of
prevalence based on typical use.
The first two, on (1) Running Scripts from the Script and Command Windows and (2) Running
Scripts from Files, will be used much more often than the others for those who primarily script.
If you only read two sub-sections in this chapter, it should be those. The others can be read on
an as-needed basis.
4.1.1
Two Windows exist for direct execution of LabTalk: the (older) Script Window and the (newer)
Command Window. Each window can execute single or multiple lines of script. The Command
Window has a prompt and will execute all code entered at the prompt.
The Script Window has only a cursor and will execute highlighted code or code at the current
cursor position when you press Enter. Both windows accept Ctrl+Enter without executing.
When using Ctrl+Enter to add additional lines, you must include a semicolon ; at the end of a
statement.
The Command Window includes Intellisense for auto-completion of X-Functions, a command
history and recall of line history (Up and Down Arrows) while the Script Window does not. The
Script Window allows for easier editing of multiline commands and longer scripts.
Below is an example script that expects a worksheet with data in the form of one X column and
multiple Y columns. The code finds the highest and lowest Y values from all the Y data, then
normalizes all the Y's to that range.
// Find the lowest minimum and the highest maximum
double absMin = 1E300;
double absMax = -1E300;
loop(ii,2,wks.ncols)
{
stats $(ii);
if(absMin > stats.min) absMin = stats.min;
if(absMax < stats.max) absMax = stats.max;
}
// Now normalize each column to that range
loop(ii,2,wks.ncols)
{
stats $(ii);
128
wcol(ii)*=(absMax - absMin);
wcol(ii)+=absMin;
// Normalize to range
// Shift to minimum
To execute in the Script Window, paste the code, then select all the code with the cursor
(selected text will be highlighted), and press Enter.
To execute the script in the Command Window, paste the code then press Enter. Note that if
there were a mistake in the code, you would have it all available for editing in the Script
Window, whereas the Command Window history is not editable and the line history does not
recall the entire script.
Origin also has a native script editor, Code Builder, which is designed for editing
and debugging both LabTalk and Origin C code. To access Code Builder, enter
ed.open() into the script or command window, or select the
Standard Toolbar.
4.1.2
From Files
Most examples of script location require an Origin Object and are thus restricted to an open
project. Scripts can also be saved to a file on disk to be called from any project. Script files can
be called with up to five arguments. This section outlines the use of LabTalk scripts saved to a
file.
129
An OGS file can also be attached to the Origin Project (OPJ) rather than saving
it to disk. The file can be added to the Project node in Code Builder and will
then be saved with the project. Script sections in such attached OGS files can
be called using the run.section() object method similar to calling sections in a
file saved on disk. Only the file name needs to be specified, as Origin will first
look for the file in the project itself and execute the code if filename and section
are found as attachments to the project.
Lines of script under the section declaration belong to that section. Execution of LabTalk in a
section ends when another section declaration is met, when a return statement is executed or
when a Command Error occurs. The framework of a typical multi-section OGS file might look
like the following:
[Main]
// Script Lines
ty In section Main;
[Section 1]
// Script Lines
ty In section 1;
[Section 2]
// Script Lines
ty In section 2;
Note here that ty issues the type command, which is possible since no other commands in
Origin begin with the letters 'ty'.
130
Specifically, if you save a file called test.ogs to your Origin User Files folder:
// Runs [Main] section of test.ogs using command syntax, else runs
// unsectioned code at the beginning of the file, else does nothing.
test;
// Runs only section1 of test.ogs using command syntax:
test.section1;
// Runs only section1 of test.ogs with run.section() syntax:
run.section(test, section1)
To run an OGS file in Origin, enter its name into the Script Window or Command Window, after
telling Origin (using the cd command) where to find it. For example:
// Run a LabTalk Script named 'MyScript.ogs' located in the folder
//'D:\OgsFiles'.
// Change the current directory to 'D:\OgsFiles'
cd D:\OgsFiles;
// Runs the code in section 'Normalize' of 'MyScripts.ogs'
MyScripts.Normalize;
There are many examples in Origin's Samples\LabTalk Script Examples folder which can be
accessed by executing:
cd 2;
The section call or the macro call must include a space between each argument being
passed.
When you pass literal text or string variables as arguments, each argument must be
surrounded by quotation marks (in case the argument contains more than one word, or is a
negative value). Passing numbers or numeric variables doesn't require quotation mark
protection, except when passing negative values.
You can pass up to five arguments, separated by Space, to script file sections or macros. In
the script file section or macro definition, argument placeholders receive the passed
arguments. These placeholders are %1, %2, %3, %4, and %5. The placeholder for the first
passed argument is %1, the second is %2, etc. These placeholders work like string variables
in that they are substituted prior to execution of the command in which they are embedded.
As an example of passing literal text as an argument that is received by %1, %2, etc., Suppose
a TEST.OGS file includes the following section:
[output]
type "%1 %2 %3";
131
Here, %1 holds "Hello World", %2 holds "from", and %3 holds "LabTalk". After string
substitution, Origin outputs
Hello World from LabTalk
to the Script window. If you had omitted the quotation marks from the script file section call,
then %1 would hold "Hello", %2 would hold "World", and %3 would hold "from". Origin would
then output
Hello World from
Then LastRow is passed by reference and then updated to hold the value 15.
passed by value. Additionally, a string variable (%A) consisting of two words is sent by value
as a single argument to %3.
[typing]
type -b "The value of %1 = %2 %3";
return 0;
Save the section to Test.OGS and run the following script on command window:
var = 22;
%A = "degrees Celsius";
run.section(test.ogs, typing, var $(var) "%A");
Then a dialog box pop-up and says: "The value of var = 22 degrees Celsius".
There is no restriction on the length or type of characters used to name the OGS file.
Specifying the filename extension is optional for files with the OGS extension.
When using run.section( ) inside an OGS file to call another section of that same OGS file,
the filename may be omitted, for instance:
[main]
run.section( , calculate);
[calculate]
cc = aa + bb;
The name of the OGS file must conform to the restrictions on command names: 25
characters or fewer, must not begin with a number or special character, must not contain
spaces or underscore characters.
The filename extension must be OGS and must not be specified.
133
Do not give an OGS file the same name as an existing Origin function or XFunction!
For more on setting the current working directory in Origin, including assigning shortcuts to
commonly used paths, see Current Directory, or Cd (command).
4.1.3
The Set Values Dialog is useful when calculations on a column of data are based on functions
that may include references to other datasets.
The column designated by Set Values is filled with the result of an expression that you enter
(the expression returns a dataset). The expression can be made to update automatically
(Auto), when requested by the user (Manual), or not at all (None).
For more complex calculations, where a single expression is not adequate, a Before Formula
Scripts panel in the dialog can include any LabTalk script.
Auto and Manual updates create lock icons,
and
respectively, at the top of the column. A
green lock indicates updated data; A yellow lock
indicates pending update; A red lock
indicates broken functionality.
134
In cases where the code is self-referencial (i.e. the column to be set is included in the
calculation) the Auto and Manual options are reset to None.
Below are two examples of script specifically for the Set Values Dialog. Typically short scripts
are entered in this dialog.
// The signal
// The Baseline
dataset BN;
BN = raR - raB;
stats BN;
BN /= (stats.max / 100);
The following image is a screenshot of the code above entered into the Set Column Values
dialog:
135
4.1.4
The Worksheet Script dialog is mostly provided for backward compatibility with older versions
of Origin that did not have the Auto Update feature in the Set Values dialog and/or did not
have import filters where scripts could be set to run after import.
Scripts can be saved in a Worksheet (so workbooks have separate Worksheet Scripts for each
sheet) and set to run after either importing into this Worksheet and/or changes in a particular
dataset (even one not in this Worksheet).
Here is a script that is attached to Sheet3 which is set to run on Import (into Sheet3) or when
the A column of Sheet2 changes.
range ra1 = Sheet1!1;
range ra2 = Sheet1!2;
range ra3 = Sheet2!A; // Our 'Change in Range' column
range ra4 = 3!2;
136
4.1.5
The Script Panel (accessed via the context menu of a Workbook's title bar) is a hybrid of the
Script Window and Command Window.
Like the Script Window, it can hold multiple lines and you can highlight select lines and press
Enter to execute.
Like the Command Window, there is a history of what has been executed.
Unlike the Script window, whose content is not saved when Origin closes, these scripts are
saved in the project.
// Scale column 2 by 10
col(2)*=10;
// Shift minimum value of 'mV' column to zero
stats col(mV);
col(mV)-=stats.min;
// Set column 3 to column 2 normalized to 1
stats 2;
col(3) = col(2)/stats.max;
4.1.6
Graphic Objects (text, lines and shapes) can be tied to events and contain script that runs on
those events. Since graphical objects are attached to a page, they are saved in Templates,
Window files and Project files.
Buttons
Some of your scripts may be used so often that you would like to automate their execution by
assigning one or more of them to a button on the Origin project's graphical-user interface
(GUI). To do so, follow the steps below:
From a new open Origin project:
1.
2.
3.
Select the text tool from the tool menu on the left side of the project window -->
Now click in the open space to the right of the two empty columns of the blank worksheet in
the Book1 window. This will open a text box. Type "Hello" in the text box and press enter-you have now created a label for the button.
Now hold down the ALT key while double-clicking on the text that you just created. A
window called Programming Control will appear.
137
In the lower text box of the Programming Control window, again type our script text
exactly:
type -b "Hello World";
5.
6.
Also in the Programming Control window, in the Script, Run After box, select Button
Up, and click OK.
You have now created a button that, when pressed, executes your script and prints "Hello
World" in a pop-up window.
Unlike a text script which exists only in the Classic Script Window, this button and the script it
runs will be saved when you save your Origin project.
Lines
Here is a script that creates a vertical line on a graph that can be moved to report the
interpolated value of your data at the X position represented by the line:
// Create a vertical line on our graph
draw -n MyCursor -l -v $(x1+(x2-x1)/2);
MyCursor.HMOVE = 1;
MyCursor.color = color(orange);
MyCursor.linewidth = 3;
// Add a label to the graph
Other Objects
Any Graphical Object (text, lines and shapes) can have an attached script that runs when an
event occurs.
In this example, a rectangle (named RECT) on a graph is set to have a script run when the
rectangle is either Moved or Sized.
1.
2.
3.
4.
Use the Rectangle tool on the Tools toolbar to draw a rectangle on a graph.
Use the Back(data) tool on the Object Edit toolbar to push the rectangle behind the data.
Hold down the Alt key and double-click on the rectangle to open Programming Control.
Enter the following script:
%B = %C;
%A = xof(%B);
dataset dsRect;
dsRect = ((%A >= rect.x1) && (%A <= rect.x2) &&
(%B >= rect.y3) && (%B <= rect.y1))?%B:0/0;
138
Choose the Moved or Sized event in the Script, Run After drop down list.
Click OK.
When you Move or Resize this rectangle, the script calculates the mean of all the points within
the rectangle and types the result to the Script Window.
4.1.7
ProjectEvents Script
You may want to define functions, perform routine tasks, or execute a set of commands, upon
opening, closing, or saving your Origin project. Since Origin 8.1 a file named ProjectEvents.ogs
is attached to the Origin Project (OPJ) by default.
A template version of this file is shipped with Origin and is located in the EXE folder. This
template file is attached to each new project. The file can be viewed and edited by opening
Code Builder and expanding the Project node in the left panel.
Sections of ProjectEvents.ogs
The ProjectEvents.ogs file, by default, contains three sections that correspond to three
distinct events associated with the project:
1.
2.
3.
AfterOpenDoc: This section will be executed immediately after the project is opened
BeforeCloseDoc: This section will be executed before the project is closed
BeforeSaveDoc: This section will be executed before the project is saved
Utilizing ProjectEvents.ogs
In order for this file and its contents to have an effect, a user needs to edit the file and save it in
Code Builder, and then save the project. The next time the project is opened, the script code
contained in this attached OGS file will be executed upon the specified event (given by the predefined section name).
For example, if a user defines a new function in the [AfterOpenDoc] section of
ProjectEvents.ogs, saves it (in Code Builder), and then saves the project in Origin, that
function will be available (if defined to be global) for use any time the project is re-opened. To
make the function available in the current session place the cursor (in Code Builder) on the
section name to execute, select the Debug drop-down menu, and select the Execute Current
Section option. Then in the Origin Script Window, issuing the list a command will confirm that
the new function appears and is available for use in the project.
A brief tutorial in the Functions demonstrates the value of ProjectEvents.ogs when used in
conjunction with LabTalk's dataset-based functions.
139
You can add your own sections to this OGS file to save custom routines or
project-specific script code. Such sections will not be event-driven, but can be
accessed by name from any place that LabTalk script can be executed. For
example, if you add a section to this file named [MyScript], the code in that
section can be executed after opening the project by issuing this command from
the script window:
run.section(projectevents,myscript);
A ProjectEvents.ogs script can also be made to run by opening the associated Origin Project
(OPJ) from a command console external to Origin.
4.1.8
The Import Wizard can be used to import ASCII, Binary or custom file formats (when using a
custom program written in Origin C). The Wizard can save a filter in select locations and can
include script that runs after the import occurs. Once created, the filter can be used to import
data and automatically execute script. This same functionality applies when you drag a file
from Explorer and drop onto Origin if Filter Manager has support for the file type.
For example,
wks.addcol(Subtracted);
range raSubtracted = 4;
140
Click Finish
4.1.9
The Nonlinear Fitter has a Script After Fitting section on the Code page of the NLFit dialog.
This can be useful if you want to always do something immediately after a fit. As an example,
you could access the fit parameter values to do further calculations or accumulate results for
further analysis.
In this example, the Script After Fitting section adds the name of the fit dataset and the
calculated peak center to a Workbook named GaussResults:
// This creates a new book only the first time
if(exist(GaussResults)!=2)
{
newbook name:=GaussResults sheet:=1 option:=1 chkname:=1;
GaussResults!wks.col1.name$= Dataset;
GaussResults!wks.col2.name$= PeakCenter;
}
// Get the tree from the last Report Sheet (this fit)
getresults iw:=__REPORT$;
// Assign ranges to the two columns in 'GaussResults'
range ra1 = [GaussResults]1!1;
range ra2 = [GaussResults]1!2;
// Get the current row size and increment by 1
size = ra1.GetSize();
size++;
// Write the Input data range in first column
ra1[size]$ = ResultsTree.Input.R2.C2$;
// and the Peak Center value in the second
ra2[size] = ResultsTree.Parameters.xc.Value;
141
There are more detailed examples of COM Client Applications in the Samples\Automation
Server folder.
142
-switch arg
Multiple switches can be passed. Most switches follow the above notation except -r, -r0 and
-rs, which use LabTalk scripts as arguments and execute the scripts after Origin C startup
compile. See the Switches table and examples below for available switches and their
function.
origin_file_name
This file name must refer to an Origin project file or an Origin window file. A path may be
included and the file extension must be specified.
labtalk_scripts
Optional script to run after the OPJ is open. This is useful when the script is very long.
Switches
Switch
Argument
Function
Specifies a configuration file to add to the list specified in the INI file.
cnf file
C:\Program Files\OriginLab\Origin8\Origin8.exe -a
myconfig
Note: When passing the .cnf file on the command line using -a
switch, Origin C may not finish startup compiling, and the
licensing has probably not been processed by the time the .cnf
file is processed. So, when you want to include X-Functions in
your .cnf file, it's better to use -r or -rs switch instead of -a.
-B
<none>
Run script following OPJ path-name after the OPJ is open similar to -R
but before the OPJ's attached ProjectEvents.ogs, such that you can use
this option to pass in variables to ProjectEvents.ogs. This option also
have the advantage of using all the command line string at the end so it
does not need to be put into parenthesis as is needed by -R. (8.1)
143
144
-C
cnf file
-H
<none>
Hide the Origin application. Script Window will still show if it is open by
internal control.
-I
ini file
-L
level
-M
<none>
-OCW
ocw file
-P
full path
-R
(script)
-R0
(script)
-RS
scripts
Similar to -R but without having OPJ specified. All the remaining string
from the command line will be used as LabTalk script and run after
Origin C startup compile has finished. (8.1)
-TL
file name
-TM
otm file
-TG
otp file
-TP
otp file
Run the LabTalk script after any specified OPJ has been loaded.
otw file
-W
<none>
Examples
Loading an Origin Project File
The following is an example of a DOS *.bat file. First it changes the current directory to the
Origin exe directory. It then calls Origin and passes the following command line arguments:
Please note that these -r, -r0, -rs, -b switches will wait for Origin C startup compiling to finish
and thus you can use X-Functions in such script, as in:
cd "C:\Program Files\OriginLab\Origin8" origin8.exe -r0 (type -b "opj will open next") -r
(type -b "OPJ is now loaded") c:\mypath\test.opj
For more complicated scripts, you will be better off putting them into an OGS file, and then
running that OGS file from the command line.
The following example will run the script code in the main section of the startup.ogs file
located in the User Files Folder. When the file name given to the run.section method does not
contain a path, LabTalk assumes the file is in the User Files Folder. The following command
line argument illustrates use of the run.section object method:
C:\Program Files\OriginLab\Origin8\Origin8.exe -rs run.section(startup.ogs, main)
145
To run this OPJ (call it test) from a command line, use the -B switch to ensure the
FromCmdLine variable is defined before [AfterOpenDoc] is executed:
<exepath>Origin81.exe -b <opjpath>test.opj FromCmdLine=1
146
4.1.12 On A Timer
2.
3.
4.
5.
Origin is launched and an existing Origin Project file (OPJ) is loaded which contains
o an Origin workbook to be used as Analysis Template, and
o an externally linked Excel file to be used as the report book.
All files matching a particular wild card specification (in this case, file names beginning with
T having the *.csv extension) are found.
The batchProcess X-Function is called to perform batch processing of the files.
The Excel window will contain the summary report at the end of the batch processing
operation. This window, linked to the external Excel file, is saved and the Origin project is
closed without saving.
You can directly open the Excel file from the \Samples\Batch Processing subfolder to
view the results.
Additional information on batch processing from script (using both Loops and X-Functions) is
available in a separate Batch Processing chapter.
4.1.12 On A Timer
The Timer (Command) executes the TimerProc macro, and the combination can be used to
run a script every n seconds.
The following example shows a timer procedure that runs every 2 seconds to check if a data
file on disk has been modified, and it is then re-imported if new.
In order to run this script example, perform the following steps first:
1.
2.
Start a new project and import the file into a new book with default ascii
settings. The book short name changes to mydata
3.
Create a line+symbol plot of the data, and set the graph x and y axis
rescale property to auto so that graph updates when new data is added
4.
5.
6.
147
timer -k;
7.
Save the Origin Project, close, and then re-open the project. Now any time
the project is opened, the timer will start, and when the project is closed the
timer will stop executing.
8.
Go to the data file on disk and edit and add a few more data points
9.
The timer procedure will trigger a re-import and the graph will update with
the additional new data
menu items. The Add Custom Menu tab of this dialog can be used to add a new main menu
entry and then populate it with sub menu items including pop-up menus and separators. Once
a menu item has been added, LabTalk script can be assigned for that item. The menu items
can be made available for all window types or a specific window type.
The custom menu configuration can then be saved and multiple configuration files can be
created and then loaded separately using the Format: Menu main menu. For further
information please view the help file page for the Custom Menu Organizer dialog.
A bitmap file that defines the appearance of the button. Use one of the set of buttons
provided in Origin or create your own.
A LabTalk script file that will be executed when the user clicks the button.
An INI file that stores information about the button or button group. Origin creates the INI
file for you, when you follow the procedure below.
We will assume for now that you have a bitmap image file (BMP) that will define the button
itself (if you are interested in creating one, example steps are given below).
on the Origin Standard Toolbar to open) or other text
First, use CodeBuilder (select
editor, to develop your LabTalk script (OGS) file. Save the file with the OGS extension. You
may divide a single script file into several sections, and associate each section with a different
toolbar button.
When creating a custom button group for export to an OPX file, consider saving your button
group's initialization file, bitmap file(s), script file(s), and any other support files to a usercreated subfolder in your User Files folder. When another Origin user installs your OPX file,
your custom subfolder will automatically be created in the user's User Files folder, and this
subfolder will contain the files for the custom button group. This allows you to keep your
custom files separate from other Origin files.
149
Drag any of these buttons onto the Origin toolbar to begin using them. Use the procedure
outlined above to associate a script with a given button.
150
3.
4.
5.
Using the bitmap for the built-in user defined toolbar is a good place to begin. In Windows
Paint, select File:Open, browse to your User Files folder and select Userdef.bmp.
Set the image size. Select Image:Attributes. The height needs to remain at 16 and should
not be changed. Each button is 16 pixels high by 16 pixels wide. If your toolbar will be only
2 buttons then change the width to 32. The width is always 16 times the number of buttons,
with a maximum of 10 buttons or a width of 160.
Select View:Zoom:Custom:800%. The image is now large enough to work with.
Select View:Zoom:Show Grid. You can now color each pixel. The fun begins - create a look
for each button.
Select File:Save As, enter a new File name but leave the Save as type to 16 Color
Bitmap.
4.2.1
Interactive Execution
You can execute LabTalk commands or X-functions line-by-line (or a selection of multiple lines)
to proceed through script execution step-by-step interactively. The advantage of this procedure
is that you can check the result of the issued command, and according to the result or the
occurred error, you can take the next step as in the prototype development.
To execute the LabTalk commands interactively, you can enter them in the following places:
Classic Script Window
Command window in Origin's main window
Command window in Code Builder
The characteristics and the advantages of each window are as follows:
You can prevent execution and just write codes by using cntrl-Enter.
Running and Debugging LabTalk Scripts
151
4.2.2
Debugging Tools
Origin provides various tools to help you to develop and debug your LabTalk scripts.
Ed (object)
The Ed (object) provides script access to Code Builder , a dedicated editor for LabTalk script.
The ed object methods are:
Method
152
Brief Description
ed.open()
ed.open(fileName)
ed.saveFile(fileName)
Save the current script in the active Code Builder window to the
fileName script file.
153
154
Description
Display scripts that have been sent to the queue for delayed execution;
Display macros.
These values are bits that can be combined to produce cumulative effects. For example, echo
= 12 displays both command and assignment scripts. Echo = 7 (includes echo = 1, echo = 2,
and echo = 4) is useful for following script execution during menu command selection. To
disable echo, type echo = 0 in the Script window
In the Script window, the previous script then reports the cell value at each loop count. During
normal operation, when @B=0, the loop performs quietly.
the word Start will print to the Script Window, but if MyFile cannot be found, the script will stop
executing at that point, and the word End will not print.
If, however, you surround the line in question with curly braces (i.e., {}), as in,
type Start;
{impasc fname:=MyFile;}
type End;
155
Description
@OC = 1 (default)
@OC = 0
VarName= (command)
This command examines the value of any variable. Embed this in your script to display
intermediate variable values in the Script window during script execution.
Example 1
The following command prints out the value of myHeight variable:
myHeight=
156
LabTalk:List (command)
The list command is used to examine your system environment. For example, the list s
command displays all datasets (including temporary datasets) in the project.
ErrorProc (macro)
Macro type: Special event The ErrorProc macro is triggered when the LabTalk interpreter
detects a #Command Error. when you click the Cancel button in any dialog box. when you click
the No button in dialog boxes that do not have a Cancel button. The ErrorProc macro is
deleted immediately after it is triggered and executed. The ErrorProc macro is useful for error
trapping.
NotReady (macro)
This macro displays the message "This operation is still under development..." in a dialog box
with an OK button.
4.2.3
Error Handling
LabTalk scripts will be interrupted if an error has been thrown. But there are times when you
want to continue the execution of the script even if an error is encountered. In this situation,
Origin allows you to use a pair of curly braces ("{" and ?}?) to enclose a part of the script that
might generate an error. Origin will encounter the error and resume with the rest part of the
script, which is outside the braces. In this sense, braces and run.section() commands have the
same behavior.
The following is a simple example to show how to handle possible errors. Please note that
before executing the scripts in the Script Window, you should create a new worksheet and
make sure that column C does not exist.
// Script without error handling
type "Start the section";
stats col(c);
157
The line of code, stats col(c);, will throw an error, because Column C does not exist. Then,
the script will terminate and only output:
Start the section
Failed to resolve range string, VarName = ix, VarValue = col(c)
Now we will introduce braces to use error handling. We can add a variable to indicate if an
error occurred and make use of a System Variable to temporarily shut off Origin error
messages:
// Script with error handling
type "Start the section";
// The section that will generate an error
{
@NOE = 0; // Shut off Origin error messages
vErr = 1; // Set our error variable to true (1)
stats col(c); // This is the code which could produce an error
stats.max=; // Execution will continue only if no error occurs
vErr = 0; // If NO error then our variable gets set to false (0)
}
@NOE = 1; // Restore Origin error messages
if(vErr) ty An error occurred. Continuing ...;
type "Finished the section";
After the error on the stats col(c) line, code execution continues outside the closing brace (})
and we can trap our error and process as needed.
158
In this chapter we show many examples of working with different types of data using LabTalk
Script.
Converting to String
The syntax $(num) is one of two substitution notations supported in LabTalk. The other,
%(string$), is used to convert in the opposite direction, from string to numeric, substituting a
string variable with its content.
Formatting can also be specified during the type conversion:
$(number [,format])
Format follows the C-programming format-specifier conventions, which can be found in any Clanguage reference, for example:
string myNumString2$ = $("3.14159",%3d);
myNumString2$=
// "3"
// "3.1416e+003"
For further information on this type of formatting, please see $() Substitution.
159
In this example, x is followed by *2, which sets x to display two significant digits. So the output
result is:
x = 1.2
Additionally, putting a * before ")" will cause the zeros just before the power of ten to be
truncated. For instance,
y = 1.10001;
type "y = $(y, *4*)";
The result has only 2 significant digits, because y is followed by *4* instead of *4.
In this example, x is followed by .2, which sets x to display two decimal places. So the output
result is:
x = 1.23
where % indicates the start of the substitution notation, 4 specifies the total number of digits, .2
specifies 2 decimal places, and f is an indicator for floating notation. So the output is:
x = 1.00M
160
5.1.2 Operations
5.1.2
Operations
Once you have loaded or created some numeric data, here are some script examples of things
you may want to do.
Basic Arithmetic
Most often data is stored in columns and you want to perform various operations on that data
in a row-wise fashion. You can do this in two ways in your LabTalk scripts: (1) through direct
statements with operators or (2) using ranges. For example, you want to add the value in each
row of column A to its corresponding value in column B, and put the resulting values in column
C:
Col(C) = Col(A) + Col(B);
// Add
// Multiply
// Divide
The - and ^ operators work the just as above for subtraction and exponentiation respectively.
You can also perform the same operations on columns from different sheets with range
variables:
// Point to column 1 of sheets 1, 2 and 3
range aa = 1!col(1);
range bb = 2!col(1);
range cc = 3!col(1);
cc = aa+bb;
cc = aa^bb;
cc = aa/bb;
When performing arithmetic on data in different sheets, you need to use range
variables. Direct references to range strings are not supported. For example,
the script Sheet3!col(1) = Sheet1!col(1) + Sheet2!col(1); will not work!
161
Functions
In addition to standard operators, LabTalk supports many common functions for working with
your data, from trigonometric functions like sin and cos to Bessel functions to functions that
generate statistical distributions like uniform and Poisson. All LabTalk functions work with
single-number arguments of course, but many are also "vectorized" in that they work on
worksheet columns, loose datasets, and matrices as well. Take the trigonometric function sin
for example:
// Find the sine of a number:
double xx = sin(0.3572)
// Find the sine of a column of data (row-wise):
Col(B) = sin(Col(A))
// Find the sine of a matrix of data (element-wise):
[MBook2] = sin([MBook1])
As an example of a function whose primary job is to generate data consider the uniform
function, which in one form takes as input N, the number of values to create, and then
generates N uniformly distributed random numbers between 0 and 1:
/* Fill the first 20 rows of Column B
with uniformly distributed random numbers: */
Col(B) = uniform(20);
For a complete list of functions supported by LabTalk see Alphabetic Listing of Functions.
5.2.1
In Origin, string processing is supported in two ways: with string variables, and with string
registers. In general, we encourage the use of string variables as they are more intuitive (i.e.,
more like strings in other programming languages) and are supported by many pre-defined
string methods; both of which are advantages over string registers.
String Variables
A string variable is created by declaration and/or assignment, and its name is always followed
by a $-sign. For example:
// Creates by declaration a variable named 'aa' of the string type;
//'aa' is empty (i.e., "")
string aa$;
// Assigns to 'aa' a character sequence
162
Note: Because string variable cc was not declared, it is given Global (or Project) scope, which
means all routines, functions, or otherwise can see it. Declared variables aa and bb are given
Local (or Session) scope. For more on scope, see Variables and Scope.
String Registers
Prior to Version 8.0, Origin supported string processing with string registers. As such, they
continue to be supported by more recent versions, and you may see them used in script
programming examples. There are 26 string registers, corresponding to the 26 letters of the
English alphabet, each proceeded by a %-sign, i.e., %A--%Z. They can be assigned a
character sequence just like string variables, the differences are in the way they are handled
and interpreted, as the examples below illustrate. As a warning, several of the 26 string
registers are reserved for system use, most notably, the ranges %C--%I, and %X--%Z. For
complete documentation on their use, see String Registers.
5.2.2
String Processing
163
String Concatenation
You can concatenate string s by using the '+' operator. As shown below:
string aa$="reading";
string bb$="he likes " + aa$ + " books";
type "He said " + bb$;
You may also use the insert string method to concatenate two strings:
string aa$ = "Happy";
string bb$ = " Go Lucky";
// insert the string 'aa' into string 'bb' at position 1
bb.insert(1,aa$);
bb$=;
For a complete listing and description of supported string methods, please see String (Object).
// "Left Handed"
// Extract the file name substring from the longer file path string:
%N="C:\Program Files\Origin 8\Samples\Import\S15-125-03.dat";
for(done=0;done==0; )
{
%M=%[%N,>'\'];
if(%[%M]>0) %N = %M;
164
5.2.3
Conversion to Numeric
The next few examples demonstrate converting a string of numeric characters to an actual
number.
Working With Data
165
The syntax %(string$) is one of two substitution notations supported in LabTalk. The other,
$(num), is used to convert in the opposite direction; from numeric to string.
5.2.4
// ANS: 556
String Arrays
This example shows how to create a string array, add elements to it, sort, and list the contents
of the array.
// Import an existing sample file
newbook;
fpath$ = "Samples\Data Manipulation\US Metropolitan Area Population.dat"
string fname$ = system.path.program$ + fpath$;
impasc;
// Loop over last column and find all states
range rMetro=4;
stringarray saStates;
for( int ir=1; ir<=rMetro.GetSize(); ir++ )
{
string strCell$ = rMetro[ir]$;
string strState$ = strCell.GetToken(2,',')$;
166
5.3.1
As an example, say you have Date data in Column 1 of your active sheet and Time data in
Column 2. You would like to store the combined date-time as a single column.
/* Since both date and time have a mathematical basis,
they can be added: */
167
The column number above was hard-coded into the format statement; if instead you had the
column number as a variable named cn, you could replace the number 3 with $(cn) as in
wks.col$(cn).format = 4. For other format and subformat options, see LabTalk Language
Reference: Object Reference: Wks.col (object).
If our date and time column are just text with a MM/dd/yyyy format in Column 1 and
hh:mm:ss format in Column 2, the same operation is possible with a few more lines of code:
// Get the number of rows to loop over.
int nn = wks.col1.nrows;
loop(ii,1,nn){
string dd$ = Col(1)[ii]$;
string tt$ = Col(2)[ii]$;
// Store the combined date-time string just as text
Col(3)[ii]$ = dd$ + " " + tt$;
// Date function converts the date-time string to a numeric date value
Col(4)[ii] = date(%(dd$) %(tt$));
};
// Now we can convert column 4 to a true Date column
wks.col4.format = 4; // Convert to a Date column
wks.col4.subformat = 11; // Display as M/d/yyyy hh:mm:ss
Here, an intermediate column has been formed to hold the combined date-time as a string,
with the resulting date-time (numeric) value stored in a fourth column. While they appear to be
the same text, column C is literally just text and column D is a true Date.
Given this mathematical system, you can calculate the difference between two Date values
which will result in a Time value (the number of days, hours and minutes between the two
dates) and you can add a Time value to a Date value to calculate a new Date value. You can
also add Time data to Time data and get valid Time data, but you cannot add Date data to
Date data.
168
5.3.2
Available Formats
Use the D notation to convert a numeric date value into a date-time string using one of Origin's
built-in Date subformats:
type "$(@D, D10)";
returns the current date and time (stored in the system variable @D) as a readable string:
7/20/2009 10:30:48
The D10 option corresponds to the MM/dd/yyyy hh:mm:ss format. Many other output formats
are available by changing the number after the D character, which is the index entry (from 0) in
the Date Format drop down list of the Worksheet Column Format dialog box, in the line of
script above. The first entry (index = 0) is the Windows Short Date format, while the second is
the Windows Long Date format.
Note : The D must be uppercase. When setting a worksheet subformat as in
wks.col3.subformat = #, these values are indexed from 1.
For instance
type "$(date(7/20/2009), D1)";
Similarly, for time values alone, there is an analogous T notation , to format output:
type "$(time(12:04:14), T5)";
// ANS: 12:04 PM
Formatting dates and times in this way uses one specific form of the more general $()
Substitution notation.
Custom Formats
There are three custom date and time formats - two of which are script editable properties and
one which is editable in the Column Properties dialog or using a worksheet column object
method.
1.
2.
system.date.customformatn$
wks.col.SetFormat object method.
Both methods use date-time specifiers, such as yyyy'.'MM'.'dd, to designate the custom
format. Please observe that:
The text portions (non-space delimiters) of the date-time specifier can be changed as
required, but must be surrounded by single quotes.
The specifier tokens themselves (i.e., yyyy, HH, etc.) are case sensitive and need to be used
exactly as shown all possible specifier tokens can be found in the Reference Tables: Date
and Time Format Specifiers.
The first two formats store their descriptions in local file storage and as such may appear
different in other login accounts. The third format stores its description in the column itself.
169
Dnn notation
Origin has reserved D19 to D21 (subformats 20 to 22, since the integer after D starts its count
from 0) for these custom date displays. The options D19 and D20 are controlled by system
variables system.date.customformat1$ and system.date.customformat2$, respectively. To
use this option for output, follow the example below:
system.date.customformat1$ = MMM dd hh'.'mm tt;
type "$(Date(7/25/09 14:47:21),D19)";
// Output: Jul 25 02.47 PM
system.date.customformat2$ = yy','MM','dd H'.'mm'.'ss'.'####;
type "$(Date(7/27/09 8:22:37.75234),D20)"; // Output: 09,07,27 8.22.37.7523
170
6.1.1
You can manipulate workbooks and worksheets with the Page and Wks objects. You can also
use Data Manipulation X-Functions. These objects and X-Functions can duplicate data,
generate new workbooks and new worksheets, set worksheet properties, etc. Some practical
examples are provided below.
If you did not specify the workbook name when using newbook, you can use win -r command
to rename it after creation. The following script will rename the current workbook to
MyNewBook:
win -r %H MyNewBook
Activate a Worksheet
Workbook is an Origin object that contains worksheets which then contain columns. The
window -a command is used to active a window, including a workbook, with the following
syntax:
171
win -a winName;
for example:
win -a book1;
Worksheets in a book are internally layers in a page. In other words, a worksheet is derived
from a layer object and a workbook derived from a page object. The active layer in a page is
represented by the page.active or page.active$ property, and thus it is used to active a
worksheet.
page.active = 2; // Active worksheet by index
page.active$ = sheet2;
Most Origin commands operate on the active window, so you may be tempted to use win -a to
activate a workbook and then run script after it to assume the active book. This will work in
simple codes but for longer script, there might be timing issues and we recommend that you
use window -o winName {script} instead. See A Note about Object that a Script Operates upon
for more detail explanation.
Two properties, wks.maxRows and wks.nRows are similar. The former one find the largest row
index that has value in the worksheet, while the later set or read the number of rows in the
worksheet. You can see the different in the following script.
newbook;
col(b) = {1:10};
wks.maxRows = ;
wks.nRows = ;
172
Copying a Column
The colcopy X-Function copies column(s) of data including column label rows and column
format such as date or text and numeric.
The following example copies columns two through four of the active worksheet to columns
one through three of sheet1 in book2:
// Both the data and format as well as each column long name,
// units and comments gets copied:
colcopy irng:=(2:4) orng:=[book2]sheet1!(1:3) data:=1
format:=1 lname:=1 units:=1 comments:=1;
Moving a Column
The colmove X-Function allows you to move column(s) of data within a worksheet. It accepts
an explicitly stated range (as opposed to a range variable), and the type of move operation as
inputs.
// Make the first column the last (left to right) in the worksheet:
colmove rng:=col(1) operation:=last;
// Move columns 2-4 to the leftmost position in the worksheet:
colmove rng:=Col(2):Col(4) operation:=first;
Copying a Matrix
The following example copies a matrix from mbook1 into another matrix mbook2.
mcopy im:=mbook1 om:=mbook2;
Deleting a Workbook
The win -cd command can be used to delete a workbook, matrix, or graph window.
Workbooks and Matrixbooks
173
Or the same can be done with the desired book name stored in a string variable:
string str$="book1";
win -cd %(str$);
Deleting a Worksheet
The layer -d command can be used to delete a worksheet or graph layer.
To delete the active worksheet:
layer -d;
The variable __report$ is an example of a system-created string variable that records the lastused instance of a particular object. A list of such variables can be found in Reference Tables.
6.1.2
In this section we present examples of X-Functions for basic data processing. For direct
access to worksheet data, see Range Notation.
174
Examples
The following script will create a new X and Y column where the Y will be the mean value for
each of the duplicate X values.
reducedup col(B);
The following script will reduce the active selection (which can be multiple columns or an entire
worksheet, independent of X or Y plotting designation) by a factor of 3. It will remove rows 2
and 3 and then rows 5 and 6, leaving rows 1 and 4, etc. By default, the reduced values will go
to a new worksheet.
reducerows npts:=3;
The following script will average every n numbers (5 in the example below) in column A and
output the average of each group to column B. It is the same as the ave LabTalk function,
which would be written as col(b)=ave(col(a),5):
reducerows irng:=col(A) npts:=5 method:=ave rd:=col(b);
175
As you can see, the only difference from the earlier code is that we have added the book part
of the range notation for the ow variable, with the <new> keyword. (show links and indexing to
<new> modifiers, options, like template, name, etc)
Sorting a Worksheet
The following example shows how to perform nested sorting of data in a worksheet using the
wsort X-Function:
// Start a new book and import a sample file
newbook;
string fname$ = system.path.program$ + "Samples\Statistics\automobile.dat";
impasc;
// Set up vectors to specify nesting of columns and order of sorting;
// Sort nested: primary col 2, then col 1, then col 3:
dataset dsCols = {2, 1, 3};
// Sort col2 ascending, col 1 ascending, col 3 descending:
176
6.2.1
Examples in this section are similar to those found in the Worksheet Operation section,
because many object properties and X-Functions apply to both Worksheets and Matrix Sheets.
Note, however, that not all properties of the wks object apply to a matrixsheet, and one should
verify before using a property in production code.
177
After creating a matrix sheet, you can also use the mdim X-Function to set matrix dimensions.
The win -r command can be used to rename a window in Origin. For example:
win -r %H MyNewMatBook;
The command window -o winName {script} can be used to run the specified script for the
named Matrix. See the opening pages of the Running Scripts chapter for a more detailed
explanation.
178
Set Dimensions
Both the wks object and the mdim X-Function can be used to set matrix dimensions:
// Use the wks object to set dimension
wks.ncols = 100;
wks.nrows = 200;
// Use the mdim X-Function to set dimension
mdim cols:=100 rows:=100;
For the case of multiple matrix objects contained in the same matrix sheet, note that all of the
matrix objects must have the same dimensions.
Set XY Mapping
Matrices have numbered columns and rows which are mapped to linearly spaced X and Y
values. In LabTalk, you can use the mdim X-Function to set the mapping.
// XY mapping of matrix sheet
mdim cols:=100 rows:=100 x1:=2 x2:=4 y1:=4 y2:=9;
179
6.2.2
Data Manipulation
In addition to the matrix command, Origin provides X-Functions for performing specific
operations on matrix data. In this section we present examples of X-Functions that available
used to work with matrix data.
180
181
182
// horizontally
// vertically
Please see Image Processing X-Functions for further information on image handling.
183
6.3.1
Worksheet to Matrix
Data contained in a worksheet can be converted to a matrix using a set of Gridding XFunctions.
The w2m X-Function converts matrix-like worksheet data directly into a matrix. Data in source
worksheet can contain the X or Y coordinate values in the first column, first row, or a header
row. However, because the coordinates in a matrix should be uniform spaced, you should have
uniformly spaced X/Y values in the source worksheet.
If your X/Y coordinate values are not uniform spaced, you should use the Virtual Matrix feature
instead of converting to a matrix.
The following example show how to perform direct worksheet to matrix conversion:
// Create a new workbook
newbook;
// Import sample data
string fname$ = system.path.program$ +
"\samples\Matrix Conversion and Gridding\DirectXY.dat";
impasc;
// Covert worksheet to matrix, first row will be X and first column will be Y
w2m xy:=xcol xlabel:=row1 ycol:=1;
// Show X/Y values in the matrix window
page.cntrl = 2;
When your worksheet data is organized in XYZ column form, you should use Gridding to
convert such data into a matrix. Many gridding methods are available, which will interpolate
your source data and generate a uniformly spaced array of values with the X and Y dimensions
specified by you.
The following example converts XYZ worksheet data by Renka-Cline gridding method, and
then creates a 3D graph from the new matrix.
// Create a new workbook without sheets
newbook;
// Import sample data
string fname$ = system.path.program$ +
"\samples\Matrix Conversion and Gridding\XYZ Random Gaussian.dat";
impasc;
// Convert worksheet data into a 20 x 20 matrix by Renka-Cline gridding method
xyz_renka 3 20 20;
// Plot a 3D color map graph
worksheet -p 242 cmap;
6.3.2
Matrix to Worksheet
Data in a matrix can also be converted to a worksheet by using the m2w X-Function. This XFunction can directly convert data into worksheet, with or without X/Y mapping, or convert data
by rearranging the values into XYZ columns in the worksheet.
184
The following example shows how to convert matrix into worksheet, and plot graphs using
different methods according the form of the worksheet data.
// Create a new matrix book
win -t matrix;
// Set matrix dimension and X/Y values
mdim cols:=21 rows:=21 x1:=0 x2:=10 y1:=0 y2:=100;
// Show matrix X/Y values
page.cntrl = 2;
// Set matrix Z values
msetvalue formula:="nlf_Gauss2D(x, y, 0, 1, 5, 2, 50, 20)";
// Hold the matrix window name
%P = %H;
// Covert matrix to worksheet by Direct method
m2w ycol:=1 xlabel:=row1;
// Plot graph from worksheet using Virtual Matrix
plot_vm irng:=1! xy:=xacross ztitle:=MyGraph type:=242 ogl:=<new template:=cmap>;
// Convert matrix to XYZ worksheet data
sec -p 2;
win -a %P;
m2w im:=!1 method:=xyz;
// Plot a 3D Scatter
worksheet -s 3;
worksheet -p 240 3D;
If the matrix data is converted directly to worksheet cells, you can then plot such worksheet
data using the Virtual Matrix feature.
185
186
Graphing
Origin's breadth and depth in graphing support capabilities are well known. The power and
flexibility of Origin's graphing features are accessed as easily from script as from our graphical
user interface. The following sections provide examples of creating and editing graphs from
LabTalk scripts.
7.1.1
plotxy is an X-Function used for general purpose plotting. It is used to create a new graph
window, plot into a graph template, or plot into a new graph layer. It has a syntax common to
all X-Functions:
plotxy option1:=optionValue option2:=optionValue ... optionN:=optionValue
All possible options and values are summarized in the X-Function help for plotxy. Since it is
somewhat non-intuitive, the plot option and its most common values are summarized here:
plot:=
Plot Type
200
Line
201
Scatter
202
Line+symbol
203
column
All of the possible values for the plot option can be found in the Worksheet (command) (-p
switch).
187
Plotting X Y data
Input XYRange referencing the X and Y
The following example plots the first two columns of data in the active worksheet, where the
first column will be plotted as X and the second column as Y, as a line plot.
plotxy iy:=(1,2) plot:=200;
Plotting X YY data
The following example plots the first three columns of data from Book1, Sheet1, where the first
column will be plotted as X and the second and third columns as Y, as a grouped scatter plot.
plotxy iy:=[Book1]Sheet1!(1,2:3) plot:=201;
Plotting XY XY data
The following example plots the first four columns of data in the active worksheet, where the
first column will be plotted as X against the second column as Y and the third column as X
against the fourth column as Y, as a grouped line+symbol plot.
plotxy iy:=((1,2),(3,4)) plot:=202;
188
Graphing
Graphing
189
7.1.2
According to the grouping variables (datasets), plotgroup X-Function creates grouped plots for
page, layer or dataplot. To work properly, the worksheet should be sorted by the graph group
data first, then the layer group data and finally the dataplot group data.
This example shows how to plot by group.
// Establish a path to the sample data
fn$ = system.path.program$ + "Samples\Statistics\body.dat";
newbook;
impASC fn$;
This next example creates graph windows based on one group and graph layers based on a
second group:
// Bring in Sample data
fn$ = system.path.program$ + "Samples\Graphing\Categorical Data.dat";
newbook;
impASC fn$;
// Sort
dataset sortcol = {4,3}; // sort by drug, then gender
dataset sortord = {1,1}; // both ascending sort
wsort nest:=sortcol ord:=sortord;
// Plot each drug in a separate graph with gender separated by layer
plotgroup iy:=(2,1) pgrp:=col(drug) lgrp:=col(gender);
Note : Each group variable is optional. For example, you could use one group variable to
organize data into layers by omitting Page Group and Data Group. The same sort order is
important for whichever options you do use.
7.1.3
190
Graphing
You can also create 3D color map or 3D mesh graph. 3D graphs can be plotted either from
worksheet or matrix. And you may need to do gridding before plotting.
We can run the following script after above example and create a 3D wire frame plot from
matrix:
win -o bkn$ {
// Gridding by Shepard method
xyz_shep 3;
// Plot 3D wire frame graph;
worksheet -p 242 wirefrm;
};
Graphing
191
Graph Window
A graph window is comprised of a visual page, with an associated Page (Object). Each graph
page contains at least one visual layer, with an associated layer object. The graph layer
contains a set of X Y axes with associated layer.x and layer.y objects, which are sub-objects
of the layer object.
When you have a range variable mapped to a graph page or graph layer, you
can use that variable name in place of the word page or layer.
7.2.2
Page Properties
The page object is used to access and modify properties of the active graph window. To output
a list of all properties of this object:
page.=
The list will contain both numeric and text properties. When setting a text (string) property
value, the $ follows the property name.
To change the Short name of the active window:
page.name$="Graph3";
You can also change Graph properties or attributes using a range variable instead of the page
object. The advantage is that using a range variable works whether or not the desired graph is
active.
The example below sets the active graph layer to layer 2, using a range variable to point to the
desired graph by name. Once declared, the range variable can be used in place of page:
//Create a Range variable that points to your graph
range rGraph = [Graph3];
//The range now has properties of the page object
rGraph.active=2;
7.2.3
Layer Properties
The layer object is used to access and modify properties of the graph layer.
To set the graph layer dimensions:
192
Graphing
7.2.4
Axis Properties
The layer.x and layer.y sub-object of the layer object is used to modify properties of the axes.
To modify the X scale of the active layer:
//Set the scale to Log10
layer.x.type = 2;
//Set the start value
layer.x.from = .001;
//Set the end value
layer.x.to = 1000;
//Set the increment value
layer.x.inc = 2;
If you wish to work with the Y scale, then simply change the x in the above
script to a y. If you wish to work with a layer that is not active, you can specify
the layer index, layerN.x.from. Example: layer3.y.from = 0;
Graphing
193
The Axis command can also be used to access the settings in the Axis dialog.
To change the X Axis Tick Labels to use the values from column C, given a plot of col(B) vs.
col(A) with text in col(C), from Sheet1 of Book1:
range aa = [Book1]Sheet1!col(C);
axis -ps X T aa;
7.2.5
The Set (Command) is used to change the attributes of a data plot. The following example
shows how the Set command works by changing the properties of the same dataplot several
times. In the script, we use sec command to pause one second before changing plot styles.
// Make up some data
newbook;
col(a) = {1:5};
col(b) = col(a);
// Create a scatter plot
plotxy col(b);
// Set symbol size
// %C is the active dataset
sec -p 1;
set %C -z 20;
// Set symbol shape
sec -p 1;
set %C -k 3;
// Set symbol color
sec -p 1;
set %C -c color(blue);
// Connect the symbols
sec -p 1;
set %C -l 1;
// Change plot line color
sec -p 1;
set %C -cl color(red);
// Set line width to 4 points
sec -p 1;
set %C -w 2000;
// Change solid line to dash
sec -p 1;
set %C -d 1;
194
Graphing
7.2.6
Formatting the Legend and Label are discussed on Creating and Accessing Graphical Objects.
Remember that when using X-Functions you do not always need to use the
variable name when assigning values; however, being explicit with col:= and
row:= may make your code more readable. To save yourself some typing, in
place of the code above, you can use the following:
newpanel 2 3;
Graphing
195
7.3.2
The layadd X-Function creates/adds a new layer to a graph window. This function is the
equivalent of the Graph:New Layer(Axes) menu.
Programmatically adding a layer to a graph is not common. It is recommended
to create a graph template ahead of time and then use the plotxy X-Function to
plot into your graph template.
The following example will add an independent right Y axis scale. A new layer is added,
displaying only the right Y axis. It is linked in dimension and the X axis is linked to the current
active layer at the time the layer is added. The new added layer becomes the active layer.
layadd type:=rightY;
7.3.3
The layarrange X-Function is used to arrange the layers on the graph page.
Programmatically arranging layers on a graph is not common. It is
recommended to create a graph template ahead of time and then use the
plotxy X-Function to plot into your graph template.
The following example will arrange the existing layers on the active graph into two rows by
three columns. If the active graph does not already have 6 layers, it will not add any new
layers. It arranges only the layers that exist.
layarrange row:=2 col:=3;
7.3.4
Moving a layer
The laysetpos X-Function is used to set the position of one or more layers in the graph,
relative to the page.
The following example will left align all layers in the active graph window, setting their position
to be 15% from the left-hand side of the page.
laysetpos layer:="1:0" left:=15;
196
Graphing
7.3.5
The layswap X-Function is used to swap the location/position of two graph layers. You can
reference the layers by name or number.
The following example will swap the position on the page of layers indexed 1 and 2.
layswap igl1:=1 igl2:=2;
The following example will swap the position on the page of layers named Layer1 and Layer2.
layswap igl1:=Layer1 igl2:=Layer2;
Layers can be renamed from both the Layer Management tool as well as the
Plot Details dialog. In the Layer Management tool, you can double-click on the
Name in the Layer Selection list, to rename. In the left-hand navigation panel of
the Plot Details dialog, you can slow double-click a layer name to rename.
To rename from LabTalk, use layern.name$ where n is the layer index. For
example, to rename layer index 1 to Power, use the following:
layer1.name$="Power";
7.3.6
Aligning layers
The layalign X-Function is used to align one or more layers relative to a source/reference
layer.
The following example will bottom align layer 2 with layer 1 in the active graph window.
layalign igl:=1 destlayer:=2 direction:=bottom;
The following example will left align layers 2, 3 and 4 with layer 1 in the active graph window.
layalign igl:=1 destlayer:=2:4 direction:=left;
The following example will left align all layers in Graph3 with respect to layer 1. The 2:0
notation means for all layers, starting with layer 2 and ending with the last layer in the graph.
layalign igp:=graph3 igl:=1 destlayer:=2:0 direction:=left;
7.3.7
Linking Layers
The laylink X-Function is used for linking layers to one another. It is used to link axes scales
as well as layer area/position.
The following example will link all X axes in all layers in the active graph to the X axis of layer
1. The Units will be set to % of Linked Layer.
laylink igl:=1 destlayers:=2:0 XAxis:=1;
7.3.8
The laysetunit X-Function is used to set the unit for the layer area of one or more layers.
Graphing
197
Labels
A label is one type of graphic object and can be created using the Label command. Once a
label is created, you can see it by invoking the list o command option. If no name is specified
when using the label -n command, Origin will name the labels automatically with "Textn",
where n is the creation index.
The following script creates a new text label on your active graph window from the value in row
1 of column 2 of sheet2 in book1. Note the difference from the above example - the cell(i,j)
function takes row number as first argument. It works for a numeric cell only.
label -s $([book1]Sheet2!cell(1,2));
The following script creates a new text label on your active graph window from the value in row
1 of column 2 of sheet2 in book1. The value is displayed with 4 significant digits.
label -s $([book1]Sheet2!cell(1,2), *4);
The %( ) notation does not allow formatting and displays the value with full
precision. You need to use $( ) notation if you wish to format the numeric value.
198
Graphing
Placing Labels
Labels are graphical objects , so we can use LabelName.= to get or set label properties.
The object.x and object.y properties specify the x and y position of the center of an object,
and object.dx and object.dy specify the object width and height. These four properties are all
using axis units, so we can combine these four properties with layer.axis.from and
layer.axis.to to place the label in the proper position on a layer.
The following script example shows how to use label properties to place labels.
// Import sample data
newbook;
string fname$ = system.path.program$ +
"Samples\Curve Fitting\Enzyme.dat";
impasc;
string bn$ = %H;
plotxy ((,2), (,3));
// Create a label and name it "title"
// Be note the sequence of option list, -n should be the last option
// -j is used to center the text
// -s enables the substitution notation
// -sa enables conversion of \n (new line)
// Substitution is used to get text from column comments
label -j 1 -s -sa -n title
Enzyme Reaction Velocity\n%([bn$]1!col(2)[c]$) vs. %([bn$]1!col(3)[c]$);
// Set font
title.font=font(Times New Roman);
// Set label font size
title.fsize = 28;
// Set label font color
title.color = color(blue);
// Placing label
title.x = layer.x.from + (layer.x.to - layer.x.from) / 2;
title.y = layer.y.to + title.dy / 2;
// Placing legend
legend.y = layer.y.from + (layer.y.to - layer.y.from) / 2;
legend.x = layer.x.to - legend.dx / 2;
7.4.2
Graph Legend
A graph legend is just a text label with the object name Legend. It has properties common to
all graphical objects. To output a list of all properties of the legend, simply enter the following:
legend.=
Graphing
199
To view the object name of any graphical object right-click on it and select
Programming Control from the context menu.
To update or reconstruct the graph legend, use the legendupdate X-function, which has the
following syntax:
legendupdate [mode:=optionName]
The square brackets indicate that mode is optional, such that legendupdate may be used on
its own, as in:
legendupdate;
which will use the default legend setting (short name) or use mode to specify what you would
like displayed:
legendupdate mode:=0;
which will display the Comment field in the regenerated legend for the column of data plotted.
All possible modes can be found in Help: X-Functions: legendupdate:
Note that either the index or the name of the mode may be used in the X-function call, such
that the script lines,
legendupdate mode:=comment;
legendupdate mode:=0;
All available custom legend options are given in the Text Label Options.
The following example shows how to use these functions and commands to update legends.
// Import sample data;
newbook;
string fn$ = system.path.program$ +
"Samples\Curve Fitting\Enzyme.dat";
impasc fname:=fn$;
string bn$ = %H;
// Create a two panels graph
newpanel 1 2;
// Add dataplot to layers
for (ii=1; ii<=2; ii++)
{
plotxy iy:=[bn$]1!wcol(ii+1) plot:=201 ogl:=$(ii);
}
// Update whole page legends by worksheet comment + unit
legendupdate dest:=0 update:=0 mode:=custom custom:=@ln;
// Modify the legend settings for each layers
doc -e LW {
200
Graphing
7.4.3 Draw
// Set legend font size
legend.fsize = 28;
// Set legend font color
legend.color = color(blue);
// Move legend to upper-left of the layer
legend.x = layer.x.from + legend.dx / 2;
legend.y = layer.y.to - legend.dy / 2;
};
Note: To modify the text of the legend, you can also use the label command. One reason to
use this would be if you wanted to display more than one text entry for each dataplot. The
script below will update the legend text to display both the worksheet name and the X column's
Comment:
label -sl -n legend "\l(1) %(1, @WS) %(1X, @LC)";
7.4.3
Draw
Use the -l and -v switches to draw a Vertical Line. In the example below, the line will be drawn
at the midpoint of the X axis. X1 and X2 are system variables that store the X From and X To
scale values respectively.
draw -l -v (X1+(X2-X1)/2);
A line also is a graphic object. Once created, you can access and change the object properties.
Graphing
201
Importing
Origin 8.1 provides a collection of X-Functions for importing data from various file formats such
as ASCII, CSV, Excel, National Instruments DIAdem, pCLAMP, and many others. The XFunction for each file format provides options relevant to that format in addition to common
settings such as assigning the name of the import file to the book or sheet name.
Brief Description
impASC
impBin2d
impCSV
impDT
impEP
Import EarthProbe (EPA) file. Now only EPA file is supported for EarthProbe
data.
impExcel
impFamos
impFile
impHEKA
203
204
impIgorPro
impImage
impinfo
impJCAMP
impJNB
Import SigmaPlot (JNB) file. It supports version lower than SigmaPlot 8.0.
impKG
impMatlab
impMDF
Import ETAS INCA MDF (DAT, MDF) files. It supports INCA 5.4 (file version
3.0).
impMNTB
Import Minitab file (MTW) or project (MPJ). It supports the version prior to
Minitab 13.
impNetCDF
Import netCDF file. It supports the file version lower than 3.1.
impNIDIAdem
impNITDM
Import National Instruments TDM and TDMS files(TDMS does not support
data/time format)
impODQ
imppClamp
Import pCLAMP file. It supports pClamp 9 (ABF 1.8 file format) and pClamp 10
(ABF 2.0 file format).
impSIE
impSPC
impSPE
Import Princeton Instruments (SPE) file. It supports the version prior to 2.5.
Importing
iwfilter
reimport
You can write your own import routines in the form of X-Functions as well. If the name of a
user-created X-Function begins with imp and it is placed in the \X-Functions\Import and
Export subfolder of the EXE, UFF or Group paths, then such functions will appear in the
File|Import menu.
The following sections give examples of script usage of these functions for importing data,
graphs, and images.
8.2.1
This example imports an ASCII file (in this case having a *.txt extension) into the active
worksheet or matrix. Another X-Function, findfiles, is used to find a specific file in a directory
(assigned to the string path$) that contains many other files. The output of the findfiles XFunction is a string variable containing the desired filename(s), and is assigned, by default, to a
variable named fname$. Not coincidentally, the default input argument for the impASC XFunction is a string variable called fname$.
string path$ = system.path.program$ + "Samples\Import and Export\";
findfiles ext:=matrix_data_with_xy.txt;
impASC;
8.2.2
This example makes use of many advanced options of the impASC X-Function. It imports a
file to a new book, which will be renamed by the options of the impASC X-Function. Notice that
there is only one semi-colon (following all options assignments) indicating that all are part of
the call to impASC.
Importing
205
options.Names.AutoNames:=0
options.Names.FNameToSht:=1
options.Miscellaneous.LeadingZeros:=1;
8.2.3
This example demonstrates importing multiple data files to a new workbook; starting a new
worksheet for each file.
string fns, path$=system.path.program$ + "Samples\Curve Fitting\";
findfiles f:=fns$ e:="step1*.dat";
int n = fns.GetNumTokens(CRLF);
string bkName$;
newbook s:=0 result:=bkName$;
impasc fname:=fns$
options.ImpMode:=4
options.Sparklines:=2
options.Cols.NumCols:=3
options.Names.AutoNames:=0
options.Names.FNameToBk:=0
options.Names.FNameToSht:=1
options.Names.FNameToShtFrom:=4
options.Names.FNameToBkComm:=1
options.Names.FNameToColComm:=1
options.Names.FPathToComm:=1
orng:=[bkName$]A1!A[1]:C[0] ;
206
Importing
8.2.5
Another way to bring data into Origin is with the Open (Command).
Open has several options, one of which allows a file to be open for viewing in a notes window:
open -n fileName [winName]
This line of script opens the ASCII file fileName to a notes window. If the optional winName is
not specified, a new notes window will be created.
To demonstrate with an existing file, try the following:
%b = system.path.program$ + "Samples\Import and Export\ASCII simple.dat";
open -n "%b";
8.2.6
Importing
207
8.2.7
Origin provides four functions for Database Queries. The basic functionality of Database
importing is encapsulated in two functions as shown in this example using the standard
Northwind database provided by Microsoft Office:
// The dbedit function allows you to create the query and connection
// strings and attach these details to a worksheet
dbedit exec:=0
sql:="Select Customers.CompanyName, Orders.OrderDate,
[Order Details].Quantity, Products.ProductName From
((Customers Inner Join Orders On Customers.CustomerID = Orders.CustomerID)
Inner Join [Order Details] On Orders.OrderID = [Order Details].OrderID)
Inner Join Products On Products.ProductID = [Order Details].ProductID"
connect:="Provider=Microsoft.Jet.OLEDB.4.0;User ID=;
Data Source=C:\Program Files\Microsoft Office\OFFICE11\SAMPLES\Northwind.mdb;
Mode=Share Deny None;Extended Properties="";
Jet OLEDB:System database="";
Jet OLEDB:Registry Path="";
Jet OLEDB:Database Password=***;
Jet OLEDB:Engine Type=5;
Jet OLEDB:Database Locking Mode=1;
Jet OLEDB:Global Partial Bulk Ops=2;
Jet OLEDB:Global Bulk Transactions=1;
Jet OLEDB:New Database Password="";
Jet OLEDB:Create System Database=False;
Jet OLEDB:Encrypt Database=False;
Jet OLEDB:Don't Copy Locale on Compact=False;
Jet OLEDB:Compact Without Replica Repair=False;
Jet OLEDB:SFP=False;Password="
// The dbimport function is all that's needed to complete the import
dbimport;
Two additional functions allow you to retrieve the details of your connection and query strings
and execute a Preview/Partial import.
Name
dbEdit
208
Brief Description
Importing
dbInfo
Read the sql string and the connection string contained in a database query
in a worksheet.
dbPreview
8.3.1
This example imports a single image file to a matrix and then converts the (RGB color) image
to grayscale values, storing them in a new matrix.
newbook mat:=1;
// Create a new matrix book
fpath$ = "Samples\Image Processing and Analysis\car.bmp";
string fname$ = system.path.program$ + fpath$;
// Imports the image on path 'fname$' to the active window
//(the new matrix book)
impimage;
// Converts the image to grayscale values,and puts them in a new matrix
// 'type' specifies bit-depth:
// 1=byte (1-byte/8-bit)
img2m type:=byte;
Importing
209
8.3.2
This example imports a series of *.TIF images into a new Matrix Book. As an alternative to the
img2m X-Function (shown above), the keyboard shortcuts Ctrl+Shift+d and Ctrl+Shift+i
toggle between the matrix data and image representations of the file.
newbook mat:=1;
fpath$ = "Samples\Image Processing and Analysis\";
string fns, path$ = system.path.program$ + fpath$;
// Find the files whose names begin with 'myocyte'
findfiles f:=fns$ e:="myocyte*.tif";
// Import each file into a new sheet (options.Mode = 4)
impimage options.Mode:=4 fname:=fns$;
8.3.3
8.3.4
You also can import an Image to an existing GraphLayer. Here the image is only for display
(the data will not be visible, unless it is converted to a matrix, see next example).
210
Importing
Importing
211
Exporting
Origin provides a collection of X-Functions for exporting data, graphs, and images. All XFunctions pertaining to exporting have names that start with the letters exp. The table below
provides a listing of these X-Functions. As with all X-Functions, help-file information is available
at Script or Command line by entering the name of the X-Function with the -h option. For
instance: entering expgraph -h in the Script window will display the help file immediately below
the command.
Name
Brief Description
expASC
expGraph
expImage
expMatASC
expNITDM
expWAV
expWks
img2GIF
Export a Worksheet
Your worksheet data may be exported either as an image (i.e., PDF) or as a data file.
213
The expWks X-Function also provides options for exporting many worksheets at the same
time using the export option, which if unspecified simply exports the active worksheet.
In the following example, export:=book exports all worksheets in the current workbook to the
desired folder path:
expWks type:=PDF export:=book path:="D:\TestImages" filename:=Sheet#;
Worksheets are saved in the order they appear in the workbook from left to right. Here, the
naming has been set to number the sheets in that order, as in 'Sheet1', 'Sheet2', etc. If more
than 9 sheets exist, filename:=Sheet## will yield names such as 'Sheet01'.
Other options for export are project, recursive, folder, and specified.
The expWks X-Function is particularly useful in exporting custom report worksheets that user
may create by placing graphs and other relevant analysis results in a single sheet for
presentation, using formatting features such as merging and coloring cells.
Note, in this example, that type simply indicates the type of file extension, and may be set to
any of the following values (type:=dat is equivalent to type:=0):
214
0=dat:*.dat,
1=text:Text File(*.txt),
2=csv:*.csv,
3=all:All Files(*.*)
Exporting
9.2.1
(DPI)
Export a graph as an image using the expGraph X-Function. The image size options are
stored in the nodes of tree variable named tr1, while resolution options (for all raster type
images) are stored in a tree named tr2.
One common application is to export a graph to a desired image format specifying both the
width of the image and the resolution. For example, consider a journal that requires, for a twocolumn article, that graphs be sent as high-resolution (1200 DPI), *.tif files that are 3.2 inches
wide:
// Export the active graph window to D:\TestImages\TEST.TIF.
// Width = 3.2 in, Resolution = 1200 DPI
expGraph type:=tif path:="D:\TestImages" filename:="TEST"
tr1.unit:=0
tr1.width:=3.2
tr2.tif.dotsperinch:=1200;
9.2.2
Exporting all of the graphs from an Origin Project can be achieved by combining the doc -e
command, which loops over all specified objects in a project with the expGraph X-Function.
For example, to export all graphs in the current project as a bitmap (BMP) image, as above:
doc -e P
{
// %H is a string register that holds the name of the active window.
expGraph type:=bmp path:="d:\TestImages\" filename:=%H
tr1.unit:=2
Exporting
215
9.3.1
To export a matrix that holds non-image data to an ASCII file use the expMatAsc X-Function.
Allowed export extensions are *.dat (type:=0), *.txt (type:=1), *.csv (type:=2), and all file types
(type:=3).
// Export a matrix (in Matrix Book 1, Matrix Sheet 1) to a file of
// the *.csv type named TEST.CSV with xy-gridding turned on.
expMatASC im:=[MBook1]MSheet1 type:=2 path:="D:\TEST.CSV" xygrid:=1;
9.3.2
Matrix windows in Origin can contain multiple sheets, and each sheet can contain multiple
matrix objects. A matrix object can contain an image as RGB values (default, reported as three
numbers in a single matrix cell, each matrix cell corresponds to a pixel), or as gray-scale data
(a single gray-scale number in each matrix cell).
For example, a user could import an image into a matrix object (as RGB values) and later
convert it to gray-scale data (i.e., the gray-scale pixel values) using the Image menu. Whether
the matrix object contains RGB or gray-scale data, the contents of the matrix can be exported
as an image file to disk, using the expImage X-Function. For example, the following script
command exports the first matrix object in Sheet 1 of matrix book MBook 1:
// Export the image matrix as a *.tif image:
expImage im:=[MBook1]1!1 type:=tif fname:="c:\flower"
When exporting to a raster-type image format (includes JPEG, GIF, PNG, TIF), one may want
to specify the bit-depth as well as the resolution (in dots-per-inch, DPI). This is achieved with
the expImage options tree, tr. The X-Function call specifying these options might look like this:
216
Exporting
All nodes of the tree tr, are described in the online or product (CHM) help.
Exporting
217
Notes:
value is not applicable for some options and is left out of the command
For further details please see Document (Object).
Internally, Origin updates a property that indicates when a project has been modified.
Attempting to Open a project when the current project has been modified normally triggers a
prompt to Save the current project. The document command has options to control this
property.
Open/Save a project
Use the doc -o command to open a project and the save command to save it.
// Open an Origin Project file
string fname$ = SYSTEM.PATH.PROGRAM$ + "Origin.opj";
doc -o %(fname$);
219
Append projects
Continuing with the previous script, we can Append other project file(s). Origin supports only
one project file at a time.
// Append an Origin Project file to the current file
fname$ = SYSTEM.PATH.PROGRAM$ + "Origin.opj";
doc -a %(fname$); // Abbreviation of ''document -append''
// Save the current project - which is still ''My Project.opj''
save;
// Save the current project with a new name to a new location
save "C:\Data Files\working.opj";
For Excel, you can specify that an Excel file should be imported rather than opened as Excel
doc -ai "C:\Data\Excel\Current Data.xls";
220
Refresh Windows
You can refresh windows with the following command:
doc -u;
Brief Description
pe_dir
pe_cd
pe_move
pe_path
pe_rename
pe_mkdir
Create a Folder
pe_rmdir
Delete a Folder
In this example :
doc -s;
doc -n;
pe_cd /;
// Create a folder
// Navigate to that folder
pe_mkdir "Trials";
// Create a sub-folder
221
// and another
// Return to the top level
// Create a sub-folder
// and another
pe_cd /;
pe_mkdir "Comparison";
Note that if you have Open in Subfolder enabled in Tools : Options : [Open/Close] then you
will have an additional folder named Folder1.
Note: Numeric cell access does not supported to use label row characters.
Here are a few examples of reading and writing column header strings:
Book1_A[L]$ = Time;
Book1_A[U]$ = sec;
Note: For Origin 8.0, LabTalk variables took precedence over Column Label Row characters,
for example:
int L = 4;
Col(B)[L]$=
But since Origin 8.1, this has been changed so that the column label rows (L, U, C, etc.) will
take precedence:
int L = 4;
Col(B)[L]$=
The following example shows how to create and access user parameter rows
// Show the first user parameter row
wks.userParam1 = 1;
// Assign the 1st user parameter row a custom name
wks.userParam1$ = "Temperature";
// Write to a specific user parameter row of a column
col(2)[Temperature]$ = "96.8";
// Get a user-defined parameter row value
double temp = %(col(2)[Temperature]$);
223
// "x0 = 2"
// "dx = 0.5"
To see a Sampling Interval header, you can try the following steps:
1.
2.
Right-click at the top of the remaining column (i.e., B(Y)), such that then
entire column is selected, and select Set Sampling Interval from the
drop-down menu.
3.
4.
Click OK, and you will see a new header row created which lists the values
you specified.
The next example demonstrates how to do this from script, using X-functions.
Also, when you import certain types of data, e.g. *.wav, the sampling interval
will show as a header row.
The initial value and increment can be read back using worksheet column properties:
double XInitial = wks.col1.xinit;
double XIncrement = wks.col1.xinc;
224
10.2.3 Trees
string XUnits$ = wks.col1.xunits$;
string XName$ = wks.col1.xname$;
Note: While these properties will show up in a listing of column properties (Enter wks.col1.= in
the Script window to display the property names for column 1), unless a sampling interval is
established:
10.2.3 Trees
Trees are a data type supported by LabTalk, and we also consider trees a form of metadata
since they give structure to existing data. They were briefly introduced in the section dealing
with Data Types and Variables, but appear again because of their importance to X-functions.
Many X-functions input and output data in tree form. And since X-functions are one of the
primary tools accessible from LabTalk script, it is important to recognize and use tree variables
effectively.
This tree structure includes a tree with additional information about the import. This tree can be
extracted as a tree variable using an X-Function:
Tree MyFiles;
impinfo ipg:=[Book2] tr:=MyFiles;
MyFiles.=; // Dump the contents of the tree to the script Window
Note: The contents of the impinfo tree will depend on the function used to import.
If you import multiple files into one workbook (using either New Sheets, New Columns or New
Rows) then you need to load a particular tree for each file as the Organizer only displays the
system metadata from the last import:
225
226
10.2.3 Trees
Once the information has been stored, it can be retrieved by simply dumping the storage
contents:
// Dump entire contents of page storage
page.tree.=;
// or programmaticaly accessed
temperature = page.tree.experiment.sample.temperature;
string type$ = page.tree.experiment.detector.Type$;
ty Using %(type$) at $(temperature)K;
You can view such trees in the page Organizer for Workbooks and Matrixbooks.
227
You can view such trees in the page Organizer for Workbooks and Matrixbooks.
You can view these trees in the Column Properties dialog on the User Tree tab.
228
The following example shows how to loop and operate on data columns that reside in different
workbooks of a project.
Open the sample project file available in Origin:
\\Samples\LabTalk Script Examples\Loop_wks.opj
In the project there are two folders for two different samples and a folder named Bgsignal for
the background signals alone. Each sample folder contains two folders named Freq1 and
Freq2, which correspond to data at a set frequency for the specific sample.
The workbook in each Freq folder contains three columns including DataX, DataY and the
frequency, which is a constant. The workbook's name in the Bgsignal folder is Bgsig. In the
Bgsig workbook, there are three columns including DataX and two Y columns whose long
names correspond to set frequencies in the workbook in each Freq folder.
The aim is to add a column in each workbook and subtract the background signal for a
particular frequency from the sample data for the same frequency. The following LabTalk script
performs this operation.
doc -e LB
{ //Loop over each worksheet.
if(%H != "Bgsig") //Skip the background signal workbook.
{
Freq=col(3)[1]; //Get the frequency.
wks.ncols=wks.ncols+1; //Add a column in the sample sheet.
//bg signal column for Freq using long name.
range aa=[Bgsig]1!col("$(Freq)");
wcol(wks.ncols)=col(2)-aa; //Subtract the bg signal.
wcol(wks.ncols)[L]$="Remove bg signal"; //Set the long name.
229
For increased control, you may also loop through the books and then loop through the sheets
in your code, albeit a bit more slowly than the code above.
The following example shows how to loop over all workbooks in the current/active Project
Explorer Folder, and then loop over each sheet inside each book that is found:
int nbooks = 0;
// Get the name of this folder
string strPath;
pe_path path:=strPath;
// Loop over all Workbooks ...
// Restricted to the current Project Explorer Folder View
doc -ef W {
int nsheets = 0;
// Loop over all worksheets in each workbook
doc -e LW {
type Sheet name: %(layer.name$);
nsheets++;
}
type Found $(nsheets) sheet(s) in %H;
type %(CRLF);
nbooks++;
}
type Found $(nbooks) book(s) in folder %(strPath$) of project %G;
230
The following script prints the contents of all graph windows in the project to the default printer
driver.
doc -e P print; // Abbreviation of ''document -each Plot Print''
231
nrows = rr.GetSize();
// Get the number of rows
int nlast = nrows - mod(nrows, ndel);
// Need to delete from the bottom to the top
for(int ii = nlast; ii > 0; ii -= ndel)
{
range rr = wcol(1)[$(ii):$(ii)];
mark -d rr;
}
This script calculates the logarithm of four columns on Sheet1, placing the result in the
corresponding column of Sheet2:
for(ii=1; ii<=4; ii++)
{
range ss = [book1]sheet1!col($(ii));
range dd = [book1]sheet2!col($(ii));
dd = log(ss);
}
232
233
11.1 X-Functions
X-Functions are a primary tool for executing tasks and tapping into Origin features from your
LabTalk scripts. The following sections outline the details that will help you recognize,
understand, and utilize X-Functions in LabTalk.
11.1.1 X-Functions
X-Functions provide a uniform way to access nearly all of Origin's capabilities from your
LabTalk scripts. The best way to get started using X-Functions is to follow the many examples
that use them, and then browse the lists of X-Functions accessible from script provided in the
LabTalk-Supported X-Functions section.
Syntax
You can recognize X-Functions in script examples from their unique syntax:
xFunctionName input:=<range> argument:=<name/value> output:=<range> -switch;
General Notes:
X-Functions can have multiple inputs, outputs, and arguments.
X-Functions can be called with any subset of their possible argument list supplied.
If not supplied a value, each required argument has a default value that is used.
Each X-Function has a different set of input and output arguments.
Notes on X-Function Argument Order :
By default, X-Functions expect their input and output arguments to appear in a particular
order.
Expected argument order can be found in the help file for each individual X-Function or from
the Script window by entering XFunctionName -h.
If the arguments are supplied in the order specified by Origin, there is no need to type out
the argument names.
If the argument names are explicitly typed, arguments can be supplied in any order.
The following examples use the fitpoly X-Function to illustrate these points.
235
11.1 X-Functions
Examples
The fitpoly X-Function has the following specific syntax, giving the order in which Origin
expects the arguments:
fitpoly iy:=(inputX,inputY) polyorder:=n coef:=columnNumber oy:=(outputX,outputY)
N:=numberOfPoints;
If given in the specified order, the X-Function call,
fitpoly (1,2) 4 3 (4,5) 100;
tells Origin to fit a 4th order polynomial with 100 points to the X-Y data in columns 1 and 2 of
the active worksheet, putting the coefficients of the polynomial in column 3, and the X-Y pairs
for the fit in columns 4 and 5 of the active worksheet.
In contrast, the command with all options typed out is a bit longer but performs the same
operation:
fitpoly iy:=(1,2) polyorder:=4 coef:=3 oy:=(4,5) N:=100;
In return for typing out the input and output argument names, LabTalk will accept them in any
order, and still yield the expected result:
fitpoly coef:=3 N:=100 polyorder:=4 oy:=(4,5) iy:=(1,2);
Also, the inputs and outputs can be placed on separate lines from each other and in any order,
as long as they are explicitly typed out.
fitpoly
coef:=3
N:=100
polyorder:=4
oy:=(4,5)
iy:=(1,2);
Notice that the semicolon ending the X-Function call comes only after the last parameter
associated with that X-Function.
Option Switches
Option switches such as -h or -d allow you to access alternate modes of executing X-functions
from your scripts. They can be used with or without other arguments. The option switch (and its
value, where applicable) can be placed anywhere in the argument list. This table summarizes
the primary X-Function option switches:
Name
236
Function
-h
-d
-s
-r <value>
For more on option switches, see the section X-Function Execution Options.
Description
Sample Constructions
XYRange
A combination of X, Y,
and optional Y Error Bar
data
(1,2)
<new>
(1,2:end)
(<input>,<new>)
[book2]sheet3!<new>
XYZRange
A combination of X, Y,
and Z data
(1,2,3)
<new>
[book2]sheet3!(1,<new>,<new>)
ReportTree
<new>
Comment
For graph,
use index
directly to
indicate plot
range
(1,2) means
1st and 2nd
plots on
graph
237
11.1 X-Functions
Hierarchical Report
Must be associated with a
worksheet range or a
LabTalk Tree variable
ReportData
[<input>]<new>
[book2]sheet3
<new>
[<input>]<new>
[book2]sheet3
[<input>]<input>!<new>
ReportData Output
Many X-Functions generate multiple output vectors in the form of a ReportData object.
Typically, a ReportData object is associated with a worksheet, such as the Fit Curves output
from the NLFit X-Function. Consider, for example, the output from the fft1 X-Function:
// Send ReportData output to Book2, Sheet3.
fft1 rd:=[book2]sheet3!;
// Send ReportData output to a new sheet in Book2.
fft1 rd:=[book2]<new>!;
238
Or if you would like to specify a particular column of the input sheet in which to put the
ReportData output, you may specify that as well:
avecurves (1,2:5) rd:=[<input>]<input>!Col(3);
239
11.1 X-Functions
Subsequent access to the data is more complicated, as you will need to write additional code
to find these new columns.
Realize that output of the ReportData type will contain different amounts
(columns) of data depending on the specific X-Function being used. If you are
sending the results to an existing sheet, be careful not to overwrite existing data
with the ReportData columns that are generated.
240
Full Name
Function
-cf
--
-d
-dialog
-db
--
-dc IsCancel
--
-h
-help
-hn
--
-hs
--
-ht
--
--
-hx
--
-r 1
-recalculate 1
-r 2
-recalculate 2
-s
-silent
-sb
--
-se
--
-sl
-silent
Same as -s.
-ss
--
-t <Name>
-theme
is the same as
smooth -help
Examples
Using a Theme
Use the theme named FivePtAdjAve to perform a smoothing operation on the XY data in
columns 1 and 2 of the active worksheet.
smooth (1,2) -t FivePtAdjAve
Note: A path does not need to be specified for the theme file since Origin automatically saves
and retrieves your themes. Themes saved in one project (*.OPJ) will be available for use in
other projects as well.
Calling X-Functions and Origin C Functions
241
11.1 X-Functions
242
// Stop execution
}
// Data import probably succeeded, so our script can continue
type continuing...;
Note the use of the general X-Function option -se to suppress error messages. You can also
use -sl to suppress error logging and -sb to suppress both.
243
programmatically build a workspace from a LabTalk script use the run.loadOC method of the
LabTalk run object.
err = run.LoadOC("myFile",[option]);
Example
Use option to scan the .h files in the OC file being loaded, and all other dependent OC files are
also loaded automatically:
if(run.LoadOC(OriginLab\iw_filter.c, 16) != 0)
{
type "Failed to load iw_filter.c!";
return 0;
}
This can be useful when distributing tools to users or making permanently available functions
that have been designed to work with Set Column Values.
244
Argument to OC Function
double
Yes
Yes
int
Yes
Yes
bool
string
Yes
Yes
Yes
Yes
string array
Yes
Note:
1.
2.
The maximum number of arguments that Origin C function can have to call from LabTalk is
20.
LabTalk variables can be passed to Origin C numeric function by reference.
245
After compiling, you can call the function in the command window with the following:
Col(B) = MyFunc(Col(A));
246
12.1 Mathematics
In this section we feature examples of four common mathematical tasks in data processing:
1.
2.
3.
4.
Differentiation
Integration
Interpolation
Averaging Multiple Curves
247
12.1 Mathematics
12.1.2 Differentiation
Finding the Derivative
The following example shows how to calculate the derivative of a dataset. Note that the
differentiate X-Function is used, and that it allows higher-order derivatives as well:
// Import the data
newbook;
fname$ = system.path.program$ + "\Samples\Spectroscopy\HiddenPeaks.dat";
impasc;
// Calculate the 1st and 2nd derivatives of the data in Column 2:
// Output defaults to the next available column, Column 3
differentiate iy:=Col(2);
// Output goes into Column 4 by default
differentiate iy:=Col(2) order:=2;
// Plot the source data and the results
// Each plot uses Column 1 as its x-values
plotstack iy:=((1,2), (1,3), (1,4)) order:=top;
248
12.1.3 Integration
plotxy iy:=[bkname$]1!2 plot:=200 ogl:=1;
plotxy iy:=[bkname$]1!3 plot:=200 ogl:=2;
12.1.3 Integration
The integ1 X-Function is capable of finding the area under a curve using integration. Both
mathematical and absolute areas can be computed. In the following example, the absolute
area is calculated:
//Import a sample data
newbook;
fname$ = system.path.program$ + "Samples\Mathematics\Sine Curve.dat";
impasc;
//Calculate the absolute area of the curve and plot the integral curve
integ1 iy:=col(2) type:=abs plot:=1;
Once the integration is performed, the results can be obtained from the integ1 tree variable:
// Dump the integ1 tree
integ1.=;
// Get a specific value
double area = integ1.area;
The X-Function also allows specifying variable names for quantities of interest, such as:
double myarea, ymax, xmax;
integ1 iy:=col(2) type:=abs plot:=1 area:=myarea y0:=ymax x0:=xmax;
type "area=$(myarea) %(CRLF)ymax=$(ymax) %(CRLF)xmax=$(xmax)";
Integration of two-dimensional data in a matrix can also be performed using the integ2 XFunction. This X-Function computes the volume beneath the surface defined by the matrix,
with respect to the z=0 plane.
// Perform volume integration of 1st matrix object in first matrix sheet
range rmat=[MBook1]1!1;
integ2 im:=rmat integral:=myresult;
type "Volume integration result: $(myresult)";
12.1.4 Interpolation
Interpolation is one of the more common mathematical functions performed on data, and Origin
supports interpolation in two ways: (1) interpolation of single values and datasets through
range notation and (2) interpolation of entire curves by X-Functions.
Method (1) requires that the independent variable be monotonically increasing or decreasing,
whereas method (2) supports interpolation with a non-monotonic independent variable.
Examples of each follow.
Analysis and Applications
249
12.1 Mathematics
Scalar Calculation
From Worksheet Data
With XY data in a worksheet, single interpolated Y values can be obtained at any X value using
code such as:
// Generate some data
newbook;
col(1)={1, 2, 3, 4};
col(2)={2, 3, 5, 6};
// Define range on Y column
range r2 = 2, r1 = 1;
// Find Y value by linear interpolation at a specified X value.
r2(1.23,r1) = ;
// ANS: R2(1.23,R1)=2.23
By default, when range is used as a function, the Y value is calculated based on the associated
X values. Therefore, in the example above, since Column 1 is the default X column unless
otherwise assigned, r1 is actually redundant, and the last line could be replaced by
r2(1.23)=
and the same result would be obtained. This is not true for any two columns.
In the case that no associated X values exist, the Y value will be calculated using the row
numbers as X values.
From Graph Data
In the above case linear interpolation, which is the default interpolation method, is performed.
This syntax for interpolation also works with XY data that is plotted in a graph, and, in that
case, the interpolation method will use the line connection style of that graph (i.e., linear,
spline, or b-spline).
plotxy (1,2) plot:=202;
// Define range on active plot
range rg = %c;
// Output Y value at x=3.54
rg(3.54)=;
Further interpolation will now use the line connection style as the interpolation method:
rg(3.54)=;
250
12.1.4 Interpolation
Vector Calculation
From Worksheet Data
You can enter more than one X value into a column in your worksheet. That data range can
then be passed as an argument. In this case, since the input is a range, the output must be
assigned to a column of data.
range rInY = 2;
range rOutX = 3;
range rOutY = 4;
rOutY = rInY(rOutX);
The result above can also be obtained with the Table function. Instead of using the defined
ranges, Table takes the column names as arguments:
Col(4) = Table(Col(1), Col(2), Col(3))
Note that in the example using range notation, the input X values are assumed to reside in
column 1.
From Graph Data
You can also interpolate an entire vector using graph data as input. For example, say you want
to interpolate new Y values given X values that you know, and based on data that you have in
a particular graph. First, make the desired graph window active. Then enter a script such as:
// Give the location of the new X values:
range newX = [Book2]1!1;
// Give the location where the new Y values (output) should go:
range newY = [Book2]1!2;
// Select the data from the graph using range -w:
range -w inputY = 1;
// 1 = first dataplot in the layer
// Compute the new Y values:
newY = inputY(newX);
// ANS: R1(5.5,R2)=3.5
Note here that the input Y range cannot be left implicit when obtaining X values from Y values,
since X columns do not have a default Y column associated with them.
And in the vector case, using the Table function:
Col(3) = Table(Col(2), Col(1), Col(4));
251
12.1 Mathematics
You can then use this range variable as a function with the following form:
xyr(x[,connect[,param]])
where connect is one of the following:
line
a straight line connection, param will be ignored
spline
a spline connection, param will be supported (not yet supported in 8.1)
bspline
a b-spline connection, param is the smoothing parameter. If param=-1, then a simple
bspline that is also used in the line plot is used. If param >=0, the NAG
nag_1d_spline_function is used.
The following code illustrates the usage of the various smoothing parameters for bspline:
col(1)=data(1,9);
col(2)=normal(9);
col(3)=data(1,9,0.01);
wks.col3.type = 4;
range bb=(1,2);
col(4)=bb(col(3),bspline,-1);
// Same as graph
loop(i, 5, 10) {
wcol(i)=bb(col(3), bspline, 0.02*i);
}
252
Brief Description
interp1xy
interp1
interp1trace
12.1.4 Interpolation
253
12.2 Statistics
plotxy iy:=col(2) plot:=202 color:=1;
plotxy iy:=rResult plot:=202 color:=2 size:=1 ogl:=1;
Note that the interpolation X-Functions can also be used for extrapolating Y values outside of
the X range of the input data.
Matrix Interpolation
The minterp2 X-Function can be used to perform interpolation/extrapolation of matrices.
// Create a new matrix book and import sample data;
newbook mat:=1;
filepath$ = "Samples\Matrix Conversion and Gridding\Direct.dat";
string fname$=system.path.program$ + filepath$;
impasc;
// Interpolate to a matrix with 10 times the x and y size of the original
range rin = 1; // point to matrix with input data;
int nx, ny;
nx = rin.ncols * 10;
ny = rin.nrows * 10;
minterp2 method:=bicubic cols:=nx rows:=ny ;
OriginPro also offers the interp3 X-Function which can be used to perform interpolation on 4dimensional scatter data.
12.2 Statistics
This is an example-based section demonstrating support for several types of statistical tests
implemented in script through X-Function calls.
254
Brief Description
colstats
Columnwise statistics
corrcoef
Correlation Coefficient
freqcounts
rowstats
stats
For a full description of each of these X-Functions and its inputs and outputs, please see the
Descriptive Statistics.
The rowstats X-Function can be used in a similar way. The following example calculates the
means, the standard deviations and the sums of row 1 and 2 of the active worksheet; the
results are placed in columns to the immediate right of the input data.
//Import a sample data with four columns
newbook;
fname$ = system.path.program$ + "Samples\Statistics\rowttest2.dat";
impasc;
//Row statistics
rowstats irng:=col(1)[1]:col(end)[2] sum:=<new>;
Frequency Count
If you want to calculate the frequency counts of a range of data, use the freqcounts XFunction.
//Open a sample workbook
%a = system.path.program$ + "Samples\Statistics\Body.ogw";
doc -a %a;
255
12.2 Statistics
//Count the frequency of the data in column 4
freqcounts irng:=4 min:=35 max:=75 stepby:=increment intervals:=5;
Correlation Coefficient
corrcoef X-Function can be used to compute the correlation coefficient between two datasets.
//import a sample data
newbook;
fname$ = system.path.program$ + "Samples\Statistics\automobile.dat";
impasc;
//Correlation Coefficient
corrcoef irng:= (col(c):col(g)) rt:= <new name:=corr>
Brief Description
ttest1
ttest2
ttestpair
Determine whether two sample means are equal in the case that they are matched.
vartest1
vartest2
For a full description of these X-functions, including input and output arguments, please see
the Hypothesis Testing.
One-Sample T-Test
If you need to know whether the mean value of a sample is consistent with a hypothetical value
for a given confidence level, consider using the one-sample T-test. Note that this test
assumes that the sample is a normally distributed population. Before we apply the one-sample
T-test, we should verify this assumption.
256
Two-Sample T-Test
The rowttest2 X-Function can be used to perform a two-sample T-test on rows. The following
example demonstrates how to compute the corresponding probability value for each row:
// Import sample data
newbook;
string fpath$ = "Samples\Statistics\ANOVA\Two-Way_ANOVA_raw.dat";
fname$ = system.path.program$ + fpath$;
impasc;
// Two-sample T-test on a row
rowttest2 irng1:=(col(a):col(c)) irng2:=(col(d):col(f))
tail:=two prob:=<new>;
257
12.2 Statistics
follows normal distribution or you have confirmed that your data do not follow normal
distribution, you should use nonparametric tests.
Origin provides support for the following X-Functions for non-parametric analysis:
Name
Brief Description
signrank1
signrank2/sign2
Test whether or not the medians of the paired populations are equal.
Input data should be in raw format.
mwtest/kstest2
Test whether the two samples have identical distribution. Input data
should be Indexed.
kwanova/mediantest
Test whether different samples' medians are equal, Input data should be
arranged in index mode.
friedman
As an example, we want to compare the height of boys and girls in high school.
//import a sample data
newbook;
fname$ = system.path.program$ + "Samples\Statistics\body.dat";
impasc;
//Mann-Whitney Test for Two Sample
//output result to a new sheet named mynw
mwtest irng:=(col(c), col(d)) tail:=two rt:=<new name:=mynw>;
//get result from output result sheet
page.active$="mynw";
getresults tr:=mynw;
//Use the result to draw conclusion
if (mynw.Stats.Stats.C3 <= 0.05); //if probability is less than 0.05
{
type "At 0.05 level, height of boys and girls are different.";
//if median of girls height is larger than median of boy's height
if (mynw.DescStats.R1.Median >= mynw.DescStats.R2.Median)
type "girls are taller than boys.";
258
Brief Description
kaplanmeier
phm_cox
weibullfit
Weibull Fit
For a full description of these X-functions, including input and output arguments, please see
the Survival Analysis.
Kaplan-Meier Estimator
If you want to estimate the survival ratio, create survival plots and compare the quality of
survival functions, use the kaplanmeier X-Function. It uses product-limit method to estimate
the survival function, and supports three methods for testing the equality of the survival
function: Log Rank, Breslow and Tarone-Ware.
As an example, scientists are looking for a better medicine for cancer resistance. After
exposing some rats to carcinogen DMBA, they apply different medicine to two different groups
of rats and record their survival status for the first 60 hours. They wish to quantify the
difference in survival rates between the two medicines.
// Import sample data
newbook;
fname$ = system.path.program$ + "Samples\Statistics\SurvivedRats.dat";
impasc;
//Perform Kaplan-Meier Analysis
kaplanmeier irng:=(1,2,3) censor:=0 logrank:=1
rd:=<new name:="sf">
259
12.2 Statistics
rt:=<new name:="km">;
//Get result from survival report tree
getresults tr:=mykm iw:="km";
if (mykm.comp.logrank.prob <= 0.05)
{
type "The two medicines have significantly different"
type "effects on survival at the 0.05 level ...";
type "Please see the survival plot.";
//Plot survival Function
page.active$="sf";
plotxy iy:=(?, 1:end) plot:=200 o:=[<new template:=survivalsf>];
}
else
{
type "The two medicines are not significantly different.";
}
260
Weibull Fit
If it is known apriori that data are Weibull distributed, use the weibullfit X-Function to estimate
the weibull parameters.
//import a sample data
newbook;
fname$ = system.path.program$ + "Samples\Statistics\Weibull Fit.dat ";
impasc;
//Perform Weibull Fit
weibullfit irng:=(col(a), col(b)) censor:=1;
261
For full documentation of the fitLR X-function, see the X-function Reference.
Polynomial fitting is a special case wherein the fitting function is mathematically non-linear, but
an analytical (non-iterative) solution is obtained. In LabTalk polynomial fitting can be controlled
with the fitpoly X-Function. The syntax is given by:
fitpoly iy:=(inputX,inputY) polyorder:=n coef:=columnNumber oy:=(outputX,outputY)
N:=numberOfPoints
As with all X-Functions, if the arguments are given in the exact order specified above, the input
and output variable names can be dropped, for example:
fitpoly (1,2) 4 3 (4,5) 100;
says fit a 4th order polynomial with 100 points to the X-Y data in columns 1 and 2 of the active
worksheet. Put the coefficients in column 3 and the X-Y pairs for the fit in columns 4 and 5 of
the active worksheet.
Additionally, more outputs are possible:
1.
2.
3.
[nlbegin] Begin the fitting process: define input data, type of fitting function, and input
parameters.
[nlfit] Perform the fit calculations
[nlend] Choose which parameters to output and in what format
Script Example
Here is a script example of the steps outlined above:
// Begin non-linear fitting, taking input data from Column 1 (X) and
// Column 2 (Y) of the active worksheet,
// specifying the fitting function as Gaussian,
// and creating the input parameter tree named ParamTree:
nlbegin iy:=(1,2) func:=gauss nltree:=ParamTree;
// Optional: let the peak center be fixed at X = 5
ParamTree.xc = 5;
// Assign the peak center an X-value of 5.
ParamTree.f_xc = 1;
262
Note: since the non-linear fitting procedure is iterative, parameter values for the fit that are not
fixed (by setting the fix option to zero in the parameter tree) can and will change from their
initial values. Initial parameters can be set manually, as illustrated in the example above by
accessing individual nodes of the parameter tree, or can be set automatically by Origin (see
the nlfn X-function in the table below).
Brief Description
nlbegin
nlbeginm
Start a LabTalk nlfit session on matrix data from matrix object or graph
nlbeginz
nlfn
nlpara
Open the Parameter dialog for GUI editing of parameter values and bounds
263
nlend
For a full description of each of these X-functions and its inputs and outputs, please see the Xfunction Reference.
Some functionality such as Short-time FFT and Wavelets are only available in OriginPro.
The following sections provide some short examples of calling the signal processing XFunctions from script.
12.4.1 Smoothing
Smoothing noisy data can be performed by using the smooth X-Function.
// Smooth the XY data in columns 1,2 of the worksheet
// using SavitzkyGolay method with a third order polynomial
range r=(1,2); // assume worksheet active with XY data
smooth iy:=r meth:=sg poly:=3;
To smooth all plots in a layer, you can loop over the plots as below:
// Count the number of data plots in the layer and save result in
//variable "count"
layer -c;
// Get the name of this Graph page
string gname$ = %H;
264
Once you have results in a tree, you can do further analysis on the output such as:
// Copy desired tree vector nodes to datasets
// Locate the peak and mean frequency components
dataset tmp_x=myfft.fft.freq;
dataset tmp_y=myfft.fft.amp;
// Perform stats and output results
percentile = {0:10:100};
diststats iy:=(tmp_x, tmp_y) percent:=percentile;
type "The mean frequency is $(diststats.mean)";
The following example shows how to perform signal filtering using the fft_filters X-Function:
// Import some data with noise and create graph
newbook;
string filepath$ = "Samples\Signal Processing\";
string filename$ = "Signal with High Frequency Noise.dat";
fname$ = system.path.program$ + filepath$ + filename$;
impasc;
plotxy iy:=(1,2) plot:=line;
265
266
Brief Description
pa
paMultiY
pkFind
Pick peaks.
fitpeaks
blauto
interp1xy
subtract_ref
smooth
integ1
For peaks that do not require baseline treatment or other advanced options, you
can also use peak functions to perform nonlinear fitting. For more information
on non-linear fitting from script, please see the Curve Fitting section.
The following sections provide examples on peak analysis.
Now graph the data as line plot and the peak x,y as scatter:
plotxy iy:=rin plot:=200;
// Set x output column as type X and plot the Y column
routx.type = 4;
plotxy iy:=routy plot:=201 color:=2 o:=1;
267
268
window -r %h Modified;
imgRotate angle:=42;
imgTrim t:=17;
matrix -pg DIM nCol2 nRow2; //Get the dimension of the modified image
imgAutoLevel;// Apply auto leveling to image
window -s T;
//Report
window -n n Report;
old = type.redirection;
type.redirection = 2;
type.notes$=Report;
type "Dimension of the original image: ";
type "
$(nCol1) * $(nRow1)\r\n";
// "754 * 668"
type "Dimension of the modified image: ";
// "688 * 601"
type "
$(nCol2) * $(nRow2)\r\n";
type.redirection = old;
}
269
270
271
window -r %h newimage;
imgC2gray;
//Convert to gray
//Apply palette
fname$ = System.path.program$ + "palettes\Rainbow.PAL";
imgpalette palfile:=fname$;
window -s T;
272
13 User Interaction
There may be times when you would like to provide a specific type of input to your script that
would be difficult to automate. For instance, you wish to specify a particular data point on a
graph, or a certain cell in a worksheet as input to one or more functions called from script. To
do this, LabTalk supports ways of prompting the user for input while running a script.
In general, consecutive lines of a script are executed until such a user prompt is encountered.
Execution of the script then halts until the user has entered the desired information, and then
proceeds. The following sections demonstrate several examples of programming for this type
of user interaction, and have been broken down into three categories:
1.
2.
3.
Yes/No response
Single String
Multi-Type Input (GetN)
If additional script processing is required in any event, this command should be called from
elsewhere and the numeric value can be tested. In the following example, getyesno is called
from its own section of code and the two string inputs are passed as arguments to the
section(note, a multi-section LabTalk script will not work if simply pasted to the script window;
save to file and run):
273
// Yes response
}
else
{
type "Graph NOT generated";
// No or Cancel response
}
// 'myGetYesNo' section
[myGetYesNo]
getyesno (%1) iVal (%2);
User Interaction
The values entered in this dialog will be assigned to the declared variables. If the variables
have an initial value (before GetN is called), that value will show up in the input box, otherwise
the input box will appear blank. In either case, the initial value can be changed or kept.
To check the data entered, run the following line of script:
// Output the data:
type In %(event$), the %(measurement$) was $(nn) %(units$);
This next example script assumes a Graph is the active window and prompts for information
then draws a line and labels it. The call to GetN uses string registers and pre-defined lists as
inputs.
%A=Minimum;
iColor = 15;
dVal = 2.75;
iStyle = 2;
// Opens the GetN dialog ...
// The extra %-sign in front of %A interprets the string register
// literally, instead of treating it as a variable name.
getn (Label Quantile) %%A
User Interaction
275
%A.color = iColor;
%A.linetype = iStyle;
Note : The script requires that %A should be a single word and that object QLabel does not
exist.
The following character sequences, beginning with the @ character, access pre-defined lists
for GetN arguments:
List
276
Description
@B
@C
@D
@P
Pattern List
@S
@T
Font List
@W
@Z
User Interaction
Note that the value returned when a list item is selected within the GetN dialog is the index of
the item in the list. For instance, if one of your GetN entries is:
(Font Size) fs:@S
and you select 18 from the drop-down list in the dialog, the variable fs will hold the value 8,
since 18 is the 8th item in the list.
Below is another example script that allows a user to change a Symbol Plot to a Line + Symbol
Plot or the reverse:
get %C -z iSymbolSize;
set %C -z iSymbolSize;
User Interaction
277
}
// Script does not stop when using a tool,
// so further execution needs to be prevented.
// This infinite loop waits for the user to select the point
for( done = 0 ; done == 0; ) sec -p .1;
// A .1 second delay gives our loop something to do:
type Continuing script ...;
// Once the macro has run, our infinite loop is released
dotool 3;
// Start the tool
// Define the macro that runs for each point selection
def pointproc {
dsx[count] = x;
dsy[count] = y;
count++;
if(count == 4) dotool 0;
278
User Interaction
// Initial point
type DoubleClick your first point (or SingleClick and press Enter);
The following example allows user to select arbitrary number of points until Esc key is pressed
or user clicks on the Pointer tool in the Tools toolbar.
@global = 1;
dataset dsx, dsy;
dotool 3;
// Increment count
// Get the X coordinate
dsy[count] = y;
}
// Define a macro that runs if user presses Esc key,
// or clicks the Pointer Tool:
def quittoolbox {
count=;
for(int ii=1; ii<=count; ii++)
{
type $(ii), $(dsx[ii]), $(dsy[ii]);
}
}
count = 0; // Initial point
type "Click to select point, then press Enter";
type "Press Esc or click on Pointer tool to stop";
Pressing Enter key to select a point works more reliably than double-clicking on
the point.
You can also use the getpts command to gather data values from a graph.
User Interaction
279
When using the Regional Data Selector or the Regional Mask Tool you can hook into the
quittoolbox macro which triggers when a user presses Esc key:
// Start the Regional Data Selector tool with a graph active
dotool 17;
// Define macro that runs when user is done
def quittoolbox {
done = 1;
}
// Wait in a loop for user to finish by pressing ...
// (1) Esc key or (2) clicking Pointer tool:
for( done = 0 ; done == 0 ; )
{
sec -p .1;
}
// Additional script will run once user completes tool.
ty continuing ..;
List of Tools in Origin Tools Toolbar. Those in bold are useful in programming.
280
User Interaction
Description
Pointer - The Pointer is the default condition for the mouse and makes the
mouse act as a selector.
Draw Data - Allows user the draw data points on a graph. (Graph only)
10
11
12
13
User Interaction
281
15
16
17
18
Brief Description
dlgChkList
dlgFile
dlgPath
dlgRowColGoto
dlgSave
dlgTheme
Possibly the most common such operation is to select a file from a directory. The following line
of script brings up a dialog that pre-selects the PDF file extension (group), and starts at the
given path location (init):
282
User Interaction
The complete filename of the file selected in the dialog, including path, is stored in the variable
fname$. If init is left out of the X-Function call or cannot be found, the dialog will start in the
User Files folder.
The dlgsave X-Function works for saving a file using a dialog.
dlgsave ext:=*.ogs;
type %(fname$);
User Interaction
283
The titlebar will include the text [Internal] to indicate the Excel Workbook will be saved in the
Origin Project file.
To open an external Excel file ..
document -append D:\Test1.xls;
The titlebar will include the file path and name to indicate the Excel file is saved external to the
Origin Project file.
You can save an internal Excel Workbook as an external file at which point it becomes a linked
external file ..
// The Excel window must be active. win -o can temporarily make it active
window -o Book5 {
// You must include the file path and the .xls extension
save -i D:\Test2.xls;
}
You can re-save an external Excel Workbook to a new location creating a new file and link ..
// Assume the Excel Workbook is active
// %X holds the path of an opened Origin Project file
save -i %XNewBook.xls;
285
To learn how to create Analysis Templates, please refer to the Origin tutorial: Creating and
Using Analysis Templates.
287
6.
7.
For an example on setting up such a template using script, please refer to the Origin tutorial:
Creating Analysis Templates using Set Column Value.
288
The following example shows how to import 10 files and perform a curve fit operation and print
out the fitting results:
// Find all files using wild card
string path$ = system.path.program$ + "Samples\Batch Processing";
findFiles ext:="T*.csv";
// Start a new book with no sheets
newbook sheet:=0;
// Loop over all files
for(int iFile = 1; iFile <= fname.GetNumTokens(CRLF); iFile++)
{
// Get file name
string file$ = fname.GetToken(iFile, CRLF)$;
// Import file into a new sheet
newsheet;
impasc file$;
// Perform gaussian fitting to col 2 of the current data
nlbegin iy:=2 func:=gaussamp nltree:=myfitresult;
// Just fit and end with no report
nlfit;
nlend;
// Print out file name and results
type "File Name: %(file$)";
type "
Peak Center= $(myfitresult.xc)";
type "
type "
289
Name
Brief Description
batchProcess
paMultiY
The following script shows how to use the batchProcess X-Function to perform curve fitting of
data from 10 files using an analysis template, with a summary report created at the end of the
process.
// Find all files using wild card
string path$ = system.path.program$ + "Samples\Batch Processing\";
findFiles ext:="T*.csv";
// Set path of Analysis Template
string templ$ = path$ + "Peak Analysis.OGW";
// Call the Batch Processing X-Function
290
Batch processing using X-Functions can also be performed by calling Origin from an external
console; for more see Running Scripts From Console.
291
16 Reference Tables
Data Formatting
o Date and Time Format Specifiers
o LabTalk Keywords
o Column Label Row Characters
Graph Elements
o Colors
o Line Styles
o Symbol Shapes
o Text Label Options
Variables
o Last Used System Variables
o System Variables
Description
Comments.
Dn
Long name.
Pn
Sparkline
Units
293
For example:
// Returns the Long Name of Col(A), active worksheet
Col(A)[L]$=
Column label rows contain metadata, or information about the data contained in the column.
Please see the Accessing Metadata section for detailed notes on their use.
294
Description
dd
ddd
dddd
MM
MMM
MMMM
yy
yyyy
4-character year
hh
Reference Tables
HH
mm
ss
tt
Displays AM or PM
C
Token
ASCII
Code
Description
TAB
\t
CR
\r
13
Carriage Return
LF
\n
10
CRLF
\r \n
9, 13
Reference Tables
295
\"
34
Double-quote
16.3.2 Examples
This example shows how to use quotes inside a string in LabTalk
str$="expression=%(quote)col(1)=col(2)+1%(quote)";
str$=;// should print "expression="col(1)=col(2)+1""
int i = str.Find('"');
i=;//-->12
// same as '"' when used as a string function argument:
i=str.Find(quote, i+1);
i=;//-->28
i=str.Count('"');
i=;//-->2
i=str.Count(quote);
i=;//--> also 2
296
Reference Tables
16.3.2 Examples
Name
Content
Example
Description
__FINDDEP$
Worksheet
Name
[Sample]FindYfromX!
__FINDINDEP$
Worksheet
Name
[Sample]FindXfromY!
__FITCURVE$
Worksheet
Name
[Sample]FitNLCurve!
__HEADER$
String
"ExponentialBaseline.dat"
__LASTLTCMD$
Command
%A=%A of %W %N
Last LabTalk
command issued
__LASTMATRIX$
MatrixBook
name
MBook1
__LASTWKS$
Workbook
name
Book1
Last workbook
referenced
__NLDATA$
Column or
dataset name
[Book1]Sheet1!2
Non-Linear Fitter
input data range
__PAINTEGPEAK$
Worksheet
name
[Book2]Integration_Result1!
Peak Analyzer's
peak-integration
sheet
__PAINTEGCURVE$
Worksheet
name
[Book2]Integrated_Curve_Data1!
Peak Analyzer's
integrated curve
data sheet
__PABASELINE$
Worksheet
name
[Book1]Sheet1!
Peak Analyzer's
baseline data sheet
__PASUBTRACTED$
Worksheet
name
[Book1]Sheet2!
Peak Analyzer's
subtracted curve
data sheet
Reference Tables
297
__PAPEAKCENTER$
Worksheet
name
[Book1]Sheet3!
Peak Analyzer's
peak-center data
sheet
__PEAK$
Worksheet
Name
[Sample]PeakProperties!
__REPORT$
Worksheet
Name
[Sample]FitNL!
__RESIDUAL$
Worksheet
Name
[Sample]FitNLCurve!
Most recent
residuals from
fitting
__SUBHEADER$
String
"Channel Amplitude"
__XF$
X-Function
Name
impASC
Last X-Function
called
These strings are useful for further analysis. For example, the following script assigns the
location of the most recently generated fit curve to a range variable, which is then integrated to
find the area under the fit curve:
// Access Column 2 of the Worksheet storing the fit data
range rd = %(__FITCURVE$)2;
// Integrate under the fit curve
integ rd;
// Display the area under the curve
integ.area=;
298
Sample
Color
Black
13
Reference Tables
Sample
Color
Dark Cyan
16.3.2 Examples
2
Red
14
Royal
Green
15
Orange
Blue
16
Violet
Cyan
17
Pink
Magenta
18
White
Yellow
19
LT Gray
Dark Yellow
20
Gray
Navy
21
LT Yellow
10
Purple
22
LT Cyan
11
Wine
23
LT Magenta
12
Olive
24
Dark Gray
Reference Tables
299
0.
300
Connections
No Line
Line Types
0.
Solid
1.
Straight
1.
Dash
2.
2 Point Segment
2.
Dot
3.
3 Point Segment
3.
Dash Dot
4.
4 Point Segment
4.
5.
5 Point Segment
5.
Short Dash
6.
6 Point Segment
6.
Short Dot
7.
7 Point Segment
7.
8.
B-Spline
9.
Spline
0.
10.
10 Point Segment
1.
11.
Step Horizontal
2.
12.
Step Vertical
3.
13.
Step H Center
4.
14.
Step V Center
5.
Reference Tables
Arrow Heads
16.3.2 Examples
15.
6.
Bezier
7.
8.
9.
10.
11.
12.
13.
Interiors
0.
No Symbol
0.
Solid
1.
Square
1.
Open
2.
Circle
2.
Dot Center
3.
Up Triangle
3.
Hollow
Reference Tables
301
Down Triangle
4.
5.
Diamond
5.
6.
302
Cross(+)
6.
+ Center
x Center
- Center
7.
Cross(x)
7.
|Center
8.
Star(*)
8.
Half Up
9.
H Bar(-)
9.
Half Right
10.
V Bar(|)
10.
Half Down
11.
Half Left
11.
Numbers(1, 2, 3,...)
12.
ALPHABETS(A, B, C,...)
13.
alphabets(a, b, c,...)
14.
Right Arrow(
15.
Left Triangle
16.
Right Triangle
17.
Hexagon
18.
Star
Reference Tables
Pentagon
20.
Sphere
56.
data markers(special)
58.
X2 = 12;
X3 = 3; Y1 = 0.3
When a worksheet or a matrix is active, these variables indicate the columns and rows are
visible in the workspace. X1 and X2 contain the index numbers of the first and last columns in
view; while Y1 and Y2 contain the index numbers of the first and last rows in view. Thus, to
specify the cell displayed in the upper-left corner of the worksheet or matrix, you just need to
assign the column and row index of desired cell to X1 and Y1.
MKS1, MKS2
When data markers are displayed in the graph window, MKS1 and MKS2 are set to the index
numbers of the data points that correspond to the data markers. When there are no data
markers on the graph, both variables are equal to -1.
Reference Tables
303
ECHO
This variable prints scripts or error messages to the Script window.
To enable echo, type echo = Number in the Script window. Number can be one of the
following):
Number
Action
Display scripts that have been sent to the queue for delayed execution
16
Display macros
Note: These values are bits that can be combined to produce cumulative effects. For example,
echo = 12 displays both the command and the assignment scripts. Echo = 7, which is a
combination of echo = 1, echo = 2, and echo = 4, is useful during menu command selection.
X, Y, Z, I, J, E, T, Count
The variables X, Y, and Z contain the current X, Y, and Z coordinates of the Screen Reader,
Data Reader, or Data Selector tools.
Each time you double-click the cursor or press ENTER when one of these tools is selected,
Origin executes the PointProc macro. The following script defines PointProc such that doubleclicking on the page sets X1 and Y1 equal to X and Y:
doToolbox 2; //Select the Screen Reader.
Def PointProc {X1 = x; Y1 = y; doToolbox 0};
The variable I is used to store the index number to a dataset. In most cases, this is also the
row number of a worksheet.
Similarly, the variables J, E, T, and Count are used by different Origin routines.
It can be the number of selected files in the Open Multiple Files dialog box, or the number of
times the PointProc macro has been executed since the Screen Reader tool or the Data
Reader tool has been selected.
304
Reference Tables
V1V9
Variable names v1, v2, ..., v9 should not be used in your scripts.
Brief
Description
Description
Values:
@NOX
Message output
control
Reference Tables
305
Example:
@NOI=0; // Turns off information message output.
@O
printer page
orientation
@OCE
Origin C
compilation
status
1 = portrait
2 = landscape
@PB
gray-scale
printing
@PPV
duplicated
window name
when appending
projects
Prefer project
variables
306
Reference Tables
@V
Origin version
@VTH
Quick Help on
launching Origin
@VTP
Project Explorer
on launching
Origin
@VTR
Result Log on
launching Origin
@VTS
Status Bar on
launching Origin
DATA
Variable
Brief
Description
Description
Angular unit
0(default) = radian
1 = degree
2 = gradian.
Reference Tables
307
@AU
Status of
autoupdating
@DZ
@EF
Display the
trailing zeros in
worksheet
Interpret
Engineering
notation
@S
@SD
308
Treatment of
long strings
Values:
0 = insert as a note
1 = truncate
2 (default)= assign full string
Lower significant
digits
Significant digits
Upper significant
digits
@ZZ
Result of 0^0
GRAPH
Variable
Brief Description
Description
Attachment of line to
layer
0 = do not attach
1(default) = attach to the layer/scale
Note: Lines created by the Draw command there will
always be attached to layer/scale, regardless of the
values of @AR.
@AM controls the Analysis Markers on the graph.
Values:
@AM
Analysis Markers
@CATS
0 = No marker
50 = Tiny marker
100 = Small marker
150 = Medium marker
200 = Large marker
Note: It should be followed by clr.
@CATS Specify the method to set the order of tick
labels of categorical graph.
Values:
Reference Tables
309
@ILD
@MDS
@U
310
Reference Tables
@UP
Include Buttons/UIM
Objects when Printing
@B
Brief Description
Description
@BA
@BD
Values:
@BE
@BG, @BGH
@BC,@BCS,..
Origin C debug
Values:
@BL
@BM
311
MISC.
Variable
Usage
@D
Current date and time in numeric values (Julian days). Use the $(@D,Dn)
notation to display the nth date and time format from the Date Format dropdown list in the Worksheet Column Format dialog box (numbered from
zero).
For example, type $(@D,D10); returns the date format as MM/DD/YY
HH:MM:SS in the Script window. (Note: The "D" in Dn must be uppercase.)
Origin supports the associated Julian day values for the range 1/1/0100 to
12/31/9999. Use the $(@D,Tn) notation to display the nth time format from
the Time Format drop-down list in the Worksheet Column Format dialog
box (numbered from zero). For example, type $(@D,T5) returns the time
format as HH:mm PM (such as 07:23 PM) in the Script window.
Two additional time formats are supported:
$(@D,t5) - 07:23 pm
$(@D,t5*) - 7:23 pm
@G
Set @G = 0 to display the page color within the entire graph window
(including beyond the page) in page view mode.
Set @G = 1 to display the area outside the page as gray.
@GN
@L
1 = full menus
2 = short menus.
Values:
@LID
0 (default):
Double-click opens the Plot Setup dialog
CTRL + double-click opens the Plot Details dialog
312
Reference Tables
1:
Double-click opens the Layer n dialog,
CTRL + double-click opens the Plot Details dialog
ALT + double-click opens the Plot Setup dialog
Controls behavior of the Graph:Add Plot to Layer menu command (from V 7.5
SR3).
Values:
@LIP
0:
Opens the Plot Setup dialog box. Only Plot Type is selected.
1(default):
Adds selected datasets to the layer.
@LP
The maximum number of points used in the GDI call to draw line plots, 3D XYY
plots, and some other plot types. Some video drivers cannot handle large numbers
passed as arguments in the GDI call, so Origin breaks the drawing up into several
sections that are each @LP points large.
Values:
@MB
@MBC
(8.5.0)
When opening a project that contains a Text & Numeric column with mixed
text and numeric values that was saved in Origin 4.1, a dialog box will open
asking if the project was saved in the 32 or 16 bit version. The 32 bit version
incorrectly saved mixed Text & Numeric data.
If you specify 32 bit in the dialog box, Origin fixes the Save problem by
resaving the project in Origin 6.1 and then reopening the project. @MB = 0
opens the dialog box (default), @MB = 16 always assumes the project was
saved in Origin 4.1 16 bit and thus opens the file with no changes, @MB =
32 always assumes the project was saved in Origin 4.1 32 bit and thus
resaves the project to correct the problem.
Set matrix missing value color in the thumbnails. This is a Direct RGB
composite value and computed by:
Reference Tables
313
Where the R, G, and B component values range from 0 to 255. For example:
@mbc = 65280; // Set color to green, 256*255=65280.
Note: The current @MBC color is applied at the time of matrix creation and
the resulting matrix image view cannot be changed.
Mask color. Follows the colors in the color palette:
@MC
1 = black
2 = red
3 = green
4 = blue
...
Use mark -u to update all windows.
Enable or disable mask. Use mark -u to update all windows.
@MM
Values:
@MP
Show or hide masked data points in graph. 0 = show. 1 = hide. Use mark -u to
update all windows.
@NSV
These three variables controls the progress bar which is shown when ASCII Export
is issued. They are available since Origin 8.1 SR1.
@NPER specifies the minimum number of rows that will trigger the progress
bar. The default value is 2000.
@NPES controls the status bar update frequency. Options:
@NPER
@NPES
@NPEB
@NPI
314
0=disable
1 = SI_EVERY
2 = SI_SLOWEST
3 (default) = SI_SLOW
@NPEB determines the number of steps in progress bar. The default value
is 40.
Set the maximum number of page information saved in workbook. When a file is
Reference Tables
(8.5.0)
imported, the file information will be added to the page.info node and you can see
this node in the Workbook Organizer. When @NPI=0 (Default value), Origin will
keep adding information to the tree node as files are imported.
You can set @NPI to 1 or a small integer when importing multiple files to
improve the import performance.
@OC
Controls whether or not you can call Origin C functions from LabTalk. 1 = you can
call Origin C functions (default), 0 = you cannot call Origin C functions.
@P
Page numbers in worksheet printing. @PC for current page number column-wise
and @PR for current page number row-wise.
@RLC
@RLR
Limits the maximum number of Columns and Rows (including Header) that will
auto-size to display full cell content when multiple Columns/Rows are selected and
you double-click on the Column/Row separator. Origin 8.1SR3 defaults to @RLC =
40 and @RLR = 60.
@SF
@TM
Indicates whether or not the timer is running. 1 = timer is running, 0 = timer is not
running.
Values:
@TS
@UPC
(8.5.0)
@UV
(8.1SR2)
Controls printing of Graphic Objects with Events set to something other than
None or Button Up.
Default value = 0. Set to 1 to allow printing/export.
This variable is used to control vectorization behavior of string argument as
dataset in Origin C function, which is called by using LabTalk. By default,
@UV = 1, which enables vectorization. To disable vectorization behavior, it
needs to set @UV = 0.
For example:
Suppose there is an Origin C function
double testUV(double dd)
{
Reference Tables
315
@UV=1; // Vectorization
col(b)=testUV(col(a)); // Value in column A will pass into function
testUV one by one
@VDF
If you set @VDF = 1, when you open a project file (.OPJ), Origin will report
the Origin version in which the file was saved.
@VFO
This variable can get the Origin version that the project was saved.
Note: For those projects that were saved in Origin 6 or earlier version, the
value of this variable will be 0.
@W
Font size scaling for display in Window view mode (which normally ignores
font scaling). @W is the same as the system.winviewfsize property.
@WD
@WEF
316
Controls Origin's behavior when you close the winName worksheet with the
win -c command and then use this win -t command option to open a
winName worksheet (where winName is the same with both command
options).
Values:
1 = Origin deletes the datasets that remain from the win -c command
and then opens the winName window.
Reference Tables
which tells Origin: for the 2nd dataplot in the current layer, use the comment field (of the Y
column plotted) as the legend entry.
Besides legend other text object names on a graph include yl (left-side y-axis), xb (bottom xaxis), so that
yl.text$ = %(?Y,@WL);
xb.text$ = %(1X,@LU);
The %(?Y) is a special syntax that allows the text label to default to a pre-specified data plot
index (which can be set in Plot Details: Legends/Titles: Data Plot Index for Auto Axis
Titles), instead of an index (1, 2, ... n) that you supply.
Every text label on a graph has a text object name. To get that name, select the text label by
clicking on it with your mouse, right click, and select Programming Control .... The Object
Name field contains the name, whose text$ attribute can be changed as above.
To use the X-Function method:
legendupdate mode:=custom custom:=@R;
which tells Origin: for all legend entries, report the location (in Origin Range Notation) of the
data being plotted.
Reference Tables
317
The table below presents the available options, using syntax mentioned above:
Option
318
Return Value
@C
@D
Dataset name.
@LA
@LC
Comment
@LD<n>
User Parameter. @LD is the same as @LD1, but in order to use @LD2, you will need
at least two user defined parameters.
@LG
@LH
@LL
Long Name
@LM
Comments (first line), if present, or Long Name, if present, else Short Name.
@LN
@LP<n>
Parameter; @LP is the same as @LP1. In order to use @LP2, @LP3, you will need
those Parameter rows shown in the worksheet.
@LQ<n>
@LS
Short Name
@LU
@R
@U
Reference Tables
@WL
@WS
Sheet name
Note that when showing units on the legend, the English and Japanese versions use
parentheses ( ) while the German version uses square-brackets [ ] surrounding units.
Reference Tables
319
17 Function Reference
This section provides reference lists of functions, X-Functions and Origin C Functions that are
supported in LabTalk scripting:
Functions
X-Functions
Datatype
ds
dataset
m or n
integer
str$
string
vector
321
322
Brief Description
Ave(ds, n)
Breaks dataset into groups of size n, finds the average for each group,
and returns a range containing these values.
Count(v [,n])
Returns the covariance between two datasets, where ave1 and ave2
are the respective means of datasets ds1 and ds2.
Diff(ds)
Histogram(ds, inc,
min, max)
Generates data bins from dataset in the specified range from min to
max.
Max(v)
Mean(v)
Median(v [,n])
Min(v)
Percentile(ds1, ds2)
QCD2(n)
QCD3(n)
QCD4(n)
Function Reference
Returns the sum of the squares of dataset ds. The optional ref defaults
to the mean of ds as the reference value.
StdDev(v)
StdDevP(v)
Sum(ds)
Total(v)
Brief Description
Betacdf(x,a,b)
Erf(x)
InvF(value, m, n)
Ncchi2cdf(x,f,lambda)
Computes the probability associated with the lower tail of the noncentral 2 distribution.
Poisscdf(n,rlamda)
Binocdf(m,n,p)
Computes the lower tail, upper tail and point probabilities in given
value k, associated with a Binomial distribution using the
corresponding parameters in n, p.
Fcdf(f,df1,df2)
Function Reference
323
Ncfcdf(f,df1,df2,lambda)
Computes the probability associated with the lower tail of the noncentral or variance-ratio distribution.
Srangecdf(q,v,n)
Bivarnormcdf(x,y,rho)
Gamcdf(g,a,b)
Computes the lower tail probability for the gamma distribution with
real degrees of freedom, with parameters and .
Invt(value, n)
Nctcdf(t,df,delta)
Computes the lower tail probability for the non-central Student's tdistribution.
Tcdf(t,df)
Chi2cdf(x,df)
Computes the lower tail probability for the 2 distribution with real
degrees of freedom.
324
Brief Description
Chi2inv(p,df)
Ftable(x, m, n)
Function Reference
Gaminv(p,a,b)
IncF(x, m, n)
Inverf(x)
Norminv(p)
Computes the deviate,xp, associated with the given lower tail probabilip,p,
of the standardized normal distribution.
Srangeinv(p,v,n)
Computes the deviate, xp, associated with the lower tail probability of the
distribution of the Studentized range statistic.
Ttable(x, n)
Tinv(p,df)
Computes the deviate associated with the lower tail probability of Student's
t-distribution with real degrees of freedom.
Wblinv(p,a,b)
Computes the inverse Weibull cumulative distribution function for the given
probability using the parameters a and b.
Betainv(p,a,b)
Brief Description
Betapdf(x,a,b)
Wblpdf(x,a,b)
Function Reference
325
326
Brief Description
Abs(x)
Acos(x)
Angle(x, y)
Returns the angle in radians measured between the positive X axis and
the line joining the origin (0,0) with the point given by (x, y).
Asin(x)
Atan(x)
Asinh(x)
Acosh(x)
Atanh(x)
Cos(x)
Cosh(x)
Degrees(angle)
Exp(x)
Int(x)
Ln(x)
Log(x)
Function Reference
Nint(x)
Prec(x, n)
Rmod(x, y)
Round(x, n)
Sin(x)
Sinh(x)
Sqrt(x)
Tan(x)
Tanh(x)
Radians(angle)
Distance3D(x1, y1,
z1, x2, y2, z2)
Returns the angle between a line with endpoints (x1, y1) and (x2, y2)
and the X axis. Returns degrees if n=1 or radians if n=0, default is
radians. Constrains the returned angle value to the first (+x,+y) and
fourth (+x,-y) quadrant if m=0. If m=1, returns values from 02pi
radians or 0360 degrees.
Returns the angle between two lines with endpoints (x1, y1) and (x2,
y2) for one line and (x3, y3) and (x4, y4) for the other. Returns
degrees if n=1 or radians if n=0, default is radians. Constrains the
returned angle value to the first (+x,+y) and fourth (+x,-y) quadrant if
Function Reference
327
Multi-parameter Functions
Multi-parameter functions are used as built-in functions for Origin's nonlinear fitter. You can
view the equation, a sample curve, and the function details for each multi-parameter function
by opening the NLFit (Analysis:Fitting:Nonlinear Curve Fit). Then select the function of interest
from the Function selection page.
For additional documentation on all the multi-parameter functions available from Origin's
nonlinear curve fit, see this PDF on the OriginLab website. This document includes the
mathematical description, a sample curve, a discussion of the parameters, and the LabTalk
function syntax for each multi-parameter function.
Name
328
Brief Description
Boltzmann Function
Gaussian Function
Hyperbola Function
Lorentzian Function
Poly(x, a0, a1, a2, a3, a4, a5, a6, a7, a8, a9)
Polynomial Function
Pulse Function
Function Reference
Brief Description
grnd()
normal(npts, seed)
uniform(npts, seed)
Brief Description
Jn(x, n)
Yn(x, n)
J1(x)
Y1(x)
First order Bessel function of second kind has the following form: Y1(x)
J0(x)
Y0(x)
Function Reference
329
Beta Functions
Name
Brief Description
beta(a, b)
incbeta(x, a, b)
Gamma Functions
Name
Brief Description
incomplete_gamma(a, x)
gammaln(x)
Incgamma
330
Brief Description
bessel_i_nu(x,n)
bessel_i_nu_scaled(x,n)
bessel_i0(x)
bessel_i0_scaled(x)
bessel_i1(x)
bessel_i1_scaled(x)
Function Reference
bessel_j1(x)
bessel_k_nu(x,n)
bessel_k_nu_scaled(x,n)
bessel_k0(x)
bessel_k0_scaled(x)
Evaluates an approximation to
Bessel_k1(x)
bessel_k1_scaled(x)
Evaluates an approximation to
Gamma(x)
Evaluates
Brief Description
Cell(n,m)
Gets or sets values in the active worksheet or matrix. Indicate the row number n
and column number m in parentheses.
Col(ds)
Wcol(ds)
Can be used either on the left side or on the right side of an assignment.
Function Reference
331
Brief Description
Errof(ds)
Returns the dataset (error column) containing the error values of dataset.
Findmasks(ds)
Returns a dataset that contains the indexes of the masked data points.
hasx(ds)
IsMasked(n, ds)
List(val, ds)
Returns the index number in dataset ds where value val first occurs.
Xindex(x, ds)
Returns the index number of the cell in the X dataset associated with
dataset, where the cell value is closest to x.
Xof(ds)
Xvalue(n, ds)
Returns the corresponding X value for dataset at row number i in the active
worksheet.
332
Brief Description
asc(str$)
sort(ds)
Function Reference
Brief Description
Fit(Xds,n)
Name
Brief Description
Char(n)
Code(str$)
Function Reference
333
334
Exact(str1$, str2$)
Format(data, str$)
Left(str$, n)
Len(str$)
Lower(str$)
Right(str$, n)
Trim(str$, n)
Function Reference
Brief Description
WeekDay(d, n)
WeekNum(d, n)
Year(d)
Month(d)
MonthName(d, n)
YearName(d, n)
Returns the year in string form with input of year or date, with
option n.
Day(d, n)
Hour(d), Hour(t)
Minute(d), Minute(t)
Second(d), Second(t)
Now()
Today()
Function Reference
335
Date(MM/dd/yy
HH:mm,[format])
Utility Functions
Name
336
Brief Description
BitAND(n, m)
BitOR(n, m)
BitXOR(n, m)
colnum(colNameOrDs)
color(name)
color(name, 0)
color(R, G, B)
Returns a integer color value. This value stores additional info in the
highest byte. R, G, and B correspond to Red, Green, and Blue in RGB
color scheme, and each component value ranges from 0 to 255.
exist(name)
Returns a single value indicating what 'object type' the given name is
associated with string value.
font(name)
hex(str$)
Function Reference
ISNA(dd)
NA()
Returns NANUM.
Brief Description
addtool_curve_deriv
addtool_curve_fft
addtool_curve_integ
Function Reference
337
addtool_curve_stats
addtool_quickfit
addtool_region_stats
dlgRowColGoto
imageprofile
vinc
vinc_check
338
Brief Description
addsheet
assays
copydata
cxt
levelcrossing
m2v
map2c
Function Reference
mc2ri
Convert complex numbers in a matrix into their real parts and imaginary parts.
mcopy
Copy a matrix
mks
mo2s
Convert a matrix layer with multiple matrix objects to a matrix page with
multiple matrix layers.
mri2c
ms2o
Merge (move) multiple matrix sheets into one single matrix sheet with multiple
matrixobjects.
newbook
newsheet
rank
reducedup
reduce_ex
Average data points to reduce data size and make even spaced X
reducerows
reducexy
subtract_line
Subtract the active plot from a straight line formed with two points picked on
the graph page
subtract_ref
trimright
Function Reference
339
vap2c
vc2ap
Convert a complex vector into a vector for the amplitudes and a vector for the
phases.
vc2ri
Convert complex numbers in a vector into their real parts and imaginary parts.
vfind
Find all vector elements whose values are equal to a specified value
vri2c
Construct a complex vector from the real parts and imaginary parts of the
complex numbers
vshift
Shift a vector
xy_resample
xyz_resample
Gridding
Name
340
Brief Description
m2w
r2m
w2m
Convert the worksheet data directly into a matrix, whose coordinates can be
specified by first column/row and row labels in the worksheet.
wexpand2m
XYZ2Mat
xyz_regular
Regular Gridding
Function Reference
xyz_renka_nag
xyz_shep
xyz_shep_nag
xyz_sparse
Sparse Gridding
xyz_tps
Matrix
Name
Brief Description
mCrop
mdim
Set the dimensions and values of XY coordinates for the active matrix
mexpand
Expand for every cell in the active matrix according to the column and row factors
mflip
mproperty
mreplace
mrotate90
msetvalue
Assign each cell in the active matrix from the user definited formula
mshrink
mtranspose
Function Reference
341
Plotting
Name
Brief Description
plotbylabel
plotgroup
plotmatrix
plotmyaxes
plotstack
plotxy
plot_ms
plot_vm
Worksheet
Name
342
Brief Description
colcopy
colint
colmask
colmove
colshowx
colslideshow
Function Reference
colswap
filltext
getresults
insertArrow
Insert arrow
insertGraph
insertImg
insertNotes
insertSparklines
insertVar
merge_book
sparklines
updateEmbedGraphs
updateSparklines
w2xyz
wautofill
wautosize
wcellcolor
Set cell(s) color to fill color or set the selected character font color to
Font color.
Function Reference
343
wcellmask
wcellsel
wclear
Worksheet Clear
wcolwidth
wcopy
wdeldup
wdelrows
wkeepdup
wks_update_link_table
wmergexy
wmove_sheet
344
wmvsn
wpivot
wproperties
wrcopy
wreplace
Function Reference
wrowheight
wsort
wsplit_book
wtranspose
wunstackcol
wxt
Worksheet Extraction
Brief Description
dbEdit
Create/Edit/Remove/Load Query
dbImport
dbInfo
dbPreview
Import to certain top rows for previewing the data from the query
17.2.4 Fitting
Name
Brief Description
findBase
fitcmpdata
Function Reference
345
fitLR
fitpoly
getnlr
nlbegin
nlbeginm
nlbeginr
nlbeginz
nlend
nlfit
nlfn
nlgui
nlpara
quickfit
add_graph_to_graph
346
Brief Description
Function Reference
add_wks_to_graph
add_xyscale_obj
axis_scrollbar
axis_scroller
Add a pair of inverted triangles to the bottom X-Axis that allows easy
rescaling
g2w
gxy2w
For a given X value, find all Y values from all curves and add them as a
row to a worksheet
layadd
layalign
layarrange
laycolor
laycopyscale
layextract
laylink
laymanage
laysetfont
laysetpos
laysetratio
Function Reference
347
laysetunit
layswap
laytoggle
layzoom
legendupdate
merge_graph
newinset
newlayer
newpanel
palApply
pickpts
speedmode
17.2.6 Image
Adjustments
Name
348
Brief Description
imgAutoLevel
imgBalance
Function Reference
17.2.6 Image
imgBrightness
imgColorlevel
imgColorReplace
imgContrast
imgFuncLUT
imgGamma
imgHistcontrast
imgHisteq
imgHue
imgInvert
imgLevel
imgSaturation
Analysis
Name
imgHistogram
Brief Description
Image histogram
Function Reference
349
Arithmetic Transform
Name
Brief Description
imgBlend
imgMathfun
imgMorph
imgPixlog
imgReplaceBg
imgSimpleMath
imgSubtractBg
Conversion
Name
350
Brief Description
img2m
imgAutoBinary
imgBinary
Convert to binary
imgC2gray
imgDynamicBinary
imgInfo
imgPalette
Function Reference
17.2.6 Image
imgRGBmerge
imgRGBsplit
imgThreshold
m2img
Geometric Transform
Name
Brief Description
imgCrop
imgFlip
imgResize
Resize image
imgRotate
imgShear
imgTrim
Spatial Filters
Name
Brief Description
imgAverage
imgClear
imgEdge
Detecting edges
Function Reference
351
imgMedian
imgNoise
imgSharpen
imgUnsharpmask
imgUserfilter
352
Brief Description
batchProcess
expASC
expGraph
expImage
expMatASC
expNITDM
expPDFw
expWAV
expWks
img2GIF
Function Reference
impBin2d
impCDF
Import CDF file. It supports the file version lower than 3.0
impCSV
impDT
impEDF
impEP
Import EarthProbe (EPA) file. Now only EPA file is supported for EarthProbe
data.
impExcel
impFamos
impFile
impHDF5
Import HDF5 file. It supports the file version lower than 1.8.2
impHEKA
impIgorPro
impImage
impinfo
impJCAMP
impJNB
Import SigmaPlot (JNB) file. It supports version lower than SigmaPlot 8.0.
impKG
Function Reference
353
354
impMatlab
impMDF
Import ETAS INCA MDF (DAT, MDF) files. It supports INCA 5.4 (file version
3.0).
impMNTB
Import Minitab file (MTW) or project (MPJ). It supports the version prior to
Minitab 13.
impNetCDF
Import netCDF file. It supports the file version lower than 3.1.
impNIDIAdem
impNITDM
Import National Instruments TDM and TDMS files(TDMS does not support
data/time format)
impODQ
imppClamp
Import pCLAMP file. It supports pClamp 9 (ABF 1.8 file format) and pClamp 10
(ABF 2.0 file format).
impSIE
impSPC
impSPE
Import Princeton Instruments (SPE) file. It supports the version prior to 2.5.
impWav
insertImg2g
iwfilter
plotpClamp
reimport
Function Reference
17.2.8 Mathematics
17.2.8 Mathematics
Name
Brief Description
avecurves
averagexy
bspline
csetvalue
differentiate
filter2
integ1
integ2
Calculate the volume beneath the matrix surface from zero panel.
interp1
interp1q
interp1trace
interp1xy
interp3
Perform 3D interpolation
interpxyz
marea
mathtool
Function Reference
355
minterp2
minverse
normalize
polyarea
reflection
rnormalize
specialflt2
spline
vcmath1
vcmath2
vmathtool
vnormalize
white_noise
xyzarea
cohere
356
Brief Description
Perform coherence
Function Reference
corr1
corr2
2D correlation.
deconv
envelope
fft_filter2
fft_filters
hilbert
msmooth
smooth
FFT
Name
Brief Description
fft1
fft2
ifft1
ifft2
stft
unwrap
Function Reference
357
Wavelet
Name
Brief Description
cw_evaluate
cwt
dwt
dwt2
idwt
idwt2
mdwt
wtdenoise
wtsmooth
17.2.10 Spectroscopy
Name
358
Brief Description
blauto
fitpeaks
Pick multiple peaks from a curve to fit Guassian or Lorentzian peak functions
pa
paMultiY
Peak Analysis batch processing using Analysis Theme to generate summary report
Function Reference
17.2.11 Statistics
pkFind
17.2.11 Statistics
Descriptive Statistics
Name
Brief Description
colstats
corrcoef
discfreqs
freqcounts
kstest
lillietest
mmoments
moments
mquantiles
mstats
quantiles
rowquantiles
rowstats
stats
Function Reference
359
Hypothesis Testing
Name
Brief Description
rowttest2
ttest1
One-Sample t-test
ttest2
Two-Sample t-test
ttestpair
Pair-Sample t test
vartest1
vartest2
Perform a F-test.
Nonparametric Tests
Name
360
Brief Description
friedman
kstest2
kwanova
mediantest
mwtest
sign2
Function Reference
17.2.12 Utility
signrank1
signrank2
Survival Analysis
Name
Brief Description
kaplanmeier
phm_Cox
weibullfit
17.2.12 Utility
Name
Brief Description
customMenu
get_plot_sel
get_wks_sel
themeApply2g
themeApply2w
themeEdit
xop
Function Reference
361
File
Name
Brief Description
cmpfile
dlgFile
dlgPath
dlgSave
filelog
Create a .txt file that contains notes or records of the user's work through a
string
findFiles
findFolders
imgFile
template_saveas
web2file
System
Name
362
Brief Description
cd
cdset
debug_log
Used to create a debug log file. Turn on only if you have a problem to
report to OriginLab.
Function Reference
17.2.12 Utility
dir
dlgChkList
group_server
Set up the Group Folder location for both group leader and members
groupmgr
instOPX
language
lc
lic
lx
mkdir
op_change
pb
pe_cd
pe_dir
pe_load
pe_mkdir
pe_move
pe_path
Function Reference
363
364
pe_rename
Rename..
pe_rmdir
pe_save
pef_pptslide
pef_slideshow
pemp_pptslide
pemp_slideshow
pep_addshortcuts
pesp_gotofolder
updateUFF
ux
Function Reference
Index
$
$( ) Substitution .................................57, 64
$(num) ...................................................159
%
% variables ............................................120
%( ) Substitution ......................................57
%( ) substitution notation .........................53
%(string$) ......................................159, 166
%A - %Z...................................................57
%n, Argument..........................................67
@
@ option ..................................................62
@ Substitution .........................................60
@ System Variable................................305
@ text-label option.................................317
@ text-label options.................................63
@ variable ...............................................62
A
Access column by index ..........................88
Access Origin Object by Range ..............47
access worksheet cell..............................58
Accessing Dataset.................................105
Active Column .......................................171
active dataset ........................................120
active graph layer ..................................192
active layer ..............................................77
Active Matrix Sheet................................178
Active Matrixbook ..................................178
Active Window .......................................127
active window title..................................120
active worksheet......................................48
Active Worksheet.............................77, 171
Add Layer ..............................................196
Addition....................................................26
after fit script ..........................................141
Align Layer.............................................197
analysis template...................................146
Analysis Template .........................287, 289
and operator ............................................34
And operator ............................................26
Append project ......................................220
Append text............................................116
area........................................................249
Argument Order .....................................235
Argument, Command Line.....................143
Argument, Command Statment ...............21
Argument, Macro .....................................37
Argument, Script File .............................131
Argument, Subsitution .............................67
Argument, X-Function............................237
Arithmetic ...............................................161
arithmetic operator...................................26
arithmetic statement ................................22
Arrange Layer ........................................196
ASCII..............................................205, 214
assignment ................................................4
assignment operator ................................28
assignment statement..............................20
Assignment, X-Function Argument........124
Average..................................................254
Average Curves .....................................247
Axis Property .........................................193
axis range ..............................................303
B
baseline..................................................267
batch processing............................146, 288
Batch Processing...........................146, 288
Before Formula Scripts ..........................134
block.........................................................24
block of cells ............................................49
braces ......................................................24
break ........................................................35
built-in function.........................................39
C
calculation between columns...................59
Calculation Using Interpolation ................32
Calculus .........................................248, 249
call a fitting function .................................43
Calling Origin C Function from LabTalk.245
cd command ..........................................134
Cell Function ..........................................107
Classic Script Window ...............................3
365
derivative ...............................................248
Descriptive Statistics .............................254
dialog .....................................................282
Differentiation ........................................248
Division ....................................................26
doc -e...............................................33, 229
Document ..............................................219
Double .......................................................9
Double-Y Graph.....................................189
DPI.........................................................215
Draw Line...............................................201
Dynamic Range Assignment ...................52
E
echo .......................................................304
Echo.......................................................154
Ed Object ...............................................152
Edge Detection ......................................270
Edit Command...........................................5
Embed debugging statement ................155
EPS........................................................214
error code ..............................................242
error message .......................................304
Escape Sequence .................................198
evaluating an expression.........................25
Excel book .............................................221
Exception ...............................................242
exit ...........................................................35
Exponentiate............................................26
Export Graph .........................................215
Export Matrix .........................................216
Export Worksheet ..................................213
External application ...............................142
Extract Worksheet Data.........................175
Extracting String Number ......................165
F
Fast Fourier Transform..........................265
FFT ........................................................265
filter ........................................................207
filtering ...................................................265
find peak ................................................267
Finding X given Y ..................................251
Finding Y given X ..................................250
Fit Line ...................................................261
Fit Non-Linear ........................................262
Fit Polynomial ........................................261
fitting function...........................................43
Flow of Control.........................................32
for.............................................................33
format a number ....................................160
frequency counts ...................................255
Friedman Test........................................258
function ..................................................321
Function .........................................162, 337
function statement ...................................22
Function Tutorial ......................................45
Function, Built-in ......................................39
Function, LabTalk ..................................321
Function, User Define ..............................39
G
Get dataset size.....................................104
Get Input ................................................273
Get Point ................................................277
GetN.......................................................274
GetNumber dialog..................................274
GetString................................................274
GetYesNo command .............................273
Global scope ............................................17
Global variables .......................................17
GObject..................................................110
graph..............................................187, 192
Graph .....................................................231
Graph Export .........................................215
Graph Groups ........................................190
graph layer .....................................187, 192
Graph Layer ...........................................189
graph legend..........................................193
Graph Legend........................................199
graph property .......................................192
graph template.......................................187
graph window.........................................187
Graph, 3D ..............................................190
graphic object ..........................................14
Graphic Object.......................................137
Graphic objects......................................198
Graphic Objects .....................................232
Graphic Objects, Looping over ..............232
Graphic Windows, Looping over............231
gridding ..................................................191
H
Hello World ................................................3
367
S
Sampling Interval .......................... 222, 293
Save Script File ..................................... 129
Save Window ........................................ 220
Scalar Calculations ................................. 31
Scientific Notation ................................. 161
scope..................................................... 119
scope of a function.................................. 43
scope of a variable.................................. 16
Scope of String Regester...................... 119
scope, forcing global ............................... 18
scope, global ........................................... 17
scope, local ............................................. 18
scope, project.......................................... 17
scope, session ........................................ 17
Screen Reader ...................................... 277
script........................ 19, 129, 137, 143, 147
Script ..................................................... 142
script access to Code Builder ............... 152
Script After Fitting ................................. 141
script files, creating/saving.................... 129
Script Panel........................................... 137
Script Section ........................................ 130
Script Window ....................................... 128
Script, Before Formula .......................... 134
script, debugging................................... 151
script, execution .................................... 127
Script, Fitting ......................................... 262
Script, for specified window .................. 127
script, from a custom menu................... 148
script, from a script panel...................... 137
script, from a toolbar button .................. 149
script, from external console ................. 143
script, from non-linear fitter ................... 141
script, import wizard/filter ...................... 140
script, in set values dialog..................... 134
script, in worksheet script dialog ........... 136
script, interactive execution........... 151, 157
Script, Project events ............................ 139
script, run .............................................. 127
section..................................................... 35
Section .................................................. 130
Select Range on Graph .......................... 50
selection range...................................... 305
semicolon .......................................... 19, 23
separate statements ............................... 23
Subtraction...............................................26
summary report......................................290
Swap Layers ..........................................197
switch .................................21, 34, 143, 240
Symbol Shape .......................................301
Syntax ......................................................19
system variable......................................120
System Variable.............................120, 296
System Variable, String Regester .........120
T
T notation ...............................................169
Temporary Dataset ................................103
temporary loose dataset ..........................10
ternary operator .......................................30
theme .............................................207, 241
Time .......................................................167
Time Format ..........................................294
Time format notation..............................169
timer .......................................................147
token ......................................................123
toolbar ....................................................149
Tree........................................................225
tree data type...........................................12
Trim margin............................................268
T-test......................................................256
tutorial ......................................................45
Two-Sample T-Test ...............................257
U
UID.....................................................55, 68
UID, Range ..............................................55
Units...............................................222, 293
universal identifier..............................55, 68
Unstack Data .........................................177
Update Origin C .....................................246
User Files Folder ...........................129, 145
User Files Folder Path ...........................120
user-defined function ...............................39
User-Defined parameters ......................222
V
variable ................................................4, 15
Variable......................................................9
Variable Name Conflict ............................15
Variable Naming Rule..............................15
variable, global.........................................17
variable, local...........................................18
371
variable, project........................................17
variable, session ......................................17
Vector Calculation....................................31
Virtual Matrix ..................................185, 191
Visual object...........................................109
W
wcol() .......................................................53
Weibull Fit ..............................................261
wildcard..................................................176
window name ...........................................78
window, active........................................127
workbook, create ...................................171
worksheet...............................................174
Worksheet Export ..................................213
worksheet info substitution ......................60
Worksheet label rows ............................293
Worksheet Method...................................82
worksheet object ......................................78
Worksheet Property .................................79
Worksheet Script dialog.........................136
372