计算化学公社
标题: 可生成任意聚合度线形聚合物结构、拓扑以及电荷的在线程序 [打印本页]
作者Author: 王纪峰 时间: 4 day ago
标题: 可生成任意聚合度线形聚合物结构、拓扑以及电荷的在线程序
本帖最后由 王纪峰 于 2025-8-18 16:21 编辑
摘要:在含有聚合物的分子动力学模拟中,用户常常面临着高聚合度的聚合物结构搭建复杂,原子电荷赋予困难,难以构建非均聚物等问题。在这里,我们提出了一种基于原子编辑、节点矩阵以及邻接矩阵的聚合物生成方法,可生成任意聚合度线形聚合物结构(.pdb,.mol2,.xyz)、拓扑文件(Gromacs的.itp,.top)以及RESP电荷的在线程序。并且将其集成在了课题组开发的在线平台中(arXiv preprint arXiv:2507.04423, 2025.)(https://cleanenergymaterials.cn),用户仅需要选择生成聚合物的类别(均聚物、嵌段共聚物、交替共聚物、无规共聚物),并且输入每个组分的SMILES式以及重复单元数量,即可进行生成。平台同时也集成了基于组分贡献法预测用户输入的聚合物性质(Tg,Tm,拉伸强度、杨氏模量与静态介电常数)。
(, 下载次数 Times of downloads: 2)
使用方法:
(1)首先进入CEMP平台的聚合物模块(https://cleanenergymaterials.cn/polymer/generate_polymer_display),然后按照下图按顺序填写内容。
(, 下载次数 Times of downloads: 2)
其中需要特别注意的是,组分的SMILES必须含有明确的键接位点,例如对于乙烯基片段,应该写成
(, 下载次数 Times of downloads: 2)
(论坛似乎打不出来这个“方括号+星号+方括号”),而非CC,如果不按照要求,则会报错。
这种SMILES的获取方式可以通过chemdraw绘制,如下图所示:
(, 下载次数 Times of downloads: 2)
绘制后,框选分子,右键——molecule——copy as——SMILES,即可将分子复制到黏贴版上
除此之外,还需要注意Name必须由“英文字母”,“下划线”,“数字”构成(或者只包含英文字母),如果只使用数字,则可能产生不识别的问题。
用户初次体验时,可能存在对“带有键接”位点的SMILES了解的不够准确,导致写入错误的键接位点,平台提供了SMILESDrawer功能,能够快速帮助用户查看自己绘制的SMILES是否符合预期
SMILESDrawer:https://cleanenergymaterials.cn/autocompute/smilesdrawer
(, 下载次数 Times of downloads: 2)
(2)填写完毕后,用户可以点击“Predict Polymer”按钮进行初步性质预测(未上线,已接受,Chin. J. Polym. Sci. https://doi.org/10.1007/s10118-025-3402-y),也可以直接点击“Generate Polymer”开始聚合物生成。
值得注意的是,聚合物生成相对较慢,因为会调用结构优化对组分片段进行初步优化(b3lyp/6-311G** em=gd3bj scale=0.9682)并且生成计算RESP所必须的量子化学检查点文件,所以首先会返回任务的ID号,用户此时可以等待任务完成,任务完成后会发送提醒邮件到用户的注册邮箱中。
(, 下载次数 Times of downloads: 2)
(3)任务完成后,进入Query查询界面(https://cleanenergymaterials.cn/query/),上进行查看任务进度,任务完成后,将任务的TASK ID输入到上方搜索框中,并提交。
(, 下载次数 Times of downloads: 2)
此时会返回绘图文件的下载链接。
(, 下载次数 Times of downloads: 2)
(4)其中第一个链接为用户填写的表格,第二个链接为生成的聚合物的结构和拓扑文件:
(, 下载次数 Times of downloads: 2)
查看生成的效果:
(, 下载次数 Times of downloads: 2)
查看给出的itp以及top文件
(, 下载次数 Times of downloads: 2)
注意事项:
1. 拓扑文件的生成基于sob老师开发的Sobtop实现,力场为GAFF(暂时不支持更改)。
2. 目前仅支持生成适配Gromacs的itp以及top文件。
3. RESP电荷计算基于Multiwfn实现,需要引用Tian Lu, J. Chem. Phys., 161, 082503 (2024) DOI: 10.1063/5.0216272
4. 需要引用CEMP平台arXiv preprint arXiv:2507.04423, 2025.
作者Author: 牧生 时间: 4 day ago
本帖最后由 牧生 于 2025-8-18 13:58 编辑
可以说是很多人的急需了。但是我还是有点疑问。
这里没看懂噢
图中略有点看不清,可能说的是有个符号
(, 下载次数 Times of downloads: 2)
。。
第一个问题:
我用一个简单的结构去试试
(, 下载次数 Times of downloads: 2)
得到
(, 下载次数 Times of downloads: 2)
- Your key is: gAAAAABoorXMMGdCiLetDoMgKUnbfh_gbipPL4fNmNxtncCuAJarECD3Jbq70IACyMceiB5uPMsagGO6eWPBRQfhyFSkfyv1RDT1abUIxt85BoZZLjH6COnNfXfZt6JF5g2tH9JYbiyRNCB51yW6tcluBIKknLnWHgiBpSb_9eufJOkuhC2e7sE_FxRtheLjqZ7TVMQYxHvk6FMiOlhL996USy9HEb3FeHeUWUF-I0GEU_tzBPVz1xTKYiFLo1jTw60g8al4PYmWLXaCR5nd3e6Tlx92YquSyle7XOugcbOSzBkqEV2CWkXviWH_p0gzA_PaCSvOD63QJ7b8eSyD5XGha2cKcEUvorI7Ruwi5ozexIxipjTqB-FhEbcDg8xRsLD9Mj5XACqTKeHqkunhlr2HrTtXX7Bhx60kjevJ4sVKUu2H7uchBlQ=
复制代码
查询得到
- Failed to run notebook: 1_Polymer_RESP_repeat_unit.ipynb
- Return Code: 1
- Standard Output:
- Standard Error:
- [NbConvertApp] Converting notebook /data/jupyternotebook_public/Project15_AI_ML_BMS_JZZ/cemp/media/Polymer/GeneratePolymer/20250818_131036_4e8d68/1_Polymer_RESP_repeat_unit.ipynb to notebook
- Traceback (most recent call last):
- File "/data/jiazheju/anaconda3/envs/cemp_env/bin/jupyter-nbconvert", line 10, in
- sys.exit(main())
- File "/data/jiazheju/anaconda3/envs/cemp_env/lib/python3.9/site-packages/jupyter_core/application.py", line 283, in launch_instance
- super().launch_instance(argv=argv, **kwargs)
- File "/data/jiazheju/anaconda3/envs/cemp_env/lib/python3.9/site-packages/traitlets/config/application.py", line 1075, in launch_instance
- app.start()
- File "/data/jiazheju/anaconda3/envs/cemp_env/lib/python3.9/site-packages/nbconvert/nbconvertapp.py", line 420, in start
- self.convert_notebooks()
- File "/data/jiazheju/anaconda3/envs/cemp_env/lib/python3.9/site-packages/nbconvert/nbconvertapp.py", line 597, in convert_notebooks
- self.convert_single_notebook(notebook_filename)
- File "/data/jiazheju/anaconda3/envs/cemp_env/lib/python3.9/site-packages/nbconvert/nbconvertapp.py", line 563, in convert_single_notebook
- output, resources = self.export_single_notebook(
- File "/data/jiazheju/anaconda3/envs/cemp_env/lib/python3.9/site-packages/nbconvert/nbconvertapp.py", line 487, in export_single_notebook
- output, resources = self.exporter.from_filename(
- File "/data/jiazheju/anaconda3/envs/cemp_env/lib/python3.9/site-packages/nbconvert/exporters/exporter.py", line 201, in from_filename
- return self.from_file(f, resources=resources, **kw)
- File "/data/jiazheju/anaconda3/envs/cemp_env/lib/python3.9/site-packages/nbconvert/exporters/exporter.py", line 220, in from_file
- return self.from_notebook_node(
- File "/data/jiazheju/anaconda3/envs/cemp_env/lib/python3.9/site-packages/nbconvert/exporters/notebook.py", line 36, in from_notebook_node
- nb_copy, resources = super().from_notebook_node(nb, resources, **kw)
- File "/data/jiazheju/anaconda3/envs/cemp_env/lib/python3.9/site-packages/nbconvert/exporters/exporter.py", line 154, in from_notebook_node
- nb_copy, resources = self._preprocess(nb_copy, resources)
- File "/data/jiazheju/anaconda3/envs/cemp_env/lib/python3.9/site-packages/nbconvert/exporters/exporter.py", line 353, in _preprocess
- nbc, resc = preprocessor(nbc, resc)
- File "/data/jiazheju/anaconda3/envs/cemp_env/lib/python3.9/site-packages/nbconvert/preprocessors/base.py", line 48, in __call__
- return self.preprocess(nb, resources)
- File "/data/jiazheju/anaconda3/envs/cemp_env/lib/python3.9/site-packages/nbconvert/preprocessors/execute.py", line 103, in preprocess
- self.preprocess_cell(cell, resources, index)
- File "/data/jiazheju/anaconda3/envs/cemp_env/lib/python3.9/site-packages/nbconvert/preprocessors/execute.py", line 124, in preprocess_cell
- cell = self.execute_cell(cell, index, store_history=True)
- File "/data/jiazheju/anaconda3/envs/cemp_env/lib/python3.9/site-packages/jupyter_core/utils/__init__.py", line 165, in wrapped
- return loop.run_until_complete(inner)
- File "/data/jiazheju/anaconda3/envs/cemp_env/lib/python3.9/asyncio/base_events.py", line 647, in run_until_complete
- return future.result()
- File "/data/jiazheju/anaconda3/envs/cemp_env/lib/python3.9/site-packages/nbclient/client.py", line 1062, in async_execute_cell
- await self._check_raise_for_error(cell, cell_index, exec_reply)
- File "/data/jiazheju/anaconda3/envs/cemp_env/lib/python3.9/site-packages/nbclient/client.py", line 918, in _check_raise_for_error
- raise CellExecutionError.from_cell_and_msg(cell, exec_reply_content)
- nbclient.exceptions.CellExecutionError: An error occurred while executing the following cell:
- ------------------
- # 创建成功和失败的文件夹
- os.makedirs('Gaussian/RESPpolymer/success', exist_ok=True)
- os.makedirs('Gaussian/RESPpolymer/failure', exist_ok=True)
- # 定义Gaussian生成文件路径
- base_dir = 'Gaussian/RESPpolymer'
- success_dir = os.path.join(base_dir, 'success')
- failure_dir = os.path.join(base_dir, 'failure')
- # 设置opt+freq文件夹路径
- Gaussian_path = "Gaussian/RESPpolymer/success"
- #检查存储结构优化的文件Gaussian_database是否存在于当前账户上
- gaussian_database_path, optfreq_gaussian_database_path, RESPpolymer_database_path = check_and_create_gaussian_database()
- # 获取System.xlsx的dataframe,以及存储聚合物名称的列表
- df, polymers = read_excel_and_create_lists('System_homopolymer.xlsx')
- # 拷贝聚合物的文件,从数据库拷贝到当前目录下
- not_found_polymers, found_polymers = copy_files_for_polymers(
- RESPpolymer_database_path,
- success_dir,
- polymers
- )
- total_polymers = not_found_polymers + found_polymers
- # 为未找到的聚合物重复单元创建Gaussian输入文件和电荷约束文件chgcons.txt
- create_input_files_for_missing_polymers(df, not_found_polymers)
- # 以下部分不能放在上面的循环中,否则会重复调用Gaussian进行计算
- # 调用Gaussian对重复单元进行结构优化,同时进行静电势计算
- calculate(success_dir, failure_dir, MAX_TASKS=1)
- # 将结构优化成功的聚合物重复单元文件复制到Gaussian_database/RESPpolymer中
- copy_newly_calculated_files(RESPpolymer_database_path, success_dir, not_found_polymers)
- # 将当前目录下的chk文件转化为fchk文件
- convert_chk_to_fchk(Gaussian_path)
- # 创建断点文件 test1_pass.txt
- with open("test1_pass.txt", "w") as f:
- f.write("convert_chk_to_fchk completed successfully.\n")
- # 对当前目录下所有聚合物,计算重复单元的RESP电荷
- create_repeatunit_chg(total_polymers)
- # 创建断点文件 test2_pass.txt
- with open("test2_pass.txt", "w") as f:
- f.write("create_repeatunit_chg completed successfully.\n")
- ------------------
- ----- stdout -----
- Gaussian_database文件夹已存在于/data/Gaussian_database。
- Found polymers: []
- Polymers not found: ['12']
- ------------------
- [0;31m---------------------------------------------------------------------------[0m
- [0;31mIndexError[0m Traceback (most recent call last)
- Cell [0;32mIn[18], line 29[0m
- [1;32m 26[0m total_polymers [38;5;241m=[39m not_found_polymers [38;5;241m+[39m found_polymers
- [1;32m 28[0m [38;5;66;03m# 为未找到的聚合物重复单元创建Gaussian输入文件和电荷约束文件chgcons.txt[39;00m
- [0;32m---> 29[0m [43mcreate_input_files_for_missing_polymers[49m[43m([49m[43mdf[49m[43m,[49m[43m [49m[43mnot_found_polymers[49m[43m)[49m
- [1;32m 31[0m [38;5;66;03m# 以下部分不能放在上面的循环中,否则会重复调用Gaussian进行计算 [39;00m
- [1;32m 32[0m [38;5;66;03m# 调用Gaussian对重复单元进行结构优化,同时进行静电势计算[39;00m
- [1;32m 33[0m calculate(success_dir, failure_dir, MAX_TASKS[38;5;241m=[39m[38;5;241m1[39m)
- Cell [0;32mIn[16], line 4[0m, in [0;36mcreate_input_files_for_missing_polymers[0;34m(df, missing_polymers)[0m
- [1;32m 2[0m [38;5;28;01mdef[39;00m [38;5;21mcreate_input_files_for_missing_polymers[39m(df, missing_polymers):
- [1;32m 3[0m [38;5;28;01mfor[39;00m name [38;5;129;01min[39;00m missing_polymers:
- [0;32m----> 4[0m smiles [38;5;241m=[39m [43mdf[49m[43m[[49m[43mdf[49m[43m[[49m[38;5;124;43m'[39;49m[38;5;124;43mName[39;49m[38;5;124;43m'[39;49m[43m][49m[43m [49m[38;5;241;43m==[39;49m[43m [49m[43mname[49m[43m][49m[43m[[49m[38;5;124;43m'[39;49m[38;5;124;43mSMILES[39;49m[38;5;124;43m'[39;49m[43m][49m[38;5;241;43m.[39;49m[43miloc[49m[43m[[49m[38;5;241;43m0[39;49m[43m][49m
- [1;32m 5[0m [38;5;66;03m# 获取重复单元的端基索引,非端基索引和重复单元的电荷信息[39;00m
- [1;32m 6[0m terminal_indices, non_terminal_indices, repeatunit_charge [38;5;241m=[39m create_repeatunit_Gaussian_inputfile(df, smiles, name)
- File [0;32m/data/jiazheju/anaconda3/envs/cemp_env/lib/python3.9/site-packages/pandas/core/indexing.py:1191[0m, in [0;36m_LocationIndexer.__getitem__[0;34m(self, key)[0m
- [1;32m 1189[0m maybe_callable [38;5;241m=[39m com[38;5;241m.[39mapply_if_callable(key, [38;5;28mself[39m[38;5;241m.[39mobj)
- [1;32m 1190[0m maybe_callable [38;5;241m=[39m [38;5;28mself[39m[38;5;241m.[39m_check_deprecated_callable_usage(key, maybe_callable)
- [0;32m-> 1191[0m [38;5;28;01mreturn[39;00m [38;5;28;43mself[39;49m[38;5;241;43m.[39;49m[43m_getitem_axis[49m[43m([49m[43mmaybe_callable[49m[43m,[49m[43m [49m[43maxis[49m[38;5;241;43m=[39;49m[43maxis[49m[43m)[49m
- File [0;32m/data/jiazheju/anaconda3/envs/cemp_env/lib/python3.9/site-packages/pandas/core/indexing.py:1752[0m, in [0;36m_iLocIndexer._getitem_axis[0;34m(self, key, axis)[0m
- [1;32m 1749[0m [38;5;28;01mraise[39;00m [38;5;167;01mTypeError[39;00m([38;5;124m"[39m[38;5;124mCannot index by location index with a non-integer key[39m[38;5;124m"[39m)
- [1;32m 1751[0m [38;5;66;03m# validate the location[39;00m
- [0;32m-> 1752[0m [38;5;28;43mself[39;49m[38;5;241;43m.[39;49m[43m_validate_integer[49m[43m([49m[43mkey[49m[43m,[49m[43m [49m[43maxis[49m[43m)[49m
- [1;32m 1754[0m [38;5;28;01mreturn[39;00m [38;5;28mself[39m[38;5;241m.[39mobj[38;5;241m.[39m_ixs(key, axis[38;5;241m=[39maxis)
- File [0;32m/data/jiazheju/anaconda3/envs/cemp_env/lib/python3.9/site-packages/pandas/core/indexing.py:1685[0m, in [0;36m_iLocIndexer._validate_integer[0;34m(self, key, axis)[0m
- [1;32m 1683[0m len_axis [38;5;241m=[39m [38;5;28mlen[39m([38;5;28mself[39m[38;5;241m.[39mobj[38;5;241m.[39m_get_axis(axis))
- [1;32m 1684[0m [38;5;28;01mif[39;00m key [38;5;241m>[39m[38;5;241m=[39m len_axis [38;5;129;01mor[39;00m key [38;5;241m<[39m [38;5;241m-[39mlen_axis:
- [0;32m-> 1685[0m [38;5;28;01mraise[39;00m [38;5;167;01mIndexError[39;00m([38;5;124m"[39m[38;5;124msingle positional indexer is out-of-bounds[39m[38;5;124m"[39m)
- [0;31mIndexError[0m: single positional indexer is out-of-bounds
复制代码
第二个问题:
针对一个简单的结构丙烯酰胺,无论用
C(C)C(=O)N 或者
(, 下载次数 Times of downloads: 2)
,或者
(, 下载次数 Times of downloads: 2)
,都不行。。
PS:方括号里面放个*,这个符号不能出现在回帖的文本里面,会变格式。。只能用图了
作者Author: 王纪峰 时间: 4 day ago
感谢您的建议!
对于第一个问题:的确帖子内好像打不出“方括号+星号+方括号”,SMILES的输入就应该是您说的这个形式,含有键接位点。这个问题我已在帖子内更正。
对于第二个问题,我发现问题出在Name的命名上,导致没有被识别,您可能需要使用“英文字母,下划线,数字”组成的Name进行命名,我修改Name后可以成功运行。(这点我在帖子中已强调)
对于第三个问题,丙烯酰胺的结构,我这边后台看到您使用(含有键接位点的SMILES)任务成功了,的应该已经success了,您可以再试一试看看。
再次感谢您愿意抽出时间测试
作者Author: 牧生 时间: 4 day ago
本帖最后由 牧生 于 2025-8-18 16:18 编辑
请帮我看下我的操作有何不妥吗?
我用AM,C=CC(N)=O,改成 [方括号*]C=C[方括号*]C(N)=O,提交上去得到了
- Your request has been submitted successfully.
- Your key is: gAAAAABootoetREtaqqQhgnqsAyzvSv9UzhWYRbqf6DmXn1GobNqb49VAAUusLWCtInWRLVL8-yzp-lXWJfp12wZ90c50hE4N4j-VttlTmPjDO7XTeeOQFl915SCtzD9Kuw_vIppL_uNaLDFGfGbqyTjYjcQmGWBwWFiKacdG3nbdVvX7d09hjlNBS4mggUlvdFYOfO4is0P4nCvbY6_tGDaToOrsCVpl9Pf-otnudvJM8TKKhLtZUIyKz-BiU1O7MrsA8upyoTe_z0i_0H3NqqivkhkNouect9MKCKEx31U5ADDW6U-LD-WU0fRlhfbIEF_KvB9KUK5eCxyJY8T-izyZCWzpQUQy1yJjJXHiUaOK-G6nceWDSTQSeOytvpXlc29tS77edoTYNLSz2Zk6y5LDndUjOJsnlpc4p-NUXj4_fT6D4eQN58=
复制代码
但是查询还是
- Task failed. Please review the error details below:
复制代码 即时使用[方括号*]CC[方括号*]C(N)=O,照样是 failed
然后换用了一个丙烯酸的阴离子结构
(, 下载次数 Times of downloads: 2)
得到的是C=CC([O])=O,那么我改成了 [方括号*]C=C[方括号*]C([O])=O,名字写成AA,重复5个
得到
- <blockquote>Your request has been submitted successfully.
复制代码
然后查询得到的结果看起来都对。
(, 下载次数 Times of downloads: 2)
下载回来得到一个压缩包,解压得到
(, 下载次数 Times of downloads: 2)
但是VMD打开就不对了
(, 下载次数 Times of downloads: 2)
还有,polymer_AA.chg的格式可能不对,使用Multiwfn无法打开
作者Author: 王纪峰 时间: 4 day ago
(, 下载次数 Times of downloads: 2)
C=CC(N)=O的聚合物形式应该写成上图所示:必须要暴露出来键接位点
作者Author: 王纪峰 时间: 4 day ago
本帖最后由 王纪峰 于 2025-8-18 16:17 编辑
感谢您的测试,我发现您的问题源于错误的键接位点表示形式,我已经在下一楼中写明了正确的形式,期待您的再次使用!
您同样可以在我们平台提供的SMILESDrawer(https://cleanenergymaterials.cn/autocompute/smilesdrawer)中查看自己SMILES的结果是否正确。
SMILESDrawer的使用已经添加在帖子的描述中。
作者Author: 牧生 时间: 4 day ago
本帖最后由 牧生 于 2025-8-18 17:14 编辑
第一个问题,得到的聚合物是一个简单的重复的结构,似乎没有考虑端基饱和的问题
(, 下载次数 Times of downloads: 2)
第二个问题,得到的聚合物的电荷的chg文件格式不规范,Multiwfn不能打开,且缺失了几个原子的电荷
(, 下载次数 Times of downloads: 2)
第二个链接得到的是一个excel的表格,不是压缩包。
(, 下载次数 Times of downloads: 2)
请大佬用丙烯酸阴离子结构,直接走一遍,录个屏也行,教教我。
作者Author: lmch 时间: 4 day ago
测试了一下,发现得到的聚合物结构主链是随机弯曲折叠的,请问实际中这种随机的弯曲折叠对链的性质会有实际影响吗?
作者Author: 王纪峰 时间: 4 day ago
本帖最后由 王纪峰 于 2025-8-18 18:54 编辑
影响是有的,一般来说比较适合那种无定形,非刚性的聚合物。如果是刚性聚合物,降低重复单元数量,同样也能生成相对刚性的线性结构。
还有值得注意的是,如果对聚合物构象要求比较高,生成的结果需要事先跑NVT让其预平衡一下,不过这样比较麻烦了。
作者Author: 王纪峰 时间: 4 day ago
本帖最后由 王纪峰 于 2025-8-18 20:48 编辑
第一个问题:感谢您的建议,端基饱和目前只支持采用H饱和,因为我所接触的大部分研究中对端基研究较少,基本都是对聚合物本身结构进行研究的,不过从算法层面上来说,用什么基团饱和都是可以调整的,之后我可以逐步新增功能对其调整。
第二个问题:本身就是一个表格文件以及一个文件夹
第三个问题,这边给出一个非常详细的示例,后台看到您的丙烯酸加了双键,但是实际在聚合时,双键是打开的,所以导致了原子电荷不匹配的问题。
(, 下载次数 Times of downloads: 2)
提交计算
(, 下载次数 Times of downloads: 2)
查看结果
(, 下载次数 Times of downloads: 2)
结果一个为表格,一个为文件夹(文件夹里包含拓扑文件polymer_topology与结构文件polymer_structure)
(, 下载次数 Times of downloads: 2)
结构文件:
(, 下载次数 Times of downloads: 2)
电荷文件
(, 下载次数 Times of downloads: 2)
示例的ID号(您可以输入该ID查看结果)
gAAAAABooxp5gWk8Nk4Deu2ene6m5olf9X_0chNbeuyNR3k_UFTEUvKHkLSuKxiec3elzUyhsxRmz03XQ4iBVjtwjB3VgUQ6ME3xsp17f4Kk8BuOXA2nGXEXjaYrZv4jN9rDC6TGLOwaS9w4P_z2VjepsiwAZAqMczaOas1V6cb825eJGqMdbwlI1ly6X5NbgOXqRH8Kq8ymufpWmAk9JyTr5lKXj-24L-5PjxNKwGdoEW5iZTCohaNtNOkNBMgLbOXHVYdA-lW8q7sCKogaVGM8mQnznKQltkNeiuOhMuhzT6hky9l2ryRhAb73xIvYPTzlSbLr3une2DiPCYyKgiq-P1wRWjObMWkhXd_lijUjiqlLzUnMBQ0mL8vxbf6RvoLRYX4Dzw0h7JdkT3zaXUzg3BndFyTgr6qQ94RgLKJdmd_kcVzAE9w=
作者Author: 含光君 时间: 3 day ago
本帖最后由 含光君 于 2025-8-19 10:30 编辑
感谢楼主分享,我提交了一个任务,但不太明白结果从哪里获取。
邮箱收到的邮件提示:
- Task Details:
- - Task Type: Generate_random_copolymer
- - Submission Time: 2025-08-19 01:47:56
- - Completion Time: 2025-08-19 01:57:05
- - Task Status: Success
复制代码
但邮件中给出的链接无法访问 (504 Gateway Timeout)
Query中显示success,
(, 下载次数 Times of downloads: 2)
但是查了Task ID 显示失败。
Task ID:
gAAAAABoo9fMNG_3QEsA9qKDCxG2pXOJqSQC5AvO1CQNKUlNl05mKZ78HB5Ue8uQ6pwgteJQ5HjWuNwlJLUiSvMYFxX4Ra2DQ3jUuH9hZdUiGERVaMcvf2kgl4VXYmt7y8U7eqcEyPqkvfWIZlHi97hiK9ii_LxAz-LHiBAn73BeWpE-HvdddLDn-XsxPUgx7dxZ5928yeW9vDV7QNYNeepD3zXvH59dZYYH11vGiBU_abiaNyPLpJIcSLh9D7k0Mb2aZSFAM34o6cRCavcTlqTYMHqsKhOj6Y2RltFAnmD2LyDFWYti-4kSa0BvMWMoysy3bwuLnzuHymxQI8AzDv6lT19PzTQkldhZAr8IRkEbWf3ELQ4QmCO_wgHPSyyIrpypA1TIs4IUGWFLpQ5M67mNkXUhqfQ_N4ptGop8bskBezKvHPxeLDctX4crGwaAd-w46ofUoZEQ
(, 下载次数 Times of downloads: 2)
所以我不知道具体算成功没有,请楼主帮忙check下,谢谢
作者Author: 牧生 时间: 3 day ago
本帖最后由 牧生 于 2025-8-19 13:07 编辑
感谢大佬这个好工具,我现在都已经可以成功生成聚合物了。
现在总结之前不成功的原因,是SMILES格式的文件不正规造成。
至于端基饱和的问题,我觉得用氢原子饱和,或者甲基饱和,确实不会影响聚合物链本身的性质
作者Author: 王纪峰 时间: 3 day ago
后台检查发现您的SMILES(gr1)解析存在问题,可能需要进一步核对,您的N原子化合价不对
(, 下载次数 Times of downloads: 2)
作者Author: 含光君 时间: 3 day ago
明白啦,我再check一下,谢谢楼主
作者Author: 科研小白0126 时间: 3 day ago
大佬我这是smile格式不对吗,纯小白
Failed to run notebook: 2_Polymer_chg_and_Polymer_creation_ Linear_polymer.ipynb
Return Code: 1
Standard Output:
Standard Error:
[NbConvertApp] Converting notebook /data/jupyternotebook_public/Project15_AI_ML_BMS_JZZ/cemp/media/Polymer/GeneratePolymer/20250819_212106_f3b689/2_Polymer_chg_and_Polymer_creation_ Linear_polymer.ipynb to notebook
Traceback (most recent call last):
File "/data/jiazheju/anaconda3/envs/cemp_env/bin/jupyter-nbconvert", line 10, in
sys.exit(main())
File "/data/jiazheju/anaconda3/envs/cemp_env/lib/python3.9/site-packages/jupyter_core/application.py", line 283, in launch_instance
super().launch_instance(argv=argv, **kwargs)
File "/data/jiazheju/anaconda3/envs/cemp_env/lib/python3.9/site-packages/traitlets/config/application.py", line 1075, in launch_instance
app.start()
File "/data/jiazheju/anaconda3/envs/cemp_env/lib/python3.9/site-packages/nbconvert/nbconvertapp.py", line 420, in start
self.convert_notebooks()
File "/data/jiazheju/anaconda3/envs/cemp_env/lib/python3.9/site-packages/nbconvert/nbconvertapp.py", line 597, in convert_notebooks
self.convert_single_notebook(notebook_filename)
File "/data/jiazheju/anaconda3/envs/cemp_env/lib/python3.9/site-packages/nbconvert/nbconvertapp.py", line 563, in convert_single_notebook
output, resources = self.export_single_notebook(
File "/data/jiazheju/anaconda3/envs/cemp_env/lib/python3.9/site-packages/nbconvert/nbconvertapp.py", line 487, in export_single_notebook
output, resources = self.exporter.from_filename(
File "/data/jiazheju/anaconda3/envs/cemp_env/lib/python3.9/site-packages/nbconvert/exporters/exporter.py", line 201, in from_filename
return self.from_file(f, resources=resources, **kw)
File "/data/jiazheju/anaconda3/envs/cemp_env/lib/python3.9/site-packages/nbconvert/exporters/exporter.py", line 220, in from_file
return self.from_notebook_node(
File "/data/jiazheju/anaconda3/envs/cemp_env/lib/python3.9/site-packages/nbconvert/exporters/notebook.py", line 36, in from_notebook_node
nb_copy, resources = super().from_notebook_node(nb, resources, **kw)
File "/data/jiazheju/anaconda3/envs/cemp_env/lib/python3.9/site-packages/nbconvert/exporters/exporter.py", line 154, in from_notebook_node
nb_copy, resources = self._preprocess(nb_copy, resources)
File "/data/jiazheju/anaconda3/envs/cemp_env/lib/python3.9/site-packages/nbconvert/exporters/exporter.py", line 353, in _preprocess
nbc, resc = preprocessor(nbc, resc)
File "/data/jiazheju/anaconda3/envs/cemp_env/lib/python3.9/site-packages/nbconvert/preprocessors/base.py", line 48, in __call__
return self.preprocess(nb, resources)
File "/data/jiazheju/anaconda3/envs/cemp_env/lib/python3.9/site-packages/nbconvert/preprocessors/execute.py", line 103, in preprocess
self.preprocess_cell(cell, resources, index)
File "/data/jiazheju/anaconda3/envs/cemp_env/lib/python3.9/site-packages/nbconvert/preprocessors/execute.py", line 124, in preprocess_cell
cell = self.execute_cell(cell, index, store_history=True)
File "/data/jiazheju/anaconda3/envs/cemp_env/lib/python3.9/site-packages/jupyter_core/utils/__init__.py", line 165, in wrapped
return loop.run_until_complete(inner)
File "/data/jiazheju/anaconda3/envs/cemp_env/lib/python3.9/asyncio/base_events.py", line 647, in run_until_complete
return future.result()
File "/data/jiazheju/anaconda3/envs/cemp_env/lib/python3.9/site-packages/nbclient/client.py", line 1062, in async_execute_cell
await self._check_raise_for_error(cell, cell_index, exec_reply)
File "/data/jiazheju/anaconda3/envs/cemp_env/lib/python3.9/site-packages/nbclient/client.py", line 918, in _check_raise_for_error
raise CellExecutionError.from_cell_and_msg(cell, exec_reply_content)
nbclient.exceptions.CellExecutionError: An error occurred while executing the following cell:
------------------
if __name__ == '__main__':
main()
------------------
----- stdout -----
--------PQx-IT-------PQx-IT----------PQx-IT--------PQx-IT---------PQx-IT-------PQx-IT----------PQx-IT--------PQx-IT--------
------------------
[0;31m---------------------------------------------------------------------------[0m
[0;31mFileNotFoundError[0m Traceback (most recent call last)
Cell [0;32mIn[26], line 2[0m
[1;32m 1[0m [38;5;28;01mif[39;00m [38;5;18m__name__[39m [38;5;241m==[39m [38;5;124m'[39m[38;5;124m__main__[39m[38;5;124m'[39m:
[0;32m----> 2[0m [43mmain[49m[43m([49m[43m)[49m
Cell [0;32mIn[25], line 16[0m, in [0;36mmain[0;34m()[0m
[1;32m 14[0m smiles [38;5;241m=[39m df[38;5;241m.[39mloc[df[[38;5;124m'[39m[38;5;124mName[39m[38;5;124m'[39m] [38;5;241m==[39m name, [38;5;124m'[39m[38;5;124mSMILES[39m[38;5;124m'[39m][38;5;241m.[39mvalues[[38;5;241m0[39m]
[1;32m 15[0m n [38;5;241m=[39m [38;5;28mint[39m(df[38;5;241m.[39mloc[df[[38;5;124m'[39m[38;5;124mName[39m[38;5;124m'[39m] [38;5;241m==[39m name, [38;5;124m'[39m[38;5;124mrepeating unit[39m[38;5;124m'[39m][38;5;241m.[39mvalues[[38;5;241m0[39m])
[0;32m---> 16[0m [43mprocessing[49m[43m([49m[43mname[49m[43m,[49m[43m [49m[43msmiles[49m[43m,[49m[43m [49m[43mn[49m[43m)[49m
[1;32m 17[0m [38;5;28mprint[39m([38;5;124mf[39m[38;5;124m"[39m[38;5;124m--------[39m[38;5;132;01m{[39;00mname[38;5;132;01m}[39;00m[38;5;124m-------[39m[38;5;132;01m{[39;00mname[38;5;132;01m}[39;00m[38;5;124m----------[39m[38;5;132;01m{[39;00mname[38;5;132;01m}[39;00m[38;5;124m--------[39m[38;5;132;01m{[39;00mname[38;5;132;01m}[39;00m[38;5;124m---------[39m[38;5;132;01m{[39;00mname[38;5;132;01m}[39;00m[38;5;124m-------[39m[38;5;132;01m{[39;00mname[38;5;132;01m}[39;00m[38;5;124m----------[39m[38;5;132;01m{[39;00mname[38;5;132;01m}[39;00m[38;5;124m--------[39m[38;5;132;01m{[39;00mname[38;5;132;01m}[39;00m[38;5;124m--------[39m[38;5;124m"[39m)
Cell [0;32mIn[24], line 16[0m, in [0;36mprocessing[0;34m(polymer_name, smiles, n, nproc, mem)[0m
[1;32m 13[0m mol [38;5;241m=[39m Chem[38;5;241m.[39mMolFromSmiles(smiles)
[1;32m 15[0m [38;5;66;03m# 获取聚合物链重复单元的原子电荷[39;00m
[0;32m---> 16[0m repeat_unit_charges [38;5;241m=[39m [43mrepeat_unit_charge_list[49m[43m([49m[43mchg_filename[49m[43m)[49m
[1;32m 18[0m [38;5;66;03m# 获取聚合物链端基聚合位点的原子电荷信息[39;00m
[1;32m 19[0m end_group_atom_charges_dict [38;5;241m=[39m create_end_group_atom_charges_dict(repeat_unit_charges, mol, n)
Cell [0;32mIn[5], line 7[0m, in [0;36mrepeat_unit_charge_list[0;34m(chg_filename)[0m
[1;32m 3[0m [38;5;250m[39m[38;5;124;03m'''[39;00m
[1;32m 4[0m [38;5;124;03mchg_filename:聚合物单个重复单元的电荷信息文件[39;00m
[1;32m 5[0m [38;5;124;03m'''[39;00m
[1;32m 6[0m repeat_unit_charges [38;5;241m=[39m []
[0;32m----> 7[0m [38;5;28;01mwith[39;00m [38;5;28;43mopen[39;49m[43m([49m[43mchg_filename[49m[43m,[49m[43m [49m[38;5;124;43m'[39;49m[38;5;124;43mr[39;49m[38;5;124;43m'[39;49m[43m)[49m [38;5;28;01mas[39;00m file:
[1;32m 8[0m [38;5;28;01mfor[39;00m line [38;5;129;01min[39;00m file:
[1;32m 9[0m [38;5;66;03m# 假设电荷信息在每行的最后一列[39;00m
[1;32m 10[0m repeat_unit_charges[38;5;241m.[39mappend([38;5;28mfloat[39m(line[38;5;241m.[39msplit()[[38;5;241m-[39m[38;5;241m1[39m]))
File [0;32m/data/jiazheju/anaconda3/envs/cemp_env/lib/python3.9/site-packages/IPython/core/interactiveshell.py:284[0m, in [0;36m_modified_open[0;34m(file, *args, **kwargs)[0m
[1;32m 277[0m [38;5;28;01mif[39;00m file [38;5;129;01min[39;00m {[38;5;241m0[39m, [38;5;241m1[39m, [38;5;241m2[39m}:
[1;32m 278[0m [38;5;28;01mraise[39;00m [38;5;167;01mValueError[39;00m(
[1;32m 279[0m [38;5;124mf[39m[38;5;124m"[39m[38;5;124mIPython won[39m[38;5;124m'[39m[38;5;124mt let you open fd=[39m[38;5;132;01m{[39;00mfile[38;5;132;01m}[39;00m[38;5;124m by default [39m[38;5;124m"[39m
[1;32m 280[0m [38;5;124m"[39m[38;5;124mas it is likely to crash IPython. If you know what you are doing, [39m[38;5;124m"[39m
[1;32m 281[0m [38;5;124m"[39m[38;5;124myou can use builtins[39m[38;5;124m'[39m[38;5;124m open.[39m[38;5;124m"[39m
[1;32m 282[0m )
[0;32m--> 284[0m [38;5;28;01mreturn[39;00m [43mio_open[49m[43m([49m[43mfile[49m[43m,[49m[43m [49m[38;5;241;43m*[39;49m[43margs[49m[43m,[49m[43m [49m[38;5;241;43m*[39;49m[38;5;241;43m*[39;49m[43mkwargs[49m[43m)[49m
[0;31mFileNotFoundError[0m: [Errno 2] No such file or directory: 'PQx-IT.chg'
作者Author: 王纪峰 时间: 前天 10:29
认真看帖子,写的SMILES明显不对,键接位点呢
作者Author: 王纪峰 时间: 前天 10:30
SMILES的问题在上面已经回答的非常详细了,请仔细核对SMILES是否正确,类似问题不再回答
作者Author: 牧生 时间: 前天 12:22
本帖最后由 牧生 于 2025-8-20 12:23 编辑
一般情况下,很多人用chemdraw画结构式,没有很注意那个连接位点,包括我自己也从来就没注意过那个*号表示连接点。。
我在这里帖一下方法。。
用丙烯酸为例:
因为组合成聚合物链,是一个重复过程,所以,必须画重复的单元,*号视为那个连接的点,需要在两端分别点上一个*号,且电荷必须正确。
(, 下载次数 Times of downloads: 1)
得到的结果就是这样的结构式
(, 下载次数 Times of downloads: 1)
然后复制为SMILES
(, 下载次数 Times of downloads: 1)
得到
(, 下载次数 Times of downloads: 1)
作者Author: xiaowu759 时间: 前天 15:49
It sounds good. I'll try it.
作者Author: 科研小白0126 时间: 前天 15:49
感谢大神终于知道怎么在smiles里找连接位点了
作者Author: 科研小白0126 时间: 前天 15:49
万分感谢您的回复
作者Author: 科研小白0126 时间: 前天 15:59
您好方便问一下您这是chemdraw哪个版本吗,我的ChemDraw 22.0.0 64未找到该工具
作者Author: 牧生 时间: 前天 16:09
你能给某个原子标正负电荷,就能标上那个*
我用的很旧了,还是2012版的
作者Author: 科研小白0126 时间: 前天 18:12
打扰您了,我这个两个任务正在进行是只有完全结束才会显示在下面的任务历史的吗
作者Author: 科研小白0126 时间: 前天 18:17
这两个任务是我的吗老师,我看下面历史记录和我提交的时间不一样
作者Author: 王纪峰 时间: 前天 20:12
后台发现您这边输入的单体SMILES过于复杂,在转化为SMILES转化为3D结构的过程出现了问题,导致失败,目前正在想方法解决。
作者Author: 科研小白0126 时间: 前天 20:42
好的谢谢您
作者Author: 王纪峰 时间: yesterday 11:18
其实不需要使用工具来写键接位点,直接使用文本编辑,在键接位点处用文本写入*即可(注意对其位点)
欢迎光临 计算化学公社 (http://ccc.keinsci.com/) |
Powered by Discuz! X3.3 |