From 9a36ea8639010bc71ded2e9d93cc27d23601fcb6 Mon Sep 17 00:00:00 2001 From: ChloeVidal04 <99488093+ChloeVidal04@users.noreply.github.com> Date: Thu, 20 Mar 2025 19:19:31 +0100 Subject: [PATCH] Add files via upload --- BINF2025_TP3.ipynb | 548 +++++++++++++++++++++++++++++---------------- 1 file changed, 361 insertions(+), 187 deletions(-) diff --git a/BINF2025_TP3.ipynb b/BINF2025_TP3.ipynb index 61e87c2..bc59cbc 100644 --- a/BINF2025_TP3.ipynb +++ b/BINF2025_TP3.ipynb @@ -1,49 +1,37 @@ { - "nbformat": 4, - "nbformat_minor": 0, - "metadata": { - "colab": { - "provenance": [], - "authorship_tag": "ABX9TyNSXnqaXAUgZK9rmJ1TWbGo" - }, - "kernelspec": { - "name": "python3", - "display_name": "Python 3" - }, - "language_info": { - "name": "python" - } - }, "cells": [ { "cell_type": "markdown", - "source": [ - "# BINF TP3 - Algorithmes d'alignement par paire" - ], "metadata": { "id": "V09wQ1WIOmgn" - } + }, + "source": [ + "# BINF TP3 - Algorithmes d'alignement par paire" + ] }, { "cell_type": "markdown", - "source": [ - "Dans ce TP nous allons manipuler les algorithmes d'alignement par paire." - ], "metadata": { "id": "er6CtAyOxC6F" - } + }, + "source": [ + "Dans ce TP nous allons manipuler les algorithmes d'alignement par paire." + ] }, { "cell_type": "markdown", - "source": [ - "# Exercice 0 - Echauffement" - ], "metadata": { "id": "BqEa3BJ1xICM" - } + }, + "source": [ + "# Exercice 0 - Echauffement" + ] }, { "cell_type": "markdown", + "metadata": { + "id": "qqiiq5bcxYvM" + }, "source": [ "Q1. Donnez le score de la superposition :\n", "\n", @@ -65,44 +53,45 @@ "et\n", "\n", "$\\gamma(g) = 0.5 |g| + 0.5$" - ], - "metadata": { - "id": "qqiiq5bcxYvM" - } + ] }, { "cell_type": "markdown", + "metadata": { + "id": "kCJGGGYQ2GNi" + }, "source": [ "```markdown\n", - "Votre réponse ici\n", + "1+1-1,5+1-1-1-1+1-2+1+1+1= -1.5+1+1 = 0.5\n", "```" - ], - "metadata": { - "id": "kCJGGGYQ2GNi" - } + ] }, { "cell_type": "markdown", - "source": [ - "Q2. Alignez les séquences suivantes avec l'algorithme de Levenshtein : x = ATG et y = ACTG." - ], "metadata": { "id": "XyhXAhK-2NKJ" - } + }, + "source": [ + "Q2. Alignez les séquences suivantes avec l'algorithme de Levenshtein : x = ATG et y = ACTG." + ] }, { "cell_type": "markdown", + "metadata": { + "id": "b9iovhyZ2bXw" + }, "source": [ "```markdown\n", - "Votre réponse ici\n", + "d=1\n", + "\n", "```" - ], - "metadata": { - "id": "b9iovhyZ2bXw" - } + ] }, { "cell_type": "markdown", + "metadata": { + "id": "OV_YaQHr2elB" + }, "source": [ "Q3.\tAlignez les séquences suivantes avec l'algorithme de Needleman-Wunsch global x = TAT et y = ATGAC en considérant le schéma d'évaluation suivant\n", "\n", @@ -116,77 +105,144 @@ "et\n", "\n", "$\\gamma(g) = 0.5 |g|$\n" - ], - "metadata": { - "id": "OV_YaQHr2elB" - } + ] }, { "cell_type": "markdown", + "metadata": { + "id": "g_MrecVs3Nrw" + }, "source": [ "```markdown\n", - "Votre réponse ici\n", + "\n", + "_T_AT\n", + "ATGAC\n", + "tt = -0.5 + 1 - 0.5 +1 -0.5 = -1.5 + 2 = 0.5\n", + "\n", + "```\n", + "\n", + "| | 0 | A | T | G | A | C |\n", + "| :---: | :---: | :---: | :---: | :---: | :---: | :---: |\n", + "| **0** | 0 | -0.5 | -1 | -1.5 | -2 | -2.5 |\n", + "| **T** | -0.5 | -0.5 | 0.5 | 0 | -0.5 | -1 |\n", + "| **A** | -1 | 0.5 | 0 | 0 | 1 | 0.5 |\n", + "| **T** | -1.5 | 0 | 1.5 | 1 | 0.5 | 0.5 |\n", + "\n", + "```markdown\n", + "\n", + "s[1,1] =Max { S(x0), S(y0) + s[0,0] or\n", + " -0.5 + s[0,1] or \n", + " -0.5 + s[1,0] }\n", + " \n", "```" - ], - "metadata": { - "id": "g_MrecVs3Nrw" - } + ] }, { "cell_type": "markdown", - "source": [ - "Q4. Alignez les séquences suivantes avec l'algorithme de Smith-Waterman x = TTGG y = ATGAC en utilisant le schéma d'évaluation de la question précédente.\n" - ], "metadata": { "id": "y1YF-G6E3Qoo" - } + }, + "source": [ + "Q4. Alignez les séquences suivantes avec l'algorithme de Smith-Waterman x = TTGG y = ATGAC en utilisant le schéma d'évaluation de la question précédente.\n" + ] }, { "cell_type": "markdown", + "metadata": { + "id": "LLMECocb3pgI" + }, "source": [ "```markdown\n", - "Votre réponse ici\n", + "TTGG_\n", + "ATGAC\n", + "\n", + "tt = -0.5 + 2 -0.5 -0.5 = 0.5\n", "```" - ], - "metadata": { - "id": "LLMECocb3pgI" - } + ] }, { "cell_type": "markdown", - "source": [ - "# Exercice 1 : Algorithme de Levenshtein - version récursive" - ], "metadata": { "id": "46gw0avh3wGw" - } + }, + "source": [ + "# Exercice 1 : Algorithme de Levenshtein - version récursive" + ] }, { "cell_type": "markdown", + "metadata": { + "id": "ZKc09Kyg4a6v" + }, "source": [ "Q1. Ecrivez une fonction\n", "\n", "levenshtein(x: str, y: str) -> int\n", "\n", "qui retourne la distance de Levenshtein entre les séquences x et y en utilisant la version récursive de l'algorithme." - ], - "metadata": { - "id": "ZKc09Kyg4a6v" - } + ] }, { "cell_type": "code", - "source": [ - "#Votre code ici" - ], + "execution_count": 37, "metadata": { "id": "FJR69IEQ4aHv" }, - "execution_count": null, - "outputs": [] + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "dif = 3\n" + ] + } + ], + "source": [ + "#Votre code ici\n", + "def mymin(x, y, z):\n", + " if (x < y and x < z):\n", + " return x\n", + " elif (y < z):\n", + " return y\n", + " else:\n", + " return z\n", + "\n", + "def levenshtein(a, b):\n", + " if(len(a) == 0):\n", + " return len(b)\n", + " elif(len(b)==0):\n", + " return len(a)\n", + " elif(a[0] == b[0]):\n", + " return levenshtein(a[1:], b[1:])\n", + " else:\n", + " change = levenshtein(a[1:], b[1:])\n", + " delete = levenshtein(a, b[1:])\n", + " add = levenshtein(a[1:], b)\n", + " # print(\"a=\" + a + \", b=\"+ b)\n", + " # print(change)\n", + " # print(delete)\n", + " # print(add)\n", + " return mymin(change, delete, add) +1\n", + "\n", + "# test_a = \"ATGA\"\n", + "# test_b = \"ACTG\" \n", + "# test_a = \"CCAG\"\n", + "# test_b = \"CA\" \n", + "test_a = \"CCGTAAA\"\n", + "test_b = \"CGTCA\" \n", + "\n", + "# /!\\ C MORT /!\\ (need itératif)\n", + "# test_a = \"ATGGTGAGCAAGGGCGAGGAGGATAACATGGCCATCATCAAGGAGTTCATGCGCTTCAAGGTGCACATGGAGGGCTCCGTGAACGGCCACGAGTTCGAGATCGAGGGCGAGGGCGAGGGCCGCCCCTACGAGGGCACCCAGACCGCCAAGCTGAAGGTGACCAAGGGTGGCCCCCTGCCCTTCGCCTGGGACATCCTGTCCCCTCAGTTCATGTACGGCTCCAAGGCCTACGTGAAGCACCCCGCCGACATCCCCGACTACTTGAAGCTGTCCTTCCCCGAGGGCTTCAAGTGGGAGCGCGTGATGAACTTCGAGGACGGCGGCGTGGTGACCGTGACCCAGGACTCCTCCCTGCAGGACGGCGAGTTCATCTACAAGGTGAAGCTGCGCGGCACCAACTTCCCCTCCGACGGCCCCGTAATGCAGAAGAAGACCATGGGCTGGGAGGCCTCCTCCGAGCGGATGTACCCCGAGGACGGCGCCCTGAAGGGCGAGATCAAGCAGAGGCTGAAGCTGAAGGACGGCGGCCACTACGACGCTGAGGTCAAGACCACCTACAAGGCCAAGAAGCCCGTGCAGCTGCCCGGCGCCTACAACGTCAACATCAAGTTGGACATCACCTCCCACAACGAGGACTACACCATCGTGGAACAGTACGAACGCGCCGAGGGCCGCCACTCCACCGGCGGCATGGACGAGCTGTACAAGTAA\"\n", + "# test_b = \"ATGGTCTCCTTCAAATCTCTCCTAGTTCTCTGTTGCGCTGCCCTTGGGGCATTCGCTACGAAGAGAATGAGTAAAGGAGAAGAACTTTTCACTGGAGTTGTCCCAATTCTTGTTGAATTAGATGGTGATGTTAATGGGCACAAATTTTCTGTCAGTGGAGAGGGTGAAGGTGATGCAACATACGGAAAACTTACCCTTAAATTTATTTGCACTACTGGAAAACTACCTGTTCCATGGCCAACACTTGTCACTACTTTCACCTATGGTGTTCAATGCTTTTCAAGATACCCAGATCATATGAAGCGGCACGACTTCTTCAAGAGCGCCATGCCTGAGGGATACGTGCAGGAGAGGACCATCTTCTTCAAAGACGACGGGAACTACAAGACACGTGCTGAAGTCAAGTTTGAGGGAGACACCCTCGTCAACAGGATCGAGCTTAAGGGAATCGATTTCAAGGAGGACGGAAACATCCTCGGCCACAAGTTGGAATACAACTACAACTCCCACAACGTATACATCATGGCCGACAAGCAAAAGAACGGCATCAAAGCCAACTTCAAGACCCGCCACAACATCGAAGACGGCGGCGTGCAACTCGCTGATCATTATCAACAAAATACTCCAATTGGCGATGGCCCTGTCCTTTTACCAGACAACCATTACCTGTCCACACAATCTGCCCTTTCGAAAGATCCCAACGAAAAGAGAGACCACATGGTCCTTCTTGAGTTTGTAACAGCTGCTGGGATTACACATGGCATGGATGAACTATACAAATAA\"\n", + "print(\"dif = \" + str(levenshtein(test_a, test_b)))\n", + " " + ] }, { "cell_type": "markdown", + "metadata": { + "id": "arFVwA6E5NWn" + }, "source": [ "Q2. Vous pouvez tester votre code sur les exemples suivants:\n", "\n", @@ -196,79 +252,164 @@ "* $L(AY678264^*, OQ870305^*) = 310$\n", "\n", "$^*$ ids genbank de deux sequences." - ], - "metadata": { - "id": "arFVwA6E5NWn" - } + ] }, { "cell_type": "markdown", - "source": [ - "# Exercice 2 : Algorithme de Smith-Waterman - version itérative" - ], "metadata": { "id": "erCpfG7O7BV-" - } + }, + "source": [ + "# Exercice 2 : Algorithme de Smith-Waterman - version itérative" + ] }, { "cell_type": "markdown", + "metadata": { + "id": "rv2Y78y37IOd" + }, "source": [ "Q1. Ecrivez la fonction\n", "\n", "sw_fwd(x: str, y: str, cmap: dict, sigma: array, (go, ge): list) -> (array, array)\n", "\n", "qui construit les matrices $S$ et $B$ en utilisant l'algorithme de Smith-Waterman pour aligner les séquences x et y suivant le schéma d'évaluation donné par la matrice de substitution $\\Sigma$ et la fonction d'évaluation des trous $\\gamma(n)= g_o + g_e \\times n$. Le dictionnaire cmap donne la position des différents nucléotides dans la matrice $\\Sigma$. La fonction retourne la paire de matrices de score $S$ et de retour $B$." - ], - "metadata": { - "id": "rv2Y78y37IOd" - } + ] }, { "cell_type": "code", - "source": [ - "#Votre code ici" - ], + "execution_count": 76, "metadata": { "id": "njn3JB0b-WHj" }, - "execution_count": null, - "outputs": [] + "outputs": [], + "source": [ + "import numpy as np\n", + "\n", + "def sw_fwd(x: str, y: str, cmap: dict, sigma: np.ndarray, gap: tuple) -> tuple:\n", + " go, ge = gap\n", + " m, n = len(x), len(y)\n", + " S = np.zeros((m + 1, n + 1), dtype=float)\n", + " B = np.zeros((m + 1, n + 1), dtype=int)\n", + "\n", + " max_score = 0.0\n", + " max_pos = (0, 0)\n", + "\n", + " for i in range(1, m + 1):\n", + " for j in range(1, n + 1):\n", + " match = S[i - 1, j - 1] + sigma[cmap[x[i - 1]], cmap[y[j - 1]]]\n", + " delete = S[i - 1, j] - (go if B[i - 1, j] != 2 else ge)\n", + " insert = S[i, j - 1] - (go if B[i, j - 1] != 3 else ge)\n", + "\n", + " S[i, j] = max(0, match, delete, insert)\n", + "\n", + " if S[i, j] == match:\n", + " B[i, j] = 1 # Diagonal\n", + " elif S[i, j] == delete:\n", + " B[i, j] = 2 # Up\n", + " elif S[i, j] == insert:\n", + " B[i, j] = 3 # Left\n", + "\n", + " if S[i, j] > max_score:\n", + " max_score = S[i, j]\n", + " max_pos = (i, j)\n", + "\n", + " return (S, B), max_pos" + ] }, { "cell_type": "markdown", + "metadata": { + "id": "55n8mt9U-Wai" + }, "source": [ "Q2. Ecrivez la fonction\n", "\n", "sw_bwd(x: str, y: str, S: array, B: array) -> (str, str, float)\n", "\n", "qui effectue l'etape de retour de l'algorithme de Smith-Waterman etant donné les séquences $x$ et $y$ et les matrices de score $S$ et de retour $B$. La fonction retourne un tuple contenant les alignements des séquences x et y et le score de l'alignement." - ], - "metadata": { - "id": "55n8mt9U-Wai" - } + ] }, { "cell_type": "code", - "source": [ - "#Votre code ici" - ], + "execution_count": 62, "metadata": { "id": "ij9JDpBm_UZ7" }, - "execution_count": null, - "outputs": [] + "outputs": [], + "source": [ + "def sw_bwd(x: str, y: str, S: np.ndarray, B: np.ndarray) -> tuple:\n", + " i, j = np.unravel_index(np.argmax(S), S.shape)\n", + " align_x, align_y = \"\", \"\"\n", + " score = S[i, j]\n", + "\n", + " while i > 0 and j > 0 and S[i, j] > 0:\n", + " if B[i, j] == 1: # Diagonal\n", + " align_x += (x[i - 1])\n", + " align_y += (y[j - 1])\n", + " i -= 1\n", + " j -= 1\n", + " elif B[i, j] == 2: # Up\n", + " align_x += (x[i - 1])\n", + " align_y += ('_')\n", + " i -= 1\n", + " elif B[i, j] == 3: # Left\n", + " align_x += ('_')\n", + " align_y += (y[j - 1])\n", + " j -= 1\n", + "\n", + " x = align_x[::-1]\n", + " y = align_y[::-1]\n", + "\n", + " return x, y, float(score)" + ] }, { "cell_type": "markdown", - "source": [ - "Q3. Vous pouvez tester votre code en utilisant le schéma d'évaluation suivant :" - ], "metadata": { "id": "kwmxg2dxAiwS" - } + }, + "source": [ + "Q3. Vous pouvez tester votre code en utilisant le schéma d'évaluation suivant :" + ] }, { "cell_type": "code", + "execution_count": 75, + "metadata": { + "id": "JUtYRFTBAwwZ" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "S =\n", + "[[0. 0. 0. 0. 0. 0. ]\n", + " [0. 0. 1. 1. 1. 0.5]\n", + " [0. 1. 1. 1. 1. 1. ]\n", + " [0. 1. 1. 0.5 0.5 2. ]\n", + " [0. 1. 1. 1. 0.5 2. ]]\n", + "B =\n", + "[[0 0 0 0 0 0]\n", + " [0 2 1 1 3 3]\n", + " [0 1 2 2 2 3]\n", + " [0 2 3 1 1 1]\n", + " [0 1 2 3 2 2]]\n", + "max pos = (0, 0)\n" + ] + }, + { + "data": { + "text/plain": [ + "('T_CG', 'TA_G', 2.0)" + ] + }, + "execution_count": 75, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "cmap = {\"A\": 0, \"T\": 1, \"G\": 2, \"C\": 3}\n", "m = np.array([[1, -0.5, -0.5, -0.5],\n", @@ -276,28 +417,34 @@ " [-0.5, -0.5, 1, -0.5],\n", " [-0.5, -0.5, -0.5, 1]])\n", "go = 0\n", - "ge = 0.5" - ], - "metadata": { - "id": "JUtYRFTBAwwZ" - }, - "execution_count": null, - "outputs": [] + "ge = 0.5\n", + "\n", + "# test_a = \"ATGGTGAGCAAGGGCGAGGAGGATAACATGGCCATCATCAAGGAGTTCATGCGCTTCAAGGTGCACATGGAGGGCTCCGTGAACGGCCACGAGTTCGAGATCGAGGGCGAGGGCGAGGGCCGCCCCTACGAGGGCACCCAGACCGCCAAGCTGAAGGTGACCAAGGGTGGCCCCCTGCCCTTCGCCTGGGACATCCTGTCCCCTCAGTTCATGTACGGCTCCAAGGCCTACGTGAAGCACCCCGCCGACATCCCCGACTACTTGAAGCTGTCCTTCCCCGAGGGCTTCAAGTGGGAGCGCGTGATGAACTTCGAGGACGGCGGCGTGGTGACCGTGACCCAGGACTCCTCCCTGCAGGACGGCGAGTTCATCTACAAGGTGAAGCTGCGCGGCACCAACTTCCCCTCCGACGGCCCCGTAATGCAGAAGAAGACCATGGGCTGGGAGGCCTCCTCCGAGCGGATGTACCCCGAGGACGGCGCCCTGAAGGGCGAGATCAAGCAGAGGCTGAAGCTGAAGGACGGCGGCCACTACGACGCTGAGGTCAAGACCACCTACAAGGCCAAGAAGCCCGTGCAGCTGCCCGGCGCCTACAACGTCAACATCAAGTTGGACATCACCTCCCACAACGAGGACTACACCATCGTGGAACAGTACGAACGCGCCGAGGGCCGCCACTCCACCGGCGGCATGGACGAGCTGTACAAGTAA\"\n", + "# test_b = \"ATGGTCTCCTTCAAATCTCTCCTAGTTCTCTGTTGCGCTGCCCTTGGGGCATTCGCTACGAAGAGAATGAGTAAAGGAGAAGAACTTTTCACTGGAGTTGTCCCAATTCTTGTTGAATTAGATGGTGATGTTAATGGGCACAAATTTTCTGTCAGTGGAGAGGGTGAAGGTGATGCAACATACGGAAAACTTACCCTTAAATTTATTTGCACTACTGGAAAACTACCTGTTCCATGGCCAACACTTGTCACTACTTTCACCTATGGTGTTCAATGCTTTTCAAGATACCCAGATCATATGAAGCGGCACGACTTCTTCAAGAGCGCCATGCCTGAGGGATACGTGCAGGAGAGGACCATCTTCTTCAAAGACGACGGGAACTACAAGACACGTGCTGAAGTCAAGTTTGAGGGAGACACCCTCGTCAACAGGATCGAGCTTAAGGGAATCGATTTCAAGGAGGACGGAAACATCCTCGGCCACAAGTTGGAATACAACTACAACTCCCACAACGTATACATCATGGCCGACAAGCAAAAGAACGGCATCAAAGCCAACTTCAAGACCCGCCACAACATCGAAGACGGCGGCGTGCAACTCGCTGATCATTATCAACAAAATACTCCAATTGGCGATGGCCCTGTCCTTTTACCAGACAACCATTACCTGTCCACACAATCTGCCCTTTCGAAAGATCCCAACGAAAAGAGAGACCACATGGTCCTTCTTGAGTTTGTAACAGCTGCTGGGATTACACATGGCATGGATGAACTATACAAATAA\"\n", + "\n", + "\n", + "pair, maxi = sw_fwd('TCGC', 'CTTAG', cmap, m, (go, ge))\n", + "print(\"S =\")\n", + "print(pair[0])\n", + "print(\"B =\")\n", + "print(pair[1])\n", + "print(\"max pos = \", str(maxi))\n", + " \n", + "sw_bwd('TCGC', 'CTTAG', pair[0], pair[1])\n" + ] }, { "cell_type": "markdown", - "source": [ - "* $SW('TCGC', 'CTTAG')$ retourne un score de $1.5$ à la position $(3,5)$ et l'alignement" - ], "metadata": { "id": "eMGh4K5aIFxE" - } + }, + "source": [ + "* $SW('TCGC', 'CTTAG')$ retourne un score de $1.5$ à la position $(3,5)$ et l'alignement" + ] }, { "cell_type": "code", - "source": [ - "HTML(\"
x:TCG
y:TAG
\")" - ], + "execution_count": 47, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -306,38 +453,38 @@ "id": "joHNwJ9AIf6F", "outputId": "a9206810-a083-4d86-8b14-38183f1dd80c" }, - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { - "text/plain": [ - "" - ], "text/html": [ "
x:TCG
y:TAG
" + ], + "text/plain": [ + "" ] }, + "execution_count": 47, "metadata": {}, - "execution_count": 18 + "output_type": "execute_result" } + ], + "source": [ + "from IPython.display import HTML\n", + "HTML(\"
x:TCG
y:TAG
\")" ] }, { "cell_type": "markdown", - "source": [ - "* $SW(AY678264^*, OQ870305^*)$ retourne un score de $342.1$ à la position $(708,717)$ et l'alignement" - ], "metadata": { "id": "JJlU5yvZI43D" - } + }, + "source": [ + "* $SW(AY678264^*, OQ870305^*)$ retourne un score de $342.1$ à la position $(708,717)$ et l'alignement" + ] }, { "cell_type": "code", - "source": [ - "from IPython.display import HTML\n", - "HTML(\"
x:ATGGTGAGCAAGGGCGAGGAGGATAACATGGCCATCATCAAGGAGTTCATGCGCTTCAAGGTGC-A-CATGGAGGGCTCCGTGAACGGCCACGAGTTCGAGATCGAG---GGCGAGGGCGAGGGC--CGCC-CCTACGAGGGCACCCAGACCGC-CAAGCTGAAGGTG-ACCA-AGG---G-TGGCC---CCCT-GCCCTTCGCCT-GGGA-CATCCTGTCC--C--C-T-CAGTTCATGT-A-CGGCT-CCAAGGCCTACGTG-A--AGCAC--C--C--C--G-CCGACATCCCCG-A--CTAC-T--TGAAGCTG-TCCTTC--C--C-----CGA-GG--GCTTCAAGTGGGAGCG-CGTGATGAACTTCGAGGACGGCGGCGTGGTG-ACCG--T-GA-C-CCAGGAC-TC--CTCCCTGCAGGACGGCGAGTTCATCTACAAGGTG---AAGCTGCGCGGCACCAACTTCCCCT-CCGACGGCCCCGTA-ATGCA-GAAGAAGACCATGGGCTG--GGA-GGCCTCCTCCGAGCGGATGTACCCCGAGGA-CGGCGCC-CTGAAGGGCGAGATCAAGCAGA-GGCTGAAGC-TGAAGGACGGCGGCCACTACGACGCTGAGGTCAAGACCACCTACA-AGGCCAAGAAG-CCCGTGCAGCTGCCCGGC-GCCTACAACGTCAACATCAAGT-TG----GA-CATCACCTCCCACAACGAGGA-CTAC-A-C-CA---T-C-G-TGGAACAGTACG-AACGCGCCGAGGGCCGCCACTCCAC-CGGCGGCATGGACGAGCTGTACAAG
y:ATGGTGAGCAAGGGCGAGGA-G----C-T-G--TTCA-C-CGG-GGTGGTGCCCATCCTGGT-CGAGC-TGGACGGCGACGTAAACGGCCACAAGTTC-AG--CGTGTCCGGCGAGGGCGAGGGCGATGCCACCTAC---GGCAAGCTGACC-CTGAAG-TTCATTTGCACCACCGGCAAGCTGCCCGTGCCCTGGCCC-AC-CCTCGTGACCACCCTGACCTACGGCGTGCAGTGC-T-TCAGCCGCTACCCCGACC-ACATGAAGCAGCACGACTTCTTCAAGTCCGCCATGCCCGAAGGCTACGTCCAGGAGC-GCACCATCTTCTTCAAGGACGACGGCAACTACAAGA-CCCGCGCCGAGGTGAAGTTCGAGGGCGACACCCTGGTGAACCGCATCGAGCTGAAGGGCATCGACTTCAAGGAGGACGGC-A--ACATC--C-TGGGGCACAAGCTG-G-AGTA-CAACTACAACAGCC-ACAACGTC-TATAT-CATG--GCCGA-CAA--GCAGAAGAACGG-CA--T-C-A-AGG-TGAACTTC-AAGATC--CGCCAC--AA---C---ATCGAG--GACGGC---AGCGTGCAGCTCGCCGACCACTACCA-GC--A-G--AACACC-CC--CATCGGCGACG--GCCCCGTGCTGCTGCCCGACAACC-ACTACCTGAGCACCCAGTCCGCCCTGAGCAA-A-GACCC-CAACGAGAAGC-GCGATCACATGGTCCTGCTGG---AGTTCGTGAC-CGCC----GCCGGGA-T-CACTC-TCGGCATGGACGAGCTGTACAAG
\")" - ], + "execution_count": 17, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -346,56 +493,62 @@ "id": "HUELvWKMFtIO", "outputId": "976bab6f-f1fc-4c5a-c69c-8de02fc838d0" }, - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { - "text/plain": [ - "" - ], "text/html": [ "
x:ATGGTGAGCAAGGGCGAGGAGGATAACATGGCCATCATCAAGGAGTTCATGCGCTTCAAGGTGC-A-CATGGAGGGCTCCGTGAACGGCCACGAGTTCGAGATCGAG---GGCGAGGGCGAGGGC--CGCC-CCTACGAGGGCACCCAGACCGC-CAAGCTGAAGGTG-ACCA-AGG---G-TGGCC---CCCT-GCCCTTCGCCT-GGGA-CATCCTGTCC--C--C-T-CAGTTCATGT-A-CGGCT-CCAAGGCCTACGTG-A--AGCAC--C--C--C--G-CCGACATCCCCG-A--CTAC-T--TGAAGCTG-TCCTTC--C--C-----CGA-GG--GCTTCAAGTGGGAGCG-CGTGATGAACTTCGAGGACGGCGGCGTGGTG-ACCG--T-GA-C-CCAGGAC-TC--CTCCCTGCAGGACGGCGAGTTCATCTACAAGGTG---AAGCTGCGCGGCACCAACTTCCCCT-CCGACGGCCCCGTA-ATGCA-GAAGAAGACCATGGGCTG--GGA-GGCCTCCTCCGAGCGGATGTACCCCGAGGA-CGGCGCC-CTGAAGGGCGAGATCAAGCAGA-GGCTGAAGC-TGAAGGACGGCGGCCACTACGACGCTGAGGTCAAGACCACCTACA-AGGCCAAGAAG-CCCGTGCAGCTGCCCGGC-GCCTACAACGTCAACATCAAGT-TG----GA-CATCACCTCCCACAACGAGGA-CTAC-A-C-CA---T-C-G-TGGAACAGTACG-AACGCGCCGAGGGCCGCCACTCCAC-CGGCGGCATGGACGAGCTGTACAAG
y:ATGGTGAGCAAGGGCGAGGA-G----C-T-G--TTCA-C-CGG-GGTGGTGCCCATCCTGGT-CGAGC-TGGACGGCGACGTAAACGGCCACAAGTTC-AG--CGTGTCCGGCGAGGGCGAGGGCGATGCCACCTAC---GGCAAGCTGACC-CTGAAG-TTCATTTGCACCACCGGCAAGCTGCCCGTGCCCTGGCCC-AC-CCTCGTGACCACCCTGACCTACGGCGTGCAGTGC-T-TCAGCCGCTACCCCGACC-ACATGAAGCAGCACGACTTCTTCAAGTCCGCCATGCCCGAAGGCTACGTCCAGGAGC-GCACCATCTTCTTCAAGGACGACGGCAACTACAAGA-CCCGCGCCGAGGTGAAGTTCGAGGGCGACACCCTGGTGAACCGCATCGAGCTGAAGGGCATCGACTTCAAGGAGGACGGC-A--ACATC--C-TGGGGCACAAGCTG-G-AGTA-CAACTACAACAGCC-ACAACGTC-TATAT-CATG--GCCGA-CAA--GCAGAAGAACGG-CA--T-C-A-AGG-TGAACTTC-AAGATC--CGCCAC--AA---C---ATCGAG--GACGGC---AGCGTGCAGCTCGCCGACCACTACCA-GC--A-G--AACACC-CC--CATCGGCGACG--GCCCCGTGCTGCTGCCCGACAACC-ACTACCTGAGCACCCAGTCCGCCCTGAGCAA-A-GACCC-CAACGAGAAGC-GCGATCACATGGTCCTGCTGG---AGTTCGTGAC-CGCC----GCCGGGA-T-CACTC-TCGGCATGGACGAGCTGTACAAG
" + ], + "text/plain": [ + "" ] }, + "execution_count": 17, "metadata": {}, - "execution_count": 15 + "output_type": "execute_result" } + ], + "source": [ + "from IPython.display import HTML\n", + "HTML(\"
x:ATGGTGAGCAAGGGCGAGGAGGATAACATGGCCATCATCAAGGAGTTCATGCGCTTCAAGGTGC-A-CATGGAGGGCTCCGTGAACGGCCACGAGTTCGAGATCGAG---GGCGAGGGCGAGGGC--CGCC-CCTACGAGGGCACCCAGACCGC-CAAGCTGAAGGTG-ACCA-AGG---G-TGGCC---CCCT-GCCCTTCGCCT-GGGA-CATCCTGTCC--C--C-T-CAGTTCATGT-A-CGGCT-CCAAGGCCTACGTG-A--AGCAC--C--C--C--G-CCGACATCCCCG-A--CTAC-T--TGAAGCTG-TCCTTC--C--C-----CGA-GG--GCTTCAAGTGGGAGCG-CGTGATGAACTTCGAGGACGGCGGCGTGGTG-ACCG--T-GA-C-CCAGGAC-TC--CTCCCTGCAGGACGGCGAGTTCATCTACAAGGTG---AAGCTGCGCGGCACCAACTTCCCCT-CCGACGGCCCCGTA-ATGCA-GAAGAAGACCATGGGCTG--GGA-GGCCTCCTCCGAGCGGATGTACCCCGAGGA-CGGCGCC-CTGAAGGGCGAGATCAAGCAGA-GGCTGAAGC-TGAAGGACGGCGGCCACTACGACGCTGAGGTCAAGACCACCTACA-AGGCCAAGAAG-CCCGTGCAGCTGCCCGGC-GCCTACAACGTCAACATCAAGT-TG----GA-CATCACCTCCCACAACGAGGA-CTAC-A-C-CA---T-C-G-TGGAACAGTACG-AACGCGCCGAGGGCCGCCACTCCAC-CGGCGGCATGGACGAGCTGTACAAG
y:ATGGTGAGCAAGGGCGAGGA-G----C-T-G--TTCA-C-CGG-GGTGGTGCCCATCCTGGT-CGAGC-TGGACGGCGACGTAAACGGCCACAAGTTC-AG--CGTGTCCGGCGAGGGCGAGGGCGATGCCACCTAC---GGCAAGCTGACC-CTGAAG-TTCATTTGCACCACCGGCAAGCTGCCCGTGCCCTGGCCC-AC-CCTCGTGACCACCCTGACCTACGGCGTGCAGTGC-T-TCAGCCGCTACCCCGACC-ACATGAAGCAGCACGACTTCTTCAAGTCCGCCATGCCCGAAGGCTACGTCCAGGAGC-GCACCATCTTCTTCAAGGACGACGGCAACTACAAGA-CCCGCGCCGAGGTGAAGTTCGAGGGCGACACCCTGGTGAACCGCATCGAGCTGAAGGGCATCGACTTCAAGGAGGACGGC-A--ACATC--C-TGGGGCACAAGCTG-G-AGTA-CAACTACAACAGCC-ACAACGTC-TATAT-CATG--GCCGA-CAA--GCAGAAGAACGG-CA--T-C-A-AGG-TGAACTTC-AAGATC--CGCCAC--AA---C---ATCGAG--GACGGC---AGCGTGCAGCTCGCCGACCACTACCA-GC--A-G--AACACC-CC--CATCGGCGACG--GCCCCGTGCTGCTGCCCGACAACC-ACTACCTGAGCACCCAGTCCGCCCTGAGCAA-A-GACCC-CAACGAGAAGC-GCGATCACATGGTCCTGCTGG---AGTTCGTGAC-CGCC----GCCGGGA-T-CACTC-TCGGCATGGACGAGCTGTACAAG
\")" ] }, { "cell_type": "markdown", + "metadata": { + "id": "Q5jVeLfgMMtA" + }, "source": [ "# Exercice 3 : Distribution des scores d’alignement pour des séquences aléatoires\n", "\n", "Pour tester si un alignement reflète une réelle similarité biologique, on va évaluer la distribution des scores d’alignement pour des paires de séquences aléatoires." - ], - "metadata": { - "id": "Q5jVeLfgMMtA" - } + ] }, { "cell_type": "markdown", - "source": [ - "Q1. En considérant deux séquences aléatoires de même taille N, où chaque nucléotide apparaît avec une probabilité uniforme de ¼, calculer le score moyen attendu pour une superposition sans trou dans le cas où une identité vaut +1 et une différence vaut 0." - ], "metadata": { "id": "6xyXw0HsMQGf" - } + }, + "source": [ + "Q1. En considérant deux séquences aléatoires de même taille N, où chaque nucléotide apparaît avec une probabilité uniforme de ¼, calculer le score moyen attendu pour une superposition sans trou dans le cas où une identité vaut +1 et une différence vaut 0." + ] }, { "cell_type": "markdown", + "metadata": { + "id": "meF18gt-Mhcn" + }, "source": [ "```markdown\n", - "Votre réponse ici\n", + "score = 1/4*N*1 + 3/4*N*0 = N/4\n", "```" - ], - "metadata": { - "id": "meF18gt-Mhcn" - } + ] }, { "cell_type": "markdown", + "metadata": { + "id": "fP5_mHnYMkNI" + }, "source": [ "Q2. La question précédente peut se resoudre analytiquement car on ne considère pas de trou. Pour étendre le résultat precedent à un alignement avec trous, on va se baser sur la simulation de séquences aleatoires.\n", "\n", @@ -404,78 +557,99 @@ " 2. un alignement local via Smith-Waterman (utilisez le code de l'exercice précédent)\n", "\n", "Utilisez le schéma d'évaluation suivant :" - ], - "metadata": { - "id": "fP5_mHnYMkNI" - } + ] }, { "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "akUVqotnOLkH" + }, + "outputs": [], "source": [ "rmap = {\"A\": 0, \"T\": 1, \"G\": 2, \"C\": 3}\n", "sigma = np.array([[1, -0.5, -0.5, -0.5],\n", " [-0.5, 1, -0.5, -0.5],\n", " [-0.5, -0.5, 1, -0.5],\n", " [-0.5, -0.5, -0.5, 1]])\n", - "go =0\n", + "go = 0\n", "ge = 0.5" - ], - "metadata": { - "id": "akUVqotnOLkH" - }, - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "code", - "source": [ - "#Votre code ici" - ], + "execution_count": null, "metadata": { "id": "UX0afNaqOVZ2" }, - "execution_count": null, - "outputs": [] + "outputs": [], + "source": [ + "#Votre code ici" + ] }, { "cell_type": "markdown", - "source": [ - "Q3. Qu'observez-vous ?" - ], "metadata": { "id": "UNn9fUuXO4Le" - } + }, + "source": [ + "Q3. Qu'observez-vous ?" + ] }, { "cell_type": "markdown", + "metadata": { + "id": "dSQEl0XXO8IG" + }, "source": [ "```markdown\n", "Votre réponse ici\n", "```" - ], - "metadata": { - "id": "dSQEl0XXO8IG" - } + ] }, { "cell_type": "markdown", - "source": [ - "Q4. Quelle conclusion peut-on en tirer sur la significativité d'un alignement ?" - ], "metadata": { "id": "xHfVXpQhf15n" - } + }, + "source": [ + "Q4. Quelle conclusion peut-on en tirer sur la significativité d'un alignement ?" + ] }, { "cell_type": "markdown", + "metadata": { + "id": "5KjhEeHDgDns" + }, "source": [ "```markdown\n", "Votre réponse ici\n", "```" - ], - "metadata": { - "id": "5KjhEeHDgDns" - } + ] } - ] -} \ No newline at end of file + ], + "metadata": { + "colab": { + "authorship_tag": "ABX9TyNSXnqaXAUgZK9rmJ1TWbGo", + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.9" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +}