From 021788d1c8d5f87762c7371e4f4f3a6e279c5369 Mon Sep 17 00:00:00 2001 From: baileythegreen Date: Tue, 6 Jul 2021 13:27:14 +0100 Subject: [PATCH 01/74] Add documentation page explaining `pyani plot` output --- docs/index.rst | 1 + docs/interpreting_plots.rst | 77 +++++++++++++++++++++++++++++++++++++ 2 files changed, 78 insertions(+) create mode 100644 docs/interpreting_plots.rst diff --git a/docs/index.rst b/docs/index.rst index 71d7b05d..9f469e42 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -90,6 +90,7 @@ If you'd like to fix a bug or make an improvement yourself, contributions are we basic_use examples subcommands + interpreting_plots scheduler testing contributing diff --git a/docs/interpreting_plots.rst b/docs/interpreting_plots.rst new file mode 100644 index 00000000..1efe4a0c --- /dev/null +++ b/docs/interpreting_plots.rst @@ -0,0 +1,77 @@ +================================= +Interpreting the Graphical Output +================================= +.. + Graphical output is obtained by executing the ``pyani plot`` subcommand, specifying the output directory and run ID. Optionally, output file formats and the graphics drawing method can be specified. + + .. code-block:: bash + + pyani plot --formats png,pdf --method seaborn C_blochmannia_ANIm 1 + + Supported output methods are: + + - ``seaborn`` + - ``mpl`` (``matplotlib``) + - ``plotly`` + +---------- +The Output +---------- + +``pyani plot`` generates five plots corresponding to the matrices that ``pyani report`` produces: + + - percentage identity of aligned regions + - percentage coverage of each genome by aligned regions + - number of aligned bases on each genome + - number of "similarity errors" on each genome + - a Hadamard matrix of percentage identity multiplied by percentage coverage for each comparison + +.. figure:: images/matrix_identity_1.png + :alt: percentage identity matrix for *Candidatus Blochmannia* ANIm analysis + + Percentage identity matrix for *Candidatus Blochmannia* ANIm analysis + + Each cell represents a pairwise comparison between the named genomes on rows and columns, and the number in the cell is the pairwise identity *of aligned regions*. The dendrograms are single-linkage clustering trees generated from the matrix of pairwise identity results. The default colour scheme colours cells with identity > 0.95 as red, and those with < 0.95 as blue. This division corresponds to a widely-used convention for bacterial species boundaries. + +.. figure:: images/matrix_coverage_1.png + :alt: percentage coverage matrix for *Candidatus Blochmannia* ANIm analysis + + Percentage coverage matrix for *Candidatus Blochmannia* ANIm analysis + + Each cell represents a pairwise comparison between the named genomes on rows and columns, and the number in the cell is pairwise coverage of each genome by aligned regions in the comparison. The dendrograms are single-linkage clustering trees generated from the matrix of pairwise coverage results. The default colour scheme colours cells with identity > 0.50 as red, and those with < 0.50 as blue. This division corresponds to a strict majority of each genome in the comparison being alignable (a plausible minimum requirement for two sequences being considered "the same thing"). + +----------------------- +Understanding the plots +----------------------- + +For each of the ANI methods provided by `pyani` the values shown in the plots are calculated differently — as a result of the differences in method/output of the third-party tool being called. + +**Average nucleotide identity** is a measure of similarity between two genomes. Depending on the ANI method used, this may be symmetrical: comparing genome A to genome B is the same as comparing genome B to genome A; or asymmetrical: A --> B is different from B --> A. `pyani` provides both symmetrical and assymmetrical ANI methods: + + - ANIm — symmetrical + - FastANI — asymmetrical (only available in version 0.3.0-alpha) + - ANIb — asymmetrical (only available in version 0.2) + - ANIblastall — asymmetrical (only available in version 0.2) + - TETRA — (I don't know which this is) (only available in version 0.2) + +**Alignment coverage** is the proportion of the query genome that aligns against the reference genome (this can be asymmetrical: comparing genome A to genome B may give different coverage values for A and B). + + - in ANIm this is ``alignment_length / genome_length`` + - in fastANI this is ``matched_fragments / all_fragments`` + + +**Alignment length** is the count of bases in the pairwise alignment of two genomes. + + - in ANIm this is calculated as ``reference_length + insertions - deletions`` + - in fastANI this is ``matched_fragments * fragment_length`` + +The **similarity errors** graph shows a measure of the number of bases/positions that do not match. + + - in ANIm this is ``non-identities + insertions + deletions`` + - in fastANI this is ``all_fragments - matched_fragents`` + +The **Hadamard** ouptut is the product (identity x coverage), as described at `Hadamard product`_ of identity and coverage. It's meant to provide a measure that allows you to interpret identity and coverage simultaneously. + + - this is always ``ANI * coverage``, but the plot is not symmetric coverage may differ for query and reference genomes + +.. _Hadamard product: https://en.wikipedia.org/wiki/Hadamard_product_(matrices) From 99215a44c5f5fe6ea40bf50d1023feab6c45849d Mon Sep 17 00:00:00 2001 From: baileythegreen Date: Tue, 6 Jul 2021 13:31:53 +0100 Subject: [PATCH 02/74] Remove comment --- docs/interpreting_plots.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/interpreting_plots.rst b/docs/interpreting_plots.rst index 1efe4a0c..91285ac4 100644 --- a/docs/interpreting_plots.rst +++ b/docs/interpreting_plots.rst @@ -52,7 +52,7 @@ For each of the ANI methods provided by `pyani` the values shown in the plots ar - FastANI — asymmetrical (only available in version 0.3.0-alpha) - ANIb — asymmetrical (only available in version 0.2) - ANIblastall — asymmetrical (only available in version 0.2) - - TETRA — (I don't know which this is) (only available in version 0.2) + - TETRA — (only available in version 0.2) **Alignment coverage** is the proportion of the query genome that aligns against the reference genome (this can be asymmetrical: comparing genome A to genome B may give different coverage values for A and B). From 45e712fc359e481f4e2927af8badc134de63df3b Mon Sep 17 00:00:00 2001 From: baileythegreen Date: Fri, 9 Jul 2021 14:33:58 +0100 Subject: [PATCH 03/74] Move `interpreting_plots` to the `basic_use` menu --- docs/basic_use.rst | 2 +- docs/index.rst | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/basic_use.rst b/docs/basic_use.rst index 1f1e9289..dc43d44d 100644 --- a/docs/basic_use.rst +++ b/docs/basic_use.rst @@ -12,4 +12,4 @@ Basic Use indexing createdb run_anim - + interpreting_plots diff --git a/docs/index.rst b/docs/index.rst index 9f469e42..71d7b05d 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -90,7 +90,6 @@ If you'd like to fix a bug or make an improvement yourself, contributions are we basic_use examples subcommands - interpreting_plots scheduler testing contributing From e48d04bcb2deef376b93927fe83807c32c410061 Mon Sep 17 00:00:00 2001 From: baileythegreen Date: Fri, 9 Jul 2021 14:34:40 +0100 Subject: [PATCH 04/74] Fill in missing information on `ANIb`, `ANIblastall`, and `Tetra` --- docs/interpreting_plots.rst | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/docs/interpreting_plots.rst b/docs/interpreting_plots.rst index 91285ac4..27e53d8f 100644 --- a/docs/interpreting_plots.rst +++ b/docs/interpreting_plots.rst @@ -50,28 +50,34 @@ For each of the ANI methods provided by `pyani` the values shown in the plots ar - ANIm — symmetrical - FastANI — asymmetrical (only available in version 0.3.0-alpha) - - ANIb — asymmetrical (only available in version 0.2) - - ANIblastall — asymmetrical (only available in version 0.2) - - TETRA — (only available in version 0.2) - -**Alignment coverage** is the proportion of the query genome that aligns against the reference genome (this can be asymmetrical: comparing genome A to genome B may give different coverage values for A and B). - - - in ANIm this is ``alignment_length / genome_length`` - - in fastANI this is ``matched_fragments / all_fragments`` + - ANIb — asymmetrical + - ANIblastall — asymmetrical + - TETRA — symmetrical **Alignment length** is the count of bases in the pairwise alignment of two genomes. - - in ANIm this is calculated as ``reference_length + insertions - deletions`` + - in ANIm this is calculated as ``reference_positions_in_alignment + insertions - deletions`` - in fastANI this is ``matched_fragments * fragment_length`` + - in ANIb this is ``alignment_length - gaps - mismatches`` + - in ANIblastall this is ``alignment_length - gaps - mismatches`` + + **Alignment coverage** is the proportion of the query genome that aligns against the reference genome (this can be asymmetrical: comparing genome A to genome B may give different coverage values for A and B). + + - in ANIm this is ``alignment_length / genome_length`` (asymmetrical) + - in fastANI this is ``matched_fragments / all_fragments`` (asymmetrical) + - in ANIb this is ``alignment_length / query_genome_length`` (asymmetrical) + - in ANIblastall this is ``alignment_length / query_genome_length`` (asymmetrical) The **similarity errors** graph shows a measure of the number of bases/positions that do not match. - in ANIm this is ``non-identities + insertions + deletions`` - in fastANI this is ``all_fragments - matched_fragents`` + - in ANIb this is ``gaps + mismatches`` + - in ANIblastall this is ``gaps + mismatches`` The **Hadamard** ouptut is the product (identity x coverage), as described at `Hadamard product`_ of identity and coverage. It's meant to provide a measure that allows you to interpret identity and coverage simultaneously. - - this is always ``ANI * coverage``, but the plot is not symmetric coverage may differ for query and reference genomes + - this is always ``ANI * coverage``, but as the plot is not symmetric, coverage may differ for query and reference genomes .. _Hadamard product: https://en.wikipedia.org/wiki/Hadamard_product_(matrices) From ab90a5076a5df4c5089e623360e2ee82484a9199 Mon Sep 17 00:00:00 2001 From: baileythegreen Date: Fri, 9 Jul 2021 15:01:41 +0100 Subject: [PATCH 05/74] Update `.md5` file names in docs `pyani` now retains the original extension when hash files are created --- README.md | 14 +++++++------- docs/download.rst | 16 ++++++++-------- docs/indexing.rst | 8 ++++---- docs/quickstart.rst | 2 +- 4 files changed, 20 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index 354574ec..ae34f99b 100644 --- a/README.md +++ b/README.md @@ -249,27 +249,27 @@ $ tree C_blochmannia C_blochmannia ├── GCF_000011745.1_ASM1174v1_genomic.fna ├── GCF_000011745.1_ASM1174v1_genomic.fna.gz -├── GCF_000011745.1_ASM1174v1_genomic.md5 +├── GCF_000011745.1_ASM1174v1_genomic.fna.md5 ├── GCF_000011745.1_ASM1174v1_hashes.txt ├── GCF_000043285.1_ASM4328v1_genomic.fna ├── GCF_000043285.1_ASM4328v1_genomic.fna.gz -├── GCF_000043285.1_ASM4328v1_genomic.md5 +├── GCF_000043285.1_ASM4328v1_genomic.fna.md5 ├── GCF_000043285.1_ASM4328v1_hashes.txt ├── GCF_000185985.2_ASM18598v2_genomic.fna ├── GCF_000185985.2_ASM18598v2_genomic.fna.gz -├── GCF_000185985.2_ASM18598v2_genomic.md5 +├── GCF_000185985.2_ASM18598v2_genomic.fna.md5 ├── GCF_000185985.2_ASM18598v2_hashes.txt ├── GCF_000331065.1_ASM33106v1_genomic.fna ├── GCF_000331065.1_ASM33106v1_genomic.fna.gz -├── GCF_000331065.1_ASM33106v1_genomic.md5 +├── GCF_000331065.1_ASM33106v1_genomic.fna.md5 ├── GCF_000331065.1_ASM33106v1_hashes.txt ├── GCF_000973505.1_ASM97350v1_genomic.fna ├── GCF_000973505.1_ASM97350v1_genomic.fna.gz -├── GCF_000973505.1_ASM97350v1_genomic.md5 +├── GCF_000973505.1_ASM97350v1_genomic.fna.md5 ├── GCF_000973505.1_ASM97350v1_hashes.txt ├── GCF_000973545.1_ASM97354v1_genomic.fna ├── GCF_000973545.1_ASM97354v1_genomic.fna.gz -├── GCF_000973545.1_ASM97354v1_genomic.md5 +├── GCF_000973545.1_ASM97354v1_genomic.fna.md5 ├── GCF_000973545.1_ASM97354v1_hashes.txt ├── classes.txt └── labels.txt @@ -279,7 +279,7 @@ Seven genomes have been downloaded, and each is represented by four files: - `_genomic.fna.gz`: the compressed genome sequence - `_genomic.fna`: the uncompressed genome sequence -- `_genomic.md5`: an MD5 hash/checksum of the (uncompressed) genome sequence; this was generated during the download +- `_genomic.fna.md5`: an MD5 hash/checksum of the (uncompressed) genome sequence; this was generated during the download - `_hashes.txt`: a list of MD5 hashes; this is provided by NCBI and is a reference to be sure that the download did not corrupt the genome sequence There are two additional plain text files: `classes.txt` and `labels.txt`, which provide alternative labels for use in the analysis. These files are generated during the download. diff --git a/docs/download.rst b/docs/download.rst index 49ae1cd4..912a5bcb 100644 --- a/docs/download.rst +++ b/docs/download.rst @@ -47,23 +47,23 @@ This displays each assembly as a download is attempted, and places all output in genomes/ ├── GCA_001312105.1_ASM131210v1_genomic.fna ├── GCA_001312105.1_ASM131210v1_genomic.fna.gz - ├── GCA_001312105.1_ASM131210v1_genomic.md5 + ├── GCA_001312105.1_ASM131210v1_genomic.fna.md5 ├── GCA_001312105.1_ASM131210v1_hashes.txt ├── GCF_000802425.1_ASM80242v1_genomic.fna ├── GCF_000802425.1_ASM80242v1_genomic.fna.gz - ├── GCF_000802425.1_ASM80242v1_genomic.md5 + ├── GCF_000802425.1_ASM80242v1_genomic.fna.md5 ├── GCF_000802425.1_ASM80242v1_hashes.txt ├── GCF_000806415.1_ASM80641v1_genomic.fna ├── GCF_000806415.1_ASM80641v1_genomic.fna.gz - ├── GCF_000806415.1_ASM80641v1_genomic.md5 + ├── GCF_000806415.1_ASM80641v1_genomic.fna.md5 ├── GCF_000806415.1_ASM80641v1_hashes.txt ├── GCF_900101515.1_IMG-taxon_2596583557_annotated_assembly_genomic.fna ├── GCF_900101515.1_IMG-taxon_2596583557_annotated_assembly_genomic.fna.gz - ├── GCF_900101515.1_IMG-taxon_2596583557_annotated_assembly_genomic.md5 + ├── GCF_900101515.1_IMG-taxon_2596583557_annotated_assembly_genomic.fna.md5 ├── GCF_900101515.1_IMG-taxon_2596583557_annotated_assembly_hashes.txt ├── GCF_900155995.1_IMG-taxon_2681812811_annotated_assembly_genomic.fna ├── GCF_900155995.1_IMG-taxon_2681812811_annotated_assembly_genomic.fna.gz - ├── GCF_900155995.1_IMG-taxon_2681812811_annotated_assembly_genomic.md5 + ├── GCF_900155995.1_IMG-taxon_2681812811_annotated_assembly_genomic.fna.md5 ├── GCF_900155995.1_IMG-taxon_2681812811_annotated_assembly_hashes.txt ├── classes.txt └── labels.txt @@ -72,7 +72,7 @@ Each genome is downloaded in compressed format (``.fna.gz`` files) and expanded .. code-block:: bash - $ head genomes/GCA_001312105.1_ASM131210v1_genomic.md5 + $ head genomes/GCA_001312105.1_ASM131210v1_genomic.fna.md5 e55cd3d913a198ac60afd8d509c02ab4 genomes/GCA_001312105.1_ASM131210v1_genomic.fna ``pyani`` also creates two files: @@ -169,9 +169,9 @@ Using this option does affects downstream performance or use of ``pyani`` only i .. code-block:: bash - $ head multi_taxa/GCA_001312105.1_ASM131210v1_genomic.md5 + $ head multi_taxa/GCA_001312105.1_ASM131210v1_genomic.fna.md5 e55cd3d913a198ac60afd8d509c02ab4 multi_taxa/GCA_001312105.1_ASM131210v1_genomic.fna - $ head genomes_kraken/GCA_001312105.1_ASM131210v1_genomic.md5 + $ head genomes_kraken/GCA_001312105.1_ASM131210v1_genomic.fna.md5 053fd98d8c9ab30de46f56fd601ef529 genomes_kraken/GCA_001312105.1_ASM131210v1_genomic.fna and so will not be considered to be the "same sequence" when repeating comparisons. diff --git a/docs/indexing.rst b/docs/indexing.rst index aba7ceda..4aeeefd0 100644 --- a/docs/indexing.rst +++ b/docs/indexing.rst @@ -56,11 +56,11 @@ We could run the ``pyani index`` command: $ tree unindexed unindexed ├── GCA_001312105.1_ASM131210v1_genomic.fna - ├── GCA_001312105.1_ASM131210v1_genomic.md5 + ├── GCA_001312105.1_ASM131210v1_genomic.fna.md5 ├── GCF_000834555.1_ASM83455v1_genomic.fna - ├── GCF_000834555.1_ASM83455v1_genomic.md5 + ├── GCF_000834555.1_ASM83455v1_genomic.fna.md5 ├── GCF_005796105.1_ASM579610v1_genomic.fna - ├── GCF_005796105.1_ASM579610v1_genomic.md5 + ├── GCF_005796105.1_ASM579610v1_genomic.fna.md5 ├── classes.txt └── labels.txt @@ -72,7 +72,7 @@ This creates an ``.md5`` file for each genome, and corresponding ``classes.txt`` >BBCY01000001.1 Pseudomonas tuomuerensis JCM 14085 DNA, contig: JCM14085.contig00001, whole genome shotgun sequence ACCAGCATCTGGCGGATCAGGTCGCGGGCCTTCTCGGCCGATTGGCGGATGCGCCCGAGGTAGCGGCCGAGCGGCGCGTC GCCGCGCTCGCCCGCCAGCTCCTCGGCCATCTGCGTGTAGCCGAGCATGCTGGTCAGCAGGTTGTTGAAGTCGTGGGCAA - $ head unindexed/GCA_001312105.1_ASM131210v1_genomic.md5 + $ head unindexed/GCA_001312105.1_ASM131210v1_genomic.fna.md5 e55cd3d913a198ac60afd8d509c02ab4 unindexed/GCA_001312105.1_ASM131210v1_genomic.fna $ head unindexed/classes.txt 527f35b3eb9dd371d8d5309b6043dd9f GCF_000834555.1_ASM83455v1_genomic Pseudomonas fulva strain MEJ086 contig_1, whole genome shotgun sequence diff --git a/docs/quickstart.rst b/docs/quickstart.rst index 489d5c7d..b369f7da 100644 --- a/docs/quickstart.rst +++ b/docs/quickstart.rst @@ -98,7 +98,7 @@ This creates a new directory (``C_blochmannia``) with the following contents: C_blochmannia ├── GCF_000011745.1_ASM1174v1_genomic.fna ├── GCF_000011745.1_ASM1174v1_genomic.fna.gz - ├── GCF_000011745.1_ASM1174v1_genomic.md5 + ├── GCF_000011745.1_ASM1174v1_genomic.fna.md5 [...] ├── GCF_000973545.1_ASM97354v1_hashes.txt ├── classes.txt From 6c964bc9153b2a0973ed92c4122b4e73cff068ad Mon Sep 17 00:00:00 2001 From: baileythegreen Date: Sun, 11 Jul 2021 21:57:48 +0100 Subject: [PATCH 06/74] Test for `create_hash` when the 'file' given does not exist --- tests/test_subcmd_01_download.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/tests/test_subcmd_01_download.py b/tests/test_subcmd_01_download.py index bfa437ec..05328a2d 100644 --- a/tests/test_subcmd_01_download.py +++ b/tests/test_subcmd_01_download.py @@ -66,6 +66,7 @@ import pytest +from pyani import download from pyani.scripts import subcommands from tools import modify_namespace @@ -111,6 +112,16 @@ def kraken_namespace(base_download_namespace, tmp_path): ) +# Create object for accessing unittest assertions +assertions = TestCase("__init__") + + +def test_create_hash(): + test_file = "/this/is/not/a/file" + with assertions.assertRaises(download.PyaniIndexException): + download.create_hash(test_file) + + def test_download_dry_run(dryrun_namespace): """Dry run of C. blochmannia download.""" subcommands.subcmd_download(dryrun_namespace) From 290c0ff7a3b2f0ecb5c1f72b27504ea92e57b016 Mon Sep 17 00:00:00 2001 From: baileythegreen Date: Sun, 11 Jul 2021 22:01:35 +0100 Subject: [PATCH 07/74] Add docstring to `test_create_hash` --- tests/test_subcmd_01_download.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/test_subcmd_01_download.py b/tests/test_subcmd_01_download.py index 05328a2d..095494ad 100644 --- a/tests/test_subcmd_01_download.py +++ b/tests/test_subcmd_01_download.py @@ -117,6 +117,7 @@ def kraken_namespace(base_download_namespace, tmp_path): def test_create_hash(): + """Test that the expected exception is raised if the file doesn't exist.""" test_file = "/this/is/not/a/file" with assertions.assertRaises(download.PyaniIndexException): download.create_hash(test_file) From c0c044c3fe8d4e2202d410c63be27d186288dc8d Mon Sep 17 00:00:00 2001 From: baileythegreen Date: Thu, 22 Jul 2021 11:45:08 +0100 Subject: [PATCH 08/74] Change `sns.distplot` to other plot types `sns.distplot` is being deprecated at some point in the future --- pyani/pyani_graphics/sns/__init__.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/pyani/pyani_graphics/sns/__init__.py b/pyani/pyani_graphics/sns/__init__.py index 85451d1a..8c516277 100644 --- a/pyani/pyani_graphics/sns/__init__.py +++ b/pyani/pyani_graphics/sns/__init__.py @@ -178,12 +178,9 @@ def distribution(dfr, outfilename, matname, title=None): """ fig, axes = plt.subplots(1, 2, figsize=(15, 5)) fig.suptitle(title) - sns.distplot( - dfr.values.flatten(), kde=False, rug=False, ax=axes[0], norm_hist=False - ) - sns.distplot( - dfr.values.flatten(), hist=False, rug=True, ax=axes[1], norm_hist=False - ) + sns.histplot(dfr.values.flatten(), ax=axes[0], stat="count") + sns.kdeplot(dfr.values.flatten(), ax=axes[1]) + sns.rugplot(dfr.values.flatten(), ax=axes[1]) # Modify axes after data is plotted for _ in axes: From 45110e98bcbab79fb86a74568d903a5cd7df84f2 Mon Sep 17 00:00:00 2001 From: baileythegreen Date: Thu, 22 Jul 2021 12:17:40 +0100 Subject: [PATCH 09/74] =?UTF-8?q?Fixed=20plot=20=C3=A6sthetics=20to=20matc?= =?UTF-8?q?h=20previous=20output=20from=20`sns.distplot`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pyani/pyani_graphics/sns/__init__.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/pyani/pyani_graphics/sns/__init__.py b/pyani/pyani_graphics/sns/__init__.py index 8c516277..3c42daa1 100644 --- a/pyani/pyani_graphics/sns/__init__.py +++ b/pyani/pyani_graphics/sns/__init__.py @@ -176,11 +176,21 @@ def distribution(dfr, outfilename, matname, title=None): :param matname: str, type of matrix being plotted :param title: str, optional title """ + fill = "#A6C8E0" + rug = "#2678B2" fig, axes = plt.subplots(1, 2, figsize=(15, 5)) fig.suptitle(title) - sns.histplot(dfr.values.flatten(), ax=axes[0], stat="count") + sns.histplot( + dfr.values.flatten(), + ax=axes[0], + stat="count", + element="step", + color=fill, + edgecolor=fill, + ) + axes[0].set_ylim(ymin=0) sns.kdeplot(dfr.values.flatten(), ax=axes[1]) - sns.rugplot(dfr.values.flatten(), ax=axes[1]) + sns.rugplot(dfr.values.flatten(), ax=axes[1], color=rug) # Modify axes after data is plotted for _ in axes: From 705d57d4c5f006c676db9e663718cbb6c0f02686 Mon Sep 17 00:00:00 2001 From: baileythegreen Date: Mon, 26 Jul 2021 23:31:34 +0100 Subject: [PATCH 10/74] Add `scatter()` to `pyani_graphics/sns/__init__.py` --- pyani/pyani_graphics/sns/__init__.py | 43 ++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/pyani/pyani_graphics/sns/__init__.py b/pyani/pyani_graphics/sns/__init__.py index 85451d1a..09cea2c1 100644 --- a/pyani/pyani_graphics/sns/__init__.py +++ b/pyani/pyani_graphics/sns/__init__.py @@ -203,3 +203,46 @@ def distribution(dfr, outfilename, matname, title=None): fig.savefig(outfilename) return fig + + +def scatter( + dfr1, + dfr2, + outfilename, + matname1="identity", + matname2="coverage", + title=None, + params=None, +): + """ """ + # Make an empty dataframe to collect the input data in + combined = pd.DataFrame() + + # Add data + combined[matname1] = dfr1.values.flatten() + combined[matname2] = dfr2.values.flatten() + + # Add lable information, if available + if params.labels: + hue = "labels" + # combined['labels'] = # add labels to dataframe; unsure of their configuration at this point + else: + hue = None + + # Create the plot + fig = sns.lmplot( + x=matname1, + y=matname2, + data=combined, + hue=hue, + fit_reg=False, + scatter_kws={"s": 2}, + ) + plt.title(f"{title}") + + # Save to file + if outfilename: + fig.savefig(outfilename) + + # Return clustermap + return fig From be97c4956d17cb4b9bb95ee795997e22f423182b Mon Sep 17 00:00:00 2001 From: baileythegreen Date: Thu, 29 Jul 2021 17:39:57 +0100 Subject: [PATCH 11/74] Add `scatter()` to `pyani_graphics/mpl/__init__.py` --- pyani/pyani_graphics/mpl/__init__.py | 48 ++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/pyani/pyani_graphics/mpl/__init__.py b/pyani/pyani_graphics/mpl/__init__.py index 7b325b21..6981c85d 100644 --- a/pyani/pyani_graphics/mpl/__init__.py +++ b/pyani/pyani_graphics/mpl/__init__.py @@ -358,3 +358,51 @@ def heatmap(dfr, outfilename=None, title=None, params=None): if outfilename: fig.savefig(outfilename) return fig + + +def scatter( + dfr1, + dfr2, + outfilename=None, + matname1="identity", + matname2="coverage", + title=None, + params=None, +): + """Return matplotlib scatterplot. + + :param dfr1: pandas DataFrame with x-axis data + :param dfr2: pandas DataFrame with y-axis data + :param outfilename: path to output file (indicates output format) + :param matname1: name of x-axis data + :param matname2: name of y-axis data + :param title: title for the plot + :param params: a list of parameters for plotting: [colormap, vmin, vmax] + """ + # Make an empty dataframe to collect the input data in + combined = pd.DataFrame() + + # Add data + combined[matname1] = dfr1.values.flatten() + combined[matname2] = dfr2.values.flatten() + + # Add lable information, if available + # if params.labels: + # hue = "labels" + # combined['labels'] = # add labels to dataframe; unsure of their configuration at this point + # else: + hue = None + + fig = plt.figure(figsize=(8, 8)) + fig.suptitle(title) + fig.supxlabel(f"{matname1.title()}") + fig.supylabel(f"{matname2.title()}") + + plt.scatter(matname1, matname2, data=combined, c=hue, s=2) + + # Return figure output, and write, if required + plt.subplots_adjust(top=0.85) # Leave room for title + fig.set_tight_layout(True) + if outfilename: + fig.savefig(outfilename) + return fig From faa31c5cdda97930b040ffa46dcc47fff23c2d92 Mon Sep 17 00:00:00 2001 From: baileythegreen Date: Thu, 29 Jul 2021 17:40:14 +0100 Subject: [PATCH 12/74] Modify `pyani_graphics.sns.scatter()` --- pyani/pyani_graphics/sns/__init__.py | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/pyani/pyani_graphics/sns/__init__.py b/pyani/pyani_graphics/sns/__init__.py index 09cea2c1..78045815 100644 --- a/pyani/pyani_graphics/sns/__init__.py +++ b/pyani/pyani_graphics/sns/__init__.py @@ -208,13 +208,22 @@ def distribution(dfr, outfilename, matname, title=None): def scatter( dfr1, dfr2, - outfilename, + outfilename=None, matname1="identity", matname2="coverage", title=None, params=None, ): - """ """ + """Return seaborn scatterplot. + + :param dfr1: pandas DataFrame with x-axis data + :param dfr2: pandas DataFrame with y-axis data + :param outfilename: path to output file (indicates output format) + :param matname1: name of x-axis data + :param matname2: name of y-axis data + :param title: title for the plot + :param params: a list of parameters for plotting: [colormap, vmin, vmax] + """ # Make an empty dataframe to collect the input data in combined = pd.DataFrame() @@ -223,11 +232,11 @@ def scatter( combined[matname2] = dfr2.values.flatten() # Add lable information, if available - if params.labels: - hue = "labels" - # combined['labels'] = # add labels to dataframe; unsure of their configuration at this point - else: - hue = None + # if params.labels: + # hue = "labels" + # combined['labels'] = # add labels to dataframe; unsure of their configuration at this point + # else: + hue = None # Create the plot fig = sns.lmplot( @@ -238,7 +247,8 @@ def scatter( fit_reg=False, scatter_kws={"s": 2}, ) - plt.title(f"{title}") + fig.set(xlabel=matname1.title(), ylabel=matname2.title()) + plt.title(title) # Save to file if outfilename: From 6b2b20434614455297be75d8e7c79f39ea52021c Mon Sep 17 00:00:00 2001 From: baileythegreen Date: Thu, 29 Jul 2021 17:43:59 +0100 Subject: [PATCH 13/74] Add `write_scatter()` to `scripts/subcommands/subcmd_plot.py` --- pyani/scripts/subcommands/subcmd_plot.py | 65 ++++++++++++++++++++++-- 1 file changed, 62 insertions(+), 3 deletions(-) diff --git a/pyani/scripts/subcommands/subcmd_plot.py b/pyani/scripts/subcommands/subcmd_plot.py index 86ded7b5..8c3d9887 100644 --- a/pyani/scripts/subcommands/subcmd_plot.py +++ b/pyani/scripts/subcommands/subcmd_plot.py @@ -52,9 +52,9 @@ from pyani import pyani_config, pyani_orm, pyani_graphics from pyani.pyani_tools import termcolor, MatrixData - # Distribution dictionary of matrix graphics methods GMETHODS = {"mpl": pyani_graphics.mpl.heatmap, "seaborn": pyani_graphics.sns.heatmap} +SMETHODS = {"mpl": pyani_graphics.mpl.scatter, "seaborn": pyani_graphics.sns.scatter} # Distribution dictionary of distribution graphics methods DISTMETHODS = { "mpl": pyani_graphics.mpl.distribution, @@ -114,7 +114,9 @@ def write_run_heatmaps( ) result_label_dict = pyani_orm.get_matrix_labels_for_run(session, args.run_id) result_class_dict = pyani_orm.get_matrix_classes_for_run(session, args.run_id) - logger.debug(f"Have {len(result_label_dict)} labels and {len(result_class_dict)} classes") + logger.debug( + f"Have {len(result_label_dict)} labels and {len(result_class_dict)} classes" + ) # Write heatmap for each results matrix for matdata in [ @@ -131,10 +133,22 @@ def write_run_heatmaps( run_id, matdata, result_label_dict, result_class_dict, outfmts, args ) write_distribution(run_id, matdata, outfmts, args) + write_scatter( + run_id, + MatrixData("identity", pd.read_json(results.df_identity), {}), + MatrixData("coverage", pd.read_json(results.df_coverage), {}), + result_label_dict, + result_class_dict, + outfmts, + args, + ) def write_distribution( - run_id: int, matdata: MatrixData, outfmts: List[str], args: Namespace, + run_id: int, + matdata: MatrixData, + outfmts: List[str], + args: Namespace, ) -> None: """Write distribution plots for each matrix type. @@ -192,3 +206,48 @@ def write_heatmap( # Be tidy with matplotlib caches plt.close("all") + + +def write_scatter( + run_id: int, + matdata1: MatrixData, + matdata2: MatrixData, + result_labels: Dict, + result_classes: Dict, + outfmts: List[str], + args: Namespace, +) -> None: + """Write a single scatterplot for a pyani run. + + :param run_id: int, run_id for this run + :param matdata1: MatrixData object for this scatterplot + :param matdata2: MatrixData object for this scatterplot + :param result_labels: dict of result labels + :param result_classes: dict of result classes + :param args: Namespace for command-line arguments + :param outfmts: list of output formats for files + """ + logger = logging.getLogger(__name__) + + logger.info("Writing %s vs %s scatterplot", matdata1.name, matdata2.name) + cmap = pyani_config.get_colormap(matdata1.data, matdata1.name) + for fmt in outfmts: + outfname = ( + Path(args.outdir) + / f"scatter_{matdata1.name}_vs_{matdata2.name}_run{run_id}.{fmt}" + ) + logger.debug("\tWriting graphics to %s", outfname) + params = pyani_graphics.Params(cmap, result_labels, result_classes) + # Draw scatterplot + SMETHODS[args.method]( + matdata1.data, + matdata2.data, + outfname, + matdata1.name, + matdata2.name, + title=f"{matdata1.name.title()} vs {matdata2.name.title()}", + params=params, + ) + + # Be tidy with matplotlib caches + plt.close("all") From 6dcf004ae3e9b4ea01a2eda3f0aad7dc7e08b045 Mon Sep 17 00:00:00 2001 From: baileythegreen Date: Thu, 29 Jul 2021 17:48:58 +0100 Subject: [PATCH 14/74] Add scatter plots to tests --- tests/test_graphics.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/tests/test_graphics.py b/tests/test_graphics.py index 4b4321ea..f229a443 100644 --- a/tests/test_graphics.py +++ b/tests/test_graphics.py @@ -81,6 +81,7 @@ def draw_format_method(fmt, mth, graphics_inputs, tmp_path): """Render graphics format and method output.""" df = pd.read_csv(graphics_inputs.filename, index_col=0, sep="\t") fn = {"mpl": pyani_graphics.mpl.heatmap, "seaborn": pyani_graphics.sns.heatmap} + sc = {"mpl": pyani_graphics.mpl.scatter, "seaborn": pyani_graphics.sns.scatter} params = {"mpl": pyani_config.params_mpl, "seaborn": pyani_config.params_mpl} method_params = pyani_graphics.Params( params[mth](df)["ANIm_percentage_identity"], @@ -90,6 +91,15 @@ def draw_format_method(fmt, mth, graphics_inputs, tmp_path): fn[mth]( df, tmp_path / f"{mth}.{fmt}", title=f"{mth}:{fmt} test", params=method_params ) + sc[mth]( + df, + df, + tmp_path / f"{mth}.{fmt}", + "matrix1", + "matrix2", + title=f"{mth}:{fmt} test", + params=method_params, + ) def test_png_mpl(graphics_inputs, tmp_path): From 7781112abb5ea23741dd0c2fc13ab71606ef9c67 Mon Sep 17 00:00:00 2001 From: baileythegreen Date: Thu, 29 Jul 2021 18:59:37 +0100 Subject: [PATCH 15/74] Replace `fig.supxlabel()` with `fig.xlabel()` and the same for y `fig.supxlabel()`, et cetera threw an error with python 3.6 --- pyani/pyani_graphics/mpl/__init__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyani/pyani_graphics/mpl/__init__.py b/pyani/pyani_graphics/mpl/__init__.py index 6981c85d..10a08611 100644 --- a/pyani/pyani_graphics/mpl/__init__.py +++ b/pyani/pyani_graphics/mpl/__init__.py @@ -395,8 +395,8 @@ def scatter( fig = plt.figure(figsize=(8, 8)) fig.suptitle(title) - fig.supxlabel(f"{matname1.title()}") - fig.supylabel(f"{matname2.title()}") + fig.xlabel(f"{matname1.title()}") + fig.ylabel(f"{matname2.title()}") plt.scatter(matname1, matname2, data=combined, c=hue, s=2) From 226de95445e0d44703de9eed0f02deb367a1c594 Mon Sep 17 00:00:00 2001 From: baileythegreen Date: Sat, 4 Sep 2021 17:41:03 +0100 Subject: [PATCH 16/74] Alter `scatter()` to use `plt.subplots()` to provide an `ax` object Also change label commands to use the `set` versions. Trying to find commands that work in `matplotlib 3.3.4` which is used by `python 3.6`. --- pyani/pyani_graphics/mpl/__init__.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pyani/pyani_graphics/mpl/__init__.py b/pyani/pyani_graphics/mpl/__init__.py index 10a08611..a2ae3137 100644 --- a/pyani/pyani_graphics/mpl/__init__.py +++ b/pyani/pyani_graphics/mpl/__init__.py @@ -393,10 +393,10 @@ def scatter( # else: hue = None - fig = plt.figure(figsize=(8, 8)) + fig, ax = plt.subplots(figsize=(8, 8)) fig.suptitle(title) - fig.xlabel(f"{matname1.title()}") - fig.ylabel(f"{matname2.title()}") + ax.set_xlabel(f"{matname1.title()}") + ax.set_ylabel(f"{matname2.title()}") plt.scatter(matname1, matname2, data=combined, c=hue, s=2) From d0086a25702967b423a7208d606fee3fd9b24622 Mon Sep 17 00:00:00 2001 From: baileythegreen Date: Sat, 4 Sep 2021 19:27:23 +0100 Subject: [PATCH 17/74] Fix CircleCI `apt-get update` test breaker --- .circleci/config.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 1fa43e31..3c855796 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -47,7 +47,8 @@ jobs: - run: name: update apt-get command: | - sudo apt-get update + sudo apt-get update --allow-releaseinfo-change + sudo apt-get upgrade - run: name: install third-party tools command: | From 4897c6dd63484cbbb4adb150f7873034ab77417d Mon Sep 17 00:00:00 2001 From: baileythegreen Date: Mon, 6 Sep 2021 21:21:53 +0100 Subject: [PATCH 18/74] Mention `pip install -e .` in install instructions ofr developers --- CONTRIBUTING.md | 16 +++++++++++++++- docs/contributing.rst | 1 + 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 8669c669..85a26272 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -97,6 +97,20 @@ This will install all dependencies for running and developing `pyani`, as well a make test ``` +If you want to be able to edit source files and have those changes take immediate effect when calling `pyani` (useful for testing), clone the GitHub repository with: + +```bash +git clone https://github.com/widdowquinn/pyani.git +``` + +, then inside the new `pyani` directory run: + +```bash +pip install -e . +``` + +This will add `pyani` to your path, and allow you to test changes as you make them. + #### Cleaning up development environment You can remove the `conda` development environment with the following commands: @@ -219,7 +233,7 @@ A good long description could be > This fix improves efficiency of the veeblefetzer. The main change is replacing a > nested loop with asyncio calls to a new function `fetzveebles()`. This commit > makes affects `veebles.py`, and new tests are added in `test_veeblefetzer.py`. -> +> > fixes #246 A bad long description might be diff --git a/docs/contributing.rst b/docs/contributing.rst index 46745d46..b1fd5716 100644 --- a/docs/contributing.rst +++ b/docs/contributing.rst @@ -82,6 +82,7 @@ Making changes and pull requests 1. Fork the ``pyani`` `repository`_ under your account at `GitHub`_. 2. Clone your fork to your development machine. +2a. To be able to run `pyani` and have changes you make take effect (useful for testing), you can run `pip install -e .` inside the local cloned repository. 3. Create a new branch in your forked repository with an informative name like ``fix_issue_107``, using ``git`` (e.g. with the command ``git checkout -b fix_issue_107``). 4. Make the changes you need and commit them to your local branch. 5. Run the repository tests (see the :ref:`pyani-testing` documentation for more details). From 752271a362ddfe223e90f3db3a68ff4f6af82bda Mon Sep 17 00:00:00 2001 From: Leighton Pritchard Date: Tue, 7 Sep 2021 06:59:24 +0100 Subject: [PATCH 19/74] extend the pip install -e. description text --- CONTRIBUTING.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 85a26272..391b5f3e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -103,13 +103,13 @@ If you want to be able to edit source files and have those changes take immediat git clone https://github.com/widdowquinn/pyani.git ``` -, then inside the new `pyani` directory run: +then inside the new `pyani` directory run: ```bash pip install -e . ``` -This will add `pyani` to your path, and allow you to test changes as you make them. +This is the [`pip install --editable`](https://pip.pypa.io/en/stable/cli/pip_install/#install-editable) command, which links the installed package to the specified location (here `.`, i.e. the current directory) rather than the usual package location (`site-packages`). When using this option, edits to the source code are immediately available in the installed package. This allows you to test changes to the source code as you make them, without the need for an additional uninstall/install step. #### Cleaning up development environment From 50c4c56edf4532856ca03c85255038caff224d1c Mon Sep 17 00:00:00 2001 From: Leighton Pritchard Date: Tue, 7 Sep 2021 07:00:59 +0100 Subject: [PATCH 20/74] extend pip install -e . text --- docs/contributing.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/contributing.rst b/docs/contributing.rst index b1fd5716..74a62c99 100644 --- a/docs/contributing.rst +++ b/docs/contributing.rst @@ -82,7 +82,7 @@ Making changes and pull requests 1. Fork the ``pyani`` `repository`_ under your account at `GitHub`_. 2. Clone your fork to your development machine. -2a. To be able to run `pyani` and have changes you make take effect (useful for testing), you can run `pip install -e .` inside the local cloned repository. + - To be able to edit `pyani` and have changes you make take effect immediately without a reinstall (useful for testing), you can run `pip install -e .` inside the local cloned repository. 3. Create a new branch in your forked repository with an informative name like ``fix_issue_107``, using ``git`` (e.g. with the command ``git checkout -b fix_issue_107``). 4. Make the changes you need and commit them to your local branch. 5. Run the repository tests (see the :ref:`pyani-testing` documentation for more details). From 442d2028f8047cdbf21fc67f26e945496f24c5c2 Mon Sep 17 00:00:00 2001 From: widdowquinn Date: Tue, 7 Sep 2021 15:54:34 +0100 Subject: [PATCH 21/74] update Makefile walkthrough to reflect CLI changes --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index e5fa34d2..bdf7101b 100644 --- a/Makefile +++ b/Makefile @@ -41,7 +41,7 @@ clean_walkthrough: walkthrough: clean_walkthrough pyani download --email my.email@my.domain -t 203804 C_blochmannia pyani createdb -f - pyani anim C_blochmannia C_blochmannia_ANIm \ + pyani anim -i C_blochmannia -o C_blochmannia_ANIm \ --name "C. blochmannia run 1" \ --labels C_blochmannia/labels.txt --classes C_blochmannia/classes.txt pyani report --runs C_blochmannia_ANIm/ --formats html,excel,stdout From c652256a59ba2d3bb53f278350ead4d0ec5a08f2 Mon Sep 17 00:00:00 2001 From: baileythegreen Date: Tue, 7 Sep 2021 17:39:33 +0100 Subject: [PATCH 22/74] Update parsers to not use positional arguments --- pyani/scripts/parsers/anib_parser.py | 3 +++ pyani/scripts/parsers/aniblastall_parser.py | 20 ++++++++++++++++++++ pyani/scripts/parsers/anim_parser.py | 3 ++- pyani/scripts/parsers/classify_parser.py | 18 ++++++++++++++---- pyani/scripts/parsers/download_parser.py | 10 ++++++++-- pyani/scripts/parsers/index_parser.py | 10 ++++++++-- pyani/scripts/parsers/plot_parser.py | 12 +++++++++--- pyani/scripts/parsers/report_parser.py | 4 +++- 8 files changed, 67 insertions(+), 13 deletions(-) diff --git a/pyani/scripts/parsers/anib_parser.py b/pyani/scripts/parsers/anib_parser.py index 7473afc8..e56e9644 100644 --- a/pyani/scripts/parsers/anib_parser.py +++ b/pyani/scripts/parsers/anib_parser.py @@ -63,8 +63,10 @@ def build( parser = subps.add_parser( "anib", parents=parents, formatter_class=ArgumentDefaultsHelpFormatter ) + # Required arguments: input and output directories parser.add_argument( "-i", + "--indir", action="store", dest="indir", default=None, @@ -73,6 +75,7 @@ def build( ) parser.add_argument( "-o", + "--outdir", action="store", dest="outdir", default=None, diff --git a/pyani/scripts/parsers/aniblastall_parser.py b/pyani/scripts/parsers/aniblastall_parser.py index 10283210..9a000071 100644 --- a/pyani/scripts/parsers/aniblastall_parser.py +++ b/pyani/scripts/parsers/aniblastall_parser.py @@ -40,6 +40,7 @@ from argparse import ArgumentDefaultsHelpFormatter, ArgumentParser, _SubParsersAction from typing import List, Optional +from pathlib import Path from pyani.scripts import subcommands @@ -55,4 +56,23 @@ def build( parser = subps.add_parser( "aniblastall", parents=parents, formatter_class=ArgumentDefaultsHelpFormatter ) + # Required arguments: input and output directories + parser.add_argument( + "-i", + "--indir", + action="store", + dest="indir", + default=None, + type=Path, + help="input genome directory", + ) + parser.add_argument( + "-o", + "--outdir", + action="store", + dest="outdir", + default=None, + type=Path, + help="output analysis results directory", + ) parser.set_defaults(func=subcommands.subcmd_aniblastall) diff --git a/pyani/scripts/parsers/anim_parser.py b/pyani/scripts/parsers/anim_parser.py index d8673403..55844b5c 100644 --- a/pyani/scripts/parsers/anim_parser.py +++ b/pyani/scripts/parsers/anim_parser.py @@ -61,7 +61,7 @@ def build( parser = subps.add_parser( "anim", parents=parents, formatter_class=ArgumentDefaultsHelpFormatter ) - # Required positional arguments: input and output directories + # Required arguments: input and output directories parser.add_argument( "-i", "--indir", @@ -80,6 +80,7 @@ def build( type=Path, help="output analysis results directory", ) + # Optional arguments parser.add_argument( "--dbpath", action="store", diff --git a/pyani/scripts/parsers/classify_parser.py b/pyani/scripts/parsers/classify_parser.py index 0423b8a7..e9edd7d6 100644 --- a/pyani/scripts/parsers/classify_parser.py +++ b/pyani/scripts/parsers/classify_parser.py @@ -62,14 +62,24 @@ def build( parser = subps.add_parser( "classify", parents=parents, formatter_class=ArgumentDefaultsHelpFormatter ) - # Required positional arguments: output directory and run ID + # Required arguments: output directory and run ID parser.add_argument( - action="store", dest="outdir", default=None, type=Path, help="output directory" + "-o", + "--outdir", + action="store", + dest="outdir", + default=None, + type=Path, + help="output directory", ) parser.add_argument( - action="store", dest="run_id", default=None, help="run ID to classify" + "--run_id", + action="store", + dest="run_id", + default=None, + help="run ID to classify", ) - # Other optional arguments + # Optional arguments parser.add_argument( "--dbpath", action="store", diff --git a/pyani/scripts/parsers/download_parser.py b/pyani/scripts/parsers/download_parser.py index 5f91a351..23048876 100644 --- a/pyani/scripts/parsers/download_parser.py +++ b/pyani/scripts/parsers/download_parser.py @@ -70,9 +70,15 @@ def build( parser = subps.add_parser( "download", parents=parents, formatter_class=ArgumentDefaultsHelpFormatter ) - # Required positional argument: output directory + # Required argument: output directory parser.add_argument( - action="store", dest="outdir", default=None, type=Path, help="output directory" + "-o", + "--outdir", + action="store", + dest="outdir", + default=None, + type=Path, + help="output directory", ) # Required arguments for NCBI query parser.add_argument( diff --git a/pyani/scripts/parsers/index_parser.py b/pyani/scripts/parsers/index_parser.py index abb95dac..fa44d7b9 100644 --- a/pyani/scripts/parsers/index_parser.py +++ b/pyani/scripts/parsers/index_parser.py @@ -60,9 +60,15 @@ def build( parser = subps.add_parser( "index", parents=parents, formatter_class=ArgumentDefaultsHelpFormatter ) - # Required positional argument: input directory + # Required argument: input directory parser.add_argument( - action="store", dest="indir", default=None, type=Path, help="input directory" + "-i", + "--indir", + action="store", + dest="indir", + default=None, + type=Path, + help="input directory", ) # Names for output files parser.add_argument( diff --git a/pyani/scripts/parsers/plot_parser.py b/pyani/scripts/parsers/plot_parser.py index edc12d17..dad3210f 100644 --- a/pyani/scripts/parsers/plot_parser.py +++ b/pyani/scripts/parsers/plot_parser.py @@ -60,12 +60,18 @@ def build( parser = subps.add_parser( "plot", parents=parents, formatter_class=ArgumentDefaultsHelpFormatter ) - # Required positional arguments: output directory and run ID + # Required arguments: output directory and run ID parser.add_argument( - action="store", dest="outdir", default=None, type=Path, help="output directory" + "-o", + "--outdir", + action="store", + dest="outdir", + default=None, + type=Path, + help="output directory", ) parser.add_argument( - action="store", dest="run_id", default=None, help="run ID to plot" + "--run_id", action="store", dest="run_id", default=None, help="run ID to plot" ) # Other optional arguments parser.add_argument( diff --git a/pyani/scripts/parsers/report_parser.py b/pyani/scripts/parsers/report_parser.py index 6a3c1501..1b8c45e0 100644 --- a/pyani/scripts/parsers/report_parser.py +++ b/pyani/scripts/parsers/report_parser.py @@ -56,8 +56,10 @@ def build( parser = subps.add_parser( "report", parents=parents, formatter_class=ArgumentDefaultsHelpFormatter ) - # Required positional argument: output directory + # Required argument: output directory parser.add_argument( + "-o", + "--outdir", action="store", dest="outdir", default=None, From 9b896111172616d4ea3452651a49e5b6b23889fa Mon Sep 17 00:00:00 2001 From: baileythegreen Date: Tue, 7 Sep 2021 17:40:26 +0100 Subject: [PATCH 23/74] Update ReadTheDocs to reflect the change from positional arguments --- docs/download.rst | 16 ++++++------- docs/examples.rst | 6 ++--- docs/indexing.rst | 4 ++-- docs/run_anib.rst | 33 +++++++++++++-------------- docs/run_anim.rst | 14 ++++++------ docs/subcmd_anim.rst | 49 ++++++++++++++++++---------------------- docs/subcmd_download.rst | 16 +++++++------ docs/subcmd_index.rst | 22 ++++++++---------- 8 files changed, 76 insertions(+), 84 deletions(-) diff --git a/docs/download.rst b/docs/download.rst index 912a5bcb..30cd1235 100644 --- a/docs/download.rst +++ b/docs/download.rst @@ -19,15 +19,15 @@ The basic form of the command is: .. code-block:: bash - pyani download --email my.email@my.domain -t + pyani download --email my.email@my.domain -t -o -This instructs ``pyani`` to use the ``download`` subcommand to obtain all available genome assemblies below the taxon ID ````, passed with the ``-t`` argument, and place the downloaded files - along with label and class information files created by ``pyani`` in the subdirectory ````. +This instructs ``pyani`` to use the ``download`` subcommand to obtain all available genome assemblies below the taxon ID ````, passed with the ``-t`` argument, and place the downloaded files - along with label and class information files created by ``pyani`` in the subdirectory ````, passed with the ``-o`` argument. -For example, if we wished to download all available assemblies for the bacterium *Pseudomonas flexibilis* we would `identify the taxon ID `_ to be 706570, and use this as the argument to ``-t``, placing the output in a convenient subdirectory (e.g. ``genomes``), with the command: +For example, if we wished to download all available assemblies for the bacterium *Pseudomonas flexibilis* we would `identify the taxon ID `_ to be 706570, and use this as the argument to ``-t``, placing the output in a convenient subdirectory (e.g. ``genomes``, the argument to ``-o``), with the command: .. code-block:: bash - $ pyani download --email my.email@my.domain -t 706570 genomes + $ pyani download --email my.email@my.domain -t 706570 -o genomes GCF_900155995.1_IMG-taxon_2681812811_annotated_assembly_genomic.fna.gz: 2097152it [00:00, 3224293.90it/s] GCF_900155995.1_IMG-taxon_2681812811_annotated_assembly_hashes.txt: 1048576it [00:00, 110097041.36it/s] GCF_900101515.1_IMG-taxon_2596583557_annotated_assembly_genomic.fna.gz: 2097152it [00:00, 3125724.89it/s] @@ -107,13 +107,13 @@ To download genomes from more than one taxon, you can provide a comma-separated .. code-block:: bash - pyani download --email my.email@my.domain -t ,,... + pyani download --email my.email@my.domain -t ,,... -o The following command can be used to download assemblies from three different *Pseudomonas* taxa (*P. flexibilis*: 706570, *P. mosselli*: 78327, and *P. fulva*: 47880): .. code-block:: bash - $ pyani download --email my.email@my.domain -t 706570,78327,47880 multi_taxa + $ pyani download --email my.email@my.domain -t 706570,78327,47880 -o multi_taxa GCF_900155995.1_IMG-taxon_2681812811_annotated_assembly_genomic.fna.gz: 2097152it [00:00, 3081776.59it/s] GCF_900155995.1_IMG-taxon_2681812811_annotated_assembly_hashes.txt: 1048576it [00:00, 63489526.95it/s] GCF_900101515.1_IMG-taxon_2596583557_annotated_assembly_genomic.fna.gz: 2097152it [00:00, 3194885.99it/s] @@ -127,7 +127,7 @@ If you only want to see which genomes will be downloaded from NCBI with a given .. code-block:: bash - $ pyani download --email my.email@my.domain -t 706570,78327,47880 multi_taxa --dry-run + $ pyani download --email my.email@my.domain -t 706570,78327,47880 -o multi_taxa --dry-run WARNING: Dry run only: will not overwrite or download WARNING: (dry-run) skipping download of GCF_900155995.1 WARNING: (dry-run) skipping download of GCF_900101515.1 @@ -145,7 +145,7 @@ The ``pyani download`` command can prepare downloaded genome files for immediate .. code-block:: bash - $ pyani download --email my.email@my.domain -t 706570,78327,47880 genomes_kraken --kraken + $ pyani download --email my.email@my.domain -t 706570,78327,47880 -o genomes_kraken --kraken GCF_900155995.1_IMG-taxon_2681812811_annotated_assembly_genomic.fna.gz: 2097152it [00:00, 3085741.03it/s] GCF_900155995.1_IMG-taxon_2681812811_annotated_assembly_hashes.txt: 1048576it [00:00, 140958511.30it/s] WARNING: Modifying downloaded sequence for Kraken compatibility diff --git a/docs/examples.rst b/docs/examples.rst index 1627d682..ffe37a89 100644 --- a/docs/examples.rst +++ b/docs/examples.rst @@ -11,11 +11,11 @@ Using non-NCBI genomes It is usual to want to include or work only with genomes that have been generated locally, or that were not downloaded from NCBI using `pyani download`. To use these genomes with the `pyani` analysis subcommands, the genomes must be *indexed* [1]_. -To *index* a set of genomes, use the `pyani index` subcommand on the input directory. To index the directory ``mygenomes``, for example: +To *index* a set of genomes, use the `pyani index` subcommand on the input directory, which is passed to the ``-i`` argument. To index the directory ``mygenomes``, for example: .. code-block:: bash - pyani index mygenomes + pyani index -i mygenomes This will create a ``.md5`` file (containing the *hash*) for each genome, as well as class and label files listing all the input genomes. @@ -31,7 +31,7 @@ The location of the labels and classes files may be changed using the ``--labels .. code-block:: bash - pyani index mygenomes --classes myclasses.txt --labels mylabels.txt + pyani index -i mygenomes --classes myclasses.txt --labels mylabels.txt diff --git a/docs/indexing.rst b/docs/indexing.rst index 4aeeefd0..b1743dbf 100644 --- a/docs/indexing.rst +++ b/docs/indexing.rst @@ -34,7 +34,7 @@ The basic form of the command is: .. code-block:: bash - pyani index + pyani index -i This instructs ``pyani`` to search ```` for files with a standard FASTA suffix (``.fna``, ``.fasta``, ``.fa``, ``.fas``, ``.fsa_nt``). For each file found, it calculates the MD5 hash and writes it to an accompanying file with extension ``.md5``. The hash is then associated with a genome label and a genome class, written to the two files ``labels.txt`` and ``classes.txt`` (see above). @@ -52,7 +52,7 @@ We could run the ``pyani index`` command: .. code-block:: bash - $ pyani index unindexed/ + $ pyani index -i unindexed/ $ tree unindexed unindexed ├── GCA_001312105.1_ASM131210v1_genomic.fna diff --git a/docs/run_anib.rst b/docs/run_anib.rst index bba5aac1..5d04c2c7 100644 --- a/docs/run_anib.rst +++ b/docs/run_anib.rst @@ -40,48 +40,47 @@ The basic form of the command is: .. code-block:: bash - pyani anib + pyani anib -i -o -This instructs ``pyani`` to perform ANIb on the genome FASTA files in ````, and write any output files to ````. For example, the following command performs ANIb on genomes in the directory ``genomes`` and writes output to a new directory ``genomes_ANIb``: +This instructs ``pyani`` to perform ANIb on the genome FASTA files in ````, which is passed to the ``-i`` argument, and write any output files to ````, which is passed to the ``-o`` argument. For example, the following command performs ANIb on genomes in the directory ``genomes`` and writes output to a new directory ``genomes_ANIb``: .. code-block:: bash - pyani anib genomes genomes_ANIb + pyani anib -i genomes -o genomes_ANIb .. NOTE:: - While running, ``pyani anim`` will show progress bars unless these are disabled with the option ``--disable_tqdm`` + While running, ``pyani anib`` will show progress bars unless these are disabled with the option ``--disable_tqdm`` -This command will write the intermediate ``nucmer``/``MUMmer`` output to the directory ``genomes_ANIm``, in a subdirectory called ``nucmer_output``, where the results can be inspected if required. .. code-block:: bash - $ ls genomes_ANIm/ - nucmer_output + $ ls genomes_ANIb/ + blastn_output .. ATTENTION:: - To view the output ANIm results, you will need to use the ``pyani report`` or ``pyani plot`` subcommands. Please see :ref:`pyani-subcmd-report` and :ref:`pyani-subcmd-plot` for more details. + To view the output ANIb results, you will need to use the ``pyani report`` or ``pyani plot`` subcommands. Please see :ref:`pyani-subcmd-report` and :ref:`pyani-subcmd-plot` for more details. ---------------------------------------------- -Perform ANIm analysis with Open Grid Scheduler +Perform ANIb analysis with Open Grid Scheduler ---------------------------------------------- -The ``MUMmer`` comparison step of ANIm is embarrassingly parallel, and ``nucmer`` jobs can be distributed across cores in a cluster using the `Open Grid Scheduler`. To enable this during the analysis, use the ``--scheduler SGE`` option: +The ``blastn`` comparison step of ANIb is embarrassingly parallel, and ``blastn`` jobs can be distributed across cores in a cluster using the `Open Grid Scheduler`. To enable this during the analysis, use the ``--scheduler SGE`` option: .. code-block:: bash - pyani anim --scheduler SGE genomes genomes_ANIm + pyani anib --scheduler SGE -i genomes -o genomes_ANIb .. NOTE:: Jobs are submitted as *array jobs* to keep the scheduler queue short. .. NOTE:: - If ``--scheduler SGE`` is not specified, all ``MUMmer`` jobs are run locally with ``Python``'s ``multiprocessing`` module. + If ``--scheduler SGE`` is not specified, all ``blastn`` jobs are run locally with ``Python``'s ``multiprocessing`` module. ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Controlling parameters of Open Grid Scheduler ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -It is possible to control the following features of `Open Grid Scheduler`_ `via` the ``pyani anim`` subcommand: +It is possible to control the following features of `Open Grid Scheduler`_ `via` the ``pyani anib`` subcommand: - The array job size (by default, comparison jobs are batched in arrays of 10,000) - The prefix string for the job, as reported in the scheduler queue @@ -91,19 +90,19 @@ These allow for useful control of job execution. For example, the command: .. code-block:: bash - pyani anim --scheduler SGE --SGEgroupsize 5000 genomes genomes_ANIm + pyani anib --scheduler SGE --SGEgroupsize 5000 -i genomes -o genomes_ANIb -will batch ``MUMmer`` jobs in groups of 500 for the scheduler. The command: +will batch ``blastn`` jobs in groups of 500 for the scheduler. The command: .. code-block:: bash - pyani anim --scheduler SGE --jobprefix My_Ace_Job genomes genomes_ANIm + pyani anib --scheduler SGE --jobprefix My_Ace_Job -i genomes -o genomes_ANIb will prepend the string ``My_Ace_Job`` to your job in the scheduler queue. And the command: .. code-block:: bash - pyani anim --scheduler SGE --SGEargs "-m e -M my.name@my.domain" 5000 genomes genomes_ANIm + pyani anib --scheduler SGE --SGEargs "-m e -M my.name@my.domain" 5000 -i genomes -o genomes_ANIb will email ``my.name@my.domain`` when the jobs finish. diff --git a/docs/run_anim.rst b/docs/run_anim.rst index b8a31540..379b5585 100644 --- a/docs/run_anim.rst +++ b/docs/run_anim.rst @@ -38,13 +38,13 @@ The basic form of the command is: .. code-block:: bash - pyani anim + pyani anim -i -o -This instructs ``pyani`` to perform ANIm on the genome FASTA files in ````, and write any output files to ````. For example, the following command performs ANIm on genomes in the directory ``genomes`` and writes output to a new directory ``genomes_ANIm``: +This instructs ``pyani`` to perform ANIm on the genome FASTA files in ````, which is passed to the ``-i`` argument, and write any output files to ````, which is passed to the ``-o`` argument. For example, the following command performs ANIm on genomes in the directory ``genomes`` and writes output to a new directory ``genomes_ANIm``: .. code-block:: bash - pyani anim genomes genomes_ANIm + pyani anim -i genomes -o genomes_ANIm .. NOTE:: While running, ``pyani anim`` will show progress bars unless these are disabled with the option ``--disable_tqdm`` @@ -67,7 +67,7 @@ The ``MUMmer`` comparison step of ANIm is embarrassingly parallel, and ``nucmer` .. code-block:: bash - pyani anim --scheduler SGE genomes genomes_ANIm + pyani anim --scheduler SGE -i genomes -o genomes_ANIm .. NOTE:: Jobs are submitted as *array jobs* to keep the scheduler queue short. @@ -89,19 +89,19 @@ These allow for useful control of job execution. For example, the command: .. code-block:: bash - pyani anim --scheduler SGE --SGEgroupsize 5000 genomes genomes_ANIm + pyani anim --scheduler SGE --SGEgroupsize 5000 -i genomes -o genomes_ANIm will batch ``MUMmer`` jobs in groups of 500 for the scheduler. The command: .. code-block:: bash - pyani anim --scheduler SGE --jobprefix My_Ace_Job genomes genomes_ANIm + pyani anim --scheduler SGE --jobprefix My_Ace_Job -i genomes -o genomes_ANIm will prepend the string ``My_Ace_Job`` to your job in the scheduler queue. And the command: .. code-block:: bash - pyani anim --scheduler SGE --SGEargs "-m e -M my.name@my.domain" 5000 genomes genomes_ANIm + pyani anim --scheduler SGE --SGEargs "-m e -M my.name@my.domain" 5000 -i genomes -o genomes_ANIm will email ``my.name@my.domain`` when the jobs finish. diff --git a/docs/subcmd_anim.rst b/docs/subcmd_anim.rst index 66713b98..7deb8cd0 100644 --- a/docs/subcmd_anim.rst +++ b/docs/subcmd_anim.rst @@ -4,39 +4,28 @@ ``pyani anim`` ============== -The ``anim`` subcommand will carry out ANIm analysis using genome files contained in the ``indir`` directory, writing result files to the ``outdir`` directory, and recording data about each comparison and run in a local `SQLite3`_ database. +The ``anim`` subcommand will carry out ANIm analysis using genome files contained in the ``INDIR`` directory, writing result files to the ``OUTDIR`` directory, and recording data about each comparison and run in a local `SQLite3`_ database. .. code-block:: text - usage: pyani.py anim [-h] [-l LOGFILE] [-v] [--disable_tqdm] - [--scheduler {multiprocessing,SGE}] [--workers WORKERS] - [--SGEgroupsize SGEGROUPSIZE] [--SGEargs SGEARGS] - [--jobprefix JOBPREFIX] [--name NAME] [--classes CLASSES] - [--labels LABELS] [--recovery] [--dbpath DBPATH] - [--nucmer_exe NUCMER_EXE] [--filter_exe FILTER_EXE] - [--maxmatch] [--nofilter] - indir outdir + usage: pyani.py anim [-h] [-l LOGFILE] [-v] [--debug] [--disable_tqdm] [--version] + [--citation] [--scheduler {multiprocessing,SGE}] + [--workers WORKERS] [--SGEgroupsize SGEGROUPSIZE] + [--SGEargs SGEARGS] [--jobprefix JOBPREFIX] [--name NAME] + [--classes CLASSES] [--labels LABELS] [--recovery] [-i INDIR] + [-o OUTDIR] [--dbpath DBPATH] [--nucmer_exe NUCMER_EXE] + [--filter_exe FILTER_EXE] [--maxmatch] [--nofilter] .. _SQLite3: https://www.sqlite.org/index.html --------------------- -Positional arguments --------------------- - -``indir`` - Path to the directory containing indexed genome files to be used for the analysis. - -``outdir`` - Path to a directory where comparison output files will be written. - ----------------- Flagged arguments ----------------- ``--classes CLASSFNAME`` - Use the set of classes (one per genome sequence file) found in the file ``CLASSFNAME`` in ``indir``. Default: ``classes.txt`` + Use the set of classes (one per genome sequence file) found in the file ``CLASSFNAME`` in ``INDIR``. Default: ``classes.txt`` ``--dbpath DBPATH`` Path to the location of the local ``pyani`` database to be used. Default: ``.pyani/pyanidb`` @@ -47,6 +36,9 @@ Flagged arguments ``--filter_exe FILTER_EXE`` Path to the ``MUMmer`` ``delta-filter`` executable. Default: ``delta-filter`` +``-i INDIR, --indir INDIR`` + Path to the directory containing indexed genome files to be used for the analysis. + ``-h, --help`` Display usage information for ``pyani anim``. @@ -54,13 +46,7 @@ Flagged arguments Use the string ``JOBPREFIX`` as a prefix for SGE job submission names. Default: ``PYANI`` ``--labels LABELFNAME`` - Use the set of labels (one per genome sequence file) found in the file ``LABELFNAME`` in ``indir``. Default: ``labels.txt`` - -``--name NAME`` - Use the string ``NAME`` to identify this ANIm run in the ``pyani`` database. - -``--nucmer_exe NUCMER_EXE`` - Path to the ``MUMmer`` ``nucmer`` executable. Default: ``nucmer`` + Use the set of labels (one per genome sequence file) found in the file ``LABELFNAME`` in ``INDIR``. Default: ``labels.txt`` ``-l LOGFILE, --logfile LOGFILE`` Provide the location ``LOGFILE`` to which a logfile of the download process will be written. @@ -68,9 +54,18 @@ Flagged arguments ``--maxmatch`` Use the ``MUMmer`` ``--maxmatch`` option to include all ``nucmer`` matches. +``--name NAME`` + Use the string ``NAME`` to identify this ANIm run in the ``pyani`` database. + ``--nofilter`` Do not use ``delta-filter`` to restrict ``nucmer`` output to 1:1 matches. +``--nucmer_exe NUCMER_EXE`` + Path to the ``MUMmer`` ``nucmer`` executable. Default: ``nucmer`` + +``-o OUTDIR, --outdir OUTDIR`` + Path to a directory where comparison output files will be written. + ``--recovery`` Use existing ``NUCmer`` comparison output if available, e.g. if recovering from a failed job submission. Using this option will not generate a new comparison if the old output files exist. diff --git a/docs/subcmd_download.rst b/docs/subcmd_download.rst index 61c67668..8d62dbdb 100644 --- a/docs/subcmd_download.rst +++ b/docs/subcmd_download.rst @@ -8,13 +8,12 @@ The ``download`` subcommand controls download of genome files from the `NCBI Ass .. code-block:: text - usage: pyani.py download [-h] [-l LOGFILE] [-v] [--disable_tqdm] -t TAXON - --email EMAIL [--api_key API_KEYPATH] - [--retries RETRIES] [--batchsize BATCHSIZE] - [--timeout TIMEOUT] [-f] [--noclobber] - [--labels LABELFNAME] [--classes CLASSFNAME] + usage: pyani.py download [-h] [-l LOGFILE] [-v] [--debug] [--disable_tqdm] [--version] + [--citation] [-o OUTDIR] -t TAXON --email EMAIL + [--api_key API_KEYPATH] [--retries RETRIES] + [--batchsize BATCHSIZE] [--timeout TIMEOUT] [-f] + [--noclobber] [--labels LABELFNAME] [--classes CLASSFNAME] [--kraken] [--dry-run] - outdir -------------------- Positional arguments @@ -46,7 +45,7 @@ Flagged arguments **COMPULSORY**. Provide the email address ``EMAIL`` to NCBI so that they can track problems. ``-f, --force`` - Force use of the ``outdir`` directory when downloaded genomes, even if it already exists. + Force use of the ``OUTDIR`` directory when downloaded genomes, even if it already exists. ``-h, --help`` Display usage information for ``pyani download``. @@ -63,6 +62,9 @@ Flagged arguments ``--noclobber`` Do not overwrite individual files in the ``outdir`` directory, when used with ``-f``. +``-o OUTDIR, --outdir OUTDIR`` + The ``OUTDIR`` argument should be the path to a directory into which genome files will be downloaded. If the directory exists, a warning will be given and the download will not proceed, to avoid overwriting existing data. To force writing into an existing directory, use the ``-f`` option. + ``--retries RETRIES`` The download process will attempt to download each batch of assemblies a maximum of ``RETRIES`` times. Default: 20 diff --git a/docs/subcmd_index.rst b/docs/subcmd_index.rst index 399b6dd0..1ac88774 100644 --- a/docs/subcmd_index.rst +++ b/docs/subcmd_index.rst @@ -4,27 +4,20 @@ ``pyani index`` =============== -The ``index`` subcommand will index the genome files it finds the passed directory ``indir``, generating label and class files, and files that contain an MD5 hash of the nucleotide sequence of each genome. +The ``index`` subcommand will index the genome files it finds the passed directory ``INDIR``, generating label and class files, and files that contain an MD5 hash of the nucleotide sequence of each genome. .. code-block:: text - usage: pyani index [-h] [-l LOGFILE] [-v] [--disable_tqdm] - [--labels LABELFNAME] [--classes CLASSFNAME] - indir - --------------------- -Positional arguments --------------------- - -``indir`` - The ``indir`` argument should be the path to a directory containing genome sequence data as FASTA files (one per genome assembly). + usage: pyani index [-h] [-l LOGFILE] [-v] [--debug] [--disable_tqdm] [--version] + [--citation] [-i INDIR] [--labels LABELFNAME] + [--classes CLASSFNAME] ----------------- Flagged arguments ----------------- ``--classes CLASSFNAME`` - Write a set of labels (one per genome sequence file) to the file ``CLASSFNAME`` in ``indir``. Default: ``classes.txt`` + Write a set of labels (one per genome sequence file) to the file ``CLASSFNAME`` in ``INDIR``. Default: ``classes.txt`` ``--disable_tqdm`` Disable the ``tqdm`` progress bar while the download process runs. This is useful when testing to avoid aesthetic problems with test output. @@ -32,11 +25,14 @@ Flagged arguments ``-h, --help`` Display usage information for ``pyani index``. +``-i INDIR, --indir INDIR`` + The ``INDIR`` argument should be the path to a directory containing genome sequence data as FASTA files (one per genome assembly). + ``-l LOGFILE, --logfile LOGFILE`` Provide the location ``LOGFILE`` to which a logfile of the download process will be written. ``--labels LABELFNAME`` - Write a set of labels (one per genome sequence file) to the file ``LABELFNAME`` in ``indir``. Default: ``labels.txt`` + Write a set of labels (one per genome sequence file) to the file ``LABELFNAME`` in ``INDIR``. Default: ``labels.txt`` ``-v, --verbose`` Provide verbose output to ``STDOUT`` From 0317f5c2ba650876cdb868b4252f244e7bfbc5bf Mon Sep 17 00:00:00 2001 From: baileythegreen Date: Tue, 7 Sep 2021 17:46:49 +0100 Subject: [PATCH 24/74] Update `README.md` to reflect the change from positional arguments --- README.md | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index a48f7045..e14a4a69 100644 --- a/README.md +++ b/README.md @@ -132,7 +132,7 @@ DOI: [10.1039/C5AY02550H](https://doi.org/10.1039/C5AY02550H) Where available, `pyani` can take advantage of multicore systems, and integrates with [SGE/OGE](http://gridscheduler.sourceforge.net/)-type job schedulers for the sequence comparisons. -`pyani` installs the prgram `pyani`, which enables command-line based analysis of genomes. +`pyani` installs the program `pyani`, which enables command-line based analysis of genomes. ----- @@ -235,10 +235,10 @@ The first step is to obtain genome data for analysis. `pyani` expects to find ea We'll use the `pyani download` subcommand to download all available genomes for *Candidatus Blochmannia* from NCBI. The taxon ID for this grouping is [203804](https://www.ncbi.nlm.nih.gov/Taxonomy/Browser/wwwtax.cgi?mode=Info&id=203804&lvl=3&lin=f&keep=1&srchmode=1&unlock). ```bash -pyani download C_blochmannia --email my.email@my.domain -t 203804 -v -l C_blochmannia_dl.log +pyani download -o C_blochmannia --email my.email@my.domain -t 203804 -v -l C_blochmannia_dl.log ``` -The first argument is the output directory into which the downloaded genomes will be written (`C_blochmannia`). To download anything from NCBI we must provide an email address (`--email my.email@my.domain`), and to specify which taxon subtree we want to download we provide the taxon ID (`-t 203804`). +The first argument is the output directory into which the downloaded genomes will be written (`-o C_blochmannia`). To download anything from NCBI we must provide an email address (`--email my.email@my.domain`), and to specify which taxon subtree we want to download we provide the taxon ID (`-t 203804`). Here we also request verbose output (`-v`), and write a log file for reproducible research/diagnosing bugs and errors (`-l C_blochmannia_dl.log`). @@ -316,7 +316,7 @@ Subsequent `pyani` commands will assume this location for the database, but you In this walkthrough, we'll run ANIm on the downloaded genomes, using the command: ```bash -pyani anim C_blochmannia C_blochmannia_ANIm -v -l C_blochmannia_ANIm.log \ +pyani anim -i C_blochmannia -o C_blochmannia_ANIm -v -l C_blochmannia_ANIm.log \ --name "C. blochmannia run 1" \ --labels C_blochmannia/labels.txt --classes C_blochmannia/classes.txt ``` @@ -332,10 +332,10 @@ One reason for using a database backend for analysis results is so that, for ver You can test this for yourself by running the analysis command again, as below. You will see a number of messages indicating that genomes have been seen before, and that analyses performed before were skipped: ```bash -$ pyani anim C_blochmannia C_blochmannia_ANIm -v -l C_blochmannia_ANIm.log \ +$ pyani anim -i C_blochmannia -o C_blochmannia_ANIm -v -l C_blochmannia_ANIm.log \ --name "C. blochmannia run 2" \ --labels C_blochmannia/labels.txt --classes C_blochmannia/classes.txt -INFO: command-line: pyani anim C_blochmannia C_blochmannia_ANIm -v -l C_blochmannia_ANIm.log +INFO: command-line: pyani anim -i C_blochmannia -o C_blochmannia_ANIm -v -l C_blochmannia_ANIm.log INFO: Running ANIm analysis INFO: Adding analysis information to database .pyani/pyanidb INFO: Current analysis has ID 2 in this database @@ -367,9 +367,9 @@ Once an analysis is run, the results are placed in a local `SQLite` database, wh The report tables are written to a named directory (compulsory argument), and are written by default to a `.tab` plain-text format, but HTML and Excel format can also be requested with the `--formats` argument: ```bash -$ pyani report -v --runs C_blochmannia_ANIm/ --formats html,excel,stdout -INFO: Processed arguments: Namespace(cmdline='./pyani report -v --runs C_blochmannia_ANIm/ --formats html,excel', dbpath='.pyani/pyanidb', formats='html,excel', func=, logfile=None, outdir='C_blochmannia_ANIm/', run_results=False, show_genomes=False, show_genomes_runs=False, show_runs=True, show_runs_genomes=False, verbose=True) -INFO: command-line: ./pyani report -v --runs C_blochmannia_ANIm/ --formats html,excel +$ pyani report -v --runs -o C_blochmannia_ANIm/ --formats html,excel,stdout +INFO: Processed arguments: Namespace(cmdline='./pyani report -v --runs -o C_blochmannia_ANIm/ --formats html,excel', dbpath='.pyani/pyanidb', formats='html,excel', func=, logfile=None, outdir='C_blochmannia_ANIm/', run_results=False, show_genomes=False, show_genomes_runs=False, show_runs=True, show_runs_genomes=False, verbose=True) +INFO: command-line: ./pyani report -v --runs -o C_blochmannia_ANIm/ --formats html,excel INFO: Creating output in formats: ['excel', 'tab', 'html'] INFO: Using database: .pyani/pyanidb INFO: Writing table of pyani runs from the database to C_blochmannia_ANIm/runs.* @@ -385,9 +385,9 @@ C_blochmannia_ANIm/ To see all of the pairwise results for an individual run, the run ID must be provided. It is possible to get results for more than one run ID by providing a comma-separated list of run IDs (though each run's results will be provided in a separate file): ```bash -$ pyani report -v --runs C_blochmannia_ANIm/ --formats html,excel --run_results 1,2,3,4 -INFO: Processed arguments: Namespace(cmdline='./pyani report -v --runs C_blochmannia_ANIm/ --formats html,excel --run_results 1,2,3,4', dbpath='.pyani/pyanidb', formats='html,excel', func=, logfile=None, outdir='C_blochmannia_ANIm/', run_results='1,2,3,4', show_genomes=False, show_genomes_runs=False, show_runs=True, show_runs_genomes=False, verbose=True) -INFO: command-line: ./pyani report -v --runs C_blochmannia_ANIm/ --formats html,excel --run_results 1,2,3,4 +$ pyani report -v --runs -o C_blochmannia_ANIm/ --formats html,excel --run_results 1,2,3,4 +INFO: Processed arguments: Namespace(cmdline='./pyani report -v --runs -o C_blochmannia_ANIm/ --formats html,excel --run_results 1,2,3,4', dbpath='.pyani/pyanidb', formats='html,excel', func=, logfile=None, outdir='C_blochmannia_ANIm/', run_results='1,2,3,4', show_genomes=False, show_genomes_runs=False, show_runs=True, show_runs_genomes=False, verbose=True) +INFO: command-line: ./pyani report -v --runs -o C_blochmannia_ANIm/ --formats html,excel --run_results 1,2,3,4 INFO: Creating output in formats: ['tab', 'excel', 'html'] INFO: Using database: .pyani/pyanidb INFO: Writing table of pyani runs from the database to C_blochmannia_ANIm/runs.* @@ -402,7 +402,7 @@ INFO: Completed. Time taken: 1.285 You can see a run's results in the terminal by specifying the `stdout` format. For example, to see the identity, coverage, and other output matrices, you would specify `--run_matrices ` and `--formats=stdout` as below: ```bash -$ pyani report C_blochmannia_ANIm --formats=stdout --run_matrices 1 +$ pyani report -o C_blochmannia_ANIm --formats=stdout --run_matrices 1 TABLE: C_blochmannia_ANIm/matrix_identity_1 C. Blochmannia pennsylvanicus BPEN C. Blochmannia floridanus C. Blochmannia vafer BVAF C. Blochmannia chromaiodes 640 B. endosymbiont of Polyrhachis (Hedomyrma) turneri 675 B. endosymbiont of Camponotus (Colobopsis) obliquus 757 C. Blochmannia pennsylvanicus BPEN 1.000000 0.834866 0.836903 0.980244 0.843700 0.829509 @@ -454,7 +454,7 @@ B. endosymbiont of Camponotus (Colobopsis) obli... 0. The output of a `pyani` run can also be represented graphically, using the `plot` subcommand. For example, the command: ```bash -pyani plot C_blochmannia_ANIm 1 -v --formats png,pdf +pyani plot -o C_blochmannia_ANIm --run_id 1 -v --formats png,pdf ``` will place `.pdf` and `.png` format output in the `C_blochmannia_ANIm` output directory for the run with ID 1, generated above. Five heatmaps are generated: From 33f44cd80c488c9576573dadaa805e9e0b695bae Mon Sep 17 00:00:00 2001 From: baileythegreen Date: Tue, 7 Sep 2021 18:15:57 +0100 Subject: [PATCH 25/74] Update `test_cli_parsing` to reflect the change from positional arguments --- tests/test_cli_parsing.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/test_cli_parsing.py b/tests/test_cli_parsing.py index 2c90fbca..ecdeaa40 100644 --- a/tests/test_cli_parsing.py +++ b/tests/test_cli_parsing.py @@ -69,6 +69,7 @@ def args_single_genome_download(email_address, tmp_path): "218491", "--email", email_address, + "-o", tmp_path, "--force", ] From 528f46a561a7e545d2f4536d6963630bac75b2a5 Mon Sep 17 00:00:00 2001 From: baileythegreen Date: Tue, 7 Sep 2021 18:34:11 +0100 Subject: [PATCH 26/74] Set `required=True` for required arguments (and related changes in docs) This gives more helpful error messages, such as: ```bash pyani.py download: error: the following arguments are required: -o/--outdir, -t/--taxon, --email ``` --- docs/subcmd_anim.rst | 4 ++-- docs/subcmd_download.rst | 2 +- docs/subcmd_index.rst | 2 +- pyani/scripts/parsers/anib_parser.py | 2 ++ pyani/scripts/parsers/aniblastall_parser.py | 2 ++ pyani/scripts/parsers/anim_parser.py | 2 ++ pyani/scripts/parsers/classify_parser.py | 2 ++ pyani/scripts/parsers/download_parser.py | 1 + pyani/scripts/parsers/index_parser.py | 1 + pyani/scripts/parsers/plot_parser.py | 8 +++++++- pyani/scripts/parsers/report_parser.py | 1 + 11 files changed, 22 insertions(+), 5 deletions(-) diff --git a/docs/subcmd_anim.rst b/docs/subcmd_anim.rst index 7deb8cd0..bfc67c2b 100644 --- a/docs/subcmd_anim.rst +++ b/docs/subcmd_anim.rst @@ -12,8 +12,8 @@ The ``anim`` subcommand will carry out ANIm analysis using genome files containe [--citation] [--scheduler {multiprocessing,SGE}] [--workers WORKERS] [--SGEgroupsize SGEGROUPSIZE] [--SGEargs SGEARGS] [--jobprefix JOBPREFIX] [--name NAME] - [--classes CLASSES] [--labels LABELS] [--recovery] [-i INDIR] - [-o OUTDIR] [--dbpath DBPATH] [--nucmer_exe NUCMER_EXE] + [--classes CLASSES] [--labels LABELS] [--recovery] -i INDIR + -o OUTDIR [--dbpath DBPATH] [--nucmer_exe NUCMER_EXE] [--filter_exe FILTER_EXE] [--maxmatch] [--nofilter] diff --git a/docs/subcmd_download.rst b/docs/subcmd_download.rst index 8d62dbdb..1eee5f04 100644 --- a/docs/subcmd_download.rst +++ b/docs/subcmd_download.rst @@ -9,7 +9,7 @@ The ``download`` subcommand controls download of genome files from the `NCBI Ass .. code-block:: text usage: pyani.py download [-h] [-l LOGFILE] [-v] [--debug] [--disable_tqdm] [--version] - [--citation] [-o OUTDIR] -t TAXON --email EMAIL + [--citation] -o OUTDIR -t TAXON --email EMAIL [--api_key API_KEYPATH] [--retries RETRIES] [--batchsize BATCHSIZE] [--timeout TIMEOUT] [-f] [--noclobber] [--labels LABELFNAME] [--classes CLASSFNAME] diff --git a/docs/subcmd_index.rst b/docs/subcmd_index.rst index 1ac88774..ea748e70 100644 --- a/docs/subcmd_index.rst +++ b/docs/subcmd_index.rst @@ -9,7 +9,7 @@ The ``index`` subcommand will index the genome files it finds the passed directo .. code-block:: text usage: pyani index [-h] [-l LOGFILE] [-v] [--debug] [--disable_tqdm] [--version] - [--citation] [-i INDIR] [--labels LABELFNAME] + [--citation] -i INDIR [--labels LABELFNAME] [--classes CLASSFNAME] ----------------- diff --git a/pyani/scripts/parsers/anib_parser.py b/pyani/scripts/parsers/anib_parser.py index e56e9644..397ad526 100644 --- a/pyani/scripts/parsers/anib_parser.py +++ b/pyani/scripts/parsers/anib_parser.py @@ -72,6 +72,7 @@ def build( default=None, type=Path, help="input genome directory", + required=True, ) parser.add_argument( "-o", @@ -81,6 +82,7 @@ def build( default=None, type=Path, help="output analysis results directory", + required=True, ) # Optional arguments parser.add_argument( diff --git a/pyani/scripts/parsers/aniblastall_parser.py b/pyani/scripts/parsers/aniblastall_parser.py index 9a000071..2776d13b 100644 --- a/pyani/scripts/parsers/aniblastall_parser.py +++ b/pyani/scripts/parsers/aniblastall_parser.py @@ -65,6 +65,7 @@ def build( default=None, type=Path, help="input genome directory", + required=True, ) parser.add_argument( "-o", @@ -74,5 +75,6 @@ def build( default=None, type=Path, help="output analysis results directory", + required=True, ) parser.set_defaults(func=subcommands.subcmd_aniblastall) diff --git a/pyani/scripts/parsers/anim_parser.py b/pyani/scripts/parsers/anim_parser.py index 55844b5c..0c7f0542 100644 --- a/pyani/scripts/parsers/anim_parser.py +++ b/pyani/scripts/parsers/anim_parser.py @@ -70,6 +70,7 @@ def build( default=None, type=Path, help="input genome directory", + required=True, ) parser.add_argument( "-o", @@ -79,6 +80,7 @@ def build( default=None, type=Path, help="output analysis results directory", + required=True, ) # Optional arguments parser.add_argument( diff --git a/pyani/scripts/parsers/classify_parser.py b/pyani/scripts/parsers/classify_parser.py index e9edd7d6..9b1b3897 100644 --- a/pyani/scripts/parsers/classify_parser.py +++ b/pyani/scripts/parsers/classify_parser.py @@ -71,6 +71,7 @@ def build( default=None, type=Path, help="output directory", + required=True, ) parser.add_argument( "--run_id", @@ -78,6 +79,7 @@ def build( dest="run_id", default=None, help="run ID to classify", + required=True, ) # Optional arguments parser.add_argument( diff --git a/pyani/scripts/parsers/download_parser.py b/pyani/scripts/parsers/download_parser.py index 23048876..81daeaef 100644 --- a/pyani/scripts/parsers/download_parser.py +++ b/pyani/scripts/parsers/download_parser.py @@ -79,6 +79,7 @@ def build( default=None, type=Path, help="output directory", + required=True, ) # Required arguments for NCBI query parser.add_argument( diff --git a/pyani/scripts/parsers/index_parser.py b/pyani/scripts/parsers/index_parser.py index fa44d7b9..211906ed 100644 --- a/pyani/scripts/parsers/index_parser.py +++ b/pyani/scripts/parsers/index_parser.py @@ -69,6 +69,7 @@ def build( default=None, type=Path, help="input directory", + required=True, ) # Names for output files parser.add_argument( diff --git a/pyani/scripts/parsers/plot_parser.py b/pyani/scripts/parsers/plot_parser.py index dad3210f..1de228e3 100644 --- a/pyani/scripts/parsers/plot_parser.py +++ b/pyani/scripts/parsers/plot_parser.py @@ -69,9 +69,15 @@ def build( default=None, type=Path, help="output directory", + required=True, ) parser.add_argument( - "--run_id", action="store", dest="run_id", default=None, help="run ID to plot" + "--run_id", + action="store", + dest="run_id", + default=None, + help="run ID to plot", + required=True, ) # Other optional arguments parser.add_argument( diff --git a/pyani/scripts/parsers/report_parser.py b/pyani/scripts/parsers/report_parser.py index 1b8c45e0..f092d821 100644 --- a/pyani/scripts/parsers/report_parser.py +++ b/pyani/scripts/parsers/report_parser.py @@ -65,6 +65,7 @@ def build( default=None, type=Path, help="output analysis results directory", + required=True, ) # Optional arguments parser.add_argument( From d789624067da719cd1e2b8161a7d3a817ec30ba1 Mon Sep 17 00:00:00 2001 From: baileythegreen Date: Wed, 8 Sep 2021 15:55:06 +0100 Subject: [PATCH 27/74] Add documentation pertaining to scatterplot creation --- docs/interpreting_plots.rst | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/interpreting_plots.rst b/docs/interpreting_plots.rst index 27e53d8f..b5e195af 100644 --- a/docs/interpreting_plots.rst +++ b/docs/interpreting_plots.rst @@ -62,7 +62,7 @@ For each of the ANI methods provided by `pyani` the values shown in the plots ar - in ANIb this is ``alignment_length - gaps - mismatches`` - in ANIblastall this is ``alignment_length - gaps - mismatches`` - **Alignment coverage** is the proportion of the query genome that aligns against the reference genome (this can be asymmetrical: comparing genome A to genome B may give different coverage values for A and B). +**Alignment coverage** is the proportion of the query genome that aligns against the reference genome (this can be asymmetrical: comparing genome A to genome B may give different coverage values for A and B). - in ANIm this is ``alignment_length / genome_length`` (asymmetrical) - in fastANI this is ``matched_fragments / all_fragments`` (asymmetrical) @@ -80,4 +80,6 @@ The **Hadamard** ouptut is the product (identity x coverage), as described at `H - this is always ``ANI * coverage``, but as the plot is not symmetric, coverage may differ for query and reference genomes +``pyani plot`` also outputs a scatterplot of **Average nucleotide identity** versus **Alignment coverage** (calculated as described above). + .. _Hadamard product: https://en.wikipedia.org/wiki/Hadamard_product_(matrices) From c8b00d459d04ba6cc11351f362e4d138fcb38cb0 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Thu, 30 Sep 2021 18:58:19 +0000 Subject: [PATCH 28/74] docs: update README.md [skip ci] --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index a48f7045..f7c60a43 100644 --- a/README.md +++ b/README.md @@ -34,6 +34,7 @@ and we are grateful to all who have contributed to this software:
Balázs Brankovics

