Repository 'rpviz'
hg clone https://toolshed.g2.bx.psu.edu/repos/tduigou/rpviz

Changeset 0:ea2ca40a24c5 (2021-12-13)
Next changeset 1:8057fdd27860 (2022-11-18)
Commit message:
"planemo upload commit 2f1af427fa4c4f2aad53ab94c4cdb51456c66019-dirty"
added:
rpviz.xml
test-data/as_tar_inputs.tgz
test-data/lycopene_CrtEBI_from_selenzy.xml
test-data/rpviz_single_output.html
test-data/rpviz_tar_output.html
b
diff -r 000000000000 -r ea2ca40a24c5 rpviz.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rpviz.xml Mon Dec 13 17:40:42 2021 +0000
[
@@ -0,0 +1,101 @@
+<tool id="rpviz" name="Visualize pathways" version="5.10.0">
+    <description>Visualize pathways from the RetroPath Suite</description>
+    <requirements>
+        <requirement type="package" version="5.10.0">rptools</requirement>
+    </requirements>
+    <command detect_errors="exit_code"><![CDATA[
+        #set input_folder="input_folder"
+        mkdir -p '$input_folder';
+        #if str($input_type_conditional.input_type) == "sbml":
+            #for $input in $input_type_conditional.input_sbml.keys():
+                ln -sf $input_type_conditional.input_sbml[$input] '$input_folder/${input}.xml';
+            #end for
+            python -m rptools.rpviz '$input_folder'
+        #elif str($input_type_conditional.input_type) == "tar":
+            python -m rptools.rpviz '${input_type_conditional.input_tar}'
+        #elif str($input_type_conditional.input_type) == "single_sbml":
+            ln -sf '$input_type_conditional.input_single_sbml' '$input_folder/${input_type_conditional.input_single_sbml.name}';
+            python -m rptools.rpviz '$input_folder'
+        #end if
+        'out'
+        #if $adv.cofactor_file
+            --cofactor '$adv.cofactor_file'
+        #end if
+        --autonomous_html '$html_file';
+        rm -fr '$input_folder';
+    ]]></command>
+    <inputs>
+        <conditional name="input_type_conditional">
+            <param name="input_type" type="select" label="Source SBML format">
+                <option value="tar" selected="True">TAR</option>
+                <option value="sbml">Collection</option>
+                <option value="single_sbml">single SBML</option>
+            </param>
+            <when value="tar">
+                <param name="input_tar" type="data" format="tar" label="Source SBML" />
+            </when>
+            <when value="sbml">
+                <param name="input_sbml" type="data_collection" format="xml" collection_type="list" label="Source SBML" />
+            </when>
+            <when value="single_sbml">
+                <param name="input_single_sbml" type="data" format="xml" label="Source SBML" />
+            </when>
+        </conditional>
+        <section name="adv" title="Advanced Options" expanded="false">
+            <param name="cofactor_file" type="data" format="tsv" optional="true" label="cofactor file" />
+        </section>
+    </inputs>
+    <outputs>
+        <data name="html_file" format="html" label="Rpviz: Pathways Visualization"/>
+    </outputs>
+    <tests>
+        <test>
+        <!-- test 1: check if identical html output is produced (single sbml input) --> 
+            <conditional name="input_type_conditional">
+                <param name="input_type" value="single_sbml"/>
+                <param name="input_single_sbml" value="lycopene_CrtEBI_from_selenzy.xml" />
+            </conditional>
+            <output name="html_file" file="rpviz_single_output.html" compare="sim_size"/>
+        </test>
+        <test>
+        <!-- test 2: check if identical html output is produced (tar input) --> 
+            <conditional name="input_type_conditional">
+                <param name="input_type" value="tar"/>
+                <param name="input_tar" value="as_tar_inputs.tgz" />
+            </conditional>
+            <output name="html_file" file="rpviz_tar_output.html" compare="sim_size"/>
+        </test>
+    </tests>
+    <help><![CDATA[
+RPVIZ
+================
+Visualize pathways from the RetroPath Suite
+
+Input
+-----
+
+* **input_rpSBMLs**\ : (string) Input file containing rpSBML files in a tar archive or a folder.
+                             
+Output
+------
+
+* **output_folder**\ : (string) Output folder to be used. If it does not exist, an attempt will be made to create it.It the creation of the folder fails, IOError will be raised.
+* **autonomous_html**\ : (string) Optional file path, if provided will output an autonomous HTML containing all dependancies.
+
+Project Links
+------------------
+
+* `GitHub <https://github.com/brsynth/rptools/tree/master/rptools/rpviz>`_
+
+Version
+----------
+
+5.10.0
+
+License
+-------
+
+* `MIT <https://github.com/brsynth/rptools/blob/master/LICENSE>`_
+
+    ]]></help>
+</tool>
\ No newline at end of file
b
diff -r 000000000000 -r ea2ca40a24c5 test-data/as_tar_inputs.tgz
b
Binary file test-data/as_tar_inputs.tgz has changed
b
diff -r 000000000000 -r ea2ca40a24c5 test-data/lycopene_CrtEBI_from_selenzy.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/lycopene_CrtEBI_from_selenzy.xml Mon Dec 13 17:40:42 2021 +0000
[
b'@@ -0,0 +1,532 @@\n+<?xml version="1.0" encoding="UTF-8"?>\n+<sbml xmlns="http://www.sbml.org/sbml/level3/version1/core" xmlns:groups="http://www.sbml.org/sbml/level3/version1/groups/version1" xmlns:fbc="http://www.sbml.org/sbml/level3/version1/fbc/version2" level="3" version="1" groups:required="false" fbc:required="false">\n+  <model metaid="f9b1ff022aa2133fc1e5e5d1fbac90ac29a744e960a2774be646bc71471ed597" id="RP_model_002_0001" name="002_0001" substanceUnits="mole" timeUnits="second" extentUnits="mole" fbc:strict="true">\n+    <listOfCompartments>\n+      <compartment metaid="_2e7d2c03a9507ae265ecf5b5356885a53393a2029d241394997265a1a25aefc6" sboTerm="SBO:0000290" id="c" name="cytosol" size="1" constant="true">\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="#_2e7d2c03a9507ae265ecf5b5356885a53393a2029d241394997265a1a25aefc6">\n+              <bqbiol:is>\n+                <rdf:Bag>\n+                  <rdf:li rdf:resource="http://identifiers.org/bigg.compartment/c"/>\n+                  <rdf:li rdf:resource="http://identifiers.org/bigg.compartment/c_c"/>\n+                  <rdf:li rdf:resource="http://identifiers.org/metanetx.compartment/MNXC3"/>\n+                  <rdf:li rdf:resource="http://identifiers.org/seed/c"/>\n+                  <rdf:li rdf:resource="http://identifiers.org/seed/c0"/>\n+                  <rdf:li rdf:resource="http://identifiers.org/seed/cytosol"/>\n+                  <rdf:li rdf:resource="http://identifiers.org/name/cytosol"/>\n+                </rdf:Bag>\n+              </bqbiol:is>\n+            </rdf:Description>\n+          </rdf:RDF>\n+        </annotation>\n+      </compartment>\n+    </listOfCompartments>\n+    <listOfSpecies>\n+      <species metaid="_61841f05183ff06dbe77a0e01f6d73d7a890997d823ac18d9fd56bac3d4bcc39" id="MNXM24" name="MNXM24" compartment="c" initialConcentration="1" hasOnlySubstanceUnits="false" boundaryCondition="false" constant="false">\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="#_61841f05183ff06dbe77a0e01f6d73d7a890997d823ac18d9fd56bac3d4bcc39">\n+              <bqbiol:is>\n+                <rdf:Bag/>\n+              </bqbiol:is>\n+            </rdf:Description>\n+            <rdf:BRSynth rdf:about="#_61841f05183ff06dbe77a0e01f6d73d7a890997d823ac18d9fd56bac3d4bcc39">\n+              <brsynth:brsynth xmlns:brsynth="http://brsynth.eu">\n+                <brsynth:smiles/>\n+                <brsynth:inchi/>\n+                <brsynth:inchikey/>\n+              </brsynth:brsynth>\n+            </rdf:BRSynth>\n+          </rdf:RDF>\n+        </annotation>\n+      </species>\n+      <species metaid="b0098569a07f786a6e9b2294639668cd4ee564dd642a38bdf429c4c6bb560b46" id="CMPD_0000000001" name="CMPD_0000000001" compartment="c" initialConcentration="1" hasOnlySubstanceUnits="false" boundaryCondition="false" constant="false">\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="#b0098569a07f786a6e9b2294639668cd4ee564dd642a38bdf429c4c6bb560b46">\n+              <bqbiol:is>\n+                <rdf:Bag/>\n+              </bqbiol:is>\n+            </rdf:Description>\n+            <rdf:BRSynth rdf:about="#b0098569a07f786a6e9b2294639668cd4ee564dd642a38bdf429c4c6bb560b46">\n+              <brsynth:brsynth xmlns:brsynth="http://brsynth.eu">\n+                <brsynth:smiles value="[H]C(=C([H])C([H])=C(C([H])([H])[H])C([H])([H])C([H])([H])C([H])=C(C([H])([H])[H])C([H])([H])C([H])([H])C([H])=C(C([H])([H])[H])C([H])([H])C([H])([H])C([H])=C(C([H])([H])[H])C([H])([H])[H])C([H])=C(C([H])([H])[H])C([H])([H])C([H])([H])C([H])=C(C([H])([H])[H])C([H])([H])C([H])([H])C([H])=C(C([H])([H])[H])C([H])([H])C([H])([H]'..b'es" groups:kind="collection">\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:BRSynth rdf:about="#_564fce39b23c6cf87d12dc2c612448384fd2cd980fe3fc07829e2ef802645579">\n+              <brsynth:brsynth xmlns:brsynth="http://brsynth.eu"/>\n+            </rdf:BRSynth>\n+          </rdf:RDF>\n+        </annotation>\n+        <groups:listOfMembers>\n+          <groups:member groups:idRef="CMPD_0000000001"/>\n+          <groups:member groups:idRef="TARGET_0000000001"/>\n+          <groups:member groups:idRef="CMPD_0000000003"/>\n+          <groups:member groups:idRef="MNXM100"/>\n+          <groups:member groups:idRef="MNXM83"/>\n+        </groups:listOfMembers>\n+      </groups:group>\n+      <groups:group metaid="_9e3154173c97366b3980dd1642e1e35d0bdfc3274abc744e89ecb518bcd48378" groups:id="rp_completed_species" groups:kind="collection">\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:BRSynth rdf:about="#_9e3154173c97366b3980dd1642e1e35d0bdfc3274abc744e89ecb518bcd48378">\n+              <brsynth:brsynth xmlns:brsynth="http://brsynth.eu"/>\n+            </rdf:BRSynth>\n+          </rdf:RDF>\n+        </annotation>\n+        <groups:listOfMembers>\n+          <groups:member groups:idRef="MNXM24"/>\n+          <groups:member groups:idRef="MNXM11"/>\n+          <groups:member groups:idRef="MNXM8975"/>\n+        </groups:listOfMembers>\n+      </groups:group>\n+      <groups:group metaid="_58b3b59284e0d918d6d3f3bcadc2d757726da7594cd899cad4e745836ac967a3" groups:id="rp_sink_species" groups:kind="collection">\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:BRSynth rdf:about="#_58b3b59284e0d918d6d3f3bcadc2d757726da7594cd899cad4e745836ac967a3">\n+              <brsynth:brsynth xmlns:brsynth="http://brsynth.eu"/>\n+            </rdf:BRSynth>\n+          </rdf:RDF>\n+        </annotation>\n+        <groups:listOfMembers>\n+          <groups:member groups:idRef="MNXM100"/>\n+          <groups:member groups:idRef="MNXM83"/>\n+          <groups:member groups:idRef="MNXM11"/>\n+        </groups:listOfMembers>\n+      </groups:group>\n+      <groups:group metaid="a0f48a6fe4f833a3d15abd7ee5b944b97d629570ac09588e9fb6fdf6196ab189" groups:id="rp_fba_ignored_species" groups:kind="collection">\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:BRSynth rdf:about="#a0f48a6fe4f833a3d15abd7ee5b944b97d629570ac09588e9fb6fdf6196ab189">\n+              <brsynth:brsynth xmlns:brsynth="http://brsynth.eu"/>\n+            </rdf:BRSynth>\n+          </rdf:RDF>\n+        </annotation>\n+        <groups:listOfMembers>\n+          <groups:member groups:idRef="MNXM24"/>\n+          <groups:member groups:idRef="MNXM8975"/>\n+        </groups:listOfMembers>\n+      </groups:group>\n+      <groups:group metaid="fb9b29ba20af773fed953f1d6726905a453f235c9a4baa7217f02760bc2057f8" groups:id="rp_thermo_substituted_species" groups:kind="collection">\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:BRSynth rdf:about="#fb9b29ba20af773fed953f1d6726905a453f235c9a4baa7217f02760bc2057f8">\n+              <brsynth:brsynth xmlns:brsynth="http://brsynth.eu"/>\n+            </rdf:BRSynth>\n+          </rdf:RDF>\n+        </annotation>\n+        <groups:listOfMembers>\n+          <groups:member groups:idRef="TARGET_0000000001"/>\n+          <groups:member groups:idRef="MNXM24"/>\n+          <groups:member groups:idRef="MNXM8975"/>\n+        </groups:listOfMembers>\n+      </groups:group>\n+    </groups:listOfGroups>\n+  </model>\n+</sbml>\n'
b
diff -r 000000000000 -r ea2ca40a24c5 test-data/rpviz_single_output.html
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/rpviz_single_output.html Mon Dec 13 17:40:42 2021 +0000
[
b'@@ -0,0 +1,6560 @@\n+<!DOCTYPE html>\n+\n+<!--\n+__author__ = \'Thomas Duigou (thomas.duigou@inra.fr)\'\n+__license__ = \'MIT\'\n+-->\n+\n+<html lang="en">\n+<head>\n+    <meta charset="utf-8">\n+    <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, maximum-scale=1"/>\n+\n+    <title>Pathway viewer</title>\n+\n+    <!-- Local libraries -->\n+    <script >/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */\n+!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}S.fn=S.prototype={jquery:f,constructor:S,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=S.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return S.each(this,e)},map:function(n){return this.pushStack(S.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(S.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(S.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:u,sort:t.sort,splice:t.splice},S.extend=S.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||m(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(S.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||S.isPlainObject(n)?n:{},i=!1,a[t]=S.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},S.extend({expando:"jQuery"+(f+Math.random()).replace(/\\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==o.call(e))&&(!(t=r(e))||"function"==typeof(n=v.call(t,"constructor")&&t.constructor)&&a.call(n)===l)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){b(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(p(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},makeArray:function(e,t){var n=t||[];return null!=e&&(p(Object(e))?S.merge(n,"string"==typeof e?[e]:e):u.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:i.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(p(e))for(r=e.length;o<r;o++)null!=(i=t'..b'+                            <div class="raw-text reaction_info_pathids"></div>\n+                        </div>\n+                        <!-- UniProt IDs -->\n+                        <div>\n+                            <div class="info-subtitle">UniProt IDs (Selenzyme score)</div>\n+                            <div class="raw-text reaction_info_uniprot_crosslinks"></div>\n+                        </div>\n+                        <!-- Crosslink to Selenzyme -->\n+                        <div>\n+                            <div class="info-subtitle">Enzyme selection</div>\n+                            <div class="raw-text"><span class="reaction_info_selenzyme_crosslink"></span></div>\n+                        </div>\n+                    </div>\n+                    <!-- Information on a selected pathway -->\n+                    <div id="panel_pathway_info">\n+                        <div class="info-title">Pathway</div>\n+                        <div class="info-name"><span class="pathway_info_path_id"></span></div>\n+                        <div class="spacer"></div>\n+                        <!-- Pathway ID -->\n+                        <div>\n+                            <div class="info-subtitle">Pathway ID</div>\n+                            <div class="raw-text"><span class="pathway_info_path_id"></span></div>\n+                        </div>\n+                        <!-- Number of steps -->\n+                        <div>\n+                            <div class="info-subtitle">Number of steps</div>\n+                            <div class="raw-text"><span class="pathway_info_nb_steps"></span></div>\n+                        </div>\n+                        <!-- Thermodynamic -->\n+                        <div>\n+                            <div class="info-subtitle">&#916;<sub>r</sub>G\' (kJ/mol)</div>\n+                            <div class="raw-text"><span class="pathway_info_thermo"></span></div>\n+                        </div>\n+                        <!-- Rule score -->\n+                        <div>\n+                            <div class="info-subtitle">Rule score</div>\n+                            <div class="raw-text"><span class="pathway_info_rule_score"></span></div>\n+                        </div>\n+                        <!-- FBA -->\n+                        <div>\n+                            <div class="info-subtitle">Target\'s production flux (mmol gDW<sup>-1</sup> hr<sup>-1</sup>)</div>\n+                            <div class="raw-text"><span class="pathway_info_target_flux"></span></div>\n+                        </div>\n+                        <!-- Global score -->\n+                        <div>\n+                            <div class="info-subtitle">Global score</div>\n+                            <div class="raw-text"><span class="pathway_info_global_score"></span></div>\n+                        </div>\n+                    </div>\n+                    <!-- In dev stuff -->\n+                    <!-- <div>Information</div>\n+                    <div id="react_img" class="pointer"></div>\n+                    <div id="reversibility" class=\'inf2\'></div>\n+                    <input id="thermo_button" type="button" value="Thermodynamics"/>\n+                    <input id="flux_button" type="button" value="Flux"/>\n+                    <div id="rule" style="display:none;" class="boxinf">\n+                        <div id="sub_rule_score" class="inf2">Rule Score</div>\n+                    </div>\n+                    <div id="thermo"style="display:none;" class="boxinf"></div>\n+                    <div id="flux"style="display:none;" class="boxinf">\n+                        <div id="sub_fba" class="inf2">FBA (mmol/gDW/h)</div>\n+                        <div id="sub_fba_obj" class="inf1">FBA biomass objective</div>\n+                    </div>\n+                    <div id="selenzyme-link"></div>\n+                    <div id="selenzyme_table"></div> -->\n+                </div>\n+\n+            </div>\n+        </div>\n+\n+    </div>\n+\n+</body>\n+</html>\n'
b
diff -r 000000000000 -r ea2ca40a24c5 test-data/rpviz_tar_output.html
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/rpviz_tar_output.html Mon Dec 13 17:40:42 2021 +0000
[
b'@@ -0,0 +1,7436 @@\n+<!DOCTYPE html>\n+\n+<!--\n+__author__ = \'Thomas Duigou (thomas.duigou@inra.fr)\'\n+__license__ = \'MIT\'\n+-->\n+\n+<html lang="en">\n+<head>\n+    <meta charset="utf-8">\n+    <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, maximum-scale=1"/>\n+\n+    <title>Pathway viewer</title>\n+\n+    <!-- Local libraries -->\n+    <script >/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */\n+!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}S.fn=S.prototype={jquery:f,constructor:S,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=S.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return S.each(this,e)},map:function(n){return this.pushStack(S.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(S.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(S.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:u,sort:t.sort,splice:t.splice},S.extend=S.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||m(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(S.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||S.isPlainObject(n)?n:{},i=!1,a[t]=S.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},S.extend({expando:"jQuery"+(f+Math.random()).replace(/\\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==o.call(e))&&(!(t=r(e))||"function"==typeof(n=v.call(t,"constructor")&&t.constructor)&&a.call(n)===l)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){b(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(p(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},makeArray:function(e,t){var n=t||[];return null!=e&&(p(Object(e))?S.merge(n,"string"==typeof e?[e]:e):u.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:i.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(p(e))for(r=e.length;o<r;o++)null!=(i=t'..b'+                            <div class="raw-text reaction_info_pathids"></div>\n+                        </div>\n+                        <!-- UniProt IDs -->\n+                        <div>\n+                            <div class="info-subtitle">UniProt IDs (Selenzyme score)</div>\n+                            <div class="raw-text reaction_info_uniprot_crosslinks"></div>\n+                        </div>\n+                        <!-- Crosslink to Selenzyme -->\n+                        <div>\n+                            <div class="info-subtitle">Enzyme selection</div>\n+                            <div class="raw-text"><span class="reaction_info_selenzyme_crosslink"></span></div>\n+                        </div>\n+                    </div>\n+                    <!-- Information on a selected pathway -->\n+                    <div id="panel_pathway_info">\n+                        <div class="info-title">Pathway</div>\n+                        <div class="info-name"><span class="pathway_info_path_id"></span></div>\n+                        <div class="spacer"></div>\n+                        <!-- Pathway ID -->\n+                        <div>\n+                            <div class="info-subtitle">Pathway ID</div>\n+                            <div class="raw-text"><span class="pathway_info_path_id"></span></div>\n+                        </div>\n+                        <!-- Number of steps -->\n+                        <div>\n+                            <div class="info-subtitle">Number of steps</div>\n+                            <div class="raw-text"><span class="pathway_info_nb_steps"></span></div>\n+                        </div>\n+                        <!-- Thermodynamic -->\n+                        <div>\n+                            <div class="info-subtitle">&#916;<sub>r</sub>G\' (kJ/mol)</div>\n+                            <div class="raw-text"><span class="pathway_info_thermo"></span></div>\n+                        </div>\n+                        <!-- Rule score -->\n+                        <div>\n+                            <div class="info-subtitle">Rule score</div>\n+                            <div class="raw-text"><span class="pathway_info_rule_score"></span></div>\n+                        </div>\n+                        <!-- FBA -->\n+                        <div>\n+                            <div class="info-subtitle">Target\'s production flux (mmol gDW<sup>-1</sup> hr<sup>-1</sup>)</div>\n+                            <div class="raw-text"><span class="pathway_info_target_flux"></span></div>\n+                        </div>\n+                        <!-- Global score -->\n+                        <div>\n+                            <div class="info-subtitle">Global score</div>\n+                            <div class="raw-text"><span class="pathway_info_global_score"></span></div>\n+                        </div>\n+                    </div>\n+                    <!-- In dev stuff -->\n+                    <!-- <div>Information</div>\n+                    <div id="react_img" class="pointer"></div>\n+                    <div id="reversibility" class=\'inf2\'></div>\n+                    <input id="thermo_button" type="button" value="Thermodynamics"/>\n+                    <input id="flux_button" type="button" value="Flux"/>\n+                    <div id="rule" style="display:none;" class="boxinf">\n+                        <div id="sub_rule_score" class="inf2">Rule Score</div>\n+                    </div>\n+                    <div id="thermo"style="display:none;" class="boxinf"></div>\n+                    <div id="flux"style="display:none;" class="boxinf">\n+                        <div id="sub_fba" class="inf2">FBA (mmol/gDW/h)</div>\n+                        <div id="sub_fba_obj" class="inf1">FBA biomass objective</div>\n+                    </div>\n+                    <div id="selenzyme-link"></div>\n+                    <div id="selenzyme_table"></div> -->\n+                </div>\n+\n+            </div>\n+        </div>\n+\n+    </div>\n+\n+</body>\n+</html>\n'