注释 /*这是一个注释*/ 语句分隔 语句分号(;)分隔,兵器可以跨越多行 字符串 单引号(')或双引号(") 单引号字符串按字面意义解释.双引号字符串会将斜杠解释,使用双引号将返回,制表符和其他格式代码插入到字符串中 函数 函数可以将数据属性名称或引用作为此参数:例如 a :=NumValues(myprop); /* 无引号 */ PilotScript也可以将字符串(双引号或单引号)进行操作:例如 myprop := "abc" 运算符 可用于字符串模式匹配,包括 EQ(=), NE(!=), GT(>), GE(>=), LT(<), LE(<=), LIKE 和 RLIKE 正则表达式 使用正则表达式进行模式匹配(RLIKE)一级其他特定的PilotScript函数,例如 RSPLIT 和 RKEEP 算数运算符 + - * / ++ -- > < >= <= == 数学表达式 SQRT LOG SIN COS EXP SUM BIN ... 布尔 TRUE FALSE 数字 所有数字在内部均视为双精度浮点数,但可以以 整数浮点数指数 表示法输入 PilotScript 支持条件(IF, NOT, AND 或 OR) 和循环 (WHILE 和 FOR) 属性名 包含数字字母下划线, 并字母或下划线开头 不遵循这些规则的属性名可以使用 Property()函数, 或带百分号(%), 后跟用单引号引起来的属性名称. 例如: Property('a'), %'arf bark' 如果未在数据记录中定义属性,则PiloScript可以即时计算属性. 这些类型的属性称为 "可计算的属性". 若要在编辑表达式时查看已注册的可计算属列表, 请按F4 Property范围 除数据记录属性外, 还有两种属性类型: 全局和局部. Global Properties (@) 全局属性与协议相关联,并且一旦定义就可以在协议中的任何位置访问. 一个示例是一个计算器,它跟踪通过管道的分子总数.全局属性存储为属性列表, 但是数据不会随数据记录仪器移动.它与协议本身联系在仪器 全局属性在字符串 (@) 开头标识, 并且不区分大小写. 例如: @asdf_grWQFLK. 注意: 使用 DeclareLocal 子协议上的参数可局部限制子协议内的某些全局属性. 生命临时文件时(使用零时文件 自协议 或 创建零时文件子协议中的组件), 文件名将为全局属性, 该属性在子协议的本地范围内. 例如: 使用 Tempfiles 创建临时文件 "temp1"临时文件子协议上的参数, 创建一个全局属性 @temp1, 其中包含代表绝对文件名的字符串 本地属性(Local Properties) (#) 本地属性在协议内的单个组件关联,并且仅在该组件内定义. 与全局属性一样, 局部属性不会随数据记录仪器移动. 本地属性在字符串的开头用(#)标识, 并且不区分大小写. 例如: #counter 字符串替换令牌(String Repacement Tokens) 字符串替换令牌用于为任何字符串定义命名值StringType参数, 包括PiloScript表达式,SQL语句和脚本的文本. 字符串替换令牌可以从全局属性或父组件或协议中的参数获取其值.令牌由美元符号字符($)组成, 后跟括号中的全局属性名称(或父组件或协议参数名称). 例如:$(number_of_molecles_passed) 在运行时,令牌被全局属性或参数的值替换.替换过程是使用属性值作为字符串的简单替换.不包括引号,从而允许在各种角色中使用该值.例如:根据全局变量动态确定参数值, 例如:User$(UserName)indoles.sd --- PilotScript组件 提供了专门设计用于支持PilotScript表达式的通用组件.包括 自定义过滤器(PilotScript): 将输入数据分为通过和失败输出端口的通过和失败记录,其中过滤逻辑以PilotScript语法表示。它将表达式中的最后一条语句评估为True或False。如果计算结果为True或非零,则通过Pass端口输出记录。如果评估结果为False,则通过Fail端口输出。定制过滤器组件可能在实际过滤语句之前包含其他语句,因为通常在实际过滤语句之前计算newproperties并对属性列表进行其他更改。 自定义奥总起(PilotScript): 将PilotScript表达式应用于每个数据记录并相应地处理数据。custommanipulator不过滤任何记录。您构造一个custommanipulator组件来操纵属性或处理数据记录和协议属性。例如,您可以构建一个组件来计算新属性并将其添加到通过该组件流式传输的数据记录中。 识别协议中的PilotScript组件 在整个协议中,PilotScript组件通常以多种组合使用。由于组件名称没有描述脚本的实际作用,因此Pipeline Pilot现在尝试区分协议中这些组件的不同用法。这些组件会自动用其表达式值的第一行标记,直到您手动更改名称或保存协议为止 关于PilotScript表达式编辑器 表达式编辑器可用于处理PilotScript表达式。只要您选择 表达 PilotScript支持的组件的参数。该编辑器支持语法突出显示 并自动完成标准控件语法,属性名称和功能。 关键字和功能 关键字 : 在PilotScript语言中具有严格定义含义的保留字,例如: OR 功能 : 内置使用程序,可对数据执行操作, 例如: DateCurrent 要访问可用关键字和功能的列表, 按F5, 在您的表达式中关键字和功能以蓝色文本显示 可计算的属性 如果未在数据记录中定义属性,则PilotScript可以即时计算属性。这些类型的属性称为可计算属性。它们由custommanipu lator和filter组件使用,并在PilotScript表达式中引用。例如,如果表达式 AlogP> 2 输入到 自定义过滤器(PilotScript) 组件 ,然后 AlogP 在评估数据记录之前自动计算。如果给定属性的属性列表上已经存在一个值,则存储的值将用于评估数据记录,而不是计算所得的值。 要即时计算属性,必须满足以下条件: 属性名称必须在数据记录中不存在 属性名称必须是可计算的注册属性 还必须将核实的数据对象与数据记录管理,以便可以计算属性 例: IF Num_Atoms > 200 THEN ... PilotScript快速参考帮助 PilotScript表达式编辑器包含快速参考帮助. 此功能提供了再最需要的编辑对话框中直接编辑PilotScript表达式的提醒. 提供以下帮助: 变量: 从PilotScript访问数据记录属性,全局协议属性和本地组件属性的方式。 关键字: 运算符(赋值,算术,文本,布尔数值,布尔文本,布尔属性和条件),布尔值(true,false),FlowControl(条件语句和循环)。 功能: AZ按类别,然后按功能名称。还提供了一些示例,供您剪切和粘贴到编辑器文本字段中以供重复使用和自定义. IF ((property('status') EQ 'StatusRuning') OR () OR ()) THEN FALSE; ELSE TRUE; END IF; 内联显示属性列表 使用“参数”选项卡输入或修改参数值时 表达 参数,您可以通过按来查看传入数据记录的属性列表 F9。 提示 当上游有填充的检查点和/或数据缓存时,属性列表将完成。 您现在也可以直接在 表达 参数选项卡中的参数字段。(这对于不需要在“表达式编辑器”对话框中处理的简短表达式 很有用。) --- PilotScript表达式示例 以下是一些简单的示例,这些示例说明了使用PilotScript表达式的常见操作。您可以在PilotScript表达式编辑器中输入和编辑此语法,该编辑器支持语法突出显示和标准控件语法,属性名称和函数的自动完成。 布尔过滤器 /*选择高于分子量阈值的分子的简单表达式: */ Molecular_Weight <= 500 /*从上一个示例构建 Lipinski过滤器 组件包括具有多个ANDs表达式和一个数学表达式: */ Molecular_Weight <= 500 AND Num_H_Donors <= 5 AND (N_Count + O_Count) <= 10 AND ALogP <= 5 /*一种表达式,用于选择分子量阈值以上的分子和子串“estrogen”,该属性名为 PT: */ Molecular_Weight <= 500 AND PT LIKE '%estrogen%' /*用于选择分子量阈值以上且具有 PT 以短语“ Anti”开头的属性值: */ Molecular_Weight <= 500 AND PT RLIKE 'Anti%' 如果使用操纵器而不是过滤器来实现过滤器功能(常见的疏忽),则将定义一个PilotScript表达式,最后一行的计算结果为True或False。尽管这对于custommanipulator来说是有效的语法,并且似乎可以正常运行,但是所有数据都退出Pass端口,因此未应用过滤。 多语句表达式 像上面的表达式一样,不需要终止分号(;)。多个表达式都必须以分号结尾。以下示例使用全局属性为数据记录属性分配值: @gcount := @gcount + 1; mol_num := @gcount; /* 在此示例中,@ gcount是用作计数器的全局属性,该计数器递增并分配给该属性 mol_num 在数据记录属性列表上。解析器不区分大小写,因此该属性 @gcount @Gcount 将访问相同的值。 由于支持完整的数学语法和优先级,因此可以进行复杂的数学计算。例如: */ /* solves quadratic equation ax2 + bx + c = 0 */ a := 2; b := 3; c := -108; q := b*b-4*a*c; IF (q == 0) THEN /* solution has a single root */ r1 : = -b/(2*a); ELSIF (q > 0) THEN /* solution has multiple roots */ r1 : = (-b + sqrt(q))/(2*a); r2 := (-b - sqrt(q))/(2*a); ELSE /* solution has imaginary and real parts */ r := -b/(2*a); i := sqrt(-q)/(2*a); END IF; Initialization and Finalization Initial Expression和Final Expression参数用于执行PilotScript表达式在组件处理第一个数据记录之前(初始),以及最后一个数据记录之后已处理(最终)。 这些参数中只能使用全局和局部属性。 因为他们是与管道相关联,这些参数无法访问数据记录属性。 在上面的示例中,使用了一个自定义操纵器组件来保持对通过它记录流。 这是通过增加每个数据记录的协议属性来完成的: @gcount := @gcount + 1; 当第一条记录传递到此组件时,它将尝试添加 1个 一个不存在的财产,或至少一个价值不受控制的财产。确保在处理第一条记录之前执行以下命令: @gcount := 0; 这可以使用 Expression 的参数 CustomManipulator 零件: Expression /* 对于传递给组件的每个数据记录运行一次。*/ Initial Expression /* 在处理任何数据记录之前执行一次。*/ Final Expression /* 在处理完最终数据记录后执行一次。*/ Keep Calulated Properties /*总体顺序是执行 初始表达式 然后 表达 对于传递给组件的每个数据记录,最后, 最终表达。 */ /* Custom manipulator参数不会成为您可以通过其访问的全局变量 @ParameterName 句法。您只能通过$( ParameterName)句法 */ --- 调试PilotScript表达式 要调试PilotScript表达式,请使用 Debug 功能并在“调试”模式下运行协议。在此模式下,控制台窗口显示在Pipeline Pilot Client的左下角。它显示PilotScript组件的所有调试消息命令的结果。有关更多详细信息,请参见Pipeline Pilot联机帮助中的“在调试模式下运行协议”。 --- 数据记录属性 Pipeline Pilot处理流经管道的数据记录。它可以访问和更改数据记录以及与每个数据记录关联的属性列表。 引用属性值 /*要在PilotScript中引用属性的值,请使用属性的名称。以下示例分配 5 作为财产的价值 a_min: */ a_min :=5; 检索属性值 a_save := a_min; 引用属性 /* 如果您需要引用属性本身而不是其特定值,请使用属性名称作为文本字符串。一些PilotScript函数在属性上起作用,而不是在值上起作用。因此,将这些函数的名称命名为字符串,如以下示例所示: */ Keep('a_min', 'a_max', 'a_save'); --- 数据记录属性 数据记录具有与之关联的属性。数据记录属性具有以下特征: 它们存储在属性列表中,该列表是名称/值对的数组。 每个数据记录属性都包含一个字母数字名称和一个值。例子包括: Molecular_Weight, Compound_Name, CAS number, and AlogP. 在管道开始时使用custom manipulator组件重命名包含字母数字和下划线以外的字符的属性通常很方便。例如: Rename('CAS number, 'CAS_number');. 属性的值(例如, 346.4for Molecular_Weight) 可以是单个项目或多个项目。如果有多个值,则称为数组属性。 数据记录属性可以源自数据源,也可以在处理记录时将其添加到记录中。这是通过为新属性分配一个值来完成的 (myprop :='abc';yourprop :=myprop;)或使用可计算的属性执行计算 (cmpdAlogP:=AlogP)或算术运算符 (-avg :=total/5). /*在下面显示的示例中,如果原始数据源中未定义AlogPis,则在对表达式求值时会自动计算它。 要处理包含空格或其他非标准字符的属性名称,请使用Property()功能, property ('var'), 或者 %'var'句法. */ AlogP < 3.5 Global and Local 属性 协议属性可以在多个级别上定义,反映协议,子协议和组件的嵌套。在最广泛的范围内,一组属性可以是整个协议的全局属性,被称为全局属性。每次执行表达式时,它都会使用不同的数据记录。协议中的所有组件都可以访问全局属性列表,而局部属性只能从它们所驻留的组件中访问。 协议中所有组件可用的属性称为全局属性。全局变量仅在协议执行过程中持续存在。可以将全局属性的值分配给数据记录属性,如以下示例所示: @gcount += 1; count := @gcount; 可用于特定组件的属性称为局部属性。与全局属性一样,可以将本地属性的值分配给数据记录属性。例如: #lcount += 1; count := #lcount; Property Names 您可以像使用诸如C或Java这样的语言中的属性来使用它来访问属性的值。属性名称必须以字母字符或下划线开头,并且只能包含字母数字字符(AZ,0-9)和下划线。如果属性名称不满足此条件,请参阅 Property()function, property('var'), or the %'var'syntax. 可以通过在属性名称前使用@字符来使用全局属性(@ var)。 同样,通过在属性名称(# var)。 所有属性名称和关键字均不区分大小写。 例如: A %a %'a' property('a') FoO_3 @A A'Sample A' #L #'Plate L' --- 数据属性名称 数据属性名称应以字母字符(A-Z)或下划线(_)开头,并且只能包含字母数字字符(A-Z,0-9)和下划线。 数据属性名称不区分大小写 % 如果可以使表达式更清晰,则数据属性名称始终可以以百分比字符(%)为前缀。 不区分大小写 如果数据属性名称不满足上述条件(例如,它包含空格或以数字开头),则可以通过使用百分号(%)紧随其后并用单引号引起来的属性名称来对其进行限定。将%理解为"the value of."。 Property() 函数 实现此目标的另一种方法是使用 Property() 功能。下面的例子: Property('Plate#') /*等效于 */ %'Plate#' 考虑一个属性名称可以存储在另一个属性中,如以下示例所示: IF New_Plate_ID IS DEFINED THEN AssigneeProperty := ’New_Plate_ID’; ELSE AssigneeProperty := ’Plate_ID’; END IF ... ... /* Later in the Pipeline */ Property(AssigneeProperty) := ’36DUS’; / *请注意,%AssigneeProperty还会执行其他操作!* / / *在AssigneeProperty周围没有引号。引用AssigneeProperty的值* / 非标准字符和空格 原始记录数据可能会为您提供带有空格或其他非标准字符的数据属性名称。在管道的开头重命名这样的属性组件很方便。 Rename(’compound id’, ’compound_id’); --- 设置属性值 要设置属性的值,请使用冒号等于(:=)。 Compound := 'T56’; S_Point:= M_Point; /*从一个属性中检索值( M_Point) 并将其分配给另一个( S_Point)*/ 要测试两个值是否相等,请单独使用双等号(==)作为条件运算符。 如果您编写的表达式包含多个语句,请以分号(;)结束每个语句。 一条语句可以扩展到多行。请确保在语句末尾使用分号(;)来终止它。 --- 设置数组属性值 要将属性的值设置为数组,请使用冒号等于(:=)和“数组”函数。例如,我们可以将属性初始化为文件名数组: Filenames := Array(‘Assay1.txt’,’Assay2.txt’,’Assay3.txt’); Floats := Array(3.14159, 2.718, 0.57721); /*创建整数数组比较棘手,因为在PilotScript中,数字(即使不带小数点写)也默认解释为双精度。但是,您可以使用Integer函数包装它们。这是整数数组: */ Primes := Array(Integer(2), Integer(3), Integer(5), Integer(7), Integer(11); --- 删除属性值 要删除属性,请使用 Remove() 功能: Remove ('Compound'); /*需要存在才可以使用*/ --- 可计算的属性 如果未在数据记录中定义属性,则PilotScript可以即时计算属性。这些类型的属性称为可计算属性。它们由custommanipulator和filter组件使用,并在PilotScript表达式中引用。例如,如果表达式 AlogP> 2 输入到 自定义 Filter(PilotScript) 组件,然后 AlogP 是在评估数据记录。如果给定属性的属性列表上已经存在一个值,则存储的值将用于评估数据记录,而不是计算所得的值 要即时计算属性,必须满足以下条件: 属性名称必须在数据记录中不存在 属性名称必须是可计算的注册属性(如下所述) 还必须将合适的数据对象(例如分子)与数据记录关联,以便可以计算属性 IF Num_Atoms > 200 THEN ... /*在这种情况下, Num_Atoms 是已注册的可计算属性,并且该组件知道如何根据分子数据计算原子数。假设数据记录具有关联的分子对象,则将计算属性并将其添加到数据记录中。然后,进行属性值比较。 */ 默认情况下,在custommanipulator和filter组件释放记录后,将丢弃计算的属性。要保留这些属性,请设置参数 保留计算的属性 改为“ True”。 查找注册的可计算属性 要查看已注册的可计算属性列表,请按 F4 从PilotScript表达式编辑器。显示已注册的可计算属性列表。该列表包括“用户名”选项卡中存储的注册属性和自定义可计算属性。 如果其他客户端用户在服务器上工作,则他们可能正在创建注册可计算属性的组件(通过“output”参数)。这些可计算的属性被添加到服务器上的数据库中,并且可用于任何客户端用户的表达式。要显示最近添加到服务器的所有新可计算属性,请按 F7。 计算属性的替代方法 Calculate() --- Property Lists Property Name Lists Compound B29 VDWVol 336.0999 M_Point 192 Smp_Data 292, 287, 295, 301 编写表达式时,请想象它在通过数据管道时将应用于每个单独的数据记录。执行表达式时,它可以访问数据记录的这些属性以及整个属性列表。 因此,使用表达式语言来执行以下操作: 管理列表项(例如,添加或删除属性或更改属性顺序) 为属性列表中的属性分配值 在属性列表中检索属性的值 --- 遍历数据记录属性列表 为了提供对数据记录的属性列表的更灵活的访问,您可以在PilotScript中创建一个属性,而无需标识特定的属性名称。您可以通过按属性在属性列表中的位置访问属性来动态构建属性。这使得可以使用为匿名属性访问模式设计的一组函数来遍历数据记录中的所有属性。 匿名属性列表功能 |功能|描述|示例| |||| || ....... 循环 #total := 0; FOR #index in 1 .. NumValues(myprop) LOOP #total += myprop[#index]; END LOOP; average := #total / numvalues(myprop); /*上面的示例计算数据记录属性数组myprop的平均值。由于本地属性用于循环属性# 指数 和临时财产 总, 这些属性都不会干 扰协议中的其他组件,也没有必要将这些属性添加到子协议的 声明本地 参数。*/ 访问属性值类型 GetPropertyType() 4.0新写法: GetPropertyType(Var, True); 更改属性值类型 Resize(Var, 4); Var[1] := 111; Var[2] := 222; Var[3] := 333; Var[4] := 444; ChangePropertyType(Var, 'SciTegic.value.IntegerFingerprintValue'); 或者 Set1:='1 2 5 6 12 15'; ChangePropertyType(Set1,'SciTegic.value.BitsetValue'); 基本属性值类型列表 属性值类型 描述 GetPropertyType 同义词 SciTegic.value.BitFingerprintVal ue 被视为学习指纹的位集 BitFingerprint SciTegic.value.BitsetValue 一组二进制位 SciTegic.value.BooleanValue 布尔值True或False Bool Boolean SciTegic.value.DateTimeValue 日期和时间 SciTegic.value.DoubleValue 浮点数 Double SciTegic.value.FlexValue 可以容纳整数(有符号或无 符号)的混合数据类型, 浮点数(短 和宽),字符串 (ASCII或宽字符),布尔 或 字节。用于与之通信 一些脚本 语言,例如Perl。 SciTegic.value.IntegerValue 32位整数 Long Int, Integer SciTegic.value.NullValue 空 SciTegic.value.StringValue string String 注释 // 单行 /*多行*/ Statements D := date(Date); Day := DatedayOfMonth(D); Month := DateMonthText(D); Year := DateYear(D); MonthYear := Month . '/' . Year; String Operations 可以使用点(.)运算符将字符串连接到其他字符串,数据属性,全局属性或局部属性。 CName := 'Assay' . Assay_ID #format := '%5.' .@'小数点位数' .'f'; 正则表达式语法 使用正则表达式的运算符和函数的名称以“ R”为前缀,如RRemove,RKeep,RMatch ,RSubst 和RSplit 。 IF IF Boolean_expr THEN expression_seq [ELSIF Boolean expr THEN expression_seq] [ELSE expression_seq] END IF; Example: IF Gene EQ ’mt-1’ THEN Type := 1; ELSIF Gene EQ ’endox’ THEN Type := 2; ELSE Type := 0; END IF; IF Total_Weight < 100 THEN Mean := -1; END IF; NOT, AND, OR Type := 0; IF (Gene EQ ’mt-1’ OR Ratio > 30.0) THEN Type := 1; ELSIF (Gene EQ ’endox’ AND Ratio < 20.0) THEN Type := 2; ELSIF NOT (AssayID EQ ’P1’ AND Ratio > 30.0) THEN Type := 3; ELSE Type := 4; END IF; WHILE Loops WHILE Boolean_expr LOOP expression_seq END LOOP; Resize(a, 5); #@i := 1; WHILE #@i <= 5 LOOP a[#@i] := #@i; #@i += 1; END LOOP; /* 在上面的示例中,属性“ a”的后缀要求一个索引来指定要使用的值。第一个列表项的索引为1。*/ FOR循环 FOR var IN [REVERSE] expr1 .. expr2 LOOP expression_seq END LOOP; Resize(a, 5); FOR @i IN 1 .. 5 LOOP a[@i] := @i; END LOOP; FOREACH Loops FORFOR var IN [REVERSE] arrexpr LOOP expression_seq END LOOP; #Arr := Array(1,2,3,4,5); Resize(a, 0); FOREACH #i IN #Arr LOOP Append(a, #i); END LOOP; BREAK声明 Resize(a, 5); @i := 1; WHILE TRUE LOOP a[@i] := @i; IF @i == 5 THEN BREAK; END IF; ++@i; END LOOP; Configure the Chemical Registration Dynamic Toolbar You need to configure the Workbook Synthetic Chemistry section of the Synthetic Chemistry - ChemReg experiment template to run protocols using the PipelinePilot | ChemRegRunProtocol permission that you defined in the Vault Administration Console. In the Synthetic Chemistry section of the Synthetic Chemistry - ChemReg experiment template, the dynamic toolbar contains two buttons, Register, and Update. The Register button issues the commands to run the Register Material protocol to register the chemical in the experiment with Chemical Registration. The Update button issues the command to run the Fetch ChemReg Data protocol then revises the experiment with the ID generated by Chemical Registration and the chemical structure. When using a separate Chemical Registration Pipeline Pilot server, the protocols are run on the Chemical Registration Pipeline Pilot server rather than the Pipeline Pilot server used by Workbook. You must have Template Editor permission to update a template in Workbook. To configure the dynamic toolbar in the Synthetic Chemistry - ChemReg experiment template: Open the Synthetic Chemistry - ChemReg experiment template in Notebook Explorer. Click the Synthetic Chemistry section, select View > Properties. In Properties, click the Section tab. Navigate to the Template group, in the Dynamic Toolbars property, click the ellipses button. In the Dynamic Toolbar Editor, from the Select a Toolbar list, choose ChemReg. In Add/Edit Toolbar Items, select the Register button. In the Dynamic Toolbar Item group, select Application Permission. In the Application Permission dialog, select PipelinePilot: ChemRegRunProtocol, and click OK. Use the PipelinePilot: ChemRegRunProtocol application permission when running Chemical Registration on a Pipeline Pilot serverthat is not used by Workbook. In Add/Edit Toolbar Items, select the Update button. In the Dynamic Toolbar Item group, select Application Permission. In the Application Permission dialog, select PipelinePilot: ChemRegRunProtocol, and click OK. The Register and Update buttons display on the Dynamic Toolbar in Notebook Explorer. Before your scientists can use the Synthetic Chemistry - ChemReg template and the Register and Update buttons, you must install the Notebook Component Collection on the Pipeline Pilot server running Chemical Registration.