diff dada2_primercheck.xml @ 0:40cd037434d9 draft

planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/tools/dada2 commit 3dd3145db6ed58efc3bf5f71e96515173967fc72
author iuc
date Sat, 07 Dec 2024 08:41:16 +0000
parents
children c7d45735c578
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dada2_primercheck.xml	Sat Dec 07 08:41:16 2024 +0000
@@ -0,0 +1,162 @@
+<tool id="dada2_primerCheck" name="dada2: primer check" version="@DADA2_VERSION@+galaxy@WRAPPER_VERSION@" profile="19.09">
+    <description></description>
+    <macros>
+        <import>macros.xml</import>
+    </macros>
+    <expand macro="bio_tools"/>
+    <expand macro="requirements"/>
+    <expand macro="stdio"/>
+    <expand macro="version_command"/>
+    <command detect_errors="exit_code"><![CDATA[
+Rscript '$dada2_script'
+    ]]></command>
+    <configfiles>
+        <configfile name="dada2_script"><![CDATA[
+#import re
+library(Biostrings, quietly=T)
+library(ShortRead, quietly=T)
+
+FWD <- "$forward_primer"
+REV <- "$reverse_primer"
+
+allOrients <- function(primer) {
+    # Create all orientations of the input sequence
+    dna <- DNAString(primer)  # The Biostrings works w/ DNAString objects rather than character vectors
+    orients <- c(Forward = dna, Complement = Biostrings::complement(dna), Reverse = Biostrings::reverse(dna), RevComp = Biostrings::reverseComplement(dna))
+    return(sapply(orients, toString))  # Convert back to character vector
+}
+FWD.orients <- allOrients(FWD)
+REV.orients <- allOrients(REV)
+
+primerHits <- function(primer, fn) {
+    ## Counts number of reads in which the primer is found
+    nhits <- vcountPattern(primer, sread(readFastq(fn)), fixed = FALSE)
+    return(sum(nhits > 0))
+}
+
+df <- NULL;
+#for $i, $read in enumerate($paired_cond.reads):
+    #set elid = re.sub('[^\w\-\.]', '_', str($read.element_identifier))
+    #if $paired_cond.paired_select == "single"
+        #set fwd_reads = $read
+    #elif $paired_cond.paired_select == "separate"
+        #set fwd_reads = $read
+        #set rev_reads = $paired_cond.sdaer[i]
+    #else
+        #set fwd_reads = $read.forward
+        #set rev_reads = $read.reverse
+    #end if
+    df <- rbind(df, c('$elid', 'FWD', 'FWD', sapply(FWD.orients, primerHits, fn = '$fwd_reads')))
+    df <- rbind(df, c('$elid', 'REV', 'FWD', sapply(REV.orients, primerHits, fn = '$fwd_reads')))
+    #if $paired_cond.paired_select != "single"
+        #if $paired_cond.paired_select == "separate"
+            #set elid = re.sub('[^\w\-\.]', '_', str($paired_cond.sdaer[i].element_identifier))
+        #end if
+        df <- rbind(df, c('$elid', 'FWD', 'REV', sapply(FWD.orients, primerHits, fn = '$rev_reads')))
+        df <- rbind(df, c('$elid', 'REV', 'REV', sapply(REV.orients, primerHits, fn = '$rev_reads')))
+    #end if
+#end for
+colnames(df) <- c('Sample', 'Primer', 'ReadDir', 'Sequence', 'Complement', 'Reverse', 'RevComp')
+write.table(df, "$out", quote=F, sep="\t", row.names = F, col.names = T)
+    ]]></configfile>
+    </configfiles>
+    <inputs>
+        <expand macro="fastq_input" multiple="True" collection_type="list:paired" argument_fwd="fl" argument_rev="fl"/>
+        <param name="forward_primer" type="text" label="Forward primer sequence">
+            <validator type="empty_field" message="You need to specify a forward primer sequence"/>
+        </param>
+        <param name="reverse_primer" type="text" label="Reverse primer sequence">
+            <validator type="empty_field" message="You need to specify a reverse primer sequence"/>
+        </param>
+    </inputs>
+    <outputs>
+        <data name="out" format="tabular"/>
+    </outputs>
+    <tests>
+        <!-- paired data in paired collection -->
+        <test expect_num_outputs="1">
+            <conditional name="paired_cond">
+                <param name="paired_select" value="paired"/>
+                <param name="reads">
+                    <collection type="list:paired">
+                        <element name="F3D0_S188_L001">
+                            <collection type="paired">
+                                <element name="forward" value="F3D0_S188_L001_R1_001.fastq.gz" ftype="fastqsanger.gz"/>
+                                <element name="reverse" value="F3D0_S188_L001_R2_001.fastq.gz" ftype="fastqsanger.gz"/>
+                            </collection>
+                        </element>
+                        <element name="F3D141_S207_L001">
+                            <collection type="paired">
+                                <element name="forward" value="F3D141_S207_L001_R1_001.fastq.gz" ftype="fastqsanger.gz"/>
+                                <element name="reverse" value="F3D141_S207_L001_R2_001.fastq.gz" ftype="fastqsanger.gz"/>
+                            </collection>
+                        </element>
+                    </collection>
+                </param>
+            </conditional>
+
+            <param name="forward_primer" value="ACCTGCGGARGGATCA"/>
+            <param name="reverse_primer" value="GAGATCCRTTGYTRAAAGTT"/>
+            <output name="out">
+                <assert_contents>
+                    <has_n_lines n="9"/>
+                    <has_n_columns n="7"/>
+                </assert_contents>
+            </output>
+        </test>
+        <!-- paired data in separate collection -->
+        <test expect_num_outputs="1">
+            <conditional name="paired_cond">
+                <param name="paired_select" value="separate"/>
+                <param name="reads" value="F3D0_S188_L001_R1_001.fastq.gz,F3D141_S207_L001_R1_001.fastq.gz" ftype="fastqsanger.gz"/>
+                <param name="sdaer" value="F3D0_S188_L001_R2_001.fastq.gz,F3D141_S207_L001_R2_001.fastq.gz" ftype="fastqsanger.gz"/>
+            </conditional>
+
+            <param name="forward_primer" value="ACCTGCGGARGGATCA"/>
+            <param name="reverse_primer" value="GAGATCCRTTGYTRAAAGTT"/>
+            <output name="out">
+                <assert_contents>
+                    <has_n_lines n="9"/>
+                    <has_n_columns n="7"/>
+                </assert_contents>
+            </output>
+        </test>
+        <!-- single end data -->
+        <test expect_num_outputs="1">
+            <conditional name="paired_cond">
+                <param name="paired_select" value="single"/>
+                <param name="reads" value="F3D0_S188_L001_R1_001.fastq.gz" ftype="fastqsanger.gz"/>
+            </conditional>
+            <param name="forward_primer" value="ACCTGCGGARGGATCA"/>
+            <param name="reverse_primer" value="GAGATCCRTTGYTRAAAGTT"/>
+            <output name="out">
+                <assert_contents>
+                    <has_n_lines n="3"/>
+                    <has_n_columns n="7"/>
+                </assert_contents>
+            </output>
+        </test>
+    </tests>
+
+    <help><![CDATA[
+Description
+...........
+
+Simple check for primer sequences in sequencing data. The tool counts the number
+of occurrences of the primer sequence, its complement, the reverse and the
+reverse complement.
+
+See also: https://benjjneb.github.io/dada2/ITS_workflow.html#identify-primers
+
+Usage
+.....
+
+**Input** FASTQ datasets and forward and reverse primers
+
+**Output** a table listing the counts of the different occurrences in the read files.
+
+
+@HELP_OVERVIEW@
+    ]]></help>
+    <expand macro="citations"/>
+</tool>