|
本帖最后由 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:
CS_batch.sh:
- #!/bin/bash
- set -euo pipefail
- # 检查输入参数
- if [ $# -ne 1 ]; then
- echo "用法: $0 <xyz文件夹>"
- echo "示例: $0 xyz_files"
- exit 1
- fi
- xyz_dir=$1
- inp_file="md.inp" # 自动使用当前目录下的md.inp文件
- # 检查文件夹是否存在
- if [ ! -d "$xyz_dir" ]; then
- echo "错误: XYZ文件夹 $xyz_dir 不存在"
- exit 1
- fi
- if [ ! -f "$inp_file" ]; then
- echo "错误: INP文件 $inp_file 不存在"
- exit 1
- fi
- # 创建主输出目录
- mkdir -p md opt1 opt2 results
- # 遍历xyz文件夹中的所有.xyz文件
- for xyz_file in "$xyz_dir"/*.xyz; do
- # 从xyz文件名提取基础名称(不含扩展名)
- filename=$(basename "$xyz_file" .xyz)
-
- echo "开始处理文件: $xyz_file"
-
- # 创建各阶段目录
- md_subdir="md/md_${filename}"
- opt1_subdir="opt1/opt1_${filename}"
- opt2_subdir="opt2/opt2_${filename}"
-
- mkdir -p "$md_subdir" "$opt1_subdir" "$opt2_subdir"
- echo "开始执行xtb动力学模拟..."
- echo "使用文件: $xyz_file 和 $inp_file"
- echo "结果将保存在目录: $md_subdir" # 修改此处,将md_dir改为md_subdir
- # 进入目录执行xtb
- (
- cd "$md_subdir" || exit
- xtb "../../$xyz_file" --input "../../$inp_file" --omd --gfnff
- )
- # 复制轨迹文件
- mdtraj_file="mdtraj_${filename}.xyz"
- cp "${md_subdir}/xtb.trj" "${opt1_subdir}/${mdtraj_file}"
- # 执行CREST第一次优化
- (
- cd "$opt1_subdir" || exit
- crest -mdopt "$mdtraj_file" -gfnff -opt normal -niceprint
- )
- cp "${opt1_subdir}/crest_ensemble.xyz" "./isomers.xyz"
- # 第一次isostat去重
- ./isostat <<EOF
- 0.5
- 0.5
- EOF
- mv "./isomers.xyz" "${opt1_subdir}/isomers.xyz"
- cluster0_file="cluster0_${filename}.xyz"
- mv "./cluster.xyz" "${opt2_subdir}/${cluster0_file}"
- # 执行CREST第二次优化
- (
- cd "$opt2_subdir" || exit
- crest -mdopt "$cluster0_file" -gfn2 -opt normal -g h2o -niceprint
- )
- # 第二次isostat去重
- cp "${opt2_subdir}/crest_ensemble.xyz" "./isomers.xyz"
-
- ./isostat <<EOF
- 0.5
- 0.5
- EOF
- mv "./isomers.xyz" "${opt2_subdir}/isomers.xyz"
- # 移动最终结果到results目录
- cluster_file="results/cluster_${filename}.xyz"
- mv "./cluster.xyz" "$cluster_file"
- echo "文件 $xyz_file 处理完成!最终结果保存在: $cluster_file"
- done
- echo "所有文件处理完成!"
复制代码
|
评分 Rate
-
查看全部评分 View all ratings
|