用python计算分子中原子的化合价

计算科学 模拟
2021-12-01 13:08:33

indigo 模块的文档可以在这里找到

http://ggasoftware.com/opensource/indigo/api#inputoutput

因此,例如,如果我有一些 SMILES 字符串的分子对象,例如"[C](=[O])",我希望计算每个原子的化合价,例如这里所需的输出将是[atom=C, unbound_electrons=2],[atom=O, valency=0]

如果我考虑原子"[C]" 谁能解释为什么这个代码打印[atom=C, unbound_electrons=0][atom=C, unbound_electrons=4]

from indigo import *
indigo = Indigo()

mol=indigo.loadMolecule("[C]")

print(mol.grossFormula(),"\n")

for atom in mol.iterateAtoms():
        print([atom.symbol(),atom.radicalElectrons()])

如果我可以生成与 结合使用的原子上的键类型列表,我可以计算出来atom.atomicNumber()例如,如果我可以说[C]有一个双键,我可以取它的原子序数 - 2(第二个壳) - 2(双键)

这对于可视化我正在谈论的内容可能很有用

from indigo_renderer import *
renderer = IndigoRenderer(indigo)
renderer.renderToFile(mol,"mol.png")
1个回答

我对 Indigo 不熟悉,但是从阅读文档来看,看起来应该可以使用以下方法进行您提到的手动计算:

for atom in mol.iterateAtoms():
    bond_count = 0
    for nei in atom.iterateNeighbors():
       bond_count += nei.bond().bondOrder()
    print([atom.symbol(),atom.atomicNumber() - bond_count])

它只是缺少壳数的计算;我不确定如何做那部分。