<?xml version="1.0"?>
<macros>

    <token name="@WRAPPER_VERSION@">3.0.0</token>
    <xml name="requirements">
        <requirements>
            <requirement type="package" version="@WRAPPER_VERSION@">bioconductor-xcms</requirement>
            <requirement type="package" version="1.1_4">r-batch</requirement>
            <requirement type="package" version="1.1_2">r-rcolorbrewer</requirement>
            <requirement type="package" version="6.0">unzip</requirement>
            <yield />
        </requirements>
    </xml>

    <!-- FILE_LOAD for planemo test -->
    <token name="@COMMAND_FILE_LOAD@">
        #if $file_load_section.file_load_conditional.file_load_select == "yes":
            #if $file_load_section.file_load_conditional.input[0].is_of_type("mzxml") or $file_load_section.file_load_conditional.input[0].is_of_type("mzml") or $file_load_section.file_load_conditional.input[0].is_of_type("mzdata") or $file_load_section.file_load_conditional.input[0].is_of_type("netcdf"):
                #set singlefile_galaxyPath = '|'.join( [ str( $single_file ) for $single_file in $file_load_section.file_load_conditional.input ] )
                #set singlefile_sampleName = '|'.join( [ str( $single_file.name ) for $single_file in $file_load_section.file_load_conditional.input ] )

                singlefile_galaxyPath '$singlefile_galaxyPath' singlefile_sampleName '$singlefile_sampleName'
            #else
                zipfile '$file_load_section.file_load_conditional.input'
            #end if
        #end if
    </token>

    <xml name="input_file_load">
        <section name="file_load_section" title="Resubmit your raw dataset or your zip file">
            <conditional name="file_load_conditional">
                <param name="file_load_select" type="select" label="Resubmit your dataset or your zip file" help="Use only if you get a message saying that your original dataset or zip file have been deleted on the server." >
                    <option value="no" >no need</option>
                    <option value="yes" >yes</option>
                </param>
                <when value="no">
                </when>
                <when value="yes">
                    <param name="input" type="data" format="mzxml,mzml,mzdata,netcdf,no_unzip.zip,zip" multiple="true" label="File(s) from your history containing your chromatograms" help="Single file mode for the format: mzxml, mzml, mzdata and netcdf. Zip file mode for the format: no_unzip.zip, zip. See the help section below." />
                </when>
            </conditional>
        </section>
    </xml>

    <xml name="test_file_load_zip">
        <section name="file_load_section">
            <conditional name="file_load_conditional">
                <param name="file_load_select" value="yes" />
                <param name="input" value="faahKO_reduce.zip" ftype="zip" />
            </conditional>
        </section>
    </xml>

    <xml name="test_file_load_zip_sacuri">
        <section name="file_load_section">
            <conditional name="file_load_conditional">
                <param name="file_load_select" value="yes" />
                <param name="input" value="sacuri_dir_root.zip" ftype="zip" />
            </conditional>
        </section>
    </xml>

    <xml name="test_file_load_single">
        <section name="file_load_section">
            <conditional name="file_load_conditional">
                <param name="file_load_select" value="yes" />
                <param name="input" value="wt15.CDF,ko16.CDF,ko15.CDF,wt16.CDF" ftype="netcdf" />
            </conditional>
        </section>
    </xml>

    <xml name="test_file_load_single_ko15">
        <section name="file_load_section">
            <conditional name="file_load_conditional">
                <param name="file_load_select" value="yes" />
                <param name="input" value="ko15.CDF" ftype="netcdf" />
            </conditional>
        </section>
    </xml>

    <!-- PEAKLIST -->
    <token name="@COMMAND_PEAKLIST@">
        #if $peaklist.peaklistBool
            convertRTMinute $peaklist.convertRTMinute
            numDigitsMZ $peaklist.numDigitsMZ
            numDigitsRT $peaklist.numDigitsRT
            intval $peaklist.intval
            naTOzero $peaklist.naTOzero
        #end if
    </token>

    <xml name="input_peaklist">
              <param name="convertRTMinute" type="boolean" checked="false" truevalue="TRUE" falsevalue="FALSE" label="Convert retention time (seconds) into minutes" help="Convert the columns rtmed, rtmin and rtmax into minutes"/>
              <param name="numDigitsMZ" type="integer" value="4" label="Number of decimal places for mass values reported in ions' identifiers." help="A minimum of 4 decimal places is recommended. Useful to avoid duplicates within identifiers" />
              <param name="numDigitsRT" type="integer" value="0" label="Number of decimal places for retention time values reported in ions' identifiers." help="Useful to avoid duplicates within identifiers" />
              <param name="intval" type="select" label="Reported intensity values" help="[intval] See the help section below">
                  <option value="into" selected="true">into</option>
                  <option value="maxo">maxo</option>
                  <option value="intb">intb</option>
              </param>
              <param name="naTOzero" type="boolean" checked="true" truevalue="TRUE" falsevalue="FALSE" label="Replace the remain NA by 0 in the dataMatrix" help="Rather mandatory for some downstream statistical steps"/>
    </xml>

    <xml name="input_peaklist_section">
        <section name="peaklist" title="Peak List" expanded="True">
            <param name="peaklistBool" type="hidden" label="Get the Peak List" value="True" />
            <expand macro="input_peaklist"/>
        </section>
    </xml>

    <xml name="input_peaklist_conditional">
        <conditional name="peaklist">
            <param name="peaklistBool" type="boolean" label="Get the Peak List" />
            <when value="true">
              <expand macro="input_peaklist"/>
            </when>
            <when value="false" />
        </conditional>
    </xml>

    <xml name="output_peaklist"  token_function="">
        <data name="variableMetadata" format="tabular" label="${image.name[:-6]}.@FUNCTION@.variableMetadata.tsv" from_work_dir="variableMetadata.tsv" >
            <filter>(peaklist['peaklistBool'])</filter>
        </data>
        <data name="dataMatrix" format="tabular" label="${image.name[:-6]}.@FUNCTION@.dataMatrix.tsv" from_work_dir="dataMatrix.tsv" >
            <filter>(peaklist['peaklistBool'])</filter>
        </data>
    </xml>

    <token name="@HELP_PEAKLIST@">

Get a Peak List
---------------

If 'true', the module generates two additional files corresponding to the peak list:
- the variable metadata file (corresponding to information about extracted ions such as mass or retention time)
- the data matrix (corresponding to related intensities)

**decimal places for [mass or retention time] values in identifiers**

    | Ions' identifiers are constructed as MxxxTyyy where 'xxx' is the ion median mass and 'yyy' the ion median retention time.
    | Two parameters are used to adjust the number of decimal places wanted in identifiers for mass and retention time respectively.
    | Theses parameters do not affect decimal places in columns other than the identifier one.

**Reported intensity values**

    | This parameter determines which values should be reported as intensities in the dataMatrix table; it correspond to xcms 'intval' parameter:
    | - into: integrated area of original (raw) peak
    | - maxo: maximum intensity of original (raw) peak
    | - intb: baseline corrected integrated peak area (only available if peak detection was done by ‘findPeaks.centWave’)

    </token>

    <token name="@HELP_PEAKLIST_OUTPUT@">
xset.variableMetadata.tsv : tabular format

    | Table containing information about ions; can be used as one input of **Quality_Metrics** or **Generic_filter** modules.

xset.dataMatrix.tsv : tabular format

    | Table containing ions' intensities; can be used as one input of **Quality_Metrics** or **Generic_filter** modules.
    </token>

    <!-- CENTWAVE -->
    <token name="@COMMAND_CENTWAVE@">
            ppm $methods.ppm
            peakwidth "c($methods.peakwidth)"

            ## Advanced
            snthresh $methods.CentWaveAdv.snthresh
            prefilter "c($methods.CentWaveAdv.prefilter)"
            mzCenterFun $methods.CentWaveAdv.mzCenterFun
            integrate $methods.CentWaveAdv.integrate
            mzdiff $methods.CentWaveAdv.mzdiff
            fitgauss $methods.CentWaveAdv.fitgauss
            noise $methods.CentWaveAdv.noise
            verboseColumns $methods.CentWaveAdv.verboseColumns
    </token>

    <xml name="input_centwave">
        <param argument="ppm" type="integer" value="25" label="Max tolerated ppm m/z deviation in consecutive scans in ppm" help="for the initial ROI definition." />
        <param argument="peakwidth" type="text" value="20,50" label="Min,Max peak width in seconds" help="with the expected approximate peak width in chromatographic space.">
            <expand macro="input_validator_range_float"/>
        </param>
    </xml>

    <xml name="input_centwaveAdv">
        <param argument="snthresh" type="integer" value="10" label="Signal to Noise ratio cutoff" />
        <param argument="prefilter" type="text" value="3,100" label="Prefilter step for for the first analysis step (ROI detection)" help="Separate by coma k, I. Mass traces are only retained if they contain at least ‘k‘ peaks with intensity ‘>= I‘.">
            <expand macro="input_validator_range_integer"/>
        </param>
        <param argument="mzCenterFun" type="select" label="Name of the function to calculate the m/z center of the chromatographic peak" >
            <option value="wMean">intensity weighted mean of the peak's m/z values</option>
            <option value="mean">mean of the peak's m/z values</option>
            <option value="apex">use the m/z value at the peak apex</option>
            <option value="wMeanApex3">ntensity weighted mean of the m/z value at the peak apex and the m/z values left and right of it</option>
            <option value="meanApex3">mean of the m/z value of the peak apex and the m/z values left and right of it</option>
        </param>
        <param argument="integrate" type="select" label="Integration method" >
            <option value="1">peak limits are found through descent on the mexican hat filtered data (more robust, but less exact)</option>
            <option value="2">peak limits based on real data (more accurate but prone to noise)</option>
        </param>
        <param argument="mzdiff" type="float" value="-0.001" label="Minimum difference in m/z for peaks with overlapping retention times" help="can be negative to allow overlap" />
        <param argument="fitgauss" type="boolean" checked="false" truevalue="TRUE" falsevalue="FALSE" label="fitgauss" help="whether or not a Gaussian should be fitted to each peak" />
        <param argument="noise" type="integer" value="0" label="Noise filter" help="allowing to set a minimum intensity required for centroids to be considered in the first analysis step (centroids with intensity lower than ‘noise’ are omitted from ROI detection)." />
        <param argument="verboseColumns" type="boolean" checked="false" truevalue="TRUE" falsevalue="FALSE" label="verbose Columns" help="whether additional peak meta data columns should be returned" />
    </xml>

    <token name="@COMMAND_CENTWAVEADVROI@">
            #if $sectionROI.roiList:
                roiList '$sectionROI.roiList'
                firstBaselineCheck $sectionROI.firstBaselineCheck
                #if $sectionROI.roiScales != "":
                    roiScales "c($sectionROI.roiScales)"
                #end if
            #end if
    </token>

    <xml name="input_centwaveAdvROI" token_optional="true">
        <param argument="roiList" type="data" format="tabular" optional="@OPTIONAL@" label="List of regions-of-interest (ROI) representing detected mass traces" help="If ROIs are submitted the first analysis step is omitted and chromatographic peak detection is performed on the submitted ROIs. Each ROI is expected to have the following elements specified: ‘scmin’ (start scan index), ‘scmax’ (end scan index), ‘mzmin’ (minimum m/z), ‘mzmax’ (maximum m/z), ‘length’ (number of scans), ‘intensity’ (summed intensity)." />
        <param argument="firstBaselineCheck" type="boolean" checked="true" truevalue="TRUE" falsevalue="FALSE" label="Is continuous data within regions of interest is checked to be above the first baseline." />
        <param argument="roiScales" type="text" value="" optional="true" label="Numeric vector defining the scale for each region of interest in ‘roiList’" help="Length equal to ‘roiList’ - Should be used for the centWave-wavelets (format 0.9,1,0.2)">
            <expand macro="input_validator_range_float"/>
        </param>
    </xml>

    <!-- MISC -->
    <token name="@HELP_AUTHORS@">
.. class:: infomark

**Authors**  Colin A. Smith csmith@scripps.edu, Ralf Tautenhahn rtautenh@gmail.com, Steffen Neumann sneumann@ipb-halle.de, Paul Benton hpaul.benton08@imperial.ac.uk and Christopher Conley cjconley@ucdavis.edu

@HELP_AUTHORS_WRAPPERS@

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

    </token>

    <token name="@HELP_XCMS_MANUAL@">

For details and explanations concerning all the parameters and workflow of xcms_ package, see its manual_ and this example_

.. _xcms: https://bioconductor.org/packages/release/bioc/html/xcms.html
.. _manual: http://www.bioconductor.org/packages/release/bioc/manuals/xcms/man/xcms.pdf
.. _example: https://bioconductor.org/packages/release/bioc/vignettes/xcms/inst/doc/xcms.html

    </token>

    <xml name="citation">
        <citations>
            <citation type="doi">10.1021/ac051437y</citation>
            <expand macro="citation_w4m"/>
        </citations>
    </xml>
</macros>
