{ "cells": [ { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "Weighting Functions\n", "===================\n", "\n", "The weighting function classes are used in the same way as the sasktran.Engine classes: specify a sasktran.Geometry object, a sasktran.Atmosphere object, wavelengths, and engine options (passed as keyword arguments rather than as a dictionary), and they will produce a numpy array or an xarray dataset.\n", "\n", "When calculating weighting functions using sasktran.Engine, the atmosphere.wf_species property must be set. Here, this property should be left blank (it will be ignored) and the species should be specified through the wf_species property of the weighting function object.\n", "\n", "When using built-in weighting function methods these classes provide little advantage over simply using a sasktran.Engine object. The main advantage of these classes is that they provide a consistent interface for both built-in methods and for finite difference weighting functions." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import skdoas\n", "import sasktran as sk\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "%matplotlib inline\n", "plt.rcParams['figure.figsize'] = [15, 9]\n", "plt.rcParams['font.size'] = 20" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "slat, slon, mjd = 52.1, -106.7, 54000.6 # Saskatoon\n", "mlat, mlon, mjd = 25.8, -80.2, 54000.6 # Miami\n", "\n", "# create line of sight\n", "observer = sk.Geodetic()\n", "observer.from_lat_lon_alt(0., -100., 35786e3) # approximate TEMPO location\n", "geometry = sk.NadirGeometry()\n", "geometry.from_lat_lon(mjd=mjd, observer=observer, lats=[slat, mlat], lons=[slon, mlon])\n", "\n", "# create atmosphere\n", "atmosphere = sk.Atmosphere()\n", "atmosphere.atmospheric_state = sk.MSIS90()\n", "atmosphere['air'] = sk.Species(sk.Rayleigh(), sk.MSIS90())\n", "atmosphere['ozone'] = sk.Species(sk.O3DBM(), sk.Labow())\n", "atmosphere['no2'] = sk.Species(sk.NO2Vandaele1998(), sk.Pratmo())\n", "\n", "wl = [440.]\n", "\n", "heights = np.arange(25e2, 6e4, 5e3)\n", "widths = 25e2 * np.ones(12)\n", "\n", "hr = skdoas.WeightingFunctionFiniteDifferenceHR(\n", " geometry=geometry, atmosphere=atmosphere, wf_species='no2', wfheights=heights, wfwidths=widths)\n", "do = skdoas.WeightingFunctionDO(\n", " geometry=geometry, atmosphere=atmosphere, wf_species='no2', wfaltitudes=heights, wfwidths=widths)\n", "\n", "wfhr = hr(wl).unstack('perturbation').wf_no2\n", "wfdo = do(wl).unstack('perturbation').wf_no2\n", "\n", "plt.plot(wfhr.isel(wavelength=0, los=0), wfhr.altitude, label='HR, Saskatoon')\n", "plt.plot(wfdo.isel(wavelength=0, los=0), wfdo.altitude, label='DO, Saskatoon')\n", "plt.plot(wfhr.isel(wavelength=0, los=1), wfhr.altitude, label='HR, Miami')\n", "plt.plot(wfdo.isel(wavelength=0, los=1), wfdo.altitude, label='DO, Miami')\n", "plt.title('Weighting functions from TEMPO line of sight')\n", "plt.xlabel('Weighting function dI/dn (photons.s$^{-1}$.nm$^{-1}$.cm$^{-2}$.sr$^{-1}$/cm$^{-3}$)')\n", "plt.ylabel('Altitude (km)')\n", "plt.legend()\n", "plt.show()" ] } ], "metadata": { "celltoolbar": "Raw Cell Format", "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.8" } }, "nbformat": 4, "nbformat_minor": 2 }