Pour tous les projets

- Le projet est à rendre avant le dimanche 2 février, en envoyant un fichier archivé (zip, rar, …) unique (à olivier.croce@gmail.com) contenant :

- un rapport présentant votre projet, avec présentation du problème, objectifs et solutions proposées, algorithme récapitulatif , schémas/screenshots et conclusion.

- votre logiciel avec les sources ET une version compilée (pour Windows ou Linux)

Il y aura 2 notes, une pour le rapport, l'autre pour le programme.

Si le fichier zip est trop volumineux pour passer par email, pensez à utiliser des sites comme divshare, rapidshare, dl.free.fr, etc.

Un email par binôme, je vous confirmerai la bonne réception des fichiers par retour d'email.

Projet 1 - Spectrométrie de masse

Les fichiers contenant des séquences protéiques ou nucléotidiques sont la plupart du temps au format “fasta”. Le format fasta est assez simple puisque ce sont des fichiers textes qui contiennent une ou plusieurs séquences. Pour chaque séquence il y a une ligne avec un identifiant unique, dont le début de ligne commence par un “>” (il y a aussi éventuellement quelques mots de descriptions, ). La ligne qui suit est la séquence elle-même, correspondant à l'identifiant mentionné avant. Cette séquence peut être sur une ou plusieurs lignes. Puis à nouveau un identifiant et ainsi de suite. Une séquence protéique est représentée par une suite d'acides aminés dont chaque acide aminé est généralement représenté par une lettre (24 lettres + 2 symboles en tout).

- Documentez-vous sur le format fasta et éventuellement (mais pas indispensable) sur les bibliothèques C++ qui aident à manipuler le format fasta dans un programme.

Le problème est le suivant :

- On dispose de toutes les séquences protéiques issues du génome d'un organisme donné. Dans notre exemple nous allons prendre le génome d'un virus (Acanthamoeba polyphaga Mimivirus) dont les proteines se trouvent au format fasta ici seq_mimivirus.zip

- Un spectromètre de masse est un appareil qui trouve toutes les molécules présentes dans un échantillon, en sortant une liste des masses de ces molécules. On peut ainsi utiliser un spectromètre pour trouver toutes les proteines dans un échantillon donné.

- Pour un échantillon de proteines analysées au spectrometre, on veut savoir si cet échantillon contient une des séquences du virus précédent.

Il faut donc :

1- Calculer la masse de chaque proteine du virus : sommer la masse de chaque acide aminés. Les masses moléculaires de chaque acide aminé sont des constantes qui se trouvent facilement sur internet (il faudra utiliser des masses très précises évidemment).

2- Comparer la masse de chaque proteine avec les masses trouvées par le spectromètre

Pour les masses du spectromètre, prenez des masses aléatoires entrées par un utilisateur ou contenues dans un fichier texte simple. À noter que pour les protéines, les masses sont parfois exprimées en Daltons (=“Da”), il faudra donc faire des conversions d'unités si les masses entrées ne sont pas en grammes. Il faudra également entrer une incertitude pour chaque masse (ex. 4020 Da +/- 50 Da, etc.).

Comme résultats, on veut donc avoir pour chaque masse du spectromètre : aucune, 1 ou plusieurs identifiants de séquences protéiques qui peuvent correspondre.

Projet 2 - Exportation de Dicom

Les fichiers au format DICOM sont des méta fichiers, c'est à dire qu'il contiennent plusieurs types d'informations : une ou plusieurs images (coupes scanner par exemple) + les informations associées à l'image (modèle du scanner, dates, etc…) ou les données du patient (nom, prénom, etc..)

L'objectif du projet est de réaliser un logiciel simple (écrit en C++) permettant d'exporter une partie des données associées à plusieurs fichiers DICOM contenu dans un répertoire, vers un fichier texte simple, qui regroupera les informations sous forme de tableau.

Par exemple :

⇒ Repertoire_fichiers

image1.dcm
image2.dcm
image3.dcm

⇒ Total.txt

nom fichier 	nom patient	prenom patient	date naissance	...
image1.dcm	Dupont		Marcel		01/01/1990	...
image2.dcm	Martin		Claude		01/01/1985	...
image3dcm	Holland		Francois	01/01/1950	...

Les colonnes pourront etre séparées par des tabulations

Pour cela, il vous faudra :

- Comprendre comment est constitué le format Dicom (exemple dans mon cours + chercher sur Internet)

