view maxquant.xml @ 5:7f432d87c82c draft

"planemo upload for repository https://github.com/galaxyproteomics/tools-galaxyp/tree/master/tools/maxquant commit dad20a951ffa71a4b98fd851e496b50cd423e0a3"
author galaxyp
date Wed, 15 Apr 2020 11:17:42 -0400
parents dcd39bcc7481
children 2133b0be850a
line wrap: on
line source

<tool id="maxquant" name="MaxQuant" version="@VERSION@">
    <macros>
        <xml name="output" token_format="tabular" token_label="default description" token_name="default">
            <data format="@FORMAT@" label="@LABEL@ for ${on_string}" name="@NAME@">
                <filter>'@NAME@' in output_opts['output']</filter>
            </data>
        </xml>
        <xml name="output_from_wdir" token_ext="txt" token_format="tabular" token_label="default description" token_name="default">
            <data format="@FORMAT@" from_work_dir="combined/txt/@NAME@.@EXT@" label="@LABEL@ for ${on_string}" name="@NAME@">
                <filter>'@NAME@' in output_opts['output']</filter>
            </data>
        </xml>
        <import>macros.xml</import>
    </macros>
    <expand macro="requirements"/>
    <command detect_errors="exit_code"><![CDATA[
    #import re
    maxquant -c mqpar.xml 2>/dev/null  ## MQ writes success of creation to stderr
    #if 'config' in $output_opts.output:
      &&
      cp '$mq_conf' '$config'
    #end if
    #set infiles = [$name for $pg in $paramGroups for $name in $pg.files]
    #set names = [re.sub('@SUBSTITUTION_RX@', '_', str($n.element_identifier)) for $n in $infiles]
    #set names_with_ext = [($name if ($name).lower().endswith(str($input_opts.ftype)) else $name + str($input_opts.ftype)) for $name in $names]
    #for $target, $link in zip($infiles, $names_with_ext)
        &&
        ln -s '$target' '$link'
    #end for
    &&
    python3 '$__tool_directory__/create_mqpar.py'
    #if $search_opts.template
        --exp_design='$search_opts.template'
    #end if
    --version=@VERSION@ 
    --num_threads=\${GALAXY_SLOTS:-1}
    --substitution_rx='@SUBSTITUTION_RX@'
    --yaml='$mq_conf'
    mqpar.xml

    #if $output_opts.dry_run:
      &&
      mkdir -p combined/txt
      &&
      mv mqpar.xml combined/txt/mqpar.xml
    #else:
      && 
      maxquant mqpar.xml
      #if 'log' in $output_opts.output:
          > '$log'
      #end if
      &&
      mv mqpar.xml combined/txt/mqpar.xml
      #if 'output_all' in $output_opts.output:
          &&
          tar -zcf '$output_all' ./combined/txt
      #end if
      
      #if $qc.do_it:
        &&
        Rscript '$qr' '$qr_yaml'
          #if 'log' in $output_opts.output:
              >> '$log' 2>&1
          #end if
        &&
        cp ./combined/txt/report_v0.92.6_combined.pdf '$ptxqc_report'
      #end if
    #end if
    ]]></command>

    <configfiles>
        <configfile name="mq_conf">
            #import re
            fastaFiles: [${input_opts.fasta_files}]
            parseRules:
              identifierParseRule: '${input_opts.identifier_parse_rule}'
              descriptionParseRule: '${input_opts.description_parse_rule}'
            minUniquePeptides: ${search_opts.min_unique_pep}
            minPepLen: ${search_opts.min_peptide_len}
            maxPeptideMass: ${search_opts.max_peptide_mass}
            calcPeakProperties: ${search_opts.calc_peak_properties}
            #set writeMzTab = "mzTab" in $output_opts.output
            writeMzTab: $writeMzTab
            #if $lfq_opts.do_ibaq.ibaq == 'True':
            ibaq: ${lfq_opts.do_ibaq.ibaq}
            ibaqLogFit: ${lfq_opts.do_ibaq.ibaqLogFit}
            #end if
            separateLfq: ${lfq_opts.separateLfq}
            lfqStabilizeLargeRatios: ${lfq_opts.lfqStabilizeLargeRatios}
            lfqRequireMsms: ${lfq_opts.lfqRequireMsms}
            advancedSiteIntensities: ${lfq_opts.advancedSiteIntensities}
            matchBetweenRuns: ${search_opts.match_between_runs}
            paramGroups:
            #for $pg in $paramGroups:
              #set names = [re.sub('@SUBSTITUTION_RX@', '_', str($n.element_identifier)) for $n in $pg.files]
              #set names_with_ext = [($name if ($name).lower().endswith(str($input_opts.ftype)) else $name + str($input_opts.ftype)) for $name in $names]
              - files: $names_with_ext
                maxMissedCleavages: ${pg.maxMissedCleavages}
                #if $pg.fixedModifications:
                fixedModifications: [${pg.fixedModifications}]
                #else:
                fixedModifications: []
                #end if
                #if $pg.variableModifications:
                variableModifications: [${pg.variableModifications}]
                #else:
                variableModifications: []
                #end if
                #if $pg.enzymes:
                enzymes: [${pg.enzymes}]
                #else:
                enzymes: []
                #end if
                #if $pg.quant_method.select_quant_method == 'silac':
                labelMods:
                  #if $pg.quant_method.light_labels:
                  - [${pg.quant_method.light_labels}]
                  #else:
                  - []
                  #end if
                  #if $pg.quant_method.medium_labels:
                  - [${pg.quant_method.medium_labels}]
                  #else:
                  - []
                  #end if
                  #if $pg.quant_method.heavy_labels:
                  - [${pg.quant_method.heavy_labels}]
                  #else:
                  - []
                  #end if
                #end if
                #if $pg.quant_method.select_quant_method == 'lfq':
                lfqMode: 1
                lfqSkipNorm: ${pg.quant_method.lfqSkipNorm}
                lfqMinEdgesPerNode: ${pg.quant_method.lfqMinEdgesPerNode}
                lfqAvEdgesPerNode: ${pg.quant_method.lfqAvEdgesPerNode}
                lfqMinRatioCount: ${pg.quant_method.lfqMinRatioCount}
                #end if
                #if $pg.quant_method.select_quant_method == 'reporter_ion_ms2':
                lcmsRunType: 'Reporter ion MS2'
                reporterMassTolerance: 0.003
                reporterPif: 0
                reporterFraction: 0
                reporterBasePeakRatio: 0
                isobaricLabels:
                  #if $pg.quant_method.iso_labels.labeling == 'custom':
                    #for $l in $pg.quant_method.iso_labels.iso_label:
                      - ['$l.internallabel','$l.terminallabel',$l.cm2,$l.cm1,$l.cp1,$l.cp2,$l.tmtlike]
                    #end for
                  #end if
                  #if $pg.quant_method.iso_labels.labeling == 'tmt2plex':
                    - [TMT2plex-Lys126,TMT2plex-Nter126,0,0,0,0,True]
                    - [TMT2plex-Lys127,TMT2plex-Nter127,0,0,0,0,True]
                  #end if
                  #if $pg.quant_method.iso_labels.labeling == 'tmt6plex':
                    - [TMT6plex-Lys126,TMT6plex-Nter126,0,0,0,0,True]
                    - [TMT6plex-Lys127,TMT6plex-Nter127,0,0,0,0,True]
                    - [TMT6plex-Lys128,TMT6plex-Nter128,0,0,0,0,True]
                    - [TMT6plex-Lys129,TMT6plex-Nter129,0,0,0,0,True]
                    - [TMT6plex-Lys130,TMT6plex-Nter130,0,0,0,0,True]
                    - [TMT6plex-Lys131,TMT6plex-Nter131,0,0,0,0,True]
                  #end if
                  #if $pg.quant_method.iso_labels.labeling == 'tmt8plex':
                    - [TMT8plex-Lys126C,TMT8plex-Nter126C,0,0,0,0,True]
                    - [TMT8plex-Lys127N,TMT8plex-Nter127N,0,0,0,0,True]
                    - [TMT8plex-Lys127C,TMT8plex-Nter127C,0,0,0,0,True]
                    - [TMT8plex-Lys128C,TMT8plex-Nter128C,0,0,0,0,True]
                    - [TMT8plex-Lys129N,TMT8plex-Nter129N,0,0,0,0,True]
                    - [TMT8plex-Lys129C,TMT8plex-Nter129C,0,0,0,0,True]
                    - [TMT8plex-Lys130C,TMT8plex-Nter130C,0,0,0,0,True]
                    - [TMT8plex-Lys131N,TMT8plex-Nter131N,0,0,0,0,True]
                  #end if
                  #if $pg.quant_method.iso_labels.labeling == 'tmt10plex':
                    @TMT10PLEX@
                  #end if
                  #if $pg.quant_method.iso_labels.labeling == 'tmt11plex':
                    @TMT10PLEX@
                    - [TMT11plex-Lys131C,TMT11plex-Nter131C,0,0,0,0,True]
                  #end if
                  #if $pg.quant_method.iso_labels.labeling == 'itraq4plex':
                    - [iTRAQ4plex-Lys114,iTRAQ4plex-Nter114,0,0,0,0,False]
                    - [iTRAQ4plex-Lys115,iTRAQ4plex-Nter115,0,0,0,0,False]
                    - [iTRAQ4plex-Lys116,iTRAQ4plex-Nter116,0,0,0,0,False]
                    - [iTRAQ4plex-Lys117,iTRAQ4plex-Nter117,0,0,0,0,False]
                  #end if
                  #if $pg.quant_method.iso_labels.labeling == 'itraq8plex':
                    - [iTRAQ4plex-Lys113,iTRAQ8plex-Nter113,0,0,0,0,False]
                    - [iTRAQ4plex-Lys114,iTRAQ8plex-Nter114,0,0,0,0,False]
                    - [iTRAQ4plex-Lys115,iTRAQ8plex-Nter115,0,0,0,0,False]
                    - [iTRAQ4plex-Lys116,iTRAQ8plex-Nter116,0,0,0,0,False]
                    - [iTRAQ4plex-Lys117,iTRAQ8plex-Nter117,0,0,0,0,False]
                    - [iTRAQ4plex-Lys118,iTRAQ8plex-Nter118,0,0,0,0,False]
                    - [iTRAQ4plex-Lys119,iTRAQ8plex-Nter119,0,0,0,0,False]
                    - [iTRAQ4plex-Lys121,iTRAQ8plex-Nter121,0,0,0,0,False]
                  #end if
                  #if $pg.quant_method.iso_labels.labeling == 'iodotmt6plex':
                    - [iodoTMT6plex-Cys126,'',0,0,0,0,True]
                    - [iodoTMT6plex-Cys127,'',0,0,0,0,True]
                    - [iodoTMT6plex-Cys128,'',0,0,0,0,True]
                    - [iodoTMT6plex-Cys129,'',0,0,0,0,True]
                    - [iodoTMT6plex-Cys130,'',0,0,0,0,True]
                    - [iodoTMT6plex-Cys131,'',0,0,0,0,True]
                  #end if
                #end if  
            #end for
        </configfile>
        <expand macro="ptxqc"/>
    </configfiles>

    <inputs>
        <section name="input_opts" title="Input Options" expanded="True">
            <param name="ftype" type="select" label="choose the type of your input files">
                <option value=".thermo.raw">thermo.raw</option>
                <option value=".mzxml">mzxml</option>
                <option value=".mzml">mzml</option>
            </param>
            <param format="fasta" multiple="true" name="fasta_files"
                   type="data" label="FASTA files"
                   help="Specify one or more FASTA databases." />
            <param name="identifier_parse_rule" type="text"
                   label="identifier parse rule" value="^&gt;.*\|(.*)\|.*$">
                <sanitizer>
                    <valid initial="string.printable">
                        <remove value="&apos;"/>
                    </valid>
                </sanitizer>
            </param>
            <param name="description_parse_rule" type="text"
                   label="description parse rule" value="^&gt;.*\|.*\|[^ ]+ (.*) OS.*$"
                   help="Modify parse rules if needed.">
                <sanitizer>
                    <valid initial="string.printable">
                        <remove value="&apos;"/>
                    </valid>
                </sanitizer>
            </param>
        </section>

        <section name="search_opts" title="Search Options" expanded="true">
            <param format="tabular" name="template" type="data" optional="true"
                   label="Specify an experimental design template (if needed). For detailed
                          instructions see the help text." />
            <param type="integer" name="min_peptide_len"
	           label="minimum peptide length" value="7"
                help="Peptides shorter than this value will not be reported nor be considered during protein identification and quantification 
