{ "cells": [ { "cell_type": "markdown", "id": "6be58b8e-adf7-4dd7-92f1-b2f38ad99aef", "metadata": {}, "source": [ "# Run Examples\n", "\n", "**Author:** Alexander Michels\n", "\n", "This notebook walks through running the CyberGIS-Compute model composed of the three examples in this guide." ] }, { "cell_type": "code", "execution_count": 1, "id": "e4cf4cd4-e94a-46c8-ac32-0a5b1d315af3", "metadata": {}, "outputs": [], "source": [ "from IPython.display import Image\n", "import os" ] }, { "cell_type": "markdown", "id": "55695fe5-bb37-4eed-b3ad-797c92f7a30b", "metadata": {}, "source": [ "The GeoJSONs in the `data/` folder is already uploaded as part of the Github repo, so let's get some new data to plot. The commands below make a `new_data` folder and download a dataset of the [Stephen's Kangaroo Rat Range](https://catalog.data.gov/dataset/stephens-kangaroo-rat-range-cwhr-m108-ds1895-25c2b)." ] }, { "cell_type": "code", "execution_count": 2, "id": "8f3c92f2-f302-44c8-ade6-5af16393a1ed", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "--2022-10-20 19:23:32-- https://data-cdfw.opendata.arcgis.com/datasets/2331a5a9cf4547faa8b86d73b1af38a0_0.geojson?outSR=%7B%22latestWkid%22%3A3857%2C%22wkid%22%3A102100%7D\n", "Resolving data-cdfw.opendata.arcgis.com (data-cdfw.opendata.arcgis.com)... 3.219.120.199, 34.193.115.202, 44.207.123.71\n", "Connecting to data-cdfw.opendata.arcgis.com (data-cdfw.opendata.arcgis.com)|3.219.120.199|:443... connected.\n", "HTTP request sent, awaiting response... 200 OK\n", "Length: unspecified [application/json]\n", "Saving to: ‘new_data/kangarro_rat_range.geojson’\n", "\n", "new_data/kangarro_r [ <=> ] 166.25K --.-KB/s in 0.04s \n", "\n", "2022-10-20 19:23:33 (3.85 MB/s) - ‘new_data/kangarro_rat_range.geojson’ saved [170244]\n", "\n" ] } ], "source": [ "!mkdir new_data/\n", "!wget -O new_data/kangarro_rat_range.geojson https://data-cdfw.opendata.arcgis.com/datasets/2331a5a9cf4547faa8b86d73b1af38a0_0.geojson?outSR=%7B%22latestWkid%22%3A3857%2C%22wkid%22%3A102100%7D" ] }, { "cell_type": "markdown", "id": "7ad0ccdb-4c11-41a7-8e8e-214573591416", "metadata": {}, "source": [ "Now, we want to connect to our CyberGIS-Compute server with the commands below. Normally we would use \"cgjobsup.cigi.illinois.edu\", but since this is a toy model, we put it on our test deployment:" ] }, { "cell_type": "code", "execution_count": 3, "id": "11a2a74e-3548-4a47-8866-f8c601689113", "metadata": {}, "outputs": [], "source": [ "from cybergis_compute_client import CyberGISCompute\n", "\n", "cybergis = CyberGISCompute(url=\"cgjobsup-test.cigi.illinois.edu\", isJupyter=True, protocol=\"HTTPS\", port=443, suffix=\"v2\")" ] }, { "cell_type": "markdown", "id": "67e8cfb2-5ed3-4e81-a4b7-79b1cccb59be", "metadata": {}, "source": [ "Once you pull up the UI by running the cell below, follow these steps:\n", "\n", "1. In the \"Job Templates\" dropdown choose \"three-examples.\"\n", "2. Under the \"Input Parameters\" section, type your name in the \"name\" box.\n", "3. Under the \"Upload Data\" section, choose a folder of data to upload using the \"Select\" button (\"new_data\" or \"data\"). Once you select the folder and click the \"Select\" button, it should show the path in green next to a \"Change\" button.\n", "4. Click \"Submit Job\" at the bottom. \n", "\n", "The UI will switch to the \"Your Job Status\" tab which gives you updates about your job. Wait for it to finish." ] }, { "cell_type": "code", "execution_count": 4, "id": "95030029-6b80-4bb2-8aed-7f598984dd74", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "dd5db8ecddcd4d45960776068318318c", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Tab(children=(Output(), Output(), Output(), Output()), _titles={'0': 'Job Configuration', '1': 'Your Job Statu…" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "cybergis.show_ui()" ] }, { "cell_type": "markdown", "id": "727f4846-6176-4d6f-9cda-cd9054f22e69", "metadata": {}, "source": [ "With the job complete, go to the \"Download Job Results\" tab and click the \"Download\" button to download the full result folder. The download can take a minute or more (depending on the amount of data) and when it is complete, you should see:\n", "\n", "```\n", "✅ download success!\n", "please check your data at your root folder under \"globus_download_xxxxxxxxxxx\"\n", "```\n", "\n", "That `globus_download_xxxxxxxxxxx` folder will be in your root directory in the file browser (`~/work` in the terminal) and we can access it with the variable `cybergis.recentDownloadPath`. Let's inspect the outputs:" ] }, { "cell_type": "code", "execution_count": 5, "id": "87d920f1-80f8-4f63-89c5-6af716714840", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.jpg slurm_log\n" ] } ], "source": [ "!ls {cybergis.recentDownloadPath}" ] }, { "cell_type": "markdown", "id": "2209b8ce-b909-4cc4-8665-d13c65649257", "metadata": {}, "source": [ "The logs for our job are in the result folder under the folder `slurm_log`. Let's see the contents:" ] }, { "cell_type": "code", "execution_count": 6, "id": "6f0003ee-93c2-49de-9b09-6caf0476ce23", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "job.stderr job.stdout\n" ] } ], "source": [ "!ls {cybergis.recentDownloadPath}/slurm_log/" ] }, { "cell_type": "code", "execution_count": 7, "id": "b6702642-2979-4f02-8c09-39b8a50bd814", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "ModuleCmd_Use.c(231):ERROR:64: Directory 'gnu/openmpi-4.1.2-gnu-4.8.5' not found\n", "Matplotlib created a temporary config/cache directory at /tmp/matplotlib-sphfow4a because the default path (/home/jovyan/.cache/matplotlib) is not a writable directory; it is highly recommended to set the MPLCONFIGDIR environment variable to a writable directory, in particular to speed up the import of Matplotlib and to better support multiprocessing.\n" ] } ], "source": [ "!cat {cybergis.recentDownloadPath}/slurm_log/job.stderr" ] }, { "cell_type": "code", "execution_count": 8, "id": "84fe2ed1-dc8e-45c4-b5a7-21768ca263e0", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Hello from example 1!\n", "0\n", "1\n", "1\n", "2\n", "3\n", "5\n", "8\n", "13\n", "21\n", "34\n", "55\n", "89\n", "144\n", "233\n", "377\n", "610\n", "987\n", "1597\n", "2584\n", "4181\n", "6765\n", "10946\n", "17711\n", "28657\n", "46368\n", "75025\n", "121393\n", "196418\n", "317811\n", "514229\n", "We are going to map 1 geojsons. They are:\n", " * /job/data/kangarro_rat_range.geojson\n", "Your name is General Kenobi\n" ] } ], "source": [ "!cat {cybergis.recentDownloadPath}/slurm_log/job.stdout" ] }, { "cell_type": "markdown", "id": "b1537318-1164-4496-abec-3b69efae2c5a", "metadata": {}, "source": [ "Now, let's load a map:" ] }, { "cell_type": "code", "execution_count": 9, "id": "f5233ebc-1fb2-4c2c-9e72-f6c01d28c529", "metadata": {}, "outputs": [ { "data": { "image/jpeg": "/9j/4AAQSkZJRgABAQEAZABkAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAHgAoADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3+iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKa+QjEHBxXE+GNN1vWfCmkapceMtZSa8sobiRY4bPaGdAxAzATjJ9aAO4ornP+Ea1X/oddc/782f/wAYo/4RrVf+h11z/vzZ/wDxigDo6K5z/hGtV/6HXXP+/Nn/APGKP+Ea1X/oddc/782f/wAYoA6Oiuc/4RrVf+h11z/vzZ//ABij/hGtV/6HXXP+/Nn/APGKAOjornP+Ea1X/oddc/782f8A8Yo/4RrVf+h11z/vzZ//ABigDo6K5z/hGtV/6HXXP+/Nn/8AGKP+Ea1X/oddc/782f8A8YoA6Oiuc/4RrVf+h11z/vzZ/wDxij/hGtV/6HXXP+/Nn/8AGKAOjornP+Ea1X/oddc/782f/wAYo/4RrVf+h11z/vzZ/wDxigDo6K5z/hGtV/6HXXP+/Nn/APGKP+Ea1X/oddc/782f/wAYoA6Oiuc/4RrVf+h11z/vzZ//ABij/hGtV/6HXXP+/Nn/APGKAOjornP+Ea1X/oddc/782f8A8Yo/4RrVf+h11z/vzZ//ABigDo6K5z/hGtV/6HXXP+/Nn/8AGKP+Ea1X/oddc/782f8A8YoA6Oiuc/4RrVf+h11z/vzZ/wDxij/hGtV/6HXXP+/Nn/8AGKAOjornP+Ea1X/oddc/782f/wAYo/4RrVf+h11z/vzZ/wDxigDo6K5z/hGtV/6HXXP+/Nn/APGKP+Ea1X/oddc/782f/wAYoA6Oiuc/4RrVf+h11z/vzZ//ABij/hGtV/6HXXP+/Nn/APGKAOjornP+Ea1X/oddc/782f8A8Yo/4RrVf+h11z/vzZ//ABigDo6K5z/hGtV/6HXXP+/Nn/8AGKP+Ea1X/oddc/782f8A8YoA6Oiuc/4RrVf+h11z/vzZ/wDx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Z2wOpIjViBz1Ncj4Y1O2PiaJNF1u91XSv7Okl1B7iVpVgmDJswT9xiDJmMYA29BV/wASfELS9M0zTWsr6z+06vHvsZbuTyoVjIB81y2MKAR8vUngdyADZu/FuiWem2OoPdvLbX7hLVrWCScyttLYCxqx6Kx6cYNaGn38Gp2aXVus6xMSAJ7eSF+DjlHAYfiK4lrTwbb+ENCivPES/YoJpJrbUYb3yRLN84kYSIQBku/APt2rY8CXd1eaNdNNcXF1aJeyx2Fzcg+ZPbjG1iSAW53AN3AB75oA6iiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP/Z\n", "text/plain": [ "" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Image(filename=os.path.join(cybergis.recentDownloadPath, \"0.jpg\"))" ] }, { "cell_type": "code", "execution_count": null, "id": "14562c7b-c142-4b9d-a4c1-da3c63bd875b", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.12" } }, "nbformat": 4, "nbformat_minor": 5 }