Visual DSD语法
- Visual DSD语法
- 词法规则
- 数字
- 字母
- Integer 整数
- Name 名称
- String 字符串
- Float 浮点数
- Char 字符
- 注释
- 保留关键词
- 程序结构
- Directive 指令
- Declarations声明
- Processes 进程(或者叫过程)
- Species 物种
- Value 值
- 词法规则
Visual DSD | Andrew Phillips
https://wwvh.lanzn.com/imBw32f1ihod
https://ph1ll1ps.github.io/files/VisualDSDManual.pdf
词法规则
数字
单个字符,0-9
字母
A-Z,或a-z
Integer 整数
非空的数字序列
Name 名称
名称的第一个字符必须为字母或下划线(_) ,接下来可以是一个可能为空的字符序列,这些字符可以是字母、数字、下划线或撇号(‘)。
String 字符串
一个可能为空的字符序列,用引号(“)括起来。如果字符串中包含引号,则必须用反斜杠(\)进行转义。
Float 浮点数
- 一个或多个数字后跟一个小数点(.),再跟零个或多个数字。例如:“\(3.141\)”。
- 一个或多个数字后跟一个大写的‘E’或小写的‘e’,再跟一个加号(+)或减号(-),再跟一个或多个数字。例如:“\(3e-5\)”。
- 一个或多个数字后跟一个小数点,再跟零个或多个数字,再跟一个大写的‘E’或小写的‘e’,再跟一个加号或减号,再跟一个或多个数字。例如:“\(1.4324e+2\)”。
Char 字符
一个用撇号括起来的单个字符。这个字符可以是任何字符,除了撇号或反斜杠。
注释
使用(*
开头 *)
结尾
保留关键词
directive sample plot leak tau migrate lengths def new true false int_of_float float_of_int time concentration constant tolerance sum scale duration points toeholds
程序结构
程序分为指令(给模拟器和绘图器的指令)、声明(值、全局域和模块的声明)、进程(要运行的进程,包含物种及其初始种群)
一个程序必须包含进程,可能包含指令和声明
程序可以是这样的(就是说可以没有指令和声明,但有声明必然有指令):
Directives Declarations Process
Directives Process
Process
Directive 指令
指令是 Visual DSD 模拟器和数据绘图仪的指令。
-
Duration 指令:告诉模拟器运行多长时间,使用浮点数表示。可以选择性地包含一个“Points”值(整数),指定在这段时间内采样物种种群的次数。如果没有提供这个值,默认情况下会在每次反应后采样,这可能会产生大量数据点。
directive duration Float directive duration Float points Integer
-
Sample 指令:这是另一种语法,与 Duration 指令具有相同的行为,主要是为了向后兼容。增加相同模拟时间内的数据点数量会产生更细致的结果,但显示可能会变得不太流畅。同样,如果数据点数量保持不变但模拟时间延长(或缩短),结果图将变得不那么(或更)详细。如果没有提供这些指令,默认行为是运行模拟 1000 个时间单位并采集 10,000 个物种种群样本。
directive sample Float directive sample Float Integer
-
Scale 指令:允许随机模拟器从摩尔浓度扩展到个体种群。浓度通过乘以一个因子进行缩放,二元反应的速率根据 Cardelli (2008) 的第 4.2 节进行修改。因此,用户不必担心在连续和离散模拟方法之间切换的细节。默认的缩放因子是 1.0。缩放因子还会修改确定性模拟器的容差参数。
-
Concentration 指令:允许用户指定浓度的单位。当模拟器以确定性模式运行时,这个单位会显示在模拟图的 y 轴上,并且会出现在“Text”标签的摘要信息中。默认的浓度单位是纳摩尔(nM)。
directive concentration String
-
Time 指令:允许用户指定时间的单位。这将显示在模拟图的 x 轴上。默认的时间单位是秒(s)。
directive time String
-
Plot 指令:告诉系统在每个时间点采样哪些种群。如果没有提供“Plot”指令,系统将在每个时间点采样所有物种的种群。
directive plot Plots
Plots的样例
String Gate Strand sum(Plots) sub(Plot;Plot) diff(Plot;Plot) div(Plot;Plot) Plots;Plots
Plots 是一个用分号分隔的链和门物种列表。如果任何物种包含下划线字符 (_),则将其解释为通配符,可以匹配单个域,从而绘制多个物种。例如,模式 <_ s t> 将匹配 和
,但不匹配 。``Plot 指令也可以包含带引号的字符串——在这种情况下,是否绘制的决定基于物种名称的精确字符串匹配。这在处理局部受限域时非常有用,因为这些域会被系统自动重命名。还可以使用
sum关键字加上括号内的物种来绘制物种种群的简单算术函数,例如多个物种种群的总和。对于给定的一对绘图物种 P1 和 P2,还可以绘制 P1 的种群减去 P2 的种群(使用
sub)、差异(使用
diff`)或 P1 与 P2 的比率(使用 ‘div’)。 -
Leak指令 设置泄漏反应的速率(默认值为 \(10^{-9} nM^{-1}s^{-1}\))
directive leak Float
-
Tau 指令 设置有限语义中的 tau 反应速率(默认值为 \(0.1126 s^{-1}\))
directive tau Float
-
Migrate 指令 设置跨单个核苷酸的分支迁移速率(默认值为 \(8000 s^{-1}\))。长度为 L 的域的分支迁移速率由 \(r/L^2\) 给出,其中 r 是指令设置的单个核苷酸迁移速率
directive migrate Float
-
Lengths指令 设置 toeholds 和长域的默认长度值。为了计算速率常数,假设所有长域具有相同的长度,该长度由
lengths
指令设置。代码directive lengths 5 15
将 toeholds 的长度设置为 5nt,将长域的长度设置为 15nt(默认值为 toeholds 为 6nt,长域为 20nt)。提供的 toeholds 值必须大于特异性域的值,否则系统会报错。目前,分配给 toehold 域的默认长度不用于计算速率。相反,用户可以直接为每个 toehold 设置结合和解离速率。请注意,当前在计算速率常数时不使用特定的核苷酸序列。directive lengths Integer Integer
-
Tolerance 指令 指定确定性模拟器的容差参数,这在计算成本和结果平滑度之间提供了权衡。默认值为 \(10^{-6}\)。选择反映系统中种群和反应速率的容差值至关重要,否则确定性模拟器的性能可能会受到影响。请注意,容差乘以比例因子,以尝试保持相对于物种种群的合理值
directive tolerance Float
-
Toeholds 指令 为声明时未指定显式速率的域的默认绑定和解除绑定速率(按此顺序)。默认值为 \(3.0*10^{-4} nM^{-1}s^{-1}\)(结合速率)和 \(0.1126 s^{-1}\)(解离速率)
directive toeholds Float Float
Declarations声明
声明引入了新的模块定义、全局定义的域和值赋值。
-
def 声明模块
def Name ()= Process def Name ( Parameters )= Process
模块只是一个参数化的过程。在这里,Parameters 代表一个非空的、用逗号分隔的名称列表,这些名称是该特定模块的参数。语法也允许模块具有空参数列表。我们将在下面描述过程。模块的名称和参数在该模块的主体内绑定,模块的名称在程序的其余部分绑定。
-
new 声明新域
new Name @ Value , Value new Name
声明在全局范围内有效,即该域的名称在程序的其余部分中都有效。该域可以选择性地附加两个浮点值,分别明确表示该域的结合速率和解离速率。如果省略这些值,则使用
toeholds
指令设置的默认速率(如果程序中没有此类指令,则默认结合速率为 \(3.0*10^{-4} nM^{-1}s^{-1}\),默认解离速率为 \(0.1126 s^{-1}\))。值得注意的是,程序中使用的域并不都需要以这种方式全局声明。如果系统在程序中检测到未声明的域,则假定其具有这些默认的结合和解离速率。这种方式既能保持程序简洁,又能灵活地修改某些域的交互速率。速率值没有单位——程序员需要确保所有速率都以相同的(隐含)单位给出。解离速率在默认语义模型中使用 -
def 赋值
def Name = Value
赋值后任何后续对该名称的使用都将引用此值,除非中间出现了同名的绑定(即
def
或new
的实例)。如果在名称未先绑定到值的情况下使用该名称(除非该名称用作域,如上所述),系统将报错
Processes 进程(或者叫过程)
Visual DSD 的核心是一个专门用于模拟 DNA 交互的过程演算
先是' 进程们' Processes:
Process
Process | Processes
-
指定种群
Species
一个物种就是一个过程
-
初始化种群数目
此处应为整数
Value * Process
如果加上了
constant
就说明种群数目不变constant Process constant Value * Process
-
局部域声明
new Name @ Value , Value Process new Name Process
new Name Process
表示在过程Process
中声明一个名为Name
的局部域。 -
组合过程
一个过程们也可以组合作为一个过程
( Processes )
-
并行运行
使用竖线隔开
Process | Processes