<tool id="abims_xcms_fillPeaks" name="xcms fillChromPeaks (fillPeaks)" version="@WRAPPER_VERSION@.0">

    <description>Integrate areas of missing peaks</description>

    <macros>
        <import>macros.xml</import>
        <import>macros_xcms.xml</import>
    </macros>

    <expand macro="requirements"/>
    <expand macro="stdio"/>

    <command><![CDATA[
        @COMMAND_RSCRIPT@/xcms_fillpeaks.r

        image '$image'

        ## Advanced
        expandMz $Adv.expandMz
        expandRt $Adv.expandRt
        ppm $Adv.ppm

        @COMMAND_PEAKLIST@

        @COMMAND_FILE_LOAD@

        @COMMAND_LOG_EXIT@

    ]]></command>

    <inputs>
        <param name="image" type="data" format="rdata.xcms.group,rdata" label="@INPUT_IMAGE_LABEL@" help="@INPUT_IMAGE_HELP@ from groupChromPeaks" />

        <section name="Adv" title="Advanced Options" expanded="False">
            <param argument="expandMz" type="integer" value="0" label="Value by which the mz width of peaks should be expanded" help="Each peak is expanded in mz direction by ‘expandMz *’ their original mz width. A value of ‘0’ means no expansion, a value of ‘1’ grows each peak by 1 * the mz width of the peak resulting in peakswith twice their original size in mz direction (expansion by half mz width to both sides)." />
            <param argument="expandRt" type="integer" value="0" label="Value by which the RT width of peaks should be expanded" help="Each peak is expanded in RT direction by ‘expandRt *’ their original RT width. A value of ‘0’ means no expansion, a value of ‘1’ grows each peak by 1 * the RT width of the peak resulting in peakswith twice their original size in RT direction (expansion by half RT width to both sides)."/>
            <param argument="ppm" type="integer" value="0" label="Specifying a ppm by which the mz width of the peak region should be expanded" help="For peaks with an mz width smaller than ‘mean(c(mzmin, mzmax)) * ppm / 1e6’, the ‘mzmin’ will be replaced by ‘mean(c(mzmin, mzmax)) - (mean(c(mzmin, mzmax)) * ppm / 2 / 1e6)’ and ‘mzmax’ by ‘mean(c(mzmin, mzmax)) + (mean(c(mzmin, mzmax)) * ppm / 2 / 1e6)’. This is applied before eventually expanding the mz width using the ‘expandMz’ parameter." />
        </section>

        <expand macro="input_peaklist"/>

        <expand macro="input_file_load"/>

    </inputs>

    <outputs>
        <data name="xsetRData" format="rdata.xcms.fillpeaks" label="${image.name[:-6]}.fillPeaks.RData" from_work_dir="fillpeaks.RData" />
        <expand macro="output_peaklist" function="fillpeaks" />
    </outputs>

    <tests>
        <!--<test>
            <param name="image" value="xset.group.retcor.group.RData" ftype="rdata"/>
            <param name="method" value="chrom"/>
            <param name="zip_file" value="sacuri_dir_root.zip"  ftype="zip" />
            <assert_stdout>
                <has_text text="object with 4 samples" />
                <has_text text="Time range: 0.2-1140.1 seconds (0-19 minutes)" />
                <has_text text="Mass range: 50.0021-999.9863 m/z" />
                <has_text text="Peaks: 199718 (about 49930 per sample)" />
                <has_text text="Peak Groups: 48958" />
                <has_text text="Sample classes: bio, blank" />
            </assert_stdout>
        </test>-->
        <!-- Issue with fillpeaks because it seems that there are too many NA
        <test>
            <param name="image" value="faahKO.xset.group.retcor.group.RData" ftype="rdata"/>
            <param name="method" value="chrom"/>
            <conditional name="peaklist">
                <param name="peaklistBool" value="true" />
                <param name="convertRTMinute" value="false" />
                <param name="numDigitsMZ" value="4" />
                <param name="numDigitsRT" value="1" />
            </conditional>
            <expand macro="test_file_load_zip"/>
            <assert_stdout>
                <has_text text="object with 4 samples" />
                <has_text text="Time range: 2509.2-4480.3 seconds (41.8-74.7 minutes)" />
                <has_text text="Mass range: 200.1-600 m/z" />
                <has_text text="Peaks: 32720 (about 8180 per sample)" />
                <has_text text="Peak Groups: 8209" />
                <has_text text="Sample classes: KO, WT" />
            </assert_stdout>
            <output name="variableMetadata" file="faahKO.xset.group.retcor.group.fillPeaks.variableMetadata.tsv" />
            <output name="dataMatrix" file="faahKO.xset.group.retcor.group.fillPeaks.dataMatrix.tsv" />
        </test>
        <test>
            <param name="image" value="faahKO-single.xset.merged.group.retcor.group.RData" ftype="rdata"/>
            <param name="method" value="chrom"/>
            <conditional name="peaklist">
                <param name="peaklistBool" value="true" />
                <param name="convertRTMinute" value="false" />
                <param name="numDigitsMZ" value="4" />
                <param name="numDigitsRT" value="1" />
            </conditional>
            <expand macro="test_file_load_single"/>
            <assert_stdout>
                <has_text text="object with 4 samples" />
                <has_text text="Time range: 2509.2-4480.3 seconds (41.8-74.7 minutes)" />
                <has_text text="Mass range: 200.1-600 m/z" />
                <has_text text="Peaks: 32720 (about 8180 per sample)" />
                <has_text text="Peak Groups: 8209" />
                <has_text text="Sample classes: KO, WT" />
            </assert_stdout>
            <output name="variableMetadata" file="faahKO.xset.group.retcor.group.fillPeaks.variableMetadata.tsv" />
            <output name="dataMatrix" file="faahKO.xset.group.retcor.group.fillPeaks.dataMatrix.tsv" />
        </test>-->
        <test>
            <param name="image" value="faahKO-single.xset.merged.group2.retcor2.group2.RData" ftype="rdata"/>
            <conditional name="peaklist">
                <param name="peaklistBool" value="true" />
                <param name="convertRTMinute" value="false" />
                <param name="numDigitsMZ" value="4" />
                <param name="numDigitsRT" value="1" />
            </conditional>
            <expand macro="test_file_load_single"/>
            <assert_stdout>
                <has_text text="expandMz: 0" />
                <has_text text="expandRt: 0" />
                <has_text text="object with 4 samples" />
                <has_text text="Time range: 2499.4-4473.6 seconds (41.7-74.6 minutes)" />
                <has_text text="Mass range: 200.1-600 m/z" />
                <has_text text="Peaks: 15230 (about 3808 per sample)" />
                <has_text text="Peak Groups: 6332" />
                <has_text text="Sample classes: KO, WT" />
            </assert_stdout>
            <output name="variableMetadata" file="faahKO.xset.group2.retcor2.group2.fillPeaks2.variableMetadata.tsv" />
            <output name="dataMatrix" file="faahKO.xset.group2.retcor2.group2.fillPeaks2.dataMatrix.tsv" />
        </test>
    </tests>

    <help><![CDATA[

@HELP_AUTHORS@

===================
xcms fillChromPeaks
===================

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

**Integrate areas of missing peaks**
For each sample, identify peak groups where that sample is not
represented. For each of those peak groups, integrate the signal
in the region of that peak group and create a new peak.



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


**Upstream tools**

========================= ================= ================== ==========
Name                      output file       format             parameter
========================= ================= ================== ==========
xcms.group                xset.group.RData  rdata.xcms.group   RData file
========================= ================= ================== ==========


**Downstream tools**

=========================== ================== =======================
Name                        Output file        Format
=========================== ================== =======================
CAMERA.annotate             xset.retcor.RData  rdata.xcms.fillpeaks
--------------------------- ------------------ -----------------------
xcms.summary                xset.retcor.RData  rdata.xcms.fillpeaks
=========================== ================== =======================


**General schema of the metabolomic workflow**

.. image:: xcms_fillpeaks_workflow.png

---------------------------------------------------

----------
Parameters
----------

| See the fillChromPeaks_manual_

.. _fillChromPeaks_manual: https://rdrr.io/bioc/xcms/man/fillChromPeaks.html

@HELP_XCMS_MANUAL@

@HELP_PEAKLIST@

------------
Output files
------------

xset.fillPeaks.RData : rdata.xcms.fillpeaks format

    | Rdata file that will be used in the **CAMERA.annotate** or **xcms.summary** step of the workflow.

@HELP_PEAKLIST_OUTPUT@


---------------------------------------------------

Changelog/News
--------------

**Version 3.0.0.0 - 08/03/2018**

- UPGRADE: upgrade the xcms version from 1.46.0 to 3.0.0. So refactoring of a lot of underlying codes and methods. Some parameters may have been renamed.

- UPDATE: since xcms 3.0.0, the selection of a method is no more needed (chrom or MSW). xcms will detect from the data the peak picking method used in findChromPeaks

- UPDATE: since xcms 3.0.0, new parameters are available: expandMz, expandRt and ppm


**Version 2.1.1 - 29/11/2017**

- BUGFIX: To avoid issues with accented letter in the parentFile tag of the mzXML files, we changed a hidden mechanim to LC_ALL=C


**Version 2.1.0 - 07/02/2017**

- IMPROVEMENT: change the management of the peaklist ids. The main ids remain the same as xcms generated. The export setiings now only add custom names in the variableMetadata tab (namecustom)

- IMPROVEMENT: xcms.fillpeaks can deal with merged individual data


**Version 2.0.8 - 22/12/2016**

- IMPROVEMENT: Add an option to export the peak list at this step without having to wait for CAMERA.annotate


**Version 2.0.7 - 06/07/2016**

- UPGRADE: upgrate the xcms version from 1.44.0 to 1.46.0


**Version 2.0.6 - 04/04/2016**

- TEST: refactoring to pass planemo test using conda dependencies


**Version 2.0.5 - 10/02/2016**

- BUGFIX: better management of errors. Datasets remained green although the process failed

- UPDATE: refactoring of internal management of inputs/outputs

- UPDATE: refactoring to feed the new report tool


**Version 2.0.2 - 02/06/2015**

- IMPROVEMENT: new datatype/dataset formats (rdata.xcms.raw, rdata.xcms.group, rdata.xcms.retcor ...) will facilitate the sequence of tools and so avoid incompatibility errors.

- IMPROVEMENT: parameter labels have changed to facilitate their reading.


    ]]></help>


    <expand macro="citation" />


</tool>
