view tools/get_orfs_or_cdss/get_orfs_or_cdss.xml @ 9:a06ad07431ba draft

v0.2.1 Adds table 24; Depends on Biopython 1.67 via Tool Shed package or bioconda.
author peterjc
date Wed, 10 May 2017 13:24:46 -0400
parents 09a8be9247ca
children 01b0488d9cfb
line wrap: on
line source

<tool id="get_orfs_or_cdss" name="Get open reading frames (ORFs) or coding sequences (CDSs)" version="0.2.1">
    <description>e.g. to get peptides from ESTs</description>
    <requirements>
        <requirement type="package" version="1.67">biopython</requirement>
    </requirements>
    <stdio>
        <!-- Anything other than zero is an error -->
        <exit_code range="1:" />
        <exit_code range=":-1" />
    </stdio>
    <version_command interpreter="python">get_orfs_or_cdss.py --version</version_command>
    <command interpreter="python">
get_orfs_or_cdss.py -i $input_file -f $input_file.ext --table $table -t $ftype -e $ends -m $mode --min_len $min_len -s $strand --on $out_nuc_file --op $out_prot_file --ob $out_bed_file --og $out_gff3_file
    </command>
    <inputs>
        <param name="input_file" type="data" format="fasta,fastq,sff" label="Sequence file (nucleotides)" help="FASTA, FASTQ, or SFF format." />
        <param name="table" type="select" label="Genetic code" help="Tables from the NCBI, these determine the start and stop codons">
            <option value="1">1. Standard</option>
            <option value="2">2. Vertebrate Mitochondrial</option>
            <option value="3">3. Yeast Mitochondrial</option>
            <option value="4">4. Mold, Protozoan, Coelenterate Mitochondrial and Mycoplasma/Spiroplasma</option>
            <option value="5">5. Invertebrate Mitochondrial</option>
            <option value="6">6. Ciliate Macronuclear and Dasycladacean</option>
            <option value="9">9. Echinoderm Mitochondrial</option>
            <option value="10">10. Euplotid Nuclear</option>
            <option value="11">11. Bacterial</option>
            <option value="12">12. Alternative Yeast Nuclear</option>
            <option value="13">13. Ascidian Mitochondrial</option>
            <option value="14">14. Flatworm Mitochondrial</option>
            <option value="15">15. Blepharisma Macronuclear</option>
            <option value="16">16. Chlorophycean Mitochondrial</option>
            <option value="21">21. Trematode Mitochondrial</option>
            <option value="22">22. Scenedesmus obliquus</option>
            <option value="23">23. Thraustochytrium Mitochondrial</option>
            <option value="24">24. Pterobranchia Mitochondrial</option>
            <option value="25">25. Candidate Division SR1 and Gracilibacteria</option>
            <!-- TODO, these are not in Biopython 1.67
            <option value="26">26. Pachysolen tannophilus Nuclear</option>
            <option value="26">27. Karyorelict Nuclear</option>
            <option value="26">28. Condylostoma Nuclear</option>
            <option value="26">29. Mesodinium Nuclear</option>
            <option value="26">30. Peritrich Nuclear</option>
            <option value="26">31. Blastocrithidia Nuclear</option>
            -->
        </param>
        <param name="ftype" type="select" value="True" label="Look for ORFs or CDSs">
            <option value="ORF">Look for ORFs (check for stop codons only, ignore start codons)</option>
            <option value="CDS">Look for CDSs (with start and stop codons)</option>
        </param>
        <param name="ends" type="select" value="open" label="Sequence end treatment">
            <option value="open">Open ended (will allow missing start/stop codons at the ends)</option>
            <option value="closed">Complete (will check for start/stop codons at the ends)</option>
            <!-- TODO? Circular, for using this on finished bacteria etc -->
        </param>
        <param name="mode" type="select" label="Selection criteria" help="Suppose a sequence has ORFs/CDSs of lengths 100, 102 and 102 -- which should be taken? These options would return 3, 2 or 1 ORF.">
            <option value="all">All ORFs/CDSs from each sequence</option>
            <option value="top">All ORFs/CDSs from each sequence with the maximum length</option>
            <option value="one">First ORF/CDS from each sequence with the maximum length</option>
        </param>
        <param name="min_len" type="integer" size="5" value="30" label="Minimum length ORF/CDS (in amino acids, e.g. 30 aa = 90 bp plus any stop codon)" />
        <param name="strand" type="select" label="Strand to search" help="Use the forward only option if your sequence directionality is known (e.g. from poly-A tails, or strand specific RNA sequencing).">
            <option value="both">Search both the forward and reverse strand</option>
            <option value="forward">Only search the forward strand</option>
            <option value="reverse">Only search the reverse strand</option>
        </param>
    </inputs>
    <outputs>
        <data name="out_nuc_file" format="fasta" label="${ftype.value}s (nucleotides)" />
        <data name="out_prot_file" format="fasta" label="${ftype.value}s (amino acids)" />
        <data name="out_bed_file" format="bed6" label="${ftype.value}s (bed)" />
        <data name="out_gff3_file" format="gff3" label="${ftype.value}s (gff3)" />
    </outputs>
    <tests>
        <test>
            <param name="input_file" value="get_orf_input.fasta" />
            <param name="table" value="1" />
            <param name="ftype" value="CDS" />
            <param name="ends" value="open" />
            <param name="mode" value="all" />
            <param name="min_len" value="10" />
            <param name="strand" value="forward" />
            <output name="out_nuc_file" file="get_orf_input.t1_nuc_out.fasta" />
            <output name="out_prot_file" file="get_orf_input.t1_prot_out.fasta" />
            <output name="out_bed_file" file="get_orf_input.t1_bed_out.bed" />
            <output name="out_gff3_file" file="get_orf_input.t1_gff3_out.gff3" />
        </test>
        <test>
            <param name="input_file" value="get_orf_input.fasta" />
            <param name="table" value="11" />
            <param name="ftype" value="CDS" />
            <param name="ends" value="closed" />
            <param name="mode" value="all" />
            <param name="min_len" value="10" />
            <param name="strand" value="forward" />
            <output name="out_nuc_file" file="get_orf_input.t11_nuc_out.fasta" />
            <output name="out_prot_file" file="get_orf_input.t11_prot_out.fasta" />
            <output name="out_bed_file" file="get_orf_input.t11_bed_out.bed" />
            <output name="out_gff3_file" file="get_orf_input.t11_gff3_out.gff3" />
        </test>
        <test>
            <param name="input_file" value="get_orf_input.fasta" />
            <param name="table" value="11" />
            <param name="ftype" value="CDS" />
            <param name="ends" value="open" />
            <param name="mode" value="all" />
            <param name="min_len" value="10" />
            <param name="strand" value="forward" />
            <output name="out_nuc_file" file="get_orf_input.t11_open_nuc_out.fasta" />
            <output name="out_prot_file" file="get_orf_input.t11_open_prot_out.fasta" />
            <output name="out_bed_file" file="get_orf_input.t11_open_bed_out.bed" />
            <output name="out_gff3_file" file="get_orf_input.t11_open_gff3_out.gff3" />
        </test>
        <test>
            <param name="input_file" value="Ssuis.fasta" />
            <param name="table" value="11" />
            <param name="ftype" value="ORF" />
            <param name="ends" value="open" />
            <param name="mode" value="all" />
            <param name="min_len" value="100" />
            <param name="strand" value="both" />
            <output name="out_nuc_file" file="get_orf_input.Suis_ORF.nuc.fasta" />
            <output name="out_prot_file" file="get_orf_input.Suis_ORF.prot.fasta" />
            <output name="out_bed_file" file="get_orf_input.Suis_ORF.bed" />
            <output name="out_gff3_file" file="get_orf_input.Suis_ORF.gff3" />
        </test>
    </tests>
    <help>
