changeset 2:232ad69fc93c draft

planemo upload for repository https://github.com/MetaSys-LISBP/PhysioFit commit 79951a0ab2644ba8ca6615200e9be1a8645d78d4
author workflow4metabolomics
date Tue, 16 Jan 2024 15:42:03 +0000
parents 52dddad92226
children 4e885e541368
files physiofit.xml test-data/KEIO_ROBOT6_1.tsv test-data/config_file.yml test-data/data.txt test-data/flux_results.tsv test-data/output.csv test-data/output_zip.zip
diffstat 7 files changed, 126 insertions(+), 284 deletions(-) [+]
line wrap: on
line diff
--- a/physiofit.xml	Wed Nov 16 17:16:06 2022 +0000
+++ b/physiofit.xml	Tue Jan 16 15:42:03 2024 +0000
@@ -1,278 +1,100 @@
-<tool id='physiofit' name='PhysioFit' profile='21.09' version='@TOOL_VERSION@+galaxy0' python_template_version='3.5'>
-    <description>Extracellular flux analysis</description>
+<tool id='physiofit' name='PhysioFit: extracellular flux calculation' version='@TOOL_VERSION@+galaxy0' python_template_version='3.5' profile='21.05'>
+    <description>PhysioFit is a scientific tool designed to quantify cell growth parameters and uptake and production fluxes</description>
     <macros>
-        <token name="@TOOL_VERSION@">2.2.1</token>
+        <token name='@TOOL_VERSION@'>3.3.2</token>
     </macros>
     <requirements>
-        <requirement type='package' version='@TOOL_VERSION@'>physiofit4galaxy</requirement>
+        <requirement type='package' version='@TOOL_VERSION@'>physiofit</requirement>
     </requirements>
     <command detect_errors='exit_code'><![CDATA[
-
-    physiofit4galaxy --galaxy
-
-    #if $input_selection.input_selector == 'tsv':
-        --data '$input_selection.datafile'
-    #end if
-
-    #if $input_selection.input_selector == 'json':
-        --data '$input_selection.datafile'
-        --config '$input_selection.cfgfile'
-    #end if
-
-
-    #if $basic_settings.lag:
-        -l
-    #end if
-
-    #if $basic_settings.deg_select.deg == 'Yes':
-        -d '$basic_settings.deg_select.degconsts'
-    #end if
-
-    #if $basic_settings.mc_select.montecarlo == 'Yes':
-        -mc '$basic_settings.mc_select.iters'
-    #end if
-
-    --vini '$advanced_settings.vini'
-
-    #if $advanced_settings.sd_select.sd == 'Yes':
-        -s '$advanced_settings.sd_select.stddevs'
-    #end if
-
-    #if $advanced_settings.cm_select.cm == 'Yes':
-        -cm '$advanced_settings.cm_select.conc_met_bounds'
-    #end if
-
-    #if $advanced_settings.fm_select.fm == 'Yes':
-        -fm '$advanced_settings.fm_select.flux_met_bounds'
-    #end if
-
-    #if $advanced_settings.cb_select.cb == 'Yes':
-        -cb '$advanced_settings.cb_select.conc_biom_bounds'
-    #end if
-
-    #if $advanced_settings.fb_select.fb == 'Yes':
-        -fb '$advanced_settings.fb_select.flux_biom_bounds'
-    #end if
-
-    #if $advanced_settings.verbose:
-        -v
-    #end if
-
-    -op '$plots' -of '$fluxes' -os '$stats' -oc '$config' 2> $log
-
-    ]]></command>
+    physiofit
+    --galaxy 
+    --config $configfile 
+    --data $datafile 
+    -or '$recap' 
+    -oz $zip 
+    2> $log 
+    ]]>
+    </command>
     <inputs>
