view cmbuild.xml @ 6:ee4be6eadd34 draft

planemo upload for repository https://github.com/bgruening/galaxytools/tree/master/tools/infernal commit ca2d37289d712b69ac15611bbf4961d083991bba
author bgruening
date Fri, 10 Nov 2017 13:04:44 -0500
parents 6e18e0b098cd
children c9e29ac5d099
line wrap: on
line source

<tool id="infernal_cmbuild" name="cmbuild" version="@VERSION@.0">
    <description>Build covariance models from sequence alignments</description>
    <macros>
        <import>macros.xml</import>
    </macros>
    <parallelism method="multi" split_inputs="alignment_infile" split_mode="to_size" split_size="10" merge_outputs="cmfile_outfile"></parallelism>
    <expand macro="requirements" />
    <expand macro="stdio" />
    <command>
<![CDATA[
    cmbuild
        -F
        #if $is_summery_output:
            -o '$summary_outfile'
        #end if
        ## to many outputs, is that one really needed?
        ##-O $annotated_source_alignment_outfile
        $model_construction_opts.model_construction_opts_selector
        #if $model_construction_opts.model_construction_opts_selector == '--fast':
            --symfrac $model_construction_opts.symfrac
        #end if
        $noss
        $relative_weights_opts.relative_weights_opts_selector
        #if $relative_weights_opts.relative_weights_opts_selector == '--wblosum':
            --wid $relative_weights_opts.wid
        #end if
        --p7ere $controlling_filter_p7_hmm.p7ere
        $controlling_filter_p7_hmm.p7ml
        --EmN $controlling_filter_p7_hmm.EmN
        --EvN $controlling_filter_p7_hmm.EvN
        --ElfN $controlling_filter_p7_hmm.ElfN
        --EgfN $controlling_filter_p7_hmm.EgfN
        $effective_opts.effective_opts_selector
        #if str($effective_opts.effective_opts_selector) == '--eent':
            #if $effective_opts.ere
                --ere $effective_opts.ere
            #end if
            #if $effective_opts.eminseq
                --eminseq $effective_opts.eminseq
            #end if
            #if $effective_opts.ehmmre
                --ehmmre $effective_opts.ehmmre
            #end if
            #if $effective_opts.eset
                --eset $effective_opts.eset
            #end if
        #end if
        #if str($refining_opts.refining_opts_selector) == '--refine':
            #if $refining_opts.refine_output:
                --refine '$refined_multiple_alignment_output'
            #else:
                --refine /dev/null
            #end if
            $refining_opts.l
            $refining_opts.gibbs_opts.gibbs_opts_selector
            #if str($refining_opts.gibbs_opts.gibbs_opts_selector) == '--gibbs':
                --seed $refining_opts.gibbs_opts.random_seed
            #end if
            $refining_opts.notrunc
            $refining_opts.cyk
        #end if
        '$cmfile_outfile'
        '$alignment_infile'


    #if $Calibrate.selector=="true"
        && cmcalibrate
            -L $Calibrate.L
            #if $Calibrate.output_options_cond.selector == "extra"
                #if str($Calibrate.output_options_cond.output_options) != 'None'
                    #for j in $Calibrate.output_options_cond.output_options.value:
                        --$j $getVar($j)
                    #end for
                #end if
            #end if
            #if $Calibrate.cont_exp_tails_fits.selector == "top_n"
                --gtailn $Calibrate.cont_exp_tails_fits.gtailn
                --ltailn $Calibrate.cont_exp_tails_fits.ltailn
            #elif $Calibrate.cont_exp_tails_fits.selector == "frac"
                --tailp $Calibrate.cont_exp_tails_fits.tailp
            #end if
            --seed $Calibrate.add_opts.seed
            --beta $Calibrate.add_opts.beta
            $Calibrate.add_opts.nonbanded
            $Calibrate.add_opts.nonull3
            $Calibrate.add_opts.random
            #if str($Calibrate.add_opts.gc) != 'None'
                --gc '$Calibrate.add_opts.gc'
            #end if
            --cpu "\${GALAXY_SLOTS:-2}"
            '$cmfile_outfile'
    #end if

]]>
    </command>
        <inputs>
            <param name="alignment_infile" type="data" format="stockholm" label="Sequence database"/>

            <conditional name="model_construction_opts">
                <param name="model_construction_opts_selector" type="select" label="These options control how consensus columns are defined in an alignment" help="">
                    <option value="--fast" selected="true">automatic (--fast)</option>
                    <option value="--hand">user defined (--hand)</option>
                </param>
                <when value="--fast">
                    <param name="symfrac" type="float" value="0.5"
                        label="Define the residue fraction threshold necessary to define a consensus (--symfrac)" help=""/>
                </when>
                <when value="--hand"/>
            </conditional>

            <param name="noss" truevalue="--noss" falsevalue="" checked="False" type="boolean"
                label="Ignore the secondary structure annotation, if any, in your multiple alignment file (--noss)" help=""/>

            <conditional name="relative_weights_opts">
                <param name="relative_weights_opts_selector" type="select" label="Options controlling relative weights" help="">
                    <option value="--wpb" selected="true">Henikoff (--wgb)</option>
                    <option value="--wgsc">Gerstein/Sonnhammer/Chothia (--wgsc)</option>
                    <option value="--wnone">no sequence weighting (--wnone)</option>
                    <option value="--wgiven">Sequence weight from given in input file (--wgiven)</option>
                    <option value="--wblosum">BLOSUM filtering algorithm (--wblosum)</option>
                </param>
                <when value="--wpb"/>
                <when value="--wgsc"/>
                <when value="--wnone"/>
                <when value="--wgiven"/>
                <when value="--wblosum">
                    <param name="wid" type="float" value="0.5"
                        label="Percent identity for clustering the alignment (--wid)" help=""/>
                </when>
            </conditional>

            <section name="controlling_filter_p7_hmm" title="Controlling Filter P7 HMM construction" >
                <param argument="--p7ere" type="float" value="0.38" label="For the filter p7 HMM, set minimum rel entropy/posn to" help="Set the target mean match state relative entropy for the filter p7 HMM"/>
                <param argument="--p7ml" type="boolean" truevalue="--p7ml" falsevalue="" checked="false" label="Define the filter p7 HMM as the ML p7 HMM" help="Use a mzimum likelihood p7 HMM built from the CM as the filter HMM"/>
                <param argument="--EmN" type="integer" value="200" label="Number of sampled seqs to use for p7 local MSV calibration" help=""/>
                <param argument="--EvN" type="integer" value="200" label="Number of sampled seqs to use for p7 local Vit calibration" help=""/>
                <param argument="--ElfN" type="integer" value="200" label="Number of sampled seqs to use for p7 local Fwd calibration" help=""/>
                <param argument="--EgfN" type="integer" value="200" label="Number of sampled seqs to use for p7 glocal Fwd calibration" help=""/>
            </section>

            <conditional name="effective_opts">
                <param name="effective_opts_selector" type="select" label="Options controlling effective sequence number" help="">
                    <option value="--eent" >entropy weighting strategy (--eent)</option>
                    <option value="--enone" selected="true">Turn off the entropy weighting strategy (--enone)</option>
                </param>
                <when value="--enone"/>
                <when value="--eent">
                    <param name="ere" type="float" value=""
                        label="Set the target mean match state relative entropy" help="(--ere)" optional="true"/>

                    <param name="eminseq" type="integer" value=""
                        label="Define the minimum allowed effective sequence number" help="(--eminseq)" optional="true"/>

                    <param name="ehmmre" type="float" value=""
                        label="Set the target HMM mean match state relative entropy" help="(--ehmmre)" optional="true"/>

                    <param name="eset" type="integer" value=""
                        label="Set the effective sequence number for entropy weighting" help="(--eset)" optional="true"/>
                </when>
            </conditional>

            <conditional name="refining_opts">
                <param name="refining_opts_selector" type="select" label="Options for refining the input alignment" help="">
                    <option value="--refine">refine the input alignment</option>
                    <option value="" selected="true">No refinement</option>
                </param>
                <when value=""/>
                <when value="--refine">

                    <conditional name="gibbs_opts">
                        <param name="gibbs_opts_selector" type="select" label="refinement mode" help="">
                            <option value="" selected="true">expectation-maximization (EM)</option>
                            <option value="--gibbs">Gibbs sampling</option>
                        </param>
                        <when value=""/>
                        <when value="--gibbs">
                            <param name="random_seed" type="integer" value="0" label="Randam Seed" help="" />
                        </when>
                    </conditional>

                    <param name="l" truevalue="-l" falsevalue="" checked="False" type="boolean"
                        label="Turn on the local alignment algorithm" help="... which allows the alignment to span two or more subsequences if necessary"/>

                    <param name="notrunc" truevalue="--notrunc" falsevalue="" checked="False" type="boolean"
                        label="Turn off the truncated alignment algorithm" help=""/>

                    <param name="cyk" type="select" label="Options for refining the input alignment" help="">
                        <option value="" selected="true">optimal accuracy algorithm</option>
                        <option value="--cyk">align with the CYK algorithm</option>
                    </param>

                    <param name="refine_output" truevalue="" falsevalue="" checked="False" type="boolean"
                        label="Output the refined alignment file as it is used to build the covariance model" help=""/>

                </when>
            </conditional>

            <param name="is_summery_output" truevalue="" falsevalue="" checked="False" type="boolean"
                label="Output a summery file?" help=""/>

            <!-- calibrate options -->
            <conditional name="Calibrate">
                <param name="selector" type="boolean" checked="true" label="Calibrate the covariance model"
                    help="A CM file must be calibrated with cmcalibrate before it can be used in cmsearch or cmscan. cmcalibrate is very slow. It takes a couple of hours to calibrate a single average sized CM on a single CPU"/>
                <when value="false"/>
                <when value="true">
                    <param argument="-L" type="float" value="1.6" min="0.01" max="160" label="Total length of random sequences to search" help="Set random seq length to search in Mb (megabases)"/>
                    <conditional name="cont_exp_tails_fits" >
                        <param name="selector" type="select" label="Options controlling exponential tail fits">
                            <option value="top_n">Fit the top 'n' hits/Mb in thehistogram</option>
                            <option value="frac">Fit a fraction of the histogram</option>
                        </param>
                        <when value="top_n">
                            <param argument="--gtailn" type="integer" value="250" min="0" label=" Fit the top 'n' hits/Mb in histogram for glocal modes" help=""/>
                            <param argument="--ltailn" type="integer" value="750" min="0" label=" Fit the top 'n' hits/Mb in histogram for local modes" help=""/>
                        </when>
                        <when value="frac">
                            <param argument="--tailp" type="float" min="0" max="0.6" optional="true" label="Set fraction of histogram tail to fit to exp tail" help=""/>
                        </when>
                    </conditional>
                    <conditional name="output_options_cond">
                        <param name="selector" type="select" label="Output extra files">
                            <option value="extra">Output extra files</option>
                            <option value="none" selected="true">Don't output extra files</option>
                        </param>
                        <when value="extra">
                            <param name="output_options" type="select" label="Optional output files" multiple="true" display="checkboxes">
                                <option value="hfile">save fitted score histogram(s)</option>
                                <option value="sfile">save survival plot </option>
                                <option value="qqfile">save Q-Q plot for score histograms </option>
                                <option value="ffile">save lambdas for different tail fit probs</option>
                                <option value="xfile">save scores in fit tail</option>
                            </param>
                        </when>
                        <when value="none"/>
                    </conditional>
                    <section name="add_opts" title="Additional Options">
                        <param argument="--seed" type="integer" value="181"
                            label="RNG seed" help="If the seed is nonzero, stochas-tic simulations will be reproducible. If 0, the random number generator is seeded arbitrarily"/>
                        <param argument="--beta" type="float" value="1e-15"
                            label="Tail loss prob. for query dependent banding (QDB)" help="The beta parameter is the amount of probability mass excluded during band calculation, higher values of beta give greater speedups but sacrifice more accuracy than lower values."/>
                        <param argument="--nonbanded" truevalue="--nonbanded" falsevalue="" checked="false" type="boolean"
                            label="Turn off QDB during E-value calibration" help="This will slow down calibration"/>
                        <param argument="--nonull3" truevalue="--nonull3" falsevalue="" checked="false" type="boolean"
                            label="Turn off the null3 post hoc additional null model" help="This is not recommended unless you plan on using the same option to cmsearch and/or cmscan"/>
                        <param argument="--random" truevalue="--random" falsevalue="" checked="false" type="boolean"
                            label="use GC content of random null background model of CM" help="Use the background null model of the CM to generate the random sequences, instead of the more realistic HMM. Unless the CM was built using the --null option to cmbuild, the background null model will be 25% each A, C, G and U"/>
                        <param argument="--gc" type="data" format="txt" optional="true" label="Use GC content distribution from file" help="Generate the random sequences using the nucleotide distribution from the sequence file"/>
                    </section>
                </when>
            </conditional>


        </inputs>
    <outputs>
        <data format="text" name="summary_outfile" label="cmbuild summary on ${on_string}">
            <filter>is_summery_output is True</filter>
        </data>
        <!--<data format="stockholm" name="annotated_source_alignment_outfile" label="Annotated alignment from ${on_string}"/>-->
        <data format="cm" name="cmfile_outfile" label="Covariance models from ${on_string}"/>

        <data format="stockholm" name="refined_multiple_alignment_output" label="refined alignment file of ${on_string}">
            <filter>
                ((
                refining_opts['refining_opts_selector'] == "--refine" and
                refining_opts['refine_output'] is True
                ))
            </filter>
        </data>

        <!-- cmcalibrate additional output files -->
        <data name="hfile" format="txt" label="hfile, an cmcalibrate additional output file, on ${on_string}">
            <filter>
                ((
                Calibrate['selector'] is True and
                Calibrate['output_options_cond']['selector'] == "extra" and
                'hfile' in Calibrate['output_options_cond']['output_options']
                ))
            </filter>
        </data>
        <data name="sfile" format="txt" label="sfile, an cmcalibrate additional output file, on ${on_string}">
            <filter>
                ((
                Calibrate['selector'] is True and
                Calibrate['output_options_cond']['selector'] == "extra" and
                'sfile' in Calibrate['output_options_cond']['output_options']
                ))
            </filter>
        </data>
        <data name="qqfile" format="txt" label="qqfile, an cmcalibrate additional output file, on ${on_string}">
            <filter>
                ((
                Calibrate['selector'] is True and
                Calibrate['output_options_cond']['selector'] == "extra" and
                'qqfile' in Calibrate['output_options_cond']['output_options']
                ))
            </filter>
        </data>
        <data name="ffile" format="txt" label="ffile, an cmcalibrate additional output file, on ${on_string}">
            <filter>
                ((
                Calibrate['selector'] is True and
                Calibrate['output_options_cond']['selector'] == "extra" and
                'ffile' in Calibrate['output_options_cond']['output_options']
                ))
            </filter>
        </data>
        <data name="xfile" format="txt" label="xfile, an cmcalibrate additional output file, on ${on_string}">
            <filter>
                ((
                Calibrate['selector'] is True and
                Calibrate['output_options_cond']['selector'] == "extra" and
                'xfile' in Calibrate['output_options_cond']['output_options']
                ))
            </filter>
        </data>

    </outputs>

    <tests>
        <test>
            <param name="alignment_infile" value="cmbuild_input_tRNA5.sto"/>
            <conditional name="Calibrate">
                <param name="selector" value="true"/>
                <param name="L" value="0.1"/>
            </conditional>
            <output name="outfile">
                <assert_contents>
                    <has_text text="S     0    -1 0     1     4     0     1    89   109  -7.220  -8.465  -0.063  -4.919"/>
                </assert_contents>
            </output>
        </test>
    </tests>
    <help>
