originL4-LabTalk
LabTalk的介绍
1. 什么是LabTalk?
LabTalk 是 OriginPro 原生脚本语言。
2. LabTalk能干什么?
通过 LabTalk, 可以方便地进行自定义操作, 例如列值计算, 自定义拟合函数, 批量处理等。
3. 如何运行LabTalk?
脚本窗口(窗口: 脚本窗口)
命令窗口(窗口: 命令窗口)
代码编译器(Code Builder,自定义程序按钮,查看: 代码编译器)
设置列值对话框
自定义拟合函数
等等
例子
1 | // 运行文件中的Main节 |
基本特性
1. 数据类型与变量
有九种数据类型:
double, int, constant, dataset, string, stringarray, range, tree, Graphic Object等
Numeric
- int在LabTalk中是按double类型存储的
- constant一旦声明,就会保存在System
Variable中,新的session也可以调用它
- 想要在新的session中使用constant,需要在CONST.CNF文件下定义这个constant
- 没有复数形式,如需要可以使用Origin C
- 0,NANUM, -1.0E-290到1.0E-290之间的值会在逻辑上判定为False
1 | type $(-1e-290?1:0); // Returns 0 (False) |
Dataset
- 该类型存储数字类型的array
2. 字符串变量
定义:双引号不是必须的
1 | string s = hello world; |
美元符号($)在定义时可有可无,在赋值时是必须的
1 | string str1$ = "hello world"; |
- 赋值给另外一个变量时,在后面加上$,如str1 = s$
- 调用字符串时,需要在后面加上$
字符串寄存器:
%H --> 当前处于活动状态的窗口名称
%X --> 当前项目所在目录
%Y --> 用户文件夹
…
3. 语法
赋值语句,宏语句,命令语句,运算语句,函数语句
分号的使用:;
注释://, /* */
操作符:运算操作符,字符串连接,赋值操作符,逻辑关系操作符,条件操作符
条件语句:if, if else, switch, break, exit, continue
循环语句:repeat, loop, doc -e, for
对象
语法:
对象名.属性
对象名.方法(参数列表)
1 | page.= // 查看对象的属性 |
命令
语法:
命令 [-选项] [参数列表]
1 | newbook; // X-Function,新建工作簿 |
命名范围
语法:
range [-选项] RangeName = RangeString
1 | range rb = [Book2]; // 命名范围为Book2这个工作簿 |
替换记法
%A-%Z
字符串寄存器是最简单的替换,在脚本执行过程中,寄存器被产生的内容替换。
1 | FDLOG.open(A); // 打开的文件名存于%A |
%( )
用于解析出%(str$),%(range),工作表信息,列名,单元格,图例等。
1 | string str$ = Book5; |
$( )
用于把数字表达式替换为相应的数字字符串。
1 | dataset ds1 = {1, 3, 5, 7}; // 定义数据集 |
%n
用于给宏和脚本传递参数,n为整数,为1-5,即最多可传递5个参数。
1 | def my_add {type -b "(%1 + %2) = $(%1 + %2)"} // 定义一个宏 |
X-Function
X-Function 是 Origin 里的一个框架,可以用于创建执行特定任务的工具。大部分 X-Function 都可以通过 LabTalk 脚本来运行。
Origin 里很多分析工具都是通过 X-Function 来实现的,包括在学习中心里的很多APP,也是由 X-Function 来做的。
1 | win -a Book6; // 先把Book6设置为当前活动窗口 |
如何生成脚本?
1 | newsheet -d; // -d选项可以打开对话框,然后在对话框里有相应的生成脚本的方式 |
注意:有些 X-Function 设计时并不允许打开对话框,此时使用-d会出错!
查找X-Function及帮助文档
1 | lx *norm*; // 查找带norm这几个字符的X-Function |
宏和函数
宏的定义与调用
1 | // 语法 |
内置函数
1 | // 数值类的函数 |
自定义函数
1 | // 语法 |
实用例子
使用模板批量绘图
1 | run.section(dofile.ogs, OnInstallTemplate, "%XTemplatForBatch.otpu"); // 安装模板 |
批量峰值分析
Book11的Sheet1工作表中的数据,从迷你图可以看到,C、E、F这三列Y数据,噪音比较多,不适合做峰值分析(会产生很多不准确的峰值),而现在又想对工作表中的Y数据进行峰值分析的批量处理,同时要把噪音过大的过滤掉,如何做?
1.生成主题
- 选中B列,然后点菜单 分析: 峰值及基线: 峰值分析。
- 目标为峰拟合,在寻峰步骤,点 查找,然后下一步,再保存主题,关闭。
2.通过主题批量峰值分析
点菜单 分析: 峰值及基线: 通过主题批量峰值分析。
输入选择所有列,主题为刚保存的主题,结果表为峰属性。
在脚本的每次处理前运行脚本里输入改下脚本:
1
2
3
4
5
6
7
8
9dataset dr; // 定义一个数据集变量
fft_filters iy:=_ry filter:=high oy:=dr; // FFT高通滤波,可以获得噪音分量,_ry对应批处理时当前处理的y数据,输出结果噪音放到dr
stats dr sd:=nSD; // 对噪音进行统计分析,并取得噪音的标准差放到变量nSD
stats _ry sd:=sSD; // 对信号进行统计分析,并取得标准差放到变量sSD
if (nSD^2 > sSD^2 * 0.3) { // 对比噪音的方差与信号的方差,如果噪音的方差大于信号方差的0.3倍,则认为此信号噪音太大,不适合做峰分析,跳过此信号
_skip=1; // _skip此变量标志是否要跳过当前的数据不处理
} else {
_skip=0; // _skip为0,则表示当前数据不跳过,会被处理
}点确定按钮。
工作本脚本
1.工作表脚本
新建一个工作簿。
点菜单 工作表: 工作表脚本,打开工作表属性对话框。
在脚本选项卡下,在脚本触发条件框中,勾上两个复选框,并在第二个复选框下填上:1:end,表示任意数据的变动都触发。
脚本则使用下面的脚本:
1
2
3
4
5
6
7
8
9wks.userParam1 = 1; // 显示第一个用户自定义参数行
wks.userParam2 = 1; // 显示第二个用户自定义参数行
wks.userParam1$ = "均值"; // 设置第一个用户自定义参数行为均值
wks.userParam2$ = "标准差"; // 设置第二个用户自定义参数行为标准差
for (int ii = 2; ii <= wks.ncols; ii++) { // 第二列开始历遍工作表中的所有列
range rr = $(ii); // 取得第ii列的命名范围
col($(ii))[D1]$ = $(mean(rr), .2*); // 计算第ii列的均值,并把值取小数后两位放到自定义参数均值行
col($(ii))[D2]$ = $(stddev(rr), .2*); // 计算第ii列的标准差,并把值取小数后两位放到自定义参数标准差行
}导入一个数据看结果。
2.导入多个ASCII文件
- 打开导入多个ASCII文件对话框,选择多个要导入的ASCII文件。
- 在脚本分支下,把上面用过的同样的脚本复制粘贴到每个文件导入后运行脚本的文本框中。
- 点确定按钮。