From 18223709ee20f7da140135a90ecf7307d635144a Mon Sep 17 00:00:00 2001 From: Seth Bryant Date: Fri, 23 Aug 2024 13:13:39 +0200 Subject: [PATCH 1/9] upload template --- .readthedocs.yaml | 13 +++++++++++++ docs/Makefile | 20 ++++++++++++++++++++ docs/make.bat | 35 +++++++++++++++++++++++++++++++++++ docs/requirements.txt | 2 ++ docs/source/api.rst | 7 +++++++ docs/source/conf.py | 35 +++++++++++++++++++++++++++++++++++ docs/source/index.rst | 22 ++++++++++++++++++++++ docs/source/usage.rst | 34 ++++++++++++++++++++++++++++++++++ 8 files changed, 168 insertions(+) create mode 100644 .readthedocs.yaml create mode 100644 docs/Makefile create mode 100644 docs/make.bat create mode 100644 docs/requirements.txt create mode 100644 docs/source/api.rst create mode 100644 docs/source/conf.py create mode 100644 docs/source/index.rst create mode 100644 docs/source/usage.rst diff --git a/.readthedocs.yaml b/.readthedocs.yaml new file mode 100644 index 0000000..9138a7f --- /dev/null +++ b/.readthedocs.yaml @@ -0,0 +1,13 @@ +version: "2" + +build: + os: "ubuntu-22.04" + tools: + python: "3.10" + +python: + install: + - requirements: docs/requirements.txt + +sphinx: + configuration: docs/source/conf.py diff --git a/docs/Makefile b/docs/Makefile new file mode 100644 index 0000000..d0c3cbf --- /dev/null +++ b/docs/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line, and also +# from the environment for the first two. +SPHINXOPTS ?= +SPHINXBUILD ?= sphinx-build +SOURCEDIR = source +BUILDDIR = build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/docs/make.bat b/docs/make.bat new file mode 100644 index 0000000..9534b01 --- /dev/null +++ b/docs/make.bat @@ -0,0 +1,35 @@ +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR=source +set BUILDDIR=build + +if "%1" == "" goto help + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.http://sphinx-doc.org/ + exit /b 1 +) + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% + +:end +popd diff --git a/docs/requirements.txt b/docs/requirements.txt new file mode 100644 index 0000000..53fc1f3 --- /dev/null +++ b/docs/requirements.txt @@ -0,0 +1,2 @@ +sphinx==7.1.2 +sphinx-rtd-theme==1.3.0rc1 diff --git a/docs/source/api.rst b/docs/source/api.rst new file mode 100644 index 0000000..ec94338 --- /dev/null +++ b/docs/source/api.rst @@ -0,0 +1,7 @@ +API +=== + +.. autosummary:: + :toctree: generated + + lumache diff --git a/docs/source/conf.py b/docs/source/conf.py new file mode 100644 index 0000000..6e9e8c0 --- /dev/null +++ b/docs/source/conf.py @@ -0,0 +1,35 @@ +# Configuration file for the Sphinx documentation builder. + +# -- Project information + +project = 'Lumache' +copyright = '2021, Graziella' +author = 'Graziella' + +release = '0.1' +version = '0.1.0' + +# -- General configuration + +extensions = [ + 'sphinx.ext.duration', + 'sphinx.ext.doctest', + 'sphinx.ext.autodoc', + 'sphinx.ext.autosummary', + 'sphinx.ext.intersphinx', +] + +intersphinx_mapping = { + 'python': ('https://docs.python.org/3/', None), + 'sphinx': ('https://www.sphinx-doc.org/en/master/', None), +} +intersphinx_disabled_domains = ['std'] + +templates_path = ['_templates'] + +# -- Options for HTML output + +html_theme = 'sphinx_rtd_theme' + +# -- Options for EPUB output +epub_show_urls = 'footnote' diff --git a/docs/source/index.rst b/docs/source/index.rst new file mode 100644 index 0000000..03d09a5 --- /dev/null +++ b/docs/source/index.rst @@ -0,0 +1,22 @@ +Welcome to Lumache's documentation! +=================================== + +**Lumache** (/lu'make/) is a Python library for cooks and food lovers +that creates recipes mixing random ingredients. +It pulls data from the `Open Food Facts database `_ +and offers a *simple* and *intuitive* API. + +Check out the :doc:`usage` section for further information, including +how to :ref:`installation` the project. + +.. note:: + + This project is under active development. + +Contents +-------- + +.. toctree:: + + usage + api diff --git a/docs/source/usage.rst b/docs/source/usage.rst new file mode 100644 index 0000000..924afcf --- /dev/null +++ b/docs/source/usage.rst @@ -0,0 +1,34 @@ +Usage +===== + +.. _installation: + +Installation +------------ + +To use Lumache, first install it using pip: + +.. code-block:: console + + (.venv) $ pip install lumache + +Creating recipes +---------------- + +To retrieve a list of random ingredients, +you can use the ``lumache.get_random_ingredients()`` function: + +.. autofunction:: lumache.get_random_ingredients + +The ``kind`` parameter should be either ``"meat"``, ``"fish"``, +or ``"veggies"``. Otherwise, :py:func:`lumache.get_random_ingredients` +will raise an exception. + +.. autoexception:: lumache.InvalidKindError + +For example: + +>>> import lumache +>>> lumache.get_random_ingredients() +['shells', 'gorgonzola', 'parsley'] + From 614ebcd3b811604d7de9c9776472a93474b1cc31 Mon Sep 17 00:00:00 2001 From: Seth Bryant Date: Fri, 23 Aug 2024 20:53:47 +0200 Subject: [PATCH 2/9] build tweaks --- cancurve/dev_test_data/case4_R2/{metadata.txt => readme.txt} | 0 .../dev_test_data/case5_crawl/{metadata.txt => readme.txt} | 0 cancurve/resources.py | 4 ++-- 3 files changed, 2 insertions(+), 2 deletions(-) rename cancurve/dev_test_data/case4_R2/{metadata.txt => readme.txt} (100%) rename cancurve/dev_test_data/case5_crawl/{metadata.txt => readme.txt} (100%) diff --git a/cancurve/dev_test_data/case4_R2/metadata.txt b/cancurve/dev_test_data/case4_R2/readme.txt similarity index 100% rename from cancurve/dev_test_data/case4_R2/metadata.txt rename to cancurve/dev_test_data/case4_R2/readme.txt diff --git a/cancurve/dev_test_data/case5_crawl/metadata.txt b/cancurve/dev_test_data/case5_crawl/readme.txt similarity index 100% rename from cancurve/dev_test_data/case5_crawl/metadata.txt rename to cancurve/dev_test_data/case5_crawl/readme.txt diff --git a/cancurve/resources.py b/cancurve/resources.py index c62ddc9..2e246f1 100644 --- a/cancurve/resources.py +++ b/cancurve/resources.py @@ -2566,9 +2566,9 @@ \x00\x00\x00\x2a\x00\x02\x00\x00\x00\x02\x00\x00\x00\x04\ \x00\x00\x00\x00\x00\x00\x00\x00\ \x00\x00\x00\x36\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ -\x00\x00\x01\x8f\x2c\x3d\x8e\x86\ +\x00\x00\x01\x8f\x34\xf9\xbc\x82\ \x00\x00\x00\x62\x00\x00\x00\x00\x00\x01\x00\x00\x38\x49\ -\x00\x00\x01\x8e\xed\x32\xb4\xed\ +\x00\x00\x01\x8f\x34\xf9\xbc\x82\ " qt_version = [int(v) for v in QtCore.qVersion().split('.')] From b0e85cdb5e15c2e99cd02447b68a8510ca143209 Mon Sep 17 00:00:00 2001 From: Seth Bryant Date: Fri, 23 Aug 2024 22:20:03 +0200 Subject: [PATCH 3/9] start documentation and tutorial --- .gitignore | 2 +- cancurve/bldgs/cc_bldgs_dialog.ui | 18 +-- dev_tools/docs_build.bat | 26 +++++ docs/CONTRIBUTING.md | 7 ++ docs/Makefile | 20 ---- docs/make.bat | 35 ------ docs/requirements.txt | 2 - docs/source/01_getting-started.rst | 87 +++++++++++++++ docs/source/02_user-guide.rst | 104 ++++++++++++++++++ docs/source/03_tutorials.rst | 13 +++ docs/source/api.rst | 7 -- docs/source/assets/01-conceptual-diagram.png | Bin 0 -> 76812 bytes docs/source/assets/01-dialog-welcome.png | Bin 0 -> 54023 bytes docs/source/assets/02-CanCurve-format.png | Bin 0 -> 4443 bytes docs/source/assets/icon_28x20.png | Bin 0 -> 688 bytes docs/source/assets/icon_solid.png | Bin 0 -> 20734 bytes docs/source/conf.py | 29 ++++- docs/source/index.rst | 17 ++- docs/source/usage.rst | 34 ------ tutorial/case1/c01/case1_c00.cancurve | 3 + tutorial/case1/c02/copy_case1_c00.cancurve | 3 + .../case1/c03/copy_copy_case1_c00.cancurve | 3 + .../c04/copy_copy_copy_case1_c00.cancurve | 3 + tutorial/case1/case1_result.cancurve | 3 - tutorial/case1/{metadata.txt => readme.md} | 7 ++ 25 files changed, 298 insertions(+), 125 deletions(-) create mode 100644 dev_tools/docs_build.bat create mode 100644 docs/CONTRIBUTING.md delete mode 100644 docs/Makefile delete mode 100644 docs/make.bat delete mode 100644 docs/requirements.txt create mode 100644 docs/source/01_getting-started.rst create mode 100644 docs/source/02_user-guide.rst create mode 100644 docs/source/03_tutorials.rst delete mode 100644 docs/source/api.rst create mode 100644 docs/source/assets/01-conceptual-diagram.png create mode 100644 docs/source/assets/01-dialog-welcome.png create mode 100644 docs/source/assets/02-CanCurve-format.png create mode 100644 docs/source/assets/icon_28x20.png create mode 100644 docs/source/assets/icon_solid.png delete mode 100644 docs/source/usage.rst create mode 100644 tutorial/case1/c01/case1_c00.cancurve create mode 100644 tutorial/case1/c02/copy_case1_c00.cancurve create mode 100644 tutorial/case1/c03/copy_copy_case1_c00.cancurve create mode 100644 tutorial/case1/c04/copy_copy_copy_case1_c00.cancurve delete mode 100644 tutorial/case1/case1_result.cancurve rename tutorial/case1/{metadata.txt => readme.md} (82%) diff --git a/.gitignore b/.gitignore index 6cedde4..d372f08 100644 --- a/.gitignore +++ b/.gitignore @@ -69,7 +69,7 @@ instance/ .scrapy # Sphinx documentation -docs/_build/ +docs/build/ # PyBuilder target/ diff --git a/cancurve/bldgs/cc_bldgs_dialog.ui b/cancurve/bldgs/cc_bldgs_dialog.ui index d85cdfc..e14729e 100644 --- a/cancurve/bldgs/cc_bldgs_dialog.ui +++ b/cancurve/bldgs/cc_bldgs_dialog.ui @@ -7,7 +7,7 @@ 0 0 800 - 800 + 819 @@ -140,12 +140,12 @@ QTabBar::tab:selected { /* Style for selected tabs */ <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:14px; font-weight:400; font-style:normal;"> -<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">Welcome to the CanCurve </span><span style=" font-size:12pt; font-style:italic;">Buildings</span><span style=" font-size:12pt;"> tool! This tool is designed to create </span><span style=" font-size:12pt; font-style:italic;">Depth Damage Functions</span><span style=" font-size:12pt;"> (DDF) for Canadian buildings.</span></p> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">Welcome to the CanCurve </span><span style=" font-size:12pt; font-weight:600;">Buildings Tool.</span><span style=" font-size:12pt;"> This tool is designed to create </span><span style=" font-size:12pt; font-style:italic;">Depth Damage Functions</span><span style=" font-size:12pt;"> (DDF) for Canadian buildings.</span></p> <p align="center" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/plugins/cancurve/img/icon.png" /></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">The following inputs are required:</span></p> -<p style=" margin-top:12px; margin-bottom:12px; margin-left:16px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt; font-weight:600;">Building Metadata</span><span style=" font-size:12pt;">: These standard flood-related building properties are specified on the </span><span style=" font-size:12pt; font-style:italic;">Building Metadata</span><span style=" font-size:12pt;"> tab. This metadata will be used to populate the metadata of your DDF. Some of the fields are also used in the calculation process.</span></p> -<p style=" margin-top:12px; margin-bottom:12px; margin-left:16px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt; font-weight:600;">Cost Information: </span><span style=" font-size:12pt;">This restoration item and cost data is specifed as a CSV file on the </span><span style=" font-size:12pt; font-style:italic;">Data Input</span><span style=" font-size:12pt;"> tab. Click </span><a href="https://github.com/NRCan/CanCurve/blob/main/tests/data/bldgs/case1/R_1-L-BD-CU_ABCA.csv"><span style=" font-size:12pt; text-decoration: underline; color:#0000ff;">here</span></a><span style=" font-size:12pt;"> for an example. </span><span style=" font-size:14px;"><br /></span></p> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:16px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt; font-weight:600;">Metadata</span><span style=" font-size:12pt;">: These standard flood-related building properties are specified on the </span><span style=" font-size:12pt; font-style:italic;">Metadata</span><span style=" font-size:12pt;"> tab. This metadata will be used to populate the metadata of your DDF. Some of the fields are also used in the calculation process.</span></p> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:16px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt; font-weight:600;">Cost-Item Table: </span><span style=" font-size:12pt;">This table of restoration items and their costs is specifed as a CSV file on the </span><span style=" font-size:12pt; font-style:italic;">Data Input</span><span style=" font-size:12pt;"> tab. Click </span><a href="https://github.com/NRCan/CanCurve/blob/main/tests/data/bldgs/case1/R_1-L-BD-CU_ABCA.csv"><span style=" font-size:12pt; text-decoration: underline; color:#0000ff;">here</span></a><span style=" font-size:12pt;"> for an example. </span><span style=" font-size:14px;"><br /></span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">The following inputs are optional:</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:16px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt; font-weight:600;">Depth-Replacement-Factor (DRF) dataset</span><span style=" font-size:12pt;">: This dataset relates flood depth to the percentage loss or damage of a restoration item and is specified on the </span><span style=" font-size:12pt; font-style:italic;">Data Input</span><span style=" font-size:12pt;"> tab. By default, the DRF dataset shipped with CanCurve will be used.</span></p> <p style="-qt-paragraph-type:empty; margin-top:12px; margin-bottom:12px; margin-left:16px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt;"><br /></p> @@ -201,7 +201,7 @@ p, li { white-space: pre-wrap; } - Building Metadata + Metadata @@ -220,7 +220,7 @@ p, li { white-space: pre-wrap; } 0 - -317 + 0 745 976 @@ -726,7 +726,7 @@ QGroupBox { - On this page, you'll load the data needed for CanCurve to create the depth-damage function + Specify the settings and datasets for your project @@ -797,7 +797,7 @@ QGroupBox { - Cost-Item File: + Cost-Item Table File: @@ -1948,7 +1948,7 @@ QLabel { - + diff --git a/dev_tools/docs_build.bat b/dev_tools/docs_build.bat new file mode 100644 index 0000000..120794f --- /dev/null +++ b/dev_tools/docs_build.bat @@ -0,0 +1,26 @@ +:: Building CanCurve sphinx documentation (w/o RTD) + + + +:: activate docs environment +call l:\09_REPOS\01_COMMON\sphinx\env\conda_activate.bat + +:: call the shpinx make script +:: call %~dp0..\docs\make.bat html +:: difficult to customize + + +:: change to documentation + +cd %~dp0..\docs + +:: call builder CLI +ECHO on + +sphinx-build -M html .\source .\build --jobs=4 --verbose --show-traceback --nitpicky --warning-file=.\build\sphinx_warnings.txt + + +:: launch it +call build\html\index.html + +cmd.exe \ No newline at end of file diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md new file mode 100644 index 0000000..b5dde4a --- /dev/null +++ b/docs/CONTRIBUTING.md @@ -0,0 +1,7 @@ +#CanCurve documentation + +CanCurve uses Sphinx and ReadTheDocs + +## build sphinx documentation locally +need a python environment w/ sphinx +call .\dev_tools\docs_build.bat \ No newline at end of file diff --git a/docs/Makefile b/docs/Makefile deleted file mode 100644 index d0c3cbf..0000000 --- a/docs/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -# Minimal makefile for Sphinx documentation -# - -# You can set these variables from the command line, and also -# from the environment for the first two. -SPHINXOPTS ?= -SPHINXBUILD ?= sphinx-build -SOURCEDIR = source -BUILDDIR = build - -# Put it first so that "make" without argument is like "make help". -help: - @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) - -.PHONY: help Makefile - -# Catch-all target: route all unknown targets to Sphinx using the new -# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). -%: Makefile - @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/docs/make.bat b/docs/make.bat deleted file mode 100644 index 9534b01..0000000 --- a/docs/make.bat +++ /dev/null @@ -1,35 +0,0 @@ -@ECHO OFF - -pushd %~dp0 - -REM Command file for Sphinx documentation - -if "%SPHINXBUILD%" == "" ( - set SPHINXBUILD=sphinx-build -) -set SOURCEDIR=source -set BUILDDIR=build - -if "%1" == "" goto help - -%SPHINXBUILD% >NUL 2>NUL -if errorlevel 9009 ( - echo. - echo.The 'sphinx-build' command was not found. Make sure you have Sphinx - echo.installed, then set the SPHINXBUILD environment variable to point - echo.to the full path of the 'sphinx-build' executable. Alternatively you - echo.may add the Sphinx directory to PATH. - echo. - echo.If you don't have Sphinx installed, grab it from - echo.http://sphinx-doc.org/ - exit /b 1 -) - -%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% -goto end - -:help -%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% - -:end -popd diff --git a/docs/requirements.txt b/docs/requirements.txt deleted file mode 100644 index 53fc1f3..0000000 --- a/docs/requirements.txt +++ /dev/null @@ -1,2 +0,0 @@ -sphinx==7.1.2 -sphinx-rtd-theme==1.3.0rc1 diff --git a/docs/source/01_getting-started.rst b/docs/source/01_getting-started.rst new file mode 100644 index 0000000..efecdcd --- /dev/null +++ b/docs/source/01_getting-started.rst @@ -0,0 +1,87 @@ +Getting Started +================== +The following sections will help you get started using CanCurve. +We suggest reading these first before moving onto the rest of the documentation. + + +.. _sec01-install: + +Installation +------------ + +To install CanCurve, you first need to install QGIS, then you can install CanCurve from the Plugin Repository. + +For detailed instructions, refer to the `project page README `_. For best performance, ensure you have the specified version of QGIS installed. + + +.. _sec01-overview: + +Overview +----------------------- +CanCurve is a collection of tools for generating Depth Damage Functions (DDF) used by platforms like `CanFlood `_ to create flood risk models. +CanCurve's :ref:`Buildings Tool ` for example facilitates the creation of Depth Damage Functions (DDF) from detailed restoration cost data for archetypal buildings. + +This tool joins a table of restoration activities (e.g., repair dry-wall for $1000), called the :ref:`Cost-Item Table `, to a database of information on the flood vulnerability of those items, called the :ref:`Depth-Replacement-Factor (DRF) Database `. +After identifying the target building or archetype for which a user would like to construct a DDF, typically a Cost-Item table is prepared using local pricing tables and expert knowledge on the restoration of the building. +For the DRF Database, either the version shipped with CanCurve can be used (default), or an alternate file can be specified. +Once these inputs and the buidling metadata are prepared and entered into the Buidlings Tool, the four *Curve Creation* steps can be run to create and export a DDF in :ref:`CanFlood format `. + + +:numref:`fig01-conceptual-diagram` provides a diagram of how the remote, local, and project datasets are related. +See the :ref:`Quick Start Guide ` to learn more. + +.. _fig01-conceptual-diagram: + +.. figure:: /assets/01-conceptual-diagram.png + :alt: Conceptual Diagram + :align: center + :width: 900px + + Conceptual diagram of the CanCurve Buildings Tool. + + +.. _sec01-quick: + +Quick-Start +----------------------- +After installation of the plugin, the |CanCurve_icon| icon should appear on your plugins toolbar. +If you don't see the icon, first check the plugin is **checked** on the **Installed** tab of the **Manage and Install Plugins..** dialog; then check the **plugins toolbar** is enabled by right-clicking the QGIS toolbar. + +.. |CanCurve_icon| image:: /assets/icon_solid.png + :align: middle + :width: 14 + +Click the |CanCurve_icon| to open the :ref:`Buildings Tool ` dialog. + + +.. _fig01-dialog-welcome: + +.. figure:: /assets/01-dialog-welcome.png + :alt: Welcome Tab + :align: center + :width: 900px + + Welcome tab of the Buildings Tool. + +To use the tool to create a DDF from data for an archetypal building, first populate the **Metadata** tab with whatever information is available (see the :ref:`Tutorials ` section for example data). +To specify settings, the :ref:`Cost-Item Table `, the :ref:`Depth-Replacement-Factor (DRF) Database `, and the `Fixed Costs ` data, complete the **Data Input** tab. +Finally, the four curve creation steps can be executed from the **Create Curve** tab, ending in an export of your DDF in :ref:`CanFlood format `. + + +See the :ref:`User Guide ` and the :ref:`Tutorials ` to learn more. + + +.. _sec01-faq: + +Frequently Asked Questions +-------------------------- + +**Where can I find Cost-Item data for my archetype?** + Typically these are provided by cost restoration experts using specialized software like Xactimate. + +**How can I add entries to my Depth-Replacement-Factor (DRF) Database** + You'll need to use some software that allows editing of SQLite databases. We recommend `DB Browser for SQLite `_. + + + + diff --git a/docs/source/02_user-guide.rst b/docs/source/02_user-guide.rst new file mode 100644 index 0000000..66f7b6c --- /dev/null +++ b/docs/source/02_user-guide.rst @@ -0,0 +1,104 @@ +.. _sec02-userGuide: + +User Guide: Buildings Tool +========================== + +.. _sec02-bldgs: + + + +This tool is designed to create Depth Damage Functions (DDF) for Canadian buildings from detailed restoration cost data for an archetypal structure. +CanCurve's *Buildings Tool* basically joins this cost data to a database of item vulnerability then groups the data by depth to create a simple function for *flood damage* against *flood depth* (with some additional features of course). + +Introduction +------------- +The devastation of the 2013 Southern Alberta and Toronto Floods triggered a transition in Canada from the traditional standards-based approach, where flood protection is designed for a single level-of-safety, towards a risk-based approach. +This new risk-based approach recognizes that robust planning must consider vulnerability and a range of floods that may harm a community, rather than focusing on a single design event. +The foundation of this new approach are *flood risk models*: a collection of procedures, algorithms, and mathematical functions used to simplify, study, and quantify the components of our world that relate to flood risk. +At the core of most flood risk models are a set of flood damage functions. + +Depth Damage Functions (DDF) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Flood damage functions are a mathematical relationship between hazard and vulnerability variables (e.g., flood depth) and the estimated damages from flooding (e.g., building repair costs) for an individual asset. +The most basic functions directly relate flood depth to damage --- so-called depth-damage curves or functions (DDF) widely attributed to Gilbert White [#]_. +Damage functions are typically categorized based on the model's focus or objective, such as the sector (residential vs. non-residential), tangibility (tangible vs. intangible), damage mechanism (indirect vs. direct), and uncertainty treatment (deterministic vs. probabilistic) [#2]_. +Further classification considers function structure such as continuity (discrete vs. continuous) and for tangible economic functions the asset total value relation (relative vs. absolute). +While depth-damage functions are still common, research in the past two decades has advanced the understanding of flood damage processes and, along with new data and techniques, has led to more sophisticated and accurate multi-variate models [#3]_. + + +Flood Risk Modelling in Canada +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +NRCan develops and maintains flood risk software and data tools to promote disaster resilience. +In particular, NRCan maintains `CanFlood `_, a QGIS plugin for building flood risk models. +A major input or component of CanFlood models are depth damage functions (DDFs). +Traditionally, CanFlood users struggled to obtain DDFs from past projects or public repositories, leading to inefficient and inaccurate risk modelling. +To address this gap, in 2023 NRCan commisend Arcadis to develop a system for constructing local DDFs in Canada. +This resulted in a formal process for constructing DDFs called Program for the Development of Flood Damage (Vulnerability) Curves for buildings in Canada (a.k.a. the DDF Program or DDFP). +To operationalize DDFP, NRCan initated the CanCurve project which is intended to support accurate and efficient flood risk modelling in Canada, specifically by improving practices surrounding depth damage functions in CanFlood. + + + +Data Requirements +----------------- +The Buildings Tool requires three types of data about the archetypal building in order to generate a DDF. + +Building Metadata +~~~~~~~~~~~~~~~~~ +Metadata includes any information that might be relevant to estimating the flood vulnerability of an archetype, like the year of construction, the date associated with the cost estimate, the person preparing the estimate, etc. +This information is used by the Buildings Tool to populate metadata fields on output DDFs and, in some cases, to assemble the DDF. +Metadata is specified on the *Metadata* tab. +The user is expected to obtain this information from expert knowledge and documentation on the archetype. + +.. _sec02-costInformation: + +Cost Information +~~~~~~~~~~~~~~~~ + +This restoration item and cost data is specifed as a CSV file on the Data Input tab. Click here for an example. [Click here for an example]. + +.. _sec02-DRF: + +Depth-Replacement-Factor (DRF) Dataset +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +This dataset relates flood depth to the percentage loss or damage of a restoration item and is specified on the Data Input tab. By default, the DRF dataset shipped with CanCurve will be used. + +.. _sec02-fixedCosts: + +Fixed Costs +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +This simple dataset has two simple values, the fixed costs for the restoration of the basement and the mainfloor. +This represents the sum of all depth-invariant cost items for each floor. +For example, mobilization costs or permit fees --- restoration costs that would be incurred no mater how severe the flood exposure. + + +.. _sec02-CanFloodFormat: + +CanFlood Format DDF +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +The `CanFlood `_ program expects DDFs to be in a certain format, namely an XLSX file with two columns divided into two sections. +The first section contains the metadata in key-value pairs while the second section contains the exposure-impact series. +CanFlood requires three keys in the metadata section: +- **tag**: used for linking the curve to the inventory. +- **impact_units**: used for indicating what units the impact values are in (e.g., $CAD) on plots and reports. +- **exposure**: used to indicate the transition between the metadata and the exposure-impact sections. +It is good practice to include additional metadata (e.g., location); however, these are not strictly required by CanFlood. +Below is a minimum example CanFlood format DDF. + + +.. _fig02-CanCurve-format: + +.. figure:: /assets/02-CanCurve-format.png + :alt: CanCurve format + :align: center + :width: 900px + + Conceptual diagram of the CanCurve Buildings Tool. + + + +.. [#] White, G. F.: Human Adjustment to Floods. A Geographical Approach to the Flood Problem in the United States, The University of Chicago, Chicago, 1945. + +.. [#2] Merz, B., Kreibich, H., Schwarze, R., and Thieken, A.: Review article “Assessment of economic flood damage,” Nat. Hazards Earth Syst. Sci., 10, 1697–1724, https://doi.org/10.5194/nhess-10-1697-2010, 2010. + +.. [#3] Schröter, K., Kreibich, H., Vogel, K., Riggelsen, C., Scherbaum, F., and Merz, B.: How useful are complex flood damage models?, Water Resources Research, 50, 3378–3395, https://doi.org/10.1002/2013WR014396, 2014. + diff --git a/docs/source/03_tutorials.rst b/docs/source/03_tutorials.rst new file mode 100644 index 0000000..4707727 --- /dev/null +++ b/docs/source/03_tutorials.rst @@ -0,0 +1,13 @@ +.. _sec03-tutorials: + +Tutorials +========================== + +A collection of example data and results + +.. _sec03-tut01: + +Tutorial 1: 1-Story Residential +---------------------------------- +This tutorial will teach you how to create a DDF from a Cost-Item table and some default values + diff --git a/docs/source/api.rst b/docs/source/api.rst deleted file mode 100644 index ec94338..0000000 --- a/docs/source/api.rst +++ /dev/null @@ -1,7 +0,0 @@ -API -=== - -.. autosummary:: - :toctree: generated - - lumache diff --git a/docs/source/assets/01-conceptual-diagram.png b/docs/source/assets/01-conceptual-diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..ee36b24a5e07c16cdd5c3489effafcdfc8854246 GIT binary patch literal 76812 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%0D;wMny=3DD;} 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%0DiohOX1ZWtEl6foF(d5YnBG z^fw|`O6xi%GrckQQ!8Drj-J&{&6q|fllJo?j}5I1zkYNT`sWFXy}$RJ>#1C_gol*6 zXV@5rP0C}~CL>z)!VPA&GJojm>&JKSPuT3pVo+AKGhM}n^p-L>6NDzmj9U#_R&nka z;l7AR9O^`asUfAFPoqFST7sNJ5|cV}zv zzTHjw!D)M@XB7YowBSG7DO&C7PX>%D2tjBTzOgN*wyl6T8iq;o6@02&R@i;S)zp85 z=-=uI1q1JHcF2kfl-ZtH zGh;MT(E`4-^B5=LWySLCo5O-L0i-3rg><%L>)SC8mbv8F9n5n^9;mbokQyDw8G%0) zP}iOOT&M`PRxzN+v5R2H{6h`@#+I_GNXPw0zYZdRIJ&TyYrr&iwGyc8y5SmGiy7lu zy`({$tk4i1Tk(eDouz!Xzr*2d!fOIr9vf4{GZa=TEAGl|%fYip7mR-*SCs-+Z64L1 ztUF7DAodZP}YRP6pomU~XqM5{j1Q$h=G`+i5O z99YTDNsn6Yj5!X!dqr~_84%X$f9!MoYs)aG_H&>v){4>rcSlo4sL9>9H)<6FO+D1L zDm@&;?O1?e8%dazra;#`sZxjF{NTLZh1diIF3P=hgDX1a3iUy0ujG+VU0J;((6C65 zXMFA1W;c$$loNt;5X~Gngv&0*$a*y$ffIhS$ZM%!^*=yp})?g zr59OBlb6}X>Zl{_p0V`(bJD=*HDQ@Mdn%%u=KdMAs0vi?t8`~39HpzSo#YInUz+dUi49V#lt={_ym}w#wdfF5F+3#mSW=h{=*IF+tV`(X`RdSB({hP{!ymPLLoz(AgcQc)M&++|S znj9wii1brN=VQCu*4>TBn}$oXa*LaJVA`XreJ1YFsKrV`@y!=@i%#cBR(}U`+F|#U z+KU&?*BdFTg$6N_Ykw8u)CHw%X?n$IjRyvFY`m)MO_x#?bWH*sy^iZm8qy^Vx$)~) zptb<*#cebc@$rtWI=qc<{OtUc=Og+f=62E)Nf9HW;xE&<%UOA27mCoW+-*Kt{EyjK zm6cG-XkLW%#)rJP?b6Z8$j^g53Sa~t&Qa2M0c~x5vazh5leGaMSk_3jy*T2yN0^r`=AThX zgq4ZaA3DJam9&!@Ojr{t6m+KJJ}bIK0EggWggAf;18EP>nTS2{AhSe zrNAPGBV=E0i|r4$WV@`^KbtX&3F77pwdKL>MSjDpC9Ns@_TfoZ)YVuA@siaQ&mi6oZr>-B+V|N!i)YI)3 zoH8F@RYyVOh_bz}s3dR4z2(lm5q4w}Ju-9{x|utf#-j{waQ#w&iM?HuRZx}v?#BC5 zdg8Z8aiZa_8d|!$I!vmV?60i$R$Z&xk0htMYcMHAuV6KA@4=4BU7s1_HD&~$<3X+J zf+@cG6diNxivGVExnDE;^` zMbF1dV(n_>=3}qos1LIzB9JoCZbl~N5_=46xtNb4jcGQ8N$4=G16P&k%m)3Z89(7J zkPPWT8>XHrcWKrV%&lN9oj>Q#Z!c&Tt&n;@uu;>RHF^@;pvqcm8Oonc>G@fySq?p& z1(E%vD$&1^edg=x6q8(uQWc9|>_OyysPFW6Lc>_5Sj-lcejufx+|y6l*RSa3Ss%`} z=)p5_avQMM(ZJzA3XMecX0CbDVHz9s0IW3n&lh8c#@eh~PljZui&rRz9g00|-!?() zRC0fLaYr{>W#~2n68G&NNS)?1EDej=GZOc9AV{$|{&f;EnGr757o)xZxArz`dY)t9jkMD(>y^-Y_5c)3E0HL$rk3o@K(UuBw767PX27z zR8PKj$Di?bZ~;8`Uj75LmO2cROlc}W*Du&wt3_pvHzHKt}97AddW<@kLj>7SFyt%Q8iHKyHhyl%vFta*Wk z%#7a@oqSA+^>Bys)1Q_yh+3Q(uFssirpAz^pfn62Tt+XP6X+VA@Fr3;>Yc`C#Sot0 z3QXY-19jF?h;B#)rZk&v3RGzy;I&gf)G*Yl_OP8+%q4vHmzj^RennaRnCXuRHpH+eubyKPD-yU_x2E*2hiJ+vY3IP|B}mY&P^C+%Emu& zC-GomxKqR$EI${!PIh`jF z4GTY?eX9{dK+bV#QB{_r`p&^$Nh2ew++LkSTrQgR&KBM zc!g7BnzK^l$~7jgi70#-AyL{ISeJ)wRM-Sy#Azkgix(-*M@E<3I3(gn-a7P(CHLF> z-`QlAZU?8mwr*d6&&{`c1rTomV8>w!SFVOaa4E!Bkc6MHdOrv=z=b_}Hi-PZsC|!$ zFq#zUD*TUM7_r_Y(&77NRg|LK)oU)7qGLyyw6d)&GKHV(bMyI2LMB^ov6NW+D{6or zKh~?X1`rw7{{)J4iQnxGmo^>szRR#7w;Il&gkU%368WoejR)N|8;#*@BW&AM#1E%xlS&-a60g}B*w$uduQ6N}oZKSdgOS9&AQ_}R%tic;o!acu-L z$D6M=$J+*Gvi9+A6XAD$bp*;)_eFc*qg8jMTjemoQ{K=IlnK90%^++T&^f+QH>ZS z>C9w|4hEGssmgor8vC{CC=NLYqoPTOt|aZX?~UisgD5I@VS@LbK;5bQ*BtI<>+MdxOe*rF>7{Kc}s?Y?N#3^X!A+^ z_v)|RVt;i9O7_UypH`5uKIYYhF$af>Hg-9UPL92k zqqFBh!8tGb%W!BX|2%)q{Fk<@C5XU%PGi!g8g`(h${j9%8%#nz?qkdz6cuxbe9X@@ z+PvC4e6_2y61c&ZRwD)WFC0rSuc3bx$vMi~9QLp+~o%F5-?~Pu#d(*Kk#1%0pw+v7`Hgzt1tLUC7)lB&}`D)7V8ir%`y< zas8pYBQZX2W1@2MrK-u#E+vC{3>3)3H9Il3Bh=_cadGSyeK>nVwqTReno=0ir0XF{ zTd`LzZRR2!LB0?qx$r4@Qw<}D<`*J@?{)-7jN=I%^YI!#X>l2uBBmadF7#zkja9a{ zM3!!@^Ch(y4X&AhQRJlKkr5tG9xx^bUFXTfKWOf*YAufoKBheF$6{}UXe(f!5ZXjH zyYbdaF3r~&0UPl9H&R-DxR`dgD$SBdGWT>e^-SB_L~>g9`w>}M+Zr^m9Jy@#tWopW zdnNgoyiL>1RNw}={w19J4-#WPUB#%#yC_Mnnmz}=Tj`o#BKmo@?yVP7)iy5OSes@H zDUhlq82HNS=g`<9Je#3$1Y0NP)lCjUA@#A(01QE6!?&*+ueE(Fv`(sA!Cc#uMS2J|?~|9jf9BJt)L z8$$SZ8H~gyDw_G-ofb_QLo2^j{eB>|E*m&p|7#HNOxddNDk3Hh)Gnw9Z};56h28qS zMkb=s6_~GLjJTavNVj5}2pF^Q^FRNNd(<0Cm&+WY*}jmd{x$~m)L^ETg7@jP^iPw| z_kZ6>b&ZR0oO3NHEhue;?1_K7GlAA~dUnJu-)T8kmsn!`Gc}UGp#D1u_aY||UJRhv z>=V#EWzf$KU9vTKTgwVE!wsckmI(PdHmhi+G9<5IRHEg$d*BL!JILwkiA5V2dp(;m zYz$oJJk&>6IAv_{Z#w@r=@*jWHBq~n)NaX@ z@j*=lCRniKQcGvVsvocEOzYP{e}y1~8al2HdaZ*F6hIvlK;mht{D~FzaE;x%y6Vqx z2?xkPCJ2|3i4gpvLJb+A>JMV{-4hh?U<@{Uli)OnT}qBxFt^G4(csp)a++L(b=BuT z)wmmc6Km#*bh&2=ZiK@bIw^F$u}AN*jc{40G{!`CGRyTzFyC?ObFdF>xh_G2F%>>^ zE`O3npGc$rR}vzC%g;$a*OZ|wIrIsvz-_ed*E+fD2;`)%{);SSw$#N>6!Gxz&V=3c z2=>bFOxA>Y%DL81Ett5xPbHjl!#kVKh%;L2p44iGFo*cHXAHqC`ToH5E6--GNq3eC z5Ug;L#6MPAHar6OaWX~AM#?LFHS`$HYH?+v&!%O-Ge=$LcI5fkI4CVDJqNh0V;lYq zJD7J?;CO;aDk!G?60ew9K)A-(mC-b=i_x#*D?ar6lrfXH!cqY-s#Ta@??aOF$F{US z%+Y^s_ym<=2V>ocNtiEePY2LQOHS4)#Wc8c!iiR4H zaCPVHoEK%QHnq`P9J5|?fEYZzA~(Z`UYrhqU8JYzsWg5+V^Nyj^#0uG0bd{JjH1v*0QtCdP{=V_{zgTdD{ zLD4<8fSIU&LGTvhd^0bm-+>$Z6V=mha67wv)XpM?3p|N0R8>dNpS0vLU!l zmOOvV$Nh?gj>G2#_~5w+7O_6tmh+x_$|@|65OSlTXnKkWMSO0Xr!uRIyy5J<+W+-v zE4mQji57|JM*<~FwE|d<7fWhlF5>LajP<8L5ng*?h{J5u3G=( zl8ME96*qPEn~m__Rq$7)){ve|=BLpU3INFw0)Pc4LJ>7TnK`G9v1!|g?DOK(k^Ylx zj=dA_@P=V?ZWY}QXIJfLcQZ!;%Kleeg+wFjWrE-(cU;~V$DW-xdptr#8ax`~eYITY z6W4gmV&P6Lwrfk5l4#yCvP0z!2(DY~aRNqZmqj=ANYHK@7AXh$pFO)Le!6Cpb*7%M zoH1u11UtmeRz>>xpPVIki<~1^)w~k4nF;$lAz@CmV_QRzEgAmo>NiXu^Nf)nQr~KG zLt4j}o9CzU?fo`}uAz9~W=2%!1#*iXCh|1CP~**5tvz$Q zMTz;;F`1_X#Qo+eO*0GH+k;2w3Rrs;#+%bh%*E+(xC0e=WaJVbc=5Y6?0NELT}Qf{H(KELm@oxbaKijzPO$xH%l(@XWTMBbY%FrBOK=J z!Vz`^7Csu_-b{uMcgTUmi*=E!-d5$6xvQc(7-%6`G4kbvCQ`CRD^h$sH;p{Wmtd^C ztX^S#Pp979)zZqcya|8yOu5RGk3ey;=`$(>yKI>y+grFfQRV6xktAfkJI|_*P(PQT zsNu)*rjQ^4)+Xv~G-mQA$CwM3PnB_p(UYxxsgxtnTWZ41v|?GVXfi>Zq*yVOWDb0- zgQEb+p0QsoCSFB~;58Zv#Dt7K0Ut~p^{xwURhdzBh11}kII#se4oWJH=aIHDw0~0J zv+e{!#;0{A)>S!{f`&qwm^5J|x_@}81#l*?`2cCVGG;LtCwzKLB+%SdaI+@?T4|}C z$V~r0FOmDWCXjr*aO928d`mHU&i>MvbVQz@lx!4D279C_dZALUOHGH}tm4bsDT5&D za94gObGV!Xj%tZ?-9w{kvw&ArW`wbZTqy=8sGI#R7Jv^FuBV5r;6cO5l)cb~6&c4B zp>WwTZA5k*N6?QA1oj1l@EC)9QQ_FalomT4$X*Kz65s|qlO06DxByHOE#QEc?0lOZ zY_5uaN#QCSm3OtxkaC=Kj!9jbH9E2_H~$?mQ#X>${n`gj@n}rdNc51ioi8;@D@fKDXkE5JSJsUTr8dWG@6~ za+4H~8D`|Wu43ujk)mj-*#mz1lQLEJhg8J$xnNlu8(K(+F;!tgM;^D5V`}O1?VP14 z1K|Rq$cQ-L%;;89xCCn@FRSZVIy6-fXkeXJ)2cW~xaLHAe!hS?joYl*R_OIcLG*Fv zEupQ#(L=w4jzgVsj@pjIN9+A`qcONMMXYt_l`-hr#o6Do9G!dg7>_7zCAqC%exR3_ z5%cT&jBk*ZQA>ci$5zaQmgO_vL*Py;#2$8RKsK;TN<88JpQIiZ{UtA|zxA*`6@un- zg2UN>@$yjIt`cI*6}UCKWAc~SBhZ)w zWtjO*ML2`Cv0bCVVELRP&mvy8(GdK3YBq_Faobjs_N4)2MQ&R2)0ZScT|BndQZ12O zGLXciTa|fe2_`?D=;xoVxRu^_pBG(v<*Md8B@T-X$9k^UA1z-VKcR{BQp-LgR;GJy zz4GdY6w`^yS_9IWwK`tphnJ+tWdgiTMd}uR=U@jO}q>BhVZP$hp&z zWL~%||F~nj9W(Bjj2+EOLspx=Q0olAJ*#sq$t(hC_c$Cu$Lt#%)GWh~=HjJg8d+tr zM!>8ISs-afdqzMRYTLY=>~r~odH~^GW-nRS=(90$$}V#& z=ZxI0oiYKG%d~OsQ3ckEzxX&dv|XSmfUAsbT$-l-i%v+6*ehwTl>>)Aqf7gg0cHi;WED<`G_`7s+^Xr~BYmtobn6k1z&A2wstUPXTQ695?epb#+e zJ#&Y1ZOJpED}jv%7A?9PHGJGE(f;QRweFq?>YP205PA+R%~F340E_G|9Y;!P=zbHm zaDxKNLpI%VD$&C6H{AhL@ZdlF7#K7K#!=U{F1O7O#m2H}7Y(PsRq4!Uf)*}oDxC>2 zU5)$KxBCBwLCYuY5Xc!v*0;aMItEAS`oWFBGq2~!+HHoQy%}=BGzVH`3+_%_-uuF# z3{ey9p&|7+Ca$;i#$M7$p-nzj@yeiL=ck=)XiIrUL>#q|UtGy0aEonrHa^Q!=!%d$ z6RDX$^e~+Td&r|pN_0T^aL1tGgcKy+dY_5#zI@kN@p?3q&P;sFx&myXJmrCFshyuA zBDPr-Y{*V-D<#8pBpfxd>WthtGrtlyfMOQ{(3{jV1o81Y@PlP1Lv{pK`Cpi})ZdxF zi3>gDp(<62@}yxp3i$!eo)Vel(X+o^#oI?N$gL028BT(_GC9CAWwYrCZLT|{9TLM| z&Hua?Q-yo_Vj5YSAb(kM^FP%)D$6a^IIJ*;{W5-7ma||GwD+e=+^Re7PLN+W?h&J% z=S_(FFPSa#ZH!y?Og9dhh%9#=dOy?L(bQNSDS6po`YkBA;j~0lr;jXw)M?FQ@lFqq zGE>=*pT=uXe2@R}-c4iE49LPX>$Zq6M*0v?u5CVEm|xCwGe9vU&U|La&5e(Jr;%3f zm;krMMkPX)bfQnCX(IaMcFgr8V3}lf_YebL5CCA%J)Alih?Y{XK7uZdwjKSp^&ioF z7SFXW>C@DM)9iD}u6XG@R)?h}6tTB&uOEw&8!+?kZD{V;gU%^f{AlD@Fu;RFmQ?ud zREmNMk)ugfIT}pT`*x;CvM$7DqeKCA0`8=*L_5AJGS>JvHZf-AtF^)H~lz%|$r!DmR6;kFruc=F1VL zs4bb0J_Dey{NIv#3da4kC>iD0y3`|u+}v6P&5Y)G?v%-sSxu$$njT8IamK~fzRC>- z4Z-zZ5WHv!%Q`5|eSJQ~B&mANu#D{WD_IviUg8}E8(>MNC&sDB+b*4_*kfg_AdD$}K(mhsG zJtkS{1C_qJ=#m}i8TCj@2L$el@zZYG0V}Li$p+{nPQjM#-n|GTI%f;opDk1|q7(>2ftJIb)!j zt#M%dV40Y2$)oCB&4HI?-4iD*?KoW8m{ZRflPXCrp?tRY(^4G4{!KEpawZurH$Q&C zPCje9%z~I~{Uks^P*)(8S%J`iW+LJijpS?r7~4${fU_;G4qJe{ysDlt3UTb1>v`)% z(Vi@a#{i}KV@)$)q`?Unl5{4fl^|XXu8n}OM=s0Yk*F%gehK5DYUik=3Xy~8v^IWI zhsy5v;;hk>3HSQW_MwLK3@I!B-M6`uuXxx8&Lh`wd=I36Df!P*rT^Iwd?{-5pIFCG zzs7AQ<;kvXQ0Wq3+wx;K&aAkuSN$30-A_b+@cB_$wcuDdEh)2Kk$jSC2=6+DwrV^M zV_I`$Zs%9wdIgP~K<2v|eV2pz81=RbB1T)lFM0`YqMic)&M5p@0byq*CvFm48%Fay z>%7guACkHuE6tA>4i(99-?osvRLU`@ps|StAzFxorv>q^@d0uCN<@ zuEK21Fex z1`AOk=BHe$yz%|t>8^okqmfEbgT*v5jkW$O^o~n!!Hyf`G~#=dR6hnLKs2`ek8$y; zJ)iYtY;|LX@@loyTfl$2UT3vWft}x=$aI*Otnqz}sIJ5%Bh^eWhh|_oQ4wD`BG<>C zYOoZ)qJUF{%QZgxPmB2Za%@h|RI6cM1O`T=vGMacMKkgyW=MW({NUG6>TN`DUB~-f zg7Z;rut%RDR7_v*%f0%i226edT)VbIicS43=PFmi6|d&#fU9p9R}+rnVGD#6|BBgU zlpPUt063i3OX2wBBLQljc@$nbDyM5A9<1U(ox(`R3(A(23O-PY%_aK8pMi*f)BaJ1 z*~YxS_S-lPROv8zMcL8b=j&Y0iq8pe$JzBOLP`z#V`iT)K%muLYWYP95a5cFTQC=f zD~zRH)pmlP+LF+1i$kJB^A>+~!$e3$`+6GS!h~-l1#6U6D0K4~MaLJGzl@EJ7iok> zVv>Pbp;!cTjEiyag7MokD{Ob&zPsHizPvb+-e?vq6PBr5P(PB}7<_aeLAGYK)V1O@ z$ZMmGtvRdC+^q4|@ob?1vPMdDd3>!f_R4KH!iG?^hOGmk8p5U%{IiLyJ24YB+@bo> z(WX@9Q^aiCoezohPU7=+F>TxD*uesAhhZU28`9s6(@DD{BN|Av0V--;Pk|?-gtqs# zh=e?F;R?k-cKnCb5-Rp~(281udOMxd=IjiIfq(|#pauS#*!CJ}XzwSTV>hm}p{)jG zdK8yEYt0>>MG$xYM>~>}(J|DxGHLm<^4NDqKrMRUx0()BfBnFV0>jXBF4xcX8u^xA z1oM`~16`>pk6QNV)i0>(%ym5S;+CHXdlaky-JKR8B>U6I*Zgn*^e#}0!}NidU!NBY zH8;874o$r(R!T7j+Ywf_%cD2clTva3@K}%k^uLFjj6dG(z4}I4R!6$%yrQ&tzs(v- z;1zuP(e)^|FQ4-e; z5nsVCT|;%P#z5(A9Ck6F&Zy^qAcwY}6O9oT!|)}v^X#9j)96<` zfC0;?Np3W+Gg9f*i|kVQTBaxp2TDp zhY@FDE2ayk(*5s_x|Oaw6jK35|M)kjgNS&{jFcyFG`y~tc5+V$h%~XY`PCn8jY&Re zIaB#X`-tth(PPn~Dm(F@Esm_7VJ?&I8KYW=j`2d@jN$V&*cy+6uFYzWJE8m$fAHu# z)`cV{X~v-bx?qAv!I&HmDw8HROsSh?0n~ia{MEhcrCdWF(2*KU$(kNtxZ5R94O{K8&+dUDt=kTNL>-;GP8p=+_=< zD8zOH@5J=G+KZ@B-I?|%XtqSC)ZK6Ix-*g{KWd_2zpKxT5gt3$ueEDZ`{GO zU$?_}R5LMY!*;|;#7-yVuwlEbe^qiOn!M0gkZnCzmL>uCCINb67xQa7u4({L>gYd! z8QE-M(B}=BF|Eh>-!m1fR#jrh z_qwBl-O_FKo%X{pDP2jtW}Vub5kaA=UrBYhGkQxa1y88QE{{o9nnKC=HRx?J-|?>+ zRRaTh{`XNPYH}bAs}EIgiwNfuJZT`x=pXA?WAtAmO#zbBXD0g9PThL)GZGOEKvJ9| zR8bEdgd?T9S#TyzULx0B6o6d?R7u<)(Q5P(X-I^tDvtYlA1}r%*Zs*od@nnM_AadS z_&mka8FWkEa&Ydi0F1lxz*eXm*`&l1cC87i6t8*GBZ)ImUZ4So;co2MI`F9SwNpDd z`!vitU(cZSmPSZ#n5 zRjNbVD|Oo+B5WfbneQ%|X#j{A-%uWXcn8S%H$lP^EX{qd_=w<$K6l-Ektqt^?eL&_ zZ8n0p_&uRpvm`Hn9G?r;)+mNPVn~+mhPKM4;=psLw@Wz|5FV|9=s;lmhN?1I@+fcV zY!bPcmZENWB<01eMEi{8dEo-0I}|x}%A)$dR_(7I?r#U7r7z001T(+!D$;tQ6)1&2 z;qh2zY^^)e|C9*x`~@fv$)a+?LsZZ@_6&?e1C9?&qHMVgqy)o79(ezxk-<&f{xP}&O!*E zwi&lHFLMX)SU46LE0l|bpKCL>*CvKh-_0{k{d;=mf!WxIb%si464x8>T&{`8M)iYG zQI0%LzG6G!1sDkE2C+=C$;`*W>&W3%5OIt z5;@@=J}#0;)$E`+PRamYyw(E3O|Gb#_ z4p%w}OM;8&(1e*|?aU?WEPCO%4t_=8Za8nNv@_h!1I$b#2+$`U@KdH>U@C62lV zdfB{v?gC|ZpWRDP4KhsVEwN%+QX&a0S*~eHG`i*q1?R%hnS|CI_g|>oTW{Hi@m&FG85x^t}e@I8$;k}W~ zdvZT5&_>jTytRVb2OX`Yxr-9FBn`F>z`k+>-(c)}S`0877cth4sl;~UOKQ*{4wKz6 zZzwT0CKa>|4* zHdX6EAHnK=m5OkF+U;qk$-^{TSXW+~6taA5BD_`Zl1pMD|~9#B4QvJFpmL9NL`#wI-gwBYXJ# z9{g4*`J#&LqlK|Gf}aKq3lu^^jGjAvB3Q=0WorAI1C}Rv)L)+0WIyE*Mm`l&9>21s zbi)^Y2l+6-A2Ul;U4@69O@0f>EpbVevEO`tmRN6)%v@QL zsoA*IsFn1w4{&0dtdrT8ZnA&A@Fy{eZF6L3>umEZaoR-NaXCluoBi|XN!XXYH!55( zKz?HSh8N_%L13#wVEeFfTyz-S0Fxp*NyG2*R8&Gd85px}@?dbwY23o?Sictyh-`t} z6BA$f;t>Hmf7c(bhsq8xdCY*T+fX6s5#QE$PLjr3lgO3UO$Fh$ErHxjJEyJhJCeOl>w64Vg2R^brmeP;Frgg3}UHrj_;+0zE48ll)CDsYwhS!&fT=3F3d95>QZ!)g(^#k-s}zJh=Z`sL5VG=-eL7g zDMyZ4?Vug4gN;VZ8ibjCb$d;X&HGy|_tKF%v9dCUnaiHtEIDn@iDLT~!(%^V(oe?y zOnS>3ms_eY>7C#cedOsX!q4CBU_hdQLFOenr(U)%kSq0U=-<%8H+P`@v4VL^y(H}e( z-IG=X*@5qhO6Dv0)d*~Cb+1c&dtiK8?%O_E?0ib?fbW-4l0wq7gz_9#Htd|NihL}VCw5yY%xZ8HVt0+7B@Ro1b}RCOd?htCAotA$c0LE%u=?uM+c#_}l|B@&4_2x= zM!=oJr=RLYl;?c2YQXZp%%1^I&0kio1ZCb)NcE)#9jxzB!MA#qRsWtc8aa!=4|D}BRKwAkUcL#se*LVV5NQmY!U zuS?B$eAjoHFvSBYcW@L_b2X{o&pFb3_|4$ydS_n9E*GB?^`wm_--ajpfvX354XAR~ z-BP%Q>-|L^#p@er5=V~(ErP{cfhQVSxKyO~2jb{F_^fg3Ugr5^4Jg)Z+1Kw~nqXOn z^=yg9MLf##hslsC*f+}E67RqmlwHI*`Chw{Gxgtv-t9hXLjp(0vope7gH*F?yVRtb z2DiDWp^J}zx!~=c#dXb02~)NZU;(L9RtxyHYEk!H+9dM!d{6K!8iu@U*zP!Z{6DP> ztx^WD^5t5)EAWNouN9IDQr?BN*z*yaSKDbB@JmX6B%d?!*`!e<8}qCCrD-RdG;Wv-Kbypw&ciAo+j~Qy?FlTz5_@lu zyLwttS$mr%^z76-3Z!5ymCd{$Sxg|H-0t0nO07Zl>~c1IgdGaICnk+On+%&a`1CiM z6{e?UoK&AmUT~+XC9zglc|CLrY=l?^Nq{eRy&lYCnScI6AF$MsVfCpRV?{fFL2HSP z!7|GZ==>Q$iRb(45m=^9neCK|O(L*E+ZUH0?0lRTs(=|JXEGvS1Du6bjXSc;^b5

?oC4Bi9#z)u|mkAV9W4^RrHPkUhuq`(i?7!d0`L<1340}myNhYQFf%#{&oTT6wr zTc2;LC@-CVv^Qzw&9mNgWJ_VxCtRA`By-5+{a6>{+dGpl3c=ooXz3>FteCLn7;NkxDAy{L33@ zJzblyE&2U4b8g6wV{g(}7{*UIiF7y?yRdsuxRdiy_762!0*+eH($m*!O|1bZCYRcXIc78@ZgRmg zlPI-yw7~v8g=OkmWsPNJ6rTdLmTaaxhVg+z$S@Ulj z(H~;cgdDjZR%rpFTri&J$K-kk_>;c9d(QRhe zyjq}|i?f|;WJv=NZ*hR0PpXXfbQR*K*{%0=9bk@ITKRDI0eu(ew^jbn2y8t6=XqQI zywKfX(TLQk7!_1G-;nAqU}vD$LXm8lfl!@mc(9m#m<{U|im9-){N)k^d-;Q1Gmqaa zxX{L@klk;}-aD-#40y;(mh;5vIP%2Gvc)Q}!mqsIvhNg)hnfo?dgdt`%m1}dG?cR& z5e)OGgA0M+g#{Egom+Cc-be&EUW)0Zb(EC&0w&nQ>wB5N^MBXZ(ChdoXrz;8M`_uv zs+Xm-s|nheYC4aB8tY{_?@>2o{g3wE1gfcQYZt}xTGlBMs*WvIG z|K9tLd*6F^j5o%8Z;wF+WH0twd+xR7{N^|3UbBygE%(mqQ~o!r`Z8+tIq~~WYDz}H z4cC}#)4G{!l9y{vV?w8fot^`>bt<0!Fs&`!q*$Ps>K5(QgPG{x+KSL$JbQ6X13IXr zUVV=#Y#jp5sHmjK%6di)k}~pjU@lx|*QWL8pmW|nj}ibcR|NkZzV?}+ zPJY>z0N6&dx#rQ;?md2Qo5CR^~y9M!282abrp+LvdL!?RUa&4zWKB=l)l+aUx#^uKU(~ST?a(2ATSsOzlR2%~FCa_s=Dd z$;OeaH6JX1XgsikK&fb%hHg{tvQI-{NVTB@q^E5=k7B$ts3j*`zukY*X1)=q;!xx7 z)b*#Q;wxCNHRYS0^A(1?b~D+p4K@T_7|j?p56cfKFzk7Kt#<29Uhw$b5%SGU!+c#^ zhvFLL8pn~|EKo~sn>{X2vzzZyTj;jfOXQ1>e4+U2-2s0s%z zrN#1{87etpt^I^GbLKhB(4m@*_A}2nfa1__RHFrX-m#%*KqvG@4L@x-(T$%)u)L^9LiKOf zWe)I>p3hjV?62bO<7&1r;piHAws#0Jb3+{WU_sBQiWJugub9j}K?K*y!x_|+;q;Dh z#sM!(?lq|=Dsil|pAPcaG<*;^6tGt}TQt~-BRUnHsvnG3Vja#kgL&;hwdPIN^~2J? z@=+i5=8UtCb%Z>OIus8AqKH3jW+(v1zf`Lg#=Umy=$yFW+-?K7^M_t^rUaVZs5|-V z)%TkPZqG?K-xt_C@_+)hjC;{{4sJG*U87muvcjmjhrbT!IHy}&f9nB1@D^Nb2pEC2 z>bRLh&Ki{}S#0gh$^jjA|E34jPp>;sd%@X*MReS}Y?Bf0ccJI-uY06f=>E|B&_@#wUOZ0OUTfxDHfC$1@(t>DD@-uKu2w^V*l8x#0rUAn%bI zS2Nq}=e>Q3LeQ?_jo{ofw}8sVo6qZmkg-PnsH0-l^ha3safOYCCsw_MbXDwW)F z3>{{ZbBn#4QV6|q^;w$$-4DwBB#EMk z!rwRMXYpLZ)yS{J$)=F__FD?(H_|br9A^^+=Y_(xlR`t+@ zFSgesXw)(u@Q$=!()aAXE|Ag1n3Y$mdQBrC-WbAkBiub-w>>NB{OhNR(|qXHLg7)W z$YBpHIyGe~)Ry-DUx~#OX zSNg|NE9+8+a14K@oi;te4~d>Z9j|W}SELf=-^tIUAb+LEf8Ik;?f1y8xWKdXDYmah zUg;97?G@Y**AUYW0jllRs)5JY%u7>%@7(^u&@*ygc#Q!^QxF>2w)h-xxVUzqkFGI( zDH{ZWR^)iWT`jvMPx>V8WAf+mo&>k4`kLXS(D@k8d=?QqhV}ML?B@f$9c6kobZpk4 zhm6as*!(0wsrF~Coyi*W8OW#(!ngu@ORpl>m#80WtAqLQvQ2Qo86Zk};;Y>x*;FG3 zaYvlu0?);UYW5F;;~Ht;r9{xrpG&1zsC!}6D^unU5QYXnYj}}rs67#YIj5)u9mdyK zXAul^Tyn3;fknU;0IoWSi^u|e5c%$w+M4EY$(7arjN71Y(}atY88r)|yl#HVHCI_p z-B4rmCt`?y7Te=NzpBwmj89BB!wfw+VCqRg|D^Acjd9iJAzkOfBR$88)d)^RXDDE} zSoK(4iqS3Wnv=}ulKus)dpUB=M zGJ>uYdWK#OrDl$m_J$(f$9NWcCX9L31sctF^Ra4|i`6g3yT+qEyB8P(l9wGp1rk0$ zp?ps;(ZTh<0+1heGKA#Tk7etIX+(Dpyo>^P<;=>92Gpv^oe=HoS7yQ)Cu$LyR;(Pa z*A10R?&aG(_o#*ti^{zx2evn=v4rh4#Z60Hc7Yx(TdSj`IDME!6ms~O@&KHc4) z!T?PNoHWwuI-ysZkX7sMMLQw`)QwS4F~AO77U`Id#2ZkL09L2ArA8L6OtE!n3!_MU ziJ*J~hgk8dVW|*b6Xr=M9tpBE3X{JWZ1(o@YJp3=BjXav(}SK#>`lU2uZoZJ$fqae zHypE0LT7HIQGbE2WfO|M$FSF0|Ap&lZ0uIZ$mHWY%*qcg`d}W+cM*Ha^3C&jXYSp!i`-&i zI5Vh+RZh9#%s0PTG#zy^Sz1N8bb4t;8;tqj)l!+nK3)xb;xmR{`y%IH2ab^8uIQ0W zJSH=K@S=R;Iwj1wR`x!oarsv-guICYZ29YcLyyNW(u8aO8Sl!_RczBe#n87jg?zw% zB5|;V6%$?IU3QbIiMRBGdJrNIxVQt58q@{m=ejhhm!1|rWU}rW`hiX2bPO<(9DU0( z4KCgC11b4kH>dclInar0YW6MNS_pPc9-MlR zf(&Wu=-CikB&`8tSUYe1-eJsb$`@fxvs)(m*JjHQVH02l>H2r-{$iqHT}-nlxv&rZ zkqNK~+vb|tBM|&WX4nHsIU~v!BdC#hO%>r(CEE#%wC*~I(Z$ZZ%7rTnn^fVLW!1oQ zYKUgH#H0!XubAfW!Z3c_X`C`sNI)utTqi8=KgrOmwS;Jo)>punfqL2U7r2|CE=+ft z>^TbzKwfWF^V2?TZdu%is>sW13Q_eU)g}>V+83^U`39Ir{>7*DjIQ%w-vEax(BkRN zpUhq3h$mmYQ>|!%cWvAA4Rpw&cxoyKennt`S&>si+PNUOG^70uTXjaUGkTM^%0oKW z_iZ=`GOJJE8x2`y0KGhxU!H!rHh6bW2OJI<{NWn@&LD5j?GD~FCXX~XPka$q6c^)j zpl8*|rxPWXx%aT1csq@(#TA{A;%XN3Y8`jhf;`3&>tbXHa?kvOHqHs}-z`XMvpEUPJ-J`!`|o^y zdaBkO;JJxOf!Kg5qhfjNrEE~S247R(Xn4NIDt|NjCkfa?sj7+TANI6KSC0mE+I~c& zZZgi%4xVF5@b|yK3#{OL04IB@Wp|zQZ@C3wl!RzgBxXYmIy;o^K=%HYx$SS_JDy%- z9rgt`0;q?2byVir4Y(2kZexKSi!fq97AB|Bs=MDatD0WyCIt3+1>Q@X*&Chw<(Cs( zi&1T=-QPcNM%s!B>7Y$y8@vB@$d&`|=Vz_D7H>4EKVR^9{K+uMfig(1vk{&A?H%Ym zJv$5(Y{V#n5*_2U8#k{f%myNNUw%JgYj&cZ1HU!W?-6HP?U6&-ePZhSIziI-*Cs-I}V8PXs zU877-@7SC`S1Ri2>(b6drVd~7nXah`iI4S}ycW}tc9oG7dE)}^I3g1$fCTg|m6&Um ze){#{&ET(0pfb;g831YjpmHxN?bBo;&Un#jyYqHMC$P?V*2-oHvr3O{a=$V+QR7S# zqS)Bxgi8D)qRO`hZhJQOH{Lw{|D=Y0II>D!;VYMcH1KuYD+%{ zdCUyloZ~+lshTyOkw1rzH>b9AO8s5*EhoJ+(+9kWp3Q}!h{{IU44!-+kgPB?1P2-IQDf$)TP=oJ5duiYSCozJZ? zlmzUoEd^*(f;E6aOXqYe0>5YL0gT2eld2R_O(VZ2qMPpafZjh-dj>W7GG_Fpl_bEq zwCHN&<_*hDaQ9&L{_dWp?>~fE{NN6MP!cDps`=iNHEMG4K#v3v?y7l?w{sH8A&dP?(z7X`QXOI`C7?`d(zmk7C*)Q9qZPnd!5`R`<6|SAw5y4! z$O(gfZEE-)MqhU4bt7^j@EmXE-E|mCnSYKCnjJWE5a{4%US#`;*(&u8@10+2m1_b= zm42VHNMc+F4a_+sn>Zmx7d6|Cd|B3sbQ&zqgAlhXjU zGxwTrxT|r;RdlLq9&(;i^?;t>QHaNUDE)}d{2juIBo_A z>`5pKgBqh38gMVd8SW2&yahnr%n7{KBCkN;Yc&Ap4Vb8F)(;i{8~Q>9r`aSvAPzNe zPuEQGVl@DLzv#T-0(^I@^uhEYm3y1H6W{U-w%`1{WXpy4t1rK~@RnP)rdglenzCWI zL-|_G%ETsZko7O&hyR!Ip+f#rFlP#Te6tG^ug;jftZj>#J$d|j`MYQ0U+=pF{iUq_ zhTA!3qJAc`qz}j!D-1Cca_fMK{PS2XfA9_Ml+8gS2NaOadBZcqxR=vK^ zQl!41)bPW@AK{MIldr3q+@U>@GHq&O#%c(aNTCHw^s_B>GI*Uvmlnh>%iEW}CKsdT ztW>5O3br$v(wB3~h0W<4A~gz)yCf#iX-F4syIUB>45y7tnBfrd-It|ppqVIT{D+5B zThU_YnBWY^MsZeD?Go469?zYtVP6Gxd_615(3ZbnxT$8hPaLvb8yH${oylDzP#dV6 z=$i3XEjv8yiiEzzH_@YMS%~QJY)x&xxuYL85_z&g=$_r7Vs{9WlHWKq8jc+7V+5(9 zeeqzh!gQ#M*jwT!Di`_8F^(vn#X=&WzzedAd5g9w+fg#ENq2mfuBHy<=0EE)j&^Yf+EI;OC`uSF zFeD-3n^jYD>Dd(Ir7>_N0v8b%??)NK+Rk%}GotHk9YT?U)C07)Ij$ODFebFKBec$T z-~cqQ{X*kt&U;#sQ!cpK%SsiVR$_j2p(Br;Qyp3!;iQ?^;0Gg@ALR?#KfnZYbDDV> zDTFae_xl`@d8;lmVf=^c(2%hC&+!ScnpZbVI&ROKtsVCu@ANrDzRa-b+7C93UI^%w zWJLH4)3i+eOA%9Thg|fZT|tDX&Nm>Yo;0+I1I{*c8mQNn30Lg%yo-=L_0f7~i=sC9 zG4uX#?p$A%xv3{*U#KHbm+v$wu;7?PUs8uMJT$51oHAl!B%j7tp6pdGr{^7nMrRnn zDh6s(`)DczO?FORBqvKU1S|BrdeS?zQ#V-uX-jq~BH#)*(7d9;6jY6aXSeBuiP4PcONRTcF9^c z=ouz9T+qRjr-Gjei4JM7r(Iq@U)9E+r!$Y?Co?tK;dvexc___1GumFxPbfZ+Q#_Ja zV!mR|r6Y!PPq?cj!kXyfYHP>Mk$oT?5MP zwcDZf55&EBdg`+HMJ4#GzR)c+-41a-B2FuRp}m58LWCu|2eo=ECYR&6B{>oU^@JHg z`^&e%rpN8$^`G(c$_xl*N7yr9G!G`93O)_LL?SnP2dNQW?%48IbzH>uWpPV6 z=sTs`$|}U!NBPh0z@A~QYPH?!;~YVgrC)nUQK#Cix(vOU0sSWZ@}EKp!d5_N!E7yZ zJ@-j9zR&b+9+Gw-#v0q)XQJY`h*+ZA(T>sQ7Hrr`_%an%XqDWsS4IR`!FaQT*!5xK7h9hPie7wa6vx314`F$Em}wbBewL%Q5k z4J{>_AFxHD+@|qoDs!|?<7GP_BVc@-K@iAK9}((QRBAkm%{Qz!t(bCo*83UR-@x|u z5O7)(dWCFIc{riq>LqDg@SnQkAVGwk7)e0)7DNh9k1|^>xkC_1y3&C$zKf5gwox=5 z*^7J;e>Q}pFsoTC^6H>kf0ihV^~nqjwS0&Yf2MhkpC*?(SzNcl^vi+l-LOX{uQD`m}NW2&%X_iOu z@~i-%_C_4xE(H(8uqVn)D?y0Xc->;}G|2J5N$)v4TQhH0MVgxXkSfePLBgrS7-AAj zv+gt`p5h<06bfKqm5*q4r)u-=Vpv?f8pooO_XPj2t9wg`zvR!{umw@-wXOI3tI?sC z?{=Plvt^(We?D>Znzj(Nl9r?$INg(_O*+T z9G&=5uTm%vUJGw=p{3 zN_RPic7`sM_ysdKT`nr(sbD-z93HKV=hY7#9LM#vndat0u7UCwAhERAnjX@l&P?rM z{g8+uMq9utkJk?qUl_6tuW%_7=X7*cEN?9x$j@(^o3KgXCp6mX(p-XqN0o7w z#LD4<6$4X=R5(S`l8oyz?4ZzAFHI57Ji0RzM8h5~Td{*lJ_lzB>~Q!22n5sLVZ*lJ z`>`!bvRgDWlz9i)E){hdT#aJ>r9NzW?nv?YZ&V~IHWxV*(@LN4V``nHli%m$m2^7w zWu>b@^squkD?0+Fqwn-@l4oXnXPuRs~6KwXII`>@-2zdtZ2?^btD*6CleK2ajJW3dcU*o@D2Lqc*gK%)_Vl7waB#VtL8)5aAp<~M@s8(0TnFiyQE1q^p` z4h`7fZyV_}SzKpyN-Zdvd>THKqZ=$@AAlhGI~oW<<_Yv5w8M;dnnoVDB3mz0+&iwx z=)Qva4JPRw@^7MMZV(KRl8jMPFmqz1#4NX~`-AAa^N`h}9?-Ydp!GIb@7&Hcmq|#d zlO~7uViX%45>VV=Jw7^DhdgB$>|#wNY1*|`PF$Bo3|ItlX?!8hmNrp9iX4s)lKS^g zb%@s^h1TU5e{LQ4JhQ_pI>+!vO@kl7+S$L>G_ib?z3ABJC#*powk-p&(Yg4)LS6Le&72!@ zU1tBs-04eiJ{+F8j+@!YpBuFO$vwoQu4Uf*2pe_o$kP@){^7f> zQ55eYs`HTV<0}QrKD^0)pyvKN-rb_ePOm%NeaKNA|{U+~|0c*#&|iWxpXu zmeZTf5@^Cnx=6_?yT$?Sn5tXsLKrF-A2v@sD%yt%`Vgp%A8hMKUTUZ>3Est79#GH(P?glhXLh~{53G6&g zoO|E#h4CBTODS7jj};Bi7${Dfr?HU5hsDqVFApN%2p7(wogE>cT2+ zJ~i@*p2;~XQbQgxMfuNNiC*T`mXIDQOGKw+GxPSWfORwBEct^d#a+^gvDn zV06$Giy&}z^i8N8`rxt)8YY$q-SfTEK(tzRE!!c8l~F=EP4rsGZG%VJO8zz2DLpGcwg`NE=0!Xy$A9f*u>#aVv!l z=H(`}`wJd=V~hR#@4GIsxW%dQ zv7fBgK4(3#yc?e?+S(ok*gMwf+vC`0E@nz(DkmmlMpbjyHgeHpms2Ya$5e{}du4W+ zRQ{uq(%nah>hF}4ghltaDkmQZK+#~Xb ztO>-8xtW*sha<8-^qbP?4`G(tO7{+u%9GB_C)mb&c&Rxu%@9a^B_$&3$d75Su3F!~ zQSl&5a%4;Ec)jLGtCCWRIiNLV*yY{jx-y5DqI9aXJJX=AKwc8=fWy?`gjQM}M^KQN znd7|!t>#OV;v&&nqFGU+mpKS4;gfgIzp4lUaduXxss-mii%xo%VLx~U6L!;S2Fs}% zR9o1AQoJ`)nl)QQzxf$_IQ(#)ef$H%ai|e|$O2aJ`O!^XHi(uVVUxd~!iM%)G_P?Qm zLXo4rSQOZRSUk?fR@7sm6nf+V25ho8Vw9eJnS#YbAWc&=_hAcI@VI2lJr*ai*T-qf zb#9B2QY`d#nc{3)I=GQd65c{E_HwlFo?3}jan^@bJd=@X(z_?6{qahGcloyKb|$z{ z8nMe`Nw3HKla&YQ?i4M*C9YU{sw<6vCWq@+OtjGSm>8}669P8JM_8_;bP0>7rrU)- z7>{o9ZFdNR-_&+w%=tPpu(TaYziac*ZyIpOc~AR`R7a7vK5 z$fDK;LUvod0VxU%?(?U#IE&43$WtD3A%>VCz&YEZq(XVvlz%U_mh&JWPX2Joqj>## zv}}CPlhPe<_v6E*^=^V462|LsFj5tdKlqnwKZ`*X@PA!*fX9O?WBxMF;U zmdypsQNY<;&}Tsqw|vSjcvR9m{v)>@tDIWR)*8X$#{-C|2e2=?DiE?M*O@ZYuFbR_}vaq~O3e_}T!rF%DaYbq)IYV@OulG1av zZQGTU-lu$96#$m{_e=b5*_^B*`xIE@W6eM~E+LDD#IE(2h?`RXvjxbc>a;Zr-a^MX zYA5k(p=^=c8uBS;Xq#EU;EpuiVrA^cpOc?5mfg)=R(5ooQh|S59z_>P2+7uHd28UZ zeK9(IT7*J)IH7l{oZF861V3?3W$z?BC=V}s-^wp6rN>oHmsK(L}eLx52>VD=4TmVNj zrXjxd!hUsdCgwLA5OohV7+r$5o@Y2tY6Ss6wRJzEC2VGUnQ z%s>{)5jfp}>1$Z*U6v0yPJ6gm6D(pT2zuV__;^|Hw7m`8_SmBT8#j#%`gm^FP{HX+ z+tJ?4Amm@JOC*C5;tg}ak#thS(pd(Xumt{bc20F`Z(48=EP?*XKzT4X&j<_{r+D|Y zWY+0S%ajAO(cTmSfJxy2xB6o|_aige7_{RWX=?ke}OlP^~ z8y&@j#zP^YsebyR0@i7G;q`?LU2~XIRjM9G#CGJNTPx;t$9kPZ_11U?wd_LUnFVE5 zDk#PkOjT;%+8Wg-@Mh}hzVs4=->pKEL|{x#xfuXaCRTS$gG;kdm=PtAnqiHgcklCY zrkF1~E!GAt;ZF70EyNbxpkQok5KJ-@x@05aXJ%i~Q=@n?MxF(;dxh>zmxjtyc+u6t z-jrSaegKfHn45WfMNZf19S2E0(tIJszR)6ANcfYGP#()2peeQ_~c`?X%WJ~K3eslhT+k`>hWSuHCq{m3JyXARn+;^ z7tf8-pEVRP_HxJXcekuTlP%e)9m!z&sqyQUQ7iPNYtFwLvB|s&?RG~FOTT`8B`Nl; z@9lMB!0kWp3Rcn29tlIcK8*Vqp(k z_Fc@M5vubt@21hbd>v8#{q1A*Zf|#sxti&A%a8pn%R0jj4dM1`X48ZB|2!_+@SVG8 za6~df?r-BR4WF`I;`rh1I*4_Ff!oMLTO}n^lT}nOlXP2aIN%TX`l~=FZxw2mU~~GJ zFD4Hx{9^=*DKtTH=lqA?YYj){Hd4`MSa*uGbKlRfVUwxxJV&1e`cAe3t%5p{;~W8k z-&FO;l==lRJ%lF46~uI}*ulZ+k>P}K1YCpDkt{fYi!CCcVA23i9OSdp@D$%FF`}X& zzYbyqAM~5_(r9X)aAd|`MD}K1(@G4i?b_SoVp9=!_cD&}zuJf_X<)9@H?3 zyyV+81#r3~dXC}p`<#f7uqseByIvRRT!^J`-md$mHD8*dGdD(r zxDdo1jEiVN1PTKkiW|x_$uN$(IcS59{TqQqSHCq?;D;(AnFIVPVuzgo39OTPZGHoR zWC&&EwU(?Q;Y(AQ1q1_Kj_Z<*2d!Y(rdfUk>deeD@etAi7tFH5Ph%2cP*issGIjqa z*_L(|3vW%^ud=#)d+}`CUpnF={9kB4{BA4WP}Y2qvA!>jzl-QHs)|g_p*X9CBvPsE zACa2t*?<9ke()OyvS|JPB}@6gHz+t2w`sNi6JzQ{1t5~$x4=r#e~r5K>YD*4M@|!F zziu*O|4%T~z<&}<+9vFViUkT!Q7v=bTU1Odlb0d<9yOqb{DPp-@w!xxG(7HUx`T`m z$tU?19a+}yH>xlN_aQS`z2ldpTndwhZAl+o_83z0tu-bJEm|)UG?8LSs}!sIo8IfB*WnV;m#eM%j!2l!b#T`URApT7ypv~4D-d0A|^B# zRNy;}o0->d4!jTexZAHif&kP5?HWgaE_K2AF6`FS?AS=AOzg{R2=8+(x(ST)?|={I zK^%+t97@mxSQtu%2E~Jz&UOq!QHZ+1={Rp;`TSWJaHLi6?8l;`Yc{ytC+~?6=Z$j{ci79ej=_Juv)I1ca*2ERxKCxS~AZ7ip zm#Sc*9XL$dNOletXbR%&xJ&({<>kxD{?ZK-`r8WBI0_TO>WB(0u9W1GN*&I2S)Ip#%6E;ld8Fm)Sh7~n~ zsb)8%!T_kZzW2F_UUHA02f*NQeip72%s$aEGxJ&5R<_r{$_0Amlfm*1ae-BKCgzV? z-qo6jblr;|_Hq~hIu=~nN5GDlmhz6)xG)=2 zYzr;IX%8~kz%w-L+_PeP5@(!G_+*fVH8u&fSl*qV6iKIQCjGTb*P|Vc0X`ecUK%RN$Y=|jtp_MgO&-eraQ*{ z>@U*9UTJTByOyGn+dMeYLy_!7Q*z0w*h8uFRq)msU#M6(yhJoOf{ zneIIwq;I0TXx98MV@t#A=z=|(`-Wx)1GgxV=Vm&auCY#rF_*%oUw!E0%9bIKufufB z%wq6pg>?Ebtv(XVTuJlXp`?jt09*fchRb3^>+Q_Wpg*Sh!QtjHE1{S7ZPb3Rbo>x$ zPQ3S;%G3J~x+`XtW-qVjk^gZ2A3LqR+H%(K{)&%!)0XwtbpN)`(a%&{qokLj#Y>$_ zl3F~@cOom;#cF1{^-e>q?Bv}E_HyTxf7{vxQGa23?cTJ>j6m(}(fEM*nYiUxFa4BO zB&ps~N|WkQ4^O0*rb5h0Sm&)YBY z0r8+`vuJIK4I!^S_VZIuJ$qg%xJ|+3vzKhG#OFkFQf7P5^+)#~pi5_Gzv!CvT8n#m zOC!Y_qYIDFD_M9nA(s7=QhWHXtmTcwB@Prtu$11jkXrxAeQTWr1- z*Q=|&nEjpUq;Ixy+|=wEAVSg7^sd;wq)y(|%|A{-mzFxCghidPLO)H++hDXXPrBE_ zEdECovj~DlKm+5sy$f&r2#WqwQM;5M<-3H( zY|#XOk7g^~89x!~>Mg}H8A%ijXZbS2#he)Fe2-N*d+)G!`^RZdzt)IydVJ8C^jD_g zTVwVvuTOEbHt@5!!@ENp5*u_lPN@+~$66C!fR@YFPSCEed|gpGe&)><MAtsxWBU zvG3F!s*M!b{q!mVHg+kkdD0UChpvXvLCPU}JEsI`zN;Rr*Yq zyOuf+sT~i1Sf0c9mTG#`Lnv-(4(>yn-Wq8X+dI~q=sR=$V(hE0L(x$R=_I)?OI!N7 z=HWqry_EJcKPnAnF^6{j43^XI&@Sz8tMQhh0z-)q`Dmp`)WO+Up+Mz)yQd=BeJwU- zZ74n2tZPy>#aSYYoq2D8$l``x=@aqK&C^P)ZHJ^DB>GebMkfdsBp!aXnsZ3o zTUgFI-P{!kR3FYF!=x_h@G@Z}{tasV?!AoXvr1b030V4c`jMohM*TiAO_J^tNAW!; zE-)#WzGw3l+9_aJNhC=^J;ki{RJs&B-;hEQS_Q#|K65_@PfN<7G3_`*d`y8BqxzvdLQL%hDb+BV%a*mm_1=EM48psl3@q@h~{w2wv=0Qz+%p6wl9-Y#xY2xY(h z`%uo3E+vf?r@?I59rW;+lZOeFWJ3wvqfEYRF|i{nNnKu{jF(! zyc;bcjw|b|^k_UuvamIjuwrnmSGXqXDQHOCtGzM1y_QFKZa)=Qp_4B7!i5l^vP8v8 zpkuigVOb7SL-SChy`%IKKT98@rxALba@Hzvn}BFn36;Oe=EL`7)O-G8Bv0>t+3Xac zvM>D_-z4qV!{2eST6w!QbpDm52Co`dkU>x6XFZ)OhnZlE^c`o)2}y3oM}St&3q4FN*0S^m&^f2 z^QW%8qAr=Rr5)G+NiJR~Rjg|l+h&Jt40g4~2xoITtTWN!R>m!hcr|r^tdh{}X7(ir z-H2F}bdH@6aU4}27iV)UQ&uvNu}VnXu^b;QqQ)y0lEf!1}yhzaiY#AboBxN6TJ-U%b*u$1B#l^uemTI`s-d*SNp5 zQn4EUHav9d&41ZEdHZva;-UYd>6h>*fsd3>{psUf8D2gnb>rG*y54?$3;6lDT{1yv z!gHeA0nKw65!VxSI3V$^^{2>>XVRISBh&5ShviA1A1Kx!nuxbdfqCp8i?BT{Ut68? zySQW}Je`DUk5#Z-qO>LN6NeB{lQUqt*r5v4YAR#8 zygj--9}k5RUh1uYG+ICbmqS)xZD=d1+HXhglF-jWv~4D@mG`dt>wVOo9>L|EF$qPB&C9c^}Kyh>FoP; zN0w%tcAO}7I?G<0cPfB1<==7lxOe*-k%*zOxaZ$1Y8H@N6uoctTYZy}=} zk`=yw0DPLdwvC)hgF>x=0McDbX}UEr#tYoK$+zcFR8xU3fy9Xa8fE><)&5&@eL&*K z0`jZII#(pz>2gPGTk<{-&UcH_J&y>{Qeo38Mknh-@bqDCe4Q`%#vV<4=LUJ2-Sp=^ z5OnF3->chN0I-{X6}>zI371|H^$zAw?^;GvYbwLM-h{IfZ5L13N^Sz1V{Z=d60MNY z(#`;f-AN}23Tw05d~CZvGOB>lUcZPwEluo2YwS@{I!!qB6;ks*yagk!s$x23jj-gt zQNH5H>OzQ)pMv@WQZWl|0+=N z`&PhIVyRoJHq%jnRvJG8#(c46&$~^OJN~sCgr5HcGx_Mg-G?ozn@t8T@6~wxVyo8N zGVq6!tJG4HEx4;ZFYZa+Cp(~$mJKAtC@C!#{Ci+9x|8c)8wg0(hK_pUws$9t+)iAI zzZRgy^*uq&$!^^;dj$}G3HTESe9wBlWaU+Z?2T&tOAB?|p`B}l#-Th%9x|WPo*cYG zNxBHe2*B+?Ih<(`=CqX)DxN#84?u6XJc%7Eb_Jkr2Sb^#zmpFV*s^NSz%4ywf-l5f zI5z(7JO*d2*1wN0Bw4|s7E7^CeAZnpJ}d4d5bfCqjcbUN%vWl!4_>Z*`H0MKxqLL< zaSwUn%a3Vv0sU23NNp+(z^X0@5^}Gq14|O2!dA=M)yp3%;)E*w+BvIJ%-LpdRSe*7 z1$!T+RQdpcX_wAu%Rc~cWm&q*c3AcWBV!jP^^s)GT-@3>(svO@(MWT^gW-|#oW^y)Oc0t5LplhWb7>P?XfYNS8 ze_X_@wnq!QG=RCtlwjm&QKilLuIWn5M~=6(YQ(pm9PMQwO@~lFcj8#@co9|raD;Zu zDP7*Y*mX!3brxFh%B=;~o7O0x-em@VkjhmtcLSb3T6q+_hZgb$Qtn3+8?f8zgAo9~AHP+z zpY>Cy?r^xf@F9tK{R=87&m5K!=VwCQ=W3irktN(LCCjvjR9n(G*Lnq zjc7wQYB9pvF`@G{r_dqO(jIffVP98Zc59X>Sl(S06SkH2yhd}vHnXNc6c>nnBHe#T44mWf}P zqYr8~-71hVQA1~X3d#>F`*WVO(CR4_Xh-s-qHsC(7O+I`9bQSr$U#GhyX3NP-A`t^ z(q2iW@Ic0$A`e{bV1h*DF|fjZPYhC&qo#B6mZ`GxuJza9dHecF9kyY2De^mhTt~q$ z>zP4?X<&8EGuzbp_8T9H(kaqU;a_5iDSJ1AmhHQN0&P7haS91^gD!hz3)+M%BQX7; z&*sP3(?@zo=T7eN;8z*|sL@keEKSCI&sb$TSy4E>sK4hUGj4^Z9pn;P65RP!tx#v$ymcWhBy5qbK75u`AL*o9OH;L(TlL!!%FwMg`bi^Q7*Q!JJEp4C}6!hqgPCZ{YC`^bWETH`OHO9 zq;w7yJMS&8q(*96w?ie}0O%TPEMRV|F|Sz1I!?VlhJrSe!{t{_Feu_yUjRTy${vfl zx?<%_Ib#Vc=RgApR#ogseKto!GK5+(aZHe8n@0INMlVmzFHLof`J+CqcsdqtPKNtl z+sGc6Icf;IcRlBA>dFqq5_9KX&3bMej7Bj2C&}8r`+QQ4_P?%xS3SD~FsIP8{ptUh z6n8|6rg$MV?>y$Mi3Y1}2#|E-&To$zwJc>aJELT4Oa3l4sHiUQjox3}QeSz64}PMr zh5K{JncTKhw#F(-r_Us7t7Ddup$l@Eqas@Lhqf$Z8b+(f0s2I;#+{BP$)wZUZTTfj zBen|UzpIm@T|jQh?`H`25AWFze5jo;`^%fO&YfOX%(S#)Wf#gFK6SlTd~w-W|Ki-h zwV;l2^ENHg$uAnr^$Vi6yIkthddu%0NlGudzf~n`QzU1;8OV=-s);l{^<(NIVE1%~ zH*efFiI9^zKwb)ZIhH9y3p$#UciB2)>TzL;cCFdMolW0TCyq)~taR#FO1x_|iLKY!QwZQFL&%1!X`-((&Hx844D z767`lO6rP_K(NdLvz}gRyr!x!(c1)2EH-EpOq?gNYWSu>q|7$VT#%-w@~ z-)9?nx;^?EgYN+@x5-(<_CnF(^mcmy51;ZQjrza3{m}~OW8`N=?6xuMa{0yrwHnrU=WZ W?1XO+fdMNiIh?Zs$U+88z&(U#~at=y)AGP6?@2^G0( zW^D{*44qk>Vkw)uvazDvZZUJS@xAnWoPNLac>KP9Yz=>4 zf%TwzAP@+A_|O4w5J&?H#N)a;z`Ih@^aAjq5#{aX0;+5``3wwJggPH}27#DVebq^A zVEkR=A>SwvXw|djmj*wgEEoh@EjxU``8WwX{(j)bhw61H0|B~!IO!&Ck9W~MzGj8S zpIY2&pq7n>KlQ|TjK^N^$hRUYy|N0f>!svloez4buG&8-0W4Be$N zvga2jxyYKtxp+6jNqzg@cMOVBHZdbtd)WP_4yVnT`UJY zqF-N!AaR!#7pQbb-Hyo3%M)-C{CvXP$82iDx2eq}_Xotf9rG$h7Y^nZ<{U?&*h!i^RW_PWc$bFKIqdFeQ6GET#wdo*V(lf724<(CA9+g7raLJ8;4hq z$iRGHwLz9-931d0`9@VDg|vp_I%C-)$ANb+%DebZ7^ zllsfYF9|oU8@)B*RJounuD;ps9LE&TGJ8#&2p7CZce8E8Fura;x=%b6olL;Rbzq!n zf?R9ao>SA1YXo+uAAZY>-xObCQ_b8<1a7S9$RjwxpuT$xi9-LmGtr`xaKxg=dwdT6 ztJH}Rp46q+n}%zfGD;rOXkbBYM`|w>AP<7~;As%XUoFU|fr&>dwjLYNLY-cPU5X$H z7Gtpb9u~1URikwZ4R%b65Y$jsz=B$|?Uwr!29;7{yC7mQ7|RaSSZ@-O_4Ono!` z??87kGvECX3j4!sNtaJBYDqH!z`E|gqDgg=1sU~eGY}w<1(pLsak^cn(v;>((iLcu zQGNFWN~@VnTMf(-;a>zVK!G+%M%Llk7jMcl>`2Q*Md}J2@xk%g5$-(KJRXTU5Y;2F zUARMVxSOru-)72fBW6#l_meUzA&fW`HKK^rwH|rZ!u(TbP#{l!=C`rzB5COLB|16| zR&n7aJ;leNx0VraIpLm%yZhFDh)Y;Fbh==YJe)pN^`u}v2-)i!cwKFxZp@m$-05Ny zk8EQy;^W_CS1ko}A4AL9>)Jf=uA#0ani&f>VAQC~{4tuB*s>=fwRE!l()Uz8l(~h# zt@T<|68g@;7>vCnX?RM{0MT`rr{1;!X)hYR(>MBeR8f2UgkJT&t4FRtd5t3b@_a)< z6tFi)be*jIi$>D^nW|%>b8|iKjL$XBaiKMYC3(z{^Dy(Bs^OWE$D4HpqG9a~Ta!MrZK#CyL^B#17 z93X3V89O_Rde*b@W4B(@ZtK3TnhbIj1-1{G-Rsa1{dtc#k~wjb;WC&^4yYO-Qrh>5Lw9 z(SAuMuF`iKt!>rts{r0h*C~Jb#f#JRuUcb95_6poLpg3&2zY{BZ7O|5EV&|3O*pwO zzjoTu?UTQ);JRAAkH7wCEwr;5c~v{`OaY`?5#ZH5A8*@EkD5#AD(U^8qGnn9yDKuHk?l8#n8N$ln6QN=Cs8&zlqtgrmUfwSU2d#3S_IViQg~{5`}rNqA^Z zs!Ejv<#$UTH&m0u&npp_ViI#Q>|W}Jrr--Z?N1Fhnk&|u-MmWo9l((L zHlrlDc=~af6Kbm?BCG8L?%jkC!s&4gm{1m`LZZ$L))wzFyvDLGrzqMf;VUcvO6d~q zMBXy4bb-HCB5(E;!oduXZ@uJRrbbiA*Dt>PVmZjY+J#Jh6(-)jkr0QhAL2#tN>N4~ z*J8^t38zGt3ISnz!X3%Y^RZeE7OzA~7GKF-kg{wzM#3zN0e6p;8~@fP)J|if{T)1 zG;`D4gRd^Vk+h-e6T7@+O$O_t3Cw;L6BV6jnowNg2VRWUwD8NCOouPzgMIFz=@kH+mRTIKOxssIGKb0g~hb^;fi z&T2Xa_np$nq4YF1KBDAYD5#WB1_%oTr{H85pht!%0yr^4p?A3%0T0M;Vf^Nv-8E~T z0a%-imlOYM1=t@22Cb9YcF9P90;8Lk>&O3#6)gz9rka8#mMPR@iw%>F!q!A@crfB7 z#g+Y}k-Mw^kvR!|++Be8L<)#b*C8RJF+I`+vGiPzalc1-O=s!QFE$&<8AJ0n#7!v? zh|U({KRXI{ZI8b%%pCc+gY=!xSW}V@cyfHg=;L}eX~eqAGE11~JD42O*O+fk;@H8` zm?^66ZManX;cL4{R8;-bS|UXj7h#(Q-4mn;xq{A2E`-(ly`}4LA8iiwVjc66vUx^x z#*aPz)M4N{Fvnn#sPQ1?BCs3I<4Ew5Cd0m?OJsi?Av%VuBAlBwV`x9df!992R&nS= zS$utVz|Z#mx!f?&i;;&S+|B&08%8@I92@^|9QazrHvC%dc!*kV;#84}$?u#$O1Hj? z+dxEc2DL%yKmJoz0j7ZO0(hzX(8`lW%lUmK?O$45R&T{#lH!PtTyRZN7AF7z2!YW}^ zc0s-L6z@G+h$3y``IDgjOu`^Q^*CtXlZE82Ms9DJxdpamJ#AU0sfCQSeKYu?F^5J< zfdv?=39)^(jnw1=_LT^OAAI6Zh|bfTk1jY-^YzRGM!4trrv1)PPED`kXq*`>=oPB| z&x(7p_=rVUfA)O_UBhIwY-?T2(5aGlQtivW8nkO_yB&YG9A^i^Q;6lvYs)P_-*qyx*gt#76ua5=lUxn`86CDs)euqeM0O-|AmN_2#R~z`X zA8czLz2~`Qgse{dH%%ec0yN2b(ufORQ45W{Q&4!Esa14JC`fziXwd(LVC2)L=MQKSf_<2Z<~(h< ze{heq0#n!PI<#Sc48{GjKkvkD0)6lj=gin4D986c;YizzyzyX~J?kgbz9=(JWzpl8 zgy+=v^v|fPxieS7N()3TDFE(4#$>yyG)iF1O19q+Kd#XorP**7iUm7u8ojv zkG?SnEOvnX;M78q>QdpEiW7k4(*oX$LtN8erMqaS3q9eUh?3}%e%4elo(|a1>O>{|=qPV#L8!=e*yn=A`(iKLGbKs=YtCy| zYl~0x1yYv?-DtR%`;s2WT&!iB*FX`T4? z8;2LI81Od_|LRTv$glSFObTeWTYFi(cYpe)3ViFb+yP^vI=9gjT7}B$TG`|k#^=2- zER}J?8=f`)F#5=0yWJaz7wQHTf?$~-jB1*G%Z6qSWc@1kD z^Qmk+O(wh~B(!&$*Ftx=x<4>05AY1tGcg_@%Jo)Qm()G=#6MmL)Isg5H$HSV+fTpl zSA%xTLvdxaZovXa(f%(TqNW`b8?&7kC|R-5?ZP0xLKr;U(e3-J7OERy^4a|LdR}^0wzfD8nyYYJbroH^wyqc?d0|;C zoVcyS;PL_~GM?#~Tg!XDyk_*g z!{0pMxI_L}L+8kkv>!7~jYbL6F+g)pP5w)|2Do$cgU8QL!<4t3Urdenl7I&ypu?`e K9jJ5(O!^Ny&D|~l literal 0 HcmV?d00001 diff --git a/docs/source/assets/icon_28x20.png b/docs/source/assets/icon_28x20.png new file mode 100644 index 0000000000000000000000000000000000000000..ace20863daf357d5fb5e283a81ddaf69d0f26989 GIT binary patch literal 688 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 B4hR4M literal 0 HcmV?d00001 diff --git a/docs/source/conf.py b/docs/source/conf.py index 6e9e8c0..a656ded 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -2,9 +2,9 @@ # -- Project information -project = 'Lumache' -copyright = '2021, Graziella' -author = 'Graziella' +project = 'CanCurve' +copyright = '2024, NRCan' +author = 'Seth Bryant' release = '0.1' version = '0.1.0' @@ -17,6 +17,7 @@ 'sphinx.ext.autodoc', 'sphinx.ext.autosummary', 'sphinx.ext.intersphinx', + 'sphinx.ext.githubpages' ] intersphinx_mapping = { @@ -31,5 +32,23 @@ html_theme = 'sphinx_rtd_theme' -# -- Options for EPUB output -epub_show_urls = 'footnote' +# The name of an image file (relative to this directory) to place at the top +# of the sidebar. +html_logo = 'assets/icon_solid.png' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = "en" + +# locale_dirs = ['locale/'] # path is example but recommended. +# gettext_uuid = True +# gettext_compact = False + + +# Enable numref +numfig = True + + diff --git a/docs/source/index.rst b/docs/source/index.rst index 03d09a5..e9ed1ac 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -1,13 +1,8 @@ -Welcome to Lumache's documentation! +Welcome to CanCurve documentation! =================================== -**Lumache** (/lu'make/) is a Python library for cooks and food lovers -that creates recipes mixing random ingredients. -It pulls data from the `Open Food Facts database `_ -and offers a *simple* and *intuitive* API. -Check out the :doc:`usage` section for further information, including -how to :ref:`installation` the project. + .. note:: @@ -17,6 +12,10 @@ Contents -------- .. toctree:: + :maxdepth: 2 + + 01_getting-started + 02_user-guide + 03_tutorials + - usage - api diff --git a/docs/source/usage.rst b/docs/source/usage.rst deleted file mode 100644 index 924afcf..0000000 --- a/docs/source/usage.rst +++ /dev/null @@ -1,34 +0,0 @@ -Usage -===== - -.. _installation: - -Installation ------------- - -To use Lumache, first install it using pip: - -.. code-block:: console - - (.venv) $ pip install lumache - -Creating recipes ----------------- - -To retrieve a list of random ingredients, -you can use the ``lumache.get_random_ingredients()`` function: - -.. autofunction:: lumache.get_random_ingredients - -The ``kind`` parameter should be either ``"meat"``, ``"fish"``, -or ``"veggies"``. Otherwise, :py:func:`lumache.get_random_ingredients` -will raise an exception. - -.. autoexception:: lumache.InvalidKindError - -For example: - ->>> import lumache ->>> lumache.get_random_ingredients() -['shells', 'gorgonzola', 'parsley'] - diff --git a/tutorial/case1/c01/case1_c00.cancurve b/tutorial/case1/c01/case1_c00.cancurve new file mode 100644 index 0000000..81f9f57 --- /dev/null +++ b/tutorial/case1/c01/case1_c00.cancurve @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0cade17497567ebc323c29a8b8c3569d3e735dfd950874629b0db209928674a9 +size 159744 diff --git a/tutorial/case1/c02/copy_case1_c00.cancurve b/tutorial/case1/c02/copy_case1_c00.cancurve new file mode 100644 index 0000000..b8f981a --- /dev/null +++ b/tutorial/case1/c02/copy_case1_c00.cancurve @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:33c51ed8db874559c734b0c780770be8e1c9c0301e20befda2e8088ca5b400e1 +size 311296 diff --git a/tutorial/case1/c03/copy_copy_case1_c00.cancurve b/tutorial/case1/c03/copy_copy_case1_c00.cancurve new file mode 100644 index 0000000..d32088f --- /dev/null +++ b/tutorial/case1/c03/copy_copy_case1_c00.cancurve @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c52b7a24cf25c9c1197f3eb7fe14f7e96ccb54d10fb497a0e297468dc2f3acc0 +size 319488 diff --git a/tutorial/case1/c04/copy_copy_copy_case1_c00.cancurve b/tutorial/case1/c04/copy_copy_copy_case1_c00.cancurve new file mode 100644 index 0000000..d32088f --- /dev/null +++ b/tutorial/case1/c04/copy_copy_copy_case1_c00.cancurve @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c52b7a24cf25c9c1197f3eb7fe14f7e96ccb54d10fb497a0e297468dc2f3acc0 +size 319488 diff --git a/tutorial/case1/case1_result.cancurve b/tutorial/case1/case1_result.cancurve deleted file mode 100644 index 2d7c55d..0000000 --- a/tutorial/case1/case1_result.cancurve +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:15d0538b4570db4f7c7b9643b078acbdacf5faa33771cc6da8b2ece4a08cc15d -size 303104 diff --git a/tutorial/case1/metadata.txt b/tutorial/case1/readme.md similarity index 82% rename from tutorial/case1/metadata.txt rename to tutorial/case1/readme.md index ad62368..a116179 100644 --- a/tutorial/case1/metadata.txt +++ b/tutorial/case1/readme.md @@ -1,3 +1,10 @@ +# Tutorial 1 data + +See documentation for instructions + + +# Metadata + username: cef date: 2024-04-16 script_name: port_estimate.py From 0b5aab5d1c03cf379cb20b0cf1636eae49243656 Mon Sep 17 00:00:00 2001 From: Seth Bryant Date: Sat, 24 Aug 2024 14:52:16 +0200 Subject: [PATCH 4/9] Update 01_getting-started.rst --- docs/source/01_getting-started.rst | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/docs/source/01_getting-started.rst b/docs/source/01_getting-started.rst index efecdcd..29176d3 100644 --- a/docs/source/01_getting-started.rst +++ b/docs/source/01_getting-started.rst @@ -1,7 +1,8 @@ Getting Started ================== -The following sections will help you get started using CanCurve. -We suggest reading these first before moving onto the rest of the documentation. +The following sections will help you get started using CanCurve. +We suggest reading these first before moving onto the rest +of the documentation. .. _sec01-install: @@ -24,12 +25,12 @@ CanCurve's :ref:`Buildings Tool ` for example facilitates the creat This tool joins a table of restoration activities (e.g., repair dry-wall for $1000), called the :ref:`Cost-Item Table `, to a database of information on the flood vulnerability of those items, called the :ref:`Depth-Replacement-Factor (DRF) Database `. After identifying the target building or archetype for which a user would like to construct a DDF, typically a Cost-Item table is prepared using local pricing tables and expert knowledge on the restoration of the building. For the DRF Database, either the version shipped with CanCurve can be used (default), or an alternate file can be specified. -Once these inputs and the buidling metadata are prepared and entered into the Buidlings Tool, the four *Curve Creation* steps can be run to create and export a DDF in :ref:`CanFlood format `. +Once these inputs and the building metadata are prepared and entered into the Buildings Tool, the four *Curve Creation* steps can be run to create and export a DDF in :ref:`CanFlood format `. :numref:`fig01-conceptual-diagram` provides a diagram of how the remote, local, and project datasets are related. -See the :ref:`Quick Start Guide ` to learn more. - +See the :ref:`Quick Start Guide ` to learn more. + .. _fig01-conceptual-diagram: .. figure:: /assets/01-conceptual-diagram.png @@ -45,12 +46,12 @@ See the :ref:`Quick Start Guide ` to learn more. Quick-Start ----------------------- After installation of the plugin, the |CanCurve_icon| icon should appear on your plugins toolbar. -If you don't see the icon, first check the plugin is **checked** on the **Installed** tab of the **Manage and Install Plugins..** dialog; then check the **plugins toolbar** is enabled by right-clicking the QGIS toolbar. +If you don't see the icon, first check the plugin is **checked** on the **Installed** tab of the **Manage and Install Plugins..** dialog; then check the **plugins toolbar** is enabled by right-clicking the QGIS toolbar. .. |CanCurve_icon| image:: /assets/icon_solid.png :align: middle :width: 14 - + Click the |CanCurve_icon| to open the :ref:`Buildings Tool ` dialog. @@ -62,13 +63,13 @@ Click the |CanCurve_icon| to open the :ref:`Buildings Tool ` dialog :width: 900px Welcome tab of the Buildings Tool. - + To use the tool to create a DDF from data for an archetypal building, first populate the **Metadata** tab with whatever information is available (see the :ref:`Tutorials ` section for example data). To specify settings, the :ref:`Cost-Item Table `, the :ref:`Depth-Replacement-Factor (DRF) Database `, and the `Fixed Costs ` data, complete the **Data Input** tab. Finally, the four curve creation steps can be executed from the **Create Curve** tab, ending in an export of your DDF in :ref:`CanFlood format `. -See the :ref:`User Guide ` and the :ref:`Tutorials ` to learn more. +See the :ref:`User Guide ` and the :ref:`Tutorials ` to learn more. .. _sec01-faq: @@ -78,10 +79,10 @@ Frequently Asked Questions **Where can I find Cost-Item data for my archetype?** Typically these are provided by cost restoration experts using specialized software like Xactimate. - + **How can I add entries to my Depth-Replacement-Factor (DRF) Database** You'll need to use some software that allows editing of SQLite databases. We recommend `DB Browser for SQLite `_. - + From cbdd4ced815a55272ecb97e4aa407de71f850fbb Mon Sep 17 00:00:00 2001 From: Seth Bryant Date: Sat, 24 Aug 2024 22:37:37 +0200 Subject: [PATCH 5/9] content work --- docs/source/01_getting-started.rst | 21 ++++--- docs/source/02_user-guide.rst | 97 +++++++++++++++++++++++++----- 2 files changed, 93 insertions(+), 25 deletions(-) diff --git a/docs/source/01_getting-started.rst b/docs/source/01_getting-started.rst index 29176d3..02b9757 100644 --- a/docs/source/01_getting-started.rst +++ b/docs/source/01_getting-started.rst @@ -1,8 +1,7 @@ Getting Started ================== The following sections will help you get started using CanCurve. -We suggest reading these first before moving onto the rest -of the documentation. +We suggest reading these sections first. .. _sec01-install: @@ -12,7 +11,8 @@ Installation To install CanCurve, you first need to install QGIS, then you can install CanCurve from the Plugin Repository. -For detailed instructions, refer to the `project page README `_. For best performance, ensure you have the specified version of QGIS installed. +For detailed instructions, refer to the `project README `_. +For best performance, ensure you have the specified version of QGIS installed. .. _sec01-overview: @@ -20,7 +20,7 @@ For detailed instructions, refer to the `project page README `_ to create flood risk models. -CanCurve's :ref:`Buildings Tool ` for example facilitates the creation of Depth Damage Functions (DDF) from detailed restoration cost data for archetypal buildings. +CanCurve's :ref:`Buildings Tool ` for example facilitates the creation of DDFs from detailed restoration cost data for archetypal buildings. This tool joins a table of restoration activities (e.g., repair dry-wall for $1000), called the :ref:`Cost-Item Table `, to a database of information on the flood vulnerability of those items, called the :ref:`Depth-Replacement-Factor (DRF) Database `. After identifying the target building or archetype for which a user would like to construct a DDF, typically a Cost-Item table is prepared using local pricing tables and expert knowledge on the restoration of the building. @@ -46,13 +46,13 @@ See the :ref:`Quick Start Guide ` to learn more. Quick-Start ----------------------- After installation of the plugin, the |CanCurve_icon| icon should appear on your plugins toolbar. -If you don't see the icon, first check the plugin is **checked** on the **Installed** tab of the **Manage and Install Plugins..** dialog; then check the **plugins toolbar** is enabled by right-clicking the QGIS toolbar. +If you don't see the icon, first ensure the plugin is checked on the **Installed** tab of the **Manage and Install Plugins..** dialog; then ensure the **plugins toolbar** is enabled by right-clicking the QGIS toolbar. .. |CanCurve_icon| image:: /assets/icon_solid.png :align: middle :width: 14 -Click the |CanCurve_icon| to open the :ref:`Buildings Tool ` dialog. +To start working with CanCurve, click the |CanCurve_icon| to open the :ref:`Buildings Tool ` dialog. .. _fig01-dialog-welcome: @@ -64,12 +64,13 @@ Click the |CanCurve_icon| to open the :ref:`Buildings Tool ` dialog Welcome tab of the Buildings Tool. -To use the tool to create a DDF from data for an archetypal building, first populate the **Metadata** tab with whatever information is available (see the :ref:`Tutorials ` section for example data). -To specify settings, the :ref:`Cost-Item Table `, the :ref:`Depth-Replacement-Factor (DRF) Database `, and the `Fixed Costs ` data, complete the **Data Input** tab. +To use the tool to create a DDF from data for your archetypal building, first populate the **Metadata** tab with whatever information is available (see the :ref:`Tutorials ` section for example data). +Note that not all fields are required, but the more information you provide, the more complete your DDF will be. +To specify settings, the :ref:`Cost-Item Table `, the :ref:`Depth-Replacement-Factor (DRF) Database `, and the :ref:`Fixed Costs ` data, complete the **Data Input** tab. Finally, the four curve creation steps can be executed from the **Create Curve** tab, ending in an export of your DDF in :ref:`CanFlood format `. -See the :ref:`User Guide ` and the :ref:`Tutorials ` to learn more. +See the :ref:`User Guide ` and the :ref:`Tutorials ` section to learn more. .. _sec01-faq: @@ -78,7 +79,7 @@ Frequently Asked Questions -------------------------- **Where can I find Cost-Item data for my archetype?** - Typically these are provided by cost restoration experts using specialized software like Xactimate. + Typically this information is obtained from cost restoration experts using specialized software like Xactimate and a detailed model of the structure. **How can I add entries to my Depth-Replacement-Factor (DRF) Database** You'll need to use some software that allows editing of SQLite databases. We recommend `DB Browser for SQLite `_. diff --git a/docs/source/02_user-guide.rst b/docs/source/02_user-guide.rst index 66f7b6c..2df8b33 100644 --- a/docs/source/02_user-guide.rst +++ b/docs/source/02_user-guide.rst @@ -7,8 +7,8 @@ User Guide: Buildings Tool -This tool is designed to create Depth Damage Functions (DDF) for Canadian buildings from detailed restoration cost data for an archetypal structure. -CanCurve's *Buildings Tool* basically joins this cost data to a database of item vulnerability then groups the data by depth to create a simple function for *flood damage* against *flood depth* (with some additional features of course). +The CanCurve **Buildings Tool** is designed to create Depth Damage Functions (DDF) for an archetypal Canadian building from detailed restoration cost data. +Basically, the tool joins this cost data to a database of item vulnerability then groups the data by depth to create a simple function for *flood damage* against *flood depth* (with some additional features of course). Introduction ------------- @@ -19,34 +19,35 @@ At the core of most flood risk models are a set of flood damage functions. Depth Damage Functions (DDF) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Flood damage functions are a mathematical relationship between hazard and vulnerability variables (e.g., flood depth) and the estimated damages from flooding (e.g., building repair costs) for an individual asset. -The most basic functions directly relate flood depth to damage --- so-called depth-damage curves or functions (DDF) widely attributed to Gilbert White [#]_. +Flood damage functions are a mathematical relationship between hazard and vulnerability variables against the estimated damages from flooding (e.g., building repair costs) for an individual asset. +The most basic functions directly relate flood depth to damage --- the so-called depth-damage curves or functions (DDF) widely attributed to Gilbert White [#1]_. Damage functions are typically categorized based on the model's focus or objective, such as the sector (residential vs. non-residential), tangibility (tangible vs. intangible), damage mechanism (indirect vs. direct), and uncertainty treatment (deterministic vs. probabilistic) [#2]_. -Further classification considers function structure such as continuity (discrete vs. continuous) and for tangible economic functions the asset total value relation (relative vs. absolute). +Further classification considers the function structure such as continuity (discrete vs. continuous) and for tangible economic functions the asset total value relation (relative vs. absolute). While depth-damage functions are still common, research in the past two decades has advanced the understanding of flood damage processes and, along with new data and techniques, has led to more sophisticated and accurate multi-variate models [#3]_. +CanCurve currently only supports discrete tangible depth-damage functions. Flood Risk Modelling in Canada ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -NRCan develops and maintains flood risk software and data tools to promote disaster resilience. +NRCan develops and maintains flood risk software and data tools to support disaster resilience in Canada. In particular, NRCan maintains `CanFlood `_, a QGIS plugin for building flood risk models. -A major input or component of CanFlood models are depth damage functions (DDFs). +A major input or component of CanFlood models are DDFs. Traditionally, CanFlood users struggled to obtain DDFs from past projects or public repositories, leading to inefficient and inaccurate risk modelling. -To address this gap, in 2023 NRCan commisend Arcadis to develop a system for constructing local DDFs in Canada. -This resulted in a formal process for constructing DDFs called Program for the Development of Flood Damage (Vulnerability) Curves for buildings in Canada (a.k.a. the DDF Program or DDFP). -To operationalize DDFP, NRCan initated the CanCurve project which is intended to support accurate and efficient flood risk modelling in Canada, specifically by improving practices surrounding depth damage functions in CanFlood. - +To address this gap, in 2023 NRCan commissioned the Arcadis company to develop a system for constructing local DDFs in Canada. +This resulted in a formal process for constructing DDFs called *Program for the Development of Flood Damage (Vulnerability) Curves for buildings in Canada* (a.k.a. the DDF Program or DDFP). +To operationalize DDFP, NRCan initiated the CanCurve project. +.. _sec02-dataRequirements: Data Requirements ----------------- -The Buildings Tool requires three types of data about the archetypal building in order to generate a DDF. +The **Buildings Tool** requires three types of data about the archetypal building in order to generate a DDF. Building Metadata ~~~~~~~~~~~~~~~~~ -Metadata includes any information that might be relevant to estimating the flood vulnerability of an archetype, like the year of construction, the date associated with the cost estimate, the person preparing the estimate, etc. +Building metadata includes any information that might be relevant to estimating the flood vulnerability of an archetype, like the year of construction, the date associated with the cost estimate, the person preparing the estimate, etc. This information is used by the Buildings Tool to populate metadata fields on output DDFs and, in some cases, to assemble the DDF. -Metadata is specified on the *Metadata* tab. +Metadata is specified on the **Metadata** tab and stored in the **c00_bldg_meta** table of the Project Database. The user is expected to obtain this information from expert knowledge and documentation on the archetype. .. _sec02-costInformation: @@ -71,6 +72,69 @@ This represents the sum of all depth-invariant cost items for each floor. For example, mobilization costs or permit fees --- restoration costs that would be incurred no mater how severe the flood exposure. + +Key Concepts +----------------- +The **Buildings Tool** is composed of the Graphical User Interface (GUI) front-end and a collection of python scripts for performing the data operations in the back-end, called the *core* which contains four *curve creation* steps. +A typical workflow starts by preparing the :ref:`Input Data `, populating the fields in the GUI, then executing the :ref:`Curve Creation Steps <_sec02-Core>`. + +.. _sec02-Core: + +Core: Curve Creation Steps +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +At the core of the Buildings Tool are four curve creation steps that are executed in sequence to generate a DDF. +These are controlled from the **Create Curve** tab and can be executed individually or all at once: + +1. **Setup project**: + Construct the :ref:`project SQLite database ` and load data into it from the GUI. + +2. **Data join and multiply costs**: + Join DRF to the Cost-Item table, then multiply through to create fractional restoration costs. + +3. **Data group and concat stories**: + Group restoration costs by story and concatenate them into a single table. + +4. **Export result in CanFlood format**: + Export the DDF in the CanFlood format. + +To pass information between these steps and to save the user's progress to a file, all of these steps read or write to a SQLite database, called the :ref:`Project Database `. + + +Project Database +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +The **Project Database** is a SQLite database that stores the data and metadata for the project. +While knowledge of the project database is not strictly necessary to use CanCurve, it can be useful for debugging and understanding the tool's operation. +The database is composed of several tables, each of which is used by one or more of the curve creation steps, as shown in the table below. + +.. _tab02-ProjectDatabase: + + +.. table:: Project Database tables and corresponding Curve Creation Steps + :widths: auto + + +------------------+--------------------------------------------+------+ + | Table Name | Description | Step | + +==================+============================================+======+ + | c00_bldg_meta | Building metadata | 1 | + +------------------+--------------------------------------------+------+ + | c00_cost_items | Cost-Item table | 1 | + +------------------+--------------------------------------------+------+ + | c00_drf | DRF database | 1 | + +------------------+--------------------------------------------+------+ + | c00_fixed_costs | Fixed costs | 1 | + +------------------+--------------------------------------------+------+ + | c01_depth_rcv | Fractional item cost for each depth | 2 | + +------------------+--------------------------------------------+------+ + | c02_ddf | DDF for each story | 3 | + +------------------+--------------------------------------------+------+ + | project_meta | Metadata tracking operations on the db | all | + +------------------+--------------------------------------------+------+ + | project_settings | Project settings | 1 | + +------------------+--------------------------------------------+------+ + +To view and manipulate the project database, the user can use a SQLite database viewer like `DB Browser for SQLite `_. + + .. _sec02-CanFloodFormat: CanFlood Format DDF @@ -96,9 +160,12 @@ Below is a minimum example CanFlood format DDF. -.. [#] White, G. F.: Human Adjustment to Floods. A Geographical Approach to the Flood Problem in the United States, The University of Chicago, Chicago, 1945. + +.. [#1] White, G. F.: Human Adjustment to Floods. A Geographical Approach to the Flood Problem in the United States, The University of Chicago, Chicago, 1945. .. [#2] Merz, B., Kreibich, H., Schwarze, R., and Thieken, A.: Review article “Assessment of economic flood damage,” Nat. Hazards Earth Syst. Sci., 10, 1697–1724, https://doi.org/10.5194/nhess-10-1697-2010, 2010. .. [#3] Schröter, K., Kreibich, H., Vogel, K., Riggelsen, C., Scherbaum, F., and Merz, B.: How useful are complex flood damage models?, Water Resources Research, 50, 3378–3395, https://doi.org/10.1002/2013WR014396, 2014. +.. [#4] Only those DRF entries intersecting with the c00_cost_items table are included. + From 7fbca2cfa302ed021eddea25befbe6d5a188b217 Mon Sep 17 00:00:00 2001 From: Seth Bryant Date: Sat, 24 Aug 2024 22:37:49 +0200 Subject: [PATCH 6/9] Update core.py --- cancurve/bldgs/core.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cancurve/bldgs/core.py b/cancurve/bldgs/core.py index 33a8f45..f16bfa8 100644 --- a/cancurve/bldgs/core.py +++ b/cancurve/bldgs/core.py @@ -642,7 +642,7 @@ def c00_setup_project( ): - """build project SQLite. load data into it + """build project SQLite database and load data into it Params @@ -923,7 +923,7 @@ def c00_setup_project( def c01_join_drf(proj_db_fp, log=None, ): - """Join DRF to CI then multiply through to create 'depth_rcv' table + """Join DRF to CI then multiply through to create fractional restoration costs Params From 4b961aeb967af4b72640e473488d4068a8c102c1 Mon Sep 17 00:00:00 2001 From: Seth Bryant Date: Sun, 25 Aug 2024 18:26:39 +0200 Subject: [PATCH 7/9] user guide edits --- cancurve/bldgs/cc_bldgs_dialog.ui | 23 +++++--- docs/source/02_user-guide.rst | 93 +++++++++++++++++++------------ 2 files changed, 73 insertions(+), 43 deletions(-) diff --git a/cancurve/bldgs/cc_bldgs_dialog.ui b/cancurve/bldgs/cc_bldgs_dialog.ui index e14729e..d524bdd 100644 --- a/cancurve/bldgs/cc_bldgs_dialog.ui +++ b/cancurve/bldgs/cc_bldgs_dialog.ui @@ -147,7 +147,7 @@ p, li { white-space: pre-wrap; } <p style=" margin-top:12px; margin-bottom:12px; margin-left:16px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt; font-weight:600;">Metadata</span><span style=" font-size:12pt;">: These standard flood-related building properties are specified on the </span><span style=" font-size:12pt; font-style:italic;">Metadata</span><span style=" font-size:12pt;"> tab. This metadata will be used to populate the metadata of your DDF. Some of the fields are also used in the calculation process.</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:16px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt; font-weight:600;">Cost-Item Table: </span><span style=" font-size:12pt;">This table of restoration items and their costs is specifed as a CSV file on the </span><span style=" font-size:12pt; font-style:italic;">Data Input</span><span style=" font-size:12pt;"> tab. Click </span><a href="https://github.com/NRCan/CanCurve/blob/main/tests/data/bldgs/case1/R_1-L-BD-CU_ABCA.csv"><span style=" font-size:12pt; text-decoration: underline; color:#0000ff;">here</span></a><span style=" font-size:12pt;"> for an example. </span><span style=" font-size:14px;"><br /></span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">The following inputs are optional:</span></p> -<p style=" margin-top:12px; margin-bottom:12px; margin-left:16px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt; font-weight:600;">Depth-Replacement-Factor (DRF) dataset</span><span style=" font-size:12pt;">: This dataset relates flood depth to the percentage loss or damage of a restoration item and is specified on the </span><span style=" font-size:12pt; font-style:italic;">Data Input</span><span style=" font-size:12pt;"> tab. By default, the DRF dataset shipped with CanCurve will be used.</span></p> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:16px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt; font-weight:600;">Depth Replacement-Factor (DRF) dataset</span><span style=" font-size:12pt;">: This dataset relates flood depth to the percentage loss or damage of a restoration item and is specified on the </span><span style=" font-size:12pt; font-style:italic;">Data Input</span><span style=" font-size:12pt;"> tab. By default, the DRF dataset shipped with CanCurve will be used.</span></p> <p style="-qt-paragraph-type:empty; margin-top:12px; margin-bottom:12px; margin-left:16px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt;"><br /></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">Navigate through the tabs at the top of the window from left-to-right to create your own DDF.</span></p></body></html> @@ -364,7 +364,7 @@ QGroupBox { - Building Layout + Building Layout* @@ -413,7 +413,7 @@ QGroupBox { - Basement height (value) + Basement height (value)* @@ -505,14 +505,14 @@ QGroupBox { This value is used when 'RCV/Area' is selected to scale the replacement costs (e.g., to footprint area) - Area (value) + Structure area (value)* - Quality of Building Materials + Quality of building materials @@ -797,7 +797,7 @@ QGroupBox { - Cost-Item Table File: + Cost-Item Table: @@ -948,7 +948,7 @@ QGroupBox { - Depth-Replacement-Fraction File + Depth Replacement-Factor (DRF) Database: @@ -1403,6 +1403,9 @@ QLabel { 0 + + build project SQLite database and load data into it + Run @@ -1511,6 +1514,9 @@ QLabel { 0 + + Join DRF to CI then multiply through to create fractional restoration costs + Run @@ -1600,6 +1606,9 @@ QLabel { 0 + + group by story and assemble DDF + Run diff --git a/docs/source/02_user-guide.rst b/docs/source/02_user-guide.rst index 2df8b33..88f972f 100644 --- a/docs/source/02_user-guide.rst +++ b/docs/source/02_user-guide.rst @@ -29,11 +29,11 @@ CanCurve currently only supports discrete tangible depth-damage functions. Flood Risk Modelling in Canada ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -NRCan develops and maintains flood risk software and data tools to support disaster resilience in Canada. -In particular, NRCan maintains `CanFlood `_, a QGIS plugin for building flood risk models. -A major input or component of CanFlood models are DDFs. -Traditionally, CanFlood users struggled to obtain DDFs from past projects or public repositories, leading to inefficient and inaccurate risk modelling. -To address this gap, in 2023 NRCan commissioned the Arcadis company to develop a system for constructing local DDFs in Canada. +NRCan develops and maintains flood risk software and data tools to support disaster resilience in Canada. +In particular, NRCan maintains `CanFlood `_, a QGIS plugin for building flood risk models. +A major input or component of CanFlood models are DDFs. +Traditionally, CanFlood users struggled to obtain DDFs from past projects or public repositories, leading to inefficient and inaccurate risk modelling. +To address this gap, in 2023 NRCan commissioned the Arcadis company to develop a system for constructing local DDFs in Canada. This resulted in a formal process for constructing DDFs called *Program for the Development of Flood Damage (Vulnerability) Curves for buildings in Canada* (a.k.a. the DDF Program or DDFP). To operationalize DDFP, NRCan initiated the CanCurve project. @@ -41,42 +41,60 @@ To operationalize DDFP, NRCan initiated the CanCurve project. Data Requirements ----------------- -The **Buildings Tool** requires three types of data about the archetypal building in order to generate a DDF. +The **Buildings Tool** requires three types of data about the archetypal building in order to generate a DDF summarized in the following sections. +See :ref:`Tutorials ` for example data. Building Metadata ~~~~~~~~~~~~~~~~~ -Building metadata includes any information that might be relevant to estimating the flood vulnerability of an archetype, like the year of construction, the date associated with the cost estimate, the person preparing the estimate, etc. +Building metadata is simple information relevant to estimating the flood vulnerability of an archetype, like the year of construction, the date associated with the cost estimate, the person preparing the estimate, etc. This information is used by the Buildings Tool to populate metadata fields on output DDFs and, in some cases, to assemble the DDF. Metadata is specified on the **Metadata** tab and stored in the **c00_bldg_meta** table of the Project Database. -The user is expected to obtain this information from expert knowledge and documentation on the archetype. +The user is expected to obtain this information from expert knowledge and documentation on the archetype. +To assemble the DDF, the following metadata is required: -.. _sec02-costInformation: + - **Building Layout** (``bldg_layout``): Corresponds to categories in the DRF dataset. + - **Basement height value** (``basement_height_m``): The height of the basement in meters, used to concatenate the cost values between storys. + - **Structure area value** (``scale_value``): The area of the structure in square meters used to scale the cost values for Area-based cost basis. -Cost Information +It is good practice to specify additional metadata fields, which the Buidings Tool propagates onto the output DDFs. + +.. _sec02-costItem: + +Cost-Item Table ~~~~~~~~~~~~~~~~ -This restoration item and cost data is specifed as a CSV file on the Data Input tab. Click here for an example. [Click here for an example]. +This restoration item and cost data is specifed as a CSV file on the **Data Input** tab. +Typically this information is obtained from cost restoration experts using specialized software like Xactimate and a detailed model of the structure. + .. _sec02-DRF: -Depth-Replacement-Factor (DRF) Dataset +Depth Replacement-Factor (DRF) Dataset ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -This dataset relates flood depth to the percentage loss or damage of a restoration item and is specified on the Data Input tab. By default, the DRF dataset shipped with CanCurve will be used. +This dataset relates flood depth to the percentage loss or damage of a restoration item and is specified on the **Data Input** tab. +By default, the DRF dataset shipped with CanCurve will be used, which is installed into the `./db` directory of the CanCurve plugin. +The DRF dataset is a SQLite database with three tables: + + - **cost_item_meta**: lookup and description fields for each cost-item with key fields ``cat``, ``sel``, and ``bldg_layout``. + - **drf**: the depth-replacement-factor for each cost-item with key fields ``cat``, ``sel``, and ``bldg_layout``. + - **meta**: metadata for the DRF dataset. + + .. _sec02-fixedCosts: Fixed Costs ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -This simple dataset has two simple values, the fixed costs for the restoration of the basement and the mainfloor. -This represents the sum of all depth-invariant cost items for each floor. -For example, mobilization costs or permit fees --- restoration costs that would be incurred no mater how severe the flood exposure. - +This simple dataset has two values: the fixed costs for the restoration of the basement and the mainfloor. +This represents the sum of all depth-invariant cost items for each floor i.e., restoration costs that would be incurred no mater how severe the flood exposure. +For example, mobilization costs or permit fees. +This dataset is specified on the **Data Input** tab and stored in the **c00_fixed_costs** table of the Project Database. Key Concepts ----------------- -The **Buildings Tool** is composed of the Graphical User Interface (GUI) front-end and a collection of python scripts for performing the data operations in the back-end, called the *core* which contains four *curve creation* steps. -A typical workflow starts by preparing the :ref:`Input Data `, populating the fields in the GUI, then executing the :ref:`Curve Creation Steps <_sec02-Core>`. +The **Buildings Tool** is composed of the Graphical User Interface (GUI) front-end and a collection of python scripts for performing the data operations in the back-end, called the ``core`` which contains four *curve creation* steps. +A typical workflow starts by preparing the :ref:`Input Data `, populating the fields in the GUI, then executing the :ref:`Curve Creation Steps `. .. _sec02-Core: @@ -85,26 +103,27 @@ Core: Curve Creation Steps At the core of the Buildings Tool are four curve creation steps that are executed in sequence to generate a DDF. These are controlled from the **Create Curve** tab and can be executed individually or all at once: -1. **Setup project**: - Construct the :ref:`project SQLite database ` and load data into it from the GUI. +1. **Setup project**: + Construct the :ref:`Project Database ` and load data into it from the GUI. -2. **Data join and multiply costs**: - Join DRF to the Cost-Item table, then multiply through to create fractional restoration costs. +2. **Data join and multiply costs**: + Join DRF to the :ref:`Cost-Item table `, then multiply through to create fractional restoration costs. -3. **Data group and concat stories**: +3. **Data group and concat stories**: Group restoration costs by story and concatenate them into a single table. -4. **Export result in CanFlood format**: - Export the DDF in the CanFlood format. +4. **Export result in CanFlood format**: + Export the DDF in the :ref:`CanFlood format `. -To pass information between these steps and to save the user's progress to a file, all of these steps read or write to a SQLite database, called the :ref:`Project Database `. +To pass information between these steps and to save the user's progress to a file, all of these steps read or write to the :ref:`Project Database `. +.. _sec02-projectDatabase: Project Database ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -The **Project Database** is a SQLite database that stores the data and metadata for the project. -While knowledge of the project database is not strictly necessary to use CanCurve, it can be useful for debugging and understanding the tool's operation. -The database is composed of several tables, each of which is used by one or more of the curve creation steps, as shown in the table below. +The **Project Database** is a SQLite database that the Buildings Tool uses to store the data and metadata for the project. +For most workflows, the Project Database is hidden in teh background; however, knowledge of the project database can be useful for debugging and understanding the tool's operation. +The database is composed of several tables, each of which is used by one or more of the :ref:`curve creation steps `, as shown in the table below. .. _tab02-ProjectDatabase: @@ -119,7 +138,7 @@ The database is composed of several tables, each of which is used by one or more +------------------+--------------------------------------------+------+ | c00_cost_items | Cost-Item table | 1 | +------------------+--------------------------------------------+------+ - | c00_drf | DRF database | 1 | + | c00_drf | DRF database [#4]_ | 1 | +------------------+--------------------------------------------+------+ | c00_fixed_costs | Fixed costs | 1 | +------------------+--------------------------------------------+------+ @@ -139,16 +158,18 @@ To view and manipulate the project database, the user can use a SQLite database CanFlood Format DDF ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Currently, the buildings tool supports exporting DDFs in the CanFlood format. The `CanFlood `_ program expects DDFs to be in a certain format, namely an XLSX file with two columns divided into two sections. The first section contains the metadata in key-value pairs while the second section contains the exposure-impact series. CanFlood requires three keys in the metadata section: -- **tag**: used for linking the curve to the inventory. -- **impact_units**: used for indicating what units the impact values are in (e.g., $CAD) on plots and reports. -- **exposure**: used to indicate the transition between the metadata and the exposure-impact sections. + + - ``tag``: used for linking the curve to the inventory. + - ``impact_units``: used for indicating what units the impact values are in (e.g., $CAD) on plots and reports. + - ``exposure``: used to indicate the transition between the metadata and the exposure-impact sections. + It is good practice to include additional metadata (e.g., location); however, these are not strictly required by CanFlood. Below is a minimum example CanFlood format DDF. - .. _fig02-CanCurve-format: .. figure:: /assets/02-CanCurve-format.png @@ -156,7 +177,7 @@ Below is a minimum example CanFlood format DDF. :align: center :width: 900px - Conceptual diagram of the CanCurve Buildings Tool. + CanFlood format DDF minimum example. From dab8b14c171b70ace454fc060f1a53be05b4eff8 Mon Sep 17 00:00:00 2001 From: Seth Bryant Date: Sun, 25 Aug 2024 19:59:23 +0200 Subject: [PATCH 8/9] update docs --- docs/cspell.json | 32 +++++++++ docs/source/01_getting-started.rst | 13 ++-- docs/source/02_user-guide.rst | 15 ++-- docs/source/03_tutorials.rst | 67 ++++++++++++++++-- docs/source/assets/03_01_cc.PNG | Bin 0 -> 27742 bytes docs/source/assets/03_01_dataInput.PNG | Bin 0 -> 22218 bytes docs/source/assets/03_01_meta01.PNG | Bin 0 -> 21557 bytes docs/source/assets/03_01_meta02.PNG | Bin 0 -> 10582 bytes docs/source/index.rst | 2 +- tutorial/{case1 => 01}/R_1-L-BD-CU_ABCA.csv | 0 tutorial/{case1 => 01}/c01/case1_c00.cancurve | 0 .../{case1 => 01}/c02/copy_case1_c00.cancurve | 0 .../c03/copy_copy_case1_c00.cancurve | 0 .../c04/copy_copy_copy_case1_c00.cancurve | 0 tutorial/{case1 => 01}/readme.md | 0 15 files changed, 116 insertions(+), 13 deletions(-) create mode 100644 docs/cspell.json create mode 100644 docs/source/assets/03_01_cc.PNG create mode 100644 docs/source/assets/03_01_dataInput.PNG create mode 100644 docs/source/assets/03_01_meta01.PNG create mode 100644 docs/source/assets/03_01_meta02.PNG rename tutorial/{case1 => 01}/R_1-L-BD-CU_ABCA.csv (100%) rename tutorial/{case1 => 01}/c01/case1_c00.cancurve (100%) rename tutorial/{case1 => 01}/c02/copy_case1_c00.cancurve (100%) rename tutorial/{case1 => 01}/c03/copy_copy_case1_c00.cancurve (100%) rename tutorial/{case1 => 01}/c04/copy_copy_copy_case1_c00.cancurve (100%) rename tutorial/{case1 => 01}/readme.md (100%) diff --git a/docs/cspell.json b/docs/cspell.json new file mode 100644 index 0000000..296f70f --- /dev/null +++ b/docs/cspell.json @@ -0,0 +1,32 @@ +{ + "language": "en-CA", + "dictionaries": ["en-CA"], + "dictionaryDefinitions": [ + { + "name": "en-CA", + "path": "l:\\09_REPOS\\01_COMMON\\sphinx\\env\\sphinx\\node_modules\\@cspell\\dict-en-ca\\en_CA.trie" + } + ], + "enableFiletypes": [ + "rst" + ], + "ignoreRegExpList": [ + "/<[^>]*>/g", // Ignore text within angle brackets + "/^\\../" // Ignore lines that begin with .. + ], + "ignorePaths": [ + "package-lock.json", + "node_modules", + "vscode-extension", + ".git/objects", + ".vscode", + ".vscode-insiders", + ".settings" + ], + "userWords": [ + "operationalize", + "QGIS", + "Xactimate", + "DDFP" + ] +} diff --git a/docs/source/01_getting-started.rst b/docs/source/01_getting-started.rst index 02b9757..6a4a3b0 100644 --- a/docs/source/01_getting-started.rst +++ b/docs/source/01_getting-started.rst @@ -1,3 +1,5 @@ +.. _sec01-gettingStarted: + Getting Started ================== The following sections will help you get started using CanCurve. @@ -17,12 +19,11 @@ For best performance, ensure you have the specified version of QGIS installed. .. _sec01-overview: -Overview +Overviews ----------------------- CanCurve is a collection of tools for generating Depth Damage Functions (DDF) used by platforms like `CanFlood `_ to create flood risk models. CanCurve's :ref:`Buildings Tool ` for example facilitates the creation of DDFs from detailed restoration cost data for archetypal buildings. - -This tool joins a table of restoration activities (e.g., repair dry-wall for $1000), called the :ref:`Cost-Item Table `, to a database of information on the flood vulnerability of those items, called the :ref:`Depth-Replacement-Factor (DRF) Database `. +This tool joins a table of restoration activities (e.g., repair dry-wall for $1000), called the :ref:`Cost-Item Table `, to a database of information on the flood vulnerability of those items, called the :ref:`Depth-Replacement-Factor (DRF) Database `. After identifying the target building or archetype for which a user would like to construct a DDF, typically a Cost-Item table is prepared using local pricing tables and expert knowledge on the restoration of the building. For the DRF Database, either the version shipped with CanCurve can be used (default), or an alternate file can be specified. Once these inputs and the building metadata are prepared and entered into the Buildings Tool, the four *Curve Creation* steps can be run to create and export a DDF in :ref:`CanFlood format `. @@ -64,9 +65,10 @@ To start working with CanCurve, click the |CanCurve_icon| to open the :ref:`Buil Welcome tab of the Buildings Tool. + To use the tool to create a DDF from data for your archetypal building, first populate the **Metadata** tab with whatever information is available (see the :ref:`Tutorials ` section for example data). Note that not all fields are required, but the more information you provide, the more complete your DDF will be. -To specify settings, the :ref:`Cost-Item Table `, the :ref:`Depth-Replacement-Factor (DRF) Database `, and the :ref:`Fixed Costs ` data, complete the **Data Input** tab. +To specify settings, the :ref:`Cost-Item Table `, the :ref:`Depth-Replacement-Factor (DRF) Database `, and the :ref:`Fixed Costs ` data, complete the **Data Input** tab. Finally, the four curve creation steps can be executed from the **Create Curve** tab, ending in an export of your DDF in :ref:`CanFlood format `. @@ -84,6 +86,9 @@ Frequently Asked Questions **How can I add entries to my Depth-Replacement-Factor (DRF) Database** You'll need to use some software that allows editing of SQLite databases. We recommend `DB Browser for SQLite `_. +**Where can I go to get help?** + The best place to get help is the `CanCurve GitHub Issues `_ page where you can read through questions posted by others or ask your own. + diff --git a/docs/source/02_user-guide.rst b/docs/source/02_user-guide.rst index 88f972f..f304cf3 100644 --- a/docs/source/02_user-guide.rst +++ b/docs/source/02_user-guide.rst @@ -1,14 +1,14 @@ .. _sec02-userGuide: + User Guide: Buildings Tool ========================== .. _sec02-bldgs: - The CanCurve **Buildings Tool** is designed to create Depth Damage Functions (DDF) for an archetypal Canadian building from detailed restoration cost data. -Basically, the tool joins this cost data to a database of item vulnerability then groups the data by depth to create a simple function for *flood damage* against *flood depth* (with some additional features of course). +Basically, the tool joins this cost data to a database of item vulnerability then groups the data by depth to create a simple function for *flood damage* against *flood depth* (with some additional features of course). Introduction ------------- @@ -127,7 +127,6 @@ The database is composed of several tables, each of which is used by one or more .. _tab02-ProjectDatabase: - .. table:: Project Database tables and corresponding Curve Creation Steps :widths: auto @@ -169,7 +168,7 @@ CanFlood requires three keys in the metadata section: It is good practice to include additional metadata (e.g., location); however, these are not strictly required by CanFlood. Below is a minimum example CanFlood format DDF. - + .. _fig02-CanCurve-format: .. figure:: /assets/02-CanCurve-format.png @@ -179,6 +178,14 @@ Below is a minimum example CanFlood format DDF. CanFlood format DDF minimum example. +.. _sec02-costBasis: + +Cost Basis +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +CanCurve supports two cost bases: + - **Total** ($/structure): The resulting DDF will reflect the total restoration costs for the archetype as a function of depth. This can be useful for debugging and for risk models with very similar structures. For DDFs of this type, the calculated impacts should not be scaled. + - **Area-based** ($/area): The resulting DDF will reflect the restoration costs per area of the structure as a function of depth. The units of the DDF impact values can be $/ft^2 or $/m^2 depending on what was specified in the **Structure area** field on the **Metadata** tab. This basis is useful for adapting the resulting archetypal DDF to other structures by scaling the impact values by the area of the structure. + diff --git a/docs/source/03_tutorials.rst b/docs/source/03_tutorials.rst index 4707727..bb0f7e8 100644 --- a/docs/source/03_tutorials.rst +++ b/docs/source/03_tutorials.rst @@ -3,11 +3,70 @@ Tutorials ========================== -A collection of example data and results +This section contains a collection of tutorials with example data and results. +Be sure to read and follow the `Getting Started Section ` before attempting these tutorials. .. _sec03-tut01: -Tutorial 1: 1-Story Residential ----------------------------------- -This tutorial will teach you how to create a DDF from a Cost-Item table and some default values +Tutorial 1: Single-Story Residential +------------------------------------- + +This tutorial will demonstrate how to create a :ref:`CanFlood format DDF ` from a :ref:`Cost-Item Table ` and some default values for a single-story residential building using the :ref:`Buildings Tool `. + +Step 1: Download the example Cost-Item Table +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +From the project repository, download the `example Cost-Item Table `_ somewhere easy to find. + +Step 2: Enter Metadata +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Open the :ref:`Buildings Tool `, navigate to the **Metadata** tab, and populate the fields as shown below: + + +.. figure:: /assets/03_01_meta01.PNG + :alt: Metadata Tab + :align: center + :width: 900px + +.. figure:: /assets/03_01_meta02.PNG + :alt: Metadata Tab + :align: center + :width: 900px + + +Step 3: Data Input +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Navigate to the **Data Input** tab and, using the below image for reference, populate the following fields: + + - **Working Directory**: choose your own path or use the default + - **Project Name**: choose your own name or use the name shown + - **Cost-Item Table**: browse to the downloaded example Cost-Item Table .csv file from Step 1. + - **Fixed Costs**: enter the two values shown below. + - **Cost Basis**: For this tutorial we will use :ref:`Area Based `. + - **DRF Database**: By default, the field should be populated with the filepath to the DRF Database that ships with CanCurve. + +.. figure:: /assets/03_01_dataInput.PNG + :alt: Data Input Tab + :align: center + :width: 900px + +Step 4: Create Curve +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Navigate to the **Create Curve** tab. +In the **Run Control** box, select **All**, then click **Run**. +You should see the progress of each of the four :ref:`Curve Creation Steps ` along with a message in the bottom window informing you that the DDF has been output to the **Working Directory** you specified in Step 3, similar to what is shown below. + +.. figure:: /assets/03_01_cc.PNG + :alt: Data Input Tab + :align: center + :width: 900px + +For additional log messages, you can return to the main QGIS window, open the log panel (View>Panels>Log Messages), and select the **CanCurve** tab. +Scrolling up, you should see diagnostic messages for each of the four steps you just ran. +This is the end of a typical workflow; however, the **Buildings Tool** provides for some additional functionality and output control that you may wish to explore. +For example, selecting the **Individual Steps** radio button will allow you to specify your own project database and generate some diagnostic plots for each step. +Similarly, expanding the **Output Control** box shows some additional options for controlling the output of the tool. + + + diff --git a/docs/source/assets/03_01_cc.PNG b/docs/source/assets/03_01_cc.PNG new file mode 100644 index 0000000000000000000000000000000000000000..f815505571986a08e33a2ade2360ce2e2711607d GIT binary patch literal 27742 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 literal 0 HcmV?d00001 diff --git a/docs/source/assets/03_01_dataInput.PNG b/docs/source/assets/03_01_dataInput.PNG new file mode 100644 index 0000000000000000000000000000000000000000..1a193b2ffb12277d78cdd9373923b1a6a6081c30 GIT binary patch literal 22218 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 IFaG&|0V2bo>i_@% literal 0 HcmV?d00001 diff --git a/docs/source/assets/03_01_meta01.PNG b/docs/source/assets/03_01_meta01.PNG new file mode 100644 index 0000000000000000000000000000000000000000..2549d59512634d922b11cc86bf9f1f624c641a76 GIT binary patch literal 21557 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 literal 0 HcmV?d00001 diff --git a/docs/source/assets/03_01_meta02.PNG b/docs/source/assets/03_01_meta02.PNG new file mode 100644 index 0000000000000000000000000000000000000000..462c0f95054fccbb5d39505abe13e8b4a5a8c62b GIT binary patch literal 10582 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 literal 0 HcmV?d00001 diff --git a/docs/source/index.rst b/docs/source/index.rst index e9ed1ac..de7ec01 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -1,4 +1,4 @@ -Welcome to CanCurve documentation! +Welcome to CanCurve! =================================== diff --git a/tutorial/case1/R_1-L-BD-CU_ABCA.csv b/tutorial/01/R_1-L-BD-CU_ABCA.csv similarity index 100% rename from tutorial/case1/R_1-L-BD-CU_ABCA.csv rename to tutorial/01/R_1-L-BD-CU_ABCA.csv diff --git a/tutorial/case1/c01/case1_c00.cancurve b/tutorial/01/c01/case1_c00.cancurve similarity index 100% rename from tutorial/case1/c01/case1_c00.cancurve rename to tutorial/01/c01/case1_c00.cancurve diff --git a/tutorial/case1/c02/copy_case1_c00.cancurve b/tutorial/01/c02/copy_case1_c00.cancurve similarity index 100% rename from tutorial/case1/c02/copy_case1_c00.cancurve rename to tutorial/01/c02/copy_case1_c00.cancurve diff --git a/tutorial/case1/c03/copy_copy_case1_c00.cancurve b/tutorial/01/c03/copy_copy_case1_c00.cancurve similarity index 100% rename from tutorial/case1/c03/copy_copy_case1_c00.cancurve rename to tutorial/01/c03/copy_copy_case1_c00.cancurve diff --git a/tutorial/case1/c04/copy_copy_copy_case1_c00.cancurve b/tutorial/01/c04/copy_copy_copy_case1_c00.cancurve similarity index 100% rename from tutorial/case1/c04/copy_copy_copy_case1_c00.cancurve rename to tutorial/01/c04/copy_copy_copy_case1_c00.cancurve diff --git a/tutorial/case1/readme.md b/tutorial/01/readme.md similarity index 100% rename from tutorial/case1/readme.md rename to tutorial/01/readme.md From 4caf4d5dec74e75847e45ce96fc334b98d7cb9a8 Mon Sep 17 00:00:00 2001 From: Seth Bryant Date: Sun, 25 Aug 2024 20:28:23 +0200 Subject: [PATCH 9/9] edits --- docs/source/01_getting-started.rst | 26 ++++++-------- docs/source/02_user-guide.rst | 58 ++++++++++++++++++------------ docs/source/03_tutorials.rst | 9 +++-- 3 files changed, 54 insertions(+), 39 deletions(-) diff --git a/docs/source/01_getting-started.rst b/docs/source/01_getting-started.rst index 6a4a3b0..7e61711 100644 --- a/docs/source/01_getting-started.rst +++ b/docs/source/01_getting-started.rst @@ -24,22 +24,12 @@ Overviews CanCurve is a collection of tools for generating Depth Damage Functions (DDF) used by platforms like `CanFlood `_ to create flood risk models. CanCurve's :ref:`Buildings Tool ` for example facilitates the creation of DDFs from detailed restoration cost data for archetypal buildings. This tool joins a table of restoration activities (e.g., repair dry-wall for $1000), called the :ref:`Cost-Item Table `, to a database of information on the flood vulnerability of those items, called the :ref:`Depth-Replacement-Factor (DRF) Database `. -After identifying the target building or archetype for which a user would like to construct a DDF, typically a Cost-Item table is prepared using local pricing tables and expert knowledge on the restoration of the building. -For the DRF Database, either the version shipped with CanCurve can be used (default), or an alternate file can be specified. -Once these inputs and the building metadata are prepared and entered into the Buildings Tool, the four *Curve Creation* steps can be run to create and export a DDF in :ref:`CanFlood format `. +After identifying the target building or archetype for which a user would like to construct a DDF, typically a :ref:`Cost-Item Table ` is prepared using local pricing tables and expert knowledge on the restoration of the building. +For the :ref:`DRF Database `, either the version shipped with CanCurve can be used (default), or an alternate file can be specified. +Once these inputs and the building metadata are prepared and entered into the Buildings Tool, the four :ref:`Curve Creation ` steps can be run to create and export a DDF in :ref:`CanFlood format `. -:numref:`fig01-conceptual-diagram` provides a diagram of how the remote, local, and project datasets are related. -See the :ref:`Quick Start Guide ` to learn more. -.. _fig01-conceptual-diagram: - -.. figure:: /assets/01-conceptual-diagram.png - :alt: Conceptual Diagram - :align: center - :width: 900px - - Conceptual diagram of the CanCurve Buildings Tool. .. _sec01-quick: @@ -67,8 +57,8 @@ To start working with CanCurve, click the |CanCurve_icon| to open the :ref:`Buil To use the tool to create a DDF from data for your archetypal building, first populate the **Metadata** tab with whatever information is available (see the :ref:`Tutorials ` section for example data). -Note that not all fields are required, but the more information you provide, the more complete your DDF will be. -To specify settings, the :ref:`Cost-Item Table `, the :ref:`Depth-Replacement-Factor (DRF) Database `, and the :ref:`Fixed Costs ` data, complete the **Data Input** tab. +Note only fields marked with an asterisk (*) are required, but the more information you provide, the more complete your DDF will be. +To specify settings, the :ref:`Cost-Item Table `, the :ref:`Depth-Replacement Factor (DRF) Database `, and the :ref:`Fixed Costs ` data, complete the **Data Input** tab. Finally, the four curve creation steps can be executed from the **Create Curve** tab, ending in an export of your DDF in :ref:`CanFlood format `. @@ -90,5 +80,11 @@ Frequently Asked Questions The best place to get help is the `CanCurve GitHub Issues `_ page where you can read through questions posted by others or ask your own. +**Do I really need to install an old version of QGIS to use CanCurve** + No, but we recommend it for best performance. If you have a newer version of QGIS installed, you can try CanCurve with it, but you may experience issues. + + + + diff --git a/docs/source/02_user-guide.rst b/docs/source/02_user-guide.rst index f304cf3..4c86dfb 100644 --- a/docs/source/02_user-guide.rst +++ b/docs/source/02_user-guide.rst @@ -24,78 +24,90 @@ The most basic functions directly relate flood depth to damage --- the so-called Damage functions are typically categorized based on the model's focus or objective, such as the sector (residential vs. non-residential), tangibility (tangible vs. intangible), damage mechanism (indirect vs. direct), and uncertainty treatment (deterministic vs. probabilistic) [#2]_. Further classification considers the function structure such as continuity (discrete vs. continuous) and for tangible economic functions the asset total value relation (relative vs. absolute). While depth-damage functions are still common, research in the past two decades has advanced the understanding of flood damage processes and, along with new data and techniques, has led to more sophisticated and accurate multi-variate models [#3]_. -CanCurve currently only supports discrete tangible depth-damage functions. +CanCurve currently supports discrete, tangible, absolute, single-variable, depth-damage functions. Flood Risk Modelling in Canada ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -NRCan develops and maintains flood risk software and data tools to support disaster resilience in Canada. -In particular, NRCan maintains `CanFlood `_, a QGIS plugin for building flood risk models. +Natural Resources Canada (NRCan) develops and maintains flood risk software and data tools to support disaster resilience in Canada. +In particular, NRCan maintains `CanFlood `_, a QGIS plugin for building and running flood risk models. A major input or component of CanFlood models are DDFs. Traditionally, CanFlood users struggled to obtain DDFs from past projects or public repositories, leading to inefficient and inaccurate risk modelling. To address this gap, in 2023 NRCan commissioned the Arcadis company to develop a system for constructing local DDFs in Canada. This resulted in a formal process for constructing DDFs called *Program for the Development of Flood Damage (Vulnerability) Curves for buildings in Canada* (a.k.a. the DDF Program or DDFP). -To operationalize DDFP, NRCan initiated the CanCurve project. +To operationalize this, NRCan initiated the CanCurve project. .. _sec02-dataRequirements: Data Requirements ----------------- -The **Buildings Tool** requires three types of data about the archetypal building in order to generate a DDF summarized in the following sections. -See :ref:`Tutorials ` for example data. +The **Buildings Tool** requires three types of data about the archetypal building in order to generate a DDF, as summarized in the following sections. +See :ref:`Tutorials ` for data examples. Building Metadata ~~~~~~~~~~~~~~~~~ Building metadata is simple information relevant to estimating the flood vulnerability of an archetype, like the year of construction, the date associated with the cost estimate, the person preparing the estimate, etc. This information is used by the Buildings Tool to populate metadata fields on output DDFs and, in some cases, to assemble the DDF. -Metadata is specified on the **Metadata** tab and stored in the **c00_bldg_meta** table of the Project Database. +Metadata is specified on the **Metadata** tab and stored in the **c00_bldg_meta** table of the :ref:`Project Database ` The user is expected to obtain this information from expert knowledge and documentation on the archetype. To assemble the DDF, the following metadata is required: - **Building Layout** (``bldg_layout``): Corresponds to categories in the DRF dataset. - **Basement height value** (``basement_height_m``): The height of the basement in meters, used to concatenate the cost values between storys. - - **Structure area value** (``scale_value``): The area of the structure in square meters used to scale the cost values for Area-based cost basis. + - **Structure area value** (``scale_value``): The area of the structure in square meters used to scale the cost values for :ref:`Area-based ` cost basis. -It is good practice to specify additional metadata fields, which the Buidings Tool propagates onto the output DDFs. +It is good practice to specify additional metadata fields, which the Buildings Tool propagates onto the output DDFs. .. _sec02-costItem: Cost-Item Table ~~~~~~~~~~~~~~~~ -This restoration item and cost data is specifed as a CSV file on the **Data Input** tab. +This restoration item and cost data is specified as a CSV file on the **Data Input** tab. Typically this information is obtained from cost restoration experts using specialized software like Xactimate and a detailed model of the structure. .. _sec02-DRF: -Depth Replacement-Factor (DRF) Dataset +Depth Replacement-Factor (DRF) Database ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -This dataset relates flood depth to the percentage loss or damage of a restoration item and is specified on the **Data Input** tab. -By default, the DRF dataset shipped with CanCurve will be used, which is installed into the `./db` directory of the CanCurve plugin. -The DRF dataset is a SQLite database with three tables: +This database relates flood depth to the percentage loss or damage of a restoration item and is specified on the **Data Input** tab. +The DRF database is a SQLite database with three tables: - **cost_item_meta**: lookup and description fields for each cost-item with key fields ``cat``, ``sel``, and ``bldg_layout``. - **drf**: the depth-replacement-factor for each cost-item with key fields ``cat``, ``sel``, and ``bldg_layout``. - - **meta**: metadata for the DRF dataset. + - **meta**: metadata for the database. +By default, the DRF database shipped with CanCurve will be used, which is installed into the `./db` directory of the CanCurve plugin. +This database was constructed by the DDFP project in consultation with cost-restoration specialists and reflects the vulnerability of a typical Canadian building to stillwater flooding. +:numref:`fig01-conceptual-diagram` provides a diagram of how the remote, local, and project datasets are related. +.. _fig01-conceptual-diagram: + +.. figure:: /assets/01-conceptual-diagram.png + :alt: Conceptual Diagram + :align: center + :width: 900px + + Conceptual diagram of the CanCurve Buildings Tool. .. _sec02-fixedCosts: Fixed Costs ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This simple dataset has two values: the fixed costs for the restoration of the basement and the mainfloor. -This represents the sum of all depth-invariant cost items for each floor i.e., restoration costs that would be incurred no mater how severe the flood exposure. +This represents the sum of all depth-invariant cost items for each floor i.e., restoration costs that would be incurred regardless of flood depth. For example, mobilization costs or permit fees. This dataset is specified on the **Data Input** tab and stored in the **c00_fixed_costs** table of the Project Database. Key Concepts ----------------- -The **Buildings Tool** is composed of the Graphical User Interface (GUI) front-end and a collection of python scripts for performing the data operations in the back-end, called the ``core`` which contains four *curve creation* steps. +The **Buildings Tool** is composed of the Graphical User Interface (GUI) front-end and a collection of python scripts for performing the data operations in the back-end, called the ``core`` which contains four :ref:`Curve Creation ` steps. A typical workflow starts by preparing the :ref:`Input Data `, populating the fields in the GUI, then executing the :ref:`Curve Creation Steps `. + + .. _sec02-Core: Core: Curve Creation Steps @@ -107,7 +119,7 @@ These are controlled from the **Create Curve** tab and can be executed individua Construct the :ref:`Project Database ` and load data into it from the GUI. 2. **Data join and multiply costs**: - Join DRF to the :ref:`Cost-Item table `, then multiply through to create fractional restoration costs. + Join :ref:`DRF Database ` to the :ref:`Cost-Item table `, then multiply through to create fractional restoration costs. 3. **Data group and concat stories**: Group restoration costs by story and concatenate them into a single table. @@ -115,14 +127,14 @@ These are controlled from the **Create Curve** tab and can be executed individua 4. **Export result in CanFlood format**: Export the DDF in the :ref:`CanFlood format `. -To pass information between these steps and to save the user's progress to a file, all of these steps read or write to the :ref:`Project Database `. +To pass information between these steps and to save the user's progress to disk, all of these steps read or write to a :ref:`Project Database `. .. _sec02-projectDatabase: Project Database ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -The **Project Database** is a SQLite database that the Buildings Tool uses to store the data and metadata for the project. -For most workflows, the Project Database is hidden in teh background; however, knowledge of the project database can be useful for debugging and understanding the tool's operation. +The **Project Database** is a SQLite database that the Buildings Tool creates for each project, then uses to store the data and metadata for the project. +For most workflows, the Project Database is hidden in the background; however, knowledge of the project database can be useful for debugging and understanding the tool's operation. The database is composed of several tables, each of which is used by one or more of the :ref:`curve creation steps `, as shown in the table below. .. _tab02-ProjectDatabase: @@ -182,9 +194,11 @@ Below is a minimum example CanFlood format DDF. Cost Basis ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CanCurve supports two cost bases: + - **Total** ($/structure): The resulting DDF will reflect the total restoration costs for the archetype as a function of depth. This can be useful for debugging and for risk models with very similar structures. For DDFs of this type, the calculated impacts should not be scaled. - - **Area-based** ($/area): The resulting DDF will reflect the restoration costs per area of the structure as a function of depth. The units of the DDF impact values can be $/ft^2 or $/m^2 depending on what was specified in the **Structure area** field on the **Metadata** tab. This basis is useful for adapting the resulting archetypal DDF to other structures by scaling the impact values by the area of the structure. + - **Area-based** ($/area): The resulting DDF will reflect the restoration costs per area of the structure as a function of depth. The units of the DDF impact values can be $/ft^2 or $/m^2 depending on what was specified in the **Structure area** field on the **Metadata** tab. This basis is useful for adapting the resulting archetypal DDF to other structures by scaling the impact values by the area of the structure. Most CanFlood models use this cost basis. diff --git a/docs/source/03_tutorials.rst b/docs/source/03_tutorials.rst index bb0f7e8..3ec981b 100644 --- a/docs/source/03_tutorials.rst +++ b/docs/source/03_tutorials.rst @@ -4,7 +4,7 @@ Tutorials ========================== This section contains a collection of tutorials with example data and results. -Be sure to read and follow the `Getting Started Section ` before attempting these tutorials. +Be sure to read and follow the :ref:`Getting Started Section ` before attempting these tutorials. .. _sec03-tut01: @@ -33,6 +33,7 @@ Open the :ref:`Buildings Tool `, navigate to the **Metadata** tab, :align: center :width: 900px + Metadata for Tutorial 1 Step 3: Data Input ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -50,6 +51,8 @@ Navigate to the **Data Input** tab and, using the below image for reference, pop :align: center :width: 900px + Data Input page for Tutorial 1 + Step 4: Create Curve ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Navigate to the **Create Curve** tab. @@ -57,10 +60,12 @@ In the **Run Control** box, select **All**, then click **Run**. You should see the progress of each of the four :ref:`Curve Creation Steps ` along with a message in the bottom window informing you that the DDF has been output to the **Working Directory** you specified in Step 3, similar to what is shown below. .. figure:: /assets/03_01_cc.PNG - :alt: Data Input Tab + :alt: Curve Creation Tab :align: center :width: 900px + Curve Creation page for Tutorial 1 + For additional log messages, you can return to the main QGIS window, open the log panel (View>Panels>Log Messages), and select the **CanCurve** tab. Scrolling up, you should see diagnostic messages for each of the four steps you just ran. This is the end of a typical workflow; however, the **Buildings Tool** provides for some additional functionality and output control that you may wish to explore.