Repository 'cfsan_bettercallsal'
hg clone https://toolrepo.galaxytrakr.org/repos/kkonganti/cfsan_bettercallsal

Changeset 11:749faef1caa9 (2023-09-05)
Previous changeset 10:1b9de878b04a (2023-06-15) Next changeset 12:c5faadb3386f (2023-09-05)
Commit message:
"planemo upload"
modified:
cfsan_bettercallsal.xml
added:
0.6.1/LICENSE.md
0.6.1/README.md
0.6.1/assets/abricate-get_db
0.6.1/assets/abricate_dbs/argannot/sequences
0.6.1/assets/abricate_dbs/argannot/sequences.ndb
0.6.1/assets/abricate_dbs/argannot/sequences.nhd
0.6.1/assets/abricate_dbs/argannot/sequences.nhi
0.6.1/assets/abricate_dbs/argannot/sequences.nhr
0.6.1/assets/abricate_dbs/argannot/sequences.nin
0.6.1/assets/abricate_dbs/argannot/sequences.nog
0.6.1/assets/abricate_dbs/argannot/sequences.not
0.6.1/assets/abricate_dbs/argannot/sequences.nsq
0.6.1/assets/abricate_dbs/argannot/sequences.ntf
0.6.1/assets/abricate_dbs/argannot/sequences.nto
0.6.1/assets/abricate_dbs/megares/sequences
0.6.1/assets/abricate_dbs/megares/sequences.ndb
0.6.1/assets/abricate_dbs/megares/sequences.nhd
0.6.1/assets/abricate_dbs/megares/sequences.nhi
0.6.1/assets/abricate_dbs/megares/sequences.nhr
0.6.1/assets/abricate_dbs/megares/sequences.nin
0.6.1/assets/abricate_dbs/megares/sequences.nog
0.6.1/assets/abricate_dbs/megares/sequences.not
0.6.1/assets/abricate_dbs/megares/sequences.nsq
0.6.1/assets/abricate_dbs/megares/sequences.ntf
0.6.1/assets/abricate_dbs/megares/sequences.nto
0.6.1/assets/abricate_dbs/ncbiamrplus/sequences
0.6.1/assets/abricate_dbs/ncbiamrplus/sequences.ndb
0.6.1/assets/abricate_dbs/ncbiamrplus/sequences.nhd
0.6.1/assets/abricate_dbs/ncbiamrplus/sequences.nhi
0.6.1/assets/abricate_dbs/ncbiamrplus/sequences.nhr
0.6.1/assets/abricate_dbs/ncbiamrplus/sequences.nin
0.6.1/assets/abricate_dbs/ncbiamrplus/sequences.nog
0.6.1/assets/abricate_dbs/ncbiamrplus/sequences.not
0.6.1/assets/abricate_dbs/ncbiamrplus/sequences.nsq
0.6.1/assets/abricate_dbs/ncbiamrplus/sequences.ntf
0.6.1/assets/abricate_dbs/ncbiamrplus/sequences.nto
0.6.1/assets/abricate_dbs/resfinder/sequences
0.6.1/assets/abricate_dbs/resfinder/sequences.ndb
0.6.1/assets/abricate_dbs/resfinder/sequences.nhd
0.6.1/assets/abricate_dbs/resfinder/sequences.nhi
0.6.1/assets/abricate_dbs/resfinder/sequences.nhr
0.6.1/assets/abricate_dbs/resfinder/sequences.nin
0.6.1/assets/abricate_dbs/resfinder/sequences.nog
0.6.1/assets/abricate_dbs/resfinder/sequences.not
0.6.1/assets/abricate_dbs/resfinder/sequences.nsq
0.6.1/assets/abricate_dbs/resfinder/sequences.ntf
0.6.1/assets/abricate_dbs/resfinder/sequences.nto
0.6.1/assets/adaptors.fa
0.6.1/assets/dummy_file.txt
0.6.1/assets/dummy_file2.txt
0.6.1/bin/check_samplesheet.py
0.6.1/bin/create_mqc_data_table.py
0.6.1/bin/dataformat
0.6.1/bin/datasets
0.6.1/bin/dl_pdg_metadata.py
0.6.1/bin/fasta_join.pl
0.6.1/bin/fastq_dir_to_samplesheet.py
0.6.1/bin/gen_otf_genome.py
0.6.1/bin/gen_salmon_res_table.py
0.6.1/bin/get_top_unique_mash_hit_genomes.py
0.6.1/bin/sourmash_filter_hits.py
0.6.1/bin/sourmash_sim_matrix.py
0.6.1/bin/waterfall_per_computed_serotype.pl
0.6.1/bin/waterfall_per_snp_cluster.pl
0.6.1/conf/base.config
0.6.1/conf/computeinfra.config
0.6.1/conf/fastq.config
0.6.1/conf/logtheseparams.config
0.6.1/conf/manifest.config
0.6.1/conf/modules.config
0.6.1/conf/multiqc/bettercallsal_mqc.yml
0.6.1/cpipes
0.6.1/lib/help/abricate.nf
0.6.1/lib/help/amrfinderplus.nf
0.6.1/lib/help/bbmerge.nf
0.6.1/lib/help/centrifuge.nf
0.6.1/lib/help/ectyper.nf
0.6.1/lib/help/fastp.nf
0.6.1/lib/help/flye.nf
0.6.1/lib/help/gsrpy.nf
0.6.1/lib/help/kmaalign.nf
0.6.1/lib/help/kmaindex.nf
0.6.1/lib/help/kraken2.nf
0.6.1/lib/help/mashscreen.nf
0.6.1/lib/help/mashsketch.nf
0.6.1/lib/help/megahit.nf
0.6.1/lib/help/mlst.nf
0.6.1/lib/help/salmonidx.nf
0.6.1/lib/help/seqkitgrep.nf
0.6.1/lib/help/seqkitrmdup.nf
0.6.1/lib/help/seqsero2.nf
0.6.1/lib/help/serotypefinder.nf
0.6.1/lib/help/sfhpy.nf
0.6.1/lib/help/sourmashgather.nf
0.6.1/lib/help/sourmashsearch.nf
0.6.1/lib/help/sourmashsigkmers.nf
0.6.1/lib/help/sourmashsketch.nf
0.6.1/lib/help/spades.nf
0.6.1/lib/help/tuspy.nf
0.6.1/lib/help/wcomp.nf
0.6.1/lib/help/wsnp.nf
0.6.1/lib/routines.nf
0.6.1/modules/abricate/run/README.md
0.6.1/modules/abricate/run/main.nf
0.6.1/modules/abricate/summary/README.md
0.6.1/modules/abricate/summary/main.nf
0.6.1/modules/bbtools/bbmerge/README.md
0.6.1/modules/bbtools/bbmerge/main.nf
0.6.1/modules/bcs_distance_matrix/main.nf
0.6.1/modules/bcs_results/main.nf
0.6.1/modules/cat/fastq/README.md
0.6.1/modules/cat/fastq/main.nf
0.6.1/modules/cat/tables/README.md
0.6.1/modules/cat/tables/main.nf
0.6.1/modules/cat_cat/main.nf
0.6.1/modules/custom/dump_software_versions/README.md
0.6.1/modules/custom/dump_software_versions/main.nf
0.6.1/modules/custom/dump_software_versions/templates/dumpsoftwareversions.py
0.6.1/modules/custom/sourmash/compare/main.nf
0.6.1/modules/db_per_computed_serotype/main.nf
0.6.1/modules/db_per_snp_cluster/main.nf
0.6.1/modules/download_pdg_metadata/main.nf
0.6.1/modules/fastp/main.nf
0.6.1/modules/fastqc/README.md
0.6.1/modules/fastqc/main.nf
0.6.1/modules/filter_pdg_metadata/main.nf
0.6.1/modules/gen_samplesheet/README.md
0.6.1/modules/gen_samplesheet/main.nf
0.6.1/modules/index_metadata/main.nf
0.6.1/modules/kma/align/README.md
0.6.1/modules/kma/align/main.nf
0.6.1/modules/kma/index/README.md
0.6.1/modules/kma/index/main.nf
0.6.1/modules/mash/screen/README.md
0.6.1/modules/mash/screen/main.nf
0.6.1/modules/mash/sketch/README.md
0.6.1/modules/mash/sketch/main.nf
0.6.1/modules/megahit/assemble/README.md
0.6.1/modules/megahit/assemble/main.nf
0.6.1/modules/mlst/README.md
0.6.1/modules/mlst/main.nf
0.6.1/modules/multiqc/README.md
0.6.1/modules/multiqc/main.nf
0.6.1/modules/otf_genome/main.nf
0.6.1/modules/salmon/index/README.md
0.6.1/modules/salmon/index/main.nf
0.6.1/modules/salmon/quant/README.md
0.6.1/modules/salmon/quant/main.nf
0.6.1/modules/samplesheet_check/README.md
0.6.1/modules/samplesheet_check/main.nf
0.6.1/modules/scaffold_genomes/main.nf
0.6.1/modules/seqkit/seq/README.md
0.6.1/modules/seqkit/seq/main.nf
0.6.1/modules/sourmash/gather/main.nf
0.6.1/modules/sourmash/search/main.nf
0.6.1/modules/sourmash/sig/kmers/main.nf
0.6.1/modules/sourmash/sketch/main.nf
0.6.1/modules/top_unique_serovars/main.nf
0.6.1/nextflow.config
0.6.1/readme/bettercallsal.md
0.6.1/readme/bettercallsal_db.md
0.6.1/subworkflows/process_fastq.nf
0.6.1/workflows/bettercallsal.nf
0.6.1/workflows/bettercallsal_db.nf
0.6.1/workflows/conf/bettercallsal.config
0.6.1/workflows/conf/bettercallsal_db.config
0.6.1/workflows/conf/process/bettercallsal.process.config
0.6.1/workflows/conf/process/bettercallsal_db.process.config
0.6.1/LICENSE.md
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/LICENSE.md
0.6.1/LICENSE.md
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/LICENSE.md Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,126 @@
+# CPIPES (CFSAN PIPELINES)
+
+## The modular pipeline repository at CFSAN, FDA
+
+**CPIPES** (CFSAN PIPELINES) is a collection of modular pipelines based on **NEXTFLOW**,
+mostly for bioinformatics data analysis at **CFSAN, FDA.**
+
+---
+
+### **LICENSES**
+
+\
+ 
+
+**CPIPES** is licensed under:
+
+```text
+MIT License
+
+In the U.S.A. Public Domain; elsewhere Copyright (C) 2022 Center for Food Safety and Nutrition (CFSAN)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+```
+
+\
+ 
+
+Major portions of **CPIPES** are built on modified versions of many modules, scripts and libraries from [nf-core/modules](https://github.com/nf-core/modules) and [nf-core/rnaseq](https://github.com/nf-core/rnaseq) which are originally licensed under:
+
+```text
+MIT License
+
+Copyright (c) Philip Ewels
+Copyright (c) Phil Ewels, Rickard Hammarén
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+```
+
+\
+ 
+
+The **MultiQC** report, in addition uses [DataTables](https://datatables.net), which is licensed under:
+
+```text
+MIT License
+
+Copyright (C) 2008-2022, SpryMedia Ltd.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+```
+
+\
+ 
+
+The **NCBI datasets** is licensed under Public Domain.
+
+```text
+# Public Domain notice
+
+National Center for Biotechnology Information
+
+This software is a "United States Government Work" under the terms of the
+United States Copyright Act.  It was written as part of the authors'
+official duties as United States Government employees and thus cannot
+be copyrighted.  This software is freely available to the public for
+use. The National Library of Medicine and the U.S. Government have not
+placed any restriction on its use or reproduction.
+
+Although all reasonable efforts have been taken to ensure the accuracy
+and reliability of the software and data, the NLM and the U.S.
+Government do not and cannot warrant the performance or results that
+may be obtained by using this software or data. The NLM and the U.S.
+Government disclaim all warranties, express or implied, including
+warranties of performance, merchantability or fitness for any
+particular purpose.
+
+Please cite NCBI in any work or product based on this material.
+```
0.6.1/README.md
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/README.md
0.6.1/README.md
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/README.md Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,62 @@
+# `bettercallsal`
+
+`bettercallsal` is an automated workflow to assign Salmonella serotype based on [NCBI Pathogen Detection](https://www.ncbi.nlm.nih.gov/pathogens) Project for [Salmonella](https://www.ncbi.nlm.nih.gov/pathogens/isolates/#taxgroup_name:%22Salmonella%20enterica%22). It uses `MASH` to reduce the search space followed by additional genome filtering with `sourmash`. It then performs genome based alignment with `kma` followed by count generation using `salmon`. This workflow can be used to analyze shotgun metagenomics datasets, quasi-metagenomic datasets (enriched for Salmonella) and target enriched datasets (enriched with molecular baits specific for Salmonella) and is especially useful in a case where a sample is of multi-serovar mixture.
+
+It is written in **Nextflow** and is part of the modular data analysis pipelines (**CFSAN PIPELINES** or **CPIPES** for short) at **CFSAN**.
+
+\
+ 
+
+## Workflows
+
+**CPIPES**:
+
+ 1. `bettercallsal`       : [README](./readme/bettercallsal.md).
+ 2. `bettercallsal_db`    : [README](./readme/bettercallsal_db.md).
+
+\
+ 
+
+### Citing `bettercallsal`
+
+---
+This work is published in [Frontiers in Microbiology](https://www.frontiersin.org/articles/10.3389/fmicb.2023.1200983/full).
+
+>
+>**bettercallsal: better calling of _Salmonella_ serotypes from enrichment cultures using shotgun metagenomic profiling and its application in an outbreak setting**
+>
+>Kranti Konganti, Elizabeth Reed, Mark Mammel, Tunc Kayikcioglu, Rachel Binet, Karen Jarvis, Christina M. Ferreira, Rebecca Bell, Jie Zheng, Amanda M. Windsor, Andrea Ottesen, Christopher Grim, and Padmini Ramachandran. _**Frontiers in Microbiology**_. [https://doi.org/10.3389/fmicb.2023.1200983](https://www.frontiersin.org/articles/10.3389/fmicb.2023.1200983/full).
+>
+
+\
+ 
+
+### Caveats
+
+---
+
+- The main workflow has been used for **research purposes** only.
+- Analysis results should be interpreted with caution and should be treated as suspect, as the pipeline is dependent on the precision of metadata from the **NCBI Pathogen Detection** project for the `per_snp_cluster` and `per_computed_serotype` databases.
+- Internal research with simulated datasets suggests that the `bettercallsal` workflow is more accurate with increased read depth.
+  - For Illumina MiSeq, at least 5 million read pairs (2x300 PE) or 10 million reads (1x300 SE) per sample works well.
+  - For Illumina NextSeq and NovaSeq, around 10 million read pairs (2x150 PE) or 20 million reads (1x150 SE) per sample works well.
+  - That being said, it is not a hard-cutoff and you can still try the workflow on low read-depth samples.
+- **No genome hit** assignment should be interpreted with caution.
+
+\
+ 
+
+### Acknowledgements
+
+---
+**NCBI Pathogen Detection**:
+
+We gratefully acknowledge all data contributors, i.e., the Authors and their Originating laboratories responsible for obtaining the specimens, and their Submitting laboratories for generating the sequence and metadata and sharing it via the **NCBI Pathogen Detection** site, some of which this research utilizes.
+
+\
+ 
+
+### Disclaimer
+
+---
+**CFSAN, FDA** assumes no responsibility whatsoever for use by other parties of the Software, its source code, documentation or compiled or uncompiled executables, and makes no guarantees, expressed or implied, about its quality, reliability, or any other characteristic. Further, **CFSAN, FDA** makes no representations that the use of the Software will not infringe any patent or proprietary rights of third parties. The use of this code in no way implies endorsement by the **CFSAN, FDA** or confers any advantage in regulatory decisions.
0.6.1/assets/abricate-get_db
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/assets/abricate-get_db
0.6.1/assets/abricate-get_db
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/assets/abricate-get_db Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,947 @@
+#!/usr/bin/env perl
+
+use strict;
+use FindBin;
+use Bio::SeqIO;
+use Bio::Seq;
+use Path::Tiny;
+use File::Basename;
+use File::Spec;
+use File::Path qw(make_path remove_tree);
+use List::Util qw(first);
+use Cwd        qw(abs_path);
+use Data::Dumper;
+use LWP::Simple;
+use JSON;
+
+#..............................................................................
+# Globals
+
+my $EXE     = basename($0);
+my $ABX_SEP = ';';
+
+my %DATABASE = (
+    'resfinder'     => \&get_resfinder,
+    'plasmidfinder' => \&get_plasmidfinder,
+    'megares'       => \&get_megares,
+    'argannot'      => \&get_argannot,
+    'card'          => \&get_card,
+
+    #  'ncbibetalactamase' => \&get_ncbibetalactamase,
+    'ncbi'     => \&get_ncbi,
+    'vfdb'     => \&get_vfdb,
+    'ecoli_vf' => \&get_ecoli_vf,    # https://github.com/phac-nml/ecoli_vf
+    'ecoh'     => \&get_ecoh,
+    'bacmet2'  => \&get_bacmet2,
+    'victors'  => \&get_victors,
+
+    #  'serotypefinder'    => \&get_serotypefinder,
+);
+my $DATABASES = join( ' ', sort keys %DATABASE );
+
+#..............................................................................
+# Command line options
+
+my ( @Options, $debug, $outdir, $db, $force );
+setOptions();
+
+$db                   or err("Please choose a --db from: $DATABASES");
+exists $DATABASE{$db} or err("Unknown --db '$db', choose from: $DATABASES ");
+-d $outdir            or err("--outdir '$outdir' does not exist");
+
+my $dir = abs_path( File::Spec->catdir( $outdir, $db ) );
+make_path($dir);
+msg("Setting up '$db' in '$dir'");
+
+#my $tmpdir = tempdir("$db-XXXXXXXX", DIR=>$dir, CLEANUP=>0);
+#my $tmpdir = "/home/tseemann/git/abricate/db/resfinder/resfinder-6Kuphtvv";
+my $tmpdir = "$dir/src";
+make_path($tmpdir);
+
+# run the specific function from --db
+chdir $tmpdir;
+my $seq = $DATABASE{$db}->();
+map { is_full_gene($_) } @$seq;    # doesn't do anything?
+$seq = dedupe_seq($seq);
+
+#print Dumper($seq);
+msg("Sorting sequences by ID");
+$seq = [ sort { $a->{ID} cmp $b->{ID} } @$seq ];
+save_fasta( "$dir/sequences", $seq );
+
+msg("Formatting BLASTN database: $dir/sequences");
+my $logfile    = "$tmpdir/makeblastdb.log";
+my $ncbi_title = $db;
+if ( "$db" eq "ncbi" ) {
+    $ncbi_title = "ncbiamrplus";
+}
+my $ec = system(
+"makeblastdb -in '$dir/sequences' -title '$ncbi_title' -dbtype nucl -hash_index -logfile $logfile"
+);
+if ( $ec != 0 ) {
+    system("tail '$logfile'");
+    err("Error with makign BLAST database. See $logfile");
+}
+
+#msg("Run 'abricate --setupdb' to format the database");
+
+msg("Done.");
+
+#..............................................................................
+
+sub download {
+    my ( $url, $dest ) = @_;
+    if ( -r $dest and not $force ) {
+        msg("Won't re-download existing $dest (use --force)");
+
+        #exit(1);
+    }
+    else {
+        msg("Downloading: $url");
+        my $ec = mirror( $url, $dest );
+        msg("HTTP Result: $ec");
+        ( $ec == 200 or $ec = 304 )
+          or err("HTTP $ec | failed to download $url");    # is HTTP OK ?
+    }
+    msg("Destination: $dest");
+    msg( "Filesize:", ( -s $dest ), "bytes" );
+}
+
+#..............................................................................
+sub trim_spaces {
+    my ($s) = @_;
+    $s =~ s/^\s+//;
+    $s =~ s/\s+$//;
+    return $s;
+}
+
+#..............................................................................
+sub get_resfinder {
+    my $name = "resfinder_db";
+
+    # FIXME - can we just get HEAD.zip like in plasmidfinder?
+    my $url = "https://bitbucket.org/genomicepidemiology/$name.git";
+
+    #   if (-r $name and not $force) {
+    #     msg("Won't overwrite existing $name (use --force)");
+    # #    exit(1);
+    #   }
+    #   else {
+    #     msg("Nuking existing folder: $name");
+    #     remove_tree("./$name");
+    #     msg("Clonin.. $dbtype = 'unknown';
+    msg("load_fasta: $fasta");
+    my $in = Bio::SeqIO->new( -file => $fasta, -format => 'fasta' );
+    while ( my $seq = $in->next_seq ) {
+        my $id = $seq->id or err("Empty ID in $fasta");
+        if ( $seen{$id} ) {
+            wrn("Duplicate ID '$id' in $fasta");
+            $id = $id . '_dupe';
+        }
+        $seen{$id}++;
+        my $s = uc( $seq->seq );
+        $dbtype = $seq->alphabet eq 'dna' ? 'nucl' : 'prot';
+        $dbtype eq 'nucl' ? $s =~ s/[^AGTC]/N/g : $s =~ s/[^A-Z]/X/g;
+        push @$list,
+          {
+            ID   => $id,
+            ACC  => '',
+            DESC => $seq->desc,
+            SEQ  => $s,
+            TYPE => $dbtype,
+          };
+    }
+    msg( "load_fasta: read", scalar(@$list), "$dbtype sequences" );
+    return $list;
+}
+
+#..............................................................................
+sub save_fasta {
+    my ( $fasta, $seq ) = @_;
+    msg("save_fasta: $fasta");
+    my %seen;
+    my $out = Bio::SeqIO->new( -file => ">$fasta", -format => 'fasta' );
+    for my $s (@$seq) {
+        $seen{ $s->{ID} }++;
+        my $freq = $seen{ $s->{ID} };
+
+        #wrn("seen $s->{ID} now $freq times") if $freq > 1;
+        #    print Dumper($s);
+        my $ABX =
+          defined( $s->{ABX} ) ? join( $ABX_SEP, sort @{ $s->{ABX} } ) : '';
+        $ABX =~ s/\s+/_/g;    # remove spaces!
+        my $obj = Bio::Seq->new(
+            -id   => join( '~~~', $db, $s->{ID}, $s->{ACC}, $ABX ),
+            -desc => ( $s->{DESC} || $s->{ID} ),
+            -seq  => $s->{SEQ},
+        );
+
+        #    $obj->desc( hash_encode($s) );
+        $out->write_seq($obj);
+
+        #    $seen{ $s->{ID} }++;
+    }
+    msg( "save_fasta: wrote", scalar(@$seq), "sequences" );
+}
+
+#----------------------------------------------------------------------
+sub msg {
+    print STDERR "@_\n";
+}
+
+#----------------------------------------------------------------------
+sub wrn {
+    msg( "WARNING:", @_ ) if $debug;
+}
+
+#----------------------------------------------------------------------
+sub err {
+    msg( "ERROR:", @_ );
+    exit(1);
+}
+
+#----------------------------------------------------------------------
+# Option setting routines
+
+sub setOptions {
+    use Getopt::Long;
+
+    @Options = (
+        { OPT => "help", VAR => \&usage, DESC => "This help" },
+        {
+            OPT     => "debug!",
+            VAR     => \$debug,
+            DEFAULT => 0,
+            DESC    => "Verbose debug output"
+        },
+        {
+            OPT     => "dbdir=s",
+            VAR     => \$outdir,
+            DEFAULT => abs_path("$FindBin::RealBin/../db"),
+            DESC    => "Parent folder"
+        },
+        {
+            OPT     => "db=s",
+            VAR     => \$db,
+            DEFAULT => "",
+            DESC    => "Choices: $DATABASES"
+        },
+        {
+            OPT     => "force!",
+            VAR     => \$force,
+            DEFAULT => 0,
+            DESC    => "Force download even if exists"
+        },
+    );
+
+    &GetOptions( map { $_->{OPT}, $_->{VAR} } @Options ) || usage(1);
+
+    # Now setup default values.
+    foreach (@Options) {
+        if ( defined( $_->{DEFAULT} ) && !defined( ${ $_->{VAR} } ) ) {
+            ${ $_->{VAR} } = $_->{DEFAULT};
+        }
+    }
+}
+
+sub usage {
+    my ($exitcode) = @_;
+    $exitcode = 0 if $exitcode eq 'help';  # what gets passed by getopt func ref
+    $exitcode ||= 0;
+    select STDERR if $exitcode;    # write to STDERR if exitcode is error
+
+    print "SYNOPIS\n  Download databases for abricate to use\n";
+    print "USAGE\n  $EXE [options] --db DATABASE\n";
+    print "OPTIONS\n";
+    foreach (@Options) {
+        printf "  --%-13s %s%s.\n", $_->{OPT}, $_->{DESC},
+          defined( $_->{DEFAULT} ) ? " (default '$_->{DEFAULT}')" : "";
+    }
+    exit($exitcode);
+}
+
+#----------------------------------------------------------------------
+
0.6.1/assets/abricate_dbs/argannot/sequences
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/assets/abricate_dbs/argannot/sequences
0.6.1/assets/abricate_dbs/argannot/sequences
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/assets/abricate_dbs/argannot/sequences Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,37099 @@
+>argannot~~~(AGly)AAC(6')-Isa~~~NG_047311:101-574~~~ (AGly)AAC(6')-Isa
+ATGGAGCTGCGCGGGGACGACGTCGTACTGCGACCGGTGGCCGACGGCGAGGGCGAGGTG
+CTCGACCGGATCGTGCGGGAGCCGGAGGTGGCGGCGTGGTGGTCGCCCCCGGAGGACTTC
+GCGGGCATGCTCGCCATCGTCTTCGAGGGCGAGGTCGTCGGAGCGATCCAGTTCTACGAG
+GAGACCGACCCCGAATTCCACCACGCCGGCATCGACGTCTTCCTGACGGCACGCCACCAG
+GGGAAGGGGCTGGGCACCGACGCGGTGCGCACGCTGGCCCGGTGGCTGGTGGCGGAACGC
+GGCCACCACCGGCTGACCATCGACCCCGCCGCCGCCAACACCGCGGCGATCCGCAGCTAC
+CGCAAGGTCGGGTTCCGGCCGGTGGGCATCATGCGGGCGTACGGGCGCGACCACCGGACG
+GGACGCTGGCAGGACGCGCTGCTCATGGACCTGCTCGCCGACGAACTGACCTGA
+>argannot~~~(AGly)aac~~~AJ628983:1985-2539~~~ (AGly)aac
+ATGCCCTCCCACGATCATCCTGTCACCTTGCGGCTTATGACGGAGCAAGACCTGCCTATG
+CTCCATGAATGGCTGAATCGGCCGCACATAGTCGAGTGGTGGGGCGGTGAAGAGCAACGT
+CCGACACTGGCGGATGTACTGGAACACTACAGGCCCAGAATCTTGGCGCACGAGTCGGTC
+ACTCCATACATCGCCATGCTGGGCGAAGAACCAATCGGATATGCGCAGTCGTACGTCGCG
+CTCGGAAGCGGCGATGGATGGTGGGAAGAGGAAACCGACCCAGGAGTACGAGGAATCGAT
+CAGTCGTTGGCGAATCCTACGCAGTTGAACATGGGCCTGGGAACAGAGCTTGTGCGAGCG
+CTGGTTGATCGGTTGTTCTCCGACCCAACGGTGACAAAGATCCAGACTGATCCGGCCCCA
+AACAATCGCCGCGCGATCCGCTGCTACGAGAAGGCGGGCTTTGTGCAGGAGAGAGTCATC
+ACGACACCCGACGGGCAGGCCGTCTACATGACCCAATCTAGGCAAGCCTACGAGCGTGCG
+CGCGGTGCTGCCTAA
+>argannot~~~(AGly)aac(2')-IIa_Bg~~~NG_047225:101-883~~~ (AGly)aac(2')-IIa_Bg
+ATGAAAGACAGATCCCATGACGACTCAATGGCCGAGGTCTGTCGGAACACCTCTGAGAAC
+CACTGGCTGAAGACCGATTATCGGACGTTGTTTCGGCTGTGCCCCGACGGTCGGATCGAG
+CGCGAGAATGATCCGGACTGCTCGCCGGGGCCGCGTTTCTGGTTGGCTGGCTGTTCGGAA
+GGCAACGTGTTCGGCGTACGTGCCGATGTGCCCGATGACATAGCACTAAAGCTCGAAGAA
+CTCGCCAGCGTCGAGCCTCCGTTCACACCCCCGGCGATACCGAAGCATCTTGAACGTTAT
+CTTTCACTGCTCGGCAGTGATGGCCCTGTTACCCACGATCTTGGTCTGATTTACGAGTTG
+CCGCACGCGCAGCAGTACCCGAGCAAGGCCCGGCTCATCGGCAGCGGTTCCGAGGAGGGC
+GAGAGTCTGATGCAGTCTTGGGCGGAGGACAGAGTACCGGAAGCTTTGTTTGAGCTTGGC
+TTCCGTGAGGTGGCGGACTTCTGGACGCCTTGGTGCGCGGCAGTTGTCGATGGTGAAGTC
+GCTTCAATCGCCTTTGCAGCGCGTCTCGCGGATGCCGGTGCCGAACTCGGGTTGGTAACG
+GCGAAGGCATTCAGAGGACAGGGGTTCGCCGCCGCTGCGACGGCTGGTTGGTCCCGGCTC
+TCCGCTCTTCGTTCCCGCACGCTGTTCTACAGCACGGACCGAGACAACATTTCATCGCAG
+CGCGTTGCCGCCCGCCTTGGTCTCCGGCTTCGTGGAGCCAGCTTGCGAATATCACGCGCC
+TGA
+>argannot~~~(AGly)aac(2')-IIb~~~NG_055672:1-723~~~ (AGly)aac(2')-IIb
+ATGAACCATAGGAAAGGTAACGAGCCAACCGCTGCGGCACTGATGGAATTGCATGTTCTG
+GCGATGTTTACGCATGACGGGAATATGCAAATTCGCACCATCAACGAGCCTTGGCCGGGA
+GAGGAGCTTGCCCCGAGGTTTTTCATGGGTCGAACGATAGACGGCTCTTCGATCTGCAGG
+TTTCGTCATGATGTTCCCGAAGGAATTGCCGGGCAATTGAGGGCTTTGGTTGAAGATGAG
+CCTATCGTTACTGAAGAGGTTCTGACGAGGCCTAAACATTTTGCAGCTTATATGAACCTC
+CTTCGCGCTGAGCACTATACGAGCGGACCTTGTTATCGGATACCTGATCAAACAACGCAG
+GCCAAACAGACGGTAAGGATCACACCGGGAAATATTCGCGAATATTCGCTCACCGGTTTT
+GAATGGCTGACCACGGAAATTGATTATGACCAGCCTTGTGTTGCGCTCATTCATGAGAAT
+AGGGTGGTGTCGGTTTGCCGCAGCGTCCGGATTACTGAACGAGCTCACGAAGCTGGGCTT
+GAAACGTCAGAGGAATTTCGTGGAAGAGGTTATGCGGCTGCTGTTGTTGCCGGATGGGCC
+ATAGAGGTGCAAAAAATGGGCGCGCTGGCGTTGTACAGTACTTTATGGGGAAATAGCTCT
+TCCCGGAGAGTAGCAAATAAATTAGGGTTGTCCTATTACGGAGTTAACTTCACGATCAGT
+TGA
+>argannot~~~(AGly)aac(2')-Id~~~U72743:386-1018~~~ (AGly)aac(2')-Id
+GTGCTCACCCAGCATGTCAGTGAGGCTCGCACGCGCGGTGCGATCCACACCGCGCGTCTG
+ATCCACACCTCCGATCTGGACCAGGAAACCCGCGACGGCGCGCGCCGCATGGTGATCGAG
+GCGTTCCGCGATCCGTCCGGAGACAGTGATTTCACCGACGATTTCACCGACGACGACTGG
+GACCACGCGCTCGGCGGCATGCACGCGCTGATCTCTCACCACGGTGCGCTCATCGCGCAC
+GGCGCCGTCGTCCAACGTCGGTTGATGTACCGGGGACCCGACGGTAGAGGTCACGCGCTG
+CGCTGCGGTTACGTCGAGGCCGTCGCGGTGCGCGAGGACCGGCGGGGCGACGGTCTGGGC
+ACCGCCGTGCTCGACGCGCTCGAGCAGGTGATCCGCGGCGCCTATCAGATCGGCGCGCTG
+AGCGCGTCGGACATCGCCCGGCCGATGTACATTGCCAGGGGCTGGCTGTCGTGGGAGGGT
+CCGACATCGGTGCTGACCCCCACCGAGGGCATCGTTCGCACCCCTGAGGACGACCGGTCG
+CTGTTCGTCCTGCCGGTCGATCTCCCGGACGGCCTCGAGTTGGACACCGCGCGCGAGATC
+ACGTGCGACTGGCGCTCCGGCGACCCCTGGTGA
+>argannot~~~(AGly)aac(3)-IIIb~~~L06160:984-1721~~~ (AGly)aac(3)-IIIb
+ATGGTCCATGCCGCCGTCAGCAGGGTCGGCCGCCTGCTCGATGGCCCCGACACCATCATC
+GCCGCCCTGCGCGATACCGTCGGCCCGGGCGGTACCGTTCTCGCCTATGCCGATTGGGAG
+GCACGATACGAGGACCTGGTCGACGACGCGGG..CTTTGCAAGAACTATCGAAAATTACAGATCATTTATATGTCTCTGGTGGCGGT
+CAAATCTACAATAGTCTTATTGAAAAAGCAGATATAATTCATTTGTCTACTGTTCACGTT
+GAGGTTGAAGGTGATATCAATTTTCCTAAAATTCCAGAGAATTTCAATTTGGTTTTTGAG
+CAGTTTTTTTTGTCTAATATAAATTACACATATCAGATTTGGAAAAAAGGCTAA
+>argannot~~~(col)mcr-2.2~~~MG545606:1-1617~~~ (col)mcr-2.2
+ATGACATCACAGCACTCTTGGTATCGCTACTCCATCAATCCTTTTGTACTGATGGGTTTG
+GTGGCGTTATTTTTGGCGGCAACAGCGAACCTGACATTTTTTGAAAAAGCGATGGCGGTC
+TATCCTGTATCGGATAACTTAGGCTTTATCATCTCAATGGCGGTTGCACTGATGGGTGCT
+ATGCTATTGATTGTCGTGCTATTATCCTATCGCTATGTGCTAAAGCCTGTGCTGATTTTA
+TTACTTATCATGGGTGCGGTGACGAGCTATTTTACCGATACTTATGGCACGGTCTATGAT
+ACCACCATGCTCCAAAATGCCATGCAAACCGACCAAGCTGAATCTAAAGACTTGATGAAT
+TTGGCGTTTTTTGTGCGGATTATCGGGCTTGGCGTGTTGCCAAGTGTGTTGGTCGCATTT
+GCCAAAGTCAATTATCCAACATGGGGCAAAGGCCTGATTCAGCGTGCGATGACGTGGGGT
+GTCAGCCTTGTGCTGTTGCTTGTGCCGATTGGGCTATTTAGCAGTCAGTATGCGAGTTTC
+TTTCGGGTGCATAAGCCAGTGCGTTTTTATATCAATCCGATTACGCCGATTTATTCGGTG
+GGCAAGCTTGCCAGTATCGAGTACAAAAAAGCCACTGCACCAACAGACACCATCTATCAT
+GCCAAAGATGCCGTGCAGACCACCAAGCCTAGCGAGCGTAAGCCACGCCTAGTAGTGTTC
+GTCGTCGGTGAGACGGCGCGTGCTGACCATGTGCAGTTCAATGGCTATGGCCGTGAGACT
+TTCCCACAGCTTGCCAAAGTTGATGGCTTGGCGAATTTTAGCCAAGTGACATCGTGTGGC
+ACATCGACAGCGTATTCTGTGCCGTGTATGTTTAGCTATTTGGGTCAAGATGACTATGAT
+GTCGATACCGCCAAATACCAAGAAAATGTGCTAGATACGCTTGACCGCTTGGGCGTGGAT
+ATCTTGTGGCGTGATAATAATTCAGACTCAAAAGGCGTGATGGATAAGCTACCTACCACG
+CAGTATTTTGATTATAAATCAGCGACCAACAACACCATCTGTAACACCAATCCCTTTAAT
+GAATGCCGTGATGTCGGTATGCTTGTTGGGCTAGATGACTATGTCAGTGCCAATAATGGC
+AAAGATATGCTCATCATGCTACACCAAATGGGCAATCATGGGCCGGCGTACTTTAAGCGT
+TATGATGAGCAATTTGCCAAATTCACCCCTGTGTGCGAAGGCAATGAGCTTGCCAAATGC
+GAACACCAATCACTCATCAATGCCTATGATAATGCACTACTTGCCACCGATGATTTTATC
+GCCAAAAGTATCGATTGGCTAAAAACACATGAAGCAAACTACGATGTCGCTATGCTCTAT
+GTCAGCGACCACGGCGAGAGCTTGGGCGAGAATGGTGTCTATCTGCATGGTATGCCAAAT
+GCCTTTGCACCAAAAGAACAGCGAGCCGTGCCTGCGTTTTTTTGGTCAAATAATACGACA
+TTCAAGCCAACTGCCAGCGACACTGTGCTGACGCATGATGCGATTACCCCGACATTGCTT
+AAGCTGTTTGATGTCACAGCCGACAAGGTCAAAGACCGCACGGCATTTATCCAGTAA
+>argannot~~~(phe)catA_variant1~~~NG_060532:101-748~~~ (phe)catA_variant1
+ATGAAATTTAACACTATTAATCGTGATACATGGGATCGAAAAGAATATTTTGAACACTAT
+TTACAGCAGCAGACAACATTCAGTCTGACGAATGAAATTAATATAACTATACTTATGAAG
+AACTTAAAGAAAAAGCATTATAAGTTATATCCTGCGTTTATTTTTATGGTGACAAAAATC
+GTGAACGCCCATAGAGAATTTAGAATAAATTTTAACTCAGAAGGAAATTTAGGTTACTGG
+ACGGAGATTTGCCCACTCTATACCATTTTTGATAACAAATCACACACATTTTCTGGCATC
+TGGTCACCAAACTTAACTATTTTTTCTGAGTTTCATTCTAAATATGAAAATGATGCAGAA
+AGATACAATGGCACGAGGAGATTATTTCCAAAAAAACCAATACCAGATAACACTATTCCG
+ATTTCTATGATTCCTTGGAGTTCTTTTACAGCATTTAATCTAAATATAAATAATGGCGGA
+GATTTTCTCTTACCCATAATAACTGGAGGGAAGTATTCACAAGTAAATGATGAATTATTC
+CTGCCTGTCTCTATCCAAATGCATCATGCTATTTGTGATGGCTACCATGCAAGTGTTTTT
+ATCAATGACTTACAAAAACTTGCTGATGAAAGTGAAGACTGGATTTAA
+>argannot~~~(phe)cmrA_variant1~~~AF394894:259-1434~~~ (phe)cmrA_variant1
+GTGCCTTTCGCTATCTACGTCCTCGGGCTTGCCGTCTTTGCCCAGGGCACATCCGAATTC
+ATGTTGTCCGGGCTCATACCGGATATGGCCCGCGACCTCGGCGTCTCGGTCCCCGCCGCC
+GGACTCCTCACCTCCGCCTTCGCGGTCGGGATGATCATCGGCGCTCCGCTGATGGCCATC
+GCCAGCATGCGGTGGCCCCGGCGACGCGCCCTTTTGACATTCCTCATCACGTTCATGCTG
+GTCCACGTCATCGGCGCGCTCACCAGCAGCTTCGAGGTCTTGCTGGTCACACGCATCGTC
+GGCGCCCTCGCCAACGCCGGATTCTTGGCGGTGGCCCTGGGCGCGGCGATGGCGATGGTG
+CCCGCCGACATGAAAGGGCGCGCAACGTCCGTCCTCCTCGGTGGTGTCACGATCGCATGT
+GTAGCCGGAGTTCCCGGGGGCGCCTTCCTCGGTGAAATATGGGGCTGGCGTGCAGCGTTC
+TGGGCTGTCGTCGTCATCTCCGCCCCTGCGGTGGTGGCGATCATGTTCGCCACCCCGGCC
+GAGCCGCCAGCAGAGTCCACACCGAACGCCAAGCGTGAACTGTCCTCGCTGCGCTCACGC
+AAGCTCCAGCTGATGCTTGTCCTCGGTGCCCTGATCAACGGCGCAACATTCTGTTCGTTC
+ACCTACATGGCGCCCACTCTCACCGACATCTCCGGTTTCGACTCCCGTTGGATTCCGTTG
+CTGCTGGGGTTGTTCGGGCTCGGATCGTTCATCGGCGTCAGCGTCGGAGGCAGGCTCGCC
+GATACCCGGCCGTTCCAACTTCTCGCCGTGGGATCCGCAGCACTGTTGACGGGATGGATC
+GTCTTCGCTCTCACGGCATCCCACCCTGCGGTGACATTGGTGATGCTGTTCGTGCAGGGC
+GCTCTGTCCTTCGCGGTCGGCTCGACCTTGATCTCCCAGGTGCTCTACGCCGCCGACGCG
+GCGCCGACCTTGGGTGGATCGTTCGCGACGGCCGCGTTCAACGTCGGCGCTGCACTGGGC
+CCGGCCCTCGGCGGGCTGGCGATCGGTATGGGCCTGAGCTACCGCGCCCCGCTCTGGACG
+AGCGCCGCGCTGGTGACTCTCGCGATCGTCATCGGCGCAGCCACCTTGTCGCTCTGGCGG
+CGTCCAGCGTCCGTCCAGGAAACCGTCCCAGCCTGA
0.6.1/assets/abricate_dbs/argannot/sequences
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/assets/abricate_dbs/argannot/sequences.ndb
0.6.1/assets/abricate_dbs/argannot/sequences
Binary file 0.6.1/assets/abricate_dbs/argannot/sequences.ndb has changed
0.6.1/assets/abricate_dbs/argannot/sequences
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/assets/abricate_dbs/argannot/sequences.nhd
0.6.1/assets/abricate_dbs/argannot/sequences
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/assets/abricate_dbs/argannot/sequences.nhd Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,2223 @@
+1005335988159
+1005387277780
+1006068495260
+10064890511824
+1008732184185
+10132959842110
+1013877899645
+10157035962182
+1015987116878
+10162779561469
+10172477661245
+1019500207227
+10205551901658
+10205641391434
+10238255462054
+10247903761764
+1025475578154
+1025663641680
+10278299941994
+10325999991100
+103326697233
+1034054791354
+1034578637412
+1037546091301
+1039299038913
+104379083420
+10444619511494
+1047341383125
+10499931781886
+10522855151331
+1052815668160
+10611642972070
+10618602361377
+1062786831234
+1065484952846
+10690547401266
+10706642051191
+107107681652
+10730045561717
+1073017490921
+10732948692214
+1073351482221
+10739163071040
+10740407711728
+10772323561196
+1084028016876
+10840728202129
+1085737967217
+10861041411505
+1088711101236
+10972304071435
+10975747712173
+1101391703381
+11018568412133
+1105031281276
+11050719782106
+11062902501731
+1107657668502
+1109152078984
+11125038742124
+11176279361205
+1122348384942
+1123483634920
+1125648704593
+11303747961708
+11308145251047
+11335869752032
+11355392991021
+1136326513946
+11373015241419
+11475988461413
+1148749107657
+11491703791654
+11516561711339
+11519261921537
+1153923421228
+1154749363964
+11566395541154
+11570302141186
+1157293459355
+1157986941358
+1159447139306
+1159763236308
+1164110330276
+11671081211573
+11682633462144
+11687841671219
+1170176407546
+1170319745708
+11722306711055
+11757020771756
+1176871802267
+11780672221045
+11790183501109
+11816570062083
+11840457001601
+1187391807602
+1190547411095
+11920547931566
+1192142346649
+1200267219757
+12018808671228
+12040016811562
+12075657631430
+1208251394573
+12082745841745
+12112580202142
+12197031102045
+122147271353
+12227449662117
+12241002751161
+1227237393928
+12273427451007
+12302919711919
+12307727281922
+1231155916872
+12336278761208
+12353315791137
+1236860326629
+1239942361448
+1240014182858
+124064206724
+12435406631307
+124748299180
+12476052171399
+12477165062069
+1250697007770
+125091491590
+12559685172215
+1257757658891
+1259564077617
+12601885412206
+12614027661933
+1264730631420
+12658766392031
+126673450672
+12687351791296
+1274493320105
+1274786318641
+127628878626
+1277281358703
+12779731451990
+12789122601081
+128229129310
+1285980631139
+12861147458
+1287204938300
+12880867051197
+1290322866194
+1291072942168
+12921106712209
+12923222691
+12929770421780
+1293863912957
+12973468601732
+12981608762020
+12992621861471
+13022817921235
+1303022768627
+130310813860
+13038036201749
+1304965195278
+13072135601338
+13088605951302
+13089669012092
+1309498771386
+1311040231334
+1312211836811
+13128963021663
+131756974176
+13188619971856
+1320459081799
+1322703853529
+1323717242676
+1324715393494
+13252422641238
+13286920631327
+1332905542815
+13336211181918
+133409024845
+13352636081356
+1335391487302
+1335602207339
+1335748009182
+1335836299716
+1338310245249
+13391155241120
+1341233361131
+1341341817910
+13434178801563
+13477049941240
+1348133189916
+13486418571823
+13523763921905
+1352397853296
+13544041931534
+135471719951
+13556997151979
+13577388531160
+135910559818
+136013302114
+1362350355923
+1364773537843
+1367689400165
+1370040277287
+13718716461122
+13741237551229
+1380713285794
+1381439099654
+1383873578330
+13867129151600
+13878063671789
+1388085661845
+1394800747349
+13970670901476
+13985985881978
+1398860006747
+13992117611985
+13992805281199
+14005273981917
+14016133026
+1402333150771
+14041326461688
+1408738708411
+14091819671242
+14092035992010
+1409501411415
+14112421551280
+1413671322498
+1417238961648
+14209149331970
+14226071361805
+1423181999568
+1425359890854
+1425765994..0982261855
+565959412390
+566859501123
+5676477362194
+570033548151
+570727121675
+57234997663
+5726152491893
+57264559796
+573805118550
+5785805548
+5797206361147
+5799912951597
+5833444789
+585609083851
+5893950921762
+589734246791
+595670406235
+5975679491431
+5992185971099
+602577131516
+60394690550
+6090204411975
+61373520778
+6156497961319
+6164186821793
+617335150347
+623903954832
+624365430830
+6243876581531
+631817386426
+6320289761958
+632424146566
+633015954849
+63314259753
+6347548411107
+63545858854
+636720598403
+638401473
+6396409181090
+6400977211261
+640831932710
+643789572179
+646179058387
+649092350218
+6553111022130
+65701767594
+658443620136
+6590401191408
+6609966121465
+6618124851881
+662635744409
+66848060959
+6691072071899
+670207906197
+672403073323
+673110033536
+6744062791674
+677058301454
+6773110441901
+678105992625
+67898941326
+681524082316
+6820716291298
+6842774261347
+685005942172
+6852737831026
+6880680951392
+6883557441607
+6889976971460
+689343018892
+692571987929
+693887533729
+6949166511155
+695886911380
+6970191761332
+6979922671370
+6982550821098
+6998648421035
+701322807483
+7021121511052
+7024047541492
+7035336562047
+703625211802
+707460553385
+717443557508
+7183861262081
+7224580136
+725358001628
+7268196151372
+726879851432
+729328402717
+729693580255
+7335108111884
+735959510368
+73999061457
+7414115291106
+7420316302186
+743319527140
+7434282711346
+743782748882
+7442078001954
+7459205781860
+746384780430
+7474917701681
+7477591001110
+748688779767
+7489357491390
+750509231315
+752262646569
+7545274231778
+756935472713
+75773119899
+7596347031679
+760240745940
+7611307831176
+761770012943
+768095572640
+769057528693
+7693067241746
+7708374841725
+7715236551622
+771740551965
+7742294321560
+774253715515
+7768044671602
+7805537881769
+780853689564
+7827184121584
+7834422511108
+7839907272207
+791873185719
+79273524620
+7930600301820
+799771529360
+800690662103
+8028490801282
+803912699186
+8071429301853
+808516671141
+809150989463
+809463021297
+8130145421414
+8137651592152
+8151530411104
+816385213609
+8173432111585
+818154047574
+8204731972212
+825472208216
+8265154161028
+8271096261543
+8273238091784
+8287659782004
+8291999331218
+829597230797
+831209289286
+8321943901550
+8340716381542
+8352078861913
+8355296421736
+836162575760
+8380033551134
+8395723002165
+8426873811578
+8480156031288
+850053258777
+85079674696
+851812182868
+8546449331421
+858272864447
+859396671576
+86220368890
+8630503381670
+8670488712191
+8673493271695
+8701008101487
+87295028065
+8770811321803
+87855925124
+879660412177
+880880925584
+8835127781971
+8838899291384
+884745821416
+8869958081278
+8877022262034
+8892880951517
+889383651088
+890245070341
+890760713995
+8920975221072
+893269392524
+8942762641126
+894499256478
+8964159501647
+8972269322075
+9005446791124
+903537604124
+905342080814
+906197291424
+909140861972
+909859212174
+912283431321
+917168650416
+917633755201
+920540133742
+9222362971666
+9284450212187
+9299032611000
+9304960932048
+9310234911869
+9328867362136
+933356643893
+934103743337
+9351444142162
+9369030461649
+9374941041317
+941367343773
+9427735832141
+9438629731391
+9440091252149
+944598793759
+9477868262125
+948470729329
+9486009471523
+9521897821483
+953339046689
+9581847161772
+9592090341400
+960853137659
+9612244741822
+961924059305
+962071328297
+9648702232145
+96598751677
+96613538238
+966774910883
+9681327731449
+9713075032195
+9719892221002
+9725833671828
+9735801141825
+97564726905
+9769559012176
+9781241091314
+978689246492
+9829384382122
+9840789731797
+984513497289
+9866473052003
+9869726411743
+9889355241604
+989404912009
+989516538838
+9900854291516
+9935174811726
+994325763577
+9962113761633
+998664011105
0.6.1/assets/abricate_dbs/argannot/sequences
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/assets/abricate_dbs/argannot/sequences.nhi
0.6.1/assets/abricate_dbs/argannot/sequences
Binary file 0.6.1/assets/abricate_dbs/argannot/sequences.nhi has changed
0.6.1/assets/abricate_dbs/argannot/sequences
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/assets/abricate_dbs/argannot/sequences.nhr
0.6.1/assets/abricate_dbs/argannot/sequences
Binary file 0.6.1/assets/abricate_dbs/argannot/sequences.nhr has changed
0.6.1/assets/abricate_dbs/argannot/sequences
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/assets/abricate_dbs/argannot/sequences.nin
0.6.1/assets/abricate_dbs/argannot/sequences
Binary file 0.6.1/assets/abricate_dbs/argannot/sequences.nin has changed
0.6.1/assets/abricate_dbs/argannot/sequences
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/assets/abricate_dbs/argannot/sequences.nog
0.6.1/assets/abricate_dbs/argannot/sequences
Binary file 0.6.1/assets/abricate_dbs/argannot/sequences.nog has changed
0.6.1/assets/abricate_dbs/argannot/sequences
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/assets/abricate_dbs/argannot/sequences.not
0.6.1/assets/abricate_dbs/argannot/sequences
Binary file 0.6.1/assets/abricate_dbs/argannot/sequences.not has changed
0.6.1/assets/abricate_dbs/argannot/sequences
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/assets/abricate_dbs/argannot/sequences.nsq
0.6.1/assets/abricate_dbs/argannot/sequences
Binary file 0.6.1/assets/abricate_dbs/argannot/sequences.nsq has changed
0.6.1/assets/abricate_dbs/argannot/sequences
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/assets/abricate_dbs/argannot/sequences.ntf
0.6.1/assets/abricate_dbs/argannot/sequences
Binary file 0.6.1/assets/abricate_dbs/argannot/sequences.ntf has changed
0.6.1/assets/abricate_dbs/argannot/sequences
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/assets/abricate_dbs/argannot/sequences.nto
0.6.1/assets/abricate_dbs/argannot/sequences
Binary file 0.6.1/assets/abricate_dbs/argannot/sequences.nto has changed
0.6.1/assets/abricate_dbs/megares/sequences
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/assets/abricate_dbs/megares/sequences
0.6.1/assets/abricate_dbs/megares/sequences
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/assets/abricate_dbs/megares/sequences Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,131608 @@
+>megares~~~AAC2-PRIME~~~MEG_13~~~ Drugs:Aminoglycosides:Aminoglycoside_N-acetyltransferases:AAC2-PRIME
+GTGCACACCCAGGTACACACGGCCCGCCTGGTCCACACCGCCGATCTTGACAGCGAGACC
+CGCCAGGACATCCGTCAGATGGTCACCGGCGCGTTTGCCGGTGACTTCACCGAGACCGAC
+TGGGAGCACACGCTGGGTGGGATGCACGCCCTGATCTGGCATCACGGGGCGATCATCGCG
+CATGCCGCGGTGATCCAGCGGCGACTGATCTACCGCGGCAACGCGCTGCGCTGCGGGTAC
+GTCGAAGGCGTTGCGGTGCGGGCGGACTGGCGGGGCCAACGCCTGGTGAGCGCGCTGTTG
+GACGCCGTCGAGCAGGTGATGCGCGGCGCTTACCAGCTCGGAGCGCTCAGTTCCTCGGCG
+CGGGCCCGCAGACTGTACGCCTCACGCGGCTGGCTGCCCTGGCACGGCCCGACATCGGTA
+CTGGCACCAACCGGTCCAGTCCGTACACCCGATGACGACGGAACGGTGTTCGTCCTGCCC
+ATCGACATCAGCCTGGACACCTCGGCGGAGCTGATGTGCGATTGGCGCGCGGGCGACGTC
+TGGTAA
+>megares~~~AAC2-PRIME~~~MEG_14~~~ Drugs:Aminoglycosides:Aminoglycoside_N-acetyltransferases:AAC2-PRIME
+ATGAAAGACAGATCCCATGACGACTCAATGGCCGAGGTCTGTCGGAACACCTCTGAGAAC
+CACTGGCTGAAGACCGATTATCGGACGTTGTTTCGGCTGTGCCCCGACGGTCGGATCGAG
+CGCGAGAATGATCCGGACTGCTCGCCGGGGCCGCGTTTCTGGTTGGCTGGCTGTTCGGAA
+GGCAACGTGTTCGGCGTACGTGCCGATGTGCCCGATGACATAGCACTAAAGCTCGAAGAA
+CTCGCCAGCGTCGAGCCTCCGTTCACACCCCCGGCGATACCGAAGCATCTTGAACGTTAT
+CTTTCACTGCTCGGCAGTGATGGCCCTGTTACCCACGATCTTGGTCTGATTTACGAGTTG
+CCGCACGCGCAGCAGTACCCGAGCAAGGCCCGGCTCATCGGCAGCGGTTCCGAGGAGGGC
+GAGAGTCTGATGCAGTCTTGGGCGGAGGACAGAGTACCGGAAGCTTTGTTTGAGCTTGGC
+TTCCGTGAGGTGGCGGACTTCTGGACGCCTTGGTGCGCGGCAGTTGTCGATGGTGAAGTC
+GCTTCAATCGCCTTTGCAGCGCGTCTCGCGGATGCCGGTGCCGAACTCGGGTTGGTAACG
+GCGAAGGCATTCAGAGGACAGGGGTTCGCCGCCGCTGCGACGGCTGGTTGGTCCCGGCTC
+TCCGCTCTTCGTTCCCGCACGCTGTTCTACAGCACGGACCGAGACAACATTTCATCGCAG
+CGCGTTGCCGCCCGCCTTGGTCTCCGGCTTCGTGGAGCCAGCTTGCGAATATCACGCGCC
+TGA
+>megares~~~AAC2-PRIME~~~MEG_15~~~ Drugs:Aminoglycosides:Aminoglycoside_N-acetyltransferases:AAC2-PRIME
+ATGGATACCCACCACGTACATACCGCCCGCCTGGTTCATACCGCCGATCTCGACGGCGAG
+ACTCTCCGGCGCCTCCAGCAGATGGTCACCGACGCTTTCGCCGGAGACTTCGACGAGACC
+GACTGGGAACACGCATTGGGCGGGATGCACGCCCTGATCTGGCGGCACGGCACAATCATT
+GCGCACGCCGCGGTCGTTCAGCGGCGACTATTCTACCACGGCAACGCGTTGCGTTGCGGT
+TACCTCGAAGGTGTCGCGGTACGGAAGGACTGCCGGGGCCGCGGACTTGTACATGCGCTG
+CTGGACGCTATCGAGCAAGTGATACGCGGCGCCTATCAATTCGGTGCCTTGAGTTCCTCG
+GACCGAGCCCGTCGGGTGTATATGTCGCGCGGGTGGTTACCATGGCTCGGCCCGACGTCA
+GTGCTGGCTCCTACCGGTGTGATCCGTACGCCCGATGATGACGGCTCGGTGTTTGTCCTT
+CCGGTCGGCATCAACCCGGACACCTCCTCGGGGTTGATGTGCGATTGGCGCGCAGGCAAC
+GTGTGGTAA
+>megares~~~AAC2-PRIME~~~MEG_16~~~ Drugs:Aminoglycosides:Aminoglycoside_N-acetyltransferases:AAC2-PRIME
+ATGAACCATAGGAAAGGTAACGAGCCAACCGCTGCGGCACTGATGGAATTGCATGTTCTG
+GCGATGTTTACGCATGACGGGAATATGCAAATTCGCACCATCAACGAGCCTTGGCCGGGA
+GAGGAGCTTGCCCCGAGGTTTTTCATGGGTCGAACGATAGACGGCTCTTCGATCTGCAGG
+TTTCGTCATGATGTTCCCGAAGGAATTGCCGGGCAATTGAGGGCTTTGGTTGAAGATGAG
+CCTATCGTTACTGAAGAGGTTCTGACGAGGCCTAAACATTTTGCAGCTTATATGAACCTC
+CTTCGCGCTGAGCACTATACGAGCGGACCTTGTTATCGGATACCTGATCAAACAACGCAG
+GCCAAACAGACGGTAAGGATCACACCGGGAAATATTCGCGAATATTCGCTCACCGGTTTT
+GAATGGCTGACCACGGAAATTGATTATGACCAGCCTTGTGTTGCGCTCATTCATGAGAAT
+AGGGTGGTGTCGGTTTGCCGCAGCGTCCGGATTACTGAACGAGCTCACGAAGCTGGGCTT
+GAAACGTCAGAGGAATTTCGTGGAAGAGGTTATGCGGCTGCTGTTGTTGCCGGATGGGCC
+ATAGAGGTGCAAAAAATGGGCGCGCTGGCGTTGTACAGTACTTTATGGGGAAATAGCTCT
+TCCCGGAGAGTAGCAAATAAATTAGGGTTGTCCTATTACGGAGTTAACTTCACGATCAGT
+TGA
+>megares~~~AAC2-PRIME~~~MEG_17~~~ Drugs:Aminoglycosides:Aminoglycoside_N-acetyltransferases:AAC2-PRIME
+ATGGGCATAGAATACCGCAGTCTGCATACCAGCCAATTGACACTGAGTGAAAAAGAAGCG
+CTTTACGATTTATTAATTGAAGGTTTTGAAGGCGATTTTTCGCATGACGATTTCGCGCAC
+ACTTTAGGTGGAATGCACGTCATGGCTTTTGATCAACAAAAATTGGTTGGTCATGTTGCA
+ATTATTCAACGCCATATGGCCCTAGATAATACGCCTATCTCTGTAGGGTATGTTGAAGCG
+ATGGTAGTTGAACAAAGTTATCGTCGCCAAGGTATTGGGCGGCAATTGATGCTGCAAACC
+AATAAAATTATAGCTTCGTGTTATCAATTAGGGCTGCTGTCGGCTTCAGATGATGGACAA
+AAATTGTATCATTCGGTTGGATGGCAAATCTGGAAAGGTAAGTTGTTTGAATTGAAACAA
+GGGAGCTATATCCGTTCTATTGAAGAAGAAGGCGGAGTCATGGGCTGGAAAGCGGATGGT
+GAGGTTGATTTTACCGCTTCGCTTTACTGTGATTTTCGTGGCGGTGATCAGTGGTAA
+>megares~~~AAC2-PRIME~~~MEG_18~~~ Drugs:Aminoglycosides:Aminoglycoside_N-acetyltr..CAACTCGGTAGCGCCTCGTTGCTGGCGGGGTTAACCAGCGATGTGCGCAATATCACCATT
+GCTTTTGTGCGTCTGCCGGAACTGGTGCAGGGGATCATTCTCACTATCGGTTCAGCGGCG
+TATCTGTGGATGCTGTCGGGCAAAATGTTGCTGGTAACGGCTATCTGGATGGCGATCACC
+ATCTGGGGCGGTTTTGTGCTGGTGGCGCGGGTGTACAAACATATGGCGACCCTGCGTGAA
+ACCGAAGACAAGCTGTACACGGATTTTCAAACTGTACTTGAAGGGCGCAAAGAGCTGACT
+CTGAACCGGGAACGCGCCGAGTATGTGTTTAACAACCTCTACATTCCTGATGCGCAAGAG
+TATCGCCACCATATTATTCGCGCAGACACCTTCCATCTTAGTGCCGTGAACTGGTCAAAC
+ATCATGATGCTGGGCGCAATCGGCCTGGTGTTCTGGATGGCGAACAGCCTCGGTTGGGCT
+GATACCAACGTTGCCGCGACCTATTCGTTGACGCTTTTATTCCTGCGTACGCCGCTGCTT
+TCGGCGGTTGGCGCATTGCCGACGCTGCTGACGGCGCAGGTGGCGTTTAACAAGCTGAAC
+AAATTCGCGCTCGCGCCTTTCAAAGCAGAGTTTCCGCGCCCGCAGGCGTTTCCCAACTGG
+CAAACGCTGGAGCTGCGTAACGTGACGTTTGCTTATCAGGATAACGCGTTTTCCGTTGGT
+CCGATTAATCTCACCATCAAACGTGGCGAGCTGCTGTTTCTGATTGGCGGCAACGGTAGC
+GGAAAATCGACGCTGGCGATGTTGTTGACGGGCTTGTATCAGCCACAAAGCGGCGAAATC
+TTGCTGGATGGCAAACCTGTCAGCGGCGAACAACCGGAAGATTATCGCAAACTGTTTTCG
+GCAGTGTTTACCGATGTCTGGCTGTTTGATCAACTGCTGGGGCCGGAGGGTAAACCCGCT
+AACCCGCAACTGGTTGAGAAGTGGCTGGCGCAGCTGAAAATGGCTCATAAGCTTGAGTTA
+AGCAACGGGCGTATTGTTAACCTGAAGTTATCAAAAGGGCAGAAAAAACGCGTGGCGCTG
+TTGCTGGCGCTGGCAGAAGAACGCGATATTATCCTGCTGGATGAATGGGCGGCGGATCAG
+GATCCACACTTCCGTCGTGAGTTTTATCAGGTGTTGCTGCCGCTGATGCAGGAGATGGGT
+AAAACTATTTTCGCTATCAGTCATGATGATCATTACTTTATCCACGCCGACCGCCTGCTG
+GAAATGCGCAATGGGCAACTTAGCGAGCTGACGGGCGAAGAGCGCGATGCCGCTTCGCGT
+GATGCCGTTGCCCGGACGGCATAA
+>megares~~~YRC~~~MEG_8743~~~ Drugs:betalactams:Class_C_betalactamases:YRC
+ATGATGCATAAAACCCTTTCCTGTGCGCTGCTGCTCGTCGCGTCAGGTTCCACGTTTGCC
+ACGCCTCAAACGGAAAAAAAACTCAGTGGAATTGTTGATAACGTTGTTATTCCTTTGATG
+AAAGAACAGGCCATTCCCGGCATGGCGGTGGCGGTGATCTATCAGGGCCAACCTTACTAC
+TTTACCTGGGGAATGGCTGATGTCGCAGGCAAACAGCCTGTTACGCAGCAGACGTTATTC
+GAGCTCGGCTCCGTGAGTAAAACCTTCACCGGCGTGCTGGGTGGCGATGCCATTGCTCGT
+GGGGAAATTAAACTTAGTGATCCAGTGAGTAAATACTGGCCAGCGCTTTCCGGGAAACAA
+TGGGAAGGGATTAGTTTGCTGAATTTGGCAACCTATACCGCTGGTGGCTTGCCGCTCCAG
+GTACCGGATAACATTACTGATGAGACGTCATTGCAGAATTACTATGAAACCTGGCAGCCA
+CAGTGGGCTCCGGGCACCAAGCGTTTTTATTCAAACGCCAGTATTGGGATGTTTGGCAAA
+CTGGCGGTTAAACCTTCAGGCATGAGCTTTGAGCAGGCGATGAACAAACGCGTGTTCCAG
+CCATTGAATCTCACGCATACTTGGATACATGTTCCTGAACGTGAAGAAAAACACTATGCG
+TGGGGCTATCGCGATGGGAAAGCCGTTCATGTTTCTCCGGGGATGCTGGACGCTGAAGCC
+TACGGCGTGAAATCCTCAATAAAGGATATGGCAAGCTGGGTGCGGGCTAACATGACGCCT
+TCTGAAGTAAAAGATGCCTCGCTGCAAAAGGGGATTTTGCTTGCCCAGTCGCGGTACTTG
+CAAGTGGGTGACATGTATCAGGGGTTGGGCTGGGAAATGCTGAACTGGCCGATGAAAGCA
+ACAATCGCGGTCGGCGGTAGCGATAATAAAGTCGCACTCGCGCCGCTAAGTGCGGTAGAA
+ATTAACCCGCCAGCGCCAGCATTAAATAGCTCGTGGGTACATAAAACTGGCTCAACCGGC
+GGATTTGGAAGCTACGTGGCTTTCATTCCCGAGAAGAATCTCGGCATCGTGATGCTGGCG
+AACAAAAGTTATCCTAACCCTGCGCGTGTCGAAGCAGCTTACCGCATCCTTGAAGCTTTG
+TCCGTGGAATAG
+>megares~~~ZBMA~~~MEG_7844~~~ Drugs:Glycopeptides:Bleomycin_resistance_protein:ZBMA
+ATGGCCGTATTGCTCTCGGGGGTTCCCGTTCTCGCCGCCCTCGACGTTTCCACCACGCAG
+AAGTTCTGGATCGAGGTCCTCGGCTTCACCGAGGAATTCCTCACCGAGGATTTCGGCGGC
+GTCAGCCGCGACGGGGTCGAGTTGTTCATCTGCTCCGTCGAGGACCAGGTCGTTCCCGAC
+AACACGCAGGCGTGGCTGCGGGTCCGCGACATCGACGCCCTGCACGCCGAGTGGTCCGCG
+CGTGTCTCCTCGGACTACGCCGACGCCAGTCACCCTGCCATGACCGCGATCAGGGAGGTG
+CCCTGGGGGCGGGAGTTCGGGCTGCGCGACCCCGCCGGAAACCTGGTGCACTTCAGCGAG
+TTGAGCGAGGCGGCCGAAACGACCCGGACGGTTCGTTGA
+>megares~~~ZOG~~~MEG_7860~~~ Drugs:betalactams:Class_B_betalactamases:ZOG
+ATGACCTATAAATCAACCGTATTACTTTTGTTCTTGATTACGGCTTTCTTTTCCTGTAAG
+TCACAACAACCGACCTTAACTTACAGTAGCGAGGACTTAAAAATCATCCCGCTCTCCAAA
+AACAGCTTCGTCCATATCTCTTACCTATCGACCGGAGACTTTGGAAAAGTGGCCTGTAAC
+GGACTTATCTACATAAACCAAGGCCAGGCCGTTGTTTTCGATACGCCCACCGACAACGAA
+ACTTCCGAAGAGCTCATCCATTGGATAACCGAAACTAAAAAACAACAGATCAAGGCCGTG
+GTCATCAACCACTTTCACGACGACTGCCTTGGCGGGATCGAGGCCTTTCACGAACTAAGC
+ATTCCCTCTTACGCTAGCAATACGACCATAGAACTTGCTAAAAAAGAAGGAAACCCGGTT
+CCACAAATTGGTTTTGACACCACCAACGAACTGACCATTGGGAAGCAAAAAATAATCAAC
+CGTCATTTTGGCGAGGCCCATACCAAAGACAACATTGTAAGTTACATCCCTAGCGAGCAC
+CTCCTTTTTGGCGGATGCGCCCTTAAATCGCTCAATGCCGCCAAAGGATACCTAGGCGAT
+GCGAACACCAACGAATGGGGCAACACCATCAAAAAGATAAAAGCAGCCTATCCCGACCTT
+AAAACGGCCATTCCCGGACACGGGGAATACGGAGGCTCAGAATTACTGGATTATACCATT
+TCCCTTTTTAGCACGAAACAATAA
0.6.1/assets/abricate_dbs/megares/sequences
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/assets/abricate_dbs/megares/sequences.ndb
0.6.1/assets/abricate_dbs/megares/sequences
Binary file 0.6.1/assets/abricate_dbs/megares/sequences.ndb has changed
0.6.1/assets/abricate_dbs/megares/sequences
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/assets/abricate_dbs/megares/sequences.nhd
0.6.1/assets/abricate_dbs/megares/sequences
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/assets/abricate_dbs/megares/sequences.nhd Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,7424 @@
+10003954606182
+10006091666959
+1002671740555
+1003959456237
+1004262937527
+10044182255435
+1005061345290
+10053359881184
+10053872773258
+1006068495650
+1006379924360
+10064890515797
+10082349715247
+100846304608
+10085127026603
+10087321841060
+1009510197127
+1009539413778
+10098118154932
+10104241323207
+10119864627074
+10132959846316
+1013493725998
+10138778992867
+10139686326803
+10146185653573
+1015594044116
+10157035962431
+10159871163792
+10162641045519
+10162779566490
+1016748594645
+10169929445589
+10172477666040
+10175805981724
+10195002072675
+102019332402
+10205551902007
+10205641396454
+1021580528431
+10222697616724
+10238255461597
+1024350189137
+10244055883582
+10247903765644
+1025048316823
+10254755781145
+10256636411336
+10267086124449
+10277461742357
+10278299943662
+10281564864984
+10285659951820
+10286664992003
+10288692354004
+10294000241684
+10305017607229
+10306837061399
+10310068834218
+10317920692793
+10325999994417
+10328872843488
+10329939474993
+10331022611071
+103326697392
+10336572981481
+10340547911706
+10345786371833
+10346239761403
+10351943456871
+10361204594048
+1037546096004
+103824093468
+10392990383820
+10394142812494
+10394637505026
+10395049025964
+1041821634863
+1042295827429
+10424100284972
+10425666247234
+1043790831868
+10442949315305
+10444619516381
+10450048996768
+10453925442969
+10456091644881
+1045660909572
+10460446696319
+10469522534966
+10473413831075
+1048870490345
+10489511691750
+10492666137348
+10496904223480
+10499931787131
+10503254053957
+10503998011846
+10505939622474
+10506793665621
+10517212733062
+10522855156015
+10528156682942
+1052830379303
+10528891856619
+10531563221342
+10540840751922
+1054632678510
+10548929703187
+10553943875977
+10578562661452
+10579238235485
+1058450722394
+10592153151395
+10596225514578
+10598870922360
+1060138071434
+10608754122872
+10618602366066
+10624960296585
+10625405844690
+1062786835921
+10629251256175
+10630540785033
+1063928960976
+10654849523729
+10659403274123
+10659584804322
+10663825093861
+10669563244065
+1067459157256
+10690547406096
+10701441951150
+10704219395937
+10706642055009
+1071076812881
+10714795916709
+1072330565630
+10730045563410
+10730174904451
+10732948692464
+10733196365234
+1073351482395
+10735872956192
+1073588404824
+10737372171797
+10739163074573
+10740407712815
+10751608926795
+10762971732923
+10764082452607
+10772323565110
+10772626295421
+107795252861
+10785969704068
+1078820391685
+10791753501982
+10797264072415
+10798858353537
+10814894701
+10819909406601
+1082098265961
+10826397975077
+10832027374165
+10838822575433
+10840280163790
+10840728203944
+10850293863221
+10851366222064
+1085534972726
+10857379675040
+10861041416527
+10874780976789
+10885716715
+10889298944044
+10891465654244
+1089592169423
+10896320811591
+10896523745284
+108970784092
+10906090375521
+10922041673632
+10922065892662
+10927622474023
+1094862823751
+1095248857334
+10958023572107
+10961493873675
+10968164506711
+10970404604629
+10972304076455
+10975204563864
+10975747716344
+1097869456679
+10984685581461
+10988014113071
+1101331946404
+11013917031930
+11018568416660
+11019611393342
+11021440645386
+11046466343938
+11046566624771
+1105031286108
+11062902502715
+11074363809
+11076576682138
+11091520784517
+11104909746169
+111133319486
+11121219966191
+1112186664210
+11125038746729
+1112830945249
+11132224686254
+11137273616678
+11144519311725
+11146609836960
+11148078062084
+1115202144190
+11176279365393
+11178737884246
+1118240391846
+1119290813420
+11198249722615
+11209157985893
+11209789844253
+11223483844474
+11234836344352
+11240689814995
+1124365..9252220
+8811165861315
+8817298735213
+8825540961113
+8825771912298
+8835127782603
+8837116662869
+8838899296038
+884745826459
+886461542525
+8868899732219
+8869958086019
+8877022263870
+8885010126599
+8885891182045
+8892064486368
+8892880956386
+889383654185
+8894324353078
+889493322835
+8902450701548
+8907607134525
+8918709522098
+8920975224312
+8922215366228
+8932693922129
+8935924824870
+8942728240
+8942762644001
+8943233174197
+894386763991
+8944157497049
+8944161646680
+8944992562231
+8947823351312
+8952229104868
+8961324624211
+8964159501700
+8971581062696
+898198696607
+8984626655351
+8984952825152
+8991695006725
+899759301107
+9000597901950
+9005446794259
+9027056131672
+9030229675597
+9035376041083
+903607209216
+9049531836950
+9050326765186
+9053420803347
+905982954193
+9061972911879
+9066713575829
+9068013382500
+9069180495489
+9073132025631
+9086927772091
+909140862560
+9098592125853
+9098986053926
+9116720947020
+9117438591940
+9117789911698
+9119922145571
+912283436058
+9126187423692
+9128421162385
+912903984469
+9133755912553
+9134946393762
+9171686501866
+9176337551574
+917723182798
+918223877330
+9205401333114
+9220824263665
+9222362973412
+9231564672510
+9232714762438
+923350247368
+923431546545
+924438107878
+9247642753568
+9255905495523
+9257063183540
+9257566046419
+9260600142405
+926236361707
+9267346925942
+9270539693566
+9277384521733
+9282086984146
+9284450212427
+9299032614528
+9300627905617
+9304960931594
+9310234917051
+9312023274986
+931780347863
+9319708996355
+932103881362
+9328867366668
+9333566433811
+9334512644753
+9341037431553
+934154018950
+934189584722
+93428201365
+9344346656781
+9351444146875
+9352427564793
+9357924575659
+9360877664274
+9365995642074
+9368369362380
+9369030462005
+9374941046010
+938284515151
+940097968711
+9403297032839
+9411312706617
+9413673433242
+9427735836682
+9438629731364
+9440091256743
+9445987933156
+9456245871231
+9463739964252
+9464938602329
+9469823795124
+9472218875164
+9476888335601
+9477868266727
+9477917825167
+9477998175260
+948110214606
+9484707291535
+9486009476545
+9491099373684
+9504685027193
+9510523761614
+9515629302992
+9516572525203
+9521897826506
+9523967566802
+9533390463033
+9545045731372
+9547156071502
+9553749866438
+9555003451122
+9581847165650
+9592090346269
+9595362373141
+9601416363005
+9605424894431
+9608531372900
+9611373852095
+9612244745718
+9619240591285
+9620713281278
+9631644732913
+9639937807257
+9640722387317
+9641132291040
+9646566815002
+9648702236687
+965987512946
+96613538454
+9667749103824
+9668338115372
+9675120872437
+9681327736431
+9687383584950
+9689587263651
+9695862593244
+9700893995238
+9701136257408
+9714034343587
+9718929524589
+9719892224530
+9724451265677
+9725833675819
+9725972831570
+9730647304762
+9733760691120
+9735801145808
+9736364803671
+9743969177344
+9754255914088
+975647263830
+975659871841
+9762460781405
+9765427774280
+9772499884639
+9775081934724
+9775088173894
+9775266157110
+9777747611321
+9781241095993
+9783173903492
+9783426185499
+9786892462241
+9829384386701
+9832670043672
+9833837093057
+9839267305884
+9840789735736
+984192182272
+9845134971173
+9846690145722
+985069021364
+9855652384700
+9856209982540
+9859133611569
+9865857985354
+9866473053851
+9869726412755
+9872935451748
+9876002431192
+9876433894032
+9877407507395
+9880009271144
+9881228054795
+9883568913622
+9884641511087
+9889355247381
+9893141954631
+989404917252
+9894686797416
+9895165383635
+9900486824669
+9900854296426
+9912160302388
+991718974644
+9918372516817
+9935174812814
+9935435845466
+9940110861404
+9941527832310
+9943257632209
+994474201196
+9951454432269
+9959293707067
+996128047585
+9961474111493
+9962113761651
+9965406296845
+998664014433
+9995362711043
+9998428237019
0.6.1/assets/abricate_dbs/megares/sequences
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/assets/abricate_dbs/megares/sequences.nhi
0.6.1/assets/abricate_dbs/megares/sequences
Binary file 0.6.1/assets/abricate_dbs/megares/sequences.nhi has changed
0.6.1/assets/abricate_dbs/megares/sequences
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/assets/abricate_dbs/megares/sequences.nhr
0.6.1/assets/abricate_dbs/megares/sequences
Binary file 0.6.1/assets/abricate_dbs/megares/sequences.nhr has changed
0.6.1/assets/abricate_dbs/megares/sequences
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/assets/abricate_dbs/megares/sequences.nin
0.6.1/assets/abricate_dbs/megares/sequences
Binary file 0.6.1/assets/abricate_dbs/megares/sequences.nin has changed
0.6.1/assets/abricate_dbs/megares/sequences
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/assets/abricate_dbs/megares/sequences.nog
0.6.1/assets/abricate_dbs/megares/sequences
Binary file 0.6.1/assets/abricate_dbs/megares/sequences.nog has changed
0.6.1/assets/abricate_dbs/megares/sequences
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/assets/abricate_dbs/megares/sequences.not
0.6.1/assets/abricate_dbs/megares/sequences
Binary file 0.6.1/assets/abricate_dbs/megares/sequences.not has changed
0.6.1/assets/abricate_dbs/megares/sequences
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/assets/abricate_dbs/megares/sequences.nsq
0.6.1/assets/abricate_dbs/megares/sequences
Binary file 0.6.1/assets/abricate_dbs/megares/sequences.nsq has changed
0.6.1/assets/abricate_dbs/megares/sequences
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/assets/abricate_dbs/megares/sequences.ntf
0.6.1/assets/abricate_dbs/megares/sequences
Binary file 0.6.1/assets/abricate_dbs/megares/sequences.ntf has changed
0.6.1/assets/abricate_dbs/megares/sequences
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/assets/abricate_dbs/megares/sequences.nto
0.6.1/assets/abricate_dbs/megares/sequences
Binary file 0.6.1/assets/abricate_dbs/megares/sequences.nto has changed
0.6.1/assets/abricate_dbs/ncbiamrplus/sequences
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/assets/abricate_dbs/ncbiamrplus/sequences
0.6.1/assets/abricate_dbs/ncbiamrplus/sequences
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/assets/abricate_dbs/ncbiamrplus/sequences Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,141037 @@
+>ncbi~~~BcII~~~NG_056058.1~~~CARBAPENEM BcII family subclass B1 metallo-beta-lactamase
+atgaaaaagaatacgttgttaaaagtaggattatgtgtaagtttactaggaacaactcaa
+tttgttagcacgatttcttctgtacaagcatcacaaaaggtagagcaaatagtaatcaaa
+aatgagacgggaaccatttcaatatctcagttaaacaagaatgtatgggttcatacggag
+ttaggttattttaatggagaagcagttccttcgaacggtctagttcttaatacttctaaa
+gggctagtacttgttgattcttcttgggataacaaattaacgaaggaactaatagaaatg
+gtagaaaagaaatttcagaagcgcgtaacagatgtcattattacacatgcgcacgctgat
+cgaattggcggaataacagcgttgaaagaaagaggcattaaagcgcatagtacagcatta
+accgcagaactagcaaagaaaagtggatatgaagagccacttggagatttacaaacagtt
+acgaatttgaagtttggcaatacaaaagtagaaacgttctatccagggaaaggacataca
+gaagataatattgttgtttggttgccacaatatcaaattttagctggaggctgtttagta
+aaatctgcggaagctaaaaatttaggaaatgttgcggatgcgtacgtaaatgaatggtcc
+acatcgattgagaatatgctgaagcgatatagaaatataaatttggtagtacctggtcac
+gggaaagtaggagacaagggattacttttacatacattggatttattaaaataa
+>ncbi~~~BcII~~~NG_047221.1~~~CARBAPENEM BcII family subclass B1 metallo-beta-lactamase
+atgaaaaatacattattaaaattaggggtatgtgttagtttactaggaataactccattt
+gttagtacaatttcttctgtacaagcagaacgaaaggtagagcataaagtaataaaaaat
+gagacaggaactatttcaatttctcagttaaacaaaaatgtttgggttcatacggagtta
+ggttgttttaacggagaagcagttccttcgaacggtttaatccttaatacttctaaagga
+ttagtacttgtcgattcttcttgggatgataagttaacgaaggaattaatagagatggca
+gaaaagaaatttaagaagagtgtaacggatgttattattacacatgcacacgctgatcgg
+attggtggaataaaaacgttgaaagaaagaggcattaaagcgcatagtacaacgttaact
+gcggaactagcaaagaaaaatggatatgaagaaccacttggagacttacaagcaattacg
+aaattgaagtttggaaatatgaaagtagaaacgttttatccagggaaaggacatacagaa
+gataatatcgtcgtatggttaccacaatacaacatgttagttggaggctgtttagtgaag
+tctgcgtccgcgaaagatttaggaaatattactgatgcttatgtaaatgaatggtctaca
+tcgattgagaatgtgctgaagcgatatgaaaatataaattttgtagtacctggtcatgga
+gaagtaggggacaaaggattacttttacatacattggatttgttaaaataa
+>ncbi~~~BcII~~~NG_047220.1~~~CARBAPENEM BcII family subclass B1 metallo-beta-lactamase
+atgaaaaatacattattaaaattaggggtatgtgttagtttactaggaataactccattt
+gttagtacaatttcttctgtacaagcagaacgaaaggtagagcataaagtaataaaaaat
+gagacaggaactatttcaatttctcagttaaacaaaaatgtttgggttcatacggagtta
+ggttattttaacggagaagcagttccttcgaacggtttaatccttaatacttctaaagga
+ttagtacttgtcgattcttcttgggatgataagttaacgaaggaattaatagagatggca
+gaaaagaaatttaagaagagtgtaacggatgttattattacacatgcacacgctgatcgg
+attggtggaataaaaacgttgaaagaaagaggcattaaagcgcatagtacaacgttaact
+gcggaactagcaaagaaaaatggatatgaagaaccacttggagacttacaagcaattacg
+aaattgaagtttggaaatatgaaagtagaaacgttttatccagggaaaggacatacagaa
+gataatatcgtcgtatggttaccacaatacaacatgttagttggaggctgtttagtgaag
+tctgcgtccgcgaaagatttaggaaatattactgatgcttatgtaaatgaatggtctaca
+tcgattgagaatgtgctgaagcgatatgaaaatataaattttgtagtacctggtcatgga
+gaagtaggggacaaaggattacttttacatacattggatttgttaaaataa
+>ncbi~~~BcII~~~NG_047222.1~~~CARBAPENEM BcII family subclass B1 metallo-beta-lactamase
+atgaaaaatacattattaaaattaggggtatgtgttagtttactaggaataactccattt
+gttagtacaatttcttctgtacaagcagaacgaacggtagagcataaagtaataaaaaat
+gagacaggaactatttcaatttctcagttaaacaaaaatgtttgggttcatacggagtta
+ggttattttaacggagaagcagttccttcgaacggtttaatccttaatacttctaaagga
+ttagtacttgtcgattcttcttgggatgataagttaacgaaggaattaatagacatggca
+gaaaagaaatttaagaaccgcgtaacggatgttattattacacatgcacacgctgatcgg
+attggtggaataaaaacgttgaaagaaagaggcattaaaacgcatagtacaacgttaact
+gcggaactagcaaagaaaaatggatatgaagaaccacttggagacttacaagcaattacg
+aaattgaagtttggaaatatgaaagtagaaacgttttatccagggaaaggacatacagaa
+gataatatcgtcgtatggttaccacaatacaacatgttagttggaggctgtttagtgaag
+tctgcgtccgcgaaagatttaggaaatattactgatgcttatgtaaatgaatggtctaca
+tcgattgagaatgtgctgaagcgatatgaaaatataaattttgtagtacctggtcatgga
+gaagtaggggacaaaggattacttttacatacattggatttgttaaaataa
+>ncbi~~~BcII~~~NG_055630.1~~~CARBAPENEM BcII family subclass B1 metallo-beta-lactamase
+atgaaaaatacattattaaaattaggggtatgtgttagtttactaggaataactccattt
+gttagtacaatttcttctgtacaagcagaacgaacggtagagcataaagtaataaaaaat
+gagacaggaactatttcgatttctcagttaaacaaaaatgtatgggttcatacggagtta
+ggttattttagcggagaagcagttccttcg..cgatagctggaagcaaggaaagatcaatagtgaagcctac
+tggggaacgatcaagtttattgcccatcggctattagatgtaaccaatcaccttgccaag
+gcagggatagtacataacgatatcaaacccggtaatgtggtatttgaccgcgctagcgga
+gagcccgttgtcattgatctaggattacactctcgttcaggggaacaacctaaggggttt
+acagaatccttcaaagcgccggagcttggagtaggaaacctaggcgcatcagaaaagagc
+gatgtttttctcgtagtttcaacccttctacatggtatcgaaggttttgagaaagatccg
+gagataaagcctaatcaaggactgagattcattacctcagaaccagcgcacgtaatggat
+gagaatggttacccaatccatcgacctggtatagctggagtcgagacagcctatacacgc
+ttcatcacagacatccttggcgtttccgctgactcaagacctgattccaacgaagccaga
+ctccacgagttcttgagcgacggaactattgacgaggagtcggccaagcagatcctaaaa
+gatactctaaccggagaaatgagcccattatctactgatgtaaggcggataacacccaag
+aagcttcgggagctctctgatttgcttaggacgcatttgagtagtgcagcaactaagcaa
+ttggatatgggggtggttttgtcggatcttgataccatgttggtgacactcgacaaggcc
+gaacgcgaggggggagtagacaaggatcagttgaagagttttaacagtttgattctgaag
+acttacagcgtgattgaagactatgtcaaaggcagagaaggggataccaagagttccagt
+gcggaagtatccccctatcatcgcagtaactttatgctatcgatcgtcgaaccttcactg
+cagaggatccaaaagcatctggaccagacacactctttttctgatatcggttcactagtg
+cgcgcacataagcacctggaaacgcttttagaggtcttagtcaccttgtcaccgcaaggg
+cagcccgtgtcctctgaaacctacagcttcctgaatcgattagctgaggctaaggtcacc
+ttgtcgcagcaattggatactctccagcagcagcaggagagtgcgaaagcgcaactatct
+attctgattaatcgttcaggttcttgggccgatgttgctcgtcagtccctgcagcgtttt
+gacagtacccggcctgtagtgaaattcggcactgagcagtataccgcaattcaccgtcag
+atgatggcggcccatgcagccattacgctacaggaggtatcggagtttactgatgatatg
+cgaaactttacagcggactctattccactactgattcgacttggacgaagcagtttaata
+gatgagcatttggttgaacagagagagaagttgcgagagctgacgaccatcgccgagcga
+ctgaaccggttggagcgggaatggatgtga
+>ncbi~~~yopT~~~CP009845.1~~~ T3SS effector cysteine protease YopT
+atggacagtattcacggacactaccatattcaactatcgaattattctgccggtgaaaac
+cttcaatcagctacaccccccgaaggggtgattggcgcacaccgagtgaaagtggaaaca
+gcactgtcacactcaaaccggcagaaaaagttatcagccaccataaaacataaccagtca
+agccgttctatgctggatagaaagttgaccagcgacggcaaagttaaccaacgcagcagc
+tttaccttcagtatgattatgtatcgcatgatacattttgtactcagtactcgtgtgccc
+gcggtgagagagtctgttgcaaattacggaggtaacatcaatttcaagtttgctcagacc
+aaaggggcttttcttcatcaaataataaaacattcagacaccgctaggggggcctgtgag
+gctttatgtgcacattggatcaggagccatgcacagggccaaagcttatttgaccagctc
+tatgttggcgggcgtaaggggaaattccagatcgatacactttactcaattaaacagttg
+caaatagatggttgtaaagcagacgttgatcaagatgaggtaacactagattggctcaag
+aaaaatggcatatcagaacgtatgattgaacggcattgcttactgcctacagttgatgtt
+actggtacgacgggatcggaagggccggatcaattattaaacgctatccttgatactaat
+gggataggttacggttataaaaaaatatctctctctggccaaatgtcaggccacaccata
+gcggcgtatgtcaacgaaaatagtggtgttactttcttcgatcccaatttcggtgaattc
+cacttttctgataaggaaaagttcagcaaatggtttactaactcattctgggaaaattct
+atgtatcattatcctttgggggtggggcagagttttagcgtttttacatttgactccaag
+gaggtttaa
+>ncbi~~~ystA~~~U09235.1~~~ ST-I family heat-stable enterotoxin YstA
+atgaaaaagatagtttttgttcttgtgttaatgctgtcttcatttggagcattcggccaa
+gaaacagtttcagggcagttcagtgatgcattatcgacaccaataaccgctgaggtatac
+aagcaagcttgtgatcctccgtcgccaccagccgaagtcagtagtgattgggattgctgt
+gatgtatgttgcaatcccgcgtgtgctggctgctag
+>ncbi~~~ystB~~~D88145.1~~~ ST-I family heat-stable enterotoxin YstB
+atgaaaaagataattttggctctggtattaatgctgttttcattttgtacattaggccaa
+gagacggcttcaatgcatcttgatgatacattatcggcaccaatagccgctgagataaac
+agaaaagcgtgcgatactcagaccccatcgccttcagaagaaaatgatgattggtgttgt
+gaggtatgttgcaatcctgcctgtgcgggttgctag
+>ncbi~~~ystC~~~D63578.1~~~ ST-I family heat-stable enterotoxin YstC
+atgaaaaaaatcgtttttgttctgacgttaatgctgttttcattcggaacgttaggtcag
+gagacggcttcagggcaggttggtgatgtatcatcgtcaacaatagctactgaggtaagt
+gaggctgagtgcggtactcagtcagcaacaacccaaggcgaaaatgattgggattggtgc
+tgtgagttatgttgcaatcctgcttgttttggttgctaa
+>ncbi~~~zbmA~~~NG_048567.1~~~ZORBAMYCIN zorbamycin binding protein ZbmA
+atggccgtattgctctcgggggttcccgttctcgccgccctcgacgtttccaccacgcag
+aagttctggatcgaggtcctcggcttcaccgaggaattcctcaccgaggatttcggcggc
+gtcagccgcgacggggtcgagttgttcatctgctccgtcgaggaccaggtcgttcccgac
+aacacgcaggcgtggctgcgggtccgcgacatcgacgccctgcacgccgagtggtccgcg
+cgtgtctcctcggactacgccgacgccagtcaccctgccatgaccgcgatcagggaggtg
+ccctgggggcgggagttcgggctgcgcgaccccgccggaaacctggtgcacttcagcgag
+ttgagcgaggcggccgaaacgacccggacggttcgttga
0.6.1/assets/abricate_dbs/ncbiamrplus/sequences
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/assets/abricate_dbs/ncbiamrplus/sequences.ndb
0.6.1/assets/abricate_dbs/ncbiamrplus/sequences
Binary file 0.6.1/assets/abricate_dbs/ncbiamrplus/sequences.ndb has changed
0.6.1/assets/abricate_dbs/ncbiamrplus/sequences
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/assets/abricate_dbs/ncbiamrplus/sequences.nhd
0.6.1/assets/abricate_dbs/ncbiamrplus/sequences
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/assets/abricate_dbs/ncbiamrplus/sequences.nhd Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,7762 @@
+10007377871148
+10024791346966
+10026717401027
+10042629371276
+10044182254292
+1005061344140
+10051236051208
+10052254196856
+1005335988744
+10060684951078
+1006379923137
+10064354794491
+10064890516773
+10072652755329
+1007457296156
+10082349714027
+1008283694125
+100846303203
+10087321846944
+10094399104857
+1009510197594
+10098118153799
+10104241322424
+10126934836357
+10129162527045
+10132959847108
+1013493725636
+10139686327289
+10155728726976
+101559404483
+10157035965537
+10159871162671
+10162641044396
+10162779564950
+10165223336610
+1016748593265
+10169929446630
+10172477664672
+10181151656170
+10185407186447
+1019500207845
+102019335535
+10205551906056
+10205641394915
+1021580528938
+10222697617392
+10238255465275
+1024350189244
+10247903766666
+1025048316408
+10256636412274
+10259544546210
+1025977632867
+10262959782353
+1027225520767
+10277461741796
+10278299946414
+10280857102803
+1028148069761
+10281564862805
+10283122612855
+10285659951521
+10286664991549
+10287388226968
+10288692353638
+10294000245388
+10296532541213
+10305017607685
+10310068833447
+10325999993509
+10327105722162
+10327165356598
+10328872846308
+10329939473921
+10331022616921
+10345786371577
+10361204593618
+1037546094734
+10376664792842
+10392990382717
+10394142811903
+10395049024760
+1041821633712
+1042295827907
+10424100283876
+10425137556950
+10435415346121
+1043790831585
+10440099015349
+10442949314169
+10444619514976
+104531986555
+10453925442155
+10455513946107
+10456091643736
+10456609091021
+10460446697086
+10469522532736
+1047341383671
+10489511695428
+10490501526226
+10491359257061
+10492666135187
+10496904226295
+10503254053445
+10503831593924
+10503998011506
+10505939621912
+10506793666645
+10517212732169
+10522855154804
+10526367677442
+10528156686014
+10531563223979
+10540840751630
+1054632678972
+10548929702398
+10553943874750
+10554285531217
+10579238234355
+1058421942774
+1058450725609
+10585615005241
+10587593882792
+10588213742656
+10596225513191
+10598870921895
+10608754122040
+10609558312250
+10610905666251
+10618602364847
+10625405843315
+1062786834656
+10630540783893
+1063928960633
+10640556092927
+10654849522603
+10659403273352
+10659584803226
+10659656417416
+10669563243646
+1067066163830
+1067459157708
+10686935252940
+10690547404698
+10699135146883
+1070144195730
+10704219394715
+10706642053967
+1071076812064
+10714795917221
+10723305651009
+10725701735856
+10730045566278
+10733196364091
+1073351482856
+10735588265348
+1073588404406
+10737372171631
+10739163073099
+10740407715993
+10751608927273
+10755993646067
+10762971732098
+10764082455754
+10772323564110
+10772626294277
+1077952528226
+10785969703371
+1078820395401
+10797264075565
+10798858356330
+10814893322
+1082098265449
+10826397974487
+10832027373522
+10832627802332
+10838822574290
+10840280162669
+10851366221745
+10861041414989
+10868888075642
+10874780977269
+10885717396
+10889298943558
+10891465653578
+1089592169932
+10896320811424
+10896523744143
+1089707840253
+10901855661970
+10906090374399
+10906773033901
+1091854015561
+10922041672575
+10922065895805
+10927622473554
+1094862822629
+1095248855189
+10954941644552
+10955181706981
+10956959594449
+10958023571726
+10959377222961
+10968164507223
+10970404603231
+10972304074916
+10975747717165
+1098412462630
+10996973754880
+11013917031486
+11018568417177
+11021440644231
+11024893186920
+11039536167055
+11042298026044
+11046466342727
+11062902505930
+11070609611962
+11074363626
+11076576681685
+11091520783035
+11092953386118
+1109516700553
+11101245462767
+1112186664175
+11125038747389
+1112830944254
+11146609835096
+11148078061..08
+8838711436068
+8838899294855
+884745824899
+8861700205813
+8864615421001
+8868899731656
+8869958084710
+8885891181733
+8892064485003
+8892880955031
+889383653402
+8894324352238
+889493322462
+8896583795052
+8902450701406
+8918709521753
+8927689552433
+8932693921827
+8935924823722
+8942728325
+8942762643672
+8943233173489
+894386763703
+8944157497528
+8947823351341
+8952229103720
+8961324623659
+8964159505410
+8970383785255
+8971581065913
+8972269325341
+8981986961061
+8982451442768
+8984952824511
+8991248936506
+8991695007222
+8994878452431
+899759301286
+9004818357137
+9005446793670
+901110056382
+9023041017466
+9028464112045
+903537604670
+903607209119
+90457316576
+9048743616064
+9049531837457
+9050326764517
+9053420802523
+9055263292650
+905982953488
+9061972911589
+9069180494359
+9073132026661
+9086927771742
+9088202106900
+909140865809
+9098592126826
+9098986056543
+9101054565824
+9105447305831
+9113056585656
+9113569364784
+9117438591633
+9117789915408
+912283434794
+9128421165605
+912903984899
+9129105864473
+9171686501581
+9174815456075
+9176337551383
+9177056131812
+917723181976
+9179981935340
+918033706536
+9181601973956
+918223875172
+9205401332275
+9219084217759
+9220824266416
+9222362976183
+9225210757430
+9231564671932
+9232714765598
+923350247846
+9234315461057
+924438107448
+9246860566469
+9255905494401
+9257063186324
+9260600145529
+926236365418
+9267346924720
+9282086983469
+9296797247413
+9299032613054
+9300627906648
+9310234917573
+9312023272828
+931780347380
+9319708994986
+9331744597010
+9333566432688
+9334512643241
+9341037431402
+934154018385
+934189583086
+93428201155
+9344346657266
+9357924576737
+9360877663407
+9365995641866
+9368369365519
+9369030465487
+9374941044789
+938284515240
+9400979681105
+9402058026053
+9403297032027
+9407166902658
+9413673432468
+9427735837192
+9438629734864
+9440091257394
+9445987932360
+9456245874
+9469823794071
+9472218874170
+9476888336636
+9477868267395
+9477917824035
+9477998173994
+948110213189
+948231800836
+9484707291393
+9486009475043
+9491099376425
+9509687372046
+9510523765294
+9515629302227
+9516572524502
+9518299337009
+9521897824967
+9523967567287
+9533390462164
+9540248642771
+9545045735226
+9553749864886
+9561965754468
+9562794016446
+9577194206080
+9581847166682
+9586088552116
+9592090344881
+9593910952968
+9595362372374
+9601416362232
+9605424893311
+9608531372075
+9611373851767
+9619240591346
+9621433927404
+9631644732087
+9639937807709
+9640722387730
+964113229642
+9646566813939
+9648702237198
+965987512130
+96613538882
+9667749102677
+9668338114251
+9675120875597
+9681327734930
+9686949877041
+9687383583828
+9688428694437
+9689587266421
+9695862592469
+9700893994124
+9701136255197
+9713261322445
+9718929523171
+9719892223056
+9721754095482
+9724451266721
+9725833676794
+9728546087025
+9730647303329
+973376069679
+9735801146788
+9743969175175
+9754255913374
+975647262700
+975659871411
+9765427773560
+9769559015572
+9772499883259
+9775081933150
+9775088176536
+9775266157576
+9777747611647
+9781241094786
+9781657096046
+9783173906297
+9783426184371
+9786892461671
+9788520681191
+9820347357449
+9829384387388
+9833837092208
+9835007981454
+9839267304648
+9845134971296
+985069021177
+9855652383321
+9859805381153
+9866473056527
+9869726415963
+9872935455434
+9876433893710
+988000927700
+988464151706
+9889355245149
+9893141953234
+989404917705
+9895165382591
+9895632776464
+989674818157
+9900486823286
+9900854295028
+9904797001799
+9910815281201
+9912160305563
+9916124834481
+9916647557150
+991718973264
+9917276445247
+9918372517297
+992998133824
+9935174815992
+9935435844331
+9940908322848
+994474201346
+9953230816835
+9961280471020
+9962113765360
+9965406297331
+996646001605
+998664013552
+999536271649
0.6.1/assets/abricate_dbs/ncbiamrplus/sequences
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/assets/abricate_dbs/ncbiamrplus/sequences.nhi
0.6.1/assets/abricate_dbs/ncbiamrplus/sequences
Binary file 0.6.1/assets/abricate_dbs/ncbiamrplus/sequences.nhi has changed
0.6.1/assets/abricate_dbs/ncbiamrplus/sequences
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/assets/abricate_dbs/ncbiamrplus/sequences.nhr
0.6.1/assets/abricate_dbs/ncbiamrplus/sequences
Binary file 0.6.1/assets/abricate_dbs/ncbiamrplus/sequences.nhr has changed
0.6.1/assets/abricate_dbs/ncbiamrplus/sequences
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/assets/abricate_dbs/ncbiamrplus/sequences.nin
0.6.1/assets/abricate_dbs/ncbiamrplus/sequences
Binary file 0.6.1/assets/abricate_dbs/ncbiamrplus/sequences.nin has changed
0.6.1/assets/abricate_dbs/ncbiamrplus/sequences
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/assets/abricate_dbs/ncbiamrplus/sequences.nog
0.6.1/assets/abricate_dbs/ncbiamrplus/sequences
Binary file 0.6.1/assets/abricate_dbs/ncbiamrplus/sequences.nog has changed
0.6.1/assets/abricate_dbs/ncbiamrplus/sequences
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/assets/abricate_dbs/ncbiamrplus/sequences.not
0.6.1/assets/abricate_dbs/ncbiamrplus/sequences
Binary file 0.6.1/assets/abricate_dbs/ncbiamrplus/sequences.not has changed
0.6.1/assets/abricate_dbs/ncbiamrplus/sequences
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/assets/abricate_dbs/ncbiamrplus/sequences.nsq
0.6.1/assets/abricate_dbs/ncbiamrplus/sequences
Binary file 0.6.1/assets/abricate_dbs/ncbiamrplus/sequences.nsq has changed
0.6.1/assets/abricate_dbs/ncbiamrplus/sequences
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/assets/abricate_dbs/ncbiamrplus/sequences.ntf
0.6.1/assets/abricate_dbs/ncbiamrplus/sequences
Binary file 0.6.1/assets/abricate_dbs/ncbiamrplus/sequences.ntf has changed
0.6.1/assets/abricate_dbs/ncbiamrplus/sequences
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/assets/abricate_dbs/ncbiamrplus/sequences.nto
0.6.1/assets/abricate_dbs/ncbiamrplus/sequences
Binary file 0.6.1/assets/abricate_dbs/ncbiamrplus/sequences.nto has changed
0.6.1/assets/abricate_dbs/resfinder/sequences
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/assets/abricate_dbs/resfinder/sequences
0.6.1/assets/abricate_dbs/resfinder/sequences
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/assets/abricate_dbs/resfinder/sequences Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,53104 @@
+>resfinder~~~ARR-2_1~~~HQ141279~~~Rifampicin ARR-2
+ATGGTAAAAGATTGGATTCCCATCTCTCATGATAATTACAAGCAGGTGCAAGGACCGTTC
+TATCATGGAACCAAAGCCAATTTGGCGATTGGTGACTTGCTAACCACAGGGTTCATCTCT
+CATTTCGAGGACGGTCGTATTCTTAAGCACATCTACTTTTCAGCCTTGATGGAGCCAGCA
+GTTTGGGGAGCTGAACTTGCTATGTCACTGTCTGGCCTCGAGGGTCGCGGCTACATATAC
+ATAGTTGAGCCAACAGGACCGTTCGAAGACGATCCGAATCTTACGAACAAAAAATTTCCC
+GGTAATCCAACACAGTCCTATAGAACCTGCGAACCCTTGAGAATTGTTGGCGTTGTTGAA
+GACTGGGAGGGGCATCCTGTTGAATTAATAAGGGGAATGTTGGATTCGTTAGAGGACTTA
+AAGCGCCGTGGTTTACACGTCATTGAAGACTAG
+>resfinder~~~ARR-3_1~~~JF806499~~~Rifampicin ARR-3
+ATGGTAAAAGATTGGATTCCCATCTCTCATGATAATTACAAGCAGGTGCAAGGACCGTTC
+TATCATGGAACCAAAGCCAATTTGGCGATTGGTGACTTGCTAACCACAGGGTTCATCTCT
+CATTTCGAGGACGGTCGTATTCTTAAGCACATCTACTTTTCAGCCTTGATGGAGCCAGCA
+GTTTGGGGAGCTGAACTTGCTATGTCACTGTCTGGCCTCGAGGGTCGCGGCTACATATAC
+ATAGTTGAGCCAACAGGACCGTTCGAAGACGATCCGAATCTTACGAACAAAAGATTTCCC
+GGTAATCCAACACAGTCCTATAGAACCTGCGAACCCTTGAGAATTGTTGGCGTTGTTGAA
+GACTGGGAGGGGCATCCTGTTGAATTAATAAGGGGAATGTTGGATTCGTTGGAGGACTTA
+AAGCGCCGTGGTTTACACGTCATTGAAGACTAG
+>resfinder~~~ARR-3_4~~~FM207631~~~Rifampicin ARR-3
+ATGTTATGGAGCAGCAACGATGTTACGCAGCAGGGCAGTCGCCCTAAAACAAAGTTATGC
+AGCCAAATCCCAACAATTAAGGGTCTTAAAATGGTAAAAGATTGGATTCCCATCTCTCAT
+GATAATTACAAGCAGGTGCAAGGACCGTTCTATCATGGAACCAAAGCCAATTTGGCGATT
+GGTGACTTGCTAACCACAGGGTTCATCTTTCATTTCGAGGACGGTCGTATTCTTAAGCAC
+ATCTACTTTTCAGCCTTGATGGAGCCAGCAGTTTGGGGAGCTGAACTTGCTATGTCACTG
+TCTGGCCTCGAGGGTCGCGGCTACATATACATAGTTGAGCCAACAGGACCGTTCGAAGAC
+GATCCGAATCTTACGAACAAAAAATTTCCCGGTAATCCAACACAGTCCTATAGAACCTGC
+GAACCCTTGAGAATTGTTGGCGTTGTTGAAGACTGGGAGGGGCATCCTGTTGAATTAATA
+AGGGGAATGTTGGATTCGTTAGAGGACTTAAAGCGCCGTGGTTTACACGTCATTGAAGAC
+TAG
+>resfinder~~~ARR-4_1~~~EF660562~~~Rifampicin ARR-4
+ATGACGAATGACTGGATTCCCACTTCGCATGACAACTGCTCGCAAGTAGCGGGGCCGTTC
+TATCACGGCACCAAAGCCAAACTCACGGTTGGTGACTTGCTTTCCCCAGGACACCCGTCT
+CACTTTGAGCAAGGTCGCAAGCTCAAACACATCTACTTTGCCGCCCTGATGGAACCAGCC
+ATCTGGGGAGCGGAGCTTGCGATGTCGCTGTCAAGCCTAGAGGGGCGCGGCCACATCTAC
+ATCGTTGAACCGCTCGGCCCATTTGAGGACGACCCGAACCTTACAAACAAGAAATTCCCG
+GGAAATCCAACCAAGTCCTATCGCACCACTGAGCCGCTGCGGATTGTTGGGATCGTAGAA
+GACTGGCAAGGCCACTCACCGGAGGTGTTACAGGGCATGTTGGCGTCTCTGGAGGATCTT
+CAGCGTCGTGGCCTCGCCATCATTGAGGACTAA
+>resfinder~~~ARR-5_1~~~EF660563~~~Rifampicin ARR-5
+ATGACGGTAGACTGGATCCCCATTTCGCACGACAACTACCATCAAGTGCGTGGCCCGTTT
+TATCACGGAACAAAAGCCGAACTCGCCATTGGCGACTTAATTTCAACCGGATTTATTTCT
+CACTTTGAGCGGGACAGAGCACTAAAGCATGTGTACTTTTCCGCGCTGATGGAGCCAGCA
+ATCTGGGGGGCCGAGCTCGCTGTAGCACTCTCTGGCTCTGACGGGCCAGGCCATATTTAC
+ATCATTGAGCCAACCGGCCCGTTTGAAGACGACCCCAATCTCACAAACAAACGATTCCCT
+GGCAATCCAACACAGTCCTATCGCACATGCCACCCACTTAAAATTGTTGGCATACTGCGG
+GAGTGGGAGCGCCATTCTCCTGAAGCATTGAAGACCATGCTAGATTCTCTGGCAGACCTC
+AAGCGACGCGGCTTGGCCATCATTGAAGAATGA
+>resfinder~~~ARR-6_1~~~FM955585~~~Rifampicin ARR-6
+ATGTCGAGTGACTGGACTCCCATCTCACATGAGAATTGCCAGCAGGTGCGTGGGCCGTTC
+TATCACGGCACCAAAGCCCATCTATCGATTGGCGACTTGATAACAACTGGGCATCTCTCC
+CACTTTGAAGATGGACGCGCTCTTAAACACGTCTACTTTTCAGCTTTGATGGAGCCTGCC
+ATTTGGGGGGCGGAACTTGCAATGTCGTTGTCACGCCTAGATGGCCGTGGCTACATATAC
+ATCGTCGAACCAACTGGACCGTTTGAGGACGACCCGAATCTTACGAACAAAAGATTTCCT
+GGAAATCCAACAAAGTCCTATCGCACGTGCGATCCGCTACGAATTGTCGGGTCAGTCGAA
+GACTGGCAAGGGCATCCCGCTGATGTGCTGCAACAGATGTTGGAGTCTTTAGAGGACCTA
+GAGCGCCGTGGTCTTGCCATCATCGAGGATTAG
+>resfinder~~~ARR-6_2~~~FM897214~~~Rifampicin ARR-6
+ATGTCGAGTGACTGGACTCCCATCTCACATGAGAATTGCCAGCAGGTGCGTGGGCCGTTC
+TATCACGGCACCAAAGCCCATCTATCGATTGGCGACTTGATAACAACTGGGCATCTCTCC
+CACTTTGAAGATGGACGCGCTCTTAAACACGTCTACTTTTCAGCTTTGATGGAGCCTGCC
+ATTTGGGGGGCGGAACTTGCAATGTCGTTGTCACGCCTAGATGGCCGTGGCTACATATAC
+ATCGTCGAACCAACTGGACCGTTTGAGGACGACCCGAATCTTACGAACAAAAGATTTCCT
+GGAAATCCAACAAAGTCCTATCGCACGTGCGATCCGCTACGAATTGTCGGGTCAGTCGAA
+GACTGGCAAGGGCATCCCGCTGATGTGCTGCAACAGATGTTGGAGTCTTTAGAGGACCTA
+AAGCGCCGTGGTCTTGCCATCATCGAGGATTAG
+>resfinder~~~ARR-6_3~~~JF922883~~~Rifampicin ARR-6
+ATGGTAAAAGATTGGATTCCCATCTCTCATGATAATTACAAGCAGGTGCAAGGACCG..AGAAGGTTATAGAGTTT
+CTTGGAAGCTATAAAGCGTTTAGAGAAAGATCTCAAGAGACAGAGCGTGACTATATGAAG
+GAAGAACTTCTTAAAATTGAGATCAAACTCACTCAAATGATTAGTGAAATGAATGACGAG
+GCATCAAATGAATTAGAAAAAGAATTCCAAATGTTGATTCATGAACGTAATCAGTTAAGA
+AATCAAGTAAACAATTAG
+>resfinder~~~vga(E)_1~~~FR772051~~~Clindamycin;Dalfopristin;Lincomycin;Pristinamycin_IIA;Tiamulin;Virginiamycin_M vga(E)
+ATGTTATTATTTGAAGGTACATCATTGAAAAAACACATACAAGACAGATTATTATTTGAT
+ATAGATTTAATACAAGTACATGAACATCAGCGAATAGGATTAGTAGGTAGGAATGGAACG
+GGGAAAACAAGTCTATTAAAAATTATTACAGGTGAAGAACTAGTTGATGGAGGGAATGTT
+AATCATTTTACCTCTGTAAAATTAGTACCACAATTTAAAGAAACAAGATCGGAGAAAAGT
+GGTGGAGAAATAACGCAACAATATTTGCAATTAGCATTTAATGAAAAGCCAGGATTATTA
+ATTTTAGATGAACCAACGACTCATTTAGATACACAAAGAATTGATTGGTTAGAAAAGAAA
+TTAGCAAACTATCAAGGAGCATTTGTTGTCGTATCACATGATCGGACATTTCTAAATAAT
+GTGTGTACTGAAATATGGGAAATAGAAGATGGTAGTCTAAACGCGTTTAAAGGGGATTAT
+AATGCTTATGCGGAACAAAAGGAATTAATAAAAACACAGCAGCAGATTGCATTTGAAAAG
+TACGAACGAGAGAAAAAGCAATTAGAAAAAGCAATACGACAAAAAGAGGAAAGAGCACAG
+CGAGCAACAAAGAAACCTAAAAATCTGAGTTCTTCAGAGGCAAGAATAACAGGAGCTAAA
+ACCCATTATGCCAATATACAGAAAAAGTTGAGGGGTTCTGCAAAAGCATTAGAAACAAGG
+TTGGAACAACTGGATAGGATTGACAAGGTGAAAGAACTACCTGAAATTAAGATGGATATA
+TTAAATAAAGAAAGTCTAACAAACCAGTCTGTGTTACGCGCTGAAAACATTAAGGGAGAG
+GTTGACGGACGTAAGCTTTGGAATCCCTTTAGTTTATATTTATATGGCGGCGATAAAGTT
+GCTATCATTGGGAAAAATGGCACGGGTAAAACAACCTTACTTAAAAAAATAGTTGAGCGA
+GATGAAAGAATAGCAATCCCAGAAAAGGTGAGGATAGGTTATTTTTCCCAACACCTCACA
+ATTCTCGATGATGATAAAACAATCATAGAAAATATACAATTGACCTCTAGTCAGGATGAA
+ACATTAATTAGAACAGTTTTAGCAAGAATGCATTTTTGGGATGAAGATGTCTATAAAAAG
+GTCGGCATATTAAGTGGTGGTGAAAAAGTAAAAGTAGCACTAGCTAAACTATTCTTAAGT
+GACGTGAATATGCTGGTGTTAGATGAACCTACAAATTTTTTAGATATTGAATCTTTAGAA
+GCGCTAGAAACATTAATGAAAAGTTATCATGGAACGATTCTATTTGTTACTCACGACCGA
+ACGTTAGTAACAAATATAGCTACAAAAATAATTGATATAAAAGATGGTAAGATAACAGTA
+TTCGATGGATCATACGAAGCATATGAAGAGTGGTTAGAGAATCAAACAAAGTCCAACAAT
+GATGATCAACTTTTACTAATCGAAACTAAAATATCTGACGTTCTGGGTAGGTTGAGTTTG
+GAGCCTTCACGAGAGTTAGAAGATGAATTTCAAAGATTATTGAAAGAAAAGAAAGAACTG
+ACTAAAAAACTATAA
+>resfinder~~~vgb(A)_1~~~M20129~~~Pristinamycin_IA;Quinupristin;Virginiamycin_S vgb(A)
+ATGGAATTTAAATTACAAGAATTAAATCTTACTAACCAAGATACAGGACCATATGGTATA
+ACCGTTTCAGATAAGGGGAAAGTTTGGATTACACAACATAAAGCAAATATGATAAGTTGC
+ATCAATTTAGATGGAAAAATTACAGAGTACCCACTACCGACACCAGATGCAAAAGTCATG
+TGTTTAACTATATCCTCAGATGGGGAAGTTTGGTTTACTGAGAATGCAGCAAACAAAATA
+GGGAGGATTACAAAAAAAGGGATTATTAAGGAATATACATTGCCTAACCCAGATTCAGCA
+CCCTACGGTATTACAGAAGGACCAAATGGAGATATATGGTTTACAGAAATGAATGGCAAC
+CGTATTGGACGTATTACGGACGACGGTAAAATTCGTGAATACGAGCTGCCTAATAAAGGA
+TCTTACCCTTCTTTTATCACTTTGGGTTCTGATAATGCCCTGTGGTTCACAGAAAATCAA
+AATAATGCTATTGGTAGAATTACAGAAAGTGGGGATATTACAGAGTTTAAAATTCCTACA
+CCTGCATCAGGACCAGTTGGTATTACAAAGGGGAACGACGATGCTTTATGGTTTGTGGAA
+ATTATCGGTAATAAGATAGGGCGAATAACTCCTCTGGGGGAAATTACCGAATTCAAAATT
+CCAACGCCAAACGCTCGACCTCATGCAATTACTGCTGGAGCAGGAATTGATTTATGGTTT
+ACTGAATGGGGGGCTAATAAAATAGGAAGGCTGACAAGCAATAATATAATTGAGGAATAC
+CCAATTCAAATCAAAAGTGCTGAACCACATGGCATTTGTTTCGATGGTGAAACAATTTGG
+TTTGCAATGGAGTGTGACAAGATAGGCAAATTAACTCTCATTAAGGATAATATGGAGTGA
+>resfinder~~~vgb(B)_1~~~AF015628~~~Pristinamycin_IA;Quinupristin;Virginiamycin_S vgb(B)
+ATGAATTTTTATTTAGAGGAGTTTAACTTGTCTATTCCCGATTCAGGTCCATACGGTATA
+ACTTCATCAGAAGACGGAAAGGTATGGTTCACACAACATAAGGCAAACAAAATCAGCAGT
+CTAGATCAGAGTGGTAGGATAAAAGAATTCGAAGTTCCTACCCCTGATGCTAAAGTGATG
+TGTTTAATTGTATCTTCACTTGGAGACATATGGTTTACAGAGAATGGTGCAAATAAAATC
+GGAAAGCTCTCAAAAAAAGGTGGCTTTACAGAATATCCATTGCCACAGCCGGATTCTGGT
+CCTTACGGAATAACGGAAGGTCTAAATGGCGATATATGGTTTACCCAATTGAATGGAGAT
+CGTATAGGAAAGTTGACAGCTGATGGGACTATTTATGAATATGATTTGCCAAATAAGGGA
+TCTTATCCTGCTTTTATTACTTTAGGTTCGGATAACGCACTTTGGTTCACGGAGAACCAA
+AATAATTCTATTGGAAGGATTACAAATACAGGGAAATTAGAAGAATATCCTCTACCAACA
+AATGCAGCGGCTCCAGTGGGTATCACTAGTGGTAACGATGGTGCACTCTGGTTTGTCGAA
+ATTATGGGCAACAAAATAGGTCGAATCACTACAACTGGTGAGATTAGCGAATATGATATT
+CCAACTCCAAACGCACGTCCACACGCTATAACCGCGGGGAAAAATAGCGAAATATGGTTT
+ACTGAATGGGGGGCAAATCAAATCGGCAGAATTACAAACGACAAAACAATTCAAGAATAT
+CAACTTCAAACAGAAAATGCGGAACCTCATGGTATTACCTTTGGAAAAGATGGATCCGTA
+TGGTTTGCATTAAAATGTAAAATTGGGAAGCTGAATTTGAACGAATGA
0.6.1/assets/abricate_dbs/resfinder/sequences
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/assets/abricate_dbs/resfinder/sequences.ndb
0.6.1/assets/abricate_dbs/resfinder/sequences
Binary file 0.6.1/assets/abricate_dbs/resfinder/sequences.ndb has changed
0.6.1/assets/abricate_dbs/resfinder/sequences
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/assets/abricate_dbs/resfinder/sequences.nhd
0.6.1/assets/abricate_dbs/resfinder/sequences
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/assets/abricate_dbs/resfinder/sequences.nhd Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,3146 @@
+10014145332347
+1005335988305
+1005387277998
+1006379921302
+10064890512867
+100846301370
+10087321842903
+101198646259
+10132959842949
+1013877899820
+10157035962340
+10159871161071
+10162779561923
+1016748591435
+10172477661697
+102019332336
+10205551902588
+10205641391889
+10222697613101
+10238255462278
+10247903762768
+1025475578257
+10278299942706
+1028565995467
+10306837062190
+10325999991597
+10328872842671
+103326697316
+10336572982237
+1034054791409
+1034578637496
+10346239762147
+10351943453050
+1037546091762
+10392990381108
+1039414281761
+104379083503
+10444619511959
+1045392544862
+10460446692930
+1047341383243
+1050399801463
+1050593962770
+1051721273870
+10522855151795
+105263676719
+10528156682585
+1052830379126
+1054084075548
+10553943871770
+10578562662169
+1058450722415
+10592153152145
+10596225511358
+1060138072161
+10602691173113
+10618602361837
+10625405841484
+1062786831689
+10630540781640
+10654849521051
+10659403271521
+10659584801394
+10690547401719
+1070144195300
+10706642051657
+107107681829
+10730045562659
+10730174901114
+1073351482318
+10739163071264
+10740407712582
+10751608923024
+10764082452483
+10785969701541
+1078820392301
+10797264072363
+10798858352689
+10814891491
+10840280161069
+10840728202762
+1085136622646
+10861041411965
+10874780973022
+1095802357629
+10970404601399
+10972304071890
+10984685582160
+1098801411921
+1101391703434
+11018568412965
+11046566621630
+1105031281728
+11062902502538
+11074363216
+1107657668600
+11091520781199
+11125038743098
+11146609832116
+1114807806644
+11209789841547
+11223483841147
+11234836341111
+1125648704775
+11283362871347
+1128742178773
+11303747962650
+11307634473139
+11308145251273
+11309531362579
+11335869752743
+11341523642365
+11355392991240
+11435185242138
+11449342251288
+1146942861429
+11475988461869
+1148749107833
+11491703792327
+11516561711803
+11519261922015
+11533982002353
+11544027922714
+11547493631179
+11566395541616
+11570302141652
+1159447139346
+1159763236348
+1164169781310
+1165127001808
+116710899252
+11687841671679
+1170176407708
+1170319745888
+11722306711318
+11757020772570
+11757955442245
+11780672221269
+11790183501604
+11801699272478
+11806030663030
+11808110512763
+11811585652249
+11834089253085
+11840457002076
+1188271561975
+1190547411593
+11910169922920
+1192142346823
+11926854811126
+11936637192466
+1200267219959
+12018808671683
+12040016812038
+12048277021537
+1208141231309
+1208251394736
+12082745842557
+1208920735913
+12112580202975
+12150237842157
+12176749982136
+12197031102759
+12201602812503
+1221101078976
+122147271815
+12227449662985
+12233866992508
+12241002751622
+12272373931121
+12273427451225
+12311559161065
+12336278761665
+1239942361532
+12400141821052
+124064206927
+1240982761591
+12410132982539
+12429987291324
+12435406631759
+12440181852830
+12446243361513
+12458928031329
+1247482991164
+12476052171856
+1248544967218
+12486701542925
+12490656492513
+12501154871978
+125091492065
+12554053292942
+12577576581084
+12586814262765
+12592491322690
+1259564077791
+12601885412423
+12614027662450
+12627241173037
+12630086712177
+12650417071676
+12658766392742
+12670061941892
+12687351791748
+1269005351518
+12713284772207
+1274786318821
+12754755152932
+127628878688
+1277281358882
+12779731452697
+12789122601557
+12798879091660
+1280536221867
+12822491622769
+1286018237272
+128611474138
+1287204938340
+1287740043073
+12882228171441
+1291072943077
+12921106712430
+12938639121163
+129583222609
+12981608763145
+12992621861930
+1303022768804
+1303108131054
+13038036202566
+1305675849250
+13072135601802
+13075404411127
+13088605951754
+13..65551417
+735959510419
+736160771830
+738210942883
+7388395822220
+73999061911
+740443234140
+7414115291612
+7420316302351
+742123417632
+743319527278
+7437827481074
+7442078002498
+7447899012954
+746384780513
+7466912661710
+7474917702623
+7477591001605
+748050616103
+748688779989
+7489357491851
+750509231354
+752248682870
+752262646743
+7523986711451
+753992520639
+7556256572549
+756935472902
+757731191091
+7579511151617
+7596347032621
+7597893141545
+7602407451146
+7611307831642
+7617700121148
+768095572815
+7686982842107
+769057528869
+7693067242558
+7699841722989
+7708969492841
+7715236552099
+7717405511180
+773447594270
+7742294322036
+774253715677
+7768044672077
+7771255522197
+7805537882879
+780739589915
+780853689727
+7827184122060
+7834422511603
+783989212904
+7839907272425
+7877257492946
+7913743391510
+791873185901
+79273524673
+7930600302850
+7934143642787
+7935723622172
+7947540681316
+7967006201113
+7971347001471
+7979236852129
+800690662196
+801703704954
+8028490801734
+8033258351572
+805188622357
+805764831529
+8065110681292
+808516671282
+8089884412115
+809150989561
+809463021750
+8099043492856
+8105834092709
+812737976608
+8129208221283
+8130145421870
+813826225621
+8151530411600
+8173432112061
+818154047737
+819283622793
+8201401961438
+82136903941
+8234641281282
+825427274611
+8265154161248
+8271096262020
+8273238092803
+82825685554
+831222902882
+8321943902026
+8327205311129
+8339007793123
+8340716382019
+836136086550
+836162575963
+836609249173
+83951577197
+8395723003071
+8426873812054
+8480156031740
+8483484042413
+8486404562923
+850053258996
+8501668473036
+8502534161807
+850796746188
+8518121821061
+8530750091143
+854386227582
+8546449331886
+858272864531
+858599727553
+859396671739
+8614602981385
+8618218301284
+862203681083
+8630503382613
+86625174956
+8670488712396
+8701008101943
+8704003483057
+8707896611407
+872950280150
+8732472601380
+873751960212
+8770811322811
+87855925185
+880880925748
+882554096277
+8835127782530
+8838899291845
+884745821872
+886889973565
+8869958081741
+8877022262745
+888589118636
+8892064481979
+8892880951990
+889383651568
+890245070387
+8907607131213
+891870952654
+893269392686
+8944161642972
+8964159502308
+8991695002995
+903537604242
+906197291507
+9066713571682
+908692777643
+909140862531
+9098592122898
+91167209438
+911743859552
+9117789912306
+912283431785
+9128421162410
+9134946392730
+917168650499
+917633755364
+918223872102
+920540133947
+9222362972615
+9260600142341
+9284450212356
+9299032611218
+9304960932280
+9319708991962
+9328867362969
+9333566431086
+9334512641410
+934103743383
+934189581251
+9344346653016
+9357924572832
+9360877661573
+936599564725
+9368369362380
+9369030462321
+9374941041780
+941367343993
+9427735832974
+9438629731852
+9440091253100
+944598793971
+948110211356
+948470729374
+9486009472000
+9491099372713
+9504685023116
+951562930925
+9521897821940
+953339046865
+9545045732233
+9547156072148
+9553749861860
+955500345251
+9581847162776
+9592090341858
+959536237975
+9605424891480
+960853137835
+961137385666
+961924059345
+962071328337
+9639937803128
+9648702232979
+96598751855
+96613538322
+9667749101075
+9681327731904
+9713075032400
+9718929521337
+9719892221220
+9724451262815
+9725833672884
+9730647301498
+973376069247
+9735801142878
+9743969172105
+9754255911544
+975647261099
+9762460782142
+9769559012392
+9772499881428
+9775081931315
+9781241091777
+978689246579
+979402122
+983383709908
+9855652381490
+9869726412555
+9876002437
+988000927264
+988464151266
+9889355242079
+9893141951402
+989404913120
+9895165381035
+9900486821455
+9900854291988
+991718971434
+9935174812580
+9940110862236
+994152783674
+99592937057
+9961474112121
+9962113762282
+998664011601
+9993443423028
+99984282337
0.6.1/assets/abricate_dbs/resfinder/sequences
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/assets/abricate_dbs/resfinder/sequences.nhi
0.6.1/assets/abricate_dbs/resfinder/sequences
Binary file 0.6.1/assets/abricate_dbs/resfinder/sequences.nhi has changed
0.6.1/assets/abricate_dbs/resfinder/sequences
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/assets/abricate_dbs/resfinder/sequences.nhr
0.6.1/assets/abricate_dbs/resfinder/sequences
Binary file 0.6.1/assets/abricate_dbs/resfinder/sequences.nhr has changed
0.6.1/assets/abricate_dbs/resfinder/sequences
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/assets/abricate_dbs/resfinder/sequences.nin
0.6.1/assets/abricate_dbs/resfinder/sequences
Binary file 0.6.1/assets/abricate_dbs/resfinder/sequences.nin has changed
0.6.1/assets/abricate_dbs/resfinder/sequences
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/assets/abricate_dbs/resfinder/sequences.nog
0.6.1/assets/abricate_dbs/resfinder/sequences
Binary file 0.6.1/assets/abricate_dbs/resfinder/sequences.nog has changed
0.6.1/assets/abricate_dbs/resfinder/sequences
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/assets/abricate_dbs/resfinder/sequences.not
0.6.1/assets/abricate_dbs/resfinder/sequences
Binary file 0.6.1/assets/abricate_dbs/resfinder/sequences.not has changed
0.6.1/assets/abricate_dbs/resfinder/sequences
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/assets/abricate_dbs/resfinder/sequences.nsq
0.6.1/assets/abricate_dbs/resfinder/sequences
Binary file 0.6.1/assets/abricate_dbs/resfinder/sequences.nsq has changed
0.6.1/assets/abricate_dbs/resfinder/sequences
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/assets/abricate_dbs/resfinder/sequences.ntf
0.6.1/assets/abricate_dbs/resfinder/sequences
Binary file 0.6.1/assets/abricate_dbs/resfinder/sequences.ntf has changed
0.6.1/assets/abricate_dbs/resfinder/sequences
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/assets/abricate_dbs/resfinder/sequences.nto
0.6.1/assets/abricate_dbs/resfinder/sequences
Binary file 0.6.1/assets/abricate_dbs/resfinder/sequences.nto has changed
0.6.1/assets/adaptors.fa
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/assets/adaptors.fa
0.6.1/assets/adaptors.fa
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/assets/adaptors.fa Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,1194 @@
+>gnl|uv|NGB00360.1 Illumina PCR Primer
+AATGATACGGCGACCACCGAGATCTACACTCTTTCCCTACACGACGCTCTTCCGATCT
+>gnl|uv|NGB00362.1 Illumina Paired End PCR Primer 2.0
+CAAGCAGAAGACGGCATACGAGATCGGTCTCGGCATTCCTGCTGAACCGCTCTTCCGATCT
+>gnl|uv|NGB00363.1 Illumina Multiplexing PCR Primer 2.0
+GTGACTGGAGTTCAGACGTGTGCTCTTCCGATCT
+>gnl|uv|NGB00364.1 Illumina Multiplexing PCR Primer Index 1
+CAAGCAGAAGACGGCATACGAGATCGTGATGTGACTGGAGTTC
+>gnl|uv|NGB00365.1 Illumina Multiplexing PCR Primer Index 2
+CAAGCAGAAGACGGCATACGAGATACATCGGTGACTGGAGTTC
+>gnl|uv|NGB00366.1 Illumina Multiplexing PCR Primer Index 3
+CAAGCAGAAGACGGCATACGAGATGCCTAAGTGACTGGAGTTC
+>gnl|uv|NGB00367.1 Illumina Multiplexing PCR Primer Index 4
+CAAGCAGAAGACGGCATACGAGATTGGTCAGTGACTGGAGTTC
+>gnl|uv|NGB00368.1 Illumina Multiplexing PCR Primer Index 5
+CAAGCAGAAGACGGCATACGAGATCACTGTGTGACTGGAGTTC
+>gnl|uv|NGB00369.1 Illumina Multiplexing PCR Primer Index 6
+CAAGCAGAAGACGGCATACGAGATATTGGCGTGACTGGAGTTC
+>gnl|uv|NGB00370.1 Illumina Multiplexing PCR Primer Index 7
+CAAGCAGAAGACGGCATACGAGATGATCTGGTGACTGGAGTTC
+>gnl|uv|NGB00371.1 Illumina Multiplexing PCR Primer Index 8
+CAAGCAGAAGACGGCATACGAGATTCAAGTGTGACTGGAGTTC
+>gnl|uv|NGB00372.1 Illumina Multiplexing PCR Primer Index 9
+CAAGCAGAAGACGGCATACGAGATCTGATCGTGACTGGAGTTC
+>gnl|uv|NGB00373.1 Illumina Multiplexing PCR Primer Index 10
+CAAGCAGAAGACGGCATACGAGATAAGCTAGTGACTGGAGTTC
+>gnl|uv|NGB00374.1 Illumina Multiplexing PCR Primer Index 11
+CAAGCAGAAGACGGCATACGAGATGTAGCCGTGACTGGAGTTC
+>gnl|uv|NGB00375.1 Illumina Multiplexing PCR Primer Index 12
+CAAGCAGAAGACGGCATACGAGATTACAAGGTGACTGGAGTTC
+>gnl|uv|NGB00376.1 Illumina Gex PCR Primer 2
+AATGATACGGCGACCACCGACAGGTTCAGAGTTCTACAGTCCGA
+>gnl|uv|NGB00377.1 Illumina DpnII Gex Sequencing Primer
+CGACAGGTTCAGAGTTCTACAGTCCGACGATC
+>gnl|uv|NGB00378.1 Illumina NlaIII Gex Sequencing Primer
+CCGACAGGTTCAGAGTTCTACAGTCCGACATG
+>gnl|uv|NGB00379.1 Illumina 3' RNA Adapter
+TCGTATGCCGTCTTCTGCTTGTT
+>gnl|uv|NGB00380.1 Illumina Small RNA 3' Adapter
+AATCTCGTATGCCGTCTTCTGCTTGC
+>gnl|uv|NGB00385.1 454 FLX linker
+GTTGGAACCGAAAGGGTTTGAATTCAAACCCTTTCGGTTCCAAC
+>gnl|uv|NGB00414.1 454 Life Sciences GS FLX Titanium Primer A-key
+CGTATCGCCTCCCTCGCGCCATCAG
+>gnl|uv|NGB00415.1 454 Life Sciences GS FLX Titanium Primer B-key
+CTATGCGCCTTGCCAGCCCGCTCAG
+>gnl|uv|NGB00416.1 454 Life Sciences GS FLX Titanium MID Adaptor B
+CCTATCCCCTGTGTGCCTTGGCAGTCTCAG
+>gnl|uv|NGB00417.1 454 Life Sciences GS FLX Titanium MID-1 Adaptor A
+CCATCTCATCCCTGCGTGTCTCCGACTCAGACGAGTGCGT
+>gnl|uv|NGB00418.1 454 Life Sciences GS FLX Titanium MID-2 Adaptor A
+CCATCTCATCCCTGCGTGTCTCCGACTCAGACGCTCGACA
+>gnl|uv|NGB00419.1 454 Life Sciences GS FLX Titanium MID-3 Adaptor A
+CCATCTCATCCCTGCGTGTCTCCGACTCAGAGACGCACTC
+>gnl|uv|NGB00420.1 454 Life Sciences GS FLX Titanium MID-4 Adaptor A
+CCATCTCATCCCTGCGTGTCTCCGACTCAGAGCACTGTAG
+>gnl|uv|NGB00421.1 454 Life Sciences GS FLX Titanium MID-5 Adaptor A
+CCATCTCATCCCTGCGTGTCTCCGACTCAGATCAGACACG
+>gnl|uv|NGB00422.1 454 Life Sciences GS FLX Titanium MID-6 Adaptor A
+CCATCTCATCCCTGCGTGTCTCCGACTCAGATATCGCGAG
+>gnl|uv|NGB00423.1 454 Life Sciences GS FLX Titanium MID-7 Adaptor A
+CCATCTCATCCCTGCGTGTCTCCGACTCAGCGTGTCTCTA
+>gnl|uv|NGB00424.1 454 Life Sciences GS FLX Titanium MID-8 Adaptor A
+CCATCTCATCCCTGCGTGTCTCCGACTCAGCTCGCGTGTC
+>gnl|uv|NGB00425.1 454 Life Sciences GS FLX Titanium MID-10 Adaptor A
+CCATCTCATCCCTGCGTGTCTCCGACTCAGTCTCTATGCG
+>gnl|uv|NGB00426.1 454 Life Sciences GS FLX Titanium MID-11 Adaptor A
+CCATCTCATCCCTGCGTGTCTCCGACTCAGTGATACGTCT
+>gnl|uv|NGB00427.1 454 Life Sciences GS FLX Titanium MID-13 Adaptor A
+CCATCTCATCCCTGCGTGTCTCCGACTCAGCATAGTAGTG
+>gnl|uv|NGB00428.1 454 Life Sciences GS FLX Titanium MID-14 Adaptor A
+CCATCTCATCCCTGCGTGTCTCCGACTCAGCGAGAGATAC
+>gnl|uv|NGB00429.1 454 Life Sciences GS FLX Titanium MID-15 Adaptor A
+CCATCTCATCCCTGCGTGTCTCCGACTCAGATACGACGTA
+>gnl|uv|NGB00430.1 454 Life Scienc..CTCGTATGCCGTCTTCTGCTTG
+>gnl|uv|NGB01069.1 Rubicon Genomics ThruPLEX DNA-seq single-index iPCRtagT41
+AGATCGGAAGAGCACACGTCTGAACTCCAGTCACTCCAGTCGATCTCGTATGCCGTCTTCTGCTTG
+>gnl|uv|NGB01070.1 Rubicon Genomics ThruPLEX DNA-seq single-index iPCRtagT42
+AGATCGGAAGAGCACACGTCTGAACTCCAGTCACTGTATGCGATCTCGTATGCCGTCTTCTGCTTG
+>gnl|uv|NGB01071.1 Rubicon Genomics ThruPLEX DNA-seq single-index iPCRtagT43
+AGATCGGAAGAGCACACGTCTGAACTCCAGTCACTCATTGAGATCTCGTATGCCGTCTTCTGCTTG
+>gnl|uv|NGB01072.1 Rubicon Genomics ThruPLEX DNA-seq single-index iPCRtagT44
+AGATCGGAAGAGCACACGTCTGAACTCCAGTCACTGGCTCAGATCTCGTATGCCGTCTTCTGCTTG
+>gnl|uv|NGB01073.1 Rubicon Genomics ThruPLEX DNA-seq single-index iPCRtagT45
+AGATCGGAAGAGCACACGTCTGAACTCCAGTCACTATGCCAGATCTCGTATGCCGTCTTCTGCTTG
+>gnl|uv|NGB01074.1 Rubicon Genomics ThruPLEX DNA-seq single-index iPCRtagT46
+AGATCGGAAGAGCACACGTCTGAACTCCAGTCACTCAGATTCATCTCGTATGCCGTCTTCTGCTTG
+>gnl|uv|NGB01075.1 Rubicon Genomics ThruPLEX DNA-seq single-index iPCRtagT47
+AGATCGGAAGAGCACACGTCTGAACTCCAGTCACTACTAGTCATCTCGTATGCCGTCTTCTGCTTG
+>gnl|uv|NGB01076.1 Rubicon Genomics ThruPLEX DNA-seq single-index iPCRtagT48
+AGATCGGAAGAGCACACGTCTGAACTCCAGTCACTTCAGCTCATCTCGTATGCCGTCTTCTGCTTG
+>gnl|uv|NGB01077.1 Rubicon Genomics ThruPLEX DNA-seq dual-index D701
+AATGATACGGCGACCACCGAGATCTACACATTACTCGACACTCTTTCCCTACACGACGCTCTTCCGATCT
+>gnl|uv|NGB01078.1 Rubicon Genomics ThruPLEX DNA-seq dual-index D702
+AATGATACGGCGACCACCGAGATCTACACTCCGGAGAACACTCTTTCCCTACACGACGCTCTTCCGATCT
+>gnl|uv|NGB01079.1 Rubicon Genomics ThruPLEX DNA-seq dual-index D703
+AATGATACGGCGACCACCGAGATCTACACCGCTCATTACACTCTTTCCCTACACGACGCTCTTCCGATCT
+>gnl|uv|NGB01080.1 Rubicon Genomics ThruPLEX DNA-seq dual-index D704
+AATGATACGGCGACCACCGAGATCTACACGAGATTCCACACTCTTTCCCTACACGACGCTCTTCCGATCT
+>gnl|uv|NGB01081.1 Rubicon Genomics ThruPLEX DNA-seq dual-index D705
+AATGATACGGCGACCACCGAGATCTACACATTCAGAAACACTCTTTCCCTACACGACGCTCTTCCGATCT
+>gnl|uv|NGB01082.1 Rubicon Genomics ThruPLEX DNA-seq dual-index D706
+AATGATACGGCGACCACCGAGATCTACACGAATTCGTACACTCTTTCCCTACACGACGCTCTTCCGATCT
+>gnl|uv|NGB01083.1 Rubicon Genomics ThruPLEX DNA-seq dual-index D707
+AATGATACGGCGACCACCGAGATCTACACCTGAAGCTACACTCTTTCCCTACACGACGCTCTTCCGATCT
+>gnl|uv|NGB01084.1 Rubicon Genomics ThruPLEX DNA-seq dual-index D708
+AATGATACGGCGACCACCGAGATCTACACTAATGCGCACACTCTTTCCCTACACGACGCTCTTCCGATCT
+>gnl|uv|NGB01085.1 Rubicon Genomics ThruPLEX DNA-seq dual-index D709
+AATGATACGGCGACCACCGAGATCTACACCGGCTATGACACTCTTTCCCTACACGACGCTCTTCCGATCT
+>gnl|uv|NGB01086.1 Rubicon Genomics ThruPLEX DNA-seq dual-index D710
+AATGATACGGCGACCACCGAGATCTACACTCCGCGAAACACTCTTTCCCTACACGACGCTCTTCCGATCT
+>gnl|uv|NGB01087.1 Rubicon Genomics ThruPLEX DNA-seq dual-index D711
+AATGATACGGCGACCACCGAGATCTACACTCTCGCGCACACTCTTTCCCTACACGACGCTCTTCCGATCT
+>gnl|uv|NGB01088.1 Rubicon Genomics ThruPLEX DNA-seq dual-index D712
+AATGATACGGCGACCACCGAGATCTACACAGCGATAGACACTCTTTCCCTACACGACGCTCTTCCGATCT
+>gnl|uv|NGB01089.1 Rubicon Genomics ThruPLEX DNA-seq dual-index D501
+AGATCGGAAGAGCACACGTCTGAACTCCAGTCACTATAGCCTATCTCGTATGCCGTCTTCTGCTTG
+>gnl|uv|NGB01090.1 Rubicon Genomics ThruPLEX DNA-seq dual-index D502
+AGATCGGAAGAGCACACGTCTGAACTCCAGTCACATAGAGGCATCTCGTATGCCGTCTTCTGCTTG
+>gnl|uv|NGB01091.1 Rubicon Genomics ThruPLEX DNA-seq dual-index D503
+AGATCGGAAGAGCACACGTCTGAACTCCAGTCACCCTATCCTATCTCGTATGCCGTCTTCTGCTTG
+>gnl|uv|NGB01092.1 Rubicon Genomics ThruPLEX DNA-seq dual-index D504
+AGATCGGAAGAGCACACGTCTGAACTCCAGTCACGGCTCTGAATCTCGTATGCCGTCTTCTGCTTG
+>gnl|uv|NGB01093.1 Rubicon Genomics ThruPLEX DNA-seq dual-index D505
+AGATCGGAAGAGCACACGTCTGAACTCCAGTCACAGGCGAAGATCTCGTATGCCGTCTTCTGCTTG
+>gnl|uv|NGB01094.1 Rubicon Genomics ThruPLEX DNA-seq dual-index D506
+AGATCGGAAGAGCACACGTCTGAACTCCAGTCACTAATCTTAATCTCGTATGCCGTCTTCTGCTTG
+>gnl|uv|NGB01095.1 Rubicon Genomics ThruPLEX DNA-seq dual-index D507
+AGATCGGAAGAGCACACGTCTGAACTCCAGTCACCAGGACGTATCTCGTATGCCGTCTTCTGCTTG
+>gnl|uv|NGB01096.1 Rubicon Genomics ThruPLEX DNA-seq dual-index D508
+AGATCGGAAGAGCACACGTCTGAACTCCAGTCACGTACTGACATCTCGTATGCCGTCTTCTGCTTG
0.6.1/assets/dummy_file.txt
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/assets/dummy_file.txt
0.6.1/assets/dummy_file.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/assets/dummy_file.txt Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,1 @@
+DuMmY
0.6.1/assets/dummy_file2.txt
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/assets/dummy_file2.txt
0.6.1/assets/dummy_file2.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/assets/dummy_file2.txt Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,1 @@
+DuMmY
0.6.1/bin/check_samplesheet.py
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/bin/check_samplesheet.py
0.6.1/bin/check_samplesheet.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/bin/check_samplesheet.py Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,185 @@
+#!/usr/bin/env python3
+
+import os
+import sys
+import errno
+import argparse
+
+
+def parse_args(args=None):
+    Description = "Reformat samplesheet file and check its contents."
+    Epilog = "Example usage: python check_samplesheet.py <FILE_IN> <FILE_OUT>"
+
+    parser = argparse.ArgumentParser(description=Description, epilog=Epilog)
+    parser.add_argument("FILE_IN", help="Input samplesheet file.")
+    parser.add_argument("FILE_OUT", help="Output file.")
+    return parser.parse_args(args)
+
+
+def make_dir(path):
+    if len(path) > 0:
+        try:
+            os.makedirs(path)
+        except OSError as exception:
+            if exception.errno != errno.EEXIST:
+                raise exception
+
+
+def print_error(error, context="Line", context_str=""):
+    error_str = f"ERROR: Please check samplesheet -> {error}"
+    if context != "" and context_str != "":
+        error_str = f"ERROR: Please check samplesheet -> {error}\n{context.strip()}: '{context_str.strip()}'"
+    print(error_str)
+    sys.exit(1)
+
+
+def check_samplesheet(file_in, file_out):
+    """
+    This function checks that the samplesheet follows the following structure:
+
+    sample,fq1,fq2,strandedness
+    SAMPLE_PE,SAMPLE_PE_RUN1_1.fastq.gz,SAMPLE_PE_RUN1_2.fastq.gz,forward
+    SAMPLE_PE,SAMPLE_PE_RUN2_1.fastq.gz,SAMPLE_PE_RUN2_2.fastq.gz,forward
+    SAMPLE_SE,SAMPLE_SE_RUN1_1.fastq,,forward
+    SAMPLE_SE,SAMPLE_SE_RUN1_2.fastq.gz,,forward
+
+    For an example see:
+    https://github.com/nf-core/test-datasets/blob/rnaseq/samplesheet/v3.1/samplesheet_test.csv
+    """
+
+    sample_mapping_dict = {}
+    with open(file_in, "r", encoding='utf-8-sig') as fin:
+
+        ## Check header
+        MIN_COLS = 3
+        HEADER = ["sample", "fq1", "fq2", "strandedness"]
+        header = [x.strip('"') for x in fin.readline().strip().split(",")]
+        if header[: len(HEADER)] != HEADER:
+            print(
+                f"ERROR: Please check samplesheet header -> {','.join(header)} != {','.join(HEADER)}"
+            )
+            sys.exit(1)
+
+        ## Check sample entries
+        for line in fin:
+            if line.strip():
+                lspl = [x.strip().strip('"') for x in line.strip().split(",")]
+
+                ## Check valid number of columns per row
+                if len(lspl) < len(HEADER):
+                    print_error(
+                        f"Invalid number of columns (minimum = {len(HEADER)})!",
+                        "Line",
+                        line,
+                    )
+
+                num_cols = len([x for x in lspl if x])
+                if num_cols < MIN_COLS:
+                    print_error(
+                        f"Invalid number of populated columns (minimum = {MIN_COLS})!",
+                        "Line",
+                        line,
+                    )
+
+                ## Check sample name entries
+                sample, fq1, fq2, strandedness = lspl[: len(HEADER)]
+                if sample.find(" ") != -1:
+                    print(
+                        f"WARNING: Spaces have been replaced by underscores for sample: {sample}"
+                    )
+                    sample = sample.replace(" ", "_")
+                if not sample:
+                    print_error("Sample entry has not been specified!", "Line", line)
+
+                ## Check FastQ file extension
+                for fastq in [fq1, fq2]:
+                    if fastq:
+                        if fastq.find(" ") != -1:
+                            print_error("FastQ file contains spaces!", "Line", line)
+                        # if not fastq.endswith(".fastq.gz") and not fastq.endswith(".fq.gz"):
+                        #     print_error(
+                        #         "FastQ file does not have extension '.fastq.gz' or '.fq.gz'!",
+                        #         "Line",
+                        #         line,
+                        #     )
+
+                ## Check strandedness
+                strandednesses = ["unstranded", "forward", "reverse"]
+                if strandedness:
+                    if strandedness not in strandednesses:
+                        print_error(
+                            f"Strandedness must be one of '{', '.join(strandednesses)}'!",
+                            "Line",
+                            line,
+                        )
+                else:
+                    print_error(
+                        f"Strandedness has not been specified! Must be one of {', '.join(strandednesses)}.",
+                        "Line",
+                        line,
+                    )
+
+                ## Auto-detect paired-end/single-end
+                sample_info = []  ## [single_end, fq1, fq2, strandedness]
+                if sample and fq1 and fq2:  ## Paired-end short reads
+                    sample_info = ["0", fq1, fq2, strandedness]
+                elif sample and fq1 and not fq2:  ## Single-end short reads
+                    sample_info = ["1", fq1, fq2, strandedness]
+                else:
+                    print_error("Invalid combination of columns provided!", "Line", line)
+
+                ## Create sample mapping dictionary = {sample: [[ single_end, fq1, fq2, strandedness ]]}
+                if sample not in sample_mapping_dict:
+                    sample_mapping_dict[sample] = [sample_info]
+                else:
+                    if sample_info in sample_mapping_dict[sample]:
+                        print_error("Samplesheet contains duplicate rows!", "Line", line)
+                    else:
+                        sample_mapping_dict[sample].append(sample_info)
+
+    ## Write validated samplesheet with appropriate columns
+    if len(sample_mapping_dict) > 0:
+        out_dir = os.path.dirname(file_out)
+        make_dir(out_dir)
+        with open(file_out, "w") as fout:
+            fout.write(
+                ",".join(["sample", "single_end", "fq1", "fq2", "strandedness"])
+                + "\n"
+            )
+            for sample in sorted(sample_mapping_dict.keys()):
+
+                ## Check that multiple runs of the same sample are of the same datatype i.e. single-end / paired-end
+                if not all(
+                    x[0] == sample_mapping_dict[sample][0][0]
+                    for x in sample_mapping_dict[sample]
+                ):
+                    print_error(
+                        f"Multiple runs of a sample must be of the same datatype i.e. single-end or paired-end!",
+                        "Sample",
+                        sample,
+                    )
+
+                ## Check that multiple runs of the same sample are of the same strandedness
+                if not all(
+                    x[-1] == sample_mapping_dict[sample][0][-1]
+                    for x in sample_mapping_dict[sample]
+                ):
+                    print_error(
+                        f"Multiple runs of a sample must have the same strandedness!",
+                        "Sample",
+                        sample,
+                    )
+
+                for idx, val in enumerate(sample_mapping_dict[sample]):
+                    fout.write(",".join([f"{sample}_T{idx+1}"] + val) + "\n")
+    else:
+        print_error(f"No entries to process!", "Samplesheet: {file_in}")
+
+
+def main(args=None):
+    args = parse_args(args)
+    check_samplesheet(args.FILE_IN, args.FILE_OUT)
+
+
+if __name__ == "__main__":
+    sys.exit(main())
0.6.1/bin/create_mqc_data_table.py
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/bin/create_mqc_data_table.py
0.6.1/bin/create_mqc_data_table.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/bin/create_mqc_data_table.py Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,151 @@
+#!/usr/bin/env python
+
+import os
+import sys
+from textwrap import dedent
+
+import yaml
+
+
+def main():
+    """
+    Takes a tab-delimited text file with a mandatory header
+    column and generates an HTML table.
+    """
+
+    args = sys.argv
+    if len(args) < 2 or len(args) >= 4:
+        print(
+            f"\nAt least one argument specifying the *.tblsum file is required.\n"
+            + "No more than 2 command-line arguments should be passed.\n"
+        )
+        exit(1)
+
+    table_sum_on = str(args[1]).lower()
+    table_sum_on_file = table_sum_on + ".tblsum.txt"
+    cell_colors = f"{table_sum_on}.cellcolors.yml"
+
+    if len(args) == 3:
+        description = str(args[2])
+    else:
+        description = "The results table shown here is a collection from all samples."
+
+    if os.path.exists(cell_colors) and os.path.getsize(cell_colors) > 0:
+        with open(cell_colors, "r") as cc_yml:
+            cell_colors = yaml.safe_load(cc_yml)
+    else:
+        cell_colors = dict()
+
+    if not (os.path.exists(table_sum_on_file) and os.path.getsize(table_sum_on_file) > 0):
+        exit(0)
+
+    with open(table_sum_on_file, "r") as tbl:
+        header = tbl.readline()
+        header_cols = header.strip().split("\t")
+
+        html = [
+            dedent(
+                f"""<script type="text/javascript">
+                    $(document).ready(function () {{
+                        $('#cpipes-process-custom-res-{table_sum_on}').DataTable({{
+                            scrollX: true,
+                            fixedColumns: true, dom: 'Bfrtip',
+                            buttons: [
+                                'copy',
+                                {{
+                                    extend: 'print',
+                                    title: 'CPIPES: MultiQC Report: {table_sum_on}'
+                                }},
+                                {{
+                                    extend: 'excel',
+                                    filename: '{table_sum_on}_results',
+                                }},
+                                {{
+                                    extend: 'csv',
+                                    filename: '{table_sum_on}_results',
+                                }}
+                            ]
+                        }});
+                    }});
+                </script>
+                <div class="table-responsive">
+                <style>
+                #cpipes-process-custom-res tr:nth-child(even) {{
+                    background-color: #f2f2f2;
+                }}
+                </style>
+                <table class="table" style="width:100%" id="cpipes-process-custom-res-{table_sum_on}">
+                <thead>
+                <tr>"""
+            )
+        ]
+
+        for header_col in header_cols:
+            html.append(
+                dedent(
+                    f"""
+                        <th> {header_col} </th>"""
+                )
+            )
+
+        html.append(
+            dedent(
+                """
+                </tr>
+                </thead>
+                <tbody>"""
+            )
+        )
+
+        for row in tbl:
+            html.append("<tr>\n")
+            data_cols = row.strip().split("\t")
+            if len(header_cols) != len(data_cols):
+                print(
+                    f"\nWARN: Number of header columns ({len(header_cols)}) and data "
+                    + f"columns ({len(data_cols)}) are not equal!\nWill append empty columns!\n"
+                )
+                if len(header_cols) > len(data_cols):
+                    data_cols += (len(header_cols) - len(data_cols)) * " "
+                    print(len(data_cols))
+                else:
+                    header_cols += (len(data_cols) - len(header_cols)) * " "
+
+            html.append(
+                dedent(
+                    f"""
+                        <td><samp>{data_cols[0]}</samp></td>
+                    """
+                )
+            )
+
+            for data_col in data_cols[1:]:
+                data_col_w_color = f"""<td>{data_col}</td>
+                """
+                if (
+                    table_sum_on in cell_colors.keys()
+                    and data_col in cell_colors[table_sum_on].keys()
+                ):
+                    data_col_w_color = f"""<td style="background-color: {cell_colors[table_sum_on][data_col]}">{data_col}</td>
+                    """
+                html.append(dedent(data_col_w_color))
+            html.append("</tr>\n")
+        html.append("</tbody>\n")
+        html.append("</table>\n")
+        html.append("</div>\n")
+
+        mqc_yaml = {
+            "id": f"{table_sum_on.upper()}_collated_table",
+            "section_name": f"{table_sum_on.upper()}",
+            "section_href": f"https://github.com/CFSAN-Biostatistics/bettercallsal",
+            "plot_type": "html",
+            "description": f"{description}",
+            "data": ("").join(html),
+        }
+
+        with open(f"{table_sum_on.lower()}_mqc.yml", "w") as html_mqc:
+            yaml.dump(mqc_yaml, html_mqc, default_flow_style=False)
+
+
+if __name__ == "__main__":
+    main()
0.6.1/bin/dataformat
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/bin/dataformat
0.6.1/bin/dataformat
Binary file 0.6.1/bin/dataformat has changed
0.6.1/bin/datasets
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/bin/datasets
0.6.1/bin/datasets
Binary file 0.6.1/bin/datasets has changed
0.6.1/bin/dl_pdg_metadata.py
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/bin/dl_pdg_metadata.py
0.6.1/bin/dl_pdg_metadata.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/bin/dl_pdg_metadata.py Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,206 @@
+#!/usr/bin/env python3
+
+# Kranti Konganti
+
+import os
+import shutil
+import tempfile
+import argparse
+import inspect
+import logging
+import re
+from urllib.request import urlopen
+from html.parser import HTMLParser
+
+# Set logging.f
+logging.basicConfig(
+    format="\n" + "=" * 55 + "\n%(asctime)s - %(levelname)s\n" + "=" * 55 + "\n%(message)s\n",
+    level=logging.DEBUG,
+)
+
+# Multiple inheritence for pretty printing of help text.
+class MultiArgFormatClasses(argparse.RawTextHelpFormatter, argparse.ArgumentDefaultsHelpFormatter):
+    pass
+
+
+# HTMLParser override class to get PDG release and latest Cluster .tsv file
+class NCBIPathogensHTMLParser(HTMLParser):
+    def __init__(self, *, convert_charrefs: bool = ...) -> None:
+        super().__init__(convert_charrefs=convert_charrefs)
+        self.reset()
+        self.href_data = list()
+
+    def handle_data(self, data):
+        self.href_data.append(data)
+
+
+def dl_pdg(**kwargs) -> None:
+    """
+    Method to save the PDG metadata file and
+    return the latest PDG release.
+    """
+    db_path, url, regex, suffix, overwrite, release = [kwargs[k] for k in kwargs.keys()]
+
+    if (db_path or url) == None:
+        logging.error("Please provide absolute UNIX path\n" + "to store the result DB flat files.")
+        exit(1)
+
+    if re.match(r"^PDG\d+\.\d+$", release):
+        url = re.sub("latest_snps", release.strip(), url)
+
+    html_parser = NCBIPathogensHTMLParser()
+    logging.info(f"Finding latest NCBI PDG release at:\n{url}")
+
+    with urlopen(url) as response:
+        with tempfile.NamedTemporaryFile(delete=False) as tmp_html_file:
+            shutil.copyfileobj(response, tmp_html_file)
+
+    with open(tmp_html_file.name, "r") as html:
+        html_parser.feed("".join(html.readlines()))
+
+    pdg_filename = re.search(regex, "".join(html_parser.href_data)).group(0)
+    pdg_release = pdg_filename.rstrip(suffix)
+    pdg_metadata_url = "/".join([url, pdg_filename])
+    pdg_release = pdg_filename.rstrip(suffix)
+    dest_dir = os.path.join(db_path, pdg_release)
+
+    logging.info(f"Found NCBI PDG file:\n{pdg_metadata_url}")
+
+    if (
+        not overwrite
+        and re.match(r".+?\.metadata\.tsv$", pdg_filename)
+        and os.path.exists(dest_dir)
+    ):
+        logging.error(f"DB path\n{dest_dir}\nalready exists. Please use -f to overwrite.")
+        exit(1)
+    elif overwrite and not re.match(r".+?\.reference_target\.cluster_list\.tsv$", pdg_filename):
+        shutil.rmtree(dest_dir, ignore_errors=True) if os.path.exists(dest_dir) else None
+        os.makedirs(dest_dir)
+    elif (
+        not overwrite
+        and re.match(r".+?\.metadata\.tsv$", pdg_filename)
+        and not os.path.exists(dest_dir)
+    ):
+        os.makedirs(dest_dir)
+
+    tsv_at = os.path.join(dest_dir, pdg_filename)
+    logging.info(f"Saving to:\n{tsv_at}")
+
+    with urlopen(pdg_metadata_url) as response:
+        with open(tsv_at, "w") as tsv:
+            tsv.writelines(response.read().decode("utf-8"))
+
+    html.close()
+    tmp_html_file.close()
+    os.unlink(tmp_html_file.name)
+    tsv.close()
+    response.close()
+
+    return tsv_at, dest_dir
+
+
+def main() -> None:
+    """
+    This script is part of the `bettercallsal_db` Nextflow workflow and is only
+    tested on POSIX sytems.
+    It:
+        1. Downloads the latest NCBI Pathogens Release metadata file, which
+            looks like PDGXXXXXXXXXX.2504.metadata.csv and also the SNP cluster
+            information file which looks like PDGXXXXXXXXXX.2504.reference_target.cluster_list.tsv
+        2. Generates a new metadata file with only required information such as
+            computed_serotype, isolates GenBank or RefSeq downloadable genome FASTA
+            URL.
+    """
+
+    prog_name = os.path.basename(inspect.stack()[0].filename)
+
+    parser = argparse.ArgumentParser(
+        prog=prog_name, description=main.__doc__, formatter_class=MultiArgFormatClasses
+    )
+
+    # required = parser.add_argument_group("required arguments")
+
+    parser.add_argument(
+        "-db",
+        dest="db_path",
+        default=os.getcwd(),
+        required=False,
+        help="Absolute UNIX path to a path where all results files are\nstored.",
+    )
+    parser.add_argument(
+        "-f",
+        dest="overwrite_db",
+        default=False,
+        required=False,
+        action="store_true",
+        help="Force overwrite a PDG release directory at DB path\nmentioned with -db.",
+    )
+    parser.add_argument(
+        "-org",
+        dest="organism",
+        default="Salmonella",
+        required=False,
+        help="The organism to create the DB flat files\nfor.",
+    )
+    parser.add_argument(
+        "-rel",
+        dest="release",
+        default=False,
+        required=False,
+        help="If you get a 404 error, try mentioning the actual release identifier.\n"
+        + "Ex: For Salmonella, you can get the release identifier by going to:\n"
+        + "    https://ftp.ncbi.nlm.nih.gov/pathogen/Results/Salmonella\n"
+        + "Ex: If you want metadata beloginging to release PDG000000002.2507, then you\n"
+        + "    would use this command-line option as:\n    -rel PDG000000002.2507",
+    )
+
+    args = parser.parse_args()
+    db_path = args.db_path
+    org = args.organism
+    overwrite = args.overwrite_db
+    release = args.release
+    ncbi_pathogens_loc = "/".join(
+        ["https://ftp.ncbi.nlm.nih.gov/pathogen/Results", org, "latest_snps"]
+    )
+
+    if not db_path:
+        db_path = os.getcwd()
+
+    # Save metadata
+    file, dest_dir = dl_pdg(
+        db_path=db_path,
+        url="/".join([ncbi_pathogens_loc, "Metadata"]),
+        regex=re.compile(r"PDG\d+\.\d+\.metadata\.tsv"),
+        suffix=".metadata.tsv",
+        overwrite=overwrite,
+        release=release,
+    )
+
+    # Save cluster to target mapping
+    dl_pdg(
+        db_path=db_path,
+        url="/".join([ncbi_pathogens_loc, "Clusters"]),
+        regex=re.compile(r"PDG\d+\.\d+\.reference_target\.cluster_list\.tsv"),
+        suffix="reference_target\.cluster_list\.tsv",
+        overwrite=overwrite,
+        release=release,
+    )
+
+    # Create accs.txt for dataformat to fetch required ACC fields
+    accs_file = os.path.join(dest_dir, "accs_all.txt")
+    with open(file, "r") as pdg_metadata_fh:
+        with open(accs_file, "w") as accs_fh:
+            for line in pdg_metadata_fh.readlines():
+                if re.match(r"^#", line) or line in ["\n", "\n\r", "\r"]:
+                    continue
+                cols = line.strip().split("\t")
+                asm_acc = cols[9]
+                accs_fh.write(f"{asm_acc}\n") if (asm_acc != "NULL") else None
+        accs_fh.close()
+    pdg_metadata_fh.close()
+
+    logging.info("Finished writing accessions for dataformat tool.")
+
+
+if __name__ == "__main__":
+    main()
0.6.1/bin/fasta_join.pl
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/bin/fasta_join.pl
0.6.1/bin/fasta_join.pl
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/bin/fasta_join.pl Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,88 @@
+#!/usr/bin/env perl
+
+# Kranti Konganti
+# Takes in a gzipped multi-fasta file
+# and joins contigs by 10 N's
+
+use strict;
+use warnings;
+use Cwd;
+use Bio::SeqIO;
+use Getopt::Long;
+use File::Find;
+use File::Basename;
+use File::Spec::Functions;
+
+my ( $in_dir, $out_dir, $suffix, @uncatted_genomes );
+
+GetOptions(
+    'in_dir=s'  => \$in_dir,
+    'out_dir=s' => \$out_dir,
+    'suffix=s'  => \$suffix
+) or die usage();
+
+$in_dir  = getcwd            if ( !defined $in_dir );
+$out_dir = getcwd            if ( !defined $out_dir );
+$suffix  = '_genomic.fna.gz' if ( !defined $suffix );
+
+find(
+    {
+        wanted => sub {
+            push @uncatted_genomes, $File::Find::name if ( $_ =~ m/$suffix$/ );
+        }
+    },
+    $in_dir
+);
+
+if ( $out_dir ne getcwd && !-d $out_dir ) {
+    mkdir $out_dir || die "\nCannot create directory $out_dir: $!\n\n";
+}
+
+open( my $geno_path, '>genome_paths.txt' )
+  || die "\nCannot open file genome_paths.txt: $!\n\n";
+
+foreach my $uncatted_genome_path (@uncatted_genomes) {
+    my $catted_genome_header = '>' . basename( $uncatted_genome_path, $suffix );
+    $catted_genome_header =~ s/(GC[AF]\_\d+\.\d+)\_*.*/$1/;
+
+    my $catted_genome =
+      catfile( $out_dir, $catted_genome_header . '_scaffolded' . $suffix );
+
+    $catted_genome =~ s/\/\>(GC[AF])/\/$1/;
+
+    print $geno_path "$catted_genome\n";
+
+    open( my $fh, "gunzip -c $uncatted_genome_path |" )
+      || die "\nCannot create pipe for $uncatted_genome_path: $!\n\n";
+
+    open( my $fho, '|-', "gzip -c > $catted_genome" )
+      || die "\nCannot pipe to gzip: $!\n\n";
+
+    my $seq_obj = Bio::SeqIO->new(
+        -fh     => $fh,
+        -format => 'Fasta'
+    );
+
+    my $joined_seq = '';
+    while ( my $seq = $seq_obj->next_seq ) {
+        $joined_seq = $joined_seq . 'NNNNNNNNNN' . $seq->seq;
+    }
+
+    $joined_seq =~ s/NNNNNNNNNN$//;
+    $joined_seq =~ s/^NNNNNNNNNN//;
+
+    # $joined_seq =~ s/.{80}\K/\n/g;
+    # $joined_seq =~ s/\n$//;
+    print $fho $catted_genome_header, "\n", $joined_seq, "\n";
+
+    $seq_obj->close();
+    close $fh;
+    close $fho;
+}
+
+sub usage {
+    print
+"\nUsage: $0 [-in IN_DIR] [-ou OUT_DIR] [-su Filename Suffix for Header]\n\n";
+    exit;
+}
+
0.6.1/bin/fastq_dir_to_samplesheet.py
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/bin/fastq_dir_to_samplesheet.py
0.6.1/bin/fastq_dir_to_samplesheet.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/bin/fastq_dir_to_samplesheet.py Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,177 @@
+#!/usr/bin/env python3
+
+import os
+import sys
+import glob
+import argparse
+import re
+
+
+def parse_args(args=None):
+    Description = "Generate samplesheet from a directory of FastQ files."
+    Epilog = "Example usage: python fastq_dir_to_samplesheet.py <FASTQ_DIR> <SAMPLESHEET_FILE>"
+
+    parser = argparse.ArgumentParser(description=Description, epilog=Epilog)
+    parser.add_argument("FASTQ_DIR", help="Folder containing raw FastQ files.")
+    parser.add_argument("SAMPLESHEET_FILE", help="Output samplesheet file.")
+    parser.add_argument(
+        "-st",
+        "--strandedness",
+        type=str,
+        dest="STRANDEDNESS",
+        default="unstranded",
+        help="Value for 'strandedness' in samplesheet. Must be one of 'unstranded', 'forward', 'reverse'.",
+    )
+    parser.add_argument(
+        "-r1",
+        "--read1_extension",
+        type=str,
+        dest="READ1_EXTENSION",
+        default="_R1_001.fastq.gz",
+        help="File extension for read 1.",
+    )
+    parser.add_argument(
+        "-r2",
+        "--read2_extension",
+        type=str,
+        dest="READ2_EXTENSION",
+        default="_R2_001.fastq.gz",
+        help="File extension for read 2.",
+    )
+    parser.add_argument(
+        "-se",
+        "--single_end",
+        dest="SINGLE_END",
+        action="store_true",
+        help="Single-end information will be auto-detected but this option forces paired-end FastQ files to be treated as single-end so only read 1 information is included in the samplesheet.",
+    )
+    parser.add_argument(
+        "-sn",
+        "--sanitise_name",
+        dest="SANITISE_NAME",
+        action="store_true",
+        help="Whether to further sanitise FastQ file name to get sample id. Used in conjunction with --sanitise_name_delimiter and --sanitise_name_index.",
+    )
+    parser.add_argument(
+        "-sd",
+        "--sanitise_name_delimiter",
+        type=str,
+        dest="SANITISE_NAME_DELIMITER",
+        default="_",
+        help="Delimiter to use to sanitise sample name.",
+    )
+    parser.add_argument(
+        "-si",
+        "--sanitise_name_index",
+        type=int,
+        dest="SANITISE_NAME_INDEX",
+        default=1,
+        help="After splitting FastQ file name by --sanitise_name_delimiter all elements before this index (1-based) will be joined to create final sample name.",
+    )
+    return parser.parse_args(args)
+
+
+def fastq_dir_to_samplesheet(
+    fastq_dir,
+    samplesheet_file,
+    strandedness="unstranded",
+    read1_extension="_R1_001.fastq.gz",
+    read2_extension="_R2_001.fastq.gz",
+    single_end=False,
+    sanitise_name=False,
+    sanitise_name_delimiter="_",
+    sanitise_name_index=1,
+):
+    def sanitize_sample(path, extension):
+        """Retrieve sample id from filename"""
+        sample = os.path.basename(path).replace(extension, "")
+        if sanitise_name:
+            if sanitise_name_index > 0:
+                sample = sanitise_name_delimiter.join(
+                    os.path.basename(path).split(sanitise_name_delimiter)[
+                        :sanitise_name_index
+                    ]
+                )
+            # elif sanitise_name_index == -1:
+            #     sample = os.path.basename(path)[ :os.path.basename(path).index('.') ]
+        return sample
+
+    def get_fastqs(extension):
+        """
+        Needs to be sorted to ensure R1 and R2 are in the same order
+        when merging technical replicates. Glob is not guaranteed to produce
+        sorted results.
+        See also https://stackoverflow.com/questions/6773584/how-is-pythons-glob-glob-ordered
+        """
+        abs_fq_files = glob.glob(os.path.join(fastq_dir, f"**", f"*{extension}"), recursive=True)
+        return sorted(
+            [
+                fq for _, fq in enumerate(abs_fq_files) if re.match('^((?!undetermined|unclassified|downloads).)*$', fq, flags=re.IGNORECASE)
+            ]
+        )
+
+    read_dict = {}
+
+    ## Get read 1 files
+    for read1_file in get_fastqs(read1_extension):
+        sample = sanitize_sample(read1_file, read1_extension)
+        if sample not in read_dict:
+            read_dict[sample] = {"R1": [], "R2": []}
+        read_dict[sample]["R1"].append(read1_file)
+
+    ## Get read 2 files
+    if not single_end:
+        for read2_file in get_fastqs(read2_extension):
+            sample = sanitize_sample(read2_file, read2_extension)
+            read_dict[sample]["R2"].append(read2_file)
+
+    ## Write to file
+    if len(read_dict) > 0:
+        out_dir = os.path.dirname(samplesheet_file)
+        if out_dir and not os.path.exists(out_dir):
+            os.makedirs(out_dir)
+
+        with open(samplesheet_file, "w") as fout:
+            header = ["sample", "fq1", "fq2", "strandedness"]
+            fout.write(",".join(header) + "\n")
+            for sample, reads in sorted(read_dict.items()):
+                for idx, read_1 in enumerate(reads["R1"]):
+                    read_2 = ""
+                    if idx < len(reads["R2"]):
+                        read_2 = reads["R2"][idx]
+                    sample_info = ",".join([sample, read_1, read_2, strandedness])
+                    fout.write(f"{sample_info}\n")
+    else:
+        error_str = (
+            "\nWARNING: No FastQ files found so samplesheet has not been created!\n\n"
+        )
+        error_str += "Please check the values provided for the:\n"
+        error_str += "  - Path to the directory containing the FastQ files\n"
+        error_str += "  - '--read1_extension' parameter\n"
+        error_str += "  - '--read2_extension' parameter\n"
+        print(error_str)
+        sys.exit(1)
+
+
+def main(args=None):
+    args = parse_args(args)
+
+    strandedness = "unstranded"
+    if args.STRANDEDNESS in ["unstranded", "forward", "reverse"]:
+        strandedness = args.STRANDEDNESS
+
+    fastq_dir_to_samplesheet(
+        fastq_dir=args.FASTQ_DIR,
+        samplesheet_file=args.SAMPLESHEET_FILE,
+        strandedness=strandedness,
+        read1_extension=args.READ1_EXTENSION,
+        read2_extension=args.READ2_EXTENSION,
+        single_end=args.SINGLE_END,
+        sanitise_name=args.SANITISE_NAME,
+        sanitise_name_delimiter=args.SANITISE_NAME_DELIMITER,
+        sanitise_name_index=args.SANITISE_NAME_INDEX,
+    )
+
+
+if __name__ == "__main__":
+    sys.exit(main())
0.6.1/bin/gen_otf_genome.py
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/bin/gen_otf_genome.py
0.6.1/bin/gen_otf_genome.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/bin/gen_otf_genome.py Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,196 @@
+#!/usr/bin/env python3
+
+# Kranti Konganti
+
+import argparse
+import glob
+import gzip
+import inspect
+import logging
+import os
+import pprint
+import re
+
+# Set logging.
+logging.basicConfig(
+    format="\n" + "=" * 55 + "\n%(asctime)s - %(levelname)s\n" + "=" * 55 + "\n%(message)s\n\n",
+    level=logging.DEBUG,
+)
+
+# Debug print.
+ppp = pprint.PrettyPrinter(width=50, indent=4)
+
+# Multiple inheritence for pretty printing of help text.
+class MultiArgFormatClasses(argparse.RawTextHelpFormatter, argparse.ArgumentDefaultsHelpFormatter):
+    pass
+
+
+def main() -> None:
+    """
+    This script works only in the context of `bettercallsal` Nextflow workflow.
+    It takes:
+        1. A text file containing accessions or FASTA IDs, one per line and
+            then,
+        2. Searches for a genome FASTA file in gzipped format in specified
+            search path, where the prefix of the filename is the accession or
+            FASTA ID from 1. and then,
+    creates a new concatenated gzipped genome FASTA file with all the genomes
+    in the text file from 1.
+    """
+
+    prog_name = os.path.basename(inspect.stack()[0].filename)
+
+    parser = argparse.ArgumentParser(
+        prog=prog_name, description=main.__doc__, formatter_class=MultiArgFormatClasses
+    )
+
+    required = parser.add_argument_group("required arguments")
+
+    required.add_argument(
+        "-txt",
+        dest="accs_txt",
+        default=False,
+        required=True,
+        help="Absolute UNIX path to .txt file containing accessions\n" + "FASTA IDs, one per line.",
+    )
+    required.add_argument(
+        "-gd",
+        dest="genomes_dir",
+        default=False,
+        required=True,
+        help="Absolute UNIX path to a directory containing\n"
+        + "gzipped genome FASTA files.\n"
+        + "Required if -m is on.",
+    )
+    parser.add_argument(
+        "-gds",
+        dest="genomes_dir_suffix",
+        default="_scaffolded_genomic.fna.gz",
+        required=False,
+        help="Genome FASTA file suffix to search for\nin the directory mentioned using\n-gd.",
+    )
+    parser.add_argument(
+        "-op",
+        dest="out_prefix",
+        default="CATTED_GENOMES",
+        help="Set the output file prefix for .fna.gz and .txt\n" + "files.",
+    )
+    parser.add_argument(
+        "-txts",
+        dest="accs_suffix",
+        default="_template_hits.txt",
+        required=False,
+        help="The suffix of the file supplied with -txt option. It is assumed that the\n"
+        + "sample name is present in the file supplied with -txt option and the suffix\n"
+        + "will be stripped and stored in a file that logs samples which have no hits.",
+    )
+    parser.add_argument(
+        "-frag_delim",
+        dest="frag_delim",
+        default="\t",
+        required=False,
+        help="The delimitor by which the fields are separated in *_frag.gz file.",
+    )
+
+    args = parser.parse_args()
+    accs_txt = args.accs_txt
+    genomes_dir = args.genomes_dir
+    genomes_dir_suffix = args.genomes_dir_suffix
+    out_prefix = args.out_prefix
+    accs_suffix = args.accs_suffix
+    frag_delim = args.frag_delim
+    accs_seen = dict()
+    cat_genomes_gz = os.path.join(os.getcwd(), out_prefix + "_" + genomes_dir_suffix)
+    cat_genomes_gz = re.sub("__", "_", str(cat_genomes_gz))
+    frags_gz = os.path.join(os.getcwd(), out_prefix + ".frag.gz")
+    cat_reads_gz = os.path.join(os.getcwd(), out_prefix + "_aln_reads.fna.gz")
+    cat_reads_gz = re.sub("__", "_", cat_reads_gz)
+
+    if accs_txt and os.path.exists(cat_genomes_gz) and os.path.getsize(cat_genomes_gz) > 0:
+        logging.error(
+            "A concatenated genome FASTA file,\n"
+            + f"{os.path.basename(cat_genomes_gz)} already exists in:\n"
+            + f"{os.getcwd()}\n"
+            + "Please remove or move it as we will not "
+            + "overwrite it."
+        )
+        exit(1)
+
+    if accs_txt and (not os.path.exists(accs_txt) or not os.path.getsize(accs_txt) > 0):
+        logging.error("File,\n" + f"{accs_txt}\ndoes not exist " + "or is empty!")
+        failed_sample_name = re.sub(accs_suffix, "", os.path.basename(accs_txt))
+        with open(
+            os.path.join(os.getcwd(), "_".join([out_prefix, "FAILED.txt"])), "w"
+        ) as failed_sample_fh:
+            failed_sample_fh.write(f"{failed_sample_name}\n")
+        failed_sample_fh.close()
+        exit(0)
+
+    if genomes_dir:
+        if not os.path.isdir(genomes_dir):
+            logging.error("UNIX path\n" + f"{genomes_dir}\n" + "does not exist!")
+            exit(1)
+        if len(glob.glob(os.path.join(genomes_dir, "*" + genomes_dir_suffix))) <= 0:
+            logging.error(
+                "Genomes directory"
+                + f"{genomes_dir}"
+                + "\ndoes not seem to have any\n"
+                + f"files ending with suffix: {genomes_dir_suffix}"
+            )
+            exit(1)
+
+        # ppp.pprint(mash_hits)
+        empty_lines = 0
+        empty_lines_msg = ""
+        with open(cat_genomes_gz, "wb") as genomes_out_gz:
+            with open(accs_txt, "r") as accs_txt_fh:
+                for line in accs_txt_fh:
+                    if line in ["\n", "\n\r"]:
+                        empty_lines += 1
+                        continue
+                    else:
+                        line = line.strip()
+
+                    if line in accs_seen.keys():
+                        continue
+                    else:
+                        accs_seen[line] = 1
+
+                    genome_file = os.path.join(genomes_dir, line + genomes_dir_suffix)
+
+                    if not os.path.exists(genome_file) or os.path.getsize(genome_file) <= 0:
+                        logging.error(
+                            f"Genome file {os.path.basename(genome_file)} does not\n"
+                            + "exits or is empty!"
+                        )
+                        exit(1)
+                    else:
+                        with open(genome_file, "rb") as genome_file_h:
+                            genomes_out_gz.writelines(genome_file_h.readlines())
+                        genome_file_h.close()
+            accs_txt_fh.close()
+        genomes_out_gz.close()
+
+        if len(accs_seen.keys()) > 0 and os.path.exists(frags_gz) and os.path.getsize(frags_gz) > 0:
+            with gzip.open(cat_reads_gz, "wt", encoding="utf-8") as cat_reads_gz_fh:
+                with gzip.open(frags_gz, "rb") as fragz_gz_fh:
+                    for frag_line in fragz_gz_fh.readlines():
+                        frag_lines = frag_line.decode("utf-8").strip().split(frag_delim)
+                        # Per KMA specification, 6=template, 7=query, 1=read
+                        cat_reads_gz_fh.write(f">{frag_lines[6]}\n{frag_lines[0]}\n")
+                fragz_gz_fh.close()
+            cat_reads_gz_fh.close()
+
+        if empty_lines > 0:
+            empty_lines_msg = f"Skipped {empty_lines} empty line(s).\n"
+
+        logging.info(
+            empty_lines_msg
+            + f"File {os.path.basename(cat_genomes_gz)}\n"
+            + f"written in:\n{os.getcwd()}\nDone! Bye!"
+        )
+        exit(0)
+
+
+if __name__ == "__main__":
+    main()
0.6.1/bin/gen_salmon_res_table.py
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/bin/gen_salmon_res_table.py
0.6.1/bin/gen_salmon_res_table.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/bin/gen_salmon_res_table.py Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,529 @@
+#!/usr/bin/env python3
+
+# Kranti Konganti
+
+import argparse
+import glob
+import inspect
+import json
+import logging
+import os
+import pickle
+import pprint
+import re
+from collections import defaultdict
+
+import yaml
+
+
+# Multiple inheritence for pretty printing of help text.
+class MultiArgFormatClasses(argparse.RawTextHelpFormatter, argparse.ArgumentDefaultsHelpFormatter):
+    pass
+
+
+# Main
+def main() -> None:
+    """
+    The succesful execution of this script requires access to bettercallsal formatted
+    db flat files. On raven2, they are at /hpc/db/bettercallsall/PDGXXXXXXXXXX.XXXXX
+
+    It takes the ACC2SERO.pickle file and *.reference_target.cluster_list.tsv file
+    for that particular NCBI Pathogens release from the db directory mentioned with
+    -db option and a root parent directory of the `salmon quant` results mentioned
+    with -sal option and generates a final results table with number of reads
+    mapped and a .json file to be used with MultiQC to generate a stacked bar plot.
+
+    Using -url option optionally adds an extra column of NCBI Pathogens Isolates
+    Browser, which directly links out to NCBI Pathogens Isolates SNP viewer tool.
+    """
+    # Set logging.
+    logging.basicConfig(
+        format="\n" + "=" * 55 + "\n%(asctime)s - %(levelname)s\n" + "=" * 55 + "\n%(message)s\n\n",
+        level=logging.DEBUG,
+    )
+
+    # Debug print.
+    ppp = pprint.PrettyPrinter(width=55)
+    prog_name = inspect.stack()[0].filename
+
+    parser = argparse.ArgumentParser(
+        prog=prog_name, description=main.__doc__, formatter_class=MultiArgFormatClasses
+    )
+
+    required = parser.add_argument_group("required arguments")
+
+    required.add_argument(
+        "-sal",
+        dest="salmon_res_dir",
+        default=False,
+        required=True,
+        help="Absolute UNIX path to the parent directory that contains the\n"
+        + "`salmon quant` results directory. For example, if path to\n"
+        + "`quant.sf` is in /hpc/john_doe/test/salmon_res/quant.sf, then\n"
+        + "use this command-line option as:\n"
+        + "-sal /hpc/john_doe/test",
+    )
+    required.add_argument(
+        "-snp",
+        dest="rtc",
+        default=False,
+        required=True,
+        help="Absolute UNIX Path to the PDG SNP reference target cluster\n"
+        + "metadata file. On raven2, these are located at\n"
+        + "/hpc/db/bettercallsal/PDGXXXXXXXXXX.XXXXX\n"
+        + "Required if -sal is on.",
+    )
+    required.add_argument(
+        "-pickle",
+        dest="acc2sero",
+        default=False,
+        required=True,
+        help="Absolute UNIX Path to the *ACC2SERO.pickle\n"
+        + "metadata file. On raven2, these are located at\n"
+        + "/hpc/db/bettercallsal/PDGXXXXXXXXXX.XXXXX\n"
+        + "Required if -sal is on.",
+    )
+    parser.add_argument(
+        "-op",
+        dest="out_prefix",
+        default="bettercallsal.tblsum",
+        required=False,
+        help="Set the output file(s) prefix for output(s) generated\n" + "by this program.",
+    )
+    parser.add_argument(
+        "-url",
+        dest="show_snp_clust_info",
+        default=False,
+        required=False,
+        action="store_true",
+        help="Show SNP cluster participation information of the final genome hit.\n"
+        + "This may be useful to see a relative placement of your sample in\n"
+        + "NCBI Isolates SNP Tree Viewer based on genome similarity but however\n"
+        + "due to rapid nature of the updates at NCBI Pathogen Detection Project,\n"
+        + "the placement may be in an outdated cluster.",
+    )
+
+    args = parser.parse_args()
+    salmon_res_dir = args.salmon_res_dir
+    out_prefix = args.out_prefix
+    show_snp_clust_col = args.show_snp_clust_info
+    rtc = args.rtc
+    pickled_sero = args.acc2.. "#FF0000",
+        "#FFFF00",
+        "#00EAFF",
+        "#AA00FF",
+        "#FF7F00",
+        "#BFFF00",
+        "#0095FF",
+        "#FF00AA",
+        "#FFD400",
+        "#6AFF00",
+        "#0040FF",
+        "#EDB9B9",
+        "#B9D7ED",
+        "#E7E9B9",
+        "#DCB9ED",
+        "#B9EDE0",
+        "#8F2323",
+        "#23628F",
+        "#8F6A23",
+        "#6B238F",
+        "#4F8F23",
+    ]
+
+    # Credit: https://mokole.com/palette.html
+    # Will use this palette if we run out ouf
+    # 20 serotypes. More than 50 serotypes
+    # per run is probably rare but if not,
+    # will cycle through about 45.
+    distinct_color_palette2 = [
+        "#2F4F4F",  # darkslategray
+        "#556B2F",  # darkolivegreen
+        "#A0522D",  # sienna
+        "#2E8B57",  # seagreen
+        "#006400",  # darkgreen
+        "#8B0000",  # darkred
+        "#808000",  # olive
+        "#BC8F8F",  # rosybrown
+        "#663399",  # rebeccapurple
+        "#B8860B",  # darkgoldenrod
+        "#4682B4",  # steelblue
+        "#000080",  # navy
+        "#D2691E",  # chocolate
+        "#9ACD32",  # yellowgreen
+        "#20B2AA",  # lightseagreen
+        "#CD5C5C",  # indianred
+        "#8FBC8F",  # darkseagreen
+        "#800080",  # purple
+        "#B03060",  # maroon3
+        "#FF8C00",  # darkorange
+        "#FFD700",  # gold
+        "#FFFF00",  # yellow
+        "#DEB887",  # burlywood
+        "#00FF00",  # lime
+        "#BA55D3",  # mediumorchid
+        "#00FA9A",  # mediumspringgreen
+        "#4169E1",  # royalblue
+        "#E9967A",  # darksalmon
+        "#DC143C",  # crimson
+        "#00FFFF",  # aqua
+        "#F4A460",  # sandybrown
+        "#9370DB",  # mediumpurple
+        "#0000FF",  # blue
+        "#ADFF2F",  # greenyellow
+        "#FF6347",  # tomato
+        "#D8BFD8",  # thistle
+        "#FF00FF",  # fuchsia
+        "#DB7093",  # palevioletred
+        "#F0E68C",  # khaki
+        "#6495ED",  # cornflower
+        "#DDA0DD",  # plum
+        "#EE82EE",  # violet
+        "#7FFFD4",  # aquamarine
+        "#FAFAD2",  # lightgoldenrod
+        "#FF69B4",  # hotpink
+        "#FFB6C1",  # lightpink
+    ]
+
+    no_hit_color = "#434348"
+    col_count = 0
+    serotypes = set()
+    salmon_counts = defaultdict(defaultdict)
+    salmon_counts["id"] = "BETTERCALLSAL_SALMON_COUNTS"
+    salmon_counts["section_name"] = "Salmon read counts"
+    salmon_counts["description"] = (
+        "This section shows the read counts from running <code>salmon</code> "
+        + "in <code>--meta</code> mode using SE, merged PE or concatenated PE reads against "
+        + "an on-the-fly <code>salmon</code> index generated from the genome hits "
+        + "of <code>kma</code>."
+    )
+    salmon_counts["plot_type"] = "bargraph"
+    salmon_counts["pconfig"]["id"] = "bettercallsal_salmon_counts_plot"
+    salmon_counts["pconfig"]["title"] = "Salmon: Read counts"
+    salmon_counts["pconfig"]["ylab"] = "Number of reads"
+    salmon_counts["pconfig"]["xDecimals"] = "false"
+    salmon_counts["pconfig"]["cpswitch_counts_label"] = "Number of reads (Counts)"
+    salmon_counts["pconfig"]["cpswitch_percent_label"] = "Number of reads (Percentages)"
+
+    for sample in sorted(sample_salmon_counts.keys()):
+        serotypes.update(list(sample_salmon_counts[sample].keys()))
+        salmon_counts["data"][sample] = sample_salmon_counts[sample]
+
+    if len(serotypes) > len(distinct_color_palette):
+        distinct_color_palette = distinct_color_palette2
+
+    for serotype in sorted(serotypes):
+        if serotype == no_hit:
+            continue
+        if col_count == len(distinct_color_palette) - 1:
+            col_count = 0
+
+        col_count += 1
+        salmon_counts["categories"][serotype] = {"color": distinct_color_palette[col_count]}
+
+    salmon_counts["categories"][no_hit] = {"color": no_hit_color}
+    json.dump(salmon_counts, open(file, "w"))
+
+
+if __name__ == "__main__":
+    main()
0.6.1/bin/get_top_unique_mash_hit_genomes.py
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/bin/get_top_unique_mash_hit_genomes.py
0.6.1/bin/get_top_unique_mash_hit_genomes.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/bin/get_top_unique_mash_hit_genomes.py Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,301 @@
+#!/usr/bin/env python3
+
+# Kranti Konganti
+
+import os
+import glob
+import pickle
+import argparse
+import inspect
+import logging
+import re
+import pprint
+from collections import defaultdict
+
+# Multiple inheritence for pretty printing of help text.
+class MultiArgFormatClasses(argparse.RawTextHelpFormatter, argparse.ArgumentDefaultsHelpFormatter):
+    pass
+
+
+# Main
+def main() -> None:
+    """
+    This script works only in the context of `bettercallsal` Nextflow workflow.
+    It takes:
+        1. A pickle file containing a dictionary object where genome accession
+            is the key and the computed serotype is the value.
+        2. A file with `mash screen` results run against the Salmonella SNP
+            Cluster genomes' sketch.
+        3. A directory containing genomes' FASTA in gzipped format where the
+            FASTA file contains 2 lines: one FASTA header followed by
+            genome Sequence.
+    and then generates a concatenated FASTA file of top N unique `mash screen`
+    genome hits as requested.
+    """
+
+    # Set logging.
+    logging.basicConfig(
+        format="\n" + "=" * 55 + "\n%(asctime)s - %(levelname)s\n" + "=" * 55 + "\n%(message)s\n\n",
+        level=logging.DEBUG,
+    )
+
+    # Debug print.
+    ppp = pprint.PrettyPrinter(width=55)
+    prog_name = os.path.basename(inspect.stack()[0].filename)
+
+    parser = argparse.ArgumentParser(
+        prog=prog_name, description=main.__doc__, formatter_class=MultiArgFormatClasses
+    )
+
+    parser.add_argument(
+        "-s",
+        dest="sero_snp_metadata",
+        default=False,
+        required=False,
+        help="Absolute UNIX path to metadata text file with the field separator, | "
+        + "\nand 5 fields: serotype|asm_lvl|asm_url|snp_cluster_id"
+        + "\nEx: serotype=Derby,antigen_formula=4:f,g:-|Scaffold|402440|ftp://...\n|PDS000096654.2\n"
+        + "Mentioning this option will create a pickle file for the\nprovided metadata and exits.",
+    )
+    parser.add_argument(
+        "-fs",
+        dest="force_write_pick",
+        action="store_true",
+        required=False,
+        help="By default, when -s flag is on, the pickle file named *.ACC2SERO.pickle\n"
+        + "is written to CWD. If the file exists, the program will not overwrite\n"
+        + "and exit. Use -fs option to overwrite.",
+    )
+    parser.add_argument(
+        "-m",
+        dest="mash_screen_res",
+        default=False,
+        required=False,
+        help="Absolute UNIX path to `mash screen` results file.",
+    )
+    parser.add_argument(
+        "-ms",
+        dest="mash_screen_res_suffix",
+        default=".screened",
+        required=False,
+        help="Suffix of the `mash screen` result file.",
+    )
+    parser.add_argument(
+        "-ps",
+        dest="pickled_sero",
+        default=False,
+        required=False,
+        help="Absolute UNIX Path to serialized metadata object in a pickle file.\n"
+        + "You can create the pickle file of the metadata using -s option.\n"
+        + "Required if -m is on.",
+    )
+    parser.add_argument(
+        "-gd",
+        dest="genomes_dir",
+        default=False,
+        required=False,
+        help="Absolute UNIX path to a directory containing\n"
+        + "gzipped genome FASTA files.\n"
+        + "Required if -m is on.",
+    )
+    parser.add_argument(
+        "-gds",
+        dest="genomes_dir_suffix",
+        default="_scaffolded_genomic.fna.gz",
+        required=False,
+        help="Genome FASTA file suffix to search for\nin the directory mentioned using\n-gd.",
+    )
+    parser.add_argument(
+        "-n",
+        dest="num_uniq_hits",
+        default=10,
+        help="This many number of serotype genomes' accessions are " + "\nreturned.",
+    )
+    parser.add_argument(
+        "-op",
..type[acc] = cols[0]
+
+        with open(init_pickled_sero, "wb") as write_pickled_sero:
+            pickle.dump(file=write_pickled_sero, obj=acc2serotype)
+
+        logging.info(
+            f"Created the pickle file for\n{os.path.basename(pickle_sero)}.\n"
+            + "This was the only requested function."
+        )
+        sero_snp_meta.close()
+        write_pickled_sero.close()
+        exit(0)
+    elif pickle_sero and not (os.path.exists(pickle_sero) and os.path.getsize(pickle_sero) > 0):
+
+        logging.error(
+            "Requested to create pickle from metadata, but\n"
+            + f"the file, {os.path.basename(pickle_sero)} is empty or\ndoes not exist!"
+        )
+        exit(1)
+
+    if mash_screen_res and os.path.exists(mash_screen_res):
+        if os.path.getsize(mash_screen_res) > 0:
+
+            seen_uniq_hits = 0
+            unpickled_acc2serotype = pickle.load(file=open(pickled_sero, "rb"))
+
+            with open(mash_screen_res, "r") as msh_res:
+                mash_hits = defaultdict()
+                seen_mash_sero = defaultdict()
+
+                for line in msh_res:
+                    cols = line.strip().split("\t")
+
+                    if len(cols) < 5:
+                        logging.error(
+                            f"The file {os.path.basename(mash_screen_res)} seems to\n"
+                            + "be malformed. It contains less than required 5-6 columns."
+                        )
+                        exit(1)
+
+                    mash_hit_acc = re.sub(
+                        genomes_dir_suffix,
+                        "",
+                        str((re.search(r"GC[AF].*?" + genomes_dir_suffix, cols[4])).group()),
+                    )
+
+                    if mash_hit_acc:
+                        mash_hits.setdefault(cols[0], []).append(mash_hit_acc)
+                    else:
+                        logging.error(
+                            "Did not find an assembly accession in column\n"
+                            + f"number 5. Found {cols[4]} instead. Cannot proceed!"
+                        )
+                        exit(1)
+            msh_res.close()
+        elif os.path.getsize(mash_screen_res) == 0:
+            failed_sample_name = os.path.basename(mash_screen_res).rstrip(mash_screen_res_suffix)
+            with open(
+                os.path.join(os.getcwd(), "_".join([out_prefix, "FAILED.txt"])), "w"
+            ) as failed_sample_fh:
+                failed_sample_fh.write(f"{failed_sample_name}\n")
+                failed_sample_fh.close()
+            exit(0)
+
+        # ppp.pprint(mash_hits)
+        msh_out_txt = open(mash_uniq_hits_txt, "w")
+        with open(mash_genomes_gz, "wb") as msh_out_gz:
+            for _, (ident, acc_list) in enumerate(sorted(mash_hits.items(), reverse=True)):
+                for acc in acc_list:
+                    if seen_uniq_hits >= num_uniq_hits:
+                        break
+                    if unpickled_acc2serotype[acc] not in seen_mash_sero.keys():
+                        seen_mash_sero[unpickled_acc2serotype[acc]] = 1
+                        seen_uniq_hits += 1
+                        # print(acc.strip() + '\t' + ident + '\t' + unpickled_acc2serotype[acc], file=sys.stdout)
+                        msh_out_txt.write(
+                            f"{acc.strip()}\t{unpickled_acc2serotype[acc]}\t{ident}\n"
+                        )
+                        with open(
+                            os.path.join(genomes_dir, acc + genomes_dir_suffix), "rb"
+                        ) as msh_in_gz:
+                            msh_out_gz.writelines(msh_in_gz.readlines())
+                        msh_in_gz.close()
+        msh_out_gz.close()
+        msh_out_txt.close()
+        logging.info(
+            f"File {os.path.basename(mash_genomes_gz)}\n"
+            + f"written in:\n{os.getcwd()}\nDone! Bye!"
+        )
+        exit(0)
+
+
+if __name__ == "__main__":
+    main()
0.6.1/bin/sourmash_filter_hits.py
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/bin/sourmash_filter_hits.py
0.6.1/bin/sourmash_filter_hits.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/bin/sourmash_filter_hits.py Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,167 @@
+#!/usr/bin/env python3
+
+# Kranti Konganti
+
+import argparse
+import gzip
+import inspect
+import logging
+import os
+import pprint
+import re
+
+# Set logging.
+logging.basicConfig(
+    format="\n" + "=" * 55 + "\n%(asctime)s - %(levelname)s\n" + "=" * 55 + "\n%(message)s\n\n",
+    level=logging.DEBUG,
+)
+
+# Debug print.
+ppp = pprint.PrettyPrinter(width=50, indent=4)
+
+# Multiple inheritence for pretty printing of help text.
+class MultiArgFormatClasses(argparse.RawTextHelpFormatter, argparse.ArgumentDefaultsHelpFormatter):
+    pass
+
+
+def main() -> None:
+    """
+    This script will take the CSV output of `sourmash search` and `sourmash gather`
+    and will return a column's value filtered by requested column name and its value
+    """
+
+    prog_name = os.path.basename(inspect.stack()[0].filename)
+
+    parser = argparse.ArgumentParser(
+        prog=prog_name, description=main.__doc__, formatter_class=MultiArgFormatClasses
+    )
+
+    required = parser.add_argument_group("required arguments")
+
+    required.add_argument(
+        "-csv",
+        dest="csv",
+        default=False,
+        required=True,
+        help="Absolute UNIX path to CSV file containing output from\n"
+        + "`sourmash gather` or `sourmash search`",
+    )
+    required.add_argument(
+        "-extract",
+        dest="extract",
+        required=False,
+        default="name",
+        action="store_true",
+        help="Extract this column's value which matches the filters.\n"
+        + "Controlled by -fcn and -fcv.",
+    )
+    parser.add_argument(
+        "-fcn",
+        dest="filter_col_name",
+        default="f_match",
+        required=False,
+        help="Column name by which the filtering of rows\nshould be applied.",
+    )
+    parser.add_argument(
+        "-fcv",
+        dest="filter_col_val",
+        default="0",
+        required=False,
+        help="Only rows where the column (defined by --fcn)\nsatisfies this value will be\n"
+        + "will be considered. This can be numeric, regex\nor a string value.",
+    )
+    parser.add_argument(
+        "-gt",
+        dest="gt",
+        default=True,
+        required=False,
+        action="store_true",
+        help="Apply greater than or equal to condition on\nnumeric values of --fcn column.",
+    )
+    parser.add_argument(
+        "-lt",
+        dest="lt",
+        default=False,
+        required=False,
+        action="store_true",
+        help="Apply less than or equal to condition on\nnumeric values of --fcn column.",
+    )
+
+    args = parser.parse_args()
+    csv = args.csv
+    ex = args.extract
+    fcn = args.filter_col_name
+    fcv = args.filter_col_val
+    gt = args.gt
+    lt = args.lt
+    hits = set()
+    empty_lines = 0
+
+    if csv and (not os.path.exists(csv) or not os.path.getsize(csv) > 0):
+        logging.error(
+            "The CSV file,\n" + f"{os.path.basename(csv)} does not exists or\n" + "is of size zero."
+        )
+        exit(0)
+
+    outfile_prefix = re.sub(r"(^.*?)\.csv\.gz", r"\1", os.path.basename(csv))
+    outfile = os.path.join(os.getcwd(), "_".join([outfile_prefix, "template_hits.txt"]))
+    outfile_failed = os.path.join(os.getcwd(), "_".join([outfile_prefix, "FAILED.txt"]))
+
+    with gzip.open(csv, "rb") as csv_fh:
+        header_cols = dict(
+            [
+                (col, ele)
+                for ele, col in enumerate(csv_fh.readline().decode("utf-8").strip().split(","))
+            ]
+        )
+
+        if fcn and ex not in header_cols.keys():
+            logging.info(
+                f"The header row in file\n{os.path.basename(csv)}\n"
+                + "does not have a column whose names are:\n"
+                + f"-fcn: {fcn} and -extract: {ex}"
+            )
+            exit(1)
+
+        for line in csv_fh:
+            line = line.decode("utf-8")
+
+            if line in ["\n", "\n\r"]:
+                empty_lines += 1
+                continue
+
+            cols = [x.strip() for x in line.strip().split(",")]
+            investigate = cols[header_cols[fcn]]
+
+            if re.match(r"[\d\.]+", investigate):
+                if gt and investigate >= fcv:
+                    hits.add(cols[header_cols[ex]])
+                elif lt and investigate <= fcv:
+                    hits.add(cols[header_cols[ex]])
+            elif investigate == fcv:
+                hits.add(cols[header_cols[ex]])
+
+        csv_fh.close()
+
+        if len(hits) >= 1:
+            with open(outfile, "w") as outfile_fh:
+                outfile_fh.writelines("\n".join(hits) + "\n")
+            outfile_fh.close()
+        else:
+            with open(outfile_failed, "w") as outfile_failed_fh:
+                outfile_failed_fh.write(f"{outfile_prefix}\n")
+            outfile_failed_fh.close()
+
+        if empty_lines > 0:
+            empty_lines_msg = f"Skipped {empty_lines} empty line(s).\n"
+
+            logging.info(
+                empty_lines_msg
+                + f"File {os.path.basename(csv)}\n"
+                + f"written in:\n{os.getcwd()}\nDone! Bye!"
+            )
+        exit(0)
+
+
+if __name__ == "__main__":
+    main()
0.6.1/bin/sourmash_sim_matrix.py
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/bin/sourmash_sim_matrix.py
0.6.1/bin/sourmash_sim_matrix.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/bin/sourmash_sim_matrix.py Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,167 @@
+#!/usr/bin/env python3
+
+# Kranti Konganti
+
+import os
+import argparse
+import inspect
+import logging
+import re
+import pickle
+import pprint
+import json
+from collections import defaultdict
+
+# Set logging.
+logging.basicConfig(
+    format="\n" + "=" * 55 + "\n%(asctime)s - %(levelname)s\n" + "=" * 55 + "\n%(message)s\n\n",
+    level=logging.DEBUG,
+)
+
+# Debug print.
+ppp = pprint.PrettyPrinter(width=50, indent=4)
+
+# Multiple inheritence for pretty printing of help text.
+class MultiArgFormatClasses(argparse.RawTextHelpFormatter, argparse.ArgumentDefaultsHelpFormatter):
+    pass
+
+
+def main() -> None:
+    """
+    This script works only in the context of `bettercallsal` Nextflow workflow.
+    It takes:
+        1. A CSV file containing a similarity matrix or dissimilarity matrix where
+            the header row contains the names.
+        3. It takes indexed NCBI Pathogen metadata in pickle format and converts
+            accessions to serotype names in the final distance matrix output.
+    """
+
+    prog_name = os.path.basename(inspect.stack()[0].filename)
+
+    parser = argparse.ArgumentParser(
+        prog=prog_name, description=main.__doc__, formatter_class=MultiArgFormatClasses
+    )
+
+    required = parser.add_argument_group("required arguments")
+
+    required.add_argument(
+        "-csv",
+        dest="mat",
+        default=False,
+        required=True,
+        help="Absolute UNIX path to .csv file containing similarity\n"
+        + "or dissimilarity matrix from `sourmash compare`.",
+    )
+    required.add_argument(
+        "-pickle",
+        dest="acc2sero",
+        default=False,
+        required=True,
+        help="Absolute UNIX Path to the *ACC2SERO.pickle\n"
+        + "metadata file. On raven2, these are located at\n"
+        + "/hpc/db/bettercallsal/PDGXXXXXXXXXX.XXXXX/",
+    )
+    required.add_argument(
+        "-labels",
+        dest="labels",
+        default=False,
+        required=True,
+        help="Absolute UNIX Path to the *.labels.txt\n"
+        + "file from `sourmash compare`. The accessions\n"
+        + "will be renanamed to serotype names.",
+    )
+
+    args = parser.parse_args()
+    csv = args.mat
+    labels = args.labels
+    pickled_sero = args.acc2sero
+    row_names = list()
+    distance_mat = defaultdict(defaultdict)
+    out_csv = os.path.join(os.getcwd(), "bcs_sourmash_matrix.tblsum.txt")
+    out_json = os.path.join(os.getcwd(), "bcs_sourmash_matrix_mqc.json")
+
+    # Prepare dictionary to be dumped as JSON.
+    distance_mat["id"] = "BETTERCALLSAL_CONTAINMENT_INDEX"
+    distance_mat["section_name"] = "Containment index"
+    distance_mat["description"] = (
+        "This section shows the containment index between a sample and the genomes"
+        + "by running <code>sourmash gather</code> "
+        + "using <code>--containment</code> option."
+    )
+    distance_mat["plot_type"] = "heatmap"
+    distance_mat["pconfig"]["id"] = "bettercallsal_containment_index_heatmap"
+    distance_mat["pconfig"]["title"] = "Sourmash: containment index"
+    distance_mat["pconfig"]["xTitle"] = "Samples"
+    distance_mat["pconfig"]["yTitle"] = "Isolates (Genome assemblies)"
+    distance_mat["pconfig"]["ycats_samples"] = "False"
+    distance_mat["pconfig"]["xcats_samples"] = "False"
+    distance_mat["pconfig"]["square"] = "False"
+    distance_mat["pconfig"]["min"] = "0.0"
+    distance_mat["pconfig"]["max"] = "1.0"
+    distance_mat["data"]["data"] = list()
+
+    if pickled_sero and (not os.path.exists(pickled_sero) or not os.path.getsize(pickled_sero)):
+        logging.error(
+            "The pickle file,\n" + f"{os.path.basename(pickled_sero)} does not exist or is empty!"
+        )
+        exit(1)
+    else:
+        acc2sero = pickle.load(file=open(pickled_sero, "rb"))
+
+    if csv and (not os.path.exists(csv) or not os.path.getsize(csv) > 0):
+        logging.error("File,\n" + f"{csv}\ndoes not exist " + "or is empty!")
+        exit(0)
+
+    if labels and (not os.path.exists(labels) or not os.path.getsize(labels) > 0):
+        logging.error("File,\n" + f"{labels}\ndoes not exist " + "or is empty!")
+        exit(0)
+
+    # with open(out_labels, "w") as out_labels_fh:
+    with open(labels, "r") as labels_fh:
+        for line in labels_fh:
+            line = line.strip()
+            if line not in acc2sero.keys():
+                row_names.append(line)
+
+    labels_fh.close()
+
+    with open(out_csv, "w") as csv_out_fh:
+        with open(csv, "r") as csv_in_fh:
+            header = csv_in_fh.readline().strip().split(",")
+            acc_cols = [idx for idx, col in enumerate(header) if col in acc2sero.keys()]
+            sample_cols = [idx for idx, col in enumerate(header) if col not in acc2sero.keys()]
+
+            col_names = [
+                re.sub(r"serotype=|\,antigen_formula=.*?\|", "", s)
+                for s in [acc2sero[col] + f"| | {col}" for col in header if col in acc2sero.keys()]
+            ]
+
+            distance_mat["xcats"] = col_names
+            csv_out_fh.write("\t".join(["Sample"] + col_names) + "\n")
+            line_num = 0
+
+            for line in csv_in_fh:
+                if line_num not in sample_cols:
+                    continue
+                else:
+
+                    heatmap_rows = [
+                        str(round(float(line.strip().split(",")[col]), 5)) for col in acc_cols
+                    ]
+                    # distance_mat["data"]["hmdata"].append(heatmap_rows)
+                    # distance_mat["data"][row_names[line_num]] = heatmap_rows
+                    distance_mat["data"]["data"].append(heatmap_rows)
+                    # distance_mat["data"][row_names[line_num]] = dict(
+                    #     [(col_names[idx], val) for idx, val in enumerate(heatmap_rows)]
+                    # )
+                    csv_out_fh.write("\t".join([row_names[line_num]] + heatmap_rows) + "\n")
+                    line_num += 1
+        csv_in_fh.close()
+    csv_out_fh.close()
+
+    distance_mat["ycats"] = row_names
+    json.dump(distance_mat, open(out_json, "w"))
+
+
+if __name__ == "__main__":
+    main()
0.6.1/bin/waterfall_per_computed_serotype.pl
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/bin/waterfall_per_computed_serotype.pl
0.6.1/bin/waterfall_per_computed_serotype.pl
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/bin/waterfall_per_computed_serotype.pl Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,361 @@
+#!/usr/bin/env perl
+
+# Kranti Konganti
+# 09/14/2022
+
+use strict;
+use warnings;
+use Getopt::Long;
+use Data::Dumper;
+use Pod::Usage;
+use File::Basename;
+use File::Spec::Functions;
+
+my $tbl           = {};
+my $serovar_2_acc = {};
+my $acc_2_serovar = {};
+my $acc_2_target  = {};
+my $serovar_count = {};
+my (
+    $serovar_limit,          $serovar_or_type_col, $min_asm_size,
+    $complete_serotype_name, $PDG_file,            $table_file,
+    $not_null_pdg_serovar,   $help,                $out_prefix,
+    @custom_serovars
+);
+
+GetOptions(
+    'help'                         => \$help,
+    'pdg=s'                        => \$PDG_file,
+    'tbl=s'                        => \$table_file,
+    'min_contig_size=i'            => \$min_asm_size,
+    'complete_serotype_name'       => \$complete_serotype_name,
+    'serotype_col:i'               => \$serovar_or_type_col,
+    'not_null_pdg_serovar'         => \$not_null_pdg_serovar,
+    'num_serotypes_per_serotype:i' => \$serovar_limit,
+    'include_serovar=s'            => \@custom_serovars,
+    'op=s'                         => \$out_prefix
+) or pod2usage( -verbose => 2 );
+
+if ( !defined $serovar_limit ) {
+    $serovar_limit = 10;
+}
+
+if ( !defined $serovar_or_type_col ) {
+    $serovar_or_type_col = 49;
+}
+
+if ( !defined $min_asm_size ) {
+    $min_asm_size = 0;
+}
+
+if ( defined $out_prefix ) {
+    $out_prefix .= '_';
+}
+else {
+    $out_prefix = '';
+}
+
+pod2usage( -verbose => 2 ) if ( !defined $PDG_file || !defined $table_file );
+
+open( my $pdg_file, '<', $PDG_file )
+  || die "\nCannot open PDG file $PDG_file: $!\n\n";
+open( my $tbl_file, '<', $table_file )
+  || die "\nCannot open tbl file $table_file: $!\n\n";
+open( my $Stdout,      '>&', STDOUT ) || die "\nCannot pipe to STDOUT: $!\n\n";
+open( my $Stderr,      '>&', STDERR ) || die "\nCannot pipe to STDERR: $!\n\n";
+open( my $accs_cmp_fh, '>',  $out_prefix . 'accs_comp.txt' )
+  || die "\nCannnot open " . $out_prefix . "accs_comp.txt for writing: $!\n\n";
+open( my $genome_headers_fh, '>', $out_prefix . 'mash_comp_genome_list.txt' )
+  || die "\nCannnot open "
+  . $out_prefix
+  . "mash_comp_genome_list.txt for writing: $!\n\n";
+
+my $pdg_release = basename( $PDG_file, ".metadata.tsv" );
+
+while ( my $line = <$pdg_file> ) {
+    chomp $line;
+    next if ( $line =~ m/^\#/ );
+
+    # Relevent columns (Perl index):
+    #  9: asm_acc
+    # 33: serovar
+    # 48: computed serotype
+
+    my @cols            = split( /\t/, $line );
+    my $serovar_or_type = $cols[ $serovar_or_type_col - 1 ];
+    my $acc             = $cols[9];
+    my $serovar         = $cols[33];
+    my $target_acc      = $cols[41];
+
+    $serovar_or_type =~ s/\"//g;
+
+    my $skip = 1;
+    foreach my $ser (@custom_serovars) {
+        $skip = 0, next if ( $serovar_or_type =~ qr/\Q$ser\E/ );
+    }
+
+    if ( defined $complete_serotype_name ) {
+        next
+          if ( $skip
+            && ( $serovar_or_type =~ m/serotype=.*?\-.*?\,antigen_formula.+/ )
+          );
+    }
+
+    next
+      if (
+        $skip
+        && (   $serovar_or_type =~ m/serotype=\-\s+\-\:\-\:\-/
+            || $serovar_or_type =~ m/antigen_formula=\-\:\-\:\-/ )
+      );
+
+    if ( defined $not_null_pdg_serovar ) {
+        if (   $acc !~ m/NULL/
+            && $serovar         !~ m/NULL/
+            && $serovar_or_type !~ m/NULL/ )
+        {
+            $acc_2_serovar->{$acc} = $serovar_or_type;
+            $acc_2_target->{$acc}  = $target_acc;
+        }
+    }
+    elsif ( $acc !~ m/NULL/ && $serovar_or_type !~ m/NULL/ ) {
+        $acc_2_serovar->{$acc} = $serovar_or_type;
+        $acc_2_target->{$acc}  = $target_acc;
+    }
+    $serovar_count->{$serovar_or_type} = 0;
+}
+
+while ( my $line = <$tbl_file> ) {
+    chomp $line;
+
+    my @cols = split( /\t/, $line );
+
+  ..= shift;
+    my $acc_sizes  = shift;
+    my $curr_count = shift;
+
+    $asm_lvl =~ s/.+?\_(.+)/$1/;
+
+    foreach my $acc_size ( sort { $b <=> $a } keys %{$$acc_sizes} ) {
+        foreach my $url ( @{ $$acc_sizes->{$acc_size} } ) {
+            $curr_count++;
+            my ( $final_acc, $genome_header ) =
+              ( split( /\//, $url ) )[ 3 .. 4 ];
+            print $Stdout "$serovar|$asm_lvl|$acc_size|$url\n";
+            print $accs_cmp_fh "$final_acc\n";
+            print $genome_headers_fh catfile( 'scaffold_genomes',
+                $genome_header )
+              . "\n";
+            last if ( $curr_count == $serovar_limit );
+        }
+        last if ( $curr_count == $serovar_limit );
+    }
+    return $curr_count;
+}
+
+sub sort_asm_level {
+    my $level = shift;
+
+    $level =~ s/(Complete\s+Genome)/a\_$1/
+      if ( $level =~ m/Complete\s+Genome/i );
+    $level =~ s/(Chromosome)/b\_$1/ if ( $level =~ m/Chromosome/i );
+    $level =~ s/(Scaffold)/c\_$1/   if ( $level =~ m/Scaffold/i );
+    $level =~ s/(Contig)/d\_$1/     if ( $level =~ m/Contig/i );
+
+    return $level;
+}
+
+sub not_empty {
+    my $col = shift;
+
+    if ( $col !~ m/^$/ ) {
+        return 1;
+    }
+    else {
+        return 0;
+    }
+}
+
+__END__
+
+=head1 SYNOPSIS
+
+This script will take in a PDG metadata file, a C<.tbl> file and generate
+the final list by B<I<waterfall>> priority. It prioritizes serotype 
+coverage over SNP Cluster pariticipation.
+
+See complete description:
+
+  perldoc waterfall_per_computed_serotype.pl
+
+    or
+
+  waterfall_per_computed_serotype.pl --help
+
+Examples:
+
+  waterfall_per_computed_serotype.pl
+
+=head1 DESCRIPTION
+
+We will use the waterfall priority to retain
+up to N number of serotype genomes per serotype
+(by default up to N = 10 genomes).
+
+The waterfall priority to collect genomes will be
+given on the order of:
+
+1. By the assembly status
+    i.e Complete genome => Chromosome => Scaffold => Contig
+    Then,
+2. If up to X number of genomes are present on the same
+    assembly level, Scaffold N50 >= Contig N50 size is
+    used to sort the genomes
+    Then,
+3. If the same serovar genome is present on the same assembly
+    level for same N50 size, then all of the genomes are    
+    included as contiguous genome is preferred, even if the
+    sequence composition is almost the same
+    Then,
+4. If both RefSeq and GenBank FTP Paths are present, RefSeq is
+    preferred.
+
+=head1 OPTIONS
+
+=over 3
+
+=item -p PDGXXXXX.XXXX.metadata.tsv
+
+Absolute UNIX path pointing to the PDG metadata file.
+Example: PDG000000002.2505
+
+=item -t asm.tbl
+
+Absolute UNIX path pointing to the file from the result
+of the C<dl_pdg_data.py> script, which is the C<asm.tbl>
+file.
+
+=item --serocol <int> (Optional)
+
+Column number (non 0-based index) of the PDG metadata file
+by which the serotypes are collected. Default: 49
+
+=item --complete_serotype_name (Optional)
+
+Skip indexing serotypes when the serotype name in the column
+number 49 (non 0-based) of PDG metadata file consists a "-". For example, if
+an accession has a I<B<serotype=>> string as such in column
+number 49 (non 0-based): C<"serotype=- 13:z4,z23:-","antigen_formula=13:z4,z23:-">
+then, the indexing of that accession is skipped.
+Default: False
+
+=item --not_null_pdg_serovar (Optional)
+
+Only index the B<I<computed_serotype>> column i.e. column number 49 (non 0-based)
+if the B<I<serovar>> column is not C<NULL>.
+
+=item -i <serotype name> (Optional)
+
+Make sure the following serotype is included. Mention C<-i> multiple
+times to include multiple serotypes.
+
+=item -num <int> (Optional)
+
+Number of genome accessions to be collected per serotype. Default: 10
+
+=item --min_contig_size <int> (Optional)
+
+Minimum contig size to consider a genome for indexing.
+Default: 0
+
+=item -op <str> (Optional)
+
+Output prefix of the file for the accession list.
+
+=back
+
+=head1 AUTHOR
+
+Kranti Konganti
+
+=cut
0.6.1/bin/waterfall_per_snp_cluster.pl
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/bin/waterfall_per_snp_cluster.pl
0.6.1/bin/waterfall_per_snp_cluster.pl
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/bin/waterfall_per_snp_cluster.pl Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,408 @@
+#!/usr/bin/env perl
+
+# Kranti Konganti
+# 08/23/2023
+
+use strict;
+use warnings;
+use Getopt::Long;
+use Data::Dumper;
+use Pod::Usage;
+use File::Basename;
+use File::Spec::Functions;
+
+my $tbl               = {};
+my $snp_2_serovar     = {};
+my $acc_2_serovar     = {};
+my $acc_2_target      = {};
+my $snp_count         = {};
+my $snp_2_acc         = {};
+my $acc_2_snp         = {};
+my $multi_cluster_acc = {};
+my (
+    $serovar_limit,          $serovar_or_type_col, $min_asm_size,
+    $complete_serotype_name, $PDG_file,            $table_file,
+    $not_null_pdg_serovar,   $snp_cluster,         $help,
+    $out_prefix
+);
+my @custom_serovars;
+
+GetOptions(
+    'help'                         => \$help,
+    'pdg=s'                        => \$PDG_file,
+    'tbl=s'                        => \$table_file,
+    'snp=s'                        => \$snp_cluster,
+    'min_contig_size=i'            => \$min_asm_size,
+    'complete_serotype_name'       => \$complete_serotype_name,
+    'serocol:i'                    => \$serovar_or_type_col,
+    'not_null_pdg_serovar'         => \$not_null_pdg_serovar,
+    'num_serotypes_per_serotype:i' => \$serovar_limit,
+    'include_serovar=s'            => \@custom_serovars,
+    'op=s'                         => \$out_prefix
+) or pod2usage( -verbose => 2 );
+
+if ( defined $help ) {
+    pod2usage( -verbose => 2 );
+}
+
+if ( !defined $serovar_limit ) {
+    $serovar_limit = 1;
+}
+
+if ( !defined $serovar_or_type_col ) {
+    $serovar_or_type_col = 49;
+}
+
+if ( !defined $min_asm_size ) {
+    $min_asm_size = 0;
+}
+
+if ( defined $out_prefix ) {
+    $out_prefix .= '_';
+}
+else {
+    $out_prefix = '';
+}
+
+pod2usage( -verbose => 2 ) if ( !$PDG_file || !$table_file || !$snp_cluster );
+
+open( my $pdg_file, '<', $PDG_file )
+  || die "\nCannot open PDG file $PDG_file: $!\n\n";
+open( my $tbl_file, '<', $table_file )
+  || die "\nCannot open tbl file $table_file: $!\n\n";
+open( my $snp_cluster_file, '<', $snp_cluster )
+  || die "\nCannot open $snp_cluster: $!\n\n";
+open( my $acc_fh, '>', 'acc2serovar.txt' )
+  || die "\nCannot open acc2serovar.txt: $!\n\n";
+open( my $Stdout,      '>&', STDOUT ) || die "\nCannot pipe to STDOUT: $!\n\n";
+open( my $Stderr,      '>&', STDERR ) || die "\nCannot pipe to STDERR: $!\n\n";
+open( my $accs_snp_fh, '>',  $out_prefix . 'accs_snp.txt' )
+  || die "\nCannnot open " . $out_prefix . "accs_snp.txt for writing: $!\n\n";
+open( my $genome_headers_fh, '>', $out_prefix . 'mash_snp_genome_list.txt' )
+  || die "\nCannnot open "
+  . $out_prefix
+  . "mash_snp_genome_list.txt for writing: $!\n\n";
+
+my $pdg_release = basename( $PDG_file, ".metadata.tsv" );
+
+while ( my $line = <$pdg_file> ) {
+    chomp $line;
+    next if ( $line =~ m/^\#/ );
+
+    # Relevent columns (Perl index):
+    #  9: asm_acc
+    # 33: serovar
+    # 48: computed serotype
+
+    my @cols            = split( /\t/, $line );
+    my $serovar_or_type = $cols[ $serovar_or_type_col - 1 ];
+    my $acc             = $cols[9];
+    my $serovar         = $cols[33];
+    my $target_acc      = $cols[41];
+
+    $serovar_or_type =~ s/\"//g;
+
+    my $skip = 1;
+    foreach my $ser (@custom_serovars) {
+        $skip = 0, next if ( $serovar_or_type =~ qr/\Q$ser\E/ );
+    }
+
+    if ( defined $complete_serotype_name ) {
+        next
+          if ( $skip
+            && ( $serovar_or_type =~ m/serotype=.*?\-.*?\,antigen_formula.+/ )
+          );
+    }
+
+    next
+      if (
+        $skip
+        && (   $serovar_or_type =~ m/serotype=\-\s+\-\:\-\:\-/
+            || $serovar_or_type =~ m/antigen_formula=\-\:\-\:\-/ )
+      );
+
+    # next
+    #   if (
+    #     (
+    #            $serovar_or_type =~ m/serotype=\-\s+\-\:\-\:\-/
+    #         || $serovar_or_type =~ m/antigen_formula=\-\:\-\:\-/
+    #     )
+    #   );
+
+    ..-----------------------------
+# Routines begin
+#-------------------------------------------
+
+sub print_dl_metadata {
+    my $asm_lvl        = shift;
+    my $acc_sizes      = shift;
+    my $curr_count     = shift;
+    my $snp_cluster_id = shift;
+
+    $asm_lvl =~ s/.+?\_(.+)/$1/;
+
+    foreach my $acc_size ( sort { $b <=> $a } keys %{$$acc_sizes} ) {
+        foreach my $serovar_url ( @{ $$acc_sizes->{$acc_size} } ) {
+            my ( $serovar, $url ) = split( /\|/, $serovar_url );
+            return $curr_count if ( exists $multi_cluster_acc->{$url} );
+            $multi_cluster_acc->{$url} = 1;
+            $curr_count++;
+            my ( $final_acc, $genome_header ) =
+              ( split( /\//, $url ) )[ 3 .. 4 ];
+            print $accs_snp_fh "$final_acc\n";
+            print $genome_headers_fh catfile( 'scaffold_genomes',
+                $genome_header )
+              . "\n";
+            print $Stdout "$serovar|$asm_lvl|$acc_size|$url|$snp_cluster_id\n"
+              if ( $curr_count > 0 );
+        }
+        last if ( $curr_count >= $serovar_limit );
+    }
+    return $curr_count;
+}
+
+sub sort_asm_level {
+    my $level = shift;
+
+    $level =~ s/(Complete\s+Genome)/a\_$1/
+      if ( $level =~ m/Complete\s+Genome/i );
+    $level =~ s/(Chromosome)/b\_$1/ if ( $level =~ m/Chromosome/i );
+    $level =~ s/(Scaffold)/c\_$1/   if ( $level =~ m/Scaffold/i );
+    $level =~ s/(Contig)/d\_$1/     if ( $level =~ m/Contig/i );
+
+    return $level;
+}
+
+sub not_empty {
+    my $col = shift;
+
+    if ( $col !~ m/^$/ ) {
+        return 1;
+    }
+    else {
+        return 0;
+    }
+}
+
+__END__
+
+=head1 SYNOPSIS
+
+This script will take in a PDG metadata file, a C<.tbl> file and generate
+the final list by B<I<waterfall>> priority.
+
+See complete description:
+
+  perldoc waterfall_per_snp_cluster.pl
+
+    or
+
+  waterfall_per_snp_cluster.pl --help
+
+Examples:
+
+  waterfall_per_snp_cluster.pl
+
+=head1 DESCRIPTION
+
+We will retain up to N number of genome accessions per SNP cluster.
+It prioritizes SNP Cluster participation over serotype coverage.
+Which N genomes are selected depends on (in order):
+
+1. Genome assembly level, whose priority is
+
+    a: Complete Genome
+    b: Chromosome
+    c: Scaffold
+    d: Contig
+
+2. If the genomes are of same assembly level, then
+    scaffold N50 followed by contig N50 is chosen.
+
+3. If the scaffold or contig N50 is same, then all
+    of them are included
+
+=head1 OPTIONS
+
+=over 3
+
+=item -p PDGXXXXX.XXXX.metadata.tsv
+
+Absolute UNIX path pointing to the PDG metadata file.
+Example: PDG000000002.2505.metadata.tsv
+
+=item -t asm.tbl
+
+Absolute UNIX path pointing to the file from the result
+of the C<dl_pdg_data.py> script, which is the C<asm.tbl>
+file.
+
+=item -snp PDGXXXXXXX.XXXX.reference_target.cluster_list.tsv
+
+Absolute UNIX path pointing to the SNP Cluster metadata file.
+Examples: PDG000000002.2505.reference_target.cluster_list.tsv
+
+
+=item --serocol <int> (Optional)
+
+Column number (non 0-based index) of the PDG metadata file
+by which the serotypes are collected. Default: 49
+
+=item --complete_serotype_name (Optional)
+
+Skip indexing serotypes when the serotype name in the column
+number 49 (non 0-based) of PDG metadata file consists a "-". For example, if
+an accession has a I<B<serotype=>> string as such in column
+number 49 (non 0-based): C<"serotype=- 13:z4,z23:-","antigen_formula=13:z4,z23:-">
+then, the indexing of that accession is skipped.
+Default: False
+
+=item --not_null_pdg_serovar (Optional)
+
+Only index the B<I<computed_serotype>> column i.e. column number 49 (non 0-based)
+if the B<I<serovar>> column is not C<NULL>.
+
+=item -i <serotype name> (Optional)
+
+Make sure the following serotype is included. Mention C<-i> multiple
+times to include multiple serotypes.
+
+=item -num <int> (Optional)
+
+Number of genome accessions per SNP Cluster. Default: 1
+
+=back
+
+=head1 AUTHOR
+
+Kranti Konganti
+
+=cut
0.6.1/conf/base.config
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/conf/base.config
0.6.1/conf/base.config
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/conf/base.config Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,58 @@
+plugins {
+    id 'nf-amazon'
+}
+
+params {
+    fs = File.separator
+    cfsanpipename = 'CPIPES'
+    center = 'CFSAN, FDA.'
+    libs = "${projectDir}${params.fs}lib"
+    modules = "${projectDir}${params.fs}modules"
+    projectconf = "${projectDir}${params.fs}conf"
+    assetsdir = "${projectDir}${params.fs}assets"
+    subworkflows = "${projectDir}${params.fs}subworkflows"
+    workflows = "${projectDir}${params.fs}workflows"
+    workflowsconf = "${workflows}${params.fs}conf"
+    routines = "${libs}${params.fs}routines"
+    toolshelp = "${libs}${params.fs}help"
+    swmodulepath = "${params.fs}nfs${params.fs}software${params.fs}modules"
+    tracereportsdir = "${launchDir}${params.fs}${cfsanpipename}-${params.pipeline}${params.fs}nextflow-reports"
+    dummyfile = "${projectDir}${params.fs}assets${params.fs}dummy_file.txt"
+    dummyfile2 = "${projectDir}${params.fs}assets${params.fs}dummy_file2.txt"
+    max_cpus = 10
+    linewidth = 80
+    pad = 32
+    pipeline = null
+    help = null
+    input = null
+    output = null
+    metadata = null
+    publish_dir_mode = "copy"
+    publish_dir_overwrite = true
+    user_email = null
+}
+
+dag {
+    enabled = true
+    file = "${params.tracereportsdir}${params.fs}${params.pipeline}_dag.html"
+    overwrite = true
+}
+
+report {
+    enabled = true
+    file = "${params.tracereportsdir}${params.fs}${params.pipeline}_exec_report.html"
+    overwrite = true
+}
+
+trace {
+    enabled = true
+    file = "${params.tracereportsdir}${params.fs}${params.pipeline}_exec_trace.txt"
+    overwrite = true
+}
+
+timeline {
+    enabled = true
+    file = "${params.tracereportsdir}${params.fs}${params.pipeline}_exec_timeline.html"
+    overwrite = true
+}
+
0.6.1/conf/computeinfra.config
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/conf/computeinfra.config
0.6.1/conf/computeinfra.config
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/conf/computeinfra.config Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,155 @@
+standard {
+    process.executor = 'local'
+    process.cpus = 1
+    params.enable_conda = false
+    params.enable_module = true
+    singularity.enabled = false
+    docker.enabled = false
+}
+
+stdkondagac {
+    process.executor = 'local'
+    process.cpus = 4
+    params.enable_conda = true
+    conda.enabled = true
+    conda.useMicromamba = true
+    params.enable_module = false
+    singularity.enabled = false
+    docker.enabled = false
+}
+
+stdcingularitygac {
+    process.executor = 'local'
+    process.cpus = 4
+    params.enable_conda = false
+    params.enable_module = false
+    singularity.enabled = true
+    singularity.autoMounts = true
+    singularity.runOptions = "-B ${params.input} -B ${params.bcs_root_dbdir}"
+    docker.enabled = false
+}
+
+raven {
+    process.executor = 'slurm'
+    process.queue = 'prod'
+    process.memory = '10GB'
+    process.cpus = 4
+    params.enable_conda = false
+    params.enable_module = true
+    singularity.enabled = false
+    docker.enabled = false
+    clusterOptions = '--signal B:USR2'
+}
+
+eprod {
+    process.executor = 'slurm'
+    process.queue = 'lowmem,midmem,bigmem'
+    process.memory = '10GB'
+    process.cpus = 4
+    params.enable_conda = false
+    params.enable_module = true
+    singularity.enabled = false
+    docker.enabled = false
+    clusterOptions = '--signal B:USR2'
+}
+
+eprodkonda {
+    process.executor = 'slurm'
+    process.queue = 'lowmem,midmem,bigmem'
+    process.memory = '10GB'
+    process.cpus = 4
+    params.enable_conda = true
+    conda.enabled = true
+    conda.useMicromamba = true
+    params.enable_module = false
+    singularity.enabled = false
+    singularity.autoMounts = true
+    singularity.runOptions = "-B ${params.input} -B ${params.bcs_root_dbdir}"
+    docker.enabled = false
+    clusterOptions = '--signal B:USR2'
+}
+
+eprodcingularity {
+    process.executor = 'slurm'
+    process.queue = 'lowmem,midmem,bigmem'
+    process.memory = '10GB'
+    process.cpus = 4
+    params.enable_conda = false
+    params.enable_module = false
+    singularity.enabled = true
+    singularity.autoMounts = true
+    singularity.runOptions = "-B ${params.input} -B ${params.bcs_root_dbdir}"
+    docker.enabled = false
+    clusterOptions = '--signal B:USR2'
+}
+
+cingularity {
+    process.executor = 'slurm'
+    process.queue = 'prod'
+    process.memory = '10GB'
+    process.cpus = 4
+    singularity.enabled = true
+    singularity.autoMounts = true
+    singularity.runOptions = "-B ${params.input} -B ${params.bcs_root_dbdir}"
+    docker.enabled = false
+    params.enable_conda = false
+    params.enable_module = false
+    clusterOptions = '--signal B:USR2'
+}
+
+cingularitygac {
+    process.executor = 'slurm'
+    executor.$slurm.exitReadTimeout = 120000
+    process.queue = 'centriflaken'
+    process.cpus = 4
+    singularity.enabled = true
+    singularity.autoMounts = true
+    singularity.runOptions = "-B ${params.input} -B ${params.bcs_root_dbdir}"
+    docker.enabled = false
+    params.enable_conda = false
+    params.enable_module = false
+    clusterOptions = '-n 1 --signal B:USR2'
+}
+
+konda {
+    process.executor = 'slurm'
+    process.queue = 'prod'
+    process.memory = '10GB'
+    process.cpus = 4
+    singularity.enabled = false
+    docker.enabled = false
+    params.enable_conda = true
+    conda.enabled = true
+    conda.useMicromamba = true
+    params.enable_module = false
+    clusterOptions = '--signal B:USR2'
+}
+
+kondagac {
+    process.executor = 'slurm'
+    executor.$slurm.exitReadTimeout = 120000
+    process.queue = 'centriflaken'
+    process.cpus = 4
+    singularity.enabled = false
+    docker.enabled = false
+    params.enable_conda = true
+    conda.enabled = true
+    conda.useMicromamba = true
+    params.enable_module = false
+    clusterOptions = '-n 1 --signal B:USR2'
+}
+
+cfsanawsbatch {
+    process.executor = 'awsbatch'
+    process.queue = 'cfsan-nf-batch-job-queue'
+    aws.batch.cliPath = '/home/ec2-user/miniconda/bin/aws'
+    aws.batch.region = 'us-east-1'
+    aws.batch.volumes = ['/hpc/db:/hpc/db:ro', '/hpc/scratch:/hpc/scratch:rw']
+    singularity.enabled = false
+    singularity.autoMounts = true
+    docker.enabled = true
+    params.enable_conda = false
+    conda.enabled = false
+    conda.useMicromamba = false
+    params.enable_module = false
+}
0.6.1/conf/fastq.config
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/conf/fastq.config
0.6.1/conf/fastq.config
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/conf/fastq.config Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,9 @@
+params {
+    fq_filter_by_len = "4000"
+    fq_suffix = ".fastq.gz"
+    fq2_suffix = false
+    fq_strandedness = "unstranded"
+    fq_single_end = true
+    fq_filename_delim = "_"
+    fq_filename_delim_idx = "1"
+}
\ No newline at end of file
0.6.1/conf/logtheseparams.config
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/conf/logtheseparams.config
0.6.1/conf/logtheseparams.config
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/conf/logtheseparams.config Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,17 @@
+params {
+    logtheseparams = [
+        "${params.metadata}" ? 'metadata' : null,
+        "${params.input}" ? 'input' : null,
+        "${params.output}" ? 'output' : null,
+        "${params.fq_suffix}" ? 'fq_suffix' : null,
+        "${params.fq2_suffix}" ? 'fq2_suffix' : null,
+        "${params.fq_strandedness}" ? 'fq_strandedness' : null,
+        "${params.fq_single_end}" ? 'fq_single_end' : null,
+        "${params.fq_filter_by_len}" ? 'fq_filter_by_len' : null,
+        "${params.fq_filename_delim}" ? 'fq_filename_delim' : null,
+        "${params.fq_filename_delim_idx}" ? 'fq_filename_delim_idx' : null,
+        'enable_conda',
+        'enable_module',
+        'max_cpus'
+    ]
+}
\ No newline at end of file
0.6.1/conf/manifest.config
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/conf/manifest.config
0.6.1/conf/manifest.config
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/conf/manifest.config Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,9 @@
+manifest {
+    author = 'Kranti Konganti'
+    homePage = 'https://xxxxxx.xxxxx.xxxx/Kranti.Konganti/cpipes'
+    name = 'bettercallsal'
+    version = '0.6.1'
+    nextflowVersion = '>=22.10'
+    description = 'Modular Nextflow pipelines at CFSAN, FDA.'
+    doi = 'https://doi.org/10.3389/fmicb.2023.1200983'
+}
\ No newline at end of file
0.6.1/conf/modules.config
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/conf/modules.config
0.6.1/conf/modules.config
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/conf/modules.config Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,118 @@
+process {
+    publishDir = [
+        path: { 
+            "${task.process.tokenize(':')[-1].toLowerCase()}" == "multiqc" ?
+                "${params.output}${params.fs}${params.pipeline.toLowerCase()}-${task.process.tokenize(':')[-1].toLowerCase()}" :
+                "${params.output}${params.fs}${task.process.tokenize(':')[-1].toLowerCase()}"
+        },
+        mode: params.publish_dir_mode,
+        overwrite: params.publish_dir_overwrite,
+        saveAs: { filename -> filename =~ /^versions\.yml|genome_paths\.txt|[bettercallsalbcs].+?_mqc.*/ ? null : filename }
+    ]
+
+    errorStrategy = {
+        ![0].contains(task.exitStatus) ? dynamic_retry(task.attempt, 10) : 'finish'
+    }
+
+    maxRetries = 1
+
+    withLabel: 'process_femto' {
+        cpus = { 1 * task.attempt }
+        memory = { 1.GB * task.attempt }
+        time = { 1.h * task.attempt }
+    }
+
+    withLabel: 'process_pico' {
+        cpus = { min_cpus(2) * task.attempt }
+        memory = { 4.GB * task.attempt }
+        time = { 2.h * task.attempt }
+    }
+
+    withLabel: 'process_nano' {
+        cpus = { min_cpus(4) * task.attempt }
+        memory = { 8.GB * task.attempt }
+        time = { 4.h * task.attempt }
+    }
+
+    withLabel: 'process_micro' {
+        cpus = { min_cpus(8) * task.attempt }
+        memory = { 16.GB * task.attempt }
+        time = { 8.h * task.attempt }
+    }
+
+    withLabel: 'process_only_mem_low' {
+        cpus = { 1 * task.attempt }
+        memory = { 60.GB * task.attempt }
+        time = { 20.h * task.attempt }
+    }
+
+    withLabel: 'process_only_mem_medium' {
+        cpus = { 1 * task.attempt }
+        memory = { 100.GB * task.attempt }
+        time = { 30.h * task.attempt }
+    }
+
+    withLabel: 'process_only_mem_high' {
+        cpus = { 1 * task.attempt }
+        memory = { 128.GB * task.attempt }
+        time = { 60.h * task.attempt }
+    }
+
+    withLabel: 'process_low' {
+        cpus = { min_cpus(10) * task.attempt }
+        memory = { 60.GB * task.attempt }
+        time = { 20.h * task.attempt }
+    }
+
+    withLabel: 'process_medium' {
+        cpus = { min_cpus(10) * task.attempt }
+        memory = { 100.GB * task.attempt }
+        time = { 30.h * task.attempt }
+    }
+
+    withLabel: 'process_high' {
+        cpus = { min_cpus(10) * task.attempt }
+        memory = { 128.GB * task.attempt }
+        time = { 60.h * task.attempt }
+    }
+
+    withLabel: 'process_higher' {
+        cpus = { min_cpus(10) * task.attempt }
+        memory = { 256.GB * task.attempt }
+        time = { 60.h * task.attempt }
+    }
+
+    withLabel: 'process_gigantic' {
+        cpus = { min_cpus(10) * task.attempt }
+        memory = { 512.GB * task.attempt }
+        time = { 60.h * task.attempt }
+    }
+}
+
+if ( ( ( params.input || params.metadata ) && params.pipeline ) ||
+    ( params.pipeline.toString().equalsIgnoreCase('bettercallsal_db') && params.output) ) {
+    try {
+        includeConfig "${params.workflowsconf}${params.fs}process${params.fs}${params.pipeline}.process.config"
+    } catch (Exception e) {
+        System.err.println('-'.multiply(params.linewidth) + "\n" +
+            "\033[0;31m${params.cfsanpipename} - ERROR\033[0m\n" +
+            '-'.multiply(params.linewidth) + "\n" + "\033[0;31mCould not load " +
+            "default pipeline's process configuration. Please provide a pipeline \n" +
+            "name using the --pipeline option.\n\033[0m" + '-'.multiply(params.linewidth) + "\n")
+        System.exit(1)
+    }
+}
+
+// Function will return after sleeping for some time. 
+// Sleep time increases exponentially by task attempt.
+def dynamic_retry(task_retry_num, factor_by) {
+    // sleep(Math.pow(2, task_retry_num.toInteger()) * factor_by.toInteger() as long)
+    sleep(Math.pow(1.27, task_retry_num.toInteger()) as long)
+    return 'retry'
+}
+
+// Function that will adjust the minimum number of CPU
+// cores depending as requested by the user.
+def min_cpus(cores) {
+    return Math.min(cores as int, "${params.max_cpus}" as int)
+}
0.6.1/conf/multiqc/bettercallsal_mqc.yml
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/conf/multiqc/bettercallsal_mqc.yml
0.6.1/conf/multiqc/bettercallsal_mqc.yml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/conf/multiqc/bettercallsal_mqc.yml Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,64 @@
+title: CPIPES Report
+intro_text: >
+    CPIPES (CFSAN PIPELINES) is a modular bioinformatics data analysis project at CFSAN, FDA based on NEXTFLOW DSL2. 
+report_comment: >
+    This report has been generated by the <a href="https://github.com/CFSAN-Biostatistics/bettercallsal/blob/master/readme/Workflow_Name_Placeholder.md" target="_blank">CPIPES - Workflow_Name_Placeholder</a>
+    analysis pipeline. Only certain tables and plots are reported here. For complete results, please refer to the analysis pipeline output directory.
+report_header_info:
+    - CPIPES Version: CPIPES_Version_Placeholder
+    - Workflow: Workflow_Name_Placeholder
+    - Workflow Version: Workflow_Version_Placeholder
+    - Conceived By: 'Kranti Konganti'
+    - Input Directory: Workflow_Input_Placeholder
+    - Output Directory: Workflow_Output_Placeholder
+show_analysis_paths: False
+show_analysis_time: False
+report_section_order:
+    BETTERCALLSAL_SALMON_COUNTS:
+        order: -898
+    BETTERCALLSAL_SALYN_collated_table:
+        order: -899
+    BETTERCALLSAL_collated_table:
+        order: -900
+    BCS_SOURMASH_MATRIX_collated_table:
+        order: -991
+    MLST_collated_table:
+        order: -992
+    ABRICATE_NCBIAMRPLUS_collated_table:
+        order: -993
+    ABRICATE_MEGARES_collated_table:
+        order: -994
+    ABRICATE_RESFINDER_collated_table:
+        order: -995
+    ABRICATE_ARGANNOT_collated_table:
+        order: -996
+    fastp:
+        order: -997
+    fastqc:
+        order: -998
+    software_versions:
+        order: -999
+
+export_plots: true
+
+# Run only these modules
+run_modules:
+    - fastp
+    - fastqc
+    - custom_content
+
+module_order:
+    - fastp:
+        name: 'fastp'
+        info: >
+            section of the report shows read statistics <b>before</b> and <b>after</b> adapter trimming
+            with <code>fastp</code> on SE, merged PE or concatenated PE reads.
+        path_filters:
+            - '*.fastp.json'
+    - fastqc:
+        name: 'FastQC'
+        info: >
+            section of the report shows FastQC results <b>before</b> adapter trimming
+            on SE, merged PE or concatenated PE reads.
+        path_filters:
+            - '*_fastqc.zip'
0.6.1/cpipes
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/cpipes
0.6.1/cpipes
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/cpipes Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,68 @@
+#!/usr/bin/env nextflow
+
+/*
+----------------------------------------------------------------------------------------
+    cfsan/cpipes
+----------------------------------------------------------------------------------------
+    NAME          : CPIPES
+    DESCRIPTION   : Modular Nextflow pipelines at CFSAN, FDA.
+    GITLAB        : https://xxxxxxxxxx/Kranti.Konganti/cpipes-framework
+    JIRA          : https://xxxxxxxxxx/jira/projects/CPIPES/
+    CONTRIBUTORS  : Kranti Konganti
+----------------------------------------------------------------------------------------
+*/
+
+// Enable DSL 2
+nextflow.enable.dsl = 2
+
+// Enable local scope of scripts inside modules' directory
+// Buggy. To be enabled after github.com/nextflow-io/nextflow/issues/3308
+// is solved.
+//
+// nextflow.enable.moduleBinaries = true
+
+// Default routines for MAIN
+include { pipelineBanner; stopNow; } from "${params.routines}"
+
+// Our banner for CPIPES
+log.info pipelineBanner()
+
+/*
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    INCLUDE ALL WORKFLOWS
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+*/
+
+switch ("${params.pipeline}") {
+    case "bettercallsal":
+        include { BETTERCALLSAL } from "${params.workflows}${params.fs}${params.pipeline}"
+        break
+    case "bettercallsal_db":
+        include { BETTERCALLSAL_DB } from "${params.workflows}${params.fs}${params.pipeline}"
+        break
+    default:
+        stopNow("PLEASE MENTION A PIPELINE NAME. Ex: --pipeline bettercallsal")
+}
+
+/*
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    RUN ALL WORKFLOWS
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+*/
+
+workflow {
+    switch ("${params.pipeline}") {
+        case "bettercallsal":
+            BETTERCALLSAL()
+            break
+        case "bettercallsal_db":
+            BETTERCALLSAL_DB()
+            break
+    }
+}
+
+/*
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    THE END
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+*/
0.6.1/lib/help/abricate.nf
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/lib/help/abricate.nf
0.6.1/lib/help/abricate.nf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/lib/help/abricate.nf Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,43 @@
+// Help text for abricate within CPIPES.
+
+def abricateHelp(params) {
+
+    Map tool = [:]
+    Map toolspecs = [:]
+    tool.text = [:]
+    tool.helpparams = [:]
+
+    toolspecs = [
+        'abricate_run': [
+            clihelp: 'Run ABRicate tool. Default: ' +
+                (params.abricate_run ?: false),
+            cliflag: null,
+            clivalue: null
+        ],
+        'abricate_minid': [
+            clihelp: 'Minimum DNA %identity. ' +
+                "Default: " + (params.abricate_minid ?: 80),
+            cliflag: '--minid',
+            clivalue: (params.abricate_minid ?: 80)
+        ], 
+        'abricate_mincov': [
+            clihelp: 'Minimum DNA %coverage. ' +
+                "Default: " + (params.abricate_mincov ?: 80),
+            cliflag: '--mincov',
+            clivalue: (params.abricate_mincov ?: 80)
+        ],
+        'abricate_datadir': [
+            clihelp: 'ABRicate databases folder. ' +
+                "Default: " + (params.abricate_datadir ?: 'undefined'),
+            cliflag: '--datadir',
+            clivalue: (params.abricate_datadir ?: '')
+        ]
+    ]
+
+    toolspecs.each {
+        k, v -> tool.text['--' + k] = "${v.clihelp}"
+        tool.helpparams[k] = [ cliflag: "${v.cliflag}", clivalue: v.clivalue ]
+    }
+
+    return tool
+}
\ No newline at end of file
0.6.1/lib/help/amrfinderplus.nf
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/lib/help/amrfinderplus.nf
0.6.1/lib/help/amrfinderplus.nf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/lib/help/amrfinderplus.nf Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,36 @@
+def amrfinderplusHelp(params) {
+
+    Map tool = [:]
+    Map toolspecs = [:]
+    tool.text = [:]
+    tool.helpparams = [:]
+
+    toolspecs = [
+        'amrfinderplus_run': [
+            clihelp: "Run AMRFinderPlus tool. Default: ${params.amrfinderplus_run}",
+            cliflag: null,
+            clivalue: null
+        ],
+        'amrfinderplus_db': [
+            clihelp: 'Path to AMRFinderPlus database. Please note that ' +
+                ' the databases should be ready and formatted with blast for use. ' +
+                'Please read more at: ' +
+                'https://github.com/ncbi/amr/wiki/AMRFinderPlus-database ' +
+                "Default: ${params.amrfinderplus_db}",
+            cliflag: '--database',
+            clivalue: (params.amrfinderplus_db ?: '')
+        ],
+        'amrfinderplus_genes': [
+            clihelp: 'Add the plus genes to the report',
+            cliflag: '--plus',
+            clivalue: (params.amrfinderplus_genes ? ' ' : '')
+        ]
+    ]
+
+    toolspecs.each {
+        k, v -> tool.text['--' + k] = "${v.clihelp}"
+        tool.helpparams[k] = [ cliflag: "${v.cliflag}", clivalue: v.clivalue ]
+    }
+
+    return tool
+}
\ No newline at end of file
0.6.1/lib/help/bbmerge.nf
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/lib/help/bbmerge.nf
0.6.1/lib/help/bbmerge.nf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/lib/help/bbmerge.nf Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,186 @@
+// Help text for bbmerge within CPIPES.
+
+def bbmergeHelp(params) {
+
+    Map tool = [:]
+    Map toolspecs = [:]
+    tool.text = [:]
+    tool.helpparams = [:]
+
+    toolspecs = [
+        'bbmerge_run': [
+            clihelp: 'Run BBMerge tool. Default: ' +
+                (params.bbmerge_run ?: false),
+            cliflag: null,
+            clivalue: null
+        ],
+        'bbmerge_reads': [
+            clihelp: 'Quit after this many read pairs (-1 means all) ' +
+                "Default: ${params.bbmerge_reads}",
+            cliflag: 'reads=',
+            clivalue: (params.bbmerge_reads ?: '')
+        ],
+        'bbmerge_adapters': [
+            clihelp: 'Absolute UNIX path pointing to the adapters file in ' +
+                "FASTA format. Default: ${params.bbmerge_adapters}",
+            cliflag: 'adapters=',
+            clivalue: (params.bbmerge_adapters ?: '')
+        ],
+        'bbmerge_ziplevel': [
+            clihelp: 'Set to 1 (lowest) through 9 (max) to change compression ' +
+                "level; lower compression is faster. Default: ${params.bbmerge_ziplevel}",
+            cliflag: 'ziplevel=',
+            clivalue: (params.bbmerge_ziplevel ?: '')
+        ],
+        'bbmerge_ordered': [
+            clihelp: 'Output reads in the same order as input. ' +
+                "Default: ${params.bbmerge_ordered}",
+            cliflag: 'ordered=',
+            clivalue: (params.bbmerge_ordered ?: '')
+        ],
+        'bbmerge_qtrim': [
+            clihelp: 'Trim read ends to remove bases with quality below --bbmerge_minq. ' +
+                'Trims BEFORE merging. Values: t (trim both ends), ' + 
+                'f (neither end), r (right end only), l (left end only). ' +
+                "Default: ${params.bbmerge_qtrim}",
+            cliflag: 'qtrim=',
+            clivalue: (params.bbmerge_qtrim ?: '')
+        ],
+        'bbmerge_qtrim2': [
+            clihelp: 'May be specified instead of --bbmerge_qtrim to perform trimming ' +
+                'only if merging is unsuccesful. then retry merging. ' +
+                "Default: ${params.bbmerge_qtrim2}",
+            cliflag: 'qtrim2=',
+            clivalue: (params.bbmerge_qtrim2 ?: '')
+        ],
+        'bbmerge_trimq': [
+            clihelp: 'Trim quality threshold. This may be comma-delimited list (ascending) ' +
+                "to try multiple values. Default: ${params.bbmerge_trimq}",
+            cliflag: 'trimq=',
+            clivalue: (params.bbmerge_trimq ?: '')
+        ],
+        'bbmerge_minlength': [
+            clihelp: '(ml) Reads shorter than this after trimming, but before ' +
+                'merging, will be discarded. Pairs will be discarded only' +
+                "if both are shorter. Default: ${params.bbmerge_minlength}",
+            cliflag: 'minlength=',
+            clivalue: (params.bbmerge_minlength ?: '')
+        ],
+        'bbmerge_tbo': [
+            clihelp: '(trimbyoverlap). Trim overlapping reads to remove right ' +
+                "most (3') non-overlaping portion instead of joining " +
+                "Default: ${params.bbmerge_tbo}",
+            cliflag: 'tbo=',
+            clivalue: (params.bbmerge_tbo ?: '')
+        ],
+        'bbmerge_minavgquality': [
+            clihelp: '(maq). Reads with average quality below this after trimming will ' +
+                "not be attempted to merge. Default: ${params.bbmerge_minavgquality}",
+            cliflag: 'minavgquality=',
+            clivalue: (params.bbmerge_minavgquality ?: '')
+        ],
+        'bbmerge_trimpolya': [
+            clihelp: 'Trim trailing poly-A tail from adapter output. Only affects ' +
+                'outadapter.  This also trims poly-A followed by poly-G, which ' +
+                "occurs on NextSeq. Default: ${params.bbmerge_trimpolya}",
+            cliflag: 'tr..      cliflag: 'pfilter=',
+            clivalue: (params.bbmerge_pfilter ?: '')
+        ],
+        'bbmerge_ouq': [
+            clihelp: 'Calculate best overlap using quality values. ' +
+                "Default: ${params.bbmerge_ouq}",
+            cliflag: 'ouq',
+            clivalue: (params.bbmerge_ouq ?: '')
+        ],
+        'bbmerge_owq': [
+            clihelp: 'Calculate best overlap without using quality values. ' +
+                "Default: ${params.bbmerge_owq}",
+            cliflag: 'owq=',
+            clivalue: (params.bbmerge_owq ?: '')
+        ],
+        'bbmerge_strict': [
+            clihelp: 'Decrease false positive rate and merging rate. ' +
+                "Default: ${params.bbmerge_strict}",
+            cliflag: 'strict=',
+            clivalue: (params.bbmerge_strict ?: '')
+        ],
+        'bbmerge_verystrict': [
+            clihelp: 'Greatly decrease false positive rate and merging rate. ' +
+                "Default: ${params.bbmerge_verystrict}",
+            cliflag: 'verystrict=',
+            clivalue: (params.bbmerge_verystrict ?: '')
+        ],
+        'bbmerge_ultrastrict': [
+            clihelp: 'Decrease false positive rate and merging rate even more. ' +
+                "Default: ${params.bbmerge_ultrastrict}",
+            cliflag: 'ultrastrict=',
+            clivalue: (params.bbmerge_ultrastrict ?: '')
+        ],
+        'bbmerge_maxstrict': [
+            clihelp: 'Maxiamally decrease false positive rate and merging rate. ' +
+                "Default: ${params.bbmerge_maxstrict}",
+            cliflag: 'maxstrict=',
+            clivalue: (params.bbmerge_maxstrict ?: '')
+        ],
+        'bbmerge_loose': [
+            clihelp: 'Increase false positive rate and merging rate. ' +
+                "Default: ${params.bbmerge_loose}",
+            cliflag: 'loose=',
+            clivalue: (params.bbmerge_loose ?: '')
+        ],
+        'bbmerge_veryloose': [
+            clihelp: 'Greatly increase false positive rate and merging rate. ' +
+                "Default: ${params.bbmerge_veryloose}",
+            cliflag: 'veryloose=',
+            clivalue: (params.bbmerge_veryloose ?: '')
+        ],
+        'bbmerge_ultraloose': [
+            clihelp: 'Increase false positive rate and merging rate even more. ' +
+                "Default: ${params.bbmerge_ultraloose}",
+            cliflag: 'ultraloose=',
+            clivalue: (params.bbmerge_ultraloose ?: '')
+        ],
+        'bbmerge_maxloose': [
+            clihelp: 'Maximally increase false positive rate and merging rate. ' +
+                "Default: ${params.bbmerge_maxloose}",
+            cliflag: 'maxloose=',
+            clivalue: (params.bbmerge_maxloose ?: '')
+        ],
+        'bbmerge_fast': [
+            clihelp: 'Fastest possible preset. ' +
+                "Default: ${params.bbmerge_fast}",
+            cliflag: 'fast=',
+            clivalue: (params.bbmerge_fast ?: '')
+        ],
+        'bbmerge_k': [
+            clihelp: 'Kmer length.  31 (or less) is fastest and uses the least ' +
+                'memory, but higher values may be more accurate. ' +
+                '60 tends to work well for 150bp reads. ' +
+                "Default: ${params.bbmerge_k}",
+            cliflag: 'k=',
+            clivalue: (params.bbmerge_k ?: '')
+        ],
+        'bbmerge_prealloc': [
+            clihelp: 'Pre-allocate memory rather than dynamically growing. ' +
+                'Faster and more memory-efficient for large datasets. ' +
+                'A float fraction (0-1) may be specified, default 1. ' +
+                "Default: ${params.bbmerge_prealloc}",
+            cliflag: 'prealloc=',
+            clivalue: (params.bbmerge_prealloc ?: '')
+        ]
+    ]
+
+    toolspecs.each {
+        k, v -> tool.text['--' + k] = "${v.clihelp}"
+        tool.helpparams[k] = [ cliflag: "${v.cliflag}", clivalue: v.clivalue ]
+    }
+
+    return tool
+}
\ No newline at end of file
0.6.1/lib/help/centrifuge.nf
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/lib/help/centrifuge.nf
0.6.1/lib/help/centrifuge.nf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/lib/help/centrifuge.nf Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,54 @@
+// Help text for centrifuge within CPIPES.
+
+def centrifugeHelp(params) {
+
+    Map tool = [:]
+    Map toolspecs = [:]
+    tool.text = [:]
+    tool.helpparams = [:]
+
+    toolspecs = [
+        'centrifuge_x': [
+            clihelp: "Absolute path to centrifuge database. Default: ${params.centrifuge_x}",
+            cliflag: '-x',
+            clivalue: null
+        ],
+        'centrifuge_save_unaligned': [
+            clihelp: 'Save SINGLE-END reads that did not align. For PAIRED-END' +
+                " reads, save read pairs that did not align concordantly. Default: ${params.centrifuge_save_unaligned}",
+            cliflag: null, // Handled in modules logic.
+            clivalue: null
+        ],
+        'centrifuge_save_aligned': [
+            clihelp: 'Save SINGLE-END reads that aligned. For PAIRED-END' +
+                " reads, save read pairs that aligned concordantly. Default: ${params.centrifuge_save_aligned}",
+            cliflag: null, // Handled in modules logic.
+            clivalue: null
+        ],
+        'centrifuge_out_fmt_sam': [
+            clihelp: "Centrifuge output should be in SAM. Default: ${params.centrifuge_save_aligned}",
+            cliflag: null, // Handled in modules logic.
+            clivalue: null
+        ],
+        'centrifuge_extract_bug': [
+            clihelp: "Extract this bug from centrifuge results." +
+                " Default: ${params.centrifuge_extract_bug}",
+            cliflag: null, // Handled in modules logic.
+            clivalue: null,
+        ],
+        'centrifuge_ignore_quals': [
+            clihelp: 'Treat all quality values as 30 on Phred scale. ' +
+                "Default: ${params.centrifuge_ignore_quals}",
+            cliflag: '--ignore-quals',
+            clivalue: (params.centrifuge_ignore_quals ? ' ' : '')
+        ]
+    ]
+
+    toolspecs.each {
+        k, v -> tool.text['--' + k] = "${v.clihelp}"
+        tool.helpparams[k] = [ cliflag: "${v.cliflag}", clivalue: v.clivalue ]
+    }
+
+    return tool
+}
+
0.6.1/lib/help/ectyper.nf
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/lib/help/ectyper.nf
0.6.1/lib/help/ectyper.nf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/lib/help/ectyper.nf Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,46 @@
+def ectyperHelp(params) {
+
+    Map tool = [:]
+    Map toolspecs = [:]
+    tool.text = [:]
+    tool.helpparams = [:]
+
+    toolspecs = [
+        'ectyper_run': [
+            clihelp: "Run ectyper tool. Default: ${params.ectyper_run}",
+            cliflag: null,
+            clivalue: null
+        ],
+        'ectyper_perc_opid': [
+            clihelp: 'Percent identity required for an O antigen allele match. ' +
+                "Default: ${params.ectyper_perc_opid}",
+            cliflag: '-opid',
+            clivalue: (params.ectyper_perc_opid ?: 90)
+        ],
+        'ectyper_perc_hpid': [
+            clihelp: 'Percent identity required for a H antigen allele match. ' +
+                "Default: ${params.ectyper_perc_hpid}",
+            cliflag: '-hpid',
+            clivalue: (params.ectyper_perc_hpid ?: 95)
+        ],
+        'ectyper_perc_opcov': [
+            clihelp: 'Minumum percent coverage required for an O antigen allele match. ' +
+                "Default: ${params.ectyper_perc_opcov}",
+            cliflag: '-opcov',
+            clivalue: (params.ectyper_perc_opcov ?: 95)
+        ],
+        'ectyper_perc_hpcov': [
+            clihelp: 'Minumum percent coverage required for a H antigen allele match. ' +
+                "Default: ${params.ectyper_perc_hpcov}",
+            cliflag: '-hpcov',
+            clivalue: (params.ectyper_perc_hpcov ?: 50)
+        ]
+    ]
+
+    toolspecs.each {
+        k, v -> tool.text['--' + k] = "${v.clihelp}"
+        tool.helpparams[k] = [ cliflag: "${v.cliflag}", clivalue: v.clivalue ]
+    }
+
+    return tool
+}
\ No newline at end of file
0.6.1/lib/help/fastp.nf
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/lib/help/fastp.nf
0.6.1/lib/help/fastp.nf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/lib/help/fastp.nf Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,280 @@
+// Help text for fastp within CPIPES.
+
+def fastpHelp(params) {
+
+    Map tool = [:]
+    Map toolspecs = [:]
+    tool.text = [:]
+    tool.helpparams = [:]
+
+    toolspecs = [
+        'fastp_run': [
+            clihelp: 'Run fastp tool. Default: ' +
+                (params.fastp_run ?: false),
+            cliflag: null,
+            clivalue: null
+        ],
+        'fastp_failed_out': [
+            clihelp: 'Specify whether to store reads that cannot pass the filters. ' +
+                "Default: ${params.fastp_failed_out}",
+            cliflag: null,
+            clivalue: null
+        ],
+        'fastp_merged_out': [
+            clihelp: 'Specify whether to store merged output or not. ' +
+                "Default: ${params.fastp_merged_out}",
+            cliflag: null,
+            clivalue: null
+        ],
+        'fastp_overlapped_out': [
+            clihelp: 'For each read pair, output the overlapped region if it has no mismatched base. ' +
+                "Default: ${params.fastp_overlapped_out}",
+            cliflag: '--overlapped_out',
+            clivalue: (params.fastp_overlapped_out ?: '')
+        ],
+        'fastp_6': [
+            clihelp: "Indicate that the input is using phred64 scoring (it'll be converted to phred33, " +
+                'so the output will still be phred33). ' +
+                "Default: ${params.fastp_6}",
+            cliflag: '-6',
+            clivalue: (params.fastp_6 ? ' ' : '')
+        ],
+        'fastp_reads_to_process': [
+            clihelp: 'Specify how many reads/pairs are to be processed. Default value 0 means ' +
+                'process all reads. ' +
+                "Default: ${params.fastp_reads_to_process}",
+            cliflag: '--reads_to_process',
+            clivalue: (params.fastp_reads_to_process ?: '')
+        ],
+        'fastp_fix_mgi_id': [
+            clihelp: 'The MGI FASTQ ID format is not compatible with many BAM operation tools, ' +
+                'enable this option to fix it. ' +
+                "Default: ${params.fastp_fix_mgi_id}",
+            cliflag: '--fix_mgi_id',
+            clivalue: (params.fastp_fix_mgi_id ? ' ' : '')
+        ],
+        'fastp_A': [
+            clihelp: 'Disable adapter trimming. On by default. ' +
+                "Default: ${params.fastp_A}",
+            cliflag: '-A',
+            clivalue: (params.fastp_A ? ' ' : '')
+        ],
+        'fastp_adapter_fasta': [
+            clihelp: 'Specify a FASTA file to trim both read1 and read2 (if PE) by all the sequences ' +
+                'in this FASTA file. ' +
+                "Default: ${params.fastp_adapter_fasta}",
+            cliflag: '--adapter_fasta',
+            clivalue: (params.fastp_adapter_fasta ?: '')
+        ],
+        'fastp_f': [
+            clihelp: 'Trim how many bases in front of read1. ' +
+                "Default: ${params.fastp_f}",
+            cliflag: '-f',
+            clivalue: (params.fastp_f ?: '')
+        ],
+        'fastp_t': [
+            clihelp: 'Trim how many bases at the end of read1. ' +
+                "Default: ${params.fastp_t}",
+            cliflag: '-t',
+            clivalue: (params.fastp_t ?: '')
+        ],
+        'fastp_b': [
+            clihelp: 'Max length of read1 after trimming. ' +
+                "Default: ${params.fastp_b}",
+            cliflag: '-b',
+            clivalue: (params.fastp_b ?: '')
+        ],
+        'fastp_F': [
+            clihelp: 'Trim how many bases in front of read2. ' +
+                "Default: ${params.fastp_F}",
+            cliflag: '-F',
+            clivalue: (params.fastp_F ?: '')
+        ],
+        'fastp_T': [
+            clihelp: 'Trim how many bases at the end of read2. ' +
+                "Default: ${params.fastp_T}",
+            cliflag: '-T',
+            clivalue: (params.fastp_T ?: '')
+        ]..         "Default: ${params.fastp_u}",
+            cliflag: '-u',
+            clivalue: (params.fastp_u ?: '')
+        ],
+        'fastp_n': [
+            clihelp: "How many N's can a read have. " +
+                "Default: ${params.fastp_n}",
+            cliflag: '-n',
+            clivalue: (params.fastp_n ?: '')
+        ],
+        'fastp_e': [
+            clihelp: "If the full reads' average quality is below this value, then it is discarded. " +
+                "Default: ${params.fastp_e}",
+            cliflag: '-e',
+            clivalue: (params.fastp_e ?: '')
+        ],
+        'fastp_l': [
+            clihelp: 'Reads shorter than this length will be discarded. ' +
+                "Default: ${params.fastp_l}",
+            cliflag: '-l',
+            clivalue: (params.fastp_l ?: '')
+        ],
+        'fastp_max_len': [
+            clihelp: 'Reads longer than this length will be discarded. ' +
+                "Default: ${params.fastp_max_len}",
+            cliflag: '--length_limit',
+            clivalue: (params.fastp_max_len ?: '')
+        ],
+        'fastp_y': [
+            clihelp: 'Enable low complexity filter. The complexity is defined as the percentage ' +
+                'of bases that are different from its next base (base[i] != base[i+1]). ' +
+                "Default: ${params.fastp_y}",
+            cliflag: '-y',
+            clivalue: (params.fastp_y ? ' ' : '')
+        ],
+        'fastp_Y': [
+            clihelp: 'The threshold for low complexity filter (0~100). Ex: A value of 30 means ' +
+                '30% complexity is required. ' +
+                "Default: ${params.fastp_Y}",
+            cliflag: '-Y',
+            clivalue: (params.fastp_Y ?: '')
+        ],
+        'fastp_U': [
+            clihelp: 'Enable Unique Molecular Identifier (UMI) pre-processing. ' +
+                "Default: ${params.fastp_U}",
+            cliflag: '-U',
+            clivalue: (params.fastp_U ? ' ' : '')
+        ],
+        'fastp_umi_loc': [
+            clihelp: 'Specify the location of UMI, can be one of ' + 
+                'index1/index2/read1/read2/per_index/per_read. ' +
+                "Default: ${params.fastp_umi_loc}",
+            cliflag: '--umi_loc',
+            clivalue: (params.fastp_umi_loc ?: '')
+        ],
+        'fastp_umi_len': [
+            clihelp: 'If the UMI is in read1 or read2, its length should be provided. ' + 
+                "Default: ${params.fastp_umi_len}",
+            cliflag: '--umi_len',
+            clivalue: (params.fastp_umi_len ?: '')
+        ],
+        'fastp_umi_prefix': [
+            clihelp: 'If specified, an underline will be used to connect prefix and UMI ' +
+                '(i.e. prefix=UMI, UMI=AATTCG, final=UMI_AATTCG). ' + 
+                "Default: ${params.fastp_umi_prefix}",
+            cliflag: '--umi_prefix',
+            clivalue: (params.fastp_umi_prefix ?: '')
+        ],
+        'fastp_umi_skip': [
+            clihelp: 'If the UMI is in read1 or read2, fastp can skip several bases following the UMI. ' +
+                "Default: ${params.fastp_umi_skip}",
+            cliflag: '--umi_skip',
+            clivalue: (params.fastp_umi_skip ?: '')
+        ],
+        'fastp_p': [
+            clihelp: 'Enable overrepresented sequence analysis. ' +
+                "Default: ${params.fastp_p}",
+            cliflag: '-p',
+            clivalue: (params.fastp_p ? ' ' : '')
+        ],
+        'fastp_P': [
+            clihelp: 'One in this many number of reads will be computed for overrepresentation analysis ' +
+                '(1~10000), smaller is slower. ' +
+                "Default: ${params.fastp_P}",
+            cliflag: '-P',
+            clivalue: (params.fastp_P ?: '')
+        ]
+    ]
+
+    toolspecs.each {
+        k, v -> tool.text['--' + k] = "${v.clihelp}"
+        tool.helpparams[k] = [ cliflag: "${v.cliflag}", clivalue: v.clivalue ]
+    }
+
+    return tool
+}
\ No newline at end of file
0.6.1/lib/help/flye.nf
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/lib/help/flye.nf
0.6.1/lib/help/flye.nf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/lib/help/flye.nf Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,82 @@
+// Help text for flye within CPIPES.
+
+def flyeHelp(params) {
+
+    Map tool = [:]
+    Map toolspecs = [:]
+    tool.text = [:]
+    tool.helpparams = [:]
+
+    toolspecs = [
+        'flye_pacbio_raw': [
+            clihelp: 'Input FASTQ reads are PacBio regular CLR reads (<20% error) ' +
+                "Default: ${params.flye_pacbio_raw}",
+            cliflag: '--pacbio-raw',
+            clivalue: (params.flye_pacbio_raw ? ' ' : '')
+        ], 
+        'flye_pacbio_corr': [
+            clihelp: 'Input FASTQ reads are PacBio reads that were corrected ' +
+                "with other methods (<3% error). Default: ${params.flye_pacbio_corr}",
+            cliflag: '--pacbio-corr',
+            clivalue: (params.flye_pacbio_corr ? ' ' : '')
+        ],
+        'flye_pacbio_hifi': [
+            clihelp: 'Input FASTQ reads are PacBio HiFi reads (<1% error). ' +
+                "Default: ${params.flye_pacbio_hifi}",
+            cliflag: '--pacbio-hifi',
+            clivalue: (params.flye_pacbio_hifi ? ' ' : '')
+        ],
+        'flye_nano_raw': [
+            clihelp: 'Input FASTQ reads are ONT regular reads, pre-Guppy5 (<20% error). ' +
+                "Default: ${params.flye_nano_raw}",
+            cliflag: '--nano-raw',
+            clivalue: (params.flye_nano_raw ? ' ' : '')
+        ],
+        'flye_nano_corr': [
+            clihelp: 'Input FASTQ reads are ONT reads that were corrected with other ' +
+                "methods (<3% error). Default: ${params.flye_nano_corr}",
+            cliflag: '--nano-corr',
+            clivalue: (params.flye_nano_corr ? ' ' : '')
+        ],
+        'flye_nano_hq': [
+            clihelp: 'Input FASTQ reads are ONT high-quality reads: ' +
+                "Guppy5+ SUP or Q20 (<5% error). Default: ${params.flye_nano_hq}",
+            cliflag: '--nano-hq',
+            clivalue: (params.flye_nano_hq ? ' ' : '')
+        ],
+        'flye_genome_size': [
+            clihelp: 'Estimated genome size (for example, 5m or 2.6g). ' +
+                "Default: ${params.flye_genome_size}",
+            cliflag: '--genome-size',
+            clivalue: (params.flye_genome_size ?: '')
+        ],
+        'flye_polish_iter': [
+            clihelp: 'Number of genome polishing iterations. ' +
+                "Default: ${params.flye_polish_iter}",
+            cliflag: '--iterations',
+            clivalue: (params.flye_polish_iter ?: '')
+        ],
+        'flye_meta': [
+            clihelp: "Do a metagenome assembly (unenven coverage mode). Default: ${params.flye_meta}",
+            cliflag: '--meta',
+            clivalue: (params.flye_meta ? ' ' : '')
+        ],
+        'flye_min_overlap': [
+            clihelp: "Minimum overlap between reads. Default: ${params.flye_min_overlap}",
+            cliflag: '--min-overlap',
+            clivalue: (params.flye_min_overlap ?: '')
+        ],
+        'flye_scaffold': [
+            clihelp: "Enable scaffolding using assembly graph. Default: ${params.flye_scaffold}",
+            cliflag: '--scaffold',
+            clivalue: (params.flye_scaffold ? ' ' : '')
+        ]
+    ]
+
+    toolspecs.each {
+        k, v -> tool.text['--' + k] = "${v.clihelp}"
+        tool.helpparams[k] = [ cliflag: "${v.cliflag}", clivalue: v.clivalue ]
+    }
+
+    return tool
+}
\ No newline at end of file
0.6.1/lib/help/gsrpy.nf
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/lib/help/gsrpy.nf
0.6.1/lib/help/gsrpy.nf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/lib/help/gsrpy.nf Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,32 @@
+// Help text for gen_salmon_res_table.py (gsrpy) within CPIPES.
+
+def gsrpyHelp(params) {
+
+    Map tool = [:]
+    Map toolspecs = [:]
+    tool.text = [:]
+    tool.helpparams = [:]
+
+    toolspecs = [
+        'gsrpy_run': [
+            clihelp: 'Run the gen_salmon_res_table.py script. Default: ' +
+                (params.gsrpy_run ?: false),
+            cliflag: null,
+            clivalue: null
+        ],
+        'gsrpy_url': [
+            clihelp: 'Generate an additional column in final results table ' +
+                'which links out to NCBI Pathogens Isolate Browser. ' +
+                " Default: ${params.gsrpy_url}",
+            cliflag: '-url',
+            clivalue: (params.gsrpy_url ? ' ' : '')
+        ]
+    ]
+
+    toolspecs.each {
+        k, v -> tool.text['--' + k] = "${v.clihelp}"
+        tool.helpparams[k] = [ cliflag: "${v.cliflag}", clivalue: v.clivalue ]
+    }
+
+    return tool
+}
\ No newline at end of file
0.6.1/lib/help/kmaalign.nf
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/lib/help/kmaalign.nf
0.6.1/lib/help/kmaalign.nf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/lib/help/kmaalign.nf Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,200 @@
+// Help text for kma align within CPIPES.
+
+def kmaalignHelp(params) {
+
+    Map tool = [:]
+    Map toolspecs = [:]
+    tool.text = [:]
+    tool.helpparams = [:]
+
+    toolspecs = [
+        'kmaalign_run': [
+            clihelp: 'Run kma tool. Default: ' +
+                (params.kmaalign_run ?: false),
+            cliflag: null,
+            clivalue: null
+        ],
+        'kmaalign_int': [
+            clihelp: 'Input file has interleaved reads. ' +
+                " Default: ${params.kmaalign_int}",
+            cliflag: '-int',
+            clivalue: (params.kmaalign_int ? ' ' : '')
+        ], 
+        'kmaalign_ef': [
+            clihelp: 'Output additional features. ' +
+                "Default: ${params.kmaalign_ef}",
+            cliflag: '-ef',
+            clivalue: (params.kmaalign_ef ? ' ' : '')
+        ], 
+        'kmaalign_vcf': [
+            clihelp: 'Output vcf file. 2 to apply FT. ' +
+                "Default: ${params.kmaalign_vcf}",
+            cliflag: '-vcf',
+            clivalue: (params.kmaalign_vcf ? ' ' : '')
+        ],
+        'kmaalign_sam': [
+            clihelp: 'Output SAM, 4/2096 for mapped/aligned. ' +
+                "Default: ${params.kmaalign_sam}",
+            cliflag: '-sam',
+            clivalue: (params.kmaalign_sam ? ' ' : '')
+        ],
+        'kmaalign_nc': [
+            clihelp: 'No consensus file. ' +
+                "Default: ${params.kmaalign_nc}",
+            cliflag: '-nc',
+            clivalue: (params.kmaalign_nc ? ' ' : '')
+        ],
+        'kmaalign_na': [
+            clihelp: 'No aln file. ' +
+                "Default: ${params.kmaalign_na}",
+            cliflag: '-na',
+            clivalue: (params.kmaalign_na ? ' ' : '')
+        ],
+        'kmaalign_nf': [
+            clihelp: 'No frag file. ' +
+                "Default: ${params.kmaalign_nf}",
+            cliflag: '-nf',
+            clivalue: (params.kmaalign_nf ? ' ' : '')
+        ],
+        'kmaalign_a': [
+            clihelp: 'Output all template mappings. ' +
+                "Default: ${params.kmaalign_a}",
+            cliflag: '-a',
+            clivalue: (params.kmaalign_a ? ' ' : '')
+        ],
+        'kmaalign_and': [
+            clihelp: 'Use both -mrs and p-value on consensus. ' +
+                "Default: ${params.kmaalign_and}",
+            cliflag: '-and',
+            clivalue: (params.kmaalign_and ? ' ' : '')
+        ],
+        'kmaalign_oa': [
+            clihelp: 'Use neither -mrs or p-value on consensus. ' +
+                "Default: ${params.kmaalign_oa}",
+            cliflag: '-oa',
+            clivalue: (params.kmaalign_oa ? ' ' : '')
+        ],
+        'kmaalign_bc': [
+            clihelp: 'Minimum support to call bases. ' +
+                "Default: ${params.kmaalign_bc}",
+            cliflag: '-bc',
+            clivalue: (params.kmaalign_bc ?: '')
+        ],
+        'kmaalign_bcNano': [
+            clihelp: 'Altered indel calling for ONT data. ' +
+                "Default: ${params.kmaalign_bcNano}",
+            cliflag: '-bcNano',
+            clivalue: (params.kmaalign_bcNano ? ' ' : '')
+        ],
+        'kmaalign_bcd': [
+            clihelp: 'Minimum depth to call bases. ' +
+                "Default: ${params.kmaalign_bcd}",
+            cliflag: '-bcd',
+            clivalue: (params.kmaalign_bcd ?: '')
+        ],
+        'kmaalign_bcg': [
+            clihelp: 'Maintain insignificant gaps. ' +
+                "Default: ${params.kmaalign_bcg}",
+            cliflag: '-bcg',
+            clivalue: (params.kmaalign_bcg ? ' ' : '')
+        ],
+        'kmaalign_ID': [
+            clihelp: 'Minimum consensus ID. ' +
+                "Default: ${params.kmaalign_ID}",
+            cliflag: '-ID',
+            clivalue: (params.kmaalign_ID ?: '')
+        ],
+        'kmaalign_md': [
+            clihelp: 'Minimum depth. ' +
+                "Default: ${params.kmaalign_md}",
+            cliflag: '-md',
+            clivalue: (params.kmaalign_md ?: '')
+        ],
+        'kmaalign_dense': [
+            clihelp: 'Skip insertion in consensus. ' +
+                "Default: ${params.kmaalign_dense}",
+            cliflag: '-dense',
+            clivalue: (params.kmaalign_dense ? ' ' : '')
+        ],
+        'kmaalign_ref_fsa': [
+            clihelp: 'Use Ns on indels. ' +
+                "Default: ${params.kmaalign_ref_fsa}",
+            cliflag: '-ref_fsa',
+            clivalue: (params.kmaalign_ref_fsa ? ' ' : '')
+        ],
+        'kmaalign_Mt1': [
+            clihelp: 'Map everything to one template. ' +
+                "Default: ${params.kmaalign_Mt1}",
+            cliflag: '-Mt1',
+            clivalue: (params.kmaalign_Mt1 ? ' ' : '')
+        ],
+        'kmaalign_1t1': [
+            clihelp: 'Map one query to one template. ' +
+                "Default: ${params.kmaalign_1t1}",
+            cliflag: '-1t1',
+            clivalue: (params.kmaalign_1t1 ? ' ' : '')
+        ],
+        'kmaalign_mrs': [
+            clihelp: 'Minimum relative alignment score. ' +
+                "Default: ${params.kmaalign_mrs}",
+            cliflag: '-mrs',
+            clivalue: (params.kmaalign_mrs ?: '')
+        ],
+        'kmaalign_mrc': [
+            clihelp: 'Minimum query coverage. ' +
+                "Default: ${params.kmaalign_mrc}",
+            cliflag: '-mrc',
+            clivalue: (params.kmaalign_mrc ?: '')
+        ],
+        'kmaalign_mp': [
+            clihelp: 'Minimum phred score of trailing and leading bases. ' +
+                "Default: ${params.kmaalign_mp}",
+            cliflag: '-mp',
+            clivalue: (params.kmaalign_mp ?: '')
+        ],
+        'kmaalign_mq': [
+            clihelp: 'Set the minimum mapping quality. ' +
+                "Default: ${params.kmaalign_mq}",
+            cliflag: '-mq',
+            clivalue: (params.kmaalign_mq ?: '')
+        ],
+        'kmaalign_eq': [
+            clihelp: 'Minimum average quality score. ' +
+                "Default: ${params.kmaalign_eq}",
+            cliflag: '-eq',
+            clivalue: (params.kmaalign_eq ?: '')
+        ],
+        'kmaalign_5p': [
+            clihelp: 'Trim 5 prime by this many bases. ' +
+                "Default: ${params.kmaalign_5p}",
+            cliflag: '-5p',
+            clivalue: (params.kmaalign_5p ?: '')
+        ],
+        'kmaalign_3p': [
+            clihelp: 'Trim 3 prime by this many bases ' +
+                "Default: ${params.kmaalign_3p}",
+            cliflag: '-3p',
+            clivalue: (params.kmaalign_3p ?: '')
+        ],
+        'kmaalign_apm': [
+            clihelp: 'Sets both -pm and -fpm ' +
+                "Default: ${params.kmaalign_apm}",
+            cliflag: '-apm',
+            clivalue: (params.kmaalign_apm ?: '')
+        ],
+        'kmaalign_cge': [
+            clihelp: 'Set CGE penalties and rewards ' +
+                "Default: ${params.kmaalign_cge}",
+            cliflag: '-cge',
+            clivalue: (params.kmaalign_cge ? ' ' : '')
+        ],
+
+    ]
+
+    toolspecs.each {
+        k, v -> tool.text['--' + k] = "${v.clihelp}"
+        tool.helpparams[k] = [ cliflag: "${v.cliflag}", clivalue: v.clivalue ]
+    }
+
+    return tool
+}
\ No newline at end of file
0.6.1/lib/help/kmaindex.nf
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/lib/help/kmaindex.nf
0.6.1/lib/help/kmaindex.nf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/lib/help/kmaindex.nf Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,91 @@
+// Help text for kma index within CPIPES.
+
+def kmaindexHelp(params) {
+
+    Map tool = [:]
+    Map toolspecs = [:]
+    tool.text = [:]
+    tool.helpparams = [:]
+
+    toolspecs = [
+        'kmaindex_run': [
+            clihelp: 'Run kma index tool. Default: ' +
+                (params.kmaindex_run ?: false),
+            cliflag: null,
+            clivalue: null
+        ],
+        'kmaindex_t_db': [
+            clihelp: 'Add to existing DB. ' +
+                "Default: ${params.kmaindex_t_db}",
+            cliflag: '-t_db',
+            clivalue: (params.kmaindex_t_db ? ' ' : '')
+        ], 
+        'kmaindex_k': [
+            clihelp: 'k-mer size. ' +
+                "Default: ${params.kmaindex_k}",
+            cliflag: '-k',
+            clivalue: (params.kmaindex_k ?: '')
+        ],
+        'kmaindex_m': [
+            clihelp: 'Minimizer size. ' +
+                "Default: ${params.kmaindex_m}",
+            cliflag: '-m',
+            clivalue: (params.kmaindex_m ?: '')
+        ],
+        'kmaindex_hc': [
+            clihelp: 'Homopolymer compression. ' +
+                "Default: ${params.kmaindex_hc}",
+            cliflag: '-hc',
+            clivalue: (params.kmaindex_hc ? ' ' : '')
+        ],
+        'kmaindex_ML': [
+            clihelp: 'Minimum length of templates. Defaults to --kmaindex_k ' +
+                "Default: ${params.kmaindex_ML}",
+            cliflag: '-ML',
+            clivalue: (params.kmaindex_ML ?: '')
+        ],
+        'kmaindex_ME': [
+            clihelp: 'Mega DB. ' +
+                "Default: ${params.kmaindex_ME}",
+            cliflag: '-ME',
+            clivalue: (params.kmaindex_ME ? ' ' : '')
+        ],
+        'kmaindex_Sparse': [
+            clihelp: 'Make Sparse DB. ' +
+                "Default: ${params.kmaindex_Sparse}",
+            cliflag: '-Sparse',
+            clivalue: (params.kmaindex_Sparse ? ' ' : '')
+        ],
+        'kmaindex_ht': [
+            clihelp: 'Homology template. ' +
+                "Default: ${params.kmaindex_ht}",
+            cliflag: '-ht',
+            clivalue: (params.kmaindex_ht ?: '')
+        ],
+        'kmaindex_hq': [
+            clihelp: 'Homology query. ' +
+                "Default: ${params.kmaindex_hq}",
+            cliflag: '-hq',
+            clivalue: (params.kmaindex_hq ?: '')
+        ],
+        'kmaindex_and': [
+            clihelp: 'Both homology thresholds have to reach. ' +
+                "Default: ${params.kmaindex_and}",
+            cliflag: '-and',
+            clivalue: (params.kmaindex_and ? ' ' : '')
+        ],
+        'kmaindex_nbp': [
+            clihelp: 'No bias print. ' +
+                "Default: ${params.kmaindex_nbp}",
+            cliflag: '-nbp',
+            clivalue: (params.kmaindex_nbp ? ' ' : '')
+        ]
+    ]
+
+    toolspecs.each {
+        k, v -> tool.text['--' + k] = "${v.clihelp}"
+        tool.helpparams[k] = [ cliflag: "${v.cliflag}", clivalue: v.clivalue ]
+    }
+
+    return tool
+}
\ No newline at end of file
0.6.1/lib/help/kraken2.nf
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/lib/help/kraken2.nf
0.6.1/lib/help/kraken2.nf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/lib/help/kraken2.nf Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,72 @@
+// Help text for kraken2 within CPIPES.
+
+def kraken2Help(params) {
+
+    Map tool = [:]
+    Map toolspecs = [:]
+    tool.text = [:]
+    tool.helpparams = [:]
+
+    toolspecs = [
+        'kraken2_db': [
+            clihelp: "Absolute path to kraken database. Default: ${params.kraken2_db}",
+            cliflag: '--db',
+            clivalue: null
+        ],
+        'kraken2_confidence': [
+            clihelp: 'Confidence score threshold which must be ' +
+                "between 0 and 1. Default: ${params.kraken2_confidence}",
+            cliflag: '--confidence',
+            clivalue: (params.kraken2_confidence ?: '')
+        ],
+        'kraken2_quick': [
+            clihelp: "Quick operation (use first hit or hits). Default: ${params.kraken2_quick}",
+            cliflag: '--quick',
+            clivalue: (params.kraken2_quick ? ' ' : '')
+        ],
+        'kraken2_use_mpa_style': [
+            clihelp: "Report output like Kraken 1's " +
+                "kraken-mpa-report. Default: ${params.kraken2_use_mpa_style}",
+            cliflag: '--use-mpa-style',
+            clivalue: (params.kraken2_use_mpa_style ? ' ' : '')
+        ],
+        'kraken2_minimum_base_quality': [
+            clihelp: 'Minimum base quality used in classification ' +
+                " which is only effective with FASTQ input. Default: ${params.kraken2_minimum_base_quality}",
+            cliflag: '--minimum-base-quality',
+            clivalue: (params.kraken2_minimum_base_quality ?: '')
+        ],
+        'kraken2_report_zero_counts': [
+            clihelp: 'Report counts for ALL taxa, even if counts are zero. ' +
+                "Default: ${params.kraken2_report_zero_counts}",
+            cliflag: '--report-zero-counts',
+            clivalue: (params.kraken2_report_zero_counts ? ' ' : '')
+        ],
+        'kraken2_report_minmizer_data': [
+            clihelp: 'Report minimizer and distinct minimizer count' +
+                ' information in addition to normal Kraken report. ' +
+                "Default: ${params.kraken2_report_minimizer_data}",
+            cliflag: '--report-minimizer-data',
+            clivalue: (params.kraken2_report_minimizer_data ? ' ' : '')
+        ],
+        'kraken2_use_names': [
+            clihelp: 'Print scientific names instead of just taxids. ' +
+                "Default: ${params.kraken2_use_names}",
+            cliflag: '--use-names',
+            clivalue: (params.kraken2_use_names ? ' ' : '')
+        ],
+        'kraken2_extract_bug': [
+            clihelp: 'Extract the reads or contigs beloging to this bug. ' +
+                "Default: ${params.kraken2_extract_bug}",
+            cliflag: null,
+            clivalue: null
+        ]
+    ]
+
+    toolspecs.each {
+        k, v -> tool.text['--' + k] = "${v.clihelp}"
+        tool.helpparams[k] = [ cliflag: "${v.cliflag}", clivalue: v.clivalue ]
+    }
+
+    return tool
+}
\ No newline at end of file
0.6.1/lib/help/mashscreen.nf
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/lib/help/mashscreen.nf
0.6.1/lib/help/mashscreen.nf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/lib/help/mashscreen.nf Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,49 @@
+// Help text for mash screen within CPIPES.
+
+def mashscreenHelp(params) {
+
+    Map tool = [:]
+    Map toolspecs = [:]
+    tool.text = [:]
+    tool.helpparams = [:]
+
+    toolspecs = [
+        'mashscreen_run': [
+            clihelp: 'Run `mash screen` tool. Default: ' +
+                (params.mashscreen_run ?: false),
+            cliflag: null,
+            clivalue: null
+        ],
+        'mashscreen_w': [
+            clihelp: 'Winner-takes-all strategy for identity estimates. After counting ' +
+                'hashes for each query, hashes that appear in multiple queries will ' +
+                'be removed from all except the one with the best identity (ties ' +
+                'broken by larger query), and other identities will be reduced. This ' +
+                'removes output redundancy, providing a rough compositional outline. ' +
+                " Default: ${params.mashscreen_w}",
+            cliflag: '-w',
+            clivalue: (params.mashscreen_w ? ' ' : '')
+        ], 
+        'mashscreen_i': [
+            clihelp: 'Minimum identity to report. Inclusive unless set to zero, in which ' +
+                'case only identities greater than zero (i.e. with at least one ' +
+                'shared hash) will be reported. Set to -1 to output everything. ' +
+                "(-1-1). Default: ${params.mashscreen_i}",
+            cliflag: '-i',
+            clivalue: (params.mashscreen_i ?: '')
+        ],
+        'mashscreen_v': [
+            clihelp: 'Maximum p-value to report (0-1). ' +
+                "Default: ${params.mashscreen_v}",
+            cliflag: '-v',
+            clivalue: (params.mashscreen_v ?: '')
+        ]
+    ]
+
+    toolspecs.each {
+        k, v -> tool.text['--' + k] = "${v.clihelp}"
+        tool.helpparams[k] = [ cliflag: "${v.cliflag}", clivalue: v.clivalue ]
+    }
+
+    return tool
+}
\ No newline at end of file
0.6.1/lib/help/mashsketch.nf
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/lib/help/mashsketch.nf
0.6.1/lib/help/mashsketch.nf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/lib/help/mashsketch.nf Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,151 @@
+// Help text for mash sketch within CPIPES.
+
+def mashsketchHelp(params) {
+
+    Map tool = [:]
+    Map toolspecs = [:]
+    tool.text = [:]
+    tool.helpparams = [:]
+
+    toolspecs = [
+        'mashsketch_run': [
+            clihelp: 'Run `mash screen` tool. Default: ' +
+                (params.mashsketch_run ?: false),
+            cliflag: null,
+            clivalue: null
+        ],
+        'mashsketch_l': [
+            clihelp: 'List input. Lines in each <input> specify paths to sequence files, ' +
+                'one per line. ' +
+                "Default: ${params.mashsketch_l}",
+            cliflag: '-l',
+            clivalue: (params.mashsketch_l ? ' ' : '')
+        ],
+        'mashsketch_I': [
+            clihelp: '<path>  ID field for sketch of reads (instead of first sequence ID). ' +
+                "Default: ${params.mashsketch_I}",
+            cliflag: '-I',
+            clivalue: (params.mashsketch_I ?: '')
+        ],
+        'mashsketch_C': [
+            clihelp: '<path>  Comment for a sketch of reads (instead of first sequence comment). ' +
+                "Default: ${params.mashsketch_C}",
+            cliflag: '-C',
+            clivalue: (params.mashsketch_C ?: '')
+        ],
+        'mashsketch_k': [
+            clihelp: '<int>   K-mer size. Hashes will be based on strings of this many ' +
+                'nucleotides. Canonical nucleotides are used by default (see ' +
+                'Alphabet options below). (1-32) ' +
+                "Default: ${params.mashsketch_k}",
+            cliflag: '-k',
+            clivalue: (params.mashsketch_k ?: '')
+        ],
+        'mashsketch_s': [
+            clihelp: '<int>   Sketch size. Each sketch will have at most this many non-redundant ' +
+                'min-hashes. ' +
+                "Default: ${params.mashsketch_s}",
+            cliflag: '-s',
+            clivalue: (params.mashsketch_s ?: '')
+        ],
+        'mashsketch_i': [
+            clihelp: 'Sketch individual sequences, rather than whole files, e.g. for ' +
+                'multi-fastas of single-chromosome genomes or pair-wise gene ' +
+                'comparisons. ' +
+                "Default: ${params.mashsketch_i}",
+            cliflag: '-i',
+            clivalue: (params.mashsketch_i ? ' ' : '')
+        ],
+        'mashsketch_S': [
+            clihelp: '<int>   Seed to provide to the hash function. (0-4294967296) [42] ' +
+                "Default: ${params.mashsketch_S}",
+            cliflag: '-S',
+            clivalue: (params.mashsketch_S ?: '')
+        ],
+
+        'mashsketch_w': [
+            clihelp: '<num>   Probability threshold for warning about low k-mer size. (0-1) ' +
+                "Default: ${params.mashsketch_w}",
+            cliflag: '-w',
+            clivalue: (params.mashsketch_w ?: '')
+        ],
+        'mashsketch_r': [
+            clihelp: 'Input is a read set. See Reads options below. Incompatible with ' +
+                '--mashsketch_i. ' +
+                "Default: ${params.mashsketch_r}",
+            cliflag: '-r',
+            clivalue: (params.mashsketch_r ? ' ' : '')
+        ],
+        'mashsketch_b': [
+            clihelp: '<size>  Use a Bloom filter of this size (raw bytes or with K/M/G/T) to ' +
+                'filter out unique k-mers. This is useful if exact filtering with ' +
+                '--mashsketch_m uses too much memory. However, some unique k-mers may pass ' +
+                'erroneously, and copies cannot be counted beyond 2. Implies --mashsketch_r. ' +
+                "Default: ${params.mashsketch_b}",
+            cliflag: '-b',
+            clivalue: (params.mashsketch_b ?: '')
+        ],
+        'mashsketch_m': [
+            clihelp: '<int>   Minimum copies of each k-mer required to pass noise filter for ' +
+                'reads. Implies --mashsketch_r. ' +
+                "Default: ${params.mashsketch_r}",
+            cliflag: '-m',
+            clivalue: (params.mashsketch_m ?: '')
+        ],
+        'mashsketch_c': [
+            clihelp: '<num>   Target coverage. Sketching will conclude if this coverage is ' +
+                'reached before the end of the input file (estimated by average ' +
+                'k-mer multiplicity). Implies --mashsketch_r. ' +
+                "Default: ${params.mashsketch_c}",
+            cliflag: '-c',
+            clivalue: (params.mashsketch_c ?: '')
+        ],
+        'mashsketch_g': [
+            clihelp: '<size>  Genome size (raw bases or with K/M/G/T). If specified, will be used ' +
+                'for p-value calculation instead of an estimated size from k-mer ' +
+                'content. Implies --mashsketch_r. ' +
+                "Default: ${params.mashsketch_g}",
+            cliflag: '-g',
+            clivalue: (params.mashsketch_g ?: '')
+        ],
+        'mashsketch_n': [
+            clihelp: 'Preserve strand (by default, strand is ignored by using canonical ' +
+                'DNA k-mers, which are alphabetical minima of forward-reverse ' +
+                'pairs). Implied if an alphabet is specified with --mashsketch_a ' +
+                'or --mashsketch_z. ' +
+                "Default: ${params.mashsketch_n}",
+            cliflag: '-n',
+            clivalue: (params.mashsketch_n ? ' ' : '')
+        ],
+        'mashsketch_a': [
+            clihelp: 'Use amino acid alphabet (A-Z, except BJOUXZ). Implies ' +
+                '--mashsketch_n --mashsketch_k 9. ' +
+                "Default: ${params.mashsketch_a}",
+            cliflag: '-a',
+            clivalue: (params.mashsketch_a ? ' ' : '')
+        ],
+        'mashsketch_z': [
+            clihelp: '<text>  Alphabet to base hashes on (case ignored by default; ' +
+                'see --mashsketch_Z). K-mers with other characters will be ' +
+                'ignored. Implies --mashsketch_n. ' +
+                "Default: ${params.mashsketch_z}",
+            cliflag: '-z',
+            clivalue: (params.mashsketch_z ?: '')
+        ],
+        'mashsketch_Z': [
+            clihelp: 'Preserve case in k-mers and alphabet (case is ignored by default). ' +
+                'Sequence letters whose case is not in the current alphabet will be ' +
+                'skipped when sketching. ' +
+                "Default: ${params.mashsketch_Z}",
+            cliflag: '-Z',
+            clivalue: (params.mashsketch_Z ?: '')
+        ]
+    ]
+
+    toolspecs.each {
+        k, v -> tool.text['--' + k] = "${v.clihelp}"
+        tool.helpparams[k] = [ cliflag: "${v.cliflag}", clivalue: v.clivalue ]
+    }
+
+    return tool
+}
\ No newline at end of file
0.6.1/lib/help/megahit.nf
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/lib/help/megahit.nf
0.6.1/lib/help/megahit.nf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/lib/help/megahit.nf Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,113 @@
+// Help text for megahit within CPIPES.
+
+def megahitHelp(params) {
+
+    Map tool = [:]
+    Map toolspecs = [:]
+    tool.text = [:]
+    tool.helpparams = [:]
+
+    toolspecs = [
+        'megahit_run': [
+            clihelp: 'Run MEGAHIT assembler. Default: ' +
+                (params.megahit_run ?: false),
+            cliflag: null,
+            clivalue: null
+        ],
+        'megahit_min_count': [
+            clihelp: '<int>. Minimum multiplicity for filtering (k_min+1)-mers. ' +
+                "Default: ${params.megahit_min_count}",
+            cliflag: '--min-count',
+            clivalue: (params.megahit_min_count ?: '')
+        ], 
+        'megahit_k_list': [
+            clihelp: 'Comma-separated list of kmer size. All values must be odd, in ' + 
+                "the range 15-255, increment should be <= 28. Ex: '21,29,39,59,79,99,119,141'. " +
+                "Default: ${params.megahit_k_list}",
+            cliflag: '--k-list',
+            clivalue: (params.megahit_k_list ?: '')
+        ],
+        'megahit_no_mercy': [
+            clihelp: 'Do not add mercy k-mers. ' +
+                "Default: ${params.megahit_no_mercy}",
+            cliflag: '--no-mercy',
+            clivalue: (params.megahit_no_mercy ? ' ' : '')
+        ],
+        'megahit_bubble_level': [
+            clihelp: '<int>. Intensity of bubble merging (0-2), 0 to disable. ' +
+                "Default: ${params.megahit_bubble_level}",
+            cliflag: '--bubble-level',
+            clivalue: (params.megahit_bubble_level ?: '')
+        ],
+        'megahit_merge_level': [
+            clihelp: '<l,s>. Merge complex bubbles of length <= l*kmer_size and ' +
+                "similarity >= s. Default: ${params.megahit_merge_level}",
+            cliflag: '--merge-level',
+            clivalue: (params.megahit_merge_level ?: '')
+        ],
+        'megahit_prune_level': [
+            clihelp: '<int>. Strength of low depth pruning (0-3). ' +
+                "Default: ${params.megahit_prune_level}",
+            cliflag: '--prune-level',
+            clivalue: (params.megahit_prune_level ?: '')
+        ],
+        'megahit_prune_depth': [
+            clihelp: '<int>. Remove unitigs with avg k-mer depth less than this value. ' +
+                "Default: ${params.megahit_prune_depth}",
+            cliflag: '--prune-depth',
+            clivalue: (params.megahit_prune_depth ?: '')
+        ],
+        'megahit_low_local_ratio': [
+            clihelp: '<float>. Ratio threshold to define low local coverage contigs. ' +
+                "Default: ${params.megahit_low_local_ratio}",
+            cliflag: '--low-local-ratio',
+            clivalue: (params.megahit_low_local_ratio ?: '')
+        ],
+        'megahit_max_tip_len': [
+            clihelp: '<int>. remove tips less than this value [<int> * k]. ' +
+                "Default: ${params.megahit_max_tip_len}",
+            cliflag: '--max-tip-len',
+            clivalue: (params.megahit_max_tip_len ?: '')
+        ],
+        'megahit_no_local': [
+            clihelp: 'Disable local assembly. ' +
+                "Default: ${params.megahit_no_local}",
+            cliflag: '--no-local',
+            clivalue: (params.megahit_no_local ? ' ' : '')
+        ],
+        'megahit_kmin_1pass': [
+            clihelp: 'Use 1pass mode to build SdBG of k_min. ' +
+                "Default: ${params.megahit_kmin_1pass}",
+            cliflag: '--kmin-1pass',
+            clivalue: (params.megahit_kmin_1pass ? ' ' : '')
+        ],
+        'megahit_preset': [
+            clihelp: '<str>. Override a group of parameters. Valid values are '+
+                "meta-sensitive which enforces '--min-count 1 --k-list 21,29,39,49,...,129,141', " +
+                'meta-large (large & complex metagenomes, like soil) which enforces ' +
+                "'--k-min 27 --k-max 127 --k-step 10'. " +
+                "Default: ${params.megahit_preset}",
+            cliflag: '--preset',
+            clivalue: (params.megahit_preset ?: '')
+        ],
+        'megahit_mem_flag': [
+            clihelp: '<int>. SdBG builder memory mode. 0: minimum; 1: moderate; 2: use all memory specified. ' +
+                "Default: ${params.megahit_mem_flag}",
+            cliflag: '--mem-flag',
+            clivalue: (params.megahit_mem_flag ?: '')
+        ],
+        'megahit_min_contig_len': [
+            clihelp: '<int>.  Minimum length of contigs to output. ' +
+                "Default: ${params.megahit_min_contig_len}",
+            cliflag: '--use-gpu',
+            clivalue: (params.megahit_min_contig_len ?: '')
+        ]
+    ]
+
+    toolspecs.each {
+        k, v -> tool.text['--' + k] = "${v.clihelp}"
+        tool.helpparams[k] = [ cliflag: "${v.cliflag}", clivalue: v.clivalue ]
+    }
+
+    return tool
+}
\ No newline at end of file
0.6.1/lib/help/mlst.nf
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/lib/help/mlst.nf
0.6.1/lib/help/mlst.nf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/lib/help/mlst.nf Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,52 @@
+def mlstHelp(params) {
+
+    Map tool = [:]
+    Map toolspecs = [:]
+    tool.text = [:]
+    tool.helpparams = [:]
+
+    toolspecs = [
+        'mlst_run': [
+            clihelp: "Run MLST tool. Default: ${params.mlst_run}",
+            cliflag: null,
+            clivalue: null
+        ],
+        'mlst_legacy': [
+            clihelp: "Use old legacy output with allele header row (requires --mlst_scheme). " +
+                "Default: ${params.mlst_legacy}",
+            cliflag: '--legacy',
+            clivalue: (params.mlst_legacy ? ' ' : '')
+        ],
+        'mlst_scheme': [
+            clihelp: "Don't autodetect, force this scheme on all inputs. " +
+                "Default: ${params.mlst_scheme}",
+            cliflag: '--scheme',
+            clivalue: (params.mlst_scheme ?: null)
+        ],
+        'mlst_minid': [
+            clihelp: "DNA %identity of full allelle to consider 'similar' [~]. " +
+                "Default: ${params.mlst_minid}",
+            cliflag: '--minid',
+            clivalue: (params.mlst_minid ?: 95)
+        ],
+        'mlst_mincov': [
+            clihelp: 'DNA %cov to report partial allele at all [?].' +
+                "Default: ${params.mlst_mincov}",
+            cliflag: '--mincov',
+            clivalue: (params.mlst_mincov ?: 10)
+        ],
+        'mlst_minscore': [
+            clihelp: 'Minumum score out of 100 to match a scheme.' +
+                "Default: ${params.mlst_minscore}",
+            cliflag: '--minscore',
+            clivalue: (params.mlst_minscore ?: 50)
+        ]
+    ]
+
+    toolspecs.each {
+        k, v -> tool.text['--' + k] = "${v.clihelp}"
+        tool.helpparams[k] = [ cliflag: "${v.cliflag}", clivalue: v.clivalue ]
+    }
+
+    return tool
+}
\ No newline at end of file
0.6.1/lib/help/salmonidx.nf
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/lib/help/salmonidx.nf
0.6.1/lib/help/salmonidx.nf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/lib/help/salmonidx.nf Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,91 @@
+// Help text for salmon index within CPIPES.
+
+def salmonidxHelp(params) {
+
+    Map tool = [:]
+    Map toolspecs = [:]
+    tool.text = [:]
+    tool.helpparams = [:]
+
+    toolspecs = [
+        'salmonidx_run': [
+            clihelp: 'Run `salmon index` tool. Default: ' +
+                (params.salmonidx_run ?: false),
+            cliflag: null,
+            clivalue: null
+        ],
+        'salmonidx_k': [
+            clihelp: 'The size of k-mers that should be used for the ' +
+                " quasi index. Default: ${params.salmonidx_k}",
+            cliflag: '-k',
+            clivalue: (params.salmonidx_k ?: '')
+        ],
+        'salmonidx_gencode': [
+            clihelp: 'This flag will expect the input transcript FASTA ' +
+                'to be in GENCODE format, and will split the transcript ' +
+                'name at the first `|` character. These reduced names ' +
+                'will be used in the output and when looking for these ' +
+                'transcripts in a gene to transcript GTF.' +
+                " Default: ${params.salmonidx_gencode}",
+            cliflag: '--gencode',
+            clivalue: (params.salmonidx_gencode ? ' ' : '')
+        ],
+        'salmonidx_features': [
+            clihelp: 'This flag will expect the input reference to be in the ' +
+                'tsv file format, and will split the feature name at the first ' +
+                '`tab` character. These reduced names will be used in the output ' +
+                'and when looking for the sequence of the features. GTF.' +
+                " Default: ${params.salmonidx_features}",
+            cliflag: '--features',
+            clivalue: (params.salmonidx_features ? ' ' : '')
+        ],
+        'salmonidx_keepDuplicates': [
+            clihelp: 'This flag will disable the default indexing behavior of ' +
+                'discarding sequence-identical duplicate transcripts. If this ' +
+                'flag is passed then duplicate transcripts that appear in the ' +
+                'input will be retained and quantified separately.' +
+                " Default: ${params.salmonidx_keepDuplicates}",
+            cliflag: '--keepDuplicates',
+            clivalue: (params.salmonidx_keepDuplicates ? ' ' : '')
+        ],
+        'salmonidx_keepFixedFasta': [
+            clihelp: 'Retain the fixed fasta file (without short ' +
+                'transcripts and duplicates, clipped, etc.) generated ' +
+                "during indexing. Default: ${params.salmonidx_keepFixedFasta}",
+            cliflag: '--keepFixedFasta',
+            clivalue: (params.salmonidx_keepFixedFasta ?: '')
+        ],
+        'salmonidx_filterSize': [
+            clihelp: 'The size of the Bloom filter that will be used ' +
+                'by TwoPaCo during indexing. The filter will be of ' +
+                'size 2^{filterSize}. A value of -1 means that the ' +
+                'filter size will be automatically set based on the ' +
+                'number of distinct k-mers in the input, as estimated by ' +
+                "nthll. Default: ${params.salmonidx_filterSize}",
+            cliflag: '--filterSize',
+            clivalue: (params.salmonidx_filterSize ?: '')
+        ],
+        'salmonidx_sparse': [
+            clihelp: 'Build the index using a sparse sampling of k-mer ' +
+                'positions This will require less memory (especially ' +
+                'during quantification), but will take longer to construct' +
+                'and can slow down mapping / alignment.' +
+                " Default: ${params.salmonidx_sparse}",
+            cliflag: '--sparse',
+            clivalue: (params.salmonidx_sparse ? ' ' : '')
+        ],
+        'salmonidx_n': [
+            clihelp: 'Do not clip poly-A tails from the ends of target ' +
+                "sequences. Default: ${params.salmonidx_n}",
+            cliflag: '-n',
+            clivalue: (params.salmonidx_n ? ' ' : '')
+        ]
+    ]
+
+    toolspecs.each {
+        k, v -> tool.text['--' + k] = "${v.clihelp}"
+        tool.helpparams[k] = [ cliflag: "${v.cliflag}", clivalue: v.clivalue ]
+    }
+
+    return tool
+}
\ No newline at end of file
0.6.1/lib/help/seqkitgrep.nf
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/lib/help/seqkitgrep.nf
0.6.1/lib/help/seqkitgrep.nf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/lib/help/seqkitgrep.nf Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,69 @@
+// Help text for seqkit grep within CPIPES.
+
+def seqkitgrepHelp(params) {
+
+    Map tool = [:]
+    Map toolspecs = [:]
+    tool.text = [:]
+    tool.helpparams = [:]
+
+    toolspecs = [
+        'seqkit_grep_n': [
+            clihelp: 'Match by full name instead of just ID. ' +
+                "Default: " + (params.seqkit_grep_n ?: 'undefined'),
+            cliflag: '--seqkit_grep_n',
+            clivalue: (params.seqkit_grep_n ? ' ' : '')
+        ], 
+        'seqkit_grep_s': [
+            clihelp: 'Search subseq on seq, both positive and negative ' +
+                'strand are searched, and mismatch allowed using flag --seqkit_grep_m. ' +
+                "Default: " + (params.seqkit_grep_s ?: 'undefined'),
+            cliflag: '--seqkit_grep_s',
+            clivalue: (params.seqkit_grep_s ? ' ' : '')
+        ],
+        'seqkit_grep_c': [
+            clihelp: 'Input is circular genome ' +
+                "Default: " + (params.seqkit_grep_c ?: 'undefined'),
+            cliflag: '--seqkit_grep_c',
+            clivalue: (params.seqkit_grep_c ? ' ' : '')
+        ],
+        'seqkit_grep_C': [
+            clihelp: 'Just print a count of matching records. With the ' +
+                '--seqkit_grep_v flag, count non-matching records. ' +
+                "Default: " + (params.seqkit_grep_v ?: 'undefined'),
+            cliflag: '--seqkit_grep_v',
+            clivalue: (params.seqkit_grep_v ? ' ' : '')
+        ],
+        'seqkit_grep_i': [
+            clihelp: 'Ignore case while using seqkit grep. ' +
+                "Default: " + (params.seqkit_grep_i ?: 'undefined'),
+            cliflag: '--seqkit_grep_i',
+            clivalue: (params.seqkit_grep_i ? ' ' : '')
+        ],
+        'seqkit_grep_v': [
+            clihelp: 'Invert the match i.e. select non-matching records. ' +
+                "Default: " + (params.seqkit_grep_v ?: 'undefined'),
+            cliflag: '--seqkit_grep_v',
+            clivalue: (params.seqkit_grep_v ? ' ' : '')
+        ],
+        'seqkit_grep_m': [
+            clihelp: 'Maximum mismatches when matching by sequence. ' +
+                "Default: " + (params.seqkit_grep_m ?: 'undefined'),
+            cliflag: '--seqkit_grep_m',
+            clivalue: (params.seqkit_grep_v ?: '')
+        ],
+        'seqkit_grep_r': [
+            clihelp: 'Input patters are regular expressions. ' +
+                "Default: " + (params.seqkit_grep_m ?: 'undefined'),
+            cliflag: '--seqkit_grep_m',
+            clivalue: (params.seqkit_grep_v ?: '')
+        ]
+    ]
+
+    toolspecs.each {
+        k, v -> tool.text['--' + k] = "${v.clihelp}"
+        tool.helpparams[k] = [ cliflag: "${v.cliflag}", clivalue: v.clivalue ]
+    }
+
+    return tool
+}
\ No newline at end of file
0.6.1/lib/help/seqkitrmdup.nf
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/lib/help/seqkitrmdup.nf
0.6.1/lib/help/seqkitrmdup.nf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/lib/help/seqkitrmdup.nf Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,61 @@
+// Help text for seqkit rmdup within CPIPES.
+
+def seqkitrmdupHelp(params) {
+
+    Map tool = [:]
+    Map toolspecs = [:]
+    tool.text = [:]
+    tool.helpparams = [:]
+
+    toolspecs = [
+        'seqkit_rmdup_run': [
+            clihelp: 'Remove duplicate sequences using seqkit rmdup. Default: ' +
+                (params.seqkit_rmdup_run ?: false),
+            cliflag: null,
+            clivalue: null
+        ],
+        'seqkit_rmdup_n': [
+            clihelp: 'Match and remove duplicate sequences by full name instead of just ID. ' +
+                "Default: ${params.seqkit_rmdup_n}",
+            cliflag: '-n',
+            clivalue: (params.seqkit_rmdup_n ? ' ' : '')
+        ], 
+        'seqkit_rmdup_s': [
+            clihelp: 'Match and remove duplicate sequences by sequence content. ' +
+                "Default: ${params.seqkit_rmdup_s}",
+            cliflag: '-s',
+            clivalue: (params.seqkit_rmdup_s ? ' ' : '')
+        ],
+        'seqkit_rmdup_d': [
+            clihelp: 'Save the duplicated sequences to a file. ' +
+                "Default: ${params.seqkit_rmdup_d}",
+            cliflag: null,
+            clivalue: null
+        ],
+        'seqkit_rmdup_D': [
+            clihelp: 'Save the number and list of duplicated sequences to a file. ' +
+                "Default: ${params.seqkit_rmdup_D}",
+            cliflag: null,
+            clivalue: null
+        ],
+        'seqkit_rmdup_i': [
+            clihelp: 'Ignore case while using seqkit rmdup. ' +
+                "Default: ${params.seqkit_rmdup_i}",
+            cliflag: '-i',
+            clivalue: (params.seqkit_rmdup_i ? ' ' : '')
+        ],
+        'seqkit_rmdup_P': [
+            clihelp: "Only consider positive strand (i.e. 5') when comparing by sequence content. " +
+                "Default: ${params.seqkit_rmdup_P}",
+            cliflag: '-P',
+            clivalue: (params.seqkit_rmdup_P ? ' ' : '')
+        ]
+    ]
+
+    toolspecs.each {
+        k, v -> tool.text['--' + k] = "${v.clihelp}"
+        tool.helpparams[k] = [ cliflag: "${v.cliflag}", clivalue: v.clivalue ]
+    }
+
+    return tool
+}
\ No newline at end of file
0.6.1/lib/help/seqsero2.nf
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/lib/help/seqsero2.nf
0.6.1/lib/help/seqsero2.nf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/lib/help/seqsero2.nf Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,50 @@
+def seqsero2Help(params) {
+
+    Map tool = [:]
+    Map toolspecs = [:]
+    tool.text = [:]
+    tool.helpparams = [:]
+
+    toolspecs = [
+        'seqsero2_run': [
+            clihelp: "Run SeqSero2 tool. Default: ${params.seqsero2_run}",
+            cliflag: null,
+            clivalue: null
+        ],
+        'seqsero2_t': [
+            clihelp: "'1' for interleaved paired-end reads, '2' for " +
+                "separated paired-end reads, '3' for single reads, '4' for " +
+                "genome assembly, '5' for nanopore reads (fasta/fastq). " +
+                "Default: ${params.seqsero2_t}",
+            cliflag: '-t',
+            clivalue: (params.seqsero2_t ?: '')
+        ],
+        'seqsero2_m': [
+            clihelp: "Which workflow to apply, 'a'(raw reads allele " +
+                "micro-assembly), 'k'(raw reads and genome assembly k-mer). " +
+                "Default: ${params.seqsero2_m}",
+            cliflag: '-m',
+            clivalue: (params.seqsero2_m ?: '')
+        ],
+        'seqsero2_c': [
+            clihelp: 'SeqSero2 will only output serotype prediction without the directory ' +
+                'containing log files. ' +
+                "Default: ${params.seqsero2_c}",
+            cliflag: '-c',
+            clivalue: (params.seqsero2_c ? ' ' : '')
+        ],
+        'seqsero2_s': [
+            clihelp: 'SeqSero2 will not output header in SeqSero_result.tsv. ' +
+                "Default: ${params.seqsero2_s}",
+            cliflag: '-l',
+            clivalue: (params.seqsero2_s ? ' ' : '')
+        ]
+    ]
+
+    toolspecs.each {
+        k, v -> tool.text['--' + k] = "${v.clihelp}"
+        tool.helpparams[k] = [ cliflag: "${v.cliflag}", clivalue: v.clivalue ]
+    }
+
+    return tool
+}
\ No newline at end of file
0.6.1/lib/help/serotypefinder.nf
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/lib/help/serotypefinder.nf
0.6.1/lib/help/serotypefinder.nf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/lib/help/serotypefinder.nf Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,46 @@
+def serotypefinderHelp(params) {
+
+    Map tool = [:]
+    Map toolspecs = [:]
+    tool.text = [:]
+    tool.helpparams = [:]
+
+    toolspecs = [
+        'serotypefinder_run': [
+            clihelp: "Run SerotypeFinder tool. Default: ${params.serotypefinder_run}",
+            cliflag: null,
+            clivalue: null
+        ],
+        'serotypefinder_x': [
+            clihelp: 'Generate extended output files. ' +
+                "Default: ${params.serotypefinder_x}",
+            cliflag: '-x',
+            clivalue: (params.serotypefinder_x ? ' ' : '')
+        ],
+        'serotypefinder_db': [
+            clihelp: 'Path to SerotypeFinder databases. ' +
+                "Default: ${params.serotypefinder_db}",
+            cliflag: '-p',
+            clivalue: null
+        ],
+        'serotypefinder_min_threshold': [
+            clihelp: 'Minimum percent identity (in float) required for calling a hit. ' +
+                "Default: ${params.serotypefinder_min_threshold}",
+            cliflag: '-t',
+            clivalue: (params.serotypefinder_min_threshold ?: '')
+        ],
+        'serotypefinder_min_cov': [
+            clihelp: 'Minumum percent coverage (in float) required for calling a hit. ' +
+                "Default: ${params.serotypefinder_min_cov}",
+            cliflag: '-l',
+            clivalue: (params.serotypefinder_min_cov ?: '')
+        ]
+    ]
+
+    toolspecs.each {
+        k, v -> tool.text['--' + k] = "${v.clihelp}"
+        tool.helpparams[k] = [ cliflag: "${v.cliflag}", clivalue: v.clivalue ]
+    }
+
+    return tool
+}
\ No newline at end of file
0.6.1/lib/help/sfhpy.nf
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/lib/help/sfhpy.nf
0.6.1/lib/help/sfhpy.nf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/lib/help/sfhpy.nf Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,52 @@
+// Help text for sourmash_filter_hits.py (sfhpy) within CPIPES.
+def sfhpyHelp(params) {
+
+    Map tool = [:]
+    Map toolspecs = [:]
+    tool.text = [:]
+    tool.helpparams = [:]
+
+    toolspecs = [
+        'sfhpy_run': [
+            clihelp: 'Run the sourmash_filter_hits.py ' +
+                'script. Default: ' +
+                (params.sfhpy_run ?: false),
+            cliflag: null,
+            clivalue: null
+        ],
+        'sfhpy_fcn': [
+            clihelp: 'Column name by which filtering of rows should be applied. ' +
+                "Default: ${params.sfhpy_fcn}",
+            cliflag: '-fcn',
+            clivalue: (params.sfhpy_fcn ?: '')
+        ],
+        'sfhpy_fcv': [
+            clihelp: 'Remove genomes whose match with the query FASTQ is less than ' +
+                'this much. ' +
+                "Default: ${params.sfhpy_fcv}",
+            cliflag: '-fcv',
+            clivalue: (params.sfhpy_fcv ?: '')
+        ],
+        'sfhpy_gt': [
+            clihelp: 'Apply greather than or equal to condition on numeric values of ' +
+                '--sfhpy_fcn column. ' +
+                "Default: ${params.sfhpy_gt}",
+            cliflag: '-gt',
+            clivalue: (params.sfhpy_gt ? ' ' : '')
+        ],
+        'sfhpy_lt': [
+            clihelp: 'Apply less than or equal to condition on numeric values of ' +
+                '--sfhpy_fcn column. ' +
+                "Default: ${params.sfhpy_lt}",
+            cliflag: '-gt',
+            clivalue: (params.sfhpy_lt ? ' ' : '')
+        ],
+    ]
+
+    toolspecs.each {
+        k, v -> tool.text['--' + k] = "${v.clihelp}"
+        tool.helpparams[k] = [ cliflag: "${v.cliflag}", clivalue: v.clivalue ]
+    }
+
+    return tool
+}
\ No newline at end of file
0.6.1/lib/help/sourmashgather.nf
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/lib/help/sourmashgather.nf
0.6.1/lib/help/sourmashgather.nf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/lib/help/sourmashgather.nf Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,134 @@
+// Help text for sourmash gather within CPIPES.
+
+def sourmashgatherHelp(params) {
+
+    Map tool = [:]
+    Map toolspecs = [:]
+    tool.text = [:]
+    tool.helpparams = [:]
+
+    toolspecs = [
+        'sourmashgather_run': [
+            clihelp: 'Run `sourmash gather` tool. Default: ' +
+                (params.sourmashgather_run ?: false),
+            cliflag: null,
+            clivalue: null
+        ],
+        'sourmashgather_n': [
+            clihelp: 'Number of results to report. ' +
+                'By default, will terminate at --sourmashgather_thr_bp value. ' +
+                "Default: ${params.sourmashgather_n}",
+            cliflag: '-n',
+            clivalue: (params.sourmashgather_n ?: '')
+        ],
+        'sourmashgather_thr_bp': [
+            clihelp: 'Reporting threshold (in bp) for estimated overlap with remaining query. ' +
+                "Default: ${params.sourmashgather_thr_bp}",
+            cliflag: '--threshold-bp',
+            clivalue: (params.sourmashgather_thr_bp ?: '')
+        ],
+        'sourmashgather_ignoreabn': [
+            clihelp: 'Do NOT use k-mer abundances if present. ' +
+                "Default: ${params.sourmashgather_ignoreabn}",
+            cliflag: '--ignore-abundance',
+            clivalue: (params.sourmashgather_ignoreabn ? ' ' : '')
+        ],
+        'sourmashgather_prefetch': [
+            clihelp: 'Use prefetch before gather. ' +
+                "Default: ${params.sourmashgather_prefetch}",
+            cliflag: '--prefetch',
+            clivalue: (params.sourmashgather_prefetch ? ' ' : '')
+        ],
+        'sourmashgather_noprefetch': [
+            clihelp: 'Do not use prefetch before gather. ' +
+                "Default: ${params.sourmashgather_noprefetch}",
+            cliflag: '--no-prefetch',
+            clivalue: (params.sourmashgather_noprefetch ? ' ' : '')
+        ],
+        'sourmashgather_ani_ci': [
+            clihelp: 'Output confidence intervals for ANI estimates. ' +
+                "Default: ${params.sourmashgather_ani_ci}",
+            cliflag: '--estimate-ani-ci',
+            clivalue: (params.sourmashgather_ani_ci ? ' ' : '')
+        ],
+        'sourmashgather_k': [
+            clihelp: 'The k-mer size to select. ' +
+                "Default: ${params.sourmashgather_k}",
+            cliflag: '-k',
+            clivalue: (params.sourmashgather_k ?: '')
+        ],
+        'sourmashgather_protein': [
+            clihelp: 'Choose a protein signature. ' +
+                "Default: ${params.sourmashgather_protein}",
+            cliflag: '--protein',
+            clivalue: (params.sourmashgather_protein ? ' ' : '')
+        ],
+        'sourmashgather_noprotein': [
+            clihelp: 'Do not choose a protein signature. ' +
+                "Default: ${params.sourmashgather_noprotein}",
+            cliflag: '--no-protein',
+            clivalue: (params.sourmashgather_noprotein ? ' ' : '')
+        ],
+        'sourmashgather_dayhoff': [
+            clihelp: 'Choose Dayhoff-encoded amino acid signatures. ' +
+                "Default: ${params.sourmashgather_dayhoff}",
+            cliflag: '--dayhoff',
+            clivalue: (params.sourmashgather_dayhoff ? ' ' : '')
+        ],
+        'sourmashgather_nodayhoff': [
+            clihelp: 'Do not choose Dayhoff-encoded amino acid signatures. ' +
+                "Default: ${params.sourmashgather_nodayhoff}",
+            cliflag: '--no-dayhoff',
+            clivalue: (params.sourmashgather_nodayhoff ? ' ' : '')
+        ],
+        'sourmashgather_hp': [
+            clihelp: 'Choose hydrophobic-polar-encoded amino acid signatures. ' +
+                "Default: ${params.sourmashgather_hp}",
+            cliflag: '--hp',
+            clivalue: (params.sourmashgather_hp ? ' ' : '')
+        ],
+        'sourmashgather_nohp': [
+            clihelp: 'Do not choose hydrophobic-polar-encoded amino acid signatures. ' +
+                "Default: ${params.sourmashgather_nohp}",
+            cliflag: '--no-hp',
+            clivalue: (params.sourmashgather_nohp ? ' ' : '')
+        ],
+        'sourmashgather_dna': [
+            clihelp: 'Choose DNA signature. ' +
+                "Default: ${params.sourmashgather_dna}",
+            cliflag: '--dna',
+            clivalue: (params.sourmashgather_dna ? ' ' : '')
+        ],
+        'sourmashgather_nodna': [
+            clihelp: 'Do not choose DNA signature. ' +
+                "Default: ${params.sourmashgather_nodna}",
+            cliflag: '--no-dna',
+            clivalue: (params.sourmashgather_nodna ? ' ' : '')
+        ],
+        'sourmashgather_scaled': [
+            clihelp: 'Scaled value should be between 100 and 1e6. ' +
+                "Default: ${params.sourmashgather_scaled}",
+            cliflag: '--scaled',
+            clivalue: (params.sourmashgather_scaled ?: '')
+        ],
+        'sourmashgather_inc_pat': [
+            clihelp: 'Search only signatures that match this pattern in name, filename, or md5. ' +
+                "Default: ${params.sourmashgather_inc_pat}",
+            cliflag: '--include-db-pattern',
+            clivalue: (params.sourmashgather_inc_pat ?: '')
+        ],
+        'sourmashgather_exc_pat': [
+            clihelp: 'Search only signatures that do not match this pattern in name, filename, or md5. ' +
+                "Default: ${params.sourmashgather_exc_pat}",
+            cliflag: '--exclude-db-pattern',
+            clivalue: (params.sourmashgather_exc_pat ?: '')
+        ]
+    ]
+
+    toolspecs.each {
+        k, v -> tool.text['--' + k] = "${v.clihelp}"
+        tool.helpparams[k] = [ cliflag: "${v.cliflag}", clivalue: v.clivalue ]
+    }
+
+    return tool
+}
\ No newline at end of file
0.6.1/lib/help/sourmashsearch.nf
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/lib/help/sourmashsearch.nf
0.6.1/lib/help/sourmashsearch.nf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/lib/help/sourmashsearch.nf Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,134 @@
+// Help text for sourmash search within CPIPES.
+
+def sourmashsearchHelp(params) {
+
+    Map tool = [:]
+    Map toolspecs = [:]
+    tool.text = [:]
+    tool.helpparams = [:]
+
+    toolspecs = [
+        'sourmashsearch_run': [
+            clihelp: 'Run `sourmash search` tool. Default: ' +
+                (params.sourmashsearch_run ?: false),
+            cliflag: null,
+            clivalue: null
+        ],
+        'sourmashsearch_n': [
+            clihelp: 'Number of results to report. ' +
+                'By default, will terminate at --sourmashsearch_thr value. ' +
+                "Default: ${params.sourmashsearch_n}",
+            cliflag: '-n',
+            clivalue: (params.sourmashsearch_n ?: '')
+        ],
+        'sourmashsearch_thr': [
+            clihelp: 'Reporting threshold (similarity) to return results. ' +
+                "Default: ${params.sourmashsearch_thr}",
+            cliflag: '--threshold',
+            clivalue: (params.sourmashsearch_thr ?: '')
+        ],
+        'sourmashsearch_contain': [
+            clihelp: 'Score based on containment rather than similarity. ' +
+                "Default: ${params.sourmashsearch_contain}",
+            cliflag: '--containment',
+            clivalue: (params.sourmashsearch_contain ? ' ' : '')
+        ],
+        'sourmashsearch_maxcontain': [
+            clihelp: 'Score based on max containment rather than similarity. ' +
+                "Default: ${params.sourmashsearch_contain}",
+            cliflag: '--max-containment',
+            clivalue: (params.sourmashsearch_maxcontain ? ' ' : '')
+        ],
+        'sourmashsearch_ignoreabn': [
+            clihelp: 'Do NOT use k-mer abundances if present. ' +
+                "Default: ${params.sourmashsearch_ignoreabn}",
+            cliflag: '--ignore-abundance',
+            clivalue: (params.sourmashsearch_ignoreabn ? ' ' : '')
+        ],
+        'sourmashsearch_ani_ci': [
+            clihelp: 'Output confidence intervals for ANI estimates. ' +
+                "Default: ${params.sourmashsearch_ani_ci}",
+            cliflag: '--estimate-ani-ci',
+            clivalue: (params.sourmashsearch_ani_ci ? ' ' : '')
+        ],
+        'sourmashsearch_k': [
+            clihelp: 'The k-mer size to select. ' +
+                "Default: ${params.sourmashsearch_k}",
+            cliflag: '-k',
+            clivalue: (params.sourmashsearch_k ?: '')
+        ],
+        'sourmashsearch_protein': [
+            clihelp: 'Choose a protein signature. ' +
+                "Default: ${params.sourmashsearch_protein}",
+            cliflag: '--protein',
+            clivalue: (params.sourmashsearch_protein ? ' ' : '')
+        ],
+        'sourmashsearch_noprotein': [
+            clihelp: 'Do not choose a protein signature. ' +
+                "Default: ${params.sourmashsearch_noprotein}",
+            cliflag: '--no-protein',
+            clivalue: (params.sourmashsearch_noprotein ? ' ' : '')
+        ],
+        'sourmashsearch_dayhoff': [
+            clihelp: 'Choose Dayhoff-encoded amino acid signatures. ' +
+                "Default: ${params.sourmashsearch_dayhoff}",
+            cliflag: '--dayhoff',
+            clivalue: (params.sourmashsearch_dayhoff ? ' ' : '')
+        ],
+        'sourmashsearch_nodayhoff': [
+            clihelp: 'Do not choose Dayhoff-encoded amino acid signatures. ' +
+                "Default: ${params.sourmashsearch_nodayhoff}",
+            cliflag: '--no-dayhoff',
+            clivalue: (params.sourmashsearch_nodayhoff ? ' ' : '')
+        ],
+        'sourmashsearch_hp': [
+            clihelp: 'Choose hydrophobic-polar-encoded amino acid signatures. ' +
+                "Default: ${params.sourmashsearch_hp}",
+            cliflag: '--hp',
+            clivalue: (params.sourmashsearch_hp ? ' ' : '')
+        ],
+        'sourmashsearch_nohp': [
+            clihelp: 'Do not choose hydrophobic-polar-encoded amino acid signatures. ' +
+                "Default: ${params.sourmashsearch_nohp}",
+            cliflag: '--no-hp',
+            clivalue: (params.sourmashsearch_nohp ? ' ' : '')
+        ],
+        'sourmashsearch_dna': [
+            clihelp: 'Choose DNA signature. ' +
+                "Default: ${params.sourmashsearch_dna}",
+            cliflag: '--dna',
+            clivalue: (params.sourmashsearch_dna ? ' ' : '')
+        ],
+        'sourmashsearch_nodna': [
+            clihelp: 'Do not choose DNA signature. ' +
+                "Default: ${params.sourmashsearch_nodna}",
+            cliflag: '--no-dna',
+            clivalue: (params.sourmashsearch_nodna ? ' ' : '')
+        ],
+        'sourmashsearch_scaled': [
+            clihelp: 'Scaled value should be between 100 and 1e6. ' +
+                "Default: ${params.sourmashsearch_scaled}",
+            cliflag: '--scaled',
+            clivalue: (params.sourmashsearch_scaled ?: '')
+        ],
+        'sourmashsearch_inc_pat': [
+            clihelp: 'Search only signatures that match this pattern in name, filename, or md5. ' +
+                "Default: ${params.sourmashsearch_inc_pat}",
+            cliflag: '--include-db-pattern',
+            clivalue: (params.sourmashsearch_inc_pat ?: '')
+        ],
+        'sourmashsearch_exc_pat': [
+            clihelp: 'Search only signatures that do not match this pattern in name, filename, or md5. ' +
+                "Default: ${params.sourmashsearch_exc_pat}",
+            cliflag: '--exclude-db-pattern',
+            clivalue: (params.sourmashsearch_exc_pat ?: '')
+        ]
+    ]
+
+    toolspecs.each {
+        k, v -> tool.text['--' + k] = "${v.clihelp}"
+        tool.helpparams[k] = [ cliflag: "${v.cliflag}", clivalue: v.clivalue ]
+    }
+
+    return tool
+}
\ No newline at end of file
0.6.1/lib/help/sourmashsigkmers.nf
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/lib/help/sourmashsigkmers.nf
0.6.1/lib/help/sourmashsigkmers.nf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/lib/help/sourmashsigkmers.nf Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,97 @@
+// Help text for sourmash sigkmers within CPIPES.
+
+def sourmashsigkmersHelp(params) {
+
+    Map tool = [:]
+    Map toolspecs = [:]
+    tool.text = [:]
+    tool.helpparams = [:]
+
+    toolspecs = [
+        'sourmashsigkmers_run': [
+            clihelp: 'Run `sourmash sigkmers` tool. Default: ' +
+                (params.sourmashsigkmers_run ?: false),
+            cliflag: null,
+            clivalue: null
+        ],
+        'sourmashsigkmers_k': [
+            clihelp: 'The k-mer size to select. ' +
+                "Default: ${params.sourmashsigkmers_k}",
+            cliflag: '-k',
+            clivalue: (params.sourmashsigkmers_k ?: '')
+        ],
+        'sourmashsigkmers_protein': [
+            clihelp: 'Choose a protein signature. ' +
+                "Default: ${params.sourmashsigkmers_protein}",
+            cliflag: '--protein',
+            clivalue: (params.sourmashsigkmers_protein ? ' ' : '')
+        ],
+        'sourmashsigkmers_noprotein': [
+            clihelp: 'Do not choose a protein signature. ' +
+                "Default: ${params.sourmashsigkmers_noprotein}",
+            cliflag: '--no-protein',
+            clivalue: (params.sourmashsigkmers_noprotein ? ' ' : '')
+        ],
+        'sourmashsigkmers_dayhoff': [
+            clihelp: 'Choose Dayhoff-encoded amino acid signatures. ' +
+                "Default: ${params.sourmashsigkmers_dayhoff}",
+            cliflag: '--dayhoff',
+            clivalue: (params.sourmashsigkmers_dayhoff ? ' ' : '')
+        ],
+        'sourmashsigkmers_nodayhoff': [
+            clihelp: 'Do not choose Dayhoff-encoded amino acid signatures. ' +
+                "Default: ${params.sourmashsigkmers_nodayhoff}",
+            cliflag: '--no-dayhoff',
+            clivalue: (params.sourmashsigkmers_nodayhoff ? ' ' : '')
+        ],
+        'sourmashsigkmers_hp': [
+            clihelp: 'Choose hydrophobic-polar-encoded amino acid signatures. ' +
+                "Default: ${params.sourmashsigkmers_hp}",
+            cliflag: '--hp',
+            clivalue: (params.sourmashsigkmers_hp ? ' ' : '')
+        ],
+        'sourmashsigkmers_nohp': [
+            clihelp: 'Do not choose hydrophobic-polar-encoded amino acid signatures. ' +
+                "Default: ${params.sourmashsigkmers_nohp}",
+            cliflag: '--no-hp',
+            clivalue: (params.sourmashsigkmers_nohp ? ' ' : '')
+        ],
+        'sourmashsigkmers_dna': [
+            clihelp: 'Choose DNA signature. ' +
+                "Default: ${params.sourmashsigkmers_dna}",
+            cliflag: '--dna',
+            clivalue: (params.sourmashsigkmers_dna ? ' ' : '')
+        ],
+        'sourmashsigkmers_nodna': [
+            clihelp: 'Do not choose DNA signature. ' +
+                "Default: ${params.sourmashsigkmers_nodna}",
+            cliflag: '--no-dna',
+            clivalue: (params.sourmashsigkmers_nodna ? ' ' : '')
+        ],
+        'sourmashsigkmers_save_kmers': [
+            clihelp: 'Save k-mers and hash values to a CSV file. ' +
+                "Default: ${params.sourmashsigkmers_save_kmers}",
+            cliflag: null,
+            clivalue: null
+        ],
+        'sourmashsigkmers_save_seqs': [
+            clihelp: 'Save sequences with matching hash values to a FASTA file. ' +
+                "Default: ${params.sourmashsigkmers_save_seqs}",
+            cliflag: null,
+            clivalue: null
+        ],
+        'sourmashsigkmers_translate': [
+            clihelp: 'Translate DNA k-mers into amino acids (for protein, dayhoff, and hp sketches). ' +
+                "Default: ${params.sourmashsigkmers_translate}",
+            cliflag: '--translate',
+            clivalue: (params.sourmashsigkmers_translate ? ' ' : '')
+        ]
+    ]
+
+    toolspecs.each {
+        k, v -> tool.text['--' + k] = "${v.clihelp}"
+        tool.helpparams[k] = [ cliflag: "${v.cliflag}", clivalue: v.clivalue ]
+    }
+
+    return tool
+}
\ No newline at end of file
0.6.1/lib/help/sourmashsketch.nf
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/lib/help/sourmashsketch.nf
0.6.1/lib/help/sourmashsketch.nf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/lib/help/sourmashsketch.nf Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,73 @@
+// Help text for sourmash sketch dna within CPIPES.
+
+def sourmashsketchHelp(params) {
+
+    Map tool = [:]
+    Map toolspecs = [:]
+    tool.text = [:]
+    tool.helpparams = [:]
+
+    toolspecs = [
+        'sourmashsketch_run': [
+            clihelp: 'Run `sourmash sketch dna` tool. Default: ' +
+                (params.sourmashsketch_run ?: false),
+            cliflag: null,
+            clivalue: null
+        ],
+        'sourmashsketch_mode': [
+            clihelp: "Select which type of signatures to be created: dna, protein, fromfile or translate. "
+                + "Default: ${params.sourmashsketch_mode}",
+            cliflag: "${params.sourmashsketch_mode}",
+            clivalue: ' '
+        ],
+        'sourmashsketch_p': [
+            clihelp: 'Signature parameters to use. ' +
+                "Default: ${params.sourmashsketch_p}",
+            cliflag: '-p',
+            clivalue: (params.sourmashsketch_p ?: '')
+        ],
+        'sourmashsketch_file': [
+            clihelp: '<path>  A text file containing a list of sequence files to load. ' +
+                "Default: ${params.sourmashsketch_file}",
+            cliflag: '--from-file',
+            clivalue: (params.sourmashsketch_file ?: '')
+        ],
+        'sourmashsketch_f': [
+            clihelp: 'Recompute signatures even if the file exists. ' +
+                "Default: ${params.sourmashsketch_f}",
+            cliflag: '-f',
+            clivalue: (params.sourmashsketch_f ? ' ' : '')
+        ],
+        'sourmashsketch_merge': [
+            clihelp: 'Merge all input files into one signature file with the specified name. ' +
+                "Default: ${params.sourmashsketch_merge}",
+            cliflag: '--merge',
+            clivalue: (params.sourmashsketch_merge ? ' ' : '')
+        ],
+        'sourmashsketch_singleton': [
+            clihelp: 'Compute a signature for each sequence record individually. ' +
+                "Default: ${params.sourmashsketch_singleton}",
+            cliflag: '--singleton',
+            clivalue: (params.sourmashsketch_singleton ? ' ' : '')
+        ],
+        'sourmashsketch_name': [
+            clihelp: 'Name the signature generated from each file after the first record in the file. ' +
+                "Default: ${params.sourmashsketch_name}",
+            cliflag: '--name-from-first',
+            clivalue: (params.sourmashsketch_name ? ' ' : '')
+        ],
+        'sourmashsketch_randomize': [
+            clihelp: 'Shuffle the list of input files randomly. ' +
+                "Default: ${params.sourmashsketch_randomize}",
+            cliflag: '--randomize',
+            clivalue: (params.sourmashsketch_randomize ? ' ' : '')
+        ]
+    ]
+
+    toolspecs.each {
+        k, v -> tool.text['--' + k] = "${v.clihelp}"
+        tool.helpparams[k] = [ cliflag: "${v.cliflag}", clivalue: v.clivalue ]
+    }
+
+    return tool
+}
\ No newline at end of file
0.6.1/lib/help/spades.nf
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/lib/help/spades.nf
0.6.1/lib/help/spades.nf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/lib/help/spades.nf Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,121 @@
+// Help text for spades within CPIPES.
+
+def spadesHelp(params) {
+
+    Map tool = [:]
+    Map toolspecs = [:]
+    tool.text = [:]
+    tool.helpparams = [:]
+
+    toolspecs = [
+        'spades_run': [
+            clihelp: 'Run SPAdes assembler. Default: ' +
+                (params.spades_run ?: false),
+            cliflag: null,
+            clivalue: null
+        ],
+        'spades_isolate': [
+            clihelp: 'This flag is highly recommended for high-coverage isolate and ' +
+                "multi-cell data. Default: ${params.spades_isolate}",
+            cliflag: '--isolate',
+            clivalue: (params.spades_isolate ? ' ' : '')
+        ], 
+        'spades_sc': [
+            clihelp: 'This flag is required for MDA (single-cell) data. ' +
+                "Default: ${params.spades_sc}",
+            cliflag: '--sc',
+            clivalue: (params.spades_sc ? ' ' : '')
+        ],
+        'spades_meta': [
+            clihelp: 'This flag is required for metagenomic data. ' +
+                "Default: ${params.spades_meta}",
+            cliflag: '--meta',
+            clivalue: (params.spades_meta ? ' ' : '')
+        ],
+        'spades_bio': [
+            clihelp: 'This flag is required for biosytheticSPAdes mode. ' +
+                "Default: ${params.spades_bio}",
+            cliflag: '--bio',
+            clivalue: (params.spades_bio ? ' ' : '')
+        ],
+        'spades_corona': [
+            clihelp: 'This flag is required for coronaSPAdes mode. ' +
+                "Default: ${params.spades_corona}",
+            cliflag: '--corona',
+            clivalue: (params.spades_corona ? ' ' : '')
+        ],
+        'spades_rna': [
+            clihelp: 'This flag is required for RNA-Seq data. ' +
+                "Default: ${params.spades_rna}",
+            cliflag: '--rna',
+            clivalue: (params.spades_rna ? ' ' : '')
+        ],
+        'spades_plasmid': [
+            clihelp: 'Runs plasmidSPAdes pipeline for plasmid detection. ' +
+                "Default: ${params.spades_plasmid}",
+            cliflag: '--plasmid',
+            clivalue: (params.spades_plasmid ? ' ' : '')
+        ],
+        'spades_metaviral': [
+            clihelp: 'Runs metaviralSPAdes pipeline for virus detection. ' +
+                "Default: ${params.spades_metaviral}",
+            cliflag: '--metaviral',
+            clivalue: (params.spades_metaviral ? ' ' : '')
+        ],
+        'spades_metaplasmid': [
+            clihelp: 'Runs metaplasmidSPAdes pipeline for plasmid detection in ' +
+                "metagenomics datasets. Default: ${params.spades_metaplasmid}",
+            cliflag: '--metaplasmid',
+            clivalue: (params.spades_metaplasmid ? ' ' : '')
+        ],
+        'spades_rnaviral': [
+            clihelp: 'This flag enables virus assembly module from RNA-Seq data. ' +
+                "Default: ${params.spades_rnaviral}",
+            cliflag: '--rnaviral',
+            clivalue: (params.spades_rnaviral ? ' ' : '')
+        ],
+        'spades_iontorrent': [
+            clihelp: 'This flag is required for IonTorrent data. ' +
+                "Default: ${params.spades_iontorrent}",
+            cliflag: '--iontorrent',
+            clivalue: (params.spades_iontorrent ? ' ' : '')
+        ],
+        'spades_only_assembler': [
+            clihelp: 'Runs only the SPAdes assembler module (without read error correction). ' +
+                "Default: ${params.spades_only_assembler}",
+            cliflag: '--only-assembler',
+            clivalue: (params.spades_only_assembler ? ' ' : '')
+        ],
+        'spades_careful': [
+            clihelp: 'Tries to reduce the number of mismatches and short indels in the assembly. ' +
+                "Default: ${params.spades_careful}",
+            cliflag: '--careful',
+            clivalue: (params.spades_careful ? ' ' : '')
+        ],
+        'spades_cov_cutoff': [
+            clihelp: 'Coverage cutoff value (a positive float number). ' +
+                "Default: ${params.spades_cov_cutoff}",
+            cliflag: '--cov-cutoff',
+            clivalue: (params.spades_cov_cutoff ?: '')
+        ],
+        'spades_k': [
+            clihelp: 'List of k-mer sizes (must be odd and less than 128). ' +
+                "Default: ${params.spades_k}",
+            cliflag: '-k',
+            clivalue: (params.spades_k ?: '')
+        ],
+        'spades_hmm': [
+            clihelp: 'Directory with custom hmms that replace the default ones (very rare). ' +
+                "Default: ${params.spades_hmm}",
+            cliflag: '--custom-hmms',
+            clivalue: (params.spades_hmm ?: '')
+        ]
+    ]
+
+    toolspecs.each {
+        k, v -> tool.text['--' + k] = "${v.clihelp}"
+        tool.helpparams[k] = [ cliflag: "${v.cliflag}", clivalue: v.clivalue ]
+    }
+
+    return tool
+}
\ No newline at end of file
0.6.1/lib/help/tuspy.nf
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/lib/help/tuspy.nf
0.6.1/lib/help/tuspy.nf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/lib/help/tuspy.nf Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,71 @@
+// Help text for get_top_unique_mash_hit_genomes.py (tuspy) within CPIPES.
+
+def tuspyHelp(params) {
+
+    Map tool = [:]
+    Map toolspecs = [:]
+    tool.text = [:]
+    tool.helpparams = [:]
+
+    toolspecs = [
+        'tuspy_run': [
+            clihelp: 'Run the get_top_unique_mash_hits_genomes.py ' +
+                'script. Default: ' +
+                (params.tuspy_run ?: false),
+            cliflag: null,
+            clivalue: null
+        ],
+        'tuspy_s': [
+            clihelp: 'Absolute UNIX path to metadata text file with the ' +
+                'field separator, | and ' +
+                '5 fields: serotype|asm_lvl|asm_url|snp_cluster_id' +
+                'Ex: serotype=Derby,antigen_formula=4:f,g:-|Scaffold|402440|ftp://...' +
+                '|PDS000096654.2. Mentioning this option will create a pickle file for the ' +
+                'provided metadata and exits.' +
+                " Default: ${params.tuspy_s}",
+            cliflag: '-s',
+            clivalue: (params.tuspy_s ?: '')
+        ],
+        'tuspy_m': [
+            clihelp: 'Absolute UNIX path to mash screen results file.' +
+                " Default: ${params.tuspy_m}",
+            cliflag: '-m',
+            clivalue: (params.tuspy_m ?: '')
+        ],
+        'tuspy_ps': [
+            clihelp: 'Absolute UNIX Path to serialized metadata object ' +
+                'in a pickle file.' +
+                " Default: ${params.tuspy_ps}",
+            cliflag: '-ps',
+            clivalue: (params.tuspy_ps ?: '')
+        ],
+        'tuspy_gd': [
+            clihelp: 'Absolute UNIX Path to directory containing ' +
+                'gzipped genome FASTA files.' +
+                " Default: ${params.tuspy_gd}",
+            cliflag: '-gd',
+            clivalue: (params.tuspy_gd ?: '')
+        ],
+        'tuspy_gds': [
+            clihelp: 'Genome FASTA file suffix to search for in the ' +
+                'genome directory.' +
+                " Default: ${params.tuspy_gds}",
+            cliflag: '-gds',
+            clivalue: (params.tuspy_gds ?: '')
+        ],
+        'tuspy_n': [
+            clihelp: 'Return up to this many number of top N unique ' +
+                'genome accession hits.' +
+                " Default: ${params.tuspy_n}",
+            cliflag: '-n',
+            clivalue: (params.tuspy_n ?: '')
+        ]
+    ]
+
+    toolspecs.each {
+        k, v -> tool.text['--' + k] = "${v.clihelp}"
+        tool.helpparams[k] = [ cliflag: "${v.cliflag}", clivalue: v.clivalue ]
+    }
+
+    return tool
+}
\ No newline at end of file
0.6.1/lib/help/wcomp.nf
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/lib/help/wcomp.nf
0.6.1/lib/help/wcomp.nf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/lib/help/wcomp.nf Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,66 @@
+// Help text for waterfall_per_computed_serotype.pl (wcomp) within CPIPES.
+
+def wcompHelp(params) {
+
+    Map tool = [:]
+    Map toolspecs = [:]
+    tool.text = [:]
+    tool.helpparams = [:]
+
+    toolspecs = [
+        'wcomp_serocol': [
+            clihelp: 'Column number (non 0-based index) of the PDG metadata file ' +
+                'by which the serotypes are collected.' +
+                " Default: ${params.wcomp_serocol}",
+            cliflag: '--serocol',
+            clivalue: (params.wcomp_serocol ?: '')
+        ],
+        'wcomp_complete_sero': [
+            clihelp: 'Skip indexing serotypes when the serotype name in the column ' +
+                'number 49 (non 0-based) of PDG metadata file consists a "-". For example, if ' +
+                'an accession has a serotype= string as such in column ' +
+                'number 49 (non 0-based): ' +
+                '"serotype=- 13:z4,z23:-" ' +
+                'then, the indexing of that accession is skipped.' +
+                " Default: ${params.wcomp_complete_sero}",
+            cliflag: '--complete_serotype_name',
+            clivalue: (params.wcomp_complete_sero ? ' ' : '')
+        ],
+        'wcomp_not_null_serovar': [
+            clihelp: 'Only index the computed_serotype column ' +
+                'i.e. column number 49 (non 0-based), if the serovar column' +
+                ' is not NULL. ' +
+                " Default: ${params.wcomp_not_null_serovar}",
+            cliflag: '--not_null_serotype_name',
+            clivalue: (params.wcomp_not_null_serovar ?: '')
+        ],
+        'wcomp_i': [
+            clihelp: 'Force include this serovar. Ignores ' +
+                '--wcomp_complete_sero for only this serovar. ' +
+                'Mention multiple serovars separated by a ! (Exclamation mark). ' +
+                'Ex: --wcomp_complete_sero I 4,[5],12:i:-!Agona' +
+                " Default: ${params.wcomp_i}",
+            cliflag: '-i',
+            clivalue: (params.wcomp_i ? params.wcomp_i.split(/\!/).join(' -i ').trim().replace(/^\-i\s+/, '') : '')
+        ],
+        'wcomp_num': [
+            clihelp: 'Number of genome accessions to be collected per serotype.' +
+                " Default: ${params.wcomp_num}",
+            cliflag: '-num',
+            clivalue: (params.wcomp_num ?: '')
+        ],
+        'wcomp_min_contig_size': [
+            clihelp: 'Minimum contig size to consider a genome for indexing.' +
+                " Default: ${params.wcomp_min_contig_size}",
+            cliflag: '--min_contig_size',
+            clivalue: (params.wcomp_min_contig_size ?: '')
+        ]
+    ]
+
+    toolspecs.each {
+        k, v -> tool.text['--' + k] = "${v.clihelp}"
+        tool.helpparams[k] = [ cliflag: "${v.cliflag}", clivalue: v.clivalue ]
+    }
+
+    return tool
+}
\ No newline at end of file
0.6.1/lib/help/wsnp.nf
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/lib/help/wsnp.nf
0.6.1/lib/help/wsnp.nf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/lib/help/wsnp.nf Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,60 @@
+// Help text for waterfall_per_snp_cluster.pl (wsnp) within CPIPES.
+
+def wsnpHelp(params) {
+
+    Map tool = [:]
+    Map toolspecs = [:]
+    tool.text = [:]
+    tool.helpparams = [:]
+
+    toolspecs = [
+        'wsnp_serocol': [
+            clihelp: 'Column number (non 0-based index) of the PDG metadata file ' +
+                'by which the serotypes are collected.' +
+                " Default: ${params.wsnp_serocol}",
+            cliflag: '--serocol',
+            clivalue: (params.wsnp_serocol ?: '')
+        ],
+        'wsnp_complete_sero': [
+            clihelp: 'Skip indexing serotypes when the serotype name in the column ' +
+                'number 49 (non 0-based) of PDG metadata file consists a "-". For example, if ' +
+                'an accession has a serotype= string as such in column ' +
+                'number 49 (non 0-based): ' +
+                '"serotype=- 13:z4,z23:-" ' +
+                'then, the indexing of that accession is skipped.' +
+                " Default: ${params.wsnp_complete_sero}",
+            cliflag: '--complete_serotype_name',
+            clivalue: (params.wsnp_complete_sero ? ' ' : '')
+        ],
+        'wsnp_not_null_serovar': [
+            clihelp: 'Only index the computed_serotype column ' +
+                'i.e. column number 49 (non 0-based), if the serovar column' +
+                ' is not NULL. ' +
+                " Default: ${params.wsnp_not_null_serovar}",
+            cliflag: '--not_null_serotype_name',
+            clivalue: (params.wsnp_not_null_serovar ?: '')
+        ],
+        'wsnp_i': [
+            clihelp: 'Force include this serovar. Ignores ' +
+                '--wsnp_complete_sero for only this serovar. ' +
+                'Mention multiple serovars separated by a ! (Exclamation mark). ' +
+                'Ex: --wsnp_complete_sero I 4,[5],12:i:-!Agona' +
+                " Default: ${params.wsnp_i}",
+            cliflag: '-i',
+            clivalue: (params.wsnp_i ? params.wsnp_i.split(/\!/).join(' -i ').trim().replace(/^\-i\s+/, '') : '')
+        ],
+        'wsnp_num': [
+            clihelp: 'Number of genome accessions to collect per SNP cluster.' +
+                " Default: ${params.wsnp_num}",
+            cliflag: '-num',
+            clivalue: (params.wsnp_num ?: '')
+        ]
+    ]
+
+    toolspecs.each {
+        k, v -> tool.text['--' + k] = "${v.clihelp}"
+        tool.helpparams[k] = [ cliflag: "${v.cliflag}", clivalue: v.clivalue ]
+    }
+
+    return tool
+}
\ No newline at end of file
0.6.1/lib/routines.nf
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/lib/routines.nf
0.6.1/lib/routines.nf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/lib/routines.nf Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,391 @@
+// Hold methods to print:
+//      1. Colored logo.
+//      2. Summary of parameters.
+//      3. Single dashed line.
+//      4. Double dashed line.
+//
+
+import groovy.json.JsonSlurper
+import nextflow.config.ConfigParser
+// import groovy.json.JsonOutput
+
+// ASCII logo
+def pipelineBanner() {
+
+    def padding = (params.pad) ?: 30
+    Map fgcolors = getANSIColors()
+
+    def banner = [
+        name: "${fgcolors.magenta}${workflow.manifest.name}${fgcolors.reset}",
+        author: "${fgcolors.cyan}${workflow.manifest.author}${fgcolors.reset}",
+        // workflow: "${fgcolors.magenta}${params.pipeline}${fgcolors.reset}",
+        version:  "${fgcolors.green}${workflow.manifest.version}${fgcolors.reset}",
+        center: "${fgcolors.green}${params.center}${fgcolors.reset}",
+        pad: padding
+    ]
+
+    manifest = addPadding(banner)
+
+    return """${fgcolors.white}${dashedLine(type: '=')}${fgcolors.magenta}
+             (o)                  
+  ___  _ __   _  _ __    ___  ___ 
+ / __|| '_ \\ | || '_ \\  / _ \\/ __|
+| (__ | |_) || || |_) ||  __/\\__ \\
+ \\___|| .__/ |_|| .__/  \\___||___/
+      | |       | |               
+      |_|       |_|${fgcolors.reset}
+${dashedLine()}
+${fgcolors.blue}A collection of modular pipelines at CFSAN, FDA.${fgcolors.reset}
+${dashedLine()}
+${manifest}
+${dashedLine(type: '=')}
+""".stripIndent()
+}
+
+// Add padding to keys so that
+// they indent nicely on the
+// terminal
+def addPadding(values) {
+
+    def pad = (params.pad) ?: 30
+    values.pad = pad
+
+    def padding = values.pad.toInteger()
+    def nocapitalize = values.nocapitalize
+    def stopnow = values.stopNow
+    def help = values.help
+
+    values.removeAll { 
+        k, v -> [
+            'nocapitalize',
+            'pad',
+            'stopNow',
+            'help'
+        ].contains(k)
+    }
+
+    values.keySet().each { k ->
+        v = values[k]
+        s = params.linewidth - (pad + 5)
+        if (v.toString().size() > s && !stopnow) {
+            def sen = ''
+            // v.toString().findAll(/.{1,${s}}\b(?:\W*|\s*)/).each {
+            //     sen += ' '.multiply(padding + 2) + it + '\n'
+            // }
+            v.toString().eachMatch(/.{1,${s}}(?=.*)\b|\w+/) {
+                sen += ' '.multiply(padding + 2) + it.trim() + '\n'
+            }
+            values[k] = (
+                help ? sen.replaceAll(/^(\n|\s)*/, '') : sen.trim()
+            )
+        } else {
+            values[k] = (help ? v + "\n" : v)
+        }
+        k = k.replaceAll(/\./, '_')
+    }
+
+    return values.findResults {
+        k, v -> nocapitalize ?
+            k.padRight(padding) + ': ' + v :
+            k.capitalize().padRight(padding) + ': ' + v
+    }.join("\n")
+}
+
+// Method for error messages
+def stopNow(msg) {
+
+    Map fgcolors = getANSIColors()
+    Map errors = [:]
+
+    if (msg == null) {
+        msg = "Unknown error"
+    }
+
+    errors['stopNow'] = true
+    errors["${params.cfsanpipename} - ${params.pipeline} - ERROR"] = """
+${fgcolors.reset}${dashedLine()}
+${fgcolors.red}${msg}${fgcolors.reset}
+${dashedLine()}
+""".stripIndent()
+    // println dashedLine() // defaults to stdout
+    // log.info addPadding(errors) // prints to stdout
+    exit 1, "\n" + dashedLine() +
+        "${fgcolors.red}\n" + addPadding(errors)
+}
+
+// Method to validate 4 required parameters
+// if input for entry point is FASTQ files
+def validateParamsForFASTQ() {
+    switch (params) {
+        case { params.metadata == null && params.input == null }:
+            stopNow("Either metadata CSV file with 5 required columns\n" +
+                "in order: sample, fq1, fq2, strandedness, single_end or \n" +
+                "input directory of only FASTQ files (gzipped or unzipped) should be provided\n" +
+                "using --metadata or --input options.\n" +
+..ult: ${params.fq_single_end}"
+    helptext['--fq_filename_delim'] = "Delimiter by which the file name is split to obtain sample name. " +
+        "Default: ${params.fq_filename_delim}"
+    helptext['--fq_filename_delim_idx'] = "After splitting FASTQ file name by using the --fq_filename_delim option," +
+        " all elements before this index (1-based) will be joined to create final sample name." + 
+        " Default: ${params.fq_filename_delim_idx}"
+
+    return helptext
+}
+
+// Show concise help text if configured within the main workflow.
+def conciseHelp(def tool = null) {
+    Map fgcolors = getANSIColors()
+
+    tool ?= "fastp"
+    tools = tool?.tokenize(',')
+
+    return """
+${dashedLine()}
+Show configurable CLI options for each tool within ${fgcolors.magenta}${params.pipeline}${fgcolors.reset}
+${dashedLine()}
+Ex: cpipes --pipeline ${params.pipeline} --help
+""" + (tools.size() > 1 ? "Ex: cpipes --pipeline ${params.pipeline} --help ${tools[0]}"
+    + """
+Ex: cpipes --pipeline ${params.pipeline} --help ${tools[0]},${tools[1]}
+${dashedLine()}""".stripIndent() : """Ex: cpipes --pipeline ${params.pipeline} --help ${tool}
+${dashedLine()}""".stripIndent())
+
+}
+
+// Wrap help text with the following options
+def wrapUpHelp() {
+
+    return [
+        'Help options' : "",
+        '--help': "Display this message.\n",
+        'help': true,
+        'nocapitalize': true
+    ]
+}
+
+// Method to send email on workflow complete.
+def sendMail() {
+
+    if (params.user_email == null) {
+        return 1
+    }
+
+    def pad = (params.pad) ?: 30
+    def contact_emails = [
+        stakeholder: (params.workflow_blueprint_by ?: 'Not defined'),
+        author: (params.workflow_built_by ?: 'Not defined')
+    ]
+    def msg = """
+${pipelineBanner()}
+${summaryOfParams()}
+${params.cfsanpipename} - ${params.pipeline}
+${dashedLine()}
+Please check the following directory for N E X T F L O W
+reports. You can view the HTML files directly by double clicking
+them on your workstation.
+${dashedLine()}
+${params.tracereportsdir}
+${dashedLine()}
+Please send any bug reports to CFSAN Dev Team or the author or
+the stakeholder of the current pipeline.
+${dashedLine()}
+Error messages (if any)
+${dashedLine()}
+${workflow.errorMessage}
+${workflow.errorReport}
+${dashedLine()}
+Contact emails
+${dashedLine()}
+${addPadding(contact_emails)}
+${dashedLine()}
+Thank you for using ${params.cfsanpipename} - ${params.pipeline}!
+${dashedLine()}
+""".stripIndent()
+
+    def mail_cmd = [
+        'sendmail',
+        '-f', 'noreply@gmail.com',
+        '-F', 'noreply',
+        '-t', "${params.user_email}"
+    ]
+
+    def email_subject = "${params.cfsanpipename} - ${params.pipeline}"
+    Map fgcolors = getANSIColors()
+
+    if (workflow.success) {
+        email_subject += ' completed successfully!'
+    }
+    else if (!workflow.success) {
+        email_subject += ' has failed!'
+    }
+
+    try {
+        ['env', 'bash'].execute() << """${mail_cmd.join(' ')}
+Subject: ${email_subject}
+Mime-Version: 1.0
+Content-Type: text/html
+<pre>
+${msg.replaceAll(/\x1b\[[0-9;]*m/, '')}
+</pre>
+""".stripIndent()
+    } catch (all) {
+        def warning_msg = "${fgcolors.yellow}${params.cfsanpipename} - ${params.pipeline} - WARNING"
+            .padRight(pad) + ':'
+        log.info """
+${dashedLine()}
+${warning_msg}
+${dashedLine()}
+Could not send mail with the sendmail command!
+${dashedLine()}
+""".stripIndent()
+    }
+    return 1
+}
+
+// Set ANSI colors for any and all
+// STDOUT or STDERR
+def getANSIColors() {
+
+    Map fgcolors = [:]
+
+    fgcolors['reset']   = "\033[0m"
+    fgcolors['black']   = "\033[0;30m"
+    fgcolors['red']     = "\033[0;31m"
+    fgcolors['green']   = "\033[0;32m"
+    fgcolors['yellow']  = "\033[0;33m"
+    fgcolors['blue']    = "\033[0;34m"
+    fgcolors['magenta'] = "\033[0;35m"
+    fgcolors['cyan']    = "\033[0;36m"
+    fgcolors['white']   = "\033[0;37m"
+
+    return fgcolors
+}
0.6.1/modules/abricate/run/README.md
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/modules/abricate/run/README.md
0.6.1/modules/abricate/run/README.md
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/modules/abricate/run/README.md Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,94 @@
+# NextFlow DSL2 Module
+
+```bash
+ABRICATE_RUN
+```
+
+## Description
+
+Run `abricate` tool on a list of assembled contigs in FASTA format given a list of database names. Produces a single output table in ASCII text format per database.
+
+\
+&nbsp;
+
+### `input:`
+
+___
+
+Type: `tuple`
+
+Takes in the following tuple of metadata (`meta`) and a list of assemled contig FASTA files of input type `path` (`assembly`).
+
+Ex:
+
+```groovy
+[ [id: 'sample1', single_end: true], '/data/sample1/f_assembly.fa' ]
+```
+
+\
+&nbsp;
+
+#### `meta`
+
+Type: Groovy Map
+
+A Groovy Map containing the metadata about the FASTQ file.
+
+Ex:
+
+```groovy
+[ id: 'FAL00870', strandedness: 'unstranded', single_end: true ]
+```
+
+\
+&nbsp;
+
+#### `assembly`
+
+Type: `path`
+
+NextFlow input type of `path` pointing to assembled contig file in FASTA format.
+
+\
+&nbsp;
+
+#### `abdbs`
+
+Type: `val`
+
+Nextflow input type of `val` containing a list of at least one of the following database names on which `abricate` should be run.
+
+Ex:
+
+```groovy
+[ 'resfinder', 'megares', 'ncbi', 'ncbiamrplus', 'argannot' , 'ecoli_vf' ]
+```
+
+\
+&nbsp;
+
+### `output:`
+
+___
+
+Type: `tuple`
+
+Outputs a tuple of metadata (`meta` from `input:`) and list of `abricate` result files (`abricated`).
+
+\
+&nbsp;
+
+#### `abricated`
+
+Type: `path`
+
+NextFlow output type of `path` pointing to the `abricate` results table file per sample (`id:`).
+
+\
+&nbsp;
+
+#### `versions`
+
+Type: `path`
+
+NextFlow output type of `path` pointing to the `.yml` file storing software versions for this process.
0.6.1/modules/abricate/run/main.nf
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/modules/abricate/run/main.nf
0.6.1/modules/abricate/run/main.nf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/modules/abricate/run/main.nf Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,48 @@
+process ABRICATE_RUN {
+    tag "$meta.id"
+    label 'process_micro'
+
+    module (params.enable_module ? "${params.swmodulepath}${params.fs}abricate${params.fs}1.0.1" : null)
+    conda (params.enable_conda ? "conda-forge::perl bioconda::abricate=1.0.1" : null)
+    container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
+        'https://depot.galaxyproject.org/singularity/abricate%3A1.0.1--ha8f3691_1':
+        'quay.io/biocontainers/abricate:1.0.1--ha8f3691_1' }"
+
+    input:
+    tuple val(meta), path(assembly)
+    val abdbs
+
+    output:
+    path "${meta.id}${params.fs}*"
+    tuple val(meta), path("${meta.id}${params.fs}*.ab.txt"), emit: abricated
+    path "versions.yml"                                    , emit: versions
+
+    when:
+    (task.ext.when == null || task.ext.when) && assembly.size() > 0
+
+    script:
+    def args = task.ext.args ?: ''
+    def prefix = task.ext.prefix ?: "${meta.id}"
+    def dbs = abdbs.collect().join('\\n')
+    """
+    newprefix="${prefix}${params.fs}${prefix}"
+
+    if [ ! -d "$prefix" ]; then
+        mkdir "$prefix" || exit 1
+    fi
+
+    echo -e "$dbs" | while read -r db; do
+        abricate \\
+            $assembly \\
+            $args \\
+            --db \$db \\
+            --threads $task.cpus 1> "\${newprefix}.\${db}.ab.txt"
+    done
+
+    cat <<-END_VERSIONS > versions.yml
+    "${task.process}":
+        abricate: \$(echo \$(abricate --version 2>&1) | sed 's/^.*abricate //' )
+        bash: \$( bash --version 2>&1 | sed '1!d; s/^.*version //; s/ (.*\$//' )
+    END_VERSIONS
+    """
+}
\ No newline at end of file
0.6.1/modules/abricate/summary/README.md
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/modules/abricate/summary/README.md
0.6.1/modules/abricate/summary/README.md
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/modules/abricate/summary/README.md Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,140 @@
+# NextFlow DSL2 Module
+
+```bash
+ABRICATE_SUMMARY
+```
+
+## Description
+
+Run `abricate` tool's `summary` sub-command on a list of `abricate`'s result table files per database.
+
+\
+&nbsp;
+
+### `input:`
+
+___
+
+Type: `tuple`
+
+Takes in the following tuple of `abricate` database names of type `val` (`abdbs`) and a list of `abricate` result table files for all databases of type `path` (`abfiles`).
+
+Ex:
+
+```groovy
+[ 
+    [ 'megares', 'argannot', 'resfinder', 'ncbi' ], 
+    [ '/data/sample1/f.ncbi.ab.txt',
+      '/data/sample1/f.megares.ab.txt',
+      '/data/sample1/f.resfinder.ab.txt',
+      '/data/sample1/f.argannot.ab.txt',
+      '/data/sample1/f2.ncbi.ab.txt',
+      '/data/sample1/f2.megares.ab.txt',
+      '/data/sample1/f2.resfinder.ab.txt',
+      '/data/sample1/f2.argannot.ab.txt'
+    ]
+]
+```
+
+\
+&nbsp;
+
+#### `abdbs`
+
+Type: `val`
+
+A Groovy List containing the **mandatory** list of at least the following 4 `abricate` database names on which `abricate` was run.
+
+Ex:
+
+```groovy
+[ 'resfinder', 'megares', 'ncbi', 'argannot' ]
+```
+
+\
+&nbsp;
+
+#### `abfiles`
+
+Type: `path`
+
+NextFlow input type of `path` pointing to `abricate` result files for each of the database.
+
+\
+&nbsp;
+
+### `output:`
+
+___
+
+#### `ncbi`
+
+Type: `tuple`
+\
+Optional: `true`
+
+Outputs a tuple of `abricate` database key (`abricate_ncbi`) and summary result file from `abricate summary` command of type `path` (`ncbi`). This database includes only core AMR genes. This tuple is emitted optionally only where there are output files with suffix `.ncbi.absum.txt`
+
+\
+&nbsp;
+
+#### `ncbiamrplus`
+
+Type: `tuple`
+\
+Optional: `true`
+
+Outputs a tuple of `abricate` database key (`abricate_ncbiamrplus`) and summary result file from `abricate summary` command of type `path` (`ncbiamrplus`). This database includes both core AMR genes and plus AMR genes. This tuple is emitted optionally only where there are output files with suffix `.ncbiamrplus.absum.txt`
+
+\
+&nbsp;
+
+#### `resfinder`
+
+Type: `tuple`
+\
+Optional: `true`
+
+Outputs a tuple of `abricate` database key (`abricate_resfinder`) and summary result file from `abricate summary` command of type `path` (`resfinder`). This tuple is emitted optionally only where there are output files with suffix `.resfinder.absum.txt`
+
+\
+&nbsp;
+
+#### `megares`
+
+Type: `tuple`
+\
+Optional: `true`
+
+Outputs a tuple of `abricate` database key (`abricate_megares`) and summary result file from `abricate summary` command of type `path` (`megares`). This tuple is emitted optionally only where there are output files with suffix `.megares.absum.txt`
+
+\
+&nbsp;
+
+#### `argannot`
+
+Type: `tuple`
+\
+Optional: `true`
+
+Outputs a tuple of `abricate` database key (`abricate_argannot`) and summary result file from `abricate summary` command of type `path` (`argannot`). This tuple is emitted optionally only where there are output files with suffix `.argannot.absum.txt`
+
+\
+&nbsp;
+
+#### `ecoli_vf`
+
+Type: `tuple`
+\
+Optional: `true`
+
+Outputs an **optional** tuple of `abricate` database key (`abricate_ecoli_vf`) and summary result file from `abricate summary` command of type `path` (`ecoli_vf`). This tuple is emitted only when there are output files with suffix `.ecoli_vf.absum.txt` within the `work` folder.
+
+\
+&nbsp;
+
+#### `versions`
+
+Type: `path`
+
+NextFlow output type of `path` pointing to the `.yml` file storing software versions for this process.
0.6.1/modules/abricate/summary/main.nf
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/modules/abricate/summary/main.nf
0.6.1/modules/abricate/summary/main.nf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/modules/abricate/summary/main.nf Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,80 @@
+process ABRICATE_SUMMARY {
+    tag "${abdbs.join(',')}"
+    label 'process_micro'
+
+    module (params.enable_module ? "${params.swmodulepath}${params.fs}abricate${params.fs}1.0.1" : null)
+    conda (params.enable_conda ? "conda-forge::perl bioconda::abricate=1.0.1 conda-forge::coreutils" : null)
+    container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
+        'https://depot.galaxyproject.org/singularity/abricate%3A1.0.1--ha8f3691_1':
+        'quay.io/biocontainers/abricate:1.0.1--ha8f3691_1' }"
+
+    input:
+    tuple val(abdbs), path(abfiles)
+
+    output:
+    tuple val('abricate_ncbi'), path("*.ncbi.absum.txt")              , emit: ncbi, optional: true
+    tuple val('abricate_ncbiamrplus'), path("*.ncbiamrplus.absum.txt"), emit: ncbiamrplus, optional: true
+    tuple val('abricate_resfinder'), path("*resfinder.absum.txt")     , emit: resfinder, optional: true
+    tuple val('abricate_megares'), path("*.megares.absum.txt")        , emit: megares, optional: true
+    tuple val('abricate_argannot'), path("*.argannot.absum.txt")      , emit: argannot, optional: true
+    tuple val('abricate_ecoli_vf'), path("*.ecoli_vf.absum.txt")      , emit: ecoli_vf, optional: true
+    path "versions.yml"                                               , emit: versions
+
+    when:
+    task.ext.when == null || task.ext.when
+
+    script:
+    def args = task.ext.args ?: ''
+    def onthese = abdbs.collect{ db ->
+        abfiles.findAll { files ->
+            files =~ /\.${db}/
+        }.join(' ')
+    }.join('\\n')
+    """
+    filenum="1"
+
+    echo -e "$onthese" | while read -r files; do
+        db=\$( echo -e "\${files}" | grep -E -o '\\w+\\.ab\\.txt' | sort -u | sed -e 's/.ab.txt//' )
+
+        if [ -z "\$db" ]; then
+            db="\$filenum"
+        fi
+
+        abricate \\
+            $args \\
+            --summary \${files} \\
+            1> "abricate.\${db}.absum.txt"
+
+        sed -i -e "s/.\${db}.ab.txt//" "abricate.\${db}.absum.txt"
+        sed -i -e 's/.assembly_filtered_contigs.fasta//' "abricate.\${db}.absum.txt"
+
+        filenum=\$((filenum+1))
+    done
+
+    cat <<-END_VERSIONS > versions.yml
+    "${task.process}":
+        abricate: \$(echo \$(abricate --version 2>&1) | sed 's/^.*abricate //' )
+        bash: \$( bash --version 2>&1 | sed '1!d; s/^.*version //; s/ (.*\$//' )
+    END_VERSIONS
+
+    sedver=""
+    sortver=""
+    grepver=""
+
+    if [ "${workflow.containerEngine}" != "null" ]; then
+        sortver=\$( sort --help 2>&1 | sed -e '1!d; s/ (.*\$//' )
+        sedver="\$sortver"
+        grepver="\$sortver"
+    else
+        sortver=\$( sort --version 2>&1 | sed '1!d; s/^.*(GNU coreutils//; s/) //;' )
+        sedver=\$( echo \$(sed --version 2>&1) | sed 's/^.*(GNU sed) //; s/ Copyright.*\$//' )
+        grepver=\$( echo \$(grep --version 2>&1) | sed 's/^.*(GNU grep) //; s/ Copyright.*\$//' )
+    fi
+
+    cat <<-END_VERSIONS >> versions.yml
+        sort: \$sortver
+        grep: \$grepver
+        sed: \$sedver
+    END_VERSIONS
+    """
+}
\ No newline at end of file
0.6.1/modules/bbtools/bbmerge/README.md
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/modules/bbtools/bbmerge/README.md
0.6.1/modules/bbtools/bbmerge/README.md
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/modules/bbtools/bbmerge/README.md Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,116 @@
+# NextFlow DSL2 Module
+
+```bash
+BBTOOLS_BBMERGE
+```
+
+## Description
+
+Run `bbmerge.sh` from `BBTools` which will merge paired-end reads to produce single-end reads by overlap detection.
+
+\
+&nbsp;
+
+### `input:`
+
+___
+
+Type: `tuple`
+
+Takes in the following tuple of metadata (`meta`) and a list of reads of type `path` (`reads`) per sample (`id:`).
+
+Ex:
+
+```groovy
+[ 
+    [ 
+        id: 'FAL00870',
+        strandedness: 'unstranded',
+        single_end: false
+    ],
+    [
+        '/hpc/scratch/test/f1.R1.fq.gz',
+        '/hpc/scratch/test/f1.R2.fq.gz'
+    ]
+]
+```
+
+\
+&nbsp;
+
+#### `meta`
+
+Type: Groovy Map
+
+A Groovy Map containing the metadata about the FASTQ file.
+
+Ex:
+
+```groovy
+[ 
+    id: 'FAL00870',
+    strandedness: 'unstranded',
+    single_end: true
+]
+```
+
+\
+&nbsp;
+
+#### `reads`
+
+Type: `path`
+
+NextFlow input type of `path` pointing to paired-end FASTQ files on which `bbmerge.sh` should be run.
+
+\
+&nbsp;
+
+#### `args`
+
+Type: Groovy String
+
+String of optional command-line arguments to be passed to the tool. This can be mentioned in `process` scope within `withName:process_name` block using `ext.args` option within your `nextflow.config` file.
+
+Ex:
+
+```groovy
+withName: 'BBTOOLS_BBMERGE' {
+    ext.args = 'minprog=0.5'
+}
+```
+
+### `output:`
+
+___
+
+Type: `tuple`
+
+Outputs a tuple of metadata (`meta` from `input:`) and merged gzipped FASTQ file.
+
+\
+&nbsp;
+
+#### `fastq`
+
+Type: `path`
+
+NextFlow output type of `path` pointing to the FASTQ format merged gzipped file per sample (`id:`).
+
+\
+&nbsp;
+
+#### `log`
+
+Type: `path`
+
+NextFlow output type of `path` pointing to log file from `bbmerge.sh` run per sample (`id:`).
+
+\
+&nbsp;
+
+#### `versions`
+
+Type: `path`
+
+NextFlow output type of `path` pointing to the `.yml` file storing software versions for this process.
0.6.1/modules/bbtools/bbmerge/main.nf
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/modules/bbtools/bbmerge/main.nf
0.6.1/modules/bbtools/bbmerge/main.nf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/modules/bbtools/bbmerge/main.nf Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,44 @@
+process BBTOOLS_BBMERGE {
+    tag "$meta.id"
+    label 'process_micro'
+
+    module (params.enable_module ? "${params.swmodulepath}${params.fs}bbtools${params.fs}38.94" : null)
+    conda (params.enable_conda ? "conda-forge::pbzip2 bioconda::bbmap=38.95" : null)
+    container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
+        'https://depot.galaxyproject.org/singularity/bbmap:38.95--he522d1c_0' :
+        'quay.io/biocontainers/bbmap:38.95--he522d1c_0' }"
+
+    input:
+        tuple val(meta), path(reads)
+
+    output:
+        tuple val(meta), path("*.fastq.gz"), emit: fastq
+        tuple val(meta), path("*.log")     , emit: log
+        path "versions.yml"                , emit: versions
+
+    when:
+        !meta.single_end
+
+    script:
+        def args = task.ext.args ?: ''
+        def prefix = task.ext.prefix ?: "${meta.id}"
+        def in_files = "in1=${reads[0]} in2=${reads[1]}"
+        def out_file  = "out=${prefix}.bbmerge.fastq.gz"
+        def adapters_file = file (meta.adapters)
+        def adapters = !("${adapters_file.simpleName}" ==~ 'dummy_file.*') && adapters_file.exits() ? "adapters=${meta.adapters}" : ''
+        def args_formatted = args.replaceAll('=\s+', '=')
+        """
+        bbmerge.sh \\
+            -Xmx${task.memory.toGiga()}G \\
+            threads=$task.cpus \\
+            $args_formatted \\
+            $adapters \\
+            $in_files \\
+            $out_file &> ${prefix}.bbmerge.log
+
+        cat <<-END_VERSIONS > versions.yml
+        "${task.process}":
+            bbmerge: \$( bbversion.sh )
+        END_VERSIONS
+        """
+}
0.6.1/modules/bcs_distance_matrix/main.nf
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/modules/bcs_distance_matrix/main.nf
0.6.1/modules/bcs_distance_matrix/main.nf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/modules/bcs_distance_matrix/main.nf Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,45 @@
+process BCS_DISTANCE_MATRIX {
+    tag "Samples vs Genomes"
+    label "process_pico"
+
+    module (params.enable_module ? "${params.swmodulepath}${params.fs}python${params.fs}3.8.1" : null)
+    conda (params.enable_conda ? "conda-forge::python=3.10 conda-forge::pyyaml" : null)
+    container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
+        'https://depot.galaxyproject.org/singularity/multiqc:1.14--pyhdfd78af_0' :
+        'quay.io/biocontainers/multiqc:1.14--pyhdfd78af_0' }"
+
+    input:
+        path matrix
+        path labels
+
+    output:
+        path 'bcs_sourmash_matrix.tblsum.txt', emit: mqc_txt, optional: true
+        path 'bcs_sourmash_matrix_mqc.json'  , emit: mqc_json, optional: true
+        path 'bcs_sourmash_matrix_mqc.yml'   , emit: mqc_yml, optional: true
+        path 'versions.yml'                  , emit: versions
+
+    when:
+        task.ext.when == null || task.ext.when
+
+    script:
+        def args = task.ext.args ?: ''
+
+        """
+        sourmash_sim_matrix.py \\
+            -pickle ${params.tuspy_ps} \\
+            -csv $matrix \\
+            -labels $labels
+
+        if [ -e "bcs_sourmash_matrix.tblsum.txt" ] && [ -s "bcs_sourmash_matrix.tblsum.txt" ]; then
+            create_mqc_data_table.py \\
+                "bcs_sourmash_matrix" \\
+                "The following table is an asymmetrical matrix of all <code>v.</code> all <b>ANI</b> values between each of the sample <b>FASTQ</b>'s sketch and genome <b>FASTA</b>'s sketch. Please note that there may be multiple genomes belonging to a serotype as processed by the initial screening steps of the workflow."
+        fi
+
+        cat <<-END_VERSIONS > versions.yml
+        "${task.process}":
+            python: \$( python --version | sed 's/Python //g' )
+            bash: \$( bash --version 2>&1 | sed '1!d; s/^.*version //; s/ (.*\$//' )
+        END_VERSIONS
+        """
+}
\ No newline at end of file
0.6.1/modules/bcs_results/main.nf
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/modules/bcs_results/main.nf
0.6.1/modules/bcs_results/main.nf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/modules/bcs_results/main.nf Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,43 @@
+process BCS_RESULTS {
+    tag "bettercallsal aggregate"
+    label "process_pico"
+
+    module (params.enable_module ? "${params.swmodulepath}${params.fs}python${params.fs}3.8.1" : null)
+    conda (params.enable_conda ? "conda-forge::python=3.10 conda-forge::pyyaml" : null)
+    container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
+        'https://depot.galaxyproject.org/singularity/multiqc:1.14--pyhdfd78af_0' :
+        'quay.io/biocontainers/multiqc:1.14--pyhdfd78af_0' }"
+
+    input:
+        path salmon_res_dirs
+
+    output:
+        path 'bettercallsal*.tblsum.txt', emit: mqc_txt, optional: true
+        path 'bettercallsal*_mqc.json'  , emit: mqc_json, optional: true
+        path 'bettercallsal*_mqc.yml'   , emit: mqc_yml, optional: true
+        path 'versions.yml'             , emit: versions
+
+    when:
+        task.ext.when == null || task.ext.when
+
+    script:
+        def args = task.ext.args ?: ''
+        args += (params.tuspy_ps ? " -pickle ${params.tuspy_ps}" : '')
+        args += (params.gsrpy_snp_clus_metadata ? " -snp ${params.gsrpy_snp_clus_metadata}" : '')
+        """
+        gen_salmon_res_table.py \\
+            $args \\
+            -sal "."
+
+        create_mqc_data_table.py \\
+            "bettercallsal" "The following table is an aggregation of serotype calls from all samples which also includes read counts from <code>salmon quant</code> results."
+
+        create_mqc_data_table.py \\
+            "bettercallsal_salyn" "The following table summarizes serotype presence or absence for all samples."
+
+        cat <<-END_VERSIONS > versions.yml
+        "${task.process}":
+            python: \$( python --version | sed 's/Python //g' )
+        END_VERSIONS
+        """
+}
\ No newline at end of file
0.6.1/modules/cat/fastq/README.md
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/modules/cat/fastq/README.md
0.6.1/modules/cat/fastq/README.md
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/modules/cat/fastq/README.md Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,96 @@
+# NextFlow DSL2 Module
+
+```bash
+CAT_FASTQ
+```
+
+## Description
+
+Concatenates a list of FASTQ files. Produces 2 files per sample (`id:`) if `single_end` is `false` as mentioned in the metadata Groovy Map.
+
+\
+&nbsp;
+
+### `input:`
+
+___
+
+Type: `tuple`
+
+Takes in the following tuple of metadata (`meta`) and a list of FASTQ files of input type `path` (`reads`) to be concatenated.
+
+Ex:
+
+```groovy
+[ [id: 'sample1', single_end: true], ['/data/sample1/f_L001.fq', '/data/sample1/f_L002.fq'] ]
+```
+
+\
+&nbsp;
+
+#### `meta`
+
+Type: Groovy Map
+
+A Groovy Map containing the metadata about the FASTQ file.
+
+Ex:
+
+```groovy
+[ id: 'FAL00870', strandedness: 'unstranded', single_end: true ]
+```
+
+\
+&nbsp;
+
+#### `reads`
+
+Type: `path`
+
+NextFlow input type of `path` pointing to list of FASTQ files.
+
+\
+&nbsp;
+
+#### `args`
+
+Type: Groovy String
+
+String of optional command-line arguments to be passed to the tool. This can be mentioned in `process` scope within `withName:process_name` block using `ext.args` option within your `nextflow.config` file.
+
+Ex:
+
+```groovy
+withName: 'CAT_FASTQ' {
+    ext.args = '--genome_size 5.5m'
+}
+```
+
+\
+&nbsp;
+
+### `output:`
+
+___
+
+Type: `tuple`
+
+Outputs a tuple of metadata (`meta` from `input:`) and list of concatenated FASTQ files (`catted_reads`).
+
+\
+&nbsp;
+
+#### `catted_reads`
+
+Type: `path`
+
+NextFlow output type of `path` pointing to the concatenated FASTQ files per sample (`id:`).
+
+\
+&nbsp;
+
+#### `versions`
+
+Type: `path`
+
+NextFlow output type of `path` pointing to the `.yml` file storing software versions for this process.
0.6.1/modules/cat/fastq/main.nf
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/modules/cat/fastq/main.nf
0.6.1/modules/cat/fastq/main.nf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/modules/cat/fastq/main.nf Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,89 @@
+process CAT_FASTQ {
+    tag "$meta.id"
+    label 'process_micro'
+
+    conda (params.enable_conda ? "conda-forge::sed=4.7 conda-forge::gzip" : null)
+    container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
+        'https://containers.biocontainers.pro/s3/SingImgsRepo/biocontainers/v1.2.0_cv1/biocontainers_v1.2.0_cv1.img' :
+        'biocontainers/biocontainers:v1.2.0_cv1' }"
+
+    input:
+        tuple val(meta), path(reads, stageAs: "input*/*")
+
+    output:
+        tuple val(meta), path("*.merged.fastq.gz"), emit: catted_reads
+        path "versions.yml"                       , emit: versions
+
+    when:
+        task.ext.when == null || task.ext.when
+
+    script:
+        def args = task.ext.args ?: ''
+        def prefix = task.ext.prefix ?: "${meta.id}"
+        def readList = reads.collect{ it.toString() }
+        def is_in_gz = readList[0].endsWith('.gz')
+        def gz_or_ungz = (is_in_gz ? '' : ' | gzip')
+        def pigz_or_ungz = (is_in_gz ? '' : " | pigz -p ${task.cpus}")
+        if (meta.single_end) {
+            if (readList.size > 1) {
+                """
+                zcmd="gzip"
+                zver=""
+
+                if type pigz > /dev/null 2>&1; then
+                    cat ${readList.join(' ')} ${pigz_or_ungz} > ${prefix}.merged.fastq.gz
+                    zcmd="pigz"
+                    zver=\$( echo \$( \$zcmd --version 2>&1 ) | sed -e '1!d' | sed "s/\$zcmd //" )
+                else
+                    cat ${readList.join(' ')} ${gz_or_ungz} > ${prefix}.merged.fastq.gz
+                    zcmd="gzip"
+
+                    if [ "${workflow.containerEngine}" != "null" ]; then
+                        zver=\$( echo \$( \$zcmd --help 2>&1 ) | sed -e '1!d; s/ (.*\$//' )
+                    else
+                        zver=\$( echo \$( \$zcmd --version 2>&1 ) | sed "s/^.*(\$zcmd) //; s/\$zcmd //; s/ Copyright.*\$//" )
+                    fi
+                fi
+
+                cat <<-END_VERSIONS > versions.yml
+                "${task.process}":
+                    cat: \$( echo \$(cat --version 2>&1) | sed 's/^.*coreutils) //; s/ .*\$//' )
+                    \$zcmd: \$zver
+                END_VERSIONS
+                """
+            }
+        } else {
+            if (readList.size > 2) {
+                def read1 = []
+                def read2 = []
+                readList.eachWithIndex{ v, ix -> ( ix & 1 ? read2 : read1 ) << v }
+                """
+                zcmd="gzip"
+                zver=""
+
+                if type pigz > /dev/null 2>&1; then
+                    cat ${read1.join(' ')} ${pigz_or_ungz} > ${prefix}_1.merged.fastq.gz
+                    cat ${read2.join(' ')} ${pigz_or_ungz} > ${prefix}_2.merged.fastq.gz
+                    zcmd="pigz"
+                    zver=\$( echo \$( \$zcmd --version 2>&1 ) | sed -e '1!d' | sed "s/\$zcmd //" )
+                else
+                    cat ${read1.join(' ')} ${gz_or_ungz} > ${prefix}_1.merged.fastq.gz
+                    cat ${read2.join(' ')} ${gz_or_ungz} > ${prefix}_2.merged.fastq.gz
+                    zcmd="gzip"
+
+                    if [ "${workflow.containerEngine}" != "null" ]; then
+                        zver=\$( echo \$( \$zcmd --help 2>&1 ) | sed -e '1!d; s/ (.*\$//' )
+                    else
+                        zver=\$( echo \$( \$zcmd --version 2>&1 ) | sed "s/^.*(\$zcmd) //; s/\$zcmd //; s/ Copyright.*\$//" )
+                    fi
+                fi
+
+                cat <<-END_VERSIONS > versions.yml
+                "${task.process}":
+                    cat: \$( echo \$(cat --version 2>&1) | sed 's/^.*coreutils) //; s/ .*\$//' )
+                    \$zcmd: \$zver
+                END_VERSIONS
+                """
+            }
+        }
+}
\ No newline at end of file
0.6.1/modules/cat/tables/README.md
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/modules/cat/tables/README.md
0.6.1/modules/cat/tables/README.md
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/modules/cat/tables/README.md Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,88 @@
+# NextFlow DSL2 Module
+
+```bash
+TABLE_SUMMARY
+```
+
+## Description
+
+Concatenates a list of tables (CSV or TAB delimited) in `.txt` or `.csv` format. The table files to be concatenated **must** have a header as the header from one of the table files will be used as the header for the concatenated result table file.
+
+\
+&nbsp;
+
+### `input:`
+
+___
+
+Type: `tuple`
+
+Takes in the following tuple of `val` table key (`table_sum_on`) and a list of table files of input type `path` (`tables`) to be concatenated. For this module to work, a `bin` directory with the script `create_mqc_data_table.py` should be present where the NextFlow script using this DSL2 module will be run. This `python` script will convert the aggregated table to `.yml` format to be used with `multiqc`.
+
+Ex:
+
+```groovy
+[ ['ectyper'], ['/data/sample1/f1_ectyper.txt', '/data/sample2/f2_ectyper.txt'] ]
+```
+
+\
+&nbsp;
+
+#### `table_sum_on`
+
+Type: `val`
+
+A single key defining what tables are being concatenated. For example, if all the `ectyper` results are being concatenated for all samples, then this can be `ectyper`.
+
+Ex:
+
+```groovy
+[ ['ectyper'], ['/data/sample1/f1_ectyper.txt', '/data/sample2/f2_ectyper.txt'] ]
+```
+
+\
+&nbsp;
+
+#### `tables`
+
+Type: `path`
+
+NextFlow input type of `path` pointing to a list of tables (files) to be concatenated.
+
+\
+&nbsp;
+
+### `output:`
+
+___
+
+Type: `tuple`
+
+Outputs a tuple of table key (`table_sum_on` from `input:`) and list of concatenated table files (`tblsummed`).
+
+\
+&nbsp;
+
+#### `tblsummed`
+
+Type: `path`
+
+NextFlow output type of `path` pointing to the concatenated table files per table key (Ex: `ectyper`).
+
+\
+&nbsp;
+
+#### `mqc_yml`
+
+Type: `path`
+
+NextFlow output type of `path` pointing to the `.yml` file storing table contents in `YAML` format which can be used to inject this table as part of the `multiqc` report.
+
+\
+&nbsp;
+
+#### `versions`
+
+Type: `path`
+
+NextFlow output type of `path` pointing to the `.yml` file storing software versions for this process.
0.6.1/modules/cat/tables/main.nf
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/modules/cat/tables/main.nf
0.6.1/modules/cat/tables/main.nf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/modules/cat/tables/main.nf Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,58 @@
+process TABLE_SUMMARY {
+    tag "$table_sum_on"
+    label 'process_micro'
+
+    // Requires `pyyaml` which does not have a dedicated container but is in the MultiQC container
+    module (params.enable_module ? "${params.swmodulepath}${params.fs}python${params.fs}3.8.1" : null)
+    conda (params.enable_conda ? "conda-forge::python=3.9 conda-forge::pyyaml conda-forge::coreutils" : null)
+    container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
+        'https://depot.galaxyproject.org/singularity/multiqc:1.14--pyhdfd78af_0' :
+        'quay.io/biocontainers/multiqc:1.14--pyhdfd78af_0' }"
+
+    input:
+    tuple val(table_sum_on), path(tables)
+
+    output:
+    tuple val(table_sum_on), path("*.tblsum.txt"), emit: tblsummed
+    path "*_mqc.yml"                             , emit: mqc_yml
+    path "versions.yml"                          , emit: versions
+
+    when:
+    task.ext.when == null || task.ext.when || tables
+
+    script:
+    def args = task.ext.args ?: ''
+    def onthese = tables.collect().join('\\n')
+    """
+    filenum="1"
+    header=""
+
+    echo -e "$onthese" | while read -r file; do
+        
+        if [ "\${filenum}" == "1" ]; then
+            header=\$( head -n1 "\${file}" )
+            echo -e "\${header}" > ${table_sum_on}.tblsum.txt
+        fi
+
+        tail -n+2 "\${file}" >> ${table_sum_on}.tblsum.txt
+
+        filenum=\$((filenum+1))
+    done
+
+    create_mqc_data_table.py $table_sum_on
+
+    cat <<-END_VERSIONS > versions.yml
+    "${task.process}":
+        bash: \$( bash --version 2>&1 | sed '1!d; s/^.*version //; s/ (.*\$//' )
+        python: \$( python --version | sed 's/Python //g' )
+    END_VERSIONS
+
+    headver=\$( head --version 2>&1 | sed '1!d; s/^.*(GNU coreutils//; s/) //;' )
+    tailver=\$( tail --version 2>&1 | sed '1!d; s/^.*(GNU coreutils//; s/) //;' )
+
+    cat <<-END_VERSIONS >> versions.yml
+        head: \$headver
+        tail: \$tailver
+    END_VERSIONS
+    """
+}
\ No newline at end of file
0.6.1/modules/cat_cat/main.nf
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/modules/cat_cat/main.nf
0.6.1/modules/cat_cat/main.nf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/modules/cat_cat/main.nf Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,80 @@
+process CAT_CAT {
+    tag "$meta.id"
+    label 'process_micro'
+
+    module (params.enable_module ? "${params.swmodulepath}${params.fs}pigz${params.fs}2.7" : null)
+    conda (params.enable_conda ? "conda-forge::pigz=2.6" : null)
+    container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
+        'https://depot.galaxyproject.org/singularity/pigz:2.3.4' :
+        'quay.io/biocontainers/pigz:2.3.4' }"
+
+    input:
+        tuple val(meta), path(files_in)
+
+    output:
+        tuple val(meta), path("*${prefix}"), emit: concatenated_reads
+        path "versions.yml"                , emit: versions
+
+    when:
+        task.ext.when == null || task.ext.when
+
+    script:
+        def args = task.ext.args ?: ''
+        def args2 = task.ext.args2 ?: ''
+        def file_list = files_in.collect { it.toString() }
+
+        // | input     | output     | command1 | command2 |
+        // |-----------|------------|----------|----------|
+        // | gzipped   | gzipped    | cat      |          |
+        // | ungzipped | ungzipped  | cat      |          |
+        // | gzipped   | ungzipped  | zcat     |          |
+        // | ungzipped | gzipped    | cat      | pigz     |
+
+        // Use input file ending as default
+        prefix   = task.ext.prefix ? "${meta.id}.${task.ext.prefix}" : "${meta.id}${file_list[0].substring(file_list[0].lastIndexOf('.'))}"
+        out_zip  = prefix.endsWith('.gz')
+        in_zip   = file_list[0].endsWith('.gz')
+        command1 = (in_zip && !out_zip) ? 'zcat' : 'cat'
+        command2 = (!in_zip && out_zip) ? "| pigz -c -p $task.cpus $args2" : ''
+        """
+        $command1 \\
+            $args \\
+            ${file_list.join(' ')} \\
+            $command2 \\
+            > ${prefix}
+
+        cat <<-END_VERSIONS > versions.yml
+        "${task.process}":
+            pigz: \$( pigz --version 2>&1 | sed 's/pigz //g' )
+        END_VERSIONS
+        """
+
+        stub:
+        def file_list = files_in.collect { it.toString() }
+        prefix   = task.ext.prefix ?: "${meta.id}${file_list[0].substring(file_list[0].lastIndexOf('.'))}"
+        """
+        touch $prefix
+
+        cat <<-END_VERSIONS > versions.yml
+        "${task.process}":
+            pigz: \$( pigz --version 2>&1 | sed 's/pigz //g' )
+        END_VERSIONS
+
+        catver=""
+        zver=""
+
+        if [ "${workflow.containerEngine}" != "null" ]; then
+            catver=\$( cat --help 2>&1 | sed -e '1!d; s/ (.*\$//' |  cut -f1-2 -d' ' )
+            zver=\$( zcat --help 2>&1 | sed -e '1!d; s/ (.*\$//' )
+
+        else
+            catver=\$( cat --version 2>&1 | sed '1!d; s/^.*(GNU coreutils//; s/) //;' )
+            zver=\$( zcat --version 2>&1 | sed '1!d; s/^.*(gzip) //' )
+        fi
+
+        cat <<-END_VERSIONS >> versions.yml
+            cat: \$catver
+            zcat: \$zver
+        END_VERSIONS
+    """
+}
\ No newline at end of file
0.6.1/modules/custom/dump_software_versions/README.md
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/modules/custom/dump_software_versions/README.md
0.6.1/modules/custom/dump_software_versions/README.md
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/modules/custom/dump_software_versions/README.md Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,57 @@
+# NextFlow DSL2 Module
+
+```bash
+DUMP_SOFTWARE_VERSIONS
+```
+
+## Description
+
+Given an `YAML` format file, produce a final `.yml` file which has unique entries and a corresponding `.mqc.yml` file for use with `multiqc`.
+
+\
+&nbsp;
+
+### `input:`
+
+___
+
+Type: `path`
+
+Takes in a `path` (`versions`) type pointing to the file to be used to produce a final `.yml` file without any duplicate entries and a `.mqc.yml` file. Generally, this is passed by mixing `versions` from various run time channels and finally passed to this module to produce a final software versions list.
+
+Ex:
+
+```groovy
+[ '/hpc/scratch/test/work/9b/e7bf7e28806419c1c9a571dacd1f67/versions.yml' ]
+```
+
+\
+&nbsp;
+
+### `output:`
+
+___
+
+#### `yml`
+
+Type: `path`
+
+NextFlow output type of `path` type pointing to an `YAML` file with software versions.
+
+\
+&nbsp;
+
+#### `mqc_yml`
+
+Type: `path`
+
+NextFlow output type of `path` pointing to `.mqc.yml` file which can be used to produce a software versions' table with `multiqc`.
+
+\
+&nbsp;
+
+#### `versions`
+
+Type: `path`
+
+NextFlow output type of `path` pointing to the `.yml` file storing software versions for this process.
0.6.1/modules/custom/dump_software_versions/main.nf
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/modules/custom/dump_software_versions/main.nf
0.6.1/modules/custom/dump_software_versions/main.nf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/modules/custom/dump_software_versions/main.nf Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,26 @@
+process DUMP_SOFTWARE_VERSIONS {
+    tag "${params.pipeline} software versions"
+    label 'process_pico'
+
+    // Requires `pyyaml` which does not have a dedicated container but is in the MultiQC container
+    module (params.enable_module ? "${params.swmodulepath}${params.fs}python${params.fs}3.8.1" : null)
+    conda (params.enable_conda ? "conda-forge::python=3.9 conda-forge::pyyaml" : null)
+    container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
+        'https://depot.galaxyproject.org/singularity/mulled-v2-ca258a039fcd88610bc4e297b13703e8be53f5ca:d638c4f85566099ea0c74bc8fddc6f531fe56753-0' :
+        'quay.io/biocontainers/mulled-v2-ca258a039fcd88610bc4e297b13703e8be53f5ca:d638c4f85566099ea0c74bc8fddc6f531fe56753-0' }"
+
+    input:
+    path versions
+
+    output:
+    path "software_versions.yml"    , emit: yml
+    path "software_versions_mqc.yml", emit: mqc_yml
+    path "versions.yml"             , emit: versions
+
+    when:
+    task.ext.when == null || task.ext.when
+
+    script:
+    def args = task.ext.args ?: ''
+    template 'dumpsoftwareversions.py'
+}
\ No newline at end of file
0.6.1/modules/custom/dump_software_versions/templates/dumpsoftwareversions.py
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/modules/custom/dump_software_versions/templates/dumpsoftwareversions.py
0.6.1/modules/custom/dump_software_versions/templates/dumpsoftwareversions.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/modules/custom/dump_software_versions/templates/dumpsoftwareversions.py Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,100 @@
+#!/usr/bin/env python
+
+import yaml
+import platform
+import subprocess
+from textwrap import dedent
+
+
+def _make_versions_html(versions):
+    html = [
+        dedent(
+            """\\
+            <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/v/dt/jszip-2.5.0/dt-1.12.1/b-2.2.3/b-colvis-2.2.3/b-html5-2.2.3/b-print-2.2.3/fc-4.1.0/r-2.3.0/sc-2.0.6/sb-1.3.3/sp-2.0.1/datatables.min.css"/>
+            <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.36/pdfmake.min.js"></script>
+            <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.36/vfs_fonts.js"></script>
+            <script type="text/javascript" src="https://cdn.datatables.net/v/dt/jszip-2.5.0/dt-1.12.1/b-2.2.3/b-colvis-2.2.3/b-html5-2.2.3/b-print-2.2.3/fc-4.1.0/r-2.3.0/sc-2.0.6/sb-1.3.3/sp-2.0.1/datatables.min.js"></script>
+            <style>
+            #cpipes-software-versions tbody:nth-child(even) {
+                background-color: #f2f2f2;
+            }
+            </style>
+            <table class="table" style="width:100%" id="cpipes-software-versions">
+                <thead>
+                    <tr>
+                        <th> Process Name </th>
+                        <th> Software </th>
+                        <th> Version  </th>
+                    </tr>
+                </thead>
+            """
+        )
+    ]
+    for process, tmp_versions in sorted(versions.items()):
+        html.append("<tbody>")
+        for i, (tool, version) in enumerate(sorted(tmp_versions.items())):
+            html.append(
+                dedent(
+                    f"""\\
+                    <tr>
+                        <td><samp>{process if (i == 0) else ''}</samp></td>
+                        <td><samp>{tool}</samp></td>
+                        <td><samp>{version}</samp></td>
+                    </tr>
+                    """
+                )
+            )
+        html.append("</tbody>")
+    html.append("</table>")
+    return "\\n".join(html)
+
+
+versions_this_module = {}
+versions_this_module["${task.process}"] = {
+    "python": platform.python_version(),
+    "yaml": yaml.__version__,
+}
+
+with open("$versions") as f:
+    versions_by_process = yaml.load(f, Loader=yaml.BaseLoader)
+    versions_by_process.update(versions_this_module)
+
+# aggregate versions by the module name (derived from fully-qualified process name)
+versions_by_module = {}
+for process, process_versions in versions_by_process.items():
+    module = process.split(":")[-1]
+    try:
+        assert versions_by_module[module] == process_versions, (
+            "We assume that software versions are the same between all modules. "
+            "If you see this error-message it means you discovered an edge-case "
+            "and should open an issue in nf-core/tools. "
+        )
+    except KeyError:
+        versions_by_module[module] = process_versions
+
+versions_by_module["CPIPES"] = {
+    "Nextflow": "$workflow.nextflow.version",
+    "$workflow.manifest.name": "$workflow.manifest.version",
+    "${params.pipeline}": "${params.workflow_version}",
+}
+
+versions_mqc = {
+    "id": "software_versions",
+    "section_name": "${workflow.manifest.name} Software Versions",
+    "section_href": "https://github.com/CFSAN-Biostatistics/bettercallsal",
+    "plot_type": "html",
+    "description": "Collected at run time from the software output (STDOUT/STDERR).",
+    "data": _make_versions_html(versions_by_module),
+}
+
+with open("software_versions.yml", "w") as f:
+    yaml.dump(versions_by_module, f, default_flow_style=False)
+
+# print('sed -i -e "' + "s%'%%g" + '" *.yml')
+subprocess.run('sed -i -e "' + "s%'%%g" + '" software_versions.yml', shell=True)
+
+with open("software_versions_mqc.yml", "w") as f:
+    yaml.dump(versions_mqc, f, default_flow_style=False)
+
+with open("versions.yml", "w") as f:
+    yaml.dump(versions_this_module, f, default_flow_style=False)
0.6.1/modules/custom/sourmash/compare/main.nf
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/modules/custom/sourmash/compare/main.nf
0.6.1/modules/custom/sourmash/compare/main.nf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/modules/custom/sourmash/compare/main.nf Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,62 @@
+process SOURMASH_COMPARE {
+    tag "Samples vs Genomes"
+    label 'process_micro'
+
+    module (params.enable_module ? "${params.swmodulepath}${params.fs}sourmash${params.fs}4.6.1" : null)
+    conda (params.enable_conda ? "conda-forge::python bioconda::sourmash=4.6.1" : null)
+    container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
+        'https://depot.galaxyproject.org/singularity/sourmash:4.6.1--hdfd78af_0':
+        'quay.io/biocontainers/sourmash:4.6.1--hdfd78af_0' }"
+
+    input:
+    path queries
+    path accessions
+
+    output:
+    path "bcs_sourmash_cont_mat.csv"            , emit: matrix, optional: true
+    path "bcs_sourmash_cont_mat.data.labels.txt", emit: labels, optional: true
+    path "versions.yml"                         , emit: versions
+
+    when:
+    task.ext.when == null || task.ext.when
+
+    script:
+    def args = task.ext.args ?: ''
+    def sm_compare_mode = ("${params.sourmashcompare_mode.split(',')}"
+        ? "--${params.sourmashcompare_mode.split(',').join(' --')}"
+        : '')
+    def sketch_args = (params.sourmashsketch_mode ?: '')
+    sketch_args += (params.sourmashsketch_singleton ? ' --singleton ' : '')
+    sketch_args += (params.sourmashsketch_p ? " -p ${params.sourmashsketch_p} " : '')
+    """
+
+    gen_otf_genome.py \\
+        -gd "${params.tuspy_gd}" \\
+        -gds "${params.tuspy_gds}" \\
+        -txt $accessions
+
+    if [ ! -e "CATTED_GENOMES_FAILED.txt" ]; then
+
+        sourmash sketch \\
+            $sketch_args \\
+            --output OTF.db.sig \\
+            CATTED_GENOMES_scaffolded_genomic.fna.gz
+
+        sourmash compare \\
+            $sm_compare_mode \\
+            --${params.sourmashsketch_mode} \\
+            -k ${params.sourmashgather_k} \\
+            --csv bcs_sourmash_cont_mat.csv \\
+            --output bcs_sourmash_cont_mat.data \\
+            ${queries.collect().join(' ')} \\
+            OTF.db.sig
+    fi
+
+    cat <<-END_VERSIONS > versions.yml
+    "${task.process}":
+        sourmash: \$(echo \$(sourmash --version 2>&1) | sed 's/^sourmash //' )
+        python: \$( python --version | sed 's/Python //g' )
+        bash: \$( bash --version 2>&1 | sed '1!d; s/^.*version //; s/ (.*\$//' )
+    END_VERSIONS
+    """
+}
\ No newline at end of file
0.6.1/modules/db_per_computed_serotype/main.nf
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/modules/db_per_computed_serotype/main.nf
0.6.1/modules/db_per_computed_serotype/main.nf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/modules/db_per_computed_serotype/main.nf Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,42 @@
+process DB_PER_COMPUTED_SEROTYPE {
+    tag "waterfall_per_computed_serotype.pl"
+    label "process_pico"
+
+    module (params.enable_module ? "${params.swmodulepath}${params.fs}perl${params.fs}5.30.0" : null)
+    conda (params.enable_conda ? "conda-forge::perl bioconda::perl-bioperl=1.7.8" : null)
+    container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
+        'https://depot.galaxyproject.org/singularity/perl-bioperl:1.7.8--hdfd78af_1' :
+        'quay.io/biocontainers/perl-bioperl:1.7.8--hdfd78af_1' }"
+
+    input:
+        path accs_tbl
+        path pdg_metadata
+
+    output:
+        path '*asm_chunk_comp.tbl'       , emit: asm_chunk_comp_tbl
+        path '*asm_chunk_comp_counts.tbl', emit: asm_chunk_comp_counts
+        path '*accs_comp.txt'            , emit: accs_comp
+        path 'mash_comp_genome_list.txt' , emit: genome_paths
+        path 'versions.yml'              , emit: versions
+
+    when:
+        task.ext.when == null || task.ext.when
+
+    script:
+        def args = task.ext.args ?: ''
+        def prefix = task.index ?: ''
+        """
+        waterfall_per_computed_serotype.pl \\
+            -p $pdg_metadata \\
+            -t $accs_tbl \\
+            $args \\
+            1> asm_chunk_comp.tbl 2> asm_chunk_comp_counts.tbl
+
+        cat <<-END_VERSIONS > versions.yml
+        "${task.process}":
+            perl: \$( perl -e 'print \$^V' | sed 's/v//g' )
+            bioperl: \$(perl -MBio::Root::Version -e 'print \$Bio::Root::Version::VERSION')
+        END_VERSIONS
+        """
+
+}
\ No newline at end of file
0.6.1/modules/db_per_snp_cluster/main.nf
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/modules/db_per_snp_cluster/main.nf
0.6.1/modules/db_per_snp_cluster/main.nf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/modules/db_per_snp_cluster/main.nf Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,43 @@
+process DB_PER_SNP_CLUSTER {
+    tag "waterfall_per_snp_cluster.pl"
+    label "process_pico"
+
+    module (params.enable_module ? "${params.swmodulepath}${params.fs}perl${params.fs}5.30.0" : null)
+    conda (params.enable_conda ? "conda-forge::perl bioconda::perl-bioperl=1.7.8" : null)
+    container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
+        'https://depot.galaxyproject.org/singularity/perl-bioperl:1.7.8--hdfd78af_1' :
+        'quay.io/biocontainers/perl-bioperl:1.7.8--hdfd78af_1' }"
+
+    input:
+        path accs_tbl
+        path pdg_metadata
+        path snp_cluster_metadata
+
+    output:
+        path '*asm_chunk_snp.tbl'       , emit: asm_chunk_snp_tbl
+        path '*asm_chunk_snp_counts.tbl', emit: asm_chunk_snp_counts
+        path '*accs_snp.txt'            , emit: accs_snp
+        path 'mash_snp_genome_list.txt' , emit: genome_paths
+        path 'versions.yml'             , emit: versions
+
+    when:
+        task.ext.when == null || task.ext.when
+
+    script:
+        def args = task.ext.args ?: ''
+        def prefix = task.index ?: ''
+        """
+        waterfall_per_snp_cluster.pl \\
+            -p $pdg_metadata \\
+            -t $accs_tbl \\
+            -snp $snp_cluster_metadata \\
+            $args \\
+            1> asm_chunk_snp.tbl 2> asm_chunk_snp_counts.tbl
+
+        cat <<-END_VERSIONS > versions.yml
+        "${task.process}":
+            perl: \$( perl -e 'print \$^V' | sed 's/v//g' )
+            bioperl: \$(perl -MBio::Root::Version -e 'print \$Bio::Root::Version::VERSION')
+        END_VERSIONS
+        """
+}
\ No newline at end of file
0.6.1/modules/download_pdg_metadata/main.nf
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/modules/download_pdg_metadata/main.nf
0.6.1/modules/download_pdg_metadata/main.nf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/modules/download_pdg_metadata/main.nf Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,36 @@
+process DOWNLOAD_PDG_METADATA {
+    tag "dl_pdg_metadata.py"
+    label "process_pico"
+
+    module (params.enable_module ? "${params.swmodulepath}${params.fs}python${params.fs}3.8.1" : null)
+    conda (params.enable_conda ? "conda-forge::python=3.10.4" : null)
+    container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
+        'https://depot.galaxyproject.org/singularity/python:3.10.4' :
+        'quay.io/biocontainers/python:3.10.4' }"
+
+    input:
+        val pdg_release
+
+    output:
+        path "**${params.fs}*.metadata.tsv"                     , emit: pdg_metadata
+        path "**${params.fs}*.reference_target.cluster_list.tsv", emit: snp_cluster_metadata
+        path "**${params.fs}*accs_all.txt"                      , emit: accs
+        path 'versions.yml'                                     , emit: versions
+
+    when:
+        task.ext.when == null || task.ext.when
+
+    script:
+        def args = task.ext.args ?: ''
+        args += (pdg_release ? " -rel ${pdg_release}" : '')
+        """
+        dl_pdg_metadata.py \\
+            $args
+
+        cat <<-END_VERSIONS > versions.yml
+        "${task.process}":
+            python: \$( python --version | sed 's/Python //g' )
+        END_VERSIONS
+        """
+
+}
\ No newline at end of file
0.6.1/modules/fastp/main.nf
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/modules/fastp/main.nf
0.6.1/modules/fastp/main.nf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/modules/fastp/main.nf Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,96 @@
+process FASTP {
+    tag "$meta.id"
+    label 'process_low'
+
+    module (params.enable_module ? "${params.swmodulepath}${params.fs}fastp${params.fs}0.23.2" : null)
+    conda (params.enable_conda ? "bioconda::fastp=0.23.2 conda-forge::isa-l" : null)
+    container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
+        'https://depot.galaxyproject.org/singularity/fastp:0.23.2--h79da9fb_0' :
+        'quay.io/biocontainers/fastp:0.23.2--h79da9fb_0' }"
+
+    input:
+        tuple val(meta), path(reads)
+
+    output:
+        tuple val(meta), path('*.fastp.fastq.gz') , emit: passed_reads, optional: true
+        tuple val(meta), path('*.fail.fastq.gz')  , emit: failed_reads, optional: true
+        tuple val(meta), path('*.merged.fastq.gz'), emit: merged_reads, optional: true
+        tuple val(meta), path('*.json')           , emit: json
+        tuple val(meta), path('*.html')           , emit: html
+        tuple val(meta), path('*.log')            , emit: log
+        path "versions.yml"                       , emit: versions
+
+    when:
+        task.ext.when == null || task.ext.when
+
+    script:
+        def args = task.ext.args ?: ''
+        def prefix = task.ext.prefix ?: "${meta.id}"
+        def fail_fastq = params.fastp_failed_out && meta.single_end ? "--failed_out ${prefix}.fail.fastq.gz" : params.fastp_failed_out && !meta.single_end ? "--unpaired1 ${prefix}_1.fail.fastq.gz --unpaired2 ${prefix}_2.fail.fastq.gz" : ''
+        // Added soft-links to original fastqs for consistent naming in MultiQC
+        // Use single ended for interleaved. Add --interleaved_in in config.
+        if ( task.ext.args?.contains('--interleaved_in') ) {
+            """
+            [ ! -f  ${prefix}.fastq.gz ] && ln -sf $reads ${prefix}.fastq.gz
+
+            fastp \\
+                --stdout \\
+                --in1 ${prefix}.fastq.gz \\
+                --thread $task.cpus \\
+                --json ${prefix}.fastp.json \\
+                --html ${prefix}.fastp.html \\
+                $fail_fastq \\
+                $args \\
+                2> ${prefix}.fastp.log \\
+            | gzip -c > ${prefix}.fastp.fastq.gz
+
+            cat <<-END_VERSIONS > versions.yml
+            "${task.process}":
+                fastp: \$(fastp --version 2>&1 | sed -e "s/fastp //g")
+            END_VERSIONS
+            """
+        } else if (meta.single_end) {
+            """
+            [ ! -f  ${prefix}.fastq.gz ] && ln -sf $reads ${prefix}.fastq.gz
+
+            fastp \\
+                --in1 ${prefix}.fastq.gz \\
+                --out1  ${prefix}.fastp.fastq.gz \\
+                --thread $task.cpus \\
+                --json ${prefix}.fastp.json \\
+                --html ${prefix}.fastp.html \\
+                $fail_fastq \\
+                $args \\
+                2> ${prefix}.fastp.log
+
+            cat <<-END_VERSIONS > versions.yml
+            "${task.process}":
+                fastp: \$(fastp --version 2>&1 | sed -e "s/fastp //g")
+            END_VERSIONS
+            """
+        } else {
+            def merge_fastq = params.fastp_merged_out ? "-m --merged_out ${prefix}.merged.fastq.gz" : ''
+            """
+            [ ! -f  ${prefix}_1.fastq.gz ] && ln -sf ${reads[0]} ${prefix}_1.fastq.gz
+            [ ! -f  ${prefix}_2.fastq.gz ] && ln -sf ${reads[1]} ${prefix}_2.fastq.gz
+            fastp \\
+                --in1 ${prefix}_1.fastq.gz \\
+                --in2 ${prefix}_2.fastq.gz \\
+                --out1 ${prefix}_1.fastp.fastq.gz \\
+                --out2 ${prefix}_2.fastp.fastq.gz \\
+                --json ${prefix}.fastp.json \\
+                --html ${prefix}.fastp.html \\
+                $fail_fastq \\
+                $merge_fastq \\
+                --thread $task.cpus \\
+                --detect_adapter_for_pe \\
+                $args \\
+                2> ${prefix}.fastp.log
+
+            cat <<-END_VERSIONS > versions.yml
+            "${task.process}":
+                fastp: \$(fastp --version 2>&1 | sed -e "s/fastp //g")
+            END_VERSIONS
+            """
+    }
+}
\ No newline at end of file
0.6.1/modules/fastqc/README.md
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/modules/fastqc/README.md
0.6.1/modules/fastqc/README.md
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/modules/fastqc/README.md Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,113 @@
+# NextFlow DSL2 Module
+
+```bash
+FASTQC
+```
+
+## Description
+
+Run `fastqc` tool on reads in FASTQ format. Produces a HTML report file and a `.zip` file containing plots and data used to produce the plots.
+
+\
+&nbsp;
+
+### `input:`
+
+___
+
+Type: `tuple`
+
+Takes in the following tuple of metadata (`meta`) and a list of reads of type `path` (`reads`) per sample (`id:`).
+
+Ex:
+
+```groovy
+[ 
+    [ id: 'FAL00870',
+       strandedness: 'unstranded',
+       single_end: true,
+       centrifuge_x: '/hpc/db/centrifuge/2022-04-12/ab'
+    ],
+    '/hpc/scratch/test/FAL000870/f1.merged.fq.gz'
+]
+```
+
+\
+&nbsp;
+
+#### `meta`
+
+Type: Groovy Map
+
+A Groovy Map containing the metadata about the FASTQ file.
+
+Ex:
+
+```groovy
+[ 
+    id: 'FAL00870',
+    strandedness: 'unstranded',
+    single_end: true
+]
+```
+
+\
+&nbsp;
+
+#### `reads`
+
+Type: `path`
+
+NextFlow input type of `path` pointing to FASTQ files on which `fastqc` classification should be run.
+
+\
+&nbsp;
+
+#### `args`
+
+Type: Groovy String
+
+String of optional command-line arguments to be passed to the tool. This can be mentioned in `process` scope within `withName:process_name` block using `ext.args` option within your `nextflow.config` file.
+
+Ex:
+
+```groovy
+withName: 'FASTQC' {
+    ext.args = '--nano'
+}
+```
+
+### `output:`
+
+___
+
+Type: `tuple`
+
+Outputs a tuple of metadata (`meta` from `input:`) and list of `fastqc` result files.
+
+\
+&nbsp;
+
+#### `html`
+
+Type: `path`
+
+NextFlow output type of `path` pointing to the `fastqc` report file in HTML format per sample (`id:`).
+
+\
+&nbsp;
+
+#### `zip`
+
+Type: `path`
+
+NextFlow output type of `path` pointing to the zipped `fastqc` results per sample (`id:`).
+
+\
+&nbsp;
+
+#### `versions`
+
+Type: `path`
+
+NextFlow output type of `path` pointing to the `.yml` file storing software versions for this process.
0.6.1/modules/fastqc/main.nf
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/modules/fastqc/main.nf
0.6.1/modules/fastqc/main.nf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/modules/fastqc/main.nf Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,48 @@
+process FASTQC {
+    tag "$meta.id"
+    label 'process_micro'
+
+    module (params.enable_module ? "${params.swmodulepath}${params.fs}fastqc${params.fs}0.11.9" : null)
+    conda (params.enable_conda ? "conda-forge::perl bioconda::fastqc=0.11.9" : null)
+    container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
+        'https://depot.galaxyproject.org/singularity/fastqc:0.11.9--0' :
+        'quay.io/biocontainers/fastqc:0.11.9--0' }"
+
+    input:
+    tuple val(meta), path(reads)
+
+    output:
+    tuple val(meta), path("*.html"), emit: html
+    tuple val(meta), path("*.zip") , emit: zip
+    path  "versions.yml"           , emit: versions
+
+    when:
+    task.ext.when == null || task.ext.when
+
+    script:
+    def args = task.ext.args ?: ''
+    // Add soft-links to original FastQs for consistent naming in pipeline
+    def prefix = task.ext.prefix ?: "${meta.id}"
+    if (meta.single_end) {
+        """
+        [ ! -f  ${prefix}.fastq.gz ] && ln -s $reads ${prefix}.fastq.gz
+        fastqc $args --threads $task.cpus ${prefix}.fastq.gz
+
+        cat <<-END_VERSIONS > versions.yml
+        "${task.process}":
+            fastqc: \$( fastqc --version | sed -e "s/FastQC v//g" )
+        END_VERSIONS
+        """
+    } else {
+        """
+        [ ! -f  ${prefix}_1.fastq.gz ] && ln -s ${reads[0]} ${prefix}_1.fastq.gz
+        [ ! -f  ${prefix}_2.fastq.gz ] && ln -s ${reads[1]} ${prefix}_2.fastq.gz
+        fastqc $args --threads $task.cpus ${prefix}_1.fastq.gz ${prefix}_2.fastq.gz
+
+        cat <<-END_VERSIONS > versions.yml
+        "${task.process}":
+            fastqc: \$( fastqc --version | sed -e "s/FastQC v//g" )
+        END_VERSIONS
+        """
+    }
+}
\ No newline at end of file
0.6.1/modules/filter_pdg_metadata/main.nf
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/modules/filter_pdg_metadata/main.nf
0.6.1/modules/filter_pdg_metadata/main.nf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/modules/filter_pdg_metadata/main.nf Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,60 @@
+process FILTER_PDG_METADATA {
+    tag "NCBI datasets"
+    label "process_micro"
+
+    module (params.enable_module ? "${params.swmodulepath}${params.fs}perl${params.fs}5.30.0" : null)
+    conda (params.enable_conda ? "conda-forge::perl conda-forge::coreutils bioconda::perl-bioperl=1.7.8" : null)
+    container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
+        'https://depot.galaxyproject.org/singularity/perl-bioperl:1.7.8--hdfd78af_1' :
+        'quay.io/biocontainers/perl-bioperl:1.7.8--hdfd78af_1' }"
+
+    input:
+        path accs_chunk
+
+    output:
+        path '*accs_chunk_tbl.tsv', emit: accs_chunk_tbl
+        path 'versions.yml'       , emit: versions
+
+    when:
+        task.ext.when == null || task.ext.when
+
+    script:
+        def args = task.ext.args ?: ''
+        def prefix = task.index ?: ''
+        """
+        datasets summary genome accession \\
+            --as-json-lines \\
+            --report sequence \\
+            --inputfile $accs_chunk | \\
+            dataformat tsv genome-seq \\
+            --fields accession \\
+            --elide-header | sort -u > "${prefix}_accs_chunk_tbl.filt"
+
+        datasets summary genome accession \\
+            --inputfile "${prefix}_accs_chunk_tbl.filt" \\
+            --assembly-version latest \\
+            --as-json-lines | \\
+            dataformat tsv genome \\
+            --fields accession,assminfo-level,assmstats-scaffold-n50,assmstats-contig-n50 \\
+            --elide-header \\
+            > "${prefix}_accs_chunk_tbl.tsv"
+
+        cat <<-END_VERSIONS > versions.yml
+        "${task.process}":
+            datasets: \$( datasets --version | sed 's/datasets version: //g' )
+            dataformat: \$( dataformat version )
+        END_VERSIONS
+
+        sortver=""
+
+        if [ "${workflow.containerEngine}" != "null" ]; then
+            sortver=\$( sort --help 2>&1 | sed -e '1!d; s/ (.*\$//' )
+        else
+            sortver=\$( sort --version 2>&1 | sed '1!d; s/^.*(GNU coreutils//; s/) //;' )
+        fi
+
+        cat <<-END_VERSIONS >> versions.yml
+            sort: \$sortver
+        END_VERSIONS
+        """
+}
\ No newline at end of file
0.6.1/modules/gen_samplesheet/README.md
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/modules/gen_samplesheet/README.md
0.6.1/modules/gen_samplesheet/README.md
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/modules/gen_samplesheet/README.md Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,55 @@
+# NextFlow DSL2 Module
+
+```bash
+GEN_SAMPLESHEET
+```
+
+## Description
+
+Generates a sample sheet in CSV format that contains required fields to be used to construct a Groovy Map of metadata. It requires as input, an absolute UNIX path to a folder containing only FASTQ files. This module requires the `fastq_dir_to_samplesheet.py` script to be present in the `bin` folder from where the NextFlow script including this module will be executed.
+
+\
+&nbsp;
+
+### `input:`
+
+___
+
+Type: `val`
+
+Takes in the absolute UNIX path to a folder containing only FASTQ files (`inputdir`).
+
+Ex:
+
+```groovy
+'/hpc/scratch/test/reads'
+```
+
+\
+&nbsp;
+
+### `output:`
+
+___
+
+Type: `path`
+
+NextFlow output of type `path` pointing to auto-generated CSV sample sheet (`csv`).
+
+\
+&nbsp;
+
+#### `csv`
+
+Type: `path`
+
+NextFlow output type of `path` pointing to auto-generated CSV sample sheet for all FASTQ files present in the folder given by NextFlow input type of `val` (`inputdir`).
+
+\
+&nbsp;
+
+#### `versions`
+
+Type: `path`
+
+NextFlow output type of `path` pointing to the `.yml` file storing software versions for this process.
0.6.1/modules/gen_samplesheet/main.nf
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/modules/gen_samplesheet/main.nf
0.6.1/modules/gen_samplesheet/main.nf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/modules/gen_samplesheet/main.nf Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,41 @@
+process GEN_SAMPLESHEET {
+    tag "${inputdir.simpleName}"
+    label "process_pico"
+
+    module (params.enable_module ? "${params.swmodulepath}${params.fs}python${params.fs}3.8.1" : null)
+    conda (params.enable_conda ? "conda-forge::python=3.9.5" : null)
+    container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
+        'https://depot.galaxyproject.org/singularity/python:3.9--1' :
+        'quay.io/biocontainers/python:3.9--1' }"
+
+    input:
+        val inputdir
+
+    output:
+        path '*.csv'       , emit: csv
+        path 'versions.yml', emit: versions
+
+    when:
+        task.ext.when == null || task.ext.when
+
+    // This script (fastq_dir_to_samplesheet.py) is distributed
+    // as part of the pipeline nf-core/rnaseq/bin/. MIT License.
+    script:
+        def this_script_args = (params.fq_single_end ? ' -se' : '')
+        this_script_args += (params.fq_suffix ? " -r1 '${params.fq_suffix}'" : '')
+        this_script_args += (params.fq2_suffix ? " -r2 '${params.fq2_suffix}'" : '')
+
+        """
+        fastq_dir_to_samplesheet.py -sn \\
+            -st '${params.fq_strandedness}' \\
+            -sd '${params.fq_filename_delim}' \\
+            -si ${params.fq_filename_delim_idx} \\
+            ${this_script_args} \\
+            ${inputdir} autogen_samplesheet.csv
+
+        cat <<-END_VERSIONS > versions.yml
+        "${task.process}":
+            python: \$( python --version | sed 's/Python //g' )
+        END_VERSIONS
+        """
+}
\ No newline at end of file
0.6.1/modules/index_metadata/main.nf
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/modules/index_metadata/main.nf
0.6.1/modules/index_metadata/main.nf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/modules/index_metadata/main.nf Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,37 @@
+process INDEX_METADATA {
+    tag "get_top_unique_mash_hit_genomes.py"
+    label "process_pico"
+
+    module (params.enable_module ? "${params.swmodulepath}${params.fs}python${params.fs}3.8.1" : null)
+    conda (params.enable_conda ? "conda-forge::python=3.10.4" : null)
+    container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
+        'https://depot.galaxyproject.org/singularity/python:3.10.4' :
+        'quay.io/biocontainers/python:3.10.4' }"
+
+    input:
+        tuple val(type), path(sero_tbl)
+
+    output:
+        path '*.ACC2SERO.pickle', emit: acc2sero
+        path 'versions.yml'     , emit: versions
+
+    when:
+        task.ext.when == null || task.ext.when
+
+    script:
+        def args = task.ext.args ?: ''
+        def prefix = (
+            type.find(/_comp/) \
+            ? type.replaceAll(/\_comp/, 'per_comp_serotype') \
+            : type.replaceAll(/\_snp/, 'per_snp_cluster')
+        )
+        """
+        get_top_unique_mash_hit_genomes.py \\
+            -s $sero_tbl -op $prefix
+
+        cat <<-END_VERSIONS > versions.yml
+        "${task.process}":
+            python: \$( python --version | sed 's/Python //g' )
+        END_VERSIONS
+        """
+}
\ No newline at end of file
0.6.1/modules/kma/align/README.md
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/modules/kma/align/README.md
0.6.1/modules/kma/align/README.md
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/modules/kma/align/README.md Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,135 @@
+# NextFlow DSL2 Module
+
+```bash
+KMA_ALIGN
+```
+
+## Description
+
+Run `kma` alinger on input FASTQ files with a pre-formatted `kma` index.
+
+\
+&nbsp;
+
+### `input:`
+
+___
+
+Type: `tuple`
+
+Takes in the following tuple of metadata (`meta`) and a list of reads of type `path` (`reads`) and a correspondonding `kma` pre-formatted index folder per sample (`id:`).
+
+Ex:
+
+```groovy
+[ 
+    [ 
+        id: 'FAL00870',
+        strandedness: 'unstranded',
+        single_end: false
+    ],
+    [
+        '/hpc/scratch/test/f1.R1.fq.gz',
+        '/hpc/scratch/test/f1.R2.fq.gz'
+    ],
+    '/path/to/kma/index/folder'
+]
+```
+
+\
+&nbsp;
+
+#### `meta`
+
+Type: Groovy Map
+
+A Groovy Map containing the metadata about the FASTQ file.
+
+Ex:
+
+```groovy
+[ 
+    id: 'FAL00870',
+    strandedness: 'unstranded',
+    single_end: true
+]
+```
+
+\
+&nbsp;
+
+#### `reads`
+
+Type: `path`
+
+NextFlow input type of `path` pointing to paired-end FASTQ files on which `bbmerge.sh` should be run.
+
+\
+&nbsp;
+
+#### `index`
+
+Type: `path`
+
+NextFlow input type of `path` pointing to folder containing `kma` index files.
+
+\
+&nbsp;
+
+#### `args`
+
+Type: Groovy String
+
+String of optional command-line arguments to be passed to the tool. This can be mentioned in `process` scope within `withName:process_name` block using `ext.args` option within your `nextflow.config` file.
+
+Ex:
+
+```groovy
+withName: 'KMA_ALIGN' {
+    ext.args = '-mint2'
+}
+```
+
+### `output:`
+
+___
+
+Type: `tuple`
+
+Outputs a tuple of metadata (`meta` from `input:`) and `kma` result files.
+
+\
+&nbsp;
+
+#### `res`
+
+Type: `path`
+
+NextFlow output type of `path` pointing to the `.res` file from `kma` per sample (`id:`).
+
+\
+&nbsp;
+
+#### `mapstat`
+
+Type: `path`
+
+NextFlow output type of `path` pointing to the `.map` file from `kma` per sample (`id:`). Optional: `true`
+
+\
+&nbsp;
+
+#### `hits`
+
+Type: `path`
+
+NextFlow output type of `path` pointing to a `*_template_hits.txt` file containing only hit IDs. Optional: `true`
+
+\
+&nbsp;
+
+#### `versions`
+
+Type: `path`
+
+NextFlow output type of `path` pointing to the `.yml` file storing software versions for this process.
0.6.1/modules/kma/align/main.nf
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/modules/kma/align/main.nf
0.6.1/modules/kma/align/main.nf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/modules/kma/align/main.nf Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,73 @@
+process KMA_ALIGN {
+    tag "$meta.id"
+    label 'process_micro'
+
+    module (params.enable_module ? "${params.swmodulepath}${params.fs}kma${params.fs}1.4.4" : null)
+    conda (params.enable_conda ? "conda-forge::libgcc-ng bioconda::kma=1.4.3" : null)
+    container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
+        'https://depot.galaxyproject.org/singularity/kma:1.4.3--h7132678_1':
+        'quay.io/biocontainers/kma:1.4.3--h7132678_1' }"
+
+    input:
+        tuple val(meta), path(reads), path(index)
+
+    output:
+        path "${meta.id}_kma_res"
+        tuple val(meta), path("${meta.id}_kma_res${params.fs}*.res")              , emit: res
+        tuple val(meta), path("${meta.id}_kma_res${params.fs}*.mapstat")          , emit: mapstat, optional: true
+        tuple val(meta), path("${meta.id}_kma_res${params.fs}*.frag.gz")          , emit: frags, optional: true
+        tuple val(meta), path("${meta.id}_kma_res${params.fs}*_template_hits.txt"), emit: hits, optional: true
+        path "versions.yml"                                                       , emit: versions
+
+    when:
+        task.ext.when == null || task.ext.when
+
+    script:
+        def args = task.ext.args ?: ''
+        def prefix = task.ext.prefix ?: "${meta.id}"
+        def reads_in = (meta.single_end ? "-i $reads" : "-ipe ${reads[0]} ${reads[1]}")
+        def db = (meta.kma_t_db ?: "${index}")
+        def db_basename = (db ? "${index.baseName}" : '')
+        def get_hit_accs = (meta.get_kma_hit_accs ? 'true' : 'false')
+        def res_dir = prefix + '_kma_res'
+        reads_in = (params.kmaalign_int ? "-int $reads" : "-i $reads")
+        """
+        mkdir -p $res_dir || exit 1
+        kma \\
+            $args \\
+            -t_db $db${params.fs}$db_basename \\
+            -t $task.cpus \\
+            -o $res_dir${params.fs}$prefix \\
+            $reads_in
+
+        if [ "$get_hit_accs" == "true" ]; then
+            grep -v '^#' $res_dir${params.fs}${prefix}.res | \\
+                grep -E -o 'GC[AF]\\_[0-9]+\\.*[0-9]*' > $res_dir${params.fs}${prefix}_template_hits.txt
+        fi
+
+        cat <<-END_VERSIONS > versions.yml
+        "${task.process}":
+            kma: \$( kma -v | sed -e 's%KMA-%%' )
+        END_VERSIONS
+
+        mkdirver=""
+        cutver=""
+        grepver=""
+
+        if [ "${workflow.containerEngine}" != "null" ]; then
+            mkdirver=\$( mkdir --help 2>&1 | sed -e '1!d; s/ (.*\$//' |  cut -f1-2 -d' ' )
+            cutver="\$mkdirver"
+            grepver="\$mkdirver"
+        else
+            mkdirver=\$( mkdir --version 2>&1 | sed '1!d; s/^.*(GNU coreutils//; s/) //;' )
+            cutver=\$( cut --version 2>&1 | sed '1!d; s/^.*(GNU coreutils//; s/) //;' )
+            grepver=\$( echo \$(grep --version 2>&1) | sed 's/^.*(GNU grep) //; s/ Copyright.*\$//' )
+        fi
+
+        cat <<-END_VERSIONS >> versions.yml
+            mkdir: \$mkdirver
+            cut: \$cutver
+            grep: \$grepver
+        END_VERSIONS
+        """
+}
\ No newline at end of file
0.6.1/modules/kma/index/README.md
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/modules/kma/index/README.md
0.6.1/modules/kma/index/README.md
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/modules/kma/index/README.md Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,86 @@
+# NextFlow DSL2 Module
+
+```bash
+KMA_INDEX
+```
+
+## Description
+
+Run `kma index` alinger on input FASTA files.
+
+\
+&nbsp;
+
+### `input:`
+
+___
+
+Type: `tuple`
+
+Takes in the following tuple of metadata (`meta`) and a FASTA file of type `path` (`fasta`) per sample (`id:`).
+
+Ex:
+
+```groovy
+[ 
+    [ 
+        id: 'FAL00870',
+    ],
+    '/path/to/FAL00870_contigs.fasta'
+]
+```
+
+\
+&nbsp;
+
+#### `meta`
+
+Type: Groovy Map
+
+A Groovy Map containing the metadata about the FASTA file.
+
+Ex:
+
+```groovy
+[ 
+    id: 'FAL00870'
+]
+```
+
+\
+&nbsp;
+
+#### `fasta`
+
+Type: `path`
+
+NextFlow input type of `path` pointing to the FASTA file on which the `kma index` command should be run.
+
+\
+&nbsp;
+
+### `output:`
+
+___
+
+Type: `tuple`
+
+Outputs a tuple of metadata (`meta` from `input:`) and a folder containing `kma index` files.
+
+\
+&nbsp;
+
+#### `idx`
+
+Type: `path`
+
+NextFlow output type of `path` pointing to the folder containing `kma index` files per sample (`id:`).
+
+\
+&nbsp;
+
+#### `versions`
+
+Type: `path`
+
+NextFlow output type of `path` pointing to the `.yml` file storing software versions for this process.
0.6.1/modules/kma/index/main.nf
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/modules/kma/index/main.nf
0.6.1/modules/kma/index/main.nf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/modules/kma/index/main.nf Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,57 @@
+process KMA_INDEX {
+    tag "$meta.id"
+    label 'process_nano'
+
+    module (params.enable_module ? "${params.swmodulepath}${params.fs}kma${params.fs}1.4.4" : null)
+    conda (params.enable_conda ? "conda-forge::libgcc-ng bioconda::kma=1.4.3 conda-forge::coreutils" : null)
+    container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
+        'https://depot.galaxyproject.org/singularity/kma:1.4.3--h7132678_1':
+        'quay.io/biocontainers/kma:1.4.3--h7132678_1' }"
+
+    input:
+        tuple val(meta), path(fasta)
+
+    output:
+        tuple val(meta), path("${meta.id}_kma_idx"), emit: idx
+        path "versions.yml"                        , emit: versions
+
+    when:
+        task.ext.when == null || task.ext.when
+
+    script:
+        def args = task.ext.args ?: ''
+        def prefix = task.ext.prefix ?: "${meta.id}_kma_idx"
+        def add_to_db = (meta.kmaindex_t_db ? "-t_db ${meta.kmaindex_t_db}" : '')
+        """
+        mkdir -p $prefix && cd $prefix || exit 1
+        kma \\
+            index \\
+            $args \\
+            $add_to_db \\
+            -i ../$fasta \\
+            -o $prefix
+        cd .. || exit 1
+
+        cat <<-END_VERSIONS > versions.yml
+        "${task.process}":
+            kma: \$( kma -v | sed -e 's%KMA-%%' )
+        END_VERSIONS
+
+        mkdirver=""
+        cutver=""
+
+        if [ "${workflow.containerEngine}" != "null" ]; then
+            mkdirver=\$( mkdir --help 2>&1 | sed -e '1!d; s/ (.*\$//' |  cut -f1-2 -d' ' )
+            cutver="\$mkdirver"
+        else
+            mkdirver=\$( mkdir --version 2>&1 | sed '1!d; s/^.*(GNU coreutils//; s/) //;' )
+            cutver=\$( cut --version 2>&1 | sed '1!d; s/^.*(GNU coreutils//; s/) //;' )
+        fi
+
+        cat <<-END_VERSIONS >> versions.yml
+            mkdir: \$mkdirver
+            cut: \$cutver
+            cd: \$( bash --version 2>&1 | sed '1!d; s/^.*version //; s/ (.*\$//' )
+        END_VERSIONS
+        """
+}
\ No newline at end of file
0.6.1/modules/mash/screen/README.md
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/modules/mash/screen/README.md
0.6.1/modules/mash/screen/README.md
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/modules/mash/screen/README.md Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,88 @@
+# NextFlow DSL2 Module
+
+```bash
+MASH_SCREEN
+```
+
+## Description
+
+Run `mash screen` on the input FASTQ file.
+
+\
+&nbsp;
+
+### `input:`
+
+___
+
+Type: `tuple`
+
+Takes in the following tuple of metadata (`meta`) and a list of reads of type `path` (`query`) per sample (`id:`).
+
+Ex:
+
+```groovy
+[ 
+    [ 
+        id: 'FAL00870'
+    ],
+    [
+        '/hpc/scratch/test/f1.fq.gz'
+    ]
+]
+```
+
+\
+&nbsp;
+
+#### `meta`
+
+Type: Groovy Map
+
+A Groovy Map containing the metadata about the FASTQ file.
+
+Ex:
+
+```groovy
+[ 
+    id: 'FAL00870'
+]
+```
+
+\
+&nbsp;
+
+#### `query`
+
+Type: `path`
+
+NextFlow input type of `path` pointing to FASTQ file to be screened.
+
+\
+&nbsp;
+
+### `output:`
+
+___
+
+Type: `tuple`
+
+Outputs a tuple of metadata (`meta` from `input:`) and `mash screen` result file ending with suffix `.screened`.
+
+\
+&nbsp;
+
+#### `screened`
+
+Type: `path`
+
+NextFlow output type of `path` pointing to the result (`*.screened`) of the `mash screen` command per sample (`id:`).
+
+\
+&nbsp;
+
+#### `versions`
+
+Type: `path`
+
+NextFlow output type of `path` pointing to the `.yml` file storing software versions for this process.
0.6.1/modules/mash/screen/main.nf
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/modules/mash/screen/main.nf
0.6.1/modules/mash/screen/main.nf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/modules/mash/screen/main.nf Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,39 @@
+process MASH_SCREEN {
+    tag "$meta.id"
+    label 'process_micro'
+
+    module (params.enable_module ? "${params.swmodulepath}${params.fs}mash${params.fs}2.3" : null)
+    conda (params.enable_conda ? "conda-forge::capnproto conda-forge::gsl bioconda::mash=2.3" : null)
+    container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
+        'https://depot.galaxyproject.org/singularity/mash:2.3--he348c14_1':
+        'quay.io/biocontainers/mash:2.3--he348c14_1' }"
+
+    input:
+        tuple val(meta), path(query)
+
+    output:
+        tuple val(meta), path("*.screened"), emit: screened
+        path "versions.yml"                , emit: versions
+
+    when:
+        task.ext.when == null || task.ext.when
+
+    script:
+        def args = task.ext.args ?: ''
+        def prefix = task.ext.prefix ?: "${meta.id}"
+        def sequence_sketch = (meta.sequence_sketch ?: '')
+        """
+        mash \\
+            screen \\
+            $args \\
+            -p $task.cpus \\
+            $sequence_sketch \\
+            $query \\
+            > ${prefix}.screened
+
+        cat <<-END_VERSIONS > versions.yml
+        "${task.process}":
+            mash: \$( mash --version )
+        END_VERSIONS
+        """
+}
\ No newline at end of file
0.6.1/modules/mash/sketch/README.md
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/modules/mash/sketch/README.md
0.6.1/modules/mash/sketch/README.md
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/modules/mash/sketch/README.md Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,97 @@
+# NextFlow DSL2 Module
+
+```bash
+MASH_SKETCH
+```
+
+## Description
+
+Run `mash sketch` on the input FASTQ or FASTA files, gzipped or unzipped.
+
+\
+&nbsp;
+
+### `input:`
+
+___
+
+Type: `tuple`
+
+Takes in the following tuple of metadata (`meta`) and a list of reads of type `path` (`query`) per sample (`id:`).
+
+Ex:
+
+```groovy
+[ 
+    [ 
+        id: 'FAL00870'
+    ],
+    [
+        '/hpc/scratch/test/f1.fq.gz'
+    ]
+]
+```
+
+\
+&nbsp;
+
+#### `meta`
+
+Type: Groovy Map
+
+A Groovy Map containing the metadata about the FASTQ file.
+
+Ex:
+
+```groovy
+[ 
+    id: 'FAL00870'
+]
+```
+
+\
+&nbsp;
+
+#### `query`
+
+Type: `path`
+
+NextFlow input type of `path` pointing to either FASTQ or FASTA files to be sketched.
+
+\
+&nbsp;
+
+### `output:`
+
+___
+
+Type: `tuple`
+
+Outputs a tuple of metadata (`meta` from `input:`) and `mash sketch` files ending with suffix `.msh`.
+
+\
+&nbsp;
+
+#### `sketch`
+
+Type: `path`
+
+NextFlow output type of `path` pointing to the sketch (`*.msh`) file per sample (`id:`).
+
+\
+&nbsp;
+
+#### `stats`
+
+Type: `path`
+
+NextFlow output type of `path` pointing to the log of the `mash sketch` command per sample (`id:`).
+
+\
+&nbsp;
+
+#### `versions`
+
+Type: `path`
+
+NextFlow output type of `path` pointing to the `.yml` file storing software versions for this process.
0.6.1/modules/mash/sketch/main.nf
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/modules/mash/sketch/main.nf
0.6.1/modules/mash/sketch/main.nf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/modules/mash/sketch/main.nf Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,41 @@
+process MASH_SKETCH {
+    tag "mash sketch"
+    label 'process_micro'
+
+    module (params.enable_module ? "${params.swmodulepath}${params.fs}mash${params.fs}2.3" : null)
+    conda (params.enable_conda ? "conda-forge::capnproto conda-forge::gsl bioconda::mash=2.3" : null)
+    container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
+        'https://depot.galaxyproject.org/singularity/mash:2.3--he348c14_1':
+        'quay.io/biocontainers/mash:2.3--he348c14_1' }"
+
+    input:
+        tuple val(meta), path(query), path(genomes_dir)
+
+    output:
+        tuple val(meta), path("*.msh")               , emit: sketch
+        tuple val(meta), path("*_mash_sketch.status"), emit: stats
+        path "versions.yml"                          , emit: versions
+
+    when:
+        task.ext.when == null || task.ext.when
+
+    script:
+        def args = task.ext.args ?: ''
+        def prefix = task.ext.prefix ?: "${meta.id}"
+        def queries = (query ?: query.collect().join(' '))
+        sleep(Math.round(params.genomes_chunk.toInteger()) as int * 600)
+        """
+        mash \\
+            sketch \\
+            -p $task.cpus \\
+            -o "msh.k${params.mashsketch_k}.${params.mashsketch_s}h.${prefix}" \\
+            $args \\
+            $queries \\
+            2> ${prefix}_mash_sketch.status
+
+        cat <<-END_VERSIONS > versions.yml
+        "${task.process}":
+            mash: \$( mash --version )
+        END_VERSIONS
+        """
+}
\ No newline at end of file
0.6.1/modules/megahit/assemble/README.md
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/modules/megahit/assemble/README.md
0.6.1/modules/megahit/assemble/README.md
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/modules/megahit/assemble/README.md Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,97 @@
+# NextFlow DSL2 Module
+
+```bash
+MEGAHIT_ASSEMBLE
+```
+
+## Description
+
+Run `megahit` assembler tool on a list of read files in FASTQ format.
+
+\
+&nbsp;
+
+### `input:`
+
+___
+
+Type: `tuple`
+
+Takes in the following tuple of metadata (`meta`) and a list of FASTQ files (short reads) of input type `path` (`reads`).
+
+Ex:
+
+```groovy
+[ [id: 'sample1', single_end: true], '/data/sample1/f_merged.fq.gz' ]
+[ [id: 'sample1', single_end: false], ['/data/sample1/f1_merged.fq.gz', '/data/sample2/f2_merged.fq.gz'] ]
+```
+
+\
+&nbsp;
+
+#### `meta`
+
+Type: Groovy Map
+
+A Groovy Map containing the metadata about the FASTQ file.
+
+Ex:
+
+```groovy
+[ id: 'KB01', strandedness: 'unstranded', single_end: true ]
+```
+
+\
+&nbsp;
+
+#### `reads`
+
+Type: `path`
+
+NextFlow input type of `path` pointing to short read files in FASTQ format that need to be *de novo* assembled.
+
+\
+&nbsp;
+
+#### `args`
+
+Type: Groovy String
+
+String of optional command-line arguments to be passed to the tool. This can be mentioned in `process` scope within `withName:process_name` block using `ext.args` option within your `nextflow.config` file.
+
+Ex:
+
+```groovy
+withName: 'MEGAHIT_ASSEMBLE' {
+    ext.args = '--keep-tmp-files'
+}
+```
+
+\
+&nbsp;
+
+### `output:`
+
+___
+
+Type: `tuple`
+
+Outputs a tuple of metadata (`meta` from `input:`) and `megahit` assembled contigs file in FASTA format.
+
+\
+&nbsp;
+
+#### `assembly`
+
+Type: `path`
+
+NextFlow output type of `path` pointing to the `megahit` assembler results file (`final.contigs.fa`) per sample (`id:`) i.e., the final assembled contigs file in FASTA format.
+
+\
+&nbsp;
+
+#### `versions`
+
+Type: `path`
+
+NextFlow output type of `path` pointing to the `.yml` file storing software versions for this process.
0.6.1/modules/megahit/assemble/main.nf
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/modules/megahit/assemble/main.nf
0.6.1/modules/megahit/assemble/main.nf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/modules/megahit/assemble/main.nf Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,57 @@
+process MEGAHIT_ASSEMBLE {
+    tag "$meta.id"
+    label 'process_micro'
+
+    module (params.enable_module ? "${params.swmodulepath}${params.fs}megahit${params.fs}1.2.9" : null)
+    conda (params.enable_conda ? "conda-forge::python bioconda::megahit=1.2.9" : null)
+    container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
+        'https://depot.galaxyproject.org/singularity/megahit:1.2.9--h2e03b76_1' :
+        'quay.io/biocontainers/megahit:1.2.9--h2e03b76_1' }"
+
+    input:
+        tuple val(meta), path(reads)
+
+    output:
+        tuple val(meta), path("${meta.id}${params.fs}${meta.id}.contigs.fa"), emit: assembly, optional: true
+        path "versions.yml"                                                 , emit: versions
+
+    when:
+        task.ext.when == null || task.ext.when
+
+    script:
+        def args = task.ext.args ?: ''
+        def prefix = task.ext.prefix ?: "${meta.id}"
+        def maxmem = task.memory ? "--memory ${task.memory.toBytes()}" : ""
+        if (meta.single_end) {
+            """
+            megahit \\
+                -r ${reads} \\
+                -t $task.cpus \\
+                $maxmem \\
+                $args \\
+                --out-dir $prefix \\
+                --out-prefix $prefix
+
+            cat <<-END_VERSIONS > versions.yml
+            "${task.process}":
+                megahit: \$(echo \$(megahit -v 2>&1) | sed 's/MEGAHIT v//')
+            END_VERSIONS
+            """
+        } else {
+            """
+            megahit \\
+                -1 ${reads[0]} \\
+                -2 ${reads[1]} \\
+                -t $task.cpus \\
+                $maxmem \\
+                $args \\
+                --out-dir $prefix \\
+                --out-prefix $prefix
+
+            cat <<-END_VERSIONS > versions.yml
+            "${task.process}":
+                megahit: \$(echo \$(megahit -v 2>&1) | sed 's/MEGAHIT v//')
+            END_VERSIONS
+            """
+    }
+}
0.6.1/modules/mlst/README.md
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/modules/mlst/README.md
0.6.1/modules/mlst/README.md
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/modules/mlst/README.md Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,96 @@
+# NextFlow DSL2 Module
+
+```bash
+MLST
+```
+
+## Description
+
+Run `mlst` tool on a list of assembled contigs in FASTA format. Produces a single output table in ASCII text format.
+
+\
+&nbsp;
+
+### `input:`
+
+___
+
+Type: `tuple`
+
+Takes in the following tuple of metadata (`meta`) and a list of assemled contig FASTA files of input type `path` (`fasta`).
+
+Ex:
+
+```groovy
+[ [id: 'sample1', single_end: true], '/data/sample1/f_assembly.fa' ]
+```
+
+\
+&nbsp;
+
+#### `meta`
+
+Type: Groovy Map
+
+A Groovy Map containing the metadata about the FASTQ file.
+
+Ex:
+
+```groovy
+[ id: 'FAL00870', strandedness: 'unstranded', single_end: true ]
+```
+
+\
+&nbsp;
+
+#### `fasta`
+
+Type: `path`
+
+NextFlow input type of `path` pointing to assembled contig file in FASTA format.
+
+\
+&nbsp;
+
+#### `args`
+
+Type: Groovy String
+
+String of optional command-line arguments to be passed to the tool. This can be mentioned in `process` scope within `withName:process_name` block using `ext.args` option within your `nextflow.config` file.
+
+Ex:
+
+```groovy
+withName: 'MLST' {
+    ext.args = '--nopath'
+}
+```
+
+\
+&nbsp;
+
+### `output:`
+
+___
+
+Type: `tuple`
+
+Outputs a tuple of metadata (`meta` from `input:`) and list of `mlst` result files (`tsv`).
+
+\
+&nbsp;
+
+#### `tsv`
+
+Type: `path`
+
+NextFlow output type of `path` pointing to the `mlst` results table file per sample (`id:`).
+
+\
+&nbsp;
+
+#### `versions`
+
+Type: `path`
+
+NextFlow output type of `path` pointing to the `.yml` file storing software versions for this process.
0.6.1/modules/mlst/main.nf
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/modules/mlst/main.nf
0.6.1/modules/mlst/main.nf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/modules/mlst/main.nf Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,37 @@
+process MLST {
+    tag "$meta.id"
+    label 'process_micro'
+
+    module (params.enable_module ? "${params.swmodulepath}${params.fs}mlst${params.fs}2.23.0" : null)
+    conda (params.enable_conda ? "conda-forge::perl bioconda::mlst=2.23.0" : null)
+    container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
+        'https://depot.galaxyproject.org/singularity/mlst:2.23.0--hdfd78af_1' :
+        'quay.io/biocontainers/mlst:2.23.0--hdfd78af_1' }"
+
+    input:
+    tuple val(meta), path(fasta)
+
+    output:
+    tuple val(meta), path("*.tsv"), emit: tsv
+    path "versions.yml"           , emit: versions
+
+    when:
+    (task.ext.when == null || task.ext.when) && fasta.size() > 0
+
+    script:
+    def args = task.ext.args ?: ''
+    def prefix = task.ext.prefix ?: "${meta.id}"
+    """
+    mlst \\
+        --threads $task.cpus \\
+        --label $prefix \\
+        $args \\
+        $fasta > ${prefix}.tsv
+
+    cat <<-END_VERSIONS > versions.yml
+    "${task.process}":
+        mlst: \$( echo \$(mlst --version 2>&1) | sed 's/mlst //' )
+    END_VERSIONS
+    """
+
+}
\ No newline at end of file
0.6.1/modules/multiqc/README.md
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/modules/multiqc/README.md
0.6.1/modules/multiqc/README.md
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/modules/multiqc/README.md Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,67 @@
+# NextFlow DSL2 Module
+
+```bash
+MULTIQC
+```
+
+## Description
+
+Generate an aggregated [**MultiQC**](https://multiqc.info/) report. This particular module **will only work** within the framework of `cpipes` as in, it uses many `cpipes` related UNIX absolute paths to store and retrieve **MultiQC** related configration files and `cpipes` context aware metadata. It also uses a custom logo with filename `FDa-Logo-Blue---medium-01.png` which should be located inside an `assets` folder from where the NextFlow script including this module will be executed.
+
+\
+&nbsp;
+
+### `input:`
+
+___
+
+Type: `path`
+
+Takes in NextFlow input type of `path` which points to many log files that **MultiQC** should parse.
+
+Ex:
+
+```groovy
+[ '/data/sample1/centrifuge/cent_output.txt', '/data/sample1/kraken/kraken_output.txt'] ]
+```
+
+\
+&nbsp;
+
+### `output:`
+
+___
+
+#### `report`
+
+Type: `path`
+
+Outputs a NextFlow output type of `path` pointing to the location of **MultiQC** final HTML report.
+
+\
+&nbsp;
+
+#### `data`
+
+Type: `path`
+
+NextFlow output type of `path` pointing to the data files folder generated by **MultiQC** which were used to generate plots and HTML report.
+
+\
+&nbsp;
+
+#### `plots`
+
+Type: `path`
+Optional: `true`
+
+NextFlow output type of `path` pointing to the plots folder generated by **MultiQC**.
+
+\
+&nbsp;
+
+#### `versions`
+
+Type: `path`
+
+NextFlow output type of `path` pointing to the `.yml` file storing software versions for this process.
0.6.1/modules/multiqc/main.nf
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/modules/multiqc/main.nf
0.6.1/modules/multiqc/main.nf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/modules/multiqc/main.nf Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,51 @@
+process MULTIQC {
+    label 'process_micro'
+    tag 'MultiQC'
+
+    module (params.enable_module ? "${params.swmodulepath}${params.fs}multiqc${params.fs}1.14" : null)
+    conda (params.enable_conda ? 'bioconda::multiqc=1.14 conda-forge::spectra conda-forge::lzstring' : null)
+    container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
+        'https://depot.galaxyproject.org/singularity/multiqc:1.14--pyhdfd78af_0' :
+        'quay.io/biocontainers/multiqc:1.14--pyhdfd78af_0' }"
+
+    input:
+    path multiqc_files
+
+    output:
+    path "*multiqc*"
+    path "*multiqc_report.html", emit: report
+    path "*_data"              , emit: data
+    path "*_plots"             , emit: plots, optional: true
+    path "versions.yml"        , emit: versions
+
+    when:
+    task.ext.when == null || task.ext.when
+
+    script:
+    def args = task.ext.args ?: ''
+    """
+    cp ${params.projectconf}${params.fs}multiqc${params.fs}${params.pipeline}_mqc.yml cpipes_mqc_config.yml
+    sed -i -e 's/Workflow_Name_Placeholder/${params.pipeline}/g; s/Workflow_Version_Placeholder/${params.workflow_version}/g' cpipes_mqc_config.yml
+    sed -i -e 's/CPIPES_Version_Placeholder/${workflow.manifest.version}/g; s%Workflow_Output_Placeholder%${params.output}%g' cpipes_mqc_config.yml
+    sed -i -e 's%Workflow_Input_Placeholder%${params.input}%g' cpipes_mqc_config.yml
+
+    multiqc --interactive -c cpipes_mqc_config.yml -f $args .
+
+    cat <<-END_VERSIONS > versions.yml
+    "${task.process}":
+        multiqc: \$( multiqc --version | sed -e "s/multiqc, version //g" )
+    END_VERSIONS
+
+    sedver=""
+
+    if [ "${workflow.containerEngine}" != "null" ]; then
+        sedver=\$( sed --help 2>&1 | sed -e '1!d; s/ (.*\$//' )
+    else
+        sedver=\$( echo \$(sed --version 2>&1) | sed 's/^.*(GNU sed) //; s/ Copyright.*\$//' )
+    fi
+
+    cat <<-END_VERSIONS >> versions.yml
+        sed: \$sedver
+    END_VERSIONS
+    """
+}
\ No newline at end of file
0.6.1/modules/otf_genome/main.nf
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/modules/otf_genome/main.nf
0.6.1/modules/otf_genome/main.nf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/modules/otf_genome/main.nf Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,39 @@
+process OTF_GENOME {
+    tag "$meta.id"
+    label "process_pico"
+
+    module (params.enable_module ? "${params.swmodulepath}${params.fs}python${params.fs}3.8.1" : null)
+    conda (params.enable_conda ? "conda-forge::python=3.10.4" : null)
+    container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
+        'https://depot.galaxyproject.org/singularity/python:3.10.4' :
+        'quay.io/biocontainers/python:3.10.4' }"
+
+    input:
+        tuple val(meta), path(kma_hits), path(kma_fragz)
+
+    output:
+        tuple val(meta), path('*_scaffolded_genomic.fna.gz'), emit: genomes_fasta, optional: true
+        tuple val(meta), path('*_aln_reads.fna.gz')         , emit: reads_extracted, optional: true
+        path '*FAILED.txt'                                  , emit: failed, optional: true
+        path 'versions.yml'                                 , emit: versions
+
+    when:
+        task.ext.when == null || task.ext.when
+
+    script:
+        def args = task.ext.args ?: ''
+        def prefix = task.ext.prefix ?: "${meta.id}"
+        args += (kma_hits ? " -txt ${kma_hits}" : '')
+        args += (params.tuspy_gd ? " -gd ${params.tuspy_gd}" : '')
+        args += (prefix ? " -op ${prefix}" : '')
+
+        """
+        gen_otf_genome.py \\
+            $args
+
+        cat <<-END_VERSIONS > versions.yml
+        "${task.process}":
+            python: \$( python --version | sed 's/Python //g' )
+        END_VERSIONS
+        """
+}
\ No newline at end of file
0.6.1/modules/salmon/index/README.md
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/modules/salmon/index/README.md
0.6.1/modules/salmon/index/README.md
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/modules/salmon/index/README.md Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,88 @@
+# NextFlow DSL2 Module
+
+```bash
+SALMON_INDEX
+```
+
+## Description
+
+Run `salmon index` command on input FASTA file.
+
+\
+&nbsp;
+
+### `input:`
+
+___
+
+Type: `tuple`
+
+Takes in the following tuple of metadata (`meta`) and a FASTA file of type `path` (`genome_fasta`) per sample (`id:`).
+
+Ex:
+
+```groovy
+[ 
+    [ 
+        id: 'FAL00870'
+    ],
+    [
+        '/hpc/scratch/test/FAL00870_contigs.fasta',
+    ]
+]
+```
+
+\
+&nbsp;
+
+#### `meta`
+
+Type: Groovy Map
+
+A Groovy Map containing the metadata about the genome FASTA file.
+
+Ex:
+
+```groovy
+[ 
+    id: 'FAL00870'
+]
+```
+
+\
+&nbsp;
+
+#### `genome_fasta`
+
+Type: `path`
+
+NextFlow input type of `path` pointing to the FASTA file (gzipped or unzipped) on which `salmon index` should be run.
+
+\
+&nbsp;
+
+### `output:`
+
+___
+
+Type: `tuple`
+
+Outputs a tuple of metadata (`meta` from `input:`) and a folder containing `salmon index` result files.
+
+\
+&nbsp;
+
+#### `idx`
+
+Type: `path`
+
+NextFlow output type of `path` pointing to the `salmon index` result files per sample (`id:`).
+
+\
+&nbsp;
+
+#### `versions`
+
+Type: `path`
+
+NextFlow output type of `path` pointing to the `.yml` file storing software versions for this process.
0.6.1/modules/salmon/index/main.nf
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/modules/salmon/index/main.nf
0.6.1/modules/salmon/index/main.nf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/modules/salmon/index/main.nf Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,40 @@
+process SALMON_INDEX {
+    tag "$meta.id"
+    label "process_micro"
+
+    module (params.enable_module ? "${params.swmodulepath}${params.fs}salmon${params.fs}1.10.0" : null)
+    conda (params.enable_conda ? 'conda-forge::libgcc-ng bioconda::salmon=1.10.1' : null)
+    container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
+        'https://depot.galaxyproject.org/singularity/salmon:1.10.1--h7e5ed60_1' :
+        'quay.io/biocontainers/salmon:1.10.1--h7e5ed60_1' }"
+
+    input:
+        tuple val(meta), path(genome_fasta)
+
+    output:
+        tuple val(meta), path("${meta.id}_salmon_idx"), emit: idx
+        path "versions.yml"                           , emit: versions
+
+    when:
+        task.ext.when == null || task.ext.when
+
+    script:
+        def args = task.ext.args ?: ''
+        def prefix = task.ext.prefix ?: "${meta.id}_salmon_idx"
+        def decoys_file = file( meta.salmon_decoys )
+        def decoys = !("${decoys_file.simpleName}" ==~ 'dummy_file.*') && decoys_file.exits() ? "--decoys ${meta.salmon_decoys}" : ''
+        """
+        salmon \\
+            index \\
+            $decoys \\
+            --threads $task.cpus \\
+            $args \\
+            --index $prefix \\
+            --transcripts $genome_fasta
+
+        cat <<-END_VERSIONS > versions.yml
+        "${task.process}":
+            salmon: \$(echo \$(salmon --version) | sed -e "s/salmon //g")
+        END_VERSIONS
+        """
+}
\ No newline at end of file
0.6.1/modules/salmon/quant/README.md
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/modules/salmon/quant/README.md
0.6.1/modules/salmon/quant/README.md
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/modules/salmon/quant/README.md Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,118 @@
+# NextFlow DSL2 Module
+
+```bash
+SALMON_QUANT
+```
+
+## Description
+
+Run `salmon quant` in `reads` or `alignments` mode. The inputs can be either the alignment (Ex: `.bam`) files or read (Ex: `.fastq.gz`) files.
+
+\
+&nbsp;
+
+### `input:`
+
+___
+
+Type: `tuple`
+
+Takes in the following tuple of metadata (`meta`) and either an alignment file or reads file and a `salmon index` or a transcript FASTA file per sample (`id:`).
+
+Ex:
+
+```groovy
+[ 
+    [ 
+        id: 'FAL00870',
+        strandedness: 'unstranded',
+        single_end: true
+    ],
+    [
+        '/hpc/scratch/test/FAL00870_R1.fastq.gz'
+    ],
+    [
+        '/hpc/scratch/test/salmon_idx_for_FAL00870'
+    ]
+]
+```
+
+\
+&nbsp;
+
+#### `meta`
+
+Type: Groovy Map
+
+A Groovy Map containing the metadata about the input setup for `salmon quant`.
+
+Ex:
+
+```groovy
+[ 
+    id: 'FAL00870',
+    strandedness: 'unstranded',
+    single_end: true
+]
+```
+
+\
+&nbsp;
+
+#### `reads_or_bam`
+
+Type: `path`
+
+NextFlow input type of `path` pointing to either an alignment file (Ex: `.bam`) or a reads file (Ex: `.fastq.gz`) on which `salmon quant` should be run.
+
+\
+&nbsp;
+
+#### `index_or_tr_fasta`
+
+Type: `path`
+
+NextFlow input type of `path` pointing to either a folder containing `salmon index` files or a trasnscript FASTA file.
+
+\
+&nbsp;
+
+#### `args`
+
+Type: Groovy String
+
+String of optional command-line arguments to be passed to the tool. This can be mentioned in `process` scope within `withName:process_name` block using `ext.args` option within your `nextflow.config` file.
+
+Ex:
+
+```groovy
+withName: 'SALMON_QUANT' {
+    ext.args = '--vbPrior 0.02'
+}
+```
+
+### `output:`
+
+___
+
+Type: `tuple`
+
+Outputs a tuple of metadata (`meta` from `input:`) and a folder containing `salmon quant` result files.
+
+\
+&nbsp;
+
+#### `results`
+
+Type: `path`
+
+NextFlow output type of `path` pointing to the `salmon quant` result files per sample (`id:`).
+
+\
+&nbsp;
+
+#### `versions`
+
+Type: `path`
+
+NextFlow output type of `path` pointing to the `.yml` file storing software versions for this process.
0.6.1/modules/salmon/quant/main.nf
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/modules/salmon/quant/main.nf
0.6.1/modules/salmon/quant/main.nf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/modules/salmon/quant/main.nf Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,75 @@
+process SALMON_QUANT {
+    tag "$meta.id"
+    label "process_micro"
+
+    module (params.enable_module ? "${params.swmodulepath}${params.fs}salmon${params.fs}1.10.0" : null)
+    conda (params.enable_conda ? 'conda-forge::libgcc-ng bioconda::salmon=1.10.1' : null)
+    container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
+        'https://depot.galaxyproject.org/singularity/salmon:1.10.1--h7e5ed60_1' :
+        'quay.io/biocontainers/salmon:1.10.1--h7e5ed60_1' }"
+    input:
+        tuple val(meta), path(reads_or_bam), path(index_or_tr_fasta)
+
+    output:
+        tuple val(meta), path("${meta.id}_salmon_res"), emit: results
+        path  "versions.yml"                          , emit: versions
+
+    when:
+        task.ext.when == null || task.ext.when
+
+    script:
+        def args = task.ext.args   ?: ''
+        def prefix   = task.ext.prefix ?: "${meta.id}_salmon_res"
+        def reference   = "--index $index_or_tr_fasta"
+        def lib_type = (meta.salmon_lib_type ?: '')
+        def alignment_mode = (meta.salmon_alignment_mode ?: '')
+        def gtf = (meta.salmon_gtf ? "--geneMap ${meta.salmon_gtf}" : '')
+        def input_reads =(meta.single_end ? "-r $reads_or_bam" : "-1 ${reads_or_bam[0]} -2 ${reads_or_bam[1]}")
+
+        // Use path(reads_or_bam) to point to BAM and path(index_or_tr_fasta) to point to transcript fasta
+        // if using salmon DSL2 module in alignment-based mode.
+        // By default, this module will be run in selective-alignment-based mode of salmon.
+        if (alignment_mode) {
+            reference   = "-t $index_or_tr_fasta"
+            input_reads = "-a $reads_or_bam"
+        }
+
+        def strandedness_opts = [
+            'A', 'U', 'SF', 'SR',
+            'IS', 'IU' , 'ISF', 'ISR',
+            'OS', 'OU' , 'OSF', 'OSR',
+            'MS', 'MU' , 'MSF', 'MSR'
+        ]
+
+        def strandedness =  'A'
+
+        if (lib_type) {
+            if (strandedness_opts.contains(lib_type)) {
+                strandedness = lib_type
+            } else {
+                log.info "[Salmon Quant] Invalid library type specified '--libType=${lib_type}', defaulting to auto-detection with '--libType=A'."
+            }
+        } else {
+            strandedness = meta.single_end ? 'U' : 'IU'
+            if (meta.strandedness == 'forward') {
+                strandedness = meta.single_end ? 'SF' : 'ISF'
+            } else if (meta.strandedness == 'reverse') {
+                strandedness = meta.single_end ? 'SR' : 'ISR'
+            }
+        }
+        """
+        salmon quant \\
+            --threads $task.cpus \\
+            --libType=$strandedness \\
+            $gtf \\
+            $args \\
+            -o $prefix \\
+            $reference \\
+            $input_reads
+
+        cat <<-END_VERSIONS > versions.yml
+        "${task.process}":
+            salmon: \$(echo \$(salmon --version) | sed -e "s/salmon //g")
+        END_VERSIONS
+        """
+}
\ No newline at end of file
0.6.1/modules/samplesheet_check/README.md
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/modules/samplesheet_check/README.md
0.6.1/modules/samplesheet_check/README.md
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/modules/samplesheet_check/README.md Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,55 @@
+# NextFlow DSL2 Module
+
+```bash
+SAMPLESHEET_CHECK
+```
+
+## Description
+
+Checks the validity of the sample sheet in CSV format to make sure there are required mandatory fields. This module generally succeeds `GEN_SAMPLESHEET` module as part of the `cpipes` pipelines to make sure that all fields of the columns are properly formatted to be used as Groovy Map for `meta` which is of input type `val`. This module requires the `check_samplesheet.py` script to be present in the `bin` folder from where the NextFlow script including this module will be executed
+
+\
+&nbsp;
+
+### `input:`
+
+___
+
+Type: `path`
+
+Takes in the absolute UNIX path to the sample sheet in CSV format (`samplesheet`).
+
+Ex:
+
+```groovy
+'/hpc/scratch/test/reads/output/gen_samplesheet/autogen_samplesheet.csv'
+```
+
+\
+&nbsp;
+
+### `output:`
+
+___
+
+Type: `path`
+
+NextFlow output of type `path` pointing to properly formatted CSV sample sheet (`csv`).
+
+\
+&nbsp;
+
+#### `csv`
+
+Type: `path`
+
+NextFlow output type of `path` pointing to auto-generated CSV sample sheet for all FASTQ files present in the folder given by NextFlow input type of `val` (`inputdir`).
+
+\
+&nbsp;
+
+#### `versions`
+
+Type: `path`
+
+NextFlow output type of `path` pointing to the `.yml` file storing software versions for this process.
0.6.1/modules/samplesheet_check/main.nf
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/modules/samplesheet_check/main.nf
0.6.1/modules/samplesheet_check/main.nf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/modules/samplesheet_check/main.nf Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,32 @@
+process SAMPLESHEET_CHECK {
+    tag "$samplesheet"
+    label "process_femto"
+
+    module (params.enable_module ? "${params.swmodulepath}${params.fs}python${params.fs}3.8.1" : null)
+    conda (params.enable_conda ? "conda-forge::python=3.9.5" : null)
+    container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
+        'https://depot.galaxyproject.org/singularity/python:3.9--1' :
+        'quay.io/biocontainers/python:3.9--1' }"
+
+    input:
+        path samplesheet
+
+    output:
+        path '*.csv'       , emit: csv
+        path "versions.yml", emit: versions
+
+    when:
+        task.ext.when == null || task.ext.when
+
+    script: // This script is bundled with the pipeline, in nf-core/rnaseq/bin/
+        """
+        check_samplesheet.py \\
+            $samplesheet \\
+            samplesheet.valid.csv
+
+        cat <<-END_VERSIONS > versions.yml
+        "${task.process}":
+            python: \$( python --version | sed 's/Python //g' )
+        END_VERSIONS
+        """
+}
\ No newline at end of file
0.6.1/modules/scaffold_genomes/main.nf
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/modules/scaffold_genomes/main.nf
0.6.1/modules/scaffold_genomes/main.nf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/modules/scaffold_genomes/main.nf Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,65 @@
+process SCAFFOLD_GENOMES {
+    tag "fasta_join.pl"
+    label "process_micro"
+
+    module (params.enable_module ? "${params.swmodulepath}${params.fs}perl${params.fs}5.30.0" : null)
+    conda (params.enable_conda ? "conda-forge::perl bioconda::perl-bioperl=1.7.8" : null)
+    container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
+        'https://depot.galaxyproject.org/singularity/perl-bioperl:1.7.8--hdfd78af_1' :
+        'quay.io/biocontainers/perl-bioperl:1.7.8--hdfd78af_1' }"
+
+    input:
+        path acc_chunk_file
+
+    output:
+        val "${params.output}${params.fs}scaffold_genomes", emit: genomes_dir
+        path '*_scaffolded_genomic.fna.gz'                , emit: scaffolded
+        path 'versions.yml'                               , emit: versions
+
+    when:
+        task.ext.when == null || task.ext.when
+
+    script:
+        def args = task.ext.args ?: ''
+        """
+        datasets download genome accession \\
+            --dehydrated \\
+            --inputfile $acc_chunk_file
+
+        unzip ncbi_dataset.zip
+
+        datasets rehydrate \\
+            --gzip \\
+            --max-workers $task.cpus \\
+            --directory "."
+
+        fasta_join.pl -in ncbi_dataset
+
+        cat <<-END_VERSIONS > versions.yml
+        "${task.process}":
+            datasets: \$( datasets --version | sed 's/datasets version: //g' )
+            perl: \$( perl -e 'print \$^V' | sed 's/v//g' )
+            bioperl: \$(perl -MBio::Root::Version -e 'print \$Bio::Root::Version::VERSION')
+        END_VERSIONS
+
+        zcmd=""
+        zver=""
+
+        if type pigz > /dev/null 2>&1; then
+            zcmd="pigz"
+            zver=\$( echo \$( \$zcmd --version 2>&1 ) | sed -e '1!d' | sed "s/\$zcmd //" )
+        elif type gzip > /dev/null 2>&1; then
+            zcmd="gzip"
+        
+            if [ "${workflow.containerEngine}" != "null" ]; then
+                zver=\$( echo \$( \$zcmd --help 2>&1 ) | sed -e '1!d; s/ (.*\$//' )
+            else
+                zver=\$( echo \$( \$zcmd --version 2>&1 ) | sed "s/^.*(\$zcmd) //; s/\$zcmd //; s/ Copyright.*\$//" )
+            fi
+        fi
+
+        cat <<-END_VERSIONS >> versions.yml
+            \$zcmd: \$zver
+        END_VERSIONS
+        """
+}
\ No newline at end of file
0.6.1/modules/seqkit/seq/README.md
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/modules/seqkit/seq/README.md
0.6.1/modules/seqkit/seq/README.md
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/modules/seqkit/seq/README.md Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,104 @@
+# NextFlow DSL2 Module
+
+```bash
+SEQKIT_SEQ
+```
+
+## Description
+
+Run `seqkit seq` command on reads in FASTQ format. Produces a filtered FASTQ file as per the filter strategy mentioned using the `ext.args` within the process scope.
+
+\
+&nbsp;
+
+### `input:`
+
+___
+
+Type: `tuple`
+
+Takes in the following tuple of metadata (`meta`) and a list of reads of type `path` (`reads`) per sample (`id:`).
+
+Ex:
+
+```groovy
+[ 
+    [ id: 'FAL00870',
+       strandedness: 'unstranded',
+       single_end: true,
+       centrifuge_x: '/hpc/db/centrifuge/2022-04-12/ab'
+    ],
+    '/hpc/scratch/test/FAL000870/f1.merged.fq.gz'
+]
+```
+
+\
+&nbsp;
+
+#### `meta`
+
+Type: Groovy Map
+
+A Groovy Map containing the metadata about the FASTQ file.
+
+Ex:
+
+```groovy
+[ 
+    id: 'FAL00870',
+    strandedness: 'unstranded',
+    single_end: true
+]
+```
+
+\
+&nbsp;
+
+#### `reads`
+
+Type: `path`
+
+NextFlow input type of `path` pointing to FASTQ files on which `seqkit seq` should be run.
+
+\
+&nbsp;
+
+#### `args`
+
+Type: Groovy String
+
+String of optional command-line arguments to be passed to the tool. This can be mentioned in `process` scope within `withName:process_name` block using `ext.args` option within your `nextflow.config` file.
+
+Ex:
+
+```groovy
+withName: 'SEQKIT_SEQ' {
+    ext.args = '--max-len 4000'
+}
+```
+
+### `output:`
+
+___
+
+Type: `tuple`
+
+Outputs a tuple of metadata (`meta` from `input:`) and filtered gzipped FASTQ file.
+
+\
+&nbsp;
+
+#### `fastx`
+
+Type: `path`
+
+NextFlow output type of `path` pointing to the FASTQ format filtered gzipped file per sample (`id:`).
+
+\
+&nbsp;
+
+#### `versions`
+
+Type: `path`
+
+NextFlow output type of `path` pointing to the `.yml` file storing software versions for this process.
0.6.1/modules/seqkit/seq/main.nf
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/modules/seqkit/seq/main.nf
0.6.1/modules/seqkit/seq/main.nf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/modules/seqkit/seq/main.nf Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,75 @@
+process SEQKIT_SEQ {
+    tag "$meta.id"
+    label 'process_micro'
+
+    module (params.enable_module ? "${params.swmodulepath}${params.fs}seqkit${params.fs}2.2.0" : null)
+    conda (params.enable_conda ? "bioconda::seqkit=2.2.0" : null)
+    container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
+        'https://depot.galaxyproject.org/singularity/seqkit:2.1.0--h9ee0642_0':
+        'quay.io/biocontainers/seqkit:2.1.0--h9ee0642_0' }"
+
+    input:
+    tuple val(meta), path(reads)
+
+    output:
+    tuple val(meta), path("*.gz"), emit: fastx
+    path "versions.yml"          , emit: versions
+
+    when:
+    task.ext.when == null || task.ext.when
+
+    script:
+    def args = task.ext.args ?: ''
+    def prefix = task.ext.prefix ?: "${meta.id}"
+
+    def extension = "fastq"
+    if ("$reads" ==~ /.+\.fasta|.+\.fasta.gz|.+\.fa|.+\.fa.gz|.+\.fas|.+\.fas.gz|.+\.fna|.+\.fna.gz/) {
+        extension = "fasta"
+    }
+
+    if (meta.single_end) {
+        """
+        seqkit \\
+            seq \\
+            -j $task.cpus \\
+            -o ${prefix}.seqkit-seq.${extension}.gz \\
+            $args \\
+            $reads
+
+        cat <<-END_VERSIONS > versions.yml
+        "${task.process}":
+            seqkit: \$( seqkit | sed '3!d; s/Version: //' )
+        END_VERSIONS
+        """
+    } else {
+        """
+        seqkit \\
+            seq \\
+            -j $task.cpus \\
+            -o ${prefix}.R1.seqkit-seq.${extension}.gz \\
+            $args \\
+            ${reads[0]}
+
+        seqkit \\
+            seq \\
+            -j $task.cpus \\
+            -o ${prefix}.R2.seqkit-seq.${extension}.gz \\
+            $args \\
+            ${reads[1]}
+
+        seqkit \\
+            pair \\
+            -j $task.cpus \\
+            -1 ${prefix}.R1.seqkit-seq.${extension}.gz \\
+            -2 ${prefix}.R2.seqkit-seq.${extension}.gz
+
+        rm ${prefix}.R1.seqkit-seq.${extension}.gz
+        rm ${prefix}.R2.seqkit-seq.${extension}.gz
+
+        cat <<-END_VERSIONS > versions.yml
+        "${task.process}":
+            seqkit: \$( seqkit | sed '3!d; s/Version: //' )
+        END_VERSIONS
+        """
+    }
+}
0.6.1/modules/sourmash/gather/main.nf
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/modules/sourmash/gather/main.nf
0.6.1/modules/sourmash/gather/main.nf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/modules/sourmash/gather/main.nf Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,67 @@
+process SOURMASH_GATHER {
+    tag "$meta.id"
+    label 'process_micro'
+
+    module (params.enable_module ? "${params.swmodulepath}${params.fs}sourmash${params.fs}4.6.1" : null)
+    conda (params.enable_conda ? "conda-forge::python bioconda::sourmash=4.6.1" : null)
+    container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
+        'https://depot.galaxyproject.org/singularity/sourmash:4.6.1--hdfd78af_0':
+        'quay.io/biocontainers/sourmash:4.6.1--hdfd78af_0' }"
+
+    input:
+    tuple val(meta), path(signature), path(database)
+    val save_unassigned
+    val save_matches_sig
+    val save_prefetch
+    val save_prefetch_csv
+
+    output:
+    tuple val(meta), path("*.csv.gz")                   , emit: result       , optional: true
+    tuple val(meta), path("*_scaffolded_genomic.fna.gz"), emit: genomes_fasta, optional: true
+    tuple val(meta), path("*_unassigned.sig.zip")       , emit: unassigned   , optional: true
+    tuple val(meta), path("*_matches.sig.zip")          , emit: matches      , optional: true
+    tuple val(meta), path("*_prefetch.sig.zip")         , emit: prefetch     , optional: true
+    tuple val(meta), path("*_prefetch.csv.gz")          , emit: prefetchcsv  , optional: true
+    path "*FAILED.txt"                                  , emit: failed       , optional: true
+    path "versions.yml"                                 , emit: versions
+
+    when:
+    task.ext.when == null || task.ext.when
+
+    script:
+    def args        = task.ext.args ?: ''
+    def args2       = task.ext.args2 ?: ''
+    def prefix      = task.ext.prefix ?: "${meta.id}"
+    def unassigned  = save_unassigned   ? "--output-unassigned ${prefix}_unassigned.sig.zip" : ''
+    def matches     = save_matches_sig  ? "--save-matches ${prefix}_matches.sig.zip"         : ''
+    def prefetch    = save_prefetch     ? "--save-prefetch ${prefix}_prefetch.sig.zip"       : ''
+    def prefetchcsv = save_prefetch_csv ? "--save-prefetch-csv ${prefix}_prefetch.csv.gz"    : ''
+    def gd          = params.tuspy_gd   ? "-gd ${params.tuspy_gd}"                           : ''
+
+    """
+    sourmash gather \\
+        $args \\
+        --output ${prefix}.csv.gz \\
+        ${unassigned} \\
+        ${matches} \\
+        ${prefetch} \\
+        ${prefetchcsv} \\
+        ${signature} \\
+        ${database}
+
+    sourmash_filter_hits.py \\
+        $args2 \\
+        -csv ${prefix}.csv.gz
+
+    gen_otf_genome.py \\
+        $gd \\
+        -op ${prefix} \\
+        -txt ${prefix}_template_hits.txt
+
+    cat <<-END_VERSIONS > versions.yml
+    "${task.process}":
+        sourmash: \$(echo \$(sourmash --version 2>&1) | sed 's/^sourmash //' )
+        python: \$( python --version | sed 's/Python //g' )
+    END_VERSIONS
+    """
+}
\ No newline at end of file
0.6.1/modules/sourmash/search/main.nf
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/modules/sourmash/search/main.nf
0.6.1/modules/sourmash/search/main.nf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/modules/sourmash/search/main.nf Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,55 @@
+process SOURMASH_SEARCH {
+    tag "$meta.id"
+    label 'process_micro'
+
+    module (params.enable_module ? "${params.swmodulepath}${params.fs}sourmash${params.fs}4.6.1" : null)
+    conda (params.enable_conda ? "conda-forge::python bioconda::sourmash=4.6.1" : null)
+    container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
+        'https://depot.galaxyproject.org/singularity/sourmash:4.6.1--hdfd78af_0':
+        'quay.io/biocontainers/sourmash:4.6.1--hdfd78af_0' }"
+
+    input:
+    tuple val(meta), path(signature), path(database)
+    val save_matches_sig
+
+    output:
+    tuple val(meta), path("*.csv.gz")                   , emit: result       , optional: true
+    tuple val(meta), path("*_scaffolded_genomic.fna.gz"), emit: genomes_fasta, optional: true
+    tuple val(meta), path("*_matches.sig.zip")          , emit: matches      , optional: true
+    path "*FAILED.txt"                                  , emit: failed       , optional: true
+    path "versions.yml"                                 , emit: versions
+
+    when:
+    task.ext.when == null || task.ext.when
+
+    script:
+    def args        = task.ext.args ?: ''
+    def args2       = task.ext.args2 ?: ''
+    def prefix      = task.ext.prefix ?: "${meta.id}"
+    def matches     = save_matches_sig  ? "--save-matches ${prefix}_matches.sig.zip" : ''
+    def gd          = params.tuspy_gd   ? "-gd ${params.tuspy_gd}"                   : ''
+
+    """
+    sourmash search \\
+        $args \\
+        --output ${prefix}.csv.gz \\
+        ${matches} \\
+        ${signature} \\
+        ${database}
+
+    sourmash_filter_hits.py \\
+        $args2 \\
+        -csv ${prefix}.csv.gz
+
+    gen_otf_genome.py \\
+        $gd \\
+        -op ${prefix} \\
+        -txt ${prefix}_template_hits.txt
+
+    cat <<-END_VERSIONS > versions.yml
+    "${task.process}":
+        sourmash: \$(echo \$(sourmash --version 2>&1) | sed 's/^sourmash //' )
+        python: \$( python --version | sed 's/Python //g' )
+    END_VERSIONS
+    """
+}
\ No newline at end of file
0.6.1/modules/sourmash/sig/kmers/main.nf
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/modules/sourmash/sig/kmers/main.nf
0.6.1/modules/sourmash/sig/kmers/main.nf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/modules/sourmash/sig/kmers/main.nf Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,55 @@
+process SOURMASH_SIG_KMERS {
+    tag "$meta.id"
+    label 'process_micro'
+
+    module (params.enable_module ? "${params.swmodulepath}${params.fs}sourmash${params.fs}4.6.1" : null)
+    conda (params.enable_conda ? "conda-forge::python bioconda::sourmash=4.6.1" : null)
+    container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
+        'https://depot.galaxyproject.org/singularity/sourmash:4.6.1--hdfd78af_0' :
+        'quay.io/biocontainers/sourmash:4.6.1--hdfd78af_0' }"
+
+    input:
+        tuple val(meta), path(sig_or_seq), path(sequence)
+
+    output:
+        tuple val(meta), path("*.csv")  , emit: signatures, optional: true
+        tuple val(meta), path("*.fasta"), emit: extracted_fasta, optional: true
+        path "versions.yml"             , emit: versions
+
+    when:
+        task.ext.when == null || task.ext.when
+
+    script:
+        // required defaults for the tool to run, but can be overridden
+        def args = task.ext.args ?: ''
+        def is_seq = "${sig_or_seq.baseName.findAll(/(?i)\.(fa|fasta|fna)\.{0,1}(gz){0,1}$/).size()}"
+        def save_kmers = (params.sourmashsigkmers_save_kmers ? "--save-kmers ${meta.id}.sm.kmers.csv" : '')
+        def save_seqs = (params.sourmashsigkmers_save_seqs ? "--save-sequences ${meta.id}.sm.seq.fasta" : '')
+        def sketch_mode = (params.sourmashsketch_mode ?: 'dna')
+        def sketch_p = (params.sourmashsketch_p ?: "abund,scaled=1000,k=71")
+        def prefix = task.ext.prefix ?: "${meta.id}"
+        """
+        db_sig="${sig_or_seq}"
+        if [[ $is_seq -ge 1 ]]; then
+            db_sig="${prefix}.db.sig"
+            sourmash sketch \\
+                $sketch_mode \\
+                -p '$sketch_p' \\
+                --output \$db_sig \\
+                $sig_or_seq
+        fi
+
+        sourmash signature kmers \\
+            $args \\
+            $save_kmers \\
+            $save_seqs \\
+            --signatures \$db_sig \\
+            --sequences $sequence 
+
+        cat <<-END_VERSIONS > versions.yml
+        "${task.process}":
+            sourmash: \$(echo \$(sourmash --version 2>&1) | sed 's/^sourmash //' )
+            bash: \$( bash --version 2>&1 | sed '1!d; s/^.*version //; s/ (.*\$//' )
+        END_VERSIONS
+        """
+}
\ No newline at end of file
0.6.1/modules/sourmash/sketch/main.nf
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/modules/sourmash/sketch/main.nf
0.6.1/modules/sourmash/sketch/main.nf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/modules/sourmash/sketch/main.nf Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,48 @@
+process SOURMASH_SKETCH {
+    tag "$meta.id"
+    label 'process_micro'
+
+    module (params.enable_module ? "${params.swmodulepath}${params.fs}sourmash${params.fs}4.6.1" : null)
+    conda (params.enable_conda ? "conda-forge::python bioconda::sourmash=4.6.1" : null)
+    container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
+        'https://depot.galaxyproject.org/singularity/sourmash:4.6.1--hdfd78af_0':
+        'quay.io/biocontainers/sourmash:4.6.1--hdfd78af_0' }"
+
+    input:
+    tuple val(meta), path(sequence), path(database)
+
+    output:
+    tuple val(meta), path("*.query.sig"), path("*.db.sig"), emit: signatures
+    path "versions.yml"                                   , emit: versions
+
+    when:
+    task.ext.when == null || task.ext.when
+
+    script:
+    // required defaults for the tool to run, but can be overridden
+    def args = task.ext.args ?: ''
+    def args_query 
+    def prefix = task.ext.prefix ?: "${meta.id}"
+    """
+    sourmash sketch \\
+        ${args.toString().replace('--singleton', '')} \\
+        --output "${prefix}.query.pre" \\
+        $sequence
+
+    sourmash signature rename \\
+        --${args.toString().replaceAll(/\s+\-p.*/, '')} \\
+        -o "${prefix}.query.sig" \\
+        "${prefix}.query.pre" \\
+        ${prefix} 
+
+    sourmash sketch \\
+        $args \\
+        --output "${prefix}.db.sig" \\
+        $database
+
+    cat <<-END_VERSIONS > versions.yml
+    "${task.process}":
+        sourmash: \$(echo \$(sourmash --version 2>&1) | sed 's/^sourmash //' )
+    END_VERSIONS
+    """
+}
\ No newline at end of file
0.6.1/modules/top_unique_serovars/main.nf
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/modules/top_unique_serovars/main.nf
0.6.1/modules/top_unique_serovars/main.nf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/modules/top_unique_serovars/main.nf Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,38 @@
+process TOP_UNIQUE_SEROVARS {
+    tag "$meta.id"
+    label "process_pico"
+
+    module (params.enable_module ? "${params.swmodulepath}${params.fs}python${params.fs}3.8.1" : null)
+    conda (params.enable_conda ? "conda-forge::python=3.10.4" : null)
+    container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
+        'https://depot.galaxyproject.org/singularity/python:3.10.4' :
+        'quay.io/biocontainers/python:3.10.4' }"
+
+    input:
+        tuple val(meta), path(mash_screen_res)
+
+    output:
+        tuple val(meta), path('*_UNIQUE_HITS.txt')   , emit: tsv, optional: true
+        tuple val(meta), path('*_UNIQUE_HITS.fna.gz'), emit: genomes_fasta, optional: true
+        path'*FAILED.txt'                            , emit: failed, optional: true
+        path 'versions.yml'                          , emit: versions
+
+    when:
+        task.ext.when == null || task.ext.when
+
+    script:
+        def args = task.ext.args ?: ''
+        def prefix = task.ext.prefix ?: "${meta.id}"
+        args += (mash_screen_res ? " -m ${mash_screen_res}" : '')
+        args += (prefix ? " -op ${prefix}" : '')
+        """
+        get_top_unique_mash_hit_genomes.py \\
+            $args
+
+        cat <<-END_VERSIONS > versions.yml
+        "${task.process}":
+            python: \$( python --version | sed 's/Python //g' )
+        END_VERSIONS
+        """
+
+}
\ No newline at end of file
0.6.1/nextflow.config
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/nextflow.config
0.6.1/nextflow.config
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/nextflow.config Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,38 @@
+// Main driver script
+manifest.mainScript = 'cpipes'
+
+def fs = File.separator
+def pd = "${projectDir}"
+
+// Global parameters
+includeConfig "${pd}${fs}conf${fs}manifest.config"
+includeConfig "${pd}${fs}conf${fs}base.config"
+
+// Include FASTQ config to prepare for a case when the entry point is 
+// FASTQ metadata CSV or FASTQ input directory
+includeConfig "${pd}${fs}conf${fs}fastq.config"
+
+if (params.pipeline != null) {
+    try {
+        includeConfig "${params.workflowsconf}${fs}${params.pipeline}.config"
+    } catch (Exception e) {
+        System.err.println('-'.multiply(params.linewidth) + "\n" +
+            "\033[0;31m${params.cfsanpipename} - ERROR\033[0m\n" +
+            '-'.multiply(params.linewidth) + "\n" + "\033[0;31mCould not load " +
+            "default pipeline configuration. Please provide a pipeline \n" +
+            "name using the --pipeline option.\n\033[0m" + '-'.multiply(params.linewidth) + "\n")
+        System.exit(1)
+    }
+}
+
+// Include modules' config last.
+includeConfig "${pd}${fs}conf${fs}logtheseparams.config"
+includeConfig "${pd}${fs}conf${fs}modules.config"
+
+// Nextflow runtime profiles
+conda.cacheDir = "${pd}${fs}kondagac_cache"
+singularity.cacheDir = "${pd}${fs}cingularitygac_cache"
+
+profiles {
+    includeConfig "${pd}${fs}conf${fs}computeinfra.config"
+}
0.6.1/readme/bettercallsal.md
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/readme/bettercallsal.md
0.6.1/readme/bettercallsal.md
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/readme/bettercallsal.md Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,360 @@
+# bettercallsal
+
+`bettercallsal` is an automated workflow to assign Salmonella serotype based on [NCBI Pathogens Database](https://www.ncbi.nlm.nih.gov/pathogens). It uses `MASH` to reduce the search space followed by additional genome filtering with `sourmash`. It then performs genome based alignment with `kma` followed by count generation using `salmon`. This workflow is especially useful in a case where a sample is of multi-serovar mixture.
+
+\
+&nbsp;
+
+<!-- TOC -->
+
+- [Minimum Requirements](#minimum-requirements)
+- [CFSAN GalaxyTrakr](#cfsan-galaxytrakr)
+- [Usage and Examples](#usage-and-examples)
+  - [Database](#database)
+  - [Input](#input)
+  - [Output](#output)
+  - [Computational resources](#computational-resources)
+  - [Runtime profiles](#runtime-profiles)
+  - [your_institution.config](#your_institutionconfig)
+  - [Cloud computing](#cloud-computing)
+  - [Example data](#example-data)
+- [Using sourmash](#using-sourmash)
+- [bettercallsal CLI Help](#bettercallsal-cli-help)
+
+<!-- /TOC -->
+
+\
+&nbsp;
+
+## Minimum Requirements
+
+1. [Nextflow version 22.10.0](https://github.com/nextflow-io/nextflow/releases/download/v22.10.0/nextflow).
+    - Make the `nextflow` binary executable (`chmod 755 nextflow`) and also make sure that it is made available in your `$PATH`.
+    - If your existing `JAVA` install does not support the newest **Nextflow** version, you can try **Amazon**'s `JAVA` (OpenJDK):  [Corretto](https://corretto.aws/downloads/latest/amazon-corretto-17-x64-linux-jdk.tar.gz).
+2. Either of `micromamba` (version `1.0.0`) or `docker` or `singularity` installed and made available in your `$PATH`.
+    - Running the workflow via `micromamba` software provisioning is **preferred** as it does not require any `sudo` or `admin` privileges or any other configurations with respect to the various container providers.
+    - To install `micromamba` for your system type, please follow these [installation steps](https://mamba.readthedocs.io/en/latest/micromamba-installation.html#manual-installation) and make sure that the `micromamba` binary is made available in your `$PATH`.
+    - Just the `curl` step is sufficient to download the binary as far as running the workflows are concerned.
+    - Once you have finished the installation, **it is important that you downgrade `micromamba` to version `1.0.0`**.
+
+        ```bash
+        micromamba self-update --version 1.0.0
+        ```
+
+3. Minimum of 10 CPU cores and about 16 GBs for main workflow steps. More memory may be required if your **FASTQ** files are big.
+
+\
+&nbsp;
+
+## CFSAN GalaxyTrakr
+
+The `bettercallsal` pipeline is also available for use on the [Galaxy instance supported by CFSAN, FDA](https://galaxytrakr.org/). If you wish to run the analysis using **Galaxy**, please register for an account, after which you can run the workflow using some test data by following the instructions
+[from this PDF](https://research.foodsafetyrisk.org/bettercallsal/galaxytrakr/bettercallsal_on_cfsan_galaxytrakr.pdf).
+
+Please note that the pipeline on [CFSAN GalaxyTrakr](https://galaxytrakr.org) in most cases may be a version older than the one on **GitHub** due to testing prioritization.
+
+\
+&nbsp;
+
+## Usage and Examples
+
+Clone or download this repository and then call `cpipes`.
+
+```bash
+cpipes --pipeline bettercallsal [options]
+```
+
+Alternatively, you can use `nextflow` to directly pull and run the pipeline.
+
+```bash
+nextflow pull CFSAN-Biostatistics/bettercallsal
+nextflow list
+nextflow info CFSAN-Biostatistics/bettercallsal
+nextflow run CFSAN-Biostatistics/bettercallsal --pipeline bettercallsal_db --help
+nextflow run CFSAN-Biostatistics/bettercallsal --pipeline bettercallsal --help
+```
+
+\
+&nbsp;
+
+**Example**: Run the default `bettercallsal` pipeline in single-end mode.
+
+```bash
+cd /data/scratch/$USER
..bsolute UNIX paths and real destinations of symbolic links during pipeline execution. For example, find out the real path(s) of your absolute UNIX path(s) and use that for the `--input` and `--output` options of the pipeline.
+
+  ```bash
+  realpath /hpc/scratch/user/input
+  ```
+
+Now run the workflow by ignoring quality values since these are simulated base qualities:
+
+\
+&nbsp;
+
+```bash
+cpipes \
+    --pipeline bettercallsal \
+    --input /path/to/bettercallsal_sim_reads \
+    --output /path/to/bettercallsal_sim_reads_output \
+    --bcs_root_dbdir /path/to/PDG000000002.2727
+    --kmaalign_ignorequals \
+    -profile stdkondagac \
+    -resume
+```
+
+Please note that the run time profile `stdkondagac` will run jobs locally using `micromamba` for software provisioning. The first time you run the command, a new folder called `kondagac_cache` will be created and subsequent runs should use this `conda` cache.
+
+\
+&nbsp;
+
+## Using `sourmash`
+
+Beginning with `v0.3.0` of `bettercallsal` workflow, `sourmash` sketching is used to further narrow down possible serotype hits. It is **ON** by default. This will enable the generation of **ANI Containment** matrix for **Samples** vs **Genomes**. There may be multiple hits for the same serotype in the final **MultiQC** report as multiple genome accessions can belong to a single serotype.
+
+You can turn **OFF** this feature with `--sourmashsketch_run false` option.
+
+\
+&nbsp;
+
+## `bettercallsal` CLI Help
+
+```text
+[Kranti_Konganti@my-unix-box ]$ cpipes --pipeline bettercallsal --help
+N E X T F L O W  ~  version 23.04.3
+Launching `./bettercallsal/cpipes` [awesome_chandrasekhar] DSL2 - revision: 8da4e11078
+================================================================================
+             (o)                  
+  ___  _ __   _  _ __    ___  ___ 
+ / __|| '_ \ | || '_ \  / _ \/ __|
+| (__ | |_) || || |_) ||  __/\__ \
+ \___|| .__/ |_|| .__/  \___||___/
+      | |       | |               
+      |_|       |_|
+--------------------------------------------------------------------------------
+A collection of modular pipelines at CFSAN, FDA.
+--------------------------------------------------------------------------------
+Name                            : CPIPES
+Author                          : Kranti Konganti
+Version                         : 0.6.1
+Center                          : CFSAN, FDA.
+================================================================================
+
+
+--------------------------------------------------------------------------------
+Show configurable CLI options for each tool within bettercallsal
+--------------------------------------------------------------------------------
+Ex: cpipes --pipeline bettercallsal --help
+Ex: cpipes --pipeline bettercallsal --help fastp
+Ex: cpipes --pipeline bettercallsal --help fastp,mash
+--------------------------------------------------------------------------------
+--help bbmerge                  : Show bbmerge.sh CLI options
+--help fastp                    : Show fastp CLI options
+--help mash                     : Show mash `screen` CLI options
+--help tuspy                    : Show get_top_unique_mash_hit_genomes.py CLI
+                                  options
+--help sourmashsketch           : Show sourmash `sketch` CLI options
+--help sourmashgather           : Show sourmash `gather` CLI options
+--help sourmashsearch           : Show sourmash `search` CLI options
+--help sfhpy                    : Show sourmash_filter_hits.py CLI options
+--help kmaindex                 : Show kma `index` CLI options
+--help kmaalign                 : Show kma CLI options
+--help megahit                  : Show megahit CLI options
+--help mlst                     : Show mlst CLI options
+--help abricate                 : Show abricate CLI options
+--help salmon                   : Show salmon `index` CLI options
+--help gsrpy                    : Show gen_salmon_res_table.py CLI options
+
+```
0.6.1/readme/bettercallsal_db.md
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/readme/bettercallsal_db.md
0.6.1/readme/bettercallsal_db.md
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/readme/bettercallsal_db.md Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,237 @@
+# bettercallsal_db
+
+`bettercallsal_db` is an end-to-end automated workflow to generate and consolidate the required DB flat files based on [NCBI Pathogens Database for Salmonella](https://ftp.ncbi.nlm.nih.gov/pathogen/Results/Salmonella/). It first downloads the metadata based on the provided release identifier (Ex: `latest_snps` or `PDG000000002.2727`) and then creates a `mash sketch` based on the filtering strategy. It generates two types of sketches, one that prioritizes genome collection based on SNP clustering (`per_snp_cluster`) and the other just collects up to N number of genome accessions for each `computed_serotype` column from the metadata file (`per_computed_serotype`).
+
+The `bettercallsal_db` workflow should finish within an hour with stable internet connection.
+
+\
+&nbsp;
+
+## Workflow Usage
+
+```bash
+cpipes --pipeline bettercallsal_db [options]
+```
+
+\
+&nbsp;
+
+Example: Run the `bettercallsal_db` pipeline and store output at `/data/Kranti_Konganti/bettercallsal_db/PDG000000002.2727`.
+
+```bash
+cpipes
+      --pipeline bettercallsal_db \
+      --pdg_release PDG000000002.2727 \
+      --output /data/Kranti_Konganti/bettercallsal_db/PDG000000002.2727
+```
+
+\
+&nbsp;
+
+Now you can run the `bettercallsal` workflow with the created database by mentioning the root path to the database with `--bcs_root_dbdir` option.
+
+```bash
+cpipes
+      --pipeline bettercallsal \
+      --input /path/to/illumina/fastq/dir \
+      --output /path/to/output \
+      --bcs_root_dbdir /data/Kranti_Konganti/bettercallsal_db/PDG000000002.2727
+```
+
+\
+&nbsp;
+
+## Note
+
+Please note that the last step of the `bettercallsal_db` workflow named `SCAFFOLD_GENOMES` will spawn multiple processes and is not cached by **Nextflow**. This is an intentional setup for this specific stage of the workflow to speed up database creation and as such it is recommended that you run this workflow in a grid computing or similar cloud computing setting.
+
+\
+&nbsp;
+
+## `bettercallsal_db` CLI Help
+
+```text
+[Kranti_Konganti@my-unix-box ]$ cpipes --pipeline bettercallsal_db --help
+N E X T F L O W  ~  version 23.04.3
+Launching `./bettercallsal/cpipes` [special_brenner] DSL2 - revision: 8da4e11078
+================================================================================
+             (o)                  
+  ___  _ __   _  _ __    ___  ___ 
+ / __|| '_ \ | || '_ \  / _ \/ __|
+| (__ | |_) || || |_) ||  __/\__ \
+ \___|| .__/ |_|| .__/  \___||___/
+      | |       | |               
+      |_|       |_|
+--------------------------------------------------------------------------------
+A collection of modular pipelines at CFSAN, FDA.
+--------------------------------------------------------------------------------
+Name                            : bettercallsal
+Author                          : Kranti Konganti
+Version                         : 0.6.1
+Center                          : CFSAN, FDA.
+================================================================================
+
+Workflow                        : bettercallsal_db
+
+Author                          : Kranti Konganti
+
+Version                         : 0.6.1
+
+
+Required                        : 
+
+--output                        : Absolute path to directory where all the
+                                  pipeline outputs should be stored. Ex: --
+                                  output /path/to/output
+
+Other options                   : 
+
+--wcomp_serocol                 : Column number (non 0-based index) of the
+                                  PDG metadata file by which the serotypes
+                                  are collected. Default: false
+
+--wcomp_complete_sero           : Skip indexing serotypes when the serotype
+                                  name in the column number 49 (non 0-based)
+              ..etch_s                  : <int>   Sketch size. Each sketch will have
+                                  at most this many non-redundant min-hashes
+                                  . Default: 1000
+
+--mashsketch_i                  : Sketch individual sequences, rather than
+                                  whole files, e.g. for multi-fastas of
+                                  single-chromosome genomes or pair-wise gene
+                                  comparisons. Default: false
+
+--mashsketch_S                  : <int>   Seed to provide to the hash
+                                  function. (0-4294967296) [42] Default:
+                                  false
+
+--mashsketch_w                  : <num>   Probability threshold for warning
+                                  about low k-mer size. (0-1) Default: false
+
+--mashsketch_r                  : Input is a read set. See Reads options
+                                  below. Incompatible with --mashsketch_i.
+                                  Default: false
+
+--mashsketch_b                  : <size>  Use a Bloom filter of this size (
+                                  raw bytes or with K/M/G/T) to filter out
+                                  unique k-mers. This is useful if exact
+                                  filtering with --mashsketch_m uses too much
+                                  memory. However, some unique k-mers may
+                                  pass erroneously, and copies cannot be
+                                  counted beyond 2. Implies --mashsketch_r.
+                                  Default: false
+
+--mashsketch_m                  : <int>   Minimum copies of each k-mer
+                                  required to pass noise filter for reads.
+                                  Implies --mashsketch_r. Default: false
+
+--mashsketch_c                  : <num>   Target coverage. Sketching will
+                                  conclude if this coverage is reached before
+                                  the end of the input file (estimated by
+                                  average k-mer multiplicity). Implies --
+                                  mashsketch_r. Default: false
+
+--mashsketch_g                  : <size>  Genome size (raw bases or with K/M/
+                                  G/T). If specified, will be used for p-
+                                  value calculation instead of an estimated
+                                  size from k-mer content. Implies --
+                                  mashsketch_r. Default: false
+
+--mashsketch_n                  : Preserve strand (by default, strand is
+                                  ignored by using canonical DNA k-mers,
+                                  which are alphabetical minima of forward-
+                                  reverse pairs). Implied if an alphabet is
+                                  specified with --mashsketch_a or --
+                                  mashsketch_z. Default: false
+
+--mashsketch_a                  : Use amino acid alphabet (A-Z, except BJOUXZ
+                                  ). Implies --mashsketch_n --mashsketch_k 9
+                                  . Default: false
+
+--mashsketch_z                  : <text>  Alphabet to base hashes on (case
+                                  ignored by default; see --mashsketch_Z). K-
+                                  mers with other characters will be ignored
+                                  . Implies --mashsketch_n. Default: false
+
+--mashsketch_Z                  : Preserve case in k-mers and alphabet (case
+                                  is ignored by default). Sequence letters
+                                  whose case is not in the current alphabet
+                                  will be skipped when sketching. Default:
+                                  false
+
+Help options                    : 
+
+--help                          : Display this message.
+
+```
0.6.1/subworkflows/process_fastq.nf
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/subworkflows/process_fastq.nf
0.6.1/subworkflows/process_fastq.nf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/subworkflows/process_fastq.nf Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,144 @@
+// Include any necessary methods and modules
+include { stopNow; validateParamsForFASTQ } from "${params.routines}"
+include { GEN_SAMPLESHEET                 } from "${params.modules}${params.fs}gen_samplesheet${params.fs}main"
+include { SAMPLESHEET_CHECK               } from "${params.modules}${params.fs}samplesheet_check${params.fs}main"
+include { CAT_FASTQ                       } from "${params.modules}${params.fs}cat${params.fs}fastq${params.fs}main"
+include { SEQKIT_SEQ                      } from "${params.modules}${params.fs}seqkit${params.fs}seq${params.fs}main"
+
+// Validate 4 required workflow parameters if
+// FASTQ files are the input for the
+// entry point.
+validateParamsForFASTQ()
+
+// Start the subworkflow
+workflow PROCESS_FASTQ {
+    main:
+        versions = Channel.empty()
+        input_ch = Channel.empty()
+        reads = Channel.empty()
+
+        def input = file( (params.input ?: params.metadata) )
+
+        if (params.input) {
+            def fastq_files = []
+
+            if (params.fq_suffix == null) {
+            stopNow("We need to know what suffix the FASTQ files ends with inside the\n" +
+                "directory. Please use the --fq_suffix option to indicate the file\n" +
+                "suffix by which the files are to be collected to run the pipeline on.")
+            }
+
+            if (params.fq_strandedness == null) {
+                stopNow("We need to know if the FASTQ files inside the directory\n" +
+                    "are sequenced using stranded or non-stranded sequencing. This is generally\n" +
+                    "required if the sequencing experiment is RNA-SEQ. For almost all of the other\n" +
+                    "cases, you can probably use the --fq_strandedness unstranded option to indicate\n" +
+                    "that the reads are unstranded.")
+            }
+
+            if (params.fq_filename_delim == null || params.fq_filename_delim_idx == null) {
+                stopNow("We need to know the delimiter of the filename of the FASTQ files.\n" +
+                    "By default the filename delimiter is _ (underscore). This delimiter character\n" +
+                    "is used to split and assign a group name. The group name can be controlled by\n" +
+                    "using the --fq_filename_delim_idx option (1-based). For example, if the FASTQ\n" +
+                    "filename is WT_REP1_001.fastq, then to create a group WT, use the following\n" +
+                    "options: --fq_filename_delim _ --fq_filename_delim_idx 1")
+            }
+
+            if (!input.exists()) {
+                stopNow("The input directory,\n${params.input}\ndoes not exist!")
+            }
+
+            input.eachFileRecurse {
+                it.name.endsWith("${params.fq_suffix}") ? fastq_files << it : fastq_files << null
+            }
+
+            if (fastq_files.findAll{ it != null }.size() == 0) {
+                stopNow("The input directory,\n${params.input}\nis empty! or does not " +
+                    "have FASTQ files ending with the suffix: ${params.fq_suffix}")
+            }
+            
+            GEN_SAMPLESHEET( Channel.fromPath(params.input, type: 'dir') )
+            GEN_SAMPLESHEET.out.csv.set{ input_ch }
+            versions.mix( GEN_SAMPLESHEET.out.versions )
+                .set { versions }
+        } else if (params.metadata) {
+            if (!input.exists()) {
+                stopNow("The metadata CSV file,\n${params.metadata}\ndoes not exist!")
+            }
+
+            if (input.size() <= 0) {
+                stopNow("The metadata CSV file,\n${params.metadata}\nis empty!")
+            }
+
+            Channel.fromPath(params.metadata, type: 'file')
+                .set { input_ch }
+        }
+
+        SAMPLESHEET_CHECK( input_ch )
+            .csv
+            .splitCsv( header: true, sep: ',')
+            .map { create_fastq_channel(it) }
+            .groupTuple(by: [0])
+            .branch {
+                meta, fastq ->
+                    single   : fastq.size() == 1
+                        return [ meta, fastq.flatten() ]
+                    multiple : fastq.size() > 1
+                        return [ meta, fastq.flatten() ]
+            }
+            .set { reads }
+
+        CAT_FASTQ( reads.multiple )
+            .catted_reads
+            .mix( reads.single )
+            .set { processed_reads }
+
+        if (params.fq_filter_by_len.toInteger() > 0) {
+            SEQKIT_SEQ( processed_reads )
+                .fastx
+                .set { processed_reads }
+
+            versions.mix( SEQKIT_SEQ.out.versions.first().ifEmpty(null) )
+                .set { versions }
+        }
+
+        versions.mix(
+            SAMPLESHEET_CHECK.out.versions,
+            CAT_FASTQ.out.versions.first().ifEmpty(null)
+        )
+        .set { versions }
+
+    emit:
+        processed_reads
+        versions
+}
+
+// Function to get list of [ meta, [ fq1, fq2 ] ]
+def create_fastq_channel(LinkedHashMap row) {
+
+    def meta = [:]
+    meta.id           = row.sample
+    meta.single_end   = row.single_end.toBoolean()
+    meta.strandedness = row.strandedness
+    meta.id = meta.id.split(params.fq_filename_delim)[0..params.fq_filename_delim_idx.toInteger() - 1]
+        .join(params.fq_filename_delim)
+    meta.id = (meta.id =~ /\./ ? meta.id.take(meta.id.indexOf('.')) : meta.id)
+
+    def array = []
+
+    if (!file(row.fq1).exists()) {
+        stopNow("Please check input metadata CSV. The following Read 1 FASTQ file does not exist!" +
+            "\n${row.fq1}")
+    }
+    if (meta.single_end) {
+        array = [ meta, [ file(row.fq1) ] ]
+    } else {
+        if (!file(row.fq2).exists()) {
+            stopNow("Please check input metadata CSV. The following Read 2 FASTQ file does not exist!" +
+                "\n${row.fq2}")
+        }
+        array = [ meta, [ file(row.fq1), file(row.fq2) ] ]
+    }
+    return array
+}
\ No newline at end of file
0.6.1/workflows/bettercallsal.nf
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/workflows/bettercallsal.nf
0.6.1/workflows/bettercallsal.nf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/workflows/bettercallsal.nf Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,516 @@
+// Define any required imports for this specific workflow
+import java.nio.file.Paths
+import java.util.zip.GZIPInputStream
+import java.io.FileInputStream
+import nextflow.file.FileHelper
+
+
+// Include any necessary methods
+include { \
+    summaryOfParams; stopNow; fastqEntryPointHelp; sendMail; conciseHelp; \
+    addPadding; wrapUpHelp     } from "${params.routines}"
+include { bbmergeHelp          } from "${params.toolshelp}${params.fs}bbmerge"
+include { fastpHelp            } from "${params.toolshelp}${params.fs}fastp"
+include { mashscreenHelp       } from "${params.toolshelp}${params.fs}mashscreen"
+include { tuspyHelp            } from "${params.toolshelp}${params.fs}tuspy"
+include { sourmashsketchHelp   } from "${params.toolshelp}${params.fs}sourmashsketch"
+include { sourmashgatherHelp   } from "${params.toolshelp}${params.fs}sourmashgather"
+include { sourmashsearchHelp   } from "${params.toolshelp}${params.fs}sourmashsearch"
+include { sfhpyHelp            } from "${params.toolshelp}${params.fs}sfhpy"
+include { kmaindexHelp         } from "${params.toolshelp}${params.fs}kmaindex"
+include { kmaalignHelp         } from "${params.toolshelp}${params.fs}kmaalign"
+include { megahitHelp          } from "${params.toolshelp}${params.fs}megahit"
+include { mlstHelp             } from "${params.toolshelp}${params.fs}mlst"
+include { abricateHelp         } from "${params.toolshelp}${params.fs}abricate"
+include { salmonidxHelp        } from "${params.toolshelp}${params.fs}salmonidx"
+include { gsrpyHelp            } from "${params.toolshelp}${params.fs}gsrpy"
+
+// Exit if help requested before any subworkflows
+if (params.help) {
+    log.info help()
+    exit 0
+}
+
+
+// Include any necessary modules and subworkflows
+include { PROCESS_FASTQ           } from "${params.subworkflows}${params.fs}process_fastq"
+include { CAT_CAT                 } from "${params.modules}${params.fs}cat_cat${params.fs}main"
+include { FASTQC                  } from "${params.modules}${params.fs}fastqc${params.fs}main"
+include { BBTOOLS_BBMERGE         } from "${params.modules}${params.fs}bbtools${params.fs}bbmerge${params.fs}main"
+include { FASTP                   } from "${params.modules}${params.fs}fastp${params.fs}main"
+include { MASH_SCREEN             } from "${params.modules}${params.fs}mash${params.fs}screen${params.fs}main"
+include { TOP_UNIQUE_SEROVARS     } from "${params.modules}${params.fs}top_unique_serovars${params.fs}main"
+include { SOURMASH_SKETCH         } from "${params.modules}${params.fs}sourmash${params.fs}sketch${params.fs}main"
+include { SOURMASH_GATHER         } from "${params.modules}${params.fs}sourmash${params.fs}gather${params.fs}main"
+include { SOURMASH_SEARCH         } from "${params.modules}${params.fs}sourmash${params.fs}search${params.fs}main"
+include { KMA_INDEX               } from "${params.modules}${params.fs}kma${params.fs}index${params.fs}main"
+include { KMA_ALIGN               } from "${params.modules}${params.fs}kma${params.fs}align${params.fs}main"
+include { OTF_GENOME              } from "${params.modules}${params.fs}otf_genome${params.fs}main"
+include { MEGAHIT_ASSEMBLE        } from "${params.modules}${params.fs}megahit${params.fs}assemble${params.fs}main"
+include { MLST                    } from "${params.modules}${params.fs}mlst${params.fs}main"
+include { ABRICATE_RUN            } from "${params.modules}${params.fs}abricate${params.fs}run${params.fs}main"
+include { ABRICATE_SUMMARY        } from "${params.modules}${params.fs}abricate${params.fs}summary${params.fs}main"
+include { TABLE_SUMMARY           } from "${params.modules}${params.fs}cat${params.fs}tables${params.fs}main"
+include { SALMON_INDEX            } from "${params.modules}${params.fs}salmon${params.fs}index${params.fs}main"
+include { SALMON_QUANT            } from "${params.modu..msg} file\n" +
+            "[ ${file_path} ]\nexists and is not of size 0.")
+    }
+}
+
+/*
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    HELP TEXT METHODS FOR BETTERCALLSAL WORKFLOW
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+*/
+
+def help() {
+
+    Map helptext = [:]
+    Map bcsConcatHelp = [:]
+    Map fastpAdapterHelp = [:]
+    Map nH = [:]
+    def uHelp = (params.help.getClass().toString() =~ /String/ ? params.help.tokenize(',').join(' ') : '')
+
+    Map defaultHelp = [
+        '--help bbmerge'          : 'Show bbmerge.sh CLI options',
+        '--help fastp'            : 'Show fastp CLI options',
+        '--help mash'             : 'Show mash `screen` CLI options',
+        '--help tuspy'            : 'Show get_top_unique_mash_hit_genomes.py CLI options',
+        '--help sourmashsketch'   : 'Show sourmash `sketch` CLI options',
+        '--help sourmashgather'   : 'Show sourmash `gather` CLI options',
+        '--help sourmashsearch'   : 'Show sourmash `search` CLI options',
+        '--help sfhpy'            : 'Show sourmash_filter_hits.py CLI options',
+        '--help kmaindex'         : 'Show kma `index` CLI options',
+        '--help kmaalign'         : 'Show kma CLI options',
+        '--help megahit'          : 'Show megahit CLI options',
+        '--help mlst'             : 'Show mlst CLI options',
+        '--help abricate'         : 'Show abricate CLI options',
+        '--help salmon'           : 'Show salmon `index` CLI options',
+        '--help gsrpy'            : 'Show gen_salmon_res_table.py CLI options\n'
+    ]
+
+    bcsConcatHelp['--bcs_concat_pe'] = "Concatenate paired-end files. " +
+        "Default: ${params.bcs_concat_pe}"
+
+    fastpAdapterHelp['--fastp_use_custom_adapaters'] = "Use custom adapter FASTA with fastp on top of " +
+        "built-in adapter sequence auto-detection. Enabling this option will attempt to find and remove " +
+        "all possible Illumina adapter and primer sequences but will make the workflow run slow. " +
+        "Default: ${params.fastp_use_custom_adapters}"
+
+    if (params.help.getClass().toString() =~ /Boolean/ || uHelp.size() == 0) {
+        println conciseHelp('fastp,mash')
+        helptext.putAll(defaultHelp)
+    } else {
+        params.help.tokenize(',').each { h ->
+            if (defaultHelp.keySet().findAll{ it =~ /(?i)\b${h}\b/ }.size() == 0) {
+                println conciseHelp('fastp,mash')
+                stopNow("Tool [ ${h} ] is not a part of ${params.pipeline} pipeline.")
+            }
+        }
+
+        helptext.putAll(
+            fastqEntryPointHelp() +
+            bcsConcatHelp +
+            (uHelp =~ /(?i)\bbbmerge/ ? bbmergeHelp(params).text : nH) +
+            (uHelp =~ /(?i)\bfastp/ ? fastpHelp(params).text + fastpAdapterHelp : nH) +
+            (uHelp =~ /(?i)\bmash/ ? mashscreenHelp(params).text : nH) +
+            (uHelp =~ /(?i)\btuspy/ ? tuspyHelp(params).text : nH) +
+            (uHelp =~ /(?i)\bsourmashsketch/ ? sourmashsketchHelp(params).text : nH) +
+            (uHelp =~ /(?i)\bsourmashgather/ ? sourmashgatherHelp(params).text : nH) +
+            (uHelp =~ /(?i)\bsourmashsearch/ ? sourmashsearchHelp(params).text : nH) +
+            (uHelp =~ /(?i)\bsfhpy/ ? sfhpyHelp(params).text : nH) +
+            (uHelp =~ /(?i)\bkmaindex/ ? kmaindexHelp(params).text : nH) +
+            (uHelp =~ /(?i)\bkmaalign/ ? kmaalignHelp(params).text : nH) +
+            (uHelp =~ /(?i)\bmegahit/ ? megahitHelp(params).text : nH) +
+            (uHelp =~ /(?i)\bmlst/ ? mlstHelp(params).text : nH) +
+            (uHelp =~ /(?i)\babricate/ ? abricateHelp(params).text : nH) +
+            (uHelp =~ /(?i)\bsalmon/ ? salmonidxHelp(params).text : nH) +
+            (uHelp =~ /(?i)\bgsrpy/ ? gsrpyHelp(params).text : nH) +
+            wrapUpHelp()
+        )
+    }
+
+    return addPadding(helptext)
+}
\ No newline at end of file
0.6.1/workflows/bettercallsal_db.nf
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/workflows/bettercallsal_db.nf
0.6.1/workflows/bettercallsal_db.nf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/workflows/bettercallsal_db.nf Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,182 @@
+// Define any required imports for this specific workflow
+import java.nio.file.Paths
+import nextflow.file.FileHelper
+
+
+// Include any necessary methods
+include { \
+    fastqEntryPointHelp; summaryOfParams; stopNow; sendMail; \
+    addPadding; wrapUpHelp    } from "${params.routines}"
+include { wcompHelp           } from "${params.toolshelp}${params.fs}wcomp"
+include { wsnpHelp            } from "${params.toolshelp}${params.fs}wsnp"
+include { mashsketchHelp      } from "${params.toolshelp}${params.fs}mashsketch"
+
+
+// Exit if help requested before any subworkflows
+if (params.help) {
+    log.info help()
+    exit 0
+}
+
+
+// Include any necessary modules and subworkflows
+include { DOWNLOAD_PDG_METADATA    } from "${params.modules}${params.fs}download_pdg_metadata${params.fs}main"
+include { FILTER_PDG_METADATA      } from "${params.modules}${params.fs}filter_pdg_metadata${params.fs}main"
+include { DB_PER_COMPUTED_SEROTYPE } from "${params.modules}${params.fs}db_per_computed_serotype${params.fs}main"
+include { DB_PER_SNP_CLUSTER       } from "${params.modules}${params.fs}db_per_snp_cluster${params.fs}main"
+include { INDEX_METADATA           } from "${params.modules}${params.fs}index_metadata${params.fs}main"
+include { SCAFFOLD_GENOMES         } from "${params.modules}${params.fs}scaffold_genomes${params.fs}main"
+include { MASH_SKETCH              } from "${params.modules}${params.fs}mash${params.fs}sketch${params.fs}main"
+include { DUMP_SOFTWARE_VERSIONS   } from "${params.modules}${params.fs}custom${params.fs}dump_software_versions${params.fs}main"
+
+/*
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    INPUTS AND ANY CHECKS FOR THE BETTERCALLSAL_DB WORKFLOW
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+*/
+
+if (!params.output) {
+    stopNow("Please mention the absolute UNIX path to store the DB flat files\n" +
+            "using the --output option.\n" +
+        "Ex: --output /path/to/bettercallsal/db_files")
+}
+
+/*
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    RUN THE BETTERCALLSAL_DB WORKFLOW
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+*/
+
+workflow BETTERCALLSAL_DB {
+    main:
+        log.info summaryOfParams()
+
+        DOWNLOAD_PDG_METADATA ( params.pdg_release ?: null )
+
+        DOWNLOAD_PDG_METADATA
+            .out
+            .versions
+            .set { software_versions }
+
+        FILTER_PDG_METADATA (
+            DOWNLOAD_PDG_METADATA.out.accs
+                .splitText(by: params.genomes_chunk.toInteger() * 10, file: true)
+        )
+
+        DB_PER_COMPUTED_SEROTYPE (
+            FILTER_PDG_METADATA.out.accs_chunk_tbl
+                .collectFile(name: 'per_comp_db_accs.txt'),
+            DOWNLOAD_PDG_METADATA.out.pdg_metadata
+        )
+
+        DB_PER_SNP_CLUSTER (
+            FILTER_PDG_METADATA.out.accs_chunk_tbl
+                .collectFile(name: 'per_snp_db_accs.txt'),
+            DOWNLOAD_PDG_METADATA.out.pdg_metadata,
+            DOWNLOAD_PDG_METADATA.out.snp_cluster_metadata
+        )
+
+        DB_PER_COMPUTED_SEROTYPE.out.genome_paths
+            .map { query ->
+                kv = [:]
+                kv['id'] = 'comp'
+                [ kv, query ]
+            }
+            .concat(
+                DB_PER_SNP_CLUSTER.out.genome_paths
+                    .map { query ->
+                        kv = [:]
+                        kv['id'] = 'snp'
+                        [ kv, query ]
+                    }
+            )
+            .groupTuple(by: [0])
+            .set { ch_mash_these_genomes }
+
+        DB_PER_SNP_CLUSTER
+            .out
+            .asm_chunk_snp_tbl
+            .concat( DB_PER_COMPUTED_SEROTYPE.out.asm_chunk_comp_tbl )
+            .map { acc -> [ acc.name.find(/\_comp|\_snp/), acc ] }
+            .set { ch_index_metadata }
+
+        INDEX_METADATA ( ch_index_metadata )
+
+        DB_PER_COMPUTED_SEROTYPE.out.accs_comp
+            .concat( DB_PER_SNP_CLUSTER.out.accs_snp )
+            .splitText()
+            .collect()
+            .flatten()
+            .unique()
+            .collectFile(name: 'accs_to_download.txt')
+            .splitText(by: params.genomes_chunk, file: true)
+            .set { ch_accs_to_download }
+        
+        SCAFFOLD_GENOMES ( ch_accs_to_download )
+
+        SCAFFOLD_GENOMES
+            .out
+            .genomes_dir
+            .toSortedList()
+            .flatten()
+            .unique()
+            .set { ch_genomes_dir }
+
+        MASH_SKETCH ( 
+            ch_mash_these_genomes.combine( ch_genomes_dir )
+        )
+
+        DUMP_SOFTWARE_VERSIONS (
+            software_versions
+                .mix (
+                    DOWNLOAD_PDG_METADATA.out.versions,
+                    FILTER_PDG_METADATA.out.versions,
+                    DB_PER_COMPUTED_SEROTYPE.out.versions,
+                    DB_PER_SNP_CLUSTER.out.versions,
+                    INDEX_METADATA.out.versions,
+                    SCAFFOLD_GENOMES.out.versions,
+                    MASH_SKETCH.out.versions,
+                )
+                .unique()
+                .collectFile(name: 'collected_versions.yml')
+        )
+}
+
+/*
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    ON COMPLETE, SHOW GORY DETAILS OF ALL PARAMS WHICH WILL BE HELPFUL TO DEBUG
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+*/
+
+workflow.onComplete {
+    if (workflow.success) {
+        sendMail()
+    }
+}
+
+workflow.onError {
+    sendMail()
+}
+
+/*
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    HELP TEXT METHODS FOR BETTERCALLSAL_DB WORKFLOW
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+*/
+
+def help() {
+
+    Map helptext = [:]
+
+    helptext.putAll (
+        fastqEntryPointHelp().findAll {
+            it.key =~ /Required|output|Other|Workflow|Author|Version/
+        } +
+        wcompHelp(params).text +
+        wsnpHelp(params).text +
+        mashsketchHelp(params).text + 
+        wrapUpHelp()
+    )
+
+    return addPadding(helptext)
+}
0.6.1/workflows/conf/bettercallsal.config
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/workflows/conf/bettercallsal.config
0.6.1/workflows/conf/bettercallsal.config
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/workflows/conf/bettercallsal.config Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,283 @@
+params {
+    workflow_conceived_by = 'Kranti Konganti'
+    workflow_built_by = 'Kranti Konganti'
+    workflow_version = '0.6.1'
+    bcs_root_dbdir = '/hpc/db/bettercallsal/latest'
+    bcs_db_mode = 'snp'
+    bcs_db_mode_index = (params.bcs_db_mode ==~ /snp/ ? '_cluster' : '_serotype')
+    bcs_thresholds = 'strict'
+    bcs_concat_pe = true
+    bbmerge_run = (params.bcs_concat_pe ? false : true)
+    bbmerge_adapters = false
+    bbmerge_reads = -1
+    bbmerge_ziplevel = 1
+    bbmerge_ordered = false
+    bbmerge_qtrim = true
+    bbmerge_qtrim2 = false
+    bbmerge_trimq = 10
+    bbmerge_minlength = 1
+    bbmerge_tbo = false
+    bbmerge_minavgquality = (params.bcs_thresholds ==~ /strict/ ? 30 : 20)
+    bbmerge_trimpolya = true
+    bbmerge_pfilter = (params.bcs_thresholds ==~ /strict/ ? 1 : false)
+    bbmerge_ouq = false
+    bbmerge_owq = true
+    bbmerge_strict = false
+    bbmerge_verystrict = false 
+    bbmerge_ultrastrict = (params.bcs_thresholds ==~ /strict/ ? true : false)
+    bbmerge_maxstrict = false
+    bbmerge_loose = false
+    bbmerge_veryloose = false
+    bbmerge_ultraloose = false
+    bbmerge_maxloose = false
+    bbmerge_fast = false
+    bbmerge_k = 60
+    bbmerge_prealloc = true
+    fastp_run = true
+    fastp_failed_out = false
+    fastp_merged_out = false
+    fastp_overlapped_out = false
+    fastp_6 = false
+    fastp_reads_to_process = 0 
+    fastp_fix_mgi_id = false
+    fastp_A = false
+    fastp_f = 0
+    fastp_t = 0
+    fastp_b = 0
+    fastp_F = 0
+    fastp_T = 0
+    fastp_B = 0
+    fastp_dedup = true
+    fastp_dup_calc_accuracy = 6
+    fastp_poly_g_min_len = 10
+    fastp_G = true
+    fastp_x = false
+    fastp_poly_x_min_len = 10 
+    fastp_cut_front = true
+    fastp_cut_tail = false
+    fastp_cut_right = true
+    fastp_W = 20
+    fastp_M = 30
+    fastp_q = 30
+    fastp_u = 40
+    fastp_n = 5
+    fastp_e = 0
+    fastp_l = 35
+    fastp_max_len = 0
+    fastp_y = true
+    fastp_Y = 30
+    fastp_U = false
+    fastp_umi_loc = false
+    fastp_umi_len = false
+    fastp_umi_prefix = false
+    fastp_umi_skip = false
+    fastp_p = true
+    fastp_P = 20
+    fastp_use_custom_adapters = false
+    fastp_adapter_fasta = (params.fastp_use_custom_adapters ? "${projectDir}"
+        + File.separator
+        + 'assets'
+        + File.separator
+        + 'adaptors.fa' : false)
+    mashscreen_run = true
+    mash_sketch = (params.bcs_root_dbdir 
+        + File.separator 
+        + 'mash_sketch' 
+        + File.separator 
+        + 'msh.k21.1000h.' 
+        + params.bcs_db_mode 
+        + '.msh')
+    mashscreen_w = false
+    mashscreen_i = false
+    mashscreen_v = false
+    tuspy_run = true
+    tuspy_s = false
+    tuspy_m = false
+    tuspy_ps = (params.bcs_root_dbdir 
+        + File.separator 
+        + 'index_metadata' 
+        + File.separator 
+        + 'per_' 
+        + params.bcs_db_mode 
+        + params.bcs_db_mode_index 
+        + '.ACC2SERO.pickle')
+    tuspy_gd = (params.bcs_root_dbdir 
+        + File.separator 
+        + 'scaffold_genomes')
+    tuspy_gds = '_scaffolded_genomic.fna.gz'
+    tuspy_n = 10
+    sourmashsketch_run = true
+    sourmashsketch_mode = 'dna'
+    sourmashsketch_file = false
+    sourmashsketch_f = false
+    sourmashsketch_merge = false
+    sourmashsketch_name = false
+    sourmashsketch_p = 'abund,scaled=1000,k=51,k=61,k=71'
+    sourmashsketch_singleton = true
+    sourmashsketch_randomize = false
+    sourmashgather_run = (params.sourmashsketch_run ?: false)
+    sourmashgather_n = false
+    sourmashgather_thr_bp = false
+    sourmashgather_ignoreabn = false
+    sourmashgather_prefetch = false
+    sourmashgather_noprefetch = false
+    sourmashgather_ani_ci = true
+    sourmashgather_k = 71
+    sourmashgather_protein = false
+    sourmashgather_noprotein..ex_run = true
+    kmaindex_t_db = false
+    kmaindex_k = 31
+    kmaindex_m = false
+    kmaindex_hc = false
+    kmaindex_ML = false
+    kmaindex_ME = false
+    kmaindex_Sparse = false
+    kmaindex_ht = false
+    kmaindex_hq = false
+    kmaindex_and = false
+    kmaindex_nbp = false
+    kmaalign_run = true
+    kmaalign_ignorequals = false
+    kmaalign_int = false
+    kmaalign_ef = false
+    kmaalign_vcf = false
+    kmaalign_sam = false
+    kmaalign_nc = true
+    kmaalign_na = true
+    kmaalign_nf = false
+    kmaalign_a = false
+    kmaalign_and = true
+    kmaalign_oa = false
+    kmaalign_bc = false
+    kmaalign_bcNano = false
+    kmaalign_bcd = false
+    kmaalign_bcg = false
+    kmaalign_ID = (params.bcs_thresholds ==~ /strict/ ? 10.0 : 5.0)
+    kmaalign_md = false
+    kmaalign_dense = false
+    kmaalign_ref_fsa = false
+    kmaalign_Mt1 = false
+    kmaalign_1t1 = false
+    kmaalign_mrs = (params.bcs_thresholds ==~ /strict/ ? 0.99 : 0.90)
+    kmaalign_mrc = (params.bcs_thresholds ==~ /strict/ ? 0.99 : 0.90)
+    kmaalign_mp = (params.bcs_thresholds ==~ /strict/ ? 30 : 20)
+    kmaalign_eq = (params.bcs_thresholds ==~ /strict/ ? 30 : 20)
+    kmaalign_mp = (params.kmaalign_ignorequals ? 0 : params.kmaalign_mp)
+    kmaalign_eq = (params.kmaalign_ignorequals ? 0 : params.kmaalign_eq)
+    kmaalign_mq = false
+    kmaalign_5p = false
+    kmaalign_3p = false
+    kmaalign_apm = false
+    kmaalign_cge = false
+    kmaalign_mrs = (params.sourmashgather_run ? false : params.kmaalign_mrs)
+    kmaalign_and = (params.sourmashgather_run ? false : true)
+    kmaalign_ID = (params.sourmashgather_run ? false : params.kmaalign_ID)
+    megahit_run = true
+    megahit_min_count = false
+    megahit_k_list = false
+    megahit_no_mercy = false
+    megahit_bubble_level = false
+    megahit_merge_level = false
+    megahit_prune_level = false
+    megahit_prune_depth = false
+    megahit_low_local_ratio = false
+    megahit_max_tip_len = false
+    megahit_no_local = false
+    megahit_kmin_1pass = false
+    megahit_preset = 'meta-sensitive'
+    megahit_mem_flag = 2
+    megahit_min_contig_len = false
+    mlst_run = true
+    mlst_scheme = 'senterica_achtman_2'
+    mlst_legacy = true
+    mlst_minid = 95
+    mlst_mincov = 10
+    mlst_minscore = 50
+    abricate_run = true
+    abricate_datadir = ("${projectDir}"
+        + File.separator
+        + 'assets'
+        + File.separator
+        + 'abricate_dbs')
+    abricate_minid = 90
+    abricate_mincov = 80
+    abricate_summary_run = true
+    salmonidx_run = true
+    salmonidx_k = false
+    salmonidx_gencode = false
+    salmonidx_features = false
+    salmonidx_keepDuplicates = false
+    salmonidx_keepFixedFasta = false
+    salmonidx_filterSize = false
+    salmonidx_sparse = false
+    salmonidx_n = false
+    salmonidx_decoys = false
+    salmonalign_libtype = 'SF'
+    gsrpy_run = true
+    gsrpy_url = true
+    gsrpy_snp_clus_metadata =  (params.bcs_root_dbdir
+        + File.separator
+        + 'download_pdg_metadata'
+        + File.separator 
+        + getPDGRelease(params.bcs_root_dbdir) 
+        + File.separator
+        + getPDGRelease(params.bcs_root_dbdir) 
+        + '.reference_target.cluster_list.tsv')
+    sourmashcompare_mode = 'ani,containment'
+    fq_filter_by_len = 0
+    fq_suffix = (params.fq_single_end ? '.fastq.gz' : '_R1_001.fastq.gz')
+    fq2_suffix = '_R2_001.fastq.gz'
+}
+
+/*
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    METHOD TO GET PDG RELEASE AND SET REST OF THE METADATA FILES
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+*/
+
+def getPDGRelease(db_path) {
+ db_path_obj = new File( db_path )
+ def pdg_release = []
+
+ db_path_obj.eachDirRecurse {
+ it.toString() =~ /PDG/ \
+            ? pdg_release << it.toString().find(/PDG\d+\.\d+/) \
+            : null
+ }
+
+ return pdg_release.unique().join('').toString()
+}
0.6.1/workflows/conf/bettercallsal_db.config
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/workflows/conf/bettercallsal_db.config
0.6.1/workflows/conf/bettercallsal_db.config
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/workflows/conf/bettercallsal_db.config Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,37 @@
+params {
+    workflow_conceived_by = 'Kranti Konganti'
+    workflow_built_by = 'Kranti Konganti'
+    workflow_version = '0.6.1'
+    pdg_release = 'PDG000000002.2658'
+    ncbi_asm_suffix = '_genomic.fna.gz'
+    wcomp_serocol = false
+    wcomp_complete_sero = false
+    wcomp_not_null_serovar = false
+    wcomp_num = false
+    wcomp_min_contig_size = false
+    wcomp_i = false 
+    wsnp_serocol = false
+    wsnp_complete_sero = true
+    wsnp_not_null_serovar = false
+    wsnp_num = false
+    wsnp_i = "'I 4,[5],12:i:-'" 
+    genomes_chunk = 100
+    mashsketch_run = true
+    mashsketch_l = true
+    mashsketch_I = false
+    mashsketch_C = false
+    mashsketch_k = 21
+    mashsketch_s = 1000
+    mashsketch_i = false
+    mashsketch_S = false
+    mashsketch_w = false
+    mashsketch_r = false
+    mashsketch_b = false
+    mashsketch_m = false
+    mashsketch_c = false
+    mashsketch_g = false
+    mashsketch_n = false
+    mashsketch_a = false
+    mashsketch_z = false
+    mashsketch_Z = false
+}
0.6.1/workflows/conf/process/bettercallsal.process.config
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/workflows/conf/process/bettercallsal.process.config
0.6.1/workflows/conf/process/bettercallsal.process.config
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/workflows/conf/process/bettercallsal.process.config Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,173 @@
+process {
+    withName: 'SEQKIT_SEQ' {
+        ext.args = [
+            params.fq_filter_by_len ? "-m ${params.fq_filter_by_len}" : ''
+        ].join(' ').trim()
+    }
+
+    if (params.bbmerge_run) {
+        withName: 'BBTOOLS_BBMERGE' {
+            ext.args = addParamsToSummary(
+                loadThisFunction("${params.toolshelp}${params.fs}bbmerge.nf").bbmergeHelp(params).helpparams
+            )
+        }
+    }
+
+    if (params.fastp_run) {
+        withName: 'FASTP' {
+            ext.args = addParamsToSummary(
+                loadThisFunction("${params.toolshelp}${params.fs}fastp.nf").fastpHelp(params).helpparams
+            )
+        }
+    }
+
+    if (params.bcs_concat_pe) {
+        withName: 'CAT_CAT' {
+            ext.prefix = 'concat.fastq.gz'
+        }
+    }
+
+
+    if (params.mashscreen_run) {
+        withName: 'MASH_SCREEN' {
+            ext.args = addParamsToSummary(
+                loadThisFunction("${params.toolshelp}${params.fs}mashscreen.nf").mashscreenHelp(params).helpparams
+            )
+        }
+    }
+
+    if (params.tuspy_run) {
+        withName: 'TOP_UNIQUE_SEROVARS' {
+            ext.args = addParamsToSummary(
+                loadThisFunction("${params.toolshelp}${params.fs}tuspy.nf").tuspyHelp(params).helpparams
+            )
+        }
+    }
+
+    if (params.gsrpy_run) {
+        withName: 'BCS_RESULTS' {
+            ext.args = addParamsToSummary(
+                loadThisFunction("${params.toolshelp}${params.fs}gsrpy.nf").gsrpyHelp(params).helpparams
+            )
+        }
+    }
+
+    if (params.sourmashsketch_run) {
+        withName: 'SOURMASH_SKETCH' {
+            ext.args = addParamsToSummary(
+                loadThisFunction("${params.toolshelp}${params.fs}sourmashsketch.nf").sourmashsketchHelp(params).helpparams
+            )
+        }
+    }
+
+    if (params.sourmashgather_run) {
+        withName: 'SOURMASH_GATHER' {
+            ext.args = addParamsToSummary(
+                loadThisFunction("${params.toolshelp}${params.fs}sourmashgather.nf").sourmashgatherHelp(params).helpparams
+            )
+
+            if (params.sfhpy_run) {
+                ext.args2 = addParamsToSummary(
+                    loadThisFunction("${params.toolshelp}${params.fs}sfhpy.nf").sfhpyHelp(params).helpparams
+                )
+            }
+        }
+    }
+
+    if (params.sourmashsearch_run) {
+        withName: 'SOURMASH_SEARCH' {
+            ext.args = addParamsToSummary(
+                loadThisFunction("${params.toolshelp}${params.fs}sourmashsearch.nf").sourmashsearchHelp(params).helpparams
+            )
+
+            if (params.sfhpy_run) {
+                ext.args2 = addParamsToSummary(
+                    loadThisFunction("${params.toolshelp}${params.fs}sfhpy.nf").sfhpyHelp(params).helpparams
+                )
+            }
+        }
+    }
+
+    if (params.kmaindex_run) {
+        withName: 'KMA_INDEX' {
+            ext.args = addParamsToSummary(
+                loadThisFunction("${params.toolshelp}${params.fs}kmaindex.nf").kmaindexHelp(params).helpparams
+            )
+        }
+    }
+
+    if (params.kmaalign_run) {
+        withName: 'KMA_ALIGN' {
+            ext.args = addParamsToSummary(
+                loadThisFunction("${params.toolshelp}${params.fs}kmaalign.nf").kmaalignHelp(params).helpparams
+            )
+        }
+    }
+
+    if (params.megahit_run) {
+        withName: 'MEGAHIT_ASSEMBLE' {
+            errorStrategy = 'ignore'
+            ext.args = addParamsToSummary(
+                loadThisFunction("${params.toolshelp}${params.fs}megahit.nf").megahitHelp(params).helpparams
+            )
+        }
+
+        withName: 'MLST' {
+            ext.when = params.mlst_run
+            ext.args = addParamsToSummary(
+                loadThisFunction("${params.toolshelp}${params.fs}mlst.nf").mlstHelp(params).helpparams
+            )
+        }
+
+        withName: 'ABRICATE_RUN' {
+            ext.when = params.abricate_run
+            ext.args = addParamsToSummary(
+                loadThisFunction("${params.toolshelp}${params.fs}abricate.nf").abricateHelp(params).helpparams
+            )
+        }
+
+        withName: 'ABRICATE_SUMMARY' {
+            ext.when = params.abricate_summary_run
+        }
+    }
+
+    if (params.salmonidx_run){
+        withName: 'SALMON_INDEX' {
+            ext.args = addParamsToSummary(
+                loadThisFunction("${params.toolshelp}${params.fs}salmonidx.nf").salmonidxHelp(params).helpparams
+            )
+        }
+    }
+
+    withName: 'OTF_GENOME' {
+        errorStrategy = 'ignore'
+    }
+    
+}
+
+
+// Parse the default params
+def loadThisFunction (func_file) {
+    GroovyShell grvy_sh = new GroovyShell()
+    def func = grvy_sh.parse(new File ( func_file ) )
+    return func
+}
+
+// Method to add relevant final parameters to summary log
+def addParamsToSummary(Map params_to_add = [:]) {
+
+    if (!params_to_add.isEmpty()) {
+        def not_null_params_to_add = params_to_add.findAll {
+            it.value.clivalue != null && 
+                it.value.clivalue != '[:]' &&
+                it.value.clivalue != ''
+        }
+
+        params.logtheseparams += not_null_params_to_add.keySet().toList()
+
+        return not_null_params_to_add.collect {
+            "${it.value.cliflag} ${it.value.clivalue.toString().replaceAll(/(?:^\s+|\s+$)/, '')}"
+        }.join(' ').trim()
+    }
+    return 1
+}
0.6.1/workflows/conf/process/bettercallsal_db.process.config
diff -r 1b9de878b04a -r 749faef1caa9 0.6.1/workflows/conf/process/bettercallsal_db.process.config
0.6.1/workflows/conf/process/bettercallsal_db.process.config
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/0.6.1/workflows/conf/process/bettercallsal_db.process.config Tue Sep 05 11:51:40 2023 -0400
@@ -0,0 +1,58 @@
+process {
+    withName: 'DB_PER_COMPUTED_SEROTYPE' {
+        ext.args = addParamsToSummary(
+            loadThisFunction("${params.toolshelp}${params.fs}wcomp.nf").wcompHelp(params).helpparams
+        )
+    }
+
+    withName: 'DB_PER_SNP_CLUSTER' {
+        ext.args = addParamsToSummary(
+            loadThisFunction("${params.toolshelp}${params.fs}wsnp.nf").wsnpHelp(params).helpparams
+        )
+    }
+
+    if (params.mashsketch_run) {
+        withName: 'MASH_SKETCH' {
+            ext.args = addParamsToSummary(
+                loadThisFunction("${params.toolshelp}${params.fs}mashsketch.nf").mashsketchHelp(params).helpparams
+            )
+        }
+    }
+
+    withName: 'SCAFFOLD_GENOMES' {
+        maxRetries = 5
+        publishDir = [
+            path:  "${params.output}${params.fs}scaffold_genomes",
+            mode: "move",
+            overwrite: true,
+            saveAs: { filename -> filename ==~ /versions\.yml|genome_paths\.txt/ ? null : filename }
+        ]
+    }
+}
+
+
+// Parse the default params
+def loadThisFunction (func_file) {
+    GroovyShell grvy_sh = new GroovyShell()
+    def func = grvy_sh.parse(new File ( func_file ) )
+    return func
+}
+
+// Method to add relevant final parameters to summary log
+def addParamsToSummary(Map params_to_add = [:]) {
+
+    if (!params_to_add.isEmpty()) {
+        def not_null_params_to_add = params_to_add.findAll {
+            it.value.clivalue != null && 
+                it.value.clivalue != '[:]' &&
+                it.value.clivalue != ''
+        }
+
+        params.logtheseparams += not_null_params_to_add.keySet().toList()
+
+        return not_null_params_to_add.collect {
+            "${it.value.cliflag} ${it.value.clivalue.toString().replaceAll(/(?:^\s+|\s+$)/, '')}"
+        }.join(' ').trim()
+    }
+    return 1
+}
cfsan_bettercallsal.xml
diff -r 1b9de878b04a -r 749faef1caa9 cfsan_bettercallsal.xml
cfsan_bettercallsal.xml
--- a/cfsan_bettercallsal.xml Thu Jun 15 11:16:45 2023 -0400
+++ b/cfsan_bettercallsal.xml Tue Sep 05 11:51:40 2023 -0400
@@ -1,7 +1,7 @@
-<tool id="cfsan_bettercallsal" name="bettercallsal" version="0.2.0+galaxy0">
+<tool id="cfsan_bettercallsal" name="bettercallsal" version="0.6.1">
     <description>An automated workflow to assign Salmonella serotype based on NCBI Pathogen Detection Project for Salmonella.</description>
     <requirements>
- <requirement type="package" version="22.10">nextflow</requirement>
+ <requirement type="package" version="23.04">nextflow</requirement>
     <requirement type="package" version="1.0.0">micromamba</requirement>
  <requirement type="package">graphviz</requirement>
     </requirements>    
@@ -35,7 +35,7 @@
          ln -sf '$pair.reverse' './cpipes-input/$read_R2';
      #end for
     #end if
- $__tool_directory__/0.5.0/cpipes
+ $__tool_directory__/0.6.1/cpipes
     --pipeline bettercallsal
     --input \${pwd_path}/cpipes-input
  --output \${pwd_path}/cpipes-output
@@ -49,6 +49,7 @@
     #if ($sourmash_cond.run == "true"):
         --sfhpy_fcv $sourmash_cond.sfhpy_fcv
     #end if
+    --bcs_db_mode $bcs_db_mode
     --bcs_thresholds $bcs_thresholds
  --fq_filename_delim '${fq_filename_delim}'
  --fq_filename_delim_idx $fq_filename_delim_idx
@@ -76,6 +77,11 @@
                     help="For any data sets downloaded from NCBI into Galaxy, change this to _reverse.fastq.gz suffix."/>
             </when>
         </conditional>
+        <param name="bcs_db_mode" type="select" label="Select the database mode with bettercallsal"
+            help="Refer to `Database generation` section in our manuscript: https://doi.org/10.3389/fmicb.2023.1200983">
+            <option value="snp" selected="true">per_snp_cluster</option>
+            <option value="comp">per_computed_type</option>
+        </param>
         <param name="tuspy_n" optional="true" value="10" type="integer" label="Enter the number of top unique serotypes to retain after initial MASH screen step"
             help="The default value of 10 is suitable for almost all scenarios."/>
         <param name="bcs_thresholds" type="select" label="Enter the type of base quality thresholds to be set with bettercallsal"
@@ -173,13 +179,14 @@
   ]]></help>
     <citations>
         <citation type="bibtex">
-            @misc{bettercallsal,
+            @article{bettercallsal,
             author = {Konganti, Kranti},
             year = {2023},
+            month = {August},
             title = {bettercallsal: better calling of Salmonella serotypes from enrichment cultures using shotgun metagenomic profiling and its application in an outbreak setting},
-            publisher = {Cold Spring Harbor Laboratory},
-            journal = {bioRxiv},
-            url = {https://www.biorxiv.org/content/10.1101/2023.04.06.535929v1.full}}
+            journal = {Frontiers in Microbiology},
+            doi = {10.3389/fmicb.2023.1200983},
+            url = {https://www.frontiersin.org/articles/10.3389/fmicb.2023.1200983/full}}
         </citation>
     </citations>
 </tool>