<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<tool id="met4j_ExtractSubNetwork" name="ExtractSubNetwork" version="2.0.0">
  <description>Create a subnetwork from a metabolic network in SBML format, and two files containing lists of compounds of interests ids, one per row.</description>
  <xrefs>
    <xref type="bio.tools">met4j</xref>
  </xrefs>
  <requirements>
    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:2.0.0</container>
  </requirements>
  <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh networkAnalysis.ExtractSubNetwork -i "$inputPath"
 -s "$sourcePath"
 -t "$targetPath"
#if str($sideCompoundFile) != 'None':
 -sc "$sideCompoundFile"
#end if
 $degree
#if str($weightFile) != 'None':
 -cw "$weightFile"
#end if
 $chemicalSim
 $undirected
#if str($k):
 -k "$k"
#end if
 $st
#if str($format):
 -f "$format"
#end if
 -o "$output"
]]></command>
  <inputs>
    <param argument="-i" format="sbml" label="input SBML file" name="inputPath" optional="false" type="data" value=""/>
    <param argument="-s" format="txt" label="input sources txt file" name="sourcePath" optional="false" type="data" value=""/>
    <param argument="-t" format="txt" label="input targets txt file" name="targetPath" optional="false" type="data" value=""/>
    <param argument="-sc" format="txt" label="an optional file containing list of side compounds to ignore" name="sideCompoundFile" optional="true" type="data" value=""/>
    <param argument="-dw" checked="false" falsevalue="" label="penalize traversal of hubs by using degree square weighting" name="degree" truevalue="-dw" type="boolean" value="false"/>
    <param argument="-cw" format="tsv" label="an optional file containing weights for compound pairs" name="weightFile" optional="true" type="data" value=""/>
    <param argument="-sw" checked="false" falsevalue="" label="penalize traversal of non-relevant edges by using chemical similarity weighting" name="chemicalSim" truevalue="-sw" type="boolean" value="false"/>
    <param argument="-u" checked="false" falsevalue="" label="Ignore reaction direction" name="undirected" truevalue="-u" type="boolean" value="false"/>
    <param argument="-k" label="Extract k-shortest paths" name="k" optional="true" type="text" value="1">
      <sanitizer invalid_char="_">
        <valid initial="string.printable"/>
      </sanitizer>
    </param>
    <param argument="-st" checked="false" falsevalue="" label="Extract Steiner Tree" name="st" truevalue="-st" type="boolean" value="false"/>
    <param argument="-f" label="Format of the exported graphTabulated edge list by default (source id &#9; edge type &#9; target id). Other options include GML, JsonGraph, and tabulated node list (label &#9; node id &#9; node type)." name="format" optional="true" type="select" value="tab">
      <option value="gml">gml</option>
      <option selected="true" value="tab">tab</option>
      <option value="nodeList">nodeList</option>
      <option value="json">json</option>
      <option value="matrix">matrix</option>
    </param>
  </inputs>
  <outputs>
    <data format="txt" name="output"/>
  </outputs>
  <tests>
    <test>
      <param name="inputPath" value="toy_model.xml"/>
      <param name="sourcePath" value="seeds.txt"/>
      <param name="targetPath" value="targets.txt"/>
      <param name="format" value="gml"/>
      <output ftype="txt" name="output">
        <assert_contents>
          <has_line_matching expression=".*node.*" n="3"/>
          <has_line_matching expression=".*edge.*" n="2"/>
        </assert_contents>
      </output>
    </test>
  </tests>
  <help><![CDATA[Create a subnetwork from a metabolic network in SBML format, and two files containing lists of compounds of interests ids, one per row.
The subnetwork corresponds to the part of the network that connects compounds from the first list to compounds from the second list.
Sources and targets list can have elements in common. The connecting part can be defined as the union of shortest or k-shortest paths between sources and targets, or the Steiner tree connecting them. The relevance of considered path can be increased by weighting the edges using degree squared, chemical similarity (require InChI or SMILES annotations) or any provided weighting.
See previous works on subnetwork extraction for parameters recommendations.]]></help>
  <citations>
    <citation type="doi">10.1093/bib/bbv115</citation>
    <citation type="doi">10.1016/j.biosystems.2011.05.004</citation>
    <citation type="doi">10.1016/j.jmb.2005.09.079</citation>
    <citation type="doi">10.1093/bioinformatics/btu760</citation>
    <citation type="doi">10.1093/nar/gki437</citation>
    <citation type="doi">10.1093/bioinformatics/bti116</citation>
    <citation type="doi">10.1093/bioinformatics/btg217</citation>
  </citations>
</tool>