- Utiliser une bibliothèque aidant à la manipulation des fichiers Dicom en C++. Ces bibliothèques vous fournissent des fonctions (ou plus fréquemment des classes si vous programmer en objets) vous facilitant la lecture ou les modifications des données contenues dans les fichiers Dicom. Il en existe plusieurs en C++. Il faudra en télécharger une et ajouter l' “include” correspondant en entête de votre programme. Certaines bibliothèque sont simples, d'autres sont beaucoup plus étendues (avec + de possibilités). Vous avez le choix d'utiliser ce que vous souhaitez (parmi les gratuites), sachant que les fonctions présentes dans les bibliothèques de base devraient déjà être largement suffisantes…

Voici quelques liens pour vous aider sur le format DICOM : http://www.cabiatl.com/mricro/dicom/index.html http://www.idoimaging.com/index.shtml

Quelques exemple de bibliothèques pour le DICOM : DicomSDL (simple à utiliser mais parfois difficle à installer - http://dicomsdl.googlecode.com/), DCMTK (complexe mais étendue - http://dicom.offis.de/dcmtk.php.en), Imebra (orienté objets + interfaces graphiques - http://imebra.com)

A noter que vous pouvez vous aider de ce tutoriel pour installer ces bibliothèques : Aide pour l'installation de la bibliothèque "DicomSDL"

Quoi faire en pratique :

- Dans un premier temps, vous devrez trouver sur internet et télécharger plusieurs fichiers d'images Dicom en exemples (peu importe si ce sont des images scanner, irm, de poumons, de coeur ou autres…). Plusieurs dizaines de ces images seront mises dans un répertoire sur le disque dur.

- Lire les informations dans tous ces fichiers Dicom du réperoire donnée en entrée. Les informations à récupérer sont celles courantes comme le nom d'un patient, l'ID du patient, la date de création du fichier, etc.. La liste n'est pas exhaustive, vous etes libres de récupérer ce que vous voulez. Eventuellement, donner le choix à l'utilisateur de choisir les champs qui doivent etre lus.

Noter que pour voir les informations contenues dans un fichier DICOM vous pouvez utiliser un logiciel gratuit comme “EzDicom”

- Ecrire sous forme de tableau ces informations dans un fichier texte simple (champs séparé par des tabulations). Le nom de ce fichier de sortie sera spécifié également en entrée.

- Ajouter quelques lignes en plus dans le fichier de sortie qui donnent quelques statistiques comme la moyenne d'age des patients, la date du fichier le plus récent et le plus vieux, etc.. La liste n'est pas exhaustive et n'hésitez pas à ajouter ce que vous suggerez utile.

Vous pouvez présenter votre logiciel soit en ligne de commande dans un terminal (avec des CIN, COUT …), soit sous forme d'interface graphique (avec une fenêtre et des boutons). L'interface graphique (Tk, Qt, WxWindow, Gtk…) sera certes plus conviviale et fonctionnelle, mais vous demandera plus d'efforts pour utiliser les instructions spécifiques à telle ou telle bibliothèque graphique. L'utilisation de bibliothèque graphique n'est pas imposé, c'est en bonus si vous avez le temps.

Projet 3 - Température d'hybridation ADN/ADN

L'amplification d'ADN est une pratique courante en biologie moléculaire. Le but est de multiplier une portion d'ADN extraite de cellules afin de disposer de millions de copies identiques. Cette portion d'ADN correspond généralement à un ou plusieurs gènes que l'on veut identifier ou analyser ensuite grâce à différentes techniques.

Pour simplifier, les copies d'ADN se font grâce à une enzyme, l'ADN-polymérase. Cette enzyme a besoin d'une “amorce” (=oligomère) pour démarrer la copie à un endroit voulu. Cette amorce est généralement un petit morceau d'ADN d'une vingtaine de nucléotides qui doit pouvoir se “coller” (=s'hybrider) à la séquence à copier et sera le point de départ de la copie. Elle doit donc être assez spécifique de la partie à “coller”, sinon la copie ne se fera pas.

Par exemple :

        CGCTTTAAAATCGCTTAAA (=> sens de la copie)
        ||||||||||||||||||| TTTGAAAGGCGAAATTTTAGCGAATTTGAAATTTGTAGAAGAACTGCTTGGCATCGGGTTTAAAGACCCTAGCGCCTATTTCCAACTAGGCGTGA ...

