diff samtools_consensus.xml @ 0:a4b9be0c418e draft

planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/main/tool_collections/samtools/samtools_consensus commit 5e64e9acef12a625f45808627e97576165baceba
author iuc
date Wed, 12 Nov 2025 12:42:52 +0000
parents
children 74e06ecd1f83
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/samtools_consensus.xml	Wed Nov 12 12:42:52 2025 +0000
@@ -0,0 +1,613 @@
+<tool id="samtools_consensus" name="Samtools consensus" version="@TOOL_VERSION@+galaxy@VERSION_SUFFIX@" profile="@PROFILE@">
+    <description>generate consensus from a SAM, BAM or CRAM file</description>
+    <macros>
+        <import>macros.xml</import>
+        <import>macros_tool_specific.xml</import>
+        <token name="@REF_DATA@">
+            ## additional reference data
+            #if $use_ref:
+                -T "\$reffa"
+            #end if
+        </token>
+    </macros>
+    <expand macro="requirements"/>
+    <expand macro="stdio"/>
+    <expand macro="version_command"/>
+    <command detect_errors="exit_code"><![CDATA[
+        @ADDTHREADS@
+        ## prepare reference data
+        @PREPARE_FASTA_IDX@
+        @PREPARE_IDX@
+
+        samtools consensus infile
+        -f '$format'
+        -@ \$addthreads
+
+        ##### preprocessing options
+        --min-MQ $preprocessing_options.minimum_MQ 
+        --min-BQ $preprocessing_options.minimum_BQ
+
+        ### try macro 
+        #set $std_filters = ''
+        #set $filter = $preprocessing_options.inclusive_filter
+        @FLAGS@
+        #set $std_filters = $std_filters + " --rf %s" % str($flags)
+        #set $filter = $preprocessing_options.exclusive_filter
+        @FLAGS@
+        #set $std_filters = $std_filters + " --ff %s" % str($flags)
+        $std_filters
+
+        ##### consensus Options
+        -m '$consensus_options.mode'
+        ### simple options
+        #if str($consensus_options.mode) == "simple":
+            $consensus_options.settings.use_qual
+            -c $consensus_options.settings.c
+            -H $consensus_options.settings.H
+        ### bayesian options
+        #else
+            ### use predefined options
+            #if str($consensus_options.settings.config_cond.config_param) != "manual":
+                --config $consensus_options.settings.config_param
+            ### manually set parameters
+            #else
+                -C $consensus_options.settings.C
+                #if str($consensus_options.settings.config_cond.mq_cond.mq_param) == "--use-MQ":
+                    $consensus_options.settings.config_cond.mq_cond.mq_param
+                    $consensus_options.settings.config_cond.mq_cond.adj_mq
+                    --NM-halo $consensus_options.settings.config_cond.mq_cond.mismatch_window
+                    --low-MQ $consensus_options.settings.config_cond.mq_cond.low_mq
+                    --high-MQ $consensus_options.settings.config_cond.mq_cond.high_mq
+                    --scale-MQ $consensus_options.settings.config_cond.mq_cond.scale_mq
+                #end if
+                --P-het $consensus_options.settings.config_cond.p_het
+                --P-indel $consensus_options.settings.config_cond.p_indel
+                --het-scale $consensus_options.settings.config_cond.hetero_scale
+                $consensus_options.settings.config_cond.hom_fix
+                #if $consensus_options.settings.config_cond.hom_score:
+                    --homopoly-score $consensus_options.settings.config_cond.hom_score
+                #end if
+                #if str($consensus_options.settings.config_cond.calibration_cond.calibration_param) != "file":
+                    --qual-calibration '$consensus_options.settings.config_cond.calibration_param'
+                #else
+                    #if $consensus_options.settings.config_cond.calibration_cond.calibration_file:
+                        --qual-calibration '$consensus_options.settings.config_cond.calibration_cond.calibration_file'
+                    #end if
+                #end if
+            #end if
+        #end if
+
+        ### global options
+        --min-depth $global_settings.minimum_depth
+        #set reg = '%s:%s-%s' % (str($$global_settings.reg), str($$global_settings.start), str($$global_settings.end))
+        -r "${reg}"
+
+
+        @REF_DATA@
+
+        ##### Output Options
+        -l $output_options.line_len
+        $output_options.all
+        --show-del $output_options.show_deletions        
+        --show-ins $output_options.show_insertions
+        $output_options.ambig
+        $output_options.mark_insertions
+        > $output_file
+    ]]></command>
+    <!-- Parameters -->
+    <inputs>
+        <!-- Basic options -->
+        <param name="input" type="data" format="sam,bam,cram" label="BAM file"/>
+        <param argument="--format" type="select" label="Output file type" help="Produce format FMT, with 'fastq', 'fasta' and 'pileup' as permitted options.">
+            <option value="fasta" selected="true">FASTA</option>
+            <option value="fastq">FASTQ</option>
+            <option value="pileup">Pileup</option>
+        </param>
+        <!-- Preprocessing options (reads) -->
+        <section name="preprocessing_options" title="Preprocessing Options" expanded="no">
+            <param name="minimum_MQ" argument="--min-MQ" type="integer" value="0" min="0" label="Minimum mapping quality" help="Filters out reads with a mapping quality below specified value"/>
+            <param name="minimum_BQ" argument="--min-BQ" type="integer" value="0" min="0" label="Minimum base quality" help="Filters out bases with a base quality below specified value"/>
+            <!-- Use macro for inclusive and axclusive flags -->
+            <expand macro="inclusive_filter_macro" token_argument="--rf"/>
+            <expand macro="exclusive_filter_macro" token_argument="--ff"/>
+        </section>
+        <!-- Consensus options Condetional -->
+        <conditional name="consensus_options">
+            <param argument="--mode" type="select" label="Select the consensus algorithm" help="Choose the consensus algorithm. 'Simple' uses base counts to call consensus, 'Bayesian' applies a probabilistic model (Gap5) for higher accuracy, and 'Bayesian 1.16' reproduces the behavior of samtools consensus v1.16 for compatibility.">
+                <option value="simple">Simple</option>
+                <option value="bayesian" selected="true">Bayesian (Gap5)</option>
+                <option value="bayesian_116">Bayesian 1.16</option>
+            </param>
+            <!-- simple mode options -->
+            <when value="simple">
+                <section name="settings" title="Settings" expanded="no">
+                    <param name="use_qual" argument="-q" type="boolean" truevalue="-q" falsevalue="" checked="false" label="Weight by base quality" help="Base counts are weighted by their Phred quality scores instead of counting each base equally. Improves consensus accuracy by giving higher weight to more confident base calls."/>
+                    <param argument="-c" type="float" value="0.75" min="0" max="1" label="Minimum consensus fraction" help="Require at least C fraction of bases agreeing with the most likely consensus call to emit that base type. Failing this check will output 'N'"/>
+                    <param argument="-H" type="float" value="0.15" min="0" max="1" label="Heterozygous fraction threshold" help="Report a heterozygous base in the consensus if the second most frequent base occurs at least H fraction of the most common base. (Requires --ambig)"/>
+                </section>
+            </when>
+            <!-- bayesian mode options -->
+            <when value="bayesian">
+                <expand macro="bayesian_settings_macro"/>
+            </when>
+            <!-- bayesian 1.16 mode options -->
+            <when value="bayesian_116">
+                <expand macro="bayesian_settings_macro"/>
+            </when>
+        </conditional>
+        <!-- Gloabl Settings -->
+        <section name="global_settings" title="Global Settings" expanded="no">
+            <param name="minimum_depth" argument="--min-depth" type="integer" value="1" label="Minimum depth" help="The minimum depth required to make a call. Failing this depth check will produce consensus 'N', or absent if it is an insertion. Note this check is performed after filtering by flags and mapping/base quality"/>
+            <!-- region -->
+            <repeat name="reg_repeat" title="region" min="0" max="1">
+                <param name="reg" type="text" optional="false" format="fasta" label="Region"/>
+                <param name="start" type="integer" format="fasta" optional="true" label="Start"/>
+                <param name="end" type="integer" format="fasta" optional="true" label="End"/>
+            </repeat>
+            <!-- use contional ref macro -->
+             <expand macro="optional_reference" token_argument="--reference" token_help="Select a reference genome to guide consensus generation."/>
+        </section>
+        <!-- Output Options -->
+        <section name="output_options" title="Output Options" expanded="no">
+            <param name="line_len" argument="-l" type="integer" value="70" label="Maximum line lenght" help="The maximum line length of line-wrapped fasta and fastq formats. Set to -1 for no line wrapping."/>
+            <param name="all" argument="-a" type="boolean" truevalue="-a" falsevalue="" checked="false" label="Output all positions" help="Output absolutely all positions, including references with no data aligned against them"/>
+            <param name="show_deletions" argument="--show-del" type="boolean" truevalue="yes" falsevalue="no" checked="false" label="Show deletions" help="Whether to show deletions as '*' (if checked) or to omit from the output (if left unchecked)"/>
+            <param name="show_insertions" argument="--show-ins" label="Show insertions" type="boolean" truevalue="yes" falsevalue="no" checked="true"  help="Whether to show insertions in the consensus"/>
+            <param argument="--ambig" type="boolean" truevalue="--ambig" falsevalue="" checked="false" label="IUPAC ambiguity codes" help="Enables IUPAC ambiguity codes in the consensus output. Without this the output will be limited to A, C, G, T, N and *"/>
+            <param name="mark_insertions" argument="--mark-ins" type="boolean" truevalue="--mark-ins" falsevalue="" checked="false" label="Mark insertions" help="Mark insertions by adding an underscore before every inserted base, plus a corresponding character in the quality for fastq format. When used in conjunction with '-a' and '--show-del', this permits an easy derivation of the consensus to reference coordinate mapping"/>
+        </section>
+    </inputs>
+    <!-- Outputs -->
+    <outputs>
+        <data name="output_file" format="fasta">
+            <change_format>
+                <when input="format" value="fasta" format="fasta" />
+                <when input="format" value="fastq" format="fastq" />
+                <when input="format" value="pileup" format="pileup" />
+            </change_format>
+        </data>
+    </outputs>
+    <!-- Tests -->
+    <tests>
+        <!-- 1) test format-->
+        <test expect_num_outputs="1">
+            <param name="input" value="example.bam" ftype="bam" />
+            <param name="format" value="fasta"/>
+            <section name="output_options">
+                <param name="line_len" value="70"/>
+            </section>
+            <output name="output_file" ftype="fasta">
+                <assert_contents>
+                    <has_line_matching expression=">LR743429.1"/>
+                    <has_n_lines n="156"/>
+                </assert_contents>
+            </output>
+        </test>
+        <!-- test pre-processing Options -->
+        <!-- 2) test min BQ and min MQ -->
+        <test expect_num_outputs="1">
+            <param name="input" value="toy.sam" ftype="sam" />
+            <section name="preprocessing_options">
+                <param name="minimum_BQ" value="1"/>
+                <param name="minimum_MQ" value="21"/>
+            </section>
+            <output name="output_file" ftype="fasta">
+                <assert_contents>
+                    <has_line_matching expression="GGTTTTATAAAANAATTAAGTCTACAGAGCAACTA"/>
+                    <has_n_lines n="4"/>
+                </assert_contents>
+            </output>
+        </test>
+        <!-- 3) test include flags -rf -->
+        <test expect_num_outputs="1">
+            <param name="input" value="ex1.bam" ftype="bam" />
+            <section name="preprocessing_options">
+                <param name="inclusive_filter" value="2"/>
+            </section>
+            <output name="output_file" ftype="fasta">
+                <assert_contents>
+                    <has_size size="3k" delta="1k"/>
+                    <has_n_lines n="46"/>
+                </assert_contents>
+            </output>
+        </test>
+        <!-- test simple mode options -->
+        <!-- 4) test use qual-->
+        <test expect_num_outputs="1">
+            <param name="input" value="ex1.bam" ftype="bam"/>
+            <conditional name="consensus_options">
+                <param name="mode" value="simple"/>
+                <section name="settings">
+                    <param name="use_qual" value="true"/>
+                </section>
+            </conditional>
+            <output name="output_file" ftype="fasta">
+                <assert_contents>
+                    <has_line_matching expression="CAAAAATAAAGAAAAAANTTTTAAAAATGAACAGAGCTTTCAAGAAGTATGAGATTATGTAAAGTAACTG"/>
+                </assert_contents>
+            </output>
+        </test>
+        <!-- 5) test minimum call fraction -->
+        <test expect_num_outputs="1">
+            <param name="input" value="toy.sam" ftype="sam"/>
+            <conditional name="consensus_options">
+                <param name="mode" value="simple"/>
+                <section name="settings">
+                    <param name="c" value="0.9"/>
+                </section>
+            </conditional>
+            <output name="output_file" ftype="fasta">
+                <assert_contents>
+                    <has_line_matching expression="AGGTTTTATNAAANAANTAANTCTACAGAGCAACTA"/>
+                    <has_n_lines n="4"/>
+                </assert_contents>
+            </output>
+        </test>
+        <!-- 6) test minimum hetro fraction -->
+        <test expect_num_outputs="1">
+            <param name="input" value="test.sam" ftype="sam"/>
+            <conditional name="consensus_options">
+                <param name="mode" value="simple"/>
+                <section name="settings">
+                    <param name="c" value="0.5"/>
+                    <param name="H" value="0.1"/>
+                </section>
+            </conditional>
+            <section name="output_options">
+                <param name="ambig" value="true"/>
+            </section>   
+            <output name="output_file" ftype="fasta">
+                <assert_contents>
+                    <has_line_matching expression="MACGTACGTA"/>
+                    <has_n_lines n="2"/>
+                </assert_contents>
+            </output>
+        </test>
+        <!-- 7) test cutoff -->
+        <test expect_num_outputs="1">
+            <param name="input" value="toy.sam" ftype="sam"/>
+                <conditional name="consensus_options">
+                    <param name="mode" value="bayesian"/>
+                    <section name="settings">
+                        <conditional name="config_cond">
+                            <param name="config_param" value="manual"/>
+                            <param name="C" value="5"/>
+                        </conditional>
+                    </section>
+                </conditional>
+            <output name="output_file" ftype="fasta">
+                <assert_contents>
+                    <has_line_matching expression="TTAGATAAAGAGGATAGCTGTAGGCTCAGCGCCAT"/>
+                    <has_n_lines n="4"/>
+                </assert_contents>
+            </output>
+        </test>
+        <!-- 8) test use MQ defaults -->
+        <test expect_num_outputs="1">
+            <param name="input" value="toy.sam" ftype="sam"/>
+            <conditional name="consensus_options">
+                <param name="mode" value="bayesian"/>
+                <section name="settings">
+                    <conditional name="config_cond">
+                        <param name="config_param" value="manual"/>
+                        <conditional name="mq_cond">
+                            <param name="mq_param" value="--use-MQ"/>
+                        </conditional>
+                    </conditional>
+                </section>
+            </conditional>
+            <output name="output_file" ftype="fasta">
+                <assert_contents>
+                    <has_line_matching expression="NNAGATAAAGAGGATAGCNNNNNNNNCAGCNNNNN"/>
+                    <has_n_lines n="4"/>
+                </assert_contents>
+            </output>
+        </test>
+        <!-- 9) test P-indel -->
+        <test expect_num_outputs="1">
+            <param name="input" value="consen1c.sam" ftype="sam"/>
+            <conditional name="consensus_options">
+                <param name="mode" value="bayesian_116"/>
+                <section name="settings">
+                    <conditional name="config_cond">
+                        <param name="config_param" value="manual"/>
+                        <param name="p_indel" value="0.01"/>
+                    </conditional>
+                </section>
+            </conditional>
+            <output name="output_file" ftype="fasta">
+                <assert_contents>
+                    <has_line_matching expression="CCTTTAACGAATTTCC"/>
+                    <has_n_lines n="4"/>
+                </assert_contents>
+            </output>
+        </test>
+        <!-- 10) test P-het -->
+        <test expect_num_outputs="1">
+            <param name="input" value="consen1c.sam" ftype="sam"/>
+            <conditional name="consensus_options">
+                <param name="mode" value="bayesian_116"/>
+                <section name="settings">
+                    <conditional name="config_cond">
+                        <param name="config_param" value="manual"/>
+                        <param name="p_indel" value="0.01"/>
+                        <param name="p_het" value="0.01"/>
+                    </conditional>
+                </section>
+            </conditional>
+            <output name="output_file" ftype="fasta">
+                <assert_contents>
+                    <has_line_matching expression="NNTTTNNNGNNTTTNN"/>
+                    <has_n_lines n="4"/>
+                </assert_contents>
+            </output>
+        </test>
+        <!-- 11) test low-high-MQ -->
+        <test expect_num_outputs="1">
+            <param name="input" value="consen1c.sam" ftype="sam"/>
+            <conditional name="consensus_options">
+                <param name="mode" value="bayesian_116"/>
+                <section name="settings">
+                    <conditional name="config_cond">
+                        <param name="config_param" value="manual"/>
+                        <conditional name="mq_cond">
+                            <param name="mq_param" value="--use-MQ"/>
+                            <param name="low_mq" value="0"/>
+                            <param name="high_mq" value="60"/>
+                        </conditional>
+                        <param name="p_indel" value="0.01"/>
+                    </conditional>
+                </section>
+            </conditional>
+            <output name="output_file" ftype="fasta">
+                <assert_contents>
+                    <has_line_matching expression="AAAAACCAACCAAAAA"/>
+                    <has_n_lines n="4"/>
+                </assert_contents>
+            </output>
+        </test>
+        <!-- 12) test het scale -->
+        <test expect_num_outputs="1">
+            <param name="input" value="consen1c.sam" ftype="sam"/>
+            <conditional name="consensus_options">
+                <param name="mode" value="bayesian"/>
+                <section name="settings">
+                    <conditional name="config_cond">
+                        <param name="config_param" value="manual"/>
+                        <param name="p_indel" value="0.2"/>
+                        <param name="hetero_scale" value="4"/>
+                    </conditional>
+                </section>
+            </conditional>
+            <output name="output_file" ftype="fasta">
+                <assert_contents>
+                    <has_line_matching expression="NNTTTNNNGNNTTTNN"/>
+                    <has_n_lines n="4"/>
+                </assert_contents>
+            </output>
+        </test>
+        <!-- test homopoly fix -->
+        <test expect_num_outputs="1">
+            <param name="input" value="ex1.bam" ftype="bam"/>
+            <conditional name="consensus_options">
+                <param name="mode" value="bayesian"/>
+                <section name="settings">
+                    <conditional name="config_cond">
+                        <param name="config_param" value="manual"/>
+                        <param name="hom_fix" value="true"/>
+                    </conditional>
+                </section>
+            </conditional>
+            <output name="output_file" ftype="fasta">
+                <assert_contents>
+                    <has_line_matching expression="CAGCCTGGCTGTGGGGGNCGCAGTGGCTGAGGGGTGNAGAGCCGAGTCACGGGGTTGCCAGCACAGGGGC"/>
+                </assert_contents>
+            </output>
+        </test>
+        <!-- 13) test homopoly score -->
+        <test expect_num_outputs="1">
+            <param name="input" value="ex1.bam" ftype="bam"/>
+            <conditional name="consensus_options">
+                <param name="mode" value="bayesian"/>
+                <section name="settings">
+                    <conditional name="config_cond">
+                        <param name="config_param" value="manual"/>
+                        <param name="hom_score" value="0.3"/>
+                    </conditional>
+                </section>
+            </conditional>
+            <output name="output_file" ftype="fasta">
+                <assert_contents>
+                    <has_line_matching expression="CAGCCTGGCTGTGGGGGNCGCAGTGGCTGAGGGGTGNAGAGCCGAGTCACGGGGTTGCCAGCACAGGGGC"/>
+                </assert_contents>
+            </output>
+        </test>
+        <!-- 14) test pre defined settings -->
+        <test expect_num_outputs="1">
+            <param name="input" value="consen1c.sam" ftype="sam"/>
+            <conditional name="consensus_options">
+                <param name="mode" value="bayesian"/>
+                <section name="settings">
+                    <conditional name="config_cond">
+                        <param name="config_param" value="ultima"/>
+                    </conditional>
+                </section>
+            </conditional>
+            <output name="output_file" ftype="fasta">
+                <assert_contents>
+                    <has_line_matching expression="NNNNNNNNNNNNNNNNNNNNNNNNNN"/>
+                    <has_n_lines n="4"/>
+                </assert_contents>
+            </output>
+        </test>
+        <!-- test quality calibration -->
+        <test expect_num_outputs="1">
+            <param name="input" value="ex1.bam" ftype="bam"/>
+            <conditional name="consensus_options">
+                <param name="mode" value="bayesian"/>
+                <section name="settings">
+                    <conditional name="config_cond">
+                        <param name="config_param" value="manual"/>
+                            <conditional name="calibration_cond">
+                                <param name="calibration_param" value=":hifi"/>
+                            </conditional>
+                    </conditional>
+                </section>
+            </conditional>
+            <output name="output_file" ftype="fasta">
+                <assert_contents>
+                    <has_line_matching expression="TTTGNTNNANCCCCTTGCAACAACCTTGAGAACCCCAGGGAATTTGTCAATGTCAGGGAAGGAGCATTTT"/>
+                </assert_contents>
+            </output>
+        </test>
+        <!-- Global Settings 
+        test min depth -->
+        <test expect_num_outputs="1">
+            <param name="input" value="toy.sam" ftype="sam"/>
+            <section name="global_settings">
+                <param name="minimum_depth" value="2"/>
+            </section>
+            <output name="output_file" ftype="fasta">
+                <assert_contents>
+                    <has_line_matching expression="NGGTTTTATAAAANAANTAAGTCTACAGAGCAACTN"/>
+                    <has_n_lines n="4"/>
+                </assert_contents>
+            </output>
+        </test>
+        <!-- test region -->
+        <test expect_num_outputs="1">
+            <param name="input" value="example.bam" ftype="bam"/>
+            <section name="global_settings">
+                <repeat name="reg_repeat">
+                    <param name="reg" value="LR743429.1"/>
+                    <param name="start" value="1700"/>
+                    <param name="end" value="1900"/>
+                </repeat>
+            </section>
+            <output name="output_file" ftype="fasta">
+                <assert_contents>
+                    <has_line_matching expression="CCACCAAACAATCTGTTGTGGCTCTAGGGTCGCAGGAAGGTGCATTGCACCAAGCTCTGGCCGGAGCGAT"/>
+                    <has_size size="216" delta="10"/>
+                </assert_contents>
+            </output>
+        </test>
+        <!-- test reference file -->
+        <test expect_num_outputs="1">
+            <param name="input" value="consen1c.sam" ftype="sam"/>
+            <section name="global_settings">
+                <conditional name="addref_cond">
+                    <param name="addref_select" value="history" />
+                    <param name="ref" value="consen1c.fa" />
+                </conditional>
+            </section>
+            <output name="output_file" ftype="fasta">
+                <assert_contents>
+                    <has_line_matching expression="NNNNNNNNNNTTAGGGNNNNNNNNNN"/>
+                    <has_n_lines n="4"/>
+                </assert_contents>
+            </output>
+        </test>
+        <!-- Output Options 
+        test show deletions -->
+        <test expect_num_outputs="1">
+            <param name="input" value="toy.sam" ftype="sam" />
+            <section name="output_options">
+                <param name="show_deletions" value="true"/>
+            </section>            
+            <output name="output_file" ftype="fasta">
+                <assert_contents>
+                    <has_text text="NNAGATAAAGAGGATAGCNN******NNNNN**NCAGCNNNNN"/>
+                    <has_n_lines n="4"/>
+                </assert_contents>
+            </output>
+        </test>
+        <!-- test show insertions-->
+        <test expect_num_outputs="1">
+            <param name="input" value="toy.sam" ftype="sam" />
+            <section name="output_options">
+                <param name="show_insertions" value="false"/>
+            </section>            
+            <output name="output_file" ftype="fasta">
+                <assert_contents>
+                    <has_line_matching expression="NNAGATAAGATAGCNNNNNNNNCAGCNNNNN"/>
+                    <has_n_lines n="4"/>
+                </assert_contents>
+            </output>
+        </test>
+        <!-- test all parameter-->
+        <test expect_num_outputs="1">
+            <param name="input" value="example.bam" ftype="bam" />
+            <param name="format" value="fasta"/>
+            <section name="output_options">
+                <param name="line_len" value="70"/>
+                <param name="all" value="true"/>
+            </section>            
+            <output name="output_file" ftype="fasta">
+                <assert_contents>
+                    <has_line_matching expression=">LR743429.1"/>
+                    <has_n_lines n="157"/>
+                </assert_contents>
+            </output>
+        </test>
+        <!-- test ambiguity-->
+        <test expect_num_outputs="1">
+            <param name="input" value="toy.sam" ftype="sam" />
+            <section name="output_options">
+                <param name="ambig" value="true"/>
+            </section>            
+            <output name="output_file" ftype="fasta">
+                <assert_contents>
+                    <has_text text="Y"/>
+                    <has_text text="W"/>
+                    <has_n_lines n="4"/>
+                </assert_contents>
+            </output>
+        </test>
+        <!-- test mark insertions-->
+        <test expect_num_outputs="1">
+            <param name="input" value="toy.sam" ftype="sam" />
+            <param name="format" value="fastq"/>
+            <section name="output_options">
+                <param name="mark_insertions" value="true"/>
+            </section>            
+            <output name="output_file" ftype="fastq">
+                <assert_contents>
+                    <has_text text="!!BB.BBB_$_5_$_55BBB$5!!!!!!!!5555!!!!!"/>
+                    <has_n_lines n="8"/>
+                </assert_contents>
+            </output>
+        </test>
+    </tests>
+    <help><![CDATA[
+**What it does**
+  
+Generate a consensus sequence from a SAM, BAM, or CRAM file based on the alignment records.
+
+**Mode**
+
+Available modes are “simple” (frequency counting) and “bayesian” (Gap5-based) methods.
+The default is bayesian.
+For compatibility with Samtools v1.16 (which did not distinguish error types), you can use “bayesian 1.16” to reproduce the legacy behavior.
+
+For compatibility with older versions of Samtools (v1.16), the “bayesian_116” mode reproduces the previous consensus behavior, which does not distinguish between substitution and indel errors.
+
+**Bayesian configuration presets**  
+
+- **manual** – Manually set all parameters.  
+- **hiseq** – Uses Illumina HiSeq calibration: `--qual-calibration :hiseq`.  
+- **hifi** – PacBio HiFi preset:  
+  `--qual-calibration :hifi --homopoly-fix 0.3 --low-MQ 5 --scale-MQ 1.5 --het-scale 0.37`  
+- **r10.4_sup** – Oxford Nanopore R10.4 super accuracy preset:  
+  `--qual-calibration :r10.4_sup --homopoly-fix 0.3 --low-MQ 5 --scale-MQ 1.5 --het-scale 0.37`  
+- **r10.4_dup** – Oxford Nanopore R10.4 duplex preset:  
+  `--qual-calibration :r10.4_dup --homopoly-fix 0.3 --low-MQ 5 --scale-MQ 1.5 --het-scale 0.37`  
+- **ultima** – Ultima Genomics preset:  
+  `--qual-calibration :ultima --homopoly-fix 0.3 --low-MQ 10 --scale-MQ 2 --het-scale 0.37`  
+    ]]></help>
+    <expand macro="citations"/>
+    <creator>
+        <organization name="Galaxy Europe"/>
+        <person givenName="Ahmad" familyName="Mahagna" url="https://github.com/Smkingsize"/>
+        <person givenName="Saim" familyName="Momin" url="https://github.com/SaimMomin12"/>
+    </creator>
+</tool>
\ No newline at end of file