{ "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?labpath=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 1017 0 --:--:-- --:--:-- --:--:-- 1017\n", "100 61.1M 100 61.1M 0 0 2932k 0 0:00:21 0:00:21 --:--:-- 3468k\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\n", "== This is sourmash version 4.0.0a4.dev12+g31c5eda2. ==\n", "\u001b[K== Please cite Brown and Irber (2016), doi:10.21105/joss.00027. ==\n", "\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 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 signature(s) to 0.fa.sig. 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 signature(s) to 1.fa.sig. 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 signature(s) to 10.fa.sig. 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 signature(s) to 11.fa.sig. 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 signature(s) to 12.fa.sig. 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 signature(s) to 13.fa.sig. 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 signature(s) to 14.fa.sig. 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 signature(s) to 15.fa.sig. 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 signature(s) to 16.fa.sig. 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 signature(s) to 17.fa.sig. 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 signature(s) to 18.fa.sig. 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 signature(s) to 19.fa.sig. 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 signature(s) to 2.fa.sig. 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 signature(s) to 20.fa.sig. 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 signature(s) to 21.fa.sig. 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 signature(s) to 22.fa.sig. 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 signature(s) to 23.fa.sig. 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 signature(s) to 24.fa.sig. 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 signature(s) to 25.fa.sig. 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 signature(s) to 26.fa.sig. 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 signature(s) to 27.fa.sig. 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 signature(s) to 28.fa.sig. 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 signature(s) to 29.fa.sig. 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 signature(s) to 3.fa.sig. 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 signature(s) to 30.fa.sig. 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 signature(s) to 31.fa.sig. 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 signature(s) to 32.fa.sig. 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 signature(s) to 33.fa.sig. 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 signature(s) to 34.fa.sig. 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 signature(s) to 35.fa.sig. 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 signature(s) to 36.fa.sig. 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 signature(s) to 37.fa.sig. 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 signature(s) to 38.fa.sig. 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 signature(s) to 39.fa.sig. 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 signature(s) to 4.fa.sig. 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 signature(s) to 40.fa.sig. 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 signature(s) to 41.fa.sig. 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 signature(s) to 42.fa.sig. 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 signature(s) to 43.fa.sig. 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 signature(s) to 44.fa.sig. 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 signature(s) to 45.fa.sig. 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 signature(s) to 46.fa.sig. 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 signature(s) to 47.fa.sig. 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 signature(s) to 48.fa.sig. 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 signature(s) to 49.fa.sig. 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 signature(s) to 5.fa.sig. 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 signature(s) to 50.fa.sig. 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 signature(s) to 51.fa.sig. 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 signature(s) to 52.fa.sig. Note: signature license is CC0.\n", "\u001b[K... reading sequences from 53.fa\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[Kcalculated 1 signatures for 1 sequences in 53.fa\n", "\u001b[Ksaved signature(s) to 53.fa.sig. 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 signature(s) to 54.fa.sig. Note: signature license is CC0.\n", "\u001b[K... reading sequences from 55.fa\n", "\u001b[Kcalculated 1 signatures for 1 sequences in 55.fa\n", "\u001b[Ksaved signature(s) to 55.fa.sig. 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 signature(s) to 56.fa.sig. 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 signature(s) to 57.fa.sig. 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 signature(s) to 58.fa.sig. 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 signature(s) to 59.fa.sig. 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 signature(s) to 6.fa.sig. 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 signature(s) to 60.fa.sig. 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 signature(s) to 61.fa.sig. 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 signature(s) to 62.fa.sig. 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 signature(s) to 63.fa.sig. 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 signature(s) to 7.fa.sig. 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 signature(s) to 8.fa.sig. 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 signature(s) to 9.fa.sig. Note: signature license is CC0.\n" ] } ], "source": [ "!cd big_genomes/ && sourmash sketch dna -p 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\n", "== This is sourmash version 4.0.0a4.dev12+g31c5eda2. ==\n", "\u001b[K== Please cite Brown and Irber (2016), doi:10.21105/joss.00027. ==\n", "\n", "\u001b[Kloaded 1 sigs from 'big_genomes/0.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/1.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/10.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/11.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/12.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/13.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/14.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/15.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/16.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/17.fa.sig'10 sigs total\n", "\u001b[Kloaded 1 sigs from 'big_genomes/18.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/19.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/2.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/20.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/21.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/22.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/23.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/24.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/25.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/26.fa.sig'20 sigs total\n", "\u001b[Kloaded 1 sigs from 'big_genomes/27.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/28.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/29.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/3.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/30.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/31.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/32.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/33.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/34.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/35.fa.sig'30 sigs total\n", "\u001b[Kloaded 1 sigs from 'big_genomes/36.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/37.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/38.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/39.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/4.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/40.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/41.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/42.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/43.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/44.fa.sig'40 sigs total\n", "\u001b[Kloaded 1 sigs from 'big_genomes/45.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/46.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/47.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/48.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/49.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/5.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/50.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/51.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/52.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/53.fa.sig'50 sigs total\n", "\u001b[Kloaded 1 sigs from 'big_genomes/54.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/55.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/56.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/57.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/58.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/59.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/6.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/60.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/61.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/62.fa.sig'60 sigs total\n", "\u001b[Kloaded 1 sigs from 'big_genomes/63.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/7.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/8.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/9.fa.sig'g'\n", "\u001b[Kloaded 64 signatures total. \n", "\u001b[K\n", "min similarity in matrix: 0.000\n", "\u001b[Ksaving labels to: compare_all.mat.labels.txt\n", "\u001b[Ksaving comparison matrix to: compare_all.mat\n", "\u001b[K\n", "== This is sourmash version 4.0.0a4.dev12+g31c5eda2. ==\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": "iVBORw0KGgoAAAANSUhEUgAABEwAAAMgCAYAAAA5kPcVAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAA9hAAAPYQGoP6dpAAB29UlEQVR4nOzdfXhU9b3u/3tN5iEZAkExQgyPgiAEPVqjv0KMUQoIFLAVFKkXltYHELq5EIEqcgQMyAGK5PQIKFVgU5TyoCClVAhKCAbcAg3bKj1uYAvhuEHQrU5oQiaZzO8PJJIFTDIwkzWz8n71mmtPZlZWbna60syd73w/RjAYDAoAAAAAAAA1HFYHAAAAAAAAiDUUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAAAAAAACYUJgAA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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\n", "== This is sourmash version 4.0.0a4.dev12+g31c5eda2. ==\n", "\u001b[K== Please cite Brown and Irber (2016), doi:10.21105/joss.00027. ==\n", "\n", "\u001b[Kloading 64 files into SBT\n", "\u001b[Kloaded 1 sigs from 'big_genomes/0.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/1.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/10.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/11.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/12.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/13.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/14.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/15.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/16.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/17.fa.sig'10 sigs total\n", "\u001b[Kloaded 1 sigs from 'big_genomes/18.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/19.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/2.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/20.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/21.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/22.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/23.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/24.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/25.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/26.fa.sig'20 sigs total\n", "\u001b[Kloaded 1 sigs from 'big_genomes/27.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/28.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/29.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/3.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/30.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/31.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/32.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/33.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/34.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/35.fa.sig'30 sigs total\n", "\u001b[Kloaded 1 sigs from 'big_genomes/36.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/37.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/38.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/39.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/4.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/40.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/41.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/42.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/43.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/44.fa.sig'40 sigs total\n", "\u001b[Kloaded 1 sigs from 'big_genomes/45.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/46.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/47.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/48.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/49.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/5.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/50.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/51.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/52.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/53.fa.sig'50 sigs total\n", "\u001b[Kloaded 1 sigs from 'big_genomes/54.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/55.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/56.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/57.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/58.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/59.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/6.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/60.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/61.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/62.fa.sig'60 sigs total\n", "\u001b[Kloaded 1 sigs from 'big_genomes/63.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/7.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/8.fa.sig'g'\n", "\u001b[Kloaded 1 sigs from 'big_genomes/9.fa.sig'g'\n", "\u001b[K\n", "\u001b[Kloaded 64 sigs; saving SBT under \"all-genomes\"\n", "\u001b[KFinished saving nodes, now saving SBT index file.\n", "\u001b[KFinished saving SBT index, available at /Users/t/dev/sourmash/doc/all-genomes.sbt.zip\n", "\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": [ "\r", "\u001b[K\r\n", "== This is sourmash version 4.0.0a4.dev12+g31c5eda2. ==\r\n", "\r", "\u001b[K== Please cite Brown and Irber (2016), doi:10.21105/joss.00027. ==\r\n", "\r\n", "\r", "\u001b[KCannot open file 'shew_os185.fa.sig'\r\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": [ "\u001b[K\n", "== This is sourmash version 4.0.0a4.dev12+g31c5eda2. ==\n", "\u001b[K== Please cite Brown and Irber (2016), doi:10.21105/joss.00027. ==\n", "\n", "\u001b[Kcomputing signatures for files: fake-metagenome.fa\n", "\u001b[KComputing a total of 1 signature(s).\n", "\u001b[K... reading sequences from fake-metagenome.fa\n", "\u001b[Kcalculated 1 signatures for 3 sequences in fake-metagenome.fa\n", "\u001b[Ksaved signature(s) to fake-metagenome.fa.sig. Note: signature license is CC0.\n" ] } ], "source": [ "# (make fake metagenome again, just in case)\n", "!cat genomes/*.fa > fake-metagenome.fa\n", "!rm -f fake-metagenome.fa.sig\n", "!sourmash sketch dna -p k=31,scaled=1000 fake-metagenome.fa" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[K\n", "== This is sourmash version 4.0.0a4.dev12+g31c5eda2. ==\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", "
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
.................................
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 class \\\n", "0 AE000782 224325 Archaea Euryarchaeota Archaeoglobi \n", "1 NC_000909 243232 Archaea Euryarchaeota Methanococci \n", "2 NC_003272 103690 Bacteria Cyanobacteria NaN \n", "3 AE009441 178306 Archaea Crenarchaeota Thermoprotei \n", "4 AE009950 186497 Archaea Euryarchaeota Thermococci \n", ".. ... ... ... ... ... \n", "59 NZ_ABZS01000228 432331 Bacteria Aquificae Aquificae \n", "60 NZ_JGWU01000001 1458259 Bacteria Proteobacteria Betaproteobacteria \n", "61 NZ_FWDH01000003 31899 Bacteria Firmicutes Clostridia \n", "62 NC_009972 316274 Bacteria Chloroflexi Chloroflexia \n", "63 NC_005213 228908 Archaea Nanoarchaeota NaN \n", "\n", " order family \\\n", "0 Archaeoglobales Archaeoglobaceae \n", "1 Methanococcales Methanocaldococcaceae \n", "2 Nostocales Nostocaceae \n", "3 Thermoproteales Thermoproteaceae \n", "4 Thermococcales Thermococcaceae \n", ".. ... ... \n", "59 Aquificales Hydrogenothermaceae \n", "60 Burkholderiales Alcaligenaceae \n", "61 Thermoanaerobacterales Thermoanaerobacterales Family III. Incertae Sedis \n", "62 Herpetosiphonales Herpetosiphonaceae \n", "63 Nanoarchaeales Nanoarchaeaceae \n", "\n", " genus species \\\n", "0 Archaeoglobus Archaeoglobus fulgidus \n", "1 Methanocaldococcus Methanocaldococcus jannaschii \n", "2 Nostoc Nostoc sp. PCC 7120 \n", "3 Pyrobaculum Pyrobaculum aerophilum \n", "4 Pyrococcus Pyrococcus furiosus \n", ".. ... ... \n", "59 Sulfurihydrogenibium Sulfurihydrogenibium yellowstonense \n", "60 Bordetella Bordetella bronchiseptica \n", "61 Caldicellulosiruptor Caldicellulosiruptor bescii \n", "62 Herpetosiphon Herpetosiphon aurantiacus \n", "63 Nanoarchaeum 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", ".. ... \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\n", "== This is sourmash version 4.0.0a4.dev12+g31c5eda2. ==\n", "\u001b[K== Please cite Brown and Irber (2016), doi:10.21105/joss.00027. ==\n", "\n", "\u001b[KBuilding LCA database with ksize=31 scaled=10000 moltype=DNA.\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[K... loaded 64 signatures.H01000003.1 Caldicellulo (64 of 64); skipped 0 so far\n", "\u001b[Kloaded 19993 hashes at ksize=31 scaled=10000\n", "\u001b[K64 assigned lineages out of 64 distinct lineages in spreadsheet.\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": [ "\r", "\u001b[K\r\n", "== This is sourmash version 4.0.0a4.dev12+g31c5eda2. ==\r\n", "\r", "\u001b[K== Please cite Brown and Irber (2016), doi:10.21105/joss.00027. ==\r\n", "\r\n", "\r", "\u001b[Kselect query k=31 automatically.\r\n", "\r", "\u001b[Kloaded query: fake-metagenome.fa... (k=31, DNA)\r\n", "\r", "\u001b[Kloading from taxdb.lca.json...\r", "\r", "\u001b[Kloaded LCA taxdb.lca.json\r", "\r", "\u001b[K \r", "\r", "\u001b[Kloaded 1 databases.\r\n", "\r\n", "\r\n", "overlap p_query p_match\r\n", "--------- ------- -------\r\n", "0.6 Mbp 46.7% 11.6% NC_011663.1 Shewanella baltica OS223,...\r\n", "0.5 Mbp 38.7% 19.3% CP001071.1 Akkermansia muciniphila AT...\r\n", "0.5 Mbp 14.6% 3.9% NC_009665.1 Shewanella baltica OS185,...\r\n", "\r\n", "found 3 matches total;\r\n", "the recovered matches hit 100.0% of the query\r\n", "\r\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": [ "\r", "\u001b[K\r\n", "== This is sourmash version 4.0.0a4.dev12+g31c5eda2. ==\r\n", "\r", "\u001b[K== Please cite Brown and Irber (2016), doi:10.21105/joss.00027. ==\r\n", "\r\n", "\r", "\u001b[K\r", "\u001b[K\r", "\u001b[K... loading database taxdb.lca.json\r", "\r", "\u001b[K\r", "\u001b[K\r", "\u001b[Kloaded 1 LCA databases. ksize=31, scaled=10000 moltype=DNA\r\n", "\r", "\u001b[Kfinding query signatures...\r\n", "\r", "\u001b[K\r", "\u001b[K\r", "\u001b[K... loading fake-metagenome.fa (file 1 of 1)\r", "38.7% 53 Bacteria;Verrucomicrobia;Verrucomicrobiae;Verrucomicrobiales;Akkermansiaceae;Akkermansia;Akkermansia muciniphila;Akkermansia muciniphila ATCC BAA-835 fake-metagenome.fa.sig:4e1ac0cf fake-metagenome.fa\r\n", "38.7% 53 Bacteria;Verrucomicrobia;Verrucomicrobiae;Verrucomicrobiales;Akkermansiaceae;Akkermansia;Akkermansia muciniphila fake-metagenome.fa.sig:4e1ac0cf fake-metagenome.fa\r\n", "38.7% 53 Bacteria;Verrucomicrobia;Verrucomicrobiae;Verrucomicrobiales;Akkermansiaceae;Akkermansia fake-metagenome.fa.sig:4e1ac0cf fake-metagenome.fa\r\n", "38.7% 53 Bacteria;Verrucomicrobia;Verrucomicrobiae;Verrucomicrobiales;Akkermansiaceae fake-metagenome.fa.sig:4e1ac0cf fake-metagenome.fa\r\n", "38.7% 53 Bacteria;Verrucomicrobia;Verrucomicrobiae;Verrucomicrobiales fake-metagenome.fa.sig:4e1ac0cf fake-metagenome.fa\r\n", "38.7% 53 Bacteria;Verrucomicrobia;Verrucomicrobiae fake-metagenome.fa.sig:4e1ac0cf fake-metagenome.fa\r\n", "38.7% 53 Bacteria;Verrucomicrobia fake-metagenome.fa.sig:4e1ac0cf fake-metagenome.fa\r\n", "100.0% 137 Bacteria fake-metagenome.fa.sig:4e1ac0cf fake-metagenome.fa\r\n", "61.3% 84 Bacteria;Proteobacteria;Gammaproteobacteria;Alteromonadales;Shewanellaceae;Shewanella;Shewanella baltica fake-metagenome.fa.sig:4e1ac0cf fake-metagenome.fa\r\n", "61.3% 84 Bacteria;Proteobacteria;Gammaproteobacteria;Alteromonadales;Shewanellaceae;Shewanella fake-metagenome.fa.sig:4e1ac0cf fake-metagenome.fa\r\n", "61.3% 84 Bacteria;Proteobacteria;Gammaproteobacteria;Alteromonadales;Shewanellaceae fake-metagenome.fa.sig:4e1ac0cf fake-metagenome.fa\r\n", "61.3% 84 Bacteria;Proteobacteria;Gammaproteobacteria;Alteromonadales fake-metagenome.fa.sig:4e1ac0cf fake-metagenome.fa\r\n", "61.3% 84 Bacteria;Proteobacteria;Gammaproteobacteria fake-metagenome.fa.sig:4e1ac0cf fake-metagenome.fa\r\n", "61.3% 84 Bacteria;Proteobacteria fake-metagenome.fa.sig:4e1ac0cf fake-metagenome.fa\r\n", "22.6% 31 Bacteria;Proteobacteria;Gammaproteobacteria;Alteromonadales;Shewanellaceae;Shewanella;Shewanella baltica;Shewanella baltica OS223 fake-metagenome.fa.sig:4e1ac0cf fake-metagenome.fa\r\n", "14.6% 20 Bacteria;Proteobacteria;Gammaproteobacteria;Alteromonadales;Shewanellaceae;Shewanella;Shewanella baltica;Shewanella baltica OS185 fake-metagenome.fa.sig:4e1ac0cf fake-metagenome.fa\r\n", "\r", "\u001b[K\r", "\u001b[K\r", "\u001b[Kloaded 1 signatures from 1 files total.\r\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 (myenv)", "language": "python", "name": "myenv" }, "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.7.6" } }, "nbformat": 4, "nbformat_minor": 2 }