The documentation for the indigo module can be found here


So for instance if I have a molecule object for some SMILES string, e.g. "[C](=[O])", I wish to calculate the valency of each atom, for instance here the desired output would be [atom=C, unbound_electrons=2],[atom=O, valency=0]

If I consider the atom "[C]" Can anyone explain why is this code printing [atom=C, unbound_electrons=0] not [atom=C, unbound_electrons=4]

from indigo import *
indigo = Indigo()



for atom in mol.iterateAtoms():

I could work it out if I could generate a list of the types of bonds on the atom in conjuction with atom.atomicNumber(). E.g. if I could say [C] has a double bond I could take it's atomic number - 2 (second shell) - 2 (double bond)

This might be useful for visualising what i'm talking about

from indigo_renderer import *
renderer = IndigoRenderer(indigo)

I'm not familiar with Indigo, but from reading the documentation, it looks like it should be possible to do the manual calculation you mention, using something like:

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])

It's just missing the calculation of number of shells; I'm not sure how to do that part.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy