diff galaxy/wrappers/DiffExprLimma.xml @ 0:f274c8d45613 draft

"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
author vandelj
date Fri, 26 Jun 2020 09:43:41 -0400
parents
children 9f2ddab68c9e
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/galaxy/wrappers/DiffExprLimma.xml	Fri Jun 26 09:43:41 2020 -0400
@@ -0,0 +1,616 @@
+<tool name="GIANT-Differential Expression with LIMMA" id="giant_limma_analysis" version="0.3.8">
+  <description>Use LIMMA to detect differentially expressed genes</description>
+  <requirements>
+    <requirement type="package" version="1.7.1">r-r.methodss3</requirement>
+    <requirement type="package" version="3.36.5">bioconductor-limma</requirement>
+    <requirement type="package" version="2.36.1">bioconductor-biomart</requirement>
+    <requirement type="package" version="3.0.0">r-ggplot2</requirement>
+    <requirement type="package" version="4.8.0">r-plotly</requirement>
+    <requirement type="package" version="1.3.1">r-stringr</requirement>
+    <requirement type="package" version="1.1_2">r-rcolorbrewer</requirement>
+    <requirement type="package" version="1.4.32">r-statmod</requirement>
+  </requirements>
+  <code file="../../src/LIMMA_options.py"/>
+  <stdio>
+    <regex match="Execution halted"
+           source="both"
+           level="fatal"
+           description="Execution halted, please contact tool developer or administrators." />
+    <regex match="Error in"
+           source="both"
+           level="fatal"
+           description="An error occured during R execution, please contact tool developer." />
+    <exit_code range="15" level="fatal" description="Error during formating scripts, see log file for more information." />
+    <exit_code range="10" level="fatal" description="Missing file during html report, see log file for more information." />
+    <exit_code range="1:9" level="fatal" description="Error in R execution, see log file for more information." />
+  </stdio>
+  <command>	<![CDATA[
+  bash $scriptPrepareTable;
+  ret_code=\$?;
+  if [ \$ret_code != 0 ]; then
+     exit \$ret_code;
+  fi;
+
+  cp '$__tool_directory__/../../src/LIMMA_options.py' ./LIMMA_options.py;
+  
+  #if $blockingSection.blockingConditional.addBlocking == "true":
+    python -c 'import LIMMA_options;LIMMA_options.replaceNamesBlockInFiles("$inputSection.inputData","./factorTable.csv","./blockingTable.csv","./expressionRenamed.csv","./factorTableRenamed.csv","./blockingTableRenamed.csv","./dictionnaryRenamed.csv")';
+  #else:
+    python -c 'import LIMMA_options;LIMMA_options.replaceNamesInFiles("$inputSection.inputData","./factorTable.csv","./expressionRenamed.csv","./factorTableRenamed.csv","./dictionnaryRenamed.csv")';
+  #end if
+
+
+  if [ -f ./dictionnaryRenamed.csv ]; then
+    printf "[INFO]Renaming is done\n" >> $log;
+    Rscript '$__tool_directory__/../../src/LIMMAscriptV4.R' -i 'expressionRenamed.csv' -l '$log' -o '$outputData' -z '$outputDfData' -f 'pdf'
+      -a 'factorTableRenamed.csv' -s 'sumSquareFtest' -g 'dictionnaryRenamed.csv'
+      #if $blockingSection.blockingConditional.addBlocking == "true":
+        -b 'blockingTableRenamed.csv'
+        -u $advSection.confoundingPolicy
+      #end if
+        -r '${contrastSection.factorSelection}'
+      #for $i, $s in enumerate( $contrastSection.contrastList )
+        -p '${s.groupName}'
+        -m '${s.firstGroupToCompare}'
+        -n '${s.secondGroupToCompare}'
+      #end for
+      #if $contrastSection.interactionSelection.interactionContrast == "true":
+        -c '$contrastSection.interactionSelection.controlSelection'
+      #end if
+        -t $plotSection.cutoffTh
+        -d $plotSection.FCthreshold
+      #if $plotSection.histogramToPlot:
+        -h 'Histograms'
+      #end if
+      #if $plotSection.volcanoToPlot:
+        -v 'Volcanos'
+      #end if
+      #if $plotSection.geneInformation.addGeneInfo:
+        -x '$plotSection.geneInformation.organismID'
+        -y '$plotSection.geneInformation.infoInRowType'
+      #end if
+    ;
+     ret_code=\$?;
+     if [ \$ret_code != 0 ]; then
+      exit \$ret_code;
+     else
+      bash $scriptTransfer;
+      ret_code=\$?;
+      if [ \$ret_code != 0 ]; then
+        exit \$ret_code;
+      fi 
+     fi;
+  else
+    printf "[ERROR]Error during renaming, factor information file should not contain special characters '*',':',',','|' in factor names and possible values\n" >> $log;
+    exit 15;
+  fi;
+  printf "[INFO]End of tool script" >> $log; 
+	]]>
+  </command>
+
+
+
+  <configfiles>
+    <configfile name="scriptPrepareTable">
+    <![CDATA[
+    awk -v fact="$contrastSection.factorSelection" 'BEGIN{OFS="";ORS="";FS="\t";split(fact,tab,",");for(i in tab)dico[tab[i]]=1} FNR==1{for(i=2;i<=NF;i++){if(\$i in dico)colToSelect[i]=1}} {print \$1;for(i in colToSelect)print "\t"\$i ; print "\n"}' $inputSection.conditionInformation > ./factorTable.csv;
+
+    if [ ! -e ./factorTable.csv ]; then
+      printf "[ERROR]factorTable.csv is missing" >> $log; 
+      exit 15
+    fi
+
+
+     #if $blockingSection.blockingConditional.addBlocking == "true":
+     awk -v fact="$blockingSection.blockingConditional.blockingToInclude" ' BEGIN{OFS="";ORS="";FS="\t";split(fact, facto, ",");for(i in facto)factors[facto[i]]=1} FNR==1{for(i=2;i<=NF;i++)if(\$i in factors)dico[i]=1} {print $1;for(factorID in dico)print "\t"\$factorID; print "\n"}'  $inputSection.conditionInformation > ./blockingTable.csv;
+
+      if [ ! -e ./blockingTable.csv ]; then
+        printf "[ERROR]blockingTable.csv is missing" >> $log; 
+        exit 15
+      fi
+
+     #end if
+     printf "[INFO]End of scriptPrepareTable\n" >> $log 
+    ]]>
+    </configfile>
+
+    <configfile name="scriptTableToHtml">
+<![CDATA[
+printf  "<!DOCTYPE html>
+<html>
+<head>
+<meta http-equiv=\"Content-type\" content=\"text/html; charset=utf-8\">
+<link rel=\"stylesheet\" type=\"text/css\" href=\"https://cdn.datatables.net/1.10.16/css/jquery.dataTables.min.css\">
+<script type=\"text/javascript\" language=\"javascript\" src=\"https://code.jquery.com/jquery-1.12.4.js\">
+</script>
+<script type=\"text/javascript\" language=\"javascript\" src=\"https://cdn.datatables.net/1.10.16/js/jquery.dataTables.min.js\">
+</script>
+<script type=\"text/javascript\" class=\"init\">
+\\$(document).ready(function() {
+  \\$(\'\#example\').DataTable( {
+        \"columnDefs\": [ {
+            \"visible\": false,
+            \"targets\": -1
+        } ]
+    } );
+} );
+</script>
+</head>
+<body style=\"background-color:white;\">
+<table id=\"example\" class=\"display\" cellspacing=\"0\">
+" > ${html_file.extra_files_path}/outputLIMMA.html
+
+printf "<colgroup>\n" >> ${html_file.extra_files_path}/outputLIMMA.html
+printf "<col span=\"2\" style=\"background-color:rgb(224,235,235)\">\n" >> ${html_file.extra_files_path}/outputLIMMA.html
+awk 'BEGIN{odd=1;FS="\t"} NR==1{for(i=3;i<=NF;i=i+5){if(odd==1){odd=0;printf "<col span=\"5\" style=\"background-color:rgb(224,238,255)\">\n"}else{odd=1;printf "<col span=\"5\" style=\"background-color:rgb(255,221,224)\">\n"}}}' $outputData >> ${html_file.extra_files_path}/outputLIMMA.html
+printf "</colgroup>\n" >> ${html_file.extra_files_path}/outputLIMMA.html
+
+
+printf "<thead>\n<tr>\n" >> ${html_file.extra_files_path}/outputLIMMA.html
+printf "<th rowspan=\"2\">Gene</th>\n" >> ${html_file.extra_files_path}/outputLIMMA.html
+printf "<th rowspan=\"2\">Info</th>\n" >> ${html_file.extra_files_path}/outputLIMMA.html
+awk 'BEGIN{FS="\t"} NR==1{for(i=3;i<=NF;i=i+5)printf "<th colspan=\"5\">"\$i"</th>\n"}' $outputData >> ${html_file.extra_files_path}/outputLIMMA.html
+printf "<th></th>\n" >> ${html_file.extra_files_path}/outputLIMMA.html
+printf "</tr>\n<tr>\n" >> ${html_file.extra_files_path}/outputLIMMA.html
+awk 'BEGIN{FS="\t"} NR==2{for(i=3;i<=NF;i++)printf "<th>"\$i"</th>\n"}' $outputData >> ${html_file.extra_files_path}/outputLIMMA.html
+printf "<th></th>\n" >> ${html_file.extra_files_path}/outputLIMMA.html
+printf "</tr>\n</thead>\n" >> ${html_file.extra_files_path}/outputLIMMA.html
+
+printf "<tfoot>\n<tr>\n" >> ${html_file.extra_files_path}/outputLIMMA.html
+awk 'BEGIN{FS="\t"} NR==2{for(i=1;i<=NF;i++)printf "<th>"\$i"</th>\n"}' $outputData >> ${html_file.extra_files_path}/outputLIMMA.html
+printf "<th></th>\n" >> ${html_file.extra_files_path}/outputLIMMA.html
+printf "</tr>\n</tfoot>\n">> ${html_file.extra_files_path}/outputLIMMA.html
+
+printf "<tbody>\n" >> ${html_file.extra_files_path}/outputLIMMA.html
+awk 'BEGIN{FS="\t"} NR>2{printf "<tr>\n";for(i=1;i<=NF;i++){printf "<th>"\$i"</th>\n"};printf "<th></th>\n";printf "</tr>\n"}' $outputData >> ${html_file.extra_files_path}/outputLIMMA.html
+printf "</tbody>\n" >> ${html_file.extra_files_path}/outputLIMMA.html
+
+printf "</table>
+</body>
+</html>" >> ${html_file.extra_files_path}/outputLIMMA.html
+
+]]>
+    </configfile>
+
+    <configfile name="scriptTransfer">
+<![CDATA[
+
+
+##for LIMMA output table
+
+mkdir -p $html_file.extra_files_path
+
+##create HTML file for limma output table
+source $scriptTableToHtml
+
+##check outputLIMMA.html is here
+if ! [ -e ${html_file.extra_files_path}/outputLIMMA.html ]; then
+  printf "[ERROR]outputLIMMA.html is missing" >> $log; 
+  exit 10
+fi
+
+##create header of main HTML file
+printf  "<!DOCTYPE html>\n<html>\n<body>"  > $html_file
+
+##first add reference of the LIMMA output table
+printf "<h3>LIMMA statistics (p.val, FC)</h3>\n" >> $html_file
+printf "<a href=\"outputLIMMA.html\">LIMMA results</a>\n"  >> $html_file
+
+
+
+#if $plotSection.histogramToPlot:
+
+printf "<h3>P-val histograms</h3>\n" >> $html_file
+
+##create folders in media
+counter=1
+for histogram in \$(ls ./plotLyDir/Histograms_*html)
+do
+histogramShort=\${histogram%\.*}
+histogramShort=\${histogramShort\#\#*/}
+
+conditionName=\${histogram%\.*}
+conditionName=\${conditionName\#\#*Histograms_}
+
+echo \$conditionName > ./temporaryConditionName
+conditionFormatedName=\$(awk 'BEGIN{FS="\t"} ARGIND==1{dico[\$1]=\$2} ARGIND==2{print dico[\$1]}' ./correspondanceFileNames.csv ./temporaryConditionName)
+
+##modify HTML to point to plotLy folder
+sed -i "s/\${histogramShort}_files/PlotLy_Histogram_scripts/g" \$histogram
+
+##copy HTML files in both folders
+cp \$histogram ${html_file.extra_files_path}/Histogram_\$conditionName.html
+
+##add HTML link
+printf "<p>\n<a href=\"Histogram_\$conditionName.html\">Histogram \$conditionFormatedName</a>\n</p>\n"  >> $html_file
+
+if [ \$counter = 1 ]; then
+#if $plotSection.imagePlotlyFormat=="svg":
+##before copying scripts folder modify them to replace png snapshot with svg (not proud of solution but seems to work)
+cd ./plotLyDir/\${histogramShort}_files/plotly-main-*/
+awk '{gsub("\"png\"","\"svg\"",\$0);print \$0}' ./plotly-latest.min.js > ./plotly-latest.minTemp.js
+awk '{gsub("Download plot as a png","Download plot as a svg",\$0);print \$0}' ./plotly-latest.minTemp.js > ./plotly-latest.min.js
+rm ./plotly-latest.minTemp.js
+cd ../../../
+#end if
+
+##now copy only scripts folder for the first histogram and rename
+cp -r ./plotLyDir/\${histogramShort}_files $html_file.extra_files_path
+mv ${html_file.extra_files_path}/\${histogramShort}_files ${html_file.extra_files_path}/PlotLy_Histogram_scripts
+fi
+
+((counter++))
+done
+
+if [ \$counter = 1 ]; then
+  printf "[ERROR]Histograms are missing" >> $log; 
+  exit 10
+fi
+
+#end if  
+
+
+if [ -e ./plotLyDir/sumSquareFtest.html ]; then
+
+printf "<h3>Source of variation</h3>\n" >> $html_file
+
+##modify HTML to point to the first script folder
+sed -i "s/sumSquareFtest_files/PlotLy_sumSquareFtest_scripts/g" ./plotLyDir/sumSquareFtest.html
+
+##copy HTML files in both folders
+cp ./plotLyDir/sumSquareFtest.html ${html_file.extra_files_path}/
+
+##add HTML link
+printf "<a href=\"sumSquareFtest.html\">F-ratio barplot</a>\n"  >> $html_file
+
+#if $plotSection.imagePlotlyFormat=="svg":
+##before copying scripts folder modify them to replace png snapshot with svg (not proud of solution but seems to work)
+cd ./plotLyDir/sumSquareFtest_files/plotly-main-*/
+awk '{gsub("\"png\"","\"svg\"",\$0);print \$0}' ./plotly-latest.min.js > ./plotly-latest.minTemp.js
+awk '{gsub("Download plot as a png","Download plot as a svg",\$0);print \$0}' ./plotly-latest.minTemp.js > ./plotly-latest.min.js
+rm ./plotly-latest.minTemp.js
+cd ../../../
+#end if
+
+##now copy scripts folder
+cp -r ./plotLyDir/sumSquareFtest_files $html_file.extra_files_path
+mv ${html_file.extra_files_path}/sumSquareFtest_files ${html_file.extra_files_path}/PlotLy_sumSquareFtest_scripts
+
+else
+  printf "[ERROR]sumSquareFtest plot is missing" >> $log; 
+  exit 10
+fi
+
+
+
+#if $plotSection.volcanoToPlot:
+
+printf "<h3>Volcanos</h3>\n" >> $html_file
+
+##create folders in media
+counter=1
+for volcano in \$(ls ./plotLyDir/Volcanos_*html)
+do
+volcanoShort=\${volcano%\.*}
+volcanoShort=\${volcanoShort\#\#*/}
+
+conditionName=\${volcano%\.*}
+conditionName=\${conditionName\#\#*Volcanos_}
+
+echo \$conditionName > ./temporaryConditionName
+conditionFormatedName=\$(awk 'BEGIN{FS="\t"} ARGIND==1{dico[\$1]=\$2} ARGIND==2{print dico[\$1]}' ./correspondanceFileNames.csv ./temporaryConditionName)
+
+
+##modify HTML to point to plotLy folder
+sed -i "s/\${volcanoShort}_files/PlotLy_Volcano_scripts/g" \$volcano
+
+##copy HTML files in both folders
+cp \$volcano ${html_file.extra_files_path}/Volcano_\$conditionName.html
+
+##add HTML link
+printf "<p>\n<a href=\"Volcano_\$conditionName.html\">Volcano \$conditionFormatedName</a>\n</p>\n"  >> $html_file
+
+if [ \$counter = 1 ]; then
+
+#if $plotSection.imagePlotlyFormat=="svg":
+##before copying scripts folder modify them to replace png snapshot with svg (not proud of solution but seems to work)
+cd ./plotLyDir/\${volcanoShort}_files/plotly-main-*/
+awk '{gsub("\"png\"","\"svg\"",\$0);print \$0}' ./plotly-latest.min.js > ./plotly-latest.minTemp.js
+awk '{gsub("Download plot as a png","Download plot as a svg",\$0);print \$0}' ./plotly-latest.minTemp.js > ./plotly-latest.min.js
+rm ./plotly-latest.minTemp.js
+cd ../../../
+#end if
+
+##now copy only scripts folder for the first volcano and rename
+cp -r ./plotLyDir/\${volcanoShort}_files $html_file.extra_files_path
+mv ${html_file.extra_files_path}/\${volcanoShort}_files ${html_file.extra_files_path}/PlotLy_Volcano_scripts
+fi
+
+((counter++))
+done
+
+if [ \$counter = 1 ]; then
+  printf "[ERROR]Volcano plots are missing" >> $log; 
+  exit 10
+fi
+
+#end if
+
+
+##create footer of HTML file
+printf  "</body>\n</html>" >> $html_file
+]]>
+    </configfile>
+  </configfiles>
+
+
+
+  <inputs>
+    <section name="inputSection" title="Input files" expanded="True">
+      <param type="text" name="title" value="LIMMA_toPersonalize" label="Title for output"/>
+
+      <param type="data" name="inputData" format="tabular" label="Normalized expression tabular file" optional="false" multiple="false" help="Expression data have to be log2 transformed."/>
+
+      <param type="data" name="conditionInformation" format="tabular" label="Factor information tabular file" optional="false" multiple="false">
+      </param>
+    </section>
+
+  <section name="contrastSection" title="Contrast definition" expanded="True">
+
+    <param name="factorSelection" type="select" label="Select all factors to include in the global model (excepting confounding factors)" refresh_on_change="true" display="checkboxes" optional="false" multiple="true" dynamic_options="get_column_names(inputSection['conditionInformation'].file_name)" help="Confounding factors are selected in the coresponding section below." />
+
+     <repeat name="contrastList" title="Contrast">
+        <param type="text" name="groupName" value="" label="Contrast name"/>
+
+        <param name="firstGroupToCompare" type="select" label="Select factor levels of 1st group" display="checkboxes" multiple="true" refresh_on_change="true" dynamic_options="get_row_names_allInteractions(inputSection['conditionInformation'].file_name,factorSelection)">
+        </param>
+
+        <param name="secondGroupToCompare" type="select" label="Select factor levels of 2nd group" display="checkboxes" multiple="true" refresh_on_change="true" dynamic_options="get_row_names_allInteractions(inputSection['conditionInformation'].file_name,factorSelection)">
+        </param>
+    </repeat>
+
+    <conditional name="interactionSelection">
+    <param name="interactionContrast" type="boolean" label="Add interaction contrasts" checked="false" help="If you have selected two factors at least."/>
+      <when value="true">
+         <param name="controlSelection" type="select" label="Select one control level for each factor (and only one)" display="checkboxes" multiple="true" refresh_on_change="true" dynamic_options="get_allrow_names(inputSection['conditionInformation'].file_name,factorSelection)">
+        </param>
+      </when>
+      <when value="false">
+      </when>
+    </conditional>
+
+  </section>
+
+
+
+  <section name="blockingSection" title="Paired analysis/confounding factor" expanded="True">
+    <conditional name="blockingConditional">
+     <param name="addBlocking" type="boolean" label="Add confounding factors" checked="false" help="To control factors producing spurious association as batch effects or to analyze paired data"/>
+      <when value="true">
+          <param name="blockingToInclude" type="select" label="Select confounding factors" multiple="true" dynamic_options="get_column_names(inputSection['conditionInformation'].file_name)">
+            <validator type="empty_field" message="You should select at least one factor"></validator>
+          </param>
+      </when>
+      <when value="false">
+      </when>
+    </conditional>
+  </section>
+
+	<section name="plotSection" title="Output section" expanded="True">
+    <param name="cutoffTh" type="float" value="0.05" label="Output FDR p-val threshold" >
+      <validator type="in_range" min="0" max="1" message="Threshold should be between 0 and 1"/>
+    </param>
+    <param name="FCthreshold" type="float" value="2" label="Output Fold Change threshold (both 'log2(threshold)' and 'log2(1/threshold)' values will be used)" >
+      <validator type="in_range" min="1" exclude_min="false" message="Threshold should be greater or equal to 1"/>
+    </param>
+		<param type="boolean" name="histogramToPlot" checked="true" label="Plot histograms" help="Plot nominal p-val distribution for each comparison.">
+	    </param>
+		<param type="boolean" name="volcanoToPlot" checked="true" label="Plot volcanos" help="Plot volcano for each comparison.">
+	    </param>
+
+    <conditional name="geneInformation">
+    <param name="addGeneInfo" type="boolean" label="Add gene/probe information" checked="false"/>
+      <when value="true">
+        <param name="organismID" label="Organism" type="select">
+          <options from_data_table="LimmaTool" >
+            <column name="name" index="1"/>
+            <column name="value" index="0"/>
+            <filter type="unique_value" column="0"/>
+          </options>
+        </param>
+        <param name="infoInRowType" label="Nature of row names" type="select">
+            <options from_data_table="LimmaTool" >
+              <column name="name" index="3"/>
+              <column name="value" index="2"/>
+              <filter type="param_value" ref="organismID" column="0"/>
+            </options>
+        </param>
+      </when>
+      <when value="false">
+      </when>
+    </conditional>
+
+    <param type="select" name="imagePlotlyFormat" display="radio" label="Html snapshot format">
+      <option value="png">PNG format</option>
+      <option value="svg">SVG format</option>
+    </param>
+	</section>
+
+    <section name="advSection" title="Advanced parameters" expanded="False">
+    <param type="select" name="confoundingPolicy" display="radio" label="Confounding effect policy" help="DO NOT modify this parameter unless you know what you are doing!">
+      <option value="additive">As an additive factor (default)</option>
+      <option value="correlated">As a correlation constraint</option>
+    </param>
+    </section>
+	
+  </inputs>
+
+
+
+  <outputs>
+    <data format="tabular" name="outputData" label="${inputSection.title}_LIMMAstatistics"/>
+
+    <data format="tabular" name="outputDfData" label="${inputSection.title}_LIMMAdetailed"/>
+	
+	<data format="html" name="html_file" label="${inputSection.title}_HTML.html"/>
+	<!--
+	<collection name="outputHistogramsList" label="${inputSection.title}_HistogramsList" type="list">
+	  <discover_datasets pattern="(?P&lt;designation&gt;Histograms[0-9]+)\.(?P&lt;ext&gt;[^\._]+)?" directory="plotDir" visible="false"/>
+	  <filter>plotSection['histogramToPlot']</filter>
+	</collection>
+	
+	<collection name="outputVolcanosList" label="${inputSection.title}_VolcanosList" type="list">
+	  <discover_datasets pattern="(?P&lt;designation&gt;Volcanos\_.*)\.(?P&lt;ext&gt;[^\._]+)?" directory="plotDir" visible="false"/>
+	  <filter>plotSection['volcanoToPlot']</filter>
+	</collection>
+
+  <data name="fRatioOutput" format="png" label="${inputSection.title}_F-ratio">
+        <change_format>
+            <when input="plotSection['imageFormat']" value="pdf" format="pdf" />
+        </change_format>
+  </data>
+	-->
+    <data format="txt" name="log" label="${inputSection.title}_Log" />
+  </outputs>
+
+
+  
+ <tests>
+  <test maxseconds="3600">
+    <param name="wfile" value="wiggle.wig" />
+    <param name="bfile" value="bedfile.bed" />
+    <param name="span" value="3000" />
+    <param name="pfres" value="50" />
+    <param name="lowersize" value="1000" />
+    <param name="middlesize" value="2000" />
+    <param name="uppersize" value="3000" />
+    <param name="lowerbisize" value="2500" />
+    <param name="upperbisize" value="5000" />
+    <param name="reldist" value="3000" />
+    <param name="genome" value="hg18" />
+    <param name="imagetype" value="PDF" />
+    <param name="enable" value="no" />
+    <output name="outputData" file="ceas_1/ceas_1.pdf" />
+    <output name="outputDfData" file="ceas_1/ceas_1.pdf" />
+  </test>
+</tests> 
+  <help>
+<![CDATA[
+**What it does ?**
+
+This tool compute differential expressions for a set of genes.
+This tool use the LIMMA function from R package limma. (only adapted for arrays data)
+
+-----
+
+**Parameters**
+
+\- **Input Files**
+
+- **Title** to personalize output file names (please avoid special characters).
+- **Normalized expression tabular file** with samples as columns and genes as rows (header contains sample names and first column gene identifiers). WARNING Expression data have to be already log2 transformed.
+
+    ::
+
+        Conditions  157_(HuGene-2_0-st).CEL 156_(HuGene-2_0-st).CEL  155_(HuGene-2_0-st).CEL    154_(HuGene-2_0-st).CEL                        
+        DDX11L2     4.500872                4.429759                 4.780281                   4.996189             
+        MIR1302-2   3.415065                3.520472                 3.471503                   3.567988           
+        OR4F5       3.737956                3.011586                 3.424494                   3.497545
+        VWA1        5.189621                5.129595                 4.806793                   5.227014
+
+- **Factor information tabular file** with factors as columns and samples as rows (header contains factor names and first column sample names).
+
+    ::
+
+        Conditions                Sex   Treatment Reaction
+        138_(HuGene-2_0-st).CEL   1     TreatA    Pos
+        148_(HuGene-2_0-st).CEL   0     NoTreat   Pos
+        139_(HuGene-2_0-st).CEL   0     TreatB    Neg
+        149_(HuGene-2_0-st).CEL   0     NoTreat   Neg
+
+\- **Contrast definition**
+
+- **Select all factors to include in the global model** : automatically extracted from factor information file. Confounding factors or paired-analysis information (replicates number,dates...) should not be selected here, but in specific section below.
+
+- **Contrast**
+
+    \- **Contrast Name** displayed in output file
+
+    \- **Select factor levels of 1st group** : the contrast will be computed with the formula "1st group versus 2nd group" so "1st group - 2nd group".
+
+    \- **Select factor levels of 2nd group** : see below for some examples
+
+    ::
+
+	Nb Factors	List of Factors 	Factor levels		Expected Contrast				Select as 1st gr		Select as 2nd gr
+	1		Strain			WT, KO			KO vs WT					KO			 	WT
+	2		Strain, Treatment	WT, KO, NoTreat,TreatA	TreatA vs NoTreat in WT mice			TreatA*WT			NoTreat*WT
+	2		Strain, Treatment	WT, KO, NoTreat,TreatA	Treatment effect on Strain dependent genes	See results of interaction contrast
+
+- **Add interaction contrasts** : to compute automatically each level of interaction
+
+    \- **Control groups** for each factor, select its level used as control. Thus interaction contrasts will be computed for each factor level regarding to this control level.
+
+\- **Paired analysis / confounding factors**
+
+- **Add confounding factors** which can define "blocks" in the data different from those selected previously in the global model. Typically confounding factors are linked to batch effect (dates...) or paired-analysis situation (replicates number...).
+
+\- **Output section**
+
+- **Output FDR p-val threshold**, only genes with FDR <= this threshold (in at least one of defined contrasts) are kept in tabular result file and displayed dynamically in volcano plot.
+
+- **Plot histograms** of unadjusted p-values for each defined contrast.
+
+- **Plot volcanos** for each defined contrast with specified FDR p-val and FC thresholds.
+
+- **Output Fold Change threshold** only genes with absolute FC >= this threshold (in at least one of defined contrast) are kept in tabular result file and displayed dynamically in volcano plot (both 'log2(threshold)' and 'log2(1/threshold)' values will be used).
+
+- **Add gene/probe information** : if yes, add description of genes to the result tab.
+
+  \- **Organism** coresponding to experimental data used.
+
+  \- **Nature of row names** coresponding to experimental data used in input.
+
+- **Html snapshot format** : for interactive plotly plots.
+
+\- **Advanced Parameters**
+
+- **Confounding effect policy** : DO NOT modify this parameter unless you know what you are doing! See Limma documentation for more information.
+
+-----
+
+**Outputs**
+
+- **LIMMA statistic tabular** is the main result file for LIMMA, represented as tab delimited matrix. First and second columns contain respectively gene names and information grabbed from BiomaRt R package. Then, the following colums contain differential expression statistics (p.val, FDR, FC, log2FC and t-statistic) for defined contrasts, for each gene (in rows).
+
+- **LIMMA detailed tabular** contains specific statistics required for additional analysis tools (eg SMAGEXP tool), represented as tab delimited matrix where each colum contains specific statistics (residual, eBayes prior and total degree of freedom) between groups for each gene (in rows).
+
+- **HTML file** to access interactive version of histograms, F-Ratio barplots and volcanos through PlotLy html pages and tabulated differential results.
+
+- **LOG file** for job log. If you see errors, please attached this in the bug report
+
+]]>  </help>
+
+
+ <citations>
+  <citation type="bibtex">@misc{vandel_jimmy_2018_1477870, author = {Vandel, J. and Gheeraert, C. and Eeckhoute, J. and Staels, B. and Lefebvre, P. and Dubois-Chevalier, J.}, title = {GIANT: Galaxy-based Interactive tools for ANalaysis of Transcriptomic data}, month = nov, year = 2018, doi = {10.5281/zenodo.1477870}, url = {https://doi.org/10.5281/zenodo.1477870}
+  }</citation>
+
+  <citation type="bibtex">@article{doi:10.1093/nar/gkv007,
+  author = {Ritchie, Matthew E. and Phipson, Belinda and Wu, Di and Hu, Yifang and Law, Charity W. and Shi, Wei and Smyth, Gordon K.},
+  title = {limma powers differential expression analyses for RNA-sequencing and microarray studies},
+  journal = {Nucleic Acids Research},
+  volume = {43},
+  number = {7},
+  pages = {e47},
+  year = {2015},
+  doi = {10.1093/nar/gkv007},
+  URL = {http://dx.doi.org/10.1093/nar/gkv007},
+  eprint = {/oup/backfile/content_public/journal/nar/43/7/10.1093_nar_gkv007/2/gkv007.pdf}
+  }</citation>
+
+  <citation type="bibtex">@online{plotly, author = {Plotly Technologies Inc.}, title = {Collaborative data science}, publisher = {Plotly Technologies Inc.}, address = {Montreal, QC}, year = {2015}, url = {https://plot.ly}
+  }</citation>
+ </citations>
+
+</tool>