16 votos

Biblioteca portátil para representar en 2D fórmulas estructurales como gráficos vectoriales de SONRISAS o InChI

Para proyectos basado en la web, estoy buscando una pieza de software para crear gráficos vectoriales 2D fórmula estructural de una estructura textual esquema de codificación tales como SONRISAS o InChI, que se ejecuta en el servidor o el cliente, y se puede llamar a través de algún tipo de API.

Me estoy imaginando un cliente o del lado del servidor de la biblioteca que sólo podría utilizar como esto:

svg_output = lib.render_from_smiles(smiles_input);

Idealmente, debería tener las siguientes propiedades:

  • Tomar una o SONRISAS InChI representación del compuesto como entrada
  • Calcular la estructura gráfica en 2D y en los datos de posición (posiciones de los átomos, los tipos de los bonos, etc.)
  • Representar la estructura en algún tipo de representación de gráficos vectoriales (SVG sería perfecto, pero cualquier otro abierto formato haría)
  • O, alternativamente, la salida de la calculada dibujo parámetros, para ser transmitidos a otro renderizador (que tendría que ser por escrito, pero eso es lo de menos desafiante)
  • Escrito en un lenguaje que es fácil de usar y de implementar en un entorno web (PHP, JavaScript, Python, Ruby, Ir, etc.)
  • Si el presentador es incluido, permitir el control de la prestación de estilo (ancho de trazo/colores, atributos de texto etc.)
  • O de código abierto con licencia de términos que son asequibles para un proyecto sin ánimo de lucro :)

La aplicación sólo necesita representar estructuras individuales. No hay mecanismos de reacción o algo de fantasía. Las pequeñas moléculas orgánicas sólo.

Sé que hay varios independiente de paquetes de software (ChemDraw, MarvinSketch etc.) que hacen este tipo de cosas, pero no he encontrado nada que puede ser utilizado como una biblioteca como esta.

Cualquier sugerencia o idea? Gracias!

13voto

dsteinweg Puntos 768

Puede que desee echar un vistazo a Abrir Babel.

  • Es licenciado bajo GNU GPLv2
  • Tiene bindings para Python
  • Tiene enlaces para PHP
  • Tiene enlaces para Ruby
  • Se puede leer (y escribir) SONRISAS
  • Se puede leer (y escribir) InChI
  • Se puede escribir SVG
  • Se puede escribir una lista de pintor comandos

11voto

yura Puntos 121

Usted también debe mirar a RDKit, que es, en su núcleo, es el código de C++ para manipular las estructuras moleculares, pero que también tiene Python y Java enlaces. La mayoría de la gente lo usa a través de sus enlaces Python.

He aquí un ejemplo de código.

# import rdkit components
from rdkit import Chem
from rdkit.Chem import Draw
from rdkit.Chem.Draw import IPythonConsole
IPythonConsole.ipython_useSVG=True

# displaying an SVG structure (in a Jupyter notebook)
mol = Chem.MolFromSmiles('O=C(O)c1ccccc1OC(=O)C')
mol

En el interior de un Jupyter notebook, que se traduce en una agradable SVG-formato de imagen. enter image description here. Usted puede obtener un archivo de esta imagen con la forma estándar para obtener SVG de Jupyter cuadernos, que no recuerdo ahora.

# 2D positional data for atoms
for atom in mol.GetAtoms():
    print (atom.GetIdx(), atom.GetSymbol(), atom.GetExplicitValence(), atom.GetIsAromatic())

# 2D positional data for bonds
for bond in mol.GetBonds():
    print (bond.GetIdx(), bond.GetBeginAtomIdx(), bond.GetEndAtomIdx(), bond.GetBondType())

El código de arriba te da una sensación de que el sabor de cómo se hacen las cosas, y sólo algunos ejemplos de propiedades disponibles para los bonos y los átomos. Ciertamente no es una lista exhaustiva de bonos/atom propiedades. El resultado es:

(0, 'O', 2, False)
(1, 'C', 4, False)
(2, 'O', 1, False)
(3, 'C', 4, True)
(4, 'C', 3, True)
(5, 'C', 3, True)
(6, 'C', 3, True)
(7, 'C', 3, True)
(8, 'C', 4, True)
(9, 'O', 2, False)
(10, 'C', 4, False)
(11, 'O', 2, False)
(12, 'C', 1, False)
(0, 0, 1, rdkit.Chem.rdchem.BondType.DOUBLE)
(1, 1, 2, rdkit.Chem.rdchem.BondType.SINGLE)
(2, 1, 3, rdkit.Chem.rdchem.BondType.SINGLE)
(3, 3, 4, rdkit.Chem.rdchem.BondType.AROMATIC)
(4, 4, 5, rdkit.Chem.rdchem.BondType.AROMATIC)
(5, 5, 6, rdkit.Chem.rdchem.BondType.AROMATIC)
(6, 6, 7, rdkit.Chem.rdchem.BondType.AROMATIC)
(7, 7, 8, rdkit.Chem.rdchem.BondType.AROMATIC)
(8, 8, 9, rdkit.Chem.rdchem.BondType.SINGLE)
(9, 9, 10, rdkit.Chem.rdchem.BondType.SINGLE)
(10, 10, 11, rdkit.Chem.rdchem.BondType.DOUBLE)
(11, 10, 12, rdkit.Chem.rdchem.BondType.SINGLE)
(12, 8, 3, rdkit.Chem.rdchem.BondType.AROMATIC)

Conversión entre/de/a InChI y SONRISAS es fácil. He aquí un ejemplo de InChI salida.

    # output InChI
    Chem.MolToInchi(mol)

'InChI=1S/C9H8O4/c1-6(10)13-8-5-3-2-4-7(8)9(11)12/h2-5H,1H3,(H,11,12)'

Usted puede aprender un poco más acerca de cómo realizar tareas comunes en RDKit a través de este repo de GitHub de ejemplo Jupyter Cuadernos.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X