计算化学公社

 找回密码 Forget password
 注册 Register
Views: 1541|回复 Reply: 7
打印 Print 上一主题 Last thread 下一主题 Next thread

[GROMACS] 请问如何利用VMD统计水在聚合物的扩散过程中的结合水和自由水分子的个数

[复制链接 Copy URL]

15

帖子

0

威望

253

eV
积分
268

Level 3 能力者

跳转到指定楼层 Go to specific reply
楼主
如题,请问是否可以利用VMD统计水在聚合物的扩散过程中的结合水和自由水分子的个数。
如果可以,能否请教一下大致的思路,谢谢各位老师!

82

帖子

2

威望

793

eV
积分
915

Level 4 (黑子)

分子模拟晶戈

2#
发表于 Post on 2022-12-27 20:11:14 | 只看该作者 Only view this author
首先你要对结合水和自由水下一个定义,MD的分析很多都是基于轨迹的,轨迹的基本单位是帧。首先你要定义一下什么是结合水,比如距离聚合物分子的距离小于一定的cut-off并且维持一定的时间n帧,有了定义才可以对轨迹进行结合水、自由水的分析。
然后有了定义就根据具体的定义写分析脚本,如果你对于分析脚本是0基础,我建议使用python结合库MDAnalysis,python自带非常多的分析库,个人认为是最容易上手的,MDAnalysis的功能也很强大,比如按照我的定义,可以使用MDAnalysis的动态选取功能,每一帧考察聚合物周围距离多少帧内的水都是哪些,再和上一帧的进行对比,最终就能分析出结合水和自由水的个数。

6万

帖子

99

威望

6万

eV
积分
125141

管理员

公社社长

3#
发表于 Post on 2022-12-28 03:18:15 | 只看该作者 Only view this author
用VMD需要自己写脚本分析,至少据我所致没有现成的脚本
北京科音自然科学研究中心http://www.keinsci.com)致力于计算化学的发展和传播,长期开办极高质量的各种计算化学类培训:初级量子化学培训班中级量子化学培训班高级量子化学培训班量子化学波函数分析与Multiwfn程序培训班分子动力学与GROMACS培训班CP2K第一性原理计算培训班,内容介绍以及往届资料购买请点击相应链接查看。这些培训是计算化学从零快速入门以及进一步全面系统性提升研究水平的高速路!培训各种常见问题见《北京科音办的培训班FAQ》
欢迎加入北京科音微信公众号获取北京科音培训的最新消息,并避免错过网上有价值的计算化学文章!
欢迎加入人气极高、专业性特别强的理论与计算化学综合交流群思想家公社QQ群(群号见此链接),合计达一万多人。北京科音培训班的学员在群中可申请VIP头衔,提问将得到群主Sobereva的最优先解答。
思想家公社的门口Blog:http://sobereva.com(发布大量原创计算化学相关博文)
Multiwfn主页:http://sobereva.com/multiwfn(十分强大、极为流行的量子化学波函数分析程序)
Google Scholar:https://scholar.google.com/citations?user=tiKE0qkAAAAJ
ResearchGate:https://www.researchgate.net/profile/Tian_Lu

15

帖子

0

威望

253

eV
积分
268

Level 3 能力者

4#
 楼主 Author| 发表于 Post on 2022-12-28 20:21:50 | 只看该作者 Only view this author
对抗路达摩 发表于 2022-12-27 20:11
首先你要对结合水和自由水下一个定义,MD的分析很多都是基于轨迹的,轨迹的基本单位是帧。首先你要定义一下 ...

谢谢您的建议~

15

帖子

0

威望

253

eV
积分
268

Level 3 能力者

5#
 楼主 Author| 发表于 Post on 2022-12-28 20:23:06 | 只看该作者 Only view this author
sobereva 发表于 2022-12-28 03:18
用VMD需要自己写脚本分析,至少据我所致没有现成的脚本

谢谢sob老师~

25

帖子

0

威望

778

eV
积分
803

Level 4 (黑子)

