Example of cut and flow (CnF) analysis#

The purposes here are:

  • to show how to use the wrapper functions allowing tha analysis of CnF experiments

  • to illustarte how it is important to consider water and solutes transport in some water stress cases to avoid significative error on hydraulic parameters.

CnF experiment protocol is described in Boursiac et al.. In this work, experiments were performed on Arabidopsis in control condition only therefore analysis was done with the pure water solver of HydroRoot. A second publication, Bauget et al. 2023 was focused on the phenotypage of maize roots under water stress. The authors showed that in this condition solute transport had to be accounting for CnF analysis.

Inputs#

There are 3 kinds of input files:

  • a yaml file with general and mandatory parameters see documentation for details, or example of files in the example directory that are well commented.

  • a csv file with CnF data mandatory for any CnF analysis, for example example/data/maize_cnf_data.csv.

  • a csv file with flux vs pressure (JvP) needed only with the solute-water solver, for example example/data/maize_JvP_data.csv.

cnf_data.csv#

csv file containing data of cut and flow data of with the following columns:

  • arch: sample name that must be contained in the ‘input_file’ of the yaml file

  • dP_Mpa: column with the working cut and flow pressure (in relative to the base) if constant, may be empty see below

  • J0, J1, …, Jn: columns that start with ‘J’ containing the flux values, 1st the for the full root, then 1st cut, 2d cut, etc.

  • lcut1, …., lcutn: columns starting with ‘lcut’ containing the maximum length to the base after each cut, 1st cut, 2d cut, etc. (not the for full root)

  • dP0, dP1,.., dPn: column starting with ‘dP’ containing the working pressure (in relative to the base) of each steps (if not constant): full root, 1st cut, 2d cut, etc.

JvP_data.csv#

csv file containing data of Jv(P) data of with the following columns:

  • arch: sample name that must be contained in the ‘input_file’ of the yaml file

  • J0, J1, …, Jn: columns that start with ‘J’ containing the flux values of each pressure steps

  • dP0, dP1,.., dPn: column starting with ‘dP’ containing the working pressure (in relative to the base) of each steps

Complements#

  • CnF experiments and analysis with pure water solver (parameters.yml and cnf_data.csv inputs), see Boursiac et al..

  • CnF experiments and analysis with solute-water solver (parameters.yml, cnf_data.csv and JvP_data.csv inputs), see Bauget et al. 2023.

  • modeling principles in HydroRoot documentation.

This notebook calls python scripts calling the wapper functions.

[1]:
import warnings
warnings.filterwarnings('ignore')

Maize root in control condition#

Solute-water solver#

Here an example of a maize root with measurements done in hydroponic solution (control), in the parameters file parameters_Ctr-3P2.yml hydraulic and solute transport parameters have been already optimized to get the best fit (lines in the plots) of data (dot).

[2]:
%run example_cut_and_flow_water_solute.py parameters_Ctr-3P2.yml
running time is  2.2715487480163574
../_build/doctrees/nbsphinx/example_examples_cut_and_flow_3_1.png

Pure water solver#

The same input parameter file with the pure water solver (no solute transport).

[3]:
%run example_cut_and_flow_pure_water.py parameters_Ctr-3P2.yml
../_build/doctrees/nbsphinx/example_examples_cut_and_flow_5_0.png

We can note that the fit of data is not as good as simulation with water-solute solver. Let’s do run a fit with pure water solver.

[4]:
%run example_cut_and_flow_pure_water.py parameters_Ctr-3P2.yml -op -v
*********** pre_optimization ************************
pre-optimization ar: 9.34e-01
pre-optimization ax: 1.01e+00
****************************************************************
finished minimize K: [ 2.99e-04, 7.19e-04, 3.17e-03, 3.17e-03, 5.07e-03, 5.85e-02, 1.43e-01 ]
finished minimize k0: , 1.63e+02
          plant  cut length (m)  max_length  k (10-9 m/s/MPa)  length (m)  surface (m2)  Jv (uL/s)  Jexp (uL/s)