-
-        <conditional name='input_selection'>
-            <param name='input_selector' type='select' label='Choose the input data type to upload (tsv or json config file. For more information please check the documentation'>
-                <option value='tsv'>tsv file</option>
-                <option value='json'>config file (json)</option>
-            </param>
-            <when value='tsv'>
-                <param name='datafile' type='data' format='tabular, txt' multiple='true' label='Upload data file containing biomass and concentration values'/>
-            </when>
-            <when value='json'>
-                <param name='datafile' type='data' format='tabular, txt' multiple='true' label='Upload data file containing biomass and concentration values'/>
-                <param name='cfgfile' type='data' format='json' label='Upload configuration file' />
-            </when>
-        </conditional>
-
-
-        <section name='basic_settings' title='Basic Settings'>
-
-            <param name='lag' type='boolean' argument='--lag' truevalue='-l' falsevalue='' label='Flag to estimate lag phase'/>
-
-            <conditional name='deg_select'>
-                <param name='deg' type='select' label='Select yes to add degradation constants'>
-                    <option value='No'>No</option>
-                    <option value='Yes'>Yes</option>
-                </param>
-                <when value='Yes'>
-                    <param type='text' name='degconsts' value='{}' label='Enter degradation constants in dictionary format (see docs for more information)'>
-                        <sanitizer>
-                            <valid>
-                                <add value='"'/>
-                                <add value='{'/>
-                                <add value='}'/>
-                            </valid>
-                        </sanitizer>
-                    </param>
-                </when>
-            </conditional>
-
-            <conditional name='mc_select'>
-                <param name='montecarlo' type='select' label='Select yes for sensitivity analysis'>
-                    <option value='Yes'>Yes</option>
-                    <option value='No'>No</option>
-                </param>
-                <when value='Yes'>
-                    <param name='iters' type='integer' value='100' label='Number of iterations for sensitivity analysis'/>
-                </when>
-            </conditional>
-
-        </section>
-
-
-        <section name='advanced_settings' title='Advanced Settings'>
-
-            <param name='vini' type='float' value='1' label='Initial value for fluxes to estimate' />
-
-            <conditional name='sd_select'>
-                <param name='sd' type='select' label='Select yes to add standard deviations'>
-                    <option value='No'>No</option>
-                    <option value='Yes'>Yes</option>
-                </param>
-                <when value='Yes'>
-                    <param name='stddevs' type='text' value='{}' label='Standard deviation on measurements. Give SDs in dictionary format (see docs for more information)'>
-                        <sanitizer>
-                            <valid>
-                                <add value='"'/>
-                                <add value='{'/>
-                                <add value='}'/>
-                            </valid>
-                        </sanitizer>
-                    </param>
-                </when>
-            </conditional>
-
-            <conditional name='cm_select'>
-                <param name='cm' type='select' label='Flag to add bounds on metabolite concentrations'>
-                    <option value='No'>No</option>
-                    <option value='Yes'>Yes</option>
-                </param>
-                <when value='Yes'>
-                    <param name='conc_met_bounds' type='text' value='()' label='Bounds on metabolite concentrations. Bounds should be given in tuple format (see docs for more information)'/>
-
-                </when>
-            </conditional>
-
-            <conditional name='fm_select'>
-                <param name='fm' type='select' label='Select yes to add bounds on metabolite fluxes'>
-                    <option value='No'>No</option>
-                    <option value='Yes'>Yes</option>
-                </param>
-                <when value='Yes'>
-                    <param name='flux_met_bounds' type='text' value='()' label='Bounds on metabolite fluxes. Bounds should be given in tuple format (see docs for more information)' />
-                </when>
-            </conditional>
-
-            <conditional name='cb_select'>
-                <param name='cb' type='select' label='Select yes to add bounds on biomass concentrations'>
-                    <option value='No'>No</option>
-                    <option value='Yes'>Yes</option>
-                </param>
-                <when value='Yes'>
-                    <param name='conc_biom_bounds' type='text' value='()' label='Bounds on biomass concentrations. Bounds should be given in tuple format (see docs for more information)' />
-                </when>
-            </conditional>
-
-            <conditional name='fb_select'>
-                <param name='fb' type='select' label='Select yes to add bounds on biomass fluxes'>
-                    <option value='No'>No</option>
-                    <option value='Yes'>Yes</option>
-                </param>
-                <when value='Yes'>
-                    <param name='flux_biom_bounds' type='text' value='()' label='Bounds on biomass fluxes. Bounds should be given in tuple format (see docs for more information)' />
-                </when>
-            </conditional>
-
-            <param name='verbose' type='boolean' argument='--verbose' truevalue='-v' falsevalue='' label='Flag to get debug information'/>
-
-        </section>
-
+        <param name='datafile' type='data' format='tabular, txt' multiple='true' label='Upload data file containing biomass and concentration values'/>
+        <param name='configfile' type='data' format='yaml' multiple='true' label='Upload yaml configuration file containing run parameters'/>
     </inputs>
-
     <outputs>
-    <data name='plots' label='Plots' format='pdf'/>
-    <data name='fluxes' label='Flux_results' format='tabular'/>
-    <data name='stats' label='Stat_results' format='tabular'/>
-    <data name='config' label='Config_file' format='json'/>
-    <data name='log' label='Run_Log' format='txt'/>
+        <data name='recap' label='Summary file' format='csv'/>
+        <data name='zip' label='Results' format='zip'/>
+        <data name='log' label='Log' format='txt'/>
     </outputs>
