genpoly_lt.py
genpoly_lt.py 是一个用于准备包含聚合物的模拟的程序。它适用于将聚合物缠绕在任意曲线上。(这里提供了一个使用示例。)genpoly_lt.py 会生成一个moltemplate文件(.LT文件),其中包含定义聚合物分子的内容,该聚合物分子中的单体位于一个3列文本文件(在下面的例子中为“coords.raw”)中指定的位置。单体将被旋转,使其指向聚合物轴的方向(见“-dir-indices”),并且可以添加可选的螺旋扭曲(见“-helix”)。用户可以指定一个或多个键,将每个单体连接到下一个单体(见“-bond”)。同样地,不同单体中原子之间的三体和四体角度相互作用可以自动生成(使用标准moltemplate的“按类型生成角度”规则),也可以手动生成(使用“-angle”“-dihedral”“-improper”参数)。
Usage:
genpoly_lt.py [-polymer-name pname] [-monomer-name mname] [-sequence sequence.txt] [-bond a1 a2] [-bond btype a1 a2] [-angle atype a1 a2 a3 i1 i2 i3] [-dihedral dtype a1 a2 a3 a4 i1 i2 i3 i4] [-improper itype a1 a2 a3 a4 i1 i2 i3 i4] [-inherits ForceFieldObject] [-header "import monomer.lt"] [-helix deltaphi] [-helix-angles helix_angles_file.txt] [-orientations orientations_file.txt] [-quaternions quaternions_file.txt] [-axis x,y,z] [-circular yes/no/connected] [-cuts cuts.txt] [-polymer-directions polarities.txt] [-dir-indices ia ib] [-padding paddingX,paddingY,paddingZ] [-in coords.raw] < coords.raw > polymer.lt
Arguments [optional]
-polymer-name name
将被创建的moltemplate对象的名称。(默认为“Polymer”)
-monomer-name name
将沿着聚合物长度复制的moltemplate对象的名称。(默认为“Monomer”)。这个单体应该在其他地方定义,并且定向使得聚合物轴位于+x方向。你可以使用“-header”参数来指定单体定义的位置。注意:如果你正在定义杂聚物或带有端帽的聚合物,那么不要使用“-monomer”参数。改用“-sequence”参数。
你可以在单体亚基被移动到位之前,对其应用旋转或变换。例如,通常很有用的是使用单体的一个修改版本,其初始坐标被压缩以避免与其他单体发生碰撞。为此,使用类似“Monomer.scale(0.5,0.7,0.7)”而不是“Monomer”。这会将每个单体在长度方向上压缩0.5倍,在横向方向上压缩0.7倍。(在能量最小化之后,每个单体应该会恢复到其正常的大小和形状。)
-sequence sequence.txt
如果你正在构建一种杂聚物,这个参数可以让你指定聚合物中单体的序列。你也可以使用这个参数在聚合物的两端添加端帽(即自定义单体类型),并使它们朝向正向和反向。请参见下面的例子。“sequence.txt”文件包含了你想要在聚合物中的单体序列。这个文件的每一行应该是你想要在该位置的单体亚基的moltemplate对象的名称。这个文件中的行数应该与所有聚合物长度的总和相匹配(这等于坐标文件中的行数)。列出的每种单体类型都必须是一个moltemplate对象,其中的原子的$atom(原子ID)变量与-bond、-angle、-dihedral和-improper参数(如果适用)中提到的a1、a2原子相匹配。(在下面的丁烷例子中,它将是主链上的碳原子。)和以前一样,你可以在每个单体的名称中包含坐标变换。下面是一个丁烷的“sequences.txt”文件的例子:
CH3CH2CH2CH3.rot(180,0,0,1)
“CH2”和“CH3”moltemplate对象想必是在其他地方定义的,并且定向使得聚合物轴沿着+x方向。“.rot(180,0,0,1)”确保最终的CH3单体朝向-x方向(即相反方向)。(会添加额外的移动和旋转命令,以使每个单体与曲线的方向对齐。)如果你使用“-cuts”参数来创建多个聚合物,那么这个文件将类似于上面的文件,只是将多个这样的聚合物的序列连接在一起。它会在使用“-cuts”参数指定的整数之前和之后的位置,包含额外的“CH3”和“CH3.rot(180,0,0,1)”端帽单体。
-bond btype a1 a2
在连续的单体之间添加类型为btype的键,连接名为a1和a2的原子(所有三个参数都是字符串,并且省略了moltemplate变量中的@bond:和$atom:前缀)(注意:键的类型btype可以省略。见下文。)可以通过在参数列表中多次出现“-bond btype a1 a2”来在连续的单体之间添加多个键。例如,双链DNA可以被实现为一个聚合物,其中2个键连接不同的单体(如果每个“单体”对应一个碱基对)。如果你想在非连续的单体之间的原子之间添加键,那么你可以使用genpoly_modify_lt.py程序在稍后对聚合物进行修改。(该程序支持“-bond btype a1 a2 i1 i2”参数,允许你指定单体索引i1、i2。)
-bond a1 a2
在连续的单体之间,连接名为a1和a2的原子之间添加一个键。在这里,我们省略了键的类型。如果你使用的是一个力场(比如OPLSAA),它会根据力场中定义的规则来查找键的类型,那么省略键的类型是可以的。
-angle atype a1 a2 a3 i1 i2 i3
在单体i1、i2和i3中的原子a1、a2和a3之间添加一个三体角度相互作用。(参数atype、a1、a2和a3是包含moltemplate变量名称的字符串。应省略标准的moltemplate前缀“angle:”、“@angle:”和“atom:”。参数i1、i2和i3是整数索引,表示每个原子所属的单体。)
-dihedral dtype a1 a2 a3 a4 i1 i2 i3 i4
在单体i1、i2和i3中的原子a1、a2、a3和a4之间添加一个四体二面角相互作用。(参数dtype、a1、a2、a3和a4是包含moltemplate变量名称的字符串。应省略moltemplate前缀“dihedral:”、“@dihedral:”和“atom:”。参数i1、i2、i3和i4是整数索引,表示每个原子所属的单体。(参见上面的解释。)可以通过在参数列表中多次出现“-dihedral dname dtype a1 a2 a3 a4 i1 i2 i3 i4”并使用不同的参数来为每个单体添加多个二面角。(注意:如果你使用的是像OPLSAA这样的力场,它会自动生成二面角相互作用,那么通常不需要“-dihedral”参数。)
-improper itype a1 a2 a3 a4 i1 i2 i3 i4
在单体i1、i2和i3中的原子a1、a2、a3和a4之间添加一个四体非键相互作用。(参数itype、a1、a2、a3和a4是包含moltemplate变量名称的字符串。应省略moltemplate前缀“improper:”、“@improper:”和“atom:”。参数i1、i2、i3和i4是整数索引,表示每个原子所属的单体。(参见上面的解释。)可以通过在参数列表中多次出现“-improper iname itype a1 a2 a3 a4 i1 i2 i3 i4”并使用不同的参数来为每个单体添加多个非键。(注意:如果你使用的是像OPLSAA这样的力场,它会自动生成非键相互作用,或者如果你的聚合物不包含主链非键,那么通常不需要“-improper”参数。)
-inherits FORCE_FIELD
这允许你在定义聚合物对象时添加“inherits FORCE_FIELD”。(它只是在聚合物名称之后添加了文本“inherits FORCE_FIELD”。)在此示例中,“FORCE_FIELD”是定义了你希望自动生成的角度、二面角、非键规则的moltemplate对象的名称。该FORCE_FIELD对象可以在其他地方定义(例如在单独的文件中定义,并通过“-header”参数导入)。
-header ‘some text’
这是一种方便的方法,可以在genpoly_lt.py创建的文件开头插入一行文本。你可以在文件开头放置任何文本,但通常这些是“import”语句。例如:
-header 'import "force_field.lt" # (<--defines FORCE_FIELD)'
或
-header 'import "monomer.lt" # (<--defines Monomer)'
导入的.LT文件通常包含聚合物所需的单体定义或力场参数。(它们必须出现在.LT文件的开头,在定义聚合物之前,否则moltemplate会在后续报错。)如示例所示,你可以通过使用多个-header参数,在开头插入多行文本。
-cuts cut_locations.txt
在聚合物的长度方向上将其切成几段。如果你的目标是创建许多不同长度的聚合物,而不是一个长聚合物,这将非常有用。这将简单地沿着聚合物的长度将其切成N次。“cut_locations.txt”是一个文本文件,包含一个正整数列表(每行一个),指示你希望在聚合物的哪些位置进行切割。对于文件中出现的每个整数i,将在单体i-1和i之间进行切割(索引从0开始,因此值1对应于第一个和第二个单体之间的切割)。将为每个聚合物创建一个单独的分子对象,并在每个名称后添加一个整数后缀,以区分它们(这些聚合物将是通过该程序定义的一个较大对象的一部分。实例化该对象将创建所有单独的聚合物)。
注意:为了在每个聚合物的两端添加端帽(即改变每个聚合物两端的单体类型),你必须使用“-sequence”参数。你必须提供一个文本文件,列出你希望在每个聚合物的开头和结尾处放置的单体,并将它们列在该文件的适当位置。(你还可以选择对每个聚合物两端的单体应用不同的旋转,以使它们朝向正向和反向。)有关详细信息,请参阅“-sequence”参数的描述。
-axis x,y,z direction of the polymer axis in the original monomer object
这三个数字(由逗号分隔,中间没有空格)定义了单体亚基指向的方向。默认情况下,这三个数字是1,0,0(即X轴方向)。
-helix deltaphi
可以选择在之前围绕每个单体的轴旋转一个角度deltaphi(以度为单位)。
-helix-angles helix_angles_file.txt
可以选择通过指定一个包含角度列表的文件(例如“helix_angles_file.txt”)来围绕每个单体的轴进行旋转。这个文件每行包含一个数字(每个单体一行)。每个数字表示该单体相对于前一个单体围绕该轴的角度。
-circular keyword
指定聚合物是否为环状。如果是,则必须使用“-circular yes”或“-circle connected”。“keyword”必须是这些选项之一:
项目 | Value |
---|---|
“no” | 聚合物是一条线性链,其两端未连接。(默认) |
“yes” | 聚合物是一个环状环,其两端相连(并且最后一个单体的方向指向第一个单体)。 |
“connected” | 通过键(以及角度、二面角,如果适用的话)将两端连接在一起,形成一个闭合的环。但不要调整第一个和最后一个单体的方向,使它们指向对方。(如果你打算使用周期性边界条件模拟一个“无限长”的聚合物,并且两端在相对的两侧相连,就使用这个选项。) |
-padding paddingX,paddingY,paddingZ
这将导致程序尝试估算包含坐标文件中所有坐标的最小长方体盒子的大小。用户必须提供3个用逗号分隔的数字(中间没有空格),这些数字表示在±x、±y、±z方向上需要的额外空间。
-polymer-directions polarities.txt
改变从文件中读取坐标的顺序。这针对每个聚合物指定一次。你必须提供一个文件,每行对应一个聚合物。(除非你使用了-cuts参数,否则这个文件将只有一行。)每行必须包含“1”或“-1”。值为“1”表示你希望按坐标文件中出现的顺序读取该聚合物的坐标。(即正常行为。)值为-1将导致在读取后反转该聚合物的坐标。(换句话说,从文件的相应部分以相反的顺序读取坐标。这个功能对大多数用户可能没有用处。)
-dir-indices ia ib
程序试图将每个单体的方向指向聚合物指向的方向。默认情况下,程序会将单体i的方向定位在连接它前后单体(单体i-1和i+1)的线上。用户可以使用-dir-indices命令行参数来覆盖这个设置。ia和ib参数是整数偏移量。要将单体i的方向指向连接到下一个单体(i+1)的方向,使用-dir-indices 0 1。要将单体i的方向指向连接到前一个单体(i-1)的方向,使用-dir-indices -1 0。(注意:如果使用了-polymer-directions参数,并且当前聚合物的方向为-1,那么索引ia、ib将会被翻转。)对于环状聚合物,索引将会适当地进行环绕处理。
-orientations orientations_file.txt
通过提供一个包含9列的文本文件来指定聚合物中每个单体的方向,该文件包含旋转矩阵的列表(R,每个单体一个)。每个3×3矩阵描述了该单体相对于其原始方向的方向(而不是相对于前一个单体的方向)。文件中的每一行包含9个数字,这些数字是矩阵的条目:
R_11, R_12, R_13, R_21, R_22, R_23, R_31, R_32, R_33
这个矩阵应用了以下坐标变换:
/x'\ / R_11 R_12 R_13 \ /x\|y'| = | R_21 R_22 R_23 | |y|\z'/ \ R_31 R_32 R_33 / \z/
(这可以是任何线性变换,而不仅仅是旋转。)注意:这些变换是在以下操作之后应用的:
在“-monomer-name”或“-sequence”参数中指定的单体名称中包含的坐标变换,例如:“EthyleneGlycol.move(0.2,-0.7,0).rot(180,1,0,0)”
围绕由“-helix”或“-helix-angles”和“-axis”参数指定的轴的旋转(如果适用)。(因此,这个参数可以与“-helix”、“-helix-angles”和“-axis”参数一起使用。)
-in coords.raw
“-in”参数允许你指定一个包含坐标的文件的名称,而不是从标准输入读取坐标。(在极少数情况下,例如在调试时,这可能更方便。大多数人可能用不到这个功能。)
Examples:
制作一个简单的聚合物,在每个单体的“atom:c2”和下一个单体的“atom:c1”之间添加“@bond:Backbone”类型的键。
genpoly_lt.py -bond Backbone c2 c1 < crds.raw > poly.lt
制作一个环状扭曲的双链DNA模型,将每个碱基对视为一个单体,并用两条键将每个碱基对单体与下一个碱基对连接起来。这是通过两个“-bond”命令完成的,分别连接“O3p_a”原子与“P_a”原子(在A链中),以及“P_b”原子与“O3p_b”原子(在另一条链B中)。
genpoly_lt.py -circular yes -helix 34.2857 \-header 'import "basepair.lt" #<--defines "BasePair"' \-monomer-name "BasePair" \-polymer-name "Plasmid" \-bond Backbone O3p_a P_a \-bond Backbone P_b O3p_b \< dna_basepair_CM_coords.raw \> chromosome.lt
如果你想控制聚合物的序列,用“-sequence sequence.txt”替换“-monomer-name”参数。