Mercurial > repos > iuc > ngsderive_strandedness
changeset 0:bb8409cb3005 draft default tip
planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/main/tools/ngsderive commit 431830f24865316ab81526f053c171abf9f09529
| author | iuc |
|---|---|
| date | Fri, 09 Jan 2026 09:57:07 +0000 |
| parents | |
| children | |
| files | ngsderive_strandedness.xml test-data/forward_stranded.bam test-data/reverse_stranded.bam test-data/strandedness_test.gtf test-data/strandedness_test.gtf.gz test-data/unstranded.bam |
| diffstat | 6 files changed, 158 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ngsderive_strandedness.xml Fri Jan 09 09:57:07 2026 +0000 @@ -0,0 +1,140 @@ +<tool id="ngsderive_strandedness" name="ngsderive strandedness" version="@TOOL_VERSION@+galaxy@VERSION_SUFFIX@" profile="23.0"> + <description>infers strandedness from RNA-seq BAM files</description> + <macros> + <token name="@TOOL_VERSION@">4.0.0</token> + <token name="@VERSION_SUFFIX@">0</token> + </macros> + <requirements> + <requirement type="package" version="@TOOL_VERSION@">ngsderive</requirement> + </requirements> + <command detect_errors="exit_code"><![CDATA[ +ln -s '${alignment_input}' input.bam && +ln -s '${alignment_input.metadata.bam_index}' input.bam.bai && +ln -s '${gtf_input}' annotation.${gtf_input.ext} && + +ngsderive strandedness + input.bam + -g annotation.${gtf_input.ext} + -n $n_genes + -m $min_reads_per_gene + -q $mapq + $split_by_rg + > '${output}' + ]]></command> + <inputs> + <param name="alignment_input" type="data" format="bam" label="Input alignment file" help="Aligned paired-end RNA-seq reads in BAM format."/> + <param name="gtf_input" type="data" format="gtf,gtf.gz" label="Gene annotation file (GTF)" help="Gene model in GTF format. The file will be automatically sorted and indexed if necessary."/> + <param argument="-n" name="n_genes" type="integer" value="1000" min="1" label="Number of genes to sample" help="Number of random genes to sample for strandedness inference."/> + <param argument="-m" name="min_reads_per_gene" type="integer" value="10" min="1" label="Minimum reads per gene" help="Minimum number of reads per gene required for inclusion in the analysis."/> + <param argument="-q" name="mapq" type="integer" value="30" min="0" label="Minimum mapping quality (MAPQ)" help="Minimum MAPQ score for a read to be considered."/> + <param argument="--split-by-rg" type="boolean" truevalue="--split-by-rg" falsevalue="" checked="false" label="Split results by read group" help="Output one entry per read group in addition to an overall entry."/> + </inputs> + <outputs> + <data name="output" format="tabular" label="${tool.name} on ${on_string}"> + <actions> + <action name="column_names" type="metadata" default="File,ReadGroup,TotalReads,ForwardPct,ReversePct,Predicted"/> + </actions> + </data> + </outputs> + <tests> + <!-- Test forward-stranded data --> + <test expect_num_outputs="1"> + <param name="alignment_input" value="forward_stranded.bam"/> + <param name="gtf_input" value="strandedness_test.gtf"/> + <output name="output"> + <assert_contents> + <has_n_columns n="6"/> + <has_text text="Stranded-Forward"/> + </assert_contents> + </output> + </test> + <!-- Test reverse-stranded data --> + <test expect_num_outputs="1"> + <param name="alignment_input" value="reverse_stranded.bam"/> + <param name="gtf_input" value="strandedness_test.gtf"/> + <output name="output"> + <assert_contents> + <has_n_columns n="6"/> + <has_text text="Stranded-Reverse"/> + </assert_contents> + </output> + </test> + <!-- Test unstranded data --> + <test expect_num_outputs="1"> + <param name="alignment_input" value="unstranded.bam"/> + <param name="gtf_input" value="strandedness_test.gtf"/> + <output name="output"> + <assert_contents> + <has_n_columns n="6"/> + <has_text text="Unstranded"/> + </assert_contents> + </output> + </test> + <!-- Test with gzipped GTF annotation file --> + <test expect_num_outputs="1"> + <param name="alignment_input" value="reverse_stranded.bam"/> + <param name="gtf_input" value="strandedness_test.gtf.gz" ftype="gtf.gz"/> + <output name="output"> + <assert_contents> + <has_n_columns n="6"/> + <has_text text="Stranded-Reverse"/> + </assert_contents> + </output> + </test> + </tests> + <help><![CDATA[ +**What it does** + +ngsderive strandedness infers the strandedness protocol used to generate RNA-seq data by +analyzing read alignments against a gene model. It can determine whether your data was +generated using a Stranded-Forward, Stranded-Reverse, or Unstranded protocol. + +This tool is useful when you have RNA-seq data but are unsure about the library preparation +protocol used. Knowing the correct strandedness is essential for accurate gene expression +quantification. + +**How it works** + +The tool randomly samples genes from the provided gene model and examines how reads align +to those genes. Based on the proportion of reads mapping in the forward vs reverse orientation, +it classifies the library as: + +- **Unstranded**: ~40-60% forward reads +- **Stranded-Forward**: ≥80% forward reads +- **Stranded-Reverse**: ≥80% reverse reads +- **Inconclusive**: Results don't clearly indicate a strandedness type + +**Inputs** + +- **Alignment file**: Paired-end RNA-seq alignments in BAM format +- **Gene annotation**: GTF file with gene models (gzipped GTF supported) + +**Output** + +A tabular file with the following columns: + +- **File**: Name of the input BAM file +- **ReadGroup**: Read group identifier (or "overall" for combined results) +- **TotalReads**: Number of reads used in the analysis +- **ForwardPct**: Percentage of reads supporting forward strandedness +- **ReversePct**: Percentage of reads supporting reverse strandedness +- **Predicted**: The inferred strandedness (Stranded-Forward, Stranded-Reverse, Unstranded, or Inconclusive) + +**Notes** + +- Only paired-end reads are currently supported +- For best results, ensure your BAM file has sufficient read depth + +For more information, see the `ngsderive documentation <https://stjudecloud.github.io/ngsderive/subcommands/strandedness/>`_. + ]]></help> + <citations> + <citation type="bibtex"> +@software{ngsderive, + author = {{St. Jude Cloud Team}}, + title = {ngsderive: Forensic analysis tool for NGS data}, + url = {https://github.com/stjudecloud/ngsderive}, + year = {2020} +} + </citation> + </citations> +</tool>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/strandedness_test.gtf Fri Jan 09 09:57:07 2026 +0000 @@ -0,0 +1,18 @@ +chr1 test gene 1000 2000 . + . gene_id "GENE_PLUS_1"; gene_name "GENE_PLUS_1"; +chr1 test transcript 1000 2000 . + . gene_id "GENE_PLUS_1"; transcript_id "GENE_PLUS_1.1"; +chr1 test exon 1000 2000 . + . gene_id "GENE_PLUS_1"; transcript_id "GENE_PLUS_1.1"; exon_number "1"; +chr1 test gene 3000 4000 . - . gene_id "GENE_MINUS_1"; gene_name "GENE_MINUS_1"; +chr1 test transcript 3000 4000 . - . gene_id "GENE_MINUS_1"; transcript_id "GENE_MINUS_1.1"; +chr1 test exon 3000 4000 . - . gene_id "GENE_MINUS_1"; transcript_id "GENE_MINUS_1.1"; exon_number "1"; +chr1 test gene 5000 6000 . + . gene_id "GENE_PLUS_2"; gene_name "GENE_PLUS_2"; +chr1 test transcript 5000 6000 . + . gene_id "GENE_PLUS_2"; transcript_id "GENE_PLUS_2.1"; +chr1 test exon 5000 6000 . + . gene_id "GENE_PLUS_2"; transcript_id "GENE_PLUS_2.1"; exon_number "1"; +chr1 test gene 7000 8000 . - . gene_id "GENE_MINUS_2"; gene_name "GENE_MINUS_2"; +chr1 test transcript 7000 8000 . - . gene_id "GENE_MINUS_2"; transcript_id "GENE_MINUS_2.1"; +chr1 test exon 7000 8000 . - . gene_id "GENE_MINUS_2"; transcript_id "GENE_MINUS_2.1"; exon_number "1"; +chr1 test gene 9000 10000 . + . gene_id "GENE_PLUS_3"; gene_name "GENE_PLUS_3"; +chr1 test transcript 9000 10000 . + . gene_id "GENE_PLUS_3"; transcript_id "GENE_PLUS_3.1"; +chr1 test exon 9000 10000 . + . gene_id "GENE_PLUS_3"; transcript_id "GENE_PLUS_3.1"; exon_number "1"; +chr1 test gene 11000 12000 . - . gene_id "GENE_MINUS_3"; gene_name "GENE_MINUS_3"; +chr1 test transcript 11000 12000 . - . gene_id "GENE_MINUS_3"; transcript_id "GENE_MINUS_3.1"; +chr1 test exon 11000 12000 . - . gene_id "GENE_MINUS_3"; transcript_id "GENE_MINUS_3.1"; exon_number "1";
