Repository 'met4j'
hg clone https://toolshed.g2.bx.psu.edu/repos/metexplore/met4j

Changeset 6:7a6f2380fc1d (2023-05-17)
Previous changeset 5:35c9abcd8934 (2023-01-12) Next changeset 7:1436e9cde9c9 (2023-07-04)
Commit message:
planemo upload for repository https://forgemia.inra.fr/metexplore/met4j-galaxy
modified:
Dockerfile
HowTo.md
tools/attributes/DecomposeSBML/DecomposeSBML.xml
tools/attributes/ExtractPathways/ExtractPathways.xml
tools/attributes/ExtractSbmlAnnot/ExtractSbmlAnnot.xml
tools/attributes/GetGenesFromReactions/GetGenesFromReactions.xml
tools/attributes/GetReactantsFromReactions/GetReactantsFromReactions.xml
tools/attributes/SbmlSetChargesFromFile/SbmlSetChargesFromFile.xml
tools/attributes/SbmlSetEcsFromFile/SbmlSetEcsFromFile.xml
tools/attributes/SbmlSetFormulasFromFile/SbmlSetFormulasFromFile.xml
tools/attributes/SbmlSetGprsFromFile/SbmlSetGprsFromFile.xml
tools/attributes/SbmlSetIdsFromFile/SbmlSetIdsFromFile.xml
tools/attributes/SbmlSetNamesFromFile/SbmlSetNamesFromFile.xml
tools/attributes/SbmlSetPathwaysFromFile/SbmlSetPathwaysFromFile.xml
tools/attributes/SbmlSetRefsFromFile/SbmlSetRefsFromFile.xml
tools/attributes/SbmlToMetaboliteTable/SbmlToMetaboliteTable.xml
tools/bigg/GetModelProteome/GetModelProteome.xml
tools/convert/FbcToNotes/FbcToNotes.xml
tools/convert/Kegg2Sbml/Kegg2Sbml.xml
tools/convert/Sbml2Graph/Sbml2Graph.xml
tools/convert/Sbml2Tab/Sbml2Tab.xml
tools/convert/Tab2Sbml/Tab2Sbml.xml
tools/mapping/NameMatcher/NameMatcher.xml
tools/met4j.yml
tools/networkAnalysis/CarbonSkeletonNet/CarbonSkeletonNet.xml
tools/networkAnalysis/ChemSimilarityWeighting/ChemSimilarityWeighting.xml
tools/networkAnalysis/ChokePoint/ChokePoint.xml
tools/networkAnalysis/CompoundNet/CompoundNet.xml
tools/networkAnalysis/DegreeWeighting/DegreeWeighting.xml
tools/networkAnalysis/DistanceMatrix/DistanceMatrix.xml
tools/networkAnalysis/ExtractSubBipNetwork/ExtractSubBipNetwork.xml
tools/networkAnalysis/ExtractSubNetwork/ExtractSubNetwork.xml
tools/networkAnalysis/ExtractSubReactionNetwork/ExtractSubReactionNetwork.xml
tools/networkAnalysis/LoadPoint/LoadPoint.xml
tools/networkAnalysis/MetaboRank/MetaboRank.xml
tools/networkAnalysis/NetworkSummary/NetworkSummary.xml
tools/networkAnalysis/PrecursorNetwork/PrecursorNetwork.xml
tools/networkAnalysis/ScopeNetwork/ScopeNetwork.xml
tools/networkAnalysis/SeedsAndTargets/SeedsAndTargets.xml
tools/networkAnalysis/SideCompoundsScan/SideCompoundsScan.xml
tools/reconstruction/SbmlCheckBalance/SbmlCheckBalance.xml
tools/tool_conf.xml
added:
build.sh
build/tools/BipartiteDistanceMatrix/BipartiteDistanceMatrix.xml
build/tools/CarbonSkeletonNet/CarbonSkeletonNet.xml
build/tools/CarbonSkeletonNet/test-data/Human-GEM_pathways-transitions.tab
build/tools/CarbonSkeletonNet/test-data/Human-GEM_pathways-transitions2.tab
build/tools/CarbonSkeletonNet/test-data/Human-GEM_pathways.xml
build/tools/ChemSimilarityWeighting/ChemSimilarityWeighting.xml
build/tools/ChokePoint/ChokePoint.xml
build/tools/ChokePoint/test-data/XF_network.sbml
build/tools/ChokePoint/test-data/sides.txt
build/tools/ChokePoint/test-data/testChoke.tsv
build/tools/CompoundNet/CompoundNet.xml
build/tools/CompoundNet/test-data/XF_network.sbml
build/tools/CompoundNet/test-data/XF_network_C_Side.tab
build/tools/DecomposeSBML/DecomposeSBML.xml
build/tools/DecomposeSBML/test-data/Human-GEM_pathways.xml
build/tools/DegreeWeighting/DegreeWeighting.xml
build/tools/DistanceMatrix/DistanceMatrix.xml
build/tools/DistanceMatrix/test-data/sides.txt
build/tools/DistanceMatrix/test-data/toy_model.xml
build/tools/DistanceMatrix/test-data/weights.tsv
build/tools/ExtractPathways/ExtractPathways.xml
build/tools/ExtractPathways/test-data/XF_network.sbml
build/tools/ExtractSbmlAnnot/ExtractSbmlAnnot.xml
build/tools/ExtractSbmlAnnot/test-data/Human-GEM_pathways.xml
build/tools/ExtractSubBipNetwork/ExtractSubBipNetwork.xml
build/tools/ExtractSubBipNetwork/test-data/sc.txt
build/tools/ExtractSubBipNetwork/test-data/seeds.txt
build/tools/ExtractSubBipNetwork/test-data/targets.txt
build/tools/ExtractSubBipNetwork/test-data/test.gml
build/tools/ExtractSubBipNetwork/test-data/toy_model.xml
build/tools/ExtractSubNetwork/ExtractSubNetwork.xml
build/tools/ExtractSubNetwork/test-data/seeds.txt
build/tools/ExtractSubNetwork/test-data/targets.txt
build/tools/ExtractSubNetwork/test-data/toy_model.xml
build/tools/ExtractSubReactionNetwork/ExtractSubReactionNetwork.xml
build/tools/ExtractSubReactionNetwork/test-data/seeds.txt
build/tools/ExtractSubReactionNetwork/test-data/sides.txt
build/tools/ExtractSubReactionNetwork/test-data/targets.txt
build/tools/ExtractSubReactionNetwork/test-data/toy_model.xml
build/tools/FbcToNotes/FbcToNotes.xml
build/tools/FbcToNotes/test-data/ECOL.xml
build/tools/FbcToNotes/test-data/buc.xml
build/tools/GetGenesFromReactions/GetGenesFromReactions.xml
build/tools/GetGenesFromReactions/test-data/XF_network.sbml
build/tools/GetGenesFromReactions/test-data/XF_network_R_Seed.tab
build/tools/GetGenesFromReactions/test-data/jsbml.log
build/tools/GetModelProteome/GetModelProteome.xml
build/tools/GetModelProteome/proteome.fas
build/tools/GetReactantsFromReactions/GetReactantsFromReactions.xml
build/tools/GetReactantsFromReactions/test-data/XF_network.sbml
build/tools/GetReactantsFromReactions/test-data/XF_network_R_Seed.tab
build/tools/GetReactantsFromReactions/test-data/jsbml.log
build/tools/Kegg2Sbml/Kegg2Sbml.xml
build/tools/LoadPoint/LoadPoint.xml
build/tools/LoadPoint/test-data/toy_model.xml
build/tools/MetaboRank/MetaboRank.xml
build/tools/MetaboRank/test-data/edgeWeights.tsv
build/tools/MetaboRank/test-data/toy_model.xml
build/tools/MetaboRank/test-data/weights.txt
build/tools/NameMatcher/NameMatcher.xml
build/tools/NetworkSummary/NetworkSummary.xml
build/tools/NetworkSummary/test-data/toy_model.xml
build/tools/PathwayNet/PathwayNet.xml
build/tools/PrecursorNetwork/PrecursorNetwork.xml
build/tools/PrecursorNetwork/test-data/sides.txt
build/tools/PrecursorNetwork/test-data/targets.txt
build/tools/PrecursorNetwork/test-data/toy_model.xml
build/tools/Sbml2Graph/Sbml2Graph.xml
build/tools/Sbml2Graph/test-data/toy_model.xml
build/tools/Sbml2Tab/Sbml2Tab.xml
build/tools/Sbml2Tab/test-data/toy_model.xml
build/tools/SbmlCheckBalance/SbmlCheckBalance.xml
build/tools/SbmlSetChargesFromFile/SbmlSetChargesFromFile.xml
build/tools/SbmlSetChargesFromFile/test-data/XF_network.sbml
build/tools/SbmlSetChargesFromFile/test-data/charges.tsv
build/tools/SbmlSetChargesFromFile/test-data/chargesDifferentColumns.tsv
build/tools/SbmlSetChargesFromFile/test-data/chargesWithComment.tsv
build/tools/SbmlSetChargesFromFile/test-data/chargesXF.tsv
build/tools/SbmlSetChargesFromFile/test-data/toy_model.xml
build/tools/SbmlSetEcsFromFile/SbmlSetEcsFromFile.xml
build/tools/SbmlSetEcsFromFile/test-data/ec.tsv
build/tools/SbmlSetEcsFromFile/test-data/ecBad.tsv
build/tools/SbmlSetEcsFromFile/test-data/toy_model.xml
build/tools/SbmlSetFormulasFromFile/SbmlSetFormulasFromFile.xml
build/tools/SbmlSetFormulasFromFile/test-data/formula.tsv
build/tools/SbmlSetFormulasFromFile/test-data/formulaBad.tsv
build/tools/SbmlSetFormulasFromFile/test-data/toy_model.xml
build/tools/SbmlSetGprsFromFile/SbmlSetGprsFromFile.xml
build/tools/SbmlSetGprsFromFile/test-data/gpr.tsv
build/tools/SbmlSetGprsFromFile/test-data/gprBad.tsv
build/tools/SbmlSetGprsFromFile/test-data/toy_model.xml
build/tools/SbmlSetIdsFromFile/SbmlSetIdsFromFile.xml
build/tools/SbmlSetIdsFromFile/test-data/XF_network.sbml
build/tools/SbmlSetIdsFromFile/test-data/idCompartments.tsv
build/tools/SbmlSetIdsFromFile/test-data/idGenes.tsv
build/tools/SbmlSetIdsFromFile/test-data/idMetabolites.tsv
build/tools/SbmlSetIdsFromFile/test-data/idPathways.tsv
build/tools/SbmlSetIdsFromFile/test-data/idReactions.tsv
build/tools/SbmlSetIdsFromFile/test-data/toy_model.xml
build/tools/SbmlSetNamesFromFile/SbmlSetNamesFromFile.xml
build/tools/SbmlSetNamesFromFile/test-data/XF_network.sbml
build/tools/SbmlSetNamesFromFile/test-data/namesGenes.tsv
build/tools/SbmlSetNamesFromFile/test-data/namesMetabolites.tsv
build/tools/SbmlSetNamesFromFile/test-data/namesPathways.tsv
build/tools/SbmlSetNamesFromFile/test-data/namesReactions.tsv
build/tools/SbmlSetNamesFromFile/test-data/toy_model.xml
build/tools/SbmlSetPathwaysFromFile/SbmlSetPathwaysFromFile.xml
build/tools/SbmlSetPathwaysFromFile/test-data/pathways.tsv
build/tools/SbmlSetPathwaysFromFile/test-data/pathwaysOtherSep.tsv
build/tools/SbmlSetPathwaysFromFile/test-data/toy_model.xml
build/tools/SbmlSetRefsFromFile/SbmlSetRefsFromFile.xml
build/tools/SbmlSetRefsFromFile/test-data/refs.tsv
build/tools/SbmlSetRefsFromFile/test-data/toy_model.xml
build/tools/SbmlToMetaboliteTable/SbmlToMetaboliteTable.xml
build/tools/SbmlToMetaboliteTable/test-data/tests.tsv
build/tools/SbmlToMetaboliteTable/test-data/toy_model.xml
build/tools/ScopeNetwork/ScopeNetwork.xml
build/tools/ScopeNetwork/test-data/seeds.txt
build/tools/ScopeNetwork/test-data/sides.txt
build/tools/ScopeNetwork/test-data/toy_model.xml
build/tools/SeedsAndTargets/SeedsAndTargets.xml
build/tools/SeedsAndTargets/test-data/XF_network.sbml
build/tools/SideCompoundsScan/SideCompoundsScan.xml
build/tools/SideCompoundsScan/test-data/XF_network.sbml
build/tools/SideCompoundsScan/test.tsv
build/tools/Tab2Sbml/Tab2Sbml.xml
build/tools/Tab2Sbml/test-data/toy_model.tsv
build/tools/Tab2Sbml/test-data/toy_model_otherColumns.tsv
build/tools/Tab2Sbml/test-data/toy_model_otherSigns.tsv
findToolsWithoutTests.py
tests.html
tools/networkAnalysis/BipartiteDistanceMatrix/BipartiteDistanceMatrix.xml
tools/networkAnalysis/PathwayNet/PathwayNet.xml
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d Dockerfile
--- a/Dockerfile Thu Jan 12 13:45:13 2023 +0000
+++ b/Dockerfile Wed May 17 13:26:37 2023 +0000
b
@@ -1,5 +1,5 @@
 
-FROM python:3.8-buster
+FROM python:3.10-buster
 
 # set author
 MAINTAINER Ludovic Cottret <ludovic.cottret@inrae.fr>
@@ -44,7 +44,6 @@
     &&  . "$PLANEMO_VENV_LOCATION"/bin/activate                                                                \
     &&  pip install --upgrade pip setuptools                                                                   \
     &&  pip install planemo numpy                                                                              \
-    &&  planemo conda_init --conda_prefix "$CONDA"                                                             \
     &&  apt-get clean autoclean                                                                                \
     &&  apt-get autoremove --yes                                                                               \
     &&  rm -rf /var/lib/{apt,dpkg,cache,log}/                                                                  \
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d HowTo.md
--- a/HowTo.md Thu Jan 12 13:45:13 2023 +0000
+++ b/HowTo.md Wed May 17 13:26:37 2023 +0000
[
@@ -3,8 +3,10 @@
 ## Install planemo
 
 ```console
-virtualenv --python=/usr/bin/python3.8 .venv;
-source .venv/bin/activate
+pip install virtualenv
+python -m virtualenv planemo
+. planemo/bin/activate
+pip install --upgrade pip setuptools  
 pip install planemo
 ```
 
@@ -14,93 +16,96 @@
 
 ## Create new wrappers
 
-1. Create a branch (e.g. newFeature) (or a new release) in met4j and develop your apps
-2. Push the branch
-3. If this branch is not master or develop, launch manually the 
+- Create a branch (e.g. newFeature) (or a new release) in met4j and develop your apps
+- Push the branch
+- If this branch is not master or develop, launch manually the 
 building of the singularity image in the met4j CI-CD (this singularity image will be downloaded by the galaxy instance)
-4. Create a branch with the same name in met4j-galaxy (e.g. newFeature)
-5. Use the GenerateGalaxyFiles of the met4j-toolbox (be careful, it must be the version of the new branch) to generate the wrappers for the new met4j apps. Or you can use the singularity image created in the third step.
+- Create a branch with the same name in met4j-galaxy (e.g. newFeature)
+- Use the GenerateGalaxyFiles of the met4j-toolbox (be careful, it must be the version of the new branch) to generate the wrappers for the new met4j apps. Or you can use the singularity image created in the third step.
 
 ```console
 met4j-toolbox.sif GenerateGalaxyFiles \
- -o /path/to/met4j-galaxy/tools \
- -v newFeature
-
+ -o /path/to/met4j-galaxy/tools
 ```
 
-Where newFeature is the name of the new branch.
+## Write tests
 
-6. Edit manually the wrappers where the tests are lacking.
+- Edit manually the wrappers where the tests are lacking.
 
 [Here](https://docs.galaxyproject.org/en/latest/dev/schema.html#tool-tests) is the documentation about tests in galaxy
 
 Put the test files in a test-data directory in the tool directory.
 If the file is used in several tests, put it in the data directory at the root of the project and create a symbolic link in the test-data directory.
 
-7. Check the syntax of the wrappers
+## Check the syntax of the wrappers
 
 ```console
-source .venv/bin/activate
+. planemo/bin/activate
 planemo shed_lint --tools \
 --ensure_metadata \
---urls \
 --report_level warn \
 --fail_level error \
 --recursive tools
 ```
 
-8. Launch the tests
+## Find apps without tests
+
+```console
+python ./findToolsWithoutTests.py build/tools/
+```
+
+## Launch the tests
+
+### Build with a version number
+
+To test your apps, you need to fill the good version of met4j singularity in each xml wrapper. For this, use this command:
+
+```bash
+./build.sh $versionNumber
+```
+
+Where $versionNumber must correspond to the version of the met4j singularity instance created above.
+
+### Launch the tests on the built instance
 
 Launching all the tests can be very time consuming. 
 
 You can launch the test for one tool (here convert.Sbml2Graph):
 
 ```console
-source .venv/bin/activate
+. planemo/bin/activate
 planemo test \
---galaxy_source https://github.com/galaxyproject/galaxy \
---galaxy_branch release_22.01 \
 --job_config_file config/job_conf.xml \
-tools/convert/Sbml2Graph/
-```
-
-or for an entire package (here convert):
-
-```console
-source .venv/bin/activate
-planemo test \
---galaxy_source https://github.com/galaxyproject/galaxy \
---galaxy_branch release_22.01 \
---job_config_file config/job_conf.xml \
-tools/convert/Sbml2Graph/
+build/tools/Sbml2Graph/
 ```
 
 If you want to test all the tools:
 
 ```console
-source .venv/bin/activate
+. planemo/bin/activate
 planemo test \
---galaxy_source https://github.com/galaxyproject/galaxy \
---galaxy_branch release_22.01 \
---job_config_file config/job_conf.xml
+--job_config_file config/job_conf.xml \
+build/tools/*
 ```
 
 The results of the tests can be read in tool_test_output.html.
 
-9. If all the tests are ok, merge the new met4j branch in develop
-10. Create a new met4j release and finish the release: it will create a new singularity image for this version
-11. Launch once again GenerateGalaxyFiles
+## Create new release
+
+When tests are ok, you can create a new met4j release. The CI will create a new Singularity image corresponding to this version.
+
+Create a new met4j-galaxy release with the same version number as met4j. After push, the CI will test again the apps. If it's ok, a new version of met4j-galaxy will be pushed on the galaxy toolshed. The instance in usegalaxy.fr will be updated the next monday.
+
+## Update met4j-galaxy-runner
 
-```console
-met4j-toolbox.sif GenerateGalaxyFiles \
- -o /path/to/met4j-galaxy/tools \
- -v 1.1.1
+Docker image to run planemo on ci.
+
+Creation du docker pour lancer galaxy et planemo :
+
+```bash
+sudo docker login
+sudo docker build -t metexplore/met4j-galaxy-runner:latest .
+sudo docker push metexplore/met4j-galaxy-runner:latest
 ```
 
-where 1.1.1 is the number of the new release
-
-12. In met4j-galaxy, launch planemo lint to check if there is app without test and if everything is ok
-13. Test all the tools 
-14. Merge on develop, create a new release, and push
-
-This will test again all the tools on the gitlab CI/CD. If it's ok, a new version of met4j-galaxy will be pushed on the galaxy toolshed. The instance in usegalaxy.fr will be updated the next monday.
\ No newline at end of file
+<https://hub.docker.com/r/metexplore/met4j-galaxy-runner>
\ No newline at end of file
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build.sh
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build.sh Wed May 17 13:26:37 2023 +0000
[
@@ -0,0 +1,28 @@
+#!/bin/bash
+
+# Check if an argument has been provided for the replacement value
+if [ -z "$1" ]; then
+  echo "Usage: $0 version_number"
+  exit 1
+fi
+
+rm -rf build
+
+mkdir -p build/tools
+
+cp -RL tools/*/* build/tools
+
+# cp -RL data build
+
+cp .shed.yml build
+
+# Get the replacement value from the first argument
+# Replace all the "/" by "_"
+replacement_value=$(echo "$1" | sed 's/\//_/g')
+
+# Find all XML files containing the text "MET4J_VERSION_TEST"
+find "build/tools" -type f -name "*.xml" -exec grep -l "MET4J_VERSION_TEST" {} \; | while read file
+do
+  # Replace the text "MET4J_VERSION_TEST" with the replacement value specified in the program argument
+  sed -i "s/MET4J_VERSION_TEST/$replacement_value/g" "$file"
+done
\ No newline at end of file
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/BipartiteDistanceMatrix/BipartiteDistanceMatrix.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/BipartiteDistanceMatrix/BipartiteDistanceMatrix.xml Wed May 17 13:26:37 2023 +0000
[
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tool id="met4j_BipartiteDistanceMatrix" name="BipartiteDistanceMatrix" version="1.3.0">
+  <description>Create a compound to reactions distance matrix.</description>
+  <xrefs>
+    <xref type="bio.tools">met4j</xref>
+  </xrefs>
+  <requirements>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.3.0</container>
+  </requirements>
+  <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh networkAnalysis.BipartiteDistanceMatrix -i "$inputPath"
+#if str($sideCompoundFile) != 'None':
+ -sc "$sideCompoundFile"
+#end if
+#if str($rExclude) != 'None':
+ -re "$rExclude"
+#end if
+#if str($metFile) != 'None':
+ -m "$metFile"
+#end if
+#if str($rxnFile) != 'None':
+ -r "$rxnFile"
+#end if
+#if str($weightFile) != 'None':
+ -w "$weightFile"
+#end if
+ $undirected
+ $full
+ -o "$outputPath"
+]]></command>
+  <inputs>
+    <param argument="-i" format="sbml" label="input SBML file" name="inputPath" 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="-re" format="txt" label="an optional file containing list of reactions to ignore" name="rExclude" optional="true" type="data" value=""/>
+    <param argument="-m" format="txt" label="an optional file containing list of compounds of interest." name="metFile" optional="true" type="data" value=""/>
+    <param argument="-r" format="txt" label="an optional file containing list of reactions of interest." name="rxnFile" optional="true" type="data" value=""/>
+    <param argument="-w" format="tsv" label="an optional file containing weights for compound pairs" name="weightFile" optional="true" type="data" value=""/>
+    <param argument="-u" checked="false" falsevalue="" label="Ignore reaction direction" name="undirected" truevalue="-u" type="boolean" value="false"/>
+    <param argument="-f" checked="false" falsevalue="" label="compute full pairwise matrix from both reactions and compounds lists" name="full" truevalue="-f" type="boolean" value="false"/>
+  </inputs>
+  <outputs>
+    <data format="csv" name="outputPath"/>
+  </outputs>
+  <tests/>
+  <help><![CDATA[Create a compound to reactions distance matrix.
+The distance between two nodes (metabolite or reaction) is computed as the length of the shortest path connecting the two in the bipartite graph, Bipartite graph are composed of two distinct sets of nodes and two nodes can be linked only if they are from distinct sets.
+Therefore a metabolite node can be linked to a reaction node if the metabolite is a substrate or product of the reaction.
+An optional custom edge weighting can be used, turning the distances into the sum of edge weights in the lightest path, rather than the length of the shortest path.Custom weighting can be provided in a file. In that case, edges without weight are ignored during path search.
+If no edge weighting is set, it is recommended to provide a list of side compounds to ignore during network traversal.]]></help>
+  <citations/>
+</tool>
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/CarbonSkeletonNet/CarbonSkeletonNet.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/CarbonSkeletonNet/CarbonSkeletonNet.xml Wed May 17 13:26:37 2023 +0000
[
@@ -0,0 +1,122 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tool id="met4j_CarbonSkeletonNet" name="CarbonSkeletonNet" version="1.3.0">
+  <description>Create a carbon skeleton graph representation of a SBML file content, using GSAM atom-mapping file (see https://forgemia.inra.fr/metexplore/gsam)</description>
+  <xrefs>
+    <xref type="bio.tools">met4j</xref>
+  </xrefs>
+  <requirements>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.3.0</container>
+  </requirements>
+  <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh networkAnalysis.CarbonSkeletonNet -s "$inputPath"
+ -g "$inputAAM"
+ $keepSingleCarbon
+ $mergeComp
+ $mergeEdges
+ $removeIsolated
+ $undirected
+ $computeWeight
+ $asMatrix
+ $main
+ $fromIndexes
+ -o "$outputPath"
+]]></command>
+  <inputs>
+    <param argument="-s" format="sbml" label="input SBML file" name="inputPath" optional="false" type="data" value=""/>
+    <param argument="-g" format="gsam" label="input GSAM file" name="inputAAM" optional="false" type="data" value=""/>
+    <param argument="-ks" checked="false" falsevalue="" label="keep edges involving single-carbon compounds, such as CO2 (requires formulas in SBML)" name="keepSingleCarbon" truevalue="-ks" type="boolean" value="false"/>
+    <param argument="-mc" checked="false" falsevalue="" label="merge compartments (requires unique compound names that are consistent across compartments)" name="mergeComp" truevalue="-mc" type="boolean" value="false"/>
+    <param argument="-me" checked="false" falsevalue="" label="merge parallel edges to produce a simple graph" name="mergeEdges" truevalue="-me" type="boolean" value="false"/>
+    <param argument="-ri" checked="false" falsevalue="" label="remove isolated nodes" name="removeIsolated" truevalue="-ri" type="boolean" value="false"/>
+    <param argument="-un" checked="false" falsevalue="" label="create as undirected" name="undirected" truevalue="-un" type="boolean" value="false"/>
+    <param argument="-tp" checked="false" falsevalue="" label="set transition probability as weight" name="computeWeight" truevalue="-tp" type="boolean" value="false"/>
+    <param argument="-am" checked="false" falsevalue="" label="export as matrix (implies simple graph conversion). Default export as GML file" name="asMatrix" truevalue="-am" type="boolean" value="false"/>
+    <param argument="-main" checked="false" falsevalue="" label="Compute RPAIRS-like tags and keep only main transitions for each reaction" name="main" truevalue="-main" type="boolean" value="false"/>
+    <param argument="-i" checked="false" falsevalue="" label="Use GSAM output with carbon indexes" name="fromIndexes" truevalue="-i" type="boolean" value="false"/>
+  </inputs>
+  <outputs>
+    <data format="gml" name="outputPath"/>
+  </outputs>
+  <tests>
+    <test>
+      <param name="inputPath" value="Human-GEM_pathways.xml"/>
+      <param name="inputAAM" value="Human-GEM_pathways-transitions.tab"/>
+      <output name="outputPath">
+        <assert_contents>
+          <has_n_lines n="2602"/>
+        </assert_contents>
+      </output>
+    </test>
+    <test>
+      <param name="inputPath" value="Human-GEM_pathways.xml"/>
+      <param name="inputAAM" value="Human-GEM_pathways-transitions.tab"/>
+      <param name="keepSingleCarbon" value="true"/>
+      <output name="outputPath">
+        <assert_contents>
+          <has_n_lines n="2629"/>
+        </assert_contents>
+      </output>
+    </test>
+    <test>
+      <param name="inputPath" value="Human-GEM_pathways.xml"/>
+      <param name="inputAAM" value="Human-GEM_pathways-transitions.tab"/>
+      <param name="mergeComp" value="true"/>
+      <output name="outputPath">
+        <assert_contents>
+          <has_n_lines n="2406"/>
+        </assert_contents>
+      </output>
+    </test>
+    <test>
+      <param name="inputPath" value="Human-GEM_pathways.xml"/>
+      <param name="inputAAM" value="Human-GEM_pathways-transitions.tab"/>
+      <param name="mergeEdges" value="true"/>
+      <output name="outputPath">
+        <assert_contents>
+          <has_n_lines n="2071"/>
+        </assert_contents>
+      </output>
+    </test>
+    <test>
+      <param name="inputPath" value="Human-GEM_pathways.xml"/>
+      <param name="inputAAM" value="Human-GEM_pathways-transitions.tab"/>
+      <param name="removeIsolated" value="true"/>
+      <output name="outputPath">
+        <assert_contents>
+          <has_n_lines n="2490"/>
+        </assert_contents>
+      </output>
+    </test>
+    <test>
+      <param name="inputPath" value="Human-GEM_pathways.xml"/>
+      <param name="inputAAM" value="Human-GEM_pathways-transitions.tab"/>
+      <param name="undirected" value="true"/>
+      <output name="outputPath">
+        <assert_contents>
+          <has_n_lines n="3214"/>
+        </assert_contents>
+      </output>
+    </test>
+    <test>
+      <param name="inputPath" value="Human-GEM_pathways.xml"/>
+      <param name="inputAAM" value="Human-GEM_pathways-transitions.tab"/>
+      <param name="asMatrix" value="true"/>
+      <output name="outputPath">
+        <assert_contents>
+          <has_n_lines n="112"/>
+        </assert_contents>
+      </output>
+    </test>
+    <test>
+      <param name="inputPath" value="Human-GEM_pathways.xml"/>
+      <param name="inputAAM" value="Human-GEM_pathways-transitions2.tab"/>
+      <param name="fromIndexes" value="true"/>
+      <output name="outputPath">
+        <assert_contents>
+          <has_n_lines n="2611"/>
+        </assert_contents>
+      </output>
+    </test>
+  </tests>
+  <help><![CDATA[Metabolic networks used for quantitative analysis often contain links that are irrelevant for graph-based structural analysis. For example, inclusion of side compounds or modelling artifacts such as 'biomass' nodes. Focusing on links between compounds that share parts of their carbon skeleton allows to avoid many transitions involving side compounds, and removes entities without defined chemical structure. This app produce a Carbon Skeleton Network relevant for graph-based analysis of metabolism, in GML or matrix format, from a SBML and an GSAM atom mapping file. GSAM (see https://forgemia.inra.fr/metexplore/gsam) perform atom mapping at genome-scale level using the Reaction Decoder Tool (https://github.com/asad/ReactionDecoder) and allows to compute the number of conserved atoms of a given type between reactants.This app also enable Markov-chain based analysis of metabolic networks by computing reaction-normalized transition probabilities on the Carbon Skeleton Network.]]></help>
+  <citations/>
+</tool>
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/CarbonSkeletonNet/test-data/Human-GEM_pathways-transitions.tab
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/CarbonSkeletonNet/test-data/Human-GEM_pathways-transitions.tab Wed May 17 13:26:37 2023 +0000
b
b'@@ -0,0 +1,205 @@\n+M_m02553c\t665.124771868\t21\tM_m02552c\t664.116946836\t21\tR_RE1342C\t1.007825032000028\t21\n+M_m03107c\t566.055020568\t15\tM_m01322c\t260.02971862600003\t6\tR_HMR_4131\t306.025301942\t6\n+M_m02846c\t230.019153942\t5\tM_m02845c\t230.01915394199997\t5\tR_HMR_4352\t2.8421709430404007E-14\t5\n+M_m01672c\t134.0579088\t5\tM_m00640c\t214.02423932199997\t5\tR_HMR_8074\t79.96633052199996\t5\n+M_m02553s\t665.124771868\t21\tM_m02552s\t664.116946836\t21\tR_HMR_4831\t1.007825032000028\t21\n+M_m01785c\t200.008589258\t4\tM_m02884c\t290.04028331\t7\tR_HMR_4565\t90.031694052\t1\n+M_m01845c\t260.029718626\t6\tM_m01785c\t200.008589258\t4\tR_HMR_4404\t60.021129367999976\t4\n+M_m01913s\t254.100167536\t9\tM_m01983s\t92.04734411599999\t3\tR_HMR_4416\t162.05282341999998\t3\n+M_m03130c\t483.96852767\t9\tM_m03107c\t566.055020568\t15\tR_HMR_8767\t82.08649289800002\t9\n+M_m02841c\t152.06847348399998\t5\tM_m02843c\t150.05282341999998\t5\tR_HMR_4841\t2.015650063999999\t5\n+M_m02554c\t744.083277358\t21\tM_m02555c\t745.0911023900001\t21\tR_HMR_8766\t1.007825032000028\t21\n+M_m01968c\t260.029718626\t18\tM_m01961c\t258.014068562\t18\tR_G6PDH2c\t2.015650063999999\t18\n+M_m02554c\t744.083277358\t63\tM_m02555c\t745.0911023900001\t63\tR_GNDc\t1.007825032000028\t63\n+M_m01843c\t339.99604914799994\t6\tM_m01845c\t260.029718626\t6\tR_HMR_4706\t79.96633052199996\t6\n+M_m02554r\t744.0832773579999\t21\tM_m02555r\t745.09110239\t21\tR_HMR_4473\t1.007825032000028\t21\n+M_m01845c\t260.029718626\t6\tM_m01761c\t230.01915394199997\t5\tR_HMR_4404\t30.010564684000002\t2\n+M_m01371c\t506.99574546199995\t10\tM_m01285c\t427.02941494000004\t10\tR_HMR_4350\t79.96633052199991\t10\n+M_m00640c\t214.02423932199997\t5\tM_m01249c\t44.026214748\t2\tR_HMR_4398\t169.99802457399997\t2\n+M_m01948c\t443.02432956000007\t10\tM_m01951c\t605.0771529799999\t16\tR_HMR_4386\t162.05282341999987\t10\n+M_m01371c\t506.99574546199995\t10\tM_m01285c\t427.02941494000004\t10\tR_HMR_4567\t79.96633052199991\t10\n+M_m02955c\t339.996049148\t6\tM_m01746c\t260.02971862600003\t6\tR_HMR_4775\t79.96633052199996\t6\n+M_m01746c\t260.02971862600003\t6\tM_m01690c\t169.99802457399997\t3\tR_HMR_8762\t90.03169405200006\t3\n+M_m01981c\t90.03169405199999\t3\tM_tag1p_D_c\t260.02971862600003\t6\tR_FBA5\t169.99802457400006\t3\n+M_m01981c\t90.03169405199999\t3\tM_m01842c\t260.029718626\t6\tR_HMR_4356\t169.998024574\t3\n+M_m01911c\t260.029718626\t6\tM_m03107c\t566.055020568\t15\tR_HMR_4132\t306.02530194200006\t6\n+M_m01682c\t182.07903816799998\t6\tM_m01840c\t180.06338810399998\t6\tR_HMR_4315\t2.015650063999999\t6\n+M_m01371c\t506.99574546199995\t10\tM_m01285c\t427.02941494000004\t10\tR_HMR_4402\t79.96633052199991\t10\n+M_m01961r\t258.014068562\t6\tM_m01968r\t260.029718626\t6\tR_HMR_8653\t2.015650063999999\t6\n+M_m01683c\t196.058302724\t6\tM_m01169c\t276.024633246\t6\tR_HMR_4476\t79.96633052200002\t6\n+M_m01371c\t506.99574546199995\t10\tM_m01285c\t427.02941494000004\t10\tR_HMR_4476\t79.96633052199991\t10\n+M_m01761c\t230.01915394199997\t5\tM_m02884c\t290.04028331\t7\tR_HMR_4501\t60.02112936800003\t5\n+M_m02884c\t290.04028331\t7\tM_m02883c\t370.00661383199997\t7\tR_HMR_4568\t79.96633052199996\t7\n+M_m01785c\t200.008589258\t4\tM_m01939c\t169.998024574\t3\tR_HMR_4565\t30.010564684000002\t3\n+M_m01967c\t260.029718626\t6\tM_m03108c\t566.0550205679999\t15\tR_HMR_3944\t306.02530194199994\t6\n+M_m01371c\t506.99574546199995\t10\tM_m01285c\t427.02941494000004\t10\tR_HMR_8761\t79.96633052199991\t10\n+M_m02884c\t290.04028331\t7\tM_m01785c\t200.008589258\t4\tR_HMR_4565\t90.031694052\t1\n+M_m01371c\t506.99574546199995\t10\tM_m01285c\t427.02941494000004\t10\tR_HMR_8074\t79.96633052199991\t10\n+M_m01371c\t506.99574546199995\t10\tM_m01334c\t347.063084418\t10\tR_HMR_4052\t159.93266104399993\t10\n+M_m02884c\t290.04028331\t7\tM_m03165c\t210.07395278799999\t7\tR_HMR_9799\t79.96633052200002\t7\n+M_m02844c\t230.01915394199997\t5\tM_m02845c\t230.01915394199997\t5\tR_HMR_4354\t0.0\t5\n+M_m01965c\t370.147511652\t14\tM_m01682c\t182.07903816799998\t6\tR_HMR_4316\t188.068473484\t6\n+M_m01690c\t169.99802457399997\t3\tM_m01746c\t260.02971862600003\t6\tR_HMR_8762\t90.03169405200006\t3\n+M_m02845c\t230.01915394199997\t5\tM_m02884c\t290.04028331\t7\tR_HMR_4501\t60.02112936800003\t2\n+M_m01249c\t44.026214748\t2\tM_m00640c\t214.02423932199997\t5\tR_HMR_4398\t169.99802457399997\t2\n+M_m02554c\t744.083277358\t21\tM_m02555c\t745.0911023900001\t'..b'1\t7\tM_m03165c\t210.07395278799999\t7\tR_HMR_9800\t79.96633052200002\t7\n+M_m01623c\t482.984512082\t9\tM_m01424c\t403.01818156\t9\tR_HMR_4774\t79.96633052199996\t9\n+M_m00640c\t214.02423932199997\t5\tM_m00639c\t214.024239322\t5\tR_HMR_4710\t2.8421709430404007E-14\t5\n+M_m02453c\t180.06338810399998\t6\tM_m02455c\t260.02971862600003\t6\tR_HMR_4490\t79.96633052200005\t6\n+M_m02554c\t744.083277358\t21\tM_m02555c\t745.0911023900001\t21\tR_HMR_4316\t1.007825032000028\t21\n+M_m01961c\t258.014068562\t6\tM_m01968c\t260.029718626\t6\tR_HMR_4306\t2.015650063999999\t6\n+M_m01169c\t276.024633246\t6\tM_m01596c\t43.98982924\t1\tR_HMR_4474\t232.034804006\t1\n+M_m00812s\t340.10056146\t12\tM_m02332s\t342.116211524\t12\tR_HMR_4831\t2.015650063999999\t12\n+M_m03108c\t566.0550205679999\t15\tM_m03107c\t566.055020568\t15\tR_HMR_4128\t1.1368683772161603E-13\t15\n+M_m01169c\t276.024633246\t18\tM_m02846c\t230.019153942\t15\tR_GNDc\t46.005479304000005\t15\n+M_m01371c\t506.99574546199995\t10\tM_m01285c\t427.02941494000004\t10\tR_HMR_4320\t79.96633052199991\t10\n+M_m01950c\t589.08223836\t16\tM_m02372c\t244.03480400599997\t6\tR_HMR_4401\t345.0474343540001\t6\n+M_m01746c\t260.02971862600003\t6\tM_m02955c\t339.996049148\t6\tR_HMR_4775\t79.96633052199996\t6\n+M_m00639c\t214.024239322\t5\tM_m00640c\t214.02423932199997\t5\tR_HMR_4710\t2.8421709430404007E-14\t5\n+M_m02372c\t244.03480400599997\t6\tM_m01159c\t164.06847348399998\t6\tR_HMR_4402\t79.96633052199999\t6\n+M_m02883c\t370.00661383199997\t7\tM_m02884c\t290.04028331\t7\tR_HMR_4567\t79.96633052199996\t7\n+M_m01746c\t260.02971862600003\t6\tM_m02955c\t339.996049148\t6\tR_HMR_4774\t79.96633052199996\t6\n+M_m03107c\t566.055020568\t15\tM_m03108c\t566.0550205679999\t15\tR_HMR_4131\t1.1368683772161603E-13\t9\n+M_m02553c\t665.124771868\t21\tM_m02552c\t664.116946836\t21\tR_ABTD1\t1.007825032000028\t21\n+M_m01690c\t169.99802457399997\t3\tM_m01842c\t260.029718626\t6\tR_HMR_4356\t90.031694052\t3\n+M_m02161c\t428.01343052799996\t10\tM_m02193c\t507.97976105\t10\tR_HMR_4775\t79.96633052200002\t10\n+M_tag1p_D_c\t260.02971862600003\t6\tM_m01981c\t90.03169405199999\t3\tR_FBA5\t169.99802457400006\t3\n+M_m01951c\t605.0771529799999\t16\tM_m01949c\t587.066588296\t16\tR_HMR_4399\t18.010564683999974\t16\n+M_m01840c\t180.06338810399998\t6\tM_m01842c\t260.029718626\t6\tR_HMR_4310\t79.96633052199999\t6\n+M_m01968r\t260.029718626\t6\tM_m01961r\t258.014068562\t6\tR_HMR_4304\t2.015650063999999\t6\n+M_m03165c\t210.07395278799999\t7\tM_m02884c\t290.04028331\t7\tR_HMR_9799\t79.96633052200002\t7\n+M_m02034c\t522.990660082\t10\tM_m01950c\t589.08223836\t16\tR_HMR_4401\t66.09157827800004\t10\n+M_m03108c\t566.0550205679999\t15\tM_m03107c\t566.055020568\t15\tR_HMR_4131\t1.1368683772161603E-13\t9\n+M_m02845c\t230.01915394199997\t5\tM_m02846c\t230.019153942\t5\tR_HMR_4352\t2.8421709430404007E-14\t5\n+M_m01910c\t180.06338810399998\t6\tM_m01909c\t182.07903816799998\t6\tR_HMR_8766\t2.015650063999999\t6\n+M_m02554c\t744.083277358\t21\tM_m02555c\t745.0911023900001\t21\tR_HMR_4306\t1.007825032000028\t21\n+M_m02883c\t370.00661383199997\t7\tM_m02884c\t290.04028331\t7\tR_HMR_4568\t79.96633052199996\t7\n+M_m02843c\t150.05282341999998\t5\tM_m02841c\t152.06847348399998\t5\tR_HMR_4841\t2.015650063999999\t5\n+M_m01371c\t506.99574546199995\t10\tM_m01285c\t427.02941494000004\t10\tR_HMR_9799\t79.96633052199991\t10\n+M_m02455c\t260.02971862600003\t6\tM_m01845c\t260.029718626\t6\tR_HMR_4383\t5.6843418860808015E-14\t6\n+M_m02332s\t342.116211524\t12\tM_m00812s\t340.10056146\t12\tR_HMR_4831\t2.015650063999999\t12\n+M_m02552r\t664.116946836\t21\tM_m02553r\t665.124771868\t21\tR_HMR_8653\t1.007825032000028\t21\n+M_m02552c\t664.116946836\t21\tM_m02553c\t665.124771868\t21\tR_HMR_4841\t1.007825032000028\t21\n+M_m01949c\t587.066588296\t16\tM_m01950c\t589.08223836\t16\tR_HMR_4400\t2.015650064000056\t16\n+M_m01961c\t258.014068562\t18\tM_m01169c\t276.024633246\t18\tR_PGLc\t18.01056468400003\t18\n+M_m01371c\t506.99574546199995\t10\tM_m01285c\t427.02941494000004\t10\tR_HMR_4310\t79.96633052199991\t10\n+M_m01986c\t76.039853432\t2\tM_glyphe_c\t222.100442308\t11\tR_GLYPHEHYc\t146.060588876\t2\n+M_m03107c\t566.055020568\t15\tM_m03108c\t566.0550205679999\t15\tR_HMR_4128\t1.1368683772161603E-13\t15\n+M_glyphe_c\t222.100442308\t11\tM_m02724c\t165.078978592\t9\tR_GLYPHEHYc\t57.021463716\t9\n+M_m02455c\t260.02971862600003\t6\tM_m02454c\t602.35836997\t31\tR_HMR_4385\t342.328651344\t6\n'
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/CarbonSkeletonNet/test-data/Human-GEM_pathways-transitions2.tab
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/CarbonSkeletonNet/test-data/Human-GEM_pathways-transitions2.tab Wed May 17 13:26:37 2023 +0000
b
b'@@ -0,0 +1,206 @@\n+M_m01745c\t180.06338810399998\t42-40-38-37-34-33\tM_m01746c\t260.029718626\t42-40-38-37-34-33\tR_HMR_8761\t79.96633052199999\t33,34,37,38,40,42\n+M_m01761c\t230.019153942\t9-7-5-3-2\tM_m01845c\t260.029718626\t3-2-21-19-17-16\tR_HMR_4404\t30.010564683999974\t2,3\n+M_m01950c\t589.08223836\t36-34-32-30-28-27-26-24-14-13-11-9-7-6-4-2\tM_m02372c\t244.034804006\t24-32-30-28-26-27\tR_HMR_4401\t345.047434354\t24,26,27,28,30,32\n+M_m01961r\t258.01406856200003\t15-13-11-5-4-2\tM_m01169r\t276.024633246\t5-4-11-13-15-2\tR_HMR_4623\t18.010564683999974\t11,13,2,4,15,5\n+M_m02846r\t230.019153942\t9-7-5-3-2\tM_m02845r\t230.01915394199997\t9-7-5-3-2\tR_HMR_4351\t2.8421709430404007E-14\t2,3,5,7,9\n+M_m02552c\t664.116946836\t43-41-39-37-35-33-31-30-28-26-24-23-13-12-10-9-7-6-5-4-2\tM_m02553c\t665.124771868\t43-41-39-37-35-33-31-30-28-26-24-23-13-12-10-9-7-6-5-4-2\tR_ABTD1\t1.007825032000028\t33,23,12,35,24,13,37,26,39,28,2,4,5,6,7,9,41,30,31,43,10\n+M_m01967c\t260.029718626\t51-49-47-45-44-42\tM_m03108c\t566.055020568\t35-33-51-49-47-45-44-42-12-11-9-6-4-3-2\tR_HMR_4131\t306.02530194200006\t44,45,47,49,51,42\n+M_m02553r\t665.124771868\t43-41-39-37-35-33-31-30-28-26-24-23-13-12-10-9-8-7-5-4-2\tM_m02552r\t664.116946836\t43-41-39-37-35-33-31-30-28-26-24-23-13-12-10-9-8-7-5-4-2\tR_HMR_8653\t1.007825032000028\t33,23,12,35,24,13,37,26,39,28,2,4,5,7,8,9,41,30,31,43,10\n+M_m02555c\t745.09110239\t47-45-43-37-35-33-31-30-28-26-24-23-13-12-10-9-8-7-5-4-2\tM_m02554c\t744.083277358\t47-45-43-37-35-33-31-30-28-26-24-23-13-12-10-9-8-7-5-4-2\tR_HMR_4306\t1.0078250319999142\t33,45,23,12,35,24,13,47,37,26,28,2,4,5,7,8,9,30,31,43,10\n+M_m01371c\t506.99574546199995\t46-44-42-40-38-37-35-33-31-30\tM_m01285c\t427.02941494\t46-44-42-40-38-37-35-33-31-30\tR_HMR_4320\t79.96633052199996\t44,33,46,35,37,38,40,30,42,31\n+M_m01840c\t180.06338810399998\t42-40-38-37-34-33\tM_m01842c\t260.029718626\t42-40-38-37-34-33\tR_HMR_4310\t79.96633052199999\t33,34,37,38,40,42\n+M_m02846c\t230.01915394199997\t9-7-5-3-2 . 23-21-19-17-16\tM_m01761c\t230.019153942\t23-21-19-17-16 . 9-7-5-3-2\tR_RPEc\t2.8421709430404007E-14\t23,2,3,16,5,17,7,19,9,21\n+M_m01371c\t506.99574546199995\t30-28-26-24-22-21-19-17-15-14\tM_m01285c\t427.02941494\t30-28-26-24-22-21-19-17-15-14\tR_HMR_4402\t79.96633052199996\t22,24,14,26,15,28,17,19,30,21\n+M_m03130c\t483.96852767\t24-22-12-11-9-6-4-3-2\tM_m03106c\t404.002197148\t24-22-12-11-9-6-4-3-2\tR_HMR_4568\t79.96633052200002\t22,11,12,24,2,3,4,6,9\n+M_m01169c\t276.024633246\t39-37-35-33-31-29\tM_m01683c\t196.058302724\t39-37-35-33-31-29\tR_HMR_4476\t79.96633052200002\t33,35,37,39,29,31\n+M_m02332l\t342.116211524\t22-20-18-16-15-12-10-8-7-5-3-2\tM_m01965l\t370.147511652\t27-22-20-18-16-15-26-12-10-8-7-5-3-2\tR_HMR_8764\t28.031300127999998\t22,12,15,16,18,2,3,5,7,8,20,10\n+M_m01690c\t169.99802457399997\t5-3-2\tM_m01842c\t260.029718626\t5-15-3-12-13-2\tR_HMR_4356\t90.031694052\t2,3,5\n+M_m02883c\t370.00661383199997\t42-40-38-36-34-28-27\tM_m02884c\t290.04028331\t42-40-38-36-34-28-27\tR_HMR_4568\t79.96633052199996\t34,36,38,27,28,40,42\n+M_m03130c\t483.96852767\t28-26-12-11-9-6-4-3-2\tM_m03107c\t566.055020568\t28-26-44-42-40-38-37-35-12-11-9-6-4-3-2\tR_HMR_8767\t82.08649289800002\t11,12,26,28,2,3,4,6,9\n+M_m01939c\t169.998024574\t9-7-5\tM_m01761c\t230.019153942\t9-7-5-3-2\tR_HMR_4501\t60.021129368000004\t5,7,9\n+M_m02845c\t230.01915394199997\t9-7-5-3-2\tM_m02846c\t230.01915394199997\t9-7-5-3-2\tR_HMR_4352\t0.0\t2,3,5,7,9\n+M_m01909c\t182.07903816799998\t53-55-57-59-51-50\tM_m01910c\t180.06338810399998\t59-57-55-53-51-50\tR_HMR_8766\t2.015650063999999\t55,57,59,50,51,53\n+M_m01322c\t260.02971862600003\t44-42-40-38-37-35\tM_m03107c\t566.055020568\t28-26-44-42-40-38-37-35-12-11-9-6-4-3-2\tR_HMR_8767\t306.025301942\t44,35,37,38,40,42\n+M_m02372c\t244.034804006\t33-41-39-37-35-36\tM_m01159c\t164.06847348399998\t41-39-37-36-35-33\tR_HMR_4402\t79.96633052200002\t33,35,36,37,39,41\n+M_m01746c\t260.029718626\t32-44-42-36-34-31\tM_m02955c\t339.99604914799994\t44-42-36-34-32-31\tR_HMR_4774\t79.96633052199996\t44,34,36,42,31,32\n+M_m01910c\t180.06338810399998\t42-40-38-36-34-33\tM_m01911c\t260.029718626\t38-40-42-33-34-36\tR_HMR_4414\t79.96633052199999\t33,34,36,38,40,42\n+M_m01371c\t506.9'..b'5.09110239\t47-45-43-37-35-33-31-30-28-26-24-23-13-12-10-9-8-7-5-4-2\tR_HMR_4306\t1.0078250319999142\t33,45,23,12,35,24,13,47,37,26,28,2,4,5,7,8,9,30,31,43,10\n+M_m01371c\t506.99574546199995\t22-20-18-17-15-13-10-11-26-24\tM_m01285c\t427.02941494\t26-24-22-20-18-17-15-13-11-10\tR_HMR_4476\t79.96633052199996\t22,11,24,13,26,15,17,18,20,10\n+M_m02555c\t745.09110239\t47-45-43-37-35-33-31-30-28-26-24-23-13-12-10-9-8-7-5-4-2\tM_m02554c\t744.083277358\t47-45-43-37-35-33-31-30-28-26-24-23-13-12-10-9-8-7-5-4-2\tR_HMR_8766\t1.0078250319999142\t33,45,23,12,35,24,13,47,37,26,28,2,4,5,7,8,9,30,31,43,10\n+M_m02034c\t522.990660082\t46-44-30-29-27-25-23-22-20-18\tM_m01951c\t605.0771529799999\t44-46-25-23-18-20-22-27-29-30-15-13-11-9-8-6\tR_HMR_4387\t82.08649289799996\t44,22,23,46,25,27,18,29,30,20\n+M_m01371c\t506.99574546199995\t30-28-26-24-22-21-19-17-15-14\tM_m01334c\t347.063084418\t30-28-26-24-22-21-19-17-15-14\tR_HMR_4052\t159.93266104399993\t22,24,14,26,15,28,17,19,30,21\n+M_m02884c\t290.04028331\t42-40-38-36-34-28-27\tM_m02883c\t370.00661383199997\t42-40-38-36-34-28-27\tR_HMR_4568\t79.96633052199996\t34,36,38,27,28,40,42\n+M_m02552c\t664.116946836\t43-41-39-37-35-33-31-30-28-26-24-23-13-12-10-9-7-6-5-4-2\tM_m02553c\t665.124771868\t43-41-39-37-35-33-31-30-28-26-24-23-13-12-10-9-7-6-5-4-2\tR_HMR_4315\t1.007825032000028\t33,23,12,35,24,13,37,26,39,28,2,4,5,6,7,9,41,30,31,43,10\n+M_m01951c\t605.0771529799999\t37-35-33-31-29-27-26-24-14-13-11-9-7-6-4-2\tM_m01949c\t587.066588296\t37-35-33-31-29-27-26-24-14-13-11-9-7-6-4-2\tR_HMR_4399\t18.010564683999974\t33,11,35,24,13,14,37,26,27,29,2,4,6,7,9,31\n+M_m01371c\t506.99574546199995\t30-28-26-24-22-21-19-17-15-14\tM_m01285c\t427.02941494\t30-28-26-24-22-21-19-17-15-14\tR_HMR_8074\t79.96633052199996\t22,24,14,26,15,28,17,19,30,21\n+M_m00812s\t340.10056146\t16-2-3-22-20-18-5-7-8-10-12-15\tM_m01965s\t370.147511652\t25-22-20-18-16-15-24-12-10-8-7-5-3-2\tR_HMR_4832\t30.046950191999997\t22,12,15,16,18,2,3,5,7,8,20,10\n+M_m02845r\t230.01915394199997\t9-7-5-3-2\tM_m02846r\t230.019153942\t9-7-5-3-2\tR_HMR_4351\t2.8421709430404007E-14\t2,3,5,7,9\n+M_m02844c\t230.019153942\t13-11-9-8-6\tM_m02845c\t230.01915394199997\t9-8-11-13-6\tR_HMR_4354\t2.8421709430404007E-14\t11,13,6,8,9\n+M_m02845c\t230.01915394199997\t23-21-19-17-16\tM_m02884c\t290.04028331\t23-21-19-17-16-3-2\tR_HMR_4501\t60.02112936800003\t23,16,17,19,21\n+M_m03107c\t566.055020568\t35-33-31-29-27-25-24-22-12-11-9-6-4-3-2\tM_m01322c\t260.02971862600003\t31-29-27-25-24-22\tR_HMR_4131\t306.025301942\t22,24,25,27,29,31\n+M_m01169c\t276.024633246\t60-58-56-54-52-50\tM_m01596c\t43.98982924\t50\tR_HMR_4474\t232.034804006\t50\n+M_m03107g\t566.055020568\t24-22-58-56-54-52-51-49-12-11-9-6-4-3-2\tM_m03106g\t404.00219714799994\t24-22-12-11-9-6-4-3-2\tR_HMR_7674\t162.0528234200001\t22,11,12,24,2,3,4,6,9\n+M_m01746c\t260.029718626\t46-44-42-41-38-37\tM_m02955c\t339.99604914799994\t44-46-37-38-42-41\tR_HMR_4775\t79.96633052199996\t44,46,37,38,41,42\n+M_m02453c\t180.06338810399998\t42-40-38-36-34-33\tM_m02455c\t260.029718626\t33-34-42-40-38-36\tR_HMR_4490\t79.96633052199999\t33,34,36,38,40,42\n+M_m01961c\t258.01406856200003\t15-13-11-5-4-2\tM_m01169c\t276.024633246\t5-4-11-13-15-2\tR_HMR_4625\t18.010564683999974\t11,13,2,4,15,5\n+M_m01745c\t180.06338810399998\t42-40-38-37-34-33\tM_tag1p_D_c\t260.029718626\t37-38-40-42-34-33\tR_KHK3\t79.96633052199999\t33,34,37,38,40,42\n+M_m01746c\t260.029718626\t15-13-11-10-7-6\tM_m01690c\t169.99802457399997\t15-7-6\tR_HMR_8762\t90.031694052\t15,6,7\n+M_m01285c\t427.02941494\t30-28-26-24-22-21-19-17-15-14\tM_m01371c\t506.99574546199995\t30-28-26-24-22-21-19-17-15-14\tR_HMR_9800\t79.96633052199996\t22,24,14,26,15,28,17,19,30,21\n+M_m01159c\t164.06847348399998\t41-39-37-36-35-33\tM_m02372c\t244.034804006\t33-41-39-37-35-36\tR_HMR_4402\t79.96633052200002\t33,35,36,37,39,41\n+M_m01939c\t169.998024574\t8-6-4\tM_m00640c\t214.024239322\t8-6-4-3-2\tR_HMR_4398\t44.026214748\t4,6,8\n+M_m02845c\t230.01915394199997\t40-38-36-34-33\tM_m02806c\t389.951814986\t33-40-38-36-34\tR_HMR_4052\t159.932661044\t33,34,36,38,40\n+M_m01840c\t180.06338810399998\t55-53-46-47-49-51\tM_m01682c\t182.07903816799998\t55-53-51-49-47-46\tR_HMR_4315\t2.015650063999999\t55,46,47,49,51,53\n'
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/CarbonSkeletonNet/test-data/Human-GEM_pathways.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/CarbonSkeletonNet/test-data/Human-GEM_pathways.xml Wed May 17 13:26:37 2023 +0000
b
b'@@ -0,0 +1,7661 @@\n+<?xml version="1.0" encoding="UTF-8"?>\r\n+<sbml fbc:required="false" groups:required="false" level="3" version="2" xmlns="http://www.sbml.org/sbml/level3/version2/core" xmlns:fbc="http://www.sbml.org/sbml/level3/version1/fbc/version2" xmlns:groups="http://www.sbml.org/sbml/level3/version1/groups/version1">\r\n+  <model fbc:strict="true" id="HumanGEM" metaid="HumanGEM" name="Generic genome-scale metabolic model of Homo sapiens">\r\n+    <notes>\r\n+      <body xmlns="http://www.w3.org/1999/xhtml">\r\n+        <p>Genome-scale metabolic models are valuable tools to study metabolism and provide a scaffold for the integrative analysis of omics data. This is the latest version of Human-GEM, which is a genome-scale metabolic model of a generic human cell. The objective of Human-GEM is to serve as a community model for enabling integrative and mechanistic studies of human metabolism.</p>\r\n+      </body>\r\n+    </notes>\r\n+    <annotation>\r\n+      <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:bqbiol="http://biomodels.net/biology-qualifiers/">\r\n+        <rdf:Description rdf:about="#HumanGEM">\r\n+          <bqbiol:is>\r\n+            <rdf:Bag>\r\n+              <rdf:li rdf:resource="https://identifiers.org/taxonomy/9606"/>\r\n+            </rdf:Bag>\r\n+          </bqbiol:is>\r\n+        </rdf:Description>\r\n+      </rdf:RDF>\r\n+    </annotation>\r\n+    <fbc:listOfObjectives fbc:activeObjective="obj">\r\n+      <fbc:objective fbc:id="obj" fbc:type="maximize">\r\n+        <fbc:listOfFluxObjectives>\r\n+          <fbc:fluxObjective fbc:coefficient="1" fbc:reaction="R_biomass_human"/>\r\n+        </fbc:listOfFluxObjectives>\r\n+      </fbc:objective>\r\n+    </fbc:listOfObjectives>\r\n+    <fbc:listOfGeneProducts>\r\n+      <fbc:geneProduct fbc:id="ENSG00000023697" fbc:label="ENSG00000023697" fbc:name="ENSG00000023697" metaid="_12915ddf-e017-4a38-a80d-e9982f8ac7cc">\r\n+        <notes>\r\n+          <body xmlns="http://www.w3.org/1999/xhtml">\r\n+            <p>ensembl: ENSG00000023697</p>\r\n+            <p>hgnc.symbol: DERA</p>\r\n+            <p>ncbigene: 51071</p>\r\n+            <p>uniprot: Q9Y315</p>\r\n+          </body>\r\n+        </notes>\r\n+      </fbc:geneProduct>\r\n+      <fbc:geneProduct fbc:id="ENSG00000130313" fbc:label="ENSG00000130313" fbc:name="ENSG00000130313" metaid="b7f31dab-0da6-4c9e-9c76-6ea1952d4f6b">\r\n+        <notes>\r\n+          <body xmlns="http://www.w3.org/1999/xhtml">\r\n+            <p>ensembl: ENSG00000130313</p>\r\n+            <p>hgnc.symbol: PGLS</p>\r\n+            <p>ncbigene: 25796</p>\r\n+            <p>uniprot: O95336</p>\r\n+          </body>\r\n+        </notes>\r\n+      </fbc:geneProduct>\r\n+      <fbc:geneProduct fbc:id="ENSG00000157353" fbc:label="ENSG00000157353" fbc:name="ENSG00000157353" metaid="f2bfd1a8-b479-4718-bb3f-030aed87a562">\r\n+        <notes>\r\n+          <body xmlns="http://www.w3.org/1999/xhtml">\r\n+            <p>ensembl: ENSG00000157353</p>\r\n+            <p>hgnc.symbol: FCSK</p>\r\n+            <p>ncbigene: 197258</p>\r\n+            <p>uniprot: Q8N0W3</p>\r\n+          </body>\r\n+        </notes>\r\n+      </fbc:geneProduct>\r\n+      <fbc:geneProduct fbc:id="ENSG00000114268" fbc:label="ENSG00000114268" fbc:name="ENSG00000114268" metaid="d1ad0711-77a6-4e33-85ba-dff0e0e56b5c">\r\n+        <notes>\r\n+          <body xmlns="http://www.w3.org/1999/xhtml">\r\n+            <p>ensembl: ENSG00000114268</p>\r\n+            <p>hgnc.symbol: PFKFB4</p>\r\n+            <p>ncbigene: 5210</p>\r\n+            <p>uniprot: Q16877</p>\r\n+          </body>\r\n+        </notes>\r\n+      </fbc:geneProduct>\r\n+      <fbc:geneProduct fbc:id="ENSG00000197417" fbc:label="ENSG00000197417" fbc:name="ENSG00000197417" metaid="_36aac772-72a3-44fd-97f3-84213d36d9e2">\r\n+        <notes>\r\n+          <body xmlns="http://www.w3.org/1999/xhtml">\r\n+            <p>ensembl: ENSG00000197417</p>\r\n+            <p>hgnc.symbol: SHPK</p>\r\n+            <p>ncbigene: 23729</p>\r\n+            <p>uniprot: Q9UHJ6</p>\r\n+          </body>\r\n+        </notes>\r\n+      </fbc:geneProduct>\r\n+  '..b'    </rdf:Bag>\r\n+              </bqbiol:is>\r\n+              <bqbiol:isDescribedBy>\r\n+                <rdf:Bag>\r\n+                  <rdf:li rdf:resource="https://identifiers.org/pubmed/234468"/>\r\n+                  <rdf:li rdf:resource="https://identifiers.org/pubmed/2843500"/>\r\n+                  <rdf:li rdf:resource="https://identifiers.org/pubmed/15234337"/>\r\n+                </rdf:Bag>\r\n+              </bqbiol:isDescribedBy>\r\n+            </rdf:Description>\r\n+          </rdf:RDF>\r\n+        </annotation>\r\n+        <fbc:geneProductAssociation>\r\n+          <fbc:or>\r\n+            <fbc:geneProductRef fbc:geneProduct="ENSG00000197713"/>\r\n+            <fbc:geneProductRef fbc:geneProduct="ENSG00000235376"/>\r\n+          </fbc:or>\r\n+        </fbc:geneProductAssociation>\r\n+        <listOfReactants>\r\n+          <speciesReference constant="true" species="M_m01761c" stoichiometry="1"/>\r\n+        </listOfReactants>\r\n+        <listOfProducts>\r\n+          <speciesReference constant="true" species="M_m02846c" stoichiometry="1"/>\r\n+        </listOfProducts>\r\n+      </reaction>\r\n+      <reaction fbc:lowerFluxBound="LOWER_BOUND_0_0" fbc:upperFluxBound="UPPER_BOUND_1000_0" id="R_HMR_4356" metaid="e6efa094-5aeb-412c-8390-f6707d0794e0" name="R_HMR_4356" reversible="false" sboTerm="SBO:0000176">\r\n+        <notes>\r\n+          <body xmlns="http://www.w3.org/1999/xhtml">\r\n+            <p>Confidence Level: 0</p>\r\n+            <p>AUTHORS: PMID:5114731;PMID:5655259;PMID:6054986</p>\r\n+            <p>ec-code: 4.1.2.13</p>\r\n+            <p>metanetx.reaction: MNXR99460</p>\r\n+            <p>kegg.reaction: R02568</p>\r\n+            <p>bigg.reaction: FBA2</p>\r\n+            <p>SUBSYSTEM: Fructose and mannose metabolism</p>\r\n+            <p>EC_NUMBER: 4.1.2.13</p>\r\n+            <p>pmids: 5114731,5655259,6054986</p>\r\n+            <p>GENE_ASSOCIATION: ( ENSG00000109107 ) OR ( ENSG00000136872 ) OR ( ENSG00000149925 ) OR ( ENSG00000285043 )</p>\r\n+          </body>\r\n+        </notes>\r\n+        <annotation>\r\n+          <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:bqbiol="http://biomodels.net/biology-qualifiers/">\r\n+            <rdf:Description rdf:about="#e6efa094-5aeb-412c-8390-f6707d0794e0">\r\n+              <bqbiol:is>\r\n+                <rdf:Bag>\r\n+                  <rdf:li rdf:resource="https://identifiers.org/ec-code/4.1.2.13"/>\r\n+                  <rdf:li rdf:resource="https://identifiers.org/metanetx.reaction/MNXR99460"/>\r\n+                  <rdf:li rdf:resource="https://identifiers.org/kegg.reaction/R02568"/>\r\n+                  <rdf:li rdf:resource="https://identifiers.org/bigg.reaction/FBA2"/>\r\n+                </rdf:Bag>\r\n+              </bqbiol:is>\r\n+              <bqbiol:isDescribedBy>\r\n+                <rdf:Bag>\r\n+                  <rdf:li rdf:resource="https://identifiers.org/pubmed/5114731"/>\r\n+                  <rdf:li rdf:resource="https://identifiers.org/pubmed/6054986"/>\r\n+                  <rdf:li rdf:resource="https://identifiers.org/pubmed/5655259"/>\r\n+                </rdf:Bag>\r\n+              </bqbiol:isDescribedBy>\r\n+            </rdf:Description>\r\n+          </rdf:RDF>\r\n+        </annotation>\r\n+        <fbc:geneProductAssociation>\r\n+          <fbc:or>\r\n+            <fbc:geneProductRef fbc:geneProduct="ENSG00000136872"/>\r\n+            <fbc:geneProductRef fbc:geneProduct="ENSG00000149925"/>\r\n+            <fbc:geneProductRef fbc:geneProduct="ENSG00000109107"/>\r\n+            <fbc:geneProductRef fbc:geneProduct="ENSG00000285043"/>\r\n+          </fbc:or>\r\n+        </fbc:geneProductAssociation>\r\n+        <listOfReactants>\r\n+          <speciesReference constant="true" species="M_m01690c" stoichiometry="1"/>\r\n+          <speciesReference constant="true" species="M_m01981c" stoichiometry="1"/>\r\n+        </listOfReactants>\r\n+        <listOfProducts>\r\n+          <speciesReference constant="true" species="M_m01842c" stoichiometry="1"/>\r\n+        </listOfProducts>\r\n+      </reaction>\r\n+    </listOfReactions>\r\n+  </model>\r\n+</sbml>\r\n'
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/ChemSimilarityWeighting/ChemSimilarityWeighting.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/ChemSimilarityWeighting/ChemSimilarityWeighting.xml Wed May 17 13:26:37 2023 +0000
[
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tool id="met4j_ChemSimilarityWeighting" name="ChemSimilarityWeighting" version="1.3.0">
+  <description>Provides tabulated compound graph edge list, with one column with reactant pair's chemical similarity.</description>
+  <xrefs>
+    <xref type="bio.tools">met4j</xref>
+  </xrefs>
+  <requirements>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.3.0</container>
+  </requirements>
+  <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh networkAnalysis.ChemSimilarityWeighting#if str($type):
+ -f "$type"
+#end if
+#if str($smileFile):
+ -sm "$smileFile"
+#end if
+#if str($inchiFile):
+ -in "$inchiFile"
+#end if
+ $dist
+ -s "$inputPath"
+#if str($inputSide) != 'None':
+ -sc "$inputSide"
+#end if
+#if str($mergingStrat):
+ -mc "$mergingStrat"
+#end if
+ $mergeEdges
+ $undirected
+ $computeWeight
+ $removeNaN
+ -o "$outputPath"
+]]></command>
+  <inputs>
+    <param argument="-f" label="The chemical fingerprint to use" name="type" optional="true" type="select" value="Extended">
+      <option value="EState">EState</option>
+      <option selected="true" value="Extended">Extended</option>
+      <option value="KlekotaRoth">KlekotaRoth</option>
+      <option value="MACCS">MACCS</option>
+      <option value="PubChem">PubChem</option>
+    </param>
+    <param argument="-sm" label="If not present in SBML's annotations, get structure from a tabulated file with first column as compound id and second column as SMILE string, no header. Ignored if inchi file is provided" name="smileFile" optional="true" type="text" value="">
+      <sanitizer invalid_char="_">
+        <valid initial="string.printable"/>
+      </sanitizer>
+    </param>
+    <param argument="-in" label="If not present in SBML's annotations, get structure from a tabulated file with first column as compound id and second column as InChI string, no header." name="inchiFile" optional="true" type="text" value="">
+      <sanitizer invalid_char="_">
+        <valid initial="string.printable"/>
+      </sanitizer>
+    </param>
+    <param argument="-d" checked="false" falsevalue="" label="Use distance rather than similarity" name="dist" truevalue="-d" type="boolean" value="false"/>
+    <param argument="-s" format="sbml" label="input SBML file" name="inputPath" optional="false" type="data" value=""/>
+    <param argument="-sc" format="txt" label="input Side compound file" name="inputSide" optional="true" type="data" value=""/>
+    <param argument="-mc" label="merge compartments. Use names if consistent and unambiguous across compartments, or identifiers if compartment suffix is present (id in form &quot;xxx_y&quot; with xxx as base identifier and y as compartment label)." name="mergingStrat" optional="true" type="select" value="no">
+      <option selected="true" value="no">no</option>
+      <option value="by_name">by_name</option>
+      <option value="by_id">by_id</option>
+    </param>
+    <param argument="-me" checked="false" falsevalue="" label="merge parallel edges to produce a simple graph" name="mergeEdges" truevalue="-me" type="boolean" value="false"/>
+    <param argument="-un" checked="false" falsevalue="" label="create as undirected" name="undirected" truevalue="-un" type="boolean" value="false"/>
+    <param argument="-tp" checked="false" falsevalue="" label="set weight as random walk transition probability, normalized by reaction" name="computeWeight" truevalue="-tp" type="boolean" value="false"/>
+    <param argument="-nan" checked="false" falsevalue="" label="do not output edges with undefined weight" name="removeNaN" truevalue="-nan" type="boolean" value="false"/>
+  </inputs>
+  <outputs>
+    <data format="tsv" name="outputPath"/>
+  </outputs>
+  <tests/>
+  <help><![CDATA[Provides tabulated compound graph edge list, with one column with reactant pair's chemical similarity.Chemical similarity has been proposed as edge weight for finding meaningful paths in metabolic networks, using shortest (lightest) path search. See McSha et al. 2003 (https://doi.org/10.1093/bioinformatics/btg217), Rahman et al. 2005 (https://doi.org/10.1093/bioinformatics/bti116) and Pertusi et al. 2014 (https://doi.org/10.1093/bioinformatics/btu760)]]></help>
+  <citations/>
+</tool>
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/ChokePoint/ChokePoint.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/ChokePoint/ChokePoint.xml Wed May 17 13:26:37 2023 +0000
[
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tool id="met4j_ChokePoint" name="ChokePoint" version="1.3.0">
+  <description>Compute the Choke points of a metabolic network.</description>
+  <xrefs>
+    <xref type="bio.tools">met4j</xref>
+  </xrefs>
+  <requirements>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.3.0</container>
+  </requirements>
+  <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh networkAnalysis.ChokePoint -i "$inputPath"
+#if str($sideCompoundFile) != 'None':
+ -s "$sideCompoundFile"
+#end if
+ -o "$outputPath"
+]]></command>
+  <inputs>
+    <param argument="-i" format="sbml" label="input SBML file" name="inputPath" optional="false" type="data" value=""/>
+    <param argument="-s" format="txt" label="an optional file containing list of side compounds to ignore" name="sideCompoundFile" optional="true" type="data" value=""/>
+  </inputs>
+  <outputs>
+    <data format="tsv" name="outputPath"/>
+  </outputs>
+  <tests>
+    <test>
+ <param name="inputPath" value="XF_network.sbml"/>
+ <output ftype="tsv" name="outputPath">
+ <assert_contents>
+ <has_n_lines n="202"/>
+ <has_n_columns n="3"/>
+ <has_line_matching expression="R_ADEtex.*adenine_transport_via_diffusion__extracellular_to_periplasm_.*M_ade_e &lt;==&gt; M_ade_p" n="1"/>
+ <has_line_matching expression="R_X5PL3E.*R_X5PL3E.*M_xu5p_L_c --&gt; M_ru5p_L_c" n="1"/>
+ </assert_contents>
+ </output>
+ </test>
+    <test>
+ <param name="inputPath" value="XF_network.sbml"/>
+ <param name="sideCompoundFile" value="sides.txt"/>
+ <output ftype="tsv" name="outputPath">
+ <assert_contents>
+ <has_n_lines n="200"/>
+ <has_n_columns n="3"/>
+ <has_line_matching expression="R_ADEtex.*adenine_transport_via_diffusion__extracellular_to_periplasm_.*M_ade_e &lt;==&gt; M_ade_p" n="1" negate="true"/>
+ <has_line_matching expression="R_X5PL3E.*R_X5PL3E.*M_xu5p_L_c --&gt; M_ru5p_L_c" n="1" negate="true"/>
+ </assert_contents>
+ </output>
+ </test>
+  </tests>
+  <help><![CDATA[Compute the Choke points of a metabolic network.
+Load points constitute an indicator of lethality and can help identifying drug target Choke points are reactions that are required to consume or produce one compound. Targeting of choke point can lead to the accumulation or the loss of some metabolites, thus choke points constitute an indicator of lethality and can help identifying drug target 
+See : Syed Asad Rahman, Dietmar Schomburg; Observing local and global properties of metabolic pathways: ‘load points’ and ‘choke points’ in the metabolic networks. Bioinformatics 2006; 22 (14): 1767-1774. doi: 10.1093/bioinformatics/btl181]]></help>
+  <citations/>
+</tool>
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/ChokePoint/test-data/XF_network.sbml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/ChokePoint/test-data/XF_network.sbml Wed May 17 13:26:37 2023 +0000
b
b'@@ -0,0 +1,47267 @@\n+<?xml version="1.0" encoding="UTF-8"?>\n+<sbml fbc:required="false" groups:required="false" level="3" version="2" xmlns="http://www.sbml.org/sbml/level3/version2/core" xmlns:fbc="http://www.sbml.org/sbml/level3/version1/fbc/version2" xmlns:groups="http://www.sbml.org/sbml/level3/version1/groups/version1">\n+  <model fbc:strict="true" id="Xfm1158" metaid="Xfm1158" name="Xfm1158">\n+    <fbc:listOfGeneProducts>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_007090" fbc:label="XFCFBP8418_007090" fbc:name="XFCFBP8418_007090" metaid="_8a7d7180-d79e-4dbb-86ed-f8d7eb60e698"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_005900" fbc:label="XFCFBP8418_005900" fbc:name="XFCFBP8418_005900" metaid="_867487dd-ff57-4e93-8de9-b5ecb805e0eb"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_011590" fbc:label="XFCFBP8418_011590" fbc:name="XFCFBP8418_011590" metaid="_44606760-936c-4585-b40c-650e953a5f73"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_014620" fbc:label="XFCFBP8418_014620" fbc:name="XFCFBP8418_014620" metaid="da273da9-0f84-4615-a464-2ab71416e8cc"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_015830" fbc:label="XFCFBP8418_015830" fbc:name="XFCFBP8418_015830" metaid="_3a9239a2-8e23-4834-99a8-a7dc15f6d906"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_014980" fbc:label="XFCFBP8418_014980" fbc:name="XFCFBP8418_014980" metaid="_7f26806b-e32e-4c5c-a78d-9e094c267bbf"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_020190" fbc:label="XFCFBP8418_020190" fbc:name="XFCFBP8418_020190" metaid="_31bbb514-1d52-4727-91cb-367af12e95ca"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_004940" fbc:label="XFCFBP8418_004940" fbc:name="XFCFBP8418_004940" metaid="a2f20753-c245-477e-8363-8f5e45c50f5d"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_021160" fbc:label="XFCFBP8418_021160" fbc:name="XFCFBP8418_021160" metaid="_844bdacc-d091-457d-9c4d-846cb9aab3c1"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_025760" fbc:label="XFCFBP8418_025760" fbc:name="XFCFBP8418_025760" metaid="fd8a601e-e56f-4263-9aa7-6ed9bf85f958"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_024670" fbc:label="XFCFBP8418_024670" fbc:name="XFCFBP8418_024670" metaid="_2bbe03ce-c814-417a-b9c0-e8a1f29f4106"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_004820" fbc:label="XFCFBP8418_004820" fbc:name="XFCFBP8418_004820" metaid="_41cb6d94-13d8-461e-a217-29a68e21cd2b"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_023580" fbc:label="XFCFBP8418_023580" fbc:name="XFCFBP8418_023580" metaid="_31ff72d7-4e30-4563-85aa-4afc58dd6bee"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_000460" fbc:label="XFCFBP8418_000460" fbc:name="XFCFBP8418_000460" metaid="d7ea14e6-cd6c-4404-b973-486ade662242"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_026730" fbc:label="XFCFBP8418_026730" fbc:name="XFCFBP8418_026730" metaid="e876348e-787e-4f2a-8904-e675c2589c17"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_025640" fbc:label="XFCFBP8418_025640" fbc:name="XFCFBP8418_025640" metaid="b5b93812-bd2e-4ca8-8328-e1d35e17ac3a"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_023100" fbc:label="XFCFBP8418_023100" fbc:name="XFCFBP8418_023100" metaid="f62e0096-7b12-4db3-a7b0-2e1cfa0302c6"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_027800" fbc:label="XFCFBP8418_027800" fbc:name="XFCFBP8418_027800" metaid="_8beb93ba-34a4-4330-86bf-2c47b1cb7f2e"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_004700" fbc:label="XFCFBP8418_004700" fbc:name="XFCFBP8418_004700" metaid="_2aceabe8-5294-42eb-9d3b-2506634c68d5"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_005910" fbc:label="XFCFBP8418_005910" fbc:name="XFCFBP8418_005910" metaid="a7b44241-024e-49c1-88af-1e1108cf09eb"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_013540" fbc:label="XFCFBP8418_013540" fbc:name="XFCFBP8418_013540" metaid="_83bdba7b-0eb0-4dfb-99ed-6e365240d870"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_011240" fbc:label="XFCFBP8418_011240" fbc:name="XFCFBP8418_011240" metaid="_568b9959-99b6-49bd-86d7-04e773d940da"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_012210" fbc:label="XFCFBP8418_01221'..b'     </annotation>\n+        <fbc:geneProductAssociation>\n+          <fbc:geneProductRef fbc:geneProduct="XFCFBP8418_010590"/>\n+        </fbc:geneProductAssociation>\n+        <listOfReactants>\n+          <speciesReference constant="true" species="M_cyst_L_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_h2o_c" stoichiometry="1"/>\n+        </listOfReactants>\n+        <listOfProducts>\n+          <speciesReference constant="true" species="M_2obut_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_cys_L_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_nh4_c" stoichiometry="1"/>\n+        </listOfProducts>\n+      </reaction>\n+      <reaction fbc:lowerFluxBound="LOWER_BOUND_99999_0" fbc:upperFluxBound="UPPER_BOUND_99999_0" id="R_FUCtpp" metaid="_34363cfc-fa7f-4df4-a073-49f5befcdf50" name="R_FUCtpp" reversible="true">\n+        <notes>\n+          <body xmlns="http://www.w3.org/1999/xhtml">\n+            <p>GENE_ASSOCIATION: XFCFBP8418_018650</p>\n+            <p>SUBSYSTEM: Transport__Inner_Membrane</p>\n+            <p>EC_NUMBER: No_Assignment</p>\n+          </body>\n+        </notes>\n+        <annotation>\n+          <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:bqbiol="http://biomodels.net/biology-qualifiers/">\n+            <rdf:Description rdf:about="#_34363cfc-fa7f-4df4-a073-49f5befcdf50">\n+              <bqbiol:is>\n+                <rdf:Bag>\n+                  <rdf:li rdf:resource="http://identifiers.org/ec-code/No_Assignment"/>\n+                </rdf:Bag>\n+              </bqbiol:is>\n+            </rdf:Description>\n+          </rdf:RDF>\n+        </annotation>\n+        <fbc:geneProductAssociation>\n+          <fbc:geneProductRef fbc:geneProduct="XFCFBP8418_018650"/>\n+        </fbc:geneProductAssociation>\n+        <listOfReactants>\n+          <speciesReference constant="true" species="M_h_p" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_fuc_L_p" stoichiometry="1"/>\n+        </listOfReactants>\n+        <listOfProducts>\n+          <speciesReference constant="true" species="M_fuc_L_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_h_c" stoichiometry="1"/>\n+        </listOfProducts>\n+      </reaction>\n+      <reaction fbc:lowerFluxBound="LOWER_BOUND_0_0" fbc:upperFluxBound="UPPER_BOUND_99999_0" id="R_FACOAE120" metaid="_2691931b-9cfe-40d9-95d9-13e4ed057413" name="R_FACOAE120" reversible="false">\n+        <notes>\n+          <body xmlns="http://www.w3.org/1999/xhtml">\n+            <p>GENE_ASSOCIATION: XFCFBP8418_025070</p>\n+            <p>SUBSYSTEM: Cell_Envelope_Biosynthesis</p>\n+            <p>EC_NUMBER: 3.1.2.20</p>\n+          </body>\n+        </notes>\n+        <annotation>\n+          <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:bqbiol="http://biomodels.net/biology-qualifiers/">\n+            <rdf:Description rdf:about="#_2691931b-9cfe-40d9-95d9-13e4ed057413">\n+              <bqbiol:is>\n+                <rdf:Bag>\n+                  <rdf:li rdf:resource="http://identifiers.org/ec-code/3.1.2.20"/>\n+                </rdf:Bag>\n+              </bqbiol:is>\n+            </rdf:Description>\n+          </rdf:RDF>\n+        </annotation>\n+        <fbc:geneProductAssociation>\n+          <fbc:geneProductRef fbc:geneProduct="XFCFBP8418_025070"/>\n+        </fbc:geneProductAssociation>\n+        <listOfReactants>\n+          <speciesReference constant="true" species="M_ddcacoa_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_h2o_c" stoichiometry="1"/>\n+        </listOfReactants>\n+        <listOfProducts>\n+          <speciesReference constant="true" species="M_ddca_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_h_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_coa_c" stoichiometry="1"/>\n+        </listOfProducts>\n+      </reaction>\n+    </listOfReactions>\n+  </model>\n+</sbml>\n'
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/ChokePoint/test-data/sides.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/ChokePoint/test-data/sides.txt Wed May 17 13:26:37 2023 +0000
b
@@ -0,0 +1,4 @@
+M_xu5p_L_c
+M_ru5p_L_c
+M_ade_e
+M_ade_p
\ No newline at end of file
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/ChokePoint/test-data/testChoke.tsv
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/ChokePoint/test-data/testChoke.tsv Wed May 17 13:26:37 2023 +0000
b
b'@@ -0,0 +1,202 @@\n+R_TREtex\ttrehalose_transport_via_diffusion__extracellular_to_periplasm_\tR_TREtex\n+R_HISDr\thistidase_r\tR_HISDr\n+R_TTDCEAtexi\tR_TTDCEAtexi\tR_TTDCEAtexi\n+R_ACt2rex\tR_ACt2rex\tR_ACt2rex\n+R_GLYtex\tglycine_transport_via_diffusion__extracellular_to_periplasm_\tR_GLYtex\n+R_G3PGtex\tglycerophoglycerol_transport_via_diffusion__extracellular_to_periplasm_\tR_G3PGtex\n+R_X5PL3E\tR_X5PL3E\tR_X5PL3E\n+R_ILEtex\tL_isoleucine_transport_via_diffusion__extracellular_to_periplasm_\tR_ILEtex\n+R_PItex\tphosphate_transport_via_diffusion__extracellular_to_periplasm_\tR_PItex\n+R_12DGR141tipp\tR_12DGR141tipp\tR_12DGR141tipp\n+R_6PDDGLUCA\t6_phospho_5_dehydro_2_deoxy_D_gluconate_aldolase\tR_6PDDGLUCA\n+R_ADEtex\tadenine_transport_via_diffusion__extracellular_to_periplasm_\tR_ADEtex\n+R_DB4PS\t3_4_Dihydroxy_2_butanone_4_phosphate_synthase\tR_DB4PS\n+R_SPMDtex\tspermidine_transport_via_diffusion__extracellular_to_periplasm_\tR_SPMDtex\n+R_TSULtex\tthiosulfate_transport_via_diffusion__extracellular_to_periplasm_\tR_TSULtex\n+R_FE3tex\tiron__III__transport_via_diffusion__extracellular_to_periplasm_\tR_FE3tex\n+R_TRPS3r\tR_TRPS3r\tR_TRPS3r\n+R_GUAtpp\tR_GUAtpp\tR_GUAtpp\n+R_PROtex\tL_proline_transport_via_diffusion__extracellular_to_periplasm_\tR_PROtex\n+R_CO2tex\tCO2_transport_via_diffusion__extracellular_to_periplasm_\tR_CO2tex\n+R_COBALT2tex\tcobalt__Co_2__transport_via_diffusion__extracellular_to_periplasm_\tR_COBALT2tex\n+R_HDCEAtexi\tR_HDCEAtexi\tR_HDCEAtexi\n+R_MSO3tex\tmethanesulfonate_transport_via_diffusion__extracellular_to_periplasm_\tR_MSO3tex\n+R_GLYCLTt4ex\tR_GLYCLTt4ex\tR_GLYCLTt4ex\n+R_G3PEtex\tglycero_3_phosphoethanolamine_transport_via_diffusion__extracellular_to_periplasm_\tR_G3PEtex\n+R_MCTP1App\tmurein_crosslinking_transpeptidase_1A__A2pm__D_ala___periplasm_\tR_MCTP1App\n+R_OMMBLHX\t2_Octaprenyl_3_methyl_6_methoxy_1_4_benzoquinol_hydroxylase\tR_OMMBLHX\n+R_VALtex\tL_valine_transport_via_diffusion__extracellular_to_periplasm_\tR_VALtex\n+R_OAAtex\tR_OAAtex\tR_OAAtex\n+R_GLNtex\tL_glutamine_transport_via_diffusion__extracellular_to_periplasm_\tR_GLNtex\n+R_12DGR180tipp\tR_12DGR180tipp\tR_12DGR180tipp\n+R_PMANM\tphosphomannomutase\tR_PMANM\n+R_PPM\tR_PPM\tR_PPM\n+R_NACtex\tNicotinic_acid_transport_via_diffusion__extracellular_to_periplasm_\tR_NACtex\n+R_GLYC2Ptex\tsn_Glycerol_2_phosphate_transport_via_diffusion__extracellular_to_periplasm_\tR_GLYC2Ptex\n+R_UREAtpp\tUrea_transport_via_facilitate_diffusion__periplasm_\tR_UREAtpp\n+R_CA2tex\tR_CA2tex\tR_CA2tex\n+R_MCTP1Bpp\tmurein_crosslinking_transpeptidase_1B__A2pm__A2pm___periplasm_\tR_MCTP1Bpp\n+R_H2Stex\tHydrogen_sulfide_transport_via_diffusion__extracellular_to_periplasm_\tR_H2Stex\n+R_GLYCt\tR_GLYCt\tR_GLYCt\n+R_ZN2tex\tR_ZN2tex\tR_ZN2tex\n+R_dextrin_DEC_e_\tR_dextrin_DEC_e_\tR_dextrin_DEC_e_\n+R_H2tex\tR_H2tex\tR_H2tex\n+R_PYRt2rtex\tR_PYRt2rtex\tR_PYRt2rtex\n+R_AIRC3\tphosphoribosylaminoimidazole_carboxylase__mutase_rxn_\tR_AIRC3\n+R_TTDCAtex\tTetradecanoate_transport_via_diffusion__extracellular_to_periplasm_\tR_TTDCAtex\n+R_CLPNS181pp\tcardiolipin_synthase__periplasmic__n_C18_1_\tR_CLPNS181pp\n+R_HYXNtex\tHypoxanthine_transport_via_diffusion__extracellular_to_periplasm_\tR_HYXNtex\n+R_INSDH\t2_keto_myo_inositol_dehydratase\tR_INSDH\n+R_OTOTt2_2tex\tR_OTOTt2_2tex\tR_OTOTt2_2tex\n+R_TDPGDH\tdTDPglucose_4_6_dehydratase\tR_TDPGDH\n+R_DHNPTE\tR_DHNPTE\tR_DHNPTE\n+R_3HPPtex\t3_hydroxypropionate_transport_via_diffusion__extracellular_to_periplasm_\tR_3HPPtex\n+R_SULtex\tR_SULtex\tR_SULtex\n+R_INSTtex\tinositol_transport_via_diffusion__extracellular_to_periplasm_\tR_INSTtex\n+R_MTRI\tR_MTRI\tR_MTRI\n+R_Bztpp\tR_Bztpp\tR_Bztpp\n+R_H2tpp\tR_H2tpp\tR_H2tpp\n+R_SERtex\tL_serine_transport_via_diffusion__extracellular_to_periplasm_\tR_SERtex\n+R_CD2tex\tcadmium__Cd_2__transport_via_diffusion__extracellular_to_periplasm_\tR_CD2tex\n+R_CHTNtex\tR_CHTNtex\tR_CHTNtex\n+R_XYLtex\tR_XYLtex\tR_XYLtex\n+R_MPTG\tmurein_polymerizing_transglycosylase\tR_MPTG\n+R_MECDPS\t2_C_methyl_D_erythritol_2_4_cyclodiphosphate_synthase\tR_MECDPS\n+R_12DGR161tipp\tR_12DGR161tipp\tR_12DGR161tipp\n+R_SLNTtex\tR_SLNTtex\tR_SLNTtex\n+R_G3PCtex\tglycero_3_phosphocholine_transport_via'..b'C14_0_\tR_3HAD140\n+R_T2DECAI\ttrans_2_decenoyl_ACP_isomerase\tR_T2DECAI\n+R_METSOX1tex\tR_METSOX1tex\tR_METSOX1tex\n+R_CLPNS120pp\tcardiolipin_synthase__periplasmic__n_C12_0_\tR_CLPNS120pp\n+R_DDCAtex\tFatty_acid__dodecanoate__transport_via_diffusion__extracellular_to_periplasm_\tR_DDCAtex\n+R_FUCtex\tR_FUCtex\tR_FUCtex\n+R_LEUtex\tL_leucine_transport_via_diffusion__extracellular_to_periplasm_\tR_LEUtex\n+R_FORtppi\tformate_transport_via_diffusion__cytoplasm_to_periplasm_\tR_FORtppi\n+R_CHORM\tchorismate_mutase\tR_CHORM\n+R_3HAD121\t3_hydroxyacyl__acyl_carrier_protein__dehydratase__n_C12_1_\tR_3HAD121\n+R_GLYALDtex\tR_GLYALDtex\tR_GLYALDtex\n+R_RIBtex\tR_RIBtex\tR_RIBtex\n+R_OMPHHX\t2_octaprenyl_6_methoxyphenol_hydroxylase\tR_OMPHHX\n+R_URAtex\tR_URAtex\tR_URAtex\n+R_CITt3tex\tR_CITt3tex\tR_CITt3tex\n+R_3HAD40\t3_hydroxyacyl__acyl_carrier_protein__dehydratase__n_C4_0_\tR_3HAD40\n+R_NO3tex\tnitrate_transport_via_diffusion__extracellular_to_periplasm_\tR_NO3tex\n+R_MG2tex\tmagnesium__Mg_2__transport_via_diffusion__extracellular_to_periplasm_\tR_MG2tex\n+R_NI2t3tex\tR_NI2t3tex\tR_NI2t3tex\n+R_GLYALDtpp\tR_GLYALDtpp\tR_GLYALDtpp\n+R_GLUR\tglutamate_racemase\tR_GLUR\n+R_HCO3tex\tR_HCO3tex\tR_HCO3tex\n+R_3HAD180\t3_hydroxyacyl__acyl_carrier_protein__dehydratase__n_C18_0_\tR_3HAD180\n+R_UDCPDPtppi\tR_UDCPDPtppi\tR_UDCPDPtppi\n+R_OGMEACPD\t3_Oxo_glutaryl__ACP__methyl_ester_dehydratase\tR_OGMEACPD\n+R_CLtex\tchloride__Cl_1__transport_via_diffusion__extracellular_to_periplasm_\tR_CLtex\n+R_GLCGSD_c\tR_GLCGSD_c\tR_GLCGSD_c\n+R_AKGt2rtex\tR_AKGt2rtex\tR_AKGt2rtex\n+R_14GLUCANtex\tR_14GLUCANtex\tR_14GLUCANtex\n+R_St\tR_St\tR_St\n+R_OPHHX\t2_Octaprenylphenol_hydroxylase\tR_OPHHX\n+R_CU2_bd_CopA\tCopper_sequestration_by_cop_system\tR_CU2_bd_CopA\n+R_METDtex\tR_METDtex\tR_METDtex\n+R_NOtex\tnitric_oxide_transport_via_diffusion__extracellular_to_periplasm_\tR_NOtex\n+R_OCDCAtexi\tR_OCDCAtexi\tR_OCDCAtexi\n+R_DGLUISO\t5_deoxy_D_glucuronic_acid_isomerase\tR_DGLUISO\n+R_CHRPL\tChorismate_pyruvate_lyase\tR_CHRPL\n+R_HDCAtex\tHexadecanoate_transport_via_diffusion__extracellular_to_periplasm_\tR_HDCAtex\n+R_CU2tpp\tcopper_transport_in_via_permease__no_H__\tR_CU2tpp\n+R_ADNtex\tAdenosine_transport_via_diffusion__extracellular_to_periplasm_\tR_ADNtex\n+R_GLYC3Ptex\tsn_Glycerol_3_phosphate_transport_via_diffusion__extracellular_to_periplasm_\tR_GLYC3Ptex\n+R_A5PISO\tarabinose_5_phosphate_isomerase\tR_A5PISO\n+R_OCDCEAtexi\tR_OCDCEAtexi\tR_OCDCEAtexi\n+R_GUAtex\tR_GUAtex\tR_GUAtex\n+R_METtex\tL_methionine_transport_via_diffusion__extracellular_to_periplasm_\tR_METtex\n+R_3HAD80\t3_hydroxyacyl__acyl_carrier_protein__dehydratase__n_C8_0_\tR_3HAD80\n+R_GMAND\tGDP_D_mannose_dehydratase\tR_GMAND\n+R_12DGR120tipp\tR_12DGR120tipp\tR_12DGR120tipp\n+R_Mntex\tR_Mntex\tR_Mntex\n+R_CLPNS140pp\tcardiolipin_synthase__periplasmic__n_C14_0_\tR_CLPNS140pp\n+R_RBFSb\triboflavin_synthase\tR_RBFSb\n+R_EPStppXF\tR_EPStppXF\tR_EPStppXF\n+R_QUIN2tpp\tR_QUIN2tpp\tR_QUIN2tpp\n+R_MLDEP1pp\tmurein_L_D_endopeptidase__murein3px3p___periplasm_\tR_MLDEP1pp\n+R_MALDt2_2tex\tR_MALDt2_2tex\tR_MALDt2_2tex\n+R_CLPNS161pp\tcardiolipin_synthase__periplasmic__n_C16_1_\tR_CLPNS161pp\n+R_Bztex\tR_Bztex\tR_Bztex\n+R_NMNtex\tR_NMNtex\tR_NMNtex\n+R_FE2tex\tiron__II__transport_via_diffusion__extracellular_to_periplasm_\tR_FE2tex\n+R_3HAD181\t3_hydroxyacyl__acyl_carrier_protein__dehydratase__n_C18_1_\tR_3HAD181\n+R_DAPtex\tR_DAPtex\tR_DAPtex\n+R_GAMtex\tR_GAMtex\tR_GAMtex\n+R_PHEMEtiex\tR_PHEMEtiex\tR_PHEMEtiex\n+R_UDPGLCUR4EP\tR_UDPGLCUR4EP\tR_UDPGLCUR4EP\n+R_FORtex\tformate_transport_via_diffusion__extracellular_to_periplasm_\tR_FORtex\n+R_BTNt2tex\tR_BTNt2tex\tR_BTNt2tex\n+R_3HAD160\t3_hydroxyacyl__acyl_carrier_protein__dehydratase__n_C16_0_\tR_3HAD160\n+R_RBP4E\tR_RBP4E\tR_RBP4E\n+R_THRtex\tL_threonine_transport_via_diffusion__extracellular_to_periplasm_\tR_THRtex\n+R_INDOLEtex\tR_INDOLEtex\tR_INDOLEtex\n+R_12DGR160tipp\tR_12DGR160tipp\tR_12DGR160tipp\n+R_PGAMT\tphosphoglucosamine_mutase\tR_PGAMT\n+R_CLPNS160pp\tcardiolipin_synthase__periplasmic__n_C16_0_\tR_CLPNS160pp\n+R_DHNPA2\tdihydroneopterin_aldolase\tR_DHNPA2\n+R_CLtpp\tR_CLtpp\tR_CLtpp\n+R_ALAt2tex\tR_ALAt2tex\tR_ALAt2tex\n+R_ETOHtrpp\tR_ETOHtrpp\tR_ETOHtrpp\n'
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/CompoundNet/CompoundNet.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/CompoundNet/CompoundNet.xml Wed May 17 13:26:37 2023 +0000
[
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tool id="met4j_CompoundNet" name="CompoundNet" version="1.3.0">
+  <description>Advanced creation of a compound graph representation of a SBML file content</description>
+  <xrefs>
+    <xref type="bio.tools">met4j</xref>
+  </xrefs>
+  <requirements>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.3.0</container>
+  </requirements>
+  <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh networkAnalysis.CompoundNet -s "$inputPath"
+#if str($inputSide) != 'None':
+ -sc "$inputSide"
+#end if
+#if str($mergingStrat):
+ -mc "$mergingStrat"
+#end if
+ $mergeEdges
+ $removeIsolated
+ $degree
+#if str($weightFile) != 'None':
+ -cw "$weightFile"
+#end if
+ $undirected
+ $computeWeight
+ $asMatrix
+ -o "$outputPath"
+]]></command>
+  <inputs>
+    <param argument="-s" format="sbml" label="input SBML file" name="inputPath" optional="false" type="data" value=""/>
+    <param argument="-sc" format="txt" label="input Side compound file" name="inputSide" optional="true" type="data" value=""/>
+    <param argument="-mc" label="merge compartments. Use names if consistent and unambiguous across compartments, or identifiers if compartment suffix is present (id in form &quot;xxx_y&quot; with xxx as base identifier and y as compartment label)." name="mergingStrat" optional="true" type="select" value="no">
+      <option selected="true" value="no">no</option>
+      <option value="by_name">by_name</option>
+      <option value="by_id">by_id</option>
+    </param>
+    <param argument="-me" checked="false" falsevalue="" label="merge parallel edges to produce a simple graph" name="mergeEdges" truevalue="-me" type="boolean" value="false"/>
+    <param argument="-ri" checked="false" falsevalue="" label="remove isolated nodes" name="removeIsolated" truevalue="-ri" type="boolean" value="false"/>
+    <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="-un" checked="false" falsevalue="" label="create as undirected" name="undirected" truevalue="-un" type="boolean" value="false"/>
+    <param argument="-tp" checked="false" falsevalue="" label="set weight as random walk transition probability, normalized by reaction" name="computeWeight" truevalue="-tp" type="boolean" value="false"/>
+    <param argument="-am" checked="false" falsevalue="" label="export as matrix (implies simple graph conversion). Default export as GML file" name="asMatrix" truevalue="-am" type="boolean" value="false"/>
+  </inputs>
+  <outputs>
+    <data format="gml" name="outputPath"/>
+  </outputs>
+  <tests>
+    <test>
+      <param name="inputPath" value="XF_network.sbml"/>
+      <param name="inputSide" value="XF_network_C_Side.tab"/>
+      <output name="outputPath">
+        <assert_contents>
+          <has_line_matching expression=".*node.*" n="1101"/>
+          <has_line_matching expression=".*edge.*" n="5581"/>
+        </assert_contents>
+      </output>
+    </test>
+    <test>
+      <param name="inputPath" value="XF_network.sbml"/>
+      <param name="inputSide" value="XF_network_C_Side.tab"/>
+      <param name="undirected" value="true"/>
+      <param name="computeWeight" value="true"/>
+      <param name="removeIsolated" value="true"/>
+      <param name="degree" value="true"/>
+      <param name="mergingStrat" value="by_id"/>
+      <output name="outputPath">
+        <assert_contents>
+          <has_line_matching expression=".*node.*" n="793"/>
+          <has_line_matching expression=".*edge.*" n="9372"/>
+        </assert_contents>
+      </output>
+    </test>
+  </tests>
+  <help><![CDATA[Metabolic networks used for quantitative analysis often contain links that are irrelevant for graph-based structural analysis. For example, inclusion of side compounds or modelling artifacts such as 'biomass' nodes.
+While Carbon Skeleton Graph offer a relevant alternative topology for graph-based analysis, it requires compounds' structure information, usually not provided in model, and difficult to retrieve for model with sparse cross-reference annotations.
+In contrary to the SBML2Graph app that performs a raw conversion of the SBML content, the present app propose a fine-tuned creation of compound graph from predefined list of side compounds and degree² weighting to get relevant structure without structural data.This app also enable Markov-chain based analysis of metabolic networks by computing reaction-normalized transition probabilities on the network.]]></help>
+  <citations/>
+</tool>
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/CompoundNet/test-data/XF_network.sbml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/CompoundNet/test-data/XF_network.sbml Wed May 17 13:26:37 2023 +0000
b
b'@@ -0,0 +1,47267 @@\n+<?xml version="1.0" encoding="UTF-8"?>\n+<sbml fbc:required="false" groups:required="false" level="3" version="2" xmlns="http://www.sbml.org/sbml/level3/version2/core" xmlns:fbc="http://www.sbml.org/sbml/level3/version1/fbc/version2" xmlns:groups="http://www.sbml.org/sbml/level3/version1/groups/version1">\n+  <model fbc:strict="true" id="Xfm1158" metaid="Xfm1158" name="Xfm1158">\n+    <fbc:listOfGeneProducts>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_007090" fbc:label="XFCFBP8418_007090" fbc:name="XFCFBP8418_007090" metaid="_8a7d7180-d79e-4dbb-86ed-f8d7eb60e698"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_005900" fbc:label="XFCFBP8418_005900" fbc:name="XFCFBP8418_005900" metaid="_867487dd-ff57-4e93-8de9-b5ecb805e0eb"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_011590" fbc:label="XFCFBP8418_011590" fbc:name="XFCFBP8418_011590" metaid="_44606760-936c-4585-b40c-650e953a5f73"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_014620" fbc:label="XFCFBP8418_014620" fbc:name="XFCFBP8418_014620" metaid="da273da9-0f84-4615-a464-2ab71416e8cc"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_015830" fbc:label="XFCFBP8418_015830" fbc:name="XFCFBP8418_015830" metaid="_3a9239a2-8e23-4834-99a8-a7dc15f6d906"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_014980" fbc:label="XFCFBP8418_014980" fbc:name="XFCFBP8418_014980" metaid="_7f26806b-e32e-4c5c-a78d-9e094c267bbf"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_020190" fbc:label="XFCFBP8418_020190" fbc:name="XFCFBP8418_020190" metaid="_31bbb514-1d52-4727-91cb-367af12e95ca"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_004940" fbc:label="XFCFBP8418_004940" fbc:name="XFCFBP8418_004940" metaid="a2f20753-c245-477e-8363-8f5e45c50f5d"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_021160" fbc:label="XFCFBP8418_021160" fbc:name="XFCFBP8418_021160" metaid="_844bdacc-d091-457d-9c4d-846cb9aab3c1"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_025760" fbc:label="XFCFBP8418_025760" fbc:name="XFCFBP8418_025760" metaid="fd8a601e-e56f-4263-9aa7-6ed9bf85f958"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_024670" fbc:label="XFCFBP8418_024670" fbc:name="XFCFBP8418_024670" metaid="_2bbe03ce-c814-417a-b9c0-e8a1f29f4106"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_004820" fbc:label="XFCFBP8418_004820" fbc:name="XFCFBP8418_004820" metaid="_41cb6d94-13d8-461e-a217-29a68e21cd2b"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_023580" fbc:label="XFCFBP8418_023580" fbc:name="XFCFBP8418_023580" metaid="_31ff72d7-4e30-4563-85aa-4afc58dd6bee"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_000460" fbc:label="XFCFBP8418_000460" fbc:name="XFCFBP8418_000460" metaid="d7ea14e6-cd6c-4404-b973-486ade662242"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_026730" fbc:label="XFCFBP8418_026730" fbc:name="XFCFBP8418_026730" metaid="e876348e-787e-4f2a-8904-e675c2589c17"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_025640" fbc:label="XFCFBP8418_025640" fbc:name="XFCFBP8418_025640" metaid="b5b93812-bd2e-4ca8-8328-e1d35e17ac3a"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_023100" fbc:label="XFCFBP8418_023100" fbc:name="XFCFBP8418_023100" metaid="f62e0096-7b12-4db3-a7b0-2e1cfa0302c6"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_027800" fbc:label="XFCFBP8418_027800" fbc:name="XFCFBP8418_027800" metaid="_8beb93ba-34a4-4330-86bf-2c47b1cb7f2e"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_004700" fbc:label="XFCFBP8418_004700" fbc:name="XFCFBP8418_004700" metaid="_2aceabe8-5294-42eb-9d3b-2506634c68d5"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_005910" fbc:label="XFCFBP8418_005910" fbc:name="XFCFBP8418_005910" metaid="a7b44241-024e-49c1-88af-1e1108cf09eb"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_013540" fbc:label="XFCFBP8418_013540" fbc:name="XFCFBP8418_013540" metaid="_83bdba7b-0eb0-4dfb-99ed-6e365240d870"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_011240" fbc:label="XFCFBP8418_011240" fbc:name="XFCFBP8418_011240" metaid="_568b9959-99b6-49bd-86d7-04e773d940da"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_012210" fbc:label="XFCFBP8418_01221'..b'     </annotation>\n+        <fbc:geneProductAssociation>\n+          <fbc:geneProductRef fbc:geneProduct="XFCFBP8418_010590"/>\n+        </fbc:geneProductAssociation>\n+        <listOfReactants>\n+          <speciesReference constant="true" species="M_cyst_L_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_h2o_c" stoichiometry="1"/>\n+        </listOfReactants>\n+        <listOfProducts>\n+          <speciesReference constant="true" species="M_2obut_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_cys_L_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_nh4_c" stoichiometry="1"/>\n+        </listOfProducts>\n+      </reaction>\n+      <reaction fbc:lowerFluxBound="LOWER_BOUND_99999_0" fbc:upperFluxBound="UPPER_BOUND_99999_0" id="R_FUCtpp" metaid="_34363cfc-fa7f-4df4-a073-49f5befcdf50" name="R_FUCtpp" reversible="true">\n+        <notes>\n+          <body xmlns="http://www.w3.org/1999/xhtml">\n+            <p>GENE_ASSOCIATION: XFCFBP8418_018650</p>\n+            <p>SUBSYSTEM: Transport__Inner_Membrane</p>\n+            <p>EC_NUMBER: No_Assignment</p>\n+          </body>\n+        </notes>\n+        <annotation>\n+          <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:bqbiol="http://biomodels.net/biology-qualifiers/">\n+            <rdf:Description rdf:about="#_34363cfc-fa7f-4df4-a073-49f5befcdf50">\n+              <bqbiol:is>\n+                <rdf:Bag>\n+                  <rdf:li rdf:resource="http://identifiers.org/ec-code/No_Assignment"/>\n+                </rdf:Bag>\n+              </bqbiol:is>\n+            </rdf:Description>\n+          </rdf:RDF>\n+        </annotation>\n+        <fbc:geneProductAssociation>\n+          <fbc:geneProductRef fbc:geneProduct="XFCFBP8418_018650"/>\n+        </fbc:geneProductAssociation>\n+        <listOfReactants>\n+          <speciesReference constant="true" species="M_h_p" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_fuc_L_p" stoichiometry="1"/>\n+        </listOfReactants>\n+        <listOfProducts>\n+          <speciesReference constant="true" species="M_fuc_L_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_h_c" stoichiometry="1"/>\n+        </listOfProducts>\n+      </reaction>\n+      <reaction fbc:lowerFluxBound="LOWER_BOUND_0_0" fbc:upperFluxBound="UPPER_BOUND_99999_0" id="R_FACOAE120" metaid="_2691931b-9cfe-40d9-95d9-13e4ed057413" name="R_FACOAE120" reversible="false">\n+        <notes>\n+          <body xmlns="http://www.w3.org/1999/xhtml">\n+            <p>GENE_ASSOCIATION: XFCFBP8418_025070</p>\n+            <p>SUBSYSTEM: Cell_Envelope_Biosynthesis</p>\n+            <p>EC_NUMBER: 3.1.2.20</p>\n+          </body>\n+        </notes>\n+        <annotation>\n+          <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:bqbiol="http://biomodels.net/biology-qualifiers/">\n+            <rdf:Description rdf:about="#_2691931b-9cfe-40d9-95d9-13e4ed057413">\n+              <bqbiol:is>\n+                <rdf:Bag>\n+                  <rdf:li rdf:resource="http://identifiers.org/ec-code/3.1.2.20"/>\n+                </rdf:Bag>\n+              </bqbiol:is>\n+            </rdf:Description>\n+          </rdf:RDF>\n+        </annotation>\n+        <fbc:geneProductAssociation>\n+          <fbc:geneProductRef fbc:geneProduct="XFCFBP8418_025070"/>\n+        </fbc:geneProductAssociation>\n+        <listOfReactants>\n+          <speciesReference constant="true" species="M_ddcacoa_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_h2o_c" stoichiometry="1"/>\n+        </listOfReactants>\n+        <listOfProducts>\n+          <speciesReference constant="true" species="M_ddca_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_h_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_coa_c" stoichiometry="1"/>\n+        </listOfProducts>\n+      </reaction>\n+    </listOfReactions>\n+  </model>\n+</sbml>\n'
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/CompoundNet/test-data/XF_network_C_Side.tab
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/CompoundNet/test-data/XF_network_C_Side.tab Wed May 17 13:26:37 2023 +0000
b
@@ -0,0 +1,6 @@
+M_atp_c
+M_h2o_c
+M_pi_c
+M_adp_c
+M_ppi_c
+M_h_c
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/DecomposeSBML/DecomposeSBML.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/DecomposeSBML/DecomposeSBML.xml Wed May 17 13:26:37 2023 +0000
[
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tool id="met4j_DecomposeSBML" name="DecomposeSBML" version="1.3.0">
+  <description>Parse SBML to render list of composing entities: metabolites, reactions, genes and others.</description>
+  <xrefs>
+    <xref type="bio.tools">met4j</xref>
+  </xrefs>
+  <requirements>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.3.0</container>
+  </requirements>
+  <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh attributes.DecomposeSBML -i "$sbml"
+ $printMetabolites
+ $printReactions
+ $printCompartments
+ $printPathways
+ $printGenes
+ $noTypeCol
+ -o "$outputFile"
+]]></command>
+  <inputs>
+    <param argument="-i" format="sbml" label="Input SBML file" name="sbml" optional="false" type="data" value=""/>
+    <param argument="-m" checked="false" falsevalue="" label="Extract Metabolites" name="printMetabolites" truevalue="-m" type="boolean" value="false"/>
+    <param argument="-r" checked="false" falsevalue="" label="Extract Reactions" name="printReactions" truevalue="-r" type="boolean" value="false"/>
+    <param argument="-c" checked="false" falsevalue="" label="Extract Compartments" name="printCompartments" truevalue="-c" type="boolean" value="false"/>
+    <param argument="-p" checked="false" falsevalue="" label="Extract Pathways" name="printPathways" truevalue="-p" type="boolean" value="false"/>
+    <param argument="-g" checked="false" falsevalue="" label="Extract Genes" name="printGenes" truevalue="-g" type="boolean" value="false"/>
+    <param argument="-nt" checked="false" falsevalue="" label="Do not output type column" name="noTypeCol" truevalue="-nt" type="boolean" value="false"/>
+  </inputs>
+  <outputs>
+    <data format="tsv" name="outputFile"/>
+  </outputs>
+  <tests>
+    <test>
+      <param name="sbml" value="Human-GEM_pathways.xml"/>
+      <output ftype="tsv" name="outputFile">
+        <assert_contents>
+          <has_text_matching expression="GENE" n="86"/>
+          <has_text_matching expression="METABOLITE" n="111"/>
+          <has_text_matching expression="REACTION" n="75"/>
+          <has_text_matching expression="PATHWAY" n="3"/>
+          <has_text_matching expression="COMPARTMENT" n="5"/>
+        </assert_contents>
+      </output>
+    </test>
+    <test>
+      <param name="sbml" value="Human-GEM_pathways.xml"/>
+      <param name="printReactions" value="true"/>
+      <param name="printMetabolites" value="true"/>
+      <param name="printGenes" value="true"/>
+      <param name="printCompartments" value="true"/>
+      <param name="noTypeCol" value="true"/>
+      <output ftype="tsv" name="outputFile">
+        <assert_contents>
+          <has_n_lines n="277"/>
+        </assert_contents>
+      </output>
+    </test>
+  </tests>
+  <help><![CDATA[Parse SBML to render list of composing entities: metabolites, reactions, genes, pathways and compartments. The output file is a tsv with two columns, one with entities identifiers, and one with the entity type. If no entity type is selected, by default all of them are taken into account. Only identifiers are written, attributes can be extracted from dedicated apps or from the SBML2Tab.]]></help>
+  <citations/>
+</tool>
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/DecomposeSBML/test-data/Human-GEM_pathways.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/DecomposeSBML/test-data/Human-GEM_pathways.xml Wed May 17 13:26:37 2023 +0000
b
b'@@ -0,0 +1,7661 @@\n+<?xml version="1.0" encoding="UTF-8"?>\r\n+<sbml fbc:required="false" groups:required="false" level="3" version="2" xmlns="http://www.sbml.org/sbml/level3/version2/core" xmlns:fbc="http://www.sbml.org/sbml/level3/version1/fbc/version2" xmlns:groups="http://www.sbml.org/sbml/level3/version1/groups/version1">\r\n+  <model fbc:strict="true" id="HumanGEM" metaid="HumanGEM" name="Generic genome-scale metabolic model of Homo sapiens">\r\n+    <notes>\r\n+      <body xmlns="http://www.w3.org/1999/xhtml">\r\n+        <p>Genome-scale metabolic models are valuable tools to study metabolism and provide a scaffold for the integrative analysis of omics data. This is the latest version of Human-GEM, which is a genome-scale metabolic model of a generic human cell. The objective of Human-GEM is to serve as a community model for enabling integrative and mechanistic studies of human metabolism.</p>\r\n+      </body>\r\n+    </notes>\r\n+    <annotation>\r\n+      <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:bqbiol="http://biomodels.net/biology-qualifiers/">\r\n+        <rdf:Description rdf:about="#HumanGEM">\r\n+          <bqbiol:is>\r\n+            <rdf:Bag>\r\n+              <rdf:li rdf:resource="https://identifiers.org/taxonomy/9606"/>\r\n+            </rdf:Bag>\r\n+          </bqbiol:is>\r\n+        </rdf:Description>\r\n+      </rdf:RDF>\r\n+    </annotation>\r\n+    <fbc:listOfObjectives fbc:activeObjective="obj">\r\n+      <fbc:objective fbc:id="obj" fbc:type="maximize">\r\n+        <fbc:listOfFluxObjectives>\r\n+          <fbc:fluxObjective fbc:coefficient="1" fbc:reaction="R_biomass_human"/>\r\n+        </fbc:listOfFluxObjectives>\r\n+      </fbc:objective>\r\n+    </fbc:listOfObjectives>\r\n+    <fbc:listOfGeneProducts>\r\n+      <fbc:geneProduct fbc:id="ENSG00000023697" fbc:label="ENSG00000023697" fbc:name="ENSG00000023697" metaid="_12915ddf-e017-4a38-a80d-e9982f8ac7cc">\r\n+        <notes>\r\n+          <body xmlns="http://www.w3.org/1999/xhtml">\r\n+            <p>ensembl: ENSG00000023697</p>\r\n+            <p>hgnc.symbol: DERA</p>\r\n+            <p>ncbigene: 51071</p>\r\n+            <p>uniprot: Q9Y315</p>\r\n+          </body>\r\n+        </notes>\r\n+      </fbc:geneProduct>\r\n+      <fbc:geneProduct fbc:id="ENSG00000130313" fbc:label="ENSG00000130313" fbc:name="ENSG00000130313" metaid="b7f31dab-0da6-4c9e-9c76-6ea1952d4f6b">\r\n+        <notes>\r\n+          <body xmlns="http://www.w3.org/1999/xhtml">\r\n+            <p>ensembl: ENSG00000130313</p>\r\n+            <p>hgnc.symbol: PGLS</p>\r\n+            <p>ncbigene: 25796</p>\r\n+            <p>uniprot: O95336</p>\r\n+          </body>\r\n+        </notes>\r\n+      </fbc:geneProduct>\r\n+      <fbc:geneProduct fbc:id="ENSG00000157353" fbc:label="ENSG00000157353" fbc:name="ENSG00000157353" metaid="f2bfd1a8-b479-4718-bb3f-030aed87a562">\r\n+        <notes>\r\n+          <body xmlns="http://www.w3.org/1999/xhtml">\r\n+            <p>ensembl: ENSG00000157353</p>\r\n+            <p>hgnc.symbol: FCSK</p>\r\n+            <p>ncbigene: 197258</p>\r\n+            <p>uniprot: Q8N0W3</p>\r\n+          </body>\r\n+        </notes>\r\n+      </fbc:geneProduct>\r\n+      <fbc:geneProduct fbc:id="ENSG00000114268" fbc:label="ENSG00000114268" fbc:name="ENSG00000114268" metaid="d1ad0711-77a6-4e33-85ba-dff0e0e56b5c">\r\n+        <notes>\r\n+          <body xmlns="http://www.w3.org/1999/xhtml">\r\n+            <p>ensembl: ENSG00000114268</p>\r\n+            <p>hgnc.symbol: PFKFB4</p>\r\n+            <p>ncbigene: 5210</p>\r\n+            <p>uniprot: Q16877</p>\r\n+          </body>\r\n+        </notes>\r\n+      </fbc:geneProduct>\r\n+      <fbc:geneProduct fbc:id="ENSG00000197417" fbc:label="ENSG00000197417" fbc:name="ENSG00000197417" metaid="_36aac772-72a3-44fd-97f3-84213d36d9e2">\r\n+        <notes>\r\n+          <body xmlns="http://www.w3.org/1999/xhtml">\r\n+            <p>ensembl: ENSG00000197417</p>\r\n+            <p>hgnc.symbol: SHPK</p>\r\n+            <p>ncbigene: 23729</p>\r\n+            <p>uniprot: Q9UHJ6</p>\r\n+          </body>\r\n+        </notes>\r\n+      </fbc:geneProduct>\r\n+  '..b'    </rdf:Bag>\r\n+              </bqbiol:is>\r\n+              <bqbiol:isDescribedBy>\r\n+                <rdf:Bag>\r\n+                  <rdf:li rdf:resource="https://identifiers.org/pubmed/234468"/>\r\n+                  <rdf:li rdf:resource="https://identifiers.org/pubmed/2843500"/>\r\n+                  <rdf:li rdf:resource="https://identifiers.org/pubmed/15234337"/>\r\n+                </rdf:Bag>\r\n+              </bqbiol:isDescribedBy>\r\n+            </rdf:Description>\r\n+          </rdf:RDF>\r\n+        </annotation>\r\n+        <fbc:geneProductAssociation>\r\n+          <fbc:or>\r\n+            <fbc:geneProductRef fbc:geneProduct="ENSG00000197713"/>\r\n+            <fbc:geneProductRef fbc:geneProduct="ENSG00000235376"/>\r\n+          </fbc:or>\r\n+        </fbc:geneProductAssociation>\r\n+        <listOfReactants>\r\n+          <speciesReference constant="true" species="M_m01761c" stoichiometry="1"/>\r\n+        </listOfReactants>\r\n+        <listOfProducts>\r\n+          <speciesReference constant="true" species="M_m02846c" stoichiometry="1"/>\r\n+        </listOfProducts>\r\n+      </reaction>\r\n+      <reaction fbc:lowerFluxBound="LOWER_BOUND_0_0" fbc:upperFluxBound="UPPER_BOUND_1000_0" id="R_HMR_4356" metaid="e6efa094-5aeb-412c-8390-f6707d0794e0" name="R_HMR_4356" reversible="false" sboTerm="SBO:0000176">\r\n+        <notes>\r\n+          <body xmlns="http://www.w3.org/1999/xhtml">\r\n+            <p>Confidence Level: 0</p>\r\n+            <p>AUTHORS: PMID:5114731;PMID:5655259;PMID:6054986</p>\r\n+            <p>ec-code: 4.1.2.13</p>\r\n+            <p>metanetx.reaction: MNXR99460</p>\r\n+            <p>kegg.reaction: R02568</p>\r\n+            <p>bigg.reaction: FBA2</p>\r\n+            <p>SUBSYSTEM: Fructose and mannose metabolism</p>\r\n+            <p>EC_NUMBER: 4.1.2.13</p>\r\n+            <p>pmids: 5114731,5655259,6054986</p>\r\n+            <p>GENE_ASSOCIATION: ( ENSG00000109107 ) OR ( ENSG00000136872 ) OR ( ENSG00000149925 ) OR ( ENSG00000285043 )</p>\r\n+          </body>\r\n+        </notes>\r\n+        <annotation>\r\n+          <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:bqbiol="http://biomodels.net/biology-qualifiers/">\r\n+            <rdf:Description rdf:about="#e6efa094-5aeb-412c-8390-f6707d0794e0">\r\n+              <bqbiol:is>\r\n+                <rdf:Bag>\r\n+                  <rdf:li rdf:resource="https://identifiers.org/ec-code/4.1.2.13"/>\r\n+                  <rdf:li rdf:resource="https://identifiers.org/metanetx.reaction/MNXR99460"/>\r\n+                  <rdf:li rdf:resource="https://identifiers.org/kegg.reaction/R02568"/>\r\n+                  <rdf:li rdf:resource="https://identifiers.org/bigg.reaction/FBA2"/>\r\n+                </rdf:Bag>\r\n+              </bqbiol:is>\r\n+              <bqbiol:isDescribedBy>\r\n+                <rdf:Bag>\r\n+                  <rdf:li rdf:resource="https://identifiers.org/pubmed/5114731"/>\r\n+                  <rdf:li rdf:resource="https://identifiers.org/pubmed/6054986"/>\r\n+                  <rdf:li rdf:resource="https://identifiers.org/pubmed/5655259"/>\r\n+                </rdf:Bag>\r\n+              </bqbiol:isDescribedBy>\r\n+            </rdf:Description>\r\n+          </rdf:RDF>\r\n+        </annotation>\r\n+        <fbc:geneProductAssociation>\r\n+          <fbc:or>\r\n+            <fbc:geneProductRef fbc:geneProduct="ENSG00000136872"/>\r\n+            <fbc:geneProductRef fbc:geneProduct="ENSG00000149925"/>\r\n+            <fbc:geneProductRef fbc:geneProduct="ENSG00000109107"/>\r\n+            <fbc:geneProductRef fbc:geneProduct="ENSG00000285043"/>\r\n+          </fbc:or>\r\n+        </fbc:geneProductAssociation>\r\n+        <listOfReactants>\r\n+          <speciesReference constant="true" species="M_m01690c" stoichiometry="1"/>\r\n+          <speciesReference constant="true" species="M_m01981c" stoichiometry="1"/>\r\n+        </listOfReactants>\r\n+        <listOfProducts>\r\n+          <speciesReference constant="true" species="M_m01842c" stoichiometry="1"/>\r\n+        </listOfProducts>\r\n+      </reaction>\r\n+    </listOfReactions>\r\n+  </model>\r\n+</sbml>\r\n'
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/DegreeWeighting/DegreeWeighting.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/DegreeWeighting/DegreeWeighting.xml Wed May 17 13:26:37 2023 +0000
[
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tool id="met4j_DegreeWeighting" name="DegreeWeighting" version="1.3.0">
+  <description>Provides tabulated compound graph edge list, with one column with target's degree.</description>
+  <xrefs>
+    <xref type="bio.tools">met4j</xref>
+  </xrefs>
+  <requirements>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.3.0</container>
+  </requirements>
+  <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh networkAnalysis.DegreeWeighting#if str($pow):
+ -pow "$pow"
+#end if
+ -s "$inputPath"
+#if str($inputSide) != 'None':
+ -sc "$inputSide"
+#end if
+#if str($mergingStrat):
+ -mc "$mergingStrat"
+#end if
+ $mergeEdges
+ $undirected
+ $computeWeight
+ $removeNaN
+ -o "$outputPath"
+]]></command>
+  <inputs>
+    <param argument="-pow" label="set weights as the degree raised to the power of number in parameter." name="pow" optional="true" type="text" value="1">
+      <sanitizer invalid_char="_">
+        <valid initial="string.printable"/>
+      </sanitizer>
+    </param>
+    <param argument="-s" format="sbml" label="input SBML file" name="inputPath" optional="false" type="data" value=""/>
+    <param argument="-sc" format="txt" label="input Side compound file" name="inputSide" optional="true" type="data" value=""/>
+    <param argument="-mc" label="merge compartments. Use names if consistent and unambiguous across compartments, or identifiers if compartment suffix is present (id in form &quot;xxx_y&quot; with xxx as base identifier and y as compartment label)." name="mergingStrat" optional="true" type="select" value="no">
+      <option selected="true" value="no">no</option>
+      <option value="by_name">by_name</option>
+      <option value="by_id">by_id</option>
+    </param>
+    <param argument="-me" checked="false" falsevalue="" label="merge parallel edges to produce a simple graph" name="mergeEdges" truevalue="-me" type="boolean" value="false"/>
+    <param argument="-un" checked="false" falsevalue="" label="create as undirected" name="undirected" truevalue="-un" type="boolean" value="false"/>
+    <param argument="-tp" checked="false" falsevalue="" label="set weight as random walk transition probability, normalized by reaction" name="computeWeight" truevalue="-tp" type="boolean" value="false"/>
+    <param argument="-nan" checked="false" falsevalue="" label="do not output edges with undefined weight" name="removeNaN" truevalue="-nan" type="boolean" value="false"/>
+  </inputs>
+  <outputs>
+    <data format="tsv" name="outputPath"/>
+  </outputs>
+  <tests/>
+  <help><![CDATA[Provides tabulated compound graph edge list, with one column with target's degree.Degree has been proposed as edge weight for finding meaningful paths in metabolic networks, using shortest (lightest) path search. See Croes et al. 2006 (https://doi.org/10.1016/j.jmb.2005.09.079) and Croes et al. 2005 (https://doi.org/10.1093/nar/gki437)]]></help>
+  <citations/>
+</tool>
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/DistanceMatrix/DistanceMatrix.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/DistanceMatrix/DistanceMatrix.xml Wed May 17 13:26:37 2023 +0000
[
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tool id="met4j_DistanceMatrix" name="DistanceMatrix" version="1.3.0">
+  <description>Create a compound to compound distance matrix.</description>
+  <xrefs>
+    <xref type="bio.tools">met4j</xref>
+  </xrefs>
+  <requirements>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.3.0</container>
+  </requirements>
+  <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh networkAnalysis.DistanceMatrix -i "$inputPath"
+#if str($sideCompoundFile) != 'None':
+ -sc "$sideCompoundFile"
+#end if
+#if str($seedFile) != 'None':
+ -s "$seedFile"
+#end if
+ $degree
+#if str($weightFile) != 'None':
+ -w "$weightFile"
+#end if
+ $undirected
+ -o "$outputPath"
+]]></command>
+  <inputs>
+    <param argument="-i" format="sbml" label="input SBML file" name="inputPath" 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="-s" format="txt" label="an optional file containing list of compounds of interest. The returned distance matrix contains only the corresponding rows and columns" name="seedFile" optional="true" type="data" value=""/>
+    <param argument="-dw" checked="false" falsevalue="" label="penalize traversal of hubs by using degree square weighting (-w must not be set)" name="degree" truevalue="-dw" type="boolean" value="false"/>
+    <param argument="-w" format="tsv" label="an optional file containing weights for compound pairs" name="weightFile" optional="true" type="data" value=""/>
+    <param argument="-u" checked="false" falsevalue="" label="Ignore reaction direction" name="undirected" truevalue="-u" type="boolean" value="false"/>
+  </inputs>
+  <outputs>
+    <data format="csv" name="outputPath"/>
+  </outputs>
+  <tests>
+    <test>
+      <param name="inputPath" value="toy_model.xml"/>
+      <output ftype="csv" name="outputPath">
+        <assert_contents>
+          <has_n_lines n="9"/>
+          <has_line_matching expression="id,A,A_ext,B,C,D,D_ext,E,E_ext" n="1"/>
+          <has_line_matching expression="B,1.0,Infinity,0.0,2.0,1.0,2.0,Infinity,Infinity" n="1"/>
+        </assert_contents>
+      </output>
+    </test>
+    <test>
+      <param name="inputPath" value="toy_model.xml"/>
+      <param name="sideCompoundFile" value="sides.txt"/>
+      <param name="degree" value="true"/>
+      <param name="undirected" value="true"/>
+      <output ftype="csv" name="outputPath">
+        <assert_contents>
+          <has_n_lines n="8"/>
+          <has_line_matching expression="id,A,B,C,D,D_ext,E,E_ext" n="1"/>
+          <has_line_matching expression="A,0.0,4.0,4.0,20.0,21.0,24.0,25.0" n="1"/>
+          <has_line_matching expression="B,4.0,0.0,8.0,16.0,17.0,20.0,21.0" n="1"/>
+          <has_line_matching expression="C,4.0,8.0,0.0,16.0,17.0,20.0,21.0" n="1"/>
+          <has_line_matching expression="D,8.0,4.0,4.0,0.0,1.0,4.0,5.0" n="1"/>
+        </assert_contents>
+      </output>
+    </test>
+  </tests>
+  <help><![CDATA[Create a compound to compound distance matrix.
+The distance between two compounds is computed as the length of the shortest path connecting the two in the compound graph, where two compounds are linked if they are respectively substrate and product of the same reaction.
+An optional edge weighting can be used, turning the distances into the sum of edge weights in the lightest path, rather than the length of the shortest path.The default weighting use target's degree squared. Alternatively, custom weighting can be provided in a file. In that case, edges without weight are ignored during path search.
+If no edge weighting is set, it is recommended to provide a list of side compounds to ignore during network traversal.]]></help>
+  <citations/>
+</tool>
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/DistanceMatrix/test-data/sides.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/DistanceMatrix/test-data/sides.txt Wed May 17 13:26:37 2023 +0000
b
@@ -0,0 +1,1 @@
+A_ext
\ No newline at end of file
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/DistanceMatrix/test-data/toy_model.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/DistanceMatrix/test-data/toy_model.xml Wed May 17 13:26:37 2023 +0000
[
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding='UTF-8' ?>
+<sbml fbc:required="false" groups:required="false" level="3" version="1"
+ xmlns="http://www.sbml.org/sbml/level3/version1/core"
+ xmlns:fbc="http://www.sbml.org/sbml/level3/version1/fbc/version2"
+ xmlns:groups="http://www.sbml.org/sbml/level3/version1/groups/version1">
+ <model fbc:strict="true" name="toy model">
+ <listOfUnitDefinitions>
+ <unitDefinition id="mmol_per_gDW_per_hr" name="mmol_per_gDW_per_hr">
+ <listOfUnits>
+ <unit exponent="-1" kind="gram" multiplier="1" scale="0"/>
+ <unit exponent="1" kind="mole" multiplier="1" scale="-3"/>
+ <unit exponent="-1" kind="second" multiplier="0.00027777" scale="0"/>
+ </listOfUnits>
+ </unitDefinition>
+ </listOfUnitDefinitions>
+ <listOfCompartments>
+ <compartment constant="false" id="c" name="Cytosol"/>
+ <compartment constant="false" id="e" name="Extracellular"/>
+ </listOfCompartments>
+ <listOfSpecies>
+ <species boundaryCondition="false" compartment="e" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="A_ext" name="A_ext">
+ <notes>
+ <body xmlns="http://www.w3.org/1999/xhtml">
+ <p>SMILES: C[C@@H](C(=O)O)NC</p>
+ </body>
+ </notes>
+ <annotation>
+ <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:bqbiol="http://biomodels.net/biology-qualifiers/">
+ <rdf:Description rdf:about="#A_ext">
+ <bqbiol:is>
+ <in:inchi xmlns:in="https://biomodels.net/inchi">InChI=1S/C2H6O/c1-2-3/h3H,2H2,1H3</in:inchi>
+ </bqbiol:is>
+ </rdf:Description>
+ </rdf:RDF>
+ </annotation>
+
+ </species>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="A" name="A"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="B" name="B"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="C" name="C"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="D" name="D"/>
+ <species boundaryCondition="false" compartment="e" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="D_ext" name="D_ext"/>
+ <species boundaryCondition="false" compartment="e" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="E_ext" name="E_ext"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="E" name="E"/>
+ </listOfSpecies>
+ <listOfParameters>
+ <parameter constant="true" id="cobra_default_lb" name="cobra default - lb" sboTerm="SBO:0000626" units="mmol_per_gDW_per_hr" value="-100000.0"/>
+ <parameter constant="true" id="cobra_default_ub" name="cobra default - ub" sboTerm="SBO:0000626" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="cobra_0_bound" name="cobra 0 - bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="0.0"/>
+ <parameter constant="true" id="reac1_upper_bound" name="reac1 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="10.0"/>
+ <parameter constant="true" id="reac6_upper_bound" name="reac6 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="3.0"/>
+ <parameter constant="true" id="reac2_upper_bound" name="reac2 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac3_upper_bound" name="reac3 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac4_upper_bound" name="reac4 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac5_upper_bound" name="reac5 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac7_upper_bound" name="reac7 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ </listOfParameters>
+ <listOfReactions>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac1_upper_bound" id="reac1" name="reac1" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="A_ext" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="A" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_default_lb" fbc:upperFluxBound="reac2_upper_bound" id="reac2" name="reac2" reversible="true">
+ <listOfReactants>
+ <speciesReference constant="true" species="A" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="B" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac3_upper_bound" id="reac3" name="reac3" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="A" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="C" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac4_upper_bound" id="reac4" name="reac4" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="B" stoichiometry="1.0"/>
+ <speciesReference constant="true" species="C" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="D" stoichiometry="1.5"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac5_upper_bound" id="reac5" name="reac5" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="D" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="D_ext" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac6_upper_bound" id="reac6" name="reac6" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="E_ext" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="E" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac7_upper_bound" id="reac7" name="reac7" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="E" stoichiometry="2.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="D" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ </listOfReactions>
+ </model>
+</sbml>
\ No newline at end of file
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/DistanceMatrix/test-data/weights.tsv
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/DistanceMatrix/test-data/weights.tsv Wed May 17 13:26:37 2023 +0000
b
@@ -0,0 +1,1 @@
+A A_ext 1000
\ No newline at end of file
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/ExtractPathways/ExtractPathways.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/ExtractPathways/ExtractPathways.xml Wed May 17 13:26:37 2023 +0000
[
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tool id="met4j_ExtractPathways" name="ExtractPathways" version="1.3.0">
+  <description>Extract pathway(s) from GSMN</description>
+  <xrefs>
+    <xref type="bio.tools">met4j</xref>
+  </xrefs>
+  <requirements>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.3.0</container>
+  </requirements>
+  <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh attributes.ExtractPathways -i "$inputPath"
+ -p "$pathwayId"
+ -o "$outputPath"
+]]></command>
+  <inputs>
+    <param argument="-i" format="sbml" label="input SBML file" name="inputPath" optional="false" type="data" value=""/>
+    <param argument="-p" label="pathway identifiers, separated by &quot;+&quot; sign if more than one" name="pathwayId" optional="false" type="text" value="">
+      <sanitizer invalid_char="_">
+        <valid initial="string.printable"/>
+      </sanitizer>
+    </param>
+  </inputs>
+  <outputs>
+    <data format="sbml" name="outputPath"/>
+  </outputs>
+  <tests>
+    <test>
+      <param name="inputPath" value="XF_network.sbml"/>
+      <param name="pathwayId" value="Citric_Acid_Cycle+Folate_Metabolism+toto"/>
+      <output ftype="sbml" name="outputPath">
+      <assert_contents>
+        <is_valid_xml/>
+        <has_line_matching expression=".*&lt;reaction.*" n="17"/>
+        <has_line_matching expression=".*groups:id=.*" n="2"/>
+      </assert_contents>
+    </output>
+    </test>
+  </tests>
+  <help><![CDATA["Extract pathway(s) from GSMN: From a SBML file, Create a sub-network SBML file including only a selection of pathways]]></help>
+  <citations/>
+</tool>
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/ExtractPathways/test-data/XF_network.sbml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/ExtractPathways/test-data/XF_network.sbml Wed May 17 13:26:37 2023 +0000
b
b'@@ -0,0 +1,47267 @@\n+<?xml version="1.0" encoding="UTF-8"?>\n+<sbml fbc:required="false" groups:required="false" level="3" version="2" xmlns="http://www.sbml.org/sbml/level3/version2/core" xmlns:fbc="http://www.sbml.org/sbml/level3/version1/fbc/version2" xmlns:groups="http://www.sbml.org/sbml/level3/version1/groups/version1">\n+  <model fbc:strict="true" id="Xfm1158" metaid="Xfm1158" name="Xfm1158">\n+    <fbc:listOfGeneProducts>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_007090" fbc:label="XFCFBP8418_007090" fbc:name="XFCFBP8418_007090" metaid="_8a7d7180-d79e-4dbb-86ed-f8d7eb60e698"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_005900" fbc:label="XFCFBP8418_005900" fbc:name="XFCFBP8418_005900" metaid="_867487dd-ff57-4e93-8de9-b5ecb805e0eb"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_011590" fbc:label="XFCFBP8418_011590" fbc:name="XFCFBP8418_011590" metaid="_44606760-936c-4585-b40c-650e953a5f73"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_014620" fbc:label="XFCFBP8418_014620" fbc:name="XFCFBP8418_014620" metaid="da273da9-0f84-4615-a464-2ab71416e8cc"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_015830" fbc:label="XFCFBP8418_015830" fbc:name="XFCFBP8418_015830" metaid="_3a9239a2-8e23-4834-99a8-a7dc15f6d906"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_014980" fbc:label="XFCFBP8418_014980" fbc:name="XFCFBP8418_014980" metaid="_7f26806b-e32e-4c5c-a78d-9e094c267bbf"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_020190" fbc:label="XFCFBP8418_020190" fbc:name="XFCFBP8418_020190" metaid="_31bbb514-1d52-4727-91cb-367af12e95ca"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_004940" fbc:label="XFCFBP8418_004940" fbc:name="XFCFBP8418_004940" metaid="a2f20753-c245-477e-8363-8f5e45c50f5d"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_021160" fbc:label="XFCFBP8418_021160" fbc:name="XFCFBP8418_021160" metaid="_844bdacc-d091-457d-9c4d-846cb9aab3c1"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_025760" fbc:label="XFCFBP8418_025760" fbc:name="XFCFBP8418_025760" metaid="fd8a601e-e56f-4263-9aa7-6ed9bf85f958"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_024670" fbc:label="XFCFBP8418_024670" fbc:name="XFCFBP8418_024670" metaid="_2bbe03ce-c814-417a-b9c0-e8a1f29f4106"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_004820" fbc:label="XFCFBP8418_004820" fbc:name="XFCFBP8418_004820" metaid="_41cb6d94-13d8-461e-a217-29a68e21cd2b"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_023580" fbc:label="XFCFBP8418_023580" fbc:name="XFCFBP8418_023580" metaid="_31ff72d7-4e30-4563-85aa-4afc58dd6bee"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_000460" fbc:label="XFCFBP8418_000460" fbc:name="XFCFBP8418_000460" metaid="d7ea14e6-cd6c-4404-b973-486ade662242"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_026730" fbc:label="XFCFBP8418_026730" fbc:name="XFCFBP8418_026730" metaid="e876348e-787e-4f2a-8904-e675c2589c17"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_025640" fbc:label="XFCFBP8418_025640" fbc:name="XFCFBP8418_025640" metaid="b5b93812-bd2e-4ca8-8328-e1d35e17ac3a"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_023100" fbc:label="XFCFBP8418_023100" fbc:name="XFCFBP8418_023100" metaid="f62e0096-7b12-4db3-a7b0-2e1cfa0302c6"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_027800" fbc:label="XFCFBP8418_027800" fbc:name="XFCFBP8418_027800" metaid="_8beb93ba-34a4-4330-86bf-2c47b1cb7f2e"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_004700" fbc:label="XFCFBP8418_004700" fbc:name="XFCFBP8418_004700" metaid="_2aceabe8-5294-42eb-9d3b-2506634c68d5"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_005910" fbc:label="XFCFBP8418_005910" fbc:name="XFCFBP8418_005910" metaid="a7b44241-024e-49c1-88af-1e1108cf09eb"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_013540" fbc:label="XFCFBP8418_013540" fbc:name="XFCFBP8418_013540" metaid="_83bdba7b-0eb0-4dfb-99ed-6e365240d870"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_011240" fbc:label="XFCFBP8418_011240" fbc:name="XFCFBP8418_011240" metaid="_568b9959-99b6-49bd-86d7-04e773d940da"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_012210" fbc:label="XFCFBP8418_01221'..b'     </annotation>\n+        <fbc:geneProductAssociation>\n+          <fbc:geneProductRef fbc:geneProduct="XFCFBP8418_010590"/>\n+        </fbc:geneProductAssociation>\n+        <listOfReactants>\n+          <speciesReference constant="true" species="M_cyst_L_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_h2o_c" stoichiometry="1"/>\n+        </listOfReactants>\n+        <listOfProducts>\n+          <speciesReference constant="true" species="M_2obut_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_cys_L_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_nh4_c" stoichiometry="1"/>\n+        </listOfProducts>\n+      </reaction>\n+      <reaction fbc:lowerFluxBound="LOWER_BOUND_99999_0" fbc:upperFluxBound="UPPER_BOUND_99999_0" id="R_FUCtpp" metaid="_34363cfc-fa7f-4df4-a073-49f5befcdf50" name="R_FUCtpp" reversible="true">\n+        <notes>\n+          <body xmlns="http://www.w3.org/1999/xhtml">\n+            <p>GENE_ASSOCIATION: XFCFBP8418_018650</p>\n+            <p>SUBSYSTEM: Transport__Inner_Membrane</p>\n+            <p>EC_NUMBER: No_Assignment</p>\n+          </body>\n+        </notes>\n+        <annotation>\n+          <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:bqbiol="http://biomodels.net/biology-qualifiers/">\n+            <rdf:Description rdf:about="#_34363cfc-fa7f-4df4-a073-49f5befcdf50">\n+              <bqbiol:is>\n+                <rdf:Bag>\n+                  <rdf:li rdf:resource="http://identifiers.org/ec-code/No_Assignment"/>\n+                </rdf:Bag>\n+              </bqbiol:is>\n+            </rdf:Description>\n+          </rdf:RDF>\n+        </annotation>\n+        <fbc:geneProductAssociation>\n+          <fbc:geneProductRef fbc:geneProduct="XFCFBP8418_018650"/>\n+        </fbc:geneProductAssociation>\n+        <listOfReactants>\n+          <speciesReference constant="true" species="M_h_p" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_fuc_L_p" stoichiometry="1"/>\n+        </listOfReactants>\n+        <listOfProducts>\n+          <speciesReference constant="true" species="M_fuc_L_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_h_c" stoichiometry="1"/>\n+        </listOfProducts>\n+      </reaction>\n+      <reaction fbc:lowerFluxBound="LOWER_BOUND_0_0" fbc:upperFluxBound="UPPER_BOUND_99999_0" id="R_FACOAE120" metaid="_2691931b-9cfe-40d9-95d9-13e4ed057413" name="R_FACOAE120" reversible="false">\n+        <notes>\n+          <body xmlns="http://www.w3.org/1999/xhtml">\n+            <p>GENE_ASSOCIATION: XFCFBP8418_025070</p>\n+            <p>SUBSYSTEM: Cell_Envelope_Biosynthesis</p>\n+            <p>EC_NUMBER: 3.1.2.20</p>\n+          </body>\n+        </notes>\n+        <annotation>\n+          <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:bqbiol="http://biomodels.net/biology-qualifiers/">\n+            <rdf:Description rdf:about="#_2691931b-9cfe-40d9-95d9-13e4ed057413">\n+              <bqbiol:is>\n+                <rdf:Bag>\n+                  <rdf:li rdf:resource="http://identifiers.org/ec-code/3.1.2.20"/>\n+                </rdf:Bag>\n+              </bqbiol:is>\n+            </rdf:Description>\n+          </rdf:RDF>\n+        </annotation>\n+        <fbc:geneProductAssociation>\n+          <fbc:geneProductRef fbc:geneProduct="XFCFBP8418_025070"/>\n+        </fbc:geneProductAssociation>\n+        <listOfReactants>\n+          <speciesReference constant="true" species="M_ddcacoa_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_h2o_c" stoichiometry="1"/>\n+        </listOfReactants>\n+        <listOfProducts>\n+          <speciesReference constant="true" species="M_ddca_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_h_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_coa_c" stoichiometry="1"/>\n+        </listOfProducts>\n+      </reaction>\n+    </listOfReactions>\n+  </model>\n+</sbml>\n'
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/ExtractSbmlAnnot/ExtractSbmlAnnot.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/ExtractSbmlAnnot/ExtractSbmlAnnot.xml Wed May 17 13:26:37 2023 +0000
[
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tool id="met4j_ExtractSbmlAnnot" name="ExtractSbmlAnnot" version="1.3.0">
+  <description>Extract databases' references from SBML annotations or notes.</description>
+  <xrefs>
+    <xref type="bio.tools">met4j</xref>
+  </xrefs>
+  <requirements>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.3.0</container>
+  </requirements>
+  <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh attributes.ExtractSbmlAnnot -i "$inputPath"
+ -export "$export"
+ -db "$db"
+ $uniq
+ $skip
+ -o "$outputPath"
+]]></command>
+  <inputs>
+    <param argument="-i" format="sbml" label="input SBML file" name="inputPath" optional="false" type="data" value=""/>
+    <param argument="-export" label="the type of entity to extract annotation, either metabolite, reaction, or gene" name="export" optional="false" type="select" value="METABOLITE">
+      <option selected="true" value="METABOLITE">METABOLITE</option>
+      <option value="REACTION">REACTION</option>
+      <option value="GENE">GENE</option>
+    </param>
+    <param argument="-db" label="name of the referenced database to export annotations from, as listed in notes or identifiers.org base uri" name="db" optional="false" type="text" value="">
+      <sanitizer invalid_char="_">
+        <valid initial="string.printable"/>
+      </sanitizer>
+    </param>
+    <param argument="-uniq" checked="false" falsevalue="" label="keep only one identifier if multiple are referenced for the same entity" name="uniq" truevalue="-uniq" type="boolean" value="false"/>
+    <param argument="-skip" checked="false" falsevalue="" label="Skip entities without the selected annotations, by default output them with NA value" name="skip" truevalue="-skip" type="boolean" value="false"/>
+  </inputs>
+  <outputs>
+    <data format="tsv" name="outputPath"/>
+  </outputs>
+  <tests>
+    <test>
+      <param name="inputPath" value="Human-GEM_pathways.xml"/>
+      <param name="export" value="METABOLITE"/>
+      <param name="db" value="metanetx.chemical"/>
+      <output ftype="tsv" name="outputPath">
+      <assert_contents>
+        <has_n_lines n="146"/>
+        <has_n_columns n="2"/>
+      </assert_contents>
+    </output>
+    </test>
+    <test>
+      <param name="inputPath" value="Human-GEM_pathways.xml"/>
+      <param name="export" value="METABOLITE"/>
+      <param name="db" value="metanetx.chemical"/>
+      <param name="skip" value="true"/>
+      <output ftype="tsv" name="outputPath">
+      <assert_contents>
+        <has_n_lines n="145"/>
+        <has_n_columns n="2"/>
+      </assert_contents>
+    </output>
+    </test>
+    <test>
+      <param name="inputPath" value="Human-GEM_pathways.xml"/>
+      <param name="export" value="METABOLITE"/>
+      <param name="db" value="metanetx.chemical"/>
+      <param name="skip" value="true"/>
+      <param name="uniq" value="true"/>
+      <output ftype="tsv" name="outputPath">
+      <assert_contents>
+        <has_n_lines n="111"/>
+        <has_n_columns n="2"/>
+      </assert_contents>
+    </output>
+    </test>
+  </tests>
+  <help><![CDATA[Extract databases' references from SBML annotations or notes. The references are exported as a tabulated file with one column with the SBML compound, reaction or gene identifiers, and one column with the corresponding database identifier.The name of the targeted database need to be provided under the same form than the one used in the notes field or the identifiers.org uri]]></help>
+  <citations/>
+</tool>
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/ExtractSbmlAnnot/test-data/Human-GEM_pathways.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/ExtractSbmlAnnot/test-data/Human-GEM_pathways.xml Wed May 17 13:26:37 2023 +0000
b
b'@@ -0,0 +1,7661 @@\n+<?xml version="1.0" encoding="UTF-8"?>\r\n+<sbml fbc:required="false" groups:required="false" level="3" version="2" xmlns="http://www.sbml.org/sbml/level3/version2/core" xmlns:fbc="http://www.sbml.org/sbml/level3/version1/fbc/version2" xmlns:groups="http://www.sbml.org/sbml/level3/version1/groups/version1">\r\n+  <model fbc:strict="true" id="HumanGEM" metaid="HumanGEM" name="Generic genome-scale metabolic model of Homo sapiens">\r\n+    <notes>\r\n+      <body xmlns="http://www.w3.org/1999/xhtml">\r\n+        <p>Genome-scale metabolic models are valuable tools to study metabolism and provide a scaffold for the integrative analysis of omics data. This is the latest version of Human-GEM, which is a genome-scale metabolic model of a generic human cell. The objective of Human-GEM is to serve as a community model for enabling integrative and mechanistic studies of human metabolism.</p>\r\n+      </body>\r\n+    </notes>\r\n+    <annotation>\r\n+      <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:bqbiol="http://biomodels.net/biology-qualifiers/">\r\n+        <rdf:Description rdf:about="#HumanGEM">\r\n+          <bqbiol:is>\r\n+            <rdf:Bag>\r\n+              <rdf:li rdf:resource="https://identifiers.org/taxonomy/9606"/>\r\n+            </rdf:Bag>\r\n+          </bqbiol:is>\r\n+        </rdf:Description>\r\n+      </rdf:RDF>\r\n+    </annotation>\r\n+    <fbc:listOfObjectives fbc:activeObjective="obj">\r\n+      <fbc:objective fbc:id="obj" fbc:type="maximize">\r\n+        <fbc:listOfFluxObjectives>\r\n+          <fbc:fluxObjective fbc:coefficient="1" fbc:reaction="R_biomass_human"/>\r\n+        </fbc:listOfFluxObjectives>\r\n+      </fbc:objective>\r\n+    </fbc:listOfObjectives>\r\n+    <fbc:listOfGeneProducts>\r\n+      <fbc:geneProduct fbc:id="ENSG00000023697" fbc:label="ENSG00000023697" fbc:name="ENSG00000023697" metaid="_12915ddf-e017-4a38-a80d-e9982f8ac7cc">\r\n+        <notes>\r\n+          <body xmlns="http://www.w3.org/1999/xhtml">\r\n+            <p>ensembl: ENSG00000023697</p>\r\n+            <p>hgnc.symbol: DERA</p>\r\n+            <p>ncbigene: 51071</p>\r\n+            <p>uniprot: Q9Y315</p>\r\n+          </body>\r\n+        </notes>\r\n+      </fbc:geneProduct>\r\n+      <fbc:geneProduct fbc:id="ENSG00000130313" fbc:label="ENSG00000130313" fbc:name="ENSG00000130313" metaid="b7f31dab-0da6-4c9e-9c76-6ea1952d4f6b">\r\n+        <notes>\r\n+          <body xmlns="http://www.w3.org/1999/xhtml">\r\n+            <p>ensembl: ENSG00000130313</p>\r\n+            <p>hgnc.symbol: PGLS</p>\r\n+            <p>ncbigene: 25796</p>\r\n+            <p>uniprot: O95336</p>\r\n+          </body>\r\n+        </notes>\r\n+      </fbc:geneProduct>\r\n+      <fbc:geneProduct fbc:id="ENSG00000157353" fbc:label="ENSG00000157353" fbc:name="ENSG00000157353" metaid="f2bfd1a8-b479-4718-bb3f-030aed87a562">\r\n+        <notes>\r\n+          <body xmlns="http://www.w3.org/1999/xhtml">\r\n+            <p>ensembl: ENSG00000157353</p>\r\n+            <p>hgnc.symbol: FCSK</p>\r\n+            <p>ncbigene: 197258</p>\r\n+            <p>uniprot: Q8N0W3</p>\r\n+          </body>\r\n+        </notes>\r\n+      </fbc:geneProduct>\r\n+      <fbc:geneProduct fbc:id="ENSG00000114268" fbc:label="ENSG00000114268" fbc:name="ENSG00000114268" metaid="d1ad0711-77a6-4e33-85ba-dff0e0e56b5c">\r\n+        <notes>\r\n+          <body xmlns="http://www.w3.org/1999/xhtml">\r\n+            <p>ensembl: ENSG00000114268</p>\r\n+            <p>hgnc.symbol: PFKFB4</p>\r\n+            <p>ncbigene: 5210</p>\r\n+            <p>uniprot: Q16877</p>\r\n+          </body>\r\n+        </notes>\r\n+      </fbc:geneProduct>\r\n+      <fbc:geneProduct fbc:id="ENSG00000197417" fbc:label="ENSG00000197417" fbc:name="ENSG00000197417" metaid="_36aac772-72a3-44fd-97f3-84213d36d9e2">\r\n+        <notes>\r\n+          <body xmlns="http://www.w3.org/1999/xhtml">\r\n+            <p>ensembl: ENSG00000197417</p>\r\n+            <p>hgnc.symbol: SHPK</p>\r\n+            <p>ncbigene: 23729</p>\r\n+            <p>uniprot: Q9UHJ6</p>\r\n+          </body>\r\n+        </notes>\r\n+      </fbc:geneProduct>\r\n+  '..b'    </rdf:Bag>\r\n+              </bqbiol:is>\r\n+              <bqbiol:isDescribedBy>\r\n+                <rdf:Bag>\r\n+                  <rdf:li rdf:resource="https://identifiers.org/pubmed/234468"/>\r\n+                  <rdf:li rdf:resource="https://identifiers.org/pubmed/2843500"/>\r\n+                  <rdf:li rdf:resource="https://identifiers.org/pubmed/15234337"/>\r\n+                </rdf:Bag>\r\n+              </bqbiol:isDescribedBy>\r\n+            </rdf:Description>\r\n+          </rdf:RDF>\r\n+        </annotation>\r\n+        <fbc:geneProductAssociation>\r\n+          <fbc:or>\r\n+            <fbc:geneProductRef fbc:geneProduct="ENSG00000197713"/>\r\n+            <fbc:geneProductRef fbc:geneProduct="ENSG00000235376"/>\r\n+          </fbc:or>\r\n+        </fbc:geneProductAssociation>\r\n+        <listOfReactants>\r\n+          <speciesReference constant="true" species="M_m01761c" stoichiometry="1"/>\r\n+        </listOfReactants>\r\n+        <listOfProducts>\r\n+          <speciesReference constant="true" species="M_m02846c" stoichiometry="1"/>\r\n+        </listOfProducts>\r\n+      </reaction>\r\n+      <reaction fbc:lowerFluxBound="LOWER_BOUND_0_0" fbc:upperFluxBound="UPPER_BOUND_1000_0" id="R_HMR_4356" metaid="e6efa094-5aeb-412c-8390-f6707d0794e0" name="R_HMR_4356" reversible="false" sboTerm="SBO:0000176">\r\n+        <notes>\r\n+          <body xmlns="http://www.w3.org/1999/xhtml">\r\n+            <p>Confidence Level: 0</p>\r\n+            <p>AUTHORS: PMID:5114731;PMID:5655259;PMID:6054986</p>\r\n+            <p>ec-code: 4.1.2.13</p>\r\n+            <p>metanetx.reaction: MNXR99460</p>\r\n+            <p>kegg.reaction: R02568</p>\r\n+            <p>bigg.reaction: FBA2</p>\r\n+            <p>SUBSYSTEM: Fructose and mannose metabolism</p>\r\n+            <p>EC_NUMBER: 4.1.2.13</p>\r\n+            <p>pmids: 5114731,5655259,6054986</p>\r\n+            <p>GENE_ASSOCIATION: ( ENSG00000109107 ) OR ( ENSG00000136872 ) OR ( ENSG00000149925 ) OR ( ENSG00000285043 )</p>\r\n+          </body>\r\n+        </notes>\r\n+        <annotation>\r\n+          <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:bqbiol="http://biomodels.net/biology-qualifiers/">\r\n+            <rdf:Description rdf:about="#e6efa094-5aeb-412c-8390-f6707d0794e0">\r\n+              <bqbiol:is>\r\n+                <rdf:Bag>\r\n+                  <rdf:li rdf:resource="https://identifiers.org/ec-code/4.1.2.13"/>\r\n+                  <rdf:li rdf:resource="https://identifiers.org/metanetx.reaction/MNXR99460"/>\r\n+                  <rdf:li rdf:resource="https://identifiers.org/kegg.reaction/R02568"/>\r\n+                  <rdf:li rdf:resource="https://identifiers.org/bigg.reaction/FBA2"/>\r\n+                </rdf:Bag>\r\n+              </bqbiol:is>\r\n+              <bqbiol:isDescribedBy>\r\n+                <rdf:Bag>\r\n+                  <rdf:li rdf:resource="https://identifiers.org/pubmed/5114731"/>\r\n+                  <rdf:li rdf:resource="https://identifiers.org/pubmed/6054986"/>\r\n+                  <rdf:li rdf:resource="https://identifiers.org/pubmed/5655259"/>\r\n+                </rdf:Bag>\r\n+              </bqbiol:isDescribedBy>\r\n+            </rdf:Description>\r\n+          </rdf:RDF>\r\n+        </annotation>\r\n+        <fbc:geneProductAssociation>\r\n+          <fbc:or>\r\n+            <fbc:geneProductRef fbc:geneProduct="ENSG00000136872"/>\r\n+            <fbc:geneProductRef fbc:geneProduct="ENSG00000149925"/>\r\n+            <fbc:geneProductRef fbc:geneProduct="ENSG00000109107"/>\r\n+            <fbc:geneProductRef fbc:geneProduct="ENSG00000285043"/>\r\n+          </fbc:or>\r\n+        </fbc:geneProductAssociation>\r\n+        <listOfReactants>\r\n+          <speciesReference constant="true" species="M_m01690c" stoichiometry="1"/>\r\n+          <speciesReference constant="true" species="M_m01981c" stoichiometry="1"/>\r\n+        </listOfReactants>\r\n+        <listOfProducts>\r\n+          <speciesReference constant="true" species="M_m01842c" stoichiometry="1"/>\r\n+        </listOfProducts>\r\n+      </reaction>\r\n+    </listOfReactions>\r\n+  </model>\r\n+</sbml>\r\n'
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/ExtractSubBipNetwork/ExtractSubBipNetwork.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/ExtractSubBipNetwork/ExtractSubBipNetwork.xml Wed May 17 13:26:37 2023 +0000
[
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tool id="met4j_ExtractSubBipNetwork" name="ExtractSubBipNetwork" version="1.3.0">
+  <description>Create a subnetwork from a GSMN in SBML format, and two files containing lists of compounds and/or reactions of interests ids, one per row, plus one file of the same format containing side compounds ids.</description>
+  <xrefs>
+    <xref type="bio.tools">met4j</xref>
+  </xrefs>
+  <requirements>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.3.0</container>
+  </requirements>
+  <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh networkAnalysis.ExtractSubBipNetwork -i "$inputPath"
+ -s "$sourcePath"
+ -t "$targetPath"
+ $undirected
+ $asTable
+ -sc "$sideCompoundFile"
+#if str($blkdReactionFile) != 'None':
+ -br "$blkdReactionFile"
+#end if
+#if str($weightFile) != 'None':
+ -cw "$weightFile"
+#end if
+#if str($k):
+ -k "$k"
+#end if
+ $st
+ -o "$outputPath"
+]]></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="-u" checked="false" falsevalue="" label="Ignore reaction direction" name="undirected" truevalue="-u" type="boolean" value="false"/>
+    <param argument="-tab" checked="false" falsevalue="" label="Export in tabulated file instead of .GML" name="asTable" truevalue="-tab" type="boolean" value="false"/>
+    <param argument="-sc" format="txt" label="a file containing list of side compounds to ignore" name="sideCompoundFile" optional="false" type="data" value=""/>
+    <param argument="-br" format="txt" label="a file containing list of blocked reactions to ignore" name="blkdReactionFile" optional="true" type="data" value=""/>
+    <param argument="-cw" format="tsv" label="an optional file containing weights for reactions pairs" name="weightFile" optional="true" type="data" value=""/>
+    <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"/>
+  </inputs>
+  <outputs>
+    <data format="gml" name="outputPath"/>
+  </outputs>
+  <tests>
+    <test>
+        <param name="inputPath" value="toy_model.xml"/>
+        <param name="sourcePath" value="seeds.txt"/>
+        <param name="targetPath" value="targets.txt"/>
+        <param name="sideCompoundFile" value="sc.txt"/>
+        <output ftype="gml" name="outputPath">
+          <assert_contents>
+            <has_line_matching expression=".*node.*" n="5"/>
+            <has_line_matching expression=".*edge.*" n="4"/>
+          </assert_contents>
+        </output>
+      </test>
+  </tests>
+  <help><![CDATA[Create a subnetwork from a GSMN in SBML format, and two files containing lists of compounds and/or reactions of interests ids, one per row, plus one file of the same format containing side compounds ids.
+The subnetwork corresponds to part of the network that connects reactions and compounds from the first list to reactions and 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. Contrary to compound graph, bipartite graph often lacks weighting policy for edge relevance. In order to ensure appropriate network density, a list of side compounds and blocked reactions to ignore during path build must be provided. An optional edge weight file, if available, can also be used.]]></help>
+  <citations/>
+</tool>
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/ExtractSubBipNetwork/test-data/seeds.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/ExtractSubBipNetwork/test-data/seeds.txt Wed May 17 13:26:37 2023 +0000
b
@@ -0,0 +1,1 @@
+A
\ No newline at end of file
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/ExtractSubBipNetwork/test-data/targets.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/ExtractSubBipNetwork/test-data/targets.txt Wed May 17 13:26:37 2023 +0000
b
@@ -0,0 +1,1 @@
+D
\ No newline at end of file
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/ExtractSubBipNetwork/test-data/test.gml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/ExtractSubBipNetwork/test-data/test.gml Wed May 17 13:26:37 2023 +0000
[
@@ -0,0 +1,56 @@
+Creator "JGraphT GML Exporter"
+Version 1
+graph
+[
+ label ""
+ directed 1
+ node
+ [
+ id 1
+ label "A"
+ ]
+ node
+ [
+ id 2
+ label "reac2"
+ ]
+ node
+ [
+ id 3
+ label "B"
+ ]
+ node
+ [
+ id 4
+ label "reac4"
+ ]
+ node
+ [
+ id 5
+ label "D"
+ ]
+ edge
+ [
+ source 1
+ target 2
+ label "(A : reac2)"
+ ]
+ edge
+ [
+ source 2
+ target 3
+ label "(reac2 : B)"
+ ]
+ edge
+ [
+ source 3
+ target 4
+ label "(B : reac4)"
+ ]
+ edge
+ [
+ source 4
+ target 5
+ label "(reac4 : D)"
+ ]
+]
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/ExtractSubBipNetwork/test-data/toy_model.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/ExtractSubBipNetwork/test-data/toy_model.xml Wed May 17 13:26:37 2023 +0000
[
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding='UTF-8' ?>
+<sbml fbc:required="false" groups:required="false" level="3" version="1"
+ xmlns="http://www.sbml.org/sbml/level3/version1/core"
+ xmlns:fbc="http://www.sbml.org/sbml/level3/version1/fbc/version2"
+ xmlns:groups="http://www.sbml.org/sbml/level3/version1/groups/version1">
+ <model fbc:strict="true" name="toy model">
+ <listOfUnitDefinitions>
+ <unitDefinition id="mmol_per_gDW_per_hr" name="mmol_per_gDW_per_hr">
+ <listOfUnits>
+ <unit exponent="-1" kind="gram" multiplier="1" scale="0"/>
+ <unit exponent="1" kind="mole" multiplier="1" scale="-3"/>
+ <unit exponent="-1" kind="second" multiplier="0.00027777" scale="0"/>
+ </listOfUnits>
+ </unitDefinition>
+ </listOfUnitDefinitions>
+ <listOfCompartments>
+ <compartment constant="false" id="c" name="Cytosol"/>
+ <compartment constant="false" id="e" name="Extracellular"/>
+ </listOfCompartments>
+ <listOfSpecies>
+ <species boundaryCondition="false" compartment="e" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="A_ext" name="A_ext">
+ <notes>
+ <body xmlns="http://www.w3.org/1999/xhtml">
+ <p>SMILES: C[C@@H](C(=O)O)NC</p>
+ </body>
+ </notes>
+ <annotation>
+ <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:bqbiol="http://biomodels.net/biology-qualifiers/">
+ <rdf:Description rdf:about="#A_ext">
+ <bqbiol:is>
+ <in:inchi xmlns:in="https://biomodels.net/inchi">InChI=1S/C2H6O/c1-2-3/h3H,2H2,1H3</in:inchi>
+ </bqbiol:is>
+ </rdf:Description>
+ </rdf:RDF>
+ </annotation>
+
+ </species>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="A" name="A"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="B" name="B"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="C" name="C"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="D" name="D"/>
+ <species boundaryCondition="false" compartment="e" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="D_ext" name="D_ext"/>
+ <species boundaryCondition="false" compartment="e" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="E_ext" name="E_ext"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="E" name="E"/>
+ </listOfSpecies>
+ <listOfParameters>
+ <parameter constant="true" id="cobra_default_lb" name="cobra default - lb" sboTerm="SBO:0000626" units="mmol_per_gDW_per_hr" value="-100000.0"/>
+ <parameter constant="true" id="cobra_default_ub" name="cobra default - ub" sboTerm="SBO:0000626" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="cobra_0_bound" name="cobra 0 - bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="0.0"/>
+ <parameter constant="true" id="reac1_upper_bound" name="reac1 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="10.0"/>
+ <parameter constant="true" id="reac6_upper_bound" name="reac6 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="3.0"/>
+ <parameter constant="true" id="reac2_upper_bound" name="reac2 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac3_upper_bound" name="reac3 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac4_upper_bound" name="reac4 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac5_upper_bound" name="reac5 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac7_upper_bound" name="reac7 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ </listOfParameters>
+ <listOfReactions>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac1_upper_bound" id="reac1" name="reac1" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="A_ext" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="A" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_default_lb" fbc:upperFluxBound="reac2_upper_bound" id="reac2" name="reac2" reversible="true">
+ <listOfReactants>
+ <speciesReference constant="true" species="A" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="B" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac3_upper_bound" id="reac3" name="reac3" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="A" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="C" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac4_upper_bound" id="reac4" name="reac4" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="B" stoichiometry="1.0"/>
+ <speciesReference constant="true" species="C" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="D" stoichiometry="1.5"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac5_upper_bound" id="reac5" name="reac5" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="D" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="D_ext" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac6_upper_bound" id="reac6" name="reac6" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="E_ext" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="E" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac7_upper_bound" id="reac7" name="reac7" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="E" stoichiometry="2.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="D" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ </listOfReactions>
+ </model>
+</sbml>
\ No newline at end of file
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/ExtractSubNetwork/ExtractSubNetwork.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/ExtractSubNetwork/ExtractSubNetwork.xml Wed May 17 13:26:37 2023 +0000
[
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tool id="met4j_ExtractSubNetwork" name="ExtractSubNetwork" version="1.3.0">
+  <description>Create a subnetwork from a GSMN 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:1.3.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
+ $asTable
+#if str($k):
+ -k "$k"
+#end if
+ $st
+ -o "$outputPath"
+]]></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="-tab" checked="false" falsevalue="" label="Export in tabulated file instead of .GML" name="asTable" truevalue="-tab" 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"/>
+  </inputs>
+  <outputs>
+    <data format="gml" name="outputPath"/>
+  </outputs>
+  <tests>
+    <test>
+      <param name="inputPath" value="toy_model.xml"/>
+      <param name="sourcePath" value="seeds.txt"/>
+      <param name="targetPath" value="targets.txt"/>
+      <output ftype="gml" name="outputPath">
+        <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 GSMN in SBML format, and two files containing lists of compounds of interests ids, one per row.
+The subnetwork correspond to 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:Frainay, C., & Jourdan, F. Computational methods to identify metabolic sub-networks based on metabolomic profiles. Bioinformatics 2016;1–14. https://doi.org/10.1093/bib/bbv115
+Faust, K., Croes, D., & van Helden, J. Prediction of metabolic pathways from genome-scale metabolic networks. Bio Systems 2011;105(2), 109–121. https://doi.org/10.1016/j.biosystems.2011.05.004
+Croes D, Couche F, Wodak SJ, et al. Metabolic PathFinding: inferring relevant pathways in biochemical networks. Nucleic Acids Res 2005;33:W326–30.
+Croes D, Couche F, Wodak SJ, et al. Inferring meaningful pathways in weighted metabolic networks. J Mol Biol 2006; 356:222–36.
+Rahman SA, Advani P, Schunk R, et al. Metabolic pathway analysis web service (Pathway Hunter Tool at CUBIC). Bioinformatics 2005;21:1189–93.
+Pertusi DA, Stine AE, Broadbelt LJ, et al. Efficient searching and annotation of metabolic networks using chemical similarity. Bioinformatics 2014;1–9.
+McShan DC, Rao S, Shah I. PathMiner: predicting metabolic pathways by heuristic search. Bioinformatics 2003;19:1692–8.
+]]></help>
+  <citations/>
+</tool>
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/ExtractSubNetwork/test-data/seeds.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/ExtractSubNetwork/test-data/seeds.txt Wed May 17 13:26:37 2023 +0000
b
@@ -0,0 +1,1 @@
+A
\ No newline at end of file
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/ExtractSubNetwork/test-data/targets.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/ExtractSubNetwork/test-data/targets.txt Wed May 17 13:26:37 2023 +0000
b
@@ -0,0 +1,1 @@
+D
\ No newline at end of file
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/ExtractSubNetwork/test-data/toy_model.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/ExtractSubNetwork/test-data/toy_model.xml Wed May 17 13:26:37 2023 +0000
[
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding='UTF-8' ?>
+<sbml fbc:required="false" groups:required="false" level="3" version="1"
+ xmlns="http://www.sbml.org/sbml/level3/version1/core"
+ xmlns:fbc="http://www.sbml.org/sbml/level3/version1/fbc/version2"
+ xmlns:groups="http://www.sbml.org/sbml/level3/version1/groups/version1">
+ <model fbc:strict="true" name="toy model">
+ <listOfUnitDefinitions>
+ <unitDefinition id="mmol_per_gDW_per_hr" name="mmol_per_gDW_per_hr">
+ <listOfUnits>
+ <unit exponent="-1" kind="gram" multiplier="1" scale="0"/>
+ <unit exponent="1" kind="mole" multiplier="1" scale="-3"/>
+ <unit exponent="-1" kind="second" multiplier="0.00027777" scale="0"/>
+ </listOfUnits>
+ </unitDefinition>
+ </listOfUnitDefinitions>
+ <listOfCompartments>
+ <compartment constant="false" id="c" name="Cytosol"/>
+ <compartment constant="false" id="e" name="Extracellular"/>
+ </listOfCompartments>
+ <listOfSpecies>
+ <species boundaryCondition="false" compartment="e" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="A_ext" name="A_ext">
+ <notes>
+ <body xmlns="http://www.w3.org/1999/xhtml">
+ <p>SMILES: C[C@@H](C(=O)O)NC</p>
+ </body>
+ </notes>
+ <annotation>
+ <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:bqbiol="http://biomodels.net/biology-qualifiers/">
+ <rdf:Description rdf:about="#A_ext">
+ <bqbiol:is>
+ <in:inchi xmlns:in="https://biomodels.net/inchi">InChI=1S/C2H6O/c1-2-3/h3H,2H2,1H3</in:inchi>
+ </bqbiol:is>
+ </rdf:Description>
+ </rdf:RDF>
+ </annotation>
+
+ </species>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="A" name="A"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="B" name="B"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="C" name="C"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="D" name="D"/>
+ <species boundaryCondition="false" compartment="e" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="D_ext" name="D_ext"/>
+ <species boundaryCondition="false" compartment="e" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="E_ext" name="E_ext"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="E" name="E"/>
+ </listOfSpecies>
+ <listOfParameters>
+ <parameter constant="true" id="cobra_default_lb" name="cobra default - lb" sboTerm="SBO:0000626" units="mmol_per_gDW_per_hr" value="-100000.0"/>
+ <parameter constant="true" id="cobra_default_ub" name="cobra default - ub" sboTerm="SBO:0000626" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="cobra_0_bound" name="cobra 0 - bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="0.0"/>
+ <parameter constant="true" id="reac1_upper_bound" name="reac1 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="10.0"/>
+ <parameter constant="true" id="reac6_upper_bound" name="reac6 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="3.0"/>
+ <parameter constant="true" id="reac2_upper_bound" name="reac2 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac3_upper_bound" name="reac3 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac4_upper_bound" name="reac4 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac5_upper_bound" name="reac5 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac7_upper_bound" name="reac7 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ </listOfParameters>
+ <listOfReactions>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac1_upper_bound" id="reac1" name="reac1" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="A_ext" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="A" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_default_lb" fbc:upperFluxBound="reac2_upper_bound" id="reac2" name="reac2" reversible="true">
+ <listOfReactants>
+ <speciesReference constant="true" species="A" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="B" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac3_upper_bound" id="reac3" name="reac3" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="A" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="C" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac4_upper_bound" id="reac4" name="reac4" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="B" stoichiometry="1.0"/>
+ <speciesReference constant="true" species="C" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="D" stoichiometry="1.5"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac5_upper_bound" id="reac5" name="reac5" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="D" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="D_ext" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac6_upper_bound" id="reac6" name="reac6" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="E_ext" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="E" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac7_upper_bound" id="reac7" name="reac7" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="E" stoichiometry="2.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="D" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ </listOfReactions>
+ </model>
+</sbml>
\ No newline at end of file
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/ExtractSubReactionNetwork/ExtractSubReactionNetwork.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/ExtractSubReactionNetwork/ExtractSubReactionNetwork.xml Wed May 17 13:26:37 2023 +0000
[
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tool id="met4j_ExtractSubReactionNetwork" name="ExtractSubReactionNetwork" version="1.3.0">
+  <description>Create a subnetwork from a GSMN in SBML format, and two files containing lists of reactions of interests ids, one per row, plus one file of the same format containing side compounds ids.</description>
+  <xrefs>
+    <xref type="bio.tools">met4j</xref>
+  </xrefs>
+  <requirements>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.3.0</container>
+  </requirements>
+  <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh networkAnalysis.ExtractSubReactionNetwork -i "$inputPath"
+ -s "$sourcePath"
+ $undirected
+ $asTable
+ -t "$targetPath"
+ -sc "$sideCompoundFile"
+#if str($weightFile) != 'None':
+ -cw "$weightFile"
+#end if
+#if str($k):
+ -k "$k"
+#end if
+ $st
+ -o "$outputPath"
+]]></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="-u" checked="false" falsevalue="" label="Ignore reaction direction" name="undirected" truevalue="-u" type="boolean" value="false"/>
+    <param argument="-tab" checked="false" falsevalue="" label="Export in tabulated file instead of .GML" name="asTable" truevalue="-tab" type="boolean" value="false"/>
+    <param argument="-t" format="txt" label="input targets txt file" name="targetPath" optional="false" type="data" value=""/>
+    <param argument="-sc" format="txt" label="a file containing list of side compounds to ignore" name="sideCompoundFile" optional="false" type="data" value=""/>
+    <param argument="-cw" format="tsv" label="an optional file containing weights for reactions pairs" name="weightFile" optional="true" type="data" value=""/>
+    <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"/>
+  </inputs>
+  <outputs>
+    <data format="gml" name="outputPath"/>
+  </outputs>
+  <tests>
+    <test>
+      <param name="inputPath" value="toy_model.xml"/>
+      <param name="sourcePath" value="seeds.txt"/>
+      <param name="targetPath" value="targets.txt"/>
+      <param name="sideCompoundFile" value="sides.txt"/>
+      <output ftype="gml" name="outputPath">
+        <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 GSMN in SBML format, and two files containing lists of reactions of interests ids, one per row, plus one file of the same format containing side compounds ids.
+The subnetwork corresponds to part of the network that connects reactions from the first list to reactions 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. Contrary to compound graph, reaction graph often lacks weighting policy for edge relevance. In order to ensure appropriate network density, a list of side compounds to ignore for linking reactions must be provided. An optional edge weight file, if available, can also be used.]]></help>
+  <citations/>
+</tool>
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/ExtractSubReactionNetwork/test-data/seeds.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/ExtractSubReactionNetwork/test-data/seeds.txt Wed May 17 13:26:37 2023 +0000
b
@@ -0,0 +1,1 @@
+reac1
\ No newline at end of file
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/ExtractSubReactionNetwork/test-data/targets.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/ExtractSubReactionNetwork/test-data/targets.txt Wed May 17 13:26:37 2023 +0000
b
@@ -0,0 +1,1 @@
+reac4
\ No newline at end of file
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/ExtractSubReactionNetwork/test-data/toy_model.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/ExtractSubReactionNetwork/test-data/toy_model.xml Wed May 17 13:26:37 2023 +0000
[
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding='UTF-8' ?>
+<sbml fbc:required="false" groups:required="false" level="3" version="1"
+ xmlns="http://www.sbml.org/sbml/level3/version1/core"
+ xmlns:fbc="http://www.sbml.org/sbml/level3/version1/fbc/version2"
+ xmlns:groups="http://www.sbml.org/sbml/level3/version1/groups/version1">
+ <model fbc:strict="true" name="toy model">
+ <listOfUnitDefinitions>
+ <unitDefinition id="mmol_per_gDW_per_hr" name="mmol_per_gDW_per_hr">
+ <listOfUnits>
+ <unit exponent="-1" kind="gram" multiplier="1" scale="0"/>
+ <unit exponent="1" kind="mole" multiplier="1" scale="-3"/>
+ <unit exponent="-1" kind="second" multiplier="0.00027777" scale="0"/>
+ </listOfUnits>
+ </unitDefinition>
+ </listOfUnitDefinitions>
+ <listOfCompartments>
+ <compartment constant="false" id="c" name="Cytosol"/>
+ <compartment constant="false" id="e" name="Extracellular"/>
+ </listOfCompartments>
+ <listOfSpecies>
+ <species boundaryCondition="false" compartment="e" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="A_ext" name="A_ext">
+ <notes>
+ <body xmlns="http://www.w3.org/1999/xhtml">
+ <p>SMILES: C[C@@H](C(=O)O)NC</p>
+ </body>
+ </notes>
+ <annotation>
+ <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:bqbiol="http://biomodels.net/biology-qualifiers/">
+ <rdf:Description rdf:about="#A_ext">
+ <bqbiol:is>
+ <in:inchi xmlns:in="https://biomodels.net/inchi">InChI=1S/C2H6O/c1-2-3/h3H,2H2,1H3</in:inchi>
+ </bqbiol:is>
+ </rdf:Description>
+ </rdf:RDF>
+ </annotation>
+
+ </species>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="A" name="A"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="B" name="B"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="C" name="C"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="D" name="D"/>
+ <species boundaryCondition="false" compartment="e" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="D_ext" name="D_ext"/>
+ <species boundaryCondition="false" compartment="e" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="E_ext" name="E_ext"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="E" name="E"/>
+ </listOfSpecies>
+ <listOfParameters>
+ <parameter constant="true" id="cobra_default_lb" name="cobra default - lb" sboTerm="SBO:0000626" units="mmol_per_gDW_per_hr" value="-100000.0"/>
+ <parameter constant="true" id="cobra_default_ub" name="cobra default - ub" sboTerm="SBO:0000626" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="cobra_0_bound" name="cobra 0 - bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="0.0"/>
+ <parameter constant="true" id="reac1_upper_bound" name="reac1 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="10.0"/>
+ <parameter constant="true" id="reac6_upper_bound" name="reac6 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="3.0"/>
+ <parameter constant="true" id="reac2_upper_bound" name="reac2 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac3_upper_bound" name="reac3 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac4_upper_bound" name="reac4 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac5_upper_bound" name="reac5 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac7_upper_bound" name="reac7 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ </listOfParameters>
+ <listOfReactions>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac1_upper_bound" id="reac1" name="reac1" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="A_ext" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="A" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_default_lb" fbc:upperFluxBound="reac2_upper_bound" id="reac2" name="reac2" reversible="true">
+ <listOfReactants>
+ <speciesReference constant="true" species="A" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="B" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac3_upper_bound" id="reac3" name="reac3" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="A" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="C" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac4_upper_bound" id="reac4" name="reac4" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="B" stoichiometry="1.0"/>
+ <speciesReference constant="true" species="C" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="D" stoichiometry="1.5"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac5_upper_bound" id="reac5" name="reac5" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="D" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="D_ext" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac6_upper_bound" id="reac6" name="reac6" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="E_ext" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="E" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac7_upper_bound" id="reac7" name="reac7" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="E" stoichiometry="2.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="D" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ </listOfReactions>
+ </model>
+</sbml>
\ No newline at end of file
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/FbcToNotes/FbcToNotes.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/FbcToNotes/FbcToNotes.xml Wed May 17 13:26:37 2023 +0000
[
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tool id="met4j_FbcToNotes" name="FbcToNotes" version="1.3.0">
+  <description>Convert FBC package annotations to sbml notes</description>
+  <xrefs>
+    <xref type="bio.tools">met4j</xref>
+  </xrefs>
+  <requirements>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.3.0</container>
+  </requirements>
+  <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh convert.FbcToNotes -i "$inputPath"
+ -o "$outputPath"
+]]></command>
+  <inputs>
+    <param argument="-i" format="sbml" label="input file" name="inputPath" optional="false" type="data" value=""/>
+  </inputs>
+  <outputs>
+    <data format="sbml" name="outputPath"/>
+  </outputs>
+  <tests>
+    <test>
+      <param name="inputPath" value="ECOL.xml"/>
+      <output ftype="sbml" name="outputPath">
+        <assert_contents>
+          <is_valid_xml/>
+          <has_line_matching expression=".*GENE_ASSOCIATION: b2312.*" n="1"/>
+        </assert_contents>
+      </output>
+    </test>
+  </tests>
+  <help><![CDATA[Convert FBC package annotations to sbml notes]]></help>
+  <citations/>
+</tool>
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/FbcToNotes/test-data/ECOL.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/FbcToNotes/test-data/ECOL.xml Wed May 17 13:26:37 2023 +0000
b
b'@@ -0,0 +1,138833 @@\n+<?xml version="1.0" encoding="UTF-8"?>\r\n+<sbml fbc:required="false" groups:required="false" level="3" version="2" xmlns="http://www.sbml.org/sbml/level3/version2/core" xmlns:fbc="http://www.sbml.org/sbml/level3/version1/fbc/version2" xmlns:groups="http://www.sbml.org/sbml/level3/version1/groups/version1">\r\n+  <model fbc:strict="true" id="iML1515" metaid="iML1515" name="Escherichia coli str. K-12 substr. MG1655">\r\n+    <annotation>\r\n+      <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:bqbiol="http://biomodels.net/biology-qualifiers/">\r\n+        <rdf:Description rdf:about="#iML1515">\r\n+          <bqbiol:hasProperty>\r\n+            <rdf:Bag>\r\n+              <rdf:li rdf:resource="https://identifiers.org/pubmed/29020004"/>\r\n+              <rdf:li rdf:resource="https://identifiers.org/taxonomy/511145"/>\r\n+            </rdf:Bag>\r\n+          </bqbiol:hasProperty>\r\n+          <bqbiol:is>\r\n+            <rdf:Bag>\r\n+              <rdf:li rdf:resource="https://identifiers.org/bigg.model/iML1515"/>\r\n+            </rdf:Bag>\r\n+          </bqbiol:is>\r\n+        </rdf:Description>\r\n+      </rdf:RDF>\r\n+    </annotation>\r\n+    <fbc:listOfObjectives fbc:activeObjective="obj">\r\n+      <fbc:objective fbc:id="obj" fbc:type="maximize">\r\n+        <fbc:listOfFluxObjectives>\r\n+          <fbc:fluxObjective fbc:coefficient="1" fbc:reaction="R_BIOMASS_Ec_iML1515_core_75p37M"/>\r\n+        </fbc:listOfFluxObjectives>\r\n+      </fbc:objective>\r\n+    </fbc:listOfObjectives>\r\n+    <fbc:listOfGeneProducts>\r\n+      <fbc:geneProduct fbc:id="b4054" fbc:label="b4054" fbc:name="b4054" metaid="_19a85f06-f4d2-4ca4-962d-280d860d0188"/>\r\n+      <fbc:geneProduct fbc:id="b4053" fbc:label="b4053" fbc:name="b4053" metaid="_3320c40d-844a-45b2-a996-49c250766d53"/>\r\n+      <fbc:geneProduct fbc:id="b4298" fbc:label="b4298" fbc:name="b4298" metaid="_428fe2b1-ed44-4ef1-a55e-e9a88f70e43c"/>\r\n+      <fbc:geneProduct fbc:id="b4055" fbc:label="b4055" fbc:name="b4055" metaid="d3169d49-b4b4-439a-ba53-bb6292583779"/>\r\n+      <fbc:geneProduct fbc:id="b4297" fbc:label="b4297" fbc:name="b4297" metaid="_388e6eb0-5734-4c6e-9ef3-b927d0ee6f80"/>\r\n+      <fbc:geneProduct fbc:id="b4291" fbc:label="b4291" fbc:name="b4291" metaid="_9dd0f62e-2f14-4bef-b52a-262c735f727e"/>\r\n+      <fbc:geneProduct fbc:id="b0929" fbc:label="b0929" fbc:name="b0929" metaid="_337058ef-dd29-4e6e-861b-0c9a3c8ca11e"/>\r\n+      <fbc:geneProduct fbc:id="b0928" fbc:label="b0928" fbc:name="b0928" metaid="_2442f6a8-23e0-4e7d-99d6-3231f1260af1"/>\r\n+      <fbc:geneProduct fbc:id="b4290" fbc:label="b4290" fbc:name="b4290" metaid="cb5b0ae1-c107-4e9d-87bb-ca77a4e3d321"/>\r\n+      <fbc:geneProduct fbc:id="b0925" fbc:label="b0925" fbc:name="b0925" metaid="_80d0d7b3-f687-4841-8710-c3fe1788eb09"/>\r\n+      <fbc:geneProduct fbc:id="b4289" fbc:label="b4289" fbc:name="b4289" metaid="_813528ea-ec16-47fe-87cb-9dec6c6b78e2"/>\r\n+      <fbc:geneProduct fbc:id="b3199" fbc:label="b3199" fbc:name="b3199" metaid="_691a4ce9-01cd-4521-9e44-ae134a3d2a7f"/>\r\n+      <fbc:geneProduct fbc:id="b4288" fbc:label="b4288" fbc:name="b4288" metaid="fe7c001f-5b97-4a68-b421-36b27339b0dd"/>\r\n+      <fbc:geneProduct fbc:id="b4042" fbc:label="b4042" fbc:name="b4042" metaid="a9592745-8729-473a-9cb6-d5827d734dda"/>\r\n+      <fbc:geneProduct fbc:id="b3196" fbc:label="b3196" fbc:name="b3196" metaid="fd61ed6b-3ce6-42c8-ac48-d8ea58fc2bac"/>\r\n+      <fbc:geneProduct fbc:id="b3197" fbc:label="b3197" fbc:name="b3197" metaid="c9c8d396-7abc-4f97-8994-3a3e334ed6b1"/>\r\n+      <fbc:geneProduct fbc:id="b4287" fbc:label="b4287" fbc:name="b4287" metaid="c7589f3b-726a-4909-9514-d9eb40ef6815"/>\r\n+      <fbc:geneProduct fbc:id="b3198" fbc:label="b3198" fbc:name="b3198" metaid="bc09d6b2-a4bc-463c-bec4-8cfa2dd246cd"/>\r\n+      <fbc:geneProduct fbc:id="b4041" fbc:label="b4041" fbc:name="b4041" metaid="_94a9500a-9cb8-471a-960c-ed3dd82df137"/>\r\n+      <fbc:geneProduct fbc:id="b4040" fbc:label="b4040" fbc:name="b4040" metaid="_5f93eaf9-e592-4529-bb84-f8662'..b'tAssociation>\r\n+        <listOfReactants>\r\n+          <speciesReference constant="true" species="M_atp_c" stoichiometry="1"/>\r\n+          <speciesReference constant="true" species="M_glu__L_c" stoichiometry="1"/>\r\n+          <speciesReference constant="true" species="M_ptrc_c" stoichiometry="1"/>\r\n+        </listOfReactants>\r\n+        <listOfProducts>\r\n+          <speciesReference constant="true" species="M_pi_c" stoichiometry="1"/>\r\n+          <speciesReference constant="true" species="M_h_c" stoichiometry="1"/>\r\n+          <speciesReference constant="true" species="M_ggptrc_c" stoichiometry="1"/>\r\n+          <speciesReference constant="true" species="M_adp_c" stoichiometry="1"/>\r\n+        </listOfProducts>\r\n+      </reaction>\r\n+      <reaction fbc:lowerFluxBound="LOWER_BOUND_1000_0" fbc:upperFluxBound="UPPER_BOUND_1000_0" id="R_ARBtex" metaid="b50bec2f-a0bc-4dbb-af50-60907396df82" name="L-arabinose transport via diffusion (extracellular to periplasm)" reversible="true" sboTerm="SBO:0000185">\r\n+        <annotation>\r\n+          <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:bqbiol="http://biomodels.net/biology-qualifiers/">\r\n+            <rdf:Description rdf:about="#b50bec2f-a0bc-4dbb-af50-60907396df82">\r\n+              <bqbiol:is>\r\n+                <rdf:Bag>\r\n+                  <rdf:li rdf:resource="https://identifiers.org/metanetx.reaction/MNXR95913"/>\r\n+                  <rdf:li rdf:resource="https://identifiers.org/bigg.reaction/ARBtex"/>\r\n+                </rdf:Bag>\r\n+              </bqbiol:is>\r\n+            </rdf:Description>\r\n+          </rdf:RDF>\r\n+        </annotation>\r\n+        <fbc:geneProductAssociation>\r\n+          <fbc:or>\r\n+            <fbc:geneProductRef fbc:geneProduct="b1377"/>\r\n+            <fbc:geneProductRef fbc:geneProduct="b0929"/>\r\n+            <fbc:geneProductRef fbc:geneProduct="b0241"/>\r\n+            <fbc:geneProductRef fbc:geneProduct="b2215"/>\r\n+          </fbc:or>\r\n+        </fbc:geneProductAssociation>\r\n+        <listOfReactants>\r\n+          <speciesReference constant="true" species="M_arab__L_e" stoichiometry="1"/>\r\n+        </listOfReactants>\r\n+        <listOfProducts>\r\n+          <speciesReference constant="true" species="M_arab__L_p" stoichiometry="1"/>\r\n+        </listOfProducts>\r\n+      </reaction>\r\n+      <reaction fbc:lowerFluxBound="LOWER_BOUND_0_0" fbc:upperFluxBound="UPPER_BOUND_1000_0" id="R_FACOAE120" metaid="_50a8274a-ed7a-4669-a5cf-95aa9824ac76" name="Fatty-acid-CoA thioesterase (dodecanoate)" reversible="false" sboTerm="SBO:0000176">\r\n+        <annotation>\r\n+          <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:bqbiol="http://biomodels.net/biology-qualifiers/">\r\n+            <rdf:Description rdf:about="#_50a8274a-ed7a-4669-a5cf-95aa9824ac76">\r\n+              <bqbiol:is>\r\n+                <rdf:Bag>\r\n+                  <rdf:li rdf:resource="https://identifiers.org/ec-code/3.1.2.2"/>\r\n+                  <rdf:li rdf:resource="https://identifiers.org/metanetx.reaction/MNXR99128"/>\r\n+                  <rdf:li rdf:resource="https://identifiers.org/bigg.reaction/FACOAE120"/>\r\n+                </rdf:Bag>\r\n+              </bqbiol:is>\r\n+            </rdf:Description>\r\n+          </rdf:RDF>\r\n+        </annotation>\r\n+        <fbc:geneProductAssociation>\r\n+          <fbc:geneProductRef fbc:geneProduct="b0452"/>\r\n+        </fbc:geneProductAssociation>\r\n+        <listOfReactants>\r\n+          <speciesReference constant="true" species="M_ddcacoa_c" stoichiometry="1"/>\r\n+          <speciesReference constant="true" species="M_h2o_c" stoichiometry="1"/>\r\n+        </listOfReactants>\r\n+        <listOfProducts>\r\n+          <speciesReference constant="true" species="M_ddca_c" stoichiometry="1"/>\r\n+          <speciesReference constant="true" species="M_h_c" stoichiometry="1"/>\r\n+          <speciesReference constant="true" species="M_coa_c" stoichiometry="1"/>\r\n+        </listOfProducts>\r\n+      </reaction>\r\n+    </listOfReactions>\r\n+  </model>\r\n+</sbml>\r\n'
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/FbcToNotes/test-data/buc.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/FbcToNotes/test-data/buc.xml Wed May 17 13:26:37 2023 +0000
b
b'@@ -0,0 +1,28791 @@\n+<?xml version="1.0" encoding="UTF-8"?>\r\n+<sbml fbc:required="false" groups:required="false" level="3" version="2" xmlns="http://www.sbml.org/sbml/level3/version2/core" xmlns:fbc="http://www.sbml.org/sbml/level3/version1/fbc/version2" xmlns:groups="http://www.sbml.org/sbml/level3/version1/groups/version1">\r\n+  <model fbc:strict="true" id="buc" metaid="buc" name="Buchnera aphidicola APS (Acyrthosiphon pisum)">\r\n+    <fbc:listOfGeneProducts>\r\n+      <fbc:geneProduct fbc:id="buc_BU293" fbc:label="buc_BU293" fbc:name="buc_BU293" metaid="_3b5f29b7-7d2a-4855-93b8-7c90d14d0ab3"/>\r\n+      <fbc:geneProduct fbc:id="buc_BU051" fbc:label="buc_BU051" fbc:name="buc_BU051" metaid="_8a589982-8208-4c05-bc37-97d713484725"/>\r\n+      <fbc:geneProduct fbc:id="buc_BUpT04" fbc:label="buc_BUpT04" fbc:name="buc_BUpT04" metaid="_3a2826c8-559c-49db-8e70-9af02879cbdb"/>\r\n+      <fbc:geneProduct fbc:id="buc_BU291" fbc:label="buc_BU291" fbc:name="buc_BU291" metaid="_85548c7c-4cf5-4109-ab4b-bd0a6361c04b"/>\r\n+      <fbc:geneProduct fbc:id="buc_BU170" fbc:label="buc_BU170" fbc:name="buc_BU170" metaid="_8f006f07-a581-4cab-b1aa-f8d9f38dc0f9"/>\r\n+      <fbc:geneProduct fbc:id="buc_BUpT02" fbc:label="buc_BUpT02" fbc:name="buc_BUpT02" metaid="cf85bb50-9322-4868-9902-03ee9365d0e6"/>\r\n+      <fbc:geneProduct fbc:id="buc_BU292" fbc:label="buc_BU292" fbc:name="buc_BU292" metaid="_3c5b7024-2d3c-42ae-864e-e02d4e71f1e9"/>\r\n+      <fbc:geneProduct fbc:id="buc_BU050" fbc:label="buc_BU050" fbc:name="buc_BU050" metaid="c77a76da-75c5-4122-b882-98c2116484e6"/>\r\n+      <fbc:geneProduct fbc:id="buc_BU176" fbc:label="buc_BU176" fbc:name="buc_BU176" metaid="_8c90399e-5172-4f88-82b3-e0eaf422539a"/>\r\n+      <fbc:geneProduct fbc:id="buc_BU298" fbc:label="buc_BU298" fbc:name="buc_BU298" metaid="_852f4d50-98a9-497e-9f57-3736f27f524f"/>\r\n+      <fbc:geneProduct fbc:id="buc_BU174" fbc:label="buc_BU174" fbc:name="buc_BU174" metaid="e7c0475f-0389-402f-9044-d716fea29b35"/>\r\n+      <fbc:geneProduct fbc:id="buc_BU175" fbc:label="buc_BU175" fbc:name="buc_BU175" metaid="c2d2667e-10da-41c1-b5ac-11180100406d"/>\r\n+      <fbc:geneProduct fbc:id="buc_BU054" fbc:label="buc_BU054" fbc:name="buc_BU054" metaid="_9e5390cf-8fe6-4103-84e3-5f5811ea6180"/>\r\n+      <fbc:geneProduct fbc:id="buc_BUpL04" fbc:label="buc_BUpL04" fbc:name="buc_BUpL04" metaid="aee65279-ea43-4153-8560-5d373615bbd4"/>\r\n+      <fbc:geneProduct fbc:id="buc_BUpL05" fbc:label="buc_BUpL05" fbc:name="buc_BUpL05" metaid="_6fb2a307-08e7-4f59-95f5-d0ceb27321b1"/>\r\n+      <fbc:geneProduct fbc:id="buc_BU290" fbc:label="buc_BU290" fbc:name="buc_BU290" metaid="_377460d5-e612-4055-a588-1b203582963a"/>\r\n+      <fbc:geneProduct fbc:id="buc_BUpT01" fbc:label="buc_BUpT01" fbc:name="buc_BUpT01" metaid="_4d2fcfa4-9f8c-4842-a321-20ae0759bf25"/>\r\n+      <fbc:geneProduct fbc:id="buc_BUpL06" fbc:label="buc_BUpL06" fbc:name="buc_BUpL06" metaid="ad75dc9b-6e4c-4cc9-98cf-e7f804972240"/>\r\n+      <fbc:geneProduct fbc:id="buc_BUpL07" fbc:label="buc_BUpL07" fbc:name="buc_BUpL07" metaid="_5aac7d7b-3348-4513-ab18-d47f1e36ed94"/>\r\n+      <fbc:geneProduct fbc:id="buc_BU059" fbc:label="buc_BU059" fbc:name="buc_BU059" metaid="ed03e996-5fc7-4f90-844a-a0c796dbf309"/>\r\n+      <fbc:geneProduct fbc:id="buc_BU178" fbc:label="buc_BU178" fbc:name="buc_BU178" metaid="a07f353e-0e3c-4d70-bb5e-f7a0e2cf1fb9"/>\r\n+      <fbc:geneProduct fbc:id="buc_BU179" fbc:label="buc_BU179" fbc:name="buc_BU179" metaid="_9d769994-4e9d-4748-b87b-7d733fff66fe"/>\r\n+      <fbc:geneProduct fbc:id="buc_BU062" fbc:label="buc_BU062" fbc:name="buc_BU062" metaid="_1847b7b2-6229-4b90-aa24-9a0a474c604d"/>\r\n+      <fbc:geneProduct fbc:id="buc_BU063" fbc:label="buc_BU063" fbc:name="buc_BU063" metaid="_02cb5b81-b8f2-4415-ad27-9a55199a6dc1"/>\r\n+      <fbc:geneProduct fbc:id="buc_BU066" fbc:label="buc_BU066" fbc:name="buc_BU066" metaid="ad17e3c7-859a-4246-8c45-b6f74c3afdef"/>\r\n+      <fbc:geneProduct fbc:id="buc_BU185" fbc:label="buc_BU185" fbc:name="buc_BU185" metaid="e9ef2a88-b64b-4ef5-ba3f-35e1'..b'etry="1"/>\r\n+          <speciesReference constant="true" species="C00005" stoichiometry="1"/>\r\n+          <speciesReference constant="true" species="C00415" stoichiometry="1"/>\r\n+        </listOfProducts>\r\n+      </reaction>\r\n+      <reaction fbc:lowerFluxBound="LOWER_BOUND_99999_0" fbc:upperFluxBound="UPPER_BOUND_99999_0" id="R05032" metaid="e1c5ab23-36d5-427b-8f55-220d74146e1e" name="UDP-N-acetyl-D-glucosamine:undecaprenyl-diphospho-N-acetylmuramoyl-L-alanyl-gamma-D-glutamyl-meso-2,6-diaminopimeloyl-D-alanyl-D-alanine 4-beta-N-acetylglucosaminlytransferase" reversible="true">\r\n+        <notes>\r\n+          <body xmlns="http://www.w3.org/1999/xhtml">\r\n+            <p>SUBSYSTEM: Metabolic pathways - Buchnera aphidicola APS (Acyrthosiphon pisum) || Peptidoglycan biosynthesis - Buchnera aphidicola APS (Acyrthosiphon pisum)</p>\r\n+            <p>EC_NUMBER: 2.4.1.227</p>\r\n+            <p>GENE_ASSOCIATION: buc_BU216</p>\r\n+          </body>\r\n+        </notes>\r\n+        <annotation>\r\n+          <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:bqbiol="http://biomodels.net/biology-qualifiers/">\r\n+            <rdf:Description rdf:about="#e1c5ab23-36d5-427b-8f55-220d74146e1e">\r\n+              <bqbiol:is>\r\n+                <rdf:Bag>\r\n+                  <rdf:li rdf:resource="https://identifiers.org/ec-code/2.4.1.227"/>\r\n+                </rdf:Bag>\r\n+              </bqbiol:is>\r\n+            </rdf:Description>\r\n+          </rdf:RDF>\r\n+        </annotation>\r\n+        <fbc:geneProductAssociation>\r\n+          <fbc:geneProductRef fbc:geneProduct="buc_BU216"/>\r\n+        </fbc:geneProductAssociation>\r\n+        <listOfReactants>\r\n+          <speciesReference constant="true" species="C00043" stoichiometry="1"/>\r\n+          <speciesReference constant="true" species="C05897" stoichiometry="1"/>\r\n+        </listOfReactants>\r\n+        <listOfProducts>\r\n+          <speciesReference constant="true" species="C00015" stoichiometry="1"/>\r\n+          <speciesReference constant="true" species="C05898" stoichiometry="1"/>\r\n+        </listOfProducts>\r\n+      </reaction>\r\n+      <reaction fbc:lowerFluxBound="LOWER_BOUND_99999_0" fbc:upperFluxBound="UPPER_BOUND_99999_0" id="R10859" metaid="a2dbda09-1883-4324-822d-a0f2a574c50a" name="(E)-4-hydroxy-3-methylbut-2-en-1-yl-diphosphate:oxidized flavodoxin oxidoreductase" reversible="true">\r\n+        <notes>\r\n+          <body xmlns="http://www.w3.org/1999/xhtml">\r\n+            <p>SUBSYSTEM: Metabolic pathways - Buchnera aphidicola APS (Acyrthosiphon pisum) || Terpenoid backbone biosynthesis - Buchnera aphidicola APS (Acyrthosiphon pisum)</p>\r\n+            <p>EC_NUMBER: 1.17.7.3</p>\r\n+            <p>GENE_ASSOCIATION: buc_BU287</p>\r\n+          </body>\r\n+        </notes>\r\n+        <annotation>\r\n+          <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:bqbiol="http://biomodels.net/biology-qualifiers/">\r\n+            <rdf:Description rdf:about="#a2dbda09-1883-4324-822d-a0f2a574c50a">\r\n+              <bqbiol:is>\r\n+                <rdf:Bag>\r\n+                  <rdf:li rdf:resource="https://identifiers.org/ec-code/1.17.7.3"/>\r\n+                </rdf:Bag>\r\n+              </bqbiol:is>\r\n+            </rdf:Description>\r\n+          </rdf:RDF>\r\n+        </annotation>\r\n+        <fbc:geneProductAssociation>\r\n+          <fbc:geneProductRef fbc:geneProduct="buc_BU287"/>\r\n+        </fbc:geneProductAssociation>\r\n+        <listOfReactants>\r\n+          <speciesReference constant="true" species="C11811" stoichiometry="1"/>\r\n+          <speciesReference constant="true" species="C00001" stoichiometry="1"/>\r\n+          <speciesReference constant="true" species="C02869" stoichiometry="1"/>\r\n+        </listOfReactants>\r\n+        <listOfProducts>\r\n+          <speciesReference constant="true" species="C02745" stoichiometry="1"/>\r\n+          <speciesReference constant="true" species="C11453" stoichiometry="1"/>\r\n+        </listOfProducts>\r\n+      </reaction>\r\n+    </listOfReactions>\r\n+  </model>\r\n+</sbml>\r\n'
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/GetGenesFromReactions/GetGenesFromReactions.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/GetGenesFromReactions/GetGenesFromReactions.xml Wed May 17 13:26:37 2023 +0000
[
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tool id="met4j_GetGenesFromReactions" name="GetGenesFromReactions" version="1.3.0">
+  <description>Get gene lists from a list of reactions and a GSMN.</description>
+  <xrefs>
+    <xref type="bio.tools">met4j</xref>
+  </xrefs>
+  <requirements>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.3.0</container>
+  </requirements>
+  <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh attributes.GetGenesFromReactions -i "$sbml"
+ -r "$reactionFile"
+#if str($sep):
+ -sep "$sep"
+#end if
+ $hasHeader
+#if str($i) != 'nan':
+ -col "$i"
+#end if
+ -o "$outputFile"
+]]></command>
+  <inputs>
+    <param argument="-i" format="sbml" label="Input SBML file" name="sbml" optional="false" type="data" value=""/>
+    <param argument="-r" format="tsv" label="Input Reaction file" name="reactionFile" optional="false" type="data" value=""/>
+    <param argument="-sep" label="Separator in reaction file" name="sep" optional="true" type="text" value="&#9;">
+      <sanitizer invalid_char="_">
+        <valid initial="string.printable"/>
+      </sanitizer>
+    </param>
+    <param argument="-header" checked="false" falsevalue="" label="Skip reaction file header" name="hasHeader" truevalue="-header" type="boolean" value="false"/>
+    <param argument="-col" label="Column number in reaction file (first as 1)" name="i" optional="true" type="integer" value="1"/>
+  </inputs>
+  <outputs>
+    <data format="tsv" name="outputFile"/>
+  </outputs>
+  <tests>
+    <test>
+    <param name="sbml" value="XF_network.sbml"/>
+    <param name="reactionFile" value="XF_network_R_Seed.tab"/>
+    <output ftype="tsv" name="outputFile">
+      <assert_contents>
+        <has_n_lines n="2"/>
+        <has_line_matching expression="R_GLUN.*XFCFBP8418_026750" n="1"/>
+        <has_line_matching expression="R_ACGS.*XFCFBP8418_025260" n="1"/>
+      </assert_contents>
+    </output>
+  </test>
+  </tests>
+  <help><![CDATA[Get associated gene list from a list of reactions and a GSMN. Parse GSMN GPR annotations and output a tab-separated file with one row per gene, associated reaction identifiers from input file in first column, gene identifiers in second column.]]></help>
+  <citations/>
+</tool>
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/GetGenesFromReactions/test-data/XF_network.sbml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/GetGenesFromReactions/test-data/XF_network.sbml Wed May 17 13:26:37 2023 +0000
b
b'@@ -0,0 +1,47267 @@\n+<?xml version="1.0" encoding="UTF-8"?>\n+<sbml fbc:required="false" groups:required="false" level="3" version="2" xmlns="http://www.sbml.org/sbml/level3/version2/core" xmlns:fbc="http://www.sbml.org/sbml/level3/version1/fbc/version2" xmlns:groups="http://www.sbml.org/sbml/level3/version1/groups/version1">\n+  <model fbc:strict="true" id="Xfm1158" metaid="Xfm1158" name="Xfm1158">\n+    <fbc:listOfGeneProducts>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_007090" fbc:label="XFCFBP8418_007090" fbc:name="XFCFBP8418_007090" metaid="_8a7d7180-d79e-4dbb-86ed-f8d7eb60e698"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_005900" fbc:label="XFCFBP8418_005900" fbc:name="XFCFBP8418_005900" metaid="_867487dd-ff57-4e93-8de9-b5ecb805e0eb"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_011590" fbc:label="XFCFBP8418_011590" fbc:name="XFCFBP8418_011590" metaid="_44606760-936c-4585-b40c-650e953a5f73"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_014620" fbc:label="XFCFBP8418_014620" fbc:name="XFCFBP8418_014620" metaid="da273da9-0f84-4615-a464-2ab71416e8cc"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_015830" fbc:label="XFCFBP8418_015830" fbc:name="XFCFBP8418_015830" metaid="_3a9239a2-8e23-4834-99a8-a7dc15f6d906"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_014980" fbc:label="XFCFBP8418_014980" fbc:name="XFCFBP8418_014980" metaid="_7f26806b-e32e-4c5c-a78d-9e094c267bbf"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_020190" fbc:label="XFCFBP8418_020190" fbc:name="XFCFBP8418_020190" metaid="_31bbb514-1d52-4727-91cb-367af12e95ca"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_004940" fbc:label="XFCFBP8418_004940" fbc:name="XFCFBP8418_004940" metaid="a2f20753-c245-477e-8363-8f5e45c50f5d"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_021160" fbc:label="XFCFBP8418_021160" fbc:name="XFCFBP8418_021160" metaid="_844bdacc-d091-457d-9c4d-846cb9aab3c1"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_025760" fbc:label="XFCFBP8418_025760" fbc:name="XFCFBP8418_025760" metaid="fd8a601e-e56f-4263-9aa7-6ed9bf85f958"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_024670" fbc:label="XFCFBP8418_024670" fbc:name="XFCFBP8418_024670" metaid="_2bbe03ce-c814-417a-b9c0-e8a1f29f4106"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_004820" fbc:label="XFCFBP8418_004820" fbc:name="XFCFBP8418_004820" metaid="_41cb6d94-13d8-461e-a217-29a68e21cd2b"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_023580" fbc:label="XFCFBP8418_023580" fbc:name="XFCFBP8418_023580" metaid="_31ff72d7-4e30-4563-85aa-4afc58dd6bee"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_000460" fbc:label="XFCFBP8418_000460" fbc:name="XFCFBP8418_000460" metaid="d7ea14e6-cd6c-4404-b973-486ade662242"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_026730" fbc:label="XFCFBP8418_026730" fbc:name="XFCFBP8418_026730" metaid="e876348e-787e-4f2a-8904-e675c2589c17"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_025640" fbc:label="XFCFBP8418_025640" fbc:name="XFCFBP8418_025640" metaid="b5b93812-bd2e-4ca8-8328-e1d35e17ac3a"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_023100" fbc:label="XFCFBP8418_023100" fbc:name="XFCFBP8418_023100" metaid="f62e0096-7b12-4db3-a7b0-2e1cfa0302c6"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_027800" fbc:label="XFCFBP8418_027800" fbc:name="XFCFBP8418_027800" metaid="_8beb93ba-34a4-4330-86bf-2c47b1cb7f2e"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_004700" fbc:label="XFCFBP8418_004700" fbc:name="XFCFBP8418_004700" metaid="_2aceabe8-5294-42eb-9d3b-2506634c68d5"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_005910" fbc:label="XFCFBP8418_005910" fbc:name="XFCFBP8418_005910" metaid="a7b44241-024e-49c1-88af-1e1108cf09eb"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_013540" fbc:label="XFCFBP8418_013540" fbc:name="XFCFBP8418_013540" metaid="_83bdba7b-0eb0-4dfb-99ed-6e365240d870"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_011240" fbc:label="XFCFBP8418_011240" fbc:name="XFCFBP8418_011240" metaid="_568b9959-99b6-49bd-86d7-04e773d940da"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_012210" fbc:label="XFCFBP8418_01221'..b'     </annotation>\n+        <fbc:geneProductAssociation>\n+          <fbc:geneProductRef fbc:geneProduct="XFCFBP8418_010590"/>\n+        </fbc:geneProductAssociation>\n+        <listOfReactants>\n+          <speciesReference constant="true" species="M_cyst_L_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_h2o_c" stoichiometry="1"/>\n+        </listOfReactants>\n+        <listOfProducts>\n+          <speciesReference constant="true" species="M_2obut_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_cys_L_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_nh4_c" stoichiometry="1"/>\n+        </listOfProducts>\n+      </reaction>\n+      <reaction fbc:lowerFluxBound="LOWER_BOUND_99999_0" fbc:upperFluxBound="UPPER_BOUND_99999_0" id="R_FUCtpp" metaid="_34363cfc-fa7f-4df4-a073-49f5befcdf50" name="R_FUCtpp" reversible="true">\n+        <notes>\n+          <body xmlns="http://www.w3.org/1999/xhtml">\n+            <p>GENE_ASSOCIATION: XFCFBP8418_018650</p>\n+            <p>SUBSYSTEM: Transport__Inner_Membrane</p>\n+            <p>EC_NUMBER: No_Assignment</p>\n+          </body>\n+        </notes>\n+        <annotation>\n+          <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:bqbiol="http://biomodels.net/biology-qualifiers/">\n+            <rdf:Description rdf:about="#_34363cfc-fa7f-4df4-a073-49f5befcdf50">\n+              <bqbiol:is>\n+                <rdf:Bag>\n+                  <rdf:li rdf:resource="http://identifiers.org/ec-code/No_Assignment"/>\n+                </rdf:Bag>\n+              </bqbiol:is>\n+            </rdf:Description>\n+          </rdf:RDF>\n+        </annotation>\n+        <fbc:geneProductAssociation>\n+          <fbc:geneProductRef fbc:geneProduct="XFCFBP8418_018650"/>\n+        </fbc:geneProductAssociation>\n+        <listOfReactants>\n+          <speciesReference constant="true" species="M_h_p" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_fuc_L_p" stoichiometry="1"/>\n+        </listOfReactants>\n+        <listOfProducts>\n+          <speciesReference constant="true" species="M_fuc_L_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_h_c" stoichiometry="1"/>\n+        </listOfProducts>\n+      </reaction>\n+      <reaction fbc:lowerFluxBound="LOWER_BOUND_0_0" fbc:upperFluxBound="UPPER_BOUND_99999_0" id="R_FACOAE120" metaid="_2691931b-9cfe-40d9-95d9-13e4ed057413" name="R_FACOAE120" reversible="false">\n+        <notes>\n+          <body xmlns="http://www.w3.org/1999/xhtml">\n+            <p>GENE_ASSOCIATION: XFCFBP8418_025070</p>\n+            <p>SUBSYSTEM: Cell_Envelope_Biosynthesis</p>\n+            <p>EC_NUMBER: 3.1.2.20</p>\n+          </body>\n+        </notes>\n+        <annotation>\n+          <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:bqbiol="http://biomodels.net/biology-qualifiers/">\n+            <rdf:Description rdf:about="#_2691931b-9cfe-40d9-95d9-13e4ed057413">\n+              <bqbiol:is>\n+                <rdf:Bag>\n+                  <rdf:li rdf:resource="http://identifiers.org/ec-code/3.1.2.20"/>\n+                </rdf:Bag>\n+              </bqbiol:is>\n+            </rdf:Description>\n+          </rdf:RDF>\n+        </annotation>\n+        <fbc:geneProductAssociation>\n+          <fbc:geneProductRef fbc:geneProduct="XFCFBP8418_025070"/>\n+        </fbc:geneProductAssociation>\n+        <listOfReactants>\n+          <speciesReference constant="true" species="M_ddcacoa_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_h2o_c" stoichiometry="1"/>\n+        </listOfReactants>\n+        <listOfProducts>\n+          <speciesReference constant="true" species="M_ddca_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_h_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_coa_c" stoichiometry="1"/>\n+        </listOfProducts>\n+      </reaction>\n+    </listOfReactions>\n+  </model>\n+</sbml>\n'
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/GetGenesFromReactions/test-data/XF_network_R_Seed.tab
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/GetGenesFromReactions/test-data/XF_network_R_Seed.tab Wed May 17 13:26:37 2023 +0000
b
@@ -0,0 +1,2 @@
+R_ACGS
+R_GLUN
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/GetModelProteome/GetModelProteome.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/GetModelProteome/GetModelProteome.xml Wed May 17 13:26:37 2023 +0000
[
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tool id="met4j_GetModelProteome" name="GetModelProteome" version="1.3.0">
+  <description>Get proteome in fasta format of a model present in BIGG</description>
+  <xrefs>
+    <xref type="bio.tools">met4j</xref>
+  </xrefs>
+  <requirements>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.3.0</container>
+  </requirements>
+  <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh bigg.GetModelProteome -m "$modelId"
+ -o "$outputFile"
+]]></command>
+  <inputs>
+    <param argument="-m" label="[ex: iMM904] id of the BIGG model" name="modelId" optional="false" type="text" value="iMM904">
+      <sanitizer invalid_char="_">
+        <valid initial="string.printable"/>
+      </sanitizer>
+    </param>
+  </inputs>
+  <outputs>
+    <data format="fasta" name="outputFile"/>
+  </outputs>
+  <tests>
+    <test maxseconds="120">
+      <param name="modelId" value="e_coli_core"/>
+      <output ftype="fasta" name="outputFile">
+        <assert_contents>
+          <has_line_matching expression=".*name=.*" n="136"/>
+        </assert_contents>
+      </output>
+    </test>
+  </tests>
+  <help><![CDATA[Get proteome in fasta format of a model present in BIGG]]></help>
+  <citations/>
+</tool>
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/GetModelProteome/proteome.fas
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/GetModelProteome/proteome.fas Wed May 17 13:26:37 2023 +0000
b
b'@@ -0,0 +1,1153 @@\n+>b0755 name=gpmA\n+MAVTKLVLVRHGESQWNKENRFTGWYDVDLSEKGVSEAKAAGKLLKEEGYSFDFAYTSVL\n+KRAIHTLWNVLDELDQAWLPVEKSWKLNERHYGALQGLNKAETAEKYGDEQVKQWRRGFA\n+VTPPELTKDDERYPGHDPRYAKLSEKELPLTESLALTIDRVIPYWNETILPRMKSGERVI\n+IAAHGNSLRALVKYLDNMSEEEILELNIPTGVPLVYEFDENFKPLKRYYLGNADEIAAKA\n+AAVANQGKAK\n+>b0008 name=talB\n+MTDKLTSLRQYTTVVADTGDIAAMKLYQPQDATTNPSLILNAAQIPEYRKLIDDAVAWAK\n+QQSNDRAQQIVDATDKLAVNIGLEILKLVPGRISTEVDARLSYDTEASIAKAKRLIKLYN\n+DAGISNDRILIKLASTWQGIRAAEQLEKEGINCNLTLLFSFAQARACAEAGVFLISPFVG\n+RILDWYKANTDKKEYAPAEDPGVVSVSEIYQYYKEHGYETVVMGASFRNIGEILELAGCD\n+RLTIAPALLKELAESEGAIERKLSYTGEVKARPARITESEFLWQHNQDPMAVDKLAEGIR\n+KFAIDQEKLEKMIGDLL\n+>b3951 name=pflD\n+MTNRISRLKTALFANTREISLERALLYTASHRQTEGEPVILRRAKATAYILEHVEISIRD\n+EELIAGNRTVKPRAGIMSPEMDPYWLLKELDQFPTRPQDRFAISEEDKRIYREELFPYWE\n+KRSMKDFINGQMTDEVKAATNTQIFSINQTDKGQGHIIIDYPRLLNHGLGELVAQMQQHC\n+QQQPENHFYQAALLLLEASQKHILRYAELAETMAANCTDAQRREELLTIAEISRHNAQHK\n+PQTFWQACQLFWYMNIILQYESNASSLSLGRFDQYMLPFYQTSLTQGEDAAFLKELLESL\n+WVKCNDIVLLRSTSSARYFAGFPTGYTALLGGLTENGRSAVNVLSFLCLDAYQSVQLPQP\n+NLGVRTNALIDTPFLMKTAETIRFGTGIPQIFNDEVVVPAFLNRGVSLEDARDYSVVGCV\n+ELSIPGRTYGLHDIAMFNLLKVMEICLHENEGNAALTYEGLLEQIRAKISHYITLMVEGS\n+NICDIGHRDWAPVPLLSSFISDCLEKGRDITDGGARYNFSGVQGIGIANLSDSLHALKGM\n+VFEQQRLSFDELLSVLKANFATPEGEKVRARLINRFEKYGNDIDEVDNISAELLRHYCKE\n+VEKYQNPRGGYFTPGSYTVSAHVPLGSVVGATPDGRFAGEQLADGGLSPMLGQDAQGPTA\n+VLKSVSKLDNTLLSNGTLLNVKFTPATLEGEAGLRKLADFLRAFTQLKLQHIQFNVVNAD\n+TLREAQQRPQDYAGLVVRVAGYSAFFVELSKEIQDDIIRRTAHQL\n+>b0723 name=sdhA\n+MKLPVREFDAVVIGAGGAGMRAALQISQSGQTCALLSKVFPTRSHTVSAQGGITVALGNT\n+HEDNWEWHMYDTVKGSDYIGDQDAIEYMCKTGPEAILELEHMGLPFSRLDDGRIYQRPFG\n+GQSKNFGGEQAARTAAAADRTGHALLHTLYQQNLKNHTTIFSEWYALDLVKNQDGAVVGC\n+TALCIETGEVVYFKARATVLATGGAGRIYQSTTNAHINTGDGVGMAIRAGVPVQDMEMWQ\n+FHPTGIAGAGVLVTEGCRGEGGYLLNKHGERFMERYAPNAKDLAGRDVVARSIMIEIREG\n+RGCDGPWGPHAKLKLDHLGKEVLESRLPGILELSRTFAHVDPVKEPIPVIPTCHYMMGGI\n+PTKVTGQALTVNEKGEDVVVPGLFAVGEIACVSVHGANRLGGNSLLDLVVFGRAAGLHLQ\n+ESIAEQGALRDASESDVEASLDRLNRWNNNRNGEDPVAIRKALQECMQHNFSVFREGDAM\n+AKGLEQLKVIRERLKNARLDDTSSEFNTQRVECLELDNLMETAYATAVSANFRTESRGAH\n+SRFDFPDRDDENWLCHSLYLPESESMTRRSVNMEPKLRPAFPPKIRTY\n+>b1723 name=pfkB\n+MVRIYTLTLAPSLDSATITPQIYPEGKLRCTAPVFEPGGGGINVARAIAHLGGSATAIFP\n+AGGATGEHLVSLLADENVPVATVEAKDWTRQNLHVHVEASGEQYRFVMPGAALNEDEFRQ\n+LEEQVLEIESGAILVISGSLPPGVKLEKLTQLISAAQKQGIRCIVDSSGEALSAALAIGN\n+IELVKPNQKELSALVNRELTQPDDVRKAAQEIVNSGKAKRVVVSLGPQGALGVDSENCIQ\n+VVPPPVKSQSTVGAGDSMVGAMTLKLAENASLEEMVRFGVAAGSAATLNQGTRLCSHDDT\n+QKIYAYLSR\n+>b3603 name=lldP\n+MNLWQQNYDPAGNIWLSSLIASLPILFFFFALIKLKLKGYVAASWTVAIALAVALLFYKM\n+PVANALASVVYGFFYGLWPIAWIIIAAVFVYKISVKTGQFDIIRSSILSITPDQRLQMLI\n+VGFCFGAFLEGAAGFGAPVAITAALLVGLGFKPLYAAGLCLIVNTAPVAFGAMGIPILVA\n+GQVTGIDSFEIGQMVGRQLPFMTIIVLFWIMAIMDGWRGIKETWPAVVVAGGSFAIAQYL\n+SSNFIGPELPDIISSLVSLLCLTLFLKRWQPVRVFRFGDLGASQVDMTLAHTGYTAGQVL\n+RAWTPFLFLTATVTLWSIPPFKALFASGGALYEWVINIPVPYLDKLVARMPPVVSEATAY\n+AAVFKFDWFSATGTAILFAALLSIVWLKMKPSDAISTFGSTLKELALPIYSIGMVLAFAF\n+ISNYSGLSSTLALALAHTGHAFTFFSPFLGWLGVFLTGSDTSSNALFAALQATAAQQIGV\n+SDLLLVAANTTGGVTGKMISPQSIAIACAAVGLVGKESDLFRFTVKHSLIFTCIVGVITT\n+LQAYVLTWMIP\n+>b1818 name=manY\n+MEITTLQIVLVFIVACIAGMGSILDEFQFHRPLIACTLVGIVLGDMKTGIIIGGTLEMIA\n+LGWMNIGAAVAPDAALASIISTILVIAGHQSIGAGIALAIPLAAAGQVLTIIVRTITVAF\n+QHAADKAADNGNLTAISWIHVSSLFLQAMRVAIPAVIVALSVGTSEVQNMLNAIPEVVTN\n+GLNIAGGMIVVVGYAMVINMMRAGYLMPFFYLGFVTAAFTNFNLVALGVIGTVMAVLYIQ\n+LSPKYNRVAGAPAQAAGNNDLDNELD\n+>b0722 name=sdhD\n+MVSNASALGRNGVHDFILVRATAIVLTLYIIYMVGFFATSGELTYEVWIGFFASAFTKVF\n+TLLALFSILIHAWIGMWQVLTDYVKPLALRLMLQLVIVVALVVYVIYGFVVVWGV\n+>b3731 name=atpC\n+MAMTYHLDVVSAEQQMFSGLVEKIQVTGSEGELGIYPGHAPLLTAIKPGMIRIVKQHGHE\n+EFIYLSGGILEVQPGNVTVLADTAIRGQDLDEARAMEAKRKAEEHISSSHGDVDYAQASA\n+ELAKAIAQLRVIELTKKAM\n+>b2280 name=nuoJ\n+MEFAFYICGLIAILATLRVITHTNPVHALLYLIISLLAISGVFFSLGAYFAGALEIIVYA\n+GAIMVLFVFVVMMLNLGGSEIEQERQWLKPQVWIGPAILSAIMLVVIVYAILGVNDQGID\n+GTPISAKAVGITLFGPYVLAVELASMLLLAGLVVAFHVGREERAGEVLSNRKDDSAKRKT\n+EEHA\n+>b0767 name=pgl\n+MKQTVYIASPESQQIHVWNLNHEGALTLTQVVDVPGQVQPMVVSPDKRYLYVGVRPEFRV\n+LAYRIAPDDGALTFAAESALPGSPTHISTDHQGQFVFVGSYNAGNVSVTRLEDGLPVGVV\n+DVVEGLDGCHSANISPDNRTLWVPALKQDRICLFTVSDDGHLVAQD'..b'AETKDGRWYPEFFRINFSRCIFCGLCEEACPTTAIQLTPDF\n+EMGEYKRQDLVYEKEDLLISGPGKYPEYNFYRMAGMAIDGKDKGEAENEAKPIDVKSLLP\n+>b4301 name=sgcE\n+MILHPSLASANPLHYGRELTALDNLDFGSLHLDIEDSSFINNITFGMKTVQAVARQTPHP\n+LSFHFMLARPQRWFNALAEIRPAWIFVHAETLDYPSETLTEIRHTGARAGLVFNPATPID\n+AWRYLASELDGVMVMTSEPDGQGQRFIPSMCEKIQKVRTAFPQTECWADGGITLAAAQQL\n+AAAGAQHMVIGRALFSSSDYRATLAQFATL\n+>b2463 name=maeB\n+MDDQLKQSALDFHEFPVPGKIQVSPTKPLATQRDLALAYSPGVAAPCLEIEKDPLKAYKY\n+TARGNLVAVISNGTAVLGLGNIGALAGKPVMEGKGVLFKKFAGIDVFDIEVDELDPDKFI\n+EVVAALEPTFGGINLEDIKAPECFYIEQKLRERMNIPVFHDDQHGTAIISTAAILNGLRV\n+VEKNISDVRMVVSGAGAAAIACMNLLVALGLQKHNIVVCDSKGVIYQGREPNMAETKAAY\n+AVVDDGKRTLDDVIEGADIFLGCSGPKVLTQEMVKKMARAPMILALANPEPEILPPLAKE\n+VRPDAIICTGRSDYPNQVNNVLCFPFIFRGALDVGATAINEEMKLAAVRAIAELAHAEQS\n+EVVASAYGDQDLSFGPEYIIPKPFDPRLIVKIAPAVAKAAMESGVATRPIADFDVYIDKL\n+TEFVYKTNLFMKPIFSQARKAPKRVVLPEGEEARVLHATQELVTLGLAKPILIGRPNVIE\n+MRIQKLGLQIKAGVDFEIVNNESDPRFKEYWTEYFQIMKRRGVTQEQAQRALISNPTVIG\n+AIMVQRGEADAMICGTVGDYHEHFSVVKNVFGYRDGVHTAGAMNALLLPSGNTFIADTYV\n+NDEPDAEELAEITLMAAETVRRFGIEPRVALLSHSNFGSSDCPSSSKMRQALELVRERAP\n+ELMIDGEMHGDAALVEAIRNDRMPDSSLKGSANILVMPNMEAARISYNLLRVSSSEGVTV\n+GPVLMGVAKPVHVLTPIASVRRIVNMVALAVVEAQTQPL\n+>b2133 name=dld\n+MSSMTTTDNKAFLNELARLVGSSHLLTDPAKTARYRKGFRSGQGDALAVVFPGSLLELWR\n+VLKACVTADKIILMQAANTGLTEGSTPNGNDYDRDVVIISTLRLDKLHVLGKGEQVLAYP\n+GTTLYSLEKALKPLGREPHSVIGSSCIGASVIGGICNNSGGSLVQRGPAYTEMSLFARIN\n+EDGKLTLVNHLGIDLGETPEQILSKLDDDRIKDDDVRHDGRHAHDYDYVHRVRDIEADTP\n+ARYNADPDRLFESSGCAGKLAVFAVRLDTFEAEKNQQVFYIGTNQPEVLTEIRRHILANF\n+ENLPVAGEYMHRDIYDIAEKYGKDTFLMIDKLGTDKMPFFFNLKGRTDAMLEKVKFFRPH\n+FTDRAMQKFGHLFPSHLPPRMKNWRDKYEHHLLLKMAGDGVGEAKSWLVDYFKQAEGDFF\n+VCTPEEGSKAFLHRFAAAGAAIRYQAVHSDEVEDILALDIALRRNDTEWYEHLPPEIDSQ\n+LVHKLYYGHFMCYVFHQDYIVKKGVDVHALKEQMLELLQQRGAQYPAEHNVGHLYKAPET\n+LQKFYRENDPTNSMNPGIGKTSKRKNWQEVE\n+>b3612 name=gpmM\n+MLVSKKPMVLVILDGYGYREEQQDNAIFSAKTPVMDALWANRPHTLIDASGLEVGLPDRQ\n+MGNSEVGHVNLGAGRIVYQDLTRLDVEIKDRAFFANPVLTGAVDKAKNAGKAVHIMGLLS\n+AGGVHSHEDHIMAMVELAAERGAEKIYLHAFLDGRDTPPRSAESSLKKFEEKFAALGKGR\n+VASIIGRYYAMDRDNRWDRVEKAYDLLTLAQGEFQADTAVAGLQAAYARDENDEFVKATV\n+IRAEGQPDAAMEDGDALIFMNFRADRAREITRAFVNADFDGFARKKVVNVDFVMLTEYAA\n+DIKTAVAYPPASLVNTFGEWMAKNDKTQLRISETEKYAHVTFFFNGGVEESFKGEDRILI\n+NSPKVATYDLQPEMSSAELTEKLVAAIKSGKYDTIICNYPNGDMVGHTGVMEAAVKAVEA\n+LDHCVEEVAKAVESVGGQLLITADHGNAEQMRDPATGQAHTAHTNLPVPLIYVGDKNVKA\n+VEGGKLSDIAPTMLSLMGMEIPQEMTGKPLFIVE\n+>b2287 name=nuoB\n+MDYTLTRIDPNGENDRYPLQKQEIVTDPLEQEVNKNVFMGKLNDMVNWGRKNSIWPYNFG\n+LSCCYVEMVTSFTAVHDVARFGAEVLRASPRQADLMVVAGTCFTKMAPVIQRLYDQMLEP\n+KWVISMGACANSGGMYDIYSVVQGVDKFIPVDVYIPGCPPRPEAYMQALMLLQESIGKER\n+RPLSWVVGDQGVYRANMQSERERKRGERIAVTNLRTPDEI\n+>b3737 name=atpE\n+MENLNMDLLYMAAAVMMGLAAIGAAIGIGILGGKFLEGAARQPDLIPLLRTQFFIVMGLV\n+DAIPMIAVGLGLYVMFAVA\n+>b0810 name=glnP\n+MQFDWSAIWPAIPLLIEGAKMTLWISVLGLAGGLVIGLLAGFARTFGGWIANHVALVFIE\n+VIRGTPIVVQVMFIYFALPMAFNDLRIDPFTAAVVTIMINSGAYIAEITRGAVLSIHKGF\n+REAGLALGLSRWETIRYVILPLALRRMLPPLGNQWIISIKDTSLFIVIGVAELTRQGQEI\n+IAGNFRALEIWSAVAVFYLIITLVLSFILRRLERRMKIL\n+>b0356 name=frmA\n+MKSRAAVAFAPGKPLEIVEIDVAPPKKGEVLIKVTHTGVCHTDAFTLSGDDPEGVFPVVL\n+GHEGAGVVVEVGEGVTSVKPGDHVIPLYTAECGECEFCRSGKTNLCVAVRETQGKGLMPD\n+GTTRFSYNGQPLYHYMGCSTFSEYTVVAEVSLAKINPEANHEHVCLLGCGVTTGIGAVHN\n+TAKVQPGDSVAVFGLGAIGLAVVQGARQAKAGRIIAIDTNPKKFDLARRFGATDCINPND\n+YDKPIKDVLLDINKWGIDHTFECIGNVNVMRAALESAHRGWGQSVIIGVAVAGQEISTRP\n+FQLVTGRVWKGSAFGGVKGRSQLPGMVEDAMKGDIDLEPFVTHTMSLDEINDAFDLMHEG\n+KSIRTVIRY\n+>b2935 name=tktA\n+MSSRKELANAIRALSMDAVQKAKSGHPGAPMGMADIAEVLWRDFLKHNPQNPSWADRDRF\n+VLSNGHGSMLIYSLLHLTGYDLPMEELKNFRQLHSKTPGHPEVGYTAGVETTTGPLGQGI\n+ANAVGMAIAEKTLAAQFNRPGHDIVDHYTYAFMGDGCMMEGISHEVCSLAGTLKLGKLIA\n+FYDDNGISIDGHVEGWFTDDTAMRFEAYGWHVIRDIDGHDAASIKRAVEEARAVTDKPSL\n+LMCKTIIGFGSPNKAGTHDSHGAPLGDAEIALTREQLGWKYAPFEIPSEIYAQWDAKEAG\n+QAKESAWNEKFAAYAKAYPQEAAEFTRRMKGEMPSDFDAKAKEFIAKLQANPAKIASRKA\n+SQNAIEAFGPLLPEFLGGSADLAPSNLTLWSGSKAINEDAAGNYIHYGVREFGMTAIANG\n+ISLHGGFLPYTSTFLMFVEYARNAVRMAALMKQRQVMVYTHDSIGLGEDGPTHQPVEQVA\n+SLRVTPNMSTWRPCDQVESAVAWKYGVERQDGPTALILSRQNLAQQERTEEQLANIARGG\n+YVLKDCAGQPELIFIATGSEVELAVAAYEKLTAEGVKARVVSMPSTDAFDKQDAAYRESV\n+LPKAVTARVAVEAGIADYWYKYVGLNGAIVGMTTFGESAPAELLFEEFGFTVDNVVAKAK\n+ELL\n'
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/GetReactantsFromReactions/GetReactantsFromReactions.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/GetReactantsFromReactions/GetReactantsFromReactions.xml Wed May 17 13:26:37 2023 +0000
[
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tool id="met4j_GetReactantsFromReactions" name="GetReactantsFromReactions" version="1.3.0">
+  <description>Get reactants lists from a list of reactions and a GSMN.</description>
+  <xrefs>
+    <xref type="bio.tools">met4j</xref>
+  </xrefs>
+  <requirements>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.3.0</container>
+  </requirements>
+  <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh attributes.GetReactantsFromReactions -i "$sbml"
+ -r "$reactionFile"
+#if str($sep):
+ -sep "$sep"
+#end if
+ $hasHeader
+#if str($i) != 'nan':
+ -col "$i"
+#end if
+ $printSubstrates
+ $printProducts
+ -o "$outputFile"
+]]></command>
+  <inputs>
+    <param argument="-i" format="sbml" label="Input SBML file" name="sbml" optional="false" type="data" value=""/>
+    <param argument="-r" format="tsv" label="Input Reaction file" name="reactionFile" optional="false" type="data" value=""/>
+    <param argument="-sep" label="Separator in reaction file" name="sep" optional="true" type="text" value="&#9;">
+      <sanitizer invalid_char="_">
+        <valid initial="string.printable"/>
+      </sanitizer>
+    </param>
+    <param argument="-header" checked="false" falsevalue="" label="Skip reaction file header" name="hasHeader" truevalue="-header" type="boolean" value="false"/>
+    <param argument="-col" label="Column number in reaction file (first as 1)" name="i" optional="true" type="integer" value="1"/>
+    <param argument="-s" checked="false" falsevalue="" label="Extract substrates only" name="printSubstrates" truevalue="-s" type="boolean" value="false"/>
+    <param argument="-p" checked="false" falsevalue="" label="Extract products only" name="printProducts" truevalue="-p" type="boolean" value="false"/>
+  </inputs>
+  <outputs>
+    <data format="tsv" name="outputFile"/>
+  </outputs>
+  <tests>
+    <test>
+      <param name="sbml" value="XF_network.sbml"/>
+      <param name="reactionFile" value="XF_network_R_Seed.tab"/>
+      <output ftype="tsv" name="outputFile">
+        <assert_contents>
+          <has_text_matching expression="R_GLUN" n="4"/>
+          <has_text_matching expression="R_ACGS" n="5"/>
+        </assert_contents>
+      </output>
+    </test>
+    <test>
+      <param name="sbml" value="XF_network.sbml"/>
+      <param name="reactionFile" value="XF_network_R_Seed.tab"/>
+      <param name="printSubstrates" value="true"/>
+      <output ftype="tsv" name="outputFile">
+        <assert_contents>
+          <has_text_matching expression="R_GLUN" n="2"/>
+          <has_text_matching expression="R_ACGS" n="5"/>
+        </assert_contents>
+      </output>
+    </test>
+    <test>
+      <param name="sbml" value="XF_network.sbml"/>
+      <param name="reactionFile" value="XF_network_R_Seed.tab"/>
+      <param name="printProducts" value="true"/>
+      <output ftype="tsv" name="outputFile">
+        <assert_contents>
+          <has_text_matching expression="R_GLUN" n="2"/>
+          <has_text_matching expression="R_ACGS" n="5"/>
+        </assert_contents>
+      </output>
+    </test>
+  </tests>
+  <help><![CDATA[Get reactants lists from a list of reactions and a GSMN. Output a tab-separated file with one row per reactant, reaction identifiers in first column, reactant identifiers in second column. It can provides substrates, products, or both (by default). In the case of reversible reactions, all reactants are considered both substrates and products]]></help>
+  <citations/>
+</tool>
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/GetReactantsFromReactions/test-data/XF_network.sbml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/GetReactantsFromReactions/test-data/XF_network.sbml Wed May 17 13:26:37 2023 +0000
b
b'@@ -0,0 +1,47267 @@\n+<?xml version="1.0" encoding="UTF-8"?>\n+<sbml fbc:required="false" groups:required="false" level="3" version="2" xmlns="http://www.sbml.org/sbml/level3/version2/core" xmlns:fbc="http://www.sbml.org/sbml/level3/version1/fbc/version2" xmlns:groups="http://www.sbml.org/sbml/level3/version1/groups/version1">\n+  <model fbc:strict="true" id="Xfm1158" metaid="Xfm1158" name="Xfm1158">\n+    <fbc:listOfGeneProducts>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_007090" fbc:label="XFCFBP8418_007090" fbc:name="XFCFBP8418_007090" metaid="_8a7d7180-d79e-4dbb-86ed-f8d7eb60e698"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_005900" fbc:label="XFCFBP8418_005900" fbc:name="XFCFBP8418_005900" metaid="_867487dd-ff57-4e93-8de9-b5ecb805e0eb"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_011590" fbc:label="XFCFBP8418_011590" fbc:name="XFCFBP8418_011590" metaid="_44606760-936c-4585-b40c-650e953a5f73"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_014620" fbc:label="XFCFBP8418_014620" fbc:name="XFCFBP8418_014620" metaid="da273da9-0f84-4615-a464-2ab71416e8cc"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_015830" fbc:label="XFCFBP8418_015830" fbc:name="XFCFBP8418_015830" metaid="_3a9239a2-8e23-4834-99a8-a7dc15f6d906"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_014980" fbc:label="XFCFBP8418_014980" fbc:name="XFCFBP8418_014980" metaid="_7f26806b-e32e-4c5c-a78d-9e094c267bbf"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_020190" fbc:label="XFCFBP8418_020190" fbc:name="XFCFBP8418_020190" metaid="_31bbb514-1d52-4727-91cb-367af12e95ca"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_004940" fbc:label="XFCFBP8418_004940" fbc:name="XFCFBP8418_004940" metaid="a2f20753-c245-477e-8363-8f5e45c50f5d"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_021160" fbc:label="XFCFBP8418_021160" fbc:name="XFCFBP8418_021160" metaid="_844bdacc-d091-457d-9c4d-846cb9aab3c1"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_025760" fbc:label="XFCFBP8418_025760" fbc:name="XFCFBP8418_025760" metaid="fd8a601e-e56f-4263-9aa7-6ed9bf85f958"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_024670" fbc:label="XFCFBP8418_024670" fbc:name="XFCFBP8418_024670" metaid="_2bbe03ce-c814-417a-b9c0-e8a1f29f4106"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_004820" fbc:label="XFCFBP8418_004820" fbc:name="XFCFBP8418_004820" metaid="_41cb6d94-13d8-461e-a217-29a68e21cd2b"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_023580" fbc:label="XFCFBP8418_023580" fbc:name="XFCFBP8418_023580" metaid="_31ff72d7-4e30-4563-85aa-4afc58dd6bee"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_000460" fbc:label="XFCFBP8418_000460" fbc:name="XFCFBP8418_000460" metaid="d7ea14e6-cd6c-4404-b973-486ade662242"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_026730" fbc:label="XFCFBP8418_026730" fbc:name="XFCFBP8418_026730" metaid="e876348e-787e-4f2a-8904-e675c2589c17"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_025640" fbc:label="XFCFBP8418_025640" fbc:name="XFCFBP8418_025640" metaid="b5b93812-bd2e-4ca8-8328-e1d35e17ac3a"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_023100" fbc:label="XFCFBP8418_023100" fbc:name="XFCFBP8418_023100" metaid="f62e0096-7b12-4db3-a7b0-2e1cfa0302c6"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_027800" fbc:label="XFCFBP8418_027800" fbc:name="XFCFBP8418_027800" metaid="_8beb93ba-34a4-4330-86bf-2c47b1cb7f2e"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_004700" fbc:label="XFCFBP8418_004700" fbc:name="XFCFBP8418_004700" metaid="_2aceabe8-5294-42eb-9d3b-2506634c68d5"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_005910" fbc:label="XFCFBP8418_005910" fbc:name="XFCFBP8418_005910" metaid="a7b44241-024e-49c1-88af-1e1108cf09eb"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_013540" fbc:label="XFCFBP8418_013540" fbc:name="XFCFBP8418_013540" metaid="_83bdba7b-0eb0-4dfb-99ed-6e365240d870"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_011240" fbc:label="XFCFBP8418_011240" fbc:name="XFCFBP8418_011240" metaid="_568b9959-99b6-49bd-86d7-04e773d940da"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_012210" fbc:label="XFCFBP8418_01221'..b'     </annotation>\n+        <fbc:geneProductAssociation>\n+          <fbc:geneProductRef fbc:geneProduct="XFCFBP8418_010590"/>\n+        </fbc:geneProductAssociation>\n+        <listOfReactants>\n+          <speciesReference constant="true" species="M_cyst_L_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_h2o_c" stoichiometry="1"/>\n+        </listOfReactants>\n+        <listOfProducts>\n+          <speciesReference constant="true" species="M_2obut_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_cys_L_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_nh4_c" stoichiometry="1"/>\n+        </listOfProducts>\n+      </reaction>\n+      <reaction fbc:lowerFluxBound="LOWER_BOUND_99999_0" fbc:upperFluxBound="UPPER_BOUND_99999_0" id="R_FUCtpp" metaid="_34363cfc-fa7f-4df4-a073-49f5befcdf50" name="R_FUCtpp" reversible="true">\n+        <notes>\n+          <body xmlns="http://www.w3.org/1999/xhtml">\n+            <p>GENE_ASSOCIATION: XFCFBP8418_018650</p>\n+            <p>SUBSYSTEM: Transport__Inner_Membrane</p>\n+            <p>EC_NUMBER: No_Assignment</p>\n+          </body>\n+        </notes>\n+        <annotation>\n+          <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:bqbiol="http://biomodels.net/biology-qualifiers/">\n+            <rdf:Description rdf:about="#_34363cfc-fa7f-4df4-a073-49f5befcdf50">\n+              <bqbiol:is>\n+                <rdf:Bag>\n+                  <rdf:li rdf:resource="http://identifiers.org/ec-code/No_Assignment"/>\n+                </rdf:Bag>\n+              </bqbiol:is>\n+            </rdf:Description>\n+          </rdf:RDF>\n+        </annotation>\n+        <fbc:geneProductAssociation>\n+          <fbc:geneProductRef fbc:geneProduct="XFCFBP8418_018650"/>\n+        </fbc:geneProductAssociation>\n+        <listOfReactants>\n+          <speciesReference constant="true" species="M_h_p" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_fuc_L_p" stoichiometry="1"/>\n+        </listOfReactants>\n+        <listOfProducts>\n+          <speciesReference constant="true" species="M_fuc_L_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_h_c" stoichiometry="1"/>\n+        </listOfProducts>\n+      </reaction>\n+      <reaction fbc:lowerFluxBound="LOWER_BOUND_0_0" fbc:upperFluxBound="UPPER_BOUND_99999_0" id="R_FACOAE120" metaid="_2691931b-9cfe-40d9-95d9-13e4ed057413" name="R_FACOAE120" reversible="false">\n+        <notes>\n+          <body xmlns="http://www.w3.org/1999/xhtml">\n+            <p>GENE_ASSOCIATION: XFCFBP8418_025070</p>\n+            <p>SUBSYSTEM: Cell_Envelope_Biosynthesis</p>\n+            <p>EC_NUMBER: 3.1.2.20</p>\n+          </body>\n+        </notes>\n+        <annotation>\n+          <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:bqbiol="http://biomodels.net/biology-qualifiers/">\n+            <rdf:Description rdf:about="#_2691931b-9cfe-40d9-95d9-13e4ed057413">\n+              <bqbiol:is>\n+                <rdf:Bag>\n+                  <rdf:li rdf:resource="http://identifiers.org/ec-code/3.1.2.20"/>\n+                </rdf:Bag>\n+              </bqbiol:is>\n+            </rdf:Description>\n+          </rdf:RDF>\n+        </annotation>\n+        <fbc:geneProductAssociation>\n+          <fbc:geneProductRef fbc:geneProduct="XFCFBP8418_025070"/>\n+        </fbc:geneProductAssociation>\n+        <listOfReactants>\n+          <speciesReference constant="true" species="M_ddcacoa_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_h2o_c" stoichiometry="1"/>\n+        </listOfReactants>\n+        <listOfProducts>\n+          <speciesReference constant="true" species="M_ddca_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_h_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_coa_c" stoichiometry="1"/>\n+        </listOfProducts>\n+      </reaction>\n+    </listOfReactions>\n+  </model>\n+</sbml>\n'
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/GetReactantsFromReactions/test-data/XF_network_R_Seed.tab
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/GetReactantsFromReactions/test-data/XF_network_R_Seed.tab Wed May 17 13:26:37 2023 +0000
b
@@ -0,0 +1,2 @@
+R_ACGS
+R_GLUN
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/Kegg2Sbml/Kegg2Sbml.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/Kegg2Sbml/Kegg2Sbml.xml Wed May 17 13:26:37 2023 +0000
[
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tool id="met4j_Kegg2Sbml" name="Kegg2Sbml" version="1.3.0">
+  <description>Build a SBML file from KEGG organism-specific pathways. Uses Kegg API.</description>
+  <xrefs>
+    <xref type="bio.tools">met4j</xref>
+  </xrefs>
+  <requirements>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.3.0</container>
+  </requirements>
+  <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh convert.Kegg2Sbml#if str($org):
+ -org "$org"
+#end if
+ -sbml "$sbml"
+]]></command>
+  <inputs>
+    <param argument="-org" label="[] Kegg org id. Must be 3 letters (" name="org" optional="true" type="text" value="">
+      <sanitizer invalid_char="_">
+        <valid initial="string.printable"/>
+      </sanitizer>
+    </param>
+  </inputs>
+  <outputs>
+    <data format="sbml" name="sbml"/>
+  </outputs>
+  <tests/>
+  <help><![CDATA[Build a SBML file from KEGG organism-specific pathways. Uses Kegg API.
+Errors returned by this program could be due to Kegg API dysfunctions or limitations. Try later if this problem occurs.]]></help>
+  <citations/>
+</tool>
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/LoadPoint/LoadPoint.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/LoadPoint/LoadPoint.xml Wed May 17 13:26:37 2023 +0000
[
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tool id="met4j_LoadPoint" name="LoadPoint" version="1.3.0">
+  <description>Compute the Load points of a metabolic network. Load points constitute an indicator of lethality and can help identifying drug target.</description>
+  <xrefs>
+    <xref type="bio.tools">met4j</xref>
+  </xrefs>
+  <requirements>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.3.0</container>
+  </requirements>
+  <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh networkAnalysis.LoadPoint -i "$inputPath"
+#if str($sideCompoundFile) != 'None':
+ -s "$sideCompoundFile"
+#end if
+#if str($k):
+ -k "$k"
+#end if
+ -o "$outputPath"
+]]></command>
+  <inputs>
+    <param argument="-i" format="sbml" label="input SBML file" name="inputPath" optional="false" type="data" value=""/>
+    <param argument="-s" format="txt" label="an optional file containing list of side compounds to ignore" name="sideCompoundFile" optional="true" type="data" value=""/>
+    <param argument="-k" label="Number of alternative paths to consider between a pair of connected metabolites" name="k" optional="true" type="text" value="1">
+      <sanitizer invalid_char="_">
+        <valid initial="string.printable"/>
+      </sanitizer>
+    </param>
+  </inputs>
+  <outputs>
+    <data format="tsv" name="outputPath"/>
+  </outputs>
+  <tests>
+    <test>
+      <param name="inputPath" value="toy_model.xml"/>
+      <output ftype="tsv" name="outputPath">
+        <assert_contents>
+          <has_n_columns n="3"/>
+          <has_n_lines n="8"/>
+        </assert_contents>
+      </output>
+    </test>
+  </tests>
+  <help><![CDATA[Compute the Load points of a metabolic network. Load points constitute an indicator of lethality and can help identifying drug target.
+From Rahman et al. Observing local and global properties of metabolic pathways: ‘load points’ and ‘choke points’ in the metabolic networks. Bioinf. (2006):
+For a given metabolic network, the load L on metabolite m can be defined as :
+ln [(pm/km)/(∑Mi=1Pi)/(∑Mi=1Ki)]
+p is the number of shortest paths passing through a metabolite m;
+k is the number of nearest neighbour links for m in the network;
+P is the total number of shortest paths;
+K is the sum of links in the metabolic network of M metabolites (where M is the number of metabolites in the network).
+Use of the logarithm makes the relevant values more distinguishable.]]></help>
+  <citations/>
+</tool>
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/LoadPoint/test-data/toy_model.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/LoadPoint/test-data/toy_model.xml Wed May 17 13:26:37 2023 +0000
[
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding='UTF-8' ?>
+<sbml fbc:required="false" groups:required="false" level="3" version="1"
+ xmlns="http://www.sbml.org/sbml/level3/version1/core"
+ xmlns:fbc="http://www.sbml.org/sbml/level3/version1/fbc/version2"
+ xmlns:groups="http://www.sbml.org/sbml/level3/version1/groups/version1">
+ <model fbc:strict="true" name="toy model">
+ <listOfUnitDefinitions>
+ <unitDefinition id="mmol_per_gDW_per_hr" name="mmol_per_gDW_per_hr">
+ <listOfUnits>
+ <unit exponent="-1" kind="gram" multiplier="1" scale="0"/>
+ <unit exponent="1" kind="mole" multiplier="1" scale="-3"/>
+ <unit exponent="-1" kind="second" multiplier="0.00027777" scale="0"/>
+ </listOfUnits>
+ </unitDefinition>
+ </listOfUnitDefinitions>
+ <listOfCompartments>
+ <compartment constant="false" id="c" name="Cytosol"/>
+ <compartment constant="false" id="e" name="Extracellular"/>
+ </listOfCompartments>
+ <listOfSpecies>
+ <species boundaryCondition="false" compartment="e" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="A_ext" name="A_ext">
+ <notes>
+ <body xmlns="http://www.w3.org/1999/xhtml">
+ <p>SMILES: C[C@@H](C(=O)O)NC</p>
+ </body>
+ </notes>
+ <annotation>
+ <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:bqbiol="http://biomodels.net/biology-qualifiers/">
+ <rdf:Description rdf:about="#A_ext">
+ <bqbiol:is>
+ <in:inchi xmlns:in="https://biomodels.net/inchi">InChI=1S/C2H6O/c1-2-3/h3H,2H2,1H3</in:inchi>
+ </bqbiol:is>
+ </rdf:Description>
+ </rdf:RDF>
+ </annotation>
+
+ </species>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="A" name="A"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="B" name="B"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="C" name="C"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="D" name="D"/>
+ <species boundaryCondition="false" compartment="e" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="D_ext" name="D_ext"/>
+ <species boundaryCondition="false" compartment="e" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="E_ext" name="E_ext"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="E" name="E"/>
+ </listOfSpecies>
+ <listOfParameters>
+ <parameter constant="true" id="cobra_default_lb" name="cobra default - lb" sboTerm="SBO:0000626" units="mmol_per_gDW_per_hr" value="-100000.0"/>
+ <parameter constant="true" id="cobra_default_ub" name="cobra default - ub" sboTerm="SBO:0000626" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="cobra_0_bound" name="cobra 0 - bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="0.0"/>
+ <parameter constant="true" id="reac1_upper_bound" name="reac1 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="10.0"/>
+ <parameter constant="true" id="reac6_upper_bound" name="reac6 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="3.0"/>
+ <parameter constant="true" id="reac2_upper_bound" name="reac2 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac3_upper_bound" name="reac3 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac4_upper_bound" name="reac4 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac5_upper_bound" name="reac5 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac7_upper_bound" name="reac7 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ </listOfParameters>
+ <listOfReactions>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac1_upper_bound" id="reac1" name="reac1" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="A_ext" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="A" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_default_lb" fbc:upperFluxBound="reac2_upper_bound" id="reac2" name="reac2" reversible="true">
+ <listOfReactants>
+ <speciesReference constant="true" species="A" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="B" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac3_upper_bound" id="reac3" name="reac3" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="A" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="C" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac4_upper_bound" id="reac4" name="reac4" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="B" stoichiometry="1.0"/>
+ <speciesReference constant="true" species="C" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="D" stoichiometry="1.5"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac5_upper_bound" id="reac5" name="reac5" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="D" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="D_ext" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac6_upper_bound" id="reac6" name="reac6" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="E_ext" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="E" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac7_upper_bound" id="reac7" name="reac7" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="E" stoichiometry="2.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="D" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ </listOfReactions>
+ </model>
+</sbml>
\ No newline at end of file
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/MetaboRank/MetaboRank.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/MetaboRank/MetaboRank.xml Wed May 17 13:26:37 2023 +0000
[
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tool id="met4j_MetaboRank" name="MetaboRank" version="1.3.0">
+  <description>Compute the MetaboRank, a custom personalized PageRank for metabolic network.</description>
+  <xrefs>
+    <xref type="bio.tools">met4j</xref>
+  </xrefs>
+  <requirements>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.3.0</container>
+  </requirements>
+  <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh networkAnalysis.MetaboRank -i "$sbmlFilePath"
+ -s "$seedsFilePath"
+#if str($edgeWeightsFilePaths) != 'None':
+ -w "$edgeWeightsFilePaths"
+#end if
+#if str($inputSide) != 'None':
+ -sc "$inputSide"
+#end if
+#if str($maxNbOfIter):
+ -max "$maxNbOfIter"
+#end if
+#if str($tolerance) != 'nan':
+ -t "$tolerance"
+#end if
+#if str($dampingFactor) != 'nan':
+ -d "$dampingFactor"
+#end if
+ -o "$output"
+]]></command>
+  <inputs>
+    <param argument="-i" format="sbml" label="input SBML file: path to network used for computing centrality, in sbml format." name="sbmlFilePath" optional="false" type="data" value=""/>
+    <param argument="-s" format="tsv" label="input seeds file: tabulated file containing node of interest ids and weight" name="seedsFilePath" optional="false" type="data" value=""/>
+    <param argument="-w" format="tsv" label="input edge weight file: (recommended) path to file containing edges' weights. Will be normalized as transition probabilities" name="edgeWeightsFilePaths" optional="true" type="data" value=""/>
+    <param argument="-sc" format="txt" label="input Side compound file" name="inputSide" optional="true" type="data" value=""/>
+    <param argument="-max" label="maximal number of iteration" name="maxNbOfIter" optional="true" type="text" value="15000">
+      <sanitizer invalid_char="_">
+        <valid initial="string.printable"/>
+      </sanitizer>
+    </param>
+    <param argument="-t" label="convergence tolerance" name="tolerance" optional="true" type="float" value="0.001"/>
+    <param argument="-d" label="damping factor" name="dampingFactor" optional="true" type="float" value="0.85"/>
+  </inputs>
+  <outputs>
+    <data format="tsv" name="output"/>
+  </outputs>
+  <tests/>
+  <help><![CDATA[Compute the MetaboRank, a custom personalized PageRank for metabolic network.
+The MetaboRank takes a metabolic network and a list of compounds of interest, and provide a score of relevance for all of the other compounds in the network.
+The MetaboRank can, from metabolomics results, be used to fuel a recommender system highlighting interesting compounds to investigate, retrieve missing identification and drive literature mining.
+It is a two dimensional centrality computed from personalized PageRank and CheiRank, with special transition probability and normalization to handle the specificities of metabolic networks.
+See publication for more information: Frainay et al. MetaboRank: network-based recommendation system to interpret and enrich metabolomics results, Bioinformatics (35-2), https://doi.org/10.1093/bioinformatics/bty577]]></help>
+  <citations/>
+</tool>
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/MetaboRank/test-data/edgeWeights.tsv
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/MetaboRank/test-data/edgeWeights.tsv Wed May 17 13:26:37 2023 +0000
b
@@ -0,0 +1,1 @@
+D E D-E 10
\ No newline at end of file
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/MetaboRank/test-data/toy_model.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/MetaboRank/test-data/toy_model.xml Wed May 17 13:26:37 2023 +0000
[
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding='UTF-8' ?>
+<sbml fbc:required="false" groups:required="false" level="3" version="1"
+ xmlns="http://www.sbml.org/sbml/level3/version1/core"
+ xmlns:fbc="http://www.sbml.org/sbml/level3/version1/fbc/version2"
+ xmlns:groups="http://www.sbml.org/sbml/level3/version1/groups/version1">
+ <model fbc:strict="true" name="toy model">
+ <listOfUnitDefinitions>
+ <unitDefinition id="mmol_per_gDW_per_hr" name="mmol_per_gDW_per_hr">
+ <listOfUnits>
+ <unit exponent="-1" kind="gram" multiplier="1" scale="0"/>
+ <unit exponent="1" kind="mole" multiplier="1" scale="-3"/>
+ <unit exponent="-1" kind="second" multiplier="0.00027777" scale="0"/>
+ </listOfUnits>
+ </unitDefinition>
+ </listOfUnitDefinitions>
+ <listOfCompartments>
+ <compartment constant="false" id="c" name="Cytosol"/>
+ <compartment constant="false" id="e" name="Extracellular"/>
+ </listOfCompartments>
+ <listOfSpecies>
+ <species boundaryCondition="false" compartment="e" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="A_ext" name="A_ext">
+ <notes>
+ <body xmlns="http://www.w3.org/1999/xhtml">
+ <p>SMILES: C[C@@H](C(=O)O)NC</p>
+ </body>
+ </notes>
+ <annotation>
+ <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:bqbiol="http://biomodels.net/biology-qualifiers/">
+ <rdf:Description rdf:about="#A_ext">
+ <bqbiol:is>
+ <in:inchi xmlns:in="https://biomodels.net/inchi">InChI=1S/C2H6O/c1-2-3/h3H,2H2,1H3</in:inchi>
+ </bqbiol:is>
+ </rdf:Description>
+ </rdf:RDF>
+ </annotation>
+
+ </species>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="A" name="A"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="B" name="B"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="C" name="C"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="D" name="D"/>
+ <species boundaryCondition="false" compartment="e" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="D_ext" name="D_ext"/>
+ <species boundaryCondition="false" compartment="e" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="E_ext" name="E_ext"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="E" name="E"/>
+ </listOfSpecies>
+ <listOfParameters>
+ <parameter constant="true" id="cobra_default_lb" name="cobra default - lb" sboTerm="SBO:0000626" units="mmol_per_gDW_per_hr" value="-100000.0"/>
+ <parameter constant="true" id="cobra_default_ub" name="cobra default - ub" sboTerm="SBO:0000626" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="cobra_0_bound" name="cobra 0 - bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="0.0"/>
+ <parameter constant="true" id="reac1_upper_bound" name="reac1 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="10.0"/>
+ <parameter constant="true" id="reac6_upper_bound" name="reac6 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="3.0"/>
+ <parameter constant="true" id="reac2_upper_bound" name="reac2 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac3_upper_bound" name="reac3 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac4_upper_bound" name="reac4 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac5_upper_bound" name="reac5 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac7_upper_bound" name="reac7 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ </listOfParameters>
+ <listOfReactions>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac1_upper_bound" id="reac1" name="reac1" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="A_ext" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="A" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_default_lb" fbc:upperFluxBound="reac2_upper_bound" id="reac2" name="reac2" reversible="true">
+ <listOfReactants>
+ <speciesReference constant="true" species="A" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="B" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac3_upper_bound" id="reac3" name="reac3" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="A" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="C" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac4_upper_bound" id="reac4" name="reac4" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="B" stoichiometry="1.0"/>
+ <speciesReference constant="true" species="C" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="D" stoichiometry="1.5"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac5_upper_bound" id="reac5" name="reac5" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="D" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="D_ext" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac6_upper_bound" id="reac6" name="reac6" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="E_ext" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="E" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac7_upper_bound" id="reac7" name="reac7" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="E" stoichiometry="2.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="D" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ </listOfReactions>
+ </model>
+</sbml>
\ No newline at end of file
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/MetaboRank/test-data/weights.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/MetaboRank/test-data/weights.txt Wed May 17 13:26:37 2023 +0000
b
@@ -0,0 +1,2 @@
+B 10
+C 1
\ No newline at end of file
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/NameMatcher/NameMatcher.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/NameMatcher/NameMatcher.xml Wed May 17 13:26:37 2023 +0000
[
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tool id="met4j_NameMatcher" name="NameMatcher" version="1.3.0">
+  <description>This tool runs edit-distance based fuzzy matching to perform near-similar name matching between a metabolic model and a list of chemical names in a dataset. A harmonization processing is performed on chemical names with substitutions of common patterns among synonyms, in order to create aliases on which classical fuzzy matching can be run efficiently.</description>
+  <xrefs>
+    <xref type="bio.tools">met4j</xref>
+  </xrefs>
+  <requirements>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.3.0</container>
+  </requirements>
+  <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh mapping.NameMatcher#if str($n):
+ -nMatch "$n"
+#end if
+#if str($nSkip):
+ -skip "$nSkip"
+#end if
+#if str($col):
+ -col "$col"
+#end if
+ -sbml "$sbml"
+ -compound "$input"
+#if str($comment):
+ -c "$comment"
+#end if
+#if str($sep):
+ -sep "$sep"
+#end if
+ -o "$outputFile"
+]]></command>
+  <inputs>
+    <param argument="-nMatch" label="[1] Number of match to return per name" name="n" optional="true" type="text" value="1">
+      <sanitizer invalid_char="_">
+        <valid initial="string.printable"/>
+      </sanitizer>
+    </param>
+    <param argument="-skip" label="[0] Number of lines to skip at the beginning of the compound file" name="nSkip" optional="true" type="text" value="0">
+      <sanitizer invalid_char="_">
+        <valid initial="string.printable"/>
+      </sanitizer>
+    </param>
+    <param argument="-col" label="[1] column containing compounds' names" name="col" optional="true" type="text" value="1">
+      <sanitizer invalid_char="_">
+        <valid initial="string.printable"/>
+      </sanitizer>
+    </param>
+    <param argument="-sbml" format="sbml" label="Original sbml file" name="sbml" optional="false" type="data" value=""/>
+    <param argument="-compound" format="tsv" label="Compound file containing one column with compound names to search among the SBML entries" name="input" optional="false" type="data" value=""/>
+    <param argument="-c" label="[#] Comment String in the compound file. The lines beginning by this string won't be read" name="comment" optional="true" type="text" value="#">
+      <sanitizer invalid_char="_">
+        <valid initial="string.printable"/>
+      </sanitizer>
+    </param>
+    <param argument="-sep" label="[\t] separator in the compound file to split the colmumns." name="sep" optional="true" type="text" value="&#9;">
+      <sanitizer invalid_char="_">
+        <valid initial="string.printable"/>
+      </sanitizer>
+    </param>
+  </inputs>
+  <outputs>
+    <data format="tsv" name="outputFile"/>
+  </outputs>
+  <tests/>
+  <help><![CDATA[Metabolic models and Metabolomics Data often refer compounds only by using their common names, which vary greatly according to the source, thus impeding interoperability between models, databases and experimental data. This requires a tedious step of manual mapping. Fuzzy matching is a range of methods which can potentially helps fasten this process, by allowing the search for near-similar names. Fuzzy matching is primarily designed for common language search engines and is frequently based on edit distance, i.e. the number of edits to transform a character string into another, effectively managing typo, case and special character variations, and allowing auto-completion. However, edit-distance based search fall short when mapping chemical names: As an example, alpha-D-Glucose et Glucose would require more edits than between Fructose and Glucose.
+
+This tool runs edit-distance based fuzzy matching to perform near-similar name matching between a metabolic model and a list of chemical names in a dataset. A harmonization processing is performed on chemical names with substitutions of common patterns among synonyms, in order to create aliases on which classical fuzzy matching can be run efficiently.]]></help>
+  <citations/>
+</tool>
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/NetworkSummary/NetworkSummary.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/NetworkSummary/NetworkSummary.xml Wed May 17 13:26:37 2023 +0000
[
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tool id="met4j_NetworkSummary" name="NetworkSummary" version="1.3.0">
+  <description>Create a report summarizing several graph measures characterising the structure of the network.</description>
+  <xrefs>
+    <xref type="bio.tools">met4j</xref>
+  </xrefs>
+  <requirements>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.3.0</container>
+  </requirements>
+  <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh networkAnalysis.NetworkSummary -i "$inputPath"
+#if str($sideCompoundFile) != 'None':
+ -s "$sideCompoundFile"
+#end if
+ $skipdist
+ $directed
+ -o "$outputPath"
+]]></command>
+  <inputs>
+    <param argument="-i" format="sbml" label="input SBML file" name="inputPath" optional="false" type="data" value=""/>
+    <param argument="-s" format="txt" label="an optional file containing list of side compounds to ignore (recommended)" name="sideCompoundFile" optional="true" type="data" value=""/>
+    <param argument="-sd" checked="false" falsevalue="" label="skip full distance matrix computation (quick summary)" name="skipdist" truevalue="-sd" type="boolean" value="false"/>
+    <param argument="-d" checked="false" falsevalue="" label="use reaction direction for distances" name="directed" truevalue="-d" type="boolean" value="false"/>
+  </inputs>
+  <outputs>
+    <data format="txt" name="outputPath"/>
+  </outputs>
+  <tests>
+    <test>
+ <param name="inputPath" value="toy_model.xml"/>
+ <output name="outputPath">
+ <assert_contents>
+ <has_n_lines min="1"/>
+ </assert_contents>
+ </output>
+ </test>
+  </tests>
+  <help><![CDATA[Use a metabolic network in SBML file and an optional list of side compounds, and produce a report summarizing several graph measures characterising the structure of the network.This includes (non-exhaustive list): size and order, connectivity, density, degree distribution, shortest paths length, top centrality nodes...]]></help>
+  <citations/>
+</tool>
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/NetworkSummary/test-data/toy_model.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/NetworkSummary/test-data/toy_model.xml Wed May 17 13:26:37 2023 +0000
[
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding='UTF-8' ?>
+<sbml fbc:required="false" groups:required="false" level="3" version="1"
+ xmlns="http://www.sbml.org/sbml/level3/version1/core"
+ xmlns:fbc="http://www.sbml.org/sbml/level3/version1/fbc/version2"
+ xmlns:groups="http://www.sbml.org/sbml/level3/version1/groups/version1">
+ <model fbc:strict="true" name="toy model">
+ <listOfUnitDefinitions>
+ <unitDefinition id="mmol_per_gDW_per_hr" name="mmol_per_gDW_per_hr">
+ <listOfUnits>
+ <unit exponent="-1" kind="gram" multiplier="1" scale="0"/>
+ <unit exponent="1" kind="mole" multiplier="1" scale="-3"/>
+ <unit exponent="-1" kind="second" multiplier="0.00027777" scale="0"/>
+ </listOfUnits>
+ </unitDefinition>
+ </listOfUnitDefinitions>
+ <listOfCompartments>
+ <compartment constant="false" id="c" name="Cytosol"/>
+ <compartment constant="false" id="e" name="Extracellular"/>
+ </listOfCompartments>
+ <listOfSpecies>
+ <species boundaryCondition="false" compartment="e" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="A_ext" name="A_ext">
+ <notes>
+ <body xmlns="http://www.w3.org/1999/xhtml">
+ <p>SMILES: C[C@@H](C(=O)O)NC</p>
+ </body>
+ </notes>
+ <annotation>
+ <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:bqbiol="http://biomodels.net/biology-qualifiers/">
+ <rdf:Description rdf:about="#A_ext">
+ <bqbiol:is>
+ <in:inchi xmlns:in="https://biomodels.net/inchi">InChI=1S/C2H6O/c1-2-3/h3H,2H2,1H3</in:inchi>
+ </bqbiol:is>
+ </rdf:Description>
+ </rdf:RDF>
+ </annotation>
+
+ </species>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="A" name="A"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="B" name="B"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="C" name="C"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="D" name="D"/>
+ <species boundaryCondition="false" compartment="e" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="D_ext" name="D_ext"/>
+ <species boundaryCondition="false" compartment="e" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="E_ext" name="E_ext"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="E" name="E"/>
+ </listOfSpecies>
+ <listOfParameters>
+ <parameter constant="true" id="cobra_default_lb" name="cobra default - lb" sboTerm="SBO:0000626" units="mmol_per_gDW_per_hr" value="-100000.0"/>
+ <parameter constant="true" id="cobra_default_ub" name="cobra default - ub" sboTerm="SBO:0000626" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="cobra_0_bound" name="cobra 0 - bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="0.0"/>
+ <parameter constant="true" id="reac1_upper_bound" name="reac1 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="10.0"/>
+ <parameter constant="true" id="reac6_upper_bound" name="reac6 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="3.0"/>
+ <parameter constant="true" id="reac2_upper_bound" name="reac2 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac3_upper_bound" name="reac3 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac4_upper_bound" name="reac4 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac5_upper_bound" name="reac5 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac7_upper_bound" name="reac7 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ </listOfParameters>
+ <listOfReactions>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac1_upper_bound" id="reac1" name="reac1" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="A_ext" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="A" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_default_lb" fbc:upperFluxBound="reac2_upper_bound" id="reac2" name="reac2" reversible="true">
+ <listOfReactants>
+ <speciesReference constant="true" species="A" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="B" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac3_upper_bound" id="reac3" name="reac3" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="A" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="C" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac4_upper_bound" id="reac4" name="reac4" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="B" stoichiometry="1.0"/>
+ <speciesReference constant="true" species="C" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="D" stoichiometry="1.5"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac5_upper_bound" id="reac5" name="reac5" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="D" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="D_ext" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac6_upper_bound" id="reac6" name="reac6" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="E_ext" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="E" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac7_upper_bound" id="reac7" name="reac7" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="E" stoichiometry="2.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="D" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ </listOfReactions>
+ </model>
+</sbml>
\ No newline at end of file
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/PathwayNet/PathwayNet.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/PathwayNet/PathwayNet.xml Wed May 17 13:26:37 2023 +0000
[
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tool id="met4j_PathwayNet" name="PathwayNet" version="1.3.0">
+  <description>Creation of a Pathway Network representation of a SBML file content</description>
+  <xrefs>
+    <xref type="bio.tools">met4j</xref>
+  </xrefs>
+  <requirements>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.3.0</container>
+  </requirements>
+  <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh networkAnalysis.PathwayNet -s "$inputPath"
+#if str($inputSide) != 'None':
+ -sc "$inputSide"
+#end if
+ $removeIsolated
+ $onlySourcesAndSinks
+#if str($weightFile) != 'None':
+ -cw "$weightFile"
+#end if
+ $connectors
+ $asMatrix
+ -o "$outputPath"
+]]></command>
+  <inputs>
+    <param argument="-s" format="sbml" label="input SBML file" name="inputPath" optional="false" type="data" value=""/>
+    <param argument="-sc" format="txt" label="input Side compound file (recommended)" name="inputSide" optional="true" type="data" value=""/>
+    <param argument="-ri" checked="false" falsevalue="" label="remove isolated nodes" name="removeIsolated" truevalue="-ri" type="boolean" value="false"/>
+    <param argument="-oss" checked="false" falsevalue="" label="consider only metabolites that are source or sink in the pathway (i.e non-intermediary compounds)" name="onlySourcesAndSinks" truevalue="-oss" type="boolean" value="false"/>
+    <param argument="-cw" format="tsv" label="an optional file containing weights for pathway pairs" name="weightFile" optional="true" type="data" value=""/>
+    <param argument="-ncw" checked="false" falsevalue="" label="set number of connecting compounds as weight" name="connectors" truevalue="-ncw" type="boolean" value="false"/>
+    <param argument="-am" checked="false" falsevalue="" label="export as matrix (implies simple graph conversion). Default export as GML file" name="asMatrix" truevalue="-am" type="boolean" value="false"/>
+  </inputs>
+  <outputs>
+    <data format="gml" name="outputPath"/>
+  </outputs>
+  <tests/>
+  <help><![CDATA[Genome-scale metabolic networks are often partitioned into metabolic pathways. Pathways are frequently considered independently despite frequent coupling in their activity due to shared metabolites. In order to decipher the interconnections linking overlapping pathways, this app proposes the creation of "Pathway Network", where two pathways are linked if they share compounds.]]></help>
+  <citations/>
+</tool>
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/PrecursorNetwork/PrecursorNetwork.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/PrecursorNetwork/PrecursorNetwork.xml Wed May 17 13:26:37 2023 +0000
[
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tool id="met4j_PrecursorNetwork" name="PrecursorNetwork" version="1.3.0">
+  <description>Perform a network expansion from a set of compound targets to create a precursor network.</description>
+  <xrefs>
+    <xref type="bio.tools">met4j</xref>
+  </xrefs>
+  <requirements>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.3.0</container>
+  </requirements>
+  <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh networkAnalysis.PrecursorNetwork -i "$sbmlFilePath"
+ -t "$targetsFilePath"
+#if str($sideCompoundFile) != 'None':
+ -sc "$sideCompoundFile"
+#end if
+#if str($reactionToIgnoreFile) != 'None':
+ -ir "$reactionToIgnoreFile"
+#end if
+ $asTable
+ -o "$output"
+]]></command>
+  <inputs>
+    <param argument="-i" format="sbml" label="input SBML file: path to network used for computing scope, in sbml format." name="sbmlFilePath" optional="false" type="data" value=""/>
+    <param argument="-t" format="txt" label="input target file: tabulated file containing node of interest ids" name="targetsFilePath" optional="false" type="data" value=""/>
+    <param argument="-sc" format="txt" label="an optional file containing list of ubiquitous compounds to be considered already available" name="sideCompoundFile" optional="true" type="data" value=""/>
+    <param argument="-ir" format="txt" label="an optional file containing list of reaction to ignore (forbid inclusion in scope)" name="reactionToIgnoreFile" optional="true" type="data" value=""/>
+    <param argument="-tab" checked="false" falsevalue="" label="Export in tabulated file instead of .GML" name="asTable" truevalue="-tab" type="boolean" value="false"/>
+  </inputs>
+  <outputs>
+    <data format="gml" name="output"/>
+  </outputs>
+  <tests>
+    <test>
+      <param name="sbmlFilePath" value="toy_model.xml"/>
+      <param name="targetsFilePath" value="targets.txt"/>
+      <output ftype="gml" name="output">
+        <assert_contents>
+          <has_line_matching expression=".*node.*" n="13"/>
+          <has_line_matching expression=".*edge.*" n="15"/>
+        </assert_contents>
+      </output>
+    </test>
+  </tests>
+  <help><![CDATA[Perform a network expansion from a set of compound targets to create a precursor network.
+The precursor network of a set of compounds (targets) refer to the sub-part of a metabolic network from which a target can be reachedThe network expansion process consist of adding a reaction to the network if any of its products are either a targets or a substrate of a previously added reaction]]></help>
+  <citations/>
+</tool>
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/PrecursorNetwork/test-data/targets.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/PrecursorNetwork/test-data/targets.txt Wed May 17 13:26:37 2023 +0000
b
@@ -0,0 +1,1 @@
+D
\ No newline at end of file
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/PrecursorNetwork/test-data/toy_model.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/PrecursorNetwork/test-data/toy_model.xml Wed May 17 13:26:37 2023 +0000
[
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding='UTF-8' ?>
+<sbml fbc:required="false" groups:required="false" level="3" version="1"
+ xmlns="http://www.sbml.org/sbml/level3/version1/core"
+ xmlns:fbc="http://www.sbml.org/sbml/level3/version1/fbc/version2"
+ xmlns:groups="http://www.sbml.org/sbml/level3/version1/groups/version1">
+ <model fbc:strict="true" name="toy model">
+ <listOfUnitDefinitions>
+ <unitDefinition id="mmol_per_gDW_per_hr" name="mmol_per_gDW_per_hr">
+ <listOfUnits>
+ <unit exponent="-1" kind="gram" multiplier="1" scale="0"/>
+ <unit exponent="1" kind="mole" multiplier="1" scale="-3"/>
+ <unit exponent="-1" kind="second" multiplier="0.00027777" scale="0"/>
+ </listOfUnits>
+ </unitDefinition>
+ </listOfUnitDefinitions>
+ <listOfCompartments>
+ <compartment constant="false" id="c" name="Cytosol"/>
+ <compartment constant="false" id="e" name="Extracellular"/>
+ </listOfCompartments>
+ <listOfSpecies>
+ <species boundaryCondition="false" compartment="e" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="A_ext" name="A_ext">
+ <notes>
+ <body xmlns="http://www.w3.org/1999/xhtml">
+ <p>SMILES: C[C@@H](C(=O)O)NC</p>
+ </body>
+ </notes>
+ <annotation>
+ <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:bqbiol="http://biomodels.net/biology-qualifiers/">
+ <rdf:Description rdf:about="#A_ext">
+ <bqbiol:is>
+ <in:inchi xmlns:in="https://biomodels.net/inchi">InChI=1S/C2H6O/c1-2-3/h3H,2H2,1H3</in:inchi>
+ </bqbiol:is>
+ </rdf:Description>
+ </rdf:RDF>
+ </annotation>
+
+ </species>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="A" name="A"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="B" name="B"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="C" name="C"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="D" name="D"/>
+ <species boundaryCondition="false" compartment="e" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="D_ext" name="D_ext"/>
+ <species boundaryCondition="false" compartment="e" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="E_ext" name="E_ext"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="E" name="E"/>
+ </listOfSpecies>
+ <listOfParameters>
+ <parameter constant="true" id="cobra_default_lb" name="cobra default - lb" sboTerm="SBO:0000626" units="mmol_per_gDW_per_hr" value="-100000.0"/>
+ <parameter constant="true" id="cobra_default_ub" name="cobra default - ub" sboTerm="SBO:0000626" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="cobra_0_bound" name="cobra 0 - bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="0.0"/>
+ <parameter constant="true" id="reac1_upper_bound" name="reac1 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="10.0"/>
+ <parameter constant="true" id="reac6_upper_bound" name="reac6 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="3.0"/>
+ <parameter constant="true" id="reac2_upper_bound" name="reac2 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac3_upper_bound" name="reac3 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac4_upper_bound" name="reac4 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac5_upper_bound" name="reac5 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac7_upper_bound" name="reac7 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ </listOfParameters>
+ <listOfReactions>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac1_upper_bound" id="reac1" name="reac1" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="A_ext" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="A" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_default_lb" fbc:upperFluxBound="reac2_upper_bound" id="reac2" name="reac2" reversible="true">
+ <listOfReactants>
+ <speciesReference constant="true" species="A" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="B" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac3_upper_bound" id="reac3" name="reac3" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="A" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="C" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac4_upper_bound" id="reac4" name="reac4" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="B" stoichiometry="1.0"/>
+ <speciesReference constant="true" species="C" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="D" stoichiometry="1.5"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac5_upper_bound" id="reac5" name="reac5" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="D" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="D_ext" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac6_upper_bound" id="reac6" name="reac6" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="E_ext" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="E" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac7_upper_bound" id="reac7" name="reac7" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="E" stoichiometry="2.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="D" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ </listOfReactions>
+ </model>
+</sbml>
\ No newline at end of file
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/Sbml2Graph/Sbml2Graph.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/Sbml2Graph/Sbml2Graph.xml Wed May 17 13:26:37 2023 +0000
[
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tool id="met4j_Sbml2Graph" name="Sbml2Graph" version="1.3.0">
+  <description>Create a graph representation of a SBML file content, and export it in graph file format.</description>
+  <xrefs>
+    <xref type="bio.tools">met4j</xref>
+  </xrefs>
+  <requirements>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.3.0</container>
+  </requirements>
+  <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh convert.Sbml2Graph -i "$inputPath"
+ $bipartite
+ $compound
+ $reaction
+ $tab
+ $gml
+ -o "$outputPath"
+]]></command>
+  <inputs>
+    <param argument="-i" format="sbml" label="input SBML file" name="inputPath" optional="false" type="data" value=""/>
+    <param argument="-b" checked="false" falsevalue="" label="create bipartite graph" name="bipartite" truevalue="-b" type="boolean" value="false"/>
+    <param argument="-c" checked="true" falsevalue="" label="create compound graph" name="compound" truevalue="-c" type="boolean" value="true"/>
+    <param argument="-r" checked="false" falsevalue="" label="create reaction graph" name="reaction" truevalue="-r" type="boolean" value="false"/>
+    <param argument="-tab" checked="false" falsevalue="" label="export in tabulated file" name="tab" truevalue="-tab" type="boolean" value="false"/>
+    <param argument="-gml" checked="true" falsevalue="" label="export in GML file" name="gml" truevalue="-gml" type="boolean" value="true"/>
+  </inputs>
+  <outputs>
+    <data format="txt" name="outputPath"/>
+  </outputs>
+  <tests>
+    <test>
+      <param name="inputPath" value="toy_model.xml"/>
+      <output name="outputPath">
+        <assert_contents>
+          <has_n_lines n="101"/>
+        </assert_contents>
+      </output>
+    </test>
+    <test>
+      <param name="inputPath" value="toy_model.xml"/>
+      <param name="bipartite" value="true"/>
+      <param name="compound" value="false"/>
+      <output name="outputPath">
+        <assert_contents>
+          <has_n_lines n="184"/>
+        </assert_contents>
+      </output>
+    </test>
+    <test>
+      <param name="inputPath" value="toy_model.xml"/>
+      <param name="reaction" value="true"/>
+      <param name="compound" value="false"/>
+      <output name="outputPath">
+        <assert_contents>
+          <has_n_lines n="90"/>
+        </assert_contents>
+      </output>
+    </test>
+  </tests>
+  <help><![CDATA[Create a graph representation of a SBML file content, and export it in graph file format.
+The graph can be either a compound graph or a bipartite graph, and can be exported in gml or tabulated file format.]]></help>
+  <citations/>
+</tool>
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/Sbml2Graph/test-data/toy_model.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/Sbml2Graph/test-data/toy_model.xml Wed May 17 13:26:37 2023 +0000
[
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding='UTF-8' ?>
+<sbml fbc:required="false" groups:required="false" level="3" version="1"
+ xmlns="http://www.sbml.org/sbml/level3/version1/core"
+ xmlns:fbc="http://www.sbml.org/sbml/level3/version1/fbc/version2"
+ xmlns:groups="http://www.sbml.org/sbml/level3/version1/groups/version1">
+ <model fbc:strict="true" name="toy model">
+ <listOfUnitDefinitions>
+ <unitDefinition id="mmol_per_gDW_per_hr" name="mmol_per_gDW_per_hr">
+ <listOfUnits>
+ <unit exponent="-1" kind="gram" multiplier="1" scale="0"/>
+ <unit exponent="1" kind="mole" multiplier="1" scale="-3"/>
+ <unit exponent="-1" kind="second" multiplier="0.00027777" scale="0"/>
+ </listOfUnits>
+ </unitDefinition>
+ </listOfUnitDefinitions>
+ <listOfCompartments>
+ <compartment constant="false" id="c" name="Cytosol"/>
+ <compartment constant="false" id="e" name="Extracellular"/>
+ </listOfCompartments>
+ <listOfSpecies>
+ <species boundaryCondition="false" compartment="e" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="A_ext" name="A_ext">
+ <notes>
+ <body xmlns="http://www.w3.org/1999/xhtml">
+ <p>SMILES: C[C@@H](C(=O)O)NC</p>
+ </body>
+ </notes>
+ <annotation>
+ <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:bqbiol="http://biomodels.net/biology-qualifiers/">
+ <rdf:Description rdf:about="#A_ext">
+ <bqbiol:is>
+ <in:inchi xmlns:in="https://biomodels.net/inchi">InChI=1S/C2H6O/c1-2-3/h3H,2H2,1H3</in:inchi>
+ </bqbiol:is>
+ </rdf:Description>
+ </rdf:RDF>
+ </annotation>
+
+ </species>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="A" name="A"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="B" name="B"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="C" name="C"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="D" name="D"/>
+ <species boundaryCondition="false" compartment="e" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="D_ext" name="D_ext"/>
+ <species boundaryCondition="false" compartment="e" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="E_ext" name="E_ext"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="E" name="E"/>
+ </listOfSpecies>
+ <listOfParameters>
+ <parameter constant="true" id="cobra_default_lb" name="cobra default - lb" sboTerm="SBO:0000626" units="mmol_per_gDW_per_hr" value="-100000.0"/>
+ <parameter constant="true" id="cobra_default_ub" name="cobra default - ub" sboTerm="SBO:0000626" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="cobra_0_bound" name="cobra 0 - bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="0.0"/>
+ <parameter constant="true" id="reac1_upper_bound" name="reac1 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="10.0"/>
+ <parameter constant="true" id="reac6_upper_bound" name="reac6 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="3.0"/>
+ <parameter constant="true" id="reac2_upper_bound" name="reac2 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac3_upper_bound" name="reac3 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac4_upper_bound" name="reac4 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac5_upper_bound" name="reac5 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac7_upper_bound" name="reac7 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ </listOfParameters>
+ <listOfReactions>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac1_upper_bound" id="reac1" name="reac1" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="A_ext" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="A" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_default_lb" fbc:upperFluxBound="reac2_upper_bound" id="reac2" name="reac2" reversible="true">
+ <listOfReactants>
+ <speciesReference constant="true" species="A" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="B" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac3_upper_bound" id="reac3" name="reac3" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="A" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="C" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac4_upper_bound" id="reac4" name="reac4" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="B" stoichiometry="1.0"/>
+ <speciesReference constant="true" species="C" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="D" stoichiometry="1.5"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac5_upper_bound" id="reac5" name="reac5" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="D" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="D_ext" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac6_upper_bound" id="reac6" name="reac6" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="E_ext" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="E" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac7_upper_bound" id="reac7" name="reac7" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="E" stoichiometry="2.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="D" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ </listOfReactions>
+ </model>
+</sbml>
\ No newline at end of file
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/Sbml2Tab/Sbml2Tab.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/Sbml2Tab/Sbml2Tab.xml Wed May 17 13:26:37 2023 +0000
[
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tool id="met4j_Sbml2Tab" name="Sbml2Tab" version="1.3.0">
+  <description>Create a tabulated file from a SBML file</description>
+  <xrefs>
+    <xref type="bio.tools">met4j</xref>
+  </xrefs>
+  <requirements>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.3.0</container>
+  </requirements>
+  <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh convert.Sbml2Tab#if str($i):
+ -i "$i"
+#end if
+#if str($r):
+ -r "$r"
+#end if
+ -in "$in"
+ -out "$out"
+]]></command>
+  <inputs>
+    <param argument="-i" label="[--&gt;] String for irreversible reaction" name="i" optional="true" type="text" value="--&gt;">
+      <sanitizer invalid_char="_">
+        <valid initial="string.printable"/>
+      </sanitizer>
+    </param>
+    <param argument="-r" label="[&lt;==&gt;] String for reversible reaction" name="r" optional="true" type="text" value="&lt;==&gt;">
+      <sanitizer invalid_char="_">
+        <valid initial="string.printable"/>
+      </sanitizer>
+    </param>
+    <param argument="-in" format="sbml" label="Sbml file" name="in" optional="false" type="data" value=""/>
+  </inputs>
+  <outputs>
+    <data format="tsv" name="out"/>
+  </outputs>
+  <tests>
+    <test>
+      <param name="in" value="toy_model.xml"/>
+      <output ftype="tsv" name="out">
+      <assert_contents>
+        <has_n_lines n="8"/>
+        <has_n_columns n="9"/>
+        <has_text text="2.0 E[c] --&gt; D[c]"/>
+        <has_text text="A[c] &lt;==&gt; B[c]"/>
+      </assert_contents>
+    </output>
+    </test>
+    <test>
+      <param name="in" value="toy_model.xml"/>
+      <param name="i" value="-&gt;"/>
+      <param name="r" value="="/>
+      <output ftype="tsv" name="out">
+      <assert_contents>
+        <has_n_lines n="8"/>
+        <has_n_columns n="9"/>
+        <has_text text="2.0 E[c] -&gt; D[c]"/>
+        <has_text text="A[c] = B[c]"/>
+      </assert_contents>
+    </output>
+    </test>
+  </tests>
+  <help><![CDATA[Create a tabulated file from a SBML file]]></help>
+  <citations/>
+</tool>
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/Sbml2Tab/test-data/toy_model.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/Sbml2Tab/test-data/toy_model.xml Wed May 17 13:26:37 2023 +0000
[
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding='UTF-8' ?>
+<sbml fbc:required="false" groups:required="false" level="3" version="1"
+ xmlns="http://www.sbml.org/sbml/level3/version1/core"
+ xmlns:fbc="http://www.sbml.org/sbml/level3/version1/fbc/version2"
+ xmlns:groups="http://www.sbml.org/sbml/level3/version1/groups/version1">
+ <model fbc:strict="true" name="toy model">
+ <listOfUnitDefinitions>
+ <unitDefinition id="mmol_per_gDW_per_hr" name="mmol_per_gDW_per_hr">
+ <listOfUnits>
+ <unit exponent="-1" kind="gram" multiplier="1" scale="0"/>
+ <unit exponent="1" kind="mole" multiplier="1" scale="-3"/>
+ <unit exponent="-1" kind="second" multiplier="0.00027777" scale="0"/>
+ </listOfUnits>
+ </unitDefinition>
+ </listOfUnitDefinitions>
+ <listOfCompartments>
+ <compartment constant="false" id="c" name="Cytosol"/>
+ <compartment constant="false" id="e" name="Extracellular"/>
+ </listOfCompartments>
+ <listOfSpecies>
+ <species boundaryCondition="false" compartment="e" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="A_ext" name="A_ext">
+ <notes>
+ <body xmlns="http://www.w3.org/1999/xhtml">
+ <p>SMILES: C[C@@H](C(=O)O)NC</p>
+ </body>
+ </notes>
+ <annotation>
+ <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:bqbiol="http://biomodels.net/biology-qualifiers/">
+ <rdf:Description rdf:about="#A_ext">
+ <bqbiol:is>
+ <in:inchi xmlns:in="https://biomodels.net/inchi">InChI=1S/C2H6O/c1-2-3/h3H,2H2,1H3</in:inchi>
+ </bqbiol:is>
+ </rdf:Description>
+ </rdf:RDF>
+ </annotation>
+
+ </species>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="A" name="A"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="B" name="B"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="C" name="C"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="D" name="D"/>
+ <species boundaryCondition="false" compartment="e" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="D_ext" name="D_ext"/>
+ <species boundaryCondition="false" compartment="e" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="E_ext" name="E_ext"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="E" name="E"/>
+ </listOfSpecies>
+ <listOfParameters>
+ <parameter constant="true" id="cobra_default_lb" name="cobra default - lb" sboTerm="SBO:0000626" units="mmol_per_gDW_per_hr" value="-100000.0"/>
+ <parameter constant="true" id="cobra_default_ub" name="cobra default - ub" sboTerm="SBO:0000626" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="cobra_0_bound" name="cobra 0 - bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="0.0"/>
+ <parameter constant="true" id="reac1_upper_bound" name="reac1 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="10.0"/>
+ <parameter constant="true" id="reac6_upper_bound" name="reac6 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="3.0"/>
+ <parameter constant="true" id="reac2_upper_bound" name="reac2 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac3_upper_bound" name="reac3 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac4_upper_bound" name="reac4 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac5_upper_bound" name="reac5 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac7_upper_bound" name="reac7 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ </listOfParameters>
+ <listOfReactions>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac1_upper_bound" id="reac1" name="reac1" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="A_ext" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="A" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_default_lb" fbc:upperFluxBound="reac2_upper_bound" id="reac2" name="reac2" reversible="true">
+ <listOfReactants>
+ <speciesReference constant="true" species="A" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="B" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac3_upper_bound" id="reac3" name="reac3" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="A" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="C" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac4_upper_bound" id="reac4" name="reac4" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="B" stoichiometry="1.0"/>
+ <speciesReference constant="true" species="C" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="D" stoichiometry="1.5"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac5_upper_bound" id="reac5" name="reac5" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="D" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="D_ext" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac6_upper_bound" id="reac6" name="reac6" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="E_ext" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="E" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac7_upper_bound" id="reac7" name="reac7" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="E" stoichiometry="2.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="D" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ </listOfReactions>
+ </model>
+</sbml>
\ No newline at end of file
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/SbmlCheckBalance/SbmlCheckBalance.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/SbmlCheckBalance/SbmlCheckBalance.xml Wed May 17 13:26:37 2023 +0000
[
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tool id="met4j_SbmlCheckBalance" name="SbmlCheckBalance" version="1.3.0">
+  <description>Check balance of all the reactions in a SBML.</description>
+  <xrefs>
+    <xref type="bio.tools">met4j</xref>
+  </xrefs>
+  <requirements>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.3.0</container>
+  </requirements>
+  <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh reconstruction.SbmlCheckBalance -sbml "$sbml"
+ -out "$out"
+]]></command>
+  <inputs>
+    <param argument="-sbml" format="sbml" label="Original sbml file" name="sbml" optional="false" type="data" value=""/>
+  </inputs>
+  <outputs>
+    <data format="tsv" name="out"/>
+  </outputs>
+  <tests/>
+  <help><![CDATA[Check balance of all the reactions in a SBML.
+A reaction is balanced if all its reactants have a chemical formula with a good syntax and if the quantity of each atom is the same in both sides of the reaction.
+For each reaction, indicates if the reaction is balanced, the list of the atoms and the sum of their quantity, and the list of the metabolites that don't have a correct chemical formula.]]></help>
+  <citations/>
+</tool>
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/SbmlSetChargesFromFile/SbmlSetChargesFromFile.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/SbmlSetChargesFromFile/SbmlSetChargesFromFile.xml Wed May 17 13:26:37 2023 +0000
[
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tool id="met4j_SbmlSetChargesFromFile" name="SbmlSetChargesFromFile" version="1.3.0">
+  <description>Set charge to network metabolites from a tabulated file containing the metabolite ids and the formulas</description>
+  <xrefs>
+    <xref type="bio.tools">met4j</xref>
+  </xrefs>
+  <requirements>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.3.0</container>
+  </requirements>
+  <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh attributes.SbmlSetChargesFromFile#if str($colcharge) != 'nan':
+ -cc "$colcharge"
+#end if
+#if str($colid) != 'nan':
+ -ci "$colid"
+#end if
+ $p
+ $s
+#if str($nSkip):
+ -n "$nSkip"
+#end if
+ -sbml "$sbml"
+#if str($tab) != 'None':
+ -tab "$tab"
+#end if
+#if str($c):
+ -c "$c"
+#end if
+ -out "$out"
+]]></command>
+  <inputs>
+    <param argument="-cc" label="[2] number of the column where are the charges" name="colcharge" optional="true" type="integer" value="2"/>
+    <param argument="-ci" label="[1] number of the column where are the metabolite ids" name="colid" optional="true" type="integer" value="1"/>
+    <param argument="-p" checked="false" falsevalue="" label="[deactivated] To match the objects in the sbml file, adds the prefix M_ to metabolite ids" name="p" truevalue="-p" type="boolean" value="false"/>
+    <param argument="-s" checked="false" falsevalue="" label="[deactivated] To match the objects in the sbml file, adds the suffix _comparmentID to metabolites" name="s" truevalue="-s" type="boolean" value="false"/>
+    <param argument="-n" label="[0] Number of lines to skip at the beginning of the tabulated file" name="nSkip" optional="true" type="text" value="0">
+      <sanitizer invalid_char="_">
+        <valid initial="string.printable"/>
+      </sanitizer>
+    </param>
+    <param argument="-sbml" format="sbml" label="Original sbml file" name="sbml" optional="false" type="data" value=""/>
+    <param argument="-tab" format="tsv" label="Tabulated file" name="tab" optional="true" type="data" value=""/>
+    <param argument="-c" label="[#] Comment String in the tabulated file. The lines beginning by this string won't be read" name="c" optional="true" type="text" value="#">
+      <sanitizer invalid_char="_">
+        <valid initial="string.printable"/>
+      </sanitizer>
+    </param>
+  </inputs>
+  <outputs>
+    <data format="sbml" name="out"/>
+  </outputs>
+  <tests>
+    <test>
+ <param name="sbml" value="toy_model.xml"/>
+ <param name="tab" value="charges.tsv"/>
+ <output ftype="sbml" name="out">
+ <assert_contents>
+ <is_valid_xml/>
+ <has_line_matching expression=".*fbc:charge=.2.*" n="1"/>
+ <has_line_matching expression=".*fbc:charge=.-3.*" n="1"/>
+ </assert_contents>
+ </output>
+ </test>
+    <test>
+ <param name="sbml" value="toy_model.xml"/>
+ <param name="tab" value="chargesWithComment.tsv"/>
+ <output ftype="sbml" name="out">
+ <assert_contents>
+ <is_valid_xml/>
+ <has_line_matching expression=".*fbc:charge=.2.*" n="1" negate="true"/>
+ <has_line_matching expression=".*fbc:charge=.-3.*" n="1"/>
+ </assert_contents>
+ </output>
+ </test>
+    <test>
+ <param name="sbml" value="toy_model.xml"/>
+ <param name="tab" value="charges.tsv"/>
+ <param name="nSkip" value="1"/>
+ <output ftype="sbml" name="out">
+ <assert_contents>
+ <is_valid_xml/>
+ <has_line_matching expression=".*fbc:charge=.2.*" n="1" negate="true"/>
+ <has_line_matching expression=".*fbc:charge=.-3.*" n="1"/>
+ </assert_contents>
+ </output>
+ </test>
+    <test>
+ <param name="sbml" value="toy_model.xml"/>
+ <param name="tab" value="charges.tsv"/>
+ <param name="ci" value="2"/>
+ <param name="cc" value="3"/>
+ <output ftype="sbml" name="out">
+ <assert_contents>
+ <is_valid_xml/>
+ <has_line_matching expression=".*fbc:charge=.2.*" n="1"/>
+ <has_line_matching expression=".*fbc:charge=.-3.*" n="1"/>
+ </assert_contents>
+ </output>
+ </test>
+    <test>
+ <param name="sbml" value="XF_network.sbml"/>
+ <param name="tab" value="chargesXF.tsv"/>
+ <param name="p" value="true"/>
+ <param name="s" value="true"/>
+ <output ftype="sbml" name="out">
+ <assert_contents>
+ <is_valid_xml/>
+ <has_line_matching expression=".*fbc:charge=.-1000.*" n="3"/>
+ </assert_contents>
+ </output>
+ </test>
+  </tests>
+  <help><![CDATA[Set charge to network metabolites from a tabulated file containing the metabolite ids and the formulas
+The charge must be a number. The ids must correspond between the tabulated file and the SBML file.
+If prefix or suffix is different in the SBML file, use the -p or the -s options.
+The charge will be written in the SBML file in two locations:+
+- in the reaction notes (e.g. <p>charge: -1</p>)
+- as fbc attribute (e.g. fbc:charge="1")]]></help>
+  <citations/>
+</tool>
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/SbmlSetChargesFromFile/test-data/XF_network.sbml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/SbmlSetChargesFromFile/test-data/XF_network.sbml Wed May 17 13:26:37 2023 +0000
b
b'@@ -0,0 +1,47267 @@\n+<?xml version="1.0" encoding="UTF-8"?>\n+<sbml fbc:required="false" groups:required="false" level="3" version="2" xmlns="http://www.sbml.org/sbml/level3/version2/core" xmlns:fbc="http://www.sbml.org/sbml/level3/version1/fbc/version2" xmlns:groups="http://www.sbml.org/sbml/level3/version1/groups/version1">\n+  <model fbc:strict="true" id="Xfm1158" metaid="Xfm1158" name="Xfm1158">\n+    <fbc:listOfGeneProducts>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_007090" fbc:label="XFCFBP8418_007090" fbc:name="XFCFBP8418_007090" metaid="_8a7d7180-d79e-4dbb-86ed-f8d7eb60e698"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_005900" fbc:label="XFCFBP8418_005900" fbc:name="XFCFBP8418_005900" metaid="_867487dd-ff57-4e93-8de9-b5ecb805e0eb"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_011590" fbc:label="XFCFBP8418_011590" fbc:name="XFCFBP8418_011590" metaid="_44606760-936c-4585-b40c-650e953a5f73"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_014620" fbc:label="XFCFBP8418_014620" fbc:name="XFCFBP8418_014620" metaid="da273da9-0f84-4615-a464-2ab71416e8cc"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_015830" fbc:label="XFCFBP8418_015830" fbc:name="XFCFBP8418_015830" metaid="_3a9239a2-8e23-4834-99a8-a7dc15f6d906"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_014980" fbc:label="XFCFBP8418_014980" fbc:name="XFCFBP8418_014980" metaid="_7f26806b-e32e-4c5c-a78d-9e094c267bbf"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_020190" fbc:label="XFCFBP8418_020190" fbc:name="XFCFBP8418_020190" metaid="_31bbb514-1d52-4727-91cb-367af12e95ca"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_004940" fbc:label="XFCFBP8418_004940" fbc:name="XFCFBP8418_004940" metaid="a2f20753-c245-477e-8363-8f5e45c50f5d"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_021160" fbc:label="XFCFBP8418_021160" fbc:name="XFCFBP8418_021160" metaid="_844bdacc-d091-457d-9c4d-846cb9aab3c1"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_025760" fbc:label="XFCFBP8418_025760" fbc:name="XFCFBP8418_025760" metaid="fd8a601e-e56f-4263-9aa7-6ed9bf85f958"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_024670" fbc:label="XFCFBP8418_024670" fbc:name="XFCFBP8418_024670" metaid="_2bbe03ce-c814-417a-b9c0-e8a1f29f4106"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_004820" fbc:label="XFCFBP8418_004820" fbc:name="XFCFBP8418_004820" metaid="_41cb6d94-13d8-461e-a217-29a68e21cd2b"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_023580" fbc:label="XFCFBP8418_023580" fbc:name="XFCFBP8418_023580" metaid="_31ff72d7-4e30-4563-85aa-4afc58dd6bee"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_000460" fbc:label="XFCFBP8418_000460" fbc:name="XFCFBP8418_000460" metaid="d7ea14e6-cd6c-4404-b973-486ade662242"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_026730" fbc:label="XFCFBP8418_026730" fbc:name="XFCFBP8418_026730" metaid="e876348e-787e-4f2a-8904-e675c2589c17"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_025640" fbc:label="XFCFBP8418_025640" fbc:name="XFCFBP8418_025640" metaid="b5b93812-bd2e-4ca8-8328-e1d35e17ac3a"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_023100" fbc:label="XFCFBP8418_023100" fbc:name="XFCFBP8418_023100" metaid="f62e0096-7b12-4db3-a7b0-2e1cfa0302c6"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_027800" fbc:label="XFCFBP8418_027800" fbc:name="XFCFBP8418_027800" metaid="_8beb93ba-34a4-4330-86bf-2c47b1cb7f2e"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_004700" fbc:label="XFCFBP8418_004700" fbc:name="XFCFBP8418_004700" metaid="_2aceabe8-5294-42eb-9d3b-2506634c68d5"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_005910" fbc:label="XFCFBP8418_005910" fbc:name="XFCFBP8418_005910" metaid="a7b44241-024e-49c1-88af-1e1108cf09eb"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_013540" fbc:label="XFCFBP8418_013540" fbc:name="XFCFBP8418_013540" metaid="_83bdba7b-0eb0-4dfb-99ed-6e365240d870"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_011240" fbc:label="XFCFBP8418_011240" fbc:name="XFCFBP8418_011240" metaid="_568b9959-99b6-49bd-86d7-04e773d940da"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_012210" fbc:label="XFCFBP8418_01221'..b'     </annotation>\n+        <fbc:geneProductAssociation>\n+          <fbc:geneProductRef fbc:geneProduct="XFCFBP8418_010590"/>\n+        </fbc:geneProductAssociation>\n+        <listOfReactants>\n+          <speciesReference constant="true" species="M_cyst_L_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_h2o_c" stoichiometry="1"/>\n+        </listOfReactants>\n+        <listOfProducts>\n+          <speciesReference constant="true" species="M_2obut_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_cys_L_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_nh4_c" stoichiometry="1"/>\n+        </listOfProducts>\n+      </reaction>\n+      <reaction fbc:lowerFluxBound="LOWER_BOUND_99999_0" fbc:upperFluxBound="UPPER_BOUND_99999_0" id="R_FUCtpp" metaid="_34363cfc-fa7f-4df4-a073-49f5befcdf50" name="R_FUCtpp" reversible="true">\n+        <notes>\n+          <body xmlns="http://www.w3.org/1999/xhtml">\n+            <p>GENE_ASSOCIATION: XFCFBP8418_018650</p>\n+            <p>SUBSYSTEM: Transport__Inner_Membrane</p>\n+            <p>EC_NUMBER: No_Assignment</p>\n+          </body>\n+        </notes>\n+        <annotation>\n+          <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:bqbiol="http://biomodels.net/biology-qualifiers/">\n+            <rdf:Description rdf:about="#_34363cfc-fa7f-4df4-a073-49f5befcdf50">\n+              <bqbiol:is>\n+                <rdf:Bag>\n+                  <rdf:li rdf:resource="http://identifiers.org/ec-code/No_Assignment"/>\n+                </rdf:Bag>\n+              </bqbiol:is>\n+            </rdf:Description>\n+          </rdf:RDF>\n+        </annotation>\n+        <fbc:geneProductAssociation>\n+          <fbc:geneProductRef fbc:geneProduct="XFCFBP8418_018650"/>\n+        </fbc:geneProductAssociation>\n+        <listOfReactants>\n+          <speciesReference constant="true" species="M_h_p" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_fuc_L_p" stoichiometry="1"/>\n+        </listOfReactants>\n+        <listOfProducts>\n+          <speciesReference constant="true" species="M_fuc_L_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_h_c" stoichiometry="1"/>\n+        </listOfProducts>\n+      </reaction>\n+      <reaction fbc:lowerFluxBound="LOWER_BOUND_0_0" fbc:upperFluxBound="UPPER_BOUND_99999_0" id="R_FACOAE120" metaid="_2691931b-9cfe-40d9-95d9-13e4ed057413" name="R_FACOAE120" reversible="false">\n+        <notes>\n+          <body xmlns="http://www.w3.org/1999/xhtml">\n+            <p>GENE_ASSOCIATION: XFCFBP8418_025070</p>\n+            <p>SUBSYSTEM: Cell_Envelope_Biosynthesis</p>\n+            <p>EC_NUMBER: 3.1.2.20</p>\n+          </body>\n+        </notes>\n+        <annotation>\n+          <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:bqbiol="http://biomodels.net/biology-qualifiers/">\n+            <rdf:Description rdf:about="#_2691931b-9cfe-40d9-95d9-13e4ed057413">\n+              <bqbiol:is>\n+                <rdf:Bag>\n+                  <rdf:li rdf:resource="http://identifiers.org/ec-code/3.1.2.20"/>\n+                </rdf:Bag>\n+              </bqbiol:is>\n+            </rdf:Description>\n+          </rdf:RDF>\n+        </annotation>\n+        <fbc:geneProductAssociation>\n+          <fbc:geneProductRef fbc:geneProduct="XFCFBP8418_025070"/>\n+        </fbc:geneProductAssociation>\n+        <listOfReactants>\n+          <speciesReference constant="true" species="M_ddcacoa_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_h2o_c" stoichiometry="1"/>\n+        </listOfReactants>\n+        <listOfProducts>\n+          <speciesReference constant="true" species="M_ddca_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_h_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_coa_c" stoichiometry="1"/>\n+        </listOfProducts>\n+      </reaction>\n+    </listOfReactions>\n+  </model>\n+</sbml>\n'
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/SbmlSetChargesFromFile/test-data/charges.tsv
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/SbmlSetChargesFromFile/test-data/charges.tsv Wed May 17 13:26:37 2023 +0000
b
@@ -0,0 +1,2 @@
+A 2
+B -3
\ No newline at end of file
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/SbmlSetChargesFromFile/test-data/chargesDifferentColumns.tsv
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/SbmlSetChargesFromFile/test-data/chargesDifferentColumns.tsv Wed May 17 13:26:37 2023 +0000
b
@@ -0,0 +1,2 @@
+Line1 A 2
+Line2 B -3
\ No newline at end of file
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/SbmlSetChargesFromFile/test-data/chargesWithComment.tsv
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/SbmlSetChargesFromFile/test-data/chargesWithComment.tsv Wed May 17 13:26:37 2023 +0000
b
@@ -0,0 +1,2 @@
+#A 2
+B -3
\ No newline at end of file
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/SbmlSetChargesFromFile/test-data/chargesXF.tsv
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/SbmlSetChargesFromFile/test-data/chargesXF.tsv Wed May 17 13:26:37 2023 +0000
b
@@ -0,0 +1,1 @@
+glc_D -1000
\ No newline at end of file
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/SbmlSetChargesFromFile/test-data/toy_model.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/SbmlSetChargesFromFile/test-data/toy_model.xml Wed May 17 13:26:37 2023 +0000
[
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding='UTF-8' ?>
+<sbml fbc:required="false" groups:required="false" level="3" version="1"
+ xmlns="http://www.sbml.org/sbml/level3/version1/core"
+ xmlns:fbc="http://www.sbml.org/sbml/level3/version1/fbc/version2"
+ xmlns:groups="http://www.sbml.org/sbml/level3/version1/groups/version1">
+ <model fbc:strict="true" name="toy model">
+ <listOfUnitDefinitions>
+ <unitDefinition id="mmol_per_gDW_per_hr" name="mmol_per_gDW_per_hr">
+ <listOfUnits>
+ <unit exponent="-1" kind="gram" multiplier="1" scale="0"/>
+ <unit exponent="1" kind="mole" multiplier="1" scale="-3"/>
+ <unit exponent="-1" kind="second" multiplier="0.00027777" scale="0"/>
+ </listOfUnits>
+ </unitDefinition>
+ </listOfUnitDefinitions>
+ <listOfCompartments>
+ <compartment constant="false" id="c" name="Cytosol"/>
+ <compartment constant="false" id="e" name="Extracellular"/>
+ </listOfCompartments>
+ <listOfSpecies>
+ <species boundaryCondition="false" compartment="e" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="A_ext" name="A_ext">
+ <notes>
+ <body xmlns="http://www.w3.org/1999/xhtml">
+ <p>SMILES: C[C@@H](C(=O)O)NC</p>
+ </body>
+ </notes>
+ <annotation>
+ <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:bqbiol="http://biomodels.net/biology-qualifiers/">
+ <rdf:Description rdf:about="#A_ext">
+ <bqbiol:is>
+ <in:inchi xmlns:in="https://biomodels.net/inchi">InChI=1S/C2H6O/c1-2-3/h3H,2H2,1H3</in:inchi>
+ </bqbiol:is>
+ </rdf:Description>
+ </rdf:RDF>
+ </annotation>
+
+ </species>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="A" name="A"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="B" name="B"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="C" name="C"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="D" name="D"/>
+ <species boundaryCondition="false" compartment="e" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="D_ext" name="D_ext"/>
+ <species boundaryCondition="false" compartment="e" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="E_ext" name="E_ext"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="E" name="E"/>
+ </listOfSpecies>
+ <listOfParameters>
+ <parameter constant="true" id="cobra_default_lb" name="cobra default - lb" sboTerm="SBO:0000626" units="mmol_per_gDW_per_hr" value="-100000.0"/>
+ <parameter constant="true" id="cobra_default_ub" name="cobra default - ub" sboTerm="SBO:0000626" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="cobra_0_bound" name="cobra 0 - bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="0.0"/>
+ <parameter constant="true" id="reac1_upper_bound" name="reac1 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="10.0"/>
+ <parameter constant="true" id="reac6_upper_bound" name="reac6 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="3.0"/>
+ <parameter constant="true" id="reac2_upper_bound" name="reac2 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac3_upper_bound" name="reac3 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac4_upper_bound" name="reac4 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac5_upper_bound" name="reac5 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac7_upper_bound" name="reac7 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ </listOfParameters>
+ <listOfReactions>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac1_upper_bound" id="reac1" name="reac1" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="A_ext" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="A" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_default_lb" fbc:upperFluxBound="reac2_upper_bound" id="reac2" name="reac2" reversible="true">
+ <listOfReactants>
+ <speciesReference constant="true" species="A" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="B" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac3_upper_bound" id="reac3" name="reac3" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="A" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="C" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac4_upper_bound" id="reac4" name="reac4" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="B" stoichiometry="1.0"/>
+ <speciesReference constant="true" species="C" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="D" stoichiometry="1.5"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac5_upper_bound" id="reac5" name="reac5" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="D" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="D_ext" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac6_upper_bound" id="reac6" name="reac6" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="E_ext" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="E" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac7_upper_bound" id="reac7" name="reac7" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="E" stoichiometry="2.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="D" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ </listOfReactions>
+ </model>
+</sbml>
\ No newline at end of file
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/SbmlSetEcsFromFile/SbmlSetEcsFromFile.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/SbmlSetEcsFromFile/SbmlSetEcsFromFile.xml Wed May 17 13:26:37 2023 +0000
[
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tool id="met4j_SbmlSetEcsFromFile" name="SbmlSetEcsFromFile" version="1.3.0">
+  <description>Set EC numbers to reactions from a tabulated file containing the reaction ids and the EC</description>
+  <xrefs>
+    <xref type="bio.tools">met4j</xref>
+  </xrefs>
+  <requirements>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.3.0</container>
+  </requirements>
+  <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh attributes.SbmlSetEcsFromFile#if str($colec) != 'nan':
+ -cec "$colec"
+#end if
+#if str($colid) != 'nan':
+ -ci "$colid"
+#end if
+ $p
+#if str($nSkip):
+ -n "$nSkip"
+#end if
+ -sbml "$sbml"
+#if str($tab) != 'None':
+ -tab "$tab"
+#end if
+#if str($c):
+ -c "$c"
+#end if
+ -out "$out"
+]]></command>
+  <inputs>
+    <param argument="-cec" label="[2] number of the column where are the ecs" name="colec" optional="true" type="integer" value="2"/>
+    <param argument="-ci" label="[1] number of the column where are the reaction ids" name="colid" optional="true" type="integer" value="1"/>
+    <param argument="-p" checked="false" falsevalue="" label="[deactivated] To match the objects in the sbml file, adds the prefix R_ to reactions" name="p" truevalue="-p" type="boolean" value="false"/>
+    <param argument="-n" label="[0] Number of lines to skip at the beginning of the tabulated file" name="nSkip" optional="true" type="text" value="0">
+      <sanitizer invalid_char="_">
+        <valid initial="string.printable"/>
+      </sanitizer>
+    </param>
+    <param argument="-sbml" format="sbml" label="Original sbml file" name="sbml" optional="false" type="data" value=""/>
+    <param argument="-tab" format="tsv" label="Tabulated file" name="tab" optional="true" type="data" value=""/>
+    <param argument="-c" label="[#] Comment String in the tabulated file. The lines beginning by this string won't be read" name="c" optional="true" type="text" value="#">
+      <sanitizer invalid_char="_">
+        <valid initial="string.printable"/>
+      </sanitizer>
+    </param>
+  </inputs>
+  <outputs>
+    <data format="sbml" name="out"/>
+  </outputs>
+  <tests>
+    <test>
+      <param name="sbml" value="toy_model.xml"/>
+      <param name="tab" value="ec.tsv"/>
+      <output ftype="sbml" name="out">
+        <assert_contents>
+          <is_valid_xml/>
+          <has_line_matching expression=".*1.1.1.1.*" n="2"/>
+          <has_line_matching expression=".*1.2.3.4.*" n="2"/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_failure="true">
+      <param name="sbml" value="toy_model.xml"/>
+      <param name="tab" value="ecBad.tsv"/>
+    </test>
+  </tests>
+  <help><![CDATA[Set EC numbers to reactions from a tabulated file containing the reaction ids and the EC
+The ids must correspond between the tabulated file and the SBML file.
+If prefix R_ is present in the ids in the SBML file and not in the tabulated file, use the -p option.
+The EC will be written in the SBML file in two locations:
+- in the reaction notes (e.g. <p>EC_NUMBER: 2.4.2.14</p>)
+- as a reaction annotation (e.g. <rdf:li rdf:resource="http://identifiers.org/ec-code/2.4.2.14"/>)]]></help>
+  <citations/>
+</tool>
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/SbmlSetEcsFromFile/test-data/ec.tsv
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/SbmlSetEcsFromFile/test-data/ec.tsv Wed May 17 13:26:37 2023 +0000
b
@@ -0,0 +1,2 @@
+reac1 1.1.1.1
+reac2 1.2.3.4
\ No newline at end of file
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/SbmlSetEcsFromFile/test-data/ecBad.tsv
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/SbmlSetEcsFromFile/test-data/ecBad.tsv Wed May 17 13:26:37 2023 +0000
b
@@ -0,0 +1,2 @@
+reac1 1.1.1.1
+reac2 1.2.3.4.5
\ No newline at end of file
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/SbmlSetEcsFromFile/test-data/toy_model.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/SbmlSetEcsFromFile/test-data/toy_model.xml Wed May 17 13:26:37 2023 +0000
[
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding='UTF-8' ?>
+<sbml fbc:required="false" groups:required="false" level="3" version="1"
+ xmlns="http://www.sbml.org/sbml/level3/version1/core"
+ xmlns:fbc="http://www.sbml.org/sbml/level3/version1/fbc/version2"
+ xmlns:groups="http://www.sbml.org/sbml/level3/version1/groups/version1">
+ <model fbc:strict="true" name="toy model">
+ <listOfUnitDefinitions>
+ <unitDefinition id="mmol_per_gDW_per_hr" name="mmol_per_gDW_per_hr">
+ <listOfUnits>
+ <unit exponent="-1" kind="gram" multiplier="1" scale="0"/>
+ <unit exponent="1" kind="mole" multiplier="1" scale="-3"/>
+ <unit exponent="-1" kind="second" multiplier="0.00027777" scale="0"/>
+ </listOfUnits>
+ </unitDefinition>
+ </listOfUnitDefinitions>
+ <listOfCompartments>
+ <compartment constant="false" id="c" name="Cytosol"/>
+ <compartment constant="false" id="e" name="Extracellular"/>
+ </listOfCompartments>
+ <listOfSpecies>
+ <species boundaryCondition="false" compartment="e" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="A_ext" name="A_ext">
+ <notes>
+ <body xmlns="http://www.w3.org/1999/xhtml">
+ <p>SMILES: C[C@@H](C(=O)O)NC</p>
+ </body>
+ </notes>
+ <annotation>
+ <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:bqbiol="http://biomodels.net/biology-qualifiers/">
+ <rdf:Description rdf:about="#A_ext">
+ <bqbiol:is>
+ <in:inchi xmlns:in="https://biomodels.net/inchi">InChI=1S/C2H6O/c1-2-3/h3H,2H2,1H3</in:inchi>
+ </bqbiol:is>
+ </rdf:Description>
+ </rdf:RDF>
+ </annotation>
+
+ </species>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="A" name="A"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="B" name="B"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="C" name="C"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="D" name="D"/>
+ <species boundaryCondition="false" compartment="e" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="D_ext" name="D_ext"/>
+ <species boundaryCondition="false" compartment="e" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="E_ext" name="E_ext"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="E" name="E"/>
+ </listOfSpecies>
+ <listOfParameters>
+ <parameter constant="true" id="cobra_default_lb" name="cobra default - lb" sboTerm="SBO:0000626" units="mmol_per_gDW_per_hr" value="-100000.0"/>
+ <parameter constant="true" id="cobra_default_ub" name="cobra default - ub" sboTerm="SBO:0000626" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="cobra_0_bound" name="cobra 0 - bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="0.0"/>
+ <parameter constant="true" id="reac1_upper_bound" name="reac1 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="10.0"/>
+ <parameter constant="true" id="reac6_upper_bound" name="reac6 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="3.0"/>
+ <parameter constant="true" id="reac2_upper_bound" name="reac2 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac3_upper_bound" name="reac3 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac4_upper_bound" name="reac4 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac5_upper_bound" name="reac5 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac7_upper_bound" name="reac7 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ </listOfParameters>
+ <listOfReactions>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac1_upper_bound" id="reac1" name="reac1" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="A_ext" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="A" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_default_lb" fbc:upperFluxBound="reac2_upper_bound" id="reac2" name="reac2" reversible="true">
+ <listOfReactants>
+ <speciesReference constant="true" species="A" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="B" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac3_upper_bound" id="reac3" name="reac3" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="A" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="C" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac4_upper_bound" id="reac4" name="reac4" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="B" stoichiometry="1.0"/>
+ <speciesReference constant="true" species="C" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="D" stoichiometry="1.5"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac5_upper_bound" id="reac5" name="reac5" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="D" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="D_ext" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac6_upper_bound" id="reac6" name="reac6" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="E_ext" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="E" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac7_upper_bound" id="reac7" name="reac7" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="E" stoichiometry="2.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="D" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ </listOfReactions>
+ </model>
+</sbml>
\ No newline at end of file
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/SbmlSetFormulasFromFile/SbmlSetFormulasFromFile.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/SbmlSetFormulasFromFile/SbmlSetFormulasFromFile.xml Wed May 17 13:26:37 2023 +0000
[
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tool id="met4j_SbmlSetFormulasFromFile" name="SbmlSetFormulasFromFile" version="1.3.0">
+  <description>Set Formula to network metabolites from a tabulated file containing the metabolite ids and the formulas</description>
+  <xrefs>
+    <xref type="bio.tools">met4j</xref>
+  </xrefs>
+  <requirements>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.3.0</container>
+  </requirements>
+  <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh attributes.SbmlSetFormulasFromFile#if str($colformula) != 'nan':
+ -cf "$colformula"
+#end if
+#if str($colid) != 'nan':
+ -ci "$colid"
+#end if
+ $p
+ $s
+#if str($nSkip):
+ -n "$nSkip"
+#end if
+ -sbml "$sbml"
+#if str($tab) != 'None':
+ -tab "$tab"
+#end if
+#if str($c):
+ -c "$c"
+#end if
+ -out "$out"
+]]></command>
+  <inputs>
+    <param argument="-cf" label="[2] number of the column where are the formulas" name="colformula" optional="true" type="integer" value="2"/>
+    <param argument="-ci" label="[1] number of the column where are the metabolite ids" name="colid" optional="true" type="integer" value="1"/>
+    <param argument="-p" checked="false" falsevalue="" label="[deactivated] To match the objects in the sbml file, adds the prefix M_ to metabolite ids" name="p" truevalue="-p" type="boolean" value="false"/>
+    <param argument="-s" checked="false" falsevalue="" label="[deactivated] To match the objects in the sbml file, adds the suffix _comparmentID to metabolites" name="s" truevalue="-s" type="boolean" value="false"/>
+    <param argument="-n" label="[0] Number of lines to skip at the beginning of the tabulated file" name="nSkip" optional="true" type="text" value="0">
+      <sanitizer invalid_char="_">
+        <valid initial="string.printable"/>
+      </sanitizer>
+    </param>
+    <param argument="-sbml" format="sbml" label="Original sbml file" name="sbml" optional="false" type="data" value=""/>
+    <param argument="-tab" format="tsv" label="Tabulated file" name="tab" optional="true" type="data" value=""/>
+    <param argument="-c" label="[#] Comment String in the tabulated file. The lines beginning by this string won't be read" name="c" optional="true" type="text" value="#">
+      <sanitizer invalid_char="_">
+        <valid initial="string.printable"/>
+      </sanitizer>
+    </param>
+  </inputs>
+  <outputs>
+    <data format="sbml" name="out"/>
+  </outputs>
+  <tests>
+    <test>
+      <param name="sbml" value="toy_model.xml"/>
+      <param name="tab" value="formula.tsv"/>
+      <output ftype="sbml" name="out">
+        <assert_contents>
+          <is_valid_xml/>
+          <has_line_matching expression=".*CH6O6.*" n="2"/>
+          <has_line_matching expression=".*CH12O4.*" n="2"/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_failure="true">
+      <param name="sbml" value="toy_model.xml"/>
+      <param name="tab" value="formulaBad.tsv"/>
+    </test>
+  </tests>
+  <help><![CDATA[Set Formula to network metabolites from a tabulated file containing the metabolite ids and the formulas
+The ids must correspond between the tabulated file and the SBML file.
+If prefix or suffix is different in the SBML file, use the -p or the -s options.
+The formula will be written in the SBML file in two locations:+
+- in the metabolite notes (e.g. <p>formula: C16H29O2</p>
+
+- as a fbc attribute (e.g. fbc:chemicalFormula="C16H29O2")]]></help>
+  <citations/>
+</tool>
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/SbmlSetFormulasFromFile/test-data/formula.tsv
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/SbmlSetFormulasFromFile/test-data/formula.tsv Wed May 17 13:26:37 2023 +0000
b
@@ -0,0 +1,2 @@
+A CH6O6
+B CH12O4
\ No newline at end of file
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/SbmlSetFormulasFromFile/test-data/formulaBad.tsv
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/SbmlSetFormulasFromFile/test-data/formulaBad.tsv Wed May 17 13:26:37 2023 +0000
b
@@ -0,0 +1,2 @@
+A CH6O6
+B 12CH4O
\ No newline at end of file
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/SbmlSetFormulasFromFile/test-data/toy_model.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/SbmlSetFormulasFromFile/test-data/toy_model.xml Wed May 17 13:26:37 2023 +0000
[
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding='UTF-8' ?>
+<sbml fbc:required="false" groups:required="false" level="3" version="1"
+ xmlns="http://www.sbml.org/sbml/level3/version1/core"
+ xmlns:fbc="http://www.sbml.org/sbml/level3/version1/fbc/version2"
+ xmlns:groups="http://www.sbml.org/sbml/level3/version1/groups/version1">
+ <model fbc:strict="true" name="toy model">
+ <listOfUnitDefinitions>
+ <unitDefinition id="mmol_per_gDW_per_hr" name="mmol_per_gDW_per_hr">
+ <listOfUnits>
+ <unit exponent="-1" kind="gram" multiplier="1" scale="0"/>
+ <unit exponent="1" kind="mole" multiplier="1" scale="-3"/>
+ <unit exponent="-1" kind="second" multiplier="0.00027777" scale="0"/>
+ </listOfUnits>
+ </unitDefinition>
+ </listOfUnitDefinitions>
+ <listOfCompartments>
+ <compartment constant="false" id="c" name="Cytosol"/>
+ <compartment constant="false" id="e" name="Extracellular"/>
+ </listOfCompartments>
+ <listOfSpecies>
+ <species boundaryCondition="false" compartment="e" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="A_ext" name="A_ext">
+ <notes>
+ <body xmlns="http://www.w3.org/1999/xhtml">
+ <p>SMILES: C[C@@H](C(=O)O)NC</p>
+ </body>
+ </notes>
+ <annotation>
+ <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:bqbiol="http://biomodels.net/biology-qualifiers/">
+ <rdf:Description rdf:about="#A_ext">
+ <bqbiol:is>
+ <in:inchi xmlns:in="https://biomodels.net/inchi">InChI=1S/C2H6O/c1-2-3/h3H,2H2,1H3</in:inchi>
+ </bqbiol:is>
+ </rdf:Description>
+ </rdf:RDF>
+ </annotation>
+
+ </species>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="A" name="A"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="B" name="B"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="C" name="C"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="D" name="D"/>
+ <species boundaryCondition="false" compartment="e" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="D_ext" name="D_ext"/>
+ <species boundaryCondition="false" compartment="e" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="E_ext" name="E_ext"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="E" name="E"/>
+ </listOfSpecies>
+ <listOfParameters>
+ <parameter constant="true" id="cobra_default_lb" name="cobra default - lb" sboTerm="SBO:0000626" units="mmol_per_gDW_per_hr" value="-100000.0"/>
+ <parameter constant="true" id="cobra_default_ub" name="cobra default - ub" sboTerm="SBO:0000626" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="cobra_0_bound" name="cobra 0 - bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="0.0"/>
+ <parameter constant="true" id="reac1_upper_bound" name="reac1 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="10.0"/>
+ <parameter constant="true" id="reac6_upper_bound" name="reac6 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="3.0"/>
+ <parameter constant="true" id="reac2_upper_bound" name="reac2 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac3_upper_bound" name="reac3 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac4_upper_bound" name="reac4 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac5_upper_bound" name="reac5 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac7_upper_bound" name="reac7 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ </listOfParameters>
+ <listOfReactions>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac1_upper_bound" id="reac1" name="reac1" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="A_ext" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="A" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_default_lb" fbc:upperFluxBound="reac2_upper_bound" id="reac2" name="reac2" reversible="true">
+ <listOfReactants>
+ <speciesReference constant="true" species="A" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="B" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac3_upper_bound" id="reac3" name="reac3" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="A" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="C" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac4_upper_bound" id="reac4" name="reac4" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="B" stoichiometry="1.0"/>
+ <speciesReference constant="true" species="C" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="D" stoichiometry="1.5"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac5_upper_bound" id="reac5" name="reac5" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="D" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="D_ext" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac6_upper_bound" id="reac6" name="reac6" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="E_ext" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="E" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac7_upper_bound" id="reac7" name="reac7" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="E" stoichiometry="2.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="D" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ </listOfReactions>
+ </model>
+</sbml>
\ No newline at end of file
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/SbmlSetGprsFromFile/SbmlSetGprsFromFile.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/SbmlSetGprsFromFile/SbmlSetGprsFromFile.xml Wed May 17 13:26:37 2023 +0000
[
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tool id="met4j_SbmlSetGprsFromFile" name="SbmlSetGprsFromFile" version="1.3.0">
+  <description>Create a new SBML file from an original sbml file and a tabulated file containing reaction ids and Gene association written in a cobra way</description>
+  <xrefs>
+    <xref type="bio.tools">met4j</xref>
+  </xrefs>
+  <requirements>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.3.0</container>
+  </requirements>
+  <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh attributes.SbmlSetGprsFromFile#if str($colgpr) != 'nan':
+ -cgpr "$colgpr"
+#end if
+#if str($colid) != 'nan':
+ -ci "$colid"
+#end if
+ $p
+#if str($nSkip):
+ -n "$nSkip"
+#end if
+ -sbml "$sbml"
+#if str($tab) != 'None':
+ -tab "$tab"
+#end if
+#if str($c):
+ -c "$c"
+#end if
+ -out "$out"
+]]></command>
+  <inputs>
+    <param argument="-cgpr" label="[2] number of the column where are the gprs" name="colgpr" optional="true" type="integer" value="2"/>
+    <param argument="-ci" label="[1] number of the column where are the reaction ids" name="colid" optional="true" type="integer" value="1"/>
+    <param argument="-p" checked="false" falsevalue="" label="[deactivated] To match the objects in the sbml file, adds the prefix R_ to reactions" name="p" truevalue="-p" type="boolean" value="false"/>
+    <param argument="-n" label="[0] Number of lines to skip at the beginning of the tabulated file" name="nSkip" optional="true" type="text" value="0">
+      <sanitizer invalid_char="_">
+        <valid initial="string.printable"/>
+      </sanitizer>
+    </param>
+    <param argument="-sbml" format="sbml" label="Original sbml file" name="sbml" optional="false" type="data" value=""/>
+    <param argument="-tab" format="tsv" label="Tabulated file" name="tab" optional="true" type="data" value=""/>
+    <param argument="-c" label="[#] Comment String in the tabulated file. The lines beginning by this string won't be read" name="c" optional="true" type="text" value="#">
+      <sanitizer invalid_char="_">
+        <valid initial="string.printable"/>
+      </sanitizer>
+    </param>
+  </inputs>
+  <outputs>
+    <data format="sbml" name="out"/>
+  </outputs>
+  <tests>
+    <test>
+      <param name="sbml" value="toy_model.xml"/>
+      <param name="tab" value="gpr.tsv"/>
+      <output ftype="sbml" name="out">
+        <assert_contents>
+          <is_valid_xml/>
+          <has_line_matching expression=".*fbc:id=.G1.*" n="1"/>
+          <has_line_matching expression=".*fbc:id=.G2.*" n="1"/>
+          <has_line_matching expression=".*fbc:id=.G3.*" n="1"/>
+          <has_line_matching expression=".*fbc:id=.G4.*" n="1"/>
+          <has_line_matching expression=".*fbc:geneProductRef fbc:geneProduct=.G1.*" n="1"/>
+          <has_line_matching expression=".*fbc:geneProductRef fbc:geneProduct=.G2.*" n="1"/>
+          <has_line_matching expression=".*fbc:geneProductRef fbc:geneProduct=.G3.*" n="1"/>
+          <has_line_matching expression=".*fbc:geneProductRef fbc:geneProduct=.G4.*" n="1"/>
+          <has_line_matching expression=".*fbc:and.*" n="2"/>
+        </assert_contents>
+      </output>
+    </test>
+  </tests>
+  <help><![CDATA[Create a new SBML file from an original sbml file and a tabulated file containing reaction ids and Gene association written in a cobra way
+The ids must correspond between the tabulated file and the SBML file.
+If prefix R_ is present in the ids in the SBML file and not in the tabulated file, use the -p option.
+GPR must be written in a cobra way in the tabulated file as described in Schellenberger et al 2011 Nature Protocols 6(9):1290-307
+(The GPR will be written in the SBML file in two locations:
+- in the reaction notes <p>GENE_ASSOCIATION: ( XC_0401 ) OR ( XC_3282 )</p>
+- as fbc gene product association :<fbc:geneProductAssociation>
+ <fbc:or>
+  <fbc:geneProductRef fbc:geneProduct="XC_3282"/>
+  <fbc:geneProductRef fbc:geneProduct="XC_0401"/>
+ </fbc:or>
+</fbc:geneProductAssociation>
+]]></help>
+  <citations/>
+</tool>
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/SbmlSetGprsFromFile/test-data/gpr.tsv
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/SbmlSetGprsFromFile/test-data/gpr.tsv Wed May 17 13:26:37 2023 +0000
b
@@ -0,0 +1,2 @@
+reac1 G1 or G2
+reac2 G3 and G4
\ No newline at end of file
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/SbmlSetGprsFromFile/test-data/gprBad.tsv
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/SbmlSetGprsFromFile/test-data/gprBad.tsv Wed May 17 13:26:37 2023 +0000
b
@@ -0,0 +1,2 @@
+reac1 G1 or G2
+reac2 G3 an G4
\ No newline at end of file
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/SbmlSetGprsFromFile/test-data/toy_model.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/SbmlSetGprsFromFile/test-data/toy_model.xml Wed May 17 13:26:37 2023 +0000
[
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding='UTF-8' ?>
+<sbml fbc:required="false" groups:required="false" level="3" version="1"
+ xmlns="http://www.sbml.org/sbml/level3/version1/core"
+ xmlns:fbc="http://www.sbml.org/sbml/level3/version1/fbc/version2"
+ xmlns:groups="http://www.sbml.org/sbml/level3/version1/groups/version1">
+ <model fbc:strict="true" name="toy model">
+ <listOfUnitDefinitions>
+ <unitDefinition id="mmol_per_gDW_per_hr" name="mmol_per_gDW_per_hr">
+ <listOfUnits>
+ <unit exponent="-1" kind="gram" multiplier="1" scale="0"/>
+ <unit exponent="1" kind="mole" multiplier="1" scale="-3"/>
+ <unit exponent="-1" kind="second" multiplier="0.00027777" scale="0"/>
+ </listOfUnits>
+ </unitDefinition>
+ </listOfUnitDefinitions>
+ <listOfCompartments>
+ <compartment constant="false" id="c" name="Cytosol"/>
+ <compartment constant="false" id="e" name="Extracellular"/>
+ </listOfCompartments>
+ <listOfSpecies>
+ <species boundaryCondition="false" compartment="e" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="A_ext" name="A_ext">
+ <notes>
+ <body xmlns="http://www.w3.org/1999/xhtml">
+ <p>SMILES: C[C@@H](C(=O)O)NC</p>
+ </body>
+ </notes>
+ <annotation>
+ <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:bqbiol="http://biomodels.net/biology-qualifiers/">
+ <rdf:Description rdf:about="#A_ext">
+ <bqbiol:is>
+ <in:inchi xmlns:in="https://biomodels.net/inchi">InChI=1S/C2H6O/c1-2-3/h3H,2H2,1H3</in:inchi>
+ </bqbiol:is>
+ </rdf:Description>
+ </rdf:RDF>
+ </annotation>
+
+ </species>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="A" name="A"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="B" name="B"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="C" name="C"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="D" name="D"/>
+ <species boundaryCondition="false" compartment="e" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="D_ext" name="D_ext"/>
+ <species boundaryCondition="false" compartment="e" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="E_ext" name="E_ext"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="E" name="E"/>
+ </listOfSpecies>
+ <listOfParameters>
+ <parameter constant="true" id="cobra_default_lb" name="cobra default - lb" sboTerm="SBO:0000626" units="mmol_per_gDW_per_hr" value="-100000.0"/>
+ <parameter constant="true" id="cobra_default_ub" name="cobra default - ub" sboTerm="SBO:0000626" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="cobra_0_bound" name="cobra 0 - bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="0.0"/>
+ <parameter constant="true" id="reac1_upper_bound" name="reac1 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="10.0"/>
+ <parameter constant="true" id="reac6_upper_bound" name="reac6 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="3.0"/>
+ <parameter constant="true" id="reac2_upper_bound" name="reac2 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac3_upper_bound" name="reac3 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac4_upper_bound" name="reac4 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac5_upper_bound" name="reac5 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac7_upper_bound" name="reac7 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ </listOfParameters>
+ <listOfReactions>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac1_upper_bound" id="reac1" name="reac1" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="A_ext" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="A" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_default_lb" fbc:upperFluxBound="reac2_upper_bound" id="reac2" name="reac2" reversible="true">
+ <listOfReactants>
+ <speciesReference constant="true" species="A" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="B" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac3_upper_bound" id="reac3" name="reac3" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="A" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="C" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac4_upper_bound" id="reac4" name="reac4" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="B" stoichiometry="1.0"/>
+ <speciesReference constant="true" species="C" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="D" stoichiometry="1.5"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac5_upper_bound" id="reac5" name="reac5" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="D" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="D_ext" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac6_upper_bound" id="reac6" name="reac6" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="E_ext" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="E" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac7_upper_bound" id="reac7" name="reac7" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="E" stoichiometry="2.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="D" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ </listOfReactions>
+ </model>
+</sbml>
\ No newline at end of file
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/SbmlSetIdsFromFile/SbmlSetIdsFromFile.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/SbmlSetIdsFromFile/SbmlSetIdsFromFile.xml Wed May 17 13:26:37 2023 +0000
[
@@ -0,0 +1,129 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tool id="met4j_SbmlSetIdsFromFile" name="SbmlSetIdsFromFile" version="1.3.0">
+  <description>Set new ids to network objects from a tabulated file containing the old ids and the new ids</description>
+  <xrefs>
+    <xref type="bio.tools">met4j</xref>
+  </xrefs>
+  <requirements>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.3.0</container>
+  </requirements>
+  <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh attributes.SbmlSetIdsFromFile#if str($colname) != 'nan':
+ -cnew "$colname"
+#end if
+#if str($colid):
+ -ci "$colid"
+#end if
+ $p
+ $s
+#if str($o):
+ -o "$o"
+#end if
+#if str($nSkip):
+ -n "$nSkip"
+#end if
+ -sbml "$sbml"
+#if str($tab) != 'None':
+ -tab "$tab"
+#end if
+#if str($c):
+ -c "$c"
+#end if
+ -out "$out"
+]]></command>
+  <inputs>
+    <param argument="-cnew" label="[2] number of the column where are the new ids" name="colname" optional="true" type="integer" value="2"/>
+    <param argument="-ci" label="[1] number of the column where are the object ids" name="colid" optional="true" type="text" value="1">
+      <sanitizer invalid_char="_">
+        <valid initial="string.printable"/>
+      </sanitizer>
+    </param>
+    <param argument="-p" checked="false" falsevalue="" label="[deactivated] To match the objects in the sbml file, adds the prefix R_ to reactions and M_ to metabolites" name="p" truevalue="-p" type="boolean" value="false"/>
+    <param argument="-s" checked="false" falsevalue="" label="[deactivated] To match the objects in the sbml file, adds the suffix _comparmentID to metabolites" name="s" truevalue="-s" type="boolean" value="false"/>
+    <param argument="-o" label="[REACTION] Object type in the column id : REACTION;METABOLITE;GENE;PATHWAY" name="o" optional="true" type="text" value="REACTION">
+      <sanitizer invalid_char="_">
+        <valid initial="string.printable"/>
+      </sanitizer>
+    </param>
+    <param argument="-n" label="[0] Number of lines to skip at the beginning of the tabulated file" name="nSkip" optional="true" type="text" value="0">
+      <sanitizer invalid_char="_">
+        <valid initial="string.printable"/>
+      </sanitizer>
+    </param>
+    <param argument="-sbml" format="sbml" label="Original sbml file" name="sbml" optional="false" type="data" value=""/>
+    <param argument="-tab" format="tsv" label="Tabulated file" name="tab" optional="true" type="data" value=""/>
+    <param argument="-c" label="[#] Comment String in the tabulated file. The lines beginning by this string won't be read" name="c" optional="true" type="text" value="#">
+      <sanitizer invalid_char="_">
+        <valid initial="string.printable"/>
+      </sanitizer>
+    </param>
+  </inputs>
+  <outputs>
+    <data format="sbml" name="out"/>
+  </outputs>
+  <tests>
+    <test>
+      <param name="sbml" value="toy_model.xml"/>
+      <param name="tab" value="idMetabolites.tsv"/>
+      <param name="o" value="METABOLITE"/>
+      <output ftype="sbml" name="out">
+        <assert_contents>
+          <is_valid_xml/>
+          <has_line_matching expression=".*id=.metaboliteA.*" n="1"/>
+          <has_line_matching expression=".*id=.metaboliteB.*" n="1"/>
+        </assert_contents>
+      </output>
+    </test>
+    <test>
+      <param name="sbml" value="toy_model.xml"/>
+      <param name="tab" value="idReactions.tsv"/>
+      <output ftype="sbml" name="out">
+        <assert_contents>
+          <is_valid_xml/>
+          <has_line_matching expression=".*id=.reaction1.*" n="1"/>
+          <has_line_matching expression=".*id=.reaction2.*" n="1"/>
+        </assert_contents>
+      </output>
+    </test>
+    <test>
+      <param name="sbml" value="XF_network.sbml"/>
+      <param name="tab" value="idPathways.tsv"/>
+      <param name="o" value="PATHWAY"/>
+      <output ftype="sbml" name="out">
+        <assert_contents>
+          <is_valid_xml/>
+          <has_line_matching expression=".*groups:id=.CEB.*" n="1"/>
+          <has_line_matching expression=".*groups:id=.NSP.*" n="1"/>
+        </assert_contents>
+      </output>
+    </test>
+    <test>
+      <param name="sbml" value="XF_network.sbml"/>
+      <param name="tab" value="idGenes.tsv"/>
+      <param name="o" value="GENE"/>
+      <output ftype="sbml" name="out">
+        <assert_contents>
+          <is_valid_xml/>
+          <has_line_matching expression=".*fbc:id=.G1.*" n="1"/>
+          <has_line_matching expression=".*fbc:id=.G2.*" n="1"/>
+        </assert_contents>
+      </output>
+    </test>
+    <test>
+      <param name="sbml" value="XF_network.sbml"/>
+      <param name="tab" value="idCompartments.tsv"/>
+      <param name="o" value="COMPARTMENT"/>
+      <output ftype="sbml" name="out">
+        <assert_contents>
+          <is_valid_xml/>
+          <has_line_matching expression=".*id=.cytosol.*" n="1"/>
+          <has_line_matching expression=".*id=.extra.*" n="1"/>
+        </assert_contents>
+      </output>
+    </test>
+  </tests>
+  <help><![CDATA[Set new ids to network objects from a tabulated file containing the old ids and the new ids
+The ids must correspond between the tabulated file and the SBML file.
+If prefix or suffix is different in the SBML file, use the -p or the -s options.
+]]></help>
+  <citations/>
+</tool>
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/SbmlSetIdsFromFile/test-data/XF_network.sbml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/SbmlSetIdsFromFile/test-data/XF_network.sbml Wed May 17 13:26:37 2023 +0000
b
b'@@ -0,0 +1,47267 @@\n+<?xml version="1.0" encoding="UTF-8"?>\n+<sbml fbc:required="false" groups:required="false" level="3" version="2" xmlns="http://www.sbml.org/sbml/level3/version2/core" xmlns:fbc="http://www.sbml.org/sbml/level3/version1/fbc/version2" xmlns:groups="http://www.sbml.org/sbml/level3/version1/groups/version1">\n+  <model fbc:strict="true" id="Xfm1158" metaid="Xfm1158" name="Xfm1158">\n+    <fbc:listOfGeneProducts>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_007090" fbc:label="XFCFBP8418_007090" fbc:name="XFCFBP8418_007090" metaid="_8a7d7180-d79e-4dbb-86ed-f8d7eb60e698"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_005900" fbc:label="XFCFBP8418_005900" fbc:name="XFCFBP8418_005900" metaid="_867487dd-ff57-4e93-8de9-b5ecb805e0eb"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_011590" fbc:label="XFCFBP8418_011590" fbc:name="XFCFBP8418_011590" metaid="_44606760-936c-4585-b40c-650e953a5f73"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_014620" fbc:label="XFCFBP8418_014620" fbc:name="XFCFBP8418_014620" metaid="da273da9-0f84-4615-a464-2ab71416e8cc"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_015830" fbc:label="XFCFBP8418_015830" fbc:name="XFCFBP8418_015830" metaid="_3a9239a2-8e23-4834-99a8-a7dc15f6d906"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_014980" fbc:label="XFCFBP8418_014980" fbc:name="XFCFBP8418_014980" metaid="_7f26806b-e32e-4c5c-a78d-9e094c267bbf"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_020190" fbc:label="XFCFBP8418_020190" fbc:name="XFCFBP8418_020190" metaid="_31bbb514-1d52-4727-91cb-367af12e95ca"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_004940" fbc:label="XFCFBP8418_004940" fbc:name="XFCFBP8418_004940" metaid="a2f20753-c245-477e-8363-8f5e45c50f5d"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_021160" fbc:label="XFCFBP8418_021160" fbc:name="XFCFBP8418_021160" metaid="_844bdacc-d091-457d-9c4d-846cb9aab3c1"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_025760" fbc:label="XFCFBP8418_025760" fbc:name="XFCFBP8418_025760" metaid="fd8a601e-e56f-4263-9aa7-6ed9bf85f958"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_024670" fbc:label="XFCFBP8418_024670" fbc:name="XFCFBP8418_024670" metaid="_2bbe03ce-c814-417a-b9c0-e8a1f29f4106"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_004820" fbc:label="XFCFBP8418_004820" fbc:name="XFCFBP8418_004820" metaid="_41cb6d94-13d8-461e-a217-29a68e21cd2b"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_023580" fbc:label="XFCFBP8418_023580" fbc:name="XFCFBP8418_023580" metaid="_31ff72d7-4e30-4563-85aa-4afc58dd6bee"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_000460" fbc:label="XFCFBP8418_000460" fbc:name="XFCFBP8418_000460" metaid="d7ea14e6-cd6c-4404-b973-486ade662242"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_026730" fbc:label="XFCFBP8418_026730" fbc:name="XFCFBP8418_026730" metaid="e876348e-787e-4f2a-8904-e675c2589c17"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_025640" fbc:label="XFCFBP8418_025640" fbc:name="XFCFBP8418_025640" metaid="b5b93812-bd2e-4ca8-8328-e1d35e17ac3a"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_023100" fbc:label="XFCFBP8418_023100" fbc:name="XFCFBP8418_023100" metaid="f62e0096-7b12-4db3-a7b0-2e1cfa0302c6"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_027800" fbc:label="XFCFBP8418_027800" fbc:name="XFCFBP8418_027800" metaid="_8beb93ba-34a4-4330-86bf-2c47b1cb7f2e"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_004700" fbc:label="XFCFBP8418_004700" fbc:name="XFCFBP8418_004700" metaid="_2aceabe8-5294-42eb-9d3b-2506634c68d5"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_005910" fbc:label="XFCFBP8418_005910" fbc:name="XFCFBP8418_005910" metaid="a7b44241-024e-49c1-88af-1e1108cf09eb"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_013540" fbc:label="XFCFBP8418_013540" fbc:name="XFCFBP8418_013540" metaid="_83bdba7b-0eb0-4dfb-99ed-6e365240d870"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_011240" fbc:label="XFCFBP8418_011240" fbc:name="XFCFBP8418_011240" metaid="_568b9959-99b6-49bd-86d7-04e773d940da"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_012210" fbc:label="XFCFBP8418_01221'..b'     </annotation>\n+        <fbc:geneProductAssociation>\n+          <fbc:geneProductRef fbc:geneProduct="XFCFBP8418_010590"/>\n+        </fbc:geneProductAssociation>\n+        <listOfReactants>\n+          <speciesReference constant="true" species="M_cyst_L_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_h2o_c" stoichiometry="1"/>\n+        </listOfReactants>\n+        <listOfProducts>\n+          <speciesReference constant="true" species="M_2obut_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_cys_L_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_nh4_c" stoichiometry="1"/>\n+        </listOfProducts>\n+      </reaction>\n+      <reaction fbc:lowerFluxBound="LOWER_BOUND_99999_0" fbc:upperFluxBound="UPPER_BOUND_99999_0" id="R_FUCtpp" metaid="_34363cfc-fa7f-4df4-a073-49f5befcdf50" name="R_FUCtpp" reversible="true">\n+        <notes>\n+          <body xmlns="http://www.w3.org/1999/xhtml">\n+            <p>GENE_ASSOCIATION: XFCFBP8418_018650</p>\n+            <p>SUBSYSTEM: Transport__Inner_Membrane</p>\n+            <p>EC_NUMBER: No_Assignment</p>\n+          </body>\n+        </notes>\n+        <annotation>\n+          <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:bqbiol="http://biomodels.net/biology-qualifiers/">\n+            <rdf:Description rdf:about="#_34363cfc-fa7f-4df4-a073-49f5befcdf50">\n+              <bqbiol:is>\n+                <rdf:Bag>\n+                  <rdf:li rdf:resource="http://identifiers.org/ec-code/No_Assignment"/>\n+                </rdf:Bag>\n+              </bqbiol:is>\n+            </rdf:Description>\n+          </rdf:RDF>\n+        </annotation>\n+        <fbc:geneProductAssociation>\n+          <fbc:geneProductRef fbc:geneProduct="XFCFBP8418_018650"/>\n+        </fbc:geneProductAssociation>\n+        <listOfReactants>\n+          <speciesReference constant="true" species="M_h_p" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_fuc_L_p" stoichiometry="1"/>\n+        </listOfReactants>\n+        <listOfProducts>\n+          <speciesReference constant="true" species="M_fuc_L_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_h_c" stoichiometry="1"/>\n+        </listOfProducts>\n+      </reaction>\n+      <reaction fbc:lowerFluxBound="LOWER_BOUND_0_0" fbc:upperFluxBound="UPPER_BOUND_99999_0" id="R_FACOAE120" metaid="_2691931b-9cfe-40d9-95d9-13e4ed057413" name="R_FACOAE120" reversible="false">\n+        <notes>\n+          <body xmlns="http://www.w3.org/1999/xhtml">\n+            <p>GENE_ASSOCIATION: XFCFBP8418_025070</p>\n+            <p>SUBSYSTEM: Cell_Envelope_Biosynthesis</p>\n+            <p>EC_NUMBER: 3.1.2.20</p>\n+          </body>\n+        </notes>\n+        <annotation>\n+          <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:bqbiol="http://biomodels.net/biology-qualifiers/">\n+            <rdf:Description rdf:about="#_2691931b-9cfe-40d9-95d9-13e4ed057413">\n+              <bqbiol:is>\n+                <rdf:Bag>\n+                  <rdf:li rdf:resource="http://identifiers.org/ec-code/3.1.2.20"/>\n+                </rdf:Bag>\n+              </bqbiol:is>\n+            </rdf:Description>\n+          </rdf:RDF>\n+        </annotation>\n+        <fbc:geneProductAssociation>\n+          <fbc:geneProductRef fbc:geneProduct="XFCFBP8418_025070"/>\n+        </fbc:geneProductAssociation>\n+        <listOfReactants>\n+          <speciesReference constant="true" species="M_ddcacoa_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_h2o_c" stoichiometry="1"/>\n+        </listOfReactants>\n+        <listOfProducts>\n+          <speciesReference constant="true" species="M_ddca_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_h_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_coa_c" stoichiometry="1"/>\n+        </listOfProducts>\n+      </reaction>\n+    </listOfReactions>\n+  </model>\n+</sbml>\n'
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/SbmlSetIdsFromFile/test-data/idCompartments.tsv
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/SbmlSetIdsFromFile/test-data/idCompartments.tsv Wed May 17 13:26:37 2023 +0000
b
@@ -0,0 +1,2 @@
+c cytosol
+e extra
\ No newline at end of file
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/SbmlSetIdsFromFile/test-data/idGenes.tsv
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/SbmlSetIdsFromFile/test-data/idGenes.tsv Wed May 17 13:26:37 2023 +0000
b
@@ -0,0 +1,2 @@
+XFCFBP8418_007090 G1
+XFCFBP8418_005900 G2
\ No newline at end of file
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/SbmlSetIdsFromFile/test-data/idMetabolites.tsv
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/SbmlSetIdsFromFile/test-data/idMetabolites.tsv Wed May 17 13:26:37 2023 +0000
b
@@ -0,0 +1,2 @@
+A metaboliteA
+B metaboliteB
\ No newline at end of file
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/SbmlSetIdsFromFile/test-data/idPathways.tsv
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/SbmlSetIdsFromFile/test-data/idPathways.tsv Wed May 17 13:26:37 2023 +0000
b
@@ -0,0 +1,2 @@
+Nucleotide_Salvage_Pathway NSP
+Cell_Envelope_Biosynthesis CEB
\ No newline at end of file
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/SbmlSetIdsFromFile/test-data/idReactions.tsv
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/SbmlSetIdsFromFile/test-data/idReactions.tsv Wed May 17 13:26:37 2023 +0000
b
@@ -0,0 +1,2 @@
+reac1 reaction1
+reac2 reaction2
\ No newline at end of file
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/SbmlSetIdsFromFile/test-data/toy_model.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/SbmlSetIdsFromFile/test-data/toy_model.xml Wed May 17 13:26:37 2023 +0000
[
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding='UTF-8' ?>
+<sbml fbc:required="false" groups:required="false" level="3" version="1"
+ xmlns="http://www.sbml.org/sbml/level3/version1/core"
+ xmlns:fbc="http://www.sbml.org/sbml/level3/version1/fbc/version2"
+ xmlns:groups="http://www.sbml.org/sbml/level3/version1/groups/version1">
+ <model fbc:strict="true" name="toy model">
+ <listOfUnitDefinitions>
+ <unitDefinition id="mmol_per_gDW_per_hr" name="mmol_per_gDW_per_hr">
+ <listOfUnits>
+ <unit exponent="-1" kind="gram" multiplier="1" scale="0"/>
+ <unit exponent="1" kind="mole" multiplier="1" scale="-3"/>
+ <unit exponent="-1" kind="second" multiplier="0.00027777" scale="0"/>
+ </listOfUnits>
+ </unitDefinition>
+ </listOfUnitDefinitions>
+ <listOfCompartments>
+ <compartment constant="false" id="c" name="Cytosol"/>
+ <compartment constant="false" id="e" name="Extracellular"/>
+ </listOfCompartments>
+ <listOfSpecies>
+ <species boundaryCondition="false" compartment="e" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="A_ext" name="A_ext">
+ <notes>
+ <body xmlns="http://www.w3.org/1999/xhtml">
+ <p>SMILES: C[C@@H](C(=O)O)NC</p>
+ </body>
+ </notes>
+ <annotation>
+ <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:bqbiol="http://biomodels.net/biology-qualifiers/">
+ <rdf:Description rdf:about="#A_ext">
+ <bqbiol:is>
+ <in:inchi xmlns:in="https://biomodels.net/inchi">InChI=1S/C2H6O/c1-2-3/h3H,2H2,1H3</in:inchi>
+ </bqbiol:is>
+ </rdf:Description>
+ </rdf:RDF>
+ </annotation>
+
+ </species>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="A" name="A"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="B" name="B"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="C" name="C"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="D" name="D"/>
+ <species boundaryCondition="false" compartment="e" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="D_ext" name="D_ext"/>
+ <species boundaryCondition="false" compartment="e" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="E_ext" name="E_ext"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="E" name="E"/>
+ </listOfSpecies>
+ <listOfParameters>
+ <parameter constant="true" id="cobra_default_lb" name="cobra default - lb" sboTerm="SBO:0000626" units="mmol_per_gDW_per_hr" value="-100000.0"/>
+ <parameter constant="true" id="cobra_default_ub" name="cobra default - ub" sboTerm="SBO:0000626" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="cobra_0_bound" name="cobra 0 - bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="0.0"/>
+ <parameter constant="true" id="reac1_upper_bound" name="reac1 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="10.0"/>
+ <parameter constant="true" id="reac6_upper_bound" name="reac6 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="3.0"/>
+ <parameter constant="true" id="reac2_upper_bound" name="reac2 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac3_upper_bound" name="reac3 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac4_upper_bound" name="reac4 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac5_upper_bound" name="reac5 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac7_upper_bound" name="reac7 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ </listOfParameters>
+ <listOfReactions>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac1_upper_bound" id="reac1" name="reac1" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="A_ext" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="A" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_default_lb" fbc:upperFluxBound="reac2_upper_bound" id="reac2" name="reac2" reversible="true">
+ <listOfReactants>
+ <speciesReference constant="true" species="A" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="B" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac3_upper_bound" id="reac3" name="reac3" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="A" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="C" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac4_upper_bound" id="reac4" name="reac4" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="B" stoichiometry="1.0"/>
+ <speciesReference constant="true" species="C" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="D" stoichiometry="1.5"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac5_upper_bound" id="reac5" name="reac5" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="D" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="D_ext" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac6_upper_bound" id="reac6" name="reac6" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="E_ext" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="E" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac7_upper_bound" id="reac7" name="reac7" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="E" stoichiometry="2.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="D" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ </listOfReactions>
+ </model>
+</sbml>
\ No newline at end of file
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/SbmlSetNamesFromFile/SbmlSetNamesFromFile.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/SbmlSetNamesFromFile/SbmlSetNamesFromFile.xml Wed May 17 13:26:37 2023 +0000
[
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tool id="met4j_SbmlSetNamesFromFile" name="SbmlSetNamesFromFile" version="1.3.0">
+  <description>Set names to network objects from a tabulated file containing the object ids and the names</description>
+  <xrefs>
+    <xref type="bio.tools">met4j</xref>
+  </xrefs>
+  <requirements>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.3.0</container>
+  </requirements>
+  <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh attributes.SbmlSetNamesFromFile#if str($colname) != 'nan':
+ -cname "$colname"
+#end if
+#if str($colid):
+ -ci "$colid"
+#end if
+ $p
+ $s
+#if str($o):
+ -o "$o"
+#end if
+#if str($nSkip):
+ -n "$nSkip"
+#end if
+ -sbml "$sbml"
+#if str($tab) != 'None':
+ -tab "$tab"
+#end if
+#if str($c):
+ -c "$c"
+#end if
+ -out "$out"
+]]></command>
+  <inputs>
+    <param argument="-cname" label="[2] number of the column where are the names" name="colname" optional="true" type="integer" value="2"/>
+    <param argument="-ci" label="[1] number of the column where are the object ids" name="colid" optional="true" type="text" value="1">
+      <sanitizer invalid_char="_">
+        <valid initial="string.printable"/>
+      </sanitizer>
+    </param>
+    <param argument="-p" checked="false" falsevalue="" label="[deactivated] To match the objects in the sbml file, adds the prefix R_ to reactions and M_ to metabolites" name="p" truevalue="-p" type="boolean" value="false"/>
+    <param argument="-s" checked="false" falsevalue="" label="[deactivated] To match the objects in the sbml file, adds the suffix _comparmentID to metabolites" name="s" truevalue="-s" type="boolean" value="false"/>
+    <param argument="-o" label="[REACTION] Object type in the column id : REACTION;METABOLITE;GENE;PATHWAY" name="o" optional="true" type="text" value="REACTION">
+      <sanitizer invalid_char="_">
+        <valid initial="string.printable"/>
+      </sanitizer>
+    </param>
+    <param argument="-n" label="[0] Number of lines to skip at the beginning of the tabulated file" name="nSkip" optional="true" type="text" value="0">
+      <sanitizer invalid_char="_">
+        <valid initial="string.printable"/>
+      </sanitizer>
+    </param>
+    <param argument="-sbml" format="sbml" label="Original sbml file" name="sbml" optional="false" type="data" value=""/>
+    <param argument="-tab" format="tsv" label="Tabulated file" name="tab" optional="true" type="data" value=""/>
+    <param argument="-c" label="[#] Comment String in the tabulated file. The lines beginning by this string won't be read" name="c" optional="true" type="text" value="#">
+      <sanitizer invalid_char="_">
+        <valid initial="string.printable"/>
+      </sanitizer>
+    </param>
+  </inputs>
+  <outputs>
+    <data format="sbml" name="out"/>
+  </outputs>
+  <tests>
+    <test>
+      <param name="sbml" value="toy_model.xml"/>
+      <param name="tab" value="namesMetabolites.tsv"/>
+      <param name="o" value="METABOLITE"/>
+      <output ftype="sbml" name="out">
+      <assert_contents>
+        <is_valid_xml/>
+        <has_line_matching expression=".*metaboliteA.*" n="1"/>
+        <has_line_matching expression=".*metaboliteB.*" n="1"/>
+      </assert_contents>
+    </output>
+    </test>
+    <test>
+      <param name="sbml" value="toy_model.xml"/>
+      <param name="tab" value="namesReactions.tsv"/>
+      <output ftype="sbml" name="out">
+      <assert_contents>
+        <is_valid_xml/>
+        <has_line_matching expression=".*reaction1.*" n="1"/>
+        <has_line_matching expression=".*reaction2.*" n="1"/>
+      </assert_contents>
+    </output>
+    </test>
+    <test>
+      <param name="sbml" value="XF_network.sbml"/>
+      <param name="tab" value="namesPathways.tsv"/>
+      <param name="o" value="PATHWAY"/>
+      <output ftype="sbml" name="out">
+      <assert_contents>
+        <is_valid_xml/>
+        <has_line_matching expression=".*groups:name=.CEB.*" n="1"/>
+        <has_line_matching expression=".*groups:name=.NSP.*" n="1"/>
+      </assert_contents>
+    </output>
+    </test>
+    <test>
+      <param name="sbml" value="XF_network.sbml"/>
+      <param name="tab" value="namesGenes.tsv"/>
+      <param name="o" value="GENE"/>
+      <output ftype="sbml" name="out">
+      <assert_contents>
+        <is_valid_xml/>
+        <has_line_matching expression=".*fbc:name=.G1.*" n="1"/>
+        <has_line_matching expression=".*fbc:name=.G2.*" n="1"/>
+      </assert_contents>
+    </output>
+    </test>
+  </tests>
+  <help><![CDATA[Set names to network objects from a tabulated file containing the object ids and the names
+The ids must correspond between the tabulated file and the SBML file.
+If prefix or suffix is different in the SBML file, use the -p or the -s options.
+]]></help>
+  <citations/>
+</tool>
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/SbmlSetNamesFromFile/test-data/XF_network.sbml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/SbmlSetNamesFromFile/test-data/XF_network.sbml Wed May 17 13:26:37 2023 +0000
b
b'@@ -0,0 +1,47267 @@\n+<?xml version="1.0" encoding="UTF-8"?>\n+<sbml fbc:required="false" groups:required="false" level="3" version="2" xmlns="http://www.sbml.org/sbml/level3/version2/core" xmlns:fbc="http://www.sbml.org/sbml/level3/version1/fbc/version2" xmlns:groups="http://www.sbml.org/sbml/level3/version1/groups/version1">\n+  <model fbc:strict="true" id="Xfm1158" metaid="Xfm1158" name="Xfm1158">\n+    <fbc:listOfGeneProducts>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_007090" fbc:label="XFCFBP8418_007090" fbc:name="XFCFBP8418_007090" metaid="_8a7d7180-d79e-4dbb-86ed-f8d7eb60e698"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_005900" fbc:label="XFCFBP8418_005900" fbc:name="XFCFBP8418_005900" metaid="_867487dd-ff57-4e93-8de9-b5ecb805e0eb"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_011590" fbc:label="XFCFBP8418_011590" fbc:name="XFCFBP8418_011590" metaid="_44606760-936c-4585-b40c-650e953a5f73"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_014620" fbc:label="XFCFBP8418_014620" fbc:name="XFCFBP8418_014620" metaid="da273da9-0f84-4615-a464-2ab71416e8cc"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_015830" fbc:label="XFCFBP8418_015830" fbc:name="XFCFBP8418_015830" metaid="_3a9239a2-8e23-4834-99a8-a7dc15f6d906"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_014980" fbc:label="XFCFBP8418_014980" fbc:name="XFCFBP8418_014980" metaid="_7f26806b-e32e-4c5c-a78d-9e094c267bbf"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_020190" fbc:label="XFCFBP8418_020190" fbc:name="XFCFBP8418_020190" metaid="_31bbb514-1d52-4727-91cb-367af12e95ca"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_004940" fbc:label="XFCFBP8418_004940" fbc:name="XFCFBP8418_004940" metaid="a2f20753-c245-477e-8363-8f5e45c50f5d"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_021160" fbc:label="XFCFBP8418_021160" fbc:name="XFCFBP8418_021160" metaid="_844bdacc-d091-457d-9c4d-846cb9aab3c1"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_025760" fbc:label="XFCFBP8418_025760" fbc:name="XFCFBP8418_025760" metaid="fd8a601e-e56f-4263-9aa7-6ed9bf85f958"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_024670" fbc:label="XFCFBP8418_024670" fbc:name="XFCFBP8418_024670" metaid="_2bbe03ce-c814-417a-b9c0-e8a1f29f4106"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_004820" fbc:label="XFCFBP8418_004820" fbc:name="XFCFBP8418_004820" metaid="_41cb6d94-13d8-461e-a217-29a68e21cd2b"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_023580" fbc:label="XFCFBP8418_023580" fbc:name="XFCFBP8418_023580" metaid="_31ff72d7-4e30-4563-85aa-4afc58dd6bee"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_000460" fbc:label="XFCFBP8418_000460" fbc:name="XFCFBP8418_000460" metaid="d7ea14e6-cd6c-4404-b973-486ade662242"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_026730" fbc:label="XFCFBP8418_026730" fbc:name="XFCFBP8418_026730" metaid="e876348e-787e-4f2a-8904-e675c2589c17"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_025640" fbc:label="XFCFBP8418_025640" fbc:name="XFCFBP8418_025640" metaid="b5b93812-bd2e-4ca8-8328-e1d35e17ac3a"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_023100" fbc:label="XFCFBP8418_023100" fbc:name="XFCFBP8418_023100" metaid="f62e0096-7b12-4db3-a7b0-2e1cfa0302c6"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_027800" fbc:label="XFCFBP8418_027800" fbc:name="XFCFBP8418_027800" metaid="_8beb93ba-34a4-4330-86bf-2c47b1cb7f2e"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_004700" fbc:label="XFCFBP8418_004700" fbc:name="XFCFBP8418_004700" metaid="_2aceabe8-5294-42eb-9d3b-2506634c68d5"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_005910" fbc:label="XFCFBP8418_005910" fbc:name="XFCFBP8418_005910" metaid="a7b44241-024e-49c1-88af-1e1108cf09eb"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_013540" fbc:label="XFCFBP8418_013540" fbc:name="XFCFBP8418_013540" metaid="_83bdba7b-0eb0-4dfb-99ed-6e365240d870"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_011240" fbc:label="XFCFBP8418_011240" fbc:name="XFCFBP8418_011240" metaid="_568b9959-99b6-49bd-86d7-04e773d940da"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_012210" fbc:label="XFCFBP8418_01221'..b'     </annotation>\n+        <fbc:geneProductAssociation>\n+          <fbc:geneProductRef fbc:geneProduct="XFCFBP8418_010590"/>\n+        </fbc:geneProductAssociation>\n+        <listOfReactants>\n+          <speciesReference constant="true" species="M_cyst_L_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_h2o_c" stoichiometry="1"/>\n+        </listOfReactants>\n+        <listOfProducts>\n+          <speciesReference constant="true" species="M_2obut_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_cys_L_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_nh4_c" stoichiometry="1"/>\n+        </listOfProducts>\n+      </reaction>\n+      <reaction fbc:lowerFluxBound="LOWER_BOUND_99999_0" fbc:upperFluxBound="UPPER_BOUND_99999_0" id="R_FUCtpp" metaid="_34363cfc-fa7f-4df4-a073-49f5befcdf50" name="R_FUCtpp" reversible="true">\n+        <notes>\n+          <body xmlns="http://www.w3.org/1999/xhtml">\n+            <p>GENE_ASSOCIATION: XFCFBP8418_018650</p>\n+            <p>SUBSYSTEM: Transport__Inner_Membrane</p>\n+            <p>EC_NUMBER: No_Assignment</p>\n+          </body>\n+        </notes>\n+        <annotation>\n+          <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:bqbiol="http://biomodels.net/biology-qualifiers/">\n+            <rdf:Description rdf:about="#_34363cfc-fa7f-4df4-a073-49f5befcdf50">\n+              <bqbiol:is>\n+                <rdf:Bag>\n+                  <rdf:li rdf:resource="http://identifiers.org/ec-code/No_Assignment"/>\n+                </rdf:Bag>\n+              </bqbiol:is>\n+            </rdf:Description>\n+          </rdf:RDF>\n+        </annotation>\n+        <fbc:geneProductAssociation>\n+          <fbc:geneProductRef fbc:geneProduct="XFCFBP8418_018650"/>\n+        </fbc:geneProductAssociation>\n+        <listOfReactants>\n+          <speciesReference constant="true" species="M_h_p" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_fuc_L_p" stoichiometry="1"/>\n+        </listOfReactants>\n+        <listOfProducts>\n+          <speciesReference constant="true" species="M_fuc_L_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_h_c" stoichiometry="1"/>\n+        </listOfProducts>\n+      </reaction>\n+      <reaction fbc:lowerFluxBound="LOWER_BOUND_0_0" fbc:upperFluxBound="UPPER_BOUND_99999_0" id="R_FACOAE120" metaid="_2691931b-9cfe-40d9-95d9-13e4ed057413" name="R_FACOAE120" reversible="false">\n+        <notes>\n+          <body xmlns="http://www.w3.org/1999/xhtml">\n+            <p>GENE_ASSOCIATION: XFCFBP8418_025070</p>\n+            <p>SUBSYSTEM: Cell_Envelope_Biosynthesis</p>\n+            <p>EC_NUMBER: 3.1.2.20</p>\n+          </body>\n+        </notes>\n+        <annotation>\n+          <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:bqbiol="http://biomodels.net/biology-qualifiers/">\n+            <rdf:Description rdf:about="#_2691931b-9cfe-40d9-95d9-13e4ed057413">\n+              <bqbiol:is>\n+                <rdf:Bag>\n+                  <rdf:li rdf:resource="http://identifiers.org/ec-code/3.1.2.20"/>\n+                </rdf:Bag>\n+              </bqbiol:is>\n+            </rdf:Description>\n+          </rdf:RDF>\n+        </annotation>\n+        <fbc:geneProductAssociation>\n+          <fbc:geneProductRef fbc:geneProduct="XFCFBP8418_025070"/>\n+        </fbc:geneProductAssociation>\n+        <listOfReactants>\n+          <speciesReference constant="true" species="M_ddcacoa_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_h2o_c" stoichiometry="1"/>\n+        </listOfReactants>\n+        <listOfProducts>\n+          <speciesReference constant="true" species="M_ddca_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_h_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_coa_c" stoichiometry="1"/>\n+        </listOfProducts>\n+      </reaction>\n+    </listOfReactions>\n+  </model>\n+</sbml>\n'
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/SbmlSetNamesFromFile/test-data/namesGenes.tsv
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/SbmlSetNamesFromFile/test-data/namesGenes.tsv Wed May 17 13:26:37 2023 +0000
b
@@ -0,0 +1,2 @@
+XFCFBP8418_007090 G1
+XFCFBP8418_005900 G2
\ No newline at end of file
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/SbmlSetNamesFromFile/test-data/namesMetabolites.tsv
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/SbmlSetNamesFromFile/test-data/namesMetabolites.tsv Wed May 17 13:26:37 2023 +0000
b
@@ -0,0 +1,2 @@
+A metaboliteA
+B metaboliteB
\ No newline at end of file
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/SbmlSetNamesFromFile/test-data/namesPathways.tsv
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/SbmlSetNamesFromFile/test-data/namesPathways.tsv Wed May 17 13:26:37 2023 +0000
b
@@ -0,0 +1,2 @@
+Nucleotide_Salvage_Pathway NSP
+Cell_Envelope_Biosynthesis CEB
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/SbmlSetNamesFromFile/test-data/namesReactions.tsv
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/SbmlSetNamesFromFile/test-data/namesReactions.tsv Wed May 17 13:26:37 2023 +0000
b
@@ -0,0 +1,2 @@
+reac1 reaction1
+reac2 reaction2
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/SbmlSetNamesFromFile/test-data/toy_model.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/SbmlSetNamesFromFile/test-data/toy_model.xml Wed May 17 13:26:37 2023 +0000
[
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding='UTF-8' ?>
+<sbml fbc:required="false" groups:required="false" level="3" version="1"
+ xmlns="http://www.sbml.org/sbml/level3/version1/core"
+ xmlns:fbc="http://www.sbml.org/sbml/level3/version1/fbc/version2"
+ xmlns:groups="http://www.sbml.org/sbml/level3/version1/groups/version1">
+ <model fbc:strict="true" name="toy model">
+ <listOfUnitDefinitions>
+ <unitDefinition id="mmol_per_gDW_per_hr" name="mmol_per_gDW_per_hr">
+ <listOfUnits>
+ <unit exponent="-1" kind="gram" multiplier="1" scale="0"/>
+ <unit exponent="1" kind="mole" multiplier="1" scale="-3"/>
+ <unit exponent="-1" kind="second" multiplier="0.00027777" scale="0"/>
+ </listOfUnits>
+ </unitDefinition>
+ </listOfUnitDefinitions>
+ <listOfCompartments>
+ <compartment constant="false" id="c" name="Cytosol"/>
+ <compartment constant="false" id="e" name="Extracellular"/>
+ </listOfCompartments>
+ <listOfSpecies>
+ <species boundaryCondition="false" compartment="e" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="A_ext" name="A_ext">
+ <notes>
+ <body xmlns="http://www.w3.org/1999/xhtml">
+ <p>SMILES: C[C@@H](C(=O)O)NC</p>
+ </body>
+ </notes>
+ <annotation>
+ <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:bqbiol="http://biomodels.net/biology-qualifiers/">
+ <rdf:Description rdf:about="#A_ext">
+ <bqbiol:is>
+ <in:inchi xmlns:in="https://biomodels.net/inchi">InChI=1S/C2H6O/c1-2-3/h3H,2H2,1H3</in:inchi>
+ </bqbiol:is>
+ </rdf:Description>
+ </rdf:RDF>
+ </annotation>
+
+ </species>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="A" name="A"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="B" name="B"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="C" name="C"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="D" name="D"/>
+ <species boundaryCondition="false" compartment="e" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="D_ext" name="D_ext"/>
+ <species boundaryCondition="false" compartment="e" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="E_ext" name="E_ext"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="E" name="E"/>
+ </listOfSpecies>
+ <listOfParameters>
+ <parameter constant="true" id="cobra_default_lb" name="cobra default - lb" sboTerm="SBO:0000626" units="mmol_per_gDW_per_hr" value="-100000.0"/>
+ <parameter constant="true" id="cobra_default_ub" name="cobra default - ub" sboTerm="SBO:0000626" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="cobra_0_bound" name="cobra 0 - bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="0.0"/>
+ <parameter constant="true" id="reac1_upper_bound" name="reac1 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="10.0"/>
+ <parameter constant="true" id="reac6_upper_bound" name="reac6 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="3.0"/>
+ <parameter constant="true" id="reac2_upper_bound" name="reac2 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac3_upper_bound" name="reac3 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac4_upper_bound" name="reac4 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac5_upper_bound" name="reac5 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac7_upper_bound" name="reac7 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ </listOfParameters>
+ <listOfReactions>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac1_upper_bound" id="reac1" name="reac1" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="A_ext" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="A" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_default_lb" fbc:upperFluxBound="reac2_upper_bound" id="reac2" name="reac2" reversible="true">
+ <listOfReactants>
+ <speciesReference constant="true" species="A" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="B" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac3_upper_bound" id="reac3" name="reac3" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="A" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="C" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac4_upper_bound" id="reac4" name="reac4" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="B" stoichiometry="1.0"/>
+ <speciesReference constant="true" species="C" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="D" stoichiometry="1.5"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac5_upper_bound" id="reac5" name="reac5" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="D" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="D_ext" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac6_upper_bound" id="reac6" name="reac6" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="E_ext" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="E" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac7_upper_bound" id="reac7" name="reac7" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="E" stoichiometry="2.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="D" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ </listOfReactions>
+ </model>
+</sbml>
\ No newline at end of file
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/SbmlSetPathwaysFromFile/SbmlSetPathwaysFromFile.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/SbmlSetPathwaysFromFile/SbmlSetPathwaysFromFile.xml Wed May 17 13:26:37 2023 +0000
[
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tool id="met4j_SbmlSetPathwaysFromFile" name="SbmlSetPathwaysFromFile" version="1.3.0">
+  <description>Set pathway to reactions in a network from a tabulated file containing the reaction ids and the pathways</description>
+  <xrefs>
+    <xref type="bio.tools">met4j</xref>
+  </xrefs>
+  <requirements>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.3.0</container>
+  </requirements>
+  <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh attributes.SbmlSetPathwaysFromFile#if str($colp) != 'nan':
+ -cp "$colp"
+#end if
+#if str($sep):
+ -sep "$sep"
+#end if
+#if str($colid) != 'nan':
+ -ci "$colid"
+#end if
+ $p
+#if str($nSkip):
+ -n "$nSkip"
+#end if
+ -sbml "$sbml"
+#if str($tab) != 'None':
+ -tab "$tab"
+#end if
+#if str($c):
+ -c "$c"
+#end if
+ -out "$out"
+]]></command>
+  <inputs>
+    <param argument="-cp" label="[2] number of the column where are the pathways" name="colp" optional="true" type="integer" value="2"/>
+    <param argument="-sep" label="[|] Separator of pathways in the tabulated file" name="sep" optional="true" type="text" value="|">
+      <sanitizer invalid_char="_">
+        <valid initial="string.printable"/>
+      </sanitizer>
+    </param>
+    <param argument="-ci" label="[1] number of the column where are the reaction ids" name="colid" optional="true" type="integer" value="1"/>
+    <param argument="-p" checked="false" falsevalue="" label="[deactivated] To match the objects in the sbml file, adds the prefix R_ to reactions" name="p" truevalue="-p" type="boolean" value="false"/>
+    <param argument="-n" label="[0] Number of lines to skip at the beginning of the tabulated file" name="nSkip" optional="true" type="text" value="0">
+      <sanitizer invalid_char="_">
+        <valid initial="string.printable"/>
+      </sanitizer>
+    </param>
+    <param argument="-sbml" format="sbml" label="Original sbml file" name="sbml" optional="false" type="data" value=""/>
+    <param argument="-tab" format="tsv" label="Tabulated file" name="tab" optional="true" type="data" value=""/>
+    <param argument="-c" label="[#] Comment String in the tabulated file. The lines beginning by this string won't be read" name="c" optional="true" type="text" value="#">
+      <sanitizer invalid_char="_">
+        <valid initial="string.printable"/>
+      </sanitizer>
+    </param>
+  </inputs>
+  <outputs>
+    <data format="sbml" name="out"/>
+  </outputs>
+  <tests>
+    <test>
+      <param name="sbml" value="toy_model.xml"/>
+      <param name="tab" value="pathways.tsv"/>
+      <output ftype="sbml" name="out">
+      <assert_contents>
+        <is_valid_xml/>
+        <has_line_matching expression=".*groups:id=.*" n="3"/>
+        <has_line_matching expression=".*groups:id=.p1.*" n="1"/>
+        <has_line_matching expression=".*groups:id=.p2.*" n="1"/>
+        <has_line_matching expression=".*groups:id=.p3.*" n="1"/>
+      </assert_contents>
+    </output>
+    </test>
+    <test>
+      <param name="sbml" value="toy_model.xml"/>
+      <param name="tab" value="pathwaysOtherSep.tsv"/>
+      <param name="sep" value=" + "/>
+      <output ftype="sbml" name="out">
+      <assert_contents>
+        <is_valid_xml/>
+        <has_line_matching expression=".*groups:id=.*" n="3"/>
+        <has_line_matching expression=".*groups:id=.p1.*" n="1"/>
+        <has_line_matching expression=".*groups:id=.p2.*" n="1"/>
+        <has_line_matching expression=".*groups:id=.p3.*" n="1"/>
+      </assert_contents>
+    </output>
+    </test>
+  </tests>
+  <help><![CDATA[Set pathway to reactions in a network from a tabulated file containing the reaction ids and the pathways
+The ids must correspond between the tabulated file and the SBML file.
+If prefix R_ is present in the ids in the SBML file and not in the tabulated file, use the -p option.
+Pathways will be written in the SBML file in two ways:- as reaction note (e.g. <p>SUBSYSTEM: purine_biosynthesis</p>)- as SBML group:
+<groups:group groups:id="purine_biosynthesis" groups:kind="classification" groups:name="purine_biosynthesis">
+ <groups:listOfMembers>
+  <groups:member groups:idRef="R_GLUPRT"/>
+  <groups:member groups:idRef="R_RNDR1b"/>
+...
+]]></help>
+  <citations/>
+</tool>
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/SbmlSetPathwaysFromFile/test-data/pathways.tsv
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/SbmlSetPathwaysFromFile/test-data/pathways.tsv Wed May 17 13:26:37 2023 +0000
b
@@ -0,0 +1,3 @@
+reac1 P1
+reac2 P2|P3
+reac3 P1
\ No newline at end of file
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/SbmlSetPathwaysFromFile/test-data/pathwaysOtherSep.tsv
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/SbmlSetPathwaysFromFile/test-data/pathwaysOtherSep.tsv Wed May 17 13:26:37 2023 +0000
b
@@ -0,0 +1,3 @@
+reac1 P1
+reac2 P2 + P3
+reac3 P1
\ No newline at end of file
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/SbmlSetPathwaysFromFile/test-data/toy_model.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/SbmlSetPathwaysFromFile/test-data/toy_model.xml Wed May 17 13:26:37 2023 +0000
[
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding='UTF-8' ?>
+<sbml fbc:required="false" groups:required="false" level="3" version="1"
+ xmlns="http://www.sbml.org/sbml/level3/version1/core"
+ xmlns:fbc="http://www.sbml.org/sbml/level3/version1/fbc/version2"
+ xmlns:groups="http://www.sbml.org/sbml/level3/version1/groups/version1">
+ <model fbc:strict="true" name="toy model">
+ <listOfUnitDefinitions>
+ <unitDefinition id="mmol_per_gDW_per_hr" name="mmol_per_gDW_per_hr">
+ <listOfUnits>
+ <unit exponent="-1" kind="gram" multiplier="1" scale="0"/>
+ <unit exponent="1" kind="mole" multiplier="1" scale="-3"/>
+ <unit exponent="-1" kind="second" multiplier="0.00027777" scale="0"/>
+ </listOfUnits>
+ </unitDefinition>
+ </listOfUnitDefinitions>
+ <listOfCompartments>
+ <compartment constant="false" id="c" name="Cytosol"/>
+ <compartment constant="false" id="e" name="Extracellular"/>
+ </listOfCompartments>
+ <listOfSpecies>
+ <species boundaryCondition="false" compartment="e" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="A_ext" name="A_ext">
+ <notes>
+ <body xmlns="http://www.w3.org/1999/xhtml">
+ <p>SMILES: C[C@@H](C(=O)O)NC</p>
+ </body>
+ </notes>
+ <annotation>
+ <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:bqbiol="http://biomodels.net/biology-qualifiers/">
+ <rdf:Description rdf:about="#A_ext">
+ <bqbiol:is>
+ <in:inchi xmlns:in="https://biomodels.net/inchi">InChI=1S/C2H6O/c1-2-3/h3H,2H2,1H3</in:inchi>
+ </bqbiol:is>
+ </rdf:Description>
+ </rdf:RDF>
+ </annotation>
+
+ </species>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="A" name="A"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="B" name="B"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="C" name="C"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="D" name="D"/>
+ <species boundaryCondition="false" compartment="e" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="D_ext" name="D_ext"/>
+ <species boundaryCondition="false" compartment="e" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="E_ext" name="E_ext"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="E" name="E"/>
+ </listOfSpecies>
+ <listOfParameters>
+ <parameter constant="true" id="cobra_default_lb" name="cobra default - lb" sboTerm="SBO:0000626" units="mmol_per_gDW_per_hr" value="-100000.0"/>
+ <parameter constant="true" id="cobra_default_ub" name="cobra default - ub" sboTerm="SBO:0000626" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="cobra_0_bound" name="cobra 0 - bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="0.0"/>
+ <parameter constant="true" id="reac1_upper_bound" name="reac1 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="10.0"/>
+ <parameter constant="true" id="reac6_upper_bound" name="reac6 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="3.0"/>
+ <parameter constant="true" id="reac2_upper_bound" name="reac2 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac3_upper_bound" name="reac3 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac4_upper_bound" name="reac4 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac5_upper_bound" name="reac5 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac7_upper_bound" name="reac7 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ </listOfParameters>
+ <listOfReactions>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac1_upper_bound" id="reac1" name="reac1" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="A_ext" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="A" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_default_lb" fbc:upperFluxBound="reac2_upper_bound" id="reac2" name="reac2" reversible="true">
+ <listOfReactants>
+ <speciesReference constant="true" species="A" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="B" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac3_upper_bound" id="reac3" name="reac3" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="A" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="C" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac4_upper_bound" id="reac4" name="reac4" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="B" stoichiometry="1.0"/>
+ <speciesReference constant="true" species="C" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="D" stoichiometry="1.5"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac5_upper_bound" id="reac5" name="reac5" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="D" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="D_ext" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac6_upper_bound" id="reac6" name="reac6" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="E_ext" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="E" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac7_upper_bound" id="reac7" name="reac7" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="E" stoichiometry="2.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="D" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ </listOfReactions>
+ </model>
+</sbml>
\ No newline at end of file
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/SbmlSetRefsFromFile/SbmlSetRefsFromFile.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/SbmlSetRefsFromFile/SbmlSetRefsFromFile.xml Wed May 17 13:26:37 2023 +0000
[
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tool id="met4j_SbmlSetRefsFromFile" name="SbmlSetRefsFromFile" version="1.3.0">
+  <description>Add refs to network objects from a tabulated file containing the metabolite ids and the formulas</description>
+  <xrefs>
+    <xref type="bio.tools">met4j</xref>
+  </xrefs>
+  <requirements>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.3.0</container>
+  </requirements>
+  <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh attributes.SbmlSetRefsFromFile#if str($colRef) != 'nan':
+ -cr "$colRef"
+#end if
+ -ref "$ref"
+#if str($colid):
+ -ci "$colid"
+#end if
+ $p
+ $s
+#if str($o):
+ -o "$o"
+#end if
+#if str($nSkip):
+ -n "$nSkip"
+#end if
+ -sbml "$sbml"
+#if str($tab) != 'None':
+ -tab "$tab"
+#end if
+#if str($c):
+ -c "$c"
+#end if
+ -out "$out"
+]]></command>
+  <inputs>
+    <param argument="-cr" label="[2] number of the column where are the references" name="colRef" optional="true" type="integer" value="2"/>
+    <param argument="-ref" label="Name of the ref. Must exist in identifiers.org" name="ref" optional="false" type="text" value="">
+      <sanitizer invalid_char="_">
+        <valid initial="string.printable"/>
+      </sanitizer>
+    </param>
+    <param argument="-ci" label="[1] number of the column where are the object ids" name="colid" optional="true" type="text" value="1">
+      <sanitizer invalid_char="_">
+        <valid initial="string.printable"/>
+      </sanitizer>
+    </param>
+    <param argument="-p" checked="false" falsevalue="" label="[deactivated] To match the objects in the sbml file, adds the prefix R_ to reactions and M_ to metabolites" name="p" truevalue="-p" type="boolean" value="false"/>
+    <param argument="-s" checked="false" falsevalue="" label="[deactivated] To match the objects in the sbml file, adds the suffix _comparmentID to metabolites" name="s" truevalue="-s" type="boolean" value="false"/>
+    <param argument="-o" label="[REACTION] Object type in the column id : REACTION;METABOLITE;GENE;PATHWAY" name="o" optional="true" type="text" value="REACTION">
+      <sanitizer invalid_char="_">
+        <valid initial="string.printable"/>
+      </sanitizer>
+    </param>
+    <param argument="-n" label="[0] Number of lines to skip at the beginning of the tabulated file" name="nSkip" optional="true" type="text" value="0">
+      <sanitizer invalid_char="_">
+        <valid initial="string.printable"/>
+      </sanitizer>
+    </param>
+    <param argument="-sbml" format="sbml" label="Original sbml file" name="sbml" optional="false" type="data" value=""/>
+    <param argument="-tab" format="tsv" label="Tabulated file" name="tab" optional="true" type="data" value=""/>
+    <param argument="-c" label="[#] Comment String in the tabulated file. The lines beginning by this string won't be read" name="c" optional="true" type="text" value="#">
+      <sanitizer invalid_char="_">
+        <valid initial="string.printable"/>
+      </sanitizer>
+    </param>
+  </inputs>
+  <outputs>
+    <data format="sbml" name="out"/>
+  </outputs>
+  <tests>
+    <test>
+      <param name="sbml" value="toy_model.xml"/>
+      <param name="tab" value="refs.tsv"/>
+      <param name="ref" value="InChi"/>
+      <param name="o" value="METABOLITE"/>
+      <output ftype="sbml" name="out">
+        <assert_contents>
+          <is_valid_xml/>
+          <has_line_matching expression=".*C2H6O.*" n="3"/>
+          <has_line_matching expression=".*C6H8O6.*" n="1"/>
+        </assert_contents>
+      </output>
+    </test>
+  </tests>
+  <help><![CDATA[Add refs to network objects from a tabulated file containing the metabolite ids and the formulas
+Reference name given as parameter (-ref) must correspond to an existing id the registry of  identifiers.org (https://registry.identifiers.org/registry)
+The corresponding key:value pair will be written as metabolite or reaction annotation]]></help>
+  <citations/>
+</tool>
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/SbmlSetRefsFromFile/test-data/refs.tsv
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/SbmlSetRefsFromFile/test-data/refs.tsv Wed May 17 13:26:37 2023 +0000
b
@@ -0,0 +1,2 @@
+A InChI=1S/C2H6O/c1-2-3/h3H,2H2,1H3
+B InChI=1S/C6H8O6/c7-1-2(8)5-3(9)4(10)6(11)12-5/h2,5,7-8,10-11H,1H2/t2-,5+/m0/s1
\ No newline at end of file
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/SbmlSetRefsFromFile/test-data/toy_model.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/SbmlSetRefsFromFile/test-data/toy_model.xml Wed May 17 13:26:37 2023 +0000
[
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding='UTF-8' ?>
+<sbml fbc:required="false" groups:required="false" level="3" version="1"
+ xmlns="http://www.sbml.org/sbml/level3/version1/core"
+ xmlns:fbc="http://www.sbml.org/sbml/level3/version1/fbc/version2"
+ xmlns:groups="http://www.sbml.org/sbml/level3/version1/groups/version1">
+ <model fbc:strict="true" name="toy model">
+ <listOfUnitDefinitions>
+ <unitDefinition id="mmol_per_gDW_per_hr" name="mmol_per_gDW_per_hr">
+ <listOfUnits>
+ <unit exponent="-1" kind="gram" multiplier="1" scale="0"/>
+ <unit exponent="1" kind="mole" multiplier="1" scale="-3"/>
+ <unit exponent="-1" kind="second" multiplier="0.00027777" scale="0"/>
+ </listOfUnits>
+ </unitDefinition>
+ </listOfUnitDefinitions>
+ <listOfCompartments>
+ <compartment constant="false" id="c" name="Cytosol"/>
+ <compartment constant="false" id="e" name="Extracellular"/>
+ </listOfCompartments>
+ <listOfSpecies>
+ <species boundaryCondition="false" compartment="e" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="A_ext" name="A_ext">
+ <notes>
+ <body xmlns="http://www.w3.org/1999/xhtml">
+ <p>SMILES: C[C@@H](C(=O)O)NC</p>
+ </body>
+ </notes>
+ <annotation>
+ <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:bqbiol="http://biomodels.net/biology-qualifiers/">
+ <rdf:Description rdf:about="#A_ext">
+ <bqbiol:is>
+ <in:inchi xmlns:in="https://biomodels.net/inchi">InChI=1S/C2H6O/c1-2-3/h3H,2H2,1H3</in:inchi>
+ </bqbiol:is>
+ </rdf:Description>
+ </rdf:RDF>
+ </annotation>
+
+ </species>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="A" name="A"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="B" name="B"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="C" name="C"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="D" name="D"/>
+ <species boundaryCondition="false" compartment="e" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="D_ext" name="D_ext"/>
+ <species boundaryCondition="false" compartment="e" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="E_ext" name="E_ext"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="E" name="E"/>
+ </listOfSpecies>
+ <listOfParameters>
+ <parameter constant="true" id="cobra_default_lb" name="cobra default - lb" sboTerm="SBO:0000626" units="mmol_per_gDW_per_hr" value="-100000.0"/>
+ <parameter constant="true" id="cobra_default_ub" name="cobra default - ub" sboTerm="SBO:0000626" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="cobra_0_bound" name="cobra 0 - bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="0.0"/>
+ <parameter constant="true" id="reac1_upper_bound" name="reac1 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="10.0"/>
+ <parameter constant="true" id="reac6_upper_bound" name="reac6 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="3.0"/>
+ <parameter constant="true" id="reac2_upper_bound" name="reac2 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac3_upper_bound" name="reac3 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac4_upper_bound" name="reac4 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac5_upper_bound" name="reac5 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac7_upper_bound" name="reac7 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ </listOfParameters>
+ <listOfReactions>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac1_upper_bound" id="reac1" name="reac1" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="A_ext" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="A" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_default_lb" fbc:upperFluxBound="reac2_upper_bound" id="reac2" name="reac2" reversible="true">
+ <listOfReactants>
+ <speciesReference constant="true" species="A" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="B" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac3_upper_bound" id="reac3" name="reac3" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="A" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="C" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac4_upper_bound" id="reac4" name="reac4" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="B" stoichiometry="1.0"/>
+ <speciesReference constant="true" species="C" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="D" stoichiometry="1.5"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac5_upper_bound" id="reac5" name="reac5" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="D" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="D_ext" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac6_upper_bound" id="reac6" name="reac6" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="E_ext" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="E" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac7_upper_bound" id="reac7" name="reac7" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="E" stoichiometry="2.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="D" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ </listOfReactions>
+ </model>
+</sbml>
\ No newline at end of file
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/SbmlToMetaboliteTable/SbmlToMetaboliteTable.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/SbmlToMetaboliteTable/SbmlToMetaboliteTable.xml Wed May 17 13:26:37 2023 +0000
[
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tool id="met4j_SbmlToMetaboliteTable" name="SbmlToMetaboliteTable" version="1.3.0">
+  <description>Create a tabulated file with metabolite attributes from a SBML file</description>
+  <xrefs>
+    <xref type="bio.tools">met4j</xref>
+  </xrefs>
+  <requirements>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.3.0</container>
+  </requirements>
+  <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh attributes.SbmlToMetaboliteTable -s "$sbml"
+ -o "$outputFile"
+]]></command>
+  <inputs>
+    <param argument="-s" format="sbml" label="Sbml file" name="sbml" optional="false" type="data" value=""/>
+  </inputs>
+  <outputs>
+    <data format="tsv" name="outputFile"/>
+  </outputs>
+  <tests>
+    <test>
+      <param name="sbml" value="toy_model.xml"/>
+      <output ftype="tsv" name="outputFile">
+        <assert_contents>
+          <has_n_lines n="9"/>
+          <has_n_columns n="6"/>
+          <has_line_matching expression=".*1S/C2H6O/c1-2-3/h3H,2H2,1H3.*" n="1"/>
+          <has_line_matching expression=".*C.*NC.*" n="1"/>
+        </assert_contents>
+      </output>
+    </test>
+  </tests>
+  <help><![CDATA[Create a tabulated file with metabolite attributes from a SBML file]]></help>
+  <citations/>
+</tool>
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/SbmlToMetaboliteTable/test-data/tests.tsv
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/SbmlToMetaboliteTable/test-data/tests.tsv Wed May 17 13:26:37 2023 +0000
[
@@ -0,0 +1,9 @@
+id name formula charge smiles inchi
+A A null 0 null null
+B B null 0 null null
+A_ext A_ext null 0 C[C@@H](C(=O)O)NC 1S/C2H6O/c1-2-3/h3H,2H2,1H3
+C C null 0 null null
+D D null 0 null null
+E E null 0 null null
+D_ext D_ext null 0 null null
+E_ext E_ext null 0 null null
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/SbmlToMetaboliteTable/test-data/toy_model.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/SbmlToMetaboliteTable/test-data/toy_model.xml Wed May 17 13:26:37 2023 +0000
[
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding='UTF-8' ?>
+<sbml fbc:required="false" groups:required="false" level="3" version="1"
+ xmlns="http://www.sbml.org/sbml/level3/version1/core"
+ xmlns:fbc="http://www.sbml.org/sbml/level3/version1/fbc/version2"
+ xmlns:groups="http://www.sbml.org/sbml/level3/version1/groups/version1">
+ <model fbc:strict="true" name="toy model">
+ <listOfUnitDefinitions>
+ <unitDefinition id="mmol_per_gDW_per_hr" name="mmol_per_gDW_per_hr">
+ <listOfUnits>
+ <unit exponent="-1" kind="gram" multiplier="1" scale="0"/>
+ <unit exponent="1" kind="mole" multiplier="1" scale="-3"/>
+ <unit exponent="-1" kind="second" multiplier="0.00027777" scale="0"/>
+ </listOfUnits>
+ </unitDefinition>
+ </listOfUnitDefinitions>
+ <listOfCompartments>
+ <compartment constant="false" id="c" name="Cytosol"/>
+ <compartment constant="false" id="e" name="Extracellular"/>
+ </listOfCompartments>
+ <listOfSpecies>
+ <species boundaryCondition="false" compartment="e" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="A_ext" name="A_ext">
+ <notes>
+ <body xmlns="http://www.w3.org/1999/xhtml">
+ <p>SMILES: C[C@@H](C(=O)O)NC</p>
+ </body>
+ </notes>
+ <annotation>
+ <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:bqbiol="http://biomodels.net/biology-qualifiers/">
+ <rdf:Description rdf:about="#A_ext">
+ <bqbiol:is>
+ <in:inchi xmlns:in="https://biomodels.net/inchi">InChI=1S/C2H6O/c1-2-3/h3H,2H2,1H3</in:inchi>
+ </bqbiol:is>
+ </rdf:Description>
+ </rdf:RDF>
+ </annotation>
+
+ </species>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="A" name="A"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="B" name="B"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="C" name="C"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="D" name="D"/>
+ <species boundaryCondition="false" compartment="e" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="D_ext" name="D_ext"/>
+ <species boundaryCondition="false" compartment="e" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="E_ext" name="E_ext"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="E" name="E"/>
+ </listOfSpecies>
+ <listOfParameters>
+ <parameter constant="true" id="cobra_default_lb" name="cobra default - lb" sboTerm="SBO:0000626" units="mmol_per_gDW_per_hr" value="-100000.0"/>
+ <parameter constant="true" id="cobra_default_ub" name="cobra default - ub" sboTerm="SBO:0000626" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="cobra_0_bound" name="cobra 0 - bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="0.0"/>
+ <parameter constant="true" id="reac1_upper_bound" name="reac1 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="10.0"/>
+ <parameter constant="true" id="reac6_upper_bound" name="reac6 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="3.0"/>
+ <parameter constant="true" id="reac2_upper_bound" name="reac2 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac3_upper_bound" name="reac3 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac4_upper_bound" name="reac4 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac5_upper_bound" name="reac5 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac7_upper_bound" name="reac7 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ </listOfParameters>
+ <listOfReactions>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac1_upper_bound" id="reac1" name="reac1" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="A_ext" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="A" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_default_lb" fbc:upperFluxBound="reac2_upper_bound" id="reac2" name="reac2" reversible="true">
+ <listOfReactants>
+ <speciesReference constant="true" species="A" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="B" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac3_upper_bound" id="reac3" name="reac3" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="A" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="C" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac4_upper_bound" id="reac4" name="reac4" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="B" stoichiometry="1.0"/>
+ <speciesReference constant="true" species="C" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="D" stoichiometry="1.5"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac5_upper_bound" id="reac5" name="reac5" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="D" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="D_ext" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac6_upper_bound" id="reac6" name="reac6" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="E_ext" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="E" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac7_upper_bound" id="reac7" name="reac7" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="E" stoichiometry="2.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="D" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ </listOfReactions>
+ </model>
+</sbml>
\ No newline at end of file
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/ScopeNetwork/ScopeNetwork.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/ScopeNetwork/ScopeNetwork.xml Wed May 17 13:26:37 2023 +0000
[
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tool id="met4j_ScopeNetwork" name="ScopeNetwork" version="1.3.0">
+  <description>Perform a network expansion from a set of compound seeds to create a scope network</description>
+  <xrefs>
+    <xref type="bio.tools">met4j</xref>
+  </xrefs>
+  <requirements>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.3.0</container>
+  </requirements>
+  <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh networkAnalysis.ScopeNetwork -i "$sbmlFilePath"
+ -s "$seedsFilePath"
+#if str($sideCompoundFile) != 'None':
+ -sc "$sideCompoundFile"
+#end if
+ $includeSides
+#if str($reactionToIgnoreFile) != 'None':
+ -ir "$reactionToIgnoreFile"
+#end if
+ $trace
+ $asTable
+ -o "$output"
+]]></command>
+  <inputs>
+    <param argument="-i" format="sbml" label="input SBML file: path to network used for computing scope, in sbml format." name="sbmlFilePath" optional="false" type="data" value=""/>
+    <param argument="-s" format="txt" label="input seeds file: tabulated file containing node of interest ids" name="seedsFilePath" optional="false" type="data" value=""/>
+    <param argument="-sc" format="txt" label="an optional file containing list of ubiquitous side compounds to be considered available by default but ignored during expansion" name="sideCompoundFile" optional="true" type="data" value=""/>
+    <param argument="-ssc" checked="false" falsevalue="" label="show side compounds in output network" name="includeSides" truevalue="-ssc" type="boolean" value="false"/>
+    <param argument="-ir" format="txt" label="an optional file containing list of reaction to ignore (forbid inclusion in scope" name="reactionToIgnoreFile" optional="true" type="data" value=""/>
+    <param argument="-t" checked="false" falsevalue="" label="trace inclusion step index for each node in output" name="trace" truevalue="-t" type="boolean" value="false"/>
+    <param argument="-tab" checked="false" falsevalue="" label="Export in tabulated file instead of .GML" name="asTable" truevalue="-tab" type="boolean" value="false"/>
+  </inputs>
+  <outputs>
+    <data format="gml" name="output"/>
+  </outputs>
+  <tests>
+    <test>
+      <param name="sbmlFilePath" value="toy_model.xml"/>
+      <param name="seedsFilePath" value="seeds.txt"/>
+      <param name="sideCompoundFile" value="sides.txt"/>
+      <output ftype="gml" name="output">
+        <assert_contents>
+          <has_line_matching expression=".*node.*" n="9"/>
+          <has_line_matching expression=".*edge.*" n="11"/>
+        </assert_contents>
+      </output>
+    </test>
+  </tests>
+  <help><![CDATA[Perform a network expansion from a set of compound seeds to create a scope network
+The scope of a set of compounds (seed) refer to the maximal metabolic network that can be extended from them,where the extension process consist of adding a reaction to the network if and only if all of its substrates are either a seed or a product of a previously added reaction
+For more information, see Handorf, Ebenhöh and Heinrich (2005). *Expanding metabolic networks: scopes of compounds, robustness, and evolution.* Journal of molecular evolution, 61(4), 498-512. (https://doi.org/10.1007/s00239-005-0027-1)]]></help>
+  <citations/>
+</tool>
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/ScopeNetwork/test-data/seeds.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/ScopeNetwork/test-data/seeds.txt Wed May 17 13:26:37 2023 +0000
b
@@ -0,0 +1,1 @@
+A
\ No newline at end of file
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/ScopeNetwork/test-data/toy_model.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/ScopeNetwork/test-data/toy_model.xml Wed May 17 13:26:37 2023 +0000
[
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding='UTF-8' ?>
+<sbml fbc:required="false" groups:required="false" level="3" version="1"
+ xmlns="http://www.sbml.org/sbml/level3/version1/core"
+ xmlns:fbc="http://www.sbml.org/sbml/level3/version1/fbc/version2"
+ xmlns:groups="http://www.sbml.org/sbml/level3/version1/groups/version1">
+ <model fbc:strict="true" name="toy model">
+ <listOfUnitDefinitions>
+ <unitDefinition id="mmol_per_gDW_per_hr" name="mmol_per_gDW_per_hr">
+ <listOfUnits>
+ <unit exponent="-1" kind="gram" multiplier="1" scale="0"/>
+ <unit exponent="1" kind="mole" multiplier="1" scale="-3"/>
+ <unit exponent="-1" kind="second" multiplier="0.00027777" scale="0"/>
+ </listOfUnits>
+ </unitDefinition>
+ </listOfUnitDefinitions>
+ <listOfCompartments>
+ <compartment constant="false" id="c" name="Cytosol"/>
+ <compartment constant="false" id="e" name="Extracellular"/>
+ </listOfCompartments>
+ <listOfSpecies>
+ <species boundaryCondition="false" compartment="e" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="A_ext" name="A_ext">
+ <notes>
+ <body xmlns="http://www.w3.org/1999/xhtml">
+ <p>SMILES: C[C@@H](C(=O)O)NC</p>
+ </body>
+ </notes>
+ <annotation>
+ <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:bqbiol="http://biomodels.net/biology-qualifiers/">
+ <rdf:Description rdf:about="#A_ext">
+ <bqbiol:is>
+ <in:inchi xmlns:in="https://biomodels.net/inchi">InChI=1S/C2H6O/c1-2-3/h3H,2H2,1H3</in:inchi>
+ </bqbiol:is>
+ </rdf:Description>
+ </rdf:RDF>
+ </annotation>
+
+ </species>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="A" name="A"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="B" name="B"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="C" name="C"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="D" name="D"/>
+ <species boundaryCondition="false" compartment="e" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="D_ext" name="D_ext"/>
+ <species boundaryCondition="false" compartment="e" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="E_ext" name="E_ext"/>
+ <species boundaryCondition="false" compartment="c" constant="false" fbc:charge="0" hasOnlySubstanceUnits="false" id="E" name="E"/>
+ </listOfSpecies>
+ <listOfParameters>
+ <parameter constant="true" id="cobra_default_lb" name="cobra default - lb" sboTerm="SBO:0000626" units="mmol_per_gDW_per_hr" value="-100000.0"/>
+ <parameter constant="true" id="cobra_default_ub" name="cobra default - ub" sboTerm="SBO:0000626" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="cobra_0_bound" name="cobra 0 - bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="0.0"/>
+ <parameter constant="true" id="reac1_upper_bound" name="reac1 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="10.0"/>
+ <parameter constant="true" id="reac6_upper_bound" name="reac6 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="3.0"/>
+ <parameter constant="true" id="reac2_upper_bound" name="reac2 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac3_upper_bound" name="reac3 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac4_upper_bound" name="reac4 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac5_upper_bound" name="reac5 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ <parameter constant="true" id="reac7_upper_bound" name="reac7 upper bound" sboTerm="SBO:0000625" units="mmol_per_gDW_per_hr" value="100000.0"/>
+ </listOfParameters>
+ <listOfReactions>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac1_upper_bound" id="reac1" name="reac1" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="A_ext" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="A" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_default_lb" fbc:upperFluxBound="reac2_upper_bound" id="reac2" name="reac2" reversible="true">
+ <listOfReactants>
+ <speciesReference constant="true" species="A" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="B" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac3_upper_bound" id="reac3" name="reac3" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="A" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="C" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac4_upper_bound" id="reac4" name="reac4" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="B" stoichiometry="1.0"/>
+ <speciesReference constant="true" species="C" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="D" stoichiometry="1.5"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac5_upper_bound" id="reac5" name="reac5" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="D" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="D_ext" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac6_upper_bound" id="reac6" name="reac6" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="E_ext" stoichiometry="1.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="E" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ <reaction fast="false" fbc:lowerFluxBound="cobra_0_bound" fbc:upperFluxBound="reac7_upper_bound" id="reac7" name="reac7" reversible="false">
+ <listOfReactants>
+ <speciesReference constant="true" species="E" stoichiometry="2.0"/>
+ </listOfReactants>
+ <listOfProducts>
+ <speciesReference constant="true" species="D" stoichiometry="1.0"/>
+ </listOfProducts>
+ </reaction>
+ </listOfReactions>
+ </model>
+</sbml>
\ No newline at end of file
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/SeedsAndTargets/SeedsAndTargets.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/SeedsAndTargets/SeedsAndTargets.xml Wed May 17 13:26:37 2023 +0000
[
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tool id="met4j_SeedsAndTargets" name="SeedsAndTargets" version="1.3.0">
+  <description>Identify exogenously acquired compounds, producible compounds exogenously available and/or dead ends metabolites from metabolic network topology</description>
+  <xrefs>
+    <xref type="bio.tools">met4j</xref>
+  </xrefs>
+  <requirements>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.3.0</container>
+  </requirements>
+  <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh networkAnalysis.SeedsAndTargets -i "$inputPath"
+#if str($inputSide) != 'None':
+ -sc "$inputSide"
+#end if
+#if str($comp):
+ -c "$comp"
+#end if
+ $source
+ $sink
+ $notsource
+ $notsink
+ $keepIsolated
+ $useBorensteinAlg
+ $useInternal
+ -o "$outputPath"
+]]></command>
+  <inputs>
+    <param argument="-i" format="sbml" label="input SBML file" name="inputPath" optional="false" type="data" value=""/>
+    <param argument="-sc" format="txt" label="input Side compound file" name="inputSide" optional="true" type="data" value=""/>
+    <param argument="-c" label="Selected compartment(s), as model identifiers, separated by &quot;+&quot; sign if more than one" name="comp" optional="true" type="text" value="">
+      <sanitizer invalid_char="_">
+        <valid initial="string.printable"/>
+      </sanitizer>
+    </param>
+    <param argument="-s" checked="false" falsevalue="" label="export seeds" name="source" truevalue="-s" type="boolean" value="false"/>
+    <param argument="-t" checked="false" falsevalue="" label="export targets" name="sink" truevalue="-t" type="boolean" value="false"/>
+    <param argument="-!s" checked="false" falsevalue="" label="export nodes that are not seed" name="notsource" truevalue="-!s" type="boolean" value="false"/>
+    <param argument="-!t" checked="false" falsevalue="" label="export nodes that are not targets" name="notsink" truevalue="-!t" type="boolean" value="false"/>
+    <param argument="-is" checked="false" falsevalue="" label="do not ignore isolated nodes, consider isolated both seed and target" name="keepIsolated" truevalue="-is" type="boolean" value="false"/>
+    <param argument="-B" checked="false" falsevalue="" label="use Borenstein Algorithm. Please cite Borenstein et al. 2008 Large-scale reconstruction and phylogenetic analysis of metabolic environments https://doi.org/10.1073/pnas.0806162105). ignore internal option" name="useBorensteinAlg" truevalue="-B" type="boolean" value="false"/>
+    <param argument="-in" checked="false" falsevalue="" label="if an external compartment is defined, adjust degree by considering internal counterpart" name="useInternal" truevalue="-in" type="boolean" value="false"/>
+  </inputs>
+  <outputs>
+    <data format="tsv" name="outputPath"/>
+  </outputs>
+  <tests>
+    <test>
+      <param name="inputPath" value="XF_network.sbml"/>
+      <param name="source" value="true"/>
+      <output ftype="tsv" name="outputPath">
+        <assert_contents>
+          <has_n_columns n="1"/>
+          <has_n_lines n="109"/>
+          <has_line_matching expression="M_\S+_\w" n="109"/>
+        </assert_contents>
+      </output>
+    </test>
+    <test>
+      <param name="inputPath" value="XF_network.sbml"/>
+      <param name="sink" value="true"/>
+      <param name="useInternal" value="true"/>
+      <param name="comp" value="e"/>
+      <output ftype="tsv" name="outputPath">
+        <assert_contents>
+          <has_n_columns n="1"/>
+          <has_n_lines n="5"/>
+          <has_line_matching expression="^M_\S+_\w" n="5"/>
+        </assert_contents>
+      </output>
+    </test>
+    <test>
+      <param name="inputPath" value="XF_network.sbml"/>
+      <param name="sink" value="true"/>
+      <param name="useBorensteinAlg" value="true"/>
+      <param name="comp" value="e"/>
+      <output ftype="tsv" name="outputPath">
+        <assert_contents>
+          <has_n_columns n="1"/>
+          <has_n_lines n="26"/>
+          <has_line_matching expression="^M_\S+_\w" n="26"/>
+        </assert_contents>
+      </output>
+    </test>
+  </tests>
+  <help><![CDATA[Identify exogenously acquired compounds, producible compounds exogenously available and/or dead ends metabolites from metabolic network topology. Metabolic seeds and targets are useful for identifying medium requirements and metabolic capability, and thus enable analysis of metabolic ties within communities of organisms.
+This application can use seed definition and SCC-based detection algorithm by Borenstein et al. or, alternatively, degree-based sink and source detection with compartment adjustment.
+The first method (see Borenstein et al. 2008 Large-scale reconstruction and phylogenetic analysis of metabolic environments https://doi.org/10.1073/pnas.0806162105) consider strongly connected components rather than individual nodes, thus, members of cycles can be considered as seed. A sink from an external compartment can however be connected to a non sink internal counterpart, thus highlighting what could end up in the external compartment rather than what must be exported.
+The second approach is neighborhood based and identify sources and sinks. Since "real" sinks and sources in intracellular compartment(s) may be involved in transport/exchange reactions reversible by default, thus not allowing extracellular source or sink, an option allows to take the degree (minus extracellular neighbors) of intracellular counterparts.]]></help>
+  <citations/>
+</tool>
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/SeedsAndTargets/test-data/XF_network.sbml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/SeedsAndTargets/test-data/XF_network.sbml Wed May 17 13:26:37 2023 +0000
b
b'@@ -0,0 +1,47267 @@\n+<?xml version="1.0" encoding="UTF-8"?>\n+<sbml fbc:required="false" groups:required="false" level="3" version="2" xmlns="http://www.sbml.org/sbml/level3/version2/core" xmlns:fbc="http://www.sbml.org/sbml/level3/version1/fbc/version2" xmlns:groups="http://www.sbml.org/sbml/level3/version1/groups/version1">\n+  <model fbc:strict="true" id="Xfm1158" metaid="Xfm1158" name="Xfm1158">\n+    <fbc:listOfGeneProducts>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_007090" fbc:label="XFCFBP8418_007090" fbc:name="XFCFBP8418_007090" metaid="_8a7d7180-d79e-4dbb-86ed-f8d7eb60e698"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_005900" fbc:label="XFCFBP8418_005900" fbc:name="XFCFBP8418_005900" metaid="_867487dd-ff57-4e93-8de9-b5ecb805e0eb"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_011590" fbc:label="XFCFBP8418_011590" fbc:name="XFCFBP8418_011590" metaid="_44606760-936c-4585-b40c-650e953a5f73"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_014620" fbc:label="XFCFBP8418_014620" fbc:name="XFCFBP8418_014620" metaid="da273da9-0f84-4615-a464-2ab71416e8cc"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_015830" fbc:label="XFCFBP8418_015830" fbc:name="XFCFBP8418_015830" metaid="_3a9239a2-8e23-4834-99a8-a7dc15f6d906"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_014980" fbc:label="XFCFBP8418_014980" fbc:name="XFCFBP8418_014980" metaid="_7f26806b-e32e-4c5c-a78d-9e094c267bbf"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_020190" fbc:label="XFCFBP8418_020190" fbc:name="XFCFBP8418_020190" metaid="_31bbb514-1d52-4727-91cb-367af12e95ca"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_004940" fbc:label="XFCFBP8418_004940" fbc:name="XFCFBP8418_004940" metaid="a2f20753-c245-477e-8363-8f5e45c50f5d"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_021160" fbc:label="XFCFBP8418_021160" fbc:name="XFCFBP8418_021160" metaid="_844bdacc-d091-457d-9c4d-846cb9aab3c1"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_025760" fbc:label="XFCFBP8418_025760" fbc:name="XFCFBP8418_025760" metaid="fd8a601e-e56f-4263-9aa7-6ed9bf85f958"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_024670" fbc:label="XFCFBP8418_024670" fbc:name="XFCFBP8418_024670" metaid="_2bbe03ce-c814-417a-b9c0-e8a1f29f4106"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_004820" fbc:label="XFCFBP8418_004820" fbc:name="XFCFBP8418_004820" metaid="_41cb6d94-13d8-461e-a217-29a68e21cd2b"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_023580" fbc:label="XFCFBP8418_023580" fbc:name="XFCFBP8418_023580" metaid="_31ff72d7-4e30-4563-85aa-4afc58dd6bee"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_000460" fbc:label="XFCFBP8418_000460" fbc:name="XFCFBP8418_000460" metaid="d7ea14e6-cd6c-4404-b973-486ade662242"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_026730" fbc:label="XFCFBP8418_026730" fbc:name="XFCFBP8418_026730" metaid="e876348e-787e-4f2a-8904-e675c2589c17"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_025640" fbc:label="XFCFBP8418_025640" fbc:name="XFCFBP8418_025640" metaid="b5b93812-bd2e-4ca8-8328-e1d35e17ac3a"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_023100" fbc:label="XFCFBP8418_023100" fbc:name="XFCFBP8418_023100" metaid="f62e0096-7b12-4db3-a7b0-2e1cfa0302c6"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_027800" fbc:label="XFCFBP8418_027800" fbc:name="XFCFBP8418_027800" metaid="_8beb93ba-34a4-4330-86bf-2c47b1cb7f2e"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_004700" fbc:label="XFCFBP8418_004700" fbc:name="XFCFBP8418_004700" metaid="_2aceabe8-5294-42eb-9d3b-2506634c68d5"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_005910" fbc:label="XFCFBP8418_005910" fbc:name="XFCFBP8418_005910" metaid="a7b44241-024e-49c1-88af-1e1108cf09eb"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_013540" fbc:label="XFCFBP8418_013540" fbc:name="XFCFBP8418_013540" metaid="_83bdba7b-0eb0-4dfb-99ed-6e365240d870"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_011240" fbc:label="XFCFBP8418_011240" fbc:name="XFCFBP8418_011240" metaid="_568b9959-99b6-49bd-86d7-04e773d940da"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_012210" fbc:label="XFCFBP8418_01221'..b'     </annotation>\n+        <fbc:geneProductAssociation>\n+          <fbc:geneProductRef fbc:geneProduct="XFCFBP8418_010590"/>\n+        </fbc:geneProductAssociation>\n+        <listOfReactants>\n+          <speciesReference constant="true" species="M_cyst_L_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_h2o_c" stoichiometry="1"/>\n+        </listOfReactants>\n+        <listOfProducts>\n+          <speciesReference constant="true" species="M_2obut_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_cys_L_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_nh4_c" stoichiometry="1"/>\n+        </listOfProducts>\n+      </reaction>\n+      <reaction fbc:lowerFluxBound="LOWER_BOUND_99999_0" fbc:upperFluxBound="UPPER_BOUND_99999_0" id="R_FUCtpp" metaid="_34363cfc-fa7f-4df4-a073-49f5befcdf50" name="R_FUCtpp" reversible="true">\n+        <notes>\n+          <body xmlns="http://www.w3.org/1999/xhtml">\n+            <p>GENE_ASSOCIATION: XFCFBP8418_018650</p>\n+            <p>SUBSYSTEM: Transport__Inner_Membrane</p>\n+            <p>EC_NUMBER: No_Assignment</p>\n+          </body>\n+        </notes>\n+        <annotation>\n+          <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:bqbiol="http://biomodels.net/biology-qualifiers/">\n+            <rdf:Description rdf:about="#_34363cfc-fa7f-4df4-a073-49f5befcdf50">\n+              <bqbiol:is>\n+                <rdf:Bag>\n+                  <rdf:li rdf:resource="http://identifiers.org/ec-code/No_Assignment"/>\n+                </rdf:Bag>\n+              </bqbiol:is>\n+            </rdf:Description>\n+          </rdf:RDF>\n+        </annotation>\n+        <fbc:geneProductAssociation>\n+          <fbc:geneProductRef fbc:geneProduct="XFCFBP8418_018650"/>\n+        </fbc:geneProductAssociation>\n+        <listOfReactants>\n+          <speciesReference constant="true" species="M_h_p" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_fuc_L_p" stoichiometry="1"/>\n+        </listOfReactants>\n+        <listOfProducts>\n+          <speciesReference constant="true" species="M_fuc_L_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_h_c" stoichiometry="1"/>\n+        </listOfProducts>\n+      </reaction>\n+      <reaction fbc:lowerFluxBound="LOWER_BOUND_0_0" fbc:upperFluxBound="UPPER_BOUND_99999_0" id="R_FACOAE120" metaid="_2691931b-9cfe-40d9-95d9-13e4ed057413" name="R_FACOAE120" reversible="false">\n+        <notes>\n+          <body xmlns="http://www.w3.org/1999/xhtml">\n+            <p>GENE_ASSOCIATION: XFCFBP8418_025070</p>\n+            <p>SUBSYSTEM: Cell_Envelope_Biosynthesis</p>\n+            <p>EC_NUMBER: 3.1.2.20</p>\n+          </body>\n+        </notes>\n+        <annotation>\n+          <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:bqbiol="http://biomodels.net/biology-qualifiers/">\n+            <rdf:Description rdf:about="#_2691931b-9cfe-40d9-95d9-13e4ed057413">\n+              <bqbiol:is>\n+                <rdf:Bag>\n+                  <rdf:li rdf:resource="http://identifiers.org/ec-code/3.1.2.20"/>\n+                </rdf:Bag>\n+              </bqbiol:is>\n+            </rdf:Description>\n+          </rdf:RDF>\n+        </annotation>\n+        <fbc:geneProductAssociation>\n+          <fbc:geneProductRef fbc:geneProduct="XFCFBP8418_025070"/>\n+        </fbc:geneProductAssociation>\n+        <listOfReactants>\n+          <speciesReference constant="true" species="M_ddcacoa_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_h2o_c" stoichiometry="1"/>\n+        </listOfReactants>\n+        <listOfProducts>\n+          <speciesReference constant="true" species="M_ddca_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_h_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_coa_c" stoichiometry="1"/>\n+        </listOfProducts>\n+      </reaction>\n+    </listOfReactions>\n+  </model>\n+</sbml>\n'
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/SideCompoundsScan/SideCompoundsScan.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/SideCompoundsScan/SideCompoundsScan.xml Wed May 17 13:26:37 2023 +0000
[
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tool id="met4j_SideCompoundsScan" name="SideCompoundsScan" version="1.3.0">
+  <description>Scan a network to identify side-compounds.</description>
+  <xrefs>
+    <xref type="bio.tools">met4j</xref>
+  </xrefs>
+  <requirements>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.3.0</container>
+  </requirements>
+  <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh networkAnalysis.SideCompoundsScan -i "$inputPath"
+ $sideOnly
+ $noReportValue
+#if str($degree):
+ -d "$degree"
+#end if
+#if str($degreePrecentile) != 'nan':
+ -dp "$degreePrecentile"
+#end if
+ $flagInorganic
+ $flagNoFormula
+#if str($parallelEdge) != 'nan':
+ -nc "$parallelEdge"
+#end if
+#if str($mergingStrat):
+ -m "$mergingStrat"
+#end if
+ -o "$outputPath"
+]]></command>
+  <inputs>
+    <param argument="-i" format="sbml" label="input SBML file" name="inputPath" optional="false" type="data" value=""/>
+    <param argument="-s" checked="false" falsevalue="" label="output compounds flagged as side-Compounds only" name="sideOnly" truevalue="-s" type="boolean" value="false"/>
+    <param argument="-id" checked="false" falsevalue="" label="do not report values in output, export ids list of compounds flagged as side-Compounds, allowing piping results" name="noReportValue" truevalue="-id" type="boolean" value="false"/>
+    <param argument="-d" label="flag as side compounds any compounds with degree above threshold" name="degree" optional="true" type="text" value="400">
+      <sanitizer invalid_char="_">
+        <valid initial="string.printable"/>
+      </sanitizer>
+    </param>
+    <param argument="-dp" label="flag as side compounds the top x% of compounds according to their degree" name="degreePrecentile" optional="true" type="float" value="NaN"/>
+    <param argument="-cc" checked="false" falsevalue="" label="flag as side compound any compounds with less than 2 carbons in formula" name="flagInorganic" truevalue="-cc" type="boolean" value="false"/>
+    <param argument="-uf" checked="false" falsevalue="" label="flag as side compound any compounds with no valid chemical formula" name="flagNoFormula" truevalue="-uf" type="boolean" value="false"/>
+    <param argument="-nc" label="flag as side compound any compound with a number of parallel edges shared with a neighbor above the given threshold" name="parallelEdge" optional="true" type="float" value="NaN"/>
+    <param argument="-m" label="Degree is shared between compounds in different compartments. Use names if consistent and unambiguous across compartments, or identifiers if compartment suffix is present (id in form &quot;xxx_y&quot; with xxx as base identifier and y as compartment label)." name="mergingStrat" optional="true" type="select" value="no">
+      <option selected="true" value="no">no</option>
+      <option value="by_name">by_name</option>
+      <option value="by_id">by_id</option>
+    </param>
+  </inputs>
+  <outputs>
+    <data format="tsv" name="outputPath"/>
+  </outputs>
+  <tests>
+    <test>
+      <param name="inputPath" value="XF_network.sbml"/>
+      <output ftype="tsv" name="outputPath">
+        <assert_contents>
+          <has_n_lines n="1108"/>
+          <has_n_columns n="4"/>
+        </assert_contents>
+      </output>
+    </test>
+    <test>
+      <param name="inputPath" value="XF_network.sbml"/>
+      <param name="noReportValue" value="true"/>
+      <output ftype="tsv" name="outputPath">
+        <assert_contents>
+          <has_n_lines n="6"/>
+          <has_n_columns n="1"/>
+        </assert_contents>
+      </output>
+    </test>
+  </tests>
+  <help><![CDATA[Scan a network to identify side-compounds.
+Side compounds are metabolites of small relevance for topological analysis. Their definition can be quite subjective and varies between sources.
+Side compounds tend to be ubiquitous and not specific to a particular biochemical or physiological process.Compounds usually considered as side compounds include water, atp or carbon dioxide. By being involved in many reactions and thus connected to many compounds, they tend to significantly lower the average shortest path distances beyond expected metabolic relatedness.
+This tool attempts to propose a list of side compounds according to specific criteria:  
+- *Degree*: Compounds with an uncommonly high number of neighbors can betray a lack of process specificity.  
+High degree compounds typically include water and most main cofactors (CoA, ATP, NADPH...) but can also include central compounds such as pyruvate or acetyl-CoA  
+- *Neighbor Coupling*: Similar to degree, this criteria assume that side compounds are involved in many reactions, but in pairs with other side compounds.
+Therefore, the transition from ATP to ADP will appear multiple time in the network, creating redundant 'parallel edges' between these two neighbors.
+Being tightly coupled to another compound through a high number of redundant edges, can point out cofactors while keeping converging pathways' products with high degree like pyruvate aside.  
+- *Carbon Count*: Metabolic "waste", or degradation end-product such as ammonia or carbon dioxide are usually considered as side compounds.
+Most of them are inorganic compound, another ill-defined concept, sometimes defined as compound lacking C-C or C-H bonds. Since chemical structure is rarely available in SBML model beyond chemical formula, we use a less restrictive criterion by flagging compound with one or no carbons. This cover most inorganic compounds, but include few compounds such as methane usually considered as organic.  - *Chemical Formula*: Metabolic network often contains 'artifacts' that serve modelling purpose (to define a composite objective function for example). Such entities can be considered as 'side entities'. Since they are not actual chemical compounds, they can be detected by their lack of valid chemical formula. However, this can also flag main compounds with erroneous or missing annotation.]]></help>
+  <citations/>
+</tool>
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/SideCompoundsScan/test-data/XF_network.sbml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/SideCompoundsScan/test-data/XF_network.sbml Wed May 17 13:26:37 2023 +0000
b
b'@@ -0,0 +1,47267 @@\n+<?xml version="1.0" encoding="UTF-8"?>\n+<sbml fbc:required="false" groups:required="false" level="3" version="2" xmlns="http://www.sbml.org/sbml/level3/version2/core" xmlns:fbc="http://www.sbml.org/sbml/level3/version1/fbc/version2" xmlns:groups="http://www.sbml.org/sbml/level3/version1/groups/version1">\n+  <model fbc:strict="true" id="Xfm1158" metaid="Xfm1158" name="Xfm1158">\n+    <fbc:listOfGeneProducts>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_007090" fbc:label="XFCFBP8418_007090" fbc:name="XFCFBP8418_007090" metaid="_8a7d7180-d79e-4dbb-86ed-f8d7eb60e698"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_005900" fbc:label="XFCFBP8418_005900" fbc:name="XFCFBP8418_005900" metaid="_867487dd-ff57-4e93-8de9-b5ecb805e0eb"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_011590" fbc:label="XFCFBP8418_011590" fbc:name="XFCFBP8418_011590" metaid="_44606760-936c-4585-b40c-650e953a5f73"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_014620" fbc:label="XFCFBP8418_014620" fbc:name="XFCFBP8418_014620" metaid="da273da9-0f84-4615-a464-2ab71416e8cc"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_015830" fbc:label="XFCFBP8418_015830" fbc:name="XFCFBP8418_015830" metaid="_3a9239a2-8e23-4834-99a8-a7dc15f6d906"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_014980" fbc:label="XFCFBP8418_014980" fbc:name="XFCFBP8418_014980" metaid="_7f26806b-e32e-4c5c-a78d-9e094c267bbf"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_020190" fbc:label="XFCFBP8418_020190" fbc:name="XFCFBP8418_020190" metaid="_31bbb514-1d52-4727-91cb-367af12e95ca"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_004940" fbc:label="XFCFBP8418_004940" fbc:name="XFCFBP8418_004940" metaid="a2f20753-c245-477e-8363-8f5e45c50f5d"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_021160" fbc:label="XFCFBP8418_021160" fbc:name="XFCFBP8418_021160" metaid="_844bdacc-d091-457d-9c4d-846cb9aab3c1"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_025760" fbc:label="XFCFBP8418_025760" fbc:name="XFCFBP8418_025760" metaid="fd8a601e-e56f-4263-9aa7-6ed9bf85f958"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_024670" fbc:label="XFCFBP8418_024670" fbc:name="XFCFBP8418_024670" metaid="_2bbe03ce-c814-417a-b9c0-e8a1f29f4106"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_004820" fbc:label="XFCFBP8418_004820" fbc:name="XFCFBP8418_004820" metaid="_41cb6d94-13d8-461e-a217-29a68e21cd2b"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_023580" fbc:label="XFCFBP8418_023580" fbc:name="XFCFBP8418_023580" metaid="_31ff72d7-4e30-4563-85aa-4afc58dd6bee"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_000460" fbc:label="XFCFBP8418_000460" fbc:name="XFCFBP8418_000460" metaid="d7ea14e6-cd6c-4404-b973-486ade662242"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_026730" fbc:label="XFCFBP8418_026730" fbc:name="XFCFBP8418_026730" metaid="e876348e-787e-4f2a-8904-e675c2589c17"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_025640" fbc:label="XFCFBP8418_025640" fbc:name="XFCFBP8418_025640" metaid="b5b93812-bd2e-4ca8-8328-e1d35e17ac3a"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_023100" fbc:label="XFCFBP8418_023100" fbc:name="XFCFBP8418_023100" metaid="f62e0096-7b12-4db3-a7b0-2e1cfa0302c6"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_027800" fbc:label="XFCFBP8418_027800" fbc:name="XFCFBP8418_027800" metaid="_8beb93ba-34a4-4330-86bf-2c47b1cb7f2e"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_004700" fbc:label="XFCFBP8418_004700" fbc:name="XFCFBP8418_004700" metaid="_2aceabe8-5294-42eb-9d3b-2506634c68d5"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_005910" fbc:label="XFCFBP8418_005910" fbc:name="XFCFBP8418_005910" metaid="a7b44241-024e-49c1-88af-1e1108cf09eb"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_013540" fbc:label="XFCFBP8418_013540" fbc:name="XFCFBP8418_013540" metaid="_83bdba7b-0eb0-4dfb-99ed-6e365240d870"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_011240" fbc:label="XFCFBP8418_011240" fbc:name="XFCFBP8418_011240" metaid="_568b9959-99b6-49bd-86d7-04e773d940da"/>\n+      <fbc:geneProduct fbc:id="XFCFBP8418_012210" fbc:label="XFCFBP8418_01221'..b'     </annotation>\n+        <fbc:geneProductAssociation>\n+          <fbc:geneProductRef fbc:geneProduct="XFCFBP8418_010590"/>\n+        </fbc:geneProductAssociation>\n+        <listOfReactants>\n+          <speciesReference constant="true" species="M_cyst_L_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_h2o_c" stoichiometry="1"/>\n+        </listOfReactants>\n+        <listOfProducts>\n+          <speciesReference constant="true" species="M_2obut_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_cys_L_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_nh4_c" stoichiometry="1"/>\n+        </listOfProducts>\n+      </reaction>\n+      <reaction fbc:lowerFluxBound="LOWER_BOUND_99999_0" fbc:upperFluxBound="UPPER_BOUND_99999_0" id="R_FUCtpp" metaid="_34363cfc-fa7f-4df4-a073-49f5befcdf50" name="R_FUCtpp" reversible="true">\n+        <notes>\n+          <body xmlns="http://www.w3.org/1999/xhtml">\n+            <p>GENE_ASSOCIATION: XFCFBP8418_018650</p>\n+            <p>SUBSYSTEM: Transport__Inner_Membrane</p>\n+            <p>EC_NUMBER: No_Assignment</p>\n+          </body>\n+        </notes>\n+        <annotation>\n+          <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:bqbiol="http://biomodels.net/biology-qualifiers/">\n+            <rdf:Description rdf:about="#_34363cfc-fa7f-4df4-a073-49f5befcdf50">\n+              <bqbiol:is>\n+                <rdf:Bag>\n+                  <rdf:li rdf:resource="http://identifiers.org/ec-code/No_Assignment"/>\n+                </rdf:Bag>\n+              </bqbiol:is>\n+            </rdf:Description>\n+          </rdf:RDF>\n+        </annotation>\n+        <fbc:geneProductAssociation>\n+          <fbc:geneProductRef fbc:geneProduct="XFCFBP8418_018650"/>\n+        </fbc:geneProductAssociation>\n+        <listOfReactants>\n+          <speciesReference constant="true" species="M_h_p" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_fuc_L_p" stoichiometry="1"/>\n+        </listOfReactants>\n+        <listOfProducts>\n+          <speciesReference constant="true" species="M_fuc_L_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_h_c" stoichiometry="1"/>\n+        </listOfProducts>\n+      </reaction>\n+      <reaction fbc:lowerFluxBound="LOWER_BOUND_0_0" fbc:upperFluxBound="UPPER_BOUND_99999_0" id="R_FACOAE120" metaid="_2691931b-9cfe-40d9-95d9-13e4ed057413" name="R_FACOAE120" reversible="false">\n+        <notes>\n+          <body xmlns="http://www.w3.org/1999/xhtml">\n+            <p>GENE_ASSOCIATION: XFCFBP8418_025070</p>\n+            <p>SUBSYSTEM: Cell_Envelope_Biosynthesis</p>\n+            <p>EC_NUMBER: 3.1.2.20</p>\n+          </body>\n+        </notes>\n+        <annotation>\n+          <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:bqbiol="http://biomodels.net/biology-qualifiers/">\n+            <rdf:Description rdf:about="#_2691931b-9cfe-40d9-95d9-13e4ed057413">\n+              <bqbiol:is>\n+                <rdf:Bag>\n+                  <rdf:li rdf:resource="http://identifiers.org/ec-code/3.1.2.20"/>\n+                </rdf:Bag>\n+              </bqbiol:is>\n+            </rdf:Description>\n+          </rdf:RDF>\n+        </annotation>\n+        <fbc:geneProductAssociation>\n+          <fbc:geneProductRef fbc:geneProduct="XFCFBP8418_025070"/>\n+        </fbc:geneProductAssociation>\n+        <listOfReactants>\n+          <speciesReference constant="true" species="M_ddcacoa_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_h2o_c" stoichiometry="1"/>\n+        </listOfReactants>\n+        <listOfProducts>\n+          <speciesReference constant="true" species="M_ddca_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_h_c" stoichiometry="1"/>\n+          <speciesReference constant="true" species="M_coa_c" stoichiometry="1"/>\n+        </listOfProducts>\n+      </reaction>\n+    </listOfReactions>\n+  </model>\n+</sbml>\n'
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/Tab2Sbml/Tab2Sbml.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/Tab2Sbml/Tab2Sbml.xml Wed May 17 13:26:37 2023 +0000
[
@@ -0,0 +1,140 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tool id="met4j_Tab2Sbml" name="Tab2Sbml" version="1.3.0">
+  <description>Create a Sbml File from a tabulated file that contains the reaction ids and the formulas</description>
+  <xrefs>
+    <xref type="bio.tools">met4j</xref>
+  </xrefs>
+  <requirements>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.3.0</container>
+  </requirements>
+  <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh convert.Tab2Sbml#if str($colid) != 'nan':
+ -ci "$colid"
+#end if
+#if str($colformula) != 'nan':
+ -cf "$colformula"
+#end if
+ $rp
+ $mp
+#if str($e):
+ -e "$e"
+#end if
+#if str($i):
+ -i "$i"
+#end if
+#if str($r):
+ -r "$r"
+#end if
+ -in "$in"
+#if str($id):
+ -id "$id"
+#end if
+ $createCompartment
+#if str($defaultCompartment):
+ -dcpt "$defaultCompartment"
+#end if
+#if str($nSkip) != 'nan':
+ -n "$nSkip"
+#end if
+ -sbml "$sbml"
+]]></command>
+  <inputs>
+    <param argument="-ci" label="[1] number of the column where are the reaction ids" name="colid" optional="true" type="integer" value="1"/>
+    <param argument="-cf" label="[2] number of the column where are the reaction formulas" name="colformula" optional="true" type="integer" value="2"/>
+    <param argument="-rp" checked="false" falsevalue="" label="[deactivated] format the reaction ids in a Palsson way (R_***)" name="rp" truevalue="-rp" type="boolean" value="false"/>
+    <param argument="-mp" checked="false" falsevalue="" label="[deactivated] format the metabolite ids in a Palsson way (M_***_c)" name="mp" truevalue="-mp" type="boolean" value="false"/>
+    <param argument="-e" label="[_b] flag to assign metabolite as external" name="e" optional="true" type="text" value="_b">
+      <sanitizer invalid_char="_">
+        <valid initial="string.printable"/>
+      </sanitizer>
+    </param>
+    <param argument="-i" label="[--&gt;] String for irreversible reaction" name="i" optional="true" type="text" value="--&gt;">
+      <sanitizer invalid_char="_">
+        <valid initial="string.printable"/>
+      </sanitizer>
+    </param>
+    <param argument="-r" label="[&lt;==&gt;] String for reversible reaction" name="r" optional="true" type="text" value="&lt;==&gt;">
+      <sanitizer invalid_char="_">
+        <valid initial="string.printable"/>
+      </sanitizer>
+    </param>
+    <param argument="-in" format="tsv" label="Tabulated file" name="in" optional="false" type="data" value=""/>
+    <param argument="-id" label="[NA] Model id written in the SBML file" name="id" optional="true" type="text" value="NA">
+      <sanitizer invalid_char="_">
+        <valid initial="string.printable"/>
+      </sanitizer>
+    </param>
+    <param argument="-cpt" checked="false" falsevalue="" label="[deactivated] Create compartment from metabolite suffixes. If this option is deactivated, only one compartment (the default compartment) will be created" name="createCompartment" truevalue="-cpt" type="boolean" value="false"/>
+    <param argument="-dcpt" label="[c] Default compartment" name="defaultCompartment" optional="true" type="text" value="c">
+      <sanitizer invalid_char="_">
+        <valid initial="string.printable"/>
+      </sanitizer>
+    </param>
+    <param argument="-n" label="[0] Number of lines to skip at the beginning of the tabulated file" name="nSkip" optional="true" type="integer" value="0"/>
+  </inputs>
+  <outputs>
+    <data format="sbml" name="sbml"/>
+  </outputs>
+  <tests>
+    <test>
+      <param name="in" value="toy_model.tsv"/>
+      <output ftype="sbml" name="sbml">
+        <assert_contents>
+          <is_valid_xml/>
+          <has_line_matching expression=".*reaction .*" n="7"/>
+          <has_line_matching expression=".*species .*" n="8"/>
+        </assert_contents>
+      </output>
+    </test>
+    <test>
+      <param name="in" value="toy_model_otherColumns.tsv"/>
+      <param name="colid" value="2"/>
+      <param name="colformula" value="3"/>
+      <output ftype="sbml" name="sbml">
+        <assert_contents>
+          <is_valid_xml/>
+          <has_line_matching expression=".*reaction .*" n="7"/>
+          <has_line_matching expression=".*species .*" n="8"/>
+        </assert_contents>
+      </output>
+    </test>
+    <test>
+      <param name="in" value="toy_model_otherSigns.tsv"/>
+      <param name="i" value="-&gt;"/>
+      <param name="r" value="="/>
+      <output ftype="sbml" name="sbml">
+        <assert_contents>
+          <is_valid_xml/>
+          <has_line_matching expression=".*reaction .*" n="7"/>
+          <has_line_matching expression=".*species .*" n="8"/>
+        </assert_contents>
+      </output>
+    </test>
+    <test>
+      <param name="in" value="toy_model.tsv"/>
+      <param name="rp" value="true"/>
+      <param name="mp" value="true"/>
+      <param name="e" value="_e"/>
+      <param name="createCompartment" value="true"/>
+      <output ftype="sbml" name="sbml">
+        <assert_contents>
+          <is_valid_xml/>
+          <has_line_matching expression=".*boundaryCondition=.true.*" n="3"/>
+          <has_line_matching expression=".*id=.M_A_ext_e.*" n="1"/>
+          <has_line_matching expression=".*id=.R_reac2.*" n="1"/>
+        </assert_contents>
+      </output>
+    </test>
+    <test>
+      <param name="in" value="toy_model.tsv"/>
+      <param name="id" value="myModel"/>
+      <output ftype="sbml" name="sbml">
+        <assert_contents>
+          <is_valid_xml/>
+          <has_line_matching expression=".*myModel.*" n="1"/>
+        </assert_contents>
+      </output>
+    </test>
+  </tests>
+  <help><![CDATA[Create a Sbml File from a tabulated file that contains the reaction ids and the formulas]]></help>
+  <citations/>
+</tool>
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/Tab2Sbml/test-data/toy_model.tsv
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/Tab2Sbml/test-data/toy_model.tsv Wed May 17 13:26:37 2023 +0000
[
@@ -0,0 +1,8 @@
+#Id FormulaIds FormulaNames EC pathways gpr lb ub
+reac1 A_ext[e] --> A[c] A_ext[e] --> A[c] NA 0.0 10.0
+reac2 A[c] <==> B[c] A[c] <==> B[c] NA -100000.0 100000.0
+reac3 A[c] --> C[c] A[c] --> C[c] NA 0.0 100000.0
+reac4 B[c] + C[c] --> 1.5 D[c] B[c] + C[c] --> 1.5 D[c] NA 0.0 100000.0
+reac5 D[c] --> D_ext[e] D[c] --> D_ext[e] NA 0.0 100000.0
+reac6 E_ext[e] --> E[c] E_ext[e] --> E[c] NA 0.0 3.0
+reac7 2.0 E[c] --> D[c] 2.0 E[c] --> D[c] NA 0.0 100000.0
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/Tab2Sbml/test-data/toy_model_otherColumns.tsv
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/Tab2Sbml/test-data/toy_model_otherColumns.tsv Wed May 17 13:26:37 2023 +0000
[
@@ -0,0 +1,8 @@
+#Id Name FormulaIds FormulaNames EC pathways gpr lb ub
+reac1 reac1 A_ext[e] --> A[c] A_ext[e] --> A[c] NA 0.0 10.0
+reac2 reac2 A[c] <==> B[c] A[c] <==> B[c] NA -100000.0 100000.0
+reac3 reac3 A[c] --> C[c] A[c] --> C[c] NA 0.0 100000.0
+reac4 reac4 B[c] + C[c] --> 1.5 D[c] B[c] + C[c] --> 1.5 D[c] NA 0.0 100000.0
+reac5 reac5 D[c] --> D_ext[e] D[c] --> D_ext[e] NA 0.0 100000.0
+reac6 reac6 E_ext[e] --> E[c] E_ext[e] --> E[c] NA 0.0 3.0
+reac7 reac7 2.0 E[c] --> D[c] 2.0 E[c] --> D[c] NA 0.0 100000.0
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d build/tools/Tab2Sbml/test-data/toy_model_otherSigns.tsv
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/Tab2Sbml/test-data/toy_model_otherSigns.tsv Wed May 17 13:26:37 2023 +0000
[
@@ -0,0 +1,8 @@
+#Id FormulaIds FormulaNames EC pathways gpr lb ub
+reac1 A_ext[e] -> A[c] A_ext[e] -> A[c] NA 0.0 10.0
+reac2 A[c] = B[c] A[c] = B[c] NA -100000.0 100000.0
+reac3 A[c] -> C[c] A[c] -> C[c] NA 0.0 100000.0
+reac4 B[c] + C[c] -> 1.5 D[c] B[c] + C[c] -> 1.5 D[c] NA 0.0 100000.0
+reac5 D[c] -> D_ext[e] D[c] -> D_ext[e] NA 0.0 100000.0
+reac6 E_ext[e] -> E[c] E_ext[e] -> E[c] NA 0.0 3.0
+reac7 2.0 E[c] -> D[c] 2.0 E[c] -> D[c] NA 0.0 100000.0
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d findToolsWithoutTests.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/findToolsWithoutTests.py Wed May 17 13:26:37 2023 +0000
[
@@ -0,0 +1,31 @@
+import os
+import xml.etree.ElementTree as ET
+
+def find_xml_files_without_tests(directory):
+    for filename in os.listdir(directory):
+        filepath = os.path.join(directory, filename)
+        if os.path.isdir(filepath):
+            # Récursivement, recherche dans les sous-répertoires
+            yield from find_xml_files_without_tests(filepath)
+        elif filename.endswith(".xml"):
+            # Traitement du fichier XML
+            tree = ET.parse(filepath)
+            root = tree.getroot()
+            tool_elements = root.findall(".//tool")
+            tests_elements = root.findall(".//tests")
+            if tool_elements and not tests_elements:
+                yield filepath
+            elif tests_elements:
+                # On vérifie qu'il n'y a rien à l'intérieur de <tests>
+                tests_children = list(tests_elements[0])
+                if len(tests_children) == 0:
+                    yield filepath
+
+if __name__ == "__main__":
+    import argparse
+    parser = argparse.ArgumentParser(description="Trouve les fichiers XML sans élément <tests>")
+    parser.add_argument("directory", metavar="DIRECTORY", type=str, help="Le répertoire à explorer")
+    args = parser.parse_args()
+
+    for filepath in find_xml_files_without_tests(args.directory):
+        print(filepath)
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d tests.html
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests.html Wed May 17 13:26:37 2023 +0000
[
b'@@ -0,0 +1,291 @@\n+<!DOCTYPE html>\n+<html lang="en">\n+  <head>\n+    <meta charset="utf-8">\n+    <meta http-equiv="X-UA-Compatible" content="IE=edge">\n+    <meta name="viewport" content="width=device-width, initial-scale=1">\n+    <title>Test Results (powered by Planemo)</title>\n+\n+    <!-- Bootstrap -->\n+    <style>/*!\n+ * Bootstrap v3.3.1 (http://getbootstrap.com)\n+ * Copyright 2011-2014 Twitter, Inc.\n+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n+ *//*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:before,:after{color:#000!important;text-shadow:none!important;background:transparent!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered th,.table-bordered td{border:1px solid #ddd!important}}@font-face{font-family:\'Glyphicons Halflings\';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format(\'embedded-opentype\'),url(../fonts/glyphicons-halflings-regular.woff) format(\'woff\'),url(../fonts/glyphicons-halflings-regular.ttf) format(\'truetype\'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format(\'svg\')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:\'Glyphi'..b"lN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIFRoZSBpbnB1dCBmaWxlIGxvb2tzIGdvb2QgYW5kIGNvbnRhaW5zIDcgcmVhY3Rpb25zCiAgICAgIDcgcmVhY3Rpb25zLCA4IG1ldGFib2xpdGVzIGFuZCAyIGNvbXBhcnRtZW50cyBjcmVhdGVkCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNTUwNTQwNTcnIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgUGFyc2luZyBCaW9uZXR3b3JrIF84YTE4OGI2NV8yYjYwXzRhODRfYmVkM19kMmJmNTRlNGYyNjgKICAgICAgR2VuZXJhdGluZyBQYXRod2F5cy4uLgogICAgICBHZW5lcmF0aW5nIEZsdXggQmFsYW5jZSBDb25zdHJhaW50cyBtb2R1bGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgQW5ub3RhdGlvbnMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBOb3Rlcy4uLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgY29saWQgfCBgICIxIiBgIHwKICAgICAgIHwgY29sZm9ybXVsYSB8IGAgIjIiIGAgfAogICAgICAgfCBycCB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgbXAgfCBgIHRydWUgYCB8CiAgICAgICB8IGUgfCBgICJfZSIgYCB8CiAgICAgICB8IGkgfCBgICItLT4iIGAgfAogICAgICAgfCByIHwgYCAiPD09PiIgYCB8CiAgICAgICB8IGlkIHwgYCBhYjU1ZTg2YjVjOTc2NDVkIGAgfAogICAgICAgfCBjcmVhdGVDb21wYXJ0bWVudCB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgZGVmYXVsdENvbXBhcnRtZW50IHwgYCAiYyIgYCB8CiAgICAgICB8IG5Ta2lwIHwgYCAiMCIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wczMyd3RiNDQvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInRhYnVsYXIiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1RhYjJTYm1sIChUZXN0ICM1KTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGNvbnZlcnQuVGFiMlNibWwgLWNpICIxIiAtY2YgIjIiICAgLWUgIl9iIiAtaSAiLS0+IiAtciAiPD09PiIgLWluICIvdG1wL3RtcHMzMnd0YjQ0L2ZpbGVzLzAvYy9kL2RhdGFzZXRfMGNkYjQ1ZGMtMTVlMy00YzZkLTgyYWMtY2M5NzJhOTA1NWJiLmRhdCIgLWlkICJteU1vZGVsIiAgLWRjcHQgImMiIC1uICIwIiAtc2JtbCAiL3RtcC90bXBzMzJ3dGI0NC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzE5MC9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0Xzg5YTIxOGY3LTIwNDYtNGViNC1iOGRlLWExOTNiN2JiOWYwOC5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgVGhlIGlucHV0IGZpbGUgbG9va3MgZ29vZCBhbmQgY29udGFpbnMgNyByZWFjdGlvbnMKICAgICAgNyByZWFjdGlvbnMsIDggbWV0YWJvbGl0ZXMgYW5kIDIgY29tcGFydG1lbnRzIGNyZWF0ZWQKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1NTA1NDA1NycgYXQgJ251bGwnIGluICdudWxsJwogICAgICBQYXJzaW5nIEJpb25ldHdvcmsgbXlNb2RlbAogICAgICBHZW5lcmF0aW5nIEZsdXggQmFsYW5jZSBDb25zdHJhaW50cyBtb2R1bGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgUGF0aHdheXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBOb3Rlcy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIEFubm90YXRpb25zLi4uCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBjb2xpZCB8IGAgIjEiIGAgfAogICAgICAgfCBjb2xmb3JtdWxhIHwgYCAiMiIgYCB8CiAgICAgICB8IHJwIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgbXAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBlIHwgYCAiX2IiIGAgfAogICAgICAgfCBpIHwgYCAiLS0+IiBgIHwKICAgICAgIHwgciB8IGAgIjw9PT4iIGAgfAogICAgICAgfCBpZCB8IGAgNTJlMGY4NmU4NTViMjgxYjlkNTI5Mjc4Y2FkMWFlOTYgYCB8CiAgICAgICB8IGNyZWF0ZUNvbXBhcnRtZW50IHwgYCBmYWxzZSBgIHwKICAgICAgIHwgZGVmYXVsdENvbXBhcnRtZW50IHwgYCAiYyIgYCB8CiAgICAgICB8IG5Ta2lwIHwgYCAiMCIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wczMyd3RiNDQvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInRhYnVsYXIiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgo8L2RldGFpbHM+Cg=='));\n+    </script>\n+  </body>\n+</html>\n\\ No newline at end of file\n"
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d tools/attributes/DecomposeSBML/DecomposeSBML.xml
--- a/tools/attributes/DecomposeSBML/DecomposeSBML.xml Thu Jan 12 13:45:13 2023 +0000
+++ b/tools/attributes/DecomposeSBML/DecomposeSBML.xml Wed May 17 13:26:37 2023 +0000
[
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<tool id="met4j_DecomposeSBML" name="DecomposeSBML" version="1.2.1">
+<tool id="met4j_DecomposeSBML" name="DecomposeSBML" version="MET4J_VERSION_TEST">
   <description>Parse SBML to render list of composing entities: metabolites, reactions, genes and others.</description>
   <xrefs>
     <xref type="bio.tools">met4j</xref>
   </xrefs>
   <requirements>
-    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.2.1</container>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:MET4J_VERSION_TEST</container>
   </requirements>
   <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh attributes.DecomposeSBML -i "$sbml"
  $printMetabolites
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d tools/attributes/ExtractPathways/ExtractPathways.xml
--- a/tools/attributes/ExtractPathways/ExtractPathways.xml Thu Jan 12 13:45:13 2023 +0000
+++ b/tools/attributes/ExtractPathways/ExtractPathways.xml Wed May 17 13:26:37 2023 +0000
[
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<tool id="met4j_ExtractPathways" name="ExtractPathways" version="1.2.1">
+<tool id="met4j_ExtractPathways" name="ExtractPathways" version="MET4J_VERSION_TEST">
   <description>Extract pathway(s) from GSMN</description>
   <xrefs>
     <xref type="bio.tools">met4j</xref>
   </xrefs>
   <requirements>
-    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.2.1</container>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:MET4J_VERSION_TEST</container>
   </requirements>
   <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh attributes.ExtractPathways -i "$inputPath"
  -p "$pathwayId"
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d tools/attributes/ExtractSbmlAnnot/ExtractSbmlAnnot.xml
--- a/tools/attributes/ExtractSbmlAnnot/ExtractSbmlAnnot.xml Thu Jan 12 13:45:13 2023 +0000
+++ b/tools/attributes/ExtractSbmlAnnot/ExtractSbmlAnnot.xml Wed May 17 13:26:37 2023 +0000
[
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<tool id="met4j_ExtractSbmlAnnot" name="ExtractSbmlAnnot" version="1.2.1">
+<tool id="met4j_ExtractSbmlAnnot" name="ExtractSbmlAnnot" version="MET4J_VERSION_TEST">
   <description>Extract databases' references from SBML annotations or notes.</description>
   <xrefs>
     <xref type="bio.tools">met4j</xref>
   </xrefs>
   <requirements>
-    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.2.1</container>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:MET4J_VERSION_TEST</container>
   </requirements>
   <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh attributes.ExtractSbmlAnnot -i "$inputPath"
  -export "$export"
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d tools/attributes/GetGenesFromReactions/GetGenesFromReactions.xml
--- a/tools/attributes/GetGenesFromReactions/GetGenesFromReactions.xml Thu Jan 12 13:45:13 2023 +0000
+++ b/tools/attributes/GetGenesFromReactions/GetGenesFromReactions.xml Wed May 17 13:26:37 2023 +0000
[
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<tool id="met4j_GetGenesFromReactions" name="GetGenesFromReactions" version="1.2.1">
+<tool id="met4j_GetGenesFromReactions" name="GetGenesFromReactions" version="MET4J_VERSION_TEST">
   <description>Get gene lists from a list of reactions and a GSMN.</description>
   <xrefs>
     <xref type="bio.tools">met4j</xref>
   </xrefs>
   <requirements>
-    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.2.1</container>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:MET4J_VERSION_TEST</container>
   </requirements>
   <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh attributes.GetGenesFromReactions -i "$sbml"
  -r "$reactionFile"
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d tools/attributes/GetReactantsFromReactions/GetReactantsFromReactions.xml
--- a/tools/attributes/GetReactantsFromReactions/GetReactantsFromReactions.xml Thu Jan 12 13:45:13 2023 +0000
+++ b/tools/attributes/GetReactantsFromReactions/GetReactantsFromReactions.xml Wed May 17 13:26:37 2023 +0000
[
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<tool id="met4j_GetReactantsFromReactions" name="GetReactantsFromReactions" version="1.2.1">
+<tool id="met4j_GetReactantsFromReactions" name="GetReactantsFromReactions" version="MET4J_VERSION_TEST">
   <description>Get reactants lists from a list of reactions and a GSMN.</description>
   <xrefs>
     <xref type="bio.tools">met4j</xref>
   </xrefs>
   <requirements>
-    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.2.1</container>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:MET4J_VERSION_TEST</container>
   </requirements>
   <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh attributes.GetReactantsFromReactions -i "$sbml"
  -r "$reactionFile"
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d tools/attributes/SbmlSetChargesFromFile/SbmlSetChargesFromFile.xml
--- a/tools/attributes/SbmlSetChargesFromFile/SbmlSetChargesFromFile.xml Thu Jan 12 13:45:13 2023 +0000
+++ b/tools/attributes/SbmlSetChargesFromFile/SbmlSetChargesFromFile.xml Wed May 17 13:26:37 2023 +0000
[
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<tool id="met4j_SbmlSetChargesFromFile" name="SbmlSetChargesFromFile" version="1.2.1">
+<tool id="met4j_SbmlSetChargesFromFile" name="SbmlSetChargesFromFile" version="MET4J_VERSION_TEST">
   <description>Set charge to network metabolites from a tabulated file containing the metabolite ids and the formulas</description>
   <xrefs>
     <xref type="bio.tools">met4j</xref>
   </xrefs>
   <requirements>
-    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.2.1</container>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:MET4J_VERSION_TEST</container>
   </requirements>
   <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh attributes.SbmlSetChargesFromFile#if str($colcharge) != 'nan':
  -cc "$colcharge"
@@ -50,64 +50,64 @@
   </outputs>
   <tests>
     <test>
-      <param name="sbml" value="toy_model.xml"/>
-      <param name="tab" value="charges.tsv"/>
-      <output ftype="sbml" name="out">
-      <assert_contents>
-        <is_valid_xml/>
-        <has_line_matching expression=".*fbc:charge=.2.*" n="1"/>
-        <has_line_matching expression=".*fbc:charge=.-3.*" n="1"/>
-      </assert_contents>
-    </output>
-    </test>
+ <param name="sbml" value="toy_model.xml"/>
+ <param name="tab" value="charges.tsv"/>
+ <output ftype="sbml" name="out">
+ <assert_contents>
+ <is_valid_xml/>
+ <has_line_matching expression=".*fbc:charge=.2.*" n="1"/>
+ <has_line_matching expression=".*fbc:charge=.-3.*" n="1"/>
+ </assert_contents>
+ </output>
+ </test>
     <test>
-      <param name="sbml" value="toy_model.xml"/>
-      <param name="tab" value="chargesWithComment.tsv"/>
-      <output ftype="sbml" name="out">
-      <assert_contents>
-        <is_valid_xml/>
-        <has_line_matching expression=".*fbc:charge=.2.*" n="0"/>
-        <has_line_matching expression=".*fbc:charge=.-3.*" n="1"/>
-      </assert_contents>
-    </output>
-    </test>
+ <param name="sbml" value="toy_model.xml"/>
+ <param name="tab" value="chargesWithComment.tsv"/>
+ <output ftype="sbml" name="out">
+ <assert_contents>
+ <is_valid_xml/>
+ <has_line_matching expression=".*fbc:charge=.2.*" n="1" negate="true"/>
+ <has_line_matching expression=".*fbc:charge=.-3.*" n="1"/>
+ </assert_contents>
+ </output>
+ </test>
     <test>
-      <param name="sbml" value="toy_model.xml"/>
-      <param name="tab" value="charges.tsv"/>
-      <param name="nSkip" value="1"/>
-      <output ftype="sbml" name="out">
-      <assert_contents>
-        <is_valid_xml/>
-        <has_line_matching expression=".*fbc:charge=.2.*" n="0"/>
-        <has_line_matching expression=".*fbc:charge=.-3.*" n="1"/>
-      </assert_contents>
-    </output>
-    </test>
+ <param name="sbml" value="toy_model.xml"/>
+ <param name="tab" value="charges.tsv"/>
+ <param name="nSkip" value="1"/>
+ <output ftype="sbml" name="out">
+ <assert_contents>
+ <is_valid_xml/>
+ <has_line_matching expression=".*fbc:charge=.2.*" n="1" negate="true"/>
+ <has_line_matching expression=".*fbc:charge=.-3.*" n="1"/>
+ </assert_contents>
+ </output>
+ </test>
     <test>
-      <param name="sbml" value="toy_model.xml"/>
-      <param name="tab" value="charges.tsv"/>
-      <param name="ci" value="2"/>
-      <param name="cc" value="3"/>
-      <output ftype="sbml" name="out">
-      <assert_contents>
-        <is_valid_xml/>
-        <has_line_matching expression=".*fbc:charge=.2.*" n="1"/>
-        <has_line_matching expression=".*fbc:charge=.-3.*" n="1"/>
-      </assert_contents>
-    </output>
-    </test>
+ <param name="sbml" value="toy_model.xml"/>
+ <param name="tab" value="charges.tsv"/>
+ <param name="ci" value="2"/>
+ <param name="cc" value="3"/>
+ <output ftype="sbml" name="out">
+ <assert_contents>
+ <is_valid_xml/>
+ <has_line_matching expression=".*fbc:charge=.2.*" n="1"/>
+ <has_line_matching expression=".*fbc:charge=.-3.*" n="1"/>
+ </assert_contents>
+ </output>
+ </test>
     <test>
-      <param name="sbml" value="XF_network.sbml"/>
-      <param name="tab" value="chargesXF.tsv"/>
-      <param name="p" value="true"/>
-      <param name="s" value="true"/>
-      <output ftype="sbml" name="out">
-      <assert_contents>
-        <is_valid_xml/>
-        <has_line_matching expression=".*fbc:charge=.-1000.*" n="3"/>
-      </assert_contents>
-    </output>
-    </test>
+ <param name="sbml" value="XF_network.sbml"/>
+ <param name="tab" value="chargesXF.tsv"/>
+ <param name="p" value="true"/>
+ <param name="s" value="true"/>
+ <output ftype="sbml" name="out">
+ <assert_contents>
+ <is_valid_xml/>
+ <has_line_matching expression=".*fbc:charge=.-1000.*" n="3"/>
+ </assert_contents>
+ </output>
+ </test>
   </tests>
   <help><![CDATA[Set charge to network metabolites from a tabulated file containing the metabolite ids and the formulas
 The charge must be a number. The ids must correspond between the tabulated file and the SBML file.
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d tools/attributes/SbmlSetEcsFromFile/SbmlSetEcsFromFile.xml
--- a/tools/attributes/SbmlSetEcsFromFile/SbmlSetEcsFromFile.xml Thu Jan 12 13:45:13 2023 +0000
+++ b/tools/attributes/SbmlSetEcsFromFile/SbmlSetEcsFromFile.xml Wed May 17 13:26:37 2023 +0000
[
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<tool id="met4j_SbmlSetEcsFromFile" name="SbmlSetEcsFromFile" version="1.2.1">
+<tool id="met4j_SbmlSetEcsFromFile" name="SbmlSetEcsFromFile" version="MET4J_VERSION_TEST">
   <description>Set EC numbers to reactions from a tabulated file containing the reaction ids and the EC</description>
   <xrefs>
     <xref type="bio.tools">met4j</xref>
   </xrefs>
   <requirements>
-    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.2.1</container>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:MET4J_VERSION_TEST</container>
   </requirements>
   <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh attributes.SbmlSetEcsFromFile#if str($colec) != 'nan':
  -cec "$colec"
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d tools/attributes/SbmlSetFormulasFromFile/SbmlSetFormulasFromFile.xml
--- a/tools/attributes/SbmlSetFormulasFromFile/SbmlSetFormulasFromFile.xml Thu Jan 12 13:45:13 2023 +0000
+++ b/tools/attributes/SbmlSetFormulasFromFile/SbmlSetFormulasFromFile.xml Wed May 17 13:26:37 2023 +0000
[
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<tool id="met4j_SbmlSetFormulasFromFile" name="SbmlSetFormulasFromFile" version="1.2.1">
+<tool id="met4j_SbmlSetFormulasFromFile" name="SbmlSetFormulasFromFile" version="MET4J_VERSION_TEST">
   <description>Set Formula to network metabolites from a tabulated file containing the metabolite ids and the formulas</description>
   <xrefs>
     <xref type="bio.tools">met4j</xref>
   </xrefs>
   <requirements>
-    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.2.1</container>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:MET4J_VERSION_TEST</container>
   </requirements>
   <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh attributes.SbmlSetFormulasFromFile#if str($colformula) != 'nan':
  -cf "$colformula"
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d tools/attributes/SbmlSetGprsFromFile/SbmlSetGprsFromFile.xml
--- a/tools/attributes/SbmlSetGprsFromFile/SbmlSetGprsFromFile.xml Thu Jan 12 13:45:13 2023 +0000
+++ b/tools/attributes/SbmlSetGprsFromFile/SbmlSetGprsFromFile.xml Wed May 17 13:26:37 2023 +0000
[
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<tool id="met4j_SbmlSetGprsFromFile" name="SbmlSetGprsFromFile" version="1.2.1">
+<tool id="met4j_SbmlSetGprsFromFile" name="SbmlSetGprsFromFile" version="MET4J_VERSION_TEST">
   <description>Create a new SBML file from an original sbml file and a tabulated file containing reaction ids and Gene association written in a cobra way</description>
   <xrefs>
     <xref type="bio.tools">met4j</xref>
   </xrefs>
   <requirements>
-    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.2.1</container>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:MET4J_VERSION_TEST</container>
   </requirements>
   <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh attributes.SbmlSetGprsFromFile#if str($colgpr) != 'nan':
  -cgpr "$colgpr"
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d tools/attributes/SbmlSetIdsFromFile/SbmlSetIdsFromFile.xml
--- a/tools/attributes/SbmlSetIdsFromFile/SbmlSetIdsFromFile.xml Thu Jan 12 13:45:13 2023 +0000
+++ b/tools/attributes/SbmlSetIdsFromFile/SbmlSetIdsFromFile.xml Wed May 17 13:26:37 2023 +0000
[
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<tool id="met4j_SbmlSetIdsFromFile" name="SbmlSetIdsFromFile" version="1.2.1">
+<tool id="met4j_SbmlSetIdsFromFile" name="SbmlSetIdsFromFile" version="MET4J_VERSION_TEST">
   <description>Set new ids to network objects from a tabulated file containing the old ids and the new ids</description>
   <xrefs>
     <xref type="bio.tools">met4j</xref>
   </xrefs>
   <requirements>
-    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.2.1</container>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:MET4J_VERSION_TEST</container>
   </requirements>
   <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh attributes.SbmlSetIdsFromFile#if str($colname) != 'nan':
  -cnew "$colname"
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d tools/attributes/SbmlSetNamesFromFile/SbmlSetNamesFromFile.xml
--- a/tools/attributes/SbmlSetNamesFromFile/SbmlSetNamesFromFile.xml Thu Jan 12 13:45:13 2023 +0000
+++ b/tools/attributes/SbmlSetNamesFromFile/SbmlSetNamesFromFile.xml Wed May 17 13:26:37 2023 +0000
[
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<tool id="met4j_SbmlSetNamesFromFile" name="SbmlSetNamesFromFile" version="1.2.1">
+<tool id="met4j_SbmlSetNamesFromFile" name="SbmlSetNamesFromFile" version="MET4J_VERSION_TEST">
   <description>Set names to network objects from a tabulated file containing the object ids and the names</description>
   <xrefs>
     <xref type="bio.tools">met4j</xref>
   </xrefs>
   <requirements>
-    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.2.1</container>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:MET4J_VERSION_TEST</container>
   </requirements>
   <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh attributes.SbmlSetNamesFromFile#if str($colname) != 'nan':
  -cname "$colname"
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d tools/attributes/SbmlSetPathwaysFromFile/SbmlSetPathwaysFromFile.xml
--- a/tools/attributes/SbmlSetPathwaysFromFile/SbmlSetPathwaysFromFile.xml Thu Jan 12 13:45:13 2023 +0000
+++ b/tools/attributes/SbmlSetPathwaysFromFile/SbmlSetPathwaysFromFile.xml Wed May 17 13:26:37 2023 +0000
[
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<tool id="met4j_SbmlSetPathwaysFromFile" name="SbmlSetPathwaysFromFile" version="1.2.1">
+<tool id="met4j_SbmlSetPathwaysFromFile" name="SbmlSetPathwaysFromFile" version="MET4J_VERSION_TEST">
   <description>Set pathway to reactions in a network from a tabulated file containing the reaction ids and the pathways</description>
   <xrefs>
     <xref type="bio.tools">met4j</xref>
   </xrefs>
   <requirements>
-    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.2.1</container>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:MET4J_VERSION_TEST</container>
   </requirements>
   <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh attributes.SbmlSetPathwaysFromFile#if str($colp) != 'nan':
  -cp "$colp"
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d tools/attributes/SbmlSetRefsFromFile/SbmlSetRefsFromFile.xml
--- a/tools/attributes/SbmlSetRefsFromFile/SbmlSetRefsFromFile.xml Thu Jan 12 13:45:13 2023 +0000
+++ b/tools/attributes/SbmlSetRefsFromFile/SbmlSetRefsFromFile.xml Wed May 17 13:26:37 2023 +0000
[
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<tool id="met4j_SbmlSetRefsFromFile" name="SbmlSetRefsFromFile" version="1.2.1">
+<tool id="met4j_SbmlSetRefsFromFile" name="SbmlSetRefsFromFile" version="MET4J_VERSION_TEST">
   <description>Add refs to network objects from a tabulated file containing the metabolite ids and the formulas</description>
   <xrefs>
     <xref type="bio.tools">met4j</xref>
   </xrefs>
   <requirements>
-    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.2.1</container>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:MET4J_VERSION_TEST</container>
   </requirements>
   <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh attributes.SbmlSetRefsFromFile#if str($colRef) != 'nan':
  -cr "$colRef"
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d tools/attributes/SbmlToMetaboliteTable/SbmlToMetaboliteTable.xml
--- a/tools/attributes/SbmlToMetaboliteTable/SbmlToMetaboliteTable.xml Thu Jan 12 13:45:13 2023 +0000
+++ b/tools/attributes/SbmlToMetaboliteTable/SbmlToMetaboliteTable.xml Wed May 17 13:26:37 2023 +0000
[
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<tool id="met4j_SbmlToMetaboliteTable" name="SbmlToMetaboliteTable" version="1.2.1">
+<tool id="met4j_SbmlToMetaboliteTable" name="SbmlToMetaboliteTable" version="MET4J_VERSION_TEST">
   <description>Create a tabulated file with metabolite attributes from a SBML file</description>
   <xrefs>
     <xref type="bio.tools">met4j</xref>
   </xrefs>
   <requirements>
-    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.2.1</container>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:MET4J_VERSION_TEST</container>
   </requirements>
   <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh attributes.SbmlToMetaboliteTable -s "$sbml"
  -o "$outputFile"
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d tools/bigg/GetModelProteome/GetModelProteome.xml
--- a/tools/bigg/GetModelProteome/GetModelProteome.xml Thu Jan 12 13:45:13 2023 +0000
+++ b/tools/bigg/GetModelProteome/GetModelProteome.xml Wed May 17 13:26:37 2023 +0000
[
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<tool id="met4j_GetModelProteome" name="GetModelProteome" version="1.2.1">
+<tool id="met4j_GetModelProteome" name="GetModelProteome" version="MET4J_VERSION_TEST">
   <description>Get proteome in fasta format of a model present in BIGG</description>
   <xrefs>
     <xref type="bio.tools">met4j</xref>
   </xrefs>
   <requirements>
-    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.2.1</container>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:MET4J_VERSION_TEST</container>
   </requirements>
   <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh bigg.GetModelProteome -m "$modelId"
  -o "$outputFile"
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d tools/convert/FbcToNotes/FbcToNotes.xml
--- a/tools/convert/FbcToNotes/FbcToNotes.xml Thu Jan 12 13:45:13 2023 +0000
+++ b/tools/convert/FbcToNotes/FbcToNotes.xml Wed May 17 13:26:37 2023 +0000
[
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<tool id="met4j_FbcToNotes" name="FbcToNotes" version="1.2.1">
+<tool id="met4j_FbcToNotes" name="FbcToNotes" version="MET4J_VERSION_TEST">
   <description>Convert FBC package annotations to sbml notes</description>
   <xrefs>
     <xref type="bio.tools">met4j</xref>
   </xrefs>
   <requirements>
-    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.2.1</container>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:MET4J_VERSION_TEST</container>
   </requirements>
   <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh convert.FbcToNotes -i "$inputPath"
  -o "$outputPath"
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d tools/convert/Kegg2Sbml/Kegg2Sbml.xml
--- a/tools/convert/Kegg2Sbml/Kegg2Sbml.xml Thu Jan 12 13:45:13 2023 +0000
+++ b/tools/convert/Kegg2Sbml/Kegg2Sbml.xml Wed May 17 13:26:37 2023 +0000
[
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<tool id="met4j_Kegg2Sbml" name="Kegg2Sbml" version="1.2.1">
+<tool id="met4j_Kegg2Sbml" name="Kegg2Sbml" version="MET4J_VERSION_TEST">
   <description>Build a SBML file from KEGG organism-specific pathways. Uses Kegg API.</description>
   <xrefs>
     <xref type="bio.tools">met4j</xref>
   </xrefs>
   <requirements>
-    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.2.1</container>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:MET4J_VERSION_TEST</container>
   </requirements>
   <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh convert.Kegg2Sbml#if str($org):
  -org "$org"
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d tools/convert/Sbml2Graph/Sbml2Graph.xml
--- a/tools/convert/Sbml2Graph/Sbml2Graph.xml Thu Jan 12 13:45:13 2023 +0000
+++ b/tools/convert/Sbml2Graph/Sbml2Graph.xml Wed May 17 13:26:37 2023 +0000
[
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<tool id="met4j_Sbml2Graph" name="Sbml2Graph" version="1.2.1">
+<tool id="met4j_Sbml2Graph" name="Sbml2Graph" version="MET4J_VERSION_TEST">
   <description>Create a graph representation of a SBML file content, and export it in graph file format.</description>
   <xrefs>
     <xref type="bio.tools">met4j</xref>
   </xrefs>
   <requirements>
-    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.2.1</container>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:MET4J_VERSION_TEST</container>
   </requirements>
   <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh convert.Sbml2Graph -i "$inputPath"
  $bipartite
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d tools/convert/Sbml2Tab/Sbml2Tab.xml
--- a/tools/convert/Sbml2Tab/Sbml2Tab.xml Thu Jan 12 13:45:13 2023 +0000
+++ b/tools/convert/Sbml2Tab/Sbml2Tab.xml Wed May 17 13:26:37 2023 +0000
[
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<tool id="met4j_Sbml2Tab" name="Sbml2Tab" version="1.2.1">
+<tool id="met4j_Sbml2Tab" name="Sbml2Tab" version="MET4J_VERSION_TEST">
   <description>Create a tabulated file from a SBML file</description>
   <xrefs>
     <xref type="bio.tools">met4j</xref>
   </xrefs>
   <requirements>
-    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.2.1</container>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:MET4J_VERSION_TEST</container>
   </requirements>
   <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh convert.Sbml2Tab#if str($i):
  -i "$i"
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d tools/convert/Tab2Sbml/Tab2Sbml.xml
--- a/tools/convert/Tab2Sbml/Tab2Sbml.xml Thu Jan 12 13:45:13 2023 +0000
+++ b/tools/convert/Tab2Sbml/Tab2Sbml.xml Wed May 17 13:26:37 2023 +0000
[
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<tool id="met4j_Tab2Sbml" name="Tab2Sbml" version="1.2.1">
+<tool id="met4j_Tab2Sbml" name="Tab2Sbml" version="MET4J_VERSION_TEST">
   <description>Create a Sbml File from a tabulated file that contains the reaction ids and the formulas</description>
   <xrefs>
     <xref type="bio.tools">met4j</xref>
   </xrefs>
   <requirements>
-    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.2.1</container>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:MET4J_VERSION_TEST</container>
   </requirements>
   <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh convert.Tab2Sbml#if str($colid) != 'nan':
  -ci "$colid"
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d tools/mapping/NameMatcher/NameMatcher.xml
--- a/tools/mapping/NameMatcher/NameMatcher.xml Thu Jan 12 13:45:13 2023 +0000
+++ b/tools/mapping/NameMatcher/NameMatcher.xml Wed May 17 13:26:37 2023 +0000
[
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<tool id="met4j_NameMatcher" name="NameMatcher" version="1.2.1">
+<tool id="met4j_NameMatcher" name="NameMatcher" version="MET4J_VERSION_TEST">
   <description>This tool runs edit-distance based fuzzy matching to perform near-similar name matching between a metabolic model and a list of chemical names in a dataset. A harmonization processing is performed on chemical names with substitutions of common patterns among synonyms, in order to create aliases on which classical fuzzy matching can be run efficiently.</description>
   <xrefs>
     <xref type="bio.tools">met4j</xref>
   </xrefs>
   <requirements>
-    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.2.1</container>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:MET4J_VERSION_TEST</container>
   </requirements>
   <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh mapping.NameMatcher#if str($n):
  -nMatch "$n"
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d tools/met4j.yml
--- a/tools/met4j.yml Thu Jan 12 13:45:13 2023 +0000
+++ b/tools/met4j.yml Wed May 17 13:26:37 2023 +0000
b
@@ -66,6 +66,9 @@
   - name: NameMatcher
     owner: metexplore
     tool_panel_section_id: met4j_mapping
+  - name: BipartiteDistanceMatrix
+    owner: metexplore
+    tool_panel_section_id: met4j_networkanalysis
   - name: CarbonSkeletonNet
     owner: metexplore
     tool_panel_section_id: met4j_networkanalysis
@@ -102,6 +105,9 @@
   - name: NetworkSummary
     owner: metexplore
     tool_panel_section_id: met4j_networkanalysis
+  - name: PathwayNet
+    owner: metexplore
+    tool_panel_section_id: met4j_networkanalysis
   - name: PrecursorNetwork
     owner: metexplore
     tool_panel_section_id: met4j_networkanalysis
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d tools/networkAnalysis/BipartiteDistanceMatrix/BipartiteDistanceMatrix.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/networkAnalysis/BipartiteDistanceMatrix/BipartiteDistanceMatrix.xml Wed May 17 13:26:37 2023 +0000
[
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tool id="met4j_BipartiteDistanceMatrix" name="BipartiteDistanceMatrix" version="MET4J_VERSION_TEST">
+  <description>Create a compound to reactions distance matrix.</description>
+  <xrefs>
+    <xref type="bio.tools">met4j</xref>
+  </xrefs>
+  <requirements>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:MET4J_VERSION_TEST</container>
+  </requirements>
+  <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh networkAnalysis.BipartiteDistanceMatrix -i "$inputPath"
+#if str($sideCompoundFile) != 'None':
+ -sc "$sideCompoundFile"
+#end if
+#if str($rExclude) != 'None':
+ -re "$rExclude"
+#end if
+#if str($metFile) != 'None':
+ -m "$metFile"
+#end if
+#if str($rxnFile) != 'None':
+ -r "$rxnFile"
+#end if
+#if str($weightFile) != 'None':
+ -w "$weightFile"
+#end if
+ $undirected
+ $full
+ -o "$outputPath"
+]]></command>
+  <inputs>
+    <param argument="-i" format="sbml" label="input SBML file" name="inputPath" 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="-re" format="txt" label="an optional file containing list of reactions to ignore" name="rExclude" optional="true" type="data" value=""/>
+    <param argument="-m" format="txt" label="an optional file containing list of compounds of interest." name="metFile" optional="true" type="data" value=""/>
+    <param argument="-r" format="txt" label="an optional file containing list of reactions of interest." name="rxnFile" optional="true" type="data" value=""/>
+    <param argument="-w" format="tsv" label="an optional file containing weights for compound pairs" name="weightFile" optional="true" type="data" value=""/>
+    <param argument="-u" checked="false" falsevalue="" label="Ignore reaction direction" name="undirected" truevalue="-u" type="boolean" value="false"/>
+    <param argument="-f" checked="false" falsevalue="" label="compute full pairwise matrix from both reactions and compounds lists" name="full" truevalue="-f" type="boolean" value="false"/>
+  </inputs>
+  <outputs>
+    <data format="csv" name="outputPath"/>
+  </outputs>
+  <tests/>
+  <help><![CDATA[Create a compound to reactions distance matrix.
+The distance between two nodes (metabolite or reaction) is computed as the length of the shortest path connecting the two in the bipartite graph, Bipartite graph are composed of two distinct sets of nodes and two nodes can be linked only if they are from distinct sets.
+Therefore a metabolite node can be linked to a reaction node if the metabolite is a substrate or product of the reaction.
+An optional custom edge weighting can be used, turning the distances into the sum of edge weights in the lightest path, rather than the length of the shortest path.Custom weighting can be provided in a file. In that case, edges without weight are ignored during path search.
+If no edge weighting is set, it is recommended to provide a list of side compounds to ignore during network traversal.]]></help>
+  <citations/>
+</tool>
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d tools/networkAnalysis/CarbonSkeletonNet/CarbonSkeletonNet.xml
--- a/tools/networkAnalysis/CarbonSkeletonNet/CarbonSkeletonNet.xml Thu Jan 12 13:45:13 2023 +0000
+++ b/tools/networkAnalysis/CarbonSkeletonNet/CarbonSkeletonNet.xml Wed May 17 13:26:37 2023 +0000
[
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<tool id="met4j_CarbonSkeletonNet" name="CarbonSkeletonNet" version="1.2.1">
+<tool id="met4j_CarbonSkeletonNet" name="CarbonSkeletonNet" version="MET4J_VERSION_TEST">
   <description>Create a carbon skeleton graph representation of a SBML file content, using GSAM atom-mapping file (see https://forgemia.inra.fr/metexplore/gsam)</description>
   <xrefs>
     <xref type="bio.tools">met4j</xref>
   </xrefs>
   <requirements>
-    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.2.1</container>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:MET4J_VERSION_TEST</container>
   </requirements>
   <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh networkAnalysis.CarbonSkeletonNet -s "$inputPath"
  -g "$inputAAM"
@@ -16,6 +16,7 @@
  $undirected
  $computeWeight
  $asMatrix
+ $main
  $fromIndexes
  -o "$outputPath"
 ]]></command>
@@ -29,6 +30,7 @@
     <param argument="-un" checked="false" falsevalue="" label="create as undirected" name="undirected" truevalue="-un" type="boolean" value="false"/>
     <param argument="-tp" checked="false" falsevalue="" label="set transition probability as weight" name="computeWeight" truevalue="-tp" type="boolean" value="false"/>
     <param argument="-am" checked="false" falsevalue="" label="export as matrix (implies simple graph conversion). Default export as GML file" name="asMatrix" truevalue="-am" type="boolean" value="false"/>
+    <param argument="-main" checked="false" falsevalue="" label="Compute RPAIRS-like tags and keep only main transitions for each reaction" name="main" truevalue="-main" type="boolean" value="false"/>
     <param argument="-i" checked="false" falsevalue="" label="Use GSAM output with carbon indexes" name="fromIndexes" truevalue="-i" type="boolean" value="false"/>
   </inputs>
   <outputs>
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d tools/networkAnalysis/ChemSimilarityWeighting/ChemSimilarityWeighting.xml
--- a/tools/networkAnalysis/ChemSimilarityWeighting/ChemSimilarityWeighting.xml Thu Jan 12 13:45:13 2023 +0000
+++ b/tools/networkAnalysis/ChemSimilarityWeighting/ChemSimilarityWeighting.xml Wed May 17 13:26:37 2023 +0000
[
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<tool id="met4j_ChemSimilarityWeighting" name="ChemSimilarityWeighting" version="1.2.1">
+<tool id="met4j_ChemSimilarityWeighting" name="ChemSimilarityWeighting" version="MET4J_VERSION_TEST">
   <description>Provides tabulated compound graph edge list, with one column with reactant pair's chemical similarity.</description>
   <xrefs>
     <xref type="bio.tools">met4j</xref>
   </xrefs>
   <requirements>
-    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.2.1</container>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:MET4J_VERSION_TEST</container>
   </requirements>
   <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh networkAnalysis.ChemSimilarityWeighting#if str($type):
  -f "$type"
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d tools/networkAnalysis/ChokePoint/ChokePoint.xml
--- a/tools/networkAnalysis/ChokePoint/ChokePoint.xml Thu Jan 12 13:45:13 2023 +0000
+++ b/tools/networkAnalysis/ChokePoint/ChokePoint.xml Wed May 17 13:26:37 2023 +0000
[
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<tool id="met4j_ChokePoint" name="ChokePoint" version="1.2.1">
+<tool id="met4j_ChokePoint" name="ChokePoint" version="MET4J_VERSION_TEST">
   <description>Compute the Choke points of a metabolic network.</description>
   <xrefs>
     <xref type="bio.tools">met4j</xref>
   </xrefs>
   <requirements>
-    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.2.1</container>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:MET4J_VERSION_TEST</container>
   </requirements>
   <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh networkAnalysis.ChokePoint -i "$inputPath"
 #if str($sideCompoundFile) != 'None':
@@ -22,28 +22,28 @@
   </outputs>
   <tests>
     <test>
-      <param name="inputPath" value="XF_network.sbml"/>
-      <output ftype="tsv" name="outputPath">
-        <assert_contents>
-          <has_n_lines n="202"/>
-          <has_n_columns n="3"/>
-          <has_line_matching expression="R_ADEtex.*adenine_transport_via_diffusion__extracellular_to_periplasm_.*M_ade_e &lt;==&gt; M_ade_p" n="1"/>
-          <has_line_matching expression="R_X5PL3E.*R_X5PL3E.*M_xu5p_L_c --&gt; M_ru5p_L_c" n="1"/>
-        </assert_contents>
-      </output>
-    </test>
+ <param name="inputPath" value="XF_network.sbml"/>
+ <output ftype="tsv" name="outputPath">
+ <assert_contents>
+ <has_n_lines n="202"/>
+ <has_n_columns n="3"/>
+ <has_line_matching expression="R_ADEtex.*adenine_transport_via_diffusion__extracellular_to_periplasm_.*M_ade_e &lt;==&gt; M_ade_p" n="1"/>
+ <has_line_matching expression="R_X5PL3E.*R_X5PL3E.*M_xu5p_L_c --&gt; M_ru5p_L_c" n="1"/>
+ </assert_contents>
+ </output>
+ </test>
     <test>
-      <param name="inputPath" value="XF_network.sbml"/>
-      <param name="sideCompoundFile" value="sides.txt"/>
-      <output ftype="tsv" name="outputPath">
-        <assert_contents>
-          <has_n_lines n="200"/>
-          <has_n_columns n="3"/>
-          <has_line_matching expression="R_ADEtex.*adenine_transport_via_diffusion__extracellular_to_periplasm_.*M_ade_e &lt;==&gt; M_ade_p" n="0"/>
-          <has_line_matching expression="R_X5PL3E.*R_X5PL3E.*M_xu5p_L_c --&gt; M_ru5p_L_c" n="0"/>
-        </assert_contents>
-      </output>
-    </test>
+ <param name="inputPath" value="XF_network.sbml"/>
+ <param name="sideCompoundFile" value="sides.txt"/>
+ <output ftype="tsv" name="outputPath">
+ <assert_contents>
+ <has_n_lines n="200"/>
+ <has_n_columns n="3"/>
+ <has_line_matching expression="R_ADEtex.*adenine_transport_via_diffusion__extracellular_to_periplasm_.*M_ade_e &lt;==&gt; M_ade_p" n="1" negate="true"/>
+ <has_line_matching expression="R_X5PL3E.*R_X5PL3E.*M_xu5p_L_c --&gt; M_ru5p_L_c" n="1" negate="true"/>
+ </assert_contents>
+ </output>
+ </test>
   </tests>
   <help><![CDATA[Compute the Choke points of a metabolic network.
 Load points constitute an indicator of lethality and can help identifying drug target Choke points are reactions that are required to consume or produce one compound. Targeting of choke point can lead to the accumulation or the loss of some metabolites, thus choke points constitute an indicator of lethality and can help identifying drug target 
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d tools/networkAnalysis/CompoundNet/CompoundNet.xml
--- a/tools/networkAnalysis/CompoundNet/CompoundNet.xml Thu Jan 12 13:45:13 2023 +0000
+++ b/tools/networkAnalysis/CompoundNet/CompoundNet.xml Wed May 17 13:26:37 2023 +0000
[
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<tool id="met4j_CompoundNet" name="CompoundNet" version="1.2.1">
+<tool id="met4j_CompoundNet" name="CompoundNet" version="MET4J_VERSION_TEST">
   <description>Advanced creation of a compound graph representation of a SBML file content</description>
   <xrefs>
     <xref type="bio.tools">met4j</xref>
   </xrefs>
   <requirements>
-    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.2.1</container>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:MET4J_VERSION_TEST</container>
   </requirements>
   <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh networkAnalysis.CompoundNet -s "$inputPath"
 #if str($inputSide) != 'None':
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d tools/networkAnalysis/DegreeWeighting/DegreeWeighting.xml
--- a/tools/networkAnalysis/DegreeWeighting/DegreeWeighting.xml Thu Jan 12 13:45:13 2023 +0000
+++ b/tools/networkAnalysis/DegreeWeighting/DegreeWeighting.xml Wed May 17 13:26:37 2023 +0000
[
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<tool id="met4j_DegreeWeighting" name="DegreeWeighting" version="1.2.1">
+<tool id="met4j_DegreeWeighting" name="DegreeWeighting" version="MET4J_VERSION_TEST">
   <description>Provides tabulated compound graph edge list, with one column with target's degree.</description>
   <xrefs>
     <xref type="bio.tools">met4j</xref>
   </xrefs>
   <requirements>
-    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.2.1</container>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:MET4J_VERSION_TEST</container>
   </requirements>
   <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh networkAnalysis.DegreeWeighting#if str($pow):
  -pow "$pow"
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d tools/networkAnalysis/DistanceMatrix/DistanceMatrix.xml
--- a/tools/networkAnalysis/DistanceMatrix/DistanceMatrix.xml Thu Jan 12 13:45:13 2023 +0000
+++ b/tools/networkAnalysis/DistanceMatrix/DistanceMatrix.xml Wed May 17 13:26:37 2023 +0000
[
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<tool id="met4j_DistanceMatrix" name="DistanceMatrix" version="1.2.1">
+<tool id="met4j_DistanceMatrix" name="DistanceMatrix" version="MET4J_VERSION_TEST">
   <description>Create a compound to compound distance matrix.</description>
   <xrefs>
     <xref type="bio.tools">met4j</xref>
   </xrefs>
   <requirements>
-    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.2.1</container>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:MET4J_VERSION_TEST</container>
   </requirements>
   <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh networkAnalysis.DistanceMatrix -i "$inputPath"
 #if str($sideCompoundFile) != 'None':
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d tools/networkAnalysis/ExtractSubBipNetwork/ExtractSubBipNetwork.xml
--- a/tools/networkAnalysis/ExtractSubBipNetwork/ExtractSubBipNetwork.xml Thu Jan 12 13:45:13 2023 +0000
+++ b/tools/networkAnalysis/ExtractSubBipNetwork/ExtractSubBipNetwork.xml Wed May 17 13:26:37 2023 +0000
[
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<tool id="met4j_ExtractSubBipNetwork" name="ExtractSubBipNetwork" version="1.2.1">
+<tool id="met4j_ExtractSubBipNetwork" name="ExtractSubBipNetwork" version="MET4J_VERSION_TEST">
   <description>Create a subnetwork from a GSMN in SBML format, and two files containing lists of compounds and/or reactions of interests ids, one per row, plus one file of the same format containing side compounds ids.</description>
   <xrefs>
     <xref type="bio.tools">met4j</xref>
   </xrefs>
   <requirements>
-    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.2.1</container>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:MET4J_VERSION_TEST</container>
   </requirements>
   <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh networkAnalysis.ExtractSubBipNetwork -i "$inputPath"
  -s "$sourcePath"
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d tools/networkAnalysis/ExtractSubNetwork/ExtractSubNetwork.xml
--- a/tools/networkAnalysis/ExtractSubNetwork/ExtractSubNetwork.xml Thu Jan 12 13:45:13 2023 +0000
+++ b/tools/networkAnalysis/ExtractSubNetwork/ExtractSubNetwork.xml Wed May 17 13:26:37 2023 +0000
[
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<tool id="met4j_ExtractSubNetwork" name="ExtractSubNetwork" version="1.2.1">
+<tool id="met4j_ExtractSubNetwork" name="ExtractSubNetwork" version="MET4J_VERSION_TEST">
   <description>Create a subnetwork from a GSMN 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:1.2.1</container>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:MET4J_VERSION_TEST</container>
   </requirements>
   <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh networkAnalysis.ExtractSubNetwork -i "$inputPath"
  -s "$sourcePath"
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d tools/networkAnalysis/ExtractSubReactionNetwork/ExtractSubReactionNetwork.xml
--- a/tools/networkAnalysis/ExtractSubReactionNetwork/ExtractSubReactionNetwork.xml Thu Jan 12 13:45:13 2023 +0000
+++ b/tools/networkAnalysis/ExtractSubReactionNetwork/ExtractSubReactionNetwork.xml Wed May 17 13:26:37 2023 +0000
[
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<tool id="met4j_ExtractSubReactionNetwork" name="ExtractSubReactionNetwork" version="1.2.1">
+<tool id="met4j_ExtractSubReactionNetwork" name="ExtractSubReactionNetwork" version="MET4J_VERSION_TEST">
   <description>Create a subnetwork from a GSMN in SBML format, and two files containing lists of reactions of interests ids, one per row, plus one file of the same format containing side compounds ids.</description>
   <xrefs>
     <xref type="bio.tools">met4j</xref>
   </xrefs>
   <requirements>
-    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.2.1</container>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:MET4J_VERSION_TEST</container>
   </requirements>
   <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh networkAnalysis.ExtractSubReactionNetwork -i "$inputPath"
  -s "$sourcePath"
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d tools/networkAnalysis/LoadPoint/LoadPoint.xml
--- a/tools/networkAnalysis/LoadPoint/LoadPoint.xml Thu Jan 12 13:45:13 2023 +0000
+++ b/tools/networkAnalysis/LoadPoint/LoadPoint.xml Wed May 17 13:26:37 2023 +0000
[
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<tool id="met4j_LoadPoint" name="LoadPoint" version="1.2.1">
+<tool id="met4j_LoadPoint" name="LoadPoint" version="MET4J_VERSION_TEST">
   <description>Compute the Load points of a metabolic network. Load points constitute an indicator of lethality and can help identifying drug target.</description>
   <xrefs>
     <xref type="bio.tools">met4j</xref>
   </xrefs>
   <requirements>
-    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.2.1</container>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:MET4J_VERSION_TEST</container>
   </requirements>
   <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh networkAnalysis.LoadPoint -i "$inputPath"
 #if str($sideCompoundFile) != 'None':
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d tools/networkAnalysis/MetaboRank/MetaboRank.xml
--- a/tools/networkAnalysis/MetaboRank/MetaboRank.xml Thu Jan 12 13:45:13 2023 +0000
+++ b/tools/networkAnalysis/MetaboRank/MetaboRank.xml Wed May 17 13:26:37 2023 +0000
[
@@ -1,17 +1,20 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<tool id="met4j_MetaboRank" name="MetaboRank" version="1.2.1">
+<tool id="met4j_MetaboRank" name="MetaboRank" version="MET4J_VERSION_TEST">
   <description>Compute the MetaboRank, a custom personalized PageRank for metabolic network.</description>
   <xrefs>
     <xref type="bio.tools">met4j</xref>
   </xrefs>
   <requirements>
-    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.2.1</container>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:MET4J_VERSION_TEST</container>
   </requirements>
   <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh networkAnalysis.MetaboRank -i "$sbmlFilePath"
  -s "$seedsFilePath"
 #if str($edgeWeightsFilePaths) != 'None':
  -w "$edgeWeightsFilePaths"
 #end if
+#if str($inputSide) != 'None':
+ -sc "$inputSide"
+#end if
 #if str($maxNbOfIter):
  -max "$maxNbOfIter"
 #end if
@@ -27,6 +30,7 @@
     <param argument="-i" format="sbml" label="input SBML file: path to network used for computing centrality, in sbml format." name="sbmlFilePath" optional="false" type="data" value=""/>
     <param argument="-s" format="tsv" label="input seeds file: tabulated file containing node of interest ids and weight" name="seedsFilePath" optional="false" type="data" value=""/>
     <param argument="-w" format="tsv" label="input edge weight file: (recommended) path to file containing edges' weights. Will be normalized as transition probabilities" name="edgeWeightsFilePaths" optional="true" type="data" value=""/>
+    <param argument="-sc" format="txt" label="input Side compound file" name="inputSide" optional="true" type="data" value=""/>
     <param argument="-max" label="maximal number of iteration" name="maxNbOfIter" optional="true" type="text" value="15000">
       <sanitizer invalid_char="_">
         <valid initial="string.printable"/>
@@ -38,13 +42,7 @@
   <outputs>
     <data format="tsv" name="output"/>
   </outputs>
-  <tests>
-    <test>
-      <param name="inputPath" value="toy_model.xml"/>
-      <output ftype="tsv" name="output">
-      </output>
-    </test>
-  </tests>
+  <tests/>
   <help><![CDATA[Compute the MetaboRank, a custom personalized PageRank for metabolic network.
 The MetaboRank takes a metabolic network and a list of compounds of interest, and provide a score of relevance for all of the other compounds in the network.
 The MetaboRank can, from metabolomics results, be used to fuel a recommender system highlighting interesting compounds to investigate, retrieve missing identification and drive literature mining.
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d tools/networkAnalysis/NetworkSummary/NetworkSummary.xml
--- a/tools/networkAnalysis/NetworkSummary/NetworkSummary.xml Thu Jan 12 13:45:13 2023 +0000
+++ b/tools/networkAnalysis/NetworkSummary/NetworkSummary.xml Wed May 17 13:26:37 2023 +0000
[
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<tool id="met4j_NetworkSummary" name="NetworkSummary" version="1.2.1">
+<tool id="met4j_NetworkSummary" name="NetworkSummary" version="MET4J_VERSION_TEST">
   <description>Create a report summarizing several graph measures characterising the structure of the network.</description>
   <xrefs>
     <xref type="bio.tools">met4j</xref>
   </xrefs>
   <requirements>
-    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.2.1</container>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:MET4J_VERSION_TEST</container>
   </requirements>
   <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh networkAnalysis.NetworkSummary -i "$inputPath"
 #if str($sideCompoundFile) != 'None':
@@ -26,10 +26,13 @@
   </outputs>
   <tests>
     <test>
-      <param name="inputPath" value="toy_model.xml"/>
-      <output name="outputPath">
-      </output>
-    </test>
+ <param name="inputPath" value="toy_model.xml"/>
+ <output name="outputPath">
+ <assert_contents>
+ <has_n_lines min="1"/>
+ </assert_contents>
+ </output>
+ </test>
   </tests>
   <help><![CDATA[Use a metabolic network in SBML file and an optional list of side compounds, and produce a report summarizing several graph measures characterising the structure of the network.This includes (non-exhaustive list): size and order, connectivity, density, degree distribution, shortest paths length, top centrality nodes...]]></help>
   <citations/>
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d tools/networkAnalysis/PathwayNet/PathwayNet.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/networkAnalysis/PathwayNet/PathwayNet.xml Wed May 17 13:26:37 2023 +0000
[
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tool id="met4j_PathwayNet" name="PathwayNet" version="MET4J_VERSION_TEST">
+  <description>Creation of a Pathway Network representation of a SBML file content</description>
+  <xrefs>
+    <xref type="bio.tools">met4j</xref>
+  </xrefs>
+  <requirements>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:MET4J_VERSION_TEST</container>
+  </requirements>
+  <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh networkAnalysis.PathwayNet -s "$inputPath"
+#if str($inputSide) != 'None':
+ -sc "$inputSide"
+#end if
+ $removeIsolated
+ $onlySourcesAndSinks
+#if str($weightFile) != 'None':
+ -cw "$weightFile"
+#end if
+ $connectors
+ $asMatrix
+ -o "$outputPath"
+]]></command>
+  <inputs>
+    <param argument="-s" format="sbml" label="input SBML file" name="inputPath" optional="false" type="data" value=""/>
+    <param argument="-sc" format="txt" label="input Side compound file (recommended)" name="inputSide" optional="true" type="data" value=""/>
+    <param argument="-ri" checked="false" falsevalue="" label="remove isolated nodes" name="removeIsolated" truevalue="-ri" type="boolean" value="false"/>
+    <param argument="-oss" checked="false" falsevalue="" label="consider only metabolites that are source or sink in the pathway (i.e non-intermediary compounds)" name="onlySourcesAndSinks" truevalue="-oss" type="boolean" value="false"/>
+    <param argument="-cw" format="tsv" label="an optional file containing weights for pathway pairs" name="weightFile" optional="true" type="data" value=""/>
+    <param argument="-ncw" checked="false" falsevalue="" label="set number of connecting compounds as weight" name="connectors" truevalue="-ncw" type="boolean" value="false"/>
+    <param argument="-am" checked="false" falsevalue="" label="export as matrix (implies simple graph conversion). Default export as GML file" name="asMatrix" truevalue="-am" type="boolean" value="false"/>
+  </inputs>
+  <outputs>
+    <data format="gml" name="outputPath"/>
+  </outputs>
+  <tests/>
+  <help><![CDATA[Genome-scale metabolic networks are often partitioned into metabolic pathways. Pathways are frequently considered independently despite frequent coupling in their activity due to shared metabolites. In order to decipher the interconnections linking overlapping pathways, this app proposes the creation of "Pathway Network", where two pathways are linked if they share compounds.]]></help>
+  <citations/>
+</tool>
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d tools/networkAnalysis/PrecursorNetwork/PrecursorNetwork.xml
--- a/tools/networkAnalysis/PrecursorNetwork/PrecursorNetwork.xml Thu Jan 12 13:45:13 2023 +0000
+++ b/tools/networkAnalysis/PrecursorNetwork/PrecursorNetwork.xml Wed May 17 13:26:37 2023 +0000
[
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<tool id="met4j_PrecursorNetwork" name="PrecursorNetwork" version="1.2.1">
+<tool id="met4j_PrecursorNetwork" name="PrecursorNetwork" version="MET4J_VERSION_TEST">
   <description>Perform a network expansion from a set of compound targets to create a precursor network.</description>
   <xrefs>
     <xref type="bio.tools">met4j</xref>
   </xrefs>
   <requirements>
-    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.2.1</container>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:MET4J_VERSION_TEST</container>
   </requirements>
   <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh networkAnalysis.PrecursorNetwork -i "$sbmlFilePath"
  -t "$targetsFilePath"
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d tools/networkAnalysis/ScopeNetwork/ScopeNetwork.xml
--- a/tools/networkAnalysis/ScopeNetwork/ScopeNetwork.xml Thu Jan 12 13:45:13 2023 +0000
+++ b/tools/networkAnalysis/ScopeNetwork/ScopeNetwork.xml Wed May 17 13:26:37 2023 +0000
[
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<tool id="met4j_ScopeNetwork" name="ScopeNetwork" version="1.2.1">
+<tool id="met4j_ScopeNetwork" name="ScopeNetwork" version="MET4J_VERSION_TEST">
   <description>Perform a network expansion from a set of compound seeds to create a scope network</description>
   <xrefs>
     <xref type="bio.tools">met4j</xref>
   </xrefs>
   <requirements>
-    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.2.1</container>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:MET4J_VERSION_TEST</container>
   </requirements>
   <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh networkAnalysis.ScopeNetwork -i "$sbmlFilePath"
  -s "$seedsFilePath"
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d tools/networkAnalysis/SeedsAndTargets/SeedsAndTargets.xml
--- a/tools/networkAnalysis/SeedsAndTargets/SeedsAndTargets.xml Thu Jan 12 13:45:13 2023 +0000
+++ b/tools/networkAnalysis/SeedsAndTargets/SeedsAndTargets.xml Wed May 17 13:26:37 2023 +0000
[
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<tool id="met4j_SeedsAndTargets" name="SeedsAndTargets" version="1.2.1">
+<tool id="met4j_SeedsAndTargets" name="SeedsAndTargets" version="MET4J_VERSION_TEST">
   <description>Identify exogenously acquired compounds, producible compounds exogenously available and/or dead ends metabolites from metabolic network topology</description>
   <xrefs>
     <xref type="bio.tools">met4j</xref>
   </xrefs>
   <requirements>
-    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.2.1</container>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:MET4J_VERSION_TEST</container>
   </requirements>
   <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh networkAnalysis.SeedsAndTargets -i "$inputPath"
 #if str($inputSide) != 'None':
@@ -45,7 +45,6 @@
   <tests>
     <test>
       <param name="inputPath" value="XF_network.sbml"/>
-      <param name="targetsFilePath" value="SeedsAndTargets-result.tab"/>
       <param name="source" value="true"/>
       <output ftype="tsv" name="outputPath">
         <assert_contents>
@@ -57,7 +56,6 @@
     </test>
     <test>
       <param name="inputPath" value="XF_network.sbml"/>
-      <param name="targetsFilePath" value="SeedsAndTargets-result.tab"/>
       <param name="sink" value="true"/>
       <param name="useInternal" value="true"/>
       <param name="comp" value="e"/>
@@ -71,7 +69,6 @@
     </test>
     <test>
       <param name="inputPath" value="XF_network.sbml"/>
-      <param name="targetsFilePath" value="SeedsAndTargets-result.tab"/>
       <param name="sink" value="true"/>
       <param name="useBorensteinAlg" value="true"/>
       <param name="comp" value="e"/>
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d tools/networkAnalysis/SideCompoundsScan/SideCompoundsScan.xml
--- a/tools/networkAnalysis/SideCompoundsScan/SideCompoundsScan.xml Thu Jan 12 13:45:13 2023 +0000
+++ b/tools/networkAnalysis/SideCompoundsScan/SideCompoundsScan.xml Wed May 17 13:26:37 2023 +0000
[
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<tool id="met4j_SideCompoundsScan" name="SideCompoundsScan" version="1.2.1">
+<tool id="met4j_SideCompoundsScan" name="SideCompoundsScan" version="MET4J_VERSION_TEST">
   <description>Scan a network to identify side-compounds.</description>
   <xrefs>
     <xref type="bio.tools">met4j</xref>
   </xrefs>
   <requirements>
-    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.2.1</container>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:MET4J_VERSION_TEST</container>
   </requirements>
   <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh networkAnalysis.SideCompoundsScan -i "$inputPath"
  $sideOnly
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d tools/reconstruction/SbmlCheckBalance/SbmlCheckBalance.xml
--- a/tools/reconstruction/SbmlCheckBalance/SbmlCheckBalance.xml Thu Jan 12 13:45:13 2023 +0000
+++ b/tools/reconstruction/SbmlCheckBalance/SbmlCheckBalance.xml Wed May 17 13:26:37 2023 +0000
[
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<tool id="met4j_SbmlCheckBalance" name="SbmlCheckBalance" version="1.2.1">
+<tool id="met4j_SbmlCheckBalance" name="SbmlCheckBalance" version="MET4J_VERSION_TEST">
   <description>Check balance of all the reactions in a SBML.</description>
   <xrefs>
     <xref type="bio.tools">met4j</xref>
   </xrefs>
   <requirements>
-    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:1.2.1</container>
+    <container type="singularity">oras://registry.forgemia.inra.fr/metexplore/met4j/met4j-singularity:MET4J_VERSION_TEST</container>
   </requirements>
   <command detect_errors="exit_code"><![CDATA[sh /usr/bin/met4j.sh reconstruction.SbmlCheckBalance -sbml "$sbml"
  -out "$out"
b
diff -r 35c9abcd8934 -r 7a6f2380fc1d tools/tool_conf.xml
--- a/tools/tool_conf.xml Thu Jan 12 13:45:13 2023 +0000
+++ b/tools/tool_conf.xml Wed May 17 13:26:37 2023 +0000
b
@@ -27,6 +27,7 @@
   <section id="met4j_mapping" name="Met4J - mapping"/>
   <tool file="met4j/mapping/NameMatcher/NameMatcher.xml"/>
   <section id="met4j_networkanalysis" name="Met4J - networkAnalysis"/>
+  <tool file="met4j/networkAnalysis/BipartiteDistanceMatrix/BipartiteDistanceMatrix.xml"/>
   <tool file="met4j/networkAnalysis/CarbonSkeletonNet/CarbonSkeletonNet.xml"/>
   <tool file="met4j/networkAnalysis/ChemSimilarityWeighting/ChemSimilarityWeighting.xml"/>
   <tool file="met4j/networkAnalysis/ChokePoint/ChokePoint.xml"/>
@@ -39,6 +40,7 @@
   <tool file="met4j/networkAnalysis/LoadPoint/LoadPoint.xml"/>
   <tool file="met4j/networkAnalysis/MetaboRank/MetaboRank.xml"/>
   <tool file="met4j/networkAnalysis/NetworkSummary/NetworkSummary.xml"/>
+  <tool file="met4j/networkAnalysis/PathwayNet/PathwayNet.xml"/>
   <tool file="met4j/networkAnalysis/PrecursorNetwork/PrecursorNetwork.xml"/>
   <tool file="met4j/networkAnalysis/ScopeNetwork/ScopeNetwork.xml"/>
   <tool file="met4j/networkAnalysis/SeedsAndTargets/SeedsAndTargets.xml"/>