Mercurial > repos > iuc > bcftools_norm
changeset 24:5fa262ce95dd draft default tip
planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/main/tools/bcftools commit f6efda26965eb73c9107d367fd5ffdf246ed0dbc
| author | iuc |
|---|---|
| date | Tue, 02 Dec 2025 08:20:05 +0000 |
| parents | 271965b55437 |
| children | |
| files | bcftools_norm.xml macros.xml |
| diffstat | 2 files changed, 269 insertions(+), 191 deletions(-) [+] |
line wrap: on
line diff
--- a/bcftools_norm.xml Sun Aug 18 09:59:16 2024 +0000 +++ b/bcftools_norm.xml Tue Dec 02 08:20:05 2025 +0000 @@ -4,30 +4,16 @@ <token name="@EXECUTABLE@">norm</token> <import>macros.xml</import> </macros> - <expand macro="bio_tools" /> + <expand macro="bio_tools"/> <expand macro="requirements"> <expand macro="samtools_requirement"/> - <!-- gawk only required for current bcftools norm bug workaround - Remove once fixed (see command section below --> - <requirement type="package" version="5.0.1">gawk</requirement> </expand> - <expand macro="version_command" /> + <expand macro="version_command"/> <command detect_errors="aggressive"><![CDATA[ -@PREPARE_ENV@ @PREPARE_INPUT_FILE@ #set $section = $reference_source @PREPARE_FASTA_REF@ -## The next two lines are a workaround for a bug in bcftools norm up to version -## 1.9, which caused indel normalization to be case-sensitive -## see: -## https://github.com/samtools/bcftools/commit/65b211da1f5cdbf1c7c11eb610481a736fa88bda -## https://github.com/samtools/bcftools/commit/77b0a27a156803e382d60651ff94ea0bd95fad0f -## With the next release of bcftools, this should be fixed and, at that point, -## the time-consuming on-the-fly uppercasing should be removed again. -awk '{ if ($0 !~ />/) {print toupper($0)} else {print $0} }' '$input_fa_ref' > ref_upper.fa && -#set $input_fa_ref = 'ref_upper.fa' - #set $section = $sec_restrict @PREPARE_TARGETS_FILE@ @PREPARE_REGIONS_FILE@ @@ -41,7 +27,7 @@ #if $rm_dup: --rm-dup "$rm_dup" #end if -$atomize +$atomization #if $old_rec_tag --old-rec-tag '$old_rec_tag' #end if @@ -51,10 +37,16 @@ #if $multiallelics.mode == '+': ${multiallelics.strict_filter} #end if - #if $sec_default.site_win: --site-win ${sec_default.site_win} #end if +--sort ${sec_default.sort} +#if str($sec_filter_norm.include): + --include '${sec_filter_norm.include}' +#end if +#if str($sec_filter_norm.exclude): + --exclude '${sec_filter_norm.exclude}' +#end if #set $section = $sec_restrict @REGIONS@ @@ -69,34 +61,30 @@ ]]> </command> <inputs> - <expand macro="macro_input" /> - <expand macro="macro_fasta_ref" /> - <param name="check_ref" type="select" display="radio" - label="When any REF allele does not match the reference genome base" - help="Warnings about REF mismatches will be emitted to the standard - error (stderr) stream, and it is recommended to check there for - problems if you choose not to exit with an error immediately upon - encountering a mismatch."> + <expand macro="macro_input"/> + <expand macro="macro_fasta_ref"/> + <param name="check_ref" type="select" display="radio" label="When any REF allele does not match the reference genome base" help="Warnings about REF mismatches will be emitted to the standard error (stderr) stream, and it is recommended to check there for problems if you choose not to exit with an error immediately upon encountering a mismatch."> <option value="w">ignore the problem (-w)</option> <option value="wx">exclude the variant record from the output (-wx)</option> <option value="ws">fix the variant record using the reference genome information (-ws)</option> <option value="e">exit with an error (-e)</option> </param> - <param argument="--atomize" type="boolean" truevalue="--atomize" falsevalue="" checked="false" - label="Atomize" help="Decompose complex variants (e.g. MNVs become consecutive SNVs)" /> - <param argument="--do-not-normalize" name="normalize_indels" type="boolean" truevalue="" falsevalue="--do-not-normalize" checked="false" - label="Left-align and normalize indels?" /> + <param name="atomization" type="select" display="radio" label="Atomize" help="Decompose complex variants (e.g. MNVs become consecutive SNVs)"> + <option value="">Do not atomize</option> + <option value="--atomize">Atomize and use * ALT allele for proper genotype representation (--atomize)</option> + <option value="--atomize --atom-overlaps .">Atomize and accept missing genotype information (legacy behavior; --atomize --atom-overlaps .)</option> + </param> + <param argument="--do-not-normalize" name="normalize_indels" type="boolean" truevalue="" falsevalue="--do-not-normalize" checked="false" label="Left-align and normalize indels?"/> <param argument="--old-rec-tag" type="text" value="" optional="true" label="Annotate modified records with INFO/STR indicating the original variant"> <sanitizer invalid_char=""> <valid initial="string.letters,string.digits"> - <add value="_" /> - <add value="/" /> + <add value="_"/> + <add value="/"/> </valid> </sanitizer> <validator type="regex">[0-9a-zA-Z_/]+</validator> </param> - <param name="rm_dup" type="select" display="radio" - label="Perform deduplication for the folowing types of variant records"> + <param name="rm_dup" type="select" display="radio" label="Perform deduplication for the folowing types of variant records"> <option value="">do not deduplicate any records</option> <option value="snps">snps</option> <option value="indels">indels</option> @@ -106,142 +94,141 @@ <conditional name="multiallelics"> <param name="mode" type="select" label="~multiallelics"> <option value="">preserve multiallelic/biallelic sites</option> - <option value="-">split multiallelic sites into biallelic records (-)</option> - <option value="+">join biallelic sites into multiallelic records (+)</option> + <option value="-">split multiallelic sites into biallelic records (-)</option> + <option value="+">join biallelic sites into multiallelic records (+)</option> </param> - <when value="" /> + <when value=""/> <when value="-"> - <param name="multiallelic_types" type="select" display="radio" - label="split the following variant types"> + <param name="multiallelic_types" type="select" display="radio" label="split the following variant types"> <option value="snps">SNPs</option> <option value="indels">indels</option> <option value="both" selected="true">both</option> </param> </when> <when value="+"> - <param name="multiallelic_types" type="select" display="radio" - label="merge the following variant types"> + <param name="multiallelic_types" type="select" display="radio" label="Merge the following variant types"> <option value="snps">SNPs</option> <option value="indels">indels</option> <option value="both" selected="true">SNPs and indels, but keep variants of the two types separate (both)</option> <option value="any">SNPs and indels, and merge variant records of different types (any)</option> </param> - <param name="strict_filter" type="boolean" truevalue="--strict-filter" falsevalue="" - label="Strict Filter" - help="merged site is PASS only if all sites being merged PASS" /> + <param name="strict_filter" type="boolean" truevalue="--strict-filter" falsevalue="" label="Strict Filter" help="merged site is PASS only if all sites being merged PASS"/> </when> </conditional> <section name="sec_restrict" expanded="false" title="Restrict all operations to"> - <expand macro="macro_restrict" type="region" label_type="Region" /> - <expand macro="macro_restrict" type="target" label_type="Target"> - <expand macro="macro_invert_targets" /> - </expand> + <expand macro="macro_region_restrict"/> + <expand macro="macro_target_restrict"/> + </section> + <section name="sec_default" expanded="false" title="Other Options"> + <param name="site_win" type="integer" label="Site Window" value="1000" optional="True" help="(-w, --site-win) Buffer for sorting lines which changed position during realignment"/> + <param argument="--sort" type="select" label="Sort normalized allele order" help="Select the sort order for output records after normalization."> + <option value="pos" selected="true">Chromosome then position (pos)</option> + <option value="lex">Lexicographical allele order (lex)</option> + </param> </section> - - <section name="sec_default" expanded="false" title="Other Options"> - <param name="site_win" type="integer" label="Site Window" value="1000" optional="True" - help="(-w, --site-win) Buffer for sorting lines which changed position during realignment" /> + <section name="sec_filter_norm" expanded="false" title="Normalize only selected records"> + <param name="include" type="text" optional="true" label="Include (normalize only matching records)" help="Expression evaluated before normalization to select records to normalize"> + <expand macro="macro_include_exclude_validate_sanitize"/> + </param> + <param name="exclude" type="text" optional="true" label="Exclude (skip normalization for matching records)" help="Expression evaluated before normalization to skip records"> + <expand macro="macro_include_exclude_validate_sanitize"/> + </param> </section> - <expand macro="macro_select_output_type" /> + <expand macro="macro_select_output_type"/> </inputs> <outputs> <expand macro="macro_vcf_output"/> </outputs> <tests> <test> - <param name="input_file" ftype="vcf" value="norm.vcf" /> - <expand macro="test_using_reference" ref="norm.fa" /> - <param name="normalize_indels" value="true" /> - <param name="output_type" value="v" /> + <param name="input_file" ftype="vcf" value="norm.vcf"/> + <expand macro="test_using_reference" ref="norm.fa"/> + <param name="normalize_indels" value="true"/> + <param name="output_type" value="v"/> <output name="output_file"> <assert_contents> - <has_text text="T,TAACCCTA" /> - <not_has_text text="TAA,TAACCCTAAA" /> + <has_text text="T,TAACCCTA"/> + <not_has_text text="TAA,TAACCCTAAA"/> </assert_contents> </output> </test> - <test> - <param name="input_file" ftype="vcf" dbkey="?" value="norm.vcf" /> - <expand macro="test_using_reference" select_from="cached" ref="norm" /> - <param name="normalize_indels" value="true" /> - <param name="output_type" value="v" /> + <param name="input_file" ftype="vcf" dbkey="?" value="norm.vcf"/> + <expand macro="test_using_reference" select_from="cached" ref="norm"/> + <param name="normalize_indels" value="true"/> + <param name="output_type" value="v"/> <output name="output_file"> <assert_contents> - <has_text text="T,TAACCCTA" /> - <not_has_text text="TAA,TAACCCTAAA" /> + <has_text text="T,TAACCCTA"/> + <not_has_text text="TAA,TAACCCTAAA"/> </assert_contents> </output> </test> - <test> - <param name="input_file" ftype="vcf" value="norm.split.vcf" /> - <expand macro="test_using_reference" ref="norm.fa" /> + <param name="input_file" ftype="vcf" value="norm.split.vcf"/> + <expand macro="test_using_reference" ref="norm.fa"/> <conditional name="multiallelics"> - <param name="mode" value="-" /> + <param name="mode" value="-"/> </conditional> - <param name="output_type" value="v" /> + <param name="output_type" value="v"/> <output name="output_file"> <assert_contents> - <not_has_text text="TAA,TAACCCTAAA" /> + <not_has_text text="TAA,TAACCCTAAA"/> <has_text_matching expression="1\t105\t.\tTAAACCCTAAA\tTAA\t"/> <has_text_matching expression="1\t105\t.\tTAAACCCTAAA\tTAACCCTAAA\t"/> </assert_contents> </output> </test> - <test> - <param name="input_file" ftype="vcf" value="norm.split.vcf" /> - <expand macro="test_using_reference" ref="norm.fa" /> - <param name="normalize_indels" value="true" /> + <param name="input_file" ftype="vcf" value="norm.split.vcf"/> + <expand macro="test_using_reference" ref="norm.fa"/> + <param name="normalize_indels" value="true"/> <conditional name="multiallelics"> - <param name="mode" value="-" /> + <param name="mode" value="-"/> </conditional> - <param name="output_type" value="v" /> + <param name="output_type" value="v"/> <output name="output_file"> <assert_contents> - <not_has_text text="TAA,TAACCCTAAA" /> + <not_has_text text="TAA,TAACCCTAAA"/> <has_text_matching expression="1\t105\t.\tTAAACCCTA\tT\t"/> <has_text_matching expression="1\t105\t.\tTA\tT\t"/> </assert_contents> </output> </test> - <test> - <param name="input_file" ftype="vcf" value="norm.merge.vcf" /> - <expand macro="test_using_reference" ref="norm.fa" /> + <param name="input_file" ftype="vcf" value="norm.merge.vcf"/> + <expand macro="test_using_reference" ref="norm.fa"/> <conditional name="multiallelics"> - <param name="mode" value="+" /> + <param name="mode" value="+"/> </conditional> - <param name="output_type" value="v" /> + <param name="output_type" value="v"/> <output name="output_file"> <assert_contents> - <has_text text="TAA,TAACCCTAAA" /> + <has_text text="TAA,TAACCCTAAA"/> <has_text_matching expression="2\t114\t.\tTC\tTTCC,TTC\t999\tFAIL"/> </assert_contents> </output> </test> <test> - <param name="input_file" ftype="vcf" value="norm.merge.vcf" /> - <expand macro="test_using_reference" ref="norm.fa" /> + <param name="input_file" ftype="vcf" value="norm.merge.vcf"/> + <expand macro="test_using_reference" ref="norm.fa"/> <conditional name="multiallelics"> - <param name="mode" value="+" /> - <param name="strict_filter" value="true" /> + <param name="mode" value="+"/> + <param name="strict_filter" value="true"/> </conditional> - <param name="output_type" value="v" /> + <param name="output_type" value="v"/> <output name="output_file"> <assert_contents> - <has_text text="TAA,TAACCCTAAA" /> + <has_text text="TAA,TAACCCTAAA"/> <has_text_matching expression="2\t114\t.\tTC\tTTCC,TTC\t999\tPASS"/> </assert_contents> </output> </test> - <test> - <param name="input_file" ftype="vcf" value="norm.setref.vcf" /> - <expand macro="test_using_reference" ref="norm.fa" /> - <param name="check_ref" value="ws" /> - <param name="output_type" value="v" /> + <param name="input_file" ftype="vcf" value="norm.setref.vcf"/> + <expand macro="test_using_reference" ref="norm.fa"/> + <param name="check_ref" value="ws"/> + <param name="output_type" value="v"/> <output name="output_file"> <assert_contents> <has_text_matching expression="2\t101\t.\tA\tc\t999\tPASS"/> @@ -249,45 +236,71 @@ </assert_contents> </output> </test> - <!-- Test atomize option --> <test> - <param name="input_file" ftype="vcf" value="norm.split.vcf" /> - <expand macro="test_using_reference" ref="norm.fa" /> - <param name="normalize_indels" value="true" /> + <param name="input_file" ftype="vcf" value="norm.split.vcf"/> + <expand macro="test_using_reference" ref="norm.fa"/> + <param name="normalize_indels" value="true"/> <conditional name="multiallelics"> - <param name="mode" value="-" /> + <param name="mode" value="-snps"/> </conditional> - <param name="atomize" value="true"/> - <param name="output_type" value="v" /> + <param name="atomization" value="--atomize --atom-overlaps ."/> + <param name="output_type" value="v"/> <output name="output_file"> <assert_contents> - <not_has_text text="TAA,TAACCCTAAA" /> + <not_has_text text="TAA,TAACCCTAAA"/> <has_text_matching expression="1\t105\t.\tTAAACCCTA\tT\t"/> <has_text_matching expression="1\t105\t.\tTA\tT\t"/> </assert_contents> </output> <assert_command> - <has_text text="--atomize" /> + <has_text text="--atomize --atom-overlaps ."/> </assert_command> </test> <!-- Test region overlap options --> <test> - <param name="input_file" ftype="vcf" dbkey="?" value="norm.vcf" /> - <expand macro="test_using_reference" select_from="cached" ref="norm" /> - <param name="normalize_indels" value="true" /> - <param name="output_type" value="v" /> + <param name="input_file" ftype="vcf" dbkey="?" value="norm.vcf"/> + <expand macro="test_using_reference" select_from="cached" ref="norm"/> + <param name="normalize_indels" value="true"/> + <param name="output_type" value="v"/> <section name="sec_restrict"> - <param name="regions_overlap" value="1"/> + <conditional name="regions"> + <param name="regions_src" value="regions" /> + <repeat name="region_specs"> + <param name="chrom" value="1" /> + </repeat> + </conditional> </section> <output name="output_file"> <assert_contents> - <has_text text="T,TAACCCTA" /> - <not_has_text text="TAA,TAACCCTAAA" /> + <has_text text="T,TAACCCTA"/> + <not_has_text text="TAA,TAACCCTAAA"/> </assert_contents> </output> <assert_command> - <has_text text="--regions-overlap" /> + <has_text text="--regions-overlap"/> + </assert_command> + </test> + <!-- Test normalization filters and sort --> + <test> + <param name="input_file" ftype="vcf" value="norm.vcf"/> + <expand macro="test_using_reference" ref="norm.fa"/> + <param name="normalize_indels" value="true"/> + <section name="sec_default"> + <param name="sort" value="lex"/> + </section> + <section name="sec_filter_norm"> + <param name="include" value="QUAL>10"/> + </section> + <param name="output_type" value="v"/> + <output name="output_file"> + <assert_contents> + <has_text text="T,TAACCCTA"/> + </assert_contents> + </output> + <assert_command> + <has_text text="--sort lex"/> + <has_text text="--include 'QUAL>10'"/> </assert_command> </test> </tests> @@ -304,8 +317,8 @@ @BCFTOOLS_MANPAGE@#@EXECUTABLE@ -@BCFTOOLS_WIKI@ +@BCFTOOLS_HOWTOS@ ]]> </help> - <expand macro="citations" /> + <expand macro="citations"/> </tool>
--- a/macros.xml Sun Aug 18 09:59:16 2024 +0000 +++ b/macros.xml Tue Dec 02 08:20:05 2025 +0000 @@ -1,7 +1,7 @@ <macros> - <token name="@TOOL_VERSION@">1.15.1</token> - <token name="@VERSION_SUFFIX@">4</token> - <token name="@PROFILE@">20.01</token> + <token name="@TOOL_VERSION@">1.22</token> + <token name="@VERSION_SUFFIX@">0</token> + <token name="@PROFILE@">24.1</token> <xml name="bio_tools"> <xrefs> <xref type="bio.tools">bcftools</xref> @@ -10,15 +10,15 @@ <xml name="requirements"> <requirements> <requirement type="package" version="@TOOL_VERSION@">bcftools</requirement> - <requirement type="package" version="1.15.1">htslib</requirement> + <requirement type="package" version="1.22.1">htslib</requirement> <yield /> </requirements> </xml> <xml name="samtools_requirement"> - <requirement type="package" version="1.15.1">samtools</requirement> + <requirement type="package" version="1.22.1">samtools</requirement> </xml> <xml name="matplotlib_requirement"> - <requirement type="package" version="3.5.3">matplotlib</requirement> + <requirement type="package" version="3.10.7">matplotlib</requirement> </xml> <xml name="version_command"> <version_command>bcftools 2>&1 | grep 'Version:'</version_command> @@ -30,16 +30,11 @@ <yield /> </citations> </xml> - <token name="@BCFTOOLS_WIKI@">https://github.com/samtools/bcftools/wiki</token> - <token name="@BCFTOOLS_MANPAGE@">http://samtools.github.io/bcftools/bcftools.html</token> + <token name="@BCFTOOLS_HOWTOS@">https://samtools.github.io/bcftools/howtos/index.html</token> + <token name="@BCFTOOLS_MANPAGE@">https://www.htslib.org/doc/bcftools.html</token> <token name="@THREADS@"> --threads \${GALAXY_SLOTS:-4} </token> - <token name="@PREPARE_ENV@"> -<![CDATA[ -export BCFTOOLS_PLUGINS=`which bcftools | sed 's,bin/bcftools,libexec/bcftools,'`; -]]> - </token> <xml name="macro_input"> <!-- REQUIRES https://github.com/galaxyproject/galaxy/pull/14605/files @@ -294,8 +289,8 @@ help="inverts the query/filtering applied by the targets" /> </xml> - <xml name="macro_restriction_spec" token_type="region" token_label_type="Region"> - <repeat name="@TYPE@s" title="@LABEL_TYPE@ Filter" default="1" min="1"> + <xml name="macro_restriction_spec" tokens="type,label_type"> + <repeat name="@TYPE@_specs" title="@LABEL_TYPE@ Filter" default="1" min="1"> <param name="chrom" type="text" label="@LABEL_TYPE@ chromosome"> <validator type="expression" message="A chromosome identifier is required when specifying a @LABEL_TYPE@ filter">value.strip()</validator> </param> @@ -305,36 +300,85 @@ <param name="stop" type="text" label="@LABEL_TYPE@ end position"> <validator type="expression" message="an integer number is required">not value or value.isdigit()</validator> </param> - <yield /> </repeat> </xml> - <xml name="macro_restrictions_file" token_type="region" token_label_type="Region"> + <xml name="macro_restrictions_file" tokens="type,label_type"> <param name="@TYPE@s_file" type="data" format="tabular" label="@LABEL_TYPE@s File" help="restrict to @LABEL_TYPE@s listed in a file" /> </xml> - <xml name="macro_restrict" token_type="region" token_label_type="Region" > + <xml name="__macro_restrict__" tokens="type,label_select,label_type,pos_is_default,rec_is_default"> <conditional name="@TYPE@s"> - <param name="@TYPE@s_src" type="select" label="@LABEL_TYPE@s"> - <option value="__none__">Do not restrict to @LABEL_TYPE@s</option> - <option value="@TYPE@s">Specify one or more @LABEL_TYPE@(s) directly</option> - <option value="@TYPE@s_file">Operate on @LABEL_TYPE@s specified in a history dataset</option> + <param name="@TYPE@s_src" type="select" label="@LABEL_SELECT@"> + <option value="__none__">Do not restrict to @LABEL_TYPE@s</option> + <option value="@TYPE@s">Specify one or more @LABEL_TYPE@(s) directly</option> + <option value="@TYPE@s_file">Operate on @LABEL_TYPE@s specified in a history dataset</option> + </param> + <when value="__none__"/> + <when value="@TYPE@s"> + <expand macro="macro_restriction_spec" type="@TYPE@" label_type="@LABEL_TYPE@" /> + <yield /> + <param argument="--@TYPE@s-overlap" type="select" label="Consider variant calls with partial overlap with @LABEL_TYPE@(s) if ..." help="Set to 0 if the record has to have POS inside a region; set to 1 if also overlapping records with POS outside a region should be included (this includes indels with POS at the end of a region, which are technically outside the region); or set to 2 to include only true overlapping variation (compare the full VCF representation 'TA>T-' vs the true sequence variation 'A>-')."> + <option value="0" selected="@POS_IS_DEFAULT@">0: the variant's POS falls in the region</option> + <option value="1" selected="@REC_IS_DEFAULT@">1: any part of the variant's representation overlaps the region</option> + <option value="2">2: the variant's actual sequence change falls in the region</option> + </param> + </when> + <when value="@TYPE@s_file"> + <expand macro="macro_restrictions_file" type="@TYPE@" label_type="@LABEL_TYPE@" /> + <yield /> + <param argument="--@TYPE@s-overlap" type="select" label="@LABEL_TYPE@ overlap" help="Include if POS in the region (0), record overlaps (1), variant overlaps (2)"> + <option value="0" selected="@POS_IS_DEFAULT@">0: POS in the region</option> + <option value="1" selected="@REC_IS_DEFAULT@">1: Record overlaps</option> + <option value="2">2: Variant overlaps</option> </param> - <when value="__none__"/> - <when value="@TYPE@s"> - <expand macro="macro_restriction_spec" type="@TYPE@" label_type="@LABEL_TYPE@" /> - <yield /> - </when> - <when value="@TYPE@s_file"> - <expand macro="macro_restrictions_file" type="@TYPE@" label_type="@LABEL_TYPE@" /> - <yield /> - </when> + </when> + </conditional> + </xml> + + <xml name="__macro_restrict_simple__" tokens="type,label_select,label_type"> + <conditional name="@TYPE@s"> + <param name="@TYPE@s_src" type="select" label="@LABEL_SELECT@"> + <option value="__none__">Do not restrict to @LABEL_TYPE@s</option> + <option value="@TYPE@s">Specify one or more @LABEL_TYPE@(s) directly</option> + <option value="@TYPE@s_file">Operate on @LABEL_TYPE@s specified in a history dataset</option> + </param> + <when value="__none__"/> + <when value="@TYPE@s"> + <expand macro="macro_restriction_spec" type="@TYPE@" label_type="@LABEL_TYPE@" /> + <yield /> + </when> + <when value="@TYPE@s_file"> + <expand macro="macro_restrictions_file" type="@TYPE@" label_type="@LABEL_TYPE@" /> + <yield /> + </when> </conditional> - <param argument="--@TYPE@s-overlap" type="select" optional="true" label="@LABEL_TYPE@ overlap" help="Include if POS in the region (0), record overlaps (1), variant overlaps (2)"> - <option value="0">0: POS in the region</option> - <option value="1">1: Record overlaps</option> - <option value="2">2: Variant overlaps</option> - </param> + </xml> + + <xml name="macro_region_restrict" token_label_select="Regions"> + <expand macro="__macro_restrict__" type="region" label_select="@LABEL_SELECT@" label_type="Region" pos_is_default="false" rec_is_default="true" /> + </xml> + + <xml name="macro_region_restrict_simple" token_label_select="Regions"> + <!-- To be used with subcommands that don't support the 'regions-overlap' option. Currently only mpileup? --> + <expand macro="__macro_restrict_simple__" type="region" label_select="@LABEL_SELECT@" label_type="Region" /> + </xml> + + <xml name="macro_target_restrict"> + <expand macro="__macro_restrict__" type="target" label_select="Target" label_type="Target" pos_is_default="true" rec_is_default="false"> + <expand macro="macro_invert_targets" /> + </expand> + </xml> + + <xml name="macro_target_restrict_simple"> + <!-- To be used with subcommands that don't support the 'regions-overlap' option. Currently only mpileup and call? --> + <expand macro="__macro_restrict_simple__" type="target" label_select="Target" label_type="Target"> + <expand macro="macro_invert_targets" /> + </expand> + </xml> + + <xml name="macro_mask_restrict"> + <expand macro="__macro_restrict__" type="mask" label_select="Mask" label_type="Mask" pos_is_default="false" rec_is_default="true" /> </xml> <token name="@PARSE_INTERVALS@"> @@ -345,7 +389,7 @@ #set $start = str($i.start).strip() #set $stop = str($i.stop).strip() #if $start or $stop: - $components.append($chrom + ':' + ($start or '0') + '-' + $stop) + $components.append($chrom + ':' + ($start or '1') + '-' + $stop) #else: $components.append($chrom) #end if @@ -357,18 +401,14 @@ <token name="@MASK@"> <![CDATA[ #if $section.conditional_soft_filter.selector == 'enabled' and $section.conditional_soft_filter.soft_filter - #if $section.conditional_soft_filter.masks.masks_src == 'regions': - #set $intervals = $section.conditional_soft_filter.masks.masks - @PARSE_INTERVALS@ - --mask '$intervals_spec' - #elif $section.conditional_soft_filter.masks.masks_src == 'masks_file' and $section.conditional_soft_filter.masks.masks_file: - #if $masks_path is not None: - --mask-file '$masks_path' - #else: + #if $section.conditional_soft_filter.masks.masks_src != '__none__': + #if $section.conditional_soft_filter.masks.masks_src == 'masks': + #set $intervals = $section.conditional_soft_filter.masks.mask_specs + @PARSE_INTERVALS@ + --mask '$intervals_spec' + #elif $section.conditional_soft_filter.masks.masks_src == 'masks_file': --mask-file '$section.conditional_soft_filter.masks.masks_file' #end if - #end if - #if $section.conditional_soft_filter.masks_overlap --mask-overlap $section.conditional_soft_filter.masks_overlap #end if #end if @@ -378,37 +418,42 @@ <token name="@REGIONS@"> <![CDATA[ -#if $section.regions.regions_src == 'regions': - #set $intervals = $section.regions.regions - @PARSE_INTERVALS@ - --regions '$intervals_spec' -#elif $section.regions.regions_src == 'regions_file' and $section.regions.regions_file: - #if $regions_path is not None: - --regions-file '$regions_path' - #else: - --regions-file '$section.regions.regions_file' +#if $section.regions.regions_src != '__none__': + #if $section.regions.regions_src == 'regions': + #set $intervals = $section.regions.region_specs + @PARSE_INTERVALS@ + --regions '$intervals_spec' + #elif $section.regions.regions_src == 'regions_file': + #if $regions_path is not None: + --regions-file '$regions_path' + #else: + --regions-file '$section.regions.regions_file' + #end if + #end if + #if 'regions_overlap' in $section.regions: + --regions-overlap $section.regions.regions_overlap #end if #end if -#if $section.regions_overlap - --regions-overlap $section.regions_overlap -#end if - ]]> </token> <token name="@TARGETS@"> <![CDATA[ -#if $targets_path: - --targets-file "${section.targets.invert_targets_file}${targets_path}" -#elif $section.targets.targets_src == 'targets': - #set $intervals = $section.targets.targets - @PARSE_INTERVALS@ - --targets '${section.targets.invert_targets_file}$intervals_spec' -#elif $section.targets.targets_src == 'targets_file' and $section.targets.targets_file: - --targets-file "${section.targets.invert_targets_file}${section.targets.targets_file}" -#end if -#if $section.targets_overlap - --targets-overlap $section.targets_overlap +#if $section.targets.targets_src != '__none__': + #if $section.targets.targets_src == 'targets': + #set $intervals = $section.targets.target_specs + @PARSE_INTERVALS@ + --targets '${section.targets.invert_targets_file}$intervals_spec' + #elif $section.targets.targets_src == 'targets_file': + #if $targets_path: + --targets-file '${section.targets.invert_targets_file}${targets_path}' + #else: + --targets-file '${section.targets.invert_targets_file}${section.targets.targets_file}' + #end if + #end if + #if 'targets_overlap' in $section.targets: + --targets-overlap $section.targets.targets_overlap + #end if #end if ]]> </token> @@ -417,7 +462,7 @@ <![CDATA[ #set $regions_path = None #if 'regions' in $section - #if $section.regions.regions_src == 'regions_file' and $section.regions.regions_file: + #if $section.regions.regions_src == 'regions_file': #if $section.regions.regions_file.ext.startswith('bed'): #set $regions_path = 'regions_file.bed' ln -s '$section.regions.regions_file' $regions_path && @@ -461,11 +506,31 @@ </param> <param name="invert_samples" type="boolean" truevalue="^" falsevalue="" checked="false" label="Invert Samples" help="Inverts the query/filtering applied by Samples (adds "^" prefix to exclude)" /> - <param argument="--samples_file" type="data" format="tabular" optional="true" label="Samples file" - help="File of samples to include" /> + <param argument="--samples_file" type="data" format="tabular" optional="true" label="Samples file" help="File of samples to include" /> <param name="invert_samples_file" type="boolean" truevalue="^" falsevalue="" checked="false" label="Invert Samples file" help="inverts the query/filtering applied by Samples file" /> </xml> + + <xml name="macro_samples_enhanced" token_all_samples="" token_file_help="File listing samples to include one per line."> + <conditional name="specify_samples"> + <param name="how" type="select" label="How do you want to select samples?"> + <option value="-s">Specify samples manually</option> + <option value="-S">Provide sample file</option> + <option value="@ALL_SAMPLES@" selected="true">No selection; just use all samples found in input</option> + </param> + <when value="-s"> + <param argument="--samples" name="samples_spec" type="text" optional="false" label="Sample(s)" help="Specify a single sample by name or a comma-separated list of sample names."> + <validator type="expression" message="Please specify a single sample by name or a comma-separated list of sample names">value.strip() and value[0] not in "^," and ",," not in value</validator> + </param> + <param name="invert_samples" type="boolean" truevalue="^" falsevalue="" label="Exclude these samples instead of including them?" help="Equivalent to prefixing the list of samples with "^" on the command line."/> + </when> + <when value="-S"> + <param argument="--samples_file" type="data" format="tabular" optional="@IS_OPTIONAL@" label="Samples file" help="@FILE_HELP@" /> + <param name="invert_samples" type="boolean" truevalue="^" falsevalue="" label="Exclude the samples listed in the file instead of including them?" help="Equivalent to prefixing the file with "^" on the command line."/> + </when> + <when value="@ALL_SAMPLES@" /> + </conditional> + </xml> <token name="@SAMPLES@"> #set $samples_defined = False #if str($section.samples) != '': @@ -478,8 +543,8 @@ #end if </token> - <xml name="macro_sample"> - <param name="sample" type="text" optional="true" label="Sample" help="Apply variants of the given sample" /> + <xml name="macro_sample" token_help="Apply variants of the given sample"> + <param name="sample" type="text" optional="true" label="Sample" help="@HELP@" /> </xml> <token name="@SAMPLE@"> #if $section.sample:
