diff --git a/BINF2025_tp6.ipynb b/BINF2025_tp6.ipynb index 089684b..39179a2 100644 --- a/BINF2025_tp6.ipynb +++ b/BINF2025_tp6.ipynb @@ -4,7 +4,6 @@ "metadata": { "colab": { "provenance": [], - "authorship_tag": "ABX9TyMlj7yAC/ydT3s7LpoX8Wj2", "include_colab_link": true }, "kernelspec": { @@ -23,7 +22,7 @@ "colab_type": "text" }, "source": [ - "\"Open" + "\"Open" ] }, { @@ -45,10 +44,29 @@ "!pip install rdkit" ], "metadata": { - "id": "N5fiDGAcmwW1" + "id": "N5fiDGAcmwW1", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "aea195a7-511d-4bf6-b221-7ae5a783083d" }, - "execution_count": null, - "outputs": [] + "execution_count": 1, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Collecting rdkit\n", + " Downloading rdkit-2025.3.2-cp311-cp311-manylinux_2_28_x86_64.whl.metadata (4.0 kB)\n", + "Requirement already satisfied: numpy in /usr/local/lib/python3.11/dist-packages (from rdkit) (2.0.2)\n", + "Requirement already satisfied: Pillow in /usr/local/lib/python3.11/dist-packages (from rdkit) (11.2.1)\n", + "Downloading rdkit-2025.3.2-cp311-cp311-manylinux_2_28_x86_64.whl (35.2 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m35.2/35.2 MB\u001b[0m \u001b[31m16.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hInstalling collected packages: rdkit\n", + "Successfully installed rdkit-2025.3.2\n" + ] + } + ] }, { "cell_type": "markdown", @@ -67,7 +85,7 @@ { "cell_type": "markdown", "source": [ - "Votre réponse ici." + "9" ], "metadata": { "id": "xReGWi0G5Euo" @@ -85,10 +103,18 @@ { "cell_type": "markdown", "source": [ - "Votre réponse ici" + "* 4.2.1.3\n", + "* 1.1.1.42\n", + "* 1.2.4.2\n", + "* 2.3.1.61\n", + "* 6.2.1.4\n", + "* 1.3.2.4\n", + "* 4.2.1.2\n", + "* 1.1.1.37\n", + "* 2.3.3.1" ], "metadata": { - "id": "zzZt_NEm5Jxu" + "id": "qpikJdwfj0yz" } }, { @@ -103,7 +129,7 @@ { "cell_type": "markdown", "source": [ - "Votre réponse ici." + "IL y a des réactions intermédiaires." ], "metadata": { "id": "H1H4CqSc5OJw" @@ -121,7 +147,7 @@ { "cell_type": "markdown", "source": [ - "Votre réponse ici." + "Les premiers nombres sont différents, ces réaxtions font partie de groupes de réaction variés." ], "metadata": { "id": "jVgDoP7k5SnX" @@ -155,7 +181,15 @@ { "cell_type": "markdown", "source": [ - "Votre réponse ici" + "* 4.2.1.3 : RHEA:10337\n", + "* 1.1.1.42 : RHEA:19630\n", + "* 1.2.4.2 : RHEA:12189\n", + "* 2.3.1.61 : RHEA:15215\n", + "* 6.2.1.4 : RHEA:22122\n", + "* 1.3.2.4 : RHEA:77904\n", + "* 4.2.1.2 : RHEA:12462\n", + "* 1.1.1.37 : RHEA:21433\n", + "* 2.3.3.1 : RHEA:16846" ], "metadata": { "id": "HnDqzpRL5qgU" @@ -173,7 +207,7 @@ { "cell_type": "markdown", "source": [ - "Votre réponse ici." + "C'est le format Smiles." ], "metadata": { "id": "FDpE8Bdq5z6M" @@ -190,13 +224,36 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 16, "metadata": { - "id": "guPceFEci_lI" + "id": "guPceFEci_lI", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "70c28db8-969d-4855-f6e6-033a3d356080" }, - "outputs": [], + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "34576" + ] + }, + "metadata": {}, + "execution_count": 16 + } + ], "source": [ - "print(\"Votre code ici !!\")" + "from rdkit import Chem\n", + "from rdkit.Chem import rdChemReactions\n", + "\n", + "mols = {}\n", + "with open('/content/rhea-reaction-smiles.tsv') as suppl:\n", + " for mol in suppl:\n", + " mols[mol[:5]] = rdChemReactions.ReactionFromSmarts(mol[6:])\n", + "\n", + "len(mols)" ] }, { @@ -211,13 +268,30 @@ { "cell_type": "code", "source": [ - "print(\"votre code ici !!\")" + "mols[\"10337\"]" ], "metadata": { - "id": "g0wWVKGwlDFF" + "id": "g0wWVKGwlDFF", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 167 + }, + "outputId": "7e55afd3-7465-4c6b-96d1-d1e0b31b5dcb" }, - "execution_count": null, - "outputs": [] + "execution_count": 22, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "" + ], + "image/png": "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\n" + }, + "metadata": {}, + "execution_count": 22 + } + ] }, { "cell_type": "markdown",