计算化学公社

标题: EasyCurling:构建环状/管状结构的轻量化工具 [打印本页]

作者
Author:
imasen    时间: 2025-4-20 04:34
标题: EasyCurling:构建环状/管状结构的轻量化工具
本帖最后由 imasen 于 2025-4-21 12:44 编辑

大家好,本贴向大家分享一个近期完成的小工具 —— EasyCurling。它可以将任意可重复的分子结构或晶胞结构进行复制和空间卷曲,从而快速构建出各类环状、管状周期性结构

程序下载:https://github.com/imasenHF/Easy ... syCurling_v1.1.0.7z

以环对苯撑的构建为例展示一下使用方法。输入的结构单元有两种形式:1.提供至少一个完整单元,并且两端需要保留环状结构中重复位置的原子(例如6,11),用于最后的缝合。2.提供至少一个完整单元,两端不需要保留重复原子(11),但需要提供两端距离最远的非重复原子(例如6,3)在环状结构中的间距(1.35埃),这种情况更适合非共价键连接的情况。对于环对苯撑提供的片段如下:
(, 下载次数 Times of downloads: 21)

启动EasyCurling.exe,依次输入:
path\CPP.xyz  ||输入原始 .xyz 文件路径
6,11  ||输入卷曲方向上距离最远的两个原子序号
1,3,5  ||定义平面(面向旋转中心的面)的三个原子序号
回车  ||定义从卷曲中心向外的方向的两个原子序号,如果是平面分子或是没有区分内外的必要,键入enter跳过
6  ||单元左端重复的原子序号,对于无重复原子的情况,键入enter跳过
11  ||单元右端重复的原子序号
12  ||设置重复单元数,取1时可对长链分子进行卷曲
1  ||选择卷曲类型:1 表示刚性卷曲(即不对结构做变换,直接复制并旋转),2 表示柔性卷曲(按重复单元数分配扇形区间,并对结构进行扇形变形)
q  ||输入其他的重复单元数,或输入'q'退出

运行完成后,EasyCurling.exe目录下会产生一个CPP_n12.xyz的结构文件。可以以[12]环对苯撑为单元,产生更加复杂的超分子化学结构,如下:
(, 下载次数 Times of downloads: 24)

下面展示几个其他的构建环状/管状结构的典型例子:

(, 下载次数 Times of downloads: 22)
碳纳米管的构建,同一个输入结构,选择不同的卷曲方向和缝合原子可以得到不同类型的碳纳米管。构建纯碳的纳米管有许多更方便的程序如NanotubeModeler等,如果碳管上有修饰本程序将更具优势。

(, 下载次数 Times of downloads: 22)
环状多肽的构建。需要注意的是使用柔性卷曲时,由于会对结构进行扇形变形,如果你的结构的径向厚度不显著小于环状结构的半径,那么环内外两侧的化学键会出现不同程度缩短和拉长,可能造成结构的不合理。所以在构建较小的环肽时,建议用甘氨酸这种无侧基的氨基酸先构建骨架,然后再手动添加侧基。

(, 下载次数 Times of downloads: 22)
无机纳米环/管的构建。对温石棉的结构单元,可分别构建Mg在内侧和Si在内侧的两种环状结构。对晶胞进行一维的扩展后,还可以构建纳米管结构。

为了避免处理同一个结构时,每次打开程序都要重复输入,examples文件夹下还提供了几个利用bat批处理脚本运行EasyCurling的例子。用户在第一次运行后记录下相关输入,后面都可以通过bat脚本运行。上面的例子均提供了输入文件,部分提供了bat脚本,用户可以根据脚本中的输入内容自己操作。

欢迎各位试用,提供反馈意见和建议。



作者
Author:
Uus/pMeC6H4-/キ    时间: 2025-4-20 10:43
这个也是python写完pyinstaller打包产生的可执行文件么?比起工具本身可能我更想知道代码的设计思路、编写方法,方便介绍一二不?

(如果“近期”是指在回答那个三维稠合环建模的帖子以来,那实在是高效啊)
作者
Author:
imasen    时间: 2025-4-20 18:11
本帖最后由 imasen 于 2025-4-20 18:12 编辑
Uus/pMeC6H4-/キ 发表于 2025-4-20 10:43
这个也是python写完pyinstaller打包产生的可执行文件么?比起工具本身可能我更想知道代码的设计思路、编写 ...

核心代码用nuitka转c编译成pyd文件后,再用pyinstaller打包的。
程序整体的思路是:

这个程序体量很小,完整代码也就两百来行,写得很快,输入菜单都交给chatGPT写的。上面的步骤2原理和相关代码放在下面。
  1. x_vals = coords[:, 0].copy()
  2. y_vals = coords[:, 1].copy()
  3. angles = (2 * np.pi / n) * (y_vals / d)
  4. coords[:, 0] = x_vals * np.cos(angles)
  5. coords[:, 1] = x_vals * np.sin(angles)
复制代码
(, 下载次数 Times of downloads: 21)
作者
Author:
苏玖染    时间: 2025-5-12 15:47
本帖最后由 苏玖染 于 2025-5-12 15:52 编辑

您好!如果我想把纤维素分子晶体操作成管状,需要定义很多连接键,可以实现吗?
作者
Author:
imasen    时间: 2025-5-12 17:16
苏玖染 发表于 2025-5-12 15:47
您好!如果我想把纤维素分子晶体操作成管状,需要定义很多连接键,可以实现吗?

你可以尝试先用单胞卷成环,然后再加上pbc,用gaussview延长成管,这样会简单点。
作者
Author:
苏玖染    时间: 2025-5-13 11:09
imasen 发表于 2025-5-12 17:16
你可以尝试先用单胞卷成环,然后再加上pbc,用gaussview延长成管,这样会简单点。

好的,非常感谢
作者
Author:
hzfish    时间: 2025-7-18 11:13
(, 下载次数 Times of downloads: 0) 如果能有把类似噻吩分子结构的重复单元2、5与3、4缝合或2、4与3、5卷成锥管的功能就好了。

作者
Author:
imasen    时间: 2025-7-18 17:55
hzfish 发表于 2025-7-18 11:13
如果能有把类似噻吩分子结构的重复单元2、5与3、4缝合或2、4与3、5卷成锥管的功能就好了。

有卷曲完的结构参考一下么?
作者
Author:
hzfish    时间: 2025-7-18 20:38
imasen 发表于 2025-7-18 17:55
有卷曲完的结构参考一下么?

重复单位和卷好的两种结构的xyz文件见附件。





欢迎光临 计算化学公社 (http://bbs.keinsci.com/) Powered by Discuz! X3.3