changeset 11:1f2be4ae431f draft default tip

planemo upload for repository https://github.com/galaxyproteomics/tools-galaxyp/tree/master/tools/eggnog_mapper/eggnog_mapper commit 07877ba6d3fb6e28e94500f2392db6393cf325fd
author galaxyp
date Tue, 19 Jul 2022 15:14:11 +0000
parents 3d30526975d7
children
files eggnog_macros.xml eggnog_mapper.xml test-data/DIA_nlim.emapper.annotations test-data/DIA_nlim.emapper.annotations_cached test-data/DIA_nlim.emapper.annotations_orthologs test-data/nlim_1033.fasta test-data/scoped.emapper.annotations test-data/scoped.emapper.annotations_orthologs test-data/scoped.emapper.seed_orthologs
diffstat 9 files changed, 500 insertions(+), 321 deletions(-) [+]
line wrap: on
line diff
--- a/eggnog_macros.xml	Mon Jun 20 12:48:22 2022 +0000
+++ b/eggnog_macros.xml	Tue Jul 19 15:14:11 2022 +0000
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <macros>
    <token name="@TOOL_VERSION@">2.1.8</token>
-   <token name="@VERSION_SUFFIX@">2.1.8</token>
+   <token name="@VERSION_SUFFIX@">3</token>
    <token name="@EGGNOG_DB_VERSION@">5.0.2</token>
     <!--
     # DB versionning was super confusing for eggnog-mapper 2.0.x:
@@ -64,10 +64,82 @@
             </output>
         </test>
     </xml>
+
+    <xml name="fasta_input">
+        <param argument="-i" name="input" type="data" format="fasta" label="Fasta sequences to annotate"/>
+        <conditional name="input_trans">
+            <param argument="--itype" type="select" label="Type of sequences">
+                <option value="proteins" selected="true">proteins</option>
+                <option value="CDS">CDS</option>
+                <option value="genome">genome</option>
+                <option value="metagenome">metagenome</option>
+            </param>
+            <when value="proteins"/>
+            <when value="CDS">
+                <param argument="--translate" type="boolean" truevalue="--translate" falsevalue="" checked="false"
+                    label="Translate CDS to proteins before search"/>
+            </when>
+            <when value="genome">
+                <param argument="--translate" type="boolean" truevalue="--translate" falsevalue="" checked="false"
+                    label="Translate predicted CDS from blastx hits to proteins"/>
+                <param argument="--genepred" type="select" label="Type of sequences">
+                    <option value="search">Inferred from Diamond/MMseqs2 blastx hits</option>
+                    <option value="prodigal" selected="true">Performed using Prodigal</option>
+                </param>
+            </when>
+            <when value="metagenome">
+                <param argument="--translate" type="boolean" truevalue="--translate" falsevalue="" checked="false"
+                    label="Translate predicted CDS from blastx hits to proteins"/>
+                <param argument="--genepred" type="select" label="Type of sequences">
+                    <option value="search">Inferred from Diamond/MMseqs2 blastx hits</option>
+                    <option value="prodigal" selected="true">Performed using Prodigal</option>
+                </param>
+            </when>
+        </conditional>
+    </xml>
+    <!-- Common options for search filtering (applies to diamond and mmseqs only) -->
+    <xml name="common_search_options">
+        <param argument="--query_cover" type="integer" optional="true" min="0" max="100" label="Minimum query coverage" help="Report only alignments above the given percentage of query cover" />
+        <param argument="--subject_cover" type="integer" optional="true" min="0" max="100" label="Minimum subject coverage" help="Report only alignments above the given percentage of subject cover" />
+        <param argument="--pident" type="integer" optional="true" min="0" max="100" label="Minimum query coverage" help="Report only alignments above the given percentage of identity" />
+        <param argument="--evalue" type="float" optional="true" min="0" label="Minimum query coverage" help="Report only alignments below or equal the e-value" />
+        <param argument="--score" type="float" value="0.001" optional="true" min="0" label="Minimum query coverage" help="Report only alignments above or equal the score" />
+    </xml>
+    <token name="@SEED_ORTHOLOG_COLUMNS@">query_name,seed_eggNOG_ortholog,seed_ortholog_evalue,seed_ortholog_score,query_start,query_end,seed_start,seed_end,pident,query_cov,seed_cov</token>
+    
     <xml name="stdout_assertion">
         <assert_stdout>
             <has_line line="#  emapper-@TOOL_VERSION@"/>
             <has_line line="FINISHED"/>
+            <yield/>
         </assert_stdout>
     </xml>
+    <xml name="seed_orthologs_assertion">
+        <output name="seed_orthologs" ftype="tabular">
+            <assert_contents>
+                <has_line line="#qseqid&#009;sseqid&#009;evalue&#009;bitscore&#009;qstart&#009;qend&#009;sstart&#009;send&#009;pident&#009;qcov&#009;scov"/>
+                <has_line_matching expression="(\S+\t){2}[-+.e\d]+\t[.\d]+(\t\d+){4}(\t[.\d]+){3}" n="1"/>
+            </assert_contents>
+        </output>
+    </xml>
+    <xml name="annotations_assertion" token_columns="21" token_add_metadata_columm_names="" token_add_column_names="" token_add_column_re="">
+        <output name="annotations" ftype="tabular">
+            <metadata name="columns" value="@COLUMNS@" />
+            <!-- <metadata name="column_names" value="query,seed_ortholog,evalue,score,max_annot_lvl,COG_category,Description,Preferred_name,GOs,EC,KEGG_ko,KEGG_Pathway,KEGG_Module,KEGG_Reaction,KEGG_rclass,BRITE,KEGG_TC,CAZy,BiGG_Reaction,PFAMseggNOG_OGs@ADD_METADATA_COLUMN_NAMES@" /> -->
+            <assert_contents>
+                <has_line line="#query&#009;seed_ortholog&#009;evalue&#009;score&#009;eggNOG_OGs&#009;max_annot_lvl&#009;COG_category&#009;Description&#009;Preferred_name&#009;GOs&#009;EC&#009;KEGG_ko&#009;KEGG_Pathway&#009;KEGG_Module&#009;KEGG_Reaction&#009;KEGG_rclass&#009;BRITE&#009;KEGG_TC&#009;CAZy&#009;BiGG_Reaction&#009;PFAMs@ADD_COLUMN_NAMES@"/>
+                <has_line_matching expression="(\S+\t){2}[-+.e\d]+\t[.\d]+(\t\S+){7}\tko:\S+(\t\S+){9}@ADD_COLUMN_RE@" n="1"/>
+            </assert_contents>
+        </output>
+    </xml>
+    <xml name="annotations_orthologs_assertion">
+        <output name="annotations_orthologs" ftype="tabular">
+            <metadata name="columns" value="4" />
+            <metadata name="column_names" value="query,orth_type,species,orthologs" />
+            <assert_contents>
+                <has_line line="#query&#009;orth_type&#009;species&#009;orthologs"/>
+                <has_line_matching expression="\S+\t(one2one|many2one|one2many|many2many|seed)(\t[^\t]+){2}" n="2"/>
+            </assert_contents>
+        </output>
+    </xml>
 </macros>