-
     <tests>
         <test>
-            <param name='input_selection|input_selector' value='tsv' />
-            <param name='input_selection|datafile' value='KEIO_ROBOT6_1.tsv' />
-            <section name='basic_settings'>
-                <param name='lag' value='No'/>
-                <param name='deg_select|deg' value='No'/>
-                <param name='mc_select|montecarlo' value='Yes'/>
-            </section>
-            <section name='advanced_settings'>
-                <param name='vini' value='1'/>
-                <param name='sd_select|sd' value='No'/>
-                <param name='cm_select|cm' value='No'/>
-                <param name='fm_select|fm' value='No'/>
-                <param name='cb_select|cb' value='No'/>
-                <param name='fb_select|fb' value='No'/>
-                <param name='verbose' value='No'/>
-            </section>
-            <output name='fluxes'>
+            <param name='datafile' value='data.txt'/>
+            <param name='configfile' value='config_file.yml'/>
+            <output name='recap'>
                 <assert_contents>
-                    <has_n_columns n='7'/>
-                    <has_n_lines n='7'/>
-                    <has_size value='767' delta='20'/>
+                    <has_text text='experiments'/>
+                    <has_text text='growth_rate'/>
+                    <has_text text='Glc_q'/>
+                    <has_text text='Glc_M0'/>
+                    <has_text text='Ace_q'/>
+                    <has_text text='Ace_M0'/>
+                    <has_text text='optimal'/>
+                    <has_text text='mean'/>
+                </assert_contents>
+            </output>
+            <output name='zip'>
+                <assert_contents>
+                    <has_archive_member path='.*\.svg' min='3'/>
+                    <has_archive_member path='.*\.tsv' min='2'/>
+                    <has_archive_member path='.*\.pdf' min='1'/>
                 </assert_contents>
             </output>
         </test>
-<!--        <test>-->
-<!--            <param name='input_selection|input_selector' value='tsv' />-->
-<!--            <param name='input_selection|datafile' value='KEIO_ROBOT6_1.tsv' />-->
-<!--            <section name='basic_settings'>-->
-<!--                <param name='lag' value='No'/>-->
-<!--                <param name='deg_select|deg' value='No'/>-->
-<!--                <param name='mc_select|montecarlo' value='No'/>-->
-<!--            </section>-->
-<!--            <section name='advanced_settings'>-->
-<!--                <param name='vini' value='1'/>-->
-<!--                <param name='sd_select|sd' value='No'/>-->
-<!--                <param name='cm_select|cm' value='No'/>-->
-<!--                <param name='fm_select|fm' value='No'/>-->
-<!--                <param name='cb_select|cb' value='No'/>-->
-<!--                <param name='fb_select|fb' value='No'/>-->
-<!--                <param name='verbose' value='No'/>-->
-<!--            </section>-->
-<!--            <output name='fluxes' file='flux_results.tsv'/>-->
-<!--        </test>-->
     </tests>
