Archive for the 'Python' Category

Pymol en mans d’Schrödinger

Segons llegeixo a Depth-First, després de la mort del desenvolupador de Pymol, el manteniment del programa passarà a mans de la coneguda empresa de programari quimioinformàtic Schrödinger.

On January 8, 2010 Schrödinger reached an agreement with the estate of the late Dr. Warren L. DeLano to acquire PyMOL. Schrödinger will take over continued development and maintenance, as well as support and sales of PyMOL, including all current subscriptions. Schrödinger will also continue to actively support the open-source community of PyMOL.

Prior to Warren’s tragic and unexpected passing, he had been working closely with Schrödinger to progressively integrate PyMOL with Schrödinger’s graphical interface, Maestro. With a great sense of humility, we will work hard to pick up as best we can where Warren left off and will strive to honor his memory by continuing in the spirit and tradition of PyMOL.

Afegir el títol de la molècula a l’sdf amb pybel

Pybel és un conjunt de classes escrites en Python per treballar amb l’OpenBabel. És una eina molt potent que et permet fer ús de totes les utilitats de l’OpenBabel des de Python. Jo l’empro molt i a diari!

Per, per exemple, llegir un smile i escriure’n un sdf només cal fer el següent:

?View Code PYTHON
1
2
3
4
5
6
7
8
9
10
11
12
#Importar el pybel
from pybel import *
 
#Ara llegirem l'smile
mol = readstring('smi', 'CCCC(Cl)CCF')
 
#Obrim el fitxer de sortida
out =Outputfile('sdf','NomDelFitxer.sdf')
#Hi escrivim i tanquem
 
out.write(mol)
out.close()

Això va molt bé però m’he trobat que escriu sdfs sense posar cap títol (nom) a les molècules. Pel que ho estic emprant ara però, necessito posar els InchiK com a títol de cada molècula. Hi he estat hores i hores, intentant entendre la classe “Outputfile”, però he desistit, no crec que es pugui fer, així, directament.

Com a alternativa he decidit emprar els mètodes natius de Python per escriure fitxers, barrejat amb el Pybel (l’opció molecula.write). Així doncs:

?View Code PYTHON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#Importar el pybel
from pybel import *
 
#Ara llegirem l'smile
mol = readstring('smi', 'CCCC(Cl)CCF')
 
#Obrim el fitxer de sortida (tal com es fa amb Python). Li diem que és per escriure
out = open('NomDelFitxer.sdf','w')
 
#Hi escrivim el títol
out.write('TítolDeLaMolecula')
 
#I ara, la molècula
out.write(mol.write('sdf'))
 
#Finalment, tanquem
out.close()

De moment, és l’única solució que he trobat i va prou bé.

pDynamo, llibreries python per la simulació molecular

pDynamo és una llibreria en python per a fer simulacions moleculars mitjançant mecànica quàntica, mecànica molecular i mètodes híbrids mecànica quàntica/mecànica molecular. Està basat en Dynamo, unes llibreries en Fortran 90 de les que per desgràcia, no en tinc massa bones referències. Tot i això i, encara que fa més o menys un any que no s’actualitza (desconec si el projecte segueix viu), caldrà fer-li una ullada :-)

Script per calcular els descriptors de lipinski

Els “descriptors de Lipinski”, de la norma del cinc, inclouen del pes molecular, el coeficient octanol/aigua (cLogP), els punts donadors d’enllaç d’hidrogen (HBD) i els punts acceptors d’enllaç d’hidrogen (HBA).

Aquests dies he hagut de treballar amb diferents molècules d’una base de dades gegant i em calia calcular diferents descriptors. Per als de Lipinski, he fet aquest petit script (en python). Requereix pybel i es basa en un que hi ha publicat a l’article que presentapybel.

?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
"""
Script to compute the Lipibski descriptors
Alfons Nonell-Canals - October 2009
Chemogenomics Lab
 
USAGE:
python Lipinski.py -i sdfFile
 
"""
 
import optparse
from pybel import *
from openbabel import * 
 
p = optparse.OptionParser()
p.add_option('--infile','-i',default='default')
options, arguments = p.parse_args()
#files
infile = options.infile
 
#function to compute the Lipinski descriptors
HBD = Smarts("[#7,#8;!H0]")
HBA = Smarts("[#7,#8]")
 
def lipinski(mol):
   desc = []
   desc.append(mol.molwt)
   desc.append(mol.calcdesc(['LogP']) ['LogP'])
   desc.append(len(HBA.findall(mol)))
   desc.append(len(HBD.findall(mol)))
   return desc
 
for mol in readfile("sdf",infile):
    molName = mol.title
    desc = lipinski(mol)
    print molName,desc