--- a/eggnog_mapper.xml	Mon Jun 20 12:48:22 2022 +0000
+++ b/eggnog_mapper.xml	Tue Jul 19 15:14:11 2022 +0000
@@ -6,370 +6,472 @@
     <expand macro="requirements"/>
     <expand macro="version_command"/>
     <command detect_errors="aggressive"><![CDATA[
-        emapper.py
-        --data_dir '$eggnog_data.fields.path'
-        -m '$seed_ortho_options.ortho_method.m'
-        --itype '${input_trans.itype}'
-        #if $input_trans.itype in ['CDS', 'genome', 'metagenome']:
-            $input_trans.translate
-        #end if
-        #if $input_trans.itype in ['genome', 'metagenome']:
-            --genepred $input_trans.genepred
+        #if $ortho_method.m == "no_search"
+            cat 
+            #for aht in $ortho_method.annotate_hits_table
+                $aht
+            #end for
+            > annotate_hits_table.tsv
+            &&
         #end if
 
-        ## Diamond option
-        #if $seed_ortho_options.ortho_method.m == "diamond":
-            --matrix '$seed_ortho_options.ortho_method.matrix_gapcosts.matrix'
-            $seed_ortho_options.ortho_method.matrix_gapcosts.gap_costs
-            --sensmode $seed_ortho_options.ortho_method.sensmode
-            $seed_ortho_options.ortho_method.dmnd_iterate
-            $seed_ortho_options.ortho_method.dmnd_ignore_warnings
-        #elif $seed_ortho_options.ortho_method.m == "mmseqs":
-            --start_sens $seed_ortho_options.ortho_method.start_sens
-            --sens_steps $seed_ortho_options.ortho_method.sens_steps
-            --final_sens $seed_ortho_options.ortho_method.final_sens
+        emapper.py
+        --data_dir '$eggnog_data.fields.path'
+        -m '$ortho_method.m'
+
+        #if $ortho_method.m in ['diamond', 'mmseqs', 'cache']:
+            -i '$ortho_method.input'
+            --itype '$ortho_method.input_trans.itype'
+            #if $ortho_method.input_trans.itype in ['CDS', 'genome', 'metagenome']:
+                $ortho_method.input_trans.translate
+            #end if
+            #if $ortho_method.input_trans.itype in ['genome', 'metagenome']:
+                --genepred $ortho_method.input_trans.genepred
+            #end if
+        #elif $ortho_method.m == "no_search"
+            --annotate_hits_table annotate_hits_table.tsv
         #end if
-
-        ## Common options for search filtering
-        #if $seed_ortho_options.query_cover:
-        --query_cover $seed_ortho_options.query_cover
-        #end if
-        #if $seed_ortho_options.subject_cover:
-        --subject_cover $seed_ortho_options.subject_cover
-        #end if
-        #if $seed_ortho_options.pident:
-        --pident $seed_ortho_options.pident
+        
+        #if $ortho_method.m == 'cache'
+            --cache '$ortho_method.cache'
         #end if
 
-        #if $annotation_options.tax_scope:
-            --tax_scope=$annotation_options.tax_scope
-        #end if
-        #if $annotation_options.target_orthologs:
-            --target_orthologs=$annotation_options.target_orthologs
+        #if $ortho_method.m in ['diamond', 'mmseqs']:
+            ## Diamond option
+            #if $ortho_method.m == "diamond":
+                --matrix '$ortho_method.matrix_gapcosts.matrix'
+                $ortho_method.matrix_gapcosts.gap_costs
+                --sensmode $ortho_method.sensmode
+                $ortho_method.dmnd_iterate
+                $ortho_method.dmnd_ignore_warnings
+            #elif $ortho_method.m == "mmseqs":
+                --start_sens $ortho_method.start_sens
+                --sens_steps $ortho_method.sens_steps
+                --final_sens $ortho_method.final_sens
+            #end if
+
+            ## Common options for search filtering (applies to diamond and mmseqs only)
+            #if str($ortho_method.query_cover):
+                --query_cover $ortho_method.query_cover
+            #end if
+            #if str($ortho_method.subject_cover):
+                --subject_cover $ortho_method.subject_cover
+            #end if
+            #if str($ortho_method.pident):
+                --pident $ortho_method.pident
+            #end if
+            #if str($ortho_method.evalue):
+                --evalue $ortho_method.evalue
+            #end if
+            #if str($ortho_method.score):
+                --score $ortho_method.score
+            #end if
         #end if
-        #if $annotation_options.go_evidence:
-            --go_evidence=$annotation_options.go_evidence
-        #end if
-        #if $seed_ortholog_options.seed_ortholog_evalue:
-            --evalue=$seed_ortholog_options.seed_ortholog_evalue
-        #end if
-        #if str($seed_ortholog_options.seed_ortholog_score):
-            --score=$seed_ortholog_options.seed_ortholog_score
+
+        #if $annotation_options.no_annot == "--no_annot"
+            --no_annot
+        #else
+            #if str($annotation_options.seed_ortholog_evalue):
+                --seed_ortholog_evalue $annotation_options.seed_ortholog_evalue
+            #end if
+            #if str($annotation_options.seed_ortholog_score):
+                --seed_ortholog_score $annotation_options.seed_ortholog_score
+            #end if
+            #if $annotation_options.tax_scope:
+                --tax_scope=$annotation_options.tax_scope
+            #end if
+            #if $annotation_options.target_orthologs:
+                --target_orthologs=$annotation_options.target_orthologs
+            #end if
+            #if $annotation_options.go_evidence:
+                --go_evidence=$annotation_options.go_evidence
+            #end if
         #end if
         $output_options.no_file_comments
-        $output_options.no_annot
         $output_options.report_orthologs
+        $output_options.md5
         --output='results'
-        -i '${input}'
         --cpu "\${GALAXY_SLOTS:-4}"
+        --scratch_dir \${TEMP:-\$_GALAXY_JOB_TMP_DIR}
+        --temp_dir \${TEMP:-\$_GALAXY_JOB_TMP_DIR}
     ]]></command>
     <inputs>
-        <param name="input" type="data" format="fasta" label="Fasta sequences to annotate"/>
-        <conditional name="input_trans">
-            <param argument="--itype" type="select" label="Type of sequences">
-                <option value="proteins" selected="true">proteins</option>
-                <option value="CDS">CDS</option>
-                <option value="genome">genome</option>
-                <option value="metagenome">metagenome</option>
-            </param>
-            <when value="proteins"/>
-            <when value="CDS">
-                <param name="translate" type="boolean" truevalue="--translate" falsevalue="" checked="false"
-                    label="Translate CDS to proteins before search"/>
-            </when>
-            <when value="genome">
-                <param name="translate" type="boolean" truevalue="--translate" falsevalue="" checked="false"
-                    label="Translate predicted CDS from blastx hits to proteins"/>
-                <param argument="--genepred" type="select" label="Type of sequences">
-                    <option value="search">Inferred from Diamond/MMseqs2 blastx hits</option>
-                    <option value="prodigal" selected="true">Performed using Prodigal</option>
-                </param>
-            </when>
-            <when value="metagenome">
-                <param name="translate" type="boolean" truevalue="--translate" falsevalue="" checked="false"
-                    label="Translate predicted CDS from blastx hits to proteins"/>
-                <param argument="--genepred" type="select" label="Type of sequences">
-                    <option value="search">Inferred from Diamond/MMseqs2 blastx hits</option>
-                    <option value="prodigal" selected="true">Performed using Prodigal</option>
-                </param>
-            </when>
-        </conditional>
         <param name="eggnog_data" type="select" label="Version of eggNOG Database">
             <options from_data_table="eggnog_mapper_db_versioned">
                 <filter type="static_value" column="3" value="@IDX_VERSION@" />
             </options>
         </param>
 
