diff bowtie2_wrapper.xml @ 33:f76cbb84d67f draft default tip

planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/tools/bowtie2 commit 4508a3878ac8d12306a7521aa55fa286710d947a
author iuc
date Wed, 24 Sep 2025 13:37:14 +0000
parents d5ceb9f3c25b
children
line wrap: on
line diff
--- a/bowtie2_wrapper.xml	Mon May 13 13:49:14 2024 +0000
+++ b/bowtie2_wrapper.xml	Wed Sep 24 13:37:14 2025 +0000
@@ -1,4 +1,4 @@
-<tool id="bowtie2" name="Bowtie2" version="@TOOL_VERSION@+galaxy@VERSION_SUFFIX@" profile="22.05">
+<tool id="bowtie2" name="Bowtie2" version="@TOOL_VERSION@+galaxy@VERSION_SUFFIX@" profile="@PROFILE@">
     <description>- map reads against reference genome</description>
     <macros>
         <import>bowtie2_macros.xml</import>
@@ -8,7 +8,7 @@
     </xrefs>
     <requirements>
         <requirement type="package" version="@TOOL_VERSION@">bowtie2</requirement>
-        <requirement type="package" version="1.19.2">samtools</requirement>
+        <requirement type="package" version="1.22.1">samtools</requirement>
     </requirements>
     <version_command>bowtie2 --version</version_command>
     <command detect_errors="exit_code"><![CDATA[
@@ -28,34 +28,7 @@
 
 #set compressed="False"
 #set reads_are_fastq = True
-#if str($library.type) == 'paired':
-    #if $library.input_1.is_of_type("fastq.gz", "fastqsanger.gz"):
-        #set read1 = "input_f.fastq.gz"
-        #set compressed = "GZ"
-    #else if $library.input_1.is_of_type("fastq.bz2", "fastqsanger.bz2"):
-        #set read1 = "input_f.fastq.bz2"
-        #set compressed = "BZ2"
-    #else if $library.input_1.is_of_type('fasta'):
-        #set reads_are_fastq = False
-        #set read1 = "input_f.fasta"
-    #else:
-        #set read1 = "input_f.fastq"
-    #end if
-    ln -f -s '${library.input_1}' ${read1} &&
-
-    #if $library.input_2.is_of_type("fastq.gz", "fastqsanger.gz"):
-        #set read2 = "input_r.fastq.gz"
-        #set compressed = "GZ"
-    #else if $library.input_2.is_of_type("fastq.bz2", "fastqsanger.bz2"):
-        #set read2 = "input_r.fastq.bz2"
-        #set compressed = "BZ2"
-    #else if $library.input_2.is_of_type('fasta'):
-        #set read2 = "input_r.fasta"
-    #else:
-        #set read2 = "input_r.fastq"
-    #end if
-    ln -f -s '${library.input_2}' ${read2} &&
-#else if str($library.type) == 'paired_collection':
+#if str($library.type) == 'paired_collection':
     #if $library.input_1.forward.is_of_type("fastq.gz", "fastqsanger.gz"):
         #set read1 = "input_f.fastq.gz"
         #set compressed = "GZ"
@@ -82,21 +55,6 @@
         #set read2 = "input_r.fastq"
     #end if
     ln -f -s '${library.input_1.reverse}' ${read2} &&
-
-#else if str($library.type) == 'paired_interleaved':
-    #if $library.input_1.is_of_type("fastq.gz", "fastqsanger.gz"):
-        #set read1 = "input_il.fastq.gz"
-        #set compressed = "GZ"
-    #else if $library.input_1.is_of_type("fastq.bz2", "fastqsanger.bz2"):
-        #set read1 = "input_il.fastq.bz2"
-        #set compressed = "BZ2"
-    #else if $library.input_1.is_of_type("fasta"):
-        #set reads_are_fastq = False
-        #set read1 = "input_il.fasta"
-    #else:
-        #set read1 = "input_il.fastq"
-    #end if
-    ln -f -s '${library.input_1}' ${read1} &&
 #else:
     #if $library.input_1.is_of_type("fastq.gz", "fastqsanger.gz"):
         #set read1 = "input_f.fastq.gz"
@@ -143,62 +101,42 @@
     -U '${read1}'
     #if str( $library.unaligned_file ) == "true":
         #if $compressed == "GZ":
-            --un-gz '${output_unaligned_reads_l}'
+            --un-gz 'unaligned_reads'
         #else if $compressed == "BZ2":
-            --un-bz2 '${output_unaligned_reads_l}'
+            --un-bz2 'unaligned_reads'
         #else:
-            --un '${output_unaligned_reads_l}'
+            --un 'unaligned_reads'
         #end if
     #end if
     #if str( $library.aligned_file ) == "true":
         #if $compressed == "GZ":
-            --al-gz '${output_aligned_reads_l}'
+            --al-gz 'aligned_reads'
         #else if $compressed == "BZ2":
-            --al-bz2 '${output_aligned_reads_l}'
+            --al-bz2 'aligned_reads'
         #else:
-            --al '${output_aligned_reads_l}'
+            --al 'aligned_reads'
         #end if
     #end if
 
-#elif str( $library.type ) == "paired_interleaved":
-    --interleaved '${read1}'
-    #if str( $library.unaligned_file ) == "true":
-        #if $compressed == "GZ":
-            --un-gz '${output_unaligned_reads_l}'
-        #else if $compressed == "BZ2":
-            --un-bz2 '${output_unaligned_reads_l}'
-        #else:
-            --un '${output_unaligned_reads_l}'
-        #end if
-    #end if
-    #if str( $library.aligned_file ) == "true":
-        #if $compressed == "GZ":
-            --al-gz '${output_aligned_reads_l}'
-        #else if $compressed == "BZ2":
-            --al-bz2 '${output_aligned_reads_l}'
-        #else:
-            --al '${output_aligned_reads_l}'
-        #end if
-    #end if
 #else:
     -1 '${read1}'
     -2 '${read2}'
     #if str( $library.unaligned_file ) == "true":
         #if $compressed == "GZ":
-            --un-conc-gz '${output_unaligned_reads_l}'
+            --un-conc-gz 'unaligned_reads'
         #else if $compressed == "BZ2":
-            --un-conc-bz2 '${output_unaligned_reads_l}'
+            --un-conc-bz2 'unaligned_reads'
         #else:
-            --un-conc '${output_unaligned_reads_l}'
+            --un-conc 'unaligned_reads'
         #end if
     #end if
     #if str( $library.aligned_file ) == "true":
         #if $compressed == "GZ":
-            --al-conc-gz '${output_aligned_reads_l}'
+            --al-conc-gz 'aligned_reads'
         #else if $compressed == "BZ2":
-            --al-conc-bz2 '${output_aligned_reads_l}'
+            --al-conc-bz2 'aligned_reads'
         #else:
-            --al-conc '${output_aligned_reads_l}'
+            --al-conc 'aligned_reads'
         #end if
     #end if
     #if str( $library.paired_options.paired_options_selector ) == "yes":
@@ -217,8 +155,6 @@
 @define_read_group_helpers@
 #if str( $library.type ) == "single":
     #set $rg_auto_name = $read_group_name_default($library.input_1)
-#elif str( $library.type ) == "paired":
-    #set $rg_auto_name = $read_group_name_default($library.input_1, $library.input_2)
 #else
     #set $rg_auto_name = $read_group_name_default($library.input_1)
 #end if
@@ -333,51 +269,23 @@
 #else:
     > '$output'
 #end if
-
-## rename unaligned sequence files
-#if ($library.type == "paired" or $library.type == "paired_collection") and $output_unaligned_reads_l and $output_unaligned_reads_r:
-    #from os.path import splitext
-    #set _unaligned_root, _unaligned_ext = splitext( str( $output_unaligned_reads_l ) )
-    && mv '${ _unaligned_root }.1${_unaligned_ext}' '$output_unaligned_reads_l'
-    && mv '${ _unaligned_root }.2${_unaligned_ext}' '$output_unaligned_reads_r'
-#end if
-#if ($library.type == "paired" or $library.type == "paired_collection") and $output_aligned_reads_l and $output_aligned_reads_r:
-    #from os.path import splitext
-    #set _aligned_root, _aligned_ext = splitext( str( $output_aligned_reads_l ) )
-    && mv '${ _aligned_root }.1${_aligned_ext}' '$output_aligned_reads_l'
-    && mv '${ _aligned_root }.2${_aligned_ext}' '$output_aligned_reads_r'
-#end if
-
         ]]></command>
     <inputs>
         <!-- single/paired -->
         <conditional name="library">
             <param name="type" type="select" label="Is this single or paired library">
               <option value="single">Single-end</option>
-              <option value="paired">Paired-end</option>
-              <option value="paired_collection">Paired-end Dataset Collection</option>
-              <option value="paired_interleaved">Paired-end data from single interleaved dataset</option>
+              <option value="paired_collection">Paired-end</option>
             </param>
             <when value="single">
                 <param name="input_1" format="fastqsanger,fastqsanger.gz,fastqsanger.bz2,fasta" type="data" label="FASTA/Q file" help="Must be of datatype &quot;fastqsanger&quot; or &quot;fasta&quot;" />
                 <expand macro="align_unalign" />
             </when>
-            <when value="paired">
-                <param name="input_1" format="fastqsanger,fastqsanger.gz,fastqsanger.bz2,fasta" type="data" label="FASTA/Q file #1" help="Must be of datatype &quot;fastqsanger&quot;or &quot;fasta&quot;" />
-                <param name="input_2" format="fastqsanger,fastqsanger.gz,fastqsanger.bz2,fasta" type="data" label="FASTA/Q file #2" help="Must be of datatype &quot;fastqsanger&quot;or &quot;fasta&quot;" />
-                <expand macro="align_unalign" />
-                <expand macro="paired_end_options" />
-            </when>
             <when value="paired_collection">
                 <param name="input_1" format="fastqsanger,fastqsanger.gz,fastqsanger.bz2,fasta" type="data_collection" collection_type="paired" label="FASTQ Paired Dataset" help="Must be of datatype &quot;fastqsanger&quot; or &quot;fasta&quot;" />
                 <expand macro="align_unalign" />
                 <expand macro="paired_end_options" />
             </when>
-            <when value="paired_interleaved">
-                <param name="input_1" format="fastqsanger,fastqsanger.gz,fastqsanger.bz2,fasta" type="data" label="Interleaved FASTQ file" help="Must be of datatype &quot;fastqsanger&quot; or &quot;fasta&quot;. --interleaved"/>
-                <expand macro="align_unalign" />
-                <expand macro="paired_end_options" />
-            </when>
         </conditional>
         <!-- reference genome -->
         <conditional name="reference_genome">
@@ -556,89 +464,47 @@
     </inputs>
     <!-- define outputs -->
     <outputs>
-        <data format="fastqsanger" name="output_unaligned_reads_l" label="${tool.name} on ${on_string}: unaligned reads (L)" >
-            <filter>library['unaligned_file'] is True</filter>
+        <data name="output_unaligned_reads" format_source="library|input_1" from_work_dir="unaligned_reads" label="${tool.name} on ${on_string}: unaligned reads" >
+            <filter>library['type'] == 'single' and library['unaligned_file'] is True</filter>
             <actions>
-                <conditional name="library.type">
-                    <when value="single">
-                        <action type="format">
-                            <option type="from_param" name="library.input_1" param_attribute="ext" />
-                        </action>
-                    </when>
-                    <when value="paired">
-                        <action type="format">
-                            <option type="from_param" name="library.input_1" param_attribute="ext" />
-                        </action>
-                    </when>
-                    <when value="paired_collection">
-                        <action type="format">
-                            <option type="from_param" name="library.input_1" param_attribute="forward.ext" />
-                        </action>
-                    </when>
-                </conditional>
                 <expand macro="dbKeyActions" />
             </actions>
         </data>
-        <data format="fastqsanger" name="output_aligned_reads_l" label="${tool.name} on ${on_string}: aligned reads (L)" >
-            <filter>library['aligned_file'] is True</filter>
+        <collection name="output_unaligned_read_pairs" type="paired" label="${tool.name} on ${on_string}: unaligned read pairs">
+            <filter>library['type'] != 'single' and library['unaligned_file'] is True</filter>
+            <data name="forward" from_work_dir="unaligned_reads.1" format_source="library|input_1['forward']">
+                <actions>
+                    <expand macro="dbKeyActions" />
+                </actions>
+            </data>
+            <data name="reverse" from_work_dir="unaligned_reads.2" format_source="library|input_1['reverse']">
+                <actions>
+                    <expand macro="dbKeyActions" />
+                </actions>
+            </data>
+        </collection>
+
+        <data name="output_aligned_reads" format_source="library|input_1" from_work_dir="aligned_reads" label="${tool.name} on ${on_string}: aligned reads" >
+            <filter>library['type'] == 'single' and library['aligned_file'] is True</filter>
             <actions>
-                <conditional name="library.type">
-                    <when value="single">
-                        <action type="format">
-                            <option type="from_param" name="library.input_1" param_attribute="ext" />
-                        </action>
-                    </when>
-                    <when value="paired">
-                        <action type="format">
-                            <option type="from_param" name="library.input_1" param_attribute="ext" />
-                        </action>
-                    </when>
-                    <when value="paired_collection">
-                        <action type="format">
-                            <option type="from_param" name="library.input_1" param_attribute="forward.ext" />
-                        </action>
-                    </when>
-                </conditional>
                 <expand macro="dbKeyActions" />
             </actions>
         </data>
-        <data format="fastqsanger" name="output_aligned_reads_r" label="${tool.name} on ${on_string}: aligned reads (R)">
-            <filter>( library['type'] == "paired" or library['type'] == "paired_collection" ) and library['aligned_file'] is True</filter>
-            <actions>
-                <conditional name="library.type">
-                    <when value="paired">
-                        <action type="format">
-                            <option type="from_param" name="library.input_2" param_attribute="ext" />
-                        </action>
-                    </when>
-                    <when value="paired_collection">
-                        <action type="format">
-                            <option type="from_param" name="library.input_1" param_attribute="reverse.ext" />
-                        </action>
-                    </when>
-                </conditional>
-                <expand macro="dbKeyActions" />
-            </actions>
-        </data>
-        <data format="fastqsanger" name="output_unaligned_reads_r" label="${tool.name} on ${on_string}: unaligned reads (R)">
-            <filter>( library['type'] == "paired" or library['type'] == "paired_collection" ) and library['unaligned_file'] is True</filter>
-            <actions>
-                <conditional name="library.type">
-                    <when value="paired">
-                        <action type="format">
-                            <option type="from_param" name="library.input_2" param_attribute="ext" />
-                        </action>
-                    </when>
-                    <when value="paired_collection">
-                        <action type="format">
-                            <option type="from_param" name="library.input_1" param_attribute="reverse.ext" />
-                        </action>
-                    </when>
-                </conditional>
-                <expand macro="dbKeyActions" />
-            </actions>
-        </data>
-        <data format="bam" name="output" label="${tool.name} on ${on_string}: alignments">
+        <collection name="output_aligned_read_pairs" type="paired" label="${tool.name} on ${on_string}: aligned read pairs">
+            <filter>library['type'] != 'single' and library['aligned_file'] is True</filter>
+            <data name="forward" from_work_dir="aligned_reads.1" format_source="library|input_1['forward']">
+                <actions>
+                    <expand macro="dbKeyActions" />
+                </actions>
+            </data>
+            <data name="reverse" from_work_dir="aligned_reads.2" format_source="library|input_1['forward']">
+                <actions>
+                    <expand macro="dbKeyActions" />
+                </actions>
+            </data>
+        </collection>
+
+        <data name="output" format="bam" label="${tool.name} on ${on_string}: alignments">
           <change_format>
               <when input="sam_options.reorder" value="--reorder" format="qname_input_sorted.bam" />
               <when input="sam_options.sam_opt" value="true" format="sam" />
@@ -670,65 +536,157 @@
         </data>
     </outputs>
     <tests>
+        <!-- test on single-end datasets -->
+        <test expect_num_outputs="2">
+            <conditional name="library">
+                <param name="type" value="single"/>
+                <param name="unaligned_file" value="true"/>
+                <param name="input_1" value="bowtie2-fq1.fq" ftype="fastqsanger" />
+            </conditional>
+            <conditional name="reference_genome">
+                <param name="source" value="history" />
+                <param name="own_file" value="bowtie2-ref.fasta" />
+            </conditional>
+            <conditional name="analysis_type">
+                <param name="analysis_type_selector" value="simple"/>
+            </conditional>
+            <output name="output_unaligned_reads" ftype="fastqsanger">
+                <assert_contents>
+                    <has_n_lines n="312"/>
+                </assert_contents>
+            </output>
+            <output name="output" file="bowtie2-single.bam" ftype="bam" lines_diff="4" sort="true">
+                <metadata name="sort_order" value="coordinate"/>
+            </output>
+        </test>
+        <!-- test on paired-end datasets -->
         <test expect_num_outputs="1">
-            <!-- test on paired-end datasets -->
-            <param name="type" value="paired"/>
-            <param name="paired_options_selector" value="no"/>
-            <param name="unaligned_file" value="false"/>
-            <param name="analysis_type_selector" value="simple"/>
-            <param name="source" value="history" />
-            <param name="input_1" value="bowtie2-fq1.fq" ftype="fastqsanger"/>
-            <param name="input_2" value="bowtie2-fq2.fq" ftype="fastqsanger"/>
-            <param name="own_file" value="bowtie2-ref.fasta" />
+            <conditional name="library">
+                <param name="type" value="paired_collection"/>
+                <conditional name="paired_options">
+                    <param name="paired_options_selector" value="no"/>
+                </conditional>
+                <param name="unaligned_file" value="false"/>
+                <param name="input_1">
+                    <collection type="paired">
+                        <element name="forward" value="bowtie2-fq1.fq" ftype="fastqsanger" />
+                        <element name="reverse" value="bowtie2-fq2.fq" ftype="fastqsanger" />
+                    </collection>
+                </param>
+            </conditional>
+            <conditional name="reference_genome">
+                <param name="source" value="history" />
+                <param name="own_file" value="bowtie2-ref.fasta" />
+            </conditional>
+            <conditional name="analysis_type">
+                <param name="analysis_type_selector" value="simple"/>
+            </conditional>
             <output name="output" file="bowtie2-test1.bam" ftype="bam" lines_diff="4" sort="true">
                 <metadata name="sort_order" value="coordinate"/>
             </output>
         </test>
