计算化学公社

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

[程序/脚本开发] 一个自动做批量构象搜索的脚本(调用xtb、crest结合Molclus中的isostat)

[复制链接 Copy URL]

14

帖子

0

威望

364

eV
积分
378

Level 3 能力者

本帖最后由 Senn 于 2025-4-23 18:35 编辑

因为本人的研究时常要做构象搜索,参考群主的文章:使用Molclus结合xtb做的动力学模拟对瑞德西韦(Remdesivir)做构象搜索 - 量子化学 (Quantum Chemistry) - 计算化学公社 (keinsci.com)
对每个分子一步步做操作很繁琐,尤其是很多个分子都要算的时候
所以写了两个脚本,一个是对单个结构做计算,一个是对文件夹里的所有.xyz文件做计算
需要调用xtb、crest和molclus里的isostat工具,安装参考前面的文章
这里将isostat拷贝到工作文件夹中,加上md.inp(内容参考群主的文章)就可以使用

大概流程是先调用xtb跑动力学模拟,再通过crest调用xtb做批量结构优化,再通过群主的isostat工具做去重和排序,再通过更高精度的结构优化和去重排序
计算级别:跑MD用的是gfnff,因为测试gfn0老容易出现断键、反应的情况,gfnff精度也够用。第一次结构优化是真空下的gfnff,可以改成gfn0,第二次是gfn2在隐式水模型下
调用方式:通过chmod +x ./CS.sh命令加上权限后,通过./CS.sh filename.xyz计算单个结构的构象搜索
也可以通过./CS_batch.sh filename调用文件夹filename中所有的.xyz挨个计算,最后结果和中间文件会通过创建文件夹md、opt1、opt2和results进行分类保存
脚本做了详细标注,所以很容易修改计算关键词,改流程等等。