-        <section name="seed_ortho_options" expanded="true" title="Seed orthologs search options">
-            <conditional name="ortho_method">
-                <param argument="-m" type="select" label="Method to search seed orthologs">
-                    <option value="diamond" selected="true">Diamond</option>
-                    <option value="mmseqs">MMseqs2</option>
-                </param>
-                <when value="diamond">
-                    <conditional name="matrix_gapcosts">
-                        <param argument="--matrix" type="select" label="Scoring matrix and gap costs">
-                            <option value="BLOSUM90">BLOSUM90</option>
-                            <option value="BLOSUM80">BLOSUM80</option>
-                            <option value="BLOSUM62" selected="true">BLOSUM62</option>
-                            <option value="BLOSUM50">BLOSUM50</option>
-                            <option value="BLOSUM45">BLOSUM45</option>
-                            <option value="PAM250">PAM250</option>
-                            <option value="PAM70">PAM70</option>
-                            <option value="PAM30">PAM30</option>
+        <conditional name="ortho_method">
+            <param argument="-m" type="select" label="Method to search seed orthologs">
+                <option value="diamond" selected="true">Diamond</option>
+                <option value="mmseqs">MMseqs2</option>
+                <option value="no_search">Skip search stage: annotate an existing seed orthologs data set</option>
+                <option value="cache">Skip search stage: annotate based on cached annotations (see also --md5)</option>
+            </param>
+            <when value="diamond">
+                <expand macro="fasta_input"/>
+                <conditional name="matrix_gapcosts">
+                    <param argument="--matrix" type="select" label="Scoring matrix and gap costs">
+                        <option value="BLOSUM90">BLOSUM90</option>
+                        <option value="BLOSUM80">BLOSUM80</option>
+                        <option value="BLOSUM62" selected="true">BLOSUM62</option>
+                        <option value="BLOSUM50">BLOSUM50</option>
+                        <option value="BLOSUM45">BLOSUM45</option>
+                        <option value="PAM250">PAM250</option>
+                        <option value="PAM70">PAM70</option>
+                        <option value="PAM30">PAM30</option>
+                    </param>
+                    <when value="BLOSUM90">
+                        <param name="gap_costs" type="select" label="Gap Costs">
+                            <option value="--gapopen 9 --gapextend 2">Existence: 9  Extension: 2</option>
+                            <option value="--gapopen 8 --gapextend 2">Existence: 8  Extension: 2</option>
+                            <option value="--gapopen 7 --gapextend 2">Existence: 7  Extension: 2</option>
+                            <option value="--gapopen 6 --gapextend 2">Existence: 6  Extension: 2</option>
+                            <option value="--gapopen 11 --gapextend 1">Existence: 11  Extension: 1</option>
+                            <option value="--gapopen 10 --gapextend 1" selected="true">Existence: 10  Extension: 1</option>
+                            <option value="--gapopen 9 --gapextend 1">Existence: 9  Extension: 1</option>
+                        </param>
+                    </when>
+                    <when value="BLOSUM80">
+                        <param name="gap_costs" type="select" label="Gap Costs">
+                            <option value="--gapopen 8 --gapextend 2">Existence: 8  Extension: 2</option>
+                            <option value="--gapopen 7 --gapextend 2">Existence: 7  Extension: 2</option>
+                            <option value="--gapopen 6 --gapextend 2">Existence: 6  Extension: 2</option>
+                            <option value="--gapopen 11 --gapextend 1">Existence: 11  Extension: 1</option>
+                            <option value="--gapopen 10 --gapextend 1" selected="true">Existence: 10  Extension: 1</option>
+                            <option value="--gapopen 9 --gapextend 1">Existence: 9  Extension: 1</option>
+                        </param>
+                    </when>
+                    <when value="BLOSUM62">
+                        <param name="gap_costs" type="select" label="Gap Costs">
+                            <option value="--gapopen 11 --gapextend 2">Existence: 11  Extension: 2</option>
+                            <option value="--gapopen 10 --gapextend 2">Existence: 10  Extension: 2</option>
+                            <option value="--gapopen 9 --gapextend 2">Existence: 9  Extension: 2</option>
+                            <option value="--gapopen 8 --gapextend 2">Existence: 8  Extension: 2</option>
+                            <option value="--gapopen 7 --gapextend 2">Existence: 7  Extension: 2</option>
+                            <option value="--gapopen 6 --gapextend 2">Existence: 6  Extension: 2</option>
+                            <option value="--gapopen 13 --gapextend 1">Existence: 13  Extension: 1</option>
+                            <option value="--gapopen 12 --gapextend 1">Existence: 12  Extension: 1</option>
+                            <option value="--gapopen 11 --gapextend 1" selected="true">Existence: 11  Extension: 1</option>
+                            <option value="--gapopen 10 --gapextend 1">Existence: 10  Extension: 1</option>
+                            <option value="--gapopen 9 --gapextend 1">Existence: 9  Extension: 1</option>
+                        </param>
+                    </when>
+                    <when value="BLOSUM50">
+                        <param name="gap_costs" type="select" label="Gap Costs">
+                            <option value="--gapopen 13 --gapextend 3">Existence: 13  Extension: 3</option>
+                            <option value="--gapopen 12 --gapextend 3">Existence: 12  Extension: 3</option>
+                            <option value="--gapopen 11 --gapextend 3">Existence: 11  Extension: 3</option>
+                            <option value="--gapopen 10 --gapextend 3">Existence: 10  Extension: 3</option>
+                            <option value="--gapopen 9 --gapextend 3">Existence: 9  Extension: 3</option>
+                            <option value="--gapopen 16 --gapextend 2">Existence: 16  Extension: 2</option>
+                            <option value="--gapopen 15 --gapextend 2">Existence: 15  Extension: 2</option>
+                            <option value="--gapopen 14 --gapextend 2">Existence: 14  Extension: 2</option>
+                            <option value="--gapopen 13 --gapextend 2" selected="true">Existence: 13  Extension: 2</option>
+                            <option value="--gapopen 12 --gapextend 2">Existence: 12  Extension: 2</option>
+                            <option value="--gapopen 19 --gapextend 1">Existence: 19  Extension: 1</option>
+                            <option value="--gapopen 18 --gapextend 1">Existence: 18  Extension: 1</option>
+                            <option value="--gapopen 17 --gapextend 1">Existence: 17  Extension: 1</option>
+                            <option value="--gapopen 16 --gapextend 1">Existence: 16  Extension: 1</option>
+                            <option value="--gapopen 15 --gapextend 1">Existence: 15  Extension: 1</option>
+                        </param>
+                    </when>
+                    <when value="BLOSUM45">
+                        <param name="gap_costs" type="select" label="Gap Costs">
+                            <option value="--gapopen 13 --gapextend 3">Existence: 13  Extension: 3</option>
+                            <option value="--gapopen 12 --gapextend 3">Existence: 12  Extension: 3</option>
+                            <option value="--gapopen 11 --gapextend 3">Existence: 11  Extension: 3</option>
+                            <option value="--gapopen 10 --gapextend 3">Existence: 10  Extension: 3</option>
+                            <option value="--gapopen 15 --gapextend 2" selected="true">Existence: 15  Extension: 2</option>
+                            <option value="--gapopen 14 --gapextend 2">Existence: 14  Extension: 2</option>
+                            <option value="--gapopen 13 --gapextend 2">Existence: 13  Extension: 2</option>
+                            <option value="--gapopen 12 --gapextend 2">Existence: 12  Extension: 2</option>
+                            <option value="--gapopen 19 --gapextend 1">Existence: 19  Extension: 1</option>
+                            <option value="--gapopen 18 --gapextend 1">Existence: 18  Extension: 1</option>
+                            <option value="--gapopen 17 --gapextend 1">Existence: 17  Extension: 1</option>
+                            <option value="--gapopen 16 --gapextend 1">Existence: 16  Extension: 1</option>
+                        </param>
+                    </when>
+                    <when value="PAM250">
+                        <param name="gap_costs" type="select" label="Gap Costs">
+                            <option value="--gapopen 15 --gapextend 3">Existence: 15  Extension: 3</option>
+                            <option value="--gapopen 14 --gapextend 3">Existence: 14  Extension: 3</option>
+                            <option value="--gapopen 13 --gapextend 3">Existence: 13  Extension: 3</option>
+                            <option value="--gapopen 12 --gapextend 3">Existence: 12  Extension: 3</option>
+                            <option value="--gapopen 17 --gapextend 2">Existence: 17  Extension: 2</option>
+                            <option value="--gapopen 16 --gapextend 2">Existence: 16  Extension: 2</option>
+                            <option value="--gapopen 15 --gapextend 2">Existence: 15  Extension: 2</option>
+                            <option value="--gapopen 14 --gapextend 2" selected="true">Existence: 14  Extension: 2</option>
+                            <option value="--gapopen 13 --gapextend 2">Existence: 13  Extension: 2</option>
+                            <option value="--gapopen 21 --gapextend 1">Existence: 21  Extension: 1</option>
+                            <option value="--gapopen 20 --gapextend 1">Existence: 20  Extension: 1</option>
+                            <option value="--gapopen 19 --gapextend 1">Existence: 19  Extension: 1</option>
+                            <option value="--gapopen 18 --gapextend 1">Existence: 18  Extension: 1</option>
+                            <option value="--gapopen 17 --gapextend 1">Existence: 17  Extension: 1</option>
                         </param>
-                        <when value="BLOSUM90">
-                            <param name="gap_costs" type="select" label="Gap Costs">
-                                <option value="--gapopen 9 --gapextend 2">Existence: 9  Extension: 2</option>
-                                <option value="--gapopen 8 --gapextend 2">Existence: 8  Extension: 2</option>
-                                <option value="--gapopen 7 --gapextend 2">Existence: 7  Extension: 2</option>
-                                <option value="--gapopen 6 --gapextend 2">Existence: 6  Extension: 2</option>
-                                <option value="--gapopen 11 --gapextend 1">Existence: 11  Extension: 1</option>
-                                <option value="--gapopen 10 --gapextend 1" selected="true">Existence: 10  Extension: 1</option>
-                                <option value="--gapopen 9 --gapextend 1">Existence: 9  Extension: 1</option>
-                            </param>
-                        </when>
-                        <when value="BLOSUM80">
-                            <param name="gap_costs" type="select" label="Gap Costs">
-                                <option value="--gapopen 8 --gapextend 2">Existence: 8  Extension: 2</option>
-                                <option value="--gapopen 7 --gapextend 2">Existence: 7  Extension: 2</option>
-                                <option value="--gapopen 6 --gapextend 2">Existence: 6  Extension: 2</option>
-                                <option value="--gapopen 11 --gapextend 1">Existence: 11  Extension: 1</option>
-                                <option value="--gapopen 10 --gapextend 1" selected="true">Existence: 10  Extension: 1</option>
-                                <option value="--gapopen 9 --gapextend 1">Existence: 9  Extension: 1</option>
-                            </param>
-                        </when>
-                        <when value="BLOSUM62">
-                            <param name="gap_costs" type="select" label="Gap Costs">
-                                <option value="--gapopen 11 --gapextend 2">Existence: 11  Extension: 2</option>
-                                <option value="--gapopen 10 --gapextend 2">Existence: 10  Extension: 2</option>
-                                <option value="--gapopen 9 --gapextend 2">Existence: 9  Extension: 2</option>
-                                <option value="--gapopen 8 --gapextend 2">Existence: 8  Extension: 2</option>
-                                <option value="--gapopen 7 --gapextend 2">Existence: 7  Extension: 2</option>
-                                <option value="--gapopen 6 --gapextend 2">Existence: 6  Extension: 2</option>
-                                <option value="--gapopen 13 --gapextend 1">Existence: 13  Extension: 1</option>
-                                <option value="--gapopen 12 --gapextend 1">Existence: 12  Extension: 1</option>
-                                <option value="--gapopen 11 --gapextend 1" selected="true">Existence: 11  Extension: 1</option>
-                                <option value="--gapopen 10 --gapextend 1">Existence: 10  Extension: 1</option>
-                                <option value="--gapopen 9 --gapextend 1">Existence: 9  Extension: 1</option>
-                            </param>
-                        </when>
-                        <when value="BLOSUM50">
-                            <param name="gap_costs" type="select" label="Gap Costs">
-                                <option value="--gapopen 13 --gapextend 3">Existence: 13  Extension: 3</option>
-                                <option value="--gapopen 12 --gapextend 3">Existence: 12  Extension: 3</option>
-                                <option value="--gapopen 11 --gapextend 3">Existence: 11  Extension: 3</option>
-                                <option value="--gapopen 10 --gapextend 3">Existence: 10  Extension: 3</option>
-                                <option value="--gapopen 9 --gapextend 3">Existence: 9  Extension: 3</option>
-                                <option value="--gapopen 16 --gapextend 2">Existence: 16  Extension: 2</option>
-                                <option value="--gapopen 15 --gapextend 2">Existence: 15  Extension: 2</option>
-                                <option value="--gapopen 14 --gapextend 2">Existence: 14  Extension: 2</option>
-                                <option value="--gapopen 13 --gapextend 2" selected="true">Existence: 13  Extension: 2</option>
-                                <option value="--gapopen 12 --gapextend 2">Existence: 12  Extension: 2</option>
-                                <option value="--gapopen 19 --gapextend 1">Existence: 19  Extension: 1</option>
-                                <option value="--gapopen 18 --gapextend 1">Existence: 18  Extension: 1</option>
-                                <option value="--gapopen 17 --gapextend 1">Existence: 17  Extension: 1</option>
-                                <option value="--gapopen 16 --gapextend 1">Existence: 16  Extension: 1</option>
-                                <option value="--gapopen 15 --gapextend 1">Existence: 15  Extension: 1</option>
-                            </param>
-                        </when>
-                        <when value="BLOSUM45">
-                            <param name="gap_costs" type="select" label="Gap Costs">
-                                <option value="--gapopen 13 --gapextend 3">Existence: 13  Extension: 3</option>
-                                <option value="--gapopen 12 --gapextend 3">Existence: 12  Extension: 3</option>
-                                <option value="--gapopen 11 --gapextend 3">Existence: 11  Extension: 3</option>
-                                <option value="--gapopen 10 --gapextend 3">Existence: 10  Extension: 3</option>
-                                <option value="--gapopen 15 --gapextend 2" selected="true">Existence: 15  Extension: 2</option>
-                                <option value="--gapopen 14 --gapextend 2">Existence: 14  Extension: 2</option>
-                                <option value="--gapopen 13 --gapextend 2">Existence: 13  Extension: 2</option>
-                                <option value="--gapopen 12 --gapextend 2">Existence: 12  Extension: 2</option>
-                                <option value="--gapopen 19 --gapextend 1">Existence: 19  Extension: 1</option>
-                                <option value="--gapopen 18 --gapextend 1">Existence: 18  Extension: 1</option>
-                                <option value="--gapopen 17 --gapextend 1">Existence: 17  Extension: 1</option>
-                                <option value="--gapopen 16 --gapextend 1">Existence: 16  Extension: 1</option>
-                            </param>
-                        </when>
-                        <when value="PAM250">
-                            <param name="gap_costs" type="select" label="Gap Costs">
-                                <option value="--gapopen 15 --gapextend 3">Existence: 15  Extension: 3</option>
-                                <option value="--gapopen 14 --gapextend 3">Existence: 14  Extension: 3</option>
-                                <option value="--gapopen 13 --gapextend 3">Existence: 13  Extension: 3</option>
-                                <option value="--gapopen 12 --gapextend 3">Existence: 12  Extension: 3</option>
-                                <option value="--gapopen 17 --gapextend 2">Existence: 17  Extension: 2</option>
-                                <option value="--gapopen 16 --gapextend 2">Existence: 16  Extension: 2</option>
-                                <option value="--gapopen 15 --gapextend 2">Existence: 15  Extension: 2</option>
-                                <option value="--gapopen 14 --gapextend 2" selected="true">Existence: 14  Extension: 2</option>
-                                <option value="--gapopen 13 --gapextend 2">Existence: 13  Extension: 2</option>
-                                <option value="--gapopen 21 --gapextend 1">Existence: 21  Extension: 1</option>
-                                <option value="--gapopen 20 --gapextend 1">Existence: 20  Extension: 1</option>
-                                <option value="--gapopen 19 --gapextend 1">Existence: 19  Extension: 1</option>
-                                <option value="--gapopen 18 --gapextend 1">Existence: 18  Extension: 1</option>
-                                <option value="--gapopen 17 --gapextend 1">Existence: 17  Extension: 1</option>
-                            </param>
-                        </when>
-                        <when value="PAM70">
-                            <param name="gap_costs" type="select" label="Gap Costs">
-                                <option value="--gapopen 12 --gapextend 3">Existence: 12 Extension: 3</option>
-                                <option value="--gapopen 11 --gapextend 2">Existence: 11 Extension: 2</option>
-                                <option value="--gapopen 8 --gapextend 2">Existence: 8  Extension: 2</option>
-                                <option value="--gapopen 7 --gapextend 2">Existence: 7  Extension: 2</option>
-                                <option value="--gapopen 6 --gapextend 2">Existence: 6  Extension: 2</option>
-                                <option value="--gapopen 11 --gapextend 1">Existence: 11  Extension: 1</option>
-                                <option value="--gapopen 10 --gapextend 1" selected="true">Existence: 10  Extension: 1</option>
-                                <option value="--gapopen 9 --gapextend 1">Existence: 9  Extension: 1</option>
-                            </param>
-                        </when>
-                        <when value="PAM30">
-                            <param name="gap_costs" type="select" label="Gap Costs">
-                                <option value="--gapopen 15 --gapextend 3">Existence: 15 Extension: 3</option>
-                                <option value="--gapopen 13 --gapextend 3">Existence: 13 Extension: 3</option>
-                                <option value="--gapopen 14 --gapextend 2">Existence: 14 Extension: 2</option>
-                                <option value="--gapopen 7 --gapextend 2">Existence: 7  Extension: 2</option>
-                                <option value="--gapopen 6 --gapextend 2">Existence: 6  Extension: 2</option>
-                                <option value="--gapopen 5 --gapextend 2">Existence: 5  Extension: 2</option>
-                                <option value="--gapopen 14 --gapextend 1">Existence: 14 Extension: 1</option>
-                                <option value="--gapopen 10 --gapextend 1">Existence: 10  Extension: 1</option>
-                                <option value="--gapopen 9 --gapextend 1" selected="true">Existence: 9  Extension: 1</option>
-                                <option value="--gapopen 8 --gapextend 1">Existence: 8  Extension: 1</option>
-                            </param>
-                        </when>
-                    </conditional>
-                    <param name="sensmode" type="select" label="Gap Costs">
-                        <option value="default">default</option>
-                        <option value="fast">fast</option>
-                        <option value="mid-sensitive">mid-sensitive</option>
-                        <option value="sensitive" selected="true">sensitive</option>
-                        <option value="more-sensitive">more-sensitive</option>
-                        <option value="very-sensitive">very-sensitive</option>
-                        <option value="ultra-sensitive">ultra-sensitive</option>
-                    </param>
-                    <param argument="--dmnd_iterate" type="boolean" truevalue="--dmnd_iterate yes" falsevalue="--dmnd_iterate no" checked="false"
-                        label="Run diamond in iterative mode, up to the sensitivity level"/>
-                    <param argument="--dmnd_ignore_warnings" type="boolean" truevalue="--dmnd_ignore_warnings" falsevalue="" checked="false"
-                        label="Ignore Diamond warnings on sequence content (e.g. when a protein contains only ATGC symbols)"/>
-                </when>
-                <when value="mmseqs">
-                    <param argument="--start_sens" type="integer" value="3" min="0" max="100" label="Starting sensitivity" />
-                    <param argument="--sens_steps" type="integer" value="3" min="0" max="100" label="Number of sensitivity steps" />
-                    <param argument="--final_sens" type="integer" value="7" min="0" max="100" label="Final sensititivy step" />
-                </when>
-            </conditional>
+                    </when>
+                    <when value="PAM70">
+                        <param name="gap_costs" type="select" label="Gap Costs">
+                            <option value="--gapopen 12 --gapextend 3">Existence: 12 Extension: 3</option>
+                            <option value="--gapopen 11 --gapextend 2">Existence: 11 Extension: 2</option>
+                            <option value="--gapopen 8 --gapextend 2">Existence: 8  Extension: 2</option>
+                            <option value="--gapopen 7 --gapextend 2">Existence: 7  Extension: 2</option>
+                            <option value="--gapopen 6 --gapextend 2">Existence: 6  Extension: 2</option>
+                            <option value="--gapopen 11 --gapextend 1">Existence: 11  Extension: 1</option>
+                            <option value="--gapopen 10 --gapextend 1" selected="true">Existence: 10  Extension: 1</option>
+                            <option value="--gapopen 9 --gapextend 1">Existence: 9  Extension: 1</option>
+                        </param>
+                    </when>
+                    <when value="PAM30">
+                        <param name="gap_costs" type="select" label="Gap Costs">
+                            <option value="--gapopen 15 --gapextend 3">Existence: 15 Extension: 3</option>
+                            <option value="--gapopen 13 --gapextend 3">Existence: 13 Extension: 3</option>
+                            <option value="--gapopen 14 --gapextend 2">Existence: 14 Extension: 2</option>
+                            <option value="--gapopen 7 --gapextend 2">Existence: 7  Extension: 2</option>
+                            <option value="--gapopen 6 --gapextend 2">Existence: 6  Extension: 2</option>
+                            <option value="--gapopen 5 --gapextend 2">Existence: 5  Extension: 2</option>
+                            <option value="--gapopen 14 --gapextend 1">Existence: 14 Extension: 1</option>
+                            <option value="--gapopen 10 --gapextend 1">Existence: 10  Extension: 1</option>
+                            <option value="--gapopen 9 --gapextend 1" selected="true">Existence: 9  Extension: 1</option>
+                            <option value="--gapopen 8 --gapextend 1">Existence: 8  Extension: 1</option>
+                        </param>
+                    </when>
+                </conditional>
+                <param argument="--sensmode" type="select" label="Diamond's sensitivity mode">
+                    <option value="default">default</option>
+                    <option value="fast">fast</option>
+                    <option value="mid-sensitive">mid-sensitive</option>
+                    <option value="sensitive" selected="true">sensitive</option>
+                    <option value="more-sensitive">more-sensitive</option>
+                    <option value="very-sensitive">very-sensitive</option>
+                    <option value="ultra-sensitive">ultra-sensitive</option>
+                </param>
+                <param argument="--dmnd_iterate" type="boolean" truevalue="--dmnd_iterate yes" falsevalue="--dmnd_iterate no" checked="false"
+                    label="Run diamond in iterative mode, up to the sensitivity level"/>
+                <param argument="--dmnd_ignore_warnings" type="boolean" truevalue="--dmnd_ignore_warnings" falsevalue="" checked="false"
+                    label="Ignore Diamond warnings on sequence content (e.g. when a protein contains only ATGC symbols)"/>
+                <expand macro="common_search_options"/>
+            </when>
+            <when value="mmseqs">
+                <expand macro="fasta_input"/>
+                <param argument="--start_sens" type="integer" value="3" min="0" max="100" label="Starting sensitivity" />
+                <param argument="--sens_steps" type="integer" value="3" min="0" max="100" label="Number of sensitivity steps" />
+                <param argument="--final_sens" type="integer" value="7" min="0" max="100" label="Final sensititivy step" />
+                <expand macro="common_search_options"/>
+            </when>
+            <when value="no_search">
+                <param argument="--annotate_hits_table" type="data" multiple="true" format="tabular" label="Seed orthologs">
+                    <validator type="expression" message="No seed orthologs">value.metadata.columns == 11</validator>
+                    <!-- would be cool to replace with this validator: 
+                        <validator type="expression" message="No seed orthologs">value.metadata.column_names == '@SEED_ORTHOLOG_COLUMNS@'.split()</validator>
+                        but this does not work (yet) in tool tests since column_names can not be set in uploads -->
+                </param>
+            </when>
+            <when value="cache">
+                <expand macro="fasta_input"/>
+                <param argument="--cache"  type="data" multiple="true" format="tabular" label="EggNOG Annotations with md5 hashes" help="Annotations computed with EggNOG mapper with enabled --md5 option">
+                    <validator type="expression" message="No seed orthologs">value.metadata.columns == 22</validator>
+                </param>
+                <param name="output_no_annotations" type="boolean" checked="true" label="Output sequences without annotation" help="Produce an additional FASTA file with the sequences of queries for which an existing annotation was not found using cache mode. This file can be used as input of another eggNOG-mapper run without using the cache, trying to annotate the sequences."/>
+            </when>
+        </conditional>
 
-            <param argument="--query_cover" type="integer" optional="true" min="0" max="100" label="Minimum query coverage" help="Report only alignments above the given percentage of query cover" />
-            <param argument="--subject_cover" type="integer" optional="true" min="0" max="100" label="Minimum subject coverage" help="Report only alignments above the given percentage of subject cover" />
-            <param argument="--pident" type="integer" optional="true" min="0" max="100" label="Minimum query coverage" help="Report only alignments above the given percentage of identity" />
-        </section>
-
-        <section name="annotation_options" expanded="false" title="Annotation Options">
-            <param name="tax_scope" type="integer" optional="true" label="Set taxonomic scope" help="NCBI taxonomy id" />
-            <param name="target_orthologs" type="select" label="target orthologs for functional transfer">
-                <option value="one2one">one2one</option>
-                <option value="many2one">many2one</option>
-                <option value="one2many">one2many</option>
-                <option value="many2many">many2many</option>
-                <option value="all" selected="true">all</option>
-            </param>
-            <param name="go_evidence" type="select"
-                    label="Select the set of GO terms that should be used for annotation">
-                <option value="experimental">experimental = Use only terms inferred from experimental evidence</option>
-                <option value="non-electronic" selected="true">non-electronic = Use only non-electronically curated terms</option>
-                <option value="all" selected="true">All (experimental + non-electronic)</option>
+        <conditional name="annotation_options">
+            <param argument="--no_annot" type="select" label="Annotate seed orthologs">
+                <option value="">Yes</option>
+                <option value="--no_annot">No</option>
             </param>
-        </section>
-        <section name="seed_ortholog_options" expanded="false" title="Seed Ortholog Search Options">
-            <param name="seed_ortholog_evalue" type="float" value="0.001" min="0" label="Min E-value threshold">
-                <help>
-                Min E-value expected when searching for seed eggNOG ortholog. Applies to phmmer/diamond searches.
-                Queries not having a significant seed orthologs (E-value less than threshold) will not be annotated.
-                </help>
-            </param>
-            <param name="seed_ortholog_score" type="integer" optional="true" min="0" label="Minimum bit score threshold">
-                <help>
-                Min bit score expected when searching for seed eggNOG ortholog.
-                Queries not having a significant seed orthologs will not be annotated.
-                </help>
-            </param>
-        </section>
+            <when value="">
+                <param argument="--seed_ortholog_evalue" type="float" value="0.001" min="0" label="Min E-value threshold">
+                    <help>
+                    Min E-value expected when searching for seed eggNOG ortholog. Applies to phmmer/diamond searches.
+                    Queries not having a significant seed orthologs (E-value less than threshold) will not be annotated.
+                    </help>
+                </param>
+                <param argument="--seed_ortholog_score" type="float" optional="true" min="0" label="Minimum bit score threshold">
+                    <help>
+                    Min bit score expected when searching for seed eggNOG ortholog.
+                    Queries not having a significant seed orthologs will not be annotated.
+                    </help>
+                </param>
+                <param argument="--tax_scope" type="integer" optional="true" label="Set taxonomic scope" help="NCBI taxonomy id" />
+                <param argument="--target_orthologs" type="select" label="target orthologs for functional transfer">
+                    <option value="one2one">one2one</option>
+                    <option value="many2one">many2one</option>
+                    <option value="one2many">one2many</option>
+                    <option value="many2many">many2many</option>
+                    <option value="all" selected="true">all</option>
+                </param>
+                <param argument="--go_evidence" type="select"
+                        label="Select the set of GO terms that should be used for annotation">
+                    <option value="experimental">experimental = Use only terms inferred from experimental evidence</option>
+                    <option value="non-electronic" selected="true">non-electronic = Use only non-electronically curated terms</option>
+                    <option value="all" selected="true">All (experimental + non-electronic)</option>
+                </param>
+            </when>
+            <when value="--no_annot"/>
+        </conditional>
+        
         <section name="output_options" expanded="false" title="Output Options">
-            <param name="no_file_comments" type="boolean" truevalue="--no_file_comments" falsevalue="" checked="true"
+            <param argument="--no_file_comments" type="boolean" truevalue="--no_file_comments" falsevalue="" checked="true"
                 label="Exclude header lines and stats from output files"/>
-            <param name="no_annot" type="boolean" truevalue="--no_annot" falsevalue="" checked="false"
-                label="Skip functional annotation, reporting only hits"/>
-            <param name="report_orthologs" type="boolean" truevalue="--report_orthologs" falsevalue="" checked="false"
+            <param argument="--report_orthologs" type="boolean" truevalue="--report_orthologs" falsevalue="" checked="false"
                 label="Output a file with the list of orthologs for each hits"/>
+            <param argument="--md5" type="boolean" truevalue="--md5" falsevalue="" checked="false"
+                label="Add md5 hash of each query to annotations"/>
         </section>
     </inputs>
     <outputs>
         <data name="seed_orthologs" format="tabular" label="${tool.name} on ${on_string}: seed_orthologs" from_work_dir="results.emapper.seed_orthologs">
+            <filter>ortho_method['m'] not in ['no_search', 'cache']</filter>
             <actions>
-                <action name="column_names" type="metadata" default="query_name,seed_eggNOG_ortholog,seed_ortholog_evalue,seed_ortholog_score,query_start,query_end,seed_start,seed_end,pident,query_cov,seed_cov"/>
+                <action name="column_names" type="metadata" default="@SEED_ORTHOLOG_COLUMNS@"/>
             </actions>
         </data>
         <data name="annotations" format="tabular" label="${tool.name} on ${on_string}: annotations" from_work_dir="results.emapper.annotations">
-            <filter>not output_options['no_annot']</filter>
+            <filter>annotation_options['no_annot'] == ''</filter>
             <actions>
