Generar imatges de molècules amb Python i ChemAxon

Fins ara, sempre que volia generar imatges per molècules, ho feia amb pybel. De fet, ho seguiré fent servir. És fàcil, senzill i lliure. Però a vegades hi ha algun problema amb la qualitat de les imatges generades, àtoms que se sobreposen, angles una mica dubtosos. En aquests casos, calen alternatives.

Com a alternativa i gràcies a un company del meu grup (gràcies Xavi!), he trobat una nova manera de fer-ho: amb MarvinBeans, de ChemAxon i fent un script amb python. El sistema no és lliure (MarvinBeans només és gratuït per a usos acadèmics), però és funcional.

Primer de tot cal anar al web de ChemAxon i entrar a Download > Marvin > For Java Developers. Una vegada aquí, accepteu la llicència i descarregueu el “Cross platform package without installer”. Aquí us demanarà un usuari i clau, cal que l’entreu o que us doneu d’alta. Descarregueu el fitxer, deseu-lo al vostre ordinador i descomprimiu-lo.

Ara la part de python. El codi és senzillet, simplement cal cridar-lo:

1
python sdf2img.py -i input.sdf

El codi el que fa és obrir el fitxer sdf i, molècula a molècula, generar les imatges. Per fer-ho, crea un sdf temporal per a cada molècula, genera la imatge i esborra el fitxer temporal. Abans de fer-ho anar però, cal canviar el PATH al .jar de MarvinBeans (a les primeres linies del codi python). Les imatges generades són png, canviant una mica el codi, podeu fer pdf i svg.

?View Code PYTHON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
"""
Script to generate images from an SDF using ChemAxon MarvinBeans
Alfons Nonell-Canals - June 2010
"""
 
import optparse
import os
from pybel import *
 
#Configure the path to MarvinBeans
MARVIN_PATH = "$HOME/soft/ChemAxon/marvinbeans/lib/MarvinBeans.jar"
 
#Read input options
p = optparse.OptionParser()
p.add_option('--sdf', '-i', help='SDF input file')
 
options, arguments = p.parse_args()
sdf = options.sdf
 
#Iterate the sd file
for molecule in readfile('sdf',sdf):
    #Write a temp file with the molecule
    outputfile = Outputfile("sdf", (molecule.title)+'.sdf')
    print molecule.title
    outputfile.write(molecule)
    format = 'png'
    file = molecule.title+'.sdf'
    outfile = molecule.title+'.png'
    #generate the image
    run = "java -classpath %s chemaxon.formats.MolConverter %s:a,w1000,h1000,#ffffff,wireframe %s -Y -2 -o %s"%(\
        MARVIN_PATH,\
        format,\
        file,\
        outfile)
    os.system(run)
    #remove tmp files
    run = 'rm '+file
    os.system(run)

No comments yet.

Write a comment: