Outils pour utilisateurs

Outils du site


teaching:progappchim:openbabel_jmol

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
teaching:progappchim:openbabel_jmol [2014/02/18 10:05]
villersd créée
teaching:progappchim:openbabel_jmol [2015/06/16 12:28] (Version actuelle)
villersd [References]
Ligne 5: Ligne 5:
   * Site officiel : [[http://​openbabel.org/​wiki/​Main_Page]]   * Site officiel : [[http://​openbabel.org/​wiki/​Main_Page]]
   * Interfaçage en Python : [[http://​openbabel.org/​wiki/​Python]]   * Interfaçage en Python : [[http://​openbabel.org/​wiki/​Python]]
 +
 +Pour utiliser OpenBabel en python, il faut installer au préalable ces outils. Sous Linux (Debian, Ubuntu,​...),​ installer les paquets openbabel et python-openbabel. Sous Windows, voir [[http://​openbabel.org/​docs/​dev/​Installation/​install.html|cette page]], et [[http://​openbabel.org/​docs/​2.3.1/​UseTheLibrary/​PythonInstall.html|celle-ci]] (lien avec python).
  
 ===== Jmol ===== ===== Jmol =====
Ligne 15: Ligne 17:
 ===== Exemple de programme Python ===== ===== Exemple de programme Python =====
  
-En construction...+<sxh python; title : generate_alcohols-01.py> 
 +#! /​usr/​bin/​env python 
 +# -*- coding: utf-8 -*- 
 +# génération à partir du code smile d'​alcools ddes caractéristiques 3D 
 +# et de fichiers ​.pdb lisible par Jmol 
 +# références :  
 +# http://​openbabel.org/​wiki/​Python 
 +# http://​openbabel.org/​docs/​current/​UseTheLibrary/​PythonDoc.html#​using-iterators 
 +# http://​pythonchem.blogspot.be/​2012/​08/​fun-and-little-disappointment-with.html 
 +# https://​gist.github.com/​cstein/​3294891 
 +# http://​nullege.com/​codes/​search/​openbabel 
 + 
 +import openbabel 
 + 
 +def OBMolMinimize(mol):​ 
 +    """​Minimize a molecule 
 +    """​ 
 +    ff = openbabel.OBForceField.FindForceField("​MMFF94"​) 
 +    ff.Setup(mol) 
 +    ff.ConjugateGradients(100,​ 1.0e-5) 
 +    ff.GetCoordinates(mol) 
 +    return mol 
 + 
 +def OBStructureFromSmiles(smilesstring,​ filename=None):​ 
 +    mol = openbabel.OBMol() 
 +    obConversion = openbabel.OBConversion() 
 +    obConversion.SetInAndOutFormats("​smi",​ "​pdb"​) 
 +    obConversion.ReadString(mol,​ smilesstring) 
 +    mol.AddHydrogens() 
 +    builder = openbabel.OBBuilder() 
 +    builder.Build(mol) 
 +    mol = OBMolMinimize(mol) 
 +    if filename is None: return mol 
 +    # save structures in subfolder molecules 
 +    obConversion.WriteFile(mol,​ "​molecules/​%s.pdb"​ % filename) 
 + 
 +def getAlcohols():​ 
 +    molecules = dict() 
 +    molecules['​methanol'​] = '​CO'​ 
 +    molecules['​ethanol'​] = '​CCO'​ 
 +    molecules['​1-propanol'​] = '​CCCO'​ 
 +    molecules['​isopropanol'​] = '​CC(O)C'​ 
 +    molecules['​n-butanol'​] = '​CCCCO'​ 
 +    molecules['​butan-2-ol'​] = '​CC(O)CC'​ 
 +    molecules['​isobutanol'​] = '​CC(C)CO'​ 
 +    molecules['​tert-butanol'​] = '​CC(C)(C)O'​ 
 +    molecules['​1-Pentanol'​] = '​CCCCCO'​ 
 +    return molecules 
 + 
 +if __name__ == '​__main__':​ 
 + 
 +    etab = openbabel.OBElementTable() 
 +    dico = getAlcohols() 
 +    for elem in dico: 
 +        OBStructureFromSmiles(dico[elem],​ elem) 
 + 
 +    # Determine the charge of a molecule 
 +    for file_in in dico: 
 +        obConversion = openbabel.OBConversion() 
 +        obConversion.SetInFormat("​pdb"​) 
 +        mol = openbabel.OBMol() 
 +        obConversion.ReadFile(mol,​ "​molecules/​%s.pdb"​ % file_in) 
 +        # get the charges of the atoms 
 +        charge_model = openbabel.OBChargeModel.FindType("​MMFF94"​) 
 +        charge_model.ComputeCharges(mol) 
 +        partial_charges = charge_model.GetPartialCharges() 
 +        print file_in, '- Formula = ', mol.GetFormula() 
 +        print 'mol wt = ', mol.GetMolWt(),​ '​- ​ Numb atoms = ', mol.NumAtoms(),​ '​- ​ Numb bonds = ', mol.NumBonds() 
 +        for atom in openbabel.OBMolAtomIter(mol):​ 
 +            z=atom.GetAtomicNum() 
 +            v3=atom.GetVector() 
 +            print atom.GetAtomicMass(),​ z, etab.GetSymbol(z),​ '​x=',​v3.GetX(),​ '​y=',​v3.GetY(),​ '​z=',​v3.GetZ() 
 +        print '​partial charges = ', partial_charges 
 +        print 'total charge = ', "​%i"​ % int(sum(partial_charges)) 
 +        print '​********'​ 
 + 
 +</​sxh>​ 
 +Pour le méthanol, ce programme sort ces informations : 
 +<​code>​ 
 +methanol - Formula =  CH4O 
 +mol wt =  32.04186 -  Numb atoms =  6 -  Numb bonds =  5 
 +12.0107 6 C x= 0.956 y= -0.086 z= -0.056 
 +15.9994 8 O x= 0.488 y= -1.374 z= 0.299 
 +1.00794 1 H x= 0.587 y= 0.64 z= 0.672 
 +1.00794 1 H x= 0.584 y= 0.177 z= -1.05 
 +1.00794 1 H x= 2.049 y= -0.08 z= -0.052 
 +1.00794 1 H x= 0.831 y= -1.996 z= -0.365 
 +partial charges =  (0.28, -0.68, 0.0, 0.0, 0.0, 0.4) 
 +total charge =  0 
 +</​code>​ 
 + 
 +===== References ===== 
 +  * [[http://​www.jcheminf.com/​content/​3/​1/​33|Open Babel: An open chemical toolbox]], Noel M O'​Boyle,​ Michael Banck, Craig A James, Chris Morley, Tim Vandermeersch and Geoffrey R Hutchison, Journal of Cheminformatics 2011, 3:33  doi:​10.1186/​1758-2946-3-33 
 +  * [[http://​www.jcheminf.com/​content/​7/​1/​23/​abstract|InChI,​ the IUPAC International Chemical Identifier]] Stephen R Heller, Alan McNaught, Igor Pletnev, Stephen Stein and Dmitrii Tchekhovskoi,​ Journal of Cheminformatics 2015, 7:23 doi:​10.1186/​s13321-015-0068-4
teaching/progappchim/openbabel_jmol.1392714314.txt.gz · Dernière modification: 2014/02/18 10:05 par villersd