changeset 0:370e0b6e9826 draft

Uploaded
author florianbegusch
date Wed, 17 Jul 2019 03:05:17 -0400
parents
children 255f48db74f8
files qiime2/merge_feature_table_and_taxonomy.xml qiime2/qiime_alignment_mafft.xml qiime2/qiime_alignment_mask.xml qiime2/qiime_citation.xml qiime2/qiime_composition_add-pseudocount.xml qiime2/qiime_composition_ancom.xml qiime2/qiime_cutadapt_demux-paired.xml qiime2/qiime_cutadapt_demux-single.xml qiime2/qiime_cutadapt_trim-paired.xml qiime2/qiime_cutadapt_trim-single.xml qiime2/qiime_dada2_denoise-paired.xml qiime2/qiime_dada2_denoise-pyro.xml qiime2/qiime_dada2_denoise-single.xml qiime2/qiime_deblur_denoise-16S.xml qiime2/qiime_deblur_denoise-other.xml qiime2/qiime_deblur_visualize-stats.xml qiime2/qiime_demux_emp-paired.xml qiime2/qiime_demux_emp-single.xml qiime2/qiime_demux_subsample-paired.xml qiime2/qiime_demux_subsample-single.xml qiime2/qiime_demux_summarize.xml qiime2/qiime_diversity_adonis.xml qiime2/qiime_diversity_alpha-correlation.xml qiime2/qiime_diversity_alpha-group-significance.xml qiime2/qiime_diversity_alpha-phylogenetic.xml qiime2/qiime_diversity_alpha-rarefaction.xml qiime2/qiime_diversity_alpha.xml qiime2/qiime_diversity_beta-correlation.xml qiime2/qiime_diversity_beta-group-significance.xml qiime2/qiime_diversity_beta-phylogenetic-alt.xml qiime2/qiime_diversity_beta-phylogenetic.xml qiime2/qiime_diversity_beta-rarefaction.xml qiime2/qiime_diversity_beta.xml qiime2/qiime_diversity_bioenv.xml qiime2/qiime_diversity_core-metrics-phylogenetic.xml qiime2/qiime_diversity_core-metrics.xml qiime2/qiime_diversity_filter-distance-matrix.xml qiime2/qiime_diversity_mantel.xml qiime2/qiime_diversity_pcoa-biplot.xml qiime2/qiime_diversity_pcoa.xml qiime2/qiime_diversity_procrustes-analysis.xml qiime2/qiime_emperor_biplot.xml qiime2/qiime_emperor_plot.xml qiime2/qiime_emperor_procrustes-plot.xml qiime2/qiime_feature-classifier_classify-consensus-blast.xml qiime2/qiime_feature-classifier_classify-consensus-vsearch.xml qiime2/qiime_feature-classifier_classify-sklearn.xml qiime2/qiime_feature-classifier_extract-reads.xml qiime2/qiime_feature-classifier_fit-classifier-naive-bayes.xml qiime2/qiime_feature-classifier_fit-classifier-sklearn.xml qiime2/qiime_feature-table_core-features.xml qiime2/qiime_feature-table_filter-features.xml qiime2/qiime_feature-table_filter-samples.xml qiime2/qiime_feature-table_filter-seqs.xml qiime2/qiime_feature-table_group.xml qiime2/qiime_feature-table_heatmap.xml qiime2/qiime_feature-table_merge-seqs.xml qiime2/qiime_feature-table_merge-taxa.xml qiime2/qiime_feature-table_merge.xml qiime2/qiime_feature-table_presence-absence.xml qiime2/qiime_feature-table_rarefy.xml qiime2/qiime_feature-table_relative-frequency.xml qiime2/qiime_feature-table_subsample.xml qiime2/qiime_feature-table_summarize.xml qiime2/qiime_feature-table_tabulate-seqs.xml qiime2/qiime_feature-table_transpose.xml qiime2/qiime_fragment-insertion_classify-otus-experimental.xml qiime2/qiime_fragment-insertion_filter-features.xml qiime2/qiime_fragment-insertion_sepp.xml qiime2/qiime_gneiss_add-pseudocount.xml qiime2/qiime_gneiss_assign-ids.xml qiime2/qiime_gneiss_balance-taxonomy.xml qiime2/qiime_gneiss_correlation-clustering.xml qiime2/qiime_gneiss_dendrogram-heatmap.xml qiime2/qiime_gneiss_gradient-clustering.xml qiime2/qiime_gneiss_ilr-hierarchical.xml qiime2/qiime_gneiss_ilr-phylogenetic.xml qiime2/qiime_gneiss_ilr-transform.xml qiime2/qiime_gneiss_lme-regression.xml qiime2/qiime_gneiss_ols-regression.xml qiime2/qiime_longitudinal_anova.xml qiime2/qiime_longitudinal_feature-volatility.xml qiime2/qiime_longitudinal_first-differences.xml qiime2/qiime_longitudinal_first-distances.xml qiime2/qiime_longitudinal_linear-mixed-effects.xml qiime2/qiime_longitudinal_maturity-index.xml qiime2/qiime_longitudinal_nmit.xml qiime2/qiime_longitudinal_pairwise-differences.xml qiime2/qiime_longitudinal_pairwise-distances.xml qiime2/qiime_longitudinal_plot-feature-volatility.xml qiime2/qiime_longitudinal_volatility.xml qiime2/qiime_metadata_distance-matrix.xml qiime2/qiime_metadata_tabulate.xml qiime2/qiime_phylogeny_align-to-tree-mafft-fasttree.xml qiime2/qiime_phylogeny_fasttree.xml qiime2/qiime_phylogeny_filter-table.xml qiime2/qiime_phylogeny_iqtree-ultrafast-bootstrap.xml qiime2/qiime_phylogeny_iqtree.xml qiime2/qiime_phylogeny_midpoint-root.xml qiime2/qiime_phylogeny_raxml-rapid-bootstrap.xml qiime2/qiime_phylogeny_raxml.xml qiime2/qiime_quality-control_evaluate-composition.xml qiime2/qiime_quality-control_evaluate-seqs.xml qiime2/qiime_quality-control_evaluate-taxonomy.xml qiime2/qiime_quality-control_exclude-seqs.xml qiime2/qiime_quality-filter_q-score-joined.xml qiime2/qiime_quality-filter_q-score.xml qiime2/qiime_sample-classifier_classify-samples-from-dist.xml qiime2/qiime_sample-classifier_classify-samples-ncv.xml qiime2/qiime_sample-classifier_classify-samples.xml qiime2/qiime_sample-classifier_confusion-matrix.xml qiime2/qiime_sample-classifier_fit-classifier.xml qiime2/qiime_sample-classifier_fit-regressor.xml qiime2/qiime_sample-classifier_heatmap.xml qiime2/qiime_sample-classifier_maturity-index.xml qiime2/qiime_sample-classifier_metatable.xml qiime2/qiime_sample-classifier_predict-classification.xml qiime2/qiime_sample-classifier_predict-regression.xml qiime2/qiime_sample-classifier_regress-samples-ncv.xml qiime2/qiime_sample-classifier_regress-samples.xml qiime2/qiime_sample-classifier_scatterplot.xml qiime2/qiime_sample-classifier_split-table.xml qiime2/qiime_sample-classifier_summarize.xml qiime2/qiime_taxa_barplot.xml qiime2/qiime_taxa_collapse.xml qiime2/qiime_taxa_filter-seqs.xml qiime2/qiime_taxa_filter-table.xml qiime2/qiime_tools_export.xml qiime2/qiime_tools_export_collection.xml qiime2/qiime_tools_export_paired_collection.xml qiime2/qiime_tools_import.xml qiime2/qiime_vsearch_cluster-features-closed-reference.xml qiime2/qiime_vsearch_cluster-features-de-novo.xml qiime2/qiime_vsearch_cluster-features-open-reference.xml qiime2/qiime_vsearch_dereplicate-sequences.xml qiime2/qiime_vsearch_join-pairs.xml qiime2/qiime_vsearch_uchime-denovo.xml qiime2/qiime_vsearch_uchime-ref.xml tool_data/ref_classifier.loc tool_data/ref_taxnonomy.loc tool_data_table_conf.xml.sample
diffstat 141 files changed, 14703 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/merge_feature_table_and_taxonomy.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,34 @@
+<?xml version="1.0" ?>
+<tool id="merge_feature_table_and_taxonomy" name="merge feature table and taxonomy" version="2019.4">
+	<description>- Merge features and taxonomy into a single biom file.</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command>
+mkdir out;
+
+qiime tools export --input-path --output-path out $taxonomy_qza;
+qiime tools export --input-path --output-path out $biom_qza;
+
+sed -i '1s;^;#;' out/*.tsv;
+sed -i 's/Confidence/confidence/g' out/*.tsv;
+sed -i 's/Taxon/taxonomy/g' out/*.tsv;
+sed -i 's/Feature ID/OTU ID/g' out/*.tsv;
+
+biom add-metadata -i out/*.biom -o table_with_sample_metadata.biom --observation-metadata-fp out/*.tsv
+;
+mv *.biom $biom_and_tax_merged</command>
+	<inputs>
+		<param label="Feature table" name="biom_qza" type="data" format="qza,no_unzip.zip" collection_type="list"/>
+		<param label="Taxonomy" name="taxonomy_qza" type="data" format="qza,no_unzip.zip"/>
+	</inputs>
+	<outputs>
+		<data format="biom2" label="${tool.name} on ${on_string}: biom_and_tax_merged.biom" name="biom_and_tax_merged"/>
+	</outputs>
+	<help>
+	</help>
+<macros>
+	<import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation" />
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_alignment_mafft.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,56 @@
+<?xml version="1.0" ?>
+<tool id="qiime_alignment_mafft" name="qiime alignment mafft" version="2019.4">
+	<description> - De novo multiple sequence alignment with MAFFT</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime alignment mafft
+
+--i-sequences=$isequences
+--o-alignment=oalignment
+
+#set $pnthreads = '${GALAXY_SLOTS:-4}'
+
+#if str($pnthreads):
+ --p-n-threads="$pnthreads"
+#end if
+
+
+#if $pparttree:
+ --p-parttree
+#end if
+;
+cp oalignment.qza $oalignment
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-sequences: ARTIFACT FeatureData[Sequence] The sequences to be aligned.              [required]" name="isequences" optional="False" type="data"/>
+		<param label="--p-parttree: --p-no-parttree This flag is required if the number of sequences being aligned are larger than 1000000. Disabled by default                             [default: False]" name="pparttree" selected="False" type="boolean"/>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: alignment.qza" name="oalignment"/>
+	</outputs>
+	<help><![CDATA[
+De novo multiple sequence alignment with MAFFT
+##############################################
+
+Perform de novo multiple sequence alignment using MAFFT.
+
+Parameters
+----------
+sequences : FeatureData[Sequence]
+    The sequences to be aligned.
+parttree : Bool, optional
+    This flag is required if the number of sequences being aligned are
+    larger than 1000000. Disabled by default
+
+Returns
+-------
+alignment : FeatureData[AlignedSequence]
+    The aligned sequences.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_alignment_mask.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,66 @@
+<?xml version="1.0" ?>
+<tool id="qiime_alignment_mask" name="qiime alignment mask" version="2019.4">
+	<description> - Positional conservation and gap filtering.</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime alignment mask
+
+--i-alignment=$ialignment
+
+--o-masked-alignment=omaskedalignment
+
+#if $pmaxgapfrequency:
+ --p-max-gap-frequency=$pmaxgapfrequency
+#end if
+
+#if $pminconservation:
+ --p-min-conservation=$pminconservation
+#end if
+
+cp omaskedalignment.qza $omaskedalignment
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-alignment: ARTIFACT FeatureData[AlignedSequence] The alignment to be masked.               [required]" name="ialignment" optional="False" type="data"/>
+		<param label="--p-max-gap-frequency: PROPORTION Range(0, 1, inclusive_end=True) The maximum relative frequency of gap characters in a column for the column to be retained. This relative frequency must be a number between 0.0 and 1.0 (inclusive), where 0.0 retains only those columns without gap characters, and 1.0 retains all columns regardless of gap character frequency. [default: 1.0]" name="pmaxgapfrequency" optional="True" type="float" min="0" max="1" exclude_max="False" value="1.0"/>
+		<param label="--p-min-conservation: PROPORTION Range(0, 1, inclusive_end=True) The minimum relative frequency of at least one non-gap character in a column for that column to be retained. This relative frequency must be a number between 0.0 and 1.0 (inclusive). For example, if a value of 0.4 is provided, a column will only be retained if it contains at least one character that is present in at least 40% of the sequences. [default: 0.4]" name="pminconservation" optional="True" type="float" min="0" max="1" exclude_max="False" value="0.4"/>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: maskedalignment.qza" name="omaskedalignment"/>
+	</outputs>
+	<help><![CDATA[
+Positional conservation and gap filtering.
+##########################################
+
+Mask (i.e., filter) unconserved and highly gapped columns from an
+alignment. Default min_conservation was chosen to reproduce the mask
+presented in Lane (1991).
+
+Parameters
+----------
+alignment : FeatureData[AlignedSequence]
+    The alignment to be masked.
+max_gap_frequency : Float % Range(0, 1, inclusive_end=True), optional
+    The maximum relative frequency of gap characters in a column for the
+    column to be retained. This relative frequency must be a number between
+    0.0 and 1.0 (inclusive), where 0.0 retains only those columns without
+    gap characters, and 1.0 retains all columns regardless of gap character
+    frequency.
+min_conservation : Float % Range(0, 1, inclusive_end=True), optional
+    The minimum relative frequency of at least one non-gap character in a
+    column for that column to be retained. This relative frequency must be
+    a number between 0.0 and 1.0 (inclusive). For example, if a value of
+    0.4 is provided, a column will only be retained if it contains at least
+    one character that is present in at least 40% of the sequences.
+
+Returns
+-------
+masked_alignment : FeatureData[AlignedSequence]
+    The masked alignment.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_citation.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,24 @@
+<macros>
+  <xml name="qiime_citation">
+    <citations>
+      <citation type="bibtex">
+        @article{10.7287/peerj.preprints.27295v2,
+         title = {QIIME 2: Reproducible, interactive, scalable, and extensible microbiome data science},
+         author = {Bolyen, Evan and Rideout, Jai Ram and Dillon, Matthew R and Bokulich, Nicholas A and Abnet, Christian and Al-Ghalith, Gabriel A and Alexander, Harriet and Alm, Eric J and Arumugam, Manimozhiyan and Asnicar, Francesco and Bai, Yang and Bisanz, Jordan E and Bittinger, Kyle and Brejnrod, Asker and Brislawn, Colin J and Brown, C Titus and Callahan, Benjamin J and Caraballo-Rodríguez, Andrés Mauricio and Chase, John and Cope, Emily and Da Silva, Ricardo and Dorrestein, Pieter C and Douglas, Gavin M and Durall, Daniel M and Duvallet, Claire and Edwardson, Christian F and Ernst, Madeleine and Estaki, Mehrbod and Fouquier, Jennifer and Gauglitz, Julia M and Gibson, Deanna L and Gonzalez, Antonio and Gorlick, Kestrel and Guo, Jiarong and Hillmann, Benjamin and Holmes, Susan and Holste, Hannes and Huttenhower, Curtis and Huttley, Gavin and Janssen, Stefan and Jarmusch, Alan K and Jiang, Lingjing and Kaehler, Benjamin and Kang, Kyo Bin and Keefe, Christopher R and Keim, Paul and Kelley, Scott T and Knights, Dan and Koester, Irina and Kosciolek, Tomasz and Kreps, Jorden and Langille, Morgan GI and Lee, Joslynn and Ley, Ruth and Liu, Yong-Xin and Loftfield, Erikka and Lozupone, Catherine and Maher, Massoud and Marotz, Clarisse and Martin, Bryan D and McDonald, Daniel and McIver, Lauren J and Melnik, Alexey V and Metcalf, Jessica L and Morgan, Sydney C and Morton, Jamie and Naimey, Ahmad Turan and Navas-Molina, Jose A and Nothias, Louis Felix and Orchanian, Stephanie B and Pearson, Talima and Peoples, Samuel L and Petras, Daniel and Preuss, Mary Lai and Pruesse, Elmar and Rasmussen, Lasse Buur and Rivers, Adam and Robeson, II, Michael S and Rosenthal, Patrick and Segata, Nicola and Shaffer, Michael and Shiffer, Arron and Sinha, Rashmi and Song, Se Jin and Spear, John R and Swafford, Austin D and Thompson, Luke R and Torres, Pedro J and Trinh, Pauline and Tripathi, Anupriya and Turnbaugh, Peter J and Ul-Hasan, Sabah and van der Hooft, Justin JJ and Vargas, Fernando and Vázquez-Baeza, Yoshiki and Vogtmann, Emily and von Hippel, Max and Walters, William and Wan, Yunhu and Wang, Mingxun and Warren, Jonathan and Weber, Kyle C and Williamson, Chase HD and Willis, Amy D and Xu, Zhenjiang Zech and Zaneveld, Jesse R and Zhang, Yilong and Zhu, Qiyun and Knight, Rob and Caporaso, J Gregory},
+         year = 2019,
+         month = dec,
+         keywords = {microbiome, bioinformatics, data science, software, microbial ecology, reproducibility},
+         abstract = {
+                We present QIIME 2, an open-source microbiome data science platform accessible to users spanning the microbiome research ecosystem, from scientists and engineers to clinicians and policy makers. QIIME 2 provides new features that will drive the next generation of microbiome research. These include interactive spatial and temporal analysis and visualization tools, support for metabolomics and shotgun metagenomics analysis, and automated data provenance tracking to ensure reproducible, transparent microbiome data science.
+              },
+         volume = 6,
+         pages = {e27295v2},
+         journal = {PeerJ Preprints},
+         issn = {2167-9843},
+         url = {https://doi.org/10.7287/peerj.preprints.27295v2},
+         doi = {10.7287/peerj.preprints.27295v2}
+        }
+       </citation>
+    </citations>
+  </xml>
+</macros>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_composition_add-pseudocount.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,48 @@
+<?xml version="1.0" ?>
+<tool id="qiime_composition_add-pseudocount" name="qiime composition add-pseudocount" version="2019.4">
+	<description> - Add pseudocount to table</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime composition add-pseudocount
+
+--i-table=$itable
+--o-composition-table=ocompositiontable
+
+#if $ppseudocount:
+ --p-pseudocount=$ppseudocount
+#end if
+;
+cp ocompositiontable.qza $ocompositiontable
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-table: ARTIFACT FeatureTable[Frequency] The feature table to which pseudocounts should be added.                                       [required]" name="itable" optional="False" type="data"/>
+		<param label="--p-pseudocount: INTEGER The value to add to all counts in the feature table. [default: 1]" name="ppseudocount" optional="True" type="integer" value="1"/>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: compositiontable.qza" name="ocompositiontable"/>
+	</outputs>
+	<help><![CDATA[
+Add pseudocount to table
+########################
+
+Increment all counts in table by pseudocount.
+
+Parameters
+----------
+table : FeatureTable[Frequency]
+    The feature table to which pseudocounts should be added.
+pseudocount : Int, optional
+    The value to add to all counts in the feature table.
+
+Returns
+-------
+composition_table : FeatureTable[Composition]
+    The resulting feature table.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_composition_ancom.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,87 @@
+<?xml version="1.0" ?>
+<tool id="qiime_composition_ancom" name="qiime composition ancom" version="2019.4">
+	<description> - Apply ANCOM to identify features that differ in abundance.</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime composition ancom
+
+--i-table=$itable
+
+#def list_dict_to_string(list_dict):
+  #set $file_list = list_dict[0]['additional_input'].__getattr__('file_name')
+  #for d in list_dict[1:]:
+	  #set $file_list = $file_list + ',' + d['additional_input'].__getattr__('file_name')
+  #end for
+  #return $file_list
+#end def
+
+--m-metadata-file=$list_dict_to_string($input_files_mmetadatafile) --m-metadata-column="$mmetadatacolumn"
+
+#if str($pdifferencefunction) != 'None':
+--p-difference-function=$pdifferencefunction
+#end if
+
+#if str($ptransformfunction) != 'None':
+--p-transform-function=$ptransformfunction
+#end if
+
+--o-visualization=ovisualization;
+
+qiime tools export --input-path ovisualization.qzv --output-path out   && mkdir -p '$ovisualization.files_path'
+&& cp -r out/* '$ovisualization.files_path'
+&& mv '$ovisualization.files_path/index.html' '$ovisualization'
+  ]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-table: FeatureTable[Composition] - The feature table to be used for ANCOM computation.  [required]" name="itable" optional="False" type="data"/>
+		<repeat name="input_files_mmetadatafile" optional="False" title="--m-metadata-file">
+			<param format="tabular" label="--m-metadata-file: Metadata file or artifact viewable as metadata. This option may be supplied multiple times to merge metadata. [required]" name="additional_input" type="data"/>
+		</repeat>
+		<param label="--m-metadata-column: MetadataColumn[Categorical] - Column from metadata file or artifact viewable as metadata. The categorical sample metadata column to test for differential abundance across.  [required]" name="mmetadatacolumn" optional="False" type="text"/>
+		<param label="--p-difference-function: " name="pdifferencefunction" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="mean_difference">mean_difference</option>
+			<option value="f_statistic">f_statistic</option>
+		</param>
+		<param label="--cmd-config: Use config file for command options" name="cmdconfig" optional="True" type="data"/>
+		<param label="--p-transform-function: " name="ptransformfunction" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="log">log</option>
+			<option value="clr">clr</option>
+			<option value="sqrt">sqrt</option>
+		</param>
+	</inputs>
+	<outputs>
+		<data format="html" label="${tool.name} on ${on_string}: visualization.qzv" name="ovisualization"/>
+	</outputs>
+	<help><![CDATA[
+Apply ANCOM to identify features that differ in abundance.
+##########################################################
+
+Apply Analysis of Composition of Microbiomes (ANCOM) to identify features
+that are differentially abundant across groups.
+
+Parameters
+----------
+table : FeatureTable[Composition]
+    The feature table to be used for ANCOM computation.
+metadata : MetadataColumn[Categorical]
+    The categorical sample metadata column to test for differential
+    abundance across.
+transform_function : Str % Choices('sqrt', 'log', 'clr'), optional
+    The method applied to transform feature values before generating
+    volcano plots.
+difference_function : Str % Choices('mean_difference', 'f_statistic'), optional
+    The method applied to visualize fold difference in feature abundances
+    across groups for volcano plots.
+
+Returns
+-------
+visualization : Visualization
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_cutadapt_demux-paired.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,92 @@
+<?xml version="1.0" ?>
+<tool id="qiime_cutadapt_demux-paired" name="qiime cutadapt demux-paired" version="2019.4">
+	<description> - Demultiplex paired-end sequence data with barcodes in- sequence.</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime cutadapt demux-paired
+--i-seqs=$iseqs
+
+#def list_dict_to_string(list_dict):
+  #set $file_list = list_dict[0]['additional_input'].__getattr__('file_name')
+  #for d in list_dict[1:]:
+	  #set $file_list = $file_list + ',' + d['additional_input'].__getattr__('file_name')
+  #end for
+  #return $file_list
+#end def
+
+--m-forward-barcodes-file=$list_dict_to_string("$input_files_mforwardbarcodesfile")
+--m-reverse-barcodes-file=$list_dict_to_string("$input_files_mreversebarcodesfile")
+
+--m-forward-barcodes-column="$mforwardbarcodescolumn"
+
+#if str($mreversebarcodescolumn):
+ --m-reverse-barcodes-column="$mreversebarcodescolumn"
+#end if
+
+#if $perrorrate:
+ --p-error-rate=$perrorrate
+#end if
+
+
+--o-per-sample-sequences=opersamplesequences
+--o-untrimmed-sequences=ountrimmedsequences
+;
+
+cp opersamplesequences.qza $opersamplesequences;
+cp ountrimmedsequences.qza $ountrimmedsequences
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-seqs: ARTIFACT MultiplexedPairedEndBarcodeInSequence The paired-end sequences to be demultiplexed. [required]" name="iseqs" optional="False" type="data"/>
+		<param label="--m-forward-barcodes-column: COLUMN  MetadataColumn[Categorical] The sample metadata column listing the per-sample barcodes for the forward reads.           [required]" name="mforwardbarcodescolumn" optional="False" type="text"/>
+		<param label="--m-reverse-barcodes-column: COLUMN  MetadataColumn[Categorical] The sample metadata column listing the per-sample barcodes for the reverse reads.           [optional]" name="mreversebarcodescolumn" optional="True" type="text"/>
+
+		<repeat name="input_files_mforwardbarcodesfile" optional="False" title="--m-forward-barcodes-file">
+			<param label="--m-forward-barcodes-file: Metadata file or artifact viewable as metadata. This option may be supplied multiple times to merge metadata. [required]" name="additional_input" type="data" format="tabular,qza,no_unzip.zip" />
+		</repeat>
+
+		<repeat name="input_files_mreversebarcodesfile" optional="False" title="--m-reverse-barcodes-file">
+			<param label="--m-reverse-barcodes-file: Metadata file or artifact viewable as metadata. This option may be supplied multiple times to merge metadata. [required]" name="additional_input" type="data" format="tabular,qza,no_unzip.zip" />
+		</repeat>
+
+		<param label="--p-error-rate: PROPORTION Range(0, 1, inclusive_end=True) The level of error tolerance, specified as the maximum allowable error rate.         [default: 0.1]" name="perrorrate" optional="True" type="float" min="0" max="1" exclude_max="False" value="0.1"/>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: persamplesequences.qza" name="opersamplesequences"/>
+		<data format="qza" label="${tool.name} on ${on_string}: untrimmedsequences.qza" name="ountrimmedsequences"/>
+	</outputs>
+	<help><![CDATA[
+Demultiplex paired-end sequence data with barcodes in-sequence.
+###############################################################
+
+Demultiplex sequence data (i.e., map barcode reads to sample ids). Barcodes
+are expected to be located within the sequence data (versus the header, or
+a separate barcode file).
+
+Parameters
+----------
+seqs : MultiplexedPairedEndBarcodeInSequence
+    The paired-end sequences to be demultiplexed.
+forward_barcodes : MetadataColumn[Categorical]
+    The sample metadata column listing the per-sample barcodes for the
+    forward reads.
+reverse_barcodes : MetadataColumn[Categorical], optional
+    The sample metadata column listing the per-sample barcodes for the
+    reverse reads.
+error_rate : Float % Range(0, 1, inclusive_end=True), optional
+    The level of error tolerance, specified as the maximum allowable error
+    rate.
+
+Returns
+-------
+per_sample_sequences : SampleData[PairedEndSequencesWithQuality]
+    The resulting demultiplexed sequences.
+untrimmed_sequences : MultiplexedPairedEndBarcodeInSequence
+    The sequences that were unmatched to barcodes.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_cutadapt_demux-single.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,76 @@
+<?xml version="1.0" ?>
+<tool id="qiime_cutadapt_demux-single" name="qiime cutadapt demux-single" version="2019.4">
+	<description> - Demultiplex single-end sequence data with barcodes in- sequence.</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime cutadapt demux-single
+
+--i-seqs=$iseqs
+--m-barcodes-column="$mbarcodescolumn"
+--o-per-sample-sequences=opersamplesequences
+--o-untrimmed-sequences=ountrimmedsequences
+
+#def list_dict_to_string(list_dict):
+  #set $file_list = list_dict[0]['additional_input'].__getattr__('file_name')
+  #for d in list_dict[1:]:
+	  #set $file_list = $file_list + ',' + d['additional_input'].__getattr__('file_name')
+  #end for
+  #return $file_list
+#end def
+
+--m-barcodes-file=$list_dict_to_string("$input_files_mbarcodesfile")
+
+#if $perrorrate:
+ --p-error-rate=$perrorrate
+#end if
+
+;
+
+cp opersamplesequences.qza $opersamplesequences;
+cp ountrimmedsequences.qza $ountrimmedsequences
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-seqs: ARTIFACT MultiplexedSingleEndBarcodeInSequence The single-end sequences to be demultiplexed. [required]" name="iseqs" optional="False" type="data"/>
+		<repeat name="$input_files_mbarcodesfile" optional="False" title="--m-barcodes-file">
+			<param label="--m-barcodes-file: Metadata file or artifact viewable as metadata. This option may be supplied multiple times to merge metadata. [required]" name="additional_input" type="data" format="tabular,qza,no_unzip.zip" />
+		</repeat>
+		<param label="--m-barcodes-column: COLUMN  MetadataColumn[Categorical] The sample metadata column listing the per-sample barcodes.                                 [required]" name="mbarcodescolumn" optional="False" type="text"/>
+		<param label="--p-error-rate: PROPORTION Range(0, 1, inclusive_end=True) The level of error tolerance, specified as the maximum allowable error rate. The default value specified by cutadapt is 0.1 (=10%), which is greater than `demux emp-*`, which is 0.0 (=0%). [default: 0.1]" name="perrorrate" optional="True" type="float" min="0" max="1" exclude_max="False" value="0.1"/>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: persamplesequences.qza" name="opersamplesequences"/>
+		<data format="qza" label="${tool.name} on ${on_string}: untrimmedsequences.qza" name="ountrimmedsequences"/>
+	</outputs>
+	<help><![CDATA[
+Demultiplex single-end sequence data with barcodes in-sequence.
+###############################################################
+
+Demultiplex sequence data (i.e., map barcode reads to sample ids). Barcodes
+are expected to be located within the sequence data (versus the header, or
+a separate barcode file).
+
+Parameters
+----------
+seqs : MultiplexedSingleEndBarcodeInSequence
+    The single-end sequences to be demultiplexed.
+barcodes : MetadataColumn[Categorical]
+    The sample metadata column listing the per-sample barcodes.
+error_rate : Float % Range(0, 1, inclusive_end=True), optional
+    The level of error tolerance, specified as the maximum allowable error
+    rate. The default value specified by cutadapt is 0.1 (=10%), which is
+    greater than `demux emp-*`, which is 0.0 (=0%).
+
+Returns
+-------
+per_sample_sequences : SampleData[SequencesWithQuality]
+    The resulting demultiplexed sequences.
+untrimmed_sequences : MultiplexedSingleEndBarcodeInSequence
+    The sequences that were unmatched to barcodes.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_cutadapt_trim-paired.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,190 @@
+<?xml version="1.0" ?>
+<tool id="qiime_cutadapt_trim-paired" name="qiime cutadapt trim-paired" version="2019.4">
+	<description> - Find and remove adapters in demultiplexed paired-end sequences.</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime cutadapt trim-paired
+
+--i-demultiplexed-sequences=$idemultiplexedsequences
+
+#set $pcores = '${GALAXY_SLOTS:-4}'
+#if str($pcores):
+--p-cores=$pcores
+#end if
+
+#if str($padapterf):
+ --p-adapter-f="$padapterf"
+#end if
+
+#if str($pfrontf):
+ --p-front-f="$pfrontf"
+#end if
+
+#if '__sq__' in str($panywheref):
+  #set $panywheref_temp = $panywheref.replace('__sq__', "'")
+  #set $panywheref = $panywheref_temp
+#end if
+
+#if str($panywheref):
+ --p-anywhere-f="$panywheref"
+#end if
+
+
+#if str($padapterr):
+ --p-adapter-r="$padapterr"
+#end if
+
+#if str($pfrontr):
+ --p-front-r="$pfrontr"
+#end if
+
+#if '__sq__' in str($panywherer):
+  #set $panywherer_temp = $panywherer.replace('__sq__', "'")
+  #set $panywherer = $panywherer_temp
+#end if
+
+#if str($panywherer):
+ --p-anywhere-r="$panywherer"
+#end if
+
+#if $perrorrate:
+ --p-error-rate=$perrorrate
+#end if
+
+#if $pnoindels:
+ --p-no-indels
+#end if
+
+#if $ptimes:
+ --p-times=$ptimes
+#end if
+
+#if $poverlap:
+ --p-overlap=$poverlap
+#end if
+
+#if $pmatchreadwildcards:
+ --p-match-read-wildcards
+#end if
+
+#if $pnomatchadapterwildcards:
+ --p-no-match-adapter-wildcards
+#end if
+
+#if $pminimumlength:
+ --p-minimum-length=$pminimumlength
+#end if
+
+#if $pdiscarduntrimmed:
+ --p-discard-untrimmed
+#end if
+
+--o-trimmed-sequences=otrimmedsequences
+;
+
+cp otrimmedsequences.qza $otrimmedsequences
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-demultiplexed-sequences: ARTIFACT SampleData[PairedEndSequencesWithQuality] The paired-end sequences to be trimmed.   [required]" name="idemultiplexedsequences" optional="False" type="data"/>
+		<param label="--p-adapter-f: TEXT...   Sequence of an adapter ligated to the 3' end. The List[Str]             adapter and any subsequent bases are trimmed. If a `$` is appended, the adapter is only found if it is at the end of the read. Search in forward read. If your sequence of interest is 'framed' by a 5' and a 3' adapter, use this parameter to define a 'linked' primer - see https://cutadapt.readthedocs.io for complete details.                         [optional]" name="padapterf" optional="True" type="text"/>
+		<param label="--p-front-f: TEXT...     Sequence of an adapter ligated to the 5' end. The List[Str]             adapter and any preceding bases are trimmed. Partial matches at the 5' end are allowed. If a `^` character is prepended, the adapter is only found if it is at the beginning of the read. Search in forward read.                             [optional]" name="pfrontf" optional="True" type="text"/>
+		<param label="--p-anywhere-f: TEXT...  Sequence of an adapter that may be ligated to the List[Str]             5' or 3' end. Both types of matches as described under `adapter` and `front` are allowed. If the first base of the read is part of the match, the behavior is as with `front`, otherwise as with `adapter`. This option is mostly for rescuing failed library preparations - do not use if you know which end your adapter was ligated to. Search in forward read.                                     [optional]" name="panywheref" optional="True" type="text"/>
+		<param label="--p-adapter-r: TEXT...   Sequence of an adapter ligated to the 3' end. The List[Str]             adapter and any subsequent bases are trimmed. If a `$` is appended, the adapter is only found if it is at the end of the read. Search in reverse read. If your sequence of interest is 'framed' by a 5' and a 3' adapter, use this parameter to define a 'linked' primer - see https://cutadapt.readthedocs.io for complete details.                         [optional]" name="padapterr" optional="True" type="text"/>
+		<param label="--p-front-r: TEXT...     Sequence of an adapter ligated to the 5' end. The List[Str]             adapter and any preceding bases are trimmed. Partial matches at the 5' end are allowed. If a `^` character is prepended, the adapter is only found if it is at the beginning of the read. Search in reverse read.                             [optional]" name="pfrontr" optional="True" type="text"/>
+		<param label="--p-anywhere-r: TEXT...  Sequence of an adapter that may be ligated to the List[Str]             5' or 3' end. Both types of matches as described under `adapter` and `front` are allowed. If the first base of the read is part of the match, the behavior is as with `front`, otherwise as with `adapter`. This option is mostly for rescuing failed library preparations - do not use if you know which end your adapter was ligated to. Search in reverse read.                                     [optional]" name="panywherer" optional="True" type="text"/>
+		<param label="--p-error-rate: PROPORTION Range(0, 1, inclusive_end=True) Maximum allowed error rate.           [default: 0.1]" name="perrorrate" optional="True" type="float" min="0" max="1" exclude_max="False" value="0.1"/>
+		<param label="--p-no-indels: Do not allow insertions or deletions of bases when matching adapters.                   [default: False]" name="pnoindels" selected="False" type="boolean"/>
+		<param label="--p-times: INTEGER       Remove multiple occurrences of an adapter if it is Range(1, None)        repeated, up to `times` times.          [default: 1]" name="ptimes" optional="True" type="integer" min="1" value="1"/>
+		<param label="--p-overlap: INTEGER     Require at least `overlap` bases of overlap between Range(1, None)        read and adapter for an adapter to be found. [default: 3]" name="poverlap" optional="True" type="integer" min="1" value="3"/>
+		<param label="--p-match-read-wildcards: --p-no-match-read-wildcards Interpret IUPAC wildcards (e.g., N) in reads. [default: False]" name="pmatchreadwildcards" selected="False" type="boolean"/>
+		<param label="--p-no-match-adapter-wildcards: Do not interpret IUPAC wildcards (e.g., N) in adapters. [default: False]" name="pnomatchadapterwildcards" selected="False" type="boolean"/>
+		<param label="--p-minimum-length: INTEGER Range(1, None)        Discard reads shorter than specified value. Note, the cutadapt default of 0 has been overridden, because that value produces empty sequence records. [default: 1]" name="pminimumlength" optional="True" type="integer" min="1" value="1"/>
+		<param label="--p-discard-untrimmed: --p-no-discard-untrimmed Discard reads in which no adapter was found. [default: False]" name="pdiscarduntrimmed" selected="False" type="boolean"/>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: trimmedsequences.qza" name="otrimmedsequences"/>
+	</outputs>
+	<help><![CDATA[
+Find and remove adapters in demultiplexed paired-end sequences.
+###############################################################
+
+Search demultiplexed paired-end sequences for adapters and remove them. The
+parameter descriptions in this method are adapted from the official
+cutadapt docs - please see those docs at https://cutadapt.readthedocs.io
+for complete details.
+
+Parameters
+----------
+demultiplexed_sequences : SampleData[PairedEndSequencesWithQuality]
+    The paired-end sequences to be trimmed.
+adapter_f : List[Str], optional
+    Sequence of an adapter ligated to the 3' end. The adapter and any
+    subsequent bases are trimmed. If a `$` is appended, the adapter is only
+    found if it is at the end of the read. Search in forward read. If your
+    sequence of interest is "framed" by a 5' and a 3' adapter, use this
+    parameter to define a "linked" primer - see
+    https://cutadapt.readthedocs.io for complete details.
+front_f : List[Str], optional
+    Sequence of an adapter ligated to the 5' end. The adapter and any
+    preceding bases are trimmed. Partial matches at the 5' end are allowed.
+    If a `^` character is prepended, the adapter is only found if it is at
+    the beginning of the read. Search in forward read.
+anywhere_f : List[Str], optional
+    Sequence of an adapter that may be ligated to the 5' or 3' end. Both
+    types of matches as described under `adapter` and `front` are allowed.
+    If the first base of the read is part of the match, the behavior is as
+    with `front`, otherwise as with `adapter`. This option is mostly for
+    rescuing failed library preparations - do not use if you know which end
+    your adapter was ligated to. Search in forward read.
+adapter_r : List[Str], optional
+    Sequence of an adapter ligated to the 3' end. The adapter and any
+    subsequent bases are trimmed. If a `$` is appended, the adapter is only
+    found if it is at the end of the read. Search in reverse read. If your
+    sequence of interest is "framed" by a 5' and a 3' adapter, use this
+    parameter to define a "linked" primer - see
+    https://cutadapt.readthedocs.io for complete details.
+front_r : List[Str], optional
+    Sequence of an adapter ligated to the 5' end. The adapter and any
+    preceding bases are trimmed. Partial matches at the 5' end are allowed.
+    If a `^` character is prepended, the adapter is only found if it is at
+    the beginning of the read. Search in reverse read.
+anywhere_r : List[Str], optional
+    Sequence of an adapter that may be ligated to the 5' or 3' end. Both
+    types of matches as described under `adapter` and `front` are allowed.
+    If the first base of the read is part of the match, the behavior is as
+    with `front`, otherwise as with `adapter`. This option is mostly for
+    rescuing failed library preparations - do not use if you know which end
+    your adapter was ligated to. Search in reverse read.
+error_rate : Float % Range(0, 1, inclusive_end=True), optional
+    Maximum allowed error rate.
+indels : Bool, optional
+    Allow insertions or deletions of bases when matching adapters.
+times : Int % Range(1, None), optional
+    Remove multiple occurrences of an adapter if it is repeated, up to
+    `times` times.
+overlap : Int % Range(1, None), optional
+    Require at least `overlap` bases of overlap between read and adapter
+    for an adapter to be found.
+match_read_wildcards : Bool, optional
+    Interpret IUPAC wildcards (e.g., N) in reads.
+match_adapter_wildcards : Bool, optional
+    Interpret IUPAC wildcards (e.g., N) in adapters.
+minimum_length : Int % Range(1, None), optional
+    Discard reads shorter than specified value. Note, the cutadapt default
+    of 0 has been overridden, because that value produces empty sequence
+    records.
+discard_untrimmed : Bool, optional
+    Discard reads in which no adapter was found.
+
+Returns
+-------
+trimmed_sequences : SampleData[PairedEndSequencesWithQuality]
+    The resulting trimmed sequences.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_cutadapt_trim-single.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,151 @@
+<?xml version="1.0" ?>
+<tool id="qiime_cutadapt_trim-single" name="qiime cutadapt trim-single" version="2019.4">
+	<description> - Find and remove adapters in demultiplexed single-end sequences.</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime cutadapt trim-single
+--i-demultiplexed-sequences=$idemultiplexedsequences
+
+#set $pcores = '${GALAXY_SLOTS:-4}'
+#if str($pcores):
+--p-cores=$pcores
+#end if
+
+#if str($padapter):
+ --p-adapter="$padapter"
+#end if
+
+#if str($pfront):
+ --p-front="$pfront"
+#end if
+
+#if '__sq__' in str($panywhere):
+  #set $panywhere_temp = $panywhere.replace('__sq__', "'")
+  #set $panywhere = $panywhere_temp
+#end if
+
+#if str($panywhere):
+ --p-anywhere="$panywhere"
+#end if
+
+
+#if $perrorrate:
+ --p-error-rate=$perrorrate
+#end if
+
+#if $pnoindels:
+ --p-no-indels
+#end if
+
+#if $ptimes:
+ --p-times=$ptimes
+#end if
+
+#if $poverlap:
+ --p-overlap=$poverlap
+#end if
+
+#if $pmatchreadwildcards:
+ --p-match-read-wildcards
+#end if
+
+#if $pnomatchadapterwildcards:
+ --p-no-match-adapter-wildcards
+#end if
+
+#if $pminimumlength:
+ --p-minimum-length=$pminimumlength
+#end if
+
+#if $pdiscarduntrimmed:
+ --p-discard-untrimmed
+#end if
+
+--o-trimmed-sequences=otrimmedsequences
+
+;
+cp otrimmedsequences.qza $otrimmedsequences
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-demultiplexed-sequences: ARTIFACT SampleData[SequencesWithQuality] The single-end sequences to be trimmed.     [required]" name="idemultiplexedsequences" optional="False" type="data"/>
+		<param label="--p-adapter: TEXT...   Sequence of an adapter ligated to the 3' end. The List[Str]           adapter and any subsequent bases are trimmed. If a `$` is appended, the adapter is only found if it is at the end of the read. If your sequence of interest is 'framed' by a 5' and a 3' adapter, use this parameter to define a 'linked' primer - see https://cutadapt.readthedocs.io for complete details. [optional]" name="padapter" optional="True" type="text"/>
+		<param label="--p-front: TEXT...     Sequence of an adapter ligated to the 5' end. The List[Str]           adapter and any preceding bases are trimmed. Partial matches at the 5' end are allowed. If a `^` character is prepended, the adapter is only found if it is at the beginning of the read.                  [optional]" name="pfront" optional="True" type="text"/>
+		<param label="--p-anywhere: TEXT...  Sequence of an adapter that may be ligated to the 5' List[Str]           or 3' end. Both types of matches as described under `adapter` and `front` are allowed. If the first base of the read is part of the match, the behavior is as with `front`, otherwise as with `adapter`. This option is mostly for rescuing failed library preparations - do not use if you know which end your adapter was ligated to.                                 [optional]" name="panywhere" optional="True" type="text"/>
+
+		<param label="--p-error-rate: PROPORTION Range(0, 1, inclusive_end=True) Maximum allowed error rate.             [default: 0.1]" name="perrorrate" optional="True" type="float" min="0" max="1" exclude_max="False" value="0.1"/>
+		<param label="--p-no-indels: Do not allow insertions or deletions of bases when matching adapters.                              [default: False]" name="pnoindels" selected="False" type="boolean"/>
+		<param label="--p-times: INTEGER     Remove multiple occurrences of an adapter if it is Range(1, None)      repeated, up to `times` times.            [default: 1]" name="ptimes" optional="True" type="integer" min="1" value="1"/>
+		<param label="--p-overlap: INTEGER   Require at least `overlap` bases of overlap between Range(1, None)      read and adapter for an adapter to be found. [default: 3]" name="poverlap" optional="True" type="integer" min="1" value="3"/>
+		<param label="--p-match-read-wildcards: --p-no-match-read-wildcards Interpret IUPAC wildcards (e.g., N) in reads. [default: False]" name="pmatchreadwildcards" selected="False" type="boolean"/>
+		<param label="--p-no-match-adapter-wildcards: Do not interpret IUPAC wildcards (e.g., N) in adapters. [default: False]" name="pnomatchadapterwildcards" selected="False" type="boolean"/>
+		<param label="--p-minimum-length: INTEGER Range(1, None)      Discard reads shorter than specified value. Note, the cutadapt default of 0 has been overridden, because that value produces empty sequence records. [default: 1]" name="pminimumlength" optional="True" type="integer" min="1" value="1"/>
+		<param label="--p-discard-untrimmed: --p-no-discard-untrimmed Discard reads in which no adapter was found. [default: False]" name="pdiscarduntrimmed" selected="False" type="boolean"/>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: trimmedsequences.qza" name="otrimmedsequences"/>
+	</outputs>
+	<help><![CDATA[
+Find and remove adapters in demultiplexed single-end sequences.
+###############################################################
+
+Search demultiplexed single-end sequences for adapters and remove them. The
+parameter descriptions in this method are adapted from the official
+cutadapt docs - please see those docs at https://cutadapt.readthedocs.io
+for complete details.
+
+Parameters
+----------
+demultiplexed_sequences : SampleData[SequencesWithQuality]
+    The single-end sequences to be trimmed.
+adapter : List[Str], optional
+    Sequence of an adapter ligated to the 3' end. The adapter and any
+    subsequent bases are trimmed. If a `$` is appended, the adapter is only
+    found if it is at the end of the read. If your sequence of interest is
+    "framed" by a 5' and a 3' adapter, use this parameter to define a
+    "linked" primer - see https://cutadapt.readthedocs.io for complete
+    details.
+front : List[Str], optional
+    Sequence of an adapter ligated to the 5' end. The adapter and any
+    preceding bases are trimmed. Partial matches at the 5' end are allowed.
+    If a `^` character is prepended, the adapter is only found if it is at
+    the beginning of the read.
+anywhere : List[Str], optional
+    Sequence of an adapter that may be ligated to the 5' or 3' end. Both
+    types of matches as described under `adapter` and `front` are allowed.
+    If the first base of the read is part of the match, the behavior is as
+    with `front`, otherwise as with `adapter`. This option is mostly for
+    rescuing failed library preparations - do not use if you know which end
+    your adapter was ligated to.
+error_rate : Float % Range(0, 1, inclusive_end=True), optional
+    Maximum allowed error rate.
+indels : Bool, optional
+    Allow insertions or deletions of bases when matching adapters.
+times : Int % Range(1, None), optional
+    Remove multiple occurrences of an adapter if it is repeated, up to
+    `times` times.
+overlap : Int % Range(1, None), optional
+    Require at least `overlap` bases of overlap between read and adapter
+    for an adapter to be found.
+match_read_wildcards : Bool, optional
+    Interpret IUPAC wildcards (e.g., N) in reads.
+match_adapter_wildcards : Bool, optional
+    Interpret IUPAC wildcards (e.g., N) in adapters.
+minimum_length : Int % Range(1, None), optional
+    Discard reads shorter than specified value. Note, the cutadapt default
+    of 0 has been overridden, because that value produces empty sequence
+    records.
+discard_untrimmed : Bool, optional
+    Discard reads in which no adapter was found.
+
+Returns
+-------
+trimmed_sequences : SampleData[SequencesWithQuality]
+    The resulting trimmed sequences.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_dada2_denoise-paired.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,164 @@
+<?xml version="1.0" ?>
+<tool id="qiime_dada2_denoise-paired" name="qiime dada2 denoise-paired" version="2019.4">
+	<description> - Denoise and dereplicate paired-end sequences</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime dada2 denoise-paired
+
+--i-demultiplexed-seqs=$idemultiplexedseqs
+--p-trunc-len-f="$ptrunclenf"
+--p-trunc-len-r="$ptrunclenr"
+#if $ptrimleftf:
+ --p-trim-left-f=$ptrimleftf
+#end if
+
+#if $ptrimleftr:
+ --p-trim-left-r=$ptrimleftr
+#end if
+
+#if $pmaxee:
+ --p-max-ee=$pmaxee
+#end if
+
+#if $ptruncq:
+ --p-trunc-q=$ptruncq
+#end if
+
+#if str($pchimeramethod) != 'None':
+ --p-chimera-method=$pchimeramethod
+#end if
+
+#if $pminfoldparentoverabundance:
+ --p-min-fold-parent-over-abundance=$pminfoldparentoverabundance
+#end if
+
+#set $pnthreads = '${GALAXY_SLOTS:-4}'
+
+#if str($pnthreads):
+ --p-n-threads="$pnthreads"
+#end if
+
+
+#if $pnreadslearn:
+ --p-n-reads-learn=$pnreadslearn
+#end if
+
+#if $pnohashedfeatureids:
+ --p-no-hashed-feature-ids
+#end if
+
+--o-table=otable
+--o-representative-sequences=orepresentativesequences
+--o-denoising-stats=odenoisingstats
+;
+cp otable.qza $otable;
+cp orepresentativesequences.qza $orepresentativesequences;
+cp odenoisingstats.qza $odenoisingstats
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-demultiplexed-seqs: ARTIFACT SampleData[PairedEndSequencesWithQuality] The paired-end demultiplexed sequences to be denoised.                                  [required]" name="idemultiplexedseqs" optional="False" type="data"/>
+		<param label="--p-trunc-len-f: INTEGER Position at which forward read sequences should be truncated due to decrease in quality. This truncates the 3' end of the of the input sequences, which will be the bases that were sequenced in the last cycles. Reads that are shorter than this value will be discarded. After this parameter is applied there must still be at least a 20 nucleotide overlap between the forward and reverse reads. If 0 is provided, no truncation or length filtering will be performed [required]" name="ptrunclenf" optional="False" value="" type="integer"/>
+		<param label="--p-trunc-len-r: INTEGER Position at which reverse read sequences should be truncated due to decrease in quality. This truncates the 3' end of the of the input sequences, which will be the bases that were sequenced in the last cycles. Reads that are shorter than this value will be discarded. After this parameter is applied there must still be at least a 20 nucleotide overlap between the forward and reverse reads. If 0 is provided, no truncation or length filtering will be performed [required]" name="ptrunclenr" optional="False" value="" type="integer"/>
+		<param label="--p-trim-left-f: INTEGER Position at which forward read sequences should be trimmed due to low quality. This trims the 5' end of the input sequences, which will be the bases that were sequenced in the first cycles.      [default: 0]" name="ptrimleftf" optional="True" type="integer" value="0"/>
+		<param label="--p-trim-left-r: INTEGER Position at which reverse read sequences should be trimmed due to low quality. This trims the 5' end of the input sequences, which will be the bases that were sequenced in the first cycles.      [default: 0]" name="ptrimleftr" optional="True" type="integer" value="0"/>
+		<param label="--p-max-ee: NUMBER      Reads with number of expected errors higher than this value will be discarded.          [default: 2.0]" name="pmaxee" optional="True" type="float" value="2.0"/>
+		<param label="--p-trunc-q: INTEGER    Reads are truncated at the first instance of a quality score less than or equal to this value. If the resulting read is then shorter than `trunc-len-f` or `trunc-len-r` (depending on the direction of the read) it is discarded.                   [default: 2]" name="ptruncq" optional="True" type="integer" value="2"/>
+		<param label="--p-chimera-method: " name="pchimeramethod" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="consensus">consensus</option>
+			<option value="pooled">pooled</option>
+			<option value="none">none</option>
+		</param>
+		<param label="--p-min-fold-parent-over-abundance: NUMBER The minimum abundance of potential parents of a sequence being tested as chimeric, expressed as a fold-change versus the abundance of the sequence being tested. Values should be greater than or equal to 1 (i.e. parents should be more abundant than the sequence being tested). This parameter has no effect if chimera-method is 'none'.           [default: 1.0]" name="pminfoldparentoverabundance" optional="True" type="float" value="1.0"/>
+		<param label="--p-n-reads-learn: INTEGER The number of reads to use when training the error model. Smaller numbers will result in a shorter run time but a less reliable error model. [default: 1000000]" name="pnreadslearn" optional="True" type="integer" value="1000000"/>
+		<param label="--p-no-hashed-feature-ids: If false, the feature ids in the resulting table will be presented as hashes of the sequences defining each feature. The hash will always be the same for the same sequence so this allows feature tables to be merged across runs of this method. You should only merge tables if the exact same parameters are used for each run.                         [default: False]" name="pnohashedfeatureids" selected="False" type="boolean"/>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: table.qza" name="otable"/>
+		<data format="qza" label="${tool.name} on ${on_string}: representativesequences.qza" name="orepresentativesequences"/>
+		<data format="qza" label="${tool.name} on ${on_string}: denoisingstats.qza" name="odenoisingstats"/>
+	</outputs>
+	<help><![CDATA[
+Denoise and dereplicate paired-end sequences
+############################################
+
+This method denoises paired-end sequences, dereplicates them, and filters
+chimeras.
+
+Parameters
+----------
+demultiplexed_seqs : SampleData[PairedEndSequencesWithQuality]
+    The paired-end demultiplexed sequences to be denoised.
+trunc_len_f : Int
+    Position at which forward read sequences should be truncated due to
+    decrease in quality. This truncates the 3' end of the of the input
+    sequences, which will be the bases that were sequenced in the last
+    cycles. Reads that are shorter than this value will be discarded. After
+    this parameter is applied there must still be at least a 20 nucleotide
+    overlap between the forward and reverse reads. If 0 is provided, no
+    truncation or length filtering will be performed
+trunc_len_r : Int
+    Position at which reverse read sequences should be truncated due to
+    decrease in quality. This truncates the 3' end of the of the input
+    sequences, which will be the bases that were sequenced in the last
+    cycles. Reads that are shorter than this value will be discarded. After
+    this parameter is applied there must still be at least a 20 nucleotide
+    overlap between the forward and reverse reads. If 0 is provided, no
+    truncation or length filtering will be performed
+trim_left_f : Int, optional
+    Position at which forward read sequences should be trimmed due to low
+    quality. This trims the 5' end of the input sequences, which will be
+    the bases that were sequenced in the first cycles.
+trim_left_r : Int, optional
+    Position at which reverse read sequences should be trimmed due to low
+    quality. This trims the 5' end of the input sequences, which will be
+    the bases that were sequenced in the first cycles.
+max_ee : Float, optional
+    Reads with number of expected errors higher than this value will be
+    discarded.
+trunc_q : Int, optional
+    Reads are truncated at the first instance of a quality score less than
+    or equal to this value. If the resulting read is then shorter than
+    `trunc_len_f` or `trunc_len_r` (depending on the direction of the read)
+    it is discarded.
+chimera_method : Str % Choices('consensus', 'pooled', 'none'), optional
+    The method used to remove chimeras. "none": No chimera removal is
+    performed. "pooled": All reads are pooled prior to chimera detection.
+    "consensus": Chimeras are detected in samples individually, and
+    sequences found chimeric in a sufficient fraction of samples are
+    removed.
+min_fold_parent_over_abundance : Float, optional
+    The minimum abundance of potential parents of a sequence being tested
+    as chimeric, expressed as a fold-change versus the abundance of the
+    sequence being tested. Values should be greater than or equal to 1
+    (i.e. parents should be more abundant than the sequence being tested).
+    This parameter has no effect if chimera_method is "none".
+    provided, all available cores will be used.
+n_reads_learn : Int, optional
+    The number of reads to use when training the error model. Smaller
+    numbers will result in a shorter run time but a less reliable error
+    model.
+hashed_feature_ids : Bool, optional
+    If true, the feature ids in the resulting table will be presented as
+    hashes of the sequences defining each feature. The hash will always be
+    the same for the same sequence so this allows feature tables to be
+    merged across runs of this method. You should only merge tables if the
+    exact same parameters are used for each run.
+
+Returns
+-------
+table : FeatureTable[Frequency]
+    The resulting feature table.
+representative_sequences : FeatureData[Sequence]
+    The resulting feature sequences. Each feature in the feature table will
+    be represented by exactly one sequence, and these sequences will be the
+    joined paired-end sequences.
+denoising_stats : SampleData[DADA2Stats]
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_dada2_denoise-pyro.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,149 @@
+<?xml version="1.0" ?>
+<tool id="qiime_dada2_denoise-pyro" name="qiime dada2 denoise-pyro" version="2019.4">
+	<description> - Denoise and dereplicate single-end pyrosequences</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime dada2 denoise-pyro
+
+--i-demultiplexed-seqs=$idemultiplexedseqs
+--p-trunc-len="$ptrunclen"
+
+#if $ptrimleft:
+ --p-trim-left=$ptrimleft
+#end if
+
+#if $pmaxee:
+ --p-max-ee=$pmaxee
+#end if
+
+#if $ptruncq:
+ --p-trunc-q=$ptruncq
+#end if
+
+#if $pmaxlen:
+ --p-max-len=$pmaxlen
+#end if
+
+#if str($pchimeramethod) != 'None':
+ --p-chimera-method=$pchimeramethod
+#end if
+
+#if $pminfoldparentoverabundance:
+ --p-min-fold-parent-over-abundance=$pminfoldparentoverabundance
+#end if
+
+#set $pnthreads = '${GALAXY_SLOTS:-4}'
+#if str($pnthreads):
+ --p-n-threads="$pnthreads"
+#end if
+
+
+#if $pnreadslearn:
+ --p-n-reads-learn=$pnreadslearn
+#end if
+
+#if $pnohashedfeatureids:
+ --p-no-hashed-feature-ids
+#end if
+
+--o-table=otable
+--o-representative-sequences=orepresentativesequences
+--o-denoising-stats=odenoisingstats
+;
+cp otable.qza $otable;
+cp orepresentativesequences.qza $orepresentativesequences;
+cp odenoisingstats.qza $odenoisingstats 
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-demultiplexed-seqs: ARTIFACT SampleData[SequencesWithQuality] The single-end demultiplexed pyrosequencing sequences (e.g. 454, IonTorrent) to be denoised. [required]" name="idemultiplexedseqs" optional="False" type="data"/>
+		<param label="--p-trunc-len: INTEGER  Position at which sequences should be truncated due to decrease in quality. This truncates the 3' end of the of the input sequences, which will be the bases that were sequenced in the last cycles. Reads that are shorter than this value will be discarded. If 0 is prov#ided, no truncation or length filtering will be performed                               [required]" name="ptrunclen" optional="False" value="" type="integer"/>
+		<param label="--p-trim-left: INTEGER  Position at which sequences should be trimmed due to low quality. This trims the 5' end of the of the input sequences, which will be the bases that were sequenced in the first cycles.           [default: 0]" name="ptrimleft" optional="True" type="integer" value="0"/>
+		<param label="--p-max-ee: NUMBER      Reads with number of expected errors higher than this value will be discarded.          [default: 2.0]" name="pmaxee" optional="True" type="float" value="2.0"/>
+		<param label="--p-trunc-q: INTEGER    Reads are truncated at the first instance of a quality score less than or equal to this value. If the resulting read is then shorter than `trunc-len`, it is discarded.                         [default: 2]" name="ptruncq" optional="True" type="integer" value="2"/>
+		<param label="--p-max-len: INTEGER    Remove reads prior to trimming or truncation which are longer than this value. If 0 is provided no reads will be removed based on length.         [default: 0]" name="pmaxlen" optional="True" type="integer" value="0"/>
+		<param label="--p-chimera-method: The method used to remove chimeras. 'none': No chimera removal is performed. 'pooled': All reads are pooled prior to chimera detection. 'consensus': Chimeras are detected in samples individually, and sequences found chimeric in a sufficient fraction of samples are removed." name="pchimeramethod" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="consensus">consensus</option>
+			<option value="pooled">pooled</option>
+			<option value="none">none</option>
+		</param>
+		<param label="--p-min-fold-parent-over-abundance: NUMBER The minimum abundance of potential parents of a sequence being tested as chimeric, expressed as a fold-change versus the abundance of the sequence being tested. Values should be greater than or equal to 1 (i.e. parents should be more abundant than the sequence being tested). This parameter has no effect if chimera-method is 'none'.           [default: 1.0]" name="pminfoldparentoverabundance" optional="True" type="float" value="1.0"/>
+		<param label="--p-n-reads-learn: INTEGER The number of reads to use when training the error model. Smaller numbers will result in a shorter run time but a less reliable error model. [default: 250000]" name="pnreadslearn" optional="True" type="integer" value="250000"/>
+		<param label="--p-no-hashed-feature-ids: If false, the feature ids in the resulting table will be presented as hashes of the sequences defining each feature. The hash will always be the same for the same sequence so this allows feature tables to be merged across runs of this method. You should only merge tables if the exact same parameters are used for each run.                         [default: False]" name="pnohashedfeatureids" selected="False" type="boolean"/>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: table.qza" name="otable"/>
+		<data format="qza" label="${tool.name} on ${on_string}: representativesequences.qza" name="orepresentativesequences"/>
+		<data format="qza" label="${tool.name} on ${on_string}: denoisingstats.qza" name="odenoisingstats"/>
+	</outputs>
+	<help><![CDATA[
+Denoise and dereplicate single-end pyrosequences
+################################################
+
+This method denoises single-end pyrosequencing sequences, dereplicates
+them, and filters chimeras.
+
+Parameters
+----------
+demultiplexed_seqs : SampleData[SequencesWithQuality]
+    The single-end demultiplexed pyrosequencing sequences (e.g. 454,
+    IonTorrent) to be denoised.
+trunc_len : Int
+    Position at which sequences should be truncated due to decrease in
+    quality. This truncates the 3' end of the of the input sequences, which
+    will be the bases that were sequenced in the last cycles. Reads that
+    are shorter than this value will be discarded. If 0 is provided, no
+    truncation or length filtering will be performed
+trim_left : Int, optional
+    Position at which sequences should be trimmed due to low quality. This
+    trims the 5' end of the of the input sequences, which will be the bases
+    that were sequenced in the first cycles.
+max_ee : Float, optional
+    Reads with number of expected errors higher than this value will be
+    discarded.
+trunc_q : Int, optional
+    Reads are truncated at the first instance of a quality score less than
+    or equal to this value. If the resulting read is then shorter than
+    `trunc_len`, it is discarded.
+max_len : Int, optional
+    Remove reads prior to trimming or truncation which are longer than this
+    value. If 0 is provided no reads will be removed based on length.
+chimera_method : Str % Choices('consensus', 'pooled', 'none'), optional
+    The method used to remove chimeras. "none": No chimera removal is
+    performed. "pooled": All reads are pooled prior to chimera detection.
+    "consensus": Chimeras are detected in samples individually, and
+    sequences found chimeric in a sufficient fraction of samples are
+    removed.
+min_fold_parent_over_abundance : Float, optional
+    The minimum abundance of potential parents of a sequence being tested
+    as chimeric, expressed as a fold-change versus the abundance of the
+    sequence being tested. Values should be greater than or equal to 1
+    (i.e. parents should be more abundant than the sequence being tested).
+    This parameter has no effect if chimera_method is "none".
+n_reads_learn : Int, optional
+    The number of reads to use when training the error model. Smaller
+    numbers will result in a shorter run time but a less reliable error
+    model.
+hashed_feature_ids : Bool, optional
+    If true, the feature ids in the resulting table will be presented as
+    hashes of the sequences defining each feature. The hash will always be
+    the same for the same sequence so this allows feature tables to be
+    merged across runs of this method. You should only merge tables if the
+    exact same parameters are used for each run.
+
+Returns
+-------
+table : FeatureTable[Frequency]
+    The resulting feature table.
+representative_sequences : FeatureData[Sequence]
+    The resulting feature sequences. Each feature in the feature table will
+    be represented by exactly one sequence.
+denoising_stats : SampleData[DADA2Stats]
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_dada2_denoise-single.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,140 @@
+<?xml version="1.0" ?>
+<tool id="qiime_dada2_denoise-single" name="qiime dada2 denoise-single" version="2019.4">
+	<description> - Denoise and dereplicate single-end sequences</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime dada2 denoise-single
+
+--i-demultiplexed-seqs=$idemultiplexedseqs
+--p-trunc-len="$ptrunclen"
+
+#if $ptrimleft:
+ --p-trim-left=$ptrimleft
+#end if
+
+#if $pmaxee:
+ --p-max-ee=$pmaxee
+#end if
+
+#if $ptruncq:
+ --p-trunc-q=$ptruncq
+#end if
+
+#if str($pchimeramethod) != 'None':
+ --p-chimera-method=$pchimeramethod
+#end if
+
+#if $pminfoldparentoverabundance:
+ --p-min-fold-parent-over-abundance=$pminfoldparentoverabundance
+#end if
+
+#set $pnthreads = '${GALAXY_SLOTS:-4}'
+#if str($pnthreads):
+ --p-n-threads="$pnthreads"
+#end if
+
+
+#if $pnreadslearn:
+ --p-n-reads-learn=$pnreadslearn
+#end if
+
+#if $pnohashedfeatureids:
+ --p-no-hashed-feature-ids
+#end if
+
+--o-table=otable
+--o-representative-sequences=orepresentativesequences
+--o-denoising-stats=odenoisingstats
+;
+cp otable.qza $otable;
+cp orepresentativesequences.qza $orepresentativesequences;
+cp odenoisingstats.qza $odenoisingstats
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-demultiplexed-seqs: ARTIFACT SampleData[SequencesWithQuality | PairedEndSequencesWithQuality] The single-end demultiplexed sequences to be denoised.                                  [required]" name="idemultiplexedseqs" optional="False" type="data"/>
+		<param label="--p-trunc-len: INTEGER  Position at which sequences should be truncated due to decrease in quality. This truncates the 3' end of the of the input sequences, which will be the bases that were sequenced in the last cycles. Reads that are shorter than this value will be discarded. If 0 is provided, no truncation or length filtering will be performed                               [required]" name="ptrunclen" optional="False" value="" type="integer"/>
+		<param label="--p-trim-left: INTEGER  Position at which sequences should be trimmed due to low quality. This trims the 5' end of the of the input sequences, which will be the bases that were sequenced in the first cycles.           [default: 0]" name="ptrimleft" optional="True" type="integer" value="0"/>
+		<param label="--p-max-ee: NUMBER      Reads with number of expected errors higher than this value will be discarded.          [default: 2.0]" name="pmaxee" optional="True" type="float" value="2.0"/>
+		<param label="--p-trunc-q: INTEGER    Reads are truncated at the first instance of a quality score less than or equal to this value. If the resulting read is then shorter than `trunc-len`, it is discarded.                         [default: 2]" name="ptruncq" optional="True" type="integer" value="2"/>
+		<param label="--p-chimera-method: " name="pchimeramethod" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="consensus">consensus</option>
+			<option value="pooled">pooled</option>
+			<option value="none">none</option>
+		</param>
+		<param label="--p-min-fold-parent-over-abundance: NUMBER The minimum abundance of potential parents of a sequence being tested as chimeric, expressed as a fold-change versus the abundance of the sequence being tested. Values should be greater than or equal to 1 (i.e. parents should be more abundant than the sequence being tested). This parameter has no effect if chimera-method is 'none'.           [default: 1.0]" name="pminfoldparentoverabundance" optional="True" type="float" value="1.0"/>
+		<param label="--p-n-reads-learn: INTEGER The number of reads to use when training the error model. Smaller numbers will result in a shorter run time but a less reliable error model. [default: 1000000]" name="pnreadslearn" optional="True" type="integer" value="1000000"/>
+		<param label="--p-no-hashed-feature-ids: If false, the feature ids in the resulting table will be presented as hashes of the sequences defining each feature. The hash will always be the same for the same sequence so this allows feature tables to be merged across runs of this method. You should only merge tables if the exact same parameters are used for each run.                         [default: Fales]" name="pnohashedfeatureids" selected="False" type="boolean"/>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: table.qza" name="otable"/>
+		<data format="qza" label="${tool.name} on ${on_string}: representativesequences.qza" name="orepresentativesequences"/>
+		<data format="qza" label="${tool.name} on ${on_string}: denoisingstats.qza" name="odenoisingstats"/>
+	</outputs>
+	<help><![CDATA[
+Denoise and dereplicate single-end sequences
+############################################
+
+This method denoises single-end sequences, dereplicates them, and filters
+chimeras.
+
+Parameters
+----------
+demultiplexed_seqs : SampleData[SequencesWithQuality | PairedEndSequencesWithQuality]
+    The single-end demultiplexed sequences to be denoised.
+trunc_len : Int
+    Position at which sequences should be truncated due to decrease in
+    quality. This truncates the 3' end of the of the input sequences, which
+    will be the bases that were sequenced in the last cycles. Reads that
+    are shorter than this value will be discarded. If 0 is provided, no
+    truncation or length filtering will be performed
+trim_left : Int, optional
+    Position at which sequences should be trimmed due to low quality. This
+    trims the 5' end of the of the input sequences, which will be the bases
+    that were sequenced in the first cycles.
+max_ee : Float, optional
+    Reads with number of expected errors higher than this value will be
+    discarded.
+trunc_q : Int, optional
+    Reads are truncated at the first instance of a quality score less than
+    or equal to this value. If the resulting read is then shorter than
+    `trunc_len`, it is discarded.
+chimera_method : Str % Choices('consensus', 'pooled', 'none'), optional
+    The method used to remove chimeras. "none": No chimera removal is
+    performed. "pooled": All reads are pooled prior to chimera detection.
+    "consensus": Chimeras are detected in samples individually, and
+    sequences found chimeric in a sufficient fraction of samples are
+    removed.
+min_fold_parent_over_abundance : Float, optional
+    The minimum abundance of potential parents of a sequence being tested
+    as chimeric, expressed as a fold-change versus the abundance of the
+    sequence being tested. Values should be greater than or equal to 1
+    (i.e. parents should be more abundant than the sequence being tested).
+    This parameter has no effect if chimera_method is "none".
+n_reads_learn : Int, optional
+    The number of reads to use when training the error model. Smaller
+    numbers will result in a shorter run time but a less reliable error
+    model.
+hashed_feature_ids : Bool, optional
+    If true, the feature ids in the resulting table will be presented as
+    hashes of the sequences defining each feature. The hash will always be
+    the same for the same sequence so this allows feature tables to be
+    merged across runs of this method. You should only merge tables if the
+    exact same parameters are used for each run.
+
+Returns
+-------
+table : FeatureTable[Frequency]
+    The resulting feature table.
+representative_sequences : FeatureData[Sequence]
+    The resulting feature sequences. Each feature in the feature table will
+    be represented by exactly one sequence.
+denoising_stats : SampleData[DADA2Stats]
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_deblur_denoise-16S.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,128 @@
+<?xml version="1.0" ?>
+<tool id="qiime_deblur_denoise-16S" name="qiime deblur denoise-16S" version="2019.4">
+	<description> - Deblur sequences using a 16S positive filter.</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime deblur denoise-16S
+
+--i-demultiplexed-seqs=$idemultiplexedseqs
+--p-trim-length="$ptrimlength"
+
+#if $plefttrimlen:
+ --p-left-trim-len=$plefttrimlen
+#end if
+
+#if $psamplestats:
+ --p-sample-stats
+#end if
+
+#if $pmeanerror:
+ --p-mean-error=$pmeanerror
+#end if
+
+#if $pindelprob:
+ --p-indel-prob=$pindelprob
+#end if
+
+#if $pindelmax:
+ --p-indel-max=$pindelmax
+#end if
+
+#if $pminreads:
+ --p-min-reads=$pminreads
+#end if
+
+#if $pminsize:
+ --p-min-size=$pminsize
+#end if
+
+#set $pjobstostart = '${GALAXY_SLOTS:-4}'
+
+#if str($pjobstostart):
+ --p-jobs-to-start="$pjobstostart"
+#end if
+
+
+#if $pnohashedfeatureids:
+ --p-no-hashed-feature-ids
+#end if
+
+--o-table=otable
+--o-representative-sequences=orepresentativesequences
+--o-stats=ostats
+;
+cp otable.qza $otable;
+cp orepresentativesequences.qza $orepresentativesequences;
+cp ostats.qza $ostats
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-demultiplexed-seqs: ARTIFACT SampleData[SequencesWithQuality | PairedEndSequencesWithQuality | JoinedSequencesWithQuality] The demultiplexed sequences to be denoised. [required]" name="idemultiplexedseqs" optional="False" type="data"/>
+		<param label="--p-trim-length: INTEGER Sequence trim length, specify -1 to disable trimming.                                  [required]" name="ptrimlength" optional="False" value="" type="integer"/>
+		<param label="--p-left-trim-len: INTEGER Range(0, None)       Sequence trimming from the 5' end. A value of 0 will disable this trim.                       [default: 0]" name="plefttrimlen" optional="True" type="integer" min="0" value="0"/>
+		<param label="--p-sample-stats: --p-no-sample-stats If true, gather stats per sample.    [default: False]" name="psamplestats" selected="False" type="boolean"/>
+		<param label="--p-mean-error: NUMBER  The mean per nucleotide error, used for original sequence estimate.                   [default: 0.005]" name="pmeanerror" optional="True" type="float" value="0.005"/>
+		<param label="--p-indel-prob: NUMBER  Insertion/deletion (indel) probability (same for N indels).                              [default: 0.01]" name="pindelprob" optional="True" type="float" value="0.01"/>
+		<param label="--p-indel-max: INTEGER  Maximum number of insertion/deletions.   [default: 3]" name="pindelmax" optional="True" type="integer" value="3"/>
+		<param label="--p-min-reads: INTEGER  Retain only features appearing at least min-reads times across all samples in the resulting feature table.                                  [default: 10]" name="pminreads" optional="True" type="integer" value="10"/>
+		<param label="--p-min-size: INTEGER   In each sample, discard all features with an abundance less than min-size.            [default: 2]" name="pminsize" optional="True" type="integer" value="2"/>
+		<param label="--p-no-hashed-feature-ids: If false, hash the feature IDs.        [default: False]" name="pnohashedfeatureids" selected="False" type="boolean"/>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: table.qza" name="otable"/>
+		<data format="qza" label="${tool.name} on ${on_string}: representativesequences.qza" name="orepresentativesequences"/>
+		<data format="qza" label="${tool.name} on ${on_string}: stats.qza" name="ostats"/>
+	</outputs>
+	<help><![CDATA[
+Deblur sequences using a 16S positive filter.
+#############################################
+
+Perform sequence quality control for Illumina data using the Deblur
+workflow with a 16S reference as a positive filter. Only forward reads are
+supported at this time. The specific reference used is the 88% OTUs from
+Greengenes 13_8. This mode of operation should only be used when data were
+generated from a 16S amplicon protocol on an Illumina platform. The
+reference is only used to assess whether each sequence is likely to be 16S
+by a local alignment using SortMeRNA with a permissive e-value; the
+reference is not used to characterize the sequences.
+
+Parameters
+----------
+demultiplexed_seqs : SampleData[SequencesWithQuality | PairedEndSequencesWithQuality | JoinedSequencesWithQuality]
+    The demultiplexed sequences to be denoised.
+trim_length : Int
+    Sequence trim length, specify -1 to disable trimming.
+left_trim_len : Int % Range(0, None), optional
+    Sequence trimming from the 5' end. A value of 0 will disable this trim.
+sample_stats : Bool, optional
+    If true, gather stats per sample.
+mean_error : Float, optional
+    The mean per nucleotide error, used for original sequence estimate.
+indel_prob : Float, optional
+    Insertion/deletion (indel) probability (same for N indels).
+indel_max : Int, optional
+    Maximum number of insertion/deletions.
+min_reads : Int, optional
+    Retain only features appearing at least min_reads times across all
+    samples in the resulting feature table.
+min_size : Int, optional
+    In each sample, discard all features with an abundance less than
+    min_size.
+hashed_feature_ids : Bool, optional
+    If true, hash the feature IDs.
+
+Returns
+-------
+table : FeatureTable[Frequency]
+    The resulting denoised feature table.
+representative_sequences : FeatureData[Sequence]
+    The resulting feature sequences.
+stats : DeblurStats
+    Per-sample stats if requested.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_deblur_denoise-other.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,133 @@
+<?xml version="1.0" ?>
+<tool id="qiime_deblur_denoise-other" name="qiime deblur denoise-other" version="2019.4">
+	<description> - Deblur sequences using a user-specified positive filter.</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime deblur denoise-other
+
+--i-demultiplexed-seqs=$idemultiplexedseqs
+--i-reference-seqs=$ireferenceseqs
+--p-trim-length="$ptrimlength"
+
+#if $plefttrimlen:
+ --p-left-trim-len=$plefttrimlen
+#end if
+
+#if $psamplestats:
+ --p-sample-stats
+#end if
+
+#if $pmeanerror:
+ --p-mean-error=$pmeanerror
+#end if
+
+#if $pindelprob:
+ --p-indel-prob=$pindelprob
+#end if
+
+#if $pindelmax:
+ --p-indel-max=$pindelmax
+#end if
+
+#if $pminreads:
+ --p-min-reads=$pminreads
+#end if
+
+#if $pminsize:
+ --p-min-size=$pminsize
+#end if
+
+#set $pjobstostart = '${GALAXY_SLOTS:-4}'
+
+#if str($pjobstostart):
+ --p-jobs-to-start="$pjobstostart"
+#end if
+
+
+#if $pnohashedfeatureids:
+ --p-no-hashed-feature-ids
+#end if
+
+--o-table=otable
+--o-representative-sequences=orepresentativesequences
+--o-stats=ostats
+;
+cp otable.qza $otable;
+cp orepresentativesequences.qza $orepresentativesequences;
+cp ostats.qza $ostats
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-demultiplexed-seqs: ARTIFACT SampleData[SequencesWithQuality | PairedEndSequencesWithQuality | JoinedSequencesWithQuality] The demultiplexed sequences to be denoised. [required]" name="idemultiplexedseqs" optional="False" type="data"/>
+		<param format="qza,no_unzip.zip" label="--i-reference-seqs: ARTIFACT FeatureData[Sequence] Positive filtering database. Keep all sequences aligning to these sequences.               [required]" name="ireferenceseqs" optional="False" type="data"/>
+		<param label="--p-trim-length: INTEGER Sequence trim length, specify -1 to disable trimming.                                  [required]" name="ptrimlength" optional="False" value="" type="integer"/>
+		<param label="--p-left-trim-len: INTEGER Range(0, None)       Sequence trimming from the 5' end. A value of 0 will disable this trim.                       [default: 0]" name="plefttrimlen" optional="True" type="integer" min="0" value="0"/>
+		<param label="--p-sample-stats: --p-no-sample-stats If true, gather stats per sample.    [default: False]" name="psamplestats" selected="False" type="boolean"/>
+		<param label="--p-mean-error: NUMBER  The mean per nucleotide error, used for original sequence estimate.                   [default: 0.005]" name="pmeanerror" optional="True" type="float" value="0.005"/>
+		<param label="--p-indel-prob: NUMBER  Insertion/deletion (indel) probability (same for N indels).                              [default: 0.01]" name="pindelprob" optional="True" type="float" value="0.01"/>
+		<param label="--p-indel-max: INTEGER  Maximum number of insertion/deletions.   [default: 3]" name="pindelmax" optional="True" type="integer" value="3"/>
+		<param label="--p-min-reads: INTEGER  Retain only features appearing at least min-reads times across all samples in the resulting feature table.                                  [default: 10]" name="pminreads" optional="True" type="integer" value="10"/>
+		<param label="--p-min-size: INTEGER   In each sample, discard all features with an abundance less than min-size.            [default: 2]" name="pminsize" optional="True" type="integer" value="2"/>
+		<param label="--p-no-hashed-feature-ids: If false, hash the feature IDs.        [default: False]" name="pnohashedfeatureids" selected="False" type="boolean"/>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: table.qza" name="otable"/>
+		<data format="qza" label="${tool.name} on ${on_string}: representativesequences.qza" name="orepresentativesequences"/>
+		<data format="qza" label="${tool.name} on ${on_string}: stats.qza" name="ostats"/>
+	</outputs>
+	<help><![CDATA[
+Deblur sequences using a user-specified positive filter.
+########################################################
+
+Perform sequence quality control for Illumina data using the Deblur
+workflow, including positive alignment-based filtering. Only forward reads
+are supported at this time. This mode of execution is particularly useful
+when operating on non-16S data. For example, to apply Deblur to 18S data,
+you would want to specify a reference composed of 18S sequences in order to
+filter out sequences which do not appear to be 18S. The assessment is
+performed by local alignment using SortMeRNA with a permissive e-value
+threshold.
+
+Parameters
+----------
+demultiplexed_seqs : SampleData[SequencesWithQuality | PairedEndSequencesWithQuality | JoinedSequencesWithQuality]
+    The demultiplexed sequences to be denoised.
+reference_seqs : FeatureData[Sequence]
+    Positive filtering database. Keep all sequences aligning to these
+    sequences.
+trim_length : Int
+    Sequence trim length, specify -1 to disable trimming.
+left_trim_len : Int % Range(0, None), optional
+    Sequence trimming from the 5' end. A value of 0 will disable this trim.
+sample_stats : Bool, optional
+    If true, gather stats per sample.
+mean_error : Float, optional
+    The mean per nucleotide error, used for original sequence estimate.
+indel_prob : Float, optional
+    Insertion/deletion (indel) probability (same for N indels).
+indel_max : Int, optional
+    Maximum number of insertion/deletions.
+min_reads : Int, optional
+    Retain only features appearing at least min_reads times across all
+    samples in the resulting feature table.
+min_size : Int, optional
+    In each sample, discard all features with an abundance less than
+    min_size.
+hashed_feature_ids : Bool, optional
+    If true, hash the feature IDs.
+
+Returns
+-------
+table : FeatureTable[Frequency]
+    The resulting denoised feature table.
+representative_sequences : FeatureData[Sequence]
+    The resulting feature sequences.
+stats : DeblurStats
+    Per-sample stats if requested.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_deblur_visualize-stats.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,43 @@
+<?xml version="1.0" ?>
+<tool id="qiime_deblur_visualize-stats" name="qiime deblur visualize-stats" version="2019.4">
+	<description> - Visualize Deblur stats per sample.</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime deblur visualize-stats
+
+--i-deblur-stats=$ideblurstats
+
+--o-visualization=ovisualization
+;
+qiime tools export --input-path ovisualization.qzv --output-path out   && mkdir -p '$ovisualization.files_path'
+&& cp -r out/* '$ovisualization.files_path'
+&& mv '$ovisualization.files_path/index.html' '$ovisualization';
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-deblur-stats: ARTIFACT DeblurStats        Summary statistics of the Deblur process.    [required]" name="ideblurstats" optional="False" type="data"/>
+	</inputs>
+	<outputs>
+		<data format="html" label="${tool.name} on ${on_string}: visualization.qzv" name="ovisualization"/>
+	</outputs>
+	<help><![CDATA[
+Visualize Deblur stats per sample.
+##################################
+
+Display Deblur statistics per sample
+
+Parameters
+----------
+deblur_stats : DeblurStats
+    Summary statistics of the Deblur process.
+
+Returns
+-------
+visualization : Visualization
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_demux_emp-paired.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,92 @@
+<?xml version="1.0" ?>
+<tool id="qiime_demux_emp-paired" name="qiime demux emp-paired" version="2019.4">
+	<description> - Demultiplex paired-end sequence data generated with the EMP protocol.</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime demux emp-paired
+
+--i-seqs=$iseqs
+--m-barcodes-column="$mbarcodescolumn"
+
+
+#def list_dict_to_string(list_dict):
+#set $file_list = list_dict[0]['additional_input'].__getattr__('file_name')
+#for d in list_dict[1:]:
+	#set $file_list = $file_list + ',' + d['additional_input'].__getattr__('file_name')
+#end for
+#return $file_list
+#end def
+
+--m-barcodes-file=$list_dict_to_string($input_files_mbarcodesfile)
+
+
+#if $pnogolayerrorcorrection:
+ --p-no-golay-error-correction
+#end if
+
+#if $prevcompbarcodes:
+ --p-rev-comp-barcodes
+#end if
+
+#if $prevcompmappingbarcodes:
+ --p-rev-comp-mapping-barcodes
+#end if
+
+--o-per-sample-sequences=opersamplesequences
+--o-error-correction-details=oerrorcorrectiondetails
+;
+cp opersamplesequences.qza $opersamplesequences;
+cp oerrorcorrectiondetails.qza $oerrorcorrectiondetails
+	]]></command>
+	<inputs>
+		<repeat name="input_files_mbarcodesfile" optional="False" title="--m-barcodes-file">
+			<param label="--m-barcodes-file: Metadata file or artifact viewable as metadata. This option may be supplied multiple times to merge metadata. [required]" name="additional_input" type="data" format="tabular,qza,no_unzip.zip" />
+		</repeat>
+		<param format="qza,no_unzip.zip" label="--i-seqs: ARTIFACT EMPPairedEndSequences The paired-end sequences to be demultiplexed. [required]" name="iseqs" optional="False" type="data"/>
+		<param label="--m-barcodes-column: COLUMN  MetadataColumn[Categorical] The sample metadata column containing the per-sample barcodes.                                    [required]" name="mbarcodescolumn" optional="False" type="text"/>
+		<param label="--p-no-golay-error-correction: Do not perform 12nt Golay error correction on the barcode reads.                                  [default: False]" name="pnogolayerrorcorrection" selected="False" type="boolean"/>
+		<param label="--p-rev-comp-barcodes: --p-no-rev-comp-barcodes If provided, the barcode sequence reads will be reverse complemented prior to demultiplexing. [default: False]" name="prevcompbarcodes" selected="False" type="boolean"/>
+		<param label="--p-rev-comp-mapping-barcodes: --p-no-rev-comp-mapping-barcodes If provided, the barcode sequences in the sample metadata will be reverse complemented prior to demultiplexing.                        [default: False]" name="prevcompmappingbarcodes" selected="False" type="boolean"/>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: persamplesequences.qza" name="opersamplesequences"/>
+		<data format="qza" label="${tool.name} on ${on_string}: errorcorrectiondetails.qza" name="oerrorcorrectiondetails"/>
+	</outputs>
+	<help><![CDATA[
+Demultiplex paired-end sequence data generated with the EMP protocol.
+#####################################################################
+
+Demultiplex paired-end sequence data (i.e., map barcode reads to sample
+ids) for data generated with the Earth Microbiome Project (EMP) amplicon
+sequencing protocol. Details about this protocol can be found at
+http://www.earthmicrobiome.org/protocols-and-standards/
+
+Parameters
+----------
+seqs : EMPPairedEndSequences
+    The paired-end sequences to be demultiplexed.
+barcodes : MetadataColumn[Categorical]
+    The sample metadata column containing the per-sample barcodes.
+golay_error_correction : Bool, optional
+    Perform 12nt Golay error correction on the barcode reads.
+rev_comp_barcodes : Bool, optional
+    If provided, the barcode sequence reads will be reverse complemented
+    prior to demultiplexing.
+rev_comp_mapping_barcodes : Bool, optional
+    If provided, the barcode sequences in the sample metadata will be
+    reverse complemented prior to demultiplexing.
+
+Returns
+-------
+per_sample_sequences : SampleData[PairedEndSequencesWithQuality]
+    The resulting demultiplexed sequences.
+error_correction_details : ErrorCorrectionDetails
+    Detail about the barcode error corrections.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_demux_emp-single.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,93 @@
+<?xml version="1.0" ?>
+<tool id="qiime_demux_emp-single" name="qiime demux emp-single" version="2019.4">
+	<description> - Demultiplex sequence data generated with the EMP protocol.</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime demux emp-single
+
+--i-seqs=$iseqs
+--m-barcodes-column="$mbarcodescolumn"
+
+
+#def list_dict_to_string(list_dict):
+#set $file_list = list_dict[0]['additional_input'].__getattr__('file_name')
+#for d in list_dict[1:]:
+	#set $file_list = $file_list + ',' + d['additional_input'].__getattr__('file_name')
+#end for
+#return $file_list
+#end def
+
+--m-barcodes-file=$list_dict_to_string($input_files_mbarcodesfile)
+
+
+#if $pnogolayerrorcorrection:
+ --p-no-golay-error-correction
+#end if
+
+#if $prevcompbarcodes:
+ --p-rev-comp-barcodes
+#end if
+
+#if $prevcompmappingbarcodes:
+ --p-rev-comp-mapping-barcodes
+#end if
+
+--o-per-sample-sequences=opersamplesequences
+--o-error-correction-details=oerrorcorrectiondetails
+;
+cp opersamplesequences.qza $opersamplesequences;
+cp oerrorcorrectiondetails.qza $oerrorcorrectiondetails
+	]]></command>
+	<inputs>
+		<repeat name="input_files_mbarcodesfile" optional="False" title="--m-barcodes-file">
+			<param label="--m-barcodes-file: Metadata file or artifact viewable as metadata. This option may be supplied multiple times to merge metadata. [required]" name="additional_input" type="data" format="tabular,qza,no_unzip.zip"/>
+		</repeat>
+
+		<param format="qza,no_unzip.zip" label="--i-seqs: ARTIFACT RawSequences | EMPSingleEndSequences | EMPPairedEndSequences The single-end sequences to be demultiplexed. [required]" name="iseqs" optional="False" type="data"/>
+		<param label="--m-barcodes-column: COLUMN  MetadataColumn[Categorical] The sample metadata column containing the per-sample barcodes.                                    [required]" name="mbarcodescolumn" optional="False" type="text"/>
+		<param label="--p-no-golay-error-correction: Do not perform 12nt Golay error correction on the barcode reads.                                  [default: False]" name="pnogolayerrorcorrection" selected="False" type="boolean"/>
+		<param label="--p-rev-comp-barcodes: --p-no-rev-comp-barcodes If provided, the barcode sequence reads will be reverse complemented prior to demultiplexing. [default: False]" name="prevcompbarcodes" selected="False" type="boolean"/>
+		<param label="--p-rev-comp-mapping-barcodes: --p-no-rev-comp-mapping-barcodes If provided, the barcode sequences in the sample metadata will be reverse complemented prior to demultiplexing.                        [default: False]" name="prevcompmappingbarcodes" selected="False" type="boolean"/>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: persamplesequences.qza" name="opersamplesequences"/>
+		<data format="qza" label="${tool.name} on ${on_string}: errorcorrectiondetails.qza" name="oerrorcorrectiondetails"/>
+	</outputs>
+	<help><![CDATA[
+Demultiplex sequence data generated with the EMP protocol.
+##########################################################
+
+Demultiplex sequence data (i.e., map barcode reads to sample ids) for data
+generated with the Earth Microbiome Project (EMP) amplicon sequencing
+protocol. Details about this protocol can be found at
+http://www.earthmicrobiome.org/protocols-and-standards/
+
+Parameters
+----------
+seqs : RawSequences | EMPSingleEndSequences | EMPPairedEndSequences
+    The single-end sequences to be demultiplexed.
+barcodes : MetadataColumn[Categorical]
+    The sample metadata column containing the per-sample barcodes.
+golay_error_correction : Bool, optional
+    Perform 12nt Golay error correction on the barcode reads.
+rev_comp_barcodes : Bool, optional
+    If provided, the barcode sequence reads will be reverse complemented
+    prior to demultiplexing.
+rev_comp_mapping_barcodes : Bool, optional
+    If provided, the barcode sequences in the sample metadata will be
+    reverse complemented prior to demultiplexing.
+
+Returns
+-------
+per_sample_sequences : SampleData[SequencesWithQuality]
+    The resulting demultiplexed sequences.
+error_correction_details : ErrorCorrectionDetails
+    Detail about the barcode error corrections.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_demux_subsample-paired.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,50 @@
+<?xml version="1.0" ?>
+<tool id="qiime_demux_subsample-paired" name="qiime demux subsample-paired" version="2019.4">
+	<description> - Subsample paired-end sequences without replacement.</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime demux subsample-paired
+
+--i-sequences=$isequences
+--p-fraction="$pfraction"
+
+--o-subsampled-sequences=osubsampledsequences
+;
+cp osubsampledsequences.qza $osubsampledsequences
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-sequences: ARTIFACT SampleData[PairedEndSequencesWithQuality] The demultiplexed sequences to be subsampled. [required]" name="isequences" optional="False" type="data"/>
+		<param label="--p-fraction: PROPORTION Range(0, 1, inclusive_start=False) The fraction of sequences to retain in subsample. [required]" name="pfraction" optional="False" exclude_min="True" min="0" max="1" value="" type="float"/>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: subsampledsequences.qza" name="osubsampledsequences"/>
+	</outputs>
+	<help><![CDATA[
+Subsample paired-end sequences without replacement.
+###################################################
+
+Generate a random subsample of paired-end sequences containing
+approximately the fraction of input sequences specified by the fraction
+parameter. The number of output samples will always be equal to the number
+of input samples, even if some of those samples contain no sequences after
+subsampling.
+
+Parameters
+----------
+sequences : SampleData[PairedEndSequencesWithQuality]
+    The demultiplexed sequences to be subsampled.
+fraction : Float % Range(0, 1, inclusive_start=False)
+    The fraction of sequences to retain in subsample.
+
+Returns
+-------
+subsampled_sequences : SampleData[PairedEndSequencesWithQuality]
+    The subsampled sequences.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_demux_subsample-single.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,50 @@
+<?xml version="1.0" ?>
+<tool id="qiime_demux_subsample-single" name="qiime demux subsample-single" version="2019.4">
+	<description> - Subsample single-end sequences without replacement.</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime demux subsample-single
+
+--i-sequences=$isequences
+--p-fraction="$pfraction"
+
+--o-subsampled-sequences=osubsampledsequences
+;
+cp osubsampledsequences.qza $osubsampledsequences
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-sequences: ARTIFACT SampleData[SequencesWithQuality | PairedEndSequencesWithQuality] The demultiplexed sequences to be subsampled. [required]" name="isequences" optional="False" type="data"/>
+		<param label="--p-fraction: PROPORTION Range(0, 1, inclusive_start=False) The fraction of sequences to retain in subsample. [required]" name="pfraction" optional="False" exclude_min="True" min="0" max="1" value="" type="float"/>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: subsampledsequences.qza" name="osubsampledsequences"/>
+	</outputs>
+	<help><![CDATA[
+Subsample single-end sequences without replacement.
+###################################################
+
+Generate a random subsample of single-end sequences containing
+approximately the fraction of input sequences specified by the fraction
+parameter. The number of output samples will always be equal to the number
+of input samples, even if some of those samples contain no sequences after
+subsampling.
+
+Parameters
+----------
+sequences : SampleData[SequencesWithQuality | PairedEndSequencesWithQuality]
+    The demultiplexed sequences to be subsampled.
+fraction : Float % Range(0, 1, inclusive_start=False)
+    The fraction of sequences to retain in subsample.
+
+Returns
+-------
+subsampled_sequences : SampleData[SequencesWithQuality]
+    The subsampled sequences.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_demux_summarize.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,55 @@
+<?xml version="1.0" ?>
+<tool id="qiime_demux_summarize" name="qiime demux summarize" version="2019.4">
+	<description> - Summarize counts per sample.</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime demux summarize
+
+--i-data=$idata
+
+#if $pn:
+ --p-n=$pn
+#end if
+
+--o-visualization=ovisualization
+;
+qiime tools export --input-path ovisualization.qzv --output-path out   && mkdir -p '$ovisualization.files_path'
+&& cp -r out/* '$ovisualization.files_path'
+&& mv '$ovisualization.files_path/index.html' '$ovisualization'
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-data: ARTIFACT SampleData[SequencesWithQuality | PairedEndSequencesWithQuality | JoinedSequencesWithQuality] The demultiplexed sequences to be summarized. [required]" name="idata" optional="False" type="data"/>
+		<param label="--p-n: INTEGER        The number of sequences that should be selected at random for quality score plots. The quality plots will present the average positional qualities across all of the sequences selected. If input sequences are paired end, plots will be generated for both forward and reverse reads for the same `n` sequences. [default: 10000]" name="pn" optional="True" type="integer" value="10000"/>
+	</inputs>
+	<outputs>
+		<data format="html" label="${tool.name} on ${on_string}: visualization.qzv" name="ovisualization"/>
+	</outputs>
+	<help><![CDATA[
+Summarize counts per sample.
+############################
+
+Summarize counts per sample for all samples, and generate interactive
+positional quality plots based on `n` randomly selected sequences.
+
+Parameters
+----------
+data : SampleData[SequencesWithQuality | PairedEndSequencesWithQuality | JoinedSequencesWithQuality]
+    The demultiplexed sequences to be summarized.
+n : Int, optional
+    The number of sequences that should be selected at random for quality
+    score plots. The quality plots will present the average positional
+    qualities across all of the sequences selected. If input sequences are
+    paired end, plots will be generated for both forward and reverse reads
+    for the same `n` sequences.
+
+Returns
+-------
+visualization : Visualization
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_diversity_adonis.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,94 @@
+<?xml version="1.0" ?>
+<tool id="qiime_diversity_adonis" name="qiime diversity adonis" version="2019.4">
+	<description> - adonis PERMANOVA test for beta group significance</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime diversity adonis
+
+--i-distance-matrix=$idistancematrix
+
+
+#def list_dict_to_string(list_dict):
+  #set $file_list = list_dict[0]['additional_input'].__getattr__('file_name')
+  #for d in list_dict[1:]:
+	  #set $file_list = $file_list + ',' + d['additional_input'].__getattr__('file_name')
+  #end for
+  #return $file_list
+#end def
+
+--m-metadata-file=$list_dict_to_string("$input_files_mmetadatafile")
+
+
+
+
+--p-formula="$pformula"
+
+#if $ppermutations:
+ --p-permutations=$ppermutations
+#end if
+
+#set $pnjobs = '${GALAXY_SLOTS:-4}'
+#if str($pnjobs):
+ --p-n-jobs="$pnjobs"
+#end if
+
+--o-visualization=ovisualization
+;
+qiime tools export --input-path ovisualization.qzv --output-path out   && mkdir -p '$ovisualization.files_path'
+&& cp -r out/* '$ovisualization.files_path'
+&& mv '$ovisualization.files_path/index.html' '$ovisualization'
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-distance-matrix: ARTIFACT DistanceMatrix     Matrix of distances between pairs of samples. [required]" name="idistancematrix" optional="False" type="data"/>
+		<param label="--p-formula: TEXT     Model formula containing only independent terms contained in the sample metadata. These can be continuous variables or factors, and they can have interactions as in a typical R formula. E.g., the formula 'treatment+block' would test whether the input distance matrix partitions based on 'treatment' and 'block' sample metadata. The formula 'treatment*block' would test both of those effects as well as their interaction. Enclose formulae in quotes to avoid unpleasant surprises.                        [required]" name="pformula" optional="False" type="text"/>
+		<param label="--p-permutations: INTEGER Range(1, None)     The number of permutations to be run when computing p-values.                                [default: 999]" name="ppermutations" optional="True" min="1" type="integer" value="999"/>
+
+		<repeat name="input_files_mmetadatafile" optional="False" title="--m-metadata-file">
+			<param format="tabular" label="--m-metadata-file: Metadata file or artifact viewable as metadata. This option may be supplied multiple times to merge metadata. [required]" name="additional_input" type="data"/>
+		</repeat>
+	</inputs>
+	<outputs>
+		<data format="html" label="${tool.name} on ${on_string}: visualization.qzv" name="ovisualization"/>
+	</outputs>
+	<help><![CDATA[
+adonis PERMANOVA test for beta group significance
+#################################################
+
+Determine whether groups of samples are significantly different from one
+another using the ADONIS permutation-based statistical test in vegan-R. The
+function partitions sums of squares of a multivariate data set, and is
+directly analogous to MANOVA (multivariate analysis of variance). This
+action differs from beta_group_signficance in that it accepts R formulae to
+perform multi-way ADONIS tests; beta_group_signficance only performs one-
+way tests. For more details see
+http://cc.oulu.fi/~jarioksa/softhelp/vegan/html/adonis.html
+
+Parameters
+----------
+distance_matrix : DistanceMatrix
+    Matrix of distances between pairs of samples.
+metadata : Metadata
+    Sample metadata containing formula terms.
+formula : Str
+    Model formula containing only independent terms contained in the sample
+    metadata. These can be continuous variables or factors, and they can
+    have interactions as in a typical R formula. E.g., the formula
+    "treatment+block" would test whether the input distance matrix
+    partitions based on "treatment" and "block" sample metadata. The
+    formula "treatment*block" would test both of those effects as well as
+    their interaction. Enclose formulae in quotes to avoid unpleasant
+    surprises.
+permutations : Int % Range(1, None), optional
+    The number of permutations to be run when computing p-values.
+
+Returns
+-------
+visualization : Visualization
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_diversity_alpha-correlation.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,73 @@
+<?xml version="1.0" ?>
+<tool id="qiime_diversity_alpha-correlation" name="qiime diversity alpha-correlation" version="2019.4">
+	<description> - Alpha diversity correlation</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime diversity alpha-correlation
+
+--i-alpha-diversity=$ialphadiversity
+
+#if $input_files_mmetadatafile:
+#def list_dict_to_string(list_dict):
+	#set $file_list = list_dict[0]['additional_input'].__getattr__('file_name')
+	#for d in list_dict[1:]:
+		#set $file_list = $file_list + ' --m-metadata-file=' + d['additional_input'].__getattr__('file_name')
+	#end for
+	#return $file_list
+#end def
+ --m-metadata-file=$list_dict_to_string($input_files_mmetadatafile)
+#end if
+
+#if str($pmethod) != 'None':
+ --p-method=$pmethod
+#end if
+
+--o-visualization=ovisualization
+;
+qiime tools export --input-path ovisualization.qzv --output-path out   && mkdir -p '$ovisualization.files_path'
+&& cp -r out/* '$ovisualization.files_path'
+&& mv '$ovisualization.files_path/index.html' '$ovisualization'
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-alpha-diversity: ARTIFACT SampleData[AlphaDiversity] Vector of alpha diversity values by sample.  [required]" name="ialphadiversity" optional="False" type="data"/>
+		<param label="--p-method: " name="pmethod" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="spearman">spearman</option>
+			<option value="pearson">pearson</option>
+		</param>
+
+		<repeat name="input_files_mmetadatafile" optional="True" title="--m-metadata-file">
+			<param label="--m-metadata-file: Metadata file or artifact viewable as metadata. This option may be supplied multiple times to merge metadata. [optional]" name="additional_input" type="data" format="tabular,qza,no_unzip.zip" />
+		</repeat>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: metadatafile.qza" name="mmetadatafile"/>
+		<data format="html" label="${tool.name} on ${on_string}: visualization.qzv" name="ovisualization"/>
+	</outputs>
+	<help><![CDATA[
+Alpha diversity correlation
+###########################
+
+Determine whether numeric sample metadata columns are correlated with alpha
+diversity.
+
+Parameters
+----------
+alpha_diversity : SampleData[AlphaDiversity]
+    Vector of alpha diversity values by sample.
+metadata : Metadata
+    The sample metadata.
+method : Str % Choices('spearman', 'pearson'), optional
+    The correlation test to be applied.
+
+Returns
+-------
+visualization : Visualization
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_diversity_alpha-group-significance.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,69 @@
+<?xml version="1.0" ?>
+<tool id="qiime_diversity_alpha-group-significance" name="qiime diversity alpha-group-significance" version="2019.4">
+	<description> - Alpha diversity comparisons</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime diversity alpha-group-significance
+
+--i-alpha-diversity=$ialphadiversity
+
+
+#def list_dict_to_string(list_dict):
+#set $file_list = list_dict[0]['additional_input'].__getattr__('file_name')
+#for d in list_dict[1:]:
+	#set $file_list = $file_list + ',' + d['additional_input'].__getattr__('file_name')
+#end for
+#return $file_list
+#end def
+
+--m-metadata-file=$list_dict_to_string($input_files_mmetadatafile)
+
+--o-visualization=ovisualization
+;
+qiime tools export --input-path ovisualization.qzv --output-path out   && mkdir -p '$ovisualization.files_path'
+&& cp -r out/* '$ovisualization.files_path'
+&& mv '$ovisualization.files_path/index.html' '$ovisualization';
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-alpha-diversity: ARTIFACT SampleData[AlphaDiversity] Vector of alpha diversity values by sample.  [required]" name="ialphadiversity" optional="False" type="data"/>
+
+		<repeat name="input_files_mmetadatafile" optional="True" title="--m-metadata-file">
+			<param label="--m-metadata-file: Metadata file or artifact viewable as metadata. This option may be supplied multiple times to merge metadata. [optional]" name="additional_input" type="data" format="tabular,qza,no_unzip.zip" />
+		</repeat>
+	</inputs>
+	<outputs>
+		<data format="html" label="${tool.name} on ${on_string}: visualization.qzv" name="ovisualization"/>
+	</outputs>
+	<help><![CDATA[
+Beta diversity group significance
+#################################
+
+Determine whether groups of samples are significantly different from one
+another using a permutation-based statistical test.
+
+Parameters
+----------
+distance_matrix : DistanceMatrix
+    Matrix of distances between pairs of samples.
+metadata : MetadataColumn[Categorical]
+    Categorical sample metadata column.
+method : Str % Choices('permanova', 'anosim', 'permdisp'), optional
+    The group significance test to be applied.
+pairwise : Bool, optional
+    Perform pairwise tests between all pairs of groups in addition to the
+    test across all groups. This can be very slow if there are a lot of
+    groups in the metadata column.
+permutations : Int, optional
+    The number of permutations to be run when computing p-values.
+
+Returns
+-------
+visualization : Visualization
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_diversity_alpha-phylogenetic.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,57 @@
+<?xml version="1.0" ?>
+<tool id="qiime_diversity_alpha-phylogenetic" name="qiime diversity alpha-phylogenetic" version="2019.4">
+	<description> - Alpha diversity (phylogenetic)</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime diversity alpha-phylogenetic
+
+--i-table=$itable
+--i-phylogeny=$iphylogeny
+--p-metric=$pmetric
+
+--o-alpha-diversity=oalphadiversity
+;
+cp oalphadiversity.qza $oalphadiversity
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-table: ARTIFACT FeatureTable[Frequency] The feature table containing the samples for which alpha diversity should be computed.       [required]" name="itable" optional="False" type="data"/>
+		<param format="qza,no_unzip.zip" label="--i-phylogeny: ARTIFACT  Phylogenetic tree containing tip identifiers that Phylogeny[Rooted]     correspond to the feature identifiers in the table. This tree can contain tip ids that are not present in the table, but all feature ids in the table must be present in this tree.                  [required]" name="iphylogeny" optional="False" type="data"/>
+		<param label="--p-metric: " name="pmetric" optional="False" type="select">
+			<option value="faith_pd">faith_pd</option>
+		</param>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: alphadiversity.qza" name="oalphadiversity"/>
+	</outputs>
+	<help><![CDATA[
+Alpha diversity (phylogenetic)
+##############################
+
+Computes a user-specified phylogenetic alpha diversity metric for all
+samples in a feature table.
+
+Parameters
+----------
+table : FeatureTable[Frequency]
+    The feature table containing the samples for which alpha diversity
+    should be computed.
+phylogeny : Phylogeny[Rooted]
+    Phylogenetic tree containing tip identifiers that correspond to the
+    feature identifiers in the table. This tree can contain tip ids that
+    are not present in the table, but all feature ids in the table must be
+    present in this tree.
+metric : Str % Choices('faith_pd')
+    The alpha diversity metric to be computed.
+
+Returns
+-------
+alpha_diversity : SampleData[AlphaDiversity] % Properties('phylogenetic')
+    Vector containing per-sample alpha diversities.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_diversity_alpha-rarefaction.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,134 @@
+<?xml version="1.0" ?>
+<tool id="qiime_diversity_alpha-rarefaction" name="qiime diversity alpha-rarefaction" version="2019.4">
+	<description> - Alpha rarefaction curves</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime diversity alpha-rarefaction
+
+--i-table=$itable
+--p-max-depth="$pmaxdepth"
+
+#if str($iphylogeny) != 'None':
+ --i-phylogeny=$iphylogeny
+#end if
+
+#if str($pmetrics) != 'None':
+ --p-metrics=$pmetrics
+#end if
+
+
+#if $pmindepth:
+ --p-min-depth=$pmindepth
+#end if
+
+#if $psteps:
+ --p-steps=$psteps
+#end if
+
+#if $piterations:
+ --p-iterations=$piterations
+#end if
+
+#if $input_files_mmetadatafile:
+#def list_dict_to_string(list_dict):
+#set $file_list = list_dict[0]['additional_input'].__getattr__('file_name')
+#for d in list_dict[1:]:
+	#set $file_list = $file_list + ',' + d['additional_input'].__getattr__('file_name')
+#end for
+#return $file_list
+#end def
+--m-metadata-file=$list_dict_to_string($input_files_mmetadatafile)
+#end if
+
+--o-visualization=ovisualization
+;
+qiime tools export --input-path ovisualization.qzv --output-path out   && mkdir -p '$ovisualization.files_path'
+&& cp -r out/* '$ovisualization.files_path'
+&& mv '$ovisualization.files_path/index.html' '$ovisualization'
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-table: ARTIFACT FeatureTable[Frequency] Feature table to compute rarefaction curves from. [required]" name="itable" optional="False" type="data"/>
+		<param label="--p-max-depth: INTEGER   The maximum rarefaction depth. Must be greater than Range(1, None)        min-depth.                                [required]" name="pmaxdepth" optional="False" min="1" value="" type="integer"/>
+		<param format="qza,no_unzip.zip" label="--i-phylogeny: ARTIFACT  Optional phylogeny for phylogenetic metrics. Phylogeny[Rooted]                                               [optional]" name="iphylogeny" optional="True" type="data"/>
+		<param label="--p-metrics: " name="pmetrics" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="dominance">dominance</option>
+			<option value="ace">ace</option>
+			<option value="brillouin_d">brillouin_d</option>
+			<option value="margalef">margalef</option>
+			<option value="menhinick">menhinick</option>
+			<option value="mcintosh_d">mcintosh_d</option>
+			<option value="berger_parker_d">berger_parker_d</option>
+			<option value="enspie">enspie</option>
+			<option value="doubles">doubles</option>
+			<option value="lladser_pe">lladser_pe</option>
+			<option value="observed_otus">observed_otus</option>
+			<option value="faith_pd">faith_pd</option>
+			<option value="simpson_e">simpson_e</option>
+			<option value="robbins">robbins</option>
+			<option value="shannon">shannon</option>
+			<option value="pielou_e">pielou_e</option>
+			<option value="singles">singles</option>
+			<option value="michaelis_menten_fit">michaelis_menten_fit</option>
+			<option value="heip_e">heip_e</option>
+			<option value="mcintosh_e">mcintosh_e</option>
+			<option value="fisher_alpha">fisher_alpha</option>
+			<option value="goods_coverage">goods_coverage</option>
+			<option value="chao1">chao1</option>
+			<option value="gini_index">gini_index</option>
+			<option value="simpson">simpson</option>
+		</param>
+		<param label="--p-min-depth: INTEGER   The minimum rarefaction depth. Range(1, None)                                                [default: 1]" name="pmindepth" optional="True" type="integer" min="1" value="1"/>
+		<param label="--p-steps: INTEGER       The number of rarefaction depths to include between Range(2, None)        min-depth and max-depth.               [default: 10]" name="psteps" optional="True" type="integer" min="2" value="10"/>
+		<param label="--p-iterations: INTEGER  The number of rarefied feature tables to compute at Range(1, None)        each step.                             [default: 10]" name="piterations" optional="True" type="integer" min="1" value="10"/>
+
+		<repeat name="input_files_mmetadatafile" optional="True" title="--m-metadata-file">
+			<param label="--m-metadata-file: Metadata file or artifact viewable as metadata. This option may be supplied multiple times to merge metadata. The sample metadata.  [optional]" name="additional_input" type="data" format="tabular,qza,no_unzip.zip" />
+		</repeat>
+
+	</inputs>
+	<outputs>
+		<data format="html" label="${tool.name} on ${on_string}: visualization.qzv" name="ovisualization"/>
+	</outputs>
+	<help><![CDATA[
+Alpha rarefaction curves
+########################
+
+Generate interactive alpha rarefaction curves by computing rarefactions
+between `min_depth` and `max_depth`. The number of intermediate depths to
+compute is controlled by the `steps` parameter, with n `iterations` being
+computed at each rarefaction depth. If sample metadata is provided, samples
+may be grouped based on distinct values within a metadata column.
+
+Parameters
+----------
+table : FeatureTable[Frequency]
+    Feature table to compute rarefaction curves from.
+max_depth : Int % Range(1, None)
+    The maximum rarefaction depth. Must be greater than min_depth.
+phylogeny : Phylogeny[Rooted], optional
+    Optional phylogeny for phylogenetic metrics.
+metrics : Set[Str % Choices('pielou_e', 'simpson_e', 'shannon', 'margalef', 'menhinick', 'brillouin_d', 'mcintosh_e', 'doubles', 'robbins', 'simpson', 'enspie', 'fisher_alpha', 'heip_e', 'singles', 'michaelis_menten_fit', 'observed_otus', 'gini_index', 'dominance', 'goods_coverage', 'mcintosh_d', 'faith_pd', 'ace', 'chao1', 'lladser_pe', 'berger_parker_d')], optional
+    The metrics to be measured. By default computes observed_otus, shannon,
+    and if phylogeny is provided, faith_pd.
+metadata : Metadata, optional
+    The sample metadata.
+min_depth : Int % Range(1, None), optional
+    The minimum rarefaction depth.
+steps : Int % Range(2, None), optional
+    The number of rarefaction depths to include between min_depth and
+    max_depth.
+iterations : Int % Range(1, None), optional
+    The number of rarefied feature tables to compute at each step.
+
+Returns
+-------
+visualization : Visualization
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_diversity_alpha.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,79 @@
+<?xml version="1.0" ?>
+<tool id="qiime_diversity_alpha" name="qiime diversity alpha" version="2019.4">
+	<description> - Alpha diversity</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime diversity alpha
+
+--i-table=$itable
+--p-metric=$pmetric
+
+--o-alpha-diversity=oalphadiversity
+;
+cp oalphadiversity.qza $oalphadiversity
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-table: ARTIFACT FeatureTable[Frequency] The feature table containing the samples for which alpha diversity should be computed.          [required]" name="itable" optional="False" type="data"/>
+		<param label="--p-metric: " name="pmetric" optional="False" type="select">
+			<option value="menhinick">menhinick</option>
+			<option value="gini_index">gini_index</option>
+			<option value="chao1_ci">chao1_ci</option>
+			<option value="lladser_pe">lladser_pe</option>
+			<option value="observed_otus">observed_otus</option>
+			<option value="lladser_ci">lladser_ci</option>
+			<option value="simpson_e">simpson_e</option>
+			<option value="shannon">shannon</option>
+			<option value="pielou_e">pielou_e</option>
+			<option value="heip_e">heip_e</option>
+			<option value="mcintosh_e">mcintosh_e</option>
+			<option value="osd">osd</option>
+			<option value="fisher_alpha">fisher_alpha</option>
+			<option value="goods_coverage">goods_coverage</option>
+			<option value="strong">strong</option>
+			<option value="simpson">simpson</option>
+			<option value="dominance">dominance</option>
+			<option value="ace">ace</option>
+			<option value="brillouin_d">brillouin_d</option>
+			<option value="margalef">margalef</option>
+			<option value="esty_ci">esty_ci</option>
+			<option value="kempton_taylor_q">kempton_taylor_q</option>
+			<option value="berger_parker_d">berger_parker_d</option>
+			<option value="enspie">enspie</option>
+			<option value="doubles">doubles</option>
+			<option value="robbins">robbins</option>
+			<option value="singles">singles</option>
+			<option value="mcintosh_d">mcintosh_d</option>
+			<option value="chao1">chao1</option>
+			<option value="michaelis_menten_fit">michaelis_menten_fit</option>
+		</param>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: alphadiversity.qza" name="oalphadiversity"/>
+	</outputs>
+	<help><![CDATA[
+Alpha diversity
+###############
+
+Computes a user-specified alpha diversity metric for all samples in a
+feature table.
+
+Parameters
+----------
+table : FeatureTable[Frequency]
+    The feature table containing the samples for which alpha diversity
+    should be computed.
+metric : Str % Choices('pielou_e', 'menhinick', 'mcintosh_e', 'doubles', 'chao1_ci', 'kempton_taylor_q', 'enspie', 'heip_e', 'michaelis_menten_fit', 'observed_otus', 'gini_index', 'dominance', 'osd', 'esty_ci', 'ace', 'berger_parker_d', 'lladser_ci', 'simpson_e', 'shannon', 'margalef', 'brillouin_d', 'robbins', 'simpson', 'fisher_alpha', 'singles', 'goods_coverage', 'mcintosh_d', 'chao1', 'lladser_pe', 'strong')
+    The alpha diversity metric to be computed.
+
+Returns
+-------
+alpha_diversity : SampleData[AlphaDiversity]
+    Vector containing per-sample alpha diversities.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_diversity_beta-correlation.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,116 @@
+<?xml version="1.0" ?>
+<tool id="qiime_diversity_beta-correlation" name="qiime diversity beta-correlation" version="2019.4">
+	<description> - Beta diversity correlation</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime diversity beta-correlation
+
+--i-distance-matrix=$idistancematrix
+--m-metadata-column="$mmetadatacolumn"
+
+#if str($pmethod) != 'None':
+ --p-method=$pmethod
+#end if
+
+#if $ppermutations:
+ --p-permutations=$ppermutations
+#end if
+
+#if $pintersectids:
+ --p-intersect-ids
+#end if
+
+#if str($plabel1):
+ --p-label1="$plabel1"
+#end if
+
+#if str($plabel2):
+ --p-label2="$plabel2"
+#end if
+
+#if $input_files_mmetadatafile:
+#def list_dict_to_string(list_dict):
+#set $file_list = list_dict[0]['additional_input'].__getattr__('file_name')
+#for d in list_dict[1:]:
+	#set $file_list = $file_list + ',' + d['additional_input'].__getattr__('file_name')
+#end for
+#return $file_list
+#end def
+--m-metadata-file=$list_dict_to_string($input_files_mmetadatafile)
+#end if
+
+--o-metadata-distance-matrix=ometadatadistancematrix
+--o-mantel-scatter-visualization=omantelscattervisualization
+;
+cp ometadatadistancematrix.qza $ometadatadistancematrix;
+qiime tools export --input-path omantelscattervisualization.qzv --output-path out   && mkdir -p '$omantelscattervisualization.files_path'
+&& cp -r out/* '$omantelscattervisualization.files_path'
+&& mv '$omantelscattervisualization.files_path/index.html' '$omantelscattervisualization'
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-distance-matrix: ARTIFACT DistanceMatrix     Matrix of distances between pairs of samples. [required]" name="idistancematrix" optional="False" type="data"/>
+		<param label="--m-metadata-column: COLUMN  MetadataColumn[Numeric] Numeric metadata column from which to compute pairwise Euclidean distances                          [required]" name="mmetadatacolumn" optional="False" type="text"/>
+		<param label="--p-method: " name="pmethod" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="spearman">spearman</option>
+			<option value="pearson">pearson</option>
+		</param>
+		<param label="--p-permutations: INTEGER Range(0, None)     The number of permutations to be run when computing p-values. Supplying a value of zero will disable permutation testing and p-values will not be calculated (this results in *much* quicker execution time if p-values are not desired).               [default: 999]" name="ppermutations" optional="True" type="integer" min="0" value="999"/>
+		<param label="--p-intersect-ids: --p-no-intersect-ids If supplied, IDs that are not found in both distance matrices will be discarded before applying the Mantel test. Default behavior is to error on any mismatched IDs.                                   [default: False]" name="pintersectids" selected="False" type="boolean"/>
+		<param label="--p-label1: TEXT      Label for `distance-matrix` in the output visualization.                    [default: 'Metadata']" name="plabel1" optional="True" type="text" value="'Metadata'"/>
+		<param label="--p-label2: TEXT      Label for `metadata-distance-matrix` in the output visualization.             [default: 'Distance Matrix']" name="plabel2" optional="True" type="text" value="'Distance Matrix'"/>
+		<repeat name="input_files_mmetadatafile" optional="True" title="--m-metadata-file">
+			<param label="--m-metadata-file" name="additional_input" type="data" format="tabular,qza,no_unzip.zip" />
+		</repeat>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: metadatadistancematrix.qza" name="ometadatadistancematrix"/>
+		<data format="html" label="${tool.name} on ${on_string}: mantelscattervisualization.qzv" name="omantelscattervisualization"/>
+	</outputs>
+	<help><![CDATA[
+Beta diversity correlation
+##########################
+
+Create a distance matrix from a numeric metadata column and apply a two-
+sided Mantel test to identify correlation between two distance matrices.
+Actions used internally: `distance-matrix` from q2-metadata and `mantel`
+from q2-diversity.
+
+Parameters
+----------
+metadata : MetadataColumn[Numeric]
+    Numeric metadata column from which to compute pairwise Euclidean
+    distances
+distance_matrix : DistanceMatrix
+    Matrix of distances between pairs of samples.
+method : Str % Choices('spearman', 'pearson'), optional
+    The correlation test to be applied in the Mantel test.
+permutations : Int % Range(0, None), optional
+    The number of permutations to be run when computing p-values. Supplying
+    a value of zero will disable permutation testing and p-values will not
+    be calculated (this results in *much* quicker execution time if
+    p-values are not desired).
+intersect_ids : Bool, optional
+    If supplied, IDs that are not found in both distance matrices will be
+    discarded before applying the Mantel test. Default behavior is to error
+    on any mismatched IDs.
+label1 : Str, optional
+    Label for `distance_matrix` in the output visualization.
+label2 : Str, optional
+    Label for `metadata_distance_matrix` in the output visualization.
+
+Returns
+-------
+metadata_distance_matrix : DistanceMatrix
+    The Distance Matrix produced from the metadata column and used in the
+    mantel test
+mantel_scatter_visualization : Visualization
+    Scatter plot rendering of the manteltest results
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_diversity_beta-group-significance.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,95 @@
+<?xml version="1.0" ?>
+<tool id="qiime_diversity_beta-group-significance" name="qiime diversity beta-group-significance" version="2019.4">
+	<description> - Beta diversity group significance</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime diversity beta-group-significance
+
+--i-distance-matrix=$idistancematrix
+--m-metadata-column="$mmetadatacolumn"
+
+
+
+#if $input_files_mmetadatafile:
+#def list_dict_to_string(list_dict):
+	#set $file_list = list_dict[0]['additional_input'].__getattr__('file_name')
+	#for d in list_dict[1:]:
+		#set $file_list = $file_list + ' --m-metadata-file=' + d['additional_input'].__getattr__('file_name')
+	#end for
+	#return $file_list
+#end def
+ --m-metadata-file=$list_dict_to_string($input_files_mmetadatafile)
+#end if
+
+
+
+#if str($pmethod) != 'None':
+ --p-method=$pmethod
+#end if
+
+#if $ppairwise:
+ --p-pairwise
+#end if
+
+#if $ppermutations:
+ --p-permutations=$ppermutations
+#end if
+
+--o-visualization=ovisualization
+;
+qiime tools export --input-path ovisualization.qzv --output-path out   && mkdir -p '$ovisualization.files_path'
+&& cp -r out/* '$ovisualization.files_path'
+&& mv '$ovisualization.files_path/index.html' '$ovisualization'
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-distance-matrix: ARTIFACT DistanceMatrix     Matrix of distances between pairs of samples. [required]" name="idistancematrix" optional="False" type="data"/>
+		<param label="--m-metadata-column: COLUMN  MetadataColumn[Categorical] Categorical sample metadata column.          [required]" name="mmetadatacolumn" optional="False" type="text"/>
+		<param label="--p-method: " name="pmethod" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="permanova">permanova</option>
+			<option value="anosim">anosim</option>
+			<option value="permdisp">permdisp</option>
+		</param>
+		<param label="--p-pairwise: --p-no-pairwise Perform pairwise tests between all pairs of groups in addition to the test across all groups. This can be very slow if there are a lot of groups in the metadata column.                                [default: False]" name="ppairwise" selected="False" type="boolean"/>
+		<param label="--p-permutations: INTEGER The number of permutations to be run when computing p-values.                                [default: 999]" name="ppermutations" optional="True" type="integer" value="999"/>
+
+		<repeat name="input_files_mmetadatafile" optional="True" title="--m-metadata-file">
+			<param label="--m-metadata-file: Metadata file or artifact viewable as metadata. This option may be supplied multiple times to merge metadata. [optional]" name="additional_input" type="data" format="tabular,qza,no_unzip.zip" />
+		</repeat>
+	</inputs>
+	<outputs>
+		<data format="html" label="${tool.name} on ${on_string}: visualization.qzv" name="ovisualization"/>
+	</outputs>
+	<help><![CDATA[
+Beta diversity group significance
+#################################
+
+Determine whether groups of samples are significantly different from one
+another using a permutation-based statistical test.
+
+Parameters
+----------
+distance_matrix : DistanceMatrix
+    Matrix of distances between pairs of samples.
+metadata : MetadataColumn[Categorical]
+    Categorical sample metadata column.
+method : Str % Choices('permanova', 'anosim', 'permdisp'), optional
+    The group significance test to be applied.
+pairwise : Bool, optional
+    Perform pairwise tests between all pairs of groups in addition to the
+    test across all groups. This can be very slow if there are a lot of
+    groups in the metadata column.
+permutations : Int, optional
+    The number of permutations to be run when computing p-values.
+
+Returns
+-------
+visualization : Visualization
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_diversity_beta-phylogenetic-alt.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,112 @@
+<?xml version="1.0" ?>
+<tool id="qiime_diversity_beta-phylogenetic-alt" name="qiime diversity beta-phylogenetic-alt" version="2019.4">
+	<description> - Beta diversity (phylogenetic) - High Performance Computation</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+  
+  qiime diversity beta-phylogenetic-alt --i-table=$itable --i-phylogeny=$iphylogeny --p-metric=$pmetric
+  
+  #if str($cmdconfig) != 'None':
+   --cmd-config=$cmdconfig
+  #end if
+  
+  #if $pbypasstips:
+   --p-bypass-tips
+  #else
+    --p-no-bypass-tips
+  #end if
+  
+  #set $pnjobs = '${GALAXY_SLOTS:-4}'
+  
+  #if str($pnjobs):
+   --p-n-jobs="$pnjobs"
+  #end if
+  
+   --o-distance-matrix=odistancematrix
+   
+  #if $pvarianceadjusted:
+   --p-variance-adjusted
+  #else
+    --p-no-variance-adjusted
+  #end if
+  
+  #if str($palpha):
+   --p-alpha="$palpha"
+  #end if
+  ;
+  cp odistancematrix.qza $odistancematrix;
+  ]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-table: FeatureTable[Frequency] The feature table containing the samples over which beta diversity should be computed.  [required]" name="itable" optional="False" type="data"/>
+		<param format="qza,no_unzip.zip" label="--i-phylogeny: Phylogeny[Rooted] Phylogenetic tree containing tip identifiers that correspond to the feature identifiers in the table. This tree can contain tip ids that are not present in the table, but all feature ids in the table must be present in this tree.  [required]" name="iphylogeny" optional="False" type="data"/>
+		<param label="--p-metric: The beta diversity metric to be computed.
+                                  [required]" name="pmetric" optional="False" type="select">
+			<option selected="True" value="generalized_unifrac">generalized_unifrac</option>
+			<option value="weighted_unifrac">weighted_unifrac</option>
+			<option value="weighted_normalized_unifrac">weighted_normalized_unifrac</option>
+			<option value="unweighted_unifrac">unweighted_unifrac</option>
+		</param>
+		<param label="--p-variance-adjusted: --p-no-variance-adjusted Perform variance adjustment based on Chang et al. BMC Bioinformatics 2011. Weights distances based on the proportion of the relative abundance represented between the samples at a given node under evaluation. [default: False]" name="pvarianceadjusted" checked="False" type="boolean"/>
+		<param label="--p-alpha: This parameter is only used when the choice of metric is generalized_unifrac. The value of alpha controls importance of sample proportions. 1.0 is weighted normalized UniFrac. 0.0 is close to unweighted UniFrac, but only if the sample proportions are dichotomized.  [optional]" name="palpha" optional="True" type="text"/>
+		<param label="--p-bypass-tips: --p-no-bypass-tips In a bifurcating tree, the tips make up about 50% of the nodes in a tree. By ignoring them, specificity can be traded for reduced compute time. This has the effect of collapsing the phylogeny, and is analogous (in concept) to moving from 99% to 97% OTUs [default: False]" name="pbypasstips" checked="False" type="boolean"/>
+		<param label="--cmd-config: Use config file for command options" name="cmdconfig" optional="True" type="data"/>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: distance-matrix.qza" name="odistancematrix"/>
+	</outputs>
+	<help>
+ <![CDATA[
+Beta diversity (phylogenetic) - High Performance Computation
+-------------------------------------------------------------
+
+Computes a user-specified phylogenetic beta diversity metric for all pairs
+of samples in a feature table. This implementation is recommended for large
+datasets, otherwise the results are identical to beta_phylogenetic.  This
+method is an implementation of the Strided State UniFrac algorithm.
+Multiple variants of the UniFrac metric are available, including
+Generalized UniFrac (Chen et al. 2012), Variance Adjusted UniFrac (Chang et
+al. 2011), as well as Weighted normalized and unnormalized UniFrac
+(Lozupone et al. 2007) and unweighted UniFrac (Lozupone et al. 2005)
+
+Parameters
+----------
+table : FeatureTable[Frequency]
+    The feature table containing the samples over which beta diversity
+    should be computed.
+phylogeny : Phylogeny[Rooted]
+    Phylogenetic tree containing tip identifiers that correspond to the
+    feature identifiers in the table. This tree can contain tip ids that
+    are not present in the table, but all feature ids in the table must be
+    present in this tree.
+metric : Str % Choices({'generalized_unifrac', 'unweighted_unifrac', 'weighted_normalized_unifrac', 'weighted_unifrac'})
+    The beta diversity metric to be computed.
+variance_adjusted : Bool, optional
+    Perform variance adjustment based on Chang et al. BMC Bioinformatics
+    2011. Weights distances based on the proportion of the relative
+    abundance represented between the samples at a given node under
+    evaluation.
+alpha : Float % Range(0, 1, inclusive_end=True), optional
+    This parameter is only used when the choice of metric is
+    generalized_unifrac. The value of alpha controls importance of sample
+    proportions. 1.0 is weighted normalized UniFrac. 0.0 is close to
+    unweighted UniFrac, but only if the sample proportions are
+    dichotomized.
+bypass_tips : Bool, optional
+    In a bifurcating tree, the tips make up about 50% of the nodes in a
+    tree. By ignoring them, specificity can be traded for reduced compute
+    time. This has the effect of collapsing the phylogeny, and is analogous
+    (in concept) to moving from 99% to 97% OTUs
+
+Returns
+-------
+distance_matrix : DistanceMatrix % Properties(['phylogenetic'])
+    The resulting distance matrix.
+    ]]>
+	</help>
+<macros>
+	<import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation" />
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_diversity_beta-phylogenetic.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,97 @@
+<?xml version="1.0" ?>
+<tool id="qiime_diversity_beta-phylogenetic" name="qiime diversity beta-phylogenetic" version="2019.4">
+	<description> - Beta diversity (phylogenetic)</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime diversity beta-phylogenetic
+
+--i-table=$itable
+--i-phylogeny=$iphylogeny
+--p-metric=$pmetric
+
+#set $pnjobs = '${GALAXY_SLOTS:-4}'
+#if str($pnjobs):
+ --p-n-jobs="$pnjobs"
+#end if
+
+
+#if $pvarianceadjusted:
+ --p-variance-adjusted
+#end if
+
+#if str($palpha):
+ --p-alpha="$palpha"
+#end if
+
+#if $pbypasstips:
+ --p-bypass-tips
+#end if
+
+--o-distance-matrix=odistancematrix
+;
+cp odistancematrix.qza $odistancematrix
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-table: ARTIFACT FeatureTable[Frequency] The feature table containing the samples over which beta diversity should be computed.        [required]" name="itable" optional="False" type="data"/>
+		<param format="qza,no_unzip.zip" label="--i-phylogeny: ARTIFACT  Phylogenetic tree containing tip identifiers that Phylogeny[Rooted]     correspond to the feature identifiers in the table. This tree can contain tip ids that are not present in the table, but all feature ids in the table must be present in this tree.                  [required]" name="iphylogeny" optional="False" type="data"/>
+		<param label="--p-metric: " name="pmetric" optional="False" type="select">
+			<option value="generalized_unifrac">generalized_unifrac</option>
+			<option value="unweighted_unifrac">unweighted_unifrac</option>
+			<option value="weighted_normalized_unifrac">weighted_normalized_unifrac</option>
+			<option value="weighted_unifrac">weighted_unifrac</option>
+		</param>
+		<param label="--p-variance-adjusted: --p-no-variance-adjusted Perform variance adjustment based on Chang et al. BMC Bioinformatics 2011. Weights distances based on the proportion of the relative abundance represented between the samples at a given node under evaluation.                         [default: False]" name="pvarianceadjusted" selected="False" type="boolean"/>
+		<param label="--p-alpha: PROPORTION Range(0, 1, inclusive_end=True) This parameter is only used when the choice of metric is generalized_unifrac. The value of alpha controls importance of sample proportions. 1.0 is weighted normalized UniFrac. 0.0 is close to unweighted UniFrac, but only if the sample proportions are dichotomized.             [optional]" name="palpha" optional="True" min="0" max="1" exclude_max="False"  type="float"/>
+		<param label="--p-bypass-tips: --p-no-bypass-tips In a bifurcating tree, the tips make up about 50% of the nodes in a tree. By ignoring them, specificity can be traded for reduced compute time. This has the effect of collapsing the phylogeny, and is analogous (in concept) to moving from 99% to 97% OTUs                                [default: False]" name="pbypasstips" selected="False" type="boolean"/>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: distancematrix.qza" name="odistancematrix"/>
+	</outputs>
+	<help><![CDATA[
+Beta diversity (phylogenetic)
+#############################
+
+Computes a user-specified phylogenetic beta diversity metric for all pairs
+of samples in a feature table.
+
+Parameters
+----------
+table : FeatureTable[Frequency]
+    The feature table containing the samples over which beta diversity
+    should be computed.
+phylogeny : Phylogeny[Rooted]
+    Phylogenetic tree containing tip identifiers that correspond to the
+    feature identifiers in the table. This tree can contain tip ids that
+    are not present in the table, but all feature ids in the table must be
+    present in this tree.
+metric : Str % Choices('weighted_unifrac', 'generalized_unifrac', 'weighted_normalized_unifrac', 'unweighted_unifrac')
+    The beta diversity metric to be computed.
+variance_adjusted : Bool, optional
+    Perform variance adjustment based on Chang et al. BMC Bioinformatics
+    2011. Weights distances based on the proportion of the relative
+    abundance represented between the samples at a given node under
+    evaluation.
+alpha : Float % Range(0, 1, inclusive_end=True), optional
+    This parameter is only used when the choice of metric is
+    generalized_unifrac. The value of alpha controls importance of sample
+    proportions. 1.0 is weighted normalized UniFrac. 0.0 is close to
+    unweighted UniFrac, but only if the sample proportions are
+    dichotomized.
+bypass_tips : Bool, optional
+    In a bifurcating tree, the tips make up about 50% of the nodes in a
+    tree. By ignoring them, specificity can be traded for reduced compute
+    time. This has the effect of collapsing the phylogeny, and is analogous
+    (in concept) to moving from 99% to 97% OTUs
+
+Returns
+-------
+distance_matrix : DistanceMatrix % Properties('phylogenetic')
+    The resulting distance matrix.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_diversity_beta-rarefaction.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,168 @@
+<?xml version="1.0" ?>
+<tool id="qiime_diversity_beta-rarefaction" name="qiime diversity beta-rarefaction" version="2019.4">
+	<description> - Beta diversity rarefaction</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime diversity beta-rarefaction
+
+--i-table=$itable
+--p-metric=$pmetric
+--p-clustering-method=$pclusteringmethod
+--p-sampling-depth="$psamplingdepth"
+
+#if str($iphylogeny) != 'None':
+ --i-phylogeny=$iphylogeny
+#end if
+
+#if $piterations:
+ --p-iterations=$piterations
+#end if
+
+#if str($pcorrelationmethod) != 'None':
+ --p-correlation-method=$pcorrelationmethod
+#end if
+
+#if str($pcolorscheme) != 'None':
+ --p-color-scheme=$pcolorscheme
+#end if
+
+#def list_dict_to_string(list_dict):
+#set $file_list = list_dict[0]['additional_input'].__getattr__('file_name')
+#for d in list_dict[1:]:
+	#set $file_list = $file_list + ',' + d['additional_input'].__getattr__('file_name')
+#end for
+#return $file_list
+#end def
+
+--m-metadata-file=$list_dict_to_string($input_files_mmetadatafile)
+
+
+--o-visualization=ovisualization
+;
+cp mmetadatafile.qza $mmetadatafile;
+qiime tools export --input-path ovisualization.qzv --output-path out   && mkdir -p '$ovisualization.files_path'
+&& cp -r out/* '$ovisualization.files_path'
+&& mv '$ovisualization.files_path/index.html' '$ovisualization';
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-table: ARTIFACT FeatureTable[Frequency] Feature table upon which to perform beta diversity rarefaction analyses.                     [required]" name="itable" optional="False" type="data"/>
+		<param label="--p-metric: " name="pmetric" optional="False" type="select">
+			<option value="kulsinski">kulsinski</option>
+			<option value="euclidean">euclidean</option>
+			<option value="wminkowski">wminkowski</option>
+			<option value="dice">dice</option>
+			<option value="correlation">correlation</option>
+			<option value="hamming">hamming</option>
+			<option value="canberra">canberra</option>
+			<option value="canberra_adkins">canberra_adkins</option>
+			<option value="rogerstanimoto">rogerstanimoto</option>
+			<option value="sqeuclidean">sqeuclidean</option>
+			<option value="cosine">cosine</option>
+			<option value="seuclidean">seuclidean</option>
+			<option value="weighted_normalized_unifrac">weighted_normalized_unifrac</option>
+			<option value="sokalmichener">sokalmichener</option>
+			<option value="unweighted_unifrac">unweighted_unifrac</option>
+			<option value="cityblock">cityblock</option>
+			<option value="generalized_unifrac">generalized_unifrac</option>
+			<option value="weighted_unifrac">weighted_unifrac</option>
+			<option value="braycurtis">braycurtis</option>
+			<option value="jaccard">jaccard</option>
+			<option value="sokalsneath">sokalsneath</option>
+			<option value="aitchison">aitchison</option>
+			<option value="matching">matching</option>
+			<option value="chebyshev">chebyshev</option>
+			<option value="russellrao">russellrao</option>
+			<option value="yule">yule</option>
+			<option value="mahalanobis">mahalanobis</option>
+		</param>
+		<param label="--p-clustering-method: " name="pclusteringmethod" optional="False" type="select">
+			<option value="upgma">upgma</option>
+			<option value="nj">nj</option>
+		</param>
+		<param label="--p-sampling-depth: INTEGER Range(1, None)        The total frequency that each sample should be rarefied to prior to computing the diversity metric. [required]" name="psamplingdepth" optional="False" min="1" value="" type="integer"/>
+		<param format="qza,no_unzip.zip" label="--i-phylogeny: ARTIFACT  Phylogenetic tree containing tip identifiers that Phylogeny[Rooted]     correspond to the feature identifiers in the table. This tree can contain tip ids that are not present in the table, but all feature ids in the table must be present in this tree. [required for phylogenetic metrics]                                  [optional]" name="iphylogeny" optional="True" type="data"/>
+		<param label="--p-iterations: INTEGER  Number of times to rarefy the feature table at a Range(2, None)        given sampling depth.                  [default: 10]" name="piterations" optional="True" type="integer" min="2" value="10"/>
+		<param label="--p-correlation-method: " name="pcorrelationmethod" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="spearman">spearman</option>
+			<option value="pearson">pearson</option>
+		</param>
+		<param label="--p-color-scheme: " name="pcolorscheme" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="BrBG">BrBG</option>
+			<option value="BrBG_r">BrBG_r</option>
+			<option value="PRGn">PRGn</option>
+			<option value="PRGn_r">PRGn_r</option>
+			<option value="PiYG">PiYG</option>
+			<option value="PiYG_r">PiYG_r</option>
+			<option value="PuOr">PuOr</option>
+			<option value="PuOr_r">PuOr_r</option>
+			<option value="RdBu">RdBu</option>
+			<option value="RdBu_r">RdBu_r</option>
+			<option value="RdGy">RdGy</option>
+			<option value="RdGy_r">RdGy_r</option>
+			<option value="RdYlBu">RdYlBu</option>
+			<option value="RdYlBu_r">RdYlBu_r</option>
+			<option value="RdYlGn">RdYlGn</option>
+			<option value="RdYlGn_r">RdYlGn_r</option>
+		</param>
+
+		<repeat name="input_files_mmetadatafile" optional="False" title="--m-metadata-file">
+			<param label="--m-metadata-file: METADATA... (multiple arguments will be merged) The sample metadata used for the Emperor jackknifed PCoA plot. [required]" name="additional_input" type="data" format="tabular,qza,no_unzip.zip" />
+		</repeat>
+
+	</inputs>
+	<outputs>
+		<data format="html" label="${tool.name} on ${on_string}: visualization.qzv" name="ovisualization"/>
+	</outputs>
+	<help><![CDATA[
+Beta diversity rarefaction
+##########################
+
+Repeatedly rarefy a feature table to compare beta diversity results within
+a given rarefaction depth.  For a given beta diversity metric, this
+visualizer will provide: an Emperor jackknifed PCoA plot, samples clustered
+by UPGMA or neighbor joining with support calculation, and a heatmap
+showing the correlation between rarefaction trials of that beta diversity
+metric.
+
+Parameters
+----------
+table : FeatureTable[Frequency]
+    Feature table upon which to perform beta diversity rarefaction
+    analyses.
+metric : Str % Choices('generalized_unifrac', 'sokalmichener', 'matching', 'yule', 'weighted_normalized_unifrac', 'dice', 'russellrao', 'rogerstanimoto', 'mahalanobis', 'wminkowski', 'kulsinski', 'aitchison', 'seuclidean', 'correlation', 'sokalsneath', 'hamming', 'jaccard', 'unweighted_unifrac', 'weighted_unifrac', 'cosine', 'canberra', 'euclidean', 'sqeuclidean', 'chebyshev', 'cityblock', 'canberra_adkins', 'braycurtis')
+    The beta diversity metric to be computed.
+clustering_method : Str % Choices('upgma', 'nj')
+    Samples can be clustered with neighbor joining or UPGMA. An arbitrary
+    rarefaction trial will be used for the tree, and the remaining trials
+    are used to calculate the support of the internal nodes of that tree.
+metadata : Metadata
+    The sample metadata used for the Emperor jackknifed PCoA plot.
+sampling_depth : Int % Range(1, None)
+    The total frequency that each sample should be rarefied to prior to
+    computing the diversity metric.
+iterations : Int % Range(2, None), optional
+    Number of times to rarefy the feature table at a given sampling depth.
+phylogeny : Phylogeny[Rooted], optional
+    Phylogenetic tree containing tip identifiers that correspond to the
+    feature identifiers in the table. This tree can contain tip ids that
+    are not present in the table, but all feature ids in the table must be
+    present in this tree. [required for phylogenetic metrics]
+correlation_method : Str % Choices('pearson', 'spearman'), optional
+    The Mantel correlation test to be applied when computing correlation
+    between beta diversity distance matrices.
+color_scheme : Str % Choices('BrBG', 'BrBG_r', 'PRGn', 'PRGn_r', 'PiYG', 'PiYG_r', 'PuOr', 'PuOr_r', 'RdBu', 'RdBu_r', 'RdGy', 'RdGy_r', 'RdYlBu', 'RdYlBu_r', 'RdYlGn', 'RdYlGn_r'), optional
+    The matplotlib color scheme to generate the heatmap with.
+
+Returns
+-------
+visualization : Visualization
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_diversity_beta.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,85 @@
+<?xml version="1.0" ?>
+<tool id="qiime_diversity_beta" name="qiime diversity beta" version="2019.4">
+	<description> - Beta diversity</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime diversity beta
+
+--i-table=$itable
+--p-metric=$pmetric
+
+#if $ppseudocount:
+ --p-pseudocount=$ppseudocount
+#end if
+
+#set $pnjobs = '${GALAXY_SLOTS:-4}'
+#if str($pnjobs):
+ --p-n-jobs="$pnjobs"
+#end if
+
+--o-distance-matrix=odistancematrix
+;
+cp odistancematrix.qza $odistancematrix
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-table: ARTIFACT FeatureTable[Frequency] The feature table containing the samples over which beta diversity should be computed.           [required]" name="itable" optional="False" type="data"/>
+		<param label="--p-metric: " name="pmetric" optional="False" type="select">
+			<option value="kulsinski">kulsinski</option>
+			<option value="wminkowski">wminkowski</option>
+			<option value="correlation">correlation</option>
+			<option value="hamming">hamming</option>
+			<option value="canberra">canberra</option>
+			<option value="canberra_adkins">canberra_adkins</option>
+			<option value="sqeuclidean">sqeuclidean</option>
+			<option value="sokalmichener">sokalmichener</option>
+			<option value="cityblock">cityblock</option>
+			<option value="braycurtis">braycurtis</option>
+			<option value="matching">matching</option>
+			<option value="russellrao">russellrao</option>
+			<option value="cosine">cosine</option>
+			<option value="yule">yule</option>
+			<option value="euclidean">euclidean</option>
+			<option value="rogerstanimoto">rogerstanimoto</option>
+			<option value="seuclidean">seuclidean</option>
+			<option value="jaccard">jaccard</option>
+			<option value="sokalsneath">sokalsneath</option>
+			<option value="aitchison">aitchison</option>
+			<option value="chebyshev">chebyshev</option>
+			<option value="dice">dice</option>
+			<option value="mahalanobis">mahalanobis</option>
+		</param>
+		<param label="--p-pseudocount: INTEGER Range(1, None)     A pseudocount to handle zeros for compositional metrics.  This is ignored for other metrics. [default: 1]" name="ppseudocount" optional="True" type="integer" min="1" value="1"/>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: distancematrix.qza" name="odistancematrix"/>
+	</outputs>
+	<help><![CDATA[
+Beta diversity
+##############
+
+Computes a user-specified beta diversity metric for all pairs of samples in
+a feature table.
+
+Parameters
+----------
+table : FeatureTable[Frequency]
+    The feature table containing the samples over which beta diversity
+    should be computed.
+metric : Str % Choices('sokalmichener', 'yule', 'russellrao', 'rogerstanimoto', 'aitchison', 'correlation', 'jaccard', 'cosine', 'euclidean', 'sqeuclidean', 'chebyshev', 'cityblock', 'matching', 'dice', 'mahalanobis', 'wminkowski', 'kulsinski', 'seuclidean', 'sokalsneath', 'canberra', 'canberra_adkins', 'hamming', 'braycurtis')
+    The beta diversity metric to be computed.
+pseudocount : Int % Range(1, None), optional
+    A pseudocount to handle zeros for compositional metrics.  This is
+    ignored for other metrics.
+
+Returns
+-------
+distance_matrix : DistanceMatrix
+    The resulting distance matrix.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_diversity_bioenv.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,68 @@
+<?xml version="1.0" ?>
+<tool id="qiime_diversity_bioenv" name="qiime diversity bioenv" version="2019.4">
+	<description> - bioenv</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime diversity bioenv
+
+--i-distance-matrix=$idistancematrix
+
+
+#if $input_files_mmetadatafile:
+#def list_dict_to_string(list_dict):
+	#set $file_list = list_dict[0]['additional_input'].__getattr__('file_name')
+	#for d in list_dict[1:]:
+		#set $file_list = $file_list + ' --m-metadata-file=' + d['additional_input'].__getattr__('file_name')
+	#end for
+	#return $file_list
+#end def
+ --m-metadata-file=$list_dict_to_string($input_files_mmetadatafile)
+#end if
+
+
+--o-visualization=ovisualization
+;
+cp mmetadatafile.qza $mmetadatafile;
+qiime tools export --input-path ovisualization.qzv --output-path out   && mkdir -p '$ovisualization.files_path'
+&& cp -r out/* '$ovisualization.files_path'
+&& mv '$ovisualization.files_path/index.html' '$ovisualization';
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-distance-matrix: ARTIFACT DistanceMatrix     Matrix of distances between pairs of samples. [required]" name="idistancematrix" optional="False" type="data"/>
+
+		<repeat name="input_files_mmetadatafile" optional="True" title="--m-metadata-file">
+			<param label="--m-metadata-file: Metadata file or artifact viewable as metadata. This option may be supplied multiple times to merge metadata. [optional]" name="additional_input" type="data" format="tabular,qza,no_unzip.zip" />
+		</repeat>
+
+	</inputs>
+	<outputs>
+		<data format="html" label="${tool.name} on ${on_string}: visualization.qzv" name="ovisualization"/>
+	</outputs>
+	<help><![CDATA[
+bioenv
+######
+
+Find the subsets of variables in metadata whose Euclidean distances are
+maximally rank-correlated with distance matrix. All numeric variables in
+metadata will be considered, and samples which are missing data will be
+dropped. The output visualization will indicate how many samples were
+dropped due to missing data, if any were dropped.
+
+Parameters
+----------
+distance_matrix : DistanceMatrix
+    Matrix of distances between pairs of samples.
+metadata : Metadata
+    The sample metadata.
+
+Returns
+-------
+visualization : Visualization
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_diversity_core-metrics-phylogenetic.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,167 @@
+<?xml version="1.0" ?>
+<tool id="qiime_diversity_core-metrics-phylogenetic" name="qiime diversity core-metrics-phylogenetic" version="2019.4">
+	<description> - Core diversity metrics (phylogenetic and non- phylogenetic)</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime diversity core-metrics-phylogenetic
+
+--i-table=$itable
+--i-phylogeny=$iphylogeny
+--p-sampling-depth="$psamplingdepth"
+
+#set $pnjobs = '${GALAXY_SLOTS:-4}'
+#if str($pnjobs):
+ --p-n-jobs="$pnjobs"
+#end if
+
+#def list_dict_to_string(list_dict):
+#set $file_list = list_dict[0]['additional_input'].__getattr__('file_name')
+#for d in list_dict[1:]:
+	#set $file_list = $file_list + ',' + d['additional_input'].__getattr__('file_name')
+#end for
+#return $file_list
+#end def
+
+--m-metadata-file=$list_dict_to_string($input_files_mmetadatafile)
+
+
+--o-rarefied-table=orarefiedtable
+--o-faith-pd-vector=ofaithpdvector
+--o-observed-otus-vector=oobservedotusvector
+--o-shannon-vector=oshannonvector
+--o-evenness-vector=oevennessvector
+--o-unweighted-unifrac-distance-matrix=ounweightedunifracdistancematrix
+--o-weighted-unifrac-distance-matrix=oweightedunifracdistancematrix
+--o-jaccard-distance-matrix=ojaccarddistancematrix
+--o-bray-curtis-distance-matrix=obraycurtisdistancematrix
+--o-unweighted-unifrac-pcoa-results=ounweightedunifracpcoaresults
+--o-weighted-unifrac-pcoa-results=oweightedunifracpcoaresults
+--o-jaccard-pcoa-results=ojaccardpcoaresults
+--o-bray-curtis-pcoa-results=obraycurtispcoaresults
+--o-unweighted-unifrac-emperor=ounweightedunifracemperor
+--o-weighted-unifrac-emperor=oweightedunifracemperor
+--o-jaccard-emperor=ojaccardemperor
+--o-bray-curtis-emperor=obraycurtisemperor
+;
+cp orarefiedtable.qza $orarefiedtable;
+cp ofaithpdvector.qza $ofaithpdvector;
+cp oobservedotusvector.qza $oobservedotusvector;
+cp oshannonvector.qza $oshannonvector;
+cp oevennessvector.qza $oevennessvector;
+cp ounweightedunifracdistancematrix.qza $ounweightedunifracdistancematrix;
+cp oweightedunifracdistancematrix.qza $oweightedunifracdistancematrix;
+cp ojaccarddistancematrix.qza $ojaccarddistancematrix;
+cp obraycurtisdistancematrix.qza $obraycurtisdistancematrix;
+cp ounweightedunifracpcoaresults.qza $ounweightedunifracpcoaresults;
+cp oweightedunifracpcoaresults.qza $oweightedunifracpcoaresults;
+cp ojaccardpcoaresults.qza $ojaccardpcoaresults;
+cp obraycurtispcoaresults.qza $obraycurtispcoaresults;
+qiime tools export --input-path ounweightedunifracemperor.qzv --output-path out   && mkdir -p '$ounweightedunifracemperor.files_path'
+&& cp -r out/* '$ounweightedunifracemperor.files_path'
+&& mv '$ounweightedunifracemperor.files_path/index.html' '$ounweightedunifracemperor';
+qiime tools export --input-path oweightedunifracemperor.qzv --output-path out   && mkdir -p '$oweightedunifracemperor.files_path'
+&& cp -r out/* '$oweightedunifracemperor.files_path'
+&& mv '$oweightedunifracemperor.files_path/index.html' '$oweightedunifracemperor';
+qiime tools export --input-path ojaccardemperor.qzv --output-path out   && mkdir -p '$ojaccardemperor.files_path'
+&& cp -r out/* '$ojaccardemperor.files_path'
+&& mv '$ojaccardemperor.files_path/index.html' '$ojaccardemperor';
+qiime tools export --input-path obraycurtisemperor.qzv --output-path out   && mkdir -p '$obraycurtisemperor.files_path'
+&& cp -r out/* '$obraycurtisemperor.files_path'
+&& mv '$obraycurtisemperor.files_path/index.html' '$obraycurtisemperor';
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-table: ARTIFACT FeatureTable[Frequency] The feature table containing the samples over which diversity metrics should be computed.     [required]" name="itable" optional="False" type="data"/>
+		<param format="qza,no_unzip.zip" label="--i-phylogeny: ARTIFACT  Phylogenetic tree containing tip identifiers that Phylogeny[Rooted]     correspond to the feature identifiers in the table. This tree can contain tip ids that are not present in the table, but all feature ids in the table must be present in this tree.                  [required]" name="iphylogeny" optional="False" type="data"/>
+		<param label="--p-sampling-depth: INTEGER Range(1, None)        The total frequency that each sample should be rarefied to prior to computing diversity metrics. [required]" name="psamplingdepth" optional="False" min="1" value="" type="integer"/>
+
+		<repeat name="input_files_mmetadatafile" optional="False" title="--m-metadata-file">
+			<param label="--m-metadata-file:  (multiple arguments will be merged) The sample metadata to use in the emperor plots. [required]" name="additional_input" type="data" format="tabular,qza,no_unzip.zip" />
+		</repeat>
+
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: rarefiedtable.qza" name="orarefiedtable"/>
+		<data format="qza" label="${tool.name} on ${on_string}: faithpdvector.qza" name="ofaithpdvector"/>
+		<data format="qza" label="${tool.name} on ${on_string}: observedotusvector.qza" name="oobservedotusvector"/>
+		<data format="qza" label="${tool.name} on ${on_string}: shannonvector.qza" name="oshannonvector"/>
+		<data format="qza" label="${tool.name} on ${on_string}: evennessvector.qza" name="oevennessvector"/>
+		<data format="qza" label="${tool.name} on ${on_string}: unweightedunifracdistancematrix.qza" name="ounweightedunifracdistancematrix"/>
+		<data format="qza" label="${tool.name} on ${on_string}: weightedunifracdistancematrix.qza" name="oweightedunifracdistancematrix"/>
+		<data format="qza" label="${tool.name} on ${on_string}: jaccarddistancematrix.qza" name="ojaccarddistancematrix"/>
+		<data format="qza" label="${tool.name} on ${on_string}: braycurtisdistancematrix.qza" name="obraycurtisdistancematrix"/>
+		<data format="qza" label="${tool.name} on ${on_string}: unweightedunifracpcoaresults.qza" name="ounweightedunifracpcoaresults"/>
+		<data format="qza" label="${tool.name} on ${on_string}: weightedunifracpcoaresults.qza" name="oweightedunifracpcoaresults"/>
+		<data format="qza" label="${tool.name} on ${on_string}: jaccardpcoaresults.qza" name="ojaccardpcoaresults"/>
+		<data format="qza" label="${tool.name} on ${on_string}: braycurtispcoaresults.qza" name="obraycurtispcoaresults"/>
+		<data format="html" label="${tool.name} on ${on_string}: unweightedunifracemperor.qzv" name="ounweightedunifracemperor"/>
+		<data format="html" label="${tool.name} on ${on_string}: weightedunifracemperor.qzv" name="oweightedunifracemperor"/>
+		<data format="html" label="${tool.name} on ${on_string}: jaccardemperor.qzv" name="ojaccardemperor"/>
+		<data format="html" label="${tool.name} on ${on_string}: braycurtisemperor.qzv" name="obraycurtisemperor"/>
+	</outputs>
+	<help><![CDATA[
+Core diversity metrics (phylogenetic and non-phylogenetic)
+##########################################################
+
+Applies a collection of diversity metrics (both phylogenetic and non-
+phylogenetic) to a feature table.
+
+Parameters
+----------
+table : FeatureTable[Frequency]
+    The feature table containing the samples over which diversity metrics
+    should be computed.
+phylogeny : Phylogeny[Rooted]
+    Phylogenetic tree containing tip identifiers that correspond to the
+    feature identifiers in the table. This tree can contain tip ids that
+    are not present in the table, but all feature ids in the table must be
+    present in this tree.
+sampling_depth : Int % Range(1, None)
+    The total frequency that each sample should be rarefied to prior to
+    computing diversity metrics.
+metadata : Metadata
+    The sample metadata to use in the emperor plots.
+
+Returns
+-------
+rarefied_table : FeatureTable[Frequency]
+    The resulting rarefied feature table.
+faith_pd_vector : SampleData[AlphaDiversity]
+    Vector of Faith PD values by sample.
+observed_otus_vector : SampleData[AlphaDiversity]
+    Vector of Observed OTUs values by sample.
+shannon_vector : SampleData[AlphaDiversity]
+    Vector of Shannon diversity values by sample.
+evenness_vector : SampleData[AlphaDiversity]
+    Vector of Pielou's evenness values by sample.
+unweighted_unifrac_distance_matrix : DistanceMatrix
+    Matrix of unweighted UniFrac distances between pairs of samples.
+weighted_unifrac_distance_matrix : DistanceMatrix
+    Matrix of weighted UniFrac distances between pairs of samples.
+jaccard_distance_matrix : DistanceMatrix
+    Matrix of Jaccard distances between pairs of samples.
+bray_curtis_distance_matrix : DistanceMatrix
+    Matrix of Bray-Curtis distances between pairs of samples.
+unweighted_unifrac_pcoa_results : PCoAResults
+    PCoA matrix computed from unweighted UniFrac distances between samples.
+weighted_unifrac_pcoa_results : PCoAResults
+    PCoA matrix computed from weighted UniFrac distances between samples.
+jaccard_pcoa_results : PCoAResults
+    PCoA matrix computed from Jaccard distances between samples.
+bray_curtis_pcoa_results : PCoAResults
+    PCoA matrix computed from Bray-Curtis distances between samples.
+unweighted_unifrac_emperor : Visualization
+    Emperor plot of the PCoA matrix computed from unweighted UniFrac.
+weighted_unifrac_emperor : Visualization
+    Emperor plot of the PCoA matrix computed from weighted UniFrac.
+jaccard_emperor : Visualization
+    Emperor plot of the PCoA matrix computed from Jaccard.
+bray_curtis_emperor : Visualization
+    Emperor plot of the PCoA matrix computed from Bray-Curtis.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_diversity_core-metrics.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,121 @@
+<?xml version="1.0" ?>
+<tool id="qiime_diversity_core-metrics" name="qiime diversity core-metrics" version="2019.4">
+	<description> - Core diversity metrics (non-phylogenetic)</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime diversity core-metrics
+
+--i-table=$itable
+--p-sampling-depth="$psamplingdepth"
+
+#set $pnjobs = '${GALAXY_SLOTS:-4}'
+#if str($pnjobs):
+ --p-n-jobs="$pnjobs"
+#end if
+
+#def list_dict_to_string(list_dict):
+#set $file_list = list_dict[0]['additional_input'].__getattr__('file_name')
+#for d in list_dict[1:]:
+	#set $file_list = $file_list + ',' + d['additional_input'].__getattr__('file_name')
+#end for
+#return $file_list
+#end def
+
+--m-metadata-file=$list_dict_to_string($input_files_mmetadatafile)
+
+
+--o-rarefied-table=orarefiedtable
+--o-observed-otus-vector=oobservedotusvector
+--o-shannon-vector=oshannonvector
+--o-evenness-vector=oevennessvector
+--o-jaccard-distance-matrix=ojaccarddistancematrix
+--o-bray-curtis-distance-matrix=obraycurtisdistancematrix
+--o-jaccard-pcoa-results=ojaccardpcoaresults
+--o-bray-curtis-pcoa-results=obraycurtispcoaresults
+--o-jaccard-emperor=ojaccardemperor
+--o-bray-curtis-emperor=obraycurtisemperor
+;
+cp orarefiedtable.qza $orarefiedtable;
+cp oobservedotusvector.qza $oobservedotusvector;
+cp oshannonvector.qza $oshannonvector;
+cp oevennessvector.qza $oevennessvector;
+cp ojaccarddistancematrix.qza $ojaccarddistancematrix;
+cp obraycurtisdistancematrix.qza $obraycurtisdistancematrix;
+cp ojaccardpcoaresults.qza $ojaccardpcoaresults;
+cp obraycurtispcoaresults.qza $obraycurtispcoaresults;
+qiime tools export --input-path ojaccardemperor.qzv --output-path out   && mkdir -p '$ojaccardemperor.files_path'
+&& cp -r out/* '$ojaccardemperor.files_path'
+&& mv '$ojaccardemperor.files_path/index.html' '$ojaccardemperor';
+qiime tools export --input-path obraycurtisemperor.qzv --output-path out   && mkdir -p '$obraycurtisemperor.files_path'
+&& cp -r out/* '$obraycurtisemperor.files_path'
+&& mv '$obraycurtisemperor.files_path/index.html' '$obraycurtisemperor';
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-table: ARTIFACT FeatureTable[Frequency] The feature table containing the samples over which diversity metrics should be computed.        [required]" name="itable" optional="False" type="data"/>
+		<param label="--p-sampling-depth: INTEGER Range(1, None)     The total frequency that each sample should be rarefied to prior to computing diversity metrics. [required]" name="psamplingdepth" optional="False" min="1" value="" type="integer"/>
+
+		<repeat name="input_files_mmetadatafile" optional="False" title="--m-metadata-file">
+			<param label="--m-metadata-file: METADATA... (multiple arguments will be merged) The sample metadata to use in the emperor plots. [required]" name="additional_input" type="data" format="tabular,qza,no_unzip.zip" />
+		</repeat>
+
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: rarefiedtable.qza" name="orarefiedtable"/>
+		<data format="qza" label="${tool.name} on ${on_string}: observedotusvector.qza" name="oobservedotusvector"/>
+		<data format="qza" label="${tool.name} on ${on_string}: shannonvector.qza" name="oshannonvector"/>
+		<data format="qza" label="${tool.name} on ${on_string}: evennessvector.qza" name="oevennessvector"/>
+		<data format="qza" label="${tool.name} on ${on_string}: jaccarddistancematrix.qza" name="ojaccarddistancematrix"/>
+		<data format="qza" label="${tool.name} on ${on_string}: braycurtisdistancematrix.qza" name="obraycurtisdistancematrix"/>
+		<data format="qza" label="${tool.name} on ${on_string}: jaccardpcoaresults.qza" name="ojaccardpcoaresults"/>
+		<data format="qza" label="${tool.name} on ${on_string}: braycurtispcoaresults.qza" name="obraycurtispcoaresults"/>
+		<data format="html" label="${tool.name} on ${on_string}: jaccardemperor.qzv" name="ojaccardemperor"/>
+		<data format="html" label="${tool.name} on ${on_string}: braycurtisemperor.qzv" name="obraycurtisemperor"/>
+	</outputs>
+	<help><![CDATA[
+Core diversity metrics (non-phylogenetic)
+#########################################
+
+Applies a collection of diversity metrics (non-phylogenetic) to a feature
+table.
+
+Parameters
+----------
+table : FeatureTable[Frequency]
+    The feature table containing the samples over which diversity metrics
+    should be computed.
+sampling_depth : Int % Range(1, None)
+    The total frequency that each sample should be rarefied to prior to
+    computing diversity metrics.
+metadata : Metadata
+    The sample metadata to use in the emperor plots.
+
+Returns
+-------
+rarefied_table : FeatureTable[Frequency]
+    The resulting rarefied feature table.
+observed_otus_vector : SampleData[AlphaDiversity]
+    Vector of Observed OTUs values by sample.
+shannon_vector : SampleData[AlphaDiversity]
+    Vector of Shannon diversity values by sample.
+evenness_vector : SampleData[AlphaDiversity]
+    Vector of Pielou's evenness values by sample.
+jaccard_distance_matrix : DistanceMatrix
+    Matrix of Jaccard distances between pairs of samples.
+bray_curtis_distance_matrix : DistanceMatrix
+    Matrix of Bray-Curtis distances between pairs of samples.
+jaccard_pcoa_results : PCoAResults
+    PCoA matrix computed from Jaccard distances between samples.
+bray_curtis_pcoa_results : PCoAResults
+    PCoA matrix computed from Bray-Curtis distances between samples.
+jaccard_emperor : Visualization
+    Emperor plot of the PCoA matrix computed from Jaccard.
+bray_curtis_emperor : Visualization
+    Emperor plot of the PCoA matrix computed from Bray-Curtis.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_diversity_filter-distance-matrix.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,92 @@
+<?xml version="1.0" ?>
+<tool id="qiime_diversity_filter-distance-matrix" name="qiime diversity filter-distance-matrix" version="2019.4">
+	<description> - Filter samples from a distance matrix.</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime diversity filter-distance-matrix
+
+--i-distance-matrix=$idistancematrix
+
+
+#if $input_files_mmetadatafile:
+#def list_dict_to_string(list_dict):
+	#set $file_list = list_dict[0]['additional_input'].__getattr__('file_name')
+	#for d in list_dict[1:]:
+		#set $file_list = $file_list + ' --m-metadata-file=' + d['additional_input'].__getattr__('file_name')
+	#end for
+	#return $file_list
+#end def
+ --m-metadata-file=$list_dict_to_string($input_files_mmetadatafile)
+#end if
+
+
+#if '__sq__' in str($pwhere):
+  #set $pwhere_temp = $pwhere.replace('__sq__', "'")
+  #set $pwhere = $pwhere_temp
+#end if
+
+#if str($pwhere):
+ --p-where="$pwhere"
+#end if
+
+
+#if $pexcludeids:
+ --p-exclude-ids
+#end if
+
+--o-filtered-distance-matrix=ofiltereddistancematrix
+;
+cp ofiltereddistancematrix.qza $ofiltereddistancematrix
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-distance-matrix: ARTIFACT DistanceMatrix     Distance matrix to filter by sample.         [required]" name="idistancematrix" optional="False" type="data"/>
+		<param label="--p-where: TEXT       SQLite WHERE clause specifying sample metadata criteria that must be met to be included in the filtered distance matrix. If not provided, all samples in `metadata` that are also in the input distance matrix will be retained.                     [optional]" name="pwhere" optional="True" type="text"/>
+		<param label="--p-exclude-ids: --p-no-exclude-ids If `True`, the samples selected by `metadata` or `where` parameters will be excluded from the filtered distance matrix instead of being retained. [default: False]" name="pexcludeids" selected="False" type="boolean"/>
+
+		<repeat name="input_files_mmetadatafile" optional="True" title="--m-metadata-file">
+			<param label="--m-metadata-file: Metadata file or artifact viewable as metadata. This option may be supplied multiple times to merge metadata. [optional]" name="additional_input" type="data" format="tabular,qza,no_unzip.zip" />
+		</repeat>
+
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: filtereddistancematrix.qza" name="ofiltereddistancematrix"/>
+	</outputs>
+	<help><![CDATA[
+Filter samples from a distance matrix.
+######################################
+
+Filter samples from a distance matrix, retaining only the samples matching
+search criteria specified by `metadata` and `where` parameters (or
+retaining only the samples not matching that criteria, if `exclude_ids` is
+True). See the filtering tutorial on https://docs.qiime2.org for additional
+details.
+
+Parameters
+----------
+distance_matrix : DistanceMatrix
+    Distance matrix to filter by sample.
+metadata : Metadata
+    Sample metadata used with `where` parameter when selecting samples to
+    retain, or with `exclude_ids` when selecting samples to discard.
+where : Str, optional
+    SQLite WHERE clause specifying sample metadata criteria that must be
+    met to be included in the filtered distance matrix. If not provided,
+    all samples in `metadata` that are also in the input distance matrix
+    will be retained.
+exclude_ids : Bool, optional
+    If `True`, the samples selected by `metadata` or `where` parameters
+    will be excluded from the filtered distance matrix instead of being
+    retained.
+
+Returns
+-------
+filtered_distance_matrix : DistanceMatrix
+    Distance matrix filtered to include samples matching search criteria
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_diversity_mantel.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,98 @@
+<?xml version="1.0" ?>
+<tool id="qiime_diversity_mantel" name="qiime diversity mantel" version="2019.4">
+	<description> - Apply the Mantel test to two distance matrices</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime diversity mantel
+
+--i-dm1=$idm1
+--i-dm2=$idm2
+
+#if str($pmethod) != 'None':
+ --p-method=$pmethod
+#end if
+
+#if $ppermutations:
+ --p-permutations=$ppermutations
+#end if
+
+#if $pintersectids:
+ --p-intersect-ids
+#end if
+
+#if str($plabel1):
+ --p-label1="$plabel1"
+#end if
+
+#if str($plabel2):
+ --p-label2="$plabel2"
+#end if
+
+--o-visualization=ovisualization
+;
+qiime tools export --input-path ovisualization.qzv --output-path out   && mkdir -p '$ovisualization.files_path'
+&& cp -r out/* '$ovisualization.files_path'
+&& mv '$ovisualization.files_path/index.html' '$ovisualization';
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-dm1: ARTIFACT     Matrix of distances between pairs of samples. DistanceMatrix                                                  [required]" name="idm1" optional="False" type="data"/>
+		<param format="qza,no_unzip.zip" label="--i-dm2: ARTIFACT     Matrix of distances between pairs of samples. DistanceMatrix                                                  [required]" name="idm2" optional="False" type="data"/>
+		<param label="--p-method: " name="pmethod" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="spearman">spearman</option>
+			<option value="pearson">pearson</option>
+		</param>
+		<param label="--p-permutations: INTEGER Range(0, None)     The number of permutations to be run when computing p-values. Supplying a value of zero will disable permutation testing and p-values will not be calculated (this results in *much* quicker execution time if p-values are not desired).               [default: 999]" name="ppermutations" optional="True" type="integer" min="0" value="999"/>
+		<param label="--p-intersect-ids: --p-no-intersect-ids If supplied, IDs that are not found in both distance matrices will be discarded before applying the Mantel test. Default behavior is to error on any mismatched IDs.                                   [default: False]" name="pintersectids" selected="False" type="boolean"/>
+		<param label="--p-label1: TEXT      Label for `dm1` in the output visualization. [default: 'Distance Matrix 1']" name="plabel1" optional="True" type="text" value="'Distance Matrix 1'"/>
+		<param label="--p-label2: TEXT      Label for `dm2` in the output visualization. [default: 'Distance Matrix 2']" name="plabel2" optional="True" type="text" value="'Distance Matrix 2'"/>
+	</inputs>
+	<outputs>
+		<data format="html" label="${tool.name} on ${on_string}: visualization.qzv" name="ovisualization"/>
+	</outputs>
+	<help><![CDATA[
+Apply the Mantel test to two distance matrices
+##############################################
+
+Apply a two-sided Mantel test to identify correlation between two distance
+matrices.  Note: the directionality of the comparison has no bearing on the
+results. Thus, comparing distance matrix X to distance matrix Y is
+equivalent to comparing Y to X.  Note: the order of samples within the two
+distance matrices does not need to be the same; the distance matrices will
+be reordered before applying the Mantel test.  See the scikit-bio docs for
+more details about the Mantel test:  http://scikit-
+bio.org/docs/latest/generated/generated/skbio.stats.distance.mantel.html
+
+Parameters
+----------
+dm1 : DistanceMatrix
+    Matrix of distances between pairs of samples.
+dm2 : DistanceMatrix
+    Matrix of distances between pairs of samples.
+method : Str % Choices('spearman', 'pearson'), optional
+    The correlation test to be applied in the Mantel test.
+permutations : Int % Range(0, None), optional
+    The number of permutations to be run when computing p-values. Supplying
+    a value of zero will disable permutation testing and p-values will not
+    be calculated (this results in *much* quicker execution time if
+    p-values are not desired).
+intersect_ids : Bool, optional
+    If supplied, IDs that are not found in both distance matrices will be
+    discarded before applying the Mantel test. Default behavior is to error
+    on any mismatched IDs.
+label1 : Str, optional
+    Label for `dm1` in the output visualization.
+label2 : Str, optional
+    Label for `dm2` in the output visualization.
+
+Returns
+-------
+visualization : Visualization
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_diversity_pcoa-biplot.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,49 @@
+<?xml version="1.0" ?>
+<tool id="qiime_diversity_pcoa-biplot" name="qiime diversity pcoa-biplot" version="2019.4">
+	<description> - Principal Coordinate Analysis Biplot</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime diversity pcoa-biplot
+
+--i-pcoa=$ipcoa
+--i-features=$ifeatures
+
+--o-biplot=obiplot
+;
+cp obiplot.qza $obiplot
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-pcoa: ARTIFACT      The PCoA where the features will be projected onto. PCoAResults                                                     [required]" name="ipcoa" optional="False" type="data"/>
+		<param format="qza,no_unzip.zip" label="--i-features: ARTIFACT FeatureTable[RelativeFrequency] Variables to project onto the PCoA matrix  [required]" name="ifeatures" optional="False" type="data"/>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: biplot.qza" name="obiplot"/>
+	</outputs>
+	<help><![CDATA[
+Principal Coordinate Analysis Biplot
+####################################
+
+Project features into a principal coordinates matrix. The features used
+should be the features used to compute the distance matrix. It is
+recommended that these variables be normalized in cases of dimensionally
+heterogeneous physical variables.
+
+Parameters
+----------
+pcoa : PCoAResults
+    The PCoA where the features will be projected onto.
+features : FeatureTable[RelativeFrequency]
+    Variables to project onto the PCoA matrix
+
+Returns
+-------
+biplot : PCoAResults % Properties('biplot')
+    The resulting PCoA matrix.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_diversity_pcoa.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,58 @@
+<?xml version="1.0" ?>
+<tool id="qiime_diversity_pcoa" name="qiime diversity pcoa" version="2019.4">
+	<description> - Principal Coordinate Analysis</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime diversity pcoa
+
+--i-distance-matrix=$idistancematrix
+
+#if str($pnumberofdimensions):
+ --p-number-of-dimensions="$pnumberofdimensions"
+#end if
+
+--o-pcoa=opcoa
+;
+cp opcoa.qza $opcoa
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-distance-matrix: ARTIFACT DistanceMatrix     The distance matrix on which PCoA should be computed. [required]" name="idistancematrix" optional="False" type="data"/>
+		<param label="--p-number-of-dimensions: INTEGER Range(1, None)     Dimensions to reduce the distance matrix to. This number determines how many eigenvectors and eigenvalues are returned,and influences the choice of algorithm used to compute them. By default, uses the default eigendecomposition method, SciPy's eigh, which computes all eigenvectors and eigenvalues in an exact manner. For very large matrices, this is expected to be slow. If a value is specified for this parameter, then the fast, heuristic eigendecomposition algorithm fsvd is used, which only computes and returns the number of dimensions specified, but suffers some degree of accuracy loss, the magnitude of which varies across different datasets.                          [optional]" name="pnumberofdimensions" optional="True" min="1" type="integer"/>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: pcoa.qza" name="opcoa"/>
+	</outputs>
+	<help><![CDATA[
+Principal Coordinate Analysis
+#############################
+
+Apply principal coordinate analysis.
+
+Parameters
+----------
+distance_matrix : DistanceMatrix
+    The distance matrix on which PCoA should be computed.
+number_of_dimensions : Int % Range(1, None), optional
+    Dimensions to reduce the distance matrix to. This number determines how
+    many eigenvectors and eigenvalues are returned,and influences the
+    choice of algorithm used to compute them. By default, uses the default
+    eigendecomposition method, SciPy's eigh, which computes all
+    eigenvectors and eigenvalues in an exact manner. For very large
+    matrices, this is expected to be slow. If a value is specified for this
+    parameter, then the fast, heuristic eigendecomposition algorithm fsvd
+    is used, which only computes and returns the number of dimensions
+    specified, but suffers some degree of accuracy loss, the magnitude of
+    which varies across different datasets.
+
+Returns
+-------
+pcoa : PCoAResults
+    The resulting PCoA matrix.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_diversity_procrustes-analysis.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,58 @@
+<?xml version="1.0" ?>
+<tool id="qiime_diversity_procrustes-analysis" name="qiime diversity procrustes-analysis" version="2019.4">
+	<description> - Procrustes Analysis</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime diversity procrustes-analysis
+
+--i-reference=$ireference
+--i-other=$iother
+
+#if $pdimensions:
+ --p-dimensions=$pdimensions
+#end if
+
+--o-transformed-reference=otransformedreference
+--o-transformed-other=otransformedother
+;
+cp otransformedreference.qza $otransformedreference;
+cp otransformedother.qza $otransformedother
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-reference: ARTIFACT  The ordination matrix to which data is fitted to. PCoAResults                                                     [required]" name="ireference" optional="False" type="data"/>
+		<param format="qza,no_unzip.zip" label="--i-other: ARTIFACT      The ordination matrix that's fitted to the PCoAResults           reference ordination.                     [required]" name="iother" optional="False" type="data"/>
+		<param label="--p-dimensions: INTEGER Range(1, None)                                                [default: 5]" name="pdimensions" optional="True" type="integer" min="1" value="5"/>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: transformedreference.qza" name="otransformedreference"/>
+		<data format="qza" label="${tool.name} on ${on_string}: transformedother.qza" name="otransformedother"/>
+	</outputs>
+	<help><![CDATA[
+Procrustes Analysis
+###################
+
+Fit two ordination matrices with Procrustes analysis
+
+Parameters
+----------
+reference : PCoAResults
+    The ordination matrix to which data is fitted to.
+other : PCoAResults
+    The ordination matrix that's fitted to the reference ordination.
+dimensions : Int % Range(1, None), optional
+	\
+
+Returns
+-------
+transformed_reference : PCoAResults
+    A normalized version of the "reference" ordination matrix.
+transformed_other : PCoAResults
+    A normalized and fitted version of the "other" ordination matrix.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_emperor_biplot.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,89 @@
+<?xml version="1.0" ?>
+<tool id="qiime_emperor_biplot" name="qiime emperor biplot" version="2019.4">
+	<description> - Visualize and Interact with Principal Coordinates Analysis Biplot</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime emperor biplot
+
+--i-biplot=$ibiplot
+
+
+#def list_dict_to_string(list_dict):
+#set $file_list = list_dict[0]['additional_input'].__getattr__('file_name')
+#for d in list_dict[1:]:
+	#set $file_list = $file_list + ',' + d['additional_input'].__getattr__('file_name')
+#end for
+#return $file_list
+#end def
+
+--m-sample-metadata-file=$list_dict_to_string($m_sample_metadatafile)
+--m-feature-metadata-file=$list_dict_to_string($m_feature_metadatafile)
+
+
+#if $pignoremissingsamples:
+ --p-ignore-missing-samples
+#end if
+
+#if $pnumberoffeatures:
+ --p-number-of-features=$pnumberoffeatures
+#end if
+ 
+--o-visualization=ovisualization
+;
+qiime tools export --input-path ovisualization.qzv --output-path out   && mkdir -p '$ovisualization.files_path'
+&& cp -r out/* '$ovisualization.files_path'
+&& mv '$ovisualization.files_path/index.html' '$ovisualization'
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-biplot: ARTIFACT PCoAResults % Properties('biplot') The principal coordinates matrix to be plotted. [required]" name="ibiplot" optional="False" type="data"/>
+		<param label="--p-ignore-missing-samples: --p-no-ignore-missing-samples This will suppress the error raised when the coordinates matrix contains samples that are not present in the metadata. Samples without metadata are included by setting all metadata values to: 'This sample has no metadata'. This flag is only applied if at least one sample is present in both the coordinates matrix and the metadata.               [default: False]" name="pignoremissingsamples" selected="False" type="boolean"/>
+		<param label="--p-number-of-features: INTEGER Range(1, None)     The number of most important features (arrows) to display in the ordination.                 [default: 5]" name="pnumberoffeatures" optional="True" type="integer" min="1" value="5"/>
+
+		<repeat name="m_sample_metadatafile" optional="False" title="--m-metadata-file">
+			<param label="--m-sample-metadata-file: (multiple arguments will be merged)  The sample metadata. [required]" name="additional_input" type="data" format="tabular,qza,no_unzip.zip" />
+		</repeat>
+
+		<repeat name="m_feature_metadatafile" optional="True" title="--m-metadata-file">
+			<param label="--m-feature-metadata-file: (multiple arguments will be merged)  The feature metadata (useful to manipulate the arrows in the plot).  [optional]" name="additional_input" type="data" format="tabular,qza,no_unzip.zip" />
+		</repeat>
+
+	</inputs>
+	<outputs>
+		<data format="html" label="${tool.name} on ${on_string}: visualization.qzv" name="ovisualization"/>
+	</outputs>
+	<help><![CDATA[
+Visualize and Interact with Principal Coordinates Analysis Biplot
+#################################################################
+
+Generates an interactive ordination biplot where the user can visually
+integrate sample and feature metadata.
+
+Parameters
+----------
+biplot : PCoAResults % Properties('biplot')
+    The principal coordinates matrix to be plotted.
+sample_metadata : Metadata
+    The sample metadata
+feature_metadata : Metadata, optional
+    The feature metadata (useful to manipulate the arrows in the plot).
+ignore_missing_samples : Bool, optional
+    This will suppress the error raised when the coordinates matrix
+    contains samples that are not present in the metadata. Samples without
+    metadata are included by setting all metadata values to: "This sample
+    has no metadata". This flag is only applied if at least one sample is
+    present in both the coordinates matrix and the metadata.
+number_of_features : Int % Range(1, None), optional
+    The number of most important features (arrows) to display in the
+    ordination.
+
+Returns
+-------
+visualization : Visualization
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_emperor_plot.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,83 @@
+<?xml version="1.0" ?>
+<tool id="qiime_emperor_plot" name="qiime emperor plot" version="2019.4">
+	<description> - Visualize and Interact with Principal Coordinates Analysis Plots</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime emperor plot
+
+--i-pcoa=$ipcoa
+
+
+#if $input_files_mmetadatafile:
+#def list_dict_to_string(list_dict):
+	#set $file_list = list_dict[0]['additional_input'].__getattr__('file_name')
+	#for d in list_dict[1:]:
+		#set $file_list = $file_list + ' --m-metadata-file=' + d['additional_input'].__getattr__('file_name')
+	#end for
+	#return $file_list
+#end def
+ --m-metadata-file=$list_dict_to_string($input_files_mmetadatafile)
+#end if
+
+
+#if str($pcustomaxes):
+ --p-custom-axes="$pcustomaxes"
+#end if
+
+#if $pignoremissingsamples:
+ --p-ignore-missing-samples
+#end if
+
+--o-visualization=ovisualization
+;
+qiime tools export --input-path ovisualization.qzv --output-path out   && mkdir -p '$ovisualization.files_path'
+&& cp -r out/* '$ovisualization.files_path'
+&& mv '$ovisualization.files_path/index.html' '$ovisualization'
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-pcoa: ARTIFACT    The principal coordinates matrix to be plotted. PCoAResults                                                     [required]" name="ipcoa" optional="False" type="data"/>
+		<param label="--p-custom-axes: TEXT... List[Str]          Numeric sample metadata columns that should be included as axes in the Emperor plot.        [optional]" name="pcustomaxes" optional="True" type="text"/>
+		<param label="--p-ignore-missing-samples: --p-no-ignore-missing-samples This will suppress the error raised when the coordinates matrix contains samples that are not present in the metadata. Samples without metadata are included by setting all metadata values to: 'This sample has no metadata'. This flag is only applied if at least one sample is present in both the coordinates matrix and the metadata.               [default: False]" name="pignoremissingsamples" selected="False" type="boolean"/>
+
+		<repeat name="input_files_mmetadatafile" optional="True" title="--m-metadata-file">
+			<param label="--m-metadata-file: Metadata file or artifact viewable as metadata. This option may be supplied multiple times to merge metadata. [optional]" name="additional_input" type="data" format="tabular,qza,no_unzip.zip" />
+		</repeat>
+
+	</inputs>
+	<outputs>
+		<data format="html" label="${tool.name} on ${on_string}: visualization.qzv" name="ovisualization"/>
+	</outputs>
+	<help><![CDATA[
+Visualize and Interact with Principal Coordinates Analysis Plots
+################################################################
+
+Generates an interactive ordination plot where the user can visually
+integrate sample metadata.
+
+Parameters
+----------
+pcoa : PCoAResults
+    The principal coordinates matrix to be plotted.
+metadata : Metadata
+    The sample metadata.
+custom_axes : List[Str], optional
+    Numeric sample metadata columns that should be included as axes in the
+    Emperor plot.
+ignore_missing_samples : Bool, optional
+    This will suppress the error raised when the coordinates matrix
+    contains samples that are not present in the metadata. Samples without
+    metadata are included by setting all metadata values to: "This sample
+    has no metadata". This flag is only applied if at least one sample is
+    present in both the coordinates matrix and the metadata.
+
+Returns
+-------
+visualization : Visualization
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_emperor_procrustes-plot.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,88 @@
+<?xml version="1.0" ?>
+<tool id="qiime_emperor_procrustes-plot" name="qiime emperor procrustes-plot" version="2019.4">
+	<description> - Visualize and Interact with a procrustes plot</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime emperor procrustes-plot
+
+--i-reference-pcoa=$ireferencepcoa
+--i-other-pcoa=$iotherpcoa
+
+
+#if $input_files_mmetadatafile:
+#def list_dict_to_string(list_dict):
+	#set $file_list = list_dict[0]['additional_input'].__getattr__('file_name')
+	#for d in list_dict[1:]:
+		#set $file_list = $file_list + ' --m-metadata-file=' + d['additional_input'].__getattr__('file_name')
+	#end for
+	#return $file_list
+#end def
+ --m-metadata-file=$list_dict_to_string($input_files_mmetadatafile)
+#end if
+
+
+
+#if str($pcustomaxes):
+ --p-custom-axes="$pcustomaxes"
+#end if
+
+#if $pignoremissingsamples:
+ --p-ignore-missing-samples
+#end if
+
+--o-visualization=ovisualization
+;
+qiime tools export --input-path ovisualization.qzv --output-path out   && mkdir -p '$ovisualization.files_path'
+&& cp -r out/* '$ovisualization.files_path'
+&& mv '$ovisualization.files_path/index.html' '$ovisualization'
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-reference-pcoa: ARTIFACT PCoAResults        The reference ordination matrix to be plotted. [required]" name="ireferencepcoa" optional="False" type="data"/>
+		<param format="qza,no_unzip.zip" label="--i-other-pcoa: ARTIFACT PCoAResults        The 'other' ordination matrix to be plotted (the one that was fitted to the reference).           [required]" name="iotherpcoa" optional="False" type="data"/>
+		<param label="--p-custom-axes: TEXT... List[Str]          Numeric sample metadata columns that should be included as axes in the Emperor plot.        [optional]" name="pcustomaxes" optional="True" type="text"/>
+		<param label="--p-ignore-missing-samples: --p-no-ignore-missing-samples This will suppress the error raised when the coordinates matrix contains samples that are not present in the metadata. Samples without metadata are included by setting all metadata values to: 'This sample has no metadata'. This flag is only applied if at least one sample is present in both the coordinates matrix and the metadata.               [default: False]" name="pignoremissingsamples" selected="False" type="boolean"/>
+
+		<repeat name="input_files_mmetadatafile" optional="True" title="--m-metadata-file">
+			<param label="--m-metadata-file: Metadata file or artifact viewable as metadata. This option may be supplied multiple times to merge metadata. [optional]" name="additional_input" type="data" format="tabular,qza,no_unzip.zip" />
+		</repeat>
+
+	</inputs>
+	<outputs>
+		<data format="html" label="${tool.name} on ${on_string}: visualization.qzv" name="ovisualization"/>
+	</outputs>
+	<help><![CDATA[
+Visualize and Interact with a procrustes plot
+#############################################
+
+Plot two procrustes-fitted matrices
+
+Parameters
+----------
+reference_pcoa : PCoAResults
+    The reference ordination matrix to be plotted.
+other_pcoa : PCoAResults
+    The "other" ordination matrix to be plotted (the one that was fitted to
+    the reference).
+metadata : Metadata
+    The sample metadata.
+custom_axes : List[Str], optional
+    Numeric sample metadata columns that should be included as axes in the
+    Emperor plot.
+ignore_missing_samples : Bool, optional
+    This will suppress the error raised when the coordinates matrix
+    contains samples that are not present in the metadata. Samples without
+    metadata are included by setting all metadata values to: "This sample
+    has no metadata". This flag is only applied if at least one sample is
+    present in both the coordinates matrix and the metadata.
+
+Returns
+-------
+visualization : Visualization
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_feature-classifier_classify-consensus-blast.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,140 @@
+<?xml version="1.0" ?>
+<tool id="qiime_feature-classifier_classify-consensus-blast" name="qiime feature-classifier classify-consensus-blast" version="2019.4">
+	<description> - BLAST+ consensus taxonomy classifier</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime feature-classifier classify-consensus-blast
+
+--i-query=$iquery
+--i-reference-reads=$ireferencereads
+
+#if str( $id_to_taxonomy_fp.selector ) == 'history'
+#set $tax = $id_to_taxonomy_fp.taxonomy_fp
+--i-reference-taxonomy '$tax'
+#else:
+#set $tax = $id_to_taxonomy_fp.taxonomy_fp.fields.path
+--i-reference-taxonomy '$tax'
+#end if
+
+
+#if $pmaxaccepts:
+ --p-maxaccepts=$pmaxaccepts
+#end if
+
+#if $ppercidentity:
+ --p-perc-identity=$ppercidentity
+#end if
+
+#if $pquerycov:
+ --p-query-cov=$pquerycov
+#end if
+
+#if str($pstrand) != 'None':
+ --p-strand=$pstrand
+#end if
+
+#if $pevalue:
+ --p-evalue=$pevalue
+#end if
+
+#if $pminconsensus:
+ --p-min-consensus=$pminconsensus
+#end if
+
+#if str($punassignablelabel):
+ --p-unassignable-label="$punassignablelabel"
+#end if
+
+--o-classification=oclassification
+;
+cp oclassification.qza $oclassification
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-query: ARTIFACT FeatureData[Sequence] Sequences to classify taxonomically.      [required]" name="iquery" optional="False" type="data"/>
+		<param format="qza,no_unzip.zip" label="--i-reference-reads: ARTIFACT FeatureData[Sequence] reference sequences.                      [required]" name="ireferencereads" optional="False" type="data"/>
+
+		<conditional name="id_to_taxonomy_fp" optional="True">
+		   <param name="selector" type="select" label="Reference taxonomy to query">
+			  <option value="cached">Public databases</option>
+			  <option value="history">Databases from your history</option>
+		   </param>
+		   <when value="cached">
+			  <param argument="--taxonomy_fp" label="Reference taxonomy" type="select" optional="True">
+				 <options from_data_table="qiime_taxonomy" />
+			  </param>
+		   </when>
+		   <when value="history">
+			  <param argument="--taxonomy_fp" type="data" format="qza,no_unzip.zip" label="Reference databases" optional="True" />
+		   </when>
+		</conditional>
+
+		<param label="--p-maxaccepts: INTEGER  Maximum number of hits to keep for each query. Must Range(1, None)        be in range [1, infinity]. BLAST will choose the first N hits in the reference database that exceed perc-identity similarity to query.     [default: 10]" name="pmaxaccepts" optional="True" type="integer" min="1" value="10"/>
+		<param label="--p-perc-identity: PROPORTION Range(0.0, 1.0, inclusive_end=True) Reject match if percent identity to query is lower. Must be in range [0.0, 1.0].          [default: 0.8]" name="ppercidentity" optional="True" type="float" min="0" max="1" exclude_max="False" value="0.8"/>
+		<param label="--p-query-cov: PROPORTION Range(0.0, 1.0, inclusive_end=True) Reject match if query alignment coverage per high-scoring pair is lower. Note: this uses blastn's qcov_hsp_perc parameter, and may not behave identically to the query-cov parameter used by classify-consensus-vsearch. Must be in range [0.0, 1.0].                                 [default: 0.8]" name="pquerycov" optional="True" min="0" max="1" exclude_max="False" type="float" value="0.8"/>
+		<param label="--p-strand: " name="pstrand" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="both">both</option>
+			<option value="plus">plus</option>
+			<option value="minus">minus</option>
+		</param>
+		<param label="--p-evalue: NUMBER       BLAST expectation value (E) threshold for saving hits.                               [default: 0.001]" name="pevalue" optional="True" type="float" value="0.001"/>
+		<param label="--p-min-consensus: NUMBER Range(0.5, 1.0, inclusive_start=False, inclusive_end=True)   Minimum fraction of assignments must match top hit to be accepted as consensus assignment. Must be in range (0.5, 1.0].                    [default: 0.51]" name="pminconsensus" optional="True" type="float" min="0.5" max="1" exclude_min="True" exclude_max="False" value="0.51"/>
+		<param label="--p-unassignable-label: TEXT [default: 'Unassigned']" name="punassignablelabel" optional="True" type="text" value="'Unassigned'"/>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: classification.qza" name="oclassification"/>
+	</outputs>
+	<help><![CDATA[
+BLAST+ consensus taxonomy classifier
+####################################
+
+Assign taxonomy to query sequences using BLAST+. Performs BLAST+ local
+alignment between query and reference_reads, then assigns consensus
+taxonomy to each query sequence from among maxaccepts hits, min_consensus
+of which share that taxonomic assignment. Note that maxaccepts selects the
+first N hits with > perc_identity similarity to query, not the top N
+matches. For top N hits, use classify-consensus-vsearch.
+
+Parameters
+----------
+query : FeatureData[Sequence]
+    Sequences to classify taxonomically.
+reference_reads : FeatureData[Sequence]
+    reference sequences.
+reference_taxonomy : FeatureData[Taxonomy]
+    reference taxonomy labels.
+maxaccepts : Int % Range(1, None), optional
+    Maximum number of hits to keep for each query. Must be in range [1,
+    infinity]. BLAST will choose the first N hits in the reference database
+    that exceed perc_identity similarity to query.
+perc_identity : Float % Range(0.0, 1.0, inclusive_end=True), optional
+    Reject match if percent identity to query is lower. Must be in range
+    [0.0, 1.0].
+query_cov : Float % Range(0.0, 1.0, inclusive_end=True), optional
+    Reject match if query alignment coverage per high-scoring pair is
+    lower. Note: this uses blastn's qcov_hsp_perc parameter, and may not
+    behave identically to the query_cov parameter used by classify-
+    consensus-vsearch. Must be in range [0.0, 1.0].
+strand : Str % Choices('both', 'plus', 'minus'), optional
+    Align against reference sequences in forward ("plus"), reverse
+    ("minus"), or both directions ("both").
+evalue : Float, optional
+    BLAST expectation value (E) threshold for saving hits.
+min_consensus : Float % Range(0.5, 1.0, inclusive_start=False, inclusive_end=True), optional
+    Minimum fraction of assignments must match top hit to be accepted as
+    consensus assignment. Must be in range (0.5, 1.0].
+unassignable_label : Str, optional
+	\
+
+Returns
+-------
+classification : FeatureData[Taxonomy]
+    Taxonomy classifications of query sequences.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_feature-classifier_classify-consensus-vsearch.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,135 @@
+<?xml version="1.0" ?>
+<tool id="qiime_feature-classifier_classify-consensus-vsearch" name="qiime feature-classifier classify-consensus-vsearch" version="2019.4">
+	<description> - VSEARCH consensus taxonomy classifier</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime feature-classifier classify-consensus-vsearch
+
+--i-query=$iquery
+--i-reference-reads=$ireferencereads
+
+
+#if str( $id_to_taxonomy_fp.selector ) == 'history'
+#set $tax = $id_to_taxonomy_fp.taxonomy_fp
+--i-reference-taxonomy '$tax'
+#else:
+#set $tax = $id_to_taxonomy_fp.taxonomy_fp.fields.path
+--i-reference-taxonomy '$tax'
+#end if
+
+
+#if $pmaxaccepts:
+ --p-maxaccepts=$pmaxaccepts
+#end if
+
+#if $ppercidentity:
+ --p-perc-identity=$ppercidentity
+#end if
+
+#if $pquerycov:
+ --p-query-cov=$pquerycov
+#end if
+
+#if str($pstrand) != 'None':
+ --p-strand=$pstrand
+#end if
+
+#if $pminconsensus:
+ --p-min-consensus=$pminconsensus
+#end if
+
+#if str($punassignablelabel):
+ --p-unassignable-label="$punassignablelabel"
+#end if
+
+#set $pthreads = '${GALAXY_SLOTS:-4}'
+#if str($pthreads):
+ --p-threads="$pthreads"
+#end if
+
+--o-classification=oclassification
+;
+cp oclassification.qza $oclassification
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-query: ARTIFACT FeatureData[Sequence] Sequences to classify taxonomically.      [required]" name="iquery" optional="False" type="data"/>
+		<param format="qza,no_unzip.zip" label="--i-reference-reads: ARTIFACT FeatureData[Sequence] reference sequences.                      [required]" name="ireferencereads" optional="False" type="data"/>
+
+		<conditional name="id_to_taxonomy_fp" optional="True">
+		   <param name="selector" type="select" label="Reference taxonomy to query">
+			  <option value="cached">Public databases</option>
+			  <option value="history">Databases from your history</option>
+		   </param>
+		   <when value="cached">
+			  <param argument="--taxonomy_fp" label="Reference taxonomy" type="select" optional="True">
+				 <options from_data_table="qiime_taxonomy" />
+			  </param>
+		   </when>
+		   <when value="history">
+			  <param argument="--taxonomy_fp" type="data" format="qza,no_unzip.zip" label="Reference databases" optional="True" />
+		   </when>
+		</conditional>
+
+		<param label="--p-maxaccepts: INTEGER  Maximum number of hits to keep for each query. Set Range(0, None)        to 0 to keep all hits > perc-identity similarity. Must be in range [0, infinity].        [default: 10]" name="pmaxaccepts" optional="True" type="integer" min="0" value="10"/>
+		<param label="--p-perc-identity: PROPORTION Range(0.0, 1.0, inclusive_end=True) Reject match if percent identity to query is lower. Must be in range [0.0, 1.0].          [default: 0.8]" name="ppercidentity" optional="True" type="float" min="0" max="1" exclude_max="False" value="0.8"/>
+		<param label="--p-query-cov: PROPORTION Range(0.0, 1.0, inclusive_end=True) Reject match if query alignment coverage per high-scoring pair is lower. Must be in range [0.0, 1.0].                                 [default: 0.8]" name="pquerycov" optional="True" type="float" min="0" max="1" exclude_max="False" value="0.8"/>
+		<param label="--p-strand: Align against reference sequences in forward   ('plus') or both directions ('both').  [default: 'both']" name="pstrand" optional="True" type="select">
+			<option value="None">Selection is Optional</option>
+			<option selected="True" value="both">both</option>
+			<option value="plus">plus</option>
+		</param>
+		<param label="--p-min-consensus: NUMBER Range(0.5, 1.0, inclusive_start=False, inclusive_end=True)   Minimum fraction of assignments must match top hit to be accepted as consensus assignment. Must be in range (0.5, 1.0].                    [default: 0.51]" name="pminconsensus" optional="True" type="float" min="0.5" max="1" exclude_min="True" exclude_max="False" value="0.51"/>
+		<param label="--p-unassignable-label: TEXT [default: 'Unassigned']" name="punassignablelabel" optional="True" type="text" value="'Unassigned'"/>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: classification.qza" name="oclassification"/>
+	</outputs>
+	<help><![CDATA[
+VSEARCH consensus taxonomy classifier
+#####################################
+
+Assign taxonomy to query sequences using VSEARCH. Performs VSEARCH global
+alignment between query and reference_reads, then assigns consensus
+taxonomy to each query sequence from among maxaccepts top hits,
+min_consensus of which share that taxonomic assignment. Unlike classify-
+consensus-blast, this method searches the entire reference database before
+choosing the top N hits, not the first N hits.
+
+Parameters
+----------
+query : FeatureData[Sequence]
+    Sequences to classify taxonomically.
+reference_reads : FeatureData[Sequence]
+    reference sequences.
+reference_taxonomy : FeatureData[Taxonomy]
+    reference taxonomy labels.
+maxaccepts : Int % Range(0, None), optional
+    Maximum number of hits to keep for each query. Set to 0 to keep all
+    hits > perc_identity similarity. Must be in range [0, infinity].
+perc_identity : Float % Range(0.0, 1.0, inclusive_end=True), optional
+    Reject match if percent identity to query is lower. Must be in range
+    [0.0, 1.0].
+query_cov : Float % Range(0.0, 1.0, inclusive_end=True), optional
+    Reject match if query alignment coverage per high-scoring pair is
+    lower. Must be in range [0.0, 1.0].
+strand : Str % Choices('both', 'plus'), optional
+    Align against reference sequences in forward ("plus") or both
+    directions ("both").
+min_consensus : Float % Range(0.5, 1.0, inclusive_start=False, inclusive_end=True), optional
+    Minimum fraction of assignments must match top hit to be accepted as
+    consensus assignment. Must be in range (0.5, 1.0].
+unassignable_label : Str, optional
+	\
+
+Returns
+-------
+classification : FeatureData[Taxonomy]
+    The resulting taxonomy classifications.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_feature-classifier_classify-sklearn.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,81 @@
+<?xml version="1.0" ?>
+<tool id="qiime_feature-classifier_classify-sklearn" name="qiime feature-classifier classify-sklearn" version="2019.4">
+	<description> - Pre-fitted sklearn-based taxonomy classifier</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime feature-classifier classify-sklearn
+
+--i-reads=$ireads
+--i-classifier=$iclassifier
+
+#set $pnjobs = '${GALAXY_SLOTS:-4}'
+
+#if str($pnjobs):
+ --p-n-jobs="$pnjobs"
+#end if
+
+
+#if $pconfidence:
+ --p-confidence=$pconfidence
+#end if
+
+#if str($preadorientation) != 'None':
+ --p-read-orientation=$preadorientation
+#end if
+
+--o-classification=oclassification
+;
+cp oclassification.qza $oclassification
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-reads: ARTIFACT FeatureData[Sequence] The feature data to be classified.         [required]" name="ireads" optional="False" type="data"/>
+		<param format="qza,no_unzip.zip" label="--i-classifier: ARTIFACT TaxonomicClassifier  The taxonomic classifier for classifying the reads. [required]" name="iclassifier" optional="False" type="data"/>
+		<param label="--p-confidence: NUMBER  Confidence threshold for limiting taxonomic depth. Provide -1 to disable confidence calculation, or 0 to calculate confidence but not apply it to limit the taxonomic depth of the assignments.    [default: 0.7]" name="pconfidence" optional="True" type="float" value="0.7"/>
+		<param label="--p-read-orientation: " name="preadorientation" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="same">same</option>
+			<option value="reverse-complement">reverse-complement</option>
+		</param>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: classification.qza" name="oclassification"/>
+	</outputs>
+	<help><![CDATA[
+Pre-fitted sklearn-based taxonomy classifier
+############################################
+
+Classify reads by taxon using a fitted classifier.
+
+Parameters
+----------
+reads : FeatureData[Sequence]
+    The feature data to be classified.
+classifier : TaxonomicClassifier
+    The taxonomic classifier for classifying the reads.
+reads_per_batch : Int % Range(0, None), optional
+    Number of reads to process in each batch. If 0, this parameter is
+    autoscaled to min( number of query sequences / n_jobs, 20000).
+pre_dispatch : Str, optional
+    "all" or expression, as in "3*n_jobs". The number of batches (of tasks)
+    to be pre-dispatched.
+confidence : Float, optional
+    Confidence threshold for limiting taxonomic depth. Provide -1 to
+    disable confidence calculation, or 0 to calculate confidence but not
+    apply it to limit the taxonomic depth of the assignments.
+read_orientation : Str % Choices('same', 'reverse-complement'), optional
+    Direction of reads with respect to reference sequences. same will cause
+    reads to be classified unchanged; reverse-complement will cause reads
+    to be reversed and complemented prior to classification. Default is to
+    autodetect based on the confidence estimates for the first 100 reads.
+
+Returns
+-------
+classification : FeatureData[Taxonomy]
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_feature-classifier_extract-reads.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,91 @@
+<?xml version="1.0" ?>
+<tool id="qiime_feature-classifier_extract-reads" name="qiime feature-classifier extract-reads" version="2019.4">
+	<description> - Extract reads from reference</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime feature-classifier extract-reads
+
+--i-sequences=$isequences
+--p-f-primer="$pfprimer"
+--p-r-primer="$prprimer"
+
+#if $ptrunclen:
+ --p-trunc-len=$ptrunclen
+#end if
+
+#if $ptrimleft:
+ --p-trim-left=$ptrimleft
+#end if
+
+#if $pidentity:
+ --p-identity=$pidentity
+#end if
+
+#if $pminlength:
+ --p-min-length=$pminlength
+#end if
+
+#if $pmaxlength:
+ --p-max-length=$pmaxlength
+#end if
+
+--o-reads=oreads
+;
+cp oreads.qza $oreads
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-sequences: ARTIFACT FeatureData[Sequence] [required]" name="isequences" optional="False" type="data"/>
+		<param label="--p-f-primer: TEXT       forward primer sequence                   [required]" name="pfprimer" optional="False" type="text"/>
+		<param label="--p-r-primer: TEXT       reverse primer sequence                   [required]" name="prprimer" optional="False" type="text"/>
+		<param label="--p-trunc-len: INTEGER   read is cut to trunc-len if trunc-len is positive. Applied before trim-left.               [default: 0]" name="ptrunclen" optional="True" type="integer" value="0"/>
+		<param label="--p-trim-left: INTEGER   trim-left nucleotides are removed from the 5' end if trim-left is positive. Applied after trunc-len. [default: 0]" name="ptrimleft" optional="True" type="integer" value="0"/>
+		<param label="--p-identity: NUMBER     minimum combined primer match identity threshold. [default: 0.8]" name="pidentity" optional="True" type="float" value="0.8"/>
+		<param label="--p-min-length: INTEGER  Minimum amplicon length. Shorter amplicons are Range(0, None)        discarded. Applied after trimming and truncation, so be aware that trimming may impact sequence retention. Set to zero to disable min length filtering.                             [default: 50]" name="pminlength" optional="True" type="integer" min="0" value="50"/>
+		<param label="--p-max-length: INTEGER  Maximum amplicon length. Longer amplicons are Range(0, None)        discarded. Applied before trimming and truncation, so plan accordingly. Set to zero (default) to disable max length filtering.           [default: 0]" name="pmaxlength" optional="True" type="integer" min="0" value="0"/>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: reads.qza" name="oreads"/>
+	</outputs>
+	<help><![CDATA[
+Extract reads from reference
+############################
+
+Extract sequencing-like reads from a reference database.
+
+Parameters
+----------
+sequences : FeatureData[Sequence]
+	\
+
+f_primer : Str
+    forward primer sequence
+r_primer : Str
+    reverse primer sequence
+trunc_len : Int, optional
+    read is cut to trunc_len if trunc_len is positive. Applied before
+    trim_left.
+trim_left : Int, optional
+    trim_left nucleotides are removed from the 5' end if trim_left is
+    positive. Applied after trunc_len.
+identity : Float, optional
+    minimum combined primer match identity threshold.
+min_length : Int % Range(0, None), optional
+    Minimum amplicon length. Shorter amplicons are discarded. Applied after
+    trimming and truncation, so be aware that trimming may impact sequence
+    retention. Set to zero to disable min length filtering.
+max_length : Int % Range(0, None), optional
+    Maximum amplicon length. Longer amplicons are discarded. Applied before
+    trimming and truncation, so plan accordingly. Set to zero (default) to
+    disable max length filtering.
+
+Returns
+-------
+reads : FeatureData[Sequence]
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_feature-classifier_fit-classifier-naive-bayes.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,260 @@
+<?xml version="1.0" ?>
+<tool id="qiime_feature-classifier_fit-classifier-naive-bayes" name="qiime feature-classifier fit-classifier-naive-bayes" version="2019.4">
+	<description> - Train the naive_bayes classifier</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime feature-classifier fit-classifier-naive-bayes
+
+--i-reference-reads=$ireferencereads
+
+
+#if str( $id_to_taxonomy_fp.selector ) == 'history'
+	#set $tax = $id_to_taxonomy_fp.taxonomy_fp
+	--i-reference-taxonomy '$tax'
+#else:
+	#set $tax = $id_to_taxonomy_fp.taxonomy_fp.fields.path
+	--i-reference-taxonomy '$tax'
+#end if
+
+
+#if str($iclassweight) != 'None':
+ --i-class-weight=$iclassweight
+#end if
+
+#if $pclassifyalpha:
+ --p-classify--alpha=$pclassifyalpha
+#end if
+
+#if $pclassifychunksize:
+ --p-classify--chunk-size=$pclassifychunksize
+#end if
+
+#if str($pclassifyclassprior):
+ --p-classify--class-prior="$pclassifyclassprior"
+#end if
+
+#if $pclassifyfitprior:
+ --p-classify--fit-prior
+#end if
+
+#if $pfeatextalternatesign:
+ --p-feat-ext--alternate-sign
+#end if
+
+#if str($pfeatextanalyzer):
+ --p-feat-ext--analyzer="$pfeatextanalyzer"
+#end if
+
+#if $pfeatextbinary:
+ --p-feat-ext--binary
+#end if
+
+#if str($pfeatextdecodeerror):
+ --p-feat-ext--decode-error="$pfeatextdecodeerror"
+#end if
+
+#if str($pfeatextencoding):
+ --p-feat-ext--encoding="$pfeatextencoding"
+#end if
+
+#if str($pfeatextinput):
+ --p-feat-ext--input="$pfeatextinput"
+#end if
+
+#if $pnofeatextlowercase:
+ --p-no-feat-ext--lowercase
+#end if
+
+#if $pfeatextnfeatures:
+ --p-feat-ext--n-features=$pfeatextnfeatures
+#end if
+
+#if '__ob__' in str($pfeatextngramrange):
+  #set $pfeatextngramrange_temp = $pfeatextngramrange.replace('__ob__', '[')
+  #set $pfeatextngramrange = $pfeatextngramrange_temp
+#end if
+#if 'X' in str($pfeatextngramrange):
+  #set $pfeatextngramrange_temp = $pfeatextngramrange.replace('X', '\\')
+  #set $pfeatextngramrange = $pfeatextngramrange_temp
+#end if
+
+#if str($pfeatextngramrange):
+ --p-feat-ext--ngram-range="$pfeatextngramrange"
+#end if
+
+
+#if $pfeatextnonnegative:
+ --p-feat-ext--non-negative
+#end if
+
+#if str($pfeatextnorm):
+ --p-feat-ext--norm="$pfeatextnorm"
+#end if
+
+#if str($pfeatextpreprocessor):
+ --p-feat-ext--preprocessor="$pfeatextpreprocessor"
+#end if
+
+#if str($pfeatextstopwords):
+ --p-feat-ext--stop-words="$pfeatextstopwords"
+#end if
+
+#if str($pfeatextstripaccents):
+ --p-feat-ext--strip-accents="$pfeatextstripaccents"
+#end if
+
+#if '__ob__' in str($pfeatexttokenpattern):
+  #set $pfeatexttokenpattern_temp = $pfeatexttokenpattern.replace('__ob__', '[')
+  #set $pfeatexttokenpattern = $pfeatexttokenpattern_temp
+#end if
+#if 'X' in str($pfeatexttokenpattern):
+  #set $pfeatexttokenpattern_temp = $pfeatexttokenpattern.replace('X', '\\')
+  #set $pfeatexttokenpattern = $pfeatexttokenpattern_temp
+#end if
+
+#if str($pfeatexttokenpattern):
+ --p-feat-ext--token-pattern="$pfeatexttokenpattern"
+#end if
+
+
+#if str($pfeatexttokenizer):
+ --p-feat-ext--tokenizer="$pfeatexttokenizer"
+#end if
+
+--o-classifier=oclassifier
+;
+cp oclassifier.qza $oclassifier
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-reference-reads: ARTIFACT FeatureData[Sequence] [required]" name="ireferencereads" optional="False" type="data"/>
+		<param format="qza,no_unzip.zip" label="--i-class-weight: ARTIFACT FeatureTable[RelativeFrequency] [optional]" name="iclassweight" optional="True" type="data"/>
+
+		<conditional name="id_to_taxonomy_fp" optional="True">
+		   <param name="selector" type="select" label="Reference taxonomy to query">
+			  <option value="cached">Public databases</option>
+			  <option value="history">Databases from your history</option>
+		   </param>
+		   <when value="cached">
+			  <param argument="--taxonomy_fp" label="Reference taxonomy" type="select" optional="True">
+				 <options from_data_table="qiime_taxonomy" />
+			  </param>
+		   </when>
+		   <when value="history">
+			  <param argument="--taxonomy_fp" type="data" format="qza,no_unzip.zip" label="Reference databases" optional="True" />
+		   </when>
+		</conditional>
+
+		<param label="--p-classify--alpha: NUMBER [default: 0.001]" name="pclassifyalpha" optional="True" type="float" value="0.001"/>
+		<param label="--p-classify--chunk-size: INTEGER [default: 20000]" name="pclassifychunksize" optional="True" type="integer" value="20000"/>
+		<param label="--p-classify--class-prior: TEXT [default: 'null']" name="pclassifyclassprior" optional="True" type="text" value="'null'"/>
+		<param label="--p-classify--fit-prior: --p-no-classify--fit-prior [default: False]" name="pclassifyfitprior" selected="False" type="boolean"/>
+		<param label="--p-feat-ext--alternate-sign: --p-no-feat-ext--alternate-sign [default: False]" name="pfeatextalternatesign" selected="False" type="boolean"/>
+		<param label="--p-feat-ext--analyzer: TEXT [default: 'char_wb']" name="pfeatextanalyzer" optional="True" type="text" value="'char_wb'"/>
+		<param label="--p-feat-ext--binary: --p-no-feat-ext--binary [default: False]" name="pfeatextbinary" selected="False" type="boolean"/>
+		<param label="--p-feat-ext--decode-error: TEXT [default: 'strict']" name="pfeatextdecodeerror" optional="True" type="text" value="'strict'"/>
+		<param label="--p-feat-ext--encoding: TEXT [default: 'utf-8']" name="pfeatextencoding" optional="True" type="text" value="'utf-8'"/>
+		<param label="--p-feat-ext--input: TEXT [default: 'content']" name="pfeatextinput" optional="True" type="text" value="'content'"/>
+		<param label="--p-no-feat-ext--lowercase:  [default: False]" name="pnofeatextlowercase" selected="False" type="boolean"/>
+		<param label="--p-feat-ext--n-features: INTEGER [default: 8192]" name="pfeatextnfeatures" optional="True" type="integer" value="8192"/>
+		<param label="--p-feat-ext--ngram-range: TEXT [default: '[7, 7]']" name="pfeatextngramrange" optional="True" type="text" value="'[7, 7]"/>
+		<param label="--p-feat-ext--non-negative: --p-no-feat-ext--non-negative [default: False]" name="pfeatextnonnegative" selected="False" type="boolean"/>
+		<param label="--p-feat-ext--norm: TEXT [default: 'l2']" name="pfeatextnorm" optional="True" type="text" value="'l2'"/>
+		<param label="--p-feat-ext--preprocessor: TEXT [default: 'null']" name="pfeatextpreprocessor" optional="True" type="text" value="'null'"/>
+		<param label="--p-feat-ext--stop-words: TEXT [default: 'null']" name="pfeatextstopwords" optional="True" type="text" value="'null'"/>
+		<param label="--p-feat-ext--strip-accents: TEXT [default: 'null']" name="pfeatextstripaccents" optional="True" type="text" value="'null'"/>
+		<param label="--p-feat-ext--token-pattern: TEXT [default: '(?u)\\b\\w\\w+\\b']" name="pfeatexttokenpattern" optional="True" type="text" value="'(?u)\\b\\w\\w+\\b'"/>
+		<param label="--p-feat-ext--tokenizer: TEXT [default: 'null']" name="pfeatexttokenizer" optional="True" type="text" value="'null'"/>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: classifier.qza" name="oclassifier"/>
+	</outputs>
+	<help><![CDATA[
+Train the naive_bayes classifier
+################################
+
+Create a scikit-learn naive_bayes classifier for reads
+
+Parameters
+----------
+reference_reads : FeatureData[Sequence]
+	\
+
+reference_taxonomy : FeatureData[Taxonomy]
+	\
+
+class_weight : FeatureTable[RelativeFrequency], optional
+	\
+
+classify__alpha : Float, optional
+	\
+
+classify__chunk_size : Int, optional
+	\
+
+classify__class_prior : Str, optional
+	\
+
+classify__fit_prior : Bool, optional
+	\
+
+feat_ext__alternate_sign : Bool, optional
+	\
+
+feat_ext__analyzer : Str, optional
+	\
+
+feat_ext__binary : Bool, optional
+	\
+
+feat_ext__decode_error : Str, optional
+	\
+
+feat_ext__encoding : Str, optional
+	\
+
+feat_ext__input : Str, optional
+	\
+
+feat_ext__lowercase : Bool, optional
+	\
+
+feat_ext__n_features : Int, optional
+	\
+
+feat_ext__ngram_range : Str, optional
+	\
+
+feat_ext__non_negative : Bool, optional
+	\
+
+feat_ext__norm : Str, optional
+	\
+
+feat_ext__preprocessor : Str, optional
+	\
+
+feat_ext__stop_words : Str, optional
+	\
+
+feat_ext__strip_accents : Str, optional
+	\
+
+feat_ext__token_pattern : Str, optional
+	\
+
+feat_ext__tokenizer : Str, optional
+	\
+
+Returns
+-------
+classifier : TaxonomicClassifier
+	\
+
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_feature-classifier_fit-classifier-sklearn.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,86 @@
+<?xml version="1.0" ?>
+<tool id="qiime_feature-classifier_fit-classifier-sklearn" name="qiime feature-classifier fit-classifier-sklearn" version="2019.4">
+	<description> - Train an almost arbitrary scikit-learn classifier</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime feature-classifier fit-classifier-sklearn
+
+--i-reference-reads=$ireferencereads
+
+
+#if str( $id_to_taxonomy_fp.selector ) == 'history'
+#set $tax = $id_to_taxonomy_fp.taxonomy_fp
+--i-reference-taxonomy '$tax'
+#else:
+#set $tax = $id_to_taxonomy_fp.taxonomy_fp.fields.path
+--i-reference-taxonomy '$tax'
+#end if
+
+
+--p-classifier-specification="$pclassifierspecification"
+
+#if str($iclassweight) != 'None':
+ --i-class-weight=$iclassweight
+#end if
+
+--o-classifier=oclassifier
+;
+cp oclassifier.qza $oclassifier
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-reference-reads: ARTIFACT FeatureData[Sequence] [required]" name="ireferencereads" optional="False" type="data"/>
+		
+		<conditional name="id_to_taxonomy_fp" optional="True">
+		   <param name="selector" type="select" label="Reference taxonomy to query">
+			  <option value="cached">Public databases</option>
+			  <option value="history">Databases from your history</option>
+		   </param>
+		   <when value="cached">
+			  <param argument="--taxonomy_fp" label="Reference taxonomy" type="select" optional="True">
+				 <options from_data_table="qiime_taxonomy" />
+			  </param>
+		   </when>
+		   <when value="history">
+			  <param argument="--taxonomy_fp" type="data" format="qza,no_unzip.zip" label="Reference databases" optional="True" />
+		   </when>
+		</conditional>
+		
+		<param label="--p-classifier-specification: TEXT [required]" name="pclassifierspecification" optional="False" type="text"/>
+		<param format="qza,no_unzip.zip" label="--i-class-weight: ARTIFACT FeatureTable[RelativeFrequency] [optional]" name="iclassweight" optional="True" type="data"/>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: classifier.qza" name="oclassifier"/>
+	</outputs>
+	<help><![CDATA[
+rain an almost arbitrary scikit-learn classifier
+################################################
+
+Train a scikit-learn classifier to classify reads.
+
+Parameters
+----------
+reference_reads : FeatureData[Sequence]
+	\
+
+reference_taxonomy : FeatureData[Taxonomy]
+	\
+
+classifier_specification : Str
+	\
+
+class_weight : FeatureTable[RelativeFrequency], optional
+	\
+
+Returns
+-------
+classifier : TaxonomicClassifier
+	\
+
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_feature-table_core-features.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,69 @@
+<?xml version="1.0" ?>
+<tool id="qiime_feature-table_core-features" name="qiime feature-table core-features" version="2019.4">
+	<description> - Identify core features in table</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime feature-table core-features
+
+--i-table=$itable
+
+#if $pminfraction:
+ --p-min-fraction=$pminfraction
+#end if
+
+#if $pmaxfraction:
+ --p-max-fraction=$pmaxfraction
+#end if
+
+#if $psteps:
+ --p-steps=$psteps
+#end if
+
+--o-visualization=ovisualization
+;
+qiime tools export --input-path ovisualization.qzv --output-path out   && mkdir -p '$ovisualization.files_path'
+&& cp -r out/* '$ovisualization.files_path'
+&& mv '$ovisualization.files_path/index.html' '$ovisualization';
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-table: ARTIFACT FeatureTable[Frequency] The feature table to use in core features calculations.                                [required]" name="itable" optional="False" type="data"/>
+		<param label="--p-min-fraction: PROPORTION Range(0.0, 1.0, inclusive_start=False) The minimum fraction of samples that a feature must be observed in for that feature to be considered a core feature.                                 [default: 0.5]" name="pminfraction" optional="True" type="float" value="0.5"/>
+		<param label="--p-max-fraction: PROPORTION Range(0.0, 1.0, inclusive_end=True) The maximum fraction of samples that a feature must be observed in for that feature to be considered a core feature.                                 [default: 1.0]" name="pmaxfraction" optional="True" type="float" value="1.0"/>
+		<param label="--p-steps: INTEGER    The number of steps to take between `min-fraction` and Range(2, None)     `max-fraction` for core features calculations. This parameter has no effect if `min-fraction` and `max-fraction` are the same value.        [default: 11]" name="psteps" optional="True" type="integer" value="11"/>
+	</inputs>
+	<outputs>
+		<data format="html" label="${tool.name} on ${on_string}: visualization.qzv" name="ovisualization"/>
+	</outputs>
+	<help><![CDATA[
+Train an almost arbitrary scikit-learn classifier
+#################################################
+
+Train a scikit-learn classifier to classify reads.
+
+Parameters
+----------
+reference_reads : FeatureData[Sequence]
+	\
+
+reference_taxonomy : FeatureData[Taxonomy]
+	\
+
+classifier_specification : Str
+	\
+
+class_weight : FeatureTable[RelativeFrequency], optional
+	\
+
+Returns
+-------
+classifier : TaxonomicClassifier
+	\
+
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_feature-table_filter-features.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,121 @@
+<?xml version="1.0" ?>
+<tool id="qiime_feature-table_filter-features" name="qiime feature-table filter-features" version="2019.4">
+	<description> - Filter features from table</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime feature-table filter-features
+
+--i-table=$itable
+
+
+#if $input_files_mmetadatafile:
+#def list_dict_to_string(list_dict):
+	#set $file_list = list_dict[0]['additional_input'].__getattr__('file_name')
+	#for d in list_dict[1:]:
+		#set $file_list = $file_list + ' --m-metadata-file=' + d['additional_input'].__getattr__('file_name')
+	#end for
+	#return $file_list
+#end def
+ --m-metadata-file=$list_dict_to_string($input_files_mmetadatafile)
+#end if
+
+
+#if $pminfrequency:
+ --p-min-frequency=$pminfrequency
+#end if
+
+#if str($pmaxfrequency):
+ --p-max-frequency="$pmaxfrequency"
+#end if
+
+#if $pminsamples:
+ --p-min-samples=$pminsamples
+#end if
+
+#if str($pmaxsamples):
+ --p-max-samples="$pmaxsamples"
+#end if
+ --m-metadata-file=mmetadatafile
+#if '__sq__' in str($pwhere):
+  #set $pwhere_temp = $pwhere.replace('__sq__', "'")
+  #set $pwhere = $pwhere_temp
+#end if
+
+#if str($pwhere):
+ --p-where="$pwhere"
+#end if
+
+#if $pexcludeids:
+ --p-exclude-ids
+#end if
+
+--o-filtered-table=ofilteredtable
+;
+cp ofilteredtable.qza $ofilteredtable
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-table: ARTIFACT FeatureTable[Frequency] The feature table from which features should be filtered.                                    [required]" name="itable" optional="False" type="data"/>
+		<param label="--p-min-frequency: INTEGER The minimum total frequency that a feature must have to be retained.                            [default: 0]" name="pminfrequency" optional="True" type="integer" value="0"/>
+		<param label="--p-max-frequency: INTEGER The maximum total frequency that a feature can have to be retained. If no value is provided this will default to infinity (i.e., no maximum frequency filter will be applied).                                    [optional]" name="pmaxfrequency" optional="True" type="integer"/>
+		<param label="--p-min-samples: INTEGER The minimum number of samples that a feature must be observed in to be retained.                [default: 0]" name="pminsamples" optional="True" type="integer" value="0"/>
+		<param label="--p-max-samples: INTEGER The maximum number of samples that a feature can be observed in to be retained. If no value is provided this will default to infinity (i.e., no maximum sample filter will be applied).                     [optional]" name="pmaxsamples" optional="True" type="integer"/>
+		<param label="--p-where: TEXT       SQLite WHERE clause specifying feature metadata criteria that must be met to be included in the filtered feature table. If not provided, all features in `metadata` that are also in the feature table will be retained.                                 [optional]" name="pwhere" optional="True" type="text"/>
+		<param label="--p-exclude-ids: --p-no-exclude-ids If true, the features selected by `metadata` or `where` parameters will be excluded from the filtered table instead of being retained.       [default: False]" name="pexcludeids" selected="False" type="boolean"/>
+
+		<repeat name="input_files_mmetadatafile" optional="True" title="--m-metadata-file">
+			<param label="--m-metadata-file: Metadata file or artifact viewable as metadata. This option may be supplied multiple times to merge metadata. [optional]" name="additional_input" type="data" format="tabular,qza,no_unzip.zip" />
+		</repeat>
+
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: filteredtable.qza" name="ofilteredtable"/>
+	</outputs>
+	<help><![CDATA[
+Filter features from table
+##########################
+
+Filter features from table based on frequency and/or metadata. Any samples
+with a frequency of zero after feature filtering will also be removed. See
+the filtering tutorial on https://docs.qiime2.org for additional details.
+
+Parameters
+----------
+table : FeatureTable[Frequency]
+    The feature table from which features should be filtered.
+min_frequency : Int, optional
+    The minimum total frequency that a feature must have to be retained.
+max_frequency : Int, optional
+    The maximum total frequency that a feature can have to be retained. If
+    no value is provided this will default to infinity (i.e., no maximum
+    frequency filter will be applied).
+min_samples : Int, optional
+    The minimum number of samples that a feature must be observed in to be
+    retained.
+max_samples : Int, optional
+    The maximum number of samples that a feature can be observed in to be
+    retained. If no value is provided this will default to infinity (i.e.,
+    no maximum sample filter will be applied).
+metadata : Metadata, optional
+    Feature metadata used with `where` parameter when selecting features to
+    retain, or with `exclude_ids` when selecting features to discard.
+where : Str, optional
+    SQLite WHERE clause specifying feature metadata criteria that must be
+    met to be included in the filtered feature table. If not provided, all
+    features in `metadata` that are also in the feature table will be
+    retained.
+exclude_ids : Bool, optional
+    If true, the features selected by `metadata` or `where` parameters will
+    be excluded from the filtered table instead of being retained.
+
+Returns
+-------
+filtered_table : FeatureTable[Frequency]
+    The resulting feature table filtered by feature.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_feature-table_filter-samples.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,120 @@
+<?xml version="1.0" ?>
+<tool id="qiime_feature-table_filter-samples" name="qiime feature-table filter-samples" version="2019.4">
+	<description> - Filter samples from table</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime feature-table filter-samples
+
+--i-table=$itable
+
+
+#if $input_files_mmetadatafile:
+#def list_dict_to_string(list_dict):
+	#set $file_list = list_dict[0]['additional_input'].__getattr__('file_name')
+	#for d in list_dict[1:]:
+		#set $file_list = $file_list + ' --m-metadata-file=' + d['additional_input'].__getattr__('file_name')
+	#end for
+	#return $file_list
+#end def
+ --m-metadata-file=$list_dict_to_string($input_files_mmetadatafile)
+#end if
+
+
+#if $pminfrequency:
+ --p-min-frequency=$pminfrequency
+#end if
+
+#if str($pmaxfrequency):
+ --p-max-frequency="$pmaxfrequency"
+#end if
+
+#if $pminfeatures:
+ --p-min-features=$pminfeatures
+#end if
+
+#if str($pmaxfeatures):
+ --p-max-features="$pmaxfeatures"
+#end if
+
+#if '__sq__' in str($pwhere):
+  #set $pwhere_temp = $pwhere.replace('__sq__', "'")
+  #set $pwhere = $pwhere_temp
+#end if
+
+#if str($pwhere):
+ --p-where="$pwhere"
+#end if
+
+
+#if $pexcludeids:
+ --p-exclude-ids
+#end if
+
+--o-filtered-table=ofilteredtable
+;
+cp ofilteredtable.qza $ofilteredtable
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-table: ARTIFACT FeatureTable[Frequency¹ | RelativeFrequency² | PresenceAbsence³ | Composition⁴] The feature table from which samples should be filtered.                                    [required]" name="itable" optional="False" type="data"/>
+		<param label="--p-min-frequency: INTEGER The minimum total frequency that a sample must have to be retained.                               [default: 0]" name="pminfrequency" optional="True" type="integer" value="0"/>
+		<param label="--p-max-frequency: INTEGER The maximum total frequency that a sample can have to be retained. If no value is provided this will default to infinity (i.e., no maximum frequency filter will be applied).                                    [optional]" name="pmaxfrequency" optional="True" type="integer"/>
+		<param label="--p-min-features: INTEGER The minimum number of features that a sample must have to be retained.                            [default: 0]" name="pminfeatures" optional="True" type="integer" value="0"/>
+		<param label="--p-max-features: INTEGER The maximum number of features that a sample can have to be retained. If no value is provided this will default to infinity (i.e., no maximum feature filter will be applied).                            [optional]" name="pmaxfeatures" optional="True" type="integer"/>
+		<param label="--p-where: TEXT       SQLite WHERE clause specifying sample metadata criteria that must be met to be included in the filtered feature table. If not provided, all samples in `metadata` that are also in the feature table will be retained.                                    [optional]" name="pwhere" optional="True" type="text"/>
+		<param label="--p-exclude-ids: --p-no-exclude-ids If true, the samples selected by `metadata` or `where` parameters will be excluded from the filtered table instead of being retained.             [default: False]" name="pexcludeids" selected="False" type="boolean"/>
+
+		<repeat name="input_files_mmetadatafile" optional="True" title="--m-metadata-file">
+			<param label="--m-metadata-file: Metadata file or artifact viewable as metadata. This option may be supplied multiple times to merge metadata. [optional]" name="additional_input" type="data" format="tabular,qza,no_unzip.zip" />
+		</repeat>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: filteredtable.qza" name="ofilteredtable"/>
+	</outputs>
+	<help><![CDATA[
+Filter samples from table
+#########################
+
+Filter samples from table based on frequency and/or metadata. Any features
+with a frequency of zero after sample filtering will also be removed. See
+the filtering tutorial on https://docs.qiime2.org for additional details.
+
+Parameters
+----------
+table : FeatureTable[Frequency¹ | RelativeFrequency² | PresenceAbsence³ | Composition⁴]
+    The feature table from which samples should be filtered.
+min_frequency : Int, optional
+    The minimum total frequency that a sample must have to be retained.
+max_frequency : Int, optional
+    The maximum total frequency that a sample can have to be retained. If
+    no value is provided this will default to infinity (i.e., no maximum
+    frequency filter will be applied).
+min_features : Int, optional
+    The minimum number of features that a sample must have to be retained.
+max_features : Int, optional
+    The maximum number of features that a sample can have to be retained.
+    If no value is provided this will default to infinity (i.e., no maximum
+    feature filter will be applied).
+metadata : Metadata, optional
+    Sample metadata used with `where` parameter when selecting samples to
+    retain, or with `exclude_ids` when selecting samples to discard.
+where : Str, optional
+    SQLite WHERE clause specifying sample metadata criteria that must be
+    met to be included in the filtered feature table. If not provided, all
+    samples in `metadata` that are also in the feature table will be
+    retained.
+exclude_ids : Bool, optional
+    If true, the samples selected by `metadata` or `where` parameters will
+    be excluded from the filtered table instead of being retained.
+
+Returns
+-------
+filtered_table : FeatureTable[Frequency¹ | RelativeFrequency² | PresenceAbsence³ | Composition⁴]
+    The resulting feature table filtered by sample.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_feature-table_filter-seqs.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,97 @@
+<?xml version="1.0" ?>
+<tool id="qiime_feature-table_filter-seqs" name="qiime feature-table filter-seqs" version="2019.4">
+	<description> - Filter features from sequences</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime feature-table filter-seqs
+
+--i-data=$idata
+
+
+#if $input_files_mmetadatafile:
+#def list_dict_to_string(list_dict):
+	#set $file_list = list_dict[0]['additional_input'].__getattr__('file_name')
+	#for d in list_dict[1:]:
+		#set $file_list = $file_list + ' --m-metadata-file=' + d['additional_input'].__getattr__('file_name')
+	#end for
+	#return $file_list
+#end def
+ --m-metadata-file=$list_dict_to_string($input_files_mmetadatafile)
+#end if
+
+
+#if str($itable) != 'None':
+ --i-table=$itable
+#end if
+
+#if '__sq__' in str($pwhere):
+  #set $pwhere_temp = $pwhere.replace('__sq__', "'")
+  #set $pwhere = $pwhere_temp
+#end if
+
+#if str($pwhere):
+ --p-where="$pwhere"
+#end if
+
+#if $pexcludeids:
+ --p-exclude-ids
+#end if
+
+--o-filtered-data=ofiltereddata
+;
+cp ofiltereddata.qza $ofiltereddata
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-data: ARTIFACT FeatureData[Sequence] The sequences from which features should be filtered. [required]" name="idata" optional="False" type="data"/>
+		<param format="qza,no_unzip.zip" label="--i-table: ARTIFACT FeatureTable[Frequency] Table containing feature ids used for id-based filtering.                                   [optional]" name="itable" optional="True" type="data"/>
+		<param label="--p-where: TEXT       SQLite WHERE clause specifying feature metadata criteria that must be met to be included in the filtered feature table. If not provided, all features in `metadata` that are also in the sequences will be retained.                                    [optional]" name="pwhere" optional="True" type="text"/>
+		<param label="--p-exclude-ids: --p-no-exclude-ids If true, the features selected by the `metadata` (with or without the `where` parameter) or `table` parameter will be excluded from the filtered sequences instead of being retained.                        [default: False]" name="pexcludeids" selected="False" type="boolean"/>
+
+		<repeat name="input_files_mmetadatafile" optional="True" title="--m-metadata-file">
+			<param label="--m-metadata-file: Metadata file or artifact viewable as metadata. This option may be supplied multiple times to merge metadata. [optional]" name="additional_input" type="data" format="tabular,qza,no_unzip.zip" />
+		</repeat>
+
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: filtereddata.qza" name="ofiltereddata"/>
+	</outputs>
+	<help><![CDATA[
+Filter features from sequences
+##############################
+
+Filter features from sequences based on a feature table or metadata. See
+the filtering tutorial on https://docs.qiime2.org for additional details.
+This method can filter based on ids in a table or a metadata file, but not
+both (i.e., the table and metadata options are mutually exclusive).
+
+Parameters
+----------
+data : FeatureData[Sequence]
+    The sequences from which features should be filtered.
+table : FeatureTable[Frequency], optional
+    Table containing feature ids used for id-based filtering.
+metadata : Metadata, optional
+    Feature metadata used for id-based filtering, with `where` parameter
+    when selecting features to retain, or with `exclude_ids` when selecting
+    features to discard.
+where : Str, optional
+    SQLite WHERE clause specifying feature metadata criteria that must be
+    met to be included in the filtered feature table. If not provided, all
+    features in `metadata` that are also in the sequences will be retained.
+exclude_ids : Bool, optional
+    If true, the features selected by the `metadata` (with or without the
+    `where` parameter) or `table` parameter will be excluded from the
+    filtered sequences instead of being retained.
+
+Returns
+-------
+filtered_data : FeatureData[Sequence]
+    The resulting filtered sequences.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_feature-table_group.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,87 @@
+<?xml version="1.0" ?>
+<tool id="qiime_feature-table_group" name="qiime feature-table group" version="2019.4">
+	<description> - Group samples or features by a metadata column</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime feature-table group
+
+--i-table=$itable
+--p-axis=$paxis
+--m-metadata-column="$mmetadatacolumn"
+--p-mode=$pmode
+
+
+#if $input_files_mmetadatafile:
+#def list_dict_to_string(list_dict):
+	#set $file_list = list_dict[0]['additional_input'].__getattr__('file_name')
+	#for d in list_dict[1:]:
+		#set $file_list = $file_list + ' --m-metadata-file=' + d['additional_input'].__getattr__('file_name')
+	#end for
+	#return $file_list
+#end def
+ --m-metadata-file=$list_dict_to_string($input_files_mmetadatafile)
+#end if
+
+
+--o-grouped-table=ogroupedtable
+;
+cp ogroupedtable.qza $ogroupedtable
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-table: ARTIFACT FeatureTable[Frequency] The table to group samples or features on.   [required]" name="itable" optional="False" type="data"/>
+		<param label="--p-axis: " name="paxis" optional="False" type="select">
+			<option value="feature">feature</option>
+			<option value="sample">sample</option>
+		</param>
+		<param label="--m-metadata-column: COLUMN  MetadataColumn[Categorical] A column defining the groups. Each unique value will become a new ID for the table on the given `axis`. [required]" name="mmetadatacolumn" optional="False" type="text"/>
+		<param label="--p-mode: " name="pmode" optional="False" type="select">
+			<option value="median-ceiling">median-ceiling</option>
+			<option value="mean-ceiling">mean-ceiling</option>
+			<option value="sum">sum</option>
+		</param>
+
+		<repeat name="input_files_mmetadatafile" optional="True" title="--m-metadata-file">
+			<param label="--m-metadata-file: Metadata file or artifact viewable as metadata. This option may be supplied multiple times to merge metadata. [optional]" name="additional_input" type="data" format="tabular,qza,no_unzip.zip" />
+		</repeat>
+
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: groupedtable.qza" name="ogroupedtable"/>
+	</outputs>
+	<help><![CDATA[
+Group samples or features by a metadata column
+##############################################
+
+Group samples or features in a feature table using metadata to define the
+mapping of IDs to a group.
+
+Parameters
+----------
+table : FeatureTable[Frequency]
+    The table to group samples or features on.
+axis : Str % Choices('sample', 'feature')
+    Along which axis to group. Each ID in the given axis must exist in
+    `metadata`.
+metadata : MetadataColumn[Categorical]
+    A column defining the groups. Each unique value will become a new ID
+    for the table on the given `axis`.
+mode : Str % Choices('median-ceiling', 'mean-ceiling', 'sum')
+    How to combine samples or features within a group. `sum` will sum the
+    frequencies across all samples or features within a group; `mean-
+    ceiling` will take the ceiling of the mean of these frequencies;
+    `median-ceiling` will take the ceiling of the median of these
+    frequencies.
+
+Returns
+-------
+grouped_table : FeatureTable[Frequency]
+    A table that has been grouped along the given `axis`. IDs on that axis
+    are replaced by values in the `metadata` column.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_feature-table_heatmap.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,332 @@
+<?xml version="1.0" ?>
+<tool id="qiime_feature-table_heatmap" name="qiime feature-table heatmap" version="2019.4">
+	<description> - Generate a heatmap representation of a feature table</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+	qiime feature-table heatmap
+
+--i-table=$itable
+
+#if $input_files_mmetadatafile:
+#def list_dict_to_string(list_dict):
+	#set $file_list = list_dict[0]['additional_input'].__getattr__('file_name')
+	#for d in list_dict[1:]:
+		#set $file_list = $file_list + ' --m-metadata-file=' + d['additional_input'].__getattr__('file_name')
+	#end for
+	#return $file_list
+#end def
+ --m-metadata-file=$list_dict_to_string($input_files_mmetadatafile)
+#end if
+
+
+#if str($mmetadatacolumn):
+ --m-metadata-column="$mmetadatacolumn"
+#end if
+
+#if $pnonormalize:
+ --p-no-normalize
+#end if
+
+#if str($ptitle):
+ --p-title="$ptitle"
+#end if
+
+#if str($pmetric) != 'None':
+ --p-metric=$pmetric
+#end if
+
+#if str($pmethod) != 'None':
+ --p-method=$pmethod
+#end if
+
+#if str($pcluster) != 'None':
+ --p-cluster=$pcluster
+#end if
+
+#if str($pcolorscheme) != 'None':
+ --p-color-scheme=$pcolorscheme
+#end if
+
+--o-visualization=ovisualization
+;
+qiime tools export --input-path ovisualization.qzv --output-path out   && mkdir -p '$ovisualization.files_path'
+&& cp -r out/* '$ovisualization.files_path'
+&& mv '$ovisualization.files_path/index.html' '$ovisualization'
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-table: ARTIFACT FeatureTable[Frequency] The feature table to visualize.            [required]" name="itable" optional="False" type="data"/>
+		<param label="--m-metadata-column: COLUMN  MetadataColumn[Categorical] Annotate the sample IDs with these metadata values. When metadata is present and `cluster`='feature', samples will be sorted by the metadata values. [optional]" name="mmetadatacolumn" optional="True" type="text"/>
+		<param label="--p-no-normalize: Do not normalize the feature table by adding a psuedocount of 1 and then taking the log10 of the table. [default: False]" name="pnonormalize" selected="False" type="boolean"/>
+		<param label="--p-title: TEXT         Optional custom plot title.                [optional]" name="ptitle" optional="True" type="text"/>
+		<param label="--p-metric: " name="pmetric" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="kulsinski">kulsinski</option>
+			<option value="correlation">correlation</option>
+			<option value="hamming">hamming</option>
+			<option value="canberra">canberra</option>
+			<option value="sqeuclidean">sqeuclidean</option>
+			<option value="sokalmichener">sokalmichener</option>
+			<option value="cityblock">cityblock</option>
+			<option value="braycurtis">braycurtis</option>
+			<option value="matching">matching</option>
+			<option value="russellrao">russellrao</option>
+			<option value="cosine">cosine</option>
+			<option value="yule">yule</option>
+			<option value="minkowski">minkowski</option>
+			<option value="euclidean">euclidean</option>
+			<option value="rogerstanimoto">rogerstanimoto</option>
+			<option value="seuclidean">seuclidean</option>
+			<option value="jaccard">jaccard</option>
+			<option value="sokalsneath">sokalsneath</option>
+			<option value="chebyshev">chebyshev</option>
+			<option value="dice">dice</option>
+			<option value="mahalanobis">mahalanobis</option>
+		</param>
+		<param label="--p-method: " name="pmethod" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="complete">complete</option>
+			<option value="centroid">centroid</option>
+			<option value="weighted">weighted</option>
+			<option value="single">single</option>
+			<option value="ward">ward</option>
+			<option value="average">average</option>
+			<option value="median">median</option>
+		</param>
+		<param label="--p-cluster: " name="pcluster" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="features">features</option>
+			<option value="both">both</option>
+			<option value="samples">samples</option>
+			<option value="none">none</option>
+		</param>
+		<param label="--p-color-scheme: " name="pcolorscheme" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="bone">bone</option>
+			<option value="PRGn_r">PRGn_r</option>
+			<option value="Vega10_r">Vega10_r</option>
+			<option value="GnBu">GnBu</option>
+			<option value="hsv">hsv</option>
+			<option value="binary_r">binary_r</option>
+			<option value="GnBu_r">GnBu_r</option>
+			<option value="icefire">icefire</option>
+			<option value="winter">winter</option>
+			<option value="BuGn_r">BuGn_r</option>
+			<option value="plasma_r">plasma_r</option>
+			<option value="Vega20_r">Vega20_r</option>
+			<option value="summer_r">summer_r</option>
+			<option value="cool_r">cool_r</option>
+			<option value="Spectral">Spectral</option>
+			<option value="gist_heat_r">gist_heat_r</option>
+			<option value="Vega20b_r">Vega20b_r</option>
+			<option value="mako_r">mako_r</option>
+			<option value="RdBu_r">RdBu_r</option>
+			<option value="cubehelix">cubehelix</option>
+			<option value="tab20b_r">tab20b_r</option>
+			<option value="CMRmap">CMRmap</option>
+			<option value="Greys">Greys</option>
+			<option value="PuOr">PuOr</option>
+			<option value="cubehelix_r">cubehelix_r</option>
+			<option value="Wistia">Wistia</option>
+			<option value="gnuplot2">gnuplot2</option>
+			<option value="bwr">bwr</option>
+			<option value="gnuplot_r">gnuplot_r</option>
+			<option value="viridis">viridis</option>
+			<option value="gist_ncar_r">gist_ncar_r</option>
+			<option value="gist_ncar">gist_ncar</option>
+			<option value="plasma">plasma</option>
+			<option value="PuRd">PuRd</option>
+			<option value="afmhot">afmhot</option>
+			<option value="icefire_r">icefire_r</option>
+			<option value="tab20b">tab20b</option>
+			<option value="gist_yarg_r">gist_yarg_r</option>
+			<option value="hot">hot</option>
+			<option value="YlOrRd_r">YlOrRd_r</option>
+			<option value="Vega20c">Vega20c</option>
+			<option value="Dark2_r">Dark2_r</option>
+			<option value="Set3">Set3</option>
+			<option value="PuBu">PuBu</option>
+			<option value="magma">magma</option>
+			<option value="Pastel2">Pastel2</option>
+			<option value="terrain">terrain</option>
+			<option value="autumn_r">autumn_r</option>
+			<option value="spectral">spectral</option>
+			<option value="brg">brg</option>
+			<option value="Set3_r">Set3_r</option>
+			<option value="coolwarm">coolwarm</option>
+			<option value="Set2_r">Set2_r</option>
+			<option value="Paired_r">Paired_r</option>
+			<option value="tab20c_r">tab20c_r</option>
+			<option value="mako">mako</option>
+			<option value="gist_rainbow_r">gist_rainbow_r</option>
+			<option value="RdBu">RdBu</option>
+			<option value="PuBu_r">PuBu_r</option>
+			<option value="jet_r">jet_r</option>
+			<option value="gist_earth_r">gist_earth_r</option>
+			<option value="Greys_r">Greys_r</option>
+			<option value="gray">gray</option>
+			<option value="winter_r">winter_r</option>
+			<option value="rocket">rocket</option>
+			<option value="Set2">Set2</option>
+			<option value="seismic_r">seismic_r</option>
+			<option value="Pastel1">Pastel1</option>
+			<option value="RdYlGn_r">RdYlGn_r</option>
+			<option value="copper">copper</option>
+			<option value="spring_r">spring_r</option>
+			<option value="BuGn">BuGn</option>
+			<option value="Greens">Greens</option>
+			<option value="Blues">Blues</option>
+			<option value="PiYG_r">PiYG_r</option>
+			<option value="YlGnBu">YlGnBu</option>
+			<option value="Paired">Paired</option>
+			<option value="YlGn_r">YlGn_r</option>
+			<option value="RdPu_r">RdPu_r</option>
+			<option value="BrBG_r">BrBG_r</option>
+			<option value="bone_r">bone_r</option>
+			<option value="RdYlBu">RdYlBu</option>
+			<option value="gist_rainbow">gist_rainbow</option>
+			<option value="bwr_r">bwr_r</option>
+			<option value="inferno_r">inferno_r</option>
+			<option value="inferno">inferno</option>
+			<option value="gist_stern_r">gist_stern_r</option>
+			<option value="gray_r">gray_r</option>
+			<option value="Purples">Purples</option>
+			<option value="RdGy">RdGy</option>
+			<option value="hot_r">hot_r</option>
+			<option value="YlOrBr_r">YlOrBr_r</option>
+			<option value="nipy_spectral">nipy_spectral</option>
+			<option value="nipy_spectral_r">nipy_spectral_r</option>
+			<option value="ocean">ocean</option>
+			<option value="Set1">Set1</option>
+			<option value="Dark2">Dark2</option>
+			<option value="Oranges">Oranges</option>
+			<option value="Pastel1_r">Pastel1_r</option>
+			<option value="Oranges_r">Oranges_r</option>
+			<option value="Pastel2_r">Pastel2_r</option>
+			<option value="YlGn">YlGn</option>
+			<option value="Vega20b">Vega20b</option>
+			<option value="PuRd_r">PuRd_r</option>
+			<option value="PuBuGn_r">PuBuGn_r</option>
+			<option value="afmhot_r">afmhot_r</option>
+			<option value="spring">spring</option>
+			<option value="tab20_r">tab20_r</option>
+			<option value="PuBuGn">PuBuGn</option>
+			<option value="gist_yarg">gist_yarg</option>
+			<option value="PiYG">PiYG</option>
+			<option value="flag">flag</option>
+			<option value="rainbow_r">rainbow_r</option>
+			<option value="hsv_r">hsv_r</option>
+			<option value="prism_r">prism_r</option>
+			<option value="ocean_r">ocean_r</option>
+			<option value="magma_r">magma_r</option>
+			<option value="flag_r">flag_r</option>
+			<option value="Blues_r">Blues_r</option>
+			<option value="gnuplot2_r">gnuplot2_r</option>
+			<option value="gist_gray">gist_gray</option>
+			<option value="spectral_r">spectral_r</option>
+			<option value="CMRmap_r">CMRmap_r</option>
+			<option value="rainbow">rainbow</option>
+			<option value="gnuplot">gnuplot</option>
+			<option value="vlag">vlag</option>
+			<option value="Set1_r">Set1_r</option>
+			<option value="Accent">Accent</option>
+			<option value="coolwarm_r">coolwarm_r</option>
+			<option value="brg_r">brg_r</option>
+			<option value="pink_r">pink_r</option>
+			<option value="YlOrBr">YlOrBr</option>
+			<option value="Vega20c_r">Vega20c_r</option>
+			<option value="Wistia_r">Wistia_r</option>
+			<option value="RdGy_r">RdGy_r</option>
+			<option value="tab20">tab20</option>
+			<option value="BrBG">BrBG</option>
+			<option value="rocket_r">rocket_r</option>
+			<option value="OrRd_r">OrRd_r</option>
+			<option value="YlGnBu_r">YlGnBu_r</option>
+			<option value="viridis_r">viridis_r</option>
+			<option value="copper_r">copper_r</option>
+			<option value="gist_heat">gist_heat</option>
+			<option value="Vega10">Vega10</option>
+			<option value="PuOr_r">PuOr_r</option>
+			<option value="binary">binary</option>
+			<option value="pink">pink</option>
+			<option value="Reds">Reds</option>
+			<option value="Purples_r">Purples_r</option>
+			<option value="cool">cool</option>
+			<option value="prism">prism</option>
+			<option value="terrain_r">terrain_r</option>
+			<option value="BuPu_r">BuPu_r</option>
+			<option value="Spectral_r">Spectral_r</option>
+			<option value="Greens_r">Greens_r</option>
+			<option value="gist_gray_r">gist_gray_r</option>
+			<option value="RdYlGn">RdYlGn</option>
+			<option value="tab20c">tab20c</option>
+			<option value="Reds_r">Reds_r</option>
+			<option value="tab10">tab10</option>
+			<option value="summer">summer</option>
+			<option value="gist_stern">gist_stern</option>
+			<option value="tab10_r">tab10_r</option>
+			<option value="YlOrRd">YlOrRd</option>
+			<option value="jet">jet</option>
+			<option value="Vega20">Vega20</option>
+			<option value="vlag_r">vlag_r</option>
+			<option value="RdPu">RdPu</option>
+			<option value="OrRd">OrRd</option>
+			<option value="Accent_r">Accent_r</option>
+			<option value="autumn">autumn</option>
+			<option value="BuPu">BuPu</option>
+			<option value="RdYlBu_r">RdYlBu_r</option>
+			<option value="gist_earth">gist_earth</option>
+			<option value="seismic">seismic</option>
+			<option value="PRGn">PRGn</option>
+		</param>
+
+		<repeat name="input_files_mmetadatafile" optional="True" title="--m-metadata-file">
+			<param label="--m-metadata-file: Metadata file or artifact viewable as metadata. This option may be supplied multiple times to merge metadata. [optional]" name="additional_input" type="data" format="tabular,qza,no_unzip.zip" />
+		</repeat>
+	</inputs>
+	<outputs>
+		<data format="html" label="${tool.name} on ${on_string}: visualization.qzv" name="ovisualization"/>
+	</outputs>
+	<help><![CDATA[
+Generate a heatmap representation of a feature table
+####################################################
+
+Generate a heatmap representation of a feature table with optional
+clustering on both the sample and feature axes.  Tip: To generate a heatmap
+containing taxonomic annotations, use `qiime taxa collapse` to collapse the
+feature table at the desired taxonomic level.
+
+Parameters
+----------
+table : FeatureTable[Frequency]
+    The feature table to visualize.
+metadata : MetadataColumn[Categorical], optional
+    Annotate the sample IDs with these metadata values. When metadata is
+    present and \`cluster\`='feature', samples will be sorted by the metadata
+    values.
+normalize : Bool, optional
+    Normalize the feature table by adding a psuedocount of 1 and then
+    taking the log10 of the table.
+title : Str, optional
+    Optional custom plot title.
+metric : Str % Choices('sokalmichener', 'yule', 'russellrao', 'rogerstanimoto', 'minkowski', 'correlation', 'jaccard', 'cosine', 'chebyshev', 'euclidean', 'sqeuclidean', 'cityblock', 'matching', 'dice', 'mahalanobis', 'kulsinski', 'seuclidean', 'sokalsneath', 'canberra', 'hamming', 'braycurtis'), optional
+    Metrics exposed by seaborn (see http://seaborn.pydata.org/generated/sea
+    born.clustermap.html#seaborn.clustermap for more detail).
+method : Str % Choices('average', 'complete', 'median', 'centroid', 'single', 'ward', 'weighted'), optional
+    Clustering methods exposed by seaborn (see http://seaborn.pydata.org/ge
+    nerated/seaborn.clustermap.html#seaborn.clustermap for more detail).
+cluster : Str % Choices('features', 'samples', 'none', 'both'), optional
+    Specify which axes to cluster.
+color_scheme : Str % Choices('rocket', 'RdYlBu_r', 'winter', 'viridis', 'BrBG', 'magma_r', 'YlOrBr', 'seismic', 'Set1', 'gist_yarg_r', 'gist_rainbow', 'autumn_r', 'Wistia_r', 'cool_r', 'hsv_r', 'flag', 'Vega20b_r', 'mako_r', 'coolwarm', 'Vega20_r', 'jet', 'cubehelix_r', 'bwr_r', 'brg', 'RdPu', 'gist_ncar', 'RdPu_r', 'cool', 'gnuplot_r', 'Set3', 'ocean_r', 'tab20b', 'tab20b_r', 'OrRd_r', 'Spectral_r', 'gray', 'OrRd', 'prism_r', 'Wistia', 'hot', 'icefire', 'plasma', 'Purples_r', 'viridis_r', 'gnuplot2_r', 'CMRmap', 'YlGnBu_r', 'Set3_r', 'PuRd_r', 'Reds_r', 'gray_r', 'Dark2', 'Vega20b', 'Paired', 'gist_yarg', 'RdYlGn_r', 'Greens', 'YlGnBu', 'tab20', 'gnuplot', 'PuBuGn_r', 'spectral_r', 'tab20c_r', 'gist_rainbow_r', 'hot_r', 'spring_r', 'gist_gray', 'Blues_r', 'Spectral', 'magma', 'GnBu_r', 'inferno_r', 'tab10', 'gist_gray_r', 'seismic_r', 'spring', 'BuPu_r', 'spectral', 'BrBG_r', 'PiYG', 'inferno', 'YlOrBr_r', 'Set1_r', 'YlOrRd_r', 'summer', 'vlag', 'Oranges_r', 'Dark2_r', 'binary_r', 'icefire_r', 'RdYlGn', 'hsv', 'gist_heat', 'PRGn_r', 'pink_r', 'Pastel2_r', 'copper_r', 'BuGn', 'gist_stern_r', 'PuRd', 'gist_earth_r', 'YlOrRd', 'Reds', 'gist_earth', 'Greens_r', 'Vega10', 'ocean', 'brg_r', 'rainbow_r', 'tab20_r', 'Purples', 'Blues', 'Accent', 'afmhot_r', 'Set2_r', 'RdBu', 'Vega20c', 'Pastel1', 'RdGy_r', 'PuBuGn', 'copper', 'PuOr', 'jet_r', 'YlGn_r', 'gist_heat_r', 'PuOr_r', 'bone', 'BuGn_r', 'terrain_r', 'mako', 'Vega20c_r', 'Paired_r', 'PuBu_r', 'tab20c', 'Pastel1_r', 'flag_r', 'plasma_r', 'Oranges', 'autumn', 'bone_r', 'GnBu', 'bwr', 'Greys', 'RdBu_r', 'RdGy', 'winter_r', 'gnuplot2', 'coolwarm_r', 'pink', 'nipy_spectral', 'Greys_r', 'summer_r', 'Vega20', 'BuPu', 'afmhot', 'gist_stern', 'binary', 'PiYG_r', 'YlGn', 'rocket_r', 'cubehelix', 'rainbow', 'Accent_r', 'CMRmap_r', 'PRGn', 'PuBu', 'tab10_r', 'prism', 'vlag_r', 'Set2', 'gist_ncar_r', 'nipy_spectral_r', 'Pastel2', 'terrain', 'RdYlBu', 'Vega10_r'), optional
+    The matplotlib colorscheme to generate the heatmap with.
+
+Returns
+-------
+visualization : Visualization
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_feature-table_merge-seqs.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,56 @@
+<?xml version="1.0" ?>
+<tool id="qiime_feature-table_merge-seqs" name="qiime feature-table merge-seqs" version="2019.4">
+	<description> - Combine collections of feature sequences</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime feature-table merge-seqs
+
+#def list_dict_to_string(list_dict):
+	#set $file_list = list_dict[0]['additional_input'].__getattr__('file_name')
+	#for d in list_dict[1:]:
+		#set $file_list = $file_list + ' --i-data=' + d['additional_input'].__getattr__('file_name')
+	#end for
+	#return $file_list
+#end def
+--i-data=$list_dict_to_string($input_files_idata)
+
+
+--o-merged-data=omergeddata
+;
+cp omergeddata.qza $omergeddata
+	]]></command>
+	<inputs>
+		<repeat name="input_files_idata" optional="False" title="--i-data">
+			<param format="qza,no_unzip.zip" label="--i-data: PATH List[FeatureData[Sequence]] The collection of feature sequences to be merged.  [required]" name="additional_input" type="data"/>
+		</repeat>
+
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: mergeddata.qza" name="omergeddata"/>
+	</outputs>
+	<help><![CDATA[
+Combine collections of feature sequences
+########################################
+
+Combines feature data objects which may or may not contain data for the
+same features. If different feature data is present for the same feature id
+in the inputs, the data from the first will be propagated to the result.
+
+Parameters
+----------
+data : List[FeatureData[Sequence]]
+    The collection of feature sequences to be merged.
+
+Returns
+-------
+merged_data : FeatureData[Sequence]
+    The resulting collection of feature sequences containing all feature
+    sequences provided.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_feature-table_merge-taxa.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,56 @@
+<?xml version="1.0" ?>
+<tool id="qiime_feature-table_merge-taxa" name="qiime feature-table merge-taxa" version="2019.4">
+	<description> - Combine collections of feature taxonomies</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime feature-table merge-taxa
+
+#def list_dict_to_string(list_dict):
+	#set $file_list = list_dict[0]['additional_input'].__getattr__('file_name')
+	#for d in list_dict[1:]:
+		#set $file_list = $file_list + ' --i-data=' + d['additional_input'].__getattr__('file_name')
+	#end for
+	#return $file_list
+#end def
+ --i-data=$list_dict_to_string($input_files_idata)
+
+
+--o-merged-data=omergeddata
+;
+cp omergeddata.qza $omergeddata
+	]]></command>
+	<inputs>
+		<repeat name="input_files_idata" optional="False" title="--i-data">
+			<param format="qza,no_unzip.zip" label="--i-data: PATH List[FeatureData[Taxonomy]] The collection of feature taxonomies to be merged.  [required]" name="additional_input" type="data"/>
+		</repeat>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: mergeddata.qza" name="omergeddata"/>
+	</outputs>
+	<help><![CDATA[
+Combine collections of feature taxonomies
+#########################################
+
+Combines a pair of feature data objects which may or may not contain data
+for the same features. If different feature data is present for the same
+feature id in the inputs, the data from the first will be propagated to the
+result.
+
+Parameters
+----------
+data : List[FeatureData[Taxonomy]]
+    The collection of feature taxonomies to be merged.
+
+Returns
+-------
+merged_data : FeatureData[Taxonomy]
+    The resulting collection of feature taxonomies containing all feature
+    taxonomies provided.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_feature-table_merge.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,66 @@
+<?xml version="1.0" ?>
+<tool id="qiime_feature-table_merge" name="qiime feature-table merge" version="2019.4">
+	<description> - Combine multiple tables</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime feature-table merge
+
+#def list_dict_to_string(list_dict):
+	#set $file_list = list_dict[0]['additional_input'].__getattr__('file_name')
+	#for d in list_dict[1:]:
+		#set $file_list = $file_list + ' --i-tables=' + d['additional_input'].__getattr__('file_name')
+	#end for
+	#return $file_list
+#end def
+ --i-tables=$list_dict_to_string($input_files_itables)
+
+
+#if str($poverlapmethod) != 'None':
+ --p-overlap-method=$poverlapmethod
+#end if
+
+
+--o-merged-table=omergedtable
+;
+cp omergedtable.qza $omergedtable
+	]]></command>
+	<inputs>
+		<repeat name="input_files_itables" optional="False" title="--i-tables">
+			<param format="qza,no_unzip.zip" label="--i-tables: PATH List[FeatureTable[Frequency]] The collection of feature tables to be merged.  [required]" name="additional_input" type="data"/>
+		</repeat>
+
+		<param label="--p-overlap-method: " name="poverlapmethod" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="error_on_overlapping_sample">error_on_overlapping_sample</option>
+			<option value="error_on_overlapping_feature">error_on_overlapping_feature</option>
+			<option value="sum">sum</option>
+		</param>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: mergedtable.qza" name="omergedtable"/>
+	</outputs>
+	<help><![CDATA[
+Combine multiple tables
+#######################
+
+Combines feature tables using the `overlap_method` provided.
+
+Parameters
+----------
+tables : List[FeatureTable[Frequency]]
+    The collection of feature tables to be merged.
+overlap_method : Str % Choices('error_on_overlapping_sample', 'error_on_overlapping_feature', 'sum'), optional
+    Method for handling overlapping ids.
+
+Returns
+-------
+merged_table : FeatureTable[Frequency]
+    The resulting merged feature table.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_feature-table_presence-absence.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,43 @@
+<?xml version="1.0" ?>
+<tool id="qiime_feature-table_presence-absence" name="qiime feature-table presence-absence" version="2019.4">
+	<description> - Convert to presence/absence</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime feature-table presence-absence
+
+--i-table=$itable
+
+--o-presence-absence-table=opresenceabsencetable
+;
+cp opresenceabsencetable.qza $opresenceabsencetable
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-table: ARTIFACT FeatureTable[Frequency | RelativeFrequency] The feature table to be converted into presence/absence abundances.                 [required]" name="itable" optional="False" type="data"/>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: presenceabsencetable.qza" name="opresenceabsencetable"/>
+	</outputs>
+	<help><![CDATA[
+Convert to presence/absence
+###########################
+
+Convert frequencies to binary values indicating presence or absence of a
+feature in a sample.
+
+Parameters
+----------
+table : FeatureTable[Frequency | RelativeFrequency]
+    The feature table to be converted into presence/absence abundances.
+
+Returns
+-------
+presence_absence_table : FeatureTable[PresenceAbsence]
+    The resulting presence/absence feature table.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_feature-table_rarefy.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,58 @@
+<?xml version="1.0" ?>
+<tool id="qiime_feature-table_rarefy" name="qiime feature-table rarefy" version="2019.4">
+	<description> - Rarefy table</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime feature-table rarefy
+
+--i-table=$itable
+--p-sampling-depth="$psamplingdepth"
+
+#if $pwithreplacement:
+ --p-with-replacement
+#end if
+
+--o-rarefied-table=orarefiedtable
+;
+cp orarefiedtable.qza $orarefiedtable
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-table: ARTIFACT FeatureTable[Frequency] The feature table to be rarefied.            [required]" name="itable" optional="False" type="data"/>
+		<param label="--p-sampling-depth: INTEGER Range(1, None)     The total frequency that each sample should be rarefied to. Samples where the sum of frequencies is less than the sampling depth will be not be included in the resulting table unless subsampling is performed with replacement.                            [required]" name="psamplingdepth" optional="False" min="1" value="" type="integer"/>
+		<param label="--p-with-replacement: --p-no-with-replacement Rarefy with replacement by sampling from the multinomial distribution instead of rarefying without replacement.                           [default: False]" name="pwithreplacement" selected="False" type="boolean"/>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: rarefiedtable.qza" name="orarefiedtable"/>
+	</outputs>
+	<help><![CDATA[
+Rarefy table
+############
+
+Subsample frequencies from all samples so that the sum of frequencies in
+each sample is equal to sampling-depth.
+
+Parameters
+----------
+table : FeatureTable[Frequency]
+    The feature table to be rarefied.
+sampling_depth : Int % Range(1, None)
+    The total frequency that each sample should be rarefied to. Samples
+    where the sum of frequencies is less than the sampling depth will be
+    not be included in the resulting table unless subsampling is performed
+    with replacement.
+with_replacement : Bool, optional
+    Rarefy with replacement by sampling from the multinomial distribution
+    instead of rarefying without replacement.
+
+Returns
+-------
+rarefied_table : FeatureTable[Frequency]
+    The resulting rarefied feature table.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_feature-table_relative-frequency.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,43 @@
+<?xml version="1.0" ?>
+<tool id="qiime_feature-table_relative-frequency" name="qiime feature-table relative-frequency" version="2019.4">
+	<description> - Convert to relative frequencies</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime feature-table relative-frequency
+
+--i-table=$itable
+
+--o-relative-frequency-table=orelativefrequencytable
+;
+cp orelativefrequencytable.qza $orelativefrequencytable
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-table: ARTIFACT FeatureTable[Frequency] The feature table to be converted into relative frequencies.                                 [required]" name="itable" optional="False" type="data"/>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: relativefrequencytable.qza" name="orelativefrequencytable"/>
+	</outputs>
+	<help><![CDATA[
+Convert to relative frequencies
+###############################
+
+Convert frequencies to relative frequencies by dividing each frequency in a
+sample by the sum of frequencies in that sample.
+
+Parameters
+----------
+table : FeatureTable[Frequency]
+    The feature table to be converted into relative frequencies.
+
+Returns
+-------
+relative_frequency_table : FeatureTable[RelativeFrequency]
+    The resulting relative frequency feature table.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_feature-table_subsample.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,57 @@
+<?xml version="1.0" ?>
+<tool id="qiime_feature-table_subsample" name="qiime feature-table subsample" version="2019.4">
+	<description> - Subsample table</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime feature-table subsample
+
+--i-table=$itable
+--p-subsampling-depth="$psubsamplingdepth"
+--p-axis=$paxis
+
+--o-sampled-table=osampledtable
+;
+cp osampledtable.qza $osampledtable
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-table: ARTIFACT FeatureTable[Frequency] The feature table to be sampled.             [required]" name="itable" optional="False" type="data"/>
+		<param label="--p-subsampling-depth: INTEGER Range(1, None)     The total number of samples or features to be randomly sampled. Samples or features that are reduced to a zero sum will not be included in the resulting table. [required]" name="psubsamplingdepth" optional="False" min="1" value="" type="integer"/>
+		<param label="--p-axis: " name="paxis" optional="False" type="select">
+			<option value="sample">sample</option>
+			<option value="feature">feature</option>
+		</param>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: sampledtable.qza" name="osampledtable"/>
+	</outputs>
+	<help><![CDATA[
+Subsample table
+###############
+
+Randomly pick samples or features, without replacement, from the table.
+
+Parameters
+----------
+table : FeatureTable[Frequency]
+    The feature table to be sampled.
+subsampling_depth : Int % Range(1, None)
+    The total number of samples or features to be randomly sampled. Samples
+    or features that are reduced to a zero sum will not be included in the
+    resulting table.
+axis : Str % Choices('sample', 'feature')
+    The axis to sample over. If "sample" then samples will be randomly
+    selected to be retained. If "feature" then a random set of features
+    will be selected to be retained.
+
+Returns
+-------
+sampled_table : FeatureTable[Frequency]
+    The resulting subsampled feature table.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_feature-table_summarize.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,58 @@
+<?xml version="1.0" ?>
+<tool id="qiime_feature-table_summarize" name="qiime feature-table summarize" version="2019.4">
+	<description> - Summarize table</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime feature-table summarize
+
+--i-table=$itable
+
+#def list_dict_to_string(list_dict):
+#set $file_list = list_dict[0]['additional_input'].__getattr__('file_name')
+#for d in list_dict[1:]:
+	#set $file_list = $file_list + ',' + d['additional_input'].__getattr__('file_name')
+#end for
+#return $file_list
+#end def
+--m-sample-metadata-file=$list_dict_to_string($m_sample_metadatafile)
+
+--o-visualization=ovisualization
+;
+qiime tools export --input-path ovisualization.qzv --output-path out   && mkdir -p '$ovisualization.files_path'
+&& cp -r out/* '$ovisualization.files_path'
+&& mv '$ovisualization.files_path/index.html' '$ovisualization'
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-table: ARTIFACT FeatureTable[Frequency | RelativeFrequency | PresenceAbsence]   The feature table to be summarized.          [required]" name="itable" optional="False" type="data"/>
+
+		<repeat name="m_sample_metadatafile" optional="False" title="--m-metadata-file">
+			<param label="--m-sample-metadata-file: (multiple arguments will be merged)  The sample metadata. [required]" name="additional_input" type="data" format="tabular,qza,no_unzip.zip" />
+		</repeat>
+	</inputs>
+	<outputs>
+		<data format="html" label="${tool.name} on ${on_string}: visualization.qzv" name="ovisualization"/>
+	</outputs>
+	<help><![CDATA[
+Summarize table
+###############
+
+Generate visual and tabular summaries of a feature table.
+
+Parameters
+----------
+table : FeatureTable[Frequency | RelativeFrequency | PresenceAbsence]
+    The feature table to be summarized.
+sample_metadata : Metadata, optional
+    The sample metadata.
+
+Returns
+-------
+visualization : Visualization
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_feature-table_tabulate-seqs.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,44 @@
+<?xml version="1.0" ?>
+<tool id="qiime_feature-table_tabulate-seqs" name="qiime feature-table tabulate-seqs" version="2019.4">
+	<description> - View sequence associated with each feature</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime feature-table tabulate-seqs
+
+--i-data=$idata
+
+--o-visualization=ovisualization
+;
+qiime tools export --input-path ovisualization.qzv --output-path out   && mkdir -p '$ovisualization.files_path'
+&& cp -r out/* '$ovisualization.files_path'
+&& mv '$ovisualization.files_path/index.html' '$ovisualization';
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-data: ARTIFACT FeatureData[Sequence] The feature sequences to be tabulated.       [required]" name="idata" optional="False" type="data"/>
+	</inputs>
+	<outputs>
+		<data format="html" label="${tool.name} on ${on_string}: visualization.qzv" name="ovisualization"/>
+	</outputs>
+	<help><![CDATA[
+View sequence associated with each feature
+##########################################
+
+Generate tabular view of feature identifier to sequence mapping, including
+links to BLAST each sequence against the NCBI nt database.
+
+Parameters
+----------
+data : FeatureData[Sequence]
+    The feature sequences to be tabulated.
+
+Returns
+-------
+visualization : Visualization
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_feature-table_transpose.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,43 @@
+<?xml version="1.0" ?>
+<tool id="qiime_feature-table_transpose" name="qiime feature-table transpose" version="2019.4">
+	<description> - Transpose a feature table.</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime feature-table transpose
+
+--i-table=$itable
+
+--o-transposed-feature-table=otransposedfeaturetable
+;
+cp otransposedfeaturetable.qza $otransposedfeaturetable
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-table: ARTIFACT FeatureTable[Frequency] The feature table to be transposed.          [required]" name="itable" optional="False" type="data"/>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: transposedfeaturetable.qza" name="otransposedfeaturetable"/>
+	</outputs>
+	<help><![CDATA[
+Transpose a feature table.
+##########################
+
+Transpose the rows and columns (typically samples and features) of a
+feature table.
+
+Parameters
+----------
+table : FeatureTable[Frequency]
+    The feature table to be transposed.
+
+Returns
+-------
+transposed_feature_table : FeatureTable[Frequency]
+    The resulting transposed feature table.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_fragment-insertion_classify-otus-experimental.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,77 @@
+<?xml version="1.0" ?>
+<tool id="qiime_fragment-insertion_classify-otus-experimental" name="qiime fragment-insertion classify-otus-experimental" version="2019.4">
+	<description> - Experimental: Obtain taxonomic lineages, by finding closest OTU in reference phylogeny.</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime fragment-insertion classify-otus-experimental
+
+--i-representative-sequences=$irepresentativesequences
+--i-tree=$itree --o-classification=oclassification
+
+
+#if str( $id_to_taxonomy_fp.selector ) == 'history'
+#set $tax = $id_to_taxonomy_fp.taxonomy_fp
+--i-reference-taxonomy '$tax'
+#else:
+#set $tax = $id_to_taxonomy_fp.taxonomy_fp.fields.path
+--i-reference-taxonomy '$tax'
+#end if
+
+
+;
+cp oclassification.qza $oclassification
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-representative-sequences: ARTIFACT FeatureData[Sequence] The sequences used for a 'sepp' run to produce the 'tree'.                                      [required]" name="irepresentativesequences" optional="False" type="data"/>
+		<param format="qza,no_unzip.zip" label="--i-tree: ARTIFACT    The tree resulting from inserting fragments into a Phylogeny[Rooted]  reference phylogeny, i.e. the output of function 'sepp' [required]" name="itree" optional="False" type="data"/>
+
+		<conditional name="id_to_taxonomy_fp" optional="True">
+		   <param name="selector" type="select" label="Reference taxonomy to query">
+			  <option value="cached">Public databases</option>
+			  <option value="history">Databases from your history</option>
+		   </param>
+		   <when value="cached">
+			  <param argument="--taxonomy_fp" label="Reference taxonomy" type="select" optional="True">
+				 <options from_data_table="qiime_taxonomy" />
+			  </param>
+		   </when>
+		   <when value="history">
+			  <param argument="--taxonomy_fp" type="data" format="qza,no_unzip.zip" label="Reference databases" optional="True" />
+		   </when>
+		</conditional>
+
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: classification.qza" name="oclassification"/>
+	</outputs>
+	<help><![CDATA[
+Experimental: Obtain taxonomic lineages, by finding closest OTU in reference phylogeny.
+#######################################################################################
+
+Experimental: Use the resulting tree from 'sepp' and find closest OTU-ID
+for every inserted fragment. Then, look up the reference lineage string in
+the reference taxonomy.
+
+Parameters
+----------
+representative_sequences : FeatureData[Sequence]
+    The sequences used for a 'sepp' run to produce the 'tree'.
+tree : Phylogeny[Rooted]
+    The tree resulting from inserting fragments into a reference phylogeny,
+    i.e. the output of function 'sepp'
+reference_taxonomy : FeatureData[Taxonomy], optional
+    Reference taxonomic table that maps every OTU-ID into a taxonomic
+    lineage string.
+
+Returns
+-------
+classification : FeatureData[Taxonomy]
+    Taxonomic lineages for inserted fragments.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_fragment-insertion_filter-features.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,66 @@
+<?xml version="1.0" ?>
+<tool id="qiime_fragment-insertion_filter-features" name="qiime fragment-insertion filter-features" version="2019.4">
+	<description> - Filter fragments in tree from table.</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime fragment-insertion filter-features
+
+--i-table=$itable
+--i-tree=$itree
+
+--o-filtered-table=ofilteredtable
+--o-removed-table=oremovedtable
+;
+cp ofilteredtable.qza $ofilteredtable;
+cp oremovedtable.qza $oremovedtable
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-table: ARTIFACT FeatureTable[Frequency] A feature-table which needs to filtered down to those fragments that are contained in the tree, e.g. result of a Deblur or DADA2 run.                    [required]" name="itable" optional="False" type="data"/>
+		<param format="qza,no_unzip.zip" label="--i-tree: ARTIFACT    The tree resulting from inserting fragments into a Phylogeny[Rooted]  reference phylogeny, i.e. the output of function 'sepp' [required]" name="itree" optional="False" type="data"/>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: filteredtable.qza" name="ofilteredtable"/>
+		<data format="qza" label="${tool.name} on ${on_string}: removedtable.qza" name="oremovedtable"/>
+	</outputs>
+	<help><![CDATA[
+Filter fragments in tree from table.
+####################################
+
+Filters fragments not inserted into a phylogenetic tree from a feature-
+table. Some fragments computed by e.g. Deblur or DADA2 are too remote to
+get inserted by SEPP into a reference phylogeny. To be able to use the
+feature-table for downstream analyses like computing Faith's PD or UniFrac,
+the feature-table must be cleared of fragments that are not part of the
+phylogenetic tree, because their path length can otherwise not be
+determined. Typically, the number of rejected fragments is low (<= 10), but
+it might be worth to inspect the ratio of reads assigned to those rejected
+fragments.
+
+Parameters
+----------
+table : FeatureTable[Frequency]
+    A feature-table which needs to filtered down to those fragments that
+    are contained in the tree, e.g. result of a Deblur or DADA2 run.
+tree : Phylogeny[Rooted]
+    The tree resulting from inserting fragments into a reference phylogeny,
+    i.e. the output of function 'sepp'
+
+Returns
+-------
+filtered_table : FeatureTable[Frequency]
+    The input table minus those fragments that were not part of the tree.
+    This feature-table can be used for downstream analyses like
+    phylogenetic alpha- or beta- diversity computation.
+removed_table : FeatureTable[Frequency]
+    Those fragments that got removed from the input table, because they
+    were not part of the tree. This table is mainly used for quality
+    control, e.g. to inspect the ratio of removed reads per sample from the
+    input table. You can ignore this table for downstream analyses.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_fragment-insertion_sepp.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,103 @@
+<?xml version="1.0" ?>
+<tool id="qiime_fragment-insertion_sepp" name="qiime fragment-insertion sepp" version="2019.4">
+	<description> - Insert fragment sequences using SEPP into reference phylogenies like Greengenes 13_8</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime fragment-insertion sepp
+
+--i-representative-sequences=$irepresentativesequences
+
+#if str($ireferencealignment) != 'None':
+ --i-reference-alignment=$ireferencealignment
+#end if
+
+#if str($ireferencephylogeny) != 'None':
+ --i-reference-phylogeny=$ireferencephylogeny
+#end if
+
+#set $pthreads = '${GALAXY_SLOTS:-4}'
+#if str($pthreads):
+ --p-threads="$pthreads"
+#end if
+
+
+#if $palignmentsubsetsize:
+ --p-alignment-subset-size=$palignmentsubsetsize
+#end if
+
+#if str($pplacementsubsetsize):
+ --p-placement-subset-size="$pplacementsubsetsize"
+#end if
+
+#if $pdebug:
+ --p-debug
+#end if
+
+--o-tree=otree
+--o-placements=oplacements
+;
+cp otree.qza $otree;
+cp oplacements.qza $oplacements
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-representative-sequences: ARTIFACT FeatureData[Sequence] The sequences to insert                      [required]" name="irepresentativesequences" optional="False" type="data"/>
+		<param format="qza,no_unzip.zip" label="--i-reference-alignment: ARTIFACT FeatureData[AlignedSequence] The reference multiple nucleotide alignment used to construct the reference phylogeny.           [optional]" name="ireferencealignment" optional="True" type="data"/>
+		<param format="qza,no_unzip.zip" label="--i-reference-phylogeny: ARTIFACT Phylogeny[Rooted]  The rooted reference phylogeny. Must be in sync with reference-alignment, i.e. each tip name must have exactly one corresponding record.            [optional]" name="ireferencephylogeny" optional="True" type="data"/>
+		<param label="--p-alignment-subset-size: INTEGER Each placement subset is further broken into subsets of at most these many sequences and a separate HMM is trained on each subset. The default alignment subset size is set to balance the exhaustiveness of the alignment step with the running time.   [default: 1000]" name="palignmentsubsetsize" optional="True" type="integer" value="1000"/>
+		<param label="--p-placement-subset-size: INTEGER The tree is divided into subsets such that each subset includes at most these many subsets. The placement step places the fragment on only one subset, determined based on alignment scores. The default placement subset is set to make sure the memory requirement of the pplacer step does not become prohibitively large." name="pplacementsubsetsize" optional="True" type="integer"/>
+		<param label="--p-debug: --p-no-debug Print additional run information to STDOUT for debugging. Run together with --verbose to actually see the information on STDOUT. Temporary directories will not be removed if run fails.           [default: False]" name="pdebug" selected="False" type="boolean"/>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: tree.qza" name="otree"/>
+		<data format="qza" label="${tool.name} on ${on_string}: placements.qza" name="oplacements"/>
+	</outputs>
+	<help><![CDATA[
+Insert fragment sequences using SEPP into reference phylogenies like Greengenes 13_8
+####################################################################################
+
+Perform fragment insertion of 16S sequences using the SEPP algorithm
+against the Greengenes 13_8 99% tree.
+
+Parameters
+----------
+representative_sequences : FeatureData[Sequence]
+    The sequences to insert
+alignment_subset_size : Int, optional
+    Each placement subset is further broken into subsets of at most these
+    many sequences and a separate HMM is trained on each subset. The
+    default alignment subset size is set to balance the exhaustiveness of
+    the alignment step with the running time.
+placement_subset_size : Int, optional
+    The tree is divided into subsets such that each subset includes at most
+    these many subsets. The placement step places the fragment on only one
+    subset, determined based on alignment scores. The default placement
+    subset is set to make sure the memory requirement of the pplacer step
+    does not become prohibitively large. Further reading:
+    https://github.com/smirarab/sepp/blob/master/tutorial/sepp-
+    tutorial.md#sample-datasets-default-parameters
+reference_alignment : FeatureData[AlignedSequence], optional
+    The reference multiple nucleotide alignment used to construct the
+    reference phylogeny.
+reference_phylogeny : Phylogeny[Rooted], optional
+    The rooted reference phylogeny. Must be in sync with reference-
+    alignment, i.e. each tip name must have exactly one corresponding
+    record.
+debug : Bool, optional
+    Print additional run information to STDOUT for debugging. Run together
+    with --verbose to actually see the information on STDOUT. Temporary
+    directories will not be removed if run fails.
+
+Returns
+-------
+tree : Phylogeny[Rooted]
+    The tree with inserted feature data
+placements : Placements
+	\
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_gneiss_add-pseudocount.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,55 @@
+<?xml version="1.0" ?>
+<tool id="qiime_gneiss_add-pseudocount" name="qiime gneiss add-pseudocount" version="2019.4">
+	<description> - Add pseudocount to table</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command>
+	<![CDATA[
+	qiime gneiss add-pseudocount --i-table=$itable
+
+	#if $ppseudocount:
+	 --p-pseudocount=$ppseudocount
+	#end if
+
+	#if str($cmdconfig) != 'None':
+	 --cmd-config=$cmdconfig
+	#end if
+	 --o-composition-table=ocompositiontable;
+
+ cp ocompositiontable.qza $ocompositiontable
+	]]>
+	</command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-table: FeatureTable[Frequency] The feature table to which pseudocounts should be added.  [required]" name="itable" optional="False" type="data"/>
+		<param label="--p-pseudocount: The value to add to all counts in the feature table.  [default: 1]" name="ppseudocount" optional="True" type="integer" value="1"/>
+		<param label="--cmd-config: Use config file for command options" name="cmdconfig" optional="True" type="data"/>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: composition-table.qza" name="ocompositiontable"/>
+	</outputs>
+	<help>
+		<![CDATA[
+Add pseudocount to table
+-------------------------
+
+Increment all counts in table by pseudocount.
+
+Parameters
+----------
+table : FeatureTable[Frequency]
+    The feature table to which pseudocounts should be added.
+pseudocount : Int, optional
+    The value to add to all counts in the feature table.
+
+Returns
+-------
+composition_table : FeatureTable[Composition]
+    The resulting feature table.
+		]]>
+	</help>
+<macros>
+	<import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation" />
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_gneiss_assign-ids.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,53 @@
+<?xml version="1.0" ?>
+<tool id="qiime_gneiss_assign-ids" name="qiime gneiss assign-ids" version="2019.4">
+	<description> - Assigns ids on internal nodes in the tree, and makes sure that they are consistent with the table columns.</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime gneiss assign-ids
+
+--i-input-table=$iinputtable
+--i-input-tree=$iinputtree
+
+--o-output-table=ooutputtable
+--o-output-tree=ooutputtree
+;
+cp ooutputtable.qza $ooutputtable;
+cp ooutputtree.qza $ooutputtree
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-input-table: ARTIFACT FeatureTable[Frequency] The input table of counts.                   [required]" name="iinputtable" optional="False" type="data"/>
+		<param format="qza,no_unzip.zip" label="--i-input-tree: ARTIFACT Phylogeny[Rooted]  The input tree with potential missing ids.   [required]" name="iinputtree" optional="False" type="data"/>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: outputtable.qza" name="ooutputtable"/>
+		<data format="qza" label="${tool.name} on ${on_string}: outputtree.qza" name="ooutputtree"/>
+	</outputs>
+	<help><![CDATA[
+Assigns ids on internal nodes in the tree, and makes sure that they are consistent with the table columns.
+##########################################################################################################
+
+Assigns UUIDs to uniquely identify internal nodes in the tree.  Also
+corrects for polytomies to create strictly bifurcating trees and aligns the
+table columns with the tree tip names
+
+Parameters
+----------
+input_table : FeatureTable[Frequency]
+    The input table of counts.
+input_tree : Phylogeny[Rooted]
+    The input tree with potential missing ids.
+
+Returns
+-------
+output_table : FeatureTable[Frequency]
+    A table with features matching the tree tips.
+output_tree : Hierarchy
+    A tree with uniquely identifying ids.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_gneiss_balance-taxonomy.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,111 @@
+<?xml version="1.0" ?>
+<tool id="qiime_gneiss_balance-taxonomy" name="qiime gneiss balance-taxonomy" version="2019.4">
+	<description> - Balance Summary</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime gneiss balance-taxonomy
+
+--i-table=$itable
+--i-tree=$itree
+--i-taxonomy=$itaxonomy
+--p-balance-name="$pbalancename"
+
+
+#if $input_files_mmetadatafile:
+#def list_dict_to_string(list_dict):
+	#set $file_list = list_dict[0]['additional_input'].__getattr__('file_name')
+	#for d in list_dict[1:]:
+		#set $file_list = $file_list + ' --m-metadata-file=' + d['additional_input'].__getattr__('file_name')
+	#end for
+	#return $file_list
+#end def
+ --m-metadata-file=$list_dict_to_string($input_files_mmetadatafile)
+#end if
+
+
+#if $ppseudocount:
+ --p-pseudocount=$ppseudocount
+#end if
+
+#if $ptaxalevel:
+ --p-taxa-level=$ptaxalevel
+#end if
+
+#if $pnfeatures:
+ --p-n-features=$pnfeatures
+#end if
+
+#if str($pthreshold):
+ --p-threshold="$pthreshold"
+#end if
+#if str($mmetadatacolumn):
+ --m-metadata-column="$mmetadatacolumn"
+#end if
+
+--o-visualization=ovisualization
+;
+qiime tools export --input-path ovisualization.qzv --output-path out   && mkdir -p '$ovisualization.files_path'
+&& cp -r out/* '$ovisualization.files_path'
+&& mv '$ovisualization.files_path/index.html' '$ovisualization'
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-table: ARTIFACT FeatureTable[Frequency] A table of abundances.                    [required]" name="itable" optional="False" type="data"/>
+		<param format="qza,no_unzip.zip" label="--i-tree: ARTIFACT       The tree used to calculate the balances. Hierarchy                                                       [required]" name="itree" optional="False" type="data"/>
+		<param format="qza,no_unzip.zip" label="--i-taxonomy: ARTIFACT FeatureData[Taxonomy] Taxonomy information for the OTUs.        [required]" name="itaxonomy" optional="False" type="data"/>
+		<param label="--p-balance-name: TEXT   Name of the balance to summarize.         [required]" name="pbalancename" optional="False" type="text"/>
+		<param label="--p-pseudocount: NUMBER  The pseudocount to add to avoid division by zero. [default: 0.5]" name="ppseudocount" optional="True" type="float" value="0.5"/>
+		<param label="--p-taxa-level: INTEGER  Level of taxonomy to summarize.         [default: 0]" name="ptaxalevel" optional="True" type="integer" value="0"/>
+		<param label="--p-n-features: INTEGER  The number of features to plot in the proportion plot.                                  [default: 10]" name="pnfeatures" optional="True" type="integer" value="10"/>
+		<param label="--p-threshold: NUMBER    A threshold to designate discrete categories for a numerical metadata column. This will split the numerical column values into two categories, values below the threshold, and values above the threshold. If not specified, this threshold will default to the mean.                                     [optional]" name="pthreshold" optional="True" type="float"/>
+		<param label="--m-metadata-column: COLUMN  MetadataColumn[Categorical | Numeric] Metadata column for plotting the balance (optional).                               [optional]" name="mmetadatacolumn" optional="True" type="text"/>
+
+		<repeat name="input_files_mmetadatafile" optional="True" title="--m-metadata-file">
+			<param label="--m-metadata-file: Metadata file or artifact viewable as metadata. This option may be supplied multiple times to merge metadata. [optional]" name="additional_input" type="data" format="tabular,qza,no_unzip.zip" />
+		</repeat>
+
+	</inputs>
+	<outputs>
+		<data format="html" label="${tool.name} on ${on_string}: visualization.qzv" name="ovisualization"/>
+	</outputs>
+	<help><![CDATA[
+Balance Summary
+###############
+
+Visualize the distribution of a single balance and summarize its numerator
+and denominator components.
+
+Parameters
+----------
+table : FeatureTable[Frequency]
+    A table of abundances.
+tree : Hierarchy
+    The tree used to calculate the balances.
+taxonomy : FeatureData[Taxonomy]
+    Taxonomy information for the OTUs.
+balance_name : Str
+    Name of the balance to summarize.
+pseudocount : Float, optional
+    The pseudocount to add to avoid division by zero.
+taxa_level : Int, optional
+    Level of taxonomy to summarize.
+n_features : Int, optional
+    The number of features to plot in the proportion plot.
+threshold : Float, optional
+    A threshold to designate discrete categories for a numerical metadata
+    column. This will split the numerical column values into two
+    categories, values below the threshold, and values above the threshold.
+    If not specified, this threshold will default to the mean.
+metadata : MetadataColumn[Categorical | Numeric], optional
+    Metadata column for plotting the balance (optional).
+
+Returns
+-------
+visualization : Visualization
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_gneiss_correlation-clustering.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,55 @@
+<?xml version="1.0" ?>
+<tool id="qiime_gneiss_correlation-clustering" name="qiime gneiss correlation-clustering" version="2019.4">
+	<description> - Hierarchical clustering using feature correlation.</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime gneiss correlation-clustering
+
+--i-table=$itable
+
+#if $ppseudocount:
+ --p-pseudocount=$ppseudocount
+#end if
+
+--o-clustering=oclustering
+;
+cp oclustering.qza $oclustering
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-table: ARTIFACT FeatureTable[Frequency] The feature table containing the samples in which the columns will be clustered.            [required]" name="itable" optional="False" type="data"/>
+		<param label="--p-pseudocount: NUMBER  The value to add to zero counts in the feature table.                                [default: 0.5]" name="ppseudocount" optional="True" type="float" value="0.5"/>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: clustering.qza" name="oclustering"/>
+	</outputs>
+	<help><![CDATA[
+Hierarchical clustering using feature correlation.
+##################################################
+
+Build a bifurcating tree that represents a hierarchical clustering of
+features.  The hiearchical clustering uses Ward hierarchical clustering
+based on the degree of proportionality between features.
+
+Parameters
+----------
+table : FeatureTable[Frequency]
+    The feature table containing the samples in which the columns will be
+    clustered.
+pseudocount : Float, optional
+    The value to add to zero counts in the feature table.
+
+Returns
+-------
+clustering : Hierarchy
+    A hierarchy of feature identifiers where each tip corresponds to the
+    feature identifiers in the table. This tree can contain tip ids that
+    are not present in the table, but all feature ids in the table must be
+    present in this tree.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_gneiss_dendrogram-heatmap.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,187 @@
+<?xml version="1.0" ?>
+<tool id="qiime_gneiss_dendrogram-heatmap" name="qiime gneiss dendrogram-heatmap" version="2019.4">
+	<description> - Dendrogram heatmap.</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime gneiss dendrogram-heatmap
+
+--i-table=$itable
+--i-tree=$itree
+--m-metadata-column="$mmetadatacolumn"
+
+
+#if $input_files_mmetadatafile:
+#def list_dict_to_string(list_dict):
+	#set $file_list = list_dict[0]['additional_input'].__getattr__('file_name')
+	#for d in list_dict[1:]:
+		#set $file_list = $file_list + ' --m-metadata-file=' + d['additional_input'].__getattr__('file_name')
+	#end for
+	#return $file_list
+#end def
+ --m-metadata-file=$list_dict_to_string($input_files_mmetadatafile)
+#end if
+
+
+#if $ppseudocount:
+ --p-pseudocount=$ppseudocount
+#end if
+
+#if $pndim:
+ --p-ndim=$pndim
+#end if
+
+#if str($pmethod) != 'None':
+ --p-method=$pmethod
+#end if
+
+#if str($pcolormap) != 'None':
+ --p-color-map=$pcolormap
+#end if
+
+--o-visualization=ovisualization
+;
+qiime tools export --input-path ovisualization.qzv --output-path out   && mkdir -p '$ovisualization.files_path'
+&& cp -r out/* '$ovisualization.files_path'
+&& mv '$ovisualization.files_path/index.html' '$ovisualization'
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-table: ARTIFACT FeatureTable[Frequency] The feature table that will be plotted as a heatmap. This table is assumed to have strictly positive values.                          [required]" name="itable" optional="False" type="data"/>
+		<param format="qza,no_unzip.zip" label="--i-tree: ARTIFACT       A hierarchy of feature identifiers where each Hierarchy             tipcorresponds to the feature identifiers in the table. This tree can contain tip ids that are not present in the table, but all feature ids in the table must be present in this tree.       [required]" name="itree" optional="False" type="data"/>
+		<param label="--m-metadata-column: COLUMN  MetadataColumn[Categorical] Categorical metadata column to group the samples. [required]" name="mmetadatacolumn" optional="False" type="text"/>
+		<param label="--p-pseudocount: NUMBER  The pseudocount to add to avoid division by zero. [default: 0.5]" name="ppseudocount" optional="True" type="float" value="0.5"/>
+		<param label="--p-ndim: INTEGER        Number of dimensions to highlight.     [default: 10]" name="pndim" optional="True" type="integer" value="10"/>
+		<param label="--p-method: " name="pmethod" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="clr">clr</option>
+			<option value="log">log</option>
+		</param>
+		<param label="--p-color-map: " name="pcolormap" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="viridis">viridis</option>
+			<option value="inferno">inferno</option>
+			<option value="plasma">plasma</option>
+			<option value="magma">magma</option>
+			<option value="Blues">Blues</option>
+			<option value="BuGn">BuGn</option>
+			<option value="BuPu">BuPu</option>
+			<option value="GnBu">GnBu</option>
+			<option value="Greens">Greens</option>
+			<option value="Greys">Greys</option>
+			<option value="Oranges">Oranges</option>
+			<option value="OrRd">OrRd</option>
+			<option value="PuBu">PuBu</option>
+			<option value="PuBuGn">PuBuGn</option>
+			<option value="PuRd">PuRd</option>
+			<option value="Purples">Purples</option>
+			<option value="RdPu">RdPu</option>
+			<option value="Reds">Reds</option>
+			<option value="YlGn">YlGn</option>
+			<option value="YlGnBu">YlGnBu</option>
+			<option value="YlOrBr">YlOrBr</option>
+			<option value="YlOrRd">YlOrRd</option>
+			<option value="afmhot">afmhot</option>
+			<option value="autumn">autumn</option>
+			<option value="bone">bone</option>
+			<option value="cool">cool</option>
+			<option value="copper">copper</option>
+			<option value="gist_heat">gist_heat</option>
+			<option value="gray">gray</option>
+			<option value="hot">hot</option>
+			<option value="pink">pink</option>
+			<option value="spring">spring</option>
+			<option value="summer">summer</option>
+			<option value="winter">winter</option>
+			<option value="BrBG">BrBG</option>
+			<option value="bwr">bwr</option>
+			<option value="coolwarm">coolwarm</option>
+			<option value="PiYG">PiYG</option>
+			<option value="PRGn">PRGn</option>
+			<option value="PuOr">PuOr</option>
+			<option value="RdBu">RdBu</option>
+			<option value="RdGy">RdGy</option>
+			<option value="RdYlBu">RdYlBu</option>
+			<option value="RdYlGn">RdYlGn</option>
+			<option value="Spectral">Spectral</option>
+			<option value="seismic">seismic</option>
+			<option value="Accent">Accent</option>
+			<option value="Dark2">Dark2</option>
+			<option value="Paired">Paired</option>
+			<option value="Pastel1">Pastel1</option>
+			<option value="Pastel2">Pastel2</option>
+			<option value="Set1">Set1</option>
+			<option value="Set2">Set2</option>
+			<option value="Set3">Set3</option>
+			<option value="Vega10">Vega10</option>
+			<option value="Vega20">Vega20</option>
+			<option value="Vega20b">Vega20b</option>
+			<option value="Vega20c">Vega20c</option>
+			<option value="gist_earth">gist_earth</option>
+			<option value="terrain">terrain</option>
+			<option value="ocean">ocean</option>
+			<option value="gist_stern">gist_stern</option>
+			<option value="brg">brg</option>
+			<option value="CMRmap">CMRmap</option>
+			<option value="cubehelix">cubehelix</option>
+			<option value="gnuplot">gnuplot</option>
+			<option value="gnuplot2">gnuplot2</option>
+			<option value="gist_ncar">gist_ncar</option>
+			<option value="nipy_spectral">nipy_spectral</option>
+			<option value="jet">jet</option>
+			<option value="rainbow">rainbow</option>
+			<option value="gist_rainbow">gist_rainbow</option>
+			<option value="hsv">hsv</option>
+			<option value="flag">flag</option>
+			<option value="prism">prism</option>
+		</param>
+
+		<repeat name="input_files_mmetadatafile" optional="True" title="--m-metadata-file">
+			<param label="--m-metadata-file: Metadata file or artifact viewable as metadata. This option may be supplied multiple times to merge metadata. [optional]" name="additional_input" type="data" format="tabular,qza,no_unzip.zip" />
+		</repeat>
+
+	</inputs>
+	<outputs>
+		<data format="html" label="${tool.name} on ${on_string}: visualization.qzv" name="ovisualization"/>
+	</outputs>
+	<help><![CDATA[
+Dendrogram heatmap.
+###################
+
+Visualize the feature table as a heatmap, with samples sorted along a
+specified categorical metadata column and features clustered together
+specified by the tree.
+
+Parameters
+----------
+table : FeatureTable[Frequency]
+    The feature table that will be plotted as a heatmap. This table is
+    assumed to have strictly positive values.
+tree : Hierarchy
+    A hierarchy of feature identifiers where each tipcorresponds to the
+    feature identifiers in the table. This tree can contain tip ids that
+    are not present in the table, but all feature ids in the table must be
+    present in this tree.
+metadata : MetadataColumn[Categorical]
+    Categorical metadata column to group the samples.
+pseudocount : Float, optional
+    The pseudocount to add to avoid division by zero.
+ndim : Int, optional
+    Number of dimensions to highlight.
+method : Str % Choices('clr', 'log'), optional
+    Specifies how the data should be normalized for display.Options include
+    'log' or 'clr' (default='clr').
+color_map : Str % Choices('viridis', 'inferno', 'plasma', 'magma', 'Blues', 'BuGn', 'BuPu', 'GnBu', 'Greens', 'Greys', 'Oranges', 'OrRd', 'PuBu', 'PuBuGn', 'PuRd', 'Purples', 'RdPu', 'Reds', 'YlGn', 'YlGnBu', 'YlOrBr', 'YlOrRd', 'afmhot', 'autumn', 'bone', 'cool', 'copper', 'gist_heat', 'gray', 'hot', 'pink', 'spring', 'summer', 'winter', 'BrBG', 'bwr', 'coolwarm', 'PiYG', 'PRGn', 'PuOr', 'RdBu', 'RdGy', 'RdYlBu', 'RdYlGn', 'Spectral', 'seismic', 'Accent', 'Dark2', 'Paired', 'Pastel1', 'Pastel2', 'Set1', 'Set2', 'Set3', 'Vega10', 'Vega20', 'Vega20b', 'Vega20c', 'gist_earth', 'terrain', 'ocean', 'gist_stern', 'brg', 'CMRmap', 'cubehelix', 'gnuplot', 'gnuplot2', 'gist_ncar', 'nipy_spectral', 'jet', 'rainbow', 'gist_rainbow', 'hsv', 'flag', 'prism'), optional
+    Specifies the color map for plotting the heatmap. See
+    https://matplotlib.org/examples/color/colormaps_reference.html for more
+    details.
+
+Returns
+-------
+visualization : Visualization
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_gneiss_gradient-clustering.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,79 @@
+<?xml version="1.0" ?>
+<tool id="qiime_gneiss_gradient-clustering" name="qiime gneiss gradient-clustering" version="2019.4">
+	<description> - Hierarchical clustering using gradient information.</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime gneiss gradient-clustering
+
+--i-table=$itable
+--m-gradient-column="$mgradientcolumn"
+
+
+#def list_dict_to_string(list_dict):
+	#set $file_list = list_dict[0]['additional_input'].__getattr__('file_name')
+	#for d in list_dict[1:]:
+		#set $file_list = $file_list + ',' + d['additional_input'].__getattr__('file_name')
+	#end for
+	#return $file_list
+#end def
+
+--m-gradient-file=$list_dict_to_string($input_files_mgradientfile)
+
+
+#if $pnoweighted:
+ --p-no-weighted
+#end if
+
+--o-clustering=oclustering
+;
+cp oclustering.qza $oclustering
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-table: ARTIFACT FeatureTable[Frequency | RelativeFrequency | Composition]       The feature table containing the samples in which the columns will be clustered.                   [required]" name="itable" optional="False" type="data"/>
+		<param label="--m-gradient-column: COLUMN  MetadataColumn[Numeric] Contains gradient values to sort the features and samples.                                     [required]" name="mgradientcolumn" optional="False" type="text"/>
+		<param label="--p-no-weighted : Specifies if abundance or presence/absence information should be used to perform the clustering. [default: False]" name="pnoweighted" selected="False" type="boolean"/>
+
+		<repeat name="input_files_mgradientfile" optional="False" title="--m-gradient-file">
+			<param label="--m-gradient-file: Metadata file or artifact viewable as metadata. This option may be supplied multiple times to merge metadata. [required]" name="additional_input" type="data" format="tabular,qza,no_unzip.zip" />
+		</repeat>
+
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: clustering.qza" name="oclustering"/>
+	</outputs>
+	<help><![CDATA[
+Hierarchical clustering using gradient information.
+###################################################
+
+Build a bifurcating tree that represents a hierarchical clustering of
+features.  The hiearchical clustering uses Ward hierarchical clustering
+based on the mean difference of gradients that each feature is observed in.
+This method is primarily used to sort the table to reveal the underlying
+block-like structures.
+
+Parameters
+----------
+table : FeatureTable[Frequency | RelativeFrequency | Composition]
+    The feature table containing the samples in which the columns will be
+    clustered.
+gradient : MetadataColumn[Numeric]
+    Contains gradient values to sort the features and samples.
+weighted : Bool, optional
+    Specifies if abundance or presence/absence information should be used
+    to perform the clustering.
+
+Returns
+-------
+clustering : Hierarchy
+    A hierarchy of feature identifiers where each tip corresponds to the
+    feature identifiers in the table. This tree can contain tip ids that
+    are not present in the table, but all feature ids in the table must be
+    present in this tree.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_gneiss_ilr-hierarchical.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,59 @@
+<?xml version="1.0" ?>
+<tool id="qiime_gneiss_ilr-hierarchical" name="qiime gneiss ilr-hierarchical" version="2019.4">
+	<description> - Isometric Log-ratio Transform applied to a hierarchical clustering</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime gneiss ilr-hierarchical
+
+--i-table=$itable
+--i-tree=$itree
+
+#if $ppseudocount:
+ --p-pseudocount=$ppseudocount
+#end if
+
+--o-balances=obalances
+;
+cp obalances.qza $obalances
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-table: ARTIFACT FeatureTable[Frequency | Composition] The feature table containing the samples in which the ilr transform will be performed.      [required]" name="itable" optional="False" type="data"/>
+		<param format="qza,no_unzip.zip" label="--i-tree: ARTIFACT       A hierarchy of feature identifiers that defines the Hierarchy             partitions of features.  Each tip in the hierarchycorresponds to the feature identifiers in the table. This tree can contain tip ids that are not present in the table, but all feature ids in the table must be present in this tree.  This assumes that all of the internal nodes in the tree have labels.                                   [required]" name="itree" optional="False" type="data"/>
+		<param label="--p-pseudocount: NUMBER  The value to add to zero counts in the feature table.                                [default: 0.5]" name="ppseudocount" optional="True" type="float" value="0.5"/>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: balances.qza" name="obalances"/>
+	</outputs>
+	<help><![CDATA[
+Isometric Log-ratio Transform applied to a hierarchical clustering
+##################################################################
+
+Calculate balances given a hierarchy.
+
+Parameters
+----------
+table : FeatureTable[Frequency | Composition]
+    The feature table containing the samples in which the ilr transform
+    will be performed.
+tree : Hierarchy
+    A hierarchy of feature identifiers that defines the partitions of
+    features.  Each tip in the hierarchycorresponds to the feature
+    identifiers in the table. This tree can contain tip ids that are not
+    present in the table, but all feature ids in the table must be present
+    in this tree.  This assumes that all of the internal nodes in the tree
+    have labels.
+pseudocount : Float, optional
+    The value to add to zero counts in the feature table.
+
+Returns
+-------
+balances : FeatureTable[Balance]
+    The resulting balances from the ilr transform.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_gneiss_ilr-phylogenetic.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,65 @@
+<?xml version="1.0" ?>
+<tool id="qiime_gneiss_ilr-phylogenetic" name="qiime gneiss ilr-phylogenetic" version="2019.4">
+	<description> - Isometric Log-ratio Transform applied to a phylogenetic tree</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime gneiss ilr-phylogenetic
+
+--i-table=$itable
+--i-tree=$itree
+
+#if $ppseudocount:
+ --p-pseudocount=$ppseudocount
+#end if
+
+--o-balances=obalances
+--o-hierarchy=ohierarchy
+;
+cp obalances.qza $obalances;
+cp ohierarchy.qza $ohierarchy
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-table: ARTIFACT FeatureTable[Frequency | Composition] The feature table containing the samples in which the ilr transform will be performed.      [required]" name="itable" optional="False" type="data"/>
+		<param format="qza,no_unzip.zip" label="--i-tree: ARTIFACT       A rooted phylogeny of feature identifiers that Phylogeny[Rooted]     defines the partitions of features.  Each tip in the hierarchycorresponds to the feature identifiers in the table. This tree can contain tip ids that are not present in the table, but all feature ids in the table must be present in this tree.  This assumes that all of the internal nodes in the tree have labels. This tree may contain polytomic nodes (i.e., nodes with more than two children), in which case they will be bifurcated.                  [required]" name="itree" optional="False" type="data"/>
+		<param label="--p-pseudocount: NUMBER  The value to add to zero counts in the feature table.                                [default: 0.5]" name="ppseudocount" optional="True" type="float" value="0.5"/>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: balances.qza" name="obalances"/>
+		<data format="qza" label="${tool.name} on ${on_string}: hierarchy.qza" name="ohierarchy"/>
+	</outputs>
+	<help><![CDATA[
+Isometric Log-ratio Transform applied to a phylogenetic tree
+############################################################
+
+Calculate balances given a rooted phylogeny.
+
+Parameters
+----------
+table : FeatureTable[Frequency | Composition]
+    The feature table containing the samples in which the ilr transform
+    will be performed.
+tree : Phylogeny[Rooted]
+    A rooted phylogeny of feature identifiers that defines the partitions
+    of features.  Each tip in the hierarchycorresponds to the feature
+    identifiers in the table. This tree can contain tip ids that are not
+    present in the table, but all feature ids in the table must be present
+    in this tree.  This assumes that all of the internal nodes in the tree
+    have labels. This tree may contain polytomic nodes (i.e., nodes with
+    more than two children), in which case they will be bifurcated.
+pseudocount : Float, optional
+    The value to add to zero counts in the feature table.
+
+Returns
+-------
+balances : FeatureTable[Balance]
+    The resulting balances from the ilr transform.
+hierarchy : Hierarchy
+    Hierarchy from bifurcated phylogeny
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_gneiss_ilr-transform.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,56 @@
+<?xml version="1.0" ?>
+<tool id="qiime_gneiss_ilr-transform" name="qiime gneiss ilr-transform" version="2019.4">
+	<description> - Isometric Log-ratio Transform</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command>
+	<![CDATA[
+	qiime gneiss ilr-transform --i-table=$itable --i-tree=$itree --o-balances=obalances
+
+	#if str($cmdconfig) != 'None':
+	 --cmd-config=$cmdconfig
+	#end if
+	;
+	cp obalances.qza $obalances;
+	]]>
+	</command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-table: FeatureTable[Composition] The feature table containing the samples in which the ilr transform will be performed. [required]" name="itable" optional="False" type="data"/>
+		<param format="qza,no_unzip.zip" label="--i-tree: Hierarchy A hierarchy of feature identifiers that defines the partitions of features.  Each tip in the hierarchycorresponds to the feature identifiers in the table. This tree can contain tip ids that are not present in the table, but all feature ids in the table must be present in this tree.  This assumes that all of the internal nodes in the tree have labels.  [required]" name="itree" optional="False" type="data"/>
+		<param label="--cmd-config: Use config file for command options" name="cmdconfig" optional="True" type="data"/>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: balances.qza" name="obalances"/>
+	</outputs>
+	<help>
+		<![CDATA[
+Isometric Log-ratio Transform
+------------------------------
+
+Calculate balances given a hierarchy.
+
+Parameters
+----------
+table : FeatureTable[Composition]
+    The feature table containing the samples in which the ilr transform
+    will be performed.
+tree : Hierarchy
+    A hierarchy of feature identifiers that defines the partitions of
+    features.  Each tip in the hierarchycorresponds to the feature
+    identifiers in the table. This tree can contain tip ids that are not
+    present in the table, but all feature ids in the table must be present
+    in this tree.  This assumes that all of the internal nodes in the tree
+    have labels.
+
+Returns
+-------
+balances : FeatureTable[Balance]
+    The resulting balances from the ilr transform.
+    ]]>
+	</help>
+<macros>
+	<import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation" />
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_gneiss_lme-regression.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,78 @@
+<?xml version="1.0" ?>
+<tool id="qiime_gneiss_lme-regression" name="qiime gneiss lme-regression" version="2019.4">
+	<description> - Simplicial Linear mixed effects regression</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime gneiss lme-regression
+
+--i-table=$itable
+--i-tree=$itree
+--p-formula="$pformula"
+--p-groups="$pgroups"
+
+
+#if $input_files_mmetadatafile:
+#def list_dict_to_string(list_dict):
+	#set $file_list = list_dict[0]['additional_input'].__getattr__('file_name')
+	#for d in list_dict[1:]:
+		#set $file_list = $file_list + ' --m-metadata-file=' + d['additional_input'].__getattr__('file_name')
+	#end for
+	#return $file_list
+#end def
+ --m-metadata-file=$list_dict_to_string($input_files_mmetadatafile)
+#end if
+
+
+--o-visualization=ovisualization
+;
+qiime tools export --input-path ovisualization.qzv --output-path out   && mkdir -p '$ovisualization.files_path'
+&& cp -r out/* '$ovisualization.files_path'
+&& mv '$ovisualization.files_path/index.html' '$ovisualization';
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-table: ARTIFACT FeatureTable[Balance] The feature table containing the samples in which simplicial regression with mixed effect will be performed.                                   [required]" name="itable" optional="False" type="data"/>
+		<param format="qza,no_unzip.zip" label="--i-tree: ARTIFACT    A hierarchy of feature identifiers where each tip Hierarchy          corresponds to the feature identifiers in the table. This tree can contain tip ids that are not present in the table, but all feature ids in the table must be present in this tree.                        [required]" name="itree" optional="False" type="data"/>
+		<param label="--p-formula: TEXT     Statistical formula specifying the statistical model. In other words, a list of the metadata categories that will be used in the linear mixed effect model, typically separated by '+'. For more information see https://patsy.readthedocs.io/en/latest/API-reference.ht ml                                           [required]" name="pformula" optional="False" type="text"/>
+		<param label="--p-groups: TEXT                                                   [required]" name="pgroups" optional="False" type="text"/>
+	</inputs>
+	<outputs>
+		<data format="html" label="${tool.name} on ${on_string}: visualization.qzv" name="ovisualization"/>
+	</outputs>
+	<help><![CDATA[
+Simplicial Linear mixed effects regression
+##########################################
+
+Build and run linear mixed effects model on balances. Use LME over OLS when
+you have repeated measurements such as (timeseries).
+
+Parameters
+----------
+table : FeatureTable[Balance]
+    The feature table containing the samples in which simplicial regression
+    with mixed effect will be performed.
+tree : Hierarchy
+    A hierarchy of feature identifiers where each tip corresponds to the
+    feature identifiers in the table. This tree can contain tip ids that
+    are not present in the table, but all feature ids in the table must be
+    present in this tree.
+metadata : Metadata
+    Metadata information that contains the covariates of interest.
+formula : Str
+    Statistical formula specifying the statistical model. In other words, a
+    list of the metadata categories that will be used in the linear mixed
+    effect model, typically separated by "+". For more information see
+    https://patsy.readthedocs.io/en/latest/API-reference.html
+groups : Str
+	\
+
+Returns
+-------
+visualization : Visualization
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_gneiss_ols-regression.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,80 @@
+<?xml version="1.0" ?>
+<tool id="qiime_gneiss_ols-regression" name="qiime gneiss ols-regression" version="2019.4">
+	<description> - Simplicial Ordinary Least Squares Regression</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime gneiss ols-regression
+
+--i-table=$itable
+--i-tree=$itree
+--p-formula="$pformula"
+
+
+#if $input_files_mmetadatafile:
+#def list_dict_to_string(list_dict):
+	#set $file_list = list_dict[0]['additional_input'].__getattr__('file_name')
+	#for d in list_dict[1:]:
+		#set $file_list = $file_list + ' --m-metadata-file=' + d['additional_input'].__getattr__('file_name')
+	#end for
+	#return $file_list
+#end def
+ --m-metadata-file=$list_dict_to_string($input_files_mmetadatafile)
+#end if
+
+
+--o-visualization=ovisualization
+;
+
+qiime tools export --input-path ovisualization.qzv --output-path out   && mkdir -p '$ovisualization.files_path'
+&& cp -r out/* '$ovisualization.files_path'
+&& mv '$ovisualization.files_path/index.html' '$ovisualization';
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-table: ARTIFACT FeatureTable[Balance] The feature table containing the samples in which simplicial regression will be performed.     [required]" name="itable" optional="False" type="data"/>
+		<param format="qza,no_unzip.zip" label="--i-tree: ARTIFACT    A hierarchy of feature identifiers where each Hierarchy          tipcorresponds to the feature identifiers in the table. This tree can contain tip ids that are not present in the table, but all feature ids in the table must be present in this tree.                        [required]" name="itree" optional="False" type="data"/>
+		<param label="--p-formula: TEXT     Formula specifying the statistical model. In other words, a list of the metadata categories that will be used in the regression model, typically separated by '+'. For more information see https://patsy.readthedocs.io/en/latest/API-reference.html                                           [required]" name="pformula" optional="False" type="text"/>
+
+
+		<repeat name="input_files_mmetadatafile" optional="True" title="--m-metadata-file">
+			<param label="--m-metadata-file: Metadata file or artifact viewable as metadata. This option may be supplied multiple times to merge metadata. [optional]" name="additional_input" type="data" format="tabular,qza,no_unzip.zip" />
+		</repeat>
+	</inputs>
+	<outputs>
+		<data format="html" label="${tool.name} on ${on_string}: visualization.qzv" name="ovisualization"/>
+	</outputs>
+	<help><![CDATA[
+Simplicial Ordinary Least Squares Regression
+############################################
+
+Perform linear regression on balances. This will tell youhow much
+variability is explained by metadata categories in your formula.
+
+Parameters
+----------
+table : FeatureTable[Balance]
+    The feature table containing the samples in which simplicial regression
+    will be performed.
+tree : Hierarchy
+    A hierarchy of feature identifiers where each tipcorresponds to the
+    feature identifiers in the table. This tree can contain tip ids that
+    are not present in the table, but all feature ids in the table must be
+    present in this tree.
+metadata : Metadata
+    Metadata information that contains the covariates of interest.
+formula : Str
+    Formula specifying the statistical model. In other words, a list of the
+    metadata categories that will be used in the regression model,
+    typically separated by "+". For more information see
+    https://patsy.readthedocs.io/en/latest/API-reference.html
+
+Returns
+-------
+visualization : Visualization
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_longitudinal_anova.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,87 @@
+<?xml version="1.0" ?>
+<tool id="qiime_longitudinal_anova" name="qiime longitudinal anova" version="2019.4">
+	<description> - ANOVA test</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime longitudinal anova
+
+--p-formula="$pformula"
+
+#if str($psstype) != 'None':
+ --p-sstype=$psstype
+#end if
+
+
+#if $input_files_mmetadatafile:
+#def list_dict_to_string(list_dict):
+	#set $file_list = list_dict[0]['additional_input'].__getattr__('file_name')
+	#for d in list_dict[1:]:
+		#set $file_list = $file_list + ' --m-metadata-file=' + d['additional_input'].__getattr__('file_name')
+	#end for
+	#return $file_list
+#end def
+ --m-metadata-file=$list_dict_to_string($input_files_mmetadatafile)
+#end if
+
+
+--o-visualization=ovisualization
+;
+qiime tools export --input-path ovisualization.qzv --output-path out   && mkdir -p '$ovisualization.files_path'
+&& cp -r out/* '$ovisualization.files_path'
+&& mv '$ovisualization.files_path/index.html' '$ovisualization';
+	]]></command>
+	<inputs>
+		<param label="--p-formula: TEXT     R-style formula specifying the model. All terms must be present in the sample metadata or metadata-transformable artifacts and can be continuous or categorical metadata columns. Formulae will be in the format 'a ~ b + c', where 'a' is the metric (dependent variable) and 'b' and 'c' are independent covariates. Use '+' to add a variable; '+ a:b' to add an interaction between variables a and b; '*' to include a variable and all interactions; and '-' to subtract a particular term (e.g., an interaction term). See https://patsy.readthedocs.io/en/latest/formulas.html for full documentation of valid formula operators. Always enclose formulae in quotes to avoid unpleasant surprises.                                   [required]" name="pformula" optional="False" type="text"/>
+		<param label="--p-sstype: " name="psstype" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="I">I</option>
+			<option value="II">II</option>
+			<option value="III">III</option>
+		</param>
+
+		<repeat name="input_files_mmetadatafile" optional="True" title="--m-metadata-file">
+			<param label="--m-metadata-file: Metadata file or artifact viewable as metadata. This option may be supplied multiple times to merge metadata. [optional]" name="additional_input" type="data" format="tabular,qza,no_unzip.zip" />
+		</repeat>
+
+	</inputs>
+	<outputs>
+		<data format="html" label="${tool.name} on ${on_string}: visualization.qzv" name="ovisualization"/>
+	</outputs>
+	<help><![CDATA[
+ANOVA test
+##########
+
+Perform an ANOVA test on any factors present in a metadata file and/or
+metadata-transformable artifacts. This is followed by pairwise t-tests to
+examine pairwise differences between categorical sample groups.
+
+Parameters
+----------
+metadata : Metadata
+    Sample metadata containing formula terms.
+formula : Str
+    R-style formula specifying the model. All terms must be present in the
+    sample metadata or metadata-transformable artifacts and can be
+    continuous or categorical metadata columns. Formulae will be in the
+    format "a ~ b + c", where "a" is the metric (dependent variable) and
+    "b" and "c" are independent covariates. Use "+" to add a variable; "+
+    a:b" to add an interaction between variables a and b; "*" to include a
+    variable and all interactions; and "-" to subtract a particular term
+    (e.g., an interaction term). See
+    https://patsy.readthedocs.io/en/latest/formulas.html for full
+    documentation of valid formula operators. Always enclose formulae in
+    quotes to avoid unpleasant surprises.
+sstype : Str % Choices('I', 'II', 'III'), optional
+    Type of sum of squares calculation to perform (I, II, or III).
+
+Returns
+-------
+visualization : Visualization
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_longitudinal_feature-volatility.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,176 @@
+<?xml version="1.0" ?>
+<tool id="qiime_longitudinal_feature-volatility" name="qiime longitudinal feature-volatility" version="2019.4">
+	<description> - Feature volatility analysis</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime longitudinal feature-volatility
+
+--i-table=$itable
+--p-state-column="$pstatecolumn"
+
+#if str($pindividualidcolumn):
+ --p-individual-id-column="$pindividualidcolumn"
+#end if
+
+#if $pcv:
+ --p-cv=$pcv
+#end if
+
+#if str($prandomstate):
+ --p-random-state="$prandomstate"
+#end if
+
+#set $pnjobs = '${GALAXY_SLOTS:-4}'
+
+#if str($pnjobs):
+ --p-n-jobs="$pnjobs"
+#end if
+
+
+#if $pnestimators:
+ --p-n-estimators=$pnestimators
+#end if
+
+#if str($pestimator) != 'None':
+ --p-estimator=$pestimator
+#end if
+
+#if $pparametertuning:
+ --p-parameter-tuning
+#end if
+
+#if str($pmissingsamples) != 'None':
+ --p-missing-samples=$pmissingsamples
+#end if
+
+
+#if $input_files_mmetadatafile:
+#def list_dict_to_string(list_dict):
+	#set $file_list = list_dict[0]['additional_input'].__getattr__('file_name')
+	#for d in list_dict[1:]:
+		#set $file_list = $file_list + ' --m-metadata-file=' + d['additional_input'].__getattr__('file_name')
+	#end for
+	#return $file_list
+#end def
+ --m-metadata-file=$list_dict_to_string($input_files_mmetadatafile)
+#end if
+
+
+--o-filtered-table=ofilteredtable
+--o-feature-importance=ofeatureimportance
+--o-volatility-plot=ovolatilityplot
+--o-accuracy-results=oaccuracyresults
+--o-sample-estimator=osampleestimator
+;
+cp ofilteredtable.qza $ofilteredtable;
+cp ofeatureimportance.qza $ofeatureimportance;
+qiime tools export --input-path ovolatilityplot.qzv --output-path out   && mkdir -p '$ovolatilityplot.files_path'
+&& cp -r out/* '$ovolatilityplot.files_path'
+&& mv '$ovolatilityplot.files_path/index.html' '$ovolatilityplot';
+qiime tools export --input-path oaccuracyresults.qzv --output-path out   && mkdir -p '$oaccuracyresults.files_path'
+&& cp -r out/* '$oaccuracyresults.files_path'
+&& mv '$oaccuracyresults.files_path/index.html' '$oaccuracyresults';
+cp osampleestimator.qza $osampleestimator
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-table: ARTIFACT FeatureTable[Frequency] Feature table containing all features that should be used for target prediction.                [required]" name="itable" optional="False" type="data"/>
+		<param label="--p-state-column: TEXT  Metadata containing collection time (state) values for each sample. Must contain exclusively numeric values.                                    [required]" name="pstatecolumn" optional="False" type="text"/>
+		<param label="--p-individual-id-column: TEXT Metadata column containing IDs for individual subjects.                                  [optional]" name="pindividualidcolumn" optional="True" type="text"/>
+		<param label="--p-cv: INTEGER         Number of k-fold cross-validations to perform. Range(1, None)                                                [default: 5]" name="pcv" optional="True" type="integer" min="1" value="5"/>
+		<param label="--p-random-state: INTEGER Seed used by random number generator.      [optional]" name="prandomstate" optional="True" type="integer"/>
+		<param label="--p-n-estimators: INTEGER Range(1, None)       Number of trees to grow for estimation. More trees will improve predictive accuracy up to a threshold level, but will also increase time and memory requirements. This parameter only affects ensemble estimators, such as Random Forest, AdaBoost, ExtraTrees, and GradientBoosting.      [default: 100]" name="pnestimators" optional="True" type="integer" min="1" value="100"/>
+		<param label="--p-estimator: " name="pestimator" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="RandomForestRegressor">RandomForestRegressor</option>
+			<option value="ExtraTreesRegressor">ExtraTreesRegressor</option>
+			<option value="GradientBoostingRegressor">GradientBoostingRegressor</option>
+			<option value="AdaBoostRegressor">AdaBoostRegressor</option>
+			<option value="ElasticNet">ElasticNet</option>
+			<option value="Ridge">Ridge</option>
+			<option value="Lasso">Lasso</option>
+			<option value="KNeighborsRegressor">KNeighborsRegressor</option>
+			<option value="LinearSVR">LinearSVR</option>
+			<option value="SVR">SVR</option>
+		</param>
+		<param label="--p-parameter-tuning: --p-no-parameter-tuning Automatically tune hyperparameters using random grid search.                              [default: False]" name="pparametertuning" selected="False" type="boolean"/>
+		<param label="--p-missing-samples: " name="pmissingsamples" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="error">error</option>
+			<option value="ignore">ignore</option>
+		</param>
+
+		<repeat name="input_files_mmetadatafile" optional="True" title="--m-metadata-file">
+			<param label="--m-metadata-file: Metadata file or artifact viewable as metadata. This option may be supplied multiple times to merge metadata. [optional]" name="additional_input" type="data" format="tabular,qza,no_unzip.zip" />
+		</repeat>
+
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: filteredtable.qza" name="ofilteredtable"/>
+		<data format="qza" label="${tool.name} on ${on_string}: featureimportance.qza" name="ofeatureimportance"/>
+		<data format="html" label="${tool.name} on ${on_string}: volatilityplot.qzv" name="ovolatilityplot"/>
+		<data format="html" label="${tool.name} on ${on_string}: accuracyresults.qzv" name="oaccuracyresults"/>
+		<data format="qza" label="${tool.name} on ${on_string}: sampleestimator.qza" name="osampleestimator"/>
+	</outputs>
+	<help><![CDATA[
+Feature volatility analysis
+###########################
+
+Identify features that are predictive of a numeric metadata column,
+state_column (e.g., time), and plot their relative frequencies across
+states using interactive feature volatility plots. A supervised learning
+regressor is used to identify important features and assess their ability
+to predict sample states. state_column will typically be a measure of time,
+but any numeric metadata column can be used.
+
+Parameters
+----------
+table : FeatureTable[Frequency]
+    Feature table containing all features that should be used for target
+    prediction.
+metadata : Metadata
+    Sample metadata file containing individual_id_column.
+state_column : Str
+    Metadata containing collection time (state) values for each sample.
+    Must contain exclusively numeric values.
+individual_id_column : Str, optional
+    Metadata column containing IDs for individual subjects.
+cv : Int % Range(1, None), optional
+    Number of k-fold cross-validations to perform.
+random_state : Int, optional
+    Seed used by random number generator.
+n_estimators : Int % Range(1, None), optional
+    Number of trees to grow for estimation. More trees will improve
+    predictive accuracy up to a threshold level, but will also increase
+    time and memory requirements. This parameter only affects ensemble
+    estimators, such as Random Forest, AdaBoost, ExtraTrees, and
+    GradientBoosting.
+estimator : Str % Choices('RandomForestRegressor', 'ExtraTreesRegressor', 'GradientBoostingRegressor', 'AdaBoostRegressor', 'ElasticNet', 'Ridge', 'Lasso', 'KNeighborsRegressor', 'LinearSVR', 'SVR'), optional
+    Estimator method to use for sample prediction.
+parameter_tuning : Bool, optional
+    Automatically tune hyperparameters using random grid search.
+missing_samples : Str % Choices('error', 'ignore'), optional
+    How to handle missing samples in metadata. "error" will fail if missing
+    samples are detected. "ignore" will cause the feature table and
+    metadata to be filtered, so that only samples found in both files are
+    retained.
+
+Returns
+-------
+filtered_table : FeatureTable[RelativeFrequency]
+    Feature table containing only important features.
+feature_importance : FeatureData[Importance]
+    Importance of each input feature to model accuracy.
+volatility_plot : Visualization
+    Interactive volatility plot visualization.
+accuracy_results : Visualization
+    Accuracy results visualization.
+sample_estimator : SampleEstimator[Regressor]
+    Trained sample regressor.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_longitudinal_first-differences.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,116 @@
+<?xml version="1.0" ?>
+<tool id="qiime_longitudinal_first-differences" name="qiime longitudinal first-differences" version="2019.4">
+	<description> - Compute first differences or difference from baseline between sequential states</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime longitudinal first-differences
+
+--p-state-column="$pstatecolumn"
+--p-individual-id-column="$pindividualidcolumn"
+--p-metric="$pmetric"
+
+#if str($itable) != 'None':
+ --i-table=$itable
+#end if
+
+#if str($preplicatehandling) != 'None':
+ --p-replicate-handling=$preplicatehandling
+#end if
+
+#if str($pbaseline):
+ --p-baseline="$pbaseline"
+#end if
+
+
+#if $input_files_mmetadatafile:
+#def list_dict_to_string(list_dict):
+	#set $file_list = list_dict[0]['additional_input'].__getattr__('file_name')
+	#for d in list_dict[1:]:
+		#set $file_list = $file_list + ' --m-metadata-file=' + d['additional_input'].__getattr__('file_name')
+	#end for
+	#return $file_list
+#end def
+ --m-metadata-file=$list_dict_to_string($input_files_mmetadatafile)
+#end if
+
+
+--o-first-differences=ofirstdifferences
+;
+cp ofirstdifferences.qza $ofirstdifferences
+	]]></command>
+	<inputs>
+		<param label="--p-state-column: TEXT  Metadata column containing state (time) variable information.                               [required]" name="pstatecolumn" optional="False" type="text"/>
+		<param label="--p-individual-id-column: TEXT Metadata column containing IDs for individual subjects.                                  [required]" name="pindividualidcolumn" optional="False" type="text"/>
+		<param label="--p-metric: TEXT        Numerical metadata or artifact column to test. [required]" name="pmetric" optional="False" type="text"/>
+		<param format="qza,no_unzip.zip" label="--i-table: ARTIFACT FeatureTable[RelativeFrequency] Feature table to optionally use for computing first differences.                               [optional]" name="itable" optional="True" type="data"/>
+		<param label="--p-replicate-handling: " name="preplicatehandling" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="error">error</option>
+			<option value="random">random</option>
+			<option value="drop">drop</option>
+		</param>
+		<param label="--p-baseline: NUMBER    A value listed in the state-column metadata column against which all other states should be compared. Toggles calculation of static differences instead of first differences (which are calculated if no value is given for baseline). If a 'baseline' value is provided, sample differences at each state are compared against the baseline state, instead of the previous state. Must be a value listed in the state-column.                              [optional]" name="pbaseline" optional="True" type="float"/>
+
+		<repeat name="input_files_mmetadatafile" optional="True" title="--m-metadata-file">
+			<param label="--m-metadata-file: Metadata file or artifact viewable as metadata. This option may be supplied multiple times to merge metadata. [optional]" name="additional_input" type="data" format="tabular,qza,no_unzip.zip" />
+		</repeat>
+
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: firstdifferences.qza" name="ofirstdifferences"/>
+	</outputs>
+	<help><![CDATA[
+Compute first differences or difference from baseline between sequential states
+###############################################################################
+
+Calculates first differences in "metric" between sequential states for
+samples collected from individual subjects sampled repeatedly at two or
+more states. First differences can be performed on a metadata column
+(including artifacts that can be input as metadata) or a feature in a
+feature table. Outputs a data series of first differences for each
+individual subject at each sequential pair of states, labeled by the
+SampleID of the second state (e.g., paired differences between time 0 and
+time 1 would be labeled by the SampleIDs at time 1). This file can be used
+as input to linear mixed effects models or other longitudinal or diversity
+methods to compare changes in first differences across time or among groups
+of subjects. Also supports differences from baseline (or other static
+comparison state) by setting the "baseline" parameter.
+
+Parameters
+----------
+metadata : Metadata
+    Sample metadata file containing individual_id_column.
+state_column : Str
+    Metadata column containing state (time) variable information.
+individual_id_column : Str
+    Metadata column containing IDs for individual subjects.
+metric : Str
+    Numerical metadata or artifact column to test.
+replicate_handling : Str % Choices('error', 'random', 'drop'), optional
+    Choose how replicate samples are handled. If replicates are detected,
+    "error" causes method to fail; "drop" will discard all replicated
+    samples; "random" chooses one representative at random from among
+    replicates.
+baseline : Float, optional
+    A value listed in the state_column metadata column against which all
+    other states should be compared. Toggles calculation of static
+    differences instead of first differences (which are calculated if no
+    value is given for baseline). If a "baseline" value is provided, sample
+    differences at each state are compared against the baseline state,
+    instead of the previous state. Must be a value listed in the
+    state_column.
+table : FeatureTable[RelativeFrequency], optional
+    Feature table to optionally use for computing first differences.
+
+Returns
+-------
+first_differences : SampleData[FirstDifferences]
+    Series of first differences.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_longitudinal_first-distances.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,109 @@
+<?xml version="1.0" ?>
+<tool id="qiime_longitudinal_first-distances" name="qiime longitudinal first-distances" version="2019.4">
+	<description> - Compute first distances or distance from baseline between sequential states</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime longitudinal first-distances
+
+--i-distance-matrix=$idistancematrix
+--p-state-column="$pstatecolumn"
+--p-individual-id-column="$pindividualidcolumn"
+
+#if str($pbaseline):
+ --p-baseline="$pbaseline"
+#end if
+
+#if str($preplicatehandling) != 'None':
+ --p-replicate-handling=$preplicatehandling
+#end if
+
+
+#if $input_files_mmetadatafile:
+#def list_dict_to_string(list_dict):
+	#set $file_list = list_dict[0]['additional_input'].__getattr__('file_name')
+	#for d in list_dict[1:]:
+		#set $file_list = $file_list + ' --m-metadata-file=' + d['additional_input'].__getattr__('file_name')
+	#end for
+	#return $file_list
+#end def
+ --m-metadata-file=$list_dict_to_string($input_files_mmetadatafile)
+#end if
+
+
+--o-first-distances=ofirstdistances
+;
+cp ofirstdistances.qza $ofirstdistances
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-distance-matrix: ARTIFACT DistanceMatrix       Matrix of distances between pairs of samples. [required]" name="idistancematrix" optional="False" type="data"/>
+		<param label="--p-state-column: TEXT  Metadata column containing state (time) variable information.                               [required]" name="pstatecolumn" optional="False" type="text"/>
+		<param label="--p-individual-id-column: TEXT Metadata column containing IDs for individual subjects.                                  [required]" name="pindividualidcolumn" optional="False" type="text"/>
+		<param label="--p-baseline: NUMBER    A value listed in the state-column metadata column against which all other states should be compared. Toggles calculation of static distances instead of first distances (which are calculated if no value is given for baseline). If a 'baseline' value is provided, sample distances at each state are compared against the baseline state, instead of the previous state. Must be a value listed in the state-column. [optional]" name="pbaseline" optional="True" type="float"/>
+		<param label="--p-replicate-handling: " name="preplicatehandling" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="error">error</option>
+			<option value="random">random</option>
+			<option value="drop">drop</option>
+		</param>
+
+		<repeat name="input_files_mmetadatafile" optional="True" title="--m-metadata-file">
+			<param label="--m-metadata-file: Metadata file or artifact viewable as metadata. This option may be supplied multiple times to merge metadata. [optional]" name="additional_input" type="data" format="tabular,qza,no_unzip.zip" />
+		</repeat>
+
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: firstdistances.qza" name="ofirstdistances"/>
+	</outputs>
+	<help><![CDATA[
+Compute first distances or distance from baseline between sequential states
+###########################################################################
+
+Calculates first distances between sequential states for samples collected
+from individual subjects sampled repeatedly at two or more states. This
+method is similar to the "first differences" method, except that it
+requires a distance matrix as input and calculates first differences as
+distances between successive states. Outputs a data series of first
+distances for each individual subject at each sequential pair of states,
+labeled by the SampleID of the second state (e.g., paired distances between
+time 0 and time 1 would be labeled by the SampleIDs at time 1). This file
+can be used as input to linear mixed effects models or other longitudinal
+or diversity methods to compare changes in first distances across time or
+among groups of subjects. Also supports distance from baseline (or other
+static comparison state) by setting the "baseline" parameter.
+
+Parameters
+----------
+distance_matrix : DistanceMatrix
+    Matrix of distances between pairs of samples.
+metadata : Metadata
+    Sample metadata file containing individual_id_column.
+state_column : Str
+    Metadata column containing state (time) variable information.
+individual_id_column : Str
+    Metadata column containing IDs for individual subjects.
+baseline : Float, optional
+    A value listed in the state_column metadata column against which all
+    other states should be compared. Toggles calculation of static
+    distances instead of first distances (which are calculated if no value
+    is given for baseline). If a "baseline" value is provided, sample
+    distances at each state are compared against the baseline state,
+    instead of the previous state. Must be a value listed in the
+    state_column.
+replicate_handling : Str % Choices('error', 'random', 'drop'), optional
+    Choose how replicate samples are handled. If replicates are detected,
+    "error" causes method to fail; "drop" will discard all replicated
+    samples; "random" chooses one representative at random from among
+    replicates.
+
+Returns
+-------
+first_distances : SampleData[FirstDifferences]
+    Series of first distances.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_longitudinal_linear-mixed-effects.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,166 @@
+<?xml version="1.0" ?>
+<tool id="qiime_longitudinal_linear-mixed-effects" name="qiime longitudinal linear-mixed-effects" version="2019.4">
+	<description> - Linear mixed effects modeling</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime longitudinal linear-mixed-effects
+
+
+#if $input_files_mmetadatafile:
+#def list_dict_to_string(list_dict):
+	#set $file_list = list_dict[0]['additional_input'].__getattr__('file_name')
+	#for d in list_dict[1:]:
+		#set $file_list = $file_list + ' --m-metadata-file=' + d['additional_input'].__getattr__('file_name')
+	#end for
+	#return $file_list
+#end def
+ --m-metadata-file=$list_dict_to_string($input_files_mmetadatafile)
+#end if
+
+
+--p-state-column="$pstatecolumn"
+--p-individual-id-column="$pindividualidcolumn"
+
+#if str($itable) != 'None':
+ --i-table=$itable
+#end if
+
+#if str($pmetric):
+ --p-metric="$pmetric"
+#end if
+
+#if str($pgroupcolumns):
+ --p-group-columns="$pgroupcolumns"
+#end if
+
+#if str($prandomeffects):
+ --p-random-effects="$prandomeffects"
+#end if
+
+#if str($ppalette) != 'None':
+ --p-palette=$ppalette
+#end if
+
+#if $plowess:
+ --p-lowess
+#end if
+
+#if $pci:
+ --p-ci=$pci
+#end if
+
+#if str($pformula):
+ --p-formula="$pformula"
+#end if
+
+--o-visualization=ovisualization
+;
+qiime tools export --input-path ovisualization.qzv --output-path out   && mkdir -p '$ovisualization.files_path'
+&& cp -r out/* '$ovisualization.files_path'
+&& mv '$ovisualization.files_path/index.html' '$ovisualization';
+	]]></command>
+	<inputs>
+		<param label="--p-state-column: TEXT   Metadata column containing state (time) variable information.                              [required]" name="pstatecolumn" optional="False" type="text"/>
+		<param label="--p-individual-id-column: TEXT Metadata column containing IDs for individual subjects.                                 [required]" name="pindividualidcolumn" optional="False" type="text"/>
+		<param format="qza,no_unzip.zip" label="--i-table: ARTIFACT FeatureTable[RelativeFrequency] Feature table containing metric.          [optional]" name="itable" optional="True" type="data"/>
+		<param label="--p-metric: TEXT         Dependent variable column name. Must be a column name located in the metadata or feature table files. [optional]" name="pmetric" optional="True" type="text"/>
+		<param label="--p-group-columns: TEXT  Comma-separated list (without spaces) of metadata columns to use as independent covariates used to determine mean structure of 'metric'.     [optional]" name="pgroupcolumns" optional="True" type="text"/>
+		<param label="--p-random-effects: TEXT Comma-separated list (without spaces) of metadata columns to use as independent covariates used to determine the variance and covariance structure (random effects) of 'metric'. To add a random slope, the same value passed to 'state-column' should be passed here. A random intercept for each individual is set by default and does not need to be passed here.                                     [optional]" name="prandomeffects" optional="True" type="text"/>
+		<param label="--p-palette: " name="ppalette" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="Set1">Set1</option>
+			<option value="Set2">Set2</option>
+			<option value="Set3">Set3</option>
+			<option value="Pastel1">Pastel1</option>
+			<option value="Pastel2">Pastel2</option>
+			<option value="Paired">Paired</option>
+			<option value="Accent">Accent</option>
+			<option value="Dark2">Dark2</option>
+			<option value="tab10">tab10</option>
+			<option value="tab20">tab20</option>
+			<option value="tab20b">tab20b</option>
+			<option value="tab20c">tab20c</option>
+			<option value="viridis">viridis</option>
+			<option value="plasma">plasma</option>
+			<option value="inferno">inferno</option>
+			<option value="magma">magma</option>
+			<option value="terrain">terrain</option>
+			<option value="rainbow">rainbow</option>
+		</param>
+		<param label="--p-lowess: --p-no-lowess Estimate locally weighted scatterplot smoothing. Note that this will eliminate confidence interval plotting.                           [default: False]" name="plowess" selected="False" type="boolean"/>
+		<param label="--p-ci: NUMBER           Size of the confidence interval for the regression Range(0, 100)         estimate.                              [default: 95]" name="pci" optional="True" type="float" min="0" max="100" value="95"/>
+		<param label="--p-formula: TEXT        R-style formula to use for model specification. A formula must be used if the 'metric' parameter is None. Note that the metric and group columns specified in the formula will override metric and group columns that are passed separately as parameters to this method. Formulae will be in the format 'a ~ b + c', where 'a' is the metric (dependent variable) and 'b' and 'c' are independent covariates. Use '+' to add a variable; '+ a:b' to add an interaction between variables a and b; '*' to include a variable and all interactions; and '-' to subtract a particular term (e.g., an interaction term). See https://patsy.readthedocs.io/en/latest/formulas.html for full documentation of valid formula operators. Always enclose formulae in quotes to avoid unpleasant surprises.                     [optional]" name="pformula" optional="True" type="text"/>
+
+		<repeat name="input_files_mmetadatafile" optional="True" title="--m-metadata-file">
+			<param label="--m-metadata-file: Metadata file or artifact viewable as metadata. This option may be supplied multiple times to merge metadata. [optional]" name="additional_input" type="data" format="tabular,qza,no_unzip.zip" />
+		</repeat>
+
+	</inputs>
+	<outputs>
+		<data format="html" label="${tool.name} on ${on_string}: visualization.qzv" name="ovisualization"/>
+	</outputs>
+	<help><![CDATA[
+Linear mixed effects modeling
+#############################
+
+Linear mixed effects models evaluate the contribution of exogenous
+covariates "group_columns" and "random_effects" to a single dependent
+variable, "metric". Perform LME and plot line plots of each group column. A
+feature table artifact is required input, though whether "metric" is
+derived from the feature table or metadata is optional.
+
+Parameters
+----------
+metadata : Metadata
+    Sample metadata file containing individual_id_column.
+state_column : Str
+    Metadata column containing state (time) variable information.
+individual_id_column : Str
+    Metadata column containing IDs for individual subjects.
+metric : Str, optional
+    Dependent variable column name. Must be a column name located in the
+    metadata or feature table files.
+group_columns : Str, optional
+    Comma-separated list (without spaces) of metadata columns to use as
+    independent covariates used to determine mean structure of "metric".
+random_effects : Str, optional
+    Comma-separated list (without spaces) of metadata columns to use as
+    independent covariates used to determine the variance and covariance
+    structure (random effects) of "metric". To add a random slope, the same
+    value passed to "state_column" should be passed here. A random
+    intercept for each individual is set by default and does not need to be
+    passed here.
+table : FeatureTable[RelativeFrequency], optional
+    Feature table containing metric.
+palette : Str % Choices('Set1', 'Set2', 'Set3', 'Pastel1', 'Pastel2', 'Paired', 'Accent', 'Dark2', 'tab10', 'tab20', 'tab20b', 'tab20c', 'viridis', 'plasma', 'inferno', 'magma', 'terrain', 'rainbow'), optional
+    Color palette to use for generating boxplots.
+lowess : Bool, optional
+    Estimate locally weighted scatterplot smoothing. Note that this will
+    eliminate confidence interval plotting.
+ci : Float % Range(0, 100), optional
+    Size of the confidence interval for the regression estimate.
+formula : Str, optional
+    R-style formula to use for model specification. A formula must be used
+    if the "metric" parameter is None. Note that the metric and group
+    columns specified in the formula will override metric and group columns
+    that are passed separately as parameters to this method. Formulae will
+    be in the format "a ~ b + c", where "a" is the metric (dependent
+    variable) and "b" and "c" are independent covariates. Use "+" to add a
+    variable; "+ a:b" to add an interaction between variables a and b; "*"
+    to include a variable and all interactions; and "-" to subtract a
+    particular term (e.g., an interaction term). See
+    https://patsy.readthedocs.io/en/latest/formulas.html for full
+    documentation of valid formula operators. Always enclose formulae in
+    quotes to avoid unpleasant surprises.
+
+Returns
+-------
+visualization : Visualization
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_longitudinal_maturity-index.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,255 @@
+<?xml version="1.0" ?>
+<tool id="qiime_longitudinal_maturity-index" name="qiime longitudinal maturity-index" version="2019.4">
+	<description> - Microbial maturity index prediction.</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime longitudinal maturity-index
+
+--i-table=$itable
+--p-state-column="$pstatecolumn"
+--p-group-by="$pgroupby"
+--p-control="$pcontrol"
+
+#if str($pindividualidcolumn):
+ --p-individual-id-column="$pindividualidcolumn"
+#end if
+
+#if str($pestimator) != 'None':
+ --p-estimator=$pestimator
+#end if
+
+#if $pnestimators:
+ --p-n-estimators=$pnestimators
+#end if
+
+#if $ptestsize:
+ --p-test-size=$ptestsize
+#end if
+
+#if $pstep:
+ --p-step=$pstep
+#end if
+
+#if $pcv:
+ --p-cv=$pcv
+#end if
+
+#if str($prandomstate):
+ --p-random-state="$prandomstate"
+#end if
+
+#set $pnjobs = '${GALAXY_SLOTS:-4}'
+#if str($pnjobs):
+ --p-n-jobs="$pnjobs"
+#end if
+
+
+#if $pparametertuning:
+ --p-parameter-tuning
+#end if
+
+#if $poptimizefeatureselection:
+ --p-optimize-feature-selection
+#end if
+
+#if $pstratify:
+ --p-stratify
+#end if
+
+#if str($pmissingsamples) != 'None':
+ --p-missing-samples=$pmissingsamples
+#end if
+
+#if $pfeaturecount:
+ --p-feature-count=$pfeaturecount
+#end if
+
+
+#if $input_files_mmetadatafile:
+#def list_dict_to_string(list_dict):
+	#set $file_list = list_dict[0]['additional_input'].__getattr__('file_name')
+	#for d in list_dict[1:]:
+		#set $file_list = $file_list + ' --m-metadata-file=' + d['additional_input'].__getattr__('file_name')
+	#end for
+	#return $file_list
+#end def
+ --m-metadata-file=$list_dict_to_string($input_files_mmetadatafile)
+#end if
+
+
+--o-sample-estimator=osampleestimator
+--o-feature-importance=ofeatureimportance
+--o-predictions=opredictions
+--o-model-summary=omodelsummary
+--o-accuracy-results=oaccuracyresults
+--o-maz-scores=omazscores
+--o-clustermap=oclustermap
+--o-volatility-plots=ovolatilityplots
+;
+cp osampleestimator.qza $osampleestimator;
+cp ofeatureimportance.qza $ofeatureimportance;
+cp opredictions.qza $opredictions;
+qiime tools export --input-path omodelsummary.qzv --output-path out   && mkdir -p '$omodelsummary.files_path'
+&& cp -r out/* '$omodelsummary.files_path'
+&& mv '$omodelsummary.files_path/index.html' '$omodelsummary';
+qiime tools export --input-path oaccuracyresults.qzv --output-path out   && mkdir -p '$oaccuracyresults.files_path'
+&& cp -r out/* '$oaccuracyresults.files_path'
+&& mv '$oaccuracyresults.files_path/index.html' '$oaccuracyresults';
+cp omazscores.qza $omazscores;
+qiime tools export --input-path oclustermap.qzv --output-path out   && mkdir -p '$oclustermap.files_path'
+&& cp -r out/* '$oclustermap.files_path'
+&& mv '$oclustermap.files_path/index.html' '$oclustermap';
+qiime tools export --input-path ovolatilityplots.qzv --output-path out   && mkdir -p '$ovolatilityplots.files_path'
+&& cp -r out/* '$ovolatilityplots.files_path'
+&& mv '$ovolatilityplots.files_path/index.html' '$ovolatilityplots'
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-table: ARTIFACT FeatureTable[Frequency] Feature table containing all features that should be used for target prediction.                [required]" name="itable" optional="False" type="data"/>
+		<param label="--p-state-column: TEXT  Numeric metadata column containing sampling time (state) data to use as prediction target.  [required]" name="pstatecolumn" optional="False" type="text"/>
+		<param label="--p-group-by: TEXT      Categorical metadata column to use for plotting and significance testing between main treatment groups. [required]" name="pgroupby" optional="False" type="text"/>
+		<param label="--p-control: TEXT       Value of group-by to use as control group. The regression model will be trained using only control group data, and the maturity scores of other groups consequently will be assessed relative to this group. [required]" name="pcontrol" optional="False" type="text"/>
+		<param label="--p-individual-id-column: TEXT Optional metadata column containing IDs for individual subjects. Adds individual subject (spaghetti) vectors to volatility charts if a column name is provided.                          [optional]" name="pindividualidcolumn" optional="True" type="text"/>
+		<param label="--p-estimator: " name="pestimator" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="RandomForestRegressor">RandomForestRegressor</option>
+			<option value="ExtraTreesRegressor">ExtraTreesRegressor</option>
+			<option value="GradientBoostingRegressor">GradientBoostingRegressor</option>
+			<option value="AdaBoostRegressor">AdaBoostRegressor</option>
+			<option value="ElasticNet">ElasticNet</option>
+			<option value="Ridge">Ridge</option>
+			<option value="Lasso">Lasso</option>
+			<option value="KNeighborsRegressor">KNeighborsRegressor</option>
+			<option value="LinearSVR">LinearSVR</option>
+			<option value="SVR">SVR</option>
+		</param>
+		<param label="--p-n-estimators: INTEGER Range(1, None)       Number of trees to grow for estimation. More trees will improve predictive accuracy up to a threshold level, but will also increase time and memory requirements. This parameter only affects ensemble estimators, such as Random Forest, AdaBoost, ExtraTrees, and GradientBoosting.      [default: 100]" name="pnestimators" optional="True" type="integer" min="1" value="100"/>
+		<param label="--p-test-size: PROPORTION Range(0.0, 1.0, inclusive_start=False) Fraction of input samples to exclude from training set and use for classifier testing.    [default: 0.5]" name="ptestsize" optional="True" type="float" exclusive_start="True" min="0" max="1" value="0.5"/>
+		<param label="--p-step: PROPORTION Range(0.0, 1.0, inclusive_start=False) If optimize-feature-selection is True, step is the percentage of features to remove at each iteration. [default: 0.05]" name="pstep" optional="True" type="float" exclusive_start="True" min="0" max="1" value="0.05"/>
+		<param label="--p-cv: INTEGER         Number of k-fold cross-validations to perform. Range(1, None)                                                [default: 5]" name="pcv" optional="True" type="integer" min="1" value="5"/>
+		<param label="--p-random-state: INTEGER Seed used by random number generator.      [optional]" name="prandomstate" optional="True" type="integer"/>
+		<param label="--p-parameter-tuning: --p-no-parameter-tuning Automatically tune hyperparameters using random grid search.                              [default: False]" name="pparametertuning" selected="False" type="boolean"/>
+		<param label="--p-optimize-feature-selection: --p-no-optimize-feature-selection Automatically optimize input feature selection using recursive feature elimination.       [default: False]" name="poptimizefeatureselection" selected="False" type="boolean"/>
+		<param label="--p-stratify: --p-no-stratify Evenly stratify training and test data among metadata categories. If True, all values in column must match at least two samples.     [default: False]" name="pstratify" selected="False" type="boolean"/>
+		<param label="--p-missing-samples: " name="pmissingsamples" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="error">error</option>
+			<option value="ignore">ignore</option>
+		</param>
+		<param label="--p-feature-count: INTEGER Range(0, None)       Filter feature table to include top N most important features. Set to zero to include all features. [default: 50]" name="pfeaturecount" optional="True" type="integer" min="0" value="50"/>
+
+		<repeat name="input_files_mmetadatafile" optional="True" title="--m-metadata-file">
+			<param label="--m-metadata-file: Metadata file or artifact viewable as metadata. This option may be supplied multiple times to merge metadata. [optional]" name="additional_input" type="data" format="tabular,qza,no_unzip.zip" />
+		</repeat>	</inputs>
+
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: sampleestimator.qza" name="osampleestimator"/>
+		<data format="qza" label="${tool.name} on ${on_string}: featureimportance.qza" name="ofeatureimportance"/>
+		<data format="qza" label="${tool.name} on ${on_string}: predictions.qza" name="opredictions"/>
+		<data format="html" label="${tool.name} on ${on_string}: modelsummary.qzv" name="omodelsummary"/>
+		<data format="html" label="${tool.name} on ${on_string}: accuracyresults.qzv" name="oaccuracyresults"/>
+		<data format="qza" label="${tool.name} on ${on_string}: mazscores.qza" name="omazscores"/>
+		<data format="html" label="${tool.name} on ${on_string}: clustermap.qzv" name="oclustermap"/>
+		<data format="html" label="${tool.name} on ${on_string}: volatilityplots.qzv" name="ovolatilityplots"/>
+	</outputs>
+	<help><![CDATA[
+Microbial maturity index prediction.
+####################################
+
+Calculates a "microbial maturity" index from a regression model trained on
+feature data to predict a given continuous metadata column, e.g., to
+predict age as a function of microbiota composition. The model is trained
+on a subset of control group samples, then predicts the column value for
+all samples. This visualization computes maturity index z-scores to compare
+relative "maturity" between each group, as described in
+doi:10.1038/nature13421. This method can be used to predict between-group
+differences in relative trajectory across any type of continuous metadata
+gradient, e.g., intestinal microbiome development by age, microbial
+succession during wine fermentation, or microbial community differences
+along environmental gradients, as a function of two or more different
+"treatment" groups.
+
+Parameters
+----------
+table : FeatureTable[Frequency]
+    Feature table containing all features that should be used for target
+    prediction.
+metadata : Metadata
+	\
+state_column : Str
+    Numeric metadata column containing sampling time (state) data to use as
+    prediction target.
+group_by : Str
+    Categorical metadata column to use for plotting and significance
+    testing between main treatment groups.
+control : Str
+    Value of group_by to use as control group. The regression model will be
+    trained using only control group data, and the maturity scores of other
+    groups consequently will be assessed relative to this group.
+individual_id_column : Str, optional
+    Optional metadata column containing IDs for individual subjects. Adds
+    individual subject (spaghetti) vectors to volatility charts if a column
+    name is provided.
+estimator : Str % Choices('RandomForestRegressor', 'ExtraTreesRegressor', 'GradientBoostingRegressor', 'AdaBoostRegressor', 'ElasticNet', 'Ridge', 'Lasso', 'KNeighborsRegressor', 'LinearSVR', 'SVR'), optional
+    Regression model to use for prediction.
+n_estimators : Int % Range(1, None), optional
+    Number of trees to grow for estimation. More trees will improve
+    predictive accuracy up to a threshold level, but will also increase
+    time and memory requirements. This parameter only affects ensemble
+    estimators, such as Random Forest, AdaBoost, ExtraTrees, and
+    GradientBoosting.
+test_size : Float % Range(0.0, 1.0, inclusive_start=False), optional
+    Fraction of input samples to exclude from training set and use for
+    classifier testing.
+step : Float % Range(0.0, 1.0, inclusive_start=False), optional
+    If optimize_feature_selection is True, step is the percentage of
+    features to remove at each iteration.
+cv : Int % Range(1, None), optional
+    Number of k-fold cross-validations to perform.
+random_state : Int, optional
+    Seed used by random number generator.
+parameter_tuning : Bool, optional
+    Automatically tune hyperparameters using random grid search.
+optimize_feature_selection : Bool, optional
+    Automatically optimize input feature selection using recursive feature
+    elimination.
+stratify : Bool, optional
+    Evenly stratify training and test data among metadata categories. If
+    True, all values in column must match at least two samples.
+missing_samples : Str % Choices('error', 'ignore'), optional
+    How to handle missing samples in metadata. "error" will fail if missing
+    samples are detected. "ignore" will cause the feature table and
+    metadata to be filtered, so that only samples found in both files are
+    retained.
+feature_count : Int % Range(0, None), optional
+    Filter feature table to include top N most important features. Set to
+    zero to include all features.
+
+Returns
+-------
+sample_estimator : SampleEstimator[Regressor]
+    Trained sample estimator.
+feature_importance : FeatureData[Importance]
+    Importance of each input feature to model accuracy.
+predictions : SampleData[RegressorPredictions]
+    Predicted target values for each input sample.
+model_summary : Visualization
+    Summarized parameter and (if enabled) feature selection information for
+    the trained estimator.
+accuracy_results : Visualization
+    Accuracy results visualization.
+maz_scores : SampleData[RegressorPredictions]
+    Microbiota-for-age z-score predictions.
+clustermap : Visualization
+    Heatmap of important feature abundance at each time point in each
+    group.
+volatility_plots : Visualization
+    Interactive volatility plots of MAZ and maturity scores, target
+    (column) predictions, and the sample metadata.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_longitudinal_nmit.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,92 @@
+<?xml version="1.0" ?>
+<tool id="qiime_longitudinal_nmit" name="qiime longitudinal nmit" version="2019.4">
+	<description> - Nonparametric microbial interdependence test</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime longitudinal nmit
+
+--i-table=$itable
+--p-individual-id-column="$pindividualidcolumn"
+
+#if str($pcorrmethod) != 'None':
+ --p-corr-method=$pcorrmethod
+#end if
+
+#if str($pdistmethod) != 'None':
+ --p-dist-method=$pdistmethod
+#end if
+
+
+#if $input_files_mmetadatafile:
+#def list_dict_to_string(list_dict):
+	#set $file_list = list_dict[0]['additional_input'].__getattr__('file_name')
+	#for d in list_dict[1:]:
+		#set $file_list = $file_list + ' --m-metadata-file=' + d['additional_input'].__getattr__('file_name')
+	#end for
+	#return $file_list
+#end def
+ --m-metadata-file=$list_dict_to_string($input_files_mmetadatafile)
+#end if
+
+
+--o-distance-matrix=odistancematrix
+;
+cp odistancematrix.qza $odistancematrix
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-table: ARTIFACT FeatureTable[RelativeFrequency] Feature table to use for microbial interdependence test.                                       [required]" name="itable" optional="False" type="data"/>
+		<param label="--p-individual-id-column: TEXT Metadata column containing IDs for individual subjects.                                   [required]" name="pindividualidcolumn" optional="False" type="text"/>
+		<param label="--p-corr-method: " name="pcorrmethod" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="kendall">kendall</option>
+			<option value="pearson">pearson</option>
+			<option value="spearman">spearman</option>
+		</param>
+		<param label="--p-dist-method: " name="pdistmethod" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="fro">fro</option>
+			<option value="nuc">nuc</option>
+		</param>
+
+		<repeat name="input_files_mmetadatafile" optional="True" title="--m-metadata-file">
+			<param label="--m-metadata-file: Metadata file or artifact viewable as metadata. This option may be supplied multiple times to merge metadata. [optional]" name="additional_input" type="data" format="tabular,qza,no_unzip.zip" />
+		</repeat>
+
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: distancematrix.qza" name="odistancematrix"/>
+	</outputs>
+	<help><![CDATA[
+Nonparametric microbial interdependence test
+############################################
+
+Perform nonparametric microbial interdependence test to determine
+longitudinal sample similarity as a function of temporal microbial
+composition. For more details and citation, please see
+doi.org/10.1002/gepi.22065
+
+Parameters
+----------
+table : FeatureTable[RelativeFrequency]
+    Feature table to use for microbial interdependence test.
+metadata : Metadata
+    Sample metadata file containing individual_id_column.
+individual_id_column : Str
+    Metadata column containing IDs for individual subjects.
+corr_method : Str % Choices('kendall', 'pearson', 'spearman'), optional
+    The temporal correlation test to be applied.
+dist_method : Str % Choices('fro', 'nuc'), optional
+    Temporal distance method, see numpy.linalg.norm for details.
+
+Returns
+-------
+distance_matrix : DistanceMatrix
+    The resulting distance matrix.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_longitudinal_pairwise-differences.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,157 @@
+<?xml version="1.0" ?>
+<tool id="qiime_longitudinal_pairwise-differences" name="qiime longitudinal pairwise-differences" version="2019.4">
+	<description> - Paired difference testing and boxplots</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime longitudinal pairwise-differences
+
+--p-metric="$pmetric"
+--p-state-column="$pstatecolumn"
+--p-state-1="$pstate1"
+--p-state-2="$pstate2"
+--p-individual-id-column="$pindividualidcolumn"
+
+#if str($itable) != 'None':
+ --i-table=$itable
+#end if
+
+#if str($pgroupcolumn):
+ --p-group-column="$pgroupcolumn"
+#end if
+
+#if $pparametric:
+ --p-parametric
+#end if
+
+#if str($ppalette) != 'None':
+ --p-palette=$ppalette
+#end if
+
+#if str($preplicatehandling) != 'None':
+ --p-replicate-handling=$preplicatehandling
+#end if
+
+
+#if $input_files_mmetadatafile:
+#def list_dict_to_string(list_dict):
+	#set $file_list = list_dict[0]['additional_input'].__getattr__('file_name')
+	#for d in list_dict[1:]:
+		#set $file_list = $file_list + ' --m-metadata-file=' + d['additional_input'].__getattr__('file_name')
+	#end for
+	#return $file_list
+#end def
+ --m-metadata-file=$list_dict_to_string($input_files_mmetadatafile)
+#end if
+
+
+--o-visualization=ovisualization
+;
+qiime tools export --input-path ovisualization.qzv --output-path out   && mkdir -p '$ovisualization.files_path'
+&& cp -r out/* '$ovisualization.files_path'
+&& mv '$ovisualization.files_path/index.html' '$ovisualization';
+	]]></command>
+	<inputs>
+		<param label="--p-metric: TEXT        Numerical metadata or artifact column to test. [required]" name="pmetric" optional="False" type="text"/>
+		<param label="--p-state-column: TEXT  Metadata column containing state (e.g., Time) across which samples are paired.                  [required]" name="pstatecolumn" optional="False" type="text"/>
+		<param label="--p-state-1: TEXT       Baseline state column value.               [required]" name="pstate1" optional="False" type="text"/>
+		<param label="--p-state-2: TEXT       State column value to pair with baseline.  [required]" name="pstate2" optional="False" type="text"/>
+		<param label="--p-individual-id-column: TEXT Metadata column containing subject IDs to use for pairing samples. WARNING: if replicates exist for an individual ID at either state-1 or state-2, that subject will be dropped and reported in standard output by default. Set replicate_handling='random' to instead randomly select one member.        [required]" name="pindividualidcolumn" optional="False" type="text"/>
+		<param format="qza,no_unzip.zip" label="--i-table: ARTIFACT FeatureTable[RelativeFrequency] Feature table to optionally use for paired comparisons.                               [optional]" name="itable" optional="True" type="data"/>
+		<param label="--p-group-column: TEXT  Metadata column on which to separate groups for comparison                                 [optional]" name="pgroupcolumn" optional="True" type="text"/>
+		<param label="--p-parametric: --p-no-parametric Perform parametric (ANOVA and t-tests) or non-parametric (Kruskal-Wallis, Wilcoxon, and Mann-Whitney U tests) statistical tests. [default: False]" name="pparametric" selected="False" type="boolean"/>
+		<param label="--p-palette: " name="ppalette" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="Set1">Set1</option>
+			<option value="Set2">Set2</option>
+			<option value="Set3">Set3</option>
+			<option value="Pastel1">Pastel1</option>
+			<option value="Pastel2">Pastel2</option>
+			<option value="Paired">Paired</option>
+			<option value="Accent">Accent</option>
+			<option value="Dark2">Dark2</option>
+			<option value="tab10">tab10</option>
+			<option value="tab20">tab20</option>
+			<option value="tab20b">tab20b</option>
+			<option value="tab20c">tab20c</option>
+			<option value="viridis">viridis</option>
+			<option value="plasma">plasma</option>
+			<option value="inferno">inferno</option>
+			<option value="magma">magma</option>
+			<option value="terrain">terrain</option>
+			<option value="rainbow">rainbow</option>
+		</param>
+		<param label="--p-replicate-handling: " name="preplicatehandling" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="error">error</option>
+			<option value="random">random</option>
+			<option value="drop">drop</option>
+		</param>
+
+		<repeat name="input_files_mmetadatafile" optional="True" title="--m-metadata-file">
+			<param label="--m-metadata-file: Metadata file or artifact viewable as metadata. This option may be supplied multiple times to merge metadata. [optional]" name="additional_input" type="data" format="tabular,qza,no_unzip.zip" />
+		</repeat>
+
+	</inputs>
+	<outputs>
+		<data format="html" label="${tool.name} on ${on_string}: visualization.qzv" name="ovisualization"/>
+	</outputs>
+	<help><![CDATA[
+Paired difference testing and boxplots
+######################################
+
+Performs paired difference testing between samples from each subject.
+Sample pairs may represent a typical intervention study, e.g., samples
+collected pre- and post-treatment; paired samples from two different
+timepoints (e.g., in a longitudinal study design), or identical samples
+receiving different two different treatments. This action tests whether the
+change in a numeric metadata value "metric" differs from zero and differs
+between groups (e.g., groups of subjects receiving different treatments),
+and produces boxplots of paired difference distributions for each group. A
+feature table artifact is required input, though whether "metric" is
+derived from the feature table or metadata is optional.
+
+Parameters
+----------
+metadata : Metadata
+    Sample metadata file containing individual_id_column.
+metric : Str
+    Numerical metadata or artifact column to test.
+state_column : Str
+    Metadata column containing state (e.g., Time) across which samples are
+    paired.
+state_1 : Str
+    Baseline state column value.
+state_2 : Str
+    State column value to pair with baseline.
+individual_id_column : Str
+    Metadata column containing subject IDs to use for pairing samples.
+    WARNING: if replicates exist for an individual ID at either state_1 or
+    state_2, that subject will be dropped and reported in standard output
+    by default. Set replicate_handling="random" to instead randomly select
+    one member.
+group_column : Str, optional
+    Metadata column on which to separate groups for comparison
+parametric : Bool, optional
+    Perform parametric (ANOVA and t-tests) or non-parametric (Kruskal-
+    Wallis, Wilcoxon, and Mann-Whitney U tests) statistical tests.
+palette : Str % Choices('Set1', 'Set2', 'Set3', 'Pastel1', 'Pastel2', 'Paired', 'Accent', 'Dark2', 'tab10', 'tab20', 'tab20b', 'tab20c', 'viridis', 'plasma', 'inferno', 'magma', 'terrain', 'rainbow'), optional
+    Color palette to use for generating boxplots.
+replicate_handling : Str % Choices('error', 'random', 'drop'), optional
+    Choose how replicate samples are handled. If replicates are detected,
+    "error" causes method to fail; "drop" will discard all replicated
+    samples; "random" chooses one representative at random from among
+    replicates.
+table : FeatureTable[RelativeFrequency], optional
+    Feature table to optionally use for paired comparisons.
+
+Returns
+-------
+visualization : Visualization
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_longitudinal_pairwise-distances.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,144 @@
+<?xml version="1.0" ?>
+<tool id="qiime_longitudinal_pairwise-distances" name="qiime longitudinal pairwise-distances" version="2019.4">
+	<description> - Paired pairwise distance testing and boxplots</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime longitudinal pairwise-distances
+
+--i-distance-matrix=$idistancematrix
+--p-group-column="$pgroupcolumn"
+--p-state-column="$pstatecolumn"
+--p-state-1="$pstate1"
+--p-state-2="$pstate2"
+--p-individual-id-column="$pindividualidcolumn"
+
+#if $pparametric:
+ --p-parametric
+#end if
+
+#if str($ppalette) != 'None':
+ --p-palette=$ppalette
+#end if
+
+#if str($preplicatehandling) != 'None':
+ --p-replicate-handling=$preplicatehandling
+#end if
+
+
+#if $input_files_mmetadatafile:
+#def list_dict_to_string(list_dict):
+	#set $file_list = list_dict[0]['additional_input'].__getattr__('file_name')
+	#for d in list_dict[1:]:
+		#set $file_list = $file_list + ' --m-metadata-file=' + d['additional_input'].__getattr__('file_name')
+	#end for
+	#return $file_list
+#end def
+ --m-metadata-file=$list_dict_to_string($input_files_mmetadatafile)
+#end if
+
+
+--o-visualization=ovisualization
+;
+qiime tools export --input-path ovisualization.qzv --output-path out   && mkdir -p '$ovisualization.files_path'
+&& cp -r out/* '$ovisualization.files_path'
+&& mv '$ovisualization.files_path/index.html' '$ovisualization';
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-distance-matrix: ARTIFACT DistanceMatrix       Matrix of distances between pairs of samples. [required]" name="idistancematrix" optional="False" type="data"/>
+		<param label="--p-group-column: TEXT  Metadata column on which to separate groups for comparison                                 [required]" name="pgroupcolumn" optional="False" type="text"/>
+		<param label="--p-state-column: TEXT  Metadata column containing state (e.g., Time) across which samples are paired.                  [required]" name="pstatecolumn" optional="False" type="text"/>
+		<param label="--p-state-1: TEXT       Baseline state column value.               [required]" name="pstate1" optional="False" type="text"/>
+		<param label="--p-state-2: TEXT       State column value to pair with baseline.  [required]" name="pstate2" optional="False" type="text"/>
+		<param label="--p-individual-id-column: TEXT Metadata column containing subject IDs to use for pairing samples. WARNING: if replicates exist for an individual ID at either state-1 or state-2, that subject will be dropped and reported in standard output by default. Set replicate_handling='random' to instead randomly select one member.        [required]" name="pindividualidcolumn" optional="False" type="text"/>
+		<param label="--p-parametric: --p-no-parametric Perform parametric (ANOVA and t-tests) or non-parametric (Kruskal-Wallis, Wilcoxon, and Mann-Whitney U tests) statistical tests. [default: False]" name="pparametric" selected="False" type="boolean"/>
+		<param label="--p-palette: " name="ppalette" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="Set1">Set1</option>
+			<option value="Set2">Set2</option>
+			<option value="Set3">Set3</option>
+			<option value="Pastel1">Pastel1</option>
+			<option value="Pastel2">Pastel2</option>
+			<option value="Paired">Paired</option>
+			<option value="Accent">Accent</option>
+			<option value="Dark2">Dark2</option>
+			<option value="tab10">tab10</option>
+			<option value="tab20">tab20</option>
+			<option value="tab20b">tab20b</option>
+			<option value="tab20c">tab20c</option>
+			<option value="viridis">viridis</option>
+			<option value="plasma">plasma</option>
+			<option value="inferno">inferno</option>
+			<option value="magma">magma</option>
+			<option value="terrain">terrain</option>
+			<option value="rainbow">rainbow</option>
+		</param>
+		<param label="--p-replicate-handling: " name="preplicatehandling" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="error">error</option>
+			<option value="random">random</option>
+			<option value="drop">drop</option>
+		</param>
+
+		<repeat name="input_files_mmetadatafile" optional="True" title="--m-metadata-file">
+			<param label="--m-metadata-file: Metadata file or artifact viewable as metadata. This option may be supplied multiple times to merge metadata. [optional]" name="additional_input" type="data" format="tabular,qza,no_unzip.zip" />
+		</repeat>
+	</inputs>
+	<outputs>
+		<data format="html" label="${tool.name} on ${on_string}: visualization.qzv" name="ovisualization"/>
+	</outputs>
+	<help><![CDATA[
+Paired pairwise distance testing and boxplots
+#############################################
+
+Performs pairwise distance testing between sample pairs from each subject.
+Sample pairs may represent a typical intervention study, e.g., samples
+collected pre- and post-treatment; paired samples from two different
+timepoints (e.g., in a longitudinal study design), or identical samples
+receiving different two different treatments. This action tests whether the
+pairwise distance between each subject pair differs between groups (e.g.,
+groups of subjects receiving different treatments) and produces boxplots of
+paired distance distributions for each group.
+
+Parameters
+----------
+distance_matrix : DistanceMatrix
+    Matrix of distances between pairs of samples.
+metadata : Metadata
+    Sample metadata file containing individual_id_column.
+group_column : Str
+    Metadata column on which to separate groups for comparison
+state_column : Str
+    Metadata column containing state (e.g., Time) across which samples are
+    paired.
+state_1 : Str
+    Baseline state column value.
+state_2 : Str
+    State column value to pair with baseline.
+individual_id_column : Str
+    Metadata column containing subject IDs to use for pairing samples.
+    WARNING: if replicates exist for an individual ID at either state_1 or
+    state_2, that subject will be dropped and reported in standard output
+    by default. Set replicate_handling="random" to instead randomly select
+    one member.
+parametric : Bool, optional
+    Perform parametric (ANOVA and t-tests) or non-parametric (Kruskal-
+    Wallis, Wilcoxon, and Mann-Whitney U tests) statistical tests.
+palette : Str % Choices('Set1', 'Set2', 'Set3', 'Pastel1', 'Pastel2', 'Paired', 'Accent', 'Dark2', 'tab10', 'tab20', 'tab20b', 'tab20c', 'viridis', 'plasma', 'inferno', 'magma', 'terrain', 'rainbow'), optional
+    Color palette to use for generating boxplots.
+replicate_handling : Str % Choices('error', 'random', 'drop'), optional
+    Choose how replicate samples are handled. If replicates are detected,
+    "error" causes method to fail; "drop" will discard all replicated
+    samples; "random" chooses one representative at random from among
+    replicates.
+
+Returns
+-------
+visualization : Visualization	
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_longitudinal_plot-feature-volatility.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,105 @@
+<?xml version="1.0" ?>
+<tool id="qiime_longitudinal_plot-feature-volatility" name="qiime longitudinal plot-feature-volatility" version="2019.4">
+	<description> - Plot longitudinal feature volatility and importances</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime longitudinal plot-feature-volatility
+
+--i-table=$itable
+--i-importances=$iimportances
+--p-state-column="$pstatecolumn"
+
+#if str($pindividualidcolumn):
+ --p-individual-id-column="$pindividualidcolumn"
+#end if
+
+#if str($pdefaultgroupcolumn):
+ --p-default-group-column="$pdefaultgroupcolumn"
+#end if
+
+#if str($pyscale) != 'None':
+ --p-yscale=$pyscale
+#end if
+
+
+#if $input_files_mmetadatafile:
+#def list_dict_to_string(list_dict):
+	#set $file_list = list_dict[0]['additional_input'].__getattr__('file_name')
+	#for d in list_dict[1:]:
+		#set $file_list = $file_list + ' --m-metadata-file=' + d['additional_input'].__getattr__('file_name')
+	#end for
+	#return $file_list
+#end def
+ --m-metadata-file=$list_dict_to_string($input_files_mmetadatafile)
+#end if
+
+
+--o-visualization=ovisualization
+;
+qiime tools export --input-path ovisualization.qzv --output-path out   && mkdir -p '$ovisualization.files_path'
+&& cp -r out/* '$ovisualization.files_path'
+&& mv '$ovisualization.files_path/index.html' '$ovisualization'
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-table: ARTIFACT FeatureTable[RelativeFrequency] Feature table containing features found in importances.                               [required]" name="itable" optional="False" type="data"/>
+		<param format="qza,no_unzip.zip" label="--i-importances: ARTIFACT FeatureData[Importance] Feature importance scores.                 [required]" name="iimportances" optional="False" type="data"/>
+		<param label="--p-state-column: TEXT  Metadata column containing state (time) variable information.                               [required]" name="pstatecolumn" optional="False" type="text"/>
+		<param label="--p-individual-id-column: TEXT Metadata column containing IDs for individual subjects.                                  [optional]" name="pindividualidcolumn" optional="True" type="text"/>
+		<param label="--p-default-group-column: TEXT The default metadata column on which to separate groups for comparison (all categorical metadata columns will be available in the visualization). [optional]" name="pdefaultgroupcolumn" optional="True" type="text"/>
+		<param label="--p-yscale: " name="pyscale" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="linear">linear</option>
+			<option value="pow">pow</option>
+			<option value="sqrt">sqrt</option>
+			<option value="log">log</option>
+		</param>
+
+		<repeat name="input_files_mmetadatafile" optional="True" title="--m-metadata-file">
+			<param label="--m-metadata-file: Metadata file or artifact viewable as metadata. This option may be supplied multiple times to merge metadata. [optional]" name="additional_input" type="data" format="tabular,qza,no_unzip.zip" />
+		</repeat>
+
+	</inputs>
+	<outputs>
+		<data format="html" label="${tool.name} on ${on_string}: visualization.qzv" name="ovisualization"/>
+	</outputs>
+	<help><![CDATA[
+Plot longitudinal feature volatility and importances
+####################################################
+
+Plots an interactive control chart of feature abundances (y-axis) in each
+sample across time (or state; x-axis). Feature importance scores and
+descriptive statistics for each each feature are plotted in interactive bar
+charts below the control chart, facilitating exploration of longitudinal
+feature data. This visualization is intended for use with the feature-
+volatility pipeline; use that pipeline to access this visualization.
+
+Parameters
+----------
+table : FeatureTable[RelativeFrequency]
+    Feature table containing features found in importances.
+importances : FeatureData[Importance]
+    Feature importance scores.
+metadata : Metadata
+    Sample metadata file containing individual_id_column.
+state_column : Str
+    Metadata column containing state (time) variable information.
+individual_id_column : Str, optional
+    Metadata column containing IDs for individual subjects.
+default_group_column : Str, optional
+    The default metadata column on which to separate groups for comparison
+    (all categorical metadata columns will be available in the
+    visualization).
+yscale : Str % Choices('linear', 'pow', 'sqrt', 'log'), optional
+    y-axis scaling strategy to apply.
+
+Returns
+-------
+visualization : Visualization
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_longitudinal_volatility.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,116 @@
+<?xml version="1.0" ?>
+<tool id="qiime_longitudinal_volatility" name="qiime longitudinal volatility" version="2019.4">
+	<description> - Generate interactive volatility plot</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime longitudinal volatility
+
+--p-state-column="$pstatecolumn"
+
+#if str($itable) != 'None':
+ --i-table=$itable
+#end if
+
+#if str($pindividualidcolumn):
+ --p-individual-id-column="$pindividualidcolumn"
+#end if
+
+#if str($pdefaultgroupcolumn):
+ --p-default-group-column="$pdefaultgroupcolumn"
+#end if
+
+#if str($pdefaultmetric):
+ --p-default-metric="$pdefaultmetric"
+#end if
+
+#if str($pyscale) != 'None':
+ --p-yscale=$pyscale
+#end if
+
+
+#if $input_files_mmetadatafile:
+#def list_dict_to_string(list_dict):
+	#set $file_list = list_dict[0]['additional_input'].__getattr__('file_name')
+	#for d in list_dict[1:]:
+		#set $file_list = $file_list + ' --m-metadata-file=' + d['additional_input'].__getattr__('file_name')
+	#end for
+	#return $file_list
+#end def
+ --m-metadata-file=$list_dict_to_string($input_files_mmetadatafile)
+#end if
+
+
+--o-visualization=ovisualization
+;
+qiime tools export --input-path ovisualization.qzv --output-path out   && mkdir -p '$ovisualization.files_path'
+&& cp -r out/* '$ovisualization.files_path'
+&& mv '$ovisualization.files_path/index.html' '$ovisualization';
+	]]></command>
+	<inputs>
+		<param label="--p-state-column: TEXT  Metadata column containing state (time) variable information.                               [required]" name="pstatecolumn" optional="False" type="text"/>
+		<param format="qza,no_unzip.zip" label="--i-table: ARTIFACT FeatureTable[RelativeFrequency] Feature table containing metrics.          [optional]" name="itable" optional="True" type="data"/>
+		<param label="--p-individual-id-column: TEXT Metadata column containing IDs for individual subjects.                                  [optional]" name="pindividualidcolumn" optional="True" type="text"/>
+		<param label="--p-default-group-column: TEXT The default metadata column on which to separate groups for comparison (all categorical metadata columns will be available in the visualization). [optional]" name="pdefaultgroupcolumn" optional="True" type="text"/>
+		<param label="--p-default-metric: TEXT Numeric metadata or artifact column to test by default (all numeric metadata columns will be available in the visualization).           [optional]" name="pdefaultmetric" optional="True" type="text"/>
+		<param label="--p-yscale: " name="pyscale" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="linear">linear</option>
+			<option value="pow">pow</option>
+			<option value="sqrt">sqrt</option>
+			<option value="log">log</option>
+		</param>
+
+		<repeat name="input_files_mmetadatafile" optional="True" title="--m-metadata-file">
+			<param label="--m-metadata-file: Metadata file or artifact viewable as metadata. This option may be supplied multiple times to merge metadata. [optional]" name="additional_input" type="data" format="tabular,qza,no_unzip.zip" />
+		</repeat>
+
+	</inputs>
+	<outputs>
+		<data format="html" label="${tool.name} on ${on_string}: visualization.qzv" name="ovisualization"/>
+	</outputs>
+	<help><![CDATA[
+Generate interactive volatility plot
+####################################
+
+Generate an interactive control chart depicting the longitudinal volatility
+of sample metadata and/or feature frequencies across time (as set using the
+"state_column" parameter). Any numeric metadata column (and metadata-
+transformable artifacts, e.g., alpha diversity results) can be plotted on
+the y-axis, and are selectable using the "metric_column" selector. Metric
+values are averaged to compare across any categorical metadata column using
+the "group_column" selector. Longitudinal volatility for individual
+subjects sampled over time is co-plotted as "spaghetti" plots if the
+"individual_id_column" parameter is used. state_column will typically be a
+measure of time, but any numeric metadata column can be used.
+
+Parameters
+----------
+metadata : Metadata
+    Sample metadata file containing individual_id_column.
+state_column : Str
+    Metadata column containing state (time) variable information.
+individual_id_column : Str, optional
+    Metadata column containing IDs for individual subjects.
+default_group_column : Str, optional
+    The default metadata column on which to separate groups for comparison
+    (all categorical metadata columns will be available in the
+    visualization).
+default_metric : Str, optional
+    Numeric metadata or artifact column to test by default (all numeric
+    metadata columns will be available in the visualization).
+table : FeatureTable[RelativeFrequency], optional
+    Feature table containing metrics.
+yscale : Str % Choices('linear', 'pow', 'sqrt', 'log'), optional
+    y-axis scaling strategy to apply.
+
+Returns
+-------
+visualization : Visualization
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_metadata_distance-matrix.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,62 @@
+<?xml version="1.0" ?>
+<tool id="qiime_metadata_distance-matrix" name="qiime metadata distance-matrix" version="2019.4">
+	<description> - Create a distance matrix from a numeric Metadata column</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime metadata distance-matrix
+
+--m-metadata-column="$mmetadatacolumn"
+
+
+#if $input_files_mmetadatafile:
+#def list_dict_to_string(list_dict):
+	#set $file_list = list_dict[0]['additional_input'].__getattr__('file_name')
+	#for d in list_dict[1:]:
+		#set $file_list = $file_list + ' --m-metadata-file=' + d['additional_input'].__getattr__('file_name')
+	#end for
+	#return $file_list
+#end def
+ --m-metadata-file=$list_dict_to_string($input_files_mmetadatafile)
+#end if
+
+
+--o-distance-matrix=odistancematrix
+;
+cp odistancematrix.qza $odistancematrix
+	]]></command>
+	<inputs>
+		<param label="--m-metadata-column: COLUMN  MetadataColumn[Numeric] Numeric metadata column to compute pairwise Euclidean distances from                               [required]" name="mmetadatacolumn" optional="False" type="text"/>
+
+		<repeat name="input_files_mmetadatafile" optional="True" title="--m-metadata-file">
+			<param label="--m-metadata-file: Metadata file or artifact viewable as metadata. This option may be supplied multiple times to merge metadata. [optional]" name="additional_input" type="data" format="tabular,qza,no_unzip.zip" />
+		</repeat>
+
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: distancematrix.qza" name="odistancematrix"/>
+	</outputs>
+	<help><![CDATA[
+Create a distance matrix from a numeric Metadata column
+#######################################################
+
+Create a distance matrix from a numeric metadata column. The Euclidean
+distance is computed between each pair of samples or features in the
+column.  Tip: the distance matrix produced by this method can be used as
+input to the Mantel test available in `q2-diversity`.
+
+Parameters
+----------
+metadata : MetadataColumn[Numeric]
+    Numeric metadata column to compute pairwise Euclidean distances from
+
+Returns
+-------
+distance_matrix : DistanceMatrix
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_metadata_tabulate.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,64 @@
+<?xml version="1.0" ?>
+<tool id="qiime_metadata_tabulate" name="qiime metadata tabulate" version="2019.4">
+	<description> - Interactively explore Metadata in an HTML table</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime metadata tabulate
+
+
+#def list_dict_to_string(list_dict):
+#set $file_list = list_dict[0]['additional_input'].__getattr__('file_name')
+#for d in list_dict[1:]:
+	#set $file_list = $file_list + ' --m-input-file=' + d['additional_input'].__getattr__('file_name')
+#end for
+#return $file_list
+#end def
+--m-input-file=$list_dict_to_string($input_files_minputfile)
+
+
+#if $ppagesize:
+ --p-page-size=$ppagesize
+#end if
+
+--o-visualization=ovisualization
+;
+qiime tools export --input-path ovisualization.qzv --output-path out   && mkdir -p '$ovisualization.files_path'
+&& cp -r out/* '$ovisualization.files_path'
+&& mv '$ovisualization.files_path/index.html' '$ovisualization'
+	]]></command>
+	<inputs>
+		<param label="--p-page-size: INTEGER  The maximum number of Metadata records to display per page                               [default: 100]" name="ppagesize" optional="True" type="integer" value="100"/>
+
+		<repeat name="input_files_minputfile" optional="False" title="--m-input-file">
+			<param label="--m-input-file: Metadata file or artifact viewable as metadata. This option may be supplied multiple times to merge metadata. The metadata to tabulate.  [required]" name="additional_input" type="data" format="tabular,qza,no_unzip.zip" />
+		</repeat>
+
+	</inputs>
+	<outputs>
+		<data format="html" label="${tool.name} on ${on_string}: visualization.qzv" name="ovisualization"/>
+	</outputs>
+	<help><![CDATA[
+Interactively explore Metadata in an HTML table
+###############################################
+
+Generate a tabular view of Metadata. The output visualization supports
+interactive filtering, sorting, and exporting to common file formats.
+
+Parameters
+----------
+input : Metadata
+    The metadata to tabulate.
+page_size : Int, optional
+    The maximum number of Metadata records to display per page
+
+Returns
+-------
+visualization : Visualization
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_phylogeny_align-to-tree-mafft-fasttree.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,96 @@
+<?xml version="1.0" ?>
+<tool id="qiime_phylogeny_align-to-tree-mafft-fasttree" name="qiime phylogeny align-to-tree-mafft-fasttree" version="2019.4">
+	<description> - Build a phylogenetic tree using fasttree and mafft alignment</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime phylogeny align-to-tree-mafft-fasttree
+
+--i-sequences=$isequences
+
+#set $pnthreads = '${GALAXY_SLOTS:-4}'
+
+#if str($pnthreads):
+ --p-n-threads="$pnthreads"
+#end if
+
+
+#if $pmaskmaxgapfrequency:
+ --p-mask-max-gap-frequency=$pmaskmaxgapfrequency
+#end if
+
+#if $pmaskminconservation:
+ --p-mask-min-conservation=$pmaskminconservation
+#end if
+
+--o-alignment=oalignment
+--o-masked-alignment=omaskedalignment
+--o-tree=otree
+--o-rooted-tree=orootedtree
+;
+cp oalignment.qza $oalignment;
+cp omaskedalignment.qza $omaskedalignment;
+cp otree.qza $otree;
+cp orootedtree.qza $orootedtree
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-sequences: ARTIFACT FeatureData[Sequence] The sequences to be used for creating a fasttree based rooted phylogenetic tree.           [required]" name="isequences" optional="False" type="data"/>
+		<param label="--p-mask-max-gap-frequency: PROPORTION Range(0, 1, inclusive_end=True) The maximum relative frequency of gap characters in a column for the column to be retained. This relative frequency must be a number between 0.0 and 1.0 (inclusive), where 0.0 retains only those columns without gap characters, and 1.0 retains all columns  regardless of gap character frequency. This value is used when masking the aligned sequences. [default: 1.0]" name="pmaskmaxgapfrequency" optional="True" type="float" min="0" max="1" exclusive_end="False" value="1.0"/>
+		<param label="--p-mask-min-conservation: PROPORTION Range(0, 1, inclusive_end=True) The minimum relative frequency of at least one non-gap character in a column for that column to be retained. This relative frequency must be a number between 0.0 and 1.0 (inclusive). For example, if a value of  0.4 is provided, a column will only be retained  if it contains at least one character that is present in at least 40% of the sequences. This value is used when masking the aligned sequences. [default: 0.4]" name="pmaskminconservation" optional="True" type="float" min="0" max="1" exclusive_end="False" value="0.4"/>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: alignment.qza" name="oalignment"/>
+		<data format="qza" label="${tool.name} on ${on_string}: maskedalignment.qza" name="omaskedalignment"/>
+		<data format="qza" label="${tool.name} on ${on_string}: tree.qza" name="otree"/>
+		<data format="qza" label="${tool.name} on ${on_string}: rootedtree.qza" name="orootedtree"/>
+	</outputs>
+	<help><![CDATA[
+Build a phylogenetic tree using fasttree and mafft alignment
+############################################################
+
+This pipeline will start by creating a sequence alignment using MAFFT,
+after which any alignment columns that are phylogenetically uninformative
+or ambiguously aligned will be removed (masked). The resulting masked
+alignment will be used to infer a phylogenetic tree and then subsequently
+rooted at its midpoint. Output files from each step of the pipeline will be
+saved. This includes both the unmasked and masked MAFFT alignment from
+q2-alignment methods, and both the rooted and unrooted phylogenies from
+q2-phylogeny methods.
+
+Parameters
+----------
+sequences : FeatureData[Sequence]
+    The sequences to be used for creating a fasttree based rooted
+    phylogenetic tree.
+mask_max_gap_frequency : Float % Range(0, 1, inclusive_end=True), optional
+    The maximum relative frequency of gap characters in a column for the
+    column to be retained. This relative frequency must be a number between
+    0.0 and 1.0 (inclusive), where 0.0 retains only those columns without
+    gap characters, and 1.0 retains all columns  regardless of gap
+    character frequency. This value is used when masking the aligned
+    sequences.
+mask_min_conservation : Float % Range(0, 1, inclusive_end=True), optional
+    The minimum relative frequency of at least one non-gap character in a
+    column for that column to be retained. This relative frequency must be
+    a number between 0.0 and 1.0 (inclusive). For example, if a value of
+    0.4 is provided, a column will only be retained  if it contains at
+    least one character that is present in at least 40% of the sequences.
+    This value is used when masking the aligned sequences.
+
+Returns
+-------
+alignment : FeatureData[AlignedSequence]
+    The aligned sequences.
+masked_alignment : FeatureData[AlignedSequence]
+    The masked alignment.
+tree : Phylogeny[Unrooted]
+    The unrooted phylogenetic tree.
+rooted_tree : Phylogeny[Rooted]
+    The rooted phylogenetic tree.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_phylogeny_fasttree.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,47 @@
+<?xml version="1.0" ?>
+<tool id="qiime_phylogeny_fasttree" name="qiime phylogeny fasttree" version="2019.4">
+	<description> - Construct a phylogenetic tree with FastTree.</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime phylogeny fasttree
+
+--i-alignment=$ialignment
+
+#set $pnthreads = '${GALAXY_SLOTS:-4}'
+#if str($pnthreads):
+ --p-n-threads="$pnthreads"
+#end if
+
+--o-tree=otree
+;
+cp otree.qza $otree
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-alignment: ARTIFACT FeatureData[AlignedSequence] Aligned sequences to be used for phylogenetic reconstruction.                           [required]" name="ialignment" optional="False" type="data"/>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: tree.qza" name="otree"/>
+	</outputs>
+	<help><![CDATA[
+Construct a phylogenetic tree with FastTree.
+############################################
+
+Construct a phylogenetic tree with FastTree.
+
+Parameters
+----------
+alignment : FeatureData[AlignedSequence]
+    Aligned sequences to be used for phylogenetic reconstruction.
+
+Returns
+-------
+tree : Phylogeny[Unrooted]
+    The resulting phylogenetic tree.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_phylogeny_filter-table.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,48 @@
+<?xml version="1.0" ?>
+<tool id="qiime_phylogeny_filter-table" name="qiime phylogeny filter-table" version="2019.4">
+	<description> - Remove features from table if they're not present in tree.</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime phylogeny filter-table
+
+--i-table=$itable
+--i-tree=$itree
+
+--o-filtered-table=ofilteredtable
+;
+cp ofilteredtable.qza $ofilteredtable
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-table: ARTIFACT FeatureTable[Frequency] Feature table that features should be filtered from. [required]" name="itable" optional="False" type="data"/>
+		<param format="qza,no_unzip.zip" label="--i-tree: ARTIFACT Phylogeny[Rooted | Unrooted] Tree where tip identifiers are the feature identifiers that should be retained in the table.        [required]" name="itree" optional="False" type="data"/>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: filteredtable.qza" name="ofilteredtable"/>
+	</outputs>
+	<help><![CDATA[
+Remove features from table if they're not present in tree.
+##########################################################
+
+Remove features from a feature table if their identifiers are not tip
+identifiers in tree.
+
+Parameters
+----------
+table : FeatureTable[Frequency]
+    Feature table that features should be filtered from.
+tree : Phylogeny[Rooted | Unrooted]
+    Tree where tip identifiers are the feature identifiers that should be
+    retained in the table.
+
+Returns
+-------
+filtered_table : FeatureTable[Frequency]
+    The resulting feature table.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_phylogeny_iqtree-ultrafast-bootstrap.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,503 @@
+<?xml version="1.0" ?>
+<tool id="qiime_phylogeny_iqtree-ultrafast-bootstrap" name="qiime phylogeny iqtree-ultrafast-bootstrap" version="2019.4">
+	<description> - Construct a phylogenetic tree with IQ-TREE with bootstrap supports.</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime phylogeny iqtree-ultrafast-bootstrap
+
+--i-alignment=$ialignment
+
+#if str($pseed):
+ --p-seed="$pseed"
+#end if
+
+#if $pncores:
+ --p-n-cores=$pncores
+#end if
+
+#if $pnruns:
+ --p-n-runs=$pnruns
+#end if
+
+#if str($psubstitutionmodel) != 'None':
+ --p-substitution-model=$psubstitutionmodel
+#end if
+
+#if $pbootstrapreplicates:
+ --p-bootstrap-replicates=$pbootstrapreplicates
+#end if
+
+#if str($pninitparstrees):
+ --p-n-init-pars-trees="$pninitparstrees"
+#end if
+
+#if str($pntopinittrees):
+ --p-n-top-init-trees="$pntopinittrees"
+#end if
+
+#if str($pnbestretaintrees):
+ --p-n-best-retain-trees="$pnbestretaintrees"
+#end if
+
+#if str($pstopiter):
+ --p-stop-iter="$pstopiter"
+#end if
+
+#if str($pperturbnnistrength):
+ --p-perturb-nni-strength="$pperturbnnistrength"
+#end if
+
+#if str($psprradius):
+ --p-spr-radius="$psprradius"
+#end if
+
+#if str($pnmaxufbootiter):
+ --p-n-max-ufboot-iter="$pnmaxufbootiter"
+#end if
+
+#if str($pnufbootsteps):
+ --p-n-ufboot-steps="$pnufbootsteps"
+#end if
+
+#if str($pmincorufboot):
+ --p-min-cor-ufboot="$pmincorufboot"
+#end if
+
+#if str($pepbreakufboot):
+ --p-ep-break-ufboot="$pepbreakufboot"
+#end if
+
+#if $pallnni:
+ --p-allnni
+#end if
+
+#if str($palrt):
+ --p-alrt="$palrt"
+#end if
+
+#if $pabayes:
+ --p-abayes
+#end if
+
+#if str($plbp):
+ --p-lbp="$plbp"
+#end if
+
+#if $pbnni:
+ --p-bnni
+#end if
+
+#if $psafe:
+ --p-safe
+#end if
+
+--o-tree=otree
+;
+cp otree.qza $otree
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-alignment: ARTIFACT FeatureData[AlignedSequence] Aligned sequences to be used for phylogenetic reconstruction.                           [required]" name="ialignment" optional="False" type="data"/>
+		<param label="--p-seed: INTEGER        Random number seed. If not set, program defaults will be used. See IQ-TREE manual for details. [optional]" name="pseed" optional="True" type="integer"/>
+		<param label="--p-n-cores: INTEGER     The number of cores to use for parallel processing. Range(0, None)        Use '0' to let IQ-TREE automatically determine the optimal number of cores to use.         [default: 1]" name="pncores" optional="True" type="integer" min="0" value="1"/>
+		<param label="--p-n-runs: INTEGER      Number of indepedent runs. Multiple  independent Range(1, None)        runs (e.g. 10) can outperform a single run in terms of likelihood maximisation.             [default: 1]" name="pnruns" optional="True" type="integer" min="1" value="1"/>
+		<param label="--p-substitution-model: " name="psubstitutionmodel" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="JC">JC</option>
+			<option value="JC+I">JC+I</option>
+			<option value="JC+G">JC+G</option>
+			<option value="JC+I+G">JC+I+G</option>
+			<option value="JC+R2">JC+R2</option>
+			<option value="JC+R3">JC+R3</option>
+			<option value="JC+R4">JC+R4</option>
+			<option value="JC+R5">JC+R5</option>
+			<option value="JC+R6">JC+R6</option>
+			<option value="JC+R7">JC+R7</option>
+			<option value="JC+R8">JC+R8</option>
+			<option value="JC+R9">JC+R9</option>
+			<option value="JC+R10">JC+R10</option>
+			<option value="F81">F81</option>
+			<option value="F81+I">F81+I</option>
+			<option value="F81+G">F81+G</option>
+			<option value="F81+I+G">F81+I+G</option>
+			<option value="F81+R2">F81+R2</option>
+			<option value="F81+R3">F81+R3</option>
+			<option value="F81+R4">F81+R4</option>
+			<option value="F81+R5">F81+R5</option>
+			<option value="F81+R6">F81+R6</option>
+			<option value="F81+R7">F81+R7</option>
+			<option value="F81+R8">F81+R8</option>
+			<option value="F81+R9">F81+R9</option>
+			<option value="F81+R10">F81+R10</option>
+			<option value="K80">K80</option>
+			<option value="K80+I">K80+I</option>
+			<option value="K80+G">K80+G</option>
+			<option value="K80+I+G">K80+I+G</option>
+			<option value="K80+R2">K80+R2</option>
+			<option value="K80+R3">K80+R3</option>
+			<option value="K80+R4">K80+R4</option>
+			<option value="K80+R5">K80+R5</option>
+			<option value="K80+R6">K80+R6</option>
+			<option value="K80+R7">K80+R7</option>
+			<option value="K80+R8">K80+R8</option>
+			<option value="K80+R9">K80+R9</option>
+			<option value="K80+R10">K80+R10</option>
+			<option value="HKY">HKY</option>
+			<option value="HKY+I">HKY+I</option>
+			<option value="HKY+G">HKY+G</option>
+			<option value="HKY+I+G">HKY+I+G</option>
+			<option value="HKY+R2">HKY+R2</option>
+			<option value="HKY+R3">HKY+R3</option>
+			<option value="HKY+R4">HKY+R4</option>
+			<option value="HKY+R5">HKY+R5</option>
+			<option value="HKY+R6">HKY+R6</option>
+			<option value="HKY+R7">HKY+R7</option>
+			<option value="HKY+R8">HKY+R8</option>
+			<option value="HKY+R9">HKY+R9</option>
+			<option value="HKY+R10">HKY+R10</option>
+			<option value="TNe">TNe</option>
+			<option value="TNe+I">TNe+I</option>
+			<option value="TNe+G">TNe+G</option>
+			<option value="TNe+I+G">TNe+I+G</option>
+			<option value="TNe+R2">TNe+R2</option>
+			<option value="TNe+R3">TNe+R3</option>
+			<option value="TNe+R4">TNe+R4</option>
+			<option value="TNe+R5">TNe+R5</option>
+			<option value="TNe+R6">TNe+R6</option>
+			<option value="TNe+R7">TNe+R7</option>
+			<option value="TNe+R8">TNe+R8</option>
+			<option value="TNe+R9">TNe+R9</option>
+			<option value="TNe+R10">TNe+R10</option>
+			<option value="TN">TN</option>
+			<option value="TN+I">TN+I</option>
+			<option value="TN+G">TN+G</option>
+			<option value="TN+I+G">TN+I+G</option>
+			<option value="TN+R2">TN+R2</option>
+			<option value="TN+R3">TN+R3</option>
+			<option value="TN+R4">TN+R4</option>
+			<option value="TN+R5">TN+R5</option>
+			<option value="TN+R6">TN+R6</option>
+			<option value="TN+R7">TN+R7</option>
+			<option value="TN+R8">TN+R8</option>
+			<option value="TN+R9">TN+R9</option>
+			<option value="TN+R10">TN+R10</option>
+			<option value="K81">K81</option>
+			<option value="K81+I">K81+I</option>
+			<option value="K81+G">K81+G</option>
+			<option value="K81+I+G">K81+I+G</option>
+			<option value="K81+R2">K81+R2</option>
+			<option value="K81+R3">K81+R3</option>
+			<option value="K81+R4">K81+R4</option>
+			<option value="K81+R5">K81+R5</option>
+			<option value="K81+R6">K81+R6</option>
+			<option value="K81+R7">K81+R7</option>
+			<option value="K81+R8">K81+R8</option>
+			<option value="K81+R9">K81+R9</option>
+			<option value="K81+R10">K81+R10</option>
+			<option value="K81u">K81u</option>
+			<option value="K81u+I">K81u+I</option>
+			<option value="K81u+G">K81u+G</option>
+			<option value="K81u+I+G">K81u+I+G</option>
+			<option value="K81u+R2">K81u+R2</option>
+			<option value="K81u+R3">K81u+R3</option>
+			<option value="K81u+R4">K81u+R4</option>
+			<option value="K81u+R5">K81u+R5</option>
+			<option value="K81u+R6">K81u+R6</option>
+			<option value="K81u+R7">K81u+R7</option>
+			<option value="K81u+R8">K81u+R8</option>
+			<option value="K81u+R9">K81u+R9</option>
+			<option value="K81u+R10">K81u+R10</option>
+			<option value="TPM2">TPM2</option>
+			<option value="TPM2+I">TPM2+I</option>
+			<option value="TPM2+G">TPM2+G</option>
+			<option value="TPM2+I+G">TPM2+I+G</option>
+			<option value="TPM2+R2">TPM2+R2</option>
+			<option value="TPM2+R3">TPM2+R3</option>
+			<option value="TPM2+R4">TPM2+R4</option>
+			<option value="TPM2+R5">TPM2+R5</option>
+			<option value="TPM2+R6">TPM2+R6</option>
+			<option value="TPM2+R7">TPM2+R7</option>
+			<option value="TPM2+R8">TPM2+R8</option>
+			<option value="TPM2+R9">TPM2+R9</option>
+			<option value="TPM2+R10">TPM2+R10</option>
+			<option value="TPM2u">TPM2u</option>
+			<option value="TPM2u+I">TPM2u+I</option>
+			<option value="TPM2u+G">TPM2u+G</option>
+			<option value="TPM2u+I+G">TPM2u+I+G</option>
+			<option value="TPM2u+R2">TPM2u+R2</option>
+			<option value="TPM2u+R3">TPM2u+R3</option>
+			<option value="TPM2u+R4">TPM2u+R4</option>
+			<option value="TPM2u+R5">TPM2u+R5</option>
+			<option value="TPM2u+R6">TPM2u+R6</option>
+			<option value="TPM2u+R7">TPM2u+R7</option>
+			<option value="TPM2u+R8">TPM2u+R8</option>
+			<option value="TPM2u+R9">TPM2u+R9</option>
+			<option value="TPM2u+R10">TPM2u+R10</option>
+			<option value="TPM3">TPM3</option>
+			<option value="TPM3+I">TPM3+I</option>
+			<option value="TPM3+G">TPM3+G</option>
+			<option value="TPM3+I+G">TPM3+I+G</option>
+			<option value="TPM3+R2">TPM3+R2</option>
+			<option value="TPM3+R3">TPM3+R3</option>
+			<option value="TPM3+R4">TPM3+R4</option>
+			<option value="TPM3+R5">TPM3+R5</option>
+			<option value="TPM3+R6">TPM3+R6</option>
+			<option value="TPM3+R7">TPM3+R7</option>
+			<option value="TPM3+R8">TPM3+R8</option>
+			<option value="TPM3+R9">TPM3+R9</option>
+			<option value="TPM3+R10">TPM3+R10</option>
+			<option value="TPM3u">TPM3u</option>
+			<option value="TPM3u+I">TPM3u+I</option>
+			<option value="TPM3u+G">TPM3u+G</option>
+			<option value="TPM3u+I+G">TPM3u+I+G</option>
+			<option value="TPM3u+R2">TPM3u+R2</option>
+			<option value="TPM3u+R3">TPM3u+R3</option>
+			<option value="TPM3u+R4">TPM3u+R4</option>
+			<option value="TPM3u+R5">TPM3u+R5</option>
+			<option value="TPM3u+R6">TPM3u+R6</option>
+			<option value="TPM3u+R7">TPM3u+R7</option>
+			<option value="TPM3u+R8">TPM3u+R8</option>
+			<option value="TPM3u+R9">TPM3u+R9</option>
+			<option value="TPM3u+R10">TPM3u+R10</option>
+			<option value="TIMe">TIMe</option>
+			<option value="TIMe+I">TIMe+I</option>
+			<option value="TIMe+G">TIMe+G</option>
+			<option value="TIMe+I+G">TIMe+I+G</option>
+			<option value="TIMe+R2">TIMe+R2</option>
+			<option value="TIMe+R3">TIMe+R3</option>
+			<option value="TIMe+R4">TIMe+R4</option>
+			<option value="TIMe+R5">TIMe+R5</option>
+			<option value="TIMe+R6">TIMe+R6</option>
+			<option value="TIMe+R7">TIMe+R7</option>
+			<option value="TIMe+R8">TIMe+R8</option>
+			<option value="TIMe+R9">TIMe+R9</option>
+			<option value="TIMe+R10">TIMe+R10</option>
+			<option value="TIM">TIM</option>
+			<option value="TIM+I">TIM+I</option>
+			<option value="TIM+G">TIM+G</option>
+			<option value="TIM+I+G">TIM+I+G</option>
+			<option value="TIM+R2">TIM+R2</option>
+			<option value="TIM+R3">TIM+R3</option>
+			<option value="TIM+R4">TIM+R4</option>
+			<option value="TIM+R5">TIM+R5</option>
+			<option value="TIM+R6">TIM+R6</option>
+			<option value="TIM+R7">TIM+R7</option>
+			<option value="TIM+R8">TIM+R8</option>
+			<option value="TIM+R9">TIM+R9</option>
+			<option value="TIM+R10">TIM+R10</option>
+			<option value="TIM2e">TIM2e</option>
+			<option value="TIM2e+I">TIM2e+I</option>
+			<option value="TIM2e+G">TIM2e+G</option>
+			<option value="TIM2e+I+G">TIM2e+I+G</option>
+			<option value="TIM2e+R2">TIM2e+R2</option>
+			<option value="TIM2e+R3">TIM2e+R3</option>
+			<option value="TIM2e+R4">TIM2e+R4</option>
+			<option value="TIM2e+R5">TIM2e+R5</option>
+			<option value="TIM2e+R6">TIM2e+R6</option>
+			<option value="TIM2e+R7">TIM2e+R7</option>
+			<option value="TIM2e+R8">TIM2e+R8</option>
+			<option value="TIM2e+R9">TIM2e+R9</option>
+			<option value="TIM2e+R10">TIM2e+R10</option>
+			<option value="TIM2">TIM2</option>
+			<option value="TIM2+I">TIM2+I</option>
+			<option value="TIM2+G">TIM2+G</option>
+			<option value="TIM2+I+G">TIM2+I+G</option>
+			<option value="TIM2+R2">TIM2+R2</option>
+			<option value="TIM2+R3">TIM2+R3</option>
+			<option value="TIM2+R4">TIM2+R4</option>
+			<option value="TIM2+R5">TIM2+R5</option>
+			<option value="TIM2+R6">TIM2+R6</option>
+			<option value="TIM2+R7">TIM2+R7</option>
+			<option value="TIM2+R8">TIM2+R8</option>
+			<option value="TIM2+R9">TIM2+R9</option>
+			<option value="TIM2+R10">TIM2+R10</option>
+			<option value="TIM3e">TIM3e</option>
+			<option value="TIM3e+I">TIM3e+I</option>
+			<option value="TIM3e+G">TIM3e+G</option>
+			<option value="TIM3e+I+G">TIM3e+I+G</option>
+			<option value="TIM3e+R2">TIM3e+R2</option>
+			<option value="TIM3e+R3">TIM3e+R3</option>
+			<option value="TIM3e+R4">TIM3e+R4</option>
+			<option value="TIM3e+R5">TIM3e+R5</option>
+			<option value="TIM3e+R6">TIM3e+R6</option>
+			<option value="TIM3e+R7">TIM3e+R7</option>
+			<option value="TIM3e+R8">TIM3e+R8</option>
+			<option value="TIM3e+R9">TIM3e+R9</option>
+			<option value="TIM3e+R10">TIM3e+R10</option>
+			<option value="TIM3">TIM3</option>
+			<option value="TIM3+I">TIM3+I</option>
+			<option value="TIM3+G">TIM3+G</option>
+			<option value="TIM3+I+G">TIM3+I+G</option>
+			<option value="TIM3+R2">TIM3+R2</option>
+			<option value="TIM3+R3">TIM3+R3</option>
+			<option value="TIM3+R4">TIM3+R4</option>
+			<option value="TIM3+R5">TIM3+R5</option>
+			<option value="TIM3+R6">TIM3+R6</option>
+			<option value="TIM3+R7">TIM3+R7</option>
+			<option value="TIM3+R8">TIM3+R8</option>
+			<option value="TIM3+R9">TIM3+R9</option>
+			<option value="TIM3+R10">TIM3+R10</option>
+			<option value="TVMe">TVMe</option>
+			<option value="TVMe+I">TVMe+I</option>
+			<option value="TVMe+G">TVMe+G</option>
+			<option value="TVMe+I+G">TVMe+I+G</option>
+			<option value="TVMe+R2">TVMe+R2</option>
+			<option value="TVMe+R3">TVMe+R3</option>
+			<option value="TVMe+R4">TVMe+R4</option>
+			<option value="TVMe+R5">TVMe+R5</option>
+			<option value="TVMe+R6">TVMe+R6</option>
+			<option value="TVMe+R7">TVMe+R7</option>
+			<option value="TVMe+R8">TVMe+R8</option>
+			<option value="TVMe+R9">TVMe+R9</option>
+			<option value="TVMe+R10">TVMe+R10</option>
+			<option value="TVM">TVM</option>
+			<option value="TVM+I">TVM+I</option>
+			<option value="TVM+G">TVM+G</option>
+			<option value="TVM+I+G">TVM+I+G</option>
+			<option value="TVM+R2">TVM+R2</option>
+			<option value="TVM+R3">TVM+R3</option>
+			<option value="TVM+R4">TVM+R4</option>
+			<option value="TVM+R5">TVM+R5</option>
+			<option value="TVM+R6">TVM+R6</option>
+			<option value="TVM+R7">TVM+R7</option>
+			<option value="TVM+R8">TVM+R8</option>
+			<option value="TVM+R9">TVM+R9</option>
+			<option value="TVM+R10">TVM+R10</option>
+			<option value="SYM">SYM</option>
+			<option value="SYM+I">SYM+I</option>
+			<option value="SYM+G">SYM+G</option>
+			<option value="SYM+I+G">SYM+I+G</option>
+			<option value="SYM+R2">SYM+R2</option>
+			<option value="SYM+R3">SYM+R3</option>
+			<option value="SYM+R4">SYM+R4</option>
+			<option value="SYM+R5">SYM+R5</option>
+			<option value="SYM+R6">SYM+R6</option>
+			<option value="SYM+R7">SYM+R7</option>
+			<option value="SYM+R8">SYM+R8</option>
+			<option value="SYM+R9">SYM+R9</option>
+			<option value="SYM+R10">SYM+R10</option>
+			<option value="GTR">GTR</option>
+			<option value="GTR+I">GTR+I</option>
+			<option value="GTR+G">GTR+G</option>
+			<option value="GTR+I+G">GTR+I+G</option>
+			<option value="GTR+R2">GTR+R2</option>
+			<option value="GTR+R3">GTR+R3</option>
+			<option value="GTR+R4">GTR+R4</option>
+			<option value="GTR+R5">GTR+R5</option>
+			<option value="GTR+R6">GTR+R6</option>
+			<option value="GTR+R7">GTR+R7</option>
+			<option value="GTR+R8">GTR+R8</option>
+			<option value="GTR+R9">GTR+R9</option>
+			<option value="GTR+R10">GTR+R10</option>
+			<option value="MFP">MFP</option>
+			<option value="TEST">TEST</option>
+		</param>
+		<param label="--p-bootstrap-replicates: INTEGER Range(1000, None)     The number of bootstrap searches to perform. Minimum of 1000 recomended.          [default: 1000]" name="pbootstrapreplicates" optional="True" type="integer" min="1000" value="1000"/>
+		<param label="--p-n-init-pars-trees: INTEGER Range(1, None)        Number of initial parsimony trees. If not set, program defaults will be used. See IQ-TREE manual for details.                              [optional]" name="pninitparstrees" optional="True" type="integer" min="1"/>
+		<param label="--p-n-top-init-trees: INTEGER Range(1, None)        Number of top initial trees. If not set, program defaults will be used. See IQ-TREE manual for details.                                  [optional]" name="pntopinittrees" optional="True" type="integer" min="1"/>
+		<param label="--p-n-best-retain-trees: INTEGER Range(1, None)        Number of best trees retained during search. If not set, program defaults will be used. See IQ-TREE manual for details.                       [optional]" name="pnbestretaintrees" optional="True" type="integer"  min="1"/>
+		<param label="--p-stop-iter: INTEGER   Number of unsuccessful iterations to stop. If not Range(1, None)        set, program defaults will be used. See IQ-TREE manual for details.                       [optional]" name="pstopiter" optional="True" type="integer"  min="1"/>
+		<param label="--p-perturb-nni-strength: NUMBER Range(0.01, 99)       Perturbation strength for randomized NNI. If not set, program defaults will be used. See IQ-TREE manual for details.                       [optional]" name="pperturbnnistrength" optional="True" type="float"  min="0.01" max="99"/>
+		<param label="--p-spr-radius: INTEGER  Radius for parsimony SPR search. If not set, Range(1, None)        program defaults will be used. See IQ-TREE manual for details.                              [optional]" name="psprradius" optional="True" type="integer" min="1"/>
+		<param label="--p-n-max-ufboot-iter: INTEGER Range(1, None)        Maximum number of iterations. If not set, program defaults will be used. See IQ-TREE manual for details.                                  [optional]" name="pnmaxufbootiter" optional="True" type="integer" min="1"/>
+		<param label="--p-n-ufboot-steps: INTEGER Range(1, None)        Number of iterations for UFBoot stopping rule. If not set, program defaults will be used.See IQ-TREE manual for details.                       [optional]" name="pnufbootsteps" optional="True" type="integer" min="1"/>
+		<param label="--p-min-cor-ufboot: NUMBER Range(0.51, 0.99)     Minimum correlation coefficient. If not set, program defaults will be used.See IQ-TREE manual for details.                                  [optional]" name="pmincorufboot" optional="True" type="float" min="0.51" max="0.99"/>
+		<param label="--p-ep-break-ufboot: NUMBER Range(0.01, 0.99)     Epsilon value to break tie. If not set, program defaults will be used. See IQ-TREE manual for details.                                  [optional]" name="pepbreakufboot" optional="True" type="float" min="0.01" max="0.99"/>
+		<param label="--p-allnni: --p-no-allnni Perform more thorough NNI search.   [default: False]" name="pallnni" selected="False" type="boolean"/>
+		<param label="--p-alrt: INTEGER        Single branch test method. Number of bootstrap Range(1000, None)     replicates to perform an SH-like approximate likelihood ratio test (SH-aLRT). Minimum of 1000 replicates is recomended. Set to '0' for parametric aLRT test. Can be used with other 'single branch test methods'. Values reported in the order of: alrt, lbp, abayes, ufboot.                [optional]" name="palrt" optional="True" type="integer" min="1000"/>
+		<param label="--p-abayes: --p-no-abayes Single branch test method. Performs an approximate Bayes test. Can be used with other 'single branch test methods' and ultrafast bootstrap. Values reported in the order of: alrt, lbp, abayes, ufboot. [default: False]" name="pabayes" selected="False" type="boolean"/>
+		<param label="--p-lbp: INTEGER         Single branch test method. Number of bootstrap Range(1000, None)     replicates to perform a fast local bootstrap probability method. Minimum of 1000 replicates is recomended. Can be used with other 'single branch test methods'. Values reported in the order of: alrt, lbp, abayes, ufboot.                [optional]" name="plbp" optional="True" type="integer" min="1000"/>
+		<param label="--p-bnni: --p-no-bnni  Optimize UFBoot trees by NNI on bootstrap alignment. This option reduces the risk of overestimating branch supports with UFBoot due to severe model violations.            [default: False]" name="pbnni" selected="False" type="boolean"/>
+		<param label="--p-safe: --p-no-safe  Safe likelihood kernel to avoid numerical underflow.                          [default: False]" name="psafe" selected="False" type="boolean"/>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: tree.qza" name="otree"/>
+	</outputs>
+	<help><![CDATA[
+Construct a phylogenetic tree with IQ-TREE with bootstrap supports.
+###################################################################
+
+Construct a phylogenetic tree using IQ-TREE (http://www.iqtree.org/) with
+automatic model selection and bootstrap supports.
+
+Parameters
+----------
+alignment : FeatureData[AlignedSequence]
+    Aligned sequences to be used for phylogenetic reconstruction.
+seed : Int, optional
+    Random number seed. If not set, program defaults will be used. See IQ-
+    TREE manual for details.
+n_runs : Int % Range(1, None), optional
+    Number of indepedent runs. Multiple  independent runs (e.g. 10) can
+    outperform a single run in terms of likelihood maximisation.
+substitution_model : Str % Choices('JC', 'JC+I', 'JC+G', 'JC+I+G', 'JC+R2', 'JC+R3', 'JC+R4', 'JC+R5', 'JC+R6', 'JC+R7', 'JC+R8', 'JC+R9', 'JC+R10', 'F81', 'F81+I', 'F81+G', 'F81+I+G', 'F81+R2', 'F81+R3', 'F81+R4', 'F81+R5', 'F81+R6', 'F81+R7', 'F81+R8', 'F81+R9', 'F81+R10', 'K80', 'K80+I', 'K80+G', 'K80+I+G', 'K80+R2', 'K80+R3', 'K80+R4', 'K80+R5', 'K80+R6', 'K80+R7', 'K80+R8', 'K80+R9', 'K80+R10', 'HKY', 'HKY+I', 'HKY+G', 'HKY+I+G', 'HKY+R2', 'HKY+R3', 'HKY+R4', 'HKY+R5', 'HKY+R6', 'HKY+R7', 'HKY+R8', 'HKY+R9', 'HKY+R10', 'TNe', 'TNe+I', 'TNe+G', 'TNe+I+G', 'TNe+R2', 'TNe+R3', 'TNe+R4', 'TNe+R5', 'TNe+R6', 'TNe+R7', 'TNe+R8', 'TNe+R9', 'TNe+R10', 'TN', 'TN+I', 'TN+G', 'TN+I+G', 'TN+R2', 'TN+R3', 'TN+R4', 'TN+R5', 'TN+R6', 'TN+R7', 'TN+R8', 'TN+R9', 'TN+R10', 'K81', 'K81+I', 'K81+G', 'K81+I+G', 'K81+R2', 'K81+R3', 'K81+R4', 'K81+R5', 'K81+R6', 'K81+R7', 'K81+R8', 'K81+R9', 'K81+R10', 'K81u', 'K81u+I', 'K81u+G', 'K81u+I+G', 'K81u+R2', 'K81u+R3', 'K81u+R4', 'K81u+R5', 'K81u+R6', 'K81u+R7', 'K81u+R8', 'K81u+R9', 'K81u+R10', 'TPM2', 'TPM2+I', 'TPM2+G', 'TPM2+I+G', 'TPM2+R2', 'TPM2+R3', 'TPM2+R4', 'TPM2+R5', 'TPM2+R6', 'TPM2+R7', 'TPM2+R8', 'TPM2+R9', 'TPM2+R10', 'TPM2u', 'TPM2u+I', 'TPM2u+G', 'TPM2u+I+G', 'TPM2u+R2', 'TPM2u+R3', 'TPM2u+R4', 'TPM2u+R5', 'TPM2u+R6', 'TPM2u+R7', 'TPM2u+R8', 'TPM2u+R9', 'TPM2u+R10', 'TPM3', 'TPM3+I', 'TPM3+G', 'TPM3+I+G', 'TPM3+R2', 'TPM3+R3', 'TPM3+R4', 'TPM3+R5', 'TPM3+R6', 'TPM3+R7', 'TPM3+R8', 'TPM3+R9', 'TPM3+R10', 'TPM3u', 'TPM3u+I', 'TPM3u+G', 'TPM3u+I+G', 'TPM3u+R2', 'TPM3u+R3', 'TPM3u+R4', 'TPM3u+R5', 'TPM3u+R6', 'TPM3u+R7', 'TPM3u+R8', 'TPM3u+R9', 'TPM3u+R10', 'TIMe', 'TIMe+I', 'TIMe+G', 'TIMe+I+G', 'TIMe+R2', 'TIMe+R3', 'TIMe+R4', 'TIMe+R5', 'TIMe+R6', 'TIMe+R7', 'TIMe+R8', 'TIMe+R9', 'TIMe+R10', 'TIM', 'TIM+I', 'TIM+G', 'TIM+I+G', 'TIM+R2', 'TIM+R3', 'TIM+R4', 'TIM+R5', 'TIM+R6', 'TIM+R7', 'TIM+R8', 'TIM+R9', 'TIM+R10', 'TIM2e', 'TIM2e+I', 'TIM2e+G', 'TIM2e+I+G', 'TIM2e+R2', 'TIM2e+R3', 'TIM2e+R4', 'TIM2e+R5', 'TIM2e+R6', 'TIM2e+R7', 'TIM2e+R8', 'TIM2e+R9', 'TIM2e+R10', 'TIM2', 'TIM2+I', 'TIM2+G', 'TIM2+I+G', 'TIM2+R2', 'TIM2+R3', 'TIM2+R4', 'TIM2+R5', 'TIM2+R6', 'TIM2+R7', 'TIM2+R8', 'TIM2+R9', 'TIM2+R10', 'TIM3e', 'TIM3e+I', 'TIM3e+G', 'TIM3e+I+G', 'TIM3e+R2', 'TIM3e+R3', 'TIM3e+R4', 'TIM3e+R5', 'TIM3e+R6', 'TIM3e+R7', 'TIM3e+R8', 'TIM3e+R9', 'TIM3e+R10', 'TIM3', 'TIM3+I', 'TIM3+G', 'TIM3+I+G', 'TIM3+R2', 'TIM3+R3', 'TIM3+R4', 'TIM3+R5', 'TIM3+R6', 'TIM3+R7', 'TIM3+R8', 'TIM3+R9', 'TIM3+R10', 'TVMe', 'TVMe+I', 'TVMe+G', 'TVMe+I+G', 'TVMe+R2', 'TVMe+R3', 'TVMe+R4', 'TVMe+R5', 'TVMe+R6', 'TVMe+R7', 'TVMe+R8', 'TVMe+R9', 'TVMe+R10', 'TVM', 'TVM+I', 'TVM+G', 'TVM+I+G', 'TVM+R2', 'TVM+R3', 'TVM+R4', 'TVM+R5', 'TVM+R6', 'TVM+R7', 'TVM+R8', 'TVM+R9', 'TVM+R10', 'SYM', 'SYM+I', 'SYM+G', 'SYM+I+G', 'SYM+R2', 'SYM+R3', 'SYM+R4', 'SYM+R5', 'SYM+R6', 'SYM+R7', 'SYM+R8', 'SYM+R9', 'SYM+R10', 'GTR', 'GTR+I', 'GTR+G', 'GTR+I+G', 'GTR+R2', 'GTR+R3', 'GTR+R4', 'GTR+R5', 'GTR+R6', 'GTR+R7', 'GTR+R8', 'GTR+R9', 'GTR+R10', 'MFP', 'TEST'), optional
+    Model of Nucleotide Substitution.If not provided, IQ-TREE will
+    determine the best fit substitution model automatically.
+bootstrap_replicates : Int % Range(1000, None), optional
+    The number of bootstrap searches to perform. Minimum of 1000
+    recomended.
+n_init_pars_trees : Int % Range(1, None), optional
+    Number of initial parsimony trees. If not set, program defaults will be
+    used. See IQ-TREE manual for details.
+n_top_init_trees : Int % Range(1, None), optional
+    Number of top initial trees. If not set, program defaults will be used.
+    See IQ-TREE manual for details.
+n_best_retain_trees : Int % Range(1, None), optional
+    Number of best trees retained during search. If not set, program
+    defaults will be used. See IQ-TREE manual for details.
+stop_iter : Int % Range(1, None), optional
+    Number of unsuccessful iterations to stop. If not set, program defaults
+    will be used. See IQ-TREE manual for details.
+perturb_nni_strength : Float % Range(0.01, 99), optional
+    Perturbation strength for randomized NNI. If not set, program defaults
+    will be used. See IQ-TREE manual for details.
+spr_radius : Int % Range(1, None), optional
+    Radius for parsimony SPR search. If not set, program defaults will be
+    used. See IQ-TREE manual for details.
+n_max_ufboot_iter : Int % Range(1, None), optional
+    Maximum number of iterations. If not set, program defaults will be
+    used. See IQ-TREE manual for details.
+n_ufboot_steps : Int % Range(1, None), optional
+    Number of iterations for UFBoot stopping rule. If not set, program
+    defaults will be used.See IQ-TREE manual for details.
+min_cor_ufboot : Float % Range(0.51, 0.99), optional
+    Minimum correlation coefficient. If not set, program defaults will be
+    used.See IQ-TREE manual for details.
+ep_break_ufboot : Float % Range(0.01, 0.99), optional
+    Epsilon value to break tie. If not set, program defaults will be used.
+    See IQ-TREE manual for details.
+allnni : Bool, optional
+    Perform more thorough NNI search.
+alrt : Int % Range(1000, None), optional
+    Single branch test method. Number of bootstrap replicates to perform an
+    SH-like approximate likelihood ratio test (SH-aLRT). Minimum of 1000
+    replicates is recomended. Set to '0' for parametric aLRT test. Can be
+    used with other 'single branch test methods'. Values reported in the
+    order of: alrt, lbp, abayes, ufboot.
+abayes : Bool, optional
+    Single branch test method. Performs an approximate Bayes test. Can be
+    used with other 'single branch test methods' and ultrafast bootstrap.
+    Values reported in the order of: alrt, lbp, abayes, ufboot.
+lbp : Int % Range(1000, None), optional
+    Single branch test method. Number of bootstrap replicates to perform a
+    fast local bootstrap probability method. Minimum of 1000 replicates is
+    recomended. Can be used with other 'single branch test methods'. Values
+    reported in the order of: alrt, lbp, abayes, ufboot.
+bnni : Bool, optional
+    Optimize UFBoot trees by NNI on bootstrap alignment. This option
+    reduces the risk of overestimating branch supports with UFBoot due to
+    severe model violations.
+safe : Bool, optional
+    Safe likelihood kernel to avoid numerical underflow.
+
+Returns
+-------
+tree : Phylogeny[Unrooted]
+    The resulting phylogenetic tree.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_phylogeny_iqtree.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,470 @@
+<?xml version="1.0" ?>
+<tool id="qiime_phylogeny_iqtree" name="qiime phylogeny iqtree" version="2019.4">
+	<description> - Construct a phylogenetic tree with IQ-TREE.</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime phylogeny iqtree
+
+--i-alignment=$ialignment
+
+#if str($pseed):
+ --p-seed="$pseed"
+#end if
+
+#set $pncores = '${GALAXY_SLOTS:-4}'
+
+#if str($pncores):
+ --p-n-cores="$pncores"
+#end if
+
+#if $pnruns:
+ --p-n-runs=$pnruns
+#end if
+
+#if str($psubstitutionmodel) != 'None':
+ --p-substitution-model=$psubstitutionmodel
+#end if
+
+#if str($pninitparstrees):
+ --p-n-init-pars-trees="$pninitparstrees"
+#end if
+
+#if str($pntopinittrees):
+ --p-n-top-init-trees="$pntopinittrees"
+#end if
+
+#if str($pnbestretaintrees):
+ --p-n-best-retain-trees="$pnbestretaintrees"
+#end if
+
+#if str($pniter):
+ --p-n-iter="$pniter"
+#end if
+
+#if str($pstopiter):
+ --p-stop-iter="$pstopiter"
+#end if
+
+#if str($pperturbnnistrength):
+ --p-perturb-nni-strength="$pperturbnnistrength"
+#end if
+
+#if str($psprradius):
+ --p-spr-radius="$psprradius"
+#end if
+
+#if $pallnni:
+ --p-allnni
+#end if
+
+#if $pfast:
+ --p-fast
+#end if
+
+#if str($palrt):
+ --p-alrt="$palrt"
+#end if
+
+#if $pabayes:
+ --p-abayes
+#end if
+
+#if str($plbp):
+ --p-lbp="$plbp"
+#end if
+
+#if $psafe:
+ --p-safe
+#end if
+
+--o-tree=otree
+;
+cp otree.qza $otree
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-alignment: ARTIFACT FeatureData[AlignedSequence] Aligned sequences to be used for phylogenetic reconstruction.                           [required]" name="ialignment" optional="False" type="data"/>
+		<param label="--p-seed: INTEGER        Random number seed. If not set, program defaults will be used. See IQ-TREE manual for details. [optional]" name="pseed" optional="True" type="integer"/>
+		<param label="--p-n-runs: INTEGER      Number of indepedent runs. Multiple  independent Range(1, None)        runs (e.g. 10) can outperform a single run in terms of likelihood maximisation.             [default: 1]" name="pnruns" optional="True" type="integer" value="1" min="1"/>
+		<param label="--p-substitution-model: " name="psubstitutionmodel" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="JC">JC</option>
+			<option value="JC+I">JC+I</option>
+			<option value="JC+G">JC+G</option>
+			<option value="JC+I+G">JC+I+G</option>
+			<option value="JC+R2">JC+R2</option>
+			<option value="JC+R3">JC+R3</option>
+			<option value="JC+R4">JC+R4</option>
+			<option value="JC+R5">JC+R5</option>
+			<option value="JC+R6">JC+R6</option>
+			<option value="JC+R7">JC+R7</option>
+			<option value="JC+R8">JC+R8</option>
+			<option value="JC+R9">JC+R9</option>
+			<option value="JC+R10">JC+R10</option>
+			<option value="F81">F81</option>
+			<option value="F81+I">F81+I</option>
+			<option value="F81+G">F81+G</option>
+			<option value="F81+I+G">F81+I+G</option>
+			<option value="F81+R2">F81+R2</option>
+			<option value="F81+R3">F81+R3</option>
+			<option value="F81+R4">F81+R4</option>
+			<option value="F81+R5">F81+R5</option>
+			<option value="F81+R6">F81+R6</option>
+			<option value="F81+R7">F81+R7</option>
+			<option value="F81+R8">F81+R8</option>
+			<option value="F81+R9">F81+R9</option>
+			<option value="F81+R10">F81+R10</option>
+			<option value="K80">K80</option>
+			<option value="K80+I">K80+I</option>
+			<option value="K80+G">K80+G</option>
+			<option value="K80+I+G">K80+I+G</option>
+			<option value="K80+R2">K80+R2</option>
+			<option value="K80+R3">K80+R3</option>
+			<option value="K80+R4">K80+R4</option>
+			<option value="K80+R5">K80+R5</option>
+			<option value="K80+R6">K80+R6</option>
+			<option value="K80+R7">K80+R7</option>
+			<option value="K80+R8">K80+R8</option>
+			<option value="K80+R9">K80+R9</option>
+			<option value="K80+R10">K80+R10</option>
+			<option value="HKY">HKY</option>
+			<option value="HKY+I">HKY+I</option>
+			<option value="HKY+G">HKY+G</option>
+			<option value="HKY+I+G">HKY+I+G</option>
+			<option value="HKY+R2">HKY+R2</option>
+			<option value="HKY+R3">HKY+R3</option>
+			<option value="HKY+R4">HKY+R4</option>
+			<option value="HKY+R5">HKY+R5</option>
+			<option value="HKY+R6">HKY+R6</option>
+			<option value="HKY+R7">HKY+R7</option>
+			<option value="HKY+R8">HKY+R8</option>
+			<option value="HKY+R9">HKY+R9</option>
+			<option value="HKY+R10">HKY+R10</option>
+			<option value="TNe">TNe</option>
+			<option value="TNe+I">TNe+I</option>
+			<option value="TNe+G">TNe+G</option>
+			<option value="TNe+I+G">TNe+I+G</option>
+			<option value="TNe+R2">TNe+R2</option>
+			<option value="TNe+R3">TNe+R3</option>
+			<option value="TNe+R4">TNe+R4</option>
+			<option value="TNe+R5">TNe+R5</option>
+			<option value="TNe+R6">TNe+R6</option>
+			<option value="TNe+R7">TNe+R7</option>
+			<option value="TNe+R8">TNe+R8</option>
+			<option value="TNe+R9">TNe+R9</option>
+			<option value="TNe+R10">TNe+R10</option>
+			<option value="TN">TN</option>
+			<option value="TN+I">TN+I</option>
+			<option value="TN+G">TN+G</option>
+			<option value="TN+I+G">TN+I+G</option>
+			<option value="TN+R2">TN+R2</option>
+			<option value="TN+R3">TN+R3</option>
+			<option value="TN+R4">TN+R4</option>
+			<option value="TN+R5">TN+R5</option>
+			<option value="TN+R6">TN+R6</option>
+			<option value="TN+R7">TN+R7</option>
+			<option value="TN+R8">TN+R8</option>
+			<option value="TN+R9">TN+R9</option>
+			<option value="TN+R10">TN+R10</option>
+			<option value="K81">K81</option>
+			<option value="K81+I">K81+I</option>
+			<option value="K81+G">K81+G</option>
+			<option value="K81+I+G">K81+I+G</option>
+			<option value="K81+R2">K81+R2</option>
+			<option value="K81+R3">K81+R3</option>
+			<option value="K81+R4">K81+R4</option>
+			<option value="K81+R5">K81+R5</option>
+			<option value="K81+R6">K81+R6</option>
+			<option value="K81+R7">K81+R7</option>
+			<option value="K81+R8">K81+R8</option>
+			<option value="K81+R9">K81+R9</option>
+			<option value="K81+R10">K81+R10</option>
+			<option value="K81u">K81u</option>
+			<option value="K81u+I">K81u+I</option>
+			<option value="K81u+G">K81u+G</option>
+			<option value="K81u+I+G">K81u+I+G</option>
+			<option value="K81u+R2">K81u+R2</option>
+			<option value="K81u+R3">K81u+R3</option>
+			<option value="K81u+R4">K81u+R4</option>
+			<option value="K81u+R5">K81u+R5</option>
+			<option value="K81u+R6">K81u+R6</option>
+			<option value="K81u+R7">K81u+R7</option>
+			<option value="K81u+R8">K81u+R8</option>
+			<option value="K81u+R9">K81u+R9</option>
+			<option value="K81u+R10">K81u+R10</option>
+			<option value="TPM2">TPM2</option>
+			<option value="TPM2+I">TPM2+I</option>
+			<option value="TPM2+G">TPM2+G</option>
+			<option value="TPM2+I+G">TPM2+I+G</option>
+			<option value="TPM2+R2">TPM2+R2</option>
+			<option value="TPM2+R3">TPM2+R3</option>
+			<option value="TPM2+R4">TPM2+R4</option>
+			<option value="TPM2+R5">TPM2+R5</option>
+			<option value="TPM2+R6">TPM2+R6</option>
+			<option value="TPM2+R7">TPM2+R7</option>
+			<option value="TPM2+R8">TPM2+R8</option>
+			<option value="TPM2+R9">TPM2+R9</option>
+			<option value="TPM2+R10">TPM2+R10</option>
+			<option value="TPM2u">TPM2u</option>
+			<option value="TPM2u+I">TPM2u+I</option>
+			<option value="TPM2u+G">TPM2u+G</option>
+			<option value="TPM2u+I+G">TPM2u+I+G</option>
+			<option value="TPM2u+R2">TPM2u+R2</option>
+			<option value="TPM2u+R3">TPM2u+R3</option>
+			<option value="TPM2u+R4">TPM2u+R4</option>
+			<option value="TPM2u+R5">TPM2u+R5</option>
+			<option value="TPM2u+R6">TPM2u+R6</option>
+			<option value="TPM2u+R7">TPM2u+R7</option>
+			<option value="TPM2u+R8">TPM2u+R8</option>
+			<option value="TPM2u+R9">TPM2u+R9</option>
+			<option value="TPM2u+R10">TPM2u+R10</option>
+			<option value="TPM3">TPM3</option>
+			<option value="TPM3+I">TPM3+I</option>
+			<option value="TPM3+G">TPM3+G</option>
+			<option value="TPM3+I+G">TPM3+I+G</option>
+			<option value="TPM3+R2">TPM3+R2</option>
+			<option value="TPM3+R3">TPM3+R3</option>
+			<option value="TPM3+R4">TPM3+R4</option>
+			<option value="TPM3+R5">TPM3+R5</option>
+			<option value="TPM3+R6">TPM3+R6</option>
+			<option value="TPM3+R7">TPM3+R7</option>
+			<option value="TPM3+R8">TPM3+R8</option>
+			<option value="TPM3+R9">TPM3+R9</option>
+			<option value="TPM3+R10">TPM3+R10</option>
+			<option value="TPM3u">TPM3u</option>
+			<option value="TPM3u+I">TPM3u+I</option>
+			<option value="TPM3u+G">TPM3u+G</option>
+			<option value="TPM3u+I+G">TPM3u+I+G</option>
+			<option value="TPM3u+R2">TPM3u+R2</option>
+			<option value="TPM3u+R3">TPM3u+R3</option>
+			<option value="TPM3u+R4">TPM3u+R4</option>
+			<option value="TPM3u+R5">TPM3u+R5</option>
+			<option value="TPM3u+R6">TPM3u+R6</option>
+			<option value="TPM3u+R7">TPM3u+R7</option>
+			<option value="TPM3u+R8">TPM3u+R8</option>
+			<option value="TPM3u+R9">TPM3u+R9</option>
+			<option value="TPM3u+R10">TPM3u+R10</option>
+			<option value="TIMe">TIMe</option>
+			<option value="TIMe+I">TIMe+I</option>
+			<option value="TIMe+G">TIMe+G</option>
+			<option value="TIMe+I+G">TIMe+I+G</option>
+			<option value="TIMe+R2">TIMe+R2</option>
+			<option value="TIMe+R3">TIMe+R3</option>
+			<option value="TIMe+R4">TIMe+R4</option>
+			<option value="TIMe+R5">TIMe+R5</option>
+			<option value="TIMe+R6">TIMe+R6</option>
+			<option value="TIMe+R7">TIMe+R7</option>
+			<option value="TIMe+R8">TIMe+R8</option>
+			<option value="TIMe+R9">TIMe+R9</option>
+			<option value="TIMe+R10">TIMe+R10</option>
+			<option value="TIM">TIM</option>
+			<option value="TIM+I">TIM+I</option>
+			<option value="TIM+G">TIM+G</option>
+			<option value="TIM+I+G">TIM+I+G</option>
+			<option value="TIM+R2">TIM+R2</option>
+			<option value="TIM+R3">TIM+R3</option>
+			<option value="TIM+R4">TIM+R4</option>
+			<option value="TIM+R5">TIM+R5</option>
+			<option value="TIM+R6">TIM+R6</option>
+			<option value="TIM+R7">TIM+R7</option>
+			<option value="TIM+R8">TIM+R8</option>
+			<option value="TIM+R9">TIM+R9</option>
+			<option value="TIM+R10">TIM+R10</option>
+			<option value="TIM2e">TIM2e</option>
+			<option value="TIM2e+I">TIM2e+I</option>
+			<option value="TIM2e+G">TIM2e+G</option>
+			<option value="TIM2e+I+G">TIM2e+I+G</option>
+			<option value="TIM2e+R2">TIM2e+R2</option>
+			<option value="TIM2e+R3">TIM2e+R3</option>
+			<option value="TIM2e+R4">TIM2e+R4</option>
+			<option value="TIM2e+R5">TIM2e+R5</option>
+			<option value="TIM2e+R6">TIM2e+R6</option>
+			<option value="TIM2e+R7">TIM2e+R7</option>
+			<option value="TIM2e+R8">TIM2e+R8</option>
+			<option value="TIM2e+R9">TIM2e+R9</option>
+			<option value="TIM2e+R10">TIM2e+R10</option>
+			<option value="TIM2">TIM2</option>
+			<option value="TIM2+I">TIM2+I</option>
+			<option value="TIM2+G">TIM2+G</option>
+			<option value="TIM2+I+G">TIM2+I+G</option>
+			<option value="TIM2+R2">TIM2+R2</option>
+			<option value="TIM2+R3">TIM2+R3</option>
+			<option value="TIM2+R4">TIM2+R4</option>
+			<option value="TIM2+R5">TIM2+R5</option>
+			<option value="TIM2+R6">TIM2+R6</option>
+			<option value="TIM2+R7">TIM2+R7</option>
+			<option value="TIM2+R8">TIM2+R8</option>
+			<option value="TIM2+R9">TIM2+R9</option>
+			<option value="TIM2+R10">TIM2+R10</option>
+			<option value="TIM3e">TIM3e</option>
+			<option value="TIM3e+I">TIM3e+I</option>
+			<option value="TIM3e+G">TIM3e+G</option>
+			<option value="TIM3e+I+G">TIM3e+I+G</option>
+			<option value="TIM3e+R2">TIM3e+R2</option>
+			<option value="TIM3e+R3">TIM3e+R3</option>
+			<option value="TIM3e+R4">TIM3e+R4</option>
+			<option value="TIM3e+R5">TIM3e+R5</option>
+			<option value="TIM3e+R6">TIM3e+R6</option>
+			<option value="TIM3e+R7">TIM3e+R7</option>
+			<option value="TIM3e+R8">TIM3e+R8</option>
+			<option value="TIM3e+R9">TIM3e+R9</option>
+			<option value="TIM3e+R10">TIM3e+R10</option>
+			<option value="TIM3">TIM3</option>
+			<option value="TIM3+I">TIM3+I</option>
+			<option value="TIM3+G">TIM3+G</option>
+			<option value="TIM3+I+G">TIM3+I+G</option>
+			<option value="TIM3+R2">TIM3+R2</option>
+			<option value="TIM3+R3">TIM3+R3</option>
+			<option value="TIM3+R4">TIM3+R4</option>
+			<option value="TIM3+R5">TIM3+R5</option>
+			<option value="TIM3+R6">TIM3+R6</option>
+			<option value="TIM3+R7">TIM3+R7</option>
+			<option value="TIM3+R8">TIM3+R8</option>
+			<option value="TIM3+R9">TIM3+R9</option>
+			<option value="TIM3+R10">TIM3+R10</option>
+			<option value="TVMe">TVMe</option>
+			<option value="TVMe+I">TVMe+I</option>
+			<option value="TVMe+G">TVMe+G</option>
+			<option value="TVMe+I+G">TVMe+I+G</option>
+			<option value="TVMe+R2">TVMe+R2</option>
+			<option value="TVMe+R3">TVMe+R3</option>
+			<option value="TVMe+R4">TVMe+R4</option>
+			<option value="TVMe+R5">TVMe+R5</option>
+			<option value="TVMe+R6">TVMe+R6</option>
+			<option value="TVMe+R7">TVMe+R7</option>
+			<option value="TVMe+R8">TVMe+R8</option>
+			<option value="TVMe+R9">TVMe+R9</option>
+			<option value="TVMe+R10">TVMe+R10</option>
+			<option value="TVM">TVM</option>
+			<option value="TVM+I">TVM+I</option>
+			<option value="TVM+G">TVM+G</option>
+			<option value="TVM+I+G">TVM+I+G</option>
+			<option value="TVM+R2">TVM+R2</option>
+			<option value="TVM+R3">TVM+R3</option>
+			<option value="TVM+R4">TVM+R4</option>
+			<option value="TVM+R5">TVM+R5</option>
+			<option value="TVM+R6">TVM+R6</option>
+			<option value="TVM+R7">TVM+R7</option>
+			<option value="TVM+R8">TVM+R8</option>
+			<option value="TVM+R9">TVM+R9</option>
+			<option value="TVM+R10">TVM+R10</option>
+			<option value="SYM">SYM</option>
+			<option value="SYM+I">SYM+I</option>
+			<option value="SYM+G">SYM+G</option>
+			<option value="SYM+I+G">SYM+I+G</option>
+			<option value="SYM+R2">SYM+R2</option>
+			<option value="SYM+R3">SYM+R3</option>
+			<option value="SYM+R4">SYM+R4</option>
+			<option value="SYM+R5">SYM+R5</option>
+			<option value="SYM+R6">SYM+R6</option>
+			<option value="SYM+R7">SYM+R7</option>
+			<option value="SYM+R8">SYM+R8</option>
+			<option value="SYM+R9">SYM+R9</option>
+			<option value="SYM+R10">SYM+R10</option>
+			<option value="GTR">GTR</option>
+			<option value="GTR+I">GTR+I</option>
+			<option value="GTR+G">GTR+G</option>
+			<option value="GTR+I+G">GTR+I+G</option>
+			<option value="GTR+R2">GTR+R2</option>
+			<option value="GTR+R3">GTR+R3</option>
+			<option value="GTR+R4">GTR+R4</option>
+			<option value="GTR+R5">GTR+R5</option>
+			<option value="GTR+R6">GTR+R6</option>
+			<option value="GTR+R7">GTR+R7</option>
+			<option value="GTR+R8">GTR+R8</option>
+			<option value="GTR+R9">GTR+R9</option>
+			<option value="GTR+R10">GTR+R10</option>
+			<option value="MFP">MFP</option>
+			<option value="TEST">TEST</option>
+		</param>
+		<param label="--p-n-init-pars-trees: INTEGER Range(1, None)        Number of initial parsimony trees. If not set, program defaults will be used. See IQ-TREE manual for details.                              [optional]" name="pninitparstrees" optional="True" type="integer" min="1"/>
+		<param label="--p-n-top-init-trees: INTEGER Range(1, None)        Number of top initial trees. If not set, program defaults will be used. See IQ-TREE manual for details.                                  [optional]" name="pntopinittrees" optional="True" type="integer" min="1"/>
+		<param label="--p-n-best-retain-trees: INTEGER Range(1, None)        Number of best trees retained during search. If not set, program defaults will be used. See IQ-TREE manual for details.                       [optional]" name="pnbestretaintrees" optional="True" type="integer" min="1"/>
+		<param label="--p-n-iter: INTEGER      Fix number of iterations to stop. If not set, Range(1, None)        program defaults will be used. See IQ-TREE manual for details.                              [optional]" name="pniter" optional="True" type="integer" min="1"/>
+		<param label="--p-stop-iter: INTEGER   Number of unsuccessful iterations to stop. If not Range(1, None)        set, program defaults will be used. See IQ-TREE manual for details.                       [optional]" name="pstopiter" optional="True" type="integer" min="1"/>
+		<param label="--p-perturb-nni-strength: NUMBER Range(0.01, 99)       Perturbation strength for randomized NNI. If not set, program defaults will be used. See IQ-TREE manual for details.                       [optional]" name="pperturbnnistrength" optional="True" type="float" min="0.01" max="99"/>
+		<param label="--p-spr-radius: INTEGER  Radius for parsimony SPR search. If not set, Range(1, None)        program defaults will be used. See IQ-TREE manual for details.                              [optional]" name="psprradius" optional="True" type="integer" min="1"/>
+		<param label="--p-allnni: --p-no-allnni Perform more thorough NNI search.   [default: False]" name="pallnni" selected="False" type="boolean"/>
+		<param label="--p-fast: --p-no-fast  Fast search to resemble FastTree.   [default: False]" name="pfast" selected="False" type="boolean"/>
+		<param label="--p-alrt: INTEGER        Single branch test method. Number of bootstrap Range(1000, None)     replicates to perform an SH-like approximate likelihood ratio test (SH-aLRT). Minimum of 1000 replicates is recomended. Set to '0' for parametric aLRT test. Can be used with other 'single branch test methods'. Values reported in the order of: alrt, lbp, abayes.                        [optional]" name="palrt" optional="True" type="integer" min="1000"/>
+		<param label="--p-abayes: --p-no-abayes Single branch test method. Approximate Bayes test. Can be used with other 'single branch test methods'. Values reported in the order of: alrt, lbp, abayes. [default: False]" name="pabayes" selected="False" type="boolean"/>
+		<param label="--p-lbp: INTEGER         Single branch test method. Number of bootstrap Range(1000, None)     replicates to perform a fast local bootstrap probability method. Minimum of 1000 replicates is recomended. Can be used with other 'single branch test methods'. Values reported in the order of: alrt, lbp, abayes.                        [optional]" name="plbp" optional="True" type="integer" min="1000"/>
+		<param label="--p-safe: --p-no-safe  Safe likelihood kernel to avoid numerical underflow.                          [default: False]" name="psafe" selected="False" type="boolean"/>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: tree.qza" name="otree"/>
+	</outputs>
+	<help><![CDATA[
+Construct a phylogenetic tree with IQ-TREE.
+###########################################
+
+Construct a phylogenetic tree using IQ-TREE (http://www.iqtree.org/) with
+automatic model selection.
+
+Parameters
+----------
+alignment : FeatureData[AlignedSequence]
+    Aligned sequences to be used for phylogenetic reconstruction.
+seed : Int, optional
+    Random number seed. If not set, program defaults will be used. See IQ-
+    TREE manual for details.
+n_runs : Int % Range(1, None), optional
+    Number of indepedent runs. Multiple  independent runs (e.g. 10) can
+    outperform a single run in terms of likelihood maximisation.
+substitution_model : Str % Choices('JC', 'JC+I', 'JC+G', 'JC+I+G', 'JC+R2', 'JC+R3', 'JC+R4', 'JC+R5', 'JC+R6', 'JC+R7', 'JC+R8', 'JC+R9', 'JC+R10', 'F81', 'F81+I', 'F81+G', 'F81+I+G', 'F81+R2', 'F81+R3', 'F81+R4', 'F81+R5', 'F81+R6', 'F81+R7', 'F81+R8', 'F81+R9', 'F81+R10', 'K80', 'K80+I', 'K80+G', 'K80+I+G', 'K80+R2', 'K80+R3', 'K80+R4', 'K80+R5', 'K80+R6', 'K80+R7', 'K80+R8', 'K80+R9', 'K80+R10', 'HKY', 'HKY+I', 'HKY+G', 'HKY+I+G', 'HKY+R2', 'HKY+R3', 'HKY+R4', 'HKY+R5', 'HKY+R6', 'HKY+R7', 'HKY+R8', 'HKY+R9', 'HKY+R10', 'TNe', 'TNe+I', 'TNe+G', 'TNe+I+G', 'TNe+R2', 'TNe+R3', 'TNe+R4', 'TNe+R5', 'TNe+R6', 'TNe+R7', 'TNe+R8', 'TNe+R9', 'TNe+R10', 'TN', 'TN+I', 'TN+G', 'TN+I+G', 'TN+R2', 'TN+R3', 'TN+R4', 'TN+R5', 'TN+R6', 'TN+R7', 'TN+R8', 'TN+R9', 'TN+R10', 'K81', 'K81+I', 'K81+G', 'K81+I+G', 'K81+R2', 'K81+R3', 'K81+R4', 'K81+R5', 'K81+R6', 'K81+R7', 'K81+R8', 'K81+R9', 'K81+R10', 'K81u', 'K81u+I', 'K81u+G', 'K81u+I+G', 'K81u+R2', 'K81u+R3', 'K81u+R4', 'K81u+R5', 'K81u+R6', 'K81u+R7', 'K81u+R8', 'K81u+R9', 'K81u+R10', 'TPM2', 'TPM2+I', 'TPM2+G', 'TPM2+I+G', 'TPM2+R2', 'TPM2+R3', 'TPM2+R4', 'TPM2+R5', 'TPM2+R6', 'TPM2+R7', 'TPM2+R8', 'TPM2+R9', 'TPM2+R10', 'TPM2u', 'TPM2u+I', 'TPM2u+G', 'TPM2u+I+G', 'TPM2u+R2', 'TPM2u+R3', 'TPM2u+R4', 'TPM2u+R5', 'TPM2u+R6', 'TPM2u+R7', 'TPM2u+R8', 'TPM2u+R9', 'TPM2u+R10', 'TPM3', 'TPM3+I', 'TPM3+G', 'TPM3+I+G', 'TPM3+R2', 'TPM3+R3', 'TPM3+R4', 'TPM3+R5', 'TPM3+R6', 'TPM3+R7', 'TPM3+R8', 'TPM3+R9', 'TPM3+R10', 'TPM3u', 'TPM3u+I', 'TPM3u+G', 'TPM3u+I+G', 'TPM3u+R2', 'TPM3u+R3', 'TPM3u+R4', 'TPM3u+R5', 'TPM3u+R6', 'TPM3u+R7', 'TPM3u+R8', 'TPM3u+R9', 'TPM3u+R10', 'TIMe', 'TIMe+I', 'TIMe+G', 'TIMe+I+G', 'TIMe+R2', 'TIMe+R3', 'TIMe+R4', 'TIMe+R5', 'TIMe+R6', 'TIMe+R7', 'TIMe+R8', 'TIMe+R9', 'TIMe+R10', 'TIM', 'TIM+I', 'TIM+G', 'TIM+I+G', 'TIM+R2', 'TIM+R3', 'TIM+R4', 'TIM+R5', 'TIM+R6', 'TIM+R7', 'TIM+R8', 'TIM+R9', 'TIM+R10', 'TIM2e', 'TIM2e+I', 'TIM2e+G', 'TIM2e+I+G', 'TIM2e+R2', 'TIM2e+R3', 'TIM2e+R4', 'TIM2e+R5', 'TIM2e+R6', 'TIM2e+R7', 'TIM2e+R8', 'TIM2e+R9', 'TIM2e+R10', 'TIM2', 'TIM2+I', 'TIM2+G', 'TIM2+I+G', 'TIM2+R2', 'TIM2+R3', 'TIM2+R4', 'TIM2+R5', 'TIM2+R6', 'TIM2+R7', 'TIM2+R8', 'TIM2+R9', 'TIM2+R10', 'TIM3e', 'TIM3e+I', 'TIM3e+G', 'TIM3e+I+G', 'TIM3e+R2', 'TIM3e+R3', 'TIM3e+R4', 'TIM3e+R5', 'TIM3e+R6', 'TIM3e+R7', 'TIM3e+R8', 'TIM3e+R9', 'TIM3e+R10', 'TIM3', 'TIM3+I', 'TIM3+G', 'TIM3+I+G', 'TIM3+R2', 'TIM3+R3', 'TIM3+R4', 'TIM3+R5', 'TIM3+R6', 'TIM3+R7', 'TIM3+R8', 'TIM3+R9', 'TIM3+R10', 'TVMe', 'TVMe+I', 'TVMe+G', 'TVMe+I+G', 'TVMe+R2', 'TVMe+R3', 'TVMe+R4', 'TVMe+R5', 'TVMe+R6', 'TVMe+R7', 'TVMe+R8', 'TVMe+R9', 'TVMe+R10', 'TVM', 'TVM+I', 'TVM+G', 'TVM+I+G', 'TVM+R2', 'TVM+R3', 'TVM+R4', 'TVM+R5', 'TVM+R6', 'TVM+R7', 'TVM+R8', 'TVM+R9', 'TVM+R10', 'SYM', 'SYM+I', 'SYM+G', 'SYM+I+G', 'SYM+R2', 'SYM+R3', 'SYM+R4', 'SYM+R5', 'SYM+R6', 'SYM+R7', 'SYM+R8', 'SYM+R9', 'SYM+R10', 'GTR', 'GTR+I', 'GTR+G', 'GTR+I+G', 'GTR+R2', 'GTR+R3', 'GTR+R4', 'GTR+R5', 'GTR+R6', 'GTR+R7', 'GTR+R8', 'GTR+R9', 'GTR+R10', 'MFP', 'TEST'), optional
+    Model of Nucleotide Substitution. If not provided, IQ-TREE will
+    determine the best fit substitution model automatically.
+n_init_pars_trees : Int % Range(1, None), optional
+    Number of initial parsimony trees. If not set, program defaults will be
+    used. See IQ-TREE manual for details.
+n_top_init_trees : Int % Range(1, None), optional
+    Number of top initial trees. If not set, program defaults will be used.
+    See IQ-TREE manual for details.
+n_best_retain_trees : Int % Range(1, None), optional
+    Number of best trees retained during search. If not set, program
+    defaults will be used. See IQ-TREE manual for details.
+n_iter : Int % Range(1, None), optional
+    Fix number of iterations to stop. If not set, program defaults will be
+    used. See IQ-TREE manual for details.
+stop_iter : Int % Range(1, None), optional
+    Number of unsuccessful iterations to stop. If not set, program defaults
+    will be used. See IQ-TREE manual for details.
+perturb_nni_strength : Float % Range(0.01, 99), optional
+    Perturbation strength for randomized NNI. If not set, program defaults
+    will be used. See IQ-TREE manual for details.
+spr_radius : Int % Range(1, None), optional
+    Radius for parsimony SPR search. If not set, program defaults will be
+    used. See IQ-TREE manual for details.
+allnni : Bool, optional
+    Perform more thorough NNI search.
+fast : Bool, optional
+    Fast search to resemble FastTree.
+alrt : Int % Range(1000, None), optional
+    Single branch test method. Number of bootstrap replicates to perform an
+    SH-like approximate likelihood ratio test (SH-aLRT). Minimum of 1000
+    replicates is recomended. Set to '0' for parametric aLRT test. Can be
+    used with other 'single branch test methods'. Values reported in the
+    order of: alrt, lbp, abayes.
+abayes : Bool, optional
+    Single branch test method. Approximate Bayes test. Can be used with
+    other 'single branch test methods'. Values reported in the order of:
+    alrt, lbp, abayes.
+lbp : Int % Range(1000, None), optional
+    Single branch test method. Number of bootstrap replicates to perform a
+    fast local bootstrap probability method. Minimum of 1000 replicates is
+    recomended. Can be used with other 'single branch test methods'. Values
+    reported in the order of: alrt, lbp, abayes.
+safe : Bool, optional
+    Safe likelihood kernel to avoid numerical underflow.
+
+Returns
+-------
+tree : Phylogeny[Unrooted]
+    The resulting phylogenetic tree.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_phylogeny_midpoint-root.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,42 @@
+<?xml version="1.0" ?>
+<tool id="qiime_phylogeny_midpoint-root" name="qiime phylogeny midpoint-root" version="2019.4">
+	<description> - Midpoint root an unrooted phylogenetic tree.</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime phylogeny midpoint-root
+
+--i-tree=$itree
+
+--o-rooted-tree=orootedtree
+;
+cp orootedtree.qza $orootedtree
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-tree: ARTIFACT Phylogeny[Unrooted] The phylogenetic tree to be rooted.          [required]" name="itree" optional="False" type="data"/>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: rootedtree.qza" name="orootedtree"/>
+	</outputs>
+	<help><![CDATA[
+Midpoint root an unrooted phylogenetic tree.
+############################################
+
+Midpoint root an unrooted phylogenetic tree.
+
+Parameters
+----------
+tree : Phylogeny[Unrooted]
+    The phylogenetic tree to be rooted.
+
+Returns
+-------
+rooted_tree : Phylogeny[Rooted]
+    The rooted phylogenetic tree.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_phylogeny_raxml-rapid-bootstrap.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,103 @@
+<?xml version="1.0" ?>
+<tool id="qiime_phylogeny_raxml-rapid-bootstrap" name="qiime phylogeny raxml-rapid-bootstrap" version="2019.4">
+	<description> - Construct a phylogenetic tree with bootstrap supports using RAxML.</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime phylogeny raxml-rapid-bootstrap
+
+--i-alignment=$ialignment
+
+#if str($pseed):
+ --p-seed="$pseed"
+#end if
+
+#if str($prapidbootstrapseed):
+ --p-rapid-bootstrap-seed="$prapidbootstrapseed"
+#end if
+
+#if $pbootstrapreplicates:
+ --p-bootstrap-replicates=$pbootstrapreplicates
+#end if
+
+#set $pnthreads = '${GALAXY_SLOTS:-4}'
+
+#if str($pnthreads):
+ --p-n-threads="$pnthreads"
+#end if
+
+
+#if str($praxmlversion) != 'None':
+ --p-raxml-version=$praxmlversion
+#end if
+
+#if str($psubstitutionmodel) != 'None':
+ --p-substitution-model=$psubstitutionmodel
+#end if
+
+--o-tree=otree
+;
+cp otree.qza $otree
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-alignment: ARTIFACT FeatureData[AlignedSequence] Aligned sequences to be used for phylogenetic reconstruction.                           [required]" name="ialignment" optional="False" type="data"/>
+		<param label="--p-seed: INTEGER        Random number seed for the parsimony starting tree. This allows you to reproduce tree results. If not supplied then one will be randomly chosen. [optional]" name="pseed" optional="True" type="integer"/>
+		<param label="--p-rapid-bootstrap-seed: INTEGER Specify a random seed for rapid bootstrapping. This allows you to reproduce rapid bootstrap results. If not supplied then one will be randomly chosen. [optional]" name="prapidbootstrapseed" optional="True" type="integer"/>
+		<param label="--p-bootstrap-replicates: INTEGER Range(10, None)       The number of bootstrap searches to perform. [default: 100]" name="pbootstrapreplicates" optional="True" type="integer" value="100"/>
+		<param label="--p-raxml-version: " name="praxmlversion" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="Standard">Standard</option>
+			<option value="SSE3">SSE3</option>
+			<option value="AVX2">AVX2</option>
+		</param>
+		<param label="--p-substitution-model: " name="psubstitutionmodel" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="GTRGAMMA">GTRGAMMA</option>
+			<option value="GTRGAMMAI">GTRGAMMAI</option>
+			<option value="GTRCAT">GTRCAT</option>
+			<option value="GTRCATI">GTRCATI</option>
+		</param>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: tree.qza" name="otree"/>
+	</outputs>
+	<help><![CDATA[
+Construct a phylogenetic tree with bootstrap supports using RAxML.
+##################################################################
+
+Construct a phylogenetic tree with RAxML with the addition of rapid
+bootstrapping support values. See:
+https://sco.h-its.org/exelixis/web/software/raxml/
+
+Parameters
+----------
+alignment : FeatureData[AlignedSequence]
+    Aligned sequences to be used for phylogenetic reconstruction.
+seed : Int, optional
+    Random number seed for the parsimony starting tree. This allows you to
+    reproduce tree results. If not supplied then one will be randomly
+    chosen.
+rapid_bootstrap_seed : Int, optional
+    Specify a random seed for rapid bootstrapping. This allows you to
+    reproduce rapid bootstrap results. If not supplied then one will be
+    randomly chosen.
+bootstrap_replicates : Int % Range(10, None), optional
+    The number of bootstrap searches to perform.
+raxml_version : Str % Choices('Standard', 'SSE3', 'AVX2'), optional
+    Select a specific CPU optimization of RAxML to use. The SSE3 versions
+    will run approximately 40% faster than the standard version. The AVX2
+    version will run 10-30% faster than the SSE3 version.
+substitution_model : Str % Choices('GTRGAMMA', 'GTRGAMMAI', 'GTRCAT', 'GTRCATI'), optional
+    Model of Nucleotide Substitution
+
+Returns
+-------
+tree : Phylogeny[Unrooted]
+    The resulting phylogenetic tree.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_phylogeny_raxml.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,94 @@
+<?xml version="1.0" ?>
+<tool id="qiime_phylogeny_raxml" name="qiime phylogeny raxml" version="2019.4">
+	<description> - Construct a phylogenetic tree with RAxML.</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime phylogeny raxml
+
+--i-alignment=$ialignment
+
+#if str($pseed):
+ --p-seed="$pseed"
+#end if
+
+#if $pnsearches:
+ --p-n-searches=$pnsearches
+#end if
+
+#set $pnthreads = '${GALAXY_SLOTS:-4}'
+#if str($pnthreads):
+ --p-n-threads="$pnthreads"
+#end if
+
+
+#if str($praxmlversion) != 'None':
+ --p-raxml-version=$praxmlversion
+#end if
+
+#if str($psubstitutionmodel) != 'None':
+ --p-substitution-model=$psubstitutionmodel
+#end if
+
+--o-tree=otree
+;
+cp otree.qza $otree
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-alignment: ARTIFACT FeatureData[AlignedSequence] Aligned sequences to be used for phylogenetic reconstruction.                           [required]" name="ialignment" optional="False" type="data"/>
+
+		<param label="--p-seed: INTEGER        Random number seed for the parsimony starting tree. This allows you to reproduce tree results. If not supplied then one will be randomly chosen. [optional]" name="pseed" optional="True" type="integer"/>
+		<param label="--p-n-searches: INTEGER  The number of independent maximum likelihood Range(1, None)        searches to perform. The single best scoring tree is returned.                               [default: 1]" name="pnsearches" optional="True" type="integer" min="1" value="1"/>
+		<param label="--p-raxml-version: " name="praxmlversion" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="Standard">Standard</option>
+			<option value="SSE3">SSE3</option>
+			<option value="AVX2">AVX2</option>
+		</param>
+		<param label="--p-substitution-model: " name="psubstitutionmodel" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="GTRGAMMA">GTRGAMMA</option>
+			<option value="GTRGAMMAI">GTRGAMMAI</option>
+			<option value="GTRCAT">GTRCAT</option>
+			<option value="GTRCATI">GTRCATI</option>
+		</param>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: tree.qza" name="otree"/>
+	</outputs>
+	<help><![CDATA[
+Construct a phylogenetic tree with RAxML.
+#########################################
+
+Construct a phylogenetic tree with RAxML. See:
+https://sco.h-its.org/exelixis/web/software/raxml/
+
+Parameters
+----------
+alignment : FeatureData[AlignedSequence]
+    Aligned sequences to be used for phylogenetic reconstruction.
+seed : Int, optional
+    Random number seed for the parsimony starting tree. This allows you to
+    reproduce tree results. If not supplied then one will be randomly
+    chosen.
+n_searches : Int % Range(1, None), optional
+    The number of independent maximum likelihood searches to perform. The
+    single best scoring tree is returned.
+raxml_version : Str % Choices('Standard', 'SSE3', 'AVX2'), optional
+    Select a specific CPU optimization of RAxML to use. The SSE3 versions
+    will run approximately 40% faster than the standard version. The AVX2
+    version will run 10-30% faster than the SSE3 version.
+substitution_model : Str % Choices('GTRGAMMA', 'GTRGAMMAI', 'GTRCAT', 'GTRCATI'), optional
+    Model of Nucleotide Substitution.
+
+Returns
+-------
+tree : Phylogeny[Unrooted]
+    The resulting phylogenetic tree.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_quality-control_evaluate-composition.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,182 @@
+<?xml version="1.0" ?>
+<tool id="qiime_quality-control_evaluate-composition" name="qiime quality-control evaluate-composition" version="2019.4">
+	<description> - Evaluate expected vs. observed taxonomic composition of samples</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime quality-control evaluate-composition
+
+--i-expected-features=$iexpectedfeatures
+--i-observed-features=$iobservedfeatures
+
+#if $input_files_mmetadatafile:
+#def list_dict_to_string(list_dict):
+	#set $file_list = list_dict[0]['additional_input'].__getattr__('file_name')
+	#for d in list_dict[1:]:
+		#set $file_list = $file_list + ' --m-metadata-file=' + d['additional_input'].__getattr__('file_name')
+	#end for
+	#return $file_list
+#end def
+ --m-metadata-file=$list_dict_to_string($input_files_mmetadatafile)
+#end if
+
+
+#if $pdepth:
+ --p-depth=$pdepth
+#end if
+
+#if str($ppalette) != 'None':
+ --p-palette=$ppalette
+#end if
+
+#if $pplottar:
+ --p-plot-tar
+#end if
+
+#if $pplottdr:
+ --p-plot-tdr
+#end if
+
+#if $pplotrvalue:
+ --p-plot-r-value
+#end if
+
+#if $pnoplotrsquared:
+ --p-no-plot-r-squared
+#end if
+
+#if $pplotbraycurtis:
+ --p-plot-bray-curtis
+#end if
+
+#if $pplotjaccard:
+ --p-plot-jaccard
+#end if
+
+#if $pplotobservedfeatures:
+ --p-plot-observed-features
+#end if
+
+#if $pplotobservedfeaturesratio:
+ --p-plot-observed-features-ratio
+#end if
+
+#if str($mmetadatacolumn):
+ --m-metadata-column="$mmetadatacolumn"
+#end if
+
+--o-visualization=ovisualization
+;
+qiime tools export --input-path ovisualization.qzv --output-path out   && mkdir -p '$ovisualization.files_path'
+&& cp -r out/* '$ovisualization.files_path'
+&& mv '$ovisualization.files_path/index.html' '$ovisualization'
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-expected-features: ARTIFACT FeatureTable[RelativeFrequency] Expected feature compositions                [required]" name="iexpectedfeatures" optional="False" type="data"/>
+		<param format="qza,no_unzip.zip" label="--i-observed-features: ARTIFACT FeatureTable[RelativeFrequency] Observed feature compositions                [required]" name="iobservedfeatures" optional="False" type="data"/>
+		<param label="--p-depth: INTEGER    Maximum depth of semicolon-delimited taxonomic ranks to test (e.g., 1 = root, 7 = species for the greengenes reference sequence database).              [default: 7]" name="pdepth" optional="True" type="integer" value="7"/>
+		<param label="--p-palette: " name="ppalette" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="Set1">Set1</option>
+			<option value="Set2">Set2</option>
+			<option value="Set3">Set3</option>
+			<option value="Pastel1">Pastel1</option>
+			<option value="Pastel2">Pastel2</option>
+			<option value="Paired">Paired</option>
+			<option value="Accent">Accent</option>
+			<option value="Dark2">Dark2</option>
+			<option value="tab10">tab10</option>
+			<option value="tab20">tab20</option>
+			<option value="tab20b">tab20b</option>
+			<option value="tab20c">tab20c</option>
+			<option value="viridis">viridis</option>
+			<option value="plasma">plasma</option>
+			<option value="inferno">inferno</option>
+			<option value="magma">magma</option>
+			<option value="terrain">terrain</option>
+			<option value="rainbow">rainbow</option>
+		</param>
+		<param label="--p-plot-tar: --p-no-plot-tar Plot taxon accuracy rate (TAR) on score plot. TAR is the number of true positive features divided by the total number of observed features (TAR = true positives " name="pplottar" selected="False" type="boolean"/>
+		<param label="--p-plot-tdr: --p-no-plot-tdr Plot taxon detection rate (TDR) on score plot. TDR is the number of true positive features divided by the total number of expected features (TDR = true positives " name="pplottdr" selected="False" type="boolean"/>
+		<param label="--p-plot-r-value: --p-no-plot-r-value Plot expected vs. observed linear regression r value on score plot.                         [default: False]" name="pplotrvalue" selected="False" type="boolean"/>
+		<param label="--p-no-plot-r-squared: Do not plot expected vs. observed linear regression r-squared value on score plot.                    [default: False]" name="pnoplotrsquared" selected="False" type="boolean"/>
+		<param label="--p-plot-bray-curtis: --p-no-plot-bray-curtis Plot expected vs. observed Bray-Curtis dissimilarity scores on score plot.                  [default: False]" name="pplotbraycurtis" selected="False" type="boolean"/>
+		<param label="--p-plot-jaccard: --p-no-plot-jaccard Plot expected vs. observed Jaccard distances scores on score plot.                            [default: False]" name="pplotjaccard" selected="False" type="boolean"/>
+		<param label="--p-plot-observed-features: --p-no-plot-observed-features Plot observed features count on score plot. [default: False]" name="pplotobservedfeatures" selected="False" type="boolean"/>
+		<param label="--p-no-plot-observed-features-ratio: Do not plot ratio of observed:expected features on score plot.                                   [default: False]" name="pnoplotobservedfeaturesratio" selected="False" type="boolean"/>
+		<param label="--m-metadata-column: COLUMN  MetadataColumn[Categorical] Optional sample metadata that maps observed-features sample IDs to expected-features sample IDs.  [optional]" name="mmetadatacolumn" optional="True" type="text"/>
+
+		<repeat name="input_files_mmetadatafile" optional="True" title="--m-metadata-file">
+			<param label="--m-metadata-file: Metadata file or artifact viewable as metadata. This option may be supplied multiple times to merge metadata. [optional]" name="additional_input" type="data" format="tabular,qza,no_unzip.zip" />
+		</repeat>
+
+	</inputs>
+	<outputs>
+		<data format="html" label="${tool.name} on ${on_string}: visualization.qzv" name="ovisualization"/>
+	</outputs>
+	<help><![CDATA[
+Evaluate expected vs. observed taxonomic composition of samples
+###############################################################
+
+This visualizer compares the feature composition of pairs of observed and
+expected samples containing the same sample ID in two separate feature
+tables. Typically, feature composition will consist of taxonomy
+classifications or other semicolon-delimited feature annotations. Taxon
+accuracy rate, taxon detection rate, and linear regression scores between
+expected and observed observations are calculated at each semicolon-
+delimited rank, and plots of per-level accuracy and observation
+correlations are plotted. A histogram of distance between false positive
+observations and the nearest expected feature is also generated, where
+distance equals the number of rank differences between the observed feature
+and the nearest common lineage in the expected feature. This visualizer is
+most suitable for testing per-run data quality on sequencing runs that
+contain mock communities or other samples with known composition. Also
+suitable for sanity checks of bioinformatics pipeline performance.
+
+Parameters
+----------
+expected_features : FeatureTable[RelativeFrequency]
+    Expected feature compositions
+observed_features : FeatureTable[RelativeFrequency]
+    Observed feature compositions
+depth : Int, optional
+    Maximum depth of semicolon-delimited taxonomic ranks to test (e.g., 1 =
+    root, 7 = species for the greengenes reference sequence database).
+palette : Str % Choices('Set1', 'Set2', 'Set3', 'Pastel1', 'Pastel2', 'Paired', 'Accent', 'Dark2', 'tab10', 'tab20', 'tab20b', 'tab20c', 'viridis', 'plasma', 'inferno', 'magma', 'terrain', 'rainbow'), optional
+    Color palette to utilize for plotting.
+plot_tar : Bool, optional
+    Plot taxon accuracy rate (TAR) on score plot. TAR is the number of true
+    positive features divided by the total number of observed features (TAR
+    = true positives / (true positives + false positives)).
+plot_tdr : Bool, optional
+    Plot taxon detection rate (TDR) on score plot. TDR is the number of
+    true positive features divided by the total number of expected features
+    (TDR = true positives / (true positives + false negatives)).
+plot_r_value : Bool, optional
+    Plot expected vs. observed linear regression r value on score plot.
+plot_r_squared : Bool, optional
+    Plot expected vs. observed linear regression r-squared value on score
+    plot.
+plot_bray_curtis : Bool, optional
+    Plot expected vs. observed Bray-Curtis dissimilarity scores on score
+    plot.
+plot_jaccard : Bool, optional
+    Plot expected vs. observed Jaccard distances scores on score plot.
+plot_observed_features : Bool, optional
+    Plot observed features count on score plot.
+plot_observed_features_ratio : Bool, optional
+    Plot ratio of observed:expected features on score plot.
+metadata : MetadataColumn[Categorical], optional
+    Optional sample metadata that maps observed_features sample IDs to
+    expected_features sample IDs.
+
+Returns
+-------
+visualization : Visualization
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_quality-control_evaluate-seqs.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,57 @@
+<?xml version="1.0" ?>
+<tool id="qiime_quality-control_evaluate-seqs" name="qiime quality-control evaluate-seqs" version="2019.4">
+	<description> - Compare query (observed) vs. reference (expected) sequences.</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime quality-control evaluate-seqs
+
+--i-query-sequences=$iquerysequences
+--i-reference-sequences=$ireferencesequences
+
+--o-visualization=ovisualization
+;
+qiime tools export --input-path ovisualization.qzv --output-path out   && mkdir -p '$ovisualization.files_path'
+&& cp -r out/* '$ovisualization.files_path'
+&& mv '$ovisualization.files_path/index.html' '$ovisualization';
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-query-sequences: ARTIFACT FeatureData[Sequence] Sequences to test for exclusion              [required]" name="iquerysequences" optional="False" type="data"/>
+		<param format="qza,no_unzip.zip" label="--i-reference-sequences: ARTIFACT FeatureData[Sequence] Reference sequences to align against feature sequences [required]" name="ireferencesequences" optional="False" type="data"/>
+	</inputs>
+	<outputs>
+		<data format="html" label="${tool.name} on ${on_string}: visualization.qzv" name="ovisualization"/>
+	</outputs>
+	<help><![CDATA[
+Compare query (observed) vs. reference (expected) sequences.
+############################################################
+
+This action aligns a set of query (e.g., observed) sequences against a set
+of reference (e.g., expected) sequences to evaluate the quality of
+alignment. The intended use is to align observed sequences against expected
+sequences (e.g., from a mock community) to determine the frequency of
+mismatches between observed sequences and the most similar expected
+sequences, e.g., as a measure of sequencing/method error. However, any
+sequences may be provided as input to generate a report on pairwise
+alignment quality against a set of reference sequences.
+
+Parameters
+----------
+query_sequences : FeatureData[Sequence]
+    Sequences to test for exclusion
+reference_sequences : FeatureData[Sequence]
+    Reference sequences to align against feature sequences
+show_alignments : Bool, optional
+    Option to plot pairwise alignments of query sequences and their top
+    hits.
+
+Returns
+-------
+visualization : Visualization
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_quality-control_evaluate-taxonomy.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,122 @@
+<?xml version="1.0" ?>
+<tool id="qiime_quality-control_evaluate-taxonomy" name="qiime quality-control evaluate-taxonomy" version="2019.4">
+	<description> - Evaluate expected vs. observed taxonomic assignments</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime quality-control evaluate-taxonomy
+
+--i-expected-taxa=$iexpectedtaxa
+--i-observed-taxa=$iobservedtaxa
+--p-depth="$pdepth"
+
+#if str($ifeaturetable) != 'None':
+ --i-feature-table=$ifeaturetable
+#end if
+
+#if str($ppalette) != 'None':
+ --p-palette=$ppalette
+#end if
+
+#if $pnorequireexpids:
+ --p-no-require-exp-ids
+#end if
+
+#if $pnorequireobsids:
+ --p-no-require-obs-ids
+#end if
+
+#if str($psampleid):
+ --p-sample-id="$psampleid"
+#end if
+
+--o-visualization=ovisualization
+;
+qiime tools export --input-path ovisualization.qzv --output-path out   && mkdir -p '$ovisualization.files_path'
+&& cp -r out/* '$ovisualization.files_path'
+&& mv '$ovisualization.files_path/index.html' '$ovisualization'
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-expected-taxa: ARTIFACT FeatureData[Taxonomy] Expected taxonomic assignments               [required]" name="iexpectedtaxa" optional="False" type="data"/>
+		<param format="qza,no_unzip.zip" label="--i-observed-taxa: ARTIFACT FeatureData[Taxonomy] Observed taxonomic assignments               [required]" name="iobservedtaxa" optional="False" type="data"/>
+		<param label="--p-depth: INTEGER    Maximum depth of semicolon-delimited taxonomic ranks to test (e.g., 1 = root, 7 = species for the greengenes reference sequence database).                [required]" name="pdepth" optional="False" value="" type="integer"/>
+		<param format="qza,no_unzip.zip" label="--i-feature-table: ARTIFACT FeatureTable[RelativeFrequency] Optional feature table containing relative frequency of each feature, used to weight accuracy scores by frequency. Must contain all features found in expected and/or observed taxa. Features found in the table but not the expected/observed taxa will be dropped prior to analysis.                                    [optional]" name="ifeaturetable" optional="True" type="data"/>
+		<param label="--p-palette: " name="ppalette" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="Set1">Set1</option>
+			<option value="Set2">Set2</option>
+			<option value="Set3">Set3</option>
+			<option value="Pastel1">Pastel1</option>
+			<option value="Pastel2">Pastel2</option>
+			<option value="Paired">Paired</option>
+			<option value="Accent">Accent</option>
+			<option value="Dark2">Dark2</option>
+			<option value="tab10">tab10</option>
+			<option value="tab20">tab20</option>
+			<option value="tab20b">tab20b</option>
+			<option value="tab20c">tab20c</option>
+			<option value="viridis">viridis</option>
+			<option value="plasma">plasma</option>
+			<option value="inferno">inferno</option>
+			<option value="magma">magma</option>
+			<option value="terrain">terrain</option>
+			<option value="rainbow">rainbow</option>
+		</param>
+		<param label="--p-no-require-exp-ids: Do not require that all features found in observed taxa must be found in expected taxa or raise error. [default: False]" name="pnorequireexpids" selected="False" type="boolean"/>
+		<param label="--p-no-require-obs-ids: Require that all features found in expected taxa must be found in observed taxa or raise error. [default: False]" name="pnorequireobsids" selected="False" type="boolean"/>
+		<param label="--p-sample-id: TEXT   Optional sample ID to use for extracting frequency data from feature table, and for labeling accuracy results. If no sample-id is provided, feature frequencies are derived from the sum of all samples present in the feature table.                [optional]" name="psampleid" optional="True" type="text"/>
+	</inputs>
+	<outputs>
+		<data format="html" label="${tool.name} on ${on_string}: visualization.qzv" name="ovisualization"/>
+	</outputs>
+	<help><![CDATA[
+Evaluate expected vs. observed taxonomic assignments
+####################################################
+
+This visualizer compares a pair of observed and expected taxonomic
+assignments to calculate precision, recall, and F-measure at each taxonomic
+level, up to maximum level specified by the depth parameter. These metrics
+are calculated at each semicolon-delimited rank. This action is useful for
+comparing the accuracy of taxonomic assignment, e.g., between different
+taxonomy classifiers or other bioinformatics methods. Expected taxonomies
+should be derived from simulated or mock community sequences that have
+known taxonomic affiliations.
+
+Parameters
+----------
+expected_taxa : FeatureData[Taxonomy]
+    Expected taxonomic assignments
+observed_taxa : FeatureData[Taxonomy]
+    Observed taxonomic assignments
+depth : Int
+    Maximum depth of semicolon-delimited taxonomic ranks to test (e.g., 1 =
+    root, 7 = species for the greengenes reference sequence database).
+palette : Str % Choices('Set1', 'Set2', 'Set3', 'Pastel1', 'Pastel2', 'Paired', 'Accent', 'Dark2', 'tab10', 'tab20', 'tab20b', 'tab20c', 'viridis', 'plasma', 'inferno', 'magma', 'terrain', 'rainbow'), optional
+    Color palette to utilize for plotting.
+require_exp_ids : Bool, optional
+    Require that all features found in observed taxa must be found in
+    expected taxa or raise error.
+require_obs_ids : Bool, optional
+    Require that all features found in expected taxa must be found in
+    observed taxa or raise error.
+feature_table : FeatureTable[RelativeFrequency], optional
+    Optional feature table containing relative frequency of each feature,
+    used to weight accuracy scores by frequency. Must contain all features
+    found in expected and/or observed taxa. Features found in the table but
+    not the expected/observed taxa will be dropped prior to analysis.
+sample_id : Str, optional
+    Optional sample ID to use for extracting frequency data from feature
+    table, and for labeling accuracy results. If no sample_id is provided,
+    feature frequencies are derived from the sum of all samples present in
+    the feature table.
+
+Returns
+-------
+visualization : Visualization
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_quality-control_exclude-seqs.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,103 @@
+<?xml version="1.0" ?>
+<tool id="qiime_quality-control_exclude-seqs" name="qiime quality-control exclude-seqs" version="2019.4">
+	<description> - Exclude sequences by alignment</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime quality-control exclude-seqs
+
+--i-query-sequences=$iquerysequences
+--i-reference-sequences=$ireferencesequences
+
+#if str($pmethod) != 'None':
+ --p-method=$pmethod
+#end if
+
+#if $ppercidentity:
+ --p-perc-identity=$ppercidentity
+#end if
+
+#if str($pevalue):
+ --p-evalue="$pevalue"
+#end if
+
+#if $ppercqueryaligned:
+ --p-perc-query-aligned=$ppercqueryaligned
+#end if
+
+#set $pthreads = '${GALAXY_SLOTS:-4}'
+#if str($pthreads):
+ --p-threads="$pthreads"
+#end if
+
+--o-sequence-hits=osequencehits
+--o-sequence-misses=osequencemisses
+;
+cp osequencehits.qza $osequencehits;
+cp osequencemisses.qza $osequencemisses
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-query-sequences: ARTIFACT FeatureData[Sequence] Sequences to test for exclusion              [required]" name="iquerysequences" optional="False" type="data"/>
+		<param format="qza,no_unzip.zip" label="--i-reference-sequences: ARTIFACT FeatureData[Sequence] Reference sequences to align against feature sequences [required]" name="ireferencesequences" optional="False" type="data"/>
+		<param label="--p-method: " name="pmethod" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="blast">blast</option>
+			<option value="vsearch">vsearch</option>
+			<option value="blastn-short">blastn-short</option>
+		</param>
+		<param label="--p-perc-identity: PROPORTION Range(0.0, 1.0, inclusive_end=True) Reject match if percent identity to reference is lower. Must be in range [0.0, 1.0]      [default: 0.97]" name="ppercidentity" optional="True" type="float" value="0.97" min="0" max="1" exclusive_end="False"/>
+		<param label="--p-evalue: NUMBER    BLAST expectation (E) value threshold for saving hits. Reject if E value is higher than threshold. This threshold is disabled by default.            [optional]" name="pevalue" optional="True" type="text"/>
+		<param label="--p-perc-query-aligned: NUMBER Percent of query sequence that must align to reference in order to be accepted as a hit.       [default: 0.97]" name="ppercqueryaligned" optional="True" type="float" value="0.97"/>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: sequencehits.qza" name="osequencehits"/>
+		<data format="qza" label="${tool.name} on ${on_string}: sequencemisses.qza" name="osequencemisses"/>
+	</outputs>
+	<help><![CDATA[
+Exclude sequences by alignment
+##############################
+
+This method aligns feature sequences to a set of reference sequences to
+identify sequences that hit/miss the reference within a specified
+perc_identity, evalue, and perc_query_aligned. This method could be used to
+define a positive filter, e.g., extract only feature sequences that align
+to a certain clade of bacteria; or to define a negative filter, e.g.,
+identify sequences that align to contaminant or human DNA sequences that
+should be excluded from subsequent analyses. Note that filtering is
+performed based on the perc_identity, perc_query_aligned, and evalue
+thresholds (the latter only if method==BLAST and an evalue is set). Set
+perc_identity==0 and/or perc_query_aligned==0 to disable these filtering
+thresholds as necessary.
+
+Parameters
+----------
+query_sequences : FeatureData[Sequence]
+    Sequences to test for exclusion
+reference_sequences : FeatureData[Sequence]
+    Reference sequences to align against feature sequences
+method : Str % Choices('blast', 'vsearch', 'blastn-short'), optional
+    Alignment method to use for matching feature sequences against
+    reference sequences
+perc_identity : Float % Range(0.0, 1.0, inclusive_end=True), optional
+    Reject match if percent identity to reference is lower. Must be in
+    range [0.0, 1.0]
+evalue : Float, optional
+    BLAST expectation (E) value threshold for saving hits. Reject if E
+    value is higher than threshold. This threshold is disabled by default.
+perc_query_aligned : Float, optional
+    Percent of query sequence that must align to reference in order to be
+    accepted as a hit.
+
+Returns
+-------
+sequence_hits : FeatureData[Sequence]
+    Subset of feature sequences that align to reference sequences
+sequence_misses : FeatureData[Sequence]
+    Subset of feature sequences that do not align to reference sequences
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_quality-filter_q-score-joined.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,81 @@
+<?xml version="1.0" ?>
+<tool id="qiime_quality-filter_q-score-joined" name="qiime quality-filter q-score-joined" version="2019.4">
+	<description> - Quality filter based on joined sequence quality scores.</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime quality-filter q-score-joined
+
+--i-demux=$idemux
+
+#if $pminquality:
+ --p-min-quality=$pminquality
+#end if
+
+#if $pqualitywindow:
+ --p-quality-window=$pqualitywindow
+#end if
+
+#if $pminlengthfraction:
+ --p-min-length-fraction=$pminlengthfraction
+#end if
+
+#if $pmaxambiguous:
+ --p-max-ambiguous=$pmaxambiguous
+#end if
+
+--o-filtered-sequences=ofilteredsequences
+--o-filter-stats=ofilterstats
+;
+cp ofilteredsequences.qza $ofilteredsequences;
+cp ofilterstats.qza $ofilterstats
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-demux: ARTIFACT SampleData[JoinedSequencesWithQuality] The demultiplexed sequence data to be quality filtered.                                    [required]" name="idemux" optional="False" type="data"/>
+		<param label="--p-min-quality: INTEGER The minimum acceptable PHRED score. All PHRED scores less that this value are considered to be low PHRED scores.                                    [default: 4]" name="pminquality" optional="True" type="integer" value="4"/>
+		<param label="--p-quality-window: INTEGER The maximum number of low PHRED scores that can be observed in direct succession before truncating a sequence read.                             [default: 3]" name="pqualitywindow" optional="True" type="integer" value="3"/>
+		<param label="--p-min-length-fraction: NUMBER The minimum length that a sequence read can be following truncation and still be retained. This length should be provided as a fraction of the input sequence length.                                 [default: 0.75]" name="pminlengthfraction" optional="True" type="float" value="0.75"/>
+		<param label="--p-max-ambiguous: INTEGER The maximum number of ambiguous (i.e., N) base calls. This is applied after trimming sequences based on `min-length-fraction`.                     [default: 0]" name="pmaxambiguous" optional="True" type="integer" value="0"/>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: filteredsequences.qza" name="ofilteredsequences"/>
+		<data format="qza" label="${tool.name} on ${on_string}: filterstats.qza" name="ofilterstats"/>
+	</outputs>
+	<help><![CDATA[
+Quality filter based on joined sequence quality scores.
+#######################################################
+
+This method filters joined sequence based on quality scores and the
+presence of ambiguous base calls.
+
+Parameters
+----------
+demux : SampleData[JoinedSequencesWithQuality]
+    The demultiplexed sequence data to be quality filtered.
+min_quality : Int, optional
+    The minimum acceptable PHRED score. All PHRED scores less that this
+    value are considered to be low PHRED scores.
+quality_window : Int, optional
+    The maximum number of low PHRED scores that can be observed in direct
+    succession before truncating a sequence read.
+min_length_fraction : Float, optional
+    The minimum length that a sequence read can be following truncation and
+    still be retained. This length should be provided as a fraction of the
+    input sequence length.
+max_ambiguous : Int, optional
+    The maximum number of ambiguous (i.e., N) base calls. This is applied
+    after trimming sequences based on `min_length_fraction`.
+
+Returns
+-------
+filtered_sequences : SampleData[JoinedSequencesWithQuality]
+    The resulting quality-filtered sequences.
+filter_stats : QualityFilterStats
+    Summary statistics of the filtering process.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_quality-filter_q-score.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,81 @@
+<?xml version="1.0" ?>
+<tool id="qiime_quality-filter_q-score" name="qiime quality-filter q-score" version="2019.4">
+	<description> - Quality filter based on sequence quality scores.</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime quality-filter q-score
+
+--i-demux=$idemux
+
+#if $pminquality:
+ --p-min-quality=$pminquality
+#end if
+
+#if $pqualitywindow:
+ --p-quality-window=$pqualitywindow
+#end if
+
+#if $pminlengthfraction:
+ --p-min-length-fraction=$pminlengthfraction
+#end if
+
+#if $pmaxambiguous:
+ --p-max-ambiguous=$pmaxambiguous
+#end if
+
+--o-filtered-sequences=ofilteredsequences
+--o-filter-stats=ofilterstats
+;
+cp ofilteredsequences.qza $ofilteredsequences;
+cp ofilterstats.qza $ofilterstats
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-demux: ARTIFACT SampleData[SequencesWithQuality | PairedEndSequencesWithQuality] The demultiplexed sequence data to be quality filtered.                                    [required]" name="idemux" optional="False" type="data"/>
+		<param label="--p-min-quality: INTEGER The minimum acceptable PHRED score. All PHRED scores less that this value are considered to be low PHRED scores.                                    [default: 4]" name="pminquality" optional="True" type="integer" value="4"/>
+		<param label="--p-quality-window: INTEGER The maximum number of low PHRED scores that can be observed in direct succession before truncating a sequence read.                             [default: 3]" name="pqualitywindow" optional="True" type="integer" value="3"/>
+		<param label="--p-min-length-fraction: NUMBER The minimum length that a sequence read can be following truncation and still be retained. This length should be provided as a fraction of the input sequence length.                                 [default: 0.75]" name="pminlengthfraction" optional="True" type="float" value="0.75"/>
+		<param label="--p-max-ambiguous: INTEGER The maximum number of ambiguous (i.e., N) base calls. This is applied after trimming sequences based on `min-length-fraction`.                     [default: 0]" name="pmaxambiguous" optional="True" type="integer" value="0"/>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: filteredsequences.qza" name="ofilteredsequences"/>
+		<data format="qza" label="${tool.name} on ${on_string}: filterstats.qza" name="ofilterstats"/>
+	</outputs>
+	<help><![CDATA[
+Quality filter based on sequence quality scores.
+################################################
+
+This method filters sequence based on quality scores and the presence of
+ambiguous base calls.
+
+Parameters
+----------
+demux : SampleData[SequencesWithQuality | PairedEndSequencesWithQuality]
+    The demultiplexed sequence data to be quality filtered.
+min_quality : Int, optional
+    The minimum acceptable PHRED score. All PHRED scores less that this
+    value are considered to be low PHRED scores.
+quality_window : Int, optional
+    The maximum number of low PHRED scores that can be observed in direct
+    succession before truncating a sequence read.
+min_length_fraction : Float, optional
+    The minimum length that a sequence read can be following truncation and
+    still be retained. This length should be provided as a fraction of the
+    input sequence length.
+max_ambiguous : Int, optional
+    The maximum number of ambiguous (i.e., N) base calls. This is applied
+    after trimming sequences based on `min_length_fraction`.
+
+Returns
+-------
+filtered_sequences : SampleData[SequencesWithQuality]
+    The resulting quality-filtered sequences.
+filter_stats : QualityFilterStats
+    Summary statistics of the filtering process.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_sample-classifier_classify-samples-from-dist.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,118 @@
+<?xml version="1.0" ?>
+<tool id="qiime_sample-classifier_classify-samples-from-dist" name="qiime sample-classifier classify-samples-from-dist" version="2019.4">
+	<description> - Run k-nearest-neighbors on a labeled distance matrix.</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime sample-classifier classify-samples-from-dist
+
+--i-distance-matrix=$idistancematrix
+--m-metadata-column="$mmetadatacolumn"
+
+#if $pk:
+ --p-k=$pk
+#end if
+
+#if str($ppalette) != 'None':
+ --p-palette=$ppalette
+#end if
+
+
+#if $input_files_mmetadatafile:
+#def list_dict_to_string(list_dict):
+	#set $file_list = list_dict[0]['additional_input'].__getattr__('file_name')
+	#for d in list_dict[1:]:
+		#set $file_list = $file_list + ' --m-metadata-file=' + d['additional_input'].__getattr__('file_name')
+	#end for
+	#return $file_list
+#end def
+ --m-metadata-file=$list_dict_to_string($input_files_mmetadatafile)
+#end if
+
+
+--o-predictions=opredictions
+--o-accuracy-results=oaccuracyresults
+;
+cp opredictions.qza $opredictions;
+qiime tools export --input-path oaccuracyresults.qzv --output-path out   && mkdir -p '$oaccuracyresults.files_path'
+&& cp -r out/* '$oaccuracyresults.files_path'
+&& mv '$oaccuracyresults.files_path/index.html' '$oaccuracyresults'
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-distance-matrix: ARTIFACT DistanceMatrix     a distance matrix                            [required]" name="idistancematrix" optional="False" type="data"/>
+		<param label="--m-metadata-column: COLUMN  MetadataColumn[Categorical] Categorical metadata column to use as prediction target.                                      [required]" name="mmetadatacolumn" optional="False" type="text"/>
+		<param label="--p-k: INTEGER        Number of nearest neighbors                [default: 1]" name="pk" optional="True" type="integer" value="1"/>
+		<param label="--p-palette: " name="ppalette" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="YellowOrangeBrown">YellowOrangeBrown</option>
+			<option value="YellowOrangeRed">YellowOrangeRed</option>
+			<option value="OrangeRed">OrangeRed</option>
+			<option value="PurpleRed">PurpleRed</option>
+			<option value="RedPurple">RedPurple</option>
+			<option value="BluePurple">BluePurple</option>
+			<option value="GreenBlue">GreenBlue</option>
+			<option value="PurpleBlue">PurpleBlue</option>
+			<option value="YellowGreen">YellowGreen</option>
+			<option value="summer">summer</option>
+			<option value="copper">copper</option>
+			<option value="viridis">viridis</option>
+			<option value="plasma">plasma</option>
+			<option value="inferno">inferno</option>
+			<option value="magma">magma</option>
+			<option value="sirocco">sirocco</option>
+			<option value="drifting">drifting</option>
+			<option value="melancholy">melancholy</option>
+			<option value="enigma">enigma</option>
+			<option value="eros">eros</option>
+			<option value="spectre">spectre</option>
+			<option value="ambition">ambition</option>
+			<option value="mysteriousstains">mysteriousstains</option>
+			<option value="daydream">daydream</option>
+			<option value="solano">solano</option>
+			<option value="navarro">navarro</option>
+			<option value="dandelions">dandelions</option>
+			<option value="deepblue">deepblue</option>
+			<option value="verve">verve</option>
+			<option value="greyscale">greyscale</option>
+		</param>
+
+		<repeat name="input_files_mmetadatafile" optional="True" title="--m-metadata-file">
+			<param label="--m-metadata-file: Metadata file or artifact viewable as metadata. This option may be supplied multiple times to merge metadata. [optional]" name="additional_input" type="data" format="tabular,qza,no_unzip.zip" />
+		</repeat>
+
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: predictions.qza" name="opredictions"/>
+		<data format="html" label="${tool.name} on ${on_string}: accuracyresults.qzv" name="oaccuracyresults"/>
+	</outputs>
+	<help><![CDATA[
+Run k-nearest-neighbors on a labeled distance matrix.
+#####################################################
+
+Run k-nearest-neighbors on a labeled distance matrix. Return cross-
+validated (leave one out) predictions and  accuracy. k = 1 by default
+
+Parameters
+----------
+distance_matrix : DistanceMatrix
+    a distance matrix
+metadata : MetadataColumn[Categorical]
+    Categorical metadata column to use as prediction target.
+k : Int, optional
+    Number of nearest neighbors
+palette : Str % Choices('YellowOrangeBrown', 'YellowOrangeRed', 'OrangeRed', 'PurpleRed', 'RedPurple', 'BluePurple', 'GreenBlue', 'PurpleBlue', 'YellowGreen', 'summer', 'copper', 'viridis', 'plasma', 'inferno', 'magma', 'sirocco', 'drifting', 'melancholy', 'enigma', 'eros', 'spectre', 'ambition', 'mysteriousstains', 'daydream', 'solano', 'navarro', 'dandelions', 'deepblue', 'verve', 'greyscale'), optional
+    The color palette to use for plotting.
+
+Returns
+-------
+predictions : SampleData[ClassifierPredictions]
+    leave one out predictions for each sample
+accuracy_results : Visualization
+    Accuracy results visualization.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_sample-classifier_classify-samples-ncv.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,140 @@
+<?xml version="1.0" ?>
+<tool id="qiime_sample-classifier_classify-samples-ncv" name="qiime sample-classifier classify-samples-ncv" version="2019.4">
+	<description> - Nested cross-validated supervised learning classifier.</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime sample-classifier classify-samples-ncv
+
+--i-table=$itable
+--m-metadata-column="$mmetadatacolumn"
+
+#if $input_files_mmetadatafile:
+#def list_dict_to_string(list_dict):
+	#set $file_list = list_dict[0]['additional_input'].__getattr__('file_name')
+	#for d in list_dict[1:]:
+		#set $file_list = $file_list + ' --m-metadata-file=' + d['additional_input'].__getattr__('file_name')
+	#end for
+	#return $file_list
+#end def
+ --m-metadata-file=$list_dict_to_string($input_files_mmetadatafile)
+#end if
+
+#if $pcv:
+ --p-cv=$pcv
+#end if
+
+#if str($prandomstate):
+ --p-random-state="$prandomstate"
+#end if
+
+#set $pnjobs = '${GALAXY_SLOTS:-4}'
+
+#if str($pnjobs):
+ --p-n-jobs="$pnjobs"
+#end if
+
+
+#if $pnestimators:
+ --p-n-estimators=$pnestimators
+#end if
+
+#if str($pestimator) != 'None':
+ --p-estimator=$pestimator
+#end if
+
+#if $pparametertuning:
+ --p-parameter-tuning
+#end if
+
+#if str($pmissingsamples) != 'None':
+ --p-missing-samples=$pmissingsamples
+#end if
+
+--o-predictions=opredictions
+--o-feature-importance=ofeatureimportance
+;
+cp opredictions.qza $opredictions;
+cp ofeatureimportance.qza $ofeatureimportance
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-table: ARTIFACT FeatureTable[Frequency] Feature table containing all features that should be used for target prediction.                  [required]" name="itable" optional="False" type="data"/>
+		<param label="--m-metadata-column: COLUMN  MetadataColumn[Categorical] Categorical metadata column to use as prediction target.                                      [required]" name="mmetadatacolumn" optional="False" type="text"/>
+		<param label="--p-cv: INTEGER       Number of k-fold cross-validations to perform. Range(1, None)                                                [default: 5]" name="pcv" optional="True" type="integer" value="5" min="1"/>
+		<param label="--p-random-state: INTEGER Seed used by random number generator.        [optional]" name="prandomstate" optional="True" type="integer"/>
+		<param label="--p-n-estimators: INTEGER Range(1, None)     Number of trees to grow for estimation. More trees will improve predictive accuracy up to a threshold level, but will also increase time and memory requirements. This parameter only affects ensemble estimators, such as Random Forest, AdaBoost, ExtraTrees, and GradientBoosting.        [default: 100]" name="pnestimators" optional="True" type="integer" value="100" min="1"/>
+		<param label="--p-estimator: " name="pestimator" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="RandomForestClassifier">RandomForestClassifier</option>
+			<option value="ExtraTreesClassifier">ExtraTreesClassifier</option>
+			<option value="GradientBoostingClassifier">GradientBoostingClassifier</option>
+			<option value="AdaBoostClassifier">AdaBoostClassifier</option>
+			<option value="KNeighborsClassifier">KNeighborsClassifier</option>
+			<option value="LinearSVC">LinearSVC</option>
+			<option value="SVC">SVC</option>
+		</param>
+		<param label="--p-parameter-tuning: --p-no-parameter-tuning Automatically tune hyperparameters using random grid search.                                [default: False]" name="pparametertuning" selected="False" type="boolean"/>
+		<param label="--p-missing-samples: " name="pmissingsamples" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="error">error</option>
+			<option value="ignore">ignore</option>
+		</param>
+
+		<repeat name="input_files_mmetadatafile" optional="True" title="--m-metadata-file">
+			<param label="--m-metadata-file: Metadata file or artifact viewable as metadata. This option may be supplied multiple times to merge metadata. [optional]" name="additional_input" type="data" format="tabular,qza,no_unzip.zip" />
+		</repeat>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: predictions.qza" name="opredictions"/>
+		<data format="qza" label="${tool.name} on ${on_string}: featureimportance.qza" name="ofeatureimportance"/>
+	</outputs>
+	<help><![CDATA[
+Nested cross-validated supervised learning classifier.
+######################################################
+
+Predicts a categorical sample metadata column using a supervised learning
+classifier. Uses nested stratified k-fold cross validation for automated
+hyperparameter optimization and sample prediction. Outputs predicted values
+for each input sample, and relative importance of each feature for model
+accuracy.
+
+Parameters
+----------
+table : FeatureTable[Frequency]
+    Feature table containing all features that should be used for target
+    prediction.
+metadata : MetadataColumn[Categorical]
+    Categorical metadata column to use as prediction target.
+cv : Int % Range(1, None), optional
+    Number of k-fold cross-validations to perform.
+random_state : Int, optional
+    Seed used by random number generator.
+n_estimators : Int % Range(1, None), optional
+    Number of trees to grow for estimation. More trees will improve
+    predictive accuracy up to a threshold level, but will also increase
+    time and memory requirements. This parameter only affects ensemble
+    estimators, such as Random Forest, AdaBoost, ExtraTrees, and
+    GradientBoosting.
+estimator : Str % Choices('RandomForestClassifier', 'ExtraTreesClassifier', 'GradientBoostingClassifier', 'AdaBoostClassifier', 'KNeighborsClassifier', 'LinearSVC', 'SVC'), optional
+    Estimator method to use for sample prediction.
+parameter_tuning : Bool, optional
+    Automatically tune hyperparameters using random grid search.
+missing_samples : Str % Choices('error', 'ignore'), optional
+    How to handle missing samples in metadata. "error" will fail if missing
+    samples are detected. "ignore" will cause the feature table and
+    metadata to be filtered, so that only samples found in both files are
+    retained.
+
+Returns
+-------
+predictions : SampleData[ClassifierPredictions]
+    Predicted target values for each input sample.
+feature_importance : FeatureData[Importance]
+    Importance of each input feature to model accuracy.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_sample-classifier_classify-samples.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,229 @@
+<?xml version="1.0" ?>
+<tool id="qiime_sample-classifier_classify-samples" name="qiime sample-classifier classify-samples" version="2019.4">
+	<description> - Train and test a cross-validated supervised learning classifier.</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime sample-classifier classify-samples
+
+--i-table=$itable
+--m-metadata-column="$mmetadatacolumn"
+
+#if $ptestsize:
+ --p-test-size=$ptestsize
+#end if
+
+#if $pstep:
+ --p-step=$pstep
+#end if
+
+#if $pcv:
+ --p-cv=$pcv
+#end if
+
+#if str($prandomstate):
+ --p-random-state="$prandomstate"
+#end if
+
+#set $pnjobs = '${GALAXY_SLOTS:-4}'
+
+#if str($pnjobs):
+ --p-n-jobs="$pnjobs"
+#end if
+
+
+#if $pnestimators:
+ --p-n-estimators=$pnestimators
+#end if
+
+#if str($pestimator) != 'None':
+ --p-estimator=$pestimator
+#end if
+
+#if $poptimizefeatureselection:
+ --p-optimize-feature-selection
+#end if
+
+#if $pparametertuning:
+ --p-parameter-tuning
+#end if
+
+#if str($ppalette) != 'None':
+ --p-palette=$ppalette
+#end if
+
+#if str($pmissingsamples) != 'None':
+ --p-missing-samples=$pmissingsamples
+#end if
+
+
+#if $input_files_mmetadatafile:
+#def list_dict_to_string(list_dict):
+	#set $file_list = list_dict[0]['additional_input'].__getattr__('file_name')
+	#for d in list_dict[1:]:
+		#set $file_list = $file_list + ' --m-metadata-file=' + d['additional_input'].__getattr__('file_name')
+	#end for
+	#return $file_list
+#end def
+ --m-metadata-file=$list_dict_to_string($input_files_mmetadatafile)
+#end if
+
+
+--o-sample-estimator=osampleestimator
+--o-feature-importance=ofeatureimportance
+--o-predictions=opredictions
+--o-model-summary=omodelsummary
+--o-accuracy-results=oaccuracyresults
+;
+cp osampleestimator.qza $osampleestimator;
+cp ofeatureimportance.qza $ofeatureimportance;
+cp opredictions.qza $opredictions;
+qiime tools export --input-path omodelsummary.qzv --output-path out   && mkdir -p '$omodelsummary.files_path'
+&& cp -r out/* '$omodelsummary.files_path'
+&& mv '$omodelsummary.files_path/index.html' '$omodelsummary';
+qiime tools export --input-path oaccuracyresults.qzv --output-path out   && mkdir -p '$oaccuracyresults.files_path'
+&& cp -r out/* '$oaccuracyresults.files_path'
+&& mv '$oaccuracyresults.files_path/index.html' '$oaccuracyresults'
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-table: ARTIFACT FeatureTable[Frequency] Feature table containing all features that should be used for target prediction.                  [required]" name="itable" optional="False" type="data"/>
+		<param label="--m-metadata-column: COLUMN  MetadataColumn[Categorical] Categorical metadata column to use as prediction target.                                      [required]" name="mmetadatacolumn" optional="False" type="text"/>
+		<param label="--p-test-size: PROPORTION Range(0.0, 1.0, inclusive_start=False) Fraction of input samples to exclude from training set and use for classifier testing.          [default: 0.2]" name="ptestsize" optional="True" type="float" value="0.2" min="0" max="1" exclusive_start="True"/>
+		<param label="--p-step: PROPORTION Range(0.0, 1.0, inclusive_start=False) If optimize-feature-selection is True, step is the percentage of features to remove at each iteration. [default: 0.05]" name="pstep" optional="True" type="float" value="0.05" min="0" max="1" exclusive_start="True"/>
+		<param label="--p-cv: INTEGER       Number of k-fold cross-validations to perform. Range(1, None)                                                [default: 5]" name="pcv" optional="True" type="integer" value="5" min="1"/>
+		<param label="--p-random-state: INTEGER Seed used by random number generator.        [optional]" name="prandomstate" optional="True" type="integer"/>
+		<param label="--p-n-estimators: INTEGER Range(1, None)     Number of trees to grow for estimation. More trees will improve predictive accuracy up to a threshold level, but will also increase time and memory requirements. This parameter only affects ensemble estimators, such as Random Forest, AdaBoost, ExtraTrees, and GradientBoosting.        [default: 100]" name="pnestimators" optional="True" type="integer" value="100" min="1"/>
+		<param label="--p-estimator: " name="pestimator" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="RandomForestClassifier">RandomForestClassifier</option>
+			<option value="ExtraTreesClassifier">ExtraTreesClassifier</option>
+			<option value="GradientBoostingClassifier">GradientBoostingClassifier</option>
+			<option value="AdaBoostClassifier">AdaBoostClassifier</option>
+			<option value="KNeighborsClassifier">KNeighborsClassifier</option>
+			<option value="LinearSVC">LinearSVC</option>
+			<option value="SVC">SVC</option>
+		</param>
+		<param label="--p-optimize-feature-selection: --p-no-optimize-feature-selection Automatically optimize input feature selection using recursive feature elimination.         [default: False]" name="poptimizefeatureselection" selected="False" type="boolean"/>
+		<param label="--p-parameter-tuning: --p-no-parameter-tuning Automatically tune hyperparameters using random grid search.                                [default: False]" name="pparametertuning" selected="False" type="boolean"/>
+		<param label="--p-palette: " name="ppalette" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="YellowOrangeBrown">YellowOrangeBrown</option>
+			<option value="YellowOrangeRed">YellowOrangeRed</option>
+			<option value="OrangeRed">OrangeRed</option>
+			<option value="PurpleRed">PurpleRed</option>
+			<option value="RedPurple">RedPurple</option>
+			<option value="BluePurple">BluePurple</option>
+			<option value="GreenBlue">GreenBlue</option>
+			<option value="PurpleBlue">PurpleBlue</option>
+			<option value="YellowGreen">YellowGreen</option>
+			<option value="summer">summer</option>
+			<option value="copper">copper</option>
+			<option value="viridis">viridis</option>
+			<option value="plasma">plasma</option>
+			<option value="inferno">inferno</option>
+			<option value="magma">magma</option>
+			<option value="sirocco">sirocco</option>
+			<option value="drifting">drifting</option>
+			<option value="melancholy">melancholy</option>
+			<option value="enigma">enigma</option>
+			<option value="eros">eros</option>
+			<option value="spectre">spectre</option>
+			<option value="ambition">ambition</option>
+			<option value="mysteriousstains">mysteriousstains</option>
+			<option value="daydream">daydream</option>
+			<option value="solano">solano</option>
+			<option value="navarro">navarro</option>
+			<option value="dandelions">dandelions</option>
+			<option value="deepblue">deepblue</option>
+			<option value="verve">verve</option>
+			<option value="greyscale">greyscale</option>
+		</param>
+		<param label="--p-missing-samples: " name="pmissingsamples" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="error">error</option>
+			<option value="ignore">ignore</option>
+		</param>
+
+		<repeat name="input_files_mmetadatafile" optional="True" title="--m-metadata-file">
+			<param label="--m-metadata-file: Metadata file or artifact viewable as metadata. This option may be supplied multiple times to merge metadata. [optional]" name="additional_input" type="data" format="tabular,qza,no_unzip.zip" />
+		</repeat>
+
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: sampleestimator.qza" name="osampleestimator"/>
+		<data format="qza" label="${tool.name} on ${on_string}: featureimportance.qza" name="ofeatureimportance"/>
+		<data format="qza" label="${tool.name} on ${on_string}: predictions.qza" name="opredictions"/>
+		<data format="html" label="${tool.name} on ${on_string}: modelsummary.qzv" name="omodelsummary"/>
+		<data format="html" label="${tool.name} on ${on_string}: accuracyresults.qzv" name="oaccuracyresults"/>
+	</outputs>
+	<help><![CDATA[
+Train and test a cross-validated supervised learning classifier.
+################################################################
+
+Predicts a categorical sample metadata column using a supervised learning
+classifier. Splits input data into training and test sets. The training set
+is used to train and test the estimator using a stratified k-fold cross-
+validation scheme. This includes optional steps for automated feature
+extraction and hyperparameter optimization. The test set validates
+classification accuracy of the optimized estimator. Outputs classification
+results for test set. For more details on the learning algorithm, see
+http://scikit-learn.org/stable/supervised_learning.html
+
+Parameters
+----------
+table : FeatureTable[Frequency]
+    Feature table containing all features that should be used for target
+    prediction.
+metadata : MetadataColumn[Categorical]
+    Categorical metadata column to use as prediction target.
+test_size : Float % Range(0.0, 1.0, inclusive_start=False), optional
+    Fraction of input samples to exclude from training set and use for
+    classifier testing.
+step : Float % Range(0.0, 1.0, inclusive_start=False), optional
+    If optimize_feature_selection is True, step is the percentage of
+    features to remove at each iteration.
+cv : Int % Range(1, None), optional
+    Number of k-fold cross-validations to perform.
+random_state : Int, optional
+    Seed used by random number generator.
+n_estimators : Int % Range(1, None), optional
+    Number of trees to grow for estimation. More trees will improve
+    predictive accuracy up to a threshold level, but will also increase
+    time and memory requirements. This parameter only affects ensemble
+    estimators, such as Random Forest, AdaBoost, ExtraTrees, and
+    GradientBoosting.
+estimator : Str % Choices('RandomForestClassifier', 'ExtraTreesClassifier', 'GradientBoostingClassifier', 'AdaBoostClassifier', 'KNeighborsClassifier', 'LinearSVC', 'SVC'), optional
+    Estimator method to use for sample prediction.
+optimize_feature_selection : Bool, optional
+    Automatically optimize input feature selection using recursive feature
+    elimination.
+parameter_tuning : Bool, optional
+    Automatically tune hyperparameters using random grid search.
+palette : Str % Choices('YellowOrangeBrown', 'YellowOrangeRed', 'OrangeRed', 'PurpleRed', 'RedPurple', 'BluePurple', 'GreenBlue', 'PurpleBlue', 'YellowGreen', 'summer', 'copper', 'viridis', 'plasma', 'inferno', 'magma', 'sirocco', 'drifting', 'melancholy', 'enigma', 'eros', 'spectre', 'ambition', 'mysteriousstains', 'daydream', 'solano', 'navarro', 'dandelions', 'deepblue', 'verve', 'greyscale'), optional
+    The color palette to use for plotting.
+missing_samples : Str % Choices('error', 'ignore'), optional
+    How to handle missing samples in metadata. "error" will fail if missing
+    samples are detected. "ignore" will cause the feature table and
+    metadata to be filtered, so that only samples found in both files are
+    retained.
+
+Returns
+-------
+sample_estimator : SampleEstimator[Classifier]
+    Trained sample estimator.
+feature_importance : FeatureData[Importance]
+    Importance of each input feature to model accuracy.
+predictions : SampleData[ClassifierPredictions]
+    Predicted target values for each input sample.
+model_summary : Visualization
+    Summarized parameter and (if enabled) feature selection information for
+    the trained estimator.
+accuracy_results : Visualization
+    Accuracy results visualization.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_sample-classifier_confusion-matrix.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,105 @@
+<?xml version="1.0" ?>
+<tool id="qiime_sample-classifier_confusion-matrix" name="qiime sample-classifier confusion-matrix" version="2019.4">
+	<description> - Make a confusion matrix from sample classifier predictions.</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime sample-classifier confusion-matrix
+
+--i-predictions=$ipredictions
+--m-truth-column="$mtruthcolumn"
+--m-truth-file=mtruthfile
+
+#if str($pmissingsamples) != 'None':
+ --p-missing-samples=$pmissingsamples
+#end if
+
+#if str($ppalette) != 'None':
+ --p-palette=$ppalette
+#end if
+
+--o-visualization=ovisualization
+;
+qiime tools export --input-path ovisualization.qzv --output-path out   && mkdir -p '$ovisualization.files_path'
+&& cp -r out/* '$ovisualization.files_path'
+&& mv '$ovisualization.files_path/index.html' '$ovisualization';
+cp mtruthfile.qza $mtruthfile
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-predictions: ARTIFACT SampleData[ClassifierPredictions] Predicted values to plot on x axis. Should be predictions of categorical data produced by a sample classifier.                                  [required]" name="ipredictions" optional="False" type="data"/>
+		<param label="--m-truth-column: COLUMN  MetadataColumn[Categorical] Metadata column (true values) to plot on y axis. [required]" name="mtruthcolumn" optional="False" type="text"/>
+		<param label="--p-missing-samples: " name="pmissingsamples" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="error">error</option>
+			<option value="ignore">ignore</option>
+		</param>
+		<param label="--p-palette: " name="ppalette" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="YellowOrangeBrown">YellowOrangeBrown</option>
+			<option value="YellowOrangeRed">YellowOrangeRed</option>
+			<option value="OrangeRed">OrangeRed</option>
+			<option value="PurpleRed">PurpleRed</option>
+			<option value="RedPurple">RedPurple</option>
+			<option value="BluePurple">BluePurple</option>
+			<option value="GreenBlue">GreenBlue</option>
+			<option value="PurpleBlue">PurpleBlue</option>
+			<option value="YellowGreen">YellowGreen</option>
+			<option value="summer">summer</option>
+			<option value="copper">copper</option>
+			<option value="viridis">viridis</option>
+			<option value="plasma">plasma</option>
+			<option value="inferno">inferno</option>
+			<option value="magma">magma</option>
+			<option value="sirocco">sirocco</option>
+			<option value="drifting">drifting</option>
+			<option value="melancholy">melancholy</option>
+			<option value="enigma">enigma</option>
+			<option value="eros">eros</option>
+			<option value="spectre">spectre</option>
+			<option value="ambition">ambition</option>
+			<option value="mysteriousstains">mysteriousstains</option>
+			<option value="daydream">daydream</option>
+			<option value="solano">solano</option>
+			<option value="navarro">navarro</option>
+			<option value="dandelions">dandelions</option>
+			<option value="deepblue">deepblue</option>
+			<option value="verve">verve</option>
+			<option value="greyscale">greyscale</option>
+		</param>
+	</inputs>
+	<outputs>
+		<data format="html" label="${tool.name} on ${on_string}: visualization.qzv" name="ovisualization"/>
+		<data format="qza" label="${tool.name} on ${on_string}: truthfile.qza" name="mtruthfile"/>
+	</outputs>
+	<help><![CDATA[
+Make a confusion matrix from sample classifier predictions.
+###########################################################
+
+Make a confusion matrix and calculate accuracy of predicted vs. true values
+for a set of samples classified using a sample classifier.
+
+Parameters
+----------
+predictions : SampleData[ClassifierPredictions]
+    Predicted values to plot on x axis. Should be predictions of
+    categorical data produced by a sample classifier.
+truth : MetadataColumn[Categorical]
+    Metadata column (true values) to plot on y axis.
+missing_samples : Str % Choices('error', 'ignore'), optional
+    How to handle missing samples in metadata. "error" will fail if missing
+    samples are detected. "ignore" will cause the feature table and
+    metadata to be filtered, so that only samples found in both files are
+    retained.
+palette : Str % Choices('YellowOrangeBrown', 'YellowOrangeRed', 'OrangeRed', 'PurpleRed', 'RedPurple', 'BluePurple', 'GreenBlue', 'PurpleBlue', 'YellowGreen', 'summer', 'copper', 'viridis', 'plasma', 'inferno', 'magma', 'sirocco', 'drifting', 'melancholy', 'enigma', 'eros', 'spectre', 'ambition', 'mysteriousstains', 'daydream', 'solano', 'navarro', 'dandelions', 'deepblue', 'verve', 'greyscale'), optional
+    The color palette to use for plotting.
+
+Returns
+-------
+visualization : Visualization
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_sample-classifier_fit-classifier.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,159 @@
+<?xml version="1.0" ?>
+<tool id="qiime_sample-classifier_fit-classifier" name="qiime sample-classifier fit-classifier" version="2019.4">
+	<description> - Fit a supervised learning classifier.</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime sample-classifier fit-classifier
+
+--i-table=$itable
+--m-metadata-column="$mmetadatacolumn"
+
+#if $pstep:
+ --p-step=$pstep
+#end if
+
+#if $pcv:
+ --p-cv=$pcv
+#end if
+
+#if str($prandomstate):
+ --p-random-state="$prandomstate"
+#end if
+
+#set $pnjobs = '${GALAXY_SLOTS:-4}'
+
+#if str($pnjobs):
+ --p-n-jobs="$pnjobs"
+#end if
+
+
+#if $pnestimators:
+ --p-n-estimators=$pnestimators
+#end if
+
+#if str($pestimator) != 'None':
+ --p-estimator=$pestimator
+#end if
+
+#if $poptimizefeatureselection:
+ --p-optimize-feature-selection
+#end if
+
+#if $pparametertuning:
+ --p-parameter-tuning
+#end if
+
+#if str($pmissingsamples) != 'None':
+ --p-missing-samples=$pmissingsamples
+#end if
+
+
+#if $input_files_mmetadatafile:
+#def list_dict_to_string(list_dict):
+	#set $file_list = list_dict[0]['additional_input'].__getattr__('file_name')
+	#for d in list_dict[1:]:
+		#set $file_list = $file_list + ' --m-metadata-file=' + d['additional_input'].__getattr__('file_name')
+	#end for
+	#return $file_list
+#end def
+ --m-metadata-file=$list_dict_to_string($input_files_mmetadatafile)
+#end if
+
+
+--o-sample-estimator=osampleestimator
+--o-feature-importance=ofeatureimportance
+;
+cp osampleestimator.qza $osampleestimator;
+cp ofeatureimportance.qza $ofeatureimportance
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-table: ARTIFACT FeatureTable[Frequency] Feature table containing all features that should be used for target prediction.                  [required]" name="itable" optional="False" type="data"/>
+		<param label="--m-metadata-column: COLUMN  MetadataColumn[Categorical] Numeric metadata column to use as prediction target. [required]" name="mmetadatacolumn" optional="False" type="text"/>
+		<param label="--p-step: PROPORTION Range(0.0, 1.0, inclusive_start=False) If optimize-feature-selection is True, step is the percentage of features to remove at each iteration. [default: 0.05]" name="pstep" optional="True" type="float" value="0.05" min="0" max="1" exclusive_start="True"/>
+		<param label="--p-cv: INTEGER       Number of k-fold cross-validations to perform. Range(1, None)                                                [default: 5]" name="pcv" optional="True" type="integer" value="5" min="1"/>
+		<param label="--p-random-state: INTEGER Seed used by random number generator.        [optional]" name="prandomstate" optional="True" type="integer"/>
+		<param label="--p-n-estimators: INTEGER Range(1, None)     Number of trees to grow for estimation. More trees will improve predictive accuracy up to a threshold level, but will also increase time and memory requirements. This parameter only affects ensemble estimators, such as Random Forest, AdaBoost, ExtraTrees, and GradientBoosting.        [default: 100]" name="pnestimators" optional="True" type="integer" value="100" min="1"/>
+		<param label="--p-estimator: " name="pestimator" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="RandomForestClassifier">RandomForestClassifier</option>
+			<option value="ExtraTreesClassifier">ExtraTreesClassifier</option>
+			<option value="GradientBoostingClassifier">GradientBoostingClassifier</option>
+			<option value="AdaBoostClassifier">AdaBoostClassifier</option>
+			<option value="KNeighborsClassifier">KNeighborsClassifier</option>
+			<option value="LinearSVC">LinearSVC</option>
+			<option value="SVC">SVC</option>
+		</param>
+		<param label="--p-optimize-feature-selection: --p-no-optimize-feature-selection Automatically optimize input feature selection using recursive feature elimination.         [default: False]" name="poptimizefeatureselection" selected="False" type="boolean"/>
+		<param label="--p-parameter-tuning: --p-no-parameter-tuning Automatically tune hyperparameters using random grid search.                                [default: False]" name="pparametertuning" selected="False" type="boolean"/>
+		<param label="--p-missing-samples: " name="pmissingsamples" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="error">error</option>
+			<option value="ignore">ignore</option>
+		</param>
+
+		<repeat name="input_files_mmetadatafile" optional="True" title="--m-metadata-file">
+			<param label="--m-metadata-file: Metadata file or artifact viewable as metadata. This option may be supplied multiple times to merge metadata. [optional]" name="additional_input" type="data" format="tabular,qza,no_unzip.zip" />
+		</repeat>
+
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: sampleestimator.qza" name="osampleestimator"/>
+		<data format="qza" label="${tool.name} on ${on_string}: featureimportance.qza" name="ofeatureimportance"/>
+	</outputs>
+	<help><![CDATA[
+Fit a supervised learning classifier.
+#####################################
+
+Fit a supervised learning classifier. Outputs the fit estimator (for
+prediction of test samples and/or unknown samples) and the relative
+importance of each feature for model accuracy. Optionally use k-fold cross-
+validation for automatic recursive feature elimination and hyperparameter
+tuning.
+
+Parameters
+----------
+table : FeatureTable[Frequency]
+    Feature table containing all features that should be used for target
+    prediction.
+metadata : MetadataColumn[Categorical]
+    Numeric metadata column to use as prediction target.
+step : Float % Range(0.0, 1.0, inclusive_start=False), optional
+    If optimize_feature_selection is True, step is the percentage of
+    features to remove at each iteration.
+cv : Int % Range(1, None), optional
+    Number of k-fold cross-validations to perform.
+random_state : Int, optional
+    Seed used by random number generator.
+n_estimators : Int % Range(1, None), optional
+    Number of trees to grow for estimation. More trees will improve
+    predictive accuracy up to a threshold level, but will also increase
+    time and memory requirements. This parameter only affects ensemble
+    estimators, such as Random Forest, AdaBoost, ExtraTrees, and
+    GradientBoosting.
+estimator : Str % Choices('RandomForestClassifier', 'ExtraTreesClassifier', 'GradientBoostingClassifier', 'AdaBoostClassifier', 'KNeighborsClassifier', 'LinearSVC', 'SVC'), optional
+    Estimator method to use for sample prediction.
+optimize_feature_selection : Bool, optional
+    Automatically optimize input feature selection using recursive feature
+    elimination.
+parameter_tuning : Bool, optional
+    Automatically tune hyperparameters using random grid search.
+missing_samples : Str % Choices('error', 'ignore'), optional
+    How to handle missing samples in metadata. "error" will fail if missing
+    samples are detected. "ignore" will cause the feature table and
+    metadata to be filtered, so that only samples found in both files are
+    retained.
+
+Returns
+-------
+sample_estimator : SampleEstimator[Classifier]
+    Trained sample classifier.
+feature_importance : FeatureData[Importance]
+    Importance of each input feature to model accuracy.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_sample-classifier_fit-regressor.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,161 @@
+<?xml version="1.0" ?>
+<tool id="qiime_sample-classifier_fit-regressor" name="qiime sample-classifier fit-regressor" version="2019.4">
+	<description> - Fit a supervised learning regressor.</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime sample-classifier fit-regressor
+
+--i-table=$itable
+--m-metadata-column="$mmetadatacolumn"
+
+#if $pstep:
+ --p-step=$pstep
+#end if
+
+#if $pcv:
+ --p-cv=$pcv
+#end if
+
+#if str($prandomstate):
+ --p-random-state="$prandomstate"
+#end if
+
+#set $pnjobs = '${GALAXY_SLOTS:-4}'
+#if str($pnjobs):
+ --p-n-jobs="$pnjobs"
+#end if
+
+
+#if $pnestimators:
+ --p-n-estimators=$pnestimators
+#end if
+
+#if str($pestimator) != 'None':
+ --p-estimator=$pestimator
+#end if
+
+#if $poptimizefeatureselection:
+ --p-optimize-feature-selection
+#end if
+
+#if $pparametertuning:
+ --p-parameter-tuning
+#end if
+
+#if str($pmissingsamples) != 'None':
+ --p-missing-samples=$pmissingsamples
+#end if
+
+
+#if $input_files_mmetadatafile:
+#def list_dict_to_string(list_dict):
+	#set $file_list = list_dict[0]['additional_input'].__getattr__('file_name')
+	#for d in list_dict[1:]:
+		#set $file_list = $file_list + ' --m-metadata-file=' + d['additional_input'].__getattr__('file_name')
+	#end for
+	#return $file_list
+#end def
+ --m-metadata-file=$list_dict_to_string($input_files_mmetadatafile)
+#end if
+
+
+--o-sample-estimator=osampleestimator
+--o-feature-importance=ofeatureimportance
+;
+cp osampleestimator.qza $osampleestimator;
+cp ofeatureimportance.qza $ofeatureimportance
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-table: ARTIFACT FeatureTable[Frequency] Feature table containing all features that should be used for target prediction.                  [required]" name="itable" optional="False" type="data"/>
+		<param label="--m-metadata-column: COLUMN  MetadataColumn[Numeric] Numeric metadata column to use as prediction target. [required]" name="mmetadatacolumn" optional="False" type="text"/>
+		<param label="--p-step: PROPORTION Range(0.0, 1.0, inclusive_start=False) If optimize-feature-selection is True, step is the percentage of features to remove at each iteration. [default: 0.05]" name="pstep" optional="True" type="float" value="0.05" min="0" max="1" exclusive_start="True"/>
+		<param label="--p-cv: INTEGER       Number of k-fold cross-validations to perform. Range(1, None)                                                [default: 5]" name="pcv" optional="True" type="integer" value="5" min="1"/>
+		<param label="--p-random-state: INTEGER Seed used by random number generator.        [optional]" name="prandomstate" optional="True" type="integer"/>
+		<param label="--p-n-estimators: INTEGER Range(1, None)     Number of trees to grow for estimation. More trees will improve predictive accuracy up to a threshold level, but will also increase time and memory requirements. This parameter only affects ensemble estimators, such as Random Forest, AdaBoost, ExtraTrees, and GradientBoosting.        [default: 100]" name="pnestimators" optional="True" type="integer" value="100" min="1"/>
+		<param label="--p-estimator: " name="pestimator" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="RandomForestRegressor">RandomForestRegressor</option>
+			<option value="ExtraTreesRegressor">ExtraTreesRegressor</option>
+			<option value="GradientBoostingRegressor">GradientBoostingRegressor</option>
+			<option value="AdaBoostRegressor">AdaBoostRegressor</option>
+			<option value="ElasticNet">ElasticNet</option>
+			<option value="Ridge">Ridge</option>
+			<option value="Lasso">Lasso</option>
+			<option value="KNeighborsRegressor">KNeighborsRegressor</option>
+			<option value="LinearSVR">LinearSVR</option>
+			<option value="SVR">SVR</option>
+		</param>
+		<param label="--p-optimize-feature-selection: --p-no-optimize-feature-selection Automatically optimize input feature selection using recursive feature elimination.         [default: False]" name="poptimizefeatureselection" selected="False" type="boolean"/>
+		<param label="--p-parameter-tuning: --p-no-parameter-tuning Automatically tune hyperparameters using random grid search.                                [default: False]" name="pparametertuning" selected="False" type="boolean"/>
+		<param label="--p-missing-samples: " name="pmissingsamples" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="error">error</option>
+			<option value="ignore">ignore</option>
+		</param>
+
+		<repeat name="input_files_mmetadatafile" optional="True" title="--m-metadata-file">
+			<param label="--m-metadata-file: Metadata file or artifact viewable as metadata. This option may be supplied multiple times to merge metadata. [optional]" name="additional_input" type="data" format="tabular,qza,no_unzip.zip" />
+		</repeat>
+
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: sampleestimator.qza" name="osampleestimator"/>
+		<data format="qza" label="${tool.name} on ${on_string}: featureimportance.qza" name="ofeatureimportance"/>
+	</outputs>
+	<help><![CDATA[
+Fit a supervised learning regressor.
+####################################
+
+Fit a supervised learning regressor. Outputs the fit estimator (for
+prediction of test samples and/or unknown samples) and the relative
+importance of each feature for model accuracy. Optionally use k-fold cross-
+validation for automatic recursive feature elimination and hyperparameter
+tuning.
+
+Parameters
+----------
+table : FeatureTable[Frequency]
+    Feature table containing all features that should be used for target
+    prediction.
+metadata : MetadataColumn[Numeric]
+    Numeric metadata column to use as prediction target.
+step : Float % Range(0.0, 1.0, inclusive_start=False), optional
+    If optimize_feature_selection is True, step is the percentage of
+    features to remove at each iteration.
+cv : Int % Range(1, None), optional
+    Number of k-fold cross-validations to perform.
+random_state : Int, optional
+    Seed used by random number generator.
+n_estimators : Int % Range(1, None), optional
+    Number of trees to grow for estimation. More trees will improve
+    predictive accuracy up to a threshold level, but will also increase
+    time and memory requirements. This parameter only affects ensemble
+    estimators, such as Random Forest, AdaBoost, ExtraTrees, and
+    GradientBoosting.
+estimator : Str % Choices('RandomForestRegressor', 'ExtraTreesRegressor', 'GradientBoostingRegressor', 'AdaBoostRegressor', 'ElasticNet', 'Ridge', 'Lasso', 'KNeighborsRegressor', 'LinearSVR', 'SVR'), optional
+    Estimator method to use for sample prediction.
+optimize_feature_selection : Bool, optional
+    Automatically optimize input feature selection using recursive feature
+    elimination.
+parameter_tuning : Bool, optional
+    Automatically tune hyperparameters using random grid search.
+missing_samples : Str % Choices('error', 'ignore'), optional
+    How to handle missing samples in metadata. "error" will fail if missing
+    samples are detected. "ignore" will cause the feature table and
+    metadata to be filtered, so that only samples found in both files are
+    retained.
+
+Returns
+-------
+sample_estimator : SampleEstimator[Regressor]
+	\
+feature_importance : FeatureData[Importance]
+    Importance of each input feature to model accuracy.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_sample-classifier_heatmap.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,360 @@
+<?xml version="1.0" ?>
+<tool id="qiime_sample-classifier_heatmap" name="qiime sample-classifier heatmap" version="2019.4">
+	<description> - Generate heatmap of important features.</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime sample-classifier heatmap
+
+--i-table=$itable
+--i-importance=$iimportance
+
+
+#if $input_files_mmetadatafile:
+#def list_dict_to_string(list_dict):
+	#set $file_list = list_dict[0]['additional_input'].__getattr__('file_name')
+	#for d in list_dict[1:]:
+		#set $file_list = $file_list + ' --m-metadata-file=' + d['additional_input'].__getattr__('file_name')
+	#end for
+	#return $file_list
+#end def
+ --m-metadata-file=$list_dict_to_string($input_files_mmetadatafile)
+#end if
+
+
+
+#if str($mmetadatacolumn):
+ --m-metadata-column="$mmetadatacolumn"
+#end if
+
+#if $pfeaturecount:
+ --p-feature-count=$pfeaturecount
+#end if
+
+#if $pimportancethreshold:
+ --p-importance-threshold=$pimportancethreshold
+#end if
+
+#if $pgroupsamples:
+ --p-group-samples
+#end if
+
+#if $pnonormalize:
+ --p-no-normalize
+#end if
+
+#if str($pmetric) != 'None':
+ --p-metric=$pmetric
+#end if
+
+#if str($pmethod) != 'None':
+ --p-method=$pmethod
+#end if
+
+#if str($pcluster) != 'None':
+ --p-cluster=$pcluster
+#end if
+
+#if str($pcolorscheme) != 'None':
+ --p-color-scheme=$pcolorscheme
+#end if
+
+--o-heatmap=oheatmap
+--o-filtered-table=ofilteredtable
+;
+qiime tools export --input-path oheatmap.qzv --output-path out   && mkdir -p '$oheatmap.files_path'
+&& cp -r out/* '$oheatmap.files_path'
+&& mv '$oheatmap.files_path/index.html' '$oheatmap';
+cp ofilteredtable.qza $ofilteredtable
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-table: ARTIFACT FeatureTable[Frequency] Feature table containing all features that should be used for target prediction.                [required]" name="itable" optional="False" type="data"/>
+		<param format="qza,no_unzip.zip" label="--i-importance: ARTIFACT FeatureData[Importance] Feature importances.                       [required]" name="iimportance" optional="False" type="data"/>
+		<param label="--m-metadata-column: COLUMN  MetadataColumn[Categorical] Metadata file to convert to feature table. [optional]" name="mmetadatacolumn" optional="True" type="text"/>
+		<param label="--p-feature-count: INTEGER Range(0, None)       Filter feature table to include top N most important features. Set to zero to include all features. [default: 50]" name="pfeaturecount" optional="True" type="integer" value="50" min="0"/>
+		<param label="--p-importance-threshold: NUMBER Range(0, None)       Filter feature table to exclude any features with an importance score less than this threshold. Set to zero to include all features.            [default: 0]" name="pimportancethreshold" optional="True" type="float" value="0" min="0"/>
+		<param label="--p-group-samples: --p-no-group-samples Group samples by metadata.           [default: False]" name="pgroupsamples" selected="False" type="boolean"/>
+		<param label="--p-no-normalize: Normalize the feature table by adding a psuedocount of 1 and then taking the log10 of the table. [default: False]" name="pnonormalize" selected="False" type="boolean"/>
+		<param label="--p-metric: " name="pmetric" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="kulsinski">kulsinski</option>
+			<option value="correlation">correlation</option>
+			<option value="hamming">hamming</option>
+			<option value="canberra">canberra</option>
+			<option value="sqeuclidean">sqeuclidean</option>
+			<option value="sokalmichener">sokalmichener</option>
+			<option value="cityblock">cityblock</option>
+			<option value="braycurtis">braycurtis</option>
+			<option value="matching">matching</option>
+			<option value="russellrao">russellrao</option>
+			<option value="cosine">cosine</option>
+			<option value="yule">yule</option>
+			<option value="minkowski">minkowski</option>
+			<option value="euclidean">euclidean</option>
+			<option value="rogerstanimoto">rogerstanimoto</option>
+			<option value="seuclidean">seuclidean</option>
+			<option value="jaccard">jaccard</option>
+			<option value="sokalsneath">sokalsneath</option>
+			<option value="chebyshev">chebyshev</option>
+			<option value="dice">dice</option>
+			<option value="mahalanobis">mahalanobis</option>
+		</param>
+		<param label="--p-method: " name="pmethod" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="complete">complete</option>
+			<option value="centroid">centroid</option>
+			<option value="weighted">weighted</option>
+			<option value="single">single</option>
+			<option value="ward">ward</option>
+			<option value="average">average</option>
+			<option value="median">median</option>
+		</param>
+		<param label="--p-cluster: " name="pcluster" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="features">features</option>
+			<option value="both">both</option>
+			<option value="samples">samples</option>
+			<option value="none">none</option>
+		</param>
+		<param label="--p-color-scheme: " name="pcolorscheme" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="bone">bone</option>
+			<option value="PRGn_r">PRGn_r</option>
+			<option value="Vega10_r">Vega10_r</option>
+			<option value="GnBu">GnBu</option>
+			<option value="hsv">hsv</option>
+			<option value="binary_r">binary_r</option>
+			<option value="GnBu_r">GnBu_r</option>
+			<option value="icefire">icefire</option>
+			<option value="winter">winter</option>
+			<option value="BuGn_r">BuGn_r</option>
+			<option value="plasma_r">plasma_r</option>
+			<option value="Vega20_r">Vega20_r</option>
+			<option value="summer_r">summer_r</option>
+			<option value="cool_r">cool_r</option>
+			<option value="Spectral">Spectral</option>
+			<option value="gist_heat_r">gist_heat_r</option>
+			<option value="Vega20b_r">Vega20b_r</option>
+			<option value="mako_r">mako_r</option>
+			<option value="RdBu_r">RdBu_r</option>
+			<option value="cubehelix">cubehelix</option>
+			<option value="tab20b_r">tab20b_r</option>
+			<option value="CMRmap">CMRmap</option>
+			<option value="Greys">Greys</option>
+			<option value="PuOr">PuOr</option>
+			<option value="cubehelix_r">cubehelix_r</option>
+			<option value="Wistia">Wistia</option>
+			<option value="gnuplot2">gnuplot2</option>
+			<option value="bwr">bwr</option>
+			<option value="gnuplot_r">gnuplot_r</option>
+			<option value="viridis">viridis</option>
+			<option value="gist_ncar_r">gist_ncar_r</option>
+			<option value="gist_ncar">gist_ncar</option>
+			<option value="plasma">plasma</option>
+			<option value="PuRd">PuRd</option>
+			<option value="afmhot">afmhot</option>
+			<option value="icefire_r">icefire_r</option>
+			<option value="tab20b">tab20b</option>
+			<option value="gist_yarg_r">gist_yarg_r</option>
+			<option value="hot">hot</option>
+			<option value="YlOrRd_r">YlOrRd_r</option>
+			<option value="Vega20c">Vega20c</option>
+			<option value="Dark2_r">Dark2_r</option>
+			<option value="Set3">Set3</option>
+			<option value="PuBu">PuBu</option>
+			<option value="magma">magma</option>
+			<option value="Pastel2">Pastel2</option>
+			<option value="terrain">terrain</option>
+			<option value="autumn_r">autumn_r</option>
+			<option value="spectral">spectral</option>
+			<option value="brg">brg</option>
+			<option value="Set3_r">Set3_r</option>
+			<option value="coolwarm">coolwarm</option>
+			<option value="Set2_r">Set2_r</option>
+			<option value="Paired_r">Paired_r</option>
+			<option value="tab20c_r">tab20c_r</option>
+			<option value="mako">mako</option>
+			<option value="gist_rainbow_r">gist_rainbow_r</option>
+			<option value="RdBu">RdBu</option>
+			<option value="PuBu_r">PuBu_r</option>
+			<option value="jet_r">jet_r</option>
+			<option value="gist_earth_r">gist_earth_r</option>
+			<option value="Greys_r">Greys_r</option>
+			<option value="gray">gray</option>
+			<option value="winter_r">winter_r</option>
+			<option value="rocket">rocket</option>
+			<option value="Set2">Set2</option>
+			<option value="seismic_r">seismic_r</option>
+			<option value="Pastel1">Pastel1</option>
+			<option value="RdYlGn_r">RdYlGn_r</option>
+			<option value="copper">copper</option>
+			<option value="spring_r">spring_r</option>
+			<option value="BuGn">BuGn</option>
+			<option value="Greens">Greens</option>
+			<option value="Blues">Blues</option>
+			<option value="PiYG_r">PiYG_r</option>
+			<option value="YlGnBu">YlGnBu</option>
+			<option value="Paired">Paired</option>
+			<option value="YlGn_r">YlGn_r</option>
+			<option value="RdPu_r">RdPu_r</option>
+			<option value="BrBG_r">BrBG_r</option>
+			<option value="bone_r">bone_r</option>
+			<option value="RdYlBu">RdYlBu</option>
+			<option value="gist_rainbow">gist_rainbow</option>
+			<option value="bwr_r">bwr_r</option>
+			<option value="inferno_r">inferno_r</option>
+			<option value="inferno">inferno</option>
+			<option value="gist_stern_r">gist_stern_r</option>
+			<option value="gray_r">gray_r</option>
+			<option value="Purples">Purples</option>
+			<option value="RdGy">RdGy</option>
+			<option value="hot_r">hot_r</option>
+			<option value="YlOrBr_r">YlOrBr_r</option>
+			<option value="nipy_spectral">nipy_spectral</option>
+			<option value="nipy_spectral_r">nipy_spectral_r</option>
+			<option value="ocean">ocean</option>
+			<option value="Set1">Set1</option>
+			<option value="Dark2">Dark2</option>
+			<option value="Oranges">Oranges</option>
+			<option value="Pastel1_r">Pastel1_r</option>
+			<option value="Oranges_r">Oranges_r</option>
+			<option value="Pastel2_r">Pastel2_r</option>
+			<option value="YlGn">YlGn</option>
+			<option value="Vega20b">Vega20b</option>
+			<option value="PuRd_r">PuRd_r</option>
+			<option value="PuBuGn_r">PuBuGn_r</option>
+			<option value="afmhot_r">afmhot_r</option>
+			<option value="spring">spring</option>
+			<option value="tab20_r">tab20_r</option>
+			<option value="PuBuGn">PuBuGn</option>
+			<option value="gist_yarg">gist_yarg</option>
+			<option value="PiYG">PiYG</option>
+			<option value="flag">flag</option>
+			<option value="rainbow_r">rainbow_r</option>
+			<option value="hsv_r">hsv_r</option>
+			<option value="prism_r">prism_r</option>
+			<option value="ocean_r">ocean_r</option>
+			<option value="magma_r">magma_r</option>
+			<option value="flag_r">flag_r</option>
+			<option value="Blues_r">Blues_r</option>
+			<option value="gnuplot2_r">gnuplot2_r</option>
+			<option value="gist_gray">gist_gray</option>
+			<option value="spectral_r">spectral_r</option>
+			<option value="CMRmap_r">CMRmap_r</option>
+			<option value="rainbow">rainbow</option>
+			<option value="gnuplot">gnuplot</option>
+			<option value="vlag">vlag</option>
+			<option value="Set1_r">Set1_r</option>
+			<option value="Accent">Accent</option>
+			<option value="coolwarm_r">coolwarm_r</option>
+			<option value="brg_r">brg_r</option>
+			<option value="pink_r">pink_r</option>
+			<option value="YlOrBr">YlOrBr</option>
+			<option value="Vega20c_r">Vega20c_r</option>
+			<option value="Wistia_r">Wistia_r</option>
+			<option value="RdGy_r">RdGy_r</option>
+			<option value="tab20">tab20</option>
+			<option value="BrBG">BrBG</option>
+			<option value="rocket_r">rocket_r</option>
+			<option value="OrRd_r">OrRd_r</option>
+			<option value="YlGnBu_r">YlGnBu_r</option>
+			<option value="viridis_r">viridis_r</option>
+			<option value="copper_r">copper_r</option>
+			<option value="gist_heat">gist_heat</option>
+			<option value="Vega10">Vega10</option>
+			<option value="PuOr_r">PuOr_r</option>
+			<option value="binary">binary</option>
+			<option value="pink">pink</option>
+			<option value="Reds">Reds</option>
+			<option value="Purples_r">Purples_r</option>
+			<option value="cool">cool</option>
+			<option value="prism">prism</option>
+			<option value="terrain_r">terrain_r</option>
+			<option value="BuPu_r">BuPu_r</option>
+			<option value="Spectral_r">Spectral_r</option>
+			<option value="Greens_r">Greens_r</option>
+			<option value="gist_gray_r">gist_gray_r</option>
+			<option value="RdYlGn">RdYlGn</option>
+			<option value="tab20c">tab20c</option>
+			<option value="Reds_r">Reds_r</option>
+			<option value="tab10">tab10</option>
+			<option value="summer">summer</option>
+			<option value="gist_stern">gist_stern</option>
+			<option value="tab10_r">tab10_r</option>
+			<option value="YlOrRd">YlOrRd</option>
+			<option value="jet">jet</option>
+			<option value="Vega20">Vega20</option>
+			<option value="vlag_r">vlag_r</option>
+			<option value="RdPu">RdPu</option>
+			<option value="OrRd">OrRd</option>
+			<option value="Accent_r">Accent_r</option>
+			<option value="autumn">autumn</option>
+			<option value="BuPu">BuPu</option>
+			<option value="RdYlBu_r">RdYlBu_r</option>
+			<option value="gist_earth">gist_earth</option>
+			<option value="seismic">seismic</option>
+			<option value="PRGn">PRGn</option>
+		</param>
+
+		<repeat name="input_files_mmetadatafile" optional="True" title="--m-metadata-file">
+			<param label="--m-metadata-file: Metadata file or artifact viewable as metadata. This option may be supplied multiple times to merge metadata. [optional]" name="additional_input" type="data" format="tabular,qza,no_unzip.zip" />
+		</repeat>
+
+	</inputs>
+	<outputs>
+		<data format="html" label="${tool.name} on ${on_string}: heatmap.qzv" name="oheatmap"/>
+		<data format="qza" label="${tool.name} on ${on_string}: filteredtable.qza" name="ofilteredtable"/>
+	</outputs>
+	<help><![CDATA[
+Generate heatmap of important features.
+#######################################
+
+Generate a heatmap of important features. Features are filtered based on
+importance scores; samples are optionally grouped by metadata; and a
+heatmap is generated that displays (normalized) feature abundances per
+sample.
+
+Parameters
+----------
+table : FeatureTable[Frequency]
+    Feature table containing all features that should be used for target
+    prediction.
+importance : FeatureData[Importance]
+    Feature importances.
+metadata : MetadataColumn[Categorical], optional
+    Metadata file to convert to feature table.
+feature_count : Int % Range(0, None), optional
+    Filter feature table to include top N most important features. Set to
+    zero to include all features.
+importance_threshold : Float % Range(0, None), optional
+    Filter feature table to exclude any features with an importance score
+    less than this threshold. Set to zero to include all features.
+group_samples : Bool, optional
+    Group samples by metadata.
+normalize : Bool, optional
+    Normalize the feature table by adding a psuedocount of 1 and then
+    taking the log10 of the table.
+metric : Str % Choices('sokalmichener', 'yule', 'russellrao', 'rogerstanimoto', 'minkowski', 'correlation', 'jaccard', 'cosine', 'chebyshev', 'euclidean', 'sqeuclidean', 'cityblock', 'matching', 'dice', 'mahalanobis', 'kulsinski', 'seuclidean', 'sokalsneath', 'canberra', 'hamming', 'braycurtis'), optional
+    Metrics exposed by seaborn (see http://seaborn.pydata.org/generated/sea
+    born.clustermap.html#seaborn.clustermap for more detail).
+method : Str % Choices('average', 'complete', 'median', 'centroid', 'single', 'ward', 'weighted'), optional
+    Clustering methods exposed by seaborn (see http://seaborn.pydata.org/ge
+    nerated/seaborn.clustermap.html#seaborn.clustermap for more detail).
+cluster : Str % Choices('features', 'samples', 'none', 'both'), optional
+    Specify which axes to cluster.
+color_scheme : Str % Choices('rocket', 'RdYlBu_r', 'winter', 'viridis', 'BrBG', 'magma_r', 'YlOrBr', 'seismic', 'Set1', 'gist_yarg_r', 'gist_rainbow', 'autumn_r', 'Wistia_r', 'cool_r', 'hsv_r', 'flag', 'Vega20b_r', 'mako_r', 'coolwarm', 'Vega20_r', 'jet', 'cubehelix_r', 'bwr_r', 'brg', 'RdPu', 'gist_ncar', 'RdPu_r', 'cool', 'gnuplot_r', 'Set3', 'ocean_r', 'tab20b', 'tab20b_r', 'OrRd_r', 'Spectral_r', 'gray', 'OrRd', 'prism_r', 'Wistia', 'hot', 'icefire', 'plasma', 'Purples_r', 'viridis_r', 'gnuplot2_r', 'CMRmap', 'YlGnBu_r', 'Set3_r', 'PuRd_r', 'Reds_r', 'gray_r', 'Dark2', 'Vega20b', 'Paired', 'gist_yarg', 'RdYlGn_r', 'Greens', 'YlGnBu', 'tab20', 'gnuplot', 'PuBuGn_r', 'spectral_r', 'tab20c_r', 'gist_rainbow_r', 'hot_r', 'spring_r', 'gist_gray', 'Blues_r', 'Spectral', 'magma', 'GnBu_r', 'inferno_r', 'tab10', 'gist_gray_r', 'seismic_r', 'spring', 'BuPu_r', 'spectral', 'BrBG_r', 'PiYG', 'inferno', 'YlOrBr_r', 'Set1_r', 'YlOrRd_r', 'summer', 'vlag', 'Oranges_r', 'Dark2_r', 'binary_r', 'icefire_r', 'RdYlGn', 'hsv', 'gist_heat', 'PRGn_r', 'pink_r', 'Pastel2_r', 'copper_r', 'BuGn', 'gist_stern_r', 'PuRd', 'gist_earth_r', 'YlOrRd', 'Reds', 'gist_earth', 'Greens_r', 'Vega10', 'ocean', 'brg_r', 'rainbow_r', 'tab20_r', 'Purples', 'Blues', 'Accent', 'afmhot_r', 'Set2_r', 'RdBu', 'Vega20c', 'Pastel1', 'RdGy_r', 'PuBuGn', 'copper', 'PuOr', 'jet_r', 'YlGn_r', 'gist_heat_r', 'PuOr_r', 'bone', 'BuGn_r', 'terrain_r', 'mako', 'Vega20c_r', 'Paired_r', 'PuBu_r', 'tab20c', 'Pastel1_r', 'flag_r', 'plasma_r', 'Oranges', 'autumn', 'bone_r', 'GnBu', 'bwr', 'Greys', 'RdBu_r', 'RdGy', 'winter_r', 'gnuplot2', 'coolwarm_r', 'pink', 'nipy_spectral', 'Greys_r', 'summer_r', 'Vega20', 'BuPu', 'afmhot', 'gist_stern', 'binary', 'PiYG_r', 'YlGn', 'rocket_r', 'cubehelix', 'rainbow', 'Accent_r', 'CMRmap_r', 'PRGn', 'PuBu', 'tab10_r', 'prism', 'vlag_r', 'Set2', 'gist_ncar_r', 'nipy_spectral_r', 'Pastel2', 'terrain', 'RdYlBu', 'Vega10_r'), optional
+    Color scheme for heatmap.
+
+Returns
+-------
+heatmap : Visualization
+    Heatmap of important features.
+filtered_table : FeatureTable[Frequency]
+    Filtered feature table containing data displayed in heatmap.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_sample-classifier_maturity-index.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,203 @@
+<?xml version="1.0" ?>
+<tool id="qiime_sample-classifier_maturity-index" name="qiime sample-classifier maturity-index" version="2019.4">
+	<description> - Microbial maturity index prediction.</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command>
+	<![CDATA[
+	qiime sample-classifier maturity-index --i-table=$itable
+
+	#def list_dict_to_string(list_dict):
+		#set $file_list = list_dict[0]['additional_input'].__getattr__('file_name')
+		#for d in list_dict[1:]:
+			#set $file_list = $file_list + ' --m-metadata-file=' + d['additional_input'].__getattr__('file_name')
+		#end for
+		#return $file_list
+	#end def
+
+	 --m-metadata-file=$list_dict_to_string($input_files_mmetadatafile) --p-group-by="$pgroupby" --p-column="$pcolumn" --p-control="$pcontrol"
+
+	#set $pnjobs = '${GALAXY_SLOTS:-4}'
+
+	#if str($pnjobs):
+	 --p-n-jobs="$pnjobs"
+	#end if
+
+
+	#if $pparametertuning:
+	  --p-parameter-tuning
+	#else
+		--p-no-parameter-tuning
+	#end if
+
+	#if $pstep:
+	 --p-step=$pstep
+	#end if
+
+	#if $pstratify:
+	  --p-stratify
+	#else
+		--p-no-stratify
+	#end if
+
+	#if $poptimizefeatureselection:
+	  --p-optimize-feature-selection
+	#else
+		--p-no-optimize-feature-selection
+	#end if
+
+	#if $ptestsize:
+	 --p-test-size=$ptestsize
+	#end if
+	 --o-visualization=ovisualization
+	#if str($pestimator) != 'None':
+	 --p-estimator=$pestimator
+	#end if
+
+	#if $pmazstats:
+	  --p-maz-stats
+ 	#else
+ 		--p-no-maz-stats
+	#end if
+
+	#if str($cmdconfig) != 'None':
+	 --cmd-config=$cmdconfig
+	#end if
+
+	#if $pcv:
+	 --p-cv=$pcv
+	#end if
+
+	#if $pnestimators:
+	 --p-n-estimators=$pnestimators
+	#end if
+
+	#if str($prandomstate):
+	 --p-random-state="$prandomstate"
+	#end if
+	;
+	qiime tools export ovisualization.qzv --output-dir out   && mkdir -p '$ovisualization.files_path'
+	&& cp -r out/* '$ovisualization.files_path'
+	&& mv '$ovisualization.files_path/index.html' '$ovisualization'
+	]]>
+	</command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-table: FeatureTable[Frequency] Feature table containing all features that should be used for target prediction. [required]" name="itable" optional="False" type="data"/>
+
+		<repeat name="input_files_mmetadatafile" optional="False" title="--m-metadata-file">
+			<param label="--m-metadata-file: Metadata file or artifact viewable as metadata. This option may be supplied multiple times to merge metadata. [required]" name="additional_input" type="data" format="tabular,qza,no_unzip.zip" />
+		</repeat>
+
+		<param label="--p-column: Numeric metadata column to use as prediction target.  [required]" name="pcolumn" optional="False" type="text"/>
+
+		<param label="--p-group-by: Categorical metadata column to use for plotting and significance testing between main treatment groups.  [required]" name="pgroupby" optional="False" type="text"/>
+		<param label="--p-control: Value of group_by to use as control group. The regression model will be trained using only control group data, and the maturity scores of other groups consequently will be assessed relative to this group.  [required]" name="pcontrol" optional="False" type="text"/>
+
+		<param label="--p-estimator: Regression model to use for prediction.
+                                  [default: RandomForestRegressor]" name="pestimator" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="Ridge">Ridge</option>
+			<option value="RandomForestRegressor">RandomForestRegressor</option>
+			<option value="GradientBoostingRegressor">GradientBoostingRegressor</option>
+			<option value="ExtraTreesRegressor">ExtraTreesRegressor</option>
+			<option value="SVR">SVR</option>
+			<option value="ElasticNet">ElasticNet</option>
+			<option value="Lasso">Lasso</option>
+		</param>
+		<param label="--p-n-estimators: Number of trees to grow for estimation. More trees will improve predictive accuracy up to a threshold level, but will also increase time and memory requirements. This parameter only affects ensemble estimators, such as Random Forest, AdaBoost, ExtraTrees, and GradientBoosting.  [default: 100]" name="pnestimators" optional="True" type="integer" value="100"/>
+
+		<param label="--p-test-size: Fraction of input samples to exclude from training set and use for classifier testing. [default: 0.2]" name="ptestsize" optional="True" type="float" value="0.2"/>
+
+		<param label="--p-step: If optimize_feature_selection is True, step is the percentage of features to remove at each iteration.  [default: 0.05]" name="pstep" optional="True" type="float" value="0.05"/>
+
+		<param label="--p-cv: Number of k-fold cross-validations to perform.  [default: 5]" name="pcv" optional="True" type="integer" value="5"/>
+
+		<param label="--p-random-state: Seed used by random number generator. [optional]" name="prandomstate" optional="True" type="text"/>
+
+		<param label="--p-parameter-tuning: --p-no-parameter-tuning Automatically tune hyperparameters using random grid search.  [default: True]" name="pparametertuning" checked="True" type="boolean"/>
+		<param label="--p-optimize-feature-selection: --p-no-optimize-feature-selection Automatically optimize input feature selection using recursive feature elimination.  [default: True]" name="poptimizefeatureselection" checked="True" type="boolean"/>
+
+		<param label="--p-stratify: --p-no-stratify  Evenly stratify training and test data among metadata categories. If True, all values in column must match at least two samples. [default: False]" name="pstratify" checked="False" type="boolean"/>
+
+		<param label="--p-maz-stats: --p-no-maz-stats Calculate anova and pairwise tests on MAZ scores.  [default: True]" name="pmazstats" checked="True" type="boolean"/>
+
+		<param label="--cmd-config: Use config file for command options" name="cmdconfig" optional="True" type="data"/>
+	</inputs>
+	<outputs>
+		<data format="html" label="${tool.name} on ${on_string}: visualization.qzv" name="ovisualization"/>
+	</outputs>
+	<help>
+		<![CDATA[
+Microbial maturity index prediction.
+-------------------------------------
+
+Calculates a "microbial maturity" index from a regression model trained on
+feature data to predict a given continuous metadata column, e.g., to
+predict age as a function of microbiota composition. The model is trained
+on a subset of control group samples, then predicts the column value for
+all samples. This visualization computes maturity index z-scores to compare
+relative "maturity" between each group, as described in
+doi:10.1038/nature13421. This method can be used to predict between-group
+differences in relative trajectory across any type of continuous metadata
+gradient, e.g., intestinal microbiome development by age, microbial
+succession during wine fermentation, or microbial community differences
+along environmental gradients, as a function of two or more different
+"treatment" groups.
+
+Parameters
+----------
+table : FeatureTable[Frequency]
+    Feature table containing all features that should be used for target
+    prediction.
+metadata : Metadata
+		\
+column : Str
+    Numeric metadata column to use as prediction target.
+group_by : Str
+    Categorical metadata column to use for plotting and significance
+    testing between main treatment groups.
+control : Str
+    Value of group_by to use as control group. The regression model will be
+    trained using only control group data, and the maturity scores of other
+    groups consequently will be assessed relative to this group.
+estimator : Str % Choices({'ElasticNet', 'ExtraTreesRegressor', 'GradientBoostingRegressor', 'Lasso', 'RandomForestRegressor', 'Ridge', 'SVR'}), optional
+    Regression model to use for prediction.
+n_estimators : Int % Range(1, None), optional
+    Number of trees to grow for estimation. More trees will improve
+    predictive accuracy up to a threshold level, but will also increase
+    time and memory requirements. This parameter only affects ensemble
+    estimators, such as Random Forest, AdaBoost, ExtraTrees, and
+    GradientBoosting.
+test_size : Float % Range(0.0, 1.0, inclusive_start=False), optional
+    Fraction of input samples to exclude from training set and use for
+    classifier testing.
+step : Float % Range(0.0, 1.0, inclusive_start=False), optional
+    If optimize_feature_selection is True, step is the percentage of
+    features to remove at each iteration.
+cv : Int % Range(1, None), optional
+    Number of k-fold cross-validations to perform.
+random_state : Int, optional
+    Seed used by random number generator.
+parameter_tuning : Bool, optional
+    Automatically tune hyperparameters using random grid search.
+optimize_feature_selection : Bool, optional
+    Automatically optimize input feature selection using recursive feature
+    elimination.
+stratify : Bool, optional
+    Evenly stratify training and test data among metadata categories. If
+    True, all values in column must match at least two samples.
+maz_stats : Bool, optional
+    Calculate anova and pairwise tests on MAZ scores.
+
+Returns
+-------
+visualization : Visualization
+		\
+		]]>
+	</help>
+<macros>
+	<import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation" />
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_sample-classifier_metatable.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,107 @@
+<?xml version="1.0" ?>
+<tool id="qiime_sample-classifier_metatable" name="qiime sample-classifier metatable" version="2019.4">
+	<description> - Convert (and merge) positive numeric metadata (in)to feature table.</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime sample-classifier metatable
+
+
+#if str($itable) != 'None':
+ --i-table=$itable
+#end if
+
+#if str($pmissingsamples) != 'None':
+ --p-missing-samples=$pmissingsamples
+#end if
+
+#if str($pmissingvalues) != 'None':
+ --p-missing-values=$pmissingvalues
+#end if
+
+
+#if $input_files_mmetadatafile:
+#def list_dict_to_string(list_dict):
+	#set $file_list = list_dict[0]['additional_input'].__getattr__('file_name')
+	#for d in list_dict[1:]:
+		#set $file_list = $file_list + ' --m-metadata-file=' + d['additional_input'].__getattr__('file_name')
+	#end for
+	#return $file_list
+#end def
+ --m-metadata-file=$list_dict_to_string($input_files_mmetadatafile)
+#end if
+
+
+--o-converted-table=oconvertedtable
+;
+cp oconvertedtable.qza $oconvertedtable
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-table: ARTIFACT FeatureTable[Frequency] Feature table containing all features that should be used for target prediction.                  [optional]" name="itable" optional="True" type="data"/>
+		<param label="--p-missing-samples: " name="pmissingsamples" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="error">error</option>
+			<option value="ignore">ignore</option>
+		</param>
+		<param label="--p-missing-values: " name="pmissingvalues" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="drop_samples">drop_samples</option>
+			<option value="drop_features">drop_features</option>
+			<option value="error">error</option>
+			<option value="fill">fill</option>
+		</param>
+
+		<repeat name="input_files_mmetadatafile" optional="True" title="--m-metadata-file">
+			<param label="--m-metadata-file: Metadata file or artifact viewable as metadata. This option may be supplied multiple times to merge metadata. [optional]" name="additional_input" type="data" format="tabular,qza,no_unzip.zip" />
+		</repeat>
+
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: convertedtable.qza" name="oconvertedtable"/>
+	</outputs>
+	<help><![CDATA[
+Convert (and merge) positive numeric metadata (in)to feature table.
+###################################################################
+
+Convert numeric sample metadata from TSV file into a feature table.
+Optionally merge with an existing feature table. Only numeric metadata will
+be converted; categorical columns will be silently dropped. By default, if
+a table is used as input only samples found in both the table and metadata
+(intersection) are merged, and others are silently dropped. Set
+missing_samples="error" to raise an error if samples found in the table are
+missing from the metadata file. The metadata file can always contain a
+superset of samples. Note that columns will be dropped if they are non-
+numeric, contain only unique values, contain no unique values (zero
+variance), contain only empty cells, or contain negative values. This
+method currently only converts postive numeric metadata into feature data.
+Tip: convert categorical columns to dummy variables to include them in the
+output feature table.
+
+Parameters
+----------
+metadata : Metadata
+    Metadata file to convert to feature table.
+table : FeatureTable[Frequency], optional
+    Feature table containing all features that should be used for target
+    prediction.
+missing_samples : Str % Choices('error', 'ignore'), optional
+    How to handle missing samples in metadata. "error" will fail if missing
+    samples are detected. "ignore" will cause the feature table and
+    metadata to be filtered, so that only samples found in both files are
+    retained.
+missing_values : Str % Choices('drop_samples', 'drop_features', 'error', 'fill'), optional
+    How to handle missing values (nans) in metadata. Either "drop_samples"
+    with missing values, "drop_features" with missing values, "fill"
+    missing values with zeros, or "error" if any missing values are found.
+
+Returns
+-------
+converted_table : FeatureTable[Frequency]
+    Converted feature table
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_sample-classifier_predict-classification.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,57 @@
+<?xml version="1.0" ?>
+<tool id="qiime_sample-classifier_predict-classification" name="qiime sample-classifier predict-classification" version="2019.4">
+	<description> - Use trained classifier to predict target values for new samples.</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime sample-classifier predict-classification
+
+--i-table=$itable
+--i-sample-estimator=$isampleestimator
+
+#set $pnjobs = '${GALAXY_SLOTS:-4}'
+
+#if str($pnjobs):
+ --p-n-jobs="$pnjobs"
+#end if
+
+--o-predictions=opredictions
+;
+cp opredictions.qza $opredictions
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-table: ARTIFACT FeatureTable[Frequency] Feature table containing all features that should be used for target prediction.                  [required]" name="itable" optional="False" type="data"/>
+		<param format="qza,no_unzip.zip" label="--i-sample-estimator: ARTIFACT SampleEstimator[Classifier] Sample classifier trained with fit_classifier. [required]" name="isampleestimator" optional="False" type="data"/>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: predictions.qza" name="opredictions"/>
+	</outputs>
+	<help><![CDATA[
+Use trained classifier to predict target values for new samples.
+################################################################
+
+Use trained estimator to predict target values for new samples. These will
+typically be unseen samples, e.g., test data (derived manually or from
+split_table) or samples with unknown values, but can theoretically be any
+samples present in a feature table that contain overlapping features with
+the feature table used to train the estimator.
+
+Parameters
+----------
+table : FeatureTable[Frequency]
+    Feature table containing all features that should be used for target
+    prediction.
+sample_estimator : SampleEstimator[Classifier]
+    Sample classifier trained with fit_classifier.
+
+Returns
+-------
+predictions : SampleData[ClassifierPredictions]
+    Predicted target values for each input sample.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_sample-classifier_predict-regression.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,57 @@
+<?xml version="1.0" ?>
+<tool id="qiime_sample-classifier_predict-regression" name="qiime sample-classifier predict-regression" version="2019.4">
+	<description> - Use trained regressor to predict target values for new samples.</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime sample-classifier predict-regression
+
+--i-table=$itable
+--i-sample-estimator=$isampleestimator
+
+#set $pnjobs = '${GALAXY_SLOTS:-4}'
+
+#if str($pnjobs):
+ --p-n-jobs="$pnjobs"
+#end if
+
+--o-predictions=opredictions
+;
+cp opredictions.qza $opredictions
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-table: ARTIFACT FeatureTable[Frequency] Feature table containing all features that should be used for target prediction.                  [required]" name="itable" optional="False" type="data"/>
+		<param format="qza,no_unzip.zip" label="--i-sample-estimator: ARTIFACT SampleEstimator[Regressor] Sample regressor trained with fit_regressor. [required]" name="isampleestimator" optional="False" type="data"/>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: predictions.qza" name="opredictions"/>
+	</outputs>
+	<help><![CDATA[
+Use trained regressor to predict target values for new samples.
+###############################################################
+
+Use trained estimator to predict target values for new samples. These will
+typically be unseen samples, e.g., test data (derived manually or from
+split_table) or samples with unknown values, but can theoretically be any
+samples present in a feature table that contain overlapping features with
+the feature table used to train the estimator.
+
+Parameters
+----------
+table : FeatureTable[Frequency]
+    Feature table containing all features that should be used for target
+    prediction.
+sample_estimator : SampleEstimator[Regressor]
+    Sample regressor trained with fit_regressor.
+
+Returns
+-------
+predictions : SampleData[RegressorPredictions]
+    Predicted target values for each input sample.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_sample-classifier_regress-samples-ncv.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,150 @@
+<?xml version="1.0" ?>
+<tool id="qiime_sample-classifier_regress-samples-ncv" name="qiime sample-classifier regress-samples-ncv" version="2019.4">
+	<description> - Nested cross-validated supervised learning regressor.</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime sample-classifier regress-samples-ncv
+
+--i-table=$itable
+--m-metadata-column="$mmetadatacolumn"
+
+#if $pcv:
+ --p-cv=$pcv
+#end if
+
+#if str($prandomstate):
+ --p-random-state="$prandomstate"
+#end if
+
+#set $pnjobs = '${GALAXY_SLOTS:-4}'
+
+#if str($pnjobs):
+ --p-n-jobs="$pnjobs"
+#end if
+
+
+#if $pnestimators:
+ --p-n-estimators=$pnestimators
+#end if
+
+#if str($pestimator) != 'None':
+ --p-estimator=$pestimator
+#end if
+
+#if $pstratify:
+ --p-stratify
+#end if
+
+#if $pparametertuning:
+ --p-parameter-tuning
+#end if
+
+#if str($pmissingsamples) != 'None':
+ --p-missing-samples=$pmissingsamples
+#end if
+
+
+#if $input_files_mmetadatafile:
+#def list_dict_to_string(list_dict):
+	#set $file_list = list_dict[0]['additional_input'].__getattr__('file_name')
+	#for d in list_dict[1:]:
+		#set $file_list = $file_list + ' --m-metadata-file=' + d['additional_input'].__getattr__('file_name')
+	#end for
+	#return $file_list
+#end def
+ --m-metadata-file=$list_dict_to_string($input_files_mmetadatafile)
+#end if
+
+
+--o-predictions=opredictions
+--o-feature-importance=ofeatureimportance
+;
+cp opredictions.qza $opredictions;
+cp ofeatureimportance.qza $ofeatureimportance
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-table: ARTIFACT FeatureTable[Frequency] Feature table containing all features that should be used for target prediction.                  [required]" name="itable" optional="False" type="data"/>
+		<param label="--m-metadata-column: COLUMN  MetadataColumn[Numeric] Numeric metadata column to use as prediction target. [required]" name="mmetadatacolumn" optional="False" type="text"/>
+		<param label="--p-cv: INTEGER       Number of k-fold cross-validations to perform. Range(1, None)                                                [default: 5]" name="pcv" optional="True" type="integer" value="5" min="1"/>
+		<param label="--p-random-state: INTEGER Seed used by random number generator.        [optional]" name="prandomstate" optional="True" type="integer"/>
+		<param label="--p-n-estimators: INTEGER Range(1, None)     Number of trees to grow for estimation. More trees will improve predictive accuracy up to a threshold level, but will also increase time and memory requirements. This parameter only affects ensemble estimators, such as Random Forest, AdaBoost, ExtraTrees, and GradientBoosting.        [default: 100]" name="pnestimators" optional="True" type="integer" value="100" min="1"/>
+		<param label="--p-estimator: " name="pestimator" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="RandomForestRegressor">RandomForestRegressor</option>
+			<option value="ExtraTreesRegressor">ExtraTreesRegressor</option>
+			<option value="GradientBoostingRegressor">GradientBoostingRegressor</option>
+			<option value="AdaBoostRegressor">AdaBoostRegressor</option>
+			<option value="ElasticNet">ElasticNet</option>
+			<option value="Ridge">Ridge</option>
+			<option value="Lasso">Lasso</option>
+			<option value="KNeighborsRegressor">KNeighborsRegressor</option>
+			<option value="LinearSVR">LinearSVR</option>
+			<option value="SVR">SVR</option>
+		</param>
+		<param label="--p-stratify: --p-no-stratify Evenly stratify training and test data among metadata categories. If True, all values in column must match at least two samples.                     [default: False]" name="pstratify" selected="False" type="boolean"/>
+		<param label="--p-parameter-tuning: --p-no-parameter-tuning Automatically tune hyperparameters using random grid search.                                [default: False]" name="pparametertuning" selected="False" type="boolean"/>
+		<param label="--p-missing-samples: " name="pmissingsamples" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="error">error</option>
+			<option value="ignore">ignore</option>
+		</param>
+
+		<repeat name="input_files_mmetadatafile" optional="True" title="--m-metadata-file">
+			<param label="--m-metadata-file: Metadata file or artifact viewable as metadata. This option may be supplied multiple times to merge metadata. [optional]" name="additional_input" type="data" format="tabular,qza,no_unzip.zip" />
+		</repeat>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: predictions.qza" name="opredictions"/>
+		<data format="qza" label="${tool.name} on ${on_string}: featureimportance.qza" name="ofeatureimportance"/>
+	</outputs>
+	<help><![CDATA[
+Nested cross-validated supervised learning classifier.
+######################################################
+
+Predicts a categorical sample metadata column using a supervised learning
+classifier. Uses nested stratified k-fold cross validation for automated
+hyperparameter optimization and sample prediction. Outputs predicted values
+for each input sample, and relative importance of each feature for model
+accuracy.
+
+Parameters
+----------
+table : FeatureTable[Frequency]
+    Feature table containing all features that should be used for target
+    prediction.
+metadata : MetadataColumn[Categorical]
+    Categorical metadata column to use as prediction target.
+cv : Int % Range(1, None), optional
+    Number of k-fold cross-validations to perform.
+random_state : Int, optional
+    Seed used by random number generator.
+n_estimators : Int % Range(1, None), optional
+    Number of trees to grow for estimation. More trees will improve
+    predictive accuracy up to a threshold level, but will also increase
+    time and memory requirements. This parameter only affects ensemble
+    estimators, such as Random Forest, AdaBoost, ExtraTrees, and
+    GradientBoosting.
+estimator : Str % Choices('RandomForestClassifier', 'ExtraTreesClassifier', 'GradientBoostingClassifier', 'AdaBoostClassifier', 'KNeighborsClassifier', 'LinearSVC', 'SVC'), optional
+    Estimator method to use for sample prediction.
+parameter_tuning : Bool, optional
+    Automatically tune hyperparameters using random grid search.
+missing_samples : Str % Choices('error', 'ignore'), optional
+    How to handle missing samples in metadata. "error" will fail if missing
+    samples are detected. "ignore" will cause the feature table and
+    metadata to be filtered, so that only samples found in both files are
+    retained.
+
+Returns
+-------
+predictions : SampleData[ClassifierPredictions]
+    Predicted target values for each input sample.
+feature_importance : FeatureData[Importance]
+    Importance of each input feature to model accuracy.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_sample-classifier_regress-samples.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,201 @@
+<?xml version="1.0" ?>
+<tool id="qiime_sample-classifier_regress-samples" name="qiime sample-classifier regress-samples" version="2019.4">
+	<description> - Train and test a cross-validated supervised learning regressor.</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime sample-classifier regress-samples
+
+--i-table=$itable
+--m-metadata-column="$mmetadatacolumn"
+
+#if $ptestsize:
+ --p-test-size=$ptestsize
+#end if
+
+#if $pstep:
+ --p-step=$pstep
+#end if
+
+#if $pcv:
+ --p-cv=$pcv
+#end if
+
+#if str($prandomstate):
+ --p-random-state="$prandomstate"
+#end if
+
+#set $pnjobs = '${GALAXY_SLOTS:-4}'
+
+#if str($pnjobs):
+ --p-n-jobs="$pnjobs"
+#end if
+
+
+#if $pnestimators:
+ --p-n-estimators=$pnestimators
+#end if
+
+#if str($pestimator) != 'None':
+ --p-estimator=$pestimator
+#end if
+
+#if $poptimizefeatureselection:
+ --p-optimize-feature-selection
+#end if
+
+#if $pstratify:
+ --p-stratify
+#end if
+
+#if $pparametertuning:
+ --p-parameter-tuning
+#end if
+
+#if str($pmissingsamples) != 'None':
+ --p-missing-samples=$pmissingsamples
+#end if
+
+
+#if $input_files_mmetadatafile:
+#def list_dict_to_string(list_dict):
+	#set $file_list = list_dict[0]['additional_input'].__getattr__('file_name')
+	#for d in list_dict[1:]:
+		#set $file_list = $file_list + ' --m-metadata-file=' + d['additional_input'].__getattr__('file_name')
+	#end for
+	#return $file_list
+#end def
+ --m-metadata-file=$list_dict_to_string($input_files_mmetadatafile)
+#end if
+
+
+--o-sample-estimator=osampleestimator
+--o-feature-importance=ofeatureimportance
+--o-predictions=opredictions
+--o-model-summary=omodelsummary
+--o-accuracy-results=oaccuracyresults
+;
+cp osampleestimator.qza $osampleestimator;
+cp ofeatureimportance.qza $ofeatureimportance;
+cp opredictions.qza $opredictions;
+qiime tools export --input-path omodelsummary.qzv --output-path out   && mkdir -p '$omodelsummary.files_path'
+&& cp -r out/* '$omodelsummary.files_path'
+&& mv '$omodelsummary.files_path/index.html' '$omodelsummary';
+qiime tools export --input-path oaccuracyresults.qzv --output-path out   && mkdir -p '$oaccuracyresults.files_path'
+&& cp -r out/* '$oaccuracyresults.files_path'
+&& mv '$oaccuracyresults.files_path/index.html' '$oaccuracyresults'
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-table: ARTIFACT FeatureTable[Frequency] Feature table containing all features that should be used for target prediction.                  [required]" name="itable" optional="False" type="data"/>
+		<param label="--m-metadata-column: COLUMN  MetadataColumn[Numeric] Numeric metadata column to use as prediction target. [required]" name="mmetadatacolumn" optional="False" type="text"/>
+		<param label="--p-test-size: PROPORTION Range(0.0, 1.0, inclusive_start=False) Fraction of input samples to exclude from training set and use for classifier testing.          [default: 0.2]" name="ptestsize" optional="True" type="float" value="0.2"/>
+		<param label="--p-step: PROPORTION Range(0.0, 1.0, inclusive_start=False) If optimize-feature-selection is True, step is the percentage of features to remove at each iteration. [default: 0.05]" name="pstep" optional="True" type="float" value="0.05"/>
+		<param label="--p-cv: INTEGER       Number of k-fold cross-validations to perform. Range(1, None)                                                [default: 5]" name="pcv" optional="True" type="integer" value="5"/>
+		<param label="--p-random-state: INTEGER Seed used by random number generator.        [optional]" name="prandomstate" optional="True" type="integer"/>
+		<param label="--p-n-estimators: INTEGER Range(1, None)     Number of trees to grow for estimation. More trees will improve predictive accuracy up to a threshold level, but will also increase time and memory requirements. This parameter only affects ensemble estimators, such as Random Forest, AdaBoost, ExtraTrees, and GradientBoosting.        [default: 100]" name="pnestimators" optional="True" type="integer" value="100" min="1"/>
+		<param label="--p-estimator: " name="pestimator" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="RandomForestRegressor">RandomForestRegressor</option>
+			<option value="ExtraTreesRegressor">ExtraTreesRegressor</option>
+			<option value="GradientBoostingRegressor">GradientBoostingRegressor</option>
+			<option value="AdaBoostRegressor">AdaBoostRegressor</option>
+			<option value="ElasticNet">ElasticNet</option>
+			<option value="Ridge">Ridge</option>
+			<option value="Lasso">Lasso</option>
+			<option value="KNeighborsRegressor">KNeighborsRegressor</option>
+			<option value="LinearSVR">LinearSVR</option>
+			<option value="SVR">SVR</option>
+		</param>
+		<param label="--p-optimize-feature-selection: --p-no-optimize-feature-selection Automatically optimize input feature selection using recursive feature elimination.         [default: False]" name="poptimizefeatureselection" selected="False" type="boolean"/>
+		<param label="--p-stratify: --p-no-stratify Evenly stratify training and test data among metadata categories. If True, all values in column must match at least two samples.                     [default: False]" name="pstratify" selected="False" type="boolean"/>
+		<param label="--p-parameter-tuning: --p-no-parameter-tuning Automatically tune hyperparameters using random grid search.                                [default: False]" name="pparametertuning" selected="False" type="boolean"/>
+		<param label="--p-missing-samples: " name="pmissingsamples" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="error">error</option>
+			<option value="ignore">ignore</option>
+		</param>
+
+		<repeat name="input_files_mmetadatafile" optional="True" title="--m-metadata-file">
+			<param label="--m-metadata-file: Metadata file or artifact viewable as metadata. This option may be supplied multiple times to merge metadata. [optional]" name="additional_input" type="data" format="tabular,qza,no_unzip.zip" />
+		</repeat>
+
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: sampleestimator.qza" name="osampleestimator"/>
+		<data format="qza" label="${tool.name} on ${on_string}: featureimportance.qza" name="ofeatureimportance"/>
+		<data format="qza" label="${tool.name} on ${on_string}: predictions.qza" name="opredictions"/>
+		<data format="html" label="${tool.name} on ${on_string}: modelsummary.qzv" name="omodelsummary"/>
+		<data format="html" label="${tool.name} on ${on_string}: accuracyresults.qzv" name="oaccuracyresults"/>
+	</outputs>
+	<help><![CDATA[
+Train and test a cross-validated supervised learning regressor.
+###############################################################
+
+Predicts a continuous sample metadata column using a supervised learning
+regressor. Splits input data into training and test sets. The training set
+is used to train and test the estimator using a stratified k-fold cross-
+validation scheme. This includes optional steps for automated feature
+extraction and hyperparameter optimization. The test set validates
+classification accuracy of the optimized estimator. Outputs classification
+results for test set. For more details on the learning algorithm, see
+http://scikit-learn.org/stable/supervised_learning.html
+
+Parameters
+----------
+table : FeatureTable[Frequency]
+    Feature table containing all features that should be used for target
+    prediction.
+metadata : MetadataColumn[Numeric]
+    Numeric metadata column to use as prediction target.
+test_size : Float % Range(0.0, 1.0, inclusive_start=False), optional
+    Fraction of input samples to exclude from training set and use for
+    classifier testing.
+step : Float % Range(0.0, 1.0, inclusive_start=False), optional
+    If optimize_feature_selection is True, step is the percentage of
+    features to remove at each iteration.
+cv : Int % Range(1, None), optional
+    Number of k-fold cross-validations to perform.
+random_state : Int, optional
+    Seed used by random number generator.
+n_estimators : Int % Range(1, None), optional
+    Number of trees to grow for estimation. More trees will improve
+    predictive accuracy up to a threshold level, but will also increase
+    time and memory requirements. This parameter only affects ensemble
+    estimators, such as Random Forest, AdaBoost, ExtraTrees, and
+    GradientBoosting.
+estimator : Str % Choices('RandomForestRegressor', 'ExtraTreesRegressor', 'GradientBoostingRegressor', 'AdaBoostRegressor', 'ElasticNet', 'Ridge', 'Lasso', 'KNeighborsRegressor', 'LinearSVR', 'SVR'), optional
+    Estimator method to use for sample prediction.
+optimize_feature_selection : Bool, optional
+    Automatically optimize input feature selection using recursive feature
+    elimination.
+stratify : Bool, optional
+    Evenly stratify training and test data among metadata categories. If
+    True, all values in column must match at least two samples.
+parameter_tuning : Bool, optional
+    Automatically tune hyperparameters using random grid search.
+missing_samples : Str % Choices('error', 'ignore'), optional
+    How to handle missing samples in metadata. "error" will fail if missing
+    samples are detected. "ignore" will cause the feature table and
+    metadata to be filtered, so that only samples found in both files are
+    retained.
+
+Returns
+-------
+sample_estimator : SampleEstimator[Regressor]
+    Trained sample estimator.
+feature_importance : FeatureData[Importance]
+    Importance of each input feature to model accuracy.
+predictions : SampleData[RegressorPredictions]
+    Predicted target values for each input sample.
+model_summary : Visualization
+    Summarized parameter and (if enabled) feature selection information for
+    the trained estimator.
+accuracy_results : Visualization
+    Accuracy results visualization.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_sample-classifier_scatterplot.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,69 @@
+<?xml version="1.0" ?>
+<tool id="qiime_sample-classifier_scatterplot" name="qiime sample-classifier scatterplot" version="2019.4">
+	<description> - Make 2D scatterplot and linear regression of regressor predictions.</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime sample-classifier scatterplot
+
+--i-predictions=$ipredictions
+--m-truth-column="$mtruthcolumn"
+
+--m-truth-file="$metadatafile"
+
+#if str($pmissingsamples) != 'None':
+ --p-missing-samples=$pmissingsamples
+#end if
+
+--o-visualization=ovisualization
+;
+qiime tools export --input-path ovisualization.qzv --output-path out   && mkdir -p '$ovisualization.files_path'
+&& cp -r out/* '$ovisualization.files_path'
+&& mv '$ovisualization.files_path/index.html' '$ovisualization';
+cp mtruthfile.qza $mtruthfile
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-predictions: ARTIFACT SampleData[RegressorPredictions] Predicted values to plot on y axis. Must be predictions of numeric data produced by a sample regressor.                                   [required]" name="ipredictions" optional="False" type="data"/>
+		<param label="--m-truth-column: COLUMN  MetadataColumn[Numeric] Metadata column (true values) to plot on x axis. [required]" name="mtruthcolumn" optional="False" type="text"/>
+		<param label="--p-missing-samples: " name="pmissingsamples" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="error">error</option>
+			<option value="ignore">ignore</option>
+		</param>
+
+		<param label="--m-truth-file: Metadata file or artifact viewable as metadata." name="metadatafile" type="data" format="tabular,qza,no_unzip.zip" />
+
+	</inputs>
+	<outputs>
+		<data format="html" label="${tool.name} on ${on_string}: visualization.qzv" name="ovisualization"/>
+	</outputs>
+	<help><![CDATA[
+Make 2D scatterplot and linear regression of regressor predictions.
+###################################################################
+
+Make a 2D scatterplot and linear regression of predicted vs. true values
+for a set of samples predicted using a sample regressor.
+
+Parameters
+----------
+predictions : SampleData[RegressorPredictions]
+    Predicted values to plot on y axis. Must be predictions of numeric data
+    produced by a sample regressor.
+truth : MetadataColumn[Numeric]
+    Metadata column (true values) to plot on x axis.
+missing_samples : Str % Choices('error', 'ignore'), optional
+    How to handle missing samples in metadata. "error" will fail if missing
+    samples are detected. "ignore" will cause the feature table and
+    metadata to be filtered, so that only samples found in both files are
+    retained.
+
+Returns
+-------
+visualization : Visualization
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_sample-classifier_split-table.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,113 @@
+<?xml version="1.0" ?>
+<tool id="qiime_sample-classifier_split-table" name="qiime sample-classifier split-table" version="2019.4">
+	<description> - Split a feature table into training and testing sets.</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime sample-classifier split-table
+
+--i-table=$itable
+--m-metadata-column="$mmetadatacolumn"
+
+
+
+#if $input_files_mmetadatafile:
+#def list_dict_to_string(list_dict):
+	#set $file_list = list_dict[0]['additional_input'].__getattr__('file_name')
+	#for d in list_dict[1:]:
+		#set $file_list = $file_list + ' --m-metadata-file=' + d['additional_input'].__getattr__('file_name')
+	#end for
+	#return $file_list
+#end def
+
+ --m-metadata-file=$list_dict_to_string($input_files_mmetadatafile)
+#end if
+
+
+
+#if $ptestsize:
+ --p-test-size=$ptestsize
+#end if
+
+#if str($prandomstate):
+ --p-random-state="$prandomstate"
+#end if
+
+#if $pnostratify:
+ --p-no-stratify
+#end if
+
+#if str($pmissingsamples) != 'None':
+ --p-missing-samples=$pmissingsamples
+#end if
+
+--o-training-table=otrainingtable
+--o-test-table=otesttable
+;
+cp otrainingtable.qza $otrainingtable;
+cp otesttable.qza $otesttable;
+cp mmetadatafile.qza $mmetadatafile
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-table: ARTIFACT FeatureTable[Frequency] Feature table containing all features that should be used for target prediction.                  [required]" name="itable" optional="False" type="data"/>
+		<param label="--m-metadata-column: COLUMN  MetadataColumn[Numeric | Categorical] Numeric metadata column to use as prediction target. [required]" name="mmetadatacolumn" optional="False" type="text"/>
+		<param label="--p-test-size: PROPORTION Range(0.0, 1.0, inclusive_start=False) Fraction of input samples to exclude from training set and use for classifier testing.          [default: 0.2]" name="ptestsize" optional="True" type="float" value="0.2" min="0" max="1" exclusive_end="True"/>
+		<param label="--p-random-state: INTEGER Seed used by random number generator.        [optional]" name="prandomstate" optional="True" type="integer"/>
+		<param label="--p-no-stratify: Evenly stratify training and test data among metadata categories. If True, all values in column must match at least two samples.                      [default: False]" name="pnostratify" selected="False" type="boolean"/>
+		<param label="--p-missing-samples: " name="pmissingsamples" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="error">error</option>
+			<option value="ignore">ignore</option>
+		</param>
+
+		<repeat name="input_files_mmetadatafile" optional="True" title="--m-metadata-file">
+			<param label="--m-metadata-file: Metadata file or artifact viewable as metadata. This option may be supplied multiple times to merge metadata. [optional]" name="additional_input" type="data" format="tabular,qza,no_unzip.zip" />
+		</repeat>
+
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: trainingtable.qza" name="otrainingtable"/>
+		<data format="qza" label="${tool.name} on ${on_string}: testtable.qza" name="otesttable"/>
+	</outputs>
+	<help><![CDATA[
+Split a feature table into training and testing sets.
+#####################################################
+
+Split a feature table into training and testing sets. By default stratifies
+training and test sets on a metadata column, such that values in that
+column are evenly represented across training and test sets.
+
+Parameters
+----------
+table : FeatureTable[Frequency]
+    Feature table containing all features that should be used for target
+    prediction.
+metadata : MetadataColumn[Numeric | Categorical]
+    Numeric metadata column to use as prediction target.
+test_size : Float % Range(0.0, 1.0, inclusive_start=False), optional
+    Fraction of input samples to exclude from training set and use for
+    classifier testing.
+random_state : Int, optional
+    Seed used by random number generator.
+stratify : Bool, optional
+    Evenly stratify training and test data among metadata categories. If
+    True, all values in column must match at least two samples.
+missing_samples : Str % Choices('error', 'ignore'), optional
+    How to handle missing samples in metadata. "error" will fail if missing
+    samples are detected. "ignore" will cause the feature table and
+    metadata to be filtered, so that only samples found in both files are
+    retained.
+
+Returns
+-------
+training_table : FeatureTable[Frequency]
+    Feature table containing training samples
+test_table : FeatureTable[Frequency]
+    Feature table containing test samples
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_sample-classifier_summarize.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,44 @@
+<?xml version="1.0" ?>
+<tool id="qiime_sample-classifier_summarize" name="qiime sample-classifier summarize" version="2019.4">
+	<description> - Summarize parameter and feature extraction information for a trained estimator.</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime sample-classifier summarize 
+
+--i-sample-estimator=$isampleestimator
+
+--o-visualization=ovisualization
+;
+qiime tools export --input-path ovisualization.qzv --output-path out   && mkdir -p '$ovisualization.files_path'
+&& cp -r out/* '$ovisualization.files_path'
+&& mv '$ovisualization.files_path/index.html' '$ovisualization'
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-sample-estimator: ARTIFACT SampleEstimator[Classifier | Regressor] Sample estimator trained with fit_classifier or fit_regressor.                               [required]" name="isampleestimator" optional="False" type="data"/>
+	</inputs>
+	<outputs>
+		<data format="html" label="${tool.name} on ${on_string}: visualization.qzv" name="ovisualization"/>
+	</outputs>
+	<help><![CDATA[
+Summarize parameter and feature extraction information for a trained estimator.
+###############################################################################
+
+Summarize parameter and feature extraction information for a trained
+estimator.
+
+Parameters
+----------
+sample_estimator : SampleEstimator[Classifier | Regressor]
+    Sample estimator trained with fit_classifier or fit_regressor.
+
+Returns
+-------
+visualization : Visualization
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_taxa_barplot.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,70 @@
+<?xml version="1.0" ?>
+<tool id="qiime_taxa_barplot" name="qiime taxa barplot" version="2019.4">
+	<description> - Visualize taxonomy with an interactive bar plot</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime taxa barplot
+
+--i-table=$itable
+--i-taxonomy=$itaxonomy
+
+#if $input_files_mmetadatafile:
+#def list_dict_to_string(list_dict):
+	#set $file_list = list_dict[0]['additional_input'].__getattr__('file_name')
+	#for d in list_dict[1:]:
+		#set $file_list = $file_list + ' --m-metadata-file=' + d['additional_input'].__getattr__('file_name')
+	#end for
+	#return $file_list
+#end def
+ --m-metadata-file=$list_dict_to_string($input_files_mmetadatafile)
+#end if
+
+--o-visualization=ovisualization
+;
+qiime tools export --input-path ovisualization.qzv --output-path out   && mkdir -p '$ovisualization.files_path'
+&& cp -r out/* '$ovisualization.files_path'
+&& mv '$ovisualization.files_path/index.html' '$ovisualization';
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-table: ARTIFACT FeatureTable[Frequency] Feature table to visualize at various taxonomic levels.                                    [required]" name="itable" optional="False" type="data"/>
+		<param format="qza,no_unzip.zip" label="--i-taxonomy: ARTIFACT FeatureData[Taxonomy] Taxonomic annotations for features in the provided feature table. All features in the feature table must have a corresponding taxonomic annotation. Taxonomic annotations that are not present in the feature table will be ignored.                           [required]" name="itaxonomy" optional="False" type="data"/>
+
+		<repeat name="input_files_mmetadatafile" optional="True" title="--m-metadata-file">
+			<param label="--m-metadata-file: Metadata file or artifact viewable as metadata. This option may be supplied multiple times to merge metadata. [optional]" name="additional_input" type="data" format="tabular,qza,no_unzip.zip" />
+		</repeat>
+
+	</inputs>
+	<outputs>
+		<data format="html" label="${tool.name} on ${on_string}: visualization.qzv" name="ovisualization"/>
+	</outputs>
+	<help><![CDATA[
+Visualize taxonomy with an interactive bar plot
+###############################################
+
+This visualizer produces an interactive barplot visualization of
+taxonomies. Interactive features include multi-level sorting, plot
+recoloring, sample relabeling, and SVG figure export.
+
+Parameters
+----------
+table : FeatureTable[Frequency]
+    Feature table to visualize at various taxonomic levels.
+taxonomy : FeatureData[Taxonomy]
+    Taxonomic annotations for features in the provided feature table. All
+    features in the feature table must have a corresponding taxonomic
+    annotation. Taxonomic annotations that are not present in the feature
+    table will be ignored.
+metadata : Metadata
+    The sample metadata.
+
+Returns
+-------
+visualization : Visualization
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_taxa_collapse.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,58 @@
+<?xml version="1.0" ?>
+<tool id="qiime_taxa_collapse" name="qiime taxa collapse" version="2019.4">
+	<description> - Collapse features by their taxonomy at the specified level</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime taxa collapse
+
+--i-table=$itable
+--i-taxonomy=$itaxonomy
+--p-level="$plevel"
+
+--o-collapsed-table=ocollapsedtable
+;
+cp ocollapsedtable.qza $ocollapsedtable
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-table: ARTIFACT FeatureTable[Frequency] Feature table to be collapsed.             [required]" name="itable" optional="False" type="data"/>
+		<param format="qza,no_unzip.zip" label="--i-taxonomy: ARTIFACT FeatureData[Taxonomy] Taxonomic annotations for features in the provided feature table. All features in the feature table must have a corresponding taxonomic annotation. Taxonomic annotations that are not present in the feature table will be ignored.                           [required]" name="itaxonomy" optional="False" type="data"/>
+		<param label="--p-level: INTEGER      The taxonomic level at which the features should be collapsed. All ouput features will have exactly this many levels of taxonomic annotation.       [required]" name="plevel" optional="False" value="" type="integer"/>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: collapsedtable.qza" name="ocollapsedtable"/>
+	</outputs>
+	<help><![CDATA[
+Collapse features by their taxonomy at the specified level
+##########################################################
+
+Collapse groups of features that have the same taxonomic assignment through
+the specified level. The frequencies of all features will be summed when
+they are collapsed.
+
+Parameters
+----------
+table : FeatureTable[Frequency]
+    Feature table to be collapsed.
+taxonomy : FeatureData[Taxonomy]
+    Taxonomic annotations for features in the provided feature table. All
+    features in the feature table must have a corresponding taxonomic
+    annotation. Taxonomic annotations that are not present in the feature
+    table will be ignored.
+level : Int
+    The taxonomic level at which the features should be collapsed. All
+    ouput features will have exactly this many levels of taxonomic
+    annotation.
+
+Returns
+-------
+collapsed_table : FeatureTable[Frequency]
+    The resulting feature table, where all features are now taxonomic
+    annotations with the user-specified number of levels.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_taxa_filter-seqs.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,121 @@
+<?xml version="1.0" ?>
+<tool id="qiime_taxa_filter-seqs" name="qiime taxa filter-seqs" version="2019.4">
+	<description> - Taxonomy-based feature sequence filter.</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime taxa filter-seqs
+
+--i-sequences=$isequences
+
+
+#if str( $id_to_taxonomy_fp.selector ) == 'history'
+	#set $tax = $id_to_taxonomy_fp.taxonomy_fp
+	--i-taxonomy '$tax'
+#else:
+	#set $tax = $id_to_taxonomy_fp.taxonomy_fp.fields.path
+	--i-taxonomy '$tax'
+#end if
+
+
+#if str($pinclude):
+ --p-include="$pinclude"
+#end if
+
+#if str($pexclude):
+ --p-exclude="$pexclude"
+#end if
+
+#if str($pquerydelimiter):
+ --p-query-delimiter="$pquerydelimiter"
+#end if
+
+#if str($pmode) != 'None':
+ --p-mode=$pmode
+#end if
+
+--o-filtered-sequences=ofilteredsequences
+;
+cp ofilteredsequences.qza $ofilteredsequences
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-sequences: ARTIFACT FeatureData[Sequence] Feature sequences to be filtered.         [required]" name="isequences" optional="False" type="data"/>
+
+		<conditional name="id_to_taxonomy_fp" optional="True">
+		   <param name="selector" type="select" label="Reference taxonomy to query">
+			  <option value="cached">Public databases</option>
+			  <option value="history">Databases from your history</option>
+		   </param>
+		   <when value="cached">
+			  <param argument="--taxonomy_fp" label="Reference taxonomy" type="select" optional="True">
+				 <options from_data_table="qiime_taxonomy" />
+			  </param>
+		   </when>
+		   <when value="history">
+			  <param argument="--taxonomy_fp" type="data" format="qza,no_unzip.zip" label="Reference databases" optional="True" />
+		   </when>
+		</conditional>
+
+		<param label="--p-include: TEXT        One or more search terms that indicate which taxa should be included in the resulting sequences. If providing more than one term, terms should be delimited by the query-delimiter character. By default, all taxa will be included.       [optional]" name="pinclude" optional="True" type="text"/>
+		<param label="--p-exclude: TEXT        One or more search terms that indicate which taxa should be excluded from the resulting sequences. If providing more than one term, terms should be delimited by the query-delimiter character. By default, no taxa will be excluded.        [optional]" name="pexclude" optional="True" type="text"/>
+		<param label="--p-query-delimiter: TEXT The string used to delimit multiple search terms provided to include or exclude. This parameter should only need to be modified if the default delimiter (a comma) is used in the provided taxonomic annotations.                [default: ',']" name="pquerydelimiter" optional="True" type="text" value="','"/>
+		<param label="--p-mode: " name="pmode" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="exact">exact</option>
+			<option value="contains">contains</option>
+		</param>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: filteredsequences.qza" name="ofilteredsequences"/>
+	</outputs>
+	<help><![CDATA[
+Taxonomy-based feature sequence filter.
+#######################################
+
+This method filters sequences based on their taxonomic annotations.
+Features can be retained in the result by specifying one or more include
+search terms, and can be filtered out of the result by specifying one or
+more exclude search terms. If both include and exclude are provided, the
+inclusion critera will be applied before the exclusion critera. Either
+include or exclude terms (or both) must be provided.
+
+Parameters
+----------
+sequences : FeatureData[Sequence]
+    Feature sequences to be filtered.
+taxonomy : FeatureData[Taxonomy]
+    Taxonomic annotations for features in the provided feature sequences.
+    All features in the feature sequences must have a corresponding
+    taxonomic annotation. Taxonomic annotations for features that are not
+    present in the feature sequences will be ignored.
+include : Str, optional
+    One or more search terms that indicate which taxa should be included in
+    the resulting sequences. If providing more than one term, terms should
+    be delimited by the query-delimiter character. By default, all taxa
+    will be included.
+exclude : Str, optional
+    One or more search terms that indicate which taxa should be excluded
+    from the resulting sequences. If providing more than one term, terms
+    should be delimited by the query-delimiter character. By default, no
+    taxa will be excluded.
+query_delimiter : Str, optional
+    The string used to delimit multiple search terms provided to include or
+    exclude. This parameter should only need to be modified if the default
+    delimiter (a comma) is used in the provided taxonomic annotations.
+mode : Str % Choices('exact', 'contains'), optional
+    Mode for determining if a search term matches a taxonomic annotation.
+    "contains" requires that the annotation has the term as a substring;
+    "exact" requires that the annotation is a perfect match to a search
+    term.
+
+Returns
+-------
+filtered_sequences : FeatureData[Sequence]
+    The taxonomy-filtered feature sequences.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_taxa_filter-table.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,123 @@
+<?xml version="1.0" ?>
+<tool id="qiime_taxa_filter-table" name="qiime taxa filter-table" version="2019.4">
+	<description> - Taxonomy-based feature table filter.</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime taxa filter-table
+
+--i-table=$itable
+
+
+#if str( $id_to_taxonomy_fp.selector ) == 'history'
+	#set $tax = $id_to_taxonomy_fp.taxonomy_fp
+	--i-taxonomy '$tax'
+#else:
+	#set $tax = $id_to_taxonomy_fp.taxonomy_fp.fields.path
+	--i-taxonomy '$tax'
+#end if
+
+
+#if str($pinclude):
+ --p-include="$pinclude"
+#end if
+
+#if str($pexclude):
+ --p-exclude="$pexclude"
+#end if
+
+#if str($pquerydelimiter):
+ --p-query-delimiter="$pquerydelimiter"
+#end if
+
+#if str($pmode) != 'None':
+ --p-mode=$pmode
+#end if
+
+--o-filtered-table=ofilteredtable
+;
+cp ofilteredtable.qza $ofilteredtable
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-table: ARTIFACT FeatureTable[Frequency] Feature table to be filtered.              [required]" name="itable" optional="False" type="data"/>
+
+		<conditional name="id_to_taxonomy_fp" optional="True">
+		   <param name="selector" type="select" label="Reference taxonomy to query">
+			  <option value="cached">Public databases</option>
+			  <option value="history">Databases from your history</option>
+		   </param>
+		   <when value="cached">
+			  <param argument="--taxonomy_fp" label="Reference taxonomy" type="select" optional="True">
+				 <options from_data_table="qiime_taxonomy" />
+			  </param>
+		   </when>
+		   <when value="history">
+			  <param argument="--taxonomy_fp" type="data" format="qza,no_unzip.zip" label="Reference databases" optional="True" />
+		   </when>
+		</conditional>
+
+		<param label="--p-include: TEXT       One or more search terms that indicate which taxa should be included in the resulting table. If providing more than one term, terms should be delimited by the query-delimiter character. By default, all taxa will be included.        [optional]" name="pinclude" optional="True" type="text"/>
+		<param label="--p-exclude: TEXT       One or more search terms that indicate which taxa should be excluded from the resulting table. If providing more than one term, terms should be delimited by the query-delimiter character. By default, no taxa will be excluded.         [optional]" name="pexclude" optional="True" type="text"/>
+		<param label="--p-query-delimiter: TEXT The string used to delimit multiple search terms provided to include or exclude. This parameter should only need to be modified if the default delimiter (a comma) is used in the provided taxonomic annotations. [default: ',']" name="pquerydelimiter" optional="True" type="text" value="','"/>
+		<param label="--p-mode: " name="pmode" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="exact">exact</option>
+			<option value="contains">contains</option>
+		</param>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: filteredtable.qza" name="ofilteredtable"/>
+	</outputs>
+	<help><![CDATA[
+Taxonomy-based feature table filter.
+####################################
+
+This method filters features from a table based on their taxonomic
+annotations. Features can be retained in the resulting table by specifying
+one or more include search terms, and can be filtered out of the resulting
+table by specifying one or more exclude search terms. If both include and
+exclude are provided, the inclusion critera will be applied before the
+exclusion critera. Either include or exclude terms (or both) must be
+provided. Any samples that have a total frequency of zero after filtering
+will be removed from the resulting table.
+
+Parameters
+----------
+table : FeatureTable[Frequency]
+    Feature table to be filtered.
+taxonomy : FeatureData[Taxonomy]
+    Taxonomic annotations for features in the provided feature table. All
+    features in the feature table must have a corresponding taxonomic
+    annotation. Taxonomic annotations for features that are not present in
+    the feature table will be ignored.
+include : Str, optional
+    One or more search terms that indicate which taxa should be included in
+    the resulting table. If providing more than one term, terms should be
+    delimited by the query-delimiter character. By default, all taxa will
+    be included.
+exclude : Str, optional
+    One or more search terms that indicate which taxa should be excluded
+    from the resulting table. If providing more than one term, terms should
+    be delimited by the query-delimiter character. By default, no taxa will
+    be excluded.
+query_delimiter : Str, optional
+    The string used to delimit multiple search terms provided to include or
+    exclude. This parameter should only need to be modified if the default
+    delimiter (a comma) is used in the provided taxonomic annotations.
+mode : Str % Choices('exact', 'contains'), optional
+    Mode for determining if a search term matches a taxonomic annotation.
+    "contains" requires that the annotation has the term as a substring;
+    "exact" requires that the annotation is a perfect match to a search
+    term.
+
+Returns
+-------
+filtered_table : FeatureTable[Frequency]
+    The taxonomy-filtered feature table.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_tools_export.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,30 @@
+<?xml version="1.0" ?>
+<tool id="qiime_tools_export" name="qiime tools export --input-path" version="2019.4">
+	<description> - Export data from a QIIME 2 Artifact or Visualization.</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[qiime tools export --input-path $isequences --output-dir test
+	]]></command>
+	<inputs>
+	<param format="qza,no_unzip.zip" label="Input artifact to export! [required]" name="isequences" optional="False" type="data"/></inputs>
+	
+	<outputs>
+    <data format="txt" name="report">
+        <discover_datasets pattern="__designation_and_ext__" directory="test" visible="true" />
+    </data>
+	</outputs>
+	
+	<!--<outputs>
+	
+   <collection type="list" label="Exported artifact" name="output1">
+     <discover_datasets pattern="*.*" directory="test" />
+   </collection>
+ </outputs>-->
+	<help>
+</help>
+<macros>
+	<import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation" />
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_tools_export_collection.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tool id="qiime_tools_export_collection" name="qiime tools export --input-path collection" version="2019.4">
+   <description>- Export data from a QIIME 2 Artifact or Visualization.</description>
+   <requirements>
+      <requirement type="package" version="2019.4">qiime2</requirement>
+   </requirements>
+   <command><![CDATA[qiime tools export --input-path $isequences --output-dir test && cd test && gunzip *]]></command>
+   <inputs>
+      <param format="qza,no_unzip.zip" label="Input artifact to export! [required]" name="isequences" optional="False" type="data" />
+   </inputs>
+
+   <outputs>
+      <collection type="list" label="Export artifact to collection" name="output">
+         <discover_datasets pattern="__designation_and_ext__" directory="test" />
+      </collection>
+   </outputs>
+   <help />
+<macros>
+	<import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation" />
+</tool>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_tools_export_paired_collection.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tool id="qiime_tools_export_paired_collection" name="qiime tools export --input-path to paired collection" version="2019.4">
+   <description>- Export data from a QIIME 2 Artifact or Visualization.</description>
+   <requirements>
+      <requirement type="package" version="2019.4">qiime2</requirement>
+   </requirements>
+   <command><![CDATA[qiime tools export --input-path $isequences --output-dir test && cd test && gunzip *]]></command>
+   <inputs>
+      <param format="qza,no_unzip.zip" label="Input artifact to export! [required]" name="isequences" optional="False" type="data" />
+   </inputs>
+
+   <outputs>
+      <collection type="paired" label="Export artifact to collection" name="output">
+         <discover_datasets pattern="__designation_and_ext__" directory="test" />
+      </collection>
+   </outputs>
+   <help />
+<macros>
+	<import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation" />
+</tool>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_tools_import.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,259 @@
+<?xml version="1.0" ?>
+<tool id="qiime_tools_import" name="qiime tools import" version="2019.4">
+	<description> - Import data into a new QIIME 2 Artifact.</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command>
+<![CDATA[
+mkdir input;
+
+#set $in_= 'input'
+
+
+#if '__ob__' in str($semantic_type):
+	#set $type_temp = str($semantic_type).replace('__ob__', '[')
+	#set $type_temp = str($type_temp).replace('__cb__', ']')
+	#set $semantic_type = $type_temp
+#end if
+
+#def is_fastq($f_test)
+	#set $f = open($f_test, 'rb')
+	#if str($f.readline()[0]) == '@'
+		#$f.close()
+		#return True
+	#end if
+
+	#$f.close()
+	#return False
+#end def
+
+
+## Symlinks creation or On the fly creation of a combo file
+#if $input_type.type == 'list_list'
+	## Symlinks creation or On the fly creation of a combo file
+	#for $f in $input_type.list_list:
+
+		#set $is_fastq_file = $is_fastq(str($f))
+
+		#if $is_fastq_file:
+			#set $file_for_processing = "'input/" + $f.name + '.gz' + "'"
+			gzip -c ${f} > $file_for_processing;
+		#else
+			#set $file_for_processing = "'input/" + $f.name + "'"
+			ln -s ${f}  $file_for_processing;
+		#end if
+	#end for
+	#if 'SingleEndFastqManifestPhred' in str($sourceformat):
+			#set $cwd = str($outputpath.extra_files_path) + "_manifest_file.txt"
+			#set $m_file = open(str($cwd), 'w')
+			$m_file.write("sample-id,absolute-filepath,direction\n")
+			#for $f in $input_type.list_list:
+				$m_file.write(str($f.name).split("_")[0]+",$PWD/input/"+str($f.name)+".gz,forward\n")
+			#end for
+			$m_file.close()
+			#set $in_= str($cwd)
+		#end if
+	
+
+#elif $input_type.type == 'list_paired_collection':
+  
+	#set $cwd = str($outputpath.extra_files_path) + "_manifest_file.txt"
+	#set $m_file = open(str($cwd), 'w')
+	$m_file.write("sample-id,absolute-filepath,direction\n")	
+
+	#for $pair in $input_type.list_paired_collection:
+		#set $forward_is_fastq_file = $is_fastq(str($pair.forward))
+		#set $reverse_is_fastq_file = $is_fastq(str($pair.reverse))
+		
+		#if $forward_is_fastq_file:
+	 		gzip -c ${pair.forward} > input/${pair.name}_R1_001.fastq.gz;
+	 		$m_file.write(str($pair.name).split("_")[0]+",$PWD/input/"+str($pair.name)+"_R1_001.fastq.gz,forward\n")
+		#else
+	  		ln -s ${pair.forward} input/${pair.name}_R1_001.fastq.gz;
+			$m_file.write(str($pair.name).split("_")[0]+",$PWD/input/"+str($pair.name)+"_R1_001.fastq.gz,forward\n")
+        #end if
+
+	 	#if $reverse_is_fastq_file:
+	 		gzip -c ${pair.reverse} > input/${pair.name}_R2_001.fastq.gz;
+			$m_file.write(str($pair.name).split("_")[0]+",$PWD/input/"+str($pair.name)+"_R2_001.fastq.gz,reverse\n")
+        #else
+	  		ln -s ${pair.reverse} input/${pair.name}_R2_001.fastq.gz;
+			$m_file.write(str($pair.name).split("_")[0]+",$PWD/input/"+str($pair.name)+"_R2_001.fastq.gz,reverse\n")
+	  	#end if
+	#end for
+
+	
+	$m_file.close()
+	#if 'PairedEndFastqManifestPhred' in str($sourceformat):
+		#set $in_= str($cwd)
+	#elif  'Casava' in str($sourceformat):
+		#set $in_= 'input'
+	#end if
+
+#else
+	#set $res = $is_fastq(str($file))
+
+	#if $res
+		gzip -c ${file} > ${file.name}.gz;
+		#set $in_= $file.name + '.gz'
+
+	#else
+		#set $in_= str($file)
+	#end if
+   
+   #if "MultiplexedSingleEndBarcodeInSequence" in str($semantic_type):      
+ 			mv *_R1_* forward.fastq.gz;
+	    #set $in_= 'forward.fastq.gz';
+   #end if 
+
+#end if
+
+
+## rename files to predefined names for "MultiplexedPairedEndBarcodeInSequence"
+#if "MultiplexedPairedEndBarcodeInSequence" in str($semantic_type):
+		mv input/*_R1_* input/forward.fastq.gz;
+		mv input/*_R2_* input/reverse.fastq.gz;
+#end if
+
+
+qiime tools import
+
+--type="$semantic_type"
+
+--input-path=$in_
+
+--output-path=outputpath.qza
+
+#if str($sourceformat) != 'None':
+	#if '__ob__' in str($sourceformat):
+  		#set $sourceformat_temp = str($sourceformat).replace('__ob__', '[')
+		#set $sourceformat_temp = str($sourceformat_temp).replace('__cb__', ']')
+  		#set $sourceformat = $sourceformat_temp
+	#end if
+ --source-format="$sourceformat"
+#end if
+;
+cp outputpath.qza $outputpath
+]]>
+	</command>
+	<inputs>
+		<conditional name="input_type">
+			<param name="type" type="select" label="Select a way to provide data, either using a file or a list" help="">
+				<option value="regular">Input file</option>
+                <option selected="true" value="list_paired_collection">Multiple pairs - Combo mode (list:paired collection)</option>
+				<option value="list_list">Input list</option>
+			</param>
+
+			<when value="regular">
+				<param name="file" type="data" multiple="false" label="Input file" />
+			</when>
+		 	<when value="list_paired_collection">
+            	<param name="list_paired_collection" type="data_collection" collection_type="list:paired" label="Fastq pairs (collection)" help="Dataset collection made from multiple pairs of files" />
+         	</when>
+			<when value="list_list">
+				<param name="list_list" type="data_collection" collection_type="list" label="Input list" />
+			</when>
+		</conditional>
+
+		<param label="--type: The semantic type of the artifact that will be created upon importing. [required]" name="semantic_type" optional="False" type="select">
+			<option value="DeblurStats">DeblurStats</option>
+			<option value="DistanceMatrix">DistanceMatrix</option>
+			<option value="EMPPairedEndSequences">EMPPairedEndSequences</option>
+			<option value="EMPSingleEndSequences">EMPSingleEndSequences</option>
+			<option value="FeatureData[AlignedSequence]">FeatureData[AlignedSequence]</option>
+			<option value="FeatureData[PairedEndSequence]">FeatureData[PairedEndSequence]</option>
+			<option value="FeatureData[Sequence]">FeatureData[Sequence]</option>
+			<option value="FeatureData[Taxonomy]">FeatureData[Taxonomy]</option>
+			<option value="FeatureTable[Balance]">FeatureTable[Balance]</option>
+			<option value="FeatureTable[Composition]">FeatureTable[Composition]</option>
+			<option value="FeatureTable[Frequency]">FeatureTable[Frequency]</option>
+			<option value="FeatureTable[PresenceAbsence]">FeatureTable[PresenceAbsence]</option>
+			<option value="FeatureTable[RelativeFrequency]">FeatureTable[RelativeFrequency]</option>
+			<option value="Hierarchy">Hierarchy</option>
+			<option value="MultiplexedPairedEndBarcodeInSequence">MultiplexedPairedEndBarcodeInSequence</option>
+			<option value="MultiplexedSingleEndBarcodeInSequence">MultiplexedSingleEndBarcodeInSequence</option>
+			<option value="PCoAResults">PCoAResults</option>
+			<option value="Phylogeny[Rooted]">Phylogeny[Rooted]</option>
+			<option value="Phylogeny[Unrooted]">Phylogeny[Unrooted]</option>
+			<option value="QualityFilterStats">QualityFilterStats</option>
+			<option value="RawSequences">RawSequences</option>
+			<option value="SampleData[AlphaDiversity]">SampleData[AlphaDiversity]</option>
+			<option value="SampleData[BooleanSeries]">SampleData[BooleanSeries]</option>
+			<option value="SampleData[DADA2Stats]">SampleData[DADA2Stats]</option>
+			<option value="SampleData[FirstDifferences]">SampleData[FirstDifferences]</option>
+			<option value="SampleData[JoinedSequencesWithQuality]">SampleData[JoinedSequencesWithQuality]</option>
+			<option selected="True" value="SampleData[PairedEndSequencesWithQuality]">SampleData[PairedEndSequencesWithQuality]</option>
+			<option value="SampleData[SequencesWithQuality]">SampleData[SequencesWithQuality]</option>
+			<option value="SampleData[Sequences]">SampleData[Sequences]</option>
+			<option value="TaxonomicClassifier">TaxonomicClassifier</option>
+			<option value="UchimeStats">UchimeStats</option>
+		</param>
+
+		<param label="--source-format: The format of the data to be imported. If not provided, data must be in the format expected by the semantic type provided via --type." name="sourceformat" optional="True" type="select">
+			<option value="AlignedDNAFASTAFormat">AlignedDNAFASTAFormat</option>
+			<option value="AlignedDNASequencesDirectoryFormat">AlignedDNASequencesDirectoryFormat</option>
+			<option value="AlphaDiversityDirectoryFormat">AlphaDiversityDirectoryFormat</option>
+			<option value="AlphaDiversityFormat">AlphaDiversityFormat</option>
+			<option value="BIOMV100DirFmt">BIOMV100DirFmt</option>
+			<option value="BIOMV100Format">BIOMV100Format</option>
+			<option value="BIOMV210DirFmt">BIOMV210DirFmt</option>
+			<option value="BIOMV210Format">BIOMV210Format</option>
+			<option value="BooleanSeriesDirectoryFormat">BooleanSeriesDirectoryFormat</option>
+			<option value="BooleanSeriesFormat">BooleanSeriesFormat</option>
+			<option value="CasavaOneEightLanelessPerSampleDirFmt">CasavaOneEightLanelessPerSampleDirFmt</option>
+			<option value="CasavaOneEightSingleLanePerSampleDirFmt">CasavaOneEightSingleLanePerSampleDirFmt</option>
+			<option value="DADA2StatsDirFmt">DADA2StatsDirFmt</option>
+			<option value="DADA2StatsFormat">DADA2StatsFormat</option>
+			<option value="DNAFASTAFormat">DNAFASTAFormat</option>
+			<option value="DNASequencesDirectoryFormat">DNASequencesDirectoryFormat</option>
+			<option value="DeblurStatsDirFmt">DeblurStatsDirFmt</option>
+			<option value="DeblurStatsFmt">DeblurStatsFmt</option>
+			<option value="DistanceMatrixDirectoryFormat">DistanceMatrixDirectoryFormat</option>
+			<option value="EMPPairedEndCasavaDirFmt">EMPPairedEndCasavaDirFmt</option>
+			<option value="EMPPairedEndDirFmt">EMPPairedEndDirFmt</option>
+			<option value="EMPSingleEndCasavaDirFmt">EMPSingleEndCasavaDirFmt</option>
+			<option value="EMPSingleEndDirFmt">EMPSingleEndDirFmt</option>
+			<option value="FastqGzFormat">FastqGzFormat</option>
+			<option value="FirstDifferencesDirectoryFormat">FirstDifferencesDirectoryFormat</option>
+			<option value="FirstDifferencesFormat">FirstDifferencesFormat</option>
+			<option value="HeaderlessTSVTaxonomyDirectoryFormat">HeaderlessTSVTaxonomyDirectoryFormat</option>
+			<option value="HeaderlessTSVTaxonomyFormat">HeaderlessTSVTaxonomyFormat</option>
+			<option value="LSMatFormat">LSMatFormat</option>
+			<option value="MultiplexedPairedEndBarcodeInSequenceDirFmt">MultiplexedPairedEndBarcodeInSequenceDirFmt</option>
+			<option value="MultiplexedSingleEndBarcodeInSequenceDirFmt">MultiplexedSingleEndBarcodeInSequenceDirFmt</option>
+			<option value="NewickDirectoryFormat">NewickDirectoryFormat</option>
+			<option value="NewickFormat">NewickFormat</option>
+			<option value="OrdinationDirectoryFormat">OrdinationDirectoryFormat</option>
+			<option value="OrdinationFormat">OrdinationFormat</option>
+			<option value="PairedDNASequencesDirectoryFormat">PairedDNASequencesDirectoryFormat</option>
+			<option selected="True" value="PairedEndFastqManifestPhred33">PairedEndFastqManifestPhred33</option>
+			<option value="PairedEndFastqManifestPhred64">PairedEndFastqManifestPhred64</option>
+			<option value="QIIME1DemuxDirFmt">QIIME1DemuxDirFmt</option>
+			<option value="QIIME1DemuxFormat">QIIME1DemuxFormat</option>
+			<option value="QualityFilterStatsDirFmt">QualityFilterStatsDirFmt</option>
+			<option value="QualityFilterStatsFmt">QualityFilterStatsFmt</option>
+			<option value="SingleEndFastqManifestPhred33">SingleEndFastqManifestPhred33</option>
+			<option value="SingleEndFastqManifestPhred64">SingleEndFastqManifestPhred64</option>
+			<option value="SingleLanePerSamplePairedEndFastqDirFmt">SingleLanePerSamplePairedEndFastqDirFmt</option>
+			<option value="SingleLanePerSampleSingleEndFastqDirFmt">SingleLanePerSampleSingleEndFastqDirFmt</option>
+			<option value="TSVTaxonomyDirectoryFormat">TSVTaxonomyDirectoryFormat</option>
+			<option value="TSVTaxonomyFormat">TSVTaxonomyFormat</option>
+			<option value="TaxonomicClassiferTemporaryPickleDirFmt">TaxonomicClassiferTemporaryPickleDirFmt</option>
+			<option value="UchimeStatsDirFmt">UchimeStatsDirFmt</option>
+			<option value="UchimeStatsFmt">UchimeStatsFmt</option>
+		</param>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: outputpath.qza" name="outputpath"/>
+	</outputs>
+	    <stdio>
+        <exit_code range="2"   level="warning"   description="Error" />
+    </stdio>
+	<help>
+</help>
+<macros>
+	<import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation" />
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_vsearch_cluster-features-closed-reference.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,104 @@
+<?xml version="1.0" ?>
+<tool id="qiime_vsearch_cluster-features-closed-reference" name="qiime vsearch cluster-features-closed-reference" version="2019.4">
+	<description> -  Closed-reference clustering of features.</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime vsearch cluster-features-closed-reference
+--i-sequences=$isequences
+--i-table=$itable
+--i-reference-sequences=$ireferencesequences
+--p-perc-identity="$ppercidentity"
+
+#if str($pstrand) != 'None':
+ --p-strand=$pstrand
+#end if
+
+#set $pthreads = '${GALAXY_SLOTS:-4}'
+
+#if str($pthreads):
+ --p-threads="$pthreads"
+#end if
+
+--o-clustered-table=oclusteredtable
+--o-clustered-sequences=oclusteredsequences
+--o-unmatched-sequences=ounmatchedsequences
+;
+cp oclusteredtable.qza $oclusteredtable;
+cp oclusteredsequences.qza $oclusteredsequences;
+cp ounmatchedsequences.qza $ounmatchedsequences
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-sequences: ARTIFACT FeatureData[Sequence] The sequences corresponding to the features in table.                                    [required]" name="isequences" optional="False" type="data"/>
+		<param format="qza,no_unzip.zip" label="--i-table: ARTIFACT FeatureTable[Frequency] The feature table to be clustered.        [required]" name="itable" optional="False" type="data"/>
+		<param format="qza,no_unzip.zip" label="--i-reference-sequences: ARTIFACT FeatureData[Sequence] The sequences to use as cluster centroids. [required]" name="ireferencesequences" optional="False" type="data"/>
+		<param label="--p-perc-identity: PROPORTION Range(0, 1, inclusive_start=False, inclusive_end=True)   The percent identity at which clustering should be performed. This parameter maps to vsearch's --id parameter.                                [required]" name="ppercidentity" optional="False" type="float" value="" min="0" max="1" exclude_max="False" />
+		<param label="--p-strand: " name="pstrand" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="plus">plus</option>
+			<option value="both">both</option>
+		</param>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: clusteredtable.qza" name="oclusteredtable"/>
+		<data format="qza" label="${tool.name} on ${on_string}: clusteredsequences.qza" name="oclusteredsequences"/>
+		<data format="qza" label="${tool.name} on ${on_string}: unmatchedsequences.qza" name="ounmatchedsequences"/>
+	</outputs>
+	<help><![CDATA[
+Open-reference clustering of features.
+######################################
+
+Given a feature table and the associated feature sequences, cluster the
+features against a reference database based on user-specified percent
+identity threshold of their sequences. Any sequences that don't match are
+then clustered de novo. This is not a general-purpose clustering method,
+but rather is intended to be used for clustering the results of quality-
+filtering/dereplication methods, such as DADA2, or for re-clustering a
+FeatureTable at a lower percent identity than it was originally clustered
+at. When a group of features in the input table are clustered into a single
+feature, the frequency of that single feature in a given sample is the sum
+of the frequencies of the features that were clustered in that sample.
+Feature identifiers will be inherited from the centroid feature of each
+cluster. For features that match a reference sequence, the centroid feature
+is that reference sequence, so its identifier will become the feature
+identifier. The clustered_sequences result will contain feature
+representative sequences that are derived from the sequences input for all
+features in clustered_table. This will always be the most abundant sequence
+in the cluster. The new_reference_sequences result will contain the entire
+reference database, plus feature representative sequences for any de novo
+features. This is intended to be used as a reference database in subsequent
+iterations of cluster_features_open_reference, if applicable. See the
+vsearch documentation for details on how sequence clustering is performed.
+
+Parameters
+----------
+sequences : FeatureData[Sequence]
+    The sequences corresponding to the features in table.
+table : FeatureTable[Frequency]
+    The feature table to be clustered.
+reference_sequences : FeatureData[Sequence]
+    The sequences to use as cluster centroids.
+perc_identity : Float % Range(0, 1, inclusive_start=False, inclusive_end=True)
+    The percent identity at which clustering should be performed. This
+    parameter maps to vsearch's --id parameter.
+strand : Str % Choices('plus', 'both'), optional
+    Search plus (i.e., forward) or both (i.e., forward and reverse
+    complement) strands.
+
+Returns
+-------
+clustered_table : FeatureTable[Frequency]
+    The table following clustering of features.
+clustered_sequences : FeatureData[Sequence]
+    Sequences representing clustered features.
+new_reference_sequences : FeatureData[Sequence]
+    The new reference sequences. This can be used for subsequent runs of
+    open-reference clustering for consistent definitions of features across
+    open-reference feature tables.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_vsearch_cluster-features-de-novo.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,72 @@
+<?xml version="1.0" ?>
+<tool id="qiime_vsearch_cluster-features-de-novo" name="qiime vsearch cluster-features-de-novo" version="2019.4">
+	<description> - De novo clustering of features.</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime vsearch cluster-features-de-novo
+
+--i-sequences=$isequences
+--i-table=$itable
+--p-perc-identity="$ppercidentity"
+
+#set $pthreads = '${GALAXY_SLOTS:-4}'
+#if str($pthreads):
+ --p-threads="$pthreads"
+#end if
+
+--o-clustered-table=oclusteredtable
+--o-clustered-sequences=oclusteredsequences
+;
+cp oclusteredtable.qza $oclusteredtable;
+cp oclusteredsequences.qza $oclusteredsequences
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-sequences: ARTIFACT FeatureData[Sequence] The sequences corresponding to the features in table.                                    [required]" name="isequences" optional="False" type="data"/>
+		<param format="qza,no_unzip.zip" label="--i-table: ARTIFACT FeatureTable[Frequency] The feature table to be clustered.        [required]" name="itable" optional="False" type="data"/>
+		
+		<param label="--p-perc-identity: PROPORTION Range(0, 1, inclusive_start=False, inclusive_end=True)   The percent identity at which clustering should be performed. This parameter maps to vsearch's --id parameter.                                [required]" name="ppercidentity" optional="False" min="0" max="1" value="" exclude_min="True" exclude_max="False" type="float"/>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: clusteredtable.qza" name="oclusteredtable"/>
+		<data format="qza" label="${tool.name} on ${on_string}: clusteredsequences.qza" name="oclusteredsequences"/>
+	</outputs>
+	<help><![CDATA[
+De novo clustering of features.
+###############################
+
+Given a feature table and the associated feature sequences, cluster the
+features based on user-specified percent identity threshold of their
+sequences. This is not a general-purpose de novo clustering method, but
+rather is intended to be used for clustering the results of quality-
+filtering/dereplication methods, such as DADA2, or for re-clustering a
+FeatureTable at a lower percent identity than it was originally clustered
+at. When a group of features in the input table are clustered into a single
+feature, the frequency of that single feature in a given sample is the sum
+of the frequencies of the features that were clustered in that sample.
+Feature identifiers and sequences will be inherited from the centroid
+feature of each cluster. See the vsearch documentation for details on how
+sequence clustering is performed.
+
+Parameters
+----------
+sequences : FeatureData[Sequence]
+    The sequences corresponding to the features in table.
+table : FeatureTable[Frequency]
+    The feature table to be clustered.
+perc_identity : Float % Range(0, 1, inclusive_start=False, inclusive_end=True)
+    The percent identity at which clustering should be performed. This
+    parameter maps to vsearch's --id parameter.
+Returns
+-------
+clustered_table : FeatureTable[Frequency]
+    The table following clustering of features.
+clustered_sequences : FeatureData[Sequence]
+    Sequences representing clustered features.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_vsearch_cluster-features-open-reference.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,105 @@
+<?xml version="1.0" ?>
+<tool id="qiime_vsearch_cluster-features-open-reference" name="qiime vsearch cluster-features-open-reference" version="2019.4">
+	<description> -  Open-reference clustering of features.</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime vsearch cluster-features-open-reference
+
+--i-sequences=$isequences
+--i-table=$itable
+--i-reference-sequences=$ireferencesequences
+--p-perc-identity="$ppercidentity"
+
+#if str($pstrand) != 'None':
+ --p-strand=$pstrand
+#end if
+
+#set $pthreads = '${GALAXY_SLOTS:-4}'
+#if str($pthreads):
+ --p-threads="$pthreads"
+#end if
+
+--o-clustered-table=oclusteredtable
+--o-clustered-sequences=oclusteredsequences
+--o-new-reference-sequences=onewreferencesequences
+;
+cp oclusteredtable.qza $oclusteredtable;
+cp oclusteredsequences.qza $oclusteredsequences;
+cp onewreferencesequences.qza $onewreferencesequences
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-sequences: ARTIFACT FeatureData[Sequence] The sequences corresponding to the features in table.                                    [required]" name="isequences" optional="False" type="data"/>
+		<param format="qza,no_unzip.zip" label="--i-table: ARTIFACT FeatureTable[Frequency] The feature table to be clustered.        [required]" name="itable" optional="False" type="data"/>
+		<param format="qza,no_unzip.zip" label="--i-reference-sequences: ARTIFACT FeatureData[Sequence] The sequences to use as cluster centroids. [required]" name="ireferencesequences" optional="False" type="data"/>
+
+		<param label="--p-perc-identity: PROPORTION Range(0, 1, inclusive_start=False, inclusive_end=True)   The percent identity at which clustering should be performed. This parameter maps to vsearch's --id parameter.                                [required]" name="ppercidentity" optional="False" min="0" max="1" exclude_min="True" exclude_max="False" value="" type="float"/>
+		<param label="--p-strand: " name="pstrand" optional="True" type="select">
+			<option selected="True" value="None">Selection is Optional</option>
+			<option value="plus">plus</option>
+			<option value="both">both</option>
+		</param>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: clusteredtable.qza" name="oclusteredtable"/>
+		<data format="qza" label="${tool.name} on ${on_string}: clusteredsequences.qza" name="oclusteredsequences"/>
+		<data format="qza" label="${tool.name} on ${on_string}: newreferencesequences.qza" name="onewreferencesequences"/>
+	</outputs>
+	<help><![CDATA[
+Open-reference clustering of features.
+######################################
+
+Given a feature table and the associated feature sequences, cluster the
+features against a reference database based on user-specified percent
+identity threshold of their sequences. Any sequences that don't match are
+then clustered de novo. This is not a general-purpose clustering method,
+but rather is intended to be used for clustering the results of quality-
+filtering/dereplication methods, such as DADA2, or for re-clustering a
+FeatureTable at a lower percent identity than it was originally clustered
+at. When a group of features in the input table are clustered into a single
+feature, the frequency of that single feature in a given sample is the sum
+of the frequencies of the features that were clustered in that sample.
+Feature identifiers will be inherited from the centroid feature of each
+cluster. For features that match a reference sequence, the centroid feature
+is that reference sequence, so its identifier will become the feature
+identifier. The clustered_sequences result will contain feature
+representative sequences that are derived from the sequences input for all
+features in clustered_table. This will always be the most abundant sequence
+in the cluster. The new_reference_sequences result will contain the entire
+reference database, plus feature representative sequences for any de novo
+features. This is intended to be used as a reference database in subsequent
+iterations of cluster_features_open_reference, if applicable. See the
+vsearch documentation for details on how sequence clustering is performed.
+
+Parameters
+----------
+sequences : FeatureData[Sequence]
+    The sequences corresponding to the features in table.
+table : FeatureTable[Frequency]
+    The feature table to be clustered.
+reference_sequences : FeatureData[Sequence]
+    The sequences to use as cluster centroids.
+perc_identity : Float % Range(0, 1, inclusive_start=False, inclusive_end=True)
+    The percent identity at which clustering should be performed. This
+    parameter maps to vsearch's --id parameter.
+strand : Str % Choices('plus', 'both'), optional
+    Search plus (i.e., forward) or both (i.e., forward and reverse
+    complement) strands.
+
+Returns
+-------
+clustered_table : FeatureTable[Frequency]
+    The table following clustering of features.
+clustered_sequences : FeatureData[Sequence]
+    Sequences representing clustered features.
+new_reference_sequences : FeatureData[Sequence]
+    The new reference sequences. This can be used for subsequent runs of
+    open-reference clustering for consistent definitions of features across
+    open-reference feature tables.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_vsearch_dereplicate-sequences.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,61 @@
+<?xml version="1.0" ?>
+<tool id="qiime_vsearch_dereplicate-sequences" name="qiime vsearch dereplicate-sequences" version="2019.4">
+	<description> - Dereplicate sequences.</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime vsearch dereplicate-sequences
+
+--i-sequences=$isequences
+
+#if $pderepprefix:
+ --p-derep-prefix
+#end if
+
+--o-dereplicated-table=odereplicatedtable
+--o-dereplicated-sequences=odereplicatedsequences
+;
+cp odereplicatedtable.qza $odereplicatedtable;
+cp odereplicatedsequences.qza $odereplicatedsequences
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-sequences: ARTIFACT SampleData[Sequences] | SampleData[SequencesWithQuality] | SampleData[JoinedSequencesWithQuality] The sequences to be dereplicated.         [required]" name="isequences" optional="False" type="data"/>
+		<param label="--p-derep-prefix: --p-no-derep-prefix Merge sequences with identical prefixes. If a sequence is identical to the prefix of two or more longer sequences, it is clustered with the shortest of them. If they are equally long, it is clustered with the most abundant.             [default: False]" name="pderepprefix" selected="False" type="boolean"/>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: dereplicatedtable.qza" name="odereplicatedtable"/>
+		<data format="qza" label="${tool.name} on ${on_string}: dereplicatedsequences.qza" name="odereplicatedsequences"/>
+	</outputs>
+	<help><![CDATA[
+Dereplicate sequences.
+######################
+
+Dereplicate sequence data and create a feature table and feature
+representative sequences. Feature identifiers in the resulting artifacts
+will be the sha1 hash of the sequence defining each feature. If clustering
+of features into OTUs is desired, the resulting artifacts can be passed to
+the cluster_features_* methods in this plugin.
+
+Parameters
+----------
+sequences : SampleData[Sequences] | SampleData[SequencesWithQuality] | SampleData[JoinedSequencesWithQuality]
+    The sequences to be dereplicated.
+derep_prefix : Bool, optional
+    Merge sequences with identical prefixes. If a sequence is identical to
+    the prefix of two or more longer sequences, it is clustered with the
+    shortest of them. If they are equally long, it is clustered with the
+    most abundant.
+
+Returns
+-------
+dereplicated_table : FeatureTable[Frequency]
+    The table of dereplicated sequences.
+dereplicated_sequences : FeatureData[Sequence]
+    The dereplicated sequences.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_vsearch_join-pairs.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,139 @@
+<?xml version="1.0" ?>
+<tool id="qiime_vsearch_join-pairs" name="qiime vsearch join-pairs" version="2019.4">
+	<description> - Join paired-end reads.</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime vsearch join-pairs
+
+--i-demultiplexed-seqs=$idemultiplexedseqs
+
+#if str($ptruncqual):
+ --p-truncqual="$ptruncqual"
+#end if
+
+#if $pminlen:
+ --p-minlen=$pminlen
+#end if
+
+#if str($pmaxns):
+ --p-maxns="$pmaxns"
+#end if
+
+#if $pallowmergestagger:
+ --p-allowmergestagger
+#end if
+
+#if $pminovlen:
+ --p-minovlen=$pminovlen
+#end if
+
+#if $pmaxdiffs:
+ --p-maxdiffs=$pmaxdiffs
+#end if
+
+#if str($pminmergelen):
+ --p-minmergelen="$pminmergelen"
+#end if
+
+#if str($pmaxmergelen):
+ --p-maxmergelen="$pmaxmergelen"
+#end if
+
+#if str($pmaxee):
+ --p-maxee="$pmaxee"
+#end if
+
+#if $pqmin:
+ --p-qmin=$pqmin
+#end if
+
+#if $pqminout:
+ --p-qminout=$pqminout
+#end if
+
+#if $pqmax:
+ --p-qmax=$pqmax
+#end if
+
+#if $pqmaxout:
+ --p-qmaxout=$pqmaxout
+#end if
+
+--o-joined-sequences=ojoinedsequences
+;
+cp ojoinedsequences.qza $ojoinedsequences
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-demultiplexed-seqs: ARTIFACT SampleData[PairedEndSequencesWithQuality] The demultiplexed paired-end sequences to be joined. [required]" name="idemultiplexedseqs" optional="False" type="data"/>
+		<param label="--p-truncqual: INTEGER  Truncate sequences at the first base with the Range(0, None)       specified quality score value or lower.    [optional]" name="ptruncqual" optional="True" min="0" type="integer"/>
+		<param label="--p-minlen: INTEGER     Sequences shorter than minlen after truncation are Range(0, None)       discarded.                               [default: 1]" name="pminlen" optional="True" type="integer" min="0" value="1"/>
+		<param label="--p-maxns: INTEGER      Sequences with more than maxns N characters are Range(0, None)       discarded.                                 [optional]" name="pmaxns" optional="True" min="0" type="integer"/>
+		<param label="--p-allowmergestagger: --p-no-allowmergestagger Allow joining of staggered read pairs. [default: False]" name="pallowmergestagger" selected="False" type="boolean"/>
+		<param label="--p-minovlen: INTEGER   Minimum overlap length of forward and reverse reads Range(0, None)       for joining.                            [default: 10]" name="pminovlen" optional="True" type="integer" min="0" value="10"/>
+		<param label="--p-maxdiffs: INTEGER   Maximum number of mismatches in the forward/reverse Range(0, None)       read overlap for joining.               [default: 10]" name="pmaxdiffs" optional="True" type="integer" min="0" value="10"/>
+		<param label="--p-minmergelen: INTEGER Range(0, None)       Minimum length of the joined read to be retained. [optional]" name="pminmergelen" optional="True" min="0" type="integer"/>
+		<param label="--p-maxmergelen: INTEGER Range(0, None)       Maximum length of the joined read to be retained. [optional]" name="pmaxmergelen" optional="True" min="0" type="integer"/>
+		<param label="--p-maxee: NUMBER       Maximum number of expected errors in the joined read Range(0.0, None)     to be retained.                            [optional]" name="pmaxee" optional="True" min="0" type="float"/>
+		<param label="--p-qmin: INTEGER Range(-5, 2, inclusive_end=True) The minimum allowed quality score in the input. [default: 0]" name="pqmin" optional="True" type="integer" min="-5" max="2" exclude_max="False" value="0"/>
+		<param label="--p-qminout: INTEGER Range(-5, 2, inclusive_end=True) The minimum allowed quality score to use in output. [default: 0]" name="pqminout" optional="True" type="integer" min="-5" max="2" exclude_max="False" value="0"/>
+		<param label="--p-qmax: INTEGER Range(40, 41, inclusive_end=True) The maximum allowed quality score in the input. [default: 41]" name="pqmax" optional="True" type="integer" min="40" max="41" exclude_max="False" value="41"/>
+		<param label="--p-qmaxout: INTEGER Range(40, 41, inclusive_end=True) The maximum allowed quality score to use in output. [default: 41]" name="pqmaxout" optional="True" type="integer" min="40" max="41" exclude_max="False" value="41"/>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: joinedsequences.qza" name="ojoinedsequences"/>
+	</outputs>
+	<help><![CDATA[
+Join paired-end reads.
+######################
+
+Join paired-end sequence reads using vsearch's merge_pairs function. The
+qmin, qminout, qmax, and qmaxout parameters should only need to be modified
+when working with older fastq sequence data. See the vsearch documentation
+for details on how paired-end joining is performed, and for more
+information on the parameters to this method.
+
+Parameters
+----------
+demultiplexed_seqs : SampleData[PairedEndSequencesWithQuality]
+    The demultiplexed paired-end sequences to be joined.
+truncqual : Int % Range(0, None), optional
+    Truncate sequences at the first base with the specified quality score
+    value or lower.
+minlen : Int % Range(0, None), optional
+    Sequences shorter than minlen after truncation are discarded.
+maxns : Int % Range(0, None), optional
+    Sequences with more than maxns N characters are discarded.
+allowmergestagger : Bool, optional
+    Allow joining of staggered read pairs.
+minovlen : Int % Range(0, None), optional
+    Minimum overlap length of forward and reverse reads for joining.
+maxdiffs : Int % Range(0, None), optional
+    Maximum number of mismatches in the forward/reverse read overlap for
+    joining.
+minmergelen : Int % Range(0, None), optional
+    Minimum length of the joined read to be retained.
+maxmergelen : Int % Range(0, None), optional
+    Maximum length of the joined read to be retained.
+maxee : Float % Range(0.0, None), optional
+    Maximum number of expected errors in the joined read to be retained.
+qmin : Int % Range(-5, 2, inclusive_end=True), optional
+    The minimum allowed quality score in the input.
+qminout : Int % Range(-5, 2, inclusive_end=True), optional
+    The minimum allowed quality score to use in output.
+qmax : Int % Range(40, 41, inclusive_end=True), optional
+    The maximum allowed quality score in the input.
+qmaxout : Int % Range(40, 41, inclusive_end=True), optional
+    The maximum allowed quality score to use in output.
+
+Returns
+-------
+joined_sequences : SampleData[JoinedSequencesWithQuality]
+    The joined sequences.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_vsearch_uchime-denovo.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,98 @@
+<?xml version="1.0" ?>
+<tool id="qiime_vsearch_uchime-denovo" name="qiime vsearch uchime-denovo" version="2019.4">
+	<description> - De novo chimera filtering with vsearch.</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime vsearch uchime-denovo
+
+--i-sequences=$isequences
+--i-table=$itable
+
+#if $pdn:
+ --p-dn=$pdn
+#end if
+
+#if $pmindiffs:
+ --p-mindiffs=$pmindiffs
+#end if
+
+#if $pmindiv:
+ --p-mindiv=$pmindiv
+#end if
+
+#if $pminh:
+ --p-minh=$pminh
+#end if
+
+#if $pxn:
+ --p-xn=$pxn
+#end if
+
+--o-chimeras=ochimeras
+--o-nonchimeras=ononchimeras
+--o-stats=ostats
+;
+cp ochimeras.qza $ochimeras;
+cp ononchimeras.qza $ononchimeras;
+cp ostats.qza $ostats
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-sequences: ARTIFACT FeatureData[Sequence] The feature sequences to be chimera-checked. [required]" name="isequences" optional="False" type="data"/>
+		<param format="qza,no_unzip.zip" label="--i-table: ARTIFACT FeatureTable[Frequency] Feature table (used for computing total feature abundances).                              [required]" name="itable" optional="False" type="data"/>
+
+		<param label="--p-dn: NUMBER           No vote pseudo-count, corresponding to the Range(0.0, None)      parameter n in the chimera scoring function. [default: 1.4]" name="pdn" optional="True" type="float" min="0" value="1.4"/>
+		<param label="--p-mindiffs: INTEGER    Minimum number of differences per segment. Range(1, None)                                                [default: 3]" name="pmindiffs" optional="True" type="integer" min="1" value="3"/>
+		<param label="--p-mindiv: NUMBER       Minimum divergence from closest parent. Range(0.0, None)                                            [default: 0.8]" name="pmindiv" optional="True" type="float" min="0" value="0.8"/>
+		<param label="--p-minh: PROPORTION Range(0.0, 1.0, inclusive_end=True) Minimum score (h). Increasing this value tends to reduce the number of false positives and to decrease sensitivity.                         [default: 0.28]" name="pminh" optional="True" type="float" min="0" max="1" exclude_max="False" value="0.28"/>
+		<param label="--p-xn: NUMBER Range(1.0, None, inclusive_start=False) No vote weight, corresponding to the parameter beta in the scoring function.              [default: 8.0]" name="pxn" optional="True" type="float" min="1" exclude_max="True" value="8.0"/>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: chimeras.qza" name="ochimeras"/>
+		<data format="qza" label="${tool.name} on ${on_string}: nonchimeras.qza" name="ononchimeras"/>
+		<data format="qza" label="${tool.name} on ${on_string}: stats.qza" name="ostats"/>
+	</outputs>
+	<help><![CDATA[
+De novo chimera filtering with vsearch.
+#######################################
+
+Apply the vsearch uchime_denovo method to identify chimeric feature
+sequences. The results of this method can be used to filter chimeric
+features from the corresponding feature table. For additional details,
+please refer to the vsearch documentation.
+
+Parameters
+----------
+sequences : FeatureData[Sequence]
+    The feature sequences to be chimera-checked.
+table : FeatureTable[Frequency]
+    Feature table (used for computing total feature abundances).
+dn : Float % Range(0.0, None), optional
+    No vote pseudo-count, corresponding to the parameter n in the chimera
+    scoring function.
+mindiffs : Int % Range(1, None), optional
+    Minimum number of differences per segment.
+mindiv : Float % Range(0.0, None), optional
+    Minimum divergence from closest parent.
+minh : Float % Range(0.0, 1.0, inclusive_end=True), optional
+    Minimum score (h). Increasing this value tends to reduce the number of
+    false positives and to decrease sensitivity.
+xn : Float % Range(1.0, None, inclusive_start=False), optional
+    No vote weight, corresponding to the parameter beta in the scoring
+    function.
+
+Returns
+-------
+chimeras : FeatureData[Sequence]
+    The chimeric sequences.
+nonchimeras : FeatureData[Sequence]
+    The non-chimeric sequences.
+stats : UchimeStats
+    Summary statistics from chimera checking.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime2/qiime_vsearch_uchime-ref.xml	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,109 @@
+<?xml version="1.0" ?>
+<tool id="qiime_vsearch_uchime-ref" name="qiime vsearch uchime-ref" version="2019.4">
+	<description> - Reference-based chimera filtering with vsearch.</description>
+	<requirements>
+		<requirement type="package" version="2019.4">qiime2</requirement>
+	</requirements>
+	<command><![CDATA[
+qiime vsearch uchime-ref
+
+--i-sequences=$isequences
+--i-table=$itable
+--i-reference-sequences=$ireferencesequences
+
+#if $pdn:
+ --p-dn=$pdn
+#end if
+
+#if $pmindiffs:
+ --p-mindiffs=$pmindiffs
+#end if
+
+#if $pmindiv:
+ --p-mindiv=$pmindiv
+#end if
+
+#if $pminh:
+ --p-minh=$pminh
+#end if
+
+#if $pxn:
+ --p-xn=$pxn
+#end if
+
+#set $pthreads = '${GALAXY_SLOTS:-4}'
+#if str($pthreads):
+ --p-threads="$pthreads"
+#end if
+
+--o-chimeras=ochimeras
+--o-nonchimeras=ononchimeras
+--o-stats=ostats
+;
+cp ochimeras.qza $ochimeras;
+cp ononchimeras.qza $ononchimeras;
+cp ostats.qza $ostats
+	]]></command>
+	<inputs>
+		<param format="qza,no_unzip.zip" label="--i-sequences: ARTIFACT FeatureData[Sequence] The feature sequences to be chimera-checked. [required]" name="isequences" optional="False" type="data"/>
+		<param format="qza,no_unzip.zip" label="--i-table: ARTIFACT FeatureTable[Frequency] Feature table (used for computing total feature abundances).                              [required]" name="itable" optional="False" type="data"/>
+		<param format="qza,no_unzip.zip" label="--i-reference-sequences: ARTIFACT FeatureData[Sequence] The non-chimeric reference sequences.     [required]" name="ireferencesequences" optional="False" type="data"/>
+		<param label="--p-dn: NUMBER           No vote pseudo-count, corresponding to the Range(0.0, None)      parameter n in the chimera scoring function. [default: 1.4]" name="pdn" optional="True" type="float" min="0" value="1.4"/>
+		<param label="--p-mindiffs: INTEGER    Minimum number of differences per segment. Range(1, None)                                                [default: 3]" name="pmindiffs" optional="True" type="integer" min="1" value="3"/>
+		<param label="--p-mindiv: NUMBER       Minimum divergence from closest parent. Range(0.0, None)                                            [default: 0.8]" name="pmindiv" optional="True" type="float" min="0" value="0.8"/>
+		<param label="--p-minh: PROPORTION Range(0.0, 1.0, inclusive_end=True) Minimum score (h). Increasing this value tends to reduce the number of false positives and to decrease sensitivity.                         [default: 0.28]" name="pminh" optional="True" type="float" min="0" max="1" exclude_max="False" value="0.28"/>
+		<param label="--p-xn: NUMBER Range(1.0, None, inclusive_start=False) No vote weight, corresponding to the parameter beta in the scoring function.              [default: 8.0]" name="pxn" optional="True" type="float" min="1" exclude_min="True" value="8.0"/>
+	</inputs>
+	<outputs>
+		<data format="qza" label="${tool.name} on ${on_string}: chimeras.qza" name="ochimeras"/>
+		<data format="qza" label="${tool.name} on ${on_string}: nonchimeras.qza" name="ononchimeras"/>
+		<data format="qza" label="${tool.name} on ${on_string}: stats.qza" name="ostats"/>
+	</outputs>
+	<help><![CDATA[
+Reference-based chimera filtering with vsearch.
+###############################################
+
+Apply the vsearch uchime_ref method to identify chimeric feature sequences.
+The results of this method can be used to filter chimeric features from the
+corresponding feature table. For additional details, please refer to the
+vsearch documentation.
+
+Parameters
+----------
+sequences : FeatureData[Sequence]
+    The feature sequences to be chimera-checked.
+table : FeatureTable[Frequency]
+    Feature table (used for computing total feature abundances).
+reference_sequences : FeatureData[Sequence]
+    The non-chimeric reference sequences.
+dn : Float % Range(0.0, None), optional
+    No vote pseudo-count, corresponding to the parameter n in the chimera
+    scoring function.
+mindiffs : Int % Range(1, None), optional
+    Minimum number of differences per segment.
+mindiv : Float % Range(0.0, None), optional
+    Minimum divergence from closest parent.
+minh : Float % Range(0.0, 1.0, inclusive_end=True), optional
+    Minimum score (h). Increasing this value tends to reduce the number of
+    false positives and to decrease sensitivity.
+xn : Float % Range(1.0, None, inclusive_start=False), optional
+    No vote weight, corresponding to the parameter beta in the scoring
+    function.
+threads : Int % Range(0, 256, inclusive_end=True), optional
+    The number of threads to use for computation. Passing 0 will launch one
+    thread per CPU core.
+
+Returns
+-------
+chimeras : FeatureData[Sequence]
+    The chimeric sequences.
+nonchimeras : FeatureData[Sequence]
+    The non-chimeric sequences.
+stats : UchimeStats
+    Summary statistics from chimera checking.
+	]]></help>
+<macros>
+    <import>qiime_citation.xml</import>
+</macros>
+<expand macro="qiime_citation"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tool_data/ref_classifier.loc	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,5 @@
+#<unique_id>  <name>  <database_caption>  <qza_file_path>
+#
+#For each reference database, you need to download the qza file in qiime path
+#
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tool_data/ref_taxnonomy.loc	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,5 @@
+#<unique_id>  <name>  <database_caption>  <qza_file_path>
+#
+#For each reference database, you need to download the qza file in qiime path
+#
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tool_data_table_conf.xml.sample	Wed Jul 17 03:05:17 2019 -0400
@@ -0,0 +1,11 @@
+<tables>
+    <table name="taxonomy_fp" comment_char="#">
+        <columns>value, name, dbkey, path</columns>
+        <file path="tool_data/ref_taxnonomy.loc" />
+    </table>
+    <table name="classifier_fp" comment_char="#">
+        <columns>value, name, dbkey, path</columns>
+        <file path="tool-data/ref_classifier.loc" />
+    </table>
+</tables>
+