VorAce, analyse quantitative en microscopie de super-résolution [1] Vue d’ensemble

    5 Comments

     

    Au cours de ma 2e année de Master de Neurosciences à Aix-Marseille Université, j’ai eu la chance de pouvoir faire converger mes deux intérêts pour l’informatique 💻 et les sciences du cerveau 🧠.

    J’ai réalisé un super stage au sein de l’équipe NeuroCyto Lab de l’Institut de Neuro-Physiopathologie à Marseille, dont je vais vous parler en quelques articles.

    La description “scientifique” de ce que j’ai réalisé étant déjà dans le mémoire que j’ai rendu à mes enseignants, les articles seront plutôt rédigés afin de donner à mes proches non-scientifiques (coucou mamie🧓🏻 !) un petit goût de ce que j’ai fait pendant ces quelques mois.
    D’autres articles plus spécialisés aborderont les problématiques de programmation que j’ai rencontrées et comment je les ai résolues.

    Pour aider le lecteur, les mots doublement soulignés contiennent une bulle d’aide lorsque le curseur de la souris les survole afin de préciser des notions.

     

    Contexte scientifique


    L’équipe de Christophe Leterrier s’intéresse à l’organisation des protéines dans les neurones. Elle cherche à comprendre comment ces assemblages de protéines permettent de faire émerger des propriétés nécessaires au fonctionnement des neurones.

    Pour réaliser des observations à une échelle aussi fine, l’équipe utilise une nouvelle technologie de microscopie qui est en plein boom dans la biologie: STORM 3D.

    Sans rentrer dans les détails techniques du pourquoi et du comment ici (mais ça viendra 😉 ), cette technique permet de “voir 10 fois plus gros” que ce qui est possible en microscopie classique, et en 3 dimensions s’il vous plait ! Illustration en image ci-après…

    Image en microscopie classique (gauche) et STORM (droite) d’une présynapse sur bille. Le carré fait 40 microns de coté, on peut voir que la résolution est limitée à gauche, le gros paté blanc est la protéine synapsine présente dans les présynapses, mais on ne distingue aucun détail. À droite la résolution a gagné un ordre de grandeur et laisse apparaitre bien plus de détails.

     

    Agrandissement de l’image STORM sur la présynapse. Le carré fait 6 microns de coté. On peut voir la finesse des détails, les petits agrégats de protéines ou les ensembles plus diffus.

     

    Question posée


    La beauté de la science c’est au moins autant autant l’art de poser des questions que de chercher des réponses 🙂

    À cause de la nouveauté de l’usage de STORM en biologie (à peine 10 ans), il existe encore peu de méthodes adaptées à celle-ci pour pouvoir réaliser ce que nécessite toute étude de biologie digne de ce nom:  l’objectivation des résultats par une analyse quantitative.

    C’est là où mon expérience de nerd d’informaticien 🤓 entre en jeu, le but de mon stage est de développer une méthode d’analyse quantitative sur des données STORM 3D d’expériences que je vais réaliser.

    Je vais dans un premier temps réaliser des expériences sur des neurones en culture et observer certaines de leurs protéines en microscopie STORM. Puis je vais développer une méthode d’analyse et l’outil informatique permettant de la réaliser, et mettre à l’épreuve cette méthode sur les données acquises lors de mes expériences.

    Je vais observer en microscopie STORM les protéines bassoon et synapsin, présentes dans les pré-synapses et impliquées dans la dynamique de libération des neurotransmetteurs. Les observations seront réalisées dans différentes conditions de perturbation du cytosquelette au moyen d’agents qui vont le fragiliser ou renforcer.

     

    État de l’art et approche de la question


    Tenter de répondre à une question scientifique comment nécessairement par faire la synthèse des connaissances sur le sujet auquel on s’intéresse.

    Le prochain article fera un peu le tour de la connaissance existante sur le sujet et définira l’approche que j’ai utilisée pour tenter de répondre à la question.

    Dégradé polaire dans Cairo

    No Comments

     

    Un article rapide sur une solution (simple) implémentée pour répondre à un (petit) problème que j’ai rencontré en contribuant sur un projet open-source absolument fabuleux : Darktable

    Si vous aimez la photo et que vous ne connaissez pas ce logiciel, allez vite y faire un tour, vous ne serez pas déçu ! C’est un peu comme “Adobe LightRoom”, mais gratuit, open-source, et avec encore plus de fonctionnalités !

     

    Cairo, programmer un dessin

     

    Cairo est une librairie bien connue de tous les adeptes de Linux. Elle offre des primitives de programmation permettant de créer des dessins à partir de formes de base (ligne, carré, ellipse, etc…). Ces dessins pourront être exportés sous forme de fichier, ou utilisés dans un programme pour décorer des boutons par exemple.

     

    C’est précisément le cas d’utilisation que j’ai eu, je voulais dessiner avec Cairo quelque chose qui ressemble à l’image ci-après afin de décorer un bouton que j’ajoutais dans Darktable.

     

    image

    Mes compétences dans GIMP sont ébouriffantes non ?

     

    Problème : les dégradés existent bien dans Cairo, mais ils sont soit linéaires (d’un bord à l’autre d’une forme), soit radiaux (du centre vers l’extrémité d’une forme). J’ai donc du improviser une petite solution “maison”.

     

    Un dégradé c’est pas si compliqué

     

    Quand on y réfléchit, un dégradé c’est quoi ?

     

    Un changement progressif de la couleur en suivant une direction. 👏🏼

     

    Donc si je décompose mon arc de cercle en petits morceaux…

     

    En modifiant la couleur petit à petit à chaque arc…

     

    Et que je réassemble le tout à la fin…

     

     

    Bon, pas de quoi se prendre pour Neo dans la matrice non plus hein…

     

    Code

     

    Je mets à disposition ici le code que j’ai écrit pour résoudre ce petit problème (en attendant que j’installe un plugin wordpress de visualisation de code).

    Bout de code qui m’a permis de réaliser les boutons encadrés en rouge dans l’interface de Darktable.

     

     

    Vu que je suis sympa j’ai même documenté…

     

    Amélioration réalisable à peu de frais, le faire pour de la couleur !

     

    Pour les flemmards, le code est aussi dispo ci-après 😉

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    void cairo_gradient_arc(cairo_t *cr, double lw, int nb_steps, double x_center, double y_center, double radius,
    double angle_from, double angle_to, double color_from, double color_to)
    {
    cairo_set_line_width(cr, lw);

    double *portions = malloc((1 + nb_steps) * sizeof(double));

    // note: cairo angles seems to be shifted by M_PI relatively to the unit circle
    angle_from = angle_from + M_PI;
    angle_to = angle_to + M_PI;
    double step = (angle_to - angle_from) / nb_steps;
    for(int i = 0; i < nb_steps; i++) portions[i] = angle_from + i * step;
    portions[nb_steps] = angle_to;

    for(int i = 0; i < nb_steps; i++)
    {
    double color = color_from + i * (color_to - color_from) / nb_steps;
    cairo_set_source_rgb(cr, color, color, color);
    cairo_arc(cr, x_center, y_center, radius, portions[i], portions[i + 1]);
    cairo_stroke(cr);
    }
    free(portions);
    }
    Categories: Programmation Tags: Étiquettes : , , ,