💻 🐛
sammywinchester19

🐛
Ram Krishna Shrestha

⚠️ 💻 🤔 +
Donovan Parks

🐛 @@ -63,7 +64,7 @@ DOI: [10.1039/C5AY02550H](https://doi.org/10.1039/C5AY02550H) [![pyani sourcerank](https://img.shields.io/librariesio/sourcerank/pypi/pyani.svg?logo=koding&logoColor=white)](https://libraries.io/pypi/pyani) -[![All Contributors](https://img.shields.io/badge/all_contributors-10-orange.svg?style=flat-square)](#contributors-) +[![All Contributors](https://img.shields.io/badge/all_contributors-11-orange.svg?style=flat-square)](#contributors-) [![pyani PyPi version](https://img.shields.io/pypi/v/pyani "PyPI version")](https://pypi.python.org/pypi/pyani) From 90488b1d2e652ad6ca286c0213b42e03bc0e39ef Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Thu, 30 Sep 2021 18:58:20 +0000 Subject: [PATCH 29/74] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 869b0b43..42740170 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -115,6 +115,15 @@ "code", "ideas" ] + }, + { + "login": "dparks1134", + "name": "Donovan Parks", + "avatar_url": "https://avatars.githubusercontent.com/u/3688336?v=4", + "profile": "https://github.com/dparks1134", + "contributions": [ + "bug" + ] } ], "contributorsPerLine": 7, From 8706f6bdd840b4c86402a2eea80fb9457e00f0c0 Mon Sep 17 00:00:00 2001 From: baileythegreen Date: Fri, 8 Oct 2021 20:59:04 +0100 Subject: [PATCH 30/74] Correct `pyani.py` in usage examples to `pyani` --- docs/subcmd_anim.rst | 2 +- docs/subcmd_createdb.rst | 2 +- docs/subcmd_download.rst | 2 +- docs/subcmd_listdeps.rst | 2 +- pyani/scripts/parsers/__init__.py | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/subcmd_anim.rst b/docs/subcmd_anim.rst index 66713b98..eb5d616a 100644 --- a/docs/subcmd_anim.rst +++ b/docs/subcmd_anim.rst @@ -8,7 +8,7 @@ The ``anim`` subcommand will carry out ANIm analysis using genome files containe .. code-block:: text - usage: pyani.py anim [-h] [-l LOGFILE] [-v] [--disable_tqdm] + usage: pyani anim [-h] [-l LOGFILE] [-v] [--disable_tqdm] [--scheduler {multiprocessing,SGE}] [--workers WORKERS] [--SGEgroupsize SGEGROUPSIZE] [--SGEargs SGEARGS] [--jobprefix JOBPREFIX] [--name NAME] [--classes CLASSES] diff --git a/docs/subcmd_createdb.rst b/docs/subcmd_createdb.rst index f08a42c6..b6d986fa 100644 --- a/docs/subcmd_createdb.rst +++ b/docs/subcmd_createdb.rst @@ -8,7 +8,7 @@ The ``createdb`` subcommand creates a new, empty database for ``pyani`` to use i .. code-block:: text - usage: pyani.py createdb [-h] [-l LOGFILE] [-v] [--disable_tqdm] + usage: pyani createdb [-h] [-l LOGFILE] [-v] [--disable_tqdm] [--dbpath DBPATH] [-f] diff --git a/docs/subcmd_download.rst b/docs/subcmd_download.rst index 61c67668..03e22e7e 100644 --- a/docs/subcmd_download.rst +++ b/docs/subcmd_download.rst @@ -8,7 +8,7 @@ The ``download`` subcommand controls download of genome files from the `NCBI Ass .. code-block:: text - usage: pyani.py download [-h] [-l LOGFILE] [-v] [--disable_tqdm] -t TAXON + usage: pyani download [-h] [-l LOGFILE] [-v] [--disable_tqdm] -t TAXON --email EMAIL [--api_key API_KEYPATH] [--retries RETRIES] [--batchsize BATCHSIZE] [--timeout TIMEOUT] [-f] [--noclobber] diff --git a/docs/subcmd_listdeps.rst b/docs/subcmd_listdeps.rst index d881043f..c94a16cf 100644 --- a/docs/subcmd_listdeps.rst +++ b/docs/subcmd_listdeps.rst @@ -8,7 +8,7 @@ The ``listdeps`` subcommand writes an account of the local platform, the install .. code-block:: text - usage: pyani.py listdeps [-h] [-l LOGFILE] [-v] + usage: pyani listdeps [-h] [-l LOGFILE] [-v] ----------------- Flagged arguments diff --git a/pyani/scripts/parsers/__init__.py b/pyani/scripts/parsers/__init__.py index 623256b7..7330aa0b 100644 --- a/pyani/scripts/parsers/__init__.py +++ b/pyani/scripts/parsers/__init__.py @@ -90,7 +90,7 @@ def parse_cmdline(argv: Optional[List] = None) -> Namespace: """ # Main parent parser parser_main = ArgumentParser( - prog="pyani.py", formatter_class=ArgumentDefaultsHelpFormatter + prog="pyani", formatter_class=ArgumentDefaultsHelpFormatter ) subparsers = parser_main.add_subparsers( title="subcommands", description="valid subcommands", help="additional help" From f157b96a7defa609dbe15667540361745449f453 Mon Sep 17 00:00:00 2001 From: baileythegreen Date: Mon, 18 Oct 2021 20:05:19 +0100 Subject: [PATCH 31/74] Add `multiprocessing` support to `pyani plot` --- pyani/scripts/parsers/plot_parser.py | 9 +++++++ pyani/scripts/subcommands/subcmd_plot.py | 34 +++++++++++++++++++----- tests/test_subcmd_06_plot.py | 8 ++++++ 3 files changed, 45 insertions(+), 6 deletions(-) diff --git a/pyani/scripts/parsers/plot_parser.py b/pyani/scripts/parsers/plot_parser.py index edc12d17..c120eb54 100644 --- a/pyani/scripts/parsers/plot_parser.py +++ b/pyani/scripts/parsers/plot_parser.py @@ -92,4 +92,13 @@ def build( help="graphics method to use for plotting", choices=["seaborn", "mpl", "plotly"], ) + parser.add_argument( + "--workers", + dest="workers", + action="store", + default=None, + type=int, + help="Number of worker processes for multiprocessing " + "(default zero, meaning use all available cores)", + ) parser.set_defaults(func=subcommands.subcmd_plot) diff --git a/pyani/scripts/subcommands/subcmd_plot.py b/pyani/scripts/subcommands/subcmd_plot.py index 86ded7b5..7aeb3f2c 100644 --- a/pyani/scripts/subcommands/subcmd_plot.py +++ b/pyani/scripts/subcommands/subcmd_plot.py @@ -41,6 +41,7 @@ import logging import os +import multiprocessing from argparse import Namespace from pathlib import Path @@ -114,9 +115,17 @@ def write_run_heatmaps( ) result_label_dict = pyani_orm.get_matrix_labels_for_run(session, args.run_id) result_class_dict = pyani_orm.get_matrix_classes_for_run(session, args.run_id) - logger.debug(f"Have {len(result_label_dict)} labels and {len(result_class_dict)} classes") + logger.debug( + f"Have {len(result_label_dict)} labels and {len(result_class_dict)} classes" + ) + + # Write heatmap and distribution plot for each results matrix + + # Create worker pool and empty command list + pool = multiprocessing.Pool(processes=args.workers) + plotting_commands = [] - # Write heatmap for each results matrix + # Build and collect the plotting commands for matdata in [ MatrixData(*_) for _ in [ @@ -127,14 +136,27 @@ def write_run_heatmaps( ("hadamard", pd.read_json(results.df_hadamard), {}), ] ]: - write_heatmap( - run_id, matdata, result_label_dict, result_class_dict, outfmts, args + plotting_commands.append( + ( + write_heatmap, + [run_id, matdata, result_label_dict, result_class_dict, outfmts, args], + ) ) - write_distribution(run_id, matdata, outfmts, args) + plotting_commands.append((write_distribution, [run_id, matdata, outfmts, args])) + + # Run the plotting commands + [pool.apply_async(func, args, {}) for func, args in plotting_commands] + + # Close worker pool + pool.close() + pool.join() def write_distribution( - run_id: int, matdata: MatrixData, outfmts: List[str], args: Namespace, + run_id: int, + matdata: MatrixData, + outfmts: List[str], + args: Namespace, ) -> None: """Write distribution plots for each matrix type. diff --git a/tests/test_subcmd_06_plot.py b/tests/test_subcmd_06_plot.py index 16b96bbe..989a1e7f 100644 --- a/tests/test_subcmd_06_plot.py +++ b/tests/test_subcmd_06_plot.py @@ -80,6 +80,7 @@ def setUp(self): dbpath=self.dbpath, formats="pdf", method="mpl", + workers=None, ), "mpl_png": Namespace( outdir=self.outdir / "mpl", @@ -87,6 +88,7 @@ def setUp(self): dbpath=self.dbpath, formats="png", method="mpl", + workers=None, ), "mpl_svg": Namespace( outdir=self.outdir / "mpl", @@ -94,6 +96,7 @@ def setUp(self): dbpath=self.dbpath, formats="svg", method="mpl", + workers=None, ), "mpl_jpg": Namespace( outdir=self.outdir / "mpl", @@ -101,6 +104,7 @@ def setUp(self): dbpath=self.dbpath, formats="jpg", method="mpl", + workers=None, ), "seaborn_pdf": Namespace( outdir=self.outdir / "seaborn", @@ -108,6 +112,7 @@ def setUp(self): dbpath=self.dbpath, formats="pdf", method="seaborn", + workers=None, ), "seaborn_png": Namespace( outdir=self.outdir / "seaborn", @@ -115,6 +120,7 @@ def setUp(self): dbpath=self.dbpath, formats="png", method="seaborn", + workers=None, ), "seaborn_svg": Namespace( outdir=self.outdir / "seaborn", @@ -122,6 +128,7 @@ def setUp(self): dbpath=self.dbpath, formats="svg", method="seaborn", + workers=None, ), "seaborn_jpg": Namespace( outdir=self.outdir / "seaborn", @@ -129,6 +136,7 @@ def setUp(self): dbpath=self.dbpath, formats="jpg", method="seaborn", + workers=None, ), } From 2b09fb0b99bb198c31d51cbf7ce7af00171d5262 Mon Sep 17 00:00:00 2001 From: baileythegreen Date: Tue, 19 Oct 2021 13:54:14 +0100 Subject: [PATCH 32/74] Change list comprehension to `for` loop for readability --- pyani/scripts/subcommands/subcmd_plot.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pyani/scripts/subcommands/subcmd_plot.py b/pyani/scripts/subcommands/subcmd_plot.py index 398d0934..dd39ca78 100644 --- a/pyani/scripts/subcommands/subcmd_plot.py +++ b/pyani/scripts/subcommands/subcmd_plot.py @@ -42,6 +42,7 @@ import logging import os import multiprocessing +import time from argparse import Namespace from pathlib import Path @@ -162,7 +163,8 @@ def write_run_heatmaps( ) # Run the plotting commands - [pool.apply_async(func, args, {}) for func, args in plotting_commands] + for func, args in plotting_commands: + pool.apply_async(func, args, {}) # Close worker pool pool.close() From 2846bdf5e52d0db8adbd534217192c83133fd82f Mon Sep 17 00:00:00 2001 From: baileythegreen Date: Tue, 19 Oct 2021 13:57:01 +0100 Subject: [PATCH 33/74] Rename `write_run_heatmaps()` The new name will be less confusing because this function also runs the code that generates distribution and the scatter plots. --- pyani/scripts/subcommands/subcmd_plot.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/pyani/scripts/subcommands/subcmd_plot.py b/pyani/scripts/subcommands/subcmd_plot.py index dd39ca78..9f9eb6a7 100644 --- a/pyani/scripts/subcommands/subcmd_plot.py +++ b/pyani/scripts/subcommands/subcmd_plot.py @@ -92,14 +92,12 @@ def subcmd_plot(args: Namespace) -> int: run_ids = [int(run) for run in args.run_id.split(",")] logger.debug("Generating graphics for runs: %s", run_ids) for run_id in run_ids: - write_run_heatmaps(run_id, session, outfmts, args) + write_run_plots(run_id, session, outfmts, args) return 0 -def write_run_heatmaps( - run_id: int, session, outfmts: List[str], args: Namespace -) -> None: +def write_run_plots(run_id: int, session, outfmts: List[str], args: Namespace) -> None: """Write all heatmaps for a specified run to file. :param run_id: int, run identifier in database session From a23d1424589f4d5d44556858367b0c9c8cc53282 Mon Sep 17 00:00:00 2001 From: baileythegreen Date: Thu, 21 Oct 2021 15:22:20 +0100 Subject: [PATCH 34/74] Add new dependencies For generating trees --- requirements.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/requirements.txt b/requirements.txt index 79f24435..15d97e59 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,5 @@ biopython +ete3 matplotlib namedlist networkx @@ -6,6 +7,7 @@ numpy openpyxl pandas Pillow +PyQt5 scipy seaborn sqlalchemy==1.3.10 From 345ff06f31b146cb4b2d732b3849fd715e8f78c4 Mon Sep 17 00:00:00 2001 From: Anuj Sharma Date: Sat, 23 Oct 2021 21:02:33 -0400 Subject: [PATCH 35/74] Fixed typo Fixed typo in in genbank_get_genomes_by_taxon.py usage --- README_v_0_2_x.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README_v_0_2_x.md b/README_v_0_2_x.md index c9e4bd02..f8c7e838 100644 --- a/README_v_0_2_x.md +++ b/README_v_0_2_x.md @@ -213,7 +213,7 @@ Command-line options can be viewed using: ```bash $ genbank_get_genomes_by_taxon.py -h -usage: genbacnk_get_genomes_by_taxon.py [-h] [-o OUTDIRNAME] [-t TAXON] [-v] +usage: genbank_get_genomes_by_taxon.py [-h] [-o OUTDIRNAME] [-t TAXON] [-v] [-f] [--noclobber] [-l LOGFILE] [--format FORMAT] [--email EMAIL] [--retries RETRIES] From 2c48379310c6b05f25e5c34ae42ceed20817fce7 Mon Sep 17 00:00:00 2001 From: widdowquinn Date: Tue, 2 Nov 2021 15:08:00 +0000 Subject: [PATCH 36/74] add citations for September/October 2021 --- docs/citations.rst | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/docs/citations.rst b/docs/citations.rst index 9f57d618..907b6491 100644 --- a/docs/citations.rst +++ b/docs/citations.rst @@ -62,10 +62,13 @@ If you are using ``pyani``, you are in good company. These authors and manuscrip * Abdel-Glil *et al.* (2021) "Comparative in silico genome analysis of *Clostridium perfringens* unravels stable phylogroups with different genome characteristics and pathogenic potential" *Sci. Rep.* `doi:10.1038/s41598-021-86148-8 `_ * Abdullah *et al.* (2021) "Comparative analysis of whole genome sequences of *Leptospira* spp. from RefSeq database provide interspecific divergence and repertoire of virulence factors" *bioRxiv* `doi:10.1101/2021.01.12.426470 `_ * Al Rubaye *et al.* (2021) "Novel genomic islands and a new vanD-subtype in the first sporadic VanD-type vancomycin resistant enterococci in Norway" *PLoS One* `doi:10.1371/journal.pone.0255187 `_ +* Alonso-Reyes *et al.* (2021) "Genomic insights into an andean multiresistant soil actinobacterium of biotechnological interest." *World J Microbiol Biotechnol* `doi:10.1007/s11274-021-03129-9 `_ * Asselin *et al.* (2021) "Complete genome sequence resources for the onion pathogen, *Pantoea ananatis* OC5a" *Phytopath.* `doi:10.1094/phyto-09-20-0416-a `_ * Badhai *et al.* (2021) "Genomic plasticity and antibody response of *Bordetella bronchiseptica* strain HT200, a natural variant from a thermal spring" *FEMS Micro. Lett.* `doi:10.1093/femsle/fnab035 `_ * Becken *et al.* (2021) "Genotypic and Phenotypic Diversity among Human Isolates of *Akkermansia muciniphila*" *mBio* `doi:10.1128/mBio.00478-21 `_ +* Bei *et al.* (2021) "Shedding light on the functional role of the *Ignavibacteria* in Italian rice field soil: A meta-genomic/transcriptomic analysis" *Soil Biol. Biochem.* `doi:10.1016/j.soilbio.2021.108444 `_ * Biffignandi *et al* (2021) "Genome of *Superficieibacter maynardsmithii*, a novel, antibiotic susceptible representative of *Enterobacteriaceae*" *G3* `doi:10.1093/g3journal/jkab019 `_ +* Biggel *et al.* (2021) "Spread of vancomycin-resistant *Enterococcus faecium* ST133 in the aquatic environment in Switzerland" *J. Glob. Anitmicrob. Res.* `doi:10.1016/j.jgar.2021.08.002 `_ * Boeuf *et al.* (2021) "Meta-pangenomics Reveals Depth-dependent Shifts in Metabolic Potential for the Ubiquitous Marine Bacterial SAR324 Lineage" *Research Squared* `doi:10.21203/rs.3.rs-225427/v1 `_ * Carlin *et al.* (2021) "*Listeria cossartiae sp. nov.*, *Listeria immobilis sp. nov.*, *Listeria portnoyi sp. nov.* and *Listeria rustica sp. nov.*, isolated from agricultural water and natural environments" *Int. J. Syst. Evol. Microbiol.* `doi:10.1099/ijsem.0.004795 `_ * Chen *et al.* (2021) "Integrated Phenotypic-Genotypic Analysis of *Latilactobacillus sakei* from Different Niches" *preprints* `doi:10.20944/preprints202107.0457.v1 `_ @@ -77,8 +80,11 @@ If you are using ``pyani``, you are in good company. These authors and manuscrip * Costatini *et al.* (2021) "Insight into phenotypic and genotypic differences between vaginal *Lactobacillus crispatus* BC5 and *Lactobacillus gasseri* BC12 to unravel nutritional and stress factors influencing their metabolic activity" *Microb. Genomics* `doi:10.1099/mgen.0.000575 `_ * de Silva *et al.* (2021) "Revisiting the *Colletotrichum* species causing anthracnose of almond in Australia" *Aust. Plant Path.* `doi:10.1007/s13313-020-00765-x `_ * Delgado-Blas *et al.* (2021) "Population genomics and antimicrobial resistance dynamics of *Escherichia coli* in wastewater and river environments" *Commun Biol* `doi:10.1038/s42003-021-01949-x `_ +* Devika *et al.* (2021) "In Silico Prediction of Novel Probiotic Species Limiting Pathogenic *Vibrio* Growth Using Constraint-Based Genome Scale Metabolic Modeling" *Front. Cell. Inf. Microbiol.* `doi:10.3389/fcimb.2021.752477 `_ +* Díaz *et al.* (2021) "Comparative Genomic Analysis of Novel *Bifidobacterium longum* subsp. *longum* Strains Reveals Functional Divergence in the Human Gut Microbiota" *microorganisms* `doi:10.3390/microorganisms9091906 `_ * Dragoš *et al* (2021) "Phages carry interbacterial weapons encoded by biosynthetic gene clusters" *Curr. Biol.* `doi:10.1016/j.cub.2021.05.046 `_ * Ducarmon *et al.* (2021) "Microbiota-associated risk factors for asymptomatic gut colonisation with multi-drug-resistant organisms in a Dutch nursing home" *Genome Medicine* `doi:0.1186/s13073-021-00869-z `_ +* Fluit *et al.* (2021) "Characterization of clinical *Ralstonia* strains and their taxonomic position." *Antonie van Leeuwenhoek* `doi:10.1007/s10482-021-01637-0 `_ * Foucher *et al.* (2021) "Improving common bacterial blight phenotyping by using rub-inoculation and machine learning: cheaper, better, faster, stronger" *Phytopath.* `doi:10.1094/PHYTO-04-21-0129-R `_ * Friedrich *et al.* (2021) "Complete Genome Sequence of *Stenotrophomonas indicatrix* DAIF1" *Micro Res. Ann.* `doi:10.1128/MRA.01484-20 `_ * Friedrich *et al.* (2021) "Living in a Puddle of Mud: Isolation and Characterization of Two Novel *Caulobacteraceae* Strains *Brevundimonas pondensis sp. nov.* and *Brevundimonas goettingensis sp. nov.*" *appl. microbiol.* `doi:10.3390/applmicrobiol1010005 `_ @@ -86,17 +92,25 @@ If you are using ``pyani``, you are in good company. These authors and manuscrip * Gallardo-Benavente *et al.* (2021) "Genomics Insights into *Pseudomonas* sp. CG01: An Antarctic Cadmium-Resistant Strain Capable of Biosynthesizing CdS Nanoparticles Using Methionine as S-Source" *genes* `doi:10.3390/genes12020187 `_ * Girard *et al.* (2021) "The Ever-Expanding *Pseudomonas* Genus: Description of 43 New Species and Partition of the *Pseudomonas Putida* Group" *preprints* `doi:10.20944/preprints202107.0335.v1 `_ * Ghosh *et al.* (2021) "Reconstructing Draft Genomes Using Genome Resolved Metagenomics Reveal Arsenic Metabolizing Genes and Secondary Metabolites in Fresh Water Lake in Eastern India" *Bioinf. Biol. Insights* `doi:10.1177/11779322211025332 https://doi.org/10.1177/11779322211025332>`_ +* Granehäll *et al.* (2021) "Metagenomic analysis of ancient dental calculus reveals unexplored diversity of oral archaeal *Methanobrevibacter*." *Microbiome* `doi:https://doi.org/10.1186/s40168-021-01132-8 `_ * Guerin *et al.* (2021) "Isolation and characterisation of ΦcrAss002, a crAss-like phage from the human gut that infects *Bacteroides xylanisolvens*" *Microbiome* `doi:10.1186/s40168-021-01036-7 `_ * Halary *et al.* (2021) "Unexpected Micro-Spatial Scale Genomic Diversity of the Bloom-Forming Cyanobacterium *Aphanizomenon gracile* and its Phycosphere" *Res. Sq.* `doi:10.21203/rs.3.rs-617160/v1 `_ +* Hansen *et al.* (2021) "Metagenomic sequencing for rapid identification o f*Xylella fastidiosa* from leaf samples" *bioRxiv* `doi:10.1101/2021.05.12.443947 `_ * Hoetzinger *et al.* (2021) "Dynamics of Baltic Sea phages driven by environmental changes" *Env. Microbiol.* `doi:10.1111/1462-2920.15651 `_ +* Holzer *et al.* (2021) "Tracking the Distribution of *Brucella abortus* in Egypt Based on Core Genome SNP Analysis and In Silico MLVA-16" *microorganisms* `doi:10.3390/microorganisms9091942 `_ +* von Hoyningen-Huene *et al.* (2021) "*Pontibacillus* sp. ALD_SL1 and *Psychroflexus* sp. ALD_RP9, two novel moderately halophilic bacteria isolated from sediment and water from the Aldabra Atoll, Seychelles" *PLoS ONE* `doi:10.1371/journal.pone.0256639 `_ * Huang *et al.* (2021) "Phenotypic properties and genotyping analysis of *Bacillus cereus* group isolates from dairy and potato products" *LWT* `doi:10.1016/j.lwt.2021.110853 `_ * Huang *et al.* (2021) "Genome-resolved metagenomics using environmental and clinical samples" *Brief. Bioinf.* `doi:10.1093/bib/bbab030 `_ +* Huang *et al.* (2021) "Comparative Genomics and Specific Functional Characteristics Analysis of *Lactobacillus acidophilus*" *microorganisms* `doi:10.3390/microorganisms9091992 `_ +* Huihui *et al.* (2021) "Partial biological characteristics and genomic analysis of *Vibrio cholerae* typing phage VP2" *Disease Surv.* `doi:10.3784/jbjc.202105190282 `_ * Hünnefeld *et al.* (2021) "Genome Sequence of the Bacteriophage CL31 and Interaction with the Host Strain *Corynebacterium glutamicum* ATCC 13032" *viruses* `doi:10.3390/v13030495 `_ * Ivanova *et al.* (2021) "Draft Genome Assemblies of Two *Campylobacter novaezeelandiae* and Four Unclassified Thermophilic *Campylobacter* Isolates from Canadian Agricultural Surface Water" *Microbiol. Res. Ann.* `doi:10.1128/MRA.00249-21 `_ * Jian *et al.* (2021) "Diversity and distribution of viruses inhabiting the deepest ocean on Earth" *ISME J.* `doi:10.1038/s41396-021-00994-y `_ * Jungblut *et al.* (2021) "Genomic diversity and CRISPR‐Cas systems in the cyanobacterium *Nostoc* in the High Arctic" *Env. Microbiol.* `doi:10.1111/1462-2920.15481 `_ * Karaseva *et al.* (2021) "*Fervidicoccus fontis* Strain 3639Fd, the First Crenarchaeon Capable of Growth on Lipids" *Microbiol.* `doi:10.1134/S002626172104007X `_ +* Keen *et al.* (2021) "Comparative Genomics of *Mycobacterium avium* Complex Reveals Signatures of Environment-Specific Adaptation and Community Acquisition" *mSystems* `doi:10.1128/mSystems.01194-21 `_ * Koirala *et al.* (2021) "Identification of two novel pathovars of *Pantoea stewartii* subsp. *indologenes* affecting Allium sp. and millets" *Phytopathology* `doi:10.1094/PHYTO-11-20-0508-R `_ +* Kuźmińska-Bajor *et al.* (2021) "Genomic and functional characterization of five novel *Salmonella*-targeting bacteriophages." *Virol J* `doi:10.1186/s12985-021-01655-4 `_ * Lakra *et al.* (2021) "Genome based reclassification of *Deinococcus swuensis* as a heterotypic synonym of *Deinococcus radiopugnans*" *Int. J. Syst. Evol. Microbiol.* `doi:10.1099/ijsem.0.004879 `_ * Lee *et al.* (2021) "*Bifidobacterium bifidum* strains synergize with immune checkpoint inhibitors to reduce tumour burden in mice" *Nat. Microbiol.* `doi:10.1038/s41564-020-00831-6 `_ * Lee *et al.* (2021) "Identification and Characterization of a Novel Genomic Island Harboring Cadmium and Arsenic Resistance Genes in *Listeria welshimeri*" *biomolecules* `doi:10.3390/biom11040560 `_ @@ -108,35 +122,47 @@ If you are using ``pyani``, you are in good company. These authors and manuscrip * Liao *et al.* (2021) "Nationwide genomic atlas of soil-dwelling *Listeria* reveals effects of selection and population ecology on pangenome evolution" *Nat. Microbiol.* `doi:10.1038/s41564-021-00935-7 `_ * Liu *et al.* (2021) "*Corynebacterium anserum* sp. nov., isolated from the faeces of greater white-fronted geese (*Anser albifrons*) at Poyang Lake, PR China" *Int. J. Syst. Evol. Microbiol.* `doi:10.1099/ijsem.0.004637 `_ * Lood *et al.* (2021) "Genomics of an endemic cystic fibrosis *Burkholderia multivorans* strain reveals low within-patient evolution but high between-patient diversity" *PLoS Pathog.* `doi:0.1371/journal.ppat.1009418 `_ +* López-Pérez *et al.* (2021) "Ecological diversification reveals routes of pathogen emergence in endemic *Vibrio vulnificus* populations" *Proc. Natl. Acad. Sci. USA* `doi:10.1073/pnas.2103470118 `_ * Lu *et al.* (2021) "Asgard archaea in the haima cold seep: Spatial distribution and genomic insights" *Deep Sea Res. I* `doi:10.1016/j.dsr.2021.103489 `_ +* Lu *et al.* (2021) "Comparative Genomic Analysis of *Bifidobacterium bifidum* Strains Isolated from Different Niches" *genes* `doi:10.3390/genes12101504 `_ * Luo *et al.* (2021) "Isolation and characterization of new phage vB_CtuP_A24 and application to control *Cronobacter* spp. in infant milk formula and lettuce" *Food Res. Int.* `doi:10.1016/j.foodres.2021.110109 `_ * Ma *et al.* (2021) "Identification of *Pectobacterium versatile* causing blackleg of potato in New York State" *Plant Disease* `doi:10.1094/PDIS-09-20-2089-RE `_ * Majer *et al.* (2021) "Whole genome sequencing of *Streptomyces actuosus* ISP-5337, *Streptomyces sioyaensis* B-5408, and *Actinospica acidiphila* B-2296 reveals secondary metabolomes with antibiotic potential" *Biotech. Rep.* `doi:10.1016/j.btre.2021.e00596 `_ * Matarrita-Carranza *et al.* (2021) "*Streptomyces* sp. M54: an actinobacteria associated with a neotropical social wasp with high potential for antibiotic production." *Antonie van Leeuwenhoek* `doi:10.1007/s10482-021-01520-y `_ +* Matsumoto *et al.* (2021) "Complete Genome Sequence of *Acinetobacter pittii* OCU_Ac17, Isolated from Human Venous Blood" *Microbiol. Res. Ann.* `doi:10.1128/MRA.00696-21 `_ * Mao *et al.* (2021) "Comparative Genomic Analysis of *Lactiplantibacillus plantarum* Isolated from Different Niches" *genes* `doi:10.3390/genes12020241 `_ +* McKay *et al.* (2021) "Sulfur cycling and host-virus interactions in *Aquificales*-dominated biofilms from Yellowstone’s hottest ecosystems." *ISME J* `doi:10.1038/s41396-021-01132-4 `_ * Moon *et al* (2021) "Mobile Colistin Resistance Gene mcr-1 Detected on an IncI2 Plasmid in *Salmonella Typhimurium* Sequence Type 19 from a Healthy Pig in South Korea" *microorganisms* `doi:10.3390/microorganisms9020398 `_ * Moya-Beltrán *et al.* (2021) "Genomic evolution of the class *Acidithiobacillia*: deep-branching *Proteobacteria* living in extreme acidic conditions" *ISME J.* `doi:0.1038/s41396-021-00995-x `_ * Mullins *et al.* (2021) "Discovery of the Pseudomonas Polyyne Protegencin by a Phylogeny-Guided Study of Polyyne Biosynthetic Gene Cluster Diversity" *mBio* `doi:10.1128/mBio.00715-21 `_ +* Nascimento *et al.* (2021) "Genomic Analysis of the 1-Aminocyclopropane-1-Carboxylate Deaminase-Producing *Pseudomonas thivervalensis* SC5 Reveals Its Multifaceted Roles in Soil and in Beneficial Interactions With Plants" *Front. Microbiol.* `doi:10.3389/fmicb.2021.752288 `_ * Nemec *et al.* (2021) "Delineation of a novel environmental phylogroup of the genus *Acinetobacter* encompassing *Acinetobacter terrae sp. nov.*, *Acinetobacter terrestris sp. nov.* and three other tentative species" *Syst. Appl. Microbiol.* `doi:10.1016/j.syapm.2021.126217 `_ * Nikolaisen *et al.* (2021) "First finding of *Streptococcus phocae* infections in mink (*Neovison vison*)" *Res. Vet. Sci.* `doi:10.1016/j.rvsc.2021.07.015 `_ * Nooij *et al.* (2021) "Faecal microbiota transplantation influences procarcinogenic *Escherichia coli* in recipient recurrent *Clostridioides difficile* patients" *Gastroenterology* `doi:10.1053/j.gastro.2021.06.009 `_ * Ogg *et al.* (2021) "Pangenome analyses of LuxS-coding genes and enzymatic repertoires in cocoa-related lactic acid bacteria" *Genomics* `doi:10.1016/j.ygeno.2021.04.010 `_ * Öhrman *et al.* (2021) "Reorganized Genomic Taxonomy of *Francisellaceae* Enables Design of Robust Environmental PCR Assays for Detection of *Francisella tularensis*" *Microorganisms* `doi:10.3390/microorganisms9010146 `_ * Öhrman *et al.* (2021) "Complete Genome Sequence of *Francisella* sp. Strain LA11-2445 (FDC406), a Novel *Francisella* Species Isolated from a Human Skin Lesion" *Micro. Res. Ann.* `doi:10.1128/MRA.01233-20 `_ -* Pédron *et al.* (2021) "Early Emergence of *Dickeya solani* Revealed by Analysis of *Dickeya* Diversity of Potato Blackleg and Soft Rot Causing Pathogens in Switzerland" *microorganisms* `doi:10.3390/microorganisms9061187 `_ * Pais *et al.* (2021) "Genomic sequencing of different sequevars of *Ralstonia solanacearum* belonging to the Moko ecotype" *Genet. Mol. Bol.* `doi:10.1590/1678-4685-gmb-2020-0172 `_ +* Pédron *et al.* (2021) "Early Emergence of *Dickeya solani* Revealed by Analysis of *Dickeya* Diversity of Potato Blackleg and Soft Rot Causing Pathogens in Switzerland" *microorganisms* `doi:10.3390/microorganisms9061187 `_ +* Pérez-Carrascal *et al.* (2021) "Single-colony sequencing reveals microbe-by-microbiome phylosymbiosis between the cyanobacterium *Microcystis* and its associated bacteria." *Microbiome* `doi:10.1186/s40168-021-01140-8 `_ * Petriglieri *et al.* (2021) "Candidatus *Dechloromonas phosphoritropha* and Ca. *D. phosphorivorans*, novel polyphosphate accumulating organisms abundant in wastewater treatment systems" *ISME J.* `doi:10.1038/s41396-021-01029-2 `_ +* Pidcock *et al.* (2021) "Phylogenetic systematics of *Butyrivibrio* and *Pseudobutyrivibrio* genomes illustrate vast taxonomic diversity, open genomes and an abundance of carbohydrate-active enzyme family isoforms" *Microbial Genomics* `doi:10.1099/mgen.0.000638 `_ * Puri *et al.* "Phylogenomic Framework for Taxonomic Delineation of *Paracoccus* spp. and Exploration of Core-Pan Genome" *Ind. J. Microbiol.* `doi:10.1007/s12088-021-00929-3 `_ +* Román-Reyna *et al.* (2021) "Metagenomic Sequencing for Identification of *Xylella fastidiosa* from Leaf Samples" *mSystems* `doi:10.1128/mSystems.00591-21 `_ * Reichler *et al.* (2021) "Identification, subtyping, and tracking of dairy spoilage-associated *Pseudomonas* by sequencing the *ileS* gene" *J. Dairy Sci.* `doi:10.3168/jds.2020-19283 `_ * Ryngajłło *et al.* (2021) "Complete genome sequence of lovastatin producer *Aspergillus terreus* ATCC 20542 and evaluation of genomic diversity among *A. terreus* strains" *Appl. Microbiol. Biotechnol.* `doi:10.1007/s00253-021-11133-0 `_ +* Saati-Santamaría *et al.* (2021) "Phylogenomic Analyses of the Genus _Pseudomonas_ Lead to the Rearrangement of Several Species and the Definition of New Genera" *Biology* `doi:10.3390/biology10080782 `_ +* Sakiyama *et al.* (2021) "Complete Genome Sequence of a Clinical Isolate of *Acinetobacter baumannii* Harboring 11 Plasmids" *Microbiol. Res. Ann.* `doi:10.1128/MRA.00695-21 `_ * Schlez *et al.* (2021) "*Corynebacterium rouxii*, a recently described member of the *C. diphtheriae* group isolated from three dogs with ulcerative skin lesions" *Ant. van Leeuw.* `doi:10.1007/s10482-021-01605-8 `_ * Schörner *et al.* (2021) "Genomic analysis of *Neisseria elongata* isolate from a patient with infective endocarditis" *FEBS Open Bio* `doi:10.1002/2211-5463.13201 `_ * von Schwartzenberg *et al.* (2021) "Caloric restriction disrupts the microbiota and colonization resistance" *Nature* `doi:10.1038/s41586-021-03663-4 `_ * Sedaghatjoo *et al.* (2021) "Development of a loop-mediated isothermal amplification assay for the detection of *Tilletia controversa* based on genome comparison" *Sci. Reports.* `doi:10.1038/s41598-021-91098-2 `_ +* Seibert *et al.* (2021) "*Chlamydia buteonis* in birds of prey presented to California wildlife rehabilitation facilities" *PLoS One* `doi:10.1371/journal.pone.0258500 `_ * Singh *et al.* (2021) "Enrichment and description of novel bacteria performing syntrophic propionate oxidation at high ammonia level" *Env. Micro.* `doi:10.1111/1462-2920.15388 `_ * Singh *et al.* (2021) "Genome-based reclassification of *Amycolatopsis eurytherma* as a later heterotypic synonym of *Amycolatopsis thermoflava*" *Int. J. Syst. Evol. Microbiol.* `doi:10.1099/ijsem.0.004642 `_ * Son *et al.* (2021) "*Serratia rhizosphaerae sp. nov.*, a novel plant resistance inducer against soft rot disease in tobacco" *Int. J. Syst. Evol. Microbiol.* `doi:10.1099/ijsem.0.004788 `_ * Sorokin *et al.* (2021) "*Natronoglycomyces albus gen. nov., sp. nov*, a haloalkaliphilic actinobacterium from a soda solonchak soil" *Int. J. Syst. Evol. Microbiol.* `doi:10.1099/ijsem.0.004804 `_ +* Strube (2021) "RibDif: can individual species be differentiated by 16S sequencing?" *Bioinf. Adv.* `doi:10.1093/bioadv/vbab020 `_ * Suarez *et al.* (2021) "Whole-Genome sequencing and comparative genomics of *Mycobacterium spp.* from farmed Atlantic and coho salmon in Chile" *Antonie van Leeuw.* `doi:10.1007/s10482-021-01592-w `_ * Tian *et al.* (2021) "LINflow: a computational pipeline that combines an alignment-free with an alignment-based method to accelerate generation of similarity matrices for prokaryotic genomes" *PeerJ* `doi:10.7717/peerj.10906 `_ * Tian *et al.* (2021) "Antifungal mechanism of *Bacillus amyloliquefaciens* strain GKT04 against *Fusarium* wilt revealed using genomic and transcriptomic analyses" *Microbiol. Open* `doi:10.1002/mbo3.1192 `_ @@ -147,8 +173,12 @@ If you are using ``pyani``, you are in good company. These authors and manuscrip * Viera *et al.* (2021) "A highly specific *Serratia*-infecting T7-like phage inhibits biofilm formation in two different genera of the Enterobacteriaceae family" *Res. Microbiol.* `doi:10.1016/j.resmic.2021.103869 `_ * Vincent *et al.* (2021) "AsaGEI2d: a new variant of a genomic island identified in a group of *Aeromonas salmonicida* subsp. *salmonicida* isolated from France, which bears the pAsa7 plasmid" *FEMS Micro. Lett.* `doi:10.1093/femsle/fnab021 `_ * Volpiano *et al.* (2021) "Genomic Metrics Applied to *Rhizobiales (Hyphomicrobiales)*: Species Reclassification, Identification of Unauthentic Genomes and False Type Strains" *Front. Microbiol.* `doi:10.3389/fmicb.2021.614957 `_ +* Wang *et al.* (2021). "Spontaneous Bacterial Peritonitis Caused by *Bordetella hinzii*." *Emerging Infectious Diseases* `doi:10.3201/eid2711.211428 `_ +* Wang *et al.* (2021) "Dynamic impact of virome on colitis and colorectal cancer: Immunity, inflammation, prevention and treatment" *Sem. Cancer Biol.* `doi:10.1016/j.semcancer.2021.10.004 `_ * Watson *et al.* (2021) "Adaptive ecological processes and metabolic independence drive microbial colonization and resilience in the human gut" *bioRxiv* `doi:10.1101/2021.03.02.433653 `_ * Wu *et al.* (2021) "Metagenomic insights into nitrogen and phosphorus cycling at the soil aggregate scale driven by organic material amendments" *Sci. Tot. Env.* `doi:10.1016/j.scitotenv.2021.147329 `_ +* Wu *et al.* (2021) "Moisture modulates soil reservoirs of active DNA and RNA viruses." *Commun Biol* `doi:10.1038/s42003-021-02514-2 `_ +* Wu *et al.* (2021) "An Effective Preprocessing Method for High-Quality Pan-Genome Analysis of *Bacillus subtilis* and *Escherichia coli*" *Essential Genes and Genomes* `doi:10.1007/978-1-0716-1720-5_21 `_ * Xiao *et al.* (2021) "Carbapenem-resistant *Acinetobacter Baumannii* Ventilator-Associated Pneumonia in Critically Ill Patients: Potential Inference with Respiratory Tract Microbiota Dysbiosis" *Res. Sq.* `doi:10.21203/rs.3.rs-736916/v1 `_ * Young *et al.* (2021) "Defining the *Rhizobium leguminosarum* Species Complex" *genes* `doi:10.3390/genes12010111 `_ * Zeng *et al.* (2021) "Novel phage vB_CtuP_B1 for controlling *Cronobacter malonaticus* and *Cronobacter turicensis* in ready-to-eat lettuce and powered infant formula" *Food Res. Int.* `doi:10.1016/j.foodres.2021.110255 `_ From def0e87564f7cacbb41373ed9b22f4be171e8acc Mon Sep 17 00:00:00 2001 From: widdowquinn Date: Fri, 5 Nov 2021 12:50:04 +0000 Subject: [PATCH 37/74] update plot interpretation docs - add notes on distribution/scatter plots - clarify interpretations of heatmaps - correct method descriptions --- docs/images/distribution_identity_run3.png | Bin 0 -> 40360 bytes docs/images/scatterplot.png | Bin 0 -> 437129 bytes docs/interpreting_plots.rst | 148 +++++++++++++++++---- 3 files changed, 125 insertions(+), 23 deletions(-) create mode 100644 docs/images/distribution_identity_run3.png create mode 100644 docs/images/scatterplot.png diff --git a/docs/images/distribution_identity_run3.png b/docs/images/distribution_identity_run3.png new file mode 100644 index 0000000000000000000000000000000000000000..6ebb01e926e74ab62c7ef716ffb1d93f312fd90a GIT binary patch literal 40360 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 literal 0 HcmV?d00001 diff --git a/docs/images/scatterplot.png b/docs/images/scatterplot.png new file mode 100644 index 0000000000000000000000000000000000000000..2aed9473ad64ec0dc3635eaa1236c4794c3b4fe7 GIT binary patch literal 437129 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

q$P=5Kn^2+eZNfkLtZlSJ{$*Vh= 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ϡpGvqzBmPme`oSC4u&~ufO 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 literal 0 HcmV?d00001 diff --git a/docs/interpreting_plots.rst b/docs/interpreting_plots.rst index b5e195af..70dcb469 100644 --- a/docs/interpreting_plots.rst +++ b/docs/interpreting_plots.rst @@ -18,68 +18,170 @@ Interpreting the Graphical Output The Output ---------- -``pyani plot`` generates five plots corresponding to the matrices that ``pyani report`` produces: +``pyani plot`` generates five heatmaps corresponding to the matrices that ``pyani report`` produces: - - percentage identity of aligned regions - - percentage coverage of each genome by aligned regions - - number of aligned bases on each genome + - percentage identity across all aligned regions (*Average Nucleotide Identity*, ANI) + - percentage coverage of each genome by aligned regions (*Coverage*, or *Aligned Fraction* (AF)) + - number of bases from each genome contributing to the aligned regions - number of "similarity errors" on each genome - a Hadamard matrix of percentage identity multiplied by percentage coverage for each comparison +For each heatmap, a pair of plots describing the distributions of values in the heatmap/matrix are also generated. These show a histogram (left) and a KDE with rugplot (right) of the values in the heatmap. + +In addition, a scatterplot of ANI vs Coverage/AF for each pairwise comparison is produced. + +-------- +Heatmaps +-------- + +^^^^^^^^^^^^^^^^^^^^^^^ +Percentage Identity/ANI +^^^^^^^^^^^^^^^^^^^^^^^ + .. figure:: images/matrix_identity_1.png :alt: percentage identity matrix for *Candidatus Blochmannia* ANIm analysis Percentage identity matrix for *Candidatus Blochmannia* ANIm analysis - Each cell represents a pairwise comparison between the named genomes on rows and columns, and the number in the cell is the pairwise identity *of aligned regions*. The dendrograms are single-linkage clustering trees generated from the matrix of pairwise identity results. The default colour scheme colours cells with identity > 0.95 as red, and those with < 0.95 as blue. This division corresponds to a widely-used convention for bacterial species boundaries. + Each cell represents a pairwise comparison between the named genomes on rows and columns, and the number in each cell is the pairwise identity *of all aligned regions*. The dendrograms are produced by single-linkage hierarchical clustering trees from the matrix of pairwise identity results. The default colour scheme colours cells with identity > 0.95 as red, and those with < 0.95 as blue. This division corresponds to a widely-used convention for bacterial species boundaries. + +.. note:: + + No single ANI threshold should be considered universally applicable to distinguish between species for all bacterial genomes. + +We can often take the red blocks on the main diagonal of the heatmap to indicate groups of genomes that are coherent with each other and exclude all other genomes in the analysis, which is one of the criteria we would use to delineate a biological species or other taxon. As a rule of thumb, red squares on the main diagonal are a good approximation to species. + +Taking the 95% threshold between red and blue cells to be equivalent to a species boundary, an interpretation of this figure would be that: + +* the two genomes BPEN and 640 could be classified as the same species +* the remaining four genomes each represent a distinct species + +In particular, we can see that the off-diagonal identity values are all around 85%, consistent with the limit of detection for homologous nucleotide regions. + +.. note:: + + ANI reports the average percentage identity for the *aligned regions* only. If the total aligned proportion of either genome is not large, then ANI is not a reliable measure of overall genome similarity, and interpretation of percentage identity thresholds as species boundaries becomes less reliable. Percentage identity should always be considered in conjunction with coverage/aligned fraction. + +^^^^^^^^^^^^^^^^^^^^^^^^^ +Coverage/Aligned Fraction +^^^^^^^^^^^^^^^^^^^^^^^^^ .. figure:: images/matrix_coverage_1.png :alt: percentage coverage matrix for *Candidatus Blochmannia* ANIm analysis Percentage coverage matrix for *Candidatus Blochmannia* ANIm analysis - Each cell represents a pairwise comparison between the named genomes on rows and columns, and the number in the cell is pairwise coverage of each genome by aligned regions in the comparison. The dendrograms are single-linkage clustering trees generated from the matrix of pairwise coverage results. The default colour scheme colours cells with identity > 0.50 as red, and those with < 0.50 as blue. This division corresponds to a strict majority of each genome in the comparison being alignable (a plausible minimum requirement for two sequences being considered "the same thing"). + Each cell represents a pairwise comparison between the named genomes on rows and columns, and the number in each cell is the pairwise coverage of each genome by aligned regions in the comparison. The dendrograms are generated by single-linkage hierarchical clustering from the matrix of pairwise coverage results. The default colour scheme colours cells with identity > 0.50 as red, and those with < 0.50 as blue. This division corresponds to a strict majority of each genome in the comparison being alignable (a plausible *ad hoc* minimum requirement for two sequences being considered "the same thing"). + +.. note:: + + There is no widely-accepted convention for interpreting coverage/aligned fraction in its own right. Coverage should always be considered in conjunction with percentage identity and other measures. + +The default graphical representation of coverage/AF distinguishes between alignments that cover more than 50% of the query genome (red) from those that cover less than 50% (blue). This is an *ad hoc* boundary with no particular biological meaning, but which does have a useful property that guides interpretation of the output. + +If two genomes A and B align over less than 50% of genome A, then it is possible that the *majority* of genome A aligns to a different genome than genome B, with which genome B shares no homology. For instance, if the alignment of A and B has 30% coverage of genome A, it is possible that 70% of genome A is identical to another genome - C - which shares no sequence at all with genome B. In this case, it is perhaps not reasonable to assert that genomes A and B "are the same thing" or, in technical terms, *belong to the same taxon*. + +However, if two genomes A and B align over more than 50% of their genomes - a majority of each genome - it is possibly reasonable to assert that the two genomes are, in some way, "the same thing" (and possibly correspond to the same taxon). + +.. note:: + + The 50% coverage threshold can be considered as a line of "caution." Where coverage is less than 50%, there is the possibility that the two genomes are not in the same taxon. However, this is not diagnostic. + +Here, taking the 50% coverage threshold between red and blue cells to indicate an approximate boundary between genera, we would consider that BPEN and 640 are the same genus, but that each of the other genomes is representative of a distinct genus. + +.. note:: + + There is no agreed, universal coverage threshold corresponding to genus boundaries, so we should always consider the actual coverage/AF values + +In this case, nearly all the off-diagonal values in the blue cells are below ≈5%. This indicates that the proportion of each genome in the off-diagonal alignments is very small, and we are safe to assert that these organisms come from different genera. The exception to this is the comparison between BVAF and floridianus: their coverage is higher, at ≈15%. This may indicate a common plasmid or mobile element, or it may indicate a more recent common ancestor than the other comparisons; they may or may not validly be in the same genus - we would need to investigate further to understand their relationship. + +The BPEN/640 comparison is conclusive, however. Their coverage/AF is essentially 100%, so these are closely-related, highly sequence-homologous organisms. + +------------------ +Distribution Plots +------------------ + +.. figure:: images/distribution_identity_run3.png + :alt: distribution plot for an ANI comparison + + ANI value distribution plot + + In the distribution plots for each matrix, two figures are shown. On the left, a histogram of cell values is presented, representing binned values. On the right, a rug plot of individual matrix cell values and corresponding KDE plot (smoothed curve modelling the density as Gaussian distributions) is shown. ------------------------ -Understanding the plots ------------------------ +.. note:: -For each of the ANI methods provided by `pyani` the values shown in the plots are calculated differently — as a result of the differences in method/output of the third-party tool being called. + *Discontinuities* in the distribution of ANI values have been associated with taxonomically-useful boundaries, especially species boundaries (between 94-96% depending on lineage). It is common to see these as gaps in the rug plot. -**Average nucleotide identity** is a measure of similarity between two genomes. Depending on the ANI method used, this may be symmetrical: comparing genome A to genome B is the same as comparing genome B to genome A; or asymmetrical: A --> B is different from B --> A. `pyani` provides both symmetrical and assymmetrical ANI methods: +By inspection, we can see a discontinuity (i.e. a gap) in the rug plot that spans 95%. This is consistent with many prior observations that species boundaries coincide with a 94-96% ANI threshold. This plot provides some support for the assertion that comparisons to the right of the gap (red in the heatmap) are within-species comparisons, and those to the left (blue in the heatmap) are between-species comparisons. + +Other gaps/discontinuities are visible. The interpretations of these are highly context-dependent and it is not always clear whether they are taxonomically meaningful (e.g. subspecies or genus boundary), or reflect sampling biases. Further investigation and evidential support is necessary. + + +------------ +Scatterplots +------------ + +.. figure:: images/scatterplot.png + :alt: scatterplot of coverage/aligned fraction vs ANI + + Scatterplot of coverage/aligned fraction vs ANI + + Plotting coverage/aligned fraction (y-axis) against ANI (x-axis) can be informative. Here, as is often the case for larger comparisons, there is a clear piecewise linear appearance to the plot. There is a relatively shallow gradient for high (>50%) coverage comparisons, and a steep gradient for low (<50%) coverage comparisons. There is a discontinuity on the coverage axis between ≈40% and 60% coverage, corresponding to a shift between the two piecewise linear regimes. This is often interpretable as a genus boundary, but requires further evidence and support to be certain. + +Comparisons with high ANI but relatively low coverage for the dataset in question (these appear *below* the main population) may suggest the presence of a significant proportion of mobile elements in the sequenced genome. + +Often a vertical banding can be seen, due to discontinuities in the distribution of ANI values. Here, the discontinuity at around 95% ANI is consistent with a division between within-species (right of the gap) and between-species (left of the gap) comparisons. Vertical bands to the left of the 95% line may indicate comparisons between particular pairs of species that are more or less recently diverged, but likely fall within the same genus. + +The bulk of comparisons at the lower left of the plot likely indicate comparisons between relatively unrelated genomes, possibly from different genera. + + +-------------- +Plot Asymmetry +-------------- + +.. note:: + + Each ANI method in `pyani` calculates results by a different method. The difference between methods is usually that alternative third-party alignment tools are used. However, there may also be differences between the ways those alignment outputs are used. Please see the relevant documentation for details of each method. + +**Average nucleotide identity** is a measure of similarity between two genomes. Depending on the ANI method used, this may be symmetrical: comparing genome A to genome B is the same as comparing genome B to genome A; or asymmetrical: the result of comparing genome A with genome B can be different from comparing genome B with genome A. + +Asymmetry can arise as a consequence of the way the sequence alignment algorithm used for calculating genome alignments works. For instance, the initial seed alignment for a pair of genomes may be very similar, but not identical, and this difference may propagate through an extension step into differences in the final alignment. Alternatively, an aspect of the ANI algorithm may introduce asymmetry. For instance, the genome fragmentation step in ANIb may break each participating genome in different ways. + +`pyani` provides both symmetrical and asymmetrical ANI methods: - ANIm — symmetrical - FastANI — asymmetrical (only available in version 0.3.0-alpha) - ANIb — asymmetrical - ANIblastall — asymmetrical - - TETRA — symmetrical - - -**Alignment length** is the count of bases in the pairwise alignment of two genomes. - - - in ANIm this is calculated as ``reference_positions_in_alignment + insertions - deletions`` - - in fastANI this is ``matched_fragments * fragment_length`` - - in ANIb this is ``alignment_length - gaps - mismatches`` - - in ANIblastall this is ``alignment_length - gaps - mismatches`` + - TETRA — symmetrical (though please note that this is not strictly an ANI method) -**Alignment coverage** is the proportion of the query genome that aligns against the reference genome (this can be asymmetrical: comparing genome A to genome B may give different coverage values for A and B). +**Alignment coverage** is the proportion of the query genome that aligns against the reference genome. This can be asymmetrical even when the alignment itself is symmetrical, as the genomes participating in a pairwise alignment may have differing amounts of genomic sequence that do not contribute to the alignment. In general, comparing genome A to genome B will give different coverage values for A and B. - in ANIm this is ``alignment_length / genome_length`` (asymmetrical) - in fastANI this is ``matched_fragments / all_fragments`` (asymmetrical) - in ANIb this is ``alignment_length / query_genome_length`` (asymmetrical) - in ANIblastall this is ``alignment_length / query_genome_length`` (asymmetrical) -The **similarity errors** graph shows a measure of the number of bases/positions that do not match. +**Alignment length** is the count of bases contributed by each genome to the pairwise alignment between those genomes. + + - in ANIm this is calculated as ``reference_positions_in_alignment + insertions - deletions`` + - in fastANI this is ``matched_fragments * fragment_length`` + - in ANIb this is ``alignment_length - gaps`` + - in ANIblastall this is ``alignment_length - gaps`` + +The **similarity errors** graph shows a measure of the number of bases/positions that do not match exactly. - in ANIm this is ``non-identities + insertions + deletions`` - in fastANI this is ``all_fragments - matched_fragents`` - in ANIb this is ``gaps + mismatches`` - in ANIblastall this is ``gaps + mismatches`` -The **Hadamard** ouptut is the product (identity x coverage), as described at `Hadamard product`_ of identity and coverage. It's meant to provide a measure that allows you to interpret identity and coverage simultaneously. +The **Hadamard** ouptut is the elementwise product (identity x coverage), as described at `Hadamard product`_ of identity and coverage. It's meant to provide a measure that allows you to interpret identity and coverage simultaneously. - this is always ``ANI * coverage``, but as the plot is not symmetric, coverage may differ for query and reference genomes + + ``pyani plot`` also outputs a scatterplot of **Average nucleotide identity** versus **Alignment coverage** (calculated as described above). .. _Hadamard product: https://en.wikipedia.org/wiki/Hadamard_product_(matrices) From 7ed6963df1b0c0108973d1fa925648bc5a0c521c Mon Sep 17 00:00:00 2001 From: widdowquinn Date: Mon, 8 Nov 2021 09:13:00 +0000 Subject: [PATCH 38/74] add October citations --- docs/citations.rst | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/citations.rst b/docs/citations.rst index 907b6491..3d1bddcf 100644 --- a/docs/citations.rst +++ b/docs/citations.rst @@ -62,6 +62,7 @@ If you are using ``pyani``, you are in good company. These authors and manuscrip * Abdel-Glil *et al.* (2021) "Comparative in silico genome analysis of *Clostridium perfringens* unravels stable phylogroups with different genome characteristics and pathogenic potential" *Sci. Rep.* `doi:10.1038/s41598-021-86148-8 `_ * Abdullah *et al.* (2021) "Comparative analysis of whole genome sequences of *Leptospira* spp. from RefSeq database provide interspecific divergence and repertoire of virulence factors" *bioRxiv* `doi:10.1101/2021.01.12.426470 `_ * Al Rubaye *et al.* (2021) "Novel genomic islands and a new vanD-subtype in the first sporadic VanD-type vancomycin resistant enterococci in Norway" *PLoS One* `doi:10.1371/journal.pone.0255187 `_ +* Albuquerque *et al.* (2021) "Complete Genome Sequence of Two Deep-Sea *Streptomyces* Isolates from Madeira Archipelago and Evaluation of Their Biosynthetic Potential" *marine drugs* `doi:10.3390/md19110621 `_ * Alonso-Reyes *et al.* (2021) "Genomic insights into an andean multiresistant soil actinobacterium of biotechnological interest." *World J Microbiol Biotechnol* `doi:10.1007/s11274-021-03129-9 `_ * Asselin *et al.* (2021) "Complete genome sequence resources for the onion pathogen, *Pantoea ananatis* OC5a" *Phytopath.* `doi:10.1094/phyto-09-20-0416-a `_ * Badhai *et al.* (2021) "Genomic plasticity and antibody response of *Bordetella bronchiseptica* strain HT200, a natural variant from a thermal spring" *FEMS Micro. Lett.* `doi:10.1093/femsle/fnab035 `_ @@ -102,6 +103,7 @@ If you are using ``pyani``, you are in good company. These authors and manuscrip * Huang *et al.* (2021) "Phenotypic properties and genotyping analysis of *Bacillus cereus* group isolates from dairy and potato products" *LWT* `doi:10.1016/j.lwt.2021.110853 `_ * Huang *et al.* (2021) "Genome-resolved metagenomics using environmental and clinical samples" *Brief. Bioinf.* `doi:10.1093/bib/bbab030 `_ * Huang *et al.* (2021) "Comparative Genomics and Specific Functional Characteristics Analysis of *Lactobacillus acidophilus*" *microorganisms* `doi:10.3390/microorganisms9091992 `_ +* Hugouvieux-Cotte-Pattat & Van Gijsegem (2021) "Diversity within the *Dickeya zeae* complex, identification of *Dickeya zeae* and *Dickeya oryzae* members, proposal of the novel species *Dickeya parazeae* sp. nov." *Int. J. Syst. Envol. Microbiol.* `doi:10.1099/ijsem.0.005059 `_ * Huihui *et al.* (2021) "Partial biological characteristics and genomic analysis of *Vibrio cholerae* typing phage VP2" *Disease Surv.* `doi:10.3784/jbjc.202105190282 `_ * Hünnefeld *et al.* (2021) "Genome Sequence of the Bacteriophage CL31 and Interaction with the Host Strain *Corynebacterium glutamicum* ATCC 13032" *viruses* `doi:10.3390/v13030495 `_ * Ivanova *et al.* (2021) "Draft Genome Assemblies of Two *Campylobacter novaezeelandiae* and Four Unclassified Thermophilic *Campylobacter* Isolates from Canadian Agricultural Surface Water" *Microbiol. Res. Ann.* `doi:10.1128/MRA.00249-21 `_ @@ -154,6 +156,7 @@ If you are using ``pyani``, you are in good company. These authors and manuscrip * Saati-Santamaría *et al.* (2021) "Phylogenomic Analyses of the Genus _Pseudomonas_ Lead to the Rearrangement of Several Species and the Definition of New Genera" *Biology* `doi:10.3390/biology10080782 `_ * Sakiyama *et al.* (2021) "Complete Genome Sequence of a Clinical Isolate of *Acinetobacter baumannii* Harboring 11 Plasmids" *Microbiol. Res. Ann.* `doi:10.1128/MRA.00695-21 `_ * Schlez *et al.* (2021) "*Corynebacterium rouxii*, a recently described member of the *C. diphtheriae* group isolated from three dogs with ulcerative skin lesions" *Ant. van Leeuw.* `doi:10.1007/s10482-021-01605-8 `_ +* Santos *et al.* (2021) "*Phaffia brasiliana* sp. nov., a yeast species isolated from soil in a Cerrado–Atlantic Rain Forest ecotone site in Brazil" *Int. J. Syst. Evol. Microbiol.* `doi:10.1099/ijsem.0.005080 `_ * Schörner *et al.* (2021) "Genomic analysis of *Neisseria elongata* isolate from a patient with infective endocarditis" *FEBS Open Bio* `doi:10.1002/2211-5463.13201 `_ * von Schwartzenberg *et al.* (2021) "Caloric restriction disrupts the microbiota and colonization resistance" *Nature* `doi:10.1038/s41586-021-03663-4 `_ * Sedaghatjoo *et al.* (2021) "Development of a loop-mediated isothermal amplification assay for the detection of *Tilletia controversa* based on genome comparison" *Sci. Reports.* `doi:10.1038/s41598-021-91098-2 `_ @@ -179,6 +182,7 @@ If you are using ``pyani``, you are in good company. These authors and manuscrip * Wu *et al.* (2021) "Metagenomic insights into nitrogen and phosphorus cycling at the soil aggregate scale driven by organic material amendments" *Sci. Tot. Env.* `doi:10.1016/j.scitotenv.2021.147329 `_ * Wu *et al.* (2021) "Moisture modulates soil reservoirs of active DNA and RNA viruses." *Commun Biol* `doi:10.1038/s42003-021-02514-2 `_ * Wu *et al.* (2021) "An Effective Preprocessing Method for High-Quality Pan-Genome Analysis of *Bacillus subtilis* and *Escherichia coli*" *Essential Genes and Genomes* `doi:10.1007/978-1-0716-1720-5_21 `_ +* Wu *et al.* (2021) "DNA Viral Diversity, Abundance, and Functional Potential Vary across Grassland Soils with a Range of Historical Moisture Regimes" *mBio* `doi:doi.org/10.1128/mBio.02595-21 `_ * Xiao *et al.* (2021) "Carbapenem-resistant *Acinetobacter Baumannii* Ventilator-Associated Pneumonia in Critically Ill Patients: Potential Inference with Respiratory Tract Microbiota Dysbiosis" *Res. Sq.* `doi:10.21203/rs.3.rs-736916/v1 `_ * Young *et al.* (2021) "Defining the *Rhizobium leguminosarum* Species Complex" *genes* `doi:10.3390/genes12010111 `_ * Zeng *et al.* (2021) "Novel phage vB_CtuP_B1 for controlling *Cronobacter malonaticus* and *Cronobacter turicensis* in ready-to-eat lettuce and powered infant formula" *Food Res. Int.* `doi:10.1016/j.foodres.2021.110255 `_ From b60c6aa471ecef8a43e12f637ff779f6866e93c5 Mon Sep 17 00:00:00 2001 From: Peter Cock Date: Thu, 11 Nov 2021 16:54:57 +0000 Subject: [PATCH 39/74] Restore nested anim folders to avoid N^2 files per directory This reverts commit f15cbb06abf14d71ef51d0fa8f1d5e85d27db18b. That commit undid my deliberate use of tested anim folders in #217 (as discussed on #220, this greatly helped the file system when doing hundreds of comparisons). --- pyani/anim.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyani/anim.py b/pyani/anim.py index 25171465..c0afbfbe 100644 --- a/pyani/anim.py +++ b/pyani/anim.py @@ -236,7 +236,7 @@ def construct_nucmer_cmdline( fname1, fname2 = Path(fname1), Path(fname2) # Compile commands - outsubdir = outdir / pyani_config.ALIGNDIR["ANIm"] + outsubdir = outdir / pyani_config.ALIGNDIR["ANIm"] / fname1.stem outsubdir.mkdir(exist_ok=True) outprefix = outsubdir / f"{fname1.stem}_vs_{fname2.stem}" if maxmatch: From b37f9cc8f65e5a1bce044a72f26f6ad02f4b851c Mon Sep 17 00:00:00 2001 From: Peter Cock Date: Thu, 11 Nov 2021 17:00:31 +0000 Subject: [PATCH 40/74] Explanatory comment --- pyani/anim.py | 1 + 1 file changed, 1 insertion(+) diff --git a/pyani/anim.py b/pyani/anim.py index c0afbfbe..6666b39b 100644 --- a/pyani/anim.py +++ b/pyani/anim.py @@ -236,6 +236,7 @@ def construct_nucmer_cmdline( fname1, fname2 = Path(fname1), Path(fname2) # Compile commands + # Nested output folders to avoid N^2 scaling in files-per-folder: outsubdir = outdir / pyani_config.ALIGNDIR["ANIm"] / fname1.stem outsubdir.mkdir(exist_ok=True) outprefix = outsubdir / f"{fname1.stem}_vs_{fname2.stem}" From 09503ded9cbe4339f5e1461ba9910ab0e19dab8d Mon Sep 17 00:00:00 2001 From: Peter Cock Date: Thu, 11 Nov 2021 20:04:56 +0000 Subject: [PATCH 41/74] Update anim tests for nested paths --- tests/test_anim.py | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/tests/test_anim.py b/tests/test_anim.py index 75ca4134..ca1c07db 100644 --- a/tests/test_anim.py +++ b/tests/test_anim.py @@ -103,43 +103,43 @@ def mummer_cmds_four(path_file_four): return MUMmerExample( path_file_four, [ - "nucmer --mum -p nucmer_output/file1_vs_file2 file1.fna file2.fna", - "nucmer --mum -p nucmer_output/file1_vs_file3 file1.fna file3.fna", - "nucmer --mum -p nucmer_output/file1_vs_file4 file1.fna file4.fna", - "nucmer --mum -p nucmer_output/file2_vs_file3 file2.fna file3.fna", - "nucmer --mum -p nucmer_output/file2_vs_file4 file2.fna file4.fna", - "nucmer --mum -p nucmer_output/file3_vs_file4 file3.fna file4.fna", + "nucmer --mum -p nucmer_output/file1/file1_vs_file2 file1.fna file2.fna", + "nucmer --mum -p nucmer_output/file1/file1_vs_file3 file1.fna file3.fna", + "nucmer --mum -p nucmer_output/file1/file1_vs_file4 file1.fna file4.fna", + "nucmer --mum -p nucmer_output/file2/file2_vs_file3 file2.fna file3.fna", + "nucmer --mum -p nucmer_output/file2/file2_vs_file4 file2.fna file4.fna", + "nucmer --mum -p nucmer_output/file3/file3_vs_file4 file3.fna file4.fna", ], [ ( "delta_filter_wrapper.py delta-filter -1 " - "nucmer_output/file1_vs_file2.delta " - "nucmer_output/file1_vs_file2.filter" + "nucmer_output/file1/file1_vs_file2.delta " + "nucmer_output/file1/file1_vs_file2.filter" ), ( "delta_filter_wrapper.py delta-filter -1 " - "nucmer_output/file1_vs_file3.delta " - "nucmer_output/file1_vs_file3.filter" + "nucmer_output/file1/file1_vs_file3.delta " + "nucmer_output/file1/file1_vs_file3.filter" ), ( "delta_filter_wrapper.py delta-filter -1 " - "nucmer_output/file1_vs_file4.delta " - "nucmer_output/file1_vs_file4.filter" + "nucmer_output/file1/file1_vs_file4.delta " + "nucmer_output/file1/file1_vs_file4.filter" ), ( "delta_filter_wrapper.py delta-filter -1 " - "nucmer_output/file2_vs_file3.delta " - "nucmer_output/file2_vs_file3.filter" + "nucmer_output/file2/file2_vs_file3.delta " + "nucmer_output/file2/file2_vs_file3.filter" ), ( "delta_filter_wrapper.py delta-filter -1 " - "nucmer_output/file2_vs_file4.delta " - "nucmer_output/file2_vs_file4.filter" + "nucmer_output/file2/file2_vs_file4.delta " + "nucmer_output/file2/file2_vs_file4.filter" ), ( "delta_filter_wrapper.py delta-filter -1 " - "nucmer_output/file3_vs_file4.delta " - "nucmer_output/file3_vs_file4.filter" + "nucmer_output/file3/file3_vs_file4.delta " + "nucmer_output/file3/file3_vs_file4.filter" ), ], ) @@ -200,7 +200,7 @@ def test_maxmatch_single(tmp_path, path_file_two): dir_nucmer = tmp_path / "nucmer_output" expected = ( "nucmer --maxmatch -p " - f"{dir_nucmer / str(path_file_two[0].stem + '_vs_' + path_file_two[1].stem)} " + f"{dir_nucmer / str(path_file_two[0].stem ) / str(path_file_two[0].stem + '_vs_' + path_file_two[1].stem)} " f"{path_file_two[0]} {path_file_two[1]}" ) assert ncmd == expected @@ -226,13 +226,13 @@ def test_mummer_single(tmp_path, path_file_two): expected = ( ( "nucmer --mum -p " - f"{dir_nucmer / str(path_file_two[0].stem + '_vs_' + path_file_two[1].stem)} " + f"{dir_nucmer / str(path_file_two[0].stem) / str(path_file_two[0].stem + '_vs_' + path_file_two[1].stem)} " f"{path_file_two[0]} {path_file_two[1]}" ), ( "delta_filter_wrapper.py delta-filter -1 " - f"{dir_nucmer / str(path_file_two[0].stem + '_vs_' + path_file_two[1].stem + '.delta')} " - f"{dir_nucmer / str(path_file_two[0].stem + '_vs_' + path_file_two[1].stem + '.filter')}" + f"{dir_nucmer / str(path_file_two[0].stem ) / str(path_file_two[0].stem + '_vs_' + path_file_two[1].stem + '.delta')} " + f"{dir_nucmer / str(path_file_two[0].stem ) / str(path_file_two[0].stem + '_vs_' + path_file_two[1].stem + '.filter')}" ), ) assert cmds == expected From 5365a3ed4014751e824d1776e10627a5752a3dfe Mon Sep 17 00:00:00 2001 From: Peter Cock Date: Fri, 12 Nov 2021 11:51:34 +0000 Subject: [PATCH 42/74] May have to make two levels of output dir --- pyani/anim.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pyani/anim.py b/pyani/anim.py index 6666b39b..506f5f02 100644 --- a/pyani/anim.py +++ b/pyani/anim.py @@ -236,7 +236,10 @@ def construct_nucmer_cmdline( fname1, fname2 = Path(fname1), Path(fname2) # Compile commands - # Nested output folders to avoid N^2 scaling in files-per-folder: + # Nested output folders to avoid N^2 scaling in files-per-folder + # Create folders incrementally (want an error if outdir does not exist) + outsubdir = outdir / pyani_config.ALIGNDIR["ANIm"] + outsubdir.mkdir(exist_ok=True) outsubdir = outdir / pyani_config.ALIGNDIR["ANIm"] / fname1.stem outsubdir.mkdir(exist_ok=True) outprefix = outsubdir / f"{fname1.stem}_vs_{fname2.stem}" From d70d95c604dba2ad34ab00b64c7f8f1c4c6becb5 Mon Sep 17 00:00:00 2001 From: Peter Cock Date: Fri, 12 Nov 2021 12:22:56 +0000 Subject: [PATCH 43/74] Use nested path to find deltafiles --- pyani/anim.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyani/anim.py b/pyani/anim.py index 506f5f02..f3384587 100644 --- a/pyani/anim.py +++ b/pyani/anim.py @@ -356,7 +356,7 @@ def process_deltadir( # Process directory to identify input files - as of v0.2.4 we use the # .filter files that result from delta-filter (1:1 alignments) - deltafiles = sorted(delta_dir.glob("*.filter")) + deltafiles = sorted(delta_dir.glob("*/*.filter")) logger.info("%s has %d files to load", delta_dir, len(deltafiles)) if not deltafiles: From ffd5a3be4d1bdf078baac4c09617558ac9f8beda Mon Sep 17 00:00:00 2001 From: Peter Cock Date: Fri, 12 Nov 2021 12:51:39 +0000 Subject: [PATCH 44/74] Update sample data to use nested path --- tests/test_ani_data/{ => NC_002696}/NC_002696_vs_NC_011916.delta | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename tests/test_ani_data/{ => NC_002696}/NC_002696_vs_NC_011916.delta (100%) diff --git a/tests/test_ani_data/NC_002696_vs_NC_011916.delta b/tests/test_ani_data/NC_002696/NC_002696_vs_NC_011916.delta similarity index 100% rename from tests/test_ani_data/NC_002696_vs_NC_011916.delta rename to tests/test_ani_data/NC_002696/NC_002696_vs_NC_011916.delta From d5b46febc9f5029740ee7f7cff8de5af19ce7f2f Mon Sep 17 00:00:00 2001 From: Peter Cock Date: Fri, 12 Nov 2021 13:28:17 +0000 Subject: [PATCH 45/74] Nest tests/fixtures/anim/deltadir/ --- .../anim/deltadir/{ => NC_002696}/NC_002696_vs_NC_010338.delta | 0 .../anim/deltadir/{ => NC_002696}/NC_002696_vs_NC_010338.filter | 0 .../anim/deltadir/{ => NC_002696}/NC_002696_vs_NC_011916.delta | 0 .../anim/deltadir/{ => NC_002696}/NC_002696_vs_NC_011916.filter | 0 .../anim/deltadir/{ => NC_002696}/NC_002696_vs_NC_014100.delta | 0 .../anim/deltadir/{ => NC_002696}/NC_002696_vs_NC_014100.filter | 0 .../anim/deltadir/{ => NC_010338}/NC_010338_vs_NC_011916.delta | 0 .../anim/deltadir/{ => NC_010338}/NC_010338_vs_NC_011916.filter | 0 .../anim/deltadir/{ => NC_010338}/NC_010338_vs_NC_014100.delta | 0 .../anim/deltadir/{ => NC_010338}/NC_010338_vs_NC_014100.filter | 0 .../anim/deltadir/{ => NC_011916}/NC_011916_vs_NC_014100.delta | 0 .../anim/deltadir/{ => NC_011916}/NC_011916_vs_NC_014100.filter | 0 12 files changed, 0 insertions(+), 0 deletions(-) rename tests/fixtures/anim/deltadir/{ => NC_002696}/NC_002696_vs_NC_010338.delta (100%) rename tests/fixtures/anim/deltadir/{ => NC_002696}/NC_002696_vs_NC_010338.filter (100%) rename tests/fixtures/anim/deltadir/{ => NC_002696}/NC_002696_vs_NC_011916.delta (100%) rename tests/fixtures/anim/deltadir/{ => NC_002696}/NC_002696_vs_NC_011916.filter (100%) rename tests/fixtures/anim/deltadir/{ => NC_002696}/NC_002696_vs_NC_014100.delta (100%) rename tests/fixtures/anim/deltadir/{ => NC_002696}/NC_002696_vs_NC_014100.filter (100%) rename tests/fixtures/anim/deltadir/{ => NC_010338}/NC_010338_vs_NC_011916.delta (100%) rename tests/fixtures/anim/deltadir/{ => NC_010338}/NC_010338_vs_NC_011916.filter (100%) rename tests/fixtures/anim/deltadir/{ => NC_010338}/NC_010338_vs_NC_014100.delta (100%) rename tests/fixtures/anim/deltadir/{ => NC_010338}/NC_010338_vs_NC_014100.filter (100%) rename tests/fixtures/anim/deltadir/{ => NC_011916}/NC_011916_vs_NC_014100.delta (100%) rename tests/fixtures/anim/deltadir/{ => NC_011916}/NC_011916_vs_NC_014100.filter (100%) diff --git a/tests/fixtures/anim/deltadir/NC_002696_vs_NC_010338.delta b/tests/fixtures/anim/deltadir/NC_002696/NC_002696_vs_NC_010338.delta similarity index 100% rename from tests/fixtures/anim/deltadir/NC_002696_vs_NC_010338.delta rename to tests/fixtures/anim/deltadir/NC_002696/NC_002696_vs_NC_010338.delta diff --git a/tests/fixtures/anim/deltadir/NC_002696_vs_NC_010338.filter b/tests/fixtures/anim/deltadir/NC_002696/NC_002696_vs_NC_010338.filter similarity index 100% rename from tests/fixtures/anim/deltadir/NC_002696_vs_NC_010338.filter rename to tests/fixtures/anim/deltadir/NC_002696/NC_002696_vs_NC_010338.filter diff --git a/tests/fixtures/anim/deltadir/NC_002696_vs_NC_011916.delta b/tests/fixtures/anim/deltadir/NC_002696/NC_002696_vs_NC_011916.delta similarity index 100% rename from tests/fixtures/anim/deltadir/NC_002696_vs_NC_011916.delta rename to tests/fixtures/anim/deltadir/NC_002696/NC_002696_vs_NC_011916.delta diff --git a/tests/fixtures/anim/deltadir/NC_002696_vs_NC_011916.filter b/tests/fixtures/anim/deltadir/NC_002696/NC_002696_vs_NC_011916.filter similarity index 100% rename from tests/fixtures/anim/deltadir/NC_002696_vs_NC_011916.filter rename to tests/fixtures/anim/deltadir/NC_002696/NC_002696_vs_NC_011916.filter diff --git a/tests/fixtures/anim/deltadir/NC_002696_vs_NC_014100.delta b/tests/fixtures/anim/deltadir/NC_002696/NC_002696_vs_NC_014100.delta similarity index 100% rename from tests/fixtures/anim/deltadir/NC_002696_vs_NC_014100.delta rename to tests/fixtures/anim/deltadir/NC_002696/NC_002696_vs_NC_014100.delta diff --git a/tests/fixtures/anim/deltadir/NC_002696_vs_NC_014100.filter b/tests/fixtures/anim/deltadir/NC_002696/NC_002696_vs_NC_014100.filter similarity index 100% rename from tests/fixtures/anim/deltadir/NC_002696_vs_NC_014100.filter rename to tests/fixtures/anim/deltadir/NC_002696/NC_002696_vs_NC_014100.filter diff --git a/tests/fixtures/anim/deltadir/NC_010338_vs_NC_011916.delta b/tests/fixtures/anim/deltadir/NC_010338/NC_010338_vs_NC_011916.delta similarity index 100% rename from tests/fixtures/anim/deltadir/NC_010338_vs_NC_011916.delta rename to tests/fixtures/anim/deltadir/NC_010338/NC_010338_vs_NC_011916.delta diff --git a/tests/fixtures/anim/deltadir/NC_010338_vs_NC_011916.filter b/tests/fixtures/anim/deltadir/NC_010338/NC_010338_vs_NC_011916.filter similarity index 100% rename from tests/fixtures/anim/deltadir/NC_010338_vs_NC_011916.filter rename to tests/fixtures/anim/deltadir/NC_010338/NC_010338_vs_NC_011916.filter diff --git a/tests/fixtures/anim/deltadir/NC_010338_vs_NC_014100.delta b/tests/fixtures/anim/deltadir/NC_010338/NC_010338_vs_NC_014100.delta similarity index 100% rename from tests/fixtures/anim/deltadir/NC_010338_vs_NC_014100.delta rename to tests/fixtures/anim/deltadir/NC_010338/NC_010338_vs_NC_014100.delta diff --git a/tests/fixtures/anim/deltadir/NC_010338_vs_NC_014100.filter b/tests/fixtures/anim/deltadir/NC_010338/NC_010338_vs_NC_014100.filter similarity index 100% rename from tests/fixtures/anim/deltadir/NC_010338_vs_NC_014100.filter rename to tests/fixtures/anim/deltadir/NC_010338/NC_010338_vs_NC_014100.filter diff --git a/tests/fixtures/anim/deltadir/NC_011916_vs_NC_014100.delta b/tests/fixtures/anim/deltadir/NC_011916/NC_011916_vs_NC_014100.delta similarity index 100% rename from tests/fixtures/anim/deltadir/NC_011916_vs_NC_014100.delta rename to tests/fixtures/anim/deltadir/NC_011916/NC_011916_vs_NC_014100.delta diff --git a/tests/fixtures/anim/deltadir/NC_011916_vs_NC_014100.filter b/tests/fixtures/anim/deltadir/NC_011916/NC_011916_vs_NC_014100.filter similarity index 100% rename from tests/fixtures/anim/deltadir/NC_011916_vs_NC_014100.filter rename to tests/fixtures/anim/deltadir/NC_011916/NC_011916_vs_NC_014100.filter From d5a29c4ee560b94df0698e99fd7ae521885da9c0 Mon Sep 17 00:00:00 2001 From: widdowquinn Date: Fri, 12 Nov 2021 16:09:58 +0000 Subject: [PATCH 46/74] fix warning in test_anib.py --- tests/test_anib.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_anib.py b/tests/test_anib.py index f8278200..f95a7251 100644 --- a/tests/test_anib.py +++ b/tests/test_anib.py @@ -51,7 +51,7 @@ import unittest import unittest.mock as mock -from pandas.util.testing import assert_frame_equal +from pandas.testing import assert_frame_equal from pyani import anib, pyani_files From d3914cdb355389e6b63a9e866846971c6a40eade Mon Sep 17 00:00:00 2001 From: Peter Cock Date: Mon, 15 Nov 2021 12:27:03 +0000 Subject: [PATCH 47/74] Fix typo parwise -> pairwise --- pyani/scripts/subcommands/subcmd_anib.py | 2 +- pyani/scripts/subcommands/subcmd_anim.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pyani/scripts/subcommands/subcmd_anib.py b/pyani/scripts/subcommands/subcmd_anib.py index d16cdeb7..ac314c79 100644 --- a/pyani/scripts/subcommands/subcmd_anib.py +++ b/pyani/scripts/subcommands/subcmd_anib.py @@ -182,7 +182,7 @@ def subcmd_anib(args: Namespace) -> None: "Compiling pairwise comparisons (this can take time for large datasets)..." ) comparisons = list(permutations(tqdm(genomes, disable=args.disable_tqdm), 2)) - logger.info(f"\t...total parwise comparisons to be performed: {len(comparisons)}") + logger.info(f"\t...total pairwise comparisons to be performed: {len(comparisons)}") # Check for existing comparisons; if one has already been done (for the same # software package, version, and setting) we add the comparison to this run, diff --git a/pyani/scripts/subcommands/subcmd_anim.py b/pyani/scripts/subcommands/subcmd_anim.py index 3cbfaa70..961bbd07 100644 --- a/pyani/scripts/subcommands/subcmd_anim.py +++ b/pyani/scripts/subcommands/subcmd_anim.py @@ -237,7 +237,7 @@ def subcmd_anim(args: Namespace) -> None: "Compiling pairwise comparisons (this can take time for large datasets)..." ) comparisons = list(combinations(tqdm(genomes, disable=args.disable_tqdm), 2)) - logger.info("\t...total parwise comparisons to be performed: %s", len(comparisons)) + logger.info("\t...total pairwise comparisons to be performed: %s", len(comparisons)) # Check for existing comparisons; if one has been done (for the same # software package, version, and setting) we add the comparison to this run, From a9b82c1336e0135ab0189796df4eda0595309c93 Mon Sep 17 00:00:00 2001 From: Peter Cock Date: Mon, 15 Nov 2021 12:27:52 +0000 Subject: [PATCH 48/74] flake8 F541 f-string is missing placeholders --- pyani/scripts/subcommands/subcmd_anib.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyani/scripts/subcommands/subcmd_anib.py b/pyani/scripts/subcommands/subcmd_anib.py index ac314c79..441aa2c9 100644 --- a/pyani/scripts/subcommands/subcmd_anib.py +++ b/pyani/scripts/subcommands/subcmd_anib.py @@ -225,7 +225,7 @@ def subcmd_anib(args: Namespace) -> None: existingfiles[0], ) else: - logger.debug(f"\tIdentified no existing output files") + logger.debug("\tIdentified no existing output files") else: existingfiles = list() logger.debug("\tAssuming no pre-existing output files") @@ -248,7 +248,7 @@ def subcmd_anib(args: Namespace) -> None: joblist = generate_joblist( comparisons_to_run, existingfiles, fragfiles, fraglens, args ) - logger.debug(f"...created %s blastn jobs", len(joblist)) + logger.debug("...created %s blastn jobs", len(joblist)) raise NotImplementedError From d9955bcca46066af2590819cd6e3d5dbe561f7b8 Mon Sep 17 00:00:00 2001 From: baileythegreen Date: Mon, 15 Nov 2021 15:17:09 +0000 Subject: [PATCH 49/74] Add logging info about numbers of new/pre-existing comparisons --- pyani/scripts/subcommands/subcmd_anim.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pyani/scripts/subcommands/subcmd_anim.py b/pyani/scripts/subcommands/subcmd_anim.py index 3cbfaa70..d23417cc 100644 --- a/pyani/scripts/subcommands/subcmd_anim.py +++ b/pyani/scripts/subcommands/subcmd_anim.py @@ -320,6 +320,7 @@ def generate_joblist( existingfiles = set(existingfiles) # Path objects hashable joblist = [] # will hold ComparisonJob structs + jobs = {"new": 0, "old": 0} # will hold counts of new/old jobs for reporting for idx, (query, subject) in enumerate( tqdm(comparisons, disable=args.disable_tqdm) ): @@ -350,6 +351,7 @@ def generate_joblist( logger.debug("Recovering output from %s, not submitting job", outfname) # Need to track the expected output, but set the job itself to None: joblist.append(ComparisonJob(query, subject, dcmd, ncmd, outfname, None)) + jobs["new"] += 1 else: logger.debug("Building job") # Build jobs @@ -357,6 +359,10 @@ def generate_joblist( fjob = pyani_jobs.Job("%s_%06d-f" % (args.jobprefix, idx), dcmd) fjob.add_dependency(njob) joblist.append(ComparisonJob(query, subject, dcmd, ncmd, outfname, fjob)) + jobs["old"] += 1 + logger.info(f"New comparisons to run: {jobs['new']}.") + if jobs["old"]: + logger.info(f"\nRetrieving output from {jobs['old']} previous comparisons.") return joblist From 728501cec58ffa41d9104cb7b2d8d84e9d13b580 Mon Sep 17 00:00:00 2001 From: baileythegreen Date: Mon, 15 Nov 2021 16:53:19 +0000 Subject: [PATCH 50/74] Update logging info --- pyani/scripts/subcommands/subcmd_anim.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/pyani/scripts/subcommands/subcmd_anim.py b/pyani/scripts/subcommands/subcmd_anim.py index d23417cc..e4e83fd5 100644 --- a/pyani/scripts/subcommands/subcmd_anim.py +++ b/pyani/scripts/subcommands/subcmd_anim.py @@ -351,7 +351,7 @@ def generate_joblist( logger.debug("Recovering output from %s, not submitting job", outfname) # Need to track the expected output, but set the job itself to None: joblist.append(ComparisonJob(query, subject, dcmd, ncmd, outfname, None)) - jobs["new"] += 1 + jobs["old"] += 1 else: logger.debug("Building job") # Build jobs @@ -359,10 +359,12 @@ def generate_joblist( fjob = pyani_jobs.Job("%s_%06d-f" % (args.jobprefix, idx), dcmd) fjob.add_dependency(njob) joblist.append(ComparisonJob(query, subject, dcmd, ncmd, outfname, fjob)) - jobs["old"] += 1 - logger.info(f"New comparisons to run: {jobs['new']}.") - if jobs["old"]: - logger.info(f"\nRetrieving output from {jobs['old']} previous comparisons.") + jobs["new"] += 1 + logger.info( + f"No results found for {jobs['new']} comparisons; {jobs['new']} new jobs built." + ) + if existingfiles: + logger.info(f"Retrieving results for {jobs['old']} previous comparisons.") return joblist From ca585112a8fc4404d5c707bbf5504b5d5a811e38 Mon Sep 17 00:00:00 2001 From: Peter Cock Date: Wed, 17 Nov 2021 10:57:18 +0000 Subject: [PATCH 51/74] Check anim A vs B, not B vs A This is important for recovery mode --- pyani/scripts/subcommands/subcmd_anim.py | 1 + 1 file changed, 1 insertion(+) diff --git a/pyani/scripts/subcommands/subcmd_anim.py b/pyani/scripts/subcommands/subcmd_anim.py index 3cbfaa70..27a3b428 100644 --- a/pyani/scripts/subcommands/subcmd_anim.py +++ b/pyani/scripts/subcommands/subcmd_anim.py @@ -323,6 +323,7 @@ def generate_joblist( for idx, (query, subject) in enumerate( tqdm(comparisons, disable=args.disable_tqdm) ): + assert query.path < subject.path, f"Bad sorting {query.path} vs {subject.path}" ncmd, dcmd = anim.construct_nucmer_cmdline( query.path, subject.path, From 376776d3a08c59672b52857a3e705abf6f89e59e Mon Sep 17 00:00:00 2001 From: Peter Cock Date: Wed, 17 Nov 2021 10:58:14 +0000 Subject: [PATCH 52/74] Sort file lists Important to ensure anim A vs B, not B vs A (which matters for recovery mode to be stable regardless of the genome order on disk, see #353) --- pyani/pyani_files.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pyani/pyani_files.py b/pyani/pyani_files.py index 022d9899..3f10d35d 100644 --- a/pyani/pyani_files.py +++ b/pyani/pyani_files.py @@ -74,15 +74,15 @@ def get_fasta_paths( :param dirname: Path, path to directory containing input FASTA files :param extlist: List, file suffixes for FASTA files - Returns the full path to each file. + Returns sorted list of the full path to each file. """ # Lists are dangerous to have as default function arguments extlist = extlist or [".fna", ".fa", ".fasta", ".fas"] - return [ + return sorted( fname for fname in dirname.iterdir() if fname.is_file() and fname.suffix in extlist - ] + ) # Get a list of FASTA files and corresponding hashes from the input directory @@ -116,12 +116,12 @@ def get_fasta_and_hash_paths(dirname: Path = Path(".")) -> List[Tuple[Path, Path # Get list of FASTA files in a directory def get_input_files(dirname: Path, *ext) -> List[Path]: - """Return files in passed directory, filtered by extension. + """Return sorted files in passed directory, filtered by extension. :param dirname: Path, path to input directory :param *ext: optional iterable of arguments describing permitted file extensions """ - return [fname for fname in dirname.iterdir() if fname.suffix in ext] + return sorted(fname for fname in dirname.iterdir() if fname.suffix in ext) # Get lengths of input sequences From ed06350d8b1689698173f5591fa7e7c939cad3dd Mon Sep 17 00:00:00 2001 From: Peter Cock Date: Thu, 18 Nov 2021 12:55:15 +0000 Subject: [PATCH 53/74] Set metavar for --run_results & --run_matrices Now matches pyani plot --run_id behaviour. Also document that these can be comma separated lists. And fix some redundant string addition. --- pyani/scripts/parsers/report_parser.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/pyani/scripts/parsers/report_parser.py b/pyani/scripts/parsers/report_parser.py index f092d821..4a7a8f38 100644 --- a/pyani/scripts/parsers/report_parser.py +++ b/pyani/scripts/parsers/report_parser.py @@ -95,29 +95,30 @@ def build( action="store_true", dest="show_runs_genomes", default=False, - help="Report table of all genomes for each run in " + "database", + help="Report table of all genomes for each run in database", ) parser.add_argument( "--genomes_runs", action="store_true", dest="show_genomes_runs", default=False, - help="Report table of all runs in which each genome " - + "in the database participates", + help="Report table of all runs in which each genome in the database participates", ) parser.add_argument( "--run_results", action="store", dest="run_results", + metavar="RUN_ID", default=False, - help="Report table of results for a pyani run", + help="Report table of results for comma separated list of runs", ) parser.add_argument( "--run_matrices", action="store", dest="run_matrices", + metavar="RUN_ID", default=False, - help="Report matrices of results for a pyani run", + help="Report matrices of results for comma separated list of runs", ) parser.add_argument( "--formats", From 3d171acf79011497413daa8df3c50e0c8c2e9c44 Mon Sep 17 00:00:00 2001 From: Peter Cock Date: Thu, 18 Nov 2021 13:43:14 +0000 Subject: [PATCH 54/74] Fix genome labels in matrix output Following changes in b54106f36428f017a2589b05de33c0a6d3ed9ea4 to fix labeling in Seaborn, the label dictionary keys were changed from integers to strings. However, label_results_matrix was left doing integer lookups which now always fail, leaving the matrix with default labels of 1:1, 2:2, 3:3, ... instead. --- pyani/pyani_tools.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pyani/pyani_tools.py b/pyani/pyani_tools.py index b39cdac0..bdc317f5 100644 --- a/pyani/pyani_tools.py +++ b/pyani/pyani_tools.py @@ -303,8 +303,9 @@ def label_results_matrix(matrix: pd.DataFrame, labels: Dict) -> pd.DataFrame: Applies the labels from the dictionary to the dataframe in matrix, and returns the result. """ - matrix.columns = [f"{labels.get(_, _)}:{_}" for _ in matrix.columns] - matrix.index = [f"{labels.get(_, _)}:{_}" for _ in matrix.index] + # The dictionary uses string keys! + matrix.columns = [f"{labels.get(str(_), _)}:{_}" for _ in matrix.columns] + matrix.index = [f"{labels.get(str(_), _)}:{_}" for _ in matrix.index] return matrix From b6dd87001285aa0081ea3e514170af4361eb9640 Mon Sep 17 00:00:00 2001 From: baileythegreen Date: Thu, 18 Nov 2021 22:04:06 +0000 Subject: [PATCH 55/74] Ensure genomes are sorted --- pyani/scripts/subcommands/subcmd_anim.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/pyani/scripts/subcommands/subcmd_anim.py b/pyani/scripts/subcommands/subcmd_anim.py index 27a3b428..73859d86 100644 --- a/pyani/scripts/subcommands/subcmd_anim.py +++ b/pyani/scripts/subcommands/subcmd_anim.py @@ -229,7 +229,7 @@ def subcmd_anim(args: Namespace) -> None: # Get list of genome IDs for this analysis from the database logger.info("Compiling genomes for comparison") - genomes = run.genomes.all() + genomes = sorted(run.genomes.all()) logger.debug("Collected %s genomes for this run", len(genomes)) # Generate all pair combinations of genome IDs as a list of (Genome, Genome) tuples @@ -320,10 +320,8 @@ def generate_joblist( existingfiles = set(existingfiles) # Path objects hashable joblist = [] # will hold ComparisonJob structs - for idx, (query, subject) in enumerate( - tqdm(comparisons, disable=args.disable_tqdm) - ): - assert query.path < subject.path, f"Bad sorting {query.path} vs {subject.path}" + for idx, (A, B) in enumerate(tqdm(comparisons, disable=args.disable_tqdm)): + query, subject = sorted(A.path, B.path) ncmd, dcmd = anim.construct_nucmer_cmdline( query.path, subject.path, From cb8a8bd481c697725d7a1f810056b17c55091062 Mon Sep 17 00:00:00 2001 From: Peter Cock Date: Thu, 18 Nov 2021 23:46:38 +0000 Subject: [PATCH 56/74] Use plural metavar, RUN_ID -> RUN_IDS Suggestion from code review Co-authored-by: Bailey Harrington --- pyani/scripts/parsers/report_parser.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyani/scripts/parsers/report_parser.py b/pyani/scripts/parsers/report_parser.py index 4a7a8f38..02c8e17e 100644 --- a/pyani/scripts/parsers/report_parser.py +++ b/pyani/scripts/parsers/report_parser.py @@ -108,7 +108,7 @@ def build( "--run_results", action="store", dest="run_results", - metavar="RUN_ID", + metavar="RUN_IDS", default=False, help="Report table of results for comma separated list of runs", ) @@ -116,7 +116,7 @@ def build( "--run_matrices", action="store", dest="run_matrices", - metavar="RUN_ID", + metavar="RUN_IDS", default=False, help="Report matrices of results for comma separated list of runs", ) From d0614f9dad2fe3ef01f21d2343afa3d6af2cfd25 Mon Sep 17 00:00:00 2001 From: baileythegreen Date: Fri, 19 Nov 2021 00:43:33 +0000 Subject: [PATCH 57/74] Fix genome sorting --- pyani/scripts/subcommands/subcmd_anim.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/pyani/scripts/subcommands/subcmd_anim.py b/pyani/scripts/subcommands/subcmd_anim.py index 73859d86..0a3e3f39 100644 --- a/pyani/scripts/subcommands/subcmd_anim.py +++ b/pyani/scripts/subcommands/subcmd_anim.py @@ -229,7 +229,7 @@ def subcmd_anim(args: Namespace) -> None: # Get list of genome IDs for this analysis from the database logger.info("Compiling genomes for comparison") - genomes = sorted(run.genomes.all()) + genomes = run.genomes.all() logger.debug("Collected %s genomes for this run", len(genomes)) # Generate all pair combinations of genome IDs as a list of (Genome, Genome) tuples @@ -320,8 +320,11 @@ def generate_joblist( existingfiles = set(existingfiles) # Path objects hashable joblist = [] # will hold ComparisonJob structs - for idx, (A, B) in enumerate(tqdm(comparisons, disable=args.disable_tqdm)): - query, subject = sorted(A.path, B.path) + for idx, (query, subject) in enumerate( + tqdm(comparisons, disable=args.disable_tqdm) + ): + if subject.path < query.path: + query, subject = subject, query # sort them ncmd, dcmd = anim.construct_nucmer_cmdline( query.path, subject.path, From 1da8b66ddf2b6040b1b7c8a344aecd01a0224c0a Mon Sep 17 00:00:00 2001 From: Peter Cock Date: Fri, 19 Nov 2021 09:36:27 +0000 Subject: [PATCH 58/74] Change default to None, makes help text clearer Also matches the plot command option taking a run ID. Addresses #332 in part. --- pyani/scripts/parsers/report_parser.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyani/scripts/parsers/report_parser.py b/pyani/scripts/parsers/report_parser.py index 02c8e17e..95c230e7 100644 --- a/pyani/scripts/parsers/report_parser.py +++ b/pyani/scripts/parsers/report_parser.py @@ -109,7 +109,7 @@ def build( action="store", dest="run_results", metavar="RUN_IDS", - default=False, + default=None, help="Report table of results for comma separated list of runs", ) parser.add_argument( @@ -117,7 +117,7 @@ def build( action="store", dest="run_matrices", metavar="RUN_IDS", - default=False, + default=None, help="Report matrices of results for comma separated list of runs", ) parser.add_argument( From 8f86e3932a86ec908c4b34c6c1f26c0f643f37f2 Mon Sep 17 00:00:00 2001 From: Bailey Harrington Date: Fri, 19 Nov 2021 11:24:50 +0000 Subject: [PATCH 59/74] Remove logging f-string --- pyani/scripts/subcommands/subcmd_anib.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyani/scripts/subcommands/subcmd_anib.py b/pyani/scripts/subcommands/subcmd_anib.py index 441aa2c9..e49470fa 100644 --- a/pyani/scripts/subcommands/subcmd_anib.py +++ b/pyani/scripts/subcommands/subcmd_anib.py @@ -182,7 +182,7 @@ def subcmd_anib(args: Namespace) -> None: "Compiling pairwise comparisons (this can take time for large datasets)..." ) comparisons = list(permutations(tqdm(genomes, disable=args.disable_tqdm), 2)) - logger.info(f"\t...total pairwise comparisons to be performed: {len(comparisons)}") + logger.info("\t...total pairwise comparisons to be performed: %s", len(comparisons)) # Check for existing comparisons; if one has already been done (for the same # software package, version, and setting) we add the comparison to this run, From 93ea803d14ebd7c5df3955db3964c246e4a5eee0 Mon Sep 17 00:00:00 2001 From: baileythegreen Date: Fri, 19 Nov 2021 15:09:55 +0000 Subject: [PATCH 60/74] Add possible format values to report parser --- pyani/scripts/parsers/report_parser.py | 1 + 1 file changed, 1 insertion(+) diff --git a/pyani/scripts/parsers/report_parser.py b/pyani/scripts/parsers/report_parser.py index 95c230e7..01b7b54c 100644 --- a/pyani/scripts/parsers/report_parser.py +++ b/pyani/scripts/parsers/report_parser.py @@ -125,6 +125,7 @@ def build( dest="formats", action="store", default=None, + choices=["html", "excel", "stdout"], help="Output formats (in addition to .tab)", ) parser.set_defaults(func=subcommands.subcmd_report) From 4ee678abb43b3ec3aeb0fa4d3ba2cb4c22acec9a Mon Sep 17 00:00:00 2001 From: baileythegreen Date: Fri, 19 Nov 2021 15:19:57 +0000 Subject: [PATCH 61/74] Show choices for parser options in help output --- pyani/scripts/parsers/plot_parser.py | 3 ++- pyani/scripts/parsers/scheduling_parser.py | 7 +++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pyani/scripts/parsers/plot_parser.py b/pyani/scripts/parsers/plot_parser.py index 1de228e3..93beae39 100644 --- a/pyani/scripts/parsers/plot_parser.py +++ b/pyani/scripts/parsers/plot_parser.py @@ -94,7 +94,8 @@ def build( dest="formats", action="store", default="png", - help="graphics output format (pdf/png/svg/jpg)", + choices=["pdf", "png", "svg", "jpg"], + help="graphics output format", ) parser.add_argument( "--method", diff --git a/pyani/scripts/parsers/scheduling_parser.py b/pyani/scripts/parsers/scheduling_parser.py index fc728387..b409cc01 100644 --- a/pyani/scripts/parsers/scheduling_parser.py +++ b/pyani/scripts/parsers/scheduling_parser.py @@ -57,7 +57,7 @@ def build() -> ArgumentParser: action="store", default="multiprocessing", choices=["multiprocessing", "SGE"], - help="Job scheduler (default multiprocessing, " + "i.e. locally)", + help="Job scheduler (default multiprocessing, i.e. locally)", ) parser.add_argument( "--workers", @@ -65,8 +65,7 @@ def build() -> ArgumentParser: action="store", default=None, type=int, - help="Number of worker processes for multiprocessing " - "(default zero, meaning use all available cores)", + help="Number of worker processes for multiprocessing (default zero, meaning use all available cores)", ) parser.add_argument( "--SGEgroupsize", @@ -74,7 +73,7 @@ def build() -> ArgumentParser: action="store", default=10000, type=int, - help="Number of jobs to place in an SGE array group " "(default 10000)", + help="Number of jobs to place in an SGE array group (default 10000)", ) parser.add_argument( "--SGEargs", From 30757ebb7c5ddf871cb0114076b6cc096633f899 Mon Sep 17 00:00:00 2001 From: Bailey Harrington Date: Fri, 19 Nov 2021 17:06:15 +0000 Subject: [PATCH 62/74] Revert "Parser choices" --- pyani/pyani_tools.py | 5 ++--- pyani/scripts/parsers/plot_parser.py | 3 +-- pyani/scripts/parsers/report_parser.py | 1 - pyani/scripts/parsers/scheduling_parser.py | 7 ++++--- 4 files changed, 7 insertions(+), 9 deletions(-) diff --git a/pyani/pyani_tools.py b/pyani/pyani_tools.py index bdc317f5..b39cdac0 100644 --- a/pyani/pyani_tools.py +++ b/pyani/pyani_tools.py @@ -303,9 +303,8 @@ def label_results_matrix(matrix: pd.DataFrame, labels: Dict) -> pd.DataFrame: Applies the labels from the dictionary to the dataframe in matrix, and returns the result. """ - # The dictionary uses string keys! - matrix.columns = [f"{labels.get(str(_), _)}:{_}" for _ in matrix.columns] - matrix.index = [f"{labels.get(str(_), _)}:{_}" for _ in matrix.index] + matrix.columns = [f"{labels.get(_, _)}:{_}" for _ in matrix.columns] + matrix.index = [f"{labels.get(_, _)}:{_}" for _ in matrix.index] return matrix diff --git a/pyani/scripts/parsers/plot_parser.py b/pyani/scripts/parsers/plot_parser.py index 93beae39..1de228e3 100644 --- a/pyani/scripts/parsers/plot_parser.py +++ b/pyani/scripts/parsers/plot_parser.py @@ -94,8 +94,7 @@ def build( dest="formats", action="store", default="png", - choices=["pdf", "png", "svg", "jpg"], - help="graphics output format", + help="graphics output format (pdf/png/svg/jpg)", ) parser.add_argument( "--method", diff --git a/pyani/scripts/parsers/report_parser.py b/pyani/scripts/parsers/report_parser.py index 01b7b54c..95c230e7 100644 --- a/pyani/scripts/parsers/report_parser.py +++ b/pyani/scripts/parsers/report_parser.py @@ -125,7 +125,6 @@ def build( dest="formats", action="store", default=None, - choices=["html", "excel", "stdout"], help="Output formats (in addition to .tab)", ) parser.set_defaults(func=subcommands.subcmd_report) diff --git a/pyani/scripts/parsers/scheduling_parser.py b/pyani/scripts/parsers/scheduling_parser.py index b409cc01..fc728387 100644 --- a/pyani/scripts/parsers/scheduling_parser.py +++ b/pyani/scripts/parsers/scheduling_parser.py @@ -57,7 +57,7 @@ def build() -> ArgumentParser: action="store", default="multiprocessing", choices=["multiprocessing", "SGE"], - help="Job scheduler (default multiprocessing, i.e. locally)", + help="Job scheduler (default multiprocessing, " + "i.e. locally)", ) parser.add_argument( "--workers", @@ -65,7 +65,8 @@ def build() -> ArgumentParser: action="store", default=None, type=int, - help="Number of worker processes for multiprocessing (default zero, meaning use all available cores)", + help="Number of worker processes for multiprocessing " + "(default zero, meaning use all available cores)", ) parser.add_argument( "--SGEgroupsize", @@ -73,7 +74,7 @@ def build() -> ArgumentParser: action="store", default=10000, type=int, - help="Number of jobs to place in an SGE array group (default 10000)", + help="Number of jobs to place in an SGE array group " "(default 10000)", ) parser.add_argument( "--SGEargs", From ba8c12a2cb9c708c9e940ccabcb4d7ea9449a8ce Mon Sep 17 00:00:00 2001 From: baileythegreen Date: Fri, 19 Nov 2021 17:20:03 +0000 Subject: [PATCH 63/74] Re-add Peter's changes to use string casting --- pyani/pyani_tools.py | 5 +++-- pyani/scripts/parsers/report_parser.py | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/pyani/pyani_tools.py b/pyani/pyani_tools.py index b39cdac0..bdc317f5 100644 --- a/pyani/pyani_tools.py +++ b/pyani/pyani_tools.py @@ -303,8 +303,9 @@ def label_results_matrix(matrix: pd.DataFrame, labels: Dict) -> pd.DataFrame: Applies the labels from the dictionary to the dataframe in matrix, and returns the result. """ - matrix.columns = [f"{labels.get(_, _)}:{_}" for _ in matrix.columns] - matrix.index = [f"{labels.get(_, _)}:{_}" for _ in matrix.index] + # The dictionary uses string keys! + matrix.columns = [f"{labels.get(str(_), _)}:{_}" for _ in matrix.columns] + matrix.index = [f"{labels.get(str(_), _)}:{_}" for _ in matrix.index] return matrix diff --git a/pyani/scripts/parsers/report_parser.py b/pyani/scripts/parsers/report_parser.py index 95c230e7..01b7b54c 100644 --- a/pyani/scripts/parsers/report_parser.py +++ b/pyani/scripts/parsers/report_parser.py @@ -125,6 +125,7 @@ def build( dest="formats", action="store", default=None, + choices=["html", "excel", "stdout"], help="Output formats (in addition to .tab)", ) parser.set_defaults(func=subcommands.subcmd_report) From 0bcd46d40058172b46b2f52da0202c94f63f93d5 Mon Sep 17 00:00:00 2001 From: baileythegreen Date: Mon, 29 Nov 2021 14:13:17 +0000 Subject: [PATCH 64/74] Remove redundant parameter and write out row labels --- pyani/pyani_report.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/pyani/pyani_report.py b/pyani/pyani_report.py index b02aa753..6404e5dd 100644 --- a/pyani/pyani_report.py +++ b/pyani/pyani_report.py @@ -189,7 +189,6 @@ def write_dbtable( dfm: pd.DataFrame, path: Path, formats: Sequence[str] = ("tab",), - index: bool = False, show_index: bool = False, colour_num: bool = False, ) -> None: @@ -198,18 +197,17 @@ def write_dbtable( :param dfm: pd.Dataframe :param path: Path to output file :param formats: tuple of str, output file formats - :param index: Boolean :param show_index: Boolean :param colour_num: use colours for values in HTML output colours are used for identity/coverage tables """ formatdict = { - "tab": (dfm.to_csv, {"sep": "\t", "index": False}, ".tab"), + "tab": (dfm.to_csv, {"sep": "\t", "index": show_index}, ".tab"), "excel": (dfm.to_excel, {"index": show_index}, ".xlsx"), "html": ( write_styled_html, - {"dfm": dfm, "index": index, "colour_num": colour_num}, + {"dfm": dfm, "index": show_index, "colour_num": colour_num}, ".html", ), "stdout": (write_to_stdout, {"dfm": dfm, "show_index": show_index}, ""), From ade312746f9784e4528dc3a230e04c06894b9347 Mon Sep 17 00:00:00 2001 From: baileythegreen Date: Mon, 29 Nov 2021 15:26:42 +0000 Subject: [PATCH 65/74] Add parser option to override matrix labels --- pyani/pyani_report.py | 4 ++-- pyani/scripts/parsers/report_parser.py | 7 +++++++ pyani/scripts/subcommands/subcmd_report.py | 20 ++++++++++++++++---- 3 files changed, 25 insertions(+), 6 deletions(-) diff --git a/pyani/pyani_report.py b/pyani/pyani_report.py index 6404e5dd..6de35595 100644 --- a/pyani/pyani_report.py +++ b/pyani/pyani_report.py @@ -189,7 +189,7 @@ def write_dbtable( dfm: pd.DataFrame, path: Path, formats: Sequence[str] = ("tab",), - show_index: bool = False, + show_index: bool = True, colour_num: bool = False, ) -> None: """Write database result table to output file in named format. @@ -197,7 +197,7 @@ def write_dbtable( :param dfm: pd.Dataframe :param path: Path to output file :param formats: tuple of str, output file formats - :param show_index: Boolean + :param show_index: output row and column labels :param colour_num: use colours for values in HTML output colours are used for identity/coverage tables diff --git a/pyani/scripts/parsers/report_parser.py b/pyani/scripts/parsers/report_parser.py index 01b7b54c..c53bfb34 100644 --- a/pyani/scripts/parsers/report_parser.py +++ b/pyani/scripts/parsers/report_parser.py @@ -120,6 +120,13 @@ def build( default=None, help="Report matrices of results for comma separated list of runs", ) + parser.add_argument( + "--no_matrix_labels", + action="store_true", + dest="no_matrix_labels", + default=False, + help="Turn off row/column labels in output matrix files", + ) parser.add_argument( "--formats", dest="formats", diff --git a/pyani/scripts/subcommands/subcmd_report.py b/pyani/scripts/subcommands/subcmd_report.py index 3b1d1bbc..805c3786 100644 --- a/pyani/scripts/subcommands/subcmd_report.py +++ b/pyani/scripts/subcommands/subcmd_report.py @@ -155,7 +155,10 @@ def subcmd_report(args: Namespace) -> int: "genome class", ] report( - args, session, formats, ReportParams("runs_genomes", statement, headers), + args, + session, + formats, + ReportParams("runs_genomes", statement, headers), ) # Report table of all runs in which a genome is involved @@ -194,7 +197,10 @@ def subcmd_report(args: Namespace) -> int: "date run", ] report( - args, session, formats, ReportParams("genomes_runs", statement, headers), + args, + session, + formats, + ReportParams("genomes_runs", statement, headers), ) # Report table of comparison results for the indicated runs @@ -259,6 +265,7 @@ def subcmd_report(args: Namespace) -> int: # JSON, we don't bother with a helper function like report(), and write out # our matrices directly, here if args.run_matrices: + show_index = not args.no_matrix_labels for run_id in [run_id.strip() for run_id in args.run_matrices.split(",")]: logger.debug("Extracting matrices for run %s", run_id) run = session.query(Run).filter(Run.run_id == run_id).first() @@ -286,14 +293,19 @@ def subcmd_report(args: Namespace) -> int: ) ), formats, - show_index=True, + show_index=show_index, **matdata.graphic_args, ) return 0 -def report(args: Namespace, session, formats: List[str], params: ReportParams,) -> None: +def report( + args: Namespace, + session, + formats: List[str], + params: ReportParams, +) -> None: """Write tabular report of pyani runs from database. :param args: Namespace of command-line arguments From 0024e38a5244c75c6c981cdcf71ac41549b56121 Mon Sep 17 00:00:00 2001 From: baileythegreen Date: Mon, 29 Nov 2021 16:23:53 +0000 Subject: [PATCH 66/74] Update label format to respond to label availability --- .flake8 | 4 ++-- pyani/pyani_tools.py | 8 ++++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/.flake8 b/.flake8 index c5e8a8d1..051ea600 100644 --- a/.flake8 +++ b/.flake8 @@ -1,5 +1,5 @@ [flake8] -ignore = E203, E231, E266, E501, W503, F403, F401 +ignore = E203, E231, E266, E501, W503, F403, F401, E731 max-line-length = 88 max-complexity = 18 -select = B,C,E,F,W,T4,B9 \ No newline at end of file +select = B,C,E,F,W,T4,B9 diff --git a/pyani/pyani_tools.py b/pyani/pyani_tools.py index bdc317f5..7c16ed44 100644 --- a/pyani/pyani_tools.py +++ b/pyani/pyani_tools.py @@ -304,8 +304,12 @@ def label_results_matrix(matrix: pd.DataFrame, labels: Dict) -> pd.DataFrame: matrix, and returns the result. """ # The dictionary uses string keys! - matrix.columns = [f"{labels.get(str(_), _)}:{_}" for _ in matrix.columns] - matrix.index = [f"{labels.get(str(_), _)}:{_}" for _ in matrix.index] + # Create a label function that produces

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%0A1uZClefdxAh(hARGy0Pkh1E#sU@OhUA#WDy>2 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 z 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