From ae822529c5e7b78bf86e30bfc8030217f29eff2f Mon Sep 17 00:00:00 2001 From: Kyle Conroy Date: Wed, 16 Mar 2022 15:35:30 -0400 Subject: [PATCH] implement simple boxcar Background subtraction * requires exposing some internal methods from Boxcar extract to re-use here * adds and uses +/- offset support to traces * updates the notebook with a basic use-case --- .../jwst_boxcar/boxcar_extraction.ipynb | 385 ++++++++++++++++-- specreduce/background.py | 130 ++++++ specreduce/extract.py | 118 +++--- specreduce/tracing.py | 17 + 4 files changed, 567 insertions(+), 83 deletions(-) create mode 100644 specreduce/background.py diff --git a/notebook_sandbox/jwst_boxcar/boxcar_extraction.ipynb b/notebook_sandbox/jwst_boxcar/boxcar_extraction.ipynb index 1ec8e072..078a19aa 100644 --- a/notebook_sandbox/jwst_boxcar/boxcar_extraction.ipynb +++ b/notebook_sandbox/jwst_boxcar/boxcar_extraction.ipynb @@ -22,7 +22,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": { "slideshow": { "slide_type": "fragment" @@ -45,6 +45,7 @@ "\n", "from specreduce.extract import BoxcarExtract\n", "from specreduce.tracing import FlatTrace\n", + "from specreduce.background import Background\n", "\n", "import os\n", "import tempfile\n", @@ -65,7 +66,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -83,9 +84,17 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "DEBUG:jwst.datamodels.util:Opening /var/folders/gj/z56ys0mx1159ky517lwbwhcr0002vj/T/nirspec_fssim_d1_s2d.fits as \n" + ] + } + ], "source": [ "# use a jwst datamodel to provide a good interface to the data and wcs info\n", "s2d = datamodels.open(s2dfile)\n", @@ -94,9 +103,32 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0.5, 1.0, 'slit[0]')" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ "# display s2d image\n", "norm_data = simple_norm(image, \"sqrt\")\n", @@ -107,11 +139,31 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": { "scrolled": false }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "data": { + "image/png": "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iIhcl5lFewCZNnGKiIiIBBgVNBEREZEAo4ImIiIiEmBU0EREREQCjAqaiIiISIBRQRMREREJMCpoIiIiIgFGBU1EREQkwKigiYiIiAQYFTQRERGRAKOCJiIiIhJggupanBK3jh07xtatW8mfPz+nTp1i+/btnDlzhtDQUEJDQ8mUKRPFixf3OqaIiEjQUUGTaLVt25aZM2fGOE/NmjV57bXXKFWqVAKlEhERCX4qaHJN69evZ+bMmXTu3JkiRYqQMmVKChUqROrUqbl48SIXLlxg3bp1vPbaa9xzzz3MnDmTWrVqeR1bREQkKJhzzusMcaZ06dJu3bp1XsdIlM6cOUPy5MkJCfHtlti4cWMWL17Mzp07SZcuXbSvO3LkCNWrV2f79u3MnDmTatWqJVRkERGRRM3M1jvnSl/rOR0kkMRNnjyZXLlykSpVKkqWLMnx48dZvnw5M2bM4Omnn46xnAHceuutzJ07l5w5c1K9enXuvPNO+vXrx759+xLoHYiIiASfoChoZtbAzEYfO3bM6yiJymuvvUaLFi3Ili0bvXr1YvPmzTRr1oyGDRuSL18+nnzyyVgt57bbbmPlypWMGDGCrFmz0rdvX3Lnzs2rr74az+9AREQkOGkTZxI1atQoHnnkEVq1asW4ceNIlSoVgwcPpmfPnmTNmpXly5dz++2339Cyf/75Z5555hm++uortm3bdsPLERERCWYxbeJUQUuCZs+eTYMGDahTpw4zZswgWTLfsSLOOd5//32qVKlCoUKFbmod+/bt44477qBZs2ZMmDAhLmKLiIgEFe2DJpdt2LCBFi1aUKJECT7//PPL5QzAzOjSpctNlzOAbNmy0a1bNz7++GO2bNly08sTERFJSjSCFuQuXLjACy+8QJYsWahcuTINGjQgVapUrFq1imzZssXrug8fPsztt99O6tSpadOmDalSpWLp0qVERETw2muvkTp16nhdv4iISCCLaQRN50ELYs45nnzySUaOHHl5Wp48eZg7d268lzOAjBkzMnv2bAYPHszw4cO5ePEixYoV4+2332bRokVMnjyZggULxnsOERGRxEYjaEEsMjKShg0b0qNHDyIiIoiMjGTo0KEJUs6uduzYMUJCQggPD2fOnDm0bduWtGnTsmHDBm699dYEzyMiIuI1HSSQRDVs2JB169bx+++/X7GvWSBYu3YtFStW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efJ4HUXiSefOnSlatCg9e/bkzJkzXscREZEgExQFLdBOs7Fy5UrKly+PmXkdReJJsmTJGDp0KL/88guDBg3yOo6IiASZoChogeTgwYP88ssvVKhQwesoEs9q165N69at6du3L+PGjfM6joiIBBHtwR7HLu1/poKWNIwbN47Dhw/TuXNnzIwOHTpo5FRERG6aRtDi2KpVq0iWLBmlSpXyOookgJQpUzJ16lSqVq1Kx44dadmyJUeOHPE6loiIJHIqaHHs+++/p1ChQqRJk8brKJJA0qRJw7x583j11VeZOnUqVapU4c8///Q6loiIJGIqaHFs+/btFCxY0OsYksBCQ0N54YUXmDNnDtu2baNRo0acOnXK61giIpJIqaDFoQsXLrBjxw4KFCjgdRTxSI0aNfjoo49YunSpTmQrIiI3LCgOEjCzBkCD/Pnze7L+EydOsGnTJnLkyMHZs2c1gpbEPfjgg/z+++/06tWLYsWK8b///c/rSCIiksgExQia1+dBa9euHZUqVWL58uUAGkETevTowUMPPUSfPn0YNmwYR48e9TqSiIgkIkFR0Ly2detWABU0uczMGD16NFWqVOGZZ54hS5YsdOzYkUOHDnkdTUREEgEVtDhwaeRu3bp1hIWFkTVrVo8TSSBIlSoVCxcuZM2aNTzyyCN8/PHHFCpUiGnTpnkdTUREApwKWhxIly4d4CtoxYsX14lK5TIzo0yZMrz99tt8++235M+fn+bNmzN16lSvo4mISABTQYsDUfd9K126tIdJJJDdeeedzJ8/n7Jly9KyZUtmzpzpdSQREQlQKmhxIGpBu/feez1MIoEubdq0fPXVV5QoUYLGjRvz0UcfeR1JREQCkApaHLi0iROgYcOGHiaRxCB9+vR88803VKlShXbt2tGrVy+OHz/udSwREQkgKmhxIOoIWqpUqTxMIolFunTpmD17Np06deKNN96gQIECzJgxw+tYIiISIFTQ4kBYWBgAvXv39jiJJCYpU6ZkzJgxrF27lly5ctGkSRPGjh3rdSwREQkAKmhx4NJRm7169fI4iSRGpUuXZvHixdSuXZuHH36Y119/3etIIiLisaAoaGbWwMxGHzt2zOsoIjckLCyMGTNm0LJlS5577jl69uyp63iKiCRhQXEtTudcJBBZunTpzl5nEblRKVKkYOLEiWTMmJHBgwdz+PBhRo8e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h7fffpvbbruNxo0bU62azo0tIklHTPug5U3AHCIihIaGMmLECCpUqEDFihVJnz49586dY8SIEUydOpVGjRp5HVFEJEFoT1wRCSjly5enT58+tGvXju3bt3PgwAFKly5Ny5Yt+fLLL72OJyKSIGJ1qScRkYT08ssvX/F45syZ1KxZk0aNGtGwYUMeeOABWrRoQZo0aTxKKCISvzSCJiIBL3PmzKxdu5Z+/fqxcuVK/vOf/1CjRg2OHDnidTQRkXhx3YJmZlPNrL6ZqcyJiGdSpEjB//73P/bv38+kSZPYuHEj99xzD2vXrvU6mohInItN6XoHaA1sN7PXzKxQPGcSEYlWSEgIzZs3Z968efz1119UqFCBMWPGeB1LRCROXbegOee+cc61AUoCvwHfmNkKM/uPmSWP74CxYWYNzGz0sWO6NKhIUlG5cmU2b95MzZo1eeSRR5g3b57XkURE4kysNluaWUagA/Awvss7vYWvsH0db8n+BedcpHOuy6ULMotI0pAhQwYmT57MnXfeSfPmzdmyZYvXkURE4kRs9kGbBiwF0gANnHMNnXOfO+e6AWnjO6CISEzCw8OZOXMmqVOn5v7772fNmjWcPn3a61giIjclNiNo7zvn7nTODXTO7YPLF0rHOVc6XtOJiMRC7ty5iYyM5I8//qBcuXLcdtttDBkyhLNnz3odTUTkhsSmoA24xrSVcR1ERORmlClThu3btzN58mTuvfdeevToQZ06dThx4oTX0URE/rVoC5qZZTWzUkBqM4sws5L+W1V8mztFRAJKjhw5aNasGbNmzWL8+PEsWbKEKlWq8O2333odTUTkX4lpBO0+YDCQExgKDPHfngFejP9oIiI3rn379syYMYPdu3dTqlQpunfvztGjR72OJSISK9EWNOfch865akAH51y1KLeGzrmpCZhRROSG1K9fn23btvHoo48ycuRIcuXKRZMmTdi0aZPX0UREYhTTJs62/rt5zeyZq28JlE9E5KbccsstjBgxgnXr1tGmTRuWLVtGxYoViYyM9DqaiEi0YtrEGeb/My0Qfo2biEiiERERwXvvvcemTZsoUqQITZs2ZdGiRV7HEhG5pmTRPeGcG+X/8+WEiyMiEr+yZcvG119/TYUKFWjSpAmLFi2iePHiXscSEblCbE5U+7qZpTOz5GY238wORtn8KSKS6GTIkIFZs2aR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EZHgV6NGDbZv3860adN49NFHmTJlClmzZqVx48ZkzpyZOXPmeB1RJM4ERUETEZGkISQkhMaNGzNy5EiaNGnCmjVreP/998mUKRNdu3bl5MmTXkcUiRMqaCIikmilSJGChx9+mPfff5/ff/+de+65hy1btngdS+SmqaCJiEiiV6lSJT7//HN+//13evfu7XUckZumi6WLiEhQaNGiBatXr2b48OEcPnyYPXv2cODAAcqVK0d4eLjX8UT+FY2giYhI0Gjbti3nzp2jVq1alChRglq1alGsWDE2b97sdTSRf0UFTUREgkaJEiV46KGHOHPmDE8++SRffvklZ8+epUmTJpw7dw7nHBs3buT777/3OqpIjLSJU0REgoaZMWHChH9Ma9CgAW+++SbLly9nxowZpEqVivnz53PPPfd4lFQkZhpBExGRoFa/fn1q1KhBr169mDFjBn379iVXrlzUqVOHefPmeR1P5Jo0giYiIkHNzIiMjGTUqFGkTZuWhx9+mIcffpj69etTr149XnjhBSpUqEDt2rVJlky/FiUw6CdRRESCXurUqXnqqacuP86ZMydLly6ldevWDBgwAIC77rqLZcuWoavSSCAIik2cuhaniIj8W+nSpSMyMpJDhw4xceJEtm7dSqNGjZgzZw5nz571Op4kcUFR0HQtThERuRFmRsaMGWndujXvvvsuGzdupG7duhQrVoy//vrL63iShAVFQRMREblZDz/8MAcOHOCjjz7ip59+urzpU8QL2gdNRETEL2XKlLRt25YFCxYwaNAgNm3axIULF6hYsSL//e9/dRCBJBj9pImIiFzlnXfeISwsjNmzZ5MhQwZeeukltm3bxsSJEzEzr+NJEqCCJiIicpVUqVIxfPhwhg8fDsArr7xC7969yZo1K9myZQOgbt263HXXXV7GlCCmgiYiInIdL774IqtXr2bYsGGXp/Xq1Yt27drx6quvkiNHDg/TSTDSQQIiIiLXYWZMnz6drVu3cvToUfbv30+vXr347LPPiIiIYNOmTV5HlCCjgiYiIhILISEhFCpUiPTp03PbbbcxaNAgvv32W5IlS0aJEiVIly4dBQsW5IMPPvA6qgQBFTQREZEbVKRIEdauXcvAgQPp2LEjt956Kx07dqRdu3Zs2bLF63iSiKmgiYiI3IQcOXLw/PPP8+abb7J8+XKee+45Jk+ezF133cWzzz7rdTxJpFTQRERE4khoaCivvfYau3btonPnzgwdOpRnn32WvXv3eh1NEhkVNBERkTiWKVMm3n33XR566CGGDRtGnjx5qFixImvXrvU6miQSKmgiIiLxIDQ0lAkTJrB9+3Z69OjBjh076NixIxcuXPA6miQCKmgiIiLx6I477mDgwIG89dZbbN68mffee8/rSJIIqKCJiIgkgObNm1O7dm2effZZVq9e7XUcCXBBUdDMrIGZjT527JjXUURERK7JzPj444/JkSMHtWvXZuDAgcydO5eLFy+yd+9eJk+erM2fcllQFDTnXKRzrkv69Om9jiIiIhKtzJkzs3DhQkqUKMGLL75InTp1aNmyJREREbRo0YIaNWpw4sQJr2NKAAiKgiYiIpJY5M6dm8WLF7Nv3z4effRRJk+eTI4cOXjjjTdYtmwZlSpVYtiwYezfv9/rqOIhFTQREREPZM2alREjRvDjjz+yfv16evToweeff8758+d55plnqFixIqdPn/Y6pnhEBU1ERMQjISEhFC5cGDMDoGnTpmzevJlZs2axY8cO6tatS7t27Xj33XdV1pIYFTQREZEAU69ePXr06MHu3btZsGABjz32GA0bNmTcuHEcPXrU63iSAFTQREREAtAbb7zB9u3b2bVrF++99x5ff/01nTp1olq1ahw5csTreBLPVNBEREQCmJnRtWtX1q1bx6RJk9iyZQvNmzfnt99+4+LFi17Hk3iSzOsAIiIicn2lSpWiVKlSnDx5ko4dO5IvXz5y5szJlClTKFu2rNfxJI5pBE1ERCQRad++Pdu3b+ftt98mWbJkVKpUicGDB2s0LciooImIiCQyt99+O926dWPdunXUr1+fnj170rx5c86fP+91NIkjKmgiIiKJVMaMGZkyZQpvvPEGU6dOpWnTpgwYMIDdu3d7HU1ukvZBExERScTMjB49epA8eXJ69uzJl19+yZQpU2jdujXh4eF07dr18nnWJPHQCJqIiEgQePLJJ9m3bx+TJk3ihx9+oFevXjz66KPMmzfP62hyA1TQREREgkTGjBlp3rw5hw4d4siRI2TPnp033njD61hyA1TQREREgkx4eDi33HIL3bp1Y/78+WzduvXyc845/vzzTw/TSWyooImIiASpDh06EBoayptvvkmLFi1o3749efPm5dZbb2XcuHFs3bqVY8eOeR1T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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ "# pipeline 1d extraction (for comparison)\n", "jpipe_x1d = Table.read(x1dfile, hdu=1)\n", @@ -141,9 +193,32 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0.5, 1.0, 'slit[0] slice')" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ "# blow up of the region to be extracted\n", "plt.figure(figsize=(15, 15))\n", @@ -153,20 +228,46 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "# extraction parameters based on image above\n", "ext_center = 27\n", - "ext_width = 4" + "ext_width = 4\n", + "\n", + "bkg_sep = 4\n", + "bkg_width = 2" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0.5, 1.0, 'Cross-dispersion Cut at Pixel=70')" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAmUAAAF1CAYAAACpsZ0hAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAABtZUlEQVR4nO3deXgUVdbA4d9JCAn7ruxrAAXEIEHFFQQxosCIKAFBkVFcx30Bx20cx2XAT3FDURkUlUWUAQdEVnFUhCQYEUQgQBISQPYlkIQs9/ujO0zAJKQrXV1VcN7n6Sed6qo6p+q25nLr1C0xxqCUUkoppZwV5nQCSimllFJKO2VKKaWUUq6gnTKllFJKKRfQTplSSimllAtop0wppZRSygW0U6aUUkop5QLaKVNKBUxEWoqIEZFK/t+/EpFbnM6riIi8IyJPOZ2H24jIWhHpUcF9jBCR74KTkVKqOO2UKeVCIjJURBJFJEtEtvs7PZc4nVdpjDFXG2M+dDqPIsaYO40xf7dj3yLSTkQ+E5HdInJARFaLyEMiEl6ObZ8VkY8rEPukHSIR+UZEcvzfnd0i8oWINAIwxnQ0xnxjNb5VItLcn0/xlxGRh4utM1RE0kTksIj8W0TqhjpPpZymnTKlXEZEHgJeA14AzgSaA28DA0pZv1LIknMJp45ZRNoAK4CtwDnGmFrADUAsUMOJnEpxrzGmOtAOqA286mQyxph0Y0z1ohdwDlAIfA4gIh2Bd4Hh+L7zR/B955U6rWinTCkXEZFawHPAPcaYL4wxh40xecaYL40xj/rXeVZEZorIxyJyEBghIo1FZI6I7BWRFBG5vdg+z/ePuh0Ukd9F5P/8y6P8+9gjIvtFJEFEziwlr3ARGecfedkMXHPC59+IyG3+99Eissw/irRbRKYXW8+IyH0istn/2VgRCSv2+UgRWSci+0TkaxFpccK294jIRmCj+LwqIjv9x/aLiHTyrztZRJ4vtu3t/vOy13+eGp+w3ztFZKP/PLwlIlJKE/0N+MEY85AxZjuAMWa9MWaoMWa/iPQQkYwTzk2qiPQWkTjgCWCwf6To51LO9WgR2SQih0TkVxG5zr/8bOAdoLt/+/2l5HiMMWYvvo5P0XlJFZHe/vfzROSVYnGnicgk//taIvKB+EZpM0Xk+fKMBAbgZuBbY0yq//ebgC+NMd8aY7KAp4CBIuKmjq5SttNOmVLu0h2IAmadZL0BwEx8oyCfANOADKAxMAh4QUSu8K87HhhvjKkJtAFm+JffAtQCmgH1gDuB7FLi3Q5cC3TBNyo0qIzc/g4sAOoATYE3Tvj8Ov8+zvMfx0gAERmAr9MyEGgA/BeYesK2fwIuADoAfYDL8I0G1QJuBPacmIz/PLzo/7wRkIbvfBV3LdAN6Oxf76pSjq03vvMeMGPMfHyjn9P9I0bnlrLqJuBSfMf0N+BjEWlkjFmHr42W+7evfbKYIlIfuB74qYSPRwLDReQKEbkJOB+43//ZZCAfiMbX5n2A20qJsdrfmS3p9YfRLn+H92ag+OXujsCxTqoxZhNwFF/bKnXa0E6ZUu5SD9htjMk/yXrLjTH/NsYUAvWBi4HHjTE5xphk4H18f/gA8oBoEalvjMkyxvxYbHk9INoYU2CMSTLGHCwl3o3Aa8aYrf7RlxfLyC0PaAE09udzYg3Uy8aYvcaYdHyXaYf4l98JvGiMWec//heAmOKjZf7P9xpjsv1xagBnAeLfbnsJ+dwETDLGrDLG5AJj8I02tSy2zkvGmP3+nJYCMaUcWz2gpBhBY4z5zBizzRhTaIyZDmzE12EKxOv+kbSf8eX7UAlxdgB34escjQduNsYc8o+W9gUe8I/U7sR3+TO+lHw7G2Nql/K6u4RNLsF3ibJ457Y6cOCE9Q7grkvCStlOO2VKucseoH45aqa2FnvfGNhrjDlUbFka0MT//s/4Rhx+81+ivNa/fArwNTBNRLaJyD9FJEJELpX/FWOvLRZj6wn7L81jgAArxXe338gyck/z7xt8HbnxRaMswF7/fpqUtK0xZgnwJvAWsFNEJopIzRLyaVw8X//lsT0n7HdHsfdH8HUSSrIH32ibbUTkZhFJLnYeOuHreAfiPn+nqIkx5iZjzK5S1vsSCAfWF+s8twAigO3FcngXOCPggynZLcDn/nYokgWc2HY1gUModRrRTplS7rIcyMV3ma4sptj7bUDdE+pvmgOZAMaYjcaYIfj+qL4MzBSRav5atb8ZYzoAF+G7hHezMea/xYqyO/r3tx3fZc7i+y85MWN2GGNuN8Y0Bu4A3haR6GKrnLifbf73W4E7ThhpqWKM+aGU48YY87oxpiu+y5ntgEdLSGkbvo4GACJSDd+IV2Zpx1CGRfguB5bmMFC1WKxwfJdij6Vc1s79o4LvAfcC9fyXKNfg65yedHsL/gGsAxqJSNGI5VZ838H6xdqhZrHvwok5r5U/3llZ9HrnhHWr4Lsx4sQ7ddcC5xZbrzUQCWwIylEq5RHaKVPKRYwxB4CngbdE5E8iUtU/enW1iPyzlG22Aj8AL4qveL8zvtGxjwFEZJiINPBf6tzv36xQRHqKyDn+jsNBfJcDC0tJbQZwn4g0FZE6wOjSjkFEbhCRpv5f9+HrSBTf76MiUkdEmuGrYSq6EeAdYIz47sQrKja/oYw43UTkAhGJwNcZyikl/6nArSISIyKR+C6LrihWZB6IZ4CLxHeDQkN/HtHiu2GiNr5ORJSIXOPP60l8nYsivwMtpdjNDSeohu987fLv+1b8RfrFtm8qIpUt5H4cEbkMuBXfZe5bgDdEpIn/EvAC4BURqSkiYSLSRkQuL2k//mk2qpfyuvOE1a/D951YesLyT4B+/lHaavhudvnihNFfpU552ilTymWMMa/gqwF6Et8f5634Rk7+XcZmQ4CW+EaFZgHPGGMW+T+LA9aKSBa+2qF4f01WQ3x1PQfxjZYsw3dJsyTv4bvU+TOwCviijFy6ASv88eYA9xtjNhf7fDaQBCQDc4EP/Mc9C99I3jTx3VW6Bri6jDg1/Xntw3d5cg8w9sSV/OfhKXx3IW7Hd7NDifVRJ+MvQO+O71yvFZED/v0mAof8neq78dX0ZeLrLBa/G/Mz/889IrKqhP3/CryCb8T0d3xTR3xfbJUl+EaVdojIbivHAOC/zPsRvqkzMo0x/8XXDv8qVohfGfgV3/mdSXAu294CTDHGnDjiuRZfTeEnwE58tWQl1aMpdUqTE/7bUEop24iIAdoaY1KczkUppdxGR8qUUkoppVyg3J0yEZkkvkka1xRbNlZEfvPPUzPLX1NR9Fy8bP8dRMnFiz1FpKv4JnlMEZHX/UPliEhdEVkovgkcF/rrVpRSSimlTguBjJRNxlebUtxCoJMxpjO+AtcxxT7bZIyJ8b+KF3tOwDcRZVv/q2ifo4HFxpi2wGLKKCRWSnmTMUb00qVSSpWs3J0yY8y3+OYNKr5sQbFJLn/EN3t3qcT3UNyaxpgf/YWeH/G/W/8H8L/bpD/k5FMCKKWUUkqdMoJZUzYS+KrY761E5CfxPQPvUv+yJhx/J1IG/5vA8cxis3HvwDfjs1JKKaXUaeFks4aXi4j8Fd9z0j7xL9oONDfG7BGRrsC/i+YeKg9jjPHfpVVavFHAKIBq1ap1Peuss6wnr5RSyn5Hj0JhadPg2SwsDCpbm9rtaMFRCo1DeTsoTMKoHG5xOjyPtnWoJCUl7TbGNCjpswp3ykRkBL6ZwHsVzT3jf75crv99kohswjfbdibHX+Jsyv9m1f5dfA/d3e6/zLmztJjGmInARIDY2FiTmJhY0cNQSillpw0boHppT6+yWVYWtLP2bPMNuzdQPdKhvB2UlZtFu/oWnwfv0bYOFREp9TF1Fbp8KSJx+J5z198Yc6TY8gb+WcKLHpfRFtjsvzx5UEQuLDZB4Wz/ZnPwTSyI/2fRcqWUUkqpU165R8pEZCrQA9/DkjPwPW5kDL5HiCz0z2zxo/9Oy8uA50Sk6LEtdxpjim4SuBvfnZxV8NWgFdWhvQTMEJE/45ud+8YKHZlSSimllIeUu1Pmf6DxiT4oZd3P8T16pKTPEjn+WW5Fy/cAvcqbj1JKKaXUqURn9FdKKaWUcgHtlCmllFJKuYB2ypRSSimlXEA7ZUoppZRSLqCdMqWUUkopF9BOmVJKKaWUC2inTCmllFLKBbRTppRSSinlAtopU0oppZRyAe2UKaWUUi4zqG89BvWt53QaKsS0U6aUUspef/87vPWWM7FffdVy7L8v+ztvJTiUt4Ne/fFV68ft0bZ2i3I/+1IppZSyZP16OHjQmdibN0NenqVN1+9Zz8FcZ/Ju1LjAkbgAm/duJq/Q2jnzalu7hRhjnM6hQmJjY01iYqLTaSillCrLhg1QvbozsbOyoF07S5tu2L2B6pEO5e2grNws2tW3ds682tahIiJJxpjYkj7Ty5dKKaWUUi6gnTKllFL2evppGD/emdhjx1qO/fTSpxm/wpm8n368Jk8/XtOR2GO/H2v9uD3a1m6hNWVKKaXstXWrc3VG27ZBfr6lTbce3MrBHGfy/vWXCEfiAmzL2kZ+gbVz5tW2dgutKVNKKWU/j9YZOVVTVjQdxsx5e0IeG7SmzE5aU6aUUkop5XLaKVNKKWWvMWPglVecif3ii5Zjj1k0hleWO5S3g17874vWj9ujbe0WWlOmlFLKXnv2wIEDzsTet8/y3FV7svdwIMeZvFtHO1cbtS9nH3kFFuf78mhbu4XWlCmllLKfR+uMdJ4yCzza1qGiNWVKKaWUUi6nnTKllFL2euQRePllZ2I/95zl2I8seISXv3cm7+GDsrk89jdHYj+37Dnrx+3RtnYL7ZQppZSyV3Y25OQ4Ezsnx3Ls7LxscvKdyXvNz0dJ2RDG3j17Qx47Jz/H+nF7tK3dQmvKlFJK2c+jdUZO1ZSd3ex3Dh44wL8XHKDbhd1CHl9ryuyjNWVKKaWUh+T6R3xSNqQ4nIkKJZ0SQymllL0eeMA3XcGLL4Y+9tNP+6ZJ+PDDgDd9YP4D7Mvex4u9Q5t3Xl4eublHAWc6ZU8vfZq8gjw+vC7wc+bVtnYL7ZQppZRSLrItYxvwE6AjZacbrSlTSillP4/WGTlRU/bt0m8ZMmAIDc5oQLXq1fg++fuQxgetKbOT1pQppZRSHpG2JQ2Anlf2JD01ndzcXIczUqGinTKllFL2uuce+NvfnIn9xBOWY98z9x7+tiz0eaenphMW9gmbNv6NwsLCY520UHli8RPWj9ujbe0W2ilTSillrypVICrKmdhRUZZjV4moQlSl0OedlppG5cqtOXr0DCD0dWVRlaKsH7dH29otAir0F5FJwLXATmNMJ/+yusB0oCWQCtxojNknIgKMB/oCR4ARxphV/m1uAZ707/Z5Y8yH/uVdgclAFWAecL/xetGbUkqd7saN89UZOeHpp311RhaM6zOODbtDn3d6ajpRUVFUqeLrYIS6U/b05U+TlWvtnHm1rd0i0JGyyUDcCctGA4uNMW2Bxf7fAa4G2vpfo4AJcKwT9wxwAXA+8IyI1PFvMwG4vdh2J8ZSSimlTmnpqelERkURHh5OoyaN9A7M00hAnTJjzLfAic98GAAUTQryIfCnYss/Mj4/ArVFpBFwFbDQGLPXGLMPWAjE+T+raYz50T869lGxfSmllPKqUaPgqaecif3YY5Zjj/pyFE8tDW3e+/ft58D+A0RViQQgul00mzZsCmkOjy18zPpxe7St3SIY85SdaYzZ7n+/AzjT/74JsLXYehn+ZWUtzyhhuVJKKS+rVw9EnIldpw4cPWpp03pV6iGENu/01HQAOp5zkNbR9TmcFc1nUz/DGIOE6BzWiarD0QJr58yrbe0WQZ081hhjRMT2GjARGYXvkijNmze3O5xSSqmKePFF5+qMxoyxXGf0Yu8XQ15Tlpbqu9PywdG76NCpAZMnRpN1KIvfd/xOw0YNQ5LDmEvHWK8p82hbu0Uw7r783X/pEf/Pnf7lmUCzYus19S8ra3nTEpb/gTFmojEm1hgT26BBgyAcglJKKeW8opGy5i18Aw6t27YGYNPG0F7CVM4IRqdsDnCL//0twOxiy28WnwuBA/7LnF8DfUSkjr/Avw/wtf+zgyJyof/OzZuL7UsppZRX3XqrbxTDCQ8+aDn2rbNvZczi0OadlppGvfr1ePCuZtw+rA7R7aKB0N6B+eDXD1o/bo+2tVsEOiXGVKAHUF9EMvDdRfkSMENE/gykATf6V5+HbzqMFHxTYtwKYIzZKyJ/BxL86z1njCm6eeBu/jclxlf+l1JKKS9r1gz27HEmduPGluuMmtVsxp5Koc07PTWd5i2bs2+vb8ykUeNGVK1WNaTF/o2rN7ZeU+bRtnYLffalUkop+3n0eYihfvZl987dOS/2PH7fMQ2AmfP2cPXlV1OnTh0+/fenIctDn31pH332pVJKKeVyeXl5ZG7NpHnL429gi24bTcpGnavsdKCdMqWUUvYaNgweecSZ2H/5i+XYw74YxiMLQ5f3toxtFBQU0KJVi+OWt2nXhsytmRw5fCQkefxl3l+sH7dH29otgjolhlJKKfUH7dvD7t3OxG7d2nKdUft67dl9JHR5F02H0bxlcy6+PPfY8qJi/80pm+l0bifb82hdtzVH8y3WZnm0rd1CO2VKKaXs9dRTzs1d9eCDlueueuryp0I6T1nRdBgtWrbgokv/l3Obtm0A37QYoeiUPXjhg9bnKfNoW7uFXr5USimlXCA9NZ3KlSvTsPHxk8S2atMKEdFnYJ4GdKRMKaWUveLj4dAheO+90Me+6y7Iz4e5cwPeNH5mPIdyD/Fe/9DknZaaRtPmTQkPD2fYwLoAfPzFXqKiomjeonnIOmV3zb2L/IJ85t4U+Dnzalu7hXbKlFJK2Ssmxrk6o44dLdcZxTSMYffh0OWdnppOi5a+Iv+cnOOfH9mmXZuQ3YHZsUFH6zVlHm1rt9BOmVJKKXuNHu1cndG991quMxp9yejQ1pRtSadL1y4lfhbdLpofvv2BwsJCwsLsrTy69/x7rdeUebSt3UJrypRSSimH7d+3n/3799O8VfMSP49uF01OTg6ZW0t8JLQ6RehImVJKKXtdf71vBONf/wp97Ntv99UZff11wJteP+N6snKz+Nef7M+7+J2XJSn+DMxmLZrZmsvtc24nvzCfr4cHfs682tZuoZ0ypZRS9ureHXbtciZ2166Qm3vy9UrQvWl3dh0OTd7F5ygD6B2Xc9znxafF6HllT1tz6dq4K7n51s6ZV9vaLbRTppRSyl6PPOJcndGdd1quM3rkokdCVlNWNFLWvIWvU3bnfYeP+7xe/XrUrl07JMX+d8beab2mzKNt7RZaU6aUUko5LC01jbr16lKjZo0SPxcR3x2YOlfZKU1HypRSStmrf3/fCMbHH4c+9ogRvjqjJUsC3rT/1P5kHc3i44H25118OgyAQX3rATBz3p5jy6LbRbN04VLbcxnx7xHkF+az5JbAz5lX29ottFOmlFLKXr16wc6dzsS+5BLLdUa9WvVi5+HQ5J2+JZ0usSVPh1Ekul000z+ezoH9B6hVu5ZtuVzS/BLrNWUebWu30E6ZUkope91/v3N1RrfdZrnO6P4L7w9JTVl+fj4ZWzMYMGhAmesV3YG5aeMmzut2nm353HbebdZryjza1m6hNWVKKaWUg7ZlbKOgoIAWrUqeDqNI0R2YWld26tKRMqWUUva6+mo4fBimTQt97GHDfHVG334b8KZXf3I1h48eZtoge/M+cTqM0jRv2ZxKlSqxKWWTrfkM+2IY+YX5fHtr4OfMq23tFtopU0opZa9+/eD3352J3bu35Tqjfu368XuW/XmXNHHstddl/2G9iIgIWrZuyaYN9nbKerfubb2mzKNt7RbaKVNKKWWvu+92rs5oxAjLdUZ3d7s7JDVlaVvSiIiIoGHjhseWjbj9SInrRreLtv3y5YiYEdZryjza1m6hNWVKKaWUg9JS02javCnh4eHHlmUfEbKPyB/WjW4XTermVPLy8kKZogoRHSlTSillr9694cgRmDkz9LEHD4aCAvjhh4A37f1Rb47kHWHmjfbmfeIcZQDDB9UFjp+nDHzF/nl5eaSnph8r/A+2wTMHU1BYwA9/DvycebWt3UI7ZUoppew1eLBzdUb9+1uuMxrccXBoasq2pBNzXky51i0+LYZdnbL+7fpbrynzaFu7hXbKlFJK2ev2252rM7rpJst1Rrd3vd32mrL9+/azf//+k06HUaT4tBh9+vaxJaebOt9kvabMo23tFlpTppRSSjlka9pW4OTTYRSpVbsWDc5owKaN9t6BqZyhI2VKKaXs1aMHZGfDrFmhjz1okK/OaMWKgDftMbkH2XnZzIq3L++iOcrKO1IG9t+BOWjGIAoKC1hxe+DnzKtt7RbaKVNKKWWvESNgxw5nYt9wg+U6oxExI9hxyN68i+Yoa97i+JGyG24qeUoMgDbt2vCfL/6DMQaRP96hWVE3dLyB3DyLtVkebWu30E6ZUkope40Y4Vyd0eDBluuMRsSMsL2mLC01jbr16lKjZo3jlg++6Y+TxxaJbhvN/v372btnL/Xq1wt6ToM7DrZeU+bRtnYLrSlTSillr7w838tjsfMK8sgrsDfv9C1/nA4DYO+eMPbuKflPdNEdmHZdwqzQcXu0rd1CR8qUUkrZ68ornaszGjLEcp3RlVOutL+mbEsaMV1j/rB81PA6wB/nKYPjO2UXXHRB0HMa8vkQ6zVlHm1rt9BOmVJKKXvddhts3+5M7CFDICfH0qa3nXcb2w/Zl3d+fj4ZWzPoP6h/QNs1adaEqKgo20bKhnQaQk6+tXPm1bZ2C+2UKaWUstewYc7VGV1/veU6o2Gdh9laU7YtYxsFBQUlXr4sS1hYGK2iW9k2Lcb1Ha63XlPm0bZ2iwrXlIlIexFJLvY6KCIPiMizIpJZbHnfYtuMEZEUEVkvIlcVWx7nX5YiIqMrmptSSikXOHLEd0nLCdnZlmMfyTtCdp59eRdNh1HeOcqKi24XzaYN9nTKsvOyrR+3R9vaLSo8UmaMWQ/EAIhIOJAJzAJuBV41xowrvr6IdADigY5AY2CRiLTzf/wWcCWQASSIyBxjzK8VzVEppZSD+vZ1rs5o+HDLdUZ9P+lra01Z0XQYgY6Uge8OzLn/nktOTg5RUVFBzWv4rOHWa8o82tZuEezLl72ATcaYtDLmThkATDPG5AJbRCQFON//WYoxZjOAiEzzr6udMqWU8rK77nKuzmj4cMtzV90Ve5etNWXpqelERETQqEmjP3w2/M+Hy9w2ul00hYWFpG5O5awOZwU1r+HnDrc+T5lH29otgt0piwemFvv9XhG5GUgEHjbG7AOaAD8WWyfDvwxg6wnLS7ytRERGAaMAmjcPfNhXKaVUCA0e7Fyd0YABluuMBncabGtNWVpqGk2bNyU8PPwPnw24vuyC9eJ3YAa7Uzag/QDrNWUebWu3CNo8ZSJSGegPfOZfNAFog+/S5nbglWDFMsZMNMbEGmNiGzRoEKzdKqWUssOBA3DokDOxDx60HPtAzgEO5dqXd2lzlAFkZoSRmVH6n+jW0a0Be+YqO5h70Ppxe7St3SKYI2VXA6uMMb8DFP0EEJH3gP/4f80EmhXbrql/GWUsV0op5VUDBjhXZzRypOU6owHTBthaU5aWmsa5551b4mf3jyp9njKAqtWq0qRZE1uK/UfOHmm9psyjbe0WweyUDaHYpUsRaWSMKbqwfB2wxv9+DvCpiPwfvkL/tsBKQIC2ItIKX2csHhgaxPyUUko54b77YNs2Z2KPHGl57qr7LriPbQftyfvA/gPs37c/oAeRn6hNdBtbpsUY2WUkOXkW5/vyaFu7RVA6ZSJSDd9dk3cUW/xPEYkBDJBa9JkxZq2IzMBXwJ8P3GOMKfDv517gayAcmGSMWRuM/JRSSjlo4EDn6oz69rVcZzTw7IG21ZRtTfOVUFuZDqNIdLtopn8yPegPJu/btq/1mjKPtrVbBKVTZow5DNQ7YdnwMtb/B/CPEpbPA+YFIyellFIusXs37N0L1auHPvbevZb/UO8+spu92XupHhn8vFO3pAIV65S1adeGw1mH2bF9B40a//EOTqv2Zu+13inzaFu7hc7or5RSyl6DBjlXZzRqlOU6o0EzBtlWU1Y0R1nzFhUbKQNfsX8wO2WjvhxlvabMo23tFtopU0opZa+HH4ZMh+7bGjXKcp3Rw90fJvOgPXmnpaZRp24dataqWeLno/5y8hGfok7Zpg2buLTHpUHLbVTXUdZryjza1m6hnTKllFL26tfPuTqjPn0sX9Lq176fbTVlZU2HAdDn6pNPgnpmwzOpXqN60KfF6NOmj/XLlx5ta7cI2jxlSimlVIl27IBdu5yJvXOn5dg7snaw67A9eaenppdZT5ayMZyUjX+cVLY4ESG6bTQpG4PbKdt5eKf14/ZoW7uFjpQppZSyV3y8c3VGd99tuc4ofma8LTVl+fn5ZGzN4NqB15a6zuj7awOlz1NWpHXb1vz4/Y9lrhOou+febb2mzKNt7RbaKVNKKWWv0aMhI8OZ2Pfc4+skWDD6ktFkHAh+3tszt5Ofn0/LVi0rvK/odtF8Mf0LDmcdplr1ahVPDrin2z1k51k7Z15ta7fQTplSSil7xcU5V2fUs6flOqO46DhbasrSUtOAik2HUaSo2H9zymbOiTmnwvsD6Nmqp/WaMo+2tVtoTZlSSil7bd0K27effD07ZGZajr31wFa2Hwp+3kXTYZRV6F9exafFCJbMQ5nWj9ujbe0WOlKmlFLKXsOHO1dndP/9luuMhs8abktNWVpqGpUqVaJRk4rPLdaydUvCwsKC2im7/6v7rdeUebSt3UI7ZUoppez15JPO1Rndd5/luauevOxJW2rK0rak0bR5U8LDS7+78r5HD5VrX5GRkTRv2Tyod2Ded8F91ucp82hbu4V2ypRSStmrd2/n6owuu8xynVHv1r1tqSk72RxlAJf1PFru/UW3i2bThuA9mPyyFpdZrynzaFu7hdaUKaWUstfmzb5aIyekpVmOvXnfZrYeCH7eaalpNG9VdpH/mtWVWLO6fOMmbdq2YcumLRQUFAQjPdL2p1k/bo+2tVvoSJlSSil7jRzpXJ3Rww9brjMaOXtk0GvKDuw/wP59+086Uvbs6FrAyecpA99IWU5ODplbM4NyR+fDCx721ZS1sVCb5dG2dgvtlCmllLLX3/7m3AjGww9bnrvqbz3+FvSRsq1pvv0Fo/NUpPgdmEHplHV/2Po8ZR5ta7fQTplSSil7XX65c3VG3btbrjO6vOXlQa8pK5qjLBjTYRQp3im7os8VFd5f92bdrdeUebSt3UJrypRSStlr/XpfrZETUlIsx16/ez2b9wU376I5yoI5Ula3Xl3q1K0TtDswU/amWD9uj7a1W+hImVJKKXvdcYdzdUajR/vqjOLiAt70jv/cEfSasrTUNOrUrUPNWjWDtk8I7h2YoxeNpqCwgLi2gZ8zr7a1W2inTCmllL1eeAHS052J/fjjluuMXuj1Aun7g5t3eabDAHj8mYMB7Te6XTQLv1poNa3jY1/yONlHLdZmebSt3UI7ZUoppex10UVQv74zsbt1s1xndFGzi6hfJbh5p6Wm0Tmm80nX63ZBXkD7bdO2DVM/msr+ffupXae2xez8sRt3s15T5tG2dgutKVNKKWWvNWucK/7+7TfLsdfsXMOGPcHLOz8/n4z0jJPOUQaQsCKChBUR5d53m3ZtANi0seKXMH/b/Zv14/ZoW7uFjpQppZSy1733Oldn9OSTvjqja68NeNN7590b1Jqy7Znbyc/PL9fly5f/5qs5K888ZQDRbf13YG5Moev5Xa0nCTy55EkKCgu4tn3g58yrbe0W2ilTSillr7FjfbOtO+HJJ+HIEUubjr1yLGn7g5d30XQYwbzzskjzls2JiIgISrH/k5c9yZGj1s6ZV9vaLbRTppRSyl7dukGtWs7EjomxXGfUrUk3akUGL++i6TCCOUdZkUqVKtGqTStSNlR8WoyYhjHWa8o82tZuoTVlSiml7JWcDOvWORN7zRrLsZN3JLNuV/DyTktNo1KlSjRq0iho+ywuul10UDpla3ausX7cHm1rt9CRMqWUUvZ64AHn6oyefdZXZzRgQMCbPjD/gaDWlKVvSadps6ZUqmTPn9427dqwYN4C8vLyiIgo/00CJ3r2m2cpKCxgwNmBnzOvtrVbaKdMKaWUvV57zbk6o2eftTx31Wtxr5G2L3h5p6eml7ue7NmXDgS8/zbRbcjPzyctNe1Y4b8Vz/Z41vo8ZR5ta7fQTplSSil7xcRA1arOxO7UyXKdUUzDGKpWCl7eaalpXHtd+e4M7NQ5P+D9Fz0Dc9OGTRXqlHU6o5P1mjKPtrVbaE2ZUkopeyUkwOrVzsROTrYcOyEzgdW/ByfvgwcOsm/vvnIX+X+7tDLfLq0cUIw2bX1zlVW0rix5R7L14/ZoW7uFjpQppZSy16OPOldn9PzzvjqjQYMC3vTRhY/6asqaVzzv9LTAHkT++tgaAFzWs3zzlAHUrFWTMxueWeFO2fPfPk9BYQGDOgZ+zrza1m6hnTKllFL2evNNSE11Jvbzz1ueu+rNvm+Sui81KGmkbfHVWdkxHUZxbdq1qXin7Irnrc9T5tG2dgvtlCmllLJXp05QObBLcUFz1lmW64w6ndGJymHBybtojjI7Jo4tLrptNLM/n40xBhGxtI+z6p9lvabMo23tFlpTppRSyl4//ACrVjkTOyHBcuwftv7Aqu3ByTstNY3adWpTs1bNoOyvNNHtojmw/wC7d+22vI+EbQnWj9ujbe0WQRspE5FU4BBQAOQbY2JFpC4wHWgJpAI3GmP2ia/7Ph7oCxwBRhhjVvn3cwvwpH+3zxtjPgxWjkoppRzwxBO+OqPLLgt97Jdf9tUZxccHvOkTi58gOy+by1pWPO/0Lem2X7qE/xX7b9q4iQZnNLC0j5e/e5mCwgLizwn8nHm1rd0i2JcvexpjinfPRwOLjTEvicho/++PA1cDbf2vC4AJwAX+TtwzQCxggCQRmWOM2RfkPJVSSoXKu+/Cli3OxH7pJct1Ru9e+y5b9gUn77TUNM6JOafc6780fr+lOEXTYqRsSOHCiy+0tI+Xer9kvabMo23tFnbXlA0Aevjffwh8g69TNgD4yBhjgB9FpLaINPKvu9AYsxdARBYCccBUm/NUSilll/btwWJ9U4VFR1uuM2pfvz1CxfMuKCggIz2Da/9UvjnKAKLbFliK1bhpY6KqRFWo2D+6brT1mjKPtrVbBLOmzAALRCRJREb5l51pjNnuf78DONP/vgmwtdi2Gf5lpS0/joiMEpFEEUnctWtXEA9BKaVU0C1bBitXOhN7+XLLsZelLmNlZsXz3p65nfz8/ICK/Bd8FcmCryIDjhUWFkabtm3YtGFTwNsWWb51ufXj9mhbu0UwR8ouMcZkisgZwEIR+a34h8YYIyImGIGMMROBiQCxsbFB2adSSimbPPOMr87oiitCH/uVV3x1RsOGBbzpM988Q3ZeNle0rljeaam+6TAC6ZRNfKM6AH2uzg04XnTbaH5K+ing7Yq8svwVCgoLGHZu4OfMq23tFkHrlBljMv0/d4rILOB84HcRaWSM2e6/PLnTv3om0KzY5k39yzL53+XOouXfBCtHpZRSDpg0ybk6o1desVxnNGnAJLbsrXjeRdNhtGzVssL7Ko/odtHM+WIO2dnZVKlSJeDtX+nzivWaMo+2tVsE5fKliFQTkRpF74E+wBpgDnCLf7VbgNn+93OAm8XnQuCA/zLn10AfEakjInX8+/k6GDkqpZRySOvW0KzZydezQ4sWlmO3rtOaZrUqnndaahqVKlWiUZNGFd5XebRp1wZjDFs2Wesctajdwvpxe7St3SJYNWVnAt+JyM/ASmCuMWY+8BJwpYhsBHr7fweYB2wGUoD3gLsB/AX+fwcS/K/nior+lVJKedSiRb75q5zw7beWYy/avIgftlY87/Qt6TRt1pRKlUIzX3vRHZgbf9toaftv0761ftwebWu3CMo3xBizGTi3hOV7gF4lLDfAPaXsaxIwKRh5KaWUcoHnn/fVGfXpE/rYr7/uqzMaMSLgTZ//9nmy87LpE12xvNO2pNk+k39xbdu3JTIykp9/+pkBgwYEvP3rK16noLCAEV1GBB7co23tFvqYJaWUUvaaMgU2b3Ym9vjxluuMplw3hc17K553Wmoa1/zpmoC2GT/R+vSclStXpmPnjiQnJVvafvzV4zmSa7E2y6Nt7RbaKVNKKWWvZs18oydOaNLE8txVzWo1IzuvYnkfPHCQfXv3BTybf5OmhRWK26VrFz796FPy8/MDvmzapEYTsipbnO/Lo23tFvrsS6WUUvaaP99X7+OEpUstx56fMp9v0yqWd3qatQeRz/48itmfR1mOG9M1huwj2axftz7gbZduWWr9uD3a1m6hI2VKKaXs9dJLvtGTvn1DH/utt3x1RrfdFvCmL333Etl52fRtZz3voukwAh0pm/JBNQAGXJ9jKW6X2C4AJCcl0/GcjgFt+1bCWxQUFnBb18DPmVfb2i20U6aUUspe06bBJuszzFfI22/D4cOWNp02aBqb9lQs76JOWSgL/QFatm5J7Tq1+SnxJ24acVNA2759zdsczrV2zrza1m6hnTKllFL2atgQDh50JvYZZ1iuM2pYvSEHcyqWd9qWNGrXrk2t2rUqtJ9AiQhdunaxVOx/RrUzyKpksTbLo23tFlpTppRSyl5ffglLljgTe8ECy7G/XP8lS7ZULO/01HRatArs0mWwxHSNYf269RzOCmz0aMGmBdaP26Nt7RbaKVNKKWWvV16Bf/3LmdgTJ1qO/cryV/hXcsXyTktNo3mr0F66LBLTNYbCwkJWJ68OaLuJSROtH7dH29ot9PKlUkope82cCSkpzsSeONHyJa2ZN84kZY/1vAsKCshIz+CaAYHNUQYwcYr1ecqKFC/2735J9/LH7jeRrFyLlwE92tZuoZ0ypZRS9qpfH/Y69MS8unWhcmVLm9avWp+9R6znvT1zO3l5eZaK/OvWq9g8ZQD16tejecvm/JT0U2Cxq9Slcpi1c+bVtnYLvXyplFLKXl984av3ccK8eZZjf7HuCxZssp53WmoaYO3Oy+mfVGH6J1Usxy7SpWsXfkoMrFM2b+M868ft0bZ2C+2UKaWUstfrr/sev+OESZMsx359xetMWW09b6tzlAF89klVPvukquXYRWK6xrAtYxu/7/i93NtM+mmS9eP2aFu7hV6+VEopZa/Zs52rM5o0yfLcVbPjZ1eopiwtNY3w8HAaN21seR8VVbyu7KprrirXNpMGTLI+T5lH29otdKRMKaWUvWrVgho1nIlds6bl2LWialEj0nre6VvSadqsacDPngymTud2Ijw8PKC6spqRNa0ft0fb2i20U6aUUspe06f76n2cMHu25djT10xn3kbreaenpjs2HUaRKlWqcHanswOaRHb2+tnWj9ujbe0W2ilTSillrwkTYOpUZ2JPmWI59oTECUxdY23bvLw8NqzfQOs2rS1tH0wxXWNITkqmsLB8d3RO+XmK5eP2alu7hdaUKaWUste8ebBxozOxp0yxPHfVvJvmsXG3tbwTfkzgcNZhLrviMkvbT5kZvGklzos9j48nfczmlM1Et4s+eezrplifp8yjbe0WOlKmlFLKXlWrQpWKT+9gSZUqlmNXjahKlQhr2y7+ejERERFc2uNSS9tXqWqoUtVY2vZEMV1jAFiVsKp8sSOqWD5ur7a1W2inTCmllL0+/thX7+OEzz+3HPvj1R8ze721bZcsWMKFl1xIterVLG0/+b2qTH6v4lNiAES3i6Z6jerlriv7/NfPLR+3V9vaLbRTppRSyl7vv+97/I4Tpk61HPv9Ve8z89fAt92atpUNv23giiuvsBQX4D+zqvCfWcEZ9QkPD6dzl87l7pRNXTPV0nEDnm1rt9CaMqWUUvZauBA2bHAm9tSpluuMFg5fyIbdgee9ZOESAK64ynqnLNi6dO3CxDcnkpOTQ1RUVJnrTr1+qvWaMo+2tVvoSJlSSil7RUT4Xh6LHREeQUR44NsuWbCEFi1b0Ca6jaW4dugS24W8vDzWrl570nWtHrdvY2+2tVtop0wppZS9Jk/2PRPRCdOnW449OXkyX6wLbNucnBy+W/YdV/S5AhGxFNcORcX+5bmEOX3t9ICP+xiPtrVbaKdMKaWUvSZPhlmznIn92WeWY09Onsys3wLb9sfvfiQnO4cr+rjn0iVAo8aNaNi4YbkeTv7Z2s8CPu5jPNrWbqE1ZUoppez1zTfO1RnNnGm5zuibEd8EXFO2ZMESoqKi6H5pd0sxi8yct6dC25ekS9cu5Xrc0swbZ1qvKfNoW7uFjpQppZRSQbJ4wWIuuuwiqrhwvqyYrjGkbk5l757gTUyrgks7ZUoppez13nswY4YzsT/5xHLs95LeY8ba8m+7OWUzqZtT6dWnl6V4xb3zejXeed3aHGel6RLbBYCfV/1c5nqfrP4koOM+jkfb2i20U6aUUspeTj6kes4c6w8kXzudeSnl33bx14sBglJPtmh+FIvmlz11RaA6x3RGRE5a7D9nw5yAjvs4Hm1rt9CaMqWUUvZatMi5OqPp0y3XGS26eVFANWVLFiyhbfu2NG/Z3FI8u9WoWYO27duyKrHsxy1NHzTdek2ZR9vaLXSkTCmllKqgw1mH+fH7H1131+WJusR2ITkpGWOC81xNFVzaKVNKKWWvt9/21fs4YfJky7HfTnibT34p37bff/s9R48edX2nLKZrDHv37CU9Nb3UdSYnTy73cf+BR9vaLSrcKRORZiKyVER+FZG1InK/f/mzIpIpIsn+V99i24wRkRQRWS8iVxVbHudfliIioyuam1JKKRf48ktYutSZ2IsWWY795YYvWZpavm0XL1hMterVOL/7+ZZinSgqyhAVFfzRrPNizwPKnkR20eZF5T7uP/BoW7uFVHQIU0QaAY2MMatEpAaQBPwJuBHIMsaMO2H9DsBU4HygMbAIaOf/eANwJZABJABDjDG/lhU/NjbWJCYmVugYlFJK2WzDBqhe3ZnYWVnQrt3J1yvBht0bqB5Zdt7GGM7veD7ndjmX9z9531KcUMnLy+OsJmcx/M/DefbFZ0tdLys3i3b1rZ0zr7Z1qIhIkjEmtqTPKjxSZozZboxZ5X9/CFgHNCljkwHANGNMrjFmC5CCr4N2PpBijNlsjDkKTPOvq5RSSrnW+nXr2ZaxzfWXLgEiIiLodG6ncs3sr0IvqDVlItIS6AKs8C+6V0RWi8gkEanjX9YE2Fpsswz/stKWK6WU8rLx4+HDD52J/f77lmOP/3E8H/588m2XLFgCQM8re1qKU5JXX67Oqy/bM9rUJbYLa35eQ15eXomfv7/q/XIdd4k82tZuEbROmYhUBz4HHjDGHAQmAG2AGGA78EoQY40SkUQRSdy1a1ewdquUUsoOixfD8uXOxP7uO8uxF29ZzPKMk2+7ZMESOpzTgUaNG1mKU5Lvl0Xy/bLIoO2vuC5du5CTk8Nva38r8fPv0r8r13GXyKNt7RZBmadMRCLwdcg+McZ8AWCM+b3Y5+8B//H/mgk0K7Z5U/8yylh+HGPMRGAi+GrKgnAISiml7DJnjnNzV02ebHnuqjlD5px0nrKDBw6ycvlK7nrgLksxnFA0s/9PST9xTsw5f/h88p8mW5+nzKNt7RbBuPtSgA+AdcaY/yu2vPg/Ga4D1vjfzwHiRSRSRFoBbYGV+Ar724pIKxGpDMT711VKKaVcadmSZRQUFND7qt5Op1JuzVo0o269uied2V+FXjAuX14MDAeuOGH6i3+KyC8ishroCTwIYIxZC8wAfgXmA/cYYwqMMfnAvcDX+G4WmOFfVymllJeNGwcffOBM7HfesRx73A/j+OCnsrddsmAJtWvXPjb65AUiQkzXmFKL/d9JfOekx10qj7a1W1T48qUx5jtASvio1AdQGWP+AfyjhOXzytpOKaWUBy1f7txlpaQkyM+3tOnyjOVlXsYrLCxk6cKlXN7rcipVCu5TC+vULQzq/k50Xux5LF24lEMHD1GjZo3jPkvalkR+obVz5tW2dgt99qVSSil7ff65c3VG771nuZPw+Y2fl1lTtubnNezaucuWqTDe+3hf0PdZXEzXGIwxrE5ezcWXXXx87P7vWa8p82hbu4U+ZkkppZSyYPGCxYgIPXr3cDqVgJ173rkAOl+Zy2inTCmllL1eegkmTnQm9ptvWo790ncvMTGp9G2XLFhCzHkx1G9Q32p2pXrx2Rq8+GyNk69oUd16dWnZumWJxf5vrnyzzOMuk0fb2i308qVSSil7JSfDoUPOxF671nKdUfKOZA7llpz33j17+SnxJx4a/VBFsitV0srKtuy3uC5du7D8uz/O67V211ryCyzWZnm0rd1CO2VKKaXsNW2ac3VGEyZYrjOaNmhaqTVl3yz6BmOMJx6tVJousV2Y9dkstm/bftzEtxOumWC9psyjbe0WevlSKaWUCtCSBUuoV78enbt0djoVy2K6xgDofGUuop0ypZRS9vr73+Gtt5yJ/eqrlmP/fdnfeSvhj9sWFBSwdNFSel7Zk7Aw7/4Z7di5IxEREX8o9n/1x1dLPO5y8Whbu4VevlRKKWWv9evh4EFnYm/eDKU8ePtk1u9Zz8HcP+a9KnEV+/ftp9dVvSqaXakaNS6wbd9FoqKi6NCpAz8lHd8p27x3M3mF1s6ZV9vaLcQYbz86MjY21iQmJjqdhlJKqbJs2ADVqzsTOysL2rWztOmG3RuoHnl83i8/9zJvvfoWqzevpnad2kFI0DlPPPQEM6fNZN3WdYSHhx9bnpWbRbv61s6ZV9s6VEQkyRgTW9Jn3h13VUoppRywZOESYi+I9XyHDHzF/oezDpOyIcXpVBTaKVNKKWW3p5+G8eOdiT12rOXYTy99mvErjt92x/YdrPl5je13XT79eE2efrymrTGAY8/sLF7sP/b7sX847nLzaFu7hdaUKaWUstfWrc7VGW3bZnnuqq0Ht3Iw5/i8v1n0DYDtnbJff4mwdf9FWke3pmatmqxKXMXgYYMB2Ja1zfo8ZR5ta7fQTplSSil7/etfzs1d9eqrlueu+teAf/1hnrLFCxbTsHFDzu54djCyc1xYWBjnnnfucSNlr171qvV5yjza1m6hly+VUkqpcsjLy+PbJd/Sq08vRMTpdIImpmsM69asIzs72+lUTnvaKVNKKWWvMWPglVecif3ii5Zjj1k0hleW/2/bhB8TyDqU5elZ/EvSpWsXCgoKWPPzGgBe/O+Lxx13QDza1m6hnTKllFL22rMH9u93Jva+fZZj78new/6c/227ZMESIiIiuOTyS4KTWxlaR+fTOjo09VFFM/sXTSK7L2ffcccdEI+2tVvoPGVKKaXs59G5q4rPU3bFBVfQ4MwGTJ8zPZjZuUK3Dt2IPT+WCZMnADpPmZ10njKllFKqAjLSM1i/bv0pd+mySJfYLiSvSnY6jdOedsqUUkrZ65FH4OWXnYn93HOWYz+y4BFe/t637eIFiwFsfbRScY/dV4vH7qsVkljgqytLT01nz+49PLfsuWPHHTCPtrVb6JQYSiml7JWdDTk5zsTOybH8PMTsvGxy8n15L1mwhBYtW9Amuk0wsyvV5pTQ/nkuXleWE5FDXoHFZ0h6tK3dQjtlSiml7PXWW87NXfXCC5bnrnrrmrfYsHsDOTk5fLfsO4YMH3JKTYVRXOeYzoSFhZGclMwLf33B+jxlHm1rt9DLl0oppVQZfvzuR3Kyc07ZejKAatWr0f7s9sfuwFTO0JEypZRS9nrgAd90BS++GPrYTz/tu6T14YcBb/rA/AfYl72PiAURREVF0f3S7jYk6B4xXWP4as5XPL30afIK8vjwusDPmVfb2i10pEwppZQqw+IFi7nosouoUqVKyGJ2OCePDueEtj6qS2wX9u/fz8EDDj27Uuk8ZUoppULAo3NXLVixgKsuvIp/jPsHI0aNCG5eLrP2l7X0ubgPb7z3Bn3+1EfnKbOJzlOmlFJKWbBs0TIAel7Z0+FM7Nf+7PZUqVrluIeTq9DSmjKllFL2uuce3+Nvxo4NfewnnvDVGX3yScCb3jP3HmalzSK6XTQtWrWwIbnS/eW22gC88f7+kMWsVKkSnWM6MztnNtnLsvnk+sDPmVfb2i10pEwppZS9qlSBqChnYkdFWY4dZsL4fevvjtx1uX1bONu3hYc8bkzXGPbu2EuERFjbgUfb2i10pEwppZS9xo1zbu6qp58OaO4qYwzff/89U6ZMYcaMGRTuL+Tqr6+2MUF36RLbhcI3Cun3cD9rO/BQW7uRdsqUUkqd9jZu3MiUKVP4+OOP2bJlC1WrVmXgwIFcef2VnN/9fKfTC5kuXbsAsDppNdf3vt7hbE4/evlSKaWUvUaNgqeecib2Y4+VGnv37t289dZbXHjhhbRr145//OMfREdH89FHH/H7779T5cYqzM2bG+KEndWkWROibohi/NrxvPbaa3z33XccPny4/DtwaVt7hY6UKaWUsle9euDU44nq1IGjR4/9mpuby3/+8x+mTJnC3Llzyc/Pp3PnzowdO5ahQ4fSuHHjY+vWq1IPwZm8u55/9OQr2UBE6NKxCz//9DMPPvggAGFhYXTo0IHY2FhiY2Pp1q0bnTt3Jqqk+i0XtbUXuW6eMhGJA8YD4cD7xpiXylpf5ylTSikPcHDuKnPoEN/v2nWsTmz//v00atSIoUOHMnz4cM4999xSt92wewPVIx2ac8tBWblZ1MirQWJi4rFXQkICu3btAnx3ap5zzjnHOmmxsbF06tSJiIgInafsJMqap8xVnTIRCQc2AFcCGUACMMQY82tp22inTCmlPMCGP9R5eXnsP3iQvfv2sXf/fvbu38++AweOvS96/bByJVsyMo7ViQ0fPpxevXoRHn7yuxtP507ZiZPHGmPIyMggISHhuM7avn37AIiMjOTcc8+lc4sW1Klfn+rVqlGjWjVqVK9e5vtqVasG70HvHu+Uue3y5flAijFmM4CITAMGAKV2yux29OhRCgoKjlt24pfHzt9FJHhfVqWUCoHCwkLy8/PJz88nLy+PyLvuovDAAX5/6imyc3LIyc0lOyeH7Ozs438/4X3x3/f7O1vFO12HTnKnXe1atXgvP5+bq1Vjx4cfMnDgQKoH0DG8dfatHMw5yBt936joKQnY7cPqAPDex/tCHvvBrx8kvyCfzwd/ftxyEaFZs2Y0a9aMgQMHAr6O2ubNm4910K74+GMO/PwzI0XIzskpVzwRoXq1asc6a9WqVqVqlSpUiYqiapUqf3iVtrzr5MmEFxaS8sILiAhhYWGEhYUF9L5Zs2YlX5YNEbd1ypoAW4v9ngFc4FAuADz22GOMHz/eyRSOU9RJK8+r6MsWFhZGeHj4H96XtKz4+8qVK1O5cmUiIyNL/VnaZ7Vr16Zp06bHXlWrVnX61J12CgsLyc3NJTc3l5ycHHJyckp8n5ubS0FBAYWFhcdexpjjfi9reVF716pV6w8/IyMjnT4Np6XCwkIOHz7MgQMHOHjw4LGfBw8eJDs7+9h3oOhV0rKSPj969OixjlbxTteJ7wsLC4/L52/+n8/MmxfQcURGRlIlKooqUVHUqlGDurVr06RhQ8456yzq1KpF3Tp1qFu79nGvOrVqUbd2bWrXquUbCRs71ldndPPNAZ/HZjWbsafSnoC3C4Z9e527D69x9cYcLShfbZaI0KZNG9q0acPgwYN985Tt2UP8X/9Kfn4+h48c4VBWFocOHybr8OGTvj+UlcWR7Oxjr9179x73+xH/d7Ikx75nl15q+dhXrFjB+ec7d7et2zpl5SIio4BRAM2bN7c1Vr9+/WjUqNGx30+83Gvn78aYY68Tfy/Pq+iPaNEf3OJ/eE/2vqCggLy8vGN/uA8cOMDRo0fJzc0t9WdZ6tatS9OmTWnWrNmxjlrx902bNqVatWpl7kMdb/fu3Xz11VfMmzePVatWHfeHtahdnBYVFVVqh6127dqceeaZ9OvXj3Yuv9zgFhkZGXz00Ufs27evxA5X8feBlKZUrlyZqKioUl+1atXizDPPpHLlykRERFCpUqVjP8v9fu9e/lWrFlX8+yzqbEUV63gVfx8ZGUlYWBA6Jo8+annuqud6PseG3Q7NueWgRy9+lKxci/N9PffcsXnKKlWqRK2aNalVs2YQs/P9o6NoJPW4Dlt2NrkHDrCwSZM//COyvO9bt24d1FwD5bZOWSbQrNjvTf3LjmOMmQhMBF9NmZ0J9erVi169etkZ4pRgjCE/P//YyMy+ffvIyMhg69atZGRkHHtt3bqVlStXHisWLa5OnTo0bdqUdu3a8c9//tPx/zjcxhhDcnIyc+fOZe7cuaxYsQJjDGeccQaXXnopNWvWJDIy8tgf0vK+j4yMpFKlSiUO6Rd/lbRcRMjNzeXAgQPs37+/XD/T0tKOvc/JyeGRRx6hS5cuxMfHc+ONN9KyZUunT7UrHThwgN69e7N+/XqqVq1KzZo1qVWr1rGfDRs2PPb7iZ8V/axRowZVq1b9Q6crKJ2fk3Gy+FudUsLCwqhWtSrVSroC44GasrK4rdC/Er5C/174OmMJwFBjzNrSttFCf2/KyckhMzPzuM5a0ftly5YhIkyfPp0rr7zS6VQddejQIRYtWsTcuXOZN28e27dvB6Bbt25cc8019O3bl65du4bmj6oNMjMz+eyzz5g2bRorVqwA4MILLyQ+Pp4bbrjhuOkJTmcFBQX069ePhQsXsmjRIi6//HKnUwrMsGFw8CC8807oY//lL77nIc6ZE/Cmw74YxsHcg7xzbejzHtS3HgAz54X+8ulf5v2FvMI85gwJ/Jx5ta1DyTOF/saYfBG5F/ga35QYk8rqkCnvioqKOlaHcKJNmzZx3XXXERcXx4svvsijjz56Wt3ssGHDhmOdsGXLlpGXl0fNmjXp06cP11xzDVdffTVnnnmm02kGRZMmTXjggQd44IEH2LJlCzNmzGDatGk88MADPPjgg1x22WXEx8dz/fXX06BBA6fTdcyYMWP46quvePfdd73XIQNo3x5273YmduvWlueual+vPbuPOJP3xZeXXRJip9Z1W3M032L5g0fb2i1cNVJmhY6UnZoOHz7MyJEjmTFjBoMHD+aDDz44pWvOfvrpJz788EPmzp1LSkoKAGeffTbXXHMN11xzDRdffLFv/p/TxPr165k+fTpTp07lt99+Izw8nF69ehEfH891111H7dq1nU4xZKZMmcLNN9/MPffcw5tvvul0OtZ5dO4qnRLDAo+2dah4Zp4yK7RTduoyxvDPf/6TMWPGcM455zBr1qxTts6sVatWbN++nSuuuOLYZclWrVo5nZbjjDH88ssvTJs2jenTp7N582YiIiKIi4tj8ODB3Hjjjad0Z3XFihVcfvnlXHTRRXz99dfePlaP/qHWTpkFHm3rUNFOmfK0r7/+mvj4+FO2zmznzp2ceeaZjBs3jocfftjpdFzLGENiYiLTp09n+vTpZGRk8Je//IXXX3/d6dRskZmZSbdu3YiKiiIhIYF69eo5nZJ18fFw6BC8917oY991F+Tnw9zAn2EZPzOeQ7mHeK9/6PMeNrAuAB9/sTfkse+aexf5BfnMvcnCcz892tahVFanzJvVweq0ctVVV5GYmEiTJk2Ii4tj7NixAd3u73ZJSUkAdO3a1eFM3E1E6NatG+PGjSMtLY1bbrmFiRMnsmPHDqdTC7rs7Gyuu+46Dh06xJw5c7zdIQOIiYGzz3YmdseOlmPHNIzh7PrO5J2TI+TkOFNL27FBR+vH7dG2dgsdKVOekZWVxciRI/nss8+Ij4/n/fffPyXqzP7+97/z9NNPc+DAAWoGeT6fU9nGjRs566yzeOSRR3j55ZedTidojDEMHz6cTz/9lH//+9/079/f6ZSCw6OXtJy6fOnk3Zegly/tpCNl6pRQvXp1pk+fzksvvcT06dO56KKL2LJli9NpVVhSUhLt27fXDlmA2rZty4033sjbb7997Nl7p4Jx48bxySef8Pzzz586HTKlVLlop0x5iojw+OOP89VXX5Genk5sbCwLFy50Oq0KSUxMJDa2xH80qZMYM2YMWVlZ3r4rsZh58+bx+OOPM3jwYMaMGeN0OsFz/fW+OaSccPvtlmNfP+N6/vKVQ3k76PY5t1s/bo+2tVtop0x50lVXXUVCQgKNGzcmLi6OcePGebLObMeOHWRmZmo9mUWdO3fm2muv5bXXXiPL4qN03GLdunUMGTKELl26MGnSpFNrbr7u3X21Rk7o2tVy7O5NuxPT0Nq2FdU7LofeceV7oHewdW3c1fpxe7St3UJrypSnZWVlceuttzJz5kyGDBnC+++/76mHn8+dO5drr72Wb7/9lksr8BDd09ny5cu56KKL+L//+z8efPBBp9OxZN++fZx//vkcOnSIhIQEmjVrdvKNvMajdUY6JYYFHm3rUNGaMnXKql69OjNmzODFF19k2rRpXHTRRWzdutXptMotMTEREaFLly5Op+JZ3bt3p0ePHowbN47cXOdmQbcqPz+fwYMHk56ezqxZs07NDplSqly0U6Y8T0QYPXo08+bNIyUlxVO1OImJiZx11llU1wc1V8gTTzzBtm3b+Oijj5xOJWCPPvooCxcu5J133qF79+5Op2OP/v3hzjudiT1ihOXY/af25865zuQ9qG+9Y3dghtqIf4+wftwebWu3cNWzL5WqiLi4OIYOHcqnn37KkSNHPHEZMykpid69ezudhuf17t2b2NhYXn75ZW699VYqVfLG/9omTZrEa6+9xoMPPsitt97qdDr26dULdu50JvYll4DFEdRerXqx87BDeTvokuaXkJtvcdTZo23tFlpTpk4p33zzDT179mTatGkMHjzY6XTKtG3bNpo0acL48eO57777nE7H82bNmsXAgQOZOnUq8fHxTqdzUt9//z09e/akZ8+ezJ071zMdScs8Wmek85RZ4NG2DhWtKVOnjUsvvZTGjRszdepUp1M5qaJ/TOidl8ExYMAAzj77bF544QXX34mbnp7OwIEDadmyJdOmTTv1O2RKqXLRTpk6pYSHhxMfH8+8efNcP6FoYmIiYWFhxHj8Fm63CAsLY8yYMfzyyy/MdfGz744cOcKf/vQncnJymDNn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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ "# Plot along cross-disperion cut showing the extraction parameters\n", "fig, ax = plt.subplots(figsize=(10, 6))\n", @@ -175,10 +276,21 @@ "mm = np.array([ext_center, ext_center])\n", "mm_y = ax.get_ylim()\n", "\n", + "# extraction region\n", + "ax.axvspan(ext_center - ext_width/2., ext_center + ext_width/2., color='green', alpha=0.1)\n", "ax.plot(mm, mm_y, 'b--')\n", "ax.plot(mm - ext_width/2., mm_y, 'g:')\n", "ax.plot(mm + ext_width/2., mm_y, 'g:')\n", "\n", + "# background region, symmetric on both sides of extraction region\n", + "ax.axvspan(ext_center - bkg_sep - bkg_width/2., ext_center - bkg_sep + bkg_width/2., color='red', alpha=0.1)\n", + "ax.plot(mm - bkg_sep - bkg_width/2., mm_y, 'r:')\n", + "ax.plot(mm - bkg_sep + bkg_width/2., mm_y, 'r:')\n", + "\n", + "ax.axvspan(ext_center + bkg_sep - bkg_width/2., ext_center + bkg_sep + bkg_width/2., color='red', alpha=0.1)\n", + "ax.plot(mm + bkg_sep - bkg_width/2., mm_y, 'r:')\n", + "ax.plot(mm + bkg_sep + bkg_width/2., mm_y, 'r:')\n", + "\n", "ax.set_title(\"Cross-dispersion Cut at Pixel=70\")" ] }, @@ -186,37 +298,260 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Extract" + "## Background Subtraction" ] }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "scrolled": false - }, + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "# extract the background around an estimated Trace\n", + "trace = FlatTrace(image, ext_center)\n", + "bg = Background(image, trace, separation=bkg_sep, width=bkg_width)\n", + "\n", + "# for the case of a FlatTrace, the central value can be passed directly instead\n", + "bg = Background(image, ext_center, separation=bkg_sep, width=bkg_width)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(34, 435)" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# access the underlying weight image\n", + "bg.bkg_wimage.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0.5, 1.0, 'slit[0] slice')" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(15, 15))\n", + "plt.imshow(bg.bkg_wimage[::,0:100], origin=\"lower\")\n", + "plt.title(\"slit[0] slice\")" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(34, 435)" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "bg.bkg_image(image).shape" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(34, 435)" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "bg.sub_image(image).shape" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(34, 435)" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# identical to calling bg.sub_image(image)\n", + "(image - bg).shape" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0.5, 1.0, 'slit[0] slice')" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(15, 15))\n", + "plt.imshow(bg.bkg_image(image)[::,0:100], norm=norm_data, origin=\"lower\")\n", + "plt.title(\"slit[0] slice\")" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0.5, 1.0, 'slit[0] slice')" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(15, 15))\n", + "plt.imshow(bg.sub_image(image)[::,0:100], norm=norm_data, origin=\"lower\")\n", + "plt.title(\"slit[0] slice\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Trace" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, "outputs": [], "source": [ - "# define the Trace\n", - "trace = FlatTrace(image, ext_center)" + "# optional: refine the trace on the background subtracted image (once PR#85 is merged)\n", + "#auto_trace = KosmosTrace(image-bg, ...)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Extract" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "# extract\n", "boxcar = BoxcarExtract()\n", - "spectrum = boxcar(image, trace, width=ext_width)" + "spectrum = boxcar(image-bg, trace, width=ext_width)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 19, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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0FCeeeYZNm3axPLly72OIyIiEm80QpYE7d69m1KlSlG8eHHmz59/+bJDP/zwA9mzZydTpkx/2X7dunXce++95MiRg0OHDpE+fXo6derESy+9RFhY4rqYw6lTp8idOzd16tRhwoQJXscRERGJM42QJRNHjhyhS5culCtXjj///JPPP//8L9eAjIiI+FsZA7j77rtZuHAhGTJkoHjx4mzatIlXX3010ZUxgHTp0l2+lNL+/fu9jiMiIhIvVMiSiKNHj1KyZElGjBhBlSpVmDNnDgULFozz8ytVqsSmTZv47rvvyJ49ewCT/nOdO3fm/PnzjBo1yusoIiIi8UKFLIkYN24c+/btY/HixUyePJnKlSvf8GuYWVCcKF+0aFFq1arFiBEjCOZD7iIiIpeokCUBzjlGjBhB+fLlqVSpktdxEkSDBg3Yu3evDluKiEiSoEKWBHz++eds376djh07eh0lwRQqVAiAX375xeMkIiIi/5wKWZD79ttvefLJJ6lYsSKPP/6413ESzKVCdmlONRERkWCmQhbEoqOjeeKJJ8iRIwczZswgVapUXkdKMPnz5wc0QiYiIklD4pvXQOJswIAB7Nixg6+++oosWbJ4HSdBpU6dmty5c18eITt16hRp0qQhJET/xhARkeCj315B6vz584wcOZIGDRpQrVo1r+N4omDBguzcuZNz585RuHBh+vTp43UkERGRm6JCFqTmz5/PgQMHaNu2rddRPFOoUCF++eUXVq9ezYEDB3jnnXc4cOCA17FERERumApZkBozZgy33nordevW9TqKZwoWLMiePXuYN28eZsbZs2cZNGiQ17FERERumApZEDpz5gzz58+ncePGpEiRwus4nilUqBDOOT755BPuuusumjdvzvvvv09UVJTX0URERG6IClkQWrJkCdHR0dSrV8/rKJ6qW7cuefPm5bfffqNatWr0798f5xz9+vXzOpqIiMgNUSELQnPmzCFNmjRUrVrV6yieypo1K/Pnz+fuu++mSZMmFChQgKeffpoxY8awZcsWr+OJiIjEmQXztQAjIyPdmjVrvI6RoC5cuECRIkUoWbIks2bN8jpOonP48GEKFy5MlSpVmDlzptdxRERELjOztc65yKut0whZkBk7diy7d+9O1t+ujE3WrFnp0aMHs2bN0iiZiIgEDRWyIHLmzBn69etH+fLleeihh7yOk2h17NiRlClTMnLkSK+jiIiIxEmiKmRmls7M1phZ8j5b/RomTpzInj176N+/P2bmdZxEK1u2bDzyyCOMGzeO06dPex1HRETkugJayMxstJkdNLPNVyyvbWY/mNlPZtYrxqqewORAZgpWzjneffddihcvTs2aNb2Ok+h16NCB48ePM3my/jiJiEjiF+gRsjFA7ZgLzCwU+ACoAxQHmplZcTOrCWwFDgY4U1BauXIl69ev51//+pdGx+KgatWq3HbbbTpsKSIiQSGghcw5txQ4esXicsBPzrmdzrlzwESgIVAVuAd4HGhvZlfNZmYd/Ic11xw6dChw4ROZTz75hHTp0tG8eXOvowQFM6NDhw6sWLGCzZs3X/8JIiIiHvLiHLLcQMyp1PcAuZ1zfZxzzwKfA6Occ39e7cnOuZHOuUjnXGS2bNkCnzYRiI6OZtKkSTz66KOkT5/e6zhBo1WrVqRMmZIRI0Z4HUVERCRWieqkfgDn3Bjn3GyvcyQm06dP5+TJk7Ru3drrKEEla9asNG7cmE8//ZTo6Giv44iIiFyTF4VsL5A3xuM8/mVyDR988AFFixalUqVKXkcJOh07duTEiROMHj3a6ygiIiLX5EUhWw0UNbOCZpYSeAzQlOrX8N1337Fq1Sq6du1KSEiiG9BM9CpVqkSVKlXo1q0bM2bM8DqOiIjIVQV62osJwEogwsz2mNmTzrkLQBdgAbANmOyc05Tq1zB69GjSp09Pq1atvI4SlMyMmTNnUqZMGZo0aaLLTYmISKIUlNeyNLP6QP0iRYq037Fjh9dxAqp06dLkyJGD+fPnex0lqJ04cYIaNWqwfft2tm3bRp48ebyOJCIiyUySu5alc26Wc65DeHi411ECKjo6ms2bN1O2bFmvowS98PBwJk2axIULF3j22We9jiMiIvIXQVnIkouNGzdy8eJFIiOvWqblBhUqVIg+ffowbdo0li9f7nUcERGRy1TIErE1a9YAqJDFo27dunHrrbfy8ssvex1FRETkMhWyRGz16tXkyJGDXLlyeR0lyUiXLh0vvvgiixcv5sMPP/Q6joiICKBClqitWbOGsmXL6tqV8ezpp5/mwQcfpHPnzixatMjrOCIiIipkidXJkyfZvn27DlcGQIoUKZgyZQo5c+ZkyJAhXscREREJzkJmZvXNbOSJEye8jhIw69atwzmnQhYgadKkoX379ixYsICdO3d6HUdERJK5oCxkyWHaC53QH3jt27cnJCSEd955x+soIiKSzAVlIUsOVq9eTb58+bj11lu9jpJk5c6dm9atWzN8+HB++uknr+OIiEgypkKWCP355598++23Gh1LAP/+979JmTIlnTt35sKFC17HERGRZEqFLBFZv349ERERPPHEE+zatYuHHnrI60hJXs6cOXnrrbdYuHChZvAXERHPhHkdQP7f0KFD+fHHH/nxxx+pV68eLVq08DpSstC+fXu2bt3K22+/TbNmzbjvvvu8jiQiIslMUF5c/JLIyEh36eT3YHfkyBFy585Ny5YtqVChAg0bNiRz5sxex0o2Tp06RUREBDly5OC7774jJESDxyIiEr+S3MXFk+K0F6NHj+bs2bN07dqVNm3aqIwlsHTp0tGvXz/Wrl3L6tWrvY4jIiLJTFAWsqQ27cXZs2d5++23qVatGiVLlvQ6TrLVqFEjUqRIwdSpU72OIiIiyUxQFrKkZty4cfz222+8+OKLXkdJ1m655RZq1KjBtGnTCOZD+SIiEnxUyDx27Ngx+vbtS/ny5alevbrXcZK9xo0b88svv7Bs2TKvo4iISDKiQuaxF198kSNHjjB8+HBdRDwRaNKkCTly5KBXr14aJRMRkQSjQuahLVu2MGrUKLp06cJdd93ldRwB0qdPz6uvvsqKFSsYP36813FERCSZ0LQXHmrYsCFLlixh586dZMmSxes44nfhwgXuv/9+1q5dy6pVqyhVqpTXkUREJAlIctNeJAW7d+9m5syZdOvWTWUskQkLC2PKlClkzJiRrl276tCliIgEXFAWsqQwD9nkyZMBaNmypcdJ5Gpy5MhBnz59WLp0KV9//bXXcUREJInTIUuPlClThtDQUL777juvo8g1nDlzhiJFilCoUCG++eYbfelCRET+ER2y9FDnzp2ZP3/+X5bt2LGDdevW8dhjj3mUSuIiderUvPjii/zvf/9j8eLFXscREZEkTCNkAXZpVCXmz/m1117jpZdeIioqijx58ngVTeLg7NmzFClShFtuuYXp06dTpEgRryOJiEiQ0ghZIjNx4kQqVaqkMhYEUqVKxbBhw9i1axd33nmnJowVEZGAUCFLYN9//z1btmzR4cogUr9+fbZu3UrevHmpW7cuO3bs8DqSiIgkMSpkCeTs2bMADB48mDRp0tCkSROP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DR588EHGjx/PkSNHvI4nEu807YWIiCRaadKk4cMPPyRnzpx88sknzJ07F4DIyEgWL15MhgwZPE4oEj+CcoTMzOqb2cgTJ054HUVERAIsNDSU/v37s3v3blasWEH//v1Zu3YtvXr18jqaSLwJyhEy59wsYFZkZGR7r7OIiEjCCAkJoUKFClSoUIGjR4/y9ttvc8899/DEE094HU3kHwvKQiYiIsnbG2+8waZNm2jdujXnzp3jySef9DqSyD8SlIcsRUQkeUudOjUzZ86kRo0atGvXjtq1a/PGG2+wfPlyAKKioujWrRvffPONx0lF4kaFTEREglK6dOmYPXs2r776Ktu3b6d3795UrlyZtm3bUqpUKd5++22qVq1Kly5duHjxotdxRWKlQiYiIkErRYoUvPzyy+zatYtjx45Rs2ZNxowZw3333cemTZvo1q0bH3zwASVKlKBLly4sWrTI68giV6VCJiIiSUKmTJmYM2cO+/fvZ/bs2ZQsWZKhQ4cyduxY8uXLx5gxY6hZsyZffvml11FF/kYn9YuISJIRGhrKrbfe+pdlLVu2pGXLlkRHRxMZGcnjjz9OuXLlAChVqhRPPvkkRYsW9SKuyGUaIRMRkWQhbdq0TJo0iZIlS3L48GH27dvHkCFDKFeuHIMHD2bIkCFER0d7HVOSKY2QiYhIslGyZEm+/vrry493795NjRo16NGjBwAff/wx//3vfzViJglOI2QiIpJs5c+fn40bN7Jjxw4WLlzIwYMHue+++xg7diy7du3StzMlwaiQiYhIspY2bVqKFClCjRo1WL58OTly5KB169YULFiQEiVKsGzZMq8jSjKgQiYiIuIXERHBxo0b+d///sewYcOIjo6mUqVKPPDAA2zdutXreJKEqZCJiIjEYGZUrFiRp556ii1btjBw4EBWr15N6dKlGTVqlNfxJIlSIRMREbmG9OnT06NHD3744QeqVatGhw4daNq0Kf3792fBggVex5MkRN+yFBERuY5s2bIxe/Zs/vOf//Cf//yHyZMnY2Y899xzpE2bFjOjZ8+epE2b1uuoEqRUyEREROIgLCyMl19+mWeeeYYLFy7QqlUrhgwZgpnhnOPChQu8/vrrXseUIKVDliIiIjcgPDycLFmyMGvWLE6ePMmFCxdo0aIFQ4YMYefOnV7HkyClQiYiInITzIz06dMTEhLCm2++SUhICP369fvbdmfOnGHPnj045xI+pAQNFTIREZF/KFeuXHTu3JnPPvuMJUuW0LFjRypVqkS7du3ImDEjefPmpXPnzkRFRbFixQqioqK8jiyJjM4hExERiQcvvPACI0aM4P777yckJIT8+fOzYsUK2rRpg5nx4Ycf8uGHHwKQIkUKXnnlFXr16kVoaKjHySUxUCETERGJB7feeisbN25k2bJl3HHHHZQuXZro6GgyZMiAc47bbrsNM6NkyZJ88skn9O3bl6+//pratWtTuHBhypQpQ968eTEzrz+KeECFTEREJJ4UKlSIQoUKXX6cIUMGwHe+2aULmAPUqlWL+++/n+eff56vvvrq8vLcuXNTvXp1nnnmGe6+++6ECy6eC8pzyMysvpmNPHHihNdRREREbpiZ0bFjR06ePMnx48f59ttvef/996lcuTJffPEFZcqUoXXr1jz00EO8+uqrHDx40OvIEmBBWcicc7Occx3Cw8O9jiIiInLTzIzw8HDKlSvH008/zeeff05UVBRdunRh7NixrF+/nn79+nHnnXfqIudJXFAWMhERkaQqPDyc9957j9OnT7N79242btxIhgwZqF69Oj179qRLly7MmDGD8+fPex1V4pEKmYiISCKUOnVqAEqVKsWqVasoV64cAwcOZPTo0Tz88MMULlyYt956i1OnTnmcVOKDCpmIiEgilzlzZpYuXcqRI0c4ceIEM2fOpGDBgjz33HPUqFGDpUuXMn36dK9jyj+gQiYiIhIEzIzMmTOTIkUK6tevzzfffMPEiRP59ttvqVKlCo0aNWLGjBlex5SbpGkvREREglTTpk05f/48UVFRTJ8+nVatWtG7d2/++OMPSpUqRb169UiTJo3XMSUOVMhERESCWIsWLQB4/PHHadmyJb169bq8LmPGjFSsWJG77rqLl19+mZQpU3oVU65DhUxERCQJyJ8/P0uWLGHnzp3kyJGDVatWMX78eNavX8/cuXNZunQpzZo1Y9++fTz00EOaeDaR0TlkIiIiSYSZUbhwYdKlS0f16tX55JNP2LBhA2PHjmXz5s107tyZf//739xzzz2MGDECAOcc586d8zi5qJCJiIgkcS1btuTw4cP88ssv7Nu3jxo1atCpUycqVKhA7ty5SZs2LR06dGDp0qUqZx7RIUsREZFkICQkhAIFCgAwc+ZMevfuzdKlS6le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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ "# plot \n", "f, ax = plt.subplots(figsize=(10, 6))\n", diff --git a/specreduce/background.py b/specreduce/background.py new file mode 100644 index 00000000..50ec0f01 --- /dev/null +++ b/specreduce/background.py @@ -0,0 +1,130 @@ +# Licensed under a 3-clause BSD style license - see LICENSE.rst + +from dataclasses import dataclass + +import numpy as np + +from specreduce.core import SpecreduceOperation +from specreduce.extract import _ap_weight_image +from specreduce.tracing import FlatTrace + +__all__ = ['Background'] + + +@dataclass +class Background(SpecreduceOperation): + """ + Determine the background from an image for subtraction + + Parameters + ---------- + image : nddata-compatible image + image with 2-D spectral image data + trace_object : Trace + trace object + width : float + width of extraction aperture in pixels + disp_axis : int + dispersion axis + crossdisp_axis : int + cross-dispersion axis + + Returns + ------- + spec : `~specutils.Spectrum1D` + The extracted 1d spectrum expressed in DN and pixel units + """ + # required so numpy won't call __rsub__ on individual elements + # https://stackoverflow.com/a/58409215 + __array_ufunc__ = None + + def __init__(self, image, trace_object, separation=5, width=2, + disp_axis=1, crossdisp_axis=0): + """ + Extract the 1D spectrum using the boxcar method. + + Parameters + ---------- + image : nddata-compatible image + image with 2-D spectral image data + trace_object : Trace or int + trace object or an integer to use a FloatTrace + separation: float + separation between trace and extraction apertures on each + side of the trace + width : float + width of each background aperture in pixels + disp_axis : int + dispersion axis + crossdisp_axis : int + cross-dispersion axis + """ + if isinstance(trace_object, (int, float)): + trace_object = FlatTrace(image, trace_object) + + # TODO: this check can be removed if/when implemented as a check in FlatTrace + if isinstance(trace_object, FlatTrace): + if trace_object.trace_pos < 1: + raise ValueError('trace_object.trace_pos must be >= 1') + + bkg_wimage = _ap_weight_image( + trace_object-separation, + width, + disp_axis, + crossdisp_axis, + image.shape) + + bkg_wimage += _ap_weight_image( + trace_object+separation, + width, + disp_axis, + crossdisp_axis, + image.shape) + + self.image = image + self.bkg_wimage = bkg_wimage + self.bkg_array = np.average(image, weights=self.bkg_wimage, axis=0) + + def bkg_image(self, image=None): + """ + Expose the background tiled to the dimension of ``image``. + + Parameters + ---------- + image : nddata-compatible image or None + image with 2-D spectral image data. If None, will use ``image`` passed + to extract the background. + + Returns + ------- + array with same shape as ``image``. + """ + if image is None: + image = self.image + + return np.tile(self.bkg_array, (image.shape[0], 1)) + + def sub_image(self, image=None): + """ + Subtract the computed background from ``image``. + + Parameters + ---------- + image : nddata-compatible image or None + image with 2-D spectral image data. If None, will use ``image`` passed + to extract the background. + + Returns + ------- + array with same shape as ``image`` + """ + if image is None: + image = self.image + + return image - self.bkg_image(image) + + def __rsub__(self, image): + """ + Subtract the background from an image. + """ + return self.sub_image(image) diff --git a/specreduce/extract.py b/specreduce/extract.py index 0fec112b..d23bb073 100644 --- a/specreduce/extract.py +++ b/specreduce/extract.py @@ -13,6 +13,66 @@ __all__ = ['BoxcarExtract'] +def _get_boxcar_weights(center, hwidth, npix): + """ + Compute weights given an aperture center, half width, + and number of pixels + """ + weights = np.zeros((npix)) + + # pixels with full weight + fullpixels = [max(0, int(center - hwidth + 1)), + min(int(center + hwidth), npix)] + weights[fullpixels[0]:fullpixels[1]] = 1.0 + + # pixels at the edges of the boxcar with partial weight + if fullpixels[0] > 0: + w = hwidth - (center - fullpixels[0] + 0.5) + if w >= 0: + weights[fullpixels[0] - 1] = w + else: + weights[fullpixels[0]] = 1. + w + if fullpixels[1] < npix: + weights[fullpixels[1]] = hwidth - (fullpixels[1] - center - 0.5) + + return weights + + +def _ap_weight_image(trace, width, disp_axis, crossdisp_axis, image_shape): + + """ + Create a weight image that defines the desired extraction aperture. + + Parameters + ---------- + trace : Trace + trace object + width : float + width of extraction aperture in pixels + disp_axis : int + dispersion axis + crossdisp_axis : int + cross-dispersion axis + image_shape : tuple with 2 elements + size (shape) of image + + Returns + ------- + wimage : 2D image + weight image defining the aperture + """ + wimage = np.zeros(image_shape) + hwidth = 0.5 * width + image_sizes = image_shape[crossdisp_axis] + + # loop in dispersion direction and compute weights. + for i in range(image_shape[disp_axis]): + # TODO trace must handle transposed data (disp_axis == 0) + wimage[:, i] = _get_boxcar_weights(trace[i], hwidth, image_sizes) + + return wimage + + @dataclass class BoxcarExtract(SpecreduceOperation): """ @@ -64,64 +124,6 @@ def __call__(self, image, trace_object, width=5, The extracted 1d spectrum with flux expressed in the same units as the input image, or u.DN, and pixel units """ - def _get_boxcar_weights(center, hwidth, npix): - """ - Compute weights given an aperture center, half width, - and number of pixels - """ - weights = np.zeros((npix)) - - # pixels with full weight - fullpixels = [max(0, int(center - hwidth + 1)), - min(int(center + hwidth), npix)] - weights[fullpixels[0]:fullpixels[1]] = 1.0 - - # pixels at the edges of the boxcar with partial weight - if fullpixels[0] > 0: - w = hwidth - (center - fullpixels[0] + 0.5) - if w >= 0: - weights[fullpixels[0] - 1] = w - else: - weights[fullpixels[0]] = 1. + w - if fullpixels[1] < npix: - weights[fullpixels[1]] = hwidth - (fullpixels[1] - center - 0.5) - - return weights - - def _ap_weight_image(trace, width, disp_axis, crossdisp_axis, image_shape): - - """ - Create a weight image that defines the desired extraction aperture. - - Parameters - ---------- - trace : Trace - trace object - width : float - width of extraction aperture in pixels - disp_axis : int - dispersion axis - crossdisp_axis : int - cross-dispersion axis - image_shape : tuple with 2 elements - size (shape) of image - - Returns - ------- - wimage : 2D image - weight image defining the aperture - """ - wimage = np.zeros(image_shape) - hwidth = 0.5 * width - image_sizes = image_shape[crossdisp_axis] - - # loop in dispersion direction and compute weights. - for i in range(image_shape[disp_axis]): - # TODO trace must handle transposed data (disp_axis == 0) - wimage[:, i] = _get_boxcar_weights(trace[i], hwidth, image_sizes) - - return wimage - # TODO: this check can be removed if/when implemented as a check in FlatTrace if isinstance(trace_object, FlatTrace): if trace_object.trace_pos < 1: diff --git a/specreduce/tracing.py b/specreduce/tracing.py index b1b1ae75..73d004ab 100644 --- a/specreduce/tracing.py +++ b/specreduce/tracing.py @@ -1,5 +1,6 @@ # Licensed under a 3-clause BSD style license - see LICENSE.rst +from copy import deepcopy from dataclasses import dataclass import numpy as np @@ -45,6 +46,8 @@ def shift(self, delta): delta : float Shift to be applied to the trace """ + if not isinstance(delta, (int, float)): + raise TypeError(f"{self.__class__.__name__} only supports shifting by floats/integers") self.trace += delta self._bound_trace() @@ -55,6 +58,20 @@ def _bound_trace(self): ny = self.image.shape[0] self.trace = np.ma.masked_outside(self.trace, 0, ny-1) + def __add__(self, delta): + """ + Return a copy of the trace shifted by delta pixels perpendicular to the axis being traced + """ + copy = deepcopy(self) + copy.shift(delta) + return copy + + def __sub__(self, delta): + """ + Return a copy of the trace shifted by delta pixels perpendicular to the axis being traced + """ + return self.__add__(-delta) + @dataclass class FlatTrace(Trace):