【译】Multisim工作文件

Multisim工作流程在.msj文件中定义,由几个部分组成。每个部分定义了一个阶段,其中至少有一个子任务被执行。.msj文件通常遵守D.E.Shaw Research的Ark格式。这与Desmond配置(.cfg)文件中使用的语法相同。

Ark格式的语法规则可以归纳为以下几点:

  • 用keyword = value的语法将数值分配给一个关键词。
  • 值可以是数字、字符串、列表或块。数字可以是整数或实数。字符串不需要用引号括起来,除非它们包含嵌入式空白或跨越多行。
  • 块是指一对大括号{ }内的一个或多个设置。例如:a = { b = 3 c = 4 }。这个例子中的块包含两个关键词-值的分配。
  • 列表是一个由一对方括号[ ]括起来的序列值。列表中的元素不一定是相同的类型。一个例子是[ 1 { a = 1 } 5 [ 2 3 ] ]。
  • 可以创建涉及块和列表的分层表达式:对列表和块的嵌套没有限制。
  • 层次结构中的单个元素可以通过用句点连接父类的名称来设置,形成一个复合键。例如,a.b.c=3相当于:
    a = {
      b = {
        c = 3
      }
    }
  • 如果一个关键词被分配了两次值,则以第二次为优先。如果值是一个区块,则区块被合并,每个区块中的关键词都被分配到后一个区块的值。

  • 如果值是一个块的值,=符号可以省略。这意味着a = { b = 1 }和a { b = 1 }是等同的。这种语法被用来指定multisim阶段。

Multisim在以下方面偏离了Ark标准:

  • 同名的Multisim阶段仍然是独立的,否则在一个.msj文件中出现多次的阶段(如simulate)将被合并为一个阶段。

一个阶段以标识阶段类型的标签开始,然后是包围该阶段参数的大括号。一般来说,一个.msj文件看起来像这样:

复制代码
#an outline for a msj file.
first_stage_name {
   parameter1 = 3000.0
   parameter2 =  "this is a string"
   parameter3 = [ "list element 1" 2 "list element 3" ]
}
second_stage_name{
   parameter5 = 20
}
复制代码

支持Desmond的阶段类型包括如下:

  • task-描述工作的类型
  • simulat-在系统上运行MD模拟
  • build_geometry-向系统添加溶剂
  • assign_forcefield-分配力场参数
  • replica_exchange-在系统上运行一个复制交换的MD模拟
  • lambda_hopping--在系统上运行lambda跳跃仿真。
  • analysis--分析MD模拟的轨迹
  • pl_analysis-分析模拟轨迹中的蛋白质-配体相互作用
  • fep_analysis-分析FEP模拟。
  • extern-自定义Python阶段
  • trim-删除不需要的阶段数据文件
  • desmond_extend-延长先前的模拟阶段
  • stop-在这个阶段停止工作流程

这些阶段所支持的关键词和它们的默认值在后面的章节中描述。

1.一个multisim作业文件样本

Maestro中的分子动力学面板可以用来编写.msj文件以及multisim作业的其他输入文件。下面提供了一个分子动力学模拟的.msj文件样本。以#开头的行是注释,会被忽略。

复制代码
# Desmond standard NPT relaxation protocol
# All times are in the unit of ps.
# Energy is in the unit of kcal/mol.
task {
  task = "desmond:auto"
  set_family = {
    desmond = {
    checkpt.write_last_step = no
  }
}

simulate {
  title       = "Brownian Dynamics NVT, T = 10 K, small timesteps, and restraints on solute heavy atoms, 100ps""
  annealing   = off
  time        = 100
  timestep    = [0.001 0.001 0.003]
  temperature = 10.0
  ensemble = {
    class  = "NVT"
    method = "Brownie"
    brownie = {
      delta_max = 0.1
    }
  }
  restrain = {
    atom = "solute_heavy_atom"
    force_constant = 50.0
  }
}

simulate {
  effect_if   = [["==" "-gpu" "@*.*.jlaunch_opt[-1]"] 'ensemble.method = Langevin']
  title       = "NVT, T = 10 K, small timesteps, and restraints on solute heavy atoms, 12ps"
  annealing   = off
  time        = 12
  timestep    = [0.001 0.001 0.003]
  temperature = 10.0
  restrain    = { atom = solute_heavy_atom force_constant = 50.0 }
  ensemble    = {
    class  = NVT
    method = Berendsen
    thermostat.tau = 0.1
  }
  randomize_velocity.interval = 1.0
  eneseq.interval             = 0.3
  trajectory.center           = []
}

simulate {
  title       = "NPT, T = 10 K, and restraints on solute heavy atoms, 12ps"
  effect_if   = [["==" "-gpu" "@*.*.jlaunch_opt[-1]"] 'ensemble.method = Langevin']
  annealing   = off
  time        = 12
  temperature = 10.0
  restrain    = retain
  ensemble    = {
    class  = NPT
    method = Berendsen
    thermostat.tau = 0.1
    barostat.tau   = 50.0
  }
  randomize_velocity.interval = 1.0
  eneseq.interval             = 0.3
  trajectory.center           = []
}

simulate {
  title       = "NPT and restraints on solute heavy atoms, 12ps"
  effect_if   = [["@*.*.annealing"] 'annealing = off temperature = "@*.*.temperature[0][0]"'
                 ["==" "-gpu" "@*.*.jlaunch_opt[-1]"] 'ensemble.method = Langevin']
  time        = 12
  restrain    = retain
  ensemble    = {
    class  = NPT
    method = Berendsen
    thermostat.tau = 0.1
    barostat.tau   = 50.0
  }
  randomize_velocity.interval = 1.0
  eneseq.interval             = 0.3
  trajectory.center           = []
}

simulate {
  title       = "NPT and no restraints, 24ps"
  effect_if   = [["@*.*.annealing"] 'annealing = off temperature = "@*.*.temperature[0][0]"'
                 ["==" "-gpu" "@*.*.jlaunch_opt[-1]"] 'ensemble.method = Langevin']
  time        = 24
  ensemble    = {
    class  = NPT
    method = Berendsen
    thermostat.tau = 0.1
    barostat.tau = 2.0
  }
  eneseq.interval   = 0.3
  trajectory.center = solute
}

simulate {
  cfg_file = "jobname.cfg"
  jobname = "$MASTERJOBNAME"
  dir      = "."
  compress = ""
}
# Job launching command:
# $SCHRODINGER/utilities/multisim -VIEWNAME desmond_molecular_dynamics_gui.MDApp -JOBNAME jobname -HOST hostname -maxjob 1 -cpu 1 -m jobname.msj -c jobname.cfg -description "Molecular Dynamics" jobname.cms -mode umbrella -set stage[1].set_family.md.jlaunch_opt=[\"-gpu\"] -PROJ /home/user/multisim.prj -DISP append -o jobname-out.cms
复制代码

这个multisim工作流程由八个阶段组成。第一阶段是任务阶段,它指定要运行的工作类型,并为后续阶段设置一些常用的选项。

第二阶段在10K下执行100ps的布朗动力学,以消除类似于能量最小化的立体冲突。所有的溶质重原子都受到50.0 kcal mol-1Å-1力常数的限制。第三阶段是在10K的条件下用NVT集合进行12ps的分子动力学研究,由Langevin恒温器控制温度。再次对溶质的重原子进行了同样的约束。第四阶段是相同的,只是模拟是在NPT集合中在1大气压下进行的,由朗文恒温器控制。第五阶段被跳过,如关键字should_skip = true所示。第六阶段是在目标温度(默认为300K)下进行的12ps NPT模拟,其他设置与第四阶段相同。第七阶段是24 ps的NPT分子动力学模拟,没有约束条件。

第一至第七阶段的输出被压缩成档案,名称为jobname-X_out.tgz,其中X是阶段编号(1至7)。

这个multisim工作流程的第八个也是最后一个阶段是生产阶段。时间、温度、压力等参数在Desmond .cfg文件jobname.cfg中指定。作业名称与主作业名称相同,因此输出文件遵循jobname.log、jobname.ee等模式。选项dir=". "指定该阶段的结果不存储在单独的目录中,与其他阶段不同。选项compress=""禁止对输出文件进行压缩。这样可以在作业完成后更好地检查结果,例如,轨迹。

在.msj文件的末尾,包括一个命令,可以用来从命令行启动multisim作业。有几个选项,如-VIEWNAME、-PROJ和-DISP,只与从Maestro提交的作业有关。

2.一般的multisim关键词

表1中列出了可以在multisim工作的任何阶段使用的关键词。

表1.可在任何阶段使用的一般关键词

  • compress 阶段数据文件的文件名模式。如果它被设置为一个空字符串,那么这个阶段的数据就不会被打包和压缩。默认值:$JOBNAME_$STAGENO-out.tgz。
  • dir 本阶段的子工作所使用的目录名称模式。默认:[$JOBPREFIX/][$PREFIX/]$MASTERJOBNAME_$STAGENO[_lambda$LAMBDA]
  • effect_if effect_if可以接受一个列表值或一个字符串值:无。如果它是一个列表值,它必须正好包含两个成员。第一个成员以列表值的形式指定一个条件(逻辑表达式)。第二个成员应该是一个块值。Multisim会评估第一个成员。如果结果为真,包含在块中的设置将生效。下面是一个简单的例子:
    some_stage {
        effect_if = [[true] {a = 1}]
        a = 2
    }

    在这个例子中,条件是恒定的真,设置a = 1将永远生效,并覆盖了外部块中的a = 2。

  • jlaunch_opt 在运行Desmond的命令中添加的选项。
  • jobname 本阶段的子工作的工作名称模式。默认:$MASTERJOBNAME_$STAGENO[_lambda$LAMBDA]
  • prefix PREFIX 宏的值,默认用于指定子工作的子目录名称(参见 dir 关键字)。默认是一个空字符串。
  • should_skip 跳过这个阶段。允许的值:true, false。默认值:false。
  • should_sync 在前一个阶段的所有子工作成功完成之前,不要启动这个阶段。允许的值:true, false。如果它被设置为false,一旦前一阶段的任何子工作成功完成,这个阶段就开始。对于FEP作业,将这个关键字设置为false会导致作业的提前完成。默认值:true。
  • struct_output 最终输出结构文件的文件名。这个关键词只有在最后阶段设置时才有效,而且该设置可以被multisim的-o选项所覆盖。
  • title 阶段的标题。默认值:?,代表无。
  • transfer_asap 当一个子工作完成后,立即转移它的输出文件。这对有多个子任务的阶段很有用。允许的值:true, false。默认值:false。

3.Desmond特定的通用multisim关键词

直接运行Desmond的阶段(replica_exchange,lambda_hopping,和simulate)除了接受Desmond任务特有的关键字外,还接受一套通用的关键字。前端配置文件中支持的关键词(见Desmond配置文件)可以直接用于相应的阶段。

4.限制multisim关键字

限制关键字指定了要被限制的原子组和限制的参数。除了build_geometry或assign_forcefield阶段,在所有阶段设置的约束只适用于当前阶段。在build_geometry或assign_forcefield阶段设置的约束是 "永久的"--它们会被所有后续阶段继承。永久约束可以在某个特定阶段被覆盖,但只能增加约束力常数。它们仍将被应用于后续阶段。

限制关键字支持表1中列出的具体数值,同时也支持块状语法和列表语法。

表1.限制关键字的具体允许值

  • none 删除临时约束(在前一个模拟阶段设置的约束),但不改变在build_geometry或assign_forcefield阶段或multisim作业的原始.cms文件中设置的永久约束。在build_geometry或assign_forcefield阶段使用这个值会删除所有约束。这是默认的。
  • retain 保持上一阶段设定的束缚。

可以使用块来指定约束,ASL表达式或原子列表可以用来定义约束块内被约束的原子。其语法为:

restrain = {atom = atoms fc|force_constant = value ref|reference_position = retain|reset|refvalue sigma = sigmavalue}

其中原子可以是表2中列出的任何一个关键词,也可以是一个原子列表,或者是以asl为前缀的ASL表达式。

比如说:

restrain = {atom = asl:all force_constant = 10} 

以10 kcal mol-1 Å-2的力常数约束所有原子。下面的两个表达式说明了原子列表的两种形式,它们是等价的。

restrain = {atom = [1 2 5 7-19] force_constant = 10} 
restrain = {atom = "asl:atom.num 1,2,5,7-19" force_constant = 10}

表2.原子关键词的具体允许值

  • heavy_atom 限制所有重的(非氢)原子
  • solute 限制所有的溶质原子
  • solute_heavy_atom 限制溶质中的所有重原子
  • solvent 限制所有的溶剂原子
  • solvent_heavy_atom 限制溶剂中的所有重原子

通过将 reference_position 设置为 reset,可以对当前阶段开始时的原子位置进行约束;通过将 reference_position 设置为 retain,可以对上一阶段的原子位置进行约束。默认情况下,reference_position=reset。

通过使用语法在列表中列出每组原子的约束块,可以用不同的力常数对系统中不同的原子组进行约束。

restrain = [{atom = "asl:ASL1" force_constant = value1} 
            {atom = "asl:ASL2" force_constant = value2} ... ]

如果ASL表达式包含引号,则必须转义,要么使用反斜杠,要么在ASL表达式中使用双引号,用单引号包围整个表达式。你可以通过分配力的常数在一个位置约束上包括各向异性的约束,具体方法如下。

force_constant = [x-value y-value z-value] 

除了位置约束外,您还可以在距离(包括 NOE 约束)、角度和二面体上设置相对约束。相对约束可以通过适当地设置原子和 refvalue 来实现。对于距离约束,原子应准确指定2个原子;对于角度约束,原子应准确指定3个原子;而对于二面体约束,原子应准确指定4个原子。相对约束中的所有原子必须处于相同的CT中。参考值refvalue是所需的距离、角度或二面体值,单位是埃或度。平底约束可以通过将sigmavalue设置为距离或角度公差(视情况而定)来包含。在refvalue±sigmavalue的范围内,约束势被设置为零。

NOE约束的语法略有不同:原子应精确指定2个原子,而refvalue应是一个包含两个元素的列表,即上距离和下距离,它们代表约束势为零的平底区域的范围。NOE约束的长程势是V = k * (a + beta * (d - upper) + / (d - upper)),其中d是原子之间的距离,当d > upper + sigma时使用这种形式。该势的参数由sigmavalue设定,它是一个包含两个值的列表,sigma(长程势的截止值)和beta(线性项的系数)。其他常数(a和c)是由连续性要求决定的。

下面给出了约束的例子,显示了平底约束和谐波约束。

姿势限制:

restrain = [{atom = [1] force_constant = 15.0 sigma = 0.2} 
            {atom = [2] fc = [5.0 7.5 10.0] ref=[0.0 1.23 0.05 ]}]

距离限制。

restrain = [{atom = [1 2] force_constant = 15.0 sigma = 0.2} 
            {atom = [2 6] fc = 5.0 ref = 1.55}]

角度限制。

restrain = [{atom = [1 2 3] force_constant = 1.0 sigma = 5.0} 
            {atom = [2 6 7] fc = 5.0 ref = 1.55}]

二角形的约束。

restrain = [{atom = [1 2 7 9] force_constant = 1.5 sigma = 10.0} 
            {atom = [2 3 5 6] fc = 5.0 ref = retain}]

NOE的约束。

restrain = { atom = [1 2] ref = [1.0 1.5] sigma = [2.0 3.2] }

另一类约束是α-螺旋形约束,它将一串残基约束为螺旋形构象。其语法为:

restrain = { generator = "alpha_helix" atom = "asl:expression" fc = list ref = list }

力常数(fc)和参考值(ref)的列表有三个成员:第一个指定氢键的值,第二个指定phi角的值,第三个指定psi角的值。默认的力常数是氢键为0.25千卡埃-2,phi和psi为1.5千卡拉德-2。参考值是氢键长度和phi角和psi角。

例如,要设置默认力常数的参考值,你可以使用

restrain = { generator = "alpha_helix" atom = "asl:expression" ref = [2.5 -60 -50] }

5.atom_group multisim 关键字

atom_group关键字可用于在.cms文件中定义原子组。原子组可以被限制或与特定恒温器相关联。原子组由原子级属性i_ffio_grp_name定义。这个关键字可以设置为以下值。

  • non-删除所有原子组。
  • retain-保留前一阶段的所有原子组。
  • { atom = atoms index = i name = name }-原子组块。将指定的原子放入具有名称name的原子组i中。atom关键字接受的原子值与上述restrain的atom关键字相同。索引i是i_ffio_grp_name属性的值。Desmond只支持0到7的索引号。
  • [group1 group2 ... ]-指定多个原子组。每个组可以作为一个块来指定,格式如上。

在system_builder阶段设置的原子组是持久性的,这意味着它在所有后续阶段都保持定义,直到下一个system_builder阶段。

6.multisim文件中的任务阶段

.msj文件应以任务阶段开始,以指定作业的类型。尽管Multisim可以根据提供的输入结构文件来确定作业的类型,但如果该文件以前被不同类型的作业所使用,这可能导致不可预测的行为。明确说明作业类型可以避免这个问题,并且允许Multisim确保所提供的输入结构文件适合于所要求的计算类型。

任务阶段有两个关键字。第一个是任务,其值列于表1。

表1.任务关键词的值

desmond:regular 非FEP Desmond工作

desmond:fep 德斯蒙德绝对或相对自由能(FEP)工作

desmond:auto 德斯蒙德工作的类型由输入结构文件决定

第二个是set_family,可以用来为一个系列的阶段设置参数,例如

task {
   task = "desmond:regular"
   set_family = {
      desmond = {
         checkpt.write_last_step = no
      }
   }
}

这里的阶段家族是desmond。这个家族包括simulate、replica_exchange和lambda_hopping阶段。desmond = {...}块中的设置对所有属于desmond家族的后续阶段都有效。如果set_family块中的设置与某个阶段的显式设置有冲突,则后者优先。比如说:

复制代码
task {
   task = "desmond:regular"
   set_family = {
      desmond = {
         checkpt.write_last_step = no
      }
   }
}
simulate {
   checkpt.write_last_step = yes
}
复制代码

checkpt.write_last_step参数的值被设置为yes,优先于set_family块中的设置checkpt.write_last_step = no,因为阶段中的明确设置具有更高的优先权。

有效的阶段家族名称包括desmond和所有阶段名称。如果使用了一个阶段名称,则该族由该名称的所有阶段组成。比如说:

task {
   task = "desmond:regular"
   set_family = {
      simulate = {
         checkpt.write_last_step = no
      }
   }
}

这里所有后续的模拟阶段都会受到影响,但replica_exchange和lambda_hopping阶段则不会。

由于除了阶段和阶段族之外,还有几种进行设置的方式,下面的列表显示了设置的应用顺序:后面的设置覆盖前面的。

  1. 硬编码的默认值
  2. 任务 { set_family[.family] = settings },在当前任务阶段之后影响指定的家庭。这里,family可以是通用的(所有阶段),desmond,或者任何阶段名称。使用一个阶段的名称会改变该阶段所有后续实例的设置。
  3.  -c config_file, 为desmond家族指定一个默认的配置文件。
  4. desmond-stage { cfg_file = cfg_file_name }。
  5. 阶段设置。
  6. stage { backend = settings } 如果阶段支持后台设置。
  7. 在命令行中用-set进行的设置。

7.multisim文件中的build_geometry阶段系统

生成器面板使用这个阶段来建立一个Desmond模型系统,如添加溶剂、离子或膜双层。build_geometry阶段之后通常会有assign_forcefield阶段,以完成Desmond模型系统的准备。表1给出了这个阶段的具体关键词。

表1.build_geometry阶段的关键词

  • add_counterion 向系统中添加反离子。通过add_counterion.type,你可以选择反离子的类型。add_counterion.number选项控制添加多少个反离子。允许的值可以是一个数字,也可以是neutralize_system的值,neutralize_system可以根据需要添加多少个反离子来中和系统的整体电荷。
  • box 指定box.shape来选择适当的模拟箱形状。允许的值是立方体、正方体或三斜体。将box.size设置为模拟箱的适当尺寸,例如box.size = [10.0 10.0 10.0]。如果box.size_type = absolute,该尺寸指的是模拟盒的绝对尺寸。如果box.size_type = buffer,尺寸指的是盒子边缘和溶质之间的最小距离。对于膜蛋白系统,只允许box.shape = orthorhombic和box.size_type = buffer。
  • ion_awaydistance 添加的离子与ion_awayfrom指定的原子之间的最小距离。有效值为非负的实数。默认值:10.0。
  • ion_awayfrom 不在指定原子附近放置离子。有效值是一个原子索引的列表。默认值:[]。
  • membrane_box 在系统中添加一个膜盒。用membrane_box.lipid指定脂质的类型。允许的值是DOPC、DPPC、POPC或POPE。用membrane_box.size来指定膜盒的大小,它应该是一个包含三个值的列表。
  • override_forcefield 确定该系统的力场。这不是指定力场,而是用来放置溶质、离子和膜在溶质周围。有效值是S-OPLS和OPLS_2005。
  • rebuild_cms 从一个完整的系统CT中提取组件的CT。所有其他设置都被忽略了。有效值是true、false或类似的块。
    { membrane = ASL-expression | ""
     solvent = ASL-expression | "" }
    如果该值不是假的,则组件CT将从全系统CT中提取。块值允许您可以指定哪些原子属于膜组分CT,哪些属于溶剂组分CT。默认值:false。
  • rezero_system 将坐标的原点重置为溶质的质量中心。允许的值是true, false。默认值:true。
  • salt 在模拟箱中添加额外的盐。正离子的类型可以用salt.positive_ions来指定。允许的值是Li, Na, K, Mg2, Ca2, Zn2, Fe2, Fe3。负离子可以用salt.negative_ions来指定。允许的值是F、Cl、Br、I。盐的浓度可以用盐的浓度来指定。
  • solvent 溶剂类型。允许的值是水,SPC,TIP3P,TIP4P,TIP4PEW,TIP4PD,TIP5P,METHANOL,OCTANOL,DMSO。值是区分大小写的。WATER是SPC的同义词。默认值。SPC。

8.multisim文件中的assign_forcefield阶段

这个阶段可以用来将力场分配给一个模型系统。你可以保留或替换现有的赋值。关键字在表1中给出。

表1.assign_forcefield阶段的关键词

forcefield 指定要使用的力场。有效值是。OPLS_2005和S-OPLS。默认值。OPLS_2005。

hydrogen_mass_repartition 将重原子的质量重新分配给结合的氢原子,以减慢高频运动。有效值是true, false。默认值:false。

water 指定要使用的水模型。有效值是。SPC, SPCE, TIP3P, TIP3P_CHARMM, TIP4P, TIP4PD, TIP4PEW, TIP4P2005, TIP5P, none.值是区分大小写的。默认值。SPC

 

9.multisim文件中的simulate, replica_exchange和lambda_hopping阶段

表1中列出了simulate、replica_exchange和lambda_hopping阶段的特定关键字。此外,Replica_exchange阶段还可以使用Replica_exchange阶段的参数中所描述的关键字。关键字restrain(restrain multisim关键字)和atom_group(atom_group multisim关键字)也可以在这个阶段使用。当它们被使用时,这些设置是临时的:它们只适用于当前阶段。

表1.模拟、副本交换和lambda_hopping阶段的关键词

  • cfg_file 为这个阶段选择一个Desmond前端配置(.cfg)文件

元动力学模拟可以通过在模拟阶段包含一个元块来运行。有关该块的语法,请参见元动力学模拟的参数(Parameters for Metadynamics Simulations)。然而,在multisim文件中,您必须使用ASL表达式来表示一组原子的质量中心,而不是一个列表。下面给出了一个元动力学模拟阶段的例子。

复制代码
simulate {
  cfg_file = "config.cfg"
  jobname = "$MASTERJOBNAME"
  dir = "."
  compress = ""
  meta = {
    cv = [
      {atom = ["mol.n 2 and not a.e H"]
       type = "rgyr"
       width = 0.15
      }
      {atom = ["(res.num 124 and protein) and not a.e H" "mol.num 2 and not a.e H"]
       type = "dist"
       width = 0.05
      }
    ]
    cv_name = "$JOBNAME$[_replica$REPLICA$].cvseq"
    first = 0.0
    height = 0.03
    interval = 0.03
    name = "$JOBNAME$[_replica$REPLICA$].kerseq"
  }
  checkpt.write_last_step = yes
}
复制代码

10.multisim文件中的串联阶段

几个模拟阶段可以在一个单一的连接阶段中连接起来。这样就可以把多个模拟阶段作为一个单一的过程来启动。这对于加速由许多短的模拟阶段组成的工作流程是非常有用的。一个串联阶段产生一组输出文件。

连接阶段的语法如下。

concatenate {
  simulate = [
    { keywords }
    { keywords }
  ]
}  

所有可以在模拟阶段使用的关键词也可以在连接阶段使用。用restrain关键字定义的约束必须在第一个模拟块中定义,并且只能在约束的力的常数上有所不同。例如,不可能以restrain = none开始连接阶段,并在接下来的模拟块中应用约束。在连接阶段也不可能改变约束的类型。不支持在连接阶段使用GCMC协议。

11.multisim文件中的desmond_extend阶段

desmond_extend阶段可以用来延长前一个模拟阶段的模拟时间。这将从上一个模拟阶段获得的最后一个Desmond检查点文件重新开始模拟。通过关键字added_time,你可以指定额外的模拟时间,单位是皮秒。默认情况下,在desmond_extend阶段创建的输出文件将被归档、压缩,并复制到提交multisim工作流的目录中。

12.multisim文件中的extern阶段

extern阶段提供了一种非常灵活的方式,可以在multisim运行中包含你自己的Python代码。这些代码可以作为分配给命令关键字的字符串值嵌入到.msj文件中。比如说

extern {
        command = "
import os;
def main( current_stage, job ):
    os.system( ’ls’ )
"
}

在嵌入式Python代码中,你可以从你安装的Schrödinger Python中导入和使用模块。如果你需要额外的模块,你可以通过设置auxiliary_file参数将它们的文件名传递给multisim,multisim会在运行时将它们转移到主作业的scratch目录中。比如说

复制代码
extern {
        auxiliary_file = [mod1.py mod2.py]
        command = "
import os
import mod1
import mod2
def main( current_stage, job ):
    // does something with mod1 and mod2
    os.system( ’ls’ )
"
}
复制代码

上面给出的代码对上一阶段的每个子任务都运行一次。如果你想只运行一次,用command_once代替command。比如说。

复制代码
extern {
        auxiliary_file = [mod1.py mod2.py]
        command_once = "
import os
import mod1
import mod2
def main( current_stage ):
    // does something with mod1 and mod2
    os.system( ’ls’ )
"
}
复制代码

对于特定阶段的脚本,你的代码必须提供一个主函数,该函数对command有两个参数,对command_once有一个参数。这两种情况下的第一个参数都对应于当前阶段的信息,而command的第二个参数则对应于上一阶段的信息。

对于非常简单的脚本,你的 command 或 command_once 的代码不需要提供一个主函数。下面的例子是删除一个存在的临时文件。

extern {
   command = "
import os
# Removes a temporary file.
if (os.path.isfile( ’my_temporary_file’ )) :
    os.remove( ’my_temporary_file’ )
"
}

如果没有main函数,multisim无法将当前阶段和当前作业对象传递给Python代码,但据推测,对于简单的操作来说,这并不需要。

外部阶段是一个高级功能。请不要犹豫,与我们联系以获得有关其使用的更多信息。这个阶段的关键词列在表1中。

表1.外部阶段的关键词

  • auxiliary_file 含有额外模块的文件列表,将被转移到运行时目录。
  • command 命令对上一阶段的每个子任务执行一次。该命令指定Python代码,可以跨越多行。
  • command_once 对上一阶段执行一次的命令。该命令指定Python代码,可以跨越多行。

13.multisim文件中的分析阶段

表1中列出了分析阶段的关键词

表1.分析阶段的关键词

  • meta.range 对于元动力学模拟,指定每个集体变量的范围,格式为[[min1 max1] [min2 max2] ...].
  • meta.nbin 对于元动力学模拟,指定分析中每个集体变量的分层数量。
  • plotter 指定用于绘制数字图像的绘图器。允许的值: mplchart, gchart. mplchart为每个图生成静态.png文件。gchart为每个图生成一个URL,URL被保存在报告文件中。当你在浏览器中打开报告文件时,数字图像是使用谷歌图表API生成的。数字的数据被发送到谷歌网站以创建图像。默认:mplchart。
  • prob_profile 指定如何计算由time_series参数给出的时间序列的概率轮廓。例如:prob_profile = [2 0 360 true],这意味着bin大小为2,数据范围为[0, 360],范围为周期性(true)。
  • report 指定报告文件的名称。默认:$JOBNAME_report.html。
  • SEA 用于指定模拟事件分析的配置的块。这个块可以是一个.st2文件的内容,可以从模拟事件分析面板中写入。
  • time_series 指定要分析时间序列的变量。例如:time_series = [[dihedral 1 2 3 4] [dihedral 5 6 7 8]],指定要分析的两个二面角。

14.multisim文件中的pl_analysis阶段

这个阶段对蛋白质和配体的相互作用进行分析。有一个关键词,ligand_asl,它指定了配体的ASL表达式。相互作用可以在模拟相互作用图面板中进行图形化探索--见模拟相互作用图面板

15.multisim文件中的fep_analysis阶段

表1中列出了fep_analysis阶段的关键词。

表1.用于fep_analysis阶段的关键词

  • bennett.random_seed
  • Bennett方法的随机种子。默认:2111839。
  • correct_vdw 计算绝对自由能作业的长距离色散校正。这个关键字对相对自由能作业没有影响。默认值:true。
  • correct_restr 计算位置约束的焓值修正。如果生产模拟没有约束条件,这个参数不会有任何影响。默认值:true。
  • plotter 指定用于绘制数字图像的绘图器。允许的值:mplchart、gchart。mplchart为每个图生成静态.png文件。选择gchart为每个图生成一个URL,而URL被保存在报告文件中。当你在浏览器中打开报告文件时,数字图像是使用谷歌图表API生成的。数字的数据被发送到谷歌网站以创建图像。默认:mplchart。
  • report 指定报告文件的名称。默认为:$JOBNAME_report.html。

自由能可以作为模拟时间的不同函数被绘制出来。增加了以下设置来控制这些新功能:

复制代码
 bennett = {
       forward_time = {
          name  = "freeenergy_time"
          begin = 100.0
          end   = inf
          dt    = 30.0
       }
       reversed_time = {
          name  = "freeenergy_rtime"
          begin = 100.0
          end   = inf
          dt    = 30.0
       }
       sliding_time = {
          name   = "freeenergy_stime"
          begin  = 100.0
          end    = inf
          dt     = 30.0
          window = 500.0
       }
    }
复制代码

Forward_time、reversed_time和sliding_time设置控制不同时间范围内的自由能计算。

forward_time关键字提供了自由能作为模拟过程的一个函数。换句话说,这个函数的每个自由能值都是用从begin设置给定的时间到时间点的轨迹片段计算的。dt关键字表示自由能的连续估计之间的间隔(在本例中是30ps)。

reversed_time关键字的功能与forward_time关键字类似,只是自由能的计算是从每个时间点到轨迹的终点。

对于sliding_time关键字,片段长度有一个固定的长度,由window关键字指定(本例中为500.0ps)。片段的开始沿着轨迹滑动,其步长由dt关键字给出(本例中为30.0ps)。

16.Multisim文件中的vrun阶段

这个阶段用上一个模拟阶段的Desmond轨迹运行vrun。vrun阶段对于分析轨迹非常有用,例如计算每一帧的系统能量。simulate阶段的所有参数都可以在这些阶段使用,但以下关键词的默认设置不同。

  • Trajectory = false
  • checkpt = off
  • maeff_output = off
  • eneseq.interval = 0.0

将eneseq.interval设置为零意味着对轨迹的每一帧都计算能量。

17.multisim文件中的修剪阶段

修剪阶段的目的是自动删除不需要的阶段数据文件。一个常见的情况是,如果作业成功,大部分放松阶段的文件是不需要的。在作业结束时添加一个正确设置的修剪阶段,在这些文件被传送回启动目录之前自动删除这些文件。下面的例子说明了如何使用修剪阶段。

复制代码
task {
   task = "desmond:auto"
}
minimize {
   # relaxation stage
}
simulate {
   # relaxation stage
}
simulate {
   # production stage
}
trim {
   save = [-1]
}
复制代码

保存关键字是唯一针对修剪的关键字,它指定了输出文件应保留的阶段。它的值是一个整数的列表。这些整数可以是正数或负数。正整数是阶段索引,负整数是相对于修剪阶段而言的,也就是说,它们指的是从修剪阶段向后数的阶段。在这个例子中,-1表示这个修剪阶段之前的第一个阶段,即生产阶段或第四阶段。因此,修剪阶段删除了所有由早期阶段生成的.tgz文件,除了由生产阶段生成的文件。

上述例子的以下设置可以保存第三和第四阶段(修剪阶段之前的两个阶段)产生的.tgz文件。

save = [-1 -2]

以下设置保存了由第二、第三和第四阶段生成的.tgz文件

save = [2 3 -1]

请注意,该任务算作一个阶段。

posted @   matrixray  阅读(301)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!
点击右上角即可分享
微信分享提示