【ASE+python学习】批量实现将含有空位的结构进行氢饱和(实际就是在某个位置添加氢原子)

news2025/7/21 4:21:00

批量实现将含有空位的结构进行氢饱和

  • 任务大纲
  • 任务思路
  • 氢原子相对位置计算
  • 代码实现-单个结构加氢
    • 导入所需库/包
    • 计算氢原子坐标
    • 给结构加氢
    • 运行结果
  • 代码实现-批量结构加氢
    • 导入相关库/包
    • 遍历文件夹内所有结构,并逐次给结构加氢
    • 批量实现的逻辑与结果

在搬砖过程中,我经常要对大批量的含有空位的结构进行氢饱和处理。如果一个个打开结构,然后进行加氢,我估计要累死,对颈椎及其不友好。而且这种简单且没有技术含量的工作,我想可以用更科学的方式进行实现。

任务大纲

本文以含有一个空位的石墨烯团簇为例,通过ASE与python程序对该结构进行加氢。单个结构加氢的任务大纲见下,如果是多个任务,结合for循环执行即可。
在这里插入图片描述

任务思路

实现给结构加氢的任务思路为:

  1. 首先需要基于已有的已经进行加氢的结构,计算在空位处氢原子与三个碳原子的相对位置信息,包括氢原子偏离结构平面的距离、与碳相连的键长、以及氢原子与结构平面的夹角、氢原子与碳相连的键在结构平面的投影在x方向与y方向的夹角(大概计算就行,后期会进行结构优化,优化氢原子的位置)
  2. 接着使用ASE读取结构信息,获取空位处三个碳原子的坐标信息
  3. 基于三个碳原子的坐标信息,计算三个氢原子的坐标信息
  4. 然后通过ASE将三个氢原子逐次添加到结构
  5. 将新结构写入新的文件中

氢原子相对位置计算

这里计算的参数大概就行,只要能让氢与相应的碳原子连接在一起,后续进行结构优化会优化到实际位置
在这里插入图片描述

代码实现-单个结构加氢

导入所需库/包

import os
import math
import shutil
from ase.io import read,write
from ase.visualize import view
from ase.build import molecule
from ase.build import add_adsorbate

计算氢原子坐标

def addHsite(C95Vac1_path=r'D:\software output files\quntum_experiment\POSCAR\non_periodic_CN\C96_molecule\4-C95Vac1_str_1e-2',C95Vac1_file='POSCAR9'):
    '''
    该函数用于获取空位附近三个碳原子的位置,并计算出三个氢的位置
    思路设计:
    读入含有空位的结构
    获取空位处三个碳原子的位置
    在MS打开含有空位且已进行氢饱和的结构,量碳氢键长,计算该键与xy平面的夹角,以及在xy平面的投影
    接着根据空位的排布,计算碳碳氢二面角,从而计算碳氢键长在xy平面的投影在x方向与y方向的分量
    基于空位三个碳原子的坐标,计算三个氢原子的坐标
    '''
    C95Vac1=read(os.path.join(C95Vac1_path,C95Vac1_file),format='vasp')#读入结构信息,转为atoms object
    view(C95Vac1)
    #获取空位碳原子的位置,仅提取x,y方向
    position_62=C95Vac1[62].position[:2]
    position_61=C95Vac1[61].position[:2]
    position_114=C95Vac1[114].position[:2]
    #计算x,z方向偏移量
    z=1.06*math.sin(49*math.pi/180)#1.06为氢键的长度,这里计算的是氢原子偏离结构平面的高度
    x=1.06*math.cos(49*math.pi/180)#这里计算的是氢原子与碳原子所成的键,在xy平面的投影长度
    #分别计算与C62,C61,C114相连氢原子的位置
    #C62-H位置计算
    position_62_newx=[i+x for i in position_62 if i ==position_62[0]]#计算在x方向氢原子与C62位置的偏移量
    position_62_new=[]#建立空列表用于存储氢原子在平面的坐标
    position_62_new.append(position_62_newx[0])
    position_62_new.append(position_62[1])
    #计算C61与C114的氢原子在x,y方向的偏移量
    xx=x*math.cos(71*math.pi/180)#71为二面角
    xy=x*math.sin(71*math.pi/180)
    #C61-H位置计算
    position_61_newx=[i-xx for i in position_61 if i ==position_61[0]]
    position_61_newy=[i+xy for i in position_61 if i ==position_61[1]]
    position_61_new=[]
    position_61_new.append(position_61_newx[0])
    position_61_new.append(position_61_newy[0])
    #C114-H位置计算
    position_114_newx=[i-xx for i in position_114 if i ==position_114[0]]
    position_114_newy=[i-xy for i in position_114 if i ==position_114[1]]
    position_114_new=[]
    position_114_new.append(position_114_newx[0])
    position_114_new.append(position_114_newy[0])
    return x,z,position_62_new,position_61_new,position_114_new

给结构加氢

