{ "cells": [ { "cell_type": "markdown", "id": "0df6dbb6-e9fa-4ee7-ab8e-1434ff781c54", "metadata": {}, "source": "# RSML architecture" }, { "metadata": {}, "cell_type": "markdown", "source": "Read architecture from RSML file and run a simulation to illustrate how to use the RSML format (http://rootsystemml.github.io/). The architecture is the arabidopsis-simple example from http://rootsystemml.github.io/images/examples/arabidopsis-simple.rsml.", "id": "7531336b2959087c" }, { "cell_type": "markdown", "id": "afe12073-742c-4d01-9c6c-9f869a6ee55a", "metadata": {}, "source": [ "Point to the source files if the notebook is run locally, from a git repository clone for example, without openalea.hydroroot installation, but only the dependencies installed." ] }, { "cell_type": "code", "id": "0c1cd238-190a-4305-9798-1eaa9d712a09", "metadata": { "ExecuteTime": { "end_time": "2025-10-28T13:51:33.835232Z", "start_time": "2025-10-28T13:51:32.658271Z" } }, "source": [ "import openalea.rsml as rsml\n", "from openalea.hydroroot import radius\n", "from openalea.hydroroot.main import hydroroot_flow\n", "from openalea.widgets.plantgl import PlantGL # notebook viewer 3D\n", "from openalea.plantgl.algo.view import view # 2D view\n", "from openalea.hydroroot.display import mtg_scene\n", "from openalea.hydroroot.hydro_io import import_rsml_to_discrete_mtg, export_mtg_to_rsml" ], "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/bauget/Documents/Dev/hydroroot/src/openalea/hydroroot/main.py:99: SyntaxWarning: invalid escape sequence '\\ '\n", " :param k0: (float) - not used radial conductivity in :math:`10^{-9}\\ m.s^{-1}.MPa^{-1}` (Default value = 300) #TODO not used delete it\n", "/home/bauget/Documents/Dev/hydroroot/src/openalea/hydroroot/conductance.py:159: SyntaxWarning: invalid escape sequence '\\ '\n", " \"\"\"Compute the radial conductance k (:math:`10^{-9}\\ m.s^{-1}.MPa^{-1}`) of each vertex of the MTG.\n" ] } ], "execution_count": 1 }, { "metadata": {}, "cell_type": "markdown", "source": "## Read RSML", "id": "7e510298c50f7939" }, { "metadata": {}, "cell_type": "markdown", "source": "Read the RSML file and convert it into a *continuous* MTG. This is a MTG where each root (primary and lateral) is represented by one vertex. The geometry of each root is then stored in g_c.property('geometry').", "id": "a1e32f2755a1b916" }, { "cell_type": "code", "id": "3216455d-1cc9-43de-8508-4cdb5c03222b", "metadata": { "ExecuteTime": { "end_time": "2025-10-28T13:51:33.868348Z", "start_time": "2025-10-28T13:51:33.864276Z" } }, "source": "g_c = rsml.rsml2mtg('data/arabidopsis-simple.rsml')", "outputs": [], "execution_count": 2 }, { "cell_type": "markdown", "id": "f363c8bf-76d9-4d63-8c4d-321bf6eefca8", "metadata": {}, "source": [ "To be used in HydroRoot the MTG has to be converted to a *discrete* form of MTG, i.e. each vertex represent a representative elementary volume of a given length for example $10^{-4}$ m. In HydroRoot the lengths are in meter, therefore we must retrieve the resolution and the unit of the RSML file. " ] }, { "cell_type": "code", "id": "2e3c09cb-8679-4abd-a732-3b5464cf9c24", "metadata": { "ExecuteTime": { "end_time": "2025-10-28T13:51:33.920705Z", "start_time": "2025-10-28T13:51:33.918136Z" } }, "source": [ "resolution = g_c.graph_properties()['metadata']['resolution'] # pixel to unit\n", "unit = g_c.graph_properties()['metadata']['unit']\n", "print(unit)" ], "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "cm\n" ] } ], "execution_count": 3 }, { "cell_type": "code", "id": "47401968-e293-42bd-92b0-a3f9012c7e31", "metadata": { "ExecuteTime": { "end_time": "2025-10-28T13:51:33.968805Z", "start_time": "2025-10-28T13:51:33.966820Z" } }, "source": [ "resolution = resolution * 0.01 # pixel to unit to m" ], "outputs": [], "execution_count": 4 }, { "cell_type": "markdown", "id": "769e6d21-1194-4fa6-9081-4d510f19bd07", "metadata": {}, "source": "## Build the discrete MTG" }, { "cell_type": "code", "id": "e0099d60-5979-40e5-b22c-f157ac0544e3", "metadata": { "ExecuteTime": { "end_time": "2025-10-28T13:51:34.024690Z", "start_time": "2025-10-28T13:51:34.016173Z" } }, "source": [ "g = import_rsml_to_discrete_mtg(g_c, segment_length = 1.0e-4, resolution = resolution)" ], "outputs": [], "execution_count": 5 }, { "metadata": {}, "cell_type": "markdown", "source": "## Run calculation", "id": "998cf09649f99f83" }, { "cell_type": "markdown", "id": "890efb37-ff73-4b96-b790-9e1a5c756ce0", "metadata": {}, "source": [ "Calculate some properties needed to simulate a sap flux from the root under overpressure. " ] }, { "cell_type": "code", "id": "e050dd37-395c-4ecb-a051-0ff93cef029b", "metadata": { "ExecuteTime": { "end_time": "2025-10-28T13:51:34.140165Z", "start_time": "2025-10-28T13:51:34.129716Z" } }, "source": [ "g = radius.ordered_radius(g, 7.0e-5, 0.7) # root radii\n", "g = radius.compute_relative_position(g) # Compute the position of each segment relative to the axis bearing it" ], "outputs": [], "execution_count": 6 }, { "cell_type": "markdown", "id": "67b5a06f-be28-47f0-8d4e-4463cd7c263b", "metadata": {}, "source": [ "Some conductance data versus distance to tip" ] }, { "cell_type": "code", "id": "6bf369fc-df46-4b34-af88-19dbc33f529f", "metadata": { "ExecuteTime": { "end_time": "2025-10-28T13:51:34.157343Z", "start_time": "2025-10-28T13:51:34.154706Z" } }, "source": [ "k_radial_data=([0, 0.2],[30.0,30.0])\n", "K_axial_data=([0, 0.2],[3.0e-7,4.0e-4])" ], "outputs": [], "execution_count": 7 }, { "cell_type": "markdown", "id": "2e7ba80d-715e-48fa-b8fe-5371a21208eb", "metadata": {}, "source": [ "Flux and equivalent conductance calculation, for a root in an external hydroponic medium at 0.4 MPa, its base at 0.1 MPa, and with the conductances set above." ] }, { "cell_type": "code", "id": "7029e8d6-b10b-4c2f-ad78-0672b2d5cb1c", "metadata": { "ExecuteTime": { "end_time": "2025-10-28T13:51:34.235916Z", "start_time": "2025-10-28T13:51:34.212207Z" } }, "source": [ "g, keq, jv = hydroroot_flow(g, psi_e = 0.4, psi_base = 0.1, axial_conductivity_data = K_axial_data, radial_conductivity_data = k_radial_data)" ], "outputs": [], "execution_count": 8 }, { "cell_type": "code", "id": "952edaca-690a-4012-9a2c-0e4a9fa68830", "metadata": { "ExecuteTime": { "end_time": "2025-10-28T13:51:34.297470Z", "start_time": "2025-10-28T13:51:34.292925Z" } }, "source": [ "print('equivalent root conductance (microL/s/MPa): ',keq, 'sap flux (microL/s): ', jv)" ], "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "equivalent root conductance (microL/s/MPa): 0.0014303117762878164 sap flux (microL/s): 0.000429093532886345\n" ] } ], "execution_count": 9 }, { "cell_type": "markdown", "id": "642c80f3-4570-4683-a645-dd024906fe16", "metadata": {}, "source": [ "## Display the local water uptake heatmap\n", "\n", "to reduce notebook size we use here a 2D view but you can use the openalea.widgets `PlantGL(s)` to display an interactive 3D view" ] }, { "cell_type": "code", "id": "5125a231-f685-4ae3-8de0-880d8edf4446", "metadata": { "ExecuteTime": { "end_time": "2025-10-28T13:51:34.531698Z", "start_time": "2025-10-28T13:51:34.356084Z" } }, "source": [ "s = mtg_scene(g, prop_cmap = 'j') # create a scene from the mtg with the property j is the radial flux in ul/s\n", "view(s) # use PlantGL(s) to display in 3D" ], "outputs": [ { "data": { "text/plain": [ "
" ], "image/png": "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V5/gr3/9XIfX1e2lsNMuSVnYaZek3fS3Spj7Kpx7CByyB98fvfba5bz1VkPHF9YT5GFol6QsDO2StBs21MHX/wxfPQoO7b9nr/HnPzcxb97Hyc9v556a3qAZt8dIUhaGdklqw+ZGmDgPfnYKlO5BYG9qSnPFFYt46qkllJX1J5WypbwTA7skZWVol6Qs3qzbFtiXfhr65e3Za8yZ8wpz5rzCo49O4aCDduN2qb2R02MkKSu/iCpJrXh5I9z0T/jDv8PeNcf78I1vnMyHP3xAR5XW89hpl6Ss7LRL0i4sXg+/WgHXHQFFe9hhB3jzzTrWratizJjdvF1qb2WXXZKyMrRL0g7+8g78bi2cdziMKNy711q1qo7XX08xcaJd9qzyMbhLUhaGdkl6jzdq4NMPQv1WKNt3715rw4Y6fvjDxVx99aEdUluP1hy6AElKNve0S9K7ahvh7IfgDx+H/nuxJQa2TYwZNepeysoGUFa2B3dh6m28I6okZWVolySgciscfg+svRByOujfIHNyGnjiiU92zIv1cPG7W2PcISNJu+b2GEm93op34NxH4LBBHRfYX365lqOPLiWno16wp0thYpekLOy0S+rVXngLLlgEvz4Vyoo65jUffngl55zzMhs3frxjXlCS1OvZApLUay15C778B3j/MBjcgRMZv/GNJ/nKVwYT2TnebbE3V5KkrOy0S+qVXqmGX7wB14yH8fvBoIKOed2bb17MxReP4dxzjyIyte+2GDO7JGVjp11Sr7OxDk79FWysgjMPgeIOHO7y4otvcfTRQykoyOm4F+0NnB4jSVnZaZfUq2xphA/PhWWfg9wOblt85zvPM2nSSMaMKe7YF+4tbLVLUqvstEvqNdbUwEE/hqXnwT750KcD2xabNzdQUZFPTs4AJ8bsgbSnTJKy8jIpqVd4eT1840k4dj865Quif/jD68yb92f23z/d8S8uSer13B4jqcd7fh18+XGYfTKML+n419+0qY6lSzfw/e9P5uSTR3T8G/QCkXPaJSkrO+2SerSX18OX58MxQ+HgDprDvqO33trCs89WcPrph3TOG/R4EXGUIja1S1Kr2hXab7vtNo4++mgGDBjAgAEDOO6443j44Yczz8dxzIwZMygtLaVv376ceOKJLF++vMVr1NfXM23aNIYMGUL//v0588wzWbNmTcf8NpL0Hqur4ezf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N3QlkpRcjnyUJAXlDZUkqW122iVJkqSEM7RLkiRJCWdolyRJkhLO0C5JkiQlnKFdkiRJSjhDuyRJkpRwhnZJkiQp4QztkiRJUsIZ2iVJkqSEM7RLkiRJCWdolyRJkhLO0C5JkiQlnKFdkiRJSjhDuyRJkpRwhnZJkiQp4QztkiRJUsLlhi5gT8RxDEB1dXXgSiRJkqQ9sz3Lbs+22XTL0F5TUwPA8OHDA1ciSZIk7Z2amhqKioqyroni3Yn2CZNOp3nllVc48sgjWb16NQMGDAhdUo9RXV3N8OHDPa+dwHPbeTy3ncPz2nk8t53Hc9s5PK+dI45jampqKC0tJZXKvmu9W3baU6kU+++/PwADBgzwP55O4HntPJ7bzuO57Rye187jue08ntvO4XnteG112Lfzi6iSJElSwhnaJUmSpITrtqG9oKCAa6+9loKCgtCl9Cie187jue08ntvO4XntPJ7bzuO57Rye1/C65RdRJUmSpN6k23baJUmSpN7C0C5JkiQlnKFdkiRJSjhDuyRJkpRwhnZJkiQp4bplaL/11lsZOXIkffr0YezYsTz55JOhS0q8P/7xj3z0ox+ltLSUKIq4//77WzwfxzEzZsygtLSUvn37cuKJJ7J8+fIWa+rr65k2bRpDhgyhf//+nHnmmaxZs6YLf4vkmTVrFsceeyyFhYUMGzaMj3/847zyyist1nhu2++2227j6KOPztx577jjjuPhhx/OPO857TizZs0iiiLKy8szj3l+98yMGTOIoqjFUVJSknne87rn3nzzTT7zmc8wePBg+vXrx/vf/36WLFmSed5zu2cOOuignf6bjaKISy65BPC8Jk7czcydOzfOy8uL77jjjvivf/1rfNlll8X9+/ePX3/99dClJdpDDz0UX3PNNfF9990XA/G8efNaPH/99dfHhYWF8X333RcvXbo0Pvvss+P99tsvrq6uzqy56KKL4v333z9esGBB/MILL8QnnXRSfMwxx8RNTU1d/Nskx6mnnhrfdddd8bJly+KXXnopPv300+MDDzwwrq2tzazx3LbfAw88ED/44IPxK6+8Er/yyivx17/+9TgvLy9etmxZHMee047y3HPPxQcddFB89NFHx5dddlnmcc/vnrn22mvjo446Kl63bl3mWL9+feZ5z+ue2bRpUzxixIj4/PPPj5999tl41apV8cKFC+N/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" }, "metadata": {}, "output_type": "display_data", "jetTransient": { "display_id": null } } ], "execution_count": 10 }, { "cell_type": "markdown", "id": "8347bcef-0598-4a0f-9c41-ff5b7d149a03", "metadata": {}, "source": "## Export the MTG to RSML" }, { "cell_type": "markdown", "id": "3e225ee6-77e4-4987-a53e-c76ee823919a", "metadata": {}, "source": [ "At this stage (2022-08-22) only the root length and the branching position are used to simulate architecture in hydroponic solution. The exact position in 3D is not stored in the discrete MTG form and so not exported to RMSL." ] }, { "cell_type": "code", "id": "0b325e5f-99c8-4228-855b-500c7b8e9194", "metadata": { "ExecuteTime": { "end_time": "2025-10-28T13:51:34.895810Z", "start_time": "2025-10-28T13:51:34.542375Z" } }, "source": [ "export_mtg_to_rsml(g, \"test.rsml\", segment_length = 1.0e-4)" ], "outputs": [], "execution_count": 11 }, { "cell_type": "markdown", "id": "0b67dbed-8476-40dd-a178-edf49ac9ebac", "metadata": {}, "source": [ "The resolution of the RSML data is 1.0e-4 and the unit is meter." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.11" }, "widgets": { "application/vnd.jupyter.widget-state+json": { "state": {}, "version_major": 2, "version_minor": 0 } } }, "nbformat": 4, "nbformat_minor": 5 }