计算化学公社

标题: 钠电池电解液筛选溶剂化结构的VMD使用疑惑及脚本使用 [打印本页]

作者
Author:
Old_Six    时间: 2025-2-21 15:33
标题: 钠电池电解液筛选溶剂化结构的VMD使用疑惑及脚本使用
本帖最后由 Old_Six 于 2025-2-21 16:43 编辑

各位大佬好,我目前的任务是筛选出电解液溶剂化结构当中的AGG,CIP,SSIP的比例。于是将得到的轨迹文件PDB和trj.xyz导入到VMD当中,之后想要使用TCL脚本对其进行分析溶剂化结构,但是遇到几个问题.

问题1:脚本使用后得到的TXT文件没有内容是空白,猜测是其中选择不同分子的作用位点的表达方式不对还是其他问题?如果是表达方式不对如何进行表达,以及脚本如何修改?

问题2:如何在VMD中选中所有的钠离子,所有的P in PF6-, 以及溶剂中的羰基氧?

我将使用到的PDB文件放在了下面,以及脚本如下


  1. set outfile [open Na_Log.txt w]
  2. set frames [molinfo top get numframes]
  3. set atomsNa [atomselect top "name Na"]   
  4. set ids [$atomsNa get resid]
  5. set length [llength $ids]
  6. $atomsNa delete


  7. for { set frame 1 } { $frame < $frames } { incr frame} {
  8.     for { set id 0 } { $id < $length } {incr id} {
  9.      
  10.         set atoms [atomselect top "
  11.             resid [lindex $ids $id] or
  12.             same fragment as {
  13.                 (resname EC EMC DMC and name O1 O2) or  
  14.                 (resname TFB and name O3 O4) or         
  15.                 (resname PF6 and name P)  
  16.                 and within 3.0 of resid [lindex $ids $id]  
  17.             }" frame $frame]
  18.         
  19.         puts $outfile [$atoms get resname]
  20.         puts $outfile [$atoms get resid]
  21.         $atoms delete
  22.         
  23.         $atoms delete
  24.         $filtered_atoms delete
  25.     }
  26. }
  27. close $outfile
复制代码



作者
Author:
Uus/pMeC6H4-/キ    时间: 2025-2-21 16:00
本帖最后由 Uus/pMeC6H4-/キ 于 2025-2-21 16:27 编辑

此示例单帧.pdb文件是从M$里导出的么,有两个明显问题:第三列原子名有很多重复且不存在形如O1 O2 O3 O4的,导致所有用name确定的选区全空;第四列残基名全是MOL,导致所有用resname确定的选区也全空。如果是GROMACS跑的轨迹,直接用VMD查看处理即可,别用M$。

编辑:set na_pos [lindex [$na get {x y z}] 0]和[vecdist $na_pos [lindex [$atoms_PF6_P get {x y z}] 0]]也莫名其妙,本来get {x y z}获得的三维坐标应该都用于距离计算,结果套一层lindex ... 0就只剩下x坐标。

编辑2:animate goto $frame更新的是屏幕上绘制的帧不是动态选区对应的帧,对于名叫$sel的选区应采用$sel frame $frame和$sel update更新。这个脚本不太靠谱,我有点怀疑来源。

作者
Author:
Old_Six    时间: 2025-2-21 16:26
本帖最后由 Old_Six 于 2025-2-21 16:30 编辑
Uus/pMeC6H4-/キ 发表于 2025-2-21 16:00
此示例单帧.pdb文件是从M$里导出的么,有两个明显问题:第三列原子名有很多重复且不存在形如O1 O2 O3 O4的 ...

感谢大佬的回复!是的大佬,分子动力学是从M$中跑出来导出.pdb的,我也感觉导出的.pdb非常奇怪,想问问这种情况怎么办呀,对于代码的问题我修改了一下
  1. set outfile [open Na_Log.txt w]
  2. set frames [molinfo top get numframes]
  3. set atomsNa [atomselect top "name Na"]   
  4. set ids [$atomsNa get resid]
  5. set length [llength $ids]
  6. $atomsNa delete


  7. for { set frame 1 } { $frame < $frames } { incr frame} {
  8.     for { set id 0 } { $id < $length } {incr id} {
  9.      
  10.         set atoms [atomselect top "
  11.             resid [lindex $ids $id] or
  12.             same fragment as {
  13.                 (resname EC EMC DMC and name O1 O2) or  
  14.                 (resname TFB and name O3 O4) or         
  15.                 (resname PF6 and name P)  
  16.                 and within 3.0 of resid [lindex $ids $id]  
  17.             }" frame $frame]
  18.         
  19.         puts $outfile [$atoms get resname]
  20.         puts $outfile [$atoms get resid]
  21.         $atoms delete
  22.         
  23.         $atoms delete
  24.         $filtered_atoms delete
  25.     }
  26. }
  27. close $outfile
复制代码



作者
Author:
Uus/pMeC6H4-/キ    时间: 2025-2-21 17:15
本帖最后由 Uus/pMeC6H4-/キ 于 2025-2-21 17:20 编辑
Old_Six 发表于 2025-2-21 16:26
感谢大佬的回复!是的大佬,分子动力学是从M$中跑出来导出.pdb的,我也感觉导出的.pdb非常奇怪,想问问这 ...

我不用M$,没法就导出原子名和残基名信息正确的轨迹文件给VMD分析提供帮助,本来这种体系的分子动力学还有更好的软件选择。

选择语句应当放在帧的循环外边定义,每次循环更新即可,省得反复定义再删除。
  1. set outfile [open Na_PF6_Log.txt w]
  2. set frames [molinfo top get numframes]
  3. set atomsNa [atomselect top "name Na"]
  4. set ids [$atomsNa get resid]
  5. $atomsNa delete

  6. foreach na_resid $ids {
  7.   set sel [atomselect top "same fragment as (pbwithin 3.0 of resid $na_resid and ((resname EC EMC DMC and name O1 O2) or (resname TFB and name O3 O4) or (resname PF6 and name P)))"]
  8.   for { set frame 0 } { $frame < $frames } { incr frame } {
  9.     $sel frame $frame ; $sel update
  10.     set resids [$sel get resid]
  11.     puts $outfile "Frame $frame for Na $na_resid: $resids"
  12.   }
  13. }
  14. close $outfile
  15. $sel delete
复制代码

作者
Author:
Old_Six    时间: 2025-2-21 17:45
Uus/pMeC6H4-/キ 发表于 2025-2-21 17:15
我不用M$,没法就导出原子名和残基名信息正确的轨迹文件给VMD分析提供帮助,本来这种体系的分子动力学还 ...

感谢大佬的帮助,那我再学着用Gromacs跑一次,谢谢!!
作者
Author:
bard_skd    时间: 2025-12-5 10:48
楼主您好,我也想统计AGG,CIP,SSIP比例,请问您的问题解决了吗,能否分享下脚本~
作者
Author:
Uus/pMeC6H4-/キ    时间: 2025-12-5 11:11
本帖最后由 Uus/pMeC6H4-/キ 于 2025-12-5 11:19 编辑
bard_skd 发表于 2025-12-5 10:48
楼主您好,我也想统计AGG,CIP,SSIP比例,请问您的问题解决了吗,能否分享下脚本~

这种问题不一定有通用脚本吧,取决于
(1) 电解液体系都有什么成分,在分子动力学模拟导出的轨迹中有什么能用于选择的原子名/片段名等等;
(2) 所谓aggregate, contact ion pair, solvent-separated ion pair都是怎么定义的,有什么几何判据以及存在时长/寿命要求,比例是对总数目而言还是涉及时间平均等等。
如果有想参考的来源把这些问题都交代清楚了,可以贴一下文献出处。写VMD脚本的总体思路无非就是先按http://bbs.keinsci.com/thread-14267-1-1.html设计选择语句,确认对单帧能选中合适的范围后再对轨迹循环各帧。

编辑:见http://bbs.keinsci.com/thread-56643-1-1.htmlhttp://bbs.keinsci.com/thread-56786-1-1.html

作者
Author:
bard_skd    时间: 2025-12-6 13:45
Uus/pMeC6H4-/キ 发表于 2025-12-5 11:11
这种问题不一定有通用脚本吧,取决于
(1) 电解液体系都有什么成分,在分子动力学模拟导出的轨迹中有什么 ...

好的,感谢大佬~




欢迎光临 计算化学公社 (http://bbs.keinsci.com/) Powered by Discuz! X3.3