I posted about mol to graph object before.
In the blog post, I wrote example that convert RDKit mol object to igraph object. It was one way. There was no method igraph to rdkit mol object.
So I wrote very simple converter from graph to molecule.
First, import modules.
import numpy as np import pandas as pd import igraph from rdkit import Chem from rdkit.Chem.rdchem import RWMol from rdkit.Chem import Draw from rdkit.Chem import rdmolops from rdkit.Chem.Draw import IPythonConsole IPythonConsole.ipython_useSVG = True
Then define two way function, mol2graph and graph2mol. It is very simple.I did not sanitize process because I could not handle some compounds. RWMol method is very useful to do this work.
def mol2graph(mol): atoms_info = [ (atom.GetIdx(), atom.GetAtomicNum(), atom.GetSymbol()) for atom in mol.GetAtoms()] bonds_info = [(bond.GetBeginAtomIdx(), bond.GetEndAtomIdx(), bond.GetBondType(), bond.GetBondTypeAsDouble()) for bond in mol.GetBonds()] graph = igraph.Graph() for atom_info in atoms_info: graph.add_vertex(atom_info[0], AtomicNum=atom_info[1], AtomicSymbole=atom_info[2]) for bond_info in bonds_info: graph.add_edge(bond_info[0], bond_info[1], BondType=bond_info[2], BondTypeAsDouble=bond_info[3]) return graph def graph2mol(graph): emol = RWMol() for v in graph.vs(): emol.AddAtom(Chem.Atom(v["AtomicNum"])) for e in graph.es(): emol.AddBond(e.source, e.target, e['BondType']) mol = emol.GetMol() return mol
Finally, I checked my function on jupyter notebook. And It worked well.
All code is uploaded my repo and can check from following URL. https://nbviewer.jupyter.org/github/iwatobipen/chemo_info/blob/master/rdkit_notebook/mol2g_g2mol.ipynb