{ "cells": [ { "cell_type": "markdown", "id": "7218706c", "metadata": {}, "source": [ "## AOD1B data product" ] }, { "cell_type": "code", "execution_count": 1, "id": "7ad24bb6", "metadata": {}, "outputs": [], "source": [ "# Imports\n", "from gfeatpy.gravity import AOD1B, AOD1BType, GravityAnomaly, DateTime\n", "from gfeatpy import plotting\n", "\n", "import numpy as np\n", "from matplotlib.animation import FuncAnimation, PillowWriter\n", "import matplotlib.pyplot as plt\n", "import warnings, matplotlib\n", "\n", "warnings.filterwarnings(\"ignore\", category=matplotlib.MatplotlibDeprecationWarning)\n", "\n", "data_root = \"../../../data/\"" ] }, { "cell_type": "code", "execution_count": 2, "id": "f246603b", "metadata": {}, "outputs": [], "source": [ "# Read data and create array of SH objects\n", "sh_list = []\n", "date = []\n", "\n", "for day in np.arange(1, 32):\n", " # Load static gravity field daily files\n", " aod1b = AOD1B()\n", " aod1b.load(f\"{data_root}/aod1b/AOD1B_2025-01-{day:02d}_X_07.asc\")\n", " # Loop over hours\n", " for h in np.arange(0, 24, 3):\n", " datetime = DateTime(2025, 1, day, h) # 2025-01-01 03:00:00\n", " sh_list.append(aod1b.get(datetime, AOD1BType.GLO)) # Get SH class and append\n", " date.append(f\"2025-Jan-{day} {h:02d}:00\")" ] }, { "cell_type": "code", "execution_count": 3, "id": "d18ed20d", "metadata": { "tags": [ "thumbnail" ] }, "outputs": [], "source": [ "%%capture\n", "\n", "# Define map resolution\n", "n_lon = 360\n", "n_lat = 180\n", "functional = GravityAnomaly()\n", "\n", "# Define maximum values\n", "zlim = 0.05\n", "levels = np.linspace(-zlim, zlim, 101)\n", "\n", "# Plot dummy map\n", "ax = plotting._get_basemap_axes()\n", "[lon, lat, z] = sh_list[0].synthesis(n_lon, n_lat, functional)\n", "contour = ax.contourf(lon, lat, z, levels=levels, alpha=0.6, cmap='seismic', antialiased=True)\n", "cbar = plt.colorbar(contour, ax=ax, shrink=0.5)\n", "plotting._adjust_colorbar_ticks(cbar)\n", "cbar.set_label(\"$\\\\Delta g$ [mGal]\")\n", "\n", "# Get ax object\n", "ax = plt.gca()\n", "fig = plt.gcf()\n", "\n", "def update(frame):\n", " global contour, cbar\n", " # Remove previous map\n", " contour.remove()\n", " # Plot new map\n", " [lon, lat, z] = sh_list[frame].synthesis(n_lon, n_lat, functional)\n", " contour = ax.contourf(lon, lat, z, levels=levels, alpha=0.6, cmap='seismic', antialiased=True)\n", " ax.set_title(date[frame])\n", " # Return values\n", " return [contour]\n", "\n", "\n", "# Create and save animation\n", "ani = FuncAnimation(fig, update, frames=len(sh_list), blit=True)\n", "ani.save(\"aod1b-2025-01.gif\", writer=PillowWriter(fps=10))" ] }, { "cell_type": "markdown", "id": "5bc61fdc", "metadata": {}, "source": [ "![AOD1B Jan-2025](aod1b-2025-01.gif)" ] } ], "metadata": { "kernelspec": { "display_name": "gfeat", "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.10.19" } }, "nbformat": 4, "nbformat_minor": 5 }