<![CDATA[

**What it does**

cmbuild belongs to the INFERNAL software package that allows you to make consensus RNA secondary structure profiles, and use them to search nucleic acid sequence databases for homologous RNAs, or to create new structure-based multiple sequence alignments.

cm build builds a covariance model of an RNA multiple alignment. cmbuild uses the consensus structure to determine the architecture of the CM.

**Input**

Input file is a multiple sequence alignment file in Stockholm format, and must contain consensus secondary structure annotation.
cmbuild uses the consensus structure to determine the architecture of the CM.

Example: simple example of a multiple RNA sequence alignment with secondary structure annotation

# STOCKHOLM 1.0

tRNA1             GCGGAUUUAGCUCAGUUGGG.AGAGCGCCAGACUGAAGAUCUGGAGGUCC

tRNA2             UCCGAUAUAGUGUAAC.GGCUAUCACAUCACGCUUUCACCGUGGAGA.CC

tRNA3             UCCGUGAUAGUUUAAU.GGUCAGAAUGGGCGCUUGUCGCGUGCCAGA.UC

tRNA4             GCUCGUAUGGCGCAGU.GGU.AGCGCAGCAGAUUGCAAAUCUGUUGGUCC

tRNA5             GGGCACAUGGCGCAGUUGGU.AGCGCGCUUCCCUUGCAAGGAAGAGGUCA

#=GC SS_cons      <<<<<<<..<<<<.........>>>>.<<<<<.......>>>>>.....<


**Output**

The output of cmbuild contains information about the size of your input alignment (in aligned columns
and # of sequences), and about the size of the resulting model.

In addition to writing CM(s) to the output file, cmbuild also outputs a single line for each model created to stdout.
Each line has the following fields:
- aln: the index of the alignment used to build the CM
- idx: the index of the CM in the output file
- name: the name of the CM
- nseq: the number of sequences in the alignment used to build the CM
- eff nseq: the effective number of sequences used to build the model
- alen: the length of the alignment used to build the CM
- clen: the number of columns from the alignment defined as consensus (match) columns
- bps: the number of basepairs in the CM
- bifs: the number of bifurcations in the CM
- rel entropy: CM: the total relative entropy of the model divided by the number of consensus columns
- rel entropy: HMM: the total relative entropy of the model ignoring secondary structure divided by the number of consensus columns
- description: description of the model/alignment.


**Options controlling model construction**

These options control how consensus columns are defined in an alignment.

  - *--fast*: Define consensus columns automatically as those that have a fraction >= symfrac of residues as opposed to gaps. (See below for the --symfrac option.) This is the default.
  - *--hand*: Use reference coordinate annotation (#=GC RF line, in Stockholm) to determine which columns are consensus, and which are inserts. Any non-gap character indicates a consensus column. (For example, mark consensus columns with ”x”, and insert columns with ”.”.)
  - *--symfrac*: Define the residue fraction threshold necessary to define a consensus column when not using --hand. The default is 0.5. The symbol fraction in each column is calculated after taking relative sequence weighting into account. Setting this to 0.0 means that every alignment column will be assigned as consensus, which may be useful in some cases. Setting it to 1.0 means that only columns that include 0 gaps will be assigned as consensus.
  - *--noss*: Ignore the secondary structure annotation, if any, in MSA-Infile and build a CM with zero basepairs. This model will be similar to a profile HMM and the cmsearch and cmscan programs will use HMM algorithms which are faster than CM ones for this model. Additionally, a zero basepair model need not be calibrated with cmcalibrate prior to running cmsearch with it. The --noss option must be used if there is no secondary structure annotation in MSA-Infile.


**Options controlling relative weights**


cmbuild uses an ad hoc sequence weighting algorithm to downweight closely related sequences and upweight distantly related ones. This has the effect of making models less biased by uneven phylogenetic representation. For example, two identical sequences would typically each receive half the weight that one sequence would. These options control which algorithm gets used.

  - *--wgb*: Use the Henikoff position-based sequence weighting scheme [Henikoff
and Henikoff, J. Mol. Biol. 243:574, 1994].  This is the default.
  - *--wgsc*: Use the Gerstein/Sonnhammer/Chothia weighting algorithm [Gerstein et al, J. Mol. Biol. 235:1067, 1994].
  - *--wnone*: Turn sequence weighting off; e.g. explicitly set all sequence weights to 1.0.
  - *--wgiven*: Use sequence weights as given in annotation in the input alignment file. If no weights were given, assume they are all 1.0. The default is to determine new sequence weights by the Gerstein/Sonnhammer/Chothia algorithm, ignoring any annotated weights.
  - *--wblosum*: Use the BLOSUM filtering algorithm to weight the sequences, instead of the default GSC weighting. Cluster the sequences at a given percentage identity (see --wid); assign each cluster a total weight of 1.0, distributed equally amongst the members of that cluster.


**Options controlling effective sequence number**


After relative weights are determined, they are normalized to sum to a total effective sequence number, eff nseq. This number may be the actual number of sequences in the alignment, but it is almost always smaller than that. The default entropy weighting method (--eent) reduces the effective sequence number to reduce the information content (relative entropy, or average expected score on true homologs) per consensus position. The target relative entropy is controlled by a two-parameter function, where the two parameters are settable with --ere and --esigma.

  - *--eent*: Use the entropy weighting strategy to determine the effective sequence number that gives a target mean match state relative entropy. This option is the default, and can be turned off with --enone. The default target mean match state relative entropy is 0.59 bits for models with at least 1 basepair and 0.38 bits for models with zero basepairs, but changed with --ere. The default of 0.59 or 0.38 bits is automatically changed if the total relative entropy of the model (summed match state relative entropy) is less than a cutoff, which is is 6.0 bits by default, but can be changed with the expert, undocumented --eX option. If you really want to play with that option, consult the source code.
  - *--enone*: Turn off the entropy weighting strategy. The effective sequence number is just the number of sequences in the alignment.
  - *--ere*: Set the target mean match state relative entropy. By default the target relative entropy per match position is 0.59 bits for models with at least 1 basepair and 0.38 for models with zero basepairs.
  - *--eminseq*: Define the minimum allowed effective sequence number.
  - *--ehmmre*: Set the target HMM mean match state relative entropy. Entropy for basepairing match states is calculated using marginalized basepair emission probabilities.
  - *--eset*: Set the effective sequence number for entropy weighting.

**Options for refining the input alignment**

  - *--refine*: Attempt to refine the alignment before building the CM using expectation-maximization (EM). A CM is first built from the initial alignment as usual. Then, the sequences in the alignment are realigned optimally (with the HMM banded CYK algorithm, optimal means optimal given the bands) to the CM, and a new CM is built from the resulting alignment. The sequences are then realigned to the new CM, and a new CM is built from that alignment. This is continued until convergence, specifically when the alignments for two successive iterations are not significantly different (the summed bit scores of all the sequences in the alignment changes less than 1% between two successive iterations).
  - *Turn on the local alignment algorithm*: allows the alignment to span two or more subsequences if necessary (e.g. if the structures of the query model and target sequence are only partially shared), allowing certain large insertions and deletions in the structure to be penalized differently than normal indels. The default is to globally align the query model to the target sequences.
  - *--gibbs sampling*: Modifies the behavior of --refine so Gibbs sampling is used instead of EM. The difference is that during the alignment stage the alignment is not necessarily optimal, instead an alignment (parsetree) for each sequences is sampled from the posterior distribution of alignments as determined by the Inside algorithm. Due to this sampling step --gibbs is non- deterministic, so different runs with the same alignment may yield different results. This is not true when --refine is used without the --gibbs option, in which case the final alignment and CM will always be the same. When --gibbs is enabled, the --seed "number" option can be used to seed the random number generator predictably, making the results reproducible. The goal of the --gibbs option is to help expert RNA alignment curators refine structural alignments by allowing them to observe alternative high scoring alignments.
  - *--Random seed*: Seed the random number generator with an integer >= 0. This option can only be used in combination with --gibbs. If the given number is nonzero, stochastic sampling of alignments will be reproducible; the same command will give the same results. If the given number is 0, the random number generator is seeded arbitrarily, and stochastic samplings may vary from run to run of the same command. The default seed is 0.
  - *--Turn off the truncated alignment algorithm*: With --refine, turn off the truncated alignment algorithm. There is more information on this in the cmalign manual page.
  - *--cyk algorithm*: With --refine, align with the CYK algorithm. By default the optimal accuracy algorithm is used. There is more information on this in the cmalign manual page.


For further questions please refere to the Infernal Userguide_.

.. _Userguide: http://eddylab.org/infernal/Userguide.pdf

]]>
    </help>

    <expand macro="citations" />

</tool>