changeset 0:e5c3175506b7 default tip

Initial tool configs for qiime, most need work.
author Jim Johnson <jj@umn.edu>
date Sun, 17 Jul 2011 10:30:11 -0500
parents
children
files README add_taxa.xml adjust_seq_orientation.xml align_seqs.xml alpha_diversity.xml alpha_rarefaction.xml assign_taxonomy.xml beta_diversity.xml beta_diversity_through_3d_plots.xml beta_significance.xml blast_wrapper.xml categorized_dist_scatterplot.xml check_id_map.xml collate_alpha.xml compare_3d_plots.xml consensus_tree.xml convert_otu_table_to_unifrac_sample_mapping.xml convert_unifrac_sample_mapping_to_otu_table.xml denoise.xml dissimilarity_mtx_stats.xml exclude_seqs_by_blast.xml extract_seqs_by_sample_id.xml filter_alignment.xml filter_by_metadata.xml filter_fasta.xml filter_otu_table.xml filter_otus_by_sample.xml fix_arb_fasta.xml identify_chimeric_seqs.xml jackknifed_beta_diversity.xml lib/galaxy/datatypes/metagenomics.py make_2d_plots.xml make_3d_plots.xml make_bootstrapped_tree.xml make_distance_histograms.xml make_fastq.xml make_library_id_lists.xml make_otu_heatmap_html.xml make_otu_network.xml make_otu_table.xml make_per_library_sff.xml make_phylogeny.xml make_pie_charts.xml make_prefs_file.xml make_qiime_py_file.xml make_qiime_rst_file.xml make_rarefaction_plots.xml merge_denoiser_output.xml merge_mapping_files.xml merge_otu_maps.xml merge_otu_tables.xml multiple_rarefactions.xml multiple_rarefactions_even_depth.xml otu_category_significance.xml parallel_align_seqs_pynast.xml parallel_alpha_diversity.xml parallel_assign_taxonomy_blast.xml parallel_assign_taxonomy_rdp.xml parallel_beta_diversity.xml parallel_blast.xml parallel_identify_chimeric_seqs.xml parallel_multiple_rarefactions.xml parallel_pick_otus_blast.xml parallel_pick_otus_uclust_ref.xml per_library_stats.xml pick_otus.xml pick_otus_through_otu_table.xml pick_reference_otus_through_otu_table.xml pick_rep_set.xml plot_rank_abundance_graph.xml plot_taxa_summary.xml poller.xml poller_example.xml pool_by_metadata.xml principal_coordinates.xml print_qiime_config.xml process_sff.xml qiime_wrapper.py quality_scores_plot.xml shared_phylotypes.xml single_rarefaction.xml sort_denoiser_output.xml sort_otu_table.xml split_libraries.xml split_libraries_illumina.xml start_parallel_jobs.xml submit_to_mgrast.xml summarize_otu_by_cat.xml summarize_taxa.xml supervised_learning.xml transform_coordinate_matrices.xml tree_compare.xml trflp_file_to_otu_table.xml trim_sff_primers.xml truncate_fasta_qual_files.xml upgma_cluster.xml
diffstat 96 files changed, 6452 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/README	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,129 @@
+This was a first attempt at providing galaxy tool_wrappers for the Qiime metagenomics package:
+You must first istall Qiime:  http://qiime.sourceforge.net/install/install.html
+
+
+
+Initial tool wrappers were generated by a script searching the qiime scripts (version 1.2.1)  for usage info, 
+and then were hand edited afterwards.  
+
+NOTE:  A few of the tool configs worked on the galaxy-central code in April 2011.  
+I haven't taken time to check them with more recent galaxy releases.
+
+
+I executed the qiime scripts via qiime_wrapper.py
+This was to accommmodate moving multiple outputs to history items:  http://wiki.g2.bx.psu.edu/Admin/Tools/Multiple%20Output%20Files
+
+
+The datatypes file:  metagenomics.py has Mothur datatypes with a start at qiime types added at the end.
+
+
+
+
+The most common used qiime scripts are:
+- check_id_map.py
+- split_libraries.py
+- pick_otus_through_otu_table.py
+- beta_diversity_through_3d_plots.py
+- alpha_rarefaction.py
+- jackknifed_beta_diversity.py
+- filter_by_metadata.py
+- filter_otu_table.py
+- merge_otu_tables.py
+- merge_mapping_files.py
+
+
+Tool_config development status:
+The tool configs with a * indicate that the tool at least displayed in galaxy at least once upon time.
+( Since these were intially auto generated, some may not make sense in a galaxy framework. )
+
+	add_taxa.xml
+	adjust_seq_orientation.xml
+* 	align_seqs.xml		
+*   	alpha_diversity.xml	metrics - select  input/output repeat   conditional tree
+*	alpha_rarefaction.xml	
+*	assign_taxonomy.xmlA	assignment_method-select
+*	beta_diversity.xml 
+*	beta_diversity_through_3d_plots.xml html-plots  
+	beta_significance.xml
+	blast_wrapper.xml
+*	check_id_map.xml
+	collate_alpha.xml
+*	compare_3d_plots.xml
+	consensus_tree.xml
+	convert_otu_table_to_unifrac_sample_mapping.xml
+	convert_unifrac_sample_mapping_to_otu_table.xml
+*	denoise.xml
+*	dissimilarity_mtx_stats.xml
+	exclude_seqs_by_blast.xml
+	extract_seqs_by_sample_id.xml
+*	filter_alignment.xml
+	filter_by_metadata.xml
+	filter_fasta.xml
+	filter_otu_table.xml
+*	filter_otus_by_sample.xml
+	fix_arb_fasta.xml
+	identify_chimeric_seqs.xml
+*	jackknifed_beta_diversity.xml
+*	make_2d_plots.xml
+*	make_3d_plots.xml
+	make_bootstrapped_tree.xml
+	make_distance_histograms.xml
+	make_fastq.xml
+	make_library_id_lists.xml
+*	make_otu_heatmap_html.xml
+*	make_otu_network.xml
+	make_otu_table.xml
+	make_per_library_sff.xml
+	make_phylogeny.xml
+	make_pie_charts.xml
+	make_prefs_file.xml
+	make_qiime_py_file.xml
+*	make_qiime_rst_file.xml
+*	make_rarefaction_plots.xml
+*	make_sra_submission.xml
+*	merge_denoiser_output.xml
+	merge_mapping_files.xml
+	merge_otu_maps.xml
+	merge_otu_tables.xml
+	multiple_rarefactions.xml
+	multiple_rarefactions_even_depth.xml
+	otu_category_significance.xml
+*	parallel_align_seqs_pynast.xml
+	parallel_alpha_diversity.xml
+*	parallel_assign_taxonomy_blast.xml
+*	parallel_assign_taxonomy_rdp.xml
+	parallel_beta_diversity.xml
+*	parallel_blast.xml
+	parallel_identify_chimeric_seqs.xml
+	parallel_multiple_rarefactions.xml
+*	parallel_pick_otus_blast.xml
+*	parallel_pick_otus_uclust_ref.xml
+	per_library_stats.xml
+*	pick_otus.xml
+*	pick_otus_through_otu_table.xml
+	pick_rep_set.xml
+*	plot_rank_abundance_graph.xml
+	poller.xml
+	poller_example.xml
+	pool_by_metadata.xml
+	principal_coordinates.xml
+	print_qiime_config.xml
+*	process_sff.xml
+*	process_sra_submission.xml
+*	quality_scores_plot.xml
+	shared_phylotypes.xml
+	single_rarefaction.xml
+	sort_denoiser_output.xml
+*	split_libraries.xml
+*	split_libraries_illumina.xml
+	sra_spreadsheet_to_map_files.xml
+	start_parallel_jobs.xml
+	summarize_otu_by_cat.xml
+	summarize_taxa.xml
+*	supervised_learning.xml
+*	transform_coordinate_matrices.xml
+*	tree_compare.xml
+	trflp_file_to_otu_table.xml
+	trim_sff_primers.xml
+*	truncate_fasta_qual_files.xml
+	upgma_cluster.xml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/add_taxa.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,31 @@
+<tool id="add_taxa" name="add_taxa" version="1.2.0">
+ <description>Add taxa to OTU table</description>
+ <requirements>
+  <requirement type="binary">add_taxa.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  add_taxa.py
+  --otu_file=$otu_file
+  --taxonomy_file=$taxonomy_file
+  --output_file=$output_file
+  --id_map_file=$id_map_file
+ </command>
+ <inputs>
+  <param name="otu_file" type="data" format="txt" label="otu_file"
+   help="Path to read otu file [REQUIRED]"/>
+  <param name="taxonomy_file" type="data" format="txt" label="taxonomy_file"
+   help="Path to read taxonomy file [REQUIRED]"/>
+  <param name="id_map_file" type="data" format="tabular" label="id_map_file"
+   help="Path to read seq id to otu map file [default: ('NO', 'DEFAULT')]"/>
+ </inputs>
+ <outputs>
+  <data format="txt" name="output_file" label="${tool.name} on ${on_string}"/>
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/adjust_seq_orientation.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,29 @@
+<tool id="adjust_seq_orientation" name="adjust_seq_orientation" version="1.2.0">
+ <description>Get the reverse complement of all sequences</description>
+ <requirements>
+  <requirement type="binary">adjust_seq_orientation.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  adjust_seq_orientation.py
+  --input_fasta_fp=$input_fasta_fp
+  --output_fp=$output_fp
+  $retain_seq_id
+ </command>
+ <inputs>
+  <param name="input_fasta_fp" type="data" format="fasta" label="input_fasta_fp"
+   help="path to the input fasta file [REQUIRED]"/>
+  <param name="retain_seq_id" type="boolean" truevalue="--retain_seq_id" falsevalue="" checked="false" label="retain_seq_id"
+   help="leave seq description lines untouched [default: append ' RC' to seq description lines]"/>
+ </inputs>
+ <outputs>
+  <data format="txt" name="output_fp" label="${tool.name} on ${on_string}: (RC)"/>
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/align_seqs.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,127 @@
+<tool id="align_seqs" name="align_seqs" version="1.2.0">
+ <description>Align sequences using a variety of alignment methods</description>
+ <requirements>
+  <requirement type="binary">align_seqs.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_outputdir='$log.extra_files_path'
+  --galaxy_datasets='^\S+_aligned\.\S+$:'$aligned_fasta,'^\S+_log\.txt$:'$log,'^\S+_failures\.fasta$:'$failures
+  align_seqs.py
+  --input_fasta_fp=$input_fasta_fp
+  --alignment_method=$align.alignment_method
+  #if $align.alignment_method == 'pynast':
+    --template_fp=$align.alignment.template_fp
+    --pairwise_alignment_method=$align.pairwise_alignment_method
+    --min_length=$align.min_length
+    --min_percent_id=$align.min_percent_id
+    --blast_db=$align.blast_db
+  #elif $align.alignment_method == 'infernal':
+    --template_fp=$align.alignment.template_fp
+  #elif $align.alignment_method == 'clustalw':
+    #echo ''
+  #elif $align.alignment_method == 'muscle':
+    #echo ''
+  #elif $align.alignment_method == 'mafft':
+    #echo ''
+  #end if
+
+  --output_dir='$log.extra_files_path'
+ </command>
+ <inputs>
+  <param name="input_fasta_fp" type="data" format="fasta" label="input_fasta_fp"
+   help="path to the input fasta file [REQUIRED]"/>
+
+  <conditional name="align">
+    <param name="alignment_method" type="select" label="alignment_method"
+     help="Method for aligning sequences. Valid choices are: pynast, infernal, clustalw, muscle, infernal, mafft [default: pynast]">
+      <option value="pynast" selected="true">pynast</option>
+      <option value="infernal">infernal</option>
+      <option value="clustalw">clustalw</option>
+      <option value="muscle">muscle</option>
+      <option value="mafft">mafft</option>
+    </param>
+  
+    <when value="pynast">
+      <conditional name="alignment">
+       <param name="source" type="select" label="Select Template from" help="">
+        <option value="hist">History</option>
+        <option value="ref">Cached Reference</option>
+       </param>
+       <when value="ref">
+        <param name="template_fp" type="select" label="template - Select an alignment database " help="">
+         <options from_file="mothur_aligndb.loc">
+          <column name="name" index="0" />
+          <column name="value" index="1" />
+         </options>
+        </param>
+       </when>
+       <when value="hist">
+        <param name="template_fp" type="data" format="txt" label="template_fp"
+         help="Filepath for template against [REQUIRED if for alignment_method  pynast or infernal]"/>
+       </when>
+      </conditional>
+      <param name="pairwise_alignment_method" type="select" label="pairwise_alignment_method"
+       help="method for performing pairwise alignment in PyNAST. Valid choices are muscle, pair_hmm, clustal, blast, uclust, mafft [default: uclust]">
+        <option value="muscle">muscle</option>
+        <option value="pair_hmm">pair_hmm</option>
+        <option value="clustal">clustal</option>
+        <option value="blast">blast</option>
+        <option value="uclust" selected="true">uclust</option>
+        <option value="mafft">mafft</option>
+      </param>
+      <param name="min_length" type="integer" value="150" label="min_length"
+       help="Minimum sequence length to include in alignment [default: 150]"/>
+      <param name="min_percent_id" type="float" value="0.75" label="min_percent_id"
+       help="Minimum percent sequence identity to closest blast hit to include sequence in alignment [default: 0.75]"/>
+      <param name="blast_db" type="text"  label="blast_db" optional="true"
+       help="Database to blast against when -m pynast [default: created on-the-fly from template_alignment]"/>
+    </when> <!-- pynast -->
+  
+    <when value="infernal">
+       <!-- Template alignment must be in Stockholm format with corresponding secondary structure annotation when using InfernalAligner. -->
+      <conditional name="alignment">
+       <param name="source" type="select" label="Select Template from" help="">
+        <option value="hist">History</option>
+        <option value="ref">Cached Reference</option>
+       </param>
+       <when value="ref">
+        <param name="template_fp" type="select" label="template - Select an alignment database " help="">
+         <options from_file="mothur_aligndb.loc">
+          <column name="name" index="0" />
+          <column name="value" index="1" />
+         </options>
+        </param>
+       </when>
+       <when value="hist">
+        <param name="template_fp" type="data" format="txt" label="template_fp"
+         help="Filepath for template against [REQUIRED if for alignment_method  pynast or infernal]"/>
+       </when>
+      </conditional>
+    </when> <!-- infernal -->
+
+    <when value="clustalw">
+    </when> <!-- clustalw -->
+    <when value="muscle">
+    </when> <!-- muscle -->
+    <when value="mafft">
+    </when> <!-- mafft -->
+  
+  </conditional> <!-- align -->
+
+
+ </inputs>
+ <outputs>
+   <data format="txt" name="log" label="${tool.name} on ${on_string}: log" />
+   <data format="fasta" name="aligned_fasta" label="${tool.name} on ${on_string}: aligned fasta" />
+   <data format="fasta" name="failures" label="${tool.name} on ${on_string}: failures" >
+    <filter>align['alignment_method'] == 'pynast'</filter>
+   </data>
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/alpha_diversity.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,61 @@
+<tool id="alpha_diversity" name="alpha_diversity" version="1.2.0">
+ <description>Calculate alpha diversity on each sample in an otu table, using a variety of alpha diversity metrics</description>
+ <requirements>
+  <requirement type="binary">alpha_diversity.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  alpha_diversity.py
+  --input_path=$input_path
+  --output_path=$output_path
+  --metrics=$metrics
+  #if $tree_path.__str__ != "None" and len($tree_path.__str__) > 0:
+    --tree_path=$tree_path
+  #end if
+
+ </command>
+ <inputs>
+  <param name="input_path" type="data"  format="tabular"  label="OTU table"
+   help="input path.  directory for batch processing, filename for single file operation"/>
+  <param name="metrics" type="select"  multiple="true" label="metrics"
+   help="metrics to use">
+      <option value="ACE">ACE</option>
+      <option value="berger_parker_d">berger_parker_d</option>
+      <option value="brillouin_d">brillouin_d</option>
+      <option value="chao1">chao1</option>
+      <option value="chao1_confidence">chao1_confidence</option>
+      <option value="dominance">dominance</option>
+      <option value="doubles">doubles</option>
+      <option value="equitability">equitability</option>
+      <option value="fisher_alpha">fisher_alpha</option>
+      <option value="heip_e">heip_e</option>
+      <option value="kempton_taylor_q">kempton_taylor_q</option>
+      <option value="margalef">margalef</option>
+      <option value="mcintosh_d">mcintosh_d</option>
+      <option value="mcintosh_e">mcintosh_e</option>
+      <option value="menhinick">menhinick</option>
+      <option value="michaelis_menten_fit">michaelis_menten_fit</option>
+      <option value="observed_species">observed_species</option>
+      <option value="osd">osd</option>
+      <option value="reciprocal_simpson">reciprocal_simpson</option>
+      <option value="robbins">robbins</option>
+      <option value="shannon">shannon</option>
+      <option value="simpson">simpson</option>
+      <option value="simpson_e">simpson_e</option>
+      <option value="singles">singles</option>
+      <option value="strong">strong</option>
+      <option value="PD_whole_tree">PD_whole_tree</option>
+  </param>
+  <param name="tree_path" type="data"  format="tre"  label="tree_path" optional="true"
+   help="path to newick tree file, required for phylogenetic metrics: PD_whole_tree"/>
+ </inputs>
+ <outputs>
+  <data format="tabular" name="output_path" label="${tool.name} on ${on_string}: alpha_diversity"/>
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/alpha_rarefaction.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,108 @@
+<tool id="alpha_rarefaction" name="alpha_rarefaction" version="1.2.0">
+ <description>A workflow script for performing alpha rarefaction</description>
+ <requirements>
+  <requirement type="binary">alpha_rarefaction.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_summary_html='$output_html'
+  --galaxy_outputdir='$output_html.extra_files_path'
+  --galaxy_summary_template='$output_template'
+  ## --galaxy_datasets='^rarefaction_plots.html$:'$output_html
+  alpha_rarefaction.py
+  --otu_table_fp=$otu_table_fp
+  --mapping_fp=$mapping_fp
+  --output_dir=$output_html.extra_files_path
+  #if $parameter.source == 'hist':
+   --parameter_fp=$parameter_fp
+  #else:
+   --parameter_fp=$parameter_generated
+  #end if
+  --num_steps=$num_steps
+  $force
+  $print_only
+  $parallel
+  #if $tree_fp != None and $tree_fp.__str__ != 'None':
+   --tree_fp=$tree_fp
+  #end if
+ </command>
+ <inputs>
+  <param name="otu_table_fp" type="data" format="qiimeotutable" label="otu_table_fp"
+   help="the input otu table [REQUIRED]"/>
+  <param name="mapping_fp" type="data" format="qiimemapping" label="mapping_fp"
+   help="path to the mapping file [REQUIRED]"/>
+  <conditional name="parameter">
+   <param name="source" type="select" label="Parameters from" help="">
+    <option value="hist">Your History</option>
+    <option value="build">Build a Parameter file</option>
+   </param>
+   <when value="hist">
+    <param name="parameter_fp" type="data" format="qiimeparams" label="parameter_fp"
+     help="path to the parameter file [REQUIRED]"/>
+   </when> <!-- hist -->
+   <when value="build">
+   <!--
+	params['alpha_diversity']['metrics'].split(',')
+	params['multiple_rarefactions']
+	params['parallel'])
+	params['alpha_diversity'])
+	params['collate_alpha']
+	params['make_rarefaction_plots']
+    multiple_rarefactions.py
+     min seqs/sample
+     max seqs/sample
+     step
+     depth    sequences per sample to subsample
+     num-reps
+     lineages_included 
+     keep_empty_otus
+    alpha_diversity.py
+    collate_alpha.py
+    make_rarefaction_plots.py
+   -->
+   </when> <!-- build -->
+  </conditional> <!-- parameter -->
+  <param name="num_steps" type="integer" value="10" label="num_steps"
+   help="number of steps (or rarefied OTU table sizes) to make between min and max counts [default: 10]"/>
+  <param name="force" type="boolean" truevalue="--force" falsevalue="" checked="false" label="force"
+   help="Force overwrite of existing output directory (note: existing files in output_dir will not be removed) [default: ('NO', 'DEFAULT')]"/>
+  <param name="print_only" type="boolean" truevalue="--print_only" falsevalue="" checked="false" label="print_only"
+   help="Print the commands but don't call them -- useful for debugging [default: False]"/>
+  <param name="parallel" type="boolean" truevalue="--parallel" falsevalue="" checked="false" label="parallel"
+   help="Run in parallel where available [default: False]"/>
+  <param name="tree_fp" type="data" format="txt" optional="true" label="tree_fp"
+   help="path to the tree file [default: REQUIRED for phylogenetic measures]"/>
+ </inputs>
+ <configfiles>
+  <configfile name="parameter_generated">
+alpha_diversity:metrics	chao1,observed_species,PD_whole_tree
+multiple_rarefactions_even_depth:num-reps	20
+parallel:jobs_to_start	2
+parallel:retain_temp_files	False
+parallel:seconds_to_sleep	60
+collate_alpha:example_path
+make_rarefaction_plots:imagetype	png
+make_rarefaction_plots:resolution	75
+make_rarefaction_plots:background_color	white
+make_rarefaction_plots:prefs_path
+  </configfile>
+  <configfile name="output_template">
+<![CDATA[
+<html>
+<body>
+<a href="rarefaction_plots.html">rarefaction_plots.html</a>
+</body>
+</html>
+]]>
+  </configfile>
+ </configfiles>
+ <outputs>
+  <data format="html" name="output_html" label="alpha_rarefaction_plots"/>
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/assign_taxonomy.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,93 @@
+<tool id="assign_taxonomy" name="assign_taxonomy" version="1.2.0">
+ <description>Assign taxonomy to each sequence</description>
+ <requirements>
+  <requirement type="binary">assign_taxonomy.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  assign_taxonomy.py
+  --input_fasta_fp=$input_fasta_fp
+  --assignment_method=$assign.assignment_method
+  #if $assign.assignment_method = 'rdp'
+   #if $assign.reference_seqs_fp != None
+    --reference_seqs_fp=$assign.reference_seqs_fp
+   #end if
+   #if $assign.training_data_properties_fp != None
+    --training_data_properties_fp=$assign.training_data_properties_fp
+   #end if
+   #if $assign.id_to_taxonomy_fp != None
+    --id_to_taxonomy_fp=$assign.id_to_taxonomy_fp
+   #end if
+   --confidence=$confidence
+  #elif $assign.assignment_method = 'blast'
+   #if $assign.blast_ref.source = 'blast_db'
+    --blast_db=$assign.blast_ref.blast_db
+   #elif $assign.blast_ref.source = 'reference_seqs'
+    --
+   #end if
+   --e_value=$assign.e_value
+   --id_to_taxonomy_fp=$assign.id_to_taxonomy_fp
+  #end if
+  --output_dir=$__new_file_path__
+ </command>
+ <inputs>
+  <param name="input_fasta_fp" type="data" format="fasta" label="input_fasta_fp"
+   help="path to the input fasta file [REQUIRED]"/>
+  <conditional name="assign">
+    <param name="assignment_method" type="select" label="assignment_method"
+     help="Taxon assignment method [default:rdp]">
+      <option value="rdp" selected="true">rdp</option>
+      <option value="blast">blast</option>
+    </param>
+    <when value="rdp">
+     <param name="confidence" type="float" value="0.8" label="confidence"
+      help="Minimum confidence to record an assignment, only used for rdp method [default: 0.8]"/>
+     <param name="id_to_taxonomy_fp" type="data" format="rdp.taxonomy" optional="true" label="id_to_taxonomy_fp"
+      help="Path to tab-delimited file mapping sequences to assigned taxonomy. Each assigned taxonomy is provided as a semicolon-separated list. For assignment with rdp, each assigned taxonomy must be exactly 6 levels deep. "/>
+     <param name="reference_seqs_fp" type="data" format="txt" optional="true" label="reference_seqs_fp"
+      help="Reference sequences.  For assignment with rdp, they are used as training sequences for the classifier."/>
+     <param name="training_data_properties_fp" type="data" format="txt" optional="true" label="training_data_properties_fp"
+      help="Path to '.properties' file in pre-compiled training data for the RDP Classifier.  This option is overridden by the -t and -r options. [default: ('NO', 'DEFAULT')]"/>
+    </when> <!-- rdp -->
+    <when value="blast">
+     <conditional name="blast_ref">
+      <param name="source" type="select" label="blast database source">
+       <option value="blast_db">blast database</option>
+       <option value="reference_seqs">reference sequence fasta</option>
+      </param>
+      <when value="blast_db">
+       <!-- chnage this to a select with built in blast targets -->
+       <param name="blast_db" type="select" label="blast_db - Nucleotide BLAST database">
+        <!-- The BLAST loc file has three columns:
+         column 0 is an identifier (not used here, see legacy megablast wrapper),
+         column 1 is the caption (show this to the user),
+         column 2 is the database path (given to BLAST) -->
+        <options from_file="blastdb.loc">
+         <column name="name" index="1"/>
+         <column name="value" index="2"/>
+        </options>
+       </param>
+      </when> <!-- blast_db -->
+      <when value="reference_seqs">
+       <param name="reference_seqs_fp" type="data" format="txt" label="reference_seqs_fp"
+        help="Reference sequences used to generate a blast database. "/>
+      </when> <!-- reference_seqs -->
+     </conditional> <!-- blast_ref -->
+     <param name="e_value" type="float" value="0.001" label="e_value"
+      help="Maximum e-value to record an assignment, only used for blast method [default: 0.001]"/>
+     <param name="id_to_taxonomy_fp" type="data" format="seq.taxonomy" label="id_to_taxonomy_fp"
+      help="Path to tab-delimited file mapping sequences to assigned taxonomy. Each assigned taxonomy is provided as a semicolon-separated list. "/>
+    </when> <!-- blast -->
+ </conditional> <!-- assign -->
+ </inputs>
+ <outputs>
+  <data format="seq.taxonomy" name="taxonomy_out" label="${tool.name} on ${on_string}: taxonomy"/>
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/beta_diversity.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,255 @@
+<tool id="beta_diversity" name="beta_diversity" version="1.2.0">
+ <description>Calculate beta diversity (pairwise sample dissimilarity) on one or many otu tables</description>
+ <requirements>
+  <requirement type="binary">beta_diversity.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  #set datasets = []
+  #if $binary_chisq.__str__ != "None":
+   #set  datasets = $datasets + ["'binary_chisq_.*$:'" + $binary_chisq.__str__]
+  #end if
+  #if $binary_chord.__str__ != "None":
+   #set  datasets = $datasets + ["'binary_chord_.*$:'" + $binary_chord.__str__]
+  #end if
+  #if $binary_euclidean.__str__ != "None":
+   #set  datasets = $datasets + ["'binary_euclidean_.*$:'" + $binary_euclidean.__str__]
+  #end if
+  #if $binary_hamming.__str__ != "None":
+   #set  datasets = $datasets + ["'binary_hamming_.*$:'" + $binary_hamming.__str__]
+  #end if
+  #if $binary_jaccard.__str__ != "None":
+   #set  datasets = $datasets + ["'binary_jaccard_.*$:'" + $binary_jaccard.__str__]
+  #end if
+  #if $binary_lennon.__str__ != "None":
+   #set  datasets = $datasets + ["'binary_lennon_.*$:'" + $binary_lennon.__str__]
+  #end if
+  #if $binary_ochiai.__str__ != "None":
+   #set  datasets = $datasets + ["'binary_ochiai_.*$:'" + $binary_ochiai.__str__]
+  #end if
+  #if $binary_pearson.__str__ != "None":
+   #set  datasets = $datasets + ["'binary_pearson_.*$:'" + $binary_pearson.__str__]
+  #end if
+  #if $binary_sorensen_dice.__str__ != "None":
+   #set  datasets = $datasets + ["'binary_sorensen_dice_.*$:'" + $binary_sorensen_dice.__str__]
+  #end if
+  #if $bray_curtis.__str__ != "None":
+   #set  datasets = $datasets + ["'bray_curtis_.*$:'" + $bray_curtis.__str__]
+  #end if
+  #if $canberra.__str__ != "None":
+   #set  datasets = $datasets + ["'canberra_.*$:'" + $canberra.__str__]
+  #end if
+  #if $chisq.__str__ != "None":
+   #set  datasets = $datasets + ["'chisq_.*$:'" + $chisq.__str__]
+  #end if
+  #if $chord.__str__ != "None":
+   #set  datasets = $datasets + ["'chord_.*$:'" + $chord.__str__]
+  #end if
+  #if $euclidean.__str__ != "None":
+   #set  datasets = $datasets + ["'euclidean_.*$:'" + $euclidean.__str__]
+  #end if
+  #if $gower.__str__ != "None":
+   #set  datasets = $datasets + ["'gower_.*$:'" + $gower.__str__]
+  #end if
+  #if $hellinger.__str__ != "None":
+   #set  datasets = $datasets + ["'hellinger_.*$:'" + $hellinger.__str__]
+  #end if
+  #if $kulczynski.__str__ != "None":
+   #set  datasets = $datasets + ["'kulczynski_.*$:'" + $kulczynski.__str__]
+  #end if
+  #if $manhattan.__str__ != "None":
+   #set  datasets = $datasets + ["'manhattan_.*$:'" + $manhattan.__str__]
+  #end if
+  #if $morisita_horn.__str__ != "None":
+   #set  datasets = $datasets + ["'morisita_horn_.*$:'" + $morisita_horn.__str__]
+  #end if
+  #if $pearson.__str__ != "None":
+   #set  datasets = $datasets + ["'pearson_.*$:'" + $pearson.__str__]
+  #end if
+  #if $soergel.__str__ != "None":
+   #set  datasets = $datasets + ["'soergel_.*$:'" + $soergel.__str__]
+  #end if
+  #if $spearman_approx.__str__ != "None":
+   #set  datasets = $datasets + ["'spearman_approx_.*$:'" + $spearman_approx.__str__]
+  #end if
+  #if $specprof.__str__ != "None":
+   #set  datasets = $datasets + ["'specprof_.*$:'" + $specprof.__str__]
+  #end if
+  #if $unifrac.__str__ != "None":
+   #set  datasets = $datasets + ["'unifrac_.*$:'" + $unifrac.__str__]
+  #end if
+  #if $unifrac_g.__str__ != "None":
+   #set  datasets = $datasets + ["'unifrac_g_.*$:'" + $unifrac_g.__str__]
+  #end if
+  #if $unifrac_g_full_tree.__str__ != "None":
+   #set  datasets = $datasets + ["'unifrac_g_full_tree_.*$:'" + $unifrac_g_full_tree.__str__]
+  #end if
+  #if $unweighted_unifrac.__str__ != "None":
+   #set  datasets = $datasets + ["'unweighted_unifrac_.*$:'" + $unweighted_unifrac.__str__]
+  #end if
+  #if $unweighted_unifrac_full_tree.__str__ != "None":
+   #set  datasets = $datasets + ["'unweighted_unifrac_full_tree_.*$:'" + $unweighted_unifrac_full_tree.__str__]
+  #end if
+  #if $weighted_normalized_unifrac.__str__ != "None":
+   #set  datasets = $datasets + ["'weighted_normalized_unifrac_.*$:'" + $weighted_normalized_unifrac.__str__]
+  #end if
+  #if $weighted_unifrac.__str__ != "None":
+   #set  datasets = $datasets + ["'weighted_unifrac_.*$:'" + $weighted_unifrac.__str__]
+  #end if
+  --galaxy_datasets=#echo ','.join($datasets)
+  beta_diversity.py
+  --input_path=$input_path
+  #if $rows.__str__ != '':
+   --rows=$rows
+  #end if
+  --output_dir=$__new_file_path__
+  --metrics=$metrics
+  #if $tree_path.__str__ != "None" and len($tree_path.__str__) > 0:
+   --tree_path=$tree_path
+  #end if
+  $full_tree
+ </command>
+ <inputs>
+  <param name="input_path" type="data" format="qiimeotutable"  label="input_path"
+   help="input path: otu table"/>
+  <param name="rows" type="text"  label="rows"
+   help="compute only these rows of the distance matrix. pass a list of sample names, e.g. 's1,s3' [by default, +      the full n x n matrix is generated]"/>
+  <param name="metrics" type="select" multiple="true"  label="metrics" help="metrics to use">
+    <option value="abund_jaccard">abund_jaccard</option>
+    <option value="binary_chisq">binary_chisq</option>
+    <option value="binary_chord">binary_chord</option>
+    <option value="binary_euclidean">binary_euclidean</option>
+    <option value="binary_hamming">binary_hamming</option>
+    <option value="binary_jaccard">binary_jaccard</option>
+    <option value="binary_lennon">binary_lennon</option>
+    <option value="binary_ochiai">binary_ochiai</option>
+    <option value="binary_otu_gain">binary_otu_gain</option>
+    <option value="binary_pearson">binary_pearson</option>
+    <option value="binary_sorensen_dice">binary_sorensen_dice</option>
+    <option value="bray_curtis">bray_curtis</option>
+    <option value="canberra">canberra</option>
+    <option value="chisq">chisq</option>
+    <option value="chord">chord</option>
+    <option value="euclidean">euclidean</option>
+    <option value="gower">gower</option>
+    <option value="hellinger">hellinger</option>
+    <option value="kulczynski">kulczynski</option>
+    <option value="manhattan">manhattan</option>
+    <option value="morisita_horn">morisita_horn</option>
+    <option value="pearson">pearson</option>
+    <option value="soergel">soergel</option>
+    <option value="spearman_approx">spearman_approx</option>
+    <option value="specprof">specprof</option>
+    <option value="unifrac">unifrac</option>
+    <option value="unifrac_g">unifrac_g</option>
+    <option value="unifrac_g_full_tree">unifrac_g_full_tree</option>
+    <option value="unweighted_unifrac">unweighted_unifrac</option>
+    <option value="unweighted_unifrac_full_tree">unweighted_unifrac_full_tree</option>
+    <option value="weighted_normalized_unifrac">weighted_normalized_unifrac</option>
+    <option value="weighted_unifrac">weighted_unifrac</option>
+  </param>
+  <param name="tree_path" type="text"  label="tree_path"
+   help="path to newick tree file, required for phylogenetic metrics [default: %default]"/>
+  <param name="full_tree" type="boolean" truevalue="--full_tree" falsevalue="" checked="false" label="full_tree"
+   help="by default, we first compute the intersection of the tree with the otus present in the otu table. pass -f if you already have a minimal tree, and this script will run faster"/>
+ </inputs>
+ <outputs>
+  <data format="qiimedistmat" name="binary_chisq" label="${tool.name} on ${on_string}: binary_chisq.dist">
+   <filter>'binary_chisq' in (metrics if isinstance(metrics,list) else [metrics])</filter>
+  </data>
+  <data format="qiimedistmat" name="binary_chord" label="${tool.name} on ${on_string}: binary_chord.dist">
+   <filter>'binary_chord' in (metrics if isinstance(metrics,list) else [metrics])</filter>
+  </data>
+  <data format="qiimedistmat" name="binary_euclidean" label="${tool.name} on ${on_string}: binary_euclidean.dist">
+   <filter>'binary_euclidean' in (metrics if isinstance(metrics,list) else [metrics])</filter>
+  </data>
+  <data format="qiimedistmat" name="binary_hamming" label="${tool.name} on ${on_string}: binary_hamming.dist">
+   <filter>'binary_hamming' in (metrics if isinstance(metrics,list) else [metrics])</filter>
+  </data>
+  <data format="qiimedistmat" name="binary_jaccard" label="${tool.name} on ${on_string}: binary_jaccard.dist">
+   <filter>'binary_jaccard' in (metrics if isinstance(metrics,list) else [metrics])</filter>
+  </data>
+  <data format="qiimedistmat" name="binary_lennon" label="${tool.name} on ${on_string}: binary_lennon.dist">
+   <filter>'binary_lennon' in (metrics if isinstance(metrics,list) else [metrics])</filter>
+  </data>
+  <data format="qiimedistmat" name="binary_ochiai" label="${tool.name} on ${on_string}: binary_ochiai.dist">
+   <filter>'binary_ochiai' in (metrics if isinstance(metrics,list) else [metrics])</filter>
+  </data>
+  <data format="qiimedistmat" name="binary_pearson" label="${tool.name} on ${on_string}: binary_pearson.dist">
+   <filter>'binary_pearson' in (metrics if isinstance(metrics,list) else [metrics])</filter>
+  </data>
+  <data format="qiimedistmat" name="binary_sorensen_dice" label="${tool.name} on ${on_string}: binary_sorensen_dice.dist">
+   <filter>'binary_sorensen_dice' in (metrics if isinstance(metrics,list) else [metrics])</filter>
+  </data>
+  <data format="qiimedistmat" name="bray_curtis" label="${tool.name} on ${on_string}: bray_curtis.dist">
+   <filter>'bray_curtis' in (metrics if isinstance(metrics,list) else [metrics])</filter>
+  </data>
+  <data format="qiimedistmat" name="canberra" label="${tool.name} on ${on_string}: canberra.dist">
+   <filter>'canberra' in (metrics if isinstance(metrics,list) else [metrics])</filter>
+  </data>
+  <data format="qiimedistmat" name="chisq" label="${tool.name} on ${on_string}: chisq.dist">
+   <filter>'chisq' in (metrics if isinstance(metrics,list) else [metrics])</filter>
+  </data>
+  <data format="qiimedistmat" name="chord" label="${tool.name} on ${on_string}: chord.dist">
+   <filter>'chord' in (metrics if isinstance(metrics,list) else [metrics])</filter>
+  </data>
+  <data format="qiimedistmat" name="euclidean" label="${tool.name} on ${on_string}: euclidean.dist">
+   <filter>'euclidean' in (metrics if isinstance(metrics,list) else [metrics])</filter>
+  </data>
+  <data format="qiimedistmat" name="gower" label="${tool.name} on ${on_string}: gower.dist">
+   <filter>'gower' in (metrics if isinstance(metrics,list) else [metrics])</filter>
+  </data>
+  <data format="qiimedistmat" name="hellinger" label="${tool.name} on ${on_string}: hellinger.dist">
+   <filter>'hellinger' in (metrics if isinstance(metrics,list) else [metrics])</filter>
+  </data>
+  <data format="qiimedistmat" name="kulczynski" label="${tool.name} on ${on_string}: kulczynski.dist">
+   <filter>'kulczynski' in (metrics if isinstance(metrics,list) else [metrics])</filter>
+  </data>
+  <data format="qiimedistmat" name="manhattan" label="${tool.name} on ${on_string}: manhattan.dist">
+   <filter>'manhattan' in (metrics if isinstance(metrics,list) else [metrics])</filter>
+  </data>
+  <data format="qiimedistmat" name="morisita_horn" label="${tool.name} on ${on_string}: morisita_horn.dist">
+   <filter>'morisita_horn' in (metrics if isinstance(metrics,list) else [metrics])</filter>
+  </data>
+  <data format="qiimedistmat" name="pearson" label="${tool.name} on ${on_string}: pearson.dist">
+   <filter>'pearson' in (metrics if isinstance(metrics,list) else [metrics])</filter>
+  </data>
+  <data format="qiimedistmat" name="soergel" label="${tool.name} on ${on_string}: soergel.dist">
+   <filter>'soergel' in (metrics if isinstance(metrics,list) else [metrics])</filter>
+  </data>
+  <data format="qiimedistmat" name="spearman_approx" label="${tool.name} on ${on_string}: spearman_approx.dist">
+   <filter>'spearman_approx' in (metrics if isinstance(metrics,list) else [metrics])</filter>
+  </data>
+  <data format="qiimedistmat" name="specprof" label="${tool.name} on ${on_string}: specprof.dist">
+   <filter>'specprof' in (metrics if isinstance(metrics,list) else [metrics])</filter>
+  </data>
+  <data format="qiimedistmat" name="unifrac" label="${tool.name} on ${on_string}: unifrac.dist">
+   <filter>'unifrac' in (metrics if isinstance(metrics,list) else [metrics])</filter>
+  </data>
+  <data format="qiimedistmat" name="unifrac_g" label="${tool.name} on ${on_string}: unifrac_g.dist">
+   <filter>'unifrac_g' in (metrics if isinstance(metrics,list) else [metrics])</filter>
+  </data>
+  <data format="qiimedistmat" name="unifrac_g_full_tree" label="${tool.name} on ${on_string}: unifrac_g_full_tree.dist">
+   <filter>'unifrac_g_full_tree' in (metrics if isinstance(metrics,list) else [metrics])</filter>
+  </data>
+  <data format="qiimedistmat" name="unweighted_unifrac" label="${tool.name} on ${on_string}: unweighted_unifrac.dist">
+   <filter>'unweighted_unifrac' in (metrics if isinstance(metrics,list) else [metrics])</filter>
+  </data>
+  <data format="qiimedistmat" name="unweighted_unifrac_full_tree" label="${tool.name} on ${on_string}: unweighted_unifrac_full_tree.dist">
+   <filter>'unweighted_unifrac_full_tree' in (metrics if isinstance(metrics,list) else [metrics])</filter>
+  </data>
+  <data format="qiimedistmat" name="weighted_normalized_unifrac" label="${tool.name} on ${on_string}: weighted_normalized_unifrac.dist">
+   <filter>'weighted_normalized_unifrac' in (metrics if isinstance(metrics,list) else [metrics])</filter>
+  </data>
+  <data format="qiimedistmat" name="weighted_unifrac" label="${tool.name} on ${on_string}: weighted_unifrac.dist">
+   <filter>'weighted_unifrac' in (metrics if isinstance(metrics,list) else [metrics])</filter>
+  </data>
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/beta_diversity_through_3d_plots.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,131 @@
+<tool id="beta_diversity_through_3d_plots" name="beta_diversity_through_3d_plots" version="1.2.0">
+ <description>A workflow script for computing beta diversity distance matrices and the corresponding 3D plots</description>
+ <requirements>
+  <requirement type="binary">beta_diversity_through_3d_plots.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_outputdir='$log.extra_files_path'
+  --galaxy_datasets='^log_\S+\.txt$:'$log,'^prefs\.txt$:'$prefs
+  beta_diversity_through_3d_plots.py
+  --otu_table_fp=$otu_table_fp
+  --mapping_fp=$mapping_fp
+  --output_dir='$log.extra_files_path'
+  --force
+  #if $parameter.source == 'hist':
+   --parameter_fp=$parameter_fp
+  #else:
+   --parameter_fp=$parameter_generated
+  #end if
+  --tree_fp=$tree_fp
+  #if int($seqs_per_sample) > 0:
+   --seqs_per_sample=$seqs_per_sample
+  #end if
+  $parallel
+ </command>
+ <inputs>
+  <param name="otu_table_fp" type="data" format="qiimeotutable" label="otu_table_fp"
+   help="the input OTU table [REQUIRED]"/>
+  <param name="mapping_fp" type="data" format="qiimemapping" label="mapping_fp"
+   help="path to the mapping file [REQUIRED]"/>
+
+  <conditional name="parameter">
+   <param name="source" type="select" label="Parameters from" help="">
+    <option value="hist">Your History</option>
+    <option value="build">Build a Parameter file</option>
+   </param>
+   <when value="hist">
+    <param name="parameter_fp" type="data" format="qiimeparams" label="parameter_fp"
+     help="path to the parameter file [REQUIRED]"/>
+   </when> <!-- hist -->
+   <when value="build">
+   <!--
+     beta_diversity:metrics
+        params['alpha_diversity']['metrics'].split(',')
+        params['multiple_rarefactions']
+        params['parallel'])
+        params['alpha_diversity'])
+        params['collate_alpha']
+        params['make_rarefaction_plots']
+    multiple_rarefactions.py
+     min seqs/sample
+     max seqs/sample
+     step
+     depth    sequences per sample to subsample
+     num-reps
+     lineages_included 
+     keep_empty_otus
+    alpha_diversity.py
+    collate_alpha.py
+    make_rarefaction_plots.py
+   -->
+   </when> <!-- build -->
+  </conditional> <!-- parameter -->
+  <param name="tree_fp" type="data" format="tre" optional="true" label="tree_fp"
+   help="path to the tree file [default: ('NO', 'DEFAULT'); REQUIRED for phylogenetic measures]"/>
+  <param name="seqs_per_sample" type="integer" value="-1" label="seqs_per_sample"
+   help="depth of coverage for even sampling [default: ('NO', 'DEFAULT')]"/>
+  <param name="parallel" type="boolean" truevalue="--parallel" falsevalue="" checked="false" label="parallel"
+   help="Run in parallel where available [default: False]"/>
+ </inputs>
+ <configfiles>
+  <configfile name="parameter_generated">
+beta_diversity:metrics
+alpha_diversity:metrics	chao1,observed_species,PD_whole_tree
+multiple_rarefactions_even_depth:num-reps	20
+parallel:jobs_to_start	2
+parallel:retain_temp_files	False
+parallel:seconds_to_sleep	60
+collate_alpha:example_path
+make_rarefaction_plots:imagetype	png
+make_rarefaction_plots:resolution	75
+make_rarefaction_plots:background_color	white
+make_rarefaction_plots:prefs_path
+  </configfile>
+  <configfile name="output_template">
+<![CDATA[
+<html>
+<body>
+<!-- plots discrete/continuous for each beta_diversiry metric txt_3D.html -->
+<a href="rarefaction_plots.html">rarefaction_plots.html</a>
+</body>
+</html>
+]]>
+  </configfile>
+
+ </configfiles>
+ <outputs>
+  <!--
+This script results in a distance matrix (from beta_diversity.py), 
+a principal coordinates file (from principal_coordinates.py), 
+a preferences file (from make_prefs_file.py) 
+and folder containing the resulting 3d PCoA plots (as an html from make_3d_plots.py).
+   -->
+  <data format="txt" name="log" label="${tool.name} on ${on_string}: log"/>
+  <data format="qiimedistmat" name="seqs_otu_table" label="${tool.name} on ${on_string}: weighted_unifrac_seqs_otu_table_even146.txt"/>
+                 {weighted_unifrac}_{dataset_4477.dat}
+  <data format="qiimepca" name="pca" label="${tool.name} on ${on_string}: weighted_unifrac_pc.txt"/>
+                 
+  <data format="qiimeprefs" name="prefs" label="${tool.name} on ${on_string}: prefs.txt"/>
+  <data format="html" name="pc_plots" label="${tool.name} on ${on_string}: PCoA plots"/>
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+$ beta_diversity_through_3d_plots.py -i wf_da/uclust_picked_otus/rep_set/rdp_assigned_taxonomy/otu_table/seqs_otu_table.txt -m Fasting_Map.txt -o wf_bdiv_even146_test/  -p custom_parameters.tt -t wf_da/uclust_picked_otus/rep_set/pynast_aligned_seqs/fasttree_phylogeny/seqs_rep_set.tre -e 146 --print_only
+
+single_rarefaction.py -i wf_da/uclust_picked_otus/rep_set/rdp_assigned_taxonomy/otu_table/seqs_otu_table.txt -o wf_bdiv_even146_test//seqs_otu_table_even146.txt -d 146
+make_prefs_file.py -m Fasting_Map.txt -o wf_bdiv_even146_test//prefs.txt --monte_carlo_dists 10 --background_color black --mapping_headers_to_use Treatment,DOB
+beta_diversity.py -i wf_bdiv_even146_test//seqs_otu_table_even146.txt -o wf_bdiv_even146_test/ --metrics weighted_unifrac  -t wf_da/uclust_picked_otus/rep_set/pynast_aligned_seqs/fasttree_phylogeny/seqs_rep_set.tre 
+principal_coordinates.py -i wf_bdiv_even146_test//weighted_unifrac_seqs_otu_table_even146.txt -o wf_bdiv_even146_test//weighted_unifrac_pc.txt 
+make_3d_plots.py -p wf_bdiv_even146_test//prefs.txt -i wf_bdiv_even146_test//weighted_unifrac_pc.txt -o wf_bdiv_even146_test//weighted_unifrac_3d_continuous/ -m Fasting_Map.txt --ellipsoid_smoothness 1
+make_3d_plots.py -b "SampleID,BarcodeSequence,LinkerPrimerSequence,Treatment,DOB,Description" -i wf_bdiv_even146_test//weighted_unifrac_pc.txt -o wf_bdiv_even146_test//weighted_unifrac_3d_discrete/ -m Fasting_Map.txt --ellipsoid_smoothness 1
+beta_diversity.py -i wf_bdiv_even146_test//seqs_otu_table_even146.txt -o wf_bdiv_even146_test/ --metrics unweighted_unifrac  -t wf_da/uclust_picked_otus/rep_set/pynast_aligned_seqs/fasttree_phylogeny/seqs_rep_set.tre 
+principal_coordinates.py -i wf_bdiv_even146_test//unweighted_unifrac_seqs_otu_table_even146.txt -o wf_bdiv_even146_test//unweighted_unifrac_pc.txt 
+make_3d_plots.py -p wf_bdiv_even146_test//prefs.txt -i wf_bdiv_even146_test//unweighted_unifrac_pc.txt -o wf_bdiv_even146_test//unweighted_unifrac_3d_continuous/ -m Fasting_Map.txt --ellipsoid_smoothness 1
+make_3d_plots.py -b "SampleID,BarcodeSequence,LinkerPrimerSequence,Treatment,DOB,Description" -i wf_bdiv_even146_test//unweighted_unifrac_pc.txt -o wf_bdiv_even146_test//unweighted_unifrac_3d_discrete/ -m Fasting_Map.txt --ellipsoid_smoothness 1
+
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/beta_significance.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,35 @@
+<tool id="beta_significance" name="beta_significance" version="1.2.0">
+ <description>This script runs any of a set of common tests to determine if a sample is statistically significantly different from another sample</description>
+ <requirements>
+  <requirement type="binary">beta_significance.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  beta_significance.py
+  --input_path=$input_path
+  --output_path=$output_path
+  --significance_test=$significance_test
+  --tree_path=$tree_path
+  --num_iters=$num_iters
+ </command>
+ <inputs>
+  <param name="input_path" type="text"  label="input_path"
+   help="input otu table [REQUIRED]"/>
+  <param name="significance_test" type="text"  label="significance_test"
+   help="significance test to use, options are 'unweighted_unifrac', 'weighted_unifrac', or 'p-test' [REQUIRED]"/>
+  <param name="tree_path" type="text"  label="tree_path"
+   help="path to newick tree file, required for phylogenetic metrics [default: %default]"/>
+  <param name="num_iters" type="integer" value="100" label="num_iters"
+   help="number of monte carlo randomizations [default: 100]"/>
+ </inputs>
+ <outputs>
+  <data format="txt" name="output_path"/>
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/blast_wrapper.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,31 @@
+<tool id="blast_wrapper" name="blast_wrapper" version="1.2.0">
+ <description>Blast Interface</description>
+ <requirements>
+  <requirement type="binary">blast_wrapper.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  blast_wrapper.py
+  --input_fasta_fp=$input_fasta_fp
+  --refseqs_fp=$refseqs_fp
+  --num_seqs_per_blast_run=$num_seqs_per_blast_run
+ </command>
+ <inputs>
+  <param name="input_fasta_fp" type="data" format="fasta" label="input_fasta_fp"
+   help="path to the input fasta file [REQUIRED]"/>
+  <param name="refseqs_fp" type="data" format="fasta" label="refseqs_fp"
+   help="path to blast database as a fasta file [REQUIRED]"/>
+  <param name="num_seqs_per_blast_run" type="integer" value="1000" label="num_seqs_per_blast_run"
+   help="number of sequences passed to each blast call - useful for very large sequence collections [default: 1000]"/>
+ </inputs>
+ <outputs>
+  
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/categorized_dist_scatterplot.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,41 @@
+<tool id="categorized_dist_scatterplot" name="categorized_dist_scatterplot" version="1.2.1">
+ <description>makes a figure representing average distances between samples, broken down by categories. I call it a 'categorized distance scatterplot'</description>
+ <requirements>
+  <requirement type="binary">categorized_dist_scatterplot.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  categorized_dist_scatterplot.py
+  --map=$map
+  --distance_matrix=$distance_matrix
+  --primary_state=$primary_state
+  --axis_category=$axis_category
+  --output_path=$output_path
+  --colorby=$colorby
+  --secondary_state=$secondary_state
+ </command>
+ <inputs>
+  <param name="map" type="data" format="tabular" label="map"
+   help="mapping file [REQUIRED]"/>
+  <param name="distance_matrix" type="text"  label="distance_matrix"
+   help="distance matrix [REQUIRED]"/>
+  <param name="primary_state" type="text"  label="primary_state"
+   help="Samples matching this state will be plotted. E.g.: AgeCategory:Child . See qiime's filter_by_metadata.py for more syntax options [REQUIRED]"/>
+  <param name="axis_category" type="text"  label="axis_category"
+   help="this will form the horizontal axis of the figure, e.g.: AgeYears . Must be numbers [REQUIRED]"/>
+  <param name="colorby" type="text"  label="colorby"
+   help="samples will first be separated by this column of the mapping file. They will be colored by this column of the mapping file, and all comparisons will be done only among samples with the same value in this column. e.g.: Country. You may omit -c, and the samples will not be separated"/>
+  <param name="secondary_state" type="text"  label="secondary_state"
+   help="all samples matching the primary state will be compared to samples matcthing this secondary state. E.g.: AgeCategory:Adult"/>
+ </inputs>
+ <outputs>
+  <data format="txt" name="output_path"/>
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/check_id_map.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,43 @@
+<tool id="check_id_map" name="check_id_map" version="1.2.0">
+ <description>Checks user's metadata mapping file for required data, valid format</description>
+ <requirements>
+  <requirement type="binary">check_id_map.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_outputdir='$log.extra_files_path'
+  --galaxy_datasets='^\S+_corrected\.txt$:'$corrected_mapping,'^\S+\.log:'$log
+  check_id_map.py
+  --map=$map
+  --output_dir='$log.extra_files_path'
+  --char_replace=$char_replace
+  $not_barcoded
+  $variable_len_barcodes
+  $disable_primer_check
+  $verbose
+ </command>
+ <inputs>
+  <param name="map" type="data" format="tabular" label="map"
+   help="Metadata mapping file filepath [REQUIRED]"/>
+  <param name="char_replace" type="text" value="_" label="char_replace"
+   help="Changes the default character used to replace invalid characters found in the mapping file.  Must be a valid character (alphanumeric or underscore).  NOT IMPLEMENTED CURRENTLY [default: _]"/>
+  <param name="not_barcoded" type="boolean" truevalue="--not_barcoded" falsevalue="" checked="false" label="not_barcoded"
+   help="Use -b if barcodes are not present. [default: False]"/>
+  <param name="variable_len_barcodes" type="boolean" truevalue="--variable_len_barcodes" falsevalue="" checked="false" label="variable_len_barcodes"
+   help="Use -B if variable length barcodes are present to suppress warnings about barcodes of unequal length. [default: False]"/>
+  <param name="disable_primer_check" type="boolean" truevalue="--disable_primer_check" falsevalue="" checked="false" label="disable_primer_check"
+   help="Use -p to disable checks for primers. [default: False]"/>
+  <param name="verbose" type="boolean" truevalue="" falsevalue="--verbose" checked="false" label="verbose"
+   help="Turn on this flag to disable verbose output.  [default: True]"/>
+ </inputs>
+ <outputs>
+   <data format="txt" name="log"/>
+   <data format="tabular" name="corrected_mapping" label="${tool.name} on ${on_string}: corrected_mapping"/>
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/collate_alpha.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,29 @@
+<tool id="collate_alpha" name="collate_alpha" version="1.2.0">
+ <description>Collate alpha diversity results</description>
+ <requirements>
+  <requirement type="binary">collate_alpha.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  collate_alpha.py
+  --input_path=$input_path
+  --output_path=$output_path
+  --example_path=$example_path
+ </command>
+ <inputs>
+  <param name="input_path" type="text"  label="input_path"
+   help="input path (a directory) [REQUIRED]"/>
+  <param name="example_path" type="text"  label="example_path"
+   help="example alpha_diversity analysis file, containing all samples and all metrics to be included in the collated result[Default: chosen automatically (see usage string)]"/>
+ </inputs>
+ <outputs>
+  <data format="txt" name="output_path"/>
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/compare_3d_plots.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,47 @@
+<tool id="compare_3d_plots" name="compare_3d_plots" version="1.2.0">
+ <description>Plot several PCoA files on the same 3D plot</description>
+ <requirements>
+  <requirement type="binary">compare_3d_plots.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  compare_3d_plots.py
+  --coord_fnames=$coord_fnames
+  --map_fname=$map_fname
+  --colorby=$colorby
+  --custom_axes=$custom_axes
+  --prefs_path=$prefs_path
+  --background_color=$background_color
+  --edges_file=$edges_file
+  $serial
+  --output_dir=$__new_file_path__
+ </command>
+ <inputs>
+  <param name="coord_fnames" type="text"  label="coord_fnames"
+   help="This is comma-separated list of the paths to the principal coordinates files (i.e., resulting file from principal_coordinates.py), e.g 'pcoa1.txt,pcoa2.txt' [REQUIRED]"/>
+  <param name="map_fname" type="data" format="tabular" label="map_fname"
+   help="This is the user-generated mapping file [default=('NO', 'DEFAULT')] [REQUIRED]"/>
+  <param name="colorby" type="text"  label="colorby"
+   help="This is a list of the categories to color by in the plots from the user-generated mapping file. The categories must match the name of a column header in the mapping file exactly and multiple categories can be list by comma separating them without spaces. The user can also combine columns in the mapping file by separating the categories by '&#38;&#38;' without spaces [default=('NO', 'DEFAULT')]"/>
+  <param name="custom_axes" type="text"  label="custom_axes"
+   help="This is a category or list of categories from the user-generated mapping file to use as a custom axis in the plot.  For instance, if there is a pH category and one would like to see the samples plotted on that axis instead of PC1, PC2, etc., one can use this option.  It is also useful for plotting time-series data [default: ('NO', 'DEFAULT')]"/>
+  <param name="prefs_path" type="text"  label="prefs_path"
+   help="This is the user-generated preferences file. NOTE: This is a file with a dictionary containing preferences for the analysis. See make_prefs_file.py. [default: ('NO', 'DEFAULT')]"/>
+  <param name="background_color" type="text"  label="background_color"
+   help="This is the background color to use in the plots (Options are 'black' or 'white'. [default: ('NO', 'DEFAULT')]"/>
+  <param name="edges_file" type="data" format="txt" label="edges_file"
+   help="A file where each line contains two sample IDs separated by a whitespace character; for each pair of sample IDs, an edge will be drawn from the first sample to the second sample. [default: %default]"/>
+  <param name="serial" type="boolean" truevalue="--serial" falsevalue="" checked="false" label="serial"
+   help="Connect the 1st set of points to the 2nd, the 2nd to the 3rd, etc. Default behavior is to connect each set of points back to the 1st set. This flag is ignored if the user specifies an edges file."/>
+ </inputs>
+ <outputs>
+  
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/consensus_tree.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,29 @@
+<tool id="consensus_tree" name="consensus_tree" version="1.2.0">
+ <description>This script outputs a majority consensus tree given a collection of input trees.</description>
+ <requirements>
+  <requirement type="binary">consensus_tree.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  consensus_tree.py
+  --input_dir=$input_dir
+  --output_fname=$output_fname
+  $strict
+ </command>
+ <inputs>
+  <param name="input_dir" type="text"  label="input_dir"
+   help="input folder containing trees [REQUIRED]"/>
+  <param name="strict" type="boolean" truevalue="--strict" falsevalue="" checked="false" label="strict"
+   help="Use only nodes occurring }50% of the time [default: False]"/>
+ </inputs>
+ <outputs>
+  <data format="txt" name="output_fname"/>
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/convert_otu_table_to_unifrac_sample_mapping.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,26 @@
+<tool id="convert_otu_table_to_unifrac_sample_mapping" name="convert_otu_table_to_unifrac_sample_mapping" version="1.2.0">
+ <description>Convert a QIIME OTU table to a UniFrac sample mapping file</description>
+ <requirements>
+  <requirement type="binary">convert_otu_table_to_unifrac_sample_mapping.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  convert_otu_table_to_unifrac_sample_mapping.py
+  --otu_table_fp=$otu_table_fp
+  --output_fp=$output_fp
+ </command>
+ <inputs>
+  <param name="otu_table_fp" type="data" format="txt" label="otu_table_fp"
+   help="path to the otu table [REQUIRED]"/>
+ </inputs>
+ <outputs>
+  <data format="txt" name="output_fp"/>
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/convert_unifrac_sample_mapping_to_otu_table.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,26 @@
+<tool id="convert_unifrac_sample_mapping_to_otu_table" name="convert_unifrac_sample_mapping_to_otu_table" version="1.2.0">
+ <description>Convert a UniFrac sample mapping file to an OTU table</description>
+ <requirements>
+  <requirement type="binary">convert_unifrac_sample_mapping_to_otu_table.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  convert_unifrac_sample_mapping_to_otu_table.py
+  --sample_mapping_fp=$sample_mapping_fp
+  --output_fp=$output_fp
+ </command>
+ <inputs>
+  <param name="sample_mapping_fp" type="data" format="tabular" label="sample_mapping_fp"
+   help="path to the sample mapping file [REQUIRED]"/>
+ </inputs>
+ <outputs>
+  <data format="txt" name="output_fp"/>
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/denoise.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,53 @@
+<tool id="denoise" name="denoise" version="1.2.0">
+ <description>Denoise a flowgram file</description>
+ <requirements>
+  <requirement type="binary">denoise.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  denoise.py
+  --input_file=$input_file
+  --fasta_file=$fasta_file
+  --output_dir=$__new_file_path__
+  --method=$method
+  $keep_intermediates
+  --cut-off=$cut_off
+  --precision=$precision
+  --num_cpus=$num_cpus
+  $force_overwrite
+  --map_fname=$map_fname
+  --primer=$primer
+ </command>
+ <inputs>
+  <param name="input_file" type="data" format="txt" label="input_file"
+   help="path to flowgram files (.sff.txt), comma separated [REQUIRED]"/>
+  <param name="fasta_file" type="data" format="fasta" label="fasta_file"
+   help="path to fasta file from split_libraries.py [REQUIRED]"/>
+  <param name="method" type="text" value="fast" label="method"
+   help="Method to use for denoising. Choice of pyronoise or fast [default: fast]"/>
+  <param name="keep_intermediates" type="boolean" truevalue="--keep_intermediates" falsevalue="" checked="false" label="keep_intermediates"
+   help="Do not delete intermediate files -- useful for debugging [default: False]"/>
+  <param name="cut_off" type="float" value="0.05" label="cut-off"
+   help="cut-off value (passed to pyroNoise) [default: 0.05]"/>
+  <param name="precision" type="float" value="15.0" label="precision"
+   help="precision (passed to pyroNoise)[default: 15.0]"/>
+  <param name="num_cpus" type="integer" value="1" label="num_cpus"
+   help="number of CPUs [default: 1]"/>
+  <param name="force_overwrite" type="boolean" truevalue="--force_overwrite" falsevalue="" checked="false" label="force_overwrite"
+   help="Overwrite files in output directory [default: False]"/>
+  <param name="map_fname" type="data" format="tabular" label="map_fname"
+   help="name of mapping file, Has to contain field LinkerPrimerSequence. [REQUIRED] when method is fast"/>
+  <param name="primer" type="text"  label="primer"
+   help="primer sequence [default: %default]"/>
+ </inputs>
+ <outputs>
+  
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dissimilarity_mtx_stats.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,26 @@
+<tool id="dissimilarity_mtx_stats" name="dissimilarity_mtx_stats" version="1.2.0">
+ <description>Calculate mean, median and standard deviation from a set of distance matrices</description>
+ <requirements>
+  <requirement type="binary">dissimilarity_mtx_stats.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  dissimilarity_mtx_stats.py
+  --input_dir=$input_dir
+  --output_dir=$__new_file_path__
+ </command>
+ <inputs>
+  <param name="input_dir" type="text"  label="input_dir"
+   help="Path to input directory [REQUIRED]"/>
+ </inputs>
+ <outputs>
+  
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/exclude_seqs_by_blast.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,53 @@
+<tool id="exclude_seqs_by_blast" name="exclude_seqs_by_blast" version="1.2.0">
+ <description>Exclude contaminated sequences using BLAST</description>
+ <requirements>
+  <requirement type="binary">exclude_seqs_by_blast.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  exclude_seqs_by_blast.py
+  --querydb=$querydb
+  --subjectdb=$subjectdb
+  --outputfilename=$outputfilename
+  --e_value=$e_value
+  --percent_aligned=$percent_aligned
+  $no_clean
+  --blastmatroot=$blastmatroot
+  --working_dir=$working_dir
+  --max_hits=$max_hits
+  --word_size=$word_size
+  $no_format_db
+ </command>
+ <inputs>
+  <param name="querydb" type="text"  label="querydb"
+   help="The path to a FASTA file containing query sequences [REQUIRED]"/>
+  <param name="subjectdb" type="text"  label="subjectdb"
+   help="The path to a FASTA file to BLAST against [REQUIRED]"/>
+  <param name="e_value" type="float" value="1e-10" label="e_value"
+   help="The e-value cutoff for blast queries [default: 1e-10]."/>
+  <param name="percent_aligned" type="float" value="0.97" label="percent_aligned"
+   help="The % alignment cutoff for blast queries [default: 0.97]."/>
+  <param name="no_clean" type="boolean" truevalue="--no_clean" falsevalue="" checked="false" label="no_clean"
+   help="If set, don't delete files generated by formatdb after running [default: False]."/>
+  <param name="blastmatroot" type="text"  label="blastmatroot"
+   help="Path to a folder containing blast matrices [default: %default]."/>
+  <param name="working_dir" type="text" value="/tmp" label="working_dir"
+   help="Working dir for BLAST [default: /tmp]."/>
+  <param name="max_hits" type="integer" value="100" label="max_hits"
+   help="Max hits parameter for BLAST. CAUTION: Because filtering on alignment percentage occurs after BLAST, a max hits value of 1 in combination with an alignment percent filter could miss valid contaminants. [default: 100]"/>
+  <param name="word_size" type="integer" value="28" label="word_size"
+   help="Word size to use for BLAST search [default: 28]"/>
+  <param name="no_format_db" type="boolean" truevalue="--no_format_db" falsevalue="" checked="false" label="no_format_db"
+   help="If this flag is specified, format_db will not be called on the subject database (formatdb will be set to False).  This is  useful if you have already formatted the database and a) it took a very long time or b) you want to run the script in parallel on the pre-formatted database [default: False]"/>
+ </inputs>
+ <outputs>
+  <data format="txt" name="outputfilename"/>
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/extract_seqs_by_sample_id.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,32 @@
+<tool id="extract_seqs_by_sample_id" name="extract_seqs_by_sample_id" version="1.2.0">
+ <description>Extract sequences based on the SampleID</description>
+ <requirements>
+  <requirement type="binary">extract_seqs_by_sample_id.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  extract_seqs_by_sample_id.py
+  --input_fasta_fp=$input_fasta_fp
+  --sample_ids=$sample_ids
+  --output_fasta_fp=$output_fasta_fp
+  $negate
+ </command>
+ <inputs>
+  <param name="input_fasta_fp" type="data" format="fasta" label="input_fasta_fp"
+   help="path to the input fasta file [REQUIRED]"/>
+  <param name="sample_ids" type="text"  label="sample_ids"
+   help="comma-separated sample_ids to include in output fasta file(or exclude if -n=True) [REQUIRED]"/>
+  <param name="negate" type="boolean" truevalue="--negate" falsevalue="" checked="false" label="negate"
+   help="negate the sample ID list (i.e., output sample ids not passed via -s) [default: False]"/>
+ </inputs>
+ <outputs>
+  <data format="txt" name="output_fasta_fp"/>
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/filter_alignment.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,43 @@
+<tool id="filter_alignment" name="filter_alignment" version="1.2.0">
+ <description>Filter sequence alignment by removing highly variable regions</description>
+ <requirements>
+  <requirement type="binary">filter_alignment.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  ## --galaxy_tmpdir='$__new_file_path__'
+  --galaxy_outputdir='$pfiltered_fasta.extra_files_path'
+  --galaxy_datasets='^\S+_pfiltered\.\S+$:'$pfiltered_fasta
+  filter_alignment.py
+  --input_fasta_file=$input_fasta_file
+  --output_dir='$pfiltered_fasta.extra_files_path'
+  --lane_mask_fp=$lane_mask_fp
+  $suppress_lane_mask_filter
+  --allowed_gap_frac=$allowed_gap_frac
+  $remove_outliers
+  --threshold=$threshold
+ </command>
+ <inputs>
+  <param name="input_fasta_file" type="data" format="align" label="input_fasta_file"
+   help="the input directory  [REQUIRED]"/>
+  <param name="lane_mask_fp" type="data" format="filter" label="lane_mask_fp"
+   help="path to lanemask file [default: %default]"/>
+  <param name="suppress_lane_mask_filter" type="boolean" truevalue="--suppress_lane_mask_filter" falsevalue="" checked="false" label="suppress_lane_mask_filter"
+   help="suppress lane mask filtering (necessary to turn off lane-mask-based filtering when a qiime_config default is  provided for --lane_mask_fp) [default: False]"/>
+  <param name="allowed_gap_frac" type="float" value="0.999999" label="allowed_gap_frac"
+   help="gap filter threshold, filters positions which are gaps in } allowed_gap_frac of the sequences [default: 0.999999]"/>
+  <param name="remove_outliers" type="boolean" truevalue="--remove_outliers" falsevalue="" checked="false" label="remove_outliers"
+   help="remove seqs very dissimilar to the alignment consensus (see --threshold).  [default: False]"/>
+  <param name="threshold" type="float" value="3.0" label="threshold"
+   help="with -r, remove seqs whose dissimilarity to the consensus sequence is approximately } x standard devaitions above the mean of the sequences [default: 3.0]"/>
+ </inputs>
+ <outputs>
+  <data format="align" name="pfiltered_fasta" label="${tool.name} on ${on_string}: pfiltered.fasta"/>
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/filter_by_metadata.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,37 @@
+<tool id="filter_by_metadata" name="filter_by_metadata" version="1.2.0">
+ <description>Filter OTU table by removal of specified metadata</description>
+ <requirements>
+  <requirement type="binary">filter_by_metadata.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  filter_by_metadata.py
+  --otu_table_fp=$otu_table_fp
+  --map=$map
+  --states=$states
+  --otu_outfile=$otu_outfile
+  --map_outfile=$map_outfile
+  --num_seqs_per_otu=$num_seqs_per_otu
+ </command>
+ <inputs>
+  <param name="otu_table_fp" type="data" format="txt" label="otu_table_fp"
+   help="path to the input OTU table (i.e., the output from make_otu_table.py) [REQUIRED]"/>
+  <param name="map" type="data" format="tabular" label="map"
+   help="path to the map file [REQUIRED]"/>
+  <param name="states" type="text"  label="states"
+   help="string containing valid states, e.g. 'STUDY_NAME:DOG' [REQUIRED]"/>
+  <param name="num_seqs_per_otu" type="integer" value="1" label="num_seqs_per_otu"
+   help="minimum counts across samples to keep OTU, default is only to keep OTUs that are present in the samples."/>
+ </inputs>
+ <outputs>
+  <data format="txt" name="otu_outfile"/>
+  <data format="txt" name="map_outfile"/>
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/filter_fasta.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,41 @@
+<tool id="filter_fasta" name="filter_fasta" version="1.2.0">
+ <description>This script can be applied to remove sequences from a fasta file based on input criteria.</description>
+ <requirements>
+  <requirement type="binary">filter_fasta.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  filter_fasta.py
+  --input_fasta_fp=$input_fasta_fp
+  --output_fasta_fp=$output_fasta_fp
+  --otu_map=$otu_map
+  --seq_id_fp=$seq_id_fp
+  --subject_fasta_fp=$subject_fasta_fp
+  --seq_id_prefix=$seq_id_prefix
+  $negate
+ </command>
+ <inputs>
+  <param name="input_fasta_fp" type="data" format="fasta" label="input_fasta_fp"
+   help="path to the input fasta file [REQUIRED]"/>
+  <param name="otu_map" type="data" format="tabular" label="otu_map"
+   help="an OTU map where sequences ids are those which should be retained"/>
+  <param name="seq_id_fp" type="data" format="txt" label="seq_id_fp"
+   help="A list of sequence identifiers (or tab-delimited lines with a seq identifier in the first field) which should be retained"/>
+  <param name="subject_fasta_fp" type="data" format="fasta" label="subject_fasta_fp"
+   help="A fasta file where the seq ids should be retained."/>
+  <param name="seq_id_prefix" type="text"  label="seq_id_prefix"
+   help="keep seqs where seq_id starts with this prefix"/>
+  <param name="negate" type="boolean" truevalue="--negate" falsevalue="" checked="false" label="negate"
+   help="discard passed seq ids rather than keep passed seq ids [default: False]"/>
+ </inputs>
+ <outputs>
+  <data format="txt" name="output_fasta_fp"/>
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/filter_otu_table.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,43 @@
+<tool id="filter_otu_table" name="filter_otu_table" version="1.2.0">
+ <description>Filters OTU table by minimum OTU count and number of samples or by taxonomy</description>
+ <requirements>
+  <requirement type="binary">filter_otu_table.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  filter_otu_table.py
+  --otu_table_fp=$otu_table_fp
+  --min_count=$min_count
+  --min_samples=$min_samples
+  --include_taxonomy=$include_taxonomy
+  --exclude_taxonomy=$exclude_taxonomy
+  --dir_path=$dir_path
+  --seqs_per_sample=$seqs_per_sample
+ </command>
+ <inputs>
+  <param name="otu_table_fp" type="data" format="txt" label="otu_table_fp"
+   help="path to the input OTU table (i.e., the output from make_otu_table.py) [REQUIRED]"/>
+  <param name="min_count" type="integer" value="1" label="min_count"
+   help="retain OTUs with at least this many sequences [default=1]"/>
+  <param name="min_samples" type="integer" value="2" label="min_samples"
+   help="retain OTUs found in at least this many samples [default=2]"/>
+  <param name="include_taxonomy" type="text" value="" label="include_taxonomy"
+   help="list of taxonomy terms to include [default=]"/>
+  <param name="exclude_taxonomy" type="text" value="" label="exclude_taxonomy"
+   help="list of taxonomy terms to exclude [default=]"/>
+  <param name="dir_path" type="text" value="./" label="dir_path"
+   help="directory prefix for all analyses [default=./]"/>
+  <param name="seqs_per_sample" type="integer" value="-1" label="seqs_per_sample"
+   help="minimum sequences per sample to retain the sample. [default=('NO', 'DEFAULT')]"/>
+ </inputs>
+ <outputs>
+  
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/filter_otus_by_sample.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,32 @@
+<tool id="filter_otus_by_sample" name="filter_otus_by_sample" version="1.2.0">
+ <description>Filter OTU mapping file and sequences by SampleIDs</description>
+ <requirements>
+  <requirement type="binary">filter_otus_by_sample.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  filter_otus_by_sample.py
+  --otu_map_fp=$otu_map_fp
+  --input_fasta_fp=$input_fasta_fp
+  --samples_to_extract=$samples_to_extract
+  --output_dir=$__new_file_path__
+ </command>
+ <inputs>
+  <param name="otu_map_fp" type="data" format="tabular" label="otu_map_fp"
+   help="path to the input OTU map (i.e., the output from pick_otus.py) [REQUIRED]"/>
+  <param name="input_fasta_fp" type="data" format="fasta" label="input_fasta_fp"
+   help="path to the input fasta file [REQUIRED]"/>
+  <param name="samples_to_extract" type="text"  label="samples_to_extract"
+   help="This is a list of sample ids, which should be removed from the OTU file [REQUIRED]"/>
+ </inputs>
+ <outputs>
+  
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fix_arb_fasta.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,25 @@
+<tool id="fix_arb_fasta" name="fix_arb_fasta" version="1.2.0">
+ <description>Reformat ARB FASTA files</description>
+ <requirements>
+  <requirement type="binary">fix_arb_fasta.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  fix_arb_fasta.py
+  --input_fasta_fp=$input_fasta_fp
+ </command>
+ <inputs>
+  <param name="input_fasta_fp" type="data" format="fasta" label="input_fasta_fp"
+   help="path to the input fasta file [REQUIRED]"/>
+ </inputs>
+ <outputs>
+  
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/identify_chimeric_seqs.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,68 @@
+<tool id="identify_chimeric_seqs" name="identify_chimeric_seqs" version="1.2.0">
+ <description>Identify chimeric sequences in input FASTA file</description>
+ <requirements>
+  <requirement type="binary">identify_chimeric_seqs.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  identify_chimeric_seqs.py
+  --input_fasta_fp=$input_fasta_fp
+  #if $pick.chimera_detection_method == 'ChimeraSlayer':
+    --chimera_detection_method=$pick.chimera_detection_method
+    --aligned_reference_seqs_fp=$pick.aligned_reference_seqs_fp
+    --min_div_ratio=$pick.min_div_ratio
+    $pick.keep_intermediates
+  #elif $pick.chimera_detection_method == 'blast_fragments':
+    --chimera_detection_method=$pick.chimera_detection_method
+    --id_to_taxonomy_fp=$pick.id_to_taxonomy_fp
+    --reference_seqs_fp=$pick.reference_seqs_fp
+    --blast_db=$pick.blast_db
+    --num_fragments=$pick.num_fragments
+    --taxonomy_depth=$pick.taxonomy_depth
+    --max_e_value=$pick.max_e_value
+  #end if
+  --output_fp=$output_fp
+ </command>
+ <inputs>
+  <param name="input_fasta_fp" type="data" format="fasta" label="input_fasta_fp"
+   help="path to the input fasta file [REQUIRED]"/>
+  <conditional name="pick">
+   <param name="chimera_detection_method" type="select" label="chimera_detection_method"
+    help="Chimera detection method. Choices: blast_fragments or ChimeraSlayer. [default:ChimeraSlayer]">
+     <option value="blast_fragments">blast_fragments</option>
+     <option value="ChimeraSlayer" selected="true">ChimeraSlayer</option>
+   </param>
+   <when value="ChimeraSlayer">
+    <param name="aligned_reference_seqs_fp" type="data" format="txt" label="aligned_reference_seqs_fp"
+     help="Path to (Py)Nast aligned reference sequences. REQUIRED when method ChimeraSlayer [default: ('NO', 'DEFAULT')]"/>
+    <param name="min_div_ratio" type="float" value="0.0" label="min_div_ratio"
+     help="min divergence ratio (passed to ChimeraSlayer). If set to None uses ChimeraSlayer default value.  [default: %default]"/>
+    <param name="keep_intermediates" type="boolean" truevalue="--keep_intermediates" falsevalue="" checked="false" label="keep_intermediates"
+     help="Keep intermediate files, useful for debugging  [default: False]"/>
+   </when>
+   <when value="blast_fragments">
+    <param name="blast_db" type="text"  label="blast_db"
+     help="Database to blast against. Must provide either --blast_db or --reference_seqs_fp when method is blast_fragments [default: ('NO', 'DEFAULT')]"/>
+    <param name="reference_seqs_fp" type="data" format="txt" label="reference_seqs_fp"
+     help="Path to reference sequences (used to build a blast db when method blast_fragments). [default: ('NO', 'DEFAULT'); REQUIRED when method blast_fragments if no blast_db is provided;]"/>
+    <param name="id_to_taxonomy_fp" type="data" format="tabular" label="id_to_taxonomy_fp"
+     help="Path to tab-delimited file mapping sequences to assigned taxonomy. Each assigned taxonomy is provided as a comma-separated list. [default: ('NO', 'DEFAULT'); REQUIRED when method is blast_fragments]"/>
+    <param name="taxonomy_depth" type="integer" value="4" label="taxonomy_depth"
+     help="Number of taxonomic divisions to consider when comparing taxonomy assignments [default: 4]"/>
+    <param name="num_fragments" type="integer" value="3" label="num_fragments"
+     help="Number of fragments to split sequences into (i.e., number of expected breakpoints + 1) [default: 3]"/>
+    <param name="max_e_value" type="float" value="1e-30" label="max_e_value"
+     help="Max e-value to assign taxonomy [default: 1e-30]"/>
+   </when>
+  </conditional> <!-- pick -->
+ </inputs>
+ <outputs>
+  <data format="txt" name="output_fp" label="${tool.name} on ${on_string}: chimeras"/>
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jackknifed_beta_diversity.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,101 @@
+<tool id="jackknifed_beta_diversity" name="jackknifed_beta_diversity" version="1.2.1">
+ <description>A workflow script for performing jackknifed UPGMA clustering and build jackknifed 2d and 3D PCoA plots.</description>
+ <requirements>
+  <requirement type="binary">jackknifed_beta_diversity.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  jackknifed_beta_diversity.py
+  --otu_table_fp=$otu_table_fp
+  --output_dir=$__new_file_path__
+  $force
+  #if $parameter.source == 'hist':
+   --parameter_fp=$parameter_fp
+  #else:
+   --parameter_fp=$parameter_generated
+  #end if
+  --seqs_per_sample=$seqs_per_sample
+  --mapping_fp=$mapping_fp
+  --tree_fp=$tree_fp
+  --master_tree=$master_tree
+  $print_only
+  $parallel
+ </command>
+ <inputs>
+  <param name="otu_table_fp" type="data" format="fasta" label="otu_table_fp"
+   help="the input fasta file [REQUIRED]"/>
+
+  <param name="seqs_per_sample" type="integer" value="-1" label="seqs_per_sample"
+   help="number of sequences to include in each jackknifed subset [REQUIRED]"/>
+  <param name="mapping_fp" type="data" format="tabular" label="mapping_fp"
+   help="path to the mapping file [REQUIRED]"/>
+
+  <conditional name="parameter">
+   <param name="source" type="select" label="Parameters from" help="">
+    <option value="hist">Your History</option>
+    <option value="build">Build a Parameter file</option>
+   </param>
+   <when value="hist">
+    <param name="parameter_fp" type="data" format="qiimeparams" label="parameter_fp"
+     help="path to the parameter file [REQUIRED]"/>
+   </when> <!-- hist -->
+   <when value="build">
+   <!--
+        params['alpha_diversity']['metrics'].split(',')
+        params['multiple_rarefactions']
+        params['parallel'])
+        params['alpha_diversity'])
+        params['collate_alpha']
+        params['make_rarefaction_plots']
+    multiple_rarefactions.py
+     min seqs/sample
+     max seqs/sample
+     step
+     depth    sequences per sample to subsample
+     num-reps
+     lineages_included 
+     keep_empty_otus
+    alpha_diversity.py
+    collate_alpha.py
+    make_rarefaction_plots.py
+   -->
+   </when> <!-- build -->
+  </conditional> <!-- parameter -->
+
+  <param name="tree_fp" type="data" format="txt" label="tree_fp"
+   help="path to the tree file [default: ('NO', 'DEFAULT'); REQUIRED for phylogenetic measures]"/>
+  <param name="master_tree" type="text" value="consensus" label="master_tree"
+   help="method for computing master trees in jackknife analysis. 'consensus': consensus of trees from jackknifed otu tables.  'full': tree generated from input (unsubsambled) otu table.  [default: consensus]"/>
+  <param name="force" type="boolean" truevalue="--force" falsevalue="" checked="false" label="force"
+   help="Force overwrite of existing output directory (note: existing files in output_dir will not be removed) [default: ('NO', 'DEFAULT')]"/>
+  <param name="print_only" type="boolean" truevalue="--print_only" falsevalue="" checked="false" label="print_only"
+   help="Print the commands but don't call them -- useful for debugging [default: False]"/>
+  <param name="parallel" type="boolean" truevalue="--parallel" falsevalue="" checked="false" label="parallel"
+   help="Run in parallel where available [default: False]"/>
+ </inputs>
+ <configfiles>
+  <configfile name="parameter_generated">
+alpha_diversity:metrics chao1,observed_species,PD_whole_tree
+multiple_rarefactions_even_depth:num-reps       20
+parallel:jobs_to_start  2
+parallel:retain_temp_files      False
+parallel:seconds_to_sleep       60
+collate_alpha:example_path
+make_rarefaction_plots:imagetype        png
+make_rarefaction_plots:resolution       75
+make_rarefaction_plots:background_color white
+make_rarefaction_plots:prefs_path
+  </configfile>
+ </configfiles>
+
+ <outputs>
+  
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/galaxy/datatypes/metagenomics.py	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,1121 @@
+"""
+metagenomics datatypes
+James E Johnson - University of Minnesota
+for Mothur
+"""
+
+import data
+import logging, os, sys, time, tempfile, shutil, string, glob, re
+import galaxy.model
+from galaxy.datatypes import metadata
+from galaxy.datatypes import tabular
+from galaxy.datatypes import sequence
+from galaxy.datatypes.metadata import MetadataElement
+from galaxy.datatypes.tabular import Tabular
+from galaxy.datatypes.sequence import Fasta
+from galaxy import util
+from galaxy.datatypes.images import Html
+from sniff import *
+
+log = logging.getLogger(__name__)
+
+
+## Mothur Classes 
+
+class Otu( Tabular ):
+    file_ext = 'otu'
+
+    def sniff( self, filename ):
+        """
+        Determines whether the file is a otu (operational taxonomic unit) format
+        """
+        try:
+            fh = open( filename )
+            count = 0
+            while True:
+                line = fh.readline()
+                line = line.strip()
+                if not line:
+                    break #EOF
+                if line:
+                    if line[0] != '@':
+                        linePieces = line.split('\t')
+                        if len(linePieces) < 2:
+                            return False
+                        try:
+                            check = int(linePieces[1])
+                            if check + 2 != len(linePieces):
+                                return False
+                        except ValueError:
+                            return False
+                        count += 1
+                        if count == 5:
+                            return True
+            fh.close()
+            if count < 5 and count > 0:
+                return True
+        except:
+            pass
+        finally:
+            fh.close()
+        return False
+
+class OtuList( Otu ):
+    file_ext = 'list'
+
+class Sabund( Otu ):
+    file_ext = 'sabund'
+
+    def sniff( self, filename ):
+        """
+        Determines whether the file is a otu (operational taxonomic unit) format
+        label<TAB>count[<TAB>value(1..n)]
+        
+        """
+        try:
+            fh = open( filename )
+            count = 0
+            while True:
+                line = fh.readline()
+                line = line.strip()
+                if not line:
+                    break #EOF
+                if line:
+                    if line[0] != '@':
+                        linePieces = line.split('\t')
+                        if len(linePieces) < 2:
+                            return False
+                        try:
+                            check = int(linePieces[1])
+                            if check + 2 != len(linePieces):
+                                return False
+                            for i in range( 2, len(linePieces)):
+                                ival = int(linePieces[i])
+                        except ValueError:
+                            return False
+                        count += 1
+                        if count >= 5:
+                            return True
+            fh.close()
+            if count < 5 and count > 0:
+                return True
+        except:
+            pass
+        finally:
+            fh.close()
+        return False
+
+class Rabund( Sabund ):
+    file_ext = 'rabund'
+
+class GroupAbund( Otu ):
+    file_ext = 'grpabund'
+    def init_meta( self, dataset, copy_from=None ):
+        Otu.init_meta( self, dataset, copy_from=copy_from )
+    def set_meta( self, dataset, overwrite = True, skip=1, max_data_lines = 100000, **kwd ):
+        # See if file starts with header line
+        if dataset.has_data():
+            try:
+                fh = open( dataset.file_name )
+                line = fh.readline()
+                line = line.strip()
+                linePieces = line.split('\t')
+                if linePieces[0] == 'label' and linePieces[1] == 'Group':
+                    skip=1
+                else:
+                    skip=0
+            finally:
+                fh.close()
+        Otu.set_meta( self, dataset, overwrite, skip, max_data_lines, **kwd)
+    def sniff( self, filename, vals_are_int=False):
+        """
+        Determines whether the file is a otu (operational taxonomic unit) Shared format
+        label<TAB>group<TAB>count[<TAB>value(1..n)]
+        The first line is column headings as of Mothur v 1.20
+        """
+        log.info( "sniff GroupAbund vals_are_int %s" % vals_are_int)
+        try:
+            fh = open( filename )
+            count = 0
+            while True:
+                line = fh.readline()
+                line = line.strip()
+                if not line:
+                    break #EOF
+                if line:
+                    if line[0] != '@':
+                        linePieces = line.split('\t')
+                        if len(linePieces) < 3:
+                            return False
+                        if count > 0 or linePieces[0] != 'label':
+                            try:
+                                check = int(linePieces[2])
+                                if check + 3 != len(linePieces):
+                                    return False
+                                for i in range( 3, len(linePieces)):
+                                    if vals_are_int:
+                                        ival = int(linePieces[i])
+                                    else:
+                                        fval = float(linePieces[i])
+                            except ValueError:
+                                return False
+                        count += 1
+                        if count >= 5:
+                            return True
+            fh.close()
+            if count < 5 and count > 0:
+                return True
+        except:
+            pass
+        finally:
+            fh.close()
+        return False
+
+class SharedRabund( GroupAbund ):
+    file_ext = 'shared'
+
+
+    def sniff( self, filename ):
+        """
+        Determines whether the file is a otu (operational taxonomic unit) Shared format
+        label<TAB>group<TAB>count[<TAB>value(1..n)]
+        The first line is column headings as of Mothur v 1.20
+        """
+        # return GroupAbund.sniff(self,filename,True)
+        isme = GroupAbund.sniff(self,filename,True)
+        log.info( "is SharedRabund %s" % isme)
+        return isme
+        
+
+class RelAbund( GroupAbund ):
+    file_ext = 'relabund'
+
+    def sniff( self, filename ):
+        """
+        Determines whether the file is a otu (operational taxonomic unit) Relative Abundance format
+        label<TAB>group<TAB>count[<TAB>value(1..n)]
+        The first line is column headings as of Mothur v 1.20
+        """
+        # return GroupAbund.sniff(self,filename,False)
+        isme = GroupAbund.sniff(self,filename,False)
+        log.info( "is RelAbund %s" % isme)
+        return isme
+
+class SecondaryStructureMap(Tabular):
+    file_ext = 'map'
+    def __init__(self, **kwd):
+        """Initialize secondary structure map datatype"""
+        Tabular.__init__( self, **kwd )
+        self.column_names = ['Map']
+
+    def sniff( self, filename ):
+        """
+        Determines whether the file is a secondary structure map format
+        A single column with an integer value which indicates the row that this row maps to.
+        check you make sure is structMap[10] = 380 then structMap[380] = 10.
+        """
+        try:
+            fh = open( filename )
+            line_num = 0
+            rowidxmap = {}
+            while True:
+                line = fh.readline()
+                line_num += 1
+                line = line.strip()
+                if not line:
+                    break #EOF
+                if line:
+                    try:
+                        pointer = int(line)
+                        if pointer > 0:
+                            if pointer > line_num:
+                                rowidxmap[line_num] = pointer 
+                            elif pointer < line_num & rowidxmap[pointer] != line_num:
+                                return False
+                    except ValueError:
+                        return False
+            fh.close()
+            if count < 5 and count > 0:
+                return True
+        except:
+            pass
+        finally:
+            fh.close()
+        return False
+
+class SequenceAlignment( Fasta ):
+    file_ext = 'align'
+    def __init__(self, **kwd):
+        Fasta.__init__( self, **kwd )
+        """Initialize AlignCheck datatype"""
+
+    def sniff( self, filename ):
+        """
+        Determines whether the file is in Mothur align fasta format
+        Each sequence line must be the same length
+        """
+        
+        try:
+            fh = open( filename )
+            len = -1
+            while True:
+                line = fh.readline()
+                if not line:
+                    break #EOF
+                line = line.strip()
+                if line: #first non-empty line
+                    if line.startswith( '>' ):
+                        #The next line.strip() must not be '', nor startwith '>'
+                        line = fh.readline().strip()
+                        if line == '' or line.startswith( '>' ):
+                            break
+                        if len < 0:
+                            len = len(line)
+                        elif len != len(line):
+                            return False
+                    else:
+                        break #we found a non-empty line, but its not a fasta header
+            if len > 0:
+                return True
+        except:
+            pass
+        finally:
+            fh.close()
+        return False
+
+class AlignCheck( Tabular ):
+    file_ext = 'align.check'
+    def __init__(self, **kwd):
+        """Initialize AlignCheck datatype"""
+        Tabular.__init__( self, **kwd )
+        self.column_names = ['name','pound','dash','plus','equal','loop','tilde','total']
+        self.column_types = ['str','int','int','int','int','int','int','int']
+        self.comment_lines = 1
+
+    def set_meta( self, dataset, overwrite = True, **kwd ):
+        # Tabular.set_meta( self, dataset, overwrite = overwrite, first_line_is_header = True, skip = 1 )
+        data_lines = 0
+        if dataset.has_data():
+            dataset_fh = open( dataset.file_name )
+            while True:
+                line = dataset_fh.readline()
+                if not line: break
+                data_lines += 1
+            dataset_fh.close()
+        dataset.metadata.comment_lines = 1
+        dataset.metadata.data_lines = data_lines - 1 if data_lines > 0 else 0
+        dataset.metadata.column_names = self.column_names
+        dataset.metadata.column_types = self.column_types
+
+class AlignReport(Tabular):
+    """
+QueryName	QueryLength	TemplateName	TemplateLength	SearchMethod	SearchScore	AlignmentMethod	QueryStart	QueryEnd	TemplateStart	TemplateEnd	PairwiseAlignmentLength	GapsInQuery	GapsInTemplate	LongestInsert	SimBtwnQuery&Template
+AY457915	501		82283		1525		kmer		89.07		needleman	5		501		1		499		499			2		0		0		97.6
+    """
+    file_ext = 'align.report'
+    def __init__(self, **kwd):
+        """Initialize AlignCheck datatype"""
+        Tabular.__init__( self, **kwd )
+        self.column_names = ['QueryName','QueryLength','TemplateName','TemplateLength','SearchMethod','SearchScore',
+                             'AlignmentMethod','QueryStart','QueryEnd','TemplateStart','TemplateEnd',
+                             'PairwiseAlignmentLength','GapsInQuery','GapsInTemplate','LongestInsert','SimBtwnQuery&Template'
+                             ]
+
+class BellerophonChimera( Tabular ):
+    file_ext = 'bellerophon.chimera'
+    def __init__(self, **kwd):
+        """Initialize AlignCheck datatype"""
+        Tabular.__init__( self, **kwd )
+        self.column_names = ['Name','Score','Left','Right']
+
+class SecondaryStructureMatch(Tabular):
+    """
+	name	pound	dash	plus	equal	loop	tilde	total
+	9_1_12	42	68	8	28	275	420	872
+	9_1_14	36	68	6	26	266	422	851
+	9_1_15	44	68	8	28	276	418	873
+	9_1_16	34	72	6	30	267	430	860
+	9_1_18	46	80	2	36	261	
+    """
+    def __init__(self, **kwd):
+        """Initialize SecondaryStructureMatch datatype"""
+        Tabular.__init__( self, **kwd )
+        self.column_names = ['name','pound','dash','plus','equal','loop','tilde','total']
+
+class DistanceMatrix(data.Text):
+    file_ext = 'dist'
+    """Add metadata elements"""
+    MetadataElement( name="sequence_count", default=0, desc="Number of sequences", readonly=False, optional=True, no_value=0 )
+
+
+class LowerTriangleDistanceMatrix(DistanceMatrix):
+    file_ext = 'lower.dist'
+    def __init__(self, **kwd):
+        """Initialize secondary structure map datatype"""
+        DistanceMatrix.__init__( self, **kwd )
+
+    def sniff( self, filename ):
+        """
+        Determines whether the file is a lower-triangle distance matrix (phylip) format
+        The first line has the number of sequences in the matrix.
+        The remaining lines have the sequence name followed by a list of distances from all preceeding sequences
+                5
+                U68589
+                U68590	0.3371
+                U68591	0.3609	0.3782
+                U68592	0.4155	0.3197	0.4148
+                U68593	0.2872	0.1690	0.3361	0.2842
+        """
+        try:
+            fh = open( filename )
+            count = 0
+            while True:
+                line = fh.readline()
+                line = line.strip()
+                if not line:
+                    break #EOF
+                if line:
+                    if line[0] != '@':
+                        linePieces = line.split('\t')
+                        if len(linePieces) != 3:
+                            return False
+                        try:
+                            check = float(linePieces[2])
+                        except ValueError:
+                            return False
+                        count += 1
+                        if count == 5:
+                            return True
+            fh.close()
+            if count < 5 and count > 0:
+                return True
+        except:
+            pass
+        finally:
+            fh.close()
+        return False
+
+class SquareDistanceMatrix(DistanceMatrix,Tabular):
+    file_ext = 'square.dist'
+    sequence_count = -1
+
+    def __init__(self, **kwd):
+        """Initialize secondary structure map datatype"""
+        Tabular.__init__( self, **kwd )
+    def init_meta( self, dataset, copy_from=None ):
+        data.Text.init_meta( self, dataset, copy_from=copy_from )
+    def set_meta( self, dataset, overwrite = True, skip = None, **kwd ):
+        dataset.metadata.sequences = 0 
+
+    def sniff( self, filename ):
+        """
+        Determines whether the file is a square distance matrix (Column-formatted distance matrix) format
+        The first line has the number of sequences in the matrix.
+        The following lines have the sequence name in the first column plus a column for the distance to each sequence 
+        in the row order in which they appear in the matrix.
+               3
+               U68589  0.0000  0.3371  0.3610
+               U68590  0.3371  0.0000  0.3783
+               U68590  0.3371  0.0000  0.3783
+        """
+        try:
+            fh = open( filename )
+            count = 0
+            line = fh.readline()
+            line = line.strip()
+            sequence_count = int(line)
+            col_cnt = seq_cnt + 1
+            while True:
+                line = fh.readline()
+                line = line.strip()
+                if not line:
+                    break #EOF
+                if line:
+                    if line[0] != '@':
+                        linePieces = line.split('\t')
+                        if len(linePieces) != col_cnt :
+                            return False
+                        try:
+                            for i in range(1, col_cnt):
+                                check = float(linePieces[i])
+                        except ValueError:
+                            return False
+                        count += 1
+                        if count == 5:
+                            return True
+            fh.close()
+            if count < 5 and count > 0:
+                return True
+        except:
+            pass
+        finally:
+            fh.close()
+        return False
+
+class PairwiseDistanceMatrix(DistanceMatrix,Tabular):
+    file_ext = 'pair.dist'
+    def __init__(self, **kwd):
+        """Initialize secondary structure map datatype"""
+        Tabular.__init__( self, **kwd )
+        self.column_names = ['Sequence','Sequence','Distance']
+        self.column_types = ['str','str','float']
+        self.comment_lines = 1
+
+    def sniff( self, filename ):
+        """
+        Determines whether the file is a pairwise distance matrix (Column-formatted distance matrix) format
+        The first and second columns have the sequence names and the third column is the distance between those sequences.
+        """
+        try:
+            fh = open( filename )
+            count = 0
+            while True:
+                line = fh.readline()
+                line = line.strip()
+                if not line:
+                    break #EOF
+                if line:
+                    if line[0] != '@':
+                        linePieces = line.split('\t')
+                        if len(linePieces) != 3:
+                            return False
+                        try:
+                            check = float(linePieces[2])
+                        except ValueError:
+                            return False
+                        count += 1
+                        if count == 5:
+                            return True
+            fh.close()
+            if count < 5 and count > 0:
+                return True
+        except:
+            pass
+        finally:
+            fh.close()
+        return False
+
+class AlignCheck(Tabular):
+    file_ext = 'align.check'
+    def __init__(self, **kwd):
+        """Initialize secondary structure map datatype"""
+        Tabular.__init__( self, **kwd )
+        self.column_names = ['name','pound','dash','plus','equal','loop','tilde','total']
+        self.columns = 8
+
+class Names(Tabular):
+    file_ext = 'names'
+    def __init__(self, **kwd):
+        """Name file shows the relationship between a representative sequence(col 1)  and the sequences(comma-separated) it represents(col 2)"""
+        Tabular.__init__( self, **kwd )
+        self.column_names = ['name','representatives']
+        self.columns = 2
+
+class Summary(Tabular):
+    file_ext = 'summary'
+    def __init__(self, **kwd):
+        """summarizes the quality of sequences in an unaligned or aligned fasta-formatted sequence file"""
+        Tabular.__init__( self, **kwd )
+        self.column_names = ['seqname','start','end','nbases','ambigs','polymer']
+        self.columns = 6
+
+class Group(Tabular):
+    file_ext = 'groups'
+    def __init__(self, **kwd):
+        """Name file shows the relationship between a representative sequence(col 1)  and the sequences it represents(col 2)"""
+        Tabular.__init__( self, **kwd )
+        self.column_names = ['name','group']
+        self.columns = 2
+
+class Design(Tabular):
+    file_ext = 'design'
+    def __init__(self, **kwd):
+        """Name file shows the relationship between a group(col 1) and a grouping (col 2), providing a way to merge groups."""
+        Tabular.__init__( self, **kwd )
+        self.column_names = ['group','grouping']
+        self.columns = 2
+
+class AccNos(Tabular):
+    file_ext = 'accnos'
+    def __init__(self, **kwd):
+        """A list of names"""
+        Tabular.__init__( self, **kwd )
+        self.column_names = ['name']
+        self.columns = 1
+
+class Oligos( data.Text ):
+    file_ext = 'oligos'
+
+    def sniff( self, filename ):
+        """
+        Determines whether the file is a otu (operational taxonomic unit) format
+        """
+        try:
+            fh = open( filename )
+            count = 0
+            while True:
+                line = fh.readline()
+                line = line.strip()
+                if not line:
+                    break #EOF
+                else:
+                    if line[0] != '#':
+                        linePieces = line.split('\t')
+                        if len(linePieces) == 2 and re.match('forward|reverse',linePieces[0]):
+                            count += 1
+                            continue
+                        elif len(linePieces) == 3 and re.match('barcode',linePieces[0]):
+                            count += 1
+                            continue
+                        else:
+                            return False
+                        if count > 20:
+                            return True
+            if count > 0:
+                return True
+        except:
+            pass
+        finally:
+            fh.close()
+        return False
+
+class Frequency(Tabular):
+    file_ext = 'freq'
+    def __init__(self, **kwd):
+        """A list of names"""
+        Tabular.__init__( self, **kwd )
+        self.column_names = ['position','frequency']
+        self.column_types = ['int','float']
+
+    def sniff( self, filename ):
+        """
+        Determines whether the file is a frequency tabular format for chimera analysis
+        #1.14.0
+        0	0.000
+        1	0.000
+        ...
+        155	0.975
+        """
+        try:
+            fh = open( filename )
+            count = 0
+            while True:
+                line = fh.readline()
+                line = line.strip()
+                if not line:
+                    break #EOF
+                else:
+                    if line[0] != '#':
+                        try:
+                            linePieces = line.split('\t')
+                            i = int(linePieces[0])
+                            f = float(linePieces[1])
+                            count += 1
+                            continue
+                        except:
+                            return False
+                        if count > 20:
+                            return True
+            if count > 0:
+                return True
+        except:
+            pass
+        finally:
+            fh.close()
+        return False
+
+class Quantile(Tabular):
+    file_ext = 'quan'
+    MetadataElement( name="filtered", default=False, no_value=False, optional=True , desc="Quantiles calculated using a mask", readonly=True)
+    MetadataElement( name="masked", default=False, no_value=False, optional=True , desc="Quantiles calculated using a frequency filter", readonly=True)
+    def __init__(self, **kwd):
+        """Quantiles for chimera analysis"""
+        Tabular.__init__( self, **kwd )
+        self.column_names = ['num','ten','twentyfive','fifty','seventyfive','ninetyfive','ninetynine']
+        self.column_types = ['int','float','float','float','float','float','float']
+    def set_meta( self, dataset, overwrite = True, skip = None, **kwd ):
+        log.info( "Mothur Quantile set_meta %s" % kwd)
+    def sniff( self, filename ):
+        """
+        Determines whether the file is a quantiles tabular format for chimera analysis
+        1	0	0	0	0	0	0
+        2       0.309198        0.309198        0.37161 0.37161 0.37161 0.37161
+        3       0.510982        0.563213        0.693529        0.858939        1.07442 1.20608
+        ...
+        """
+        try:
+            fh = open( filename )
+            count = 0
+            while True:
+                line = fh.readline()
+                line = line.strip()
+                if not line:
+                    break #EOF
+                else:
+                    if line[0] != '#':
+                        try:
+                            linePieces = line.split('\t')
+                            i = int(linePieces[0])
+                            f = float(linePieces[1])
+                            f = float(linePieces[2])
+                            f = float(linePieces[3])
+                            f = float(linePieces[4])
+                            f = float(linePieces[5])
+                            f = float(linePieces[6])
+                            count += 1
+                            continue
+                        except:
+                            return False
+                        if count > 10:
+                            return True
+            if count > 0:
+                return True
+        except:
+            pass
+        finally:
+            fh.close()
+        return False
+
+class FilteredQuantile(Quantile):
+    file_ext = 'filtered.quan'
+    def __init__(self, **kwd):
+        """Quantiles for chimera analysis"""
+        Quantile.__init__( self, **kwd )
+        self.filtered = True
+
+class MaskedQuantile(Quantile):
+    file_ext = 'masked.quan'
+    def __init__(self, **kwd):
+        """Quantiles for chimera analysis"""
+        Quantile.__init__( self, **kwd )
+        self.masked = True
+        self.filtered = False
+
+class FilteredMaskedQuantile(Quantile):
+    file_ext = 'filtered.masked.quan'
+    def __init__(self, **kwd):
+        """Quantiles for chimera analysis"""
+        Quantile.__init__( self, **kwd )
+        self.masked = True
+        self.filtered = True
+
+class LaneMask(data.Text):
+    file_ext = 'filter'
+
+    def sniff( self, filename ):
+        """
+        Determines whether the file is a lane mask filter:  1 line consisting of zeros and ones.
+        """
+        try:
+            fh = open( filename )
+            while True:
+                buff = fh.read(1000)
+                if not buff:
+                    break #EOF
+                else:
+                    if not re.match('^[01]+$',line):
+                        return False
+            return True
+        except:
+            pass
+        finally:
+            close(fh)
+        return False
+
+class SequenceTaxonomy(Tabular):
+    file_ext = 'seq.taxonomy'
+    """
+        A table with 2 columns:
+        - SequenceName
+        - Taxonomy (semicolon-separated taxonomy in descending order)
+        Example:
+          X56533.1        Eukaryota;Alveolata;Ciliophora;Intramacronucleata;Oligohymenophorea;Hymenostomatida;Tetrahymenina;Glaucomidae;Glaucoma;
+          X97975.1        Eukaryota;Parabasalidea;Trichomonada;Trichomonadida;unclassified_Trichomonadida;
+          AF052717.1      Eukaryota;Parabasalidea;
+    """
+    def __init__(self, **kwd):
+        Tabular.__init__( self, **kwd )
+        self.column_names = ['name','taxonomy']
+
+    def sniff( self, filename ):
+        """
+        Determines whether the file is a SequenceTaxonomy
+        """
+        try:
+            pat = '^([^ \t\n\r\f\v;]+([(]\d+[)])?[;])+$'
+            fh = open( filename )
+            count = 0
+            while True:
+                line = fh.readline()
+                if not line:
+                    break #EOF
+                line = line.strip()
+                if line:
+                    fields = line.split('\t')
+                    if len(fields) != 2:
+                        return False
+                    if not re.match(pat,fields[1]):
+                        return False
+                    count += 1
+                    if count > 10:
+                        break
+            if count > 0:
+                return True
+        except:
+            pass
+        finally:
+            fh.close()
+        return False
+
+class RDPSequenceTaxonomy(SequenceTaxonomy):
+    file_ext = 'rdp.taxonomy'
+    """
+        A table with 2 columns:
+        - SequenceName
+        - Taxonomy (semicolon-separated taxonomy in descending order, RDP requires exactly 6 levels deep)
+        Example:
+          AB001518.1      Bacteria;Bacteroidetes;Sphingobacteria;Sphingobacteriales;unclassified_Sphingobacteriales;
+          AB001724.1      Bacteria;Cyanobacteria;Cyanobacteria;Family_II;GpIIa;
+          AB001774.1      Bacteria;Chlamydiae;Chlamydiae;Chlamydiales;Chlamydiaceae;Chlamydophila;
+    """
+    def sniff( self, filename ):
+        """
+        Determines whether the file is a SequenceTaxonomy
+        """
+        try:
+            pat = '^([^ \t\n\r\f\v;]+([(]\d+[)])?[;]){6}$'
+            fh = open( filename )
+            count = 0
+            while True:
+                line = fh.readline()
+                if not line:
+                    break #EOF
+                line = line.strip()
+                if line:
+                    fields = line.split('\t')
+                    if len(fields) != 2:
+                        return False
+                    if not re.match(pat,fields[1]):
+                        return False
+                    count += 1
+                    if count > 10:
+                        break
+            if count > 0:
+                return True
+        except:
+            pass
+        finally:
+            fh.close()
+        return False
+
+class ConsensusTaxonomy(Tabular):
+    file_ext = 'cons.taxonomy'
+    def __init__(self, **kwd):
+        """A list of names"""
+        Tabular.__init__( self, **kwd )
+        self.column_names = ['OTU','count','taxonomy']
+
+class TaxonomySummary(Tabular):
+    file_ext = 'tax.summary'
+    def __init__(self, **kwd):
+        """A Summary of taxon classification"""
+        Tabular.__init__( self, **kwd )
+        self.column_names = ['taxlevel','rankID','taxon','daughterlevels','total']
+
+class Phylip(data.Text):
+    file_ext = 'phy'
+
+    def sniff( self, filename ):
+        """
+        Determines whether the file is in Phylip format (Interleaved or Sequential)
+        The first line of the input file contains the number of species and the
+        number of characters, in free format, separated by blanks (not by
+        commas). The information for each species follows, starting with a
+        ten-character species name (which can include punctuation marks and blanks),
+        and continuing with the characters for that species.
+        http://evolution.genetics.washington.edu/phylip/doc/main.html#inputfiles
+        Interleaved Example:
+            6   39
+        Archaeopt CGATGCTTAC CGCCGATGCT
+        HesperorniCGTTACTCGT TGTCGTTACT
+        BaluchitheTAATGTTAAT TGTTAATGTT
+        B. virginiTAATGTTCGT TGTTAATGTT
+        BrontosaurCAAAACCCAT CATCAAAACC
+        B.subtilisGGCAGCCAAT CACGGCAGCC
+        
+        TACCGCCGAT GCTTACCGC
+        CGTTGTCGTT ACTCGTTGT
+        AATTGTTAAT GTTAATTGT
+        CGTTGTTAAT GTTCGTTGT
+        CATCATCAAA ACCCATCAT
+        AATCACGGCA GCCAATCAC
+        """
+        try:
+            fh = open( filename )
+            # counts line
+            line = fh.readline().strip()
+            linePieces = line.split()
+            count = int(linePieces[0])
+            seq_len = int(linePieces[1])
+            # data lines
+            """
+            TODO check data lines
+            while True:
+                line = fh.readline()
+                # name is the first 10 characters
+                name = line[0:10]
+                seq = line[10:].strip()
+                # nucleic base or amino acid 1-char designators (spaces allowed)
+                bases = ''.join(seq.split())
+                # float per base (each separated by space)
+            """
+            return True
+        except:
+            pass
+        finally:
+            close(fh)
+        return False
+
+
+class Axes(Tabular):
+    file_ext = 'axes'
+
+    def __init__(self, **kwd):
+        """Initialize axes datatype"""
+        Tabular.__init__( self, **kwd )
+    def sniff( self, filename ):
+        """
+        Determines whether the file is an axes format
+        The first line may have column headings.
+        The following lines have the name in the first column plus float columns for each axis.
+		==> 98_sq_phylip_amazon.fn.unique.pca.axes <==
+		group   axis1   axis2
+		forest  0.000000        0.145743        
+		pasture 0.145743        0.000000        
+		
+		==> 98_sq_phylip_amazon.nmds.axes <==
+        		axis1   axis2   
+		U68589  0.262608        -0.077498       
+		U68590  0.027118        0.195197        
+		U68591  0.329854        0.014395        
+        """
+        try:
+            fh = open( filename )
+            count = 0
+            line = fh.readline()
+            line = line.strip()
+            col_cnt = None
+            while True:
+                line = fh.readline()
+                line = line.strip()
+                if not line:
+                    break #EOF
+                if line:
+                    fields = line.split('\t')
+                    if col_cnt == None:  # ignore values in first line as they may be column headings
+                        col_cnt = len(fields)
+                    else:  
+                        if len(fields) != col_cnt :
+                            return False
+                        try:
+                            for i in range(1, col_cnt):
+                                check = float(fields[i])
+                        except ValueError:
+                            return False
+                        count += 1
+                    if count > 10:
+                        return True
+            if count > 0:
+                return True
+        except:
+            pass
+        finally:
+            fh.close()
+        return False
+
+## Qiime Classes
+
+class QiimeMetadataMapping(Tabular):
+    MetadataElement( name="column_names", default=[], desc="Column Names", readonly=False, visible=True, no_value=[] )
+    file_ext = 'qiimemapping'
+
+    def __init__(self, **kwd):
+        """
+        http://qiime.sourceforge.net/documentation/file_formats.html#mapping-file-overview
+        Information about the samples necessary to perform the data analysis. 
+        # self.column_names = ['#SampleID','BarcodeSequence','LinkerPrimerSequence','Description']
+        """
+        Tabular.__init__( self, **kwd )
+
+    def sniff( self, filename ):
+        """
+        Determines whether the file is a qiime mapping file
+        Just checking for an appropriate header line for now, could be improved
+        """
+        try:
+            pat = '#SampleID(\t[a-zA-Z][a-zA-Z0-9_]*)*\tDescription'
+            fh = open( filename )
+            while True:
+                line = dataset_fh.readline()
+                if re.match(pat,line):
+                    return True
+        except:
+            pass
+        finally:
+            close(fh)
+        return False
+
+    def set_column_names(self, dataset):
+        if dataset.has_data():
+            dataset_fh = open( dataset.file_name )
+            line = dataset_fh.readline()
+            if line.startswith('#SampleID'):
+                dataset.metadata.column_names = line.strip().split('\t');
+            dataset_fh.close()
+
+    def set_meta( self, dataset, overwrite = True, skip = None, max_data_lines = None, **kwd ):
+        Tabular.set_meta(self, dataset, overwrite, skip, max_data_lines)
+        self.set_column_names(dataset)
+
+class QiimeOTU(Tabular):
+    """
+    Associates OTUs with sequence IDs
+    Example:
+    0	FLP3FBN01C2MYD	FLP3FBN01B2ALM
+    1	FLP3FBN01DF6NE	FLP3FBN01CKW1J	FLP3FBN01CHVM4
+    2	FLP3FBN01AXQ2Z
+    """
+    file_ext = 'qiimeotu'
+
+class QiimeOTUTable(Tabular):
+    """
+        #Full OTU Counts
+        #OTU ID	PC.354	PC.355	PC.356	Consensus Lineage
+        0	0	1	0	Root;Bacteria;Firmicutes;"Clostridia";Clostridiales
+        1	1	3	1	Root;Bacteria
+        2	0	2	2	Root;Bacteria;Bacteroidetes
+    """
+    MetadataElement( name="column_names", default=[], desc="Column Names", readonly=False, visible=True, no_value=[] )
+    file_ext = 'qiimeotutable'
+    def init_meta( self, dataset, copy_from=None ):
+        tabular.Tabular.init_meta( self, dataset, copy_from=copy_from )
+    def set_meta( self, dataset, overwrite = True, skip = None, **kwd ):
+        self.set_column_names(dataset) 
+    def set_column_names(self, dataset):
+        if dataset.has_data():
+            dataset_fh = open( dataset.file_name )
+            line = dataset_fh.readline()
+            line = dataset_fh.readline()
+            if line.startswith('#OTU ID'):
+                dataset.metadata.column_names = line.strip().split('\t');
+            dataset_fh.close()
+            dataset.metadata.comment_lines = 2
+
+class QiimeDistanceMatrix(Tabular):
+    """
+        	PC.354	PC.355	PC.356
+        PC.354	0.0	3.177	1.955	
+        PC.355	3.177	0.0	3.444
+        PC.356	1.955	3.444	0.0
+    """
+    file_ext = 'qiimedistmat'
+    def init_meta( self, dataset, copy_from=None ):
+        tabular.Tabular.init_meta( self, dataset, copy_from=copy_from )
+    def set_meta( self, dataset, overwrite = True, skip = None, **kwd ):
+        self.set_column_names(dataset) 
+    def set_column_names(self, dataset):
+        if dataset.has_data():
+            dataset_fh = open( dataset.file_name )
+            line = dataset_fh.readline()
+            # first line contains the names
+            dataset.metadata.column_names = line.strip().split('\t');
+            dataset_fh.close()
+            dataset.metadata.comment_lines = 1
+
+class QiimePCA(Tabular):
+    """
+    Principal Coordinate Analysis Data
+    The principal coordinate (PC) axes (columns) for each sample (rows). 
+    Pairs of PCs can then be graphed to view the relationships between samples. 
+    The bottom of the output file contains the eigenvalues and % variation explained for each PC.
+    Example:
+    pc vector number	1	2	3
+    PC.354	-0.309063936588	0.0398252112257	0.0744672231759
+    PC.355	-0.106593922619	0.141125998277	0.0780204374172
+    PC.356	-0.219869362955	0.00917241121781	0.0357281314115
+    
+    
+    eigvals	0.480220500471	0.163567082874	0.125594470811
+    % variation explained	51.6955484555	17.6079322939
+    """
+    file_ext = 'qiimepca'
+
+class QiimeParams(Tabular):
+    """
+###pick_otus_through_otu_table.py parameters###
+
+# OTU picker parameters
+pick_otus:otu_picking_method    uclust
+pick_otus:clustering_algorithm  furthest
+
+# Representative set picker parameters
+pick_rep_set:rep_set_picking_method     first
+pick_rep_set:sort_by    otu
+    """
+    file_ext = 'qiimeparams'
+
+class QiimePrefs(data.Text):
+    """
+    A text file, containing coloring preferences to be used by make_distance_histograms.py, make_2d_plots.py and make_3d_plots.py.
+    Example:
+{
+'background_color':'black',
+
+'sample_coloring':
+        {
+                'Treatment':
+                {
+                        'column':'Treatment',
+                        'colors':(('red',(0,100,100)),('blue',(240,100,100)))
+                },
+                'DOB':
+                {
+                        'column':'DOB',
+                        'colors':(('red',(0,100,100)),('blue',(240,100,100)))
+                }
+        },
+'MONTE_CARLO_GROUP_DISTANCES':
+        {
+                'Treatment': 10,
+                'DOB': 10
+        }
+}
+    """
+    file_ext = 'qiimeprefs'
+
+class QiimeTaxaSummary(Tabular):
+    """
+        Taxon	PC.354	PC.355	PC.356
+        Root;Bacteria;Actinobacteria	0.0	0.177	0.955	
+        Root;Bacteria;Firmicutes	0.177	0.0	0.444
+        Root;Bacteria;Proteobacteria	0.955	0.444	0.0
+    """
+    MetadataElement( name="column_names", default=[], desc="Column Names", readonly=False, visible=True, no_value=[] )
+    file_ext = 'qiimetaxsummary'
+
+    def set_column_names(self, dataset):
+        if dataset.has_data():
+            dataset_fh = open( dataset.file_name )
+            line = dataset_fh.readline()
+            if line.startswith('Taxon'):
+                dataset.metadata.column_names = line.strip().split('\t');
+            dataset_fh.close()
+
+    def set_meta( self, dataset, overwrite = True, skip = None, max_data_lines = None, **kwd ):
+        Tabular.set_meta(self, dataset, overwrite, skip, max_data_lines)
+        self.set_column_names(dataset)
+
+if __name__ == '__main__':
+    import doctest, sys
+    doctest.testmod(sys.modules[__name__])
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make_2d_plots.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,47 @@
+<tool id="make_2d_plots" name="make_2d_plots" version="1.2.0">
+ <description>Make 2D PCoA Plots</description>
+ <requirements>
+  <requirement type="binary">make_2d_plots.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  make_2d_plots.py
+  --coord_fname=$coord_fname
+  --map_fname=$map_fname
+  --colorby=$colorby
+  --prefs_path=$prefs_path
+  --background_color=$background_color
+  --ellipsoid_opacity=$ellipsoid_opacity
+  --ellipsoid_method=$ellipsoid_method
+  --master_pcoa=$master_pcoa
+  --output_dir=$__new_file_path__
+ </command>
+ <inputs>
+  <param name="coord_fname" type="text"  label="coord_fname"
+   help="This is the path to the principal coordinates file (i.e., resulting file from principal_coordinates.py).  Alternatively, the user can supply a directory containing multiple principal coordinates files. [REQUIRED]"/>
+  <param name="map_fname" type="data" format="tabular" label="map_fname"
+   help="This is the metadata mapping file [default=('NO', 'DEFAULT')] [REQUIRED]"/>
+  <param name="colorby" type="text"  label="colorby"
+   help="This is the categories to color by in the plots from the user-generated mapping file. The categories must match the name of a column header in the mapping file exactly and multiple categories can be list by comma separating them without spaces. The user can also combine columns in the mapping file by separating the categories by '&#38;&#38;' without spaces [default=('NO', 'DEFAULT')]"/>
+  <param name="prefs_path" type="text"  label="prefs_path"
+   help="This is the user-generated preferences file. NOTE: This is a file with a dictionary containing preferences for the analysis [default: ('NO', 'DEFAULT')]"/>
+  <param name="background_color" type="text"  label="background_color"
+   help="This is the background color to use in the plots. [default: ('NO', 'DEFAULT')]"/>
+  <param name="ellipsoid_opacity" type="float" value="0.33" label="ellipsoid_opacity"
+   help="Used when plotting ellipsoids for a summary plot (i.e. using a directory of coord files instead of a single coordfile). Valid range is 0-1. A value of 0 produces completely transparent (invisible) ellipsoids. A value of 1 produces completely opaque ellipsoids."/>
+  <param name="ellipsoid_method" type="text" value="IQR" label="ellipsoid_method"
+   help="Used when plotting ellipsoids for a summary plot (i.e. using a directory of coord files instead of a single coord file). Valid values are 'IQR' and 'sdev'."/>
+  <param name="master_pcoa" type="text"  label="master_pcoa"
+   help="If performing averaging on multiple coord files, the other coord files will be aligned to this one through procrustes analysis. This master file will not be included in the averaging. If this master coord file is not provided, one of the other coord files will be chosen arbitrarily as the target alignment. [default: %default]"/>
+ </inputs>
+ <outputs>
+  
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make_3d_plots.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,89 @@
+<tool id="make_3d_plots" name="make_3d_plots" version="1.2.1">
+ <description>Make 3D PCoA plots</description>
+ <requirements>
+  <requirement type="binary">make_3d_plots.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_summary_html='$output_html'
+  --galaxy_outputdir='$output_html.extra_files_path'
+  --galaxy_summary_template='$output_template'
+  make_3d_plots.py
+  --coord_fname=$coord_fname
+  --map_fname=$map_fname
+  --colorby=$colorby
+  --custom_axes=$custom_axes
+  --prefs_path=$prefs_path
+  --background_color=$background_color
+  --output_dir=$__new_file_path__
+  --ellipsoid_smoothness=$ellipsoid_smoothness
+  --ellipsoid_opacity=$ellipsoid_opacity
+  --ellipsoid_method=$ellipsoid_method
+  --taxa_fname=$taxa_fname
+  --n_taxa_keep=$n_taxa_keep
+  --biplot_output_file=$biplot_output_file
+  --master_pcoa=$master_pcoa
+  --output_format=$output_format
+  --interpolation_points=$interpolation_points
+  --polyhedron_points=$polyhedron_points
+  --polyhedron_offset=$polyhedron_offset
+ </command>
+ <inputs>
+  <param name="coord_fname" type="text"  label="coord_fname"
+   help="This is the path to the principal coordinates file (i.e., resulting file from principal_coordinates.py), or to a directory containing multiple coord files for averaging (e.g. resulting files from multiple_rarefactions_even_depth.py, followed by multiple beta_diversity.py, followed by multiple principal_coordinates.py). [REQUIRED]"/>
+  <param name="map_fname" type="data" format="tabular" label="map_fname"
+   help="This is the metadata mapping file  [default=('NO', 'DEFAULT')] [REQUIRED]"/>
+  <param name="colorby" type="text"  label="colorby"
+   help="This is the categories to color by in the plots from the user-generated mapping file. The categories must match the name of a column header in the mapping file exactly and multiple categories can be list by comma separating them without spaces. The user can also combine columns in the mapping file by separating the categories by '&#38;&#38;' without spaces [default=('NO', 'DEFAULT')]"/>
+  <param name="custom_axes" type="text"  label="custom_axes"
+   help="This is the category from the user-generated mapping file to use as a custom axis in the plot.  For instance,there is a pH category and would like to seethe samples plotted on that axis instead of PC1, PC2, etc., one can use this option.  It is also useful for plotting time-series data [default: ('NO', 'DEFAULT')]"/>
+  <param name="prefs_path" type="text"  label="prefs_path"
+   help="This is the user-generated preferences file. NOTE: This is a file with a dictionary containing preferences for the analysis [default: ('NO', 'DEFAULT')]"/>
+  <param name="background_color" type="text"  label="background_color"
+   help="This is the background color to use in the plots (Options are 'black' or 'white'. [default: ('NO', 'DEFAULT')]"/>
+  <param name="ellipsoid_smoothness" type="text" value="1" label="ellipsoid_smoothness"
+   help="The level of smoothness used in plotting ellipsoids for a summary plot (i.e. using a directory of coord files instead of a single coord file). Valid range is 0-3. A value of 0 produces very coarse 'ellipsoids' but is fast to render. The default value is 2. If you encounter a memory error when generating or displaying the plots, try including just one metadata column in your plot. If you still have trouble, reduce the smoothness level to 0 or 1."/>
+  <param name="ellipsoid_opacity" type="text" value="0.33" label="ellipsoid_opacity"
+   help="Used when plotting ellipsoids for a summary plot (i.e. using a directory of coord files instead of a single coord file). Valid range is 0-3. A value of 0 produces completely transparent (invisible) ellipsoids. A value of 1 produces completely opaque ellipsoids. The default value is 0.33."/>
+  <param name="ellipsoid_method" type="text" value="IQR" label="ellipsoid_method"
+   help="Used when plotting ellipsoids for a summary plot (i.e. using a directory of coord files instead of a single coord file). Valid values are 'IQR' (The Interquartile Range) and 'sdev' (The standard deviation). The default is IQR."/>
+  <param name="taxa_fname" type="text"  label="taxa_fname"
+   help="If you wish to perform a biplot, where taxa are plotted along with samples, supply an otu table format file.  Typically this is the output from summarize_taxa.py."/>
+  <param name="n_taxa_keep" type="text" value="10" label="n_taxa_keep"
+   help="If performing a biplot, the number of taxa to display; use -1 to display all. [default: 10]"/>
+  <param name="biplot_output_file" type="data" format="txt" label="biplot_output_file"
+   help="If performing a biplot, save the biplot coordinates in this file. [default: %default]"/>
+  <param name="master_pcoa" type="text"  label="master_pcoa"
+   help="If performing averaging on multiple coord files, the other coord files will be aligned to this one through procrustes analysis. This master file will not be included in the averaging. If this master coord file is not provided, one of the other coord files will be chosen arbitrarily as the target alignment. [default: %default]"/>
+  <param name="interpolation_points" type="integer" value="0" label="interpolation_points"
+   help="Number of extra points to use between samples and interpolate, the minimum is 2. Only used with the inVUE output. [default: 0]"/>
+  <param name="polyhedron_points" type="integer" value="4" label="polyhedron_points"
+   help="Points to be generated  to create a frame around the PCoA plots. Only used when --output_format is  inVUE. [default: 4]"/>
+  <param name="polyhedron_offset" type="float" value="1.5" label="polyhedron_offset"
+   help="Offset to be added to  the points created in the --polyheadron_points option. Only used when  --output_format is inVUE. [default: 1.5]"/>
+  <param name="output_format"type="select" label="output_format">
+   <option value="king" selected="true">king</option>
+   <option value="invue">invue</option>
+  </param>
+ </inputs>
+ <configfiles>
+  <configfile name="output_template">
+<![CDATA[
+<html>
+<body>
+<a href="rarefaction_plots.html">weighted_unifrac_pc.txt_3D.html</a>
+</body>
+</html>
+]]>
+  </configfile>
+ </configfiles>
+ <outputs>
+  <data format="html" name="output_html" label="alpha_rarefaction_plots"/>
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make_bootstrapped_tree.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,29 @@
+<tool id="make_bootstrapped_tree" name="make_bootstrapped_tree" version="1.2.0">
+ <description>Make bootstrapped tree</description>
+ <requirements>
+  <requirement type="binary">make_bootstrapped_tree.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  make_bootstrapped_tree.py
+  --master_tree=$master_tree
+  --support=$support
+  --output_file=$output_file
+ </command>
+ <inputs>
+  <param name="master_tree" type="text"  label="master_tree"
+   help="This is the path to the master tree [REQUIRED]"/>
+  <param name="support" type="text"  label="support"
+   help="This is the path to the bootstrap support file [REQUIRED]"/>
+ </inputs>
+ <outputs>
+  <data format="txt" name="output_file"/>
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make_distance_histograms.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,49 @@
+<tool id="make_distance_histograms" name="make_distance_histograms" version="1.2.0">
+ <description>Make distance histograms</description>
+ <requirements>
+  <requirement type="binary">make_distance_histograms.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  make_distance_histograms.py
+  --distance_matrix_file=$distance_matrix_file
+  --map_fname=$map_fname
+  --prefs_path=$prefs_path
+  --dir_path=$dir_path
+  --background_color=$background_color
+  $monte_carlo
+  $suppress_html_output
+  --fields=$fields
+  --monte_carlo_iters=$monte_carlo_iters
+ </command>
+ <inputs>
+  <param name="distance_matrix_file" type="data" format="txt" label="distance_matrix_file"
+   help="Path to distance matrix file. [REQUIRED]"/>
+  <param name="map_fname" type="data" format="tabular" label="map_fname"
+   help="This is the metadata mapping file  [default=('NO', 'DEFAULT')] [REQUIRED]"/>
+  <param name="prefs_path" type="text"  label="prefs_path"
+   help="This is the user-generated preferences file. NOTE: This is a file with a dictionary containing preferences for the analysis.  This dict must have a 'Fields' key mapping to a list of desired fields. [default: ('NO', 'DEFAULT')]"/>
+  <param name="dir_path" type="text" value="." label="dir_path"
+   help="Directory to output data for all analyses. [default: .]"/>
+  <param name="background_color" type="text" value="white" label="background_color"
+   help="This is the     background color to use in the plots (Options are 'black' or 'white'.     [default: white]"/>
+  <param name="monte_carlo" type="boolean" truevalue="--monte_carlo" falsevalue="" checked="false" label="monte_carlo"
+   help="Perform Monte Carlo analysis on distances.  [Default: False]"/>
+  <param name="suppress_html_output" type="boolean" truevalue="--suppress_html_output" falsevalue="" checked="false" label="suppress_html_output"
+   help="Suppress HTML format output. [Default: False]"/>
+  <param name="fields" type="text"  label="fields"
+   help="Comma delimited list of fields to compare.  Put list of fields in quotes.  This overwrites fields in prefs file.  If this is not provided, the first field in metadata mapping file will be used.  Usage: --fields 'Field1,Field2,Field3'"/>
+  <param name="monte_carlo_iters" type="integer" value="100" label="monte_carlo_iters"
+   help="Number of iterations to perform for Monte Carlo analysis. [default: 100]"/>
+ </inputs>
+ <outputs>
+  
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make_fastq.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,34 @@
+<tool id="make_fastq" name="make_fastq" version="1.2.0">
+ <description>Make fastq file for ERA submission from paired fasta and qual files</description>
+ <requirements>
+  <requirement type="binary">make_fastq.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  make_fastq.py
+  --input_fasta_fp=$input_fasta_fp
+  --qual=$qual
+  --result_fp=$result_fp
+  $split
+ </command>
+ <inputs>
+  <param name="input_fasta_fp" type="data" format="fasta" label="input_fasta_fp"
+   help="path to the input fasta file [REQUIRED]"/>
+  <param name="qual" type="data" format="qual" label="qual"
+   help="names of qual files, comma-delimited [REQUIRED]"/>
+  <param name="result_fp" type="data" format="txt" label="result_fp"
+   help="Path to store results [default: {input_sequences_filename}.fastq]"/>
+  <param name="split" type="boolean" truevalue="--split" falsevalue="" checked="false" label="split"
+   help="make separate file for each library [default:False]"/>
+ </inputs>
+ <outputs>
+  
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make_library_id_lists.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,40 @@
+<tool id="make_library_id_lists" name="make_library_id_lists" version="1.2.0">
+ <description>Make library id lists</description>
+ <requirements>
+  <requirement type="binary">make_library_id_lists.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  make_library_id_lists.py
+  --input_fasta=$input_fasta
+  --screened_rep_seqs=$screened_rep_seqs
+  --otus=$otus
+  --outdir=$outdir
+  --field=$field
+  $debug
+ </command>
+ <inputs>
+  <param name="input_fasta" type="data" format="fasta" label="input_fasta"
+   help="The path to a FASTA file containing input sequences [REQUIRED]"/>
+  <param name="screened_rep_seqs" type="text"  label="screened_rep_seqs"
+   help="The path to a FASTA file containing screened representative seqs[DEFAULT: %default]"/>
+  <param name="otus" type="text"  label="otus"
+   help="The path to an OTU file mapping OTUs onto rep seqs[DEFAULT: %default]"/>
+  <param name="outdir" type="text" value="." label="outdir"
+   help=" The base directory to save results (one file per library)."/>
+  <param name="field" type="integer" value="1" label="field"
+   help="Index of space-delimited field to read id from [DEFAULT: 1]"/>
+  <param name="debug" type="boolean" truevalue="--debug" falsevalue="" checked="false" label="debug"
+   help="Show debug output."/>
+ </inputs>
+ <outputs>
+  
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make_otu_heatmap_html.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,57 @@
+<tool id="make_otu_heatmap_html" name="make_otu_heatmap_html" version="1.2.1">
+ <description>Make heatmap of OTU table</description>
+ <requirements>
+  <requirement type="binary">make_otu_heatmap_html.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_outputdir='$otu_heatmp.extra_files_path'
+  --galaxy_datasets='^\S+\.html$:'$otu_heatmp
+  make_otu_heatmap_html.py
+  --otu_table_fp=$otu_table_fp
+  --output_dir='$otu_heatmp.extra_files_path'
+  --num_otu_hits=$num_otu_hits
+  #if $tree != None and $tree.__str__ != 'None':
+   --tree=$tree
+  #end if
+  #if $map_fname != None and $map_fname.__str__ != 'None' > 0:
+   --map_fname=$map_fname
+  #end if
+  #if $sample_tree != None and $sample_tree.__str__ != 'None':
+   --sample_tree=$sample_tree
+  #end if
+  $log_transform
+  --log_eps=$log_eps
+ </command>
+ <inputs>
+  <param name="otu_table_fp" type="data" format="txt" label="otu_table_fp"
+   help="path to the input OTU table (i.e., the output from make_otu_table.py) [REQUIRED]"/>
+  <param name="num_otu_hits" type="integer" value="5" label="num_otu_hits"
+   help="This is the minimum number of Samples that an OTU is present in, for an OTU to be kept in the OTU table [default: 5]"/>
+  <param name="tree" type="data" format="tre"  optional="true" label="tree"
+   help="Tree file to be used for sorting OTUs in the heatmap"/>
+  <param name="map_fname" type="data" format="qiimemapping" optional="true" label="map_fname"
+   help="Metadata mapping file to be used for sorting Samples in the heatmap"/>
+  <param name="sample_tree" type="data" format="tre"  optional="true" label="sample_tree"
+   help="Tree file to be used for sorting samples (e.g, output from upgma_cluster.py). If both this and the sample mapping file are provided, the mapping file is ignored."/>
+  <param name="log_transform" type="boolean" truevalue="--log_transform" falsevalue="" checked="false" label="log_transform"
+   help="Data will be log-transformed. All zeros will be set to a small value (default is 1/2 the smallest non-zero entry). Data will be translated to be non-negative after log transform, and num_otu_hits will be set to 0."/>
+  <param name="log_eps" type="float" value="0.0" label="log_eps"
+   help="Small value to replace zeros for log transform. [default: 1/2 the smallest non-zero entry]."/>
+ </inputs>
+ <outputs>
+    <!-- TODO 
+     the html output has a js sub dir:
+       move the js/* to the html .extra_files_path/
+       filter the html to remove 'js/' sub dir
+     -->
+   <data name="otu_heatmp" format="html" label="${tool.name} on ${on_string}: otu_heatmp"/>
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make_otu_network.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,38 @@
+<tool id="make_otu_network" name="make_otu_network" version="1.2.0">
+ <description>Make an OTU network and calculate statistics</description>
+ <requirements>
+  <requirement type="binary">make_otu_network.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  make_otu_network.py
+  --mapping_file=$mapping_file
+  --input_file=$input_file
+  --colorby=$colorby
+  --prefs_path=$prefs_path
+  --background_color=$background_color
+  --output_dir=$__new_file_path__
+ </command>
+ <inputs>
+  <param name="mapping_file" type="data" format="tabular" label="mapping_file"
+   help="name of input map file [REQUIRED]"/>
+  <param name="input_file" type="data" format="txt" label="input_file"
+   help="name of otu table file [REQUIRED]"/>
+  <param name="colorby" type="text"  label="colorby"
+   help="This is the categories to color by in the plots from the user-generated mapping file. The categories must match the name of a column header in the mapping file exactly and multiple categories can be list by comma separating them without spaces. The user can also combine columns in the mapping file by separating the categories by '&#38;&#38;' without spaces [default=('NO', 'DEFAULT')]"/>
+  <param name="prefs_path" type="text"  label="prefs_path"
+   help="This is the user-generated preferences file. NOTE: This is a file with a dictionary containing preferences for the analysis [default: ('NO', 'DEFAULT')]"/>
+  <param name="background_color" type="text"  label="background_color"
+   help="This is the background color to use in the plots. [default: ('NO', 'DEFAULT')]"/>
+ </inputs>
+ <outputs>
+  
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make_otu_table.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,31 @@
+<tool id="make_otu_table" name="make_otu_table" version="1.2.0">
+ <description>Make OTU table</description>
+ <requirements>
+  <requirement type="binary">make_otu_table.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  make_otu_table.py
+  --otu_map_fp=$otu_map_fp
+  --taxonomy=$taxonomy
+  --exclude_otus_fp=$exclude_otus_fp
+  --output_fp=$output_fp
+ </command>
+ <inputs>
+  <param name="otu_map_fp" type="data" format="qiimeotu" label="otu_map_fp"
+   help="path to the input OTU map (i.e., the output from pick_otus.py) [REQUIRED]"/>
+  <param name="taxonomy" type="data" format="seq.taxonomy"  label="taxonomy"
+   help="Path to taxonomy assignment, containing the assignments of \ taxons to sequences (i.e., resulting txt file from assign_taxonomy.py)  [default: %default]"/>
+  <param name="exclude_otus_fp" type="data" format="txt" label="exclude_otus_fp"
+   help="a filepath listing OTU identifiers that should not be included in the OTU table (e.g., the output of identify_chimeric_seqs.py)"/>
+ </inputs>
+ <outputs>
+  <data format="qiimeotutable" name="output_fp" label="${tool.name} on ${on_string}: otu_table"/>
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make_per_library_sff.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,37 @@
+<tool id="make_per_library_sff" name="make_per_library_sff" version="1.2.0">
+ <description>Make per-library sff files from id lists</description>
+ <requirements>
+  <requirement type="binary">make_per_library_sff.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  make_per_library_sff.py
+  --input_sff=$input_sff
+  --libdir=$libdir
+  --sfffile_path=$sfffile_path
+  $use_sfftools
+  $debug
+ </command>
+ <inputs>
+  <param name="input_sff" type="text"  label="input_sff"
+   help="Input sff file (separate multiple files w/ comma) [REQUIRED]"/>
+  <param name="libdir" type="text"  label="libdir"
+   help="Directory containing per-library id files [REQUIRED]"/>
+  <param name="sfffile_path" type="text"  label="sfffile_path"
+   help="Path to sfffile binary [default: use sfffile in $PATH]"/>
+  <param name="use_sfftools" type="boolean" truevalue="--use_sfftools" falsevalue="" checked="false" label="use_sfftools"
+   help="Use external sfffile program instead of equivalent Python routines."/>
+  <param name="debug" type="boolean" truevalue="--debug" falsevalue="" checked="false" label="debug"
+   help="Print debugging output to stdout [default: False]"/>
+ </inputs>
+ <outputs>
+  
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make_phylogeny.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,43 @@
+<tool id="make_phylogeny" name="make_phylogeny" version="1.2.0">
+ <description>Make Phylogeny</description>
+ <requirements>
+  <requirement type="binary">make_phylogeny.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  make_phylogeny.py
+  --input_fp=$input_fp
+  --tree_method=$tree_method
+  --root_method=$root_method
+  --result_fp=$result_fp
+  --log_fp=$log_fp
+ </command>
+ <inputs>
+  <param name="input_fp" type="data" format="align" label="input_fp"
+   help="Path to read input alignment [REQUIRED]"/>
+  <param name="tree_method" type="select" label="tree_method"
+   help="Method for tree building. Valid choices are: clearcut, clustalw, raxml, fasttree_v1, fasttree, muscle [default: fasttree]">
+    <option value="clearcut">clearcut</option>
+    <option value="clustalw">clustalw</option>
+    <option value="raxml">raxml</option>
+    <option value="fasttree_v1">fasttree_v1</option>
+    <option value="fasttree" selected="true">fasttree</option>
+    <option value="muscle">muscle</option>
+  </param>
+  <param name="root_method" type="select" label="root_method"
+   help="method for choosing root of phylo tree  Valid choices are: midpoint, tree_method_default [default: tree_method_default]">
+    <option value="tree_method_default" selected="true">tree_method_default</option>
+    <option value="midpoint">midpoint</option>
+  </param>
+ </inputs>
+ <outputs>
+  <data format="txt" name="log_fp" label="${tool.name} on ${on_string}: log" />
+  <data format="tre" name="result_fp" label="${tool.name} on ${on_string}: tree" />
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make_pie_charts.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,46 @@
+<tool id="make_pie_charts" name="make_pie_charts" version="1.2.0">
+ <description>Make pie charts based on taxonomy assignment</description>
+ <requirements>
+  <requirement type="binary">make_pie_charts.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  make_pie_charts.py
+  --input_files=$input_files
+  --labels=$labels
+  $sample_flag
+  --num=$num
+  --dir-prefix=$dir_prefix
+  --colorby=$colorby
+  --prefs_path=$prefs_path
+  --background_color=$background_color
+ </command>
+ <inputs>
+  <param name="input_files" type="text"  label="input_files"
+   help="list of files with sample counts by taxonomy [REQUIRED]"/>
+  <param name="labels" type="text"  label="labels"
+   help="list of labels for pie chart(i.e. Phylum,Class)[REQUIRED]"/>
+  <param name="sample_flag" type="boolean" truevalue="--sample_flag" falsevalue="" checked="false" label="sample_flag"
+   help="if -s is passed, pie charts will be created for each sample"/>
+  <param name="num" type="text" value="20" label="num"
+   help="Maximum number of individual categories in each pie chart. All additional categories are grouped into an 'other' category. [default: 20]"/>
+  <param name="dir_prefix" type="text"  label="dir-prefix"
+   help="output folder"/>
+  <param name="colorby" type="text"  label="colorby"
+   help="This is the samples to make pie charts for in the counts files from  summarize_taxa.py. The sample name must match the name of a sample id in the header of the counts file exactly and multiple categories can be list by comma separating them without spaces. If you want to see the pie charts broken up by all samples -s is still funtional. If -s is set and -b is used  it will just be broken up by all samples. If neither -s or -b are set the  pie charts will be based on all samples put together, one for each level.  [default: ('NO', 'DEFAULT')]"/>
+  <param name="prefs_path" type="text"  label="prefs_path"
+   help="This is the user-generated preferences file. NOTE: This is a file with a dictionary containing preferences for the analysis. The label taxonomy_coloring is used for the coloring, see example prefs file preferences_file. [default: ('NO', 'DEFAULT')]"/>
+  <param name="background_color" type="text"  label="background_color"
+   help="This is the background color to use in the plots. [default: ('NO', 'DEFAULT')]"/>
+ </inputs>
+ <outputs>
+  
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make_prefs_file.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,47 @@
+<tool id="make_prefs_file" name="make_prefs_file" version="1.2.1">
+ <description>Generate preferences file</description>
+ <requirements>
+  <requirement type="binary">make_prefs_file.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  make_prefs_file.py
+  --map_fname=$map_fname
+  --output_fp=$output_fp
+  --mapping_headers_to_use=$mapping_headers_to_use
+  --background_color=$background_color
+  --monte_carlo_dists=$monte_carlo_dists
+  --input_taxa_file=$input_taxa_file
+  --ball_scale=$ball_scale
+  --arrow_line_color=$arrow_line_color
+  --arrow_head_color=$arrow_head_color
+ </command>
+ <inputs>
+  <param name="map_fname" type="data" format="tabular" label="map_fname"
+   help="This is the metadata mapping file [default=('NO', 'DEFAULT')] [REQUIRED]"/>
+  <param name="mapping_headers_to_use" type="data" format="tabular" label="mapping_headers_to_use"
+   help="mapping fields touse in prefs file [default: ALL]"/>
+  <param name="background_color" type="text" value="black" label="background_color"
+   help="This is the backgroundcolor to  use in the plots. [default: black]"/>
+  <param name="monte_carlo_dists" type="text" value="10" label="monte_carlo_dists"
+   help="monte carlo distanceto use for each sample header [default: 10]"/>
+  <param name="input_taxa_file" type="data" format="txt" label="input_taxa_file"
+   help="summarized taxa file with samplecounts by taxonomy (resulting file from summarize_taxa.py)"/>
+  <param name="ball_scale" type="float" value="1.0" label="ball_scale"
+   help="scale factor for the size of each ball in the plots [default: 1.0]"/>
+  <param name="arrow_line_color" type="text" value="white" label="arrow_line_color"
+   help="arrow line color forprocrustes analysis. [default: white]"/>
+  <param name="arrow_head_color" type="text" value="red" label="arrow_head_color"
+   help="arrow head color forprocrustes analysis. [default: red]"/>
+ </inputs>
+ <outputs>
+  <data format="txt" name="output_fp"/>
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make_qiime_py_file.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,38 @@
+<tool id="make_qiime_py_file" name="make_qiime_py_file" version="1.2.0">
+ <description>Create python file</description>
+ <requirements>
+  <requirement type="binary">make_qiime_py_file.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  make_qiime_py_file.py
+  --output_fp=$output_fp
+  $script
+  $test
+  --author_name=$author_name
+  --author_email=$author_email
+  --copyright=$copyright
+ </command>
+ <inputs>
+  <param name="script" type="boolean" truevalue="--script" falsevalue="" checked="false" label="script"
+   help="Pass if creating a script to include option parsing framework [default:False]."/>
+  <param name="test" type="boolean" truevalue="--test" falsevalue="" checked="false" label="test"
+   help="Pass if creating a unit test file to include relevant information [default:False]."/>
+  <param name="author_name" type="text" value="AUTHOR_NAME" label="author_name"
+   help="The script author's (probably you) name to be included the header variables. This will typically need to be enclosed  in quotes to handle spaces. [default:AUTHOR_NAME]"/>
+  <param name="author_email" type="text" value="AUTHOR_EMAIL" label="author_email"
+   help="The script author's (probably you) e-mail address to be included the header variables. [default:AUTHOR_EMAIL]"/>
+  <param name="copyright" type="text" value="Copyright 2010, The QIIME project" label="copyright"
+   help="The copyright information to be included in the header variables. [default:Copyright 2010, The QIIME project]"/>
+ </inputs>
+ <outputs>
+  <data format="txt" name="output_fp"/>
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make_qiime_rst_file.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,26 @@
+<tool id="make_qiime_rst_file" name="make_qiime_rst_file" version="1.2.0">
+ <description>Make Sphinx RST file</description>
+ <requirements>
+  <requirement type="binary">make_qiime_rst_file.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  make_qiime_rst_file.py
+  --input_script=$input_script
+  --output_dir=$__new_file_path__
+ </command>
+ <inputs>
+  <param name="input_script" type="text"  label="input_script"
+   help="This is the input script for which to  make a .rst file [REQUIRED]"/>
+ </inputs>
+ <outputs>
+  
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make_rarefaction_plots.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,50 @@
+<tool id="make_rarefaction_plots" name="make_rarefaction_plots" version="1.2.0">
+ <description>Generate Rarefaction Plots</description>
+ <requirements>
+  <requirement type="binary">make_rarefaction_plots.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  make_rarefaction_plots.py
+  --input_dir=$input_dir
+  --map_fname=$map_fname
+  --colorby=$colorby
+  --prefs_path=$prefs_path
+  --background_color=$background_color
+  --imagetype=$imagetype
+  --resolution=$resolution
+  --ymax=$ymax
+  $webpage
+  --output_dir=$__new_file_path__
+ </command>
+ <inputs>
+  <param name="input_dir" type="text"  label="input_dir"
+   help="name of folder containing rarefaction files, takes output from collate_alpha.py.  The user can also supply a list of files, which are comma-separated. [REQUIRED]"/>
+  <param name="map_fname" type="data" format="tabular" label="map_fname"
+   help="name of mapping file [REQUIRED]"/>
+  <param name="colorby" type="text"  label="colorby"
+   help="name of columns to make rarefaction graphs of, comma delimited no spaces."/>
+  <param name="prefs_path" type="text"  label="prefs_path"
+   help="preferences file for coloring of columns."/>
+  <param name="background_color" type="text" value="white" label="background_color"
+   help="Background color for graphs."/>
+  <param name="imagetype" type="text" value="png" label="imagetype"
+   help="extension for image type choose from (png, svg, pdf).  WARNING: Some formats may not properly open in your browser! [default: png]"/>
+  <param name="resolution" type="integer" value="75" label="resolution"
+   help="output image resolution, [default: 75]"/>
+  <param name="ymax" type="integer" value="-1" label="ymax"
+   help="this is the ymax value to be used for the plots, so you can compare rarefaction plots between two different analyses [default: ('NO', 'DEFAULT')]"/>
+  <param name="webpage" type="boolean" truevalue="" falsevalue="--webpage" checked="false" label="webpage"
+   help="this is allows to user to not create the webpage, which may be slow with large datasets [default: True]"/>
+ </inputs>
+ <outputs>
+  
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/merge_denoiser_output.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,35 @@
+<tool id="merge_denoiser_output" name="merge_denoiser_output" version="1.2.0">
+ <description>Merge the output of denoising step back into QIIME</description>
+ <requirements>
+  <requirement type="binary">merge_denoiser_output.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  merge_denoiser_output.py
+  --map_file=$map_file
+  --otu_picker_map_file=$otu_picker_map_file
+  --fasta_fp=$fasta_fp
+  --denoised_fasta_fp=$denoised_fasta_fp
+  --output_dir=$__new_file_path__
+ </command>
+ <inputs>
+  <param name="map_file" type="data" format="tabular" label="map_file"
+   help="path to denoiser cluster mapping file [REQUIRED]"/>
+  <param name="otu_picker_map_file" type="data" format="tabular" label="otu_picker_map_file"
+   help="path to OTU mapping file from OTU picker [REQUIRED]"/>
+  <param name="fasta_fp" type="data" format="fasta" label="fasta_fp"
+   help="path to FASTA file, output of split_libraries.py [REQUIRED]"/>
+  <param name="denoised_fasta_fp" type="data" format="fasta" label="denoised_fasta_fp"
+   help="path to denoised fasta file [REQUIRED]"/>
+ </inputs>
+ <outputs>
+  
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/merge_mapping_files.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,29 @@
+<tool id="merge_mapping_files" name="merge_mapping_files" version="1.2.0">
+ <description>Merge mapping files</description>
+ <requirements>
+  <requirement type="binary">merge_mapping_files.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  merge_mapping_files.py
+  --mapping_fps=$mapping_fps
+  --output_fp=$output_fp
+  --no_data_value=$no_data_value
+ </command>
+ <inputs>
+  <param name="mapping_fps" type="data" format="tabular" label="mapping_fps"
+   help="the input mapping files in a comma-separated list [REQUIRED]"/>
+  <param name="no_data_value" type="text" value="no_data" label="no_data_value"
+   help="value to represent missing data (i.e., when all fields are not defined in all mapping files) [default: no_data]"/>
+ </inputs>
+ <outputs>
+  <data format="txt" name="output_fp"/>
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/merge_otu_maps.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,29 @@
+<tool id="merge_otu_maps" name="merge_otu_maps" version="1.2.0">
+ <description>Merge OTU mapping files</description>
+ <requirements>
+  <requirement type="binary">merge_otu_maps.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  merge_otu_maps.py
+  --otu_map_fps=$otu_map_fps
+  --output_fp=$output_fp
+  --failures_fp=$failures_fp
+ </command>
+ <inputs>
+  <param name="otu_map_fps" type="data" format="tabular" label="otu_map_fps"
+   help="the otu map filepaths, comma-separated and ordered as the OTU pickers were run [REQUIRED]"/>
+  <param name="failures_fp" type="data" format="txt" label="failures_fp"
+   help="failures filepath, if applicable"/>
+ </inputs>
+ <outputs>
+  <data format="txt" name="output_fp"/>
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/merge_otu_tables.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,26 @@
+<tool id="merge_otu_tables" name="merge_otu_tables" version="1.2.0">
+ <description></description>
+ <requirements>
+  <requirement type="binary">merge_otu_tables.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  merge_otu_tables.py
+  --input_fps=$input_fps
+  --output_fp=$output_fp
+ </command>
+ <inputs>
+  <param name="input_fps" type="text"  label="input_fps"
+   help="the otu tables [REQUIRED]"/>
+ </inputs>
+ <outputs>
+  <data format="txt" name="output_fp"/>
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/multiple_rarefactions.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,44 @@
+<tool id="multiple_rarefactions" name="multiple_rarefactions" version="1.2.0">
+ <description>Perform multiple subsamplings/rarefactions on an otu table</description>
+ <requirements>
+  <requirement type="binary">multiple_rarefactions.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  multiple_rarefactions.py
+  --input_path=$input_path
+  --output_path=$output_path
+  --min=$min
+  --max=$max
+  --step=$step
+  --num-reps=$num_reps
+  $lineages_included
+  $keep_empty_otus
+ </command>
+ <inputs>
+  <param name="input_path" type="text"  label="input_path"
+   help="input otu table filepath [REQUIRED]"/>
+  <param name="min" type="integer" value="-1" label="min"
+   help="min seqs/sample [REQUIRED]"/>
+  <param name="max" type="integer" value="-1" label="max"
+   help="max seqs/sample (inclusive) [REQUIRED]"/>
+  <param name="step" type="integer" value="-1" label="step"
+   help="levels: min, min+step... for level {= max [REQUIRED]"/>
+  <param name="num_reps" type="integer" value="1" label="num-reps"
+   help="num iterations at each seqs/sample level [default: 1]"/>
+  <param name="lineages_included" type="boolean" truevalue="--lineages_included" falsevalue="" checked="false" label="lineages_included"
+   help="output rarefied otu tables will include taxonomic (lineage) information for each otu, if present in input otu table [default: False]"/>
+  <param name="keep_empty_otus" type="boolean" truevalue="--keep_empty_otus" falsevalue="" checked="false" label="keep_empty_otus"
+   help="otus (rows) of all zeros are usually omitted from the output otu tables, with -k they will not be removed from the output files [default: False]"/>
+ </inputs>
+ <outputs>
+  <data format="txt" name="output_path"/>
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/multiple_rarefactions_even_depth.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,38 @@
+<tool id="multiple_rarefactions_even_depth" name="multiple_rarefactions_even_depth" version="1.2.0">
+ <description>Perform multiple rarefactions on a single otu table, at one depth of sequences/sample</description>
+ <requirements>
+  <requirement type="binary">multiple_rarefactions_even_depth.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  multiple_rarefactions_even_depth.py
+  --input_path=$input_path
+  --output_path=$output_path
+  --depth=$depth
+  --num-reps=$num_reps
+  $lineages_included
+  $keep_empty_otus
+ </command>
+ <inputs>
+  <param name="input_path" type="text"  label="input_path"
+   help="input otu table filepath [REQUIRED]"/>
+  <param name="depth" type="integer" value="-1" label="depth"
+   help="sequences per sample to subsample [REQUIRED]"/>
+  <param name="num_reps" type="integer" value="1" label="num-reps"
+   help="num iterations at each seqs/sample level [default: 1]"/>
+  <param name="lineages_included" type="boolean" truevalue="--lineages_included" falsevalue="" checked="false" label="lineages_included"
+   help="output rarefied otu tables will include taxonomic (lineage) information for each otu, if present in input otu table [default: False]"/>
+  <param name="keep_empty_otus" type="boolean" truevalue="--keep_empty_otus" falsevalue="" checked="false" label="keep_empty_otus"
+   help="otus (rows) of all zeros are usually omitted from the output otu tables, with -k they will not be removed from the output files [default: False]"/>
+ </inputs>
+ <outputs>
+  <data format="txt" name="output_path"/>
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/otu_category_significance.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,44 @@
+<tool id="otu_category_significance" name="otu_category_significance" version="1.2.0">
+ <description>OTU significance and co-occurence analysis</description>
+ <requirements>
+  <requirement type="binary">otu_category_significance.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  otu_category_significance.py
+  --otu_table_fp=$otu_table_fp
+  --category_mapping_fp=$category_mapping_fp
+  --category=$category
+  --test=$test
+  --output_fp=$output_fp
+  --filter=$filter
+  --threshold=$threshold
+  --otu_include_fp=$otu_include_fp
+ </command>
+ <inputs>
+  <param name="otu_table_fp" type="data" format="txt" label="otu_table_fp"
+   help="path to the otu table, or to a directory containing OTU tables [REQUIRED]"/>
+  <param name="category_mapping_fp" type="data" format="tabular" label="category_mapping_fp"
+   help="path to category mapping file [REQUIRED]"/>
+  <param name="category" type="text"  label="category"
+   help="name of category over which to run the analysis [REQUIRED]"/>
+  <param name="test" type="text" value="g_test" label="test"
+   help="the type of statistical test to run. options are: g_test: determines whether OTU presence/absence is associated with a category using the G test of independence. ANOVA: determines whether OTU abundance is associated with a category. correlation: determines whether OTU abundance is correlated with a continuous variable in the category mapping file."/>
+  <param name="filter" type="text" value="10" label="filter"
+   help="minimum number of samples that must contain the OTU for the OTU to be included in the analysis. default value=10."/>
+  <param name="threshold" type="text"  label="threshold"
+   help="threshold under which to consider something absent: Only used if you have numerical data that should be converted to present or absent based on a threshold. Should be None for categorical data or with the correlation test. default value is None"/>
+  <param name="otu_include_fp" type="data" format="txt" label="otu_include_fp"
+   help="path to a file with a list of OTUs to evaluate. By default evaluates all OTUs that pass the minimum sample filter. If a filepath is given here in which each OTU name one wishes to evaluate is on a separate line, will apply this additional filter"/>
+ </inputs>
+ <outputs>
+  <data format="txt" name="output_fp"/>
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/parallel_align_seqs_pynast.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,81 @@
+<tool id="parallel_align_seqs_pynast" name="parallel_align_seqs_pynast" version="1.2.0">
+ <description>Parallel sequence alignment using PyNAST</description>
+ <requirements>
+  <requirement type="binary">parallel_align_seqs_pynast.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  parallel_align_seqs_pynast.py
+  --input_fasta_fp=$input_fasta_fp
+  --output_dir=$__new_file_path__
+  --template_fp=$template_fp
+  --pairwise_alignment_method=$pairwise_alignment_method
+  --blast_db=$blast_db
+  --min_length=$min_length
+  --min_percent_id=$min_percent_id
+  --align_seqs_fp=$align_seqs_fp
+  --jobs_to_start=$jobs_to_start
+  --poller_fp=$poller_fp
+  $retain_temp_files
+  $suppress_submit_jobs
+  $poll_directly
+  --cluster_jobs_fp=$cluster_jobs_fp
+  $suppress_polling
+  --job_prefix=$job_prefix
+  --python_exe_fp=$python_exe_fp
+  --seconds_to_sleep=$seconds_to_sleep
+ </command>
+ <inputs>
+  <param name="input_fasta_fp" type="data" format="fasta" label="input_fasta_fp"
+   help="path to the input fasta file [REQUIRED]"/>
+  <param name="template_fp" type="data" format="txt" label="template_fp"
+   help="Filepath for template against [REQUIRED]"/>
+  <param name="pairwise_alignment_method" type="select" label="pairwise_alignment_method"
+   help="Method to use for pairwise alignments [default: uclust]">
+    <option value="muscle">muscle</option>
+    <option value="pair_hmm">pair_hmm</option>
+    <option value="clustal">clustal</option>
+    <option value="blast">blast</option>
+    <option value="uclust" selected="true">uclust</option>
+    <option value="mafft">mafft</option>
+  </param>
+  <param name="blast_db" type="text"  label="blast_db"
+   help="Database to blast against [default: created on-the-fly from template_alignment]"/>
+  <param name="min_length" type="integer" value="150" label="min_length"
+   help="Minimum sequence length to include in alignment [default: 150]"/>
+  <param name="min_percent_id" type="float" value="75.0" label="min_percent_id"
+   help="Minimum percent sequence identity to closest blast hit to include sequence in alignment [default: 75.0]"/>
+  <param name="align_seqs_fp" type="data" format="txt" label="align_seqs_fp"
+   help="full path to Qiime/scripts/align_seqs.py [default: /usr/local/lib/python2.6/site-packages/scripts/align_seqs.py]"/>
+  <param name="jobs_to_start" type="integer" value="1" label="jobs_to_start"
+   help="Number of jobs to start [default: 1]"/>
+  <param name="poller_fp" type="data" format="txt" label="poller_fp"
+   help="full path to qiime/parallel/poller.py [default: /usr/local/lib/python2.6/site-packages/scripts/poller.py]"/>
+  <param name="retain_temp_files" type="boolean" truevalue="--retain_temp_files" falsevalue="" checked="false" label="retain_temp_files"
+   help="retain temporary files after runs complete (useful for debugging) [default: False]"/>
+  <param name="suppress_submit_jobs" type="boolean" truevalue="--suppress_submit_jobs" falsevalue="" checked="false" label="suppress_submit_jobs"
+   help="Only split input and write commands file - don't submit jobs [default: False]"/>
+  <param name="poll_directly" type="boolean" truevalue="--poll_directly" falsevalue="" checked="false" label="poll_directly"
+   help="Poll directly for job completion rather than running poller as a separate job. If -T is specified this script will not return until all jobs have completed. [default: False]"/>
+  <param name="cluster_jobs_fp" type="data" format="txt" label="cluster_jobs_fp"
+   help="path to cluster_jobs.py script  [default: /usr/local/lib/python2.6/site-packages/scripts/start_parallel_jobs.py]"/>
+  <param name="suppress_polling" type="boolean" truevalue="--suppress_polling" falsevalue="" checked="false" label="suppress_polling"
+   help="suppress polling of jobs and merging of results upon completion [default: False]"/>
+  <param name="job_prefix" type="text"  label="job_prefix"
+   help="job prefix [default: descriptive prefix + random chars]"/>
+  <param name="python_exe_fp" type="data" format="txt" label="python_exe_fp"
+   help="full path to python executable [default: python]"/>
+  <param name="seconds_to_sleep" type="integer" value="60" label="seconds_to_sleep"
+   help="Number of seconds to sleep between checks for run  completion when polling runs [default: 60]"/>
+ </inputs>
+ <outputs>
+  
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/parallel_alpha_diversity.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,65 @@
+<tool id="parallel_alpha_diversity" name="parallel_alpha_diversity" version="1.2.0">
+ <description>Parallel alpha diversity</description>
+ <requirements>
+  <requirement type="binary">parallel_alpha_diversity.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  parallel_alpha_diversity.py
+  --input_path=$input_path
+  --output_path=$output_path
+  --metrics=$metrics
+  --tree_path=$tree_path
+  --alpha_diversity_fp=$alpha_diversity_fp
+  --poller_fp=$poller_fp
+  $retain_temp_files
+  $suppress_submit_jobs
+  $poll_directly
+  --cluster_jobs_fp=$cluster_jobs_fp
+  $suppress_polling
+  --job_prefix=$job_prefix
+  --python_exe_fp=$python_exe_fp
+  --seconds_to_sleep=$seconds_to_sleep
+  --jobs_to_start=$jobs_to_start
+ </command>
+ <inputs>
+  <param name="input_path" type="text"  label="input_path"
+   help="input path, must be directory [REQUIRED]"/>
+  <param name="metrics" type="text"  label="metrics"
+   help="metrics to use, comma delimited [REQUIRED]"/>
+  <param name="tree_path" type="text"  label="tree_path"
+   help="path to newick tree file, required for phylogenetic metrics [default: ('NO', 'DEFAULT')]"/>
+  <param name="alpha_diversity_fp" type="data" format="txt" label="alpha_diversity_fp"
+   help="full path to scripts/alpha_diversity.py [default: /usr/local/lib/python2.6/site-packages/scripts/alpha_diversity.py]"/>
+  <param name="poller_fp" type="data" format="txt" label="poller_fp"
+   help="full path to qiime/parallel/poller.py [default: /usr/local/lib/python2.6/site-packages/scripts/poller.py]"/>
+  <param name="retain_temp_files" type="boolean" truevalue="--retain_temp_files" falsevalue="" checked="false" label="retain_temp_files"
+   help="retain temporary files after runs complete (useful for debugging) [default: False]"/>
+  <param name="suppress_submit_jobs" type="boolean" truevalue="--suppress_submit_jobs" falsevalue="" checked="false" label="suppress_submit_jobs"
+   help="Only split input and write commands file - don't submit jobs [default: False]"/>
+  <param name="poll_directly" type="boolean" truevalue="--poll_directly" falsevalue="" checked="false" label="poll_directly"
+   help="Poll directly for job completion rather than running poller as a separate job. If -T is specified this script will not return until all jobs have completed. [default: False]"/>
+  <param name="cluster_jobs_fp" type="data" format="txt" label="cluster_jobs_fp"
+   help="path to cluster_jobs.py script  [default: /usr/local/lib/python2.6/site-packages/scripts/start_parallel_jobs.py]"/>
+  <param name="suppress_polling" type="boolean" truevalue="--suppress_polling" falsevalue="" checked="false" label="suppress_polling"
+   help="suppress polling of jobs and merging of results upon completion [default: False]"/>
+  <param name="job_prefix" type="text"  label="job_prefix"
+   help="job prefix [default: descriptive prefix + random chars]"/>
+  <param name="python_exe_fp" type="data" format="txt" label="python_exe_fp"
+   help="full path to python executable [default: python]"/>
+  <param name="seconds_to_sleep" type="integer" value="60" label="seconds_to_sleep"
+   help="Number of seconds to sleep between checks for run  completion when polling runs [default: 60]"/>
+  <param name="jobs_to_start" type="integer" value="1" label="jobs_to_start"
+   help="Number of jobs to start [default: 1]"/>
+ </inputs>
+ <outputs>
+  <data format="txt" name="output_path"/>
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/parallel_assign_taxonomy_blast.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,74 @@
+<tool id="parallel_assign_taxonomy_blast" name="parallel_assign_taxonomy_blast" version="1.2.0">
+ <description>Parallel taxonomy assignment using BLAST</description>
+ <requirements>
+  <requirement type="binary">parallel_assign_taxonomy_blast.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  parallel_assign_taxonomy_blast.py
+  --input_fasta_fp=$input_fasta_fp
+  --id_to_taxonomy_fp=$id_to_taxonomy_fp
+  --output_dir=$__new_file_path__
+  --reference_seqs_fp=$reference_seqs_fp
+  --blast_db=$blast_db
+  --e_value=$e_value
+  --blastmat_dir=$blastmat_dir
+  --assign_taxonomy_fp=$assign_taxonomy_fp
+  --jobs_to_start=$jobs_to_start
+  --poller_fp=$poller_fp
+  $retain_temp_files
+  $suppress_submit_jobs
+  $poll_directly
+  --cluster_jobs_fp=$cluster_jobs_fp
+  $suppress_polling
+  --job_prefix=$job_prefix
+  --python_exe_fp=$python_exe_fp
+  --seconds_to_sleep=$seconds_to_sleep
+ </command>
+ <inputs>
+  <param name="input_fasta_fp" type="data" format="fasta" label="input_fasta_fp"
+   help="full path to input_fasta_fp [REQUIRED]"/>
+  <param name="id_to_taxonomy_fp" type="data" format="tabular" label="id_to_taxonomy_fp"
+   help="full path to id_to_taxonomy mapping file [REQUIRED]"/>
+  <param name="reference_seqs_fp" type="data" format="txt" label="reference_seqs_fp"
+   help="Ref seqs to blast against.  Must provide either --blast_db or --reference_seqs_db for assignment with blast [default: ('NO', 'DEFAULT')]"/>
+  <param name="blast_db" type="text"  label="blast_db"
+   help="Database to blast against.  Must provide either --blast_db or --reference_seqs_db for assignment with blast [default: ('NO', 'DEFAULT')]"/>
+  <param name="e_value" type="float" value="0.001" label="e_value"
+   help="Maximum e-value to record an assignment, only used for blast method [default: 0.001]"/>
+  <param name="blastmat_dir" type="text"  label="blastmat_dir"
+   help="full path to directory containing blastmat file [default: %default]"/>
+  <param name="assign_taxonomy_fp" type="data" format="txt" label="assign_taxonomy_fp"
+   help="full path to scripts/assign_taxonomy.py [default: /usr/local/lib/python2.6/site-packages/scripts/assign_taxonomy.py]"/>
+  <param name="jobs_to_start" type="integer" value="1" label="jobs_to_start"
+   help="Number of jobs to start [default: 1]"/>
+  <param name="poller_fp" type="data" format="txt" label="poller_fp"
+   help="full path to qiime/parallel/poller.py [default: /usr/local/lib/python2.6/site-packages/scripts/poller.py]"/>
+  <param name="retain_temp_files" type="boolean" truevalue="--retain_temp_files" falsevalue="" checked="false" label="retain_temp_files"
+   help="retain temporary files after runs complete (useful for debugging) [default: False]"/>
+  <param name="suppress_submit_jobs" type="boolean" truevalue="--suppress_submit_jobs" falsevalue="" checked="false" label="suppress_submit_jobs"
+   help="Only split input and write commands file - don't submit jobs [default: False]"/>
+  <param name="poll_directly" type="boolean" truevalue="--poll_directly" falsevalue="" checked="false" label="poll_directly"
+   help="Poll directly for job completion rather than running poller as a separate job. If -T is specified this script will not return until all jobs have completed. [default: False]"/>
+  <param name="cluster_jobs_fp" type="data" format="txt" label="cluster_jobs_fp"
+   help="path to cluster_jobs.py script  [default: /usr/local/lib/python2.6/site-packages/scripts/start_parallel_jobs.py]"/>
+  <param name="suppress_polling" type="boolean" truevalue="--suppress_polling" falsevalue="" checked="false" label="suppress_polling"
+   help="suppress polling of jobs and merging of results upon completion [default: False]"/>
+  <param name="job_prefix" type="text"  label="job_prefix"
+   help="job prefix [default: descriptive prefix + random chars]"/>
+  <param name="python_exe_fp" type="data" format="txt" label="python_exe_fp"
+   help="full path to python executable [default: python]"/>
+  <param name="seconds_to_sleep" type="integer" value="60" label="seconds_to_sleep"
+   help="Number of seconds to sleep between checks for run  completion when polling runs [default: 60]"/>
+ </inputs>
+ <outputs>
+  
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/parallel_assign_taxonomy_rdp.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,65 @@
+<tool id="parallel_assign_taxonomy_rdp" name="parallel_assign_taxonomy_rdp" version="1.2.0">
+ <description>Parallel taxonomy assignment using RDP</description>
+ <requirements>
+  <requirement type="binary">parallel_assign_taxonomy_rdp.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  parallel_assign_taxonomy_rdp.py
+  --input_fasta_fp=$input_fasta_fp
+  --output_dir=$__new_file_path__
+  --rdp_classifier_fp=$rdp_classifier_fp
+  --confidence=$confidence
+  --assign_taxonomy_fp=$assign_taxonomy_fp
+  --jobs_to_start=$jobs_to_start
+  --poller_fp=$poller_fp
+  $retain_temp_files
+  $suppress_submit_jobs
+  $poll_directly
+  --cluster_jobs_fp=$cluster_jobs_fp
+  $suppress_polling
+  --job_prefix=$job_prefix
+  --python_exe_fp=$python_exe_fp
+  --seconds_to_sleep=$seconds_to_sleep
+ </command>
+ <inputs>
+  <param name="input_fasta_fp" type="data" format="fasta" label="input_fasta_fp"
+   help="full path to input_fasta_fp [REQUIRED]"/>
+  <param name="rdp_classifier_fp" type="data" format="txt" label="rdp_classifier_fp"
+   help="full path to rdp classifier jar file [default: %default]"/>
+  <param name="confidence" type="float" value="0.8" label="confidence"
+   help="Minimum confidence to record an assignment [default: 0.8]"/>
+  <param name="assign_taxonomy_fp" type="data" format="txt" label="assign_taxonomy_fp"
+   help="full path to scripts/assign_taxonomy.py [default: /usr/local/lib/python2.6/site-packages/scripts/assign_taxonomy.py]"/>
+  <param name="jobs_to_start" type="integer" value="1" label="jobs_to_start"
+   help="Number of jobs to start [default: 1]"/>
+  <param name="poller_fp" type="data" format="txt" label="poller_fp"
+   help="full path to qiime/parallel/poller.py [default: /usr/local/lib/python2.6/site-packages/scripts/poller.py]"/>
+  <param name="retain_temp_files" type="boolean" truevalue="--retain_temp_files" falsevalue="" checked="false" label="retain_temp_files"
+   help="retain temporary files after runs complete (useful for debugging) [default: False]"/>
+  <param name="suppress_submit_jobs" type="boolean" truevalue="--suppress_submit_jobs" falsevalue="" checked="false" label="suppress_submit_jobs"
+   help="Only split input and write commands file - don't submit jobs [default: False]"/>
+  <param name="poll_directly" type="boolean" truevalue="--poll_directly" falsevalue="" checked="false" label="poll_directly"
+   help="Poll directly for job completion rather than running poller as a separate job. If -T is specified this script will not return until all jobs have completed. [default: False]"/>
+  <param name="cluster_jobs_fp" type="data" format="txt" label="cluster_jobs_fp"
+   help="path to cluster_jobs.py script  [default: /usr/local/lib/python2.6/site-packages/scripts/start_parallel_jobs.py]"/>
+  <param name="suppress_polling" type="boolean" truevalue="--suppress_polling" falsevalue="" checked="false" label="suppress_polling"
+   help="suppress polling of jobs and merging of results upon completion [default: False]"/>
+  <param name="job_prefix" type="text"  label="job_prefix"
+   help="job prefix [default: descriptive prefix + random chars]"/>
+  <param name="python_exe_fp" type="data" format="txt" label="python_exe_fp"
+   help="full path to python executable [default: python]"/>
+  <param name="seconds_to_sleep" type="integer" value="60" label="seconds_to_sleep"
+   help="Number of seconds to sleep between checks for run  completion when polling runs [default: 60]"/>
+ </inputs>
+ <outputs>
+  
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/parallel_beta_diversity.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,68 @@
+<tool id="parallel_beta_diversity" name="parallel_beta_diversity" version="1.2.0">
+ <description>Parallel beta diversity</description>
+ <requirements>
+  <requirement type="binary">parallel_beta_diversity.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  parallel_beta_diversity.py
+  --input_path=$input_path
+  --output_path=$output_path
+  --metrics=$metrics
+  --tree_path=$tree_path
+  --beta_diversity_fp=$beta_diversity_fp
+  --poller_fp=$poller_fp
+  $retain_temp_files
+  $suppress_submit_jobs
+  $poll_directly
+  --cluster_jobs_fp=$cluster_jobs_fp
+  $suppress_polling
+  --job_prefix=$job_prefix
+  --python_exe_fp=$python_exe_fp
+  --seconds_to_sleep=$seconds_to_sleep
+  --jobs_to_start=$jobs_to_start
+  $full_tree
+ </command>
+ <inputs>
+  <param name="input_path" type="text"  label="input_path"
+   help="input path, must be directory [REQUIRED]"/>
+  <param name="metrics" type="text"  label="metrics"
+   help="metrics to use [REQUIRED]"/>
+  <param name="tree_path" type="text"  label="tree_path"
+   help="path to newick tree file, required for phylogenetic metrics [default: ('NO', 'DEFAULT')]"/>
+  <param name="beta_diversity_fp" type="data" format="txt" label="beta_diversity_fp"
+   help="full path to scripts/beta_diversity.py [default: /usr/local/lib/python2.6/site-packages/scripts/beta_diversity.py]"/>
+  <param name="poller_fp" type="data" format="txt" label="poller_fp"
+   help="full path to qiime/parallel/poller.py [default: /usr/local/lib/python2.6/site-packages/scripts/poller.py]"/>
+  <param name="retain_temp_files" type="boolean" truevalue="--retain_temp_files" falsevalue="" checked="false" label="retain_temp_files"
+   help="retain temporary files after runs complete (useful for debugging) [default: False]"/>
+  <param name="suppress_submit_jobs" type="boolean" truevalue="--suppress_submit_jobs" falsevalue="" checked="false" label="suppress_submit_jobs"
+   help="Only split input and write commands file - don't submit jobs [default: False]"/>
+  <param name="poll_directly" type="boolean" truevalue="--poll_directly" falsevalue="" checked="false" label="poll_directly"
+   help="Poll directly for job completion rather than running poller as a separate job. If -T is specified this script will not return until all jobs have completed. [default: False]"/>
+  <param name="cluster_jobs_fp" type="data" format="txt" label="cluster_jobs_fp"
+   help="path to cluster_jobs.py script  [default: /usr/local/lib/python2.6/site-packages/scripts/start_parallel_jobs.py]"/>
+  <param name="suppress_polling" type="boolean" truevalue="--suppress_polling" falsevalue="" checked="false" label="suppress_polling"
+   help="suppress polling of jobs and merging of results upon completion [default: False]"/>
+  <param name="job_prefix" type="text"  label="job_prefix"
+   help="job prefix [default: descriptive prefix + random chars]"/>
+  <param name="python_exe_fp" type="data" format="txt" label="python_exe_fp"
+   help="full path to python executable [default: python]"/>
+  <param name="seconds_to_sleep" type="integer" value="60" label="seconds_to_sleep"
+   help="Number of seconds to sleep between checks for run  completion when polling runs [default: 60]"/>
+  <param name="jobs_to_start" type="integer" value="1" label="jobs_to_start"
+   help="Number of jobs to start [default: 1]"/>
+  <param name="full_tree" type="boolean" truevalue="--full_tree" falsevalue="" checked="false" label="full_tree"
+   help="By default, we first compute the intersection of the tree with the otus present in the otu table. pass -f if you already have a minimal tree, and this script will run faster"/>
+ </inputs>
+ <outputs>
+  <data format="txt" name="output_path"/>
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/parallel_blast.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,80 @@
+<tool id="parallel_blast" name="parallel_blast" version="1.2.0">
+ <description>Parallel BLAST</description>
+ <requirements>
+  <requirement type="binary">parallel_blast.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  parallel_blast.py
+  --infile_path=$infile_path
+  --refseqs_path=$refseqs_path
+  --output_dir=$__new_file_path__
+  $disable_low_complexity_filter
+  --e_value=$e_value
+  --num_hits=$num_hits
+  --word_size=$word_size
+  $suppress_format_blastdb
+  --blastmat_dir=$blastmat_dir
+  --blastall_fp=$blastall_fp
+  --jobs_to_start=$jobs_to_start
+  --poller_fp=$poller_fp
+  $retain_temp_files
+  $suppress_submit_jobs
+  $poll_directly
+  --cluster_jobs_fp=$cluster_jobs_fp
+  $suppress_polling
+  --job_prefix=$job_prefix
+  --python_exe_fp=$python_exe_fp
+  --seconds_to_sleep=$seconds_to_sleep
+ </command>
+ <inputs>
+  <param name="infile_path" type="text"  label="infile_path"
+   help="Path of sequences to use as queries [REQUIRED]"/>
+  <param name="refseqs_path" type="text"  label="refseqs_path"
+   help="Path to fasta sequences to search against [REQUIRED]"/>
+  <param name="disable_low_complexity_filter" type="boolean" truevalue="--disable_low_complexity_filter" falsevalue="" checked="false" label="disable_low_complexity_filter"
+   help="disable filtering of low-complexity sequences (i.e., -F F is passed to blast) [default: False]"/>
+  <param name="e_value" type="float" value="1e-30" label="e_value"
+   help="E-value threshold for blasts [default: 1e-30]"/>
+  <param name="num_hits" type="integer" value="1" label="num_hits"
+   help="number of hits per query for blast results [default: 1]"/>
+  <param name="word_size" type="integer" value="30" label="word_size"
+   help="word size for blast searches [default: 30]"/>
+  <param name="suppress_format_blastdb" type="boolean" truevalue="--suppress_format_blastdb" falsevalue="" checked="false" label="suppress_format_blastdb"
+   help="supress format of blastdb [default: False]"/>
+  <param name="blastmat_dir" type="text"  label="blastmat_dir"
+   help="full path to directory containing blastmat file [default: %default]"/>
+  <param name="blastall_fp" type="data" format="txt" label="blastall_fp"
+   help="Path to blastall [default: blastall]"/>
+  <param name="jobs_to_start" type="integer" value="1" label="jobs_to_start"
+   help="Number of jobs to start [default: 1]"/>
+  <param name="poller_fp" type="data" format="txt" label="poller_fp"
+   help="full path to qiime/parallel/poller.py [default: /usr/local/lib/python2.6/site-packages/scripts/poller.py]"/>
+  <param name="retain_temp_files" type="boolean" truevalue="--retain_temp_files" falsevalue="" checked="false" label="retain_temp_files"
+   help="retain temporary files after runs complete (useful for debugging) [default: False]"/>
+  <param name="suppress_submit_jobs" type="boolean" truevalue="--suppress_submit_jobs" falsevalue="" checked="false" label="suppress_submit_jobs"
+   help="Only split input and write commands file - don't submit jobs [default: False]"/>
+  <param name="poll_directly" type="boolean" truevalue="--poll_directly" falsevalue="" checked="false" label="poll_directly"
+   help="Poll directly for job completion rather than running poller as a separate job. If -T is specified this script will not return until all jobs have completed. [default: False]"/>
+  <param name="cluster_jobs_fp" type="data" format="txt" label="cluster_jobs_fp"
+   help="path to cluster_jobs.py script  [default: /usr/local/lib/python2.6/site-packages/scripts/start_parallel_jobs.py]"/>
+  <param name="suppress_polling" type="boolean" truevalue="--suppress_polling" falsevalue="" checked="false" label="suppress_polling"
+   help="suppress polling of jobs and merging of results upon completion [default: False]"/>
+  <param name="job_prefix" type="text"  label="job_prefix"
+   help="job prefix [default: descriptive prefix + random chars]"/>
+  <param name="python_exe_fp" type="data" format="txt" label="python_exe_fp"
+   help="full path to python executable [default: python]"/>
+  <param name="seconds_to_sleep" type="integer" value="60" label="seconds_to_sleep"
+   help="Number of seconds to sleep between checks for run  completion when polling runs [default: 60]"/>
+ </inputs>
+ <outputs>
+  
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/parallel_identify_chimeric_seqs.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,89 @@
+<tool id="parallel_identify_chimeric_seqs" name="parallel_identify_chimeric_seqs" version="1.2.0">
+ <description>Parallel chimera detection</description>
+ <requirements>
+  <requirement type="binary">parallel_identify_chimeric_seqs.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  parallel_identify_chimeric_seqs.py
+  --input_fasta_fp=$input_fasta_fp
+  --aligned_reference_seqs_fp=$aligned_reference_seqs_fp
+  --id_to_taxonomy_fp=$id_to_taxonomy_fp
+  --reference_seqs_fp=$reference_seqs_fp
+  --blast_db=$blast_db
+  --chimera_detection_method=$chimera_detection_method
+  --num_fragments=$num_fragments
+  --taxonomy_depth=$taxonomy_depth
+  --max_e_value=$max_e_value
+  --min_div_ratio=$min_div_ratio
+  --output_fp=$output_fp
+  --identify_chimeric_seqs_fp=$identify_chimeric_seqs_fp
+  --jobs_to_start=$jobs_to_start
+  --poller_fp=$poller_fp
+  $retain_temp_files
+  $suppress_submit_jobs
+  $poll_directly
+  --cluster_jobs_fp=$cluster_jobs_fp
+  $suppress_polling
+  --job_prefix=$job_prefix
+  --python_exe_fp=$python_exe_fp
+  --seconds_to_sleep=$seconds_to_sleep
+ </command>
+ <inputs>
+  <param name="input_fasta_fp" type="data" format="fasta" label="input_fasta_fp"
+   help="path to the input fasta file [REQUIRED]"/>
+  <param name="aligned_reference_seqs_fp" type="data" format="txt" label="aligned_reference_seqs_fp"
+   help="Path to (Py)Nast aligned reference sequences. REQUIRED when method ChimeraSlayer [default: ('NO', 'DEFAULT')]"/>
+  <param name="id_to_taxonomy_fp" type="data" format="tabular" label="id_to_taxonomy_fp"
+   help="Path to tab-delimited file mapping sequences to assigned taxonomy. Each assigned taxonomy is provided as a comma-separated list. [default: ('NO', 'DEFAULT'); REQUIRED when method is blast_fragments]"/>
+  <param name="reference_seqs_fp" type="data" format="txt" label="reference_seqs_fp"
+   help="Path to reference sequences (used to build a blast db when method blast_fragments). [default: ('NO', 'DEFAULT'); REQUIRED when method blast_fragments if no blast_db is provided;]"/>
+  <param name="blast_db" type="text"  label="blast_db"
+   help="Database to blast against. Must provide either --blast_db or --reference_seqs_fp when method is blast_fragments [default: ('NO', 'DEFAULT')]"/>
+  <param name="chimera_detection_method" type="select" label="chimera_detection_method"
+   help="Chimera detection method. Choices: blast_fragments or ChimeraSlayer. [default:ChimeraSlayer]">
+    <option value="blast_fragments">blast_fragments</option>
+    <option value="ChimeraSlayer" selected="true">ChimeraSlayer</option>
+  </param>
+  <param name="num_fragments" type="integer" value="3" label="num_fragments"
+   help="Number of fragments to split sequences into (i.e., number of expected breakpoints + 1) [default: 3]"/>
+  <param name="taxonomy_depth" type="integer" value="4" label="taxonomy_depth"
+   help="Number of taxonomic divisions to consider when comparing taxonomy assignments [default: 4]"/>
+  <param name="max_e_value" type="float" value="1e-30" label="max_e_value"
+   help="Max e-value to assign taxonomy [default: 1e-30]"/>
+  <param name="min_div_ratio" type="float" value="0.0" label="min_div_ratio"
+   help="min divergence ratio (passed to ChimeraSlayer). If set to None uses ChimeraSlayer default value.  [default: %default]"/>
+  <param name="identify_chimeric_seqs_fp" type="data" format="txt" label="identify_chimeric_seqs_fp"
+   help="full path to scripts/identify_chimeric_seqs.py [default: /usr/local/lib/python2.6/site-packages/scripts/identify_chimeric_seqs.py]"/>
+  <param name="jobs_to_start" type="integer" value="1" label="jobs_to_start"
+   help="Number of jobs to start [default: 1]"/>
+  <param name="poller_fp" type="data" format="txt" label="poller_fp"
+   help="full path to qiime/parallel/poller.py [default: /usr/local/lib/python2.6/site-packages/scripts/poller.py]"/>
+  <param name="retain_temp_files" type="boolean" truevalue="--retain_temp_files" falsevalue="" checked="false" label="retain_temp_files"
+   help="retain temporary files after runs complete (useful for debugging) [default: False]"/>
+  <param name="suppress_submit_jobs" type="boolean" truevalue="--suppress_submit_jobs" falsevalue="" checked="false" label="suppress_submit_jobs"
+   help="Only split input and write commands file - don't submit jobs [default: False]"/>
+  <param name="poll_directly" type="boolean" truevalue="--poll_directly" falsevalue="" checked="false" label="poll_directly"
+   help="Poll directly for job completion rather than running poller as a separate job. If -T is specified this script will not return until all jobs have completed. [default: False]"/>
+  <param name="cluster_jobs_fp" type="data" format="txt" label="cluster_jobs_fp"
+   help="path to cluster_jobs.py script  [default: /usr/local/lib/python2.6/site-packages/scripts/start_parallel_jobs.py]"/>
+  <param name="suppress_polling" type="boolean" truevalue="--suppress_polling" falsevalue="" checked="false" label="suppress_polling"
+   help="suppress polling of jobs and merging of results upon completion [default: False]"/>
+  <param name="job_prefix" type="text"  label="job_prefix"
+   help="job prefix [default: descriptive prefix + random chars]"/>
+  <param name="python_exe_fp" type="data" format="txt" label="python_exe_fp"
+   help="full path to python executable [default: python]"/>
+  <param name="seconds_to_sleep" type="integer" value="60" label="seconds_to_sleep"
+   help="Number of seconds to sleep between checks for run  completion when polling runs [default: 60]"/>
+ </inputs>
+ <outputs>
+  <data format="txt" name="output_fp"/>
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/parallel_multiple_rarefactions.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,74 @@
+<tool id="parallel_multiple_rarefactions" name="parallel_multiple_rarefactions" version="1.2.0">
+ <description>Parallel multiple file rarefaction</description>
+ <requirements>
+  <requirement type="binary">parallel_multiple_rarefactions.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  parallel_multiple_rarefactions.py
+  --input_path=$input_path
+  --output_path=$output_path
+  --min=$min
+  --max=$max
+  --step=$step
+  --num-reps=$num_reps
+  $lineages_included
+  --single_rarefaction_fp=$single_rarefaction_fp
+  --poller_fp=$poller_fp
+  $retain_temp_files
+  $suppress_submit_jobs
+  $poll_directly
+  --cluster_jobs_fp=$cluster_jobs_fp
+  $suppress_polling
+  --job_prefix=$job_prefix
+  --python_exe_fp=$python_exe_fp
+  --seconds_to_sleep=$seconds_to_sleep
+  --jobs_to_start=$jobs_to_start
+ </command>
+ <inputs>
+  <param name="input_path" type="text"  label="input_path"
+   help="input filepath, (the otu table) [REQUIRED]"/>
+  <param name="min" type="integer" value="-1" label="min"
+   help="min seqs/sample [REQUIRED]"/>
+  <param name="max" type="integer" value="-1" label="max"
+   help="max seqs/sample (inclusive) [REQUIRED]"/>
+  <param name="step" type="integer" value="-1" label="step"
+   help="levels: min, min+step... for level {= max [REQUIRED]"/>
+  <param name="num_reps" type="integer" value="1" label="num-reps"
+   help="num iterations at each seqs/sample level [default: 1]"/>
+  <param name="lineages_included" type="boolean" truevalue="--lineages_included" falsevalue="" checked="false" label="lineages_included"
+   help="output rarefied otu tables will include taxonomic (lineage) information for each otu, if present in input otu table [default: False]"/>
+  <param name="single_rarefaction_fp" type="data" format="txt" label="single_rarefaction_fp"
+   help="full path to scripts/single_rarefaction.py [default: /usr/local/lib/python2.6/site-packages/scripts/single_rarefaction.py]"/>
+  <param name="poller_fp" type="data" format="txt" label="poller_fp"
+   help="full path to qiime/parallel/poller.py [default: /usr/local/lib/python2.6/site-packages/scripts/poller.py]"/>
+  <param name="retain_temp_files" type="boolean" truevalue="--retain_temp_files" falsevalue="" checked="false" label="retain_temp_files"
+   help="retain temporary files after runs complete (useful for debugging) [default: False]"/>
+  <param name="suppress_submit_jobs" type="boolean" truevalue="--suppress_submit_jobs" falsevalue="" checked="false" label="suppress_submit_jobs"
+   help="Only split input and write commands file - don't submit jobs [default: False]"/>
+  <param name="poll_directly" type="boolean" truevalue="--poll_directly" falsevalue="" checked="false" label="poll_directly"
+   help="Poll directly for job completion rather than running poller as a separate job. If -T is specified this script will not return until all jobs have completed. [default: False]"/>
+  <param name="cluster_jobs_fp" type="data" format="txt" label="cluster_jobs_fp"
+   help="path to cluster_jobs.py script  [default: /usr/local/lib/python2.6/site-packages/scripts/start_parallel_jobs.py]"/>
+  <param name="suppress_polling" type="boolean" truevalue="--suppress_polling" falsevalue="" checked="false" label="suppress_polling"
+   help="suppress polling of jobs and merging of results upon completion [default: False]"/>
+  <param name="job_prefix" type="text"  label="job_prefix"
+   help="job prefix [default: descriptive prefix + random chars]"/>
+  <param name="python_exe_fp" type="data" format="txt" label="python_exe_fp"
+   help="full path to python executable [default: python]"/>
+  <param name="seconds_to_sleep" type="integer" value="60" label="seconds_to_sleep"
+   help="Number of seconds to sleep between checks for run  completion when polling runs [default: 60]"/>
+  <param name="jobs_to_start" type="integer" value="1" label="jobs_to_start"
+   help="Number of jobs to start [default: 1]"/>
+ </inputs>
+ <outputs>
+  <data format="txt" name="output_path"/>
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/parallel_pick_otus_blast.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,74 @@
+<tool id="parallel_pick_otus_blast" name="parallel_pick_otus_blast" version="1.2.0">
+ <description>Parallel pick otus using BLAST</description>
+ <requirements>
+  <requirement type="binary">parallel_pick_otus_blast.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  parallel_pick_otus_blast.py
+  --input_fasta_fp=$input_fasta_fp
+  --output_dir=$__new_file_path__
+  --max_e_value=$max_e_value
+  --similarity=$similarity
+  --refseqs_fp=$refseqs_fp
+  --blast_db=$blast_db
+  --min_aligned_percent=$min_aligned_percent
+  --pick_otus_fp=$pick_otus_fp
+  --jobs_to_start=$jobs_to_start
+  --poller_fp=$poller_fp
+  $retain_temp_files
+  $suppress_submit_jobs
+  $poll_directly
+  --cluster_jobs_fp=$cluster_jobs_fp
+  $suppress_polling
+  --job_prefix=$job_prefix
+  --python_exe_fp=$python_exe_fp
+  --seconds_to_sleep=$seconds_to_sleep
+ </command>
+ <inputs>
+  <param name="input_fasta_fp" type="data" format="fasta" label="input_fasta_fp"
+   help="full path to input_fasta_fp [REQUIRED]"/>
+  <param name="max_e_value" type="text" value="1e-10" label="max_e_value"
+   help="Max E-value [default: 1e-10]"/>
+  <param name="similarity" type="float" value="0.97" label="similarity"
+   help="Sequence similarity threshold [default: 0.97]"/>
+  <param name="refseqs_fp" type="data" format="txt" label="refseqs_fp"
+   help="full path to template alignment [default: ('NO', 'DEFAULT')]"/>
+  <param name="blast_db" type="text"  label="blast_db"
+   help="database to blast against [default: ('NO', 'DEFAULT')]"/>
+  <param name="min_aligned_percent" type="float" value="0.5" label="min_aligned_percent"
+   help="Minimum percent of query sequence that can be aligned to consider a hit (BLAST OTU picker only) [default: 0.5]"/>
+  <param name="pick_otus_fp" type="data" format="txt" label="pick_otus_fp"
+   help="full path to scripts/pick_otus.py [default: /usr/local/lib/python2.6/site-packages/scripts/pick_otus.py]"/>
+  <param name="jobs_to_start" type="integer" value="1" label="jobs_to_start"
+   help="Number of jobs to start [default: 1]"/>
+  <param name="poller_fp" type="data" format="txt" label="poller_fp"
+   help="full path to qiime/parallel/poller.py [default: /usr/local/lib/python2.6/site-packages/scripts/poller.py]"/>
+  <param name="retain_temp_files" type="boolean" truevalue="--retain_temp_files" falsevalue="" checked="false" label="retain_temp_files"
+   help="retain temporary files after runs complete (useful for debugging) [default: False]"/>
+  <param name="suppress_submit_jobs" type="boolean" truevalue="--suppress_submit_jobs" falsevalue="" checked="false" label="suppress_submit_jobs"
+   help="Only split input and write commands file - don't submit jobs [default: False]"/>
+  <param name="poll_directly" type="boolean" truevalue="--poll_directly" falsevalue="" checked="false" label="poll_directly"
+   help="Poll directly for job completion rather than running poller as a separate job. If -T is specified this script will not return until all jobs have completed. [default: False]"/>
+  <param name="cluster_jobs_fp" type="data" format="txt" label="cluster_jobs_fp"
+   help="path to cluster_jobs.py script  [default: /usr/local/lib/python2.6/site-packages/scripts/start_parallel_jobs.py]"/>
+  <param name="suppress_polling" type="boolean" truevalue="--suppress_polling" falsevalue="" checked="false" label="suppress_polling"
+   help="suppress polling of jobs and merging of results upon completion [default: False]"/>
+  <param name="job_prefix" type="text"  label="job_prefix"
+   help="job prefix [default: descriptive prefix + random chars]"/>
+  <param name="python_exe_fp" type="data" format="txt" label="python_exe_fp"
+   help="full path to python executable [default: python]"/>
+  <param name="seconds_to_sleep" type="integer" value="60" label="seconds_to_sleep"
+   help="Number of seconds to sleep between checks for run  completion when polling runs [default: 60]"/>
+ </inputs>
+ <outputs>
+  
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/parallel_pick_otus_uclust_ref.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,95 @@
+<tool id="parallel_pick_otus_uclust_ref" name="parallel_pick_otus_uclust_ref" version="1.2.1">
+ <description>Parallel pick otus using uclust_ref</description>
+ <requirements>
+  <requirement type="binary">parallel_pick_otus_uclust_ref.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  parallel_pick_otus_uclust_ref.py
+  --input_fasta_fp=$input_fasta_fp
+  --output_dir=$__new_file_path__
+  --refseqs_fp=$refseqs_fp
+  --similarity=$similarity
+  $enable_rev_strand_match
+  $optimal_uclust
+  $exact_uclust
+  --max_accepts=$max_accepts
+  --max_rejects=$max_rejects
+  --stepwords=$stepwords
+  --word_length=$word_length
+  $uclust_stable_sort
+  $suppress_uclust_stable_sort
+  $save_uc_files
+  --pick_otus_fp=$pick_otus_fp
+  --jobs_to_start=$jobs_to_start
+  --poller_fp=$poller_fp
+  $retain_temp_files
+  $suppress_submit_jobs
+  $poll_directly
+  --cluster_jobs_fp=$cluster_jobs_fp
+  $suppress_polling
+  --job_prefix=$job_prefix
+  --python_exe_fp=$python_exe_fp
+  --seconds_to_sleep=$seconds_to_sleep
+ </command>
+ <inputs>
+  <param name="input_fasta_fp" type="data" format="fasta" label="input_fasta_fp"
+   help="full path to input_fasta_fp [REQUIRED]"/>
+  <param name="refseqs_fp" type="data" format="txt" label="refseqs_fp"
+   help="full path to reference collection [REQUIRED]"/>
+  <param name="similarity" type="float" value="0.97" label="similarity"
+   help="Sequence similarity threshold [default: 0.97]"/>
+  <param name="enable_rev_strand_match" type="boolean" truevalue="--enable_rev_strand_match" falsevalue="" checked="false" label="enable_rev_strand_match"
+   help="Enable reverse strand matching for uclust otu picking, will double the amount of memory used. [default: False]"/>
+  <param name="optimal_uclust" type="boolean" truevalue="--optimal_uclust" falsevalue="" checked="false" label="optimal_uclust"
+   help="Pass the --optimal flag to uclust for uclust otu picking. [default: False]"/>
+  <param name="exact_uclust" type="boolean" truevalue="--exact_uclust" falsevalue="" checked="false" label="exact_uclust"
+   help="Pass the --exact flag to uclust for uclust otu picking. [default: False]"/>
+  <param name="max_accepts" type="integer" value="20" label="max_accepts"
+   help="max_accepts value to uclust and uclust_ref [default: 20]"/>
+  <param name="max_rejects" type="integer" value="500" label="max_rejects"
+   help="max_rejects value to uclust and uclust_ref [default: 500]"/>
+  <param name="stepwords" type="integer" value="20" label="stepwords"
+   help="stepwords value to uclust and uclust_ref [default: 20]"/>
+  <param name="word_length" type="integer" value="12" label="word_length"
+   help="w value to uclust and uclust_ref [default: 12]"/>
+  <param name="uclust_stable_sort" type="boolean" truevalue="--uclust_stable_sort" falsevalue="" checked="false" label="uclust_stable_sort"
+   help="Deprecated: stable sort enabled by default, pass --uclust_suppress_stable_sort to disable [default: True]"/>
+  <param name="suppress_uclust_stable_sort" type="boolean" truevalue="--suppress_uclust_stable_sort" falsevalue="" checked="false" label="suppress_uclust_stable_sort"
+   help="Don't pass --stable-sort to uclust [default: False]"/>
+  <param name="save_uc_files" type="boolean" truevalue="" falsevalue="--save_uc_files" checked="false" label="save_uc_files"
+   help="Enable preservation of intermediate uclust (.uc) files that are used to generate clusters via uclust. [default: True]"/>
+  <param name="pick_otus_fp" type="data" format="txt" label="pick_otus_fp"
+   help="full path to scripts/pick_otus.py [default: /usr/local/bin/pick_otus.py]"/>
+  <param name="jobs_to_start" type="integer" value="1" label="jobs_to_start"
+   help="Number of jobs to start [default: 1]"/>
+  <param name="poller_fp" type="data" format="txt" label="poller_fp"
+   help="full path to qiime/parallel/poller.py [default: /usr/local/bin/poller.py]"/>
+  <param name="retain_temp_files" type="boolean" truevalue="--retain_temp_files" falsevalue="" checked="false" label="retain_temp_files"
+   help="retain temporary files after runs complete (useful for debugging) [default: False]"/>
+  <param name="suppress_submit_jobs" type="boolean" truevalue="--suppress_submit_jobs" falsevalue="" checked="false" label="suppress_submit_jobs"
+   help="Only split input and write commands file - don't submit jobs [default: False]"/>
+  <param name="poll_directly" type="boolean" truevalue="--poll_directly" falsevalue="" checked="false" label="poll_directly"
+   help="Poll directly for job completion rather than running poller as a separate job. If -T is specified this script will not return until all jobs have completed. [default: False]"/>
+  <param name="cluster_jobs_fp" type="data" format="txt" label="cluster_jobs_fp"
+   help="path to cluster_jobs.py script  [default: /usr/local/bin/start_parallel_jobs.py]"/>
+  <param name="suppress_polling" type="boolean" truevalue="--suppress_polling" falsevalue="" checked="false" label="suppress_polling"
+   help="suppress polling of jobs and merging of results upon completion [default: False]"/>
+  <param name="job_prefix" type="text"  label="job_prefix"
+   help="job prefix [default: descriptive prefix + random chars]"/>
+  <param name="python_exe_fp" type="data" format="txt" label="python_exe_fp"
+   help="full path to python executable [default: python]"/>
+  <param name="seconds_to_sleep" type="integer" value="60" label="seconds_to_sleep"
+   help="Number of seconds to sleep between checks for run  completion when polling runs [default: 60]"/>
+ </inputs>
+ <outputs>
+  
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/per_library_stats.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,25 @@
+<tool id="per_library_stats" name="per_library_stats" version="1.2.0">
+ <description>Calculate per library statistics</description>
+ <requirements>
+  <requirement type="binary">per_library_stats.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  per_library_stats.py
+  --otu_table_fp=$otu_table_fp
+ </command>
+ <inputs>
+  <param name="otu_table_fp" type="data" format="txt" label="otu_table_fp"
+   help="path to the input OTU table (i.e., the output from make_otu_table.py) [REQUIRED]"/>
+ </inputs>
+ <outputs>
+  
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pick_otus.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,169 @@
+<tool id="pick_otus" name="pick_otus" version="1.2.1">
+ <description>OTU picking</description>
+ <requirements>
+  <requirement type="binary">pick_otus.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_outputdir='$log.extra_files_path'
+  #if $pick.otu_picking_method == 'uclust' and $pick.refseqs_fp.__str__ != 'None':
+    --galaxy_datasets='^\S+_otus\.txt$:'$otus,'^\S+_otus\.log$:'$log,'^\S+_failures\.txt$:'$failures
+  #else:
+    --galaxy_datasets='^\S+_otus\.txt$:'$otus,'^\S+_otus\.log$:'$log
+  #end if
+  pick_otus.py
+  --input_seqs_filepath=$input_seqs_filepath
+  #if $pick.otu_picking_method == 'uclust':
+    #if $pick.refseqs_fp.__str__ != 'None':
+      --refseqs_fp=$pick.refseqs_fp
+      --otu_picking_method='uclust_ref'
+      $pick.suppress_new_clusters
+    #else:
+      --otu_picking_method=$pick.otu_picking_method
+    #end if
+    --similarity=$pick.similarity
+    $pick.enable_rev_strand_match
+    $pick.optimal_uclust
+    $pick.exact_uclust
+    $pick.user_sort
+    $pick.suppress_presort_by_abundance_uclust
+    --max_accepts=$pick.max_accepts
+    --max_rejects=$pick.max_rejects
+    --stepwords=$pick.stepwords
+    --word_length=$pick.word_length
+    --uclust_otu_id_prefix=$pick.uclust_otu_id_prefix
+    $pick.uclust_stable_sort
+    $pick.save_uc_files
+  #elif $pick.otu_picking_method == 'mothur':
+    --otu_picking_method=$pick.otu_picking_method
+    --clustering_algorithm=$pick.clustering_algorithm
+    --similarity=$pick.similarity
+  #elif $pick.otu_picking_method == 'trie':
+    --otu_picking_method=$pick.otu_picking_method
+    $pick.trie_reverse_seqs
+  #elif $pick.otu_picking_method == 'prefix_suffix':
+    --otu_picking_method=$pick.otu_picking_method
+    --prefix_length=$pick.prefix_length
+    --suffix_length=$pick.suffix_length
+  #elif pick.otu_picking_method == 'blast':
+    --otu_picking_method=$pick.otu_picking_method
+    #if $refseqs_fp.__str__ != 'None':
+      --refseqs_fp=$pick.refseqs_fp
+    #end if
+    --blast_db=$pick.blast_db
+    --similarity=$pick.similarity
+    --max_e_value=$pick.max_e_value
+    --min_aligned_percent=$pick.min_aligned_percent
+  #elif $pick.otu_picking_method == 'cdhit':
+    --otu_picking_method=$pick.otu_picking_method
+    --similarity=$pick.similarity
+    --max_cdhit_memory=$pick.max_cdhit_memory
+    --prefix_prefilter_length=$pick.prefix_prefilter_length
+    $pick.trie_prefilter
+  #end if
+  --output_dir='$log.extra_files_path'
+ </command>
+ <inputs>
+  <param name="input_seqs_filepath" type="data"  format="fasta" label="input_seqs_filepath"
+   help="Input sequences [REQUIRED]"/>
+  <conditional name="pick">
+  <param name="otu_picking_method" type="select" label="otu_picking_method"
+   help="Method for picking OTUs.  Valid choices are: mothur, trie, uclust_ref, prefix_suffix, blast, cdhit, uclust. The mothur method requires an input file of aligned sequences [default: uclust]">
+    <option value="uclust" selected="true">uclust</option>
+    <option value="mothur">mothur</option>
+    <option value="trie">trie</option>
+    <option value="prefix_suffix">prefix_suffix</option>
+    <option value="blast">blast</option>
+    <option value="cdhit">cdhit</option>
+  </param>
+  <when value="mothur">
+    <param name="clustering_algorithm" type="select" label="clustering_algorithm"
+     help="Clustering algorithm for mothur otu picking method.  Valid choices are: furthest, nearest, average. [default: furthest]">
+      <option value="furthest" selected="true">furthest</option>
+      <option value="nearest">nearest</option>
+      <option value="average">average</option>
+    </param>
+    <param name="similarity" type="float" value="0.97" label="similarity"
+     help="Sequence similarity threshold (for cdhit, uclust, or uclust_ref) [default: 0.97]"/>
+  </when> <!-- mothur -->
+  <when value="trie">
+    <param name="trie_reverse_seqs" type="boolean" truevalue="--trie_reverse_seqs" falsevalue="" checked="false" label="trie_reverse_seqs"
+     help="Reverse seqs before picking OTUs with the Trie OTU picker for suffix (rather than prefix) collapsing [default: False]"/>
+  </when> <!-- trie -->
+  <when value="uclust">
+    <param name="refseqs_fp" type="data" format="fasta" label="refseqs_fp" optional="true"
+     help="Reference sequences to search against"/>
+    <param name="suppress_new_clusters" type="boolean" truevalue="--suppress_new_clusters" falsevalue="" checked="false" label="suppress_new_clusters"
+     help="Suppress creation of new clusters using seqs that don't match reference when using -m uclust_ref [default: False]"/>
+    <param name="suppress_presort_by_abundance_uclust" type="boolean" truevalue="--suppress_presort_by_abundance_uclust" falsevalue="" checked="false" label="suppress_presort_by_abundance_uclust"
+     help="Suppress presorting of sequences by abundance when picking OTUs with uclust or uclust_ref [default: False]"/>
+    <param name="similarity" type="float" value="0.97" label="similarity"
+     help="Sequence similarity threshold (for cdhit, uclust, or uclust_ref) [default: 0.97]"/>
+    <param name="enable_rev_strand_match" type="boolean" truevalue="--enable_rev_strand_match" falsevalue="" checked="false" label="enable_rev_strand_match"
+     help="Enable reverse strand matching for uclust otu picking, will double the amount of memory used. [default: False]"/>
+    <param name="optimal_uclust" type="boolean" truevalue="--optimal_uclust" falsevalue="" checked="false" label="optimal_uclust"
+     help="Pass the --optimal flag to uclust for uclust otu picking. [default: False]"/>
+    <param name="exact_uclust" type="boolean" truevalue="--exact_uclust" falsevalue="" checked="false" label="exact_uclust"
+     help="Pass the --exact flag to uclust for uclust otu picking. [default: False]"/>
+    <param name="user_sort" type="boolean" truevalue="--user_sort" falsevalue="" checked="false" label="user_sort"
+     help="Pass the --user_sort flag to uclust for uclust otu picking. [default: False]"/>
+    <param name="max_accepts" type="integer" value="20" label="max_accepts"
+     help="max_accepts value to uclust and uclust_ref [default: 20]"/>
+    <param name="max_rejects" type="integer" value="500" label="max_rejects"
+     help="max_rejects value to uclust and uclust_ref [default: 500]"/>
+
+    <param name="stepwords" type="integer" value="20" label="stepwords"
+     help="stepwords value to uclust and uclust_ref [default: 20]"/>
+    <param name="word_length" type="integer" value="12" label="word_length"
+     help="w value to uclust and uclust_ref [default: 12]"/>
+
+    <param name="uclust_otu_id_prefix" type="text"  label="uclust_otu_id_prefix"
+     help="OTU identifier prefix (string) for the de novo uclust OTU picker [default: %default, OTU ids are ascending integers]"/>
+    <param name="uclust_stable_sort" type="boolean" truevalue="--uclust_stable_sort" falsevalue="" checked="false" label="uclust_stable_sort"
+     help="pass --stable_sort to uclust (uclust versions uclustq1.2.15 and later only) [default: False]"/>
+    <param name="save_uc_files" type="boolean" truevalue="" falsevalue="--save_uc_files" checked="false" label="save_uc_files"
+     help="Enable preservation of intermediate uclust (.uc) files that are used to generate clusters via uclust. [default: True]"/>
+  </when> <!-- uclust -->
+  <when value="prefix_suffix">
+    <param name="prefix_length" type="integer" value="50" label="prefix_length"
+     help="Prefix length when using the prefix_suffix otu picker; WARNING: CURRENTLY DIFFERENT FROM prefix_prefilter_length (-n)! [default: 50]"/>
+    <param name="suffix_length" type="integer" value="50" label="suffix_length"
+     help="Suffix length when using the prefix_suffix otu picker [default: 50]"/>
+
+  </when> <!-- prefix_suffix -->
+  <when value="blast">
+    <param name="refseqs_fp" type="data" format="fasta" label="refseqs_fp" optional="true"
+     help="Reference sequences to search against"/>
+    <param name="blast_db" type="text"  label="blast_db"
+     help="Pre-existing database to blast against when using -m blast [default: ('NO', 'DEFAULT')]"/>
+    <param name="min_aligned_percent" type="float" value="0.5" label="min_aligned_percent"
+     help="Minimum percent of query sequence that can be aligned to consider a hit  (BLAST OTU picker only) [default: 0.5]"/>
+    <param name="max_e_value" type="float" value="1e-10" label="max_e_value"
+     help="Max E-value when clustering with BLAST [default: 1e-10]"/>
+  </when> <!-- blast -->
+  <when value="cdhit">
+    <param name="max_cdhit_memory" type="integer" value="400" label="max_cdhit_memory"
+     help="Maximum available memory to cd-hit-est (via the program's -M option) for cdhit OTU picking method (units of Mbyte) [default: 400]"/>
+    <param name="similarity" type="float" value="0.97" label="similarity"
+     help="Sequence similarity threshold (for cdhit, uclust, or uclust_ref) [default: 0.97]"/>
+    <param name="prefix_prefilter_length" type="integer" value="-1" label="prefix_prefilter_length"
+     help="Prefilter data so seqs with identical first prefix_prefilter_length are automatically grouped into a single OTU.  This is useful for large sequence collections where OTU picking doesn't scale well [default: %default; 100 is a good value]"/>
+    <param name="trie_prefilter" type="boolean" truevalue="--trie_prefilter" falsevalue="" checked="false" label="trie_prefilter"
+     help="prefilter data so seqs which are identical prefixes of a longer seq are automatically grouped into a single OTU; useful for large sequence collections where OTU picking doesn't scale well [default: False]"/>
+  </when> <!-- cdhit -->
+  </conditional> <!-- pick -->
+ </inputs>
+ <outputs>
+   <data format="txt" name="log" label="${tool.name} on ${on_string}: log" />
+   <data format="qiimeotu" name="otus" label="${tool.name} on ${on_string}: otus" />
+   <data format="txt" name="failures" label="${tool.name} on ${on_string}: failures.txt" >
+     <filter>(pick['otu_picking_method'] == 'uclust' and pick['refseqs_fp'])</filter>
+   </data>
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pick_otus_through_otu_table.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,203 @@
+<tool id="pick_otus_through_otu_table" name="pick_otus_through_otu_table" version="1.2.0">
+ <description>A workflow script for picking OTUs through building OTU tables</description>
+ <requirements>
+  <requirement type="binary">pick_otus_through_otu_table.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_outputdir='$log.extra_files_path'
+  --galaxy_datasets='^log_\S+\.txt$:'$log,'^\S+_otus.txt$:'$seqs_otus,'^\S+_rep_set.fasta$:'$seqs_rep_set,'^\S+_rep_set_tax_assignments.txt$:'$seqs_rep_set_tax_assignments,'^\S+_otu_table.txt$:'$seqs_otu_table,'^\S+_rep_set_aligned.fasta$:'$seqs_rep_set_aligned,'^\S+_rep_set_aligned_pfiltered.fasta$:'$seqs_rep_set_aligned_pfiltered,'^\S+_rep_set.tre$:'$seqs_rep_set_tre
+  pick_otus_through_otu_table.py
+  --input_fp=$input_fp
+  #if $parameter.source == 'hist':
+   --parameter_fp=$parameter.parameter_fp
+  #else:
+   --parameter_fp=$parameter_generated
+  #end if
+  #if $denoise.choice == 'yes':
+   --sff_fp=$denoise.sff_fp
+   --mapping_fp=$denoise.mapping_fp
+  #end if
+  --output_dir='$log.extra_files_path'
+  --force
+  $parallel
+ </command>
+ <inputs>
+  <param name="input_fp" type="data" format="fasta" label="input_fp"
+   help="the input fasta file [REQUIRED]"/>
+  <conditional name="parameter">
+   <param name="source" type="select" label="Grouping Design from" help="">
+    <option value="hist">Your History</option>
+    <option value="build">Build a grouping design</option>
+   </param>
+   <when value="hist">
+    <param name="parameter_fp" type="data" format="qiimeparams" label="parameter_fp"
+     help="path to the parameter file [REQUIRED]"/>
+   </when> <!-- hist -->
+   <when value="build">
+   </when> <!-- build -->
+  </conditional> <!-- parameter -->
+  <conditional name="denoise">
+   <param name="choice" type="select" label="Denoise (requires sff flowgram and a mapping faile)" help="">
+    <option value="no">No</option>
+    <option value="yes">Yes</option>
+   </param>
+   <when value="yes">
+    <param name="sff_fp" type="data" format="ssf" label="sff_fp"
+     help="the sff flowgram file [REQUIRED for denoising]"/>
+    <param name="mapping_fp" type="data" format="qiimemapping" label="mapping_fp"
+     help="the mapping filepath [REQUIRED for denoising]"/>
+   </when> <!-- hist -->
+   <when value="no"/>
+  </conditional> <!-- denoise -->
+  <param name="parallel" type="boolean" truevalue="--parallel" falsevalue="" checked="false" label="parallel"
+   help="Run in parallel where available [default: False]"/>
+ </inputs>
+  <!-- Construct a parameter file
+  -->
+ <configfiles>
+  <configfile name="parameter_generated">
+##OTU picker parameters
+pick_otus:otu_picking_method	uclust
+pick_otus:clustering_algorithm	furthest
+pick_otus:max_cdhit_memory	400
+pick_otus:refseqs_fp
+pick_otus:blast_db
+pick_otus:similarity	0.97
+pick_otus:max_e_value	1e-10
+pick_otus:prefix_prefilter_length
+pick_otus:trie_prefilter
+pick_otus:prefix_length
+pick_otus:suffix_length
+pick_otus:optimal_uclust
+pick_otus:exact_uclust
+pick_otus:user_sort
+pick_otus:suppress_presort_by_abundance_uclust
+pick_otus:suppress_new_clusters
+pick_otus:suppress_uclust_stable_sort
+pick_otus:max_accepts
+pick_otus:max_rejects
+pick_otus:word_length
+pick_otus:stepwords
+##Representative set picker parameters
+pick_rep_set:rep_set_picking_method	first
+pick_rep_set:sort_by	otu
+##Multiple sequence alignment parameters
+align_seqs:template_fp
+align_seqs:alignment_method	pynast
+align_seqs:pairwise_alignment_method	uclust
+align_seqs:blast_db
+align_seqs:min_length	150
+align_seqs:min_percent_id	75.0
+##Alignment filtering (prior to tree-building) parameters
+filter_alignment:lane_mask_fp
+filter_alignment:allowed_gap_frac	0.999999
+filter_alignment:remove_outliers	False
+filter_alignment:threshold	3.0
+##Taxonomy assignment parameters
+assign_taxonomy:id_to_taxonomy_fp
+assign_taxonomy:reference_seqs_fp
+assign_taxonomy:assignment_method	rdp
+assign_taxonomy:blast_db
+assign_taxonomy:confidence	0.8
+#assign_taxonomy:e_value	0.001
+##Phylogenetic tree building parameters
+make_phylogeny:tree_method	fasttree
+make_phylogeny:root_method	tree_method_default
+##align_seqs:template_fp
+##filter_alignment:lane_mask_fp	
+  </configfile>
+ </configfiles>
+ <outputs>
+ <!--
+This script will produce a set of cluster centroids (as a FASTA file) 
+and a cluster mapping file (from denoise.py if sff.txt and mapping file were provided), 
+an OTU mapping file (pick_otus.py), 
+a representative set of sequences (FASTA file from pick_rep_set.py), 
+a sequence alignment file (FASTA file from align_seqs.py), 
+taxonomy assignment file (from assign_taxonomy.py), 
+a filtered sequence alignment (from filter_alignment.py), 
+a phylogenetic tree (Newick file from make_phylogeny.py) and an OTU table (from make_otu_table.py).
+
+wf_da2/log_20110305084135.txt
+wf_da2/uclust_picked_otus/seqs_otus.txt
+wf_da/uclust_picked_otus/rep_set/seqs_rep_set.fasta
+wf_da/uclust_picked_otus/rep_set/rdp_assigned_taxonomy/seqs_rep_set_tax_assignments.txt
+wf_da/uclust_picked_otus/rep_set/rdp_assigned_taxonomy/otu_table//seqs_otu_table.txt
+wf_da/uclust_picked_otus/rep_set/pynast_aligned_seqs/seqs_rep_set_aligned.fasta
+wf_da/uclust_picked_otus/rep_set/pynast_aligned_seqs/seqs_rep_set_aligned_pfiltered.fasta
+wf_da/uclust_picked_otus/rep_set/pynast_aligned_seqs/fasttree_phylogeny/seqs_rep_set.tre
+
+
+wf_da2/log_20110305084135.txt
+wf_da2/uclust_picked_otus/rep_set/pynast_aligned_seqs/fasttree_phylogeny/seqs_rep_set.tre
+wf_da2/uclust_picked_otus/rep_set/pynast_aligned_seqs/fasttree_phylogeny/seqs_rep_set_phylogeny.log
+wf_da2/uclust_picked_otus/rep_set/pynast_aligned_seqs/seqs_rep_set_aligned.fasta
+wf_da2/uclust_picked_otus/rep_set/pynast_aligned_seqs/seqs_rep_set_aligned_pfiltered.fasta
+wf_da2/uclust_picked_otus/rep_set/pynast_aligned_seqs/seqs_rep_set_failures.fasta
+wf_da2/uclust_picked_otus/rep_set/pynast_aligned_seqs/seqs_rep_set_log.txt
+wf_da2/uclust_picked_otus/rep_set/rdp_assigned_taxonomy/otu_table/seqs_otu_table.txt
+wf_da2/uclust_picked_otus/rep_set/rdp_assigned_taxonomy/seqs_rep_set_tax_assignments.log
+wf_da2/uclust_picked_otus/rep_set/rdp_assigned_taxonomy/seqs_rep_set_tax_assignments.txt
+wf_da2/uclust_picked_otus/rep_set/seqs_rep_set.fasta
+wf_da2/uclust_picked_otus/rep_set/seqs_rep_set.log
+wf_da2/uclust_picked_otus/seqs_clusters.uc
+wf_da2/uclust_picked_otus/seqs_otus.log
+wf_da2/uclust_picked_otus/seqs_otus.txt
+
+wf_da2/log_20110305084135.txt
+wf_da2/uclust_picked_otus/seqs_otus.txt
+wf_da/uclust_picked_otus/rep_set/seqs_rep_set.fasta
+wf_da/uclust_picked_otus/rep_set/rdp_assigned_taxonomy/seqs_rep_set_tax_assignments.txt
+wf_da/uclust_picked_otus/rep_set/rdp_assigned_taxonomy/otu_table/seqs_otu_table.txt
+wf_da/uclust_picked_otus/rep_set/pynast_aligned_seqs/seqs_rep_set_aligned.fasta
+wf_da/uclust_picked_otus/rep_set/pynast_aligned_seqs/seqs_rep_set_aligned_pfiltered.fasta
+wf_da/uclust_picked_otus/rep_set/pynast_aligned_seqs/fasttree_phylogeny/seqs_rep_set.tre
+-->
+   <data format="txt" name="log" label="${tool.name} on ${on_string}: log" />
+   <data format="qiimeotu" name="seqs_otus" label="${tool.name} on ${on_string}: seqs_otus" />
+   <data format="fasta" name="seqs_rep_set" label="${tool.name} on ${on_string}: seqs_rep_set.fasta" />
+   <data format="seq.taxonomy" name="seqs_rep_set_tax_assignments" label="${tool.name} on ${on_string}: seqs_rep_set_tax_assignments" />
+   <data format="qiimeotutable" name="seqs_otu_table" label="${tool.name} on ${on_string}: seqs_otu_table" />
+   <data format="align" name="seqs_rep_set_aligned" label="${tool.name} on ${on_string}: seqs_rep_set_aligned.fasta" />
+   <data format="align" name="seqs_rep_set_aligned_pfiltered" label="${tool.name} on ${on_string}: seqs_rep_set_aligned_pfiltered.fasta" />
+   <data format="tre" name="seqs_rep_set_tre" label="${tool.name} on ${on_string}: seqs_rep_set.tre" />
+
+  
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+
+        The steps performed by this function are:
+          0) Optionally denoise the sequences (if sff_input_fp=True);
+          1) Pick OTUs;
+          2) Pick a representative set;
+          3) Align the representative set; 
+          4) Assign taxonomy;
+          5) Filter the alignment prior to tree building - remove positions
+             which are all gaps, and specified as 0 in the lanemask
+          6) Build a phylogenetic tree;
+          7) Build an OTU table.
+
+
+pick_otus_through_otu_table.py -i split_library_output/seqs.fna -p custom_parameters.txt -o wf_da --print_only
+
+python /usr/local/bin/pick_otus.py -i split_library_output/seqs.fna -o wf_da/uclust_picked_otus --max_e_value 1e-10 --clustering_algorithm furthest --similarity 0.97 --otu_picking_method uclust --max_cdhit_memory 400
+
+python /usr/local/bin/pick_rep_set.py -i wf_da/uclust_picked_otus/seqs_otus.txt -f split_library_output/seqs.fna -l wf_da/uclust_picked_otus/rep_set//seqs_rep_set.log -o wf_da/uclust_picked_otus/rep_set//seqs_rep_set.fasta --rep_set_picking_method first --sort_by otu
+
+python /usr/local/bin/assign_taxonomy.py -o wf_da/uclust_picked_otus/rep_set//rdp_assigned_taxonomy -i wf_da/uclust_picked_otus/rep_set//seqs_rep_set.fasta --confidence 0.8 --assignment_method rdp
+
+python /usr/local/bin/make_otu_table.py -i wf_da/uclust_picked_otus/seqs_otus.txt -t wf_da/uclust_picked_otus/rep_set//rdp_assigned_taxonomy/seqs_rep_set_tax_assignments.txt -o wf_da/uclust_picked_otus/rep_set//rdp_assigned_taxonomy/otu_table//seqs_otu_table.txt 
+
+python /usr/local/bin/align_seqs.py -i wf_da/uclust_picked_otus/rep_set//seqs_rep_set.fasta -o wf_da/uclust_picked_otus/rep_set//pynast_aligned_seqs --alignment_method pynast --pairwise_alignment_method uclust --min_percent_id 75.0 --min_length 150
+
+python /usr/local/bin/filter_alignment.py -o wf_da/uclust_picked_otus/rep_set//pynast_aligned_seqs -i wf_da/uclust_picked_otus/rep_set//pynast_aligned_seqs/seqs_rep_set_aligned.fasta --allowed_gap_frac 0.999999 --threshold 3.0
+
+python /usr/local/bin/make_phylogeny.py -i wf_da/uclust_picked_otus/rep_set//pynast_aligned_seqs/seqs_rep_set_aligned_pfiltered.fasta -o wf_da/uclust_picked_otus/rep_set//pynast_aligned_seqs/fasttree_phylogeny/seqs_rep_set.tre -l wf_da/uclust_picked_otus/rep_set//pynast_aligned_seqs/fasttree_phylogeny/seqs_rep_set_phylogeny.log --root_method tree_method_default --tree_method fasttree
+
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pick_reference_otus_through_otu_table.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,94 @@
+<tool id="pick_reference_otus_through_otu_table" name="pick_reference_otus_through_otu_table" version="1.2.1">
+ <description>Reference OTU picking/Shotgun UniFrac workflow.</description>
+ <requirements>
+  <requirement type="binary">pick_reference_otus_through_otu_table.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  pick_reference_otus_through_otu_table.py
+  --input_fp=$input_fp
+  --reference_fp=$reference_fp
+  --output_dir=$__new_file_path__
+  #if $parameter.source == 'hist':
+   --parameter_fp=$parameter_fp
+  #else:
+   --parameter_fp=$parameter_generated
+  #end if
+  --taxonomy_fp=$taxonomy_fp
+  $force
+  $print_only
+  $parallel
+ </command>
+ <inputs>
+  <param name="input_fp" type="data" format="txt" label="input_fp"
+   help="the input sequences [REQUIRED]"/>
+  <param name="reference_fp" type="data" format="txt" label="reference_fp"
+   help="the reference sequences [REQUIRED]"/>
+
+  <conditional name="parameter">
+   <param name="source" type="select" label="Parameters from" help="">
+    <option value="hist">Your History</option>
+    <option value="build">Build a Parameter file</option>
+   </param>
+   <when value="hist">
+    <param name="parameter_fp" type="data" format="qiimeparams" label="parameter_fp"
+     help="path to the parameter file [REQUIRED]"/>
+   </when> <!-- hist -->
+   <when value="build">
+   <!--
+        params['alpha_diversity']['metrics'].split(',')
+        params['multiple_rarefactions']
+        params['parallel'])
+        params['alpha_diversity'])
+        params['collate_alpha']
+        params['make_rarefaction_plots']
+    multiple_rarefactions.py
+     min seqs/sample
+     max seqs/sample
+     step
+     depth    sequences per sample to subsample
+     num-reps
+     lineages_included 
+     keep_empty_otus
+    alpha_diversity.py
+    collate_alpha.py
+    make_rarefaction_plots.py
+   -->
+   </when> <!-- build -->
+  </conditional> <!-- parameter -->
+
+  <param name="taxonomy_fp" type="data" format="tabular" label="taxonomy_fp"
+   help="the taxonomy map [default: ('NO', 'DEFAULT')]"/>
+  <param name="force" type="boolean" truevalue="--force" falsevalue="" checked="false" label="force"
+   help="Force overwrite of existing output directory (note: existing files in output_dir will not be removed) [default: ('NO', 'DEFAULT')]"/>
+  <param name="print_only" type="boolean" truevalue="--print_only" falsevalue="" checked="false" label="print_only"
+   help="Print the commands but don't call them -- useful for debugging [default: False]"/>
+  <param name="parallel" type="boolean" truevalue="--parallel" falsevalue="" checked="false" label="parallel"
+   help="Run in parallel where available [default: False]"/>
+ </inputs>
+ <configfiles>
+  <configfile name="parameter_generated">
+alpha_diversity:metrics chao1,observed_species,PD_whole_tree
+multiple_rarefactions_even_depth:num-reps       20
+parallel:jobs_to_start  2
+parallel:retain_temp_files      False
+parallel:seconds_to_sleep       60
+collate_alpha:example_path
+make_rarefaction_plots:imagetype        png
+make_rarefaction_plots:resolution       75
+make_rarefaction_plots:background_color white
+make_rarefaction_plots:prefs_path
+  </configfile>
+ </configfiles>
+
+ <outputs>
+  
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pick_rep_set.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,47 @@
+<tool id="pick_rep_set" name="pick_rep_set" version="1.2.1">
+ <description>Pick representative set of sequences</description>
+ <requirements>
+  <requirement type="binary">pick_rep_set.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  pick_rep_set.py
+  --input_file=$input_file
+  --fasta_file=$fasta_file
+  --rep_set_picking_method=$rep_set_picking_method
+  --sort_by=$sort_by
+  --reference_seqs_fp=$reference_seqs_fp
+  --log_fp=$log_fp
+  --result_fp=$result_fp
+ </command>
+ <inputs>
+  <param name="input_file" type="data" format="qiimeotu" label="input_file"
+   help="Path to input otu mapping file [REQUIRED]"/>
+  <param name="reference_seqs_fp" type="data" format="fasta" optional="true" label="reference_seqs_fp"
+   help="collection of preferred representative sequences [default: ('NO', 'DEFAULT')]"/>
+  <param name="fasta_file" type="data" format="fasta" optional="true" label="fasta_file"
+   help="Path to input fasta file [REQUIRED if not picking against a reference set; default: None]"/>
+  <param name="rep_set_picking_method" type="select" label="rep_set_picking_method"
+   help="Method for picking representative sets.  Valid choices are random, longest, most_abundant, first[default: first]">
+    <option value="random">random</option>
+    <option value="longest">longest</option>
+    <option value="most_abundant">most_abundant</option>
+    <option value="first" selected="true">first</option>
+  </param>
+  <param name="sort_by" type="select" value="otu" label="sort_by" >
+    <option value="otu" selected="true">otu</option>
+    <option value="seq_id">seq_id</option>
+  </param>
+
+ </inputs>
+ <outputs>
+   <data format="txt" name="log_fp" label="${tool.name} on ${on_string}: log" />
+   <data format="fasta" name="result_fp" label="${tool.name} on ${on_string}: rep_set.fasta" />
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plot_rank_abundance_graph.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,44 @@
+<tool id="plot_rank_abundance_graph" name="plot_rank_abundance_graph" version="1.2.0">
+ <description>plot rank-abundance curve</description>
+ <requirements>
+  <requirement type="binary">plot_rank_abundance_graph.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  plot_rank_abundance_graph.py
+  --otu_table_fp=$otu_table_fp
+  --sample_name=$sample_name
+  --output_dir=$__new_file_path__
+  $absolute_counts
+  $no_legend
+  $x_linear_scale
+  $y_linear_scale
+  --file_type=$file_type
+ </command>
+ <inputs>
+  <param name="otu_table_fp" type="data" format="txt" label="otu_table_fp"
+   help="path to the input OTU table (i.e., the output from make_otu_table.py) [REQUIRED]"/>
+  <param name="sample_name" type="text"  label="sample_name"
+   help="name of the sample to plot. Use '*' to plot all. [REQUIRED]"/>
+  <param name="absolute_counts" type="boolean" truevalue="--absolute_counts" falsevalue="" checked="false" label="absolute_counts"
+   help="plot absolute abundance values instead of relative [default: False]"/>
+  <param name="no_legend" type="boolean" truevalue="--no-legend" falsevalue="" checked="false" label="no-legend"
+   help="do not draw a legend [default: False]"/>
+  <param name="x_linear_scale" type="boolean" truevalue="--x_linear_scale" falsevalue="" checked="false" label="x_linear_scale"
+   help="draw x axis in linear scale [default: False]"/>
+  <param name="y_linear_scale" type="boolean" truevalue="--y_linear_scale" falsevalue="" checked="false" label="y_linear_scale"
+   help="draw y axis in linear scale [default: False]"/>
+  <param name="file_type" type="text" value="pdf" label="file_type"
+   help="save plot using this image type. Choice of pdf, svg, png, eps [default: pdf]"/>
+ </inputs>
+ <outputs>
+  
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plot_taxa_summary.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,69 @@
+<tool id="plot_taxa_summary" name="plot_taxa_summary" version="1.2.1">
+ <description>Make taxaonomy summary charts based on taxonomy assignment</description>
+ <requirements>
+  <requirement type="binary">plot_taxa_summary.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  plot_taxa_summary.py
+  --input_files=$input_files
+  --labels=$labels
+  --num=$num
+  --dir-prefix=$dir_prefix
+  --colorby=$colorby
+  --prefs_path=$prefs_path
+  --background_color=$background_color
+  --dpi=$dpi
+  --x_width=$x_width
+  --y_height=$y_height
+  --bar_width=$bar_width
+  --type_of_file=$type_of_file
+  --chart_type=$chart_type
+  --resize_nth_label=$resize_nth_label
+ </command>
+ <inputs>
+  <param name="input_files" type="data" format="qiimetaxsummary"  label="input_files"
+   help="list of files with sample counts by taxonomy [REQUIRED]"/>
+  <param name="labels" type="text"  label="labels"
+   help="list of labels (i.e. Phylum, Class) [REQUIRED]"/>
+  <param name="num" type="text" value="20" label="num"
+   help="Maximum number of individual categories in each pie chart. All additional categories are grouped into an 'other' category. NOTE: this is only used for the pie charts. [default: 20]"/>
+  <param name="dir_prefix" type="text"  label="dir-prefix"
+   help="output folder"/>
+  <param name="colorby" type="text"  label="colorby"
+   help="This is the samples to make charts for in the counts files from summarize_taxa.py. The sample name must match the name of a sample id in the header of the counts file exactly and multiple categories can be list by comma separating them without spaces.  [default: %default]"/>
+  <param name="prefs_path" type="text"  label="prefs_path"
+   help="This is the user-generated preferences file. NOTE: This is a file with a dictionary containing preferences for the analysis. The label taxonomy_coloring is used for the coloring, see example prefs file preferences_file. [default: ('NO', 'DEFAULT')]"/>
+  <param name="background_color" type="text"  label="background_color"
+   help="This is the background color to use in the plots. [default: ('NO', 'DEFAULT')]"/>
+  <param name="dpi" type="text" value="80" label="dpi"
+   help="This is the dpi to use in the plots. [default: 80]"/>
+  <param name="x_width" type="text" value="12" label="x_width"
+   help="This is the width to use in the plots. [default: 12]"/>
+  <param name="y_height" type="text" value="6" label="y_height"
+   help="This is the height to use in the plots. [default: 6]"/>
+  <param name="bar_width" type="text" value="0.75" label="bar_width"
+   help="This the width of the bars in the bar graph and should be a number between 0 and 1. NOTE: this is only used for bar charts. [default: 0.75]"/>
+  <param name="type_of_file" type="select" label="type_of_file"
+   help="This is the filename suffix to use for each high-res plot. (i.e. pdf,svg,png) [default: pdf]">
+    <option value="pdf" selected="true">pdf</option>
+    <option value="svg">svg</option>
+    <option value="png">png</option>
+  </param>
+  <param name="chart_type" type="text" value="area,bar" label="chart_type"
+   help="type of chart to plot (i.e. pie, bar or area). The user has the ability to plot multiple types, by using a comma-separated list (e.g. area,pie)  [default: area,bar]"/>
+  <param name="resize_nth_label" type="text" value="0" label="resize_nth_label"
+   help="this is for large area and bar charts where the font on the x-axis is small. This allows you to set every nth label to be larger on the x-axis.This requires an integer value greater than 0.[default: 0]"/>
+ </inputs>
+ <outputs>
+  <data name="taxonomy_area_summary_chart" format="html" label="${tool.name} on ${on_string}: taxonomy_area_summary_chart"/>
+  <data name="taxonomy_bar_summary_chart" format="html" label="${tool.name} on ${on_string}: taxonomy_bar_summary_chart"/>
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/poller.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,43 @@
+<tool id="poller" name="poller" version="1.2.0">
+ <description>Poller for parallel QIIME scripts.</description>
+ <requirements>
+  <requirement type="binary">poller.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  poller.py
+  --check_run_complete_file=$check_run_complete_file
+  --check_run_complete_f=$check_run_complete_f
+  --process_run_results_f=$process_run_results_f
+  --process_run_results_file=$process_run_results_file
+  --clean_up_f=$clean_up_f
+  --clean_up_file=$clean_up_file
+  --time_to_sleep=$time_to_sleep
+ </command>
+ <inputs>
+  <param name="check_run_complete_file" type="data" format="txt" label="check_run_complete_file"
+   help="path to file containing a list of files that must exist to declare a run complete [REQUIRED]"/>
+  <param name="check_run_complete_f" type="text" value="qiime.parallel.poller.basic_check_run_complete_f" label="check_run_complete_f"
+   help="function which returns True when run is completed [default: qiime.parallel.poller.basic_check_run_complete_f]"/>
+  <param name="process_run_results_f" type="text" value="qiime.parallel.poller.basic_process_run_results_f" label="process_run_results_f"
+   help="function to be called when runs complete [default: qiime.parallel.poller.basic_process_run_results_f]"/>
+  <param name="process_run_results_file" type="data" format="tabular" label="process_run_results_file"
+   help="path to file containing a map of tmp filepaths which should be written to final output filepaths [default: ('NO', 'DEFAULT')]"/>
+  <param name="clean_up_f" type="text" value="qiime.parallel.poller.basic_clean_up_f" label="clean_up_f"
+   help="function called after processing result [default: qiime.parallel.poller.basic_clean_up_f]"/>
+  <param name="clean_up_file" type="data" format="txt" label="clean_up_file"
+   help="List of files and directories to remove after run [default: ('NO', 'DEFAULT')]"/>
+  <param name="time_to_sleep" type="integer" value="60" label="time_to_sleep"
+   help="time to wait between calls to status_callback_f (in seconds) [default: 60]"/>
+ </inputs>
+ <outputs>
+  
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/poller_example.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,34 @@
+<tool id="poller_example" name="poller_example" version="1.2.0">
+ <description>Create python file</description>
+ <requirements>
+  <requirement type="binary">poller_example.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  poller_example.py
+  --polled_dir=$polled_dir
+  --poller_fp=$poller_fp
+  --python_exe_fp=$python_exe_fp
+  $suppress_custom_functions
+ </command>
+ <inputs>
+  <param name="polled_dir" type="text"  label="polled_dir"
+   help="path to directory to poll [REQUIRED]"/>
+  <param name="poller_fp" type="data" format="txt" label="poller_fp"
+   help="full path to qiime/parallel/poller.py [default: /usr/local/lib/python2.6/site-packages/scripts/poller.py]"/>
+  <param name="python_exe_fp" type="data" format="txt" label="python_exe_fp"
+   help="full path to python executable [default: python]"/>
+  <param name="suppress_custom_functions" type="boolean" truevalue="--suppress_custom_functions" falsevalue="" checked="false" label="suppress_custom_functions"
+   help="use the default functions for checking run completion, processing results, and cleaning up (these are quiet) [default: False]"/>
+ </inputs>
+ <outputs>
+  
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pool_by_metadata.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,37 @@
+<tool id="pool_by_metadata" name="pool_by_metadata" version="1.2.0">
+ <description>pool samples in OTU table and mapping file based on sample metadata from mapping file</description>
+ <requirements>
+  <requirement type="binary">pool_by_metadata.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  pool_by_metadata.py
+  --otu_table_fp=$otu_table_fp
+  --map=$map
+  --states=$states
+  --otu_outfile=$otu_outfile
+  --map_outfile=$map_outfile
+  --pooled_sample_name=$pooled_sample_name
+ </command>
+ <inputs>
+  <param name="otu_table_fp" type="data" format="txt" label="otu_table_fp"
+   help="path to the input OTU table (i.e., the output from make_otu_table.py) [REQUIRED]"/>
+  <param name="map" type="data" format="tabular" label="map"
+   help="path to the map file [REQUIRED]"/>
+  <param name="states" type="text"  label="states"
+   help="string containing valid states, e.g. 'STUDY_NAME:DOG' [REQUIRED]"/>
+  <param name="pooled_sample_name" type="text" value="pooledSample" label="pooled_sample_name"
+   help="new sample name used in new mapping file and new otu table"/>
+ </inputs>
+ <outputs>
+  <data format="txt" name="otu_outfile"/>
+  <data format="txt" name="map_outfile"/>
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/principal_coordinates.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,25 @@
+<tool id="principal_coordinates" name="principal_coordinates" version="1.2.0">
+ <description>Principal Coordinates Analysis (PCoA)</description>
+ <requirements>
+  <requirement type="binary">principal_coordinates.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  principal_coordinates.py
+  --input_path=$input_path
+  --output_path=$output_path
+ </command>
+ <inputs>
+  <param name="input_path" type="data" format="qiimedistmat"  label="input_path"
+   help="path to the input distance matrix file(s) (i.e., the output from beta_diversity.py). Is a directory for batch processing and a filename for a single file operation. [REQUIRED]"/>
+ </inputs>
+ <outputs>
+  <data format="qiimepca" name="output_path" label="${tool.name} on ${on_string}: coordinates"/>
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/print_qiime_config.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,23 @@
+<tool id="print_qiime_config" name="print_qiime_config" version="1.2.0">
+ <description>Print out the qiime config settings.</description>
+ <requirements>
+  <requirement type="binary">print_qiime_config.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  print_qiime_config.py
+  $test
+ </command>
+ <inputs>
+  <param name="test" type="boolean" truevalue="--test" falsevalue="" checked="false" label="test"
+   help="Test the qiime config for sanity [default: %default]"/>
+ </inputs>
+ <outputs>
+  
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/process_sff.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,35 @@
+<tool id="process_sff" name="process_sff" version="1.2.0">
+ <description>Convert sff to FASTA and QUAL files</description>
+ <requirements>
+  <requirement type="binary">process_sff.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  process_sff.py
+  --input_dir=$input_dir
+  $make_flowgram
+  $convert_to_FLX
+  $use_sfftools
+  --output_dir=$__new_file_path__
+ </command>
+ <inputs>
+  <param name="input_dir" type="text"  label="input_dir"
+   help="Input directory of sff files [REQUIRED]"/>
+  <param name="make_flowgram" type="boolean" truevalue="--make_flowgram" falsevalue="" checked="false" label="make_flowgram"
+   help="generate a flowgram file. [default: False]"/>
+  <param name="convert_to_FLX" type="boolean" truevalue="--convert_to_FLX" falsevalue="" checked="false" label="convert_to_FLX"
+   help="convert Titanium reads to FLX length. [default: False]"/>
+  <param name="use_sfftools" type="boolean" truevalue="--use_sfftools" falsevalue="" checked="false" label="use_sfftools"
+   help="use the external programs sfffile and sffinfo for processing, instead of the equivalent python implementation"/>
+ </inputs>
+ <outputs>
+  
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qiime_wrapper.py	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,210 @@
+#!/usr/bin/env python
+import logging, os, string, sys, tempfile, glob, shutil, types, urllib, optparse, re
+import shlex, subprocess
+
+"""
+sys.argv
+this  --galaxy_datasets=   --quime_script 
+
+alpha_rarefaction 
+  output html 
+    wf_arare/alpha_rarefaction_plots/rarefaction_plots.html
+    wf_arare/alpha_rarefaction_plots/html_plots/
+    wf_arare/alpha_div
+    wf_arare/alpha_div/alpha_rarefaction_101_0.txt
+
+    --galaxy_summary_html=$output_html
+    --galaxy_summary_template=$output_template
+    --galaxy_summary_links='label:link,label:link'
+    --galaxy_outputdir=$output_html.extra_files_path
+    
+    
+"""
+
+def stop_err( msg ):
+    sys.stderr.write( "%s\n" % msg )
+    sys.exit()
+
+def __main__():
+    debug = False
+    tmp_dir = None
+    inputdir = None
+    outputdir = None
+    dataset_patterns = None
+    datasetid = None
+    new_dataset_patterns = None
+    new_files_path = None
+    summary_html=None
+    summary_template=None
+    summary_links=None
+    ## check if there are files to generate
+    cmd_args = []
+    for arg in sys.argv[1:]:
+        if arg.startswith('--galaxy_'):
+            (opt,val) = arg.split('=') if arg.find('=') > 0 else (arg,None)
+            if opt == '--galaxy_tmpdir':
+                try:
+                    if not os.path.exists(val):
+                        os.makedirs(val)
+                    tmp_dir = val
+                except Exception, ex:
+                    stop_err(ex)
+            if opt == '--galaxy_outputdir':
+                try:
+                    if not os.path.exists(val):
+                        os.makedirs(val)
+                    outputdir = val
+                except Exception, ex:
+                    stop_err(ex)
+            if opt == '--galaxy_datasets':
+                dataset_patterns = val.split(',')
+            if opt == '--galaxy_datasetid':
+                datasetid = val
+            if opt == '--galaxy_new_datasets':
+                new_dataset_patterns = val.split(',')
+            if opt == '--galaxy_new_files_path':
+                new_dataset_patterns = val
+            if opt == '--galaxy_summary_html':
+                summary_html=val
+            if opt == '--galaxy_summary_template':
+                summary_template=val
+            if opt == '--galaxy_summary_links':
+                summary_links=val
+            if opt == '--galaxy_debug':
+                debug = True
+        else:
+            cmd_args.append(arg)
+    if debug: print >> sys.stdout, '\n : '.join(cmd_args) 
+    try:
+        cmdline = ' '.join(cmd_args)
+        if debug: print >> sys.stdout, cmdline 
+        if tmp_dir == None or not os.path.isdir(tmp_dir):
+            tmp_dir = tempfile.mkdtemp()
+        if outputdir == None or not os.path.isdir(outputdir):
+            outputdir = tmp_dir
+        tmp_stderr_name = tempfile.NamedTemporaryFile( dir=tmp_dir,suffix='.err' ).name
+        tmp_stderr = open( tmp_stderr_name, 'wb' )
+        tmp_stdout_name = tempfile.NamedTemporaryFile( dir=tmp_dir,suffix='.out' ).name
+        tmp_stdout = open( tmp_stdout_name, 'wb' )
+        proc = subprocess.Popen( args=cmdline, shell=True, cwd=tmp_dir, stderr=tmp_stderr.fileno(), stdout=tmp_stdout.fileno() )
+        returncode = proc.wait()
+        tmp_stderr.close()
+        # get stderr, allowing for case where it's very large
+        tmp_stderr = open( tmp_stderr_name, 'rb' )
+        stderr = ''
+        buffsize = 1048576
+        try:
+            while True:
+                stderr += tmp_stderr.read( buffsize )
+                if not stderr or len( stderr ) % buffsize != 0:
+                    break
+            if debug: print >> sys.stderr, stderr
+        except OverflowError:
+            pass
+        tmp_stderr.close()
+        if returncode != 0:
+            if debug: print >> sys.stderr, "returncode = %d" % returncode 
+            raise Exception, stderr
+        # collect results
+        if dataset_patterns != None:
+            for root, dirs, files in os.walk(outputdir):
+                for fname in files:
+                    fpath = os.path.join(root,fname)
+                    if dataset_patterns != None:
+                        for output in dataset_patterns:
+                            (pattern,path) = output.split(':')
+                            if debug: print >> sys.stdout, '%s -> %s' % (pattern,path)
+                            if path == None or path == 'None':
+                                continue
+                            if debug: print >> sys.stdout, 'outdir %s match: %s' % (fname,re.match(pattern,fname))
+                            if re.match(pattern,fname):
+                                found = True
+                                # flist.remove(fname)
+                                try:
+                                    shutil.copy2(fpath, path)
+                                except Exception, ex:
+                                    stop_err('%s' % ex)
+        # move result to outdir 
+        # Need to flatten the dir hierachy in order for galaxy to serve the href links
+        if summary_html != None:
+            """
+            for root, dirs, files in os.walk(outputdir):
+                if root != outputdir:
+                    for fname in files:
+                        fpath = os.path.join(root,fname)
+            """
+            ## move everything up one level
+            dlist = os.listdir(outputdir)
+            for dname in dlist:
+                dpath = os.path.join(outputdir,dname)
+                if os.path.isdir(dpath):
+                    flist = os.listdir(dpath)
+                    for fname in flist:
+                        fpath = os.path.join(dpath,fname)
+                        shutil.move(fpath,outputdir)
+            if summary_template != None:
+                shutil.copy(summary_template,summary_html)
+        """
+        flist = os.listdir(outputdir)
+        if debug: print >> sys.stdout, 'outputdir: %s' % outputdir
+        if debug: print >> sys.stdout, 'files: %s' % ','.join(flist)
+        if dataset_patterns != None:
+            for output in dataset_patterns:
+                (pattern,path) = output.split(':')
+                if debug: print >> sys.stdout, '%s -> %s' % (pattern,path)
+                if path == None or path == 'None':
+                    continue
+                for fname in flist:
+                    if debug: print >> sys.stdout, 'outdir %s match: %s' % (fname,re.match(pattern,fname))
+                    if re.match(pattern,fname):
+                        found = True
+                        flist.remove(fname)
+                        fpath = os.path.join(outputdir,fname)
+                        try:
+                            shutil.copy2(fpath, path)
+                        except Exception, ex:
+                            stop_err('%s' % ex)
+        """
+        # Handle the dynamically generated galaxy datasets
+        # http://bitbucket.org/galaxy/galaxy-central/wiki/ToolsMultipleOutput
+        # --new_datasets=   specifies files to copy to the new_file_path
+        # The list items are separated by commas
+        # Each item  conatins:   a regex pattern for matching filenames and  a galaxy datatype (separated by :)
+        # The regex match.groups()[0] is used as the id name of the dataset, and must result in  unique name for each output
+        if new_dataset_patterns != None and new_files_path != None and datasetid != None:
+            for output in new_dataset_patterns(','):
+                (pattern,ext) = output.split(':');
+                for fname in flist:
+                    m = re.match(pattern,fname)
+                    if m:
+                        fpath = os.path.join(outputdir,fname)
+                        if len(m.groups()) > 0:
+                            root = m.groups()[0]
+                        else:
+                            # remove  the ext from the name if it exists, galaxy will add back later
+                            # remove underscores since galaxy uses that as a field separator for dynamic datasets
+                            root = re.sub('\.?'+ext+'$','',fname).replace('_','').replace('.','')
+                        # filename pattern required by galaxy 
+                        fn = "%s_%s_%s_%s_%s" % ( 'primary', datasetid, root, 'visible', ext )
+                        if debug:  print >> sys.stdout, '> %s' % fpath
+                        if debug:  print >> sys.stdout, '< %s' % os.path.join(new_files_path,fn)
+                        try:
+                            os.link(fpath, os.path.join(new_files_path,fn))
+                        except:
+                            shutil.copy2(fpath, os.path.join(new_files_path,fn))
+
+    except Exception, e:
+        msg = str(e) + stderr
+        stop_err( 'Error running  ' + msg)
+    finally:
+        # Only remove temporary directories
+        # Enclose in try block, so we don't report error on stale nfs handles
+        
+        try:
+            if inputdir != None and os.path.exists(inputdir):
+                shutil.rmtree(inputdir)
+        except:
+            pass
+
+if __name__ == "__main__": __main__()
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/quality_scores_plot.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,30 @@
+<tool id="quality_scores_plot" name="quality_scores_plot" version="1.2.1">
+ <description>Generates histograms of sequence quality scores and number of nucleotides recorded at a particular index</description>
+ <requirements>
+  <requirement type="binary">quality_scores_plot.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  quality_scores_plot.py
+  --qual_fp=$qual_fp
+  --output_dir=$__new_file_path__
+  --score_min=$score_min
+  --verbose
+ </command>
+ <inputs>
+  <param name="qual_fp" type="data" format="qual" label="qual_fp"
+   help="Quality score file used to generate histogram data. [REQUIRED]"/>
+  <param name="score_min" type="text" value="25" label="score_min"
+   help="Minimum quality score to be considered acceptable.  Used to draw dotted line on histogram for easy visualization of poor quality scores. [default: 25]"/>
+ </inputs>
+ <outputs>
+  
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shared_phylotypes.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,32 @@
+<tool id="shared_phylotypes" name="shared_phylotypes" version="1.2.0">
+ <description>Compute shared OTUs between all pairs of samples</description>
+ <requirements>
+  <requirement type="binary">shared_phylotypes.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  shared_phylotypes.py
+  --otu_table_fp=$otu_table_fp
+  --output_fp=$output_fp
+  --reference_sample=$reference_sample
+  $force_overwrite
+ </command>
+ <inputs>
+  <param name="otu_table_fp" type="data" format="txt" label="otu_table_fp"
+   help="path to the input OTU table or a directory containing (only) OTU tables [REQUIRED]"/>
+  <param name="reference_sample" type="text"  label="reference_sample"
+   help="Name of reference sample to which all pairs of samples should be compared [default: %default]"/>
+  <param name="force_overwrite" type="boolean" truevalue="--force_overwrite" falsevalue="" checked="false" label="force_overwrite"
+   help="Overwrite output_fp if already exists [default: ('NO', 'DEFAULT')]"/>
+ </inputs>
+ <outputs>
+  <data format="txt" name="output_fp"/>
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/single_rarefaction.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,34 @@
+<tool id="single_rarefaction" name="single_rarefaction" version="1.2.0">
+ <description>Perform rarefaction on an otu table</description>
+ <requirements>
+  <requirement type="binary">single_rarefaction.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  single_rarefaction.py
+  --input_path=$input_path
+  --output_path=$output_path
+  --depth=$depth
+  $lineages_included
+  $keep_empty_otus
+ </command>
+ <inputs>
+  <param name="input_path" type="qiimeotutable"  label="input_path"
+   help="input otu table filepath [REQUIRED]"/>
+  <param name="depth" type="integer" value="-1" label="depth"
+   help="sequences per sample to subsample [REQUIRED]"/>
+  <param name="lineages_included" type="boolean" truevalue="--lineages_included" falsevalue="" checked="false" label="lineages_included"
+   help="output rarefied otu tables will include taxonomic (lineage) information for each otu, if present in input otu table [default: False]"/>
+  <param name="keep_empty_otus" type="boolean" truevalue="--keep_empty_otus" falsevalue="" checked="false" label="keep_empty_otus"
+   help="otus (rows) of all zeros are usually omitted from the output otu table, with -k they will not be removed from the output file [default: False]"/>
+ </inputs>
+ <outputs>
+  <data format_source="input_path" name="output_path" label="${tool.name} on ${on_string}: rarefaction"/>
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sort_denoiser_output.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,26 @@
+<tool id="sort_denoiser_output" name="sort_denoiser_output" version="1.2.0">
+ <description>Sort denoiser output by cluster size.</description>
+ <requirements>
+  <requirement type="binary">sort_denoiser_output.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  sort_denoiser_output.py
+  --input_fasta_fp=$input_fasta_fp
+  --output_file=$output_file
+ </command>
+ <inputs>
+  <param name="input_fasta_fp" type="data" format="fasta" label="input_fasta_fp"
+   help="path to the input fasta file [REQUIRED]"/>
+ </inputs>
+ <outputs>
+  <data format="txt" name="output_file"/>
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sort_otu_table.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,35 @@
+<tool id="sort_otu_table" name="sort_otu_table" version="1.2.1">
+ <description>Script for sorting the sample IDs in an OTU table based on a specified value in a mapping file.</description>
+ <requirements>
+  <requirement type="binary">sort_otu_table.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  sort_otu_table.py
+  --input_otu_table=$input_otu_table
+  --mapping_fp=$mapping_fp
+  --sort_field=$sort_field
+  --output_fp=$output_fp
+ </command>
+ <inputs>
+  <param name="input_otu_table" type="data" format="qiimeotu"  label="input_otu_table"
+   help="the input otu table [REQUIRED]"/>
+  <param name="mapping_fp" type="data" format="qiimemapping" label="mapping_fp"
+   help="the mapping file [REQUIRED]"/>
+  <param name="sort_field" type="select"  label="sort_field"
+   help="field to sort by [REQUIRED]">
+    <options>
+        <filter type="data_meta" ref="mapping_fp" key="column_names" />
+    </options>
+  </param>
+ </inputs>
+ <outputs>
+  <data format="txt" name="output_fp"/>
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/split_libraries.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,132 @@
+<tool id="split_libraries" name="split_libraries" version="1.2.1">
+ <description>Split libraries according to barcodes specified in mapping file</description>
+ <requirements>
+  <requirement type="binary">split_libraries.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  --galaxy_datasets='^seqs.fna$:'$sequences,'histograms.txt:'$histograms,'split_library_log.txt:'$log
+  split_libraries.py
+  --map=$map
+  #set fnas = []
+  #for i in $inputs:
+    #set fnas = $fnas + [$i.fasta.__str__]
+  #end for
+  --fasta=#echo ','.join($fnas)
+  #set quals = []
+  #for i in $inputs:
+    #if $i.qual != None and $i.qual.__str__ != 'None':
+      #set quals = $quals + [$i.qual.__str__]
+    #end if
+  #end for
+  #if len($quals) > 0:
+    --qual=#echo ','.join($quals)
+  #end if
+  #if len($min_seq_length.__str__) > 0 and $min_seq_length > 0:
+    --min-seq-length=$min_seq_length
+  #end if
+  #if len($max_seq_length.__str__) > 0:
+    --max-seq-length=$max_seq_length
+  #end if
+  $trim_seq_length
+  #if len($min_qual_score.__str__) > 0:
+    --min-qual-score=$min_qual_score
+  #end if
+  $keep_primer
+  $keep_barcode
+  #if len($max_ambig.__str__) > 0:
+    --max-ambig=$max_ambig
+  #end if
+  #if len($max_homopolymer.__str__) > 0:
+  --max-homopolymer=$max_homopolymer
+  #end if
+  #if len($max_primer_mismatch.__str__) > 0:
+  --max-primer-mismatch=$max_primer_mismatch
+  #end if
+  --barcode-type=$barcode_type
+  ## --dir-prefix=$dir_prefix
+  #if $max_barcode_errors >= 0.:
+  --max-barcode-errors=$max_barcode_errors
+  #end if
+  #if len($start_numbering_at.__str__) > 0:
+  --start-numbering-at=$start_numbering_at
+  #end if
+  $remove_unassigned
+  $disable_bc_correction
+  #if len($qual_score_window.__str__) > 0:
+  --qual_score_window=$qual_score_window
+  #end if
+  $disable_primers
+  --reverse_primers=$reverse_primers
+  $record_qual_scores
+  $discard_bad_windows
+ </command>
+ <inputs>
+  <param name="map" type="data" format="tabular" label="map"
+   help="name of mapping file. NOTE: Must contain a header line indicating SampleID in the first column and BarcodeSequence in the second, LinkerPrimerSequence in the third. [REQUIRED]"/>
+  <repeat name="inputs" title="Input Sequences">
+    <param name="fasta" type="data" format="fasta" label="fasta"
+     help="names of fasta files, comma-delimited [REQUIRED]"/>
+    <param name="qual" type="data" format="qual" label="qual"
+     help="names of qual files, comma-delimited [default: ('NO', 'DEFAULT')]"/>
+  </repeat>
+  <param name="min_seq_length" type="integer" optional="true" value="200" label="min-seq-length"
+   help="minimum sequence length, in nucleotides [default: 200]"/>
+  <param name="max_seq_length" type="integer" optional="true" value="1000" label="max-seq-length"
+   help="maximum sequence length, in nucleotides [default: 1000]"/>
+  <param name="trim_seq_length" type="boolean" truevalue="--trim-seq-length" falsevalue="" checked="false" label="trim-seq-length"
+   help="calculate sequence lengths after trimming primers and barcodes [default: False]"/>
+  <param name="min_qual_score" type="integer" optional="true" value="25" label="min-qual-score"
+   help="min average qual score allowed in read [default: 25]"/>
+  <param name="keep_primer" type="boolean" truevalue="--keep-primer" falsevalue="" checked="false" label="keep-primer"
+   help="do not remove primer from sequences"/>
+  <param name="keep_barcode" type="boolean" truevalue="--keep-barcode" falsevalue="" checked="false" label="keep-barcode"
+   help="do not remove barcode from sequences"/>
+  <param name="max_ambig" type="integer" optional="true" value="0" label="max-ambig"
+   help="maximum number of ambiguous bases [default: 0]"/>
+  <param name="max_homopolymer" type="integer" optional="true" value="6" label="max-homopolymer"
+   help="maximum length of homopolymer run [default: 6]"/>
+  <param name="max_primer_mismatch" type="integer" optional="true" value="0" label="max-primer-mismatch"
+   help="maximum number of primer mismatches [default: 0]"/>
+  <param name="barcode_type" type="text" value="golay_12" label="barcode-type"
+   help="barcode type, hamming_8, golay_12, variable_length (will disable any barcode correction if variable_length set), or a number representing the length of the barcode, such as -b 4.  [default: golay_12]"/>
+  <!-- Not needed in galaxy 
+  <param name="dir_prefix" type="text" value="." label="dir-prefix"
+   help="directory prefix for output files [default: .]"/>
+  -->
+  <param name="max_barcode_errors" type="float"  optional="true" value="1.5" label="max-barcode-errors"
+   help="maximum number of errors in barcode [default: 1.5]"/>
+  <param name="start_numbering_at" type="integer" optional="true" min="1" value="1" label="start-numbering-at"
+   help="seq id to use for the first sequence [default: 1]"/>
+  <param name="remove_unassigned" type="boolean" truevalue="--remove_unassigned" falsevalue="" checked="false" label="remove_unassigned"
+   help="remove sequences which are Unassigned from             output [default: False]"/>
+  <param name="disable_bc_correction" type="boolean" truevalue="--disable_bc_correction" falsevalue="" checked="false" label="disable_bc_correction"
+   help="Disable attempts to find nearest corrected barcode.  Can improve performance. [default: False]"/>
+  <param name="qual_score_window" type="integer" optional="true" value="0" label="qual_score_window"
+   help="Enable sliding window test of quality scores.  If the average score of a continuous set of w nucleotides falls below the threshold (see -s for default), the sequence is discarded. A good value would be 50. 0 (zero) means no filtering. Must pass a .qual file (see -q parameter) if this functionality is enabled. [default: 0]"/>
+  <param name="discard_bad_windows" type="boolean" truevalue="--discard_bad_windows" falsevalue="" checked="false" label="discard_bad_windows"
+   help="If the qual_score_window option (-w) is enabled, this will override the default truncation behavior and discard any sequences where a bad window is found.  [default: False]"/>
+  <param name="disable_primers" type="boolean" truevalue="--disable_primers" falsevalue="" checked="false" label="disable_primers"
+   help="Disable primer usage when demultiplexing.  Should be enabled for unusual circumstances, such as analyzing Sanger sequence data generated with different primers.  [default: False]"/>
+  <param name="reverse_primers" type="select" label="reverse_primers"
+   help="Enable removal of the reverse primer and any subsequence sequence from the end of each read.  To enable this, there has to be a 'ReversePrimer' column in the mapping file. Primers a required to be in IUPAC format and written in the 5' to  3' direction.  Valid options are 'disable', 'truncate_only', and 'truncate_remove'.  'truncate_only' will remove the primer and subsequence sequence data from the output read and will not alter output of sequences where the primer cannot be found. 'truncate_remove' will flag sequences where the primer cannot be found to not be written and will record the quantity of such failed sequences in the log file. [default: disable]">
+    <option value="disable" >disable</option>
+    <option value="truncate_only">truncate_only</option>
+    <option value="truncate_remove">truncate_remove</option>
+  </param>
+  <param name="record_qual_scores" type="boolean" truevalue="--record_qual_scores" falsevalue="" checked="false" label="record_qual_scores"
+   help="Enables recording of quality scores for all sequences that are recorded.  If this option is enabled, a file named seqs_filtered.qual will be created in the output directory, and will contain the same sequence IDs in the seqs.fna file and sequence quality scores matching the bases present in the seqs.fna file. [default: False]"/>
+ </inputs>
+ <outputs>
+   <data format="txt" name="log" label="${tool.name} on ${on_string}: log" />
+   <data format="txt" name="histograms" label="${tool.name} on ${on_string}: histograms"/>
+   <data format="fasta" name="sequences" label="${tool.name} on ${on_string}: fasta"/>
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/split_libraries_illumina.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,56 @@
+<tool id="split_libraries_illumina" name="split_libraries_illumina" version="1.2.0">
+ <description>Script for processing raw Illumina Genome Analyzer II data.</description>
+ <requirements>
+  <requirement type="binary">split_libraries_illumina.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  split_libraries_illumina.py
+  --mapping_fp=$mapping_fp
+  --five_prime_read_fp=$five_prime_read_fp
+  --three_prime_read_fp=$three_prime_read_fp
+  --output_dir=$__new_file_path__
+  $store_unassigned
+  --quality_threshold=$quality_threshold
+  --max_bad_run_length=$max_bad_run_length
+  --min_per_read_length=$min_per_read_length
+  --sequence_max_n=$sequence_max_n
+  --start_seq_id=$start_seq_id
+  $rev_comp_barcode
+  $barcode_in_header
+ </command>
+ <inputs>
+  <param name="mapping_fp" type="data" format="tabular" label="mapping_fp"
+   help="the mapping filepath [REQUIRED]"/>
+  <param name="five_prime_read_fp" type="data" format="txt" label="five_prime_read_fp"
+   help="the 5' read filepath [default: ('NO', 'DEFAULT')]"/>
+  <param name="three_prime_read_fp" type="data" format="txt" label="three_prime_read_fp"
+   help="the 3' read filepath [default: ('NO', 'DEFAULT')]"/>
+  <param name="store_unassigned" type="boolean" truevalue="--store_unassigned" falsevalue="" checked="false" label="store_unassigned"
+   help="store seqs which can't be assigned to samples because of unknown barcodes [default: False]"/>
+  <param name="quality_threshold" type="float" value="1e-05" label="quality_threshold"
+   help="max base call error probability to consider high-quality (probability of base call being error, so values closer to 1 mean that the base call is more likely to be erroneous) [default: 1e-05]"/>
+  <param name="max_bad_run_length" type="integer" value="1" label="max_bad_run_length"
+   help="max number of consecutive low quality base calls allowed before truncating a read [default: 1; the read is trucated at thesecond low quality call]"/>
+  <param name="min_per_read_length" type="integer" value="75" label="min_per_read_length"
+   help="min number of consecutive high quality base calls to includea read (per single end read) [default: 75]"/>
+  <param name="sequence_max_n" type="integer" value="0" label="sequence_max_n"
+   help="maximum number of N characters allowed in a sequence to retain it -- this is applied after quality trimming, and is total over combined paired end reads if applicable [default: 0]"/>
+  <param name="start_seq_id" type="integer" value="0" label="start_seq_id"
+   help="start seq_ids as ascending integers beginning with start_seq_id[default: 0]"/>
+  <param name="rev_comp_barcode" type="boolean" truevalue="--rev_comp_barcode" falsevalue="" checked="false" label="rev_comp_barcode"
+   help="reverse compliment barcodes before lookup[default: False]"/>
+  <param name="barcode_in_header" type="boolean" truevalue="--barcode_in_header" falsevalue="" checked="false" label="barcode_in_header"
+   help="barcode is in header line (rather than beginning of sequence)[default: False]"/>
+ </inputs>
+ <outputs>
+  
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/start_parallel_jobs.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,28 @@
+<tool id="start_parallel_jobs" name="start_parallel_jobs" version="1.2.0">
+ <description>Starts multiple jobs in parallel on multicore or multiprocessor systems.</description>
+ <requirements>
+  <requirement type="binary">start_parallel_jobs.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  start_parallel_jobs.py
+  $make_jobs
+  $submit_jobs
+ </command>
+ <inputs>
+  <param name="make_jobs" type="boolean" truevalue="--make_jobs" falsevalue="" checked="false" label="make_jobs"
+   help="make the job files [default: ('NO', 'DEFAULT')]"/>
+  <param name="submit_jobs" type="boolean" truevalue="--submit_jobs" falsevalue="" checked="false" label="submit_jobs"
+   help="submit the job files [default: ('NO', 'DEFAULT')]"/>
+ </inputs>
+ <outputs>
+  
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/submit_to_mgrast.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,32 @@
+<tool id="submit_to_mgrast" name="submit_to_mgrast" version="1.2.1">
+ <description>This script submits a FASTA file to MG-RAST</description>
+ <requirements>
+  <requirement type="binary">submit_to_mgrast.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  submit_to_mgrast.py
+  --input_fasta_fp=$input_fasta_fp
+  --web_key_auth=$web_key_auth
+  --project_id=$project_id
+  --output_dir=$__new_file_path__
+ </command>
+ <inputs>
+  <param name="input_fasta_fp" type="data" format="fasta" label="input_fasta_fp"
+   help="path to the input fasta file [REQUIRED]"/>
+  <param name="web_key_auth" type="text"  label="web_key_auth"
+   help="the web services authorization key from MG-RAST [REQUIRED]"/>
+  <param name="project_id" type="text"  label="project_id"
+   help="the title to be used for the project [REQUIRED]"/>
+ </inputs>
+ <outputs>
+  
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/summarize_otu_by_cat.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,37 @@
+<tool id="summarize_otu_by_cat" name="summarize_otu_by_cat" version="1.2.0">
+ <description>Create a summarized OTU table for a specific metadata category</description>
+ <requirements>
+  <requirement type="binary">summarize_otu_by_cat.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  summarize_otu_by_cat.py
+  --input_map=$input_map
+  --otu_file=$otu_file
+  --meta_category=$meta_category
+  --dir-prefix=$dir_prefix
+  $normalize_flag
+ </command>
+ <inputs>
+  <param name="input_map" type="data" format="tabular" label="input_map"
+   help="name of input map file [REQUIRED]"/>
+  <param name="otu_file" type="data" format="txt" label="otu_file"
+   help="name of otu table file [REQUIRED]"/>
+  <param name="meta_category" type="text"  label="meta_category"
+   help="name of category for OTU table [REQUIRED]"/>
+  <param name="dir_prefix" type="text"  label="dir-prefix"
+   help="directory prefix for all analyses [default: cwd]"/>
+  <param name="normalize_flag" type="boolean" truevalue="--normalize_flag" falsevalue="" checked="false" label="normalize_flag"
+   help="if True will normalize counts [default: False]"/>
+ </inputs>
+ <outputs>
+  
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/summarize_taxa.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,42 @@
+<tool id="summarize_taxa" name="summarize_taxa" version="1.2.1">
+ <description>Summarize Taxa</description>
+ <requirements>
+  <requirement type="binary">summarize_taxa.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  summarize_taxa.py
+  --otu_table_fp=$otu_table_fp
+  --output_fp=$output_fp
+  --level=$level
+  #if $mapping != None and $mapping.__str__ != 'None':
+   --mapping=$mapping
+  #end if
+  #if $delimiter != ';':
+   --delimiter=$delimiter
+  #end if
+  ## --relative_abundance=$relative_abundance
+  $absolute_abundance
+ </command>
+ <inputs>
+  <param name="otu_table_fp" type="data" format="qiimeotutable" label="otu_table_fp"
+   help="Path to read otu file [REQUIRED]"/>
+  <param name="level" type="integer" value="2" label="level"
+   help="Level of taxonomy to use [default: 2]"/>
+  <param name="mapping" type="data" format="qiimemapping" optional="true" label="mapping"
+   help="if supplied - the taxon information will be added to the mapping file. This mapping file can be used to color PCoA plots by taxon abundance or to perform statistical tests of taxon/mappingy associations."/>
+  <param name="delimiter" type="text" value="\;" label="delimiter"
+   help="Delimitor that separates taxonomy categories.[default: ;]"/>
+  <param name="absolute_abundance" type="boolean" truevalue="--absolute_abundance" falsevalue="" checked="false" label="absolute_abundance"
+   help="If present, reports the absolute abundance of the lineage in each sample. By default uses relative abundance [default: False]"/>
+ </inputs>
+ <outputs>
+  <data format="qiimetaxsummary" name="output_fp" label="${tool.name} on ${on_string}: taxa_summary"/>
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/supervised_learning.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,62 @@
+<tool id="supervised_learning" name="supervised_learning" version="1.2.1">
+ <description>Run supervised classification using OTUs as predictors and a mapping file category as class labels.</description>
+ <requirements>
+  <requirement type="binary">supervised_learning.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  supervised_learning.py
+  --input_data=$input_data
+  --mapping_file=$mapping_file
+  --category=$category
+  --output_dir=$__new_file_path__
+  --method=$method
+  $force
+  --param_file=$param_file
+  $show_params
+  --filter_type=$filter_type
+  --filter_min=$filter_min
+  --filter_max=$filter_max
+  --filter_step=$filter_step
+  --filter_reps=$filter_reps
+  $keepfiles
+ </command>
+ <inputs>
+  <param name="input_data" type="text"  label="input_data"
+   help="Input data file containing predictors (e.g. otu table) [REQUIRED]"/>
+  <param name="mapping_file" type="data" format="tabular" label="mapping_file"
+   help="File containing meta data (response variables) [REQUIRED]"/>
+  <param name="category" type="text"  label="category"
+   help="Name of meta data category to predict [REQUIRED]"/>
+  <param name="method" type="text" value="random_forest" label="method"
+   help="Comma-separated list of supervised learning methods to apply. Currently one option is available: 'random_forest' [default: random_forest]."/>
+  <param name="force" type="boolean" truevalue="--force" falsevalue="" checked="false" label="force"
+   help="Force overwrite of existing output directory (note: existing files in output_dir will not be removed) [default: ('NO', 'DEFAULT')]"/>
+  <param name="param_file" type="data" format="txt" label="param_file"
+   help="file containing parameters for the supervised learning model inference [default: %default]"/>
+  <param name="show_params" type="boolean" truevalue="--show_params" falsevalue="" checked="false" label="show_params"
+   help="show sample parameters file for a given method [default: False]"/>
+  <param name="filter_type" type="text"  label="filter_type"
+   help="type of filter to use. Currently one is available: BSSWSS. [default: %default]"/>
+  <param name="filter_min" type="integer" value="2" label="filter_min"
+   help="minimum number of features to try with filter [default: 2]"/>
+  <param name="filter_max" type="integer" value="20" label="filter_max"
+   help="maximum number of features to try with filter [default: 20]"/>
+  <param name="filter_step" type="integer" value="1" label="filter_step"
+   help="step increment for number of features to try with filter [default: 1]"/>
+  <param name="filter_reps" type="integer" value="10" label="filter_reps"
+   help="Number of models to train for estimating filter error [default: 10]"/>
+  <param name="keepfiles" type="boolean" truevalue="--keepfiles" falsevalue="" checked="false" label="keepfiles"
+   help="Keep R-formatted input files [default: ('NO', 'DEFAULT')]"/>
+ </inputs>
+ <outputs>
+  
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/transform_coordinate_matrices.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,38 @@
+<tool id="transform_coordinate_matrices" name="transform_coordinate_matrices" version="1.2.0">
+ <description>Transform 2 coordinate matrices</description>
+ <requirements>
+  <requirement type="binary">transform_coordinate_matrices.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  transform_coordinate_matrices.py
+  --input_fps=$input_fps
+  --output_dir=$__new_file_path__
+  --random_trials=$random_trials
+  --num_dimensions=$num_dimensions
+  --sample_id_map_fp=$sample_id_map_fp
+  $store_trial_details
+ </command>
+ <inputs>
+  <param name="input_fps" type="text"  label="input_fps"
+   help="comma-separated input files [REQUIRED]"/>
+  <param name="random_trials" type="integer" value="-1" label="random_trials"
+   help="Number of random permutations of matrix2 to perform.  [default: (no Monte Carlo analysis performed)]"/>
+  <param name="num_dimensions" type="integer" value="-1" label="num_dimensions"
+   help="Number of dimensions to include in output matrices [default: Consider all dimensions]"/>
+  <param name="sample_id_map_fp" type="data" format="tabular" label="sample_id_map_fp"
+   help="Map of original sample ids to new sample ids [default: %default]"/>
+  <param name="store_trial_details" type="boolean" truevalue="--store_trial_details" falsevalue="" checked="false" label="store_trial_details"
+   help="Store PC matrices for individual trials [default: False]"/>
+ </inputs>
+ <outputs>
+  
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tree_compare.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,29 @@
+<tool id="tree_compare" name="tree_compare" version="1.2.0">
+ <description>Compare jackknifed/bootstrapped trees</description>
+ <requirements>
+  <requirement type="binary">tree_compare.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  tree_compare.py
+  --master_tree=$master_tree
+  --support_dir=$support_dir
+  --output_dir=$__new_file_path__
+ </command>
+ <inputs>
+  <param name="master_tree" type="text"  label="master_tree"
+   help="master tree filepath [REQUIRED]"/>
+  <param name="support_dir" type="text"  label="support_dir"
+   help="path to dir containing support trees [REQUIRED]"/>
+ </inputs>
+ <outputs>
+  
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/trflp_file_to_otu_table.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,26 @@
+<tool id="trflp_file_to_otu_table" name="trflp_file_to_otu_table" version="1.2.0">
+ <description>Convert TRFLP text file to an OTU table</description>
+ <requirements>
+  <requirement type="binary">trflp_file_to_otu_table.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  trflp_file_to_otu_table.py
+  --input_path=$input_path
+  --output_path=$output_path
+ </command>
+ <inputs>
+  <param name="input_path" type="text"  label="input_path"
+   help="input path: TRFLP text file [REQUIRED]"/>
+ </inputs>
+ <outputs>
+  <data format="txt" name="output_path"/>
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/trim_sff_primers.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,40 @@
+<tool id="trim_sff_primers" name="trim_sff_primers" version="1.2.0">
+ <description>Trim sff primers</description>
+ <requirements>
+  <requirement type="binary">trim_sff_primers.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  trim_sff_primers.py
+  --libdir=$libdir
+  --input_map=$input_map
+  --sfffile_path=$sfffile_path
+  --sffinfo_path=$sffinfo_path
+  $use_sfftools
+  $debug
+ </command>
+ <inputs>
+  <param name="libdir" type="text"  label="libdir"
+   help="The directory containing per-library sff files [REQUIRED]"/>
+  <param name="input_map" type="data" format="tabular" label="input_map"
+   help="Path to the input mapping file describing the libraries [REQUIRED]"/>
+  <param name="sfffile_path" type="text" value="sfffile" label="sfffile_path"
+   help="Path to sfffile binary [default: sfffile]"/>
+  <param name="sffinfo_path" type="text" value="sffinfo" label="sffinfo_path"
+   help="Path to sffinfo binary [default: sffinfo]"/>
+  <param name="use_sfftools" type="boolean" truevalue="--use_sfftools" falsevalue="" checked="false" label="use_sfftools"
+   help="Use external sffinfo and sfffile programs instead of equivalent Python implementation."/>
+  <param name="debug" type="boolean" truevalue="--debug" falsevalue="" checked="false" label="debug"
+   help="Print command-line output for debugging [default: False]"/>
+ </inputs>
+ <outputs>
+  
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/truncate_fasta_qual_files.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,32 @@
+<tool id="truncate_fasta_qual_files" name="truncate_fasta_qual_files" version="1.2.0">
+ <description>Generates filtered fasta and quality score files by truncating at the specified base position.</description>
+ <requirements>
+  <requirement type="binary">truncate_fasta_qual_files.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  truncate_fasta_qual_files.py
+  --fasta_fp=$fasta_fp
+  --qual_fp=$qual_fp
+  --base_pos=$base_pos
+  --output_dir=$__new_file_path__
+ </command>
+ <inputs>
+  <param name="fasta_fp" type="data" format="fasta" label="fasta_fp"
+   help="Fasta file.  Needed to test for congruety between the number of nucleotides in the fasta file and quality scores in the qual file. [REQUIRED]"/>
+  <param name="qual_fp" type="data" format="qual" label="qual_fp"
+   help="Quality score file used to generate histogram data. [REQUIRED]"/>
+  <param name="base_pos" type="text"  label="base_pos"
+   help="Nucleotide position to truncate the fasta and quality score files at. [REQUIRED]"/>
+ </inputs>
+ <outputs>
+  
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/upgma_cluster.xml	Sun Jul 17 10:30:11 2011 -0500
@@ -0,0 +1,26 @@
+<tool id="upgma_cluster" name="upgma_cluster" version="1.2.0">
+ <description>Build a UPGMA tree comparing samples</description>
+ <requirements>
+  <requirement type="binary">upgma_cluster.py</requirement>
+ </requirements>
+ <command interpreter="python">
+  qiime_wrapper.py
+  --galaxy_tmpdir='$__new_file_path__'
+  upgma_cluster.py
+  --input_path=$input_path
+  --output_path=$output_path
+ </command>
+ <inputs>
+  <param name="input_path" type="text"  label="input_path"
+   help="input path.  directory for batch processing, filename for single file operation [REQUIRED]"/>
+ </inputs>
+ <outputs>
+  <data format="txt" name="output_path"/>
+ </outputs>
+ <tests>
+ </tests>
+ <help>
+  
+ </help>
+</tool>
+