0  Exp03_P2.txt          0.0000      0.4340        163.141792       3.979      0.005644   0.101705     0.098667
1  Exp03_P2.txt          0.0623      0.3717        163.141792       3.915      0.005432   0.101730     0.105333
2  Exp03_P2.txt          0.1374      0.2966        163.141792       3.829      0.005172   0.102061     0.101444
3  Exp03_P2.txt          0.1847      0.2493        163.141792       3.694      0.004912   0.103611     0.103667
4  Exp03_P2.txt          0.2305      0.2035        163.141792       3.468      0.004547   0.119508     0.119500
5  Exp03_P2.txt          0.2982      0.1358        163.141792       2.947      0.003785   0.184774     0.184778
      x     K 1st  K optimized
0  0.00  0.000230     0.000299
1  0.06  0.000227     0.000719
2  0.13  0.022300     0.003172
3  0.18  0.021960     0.003172
4  0.23  0.021720     0.005069
5  0.29  0.025770     0.058471
6  0.43  0.195400     0.142783
../_build/doctrees/nbsphinx/example_examples_cut_and_flow_7_1.png

We can note that there are no significant differences between hydraulic parameters from water-solute and pure water solver in control condition.

Maize root in control condition#

Solute-water solver#

Here an example of a maize root with measurements done in a PEG solution (150 g/l) simulating water stress, in the parameters file parameters_150-5P13.yml hydraulic and solute transport parameters have been already optimized to get the best fit.

[5]:
%run example_cut_and_flow_water_solute.py parameters_150-5P13.yml
running time is  1.2109487056732178
../_build/doctrees/nbsphinx/example_examples_cut_and_flow_10_1.png

pure water solver#

[6]:
%run example_cut_and_flow_pure_water.py  parameters_150-5P13.yml
../_build/doctrees/nbsphinx/example_examples_cut_and_flow_12_0.png

Here the fit is very bad. Let’s run a parameters optimization with the pure water solver.

[7]:
%run example_cut_and_flow_pure_water.py  parameters_150-5P13.yml -op -v
*********** pre_optimization ************************
pre-optimization ar: 3.95e-01
pre-optimization ax: 7.70e-02
****************************************************************
finished minimize K: [ 1.71e-07, 3.58e-03, 4.49e-03, 6.54e-03, 6.54e-03, 6.54e-03, 6.54e-03, 6.54e-03, 6.54e-03 ]
finished minimize k0: , 1.40e+01
finished minimize K: [ 2.17e-08, 3.74e-03, 4.66e-03, 6.61e-03, 6.61e-03, 6.61e-03, 6.61e-03, 6.61e-03, 6.61e-03 ]
finished minimize k0: , 1.40e+01
           plant  cut length (m)  max_length  k (10-9 m/s/MPa)  length (m)  surface (m2)  Jv (uL/s)  Jexp (uL/s)
0  Exp05_P13.txt        0.000000    0.299000         14.012456       0.954      0.001796   0.005817     0.005282
1  Exp05_P13.txt        0.039098    0.259902         14.012456       0.913      0.001663   0.009844     0.009976
2  Exp05_P13.txt        0.083459    0.215541         14.012456       0.869      0.001521   0.011526     0.011560
3  Exp05_P13.txt        0.123762    0.175238         14.012456       0.829      0.001392   0.013332     0.015949
4  Exp05_P13.txt        0.156760    0.142240         14.012456       0.772      0.001255   0.015562     0.014115
5  Exp05_P13.txt        0.189835    0.109165         14.012456       0.680      0.001073   0.019297     0.018726
      x     K 1st   K optimized
0  0.00  0.000019  2.171835e-08
1  0.05  0.031690  3.735261e-03
2  0.07  0.046450  4.660776e-03
3  0.11  0.069210  6.613485e-03
4  0.14  0.073150  6.614899e-03
5  0.18  0.078230  6.614899e-03
6  0.22  0.083380  6.614899e-03
7  0.26  0.088110  6.614899e-03
8  0.30  0.095630  6.614899e-03
../_build/doctrees/nbsphinx/example_examples_cut_and_flow_14_1.png

Therefore without taking account for solute transport we make an error of 62 % on k and 93 % on the max of K

[ ]: