Le logiciel FreeCAD permet la création de modèle 3D. Nous allons utiliser ce logiciel car il est gratuit, opensource et permets de lancer des scripts pour réaliser des pièces de manière automatisée. https://www.freecad.org/ La version utilisée est la 1.0.1.
Il a été choisi d’utiliser des fichiers .mol2 comme source de description des molécules.
Trois fichiers mol2 ont été fourni comme base de travail :
Chaque fichier mol2 contient :
Chaque atome est identifié par un numéro unique. A partir de ce fichier, il est possible de dessiner en trois dimensions une représentation de la molécule.
La bibliothèque “biopandas” permet de lire les fichiers mol2. https://biopandas.github.io/biopandas/
Le code suivant permet d’ouvrir un fichier mol2 et d’afficher la liste des atomes et des liaisons.
from biopandas.mol2 import PandasMol2
import numpy as np
import re
import pandas as pd
mol2file = '/Users/bastien/BV/Documents/ANR_PIRATE/mol2/Nicotine.mol2'
def bond_parset(filename):
with open(filename, 'r') as f:
f_text = f.read()
bonds = np.array(re.sub(r'\s+', ' ', re.search(r'@<TRIPOS>BOND([a-z0-9\s]*)@', f_text).group(1)).split()).reshape((-1, 4))
df_bonds = pd.DataFrame(bonds, columns=['bond_id', 'atom1', 'atom2', 'bond_type'])
#df_bonds.set_index(['bond_id'], inplace=True)
return df_bonds
pmol = PandasMol2().read_mol2(mol2file)
pmolbonds = bond_parset(mol2file)
print('Molecule ID: %s' % pmol.code)
print("Liste atomes")
for index, row in pmol.df.iterrows():
print("ID: ",row['atom_id'], "\tType: ",row['atom_type'], "\tType simple:", row['atom_type'].split('.')[0], "\tPosition 3D: (", row['x'],",",row['y'],",",row['z'],")")
print("Liste liaisons")
for index, row in pmolbonds.iterrows():
print("ID: ",row['bond_id'], "\t - Atomes: ",row['atom1'], "/", row['atom2'], "\t - Type: ",row['bond_type'])