EDIT 23/11/15: le nom de la bibliothèque a été changé pour chemfiles, le titre aussi.
Bonjour à tous ! Aujourd'hui est un grand jour, parce que aujourd'hui la version 0.1 de ma bibliothèque Chemharp est rendue publique !
J'avais déjà parlé de cette bibliothèque sur le forum pendant la conception, en voici maintenant la présentation !
C'est quoi le problème ?
Je fait de la simulation moléculaire en recherche. L'idée de la simulation moléculaire, c'est de prendre un ensemble d'atomes ou de molécules, et de faire calculer à l'ordinateur l'évolution temporelle1 de cette ensemble. Ces simulations produisent donc des données sous la forme de positions/vitesses des atomes, que l'on peut ensuite analyser pour en extraire ce qui nous intéresse.
Ces données se ressemblent souvent (positions, vitesses, liaisons entre les atomes, …) mais sont enregistrées dans beaucoup de formats de fichiers différents. Chaque logiciel a son propre format de données, et même si quelques formats sont plus communs et standard que les autres, le simple fait de changer de logiciel de simulation peut demander beaucoup de travail pour écrire les scripts d'analyse.
L'idée dernière Chemharp est de fournir une interface simple, stable et indépendante du format d'entrée pour lire toutes ces données. Ainsi, l'utilisateur de la bibliothèque peut utiliser indifféremment des fichiers PDB, XYZ, XTC ou TNG ; et toujours effectuer la même analyse sur ces fichiers. Chemharp propose donc de lire et d'écrire des Trajectoires dans des fichiers selon un certain nombre de Format. Ces Trajectoires sont composées d'une successions de Frames qui contiennent les informations sur le système.
Les contraintes
J'ai essayé de répondre à plusieurs contraintes en écrivant cette bibliothèque :
- Avoir une API simple à utiliser, et bien documenté ;
- Avoir une bibliothèque utilisable depuis plusieurs langages, en particulier les langages scientifiques (C++, C, Fortran, Python)
- Avoir un code efficace, la plupart des programmes d'analyse de trajectoire étant limités par l'IO. Ce point n'a pas encore été travaillé.
La technique
La bibliothèque est écrite en C++11, avec un certain nombre de classes internes mais seulement 6 classes d'exposées à l'extérieur. Depuis cette bibliothèque, des interfaces sont créées :
- Une interface C est écrite en C++ avec
extern "C"
; - Cette interface C est enrobée pour Fortran avec l'aide du module
iso_c_binding
de la norme 2003. Si ce passage vous intéresse, j'avais fait un post de blog à ce propos. Comme indiqué à la fin, j'ai utilisé un parseur C depuis Python pour générer le code correspondant. - La bibliothèque Boost.Python est utilisée pour écrire l'interface vers Python.
À coté de ça, les quelques autres choix techniques que j'ai fait sont :
- CMake pour le système de compilation. Le code n'a pas encore été testé sous Windows, mais devrait l'être rapidement. Un système de compilation cross-plateform était donc important à mes yeux.
- Doxygen pour documenter le code C et C++;
- Sphinx pour créer une documentation propre et lisible depuis la documentation Doxygen. L'extension breathe a été utilisée pour cela.
Le code
Le code est disponible sur Github, sous licence MPL. La documentation est disponible sur readthedocs.
Voilà, je sais qu'il y a quelques chimistes sur ce forums, je veux donc bien des avis sur l'utilisation de ce type de bibliothèque. Et je prend aussi tous les avis sur mon code, d'un point de vue conception, bonnes pratiques ou autre.
-
Pas toujours … Parfois on utilise plutôt une évolution stochastique, cherchez les méthodes de simulations Monte Carlo pour ça. ↩