计算化学公社

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

[算法与编程] 关于提取二面角的python求助

[复制链接 Copy URL]

81

帖子

0

威望

405

eV
积分
486

Level 3 能力者

跳转到指定楼层 Go to specific reply
楼主

各位老师好,本人目前刚开始学习python辅助计算化学,下面是我写的一个提取二面角的脚本。但是出现一个问题就是我提取的是原子1,2,3,4的二面角,最终输出的结果永远为正值,具体数值是正确的。所以想请教各位,该如何修改才能正确输出正负值呢,谢谢各位老师!

import math
import numpy as np
from numpy.linalg import norm
from numpy import dot, arccos, degrees, cross


def calculate_angle(coord1, coord2, coord3, coord4):
    x1, y1, z1 = coord1
    x2, y2, z2 = coord2
    x3, y3, z3 = coord3
    x4, y4, z4 = coord4
    a = [x2-x1,y2-y1,z2-z1]
    b = [x3-x2,y3-y2,z3-z2]
    c = [x4-x3,y4-y3,z4-z3]
    n1 = cross(a,b)
    n2 = cross(b,c)
    z = dot(n1,n2)/(norm(n1)*norm(n2))
    angle_rad = math.acos(z)
    angle_deg = math.degrees(angle_rad)
    return angle_deg

coord1 = [5,2,3]
coord2 = [2,3,2]
coord3 = [3,4,3]
coord4 = [4,1,4]

angle = calculate_angle(coord1, coord2, coord3, coord4)
print(angle)



1万

帖子

0

威望

7402

eV
积分
18171

Level 6 (一方通行)

2#
发表于 Post on 2023-6-27 21:32:18 | 只看该作者 Only view this author
用z的正负判断。至于正的z对应正的二面角还是负的二面角,和一个已知能正确判断二面角符号的可视化软件对比一下就知道了
BDF(https://bdf-manual.readthedocs.io/zh_CN/latest/Introduction.html)、ORCA(https://orcaforum.kofo.mpg.de/index.php)开发团队成员

5万

帖子

99

威望

5万

eV
积分
112496

管理员

公社社长

3#
发表于 Post on 2023-6-28 00:06:10 | 只看该作者 Only view this author
可以参考Multiwfn源代码包里util.f90里的xyz2dih_sign函数
北京科音自然科学研究中心http://www.keinsci.com)致力于计算化学的发展和传播,长期开办高质量的各种计算化学类培训:初级量子化学培训班中级量子化学培训班高级量子化学培训班量子化学波函数分析与Multiwfn程序培训班分子动力学与GROMACS培训班CP2K第一性原理计算培训班,内容介绍以及往届资料购买请点击相应链接查看。这些培训是计算化学从零快速入门以及进一步全面系统性提升研究水平的高速路!培训各种常见问题见《北京科音办的培训班FAQ》
欢迎加入“北京科音”微信公众号获取北京科音培训的最新消息、避免错过网上有价值的计算化学文章!
欢迎加入人气非常高、专业性特别强的综合性理论与计算化学交流QQ群“思想家公社QQ群”:1号:18616395,2号:466017436,3号:764390338,搜索群号能搜到哪个说明目前哪个能加,合计9000人。北京科音培训班的学员在群中可申请VIP头衔,提问将得到群主Sobereva的最优先解答。
思想家公社的门口Blog:http://sobereva.com(发布大量原创计算化学相关博文)
Multiwfn主页:http://sobereva.com/multiwfn(十分强大的量子化学波函数分析程序)
ResearchGate:https://www.researchgate.net/profile/Tian_Lu
Money and papers are rubbish, get a real life!

185

帖子

1

威望

4137

eV
积分
4342

Level 6 (一方通行)

4#
发表于 Post on 2023-6-28 08:43:08 | 只看该作者 Only view this author
得不到负值就对了,你用的公式就不能输出负值
如果不明白,想想 arccoss 的值域
换一个定义式,使用 arctan 的那个
参考 https://stackoverflow.com/questi ... ordinates-in-python
或者我在 http://bbs.keinsci.com/thread-12861-1-1.html 下面的回复

81

帖子

0

威望

405

eV
积分
486

Level 3 能力者

5#
 楼主 Author| 发表于 Post on 2023-6-28 08:53:13 | 只看该作者 Only view this author
wzkchem5 发表于 2023-6-27 21:32
用z的正负判断。至于正的z对应正的二面角还是负的二面角,和一个已知能正确判断二面角符号的可视化软件对比 ...

好的,谢谢老师

81

帖子

0

威望

405

eV
积分
486

Level 3 能力者

6#
 楼主 Author| 发表于 Post on 2023-6-28 08:53:22 | 只看该作者 Only view this author
highlight 发表于 2023-6-28 08:43
得不到负值就对了,你用的公式就不能输出负值
如果不明白,想想 arccoss 的值域
换一个定义式,使用 arct ...

好的,谢谢老师

81

帖子

0

威望

405

eV
积分
486

Level 3 能力者

7#
 楼主 Author| 发表于 Post on 2023-6-28 08:53:38 | 只看该作者 Only view this author
sobereva 发表于 2023-6-28 00:06
可以参考Multiwfn源代码包里util.f90里的xyz2dih_sign函数

好的,谢谢老师

本版积分规则 Credits rule

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

GMT+8, 2024-11-27 08:39 , Processed in 0.165895 second(s), 21 queries , Gzip On.

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