Visual DSD语法

Visual DSD语法

Visual DSD | Bioinformatics

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 浮点数

  1. 一个或多个数字后跟一个小数点(.),再跟零个或多个数字。例如:“\(3.141\)”。
  2. 一个或多个数字后跟一个大写的‘E’或小写的‘e’,再跟一个加号(+)或减号(-),再跟一个或多个数字。例如:“\(3e-5\)”。
  3. 一个或多个数字后跟一个小数点,再跟零个或多个数字,再跟一个大写的‘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 模拟器和数据绘图仪的指令。

  1. Duration 指令:告诉模拟器运行多长时间,使用浮点数表示。可以选择性地包含一个“Points”值(整数),指定在这段时间内采样物种种群的次数。如果没有提供这个值,默认情况下会在每次反应后采样,这可能会产生大量数据点。

    directive duration Float
    directive duration Float points Integer
    
  2. Sample 指令:这是另一种语法,与 Duration 指令具有相同的行为,主要是为了向后兼容。增加相同模拟时间内的数据点数量会产生更细致的结果,但显示可能会变得不太流畅。同样,如果数据点数量保持不变但模拟时间延长(或缩短),结果图将变得不那么(或更)详细。如果没有提供这些指令,默认行为是运行模拟 1000 个时间单位并采集 10,000 个物种种群样本。

    directive sample Float
    directive sample Float Integer
    
  3. Scale 指令:允许随机模拟器从摩尔浓度扩展到个体种群。浓度通过乘以一个因子进行缩放,二元反应的速率根据 Cardelli (2008) 的第 4.2 节进行修改。因此,用户不必担心在连续和离散模拟方法之间切换的细节。默认的缩放因子是 1.0。缩放因子还会修改确定性模拟器的容差参数。

  4. Concentration 指令:允许用户指定浓度的单位。当模拟器以确定性模式运行时,这个单位会显示在模拟图的 y 轴上,并且会出现在“Text”标签的摘要信息中。默认的浓度单位是纳摩尔(nM)。

    directive concentration String
    
  5. Time 指令:允许用户指定时间的单位。这将显示在模拟图的 x 轴上。默认的时间单位是秒(s)。

    directive time String
    
  6. 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> 将匹配 <u s t> 和 <v s t>,但不匹配 <u v s t>。Plot 指令也可以包含带引号的字符串——在这种情况下,是否绘制的决定基于物种名称的精确字符串匹配。这在处理局部受限域时非常有用,因为这些域会被系统自动重命名。还可以使用 sum 关键字加上括号内的物种来绘制物种种群的简单算术函数,例如多个物种种群的总和。对于给定的一对绘图物种 P1 和 P2,还可以绘制 P1 的种群减去 P2 的种群(使用 sub)、差异(使用 diff)或 P1 与 P2 的比率(使用 ‘div’)。

  7. Leak指令 设置泄漏反应的速率(默认值为 \(10^{-9} nM^{-1}s^{-1}\)

    directive leak Float
    
  8. Tau 指令 设置有限语义中的 tau 反应速率(默认值为 \(0.1126 s^{-1}\)

    directive tau Float
    
  9. Migrate 指令 设置跨单个核苷酸的分支迁移速率(默认值为 \(8000 s^{-1}\))。长度为 L 的域的分支迁移速率由 \(r/L^2\) 给出,其中 r 是指令设置的单个核苷酸迁移速率

    directive migrate Float
    
  10. Lengths指令 设置 toeholds 和长域的默认长度值。为了计算速率常数,假设所有长域具有相同的长度,该长度由 lengths 指令设置。代码 directive lengths 5 15 将 toeholds 的长度设置为 5nt,将长域的长度设置为 15nt(默认值为 toeholds 为 6nt,长域为 20nt)。提供的 toeholds 值必须大于特异性域的值,否则系统会报错。目前,分配给 toehold 域的默认长度不用于计算速率。相反,用户可以直接为每个 toehold 设置结合和解离速率。请注意,当前在计算速率常数时不使用特定的核苷酸序列。

    directive lengths Integer Integer
    
  11. Tolerance 指令 指定确定性模拟器的容差参数,这在计算成本和结果平滑度之间提供了权衡。默认值为 \(10^{-6}\)。选择反映系统中种群和反应速率的容差值至关重要,否则确定性模拟器的性能可能会受到影响。请注意,容差乘以比例因子,以尝试保持相对于物种种群的合理值

    directive tolerance Float
    
  12. Toeholds 指令 为声明时未指定显式速率的域的默认绑定和解除绑定速率(按此顺序)。默认值为 \(3.0*10^{-4} nM^{-1}s^{-1}\)(结合速率)和 \(0.1126 s^{-1}\)(解离速率)

    directive toeholds Float Float
    

Declarations声明

声明引入了新的模块定义、全局定义的域和值赋值。

  1. def 声明模块

    def Name ()= Process
    def Name ( Parameters )= Process
    

    模块只是一个参数化的过程。在这里,Parameters 代表一个非空的、用逗号分隔的名称列表,这些名称是该特定模块的参数。语法也允许模块具有空参数列表。我们将在下面描述过程。模块的名称和参数在该模块的主体内绑定,模块的名称在程序的其余部分绑定。

  2. new 声明新域

    new Name @ Value , Value
    new Name
    

    声明在全局范围内有效,即该域的名称在程序的其余部分中都有效。该域可以选择性地附加两个浮点值,分别明确表示该域的结合速率和解离速率。如果省略这些值,则使用 toeholds 指令设置的默认速率(如果程序中没有此类指令,则默认结合速率为 \(3.0*10^{-4} nM^{-1}s^{-1}\),默认解离速率为 \(0.1126 s^{-1}\))。值得注意的是,程序中使用的域并不都需要以这种方式全局声明。如果系统在程序中检测到未声明的域,则假定其具有这些默认的结合和解离速率。这种方式既能保持程序简洁,又能灵活地修改某些域的交互速率。速率值没有单位——程序员需要确保所有速率都以相同的(隐含)单位给出。解离速率在默认语义模型中使用

  3. def 赋值

    def Name = Value
    

    赋值后任何后续对该名称的使用都将引用此值,除非中间出现了同名的绑定(即 defnew 的实例)。如果在名称未先绑定到值的情况下使用该名称(除非该名称用作域,如上所述),系统将报错

Processes 进程(或者叫过程)

Visual DSD 的核心是一个专门用于模拟 DNA 交互的过程演算

先是' 进程们' Processes:

Process
Process | Processes
  1. 指定种群

    Species
    

    一个物种就是一个过程

  2. 初始化种群数目

    此处应为整数

    Value * Process
    

    如果加上了constant就说明种群数目不变

    constant Process
    constant Value * Process
    
  3. 局部域声明

    new Name @ Value , Value Process
    new Name Process
    

    new Name Process 表示在过程 Process 中声明一个名为 Name 的局部域。

  4. 组合过程

    一个过程们也可以组合作为一个过程

    ( Processes )
    
  5. 并行运行

    使用竖线隔开

    Process | Processes
    

Species 物种

在此处的物种表示不同种类的DNA链

Visual DSD的基本单位是DNA序列

对于序列Sequence

Integer
Name
_

序列变量名可以直接用数字表示,例如<1,2,3>是合法的,_作为通配符。

对于域Domain

Sequence
Sequence *

域可以是序列,或者它的互补序列(用*表示)

对于Toeholds

Sequence ^
Sequence ^ *

发卡结构(toehold domain)是一种重要的结构,它是指长度足够短的 DNA 域,能够快速且容易地与其互补链结合和分离.发卡结构在 DNA 分子计算中发挥着重要作用,它们是链置换反应的媒介,允许 DNA 分子之间进行相互作用和交换信息。(发卡结构的翻译来自AI)

对于Domains

Domain
Toehold
Domain Domains
Toehold Domains

Domains 用于构建链和更复杂的 DNA 分子。UpperStrand 代表单个“上”链 DNA 序列,而 LowerStrand 代表单个“下”链 DNA 序列。Double 代表一个“上”链和一个“下”链,它们由于 Watson-Crick 互补性而结合在一起

Double ::= [ Domains ]
UpperStrand ::= < Domains >
LowerStrand ::= { Domains }

在双链中,我们假设括号内的域是上链的域,因此,像 [D1 D2* D3] 这样编写的双链将以以下方式显示,其中,左上角和右下角的小箭头表示 DNA 链的 3’ 端。

double

DNA门

DNA 门是 DNA 置换计算机制的关键部分。门不过是多个 DNA 片段的连接。

以下是DNA门(Gate)、悬臂(Overhangs)的语法

Gate ::= Segment
	   | Segment:Gate
	   | Segment::Gate
Overhangs ::= LowerStrand
			| UpperStrand
			| LowerStrand UpperStrand
			| UpperStrand LowerStrand

对于Segment

Toehold
LowerStrand
UpperStrand
Double
Double Overhangs
Overhangs Double
Overhangs Double Overhangs
  1. 一个位于 DNA 单链上的 toehold 域t^*

    seg1
  2. 一个由多个 DNA 域组成的上链<s>

    seg2
  3. 一个由多个 DNA 域组成的下链{s}

    seg3
  4. 一个由两个互补 DNA 域组成的双链[t1 t2]

    seg4
  5. 一个双链,两端分别带有上链和/或下链的悬垂物{lb}<lt>[s]{rb}<rt>

    seg5

连接语法

  1. : 表示沿着下链连接 Segment

  2. :: 表示沿着上链连接 Segment

例子:<a>[b t^]<c>:[e]<f u* v>::{x}[y*]<z q*>{w}

link

在实际测试时,pdf的例子<a>[b t^]<c>:[e]<f>::<u* v>::{x}[y*]<z q*>{w}无法运行,这是最相似的,但是不知道怎么把a折上去

另外,程序中不能同时出现长域和它的互补序列。也就是说,不能在程序中同时出现 d 和 d*

而且在Visual DSD 编程语言的新版本中,DNA 链和 DNA 门在旋转对称性方面被视为等价的。也就是说,无论 DNA 链和 DNA 门如何旋转,只要它们的结构相同,就被视为相同的实体,在实际的 DNA 分子中,双链的上下链是不同的。为了区分它们,Visual DSD 在语法中规定,双链中出现的域代表上链的域。

Species

Species是过程中出现的各种分子

Name()
Name( Values )
Gate
UpperStrand
LowerStrand

Gate和Strand都被归类为Species,模块定义的实例也是如此。模块实例可以包括参数列表,参数的数量和类型取决于模块的定义。如果提供的参数数量或类型不正确,工具将报错。

Value 值

基类型有String、Integer、Char、Float和Name,关键字true和false表示通常的布尔常量。加法、减法、乘法和除法都有标准的算术运算符,算术运算的两个参数必须属于同一类型——整数或浮点值。float_of_int和int_of_float函数提供了这两种类型之间显式转换

String
Integer
Char
Float
Name
true
false
Value + Value
Value – Value
Value * Value
Value / Value
float_of_int Value
int_of_float Value
( Value )

Values

Values 是由多个 Value 元素组成的列表,这些元素之间用逗号分隔,且列表不能为空

Value
Value , Values
posted @ 2024-11-14 18:38  qbning  阅读(9)  评论(0编辑  收藏  举报
描述