From dd9ca761ca451099fedb2e3fcf78936a82dec96c Mon Sep 17 00:00:00 2001 From: Jacob Cain Date: Thu, 31 Oct 2024 15:55:10 -0700 Subject: [PATCH 1/6] instructions now for latest knoten, 0.2.1 had usgscsm lib path issue --- .../csm-stack/image-to-ground-tutorial.ipynb | 26 +++++++------ .../data/image_to_ground/isd_file.json | 38 +++++++++---------- 2 files changed, 33 insertions(+), 31 deletions(-) diff --git a/docs/getting-started/csm-stack/image-to-ground-tutorial.ipynb b/docs/getting-started/csm-stack/image-to-ground-tutorial.ipynb index 901a7506..68393ba5 100644 --- a/docs/getting-started/csm-stack/image-to-ground-tutorial.ipynb +++ b/docs/getting-started/csm-stack/image-to-ground-tutorial.ipynb @@ -41,7 +41,7 @@ "metadata": {}, "source": [ "```\n", - "conda install -c conda-forge knoten=0.2.1\n", + "conda install -c conda-forge knoten\n", "```" ] }, @@ -65,6 +65,8 @@ "import ale\n", "import json\n", "import knoten\n", + "from knoten import csm\n", + "from csmapi import csmapi\n", "import os\n", "\n", "# Set local data directory and paths\n", @@ -114,12 +116,12 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 2, "id": "0c4dbf84-2986-495b-9e4a-da4c77059e7e", "metadata": {}, "outputs": [], "source": [ - "sensor_model = knoten.csm.create_csm(isd_file, verbose=False)" + "sensor_model = csm.create_csm(isd_file, verbose=False)" ] }, { @@ -132,24 +134,24 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 3, "id": "d8f2b155-9803-4a6b-a967-bca1ef35860f", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "(-572485.2147483829, -79884.88742005036, -3326939.6184008163)" + "(-572485.2147458872, -79884.88741760612, -3326939.618401299)" ] }, - "execution_count": 30, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Create an image coordinate at line = 206 and sample = 206\n", - "image_coord = knoten.csmapi.ImageCoord(206, 206)\n", + "image_coord = csmapi.ImageCoord(206, 206)\n", "\n", "# Convert the image coordinates to ground coordinates with desired precision of 0.0\n", "ground_coord = sensor_model.imageToGround(image_coord, 0.0)\n", @@ -168,17 +170,17 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 4, "id": "0edc0b6d-cdbe-46a8-9fdc-4ebdc4570f1a", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "(205.99991086761267, 206.00000010379927)" + "(206.0000000225674, 205.9999999963493)" ] }, - "execution_count": 31, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } @@ -194,7 +196,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "Python 3", "language": "python", "name": "python3" }, @@ -208,7 +210,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.0" + "version": "3.12.7" } }, "nbformat": 4, diff --git a/docs/getting-started/data/image_to_ground/isd_file.json b/docs/getting-started/data/image_to_ground/isd_file.json index 6dc26b5a..2333f5f8 100644 --- a/docs/getting-started/data/image_to_ground/isd_file.json +++ b/docs/getting-started/data/image_to_ground/isd_file.json @@ -42,20 +42,20 @@ 0.8371209459443085, -0.2996928944391797, -0.10720760458181891, - -0.44488113064480633 + -0.4448811306448063 ], [ 0.8371209163489989, -0.29969290157106665, -0.10720758464502428, - -0.4448811863335056 + -0.44488118633350565 ] ], "angular_velocities": [ [ 3.16238646979841e-05, -2.880432898124293e-05, - 5.652013165872617e-05 + 5.6520131658726165e-05 ], [ 3.162386469798407e-05, @@ -320,25 +320,25 @@ ], "positions": [ [ - -1885.2980675616832, - 913.1652236013313, + -1885.2980675616827, + 913.1652236013311, -2961.966828003069 ], [ - -1885.3017519980372, - 913.1599537256885, - -2961.9661251204225 + -1885.3017519980376, + 913.1599537256886, + -2961.966125120423 ] ], "velocities": [ [ - -1.9629237646703679, + -1.9629237646703686, -2.80759072221274, - 0.374466578014853 + 0.37446657801485306 ], [ -1.962920608078827, - -2.8075922570664513, + -2.8075922570664518, 0.37447154183051934 ] ], @@ -354,25 +354,25 @@ ], "positions": [ [ - -208246643.00357288, - -7677078.09368972, + -208246643.00357282, + -7677078.093689713, 2103553.070434021 ], [ - -208246643.00396734, + -208246643.0039674, -7677078.138553765, - 2103553.04986676 + 2103553.0498667755 ] ], "velocities": [ [ - -0.2102027789950371, - -23.901883559526876, + -0.21020277899317444, + -23.901883559525015, -10.957471328254789 ], [ - -0.21020277326198994, - -23.90188355931826, + -0.21020277326292125, + -23.901883559320122, -10.957471328315325 ] ], From 346b2632b3be278d1efc062c9f61aa1b17e21bdc Mon Sep 17 00:00:00 2001 From: Jacob Cain Date: Mon, 4 Nov 2024 07:16:06 -0800 Subject: [PATCH 2/6] csm sandbox outline --- .../csm-stack/csm-sandbox.ipynb | 153 ++++++++++++++++++ 1 file changed, 153 insertions(+) create mode 100644 docs/getting-started/csm-stack/csm-sandbox.ipynb diff --git a/docs/getting-started/csm-stack/csm-sandbox.ipynb b/docs/getting-started/csm-stack/csm-sandbox.ipynb new file mode 100644 index 00000000..d6f24ef9 --- /dev/null +++ b/docs/getting-started/csm-stack/csm-sandbox.ipynb @@ -0,0 +1,153 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# CSM Sandbox\n", + "\n", + "## 1. Prerequisites\n", + "\n", + "### Install Knoten\n", + "This tutorial requires Knoten version 0.4 or higher.\n", + "\n", + "`conda install -c conda-forge knoten=0.4`\n", + "\n", + "### Install Matplotlib\n", + "This tutorial requires matplotlib.\n", + "\n", + "`conda install -c conda-forge matplotlib`" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Imports" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [], + "source": [ + "import os # File Path Joining\n", + "import json # Read ISD as python dictionary\n", + "\n", + "from knoten import csm # Knoten CSM\n", + "\n", + "import shapely.wkt # Math and Plotting Tools\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Create CSM Camera from existing ISD" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [], + "source": [ + "data_dir = '../data/image_to_ground'\n", + "isd_file = os.path.join(data_dir, 'isd_file.json')\n", + "\n", + "camera = csm.create_csm(isd_file)\n", + "\n", + "with open(isd_file) as json_file:\n", + " isd_dict = json.load(json_file)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## ???" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [], + "source": [ + "# Change stuff?\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Footprint" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0.5, 1.0, 'CSM footprint')" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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06eLXq8XrVYrPXv2lOjoaOV40TXAsh7Fd8Uyp+5evXrd9Dx79+6V/v37i7Ozszg5OUlgYKC8//77yvGia6slH9wFi4judLwmTkREpFKcTiciIlIpBnEiIiKV4ur0WsRoNCIxMREuLi7c/pGI6A4lIsjIyICPj0+pO4BKYhCvRRITE6tkf2oiIlK/8+fPo1GjRhXmYRCvRYq2iTx//rzJBipERHTnSE9Ph6+vrxITKsIgXosUTaG7uroyiBMR3eHMuazKhW1EREQqxSBORESkUgziREREKsUgTkREpFIM4kRERCrFIE5ERKRSDOJEREQqxSBORESkUgziREREKsUgTkREpFIM4kRERCrFIE5ERKRSDOJEREQqxSBORESkUgziREREKsUgTkREpFIM4kRERCrFIE5ERKRSDOJEREQqxSBORESkUgziREREKsUgTkREpFIM4kRERCrFIE5ERKRSDOJEREQqxSBORESkUgziREREKsUgTkREpFIM4kRERCrFIE5ERKRSDOJEREQqxSBORESkUgziREREKsUgTkREpFIM4kRERCrFIE5ERKRSDOJEREQqxSBORESkUgziREREKsUgTkREpFIM4kRERCrFIE5ERKRSqgniaWlpGD16NHQ6HXQ6HUaPHo2rV69WWEZEEBoaCh8fHzg4OKB3796IjY01yZOTk4Px48fDw8MDTk5OGDRoEBISEipd95UrV9CoUSNoNJqbto+IiOhWqCaIjxgxApGRkQgPD0d4eDgiIyMxevToCsvMnj0bc+fOxfz587Fv3z7o9Xr0798fGRkZSp6JEydizZo1WLlyJXbs2IFr165h4MCBKCgoqFTdY8eORWBgYNV0moiIqCKiAnFxcQJAdu/eraRFREQIADl69GiZZYxGo+j1egkLC1PSsrOzRafTyYIFC0RE5OrVq2JraysrV65U8ly4cEGsrKwkPDzc4rq//PJL6dWrl/z9998CQNLS0izqp8FgEABiMBgsKkdERHWHJbFAFSPxiIgI6HQ6dOnSRUnr2rUrdDoddu3aVWaZ06dPIzk5GUFBQUqaVqtFr169lDIHDhxAXl6eSR4fHx8EBAQoecytOy4uDjNmzMDy5cthZWXe25qTk4P09HSTBxERkblUEcSTk5Ph6elZKt3T0xPJycnllgEALy8vk3QvLy/lWHJyMuzs7ODm5lZhnpvV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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Get the footprint using the model and plot it\n", + "\n", + "boundary = csm.generate_boundary((isd_dict[\"image_lines\"], isd_dict[\"image_samples\"]))\n", + "\n", + "lons, lats, alts = csm.generate_latlon_boundary(camera, boundary)\n", + "\n", + "plt.rcParams[\"figure.figsize\"] = [5, 3]\n", + "plt.axes().set_aspect('equal','datalim')\n", + "plt.plot(lons, lats)\n", + "plt.xlabel(\"Longitude (deg)\")\n", + "plt.ylabel(\"Latitude (deg)\")\n", + "plt.title(\"CSM footprint\")" + ] + } + ], + "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.12.7" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} From 1afa958bac8d42e27f56696c04e5167025c9547e Mon Sep 17 00:00:00 2001 From: Jacob Cain Date: Mon, 25 Nov 2024 12:23:50 -0800 Subject: [PATCH 3/6] knoten 0.4 --- .../csm-stack/image-to-ground-tutorial.ipynb | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/docs/getting-started/csm-stack/image-to-ground-tutorial.ipynb b/docs/getting-started/csm-stack/image-to-ground-tutorial.ipynb index 68393ba5..3b249564 100644 --- a/docs/getting-started/csm-stack/image-to-ground-tutorial.ipynb +++ b/docs/getting-started/csm-stack/image-to-ground-tutorial.ipynb @@ -32,16 +32,10 @@ "\n", "\n", "### 1. Prerequisites, Install Knoten\n", - "The `knoten` installation may take a little longer than usual due to the many dependencies (including ALE) involved." - ] - }, - { - "cell_type": "markdown", - "id": "ffeccab3-0d5d-4609-9c7f-871bdb69f17a", - "metadata": {}, - "source": [ + "The `knoten` installation may take a little longer than usual due to the many dependencies (including ALE) involved.\n", + "\n", "```\n", - "conda install -c conda-forge knoten\n", + "conda install -c conda-forge knoten=0.4\n", "```" ] }, From 2550f987363e14eb15e8aa8a0e9c08e8c20818ba Mon Sep 17 00:00:00 2001 From: Jacob Cain Date: Fri, 21 Feb 2025 09:10:49 -0800 Subject: [PATCH 4/6] csm sandbox --- .../csm-stack/csm-sandbox.ipynb | 148 ++++++++++++++---- .../csm-stack/image-to-ground-tutorial.ipynb | 1 - 2 files changed, 121 insertions(+), 28 deletions(-) diff --git a/docs/getting-started/csm-stack/csm-sandbox.ipynb b/docs/getting-started/csm-stack/csm-sandbox.ipynb index d6f24ef9..8b39bae3 100644 --- a/docs/getting-started/csm-stack/csm-sandbox.ipynb +++ b/docs/getting-started/csm-stack/csm-sandbox.ipynb @@ -28,12 +28,13 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 51, "metadata": {}, "outputs": [], "source": [ "import os # File Path Joining\n", "import json # Read ISD as python dictionary\n", + "import copy # Important to be able to modify the ISD\n", "\n", "from knoten import csm # Knoten CSM\n", "\n", @@ -51,62 +52,148 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 52, "metadata": {}, "outputs": [], "source": [ "data_dir = '../data/image_to_ground'\n", - "isd_file = os.path.join(data_dir, 'isd_file.json')\n", - "\n", - "camera = csm.create_csm(isd_file)\n", - "\n", - "with open(isd_file) as json_file:\n", - " isd_dict = json.load(json_file)" + "isd_file = os.path.join(data_dir, 'isd_file.json')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## ???" + "### Methods for reading/printing stats" ] }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 53, "metadata": {}, "outputs": [], "source": [ - "# Change stuff?\n" + "def full_keys(dict, partial_key):\n", + " return [key for key,value in dict.items() if partial_key in key.lower()]\n", + "\n", + "def print_stats(dict, search_keys):\n", + " for search_key in search_keys:\n", + " full_key = full_keys(dict, search_key)[0]\n", + " print(f\"{full_key+\": \":<25}\" + str(dict[full_key]))\n", + "\n", + "def plot_footprint(lons, lats, aspect):\n", + " plt.rcParams[\"figure.figsize\"] = aspect\n", + " plt.axes().set_aspect('equal','datalim')\n", + " plt.plot(lons, lats)\n", + " plt.xlabel(\"Longitude (deg)\")\n", + " plt.ylabel(\"Latitude (deg)\")\n", + " plt.title(\"CSM footprint\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Footprint" + "### Stats/Footprint of original ISD" ] }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 54, "metadata": {}, "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "INS-74021_CCD_CENTER: [2500.5, 0.5]\n", + "INS-74021_IFOV: [2e-05, 2e-05]\n" + ] + }, { "data": { + "image/png": "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", "text/plain": [ - "Text(0.5, 1.0, 'CSM footprint')" + "
" ] }, - "execution_count": 28, "metadata": {}, - "output_type": "execute_result" + "output_type": "display_data" + } + ], + "source": [ + "# Load Dict from JSON-style ISD File\n", + "with open(isd_file) as json_file:\n", + " isd_dict = json.load(json_file)\n", + "\n", + "# Print selected values from ISD\n", + "print_stats(isd_dict['naif_keywords'], ('ccd_center', 'ifov'))\n", + "\n", + "# Create Camera Model\n", + "camera = csm.create_csm(isd_file)\n", + "\n", + "# Get the footprint using the model\n", + "boundary = csm.generate_boundary((isd_dict[\"image_lines\"], isd_dict[\"image_samples\"]))\n", + "lons, lats, alts = csm.generate_latlon_boundary(camera, boundary)\n", + "\n", + "# Plot it\n", + "plot_footprint(lons, lats, [5,1])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Modify ISD/write to file" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": {}, + "outputs": [], + "source": [ + "# New values\n", + "\n", + "new_ccd_center = [1250.5, 1] # Original = [2500.5, 0.5]\n", + "new_ifov = [.00002, .00002] # Original = [.00002, .00002]\n", + "\n", + "\n", + "# Create new ISD Dictionary and modify values\n", + "\n", + "isd_dict_mod = copy.deepcopy(isd_dict)\n", + "\n", + "ccd_center_key = full_keys(isd_dict['naif_keywords'], 'ccd_center')[0]\n", + "isd_dict_mod['naif_keywords'][ccd_center_key] = new_ccd_center\n", + "\n", + "ifov_key = full_keys(isd_dict['naif_keywords'], 'ifov')[0]\n", + "isd_dict_mod['naif_keywords'][ifov_key] = new_ifov\n", + "\n", + "# Write ISD to file\n", + "isd_file_mod = os.path.join(data_dir, 'isd_file_mod.json')\n", + "\n", + "with open(isd_file_mod, 'w') as json_file:\n", + " json.dump(isd_dict_mod, json_file, indent=4)" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "INS-74021_CCD_CENTER: [1250.5, 1]\n", + "INS-74021_IFOV: [2e-05, 2e-05]\n" + ] }, { "data": { - "image/png": "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06eLXq8XrVYrPXv2lOjoaOV40TXAsh7Fd8Uyp+5evXrd9Dx79+6V/v37i7Ozszg5OUlgYKC8//77yvGia6slH9wFi4judLwmTkREpFKcTiciIlIpBnEiIiKV4ur0WsRoNCIxMREuLi7c/pGI6A4lIsjIyICPj0+pO4BKYhCvRRITE6tkf2oiIlK/8+fPo1GjRhXmYRCvRYq2iTx//rzJBipERHTnSE9Ph6+vrxITKsIgXosUTaG7uroyiBMR3eHMuazKhW1EREQqxSBORESkUgziREREKsUgTkREpFIM4kRERCrFIE5ERKRSDOJEREQqxSBORESkUgziREREKsUgTkREpFIM4kRERCrFIE5ERKRSDOJEREQqxSBORESkUgziREREKsUgTkREpFIM4kRERCrFIE5ERKRSDOJEREQqxSBORESkUgziREREKsUgTkREpFIM4kRERCrFIE5ERKRSDOJEREQqxSBORESkUgziREREKsUgTkREpFIM4kRERCrFIE5ERKRSDOJEREQqxSBORESkUgziREREKsUgTkREpFIM4kRERCrFIE5ERKRSDOJEREQqxSBORESkUgziREREKsUgTkREpFIM4kRERCrFIE5ERKRSqgniaWlpGD16NHQ6HXQ6HUaPHo2rV69WWEZEEBoaCh8fHzg4OKB3796IjY01yZOTk4Px48fDw8MDTk5OGDRoEBISEipd95UrV9CoUSNoNJqbto+IiOhWqCaIjxgxApGRkQgPD0d4eDgiIyMxevToCsvMnj0bc+fOxfz587Fv3z7o9Xr0798fGRkZSp6JEydizZo1WLlyJXbs2IFr165h4MCBKCgoqFTdY8eORWBgYNV0moiIqCKiAnFxcQJAdu/eraRFREQIADl69GiZZYxGo+j1egkLC1PSsrOzRafTyYIFC0RE5OrVq2JraysrV65U8ly4cEGsrKwkPDzc4rq//PJL6dWrl/z9998CQNLS0izqp8FgEABiMBgsKkdERHWHJbFAFSPxiIgI6HQ6dOnSRUnr2rUrdDoddu3aVWaZ06dPIzk5GUFBQUqaVqtFr169lDIHDhxAXl6eSR4fHx8EBAQoecytOy4uDjNmzMDy5cthZWXe25qTk4P09HSTBxERkblUEcSTk5Ph6elZKt3T0xPJycnllgEALy8vk3QvLy/lWHJyMuzs7ODm5lZhnpvV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", + "image/png": "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", "text/plain": [ - "
" + "
" ] }, "metadata": {}, @@ -114,24 +201,31 @@ } ], "source": [ - "# Get the footprint using the model and plot it\n", + "# Print selected values from ISD\n", + "print_stats(isd_dict_mod['naif_keywords'], ('ccd_center', 'ifov'))\n", "\n", - "boundary = csm.generate_boundary((isd_dict[\"image_lines\"], isd_dict[\"image_samples\"]))\n", + "# Create Camera Model\n", + "camera = csm.create_csm(isd_file_mod)\n", "\n", + "# Get the footprint using the model\n", + "boundary = csm.generate_boundary((isd_dict_mod[\"image_lines\"], isd_dict_mod[\"image_samples\"]))\n", "lons, lats, alts = csm.generate_latlon_boundary(camera, boundary)\n", "\n", - "plt.rcParams[\"figure.figsize\"] = [5, 3]\n", - "plt.axes().set_aspect('equal','datalim')\n", - "plt.plot(lons, lats)\n", - "plt.xlabel(\"Longitude (deg)\")\n", - "plt.ylabel(\"Latitude (deg)\")\n", - "plt.title(\"CSM footprint\")" + "# Plot it\n", + "plot_footprint(lons, lats, [5,1])" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "knoten", "language": "python", "name": "python3" }, diff --git a/docs/getting-started/csm-stack/image-to-ground-tutorial.ipynb b/docs/getting-started/csm-stack/image-to-ground-tutorial.ipynb index 3b249564..c2a4faf4 100644 --- a/docs/getting-started/csm-stack/image-to-ground-tutorial.ipynb +++ b/docs/getting-started/csm-stack/image-to-ground-tutorial.ipynb @@ -58,7 +58,6 @@ "source": [ "import ale\n", "import json\n", - "import knoten\n", "from knoten import csm\n", "from csmapi import csmapi\n", "import os\n", From a375ad719a86ed698f00ebc82e97d2342eb91492 Mon Sep 17 00:00:00 2001 From: Jacob Cain Date: Fri, 21 Feb 2025 14:06:12 -0800 Subject: [PATCH 5/6] Added "plotting a footprint" to Image to Ground Tutoral --- .../csm-stack/image-to-ground-tutorial.ipynb | 59 ++++++++++++++++--- 1 file changed, 52 insertions(+), 7 deletions(-) diff --git a/docs/getting-started/csm-stack/image-to-ground-tutorial.ipynb b/docs/getting-started/csm-stack/image-to-ground-tutorial.ipynb index c2a4faf4..c8de337c 100644 --- a/docs/getting-started/csm-stack/image-to-ground-tutorial.ipynb +++ b/docs/getting-started/csm-stack/image-to-ground-tutorial.ipynb @@ -51,7 +51,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 21, "id": "7f58cb34-d27f-456d-bfb5-f9075ca575b3", "metadata": {}, "outputs": [], @@ -61,6 +61,7 @@ "from knoten import csm\n", "from csmapi import csmapi\n", "import os\n", + "import matplotlib.pyplot as plt\n", "\n", "# Set local data directory and paths\n", "data_dir = '../data/image_to_ground'\n", @@ -95,7 +96,9 @@ "\n", "# Write the ISD string to file 'isd_file.json'\n", "with open(isd_file, \"w\") as file:\n", - " file.write(isd_str)" + " file.write(isd_str)\n", + "\n", + "isd_dict = json.loads(isd_str)" ] }, { @@ -109,7 +112,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 16, "id": "0c4dbf84-2986-495b-9e4a-da4c77059e7e", "metadata": {}, "outputs": [], @@ -127,7 +130,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 17, "id": "d8f2b155-9803-4a6b-a967-bca1ef35860f", "metadata": {}, "outputs": [ @@ -137,7 +140,7 @@ "(-572485.2147458872, -79884.88741760612, -3326939.618401299)" ] }, - "execution_count": 3, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } @@ -163,7 +166,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 18, "id": "0edc0b6d-cdbe-46a8-9fdc-4ebdc4570f1a", "metadata": {}, "outputs": [ @@ -173,7 +176,7 @@ "(206.0000000225674, 205.9999999963493)" ] }, - "execution_count": 4, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" } @@ -185,6 +188,48 @@ "# Output the image coordinates\n", "image_coord.line, image_coord.samp" ] + }, + { + "cell_type": "markdown", + "id": "be7a71a3", + "metadata": {}, + "source": [ + "### 6. Plot the footprint" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "59e82a7f", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Get the footprint using the model\n", + "boundary = csm.generate_boundary((isd_dict[\"image_lines\"], isd_dict[\"image_samples\"]))\n", + "lons, lats, alts = csm.generate_latlon_boundary(sensor_model, boundary)\n", + "\n", + "# Plot the footprint\n", + "def plot_footprint(lons, lats, aspect):\n", + " plt.rcParams[\"figure.figsize\"] = aspect\n", + " plt.axes().set_aspect('equal','datalim')\n", + " plt.plot(lons, lats)\n", + " plt.xlabel(\"Longitude (deg)\")\n", + " plt.ylabel(\"Latitude (deg)\")\n", + " plt.title(\"CSM footprint\")\n", + "\n", + "plot_footprint(lons, lats, [5, 1])" + ] } ], "metadata": { From 36c91d821a5650251d7b978f21b138a152100fcf Mon Sep 17 00:00:00 2001 From: Jacob Cain Date: Fri, 21 Feb 2025 17:55:21 -0800 Subject: [PATCH 6/6] split csm sandbox to different PR --- .../csm-stack/csm-sandbox.ipynb | 247 ------------------ 1 file changed, 247 deletions(-) delete mode 100644 docs/getting-started/csm-stack/csm-sandbox.ipynb diff --git a/docs/getting-started/csm-stack/csm-sandbox.ipynb b/docs/getting-started/csm-stack/csm-sandbox.ipynb deleted file mode 100644 index 8b39bae3..00000000 --- a/docs/getting-started/csm-stack/csm-sandbox.ipynb +++ /dev/null @@ -1,247 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# CSM Sandbox\n", - "\n", - "## 1. Prerequisites\n", - "\n", - "### Install Knoten\n", - "This tutorial requires Knoten version 0.4 or higher.\n", - "\n", - "`conda install -c conda-forge knoten=0.4`\n", - "\n", - "### Install Matplotlib\n", - "This tutorial requires matplotlib.\n", - "\n", - "`conda install -c conda-forge matplotlib`" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Imports" - ] - }, - { - "cell_type": "code", - "execution_count": 51, - "metadata": {}, - "outputs": [], - "source": [ - "import os # File Path Joining\n", - "import json # Read ISD as python dictionary\n", - "import copy # Important to be able to modify the ISD\n", - "\n", - "from knoten import csm # Knoten CSM\n", - "\n", - "import shapely.wkt # Math and Plotting Tools\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Create CSM Camera from existing ISD" - ] - }, - { - "cell_type": "code", - "execution_count": 52, - "metadata": {}, - "outputs": [], - "source": [ - "data_dir = '../data/image_to_ground'\n", - "isd_file = os.path.join(data_dir, 'isd_file.json')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Methods for reading/printing stats" - ] - }, - { - "cell_type": "code", - "execution_count": 53, - "metadata": {}, - "outputs": [], - "source": [ - "def full_keys(dict, partial_key):\n", - " return [key for key,value in dict.items() if partial_key in key.lower()]\n", - "\n", - "def print_stats(dict, search_keys):\n", - " for search_key in search_keys:\n", - " full_key = full_keys(dict, search_key)[0]\n", - " print(f\"{full_key+\": \":<25}\" + str(dict[full_key]))\n", - "\n", - "def plot_footprint(lons, lats, aspect):\n", - " plt.rcParams[\"figure.figsize\"] = aspect\n", - " plt.axes().set_aspect('equal','datalim')\n", - " plt.plot(lons, lats)\n", - " plt.xlabel(\"Longitude (deg)\")\n", - " plt.ylabel(\"Latitude (deg)\")\n", - " plt.title(\"CSM footprint\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Stats/Footprint of original ISD" - ] - }, - { - "cell_type": "code", - "execution_count": 54, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "INS-74021_CCD_CENTER: [2500.5, 0.5]\n", - "INS-74021_IFOV: [2e-05, 2e-05]\n" - ] - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# Load Dict from JSON-style ISD File\n", - "with open(isd_file) as json_file:\n", - " isd_dict = json.load(json_file)\n", - "\n", - "# Print selected values from ISD\n", - "print_stats(isd_dict['naif_keywords'], ('ccd_center', 'ifov'))\n", - "\n", - "# Create Camera Model\n", - "camera = csm.create_csm(isd_file)\n", - "\n", - "# Get the footprint using the model\n", - "boundary = csm.generate_boundary((isd_dict[\"image_lines\"], isd_dict[\"image_samples\"]))\n", - "lons, lats, alts = csm.generate_latlon_boundary(camera, boundary)\n", - "\n", - "# Plot it\n", - "plot_footprint(lons, lats, [5,1])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Modify ISD/write to file" - ] - }, - { - "cell_type": "code", - "execution_count": 57, - "metadata": {}, - "outputs": [], - "source": [ - "# New values\n", - "\n", - "new_ccd_center = [1250.5, 1] # Original = [2500.5, 0.5]\n", - "new_ifov = [.00002, .00002] # Original = [.00002, .00002]\n", - "\n", - "\n", - "# Create new ISD Dictionary and modify values\n", - "\n", - "isd_dict_mod = copy.deepcopy(isd_dict)\n", - "\n", - "ccd_center_key = full_keys(isd_dict['naif_keywords'], 'ccd_center')[0]\n", - "isd_dict_mod['naif_keywords'][ccd_center_key] = new_ccd_center\n", - "\n", - "ifov_key = full_keys(isd_dict['naif_keywords'], 'ifov')[0]\n", - "isd_dict_mod['naif_keywords'][ifov_key] = new_ifov\n", - "\n", - "# Write ISD to file\n", - "isd_file_mod = os.path.join(data_dir, 'isd_file_mod.json')\n", - "\n", - "with open(isd_file_mod, 'w') as json_file:\n", - " json.dump(isd_dict_mod, json_file, indent=4)" - ] - }, - { - "cell_type": "code", - "execution_count": 58, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "INS-74021_CCD_CENTER: [1250.5, 1]\n", - "INS-74021_IFOV: [2e-05, 2e-05]\n" - ] - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# Print selected values from ISD\n", - "print_stats(isd_dict_mod['naif_keywords'], ('ccd_center', 'ifov'))\n", - "\n", - "# Create Camera Model\n", - "camera = csm.create_csm(isd_file_mod)\n", - "\n", - "# Get the footprint using the model\n", - "boundary = csm.generate_boundary((isd_dict_mod[\"image_lines\"], isd_dict_mod[\"image_samples\"]))\n", - "lons, lats, alts = csm.generate_latlon_boundary(camera, boundary)\n", - "\n", - "# Plot it\n", - "plot_footprint(lons, lats, [5,1])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "knoten", - "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.12.7" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -}