view MS2snoop.xml @ 5:78d5a12406c2 draft

planemo upload commit a5f94dac9b268629399dc22c5d6ac48c5a85adc3
author workflow4metabolomics
date Fri, 05 Aug 2022 17:25:45 +0000
parents 856001213966
children 77abacd33c31
line wrap: on
line source

<tool
    id="ms2snoop"
    name="MS2 Snoop"
    version="@TOOL_VERSION@+galaxy@VERSION_SUFFIX@"
    profile="21.09"
>
    <description>
        MS1/MS2 spectra and associated adducts extraction and cleaning
    </description>
    <macros>
        <import>macros.xml</import>
    </macros>
    <edam_topics>
        <edam_topic>topic_0091</edam_topic>
        <edam_topic>topic_3370</edam_topic>
    </edam_topics>
    <edam_operations>
        <edam_operation>operation_3803</edam_operation>
        <edam_operation>operation_3860</edam_operation>
    </edam_operations>
    <requirements>
        <requirement type="package" version="4.1.3">r-base</requirement>
        <requirement type="package" version="1.7.1">r-optparse</requirement>
        <requirement type="package" version="4.9.15">sirius-csifingerid</requirement>
        <requirement type="package" version="3.0">zip</requirement>
    </requirements>
    <stdio>
        <exit_code range="1" level="fatal" description="Missing parameter error" />
        <exit_code range="2" level="fatal" description="Bad parameter's value" />
        <exit_code range="3" level="fatal" description="Missing input file" />
        <exit_code range="4:254" level="fatal" description="Unknown error" />
        <exit_code range="255" level="fatal" description="No any result to output" />
        <regex match="Error in\s+.*:\s+.*" />
    </stdio>
    <version_command>
        Rscript '$__tool_directory__/MS2snoop.R' --version | head -n 1
    </version_command>
    <command>
        <![CDATA[
Rscript '$__tool_directory__/MS2snoop.R'
    --output '$frag_result_txt'
    --compounds '$compound_txt'
    --fragments '$peaklist_frag_tsv'
    --precursors '$peaklist_preco_tsv'
    --tolmz '$tolmz'
    --tolrt '$tolrt'
    --seuil_ra '$seuil_ra'
    --mzdecimal '$mzdecimal'
    --r_threshold '$r_threshold'
    --min_number_scan '$min_number_scan'
    --ionization '$sirius.ionization'
    --fragment_match_delta '$sirius.fragment_match_delta'
    --fragment_match_delta_unit '$sirius.fragment_match_delta_unit'
    $advenced.pdf
    $advenced.debug
    $advenced.verbose
        ]]>
    </command>
    <inputs>
        <param
            argument="--compound_txt"
            type="data"
            format="tabular,csv,tsv"
            label="list of compounds"
            help="
            The table must fit the format:
            compound_name [MANDATORY] ;
            inchikey [MANDATORY] ;
            elemcomposition [OPTIONAL] ;
            mz [MANDATORY] ;
            rtsec [MANDATORY].
            "
        />
        <param
            argument="--peaklist_frag_tsv"
            type="data"
            format="tabular,csv,tsv"
            label="MSpurity fragments file"
        />
        <param
            argument="--peaklist_preco_tsv"
            type="data"
            format="tabular,csv,tsv"
            label="MSpurity precursors file"
        />
        <param
            argument="--tolmz"
            type="float"
            min="0.0001"
            max="10"
            value="0.01"
            label="MZ Tolerence"
            help="M/z tolerance to determine if a precursor matches a compound"
        />
        <param
            argument="--tolrt"
            type="integer"
            min="0"
            max="30"
            value="20"
            label="RT Tolerence (in seconds)"
            help="
                Retention time tolerance to determine if a
                precursor matches a compound
            "
        />
        <param
            argument="--seuil_ra"
            type="float"
            min="0"
            max="1"
            value="0.05"
            label="R-Pearson correlation threshold used to filter fragments"
        />
        <param
            argument="--mzdecimal"
            type="integer"
            min="0"
            max="5"
            value="0"
            label="Number of decimal to output M/z values with"
        />
        <param
            argument="--r_threshold"
            type="float"
            min="0"
            value="0.85"
            label="
                Minimun correlation with absolute intensity value to reach
                for a fragment to be considered as valid.
                In PDF generation, invalid fragments will be
                displayed in grey.
            "
        />
        <param
            argument="--min_number_scan"
            type="integer"
            min="0"
            max="25"
            value="8"
            label="Present in at least X scan"
            help="
                Mininum scan number in which a fragment must be found,
                to be kept.
            "
        />

        <section title="Sirius Parameters" name="sirius">
            <param
                argument="--ionization"
                type="select"
                label="Which ionization"
                help="Select the ionization to use in sirius"
                optional="true"
            >
                <option value="[M+H]+" selected="true">[M+H]+</option>
                <option value="[M-H]-">[M-H]-</option>
                <option value="[M+?]+">[M+?]+</option>
                <option value="[M+K]+">[M+K]+</option>
                <option value="[M+Na]+">[M+Na]+</option>
                <option value="[M+H-H2O]+">[M+H-H2O]+</option>
                <option value="[M+H-H4O2]+">[M+H-H4O2]+</option>
                <option value="[M+NH4]+">[M+NH4]+</option>
                <option value="[M+Cl]-">[M+Cl]-</option>
                <option value="[M-H2O-H]-">[M-H2O-H]-</option>
                <option value="[M+Br]-">[M+Br]-</option>
            </param>

            <param
                argument="--fragment_match_delta"
                type="float"
                min="0"
                max="25"
                value="10"
                label="Fragment match delta"
                help="
                    Delta that determines if a fragment found by sirius
                    is linked to a certain M/z value.
                    Zero means all fragments found by sirius will be
                    associated even when M/z difference is aberant.
                "
            />
            <param
                argument="--fragment_match_delta_unit"
                type="select"
                label="Delta unit"
                help="Select the unit of the fragment match delta"
                optional="true"
            >
                <option value="ppm" selected="true">PPM</option>
                <option value="mz">M/z</option>
            </param>
        </section>

        <section title="Advenced Options" name="advenced">
            <param
                argument="--pdf"
                type="boolean"
                value=""
                optional="true"
                label="Output PDF"
                help="The tool will output some pdf in a zip file"
                truevalue="--pdf_path '$pdf_output'"
                falsevalue=""
            />
            <param
                argument="--verbose"
                type="boolean"
                value=""
                optional="true"
                label="Verbose logs"
                help="The tool will print more logs"
                truevalue="--verbose"
                falsevalue=""
            />
            <param
                argument="--debug"
                type="boolean"
                value=""
                optional="true"
                label="Debug statements"
                help="The tool will print debug statements"
                truevalue="--debug"
                falsevalue=""
            />
        </section>
    </inputs>
    <outputs>
        <data
            name="frag_result_txt"
            format="tsv"
            label="${tool.name} on ${peaklist_frag_tsv.name}"
        />
        <data
            name="pdf_output"
            format="zip"
            label="${tool.name} PDFs for ${peaklist_frag_tsv.name}"
        >
            <filter>advenced['pdf']</filter>
        </data>
    </outputs>
    <tests>
        <test>
            <!-- Regular test with no option -->
            <param
                name="compound_txt"
                value="compounds_pos.txt"
            />
            <param
                name="peaklist_frag_tsv"
                value="peaklist_fragments.tsv"
            />
            <param
                name="peaklist_preco_tsv"
                value="peaklist_precursors.tsv"
            />
            <output
                name="frag_result_txt"
                file="compound_fragments_result.txt"
            />
            <assert_stdout>
                <expand macro="has_regular_stdout"/>
                <expand macro="has_not_verbose_stdout"/>
                <expand macro="has_not_debug_stdout"/>
            </assert_stdout>
        </test>

        <test>
            <!-- Regular files with verbose output -->
            <param
                name="compound_txt"
                value="compounds_pos.txt"
            />
            <param
                name="peaklist_frag_tsv"
                value="peaklist_fragments.tsv"
            />
            <param
                name="peaklist_preco_tsv"
                value="peaklist_precursors.tsv"
            />
            <param name="verbose" value="--verbose" />
            <output
                name="frag_result_txt"
                file="compound_fragments_result.txt"
            />
            <assert_stdout>
                <expand macro="has_regular_stdout"/>
                <expand macro="has_verbose_stdout"/>
                <expand macro="has_not_debug_stdout"/>
            </assert_stdout>
        </test>

        <test>
            <!-- Regular test with debug outputs -->
            <param
                name="compound_txt"
                value="compounds_pos.txt"
            />
            <param
                name="peaklist_frag_tsv"
                value="peaklist_fragments.tsv"
            />
            <param
                name="peaklist_preco_tsv"
                value="peaklist_precursors.tsv"
            />
            <param name="debug" value="--debug" />
            <output
                name="frag_result_txt"
                file="compound_fragments_result.txt"
            />
            <assert_stdout>
                <expand macro="has_smol_stdout"/>
                <expand macro="has_debug_stdout"/>
                <expand macro="has_not_verbose_stdout"/>
            </assert_stdout>
        </test>

        <test>
            <!-- Regular test with both verbose and debug outputs -->
            <param
                name="compound_txt"
                value="compounds_pos.txt"
            />
            <param
                name="peaklist_frag_tsv"
                value="peaklist_fragments.tsv"
            />
            <param
                name="peaklist_preco_tsv"
                value="peaklist_precursors.tsv"
            />
            <param name="debug" value="--debug" />
            <param name="verbose" value="--verbose" />
            <output
                name="frag_result_txt"
                file="compound_fragments_result.txt"
            />
            <assert_stdout>
                <expand macro="has_smol_stdout"/>
                <expand macro="has_debug_stdout"/>
                <expand macro="has_smol_verbose_stdout"/>
            </assert_stdout>
        </test>

        <test>
            <!--
            This test mixes tsv, csv, and so, and ms2snoop is expected
            handle them like usual.
            -->
            <param
                name="compound_txt"
                value="compounds_pos.csv"
            />
            <param
                name="peaklist_frag_tsv"
                value="peaklist_fragments.tsv"
            />
            <param
                name="peaklist_preco_tsv"
                value="peaklist_precursors.csv"
            />
            <param name="verbose" value="--verbose" />
            <output
                name="frag_result_txt"
                file="compound_fragments_result.txt"
            />
            <assert_stdout>
                <expand macro="has_regular_stdout"/>
                <expand macro="has_verbose_stdout"/>
                <expand macro="has_not_debug_stdout"/>
            </assert_stdout>
        </test>

        <test>
            <!--
            This test contains smaller datasets. This is the "regular"
            smol test, to prepare further smolah tests.
            -->
            <param name="ionization" value="[M+?]+" />
            <param name="mzdecimal" value="3" />
            <param name="compound_txt" value="smol/smol_compounds_pos.csv"/>
            <param name="peaklist_frag_tsv" value="smol/smol_fragments.tsv" />
            <param name="peaklist_preco_tsv" value="smol/smol_precursors.tsv" />
            <output name="frag_result_txt" file="smol/out-smol-base.tsv" />
        </test>

        <test>
            <!--
            Test for pdf generation
            -->
            <param name="pdf" value="True" />
            <param name="ionization" value="[M+?]+" />
            <param name="mzdecimal" value="3" />
            <param name="compound_txt" value="smol/smol_compounds_pos.csv"/>
            <param name="peaklist_frag_tsv" value="smol/smol_fragments.tsv" />
            <param name="peaklist_preco_tsv" value="smol/smol_precursors.tsv" />
            <output name="frag_result_txt" file="smol/out-smol-base.tsv" />
        </test>

        <test>
            <!--
                test for delta in ppm
            -->
            <param name="ionization" value="[M+?]+" />
            <param name="mzdecimal" value="3" />
            <param name="compound_txt" value="smol/smol_compounds_pos.csv"/>
            <param name="peaklist_frag_tsv" value="smol/smol_fragments.tsv" />
            <param name="peaklist_preco_tsv" value="smol/smol_precursors.tsv" />
            <param name="fragment_match_delta" value="8.542" />
            <output name="frag_result_txt" file="smol/out-smol-delta-8.542.tsv" />
        </test>

        <test>
            <!--
                test for delta in m/z
            -->
            <param name="ionization" value="[M+?]+" />
            <param name="mzdecimal" value="3" />
            <param name="compound_txt" value="smol/smol_compounds_pos.csv"/>
            <param name="peaklist_frag_tsv" value="smol/smol_fragments.tsv" />
            <param name="peaklist_preco_tsv" value="smol/smol_precursors.tsv" />
            <param name="fragment_match_delta" value="0.05" />
            <param name="fragment_match_delta_unit" value="mz" />
            <output name="frag_result_txt" file="smol/out-smol-delta-0.05mz.tsv" />
        </test>

        <!--  === expected to fail tests === -->
        <test expect_exit_code="2" expect_failure="true">
            <!--
            This test uses old format for molecules file.
            Is is expected to fail
            -->
            <param
                name="compound_txt"
                value="compounds_pos_old_format.txt"
            />
            <param
                name="peaklist_frag_tsv"
                value="peaklist_fragments.tsv"
            />
            <param
                name="peaklist_preco_tsv"
                value="peaklist_precursors.csv"
            />
            <assert_stderr>
                <has_line line="Error: Some columns are missing: compound_name, rtsec, inchikey" />
            </assert_stderr>
        </test>

    </tests>
    <help><![CDATA[

@AUTHORS@

==============
MS2 validation
==============

-----------
Description
-----------

MS2snoop use results of msPurity to find spectra of standards listed in
a compounds file. Check the fragments and precursor using correlation of
among the different scans of fragments 

-----------------
Workflow position
-----------------

--------------
Upstream tools
--------------

+-------------------------+-----------------+--------+------------+
| Name                    |  output file    | format |  parameter |
+=========================+=================+========+============+
| msPurity.purityA        |       NA        |   TSV  |    NA      |
+-------------------------+-----------------+--------+------------+
| msPurity.frag4feature   |       NA        |   TSV  |    NA      |
+-------------------------+-----------------+--------+------------+

----------------
Downstream tools
----------------

+-------------------------+-----------------+--------+------------+
| Name                    |  output file    | format |  parameter |
+=========================+=================+========+============+
| NA                      |       NA        |   NA   |    NA      |
+-------------------------+-----------------+--------+------------+


-----------
Input files
-----------

+----------------------------------------------+------------+
| Parameter : num + label                      |   Format   |
+===========================+==================+============+
| Input from msPurity Precursor                |   TSV,CSV  |
+----------------------------------------------+------------+
| Input from msPurity fragment                 |   TSV,CSV  |
| Input compounds file to search in precursor  |            |
+----------------------------------------------+------------+
| and fragment (Name + m/z + ret Time)         |   TSV,CSV  |
+----------------------------------------------+------------+


@PARAMETERS@


@OUTPUTS@


@CHANGELOG@

   ]]></help>
</tool>