-        <test expect_num_outputs="3">
-            <!-- test on list paired collection -->
-            <param name="type" value="paired_collection"/>
-            <param name="paired_options_selector" value="no"/>
-            <param name="unaligned_file" value="true"/>
-            <param name="analysis_type_selector" value="simple"/>
-            <param name="source" value="history" />
-            <param name="input_1">
-                <collection type="paired">
-                    <element name="forward" value="bowtie2-fq1.fq" ftype="fastqsanger" />
-                    <element name="reverse" value="bowtie2-fq2.fq" ftype="fastqsanger" />
-                </collection>
-            </param>
-            <param name="own_file" value="bowtie2-ref.fasta" />
+        <!-- test on paired-end datasets + unaligned output -->
+        <test expect_num_outputs="4">
+            <conditional name="library">
+                <param name="type" value="paired_collection"/>
+                <conditional name="paired_options">
+                    <param name="paired_options_selector" value="no"/>
+                </conditional>
+                <param name="unaligned_file" value="true"/>
+                <param name="input_1">
+                    <collection type="paired">
+                        <element name="forward" value="bowtie2-fq1.fq" ftype="fastqsanger" />
+                        <element name="reverse" value="bowtie2-fq2.fq" ftype="fastqsanger" />
+                    </collection>
+                </param>
+            </conditional>
+            <conditional name="reference_genome">
+                <param name="source" value="history" />
+                <param name="own_file" value="bowtie2-ref.fasta" />
+            </conditional>
+            <conditional name="analysis_type">
+                <param name="analysis_type_selector" value="simple"/>
+            </conditional>
+            <output_collection name="output_unaligned_read_pairs" type="paired">
+                <element name="forward" ftype="fastqsanger">
+                    <assert_contents>
+                        <has_n_lines n="388"/>
+                    </assert_contents>
+                </element>
+                <element name="reverse" ftype="fastqsanger">
+                    <assert_contents>
+                        <has_n_lines n="388"/>
+                    </assert_contents>
+                </element>
+            </output_collection>
             <output name="output" file="bowtie2-test1.bam" ftype="bam" lines_diff="4" sort="true">
                 <metadata name="sort_order" value="coordinate"/>
             </output>
         </test>
         <test expect_num_outputs="1">
             <!-- test on paired-end datasets with read group info -->
-            <param name="type" value="paired"/>
-            <param name="paired_options_selector" value="no"/>
-            <param name="unaligned_file" value="false"/>
-            <param name="analysis_type_selector" value="simple"/>
-            <param name="rg_selector" value="set"/>
-            <param name="ID" value="rg1"/>
-            <param name="PL" value="CAPILLARY"/>
-            <param name="source" value="history" />
-            <param name="input_1" value="bowtie2-fq1.fq" ftype="fastqsanger"/>
-            <param name="input_2" value="bowtie2-fq2.fq" ftype="fastqsanger"/>
-            <param name="own_file" value="bowtie2-ref.fasta" />
-            <output name="output" file="bowtie2-test2.bam" ftype="bam" lines_diff="4" sort="true">
-                <metadata name="sort_order" value="coordinate"/>
+            <conditional name="library">
+                <param name="type" value="paired_collection"/>
+                <conditional name="paired_options">
+                    <param name="paired_options_selector" value="no"/>
+                </conditional>
+                <param name="unaligned_file" value="false"/>
+                <param name="input_1">
+                    <collection type="paired">
+                        <element name="forward" value="bowtie2-fq1.fq" ftype="fastqsanger" />
+                        <element name="reverse" value="bowtie2-fq2.fq" ftype="fastqsanger" />
+                    </collection>
+                </param>
+            </conditional>
+            <conditional name="reference_genome">
+                <param name="source" value="history" />
+                <param name="own_file" value="bowtie2-ref.fasta" />
+            </conditional>
+            <conditional name="analysis_type">
+                <param name="analysis_type_selector" value="simple"/>
+            </conditional>
+            <conditional name="sam_options">
+                <param name="sam_options_selector" value="yes" />
+                <param name="sam_opt" value="true" />
+            </conditional>
+            <conditional name="rg">
+                <param name="rg_selector" value="set"/>
+                <conditional name="read_group_id_conditional">
+                    <param name="do_auto_name" value="no"/>
+                    <param name="ID" value="rg1"/>
+                </conditional>
+                <param name="PL" value="CAPILLARY"/>
+            </conditional>
+            <output name="output" ftype="sam" lines_diff="4" sort="true">
+                <metadata name="sort_order" value="unsorted"/>
+                <assert_contents>
+                    <has_line line="@RG&#009;ID:rg1&#009;PL:CAPILLARY"/>
+                    <has_text text="RG:Z:rg1" n="200"/>
+                </assert_contents>
             </output>
         </test>
+        <!-- test on paired-end datasets with stats output -->
         <test expect_num_outputs="2">
-            <!-- test on paired-end datasets with stats output -->
-            <param name="type" value="paired"/>
-            <param name="paired_options_selector" value="no"/>
-            <param name="unaligned_file" value="false"/>
-            <param name="analysis_type_selector" value="simple"/>
-            <param name="source" value="history" />
-            <param name="input_1" value="bowtie2-fq1.fq" ftype="fastqsanger"/>
-            <param name="input_2" value="bowtie2-fq2.fq" ftype="fastqsanger"/>
-            <param name="own_file" value="bowtie2-ref.fasta" />
+            <conditional name="library">
+                <param name="type" value="paired_collection"/>
+                <conditional name="paired_options">
+                    <param name="paired_options_selector" value="no"/>
+                </conditional>
+                <param name="unaligned_file" value="false"/>
+                <param name="input_1">
+                    <collection type="paired">
+                        <element name="forward" value="bowtie2-fq1.fq" ftype="fastqsanger" />
+                        <element name="reverse" value="bowtie2-fq2.fq" ftype="fastqsanger" />
+                    </collection>
+                </param>
+            </conditional>
+            <conditional name="reference_genome">
+                <param name="source" value="history" />
+                <param name="own_file" value="bowtie2-ref.fasta" />
+            </conditional>
+            <conditional name="analysis_type">
+                <param name="analysis_type_selector" value="simple"/>
+            </conditional>
             <param name="save_mapping_stats" value="true" />
             <output name="output" file="bowtie2-test1.bam" ftype="bam" lines_diff="4" sort="true">
                 <metadata name="sort_order" value="coordinate"/>
@@ -739,92 +697,191 @@
                 </assert_contents>
             </output>
         </test>
-        <test expect_num_outputs="1">
-            <!-- test on interleaved dataset -->
-            <param name="type" value="paired_interleaved"/>
-            <!-- <param name="paired_options_selector" value="no"/> -->
-            <param name="unaligned_file" value="false"/>
-            <param name="analysis_type_selector" value="simple"/>
-            <param name="rg_selector" value="set"/>
-            <param name="ID" value="rg1"/>
-            <param name="PL" value="CAPILLARY"/>
-            <param name="source" value="history" />
-            <param name="input_1" value="bowtie2-fq_il.fq" ftype="fastqsanger"/>
-            <param name="own_file" value="bowtie2-ref.fasta" />
-            <output name="output" file="bowtie2-test_il.bam" ftype="bam" lines_diff="4" sort="true">
+        <!-- test on fastqsanger.gz paired-end datasets plus reference from data table -->
+        <test expect_num_outputs="4">
+            <conditional name="library">
+                <param name="type" value="paired_collection"/>
+                <conditional name="paired_options">
+                    <param name="paired_options_selector" value="no"/>
+                </conditional>
+                <param name="unaligned_file" value="true"/>
+                <param name="input_1">
+                    <collection type="paired">
+                        <element name="forward" value="bowtie2-fq1.fq.gz" ftype="fastqsanger.gz" />
+                        <element name="reverse" value="bowtie2-fq2.fq.gz" ftype="fastqsanger.gz" />
+                    </collection>
+                </param>
+            </conditional>
+            <conditional name="analysis_type">
+                <param name="analysis_type_selector" value="simple"/>
+            </conditional>
+            <conditional name="reference_genome">
+                <param name="source" value="indexed" />
+                <param name="index" value="test_value" />
+            </conditional>
+            <output name="output" file="bowtie2-test1.bam" ftype="bam" lines_diff="4" sort="true">
                 <metadata name="sort_order" value="coordinate"/>
             </output>
+            <output_collection name="output_unaligned_read_pairs" type="paired">
+                <element name="forward" ftype="fastqsanger.gz" decompress="true">
+                    <assert_contents>
+                        <has_n_lines n="388"/>
+                    </assert_contents>
+                </element>
+                <element name="reverse" ftype="fastqsanger.gz" decompress="true">
+                    <assert_contents>
+                        <has_n_lines n="388"/>
+                    </assert_contents>
+                </element>
+            </output_collection>
         </test>
-        <test expect_num_outputs="1">
-            <!-- test on fastqsanger.gz paired-end datasets -->
-            <param name="type" value="paired"/>
-            <param name="paired_options_selector" value="no"/>
-            <param name="unaligned_file" value="false"/>
-            <param name="analysis_type_selector" value="simple"/>
-            <param name="source" value="history" />
-            <param name="input_1" value="bowtie2-fq1.fq.gz" ftype="fastqsanger.gz"/>
-            <param name="input_2" value="bowtie2-fq2.fq.gz" ftype="fastqsanger.gz"/>
-            <param name="own_file" value="bowtie2-ref.fasta" />
+        <!-- test on fastqsanger.bz2 paired-end datasets -->
+        <test expect_num_outputs="4">
+            <conditional name="library">
+                <param name="type" value="paired_collection"/>
+                <conditional name="paired_options">
+                    <param name="paired_options_selector" value="no"/>
+                </conditional>
+                <param name="aligned_file" value="true"/>
+                <param name="input_1">
+                    <collection type="paired">
+                        <element name="forward" value="bowtie2-fq1.fq.bz2" ftype="fastqsanger.bz2" />
+                        <element name="reverse" value="bowtie2-fq2.fq.bz2" ftype="fastqsanger.bz2" />
+                    </collection>
+                </param>
+            </conditional>
+            <conditional name="reference_genome">
+                <param name="source" value="history" />
+                <param name="own_file" value="bowtie2-ref.fasta" />
+            </conditional>
+            <conditional name="analysis_type">
+                <param name="analysis_type_selector" value="simple"/>
+            </conditional>
             <output name="output" file="bowtie2-test1.bam" ftype="bam" lines_diff="4" sort="true">
                 <metadata name="sort_order" value="coordinate"/>
             </output>
+            <output_collection name="output_aligned_read_pairs" type="paired">
+                <element name="forward" ftype="fastqsanger.bz2" decompress="true">
+                    <assert_contents>
+                        <has_n_lines n="12"/>
+                    </assert_contents>
+                </element>
+                <element name="reverse" ftype="fastqsanger.bz2" decompress="true">
+                    <assert_contents>
+                        <has_n_lines n="12"/>
+                    </assert_contents>
+                </element>
+            </output_collection>
         </test>
-        <test expect_num_outputs="1">
-            <!-- test on fastqsanger.bz2 paired-end datasets -->
-            <param name="type" value="paired"/>
-            <param name="paired_options_selector" value="no"/>
-            <param name="unaligned_file" value="false"/>
-            <param name="analysis_type_selector" value="simple"/>
-            <param name="source" value="history" />
-            <param name="input_1" value="bowtie2-fq1.fq.bz2" ftype="fastqsanger.bz2"/>
-            <param name="input_2" value="bowtie2-fq2.fq.bz2" ftype="fastqsanger.bz2"/>
-            <param name="own_file" value="bowtie2-ref.fasta" />
-            <output name="output" file="bowtie2-test1.bam" ftype="bam" lines_diff="4" sort="true">
-                <metadata name="sort_order" value="coordinate"/>
-            </output>
-        </test>
-        <test expect_num_outputs="1">
-            <!-- test on fasta paired-end datasets -->
-            <param name="type" value="paired"/>
-            <param name="paired_options_selector" value="no"/>
-            <param name="unaligned_file" value="false"/>
-            <param name="analysis_type_selector" value="simple"/>
-            <param name="source" value="history" />
-            <param name="input_1" value="bowtie2-fq1.fa" ftype="fasta"/>
-            <param name="input_2" value="bowtie2-fq2.fa" ftype="fasta"/>
-            <param name="own_file" value="bowtie2-ref.fasta" />
+        <!-- test on fasta paired-end datasets + aligned + unaligned -->
+        <test expect_num_outputs="7">
+            <conditional name="library">
+                <param name="type" value="paired_collection"/>
+                <conditional name="paired_options">
+                    <param name="paired_options_selector" value="no"/>
+                </conditional>
+                <param name="unaligned_file" value="true"/>
+                <param name="aligned_file" value="true"/>
+                <param name="input_1">
+                    <collection type="paired">
+                        <element name="forward" value="bowtie2-fq1.fa" ftype="fasta" />
+                        <element name="reverse" value="bowtie2-fq2.fa" ftype="fasta" />
+                    </collection>
+                </param>
+            </conditional>
+            <conditional name="reference_genome">
+                <param name="source" value="history" />
+                <param name="own_file" value="bowtie2-ref.fasta" />
+            </conditional>
+            <conditional name="analysis_type">
+                <param name="analysis_type_selector" value="simple"/>
+            </conditional>
+
+            <output_collection name="output_unaligned_read_pairs" type="paired">
+                <element name="forward" ftype="fasta" decompress="true">
+                    <assert_contents>
+                        <has_n_lines n="194"/>
+                    </assert_contents>
+                </element>
+                <element name="reverse" ftype="fasta" decompress="true">
+                    <assert_contents>
+                        <has_n_lines n="194"/>
+                    </assert_contents>
+                </element>
+            </output_collection>
+            <output_collection name="output_aligned_read_pairs" type="paired">
+                <element name="forward" ftype="fasta" decompress="true">
+                    <assert_contents>
+                        <has_n_lines n="6"/>
+                    </assert_contents>
+                </element>
+                <element name="reverse" ftype="fasta" decompress="true">
+                    <assert_contents>
+                        <has_n_lines n="6"/>
+                    </assert_contents>
+                </element>
+            </output_collection>
+
             <output name="output" file="bowtie2-test_fasta_in.bam" ftype="bam" lines_diff="4" sort="true">
                 <metadata name="sort_order" value="coordinate"/>
             </output>
         </test>
+        <!-- test on fasta paired-end datasets with bam_native as output -->
         <test expect_num_outputs="1">
-            <!-- test on fasta paired-end datasets with bam_native as output -->
-            <param name="type" value="paired"/>
-            <param name="paired_options_selector" value="no"/>
-            <param name="unaligned_file" value="false"/>
-            <param name="analysis_type_selector" value="simple"/>
-            <param name="source" value="history" />
-            <param name="input_1" value="bowtie2-fq1.fa" ftype="fasta"/>
-            <param name="input_2" value="bowtie2-fq2.fa" ftype="fasta"/>
-            <param name="own_file" value="bowtie2-ref.fasta" />
-            <param name="sam_options_selector" value="yes" />
-            <param name="reorder" value="true" />
+            <conditional name="library">
+                <param name="type" value="paired_collection"/>
+                <conditional name="paired_options">
+                    <param name="paired_options_selector" value="no"/>
+                </conditional>
+                <param name="unaligned_file" value="false"/>
+                <param name="input_1">
+                    <collection type="paired">
+                        <element name="forward" value="bowtie2-fq1.fa" ftype="fasta" />
+                        <element name="reverse" value="bowtie2-fq2.fa" ftype="fasta" />
+                    </collection>
+                </param>
+            </conditional>
+            <conditional name="analysis_type">
+                <param name="analysis_type_selector" value="simple"/>
+            </conditional>
+            <conditional name="reference_genome">
+                <param name="source" value="history" />
+                <param name="own_file" value="bowtie2-ref.fasta" />
+            </conditional>
+            <conditional name="sam_options">
+                <param name="sam_options_selector" value="yes" />
+                <param name="reorder" value="true" />
+            </conditional>
             <output name="output" file="bowtie2-test_fasta_in_bam_qname_input_sorted.bam" ftype="qname_input_sorted.bam" lines_diff="4">
                 <metadata name="sort_order" value="unsorted"/>
             </output>
         </test>
+        <!-- test on fasta paired-end datasets with sam as output -->
         <test expect_num_outputs="1">
-            <!-- test on fasta paired-end datasets with sam as output -->
-            <param name="type" value="paired"/>
-            <param name="paired_options_selector" value="no"/>
-            <param name="unaligned_file" value="false"/>
-            <param name="analysis_type_selector" value="simple"/>
-            <param name="source" value="history" />
-            <param name="input_1" value="bowtie2-fq1.fa" ftype="fasta"/>
-            <param name="input_2" value="bowtie2-fq2.fa" ftype="fasta"/>
-            <param name="own_file" value="bowtie2-ref.fasta" />
-            <param name="sam_options_selector" value="yes" />
-            <param name="sam_options|sam_opt" value="true" />
+            <conditional name="library">
+                <param name="type" value="paired_collection"/>
+                <conditional name="paired_options">
+                    <param name="paired_options_selector" value="no"/>
+                </conditional>
+                <param name="unaligned_file" value="false"/>
+                <param name="input_1">
+                    <collection type="paired">
+                        <element name="forward" value="bowtie2-fq1.fa" ftype="fasta" />
+                        <element name="reverse" value="bowtie2-fq2.fa" ftype="fasta" />
+                    </collection>
+                </param>
+            </conditional>
+            <conditional name="analysis_type">
+                <param name="analysis_type_selector" value="simple"/>
+            </conditional>
+            <conditional name="reference_genome">
+                <param name="source" value="history" />
+                <param name="own_file" value="bowtie2-ref.fasta" />
+            </conditional>
+            <conditional name="sam_options">
+                <param name="sam_options_selector" value="yes" />
+                <param name="sam_opt" value="true" />
+            </conditional>
             <output name="output" ftype="sam">
                 <metadata name="sort_order" value="unsorted"/>
                 <assert_contents>