def str_addH(C95Vac1_path=r'D:\software output files\quntum_experiment\POSCAR\non_periodic_CN\C96_molecule\4-C95Vac1_str_1e-2',C95Vac1_file='POSCAR9'):
    '''
    该函数用于给结构的空位位置附件添加氢原子
    思路:基于函数addHsite()所得到的三个氢原子的坐标,依次添加到结构表面,接着将修改后的结构写入新的POSCAR文件中
    '''
   x,z,position_62_new,position_61_new,position_114_new=addHsite()
    H=molecule('H')
    C95Vac1=read(os.path.join(C95Vac1_path,C95Vac1_file),format='vasp')#读入结构信息,转为atoms object
    add_adsorbate(C95Vac1,H,position=position_62_new,height = z)#在结构上依次添加氢原子
    add_adsorbate(C95Vac1,H,position=position_61_new,height = z)
    add_adsorbate(C95Vac1,H,position=position_114_new,height = z)
    write(os.path.join(C95Vac1_path,C95Vac1_file+'_addH'),C95Vac1,format='vasp')#将添加了氢原子的结构写入文件
    view(C95Vac1)

运行结果

调用函数运行

str_addH()

运行结果
在这里插入图片描述

代码实现-批量结构加氢

批量给结构加氢,实际上只需要在读入结构那部分代码改为使用for循环遍历文件夹中的结构即可。

导入相关库/包

import os
import math
import shutil
from ase.io import read,write
from ase.visualize import view
from ase.build import molecule
from ase.build import add_adsorbate

遍历文件夹内所有结构,并逐次给结构加氢

def batchstr_addH(file_path,save_str,save_folder):
    '''
    该函数实现批量读入含有空位的结构,并将三个氢原子添加到空位附近,实现氢饱和,并将新结构写入文件,存入新文件夹
    file_path:结构文件所处的文件夹路径
    save_str:添加氢原子后的结构存储文件夹所在路径
    save_folder:添加氢原子后的结构存储文件夹的名字
    '''
    save_path=os.path.join(save_str,save_folder)
    str_files=os.listdir(file_path)
    x,z,position_62_new,position_61_new,position_114_new=addHsite()
    H=molecule('H')
    if os.path.exists(save_path):
        shutil.rmtree(save_path)
    if not os.path.exists(save_path):
        os.makedirs(save_path)
    for str_file in str_files:#遍历结构文件
        structure=read(os.path.join(file_path,str_file),format='vasp')
        add_adsorbate(structure,H,position=position_62_new,height = z)#在结构上依次添加氢原子
        add_adsorbate(structure,H,position=position_61_new,height = z)
        add_adsorbate(structure,H,position=position_114_new,height = z)
        write(os.path.join(save_path,str_file),structure,format='vasp')
file_path=r'D:\software output files\quntum_experiment\POSCAR\non_periodic_CN\C96_molecule\5-C94Vac1N1_str_1e-2(based_on_poscar9)_ASE\Npe'
save_str=r'D:\software output files\quntum_experiment\POSCAR\non_periodic_CN\C96_molecule\5-C94Vac1N1_str_1e-2(based_on_poscar9)_ASE'
save_folder='Npe_addH'
batchstr_addH(file_path,save_str,save_folder)

批量实现的逻辑与结果

在这里插入图片描述
如此,便实现了自动批量加氢的操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/17149.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【教学类-15-01】20221115《学号(姓名)描字帖-A4横版-竖切》(中班)

