{ "cells": [ { "cell_type": "code", "execution_count": 2, "id": "f5515177-3e96-4ac4-871f-ba3bf56f74c0", "metadata": { "tags": [] }, "outputs": [], "source": [ "import xarray\n", "import numpy as np\n", "from sklearn.linear_model import ElasticNet, LassoLars, ElasticNetCV\n", "from sklearn.pipeline import make_pipeline\n", "from sklearn.preprocessing import StandardScaler\n", "import matplotlib.pyplot as plt\n", "from astropy.visualization import ImageNormalize, LogStretch, AsinhStretch\n", "\n", "%matplotlib inline" ] }, { "cell_type": "markdown", "id": "77867ea8-a1d0-4fed-a233-14cb2745e315", "metadata": {}, "source": [ "# Inversion Tests\n", "\n", "Some tests to see how easy it is to invert the MOXSI data" ] }, { "cell_type": "markdown", "id": "a33340b5-6f2e-4b77-b2da-dee9e6b1d2b0", "metadata": {}, "source": [ "Load the response matrix and EM cube" ] }, { "cell_type": "code", "execution_count": 3, "id": "259d3df4-fd7a-4fba-9c36-b3b76b892a90", "metadata": { "tags": [] }, "outputs": [], "source": [ "response_matrix = xarray.open_dataarray('moxsi_response_matrix.nc')" ] }, { "cell_type": "code", "execution_count": 4, "id": "78f7cd0d-515f-4b54-bf1d-6f8439b9627c", "metadata": { "tags": [] }, "outputs": [], "source": [ "response_matrix_total = response_matrix.sum(dim='spectral_order').rename({'pixel_fov': 'pixel_x'})" ] }, { "cell_type": "code", "execution_count": 5, "id": "6bca027e-29db-4b36-bfa3-354e36ae6f0f", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/html": [ "
<xarray.DataArray (pixel_x: 338, pixel_detector: 2000, log_temperature: 60)>\n",
"array([[[5.47814223e-40, 3.69993772e-39, 1.94958896e-38, ...,\n",
" 3.54270315e-33, 3.46808906e-33, 3.39052206e-33],\n",
" [5.37407903e-40, 3.64142754e-39, 1.92480694e-38, ...,\n",
" 3.57883643e-33, 3.50438533e-33, 3.42679047e-33],\n",
" [5.27135532e-40, 3.58307651e-39, 1.89881003e-38, ...,\n",
" 3.64502537e-33, 3.56380521e-33, 3.48082210e-33],\n",
" ...,\n",
" [1.73253895e-38, 5.44433530e-38, 1.44729630e-37, ...,\n",
" 3.76546405e-34, 3.67455789e-34, 3.58322216e-34],\n",
" [1.73662874e-38, 5.44834886e-38, 1.44631722e-37, ...,\n",
" 3.67828793e-34, 3.59475551e-34, 3.50992945e-34],\n",
" [1.74064531e-38, 5.45209437e-38, 1.44523028e-37, ...,\n",
" 3.64191502e-34, 3.55908754e-34, 3.47494412e-34]],\n",
"\n",
" [[5.58397589e-40, 3.75944844e-39, 1.97535564e-38, ...,\n",
" 3.50856419e-33, 3.43412174e-33, 3.35698097e-33],\n",
" [5.47814223e-40, 3.69993772e-39, 1.94958896e-38, ...,\n",
" 3.54270315e-33, 3.46808906e-33, 3.39052206e-33],\n",
" [5.37407903e-40, 3.64142754e-39, 1.92480694e-38, ...,\n",
" 3.57883643e-33, 3.50438533e-33, 3.42679047e-33],\n",
"...\n",
" [5.37407903e-40, 3.64142754e-39, 1.92480694e-38, ...,\n",
" 3.57883643e-33, 3.50438533e-33, 3.42679047e-33],\n",
" [5.47814223e-40, 3.69993772e-39, 1.94958896e-38, ...,\n",
" 3.54270315e-33, 3.46808906e-33, 3.39052206e-33],\n",
" [5.58397589e-40, 3.75944844e-39, 1.97535564e-38, ...,\n",
" 3.50856419e-33, 3.43412174e-33, 3.35698097e-33]],\n",
"\n",
" [[1.74064531e-38, 5.45209437e-38, 1.44523028e-37, ...,\n",
" 3.64191502e-34, 3.55908754e-34, 3.47494412e-34],\n",
" [1.73662874e-38, 5.44834886e-38, 1.44631722e-37, ...,\n",
" 3.67828793e-34, 3.59475551e-34, 3.50992945e-34],\n",
" [1.73253895e-38, 5.44433530e-38, 1.44729630e-37, ...,\n",
" 3.76546405e-34, 3.67455789e-34, 3.58322216e-34],\n",
" ...,\n",
" [5.27135532e-40, 3.58307651e-39, 1.89881003e-38, ...,\n",
" 3.64502537e-33, 3.56380521e-33, 3.48082210e-33],\n",
" [5.37407903e-40, 3.64142754e-39, 1.92480694e-38, ...,\n",
" 3.57883643e-33, 3.50438533e-33, 3.42679047e-33],\n",
" [5.47814223e-40, 3.69993772e-39, 1.94958896e-38, ...,\n",
" 3.54270315e-33, 3.46808906e-33, 3.39052206e-33]]])\n",
"Coordinates:\n",
" * log_temperature (log_temperature) float64 5.0 5.05 5.1 ... 7.85 7.9 7.95\n",
"Dimensions without coordinates: pixel_x, pixel_detector<xarray.DataArray (pixel_y: 338, pixel_detector: 2000)>\n",
"array([[8.88842748e-06, 8.26483954e-06, 9.25301489e-06, ...,\n",
" 8.91252732e-06, 8.67358830e-06, 8.86702947e-06],\n",
" [9.92176314e-06, 9.25198295e-06, 1.01512446e-05, ...,\n",
" 9.55712933e-06, 9.63087563e-06, 9.71864626e-06],\n",
" [1.16514876e-05, 1.11142538e-05, 1.17011280e-05, ...,\n",
" 1.09602735e-05, 1.11107251e-05, 1.10209396e-05],\n",
" ...,\n",
" [1.38433505e-05, 1.33900401e-05, 1.41949669e-05, ...,\n",
" 1.39063150e-05, 1.42248696e-05, 1.40559468e-05],\n",
" [1.26016401e-05, 1.21549025e-05, 1.30693955e-05, ...,\n",
" 1.26190121e-05, 1.27588297e-05, 1.26152542e-05],\n",
" [1.13154978e-05, 1.06820666e-05, 1.18868067e-05, ...,\n",
" 1.10680595e-05, 1.09213840e-05, 1.10947184e-05]])\n",
"Dimensions without coordinates: pixel_y, pixel_detectorElasticNet(alpha=1.1, l1_ratio=0.0001, max_iter=2000, positive=True)In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
ElasticNet(alpha=1.1, l1_ratio=0.0001, max_iter=2000, positive=True)
<xarray.DataArray 'simulated_dem' (pixel_y: 66, pixel_x: 54, log_temperature: 60)>\n",
"[213840 values with dtype=float64]\n",
"Coordinates:\n",
" hpc_longitude (pixel_y, pixel_x) float64 -136.9 -129.5 ... 247.9 255.3\n",
" hpc_latitude (pixel_y, pixel_x) float64 -669.7 -669.7 ... -188.7 -188.7\n",
" * log_temperature (log_temperature) float64 5.0 5.05 5.1 ... 7.85 7.9 7.95\n",
"Dimensions without coordinates: pixel_y, pixel_x\n",
"Attributes:\n",
" bunit: cm-5\n",
" wcsaxes: 2\n",
" crpix1: 169.5\n",
" crpix2: 169.5\n",
" cdelt1: 0.0020555555555556\n",
" cdelt2: 0.0020555555555556\n",
" cunit1: deg\n",
" cunit2: deg\n",
" ctype1: HPLN-TAN\n",
" ctype2: HPLT-TAN\n",
" crval1: 0.0\n",
" crval2: 0.0\n",
" lonpole: 180.0\n",
" latpole: 0.0\n",
" mjdref: 0.0\n",
" date-obs: 2020-11-09T17:59:57.340\n",
" mjd-obs: 59162.749969213\n",
" rsun_ref: 696000000.0\n",
" dsun_obs: 148154617444.64\n",
" hgln_obs: 0.0\n",
" hglt_obs: 3.4233542990553ElasticNet(alpha=0.05, fit_intercept=False, l1_ratio=2.5e-05, max_iter=2000,\n",
" positive=True)In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. ElasticNet(alpha=0.05, fit_intercept=False, l1_ratio=2.5e-05, max_iter=2000,\n",
" positive=True)