changeset 16:10678d49d39e draft default tip

planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/tools/fastp commit 81e2b45f5357c7ba235f219828a6998f146012c4
author iuc
date Sat, 08 Feb 2025 15:15:16 +0000
parents a626e8c0e1ba
children
files fastp.xml macros.xml test-data/bwa-mem-fastq1.fq.gz test-data/bwa-mem-fastq2.fq.gz test-data/bwa-mem-merged-read-include-unmerged.fastqsanger.gz test-data/bwa-mem-merged-reads.fastqsanger.gz test-data/bwa-mem-unmerged-filtered-reads1.fastqsanger.gz test-data/bwa-mem-unmerged-filtered-reads2.fastqsanger.gz test-data/bwa-mem-unmerged-unfiltered-reads1.fastqsanger.gz test-data/out1.fq.gz
diffstat 10 files changed, 300 insertions(+), 203 deletions(-) [+]
line wrap: on
line diff
--- a/fastp.xml	Fri Nov 15 15:31:53 2024 +0000
+++ b/fastp.xml	Sat Feb 08 15:15:16 2025 +0000
@@ -1,4 +1,4 @@
-<tool id="fastp" name="fastp" version="@TOOL_VERSION@+galaxy3" profile="23.1">
+<tool id="fastp" name="fastp" version="@TOOL_VERSION@+galaxy4" profile="23.1">
     <description>fast all-in-one preprocessing for FASTQ files</description>
     <macros>
         <import>macros.xml</import>
@@ -23,8 +23,6 @@
     #set $in2 = $single_paired.paired_input.reverse
     #set $in1_name = re.sub('[^\w\-\s]', '_', str($single_paired.paired_input.name)) + $ext
     #set $in2_name = re.sub('[^\w\-\s]', '_', str("%s_%s" % ($single_paired.paired_input.name, "R2"))) + $ext
-    #set out1 = $output_paired_coll.forward
-    #set out2 = $output_paired_coll.reverse
     ln -sf '$in1' '$in1_name' &&
     ln -sf '$in2' '$in2_name' &&
 #else
@@ -34,11 +32,6 @@
 
     #set $in1_name = re.sub('[^\w\-\s]', '_', str($in1.element_identifier)) + $ext
     ln -sf '$in1' '$in1_name' &&
-
-    #if str($single_paired.single_paired_selector) == 'paired':
-        #set $in2_name = re.sub('[^\w\-\s]', '_', str("%s_R2" % $in2.element_identifier)) + $ext
-        ln -sf '$in2' '$in2_name' &&
-    #end if
 #end if
 
 ## Run fastp
@@ -56,14 +49,14 @@
     -I '$in2_name'
     #if $single_paired.merge_reads.merge
         $single_paired.merge_reads.merge
-        --merged_out '$merged_reads'
+        --merged_out merged${ext}
         #if $single_paired.merge_reads.include_unmerged
             $single_paired.merge_reads.include_unmerged
         #else
-            --out1 '$unmerged_out1'
-            --out2 '$unmerged_out2'
-            --unpaired1 '$unpaired1'
-            --unpaired2 '$unpaired2'
+            --out1 'unmerged_R1${ext}'
+            --out2 'unmerged_R2${ext}'
+            --unpaired1 'unpaired_R1${ext}'
+            --unpaired2 'unpaired_R2${ext}'
         #end if
     #else
         -o first${ext}
@@ -211,21 +204,28 @@
 
 $read_mod_options.base_correction_options.correction
 
-#if str($single_paired.single_paired_selector).startswith('single')
-    &&
-    mv first${ext} '${out1}'
-#elif str($single_paired.single_paired_selector).startswith('paired') and not $single_paired.merge_reads.merge:
-    &&
-    mv first${ext} '${out1}'
-    &&
-    mv second${ext} '${out2}'
+#if str($single_paired.single_paired_selector) == 'paired_collection'
+    #if $single_paired.merge_reads.merge
+        && mv merged${ext} '$merged_reads'
+        #if not $single_paired.merge_reads.include_unmerged
+            && mv 'unmerged_R1${ext}' '$unmerged_out_coll.forward'
+            && mv 'unmerged_R2${ext}' '$unmerged_out_coll.reverse'
+            && mv 'unpaired_R1${ext}' '$unpaired_out_coll.forward'
+            && mv 'unpaired_R2${ext}' '$unpaired_out_coll.reverse'
+        #end if
+    #else
+        && mv first${ext} '$output_paired_coll.forward'
+        && mv second${ext} '$output_paired_coll.reverse'
+    #end if
+#else
+    && mv first${ext} '${out1}'
 #end if
+
 ]]></command>
     <inputs>
         <conditional name="single_paired">
             <param name="single_paired_selector" type="select" label="Single-end or paired reads">
                 <option value="single" selected="true">Single-end</option>
-                <option value="paired">Paired</option>
                 <option value="paired_collection">Paired Collection</option>
             </param>
             <when value="single">
@@ -233,16 +233,6 @@
                 <expand macro="adapter_trimming_options" />
                 <expand macro="global_trimming_options" />
             </when>
-            <when value="paired">
-                <expand macro="in" read_number="1" argument="-i"/>
-                <expand macro="in" read_number="2" argument="-I"/>
-                <expand macro="merge_reads" />
-                <expand macro="adapter_trimming_options">
-                    <expand macro="adapter_sequence" read_number="2"/>
-                    <expand macro="detect_adapter_for_pe" />
-                </expand>
-                <expand macro="global_trimming_options_paired" />
-            </when>
             <when value="paired_collection">
                 <param name="paired_input" type="data_collection" format="fastqsanger,fastqsanger.gz" label="Select paired collection(s)" collection_type="paired"/>
                 <expand macro="merge_reads" />
@@ -281,7 +271,7 @@
         </section>
 
         <!-- Read Modification Options -->
-         <section name="read_mod_options" title="Read Modification Options">
+        <section name="read_mod_options" title="Read Modification Options">
             <conditional name="polyg_tail_trimming">
                 <param name="trimming_select" type="select" label="PolyG tail trimming" help="This feature is enabled for NextSeq/NovaSeq data by default. NextSeq/NovaSeq data is detected by the machine ID in the FASTQ records.">
                     <option value="" selected="true">Automatic trimming for Illumina NextSeq/NovaSeq data</option>
@@ -335,48 +325,37 @@
     </inputs>
 
     <outputs>
-        <data name="out1" format_source="in1" label="${tool.name} on ${on_string}: Read 1 output">
-            <filter>single_paired['single_paired_selector'] in ["single", "paired"] and not single_paired['merge_reads']['merge']</filter>
+        <data name="out1" format_source="single_paired|in1" label="${tool.name} on ${on_string}: Read 1 output">
+            <filter>single_paired['single_paired_selector'] == "single"</filter>
         </data>
-        <data name="out2" format_source="in2" label="${tool.name} on ${on_string}: Read 2 output">
-            <filter>single_paired['single_paired_selector'] == "paired" and not single_paired['merge_reads']['merge']</filter>
-        </data>
-        <collection name="output_paired_coll" type="paired" format_source="paired_input['forward']" label="${tool.name} on ${on_string}: Paired-end output">
+        <collection name="output_paired_coll" type="paired" format_source="single_paired|paired_input['forward']" label="${tool.name} on ${on_string}: Paired-end output">
             <filter>single_paired['single_paired_selector'] == "paired_collection" and not single_paired['merge_reads']['merge']</filter>
         </collection>
+
         <data name="report_html" format="html" from_work_dir="fastp.html" label="${tool.name} on ${on_string}: HTML report">
             <filter>output_options['report_html'] is True</filter>
         </data>
         <data name="report_json" format="json" from_work_dir="fastp.json" label="${tool.name} on ${on_string}: JSON report">
             <filter>output_options['report_json'] is True</filter>
         </data>
-        <data name="merged_reads" format_source="in1" label="${tool.name} on ${on_string}: Merged reads">
-            <filter>single_paired['single_paired_selector'] in ["paired", "paired_collection"] and single_paired['merge_reads']['merge']</filter>
-            <expand macro="format_actions" read_number="1" forward_reverse="forward" />
-        </data>
-        <data name="unmerged_out1" format_source="in1" label="${tool.name} on ${on_string}: Unmerged filtered reads1">
-            <filter>single_paired['single_paired_selector'] in ["paired", "paired_collection"] and single_paired['merge_reads']['merge'] and not single_paired['merge_reads']['include_unmerged']</filter>
-            <expand macro="format_actions" read_number="1" forward_reverse="forward" />
+        <data name="merged_reads" format_source="single_paired|paired_input['forward']" label="${tool.name} on ${on_string}: Merged reads">
+            <filter>single_paired['single_paired_selector'] == "paired_collection" and single_paired['merge_reads']['merge']</filter>
         </data>
