{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# sourmash: working with private collections of signatures\n", "\n", "### Running this notebook.\n", "\n", "You can run this notebook interactively via mybinder; click on this button:\n", "[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/dib-lab/sourmash/latest?filepath=doc%2Fsourmash-collections.ipynb)\n", "\n", "A rendered version of this notebook is available at [sourmash.readthedocs.io](https://sourmash.readthedocs.io) under \"Tutorials and notebooks\".\n", "\n", "You can also get this notebook from the [doc/ subdirectory of the sourmash github repository](https://github.com/dib-lab/sourmash/tree/latest/doc). See [binder/environment.yaml](https://github.com/dib-lab/sourmash/blob/latest/binder/environment.yml) for installation dependencies.\n", "\n", "### What is this?\n", "\n", "This is a Jupyter Notebook using Python 3. If you are running this via [binder](https://mybinder.org), you can use Shift-ENTER to run cells, and double click on code cells to edit them.\n", "\n", "Contact: C. Titus Brown, ctbrown@ucdavis.edu. Please [file issues on GitHub](https://github.com/dib-lab/sourmash/issues/) if you have any questions or comments!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## download a bunch of genomes" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "/Users/t/dev/sourmash/doc/big_genomes\n", " % Total % Received % Xferd Average Speed Time Time Time Current\n", " Dload Upload Total Spent Left Speed\n", "100 459 100 459 0 0 750 0 --:--:-- --:--:-- --:--:-- 750\n", "100 61.1M 100 61.1M 0 0 2966k 0 0:00:21 0:00:21 --:--:-- 3496k\n" ] } ], "source": [ "!mkdir -p big_genomes\n", "!curl -L https://osf.io/8uxj9/?action=download | (cd big_genomes && tar xzf -)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## compute signatures for each file" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "/Users/t/dev/sourmash/doc/big_genomes\n", "\u001b[K== This is sourmash version 2.0.0a12.dev48+ga92289b. ==\n", "\u001b[K== Please cite Brown and Irber (2016), doi:10.21105/joss.00027. ==\n", "\n", "\u001b[Ksetting num_hashes to 0 because --scaled is set\n", "\u001b[Kcomputing signatures for files: 0.fa, 1.fa, 10.fa, 11.fa, 12.fa, 13.fa, 14.fa, 15.fa, 16.fa, 17.fa, 18.fa, 19.fa, 2.fa, 20.fa, 21.fa, 22.fa, 23.fa, 24.fa, 25.fa, 26.fa, 27.fa, 28.fa, 29.fa, 3.fa, 30.fa, 31.fa, 32.fa, 33.fa, 34.fa, 35.fa, 36.fa, 37.fa, 38.fa, 39.fa, 4.fa, 40.fa, 41.fa, 42.fa, 43.fa, 44.fa, 45.fa, 46.fa, 47.fa, 48.fa, 49.fa, 5.fa, 50.fa, 51.fa, 52.fa, 53.fa, 54.fa, 55.fa, 56.fa, 57.fa, 58.fa, 59.fa, 6.fa, 60.fa, 61.fa, 62.fa, 63.fa, 7.fa, 8.fa, 9.fa\n", "\u001b[KComputing signature for ksizes: [31]\n", "\u001b[KComputing only nucleotide (and not protein) signatures.\n", "\u001b[KComputing a total of 1 signature(s).\n", "\u001b[K... reading sequences from 0.fa\n", "\u001b[Kcalculated 1 signatures for 1 sequences in 0.fa\n", "\u001b[Ksaved 1 signature(s). Note: signature license is CC0.\n", "\u001b[K... reading sequences from 1.fa\n", "\u001b[Kcalculated 1 signatures for 1 sequences in 1.fa\n", "\u001b[Ksaved 1 signature(s). Note: signature license is CC0.\n", "\u001b[K... reading sequences from 10.fa\n", "\u001b[Kcalculated 1 signatures for 1 sequences in 10.fa\n", "\u001b[Ksaved 1 signature(s). Note: signature license is CC0.\n", "\u001b[K... reading sequences from 11.fa\n", "\u001b[Kcalculated 1 signatures for 1 sequences in 11.fa\n", "\u001b[Ksaved 1 signature(s). Note: signature license is CC0.\n", "\u001b[K... reading sequences from 12.fa\n", "\u001b[Kcalculated 1 signatures for 1 sequences in 12.fa\n", "\u001b[Ksaved 1 signature(s). Note: signature license is CC0.\n", "\u001b[K... reading sequences from 13.fa\n", "\u001b[Kcalculated 1 signatures for 1 sequences in 13.fa\n", "\u001b[Ksaved 1 signature(s). Note: signature license is CC0.\n", "\u001b[K... reading sequences from 14.fa\n", "\u001b[Kcalculated 1 signatures for 1 sequences in 14.fa\n", "\u001b[Ksaved 1 signature(s). Note: signature license is CC0.\n", "\u001b[K... reading sequences from 15.fa\n", "\u001b[Kcalculated 1 signatures for 1 sequences in 15.fa\n", "\u001b[Ksaved 1 signature(s). Note: signature license is CC0.\n", "\u001b[K... reading sequences from 16.fa\n", "\u001b[Kcalculated 1 signatures for 4 sequences in 16.fa\n", "\u001b[Ksaved 1 signature(s). Note: signature license is CC0.\n", "\u001b[K... reading sequences from 17.fa\n", "\u001b[Kcalculated 1 signatures for 2 sequences in 17.fa\n", "\u001b[Ksaved 1 signature(s). Note: signature license is CC0.\n", "\u001b[K... reading sequences from 18.fa\n", "\u001b[Kcalculated 1 signatures for 1 sequences in 18.fa\n", "\u001b[Ksaved 1 signature(s). Note: signature license is CC0.\n", "\u001b[K... reading sequences from 19.fa\n", "\u001b[Kcalculated 1 signatures for 9 sequences in 19.fa\n", "\u001b[Ksaved 1 signature(s). Note: signature license is CC0.\n", "\u001b[K... reading sequences from 2.fa\n", "\u001b[Kcalculated 1 signatures for 1 sequences in 2.fa\n", "\u001b[Ksaved 1 signature(s). Note: signature license is CC0.\n", "\u001b[K... reading sequences from 20.fa\n", "\u001b[Kcalculated 1 signatures for 1 sequences in 20.fa\n", "\u001b[Ksaved 1 signature(s). Note: signature license is CC0.\n", "\u001b[K... reading sequences from 21.fa\n", "\u001b[Kcalculated 1 signatures for 1 sequences in 21.fa\n", "\u001b[Ksaved 1 signature(s). Note: signature license is CC0.\n", "\u001b[K... reading sequences from 22.fa\n", "\u001b[Kcalculated 1 signatures for 1 sequences in 22.fa\n", "\u001b[Ksaved 1 signature(s). Note: signature license is CC0.\n", "\u001b[K... reading sequences from 23.fa\n", "\u001b[Kcalculated 1 signatures for 5 sequences in 23.fa\n", "\u001b[Ksaved 1 signature(s). Note: signature license is CC0.\n", "\u001b[K... reading sequences from 24.fa\n", "\u001b[Kcalculated 1 signatures for 3 sequences in 24.fa\n", "\u001b[Ksaved 1 signature(s). Note: signature license is CC0.\n", "\u001b[K... reading sequences from 25.fa\n", "\u001b[Kcalculated 1 signatures for 1 sequences in 25.fa\n", "\u001b[Ksaved 1 signature(s). Note: signature license is CC0.\n", "\u001b[K... reading sequences from 26.fa\n", "\u001b[Kcalculated 1 signatures for 1 sequences in 26.fa\n", "\u001b[Ksaved 1 signature(s). Note: signature license is CC0.\n", "\u001b[K... reading sequences from 27.fa\n", "\u001b[Kcalculated 1 signatures for 1 sequences in 27.fa\n", "\u001b[Ksaved 1 signature(s). Note: signature license is CC0.\n", "\u001b[K... reading sequences from 28.fa\n", "\u001b[Kcalculated 1 signatures for 3 sequences in 28.fa\n", "\u001b[Ksaved 1 signature(s). Note: signature license is CC0.\n", "\u001b[K... reading sequences from 29.fa\n", "\u001b[Kcalculated 1 signatures for 1 sequences in 29.fa\n", "\u001b[Ksaved 1 signature(s). Note: signature license is CC0.\n", "\u001b[K... reading sequences from 3.fa\n", "\u001b[Kcalculated 1 signatures for 1 sequences in 3.fa\n", "\u001b[Ksaved 1 signature(s). Note: signature license is CC0.\n", "\u001b[K... reading sequences from 30.fa\n", "\u001b[Kcalculated 1 signatures for 1 sequences in 30.fa\n", "\u001b[Ksaved 1 signature(s). Note: signature license is CC0.\n", "\u001b[K... reading sequences from 31.fa\n", "\u001b[Kcalculated 1 signatures for 1 sequences in 31.fa\n", "\u001b[Ksaved 1 signature(s). Note: signature license is CC0.\n", "\u001b[K... reading sequences from 32.fa\n", "\u001b[Kcalculated 1 signatures for 1 sequences in 32.fa\n", "\u001b[Ksaved 1 signature(s). Note: signature license is CC0.\n", "\u001b[K... reading sequences from 33.fa\n", "\u001b[Kcalculated 1 signatures for 1 sequences in 33.fa\n", "\u001b[Ksaved 1 signature(s). Note: signature license is CC0.\n", "\u001b[K... reading sequences from 34.fa\n", "\u001b[Kcalculated 1 signatures for 1 sequences in 34.fa\n", "\u001b[Ksaved 1 signature(s). Note: signature license is CC0.\n", "\u001b[K... reading sequences from 35.fa\n", "\u001b[Kcalculated 1 signatures for 7 sequences in 35.fa\n", "\u001b[Ksaved 1 signature(s). Note: signature license is CC0.\n", "\u001b[K... reading sequences from 36.fa\n", "\u001b[Kcalculated 1 signatures for 1 sequences in 36.fa\n", "\u001b[Ksaved 1 signature(s). Note: signature license is CC0.\n", "\u001b[K... reading sequences from 37.fa\n", "\u001b[Kcalculated 1 signatures for 1 sequences in 37.fa\n", "\u001b[Ksaved 1 signature(s). Note: signature license is CC0.\n", "\u001b[K... reading sequences from 38.fa\n", "\u001b[Kcalculated 1 signatures for 1 sequences in 38.fa\n", "\u001b[Ksaved 1 signature(s). Note: signature license is CC0.\n", "\u001b[K... reading sequences from 39.fa\n", "\u001b[Kcalculated 1 signatures for 1 sequences in 39.fa\n", "\u001b[Ksaved 1 signature(s). Note: signature license is CC0.\n", "\u001b[K... reading sequences from 4.fa\n", "\u001b[Kcalculated 1 signatures for 1 sequences in 4.fa\n", "\u001b[Ksaved 1 signature(s). Note: signature license is CC0.\n", "\u001b[K... reading sequences from 40.fa\n", "\u001b[Kcalculated 1 signatures for 1 sequences in 40.fa\n", "\u001b[Ksaved 1 signature(s). Note: signature license is CC0.\n", "\u001b[K... reading sequences from 41.fa\n", "\u001b[Kcalculated 1 signatures for 1 sequences in 41.fa\n", "\u001b[Ksaved 1 signature(s). Note: signature license is CC0.\n", "\u001b[K... reading sequences from 42.fa\n", "\u001b[Kcalculated 1 signatures for 1 sequences in 42.fa\n", "\u001b[Ksaved 1 signature(s). Note: signature license is CC0.\n", "\u001b[K... reading sequences from 43.fa\n", "\u001b[Kcalculated 1 signatures for 1 sequences in 43.fa\n", "\u001b[Ksaved 1 signature(s). Note: signature license is CC0.\n", "\u001b[K... reading sequences from 44.fa\n", "\u001b[Kcalculated 1 signatures for 2 sequences in 44.fa\n", "\u001b[Ksaved 1 signature(s). Note: signature license is CC0.\n", "\u001b[K... reading sequences from 45.fa\n", "\u001b[Kcalculated 1 signatures for 1 sequences in 45.fa\n", "\u001b[Ksaved 1 signature(s). Note: signature license is CC0.\n", "\u001b[K... reading sequences from 46.fa\n", "\u001b[Kcalculated 1 signatures for 1 sequences in 46.fa\n", "\u001b[Ksaved 1 signature(s). Note: signature license is CC0.\n", "\u001b[K... reading sequences from 47.fa\n", "\u001b[Kcalculated 1 signatures for 2 sequences in 47.fa\n", "\u001b[Ksaved 1 signature(s). Note: signature license is CC0.\n", "\u001b[K... reading sequences from 48.fa\n", "\u001b[Kcalculated 1 signatures for 1 sequences in 48.fa\n", "\u001b[Ksaved 1 signature(s). Note: signature license is CC0.\n", "\u001b[K... reading sequences from 49.fa\n", "\u001b[Kcalculated 1 signatures for 228 sequences in 49.fa\n", "\u001b[Ksaved 1 signature(s). Note: signature license is CC0.\n", "\u001b[K... reading sequences from 5.fa\n", "\u001b[Kcalculated 1 signatures for 1 sequences in 5.fa\n", "\u001b[Ksaved 1 signature(s). Note: signature license is CC0.\n", "\u001b[K... reading sequences from 50.fa\n", "\u001b[Kcalculated 1 signatures for 1 sequences in 50.fa\n", "\u001b[Ksaved 1 signature(s). Note: signature license is CC0.\n", "\u001b[K... reading sequences from 51.fa\n", "\u001b[Kcalculated 1 signatures for 1 sequences in 51.fa\n", "\u001b[Ksaved 1 signature(s). Note: signature license is CC0.\n", "\u001b[K... reading sequences from 52.fa\n", "\u001b[Kcalculated 1 signatures for 1 sequences in 52.fa\n", "\u001b[Ksaved 1 signature(s). Note: signature license is CC0.\n", "\u001b[K... reading sequences from 53.fa\n", "\u001b[Kcalculated 1 signatures for 1 sequences in 53.fa\n", "\u001b[Ksaved 1 signature(s). Note: signature license is CC0.\n", "\u001b[K... reading sequences from 54.fa\n", "\u001b[Kcalculated 1 signatures for 1 sequences in 54.fa\n", "\u001b[Ksaved 1 signature(s). Note: signature license is CC0.\n", "\u001b[K... reading sequences from 55.fa\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[Kcalculated 1 signatures for 1 sequences in 55.fa\n", "\u001b[Ksaved 1 signature(s). Note: signature license is CC0.\n", "\u001b[K... reading sequences from 56.fa\n", "\u001b[Kcalculated 1 signatures for 1 sequences in 56.fa\n", "\u001b[Ksaved 1 signature(s). Note: signature license is CC0.\n", "\u001b[K... reading sequences from 57.fa\n", "\u001b[Kcalculated 1 signatures for 1 sequences in 57.fa\n", "\u001b[Ksaved 1 signature(s). Note: signature license is CC0.\n", "\u001b[K... reading sequences from 58.fa\n", "\u001b[Kcalculated 1 signatures for 30 sequences in 58.fa\n", "\u001b[Ksaved 1 signature(s). Note: signature license is CC0.\n", "\u001b[K... reading sequences from 59.fa\n", "\u001b[Kcalculated 1 signatures for 5 sequences in 59.fa\n", "\u001b[Ksaved 1 signature(s). Note: signature license is CC0.\n", "\u001b[K... reading sequences from 6.fa\n", "\u001b[Kcalculated 1 signatures for 76 sequences in 6.fa\n", "\u001b[Ksaved 1 signature(s). Note: signature license is CC0.\n", "\u001b[K... reading sequences from 60.fa\n", "\u001b[Kcalculated 1 signatures for 11 sequences in 60.fa\n", "\u001b[Ksaved 1 signature(s). Note: signature license is CC0.\n", "\u001b[K... reading sequences from 61.fa\n", "\u001b[Kcalculated 1 signatures for 47 sequences in 61.fa\n", "\u001b[Ksaved 1 signature(s). Note: signature license is CC0.\n", "\u001b[K... reading sequences from 62.fa\n", "\u001b[Kcalculated 1 signatures for 1 sequences in 62.fa\n", "\u001b[Ksaved 1 signature(s). Note: signature license is CC0.\n", "\u001b[K... reading sequences from 63.fa\n", "\u001b[Kcalculated 1 signatures for 4 sequences in 63.fa\n", "\u001b[Ksaved 1 signature(s). Note: signature license is CC0.\n", "\u001b[K... reading sequences from 7.fa\n", "\u001b[Kcalculated 1 signatures for 3 sequences in 7.fa\n", "\u001b[Ksaved 1 signature(s). Note: signature license is CC0.\n", "\u001b[K... reading sequences from 8.fa\n", "\u001b[Kcalculated 1 signatures for 1 sequences in 8.fa\n", "\u001b[Ksaved 1 signature(s). Note: signature license is CC0.\n", "\u001b[K... reading sequences from 9.fa\n", "\u001b[Kcalculated 1 signatures for 3 sequences in 9.fa\n", "\u001b[Ksaved 1 signature(s). Note: signature license is CC0.\n" ] } ], "source": [ "!cd big_genomes/ && sourmash compute -k 31 --scaled=1000 --name-from-first *.fa" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Compare them all" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[K== This is sourmash version 2.0.0a12.dev48+ga92289b. ==\n", "\u001b[K== Please cite Brown and Irber (2016), doi:10.21105/joss.00027. ==\n", "\n", "\u001b[Kloaded 64 signatures total. \n", "\u001b[Kdownsampling to scaled value of 1000\n", "\u001b[K\n", "min similarity in matrix: 0.000\n", "\u001b[Ksaving labels to: compare_all.mat.labels.txt\n", "\u001b[Ksaving distance matrix to: compare_all.mat\n", "\u001b[K== This is sourmash version 2.0.0a12.dev48+ga92289b. ==\n", "\u001b[K== Please cite Brown and Irber (2016), doi:10.21105/joss.00027. ==\n", "\n", "\u001b[Kloading comparison matrix from compare_all.mat...\n", "\u001b[K...got 64 x 64 matrix.\n", "\u001b[Kloading labels from compare_all.mat.labels.txt\n", "\u001b[Ksaving histogram of matrix values => compare_all.mat.hist.png\n", "\u001b[Kwrote dendrogram to: compare_all.mat.dendro.png\n", "\u001b[Kwrote numpy distance matrix to: compare_all.mat.matrix.png\n" ] } ], "source": [ "!sourmash compare big_genomes/*.sig -o compare_all.mat\n", "!sourmash plot compare_all.mat" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABEwAAAMgCAYAAAA5kPcVAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4wLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvqOYd8AAAIABJREFUeJzs3XuQVfWdLu53d9MNNHhJxAsQ0BATbyRhkohHDWImwdscfo6aRGMVXio6Xo8aLzGeMYOmvSRjdMyceKlkJMRyDqMYT5hTGGXUMIAX0FQ6J6PjheMAKSeAHANNAEGa/v1BQmSpDa27Wd3L50mtyu69Vy/eTtUim7e/+/updXZ2dgYAAACALRrKDgAAAADQ2yhMAAAAAAoUJgAAAAAFChMAAACAAoUJAAAAQIHCBAAAAKBAYQIAAABQoDABAAAAKFCYAAAAABQoTAAAAAAKFCYAAAAABQoTAAAAgAKFCQAAAECBwgQAAACgQGECAAAAUKAwAQAAAChQmAAAAAAUKEwAAAAAChQmAAAAAAUKEwAAAIAChQkAAABAgcIEAAAAoEBhAgAAAFCgMAEAAAAoUJgAAAAAFChMAAAAAAoUJgAAAAAFChMAAACAAoUJAAAAQIHCBAAAAKBAYQIAAABQoDABAAAAKFCYAAAAABQoTAAAAAAKFCYAAAAABQoTAAAAgAKFCQAAAECBwgQAAACgQGECAAAAUKAwAQAAAChQmAAAAAAUKEwAAAAAChQmAAAAAAUKEwAAAIAChQkAAABAgcIEAAAAoEBhAgAAAFCgMAEAAAAoUJgAAAAAFChMAAAAAAoUJgAAAAAFChMAAACAAoUJAAAAQIHCBAAAAKBAYQIAAABQoDABAAAAKFCYAAAAABQoTAAAAAAKFCYAAAAABQoTAAAAgAKFCQAAAECBwgQAAACgQGECAAAAUKAwAQAAAChQmAAAAAAUKEwAAAAAChQmAAAAAAUKEwAAAIAChQkAAABAgcIEAAAAoEBhAgAAAFCgMAEAAAAoUJgAAAAAFChMAAAAAAoUJgAAAAAFChMAAACAAoUJAAAAQIHCBAAAAKBAYQIAAABQoDABAAAAKFCYAAAAABQoTAAAAAAKFCYAAAAABQoTAAAAgAKFCQAAAECBwgQAAACgQGECAAAAUKAwAQAAAChQmAAAAAAUKEwAAAAAChQmAAAAAAUKEwAAAIAChQkAAABAgcIEAAAAoEBhAgAAAFCgMAEAAAAoUJgAAAAAFChMAAAAAAoUJgAAAAAFChMAAACAAoUJAAAAQIHCBAAAAKBAYQIAAABQoDABAAAAKFCYAAAAABQoTAAAAAAKFCYAAAAABQoTAAAAgAKFCQAAAECBwgQAAACgQGECAAAAUKAwAQAAAChQmAAAAAAUKEwAAAAAChQmAAAAAAUKEwAAAIAChQkAAABAgcIEAAAAoEBhAgAAAFCgMAEAAAAoUJgAAAAAFChMAAAAAAoUJgAAAAAFChMAAACAAoUJAAAAQIHCBAAAAKBAYQIAAABQoDABAAAAKFCYAAAAABQoTAAAAAAKFCYAAAAABQoTAAAAgAKFCQAAAECBwgQAAACgQGECAAAAUKAwAQAAAChQmAAAAAAUKEwAAAAAChQmAAAAAAUKEwAAAIAChQkAAABAgcIEAAAAoEBhAgAAAFCgMAEAAAAoUJgAAAAAFChMAAAAAAoUJgAAAAAFChMAAACAAoUJAAAAQIHCBAAAAKBAYQIAAABQoDABAAAAKFCYAAAAABQoTAAAAAAKFCYAAAAABQoTAAAAgAKFCQAAAECBwgQAAACgQGECAAAAUKAwAQAAAChQmAAAAAAUKEwAAAAAChQmAAAAAAUKEwAAAIAChQkAAABAgcIEAAAAoEBhAgAAAFCgMAEAAAAoUJgAAAAAFChMAAAAAAoUJgAAAAAFChMAAACAAoUJAAAAQIHCBAAAAKBAYQIAAABQoDABAAAAKFCYAAAAABQoTAAAAAAKFCYAAAAABQoTAAAAgAKFCQAAAECBwgQAAACgQGECAAAAUKAwAQAAAChQmAAAAAAUKEwAAAAAChQmAAAAAAUKEwAAAIAChQkAAABAgcIEAAAAoEBhAgAAAFCgMAEAAAAoUJgAAAAAFChMAAAAAAoUJgAAAAAFChMAAACAAoUJAAAAQIHCBAAAAKBAYQIAAABQoDABAAAAKFCYAAAAABQoTAAAAAAKFCYAAAAABQoTAAAAgAKFCQAAAECBwgQAAACgQGECAAAAUKAwAQAAAChQmAAAAAAUKEwAAAAAChQmAAAAAAUKEwAAAIAChQkAAABAgcIEAAAAoEBhAgAAAFCgMAEAAAAoUJgAAAAAFChMAAAAAAoUJgAAAAAFChMAAACAAoUJAAAAQIHCBAAAAKBAYQIAAABQoDABAAAAKFCYAAAAABQoTAAAAAAKFCYAAAAABQoTAAAAgAKFCQAAAECBwgQAAACgQGECAAAAUKAwAQAAAChQmAAAAAAUKEwAAAAAChQmAAAAAAUKEwAAgD5uzpw5mThxYoYNG5ZarZaf/vSn2/ye2bNn51Of+lT69++ffffdN1OnTu35oNCHKEwAAAD6uDVr1uSTn/xkbrvttu06/z/+4z/yF3/xF/nc5z6Xtra2XHLJJTnrrLPy8MMP93BS6DtqnZ2dnWWHAAAAoD5qtVr+1//6X/nLv/zLdzznyiuvzMyZM/Nv//ZvW5475ZRTsnLlyjz00EM7Iib0ev3KDsBmmzZtyn/+539mp512Sq1WKzsOVFpnZ2dWr16dYcOGpaGh5xfaub8BoG/p7nuF119/PRs2bOiRHMX3Dv3790///v3f87WffPLJfOELX9jquaOPPjqXXHLJe742VIXCpJf4z//8z4wYMaLsGPC+8pvf/CYf+tCHujznySefzFVXXZVk8336F3/xF/m7v/u7bv057m8A6Ju2573C66+/noGDPpBser3uf/7gwYPz+9//fqvnJk+enGuuueY9X3vp0qXZc889t3puzz33THt7e9atW5eBAwe+5z8D+jqFSS+x0047Jdn8l/LOO+9cchqotvb29owYMWLLfdeVQw89NLNnz06SnHHGGV0ubX0nf7q//zU77zy4298PANTfHgfe8I6vdW56Ixt++8/b9V5hw4YNyabX03/o/5c0NNUv4KY38vvf/vNb/n1Qj9UlwPZRmPQSf1xqt/POO7+rwqSzM1m7tt6poJoaGzf/d3c+HrNhw4YsWLAgU6ZM6faf96f7e7DCBAB6idp2lBvdea9Qa+y/XdfcXp21zR8Ferf/PtiWvfbaK8uWLdvquWXLlmXnnXe2ugT+QGFSAZ2dyWc/mzzxRNlJoLoeeeSRfP7zn98he54AAPS0Qw89NA8++OBWz/3Lv/xLDj300JISQe/jnX8FrF2rLIGeNn369HzpS18qOwYA0EvVUkstDXU8urdR/O9///u0tbWlra0tyeaxwW1tbVmyZEmS5Kqrrsppp5225fxzzz03L7/8cr7+9a/n+eefz+2335777rsvX/va1+r3Pwr0cVaYVMyyZcmgQWWngN6tvT0ZNmz7z3/jjTfy9NNP56677uq5UAAA78EzzzyTz33uc1u+vvTSS5Mkp59+eqZOnZrf/va3W8qTJPnwhz+cmTNn5mtf+1q+973v5UMf+lD+4R/+IUcfffQOzw69lcKkYgYNUpjAtnR0dO/8Rx55JH/+53/u4zgAwDuq1RpSq9XxvUI3r3XkkUems7PzHV+fOnXq237PL3/5y+4mg/cNhQnANhx77LE59thjy44BAADsQAqTClizZuvHVphAfa1atSoTJkzIc889l6eeeiqjR48uOxIAsB0Gjpz8jq+tW3LtO77W3v777LLLT7r1Z5W9wgSoP4VJxaxZs3WBArxVd++RlpaWzJw5M1dccUXPBAIAAHodhUnFjBpVdgKonqampuy+++5lxwAAerFarZZarXuTbbZxwfpdC3hXrPOqgJaWshMAAABAtVhhUgFvLp+NFYZt6+5YYQCAbWtIfX8f7XfbUDaFSQUU92NQmEDXujtWGAAAeP9RmABsh+OOOy5tbW154YUXcs455+SMM84oOxIA0IuYkgPVozAB2IZVq1ZlxYoVaW9vzw9/+MOMHj0606dPz9/93d9l4MCB+fGPf5wPfehDZccEgPedrsYGJ12PDq43hQlUj7sQYBv+OFb4i1/8YpJk48aNueWWWzJ79ux861vfSmtra8kJAQCAerPCpGLWrHnrnibA1rp7jxTHCr/00ks54IAD0tzcnMMPPzyXX355nRMCAH1NLQ2p2fQVKkVhUjGjRpWdAKrvd7/7XXbeeectX3fYRRYAACpHYVIBLS1lJ4D3l1133TXt7e1bvm5sbCwxDQDQG9jDBKpHYVIBa9f+6fHLLyd77FFeFugL2tuTYcPe/fd/9KMfzb//+79nw4YNeeaZZ/KJT3yifuEAAIBeQWFSMYMGbT6Ad/ZuPkFTHCt8ySWX5Mgjj8yAAQPy4x//uP4hAYA+pZY6rzCxhwmUTmECsB0efPDBtzx38sknl5AEAADYERQmANuwatWqTJgwIc8991yeeuqp7L333jn++OOzcePG9OvXLz/60Y+y9957lx0TACpn4MjJXb6+bsm1OyjJdqjV6rrCpLNWq9u1gHdHYVIxxgrDtnX3HmlpacnMmTNzxRVXJNk8Zviee+7JsGHD8vDDD+emm27K97///R5ICgAAlEVhUjHGCkP9NTU1Zffdd9/y9YABAzLsD7vGNjc3p6HBZ4wB4P2u9of/1PN6QLkUJhVgrDCUY8OGDbnmmmvyD//wD2VHAQAA6kxhUgHGCkP3vNexwn/0V3/1Vzn//PPz0Y9+9L1fDADo02q1+k7Jqe/EHeDdUJhUjLHCsG3vZqxw0bXXXptRo0aZlAMAABWlMAHYDscdd1za2trywgsv5Ljjjktra2s++9nP5rHHHsuhhx6aG2+8seyIAECJrDCB6lGYAGzDqlWrsmLFirS3t+eHP/xhRo8enTPPPDPnn39+Vq9enebm5rIjAkCf1KfGBm+DwgSqR2ECsA3FscJJcsUVV+SOO+7I8OHDS0wGAAD0FIVJxaxZs/kA3ll375HiWOE33ngjixYtymWXXZbly5fnuuuuy2GHHVbnlABA39Lwh6Oe1wPKpDCpmFGjyk4A1bdixYq0tbXl3nvvTXNzcyZOnJinn3667FgAAEAdKUwqoLOz7ATw/rLrrrtm3333zciRI5NsXoGycePG9Ovnr1QAeL+yhwlUj3f3FVCr/enxyy8ne+xRXhboC9rbk2HD3v33Dxw4MLvttltWrlyZpqamrF+/XlkCAAAV4x1+xQwatPkA3llHR/e/581jhc8555zccMMNmThxYjZs2JBrr+07O/gDAD3DChOoHoUJwHZ48MEH3/Lc3LlzS0gCAADsCAoTgG1YtWpVJkyYkOeeey5PPfVURo8enZtvvjkPPPBABg8enKlTp2bo0KFlxwSAXmngyMnv+Nq6JdVZpVlLQ2p1nGxTz2sB747CpGKMFYZt6+490tLSkpkzZ+aKK65IkixdujQzZ87MvHnz8vTTT6e1tTW33357DyQFAADKojCpGGOFof6ampqy++67b/l68eLFOeigg1Kr1fKpT30qX/3qV0tMBwD0BrVarc57mNS2fRLQoxQmFWCsMOxYH/nIR/LMM89k/fr1+fnPf57XXnut7EgAAECdKUwqwFhh6J73OlZ4yJAhOe+883LUUUdlzJgx2X///esXDgDokzavMKnfqhArTKB8CpOKMVYYtu3djBUuOu2003Laaadl9uzZGTJkyHu/IAAA0KsoTAC2w3HHHZe2tra88MILOeecc/LQQw9l+fLl2XvvvXPbbbeVHQ8AKFmt1lDnPUxMyYGyKUwAurBgwYJcfPHFaWpqyvjx43P33XfnlFNOyYoVK/L666/nzDPPTEtLS9kxAaA0XY0NTqo1OrgrxgpD9ShMALowYsSIPPbYYxk4cGCuuuqqzJgxI9OmTUtzc3MWLVqUs846K4888kjZMQEAgDpTmFTMmjWbD+CddeceGTp06JbHzc3NaWhoSHNzc5Jk9erVGT16dL3jAQB9kI/kQPUoTCpm1KiyE0A1LV68OLNmzcrVV1+dJDniiCPy4osv5u677y45GQAA0BMUJhXQ2Vl2Aqi29vb2TJo0KVOnTk1TU1OSZM6cOVmyZEmOP/74HHXUUSUnBADKZoUJVI/CpALePKL95ZeTPfYoLwv0Be3tybBh23fuxo0bc8opp2Ty5MnZb7/90tnZmY0bN6apqSmDBw/O4MGDezYsAABQCoVJxQwatPkA3llHx/afO23atMyfPz+tra1pbW3NmWeemR/96Ed/uE5Hbrjhhh5KCQD0JabkQPUoTAC6MGnSpEyaNGmr504//fSS0gAAADuKwgSgCwsWLMjFF1+cpqamDB8+PHfffXeWLVuW888/P6tXr84RRxyRa6+9tuyYANBjBo6c3OXr65b4/8EkSa1h81HP6wGlUphUjLHCsG3duUdGjBiRxx57LAMHDsxVV12VGTNm5Cc/+UnuuOOODB8+vOdCAgAApVKYVIyxwlBfQ4cO3fK4ubk5HR0dWbRoUS677LIsX7481113XQ477LASEwIAvYEpOVA9CpMKMFYYet7ixYsza9asnHXWWTnjjDNy7733prm5ORMnTszTTz9ddjwAAKDOFCYVYKwwdE93xgpvPr89kyZNytSpUzNkyJDsu+++GTlyZJKkqakpGzduTL9+/joFgPezWq2W2pvfmNfhekC5vMOvGGOFYdu6M1Z448aNOeWUUzJ58uTst99+SZLddtstK1euTFNTU9avX68sAQCACvLBOIAuTJs2LfPnz09ra2uOPPLI3HvvvbnhhhsyceLE/Pmf/7kJOQBAkqSWWmppqONhhQmUza9FAbqw33775WMf+1g2bdqU4cOH57jjjsvEiRPT2NiYzs7OfPOb38x//a//teyYAPCuGRtcJ3Xe9NVYYSifwgSgC8Wxwg8//HBmz56dJJk6dWoWL15cbkAAAKBHKEwqZs2azQfwzrpzjxTHCjc0/Om3PdOnT893v/vdekYDAPqqWm3raQz1uB5QKoVJxYwaVXYCqKY/jhW++uqrkyQrV67M0qVLc8ABB5ScDAAA6AkKkwro7Cw7AVTbm8cKNzU1JUlmzJiR448/vuRkAECvUUt9R2psquO1gHdFYVIBb16t9/LLyR57lJcF+oL29mTYsO079+3GCic+jgMAAFWnMKmYQYM2H8A76+jY/nPfPFa4tbU15513Xo455pgsXbo0+++/f8+FBAD6FnuYQOUoTAC6MGnSpEyaNOktzz/zzDMlpAEAAHYUhQlAF5YtW5YTTjghTU1NaWxszD/+4z/miSeeyLe//e00NDRk0qRJufDCC8uOCQBdGjhy8ju+tm7JtTswSYVZYQKVozCpGGOFYdu6c48MGTIk8+bNS0NDQ6ZOnZq77rorM2bMyKOPPprBgwdnzJgxOf/887caNwwAAPR9CpOKMVYY6quxsXHL49WrV+eggw7K888/n/b29vTr1y8DBw5UlgAAmyfk1PMtgbcXUDqFSQUYKww9q62tLeecc05WrlyZWbNmpV+/fhk7dmwaGxtz9dVXlx0PAADoAQqTCjBWGLqnO2OFk2TMmDGZP39+7rvvvtx4442ZO3dufv3rX2fw4MH5/Oc/ny9/+cv5wAc+0HOBAYDer1ZLpz1MoFIUJhVjrDBsW3fGCm/YsCHNzc1Jkl122SUtLS1pbm7OTjvtlObm5vTr1y+vv/56DyUFAADKojAB6EJbW1suv/zyNDY2ZsCAAZkyZUr+7M/+LJ/97GfT2NiYCRMmZOjQoWXHBADKVvvDUc/rAaVSmAB0YezYsZkzZ06mTZuWiy66KEOHDs3nPve5TJ8+PatXr07NclkAeoGuxgYnRgfvEA21zUc9rweUSmECsA0dHR2ZPn16RowYkSS54oorcscdd2T48OElJwMAAHqKwqRi1qzZfADvrLv3yLRp0/KlL30pN998c954440sWrQol112WZYvX57rrrsuhx12WM8EBQD6jlqtvhu1WsUKpVOYVMyoUWUngGrp6OjIfffdl5/+9Ke5+eabs2LFirS1teXee+9Nc3NzJk6cmKeffrrsmAAAQJ0pTCqgs7PsBFBd99xzT7785S+noaEhSbLrrrtm3333zciRI5MkTU1N2bhxY/r189cpALyv2fQVKsc7/Ap482q9l19O9tijvCzQF7S3J8OGbd+5zz33XH75y1/mnnvuyUsvvZQrr7wyu+22W1auXJmmpqasX79eWQIAABXkXX7FDBq0+QDeWUfH9p/7ne98Z8vjz3zmM/n7v//7PPHEE5k4cWI2bNiQa681dQAAiCk5UEEKE4Dt9MwzzyRJDjvssMydO7fkNAAAQE9SmAB0YdGiRTn44INz0EEHJUmmT5+ec889NytWrMjrr7+em266KUcccUTJKQGouoEjJ3f5+rolVjyWzpQcqByFScUYKwzb1t17ZPz48bn//vu3fD1t2rQ0Nzdn0aJFOeuss/LII4/UOSEAAFA2hUnFGCsM9ff4449n3LhxGTduXK6//vo0NzcnSVavXp3Ro0eXnA4A6BVMyYHKaSg7AO+dscLQc4YOHZqFCxdmzpw5Wb58eR544IEkyRFHHJEJEybkuOOOKzkhAADQE6wwqQBjhaF7ujNWuH///unfv3+S5MQTT8xTTz2Vk046KXPmzMmSJUty/PHH56ijjurBtABAn2BKDlSOwqRijBWGbevOWOHVq1dnp512SpLMnTs3+++/f9544400NTVl8ODBGTx4cA+lBAAAyqQwAejCvHnzcvXVV6elpSUf/vCH89d//deZMGFCkqSjoyM33HBDyQkBgF7BHiZQOQoTgC4ccMABWbJkSQ466KAsWbIk69aty8SJE/PAAw9k8ODB2XfffcuOCEAFGBvc93Wmls46jgLu1JhA6Wz6CrAN48ePz+zZszN79ux0dHRk5syZmTdvXlpbW9Pa2lp2PAAAoAdYYVIxa9ZsPoB31t175M1jhY8//vgcdNBBqdVq+dSnPpWvfvWrPRMSAOhbesGmr7fddltuuummLF26NJ/85CfzP/7H/8jYsWPf8fxbb701d9xxR5YsWZIhQ4bki1/8Ym688cYMGDDgvSSHylCYVMyoUWUngGr541jhlpaWnH322Vm0aFGeeeaZrF+/Pj//+c/z2muvlR0RACD33ntvLr300tx555055JBDcuutt+boo4/OCy+8kD3eZozm//yf/zPf+MY3MmXKlBx22GF58cUXc8YZZ6RWq+WWW24p4SeA3sdHciqgpaXsBFBd/fv3z6BBg1Kr1XLiiSfm2WefzXnnnZejjjoqP/vZz7L//vuXHREA6A1qPXB0wy233JKzzz47Z555Zg488MDceeedaWlpyZQpU972/CeeeCKHH354Tj311Oyzzz456qij8pWvfCULFizo5g8O1WWFSQW8eW+pZcuMFYZtaW9Phg3bvnOLY4UPOOCAnHbaaTnttNMye/bsDBkypAeTAgDvd+3t7Vt93b9///Tv33+r5zZs2JBf/OIXueqqq7Y819DQkC984Qt58skn3/a6hx12WO65554sWLAgY8eOzcsvv5wHH3wwkyZNqv8PAX2UwqRiBg1SmMC2dHRs/7nFscKtra055ZRTsnz58uy999657bbbei4oANB31Gpb/yazHtdLMmLEiK2enjx5cq655pqtnluxYkU6Ojqy5557bvX8nnvumeeff/5tL3/qqadmxYoV+exnP5vOzs5s3Lgx5557bv77f//v9fsZoI9TmAB04dhjj82xxx671XP/9E//VFIaAOD95je/+U123nnnLV8XV5e8W7Nnz84NN9yQ22+/PYccckgWLlyYiy++OK2trfnmN79Zlz8D+jqFCUAXFi1alIMPPjgHHXRQkmT69OlZv359zj///KxevTpHHHFErr322pJTAtAXDBw5+R1fW7fE/5f0eT00JWfnnXfeqjB5O0OGDEljY2OWLVu21fPLli3LXnvt9bbf881vfjOTJk3KWWedlST5+Mc/njVr1uSv/uqv8td//ddpaLDdJShMKsZIYdi27t4n48ePz/3337/l66985Su54447Mnz48DonAwDovubm5nz605/Oo48+mr/8y79MkmzatCmPPvpoLrzwwrf9nrVr176lFGlsbEySdHZ29mxg6CMUJhXw5r/PCh9bBOrg8ccfz7hx4zJu3Lhce+21WbRoUS677LIsX7481113XQ477LCyIwIAZXsXk222eb1uuPTSS3P66afnM5/5TMaOHZtbb701a9asyZlnnpkkOe200zJ8+PDceOONSZKJEyfmlltuyZ/92Z9t+UjON7/5zUycOHFLcQLvdwqTCli7tuwEUF1Dhw7NwoUL09LSkrPPPjv33Xdf2tracu+996a5uTkTJ07M008/XXZMAOB97uSTT86rr76av/mbv8nSpUszZsyYPPTQQ1s2gl2yZMlWK0quvvrq1Gq1XH311XnllVey++67Z+LEibn++uvL+hGg11GYVMzLLyd77FF2CujdujNW+M2j+0488cT8/Oc/z7777puRI0cmSZqamrJx48b06+evUwB4X+uhKTndceGFF77jR3Bmz5691df9+vXL5MmTM3nyO++tA+933uFXjLHCsG3dGSu8evXq7LTTTkmSuXPn5uMf/3iefvrprFy5Mk1NTVm/fr2yBAAAKsi7fIAuzJs3L1dffXVaWlry4Q9/OK2trdl3330zceLEbNiwwYQcAGCzXrDCBKgvhUkFvHnihyk5UF+77bZbmpubU6vV8sYbb6SzszOvvPJKOjo6Mnjw4IwZM6bsiAD0El2NDU6MDq68hj8c9bweUCq3IUAXRowYkcceeyxz5szJPvvskxkzZuSWW27J7Nmz861vfSutra1lRwQAAHqAFSYVs3atVSawLd25R4YOHbrlcXNzc1544YUccMABaW5uzuGHH57LL7+8BxICAH1OLXX+SE79LgW8OwqTihk9uuwEUE2LFy/OrFmz8u1vfzuvvvrqluc7urM50BhWAAAgAElEQVSDLAAA0GcoTCqgpaXsBFBt7e3tmTRpUqZOnZqOjo60t7dvea2xsbHEZABAr1FLfVeFWGECpVOYVMCbV/69/HKyxx7lZYG+oL09GTZs+87duHFjTjnllEyePDn77bdf3njjjfz7v/97NmzYkGeeeSaf+MQnejYsAABQCoVJBRT3Yxg0qJwc0Fd051M006ZNy/z589Pa2prW1tacd955ueSSS3LkkUdmwIAB+fGPf9xzQQGAPqOzoZbOhvotC6nntYB3R2EC0IVJkyZl0qRJb3n+5JNPLiENAACwoyhMKmDt2rd/DNTH7Nmz09ramk2bNuWiiy7K/Pnzc/fdd+fUU0/Nd7/73bLjAbCDDBw5ucvX1y25dgcloVeq1eo8JccKEyibwqRijBWGbevOPbJu3brcfPPN+dnPfpbm5uYkyaGHHpqjjz46M2fO7KGEAABA2RQmFTN2bNkJoFqefPLJDBw4MBMnTkxLS0vuuOOO7LXXXnn++efLjgYA9Cam5EDlNJQdgPdu4MCyE0B1LVu2LAsXLsz//t//O2effXauueaasiMBAAA7gBUmFbBu3Z8eL1iQHHhgeVmgL+jOWOFdd901hx9+eJqbm/P5z38+N954Y8+GAwD6plotqedkG3uYQOkUJhXT0mKsMGxLd8YKH3zwwbn55pvT2dmZtra2jBo1queCAQAAvYbCBKALQ4YMyQknnJDx48enVqtlypQp+d73vpe77747K1asyCuvvJJp06aVHRMAKJspOVA5ChOALmzatClPP/10Ojs7s2nTprzxxhu5+OKLc/HFF5cdDYA6MzaY98Smr1A5Nn0F6EJbW1vWr1+fuXPn5sYbb8wtt9xSdiQAAGAHsMKkYtauTdasKTsF9G7duUc+9KEPpbOzM52dnfnd736XIUOG9FwwAKDvaqjzpq/1vBbwrihMKmbs2LITQLUMGTIkTU1N2X///fP666/n8ccfLzsSAACwA/hITgV0dpadAKpr1qxZ6devX1544YX85Cc/yWWXXVZ2JACgN/rjCpN6HkCprDCpgDdvoL1gQXLggeVlgb6gvT0ZNmz7zu3s7Mxuu+2WZPNqk1WrVvVgMgAAoLdQmFRMS0syaFDZKaB36+jY/nMnTJiQqVOnZvz48Vm/fr1NXwGAt9VZ23zU83pAuRQmAF3o169f7r333rJjAAAAO5jCBKALy5YtywknnJCmpqY0NjbmH//xHzN79ux873vfy4ABA3L77bfnQJ+DA+gzBo6c/I6vrVty7Q5MQuWYkgOVozCpGGOFYdu6c48MGTIk8+bNS0NDQ6ZOnZof/OAHmTFjRubPn5/ly5fnggsuyE9/+tOeCwsAAJRCYVIxxgpDfTU2Nm55vHr16uy///555pln0tTUlOHDh+f5558vMR0A0GvUaltPY6jH9YBSGStcAcYKQ89qa2vLIYccku9///v5L//lv+Q3v/lNVq1alWeffTYLFy7MG2+8UXZEAACgzqwwqQBjhaF7ujNWOEnGjBmT+fPn57777suNN96Yb3/72zn++OOz995755BDDklTU1PPhQUA+gZ7mEDlKEwqxlhh2LbujBXesGFDmpubkyS77LJLWlpacswxx+SYY47Jiy++aMwwAABUlMIEoAttbW25/PLL09jYmAEDBmTKlCm55JJL8n/+z//JBz/4wdx5551lRwQAeoOG1HfDA5snQOkUJhWwdu3bPwbeu7Fjx+Zb3/pWWltb8/rrr+epp57KrbfeWnYsAN5BV2ODE6OD6UE2fYXKUZgAdGHdunW5+eab87Of/WzLR3MAAIDqU5hUzLp1yZo1ZaeA3q0798iTTz6ZgQMHZuLEiWlpackdd9yRvfbaq+fCAQB9k01foXIUJhUzfnzZCaBali1bloULF+app57KI488kmuuuca+JQAA8D5gK6EK2G23shNAde266645/PDD09zcnM9//vN59tlny44EAPRCnamls1bHI1aYQNmsMKmAN+8H9W//luyzT2lRoE9ob0+GDdu+cw8++ODcfPPN6ezsTFtbW0aNGtWz4QAAgF5BYVIxLS3JoEFlp4De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+fNz33335frrr097e/uW1zZu3KgsAQBMFYYKUphUwJvHCi9YkBx4YHlZoC9ob0+GDdu+c9+8emSXXXbJ4MGDs3HjxqxcuTKrV6/OBz/4wR5MCgAAlEVhUjEtLcmgQWWngN6to2P7z21ra8vll1+exsbGDBgwIFOmTMlLL72U4447LrVaLbfffnvPBQUA+gwrTKB66rktEUDljB07NnPmzMnPf/7z/OxnP8vQoUNzxBFH5Iknnsjjjz+eT37yk2VHBABIktx2223ZZ599MmDAgBxyyCFZsGBBl+evXLkyF1xwQYYOHZr+/fvnYx/7mOl/8CZWmABsh2nTpuWiiy7Kq6++WnYUgLoYOHJyl6+vW3Ltu752reZ3crz/1Gq11Oq4LKS717r33ntz6aWX5s4778whhxySW2+9NUcffXReeOGF7LHHHm85f8OGDZkwYUL22GOP3H///Rk+fHgWL16cXXfdtV4/AvR5CpOKWbvWWGHYlu7eIx0dHZk+fXpGjBjRM4EAAN6jW265JWeffXbOPPPMJMmdd96ZmTNnZsqUKfnGN77xlvOnTJmS1157LU888USampqSJPvss8+OjAy9nsKkYsaOLTsBVM+0adPypS99KTfffHPZUQCAXqrMPUw2bNiQX/ziF7nqqqu2PNfQ0JAvfOELefLJJ9/2e/75n/85hx56aC644ILMmDEju+++e0499dRceeWVaWxsfK/xoRKsl6yAgQPLTgDV1dHRkfvuuy8nn3xy2VEAgPeh9vb2rY7169e/5ZwVK1ako6Mje+6551bP77nnnlm6dOnbXvfll1/O/fffn46Ojjz44IP55je/mZtvvjnXXXddj/wc0BdZYVIB69b96bGxwrBt3RkrfM899+TLX/5yGhr0ywDAO+upFSbFjwRPnjw511xzzXu+/qZNm7LHHnvkBz/4QRobG/PpT386r7zySm666aZMntz1HkfwfqEwqRhjhWHbujNW+Lnnnssvf/nL3HPPPXnppZdy0UUX5e///u97LhwAwJv85je/yc4777zl6/79+7/lnCFDhqSxsTHLli3b6vlly5Zlr732etvrDh06NE1NTVt9/OaAAw7I0qVLs2HDhjQ3N9fpJ4C+y69MAbrwne98J7NmzcpDDz2Uj370o8oSAODtNSS1Oh5//JfazjvvvNXxdoVJc3NzPv3pT+fRRx/d8tym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79a2bduUlpZmOBUAAID0/PPPa+rUqbr77rvVq1cvrVixQi6XS6tWrbrk+a+99pruv/9+9e3bVz169NDLL7+s6upqbd26tZmTA5GLFSYA0IiioiLl5eWpurpaM2bM0NatW3Xo0CF5PB7NmjVLEydONB2xRaqq/keDr7fuOr/B1ytPzwtlHABACxfqfUcuXqvu3mmSFBcXp7i4uHrPeb1effDBB5o9e3btcw6HQzfddJP27NnTpJ/n8Xj09ddfq127dt8pN2AnFCY25vezhwlwKcGMFa6srNTChQu1adMmOZ1OSdKtt94qp9Op8vJyZWZmUpgAAICwCVzNmpubq7lz59Z77osvvpDP51PHgPGYHTt21Mcff9yknzNr1iylpKTopptu+k55ATuhMLEpv18aNkzavdt0EiC67dmzRwkJCbrtttvkcrn00ksvqVOnTpJqPonp1auX4YQAACAShGuFyaeffqo2bdrUPh+4uiQUnn76ab3xxhsqKipSfHx8yK8PRCv2MLEpj4eyBAiFsrIyHTt2TH/84x81derU2k90Jk+erOuvv16jR482GxAAANhamzZt6h2XKkySk5MVExOjsrKyes+XlZXVftBzOc8995yefvppbd68mel/QABWmLQAZWVMywHqCmascNu2bTV06FA5nU795Cc/0fz5NftivPHGG/ryyy81aNAg5eTkyOGgfwYAoCVzWDVHKK/XVE6nUzfccIO2bt2qO+64Q5JqN3CdPn36Zb/vmWee0VNPPaU///nP6t+//3eNDNgOhYnNVFR8c1yUmEhhAtQVzFjhAQMGaOHChfL7/SopKVFGRobOnz+vuLg4uVwutW7dmrIEAAAY9/DDD+uuu+5S//79NXDgQC1evFgVFRW6++67JUlTpkxRampq7Yc/CxYs0JNPPqnXX39dXbt2VWlpqSSpVatWatWqlbE/BxBJKExsoG45kpFhLgdgR8nJyRo3bpyysrJkWZZWrVql7OxsnT17Vl6vV48//rjpiAAAIAKEaw+TpsrOztaZM2f05JNPqrS0VH379tW7775buxHs6dOn633I89JLL8nr9X5r8/pLbSoLtFQUJjbgcplOANhb7969FRsbq+rqav3P//yPfD6fqqqq5HA4lJ6ebjpei9XY2ODyk7MbfB0AgJCy/LIsf0ivF6zp06df9hacoqKiel+fPHnyCkIB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\n", "text/plain": [ "" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.display import Image\n", "Image(filename='compare_all.mat.matrix.png') " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## make a fast(er) search database for all of them" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[K== This is sourmash version 2.0.0a12.dev48+ga92289b. ==\n", "\u001b[K== Please cite Brown and Irber (2016), doi:10.21105/joss.00027. ==\n", "\n", "\u001b[Kloading 64 files into SBT\n", "\u001b[Kreading from big_genomes/9.fa.sig (63 signatures so far))\n", "\u001b[Kloaded 64 sigs; saving SBT under \"all-genomes\"\n", "\u001b[K127 of 127 nodes saved\n", "Finished saving nodes, now saving SBT json file.\n" ] } ], "source": [ "!sourmash index -k 31 all-genomes big_genomes/*.sig" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can now use this to search, and gather." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[K== This is sourmash version 2.0.0a12.dev48+ga92289b. ==\n", "\u001b[K== Please cite Brown and Irber (2016), doi:10.21105/joss.00027. ==\n", "\n", "\u001b[Kselecting default query k=31.\n", "\u001b[Kloaded query: NC_009665.1 Shewanella baltica... (k=31, DNA)\n", "\u001b[Kloaded 1 databases. \n", "\n", "2 matches:\n", "similarity match\n", "---------- -----\n", " 9.5% NC_009665.1 Shewanella baltica OS185, complete genome\n", " 4.4% NC_011663.1 Shewanella baltica OS223, complete genome\n" ] } ], "source": [ "!sourmash search shew_os185.fa.sig all-genomes --threshold=0.001" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\r", "\u001b[K== This is sourmash version 2.0.0a12.dev48+ga92289b. ==\r\n", "\r", "\u001b[K== Please cite Brown and Irber (2016), doi:10.21105/joss.00027. ==\r\n", "\r\n", "\r", "\u001b[Ksetting num_hashes to 0 because --scaled is set\r\n", "\r", "\u001b[Kcomputing signatures for files: fake-metagenome.fa\r\n", "\r", "\u001b[KComputing signature for ksizes: [31]\r\n", "\r", "\u001b[KComputing only nucleotide (and not protein) signatures.\r\n", "\r", "\u001b[KComputing a total of 1 signature(s).\r\n", "\r", "\u001b[Kskipping fake-metagenome.fa - already done\r\n" ] } ], "source": [ "# (make fake metagenome again, just in case)\n", "!cat genomes/*.fa > fake-metagenome.fa\n", "!sourmash compute -k 31 --scaled=1000 fake-metagenome.fa" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[K== This is sourmash version 2.0.0a12.dev48+ga92289b. ==\n", "\u001b[K== Please cite Brown and Irber (2016), doi:10.21105/joss.00027. ==\n", "\n", "\u001b[Kselect query k=31 automatically.\n", "\u001b[Kloaded query: fake-metagenome.fa... (k=31, DNA)\n", "\u001b[Kloaded 1 databases. \n", "\n", "\n", "overlap p_query p_match\n", "--------- ------- -------\n", "0.5 Mbp 42.2% 10.5% NC_011663.1 Shewanella baltica OS223,...\n", "499.0 kbp 38.4% 18.5% CP001071.1 Akkermansia muciniphila AT...\n", "0.5 Mbp 19.4% 4.9% NC_009665.1 Shewanella baltica OS185,...\n", "\n", "found 3 matches total;\n", "the recovered matches hit 100.0% of the query\n", "\n" ] } ], "source": [ "!sourmash gather fake-metagenome.fa.sig all-genomes" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## build a database with taxonomic information --\n", "\n", "for this, we need to provide a metadata file that contains accession => tax information." ] }, { "cell_type": "code", "execution_count": 9, "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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", "
accessiontaxidsuperkingdomphylumclassorderfamilygenusspeciesstrain
0AE000782224325ArchaeaEuryarchaeotaArchaeoglobiArchaeoglobalesArchaeoglobaceaeArchaeoglobusArchaeoglobus fulgidusArchaeoglobus fulgidus DSM 4304
1NC_000909243232ArchaeaEuryarchaeotaMethanococciMethanococcalesMethanocaldococcaceaeMethanocaldococcusMethanocaldococcus jannaschiiMethanocaldococcus jannaschii DSM 2661
2NC_003272103690BacteriaCyanobacteriaNaNNostocalesNostocaceaeNostocNostoc sp. PCC 7120NaN
3AE009441178306ArchaeaCrenarchaeotaThermoproteiThermoprotealesThermoproteaceaePyrobaculumPyrobaculum aerophilumPyrobaculum aerophilum str. IM2
4AE009950186497ArchaeaEuryarchaeotaThermococciThermococcalesThermococcaceaePyrococcusPyrococcus furiosusPyrococcus furiosus DSM 3638
5AE009951190304BacteriaFusobacteriaFusobacteriiaFusobacterialesFusobacteriaceaeFusobacteriumFusobacterium nucleatumNaN
6AE010299188937ArchaeaEuryarchaeotaMethanomicrobiaMethanosarcinalesMethanosarcinaceaeMethanosarcinaMethanosarcina acetivoransMethanosarcina acetivorans C2A
7AE009439190192ArchaeaEuryarchaeotaMethanopyriMethanopyralesMethanopyraceaeMethanopyrusMethanopyrus kandleriMethanopyrus kandleri AV19
8NC_003911246200BacteriaProteobacteriaAlphaproteobacteriaRhodobacteralesRhodobacteraceaeRuegeriaRuegeria pomeroyiRuegeria pomeroyi DSS-3
9AE006470194439BacteriaChlorobiChlorobiaChlorobialesChlorobiaceaeChlorobaculumChlorobaculum tepidumChlorobaculum tepidum TLS
10AE015928226186BacteriaBacteroidetesBacteroidiaBacteroidalesBacteroidaceaeBacteroidesBacteroides thetaiotaomicronBacteroides thetaiotaomicron VPI-5482
11AL954747228410BacteriaProteobacteriaBetaproteobacteriaNitrosomonadalesNitrosomonadaceaeNitrosomonasNitrosomonas europaeaNitrosomonas europaea ATCC 19718
12BX119912243090BacteriaPlanctomycetesPlanctomycetiaPlanctomycetalesPlanctomycetaceaeRhodopirellulaRhodopirellula balticaRhodopirellula baltica SH 1
13BX571656273121BacteriaProteobacteriaEpsilonproteobacteriaCampylobacteralesHelicobacteraceaeWolinellaWolinella succinogenesWolinella succinogenes DSM 1740
14AE017180243231BacteriaProteobacteriaDeltaproteobacteriaDesulfuromonadalesGeobacteraceaeGeobacterGeobacter sulfurreducensGeobacter sulfurreducens PCA
15AE017226243275BacteriaSpirochaetesSpirochaetiaSpirochaetalesSpirochaetaceaeTreponemaTreponema denticolaTreponema denticola ATCC 35405
16BX950229267377ArchaeaEuryarchaeotaMethanococciMethanococcalesMethanococcaceaeMethanococcusMethanococcus maripaludisMethanococcus maripaludis S2
17AE017221262724BacteriaDeinococcus-ThermusDeinococciThermalesThermaceaeThermusThermus thermophilusThermus thermophilus HB27
18BA00000170601ArchaeaEuryarchaeotaThermococciThermococcalesThermococcaceaePyrococcusPyrococcus horikoshiiPyrococcus horikoshii OT3
19BA000023273063ArchaeaCrenarchaeotaThermoproteiSulfolobalesSulfolobaceaeSulfolobusSulfolobus tokodaiiSulfolobus tokodaii str. 7
20NC_007951266265BacteriaProteobacteriaBetaproteobacteriaBurkholderialesBurkholderiaceaeParaburkholderiaParaburkholderia xenovoransParaburkholderia xenovorans LB400
21CP000492290317BacteriaChlorobiChlorobiaChlorobialesChlorobiaceaeChlorobiumChlorobium phaeobacteroidesChlorobium phaeobacteroides DSM 266
22NC_008751391774BacteriaProteobacteriaDeltaproteobacteriaDesulfovibrionalesDesulfovibrionaceaeDesulfovibrioDesulfovibrio vulgarisDesulfovibrio vulgaris DP4
23CP000568203119BacteriaFirmicutesClostridiaClostridialesRuminococcaceaeRuminiclostridiumRuminiclostridium thermocellumRuminiclostridium thermocellum ATCC 27405
24CP000561410359ArchaeaCrenarchaeotaThermoproteiThermoprotealesThermoproteaceaePyrobaculumPyrobaculum calidifontisPyrobaculum calidifontis JCM 11548
25CP000609402880ArchaeaEuryarchaeotaMethanococciMethanococcalesMethanococcaceaeMethanococcusMethanococcus maripaludisMethanococcus maripaludis C5
26CP000607290318BacteriaChlorobiChlorobiaChlorobialesChlorobiaceaeChlorobiumChlorobium phaeovibrioidesChlorobium phaeovibrioides DSM 265
27CP000660340102ArchaeaCrenarchaeotaThermoproteiThermoprotealesThermoproteaceaePyrobaculumPyrobaculum arsenaticumPyrobaculum arsenaticum DSM 13514
28CP000667369723BacteriaActinobacteriaActinobacteriaMicromonosporalesMicromonosporaceaeSalinisporaSalinispora tropicaSalinispora tropica CNB-440
29CP000679351627BacteriaFirmicutesClostridiaThermoanaerobacteralesThermoanaerobacterales Family III. Incertae SedisCaldicellulosiruptorCaldicellulosiruptor saccharolyticusCaldicellulosiruptor saccharolyticus DSM 8903
.................................
34CP000850391037BacteriaActinobacteriaActinobacteriaMicromonosporalesMicromonosporaceaeSalinisporaSalinispora arenicolaSalinispora arenicola CNS-205
35CP000909324602BacteriaChloroflexiChloroflexiaChloroflexalesChloroflexaceaeChloroflexusChloroflexus aurantiacusChloroflexus aurantiacus J-10-fl
36CP000924340099BacteriaFirmicutesClostridiaThermoanaerobacteralesThermoanaerobacteraceaeThermoanaerobacterThermoanaerobacter pseudethanolicusThermoanaerobacter pseudethanolicus ATCC 33223
37CP000969126740BacteriaThermotogaeThermotogaeThermotogalesThermotogaceaeThermotogaThermotoga sp. RQ2NaN
38CP001013395495BacteriaProteobacteriaBetaproteobacteriaBurkholderialesNaNLeptothrixLeptothrix cholodniiLeptothrix cholodnii SP-6
39CP001071349741BacteriaVerrucomicrobiaVerrucomicrobiaeVerrucomicrobialesAkkermansiaceaeAkkermansiaAkkermansia muciniphilaAkkermansia muciniphila ATCC BAA-835
40AP009380431947BacteriaBacteroidetesBacteroidiaBacteroidalesPorphyromonadaceaePorphyromonasPorphyromonas gingivalisPorphyromonas gingivalis ATCC 33277
41NC_010730436114BacteriaAquificaeAquificaeAquificalesHydrogenothermaceaeSulfurihydrogenibiumSulfurihydrogenibium sp. YO3AOP1NaN
42CP001097290315BacteriaChlorobiChlorobiaChlorobialesChlorobiaceaeChlorobiumChlorobium limicolaChlorobium limicola DSM 245
43CP001110324925BacteriaChlorobiChlorobiaChlorobialesChlorobiaceaePelodictyonPelodictyon phaeoclathratiformePelodictyon phaeoclathratiforme BU-1
44CP001130380749BacteriaAquificaeAquificaeAquificalesAquificaceaeHydrogenobaculumHydrogenobaculum sp. Y04AAS1NaN
45NZ_CH95931152598BacteriaProteobacteriaAlphaproteobacteriaRhodobacteralesRhodobacteraceaeSulfitobacterSulfitobacter sp. EE-36NaN
46NZ_CH959317314267BacteriaProteobacteriaAlphaproteobacteriaRhodobacteralesRhodobacteraceaeSulfitobacterSulfitobacter sp. NAS-14.1NaN
47CP001251515635BacteriaDictyoglomiDictyoglomiaDictyoglomalesDictyoglomaceaeDictyoglomusDictyoglomus turgidumDictyoglomus turgidum DSM 6724
48NC_011663407976BacteriaProteobacteriaGammaproteobacteriaAlteromonadalesShewanellaceaeShewanellaShewanella balticaShewanella baltica OS223
49CP000916309803BacteriaThermotogaeThermotogaeThermotogalesThermotogaceaeThermotogaThermotoga neapolitanaThermotoga neapolitana DSM 4359
50NZ_DS996397411464BacteriaProteobacteriaDeltaproteobacteriaDesulfovibrionalesDesulfovibrionaceaeDesulfovibrioDesulfovibrio pigerDesulfovibrio piger ATCC 29098
51CP001230123214BacteriaAquificaeAquificaeAquificalesHydrogenothermaceaePersephonellaPersephonella marinaPersephonella marina EX-H1
52CP001472240015BacteriaAcidobacteriaAcidobacteriiaAcidobacterialesAcidobacteriaceaeAcidobacteriumAcidobacterium capsulatumAcidobacterium capsulatum ATCC 51196
53AP009153379066BacteriaGemmatimonadetesGemmatimonadetesGemmatimonadalesGemmatimonadaceaeGemmatimonasGemmatimonas aurantiacaGemmatimonas aurantiaca T-27
54CP001941439481ArchaeaEuryarchaeotaNaNNaNNaNAciduliprofundumAciduliprofundum booneiAciduliprofundum boonei T469
55NC_013968309800ArchaeaEuryarchaeotaHalobacteriaHaloferacalesHaloferacaceaeHaloferaxHaloferax volcaniiHaloferax volcanii DS2
56NZ_KE136524226185BacteriaFirmicutesBacilliLactobacillalesEnterococcaceaeEnterococcusEnterococcus faecalisEnterococcus faecalis V583
57NZ_KQ961402542BacteriaProteobacteriaAlphaproteobacteriaSphingomonadalesSphingomonadaceaeZymomonasZymomonas mobilisNaN
58NZ_CP015081243230BacteriaDeinococcus-ThermusDeinococciDeinococcalesDeinococcaceaeDeinococcusDeinococcus radioduransDeinococcus radiodurans R1
59NZ_ABZS01000228432331BacteriaAquificaeAquificaeAquificalesHydrogenothermaceaeSulfurihydrogenibiumSulfurihydrogenibium yellowstonenseSulfurihydrogenibium yellowstonense SS-5
60NZ_JGWU010000011458259BacteriaProteobacteriaBetaproteobacteriaBurkholderialesAlcaligenaceaeBordetellaBordetella bronchisepticaBordetella bronchiseptica D989
61NZ_FWDH0100000331899BacteriaFirmicutesClostridiaThermoanaerobacteralesThermoanaerobacterales Family III. Incertae SedisCaldicellulosiruptorCaldicellulosiruptor besciiNaN
62NC_009972316274BacteriaChloroflexiChloroflexiaHerpetosiphonalesHerpetosiphonaceaeHerpetosiphonHerpetosiphon aurantiacusHerpetosiphon aurantiacus DSM 785
63NC_005213228908ArchaeaNanoarchaeotaNaNNanoarchaealesNanoarchaeaceaeNanoarchaeumNanoarchaeum equitansNanoarchaeum equitans Kin4-M
\n", "

64 rows × 10 columns

\n", "
" ], "text/plain": [ " accession taxid superkingdom phylum \\\n", "0 AE000782 224325 Archaea Euryarchaeota \n", "1 NC_000909 243232 Archaea Euryarchaeota \n", "2 NC_003272 103690 Bacteria Cyanobacteria \n", "3 AE009441 178306 Archaea Crenarchaeota \n", "4 AE009950 186497 Archaea Euryarchaeota \n", "5 AE009951 190304 Bacteria Fusobacteria \n", "6 AE010299 188937 Archaea Euryarchaeota \n", "7 AE009439 190192 Archaea Euryarchaeota \n", "8 NC_003911 246200 Bacteria Proteobacteria \n", "9 AE006470 194439 Bacteria Chlorobi \n", "10 AE015928 226186 Bacteria Bacteroidetes \n", "11 AL954747 228410 Bacteria Proteobacteria \n", "12 BX119912 243090 Bacteria Planctomycetes \n", "13 BX571656 273121 Bacteria Proteobacteria \n", "14 AE017180 243231 Bacteria Proteobacteria \n", "15 AE017226 243275 Bacteria Spirochaetes \n", "16 BX950229 267377 Archaea Euryarchaeota \n", "17 AE017221 262724 Bacteria Deinococcus-Thermus \n", "18 BA000001 70601 Archaea Euryarchaeota \n", "19 BA000023 273063 Archaea Crenarchaeota \n", "20 NC_007951 266265 Bacteria Proteobacteria \n", "21 CP000492 290317 Bacteria Chlorobi \n", "22 NC_008751 391774 Bacteria Proteobacteria \n", "23 CP000568 203119 Bacteria Firmicutes \n", "24 CP000561 410359 Archaea Crenarchaeota \n", "25 CP000609 402880 Archaea Euryarchaeota \n", "26 CP000607 290318 Bacteria Chlorobi \n", "27 CP000660 340102 Archaea Crenarchaeota \n", "28 CP000667 369723 Bacteria Actinobacteria \n", "29 CP000679 351627 Bacteria Firmicutes \n", ".. ... ... ... ... \n", "34 CP000850 391037 Bacteria Actinobacteria \n", "35 CP000909 324602 Bacteria Chloroflexi \n", "36 CP000924 340099 Bacteria Firmicutes \n", "37 CP000969 126740 Bacteria Thermotogae \n", "38 CP001013 395495 Bacteria Proteobacteria \n", "39 CP001071 349741 Bacteria Verrucomicrobia \n", "40 AP009380 431947 Bacteria Bacteroidetes \n", "41 NC_010730 436114 Bacteria Aquificae \n", "42 CP001097 290315 Bacteria Chlorobi \n", "43 CP001110 324925 Bacteria Chlorobi \n", "44 CP001130 380749 Bacteria Aquificae \n", "45 NZ_CH959311 52598 Bacteria Proteobacteria \n", "46 NZ_CH959317 314267 Bacteria Proteobacteria \n", "47 CP001251 515635 Bacteria Dictyoglomi \n", "48 NC_011663 407976 Bacteria Proteobacteria \n", "49 CP000916 309803 Bacteria Thermotogae \n", "50 NZ_DS996397 411464 Bacteria Proteobacteria \n", "51 CP001230 123214 Bacteria Aquificae \n", "52 CP001472 240015 Bacteria Acidobacteria \n", "53 AP009153 379066 Bacteria Gemmatimonadetes \n", "54 CP001941 439481 Archaea Euryarchaeota \n", "55 NC_013968 309800 Archaea Euryarchaeota \n", "56 NZ_KE136524 226185 Bacteria Firmicutes \n", "57 NZ_KQ961402 542 Bacteria Proteobacteria \n", "58 NZ_CP015081 243230 Bacteria Deinococcus-Thermus \n", "59 NZ_ABZS01000228 432331 Bacteria Aquificae \n", "60 NZ_JGWU01000001 1458259 Bacteria Proteobacteria \n", "61 NZ_FWDH01000003 31899 Bacteria Firmicutes \n", "62 NC_009972 316274 Bacteria Chloroflexi \n", "63 NC_005213 228908 Archaea Nanoarchaeota \n", "\n", " class order \\\n", "0 Archaeoglobi Archaeoglobales \n", "1 Methanococci Methanococcales \n", "2 NaN Nostocales \n", "3 Thermoprotei Thermoproteales \n", "4 Thermococci Thermococcales \n", "5 Fusobacteriia Fusobacteriales \n", "6 Methanomicrobia Methanosarcinales \n", "7 Methanopyri Methanopyrales \n", "8 Alphaproteobacteria Rhodobacterales \n", "9 Chlorobia Chlorobiales \n", "10 Bacteroidia Bacteroidales \n", "11 Betaproteobacteria Nitrosomonadales \n", "12 Planctomycetia Planctomycetales \n", "13 Epsilonproteobacteria Campylobacterales \n", "14 Deltaproteobacteria Desulfuromonadales \n", "15 Spirochaetia Spirochaetales \n", "16 Methanococci Methanococcales \n", "17 Deinococci Thermales \n", "18 Thermococci Thermococcales \n", "19 Thermoprotei Sulfolobales \n", "20 Betaproteobacteria Burkholderiales \n", "21 Chlorobia Chlorobiales \n", "22 Deltaproteobacteria Desulfovibrionales \n", "23 Clostridia Clostridiales \n", "24 Thermoprotei Thermoproteales \n", "25 Methanococci Methanococcales \n", "26 Chlorobia Chlorobiales \n", "27 Thermoprotei Thermoproteales \n", "28 Actinobacteria Micromonosporales \n", "29 Clostridia Thermoanaerobacterales \n", ".. ... ... \n", "34 Actinobacteria Micromonosporales \n", "35 Chloroflexia Chloroflexales \n", "36 Clostridia Thermoanaerobacterales \n", "37 Thermotogae Thermotogales \n", "38 Betaproteobacteria Burkholderiales \n", "39 Verrucomicrobiae Verrucomicrobiales \n", "40 Bacteroidia Bacteroidales \n", "41 Aquificae Aquificales \n", "42 Chlorobia Chlorobiales \n", "43 Chlorobia Chlorobiales \n", "44 Aquificae Aquificales \n", "45 Alphaproteobacteria Rhodobacterales \n", "46 Alphaproteobacteria Rhodobacterales \n", "47 Dictyoglomia Dictyoglomales \n", "48 Gammaproteobacteria Alteromonadales \n", "49 Thermotogae Thermotogales \n", "50 Deltaproteobacteria Desulfovibrionales \n", "51 Aquificae Aquificales \n", "52 Acidobacteriia Acidobacteriales \n", "53 Gemmatimonadetes Gemmatimonadales \n", "54 NaN NaN \n", "55 Halobacteria Haloferacales \n", "56 Bacilli Lactobacillales \n", "57 Alphaproteobacteria Sphingomonadales \n", "58 Deinococci Deinococcales \n", "59 Aquificae Aquificales \n", "60 Betaproteobacteria Burkholderiales \n", "61 Clostridia Thermoanaerobacterales \n", "62 Chloroflexia Herpetosiphonales \n", "63 NaN Nanoarchaeales \n", "\n", " family genus \\\n", "0 Archaeoglobaceae Archaeoglobus \n", "1 Methanocaldococcaceae Methanocaldococcus \n", "2 Nostocaceae Nostoc \n", "3 Thermoproteaceae Pyrobaculum \n", "4 Thermococcaceae Pyrococcus \n", "5 Fusobacteriaceae Fusobacterium \n", "6 Methanosarcinaceae Methanosarcina \n", "7 Methanopyraceae Methanopyrus \n", "8 Rhodobacteraceae Ruegeria \n", "9 Chlorobiaceae Chlorobaculum \n", "10 Bacteroidaceae Bacteroides \n", "11 Nitrosomonadaceae Nitrosomonas \n", "12 Planctomycetaceae Rhodopirellula \n", "13 Helicobacteraceae Wolinella \n", "14 Geobacteraceae Geobacter \n", "15 Spirochaetaceae Treponema \n", "16 Methanococcaceae Methanococcus \n", "17 Thermaceae Thermus \n", "18 Thermococcaceae Pyrococcus \n", "19 Sulfolobaceae Sulfolobus \n", "20 Burkholderiaceae Paraburkholderia \n", "21 Chlorobiaceae Chlorobium \n", "22 Desulfovibrionaceae Desulfovibrio \n", "23 Ruminococcaceae Ruminiclostridium \n", "24 Thermoproteaceae Pyrobaculum \n", "25 Methanococcaceae Methanococcus \n", "26 Chlorobiaceae Chlorobium \n", "27 Thermoproteaceae Pyrobaculum \n", "28 Micromonosporaceae Salinispora \n", "29 Thermoanaerobacterales Family III. Incertae Sedis Caldicellulosiruptor \n", ".. ... ... \n", "34 Micromonosporaceae Salinispora \n", "35 Chloroflexaceae Chloroflexus \n", "36 Thermoanaerobacteraceae Thermoanaerobacter \n", "37 Thermotogaceae Thermotoga \n", "38 NaN Leptothrix \n", "39 Akkermansiaceae Akkermansia \n", "40 Porphyromonadaceae Porphyromonas \n", "41 Hydrogenothermaceae Sulfurihydrogenibium \n", "42 Chlorobiaceae Chlorobium \n", "43 Chlorobiaceae Pelodictyon \n", "44 Aquificaceae Hydrogenobaculum \n", "45 Rhodobacteraceae Sulfitobacter \n", "46 Rhodobacteraceae Sulfitobacter \n", "47 Dictyoglomaceae Dictyoglomus \n", "48 Shewanellaceae Shewanella \n", "49 Thermotogaceae Thermotoga \n", "50 Desulfovibrionaceae Desulfovibrio \n", "51 Hydrogenothermaceae Persephonella \n", "52 Acidobacteriaceae Acidobacterium \n", "53 Gemmatimonadaceae Gemmatimonas \n", "54 NaN Aciduliprofundum \n", "55 Haloferacaceae Haloferax \n", "56 Enterococcaceae Enterococcus \n", "57 Sphingomonadaceae Zymomonas \n", "58 Deinococcaceae Deinococcus \n", "59 Hydrogenothermaceae Sulfurihydrogenibium \n", "60 Alcaligenaceae Bordetella \n", "61 Thermoanaerobacterales Family III. Incertae Sedis Caldicellulosiruptor \n", "62 Herpetosiphonaceae Herpetosiphon \n", "63 Nanoarchaeaceae Nanoarchaeum \n", "\n", " species \\\n", "0 Archaeoglobus fulgidus \n", "1 Methanocaldococcus jannaschii \n", "2 Nostoc sp. PCC 7120 \n", "3 Pyrobaculum aerophilum \n", "4 Pyrococcus furiosus \n", "5 Fusobacterium nucleatum \n", "6 Methanosarcina acetivorans \n", "7 Methanopyrus kandleri \n", "8 Ruegeria pomeroyi \n", "9 Chlorobaculum tepidum \n", "10 Bacteroides thetaiotaomicron \n", "11 Nitrosomonas europaea \n", "12 Rhodopirellula baltica \n", "13 Wolinella succinogenes \n", "14 Geobacter sulfurreducens \n", "15 Treponema denticola \n", "16 Methanococcus maripaludis \n", "17 Thermus thermophilus \n", "18 Pyrococcus horikoshii \n", "19 Sulfolobus tokodaii \n", "20 Paraburkholderia xenovorans \n", "21 Chlorobium phaeobacteroides \n", "22 Desulfovibrio vulgaris \n", "23 Ruminiclostridium thermocellum \n", "24 Pyrobaculum calidifontis \n", "25 Methanococcus maripaludis \n", "26 Chlorobium phaeovibrioides \n", "27 Pyrobaculum arsenaticum \n", "28 Salinispora tropica \n", "29 Caldicellulosiruptor saccharolyticus \n", ".. ... \n", "34 Salinispora arenicola \n", "35 Chloroflexus aurantiacus \n", "36 Thermoanaerobacter pseudethanolicus \n", "37 Thermotoga sp. RQ2 \n", "38 Leptothrix cholodnii \n", "39 Akkermansia muciniphila \n", "40 Porphyromonas gingivalis \n", "41 Sulfurihydrogenibium sp. YO3AOP1 \n", "42 Chlorobium limicola \n", "43 Pelodictyon phaeoclathratiforme \n", "44 Hydrogenobaculum sp. Y04AAS1 \n", "45 Sulfitobacter sp. EE-36 \n", "46 Sulfitobacter sp. NAS-14.1 \n", "47 Dictyoglomus turgidum \n", "48 Shewanella baltica \n", "49 Thermotoga neapolitana \n", "50 Desulfovibrio piger \n", "51 Persephonella marina \n", "52 Acidobacterium capsulatum \n", "53 Gemmatimonas aurantiaca \n", "54 Aciduliprofundum boonei \n", "55 Haloferax volcanii \n", "56 Enterococcus faecalis \n", "57 Zymomonas mobilis \n", "58 Deinococcus radiodurans \n", "59 Sulfurihydrogenibium yellowstonense \n", "60 Bordetella bronchiseptica \n", "61 Caldicellulosiruptor bescii \n", "62 Herpetosiphon aurantiacus \n", "63 Nanoarchaeum equitans \n", "\n", " strain \n", "0 Archaeoglobus fulgidus DSM 4304 \n", "1 Methanocaldococcus jannaschii DSM 2661 \n", "2 NaN \n", "3 Pyrobaculum aerophilum str. IM2 \n", "4 Pyrococcus furiosus DSM 3638 \n", "5 NaN \n", "6 Methanosarcina acetivorans C2A \n", "7 Methanopyrus kandleri AV19 \n", "8 Ruegeria pomeroyi DSS-3 \n", "9 Chlorobaculum tepidum TLS \n", "10 Bacteroides thetaiotaomicron VPI-5482 \n", "11 Nitrosomonas europaea ATCC 19718 \n", "12 Rhodopirellula baltica SH 1 \n", "13 Wolinella succinogenes DSM 1740 \n", "14 Geobacter sulfurreducens PCA \n", "15 Treponema denticola ATCC 35405 \n", "16 Methanococcus maripaludis S2 \n", "17 Thermus thermophilus HB27 \n", "18 Pyrococcus horikoshii OT3 \n", "19 Sulfolobus tokodaii str. 7 \n", "20 Paraburkholderia xenovorans LB400 \n", "21 Chlorobium phaeobacteroides DSM 266 \n", "22 Desulfovibrio vulgaris DP4 \n", "23 Ruminiclostridium thermocellum ATCC 27405 \n", "24 Pyrobaculum calidifontis JCM 11548 \n", "25 Methanococcus maripaludis C5 \n", "26 Chlorobium phaeovibrioides DSM 265 \n", "27 Pyrobaculum arsenaticum DSM 13514 \n", "28 Salinispora tropica CNB-440 \n", "29 Caldicellulosiruptor saccharolyticus DSM 8903 \n", ".. ... \n", "34 Salinispora arenicola CNS-205 \n", "35 Chloroflexus aurantiacus J-10-fl \n", "36 Thermoanaerobacter pseudethanolicus ATCC 33223 \n", "37 NaN \n", "38 Leptothrix cholodnii SP-6 \n", "39 Akkermansia muciniphila ATCC BAA-835 \n", "40 Porphyromonas gingivalis ATCC 33277 \n", "41 NaN \n", "42 Chlorobium limicola DSM 245 \n", "43 Pelodictyon phaeoclathratiforme BU-1 \n", "44 NaN \n", "45 NaN \n", "46 NaN \n", "47 Dictyoglomus turgidum DSM 6724 \n", "48 Shewanella baltica OS223 \n", "49 Thermotoga neapolitana DSM 4359 \n", "50 Desulfovibrio piger ATCC 29098 \n", "51 Persephonella marina EX-H1 \n", "52 Acidobacterium capsulatum ATCC 51196 \n", "53 Gemmatimonas aurantiaca T-27 \n", "54 Aciduliprofundum boonei T469 \n", "55 Haloferax volcanii DS2 \n", "56 Enterococcus faecalis V583 \n", "57 NaN \n", "58 Deinococcus radiodurans R1 \n", "59 Sulfurihydrogenibium yellowstonense SS-5 \n", "60 Bordetella bronchiseptica D989 \n", "61 NaN \n", "62 Herpetosiphon aurantiacus DSM 785 \n", "63 Nanoarchaeum equitans Kin4-M \n", "\n", "[64 rows x 10 columns]" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import pandas\n", "df = pandas.read_csv('podar-lineage.csv')\n", "df" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[K== This is sourmash version 2.0.0a12.dev48+ga92289b. ==\n", "\u001b[K== Please cite Brown and Irber (2016), doi:10.21105/joss.00027. ==\n", "\n", "\u001b[Kexamining spreadsheet headers...\n", "\u001b[K** assuming column 'accession' is identifiers in spreadsheet\n", "\u001b[K64 distinct identities in spreadsheet out of 64 rows.\n", "\u001b[K64 distinct lineages in spreadsheet out of 64 rows.\n", "\u001b[K64 assigned lineages out of 64 distinct lineages in spreadsheet. 64)\n", "\u001b[K64 identifiers used out of 64 distinct identifiers in spreadsheet.\n", "\u001b[Ksaving to LCA DB: taxdb.lca.json\n" ] } ], "source": [ "!sourmash lca index podar-lineage.csv taxdb big_genomes/*.sig -C 3 --split-identifiers" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This database 'taxdb.lca.json' can be used for search and gather as above:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[K== This is sourmash version 2.0.0a12.dev48+ga92289b. ==\n", "\u001b[K== Please cite Brown and Irber (2016), doi:10.21105/joss.00027. ==\n", "\n", "\u001b[Kselect query k=31 automatically.\n", "\u001b[Kloaded query: fake-metagenome.fa... (k=31, DNA)\n", "\u001b[Kloaded 1 databases. \n", "\n", "\n", "overlap p_query p_match\n", "--------- ------- -------\n", "0.6 Mbp 46.7% 11.6% NC_011663.1 Shewanella baltica OS223,...\n", "0.5 Mbp 38.7% 19.3% CP001071.1 Akkermansia muciniphila AT...\n", "0.5 Mbp 14.6% 3.9% NC_009665.1 Shewanella baltica OS185,...\n", "\n", "found 3 matches total;\n", "the recovered matches hit 100.0% of the query\n", "\n" ] } ], "source": [ "!sourmash gather fake-metagenome.fa.sig taxdb.lca.json" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "...but can also be used for taxonomic summarization:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[K== This is sourmash version 2.0.0a12.dev48+ga92289b. ==\n", "\u001b[K== Please cite Brown and Irber (2016), doi:10.21105/joss.00027. ==\n", "\n", "\u001b[Kloaded 1 LCA databases. ksize=31, scaled=10000\n", "\u001b[Kfinding query signatures...\n", "\u001b[Kloaded 1 signatures from 1 files total.of 1)\n", "38.7% 53 Bacteria;Verrucomicrobia;Verrucomicrobiae;Verrucomicrobiales;Akkermansiaceae;Akkermansia;Akkermansia muciniphila;Akkermansia muciniphila ATCC BAA-835\n", "38.7% 53 Bacteria;Verrucomicrobia;Verrucomicrobiae;Verrucomicrobiales;Akkermansiaceae;Akkermansia;Akkermansia muciniphila\n", "38.7% 53 Bacteria;Verrucomicrobia;Verrucomicrobiae;Verrucomicrobiales;Akkermansiaceae;Akkermansia\n", "38.7% 53 Bacteria;Verrucomicrobia;Verrucomicrobiae;Verrucomicrobiales;Akkermansiaceae\n", "38.7% 53 Bacteria;Verrucomicrobia;Verrucomicrobiae;Verrucomicrobiales\n", "38.7% 53 Bacteria;Verrucomicrobia;Verrucomicrobiae\n", "38.7% 53 Bacteria;Verrucomicrobia\n", "100.0% 137 Bacteria\n", "61.3% 84 Bacteria;Proteobacteria;Gammaproteobacteria;Alteromonadales;Shewanellaceae;Shewanella;Shewanella baltica\n", "61.3% 84 Bacteria;Proteobacteria;Gammaproteobacteria;Alteromonadales;Shewanellaceae;Shewanella\n", "61.3% 84 Bacteria;Proteobacteria;Gammaproteobacteria;Alteromonadales;Shewanellaceae\n", "61.3% 84 Bacteria;Proteobacteria;Gammaproteobacteria;Alteromonadales\n", "61.3% 84 Bacteria;Proteobacteria;Gammaproteobacteria\n", "61.3% 84 Bacteria;Proteobacteria\n", "22.6% 31 Bacteria;Proteobacteria;Gammaproteobacteria;Alteromonadales;Shewanellaceae;Shewanella;Shewanella baltica;Shewanella baltica OS223\n", "14.6% 20 Bacteria;Proteobacteria;Gammaproteobacteria;Alteromonadales;Shewanellaceae;Shewanella;Shewanella baltica;Shewanella baltica OS185\n" ] } ], "source": [ "!sourmash lca summarize --query fake-metagenome.fa.sig --db taxdb.lca.json" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Other pointers\n", "\n", "[Sourmash: a practical guide](https://sourmash.readthedocs.io/en/latest/using-sourmash-a-guide.html)\n", "\n", "[Classifying signatures taxonomically](https://sourmash.readthedocs.io/en/latest/classifying-signatures.html)\n", "\n", "[Pre-built search databases](https://sourmash.readthedocs.io/en/latest/databases.html)\n", "\n", "## A full list of notebooks\n", "\n", "[An introduction to k-mers for genome comparison and analysis](kmers-and-minhash.ipynb)\n", "\n", "[Some sourmash command line examples!](sourmash-examples.ipynb)\n", "\n", "[Working with private collections of signatures.](sourmash-collections.ipynb)\n", "\n", "[Using the LCA_Database API.](using-LCA-database-API.ipynb)\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.6.7" } }, "nbformat": 4, "nbformat_minor": 2 }