short peptides are usually not unique in the protein database and therefore not statistically informative."/>
            <param type="integer" name="max_peptide_mass"
	           label="maximum peptide mass [Da]" value="4600"
        help="Peptides that are heavier than this mass will be discarded in the Andromeda search."/>
            <param type="integer" name="min_unique_pep"
	           label="minimum unique peptides" value="0" 
        help="The minimum number of unique peptides a protein group should have to be considered as identified and reported in the final table." />
            <param name="calc_peak_properties" type="boolean" checked="false"
	           label="Calculate peak properties"
	           truevalue="True" falsevalue="False" 
        help="If checked, several quantities characterizing peaks and isotopes patterns are calculated. This may lead to a substantial increase in computation time."/>
            <param name="match_between_runs" type="boolean" checked="false"
	           label="Match between runs"
	           truevalue="True" falsevalue="False" 
        help="Identifications are transferred to non-sequenced or non-identified MS features in other LC-MS runs."/>
        </section>
        
        <repeat name="paramGroups" title="Parameter Group" min="1" default="1">
            <param type="data" format="thermo.raw,mzXML,mzML" name="files" label="Infiles" multiple="true"
                   help="Only select infiles matching the filetype specified in the input options."/>
            <param type="integer" name="maxMissedCleavages"
	           label="missed cleavages" value="2"
         help="The number of missed cleavages that are maximally tolerated in the in-silico digestion of the protien sequences."/>
            <param name="fixedModifications" type="select" label="fixed modifications"
	           multiple="true" help="Select zero or more fixed modifications. They will always be attached to any occurence of the respective amino acid.">
	        <expand macro="modification"/>
                <expand macro="default_mod_option" value="Carbamidomethyl (C)"/>
            </param>
            <param name="variableModifications" type="select" label="variable modifications"
	           multiple="true" help="Select zero or more variable modifications. Do not specify label modifications here, neither ms1 level labels, like SILAC, nor isobaric labels.">
                <expand macro="default_mod_option" value="Oxidation (M)"/>
                <expand macro="default_mod_option" value="Acetyl (Protein N-term)"/>
	        <expand macro="modification"/>
            </param>
            <param name="enzymes" type="select" label="enzyme"
	           multiple="true" help="Select zero or more enzymes. The enzymes used for generating the in silico peptides for the Andromeda search.">
                <expand macro="default_mod_option" value="Trypsin/P"/>
	        <expand macro="proteases"/>
            </param>
            <conditional name="quant_method">
                <param name="select_quant_method" type="select" label="Quantitation Methods"
                       help="Select a method if needed.">
                    <option value="">None</option>
                    <option value="lfq">label free quantification</option>
                    <option value="silac">label based quantification</option>
                    <option value="reporter_ion_ms2">reporter ion MS2</option>
                </param>
                <when value=""/>
                <when value="silac">
	            <param name="light_labels" type="select" label="light labels"
		           multiple="true" help="Select zero or more light modifications.">
	                <expand macro="label"/>
	            </param>
	            <param name="medium_labels" type="select" label="medium labels"
		           multiple="true" help="Select zero modifications if you have two labels. Select a medium modification if you have three labels.">
	                <expand macro="label"/>
	            </param>
	            <param name="heavy_labels" type="select" label="heavy labels"
		           multiple="true" help="Select zero or more heavy modifications.">
	                <expand macro="label"/>
	            </param>
                </when>
                <when value="lfq">
		    <param type="integer" name="lfqMinRatioCount"
		           label="LFQ minimum ratio count" value="2"
                   help="Minimum number of peptides that has to be available in pair-wise comparisons between two samples for a protein."/>
		    <param type="integer" name="lfqMinEdgesPerNode"
			   label="LFQ minimum number of neighbours" value="3"
               help="Defines the network to normalize the samples in the fast LFQ mode."/>
		    <param type="integer" name="lfqAvEdgesPerNode"
			   label="LFQ average number of neighbours" value="6"
               help="Defines the network to normalize the samples in the fast LFQ mode."/>
		    <param type="boolean" name="lfqSkipNorm" checked="true"
			   label="Skip normalization"
			   truevalue="True" falsevalue="False" 
               help="If checked the high-speed version of MaxLFQ is used. This is recommended for large numbers of samples (Experiments). For less than 10 samples the original MaxLFQ normalization algorithm is used."/>
                </when>
                <when value="reporter_ion_ms2">
                    <conditional name="iso_labels">
                        <param name="labeling" type="select" label="isobaric labeling"
                               help="Select one of the standard labelings (correction factors are zero) or create a custom labeling.">
                            <option value="custom">custom</option>
                            <option value="tmt2plex">TMT2plex</option>
                            <option value="tmt6plex">TMT6plex</option>
                            <option value="tmt8plex">TMT8plex</option>
                            <option value="tmt10plex">TMT10plex</option>
                            <option value="tmt11plex">TMT11plex</option>
                            <option value="itraq4plex">iTRAQ4plex</option>
                            <option value="itraq8plex">iTRAQ8plex</option>
                            <option value="iodotmt6plex">iodoTMT6plex</option>
                        </param>
                        <when value="tmt2plex"></when>
                        <when value="tmt6plex"></when>
                        <when value="tmt8plex"></when>
                        <when value="tmt10plex"></when>
                        <when value="tmt11plex"></when>
                        <when value="itraq4plex"></when>
                        <when value="itraq8plex"></when>
                        <when value="iodotmt6plex"></when>
                        <when value="custom">
                            <repeat name="iso_label" title="Isobaric Label" min="1" default="1">
                                <param name="internallabel" type="select" label="internal label" help="contains Lys">
	                            <expand macro="iso_labels"/>
	                        </param>
                                <param name="terminallabel" type="select" label="terminal label" help="contains Nter">
                                    <option value="">None</option>
	                            <expand macro="iso_labels"/>
	                        </param>
                                <param name="cm2" type="float" label="correction factor -2%" value="0.0"/>
                                <param name="cm1" type="float" label="correction factor -1%" value="0.0"/>
                                <param name="cp1" type="float" label="correction factor +1%" value="0.0"/>
                                <param name="cp2" type="float" label="correction factor +2%" value="0.0"/>
		                <param type="boolean" name="tmtlike" checked="false"
			               label="TMT-like"
			               truevalue="True" falsevalue="False" />
                            </repeat>
                        </when>
                    </conditional>
                </when>
            </conditional>
        </repeat>

        <section title="LFQ Options" name="lfq_opts" expanded="false">
	    <param name="separateLfq" type="boolean" checked="false"
		   label="Separate LFQ in parameter Groups"
		   truevalue="True" falsevalue="False" 
           help="The MaxLFQ algorithm will be applied independently to samples in different parameter groups."/>
	    <param name="lfqStabilizeLargeRatios" type="boolean" checked="true"
		   label="Stabilize large LFQ ratios"
		   truevalue="True" falsevalue="False" 
           help="Large protein ratios will get an admixture of the total protein intensity ratio as described in the MaxLFQ paper"/>
	    <param name="lfqRequireMsms" type="boolean" checked="true"
		   label="Require MS/MS for LFQ comparisons"
		   truevalue="True" falsevalue="False" 
           help="Requires for each pari-wise peptide intensity comparison that at least one of two peptides has been identified by MS/MS"/>
	    <conditional name="do_ibaq">
                <param name="ibaq" type="select" label="iBAQ (calculates absolute protein abundances by normalizing to copy number and not protein mass)">
                    <option value="False">No</option>
                    <option value="True">Yes</option>
		</param>
                <when value="True">
                    <param name="ibaqLogFit" type="boolean" checked="true"
                           label="Logarithmic fit"
                           truevalue="True" falsevalue="False" />
                </when>
                <when value="False">
                </when>
	    </conditional>
	    <param name="advancedSiteIntensities" type="boolean" checked="true"
		   label="Advanced site intensities"
		   truevalue="True" falsevalue="False" />
        </section>

        <expand macro="ptxqc-opts"/>
        <section title="Output Options" name="output_opts" expanded="true">
            <param name="dry_run" type="boolean" checked="false"
	           label="Only create config files? (i.e. for testing)"
	           truevalue="True" falsevalue="" />            
            <param type="select" name="output" label="Select the desired outputs."
                   multiple="true" optional="false">
                <option value="proteinGroups">Protein Groups</option>
                <option value="mqpar">mqpar.xml</option>
                <option value="peptides">Peptides</option>
                <option value="evidence">Evidence</option>
                <option value="parameters">Tabular Paramters</option>
                <option value="msms">MSMS</option>
                <option value="mzTab">mzTab</option>
                <option value="allPeptides">all peptides</option>
                <option value="libraryMatch">library match</option>
                <option value="matchedFeatures">matched features</option>
                <option value="modificationSpecificPeptides">modification specific peptides</option>
                <option value="ms3Scans">ms3 scans</option>
                <option value="msmsScans">msms scans</option>
                <option value="mzRange">mz range</option>
                <option value="peptideSection">peptide section</option>
                <option value="summary">summary</option>
                <option value="output_all">complete 'combined/txt/' directory (compressed)</option>
                <option value="log">MaxQuant and PTXQC log</option>
                <option value="config">yaml config file</option>
            </param>
        </section>
    </inputs>
    
    <expand macro="outputs"/>

    <tests>
        <!-- functional test with small mzXML file, no quantitation methods -->
        <test expect_num_outputs="15">
            <param name="ftype" value=".mzxml" />
            <param name="fasta_files" value="bsa.fasta" />
            <param name="identifier_parse_rule" value="&gt;([^\s]*)" />
            <param name="description_parse_rule" value="&gt;(.*)" />
            <repeat name="paramGroups">
                <param name="files" value="BSA_min_23.mzXML"/>
                <param name="maxMissedCleavages" value="1"/>
                <param name="fixedModifications" value="Carbamidomethyl (C)" />
                <param name="variableModifications" value="Oxidation (M)" />
                <param name="enzymes" value="Trypsin/P" />
            </repeat>
            <param name="output" value="evidence,msms,allPeptides,msmsScans,mzTab,mzRange,parameters,peptides,peptideSection,proteinGroups,summary,modificationSpecificPeptides,output_all,config,mqpar" />
            <output name="mqpar" file="01/mqpar.xml" lines_diff="6"/>
            <output name="evidence" file="01/combined/txt/evidence.txt" />
            <output name="msms" file="01/combined/txt/msms.txt" />
            <output name="mzTab" file="01/combined/txt/mzTab.mzTab" lines_diff="4"/>
            <output name="allPeptides" file="01/combined/txt/allPeptides.txt" lines_diff="4"/>
            <output name="msmsScans" file="01/combined/txt/msmsScans.txt" lines_diff="8"/>
            <output name="mzRange" file="01/combined/txt/mzRange.txt" />
            <output name="parameters" file="01/combined/txt/parameters.txt" lines_diff="10"/>
            <output name="peptides" file="01/combined/txt/peptides.txt" />
            <output name="peptideSection" file="01/combined/txt/peptideSection.txt" />
            <output name="proteinGroups" file="01/combined/txt/proteinGroups.txt" />
            <output name="summary" file="01/combined/txt/summary.txt" />
            <output name="modificationSpecificPeptides" file="01/combined/txt/modificationSpecificPeptides.txt" />
            <output name="config" file="01/config.yml" lines_diff="2"/>
        </test>
        <!-- reporter ion ms2 + multiple param groups, testing yaml conf file and mqpar.xml only -->
        <test expect_num_outputs="3">
            <param name="ftype" value=".mzxml" />
            <param name="fasta_files" value="bsa.fasta" />
            <param name="identifier_parse_rule" value="&gt;([^\s]*)" />
            <param name="description_parse_rule" value="&gt;(.*)" />
            <repeat name="paramGroups">
                <param name="files" value="BSA_min_23.mzXML"/>
                <param name="variableModifications" value="Oxidation (M)" />
                <param name="fixedModifications" value="" />
                <conditional name="quant_method">
                    <param name="select_quant_method" value="reporter_ion_ms2" />
                    <conditional name="iso_labels">
                        <param name="labeling" value="custom" />
                        <repeat name="iso_label">
                            <param name="internallabel" value="TMT2plex-Lys126" />
                            <param name="terminallabel" value="TMT2plex-Nter126" />
                            <param name="tmtlike" value="True" />
                            <param name="cp1" value="6.7" />
                            <param name="cp2" value="3" />
                        </repeat>
                        <repeat name="iso_label">
                            <param name="internallabel" value="TMT2plex-Lys127" />
                            <param name="terminallabel" value="TMT2plex-Nter127" />
                            <param name="tmtlike" value="True" />
                        </repeat>
                    </conditional>
                </conditional>
            </repeat>
            <repeat name="paramGroups">
                <param name="files" value="BSA_min_22"/>
                <param name="variableModifications" value="" />
                <param name="fixedModifications" value="" />
                <param name="enzymes" value="" />
                <conditional name="quant_method">
                    <param name="select_quant_method" value="reporter_ion_ms2" />
                    <conditional name="iso_labels">
                        <param name="labeling" value="itraq4plex" />
                    </conditional>
                </conditional>
            </repeat>
            <param name="dry_run" value="True" />
            <param name="output" value="config,mqpar,mzTab" />
            <output name="config" file="02/config.yml" lines_diff="2" />
            <!-- high difference due to unconsistant xml formatting in MQ -->
            <output name="mqpar" file="02/mqpar.xml" lines_diff="24" />
        </test>
        <!-- lfq, testing yaml conf file and mqpar.xml only -->
        <test expect_num_outputs="2">
            <param name="ftype" value=".mzxml" />
            <param name="fasta_files" value="bsa.fasta" />
            <param name="min_unique_pep" value="1" />
            <param name="ibaq" value="True" />
            <param name="ibaqLogFit" value="False" />
            <repeat name="paramGroups">
                <param name="files" value="BSA_min_22"/>
                <param name="maxMissedCleavages" value="1"/>
                <param name="variableModifications" value="Oxidation (M)" />
                <conditional name="quant_method">
                    <param name="select_quant_method" value="lfq" />
                </conditional>
            </repeat>
            <param name="dry_run" value="True" />
            <param name="output" value="config,mqpar" />
            <output name="config" file="03/config.yml" lines_diff="2" />
            <output name="mqpar" file="03/mqpar.xml" lines_diff="10" />
        </test>
        <!-- silac + fractions with experimental design template, testing yaml conf file and mqpar.xml only -->
        <test expect_num_outputs="2">
            <param name="ftype" value=".mzxml" />
            <param name="fasta_files" value="bsa.fasta" />
            <param name="identifier_parse_rule" value="&gt;([^\s]*)" />
            <param name="description_parse_rule" value="&gt;(.*)" />
            <param name="template" value="04/exp_design" />
            <repeat name="paramGroups">
                <param name="files" value="BSA_min_23.mzXML,BSA_min_22"/>
                <param name="fixedModifications" value="Carbamidomethyl (C)" />
                <param name="variableModifications" value="Oxidation (M)" />
                <param name="enzymes" value="Trypsin/P" />
                <conditional name="quant_method">
                    <param name="select_quant_method" value="silac" />
                    <param name="light_labels" value="Arg6,Lys4" />
                    <param name="heavy_labels" value="Arg10,DimethLys8" />
                </conditional>
            </repeat>
            <param name="dry_run" value="True" />
            <param name="output" value="config,mqpar" />
            <output name="config" file="04/config.yml" lines_diff="2" />
            <output name="mqpar" file="04/mqpar.xml" lines_diff="12" />
        </test>
    </tests>

    <help><![CDATA[
MaxQuant is a quantitative proteomics software package designed for analyzing large mass-spectrometric data sets. 

This tool is a wrapper for MaxQuant v@VERSION@. The current version of the wrapper only supports a reduced set of parameters, but another version of the tool that gets its parameters directly from a mqpar.xml file is available, too.

**Input files**

- Thermo raw, mzML, mzXMLfiles (in parameter group section)

    - The datatype of all files has to be either 'thermo.raw', 'mzML' or 'mzXML'. Make sure to specify the correct datatype either during upload to Galaxy or afterwards (edit attributes --> datatypes)
- Fasta file: specify parse rules accordingly, default rules are compatible with uniprot
- Optional files:

    - Tabular file with experimental design template:

        - Currently four columns are needed: Name, Fraction, Experiment and PTM. The headers must have this exact naming. Name and Experiment are abitrary strings, Fraction is an integer or emtpy, PTM is either 'True', 'False' or empty. Consider you uploaded files named File1.mzxml, ..., File5.mzxml. This is a (syntactically) correct experimental design template:

                ::

                    Name     Fraction    Experiment   PTM
                    File1        1          E1       False
                    File2        2          E1       False
                    ghost       234        none
                    File3        3          E1       False
                    File4                   E2       True
                    File5                   E1

        - This is the counter-example with one error per line:

                ::

                    Name     Fraction    Experiment   PTM
                    File1       1           E1        no  (wrong PTM value)
                    File2.mzxml 1           E2            (filename with extension)
                    File3       f3          E1            (fraction not an integer)
                    File4       1                         (missing experiment)
                                                          (File5 missing)

**Parameter Options**

- Quantitation methods (in section parameter groups)

    - label free (LFQ): Protein intensity will be reported as 'LFQ intensity' columns in the proteinGroups table
    - label based: quantifies MS1 labelled samples ('SILAC', 'Dimethyl', 'ICAT', 'ICPL', 'mTRAQ', '18 O')

        - for two channels: choose options from light and heavy sections
        - for three channels: choose options from light, medium and heavy sections
    - reporter ion ms2: quantifies conventional isobaric labelling samples. Either use the pre-defined labellings with correction factors set to 0 or specify a custom labelling
- PTXQC quality control: quality control software creates an automatic quality control pdf report 


**Output files**

Different output file options are available, most of them are part of the MaxQuant txt directory. 
    ]]></help>
    <expand macro="citations"/>
</tool>