-
     <help><![CDATA[
-.. class:: warningmark
-
-**PhysioFit is a scientific tool designed to i) quantify exchange (production and consumption) fluxes and ii) cell growth
-rate during (batch) cultivations of microorganisms.**
-
-Fluxes are estimated from time-course measurements of extracellular metabolites and biomass concentrations. PhysioFit has been designed to
-calculate fluxes in batch experiments, assuming cells are in metabolic (pseudo) steady-state (i.e. fluxes are constant during the experiment).
-
-**PhysioFit includes the following features:**
-
-   * **calculation of growth rate and extracellular (uptake and production) fluxes**.
-   * if cell growth has some **lag** (e.g. due to adaptation to a novel environment), lag can be taken into account and lag time estimated.
-   * **non-enzymatic degradation** of some metabolites (e.g. DHA or glutamine) can be estimated and taken into account when calculating fluxes.
-   * sensitivity analyses are performed to **estimate the precision of the calculated fluxes**.
-   * **evaluation of the goodness of fit and visual inspection of the fitted curves**.
-   * shipped as a **library** with both a **graphical** and **command line** interface,
-   * open-source, free and easy to install everywhere where Python 3 and pip run,
-   * biologist-friendly.
-
-It is one of the routine tools that we use at the MetaSys team and `MetaToul platform <http://www.metatoul.fr>`_ to calculate fluxes.
-
-The code is open-source, and available on `GitHub <https://github.com/MetaSys-LISBP/PhysioFit/>`_ under a GPLv3 license.
-
-We strongly encourage you to read the `documentation <https://physiofit.readthedocs.io/en/latest/>`_ before using PhysioFit.
-
-    ]]></help>
+        **PhysioFit is a scientific tool designed to quantify cell growth parameters and uptake & production fluxes**
+    
+        Fluxes are estimated using mathematical models by fitting time-course measurements of the concentration of
+        cells and extracellular substrates and products. PhysioFit is shipped with some common growth models, and
+        additional tailor-made models can be implemented by users.
+        
+        **PhysioFit includes the following features:**
+        
+            * **calculation of growth rate and extracellular (uptake and production) fluxes**,
+            * **a set of steady-state and dynamic models** are shipped with PhysioFit,
+            * **tailor-made models** can be constructed by users,
+            * Monte-Carlo sensitivity analysis to **estimate the precision of the calculated fluxes**,
+            * **evaluation of the goodness of fit and visual inspection of the fitted curves**,
+            * shipped as a **library** with both a **graphical** and a **command line** interface,
+            * **open-source, free and easy to install** everywhere where Python 3 and pip run,
+            * **biologist-friendly**.
+        
+        It is one of the routine tools that we use at the
+        `MetaSys team <https://www.toulouse-biotechnology-institute.fr/en/poles/equipe-metasys/>`_
+        and `MetaToul platform <https://mth-metatoul.com/>`_ to calculate fluxes.
+        
+        The code is open-source, and available on `GitHub <https://github.com/MetaSys-LISBP/PhysioFit/>`_ under a GPLv3 license.
+        
+        This documentation is available on Read the Docs (`https://physiofit.readthedocs.io <https://physiofit.readthedocs.io/>`_)
+        and can be downloaded as a `PDF file <https://readthedocs.org/projects/physiofit/downloads/pdf/latest/>`_.
+        
+]]></help>
     <citations>
