3. Paquetage OASA3
OASA était une bibliothèque Python initialement utilisée dans BKChem un programme Linux de dessin moléculaire en 2D (un sketcher) puis dans d’autres outils comme OpenBabel. Son installation était dépendante de la bibliothèque Cairo et chaque fois que celle ci a été difficile à installer, en particulier sous Windows, les choses ont été compliquées. Finalement à partir de Python 2.7 c’est petit à petit la disparition de OASA. Puis après quelques versions mineures de Python3, elle n’est plus nécessaire pour OpenBabel/Pybel. D’ailleurs les outils fournis par le code OASA sont redondants de Pybel ou RDKit. Mais c’est encore une bibliothèque intéressante car elle permet de faire des choses avec les molécules car elle donne accès à la structure en arbre (graphes) des molécules, qui est utilisée pour les dépictions 2D.
Nous allons faire deux installations alternatives de OASA selon leur provenance, la première (distribution officielle) sera renommée OASA3 et l’autre renommée oasa4buildez.
Le paquetage oasa officiel ne s’installe que par pip, à ce stade de l’installation il n’y a plus de problèmes pour résoudre les dépendances (pycairo).
| Paquetage | commandes |
| oasa3 | pip install oasa3 |
Notes d’installation (oasa3)
Le paquetage s’installe dans C:\Python3\envs\prod\Lib\site-packages\oasa, ce qui ne nous convient pas car il faudra assurer l’existence de oasa4buildez.
Il faut renommer oasa en oasa3 sans toucher aux modules car ils utilisent le . comme racine du paquetage et non une désignation explicite. On doit aussi modifier les fichiers RECORD et top_level.txt dans \site-packages\oasa3-x.dist-info en remplaçant oasa par oasa3.
| fichier | modifications |
config.py |
Il faut modifier la ligne qui pointe vers inchi (inchi_binary_path): "c:\\Python3\\envs\\prod\\library\\bin\\inchi-1.exe" |
molfile.py |
Il faut modifier (ajouter str) en ligne 313: m.read_file(StringIO("".join(str(chunk)))) |
structure_database.py |
Ne pas installer pysqlite3, à la place de pysqlite2, simplement modifier : from sqlite3 import dbapi2 as sqlite |
oasa_tools.py |
N’existe pas dans OASA3. |
pybel_bridge.py |
Remplacer import pybel, openbabel par :import openbabelfrom openbabel import pybel |
Il ne faut pas faire les tests dans le paquetage OASA3, les modules ne fonctionnement pas. Mais les fonctions de OASA3 peuvent être appelées par un code externe.
OASA3 peut être installé en parallèle avec oasa4buildez (préféré) mais les deux ne peuvent pas coexister dans le même code. Pour utiliser OASA3 il faudra modifier les imports, par exemple :.
| fichier | Importer OASA3 |
test_gen_oasa3.py |
import oasa3 as oasafrom oasa3 import smilesfrom oasa3 import molfile |
test_img_oasa3.py |
import oasa3 as oasa |
Dans ce contexte, les tests sont fonctionnels.
Tests (oasa3)
A partir de la version (v: 1.31) de tests-buildez les tests sont normalisés entre oasa3 et oasa4buildez. Les programmes sont dans C:\Dev\tests-buildez\test_oasa3, les données dans \tests et les résultats dans \tests-gen et \tests-img pour les programmes test_img_oasa3.py et test_gen_oasa3.py. La plupart des fonctions marchent à l’exception de smiles_from_db(), smiles_compression(), test_CIP(), test_sdf_processing(), show_dump().
A priori cette installation suffit, même s’il y a encore beaucoup d’erreurs à corriger. Dans ce cas, il faut installer la version buildez de OASA qui est plus nettoyée. Dans buildez on n’utilise plus OASA que dans buildez.chem.pybel_interface/pybel_image.py pour générer des images de molécules en utilisant pycairo.
On peut donc afficher des molécules au formats SMILES, MDL mol, Inchi sous la forme d’images PNG, SVG, PDF avec un fond (ou en transparence), en modifiant la taille des traits, avec une rotation … Quelques exemples de test pour la molécule CCOC(=O)C1=C(C)N(C2=C1C=C(OC1=NC=NC(C3CNCCN3)=C1[N+]([O-])=O)C=C2)C1=CC=CC=C1O (SMILES) :
![]() |
![]() |
![]() |
![]() |
Le code pour la première image :
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
from oasa3 import molfile f = open( "tests/test01.mol", "r") mol = molfile.file_to_mol( f) f.close() from oasa3 import cairo_out mol.normalize_bond_length(25) mol.remove_unimportant_hydrogens() c = cairo_out.cairo_out( scaling=4.0, margin=10, font_size=16, bond_second_line_shortening=0.15, bond_width=6, line_width=2.0, antialias_drawing=True, antialias_text=True) c.background_color = (1,1,0.6) ## c.font_size = 20 c.show_hydrogens_on_hetero = True c.mol_to_cairo( mol, "tests-gen/result_test01-01.png") c.mol_to_cairo( mol, "tests-gen/result_test01-01.pdf", format="pdf") c.mol_to_cairo( mol, "tests-gen/result_test01-01.svg", format="svg") |
Les composantes RGB de la couleur de fond sont fixées par c.background_color, le gras avec la valeur de line_width, la taille des caractères par c.font_size, l’expansion par mol.normalize_bond_length … les arguments par défaut sont définis dans le module cairo_out.py de OASA3.
Liens et lectures
- BKChem [ https://bkchem.zirael.org/oasa_en.html ].
- Paquetage oasa3 [ https://pypi.org/project/oasa3/ ].
- Mimminou / oasa3 [ https://github.com/mimminou/oasa3/ ].



