{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## Examples on how to work with the package from python" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import seqlogo" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import os\n", "import glob\n", "import pandas as pd\n", "import numpy as np\n", "import inmotifin" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Running the main function: run_inmotifin()" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Motifs created / read in\n", "Backgrounds created / read in\n", "Groups created / read in\n", "Frequencies created / read in\n", "2025-10-13 13:56:36.198571: Simulation started.\n", "2025-10-13 13:56:36.199045: Simulating node \"num_instances\".\n", "2025-10-13 13:56:36.199623: Simulating node \"selected_groups\".\n", "2025-10-13 13:56:36.201724: Simulating node \"backgrounds\".\n", "2025-10-13 13:56:36.203253: Simulating node \"orientations\".\n", "2025-10-13 13:56:36.204152: Simulating node \"selected_motifs\".\n", "2025-10-13 13:56:36.206493: Simulating node \"instances\".\n", "2025-10-13 13:56:36.207798: Simulating node \"positions\".\n", "2025-10-13 13:56:36.209460: Simulating node \"motif_in_seq\".\n", "2025-10-13 13:56:36.211126: Simulating node \"prob_motif_in_seq\".\n", "2025-10-13 13:56:36.224627: Simulation finished in 0.0261 seconds.\n" ] } ], "source": [ "controller = inmotifin.Controller(\n", " basic_params=inmotifin.BasicParams(\n", " workdir=\".\",\n", " title=\"run_inmotifin\",\n", " seed=47))\n", "controller.run_inmotifin(\n", " motif_params=inmotifin.MotifParams(\n", " dirichlet_alpha=[0.1, 0.2, 0.3, 0.4],\n", " number_of_motifs=5,\n", " length_of_motifs_min=5,\n", " length_of_motifs_max=6,\n", " m_alphabet='ACGT',\n", " m_alphabet_pairs={'A': 'T', 'C': 'G', 'G': 'C', 'T': 'A'}\n", " ),\n", " background_params=inmotifin.BackgroundParams(\n", " b_alphabet='ACGT',\n", " b_alphabet_prior=[0.25, 0.25, 0.25, 0.25],\n", " number_of_backgrounds=100,\n", " length_of_backgrounds_min=50\n", " ),\n", " group_params=inmotifin.GroupParams(\n", " number_of_groups=1,\n", " max_group_size=5,\n", " group_size_binom_p=1\n", " ),\n", " freq_params=inmotifin.FreqParams(\n", " group_frequency_type=\"uniform\",\n", " motif_frequency_type=\"uniform\",\n", " group_group_type=\"uniform\",\n", " concentration_factor=1.\n", " ),\n", " sampling_params=inmotifin.SamplingParams(\n", " to_draw=False,\n", " number_of_sequences=10,\n", " percentage_no_motif=0.,\n", " orientation_probability=0.5,\n", " num_groups_per_sequence=1,\n", " n_instances_per_sequence=1\n", " ),\n", " positions_params=inmotifin.PositionParams(\n", " position_type=\"central\",\n", " to_replace=True\n", " )\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The probabilities are saved into a npz file" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[2.50000000e-01, 2.50000000e-01, 2.50000000e-01, 2.50000000e-01],\n", " [2.50000000e-01, 2.50000000e-01, 2.50000000e-01, 2.50000000e-01],\n", " [2.50000000e-01, 2.50000000e-01, 2.50000000e-01, 2.50000000e-01],\n", " [2.50000000e-01, 2.50000000e-01, 2.50000000e-01, 2.50000000e-01],\n", " [2.50000000e-01, 2.50000000e-01, 2.50000000e-01, 2.50000000e-01],\n", " [2.50000000e-01, 2.50000000e-01, 2.50000000e-01, 2.50000000e-01],\n", " [2.50000000e-01, 2.50000000e-01, 2.50000000e-01, 2.50000000e-01],\n", " [2.50000000e-01, 2.50000000e-01, 2.50000000e-01, 2.50000000e-01],\n", " [2.50000000e-01, 2.50000000e-01, 2.50000000e-01, 2.50000000e-01],\n", " [2.50000000e-01, 2.50000000e-01, 2.50000000e-01, 2.50000000e-01],\n", " [2.50000000e-01, 2.50000000e-01, 2.50000000e-01, 2.50000000e-01],\n", " [2.50000000e-01, 2.50000000e-01, 2.50000000e-01, 2.50000000e-01],\n", " [2.50000000e-01, 2.50000000e-01, 2.50000000e-01, 2.50000000e-01],\n", " [2.50000000e-01, 2.50000000e-01, 2.50000000e-01, 2.50000000e-01],\n", " [2.50000000e-01, 2.50000000e-01, 2.50000000e-01, 2.50000000e-01],\n", " [2.50000000e-01, 2.50000000e-01, 2.50000000e-01, 2.50000000e-01],\n", " [2.50000000e-01, 2.50000000e-01, 2.50000000e-01, 2.50000000e-01],\n", " [2.50000000e-01, 2.50000000e-01, 2.50000000e-01, 2.50000000e-01],\n", " [2.50000000e-01, 2.50000000e-01, 2.50000000e-01, 2.50000000e-01],\n", " [2.50000000e-01, 2.50000000e-01, 2.50000000e-01, 2.50000000e-01],\n", " [2.50000000e-01, 2.50000000e-01, 2.50000000e-01, 2.50000000e-01],\n", " [2.50000000e-01, 2.50000000e-01, 2.50000000e-01, 2.50000000e-01],\n", " [2.50000000e-01, 2.50000000e-01, 2.50000000e-01, 2.50000000e-01],\n", " [8.12316055e-07, 9.18805831e-03, 6.17911289e-01, 3.72899840e-01],\n", " [2.42383660e-01, 5.11034517e-02, 1.51354558e-01, 5.55158330e-01],\n", " [1.51177114e-20, 4.14834623e-01, 8.31469948e-02, 5.02018383e-01],\n", " [1.23604868e-07, 4.75927467e-01, 2.03191682e-03, 5.22040493e-01],\n", " [1.01009871e-12, 9.96524577e-01, 8.12731025e-06, 3.46729613e-03],\n", " [2.50000000e-01, 2.50000000e-01, 2.50000000e-01, 2.50000000e-01],\n", " [2.50000000e-01, 2.50000000e-01, 2.50000000e-01, 2.50000000e-01],\n", " [2.50000000e-01, 2.50000000e-01, 2.50000000e-01, 2.50000000e-01],\n", " [2.50000000e-01, 2.50000000e-01, 2.50000000e-01, 2.50000000e-01],\n", " [2.50000000e-01, 2.50000000e-01, 2.50000000e-01, 2.50000000e-01],\n", " [2.50000000e-01, 2.50000000e-01, 2.50000000e-01, 2.50000000e-01],\n", " [2.50000000e-01, 2.50000000e-01, 2.50000000e-01, 2.50000000e-01],\n", " [2.50000000e-01, 2.50000000e-01, 2.50000000e-01, 2.50000000e-01],\n", " [2.50000000e-01, 2.50000000e-01, 2.50000000e-01, 2.50000000e-01],\n", " [2.50000000e-01, 2.50000000e-01, 2.50000000e-01, 2.50000000e-01],\n", " [2.50000000e-01, 2.50000000e-01, 2.50000000e-01, 2.50000000e-01],\n", " [2.50000000e-01, 2.50000000e-01, 2.50000000e-01, 2.50000000e-01],\n", " [2.50000000e-01, 2.50000000e-01, 2.50000000e-01, 2.50000000e-01],\n", " [2.50000000e-01, 2.50000000e-01, 2.50000000e-01, 2.50000000e-01],\n", " [2.50000000e-01, 2.50000000e-01, 2.50000000e-01, 2.50000000e-01],\n", " [2.50000000e-01, 2.50000000e-01, 2.50000000e-01, 2.50000000e-01],\n", " [2.50000000e-01, 2.50000000e-01, 2.50000000e-01, 2.50000000e-01],\n", " [2.50000000e-01, 2.50000000e-01, 2.50000000e-01, 2.50000000e-01],\n", " [2.50000000e-01, 2.50000000e-01, 2.50000000e-01, 2.50000000e-01],\n", " [2.50000000e-01, 2.50000000e-01, 2.50000000e-01, 2.50000000e-01],\n", " [2.50000000e-01, 2.50000000e-01, 2.50000000e-01, 2.50000000e-01],\n", " [2.50000000e-01, 2.50000000e-01, 2.50000000e-01, 2.50000000e-01]])" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.load(\"run_inmotifin/run_inmotifin_probabilistic_final_sequences.npz\")[\"0_run_inmotifin_seq_50\"]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Additional functionalities" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "shared_reader=inmotifin.Reader()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Simulating motifs from scratch" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "motif_writer = inmotifin.Writer(workdir=\".\", title=\"motif_sim\")\n", "rng=np.random.default_rng(391)\n", "motifer = inmotifin.Motifer(\n", " params=inmotifin.MotifParams(\n", " dirichlet_alpha=[0.4,1,0.9,0.5],\n", " number_of_motifs=5,\n", " length_of_motifs_min=4,\n", " length_of_motifs_max=8,\n", " m_alphabet='ACGT',\n", " m_alphabet_pairs={'A':'T','C':'G','G':'C','T':'A'}),\n", " rng=rng,\n", " reader=shared_reader,\n", " writer=motif_writer)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "motifer.simulate_motifs()\n", "motifs = motifer.get_pwms()" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'motif_sim_motif_0': array([[2.36249592e-01, 4.35283888e-01, 2.55462913e-01, 7.30036074e-02],\n", " [2.72461841e-01, 4.49345991e-01, 2.68174909e-01, 1.00172591e-02],\n", " [2.55062609e-02, 2.87485312e-01, 1.31186789e-01, 5.55821638e-01],\n", " [1.92024167e-05, 6.09398867e-01, 3.46665574e-01, 4.39163562e-02]]),\n", " 'motif_sim_motif_1': array([[2.55318074e-02, 3.61328050e-02, 8.44714532e-01, 9.36208559e-02],\n", " [8.92243821e-03, 4.94499198e-01, 4.96297606e-01, 2.80758192e-04],\n", " [8.96516465e-03, 3.13749746e-01, 6.76873871e-01, 4.11218392e-04],\n", " [3.00515697e-04, 9.42753584e-01, 3.47571177e-02, 2.21887826e-02]]),\n", " 'motif_sim_motif_2': array([[5.07066275e-02, 6.47016781e-01, 1.39802611e-01, 1.62473980e-01],\n", " [3.45670050e-01, 2.30531323e-01, 4.23626136e-01, 1.72490043e-04],\n", " [1.88227411e-01, 4.41151539e-01, 3.67392711e-01, 3.22833895e-03],\n", " [1.49104503e-01, 3.94179471e-01, 4.45782876e-01, 1.09331502e-02]]),\n", " 'motif_sim_motif_3': array([[8.92697575e-03, 8.21430231e-01, 7.77393685e-02, 9.19034250e-02],\n", " [4.07652524e-05, 3.72869252e-01, 3.99288257e-01, 2.27801726e-01],\n", " [1.33615285e-01, 7.94650423e-02, 2.57937109e-01, 5.28982563e-01],\n", " [5.46762104e-03, 5.33584687e-01, 3.82666062e-01, 7.82816295e-02],\n", " [5.91298908e-03, 6.18222703e-02, 4.86627712e-01, 4.45637028e-01],\n", " [1.81816713e-01, 1.75497072e-01, 6.39833446e-01, 2.85276863e-03],\n", " [1.30527356e-01, 6.37975954e-02, 5.99585789e-01, 2.06089259e-01],\n", " [2.88294043e-03, 7.53079965e-01, 1.47758218e-01, 9.62788764e-02]]),\n", " 'motif_sim_motif_4': array([[3.99530003e-02, 3.75628521e-02, 5.54581706e-01, 3.67902442e-01],\n", " [2.24461182e-01, 6.39443929e-01, 1.36009753e-01, 8.51359567e-05],\n", " [3.87618033e-01, 6.85954762e-02, 5.33612478e-01, 1.01740126e-02],\n", " [9.05912173e-02, 1.75349027e-01, 3.08378086e-01, 4.25681670e-01],\n", " [1.95323490e-01, 3.58472495e-01, 2.92022320e-01, 1.54181695e-01],\n", " [1.01956221e-03, 7.16540811e-01, 2.52413014e-01, 3.00266132e-02]])}" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "motifs" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "selected_motif_0 = 'motif_sim_motif_1'\n", "selected_motif_1 = 'motif_sim_motif_3'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Plotting with seqlogo (note: not packaged with inMOTIFin)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ppm0 = seqlogo.Ppm(motifs[selected_motif_0])\n", "seqlogo.seqlogo(ppm0, ic_scale = True, format = 'png', size = 'small')" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ppm1 = seqlogo.Ppm(motifs[selected_motif_1])\n", "seqlogo.seqlogo(ppm1, ic_scale = True, format = 'png')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Saving motifs to meme file" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "motif_writer.motif_to_meme(\n", " motifs=motifs,\n", " alphabet='ACGT',\n", " file_prefix=\"simulated_motifs\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Creating multimers from motifs" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "multimerer = inmotifin.Multimerer(\n", " params=inmotifin.MultimerParams(\n", " motif_files=None,\n", " multimerisation_rule_path=None),\n", " reader=shared_reader,\n", " writer=inmotifin.Writer(workdir=\".\", title=\"multimer_sim\"),\n", " rng=rng)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "multimerer.set_motifs(motifer.get_motifs())" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "multimer = multimerer.create_a_multimer(\n", " motifs=[motifs[selected_motif_0], motifs[selected_motif_1]],\n", " distances=[2])" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ppmd = seqlogo.Ppm(multimer)\n", "seqlogo.seqlogo(ppmd, ic_scale = True, format = 'png')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Multimers can have negative distance, in that case the average is taken" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "multimer_neg = multimerer.create_a_multimer(\n", " motifs=[motifs[selected_motif_0], motifs[selected_motif_1]],\n", " distances=[-1])" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ppmd_n = seqlogo.Ppm(multimer_neg)\n", "seqlogo.seqlogo(ppmd_n, ic_scale = True, format = 'png')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The weight of the individual components can be set. In this example, the middle motif gets the most weight when averaging overlapping positions." ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "multimer_weighted_neg = multimerer.create_a_multimer(\n", " motifs=[motifs[selected_motif_1], motifs[selected_motif_0], motifs[selected_motif_0]],\n", " distances=[-4, -1],\n", " weights=[1, 100, 1])" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ppmd_n = seqlogo.Ppm(multimer_weighted_neg)\n", "seqlogo.seqlogo(ppmd_n, ic_scale = True, format = 'png')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "One may add noise to a motif by setting the distance is equal to the length of the motif and the \"multimer pair\" to a non-informative motif." ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[8.92697575e-03, 8.21430231e-01, 7.77393685e-02, 9.19034250e-02],\n", " [4.07652524e-05, 3.72869252e-01, 3.99288257e-01, 2.27801726e-01],\n", " [1.33615285e-01, 7.94650423e-02, 2.57937109e-01, 5.28982563e-01],\n", " [5.46762104e-03, 5.33584687e-01, 3.82666062e-01, 7.82816295e-02],\n", " [5.91298908e-03, 6.18222703e-02, 4.86627712e-01, 4.45637028e-01],\n", " [1.81816713e-01, 1.75497072e-01, 6.39833446e-01, 2.85276863e-03],\n", " [1.30527356e-01, 6.37975954e-02, 5.99585789e-01, 2.06089259e-01],\n", " [2.88294043e-03, 7.53079965e-01, 1.47758218e-01, 9.62788764e-02]])" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "motifs['motif_sim_motif_3']" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [], "source": [ "motif_len = motifs['motif_sim_motif_3'].shape[0]" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[0.25, 0.25, 0.25, 0.25],\n", " [0.25, 0.25, 0.25, 0.25],\n", " [0.25, 0.25, 0.25, 0.25],\n", " [0.25, 0.25, 0.25, 0.25],\n", " [0.25, 0.25, 0.25, 0.25],\n", " [0.25, 0.25, 0.25, 0.25],\n", " [0.25, 0.25, 0.25, 0.25],\n", " [0.25, 0.25, 0.25, 0.25]])" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "noise = np.tile(np.array([0.25]*4), (motif_len, 1))\n", "noise" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [], "source": [ "updated_motifs = motifer.get_motifs()\n", "updated_motifs.motifs[\"motif_sim_motif_noised_3\"] = noise\n", "updated_motifs.motif_ids.append(\"motif_sim_motif_noised_3\")" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Motifs(motifs={'motif_sim_motif_0': array([[2.36249592e-01, 4.35283888e-01, 2.55462913e-01, 7.30036074e-02],\n", " [2.72461841e-01, 4.49345991e-01, 2.68174909e-01, 1.00172591e-02],\n", " [2.55062609e-02, 2.87485312e-01, 1.31186789e-01, 5.55821638e-01],\n", " [1.92024167e-05, 6.09398867e-01, 3.46665574e-01, 4.39163562e-02]]), 'motif_sim_motif_1': array([[2.55318074e-02, 3.61328050e-02, 8.44714532e-01, 9.36208559e-02],\n", " [8.92243821e-03, 4.94499198e-01, 4.96297606e-01, 2.80758192e-04],\n", " [8.96516465e-03, 3.13749746e-01, 6.76873871e-01, 4.11218392e-04],\n", " [3.00515697e-04, 9.42753584e-01, 3.47571177e-02, 2.21887826e-02]]), 'motif_sim_motif_2': array([[5.07066275e-02, 6.47016781e-01, 1.39802611e-01, 1.62473980e-01],\n", " [3.45670050e-01, 2.30531323e-01, 4.23626136e-01, 1.72490043e-04],\n", " [1.88227411e-01, 4.41151539e-01, 3.67392711e-01, 3.22833895e-03],\n", " [1.49104503e-01, 3.94179471e-01, 4.45782876e-01, 1.09331502e-02]]), 'motif_sim_motif_3': array([[8.92697575e-03, 8.21430231e-01, 7.77393685e-02, 9.19034250e-02],\n", " [4.07652524e-05, 3.72869252e-01, 3.99288257e-01, 2.27801726e-01],\n", " [1.33615285e-01, 7.94650423e-02, 2.57937109e-01, 5.28982563e-01],\n", " [5.46762104e-03, 5.33584687e-01, 3.82666062e-01, 7.82816295e-02],\n", " [5.91298908e-03, 6.18222703e-02, 4.86627712e-01, 4.45637028e-01],\n", " [1.81816713e-01, 1.75497072e-01, 6.39833446e-01, 2.85276863e-03],\n", " [1.30527356e-01, 6.37975954e-02, 5.99585789e-01, 2.06089259e-01],\n", " [2.88294043e-03, 7.53079965e-01, 1.47758218e-01, 9.62788764e-02]]), 'motif_sim_motif_4': array([[3.99530003e-02, 3.75628521e-02, 5.54581706e-01, 3.67902442e-01],\n", " [2.24461182e-01, 6.39443929e-01, 1.36009753e-01, 8.51359567e-05],\n", " [3.87618033e-01, 6.85954762e-02, 5.33612478e-01, 1.01740126e-02],\n", " [9.05912173e-02, 1.75349027e-01, 3.08378086e-01, 4.25681670e-01],\n", " [1.95323490e-01, 3.58472495e-01, 2.92022320e-01, 1.54181695e-01],\n", " [1.01956221e-03, 7.16540811e-01, 2.52413014e-01, 3.00266132e-02]]), 'motif_sim_motif_noised_3': array([[0.25, 0.25, 0.25, 0.25],\n", " [0.25, 0.25, 0.25, 0.25],\n", " [0.25, 0.25, 0.25, 0.25],\n", " [0.25, 0.25, 0.25, 0.25],\n", " [0.25, 0.25, 0.25, 0.25],\n", " [0.25, 0.25, 0.25, 0.25],\n", " [0.25, 0.25, 0.25, 0.25],\n", " [0.25, 0.25, 0.25, 0.25]])}, alphabet='ACGT', alphabet_revcomp_pairs={'A': 'T', 'C': 'G', 'G': 'C', 'T': 'A'}, motif_ids=['motif_sim_motif_0', 'motif_sim_motif_1', 'motif_sim_motif_2', 'motif_sim_motif_3', 'motif_sim_motif_4', 'motif_sim_motif_noised_3'])" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "updated_motifs" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [], "source": [ "# Adding one more motif to the set of motifs in multimerer\n", "multimerer.set_motifs(updated_motifs)" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [], "source": [ "multimer_parts_noised = ([\"motif_sim_motif_3\", \"motif_sim_motif_noised_3\"], [-motif_len])\n", "multimer_noised = multimerer.create_a_multimer(\n", " motifs=[motifs[\"motif_sim_motif_3\"], motifs[\"motif_sim_motif_noised_3\"]],\n", " distances=[-motif_len])" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[0.12946349, 0.53571512, 0.16386968, 0.17095171],\n", " [0.12502038, 0.31143463, 0.32464413, 0.23890086],\n", " [0.19180764, 0.16473252, 0.25396855, 0.38949128],\n", " [0.12773381, 0.39179234, 0.31633303, 0.16414081],\n", " [0.12795649, 0.15591114, 0.36831386, 0.34781851],\n", " [0.21590836, 0.21274854, 0.44491672, 0.12642638],\n", " [0.19026368, 0.1568988 , 0.42479289, 0.22804463],\n", " [0.12644147, 0.50153998, 0.19887911, 0.17313944]])" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "multimer_noised" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ppmd_original = seqlogo.Ppm(updated_motifs.motifs[\"motif_sim_motif_3\"])\n", "seqlogo.seqlogo(ppmd_original, ic_scale = True, format = 'png')" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ppmd_noisy = seqlogo.Ppm(multimer_noised)\n", "seqlogo.seqlogo(ppmd_noisy, ic_scale = True, format = 'png')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "An alterantive way to noise a motif is to add a small value to all elements of the matrix, then re-normalize" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[0.07780498, 0.65816445, 0.12695669, 0.13707388],\n", " [0.07145769, 0.33776375, 0.35663447, 0.23414409],\n", " [0.16686806, 0.12818932, 0.25566936, 0.44927326],\n", " [0.07533402, 0.45256049, 0.34476147, 0.12734402],\n", " [0.07565214, 0.11558734, 0.41901979, 0.38974073],\n", " [0.20129765, 0.19678362, 0.52845246, 0.07346626],\n", " [0.1646624 , 0.11699828, 0.49970414, 0.21863519],\n", " [0.07348781, 0.60934283, 0.17697016, 0.1401992 ]])" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "epsilon = 1e-1\n", "noisy = motifs['motif_sim_motif_3'] + epsilon\n", "noisy = noisy / noisy.sum(axis=1, keepdims=True)\n", "motifs[\"noisy\"] = noisy\n", "noisy" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Reading motifs in from meme file" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [], "source": [ "motifs_m, alphabet_m = shared_reader.read_motif(\n", " mfile = \"motif_read_in/jaspar_core_three_motifs.meme\")" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'MA0001.1': array([[0. , 0.969072 , 0.010309 , 0.020619 ],\n", " [0.030928 , 0.773196 , 0. , 0.195876 ],\n", " [0.814433 , 0.041237 , 0.030928 , 0.113402 ],\n", " [0.412371 , 0.030928 , 0.041237 , 0.515464 ],\n", " [0.68041268, 0.01030901, 0.01030901, 0.2989693 ],\n", " [0.494845 , 0.020619 , 0. , 0.484536 ],\n", " [0.67010367, 0.05154605, 0.05154605, 0.22680423],\n", " [0.11340189, 0.02061898, 0.03092797, 0.83505116],\n", " [0.670103 , 0.030928 , 0.28866 , 0.010309 ],\n", " [0. , 0.030928 , 0.907216 , 0.061856 ]]),\n", " 'MA0003.1': array([[0. , 0. , 1. , 0. ],\n", " [0. , 1. , 0. , 0. ],\n", " [0. , 1. , 0. , 0. ],\n", " [0.11891888, 0.38378362, 0.24864875, 0.24864875],\n", " [0.102703 , 0.308108 , 0.32973 , 0.259459 ],\n", " [0.297297 , 0.237838 , 0.362162 , 0.102703 ],\n", " [0.28648629, 0.16216216, 0.49189249, 0.05945906],\n", " [0.102703 , 0.086486 , 0.740541 , 0.07027 ],\n", " [0.04864895, 0.42162158, 0.42702657, 0.1027029 ]]),\n", " 'MA0002.2': array([[0.1435, 0.248 , 0.348 , 0.2605],\n", " [0.117 , 0.2425, 0.2335, 0.407 ],\n", " [0.0615, 0.536 , 0.0745, 0.328 ],\n", " [0.0285, 0. , 0.0035, 0.968 ],\n", " [0. , 0.0375, 0.936 , 0.0265],\n", " [0.0435, 0.0635, 0.035 , 0.858 ],\n", " [0. , 0. , 0.9935, 0.0065],\n", " [0.0085, 0.021 , 0.924 , 0.0465],\n", " [0.005 , 0.2 , 0.1255, 0.6695],\n", " [0.0655, 0.2315, 0.0405, 0.6625],\n", " [0.25 , 0.079 , 0.1445, 0.5265]])}" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "motifs_m" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'ACGT'" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "alphabet_m" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Reading motifs in from jaspar file\n", "The values are normalized to 1, so the PFM is converted to PWM" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [], "source": [ "motifs_j, alphabet_j = shared_reader.read_motif(\n", " mfile = \"motif_read_in/jaspar_core_three_motifs.jaspar\")" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'MA0001.1': array([[0. , 0.96907216, 0.01030928, 0.02061856],\n", " [0.03092784, 0.77319588, 0. , 0.19587629],\n", " [0.81443299, 0.04123711, 0.03092784, 0.11340206],\n", " [0.41237113, 0.03092784, 0.04123711, 0.51546392],\n", " [0.68041237, 0.01030928, 0.01030928, 0.29896907],\n", " [0.49484536, 0.02061856, 0. , 0.48453608],\n", " [0.67010309, 0.05154639, 0.05154639, 0.22680412],\n", " [0.11340206, 0.02061856, 0.03092784, 0.83505155],\n", " [0.67010309, 0.03092784, 0.28865979, 0.01030928],\n", " [0. , 0.03092784, 0.90721649, 0.06185567]]),\n", " 'MA0003.1': array([[0. , 0. , 1. , 0. ],\n", " [0. , 1. , 0. , 0. ],\n", " [0. , 1. , 0. , 0. ],\n", " [0.11891892, 0.38378378, 0.24864865, 0.24864865],\n", " [0.1027027 , 0.30810811, 0.32972973, 0.25945946],\n", " [0.2972973 , 0.23783784, 0.36216216, 0.1027027 ],\n", " [0.28648649, 0.16216216, 0.49189189, 0.05945946],\n", " [0.1027027 , 0.08648649, 0.74054054, 0.07027027],\n", " [0.04864865, 0.42162162, 0.42702703, 0.1027027 ]]),\n", " 'MA0002.2': array([[0.1435, 0.248 , 0.348 , 0.2605],\n", " [0.117 , 0.2425, 0.2335, 0.407 ],\n", " [0.0615, 0.536 , 0.0745, 0.328 ],\n", " [0.0285, 0. , 0.0035, 0.968 ],\n", " [0. , 0.0375, 0.936 , 0.0265],\n", " [0.0435, 0.0635, 0.035 , 0.858 ],\n", " [0. , 0. , 0.9935, 0.0065],\n", " [0.0085, 0.021 , 0.924 , 0.0465],\n", " [0.005 , 0.2 , 0.1255, 0.6695],\n", " [0.0655, 0.2315, 0.0405, 0.6625],\n", " [0.25 , 0.079 , 0.1445, 0.5265]])}" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "motifs_j" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'ACGT'" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "alphabet_j" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Reading motifs in from JASPAR database\n", "The values are normalized to 1, so the PFM is converted to PWM" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [], "source": [ "motifs_pj, alphabet_pj = shared_reader.read_motif(\n", " mfile = \"motif_read_in/jaspar_motifs.csv\",\n", " jaspar_db_version='JASPAR2024')" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'MA0001.1': array([[0. , 0.96907216, 0.01030928, 0.02061856],\n", " [0.03092784, 0.77319588, 0. , 0.19587629],\n", " [0.81443299, 0.04123711, 0.03092784, 0.11340206],\n", " [0.41237113, 0.03092784, 0.04123711, 0.51546392],\n", " [0.68041237, 0.01030928, 0.01030928, 0.29896907],\n", " [0.49484536, 0.02061856, 0. , 0.48453608],\n", " [0.67010309, 0.05154639, 0.05154639, 0.22680412],\n", " [0.11340206, 0.02061856, 0.03092784, 0.83505155],\n", " [0.67010309, 0.03092784, 0.28865979, 0.01030928],\n", " [0. , 0.03092784, 0.90721649, 0.06185567]]),\n", " 'MA0003.1': array([[0. , 0. , 1. , 0. ],\n", " [0. , 1. , 0. , 0. ],\n", " [0. , 1. , 0. , 0. ],\n", " [0.11891892, 0.38378378, 0.24864865, 0.24864865],\n", " [0.1027027 , 0.30810811, 0.32972973, 0.25945946],\n", " [0.2972973 , 0.23783784, 0.36216216, 0.1027027 ],\n", " [0.28648649, 0.16216216, 0.49189189, 0.05945946],\n", " [0.1027027 , 0.08648649, 0.74054054, 0.07027027],\n", " [0.04864865, 0.42162162, 0.42702703, 0.1027027 ]]),\n", " 'MA0002.2': array([[0.1435, 0.248 , 0.348 , 0.2605],\n", " [0.117 , 0.2425, 0.2335, 0.407 ],\n", " [0.0615, 0.536 , 0.0745, 0.328 ],\n", " [0.0285, 0. , 0.0035, 0.968 ],\n", " [0. , 0.0375, 0.936 , 0.0265],\n", " [0.0435, 0.0635, 0.035 , 0.858 ],\n", " [0. , 0. , 0.9935, 0.0065],\n", " [0.0085, 0.021 , 0.924 , 0.0465],\n", " [0.005 , 0.2 , 0.1255, 0.6695],\n", " [0.0655, 0.2315, 0.0405, 0.6625],\n", " [0.25 , 0.079 , 0.1445, 0.5265]])}" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "motifs_pj" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'ACGT'" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ "alphabet_pj" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Tip: to create specific sequences, use one-hot encoded numpy array as motif." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Creating random GC-rich backgrounds" ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [], "source": [ "backgrounder = inmotifin.Backgrounder(\n", " params=inmotifin.BackgroundParams(\n", " b_alphabet=\"ACGT\",\n", " b_alphabet_prior=[0.25, 0.25, 0.25, 0.25],\n", " number_of_backgrounds=3,\n", " length_of_backgrounds_min=10,\n", " length_of_backgrounds_max=15),\n", " reader=shared_reader,\n", " writer=inmotifin.Writer(workdir=\".\", title=\"background_sim\"),\n", " rng=rng)" ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [], "source": [ "backgrounds = backgrounder.simulate_iid_backgrounds()" ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "({'background_sim_seq_0': 'AAATAGCATCGTA',\n", " 'background_sim_seq_1': 'TCGAGGAGACACC',\n", " 'background_sim_seq_2': 'CTAATCTGGT'},\n", " {'background_sim_seq_0': array([[0.25, 0.25, 0.25, 0.25],\n", " [0.25, 0.25, 0.25, 0.25],\n", " [0.25, 0.25, 0.25, 0.25],\n", " [0.25, 0.25, 0.25, 0.25],\n", " [0.25, 0.25, 0.25, 0.25],\n", " [0.25, 0.25, 0.25, 0.25],\n", " [0.25, 0.25, 0.25, 0.25],\n", " [0.25, 0.25, 0.25, 0.25],\n", " [0.25, 0.25, 0.25, 0.25],\n", " [0.25, 0.25, 0.25, 0.25],\n", " [0.25, 0.25, 0.25, 0.25],\n", " [0.25, 0.25, 0.25, 0.25],\n", " [0.25, 0.25, 0.25, 0.25]]),\n", " 'background_sim_seq_1': array([[0.25, 0.25, 0.25, 0.25],\n", " [0.25, 0.25, 0.25, 0.25],\n", " [0.25, 0.25, 0.25, 0.25],\n", " [0.25, 0.25, 0.25, 0.25],\n", " [0.25, 0.25, 0.25, 0.25],\n", " [0.25, 0.25, 0.25, 0.25],\n", " [0.25, 0.25, 0.25, 0.25],\n", " [0.25, 0.25, 0.25, 0.25],\n", " [0.25, 0.25, 0.25, 0.25],\n", " [0.25, 0.25, 0.25, 0.25],\n", " [0.25, 0.25, 0.25, 0.25],\n", " [0.25, 0.25, 0.25, 0.25],\n", " [0.25, 0.25, 0.25, 0.25]]),\n", " 'background_sim_seq_2': array([[0.25, 0.25, 0.25, 0.25],\n", " [0.25, 0.25, 0.25, 0.25],\n", " [0.25, 0.25, 0.25, 0.25],\n", " [0.25, 0.25, 0.25, 0.25],\n", " [0.25, 0.25, 0.25, 0.25],\n", " [0.25, 0.25, 0.25, 0.25],\n", " [0.25, 0.25, 0.25, 0.25],\n", " [0.25, 0.25, 0.25, 0.25],\n", " [0.25, 0.25, 0.25, 0.25],\n", " [0.25, 0.25, 0.25, 0.25]])})" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "backgrounds" ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [], "source": [ "backgrounder.writer.dict_to_fasta(\n", " seq_dict=backgrounds[0],\n", " filename=\"backgrounds\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Reading in sequences form a fasta file\n", "An additional index is added to the end of the sequence, in case there would be two identically named sequences.\n", "Note: if any sequence is duplicated in the original file, they would be present twice with unique IDs (as demonstrated with sequence SRR30315250.1)." ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'SRR30315250.1_0': 'CNAGGATTCACGCAATTTGTGTGGACCAGCAGATGGTCTTGGGGCGTAACAACCGGACAACTTGTCCAATAACCAATGGTGTGGAGCTGCTAATCTCTTTAGATGCTTCTTTGGTCCTCTAGCCATCTTTCCTCAATAGTGGTGTATCTA',\n", " 'SRR30315250.1_1': 'CNAGGATTCACGCAATTTGTGTGGACCAGCAGATGGTCTTGGGGCGTAACAACCGGACAACTTGTCCAATAACCAATGGTGTGGAGCTGCTAATCTCTTTAGATGCTTCTTTGGTCCTCTAGCCATCTTTCCTCAATAGTGGTGTATCTA',\n", " 'SRR30315250.2_0': 'CNATCCACTTGGATTTGTCTTCATCTCTCATTTCCAAAGCTTCGTGGACACCGGTGGAGGCACCAGATGGAACAATGGATCTGAAAACACCCTTTTCGGTGGTTAATTCGACTTCGACGGTTGGGTTACCACGGGAGTCGTAGACGGATC',\n", " 'SRR30315250.3_0': 'GTCCCATCCTTTAATTACTTCGCCTTGGCCCAACTTAAAAACAAAAGGCTTACCCTTTGTATTCTTGTCAAAAACTTTCCCGTTCTTCAACTTACCAACATATCTCATTCCAACTCTGGTACCCTTTTTGGCATGTGGGCCTTTTCCTGT',\n", " 'SRR30315250.4_0': 'CCATCTTTTCTGCTGGGATGAAAAGCTTCCAATTCCTCTTATAGATCTTGTGTCCGATGTACATAACCATAACAAGTGGGAAGGATAGATAAGCTTCGAAGAAACCTTCCGCACTTGGAGAATCTCCCACGGGGAATAGAGCAACGTAGA',\n", " 'SRR30315250.5_0': 'CTTTGATTCCCTTCTCTAAAGCAGTAGGGTTAGCTCCAATGATCTTGCCGATGAGTTGGCCATCCTTGCCAAGAACAAAGGTGGGCATAGCCGTCACTTCACACTCTTTGGCAATATCTGGTGATTCGTCCACGTCGCACTTGACAAATC',\n", " 'SRR30315250.6_0': 'TGAACCAATTTATTTTTCGTTACATAAAAATGCTTATAAAACTTTAACTAATAATTAGAGATTAAATCGCTTATTGCTTAGCGTTGGTAGCAGCAGTCAACTTAGCTTGTTCAACCAAGTTTTGTGGAGCATCGAAGACTGGCAACATGA',\n", " 'SRR30315250.7_0': 'ATCAATTGCCCGATGTAAACGCGGCCATCTTGAGTGAGAACCCTCAGCTTATAATCAATAAGGTTGGCTAGTCGGCTGCTATGTGCCACCTGTATTTTGCTCATTAGTTATTTACTTAGATCGGAAGAGCACACGTCTGAACTCCAGTCA',\n", " 'SRR30315250.8_0': 'CCTATGTCTTGGAACATGTTGCAAAGCGGTTGTGAAGCTCAACAAAAGGAACTCCATTTCCTCTTTTTCATTTCCTTTGCTATTCTTGATCAAGGCAGGGACAACAGTTAGTATCGTACGCTCAACAACTTTAGTTGTGAATTCAGATCG',\n", " 'SRR30315250.9_0': 'CTGGCGAAGAAGTCCAAAGCTTCTCTGGTGTCAGCTCTGTTACCGACGTAAGAACCAACAATAGAGATGGACTTGACGACTTGGTTGAAGACATCAGAACAACACTTGGCACCAGCTGGCATACCGACCAAAACGGTGGTACCGTTAGCT',\n", " 'SRR30315250.10_0': 'TTTTCCATCTTTTCGTAAATTTCTGGCAAGGTAGACAAGCCGACAACCTTGATTGGAGACTTGACCAAACCTCTGGCGAAGAAGTCCAAAGCTTCTCTGGTGTCAGCTCTGTTACCGACGTAAGAACCAACAATAGAGAGATCGGAAGAG',\n", " 'SRR30315250.11_0': 'GTTTCTAACGACAGAAACTCTTGGAATGGGTGCGAATGGGAACAATAACTCTTCTCTCAAACTATTTTCATCGGCATTTTCATTAACTTGCATAATCTTCAAAGTACACATATCATCACGTTCTCTAGAGTCTCTGTAAGCATCGGATGA',\n", " 'SRR30315250.12_0': 'GTCCATATCATCTCATCATTTTGTAGTTTTTGCAGTCTGTACTTGTATTCTTCAATCAACTTTTCATTCTTGTCAGTGCTATTAGCTACTACGTTTTTTGGCGTTGCCAAAGACTTAGACGTCAACAGGACCCTCGATTTATTGTTAGCA',\n", " 'SRR30315250.13_0': 'CTGGAGCATTGTCGTAACCCCCAGATTGTGGAGAGGGAAAGGTACCTTCAGTGATAATCAAGGTTCCTGGTCTTTGAGCACGTTGAGCGTAGTATTCAACGGCCCAGTCTCTGTTTGGAATATTACCTGGATGTTGGGCTCTCATTCTAG',\n", " 'SRR30315250.14_0': 'CTTTGGACCAGTTCTGCTCTTAGCTGGGTCTCTCATAATCTTAACCTTGATACCCAAAACACCTTGTCTCATCAAGACGTGTCTAGTAGCAGTGTCAATGAAGTCGTTGACTGGTTGACCAGAGTGAATCAAGAAACCGTCAGCAAATTT',\n", " 'SRR30315250.15_0': 'ACCAACCATTAAAGCTTCAGCTTGAGCAAAGAAGTTTGAAGCCAACATCTTTTGATGTAATTTGTTCTCAATTGGGTTATGAGATTGAGCAGCTAAGATGAAATCAGATGGAATCAACTTGGTACCTTGGTGAACCAATTGGAAGAAAGA'}" ] }, "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ "SRR30315250_sequences = shared_reader.read_fasta(\n", " fasta_files=[\"background_read_in/SRR30315250_subset.fasta\"])\n", "SRR30315250_sequences" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Reading in sequences form a fasta file and assign i.i.d. probabilities per position" ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [], "source": [ "rng=np.random.default_rng(391)\n", "backgrounder = inmotifin.Backgrounder(\n", " params=inmotifin.BackgroundParams(\n", " b_alphabet=\"ACGT\",\n", " background_files=[\"background_read_in/SRR30315250_subset.fasta\"],\n", " background_type=\"fasta_iid\"),\n", " reader=shared_reader,\n", " writer=inmotifin.Writer(workdir=\".\", title=\"background_fasta_iid\"),\n", " rng=rng)" ] }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['SRR30315250.10_0',\n", " 'SRR30315250.11_0',\n", " 'SRR30315250.12_0',\n", " 'SRR30315250.13_0',\n", " 'SRR30315250.14_0',\n", " 'SRR30315250.15_0',\n", " 'SRR30315250.1_0',\n", " 'SRR30315250.1_1',\n", " 'SRR30315250.2_0',\n", " 'SRR30315250.3_0']" ] }, "execution_count": 47, "metadata": {}, "output_type": "execute_result" } ], "source": [ "backgrounder.create_backgrounds()\n", "backgrounder.get_backgrounds().background_ids[:10]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Reading in sequences form a fasta file and shuffle by nucleotide keeping only the shuffled sequences\n", "The probabilities are assigned iid" ] }, { "cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['SRR30315250.10_0_shuffled1',\n", " 'SRR30315250.10_0_shuffled2',\n", " 'SRR30315250.11_0_shuffled1',\n", " 'SRR30315250.11_0_shuffled2',\n", " 'SRR30315250.12_0_shuffled1',\n", " 'SRR30315250.12_0_shuffled2',\n", " 'SRR30315250.13_0_shuffled1',\n", " 'SRR30315250.13_0_shuffled2',\n", " 'SRR30315250.14_0_shuffled1',\n", " 'SRR30315250.14_0_shuffled2']" ] }, "execution_count": 48, "metadata": {}, "output_type": "execute_result" } ], "source": [ "backgrounder = inmotifin.Backgrounder(\n", " params=inmotifin.BackgroundParams(\n", " b_alphabet=\"ACGT\",\n", " background_files=[\"background_read_in/SRR30315250_subset.fasta\"],\n", " background_type=\"random_nucl_shuffled_only\",\n", " number_of_shuffle=2),\n", " reader=shared_reader,\n", " writer=inmotifin.Writer(workdir=\".\", title=\"background_shuffled_only\"),\n", " rng=rng)\n", "backgrounder.create_backgrounds()\n", "backgrounder.get_backgrounds().background_ids[:10]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Reading in sequences form a fasta file and shuffle by nucleotide keeping both the original and the shuffled sequences" ] }, { "cell_type": "code", "execution_count": 49, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['SRR30315250.10_0',\n", " 'SRR30315250.10_0_shuffled1',\n", " 'SRR30315250.10_0_shuffled2',\n", " 'SRR30315250.11_0',\n", " 'SRR30315250.11_0_shuffled1',\n", " 'SRR30315250.11_0_shuffled2',\n", " 'SRR30315250.12_0',\n", " 'SRR30315250.12_0_shuffled1',\n", " 'SRR30315250.12_0_shuffled2',\n", " 'SRR30315250.13_0']" ] }, "execution_count": 49, "metadata": {}, "output_type": "execute_result" } ], "source": [ "backgrounder = inmotifin.Backgrounder(\n", " params=inmotifin.BackgroundParams(\n", " b_alphabet=\"ACGT\",\n", " background_files=[\"background_read_in/SRR30315250_subset.fasta\"],\n", " background_type=\"random_nucl_shuffled_addon\",\n", " number_of_shuffle=2),\n", " reader=shared_reader,\n", " writer=inmotifin.Writer(workdir=\".\", title=\"background_shuffled_only\"),\n", " rng=rng)\n", "backgrounder.create_backgrounds()\n", "backgrounder.get_backgrounds().background_ids[:10]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Reading in sequences form a fasta file and fit hidden Markov model of order 2 to get better estimates of letter probabilities" ] }, { "cell_type": "code", "execution_count": 50, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[1.65281766e-024, 1.00000000e+000, 1.23979061e-026,\n", " 1.97238332e-107, 0.00000000e+000],\n", " [1.87744945e-322, 1.15314881e-073, 0.00000000e+000,\n", " 5.43903311e-162, 1.00000000e+000],\n", " [9.45967533e-001, 5.33906534e-002, 6.15526012e-004,\n", " 2.62871779e-005, 0.00000000e+000],\n", " [4.71035733e-010, 5.75459568e-014, 1.00000000e+000,\n", " 8.97662477e-012, 0.00000000e+000],\n", " [1.23620980e-008, 3.17405707e-001, 3.51090411e-001,\n", " 3.31503870e-001, 0.00000000e+000],\n", " [9.45967533e-001, 5.33906534e-002, 6.15526012e-004,\n", " 2.62871779e-005, 0.00000000e+000],\n", " [3.31375391e-008, 1.47324335e-001, 1.30963635e-001,\n", " 7.21711997e-001, 0.00000000e+000],\n", " [5.72256298e-010, 1.61989493e-002, 6.29200984e-002,\n", " 9.20880952e-001, 0.00000000e+000],\n", " [1.23620980e-008, 3.17405707e-001, 3.51090411e-001,\n", " 3.31503870e-001, 0.00000000e+000],\n", " [6.01405640e-001, 4.88476712e-013, 2.71944968e-009,\n", " 3.98594357e-001, 0.00000000e+000]])" ] }, "execution_count": 50, "metadata": {}, "output_type": "execute_result" } ], "source": [ "backgrounder = inmotifin.Backgrounder(\n", " params=inmotifin.BackgroundParams(\n", " b_alphabet=\"ACGTN\",\n", " background_files=[\"background_read_in/SRR30315250_subset.fasta\"],\n", " background_type=\"markov_fit\",\n", " markov_order=2),\n", " reader=shared_reader,\n", " writer=inmotifin.Writer(workdir=\".\", title=\"markov_fit\"),\n", " rng=rng)\n", "backgrounder.create_backgrounds()\n", "hhmbckg = backgrounder.get_backgrounds()\n", "hhmbckg.sequence_probs[\"SRR30315250.1_0\"][:10]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Reading in sequences form a fasta file, fit HMM of order 1, then sample new sequences" ] }, { "cell_type": "code", "execution_count": 51, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'markov_sim_seq_0': 'TTGGCTTTTTGTCG',\n", " 'markov_sim_seq_1': 'ATAGTGAATCCGAA',\n", " 'markov_sim_seq_2': 'CAACTGTACTGCACTC',\n", " 'markov_sim_seq_3': 'TGAATCAACT',\n", " 'markov_sim_seq_4': 'GCAATCAAAA',\n", " 'markov_sim_seq_5': 'TCCAACCAGCAACAACGAAG',\n", " 'markov_sim_seq_6': 'TTCTGTCNACTCTCAT',\n", " 'markov_sim_seq_7': 'GCAATGCAGCGTTTTATTC',\n", " 'markov_sim_seq_8': 'NTTATAATAGAGCA',\n", " 'markov_sim_seq_9': 'GAACAGTCCTTCGAACCTC',\n", " 'markov_sim_seq_10': 'CCGGCTCAATCTCTTCAA',\n", " 'markov_sim_seq_11': 'GGAGAACGTCGATGA',\n", " 'markov_sim_seq_12': 'GTTCCAGGAGCAAGTATCTG',\n", " 'markov_sim_seq_13': 'AATTCGAGATGAAGCCA',\n", " 'markov_sim_seq_14': 'TCTAATTTAGTTCTCTG',\n", " 'markov_sim_seq_15': 'TTTCTGTGCC',\n", " 'markov_sim_seq_16': 'TAGTGAATCTGTTTTA',\n", " 'markov_sim_seq_17': 'TGTTCAAAGCATTCATCTA',\n", " 'markov_sim_seq_18': 'CTGAGGGAATCGCAA',\n", " 'markov_sim_seq_19': 'ATCAGTGAATTGTTTCATC'}" ] }, "execution_count": 51, "metadata": {}, "output_type": "execute_result" } ], "source": [ "backgrounder = inmotifin.Backgrounder(\n", " params=inmotifin.BackgroundParams(\n", " b_alphabet=\"ACGTN\",\n", " background_files=[\"background_read_in/SRR30315250_subset.fasta\"],\n", " background_type=\"markov_sim\",\n", " markov_order=1,\n", " length_of_backgrounds_min=10,\n", " length_of_backgrounds_max=20,\n", " number_of_backgrounds=20),\n", " reader=shared_reader,\n", " writer=inmotifin.Writer(workdir=\".\", title=\"markov_sim\"),\n", " rng=rng)\n", "backgrounder.create_backgrounds()\n", "hhmbckgsim = backgrounder.get_backgrounds()\n", "hhmbckgsim.backgrounds" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Sampling instances from motifs" ] }, { "cell_type": "code", "execution_count": 52, "metadata": {}, "outputs": [], "source": [ "instancer = inmotifin.MotifInstancer(\n", " motifs=motifer.get_motifs(),\n", " rng=rng\n", ")\n", "instances = instancer.sample_instances(\n", " motif_idx_list=[selected_motif_0, selected_motif_1],\n", " orientations=[0, 1] # where 1 means forward, 0 means reverse complement\n", ")" ] }, { "cell_type": "code", "execution_count": 53, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['GCGC', 'CCTCTCTC']" ] }, "execution_count": 53, "metadata": {}, "output_type": "execute_result" } ], "source": [ "instances" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Inserting instances into backgrounds at specific locations, different location for each motif in each background" ] }, { "cell_type": "code", "execution_count": 54, "metadata": {}, "outputs": [], "source": [ "controller = inmotifin.Controller(\n", " basic_params=inmotifin.BasicParams(\n", " workdir=\".\",\n", " title=\"controller_insertion\",\n", " seed=47))\n", "backgrounds = {\n", " \"b0\": \"AAAAAAAAAAACAAAACAAAAAAA\",\n", " \"b1\": \"CCCCCCCCCGCCCCCCCGCCCCCCC\",\n", " \"b2\": \"TTTTTATTTTTTTTTTTTTTTTATT\"}\n", "b_alphabets = {\n", " \"b0\": 'ACGT',\n", " \"b1\": \"ACGT\",\n", " \"b2\": \"ACGT\"}\n", "sequence_probs = {\n", " \"b0\": np.tile(\n", " np.array([.9, .1, 0., 0.]), (len(backgrounds[\"b0\"]), 1)),\n", " \"b1\": np.tile(\n", " np.array([0., .9, .1, 0.]), (len(backgrounds[\"b1\"]), 1)),\n", " \"b2\": np.tile(\n", " np.array([.1, 0., 0., .9]), (len(backgrounds[\"b2\"]), 1))}\n", "motifs = inmotifin.Motifs(\n", " motifs={\n", " \"m0\": np.array([\n", " [1, 0, 0, 0],\n", " [0, 0, 1, 0],\n", " [0, 0, 1, 0]]),\n", " \"m1\": np.array([\n", " [1, 0, 0, 0],\n", " [1, 0, 0, 0],\n", " [1, 0, 0, 0],\n", " [0, 1, 0, 0]]),\n", " \"m2\": np.array([\n", " [0, 0, 1, 0],\n", " [1, 0, 0, 0]])},\n", " alphabet=\"ACGT\",\n", " alphabet_revcomp_pairs={\n", " 'A': 'T', 'C': 'G', 'T': 'A', 'G': 'C'},\n", " )\n", "background_ids = [\"b0\", \"b0\", \"b1\", \"b0\", \"b2\"]\n", "motif_ids = [\n", " [\"m0\"],\n", " [\"m1\"],\n", " [\"m0\", \"m2\"],\n", " [\"m1\", \"m1\", \"m0\"],\n", " [\"m2\"]]\n", "positions = [\n", " [(1, 4)],\n", " [(8, 12)],\n", " [(1, 4), (9, 11)],\n", " [(2, 6), (8, 12), (13, 16)],\n", " [(5, 7)]]\n", "orientations = [[1], [0], [1, 1], [0, 0, 1], [1]]\n", "motif_in_sequences, probabilistic_motif_in_sequences = controller.create_motif_in_seq(\n", " background_ids=background_ids,\n", " background_dict=backgrounds,\n", " b_alphabets=b_alphabets,\n", " sequence_probs=sequence_probs,\n", " positions=positions,\n", " motif_ids=motif_ids,\n", " motifs=motifs,\n", " orientations=orientations,\n", " to_replace=True)" ] }, { "cell_type": "code", "execution_count": 55, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'b0_m0_1:4_1': 'AAGGAAAAAAACAAAACAAAAAAA',\n", " 'b0_m1_8:12_0': 'AAAAAAAAGTTTAAAACAAAAAAA',\n", " 'b1_m0_m2_1:4_9:11_1_1': 'CAGGCCCCCGACCCCCCGCCCCCCC',\n", " 'b0_m1_m1_m0_2:6_8:12_13:16_0_0_1': 'AAGTTTAAGTTTAAGGCAAAAAAA',\n", " 'b2_m2_5:7_1': 'TTTTTGATTTTTTTTTTTTTTTATT'}" ] }, "execution_count": 55, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# the name of the sequences are: background id, motif id, position, orientation\n", "motif_in_sequences" ] }, { "cell_type": "code", "execution_count": 56, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[0. , 0.9, 0.1, 0. ],\n", " [1. , 0. , 0. , 0. ],\n", " [0. , 0. , 1. , 0. ],\n", " [0. , 0. , 1. , 0. ],\n", " [0. , 0.9, 0.1, 0. ],\n", " [0. , 0.9, 0.1, 0. ],\n", " [0. , 0.9, 0.1, 0. ],\n", " [0. , 0.9, 0.1, 0. ],\n", " [0. , 0.9, 0.1, 0. ],\n", " [0. , 0. , 1. , 0. ],\n", " [1. , 0. , 0. , 0. ],\n", " [0. , 0.9, 0.1, 0. ],\n", " [0. , 0.9, 0.1, 0. ],\n", " [0. , 0.9, 0.1, 0. ],\n", " [0. , 0.9, 0.1, 0. ],\n", " [0. , 0.9, 0.1, 0. ],\n", " [0. , 0.9, 0.1, 0. ],\n", " [0. , 0.9, 0.1, 0. ],\n", " [0. , 0.9, 0.1, 0. ],\n", " [0. , 0.9, 0.1, 0. ],\n", " [0. , 0.9, 0.1, 0. ],\n", " [0. , 0.9, 0.1, 0. ],\n", " [0. , 0.9, 0.1, 0. ],\n", " [0. , 0.9, 0.1, 0. ],\n", " [0. , 0.9, 0.1, 0. ]])" ] }, "execution_count": 56, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# here the sequences are represented by letter probability in each position\n", "probabilistic_motif_in_sequences[\"b1_m0_m2_1:4_9:11_1_1\"]" ] }, { "cell_type": "code", "execution_count": 57, "metadata": {}, "outputs": [], "source": [ "controller.writer.dict_to_fasta(\n", " seq_dict=motif_in_sequences,\n", " filename=\"motif_in_seq\")" ] }, { "cell_type": "code", "execution_count": 58, "metadata": {}, "outputs": [], "source": [ "controller.writer.save_dictionary_with_numpy_to_npz(\n", " numpy_dict=probabilistic_motif_in_sequences,\n", " filename=\"probabilistic_motif_in_seq\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Sampling motifs from groups to mimic soft-syntax (billboard model)\n", "First, create initial group sampling probabilities.\n", "Code for automatic assignment is shown after the manual examples." ] }, { "cell_type": "code", "execution_count": 59, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'t1': 0.8, 't2': 0.1, 't3': 0.1}" ] }, "execution_count": 59, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rng = np.random.default_rng(123)\n", "group_freq={\n", " \"t1\": 0.8,\n", " \"t2\": 0.1,\n", " \"t3\": 0.1}\n", "group_freq" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Then, assign motifs to groups with specific probabilities.\n", "Note, the sum of motif probabilities per group == 1. " ] }, { "cell_type": "code", "execution_count": 60, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
t1t2t3
m10.50.90.00
m20.50.00.25
m30.00.10.25
m40.00.00.50
\n", "
" ], "text/plain": [ " t1 t2 t3\n", "m1 0.5 0.9 0.00\n", "m2 0.5 0.0 0.25\n", "m3 0.0 0.1 0.25\n", "m4 0.0 0.0 0.50" ] }, "execution_count": 60, "metadata": {}, "output_type": "execute_result" } ], "source": [ "motif_freq_per_group_df = pd.DataFrame({\n", " \"t1\": {\"m1\": 0.5, \"m2\": 0.5},\n", " \"t2\": {\"m1\": 0.9, \"m3\": 0.1},\n", " \"t3\": {\"m2\": 0.25, \"m3\": 0.25, \"m4\": 0.5}})\n", "motif_freq_per_group_df.fillna(value=0, inplace=True)\n", "motif_freq_per_group_df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Finally, assign group transition probabilties." ] }, { "cell_type": "code", "execution_count": 61, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
t1t2t3
t10.60.20.2
t20.10.60.3
t30.20.20.6
\n", "
" ], "text/plain": [ " t1 t2 t3\n", "t1 0.6 0.2 0.2\n", "t2 0.1 0.6 0.3\n", "t3 0.2 0.2 0.6" ] }, "execution_count": 61, "metadata": {}, "output_type": "execute_result" } ], "source": [ "group_group_transition_prob=pd.DataFrame(\n", " np.array([\n", " [0.6, 0.2, 0.2],\n", " [0.1, 0.6, 0.3],\n", " [0.2, 0.2, 0.6]]),\n", " index=[\"t1\", \"t2\", \"t3\"],\n", " columns=[\"t1\", \"t2\", \"t3\"])\n", "group_group_transition_prob" ] }, { "cell_type": "code", "execution_count": 62, "metadata": {}, "outputs": [], "source": [ "frequencies = inmotifin.Frequencies(\n", " group_freq=group_freq,\n", " motif_freq_per_group=motif_freq_per_group_df,\n", " group_group_transition_prob=group_group_transition_prob)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Alternatively, helper functions can be used" ] }, { "cell_type": "code", "execution_count": 63, "metadata": {}, "outputs": [], "source": [ "grouper = inmotifin.Grouper(\n", " params=inmotifin.GroupParams(\n", " number_of_groups=3,\n", " max_group_size=3,\n", " group_size_binom_p=0.8),\n", " motif_ids=[\"m1\", \"m2\", \"m3\", \"m4\"],\n", " reader=shared_reader,\n", " writer=inmotifin.Writer(workdir=\".\", title=\"group_sim\"),\n", " rng=rng)\n", "\n", "grouper.create_groups()\n", "\n", "frequencer = inmotifin.Frequencer(\n", " params=inmotifin.FreqParams(\n", " group_frequency_type=\"random\",\n", " group_frequency_range=10,\n", " motif_frequency_type=\"random\",\n", " motif_frequency_range=20,\n", " group_group_type=\"random\",\n", " concentration_factor=0.6\n", " ),\n", " groups=grouper.get_groups(),\n", " reader=shared_reader,\n", " writer=inmotifin.Writer(workdir=\".\", title=\"group_sim\"),\n", " rng=rng)\n", "frequencer.assign_frequencies()" ] }, { "cell_type": "code", "execution_count": 64, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Frequencies(num_groups=3, group_freq={'group_sim_group_0': np.float64(0.45454545454545453), 'group_sim_group_1': np.float64(0.2727272727272727), 'group_sim_group_2': np.float64(0.2727272727272727)}, motif_freq_per_group= group_sim_group_0 group_sim_group_1 group_sim_group_2\n", "m1 0.666667 0.162162 0.485714\n", "m4 0.333333 0.000000 0.028571\n", "m2 0.000000 0.405405 0.000000\n", "m3 0.000000 0.432432 0.485714, group_group_transition_prob= group_sim_group_0 group_sim_group_1 group_sim_group_2\n", "group_sim_group_0 0.600000 0.329697 0.070303\n", "group_sim_group_1 0.085505 0.600000 0.314495\n", "group_sim_group_2 0.296587 0.103413 0.600000)" ] }, "execution_count": 64, "metadata": {}, "output_type": "execute_result" } ], "source": [ "frequencer.frequencies" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "After setting up, the groups can be sampled." ] }, { "cell_type": "code", "execution_count": 65, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['t1', 't3', 't2', 't3', 't3', 't2', 't2', 't2']" ] }, "execution_count": 65, "metadata": {}, "output_type": "execute_result" } ], "source": [ "num_groups_per_seq = 8\n", "test_freq = inmotifin.FrequencySampler(\n", " frequencies=frequencies,\n", " num_groups_per_seq=num_groups_per_seq,\n", " rng=rng)\n", "selected_groups = test_freq.select_groups()\n", "selected_groups" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "From groups, motifs are sampled following the motif per group probabilities." ] }, { "cell_type": "code", "execution_count": 66, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
t1t2t3
m10.50.90.00
m20.50.00.25
m30.00.10.25
m40.00.00.50
\n", "
" ], "text/plain": [ " t1 t2 t3\n", "m1 0.5 0.9 0.00\n", "m2 0.5 0.0 0.25\n", "m3 0.0 0.1 0.25\n", "m4 0.0 0.0 0.50" ] }, "execution_count": 66, "metadata": {}, "output_type": "execute_result" } ], "source": [ "motif_freq_per_group_df" ] }, { "cell_type": "code", "execution_count": 67, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['m2', 'm2', 'm1', 'm3', 'm4', 'm3', 'm1', 'm3', 'm2', 'm1', 'm3', 'm1']" ] }, "execution_count": 67, "metadata": {}, "output_type": "execute_result" } ], "source": [ "selected_motifs = test_freq.select_motifs_from_groups(\n", " group_ids=selected_groups,\n", " num_instances_per_seq=12,\n", " w_replacement=True)\n", "selected_motifs" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note, these functions assume sampling groups and motifs per sequence. Therefore, they only sample once." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Insert motifs to specific locations given the group they were sampled from\n", "First, sets of groups are selected. Then motifs per group are sampled. Next, group sets per sequence are sampled. Finally, for each set of group, a location is assigned in each sequence." ] }, { "cell_type": "code", "execution_count": 68, "metadata": {}, "outputs": [], "source": [ "grouper = inmotifin.Grouper(\n", " params=inmotifin.GroupParams(\n", " number_of_groups=3,\n", " max_group_size=3,\n", " group_size_binom_p=0.8),\n", " motif_ids=[\"m1\", \"m2\", \"m3\", \"m4\"],\n", " reader=shared_reader,\n", " writer=inmotifin.Writer(workdir=\".\", title=\"group_loc_sim\"),\n", " rng=rng)\n", "grouper.create_groups()\n", "\n", "frequencer = inmotifin.Frequencer(\n", " params=inmotifin.FreqParams(\n", " group_frequency_type=\"uniform\",\n", " motif_frequency_type=\"random\",\n", " motif_frequency_range=20,\n", " group_group_type=\"uniform\",\n", " concentration_factor=0.8\n", " ),\n", " groups=grouper.get_groups(),\n", " reader=shared_reader,\n", " writer=inmotifin.Writer(workdir=\".\", title=\"group_loc_sim\"),\n", " rng=rng)\n", "frequencer.assign_frequencies()" ] }, { "cell_type": "code", "execution_count": 69, "metadata": {}, "outputs": [], "source": [ "# create mock motif instances\n", "motif_instances = {\n", " \"m1\": \"AAAA\",\n", " \"m2\": \"CCC\",\n", " \"m3\": \"TTTT\",\n", " \"m4\": \"GTGTA\"\n", "}" ] }, { "cell_type": "code", "execution_count": 70, "metadata": {}, "outputs": [], "source": [ "seq_len = 50\n", "# create backgrounds, here we care about only the actual sequences for illustrative purposes\n", "backgrounder = inmotifin.Backgrounder(\n", " params=inmotifin.BackgroundParams(\n", " b_alphabet=\"ACGT\",\n", " b_alphabet_prior=[0.25, 0.25, 0.25, 0.25],\n", " number_of_backgrounds=30,\n", " length_of_backgrounds_min=seq_len),\n", " reader=shared_reader,\n", " writer=inmotifin.Writer(workdir=\".\", title=\"group_loc_sim\"),\n", " rng=rng)\n", "backgrounds, _ = backgrounder.simulate_iid_backgrounds()" ] }, { "cell_type": "code", "execution_count": 71, "metadata": {}, "outputs": [], "source": [ "num_sequences = 30\n", "group_per_seq = 2\n", "freq_sampler = inmotifin.FrequencySampler(\n", " frequencies=frequencies,\n", " num_groups_per_seq=group_per_seq,\n", " rng=rng)\n", "inserter = inmotifin.Inserter(to_replace=False)" ] }, { "cell_type": "code", "execution_count": 72, "metadata": {}, "outputs": [], "source": [ "final_seq = {}\n", "final_pos = {}\n", "for seq_idx in range(num_sequences):\n", " group_set = freq_sampler.select_groups()\n", " # if the groups are the same, select motifs together and assign a single mean location\n", " if len(set(group_set)) == 1:\n", " seqid = str(seq_idx) + \"_single_group\"\n", " motifs = test_freq.select_motifs_from_groups(\n", " group_ids=selected_groups,\n", " num_instances_per_seq=4,\n", " w_replacement=False)\n", " instance_seq = [motif_instances[motif_id] for motif_id in motifs]\n", " position_means = [rng.uniform(10, 40)]\n", " position_vars = [1]\n", " positioner = inmotifin.Positioner(\n", " params=inmotifin.PositionParams(\n", " position_type=\"gaussian\",\n", " position_means=position_means,\n", " position_variances=position_vars,\n", " to_replace=False),\n", " selected_instances=instance_seq,\n", " seq_length=seq_len,\n", " reader=shared_reader,\n", " rng=rng\n", " )\n", " positions = positioner.select_positions().positions\n", " final_seq[seqid] = inserter.generate_motif_in_sequence(\n", " sequence=backgrounds[\"group_loc_sim_seq_\" + str(seq_idx)],\n", " motif_instances=instance_seq,\n", " positions=positions\n", " )\n", " final_pos[seqid] = positions\n", " else:\n", " # Otherwise, sample motifs separately and sample location for each group\n", " seqid = str(seq_idx) + \"_multi_group\"\n", " positions = []\n", " instance_seqs = []\n", " for group in group_set:\n", " motifs = test_freq.select_motifs_from_groups(\n", " group_ids=[group],\n", " num_instances_per_seq=2,\n", " w_replacement=False)\n", " instance_seq = [motif_instances[motif_id] for motif_id in motifs]\n", " instance_seqs.extend(instance_seq)\n", " position_means = [rng.uniform(10, 40)]\n", " position_vars = [1]\n", " positioner = inmotifin.Positioner(\n", " params=inmotifin.PositionParams(\n", " position_type=\"gaussian\",\n", " position_means=position_means,\n", " position_variances=position_vars,\n", " to_replace=False),\n", " selected_instances=instance_seq,\n", " seq_length=seq_len,\n", " reader=shared_reader,\n", " rng=rng\n", " )\n", " pos = positioner.select_positions().positions\n", " positions.extend(pos)\n", " final_seq[seqid] = inserter.generate_motif_in_sequence(\n", " sequence=backgrounds[\"group_loc_sim_seq_\" + str(seq_idx)],\n", " motif_instances=instance_seqs,\n", " positions=positions\n", " )\n", " final_pos[seqid] = positions" ] }, { "cell_type": "code", "execution_count": 73, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0_single_group\n", "[(12, 12), (12, 12), (12, 12), (10, 10)]\n", "AACCACACGCAAAATGCCCCCCGTGTACTCTGCCACGTCCGCGACGGCCATACCTTCTCTTGAAC\n", "1_multi_group\n", "[(30, 30), (29, 29), (24, 24), (23, 23)]\n", "ATAAGCTACGTCGAGCAACCGGGAAAACAAAATGGGACCCATTTTCGCAGGAATGATACTATAAT\n", "2_single_group\n", "[(40, 40), (40, 40), (40, 40), (38, 38)]\n", "TCACACGCGTCATTATCAATATACAGCCTCGTGTGAGAAAAAATAAAAGTGTATTTTCCTCCTTTCA\n", "3_multi_group\n", "[(33, 33), (32, 32), (17, 17), (17, 17)]\n", "AAACTACCCACTTCCCCAAAAAAAAGGCAGCTCAGTCTAACCCCTTTTCTTGGGTAGTTTTAAAG\n", "4_multi_group\n", "[(38, 38), (37, 37), (17, 17), (14, 14)]\n", "CACCGTCTGCTATGAAAATAAAAAACAACTTATAAGATCATCTCAAAAAACCCAACATGCTGGGC\n" ] } ], "source": [ "print_limit = 5\n", "for seqkey, seqvalue in final_seq.items():\n", " print(seqkey)\n", " print(final_pos[seqkey])\n", " print(seqvalue)\n", " print_limit -= 1\n", " if print_limit == 0:\n", " break" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Remove inserted motif instances by masking them with random short backgrounds" ] }, { "cell_type": "code", "execution_count": 74, "metadata": {}, "outputs": [], "source": [ "controller = inmotifin.Controller(\n", " basic_params=inmotifin.BasicParams(\n", " title=\"masktest\",\n", " workdir=\".\",\n", " seed=47))\n", "seq_with_motif = {\n", " \"seq0\": \"AAAAAGCGA\",\n", " \"seq1\": \"CAACCCCCC\",\n", " \"seq2\": \"TTTGATTCC\"}\n", "seq_with_motif_prob = {\n", " \"seq0\": np.concatenate((\n", " np.tile([1, 0, 0, 0], (5, 1)),\n", " np.tile([0, 0.1, 0.9, 0], (3, 1)),\n", " np.tile([1, 0, 0, 0], (1, 1))\n", " )),\n", " \"seq1\": np.concatenate((\n", " np.tile([0, 1, 0, 0], (1, 1)),\n", " np.tile([0.9, 0.1, 0, 0], (3, 1)),\n", " np.tile([0, 1, 0, 0], (5, 1))\n", " )),\n", " \"seq2\": np.concatenate((\n", " np.tile([0, 0, 0, 1], (3, 1)),\n", " np.tile([0.5, 0, 0.5, 0], (2, 1)),\n", " np.tile([0, 0, 0, 1], (2, 1)),\n", " np.tile([0, 1, 0, 0], (2, 1))\n", " ))}\n", "positions = {\n", " \"seq0\": [(5, 7)],\n", " \"seq1\": [(1, 3)],\n", " \"seq2\": [(3, 4), (7, 8)]}\n", "mask_alphabet = \"ACGT\"\n", "mask_alphabet_prior = [0, 0, 0.3, 0.7]\n", "masked_seq, masked_prob = controller.mask_motif_in_seq(\n", " seq_with_motif=seq_with_motif,\n", " positions=positions,\n", " mask_alphabet=mask_alphabet,\n", " mask_alphabet_prior=mask_alphabet_prior,\n", " seq_with_motif_prob=seq_with_motif_prob)" ] }, { "cell_type": "code", "execution_count": 75, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'seq0_masked': 'AAAAATTTA',\n", " 'seq1_masked': 'CGTTCCCCC',\n", " 'seq2_masked': 'TTTGTTTTG'}" ] }, "execution_count": 75, "metadata": {}, "output_type": "execute_result" } ], "source": [ "masked_seq" ] }, { "cell_type": "code", "execution_count": 76, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'seq0_masked': array([[1. , 0. , 0. , 0. ],\n", " [1. , 0. , 0. , 0. ],\n", " [1. , 0. , 0. , 0. ],\n", " [1. , 0. , 0. , 0. ],\n", " [1. , 0. , 0. , 0. ],\n", " [0. , 0. , 0.3, 0.7],\n", " [0. , 0. , 0.3, 0.7],\n", " [0. , 0. , 0.3, 0.7],\n", " [1. , 0. , 0. , 0. ]]),\n", " 'seq1_masked': array([[0. , 1. , 0. , 0. ],\n", " [0. , 0. , 0.3, 0.7],\n", " [0. , 0. , 0.3, 0.7],\n", " [0. , 0. , 0.3, 0.7],\n", " [0. , 1. , 0. , 0. ],\n", " [0. , 1. , 0. , 0. ],\n", " [0. , 1. , 0. , 0. ],\n", " [0. , 1. , 0. , 0. ],\n", " [0. , 1. , 0. , 0. ]]),\n", " 'seq2_masked': array([[0. , 0. , 0. , 1. ],\n", " [0. , 0. , 0. , 1. ],\n", " [0. , 0. , 0. , 1. ],\n", " [0. , 0. , 0.3, 0.7],\n", " [0. , 0. , 0.3, 0.7],\n", " [0. , 0. , 0. , 1. ],\n", " [0. , 0. , 0. , 1. ],\n", " [0. , 0. , 0.3, 0.7],\n", " [0. , 0. , 0.3, 0.7]])}" ] }, "execution_count": 76, "metadata": {}, "output_type": "execute_result" } ], "source": [ "masked_prob" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Simulating sequences with COBIND-predicted motif pairs" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We have run [COBIND pipeline](https://bitbucket.org/CBGR/cobind_tool/src/main/) using *in vivo* SOX17 and SOX2 binding sites as anchors (see [manuscript](https://academic.oup.com/nar/article/52/18/e85/7747208?login=true) for more details on this research). The pipeline discovers co-binding patterns. We can take the discovered motifs and information about spacing between the anchor (core) and co-binding motifs and inMOTIFin to create multimer motifs and then insert them in random background sequences." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Getting COBIND-predicted motif pairs and their grammar" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We first need to get the core and co-binder motif pairs and the spacing information from COBIND output." ] }, { "cell_type": "code", "execution_count": 77, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[0.031458 , 0.611535 , 0.209742 , 0.147265 ],\n", " [0.066923 , 0.694946 , 0.023109 , 0.215022 ],\n", " [0.845159 , 0. , 0.00788 , 0.146961 ],\n", " [0. , 0. , 0. , 1. ],\n", " [0. , 0. , 0. , 1. ],\n", " [0.01902302, 0.31293631, 0.64596165, 0.02207902],\n", " [0.025962 , 0. , 0. , 0.974038 ]])" ] }, "execution_count": 77, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Reading txt files as numpy arrays, skipping non-numeric lines\n", "def read_motif_matrix(path):\n", "\twith open(path, \"r\") as f:\n", "\t\tlines = f.readlines()\n", "\tnumeric_lines = []\n", "\tfor line in lines:\n", "\t\tparts = line.strip().split()\n", "\t\tif parts and all(p.replace('.', '', 1).replace('-', '', 1).isdigit() for p in parts):\n", "\t\t\tnumeric_lines.append(line)\n", "\tif numeric_lines:\n", "\t\treturn np.loadtxt(numeric_lines)\n", "\telse:\n", "\t\treturn None\n", "\n", "# Reading motif txt files directly with normalization\n", "def normalize_motif_matrix(matrix):\n", "\t\"\"\"Normalize each row to sum exactly to 1.0\"\"\"\n", "\tif matrix is None:\n", "\t\treturn None\n", "\t# Normalize each row by dividing by its sum\n", "\trow_sums = np.sum(matrix, axis=1, keepdims=True)\n", "\t# Avoid division by zero\n", "\trow_sums[row_sums == 0] = 1\n", "\treturn matrix / row_sums\n", "\n", "# Reading spacings summary files\n", "files = glob.glob(\"cobind_for_inmotifin/results/clustering_results/*/spacings/spacings_summary.tab\")\n", "\n", "dfs = []\n", "for f in files:\n", "\ttf_name = os.path.basename(os.path.dirname(os.path.dirname(f)))\n", "\tdf = pd.read_csv(f, sep=\"\\t\")\n", "\tdf[\"TF\"] = tf_name\n", "\tdfs.append(df)\n", "spacings_df = pd.concat(dfs, ignore_index=True)\n", "\n", "selected_columns = [\"TF\", \"Spacer_length\", \"Location\", \"Subcluster\", \"Core_logo\", \"Cobinder_logo\"]\n", "spacings_selected = spacings_df[selected_columns].drop_duplicates()\n", "spacings_selected\n", "\n", "cobind_motif_dict = {}\n", "for _, row in spacings_selected.iterrows():\n", "\tcore_path = row[\"Core_logo\"].replace(\".png\", \".txt\")\n", "\tcobinder_path = row[\"Cobinder_logo\"].replace(\".png\", \".txt\")\n", "\t\n", "\tcore_key = f\"{row['TF']}:{row['Spacer_length']}:{row['Location']}:core\"\n", "\tcobinder_key = f\"{row['TF']}:{row['Spacer_length']}:{row['Location']}:cobinder\"\n", "\t\n", "\tcore_motif = read_motif_matrix(core_path)\n", "\tcobind_motif_dict[core_key] = normalize_motif_matrix(core_motif)\n", "\tcobinder_motif = read_motif_matrix(cobinder_path)\n", "\tcobind_motif_dict[cobinder_key] = normalize_motif_matrix(cobinder_motif)\n", "\n", "cobind_motif_dict[\"SOX17:0:right:core\"]" ] }, { "cell_type": "code", "execution_count": 78, "metadata": {}, "outputs": [], "source": [ "# We select SOX17 anchor and its cobinder motifs for demonstration\n", "sox17_core = 'SOX17:0:right:core'\n", "sox17_cobinder = 'SOX17:0:right:cobinder'" ] }, { "cell_type": "code", "execution_count": 79, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "" ] }, "execution_count": 79, "metadata": {}, "output_type": "execute_result" } ], "source": [ "core = seqlogo.Ppm(cobind_motif_dict[sox17_core])\n", "seqlogo.seqlogo(core, ic_scale = True, format = 'png', size = 'small')" ] }, { "cell_type": "code", "execution_count": 80, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "" ] }, "execution_count": 80, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cobinder = seqlogo.Ppm(cobind_motif_dict[sox17_cobinder])\n", "seqlogo.seqlogo(cobinder, ic_scale = True, format = 'png', size = 'small')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Creating multimeric motifs using COBIND motifs\n", "\n", "We can use two COBIND motifs, known anchor and predicted co-binding patter, and spacing information to create multimer motif with inMOTIFin.\n", "\n", "We will continue using SOX17 and its co-binding motif (which was predicted to be OCT4) for this and further demonstrations." ] }, { "cell_type": "code", "execution_count": 81, "metadata": {}, "outputs": [], "source": [ "cobind_motif_writer = inmotifin.Writer(workdir=\"cobind_for_inmotifin\", title=\"multimer_sim\")\n", "cobind_rng = np.random.default_rng(seed=42)\n", "\n", "cobind_multimerer = inmotifin.Multimerer(\n", " params=inmotifin.MultimerParams(\n", " motif_files=None,\n", " multimerisation_rule_path=None),\n", " reader=shared_reader,\n", " writer=cobind_motif_writer,\n", " rng=cobind_rng)" ] }, { "cell_type": "code", "execution_count": 82, "metadata": {}, "outputs": [], "source": [ "cobind_dimers = inmotifin.Motifs(\n", "\tmotifs=cobind_motif_dict,\n", "\talphabet='ACGT',\n", "\talphabet_revcomp_pairs=None)\n", "cobind_multimerer.motifs = cobind_dimers\n", "cobind_multimerer.alphabet = \"ACGT\"" ] }, { "cell_type": "code", "execution_count": 83, "metadata": {}, "outputs": [], "source": [ "SOX17_OCT4_dimer = cobind_multimerer.create_a_multimer(\n", " motifs=[cobind_motif_dict[sox17_core], cobind_motif_dict[sox17_cobinder]],\n", " distances=[0])\n", "SOX17_OCT4_dimer = {\"SOX17_OCT4\": SOX17_OCT4_dimer}\n", "SOX17_OCT4_dimer_logo = seqlogo.Ppm(SOX17_OCT4_dimer['SOX17_OCT4'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Sometimes ghostsript is broken for seqlogos. This is a workaround below:" ] }, { "cell_type": "code", "execution_count": 84, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 84, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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WYkuN6lr164ARLb7SZMmNSqX77VORERkCwbdRETkVjZv3mwZsazvl19+AQD07NkTgJhifN999+GPP/7AokWLGj1/8eLF2LRpEx544AHL1OEPP/wQBw4cwIcffmiZ3vz666+jU6dOeOSRR2AwGGzq+7JlywAAd955Z6PfhYSENAr+zNuJjR49GpMmTcKXX36JtWvXNqr74osv4tSpU3j22Wfh4+MDABg1ahSmTJmCJUuWYPXq1Y3q1NTUNMro3ZrIyEisWrWqUZkwYQK8vb2xatUqvPDCC1a1Wd+yZcuwZMkSjBo1ChMnTpTdTmsmT56MwMBAvPXWW9Dr9Y1+n5+fb7djExFRx8M13URE5FYef/xxVFZW4sYbb0SvXr1QU1ODHTt2YPny5bjiiitw3333WZ67YMECnDhxAo8++ijWr19vGdH+7bffsGbNGowfPx7vvfceACAzMxOvvPIKZsyYgRtvvNHShp+fH/773//ipptuwn//+188/fTTlt+9+eabAGDZ2/mbb77B9u3bAQAvvfRSg34bjUYsX74cI0eOtIy0WuPrr7/GxIkTccMNN+DOO+/E2LFjodPpsHLlSmzZsgW33XYb/v73vzeqc+211+Kmm27CjBkzMHHiRPj5+eH06dP47rvvkJOTY9Ve3b6+vpg5c2ajx1evXo3du3c3+bvm/PDDD/D397ckOPvtt9+QnJyMgQMHWpYI2EtgYCAWLVqEe+65B0OGDMHtt9+OiIgIZGRkYN26dRgzZgw+/vhju/aBiIg6DgbdRETkVt599118//33+OWXX/DZZ5+hpqYGCQkJePTRR/HSSy81SBrm7++PjRs34pNPPsG3336Lv//975AkCb169cIHH3yARx991LLN2OOPPw5JkpoMtm688UZMnz4dr732Gm699VZLoq6XX365wfO++OILy/3Lg+4//vgDeXl5ePHFF2W97piYGOzevRvvvfcevv/+e/z444/w8PDAgAED8NVXX2HWrFlQqVQN6kRERGDHjh345JNPsHz5crz44ouoqalBYmIirr/+ejz55JOy+qIEczZwb29vhIeHY9CgQfjiiy9w5513QqvV2v34d955J2JjY/Hvf/8b//nPf6DT6RAXF4exY8c2uHBDRERkK5XU1Bw9IiIiIiIiIrIZ13QTERERERER2QmDbiIiIiIiIiI7YdBNREREREREZCdWBd3z58/H8OHDERAQgMjISMycORMnT55std7333+PXr16wdvbG/3797ds60JERERERETUnlkVdG/duhWPPfYYdu3ahQ0bNkCv1+Paa69FRUVFs3V27NiBO+64Aw888AAOHDiAmTNnYubMmThy5IjNnSciIiIiIiJyZTZlL8/Pz0dkZCS2bt2KcePGNfmc2267DRUVFVi7dq3lsZEjR2LQoEFYvHix3EMTERERERERuTyb9ukuKSkBAISGhjb7nJ07d2LevHkNHps8eTJWr17dbB2dTgedTmf52WQy4dKlSwgLC2u0BykRERERERGRo0mShLKyMsTGxkKtbn4Sueyg22QyYe7cuRgzZgz69evX7PNyc3MRFRXV4LGoqCjk5uY2W2f+/Pl4/fXX5XaNiIiIiIiIyCEyMzPRqVOnZn8vO+h+7LHHcOTIEWzfvl1uE8164YUXGoyOl5SUICEhAZmZmQgMDFT8eETtRlCQs3vgPLUzbyw68nsBNH4/iIiIiEhRpaWliI+PR0BAQIvPkxV0z5kzB2vXrsW2bdtajOgBIDo6Gnl5eQ0ey8vLQ3R0dLN1tFottFpto8cDAwMZdBNR0/jd0BDfDyIiIiKHaG0JtFXZyyVJwpw5c7Bq1Sps2rQJnTt3brXOqFGjsHHjxgaPbdiwAaNGjbLm0ERERERERERux6qR7sceewzLli3DmjVrEBAQYFmXHRQUBB8fHwDArFmzEBcXh/nz5wMAnnzySYwfPx7vvfcepk2bhu+++w579+7FZ599pvBLISIiIiIiInItVo10L1q0CCUlJbjqqqsQExNjKcuXL7c8JyMjAzk5OZafR48ejWXLluGzzz7DwIED8cMPP2D16tUtJl8jIiIiIiIiag9s2qfbUUpLSxEUFISSkhKu6SZqSUfeUu/yr7KO/F4Ajd8PIiIiIlJUW+NUq0a6iYiIiIiIiKjtGHQTERERERER2QmDbiIiIiIiIiI7YdBNREREREREZCcMuomIiIiIiIjshEE3ERERERERkZ0w6CYiIiIiIiKyEwbdRERERERERHbi4ewOEBEROYxK5eweOJckObsHREREHQ5HuomIiIiIiIjshEE3ERERERERkZ0w6CYiIiIiIiKyEwbdRERERERERHbCoJuIiIiIiIjITpi9nIiIiIiZ7Z3dAyKidosj3URERERERER2wqCbiIiIiIiIyE4YdBMRERERERHZCYNuIiIiIiIiIjth0E1ERERERERkJwy6iYiIiIiIiOyEQTcRERERERGRnTDoJiIiIiIiIrITBt1EREREREREdsKgm4iIiIiIiMhOGHQTERERERER2QmDbiIiIiIiIiI78XB2B4hIQZJkv7ZVKtvbsGf/HHksJd4LwLHvBxERERE5BUe6iYiIiIiIiOyEQTcRERERERGRnTDoJiIiIiIiIrITBt1EREREREREdmJ10L1t2zbMmDEDsbGxUKlUWL16dYvP37JlC1QqVaOSm5srt89EREREREREbsHqoLuiogIDBw7EwoULrap38uRJ5OTkWEpkZKS1hyYiIiIiIiJyK1ZvGTZ16lRMnTrV6gNFRkYiODjY6npERERERERE7spha7oHDRqEmJgYXHPNNUhOTnbUYYmIiIiIiIicxuqRbmvFxMRg8eLFGDZsGHQ6HZYsWYKrrroKKSkpGDJkSJN1dDoddDqd5efS0lJ7d5OIiIiIiIhIcXYPunv27ImePXtafh49ejTOnj2LBQsW4Jtvvmmyzvz58/H666/bu2tEREREREREduWULcNGjBiBM2fONPv7F154ASUlJZaSmZnpwN4RERERERERKcPuI91NOXjwIGJiYpr9vVarhVardWCPiIioQ5Ak+7WtUinTjj37SERERA5nddBdXl7eYJQ6LS0NBw8eRGhoKBISEvDCCy8gOzsbX3/9NQDggw8+QOfOndG3b19UV1djyZIl2LRpE37//XflXgURERERERGRC7I66N67dy8mTJhg+XnevHkAgNmzZ+Orr75CTk4OMjIyLL+vqanB008/jezsbPj6+mLAgAH4448/GrRBRERERERE1B6pJMn157GVlpYiKCgIJSUlCAwMdHZ3iDomJabOuv7XTdtwGjE1hZ8L96bU/z93xc8dEZHV2hqnOmVNNxEREZFL4Xp/IiKyE6dkLyciIiIiIiLqCBh0ExEREREREdkJg24iIiIiIiIiO2HQTURERERERGQnDLqJiIiIiIiI7IRBNxEREREREZGdMOgmIiIiIiIishPu003UhEN5h/D61tcVaWtcwjg8OfJJRdoiIiKijiU7G9i7F9izBzh0CCgqAsrL64rJBPj6Aj4+QEQE0KsX0LOnuO3VC0hMBDQaZ78Koo6NQTdRE3478xtWHl+pSFsn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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import logomaker\n", "import matplotlib.pyplot as plt\n", "\n", "n_symbols = len(SOX17_OCT4_dimer_logo.alphabet)\n", "eps = 1e-10\n", "IC_per_position = np.log2(n_symbols) + np.sum(\n", " SOX17_OCT4_dimer_logo.ppm * np.log2(SOX17_OCT4_dimer_logo.ppm + eps), axis=1)\n", "\n", "plt.figure(figsize=(8, 3))\n", "logomaker.Logo(\n", " pd.DataFrame(\n", " SOX17_OCT4_dimer_logo.ppm.mul(IC_per_position, axis=0),\n", " columns=list(SOX17_OCT4_dimer_logo.alphabet)),\\\n", " shade_below=0.5, fade_below=0.5)\n", "plt.title(\"SOX17-OCT4 Dimer\")\n", "plt.tight_layout()\n", "plt.show" ] }, { "cell_type": "code", "execution_count": 85, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[0.031458 , 0.611535 , 0.209742 , 0.147265 ],\n", " [0.066923 , 0.694946 , 0.023109 , 0.215022 ],\n", " [0.845159 , 0. , 0.00788 , 0.146961 ],\n", " [0. , 0. , 0. , 1. ],\n", " [0. , 0. , 0. , 1. ],\n", " [0.01902302, 0.31293631, 0.64596165, 0.02207902],\n", " [0.025962 , 0. , 0. , 0.974038 ]])" ] }, "execution_count": 85, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Adding generated dimer motif to all COBIND motifs\n", "cobind_motif_dict[\"SOX17_OCT4\"] = SOX17_OCT4_dimer[\"SOX17_OCT4\"]\n", "cobind_motif_dict[\"SOX17:0:right:core\"]" ] }, { "cell_type": "code", "execution_count": 86, "metadata": {}, "outputs": [], "source": [ "# Exporting motifs to meme format:\n", "cobind_motif_writer.motif_to_meme(\n", " motifs=cobind_motif_dict,\n", " alphabet='ACGT',\n", " file_prefix=\"COBIND_motifs\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Generating random background sequences for COBIND dimer insertion\n", "\n", "We can use inMOTIFin functionalities to generate random backgrounds (as shown above), which later can be used to insert a COBIND dimer." ] }, { "cell_type": "code", "execution_count": 87, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'background_sim_seq_0': 'GCTGATGGACCTGTCCGATGGCTTGACAAGGTCCCAACCGCTGCTTCCGA',\n", " 'background_sim_seq_1': 'AAGGGGCGAAGCGGGGGCACCCTCACCGGGGCTAAAGCAGAGCCCGCAAT',\n", " 'background_sim_seq_2': 'TGCTGGCCATCCCGATGGCGGGACACCAAGATGCGATCGACCTGCCCGCA',\n", " 'background_sim_seq_3': 'TTAGAGCGGGATCAGCTTCTCGCTAACTTGTTGCGGCAGCTCATAAGTAC',\n", " 'background_sim_seq_4': 'GTGAACAGAGGGATGGAATCCCGTCTAGGAACTGTTCGAATGCGGTGCCC'}" ] }, "execution_count": 87, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cobind_controller = inmotifin.Controller(\n", " basic_params=inmotifin.BasicParams(\n", " workdir=\"cobind_for_inmotifin\",\n", " title=\"controller_insertion\",\n", " seed=47))\n", "alphabet = \"ACGT\"\n", "alphabet_prior = np.array([0.2, 0.3, 0.3, 0.2])\n", "cobind_backgrounder = inmotifin.Backgrounder(\n", " params=inmotifin.BackgroundParams(\n", " b_alphabet=alphabet,\n", " b_alphabet_prior=alphabet_prior,\n", " number_of_backgrounds=5,\n", " length_of_backgrounds_min=50),\n", " reader=shared_reader,\n", " writer=inmotifin.Writer(workdir=\"cobind_for_inmotifin\", title=\"background_sim\"),\n", " rng=cobind_rng)\n", "cobind_backgrounds, _ = cobind_backgrounder.simulate_iid_backgrounds()\n", "cobind_backgrounder.writer.dict_to_fasta(\n", " seq_dict=cobind_backgrounds,\n", " filename=\"cobind_backgrounds\")\n", "cobind_backgrounds" ] }, { "cell_type": "code", "execution_count": 88, "metadata": {}, "outputs": [], "source": [ "cobind_backgrounder.writer.dict_to_fasta(\n", " seq_dict=cobind_backgrounds,\n", " filename=\"cobind_backgrounds\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Inserting COBIND motifs into random backgrounds\n", "\n", "Now with the motifs and backgrounds, we can generate simulated sequences with motif instances, based on biological knowledge." ] }, { "cell_type": "code", "execution_count": 89, "metadata": {}, "outputs": [], "source": [ "cobind_motif_ids = [\n", " [\"SOX17_OCT4\"],\n", " [\"SOX17:0:right:core\"],\n", " [\"SOX17:0:right:core\", \"SOX17:0:right:cobinder\"],\n", " [\"SOX17_OCT4\"],\n", " [\"SOX17_OCT4\"]\n", "]\n", "\n", "cobind_positions = [[(10, 25)], [(20, 28)], [(10, 18), (25, 33)], [(2, 17)], [(5, 20)]]\n", "cobind_orientations = [[0], [0], [1, 1], [0], [1]]\n", "cobind_b_alphabets = {bg_key: alphabet for bg_key, _ in cobind_backgrounds.items()}\n", "cobind_background_ids = [bg_key for bg_key, _ in cobind_backgrounds.items()]\n", "sequence_probs = {\n", " bg_key: np.tile(alphabet_prior, (len(bg_seq), 1)) for bg_key, bg_seq in cobind_backgrounds.items()}\n", "\n", "cobind_motifs_obj = inmotifin.Motifs(\n", " motifs=cobind_motif_dict,\n", " alphabet='ACGT',\n", " alphabet_revcomp_pairs={'A': 'T', 'C': 'G', 'G': 'C', 'T': 'A'}\n", ")\n", "\n", "cobind_motif_in_sequences, cobind_probabilistic_motif_in_sequences = cobind_controller.create_motif_in_seq(\n", " background_ids=cobind_background_ids,\n", " background_dict=cobind_backgrounds,\n", " b_alphabets=cobind_b_alphabets,\n", " sequence_probs=sequence_probs,\n", " positions=cobind_positions,\n", " motif_ids=cobind_motif_ids,\n", " motifs=cobind_motifs_obj,\n", " orientations=cobind_orientations)" ] }, { "cell_type": "code", "execution_count": 90, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'background_sim_seq_0_SOX17_OCT4_10:25_0': 'GCTGATGGACTTTGCACACAATACGACAAGGTCCCAACCGCTGCTTCCGA',\n", " 'background_sim_seq_1_SOX17:0:right:core_20:28_0': 'AAGGGGCGAAGCGGGGGCACTCAATGAGGGGCTAAAGCAGAGCCCGCAAT',\n", " 'background_sim_seq_2_SOX17:0:right:core_SOX17:0:right:cobinder_10:18_25:33_1_1': 'TGCTGGCCATGGTTTGTGCGGGACATTGCAAAGCGATCGACCTGCCCGCA',\n", " 'background_sim_seq_3_SOX17_OCT4_2:17_0': 'TTTATGCATAGAAATGTTCTCGCTAACTTGTTGCGGCAGCTCATAAGTAC',\n", " 'background_sim_seq_4_SOX17_OCT4_5:20_1': 'GTGAAGCATTGTATGCGTACCCGTCTAGGAACTGTTCGAATGCGGTGCCC'}" ] }, "execution_count": 90, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cobind_motif_in_sequences" ] }, { "cell_type": "code", "execution_count": 91, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[0.2 , 0.3 , 0.3 , 0.2 ],\n", " [0.2 , 0.3 , 0.3 , 0.2 ],\n", " [0.2 , 0.3 , 0.3 , 0.2 ],\n", " [0.2 , 0.3 , 0.3 , 0.2 ],\n", " [0.2 , 0.3 , 0.3 , 0.2 ],\n", " [0.2 , 0.3 , 0.3 , 0.2 ],\n", " [0.2 , 0.3 , 0.3 , 0.2 ],\n", " [0.2 , 0.3 , 0.3 , 0.2 ],\n", " [0.2 , 0.3 , 0.3 , 0.2 ],\n", " [0.2 , 0.3 , 0.3 , 0.2 ],\n", " [0.04549095, 0.06756593, 0.03213597, 0.85480715],\n", " [0.075684 , 0.105387 , 0.026675 , 0.792254 ],\n", " [0.1027001 , 0.01445901, 0.01755902, 0.86528187],\n", " [0.06895607, 0.02947803, 0.88603489, 0.01553102],\n", " [0.391595 , 0.580054 , 0.013386 , 0.014965 ],\n", " [0.969974 , 0.013709 , 0.005576 , 0.010741 ],\n", " [0.114354 , 0.110361 , 0.10803 , 0.667255 ],\n", " [0.974038 , 0. , 0. , 0.025962 ],\n", " [0.02207902, 0.64596165, 0.31293631, 0.01902302],\n", " [1. , 0. , 0. , 0. ],\n", " [1. , 0. , 0. , 0. ],\n", " [0.146961 , 0.00788 , 0. , 0.845159 ],\n", " [0.215022 , 0.023109 , 0.694946 , 0.066923 ],\n", " [0.147265 , 0.209742 , 0.611535 , 0.031458 ],\n", " [0.2 , 0.3 , 0.3 , 0.2 ],\n", " [0.2 , 0.3 , 0.3 , 0.2 ],\n", " [0.2 , 0.3 , 0.3 , 0.2 ],\n", " [0.2 , 0.3 , 0.3 , 0.2 ],\n", " [0.2 , 0.3 , 0.3 , 0.2 ],\n", " [0.2 , 0.3 , 0.3 , 0.2 ],\n", " [0.2 , 0.3 , 0.3 , 0.2 ],\n", " [0.2 , 0.3 , 0.3 , 0.2 ],\n", " [0.2 , 0.3 , 0.3 , 0.2 ],\n", " [0.2 , 0.3 , 0.3 , 0.2 ],\n", " [0.2 , 0.3 , 0.3 , 0.2 ],\n", " [0.2 , 0.3 , 0.3 , 0.2 ],\n", " [0.2 , 0.3 , 0.3 , 0.2 ],\n", " [0.2 , 0.3 , 0.3 , 0.2 ],\n", " [0.2 , 0.3 , 0.3 , 0.2 ],\n", " [0.2 , 0.3 , 0.3 , 0.2 ],\n", " [0.2 , 0.3 , 0.3 , 0.2 ],\n", " [0.2 , 0.3 , 0.3 , 0.2 ],\n", " [0.2 , 0.3 , 0.3 , 0.2 ],\n", " [0.2 , 0.3 , 0.3 , 0.2 ],\n", " [0.2 , 0.3 , 0.3 , 0.2 ],\n", " [0.2 , 0.3 , 0.3 , 0.2 ],\n", " [0.2 , 0.3 , 0.3 , 0.2 ],\n", " [0.2 , 0.3 , 0.3 , 0.2 ],\n", " [0.2 , 0.3 , 0.3 , 0.2 ],\n", " [0.2 , 0.3 , 0.3 , 0.2 ]])" ] }, "execution_count": 91, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cobind_probabilistic_motif_in_sequences[\"background_sim_seq_0_SOX17_OCT4_10:25_0\"]" ] }, { "cell_type": "code", "execution_count": 92, "metadata": {}, "outputs": [], "source": [ "cobind_controller.writer.dict_to_fasta(\n", " seq_dict=cobind_motif_in_sequences,\n", " filename=\"cobind_motif_in_seq\")\n", "cobind_controller.writer.save_dictionary_with_numpy_to_npz(\n", " numpy_dict=cobind_probabilistic_motif_in_sequences,\n", " filename=\"cobind_probabilistic_motif_in_seq\")" ] } ], "metadata": { "kernelspec": { "display_name": "inmotifin", "language": "python", "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.12.4" } }, "nbformat": 4, "nbformat_minor": 2 }