CS.sh:
  1. #!/bin/bash
  2. set -euo pipefail

  3. # 检查输入参数
  4. if [ $# -ne 1 ]; then
  5.     echo "用法: $0 <xyz文件>"
  6.     echo "示例: $0 molecule.xyz"
  7.     exit 1
  8. fi

  9. xyz_file=$1
  10. inp_file="md.inp"  # 自动使用当前目录下的md.inp文件

  11. # 检查文件是否存在
  12. if [ ! -f "$xyz_file" ]; then
  13.     echo "错误: XYZ文件 $xyz_file 不存在"
  14.     exit 1
  15. fi

  16. if [ ! -f "$inp_file" ]; then
  17.     echo "错误: INP文件 $inp_file 不存在"
  18.     exit 1
  19. fi

  20. # 从xyz文件名提取基础名称(不含扩展名)
  21. filename=$(basename "$xyz_file" .xyz)
  22. md_dir="md_${filename}"

  23. # 创建目录(如果不存在)
  24. mkdir -p "$md_dir"

  25. echo "开始执行xtb动力学模拟..."
  26. echo "使用文件: $xyz_file 和 $inp_file"
  27. echo "结果将保存在目录: $md_dir"

  28. # 进入目录执行xtb
  29. (
  30.     cd "$md_dir" || exit
  31.     xtb "../$xyz_file" --input "../$inp_file" --omd --gfnff
  32. )

  33. echo "模拟完成!结果保存在${md_dir}目录"

  34. # 复制轨迹文件并创建opt目录
  35. opt1_dir="opt1_${filename}"
  36. mkdir -p "$opt1_dir"
  37. mdtraj_file="mdtraj_${filename}.xyz"

  38. # 复制并重命名轨迹文件
  39. cp "${md_dir}/xtb.trj" "${opt1_dir}/${mdtraj_file}"

  40. echo "开始执行CREST进行结构优化..."
  41. echo "使用轨迹文件: ${mdtraj_file}"

  42. # 在opt1目录中执行crest
  43. (
  44.     cd "$opt1_dir" || exit
  45.     crest -mdopt "$mdtraj_file" -gfnff -opt normal -niceprint
  46. )

  47. echo "CREST第一次批量优化计算完成!结果保存在 ${opt1_dir} 目录"

  48. # 复制crest_ensemble.xyz并重命名
  49. cp "${opt1_dir}/crest_ensemble.xyz" "./isomers.xyz"

  50. echo "开始使用isostat进行构象去重..."
  51. echo "交互输入顺序: 1.回车 2.0.5 3.0.5 4.回车"

  52. # 使用here document进行交互式输入
  53. ./isostat <<EOF

  54. 0.5
  55. 0.5

  56. EOF

  57. echo "isostat第一次去重完成!"

  58. # 移动isomers.xyz到opt1目录
  59. mv "./isomers.xyz" "${opt1_dir}/isomers.xyz"

  60. # 重命名cluster.xyz并创建opt2目录
  61. cluster0_file="cluster0_${filename}.xyz"
  62. opt2_dir="opt2_${filename}"
  63. mkdir -p "$opt2_dir"

  64. # 移动重命名后的cluster文件到opt2目录
  65. mv "./cluster.xyz" "${opt2_dir}/${cluster0_file}"

  66. echo "开始执行CREST第二次优化计算..."
  67. echo "使用文件: ${cluster0_file}"

  68. # 在opt2目录中执行crest
  69. (
  70.     cd "$opt2_dir" || exit
  71.     crest -mdopt "$cluster0_file" -gfn2 -opt normal -g h2o -niceprint
  72. )

  73. echo "CREST第二次优化计算完成!结果保存在 ${opt2_dir} 目录"

  74. # 第二次去重操作
  75. # 复制crest_ensemble.xyz并重命名
  76. cp "${opt2_dir}/crest_ensemble.xyz" "./isomers.xyz"

  77. echo "开始使用isostat进行第二次构象去重..."
  78. echo "交互输入顺序: 1.回车 2.0.5 3.0.5 4.回车"

  79. # 使用here document进行交互式输入
  80. ./isostat <<EOF

  81. 0.5
  82. 0.5
  83. 298.15

  84. EOF

  85. echo "isostat第二次去重完成!"

  86. # 移动isomers.xyz到opt2目录
  87. mv "./isomers.xyz" "${opt2_dir}/isomers.xyz"

  88. # 重命名cluster.xyz
  89. cluster_file="cluster_${filename}.xyz"
  90. mv "./cluster.xyz" "./${cluster_file}"

  91. echo "最终构象结果保存在: ${cluster_file}"

复制代码

CS_batch.sh:
  1. #!/bin/bash
  2. set -euo pipefail

  3. # 检查输入参数
  4. if [ $# -ne 1 ]; then
  5.     echo "用法: $0 <xyz文件夹>"
  6.     echo "示例: $0 xyz_files"
  7.     exit 1
  8. fi

  9. xyz_dir=$1
  10. inp_file="md.inp"  # 自动使用当前目录下的md.inp文件

  11. # 检查文件夹是否存在
  12. if [ ! -d "$xyz_dir" ]; then
  13.     echo "错误: XYZ文件夹 $xyz_dir 不存在"
  14.     exit 1
  15. fi

  16. if [ ! -f "$inp_file" ]; then
  17.     echo "错误: INP文件 $inp_file 不存在"
  18.     exit 1
  19. fi

  20. # 创建主输出目录
  21. mkdir -p md opt1 opt2 results

  22. # 遍历xyz文件夹中的所有.xyz文件
  23. for xyz_file in "$xyz_dir"/*.xyz; do
  24.     # 从xyz文件名提取基础名称(不含扩展名)
  25.     filename=$(basename "$xyz_file" .xyz)
  26.    
  27.     echo "开始处理文件: $xyz_file"
  28.    
  29.     # 创建各阶段目录
  30.     md_subdir="md/md_${filename}"
  31.     opt1_subdir="opt1/opt1_${filename}"
  32.     opt2_subdir="opt2/opt2_${filename}"
  33.    
  34.     mkdir -p "$md_subdir" "$opt1_subdir" "$opt2_subdir"

  35.     echo "开始执行xtb动力学模拟..."
  36.     echo "使用文件: $xyz_file 和 $inp_file"
  37.     echo "结果将保存在目录: $md_subdir"  # 修改此处,将md_dir改为md_subdir

  38.     # 进入目录执行xtb
  39.     (
  40.         cd "$md_subdir" || exit
  41.         xtb "../../$xyz_file" --input "../../$inp_file" --omd --gfnff
  42.     )

  43.     # 复制轨迹文件
  44.     mdtraj_file="mdtraj_${filename}.xyz"
  45.     cp "${md_subdir}/xtb.trj" "${opt1_subdir}/${mdtraj_file}"

  46.     # 执行CREST第一次优化
  47.     (
  48.         cd "$opt1_subdir" || exit
  49.         crest -mdopt "$mdtraj_file" -gfnff -opt normal -niceprint
  50.     )

  51.     cp "${opt1_subdir}/crest_ensemble.xyz" "./isomers.xyz"

  52.     # 第一次isostat去重
  53.     ./isostat <<EOF

  54.     0.5
  55.     0.5

  56. EOF

  57.     mv "./isomers.xyz" "${opt1_subdir}/isomers.xyz"
  58.     cluster0_file="cluster0_${filename}.xyz"
  59.     mv "./cluster.xyz" "${opt2_subdir}/${cluster0_file}"

  60.     # 执行CREST第二次优化
  61.     (
  62.         cd "$opt2_subdir" || exit
  63.         crest -mdopt "$cluster0_file" -gfn2 -opt normal -g h2o -niceprint
  64.     )

  65.     # 第二次isostat去重
  66.     cp "${opt2_subdir}/crest_ensemble.xyz" "./isomers.xyz"
  67.    
  68.     ./isostat <<EOF

  69.     0.5
  70.     0.5

  71. EOF

  72.     mv "./isomers.xyz" "${opt2_subdir}/isomers.xyz"
  73.     # 移动最终结果到results目录
  74.     cluster_file="results/cluster_${filename}.xyz"
  75.     mv "./cluster.xyz" "$cluster_file"

  76.     echo "文件 $xyz_file 处理完成!最终结果保存在: $cluster_file"
  77. done

  78. echo "所有文件处理完成!"
复制代码





评分 Rate

参与人数
Participants 6
eV +21 收起 理由
Reason
王涛 + 4 赞!
kikiw + 5 精品内容
mxjscu + 4 好物!
Serious + 2 赞!
hcy002 + 1
gyp + 5 谢谢分享

查看全部评分 View all ratings

38

帖子

0

威望

397

eV
积分
435

Level 3 能力者

2#
发表于 Post on 2025-7-10 10:18:34 | 只看该作者 Only view this author
感谢楼主好东东!问一下,在哪里指定体系的电荷和自旋多重度信息?

14

帖子

0

威望

364

eV
积分
378

Level 3 能力者

3#
 楼主 Author| 发表于 Post on 2025-7-28 19:34:45 | 只看该作者 Only view this author
influenza 发表于 2025-7-10 10:18
感谢楼主好东东!问一下,在哪里指定体系的电荷和自旋多重度信息?

才看到不好意思哈,执行xtb和执行crest的关键词那里设置,关键词是chrg和uhf   比如xtb的话就是 --chrg 0 --uhf 0, crest就是  -chrg 0 -uhf 0

22

帖子

0

威望

155

eV
积分
177

Level 3 能力者

4#
发表于 Post on 2025-10-9 22:53:34 | 只看该作者 Only view this author
Senn 发表于 2025-7-28 19:34
才看到不好意思哈,执行xtb和执行crest的关键词那里设置,关键词是chrg和uhf   比如xtb的话就是 --chrg 0 ...

请问我在执行crest时定义了uhf 2,算三线态,但是就报错,请问是什么原因呀?

Command line input:
$ crest xtbopt.xyz --gfn2 --chrg 0 --uhf 2 --ewin 10 --mdlen 5 --noreftopo
  --gfn2               : Use of GFN2-xTB requested.
  --chrg 0
  --uhf 2
  --ewin 10
  --mdlen 5 (MD length in ps)

> Setting up backup calculator ... done.
...
...
Generating MTD length from a flexibility measure
------------------------------------------------
Calculating GFN0-xTB WBOs   ... done.
Calculating NCI flexibility ...forrtl: severe (24): end-of-file during read, unit -5, file Internal List-Directed Read
Image              PC                Routine            Line        Source            
crest              0000000000BE995B  Unknown               Unknown  Unknown
crest              0000000000BE8F8B  Unknown               Unknown  Unknown
crest              0000000000B74DA2  gfnff_setup_mod_m         227  gfnff_setup.f90
crest              0000000000B74338  gfnff_setup_mod_m          78  gfnff_setup.f90
crest              0000000000B4AE93  gfnff_interface_m         220  gfnff_interface.f90
crest              00000000004EB356  gfnff_api_mp_gfnf          67  gfnff_api.F90
crest              00000000007C3B4B  nciflexi_gfnff_           252  flexi.F90
crest              00000000007EE58E  nciflexi_                 254  legacy_wrappers.f90
crest              000000000074D6C3  md_length_setup_           67  choose_settings.f90
crest              000000000057BEC2  crest_search_imtd          77  search_conformers.f90
crest              00000000008AC04B  MAIN__                    237  crest_main.f90
crest              000000000040A1FD  Unknown               Unknown  Unknown
libc.so.6          00001536B52295D0  Unknown               Unknown  Unknown
libc.so.6          00001536B5229680  __libc_start_main     Unknown  Unknown
crest              000000000040A115  Unknown               Unknown  Unknown

5

帖子

0

威望

63

eV
积分
68

Level 2 能力者

5#
发表于 Post on 2025-10-20 16:59:13 | 只看该作者 Only view this author
您好,请问crest在哪能下载呀

848

帖子

4

威望

1912

eV
积分
2840

Level 5 (御坂)

A Student

6#
发表于 Post on 2025-10-27 20:24:10 | 只看该作者 Only view this author
敬仰一针见血的指责,厌倦别有用心的赞美。

49

帖子

0

威望

199

eV
积分
248

Level 3 能力者

7#
发表于 Post on 2025-11-26 11:36:41 | 只看该作者 Only view this author
student0618 发表于 2025-10-27 20:24
All options: https://crest-lab.github.io/crest-docs/page/installation/install_basic.html

precom ...

你好,这两个选项分别有什么不同呢?

848

帖子

4

威望

1912

eV
积分
2840

Level 5 (御坂)

A Student

8#
发表于 Post on 2025-11-26 13:15:24 | 只看该作者 Only view this author
王涛 发表于 2025-11-26 11:36
你好,这两个选项分别有什么不同呢?

All options 有3个选项,不同的安装方法

Precompiled binaries 是第一个选项,最简单的下载解压缩即用
敬仰一针见血的指责,厌倦别有用心的赞美。

49

帖子

0

威望

199

eV
积分
248

Level 3 能力者

9#
发表于 Post on 2025-11-26 18:45:18 | 只看该作者 Only view this author
student0618 发表于 2025-11-26 13:15
All options 有3个选项,不同的安装方法

Precompiled binaries 是第一个选项,最简单的下载解压缩即用

感谢感谢

49

帖子

0

威望

199

eV
积分
248

Level 3 能力者

10#
发表于 Post on 2025-11-26 18:49:16 | 只看该作者 Only view this author
帖主你好。请问如果是带电体系,需不需要从第一步xtb跑动力学模拟就加上chrg和uhf

14

帖子

0

威望

364

eV
积分
378

Level 3 能力者

11#
 楼主 Author| 发表于 Post on 2025-11-27 15:39:14 | 只看该作者 Only view this author
王涛 发表于 2025-11-26 18:49
帖主你好。请问如果是带电体系,需不需要从第一步xtb跑动力学模拟就加上chrg和uhf

需要的

5

帖子

0

威望

91

eV
积分
96

Level 2 能力者

12#
发表于 Post on 2025-12-10 08:55:01 | 只看该作者 Only view this author

ERROR STOP coord file does not exist.你好这个问题为什么?

5

帖子

0

威望

91

eV
积分
96

Level 2 能力者

13#
发表于 Post on 2025-12-10 10:37:01 | 只看该作者 Only view this author
student0618 发表于 2025-10-27 20:24
All options: https://crest-lab.github.io/crest-docs/page/installation/install_basic.html

precom ...

您好,现在,为什么crest读取不了xyz文件,说coord file does not exist. 我看crest文档是需要toml格式吗,你那边xtb分子动力学后的文件怎么可以让crest读取的。

848

帖子

4

威望

1912

eV
积分
2840

Level 5 (御坂)

A Student

14#
发表于 Post on 2025-12-10 12:38:03 | 只看该作者 Only view this author
songjianping25 发表于 2025-12-10 10:37
您好,现在,为什么crest读取不了xyz文件,说coord file does not exist. 我看crest文档是需要toml格式吗 ...

资讯不足无法判断,至少要说如何操作、基本检查当前目录及文件路径等。

Sob老师这帖 http://bbs.keinsci.com/thread-16255-1-1.html 文末有用crest 示例的。
敬仰一针见血的指责,厌倦别有用心的赞美。

本版积分规则 Credits rule

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

GMT+8, 2026-1-23 13:17 , Processed in 0.180298 second(s), 24 queries , Gzip On.

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