{ "cells": [ { "cell_type": "markdown", "metadata": { "toc": "true" }, "source": [ " # Table of Contents\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 6. Assessed Practical" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 6.1 Introduction" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 6.1.1 Site, Data and Task overview" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "These notes describe the practical you must submit for assessment in this course.\n", "\n", "The practical comes in two parts: (1) data preparation; (2) modelling. \n", "\n", "It is important that you complete both parts of this exercise, as you will need to make use of the code and results in the work you submit for assessment for this course.\n", "\n", "- **Data Preparation**\n", " \n", " The first task you must complete is to produce a dataset of the proportion of HUC catchment 13010001 (Rio Grande headwaters in Colorado, USA) that is covered by snow for **two consecutive years**, along with associated datasets on temperature (in C) and river discharge at the Del Norte monitoring station. You **may not** use data from the year 2005, as this is given to you in the illustrations above.\n", "\n", " The dataset you produce must have a value for the mean snow cover, temperature and discharge in the catchment for every day over each year.\n", "\n", " Your write up **must** include fully labelled graph(s) of snow cover, temperature and discharge for the catchment for each year (with units as appropriate), along with some summary statistics (e.g. mean or median, minimum, maximum, and the timing of these). \n", " \n", " You **must** provide evidence of how you got these data (i.e. the code and commands you ran to produce the data).\n", " \n", " \n", " \n", "- **Modelling**\n", "\n", " You will have prepared two years of data above. Use one of these years to calibrate the (snowmelt) hydrological model (described below) and one year to test it. \n", " \n", " The model parameter estimate *must* be objective (i.e. you can't just arbitrarily choose a set) and ideally optimal, and you *must* state the equation of the cost function you will try to minimise and explain the approach used.\n", " \n", " You **must** state the values of the model parameters that you have estimated and show evidence for how you went about calculating them. Ideally, you should also state the uncertainty in these parameter estimates (not critical to pass this section though).\n", " \n", " You **must** quantify the goodness of fit between your measured flow data and that produced by your model, booth for the calibration exercise and the validation.\n", " \n", "\n", "You **must** work individually on this task. If you do not, it will be treated as plagiarism. By reading these instructions for this exercise, we assume that you are aware of the UCL rules on plagiarism. You can find more information on this matter in your student handbook. If in doubt about what might constitute plagiarism, ask one of the course convenors." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "What you are going to do is to build, calibrate and test a (snowmelt) hydrological model, driven by observations in the Rio Grande Headwaters in Colorado, USA. \n", "\n", "**You will need to process two years of data (N.B. *not* 2005 as that is given in the illustrations).**\n", "\n", "The purpose of the model is to describe the streamflow at the Del Norte measurement station, just on the edge of the catchment.\n", "\n", "The average climate for Del Norte is:\n", "\n", "![](images/usco0103climatedelnorte.png)\n", "\n", "Further general information is available from various [websites](http://www.usclimatedata.com/climate.php?location=USCO0103), including [NOAA](http://www.ncdc.noaa.gov).\n", "\n", "You can visualise the site [here](http://mesonet.agron.iastate.edu/sites/site.php?station=CO2184&network=COCLIMATE).\n", "\n", "First then, we should look at the streamflow data. These data are in the file [delnorte.dat](data/delnorte.dat) for the years 2000 to 2015 inclusive. You can get further data from [http://waterdata.usgs.gov](http://waterservices.usgs.gov/nwis/dv/?sites=08220000&format=rdb&startDT=2001-01-01¶meterCd=00060) if you wish.\n", "\n" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "ExecuteTime": { "end_time": "2017-11-21T19:41:33.694758Z", "start_time": "2017-11-21T19:41:32.863941Z" } }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nZtmRI2mfjz5iWQMDlj1yhJ6r+TUsL2dZQ0OWNTFh2YKCus8pOvr28G00AAAgAElEQVTZfR248wJY\ndv36hreVSOjrefs2PT5wgF7PwoX0M6g5TmoqPd6+nWVzc1nW3Z1lPT1bd74//8yy58+z7MGDNPbO\nnSw7fjzL6umxbGam4rYFBSxrZMSygwfT/1ZWLNutm+z5o0dpDG9vWt68ScvNm1l240b6/9136XVv\n2kSPueW//9KSYVhW9P/2zjy+qTLr47/TQllbCy2yI6igoAIqILy4b7gho8IMjjqg4LiN7ziIIqO4\nMOqIjo7buCAu6PiKjIowoyAgIAKylqVQytoCBWSx7Euh7Xn/+N07SUOSJmnTJHC+n08+N7n3uTdP\nntyb+8s55zmnWLVBA9V77vHf51Wr2Pauu1Rvvlm1cWPPz82MGez/2Wer3n67asuWkY/NtGk8Zp8+\nkR8jJjz6KDt+882h73P++fytLo+HH1atWZNf4oABvGiHDeN7+bknf5nzpVYfXl3bv91ec3fkhvEh\nVA8fPRxW+0ph//6gmwEs1FD0TSiNKvIAcA2AVaAX97Ggbdu00VN/+kkxfbpemJWlNWbM0N1Hj2rh\nkSPaeu5cvTvX88U8nZenmD5dR996q35wzTWK6dP1op9+0jcLCvT1TZvKFRqzd+9WTJ+uZ86bp0nT\np6s4QuWc+fN1/p49+s7mzVrrhx/0ssWLtbS0VA8UF+uGQ4f0SDm/yLuPHtV7cnN1zu7deklWlmL6\ndE2ePl03Hw5+kmwrKtIXNmzQyb/8os3nzNHGs2fr2G3b9P6xYxXTp2v7CRMU06fr8/n5uvrAAX1g\n1SqtPmOG3rVypaqq7l26VL/t0kW/ueACLc3KCvpeQZk8mafFxImhtX/5ZT2SnKwpM2bofatW+W9T\nWqqamanauzePnZLCR+fOqpdeemz7khLVatVUhw5Vfe017rNzp2f7hAlcN2dO6J+rUyfenVUp4lq0\nCH1fo1L55RfVffs8ry+/nF+3e2Pt0EG1VSvVjz7iujp1VGvX5o0cUB05kjdV53+Wpqertm+vOn8+\nX48fz+POmKG6YoXqP//pESmPPeZ5X/c+4AqCp54q28/du1V79KBYcjlyhP9HVFWXL1cdO9bv/aQM\n99/Pz9CuneoVVwRvO24c+9Kuneq8eXyemal68smqN93E/wyA6mefsX1JCYXnDTeonnGGao0a1PeV\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# load a pre-cooked version of the data for 2005 (NB -- Dont use this year!!!\n", "# except perhaps for testing)\n", "\n", "# load the data from a pickle file\n", "import pickle\n", "import pylab as plt\n", "import numpy as np\n", "%matplotlib inline\n", "\n", "pkl_file = open('data/data.pkl', 'rb')\n", "data = pickle.load(pkl_file)\n", "pkl_file.close()\n", "\n", "# set up plot\n", "plt.figure(figsize=(10,7))\n", "plt.xlim(data['doy'][0],data['doy'][-1]+1)\n", "plt.xlabel('day of year 2005')\n", "\n", "# plot data\n", "plt.plot(data['doy'],data['temp'],'r',label='temperature / C')\n", "plt.plot(data['doy'],data['snowprop']*100,'b',label='snow cover %')\n", "plt.plot(data['doy'],100-data['snowprop']*100,'c',label='snow free cover %')\n", "plt.plot(data['doy'],data['flow']/100.,'g',label='river flow / 100')\n", "\n", "\n", "plt.legend(loc='best')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "we have plotted the streamflow (scaled) in green, the snow cover in blue, and the non snow cover in cyan and the temperature in red. It should be apparent that thge hydrology is snow melt dominated, and to describe this (i.e. to build the simplest possible model) we can probably just apply some time lag function to the snow cover." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 6.1.2 The Model" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We will build a mass balance model, in terms of 'snow water equivalent':\n", "\n", "The basis of a model is going to be something of the form:\n", "\n", "$$\n", "SWE = k * snowProportion\n", "$$\n", "\n", "where $SWE$ is the 'snow water equivalent', the amount of snow in the entire snow pack in the catchment. $snowProportion$ here then, is the proportion of snow cover in the catchment. We lump together density and volume terms into the coefficient $k$. \n", "\n", "$SWE$ then is the 'mass' (of water) that is available for melting on a particular day. We can obtain $snowProportion$ from satellite data, so we only need the area / density term $k$, which we can suppose to be constant over time.\n", "\n", "The simplest model of snowmelt is one where we assume that a proportion of this $SWE$ is released (melted) as a function of temperature. In its simplest form, this is simply a temperature threshold:\n", "\n", "``\n", "meltDays = np.where(temperature > tempThresh)[0]\n", "``\n", "\n", "On these melt days then, we add `k * snowProportion` of water into the system. For the present, we will ignore direct precipitation. So:\n", "\n", "``\n", "for d in meltDays:\n", " water = K * snowProportion[d]\n", "``\n", "\n", "Now we have a mechanism to release snow melt into the catchment, but there will always be some delay in the water reaching the monitoring station from far away regions, compared to nearby areas. The function that describes this delay can be called a network response function. It is often modelled as a Laplace function (an exponential). The idea is that if we have a 'flash' input to the catchment, this [network response function](http://www.google.co.uk/search?q=network+response+function&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-US:official&client=firefox-a#sclient=psy-ab&hl=en&client=firefox-a&hs=qgI&rls=org.mozilla:en-US%3Aofficial&source=hp&q=network+response+function+hydrology&pbx=1&oq=network+response+function+hydrology&aq=f&aqi=&aql=&gs_sm=e&gs_upl=2213l4483l0l4547l10l9l0l0l0l0l226l961l6.2.1l9l0&bav=on.2,or.r_gc.r_pw.r_cp.,cf.osb&fp=d48ede2c1f2a6462&biw=1098&bih=673) will give us what we would measure as a hydrograph at the monitoring station (or elsewhere).\n", "\n", "We can parameterise this with a decay factor, p, so that if the amount of water on day d is 1, the amount on day d+1 is p, on d+2, p^2 etc:\n", "\n", "``\n", "n = np.arange(len(snowProportion)) - d\n", "m = p ** n\n", "m[np.where(n<0)]=0\n", "``\n", "\n", "so here, `m` is the decay function:\n", "\n", "![](images/laplace.png)\n", "\n", "for day 150. This model will transfer a large amount of water of the peak day, then less and less as time goes by. So, a simple model then is of the form:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "ExecuteTime": { "end_time": "2017-11-21T19:41:40.448951Z", "start_time": "2017-11-21T19:41:40.428961Z" } }, "outputs": [], "source": [ "def model_accum(data,tempThresh,k,p):\n", " meltDays = np.where(data['temp'] > tempThresh)[0]\n", " accum = data['snowprop']*0.\n", " for d in meltDays:\n", " water = k * data['snowprop'][d]\n", " n = np.arange(len(data['snowprop'])) - d\n", " m = p ** n\n", " m[np.where(n<0)]=0\n", " accum += m * water\n", " return accum\n", "\n", "\n", "tempThresh = 8.5\n", "k = 2000.0\n", "p = 0.95\n", "\n", "# test it\n", "accum = model_accum(data,tempThresh,k,p)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This is a very simple model. It has three parameters (`tempThresh`, `k`, `p`) and is driven only by temperature and snow cover data. And yet, we see that even with a rough guess at what the parameters ought to be, we can get a reasonable match with the observed flow data:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "ExecuteTime": { "end_time": "2017-11-21T19:41:42.800559Z", "start_time": "2017-11-21T19:41:42.462489Z" } }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(10,5))\n", "plt.plot(data['doy'],data['flow'],'k',label='measured')\n", "plt.plot(data['doy'],accum,'k--',label='modelled')\n", "plt.ylabel('river flow / units??')\n", "plt.xlabel('day of year 2005')\n", "plt.legend(loc='best')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 6.2 Data Preparation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 6.2.1 Statement of the task" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The first task you must complete is to produce a dataset of the proportion of HUC catchment 13010001 (Rio Grande headwaters) that is covered by snow for **two years**, along with associated datasets on temperature and river discharge at the Del Norte monitoring station.\n", "\n", "The dataset you produce must have a value for the mean snow cover, temperature and discharge in the catchment for every day over each year.\n", "\n", "Your write up **must** include a fully labelled graph of snow cover, temperature and discharge for the catchment for each year, along with some summary statistics (e.g. mean or median, minimum, maximum, and the timing of these).\n", "\n", "![](images/snow.png)\n", "\n", "You should aim to complete this task soon after Reading Week. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 6.2.2 Some Advice" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You would probably want to use a **daily** snow product for this task, such as that available from MODIS, so make sure you know what that is and explore the characteristics of the dataset.\n", " \n", "You will notice from the figure above (the figure should give you some clue as to a suitable data product) that there will be areas of each image for which you have no information (described in the dataset QC). You will need to decide what to do about 'missing data'. For instance, you might consider interpolating over missing values. \n", "\n", "The simplest thing might be to produce a mean snow cover over what samples are available (ignoring the missing values). But whilst that may be sufficient to pass this section, it is far from ideal. \n", "\n", "Whilst you only need to produce an average daily value for the catchment, a better approach would be to try to estimate snow cover for each pixel in the catchment (e.g. so you could do spatially explicit modelling with such data). I stress that this is not strictly necessary, but would be an interesting thing to do if you feel able.\n", "\n", "However you decide to process the data, you must give a rationale for why you have taken the approach you have done. \n", "\n", "You will notice that if you use MODIS data, you have access to both data from Terra (MOD10A) and Aqua (MYD10A), which potentially gives you two samples per day. Think about how to take that into account. Again, the simplest thing to do might be to just use one of these. That is likely to be sufficient, but it would be much better to include both datasets.\n", "\n", "You should be able to hunt around to find the temperature and discharge data you want, but we take you through finding them in the advice below." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 6.2.3 Data Advice" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 6.2.3.1 MODIS snow cover data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For MODIS data, you will need to work out which data product you want and how to download it. To help you with this, the 'pattern' of the URLs is:\n", "```python\n", "info = {'YEAR':2007,'MONTH':1,'DAY':1}\n", "url = 'https://n5eil01u.ecs.nsidc.org/MOST/MOD10A1.006/' + \\\n", " '{YEAR}.{MONTH:02d}.DAY:02d}/MYD*h09v05.006*hdf'.format(**info)\n", "\n", "```" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "ExecuteTime": { "end_time": "2017-11-21T19:44:59.920851Z", "start_time": "2017-11-21T19:44:59.916390Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "https://n5eil01u.ecs.nsidc.org/MOST/MOD10A1.006/2007.01.01/MYD*h09v05.006*hdf\n" ] } ], "source": [ "info = {'YEAR':2007,'MONTH':1,'DAY':1}\n", "url = 'https://n5eil01u.ecs.nsidc.org/MOST/MOD10A1.006/' + \\\n", " '{YEAR}.{MONTH:02d}.{DAY:02d}/MYD*h09v05.006*hdf'.format(**info)\n", "print url" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We have some code from Chapter 4 that allows us to download data (again, remember to use your own account!)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "ExecuteTime": { "end_time": "2017-11-21T19:48:15.591157Z", "start_time": "2017-11-21T19:48:05.872403Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "########################################################################################\n", "### CHANGE ME! CHANGE ME! CHANGE ME! CHANGE ME! CHANGE ME! CHANGE ME! CHANGE ME! ###\n", "########################################################################################\n", "\n", "Saved file data/MOD10A1.A2016001.h09v05.006.2016183123533.hdf\n", " >\n" ] } ], "source": [ "import os\n", "import requests\n", "import datetime\n", "print \"\"\"\n", "########################################################################################\n", "### CHANGE ME! CHANGE ME! CHANGE ME! CHANGE ME! CHANGE ME! CHANGE ME! CHANGE ME! ###\n", "########################################################################################\n", "\"\"\"\n", "username = \"profLewis\"\n", "password = \"GeogG1222016\"\n", "\n", "def url_downloader (username, password, tile, destination_folder=\"data/\",\n", " url=\"https://n5eil01u.ecs.nsidc.org/DP5/MOST/MOD10A1.006/2016.01.01/\"):\n", " \"\"\"Downloads data from a NASA URL, provided that a username/password pair exist.\n", " Parameters\n", " ----------\n", " username: str\n", " The NASA EarthData username\n", " password: str\n", " The NASA EarthData password\n", " destination_folder: str\n", " The destination folder\n", " url: str\n", " The required URL\n", " \n", " Returns\n", " --------\n", " A string with the location of the downloaded file.\n", " \"\"\"\n", " with requests.Session() as session:\n", " session.auth = (username, password)\n", " r1 = session.request('get', url)\n", " r = session.get(r1.url, auth=(username, password))\n", " if r.ok:\n", " for line in r.text.split(\"\\n\"):\n", " if line.find(tile) >= 0 and line.find(\".hdf\") >= 0 and line.find(\".xml\") < 0:\n", " fname = line.split(\"href\")[1][1:].split('\"')[1]\n", " url_granule = url + fname\n", " r1 = session.request('get', url_granule)\n", " r = session.get(r1.url, auth=(username, password))\n", " output_fname = os.path.join(destination_folder, fname)\n", " if r.ok:\n", " with open(output_fname, 'w') as fp:\n", " fp.write(r.content)\n", " print \"Saved file {}\".format(output_fname)\n", " return output_fname\n", "# Test downloading a file\n", "the_file = url_downloader (username, password, \"h09v05\")\n", "# check file is there\n", "import gdal\n", "g = gdal.Open(the_file)\n", "print g" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can use the usual tools to explore the MODIS hdf files:" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "ExecuteTime": { "end_time": "2017-11-21T19:48:36.930870Z", "start_time": "2017-11-21T19:48:36.913913Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[2400x2400] NDSI_Snow_Cover MOD_Grid_Snow_500m (8-bit unsigned integer)\n", "\tHDF4_EOS:EOS_GRID:\"data/MOD10A1.A2016001.h09v05.006.2016183123533.hdf\":MOD_Grid_Snow_500m:NDSI_Snow_Cover\n", "[2400x2400] NDSI_Snow_Cover_Basic_QA MOD_Grid_Snow_500m (8-bit unsigned integer)\n", "\tHDF4_EOS:EOS_GRID:\"data/MOD10A1.A2016001.h09v05.006.2016183123533.hdf\":MOD_Grid_Snow_500m:NDSI_Snow_Cover_Basic_QA\n", "[2400x2400] NDSI_Snow_Cover_Algorithm_Flags_QA MOD_Grid_Snow_500m (8-bit unsigned integer)\n", "\tHDF4_EOS:EOS_GRID:\"data/MOD10A1.A2016001.h09v05.006.2016183123533.hdf\":MOD_Grid_Snow_500m:NDSI_Snow_Cover_Algorithm_Flags_QA\n", "[2400x2400] NDSI MOD_Grid_Snow_500m (16-bit integer)\n", "\tHDF4_EOS:EOS_GRID:\"data/MOD10A1.A2016001.h09v05.006.2016183123533.hdf\":MOD_Grid_Snow_500m:NDSI\n", "[2400x2400] Snow_Albedo_Daily_Tile MOD_Grid_Snow_500m (8-bit unsigned integer)\n", "\tHDF4_EOS:EOS_GRID:\"data/MOD10A1.A2016001.h09v05.006.2016183123533.hdf\":MOD_Grid_Snow_500m:Snow_Albedo_Daily_Tile\n", "[2400x2400] orbit_pnt MOD_Grid_Snow_500m (8-bit integer)\n", "\tHDF4_EOS:EOS_GRID:\"data/MOD10A1.A2016001.h09v05.006.2016183123533.hdf\":MOD_Grid_Snow_500m:orbit_pnt\n", "[2400x2400] granule_pnt MOD_Grid_Snow_500m (8-bit unsigned integer)\n", "\tHDF4_EOS:EOS_GRID:\"data/MOD10A1.A2016001.h09v05.006.2016183123533.hdf\":MOD_Grid_Snow_500m:granule_pnt\n" ] } ], "source": [ "import gdal\n", "target_vector_file = file\n", "modis_file = 'data/MOD10A1.A2016001.h09v05.006.2016183123533.hdf'\n", "g = gdal.Open(modis_file)\n", "if g is None:\n", " print 'error opening file: HDF4 problem with GDAL?'\n", "else:\n", " # note this has changed in collection 6\n", " data_layer = 'MOD_Grid_Snow_500m:NDSI_Snow_Cover'\n", "\n", " subdatasets = g.GetSubDatasets()\n", " for fname, name in subdatasets:\n", " print name\n", " print \"\\t\", fname\n", "\n", " fname = 'HDF4_EOS:EOS_GRID:\"%s\":%s'%(modis_file,data_layer)\n", " raster = gdal.Open(fname)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 6.2.3.2 Boundary Data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Boundary data, such as catchments, might typically come as [ESRI shapefiles](http://en.wikipedia.org/wiki/Shapefile) or may be in other vector formats. There tends to be variable quality among different databases, but a reliable source for catchment data the USA is the [USGS](http://water.usgs.gov/GIS/huc.html). One set of catchments in the tile we have is the Rio Grande headwaters, which we can [see](http://water.usgs.gov/GIS/huc_rdb.html) has a HUC 8-digit code of 13010001. The full dataset is easily found from the [USGS](http://water.usgs.gov/GIS/dsdl/huc250k_shp.zip) or [locally](files/data/huc250k_shp.zip). Literature and associated data concerning this area can be found [here](http://water.usgs.gov/lookup/getwatershed?13010001). Associated [GIS data are here](http://water.usgs.gov/lookup/getgislist?type=huc&value=13010001), including the [watershed boundary data](http://water.usgs.gov/GIS/dsdl/ds573_wbdhuc8.ZIP).\n", "\n", "Data more specific to our particular catchment of interest can be found on the [Rio Grande Data Project pages](http://txpub.usgs.gov/USACE/resources.aspx).\n", "\n", "You should download the file [Hydrologic_Units.zip](http://txpub.usgs.gov/USACE/data/water_resources/Hydrologic_Units.zip) or get this [locally](files/data/Hydrologic_Units.zip). Obviously, you will need to `unzip` this file to get at the shapefile [`Hydrologic_Units/HUC_Polygons.shp`](files/data/Hydrologic_Units/HUC_Polygons.shp) within it." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can explore the shape file with the following:" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "ExecuteTime": { "end_time": "2017-11-21T19:48:52.308504Z", "start_time": "2017-11-21T19:48:52.032271Z" }, "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " POLYGON ((-883742.2919 140738.5877,-883617.1438 140273.0754,-883558.065400001 138641.496099999,-883312.183800001 136744.2009,-883567.236500001 134978.387700001,-883268.2369 134859.253699999,-882969.8869 134740.2016,-882832.622199999 134477.689200001,-882617.332699999 133803.8114,-882102.996300001 132145.602299999,-881968.4175 131832.657,-881729.2895 131563.9354,-881380.5469 131442.1121,-881135.7642 131275.1522,-880648.932700001 130890.807,-880819.038899999 130595.599300001,-881035.9889 130353.5963,-881509.634199999 130075.569499999,-881936.479599999 129744.363399999,-882123.4981 129144.3751,-882192.5393 128843.0372,-882025.1153 128222.5222,-881839.510399999 127906.6768,-881538.0656 127838.5485,-881129.890900001 127865.603800001,-880616.401 127937.694800001,-880374.9497 127719.955399999,-880099.931299999 127195.0175,-880028.568700001 126682.068399999,-879563.9399 125026.900699999,-879115.3749 123983.2786,-878683.0272 123551.2005,-878241.002699999 123271.1995,-877757.6117 122836.292,-877825.882099999 122534.420700001,-877903.0264 122081.274900001,-877870.0375 120908.967599999,-877224.6482 120617.1656,-875811.7007 119517.5812,-875501.752 119601.022700001,-875122.977700001 119986.2993,-874020.7444 121448.989600001,-872786.479800001 122548.1558,-872473.928 122682.587,-871065.591 123262.524700001,-870662.045299999 123239.0101,-870323.1117 122914.0831,-869054.011499999 121975.435799999,-867726.2466 121186.0222,-866635.4934 120715.9757,-866279.5098 120695.135199999,-865869.849400001 120722.386399999,-865346.1833 120997.313899999,-863959.1686 122087.1503,-862853.905099999 122735.6237,-862558.2676 122566.080399999,-861897.827500001 121662.574899999,-861498.2733 121537.615,-861137.6776 121618.399800001,-860648.216 121284.5594,-860274.541 120703.227499999,-860142.9438 120339.4738,-860023.292 119772.766899999,-859863.386299999 118135.2323,-859810.624600001 116401.892100001,-859890.7481 115897.8353,-860170.839299999 115456.007099999,-860543.6294 115172.2247,-861837.0659 113924.042400001,-861959.6251 113575.35,-862637.0845 111528.2952,-863211.821 110390.9352,-863480.872500001 110152.239800001,-864637.7127 108641.953400001,-864704.8013 108340.3278,-864681.164899999 107880.8267,-864518.0942 106294.004899999,-864153.363399999 104695.4484,-863797.081599999 102944.7665,-863432.596 101346.311,-863204.522399999 100874.8215,-862236.742699999 99139.6262,-861306.4241 97609.7084,-860694.1346 95895.250399999,-860669.4399 95435.6918,-860411.922 93741.645,-859812.842399999 91773.3497,-858991.896199999 90147.8089,-857910.249299999 88609.5668,-857829.5371 88249.0956,-857737.797900001 87378.516,-857947.092499999 87005.271299999,-858090.365 86643.635299999,-858490.3369 86506.0645,-858791.321599999 86574.413799999,-859096.2588 86592.032,-859403.831900001 86558.7817,-860066.7753 86546.741599999,-860382.238500001 86361.314,-861944.571 85739.275699999,-862343.911900001 85864.475,-863782.561799999 86507.4612,-864080.2421 86626.3877,-864796.4549 86566.1457,-865324.6362 86240.7298,-866660.3134 85147.7596,-867814.798900001 84553.0703,-868121.8511 84520.076,-869619.4463 84148.7993,-869940.6307 83861.9852,-870164.123600001 83518.8604,-871761.659399999 82288.3101,-872178.6569 82108.8715,-873709.365 81179.8377,-874022.022 81045.3132,-874382.5218 80964.4594,-874740.968 80934.566199999,-875620.4505 80679.702,-876038.945900001 80500.5995,-877615.629 79625.2546,-879133.9288 78899.168,-880746.2403 78279.6899,-882189.8728 77956.7673,-883895.5107 77495.761399999,-885408.1052 76870.7327,-885725.2499 76685.924,-885892.1657 76441.1241,-886368.7544 76112.647,-886717.275699999 76234.398399999,-887265.9497 76418.980799999,-889077.0031 75913.1251,-889394.479499999 75676.8774,-891020.954299999 74855.650599999,-892584.011399999 74233.8331,-894401.851 73575.831,-896317.608200001 73025.1667,-896615.56 73144.4178,-898219.2651 73542.522299999,-898631.772700001 73464.8828,-898892.729599999 73326.8794,-899406.4726 73255.148,-900334.9856 73054.9561,-900716.34 72618.770199999,-901079.2027 72487.225199999,-901590.243 72465.6453,-902047.086100001 72492.3609,-903469.885399999 72523.7621,-904125.6746 72612.8121,-904576.770300001 72740.9715,-905386.854 74568.7572,-905509.802100001 75084.621,-905877.030099999 75767.5359,-906205.852600001 76244.5307,-906450.832 76411.2445,-906842.4047 76688.7137,-907187.9199 76860.9186,-907067.0009 78075.6097,-906983.8607 78630.3517,-907040.8203 79397.0759,-907073.314 79704.3189,-907211.230900001 79966.3894,-907399.6588 80231.8736,-907570.0166 80801.1948,-907670.5255 82587.8413,-907651.745200001 82892.0262,-907634.9013 83196.854699999,-907411.002 83539.954299999,-907190.703199999 83832.2693,-907069.2446 84181.495,-907092.9562 84640.904899999,-907421.919399999 85118.0228,-908048.612400001 86579.0132,-908186.294 86841.525699999,-908482.0747 87011.365,-909039.996 87043.252699999,-909397.9472 87013.5196,-909583.2104 87329.4924,-909655.027100001 87842.421,-909924.3849 88468.8026,-910235.419600001 88384.8893,-911901.7106 87718.4044,-912459.5966 87750.5238,-914264.785800001 88211.4452,-914718.6306 88288.5221,-914961.7446 88455.342599999,-916389.997300001 89301.194,-916577.932399999 89566.4637,-917511.507200001 90129.4777,-918111.4823 90317.2574,-918523.6362 90239.3375,-919473.9537 89632.5748,-919742.874 89393.7335,-920243.5294 89524.537799999,-920535.4318 89744.7453,-921479.3091 91020.973099999,-922358.0054 92547.7463,-922642.0287 92920.3265,-922776.155099999 93233.516,-923774.1491 94461.529,-924105.478800001 94888.104699999,-924475.2366 95519.9403,-924401.8539 95923.0079,-924512.318700001 96641.8855,-924951.902899999 96972.687799999,-925756.1251 96255.5795,-926447.0504 94870.9266,-926945.441400001 94187.4514,-927835.033199999 92865.2761,-928053.025800001 92623.0952,-928631.3661 92300.6677,-928935.8379 92318.2488,-929768.7806 93740.5578,-929905.706599999 94003.0079,-930148.704600001 94220.6556,-930389.756 94437.661699999,-930840.881100001 94565.7075,-931142.1951 94634.225299999,-931616.543299999 94356.1739,-932025.6702 94329.360099999,-932974.9804 95503.6466,-933204.259400001 95923.8025,-933595.5064 96201.4174,-933763.088099999 95956.6654,-934066.164 95973.8615,-935827.0307 96330.6285,-936227.568600001 96455.384099999,-936859.5711 96949.9136,-936993.757300001 97263.4097,-937705.499500001 99034.408299999,-937890.823100001 99350.317399999,-939202.6513 99528.0221,-939507.540200001 99546.069599999,-939958.3884 99673.765799999,-940292.6043 100049.366800001,-941913.039899999 100194.391100001,-942321.4147 100167.1642,-942620.073899999 100286.179099999,-942909.963300001 100557.407500001,-943232.8454 101135.407299999,-943684.8506 102993.5211,-943252.769300001 103426.3607,-942130.110300001 104379.081700001,-941769.779300001 104408.7882,-941059.950300001 104367.9245,-939429.1457 104426.2018,-938956.7491 104653.2246,-938885.777100001 105005.3102,-938299.7985 107210.134400001,-937802.820699999 107893.996200001,-936600.126499999 108434.9783,-936383.5351 108676.6581,-936315.134299999 108977.8375,-936193.8212 109327.207,-936378.834100001 109643.5065,-936567.007300001 109908.532500001,-937513.091600001 111133.645500001,-938213.094799999 112242.555299999,-938044.880799999 112487.5655,-937776.525900001 112726.732899999,-936569.658 114234.1403,-936140.238 114616.349199999,-935920.649900001 114908.8937,-935328.3533 115485.1494,-934907.053400001 115715.137499999,-933604.5097 117115.5864,-932305.527799999 118464.9619,-931371.2929 118767.212200001,-930858.798599999 118839.4264,-930452.5865 118815.7183,-930050.1303 118741.249700001,-929751.3994 118622.6172,-929459.5548 118401.9344,-927898.3391 117242.847100001,-927543.1131 117222.0452,-926627.3846 117220.123600001,-926156.806700001 117447.105599999,-925840.3653 117632.555299999,-924656.8968 118734.4088,-924491.265699999 118979.068700001,-924061.387399999 119361.334799999,-922271.9748 120377.161900001,-920805.2268 121106.430400001,-920069.291 121521.6338,-919898.826199999 121817.0231,-919777.625399999 122166.558700001,-919750.4691 122622.589500001,-919593.713099999 123580.384099999,-919068.3686 123855.347899999,-918585.676899999 124285.276,-918587.7249 125099.5305,-918399.873 126615.3199,-917904.6077 127248.2257,-917687.0415 127489.749600001,-916526.5185 129051.134299999,-916460.1603 129352.622300001,-916203.5513 130253.6644,-915881.8379 130540.3665,-914367.5064 132080.9213,-914168.693700001 132883.905200001,-913928.636299999 134396.4663,-913761.5743 134641.1197,-912133.760500001 135513.648499999,-911858.3256 135853.812799999,-910966.317600001 137226.6931,-910170.633099999 138656.8159,-908958.331599999 140265.6932,-908638.925799999 140501.2436,-908321.773800001 140686.721100001,-906751.264699999 141460.658600001,-906389.9515 141541.5024,-905728.385 141554.267200001,-905334.6198 141327.851600001,-905101.5973 140958.350500001,-904796.347100001 140075.407400001,-904192.124399999 138208.322799999,-904009.858899999 137841.466399999,-903722.865499999 137519.4045,-903427.6906 137349.592900001,-903124.628799999 137281.303300001,-901164.897 136862.268,-899500.2952 136613.361199999,-898382.5085 136599.4318,-898120.6589 136737.161800001,-897941.8795 137184.679199999,-897768.9069 137530.8928,-897197.383 137752.112400001,-896894.3572 137683.6285,-895605.0375 137100.2711,-895309.713099999 136930.7524,-894119.093499999 136404.040200001,-894092.5086 136860.501800001,-893964.829299999 137311.082699999,-893763.1998 139029.3158,-893733.103800001 139536.148399999,-893353.088 139972.509500001,-893183.241699999 140267.951099999,-892966.101399999 140509.6302,-891715.9967 141862.3203,-891194.5251 142086.351500001,-889438.335200001 142544.225,-887851.3211 142706.849199999,-886076.6285 142603.8631,-885787.0689 142332.9487,-884527.123600001 141241.8575,-883742.2919 140738.5877))\r\n", "\r\n", "OGRFeature(HUC_Polygons):2\r\n", " HUC (Integer) = 13010001\r\n", " REG_NAME (String) = Rio Grande Region\r\n", " SUB_NAME (String) = Rio Grande Headwaters\r\n", " ACC_NAME (String) = Rio Grande Headwaters\r\n", " CAT_NAME (String) = Rio Grande Headwaters. Colorado.\r\n", " HUC2 (Integer) = 13\r\n", " HUC4 (Integer) = 1301\r\n", " HUC6 (Integer) = 130100\r\n", " REG (Integer) = 13\r\n", " SUB (Integer) = 1301\r\n", " ACC (Integer) = 130100\r\n", " CAT (Integer) = 13010001\r\n" ] } ], "source": [ "!ogrinfo data/Hydrologic_Units/HUC_Polygons.shp HUC_Polygons | head -89 | tail -15" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This tells us that we want **HUC feature 2** (catchment 13010001).\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can produce a mask with `raster_mask`, but in this case, we need to use a function `raster_mask2`:" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "ExecuteTime": { "end_time": "2017-11-21T19:48:59.114814Z", "start_time": "2017-11-21T19:48:59.100025Z" } }, "outputs": [], "source": [ "import sys\n", "sys.path.insert(0,'python')\n", "\n", "from raster_mask import *" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "ExecuteTime": { "end_time": "2017-11-21T19:48:59.914586Z", "start_time": "2017-11-21T19:48:59.878368Z" } }, "outputs": [], "source": [ "m = raster_mask2(fname,\\\n", " target_vector_file=\"data/Hydrologic_Units/HUC_Polygons.shp\",\\\n", " attribute_filter=2)\n" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "ExecuteTime": { "end_time": "2017-11-21T19:49:01.620951Z", "start_time": "2017-11-21T19:49:00.991945Z" } }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.imshow(m)\n", "plt.colorbar()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The catchment is only a very small portion of the dataset, so you should make sure that you perform masking when you read the dataset in and only extract the area of data that you want." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 6.2.3.3 Discharge Data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The river discharge data are in the file [`data/delnorte.dat`](data/delnorte.dat).\n", "\n", "If you examine the file:" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "ExecuteTime": { "end_time": "2017-11-21T19:49:05.691097Z", "start_time": "2017-11-21T19:49:05.567229Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "# ---------------------------------- WARNING ----------------------------------------\r\n", "# Provisional data are subject to revision. Go to\r\n", "# http://help.waterdata.usgs.gov/policies/provisional-data-statement for more information.\r\n", "#\r\n", "# File-format description: http://help.waterdata.usgs.gov/faq/about-tab-delimited-output\r\n", "# Automated-retrieval info: http://help.waterdata.usgs.gov/faq/automated-retrievals\r\n", "#\r\n", "# Contact: gs-w_support_nwisweb@usgs.gov\r\n", "# retrieved: 2016-11-02 04:17:13 -04:00\t(natwebsdas01)\r\n", "#\r\n", "# Data for the following 1 site(s) are contained in this file\r\n", "# USGS 08220000 RIO GRANDE NEAR DEL NORTE, CO\r\n", "# -----------------------------------------------------------------------------------\r\n", "#\r\n", "# TS_ID - An internal number representing a time series.\r\n", "# IV_TS_ID - An internal number representing the Instantaneous Value time series from which the daily statistic is calculated.\r\n", "#\r\n", "# Data provided for site 08220000\r\n", "# TS_ID Parameter Statistic IV_TS_ID Description\r\n", "# 18268 00060 00003 -1 Discharge, cubic feet per second (Mean)\r\n", "#\r\n", "# Data-value qualification codes included in this output:\r\n", "# A Approved for publication -- Processing and review completed.\r\n", "# e Value has been edited or estimated by USGS personnel and is write protected.\r\n", "#\r\n", "agency_cd\tsite_no\tdatetime\t18268_00060_00003\t18268_00060_00003_cd\r\n", "5s\t15s\t20d\t14n\t10s\r\n", "USGS\t08220000\t2001-01-01\t160\tA:e\r\n", "USGS\t08220000\t2001-01-02\t160\tA:e\r\n", "USGS\t08220000\t2001-01-03\t160\tA:e\r\n", "USGS\t08220000\t2001-01-04\t160\tA:e\r\n", "USGS\t08220000\t2001-01-05\t160\tA:e\r\n", "USGS\t08220000\t2001-01-06\t160\tA:e\r\n", "USGS\t08220000\t2001-01-07\t160\tA:e\r\n", "USGS\t08220000\t2001-01-08\t140\tA:e\r\n" ] } ], "source": [ "!head -35 < data/delnorte.dat" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "you will see comment lines that start with `#`, followed by data lines.\n", "\n", "The easiest way to read these data would be to use:\n", "\n" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "ExecuteTime": { "end_time": "2017-11-21T19:49:08.673996Z", "start_time": "2017-11-21T19:49:08.431385Z" } }, "outputs": [], "source": [ "file = 'data/delnorte.dat'\n", "data = np.loadtxt(file,usecols=(2,3),unpack=True,dtype=str)" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "ExecuteTime": { "end_time": "2017-11-21T19:49:09.732879Z", "start_time": "2017-11-21T19:49:09.727714Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['datetime' '20d' '2001-01-01' ..., '2015-12-29' '2015-12-30' '2015-12-31']\n", "['18268_00060_00003' '14n' '160' ..., '170' '170' '165']\n" ] } ], "source": [ "# so you have the dates in\n", "print data[0]\n", "# and data in \n", "print data[1]\n", "# but the data start in column 3 so use [2:]" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "ExecuteTime": { "end_time": "2017-11-21T19:49:12.870482Z", "start_time": "2017-11-21T19:49:12.612144Z" } }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYAAAAD8CAYAAAB+UHOxAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJztnXmcFMX5/z/PHLvLzXKKgAKKB16ACBqPqHihSTAxJpjk\nKzEmmmiuX77fGIwmGo/ExCRe8QgmJJjEK54oeCCCmggiyH0v98q1sLAL7D1Tvz+6qqe6p+fqrt7p\n2a7367Wvmanpqa3qo556jnqKGGPQaDQaTfiIFLsBGo1GoykOWgBoNBpNSNECQKPRaEKKFgAajUYT\nUrQA0Gg0mpCiBYBGo9GEFC0ANBqNJqRoAaDRaDQhRQsAjUajCSmxYjcgG3369GFDhgwpdjM0Go2m\npFi8ePFexljfXMcFWgAMGTIEixYtKnYzNBqNpqQgoq35HKdNQBqNRhNStADQaDSakKIFgEaj0YQU\nLQA0Go0mpGgBoNFoNCFFCwCNRqMJKVoAaDQaTUjRAkDjCsYY/r1oO5rbEsVuikajcYkWABpXzF69\nGz99YTn++Pb6YjdFo9G4RAsAjSsONrUBAPYcbC5ySzQajVtyCgAiOp6Ilkp/9UT0YyLqRUSziWgD\nf63kxxMRPUxEVUS0nIhGS3VN5sdvIKLJfnZM4y9ExitjrLgN0Wg0rskpABhj6xhjIxljIwGcDqAB\nwMsApgCYwxgbDmAO/wwAEwAM5383AHgcAIioF4A7AIwDMBbAHUJoaEoPUwAUtxkajcYDhZqAxgPY\nyBjbCmAigOm8fDqAK/n7iQCeYgYLAPQkogEALgUwmzFWyxjbD2A2gMs890BTFCJcAmgFQKMpXQoV\nAJMAPMPf92eM7QQA/tqPlw8EsF36TTUvy1SuKWGSWgJoNCVL3gKAiMoAfAHAv3Md6lDGspTb/88N\nRLSIiBbV1NTk2zxNO0NCAyhyOzQajXsK0QAmAPiEMbabf97NTTvgr3t4eTWAwdLvBgHYkaXcAmNs\nKmNsDGNsTN++Ofcz0BQJU5prCaDRlCyFCIBrkDL/AMAMACKSZzKAV6Xya3k00JkA6riJ6C0AlxBR\nJXf+XsLLNCVIygmsJYBGU6rktSMYEXUGcDGAG6Xi+wA8T0TXA9gG4GpePgvA5QCqYEQMXQcAjLFa\nIrobwMf8uLsYY7Wee6ApCgTtBNZoSp28BABjrAFAb1vZPhhRQfZjGYCbM9QzDcC0wpupCRoRrgG8\nsXJXcRui0Whco1cCa1whnMAajaZ00QJA44qIHv81mpJHCwCNK7QGoNGUPloAaFyhh3+NpvTRAkDj\nioi+czSakkc/xhpXkNYBNJqSRwsAjSu0C0CjKX20ANC4QjuBNZrSRwsAjSv08K/RlD5aAGhcEdEa\ngEZT8mgBoHGFHv81mtJHCwCNK2J6KbBGU/JoAaDxRLeKvPIJajSaAKIFgMYVIgu0Tget0ZQuWgBo\nPMG0BNBoShYtADSuEOO+Hv41mtJFCwCNK8RWkFoB0GhKFy0ANJ7QewJrNKWLFgAadwgTkB7/NZqS\nJS8BQEQ9iegFIlpLRGuI6Cwi6kVEs4loA3+t5McSET1MRFVEtJyIRkv1TObHbyCiyX51StN+hGn8\nP9DQgvvfWotEMky91nRk8tUAHgLwJmPsBACnAVgDYAqAOYyx4QDm8M8AMAHAcP53A4DHAYCIegG4\nA8A4AGMB3CGEhqb0YGlvOj53vbYaj87diNmrdxe7KRqNEnIKACLqDuA8AH8FAMZYC2PsAICJAKbz\nw6YDuJK/nwjgKWawAEBPIhoA4FIAsxljtYyx/QBmA7hMaW807UYqCig8EqCpLQEAWgPQdBjy0QCG\nAagB8DciWkJEfyGiLgD6M8Z2AgB/7cePHwhgu/T7al6WqVxTwoTRBxAmoafp2OQjAGIARgN4nDE2\nCsBhpMw9TjgliWFZyq0/JrqBiBYR0aKampo8mqcpBmIQTIZIAohd0Oob24rcEo1GDfkIgGoA1Yyx\nj/jnF2AIhN3ctAP+ukc6frD0+0EAdmQpt8AYm8oYG8MYG9O3b99C+lIQT7y3EVv3Hfat/o5OiMb9\nNH7+8opiN0GjUUJOAcAY2wVgOxEdz4vGA1gNYAYAEckzGcCr/P0MANfyaKAzAdRxE9FbAC4hokru\n/L2El7U7tYdbcN8ba/H1v3yU+2BNVkIlB3QCVE0HI99Ujj8A8C8iKgOwCcB1MITH80R0PYBtAK7m\nx84CcDmAKgAN/FgwxmqJ6G4AH/Pj7mKM1SrpRYEIs0VjS6IY/75DoJPBaTSlT14CgDG2FMAYh6/G\nOxzLANycoZ5pAKYV0kA/0IOWRqPRhHQlsHBg6l2t3BPGLKD6dtF0NEIpAJpakvydfqTdEr7hX6Px\nxuKttWhpS+Y+sB0JpQD4vxeWAQD2Hmoucks0pQRplVHjknW7DuKqx+fj17PWFLspFkIpAJZuO1Ds\nJpQ+WgXQaPJmH59srt1VX+SWWAmlAGhLBksN05QGev6v6WiEUgDoVC7e0ekQNJrSJ5QCQOOdEAYB\naTSeoYDpkVoAaDRF4ox738EFv59X7GZoQky+K4E1GgtaA/BOzcFm1BzUkWia4qE1AI0rwjj+6yhQ\nTUdDCwCNZ8K4KljTsdl/uAVJhdEiQX1CtADQuEIe9MMy/msFIBwcaGjBqLtn43dvrVNW51PztwAA\nNu09pKxOFWgBoPFMSMZ/TUg42GRs+PP68rTtSlwzb52xudXu+mD5fLQA0LhCHvS1CUjTkYhHjWEx\naHl7/EALAI0r5DE/LAvrdC6gcBDhl1nlfR3UR0QLAI1n9KpgTYfClPMdXwJoAaBxiXYCazo2YdBs\ntQDQuCIsg74mvCQV3uRB1ZK1ANB4RgsDTYeC389K1wEE9BnJSwAQ0RYiWkFES4loES/rRUSziWgD\nf63k5UREDxNRFREtJ6LRUj2T+fEbiGiyP13StAfy/axyphRotA0oFDDba0emEA3gAsbYSMaY2Bx+\nCoA5jLHhAObwzwAwAcBw/ncDgMcBQ2AAuAPAOABjAdwhhIamtAnDg6IJD2I+o3JeE9RnxIsJaCKA\n6fz9dABXSuVPMYMFAHoS0QAAlwKYzRirZYztBzAbwGUe/r+miMgPR1jWAfiVylfl+UskGRZvrVVW\nX5hR6gMI6DOSrwBgAN4mosVEdAMv688Y2wkA/LUfLx8IYLv022pelqncAhHdQESLiGhRTU1N/j3R\ntCuyUyuYt3bpoDLa5In3NuKqx+dj/sZ96ioNGeLeDoNpM9900GczxnYQUT8As4lobZZjnaZJLEu5\ntYCxqQCmAsCYMWM6/hXoAITgOQHgXzbQtmQS0UhUSV1Ve4xcMzvrGpXUF0b8MAEFNaQ0Lw2AMbaD\nv+4B8DIMG/5ubtoBf93DD68GMFj6+SAAO7KUa0qQMJqA/KItoe78CRkV1AGnFDCdwCE4hzkFABF1\nIaJu4j2ASwCsBDADgIjkmQzgVf5+BoBreTTQmQDquInoLQCXEFEld/5ewss0JU4YHhQ/aVM5WnMJ\noIWyd4Iau6+SfExA/QG8zPOgxAA8zRh7k4g+BvA8EV0PYBuAq/nxswBcDqAKQAOA6wCAMVZLRHcD\n+JgfdxdjTHurShSW4X1Hxq8o0IRCASAc1WG5Jn4ghGcYtKicAoAxtgnAaQ7l+wCMdyhnAG7OUNc0\nANMKb6YmaFj3AwjBk+IjbUl1WSdFIjMtAdwjbucwOIH1SmCNZ4L8mFTtOYSt+w4rqUt2AqsO3VQF\nmZksg3xVSoMwnEItADSeCfJgc9Ef38Nn75+nvF6VXX5hUbWyuiJcAoTBfKHxjhYAGlewEDoB/FoI\nNnPFTmV16S0LvBPg+YxytADQuKIUFoL5GQuvss9qNSjhBA7qVQk+YTp3WgBoXGFdB1C8dmTjrN+8\nW+wm5IXKMFAyw0CVVRk6wnTuQikAyvien327lRe5JaWLRQCEZMbklxPYjwEnHFfEH/w4d0E1zYVS\nAIiBP6DXpOQIo8MxqCag1G6GIbwoASaolyOUAkAQxoFLFRYfcFDvbsX4NYvr2blMWV2mCUhZjeEj\nLPczEHIBsPdQs9Jdf8KEdSFYERtSJFT0uUenOADgS6PSkuK6xq9IpTARpts5lAJAHrw+2qyzUbgh\nTA+JX8Qi6gdr7QT2TpjOXTgFgPQ+yIuYAo102sJzDlMD9u76Ju+1mYu21PsAwmTG0LgnnAJAejbK\nY6E8BZ6RI3+WVdcVsSXFQYXmmErb4LkqqU6dDM474Tl7oRz95MErHg3lKfCMLEQ/WB+OndtkJ7AK\n35GwAPnhh9IKgHvCdO5COfqF6QL7hXwKVSYzKxUSCm4i4bD1w4QWviuijjCdu3AKgAzvOzL3zlyN\nIVNm+lL3GUN7+VJv0JBdtiqEnh8moKbWBADtA9DkRzgFQAgdmE9+sFlpffJp61ymZj/bUkLFABvx\nwQn87MfbldUVVvwYEr75mSEAgFMG9lBfuQdCKQBkQjL+m6iaGcp+lLAIURmV+Xv0bD1Y+JHaxA9h\nr4KQCgCG7hXGZmhhe/hUjVvyaUuo29Aq0MhO4IaWhOf6Ivzp88OFovK23lPfhPkb96mrMOD4MSSI\ngT9o7rJQCgDGgF5djOX3AbsevqPKYWtZSxG0u7oduP+tdZ7r8HNWqHIWO/HR/+KaJxcoqy/obKw5\n5FvdQZtw5i0AiChKREuI6HX+eSgRfUREG4joOSIq4+Xl/HMV/36IVMetvHwdEV2qujP5wgBEeAxe\n2AYvZYONVM8tLy5XU2fA8SvNQtA1gJ113he9lRLff3qJ8jrFcxe0iLlCNIAfAVgjff4tgAcYY8MB\n7AdwPS+/HsB+xtixAB7gx4GIRgCYBOAkAJcBeIyIiuI9ZIwhGtKt85SN/2qq0cCfWaG+PsEiqBvN\n5yUAiGgQgCsA/IV/JgAXAniBHzIdwJX8/UT+Gfz78fz4iQCeZYw1M8Y2A6gCMFZFJwqFIaV+hyWX\nvUBVfwN2H7cLqrOBbt3XAMAnE5AfduywzZYUIp67oJ3CfDWABwHcAkC4+3oDOMAYa+OfqwGIlIYD\nAWwHAP59HT/eLHf4jQkR3UBEi4hoUU2NPytMGUuZgMI2kIWtv0Fle22D+T5og0ImVCx+CyvJUtUA\niOhzAPYwxhbLxQ6HshzfZftNqoCxqYyxMYyxMX379s3VPFcwxsxl+AG7Hr6zS0ESMyB4zqxSY++h\nZvO9H4PCY/OqlNcZNPt1KSEucdDOYT4awNkAvkBEWwA8C8P08yCAnkQU48cMArCDv68GMBgA+Pc9\nANTK5Q6/aVcYgGgkmHG5fnPjPxbnPigP7GftYFOrknr9QqyQ9YJfmfb9uAUPNrXlPqhAgjZ4lRJi\nwhS04SanAGCM3coYG8QYGwLDifsuY+zrAOYC+DI/bDKAV/n7Gfwz+PfvMqP3MwBM4lFCQwEMB7BQ\nWU8KgfmTircUqG9UM1DbT5uK9MgqsWsodYr6rQqSHAqlYltXufgtbJS0EzgDPwPwEyKqgmHj/ysv\n/yuA3rz8JwCmAABjbBWA5wGsBvAmgJsZY96nZS4xTUDFakCRUOXItJ+3x+ZtVFOxIuzPmYrnjnza\nE7JUbOulIqiCiHACB02LiuU+JAVjbB6Aefz9JjhE8TDGmgBcneH39wK4t9BGqoYBZhiotmW7w37e\nGhWsjFVJ0K+qLEpUmKfaA60BuCflBC5uO+yEdCUwS63CDEkaA4Ff8q41YPkg7Kp20MJ9ZWWipS1Y\nbctE0MwXpURHNAGVLMZK4NR7TeHY7+OWRLDOpB8mIL8I2qCQiaCZL0oJoTEH7VqHTgDUN7WioSUR\n2iggZcngbKLzrGG91VSsCHv7gnyVS2VgLZV2BhFx5oJ2DkMnAL7990UAUhciZOO/Jf5cJUf2rPCl\nXrekawDeL7RPPuCScQIHbfAqJUo2DLSjsaz6AIDUhQiDE7ihRX1MuP206cGhMOTEckGOrpGfD+0E\ndk/JrgTuaERs07gw3NN7D7Yor9N+2oI2OPgSBurTUrCgnbtMBG3wKiW0CSggiPh/MtcBBOuC+EE8\npn7gCroGkBYFFKzmWQi2BpB63xYwR397oOraJLUJKBiUigbAGFN28/lhD7cLzqDNYu2tCZqgl2/D\nIPsA5JaFUQNQdm1ELqCAncPQCQCyJYELqg9gwkMf4Ljb3/ClbhVdTtMAArYOwH5d1awE9l6HE0HT\nnmTC7gNQt4OeDgMNBGI5v7kfQLCuh8naXQd9e+BU1rrwtvEA1AwO33/6E/zkuaWe6wGcNAC1xKPq\npEHQBgUZuWVBFlR+oarPYsEpY8GadIZQAFhfg/zwqSJtMFRhAuJ1lEeNTd1UPCivL9+Jl5Z86rke\nIF2wH272HgklD/leu2sxAQV4YJXPY5Db6ReqTDayCTJIpzF0AkAQdA1AJfYBX+UNGOUz4cCZB2zN\neWD2eqXVex0MrWGgXlvjH/LAFUoBoMjxLZ+6IE06QysAQqUB2J3ACgwios4YD6sK2uBg72Ntg/dQ\nWLsPQJWTPmiOQRkW0IGrvVCmAbBgCtIQCwCxJ3DHx4+YeFGFEABB0wDszfEjhNHLgFgqJiCZoF3j\n9kCZkJfqCZIcDZ0AEM9dakvIAF0NBw4psF37ERMv6iAixCKEhEc7hupYePt1VZGt1L4fgKrZYZBn\n1hYNIIQCQJXQk6sJksYXOgEgTr14lIN+T1fvb8h9UA78SI0s6iAY22t6nWG3KA4jtbdGxSBrj/vx\nIvNKxbkaeh+A4oVg9vfFJnQCQEAl4gRW4SBMHwwV1GlqAIYZyOtMaf6mfd4bJWG/rn6MXV4eZD8G\nVr9n6Eu27/e1/iDiiwAIkCANnQBIm8UFXAKoaF/6oigVGoABESEei6DN4wx+e613TUfGruUouc62\nm8eLKu+Hc/Xx99Rvyyk37dG5wdr2sz1QZuaTHo8Ajf+5BQARVRDRQiJaRkSriOhXvHwoEX1ERBuI\n6DkiKuPl5fxzFf9+iFTXrbx8HRFd6lensiHOfansCazi/rPfcEr6LDUsFol43hBGuXnBVt3ooyrV\n1g9/HIReeG99jZJ6ZIL+fPhBt4rUTrmqcwHZ3xebfDSAZgAXMsZOAzASwGVEdCaA3wJ4gDE2HMB+\nANfz468HsJ8xdiyAB/hxIKIRACYBOAnAZQAeI6Koys7kg+y8ND4H52I4EVGgo6VFASmOO49HybMG\noFoA2Ks7+cjuSut3+h/FrscP5Ofj5IHqz6EKGlralAzUtYdbMGTKTEtdqpzAQfX55BxemMEh/jHO\n/xiACwG8wMunA7iSv5/IP4N/P56M0XYigGcZY82Msc0AquCwqbzfiBvadAIH6GI4oSJ80Q8n8I66\nJvN9LOrdBzBycE+vTbKQbgLyXqc9HbSXB9mPAUFuXf/u5UrqlFt2xpBeSupUSUtbEiN++RaG/XyW\n57rW7KwHABxuSZhlqq6NbEoqKQEAAEQUJaKlAPYAmA1gI4ADjDERo1gNYCB/PxDAdgDg39cB6C2X\nO/ym3YmUyDoAFeGLfqwDeGFxtfk+Hol4bqfYolMV6U5g9Vfai/bod3SNsiSWAQ8DVRk95nQH+uEE\nLjkBwBhLMMZGAhgEY9Z+otNh/NXpPLIs5RaI6AYiWkREi2pq/LNpplYCK/8XSmn1QQNQPRjGo94F\ngOrrcO/MNZbPflj6VDmBPz3QiOa2ROaD80RepqDsfAY0fl2gdNrgUJm6tR6p90FaUFeQhZkxdgDA\nPABnAuhJRMJbMgjADv6+GsBgAODf9wBQK5c7/Eb+H1MZY2MYY2P69u1bSPPy7IPxSiWyEKxNQRxo\neioItcSi3tcB5GoVYwz/mL8FjS35DZQzV+y0fFY5eP1w/HCjTi8mINvnmoP+7NXsFaum4r2+W15Y\nhteWpT32gcBpxzd1e3LI5zE4yZ/yiQLqS0Q9+ftOAC4CsAbAXABf5odNBvAqfz+Dfwb//l1m9H4G\ngEk8SmgogOEAFqrqSKGUyjoAJSYgP0IiJWLRCFo9Pii5fj533R784tVV+PWsNdkPzFi/itBXhrJY\nBEf16mx89lClfeJh36jIDdYBzA/npfd78flF1fjBM0tQ19DquS7VOF0CVbP1hA+OZRXkowEMADCX\niJYD+BjAbMbY6wB+BuAnRFQFw8b/V378XwH05uU/ATAFABhjqwA8D2A1gDcB3MwY8673FkiaEzjg\nEkCNCchWoLjL8Yj3KKBcM62mVqP+vYfczZSVXGZm3DfCXaFSA1Cx2YwfG9bI7VS5WPvbT32spB6V\nt7LT6VMXBpp6H6StNWO5DmCMLQcwyqF8ExyieBhjTQCuzlDXvQDuLbyZ6kj5AIzL/fyi7bjxs8cU\nr0E5UOMEtkcBqUWFCSjXcyYezpU76tzVryrShlIOa1U+AEDNhvO+CACf4tfX7DyopB6VJlx7ridA\nZRgoQ1k0gpZEsvScwB0J0wfAP2+sOVy0tmRD3ItqwkDtn9U7gb1GY8gPcktbel1lMeNW3V7b6Kp+\nJekv+GvEhzUkfm036RW5h1v2qXtWVN2Dfg+lqnxHiSQzd5ErNRNQh0LceIqjDpUjBhkVN4sf++PK\nxKMRz85quUl3vb4q7ftuFXEAwJij3a3oVTXgEMhMge3NPKf+mshahB+WzSXbDiirS5kAUGiWchoT\n1G0Iw8xJjNYAiojdBBRUVC5U89kFgHiU0Nrm1QSU+v0/F2xL+95r6g6vs/Wm1gSmvr8Jja0JxKPG\nY+PFPCeaM5Yvrvpgg/qQZxX45SJTYfIC1CxqFDgNCeo2hIF536iI7FNF+ASAcAJLF3v/Ye+7RalG\ntE/FDWgXIqoX9JTHop5NQDl9AB53cPPa5brGVNSKmMnt83DfiOYsrTZm1dPnb3FdF2Dcw/+p2uup\nDidUDrBvr9qlrC6BWgHl4ANQqAEIAaA1gCKS8gGkLvanB9zZlf1EtE/FzeL3/RaPRhzt9oUgD+wX\nntAv7XuvYbt/mlvl7occOUxTCIDr/uY+kkX0I0riOrtvGwDc8uJya/3eqvOhIuBHzy4136ta+S03\nz0nLe/Cd9Zi3bo/r+lXN1hOSCShIPoCcUUAdjeCc+hwo3LPY73UA0Yj3OuWH1+lBpizftQfygCVm\ncl4Q/RD1eu2XrKGoqM+sR0ktoq5Ubap8cPYUC7GoteIH39kAANhy3xU563IyAakIwwaMdNBlca4B\nBCgMNIQaQLoJKIhrAUTzVGgAfuQCkokQeW6nZcGRQ1XFzt0kD6jlMQUCgL+qckXZq1F1nlTeK3Jd\n9U3etzq11+nVXOp0KbyubxEwxhCP6SigomM+eEVtRW5MH4APAuDdte5VYiciEVKgAcjvHTQAhRqR\nG+T/qkYD8FyFBbsgUVX/5r1G6OcR3SsAePMf+XHpZK3Cq7XGKTDE6wp3QUL7AIKBuAmZQ1mQED4A\nFQOevY6p72/yXKdMhLz7GXJdD3E+inWt5HNYpkQDUNsRe1SNKhv7NU8uAJDqc6uHUdaXZHJSlX5E\n16jSAJIMKNNRQMEkgOO/pAF4r8suAFSroFElJiCrLTcTRZs8Sf83HlUwuDLrq9dcQOkagNoTZQoA\nD/ZrP2a+cpVex1Wnc6YiCqipNYGag804wPMfaQ0gINzx+REA1El5lajMVWSvQXU2QhUmIMuDnKWu\nQge2J75xuvney4Mn/1SFBiA4eWAPAMDQvl2U1QmoF5RmDLuiZ+XMYWo2l7FkK/VqhnQo86LxCN5Y\naWSmXbfbSH+x71Bwws5DLQDETX3rSyuK3JJ0yAwPVOED8FcDiBApWFsgRwE5feuufiLglsuOB+Cc\nYiJf5P9fHvW+k6mo7VvnDAUAjPK4I1p7aQCqNmBR4UcBrPeK59XoDqdMhQZg1+7udZnR1g9CKwAY\nA/bwHOwb9hzKcXTxKIUooGiEvM++8tYACquXkLK9ehEA4jJcNXqQGc3hBdGPWMQf34bq+spEHhtF\nIYwq0l8D1lm7PyYg7wJP9W53KgndOgAZkdd9QI+KIrckHXEzqnEC2z97r7Nn5zgmnnYkAGP2qdIJ\n7NQ+UVRo24nIDNtsTiRgbGldOELDGTeslylQvCA0ikhEnbPfWr9aVKS/kFEV/iprnqpNQPEoKYkC\nigY47UxoNQAA+OIoY0viSWccVeSWpCPuOzUrgVnWz67qTDLTTBVVYAKyagBZjiuwXgIwa4WRguBP\n73pbDQwYM1cVMzr7SmDVNnvVAmVbbQMA4MON+5TU58eQ6HWBlf2UxSIRJRpAJMAaQKgFgLmxRwDj\nQMUDrKJt9ipU+IAZS6nxURXrAOR4bicNIMt32SAC5m8yBq2n5m913T7xfwmGVnHKwB644Hj3W5Ye\nbjYWQomVq6oHbNX1Ve830qWoWkMSjaj3AXg3Q1p/H4uSkpXAQsj/+KLhnutSTagFABEhQsHao1Ng\nmjx8cAKrWlsgBCgRIcm8OR7/KyUyy6r1FPgvIkT4x/XGvkViL183iK6JcSsSIccVy/ny/5438uLU\n8xQOj82twg4POans6wBUz2m+Ps7QkieOPFJJfWUK/CiALQrIdt8cai5stbH9tlOR5tyo16j43OHq\n9zj3SqgFAGDMXgOoAKQ0ACXrAJzr9lqnMG2qMGM8s3C7+d5JALj2iRBw/BHdAAD9upW7bl9KAxBm\nL2/CWWxx2cwd04dbErjq8Q9d12dH9T3dvZM730kmVPhRAOs9Z79v7pyRvq9ENuyRZowx8zp5Qdw7\nFfHgDbfBa1E7IS62mL0GjaTbAc+B9GRwnqsEAzNNQEITUGV2yKYBuPEBqNjBa1ddk1GfEHoR74vf\nAGs0zE7+P1SgeqVxXGyD6cMeuV7ItoBwX6H7R9vatL+hFS8srnbbNBMxiYtFIjh3eB+M9Bjyq5Kc\nAoCIBhPRXCJaQ0SriOhHvLwXEc0mog38tZKXExE9TERVRLSciEZLdU3mx28gosn+dSt/CMXLMJkN\ntU5gz1U41imcwBHFg0M2W66bKKCIgjUV1/3dSP1cw0OHI+Qt9HVQZScAwNA+aheACVRfc2GzVyXk\n/dgS0l5noaGmfk0ExX0SjRiJBL2mTldJPhpAG4D/ZYydCOBMADcT0QgAUwDMYYwNBzCHfwaACQCG\n878bADxnHI7RAAAgAElEQVQOGAIDwB0AxsHYTP4OITSKgrDpEgUuFYRlVqPECWzUcfLA7p7rkuuM\nSLNho0xN3Y4mIP5aqEmWoMZEJUw1ZvROxFvk0zVjDZv6MMUrgAWqncAxxesAVLXOuhDMWmuhu/7Z\ntaayaARHKggRF/dJhMiILAqQzzGnAGCM7WSMfcLfHwSwBsBAABMBTOeHTQdwJX8/EcBTzGABgJ5E\nNADApQBmM8ZqGWP7AcwGcJnS3rgg4tGW6wfW/CbqooCG9+vm+H1dQysONBS2PF32AaiOpspWTaGb\n9xABxO9yFYOi0HaiEVKyolpZOmifsoEKYorXKyjbryCLCajQ6Et7k84YWokje3Zy2zQT0a5ohJSZ\nDlVRkA+AiIYAGAXgIwD9GWM7AUNIABDbOA0EsF36WTUvy1ReVCIB9AHYN7lQVV+mwea0u97GyLtm\n511fayKJRFL2Aai2Dzs5gd3VJYerqhhzxKDiNUJEDFzKVsQ69E2laTNmZrJUdI0VTYKzmYAKPbX2\nnsWjESUL3xLStS5ZAUBEXQG8CODHjLH6bIc6lLEs5fb/cwMRLSKiRTU1/m+UbaxiDc4FAWwCQOE6\nAFUbcY/79RyjPpsAUDXgdC7znmtHRqWTWvQ1HiVP5hAxBqgSAE6ovK1NDcBHIe8GiwnIdj0K9wFY\nfx+LRNBiq3NXXRMu+P08VO9vyL9euwYQoPEmLwFARHEYg/+/GGMv8eLd3LQD/ipWiFQDGCz9fBCA\nHVnKLTDGpjLGxjDGxvTt63/cLBEFzglsWRWrwgTEX1UtSKzlm6HbfQCqZja9uziFa7qv29RQFFxn\nkjQAL4nR5IVlfqFyYiOusTINQFHTPtiQmiR61QDst1hZjNI0gBcWb8fmvYfx9Efb8q5WFvYvL/kU\n22sbA+MIzicKiAD8FcAaxtgfpa9mABCRPJMBvCqVX8ujgc4EUMdNRG8BuISIKrnz9xJeVlQiFLz9\nAKwagLr6VE82hUaRymfjvc5BlZ2UDlwMak1AQusp82geMLUyRdfkQGO6D0elpSGmWMirmnTdMzOV\nWdPetmXb6wprk20kiEfTU0EU6lgGJBOQNNr+5o1gZATNRwM4G8D/ALiQiJbyv8sB3AfgYiLaAOBi\n/hkAZgHYBKAKwJMAbgIAxlgtgLsBfMz/7uJlRcXwAQRLBKh2AqvadMSO0ABUmlgyLcxz7wNIRSup\nOJfiDMajEbS2ua+PMWY4qBVdk5Wfpqyy1/MU0yrXAsQ8bmdoN5n48czZ23a4pbCVwPYmGT4ABT44\nYQKSrvX2WvervlWSMxsoY+w/yKypjnc4ngG4OUNd0wBMK6SBfiEuaxAXgrW3E9gtZkSMQidwVLFA\nljUAhbIUcQfzQCEkmX/2/95dywD44wNwa0Z7YPYGy2c/njn7/Rcr0OaZngqCMpr5Cmm+HAWUKisR\nE1BHhUmDYuB8ANK9ocQJzF+/cebRAIDPnTrAc52AHAaqLkQwU2I5LzX7saG8Ch+AfXg659g+ruvr\nVp6ay/mxf7JYB+A242b6anT1z5zdP1GogLWPA6qigBZv3W+0RxIAqjdlcktoBYAgQupjpr0iPxwq\n1wH06VqOys5x9OpS5rlOIPWAmT4ABZMaQwB4r0eGiNRFe/E64tGIJ41H1kwE/5ES4hWKmPUDwIxl\nRmzFW6t2ua7PjlcNoD2eMfv1LTRtt2MyOI8moGSSYeYKY0vIKBHGHF3J/1cwBh0tAALpA1AbBipH\nnKjsr3i8oioXWmWIynJdNf+datOS14VgSe4DUIXclqo9xt6zYg9aFQgh6lboyde0T9eydvEBCK0l\nX5w0AK9bYIp9FACgUzxqCiUVvgUVhFYAyDHsAdHGTLJlOHSD7O9Q6fNIWwimzATkuRoTc+ctRf0W\nVcQi5GmzEMbU+mTk+ySqOGYfMIR9zMMipjnSPgLD+nRVtCeFtS32tsUL3HPAyQeQyQSU760ua3mR\nCJk7q6nYaEYFoRMA4uE4a1hvAMFcCCbf2EqygUr+jr2HmlGlaA/kNB+AiuyYEXKMXnHrp5HDLdWc\nS+NVCCq3fTaik4zz9tS3xnpul6wBqHTKC0RSPbd1HmxKReSouhb2pnjVAOxtikcjYMxab6FC2y6D\nzJxKAZl1hk4AnH5UJQZVdsJXzjDWpFEgfQCp9yo3hRf37sLN7qNv5QHPrgGouKeNPPve6xGIGVdE\nwbaVQEoQebWJy1FA5x3nfcGjPKOMKF60BXjXAGQMM5/3NqVpAPaFYJKbPZ9r7yQAAG/7INv7KYSz\nqqR6XgmdAEgyZm4GD2S2ORcTqxPYe30q8860OcyGhA/A7eAg79ykOgooJQDcCyj5/hDvRHpkt31W\n7gOQBhTVi7YA41pHFCXAi0RU7XNhxd7fEwekkh/m0+70dQDGefTiB0jPUGp9LTahEwAM1pMfTB+A\naiew8arippPbFpNm1/bvCuGp+VvM96p3aBMPccTDvsVOA2ncoyrPmNo0EBYTUERt4jZApDJW40gn\nqKnHXkcd315TcPLAHub7fIRhRg3AIW1DvovsRLy/ePbuvvJkAMHZHjJ8AkCyvQLB9AHIs37VTmCv\nyO0RM02vAkD+WUYNwOVpENpehAiHm9vw3MfbCtb4ZCEs+wAAD3HxjFniwr1idQIbr15NXnLq7Xg0\nojQFthKHvK2OepsAsCSKy0OVdloJbPxW0nqF2M6z/eK3j33N2BdrQI9OiEdJawDFwn7jbao5jNeX\n7yxOYzJgMQEpdgJ7xaIBSLnxAQ/mEJtfIVef8xnYenSKY9IZg9GvewWvF3h+UTV+9uIKzF69u8D2\npd7LUUBAfgOLY51MjUlOIAsp0wns8d5ZL4WRRiLeN8ERbKo5jKXbDyg3vcZs+wwXuqI+XQPgJiBJ\nA6DCxn8s3XYAALBD2u6zUzyKhgI3rPeL0AkABn9T8KpAdSoIuxPYC/J4JyIaUitt3dW5s966F65j\nLiDpkcvPnstQEU+llZav+QHbTDEXVg3AeO/VzOK0EtgLFg0g6k0gC+Qwylgkgiip0QCEZlHf6G0Q\ntA/Ydmet/K07H0C6E7jQvFLPLDSyhspZS7uWx9DQksjr934TPgGg2PnmB+rXAaScwJWd457qssw0\n+QBhxp27nNHZU+vmqiefc5Lm6/FgbpH/32UnHwFA1gDcRwGpSgRnJ6bIByCHMEYj3I+i0K/QnPA2\nCNpvE3uKZS8awKijekoCwKqhGsfm10bT/yaVlcW8LzBTRagEQDLJsLy6Ls1ZFDRUrwOQncBXnDoA\nvT2kgnDyAZh77vqZK14WinmcE8PJKi3CkZ/AApsp+vW/Fx+HQZWGT8GrDwBgUOgCsKBqIZicvTIa\niRiL3xQKAK+rYe2/TtMALD6AfARA6v2zN5xpmoCsGkBhk53zjzecvRNOSeXfikUjeh1AMRC5VpZw\nuxwAVMSNU3A4IDY5wDpgqzUBiU2p3dcp3/jlMePckSKbs6hL/I/mtgT22MxDQH6Drl3Tk01AhaZJ\nFv3qIWlPqQU9Ln0ASWdTpIrrLe5pr3XJWlOUCBHFu1l5XQ2b0wQkfZ/P/7Le21HEY5lNQPn6L4b3\nN0JRRx9VaZZFiTxMHNQSKgHg9LA2tRpl76wpzDHoJ+JGjEciSqIl5HTQUY8pDORBRdjYUzNOD43k\n9O1abgqsHz6zBGN/PQeMMZs9N4+IDljVbi9+HzGTjlhmxB4d3xlMkTsK3PTeiQe+MhKAYcbwgqyh\nRCNGGKjKgctrpk37GNycZgJKvc9n0mN/LoQPxGICKnDzIxEGKiemUy1IvRAqAZBtT1wxmw0CYsCO\nRcnTxuN2iOBZjZcHvNRKYOOzV3PVn742ClG+SGjdroN4a5UhlO3tzefhSdrCLOXBttBmCnutPEB4\ntbNnCkZwew4H9uxkvhdmKq+TB7vAi5Cagev3V58GAGjxsKEOkD4Lt5uUCvUB3PnaastnJxMQFWgC\nEj+1mtPU5mnyQnBGvXYg2ySwLEACQNxbsQgpXwkci3pbzi/f9zFpkRXg3gR0xhBDPT7vuL6IEGFn\nXRMuffB98/uWtqTl/+azn6p9oZU8Ayu0lc99vB0AMPX9TWaZ8H/87s21BdZmkEkDcHtt5Jh9M3e/\nx5vHLgC83jsCEYjgdXJjv93Egq1p/9mMIVNmWgZuN6kXspmA8nYCi81govK5DI4PIOeOYB2JbGaA\nWIGZA/3ENAF5zDmfqs94JaRuPsNGXrhZRB7k7U5gt3Hda3cZ8ebdK+KObbIP+MJslw0GWCSAFxNQ\nj07GgDWsb1ezTDzQc9fVIJksfFEXY85tUjEsmPlmvPoApPYd0aOCbztZn/kHGbDfFyJev9FjKKS9\nd0JTe/hdY/cxOczUzXNUliUKKN97XVwDiwYQoMWnwRn12gGnB+6bnxkCAJaY8WIj7tVYVI3KncqI\nSViwcR+A1KBbKNYoIGsqCLcmXTlTpNM42pJIWhy3Ta25Bw6nFd+p7wprn0gp8N3PHmOWydsNurlG\ndg3gp5cez9vm/XpHIoSIggAC+Zx3LXc/V7Q3Q3R7z8Fm13Ua9coDc2qmLsI3m9tS94kbbSPmGAVk\nvOZ7bp02hI8qSqqngpwCgIimEdEeIloplfUiotlEtIG/VvJyIqKHiaiKiJYT0WjpN5P58RuIaLI/\n3cnVl/SyS0b0BxAciQxIPoBIRImtMGmagICFW4xMoPO5IHBbFwD07VZu1OsxGZyMk5C2awCNeQmA\nzE5gBoaPNu3D9A+3FJQlMmZR4yUB4KLfdg1gWJ8uANRtFBKLeN/QXNUYZX+2BvSoUFKvXG1ZLGI6\ngctMAZC6b9xcI6eFYCkfQH51iPtLtjBEFC2oU0E+GsDfAVxmK5sCYA5jbDiAOfwzAEwAMJz/3QDg\nccAQGADuADAOwFgAdwih0Z44Kemp7QyDcUGA1CwwrkoD4K+yecVtBIZ4kG67/EQc0UOkWUhXi1fv\nqC845YJRV3qZPJMDcpsOvvuPxWhL2sNArcd8deoC3DFjFe58bVXONonJozxgyw+0m4fZrgHEzI1C\nFAmAKHn2AahK1WAXAELbzkeTy4bcvvJY1Lyny+PpJqZChOH7P70AQA4TUN7J4BxMQIoX1HkhpwBg\njL0PwJ5AfiKA6fz9dABXSuVPMYMFAHoS0QAAlwKYzRirZYztBzAb6ULFd5zsyypz2asiZQJS4wOA\ng8MxH0eqE6I9R/VOpdSOOjiBL3/4A3znqUUF1+90jZptTuBcGsCbfC9cy25MsgYg1fXU/K052yT6\nFbWp8eb3LgZtu4ZimhsURX2pSNym6pGwyxExQNvDNgtFvt/i0Yh5T5fHDAHztjQBKWTxp9BsvaSC\nYIzhrtdW49ez1hi/s5uAAmJxcOsD6M8Y2wkA/LUfLx8IYLt0XDUvy1TerjjNLsVD/d1/Lsaou95u\n3wZlIKU2qpkpJFm69uN2KbqYzUUdBlc3TbX3z8kXU3u4xfI528xRnhVmNgEV2EYpikog+wDuf7vw\nSCAGq49CxJy71QAq4hGcfWxvzPrhuWb7vEweWhNJ3PayYfW98bPDLN8Vqhn4pQHI3SuPRcz6xEI4\nmbrGlrSyTIiIQCcfQCrtSfY6WhMM0/67OeUEjpSoBlAgTlYWlqU8vQKiG4hoEREtqqmpcTpEKeIh\nPNTchv0NwUgRIe6NeDSiZKaw/NM6s847Pz8CADCsbxdPbbMsbMlzVuSE6J9IT9GlLF0A/O/zyyw3\nS7aBQx70Nu09nGqjhzs920IwAPjngm1pv8ldp02gOAw2hZBIMpw6qCdGHNmdt8+bD2DVjnqs2WlE\n/JxzbB/Ld4VqFvbDxZobrxqAfL91LY+ZJp8uZekO65+9uCLvesW1dcoFZP7vXBlrbd9b7p0S8wE4\nsZubdsBfxY7P1QAGS8cNArAjS3kajLGpjLExjLExffuq3TTB6ZxHCwzfaw8e4WFscUVx1++vTwnS\nc4YbD3PUYUTMZ2Yn2iNbarKtit1Uk33/YfGbb50zFICzBmCPFsnmA5A1G9nRLT+A+w4VFn2ScJjF\nxaPe5k52H4B4++rST13Vl0gyi1ZiaADuB9ikRZMy6p3Et1EtVEjZB8OyaAREKnwAqffRCKGB19fD\nY8JDQZmDCUjcA7lSyKftT2xfCVziAmAGABHJMxnAq1L5tTwa6EwAddxE9BaAS4iokjt/L+Fl7Up9\nU/oMP2ipoQ82teJDPnB1LouhNcGU3ixlUWOAdfIBFJIxUR4MYw4PimCzNAvPp75MG3nLwqkxyzqA\nVml1abeK1Exwl5SP/cF3NmRtU3objVf5VunkMWzYng30JB5qWukiUR9jLG1/AWMVufv7Rh6wRLXH\n9jPWQRSqWTDb5SIiVMSi3jUA6Z7o063cTLFcEUu/NvE8Nogf3q+rZbtYUyuT2plvqg675h61Cef9\nDfmbpPwknzDQZwDMB3A8EVUT0fUA7gNwMRFtAHAx/wwAswBsAlAF4EkANwEAY6wWwN0APuZ/d/Gy\nduXGfyxOKwuaBiA/syL2uqElFSf/x9nrcca97xRU51nDepurbYV901EAFKAByD4AsVDKScBePz27\nI9hen31TD4FsG8/mBJZTDH/nvJTt2kvMuZPQE30WvMUdz/ljzQZawa+Lk/kiF+IcyoN29f5GvPSJ\nO20CcN77ucxhZWxe7XO4r8rjEQU+AKPer487CqOP6omWtiQSSZY22F99+iD07Vqes77O5TEM6ZMy\njYrzKff317Py8/c8Nnej5bMs7NfvPojd9c146ZPqvOryk5x3G2PsmgxfjXc4lgG4OUM90wBMK6h1\nCsk0u7ULgESSFVUoyHbNLlwANLYk0K3CGHAenlPY7BUwFsEIk0VKAKQ/fPlYDEx7uHSOupRFEYsQ\nDrjwoZghlry+sgwzta21Deb7bAOHLNi+Pu7ogtvjhJPju2uF9dG58R+LseW+Kwqo09mn4CZRX5vD\nNfGKLHCFCSjm0lFtMUFyf0JFLKrMCTxuWG/sqjNm5o2tiTTzXJfyGA7nserYWDyY+kxEKItG0Jph\n7GhLJDNOWJ54b6NjOQBsrDG04rnravCl0YNytstPQrMSWJbik89KDQz2Z8ZteKQq2iwCwFBldzml\nRC5AvW9JsHQB4DDQ5KUBOMyGiTu1Zq0ofGtNsz5eXaaUHPJ1yuQD2Lz3MM757dyC25CLlN/D2Qns\nhjQfABHiUco42OSqC7BqAIL1uw/i0blVBdfZZln8ZLw6JUfLB7H4EACmXns6ACNSJ5+UHtlI5bgC\nOpWltGX7telUFrVo0ZlIMmYR8oDxnDw+byOmf7gl7fh8hEo2vK7TUEEoBcBVp6ekrt3p6HVW4hV5\nyfo6nq7hd2+uSzsun3buqW/CiF++iWXbD5gDv3BsOQm6bfsa8CHfMyETYjB08p1s2deAe2euTivP\np75cPoA/vZsaxDKZgFbtqCvof+eLkwnI8bgCBm+7DwAwhJ8XDUBu3yUj+qNbRQyTpi7A/W+ty2sA\ndKrTaJc9KqawNp45rDcA4KFJI9GZD9TlCjWACJHpk2lqSabdm13KomhNsJyTu2Qy8y5td8xYhUO2\nPUO87iESgPE/TAIgfTUfAPTuYrUNenVMeUVWr0WeorFDe6Udl8/D89rynaZjbO5aI1ArHiUQGfl3\n7FrE5Q9/gK/95aOsdd45w1g5m2kwfPKDzTnbJSMGEzn01Yl90lqATAJAngHfPfGkjP+z0FQEqZXA\n2Y/Ld21FWyKJ99fXpM3YY1FyFbqZdBAAR/SoMCJj+MB/3u/mYuHmWvzlg01YvDW3+02eiOQTFpmN\nznxwHtYnlUyvS3kUhwsUSnbkFCedefhwQ2tbWtRRj86GY33LvtwBCdmu8Tu2le35CIDvnDsUH992\nkaXsFO7wD8K2kCESAOnbugGGeigze3WhzjxgY80hDJkyEws2ucuvIyPPvI6UcrzbacpDUN39emo2\n3iaZMcqiEfz5/U34yfNLC27fln2GLd6uKg+VnGeFzGJve9mIz37yAyPVspMZw05TBtVbDm0dJEVz\npP2+wJmnmdArR8TY3LV7MGTKTEtqZifE6uPFW/dbyuPRiKukZU4aQEXcmGGL67T3UAt+8cpK3DNz\nDa56fH7OOuVBXgz8Qjvb7WCSLLR93SriliSAbpBNc+I5bmhJpJ1D8W+/+ufs/XbK0HrRif3M9wdt\nA768s2AmJpwywFxZLBDaiqyVfeMvH+GWF5blrE81oREAsvqXTZVfvbPwLJnj//AeAGBmjtjgfJAH\nz7JYBOWxiGWmIUw4hQ5iE/hm5qJeAHh1qeNSjLywm2quGZta5lGIbXTuOsNBKJzcK3dkTzfcpSya\nUQOQNZryLHH6hWh5DS1teGD2egDp9809V55s+fyPBcbAvmhL9hm2U7SUqN9NyO/TH21La9/M5TvR\n1Jq0XIt1u/O/t+V2iHq3ceH//ac/Mb/7xSsr8ctXVyIbZpRSVBYAMc8CQAiWsmjE1DIaWxJp53Di\nSCPpQK6FngnG0hYMyovgmm333S0vLs/ZRqeRZkgf677SgLFd7fOL2j8qKDQCwCmfhxMn8ZWUbvC6\nOAiwagARInQtj1lsj2LwLlQA3HfVqeb7XKmv87Fl20PtOknhi3bVONOAJ3Pb5ScCyBwFJOhcHsso\nAORzYtfs+ncvdzwuF9M/3IqdfA2BfXZ46UlHWD4L8102X3pzWwJvr3JOkhePuDMB/VEIKKl9ubSQ\nXNz0r9QgL661WKNQLw3c/1iwNWc+pTaHbRENDcDbynsxIJfHIub1bmxJpJ3DfFNZJ20pxAGYPgsA\n6JNHKKlTnXbu/IJhnvxvlXeLgVdCIwDkiINs4XKFzEpu/tcnGDJlpvk5HvMehierhREywg2dBUBh\npoLO0oDYO8dio3wSktkfFHnGbRcAVXuyrwYGUhFPsoPeic5l0Yx9lwd2u5CTo4vs8q0uy8zwUHPq\nO/vs0K7ai/OWLU3AH99ej9U7nbWcWNSdE1ggD7CnDurhuh67j0CY1j536gCz7IMN+adpcVqn0L0i\nhr2HWvDt6YtcO4OFJlcej0g+gITjObzoxH45J3fMwTHfvZM0sXHhszjpyPTrIAuVKx/9b8Er01US\nGgHw4+eWmO/t9mv54/b9DciXmbawxzIFGoBsnyUidCmLOZqA7OpoLmTtxB7FYR8s8pmF2gc5WfjZ\noyXyEapiUM61wrZ7RTzjgGHRAGz1HN07s0/gw42ZI5/kXaWcfABfGp3KaSgGumxmnGppZv79C461\nfBeLELbV5n//2ZEHr/u+dGqWI7NTb7teolZZqC7cbBUS767NnPrb2QdgDILvrNmdUSDmIpX/P2pq\noI0tbY7O1fI8Vh63JZOI2yaH8qxfJMeTqdrjbFaLRgg3X3BMTm176fYD+K20raiqFNz5EhoBsH53\nahZqf5Bfvfls3DrhBAApe2pQ6GqzlYpUuk0OC7kycaO0IhZILUQBgD+8vQ7Lq63hk/mshbDnEpIF\nzKHmNsSjhItONDbbyUfVFzd+tgfm9itOxMkDu2esT04R0c22UOvBr440NyO38z3J3GFHTppnnzgA\nwJUjUwJAfJs1ukN6vmXhARiaqZyyolDkwUM2eRWK3MtrzzraUXiKtBCCB2ZnXqCY0gBS90j3Tt7z\n9bTIGkA85QRuaUumrdQ2NozJ/swkEumLQO1anh0nbTSZZHxFcubh9d4vpvxHsu3f69qCQgmNAJCx\nbwB/6qCeuFHa7s8tj7xbpTTNa2siia7lMYvq2ZPf2HsP5Z9L5HqeaE0g5zt55N30RULZ4ryFtiBH\n/QDWFAY7DjQikWToyZNy5aMBiEGi3HZtRh/V03z/rbOHoneXctQebnE8z0IDeOXms9HbZq/t170C\nXz59EB6aNDJnW2RkYeikAcgDmfAVbN2XeRYvbyRiHyCq9hzCjromrM7hCM9cd4rKzoXnFBLIwvP7\nFxzrGBtvX4y34tPMazB+w3Piy4NrL8kM6XZvYDGgyz6AhpYE3lmzJ+3crt99ENtrM/tFPtq0Dzvq\nmiwrzoF0u/8lI/rjhCO6ZW2XMAVmEwCZ/An7D7dvjqBQCgCnfOEA8L3zj/Gcg99rZIPMoMpOhhOY\n19maSGIZn61ns1sDqQH1xxcNR7/u1rj3+750CgDDDutENg2gUzzquC7hM8f2Nm3EP3txBZIMqDQF\nQG4NQMwoichiknvhu58x30cihPqmViRZKmxUpqk1gfJYBCMH90z7TjBx5EAzL1I+yOYsu2MZsA6W\nIt/Q1PfT2yaQNXy7sBO4XdAmawC50kJc+Id5Gc0NLVJCvUwRc04z1UybrgiTklyXvP5G7E/9mzfW\nmMIiH5qlDWAq4lF0LouaKRj2HmrGKzefjX9ePw5A7qSEry03IuLspq0uNgfy26t3o6k1gUeuGQUg\nJfRlhAk1WwI6u4YqKMQErYLQCIDTpEGh3CFbIAD071aOtiSzLDrKhlNOfXvEy29mrXG1FH/mD89B\nt4o4upTHcKjZeNhk81RdYyu21zZg6XbnWGTxMNpVYQD4zLF9cMN5wzKaKjKWtyVxuKXNMWd/eSyK\nhyaNspR1q4iDCKYAc+K0wT1x3nF9LTP2+VPG49Wbz8bi2y9CJELYct8VZp4dkaP+N2+kJ+U60NBq\nhpNmY9IZRwEAfjh+eM5jDza1oXtFDBvunZCmOQKGT8KJTFkjZf+AfYb4s8sMM2QhYapyffnEpQs2\n1RxO89UIZF+K/Xwuu+MSAIa28rlHPrDVmd3ZL5+/Y6RnR6xX+fN7m/DnLMLTjhwFBBizf3kCNnJw\nTzP9ee+uhsaRKVRbZMl1Yst9V+DkgSkH8pZ9DeY5chJYol3ZfIKDK519UtX7vUVvFUpoBEAfSeXM\nNPMSC6/G/2FeXnU6LVqyz4L+/P4m3P/WOmwv0LknbItGvHRrWt3zN+3Dub+biysf/a/j7/fyyIJM\nqmZbglnsl3JfnnLIe3KouQ3H3f4GVn5anzYrEthni9EIgTFkdfI181m7zBE9KnDa4J5pZhwA+A3X\nXtZSda8AABDFSURBVJyobWhBn665TR9XnT4I7/zkPPx4/HB8cZRhh8+k9R1qbkO3inhGdb5Xhoiq\na55c4Fgu/xe7QLnu7CEAgNtfWYmag81IJBmuevxDDJkyM6NjWR7Es5lhnNiXwYwo1jM88Y3T09oo\nJhTPLNyGlZ9ar2uuhXLyjLhf9wpLOPYjBSY5XLJtP+58zRAc5Rk0epkfjz8OAHDz0584Xutc8Ruy\nJgoAV/EkbpscNAux3iBbau/BvTqboc8y1R6CANwQGgHQ0JLAaYN7mrNKJ0RO9vqmNry+fEfG2bVg\n36EWnDigu7kNH4CMeb7P/V3uJGWySi7MGL26lKG5LYkhU2bilSWp9L72VaR29h7MLgA622bxx/br\nir9fdwYAYLpDXHetNFjkuxJUaCzvrNmT2dyQSDrOrDNxbL+U/dUeDVTX2Jq3c/HYft0QiRCO5/bc\ng01tjkv7DzW1ZY0jj3INxU4mP4A8CNqFiuwAP+Ped3DMz2eZ1/kf87c41icLALuTW9iqf/3FUxzT\nX+w7nB5+eKi5De/ytCG5bN0C4Q/KtQd03BY4sODWVELhP/C1DIBhhskViPDFxz4034uZthzm+ZUx\n1nBiObzYnhq8LZE0U5icO9y6+5nAHpwQiZDpaLeHzYotTDNNDgTfsQVnAMCCTe2bJT80AqCxNYEe\nneKOs0rBwJ6dcPrRhn34+08vwZWP/jdjegfGDFNRS1sCI47sjhe/dxYAYOeBzINjrtwhYkZ+8sDu\n5mxaHsCdZhuZ2Mtvwkwz4h+Mt4YgNrUmLKseX1tmXSUsC7aPt2QWPkOkiBF5MVImG2xzazLrql0n\nfsRNN9c8ucAyMNY3tjqavLIhzFmn3fU2TrojfY+iQ81taamfnTjSYYB1ikcX5jwgv01KBGK2a0do\nh7/6wkk4cYA1zv1v152B2684EdeMHYwPp1yIy046Aicd2R3TvzUWgLPJSPbXOPk8AOD846079X3K\nzRZ7Djan7d8snwP7xKtf9wr8z5npKbu/8uf5+Oz92SdMshlSpGR+/sazzDInf4TQsP724WZTC0gk\nGY697Q3zmMe+Pjrj/xS/v+IUw9e1u94QJHLodtWeg+a6l1wCAAD+O+VCy+eFW4x8Te1FaARAXWMr\nupbn3sXphe+ehcG9Ujl4Mtnk/vofMWMwHoaRgysRj1LWQfrRuVUZZ8KMMbzAN4j46phUWgX7TN2J\nT7alD8i5NAC7H2TLvgbEohHcfoWhlv7gmSWYvXo3hkyZiSFTZuLP72fOby7zW2nF8UUn9jNNLBf+\n4T2s2Vlv9n/HgUYzb05FHn2UETPOJdsO4BevrsLLS4zzdqCh1YySyheRqVJw078Wm07YrfsO4z9V\ne3Pu/woAL998NgDrBurH3vaGxSf07MJtZm78l276jGN0zaUn9c/4P7Y43FtC0zh5YPqCowE9OuHb\n5w7jjnXCE/9zOmb+8FycOMCY2d8zcw2+8sR8bN13GGt21qOuoRV7D6YG8EzC9JFrRmH8CakcOWMk\np/rou2dbjhVadKb7+O4rT3YcdHfWNWHIlJmOz8v762twuCWBaITw6NdSv+1SHsPauy/D5accgVsn\npJtXRKDBn9/bhAkPfYDd9U045uezzO+nfXNMVh/SLz83AhvunYBHeXsrpa0nN+89jIaWNlz0x/fx\nc57fyp5o0omBPTuZPi5x79wzcw1eWNw+aSFCIQBufWkFNu89jG7luQcHIsIHt1yIUTz88P/+vQy3\nv7ICO+sacddrq/Hu2t2YtWIn7plpOH9EJE00Qji6dxds2H0Qc9ftwY+fXZIW0/3YvI2Yt855BeV1\nf/8Yv3hlpWiEWe4Ug/3STVZ75Jce+xAbpDwvySTDcx9vB5D5IQaAiSOPTCubNPYo872s0s9aYSTJ\n69+9HB/cckHGOscN6427eCbO3335NNNWCgATHvoAQ2+dhSFTZuIz971rlg/oXlh2TrsP4v89twxD\npszErvqmjLPWTAzv383MugoY/bzi4f/gzhmr8Nn75wFIZW/MRv/uFdhy3xVpA8+pd76Nc377Lm59\naQWmvGQMDOcc2wejj3KORHrkmvTBcFClMSE5//fzLPbrtkQSLy6uRjxKBaUwkXfHWrilFp+9fx4m\nPPQBTrvrbUyaasxmx5/QL+OajG4Vcfz1m2dg/T0T8M/rx5kahaCxJYGGljY89M4G3M2fkyevHZOx\nPZefMgCr77rU8buht85KWyl77bSFAIzZ+xXS6mTAMNU89vXTLTt7Cc6ShP263Qcx7tdzzM9r774M\nF56QWfgCYs+G1JD58k1n4/OnGc/QBb+fhxG/tGqQlV0Km4zI987//XtZThO0Cgrff64EWLurHpc9\n+EFa+dfGHeVwtDMvfe8zGHqrMTv454Jt+OcCw5497b/WdMeTpcHj6F6dMWftHszhNtRXHJKtXff3\nj7Hw5+PTQjNlwSDf8Ccd2QPXjB2MZxZuN8tGH1WJZ284E5OmphyNFz/wPgBDg/nyEymVNFs44EOT\nRuGjTbXYVd+EKXwhXDZ7d5+uZfjo5xdl/F7wjXFHY+LIgejRKW5GYWTjQIbwwUxky22/I4sJLhP2\nNQ0A8HfJEX7n5zOnlnbikWtG4QfPpFaeV+9vxDMLjfvn5guOwU8vPSHjb8tikTSfwp6DTRh7rzFY\nDZNmrIITjuiWc8WpDBHhR+OH4yEHx6sI78w2YMttFdd3/T0TcNzthinlxF++aTmua3kMZx+b/T7o\nXBbDTy4+DmOGVGJ5dR3uk6K8Tr/nHaz61aXYVd+ElZKju1+ORVp2hvXt6lh+43nDCjp/giF9uuCR\na0almUsFmaINs9GrS5lpRnv6o61ZQ5pV0CEFgNOm0Pd/+VRLKGguiAiPfX20JSmWnae/M87iUxgz\npJc5+Nv56aXH4/63jI1dxv56Dq4+fRD+nUHNu1oyAQHAb750Ku78wklYUV1nmnTOHNYbS395MUbe\nZVW55cE/H+b99HwAVidX7y5lZijszy8/AV8dcxS6VcTy3nIwEiFHzeMXnxthSVENGCsthdkpX8QK\n4xnfPxvHH9ENBCOL5p/mbsCXTx+c49cO7eXd+tUXTsLlpwww91z+xedGpC2iy4fPn3YkdtU14V4e\nIjhiQHes3lmP0wb3xI94NEoh5DIl3FGggAKAmy44Bicd2R2nH12Jn724Av27l+Nf3Gn/r2+PK3h7\nybJYBF8aPdBxH+K/8eCCXIiw3HFDe1sEAABH/8y9X8wcEZaJd//3s9hUcxjHH9ENja0JDK7sXLDW\naOfDKRfi//69DH/4ymno3aUcD76z3jIxLIR/Xj8O762vQTxqWBT8hto79wQRXQbgIQBRAH9hjN2X\n6dgxY8awRYuyRxZkYkV1HT7/p/8AAF6+6TMYlUHlzgZjDG+t2oVTB/VEIslQ19iK2sMtGNqnC7qU\nx9KcPK2JJP7v38vS0iz/4erTcNXpgyyJ45z4xedG4Pzj++KYDDMVJz7atA/3vbk2zaF3wfF98cev\njMwaipaJg02taGlLgsFdBkQ7CzfXYvHW/fje+cegsSWBwy3Gph39uhVm+vGLlrYkXlnyKa46fRAP\nXWXYUdeEgVn2Y8iH425/A+WxCFbc6WzeKJT6plbsqW/CPTPXoOZgM7427ihcMuKInOkK8mXHgUYM\n6FGRcVesfNr35spduPr0Qaje34hBlZ1c1/X4vI347Ztr8Z1zh5oROj07x3GgoRVfGTMI933pVKV7\nIHc0iGgxYyynGteuAoCIogDWA7gYQDWAjwFcwxhzDHHwIgCKSWNLAnsPNePmpz9B7y5lmPbNM0BE\n2LL3MM7//Tz06VqGvYdacGSPCvxswgmoa2zFtWcN8fx/l20/gJOO7J5xo2pN+yJMVXL2R01+JPmE\ny80ERhNcAXAWgDsZY5fyz7cCAGPsN07Hl6oA0Gg0mmKSrwBo76niQADbpc/VvMyEiG4gokVEtKim\nJv+c4xqNRqMpjPYWAE5GO4sKwhibyhgbwxgb07dvX4fDNRqNRqOC9hYA1QDkMI1BANxvTKvRaDQa\n17S3APgYwHAiGkpEZQAmAZjRzm3QaDQaDdp5HQBjrI2Ivg/gLRhhoNMYY6vasw0ajUajMWj3+DTG\n2CwA6csZNRqNRtOu6IBxjUajCSlaAGg0Gk1IafdUEIVARDUA0ncnyZ8+APYqak7Q6Mh9Azp2/zpy\n34CO3b9S6dvRjLGccfSBFgBeIaJF+ayGK0U6ct+Ajt2/jtw3oGP3r6P1TZuANBqNJqRoAaDRaDQh\npaMLgKnFboCPdOS+AR27fx25b0DH7l+H6luH9gFoNBqNJjMdXQPQaDQaTQY6pAAgosuIaB0RVRHR\nlGK3J1+IaBoR7SGilVJZLyKaTUQb+GslLyciepj3cTkRjZZ+M5kfv4GIJhejL3aIaDARzSWiNUS0\nioh+xMtLvn9EVEFEC4loGe/br3j5UCL6iLfzOZ7/CkRUzj9X8e+HSHXdysvXEZGarcQUQURRIlpC\nRK/zzx2mf0S0hYhWENFSIlrEy0r+3swJY6xD/cHIMbQRwDAAZQCWARhR7Hbl2fbzAIwGsFIq+x2A\nKfz9FAC/5e8vB/AGjBTbZwL4iJf3ArCJv1by95UB6NsAAKP5+24wdoYb0RH6x9vYlb+PA/iIt/l5\nAJN4+RMAvsff3wTgCf5+EoDn+PsR/H4tBzCU38fRYl87qZ8/AfA0gNf55w7TPwBbAPSxlZX8vZnr\nryNqAGMBVDHGNjHGWgA8C2BikduUF4yx9wHU2oonApjO308HcKVU/hQzWACgJxENAHApgNmMsVrG\n2H4AswFc5n/rs8MY28kY+4S/PwhgDYzNgEq+f7yNh/jHOP9jAC4E8AIvt/dN9PkFAOOJiHj5s4yx\nZsbYZgBVMO7nokNEgwBcAeAv/DOhA/UvAyV/b+aiIwqAnLuOlRj9GWM7AWMQBdCPl2fqZ+D7z00C\no2DMlDtE/7h5ZCmAPTAe/I0ADjDG2vghcjvNPvDv6wD0RkD7xnkQwC0Akvxzb3Ss/jEAbxPRYiK6\ngZd1iHszGx1xt+qcu451EDL1M9D9J6KuAF4E8GPGWL0xMXQ+1KEssP1jjCUAjCSingBeBnCi02H8\ntaT6RkSfA7CHMbaYiM4XxQ6HlmT/OGczxnYQUT8As4lobZZjS7F/jnREDaCj7Tq2m6uX4K97eHmm\nfga2/0QUhzH4/4sx9hIv7jD9AwDG2AEA82DYhnsSkZhkye00+8C/7wHD9BfUvp0N4AtEtAWGSfVC\nGBpBR+kfGGM7+OseGAJ8LDrYvelERxQAHW3XsRkARDTBZACvSuXX8oiEMwHUcTX1LQCXEFElj1q4\nhJcVFW4D/iuANYyxP0pflXz/iKgvn/mDiDoBuAiGj2MugC/zw+x9E33+MoB3meFFnAFgEo+iGQpg\nOICF7dOLzDDGbmWMDWKMDYHxPL3LGPs6Okj/iKgLEXUT72HcUyvRAe7NnBTbC+3HHwwv/XoYdtjb\nit2eAtr9DICdAFphzCauh2E7nQNgA3/txY8lAI/yPq4AMEaq51swHGxVAK4rdr94m86BoQ4vB7CU\n/13eEfoH4FQAS3jfVgL4JS8fBmOAqwLwbwDlvLyCf67i3w+T6rqN93kdgAnF7ptDX89HKgqoQ/SP\n92MZ/1slxoyOcG/m+tMrgTUajSakdEQTkEaj0WjyQAsAjUajCSlaAGg0Gk1I0QJAo9FoQooWABqN\nRhNStADQaDSakKIFgEaj0YQULQA0Go0mpPx/irYxXEHrPHsAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# and the stream flow in data[1][2:]\n", "plt.plot(data[1][2:].astype(float))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You will need to convert the date field (i.e. the data in `data[0]`) into the day of year.\n", "\n", "This is readily accomplished using `datetime`:" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "ExecuteTime": { "end_time": "2017-11-21T19:49:14.666606Z", "start_time": "2017-11-21T19:49:14.657622Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[2001 1 1]\n", "2001 001\n" ] } ], "source": [ "import datetime\n", "# transform the first one, which is data[0][2:]\n", "\n", "ds = np.array(data[0][2].split('-')).astype(int)\n", "print ds\n", "year,doy = datetime.datetime(ds[0],ds[1],ds[2]).strftime('%Y %j').split()\n", "print year,doy" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 6.2.3.4 Temperature data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can directly access temperature data from [here](http://ccc.atmos.colostate.edu/cgi-bin/dlydb.pl?yrbeg=2000&yrend=2020&station=52184+DEL+NORTE&proc=2+-+List+Format+%28see+docs%29).\n", "\n", "The format of [`delNorteT.dat`](files/data/delNorteT.dat) is given here.\n", "\n", "The first three fields are date fields (`YEAR`, `MONTH` and `DAY`), followed by `TMAX`, `TMIN`, `PRCP`, `SNOW`, `SNDP`.\n", "\n", "You should read in the temperature data for the days and years that you want. \n", "\n", "For temperature, you might take a **mean of TMAX and TMIN**. \n", "\n", "**Note that these are in Fahrenheit. You should convert them to Celcius.**\n", "\n", "Note also that there are missing data (values `9998` and `9999`). You will need to filter these and interpolate the data in some way. A median might be a good approach, but any interpolation will suffice.\n", "\n", "With that processing then, you should have a dataset, Temperature that will look something like (in cyan, for the year 2005):\n", "\n", "![](files/images/temperature.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 6.3 Coursework" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You need to submit you coursework in the usual manner by the usual submission date.\n", "\n", "You **must** work individually on this task. If you do not, it will be treated as plagiarism. By reading these instructions for this exercise, we assume that you are aware of the UCL rules on plagiarism. You can find more information on this matter in your student handbook. If in doubt about what might constitute plagiarism, ask one of the course convenors.\n", "\n", "### 6.3.1 Summary of coursework requirements\n", "\n", "- **Data Preparation**\n", " \n", " The first task you must complete is to produce a dataset of the proportion of HUC catchment 13010001 (Rio Grande headwaters in Colorado, USA) that is covered by snow for **two consecutive years**, along with associated datasets on temperature (in C) and river discharge at the Del Norte monitoring station. \n", " \n", " You **may not** use data from the year 2005, as this is given to you in the illustrations above.\n", "\n", " The dataset you produce must have a value for the mean snow cover, temperature and discharge in the catchment for every day over each year.\n", "\n", " Your write up **must** include fully labelled graph(s) of snow cover, temperature and discharge for the catchment for each year (with units as appropriate), along with some summary statistics (e.g. mean or median, minimum, maximum, and the timing of these). \n", " \n", " You **must** provide evidence of how you got these data (i.e. the code and commands you ran to produce the data).\n", " \n", " \n", " \n", "- **Modelling**\n", "\n", " You will have prepared two years of data above. Use one of these years to calibrate the (snowmelt) hydrological model (described below) and one year to test it. \n", " \n", " The model parameter estimate *must* be objective (i.e. you can't just arbitrarily choose a set) and ideally optimal, and you *must* state the equation of the cost function you will try to minimise and explain the approach used.\n", " \n", " You **must** state the values of the model parameters that you have estimated and show evidence for how you went about calculating them. Ideally, you should also state the uncertainty in these parameter estimates (not critical to pass this section though).\n", " \n", " You **must** quantify the goodness of fit between your measured flow data and that produced by your model, booth for the calibration exercise and the validation.\n", " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 6.3.2 Summary of Advice" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The first task involves pulling datasets from different sources. No individual part of that should be too difficult, but you must put this together from the material we have done so far. It is more a question of organisation then.\n", "\n", "Perhaps think first about where you want to end up with on this (the 'output'). This might for example be a dictionary with keys `temp`, `doy`, `snow` and `flow`, where each of these would be an array with 365 values (or 366 in a leap year).\n", "\n", "Then consider the datasets you have: these are: (i) a stack of MODIS data with daily observations; (ii) temperature data in a file; (iii) flow data in a file.\n", "\n", "It might be a little fiddly getting the data you want from the flow and temperature data files, but its not very complicated. You will need to consider flagging invalid observations and perhaps interpolating between these.\n", "\n", "Processing the MODIS data might take a little more thought, but it is much the same process. Again, we read the datasets in, trying to make this efficient on data size by only using the area of the vector data mask as in a previous exercise. The data reading will be very similar to reading the MODIS LAI product, but you need to work out and implement what changes are necessary. As advised abovem you should use the `raster_mask2()` function for creating the spatial data masks. Again, you will need to interpolate or perhaps smooth between observations, and then process the snow cover proportions to get an average over the catchment.\n", "\n", "\n", "The second task revolves around using the model that we have developed above in the function `model_accum()`. You have been through previous examples in Python where you attempt to estimate some model parameters given an initial estimate of the parameters and some cost function to be minimised. Solving the model calibration part of problem should follow those same lines then. Testing (validation) should be easy enough. Don't forget to include the estimated parameters (and other relevant information, e.g. your initial estimate, uncertainties if available) in your write up.\n", "\n", "There is quite a lot of data presentation here, and you need to provide *evidence* that you have done the task. Make sure you use images (e.g. of snow cover varying), graphs (e.g. modelled and predicted flow, etc.), and tables (e.g. model parameter estimates) throughout, as appropriate.\n", "\n", "If, for some reason, you are unable to complete the first part of the practical, you should submit what you can for that first part, and continue with calibrating the model using the 2005 dataset that we used above. This would be far from ideal as you would not have completed the required elements for either part in that case, but it would generall be better than not submitting anything." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 6.3.3 Further advice" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "There is plenty of scope here for going beyond the basic requirements, if you get time and are interested (and/or want a higher mark!).\n", "\n", "You will be given credit for all additional work included in the write up, **once you have achieved the basic requirements**. So, there is no point (i.e. you will not get credit for) going off on all sorts of interesting lines of exploration here *unless* you have first completed the core task." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 6.3.4 Structure of the Report" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The required elements of the report are:\n", "\n", "```\n", "\n", " Introduction (5%)\n", " Data Preparation (45%)\n", " Modelling (45%)\n", " Discussion/Conclusions (5%)\n", "```\n", "\n", "The figures in brackets indicate the percentage of marks that we will award for each section of the report.\n", "\n", "#### Introduction (5%)\n", "\n", "This should be of around 2-3 pages.\n", "\n", "It should introduce the purpose of the study, being at a base level, ‘to build and calibrate a snow/hydrological model in Python’.\n", "\n", "It should provide some background to building models of this sort (their purpose/role) and include some review of the types of models that might be built, with reference to the literature (journals).\n", "\n", "A pass mark for this section will describe and explain the purpose of the study and examine some of the context to such modelling, with appropriate literature being cited. Higher or lower marks will depend on the depth that this goes into and the clarity of expression.\n", "\n", "\n", "#### Data Preparation (45%)\n", "\n", "This should contain around 3-4 pages of text, other than codes, figures and tables.\n", "\n", "For a pass mark in this section, you must :\n", "\n", "- introduce the study site, giving general site characteristics, with appropriate figures. \n", "- provide an overview of the data used in the study (snow cover, temperature, flow data) and produce visualisations of the data you are using (images, graphs, tables as appropriate) alongside appropriate summary statistics.\n", "- fully demonstrate how you got these data to this point of processing -- i.e. submit appropriate Python codes and/or unix commands that when run in the sequence you describe would produce the data you have described.\n", "\n", "The weighting here on the study site description is 5% and on the rest, 40%.\n", "\n", "You can obtain higher marks here by going beyond the basics in your approaches to the data or modelling. You still need to demonstrate that you have done the core 'pass' material.\n", "\n", "\n", "#### Modelling\n", "\n", "This should contain around 3-4 pages of text, other than codes, figures and tables.\n", "\n", "For a pass mark in this section, you must :\n", "\n", "- provide an overview of the model that is constructed here, explaining the role of each parameter.\n", "- explain the way in which model calibration and validation is to be undertaken.\n", "- provide an overview of results of the calibration and validation along with relevant visualisations (images, graphs, tables as appropriate).\n", "- fully demonstrate how you got these results -- i.e. submit appropriate Python codes and/or unix commands that when run in the sequence you describe would produce the results you have described.\n", "\n", "The weighting here is 5% for the model description and on the rest, 40%.\n", "\n", "For a mildly improved mark, you should examine and discuss the model assumptions in the context of any modelling literature you looked at in the Introduction. For a significantly improved mark, you could try improving the model. \n", "\n", "#### Discussion and Conclusions\n", "\n", "This section should be around 2 pages. It should provide a discussion and analysis of your results and you should draw appropriate conclusions from these.\n", "\n", "You can also use this section to critique the model/data/methods, and suggest ways that you would improve things. If you do this, you must give some indication of how that would be achieved. You will get no credit for simply saying ‘next time I would make the code more efficient’, for example.\n", "\n", "Very good/excellent marks would normally require you to cite appropriate literature.\n", "\n", "A sufficient effort for a pass would make a reasonable effort at discussing these results in the context of some literature and draw a few (non trivial) conclusions from the study." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 6.3.5 Computer Code" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### General requirements\n", "\n", "You will obviously need to submit computer codes as part of this assessment. Some flexibility in the style of these codes is to be expected. For example, some might write a class that encompasses the functionality for all tasks. Some poeple might have multiple versions of codes with different functionality. All of these, and other reasonable variations are allowed.\n", "\n", "All codes needed to demonstrate that you have performed the core tasks are required to be included in the submission. You should include all codes that you make use of in the main body of the text in the main body. Any other codes that you want to refer to (e.g. something you tried out as an enhancement and didn’t quite get there) you can include in appendices.\n", "\n", "All codes should be well-commented. Part of the marks you get for code will depend on the adequacy of the commenting.\n", "\n", "#### Degree of original work required and plagiarism\n", "\n", "If you use a piece of code verbatim that you have taken from the course pages or any other source, **you must acknowledge this** in comments in your text. **Not to do so is plagiarism**. Where you have taken some part (e.g. a few lines) of someone else’s code, **you should also indicate this**. If some of your code is heavily based on code from elsewhere, **you must also indicate that**.\n", "\n", "Some examples. You may recognise this snippet of code from above.\n", "\n", "The first example is guilty of strong plagiarism, it does not seek to acknowledge the source of this code, even though it is just a direct copy, pasted into a method called `model()`:" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "ExecuteTime": { "end_time": "2017-11-21T19:49:29.355926Z", "start_time": "2017-11-21T19:49:29.345443Z" } }, "outputs": [], "source": [ "def model(tempThresh=9.0,K=2000.0,p=0.96):\n", " '''need to comment this further ...\n", "\n", " '''\n", " import numpy as np\n", " meltDays = np.where(temperature > tempThresh)[0]\n", " accum = snowProportion*0.\n", " for d in meltDays:\n", " water = K * snowProportion[d]\n", " n = np.arange(len(snowProportion)) - d\n", " m = p ** n\n", " m[np.where(n<0)]=0\n", " accum += m * water\n", " return accum" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This is **not** acceptable.\n", "\n", "This should probably be something along the lines of:" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [], "source": [ "def model(tempThresh=9.0,K=2000.0,p=0.96):\n", " '''need to comment this further ...\n", "\n", " This code is taken directly from\n", " \"Modelling delay in a hydrological network\"\n", " by P. Lewis http://www2.geog.ucl.ac.uk/~plewis/geogg122/DelNorte.html\n", " and wrapped into a method.\n", " '''\n", " # my code: make sure numpy is imported\n", " import numpy as np\n", "\n", " # code below verbatim from Lewis\n", " meltDays = np.where(temperature > tempThresh)[0]\n", " accum = snowProportion*0.\n", " for d in meltDays:\n", " water = K * snowProportion[d]\n", " n = np.arange(len(snowProportion)) - d\n", " m = p ** n\n", " m[np.where(n<0)]=0\n", " accum += m * water\n", " # my code: return accumulator\n", " return accum" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now, we acknowledge that this is in essence a direct copy of someone else’s code, and clearly state this. We do also show that we have added some new lines to the code, and that we have wrapped this into a method.\n", "\n", "In the next example, we have seen that the way m is generated is in fact rather inefficient, and have re-structured the code. It is partially developed from the original code, and acknowledges this:" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "ExecuteTime": { "end_time": "2017-11-21T19:49:32.108956Z", "start_time": "2017-11-21T19:49:32.097823Z" } }, "outputs": [], "source": [ "def model(tempThresh=9.0,K=2000.0,p=0.96):\n", " '''need to comment this further ...\n", "\n", " This code after the model developed in\n", " \"Modelling delay in a hydrological network\"\n", " by P. Lewis\n", " http://www2.geog.ucl.ac.uk/~plewis/geogg122/DelNorte.html\n", "\n", " My modifications have been to make the filtering more efficient.\n", " '''\n", " # my code: make sure numpy is imported\n", " import numpy as np\n", "\n", " # code below verbatim from Lewis unless otherwise indicated\n", " meltDays = np.where(temperature > tempThresh)[0]\n", " accum = snowProportion*0.\n", "\n", " # my code: pull the filter block out of the loop\n", " n = np.arange(len(snowProportion))\n", " m = p ** n\n", "\n", " for d in meltDays:\n", " water = K * snowProportion[d]\n", "\n", " # my code: shift the filter on by one day\n", " # ...do something clever to shift it on by one day\n", "\n", " accum += m * water\n", " # my code: return accumulator\n", " return accum" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This example makes it clear that significant modifications have been made to the code structure (and probably to its efficiency) although the basic model and looping comes from an existing piece of code. It clearly highlights what the actual modifications have been. Note that this is not a working example!!\n", "\n", "Although you are supposed to do this piece of work on your own, there might be some circumstances under which someone has significantly helped you to develop the code (e.g. written the main part of it for you & you’ve just copied that with some minor modifications). You **must** acknowledge in your code comments if this has happened. On the whole though, this should not occur, as you **must** complete this work on your own.\n", "\n", "If you take a piece of code from somewhere else and all you do is change the variable names and/or other cosmetic changes, you **must** acknowledge the source of the original code (with a URL if available).\n", "\n", "Plagiarism in coding is a tricky issue. One reason for that is that often the best way to learn something like this is to find an example that someone else has written and adapt that to your purposes. Equally, if someone has written some tool/library to do what you want to do, it would generally not be worthwhile for you to write your own but to concentrate on using that to achieve something new. Even in general code writing (i.e. when not submitting it as part of your assessment) you and anyone else who ever has to read your code would find it of value to make reference to where you found the material to base what you did on. The key issue to bear in mind in this work, as it is submitted ‘as your own work’ is that, to avoid being accused of plagiarism and to allow a fair assessment of what you have done, you must clearly acknowledge which parts of it are your own, and the degree to which you could claim them to be your own.\n", "\n", "For example, based on ... is absolutely fine, and you would certainly be given credit for what you have done. In many circumstances ‘taken verbatim from ...’ would also be fine (provided it is acknowledged) but then you would be given credit for what you had done with the code that you had taken from elsewhere (e.g. you find some elegant way of doing the graphs that someone has written and you make use of it for presenting your results).\n", "\n", "The difference between what you submit here and the code you might write if this were not a piece submitted for assessment is that you the vast majority of the credit you will gain for the code will be based on the degree to which you demonstrate that you can write code to achieve the required tasks. There would obviously be some credit for taking codes from the coursenotes and bolting them together into something that achieves the overall aim: provided that worked, and you had commented it adequately and acknowledge what the extent of your efforts had been, you should be able to achieve a pass in that component of the work. If there was no original input other than vbolting pieces of existing code together though, you be unlikely to achieve more than a pass. If you get less than a pass in another component of the coursework, that then puts you in danger of an overall fail.\n", "\n", "Provided you achieve the core tasks, the more original work that you do/show (that is of good quality), the higher the mark you will get. Once you have achieved the core tasks, even if you try something and don’t quite achieve it, is is probably worth including, as you may get marks for what you have done (or that fact that it was a good or interesting thing to try to do)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Documentation\n", "\n", "Note: All methods/functions and classes must be documented for the code to be adequate. Generally, this will contain:\n", "\n", " - some text on the purpose of the method (/function/class)\n", "\n", " - some text describing the inputs and outputs, including reference to any relevant details such as datatype, shape etc where such things are of relevance to understanding the code.\n", "\n", " - some text on keywords, e.g.:" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "ExecuteTime": { "end_time": "2017-11-21T19:49:34.566235Z", "start_time": "2017-11-21T19:49:34.557952Z" } }, "outputs": [], "source": [ "def complex(real=0.0, imag=0.0):\n", " \"\"\"Form a complex number.\n", "\n", " Keyword arguments:\n", " real -- the real part (default 0.0)\n", " imag -- the imaginary part (default 0.0)\n", "\n", " Example taken verbatim from:\n", " http://www.python.org/dev/peps/pep-0257/\n", " \"\"\"\n", " if imag == 0.0 and real == 0.0: return complex_zero\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You should look at the [document on good docstring conventions](http://www.python.org/dev/peps/pep-0257/) when considering how to document methods, classes etc.\n", "\n", "To demonstrate your documentation, you **must** include the help text generated by your code after you include the code. e.g.:" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "ExecuteTime": { "end_time": "2017-11-21T19:49:36.343661Z", "start_time": "2017-11-21T19:49:36.337210Z" } }, "outputs": [], "source": [ "def print_something(this,stderr=False):\n", " '''This does something.\n", "\n", " Keyword arguments:\n", " stderr -- set to True to print to stderr (default False)\n", " '''\n", "\n", " if stderr:\n", " # import sys.stderr\n", " from sys import stderr\n", "\n", " # print to stderr channel, converting this to str\n", " print >> stderr,str(this)\n", "\n", " # job done, return\n", " return\n", "\n", " # print to stdout, converting this to str\n", " print str(this)\n", "\n", " return\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Then the help text would be:" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "ExecuteTime": { "end_time": "2017-11-21T19:49:37.654141Z", "start_time": "2017-11-21T19:49:37.649675Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Help on function print_something in module __main__:\n", "\n", "print_something(this, stderr=False)\n", " This does something.\n", " \n", " Keyword arguments:\n", " stderr -- set to True to print to stderr (default False)\n", "\n" ] } ], "source": [ "help(print_something)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The above example represents a ‘good’ level of commenting as the code broadly adheres to the style suggestions and most of the major features are covered. It is not quite ‘very good/excellent’ as the description of the purpose of the method (rather important) is trivial and it fails to describe the input this in any way. An excellent piece would do all of these things, and might well tell us about any dependencies (e.g. requires sys if stderr set to True).\n", "\n", "An inadequate example would be:" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "ExecuteTime": { "end_time": "2017-11-21T19:49:39.641877Z", "start_time": "2017-11-21T19:49:39.635030Z" } }, "outputs": [], "source": [ "def print_something(this,stderr=False):\n", " '''This prints something'''\n", " if stderr:\n", " from sys import stderr\n", " print >> stderr,str(this)\n", " return\n", " print str(this)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It is inadequate because it still only has a trivial description of the purpose of the method, it tells us nothing about inputs/outputs and there is no commenting inside the method." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Word limit\n", "\n", "There is no word limit per se on the computer codes, though as with all writing, you should try to be succint rather than overly verbose.\n", "\n", "#### Code style\n", "\n", "A good to excellent piece of code would take into account issues raised in the [style guide](http://www.python.org/dev/peps/pep-0008/). The ‘degree of excellence’ would depend on how well you take those points on board." ] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.13" }, "latex_envs": { "LaTeX_envs_menu_present": true, "autocomplete": true, "bibliofile": "biblio.bib", "cite_by": "apalike", "current_citInitial": 1, "eqLabelWithNumbers": true, "eqNumInitial": 0, "hotkeys": { "equation": "Ctrl-E", "itemize": "Ctrl-I" }, "labels_anchors": false, "latex_user_defs": false, "report_style_numbering": false, "user_envs_cfg": false }, "toc": { "nav_menu": {}, "number_sections": true, "sideBar": true, "skip_h1_title": true, "toc_cell": true, "toc_position": {}, "toc_section_display": "block", "toc_window_display": false } }, "nbformat": 4, "nbformat_minor": 1 }