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
Prochaine révisionLes deux révisions suivantes
teaching:progappchim:openbabel_jmol [2014/02/18 10:05] – créée villersdteaching:progappchim:openbabel_jmol [2014/02/28 12:26] – [OpenBabel] villersd
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
  • teaching/progappchim/openbabel_jmol.txt
  • Dernière modification : 2022/03/14 17:28
  • de villersd