From 85fa9e55c229ed63981ec4870a4ccde420fefe76 Mon Sep 17 00:00:00 2001 From: Chris Leaman Date: Sat, 10 Nov 2018 19:20:38 +1100 Subject: [PATCH] Initial commit --- .gitignore | 11 + Makefile | 45 ++ README.md | 21 + notebooks/01_exploration.ipynb | 1261 ++++++++++++++++++++++++++++++++ notebooks/qgis.qgz | Bin 0 -> 14389 bytes src/analysis/analysis.py | 13 + src/data/csv_to_shp.py | 38 + src/data/mat_to_csv.py | 180 +++++ src/data/profile_features.py | 76 ++ src/logging.conf | 27 + 10 files changed, 1672 insertions(+) create mode 100644 .gitignore create mode 100644 Makefile create mode 100644 README.md create mode 100644 notebooks/01_exploration.ipynb create mode 100644 notebooks/qgis.qgz create mode 100644 src/analysis/analysis.py create mode 100644 src/data/csv_to_shp.py create mode 100644 src/data/mat_to_csv.py create mode 100644 src/data/profile_features.py create mode 100644 src/logging.conf diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..062346c --- /dev/null +++ b/.gitignore @@ -0,0 +1,11 @@ +# Jupyter NB Checkpoints +.ipynb_checkpoints/ + +# exclude data from source control by default +/data/ + +# Pycharm +.idea + +# DotEnv configuration +.env \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..f5497dc --- /dev/null +++ b/Makefile @@ -0,0 +1,45 @@ + + +################################################################################# +# PROJECT RULES # +################################################################################# +.PHONY: mat_to_csv +mat-to-csv: ##@data Converts raw .mat files to .csv for python + cd ./src/data/ && python mat_to_csv.py + +sites-csv-to-shp: ./data/interim/sites.shp + cd ./src/data && python csv_to_shp.py + +################################################################################# +# Self Documenting Commands # +################################################################################# +.DEFAULT_GOAL := help +.PHONY: help + +# Refer to https://gist.github.com/prwhite/8168133 + +#COLORS +GREEN := $(shell tput -Txterm setaf 2) +WHITE := $(shell tput -Txterm setaf 7) +YELLOW := $(shell tput -Txterm setaf 3) +RESET := $(shell tput -Txterm sgr0) + +# Add the following 'help' target to your Makefile +# And add help text after each target name starting with '\#\#' +# A category can be added with @category +HELP_FUN = \ + %help; \ + while(<>) { push @{$$help{$$2 // 'options'}}, [$$1, $$3] if /^([a-zA-Z\-]+)\s*:.*\#\#(?:@([a-zA-Z\-]+))?\s(.*)$$/ }; \ + print "usage: make [target]\n\n"; \ + for (sort keys %help) { \ + print "${WHITE}$$_:${RESET}\n"; \ + for (@{$$help{$$_}}) { \ + $$sep = " " x (32 - length $$_->[0]); \ + print " ${YELLOW}$$_->[0]${RESET}$$sep${GREEN}$$_->[1]${RESET}\n"; \ + }; \ + print "\n"; } + +help: ##@other Show this help. + @perl -e '$(HELP_FUN)' $(MAKEFILE_LIST) + + diff --git a/README.md b/README.md new file mode 100644 index 0000000..ff03647 --- /dev/null +++ b/README.md @@ -0,0 +1,21 @@ +# 2016 Narrabeen Storm EWS Performance +This repository investigates whether the storm impacts (i.e. Sallenger, 2000) of the June 2016 Narrabeen Storm could + have been forecasted in advance. + +## Repository and analysis format +This repository follows the [Cookiecutter Data Science](https://drivendata.github.io/cookiecutter-data-science/) +structure where possible. The analysis is done in python (look at the `/src/` folder) with some interactive, exploratory notebooks located at `/notebooks`. + +## Where to start? +Check out jupyter notebook `./notebooks/01_exploration.ipynb` which has an example of how to import the data and some interactive widgets. + +## Available data +Raw, interim and processed data used in this analysis is kept in the `/data/` folder. + +- `/data/raw/processed_shorelines`: This data was recieved from Tom Beuzen in October 2018. It consists of pre/post storm profiles at every 100 m sections along beaches ranging from Dee Why to Nambucca . Profiles are based on raw aerial LIDAR and were processed by Mitch Harley. Tides and waves (10 m contour and reverse shoaled deepwater) for each individual 100 m section is also provided. +- `/data/raw/raw_lidar`: This is the raw pre/post storm aerial LIDAR which was taken for the June 2016 storm. `.las` files are the raw files which have been processed into `.tiff` files using `PDAL`. Note that these files have not been corrected for systematic errors, so actual elevations should be taken from the `processed_shorelines` folder. Obtained November 2018 from Mitch Harley from the black external HDD labeled "UNSW LIDAR". +- `/data/raw/profile_features`: Dune toe and crest locations based on prestorm LIDAR. Refer to `/notebooks/qgis.qgz` as this shows how they were manually extracted. Note that the shapefiles only show the location (lat/lon) of the dune crest and toe. For actual elevations, these locations need to related to the processed shorelines. + +## Notebooks +- `/notebooks/01_exploration.ipynb`: Shows how to import processed shorelines, waves and tides. An interactive widget plots the location and cross sections. +- `/notebooks/qgis.qgz`: A QGIS file which is used to explore the aerial LIDAR data in `/data/raw/raw_lidar`. By examining the pre-strom lidar, dune crest and dune toe lines are manually extracted. These are stored in the `/data/profile_features/`. \ No newline at end of file diff --git a/notebooks/01_exploration.ipynb b/notebooks/01_exploration.ipynb new file mode 100644 index 0000000..0fbcb2e --- /dev/null +++ b/notebooks/01_exploration.ipynb @@ -0,0 +1,1261 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Data exploration\n", + "This notebook provides an example how the data has been loaded and accessed for further analysis." + ] + }, + { + "cell_type": "code", + "execution_count": 144, + "metadata": { + "ExecuteTime": { + "end_time": "2018-11-09T01:48:38.686778Z", + "start_time": "2018-11-09T01:48:31.350515Z" + } + }, + "outputs": [], + "source": [ + "# Enable autoreloading of our modules. \n", + "# Most of the code will be located in the /src/ folder, \n", + "# and then called from the notebook.\n", + "\n", + "%reload_ext autoreload\n", + "%autoreload" + ] + }, + { + "cell_type": "code", + "execution_count": 145, + "metadata": { + "ExecuteTime": { + "end_time": "2018-11-09T01:48:38.721265Z", + "start_time": "2018-11-09T01:48:38.687781Z" + }, + "scrolled": true + }, + "outputs": [], + "source": [ + "from IPython.core.debugger import set_trace\n", + "\n", + "import pandas as pd\n", + "import numpy as np\n", + "import os\n", + "\n", + "import plotly\n", + "import plotly.graph_objs as go\n", + "import plotly.plotly as py\n", + "\n", + "from ipywidgets import widgets\n", + "from IPython.display import display, clear_output, Image" + ] + }, + { + "cell_type": "code", + "execution_count": 146, + "metadata": { + "ExecuteTime": { + "end_time": "2018-11-09T01:48:55.758881Z", + "start_time": "2018-11-09T01:48:38.723271Z" + }, + "pixiedust": { + "displayParams": {} + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\z5189959\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\numpy\\lib\\arraysetops.py:518: FutureWarning:\n", + "\n", + "elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison\n", + "\n" + ] + } + ], + "source": [ + "data_folder = '../data/interim'\n", + "df_waves = pd.read_csv(os.path.join(data_folder, 'waves.csv'), index_col=[0,1])\n", + "df_tides = pd.read_csv(os.path.join(data_folder, 'tides.csv'), index_col=[0,1])\n", + "df_profiles = pd.read_csv(os.path.join(data_folder, 'profiles.csv'), index_col=[0,1,2])\n", + "df_sites = pd.read_csv(os.path.join(data_folder, 'sites.csv'),index_col=[0])\n" + ] + }, + { + "cell_type": "code", + "execution_count": 147, + "metadata": { + "ExecuteTime": { + "end_time": "2018-11-09T01:48:56.438469Z", + "start_time": "2018-11-09T01:48:55.759856Z" + } + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "89b213f09e874adaa67419df3a32499a", + "version_major": 2, + "version_minor": 0 + }, + "text/html": [ + "