-        <data name="unmerged_out2" format_source="in2" label="${tool.name} on ${on_string}: Unmerged filtered reads2">
-            <filter>single_paired['single_paired_selector'] in ["paired", "paired_collection"] and single_paired['merge_reads']['merge'] and not single_paired['merge_reads']['include_unmerged']</filter>
-            <expand macro="format_actions" read_number="2" forward_reverse="reverse" />
-        </data>
-        <data name="unpaired1" format_source="in1" label="${tool.name} on ${on_string}: Unmerged unfiltered reads1">
-            <filter>single_paired['single_paired_selector'] in ["paired", "paired_collection"] and single_paired['merge_reads']['merge'] and not single_paired['merge_reads']['include_unmerged']</filter>
-            <expand macro="format_actions" read_number="1" forward_reverse="forward" />
-        </data>
-        <data name="unpaired2" format_source="in2" label="${tool.name} on ${on_string}: Unmerged unfiltered reads2">
-            <filter>single_paired['single_paired_selector'] in ["paired", "paired_collection"] and single_paired['merge_reads']['merge'] and not single_paired['merge_reads']['include_unmerged']</filter>
-            <expand macro="format_actions" read_number="2" forward_reverse="reverse" />
-        </data>
+        <collection name="unmerged_out_coll" type="paired" format_source="single_paired|paired_input['forward']" label="${tool.name} on ${on_string}: Unmerged filtered">
+            <filter>single_paired['single_paired_selector'] == "paired_collection" and single_paired['merge_reads']['merge'] and not single_paired['merge_reads']['include_unmerged']</filter>
+        </collection>
+        <collection name="unpaired_out_coll" type="paired" format_source="single_paired|paired_input['forward']" label="${tool.name} on ${on_string}: Unmerged unfiltered">
+            <filter>single_paired['single_paired_selector'] == "paired_collection" and single_paired['merge_reads']['merge'] and not single_paired['merge_reads']['include_unmerged']</filter>
+        </collection>
     </outputs>
 
     <tests>
         <!-- 1. Ensure default output works -->
         <test expect_num_outputs="3">
-            <param name="in1" ftype="fastqsanger" value="R1.fq"/>
-            <param name="single_paired_selector" value="single"/>
+            <conditional name="single_paired">
+                <param name="single_paired_selector" value="single"/>
+                <param name="in1" ftype="fastqsanger" value="R1.fq"/>
+            </conditional>
             <output name="out1" ftype="fastqsanger" file="out1.fq"/>
             <output name="report_html">
                 <assert_contents>
@@ -391,14 +370,18 @@
         </test>
         <!-- 2. Ensure paired collection works -->
         <test expect_num_outputs="4">
-            <param name="single_paired_selector" value="paired_collection"/>
-            <param name="paired_input">
-                <collection type="paired">
-                    <element name="forward" value="bwa-mem-fastq1.fq" ftype="fastqsanger" />
-                    <element name="reverse" value="bwa-mem-fastq2.fq" ftype="fastqsanger" />
-                </collection>
-            </param>
-            <param name="report_json" value="False" />
+            <conditional name="single_paired">
+                <param name="single_paired_selector" value="paired_collection"/>
+                <param name="paired_input">
+                    <collection type="paired">
+                        <element name="forward" value="bwa-mem-fastq1.fq" ftype="fastqsanger" />
+                        <element name="reverse" value="bwa-mem-fastq2.fq" ftype="fastqsanger" />
+                    </collection>
+                </param>
+            </conditional>
+            <section name="output_options">
+                <param name="report_json" value="False" />
+            </section>
             <output name="report_html">
                 <assert_contents>
                     <has_text text="fastp report"/>
@@ -411,82 +394,117 @@
         </test>
         <!-- 3. Ensure custom adapter works -->
         <test expect_num_outputs="2">
-            <param name="in1" ftype="fastqsanger" value="R1.fq"/>
-            <param name="single_paired_selector" value="single"/>
-            <param name="adapter_sequence1" value="ATCG"/>
-            <param name="report_json" value="False" />
+            <conditional name="single_paired">
+                <param name="single_paired_selector" value="single"/>
+                <param name="in1" ftype="fastqsanger" value="R1.fq"/>
+                <section name="adapter_trimming_options">
+                    <param name="adapter_sequence1" value="ATCG"/>
+                </section>
+            </conditional>
+            <section name="output_options">
+                <param name="report_json" value="False" />
+            </section>
             <output name="out1" ftype="fastqsanger" file="out_a.fq"/>
         </test>
         <!-- 4. Ensure UMI processing works -->
         <test expect_num_outputs="2">