6#
发表于 Post on 2022-12-29 14:21:10 | 只看该作者 Only view this author
本帖最后由 紫丹渡津 于 2022-12-29 14:29 编辑

随手写了一个Python的脚本,并行化计算结合水和自由水的分数,而且你还可以自由扩展计算结合水的状态,比如与聚合物链结合的数目等。
如何使用,脚本里关键的地方都有注释。

  1. import multiprocessing as mp
  2. import functools

  3. import math
  4. import MDAnalysis as mda
  5. import MDAnalysis.analysis.distances as dist
  6. import MDAnalysis.lib.distances as distances
  7. import numpy as np

  8. def assoPrint(filename, data1, data2):  # print association properties
  9.     anaout = open(filename + '.xvg', 'w')
  10.     print('# ' + 'condensed' + ' free', file=anaout)
  11.     for i in range(0, len(data1)):
  12.         print('{:10.5f} {:10.5f}'.format(data1[i], data2[i]), file=anaout)
  13.     anaout.close()


  14. def get_association(top, trj, ag1, ag2, cutoff, frame_id):
  15.     uta = mda.Universe(top, trj)
  16.     group1 = uta.select_atoms("type " + ag1)
  17.     group2 = uta.select_atoms("type " + ag2)
  18.     ts = uta.trajectory[frame_id]
  19.     cell = ts.dimensions
  20.     type1, type2 = [], []
  21.     for atom in range(len(ag1)):
  22.         distpair = distances.capped_distance(ag1.positions[atom], ag2.positions, cutoff, box = cell)[0]
  23.         asso_pair.append(len(distpair))
  24.         if len(distpair) != 0:
  25.             type1.append(atom)
  26.         else:
  27.             type2.append(atom)
  28.     # return the fractions of condensed and free water molecules
  29.     return len(type1) / len(group1), len(type2)  / len(group1)


  30. def main():
  31.     top = "topol.tpr"
  32.     trj = "traj.trr"
  33.     atom_group1 = "AT1" # atom type for the oxygen of water
  34.     atom_group2 = "AT2" # atom type of the given reference on your polymer
  35.     cutoff = 5.0  # cutoff for water - polymer
  36.     nt = 8  # number of processors
  37.     uta = mda.Universe(top, trj)
  38.     # generate the wanted frame_ids
  39.     frame_ids = [ts.frame for ts in uta.trajectory]
  40.     condensed, free = [], []
  41.     do_analyse = functools.partial(get_association, top, trj, atom_group1, atom_group2, cutoff)
  42.     pool = mp.Pool(processes=nt)
  43.     data = pool.imap(do_analyse, frame_ids)
  44.     for f1, f2 in data:
  45.         condensed.append(f1)
  46.         free.append(f2)
  47.     assoPrint('water_fraction', condensed, free)


  48. if __name__ == "__main__":
  49.     main()
复制代码

15

帖子

0

威望

253

eV
积分
268

Level 3 能力者

7#
 楼主 Author| 发表于 Post on 2022-12-29 15:30:33 | 只看该作者 Only view this author
紫丹渡津 发表于 2022-12-29 14:21
随手写了一个Python的脚本,并行化计算结合水和自由水的分数,而且你还可以自由扩展计算结合水的状态,比如 ...

谢谢老师!我这边也写了一个tcl的脚本,您的程序我再仔细学习学习

2

帖子

0

威望

57

eV
积分
59

Level 2 能力者

8#
发表于 Post on 2024-11-29 13:26:47 | 只看该作者 Only view this author
LLLYYHHH 发表于 2022-12-29 15:30
谢谢老师!我这边也写了一个tcl的脚本,您的程序我再仔细学习学习

你好,请教一下,有成功计算出来吗?

本版积分规则 Credits rule

手机版 Mobile version|北京科音自然科学研究中心 Beijing Kein Research Center for Natural Sciences|京公网安备 11010502035419号|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949号-1 )|网站地图

GMT+8, 2026-2-22 04:58 , Processed in 0.179784 second(s), 26 queries , Gzip On.

快速回复 返回顶部 返回列表 Return to list