gpt4 book ai didi

python - 图表中的微笑

转载 作者:太空狗 更新时间:2023-10-29 23:56:49 26 4
gpt4 key购买 nike

是否有将图形(或邻接矩阵)转换为 SMILES 字符串的方法或程序包?

例如,我知道原子是[6 6 7 6 6 6 6 8] ([C C N C C C C O]),邻接矩阵是

[[ 0.,  1.,  0.,  0.,  0.,  0.,  0.,  0.],

[ 1., 0., 2., 0., 0., 0., 0., 1.],

[ 0., 2., 0., 1., 0., 0., 0., 0.],

[ 0., 0., 1., 0., 1., 0., 0., 0.],

[ 0., 0., 0., 1., 0., 1., 0., 0.],

[ 0., 0., 0., 0., 1., 0., 1., 1.],

[ 0., 0., 0., 0., 0., 1., 0., 0.],

[ 0., 1., 0., 0., 0., 1., 0., 0.]]

我需要一些函数来输出 'CC1=NCCC(C)O1'

如果某个函数可以输出相应的“mol”对象,它也可以工作。 RDkit 软件具有 'MolFromSmiles' 功能。我想知道是否有类似 'MolFromGraphs' 的东西。

最佳答案

这是一个简单的解决方案,据我所知,在 RDKit 中没有内置函数。

def MolFromGraphs(node_list, adjacency_matrix):

# create empty editable mol object
mol = Chem.RWMol()

# add atoms to mol and keep track of index
node_to_idx = {}
for i in range(len(node_list)):
a = Chem.Atom(node_list[i])
molIdx = mol.AddAtom(a)
node_to_idx[i] = molIdx

# add bonds between adjacent atoms
for ix, row in enumerate(adjacency_matrix):
for iy, bond in enumerate(row):

# only traverse half the matrix
if iy <= ix:
continue

# add relevant bond type (there are many more of these)
if bond == 0:
continue
elif bond == 1:
bond_type = Chem.rdchem.BondType.SINGLE
mol.AddBond(node_to_idx[ix], node_to_idx[iy], bond_type)
elif bond == 2:
bond_type = Chem.rdchem.BondType.DOUBLE
mol.AddBond(node_to_idx[ix], node_to_idx[iy], bond_type)

# Convert RWMol to Mol object
mol = mol.GetMol()

return mol
Chem.MolToSmiles(MolFromGraphs(nodes, a))

输出:
'CC1=NCCC(C)O1'

此解决方案是 https://github.com/dakoner/keras-molecules/blob/dbbb790e74e406faa70b13e8be8104d9e938eba2/convert_rdkit_to_networkx.py 的简化版本

可能需要设置许多其他原子属性(例如手性或质子化状态)和键类型(三键、配位...)。如果可能(如上面的链接所示),最好在图表中明确跟踪这些内容,但如果需要,也可以扩展此功能以合并这些内容。

关于python - 图表中的微笑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51195392/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com