效果展示 浅蓝色打印纸(灰色字体) 背景需求: 在中3班的Python学具实验中,发现至少有3位幼儿明确表示自己不会写学号,还有3位幼儿书写的学号是镜像字(两个数字位置互换、两个数字都左右镜像、2和5上下镜像等…

【树莓派不吃灰】命令篇⑤ ps -ef | grep xxx | grep -v grep | wc -l 命令

目录1. 简介2. grep -v grep 命令作用2.1 ps -ef | grep python32.2 grep -v grep❤️ 博客主页 单片机菜鸟哥,一个野生非专业硬件IOT爱好者 ❤️❤️ 本篇创建记录 2022-11-18 ❤️❤️ 本篇更新记录 2022-11-18 ❤️🎉 欢迎关注 🔎点赞 &am…

让 Serverless 更普惠,阿里云函数计算 FC 宣布全面降价,最大幅度达 37.5%

背景 11 月 5 日,2022 杭州 云栖大会上,阿里云宣布函数计算 FC 开启全面降价,vCPU 单价降幅 11% ,其他的各个独立计费项最高降幅达 37.5% 。 本次云栖大会上,阿里云智能总裁张建锋表示,以云为核心的新型…

动态分区算法(头歌实验)第1关:首次适应算法。第2关:最佳适应算法。

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 题目: 第1关:首次适应算法 任务描述 假设初始状态下可用的内存空间为55MB,并有如下的请求序列: 作业1申请15MB 作业2申请30M…

Yolov5+图像分割+百度AI接口——车牌实时检测识别系统

Hallo,各位小伙伴大家好呀!这两天一直在肝项目,都是关于计算机视觉方面的,所以这两天一直也没有更新(真的不是我懒)!在这个过程中我对Yolov5有了更深刻的理解,在原有的Yolov5框架上增…

14.4、SpringWebFlux-2

14.4、SpringWebFlux-2 14.4.3、SpringWebFlux执行流程和核心 API SpringWebFlux 基于 Reactor,默认容器是 Netty,Netty 是高性能的 NIO 框架,异步非阻塞(AIO,是 NIO 的升级)的框架 14.4.3.1、执行流程 …

jrtplib开源库系列之三:jrtplib发送接收数据流程

说明 前面2篇文章主要说明了如何安装jrtplib库,以及对example1进行了说明,这篇文章主要说下jrtplib库数据的收发流程。 数据收发流程 从例子1就可以很好的说明jrtplib的使用是非常简单的,主要分为以下几步 1. 设置会话参数(比如时间戳&am…

同花顺_代码解析_技术指标_C

本文通过对同花顺中现成代码进行解析,用以了解同花顺相关策略设计的思想 CBJX 成本均线 成本价均线不同于一般移动平均线系统,成本价均线系统首次将成交量引入均线系统,充分提高均线系统的可靠性。成本均线不容易造成虚假信号或骗线&#xf…

牛客网项目-开发注册功能

前言 本文是对牛客网项目的总结,本文主要讲解页面注册逻辑 当我们点击首页的注册按钮时,会跳转到注册页面,然后再祖册页面提交账号,密码邮箱后会跳转到首页或者直接登录页面进行登录,这个操作可以自己设定 【设计逻辑…

SAP ABAP BAPI_SALESORDER_CREATEFROMDAT2 成本中心 kostl

BAPI_SALESORDER_CREATEFROMDAT2提供参数无成本中心字段,所以需要用扩展字段实现。 BAPE_VBAK: BAPE_VBAKX VBAKKOZ VBAKKOZX 封装扩展结构: DATA: LS_EXTENSION TYPE BAPIPAREX, LT_EXTENSION TYPE TABLE OF BAPIPAREX. DATA: LS_B…

目标检测论文解读复现之十一:基于特征融合与注意力的遥感图像小目标检测

前言 此前出了目标改进算法专栏,但是对于应用于什么场景,需要什么改进方法对应与自己的应用场景有效果,并且多少改进点能发什么水平的文章,为解决大家的困惑,此系列文章旨在给大家解读最新目标检测算法论文&#xff0c…

【MySQL】5.触发器

文章目录1. 触发器概述2. 触发器的相关语法3. 触发的NEW与OLD4. 总结1. 触发器概述 触发器,就是一种特殊的存储过程。触发器和存储过程一样是一个能够完成特定功能、存储在数据库服务器上的SQL片段,但是触发器无需调用,当对数据库表中的数据…

python批量读取nc气象数据并转为tif

python批量nc数据转tif 各类地理数据中,NC格式是很常见的,然而这种格式ArcGIS是无法打开的。一旦下载的话nc也是多时序的(多年、多月等等),让我们看看如何批量操作吧。 直接上代码: import numpy as np …

[附源码]Python计算机毕业设计本科生外出请假管理信息系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

数据结构和算法

1.数据结构 食谱和算法之间最大的区别就在于算法是严密的。食谱上经常会有描述得比较模糊的部分, 而算法的步骤都是用数学方式来描述的,所以十分明确。 算法和程序有些相似,区别在于程序是以计算机能够理解的编程语言编写而成的,…

构造函数详解

构造函数详解1.构造函数的概念与特性2.默认构造函数(1)概念(2)分类(3)工作原理3.初始化列表(1)定义(2)为什么使用初始化列表(3)必须使…

WebRTC系列<五>我与一位大佬的聊天记录

原本打算想用webrtc部署虚幻项目。后来在了解虚幻过程中,得知虚幻有像素流插件,导出项目里带有STUN和TURN服务,但是在webGL项目里比如three.js、babylon.js如果也能部署在服务器端,那就厉害了,也很有想象力空间。 基本…

表白墙网站练习【前端+后端+数据库】

表白墙网站练习【前端后端数据库】 开发该表白墙(简单网站)的基本步骤: 1.约定前后端交互接口 2.开发服务器代码 编写Servlet能够处理前端发来的请求编写数据库代码,来获取/存储关键数据 3.开发客户端代码 基于ajax能够构造请…

一体化Ethercat通信伺服电机在汇川H5U PLC上的应用案例介绍(上)

内容介绍了一体化低压伺服Ethercat通信的电机在汇川H5UPLC上的使用,本篇主要讲解环境的搭建以及使用AutoShop软件的在线调试功能,简单控制电机位置、速度模式运行; 一、系统构成 本系统主要构成是电脑,H5U-1614MTD-A8,…

家长杂志家长杂志社家长编辑部2022年第30期目录

卷首语 读懂童心,营造乐学趣学好场景 本刊编辑部; 1 本刊视线_关注《家长》投稿:cn7kantougao163.com 留守儿童学习动力不足的成因与激发策略 蔡斌林; 4-6 农村留守儿童加强心理健康教育的策略 张芸; 7-9 本刊视线_学校体育 中学体育线上线下教学融…