diff --git a/BINF2025_TP3.ipynb b/BINF2025_TP3.ipynb
index 61e87c2..df2ad7d 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,49 @@
"et\n",
"\n",
"$\\gamma(g) = 0.5 |g| + 0.5$"
- ],
- "metadata": {
- "id": "qqiiq5bcxYvM"
- }
+ ]
},
{
"cell_type": "markdown",
- "source": [
- "```markdown\n",
- "Votre réponse ici\n",
- "```"
- ],
"metadata": {
"id": "kCJGGGYQ2GNi"
- }
+ },
+ "source": [
+ "$$Score(S_x, S_y) = (1 + 1 + 1 - 1 - 1 - 1 + 1 + 1 + 1 + 1) - (0.5 * 3 + 0.5) - (0.5 * 2 + 0.5)$$\n",
+ "$$Score(S_x, S_y) = 4 - 2 - 1.5$$\n",
+ "$$Score(S_x, S_y) = 0.5$$"
+ ]
},
{
"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",
- "source": [
- "```markdown\n",
- "Votre réponse ici\n",
- "```"
- ],
"metadata": {
"id": "b9iovhyZ2bXw"
- }
+ },
+ "source": [
+ "| |$\\empty$ | A |C |T |G |\n",
+ "| :---: | :---: | :---: | :---: | :---: | :---: |\n",
+ "| **$\\empty$** |0 |1 |2 |3 |4 |\n",
+ "| **A** |1 |0 |1 |2 |3 |\n",
+ "| **T** |2 |1 |1 |1 |2 |\n",
+ "| **G** |3 |2 |2 |2 |1 |\n",
+ "\n",
+ "$D_L$(x,y) = 1"
+ ]
},
{
"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 +109,106 @@
"et\n",
"\n",
"$\\gamma(g) = 0.5 |g|$\n"
- ],
- "metadata": {
- "id": "OV_YaQHr2elB"
- }
+ ]
},
{
"cell_type": "markdown",
- "source": [
- "```markdown\n",
- "Votre réponse ici\n",
- "```"
- ],
"metadata": {
"id": "g_MrecVs3Nrw"
- }
+ },
+ "source": [
+ "| |$\\empty$ | A |T |G |A |C |\n",
+ "| :---: | :---: | :---: | :---: | :---: | :---: | :---: |\n",
+ "| **$\\empty$** |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",
+ "x=_T_AT \n",
+ "y=ATGAC"
+ ]
},
{
"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",
"```"
- ],
- "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": 2,
"metadata": {
"id": "FJR69IEQ4aHv"
},
- "execution_count": null,
- "outputs": []
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "2\n",
+ "3\n"
+ ]
+ }
+ ],
+ "source": [
+ "def levenshtein(x:str, y:str):\n",
+ " if(len(x) == 0):\n",
+ " return len(y)\n",
+ " if(len(y) == 0):\n",
+ " return len(x)\n",
+ " if(x[0] == y[0]):\n",
+ " return levenshtein(x[1:], y[1:])\n",
+ " return 1 + min(\n",
+ " levenshtein(x[1:], y[1:]),\n",
+ " levenshtein(x[1:], y),\n",
+ " levenshtein(x,y[1:])\n",
+ " )\n",
+ "\n",
+ "print(levenshtein(\"CCAG\", \"CA\"))\n",
+ "print(levenshtein(\"CCGT\", \"CGTCA\"))"
+ ]
},
{
"cell_type": "markdown",
+ "metadata": {
+ "id": "arFVwA6E5NWn"
+ },
"source": [
"Q2. Vous pouvez tester votre code sur les exemples suivants:\n",
"\n",
@@ -196,79 +218,177 @@
"* $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": 83,
"metadata": {
"id": "njn3JB0b-WHj"
},
- "execution_count": null,
- "outputs": []
+ "outputs": [],
+ "source": [
+ "import numpy as np\n",
+ "\n",
+ "def gamma(go, ge ,n):\n",
+ " return go + ge * n\n",
+ "\n",
+ "def sw_fwd(x, y, cmap, sigma, go, ge):\n",
+ "\n",
+ " S = np.zeros((len(y) + 1, len(x) + 1)) #don't forget the empty !\n",
+ " B = np.zeros((len(y), len(x)), dtype=str)\n",
+ " g = gamma(go, ge, 1)\n",
+ "\n",
+ " for i in range(len(y)):\n",
+ " for j in range(len(x)):\n",
+ " s = sigma[cmap[x[j]]][cmap[y[i]]]\n",
+ " value = max(0, s + S[i][j], -g + S[i][j+1], -g + S[i+1][j])\n",
+ "\n",
+ " if(value == s + S[i][j]):\n",
+ " B[i][j] = '↖'\n",
+ " elif(value == -g + S[i][j+1]):\n",
+ " B[i][j] = '←'\n",
+ " elif(value == -g + S[i+1][j]):\n",
+ " B[i][j] = '↑'\n",
+ " else:\n",
+ " B[i][j] = \"-\"\n",
+ "\n",
+ " S[i+1][j+1] = value\n",
+ "\n",
+ " P = np.vstack((list(x), B))\n",
+ " P = np.insert(P, 0, [' '] + list(y), axis=1)\n",
+ "\n",
+ " print(P)\n",
+ "\n",
+ " return (S, B)"
+ ]
},
{
"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": 126,
"metadata": {
"id": "ij9JDpBm_UZ7"
},
- "execution_count": null,
- "outputs": []
+ "outputs": [],
+ "source": [
+ "def sw_bwd(x, y, S, B):\n",
+ " max_index_flat = np.argmax(S)\n",
+ " x_start, y_start = np.unravel_index(max_index_flat, S.shape)\n",
+ " \n",
+ " x_start-=1\n",
+ " y_start-=1\n",
+ "\n",
+ " finalx = \"\"\n",
+ " finaly = \"\"\n",
+ "\n",
+ " while(x_start >= 0 and y_start >= 0):\n",
+ " if(B[x_start][y_start] == '↖'):\n",
+ " finalx = x[y_start] + finalx\n",
+ " finaly = y[x_start] + finaly\n",
+ " x_start-= 1\n",
+ " y_start-= 1\n",
+ "\n",
+ " elif(B[x_start][y_start] == '←'):\n",
+ " y_start-= 1\n",
+ " finalx = '-' + finalx\n",
+ " finaly = y[x_start] + finaly\n",
+ "\n",
+ " elif(B[x_start][y_start] == '↑'):\n",
+ " x_start -= 1\n",
+ " finalx = x[y_start] + finalx\n",
+ " finaly = '-' + finaly\n",
+ " else:\n",
+ " break\n",
+ "\n",
+ " return finalx, finaly\n",
+ " "
+ ]
},
{
"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": "markdown",
+ "metadata": {},
+ "source": []
},
{
"cell_type": "code",
+ "execution_count": 136,
+ "metadata": {
+ "id": "JUtYRFTBAwwZ"
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "[[' ' 'T' 'C' 'G' 'C']\n",
+ " ['C' '-' '↖' '↑' '↖']\n",
+ " ['T' '↖' '←' '↖' '←']\n",
+ " ['T' '↖' '↖' '↖' '↖']\n",
+ " ['A' '←' '↖' '↖' '-']\n",
+ " ['G' '←' '↖' '↖' '↑']]\n",
+ "[[0. 0. 0. 0. 0. ]\n",
+ " [0. 0. 1. 0.5 1. ]\n",
+ " [0. 1. 0.5 0.5 0.5]\n",
+ " [0. 1. 0.5 0. 0. ]\n",
+ " [0. 0.5 0.5 0. 0. ]\n",
+ " [0. 0. 0. 1.5 1. ]]\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ "('TCG', 'TAG')"
+ ]
+ },
+ "execution_count": 136,
+ "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 +396,28 @@
" [-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",
+ "x='TCGC'\n",
+ "y='CTTAG'\n",
+ "\n",
+ "S,B = sw_fwd(x, y, cmap, m, go, ge)\n",
+ "print(S)\n",
+ "sw_bwd(x, y, S, B)"
+ ]
},
{
"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(\"
\")"
- ],
+ "execution_count": 60,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
@@ -306,38 +426,38 @@
"id": "joHNwJ9AIf6F",
"outputId": "a9206810-a083-4d86-8b14-38183f1dd80c"
},
- "execution_count": null,
"outputs": [
{
- "output_type": "execute_result",
"data": {
- "text/plain": [
- ""
- ],
"text/html": [
""
+ ],
+ "text/plain": [
+ ""
]
},
+ "execution_count": 60,
"metadata": {},
- "execution_count": 18
+ "output_type": "execute_result"
}
+ ],
+ "source": [
+ "from IPython.display import HTML\n",
+ "HTML(\"\")"
]
},
{
"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": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
@@ -346,56 +466,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": 15,
"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",
"```"
- ],
- "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,13 +530,15 @@
" 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",
@@ -419,63 +547,82 @@
" [-0.5, -0.5, -0.5, 1]])\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.13.2"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 0
+}