-            <param name="in1" ftype="fastqsanger" value="R1.fq"/>
-            <param name="single_paired_selector" value="single"/>
-            <section name="umi_processing">
-                <param name="umi" value="true"/>
-                <param name="umi_loc" value="read1"/>
-                <param name="umi_len" value="8"/>
+            <conditional name="single_paired">
+                <param name="in1" ftype="fastqsanger" value="R1.fq"/>
+                <param name="single_paired_selector" value="single"/>
+            </conditional>
+            <section name="read_mod_options">
+                <section name="umi_processing">
+                    <param name="umi" value="true"/>
+                    <param name="umi_loc" value="read1"/>
+                    <param name="umi_len" value="8"/>
+                </section>
             </section>
-            <param name="report_json" value="False" />
+            <section name="output_options">
+                <param name="report_json" value="False" />
+            </section>
             <output name="out1" ftype="fastqsanger" file="out2.fq"/>
         </test>
         <!-- 5. Ensure UMI processing with different lengths works -->
         <test expect_num_outputs="2">
-            <param name="in1" ftype="fastqsanger" value="R1.fq"/>
-            <param name="single_paired_selector" value="single"/>
-            <section name="umi_processing">
-                <param name="umi" value="true"/>
-                <param name="umi_loc" value="read1"/>
-                <param name="umi_len" value="12"/>
+            <conditional name="single_paired">
+                <param name="in1" ftype="fastqsanger" value="R1.fq"/>
+                <param name="single_paired_selector" value="single"/>
+            </conditional>
+            <section name="read_mod_options">
+                <section name="umi_processing">
+                    <param name="umi" value="true"/>
+                    <param name="umi_loc" value="read1"/>
+                    <param name="umi_len" value="12"/>
+                </section>
             </section>
-            <param name="report_json" value="False" />
+            <section name="output_options">
+                <param name="report_json" value="False" />
+            </section>
             <output name="out1" ftype="fastqsanger" file="out3.fq"/>
         </test>
-        <!-- 6. Ensure paired-end fastqsanger works -->
-        <test expect_num_outputs="3">
-            <param name="in1" ftype="fastqsanger" value="bwa-mem-fastq1.fq"/>
-            <param name="in2" ftype="fastqsanger" value="bwa-mem-fastq2.fq"/>
-            <param name="single_paired_selector" value="paired"/>
-            <param name="report_json" value="False" />
-            <output name="out1" ftype="fastqsanger" file="out_bwa1.fq"/>
-            <output name="out2" ftype="fastqsanger" file="out_bwa2.fq"/>
+        <!-- 6. Ensure paired-end UMI processing of Read 1 works -->
+        <test expect_num_outputs="4">
+            <conditional name="single_paired">
+                <param name="single_paired_selector" value="paired_collection"/>
+                <param name="paired_input">
+                    <collection type="paired">
+                        <element name="forward" value="bwa-mem-fastq1.fq" ftype="fastqsanger" />
+                        <element name="reverse" value="bwa-mem-fastq2.fq" ftype="fastqsanger" />
+                    </collection>
+                </param>
+            </conditional>
+            <section name="read_mod_options">
+                <section name="umi_processing">
+                    <param name="umi" value="true"/>
+                    <param name="umi_loc" value="read1"/>
+                    <param name="umi_len" value="8"/>
+                </section>
+            </section>
+            <section name="output_options">
+                <param name="report_json" value="False" />
+            </section>
+            <output_collection name="output_paired_coll" type="paired">
+                <element name="forward" value="out_bwa_umi_read1_1.fq" ftype="fastqsanger"/>
+                <element name="reverse" value="out_bwa_umi_read1_2.fq" ftype="fastqsanger"/>
+            </output_collection>
         </test>
-        <!-- 7. Ensure paired-end UMI processing of Read 1 works -->
-        <test expect_num_outputs="3">
-            <param name="in1" ftype="fastqsanger" value="bwa-mem-fastq1.fq"/>
-            <param name="in2" ftype="fastqsanger" value="bwa-mem-fastq2.fq"/>
-            <param name="single_paired_selector" value="paired"/>
-            <section name="umi_processing">
-                <param name="umi" value="true"/>
-                <param name="umi_loc" value="read1"/>
-                <param name="umi_len" value="8"/>
+        <!-- 7. Ensure paired-end UMI processing of Read 2 works -->
+        <test expect_num_outputs="5">
+            <conditional name="single_paired">
+                <param name="single_paired_selector" value="paired_collection"/>
+                <param name="paired_input">
+                    <collection type="paired">
+                        <element name="forward" value="bwa-mem-fastq1.fq" ftype="fastqsanger" />
+                        <element name="reverse" value="bwa-mem-fastq2.fq" ftype="fastqsanger" />
+                    </collection>
+                </param>
+            </conditional>
+            <section name="read_mod_options">
+                <section name="umi_processing">
+                    <param name="umi" value="true"/>
+                    <param name="umi_loc" value="read2"/>
+                    <param name="umi_len" value="8"/>
+                </section>
             </section>