**What it does**

Takes an input file of nucleotide sequences (typically FASTA, but also FASTQ
and Standard Flowgram Format (SFF) are supported), and searches each sequence
for open reading frames (ORFs) or potential coding sequences (CDSs) of the
given minimum length. These are returned as FASTA files of nucleotides and
protein sequences.

You can choose to have all the ORFs/CDSs above the minimum length for each
sequence (similar to the EMBOSS getorf tool), those with the longest length
equal, or the first ORF/CDS with the longest length (in the special case
where a sequence encodes two or more long ORFs/CDSs of the same length). The
last option is a reasonable choice when the input sequences represent EST or
mRNA sequences, where only one ORF/CDS is expected.

Note that if no ORFs/CDSs in a sequence match the criteria, there will be no
output for that sequence.

Also note that the ORFs/CDSs are assigned modified identifiers to distinguish
them from the original full length sequences, by appending a suffix.

The start and stop codons are taken from the `NCBI Genetic Codes
&lt;http://www.ncbi.nlm.nih.gov/Taxonomy/Utils/wprintgc.cgi&gt;`_.
When searching for ORFs, the sequences will run from stop codon to stop
codon, and any start codons are ignored. When searching for CDSs, the first
potential start codon will be used, giving the longest possible CDS within
each ORF, and thus the longest possible protein sequence. This is useful
for things like BLAST or domain searching, but since this may not be the
correct start codon, it may not be appropriate for signal peptide detection
etc.

**Example Usage**

Given some EST sequences (Sanger capillary reads) assembled into unigenes,
or a transcriptome assembly from some RNA-Seq, each of your nucleotide
sequences should (barring sequencing, assembly errors, frame-shifts etc)
encode one protein as a single ORF/CDS, which you wish to extract (and
perhaps translate into amino acids).

If your RNA-Seq data was strand specific, and assembled taking this into
account, you should only search for ORFs/CDSs on the forward strand.

**Citation**

If you use this Galaxy tool in work leading to a scientific publication please
cite the following paper:

Peter J.A. Cock, Björn A. Grüning, Konrad Paszkiewicz and Leighton Pritchard (2013).
Galaxy tools and workflows for sequence analysis with applications
in molecular plant pathology. PeerJ 1:e167
http://dx.doi.org/10.7717/peerj.167

This tool uses Biopython, so you may also wish to cite the Biopython
application note (and Galaxy too of course):

Cock et al (2009). Biopython: freely available Python tools for computational
molecular biology and bioinformatics. Bioinformatics 25(11) 1422-3.
http://dx.doi.org/10.1093/bioinformatics/btp163 pmid:19304878.

This tool is available to install into other Galaxy Instances via the Galaxy
Tool Shed at http://toolshed.g2.bx.psu.edu/view/peterjc/get_orfs_or_cdss
    </help>
    <citations>
        <citation type="doi">10.7717/peerj.167</citation>
        <citation type="doi">10.1093/bioinformatics/btp163</citation>
    </citations>
</tool>