L'amorce (en vert) doit être une séquence complémentaire de la zone de la séquence d'où va démarrer la copie (en noir/gras). Une séquence complémentaire signifie que tous les nucléotides sont “complémentés”, c'est-à-dire que A devient T, T devient A, C devient G, G devient C)

Cette spécificité de l'amorce avec la bonne zone de séquence correspond à une énergie (une enthalpie), couramment assimilée à une température, la Tm (Température de Melting). Plusieurs formules permettent de calculer cette température. Si aucune partie de la séquence n'a de Tm suffisamment élevé pour une amorce donnée, l'amorce ne fonctionnera pas (et la séquence ne sera pas copiée).

Si on reprend l'exemple précédent, on aura par exemple :

        CGCTTTAAAATCGCTTAAA (=> sens de la copie)
        |||||||||||||||||||
TTTGAAAGGCGAAATTTTAGCGAATTTGAAATTTGTAGAAGAACTGCTTGGCATCGGGTTTAAAGACCCTAGCGCCTATTTCCAACTAGGCGTGA ...

⇒ Tm de 57,63°C

        CGCTTTAAAATCGCTTAAA (=> sens de la copie)
        |||||||||||||||||||
TTTGAAAGGCGAAATTTTATCGAATTTGAAATTTGTAGAAGAACTGCTTGGCATCGGGTTTAAAGACCCTAGCGCCTATTTCCAACTAGGCGTGA ...

⇒ Tm de 47,78°C (température plus basse, car un nucléotide non complémentaire (en rouge))

                               CGCTTTAAAATCGCTTAAA (=> sens de la copie)
                               |||||||||||||||||||
TTTGAAAGGCGAAATTTTACCGAATTTGAAATTTGTAGAAGAACTGCTTGGCATCGGGTTTAAAGACCCTAGCGCCTATTTCCAACTAGGCGTGA ...

⇒ Tm = 0 °C (hybridation impossible à cet endroit, car pas ou peu complémentaire, la Tm est mise par défaut à 0)


Le but du projet est pour un ensemble d'amorces et de séquences, calculer toutes le combinaisons possibles de Tm, pour in fine obtenir la température maximale pour chaque amorce sur chaque séquence. Ainsi, supposons avoir 3 amorces (P1, P2, P3) à tester sur 5 séquences (seq1, seq2, seq3, seq4, seq5). Le but est d'avoir une synthèse qui donne quelque chose comme :

P1 sur seq1 = 45 °C
P1 sur seq2 = 30 °C 
P1 sur seq3 = 0 °C 
P2 sur seq1 = 47°C 
P2 sur seq2 = 50°C 
etc...

En pratique :

P1 => AAAGAGAACGAAATCATCC
P2 => ATAGTGGCAACTACCCCGAAA 
P3 => AAATATTGTTGTTGTTGGCG

Le programme s'utilise comme dans cet exemple (sous l'invite de commande Windows ou sous Linux):

set NN_PATH=D:\melting\NNFILES

puis,

D:\melting\BIN\melting4_3-win32.exe -Scgctttaaaatcgcttaaa -Cgcgaaattttagcgaattt -N0.05 -P0.0005 -Hdnadna

La première ligne (set …) sert à indiquer où sont installés les fichiers indispensables pour le programme. Remplacer “D:\…” par le bon emplacement sur votre PC.

L'autre ligne est le programme qui calcule la température. - Remplacer éventuellement “melting4_3-win32.exe” par l'exécutable correspondant à votre systèmed'exploitation (fichiers dans /BIN).
- Ce qui suit “-S” est l'amorce (dans l'exemple “cgctttaaaatcgcttaaa”).
- Ce qui suit “-C” est la partie complémentaire de la séquence (dans l'exemple “gcgaaattttagcgaattt”).
- Laissez les autres options comme dans l'exemple.

Le programme donne soit la température correspondante, soit une erreur ce qui signifie que la température n'a pas pu être calculée et est donc = à 0.

⇒ Tester dans un invite de commande (ou un terminal Linux) ce programme et regarder la sortie

Il faut faire un programme en C++ qui :

Par exemple pour la séquence : TTTGAAAGGCGAAATTTTATCGAATTTGAAATTTG… si on teste une amorce de longueur 18, on aura tous les morceaux

TTTGAAAGGCGAAATTTT
TTGAAAGGCGAAATTTTA
TGAAAGGCGAAATTTTAT
GAAAGGCGAAATTTTATC

Etc..

A la fin on doit afficher une liste du Tm max pour chaque séquence, par amorce.