-                <action name="column_names" type="metadata" default="query,seed_ortholog,evalue,score,max_annot_lvl,COG_category,Description,Preferred_name,GOs,EC,KEGG_ko,KEGG_Pathway,KEGG_Module,KEGG_Reaction,KEGG_rclass,BRITE,KEGG_TC,CAZy,BiGG_Reaction,PFAMseggNOG_OGs"/>
+                <conditional name="output_options.md5">
+                    <when value="True">
+                        <action name="column_names" type="metadata" default="query,seed_ortholog,evalue,score,max_annot_lvl,COG_category,Description,Preferred_name,GOs,EC,KEGG_ko,KEGG_Pathway,KEGG_Module,KEGG_Reaction,KEGG_rclass,BRITE,KEGG_TC,CAZy,BiGG_Reaction,PFAMseggNOG_OGs,md5"/>
+                    </when>
+                    <when value="False">
+                        <action name="column_names" type="metadata" default="query,seed_ortholog,evalue,score,max_annot_lvl,COG_category,Description,Preferred_name,GOs,EC,KEGG_ko,KEGG_Pathway,KEGG_Module,KEGG_Reaction,KEGG_rclass,BRITE,KEGG_TC,CAZy,BiGG_Reaction,PFAMseggNOG_OGs"/>
+                    </when>
+                </conditional>
             </actions>
         </data>
         <data name="annotations_orthologs" format="tabular" label="${tool.name} on ${on_string}: orthologs"  from_work_dir="results.emapper.orthologs">
-            <filter>output_options['report_orthologs']</filter>
+            <filter>ortho_method['m'] != 'cache' and output_options['report_orthologs']</filter>
             <actions>
                 <action name="column_names" type="metadata" default="query,orth_type,species,orthologs"/>
             </actions>
         </data>
+        <data name="no_annotations" format="fasta" label="${tool.name} on ${on_string}: Sequences wo annotation"  from_work_dir="results.emapper.no_annotations.fasta">
+            <filter>ortho_method['m'] == 'cache' and output_options['output_no_annotations']</filter>
+        </data>
     </outputs>
     <tests>
+        <!-- test producing only seed orthologs-->
         <test expect_num_outputs="1">
-            <param name="input" value="Nmar_0135.fa" ftype="fasta"/>
             <param name="eggnog_data" value="@EGGNOG_DB_VERSION@"/>
-            <param name="no_annot" value="true"/>
-            <param name="no_file_comments" value="true"/>
-            <output name="seed_orthologs" file="DIA_nlim.emapper.seed_orthologs" ftype="tabular" compare="sim_size"/>
+            <conditional name="ortho_method">
+                <param name="input" value="Nmar_0135.fa" ftype="fasta"/>
+            </conditional>
+            <conditional name="annotation_options">
+                <param name="no_annot" value="--no_annot"/>
+            </conditional>
+            <section name="output_options">
+                <param name="no_file_comments" value="true"/>
+            </section>
+            <expand macro="seed_orthologs_assertion"/>
+            <expand macro="stdout_assertion"/>
+        </test>
+        
+        <!-- test producing annotations form seed orthologs -->
+        <test expect_num_outputs="2">
+            <param name="eggnog_data" value="@EGGNOG_DB_VERSION@"/> <!-- not passed in test, but required for test to work -->
+            <conditional name="ortho_method">
+                <param name="m" value="no_search"/>
+                <param name="annotate_hits_table" value="DIA_nlim.emapper.seed_orthologs" ftype="tabular">
+                    <!-- this has no effect at the moment since column_names can not be set in uploads <metadata name="column_names" value="@SEED_ORTHOLOG_COLUMNS@"/> -->
+                </param>
+            </conditional>
+            <conditional name="annotation_options">
+            </conditional>
+            <section name="output_options">
+                <param name="report_orthologs" value="true"/>
+                <param name="no_file_comments" value="true"/>
+            </section>
+            <expand macro="annotations_assertion"/>
+            <expand macro="annotations_orthologs_assertion"/>
             <expand macro="stdout_assertion"/>
         </test>
+
+        <!-- test producing seed orthologs and annotations at once (ie the same as the previous two tests but in a single tool run) -->
         <test expect_num_outputs="3">
-            <param name="input" value="Nmar_0135.fa" ftype="fasta"/>
             <param name="eggnog_data" value="@EGGNOG_DB_VERSION@"/> <!-- not passed in test, but required for test to work -->
-            <param name="report_orthologs" value="true"/>
-            <param name="no_file_comments" value="true"/>
-            <output name="seed_orthologs" file="DIA_nlim.emapper.seed_orthologs" ftype="tabular" compare="sim_size"/>
-            <output name="annotations" file="DIA_nlim.emapper.annotations" ftype="tabular" compare="sim_size"/>
-            <output name="annotations_orthologs" file="DIA_nlim.emapper.annotations_orthologs" ftype="tabular"/>
+            <conditional name="ortho_method">
+                <param name="input" value="Nmar_0135.fa" ftype="fasta"/>
+            </conditional>
+            <section name="output_options">
+                <param name="report_orthologs" value="true"/>
+                <param name="no_file_comments" value="true"/>
+                <param name="md5" value="true"/>
+            </section>
+            <expand macro="seed_orthologs_assertion"/>
+            <expand macro="annotations_assertion" columns="22" add_metadata_columm_names=",md5" add_column_names="&#009;md5" add_column_re="\t[\d\w]+"/>
+            <expand macro="annotations_orthologs_assertion"/>
             <expand macro="stdout_assertion"/>
         </test>
-        <test expect_num_outputs="3">
-            <param name="input" value="Nmar_0135.fa" ftype="fasta"/>
+        
+        <!-- test using chached annotations from previous run -->
+        <test expect_num_outputs="2">
             <param name="eggnog_data" value="@EGGNOG_DB_VERSION@"/> <!-- not passed in test, but required for test to work -->
-            <param name="report_orthologs" value="true"/>
-            <param name="no_file_comments" value="true"/>
+            <conditional name="ortho_method">
+                <param name="m" value="cache"/>
+                <param name="input" value="Nmar_0135.fa" ftype="fasta"/>
+                <param name="cache" value="DIA_nlim.emapper.annotations_cached" ftype="tabular"/>
+            </conditional>
+            <section name="output_options">
+                <param name="report_orthologs" value="true"/>
+                <param name="no_file_comments" value="true"/>
+                <param name="md5" value="true"/>
+            </section>
+            <expand macro="annotations_assertion" columns="22" add_metadata_columm_names=",md5" add_column_names="&#009;md5" add_column_re="\t[\d\w]+"/>
+            <output name="no_annotations" ftype="fasta">
+                <assert_contents>
+                    <has_n_lines n="0"/>
+                </assert_contents>
+            </output>
+            <expand macro="stdout_assertion"/>
+        </test>
+
+        <!-- test setting tax scope-->
+        <test expect_num_outputs="3">
+            <param name="eggnog_data" value="@EGGNOG_DB_VERSION@"/> <!-- not passed in test, but required for test to work -->
+            <conditional name="ortho_method">
+                <param name="input" value="Nmar_0135.fa" ftype="fasta"/>
+            </conditional>
             <section name="annotation_options">
                 <param name="tax_scope" value="651137" />
             </section>
-            <output name="seed_orthologs" file="scoped.emapper.seed_orthologs" ftype="tabular" compare="sim_size"/>
-            <output name="annotations" file="scoped.emapper.annotations" ftype="tabular" compare="sim_size"/>
-            <output name="annotations_orthologs" file="scoped.emapper.annotations_orthologs" ftype="tabular"/>
-            <expand macro="stdout_assertion"/>
+            <section name="output_options">
+                <param name="report_orthologs" value="true"/>
+                <param name="no_file_comments" value="true"/>
+            </section>
+            <expand macro="seed_orthologs_assertion"/>
+            <expand macro="annotations_assertion"/>
+            <expand macro="annotations_orthologs_assertion"/>
+            <expand macro="stdout_assertion">
+                <has_text text="--tax_scope=651137"/>
+            </expand>
         </test>
+
+        <!-- test setting a diamond option-->
         <test expect_num_outputs="3">
-            <param name="input" value="Nmar_0135.fa" ftype="fasta"/>
             <param name="eggnog_data" value="@EGGNOG_DB_VERSION@"/> <!-- not passed in test, but required for test to work -->
-            <section name="seed_ortho_options">
-                <conditional name="ortho_method">
-                    <param name="m" value="diamond" />
-                    <param name="sensmode" value="fast" />
-                </conditional>
+            <conditional name="ortho_method">
+                <param name="m" value="diamond" />
+                <param name="input" value="Nmar_0135.fa" ftype="fasta"/>
+                <param name="sensmode" value="fast" />
+            </conditional>
+            <section name="output_options">
+                <param name="report_orthologs" value="true"/>
+                <param name="no_file_comments" value="true"/>
             </section>
-            <param name="report_orthologs" value="true"/>
-            <param name="no_file_comments" value="true"/>
-            <output name="seed_orthologs" file="DIA_nlim.emapper.seed_orthologs" ftype="tabular" compare="sim_size"/>
-            <output name="annotations" file="DIA_nlim.emapper.annotations" ftype="tabular" compare="sim_size"/>
-            <output name="annotations_orthologs" file="DIA_nlim.emapper.annotations_orthologs" ftype="tabular"/>
-            <expand macro="stdout_assertion"/>
+            <expand macro="seed_orthologs_assertion"/>
+            <expand macro="annotations_assertion"/>
+            <expand macro="annotations_orthologs_assertion"/>
+            <expand macro="stdout_assertion">
+                <has_text text="--sensmode fast"/>
+            </expand>
         </test>
         <!-- not enabled as it requires a specific .db file, hard to minimize -->
         <!--test>
+            <param name="eggnog_data" value="@EGGNOG_DB_VERSION@"/>
             <param name="input" value="Nmar_0135.fa" ftype="fasta"/>
-            <param name="eggnog_data" value="@EGGNOG_DB_VERSION@"/>
             <section name="seed_ortho_options">
                 <conditional name="ortho_method">
                     <param name="m" value="mmseqs" />
@@ -435,6 +537,28 @@
 - ``COG_functional_categories``: COG functional category inferred from best matching OG
 - ``eggNOG_free_text_description``
 
+**Recommentation for large input data**
+
+EggNOG-mapper consists of two phases
+
+1. finding seed orthologous sequences (compute intensive)
+2. expanding annotations (IO intensive)
+
+by default (i.e. if *Method to search seed orthologs* is not *Skip search stage...* and *Annotate seed orthologs* is *Yes*)
+both phases are executed within one tool run. 
+
+For large input FASTA datasets in can be favourable to split this in two separate
+tool runs as follows:
+
+1. Split the FASTA (e.g. 1M seqs per data set)
+2. Run the search phase only (set *Annotate seed orthologs* to *No*) on the separate FASTA files.
+3. Run the annotation phase (set *Method to search seed orthologs* to *Skip search stage...*)
+
+See [also](https://github.com/eggnogdb/eggnog-mapper/wiki/eggNOG-mapper-v2.1.5-to-v2.1.8#Setting_up_large_annotation_jobs)
+
+Another alternative is to use cached annotations (produced in a run with --md5 enabled).
+
+
     ]]></help>
     <expand macro="citations"/>
 </tool>
--- a/test-data/DIA_nlim.emapper.annotations	Mon Jun 20 12:48:22 2022 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,2 +0,0 @@
-#query	seed_ortholog	evalue	score	eggNOG_OGs	max_annot_lvl	COG_category	Description	Preferred_name	GOs	EC	KEGG_ko	KEGG_Pathway	KEGG_Module	KEGG_Reaction	KEGG_rclass	BRITE	KEGG_TC	CAZy	BiGG_Reaction	PFAMs
-Nmar_0135	436308.Nmar_0135	7.67e-188	503.0	COG1083@1|root,arCOG04817@2157|Archaea,41T2K@651137|Thaumarchaeota	651137|Thaumarchaeota	M	Cytidylyltransferase	-	-	-	ko:K07257	-	-	-	-	ko00000	-	-	-	-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/DIA_nlim.emapper.annotations_cached	Tue Jul 19 15:14:11 2022 +0000
@@ -0,0 +1,2 @@
+#query	seed_ortholog	evalue	score	eggNOG_OGs	max_annot_lvl	COG_category	Description	Preferred_name	GOs	EC	KEGG_ko	KEGG_Pathway	KEGG_Module	KEGG_Reaction	KEGG_rclass	BRITE	KEGG_TC	CAZy	BiGG_Reaction	PFAMs	md5
+Nmar_0135	436308.Nmar_0135	7.67e-188	503.0	COG1083@1|root,arCOG04817@2157|Archaea,41T2K@651137|Thaumarchaeota	651137|Thaumarchaeota	M	Cytidylyltransferase	-	-	-	ko:K07257	-	-	-	-	ko00000	-	-	-	-	9fb52f96004c566b17893d597c94054e
--- a/test-data/DIA_nlim.emapper.annotations_orthologs	Mon Jun 20 12:48:22 2022 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,3 +0,0 @@
-#query	orth_type	species	orthologs
-Nmar_0135	one2one	Marine Group I thaumarchaeote SCGC AB-629-I23(1131266)	*ARWQ01000003_gene1537
-Nmar_0135	seed	Nitrosopumilus maritimus SCM1(436308)	*Nmar_0135
--- a/test-data/nlim_1033.fasta	Mon Jun 20 12:48:22 2022 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,7 +0,0 @@
->Nlim_1033886738.Nlim_1033Cytidyltransferase-like protein 
-MELIKKSILTELYLSGITGKSHIDNLTKKGFTQKLIDLE
-IDELIKNKLVKEDRAILTELGRSSLRVVLAGGVFDIIHP
-GHIYTLNAAKSLGDVLIVVVATDNTALKMKKRQPLHSKE
-QRQELVNSLIMVDLCLIGQEDDIFKTVNLVKPQIIALGY
-DQVHQEKFIIDGCKKIQLDAKVARLQSPIPESSSSKIQK
-EYGESIHGI
--- a/test-data/scoped.emapper.annotations	Mon Jun 20 12:48:22 2022 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,2 +0,0 @@
-#query	seed_ortholog	evalue	score	eggNOG_OGs	max_annot_lvl	COG_category	Description	Preferred_name	GOs	EC	KEGG_ko	KEGG_Pathway	KEGG_Module	KEGG_Reaction	KEGG_rclass	BRITE	KEGG_TC	CAZy	BiGG_Reaction	PFAMs
-Nmar_0135	436308.Nmar_0135	7.67e-188	503.0	COG1083@1|root,arCOG04817@2157|Archaea,41T2K@651137|Thaumarchaeota	651137|Thaumarchaeota	M	Cytidylyltransferase	-	-	-	ko:K07257	-	-	-	-	ko00000	-	-	-	-
--- a/test-data/scoped.emapper.annotations_orthologs	Mon Jun 20 12:48:22 2022 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,3 +0,0 @@
-#query	orth_type	species	orthologs
-Nmar_0135	one2one	Marine Group I thaumarchaeote SCGC AB-629-I23(1131266)	*ARWQ01000003_gene1537
-Nmar_0135	seed	Nitrosopumilus maritimus SCM1(436308)	*Nmar_0135
--- a/test-data/scoped.emapper.seed_orthologs	Mon Jun 20 12:48:22 2022 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,2 +0,0 @@
-#qseqid	sseqid	evalue	bitscore	qstart	qend	sstart	send	pident	qcov	scov
-Nmar_0135	436308.Nmar_0135	7.67e-188	503.0	1	252	1	252	100.0	100.0	100.0