TD2 exercice : ADN CRISPR


Jouer avec l'ADN

Dans ce devoir, nous allons vous montrer comment utiliser la classe ADN pour manipuler les gènes. Les technologies de thérapies géniques deviennent de plus en plus performantes et permette de supprimer, modifier ou ajouter des gènes à un ADN défectueux. La technologie la plus avancée, crispr cas9, est développée par une chercheuse française, Emmanuelle Charpentier

Identifier l'ADN défectueux

  1. Regarder la fonction main. Celle-ci appelle d'autres fonctions que vous allez devoir modifier pour les faire fonctionner.
  2. checkGeneParsing() fait un test général sur l'algorithme de parsing d'un génome. Vous pouvez prendre exemple sur son implémentation dans votre travail. Regarder les méthodes getAllGenes et getGeneFrom pour vous assurer de bien les avoir comprises
  3. checkFixGene utilise les méthodes hasGene et deleteGene. hasGene vérifie qu'un ADN contient bien un gène (passé en paramètre), sans distinction de ses codons de début et de fin. La comparaison ne se fait donc que sur le "coeur" du gène, en ne considérant pas les premiers et les derniers codons. deleteGene supprime un gène de l'ADN. Implémentez ces deux méthodes. Pour tester, vous pouvez écrire vous même des cas de test ou utiliser celui proposé dans la fonction checkFixGene. (si correctement implémenté, vous devriez avoir "DNA is fixed!" dans le terminal après exécution)

NB: si on veut supprimer un gène contenant xxxyyy, on va trouver tout gène contenant xxxyyy (par exemple ATGxxxyyyTAA ou ATGxxxyyyTGA) et supprimer le gène correspondant. Donc si le cœur du gène à supprimer est de taille 12, au total on supprimera 12 + 3 + 3 = 18 nucléotides en comptant les codons de début et de fin.

réparer l'ADN

  1. checkFixGene utilise également la méthode insertGene. Cette méthode rajoute un gène à un ADN, en le positionnant juste après le gène passé en paramètre. comme les autres méthodes, cette méthode-ci ne considère que le "coeur" du gène pour rechercher l'endroit où insérer l'ADN étranger. Implémenter cette méthode, vous deviez avoir "New gene added in DNA!" dans le terminal après exécution. déceler les lien de parenté grâce à l'ADN

  2. checkfindIntruder est une méthode qui permet de comparer différent brin d'ADN d'une même famille et de s'assurer des liens de parenté entre les individus. Nous avons crée pour vous une méthode getFamilly() qui renvoie un intérable sur les membres d'une famille. Le ratio de similarité entre 2 ADN (méthode checkSimilarityRadio) permet de savoir combien de gènes sont en commun entre deux membres d'une famille. A titre d'exemple, les enfant hérite pour moitié du patrimoine générique de leur père et pour l'autre moitié de leur mère. A ce titre, on devrait avoir papa.checkSimilarityRadio(fils)=0.5

    1. Quel est le ratio de similarité entre une mère et son fils?
    2. entre un enfant et son grand père?
    3. entre deux cousins germains?
    4. entre un mari et sa femme?
  3. implémenter la méthode checkSimilarityRadio

  4. utiliser la fonction pour savoir quel membre de la famille présente dans dans un itérable fourni par getFamilly() est un "intrus" c'est à dire qu'il ne possède que très peu de matériel génétique avec les autres mêmes de la famille (il n'est ni parent, ni enfant ni cousin d'aucun autre membre).

Question bonus

  1. Reconstituer l'arbre généalogique de cette famille.