-        <citation type='bibtex'>
-    @misc{githubphysiofit,
-      author = {Le Gregam, Loic},
-      year = {2022},
-      title = {PhysioFit},
-      publisher = {Peiro et al.},
-      journal = {Appl Environ Microbiol},
-      url = {https://journals.asm.org/doi/10.1128/AEM.00768-19},
-    }</citation>
-        </citations>
-</tool>
\ No newline at end of file
+        <citation type='bibtex'>@article{10.1101/2023.10.12.561695,
+            author = {Le Grégam, Loïc and Guitton, Yann and Bellvert, Floriant and Heux, Stéphanie and Jourdan, Fabien and Portais, Jean-Charles and Millard, Pierre},
+            title = "{Physiofit: a software to quantify cell growth parameters and extracellular fluxes}",
+            year = {2023},
+            month = {10},
+            abstract = '{Quantification of growth parameters and extracellular uptake and production fluxes is central in systems and synthetic biology. 
+                Fluxes can be estimated using various mathematical models by fitting time-course measurements of the concentration of cells and 
+                extracellular substrates and products. A single tool is available to calculate extracellular fluxes, but it is hardly interoperable and 
+                includes a single hard-coded growth model. We present our open-source flux calculation software, PhysioFit, which can be used with any 
+                growth model and is interoperable by design. PhysioFit includes by default the most common growth models, and additional models can be 
+                implemented by users to calculate fluxes and other growth parameters for metabolic systems or experimental setups that follow alternative 
+                kinetics. PhysioFit can be used as a Python library and includes a graphical user interface for intuitive use by end-users and a 
+                command-line interface to streamline integration into existing pipelines.}',
+            doi = {10.1101/2023.10.12.561695},
+            url = {https://doi.org/10.1101/2023.10.12.561695},
+        }
+        </citation>
+    </citations>
+</tool>
--- a/test-data/KEIO_ROBOT6_1.tsv	Wed Nov 16 17:16:06 2022 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,17 +0,0 @@
-time	X	Glc	Ace
-1.69472222222222	6.1992000000000005E-2	NA	NA
-2.3002777777777799	8.6184000000000011E-2	NA	NA
-2.6983333333333301	0.11037599999999999	NA	NA
-3.43611111111111	0.17841599999999999	NA	NA
-3.8211111111111098	0.20865600000000001	NA	NA
-4.2011111111111097	0.3024	NA	NA
-4.5980555555555496	0.378	NA	NA
-4.9950000000000001	0.54583199999999998	NA	NA
-5.3752777777777796	0.60933599999999999	NA	NA
-1.35	NA	13.6276813815462	0.216958848225059
-1.91666666666667	NA	13.5792133323062	0.371914222400848
-2.86666666666667	NA	12.6200457520069	0.707537683463011
-4	NA	11.2499817544224	1.46436775470691
-4.8	NA	9.36560347817446	2.13574936032777
-5.18333333333333	NA	8.20020915137498	2.54657962639804
-5.58333333333333	NA	6.55172432249331	2.88518116059672
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/config_file.yml	Tue Jan 16 15:42:03 2024 +0000
@@ -0,0 +1,23 @@
+iterations: 100
+mc: true
+model:
+  bounds:
+    Ace_M0: (1e-06, 50)
+    Ace_q: (-50, 50)
+    Glc_M0: (1e-06, 50)
+    Glc_q: (-50, 50)
+    X_0: (0.001, 10)
+    growth_rate: (0.001, 3)
+  model_name: Steady-state batch model
+  parameters_to_estimate:
+    Ace_M0: 1
+    Ace_q: 1
+    Glc_M0: 1
+    Glc_q: 1
+    X_0: 1
+    growth_rate: 1
+path_to_data: C:\Users\millard\Documents\GIT\PhysioFit\data_test\Steady-state_model\data.txt
+sds:
+  Ace: 0.2
+  Glc: 0.46
+  X: 0.02
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/data.txt	Tue Jan 16 15:42:03 2024 +0000
@@ -0,0 +1,14 @@
+experiments	time	X	Glc	Ace
+A	0	0.033264	NA	NA
+A	1.18888889	0.051408	NA	NA
+A	2.27694444	0.074088	NA	NA
+A	3.12833333	0.108864	NA	NA
+A	3.77138889	0.139104	NA	NA
+A	4.41555556	0.175392	NA	NA
+A	4.82277778	0.228312	NA	NA
+A	0.06666667	NA	15.81315	0.009505775
+A	1.71666667	NA	15.6035	0.294995312
+A	2.8	NA	13.76795	0.610747733
+A	3.63333333	NA	13.12348	0.997928907
+A	4.26666667	NA	12.69779	1.377281918
+A	4.88333333	NA	11.58289	1.804833542
--- a/test-data/flux_results.tsv	Wed Nov 16 17:16:06 2022 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,7 +0,0 @@
-	optimal	mean	sd	median	CI_2.5	CI_97.5
-X_0	0.030057356085279038	0.031020693652716442	0.01248214419475165	0.029507198033154346	0.011641988888053973	0.058342137145944405
-mu	0.5582759125316301	0.5686092117011008	0.08528431418544957	0.5617732771700231	0.4274326438805963	0.7428252946602405
-Glc_q	-6.4690012286708845	-6.591939336986598	0.9573465913461194	-6.424216065589273	-8.689007040053548	-5.0804721629347975
-Glc_M0	14.102913181701245	14.093239782222746	0.3546457036884282	14.067487732809713	13.440594995883767	14.729084422532983
-Ace_q	2.4965870596545154	2.476648498253909	0.498894590813266	2.4157877116089033	1.7499997734065047	3.472079451670515
-Ace_M0	0.17844344816654867	0.20546717227239447	0.1953912180223188	0.17549120518463776	1e-06	0.7122213079215097
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/output.csv	Tue Jan 16 15:42:03 2024 +0000
@@ -0,0 +1,7 @@
+experiments,parameter name,optimal,mean,sd,median,CI_2.5,CI_97.5
+A,X_0,0.031416046332836525,0.03182035444450761,0.005889446987390569,0.03142333650054849,0.02023327944287703,0.04332078203780423
+A,growth_rate,0.4006864459114259,0.40211131871783157,0.04429485269871631,0.40086534734771084,0.32931826537615494,0.49089693037133325
+A,Glc_q,-9.180022678150166,-9.133793078913406,1.0337255786927726,-8.931030226348817,-11.239908883027535,-7.284934929582838
+A,Glc_M0,15.801477563634192,15.803710474829554,0.22508207962463989,15.808337292505701,15.385041267489758,16.222121607839906
+A,Ace_q,3.8199601365677696,3.7419073047720337,0.39020454597179627,3.7095971504962546,3.0629124776324934,4.595036468507531
+A,Ace_M0,0.0017301878123572975,0.03444074046224758,0.05451955290753988,1e-06,1e-06,0.16366853757506963
Binary file test-data/output_zip.zip has changed