{ "cells": [ { "cell_type": "markdown", "id": "fe4de448-d218-420b-bdae-17c1e4b4181c", "metadata": { "tags": [] }, "source": [ "# Building a `ws3` model from scratch\n", "\n", "This notebook has an example of building a new `ws3` model from scratch.\n", "\n", "> We _strongly recommend_ that you run this notebook in venv-sandboxed Python kernel (see `venv_python_kernel_setup` notebook for an example of how to do this). This will ensure that you are working from a fresh Python package environment, and not wasting time debugging random interactions between this notebook and whatever mishmash of packages you have installed on your system in various parts of your Python path. You have been warned. " ] }, { "cell_type": "markdown", "id": "52e1114c-44ce-47b5-bde8-bd5b85ce9623", "metadata": { "tags": [] }, "source": [ "## Configure modelling environment" ] }, { "cell_type": "code", "execution_count": 2, "id": "6008a688", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The autoreload extension is already loaded. To reload it, use:\n", " %reload_ext autoreload\n" ] } ], "source": [ "%load_ext autoreload\n", "%autoreload 2" ] }, { "cell_type": "markdown", "id": "bcd43a9e", "metadata": {}, "source": [ "Optionally, uninstall the `ws3` package and replace it with a pointer to _this local clone of the GitHub repository code_ (useful if you want ot tweak the source code for whatever reason). " ] }, { "cell_type": "code", "execution_count": 3, "id": "f2db1bc8", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Found existing installation: ws3 1.0.4\n", "Uninstalling ws3-1.0.4:\n", " Successfully uninstalled ws3-1.0.4\n", "Note: you may need to restart the kernel to use updated packages.\n", "Obtaining file:///home/gep/projects/ws3\n", " Installing build dependencies ... \u001b[?25ldone\n", "\u001b[?25h Checking if build backend supports build_editable ... \u001b[?25ldone\n", "\u001b[?25h Getting requirements to build editable ... \u001b[?25ldone\n", "\u001b[?25h Installing backend dependencies ... \u001b[?25ldone\n", "\u001b[?25h Preparing editable metadata (pyproject.toml) ... \u001b[?25ldone\n", "\u001b[?25hRequirement already satisfied: dill in /home/gep/projects/ws3/.venv/lib/python3.12/site-packages (from ws3==1.0.4) (0.4.0)\n", "Requirement already satisfied: fiona in /home/gep/projects/ws3/.venv/lib/python3.12/site-packages (from ws3==1.0.4) (1.10.1)\n", "Requirement already satisfied: highspy in /home/gep/projects/ws3/.venv/lib/python3.12/site-packages (from ws3==1.0.4) (1.11.0)\n", "Requirement already satisfied: matplotlib in /home/gep/projects/ws3/.venv/lib/python3.12/site-packages (from ws3==1.0.4) (3.10.6)\n", "Requirement already satisfied: numpy>=1.21 in /home/gep/projects/ws3/.venv/lib/python3.12/site-packages (from ws3==1.0.4) (2.3.3)\n", "Requirement already satisfied: pandas>=1.3 in /home/gep/projects/ws3/.venv/lib/python3.12/site-packages (from ws3==1.0.4) (2.3.3)\n", "Requirement already satisfied: profilehooks in /home/gep/projects/ws3/.venv/lib/python3.12/site-packages (from ws3==1.0.4) (1.13.0)\n", "Requirement already satisfied: rasterio in /home/gep/projects/ws3/.venv/lib/python3.12/site-packages (from ws3==1.0.4) (1.4.3)\n", "Requirement already satisfied: scipy>=1.7 in /home/gep/projects/ws3/.venv/lib/python3.12/site-packages (from ws3==1.0.4) (1.16.2)\n", "Requirement already satisfied: python-dateutil>=2.8.2 in /home/gep/projects/ws3/.venv/lib/python3.12/site-packages (from pandas>=1.3->ws3==1.0.4) (2.9.0.post0)\n", "Requirement already satisfied: pytz>=2020.1 in /home/gep/projects/ws3/.venv/lib/python3.12/site-packages (from pandas>=1.3->ws3==1.0.4) (2025.2)\n", "Requirement already satisfied: tzdata>=2022.7 in /home/gep/projects/ws3/.venv/lib/python3.12/site-packages (from pandas>=1.3->ws3==1.0.4) (2025.2)\n", "Requirement already satisfied: six>=1.5 in /home/gep/projects/ws3/.venv/lib/python3.12/site-packages (from python-dateutil>=2.8.2->pandas>=1.3->ws3==1.0.4) (1.17.0)\n", "Requirement already satisfied: attrs>=19.2.0 in /home/gep/projects/ws3/.venv/lib/python3.12/site-packages (from fiona->ws3==1.0.4) (25.3.0)\n", "Requirement already satisfied: certifi in /home/gep/projects/ws3/.venv/lib/python3.12/site-packages (from fiona->ws3==1.0.4) (2025.8.3)\n", "Requirement already satisfied: click~=8.0 in /home/gep/projects/ws3/.venv/lib/python3.12/site-packages (from fiona->ws3==1.0.4) (8.3.0)\n", "Requirement already satisfied: click-plugins>=1.0 in /home/gep/projects/ws3/.venv/lib/python3.12/site-packages (from fiona->ws3==1.0.4) (1.1.1.2)\n", "Requirement already satisfied: cligj>=0.5 in /home/gep/projects/ws3/.venv/lib/python3.12/site-packages (from fiona->ws3==1.0.4) (0.7.2)\n", "Requirement already satisfied: contourpy>=1.0.1 in /home/gep/projects/ws3/.venv/lib/python3.12/site-packages (from matplotlib->ws3==1.0.4) (1.3.3)\n", "Requirement already satisfied: cycler>=0.10 in /home/gep/projects/ws3/.venv/lib/python3.12/site-packages (from matplotlib->ws3==1.0.4) (0.12.1)\n", "Requirement already satisfied: fonttools>=4.22.0 in /home/gep/projects/ws3/.venv/lib/python3.12/site-packages (from matplotlib->ws3==1.0.4) (4.60.1)\n", "Requirement already satisfied: kiwisolver>=1.3.1 in /home/gep/projects/ws3/.venv/lib/python3.12/site-packages (from matplotlib->ws3==1.0.4) (1.4.9)\n", "Requirement already satisfied: packaging>=20.0 in /home/gep/projects/ws3/.venv/lib/python3.12/site-packages (from matplotlib->ws3==1.0.4) (25.0)\n", "Requirement already satisfied: pillow>=8 in /home/gep/projects/ws3/.venv/lib/python3.12/site-packages (from matplotlib->ws3==1.0.4) (11.3.0)\n", "Requirement already satisfied: pyparsing>=2.3.1 in /home/gep/projects/ws3/.venv/lib/python3.12/site-packages (from matplotlib->ws3==1.0.4) (3.2.5)\n", "Requirement already satisfied: affine in /home/gep/projects/ws3/.venv/lib/python3.12/site-packages (from rasterio->ws3==1.0.4) (2.4.0)\n", "Building wheels for collected packages: ws3\n", " Building editable for ws3 (pyproject.toml) ... \u001b[?25ldone\n", "\u001b[?25h Created wheel for ws3: filename=ws3-1.0.4-py3-none-any.whl size=4204 sha256=9b9a33b0985eefd9dff50e4c5bf85215f33b5b124218fdd6ecdb28b39f96c20d\n", " Stored in directory: /tmp/pip-ephem-wheel-cache-2q3cwg9b/wheels/8a/d1/f0/2b533a60b366fa03a12ca91a1ad068761e66b9df68fa0cadb9\n", "Successfully built ws3\n", "Installing collected packages: ws3\n", "Successfully installed ws3-1.0.4\n", "Note: you may need to restart the kernel to use updated packages.\n" ] } ], "source": [ "clobber_ws3 = True\n", "if clobber_ws3:\n", " %pip uninstall -y ws3\n", " %pip install -e .." ] }, { "cell_type": "markdown", "id": "bf0ce835", "metadata": {}, "source": [ "Use `pip` to install Python packages listed in `requirements.txt` (some extra packages needed for example notebooks to run correctly)." ] }, { "cell_type": "code", "execution_count": 4, "id": "aa1b5569", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: seaborn in /home/gep/projects/ws3/.venv/lib/python3.12/site-packages (from -r requirements.txt (line 1)) (0.13.2)\n", "Requirement already satisfied: geopandas in /home/gep/projects/ws3/.venv/lib/python3.12/site-packages (from -r requirements.txt (line 2)) (1.1.1)\n", "Requirement already satisfied: ipywidgets in /home/gep/projects/ws3/.venv/lib/python3.12/site-packages (from -r requirements.txt (line 3)) (8.1.7)\n", "Requirement already satisfied: numpy!=1.24.0,>=1.20 in /home/gep/projects/ws3/.venv/lib/python3.12/site-packages (from seaborn->-r requirements.txt (line 1)) (2.3.3)\n", "Requirement already satisfied: pandas>=1.2 in /home/gep/projects/ws3/.venv/lib/python3.12/site-packages (from seaborn->-r requirements.txt (line 1)) (2.3.3)\n", "Requirement already satisfied: matplotlib!=3.6.1,>=3.4 in /home/gep/projects/ws3/.venv/lib/python3.12/site-packages (from seaborn->-r requirements.txt (line 1)) (3.10.6)\n", "Requirement already satisfied: pyogrio>=0.7.2 in /home/gep/projects/ws3/.venv/lib/python3.12/site-packages (from geopandas->-r requirements.txt (line 2)) (0.11.1)\n", "Requirement already satisfied: packaging in /home/gep/projects/ws3/.venv/lib/python3.12/site-packages (from geopandas->-r requirements.txt (line 2)) (25.0)\n", "Requirement already satisfied: pyproj>=3.5.0 in /home/gep/projects/ws3/.venv/lib/python3.12/site-packages (from geopandas->-r requirements.txt (line 2)) (3.7.2)\n", "Requirement already satisfied: shapely>=2.0.0 in /home/gep/projects/ws3/.venv/lib/python3.12/site-packages (from geopandas->-r requirements.txt (line 2)) (2.1.2)\n", "Requirement already satisfied: comm>=0.1.3 in /home/gep/projects/ws3/.venv/lib/python3.12/site-packages (from ipywidgets->-r requirements.txt (line 3)) (0.2.3)\n", "Requirement already satisfied: ipython>=6.1.0 in /home/gep/projects/ws3/.venv/lib/python3.12/site-packages (from ipywidgets->-r requirements.txt (line 3)) (9.6.0)\n", "Requirement already satisfied: traitlets>=4.3.1 in /home/gep/projects/ws3/.venv/lib/python3.12/site-packages (from ipywidgets->-r requirements.txt (line 3)) (5.14.3)\n", "Requirement already satisfied: widgetsnbextension~=4.0.14 in /home/gep/projects/ws3/.venv/lib/python3.12/site-packages (from ipywidgets->-r requirements.txt (line 3)) (4.0.14)\n", "Requirement already satisfied: jupyterlab_widgets~=3.0.15 in /home/gep/projects/ws3/.venv/lib/python3.12/site-packages (from ipywidgets->-r requirements.txt (line 3)) (3.0.15)\n", "Requirement already satisfied: decorator in /home/gep/projects/ws3/.venv/lib/python3.12/site-packages (from ipython>=6.1.0->ipywidgets->-r requirements.txt (line 3)) (5.2.1)\n", "Requirement already satisfied: ipython-pygments-lexers in /home/gep/projects/ws3/.venv/lib/python3.12/site-packages (from ipython>=6.1.0->ipywidgets->-r requirements.txt (line 3)) (1.1.1)\n", "Requirement already satisfied: jedi>=0.16 in /home/gep/projects/ws3/.venv/lib/python3.12/site-packages (from ipython>=6.1.0->ipywidgets->-r requirements.txt (line 3)) (0.19.2)\n", "Requirement already satisfied: matplotlib-inline in /home/gep/projects/ws3/.venv/lib/python3.12/site-packages (from ipython>=6.1.0->ipywidgets->-r requirements.txt (line 3)) (0.1.7)\n", "Requirement already satisfied: pexpect>4.3 in /home/gep/projects/ws3/.venv/lib/python3.12/site-packages (from ipython>=6.1.0->ipywidgets->-r requirements.txt (line 3)) (4.9.0)\n", "Requirement already satisfied: prompt_toolkit<3.1.0,>=3.0.41 in /home/gep/projects/ws3/.venv/lib/python3.12/site-packages (from ipython>=6.1.0->ipywidgets->-r requirements.txt (line 3)) (3.0.52)\n", "Requirement already satisfied: pygments>=2.4.0 in /home/gep/projects/ws3/.venv/lib/python3.12/site-packages (from ipython>=6.1.0->ipywidgets->-r requirements.txt (line 3)) (2.19.2)\n", "Requirement already satisfied: stack_data in /home/gep/projects/ws3/.venv/lib/python3.12/site-packages (from ipython>=6.1.0->ipywidgets->-r requirements.txt (line 3)) (0.6.3)\n", "Requirement already satisfied: wcwidth in /home/gep/projects/ws3/.venv/lib/python3.12/site-packages (from prompt_toolkit<3.1.0,>=3.0.41->ipython>=6.1.0->ipywidgets->-r requirements.txt (line 3)) (0.2.14)\n", "Requirement already satisfied: parso<0.9.0,>=0.8.4 in /home/gep/projects/ws3/.venv/lib/python3.12/site-packages (from jedi>=0.16->ipython>=6.1.0->ipywidgets->-r requirements.txt (line 3)) (0.8.5)\n", "Requirement already satisfied: contourpy>=1.0.1 in /home/gep/projects/ws3/.venv/lib/python3.12/site-packages (from matplotlib!=3.6.1,>=3.4->seaborn->-r requirements.txt (line 1)) (1.3.3)\n", "Requirement already satisfied: cycler>=0.10 in /home/gep/projects/ws3/.venv/lib/python3.12/site-packages (from matplotlib!=3.6.1,>=3.4->seaborn->-r requirements.txt (line 1)) (0.12.1)\n", "Requirement already satisfied: fonttools>=4.22.0 in /home/gep/projects/ws3/.venv/lib/python3.12/site-packages (from matplotlib!=3.6.1,>=3.4->seaborn->-r requirements.txt (line 1)) (4.60.1)\n", "Requirement already satisfied: kiwisolver>=1.3.1 in /home/gep/projects/ws3/.venv/lib/python3.12/site-packages (from matplotlib!=3.6.1,>=3.4->seaborn->-r requirements.txt (line 1)) (1.4.9)\n", "Requirement already satisfied: pillow>=8 in /home/gep/projects/ws3/.venv/lib/python3.12/site-packages (from matplotlib!=3.6.1,>=3.4->seaborn->-r requirements.txt (line 1)) (11.3.0)\n", "Requirement already satisfied: pyparsing>=2.3.1 in /home/gep/projects/ws3/.venv/lib/python3.12/site-packages (from matplotlib!=3.6.1,>=3.4->seaborn->-r requirements.txt (line 1)) (3.2.5)\n", "Requirement already satisfied: python-dateutil>=2.7 in /home/gep/projects/ws3/.venv/lib/python3.12/site-packages (from matplotlib!=3.6.1,>=3.4->seaborn->-r requirements.txt (line 1)) (2.9.0.post0)\n", "Requirement already satisfied: pytz>=2020.1 in /home/gep/projects/ws3/.venv/lib/python3.12/site-packages (from pandas>=1.2->seaborn->-r requirements.txt (line 1)) (2025.2)\n", "Requirement already satisfied: tzdata>=2022.7 in /home/gep/projects/ws3/.venv/lib/python3.12/site-packages (from pandas>=1.2->seaborn->-r requirements.txt (line 1)) (2025.2)\n", "Requirement already satisfied: ptyprocess>=0.5 in /home/gep/projects/ws3/.venv/lib/python3.12/site-packages (from pexpect>4.3->ipython>=6.1.0->ipywidgets->-r requirements.txt (line 3)) (0.7.0)\n", "Requirement already satisfied: certifi in /home/gep/projects/ws3/.venv/lib/python3.12/site-packages (from pyogrio>=0.7.2->geopandas->-r requirements.txt (line 2)) (2025.8.3)\n", "Requirement already satisfied: six>=1.5 in /home/gep/projects/ws3/.venv/lib/python3.12/site-packages (from python-dateutil>=2.7->matplotlib!=3.6.1,>=3.4->seaborn->-r requirements.txt (line 1)) (1.17.0)\n", "Requirement already satisfied: executing>=1.2.0 in /home/gep/projects/ws3/.venv/lib/python3.12/site-packages (from stack_data->ipython>=6.1.0->ipywidgets->-r requirements.txt (line 3)) (2.2.1)\n", "Requirement already satisfied: asttokens>=2.1.0 in /home/gep/projects/ws3/.venv/lib/python3.12/site-packages (from stack_data->ipython>=6.1.0->ipywidgets->-r requirements.txt (line 3)) (3.0.0)\n", "Requirement already satisfied: pure-eval in /home/gep/projects/ws3/.venv/lib/python3.12/site-packages (from stack_data->ipython>=6.1.0->ipywidgets->-r requirements.txt (line 3)) (0.2.3)\n", "Note: you may need to restart the kernel to use updated packages.\n" ] } ], "source": [ "%pip install -r requirements.txt" ] }, { "cell_type": "code", "execution_count": 5, "id": "1271efba-f9c2-40a8-86c9-2d2e6ca4323f", "metadata": { "tags": [] }, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "import pandas as pd\n", "import geopandas as gpd\n", "import ws3.forest, ws3.core" ] }, { "cell_type": "markdown", "id": "e1090a31-8215-46dc-b6c9-61030fc01ff7", "metadata": {}, "source": [ "## Set up Python environment" ] }, { "cell_type": "markdown", "id": "2597ec84-062c-4d10-ae51-22d669185ba4", "metadata": {}, "source": [ "Define some basic parameters." ] }, { "cell_type": "code", "execution_count": 6, "id": "11a7ae85-6e7e-4537-b645-249a76208841", "metadata": { "tags": [] }, "outputs": [], "source": [ "base_year = 2020\n", "horizon = 10\n", "period_length = 10\n", "max_age = 1000\n", "tvy_name = \"totvol\"" ] }, { "cell_type": "markdown", "id": "0ada77ae-106d-475b-b21f-f7095cbebd9e", "metadata": {}, "source": [ "Import sample inventory and yield curve data.\n", "\n", "The inventory data is imported a from vector data layer (stored in industry-standard ESRI Shapefile format). This is a small square of real forest data clipped from a larger dataset representing Timber Supply Area (TSA) 24 in British Columbia (BC), Canada. This data layer is derived from publicly-available BC Vegetation Resource Inventory (VRI) datasets (see [British Columbia Data Catalogue](https://catalogue.data.gov.bc.ca/)) that we pre-processed to include the data attributes we need (in the format we want) for this `ws3` model-building example. \n", "\n", "The yield curve data was generated from a complex process (the details of which are outside the scope of this example, contact [Gregory Paradis](mailto:gregory.paradis@ubc.ca) for details), using a methodology consistent with _de facto_ professional best-practices for the Timber Supply Review (TSR) modelling process in BC. " ] }, { "cell_type": "code", "execution_count": 7, "id": "147a0b10-de95-45ea-9090-910f636ef418", "metadata": { "tags": [] }, "outputs": [], "source": [ "stands = gpd.read_file(\"data/shp/tsa24_clipped.shp/stands.shp\")" ] }, { "cell_type": "code", "execution_count": 8, "id": "e2e354ee-96d1-474c-b92a-c2c106719bd2", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/html": [ "
| \n", " | theme0 | \n", "theme1 | \n", "theme2 | \n", "curve1 | \n", "curve2 | \n", "SPECIES_CD | \n", "age | \n", "area | \n", "theme3 | \n", "geometry | \n", "
|---|---|---|---|---|---|---|---|---|---|---|
| 0 | \n", "tsa24_clipped | \n", "1 | \n", "2401002 | \n", "2401002 | \n", "2401002 | \n", "PLI | \n", "145 | \n", "0.111814 | \n", "204 | \n", "MULTIPOLYGON (((1112711.004 1120816.405, 11127... | \n", "
| 1 | \n", "tsa24_clipped | \n", "1 | \n", "2401002 | \n", "2401002 | \n", "2401002 | \n", "PLI | \n", "145 | \n", "0.113925 | \n", "204 | \n", "POLYGON ((1113299.5 1120834.77, 1113298.336 11... | \n", "
| 2 | \n", "tsa24_clipped | \n", "1 | \n", "2401002 | \n", "2401002 | \n", "2401002 | \n", "PLI | \n", "135 | \n", "7.025088 | \n", "204 | \n", "POLYGON ((1112035.066 1121064.403, 1112071.399... | \n", "
| 3 | \n", "tsa24_clipped | \n", "1 | \n", "2402002 | \n", "2402002 | \n", "2402002 | \n", "PLI | \n", "93 | \n", "11.029940 | \n", "204 | \n", "POLYGON ((1114394.74 1120822.943, 1114394.421 ... | \n", "
| 4 | \n", "tsa24_clipped | \n", "1 | \n", "2401000 | \n", "2401000 | \n", "2401000 | \n", "SX | \n", "145 | \n", "9.581284 | \n", "100 | \n", "MULTIPOLYGON (((1114322.804 1120983.973, 11143... | \n", "
| ... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "
| 185 | \n", "tsa24_clipped | \n", "1 | \n", "2401002 | \n", "2401002 | \n", "2401002 | \n", "PLI | \n", "85 | \n", "5.667730 | \n", "204 | \n", "POLYGON ((1115036.356 1124809.762, 1115037.888... | \n", "
| 186 | \n", "tsa24_clipped | \n", "1 | \n", "2401002 | \n", "2401002 | \n", "2401002 | \n", "PLI | \n", "85 | \n", "1.811041 | \n", "204 | \n", "POLYGON ((1114157.65 1124633.924, 1114154.478 ... | \n", "
| 187 | \n", "tsa24_clipped | \n", "1 | \n", "2401002 | \n", "2401002 | \n", "2401002 | \n", "PLI | \n", "95 | \n", "1.137586 | \n", "204 | \n", "POLYGON ((1114675.233 1124802.103, 1114684.36 ... | \n", "
| 188 | \n", "tsa24_clipped | \n", "0 | \n", "2401000 | \n", "2401000 | \n", "2401000 | \n", "SB | \n", "95 | \n", "0.494253 | \n", "100 | \n", "POLYGON ((1114249.328 1124669.031, 1114271.225... | \n", "
| 189 | \n", "tsa24_clipped | \n", "1 | \n", "2402002 | \n", "2402002 | \n", "2402002 | \n", "PLI | \n", "95 | \n", "0.387243 | \n", "204 | \n", "POLYGON ((1112837.042 1124802.518, 1112821.02 ... | \n", "
190 rows × 10 columns
\n", "| \n", " | record_id | \n", "tsa | \n", "stratum_code | \n", "si_level | \n", "canfi_species | \n", "unmanaged_curve_id | \n", "managed_curve_id | \n", "thlb | \n", "
|---|---|---|---|---|---|---|---|---|
| au_id | \n", "\n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " |
| 2401000 | \n", "63 | \n", "24 | \n", "SBS_SX | \n", "L | \n", "100 | \n", "2401000 | \n", "2401000 | \n", "0 | \n", "
| 2402000 | \n", "64 | \n", "24 | \n", "SBS_SX | \n", "M | \n", "100 | \n", "2402000 | \n", "2422000 | \n", "1 | \n", "
| 2403000 | \n", "65 | \n", "24 | \n", "SBS_SX | \n", "H | \n", "100 | \n", "2403000 | \n", "2423000 | \n", "1 | \n", "
| 2401001 | \n", "66 | \n", "24 | \n", "ESSF_BL | \n", "L | \n", "304 | \n", "2401001 | \n", "2401001 | \n", "0 | \n", "
| 2402001 | \n", "67 | \n", "24 | \n", "ESSF_BL | \n", "M | \n", "304 | \n", "2402001 | \n", "2402001 | \n", "0 | \n", "
| 2403001 | \n", "68 | \n", "24 | \n", "ESSF_BL | \n", "H | \n", "304 | \n", "2403001 | \n", "2423001 | \n", "1 | \n", "
| 2401002 | \n", "69 | \n", "24 | \n", "SBS_PLI | \n", "L | \n", "204 | \n", "2401002 | \n", "2421002 | \n", "1 | \n", "
| 2402002 | \n", "70 | \n", "24 | \n", "SBS_PLI | \n", "M | \n", "204 | \n", "2402002 | \n", "2422002 | \n", "1 | \n", "
| 2403002 | \n", "71 | \n", "24 | \n", "SBS_PLI | \n", "H | \n", "204 | \n", "2403002 | \n", "2423002 | \n", "1 | \n", "
| 2401003 | \n", "72 | \n", "24 | \n", "SBS_BL | \n", "L | \n", "304 | \n", "2401003 | \n", "2401003 | \n", "0 | \n", "
| 2402003 | \n", "73 | \n", "24 | \n", "SBS_BL | \n", "M | \n", "304 | \n", "2402003 | \n", "2422003 | \n", "1 | \n", "
| 2403003 | \n", "74 | \n", "24 | \n", "SBS_BL | \n", "H | \n", "304 | \n", "2403003 | \n", "2423003 | \n", "1 | \n", "
| 2401004 | \n", "75 | \n", "24 | \n", "ESSF_SE | \n", "L | \n", "104 | \n", "2401004 | \n", "2401004 | \n", "0 | \n", "
| 2402004 | \n", "76 | \n", "24 | \n", "ESSF_SE | \n", "M | \n", "104 | \n", "2402004 | \n", "2422004 | \n", "1 | \n", "
| 2403004 | \n", "77 | \n", "24 | \n", "ESSF_SE | \n", "H | \n", "104 | \n", "2403004 | \n", "2423004 | \n", "1 | \n", "
| 2401005 | \n", "78 | \n", "24 | \n", "SBS_AT | \n", "L | \n", "1201 | \n", "2401005 | \n", "2401005 | \n", "0 | \n", "
| 2402005 | \n", "79 | \n", "24 | \n", "SBS_AT | \n", "M | \n", "1201 | \n", "2402005 | \n", "2402005 | \n", "0 | \n", "
| 2403005 | \n", "80 | \n", "24 | \n", "SBS_AT | \n", "H | \n", "1201 | \n", "2403005 | \n", "2403005 | \n", "0 | \n", "
| 2401006 | \n", "81 | \n", "24 | \n", "SBS_AT+SX | \n", "L | \n", "1201 | \n", "2401006 | \n", "2401006 | \n", "0 | \n", "
| 2402006 | \n", "82 | \n", "24 | \n", "SBS_AT+SX | \n", "M | \n", "1201 | \n", "2402006 | \n", "2402006 | \n", "0 | \n", "
| 2403006 | \n", "83 | \n", "24 | \n", "SBS_AT+SX | \n", "H | \n", "1201 | \n", "2403006 | \n", "2403006 | \n", "0 | \n", "
| 2401007 | \n", "84 | \n", "24 | \n", "SBS_SX+AT | \n", "L | \n", "100 | \n", "2401007 | \n", "2421007 | \n", "1 | \n", "
| 2402007 | \n", "85 | \n", "24 | \n", "SBS_SX+AT | \n", "M | \n", "100 | \n", "2402007 | \n", "2422007 | \n", "1 | \n", "
| 2403007 | \n", "86 | \n", "24 | \n", "SBS_SX+AT | \n", "H | \n", "100 | \n", "2403007 | \n", "2423007 | \n", "1 | \n", "