-            <param name="report_json" value="False" />
-            <output name="out1" ftype="fastqsanger" file="out_bwa_umi_read1_1.fq"/>
-            <output name="out2" ftype="fastqsanger" file="out_bwa_umi_read1_2.fq"/>
-        </test>
-        <!-- 8. Ensure paired-end UMI processing of Read 2 works -->
-        <test expect_num_outputs="4">
-            <param name="in1" ftype="fastqsanger" value="bwa-mem-fastq1.fq"/>
-            <param name="in2" ftype="fastqsanger" value="bwa-mem-fastq2.fq"/>
-            <param name="single_paired_selector" value="paired"/>
-            <section name="umi_processing">
-                <param name="umi" value="true"/>
-                <param name="umi_loc" value="read2"/>
-                <param name="umi_len" value="8"/>
-            </section>
-            <output name="out1" ftype="fastqsanger" file="out_bwa_umi_read2_1.fq"/>
-            <output name="out2" ftype="fastqsanger" file="out_bwa_umi_read2_2.fq"/>
+            <output_collection name="output_paired_coll" type="paired">
+                <element name="forward" value="out_bwa_umi_read2_1.fq" ftype="fastqsanger"/>
+                <element name="reverse" value="out_bwa_umi_read2_2.fq" ftype="fastqsanger"/>
+            </output_collection>
             <output name="report_json">
                 <assert_contents>
                     <has_text text="fastp report"/>
                 </assert_contents>
             </output>
         </test>
-        <!-- 9. Ensure JSON report output works -->
+        <!-- 8. Ensure JSON report output works -->
         <test expect_num_outputs="2">
-            <param name="in1" ftype="fastqsanger" value="R1.fq"/>
-            <param name="single_paired_selector" value="single"/>
-            <param name="report_html" value="False"/>
+            <conditional name="single_paired">
+                <param name="single_paired_selector" value="single"/>
+                <param name="in1" ftype="fastqsanger" value="R1.fq"/>
+            </conditional>
+            <section name="output_options">
+                <param name="report_html" value="False"/>
+            </section>
             <output name="out1" ftype="fastqsanger" file="out1.fq"/>
             <output name="report_json">
                 <assert_contents>
@@ -494,73 +512,109 @@
                 </assert_contents>
             </output>
         </test>
-        <!-- 10. Ensure polyG trimming works -->
+        <!-- 9. Ensure polyG trimming works -->
         <test expect_num_outputs="3">
-            <param name="in1" ftype="fastqsanger.gz" value="R1.fq.gz"/>
-            <param name="single_paired_selector" value="single"/>
-            <param name="trimming_select" value="-g"/>
-            <param name="poly_g_min_len" value="10"/>
-            <output name="out1" ftype="fastqsanger.gz" decompress="True" file="out1.fq.gz"/>
+            <conditional name="single_paired">
+                <param name="single_paired_selector" value="single"/>
+                <param name="in1" ftype="fastqsanger.gz" value="R1.fq.gz"/>
+            </conditional>
+            <section name="read_mod_options">
+                <conditional name="polyg_tail_trimming">
+                    <param name="trimming_select" value="-g"/>
+                    <param name="poly_g_min_len" value="10"/>
+                </conditional>
+            </section>
+            <output name="out1" ftype="fastqsanger.gz" decompress="true" file="out1.fq.gz"/>
             <output name="report_json">
                 <assert_contents>
                     <has_text text="fastp report"/>
                 </assert_contents>
             </output>
         </test>
-        <!-- 11. Ensure polyX trimming works -->
+        <!-- 10. Ensure polyX trimming works -->
         <test expect_num_outputs="3">
-            <param name="in1" ftype="fastqsanger.gz" value="R1.fq.gz"/>
-            <param name="single_paired_selector" value="single"/>
-            <param name="trimming_select" value="-G"/>
-            <param name="polyx_trimming_select" value="-x"/>
-            <param name="poly_x_min_len" value="10"/>
-            <output name="out1" ftype="fastqsanger.gz" decompress="True" file="out1.fq.gz"/>
+            <conditional name="single_paired">
+                <param name="single_paired_selector" value="single"/>
+                <param name="in1" ftype="fastqsanger.gz" value="R1.fq.gz"/>
+            </conditional>
+            <section name="read_mod_options">
+                <conditional name="polyg_tail_trimming">
+                    <param name="trimming_select" value="-G"/>
+                </conditional>
+                <conditional name="polyx_tail_trimming">
+                    <param name="polyx_trimming_select" value="-x"/>
+                    <param name="poly_x_min_len" value="10"/>
+                </conditional>
+            </section>
+            <output name="out1" ftype="fastqsanger.gz" decompress="true" file="out1.fq.gz"/>
             <output name="report_json">
                 <assert_contents>
                     <has_text text="fastp report"/>
                 </assert_contents>
             </output>
         </test>
-        <!-- 12. Test fastqsanger files with different length -->
+        <!-- 11. Test fastqsanger files with different length -->
         <test expect_exit_code="255" expect_failure="true">
-            <param name="single_paired_selector" value="paired_collection"/>
-            <param name="paired_input">
-                <collection type="paired">
-                    <element name="forward" value="bwa-mem-fastq1.fq" ftype="fastqsanger" />
-                    <element name="reverse" value="bwa-mem-fastq2_too_long.fq" ftype="fastqsanger" />
-                </collection>
-            </param>
+            <conditional name="single_paired">
+                <param name="single_paired_selector" value="paired_collection"/>
+                <param name="paired_input">
+                    <collection type="paired">
+                        <element name="forward" value="bwa-mem-fastq1.fq" ftype="fastqsanger" />
+                        <element name="reverse" value="bwa-mem-fastq2_too_long.fq" ftype="fastqsanger" />
+                    </collection>
+                </param>
+            </conditional>
         </test>
-        <!-- 13. Test merge reads in combination with paired -->
-        <test expect_num_outputs="5">
-            <param name="in1" ftype="fastqsanger" value="bwa-mem-fastq1.fq"/>
-            <param name="in2" ftype="fastqsanger" value="bwa-mem-fastq2.fq"/>
-            <param name="single_paired_selector" value="paired"/>
-            <param name="merge" value="--merge" />
-            <param name="report_html" value="False" />
-            <param name="report_json" value="False" />
+        <!-- 12. Test merge reads in combination with paired -->
+        <test expect_num_outputs="7">
+            <conditional name="single_paired">
+                <param name="single_paired_selector" value="paired_collection"/>
+                <param name="paired_input">
+                    <collection type="paired">
+                        <element name="forward" value="bwa-mem-fastq1.fq" ftype="fastqsanger" />
+                        <element name="reverse" value="bwa-mem-fastq2.fq" ftype="fastqsanger" />
+                    </collection>
+                </param>
+                <conditional name="merge_reads">
+                    <param name="merge" value="--merge" />
+                </conditional>
+            </conditional>
+            <section name="output_options">
+                <param name="report_json" value="False" />
+                <param name="report_html" value="False" />
+            </section>
             <output name="merged_reads" ftype="fastqsanger" file="bwa-mem-merged-reads.fastqsanger" />
-            <output name="unmerged_out1" ftype="fastqsanger" file="bwa-mem-unmerged-filtered-reads1.fastqsanger" />
-            <output name="unmerged_out2" ftype="fastqsanger" file="bwa-mem-unmerged-filtered-reads2.fastqsanger" />
-            <output name="unpaired1" ftype="fastqsanger" file="bwa-mem-unmerged-unfiltered-reads1.fastqsanger" />
-            <output name="unpaired2" ftype="fastqsanger">
-                <assert_contents>
-                    <has_size size="0" />
-                </assert_contents>
-            </output>
+            <output_collection name="unmerged_out_coll" type="paired">
+                <element name="forward" value="bwa-mem-unmerged-filtered-reads1.fastqsanger" ftype="fastqsanger"/>
+                <element name="reverse" value="bwa-mem-unmerged-filtered-reads2.fastqsanger" ftype="fastqsanger"/>
+            </output_collection>
+            <output_collection name="unpaired_out_coll" type="paired">
+                <element name="forward" value="bwa-mem-unmerged-unfiltered-reads1.fastqsanger" ftype="fastqsanger"/>
+                <element name="reverse" ftype="fastqsanger">
+                    <assert_contents>
+                        <has_size size="0" />
+                    </assert_contents>
+                </element>
+            </output_collection>
         </test>
-        <!-- 14. Test merge and include_unmerged in combination with paired collection -->
+        <!-- 13. Test merge and include_unmerged in combination with paired collection -->
         <test expect_num_outputs="2">
-            <param name="single_paired_selector" value="paired_collection"/>
-            <param name="paired_input">
-                <collection type="paired">
-                    <element name="forward" value="bwa-mem-fastq1.fq" ftype="fastqsanger" />
-                    <element name="reverse" value="bwa-mem-fastq2.fq" ftype="fastqsanger" />
-                </collection>
-            </param>
-            <param name="merge" value="--merge" />
-            <param name="include_unmerged" value="--include_unmerged" />
-            <param name="report_html" value="False" />
+            <conditional name="single_paired">
+                <param name="single_paired_selector" value="paired_collection"/>
+                <param name="paired_input">
+                    <collection type="paired">
+                        <element name="forward" value="bwa-mem-fastq1.fq" ftype="fastqsanger" />
+                        <element name="reverse" value="bwa-mem-fastq2.fq" ftype="fastqsanger" />
+                    </collection>
+                </param>
+                <conditional name="merge_reads">
+                    <param name="merge" value="--merge" />
+                    <param name="include_unmerged" value="true" />
+                </conditional>
+            </conditional>
+            <section name="output_options">
+                <param name="report_html" value="False" />
+            </section>
             <output name="merged_reads" ftype="fastqsanger" file="bwa-mem-merged-read-include-unmerged.fastqsanger" />
             <output name="report_json">
                 <assert_contents>
@@ -568,24 +622,85 @@
                 </assert_contents>
             </output>
         </test>
-        <!--15. Test paired collection in combination with compressed input-->
+        <!-- 14. Test merge reads in combination with paired -->
+        <test expect_num_outputs="7">
+            <conditional name="single_paired">
+                <param name="single_paired_selector" value="paired_collection"/>
+                <param name="paired_input">
+                    <collection type="paired">
+                        <element name="forward" value="bwa-mem-fastq1.fq.gz" ftype="fastqsanger.gz" />
+                        <element name="reverse" value="bwa-mem-fastq2.fq.gz" ftype="fastqsanger.gz" />
+                    </collection>
+                </param>
+                <conditional name="merge_reads">
+                    <param name="merge" value="--merge" />
+                </conditional>
+            </conditional>
+            <section name="output_options">
+                <param name="report_html" value="False" />
+                <param name="report_json" value="False" />
+            </section>
+            <output name="merged_reads" ftype="fastqsanger.gz" decompress="true" file="bwa-mem-merged-reads.fastqsanger.gz" />
+            <output_collection name="unmerged_out_coll" type="paired">
+                <element name="forward" value="bwa-mem-unmerged-filtered-reads1.fastqsanger.gz" decompress="true" ftype="fastqsanger.gz"/>
+                <element name="reverse" value="bwa-mem-unmerged-filtered-reads2.fastqsanger.gz" decompress="true" ftype="fastqsanger.gz"/>
+            </output_collection>
+            <output_collection name="unpaired_out_coll" type="paired">
+                <element name="forward" value="bwa-mem-unmerged-unfiltered-reads1.fastqsanger.gz" decompress="true" ftype="fastqsanger.gz"/>
+                <element name="reverse" ftype="fastqsanger.gz">
+                    <assert_contents>
+                        <has_size size="0" />
+                    </assert_contents>
+                </element>
+            </output_collection>
+        </test>
+        <!-- 15. Test merge and include_unmerged in combination with paired collection -->
+        <test expect_num_outputs="2">
+            <conditional name="single_paired">
+                <param name="single_paired_selector" value="paired_collection"/>
+                <param name="paired_input">
+                    <collection type="paired">
+                        <element name="forward" value="bwa-mem-fastq1.fq.gz" ftype="fastqsanger.gz" />
+                        <element name="reverse" value="bwa-mem-fastq2.fq.gz" ftype="fastqsanger.gz" />
+                    </collection>
+                </param>
+                <conditional name="merge_reads">
+                    <param name="merge" value="--merge" />
+                    <param name="include_unmerged" value="true" />
+                </conditional>
+            </conditional>
+            <section name="output_options">
+                <param name="report_html" value="False" />
+            </section>
+            <output name="merged_reads" ftype="fastqsanger.gz" decompress="true" file="bwa-mem-merged-read-include-unmerged.fastqsanger.gz" />
+            <output name="report_json">
+                <assert_contents>
+                    <has_text text="fastp report"/>
+                </assert_contents>
+            </output>
+        </test>
+        <!--16. Test paired collection in combination with compressed input-->
         <test expect_num_outputs="4">
-            <param name="single_paired_selector" value="paired_collection"/>
-            <param name="paired_input">
-                <collection type="paired">
-                    <element name="forward" value="bwa-mem-fastq-paired-collection/input_forward.fastqsanger.gz" ftype="fastqsanger.gz" />
-                    <element name="reverse" value="bwa-mem-fastq-paired-collection/input_reverse.fastqsanger.gz" ftype="fastqsanger.gz" />
-                </collection>
-            </param>
-            <param name="report_json" value="False" />
+            <conditional name="single_paired">
+                <param name="single_paired_selector" value="paired_collection"/>
+                <param name="paired_input">
+                    <collection type="paired">
+                        <element name="forward" value="bwa-mem-fastq-paired-collection/input_forward.fastqsanger.gz" ftype="fastqsanger.gz" />
+                        <element name="reverse" value="bwa-mem-fastq-paired-collection/input_reverse.fastqsanger.gz" ftype="fastqsanger.gz" />
+                    </collection>
+                </param>
+            </conditional>
+            <section name="output_options">
+                <param name="report_json" value="False" />
+            </section>
             <output name="report_html">
                 <assert_contents>
                     <has_text text="fastp report"/>
                 </assert_contents>
             </output>
             <output_collection name="output_paired_coll" type="paired">
-                <element name="forward" value="bwa-mem-fastq-paired-collection/output_forward.fastqsanger.gz" decompress="True" ftype="fastqsanger.gz"/>
-                <element name="reverse" value="bwa-mem-fastq-paired-collection/output_reverse.fastqsanger.gz" decompress="True" ftype="fastqsanger.gz"/>
+                <element name="forward" value="bwa-mem-fastq-paired-collection/output_forward.fastqsanger.gz" decompress="true" ftype="fastqsanger.gz"/>
+                <element name="reverse" value="bwa-mem-fastq-paired-collection/output_reverse.fastqsanger.gz" decompress="true" ftype="fastqsanger.gz"/>
             </output_collection>
         </test>
     </tests>
@@ -633,10 +748,8 @@
 
     * Processed reads
     * Merged reads
-    * Unmerged filtered reads1, reads that cannot be merged successfully, but both pass all the filters.
-    * Unmerged filtered reads2, reads that cannot be merged successfully, but both pass all the filters.
-    * Unmerged unfiltered reads1, reads that cannot be merged, **read1** passes filters but **read2** doesn't.
-    * Unmerged unfiltered reads2, reads that cannot be merged, **read2** passes filters but **read1** doesn't.
+    * Unmerged filtered reads, reads that cannot be merged successfully, but both pass all the filters.
+    * Unmerged unfiltered reads, reads that cannot be merged, i.e. **forward** passes filters but **reverse** doesn't.
 
 Optionally, under **Output Options** you can choose to output
 
@@ -649,4 +762,4 @@
     <citations>
         <citation type="doi">10.1101/274100</citation>
     </citations>
-</tool>
\ No newline at end of file
+</tool>
--- a/macros.xml	Fri Nov 15 15:31:53 2024 +0000
+++ b/macros.xml	Sat Feb 08 15:15:16 2025 +0000
@@ -69,20 +69,4 @@
             help="The minimum length to detect polyG in the read tail. 10 by default."/>
     </xml>
 
-    <xml name="format_actions" token_read_number="1" token_forward_reverse="forward">
-        <actions>
-            <conditional name="single_paired.single_paired_selector">
-                <when value="paired">
-                    <action type="format">
-                        <option type="from_param" name="single_paired.in@READ_NUMBER@" param_attribute="ext" />
-                    </action>
-                </when>
-                <when value="paired_collection">
-                    <action type="format">
-                        <option type="from_param" name="single_paired.paired_input" param_attribute="@FORWARD_REVERSE@.ext" />
-                    </action>
-                </when>
-            </conditional>
-        </actions>
-    </xml>
 </macros>
\ No newline at end of file
Binary file test-data/bwa-mem-fastq1.fq.gz has changed
Binary file test-data/bwa-mem-fastq2.fq.gz has changed
Binary file test-data/bwa-mem-merged-read-include-unmerged.fastqsanger.gz has changed
Binary file test-data/bwa-mem-merged-reads.fastqsanger.gz has changed
Binary file test-data/bwa-mem-unmerged-filtered-reads1.fastqsanger.gz has changed
Binary file test-data/bwa-mem-unmerged-filtered-reads2.fastqsanger.gz has changed
Binary file test-data/bwa-mem-unmerged-unfiltered-reads1.fastqsanger.gz has changed
Binary file test-data/out1.fq.gz has changed