Journal OpenFovea - Le libre à la pointe de la recherche biophysique

Posté par (page perso) .
31
6
mar.
2012

Introduction

La biophysique s'occupe de caractériser le vivant avec des méthodes issues de la physique.

Un des champs de la biophysique est la biomécanique qui consiste à caractériser les propriétés mécaniques du monde vivant. Diverses méthodes existent pour étudier ces phénomènes à diverses échelles.

Le microscope à force atomique (ou AFM est un instrument permettant de sonder les propriétés mécaniques à une échelle sub-cellulaire. De l'ordre du nanomètre en condition idéale, elle permet d'obtenir une définition d'une vingtaine de nanomètres en condition physiologique (cellule vivantes, dans son milieu de culture).

Bien que l'utilisation de l'AFM soit devenu relativement facile ces dernières années, le traitement des données résultant des expériences était difficile, et chaque laboratoires allait de sa propre implémentation.

Ces quatre dernières années, j'ai développé, d'abord le soir et le week-end, ensuite dans le laboratoire qui m'a accueilli l'EPFL et actuellement l'Unil, un programme permettant de traiter semi-automatiquement les données issues de ce microscope. Aujourd'hui, ce programme est assez mature pour être publié et être remis à la communauté en tant que logiciel libre (GPLv3).

Mais que fait OpenFovea ?

Le principe du microscope est de mesurer la flexion d'un levier en fonction de l’interaction de sa pointe, une pyramide dont le sommet fait une 20aine de nm. Plus on appuie, plus le levier se fléchit. On peut donc mesurer quelle force il faut appliquer pour enfoncer la pointe à une certaine profondeur. On récolte donc un signal appelé courbe "Force-Distance". Une série d'animations faites par votre serviteur est disponible ici.

OpenFovea traite donc ce signal pour y reconstituer la topographie et les propriétés élastiques de l'échantillon étudié.

Si l'on modifie la pointe de telle sorte qu'elle interagit avec certaine molécules, en y attachant des anticorps, ou des protéines s'attachant a des récepteurs sur la surface, lors de la rétraction de la pointe, le levier se fléchira vers le bas. A un certain moment, la force appliquée par le levier sera plus forte que la force d'interaction entre la pointe et le substrat. Vous me suivez toujours ? La vidéo explicative vous aidera. OpenFovea permet aussi de détecter ces signaux dans les courbes. En y extrayant la position où ces "événements" arrivent, leur force et d'autres paramètres, on accède a des information intéressante sur la liaison de ces protéines.
Avec OpenFovea, nous pouvons aussi corréler les information de plasticité et de présence/absence de ces événements. Le tout avec la possibilité de faire des graphiques sous forme d'histogramme, de scatter-plot, de cartographie, de volume 3d.

Et avec quoi OpenFovea a été codé ?

Python. C'est un langage simple et puissant possédant une bibliothèque de grande qualité pour le sujet présent. scipy, numpy, matplotlib pour le côté scientifique, python-gtk pour l'interface graphique, python-opengl pour le rendu 3d.

Ça veut dire quoi OpenFovea ?

La fovea est la zone de plus haute densité de récepteurs sur la rétine. C'est là où se forme l'image la plus précise dans notre vision.

Fovea est aussi l'acronyme de FOrce curVE Analysis. C'est tiré par les cheveux et je l'assume.

Où est la page du projet ?

Vous pouvez trouver la page principale du projet sur http://www.freesbi.ch/openfovea avec capture d'écran et documentation.

Les source et binaires se trouvent sur le serveur launchpad

  • # Bravo !

    Posté par . Évalué à 6.

    Ton journal rebondi parfaitement (telle la pointe de ton AFM ?) sur celui qui a été publié il y a quelques temps :
    https://linuxfr.org/users/gunther-freimann/journaux/l-open-source-un-gage-de-reproductibilite-en-science

    Ainsi, les résultats publiés utilisant ton code auront l'avantage de reposer sur quelque chose d'éprouvé par la communauté (on l'espère) et dont le fonctionnement est étudiable.

    Bravo en tout cas :)

    • [^] # Re: Bravo !

      Posté par (page perso) . Évalué à 3.

      Merci pour tes encouragements.

      C'est effectivement le but du projet. Je n'aime pas les boîtes noires et j'espère aussi avoir des retours sur les faiblesses du programme.
      Il faut dire que j'ai une formation de biologiste, pas d'informaticien. J'ai appris sur le tas et suis sûr que certaines de mes implémentations feront hurler des puristes. J'espère simplement qu'ils hurleront dans ma direction.

  • # Pourquoi GTK ?

    Posté par . Évalué à 2.

    J'ai moi-même été amené à écrire un programme d'analyse de données expérimentales pour des biologistes. Mes choix sont très proches des tiens au niveau des bibliothèques : numpy, matplotlib, openCV. Par contre, comme toi, j'avais fait l'interface graphique avec python-gtk mais je me suis rendu compte que 99% des biologistes utilisent Windows et que GTK était pénible à installer sous cet OS. J'ai donc ré-écrit l'interface en QT avec PyQt4. Tout d'un coup cela a été beaucoup plus simple de fournir des binaires fonctionnels pour ces boulets qui représentent 99% des utilisateurs de mon logiciel.

    As-tu des problèmes à faire tourner ton programme sous Windows ? Fournis-tu un binaire prêt à l'emploi pour Windows (avec py2exe par exemple) ?

    • [^] # Re: Pourquoi GTK ?

      Posté par (page perso) . Évalué à 2.

      Tu pourrais me dire ce que Qt t'a apporté par rapport à GTK sur ce plan ? C'est une vraie question, je vois souvent des utilisateurs se plaindre à ce niveau là, et n'ayant jamais utilisé Qt, je ne sais pas ce qu'il simplifie au niveau de la redistribution des binaires…

      • [^] # Re: Pourquoi GTK ?

        Posté par . Évalué à 2.

        Simplement, je n'ai jamais réussi à produire un binaire Windows utilisant GTK sans avoir à installer les bibliothèques GTK à coté. Je ne dis pas que c'est impossible, c'est juste beaucoup plus simple avec Qt. Py2exe marche plutôt bien avec Qt; pour GTK c'est le parcours du combattant surtout qu'il ne semble pas y avoir beaucoup d'utilisateur de python-GTK sous Windows.

        Qt est compilé par défaut sur plus d'architectures que GTK : je suis tombé sur pas mal de bug sous Windows que je n'avais pas sous linux. Sous Qt, j'ai un comportement identique sous linux et Windows.

        Ensuite, c'est une question d'habitude. J'ai commencé à apprendre GTK mais maintenant je ne fais plus que des développements avec Qt (python ou C/C++) car je sais que le portage sera beaucoup plus facile si je veux toucher plus d'utilisateurs.

        • [^] # Re: Pourquoi GTK ?

          Posté par (page perso) . Évalué à 2.

          je n'ai jamais réussi à produire un binaire Windows utilisant GTK sans avoir à installer les bibliothèques GTK à coté.

          En C, je ne vois que 2 solutions:
          - lier en statique pour que ton exécutable inclue GTK
          - lier en dynamique en précisant où se trouve la version de GTK à utiliser

          A ma connaissance, en général on lie en dynamique, en livrant un GTK à côté de l'appli, parce qu'il n'y a pas de gestion des dépendances sous Windows, et que tu ne peux pas partir du principe que ton appli est compatible avec un hypothétique GTK déjà installé sur la machine.

          Pour python, je ne sais pas trop comment ça se passe, mais il y a un installateur tout-en-un pour pyGTK si tu fais du GTK2: http://ftp.gnome.org/pub/GNOME/binaries/win32/pygtk/2.24/

          C'est avec ce dernier que tu as eu des soucis ?

        • [^] # Re: Pourquoi GTK ?

          Posté par . Évalué à 1.

          Simplement, je n'ai jamais réussi à produire un binaire Windows utilisant GTK sans avoir à installer les bibliothèques GTK à coté

          Le systeme de build a une cible pour compiler en lib statique. Enfin en theorie, en realite c'est casse dans 99% des cas (ca doit marcher sur la version de mingw utilise par la personne qui a ecrit la conf de build il y a quelques annees). La seule solution c'est d'aller patcher toi-meme pour pouvoir compiler en statique (et vu les dependences sur glib, etc. ca te fait 5 ou 6 libs a gerer).

          Et si jamais tu veux lier avec une dll au lieu d'un exe et que cette dll necessite autre chose que la convention d'appel par defaut, tu vas beaucoup t'amuser aussi.

          Au final, c'est surtout que la cible principale de GTK c'est du Linux et que Windows, les devs s'en foutent completement.

          • [^] # Re: Pourquoi GTK ?

            Posté par (page perso) . Évalué à 2.

            Au final, c'est surtout que la cible principale de GTK c'est du Linux et que Windows, les devs s'en foutent completement.

            Les devs m'ont dit au Desktop Summit 2011 qu'il n'ont ni les compétences ni le temps de bosser sur l'adaptation Windows. Auparavant il y avait une personne qui s'occupait bénévolement de cela, mais depuis qu'il s'est retiré, personne ne l'a remplacé. C'est plus un manque de ressources qu'un manque de volonté. GTK manque de mainteneurs depuis longtemps.

    • [^] # Re: Pourquoi GTK ?

      Posté par (page perso) . Évalué à 1.

      J'ai choisi GTK simplement parce que je suis sous un environnement GNOME. C'était donc le choix le plus simple pour moi. J'avais essayé WX, TK, QT et GTK quand j'apprenais à travailler avec une interface graphique et m'étais arrêté sur GTK car c'était celui qui, à l'époque, était le plus complet et le plus libre (QT ne l'était pas totalement à l'époque).

      Le programme était très avancé quand j'ai commencé à le distribuer. Dans un premier temps, tout le monde était sous Linux, il n'y avait donc aucun problème. Quand on a commencé à l'utiliser sous windows, j'ai perdu beaucoup de temps à régler différents problèmes. Mais finalement, le projet GTK fournit des paquets d'installation qui fonctionnent relativement bien. Le plus dur est de comprendre la logique de windows pour l'installation et la gestion des variables path.

      Je ne fournis pas de binaires, mais un script d'installation qui télécharge les dépendances et les installe. J'avais essayé py2exe qui avait l'air de fonctionner jusqu'à ce que j'introduise de l'OpenGL.

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.