Failed to display Jupyter Widget of type VBox.

\n", + "

\n", + " If you're reading this message in the Jupyter Notebook or JupyterLab Notebook, it may mean\n", + " that the widgets JavaScript is still loading. If this message persists, it\n", + " likely means that the widgets JavaScript library is either not installed or\n", + " not enabled. See the Jupyter\n", + " Widgets Documentation for setup instructions.\n", + "

\n", + "

\n", + " If you're reading this message in another frontend (for example, a static\n", + " rendering on GitHub or NBViewer),\n", + " it may mean that your frontend doesn't currently support widgets.\n", + "

\n" + ], + "text/plain": [ + "VBox(children=(HBox(children=(Dropdown(description='site_id: ', index=943, options=('AVOCAn0001', 'AVOCAn0002', 'AVOCAn0003', 'AVOCAn0004', 'AVOCAn0005', 'AVOCAn0006', 'AVOCAn0007', 'AVOCAn0008', 'AVOCAn0009', 'AVOCAs0001', 'AVOCAs0002', 'AVOCAs0003', 'AVOCAs0004', 'AVOCAs0005', 'AVOCAs0006', 'AVOCAs0007', 'AVOCAs0008', 'BILG0001', 'BILG0002', 'BILG0003', 'BILG0004', 'BILG0005', 'BLUEYS0001', 'BLUEYS0002', 'BLUEYS0003', 'BLUEYS0004', 'BLUEYS0005', 'BLUEYS0006', 'BOAT0001', 'BOAT0002', 'BOAT0003', 'BOAT0004', 'BOAT0005', 'BOOM0001', 'BOOM0002', 'BOOM0003', 'BOOM0004', 'BOOM0005', 'BOOM0006', 'BOOM0007', 'BOOM0008', 'BOOM0009', 'BOOM0010', 'BOOM0011', 'BOOM0012', 'BOOM0013', 'BOOM0014', 'CATHIE0001', 'CATHIE0002', 'CATHIE0003', 'CATHIE0004', 'CATHIE0005', 'CATHIE0006', 'CATHIE0007', 'CATHIE0008', 'CATHIE0009', 'CATHIE0010', 'CATHIE0011', 'CATHIE0012', 'CATHIE0013', 'CATHIE0014', 'CATHIE0015', 'CATHIE0016', 'CATHIE0017', 'CATHIE0018', 'CATHIE0019', 'CATHIE0020', 'CATHIE0021', 'CATHIE0022', 'CATHIE0023', 'CATHIE0024', 'CATHIE0025', 'CATHIE0026', 'CATHIE0027', 'CATHIE0028', 'CATHIE0029', 'CRESn0001', 'CRESn0002', 'CRESn0003', 'CRESn0004', 'CRESn0005', 'CRESn0006', 'CRESn0007', 'CRESn0008', 'CRESn0009', 'CRESn0010', 'CRESn0011', 'CRESn0012', 'CRESn0013', 'CRESn0014', 'CRESn0015', 'CRESn0016', 'CRESn0017', 'CRESn0018', 'CRESn0019', 'CRESn0020', 'CRESn0021', 'CRESn0022', 'CRESn0023', 'CRESn0024', 'CRESn0025', 'CRESn0026', 'CRESn0027', 'CRESn0028', 'CRESn0029', 'CRESn0030', 'CRESn0031', 'CRESn0032', 'CRESn0033', 'CRESn0034', 'CRESn0035', 'CRESn0036', 'CRESn0037', 'CRESn0038', 'CRESn0039', 'CRESn0040', 'CRESn0041', 'CRESn0042', 'CRESn0043', 'CRESn0044', 'CRESn0045', 'CRESn0046', 'CRESn0047', 'CRESn0048', 'CRESn0049', 'CRESn0050', 'CRESn0051', 'CRESn0052', 'CRESn0053', 'CRESn0054', 'CRESn0055', 'CRESn0056', 'CRESn0057', 'CRESn0058', 'CRESn0059', 'CRESn0060', 'CRESn0061', 'CRESn0062', 'CRESn0063', 'CRESn0064', 'CRESn0065', 'CRESn0066', 'CRESn0067', 'CRESn0068', 'CRESn0069', 'CRESn0070', 'CRESn0071', 'CRESn0072', 'CRESn0073', 'CRESn0074', 'CRESn0075', 'CRESn0076', 'CRESn0077', 'CRESn0078', 'CRESn0079', 'CRESn0080', 'CRESn0081', 'CRESn0082', 'CRESn0083', 'CRESn0084', 'CRESn0085', 'CRESn0086', 'CRESn0087', 'CRESn0088', 'CRESn0089', 'CRESn0090', 'CRESn0091', 'CRESn0092', 'CRESn0093', 'CRESn0094', 'CRESn0095', 'CRESn0096', 'CRESn0097', 'CRESn0098', 'CRESn0099', 'CRESn0100', 'CRESn0101', 'CRESn0102', 'CRESn0103', 'CRESn0104', 'CRESn0105', 'CRESn0106', 'CRESn0107', 'CRESn0108', 'CRESn0109', 'CRESn0110', 'CRESn0111', 'CRESn0112', 'CRESn0113', 'CRESn0114', 'CRESn0115', 'CRESn0116', 'CRESn0117', 'CRESn0118', 'CRESn0119', 'CRESn0120', 'CRESn0121', 'CRESn0122', 'CRESn0123', 'CRESn0124', 'CRESn0125', 'CRESs0001', 'CRESs0002', 'CRESs0003', 'CRESs0004', 'CRESs0005', 'CRESs0006', 'CRESs0007', 'CRESs0008', 'CRESs0009', 'CRESs0010', 'CRESs0011', 'CRESs0012', 'CRESs0013', 'CRESs0014', 'DEEWHYn0001', 'DEEWHYn0002', 'DEEWHYn0003', 'DEEWHYn0004', 'DEEWHYn0005', 'DEEWHYn0006', 'DEEWHYn0007', 'DEEWHYn0008', 'DEEWHYn0009', 'DEEWHYn0010', 'DEEWHYn0011', 'DEEWHYn0012', 'DEEWHYs0001', 'DEEWHYs0002', 'DEEWHYs0003', 'DEEWHYs0004', 'DEEWHYs0005', 'DEEWHYs0006', 'DEEWHYs0007', 'DEEWHYs0008', 'DIAMONDn0001', 'DIAMONDn0002', 'DIAMONDn0003', 'DIAMONDn0004', 'DIAMONDn0005', 'DIAMONDn0006', 'DIAMONDn0007', 'DIAMONDn0008', 'DIAMONDn0009', 'DIAMONDn0010', 'DIAMONDn0011', 'DIAMONDn0012', 'DIAMONDn0013', 'DIAMONDn0014', 'DIAMONDn0015', 'DIAMONDn0016', 'DIAMONDn0017', 'DIAMONDn0018', 'DIAMONDn0019', 'DIAMONDn0020', 'DIAMONDn0021', 'DIAMONDn0022', 'DIAMONDn0023', 'DIAMONDn0024', 'DIAMONDn0025', 'DIAMONDn0026', 'DIAMONDn0027', 'DIAMONDn0028', 'DIAMONDn0029', 'DIAMONDn0030', 'DIAMONDn0031', 'DIAMONDn0032', 'DIAMONDn0033', 'DIAMONDn0034', 'DIAMONDn0035', 'DIAMONDn0036', 'DIAMONDn0037', 'DIAMONDn0038', 'DIAMONDn0039', 'DIAMONDn0040', 'DIAMONDn0041', 'DIAMONDs0001', 'DIAMONDs0002', 'DIAMONDs0003', 'DIAMONDs0004', 'DIAMONDs0005', 'DIAMONDs0006', 'DIAMONDs0007', 'DUNBn0001', 'DUNBn0002', 'DUNBn0003', 'DUNBn0004', 'DUNBn0005', 'DUNBn0006', 'DUNBn0007', 'DUNBn0008', 'DUNBn0009', 'DUNBn0010', 'DUNBn0011', 'DUNBn0012', 'DUNBn0013', 'DUNBn0014', 'DUNBn0015', 'DUNBn0016', 'DUNBn0017', 'DUNBn0018', 'DUNBn0019', 'DUNBn0020', 'DUNBn0021', 'DUNBn0022', 'DUNBn0023', 'DUNBn0024', 'DUNBn0025', 'DUNBn0026', 'DUNBn0027', 'DUNBn0028', 'DUNBn0029', 'DUNBn0030', 'DUNBn0031', 'DUNBn0032', 'DUNBn0033', 'DUNBn0034', 'DUNBn0035', 'DUNBn0036', 'DUNBn0037', 'DUNBn0038', 'DUNBn0039', 'DUNBn0040', 'DUNBn0041', 'DUNBn0042', 'DUNBn0043', 'DUNBn0044', 'DUNBn0045', 'DUNBn0046', 'DUNBn0047', 'DUNBn0048', 'DUNBn0049', 'DUNBn0050', 'DUNBn0051', 'DUNBn0052', 'DUNBn0053', 'DUNBn0054', 'DUNBn0055', 'DUNBn0056', 'DUNBn0057', 'DUNBn0058', 'DUNBn0059', 'DUNBn0060', 'DUNBn0061', 'DUNBn0062', 'DUNBn0063', 'DUNBn0064', 'DUNBn0065', 'DUNBn0066', 'DUNBn0067', 'DUNBn0068', 'DUNBn0069', 'DUNBn0070', 'DUNBn0071', 'DUNBn0072', 'DUNBn0073', 'DUNBn0074', 'DUNBs0001', 'DUNBs0002', 'DUNBs0003', 'DUNBs0004', 'DUNBs0005', 'DUNBs0006', 'DUNBs0007', 'DUNBs0008', 'DUNBs0009', 'DUNBs0010', 'DUNBs0011', 'ELIZA0001', 'ELIZA0002', 'ELIZA0003', 'ELIZA0004', 'ELIZA0005', 'ELIZA0006', 'ELIZA0007', 'ENTRA0001', 'ENTRA0002', 'ENTRA0003', 'ENTRA0004', 'ENTRA0005', 'ENTRA0006', 'ENTRA0007', 'ENTRA0008', 'ENTRA0009', 'ENTRA0010', 'ENTRA0011', 'ENTRA0012', 'ENTRA0013', 'ENTRA0014', 'ENTRA0015', 'ENTRA0016', 'ENTRA0017', 'ENTRA0018', 'ENTRA0019', 'ENTRA0020', 'ENTRA0021', 'ENTRA0022', 'ENTRA0023', 'ENTRA0024', 'ENTRA0025', 'ENTRA0026', 'ENTRA0027', 'ENTRA0028', 'ENTRA0029', 'ENTRA0030', 'ENTRA0031', 'ENTRA0032', 'ENTRA0033', 'ENTRA0034', 'ENTRA0035', 'ENTRA0036', 'ENTRA0037', 'ENTRA0038', 'ENTRA0039', 'ENTRA0040', 'ENTRA0041', 'ENTRA0042', 'ENTRA0043', 'ENTRA0044', 'ENTRA0045', 'ENTRA0046', 'ENTRA0047', 'ENTRA0048', 'ENTRA0049', 'ENTRA0050', 'ENTRA0051', 'ENTRA0052', 'ENTRA0053', 'ENTRA0054', 'ENTRA0055', 'ENTRA0056', 'ENTRA0057', 'ENTRA0058', 'ENTRA0059', 'ENTRA0060', 'ENTRA0061', 'ENTRA0062', 'ENTRA0063', 'ENTRA0064', 'ENTRA0065', 'ENTRA0066', 'ENTRA0067', 'ENTRA0068', 'ENTRA0069', 'ENTRA0070', 'ENTRA0071', 'ENTRA0072', 'ENTRA0073', 'ENTRA0074', 'ENTRA0075', 'ENTRA0076', 'ENTRA0077', 'ENTRA0078', 'ENTRA0079', 'FOST0001', 'FOST0002', 'FOST0003', 'FOST0004', 'FOST0005', 'FOST0006', 'GRANTSn0001', 'GRANTSn0002', 'GRANTSn0003', 'GRANTSn0004', 'GRANTSn0005', 'GRANTSn0006', 'GRANTSn0007', 'GRANTSn0008', 'GRANTSn0009', 'GRANTSn0010', 'GRANTSn0011', 'GRANTSn0012', 'GRANTSn0013', 'GRANTSn0014', 'GRANTSn0015', 'GRANTSn0016', 'GRANTSn0017', 'GRANTSn0018', 'GRANTSn0019', 'GRANTSn0020', 'GRANTSn0021', 'GRANTSn0022', 'GRANTSn0023', 'GRANTSn0024', 'GRANTSs0001', 'GRANTSs0002', 'GRANTSs0003', 'GRANTSs0004', 'GRANTSs0005', 'GRANTSs0006', 'GRANTSs0007', 'GRANTSs0008', 'GRANTSs0009', 'GRANTSs0010', 'GRANTSs0011', 'GRANTSs0012', 'GRANTSs0013', 'GRANTSs0014', 'HARGn0001', 'HARGn0002', 'HARGn0003', 'HARGn0004', 'HARGn0005', 'HARGn0006', 'HARGn0007', 'HARGs0001', 'HARGs0002', 'HARGs0003', 'HARGs0004', 'HARGs0005', 'HARGs0006', 'HARGs0007', 'HARR0001', 'HARR0002', 'HARR0003', 'HARR0004', 'HARR0005', 'HARR0006', 'HARR0007', 'HARR0008', 'HARR0009', 'HARR0010', 'HARR0011', 'HARR0012', 'HARR0013', 'HARR0014', 'HARR0015', 'HARR0016', 'HARR0017', 'HARR0018', 'HARR0019', 'HARR0020', 'HARR0021', 'HARR0022', 'HARR0023', 'HARR0024', 'HARR0025', 'HARR0026', 'HARR0027', 'HARR0028', 'HARR0029', 'HARR0030', 'HARR0031', 'HARR0032', 'HARR0033', 'HARR0034', 'HARR0035', 'HARR0036', 'HARR0037', 'HARR0038', 'HARR0039', 'HARR0040', 'HARR0041', 'HARR0042', 'HARR0043', 'HARR0044', 'HARR0045', 'HARR0046', 'HARR0047', 'HARR0048', 'HARR0049', 'HARR0050', 'HARR0051', 'HARR0052', 'HARR0053', 'HARR0054', 'HARR0055', 'HARR0056', 'LHOUSE0001', 'LHOUSE0002', 'LHOUSE0003', 'LHOUSE0004', 'LHOUSE0005', 'LHOUSE0006', 'LHOUSE0007', 'LHOUSE0008', 'LHOUSE0009', 'LHOUSE0010', 'LHOUSE0011', 'LHOUSE0012', 'LHOUSE0013', 'LHOUSEn0001', 'LHOUSEn0002', 'LHOUSEn0003', 'LHOUSEn0004', 'LHOUSEn0005', 'LHOUSEn0006', 'LHOUSEn0007', 'LHOUSEn0008', 'LHOUSEn0009', 'LHOUSEn0010', 'LHOUSEn0011', 'LHOUSEn0012', 'LHOUSEn0013', 'LHOUSEn0014', 'LHOUSEn0015', 'LHOUSEn0016', 'LHOUSEn0017', 'LHOUSEn0018', 'LHOUSEn0019', 'LHOUSEn0020', 'LHOUSEn0021', 'LHOUSEn0022', 'LHOUSEn0023', 'LHOUSEn0024', 'LHOUSEn0025', 'LHOUSEn0026', 'LHOUSEn0027', 'LHOUSEn0028', 'LHOUSEn0029', 'LHOUSEn0030', 'LHOUSEn0031', 'LHOUSEn0032', 'LHOUSEn0033', 'LHOUSEn0034', 'LHOUSEn0035', 'LHOUSEn0036', 'LHOUSEn0037', 'LHOUSEn0038', 'LHOUSEn0039', 'LHOUSEn0040', 'LHOUSEn0041', 'LHOUSEn0042', 'LHOUSEn0043', 'LHOUSEn0044', 'LHOUSEn0045', 'LHOUSEn0046', 'LHOUSEn0047', 'LHOUSEn0048', 'LHOUSEn0049', 'LHOUSEn0050', 'LHOUSEn0051', 'LHOUSEn0052', 'LHOUSEn0053', 'LHOUSEn0054', 'LHOUSEn0055', 'LHOUSEn0056', 'LHOUSEn0057', 'LHOUSEn0058', 'LHOUSEn0059', 'LHOUSEn0060', 'LHOUSEn0061', 'LHOUSEn0062', 'LHOUSEn0063', 'LHOUSEn0064', 'LHOUSEn0065', 'LHOUSEn0066', 'LHOUSEn0067', 'LHOUSEn0068', 'LHOUSEn0069', 'LHOUSEn0070', 'LHOUSEn0071', 'LHOUSEn0072', 'LHOUSEn0073', 'LHOUSEn0074', 'LHOUSEn0075', 'LHOUSEn0076', 'LHOUSEn0077', 'LHOUSEn0078', 'LHOUSEn0079', 'LHOUSEn0080', 'LHOUSEn0081', 'LHOUSEn0082', 'LHOUSEn0083', 'LHOUSEn0084', 'LHOUSEn0085', 'LHOUSEn0086', 'LHOUSEn0087', 'LHOUSEn0088', 'LHOUSEn0089', 'LHOUSEn0090', 'LHOUSEn0091', 'LHOUSEn0092', 'LHOUSEn0093', 'LHOUSEs0001', 'LHOUSEs0002', 'LHOUSEs0003', 'LHOUSEs0004', 'LHOUSEs0005', 'LHOUSEs0006', 'LHOUSEs0007', 'LHOUSEs0008', 'LHOUSEs0009', 'LHOUSEs0010', 'LHOUSEs0011', 'LHOUSEs0012', 'LHOUSEs0013', 'LHOUSEs0014', 'LHOUSEs0015', 'LHOUSEs0016', 'LHOUSEs0017', 'LHOUSEs0018', 'LHOUSEs0019', 'LHOUSEs0020', 'LHOUSEs0021', 'LHOUSEs0022', 'LHOUSEs0023', 'LHOUSEs0024', 'LHOUSEs0025', 'LHOUSEs0026', 'LHOUSEs0027', 'LHOUSEs0028', 'LHOUSEs0029', 'LHOUSEs0030', 'LHOUSEs0031', 'LHOUSEs0032', 'MACM0001', 'MACM0002', 'MACM0003', 'MACM0004', 'MACM0005', 'MACM0006', 'MACM0007', 'MACM0008', 'MACM0009', 'MACM0010', 'MACM0011', 'MACM0012', 'MACM0013', 'MACM0014', 'MACM0015', 'MACM0016', 'MANNING0001', 'MANNING0002', 'MANNING0003', 'MANNING0004', 'MANNING0005', 'MANNING0006', 'MANNING0007', 'MANNING0008', 'MANNING0009', 'MANNING0010', 'MANNING0011', 'MANNING0012', 'MANNING0013', 'MANNING0014', 'MANNING0015', 'MANNING0016', 'MANNING0017', 'MANNING0018', 'MANNING0019', 'MANNING0020', 'MANNING0021', 'MANNING0022', 'MANNING0023', 'MANNING0024', 'MANNING0025', 'MANNING0026', 'MANNING0027', 'MANNING0028', 'MANNING0029', 'MANNING0030', 'MANNING0031', 'MANNING0032', 'MANNING0033', 'MANNING0034', 'MANNING0035', 'MANNING0036', 'MANNING0037', 'MANNING0038', 'MANNING0039', 'MANNING0040', 'MANNING0041', 'MANNING0042', 'MANNING0043', 'MANNING0044', 'MANNING0045', 'MANNING0046', 'MANNING0047', 'MANNING0048', 'MANNING0049', 'MANNING0050', 'MANNING0051', 'MANNING0052', 'MANNING0053', 'MANNING0054', 'MANNING0055', 'MANNING0056', 'MANNING0057', 'MANNING0058', 'MANNING0059', 'MANNING0060', 'MANNING0061', 'MANNING0062', 'MANNING0063', 'MANNING0064', 'MANNING0065', 'MANNING0066', 'MANNING0067', 'MANNING0068', 'MANNING0069', 'MANNING0070', 'MANNING0071', 'MANNING0072', 'MANNING0073', 'MANNING0074', 'MANNING0075', 'MANNING0076', 'MANNING0077', 'MANNING0078', 'MANNING0079', 'MANNING0080', 'MANNING0081', 'MANNING0082', 'MANNING0083', 'MANNING0084', 'MANNING0085', 'MANNING0086', 'MANNING0087', 'MANNING0088', 'MANNING0089', 'MANNING0090', 'MANNING0091', 'MANNING0092', 'MANNING0093', 'MANNING0094', 'MANNING0095', 'MANNING0096', 'MANNING0097', 'MANNING0098', 'MANNING0099', 'MANNING0100', 'MANNING0101', 'MANNING0102', 'MANNING0103', 'MANNING0104', 'MANNING0105', 'MANNING0106', 'MANNING0107', 'MANNING0108', 'MANNING0109', 'MANNING0110', 'MANNING0111', 'MANNING0112', 'MANNING0113', 'MANNING0114', 'MANNING0115', 'MANNING0116', 'MANNING0117', 'MANNING0118', 'MANNING0119', 'MANNING0120', 'MANNING0121', 'MANNING0122', 'MANNING0123', 'MANNING0124', 'MANNING0125', 'MANNING0126', 'MANNING0127', 'MONA0001', 'MONA0002', 'MONA0003', 'MONA0004', 'MONA0005', 'MONA0006', 'MONA0007', 'MONA0008', 'MONA0009', 'MONA0010', 'MONA0011', 'MONA0012', 'MONA0013', 'MONA0014', 'MONA0015', 'MONA0016', 'MONA0017', 'MONA0018', 'MONA0019', 'MONA0020', 'MONA0021', 'NAMB0001', 'NAMB0002', 'NAMB0003', 'NAMB0004', 'NAMB0005', 'NAMB0006', 'NAMB0007', 'NAMB0008', 'NAMB0009', 'NAMB0010', 'NAMB0011', 'NAMB0012', 'NAMB0013', 'NAMB0014', 'NAMB0015', 'NAMB0016', 'NAMB0017', 'NAMB0018', 'NAMB0019', 'NAMB0020', 'NAMB0021', 'NAMB0022', 'NAMB0023', 'NAMB0024', 'NAMB0025', 'NAMB0026', 'NAMB0027', 'NAMB0028', 'NAMB0029', 'NAMB0030', 'NAMB0031', 'NAMB0032', 'NAMB0033', 'NAMB0034', 'NAMB0035', 'NAMB0036', 'NAMB0037', 'NAMB0038', 'NAMB0039', 'NAMB0040', 'NAMB0041', 'NAMB0042', 'NAMB0043', 'NAMB0044', 'NAMB0045', 'NAMB0046', 'NAMB0047', 'NAMB0048', 'NAMB0049', 'NAMB0050', 'NAMB0051', 'NAMB0052', 'NAMB0053', 'NAMB0054', 'NAMB0055', 'NAMB0056', 'NAMB0057', 'NAMB0058', 'NAMB0059', 'NAMB0060', 'NAMB0061', 'NAMB0062', 'NAMB0063', 'NAMB0064', 'NAMB0065', 'NAMB0066', 'NAMB0067', 'NAMB0068', 'NAMB0069', 'NAMB0070', 'NAMB0071', 'NAMB0072', 'NAMB0073', 'NARRA0001', 'NARRA0002', 'NARRA0003', 'NARRA0004', 'NARRA0005', 'NARRA0006', 'NARRA0007', 'NARRA0008', 'NARRA0009', 'NARRA0010', 'NARRA0011', 'NARRA0012', 'NARRA0013', 'NARRA0014', 'NARRA0015', 'NARRA0016', 'NARRA0017', 'NARRA0018', 'NARRA0019', 'NARRA0020', 'NARRA0021', 'NARRA0022', 'NARRA0023', 'NARRA0024', 'NARRA0025', 'NARRA0026', 'NARRA0027', 'NARRA0028', 'NARRA0029', 'NARRA0030', 'NARRA0031', 'NARRA0032', 'NARRA0033', 'NARRA0034', 'NARRA0035', 'NARRA0036', 'NINEMn0001', 'NINEMn0002', 'NINEMn0003', 'NINEMn0004', 'NINEMn0005', 'NINEMn0006', 'NINEMn0007', 'NINEMn0008', 'NINEMn0009', 'NINEMn0010', 'NINEMn0011', 'NINEMn0012', 'NINEMn0013', 'NINEMn0014', 'NINEMn0015', 'NINEMn0016', 'NINEMn0017', 'NINEMn0018', 'NINEMn0019', 'NINEMn0020', 'NINEMn0021', 'NINEMn0022', 'NINEMn0023', 'NINEMn0024', 'NINEMn0025', 'NINEMn0026', 'NINEMn0027', 'NINEMn0028', 'NINEMn0029', 'NINEMn0030', 'NINEMn0031', 'NINEMn0032', 'NINEMn0033', 'NINEMn0034', 'NINEMn0035', 'NINEMn0036', 'NINEMn0037', 'NINEMn0038', 'NINEMn0039', 'NINEMn0040', 'NINEMn0041', 'NINEMn0042', 'NINEMn0043', 'NINEMn0044', 'NINEMn0045', 'NINEMn0046', 'NINEMn0047', 'NINEMn0048', 'NINEMn0049', 'NINEMn0050', 'NINEMn0051', 'NINEMn0052', 'NINEMn0053', 'NINEMn0054', 'NINEMs0001', 'NINEMs0002', 'NINEMs0003', 'NINEMs0004', 'NINEMs0005', 'NINEMs0006', 'NINEMs0007', 'NINEMs0008', 'NINEMs0009', 'NINEMs0010', 'NINEMs0011', 'NINEMs0012', 'NINEMs0013', 'NINEMs0014', 'NINEMs0015', 'NINEMs0016', 'NINEMs0017', 'NINEMs0018', 'NINEMs0019', 'NINEMs0020', 'NINEMs0021', 'NINEMs0022', 'NINEMs0023', 'NINEMs0024', 'NINEMs0025', 'NINEMs0026', 'NINEMs0027', 'NINEMs0028', 'NINEMs0029', 'NINEMs0030', 'NINEMs0031', 'NINEMs0032', 'NINEMs0033', 'NINEMs0034', 'NINEMs0035', 'NINEMs0036', 'NINEMs0037', 'NINEMs0038', 'NINEMs0039', 'NINEMs0040', 'NINEMs0041', 'NINEMs0042', 'NINEMs0043', 'NINEMs0044', 'NINEMs0045', 'NINEMs0046', 'NINEMs0047', 'NINEMs0048', 'NINEMs0049', 'NINEMs0050', 'NINEMs0051', 'NINEMs0052', 'NINEMs0053', 'NINEMs0054', 'NINEMs0055', 'NINEMs0056', 'NINEMs0057', 'NINEMs0058', 'NINEMs0059', 'NINEMs0060', 'NSHORE_n0001', 'NSHORE_n0002', 'NSHORE_n0003', 'NSHORE_n0004', 'NSHORE_n0005', 'NSHORE_n0006', 'NSHORE_n0007', 'NSHORE_n0008', 'NSHORE_n0009', 'NSHORE_n0010', 'NSHORE_n0011', 'NSHORE_n0012', 'NSHORE_n0013', 'NSHORE_n0014', 'NSHORE_n0015', 'NSHORE_n0016', 'NSHORE_n0017', 'NSHORE_n0018', 'NSHORE_n0019', 'NSHORE_n0020', 'NSHORE_n0021', 'NSHORE_n0022', 'NSHORE_n0023', 'NSHORE_n0024', 'NSHORE_n0025', 'NSHORE_n0026', 'NSHORE_n0027', 'NSHORE_n0028', 'NSHORE_n0029', 'NSHORE_n0030', 'NSHORE_n0031', 'NSHORE_n0032', 'NSHORE_n0033', 'NSHORE_n0034', 'NSHORE_n0035', 'NSHORE_n0036', 'NSHORE_n0037', 'NSHORE_n0038', 'NSHORE_n0039', 'NSHORE_n0040', 'NSHORE_n0041', 'NSHORE_n0042', 'NSHORE_n0043', 'NSHORE_n0044', 'NSHORE_n0045', 'NSHORE_n0046', 'NSHORE_n0047', 'NSHORE_n0048', 'NSHORE_n0049', 'NSHORE_n0050', 'NSHORE_n0051', 'NSHORE_n0052', 'NSHORE_n0053', 'NSHORE_n0054', 'NSHORE_n0055', 'NSHORE_n0056', 'NSHORE_n0057', 'NSHORE_n0058', 'NSHORE_n0059', 'NSHORE_n0060', 'NSHORE_n0061', 'NSHORE_n0062', 'NSHORE_n0063', 'NSHORE_n0064', 'NSHORE_n0065', 'NSHORE_n0066', 'NSHORE_n0067', 'NSHORE_n0068', 'NSHORE_n0069', 'NSHORE_n0070', 'NSHORE_n0071', 'NSHORE_n0072', 'NSHORE_n0073', 'NSHORE_n0074', 'NSHORE_n0075', 'NSHORE_n0076', 'NSHORE_n0077', 'NSHORE_n0078', 'NSHORE_n0079', 'NSHORE_n0080', 'NSHORE_n0081', 'NSHORE_n0082', 'NSHORE_s0001', 'NSHORE_s0002', 'NSHORE_s0003', 'NSHORE_s0004', 'NSHORE_s0005', 'NSHORE_s0006', 'NSHORE_s0007', 'NSHORE_s0008', 'NSHORE_s0009', 'NSHORE_s0010', 'NSHORE_s0011', 'NSHORE_s0012', 'NSHORE_s0013', 'NSHORE_s0014', 'NSHORE_s0015', 'NSHORE_s0016', 'NSHORE_s0017', 'NSHORE_s0018', 'NSHORE_s0019', 'NSHORE_s0020', 'NSHORE_s0021', 'NSHORE_s0022', 'NSHORE_s0023', 'NSHORE_s0024', 'NSHORE_s0025', 'NSHORE_s0026', 'NSHORE_s0027', 'NSHORE_s0028', 'NSHORE_s0029', 'NSHORE_s0030', 'NSHORE_s0031', 'NSHORE_s0032', 'NSHORE_s0033', 'NSHORE_s0034', 'NSHORE_s0035', 'NSHORE_s0036', 'NSHORE_s0037', 'NSHORE_s0038', 'NSHORE_s0039', 'NSHORE_s0040', 'NSHORE_s0041', 'NSHORE_s0042', 'NSHORE_s0043', 'NSHORE_s0044', 'OLDBAR0001', 'OLDBAR0002', 'OLDBAR0003', 'OLDBAR0004', 'OLDBAR0005', 'OLDBAR0006', 'OLDBAR0007', 'OLDBAR0008', 'OLDBAR0009', 'OLDBAR0010', 'OLDBAR0011', 'OLDBAR0012', 'OLDBAR0013', 'OLDBAR0014', 'OLDBAR0015', 'OLDBAR0016', 'OLDBAR0017', 'OLDBAR0018', 'OLDBAR0019', 'OLDBAR0020', 'OLDBAR0021', 'OLDBAR0022', 'OLDBAR0023', 'OLDBAR0024', 'OLDBAR0025', 'OLDBAR0026', 'OLDBAR0027', 'OLDBAR0028', 'OLDBAR0029', 'OLDBAR0030', 'OLDBAR0031', 'OLDBAR0032', 'OLDBAR0033', 'OLDBAR0034', 'OLDBAR0035', 'OLDBAR0036', 'ONEMILE0001', 'ONEMILE0002', 'ONEMILE0003', 'ONEMILE0004', 'ONEMILE0005', 'ONEMILE0006', 'ONEMILE0007', 'ONEMILE0008', 'ONEMILE0009', 'ONEMILE0010', 'ONEMILE0011', 'ONEMILE0012', 'ONEMILE0013', 'PEARLn0001', 'PEARLn0002', 'PEARLn0003', 'PEARLn0004', 'PEARLn0005', 'PEARLs0001', 'PEARLs0002', 'PEARLs0003', 'PEARLs0004', 'PEARLs0005', 'SCOT0001', 'SCOT0002', 'SCOT0003', 'SCOT0004', 'SCOT0005', 'SCOT0006', 'SCOT0007', 'SCOT0008', 'SCOT0009', 'SCOT0010', 'SCOT0011', 'SCOT0012', 'STOCNn0001', 'STOCNn0002', 'STOCNn0003', 'STOCNn0004', 'STOCNn0005', 'STOCNn0006', 'STOCNn0007', 'STOCNn0008', 'STOCNn0009', 'STOCNn0010', 'STOCNn0011', 'STOCNn0012', 'STOCNn0013', 'STOCNn0014', 'STOCNn0015', 'STOCNn0016', 'STOCNn0017', 'STOCNn0018', 'STOCNn0019', 'STOCNn0020', 'STOCNn0021', 'STOCNn0022', 'STOCNn0023', 'STOCNn0024', 'STOCNn0025', 'STOCNn0026', 'STOCNn0027', 'STOCNn0028', 'STOCNn0029', 'STOCNn0030', 'STOCNn0031', 'STOCNn0032', 'STOCNn0033', 'STOCNn0034', 'STOCNn0035', 'STOCNn0036', 'STOCNn0037', 'STOCNn0038', 'STOCNn0039', 'STOCNn0040', 'STOCNn0041', 'STOCNn0042', 'STOCNn0043', 'STOCNn0044', 'STOCNn0045', 'STOCNn0046', 'STOCNn0047', 'STOCNn0048', 'STOCNn0049', 'STOCNn0050', 'STOCNn0051', 'STOCNn0052', 'STOCNn0053', 'STOCNn0054', 'STOCNn0055', 'STOCNn0056', 'STOCNn0057', 'STOCNn0058', 'STOCNn0059', 'STOCNn0060', 'STOCNn0061', 'STOCNn0062', 'STOCNn0063', 'STOCNn0064', 'STOCNn0065', 'STOCNs0001', 'STOCNs0002', 'STOCNs0003', 'STOCNs0004', 'STOCNs0005', 'STOCNs0006', 'STOCNs0007', 'STOCNs0008', 'STOCNs0009', 'STOCNs0010', 'STOCNs0011', 'STOCNs0012', 'STOCNs0013', 'STOCNs0014', 'STOCNs0015', 'STOCNs0016', 'STOCNs0017', 'STOCNs0018', 'STOCNs0019', 'STOCNs0020', 'STOCNs0021', 'STOCNs0022', 'STOCNs0023', 'STOCNs0024', 'STOCNs0025', 'STOCNs0026', 'STOCNs0027', 'STOCNs0028', 'STOCNs0029', 'STOCNs0030', 'STOCNs0031', 'STOCNs0032', 'STOCNs0033', 'STOCNs0034', 'STOCNs0035', 'STOCNs0036', 'STOCNs0037', 'STOCNs0038', 'STOCNs0039', 'STOCNs0040', 'STOCNs0041', 'STOCNs0042', 'STOCNs0043', 'STOCNs0044', 'STOCNs0045', 'STOCNs0046', 'STOCNs0047', 'STOCNs0048', 'STOCNs0049', 'STOCNs0050', 'STOCNs0051', 'STOCNs0052', 'STOCNs0053', 'STOCNs0054', 'STOCNs0055', 'STOCNs0056', 'STOCNs0057', 'STOCNs0058', 'STOCNs0059', 'STOCNs0060', 'STOCNs0061', 'STOCNs0062', 'STOCNs0063', 'STOCNs0064', 'STOCNs0065', 'STOCNs0066', 'STOCNs0067', 'STOCNs0068', 'STOCNs0069', 'STOCNs0070', 'STOCNs0071', 'STOCNs0072', 'STOCNs0073', 'STOCNs0074', 'STOCNs0075', 'STOCNs0076', 'STOCNs0077', 'STOCNs0078', 'STOCNs0079', 'STOCNs0080', 'STOCNs0081', 'STOCNs0082', 'STOCNs0083', 'STOCNs0084', 'STOCNs0085', 'STOCNs0086', 'STOCNs0087', 'STOCNs0088', 'STOCNs0089', 'STOCNs0090', 'STOCNs0091', 'STOCNs0092', 'STOCNs0093', 'STOCNs0094', 'STOCNs0095', 'STOCNs0096', 'STOCNs0097', 'STOCNs0098', 'STOCNs0099', 'STOCNs0100', 'STOCNs0101', 'STOCNs0102', 'STOCNs0103', 'STOCNs0104', 'STOCNs0105', 'STOCNs0106', 'STOCNs0107', 'STOCNs0108', 'STOCNs0109', 'STOCNs0110', 'STOCNs0111', 'STOCNs0112', 'STOCNs0113', 'STOCNs0114', 'STOCNs0115', 'STOCNs0116', 'STOCNs0117', 'STOCNs0118', 'STOCNs0119', 'STOCNs0120', 'STOCNs0121', 'STOCNs0122', 'STOCNs0123', 'STOCNs0124', 'STOCNs0125', 'STOCNs0126', 'STOCNs0127', 'STOCNs0128', 'STOCNs0129', 'STOCNs0130', 'STOCNs0131', 'STOCNs0132', 'STOCNs0133', 'STOCNs0134', 'STOCNs0135', 'STOCNs0136', 'STOCNs0137', 'STOCNs0138', 'STOCNs0139', 'STOCNs0140', 'STOCNs0141', 'STOCNs0142', 'STOCNs0143', 'STOCNs0144', 'STOCNs0145', 'STOCNs0146', 'STOCNs0147', 'STOCNs0148', 'STOCNs0149', 'STOCNs0150', 'STOCNs0151', 'STOCNs0152', 'STOCNs0153', 'STOCNs0154', 'STOCNs0155', 'STOCNs0156', 'STOCNs0157', 'STOCNs0158', 'STOCNs0159', 'STOCNs0160', 'STOCNs0161', 'STOCNs0162', 'STOCNs0163', 'STOCNs0164', 'STOCNs0165', 'STOCNs0166', 'STOCNs0167', 'STOCNs0168', 'STOCNs0169', 'STOCNs0170', 'STOCNs0171', 'STOCNs0172', 'STOCNs0173', 'STOCNs0174', 'STOCNs0175', 'STOCNs0176', 'STOCNs0177', 'STOCNs0178', 'STOCNs0179', 'STOCNs0180', 'STOCNs0181', 'STOCNs0182', 'STOCNs0183', 'STOCNs0184', 'STOCNs0185', 'STOCNs0186', 'STOCNs0187', 'STOCNs0188', 'STOCNs0189', 'STOCNs0190', 'STOCNs0191', 'STOCNs0192', 'STOCNs0193', 'STOCNs0194', 'STOCNs0195', 'STOCNs0196', 'STOCNs0197', 'STOCNs0198', 'STOCNs0199', 'STOCNs0200', 'STOCNs0201', 'STOCNs0202', 'STOCNs0203', 'STOCNs0204', 'STOCNs0205', 'STOCNs0206', 'STOCNs0207', 'STOCNs0208', 'STOCNs0209', 'STOCS0001', 'STOCS0002', 'STOCS0003', 'STOCS0004', 'STOCS0005', 'STOCS0006', 'STOCS0007', 'STOCS0008', 'STOCS0009', 'STOCS0010', 'STOCS0011', 'STOCS0012', 'STOCS0013', 'STOCS0014', 'STOCS0015', 'STOCS0016', 'STOCS0017', 'STOCS0018', 'STOCS0019', 'STOCS0020', 'STOCS0021', 'STOCS0022', 'STOCS0023', 'STOCS0024', 'STOCS0025', 'STOCS0026', 'STOCS0027', 'STOCS0028', 'STOCS0029', 'STOCS0030', 'STOCS0031', 'STOCS0032', 'STOCS0033', 'STOCS0034', 'STOCS0035', 'STOCS0036', 'STOCS0037', 'STOCS0038', 'STOCS0039', 'STOCS0040', 'STOCS0041', 'STOCS0042', 'STOCS0043', 'STOCS0044', 'STOCS0045', 'STOCS0046', 'STUART0001', 'STUART0002', 'STUART0003', 'STUART0004', 'STUART0005', 'STUART0006', 'STUART0007', 'STUART0008', 'STUART0009', 'STUART0010', 'STUART0011', 'STUART0012', 'STUART0013', 'STUART0014', 'STUART0015', 'STUART0016', 'STUART0017', 'STUART0018', 'STUART0019', 'STUART0020', 'STUART0021', 'STUART0022', 'STUART0023', 'STUART0024', 'STUART0025', 'STUART0026', 'STUART0027', 'STUART0028', 'STUART0029', 'STUART0030', 'STUART0031', 'STUART0032', 'STUART0033', 'STUART0034', 'STUART0035', 'STUART0036', 'STUART0037', 'STUART0038', 'STUART0039', 'STUART0040', 'STUART0041', 'STUART0042', 'STUART0043', 'STUART0044', 'STUART0045', 'STUART0046', 'STUART0047', 'STUART0048', 'STUART0049', 'STUART0050', 'STUART0051', 'STUART0052', 'STUART0053', 'STUART0054', 'STUART0055', 'STUART0056', 'STUART0057', 'STUART0058', 'STUART0059', 'STUART0060', 'STUART0061', 'STUART0062', 'STUART0063', 'STUART0064', 'STUART0065', 'STUART0066', 'STUART0067', 'STUART0068', 'STUART0069', 'STUART0070', 'STUART0071', 'STUART0072', 'STUART0073', 'STUART0074', 'STUART0075', 'STUART0076', 'STUART0077', 'STUART0078', 'STUART0079', 'STUART0080', 'STUART0081', 'STUART0082', 'STUART0083', 'STUART0084', 'STUART0085', 'STUART0086', 'STUART0087', 'STUART0088', 'STUART0089', 'SWRO0001', 'SWRO0002', 'SWRO0003', 'SWRO0004', 'SWRO0005', 'SWRO0006', 'SWRO0007', 'SWRO0008', 'SWRO0009', 'SWRO0010', 'SWRO0011', 'SWRO0012', 'SWRO0013', 'SWRO0014', 'SWRO0015', 'SWRO0016', 'SWRO0017', 'SWRO0018', 'SWRO0019', 'SWRO0020', 'SWRO0021', 'SWRO0022', 'SWRO0023', 'SWRO0024', 'SWRO0025', 'SWRO0026', 'TREACH0001', 'TREACH0002', 'TREACH0003', 'TREACH0004', 'TREACH0005', 'TREACH0006', 'TREACH0007', 'TREACH0008', 'TREACH0009', 'TREACH0010', 'TREACH0011', 'TREACH0012', 'TREACH0013', 'TREACH0014', 'TREACH0015', 'TREACH0016', 'WAMBE0001', 'WAMBE0002', 'WAMBE0003', 'WAMBE0004', 'WAMBE0005', 'WAMBE0006', 'WAMBE0007', 'WAMBE0008', 'WAMBE0009', 'WAMBE0010', 'WAMBE0011', 'WAMBE0012', 'WAMBE0013', 'WAMBE0014', 'WAMBE0015', 'WAMBE0016', 'WAMBE0017', 'WAMBE0018', 'WAMBE0019', 'WAMBE0020', 'WAMBE0021', 'WAMBE0022', 'WAMBE0023', 'WAMBE0024', 'WAMBE0025', 'WAMBE0026', 'WAMBE0027'), value='NARRA0001'),)), HBox(children=(FigureWidget({\n", + " 'data': [{'name': 'Pre Storm Profile',\n", + " 'type': 'scatter',\n", + " 'uid': '5f83eb47-e017-4192-a508-54a2f91a379c',\n", + " 'x': [0],\n", + " 'y': [0]},\n", + " {'name': 'Post Storm Profile',\n", + " 'type': 'scatter',\n", + " 'uid': '91e7e1e3-4be0-42c5-96f1-6536602059fd',\n", + " 'x': [0],\n", + " 'y': [0]}],\n", + " 'layout': {'legend': {'x': 0, 'y': 1},\n", + " 'margin': {'b': 50, 'l': 20, 'r': 20, 't': 50},\n", + " 'title': 'Bed Profiles',\n", + " 'xaxis': {'autorange': True,\n", + " 'range': [0, 200],\n", + " 'showgrid': True,\n", + " 'showline': True,\n", + " 'title': 'x (m)',\n", + " 'zeroline': True},\n", + " 'yaxis': {'autorange': False,\n", + " 'range': [-1, 20],\n", + " 'showgrid': True,\n", + " 'showline': True,\n", + " 'title': 'z (m)',\n", + " 'zeroline': True}}\n", + "}), FigureWidget({\n", + " 'data': [{'lat': array([-33.46381539, -33.46301835, -33.46221051, ..., -33.4279646 ,\n", + " -33.42732743, -33.42671036]),\n", + " 'lon': array([151.43639576, 151.43690633, 151.43738179, ..., 151.4501613 ,\n", + " 151.45092222, 151.45170635]),\n", + " 'marker': {'size': 10},\n", + " 'mode': 'markers',\n", + " 'text': array(['AVOCAn0001', 'AVOCAn0002', 'AVOCAn0003', ..., 'WAMBE0025', 'WAMBE0026',\n", + " 'WAMBE0027'], dtype='');\n", + " this._root_extra_style(this.root)\n", + " this.root.attr('style', 'display: inline-block');\n", + "\n", + " $(parent_element).append(this.root);\n", + "\n", + " this._init_header(this);\n", + " this._init_canvas(this);\n", + " this._init_toolbar(this);\n", + "\n", + " var fig = this;\n", + "\n", + " this.waiting = false;\n", + "\n", + " this.ws.onopen = function () {\n", + " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", + " fig.send_message(\"send_image_mode\", {});\n", + " if (mpl.ratio != 1) {\n", + " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", + " }\n", + " fig.send_message(\"refresh\", {});\n", + " }\n", + "\n", + " this.imageObj.onload = function() {\n", + " if (fig.image_mode == 'full') {\n", + " // Full images could contain transparency (where diff images\n", + " // almost always do), so we need to clear the canvas so that\n", + " // there is no ghosting.\n", + " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", + " }\n", + " fig.context.drawImage(fig.imageObj, 0, 0);\n", + " };\n", + "\n", + " this.imageObj.onunload = function() {\n", + " fig.ws.close();\n", + " }\n", + "\n", + " this.ws.onmessage = this._make_on_message_function(this);\n", + "\n", + " this.ondownload = ondownload;\n", + "}\n", + "\n", + "mpl.figure.prototype._init_header = function() {\n", + " var titlebar = $(\n", + " '
');\n", + " var titletext = $(\n", + " '
');\n", + " titlebar.append(titletext)\n", + " this.root.append(titlebar);\n", + " this.header = titletext[0];\n", + "}\n", + "\n", + "\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._init_canvas = function() {\n", + " var fig = this;\n", + "\n", + " var canvas_div = $('
');\n", + "\n", + " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", + "\n", + " function canvas_keyboard_event(event) {\n", + " return fig.key_event(event, event['data']);\n", + " }\n", + "\n", + " canvas_div.keydown('key_press', canvas_keyboard_event);\n", + " canvas_div.keyup('key_release', canvas_keyboard_event);\n", + " this.canvas_div = canvas_div\n", + " this._canvas_extra_style(canvas_div)\n", + " this.root.append(canvas_div);\n", + "\n", + " var canvas = $('');\n", + " canvas.addClass('mpl-canvas');\n", + " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", + "\n", + " this.canvas = canvas[0];\n", + " this.context = canvas[0].getContext(\"2d\");\n", + "\n", + " var backingStore = this.context.backingStorePixelRatio ||\n", + "\tthis.context.webkitBackingStorePixelRatio ||\n", + "\tthis.context.mozBackingStorePixelRatio ||\n", + "\tthis.context.msBackingStorePixelRatio ||\n", + "\tthis.context.oBackingStorePixelRatio ||\n", + "\tthis.context.backingStorePixelRatio || 1;\n", + "\n", + " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", + "\n", + " var rubberband = $('');\n", + " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", + "\n", + " var pass_mouse_events = true;\n", + "\n", + " canvas_div.resizable({\n", + " start: function(event, ui) {\n", + " pass_mouse_events = false;\n", + " },\n", + " resize: function(event, ui) {\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " stop: function(event, ui) {\n", + " pass_mouse_events = true;\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " });\n", + "\n", + " function mouse_event_fn(event) {\n", + " if (pass_mouse_events)\n", + " return fig.mouse_event(event, event['data']);\n", + " }\n", + "\n", + " rubberband.mousedown('button_press', mouse_event_fn);\n", + " rubberband.mouseup('button_release', mouse_event_fn);\n", + " // Throttle sequential mouse events to 1 every 20ms.\n", + " rubberband.mousemove('motion_notify', mouse_event_fn);\n", + "\n", + " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", + " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", + "\n", + " canvas_div.on(\"wheel\", function (event) {\n", + " event = event.originalEvent;\n", + " event['data'] = 'scroll'\n", + " if (event.deltaY < 0) {\n", + " event.step = 1;\n", + " } else {\n", + " event.step = -1;\n", + " }\n", + " mouse_event_fn(event);\n", + " });\n", + "\n", + " canvas_div.append(canvas);\n", + " canvas_div.append(rubberband);\n", + "\n", + " this.rubberband = rubberband;\n", + " this.rubberband_canvas = rubberband[0];\n", + " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", + " this.rubberband_context.strokeStyle = \"#000000\";\n", + "\n", + " this._resize_canvas = function(width, height) {\n", + " // Keep the size of the canvas, canvas container, and rubber band\n", + " // canvas in synch.\n", + " canvas_div.css('width', width)\n", + " canvas_div.css('height', height)\n", + "\n", + " canvas.attr('width', width * mpl.ratio);\n", + " canvas.attr('height', height * mpl.ratio);\n", + " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", + "\n", + " rubberband.attr('width', width);\n", + " rubberband.attr('height', height);\n", + " }\n", + "\n", + " // Set the figure to an initial 600x600px, this will subsequently be updated\n", + " // upon first draw.\n", + " this._resize_canvas(600, 600);\n", + "\n", + " // Disable right mouse context menu.\n", + " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", + " return false;\n", + " });\n", + "\n", + " function set_focus () {\n", + " canvas.focus();\n", + " canvas_div.focus();\n", + " }\n", + "\n", + " window.setTimeout(set_focus, 100);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('
')\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items) {\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) {\n", + " // put a spacer in here.\n", + " continue;\n", + " }\n", + " var button = $('