Mercurial > repos > iuc > magicblast
changeset 0:e6799e98c5fb draft
"planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/tools/blast commit 15fc6c06f743bae276ff02dc405e7da61a07bd08"
author | iuc |
---|---|
date | Tue, 05 Apr 2022 12:11:08 +0000 |
parents | |
children | aea6702a3cd5 |
files | macros.xml magicblast.xml test-data/blastdb.loc test-data/gilist1.tabular test-data/phiX174/blastdb.nhd test-data/phiX174/blastdb.nhi test-data/phiX174/blastdb.nhr test-data/phiX174/blastdb.nin test-data/phiX174/blastdb.nog test-data/phiX174/blastdb.nsd test-data/phiX174/blastdb.nsi test-data/phiX174/blastdb.nsq test-data/query1.fasta.gz test-data/query_forward1.fastqsanger.gz test-data/query_reverse1.fastqsanger.gz test-data/subject1.fasta.gz test-data/taxids.tabular tool-data/blastdb.loc.sample tool_data_table_conf.xml.sample tool_data_table_conf.xml.test |
diffstat | 20 files changed, 471 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/macros.xml Tue Apr 05 12:11:08 2022 +0000 @@ -0,0 +1,33 @@ +<macros> + <token name="@TOOL_VERSION@">1.6.0</token> + <token name="@VERSION_SUFFIX@">0</token> + <token name="@PROFILE@">20.09</token> + <xml name="requirements"> + <requirements> + <requirement type="package" version="@TOOL_VERSION@">magicblast</requirement> + <requirement type="package" version="1.15">samtools</requirement> + </requirements> + </xml> + <xml name="output_sort_param"> + <param name="output_sort" type="select" label="BAM sorting mode" help="The 'Not sorted' option can significantly extend the run time of the tool (it runs using a single thread)"> + <option value="coordinate" selected="True">Sort by chromosomal coordinates</option> + <option value="name">Sort by read names</option> + <option value="unsorted">Not sorted (sorted as input)</option> + </param> + </xml> + <xml name="sanitize_query" token_validinitial="string.ascii_letters,string.digits,string.whitespace,string.punctuation"> + <sanitizer> + <valid initial="@VALIDINITIAL@"> + <remove value="'"/> + </valid> + <mapping initial="none"> + <add source="'" target="'"'"'"/> + </mapping> + </sanitizer> + </xml> + <xml name="citations"> + <citations> + <citation type="doi">10.1186/s12859-019-2996-x</citation> + </citations> + </xml> +</macros>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/magicblast.xml Tue Apr 05 12:11:08 2022 +0000 @@ -0,0 +1,362 @@ +<tool id="magicblast" name="Magic-BLAST: map large RNA or DNA sequences" version="@TOOL_VERSION@+galaxy@VERSION_SUFFIX@" profile="@PROFILE@"> + <description>against a whole genome or transcriptome</description> + <macros> + <import>macros.xml</import> + </macros> + <expand macro="requirements"/> + <command detect_errors="exit_code"><![CDATA[ +#import os + +magicblast +-num_threads \${GALAXY_SLOTS:-8} +#if $query.is_of_type('fasta.gz', 'fastqsanger.gz'): + -query <(gunzip -c '${query}') +#else: + -query '${query}' +#end if +#if $query_mate: + -paired + #if $query.is_of_type('fasta.gz', 'fastqsanger.gz'): + -query_mate <(gunzip -c '${query}') + #else: + -query_mate '${query}' + #end if +#end if + +#if $query.is_of_type('fastqsanger', 'fastqsanger.gz'): + -infmt fastq +#end if + +#if $db_opts.db_opts_selector == "histdb": + -db '${os.path.join($db_opts.histdb.extra_files_path, "blastdb")}' +#elif $db_opts.db_opts_selector == "db": + -db '${os.path.join($db_opts.database.fields.path, "blastdb")}' +#else: + #if $db_opts.subject.is_of_type('fasta.gz'): + -subject <(gunzip -c '${$db_opts.subject}') + #else: + -subject '${db_opts.subject}' + #end if +#end if + +## General search options +-word_size $general_search.word_size +-gapopen $general_search.gapopen +-gapextend $general_search.gapextend +-penalty $general_search.penalty +-max_intron_length $general_search.max_intron_length + +## Query filtering options +$query_filtering.lcase_masking +-validate_seqs $query_filtering.validate_seqs +-limit_lookup $query_filtering.limit_lookup +-max_db_word_count $query_filtering.max_db_word_count +-lookup_stride $query_filtering.lookup_stride + +## Restrict database search +#if $restrict_search.gilist: + -gilist '$restrict_search.gilist' +#end if +#if $restrict_search.negative_gilist: + -negative_gilist '$restrict_search.negative_gilist' +#end if +#if $restrict_search.seqidlist: + -seqidlist '$restrict_search.seqidlist' +#end if +#if $restrict_search.negative_seqidlist: + -negative_seqidlist '$restrict_search.negative_seqidlist' +#end if +#if str($restrict_search.taxids) != '': + --taxids '$restrict_search.taxids' +#end if +#if $restrict_search.taxidlist: + -taxidlist '$restrict_search.taxidlist' +#end if +#if str($restrict_search.negative_taxids) != '': + --negative_taxids '$restrict_search.negative_taxids' +#end if +#if $restrict_search.negative_taxidlist: + -negative_taxidlist '$restrict_search.negative_taxidlist' +#end if + +## Mapping options +-score $mapping.score +#if $mapping.max_edit_dist > 0: + -max_edit_dist $mapping.max_edit_dist +#end if +-splice '$mapping.splice' +-reftype '$mapping.reftype' + +## Output unaligned options +#if str($output_options.report_unaligned_cond.report_unaligned) == 'yes': + #if str($output_options.report_unaligned_cond.report_unaligned_separately_cond.report_unaligned_separately) == 'yes': + -out_unaligned 'out_unaligned' + #if str($output_options.report_unaligned_cond.report_unaligned_separately_cond.unaligned_fmt_cond.unaligned_fmt) == 'bam': + -unaligned_fmt 'sam' + #else: + -unaligned_fmt '$output_options.report_unaligned_cond.report_unaligned_separately_cond.unaligned_fmt_cond.unaligned_fmt' + #end if + #end if +#else: + -no_unaligned +#end if + +## Additional output options +$output_options.no_discordant +## Switch default SAM output to be BAM. +#if str($output_options.outfmt_cond.outfmt) == 'bam': + $output_options.outfmt_cond.md_tag + #if $query_mate: + $output_options.outfmt_cond.no_query_id_trim + #end if + -out 'output.sam' + #if str($output_options.outfmt_cond.output_sort) == 'coordinate': + && samtools sort -@\${GALAXY_SLOTS:-4} -O bam 'output.sam' > '$output' + #elif str($output_options.outfmt_cond.output_sort) == 'name': + && samtools sort -n -@\${GALAXY_SLOTS:-4} -O bam -o 'output.sam' > '$output' + #else: + && samtools view -@\${GALAXY_SLOTS:-4} -bS 'output.sam' > '$output' + #end if +#else: + -out '$output' + -outfmt '$output_options.outfmt_cond.outfmt' +#end if + +## Convert out_unaligned from SAM to BAM if necessary + +#if str($output_options.report_unaligned_cond.report_unaligned) == 'yes': + #if str($output_options.report_unaligned_cond.report_unaligned_separately_cond.report_unaligned_separately) == 'yes': + #if str($output_options.report_unaligned_cond.report_unaligned_separately_cond.unaligned_fmt_cond.unaligned_fmt) == 'bam': + #if str($output_options.report_unaligned_cond.report_unaligned_separately_cond.unaligned_fmt_cond.output_sort) == 'coordinate': + && samtools sort -@\${GALAXY_SLOTS:-4} -O bam -o 'out_unaligned' > '$output_unaligned' + #elif str($output_options.report_unaligned_cond.report_unaligned_separately_cond.unaligned_fmt_cond.output_sort) == 'name': + && samtools sort -n -@\${GALAXY_SLOTS:-4} -O bam -o 'out_unaligned' > '$output_unaligned' + #else: + && samtools view -@\${GALAXY_SLOTS:-4} -bS 'out_unaligned' > '$output_unaligned' + #end if + #else: + && mv 'out_unaligned' '$output_unaligned' + #end if + #end if +#end if + ]]></command> + <inputs> + <param argument="-query" type="data" format="fasta,fasta.gz,fastqsanger,fastqsanger.gz" label="Query file" help="Fasta or fastqsanger, optionally gzipped"/> + <param argument="-query_mate" type="data" format="fasta,fasta.gz,fastqsanger,fastqsanger.gz" optional="true" label="Query mate file (optional)" help="Fasta or fastqsanger, optionally gzipped"/> + <conditional name="db_opts"> + <param name="db_opts_selector" type="select" label="Subject database/sequences"> + <option value="histdb" selected="true">blast database from your history</option> + <option value="db">Locally installed blast database</option> + <option value="file">fasta file from your history (see warning in the tool help section below)</option> + </param> + <when value="histdb"> + <param name="histdb" type="data" format="blastdbn" label="Nucleotide blast database"/> + </when> + <when value="db"> + <param name="database" type="select" multiple="true" optional="false" label="Nucleotide blast database"> + <options from_data_table="blastdb"/> + </param> + </when> + <when value="file"> + <param argument="-subject" type="data" format="fasta,fasta.gz" label="Nucleotide fasta subject file to use instead of a database"/> + </when> + </conditional> + <section name="general_search" title="General search"> + <param argument="-word_size" type="integer" value="18" min="12" label="Minimum number of consecutive bases matching exactly"/> + <param argument="-gapopen" type="integer" value="0" min="0" label="Cost to open a gap"/> + <param argument="-gapextend" type="integer" value="0" min="0" label="Cost to extend a gap"/> + <param argument="-penalty" type="integer" value="-4" max="0" label="Penalty for a nucleotide mismatch"/> + <param argument="-max_intron_length" type="integer" value="500000" min="0" label="Maximum allowed intron length"/> + </section> + <section name="query_filtering" title="Query filtering"> + <param argument="-lcase_masking" type="boolean" truevalue="-lcase_masking" falsevalue="" checked="false" label="Use lower case filtering in subject sequences?"/> + <param argument="-validate_seqs" type="boolean" truevalue="true" falsevalue="false" checked="true" label="Reject low quality sequences?"/> + <param argument="-limit_lookup" type="boolean" truevalue="true" falsevalue="false" checked="true" label="Remove word seeds with high frequency in the searched database?"/> + <param argument="-max_db_word_count" type="integer" value="30" min="0" label="Words that appear more than this number of times in the database will be masked in the lookup table"/> + <param argument="-lookup_stride" type="integer" value="0" min="0" label="Number of words to skip after collecting one while creating a lookup table"/> + </section> + <section name="restrict_search" title="Restrict database search"> + <param argument="-gilist" type="data" format="tabular" optional="true" label="Tabular file containing list of GIs to which to restrict database search" help="Available only for database searches"/> + <param argument="-negative_gilist" type="data" format="tabular" optional="true" label="Tabular file containing list of GIs to restrict database search to everything except the specified GIs" help="Available only for database searches"/> + <param argument="-seqidlist" type="data" format="tabular" optional="true" label="Tabular file containing list of SeqIDs to which to restrict database search" help="Available only for database searches"/> + <param argument="-negative_seqidlist" type="data" format="tabular" optional="true" label="Tabular file containing list of SeqIDs to restrict database search to everything except the specified SeqIDs" help="Available only for database searches"/> + <param argument="-taxids" type="text" optional="true" label="Comma-separated list of taxonomy IDs to which to restrict database search" help="Available only for database searches"> + <expand macro="sanitize_query" validinitial="string.ascii_letters,string.digits,string.whitespace,string.punctuation"/> + </param> + <param argument="-taxidlist" type="data" format="tabular" optional="true" label="Tabular file containing list of taxonomy IDs to which to restrict database search" help="Available only for database searches"/> + <param argument="-negative_taxids" type="text" optional="true" label="Comma-separated list of taxonomy IDs to restrict database search to everything except the specified taxonomy IDs" help="Available only for database searches"> + <expand macro="sanitize_query" validinitial="string.ascii_letters,string.digits,string.whitespace,string.punctuation"/> + </param> + <param argument="-negative_taxidlist" type="data" format="tabular" optional="true" label="Tabular file containing list of taxonomy IDs to restrict database search to everythin except the specified taxonomy IDs" help="Available only for database searches"/> + </section> + <section name="mapping" title="Mapping"> + <param argument="-score" type="integer" value="0" min="0" label="Cutoff score for accepting alignments" help="Zero value ignores"/> + <param argument="-max_edit_dist" type="integer" value="0" min="0" label="Cutoff edit distance for accepting an alignment" help="Zero value is unlimited"/> + <param argument="-splice" type="boolean" truevalue="true" falsevalue="false" checked="true" label="Search for spliced alignments?"/> + <param argument="-reftype" type="select" label="Type of the reference"> + <option value="genome" selected="true">genome</option> + <option value="transcriptome">transcriptome</option> + </param> + </section> + <section name="output_options" title="Output options"> + <conditional name="report_unaligned_cond"> + <param name="report_unaligned" type="select" label="Report unaligned reads?"> + <option value="yes" selected="true">Yes</option> + <option value="no">No</option> + </param> + <when value="yes"> + <conditional name="report_unaligned_separately_cond"> + <param name="report_unaligned_separately" type="select" label="Output unaligned reads to a separate file?" help="Select No to output all reads to the same file"> + <option value="no" selected="true">No</option> + <option value="yes">Yes</option> + </param> + <when value="no"/> + <when value="yes"> + <conditional name="unaligned_fmt_cond"> + <param argument="-unaligned_fmt" type="select" label="Output format for unaligned reads"> + <option value="bam" selected="true">bam</option> + <option value="tabular">tabular</option> + <option value="fasta">fasta</option> + </param> + <when value="bam"> + <expand macro="output_sort_param"/> + </when> + <when value="tabular"/> + <when value="fasta"/> + </conditional> + </when> + </conditional> + </when> + <when value="no"/> + </conditional> + <conditional name="outfmt_cond"> + <param argument="-outfmt" type="select" label="Output format"> + <option value="bam" selected="true">bam</option> + <option value="tabular">tabular</option> + </param> + <when value="bam"> + <expand macro="output_sort_param"/> + <param argument="-md_tag" type="boolean" truevalue="-md_tag" falsevalue="" checked="false" label="Include MD tag in BAM output?"/> + <param argument="-no_query_id_trim" type="boolean" truevalue="-no_query_id_trim" falsevalue="" checked="false" label="Do not trim '.1', '/1', '.2', or '/2' at the end of read ids in BAM output for paired reads?" help="Ignored if no query mate"/> + </when> + <when value="tabular"/> + </conditional> + <param argument="-no_discordant" type="boolean" truevalue="-no_discordant" falsevalue="" checked="false" label="Suppress discordant alignments for paired reads?" help="Ignored if no query mate"/> + </section> + </inputs> + <outputs> + <data name="output" format="bam" label="${tool.name} on ${on_string}"> + <change_format> + <when input="output.outfmt_cond.outfmt" value="tabular" format="tabular"/> + </change_format> + </data> + <data name="output_unaligned" format="bam" label="${tool.name} on ${on_string}: unaligned reads"> + <filter>output_options['report_unaligned_cond']['report_unaligned'] == 'yes' and output_options['report_unaligned_cond']['report_unaligned_separately_cond']['report_unaligned_separately'] == 'yes'</filter> + <change_format> + <when input="output_options.report_unaligned_cond.report_unaligned_separately_cond.unaligned_fmt_cond.unaligned_fmt" value="tabular" format="tabular"/> + <when input="output_options.report_unaligned_cond.report_unaligned_separately_cond.unaligned_fmt_cond.unaligned_fmt" value="fasta" format="fasta"/> + </change_format> + </data> + </outputs> + <tests> + <!-- Single fasta.gz input, subject file --> + <test expect_num_outputs="1"> + <param name="query" value="query1.fasta.gz" ftype="fasta.gz"/> + <param name="db_opts_selector" value="file"/> + <param name="subject" value="subject1.fasta.gz" ftype="fasta.gz"/> + <output name="output" ftype="bam"> + <assert_contents> + <has_size value="1247" delta="50"/> + </assert_contents> + </output> + </test> + <!-- Single fasta.gz input, subject file, output unaligned reads separately--> + <test expect_num_outputs="2"> + <param name="query" value="query1.fasta.gz" ftype="fasta.gz"/> + <param name="db_opts_selector" value="file"/> + <param name="subject" value="subject1.fasta.gz" ftype="fasta.gz"/> + <param name="report_unaligned_separately" value="yes"/> + <param name="unaligned_fmt" value="tabular"/> + <output name="output" ftype="bam"> + <assert_contents> + <has_size value="492" delta="50"/> + </assert_contents> + </output> + <output name="output_unaligned" ftype="tabular"> + <assert_contents> + <has_size value="959"/> + </assert_contents> + </output> + </test> + <!-- Single fasta.gz input, subject file, gilist file, results in error --> + <test expect_failure="true"> + <param name="query" value="query1.fasta.gz" ftype="fasta.gz"/> + <param name="db_opts_selector" value="file"/> + <param name="subject" value="subject1.fasta.gz" ftype="fasta.gz"/> + <param name="report_unaligned_separately" value="yes"/> + <param name="gilist" value="gilist1.tabular" ftype="tabular"/> + <assert_stderr> + <has_text text="Incompatible with argument:"/> + </assert_stderr> + </test> + <!-- Single fasta.gz input, cached db, taxidlist, results in error --> + <test expect_failure="true"> + <param name="query" value="query1.fasta.gz" ftype="fasta.gz"/> + <param name="db_opts_selector" value="db"/> + <param name="database" value="phiX174"/> + <param name="taxidlist" value="taxids.tabular" ftype="tabular"/> + <assert_stderr> + <has_text text="Taxonomy filtering is not supported in v4 BLAST dbs"/> + </assert_stderr> + </test> + <!-- Paired fastqsanger.gz input, subject file --> + <test expect_num_outputs="1"> + <param name="query" value="query_forward1.fastqsanger.gz" ftype="fastqsanger.gz"/> + <param name="query_mate" value="query_reverse1.fastqsanger.gz" ftype="fastqsanger.gz"/> + <param name="db_opts_selector" value="file"/> + <param name="subject" value="subject1.fasta.gz" ftype="fasta.gz"/> + <output name="output" ftype="bam"> + <assert_contents> + <has_size value="62080" delta="50"/> + </assert_contents> + </output> + </test> + <!-- Paired fastqsanger.gz input, cached blast db --> + <test expect_num_outputs="1"> + <param name="query" value="query_forward1.fastqsanger.gz" ftype="fastqsanger.gz"/> + <param name="query_mate" value="query_reverse1.fastqsanger.gz" ftype="fastqsanger.gz"/> + <param name="db_opts_selector" value="db"/> + <param name="database" value="phiX174"/> + <output name="output" ftype="bam"> + <assert_contents> + <has_size value="62079" delta="50"/> + </assert_contents> + </output> + </test> + </tests> + <help><![CDATA[ +**What it does** + +.. class:: warningmark + +In addition to a BLAST database, you can also search against a fasta file of subject (target) sequences. However, this is not +advised because it is slower (only one CPU is used), but more importantly gives e-values for pairwise searches (very small +e-values which will look overly signficiant). In most cases you should convert the fasta file into a blast database using +*makeblastdb* and search against that. + +Magic-BLAST is a tool for mapping large next-generation RNA or DNA sequencing runs against a whole genome or transcriptome. +Each alignment optimizes a composite score, taking into account simultaneously the two reads of a pair, and in case of RNA-seq, +locating the candidate introns and adding up the score of all exons. This is very different from other versions of BLAST, where +each exon is scored as a separate hit and read-pairing is ignored. + +Magic-BLAST incorporates within the NCBI BLAST code framework ideas developed in the NCBI Magic pipeline, in particular hit +extensions by local walk and jump, and recursive clipping of mismatches near the edges of the reads, which avoids accumulating +artefactual mismatches near splice sites and is needed to distinguish short indels from substitutions near the edges. + +The tool accepts a single or paired set of reads in fasta or fastqsanger format and produces bam or tabular output. + +More information about Magic-BLAST is available in the +`online documentation <https://ncbi.github.io/magicblast/>`_. + ]]></help> + <expand macro="citations"/> +</tool>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/blastdb.loc Tue Apr 05 12:11:08 2022 +0000 @@ -0,0 +1,4 @@ +# This file is just a placeholder since Galxy does +# not yet suppoort uploading a BLAST database, which +# is required for functional tests. +phiX174 phiX174 ${__HERE__}/phiX174
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/gilist1.tabular Tue Apr 05 12:11:08 2022 +0000 @@ -0,0 +1,1 @@ +57163782
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/phiX174/blastdb.nhd Tue Apr 05 12:11:08 2022 +0000 @@ -0,0 +1,7 @@ +15495040301 +25770063902 +2660043075 +27122163083 +3427376816 +40885395164 +7819003870
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/phiX174/blastdb.nsd Tue Apr 05 12:11:08 2022 +0000 @@ -0,0 +1,7 @@ +gnl|bl_ord_id|00 +gnl|bl_ord_id|11 +gnl|bl_ord_id|22 +gnl|bl_ord_id|33 +gnl|bl_ord_id|44 +gnl|bl_ord_id|55 +gnl|bl_ord_id|66
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/taxids.tabular Tue Apr 05 12:11:08 2022 +0000 @@ -0,0 +1,1 @@ +57163782
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tool-data/blastdb.loc.sample Tue Apr 05 12:11:08 2022 +0000 @@ -0,0 +1,44 @@ +# This is a sample file distributed with Galaxy that is used to define a +# list of nucleotide BLAST databases, using three columns tab separated: +# +# <unique_id>{tab}<database_caption>{tab}<base_name_path> +# +# The captions typically contain spaces and might end with the build date. +# It is important that the actual database name does not have a space in +# it, and that there are only two tabs on each line. +# +# You can download the NCBI provided protein databases like NR from here: +# ftp://ftp.ncbi.nlm.nih.gov/blast/db/ +# +# For simplicity, many Galaxy servers are configured to offer just a live +# version of each NCBI BLAST database (updated with the NCBI provided +# Perl scripts or similar). In this case, we recommend using the case +# sensistive base-name of the NCBI BLAST databases as the unique id. +# Consistent naming is important for sharing workflows between Galaxy +# servers. +# +# For example, consider the NCBI partially non-redundant nucleotide +# nt BLAST database, where you have downloaded and decompressed the +# files under /data/blastdb/ meaning at the command line BLAST+ would +# would look at the files /data/blastdb/nt.n* when run with: +# +# $ blastn -db /data/blastdb/nt -query ... +# +# In this case use nr (lower case to match the NCBI file naming) as the +# unique id in the first column of blastdb_p.loc, giving an entry like +# this: +# +# nt{tab}NCBI partially non-redundant (nt){tab}/data/blastdb/nt +# +# Alternatively, rather than a "live" mirror of the NCBI databases which +# are updated automatically, for full reproducibility the Galaxy Team +# recommend saving date-stamped copies of the databases. In this case +# your blastdb.loc file should include an entry per line for each +# version you have stored. For example: +# +# nt_05Jun2010{tab}NCBI nt (partially non-redundant) 05 Jun 2010{tab}/data/blastdb/05Jun2010/nt +# nt_15Aug2010{tab}NCBI nt (partially non-redundant) 15 Aug 2010{tab}/data/blastdb/15Aug2010/nt +# ...etc... +# +# See also blastdb_p.loc which is for any protein BLAST database, and +# blastdb_d.loc which is for any protein domains databases (like CDD).
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tool_data_table_conf.xml.sample Tue Apr 05 12:11:08 2022 +0000 @@ -0,0 +1,6 @@ +<tables> + <table name="blastdb" comment_char="#" allow_duplicate_entries="False"> + <columns>value, name, path</columns> + <file path="tool-data/blastdb.loc"/> + </table> +</tables>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tool_data_table_conf.xml.test Tue Apr 05 12:11:08 2022 +0000 @@ -0,0 +1,6 @@ +<tables> + <table name="blastdb" comment_char="#" allow_duplicate_entries="False"> + <columns>value, name, path</columns> + <file path="${__HERE__}/test-data/blastdb.loc"/> + </table> +</tables>