diff --git a/doc/user_guide/transformations.rst b/doc/user_guide/transformations.rst index ce9ac9734..8baf29a0c 100644 --- a/doc/user_guide/transformations.rst +++ b/doc/user_guide/transformations.rst @@ -42,41 +42,6 @@ And plot it: :func:`verde.project_grid` function and a map projection like the ones available in :mod:`pyproj`. -Since all the grid transformations we are going to apply are based on FFT -methods, we usually want to pad them in order their increase the accuracy. -We can easily do it through the :func:`xrft.pad` function. -First we need to define how much padding we want to add along each direction. -We will add one third of the width and height of the grid to each side: - -.. jupyter-execute:: - - pad_width = { - "easting": magnetic_grid.easting.size // 3, - "northing": magnetic_grid.northing.size // 3, - } - -And then we can pad it, but dropping the ``height`` coordinate first (this is -needed by the :func:`xrft.pad` function): - -.. jupyter-execute:: - - import xrft - - magnetic_grid_no_height = magnetic_grid.drop_vars("height") - magnetic_grid_padded = xrft.pad(magnetic_grid_no_height, pad_width) - magnetic_grid_padded - -.. jupyter-execute:: - - tmp = magnetic_grid_padded.plot(cmap="seismic", center=0, add_colorbar=False) - plt.gca().set_aspect("equal") - plt.title("Padded magnetic anomaly grid") - plt.gca().ticklabel_format(style="sci", scilimits=(0, 0)) - plt.colorbar(tmp, label="nT") - plt.show() - -Now that we have the padded grid, we can apply any grid transformation. - Upward derivative ----------------- @@ -88,15 +53,7 @@ magnetic anomaly grid using the :func:`harmonica.derivative_upward` function: import harmonica as hm - deriv_upward = hm.derivative_upward(magnetic_grid_padded) - deriv_upward - -This grid includes all the padding we added to the original magnetic grid, so -we better unpad it using :func:`xrft.unpad`: - -.. jupyter-execute:: - - deriv_upward = xrft.unpad(deriv_upward, pad_width) + deriv_upward = hm.derivative_upward(magnetic_grid) deriv_upward And plot it: @@ -160,14 +117,12 @@ frequency domain: .. jupyter-execute:: - deriv_easting = hm.derivative_easting(magnetic_grid_padded, method="fft") - deriv_easting = xrft.unpad(deriv_easting, pad_width) + deriv_easting = hm.derivative_easting(magnetic_grid, method="fft") deriv_easting .. jupyter-execute:: - deriv_northing = hm.derivative_northing(magnetic_grid_padded, method="fft") - deriv_northing = xrft.unpad(deriv_northing, pad_width) + deriv_northing = hm.derivative_northing(magnetic_grid, method="fft") deriv_northing .. jupyter-execute:: @@ -213,17 +168,9 @@ to upward continue it a height displacement of 500m: .. jupyter-execute:: upward_continued = hm.upward_continuation( - magnetic_grid_padded, height_displacement=500 + magnetic_grid, height_displacement=500 ) -This grid includes all the padding we added to the original magnetic grid, so -we better unpad it using :func:`xrft.unpad`: - -.. jupyter-execute:: - - upward_continued = xrft.unpad(upward_continued, pad_width) - upward_continued - And plot it: .. jupyter-execute:: @@ -269,11 +216,8 @@ remanence), then we can apply the reduction to the pole passing only the .. jupyter-execute:: rtp_grid = hm.reduction_to_pole( - magnetic_grid_padded, inclination=inclination, declination=declination + magnetic_grid, inclination=inclination, declination=declination ) - - # Unpad the reduced to the pole grid - rtp_grid = xrft.unpad(rtp_grid, pad_width) rtp_grid And plot it: @@ -296,15 +240,12 @@ magnetization vector of the sources, we can specify the mag_inclination, mag_declination = -25, 21 tmp = rtp_grid = hm.reduction_to_pole( - magnetic_grid_padded, + magnetic_grid, inclination=inclination, declination=declination, magnetization_inclination=mag_inclination, magnetization_declination=mag_declination, ) - - # Unpad the reduced to the pole grid - rtp_grid = xrft.unpad(rtp_grid, pad_width) rtp_grid .. jupyter-execute:: @@ -337,24 +278,17 @@ Let's define a cutoff wavelength of 5 kilometers: cutoff_wavelength = 5e3 -Then apply the two filters to our padded magnetic grid: +Then apply the two filters to our magnetic grid: .. jupyter-execute:: magnetic_low_freqs = hm.gaussian_lowpass( - magnetic_grid_padded, wavelength=cutoff_wavelength + magnetic_grid, wavelength=cutoff_wavelength ) magnetic_high_freqs = hm.gaussian_highpass( - magnetic_grid_padded, wavelength=cutoff_wavelength + magnetic_grid, wavelength=cutoff_wavelength ) -And unpad them: - -.. jupyter-execute:: - - magnetic_low_freqs = xrft.unpad(magnetic_low_freqs, pad_width) - magnetic_high_freqs = xrft.unpad(magnetic_high_freqs, pad_width) - .. jupyter-execute:: magnetic_low_freqs @@ -422,11 +356,8 @@ We can apply it through the :func:`harmonica.total_gradient_amplitude` function. .. jupyter-execute:: tga_grid = hm.total_gradient_amplitude( - magnetic_grid_padded + magnetic_grid ) - - # Unpad the total gradient amplitude grid - tga_grid = xrft.unpad(tga_grid, pad_width) tga_grid And plot it: diff --git a/filter-test.ipynb b/filter-test.ipynb new file mode 100644 index 000000000..e606eb071 --- /dev/null +++ b/filter-test.ipynb @@ -0,0 +1,902 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 2, + "id": "b5e97dfb-7beb-48b7-bb0f-ca9e811309be", + "metadata": {}, + "outputs": [], + "source": [ + "import ensaio\n", + "import harmonica as hm\n", + "import xarray as xr\n", + "import verde as vd\n", + "import numpy as np\n", + "import xrft" + ] + }, + { + "cell_type": "code", + "execution_count": 79, + "id": "7dc8a2a5-2405-4839-86b8-9fd4e2cd4572", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 79, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAmAAAAG2CAYAAADY5Dp/AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjYsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvq6yFwwAAAAlwSFlzAAAPYQAAD2EBqD+naQAAY0NJREFUeJzt3XtcFPX+P/DXcluuu6IIyyYqpqKEmQdL0QxNBc1LZeeo0aE8x0gjJUR+nmN2Ib8pakiWlqbHxFKjTmgnLxFYiZl4QymvdFNBBfGCLCDuAvv5/UGMLiCsuzCIvp6Pxzwe7sx7Zj77cWzevT+fmVUIIQSIiIiISDY2Ld0AIiIiorsNEzAiIiIimTEBIyIiIpIZEzAiIiIimTEBIyIiIpIZEzAiIiIimTEBIyIiIpIZEzAiIiIimTEBIyIiIpIZEzAiIiIimTEBIyIiohYTHx+PBx98EG5ubvD09MQTTzyBnJycRvfLyMhAYGAgHB0d0aVLF6xYsUKG1jadVpWAnT17Fn//+9/Rrl07ODs744EHHkBWVpa0XQiBuLg4aLVaODk5YfDgwTh69KjJMfR6PaZPnw4PDw+4uLhg7NixOHPmjElMUVERwsPDoVaroVarER4ejitXrpjE5ObmYsyYMXBxcYGHhweioqJgMBia7bsTERHdiTIyMvDSSy9hz549SE9PR2VlJUJCQlBWVnbTfU6ePInHHnsMgwYNwqFDh/DKK68gKioKKSkpMrbcOorW8mPcRUVF6NOnD4YMGYIXX3wRnp6e+P3339G5c2fce++9AICFCxdi3rx5SEpKQvfu3fHWW29h586dyMnJgZubGwDgxRdfxObNm5GUlIR27dph5syZuHz5MrKysmBrawsAGDlyJM6cOYOVK1cCAF544QV07twZmzdvBgBUVVXhgQceQPv27bF48WJcunQJzz33HMaNG4elS5e2QO8QERHdGS5cuABPT09kZGTgkUceqTfmX//6F7766iscP35cWjd16lT89NNPyMzMlKupVmk1Cdi///1v/Pjjj/jhhx/q3S6EgFarRXR0NP71r38BqK52eXl5YeHChZgyZQqKi4vRvn17fPLJJ5gwYQIA4Ny5c/Dx8cG2bdsQGhqK48ePw9/fH3v27EG/fv0AAHv27EFQUBBOnDgBPz8/fP311xg9ejTy8vKg1WoBAMnJyZg0aRIKCwuhUqka/T5GoxHnzp2Dm5sbFApFU3QRERHdoYQQKCkpgVarhY1N8w1eXbt2rUlGc4QQde5tSqUSSqWy0X1/++03dOvWDYcPH0ZAQEC9MY888gj69OmDd999V1q3adMmjB8/HlevXoW9vb11X0AOopXo2bOniI6OFn/9619F+/btxQMPPCBWrlwpbf/9998FAHHw4EGT/caOHSueffZZIYQQ3377rQAgLl++bBJz//33i9dff10IIcTq1auFWq2uc361Wi0++ugjIYQQr732mrj//vtNtl++fFkAEN9991297b927ZooLi6WlmPHjgkAXLhw4cKFi9lLXl7erd08b0F5eblwhm2TtNPV1bXOujfeeKPRNhiNRjFmzBjx8MMPNxjXrVs3MW/ePJN1P/74owAgzp07Z003yMYOrcQff/yB5cuXIyYmBq+88gr27duHqKgoKJVKPPvssygoKAAAeHl5mezn5eWF06dPAwAKCgrg4OAAd3f3OjE1+xcUFMDT07PO+T09PU1iap/H3d0dDg4OUkxt8fHxePPNN+usP5X5DVyuVM9B+zF6GfSffI6hbUphoy/DXxL/wDdxw5D+x2X865UVyNn4Kv697RcAQO7FMnze+Qi2dxyLkA4O2D1sHPp8tw2F/56MnNTfMfjnDPw8egwAoPeUYdj1wD/x0I738NOwaCSm/4KNT92DB+N/wj1d2yF50l8QGLkeAPC/BePR3XAa/zqkwL/PrIOjRxtUjorCii4DELU8HMoHQ7Cs37MAgMm/74Z9ZTnKPk3Ec+IxLHoiAO6Otrh/3Ov4fsPrOHhOh/977xsAwPG5/bCzwhul+kp0iJuCbknJcMjeisQn3kLMr9/i1JxpuHDsAgDAbd0X0G5aAPVfX8C4TQX48jE3RO0z4sfdp7Fn3nD0n5OOgQM6AQDee8gGT2wrwcYnNSj+YiXOPflvlPz9r2jv3x6d5y1DYrehiPnyVQCA4YFR+HXSRJyJ+xCuSjs8Yp+Pnq/vxWtRofiLVoUhYXPx88a5AICia1WY9eURrFVsg8vTMaiwc8Lqewdg2t6Pod+fhvde/ART/9gNu63vAQCuXbyCefc8g4S/AL84dMLj//4cWR88g4lJB3H2t0vYP7s3xqWcBQDEDO+O3tuXYN/gKDyc/RF++nA77t+yGTvuD4bfiHvhuWA1Dj36GABgwPaNSDtjwLDcrzD+VAA6erhgwWPd4TfuLSycPxXDu7RFaNx2AMDBmC4wKl3w7RVXKMPHY+CSabDt4IeZvZ7G4sOfoupMDn6MXgYAZl1nuRer51+Yc531njIMAMy6zv63YDwAoLvhNGIPAnPOrr/pdTb5990AYNZ1dnxudcXanOvMbd0XAGDWdVZzjQFo9DqrucYANHqd1VxjAMy6zq5dvAIAZl1nMcO7V//bN+M6G7B9IwCYdZ0djOkCAGZdZ/pPPgcAs66zzztX94M519muB/4JAGZdZ90N1f/tN+c6s68sBwCzrrOaawxAo9dZzTUGwKzrbOOTGgCoc521+3c8utzXW5pO0xwMBgOuogrP4B44WDFF3AAj1peeRV5ensmIkDnVr2nTpuHnn3/Grl27Go2tXWETfw7otZZRpVaTgBmNRvTt2xfz588HAPTp0wdHjx7F8uXL8eyzz0px9f2FNPaXUTumvnhLYm40e/ZsxMTESJ91Oh18fHygcnWBS4UzAMDF1ha2rm5QuSlg46CAjYMz3FQqOLlWQGGnhEqlgoOzKwDAzhFQOTvB2dUNKpUSLra2UKlUuOpgD2eb6j+72Fb/9aqcHeHs6gY3JyVcXN1g5+gClZsbbBycq/+sUsHG3gkA4OqmgsrgCgdnBdwclXBydkSlSgVHhQ1Uzo5QurnCUVE9V06lUsG+0h42TkrYGV3g6qaCm5MtFLYOcHVTwclVSMdVubnCxeAGo30lXO3tqr+Li3P1cVVucHWwx9U/2+vqpoKboxIqNzfYOZZA5eYKB2cjbBycq9vq4Cz1g8rNBnaORqjc3GB0VMLVTQWjrR1cHeyhUrlVH9+lun8NKhVc7e3g7OoGF6UdVA4lsLF3gpOrG1zdVFDYOsDtz/9YVNhXwc7RBW42SriqVKiwc4KjwhYqN1fonR3/bLcKds6OAAB7RyUcnF2hcgNcHar7U6VSwc7RBTYO5X9+F5fqv+c//y6cXd2gcnaEi211fzjb2P7ZbhVcbK/3sbOrHipnJ9g5ulSfQ6WCwk4JJ1c3uP3ZHzV9bFS6wrnSFY62tlC5OMPWzRUOsIHKzRVVLs7Scc25zuyqv5pZ15nqz34w5zpzdavu4+rrDA1eZzX/8TbnOlO5VV8T5lxnNW0w5zqrucaq+7jh66zmGqvpi4aus5prDIBZ15m9Y/XNy5zrzMW1+iZtznVW08fmXGc1fWzOdWb7ZxvMuc5Uzk5SnzV2nTnf8N0au85UBtc/+6zx68y+snrIypzrrOYaA9DodVZzjVX/d7vx66wmtvZ1VpN4yZFcOMEGDgrLEzDb6jwIKpXKrCk5NaZPn46vvvoKO3fuRIcOHRqM1Wg0dQoehYWFsLOzQ7t27W65zS2h1TwF6e3tDX9/f5N1PXv2RG5uLoDqvwwA9f6F1FSrNBoNDAYDioqKGow5f/58nfNfuHDBJKb2eYqKilBRUVGnMlZDqVRKF+OtXpRERERysVUorF5uhRAC06ZNw8aNG/Hdd9/B19e30X2CgoKQnp5usi4tLQ19+/ZtHfO/0IoSsIEDB9Z5L8gvv/yCTp2qh6J8fX2h0WhM/kIMBgMyMjIwYMAAAEBgYCDs7e1NYvLz83HkyBEpJigoCMXFxdi3b58Us3fvXhQXF5vEHDlyBPn5+VJMWloalEolAgMDm/ibExERycdGAdhasdjcYpHupZdewrp167Bhwwa4ubmhoKAABQUFKC8vl2Jmz55tMto1depUnD59GjExMTh+/Dg++ugjrF69GrGxsU3VDc2u1QxBzpgxAwMGDMD8+fMxfvx47Nu3DytXrpReFaFQKBAdHY358+ejW7du6NatG+bPnw9nZ2eEhYUBANRqNSZPnoyZM2eiXbt2aNu2LWJjY9GrVy8MG1Y9h6Vnz54YMWIEIiIi8OGHHwKofg3F6NGj4efnBwAICQmBv78/wsPD8fbbb+Py5cuIjY1FREQEK1tERES3YPny5QCAwYMHm6xfs2YNJk2aBKC6WFIz4gVUF122bduGGTNm4P3334dWq8V7772Hp556Sq5mW63VJGAPPvggNm3ahNmzZ2Pu3Lnw9fXFkiVL8Mwzz0gxs2bNQnl5OSIjI1FUVIR+/fohLS3NZNLiO++8Azs7O4wfPx7l5eUYOnQokpKSpHeAAcD69esRFRWFkJAQAMDYsWOxbNkyabutrS22bt2KyMhIDBw4EE5OTggLC0NCQoIMPUFERNR8LBlGNNkftz4E2ZikpKQ664KDg3Hw4MFbOtftpNUkYAAwevRojB49+qbbFQoF4uLiEBcXd9MYR0dHLF26tMEXprZt2xbr1q1rsC0dO3bEli1bGm0zERFRa1IzlGjx/k3XlDtaq5kDRkRERHSnaFUVMCIiImpecg9B3q2YgBEREZGEQ5Dy4BAkERERkcxYASMiIiIJhyDlwQSMiIiIJApYNzzG9Ms8HIIkIiIikhkrYERERCThEKQ8mIARERGRhE9ByoMJGBEREUmqEzBrKmBkDs4BIyIiIpIZK2BEREQk4RCkPJiAERERkYST8OXBIUgiIiIimbECRkRERBIbK4cgWdkxDxMwIiIiknAIUh5MVImIiIhkxgoYERERSfgUpDyYgBEREZGECZg8OARJREREJDNWwIiIiEjCSfjyYAJGREREEltYOQQpmqwpdzQmYERERCSxsbICZmPFvncTzgEjIiIikhkrYERERCSx+ilIFsDMwgSMiIiIJFZPwucQpFk4BElEREQkM1bAiIiISMIhSHkwASMiIiIJhyDlwSFIIiIiIpmxAkZEREQSG4XCqnd58T1g5mECRkRERBKFrQIKG8uTKAUTMLNwCJKIiIhIZqyAERERkcTGVgEbKypgHII0DytgREREdJ2tDRRWLLC99dRi586dGDNmDLRaLRQKBb788ssG43fs2AGFQlFnOXHihIVfWn6tJgGLi4ur09EajUbaLoRAXFwctFotnJycMHjwYBw9etTkGHq9HtOnT4eHhwdcXFwwduxYnDlzxiSmqKgI4eHhUKvVUKvVCA8Px5UrV0xicnNzMWbMGLi4uMDDwwNRUVEwGAzN9t2JiIjkorBRVM8Ds3SxoHpWVlaG3r17Y9myZbe0X05ODvLz86WlW7dut3zultKqhiDvu+8+bN++Xfpsa2sr/XnRokVITExEUlISunfvjrfeegvDhw9HTk4O3NzcAADR0dHYvHkzkpOT0a5dO8ycOROjR49GVlaWdKywsDCcOXMGqampAIAXXngB4eHh2Lx5MwCgqqoKo0aNQvv27bFr1y5cunQJzz33HIQQWLp0qVxdQUREdMcYOXIkRo4cecv7eXp6ok2bNk3fIBm0qgTMzs7OpOpVQwiBJUuWYM6cORg3bhwAYO3atfDy8sKGDRswZcoUFBcXY/Xq1fjkk08wbNgwAMC6devg4+OD7du3IzQ0FMePH0dqair27NmDfv36AQBWrVqFoKAg5OTkwM/PD2lpaTh27Bjy8vKg1WoBAIsXL8akSZMwb948qFQqmXqDiIio6dnYKmBjxevsbVC9r06nM1mvVCqhVCqtalttffr0wbVr1+Dv749XX30VQ4YMadLjN6dWMwQJAL/++iu0Wi18fX0xceJE/PHHHwCAkydPoqCgACEhIVKsUqlEcHAwdu/eDQDIyspCRUWFSYxWq0VAQIAUk5mZCbVaLSVfANC/f3+o1WqTmICAACn5AoDQ0FDo9XpkZWXdtO16vR46nc5kISIiut0obGysXgDAx8dHms6jVqsRHx/fZG309vbGypUrkZKSgo0bN8LPzw9Dhw7Fzp07m+wcza3VVMD69euHjz/+GN27d8f58+fx1ltvYcCAATh69CgKCgoAAF5eXib7eHl54fTp0wCAgoICODg4wN3dvU5Mzf4FBQXw9PSsc25PT0+TmNrncXd3h4ODgxRTn/j4eLz55pu3+K2JiIhap7y8PJNRoaasfvn5+cHPz0/6HBQUhLy8PCQkJOCRRx5psvM0p1aTgN04NtyrVy8EBQXh3nvvxdq1a9G/f38AdV/+JoRo9IVwtWPqi7ckprbZs2cjJiZG+qzT6eDj49Ng24iIiOTWVEOQKpVK1mk5/fv3x7p162Q7n7Va1RDkjVxcXNCrVy/8+uuv0ryw2hWowsJCqVql0WhgMBhQVFTUYMz58+frnOvChQsmMbXPU1RUhIqKijqVsRsplUrpYpT7oiQiIjKXVU9A/rm0hEOHDsHb27tFzm2JVpuA6fV6HD9+HN7e3vD19YVGo0F6erq03WAwICMjAwMGDAAABAYGwt7e3iQmPz8fR44ckWKCgoJQXFyMffv2STF79+5FcXGxScyRI0eQn58vxaSlpUGpVCIwMLBZvzMREdGdqLS0FNnZ2cjOzgZQPbc7Ozsbubm5AKpHkZ599lkpfsmSJfjyyy/x66+/4ujRo5g9ezZSUlIwbdq0lmi+RVrNEGRsbCzGjBmDjh07orCwEG+99RZ0Oh2ee+45KBQKREdHY/78+ejWrRu6deuG+fPnw9nZGWFhYQAAtVqNyZMnY+bMmWjXrh3atm2L2NhY9OrVS3oqsmfPnhgxYgQiIiLw4YcfAqh+DcXo0aOlseaQkBD4+/sjPDwcb7/9Ni5fvozY2FhERESwqkVERK1edRXL8vqMAsZb3ufAgQMmTzDWTNl57rnnkJSUhPz8fCkZA6qLLLGxsTh79iycnJxw3333YevWrXjssccsbrfcWk0CdubMGTz99NO4ePEi2rdvj/79+2PPnj3o1KkTAGDWrFkoLy9HZGQkioqK0K9fP6SlpUnvAAOAd955B3Z2dhg/fjzKy8sxdOhQJCUlmbxPbP369YiKipKelhw7dqzJi+FsbW2xdetWREZGYuDAgXByckJYWBgSEhJk6gkiIqLm01RzwG7F4MGDIYS46fakpCSTz7NmzcKsWbNu+Ty3k1aTgCUnJze4XaFQIC4uDnFxcTeNcXR0xNKlSxt8YWrbtm0bncTXsWNHbNmypcEYIiIioptpNQkYERERNT+FwrKfE5L2N/LHuM3BBIyIiIgkNrY2sLFiDpiNaLXP98mKCRgRERFJrH2VhEKwAmYOpqlEREREMmMFjIiIiCSsgMmDCRgRERFJOAdMHuwlIiIiIpmxAkZERETXWft7jhyCNAsTMCIiIpLYKBSwseI9YDYKJmDm4BAkERERkcxYASMiIiKJwtbGuh/jNrK2Yw4mYERERCSx+se4+VNEZmGaSkRERCQzVsCIiIhIYvWLWFkBMwsTMCIiIpJwDpg8mIARERGRxMYWVs4Ba8LG3MGYphIRERHJjBUwIiIikihsFFBY8SJWa/a9mzABIyIiIomNjZU/xl3FwTVzsJeIiIiIZMYKGBEREUmsfg2FNT/kfRdhAkZEREQSq19DYcW+dxP2EhEREZHMWAEjIiIiicLGBgobKypgVux7N2ECRkRERBIbWyufguQQpFnYS0REREQyYwWMiIiIrrNyEj5YATMLEzAiIiKSKGysfAqSc8DMwgSMiIiIJJyELw/2EhEREZHMWAEjIiIiSfWLWG2t2L+qCVtz52ICRkRERBK+CV8e7CUiIiIimbECRkRERBIbGxvYWDGR3pp97ybsJSIiIpLUDEFas9yqnTt3YsyYMdBqtVAoFPjyyy8b3ScjIwOBgYFwdHREly5dsGLFCgu+bctptQlYfHw8FAoFoqOjpXVCCMTFxUGr1cLJyQmDBw/G0aNHTfbT6/WYPn06PDw84OLigrFjx+LMmTMmMUVFRQgPD4darYZarUZ4eDiuXLliEpObm4sxY8bAxcUFHh4eiIqKgsFgaK6vS0REdMcqKytD7969sWzZMrPiT548icceewyDBg3CoUOH8MorryAqKgopKSnN3NKm0yqHIPfv34+VK1fi/vvvN1m/aNEiJCYmIikpCd27d8dbb72F4cOHIycnB25ubgCA6OhobN68GcnJyWjXrh1mzpyJ0aNHIysrC7Z/PvURFhaGM2fOIDU1FQDwwgsvIDw8HJs3bwYAVFVVYdSoUWjfvj127dqFS5cu4bnnnoMQAkuXLpWxJ4iIiJpWS0zCHzlyJEaOHGl2/IoVK9CxY0csWbIEANCzZ08cOHAACQkJeOqpp275/C2h1VXASktL8cwzz2DVqlVwd3eX1gshsGTJEsyZMwfjxo1DQEAA1q5di6tXr2LDhg0AgOLiYqxevRqLFy/GsGHD0KdPH6xbtw6HDx/G9u3bAQDHjx9Hamoq/vOf/yAoKAhBQUFYtWoVtmzZgpycHABAWloajh07hnXr1qFPnz4YNmwYFi9ejFWrVkGn08nfKURERE1EobCRXsZq0aJo/tQiMzMTISEhJutCQ0Nx4MABVFRUNPv5m0KrS8BeeukljBo1CsOGDTNZf/LkSRQUFJj8hSiVSgQHB2P37t0AgKysLFRUVJjEaLVaBAQESDGZmZlQq9Xo16+fFNO/f3+o1WqTmICAAGi1WikmNDQUer0eWVlZ9bZbr9dDp9OZLERERHeq2vc8vV7fZMcuKCiAl5eXyTovLy9UVlbi4sWLTXae5tSqErDk5GQcPHgQ8fHxdbYVFBQAQL1/ITXbCgoK4ODgYFI5qy/G09OzzvE9PT1NYmqfx93dHQ4ODlJMbfHx8dKcMrVaDR8fH3O+MhERkayaahK+j4+PyX2vvnu3Ve1UKEw+CyHqXX+7ajVzwPLy8vDyyy8jLS0Njo6ON42r7y+ksb+M2jH1xVsSc6PZs2cjJiZG+qzT6ZiEERHRbaep5oDl5eVBpVJJ65VKpdVtq6HRaOoUPAoLC2FnZ4d27do12XmaU6upgGVlZaGwsBCBgYGws7ODnZ0dMjIy8N5778HOzk6qSNX3F1KzTaPRwGAwoKioqMGY8+fP1zn/hQsXTGJqn6eoqAgVFRV1KmM1lEolVCqVyUJERHS7sbG1sXoBUOee15QJWFBQENLT003WpaWloW/fvrC3t2+y8zSnVpOADR06FIcPH0Z2dra09O3bF8888wyys7PRpUsXaDQak78Qg8GAjIwMDBgwAAAQGBgIe3t7k5j8/HwcOXJEigkKCkJxcTH27dsnxezduxfFxcUmMUeOHEF+fr4Uk5aWBqVSicDAwGbtByIiojtNaWmpdG8Hqud1Z2dnIzc3F0D1KNKzzz4rxU+dOhWnT59GTEwMjh8/jo8++girV69GbGxsSzTfIq1mCNLNzQ0BAQEm61xcXNCuXTtpfXR0NObPn49u3bqhW7dumD9/PpydnREWFgYAUKvVmDx5MmbOnIl27dqhbdu2iI2NRa9evaRJ/T179sSIESMQERGBDz/8EED1ayhGjx4NPz8/AEBISAj8/f0RHh6Ot99+G5cvX0ZsbCwiIiJY2SIiolZNYaOAwoq32Stsbn0O1oEDBzBkyBDpc82Uneeeew5JSUnIz8+XkjEA8PX1xbZt2zBjxgy8//770Gq1eO+991rNKyiAVpSAmWPWrFkoLy9HZGQkioqK0K9fP6SlpUnvAAOAd955B3Z2dhg/fjzKy8sxdOhQJCUlSe8AA4D169cjKipKelpy7NixJi+Hs7W1xdatWxEZGYmBAwfCyckJYWFhSEhIkO/LEhERNYOWeA/Y4MGDpUn09UlKSqqzLjg4GAcPHrzlc90uWnUCtmPHDpPPCoUCcXFxiIuLu+k+jo6OWLp0aYMvTG3bti3WrVvX4Lk7duyILVu23EpziYiIiAC08gSMiIiImlZLVMDuRkzAiIiISFLzJnxr9qfGsZeIiIiIZMYKGBEREUkUtrawueHBNEv2p8YxASMiIiIJ54DJg71EREREJDNWwIiIiEjCCpg8mIARERGRRGFj5VOQVux7N2ECRkRERBJWwOTBXiIiIiKSGStgREREJFHYKKyrgFnwY9x3IyZgREREJOEcMHmwl4iIiIhkxgoYERERSRQ2tlDYWPEmfCv2vZswASMiIqLrbGyrF2v2p0ZxCJKIiIhIZqyAERER0XU2NtWLNftTo5iAERERkURhawuFrRVzwKzY927CNJWIiIhIZqyAERER0XWchC8LJmBERER0nY2NlQkYB9fMwQSMiIiIJHwTvjzYS0REREQyYwWMiIiIrlNYOQdMwTlg5mACRkRERNdxEr4sOARJREREJDNWwIiIiEjCSfjyYAJGRERE13EIUhZMU4mIiIhkxgoYERERXccXscqCCRgRERFJ+GPc8mCaSkRERCQzVsCIiIjoOhsb64YROQRpFiZgREREdB2fgpQFEzAiIiKSKGxsobAiibJm37tJq6kTLl++HPfffz9UKhVUKhWCgoLw9ddfS9uFEIiLi4NWq4WTkxMGDx6Mo0ePmhxDr9dj+vTp8PDwgIuLC8aOHYszZ86YxBQVFSE8PBxqtRpqtRrh4eG4cuWKSUxubi7GjBkDFxcXeHh4ICoqCgaDodm+OxER0Z3ugw8+gK+vLxwdHREYGIgffvjhprE7duyAQqGos5w4cULGFlun1SRgHTp0wIIFC3DgwAEcOHAAjz76KB5//HEpyVq0aBESExOxbNky7N+/HxqNBsOHD0dJSYl0jOjoaGzatAnJycnYtWsXSktLMXr0aFRVVUkxYWFhyM7ORmpqKlJTU5GdnY3w8HBpe1VVFUaNGoWysjLs2rULycnJSElJwcyZM+XrDCIiouaisLk+D8ySRXHrqcVnn32G6OhozJkzB4cOHcKgQYMwcuRI5ObmNrhfTk4O8vPzpaVbt26WfmvZtZohyDFjxph8njdvHpYvX449e/bA398fS5YswZw5czBu3DgAwNq1a+Hl5YUNGzZgypQpKC4uxurVq/HJJ59g2LBhAIB169bBx8cH27dvR2hoKI4fP47U1FTs2bMH/fr1AwCsWrUKQUFByMnJgZ+fH9LS0nDs2DHk5eVBq9UCABYvXoxJkyZh3rx5UKlUMvYKERFR02qJIcjExERMnjwZzz//PABgyZIl+Oabb7B8+XLEx8ffdD9PT0+0adPG0qa2qFZTAbtRVVUVkpOTUVZWhqCgIJw8eRIFBQUICQmRYpRKJYKDg7F7924AQFZWFioqKkxitFotAgICpJjMzEyo1Wop+QKA/v37Q61Wm8QEBARIyRcAhIaGQq/XIysr66Zt1uv10Ol0JgsREdGdqvY9T6/X1xtnMBiQlZVlcn8GgJCQEOneezN9+vSBt7c3hg4diu+//77J2i6HVpWAHT58GK6urlAqlZg6dSo2bdoEf39/FBQUAAC8vLxM4r28vKRtBQUFcHBwgLu7e4Mxnp6edc7r6elpElP7PO7u7nBwcJBi6hMfHy/NK1Or1fDx8bnFb09ERCSDmjfhW7xUpxY+Pj4m972bVbIuXryIqqqqBu/htXl7e2PlypVISUnBxo0b4efnh6FDh2Lnzp1N2xfNqNUMQQKAn58fsrOzceXKFaSkpOC5555DRkaGtF2hUJjECyHqrKutdkx98ZbE1DZ79mzExMRIn3U6HZMwIiK6/TTRe8Dy8vJMpuUolcoGd7uVe7ifnx/8/Pykz0FBQcjLy0NCQgIeeeQRS1suq1ZVAXNwcEDXrl3Rt29fxMfHo3fv3nj33Xeh0WgAoE6mXFhYKGXUGo0GBoMBRUVFDcacP3++znkvXLhgElP7PEVFRaioqKiTvd9IqVRKT3DWLERERHeq2ve8myVgHh4esLW1bfAebo7+/fvj119/tarNcmpVCVhtQgjo9Xr4+vpCo9EgPT1d2mYwGJCRkYEBAwYAAAIDA2Fvb28Sk5+fjyNHjkgxQUFBKC4uxr59+6SYvXv3ori42CTmyJEjyM/Pl2LS0tKgVCoRGBjYrN+XiIioudX8FqQ1y61wcHBAYGCgyf0ZANLT06V7rzkOHToEb2/vWzp3S2o1Q5CvvPIKRo4cCR8fH5SUlCA5ORk7duxAamoqFAoFoqOjMX/+fHTr1g3dunXD/Pnz4ezsjLCwMACAWq3G5MmTMXPmTLRr1w5t27ZFbGwsevXqJT0V2bNnT4wYMQIRERH48MMPAQAvvPACRo8eLZU6Q0JC4O/vj/DwcLz99tu4fPkyYmNjERERwaoWERG1fi3wJvyYmBiEh4ejb9++CAoKwsqVK5Gbm4upU6cCqJ7Gc/bsWXz88ccAqp+S7Ny5M+677z4YDAasW7cOKSkpSElJsbzdMms1Cdj58+cRHh6O/Px8qNVq3H///UhNTcXw4cMBALNmzUJ5eTkiIyNRVFSEfv36IS0tDW5ubtIx3nnnHdjZ2WH8+PEoLy/H0KFDkZSUBNsbsvX169cjKipKehpj7NixWLZsmbTd1tYWW7duRWRkJAYOHAgnJyeEhYUhISFBpp4gIiJqRi2QgE2YMAGXLl3C3LlzkZ+fj4CAAGzbtg2dOnUCUD1ideM7wQwGA2JjY3H27Fk4OTnhvvvuw9atW/HYY49Z3m6ZtZoEbPXq1Q1uVygUiIuLQ1xc3E1jHB0dsXTpUixduvSmMW3btsW6desaPFfHjh2xZcuWBmOIiIjIfJGRkYiMjKx3W1JSksnnWbNmYdasWTK0qvm0mgSMiIiImp/CxgYKK56CtGbfuwkTMCIiIrpOYeUQpII/xm0OpqlEREREMmMFjIiIiK5TKCz6QW2T/alRTMCIiIjoOoWNlQkYB9fMwV4iIiIikhkrYERERCQRChsIK6pY1ux7N2ECRkRERNdxCFIW7CUiIiIimbECRkRERNcpFNY9ycinIM3CBIyIiIius7GpXqzZnxrFBIyIiIgknIQvD/YSERERkcxYASMiIqLr+BSkLCxKwN5777161ysUCjg6OqJr16545JFHYGvLH+QkIiJqVZiAycKiBOydd97BhQsXcPXqVbi7u0MIgStXrsDZ2Rmurq4oLCxEly5d8P3338PHx6ep20xERETUqlmUps6fPx8PPvggfv31V1y6dAmXL1/GL7/8gn79+uHdd99Fbm4uNBoNZsyY0dTtJSIiouZUUwGzZqFGWVQBe/XVV5GSkoJ7771XWte1a1ckJCTgqaeewh9//IFFixbhqaeearKGEhERUfMTCoWVT0HeHe8Bu3LlCtq0aWPx/hb1cH5+PiorK+usr6ysREFBAQBAq9WipKTE4oYRERER3Q4WLlyIzz77TPo8fvx4tGvXDvfccw9++ukni45pUQI2ZMgQTJkyBYcOHZLWHTp0CC+++CIeffRRAMDhw4fh6+trUaOIiIiohXAIso4PP/xQmtOenp6O9PR0fP311xg5ciT+3//7fxYd06IhyNWrVyM8PByBgYGwt7cHUF39Gjp0KFavXg0AcHV1xeLFiy1qFBEREbUQ/hRRHfn5+VICtmXLFowfPx4hISHo3Lkz+vXrZ9ExLUrANBoN0tPTceLECfzyyy8QQqBHjx7w8/OTYoYMGWJRg4iIiIhuJ+7u7sjLy4OPjw9SU1Px1ltvAQCEEKiqqrLomFa9iLVHjx7o0aOHNYcgIiKi2wnfA1bHuHHjEBYWhm7duuHSpUsYOXIkACA7Oxtdu3a16JgWJWBVVVVISkrCt99+i8LCQhiNRpPt3333nUWNISIiopbF34Ks65133oGvry9yc3OxaNEiuLq6AqgemoyMjLTomBYlYC+//DKSkpIwatQoBAQEQHEHjvcSERHdlRQ2gA0rYDUqKirwwgsv4LXXXkOXLl1MtkVHR1t8XIsSsOTkZHz++ed47LHHLD4xERER0e3O3t4emzZtwmuvvdakx7UoTXVwcLB4zJOIiIhuY3wNRR1PPvkkvvzyyyY9pkUVsJkzZ+Ldd9/FsmXLOPxIRER0J+Ek/Dq6du2K//u//8Pu3bsRGBgIFxcXk+1RUVG3fEyLErBdu3bh+++/x9dff4377rtPehdYjY0bN1pyWCIiIqLbzn/+8x+0adMGWVlZyMrKMtmmUCjkS8DatGmDJ5980pJdiYiI6HbGClgdJ0+ebPJjWpSArVmzpqnbQURERLcB/hi3PKx6ESsRERHR3eDMmTP46quvkJubC4PBYLItMTHxlo9ndgL2l7/8Bd9++y3c3d3Rp0+fBiffHzx48JYbQkRERLcBDkHW8e2332Ls2LHw9fVFTk4OAgICcOrUKQgh8Je//MWiY5qdgD3++ONQKpUAgCeeeMKikxEREdFtjj/GXcfs2bMxc+ZMzJ07F25ubkhJSYGnpyeeeeYZjBgxwqJjmp2AvfHGG/X+mYiIiOhOdvz4cXz66acAADs7O5SXl8PV1RVz587F448/jhdffPGWj2lVndBgMODMmTPIzc01WZpDfHw8HnzwQbi5ucHT0xNPPPEEcnJyTGKEEIiLi4NWq4WTkxMGDx6Mo0ePmsTo9XpMnz4dHh4ecHFxwdixY3HmzBmTmKKiIoSHh0OtVkOtViM8PBxXrlwxicnNzcWYMWPg4uICDw8PREVF1RkTJiIianVa6EWsH3zwAXx9feHo6IjAwED88MMPDcZnZGQgMDAQjo6O6NKlC1asWGHRec3h4uICvV4PANBqtfj999+lbRcvXrTomBb10i+//IJBgwbByckJnTp1gq+vL3x9fdG5c2f4+vpa1JDGZGRk4KWXXsKePXuQnp6OyspKhISEoKysTIpZtGgREhMTsWzZMuzfvx8ajQbDhw9HSUmJFBMdHY1NmzYhOTkZu3btQmlpKUaPHo2qqiopJiwsDNnZ2UhNTUVqaiqys7MRHh4uba+qqsKoUaNQVlaGXbt2ITk5GSkpKZg5c2azfHciIiK51PwYtzXLrfrss88QHR2NOXPm4NChQxg0aBBGjhx506LOyZMn8dhjj2HQoEE4dOgQXnnlFURFRSElJcXar1+v/v3748cffwQAjBo1CjNnzsS8efPwz3/+E/3797fomBY9BfmPf/wDdnZ22LJlC7y9vWV5G35qaqrJ5zVr1sDT0xNZWVl45JFHIITAkiVLMGfOHIwbNw4AsHbtWnh5eWHDhg2YMmUKiouLsXr1anzyyScYNmwYAGDdunXw8fHB9u3bERoaiuPHjyM1NRV79uxBv379AACrVq1CUFAQcnJy4Ofnh7S0NBw7dgx5eXnQarUAgMWLF2PSpEmYN28eVCpVs/cHERFRs2iBSfiJiYmYPHkynn/+eQDAkiVL8M0332D58uWIj4+vE79ixQp07NgRS5YsAQD07NkTBw4cQEJCAp566inL295A+0pLSwEAcXFxKC0txWeffYauXbvinXfeseiYFiVg2dnZyMrKQo8ePSw6aVMoLi4GALRt2xZAdTZcUFCAkJAQKUapVCI4OBi7d+/GlClTkJWVhYqKCpMYrVaLgIAA7N69G6GhocjMzIRarZaSL6A681Wr1di9ezf8/PyQmZmJgIAAKfkCgNDQUOj1emRlZWHIkCF12qvX66XyJQDodLqm6wwiIqLbTO37nFKplB7mu5HBYEBWVhb+/e9/m6wPCQnB7t276z12Zmamyb0cqL4Pr169GhUVFXV+ocdaXbp0kf7s7OyMDz74wOpjWpTi+vv7Wzzm2RSEEIiJicHDDz+MgIAAAEBBQQEAwMvLyyTWy8tL2lZQUAAHBwe4u7s3GOPp6VnnnJ6eniYxtc/j7u4OBwcHKaa2+Ph4aU6ZWq2Gj4/PrX5tIiKiZlf9IlbrFgDw8fExue/VV8kCqudQVVVVNXj/rq2++7CXlxcqKytbND+5FWZXwG7MZBcuXIhZs2Zh/vz56NWrV51Ms7mH4KZNm4aff/4Zu3btqrOt9nCoEKLRIdLaMfXFWxJzo9mzZyMmJkb6rNPpmIQREdFtR4jqxZr9ASAvL88kH6iv+nWjW71/1xdf33pLubu7m32sy5cv3/LxzU7A2rRpY9IQIQSGDh1qElPTWTdOaG9q06dPx1dffYWdO3eiQ4cO0nqNRgOgOiv29vaW1hcWFkpZskajgcFgQFFRkUkVrLCwEAMGDJBizp8/X+e8Fy5cMDnO3r17TbYXFRWhoqKiTkZe42alVyIiojuRSqUyqyDj4eEBW1vbOtWuG+/ftWk0mnrj7ezs0K5dO8sbfYOa+WXNxewE7Pvvv2/OdjRKCIHp06dj06ZN2LFjR52nLX19faHRaJCeno4+ffoAqB5XzsjIwMKFCwEAgYGBsLe3R3p6OsaPHw8AyM/Px5EjR7Bo0SIAQFBQEIqLi7Fv3z489NBDAIC9e/eiuLhYStKCgoIwb9485OfnS8leWloalEolAgMDm78ziIiImolRCBitKIHd6r4ODg4IDAxEeno6nnzySWl9eno6Hn/88Xr3CQoKwubNm03WpaWloW/fvk02/+u5555rkuPcjNkJWHBwsPTn3Nxc+Pj41Fv+y8vLa7rW3eCll17Chg0b8L///Q9ubm5S5qtWq+Hk5ASFQoHo6GjMnz8f3bp1Q7du3TB//nw4OzsjLCxMip08eTJmzpyJdu3aoW3btoiNjUWvXr2kpyJ79uyJESNGICIiAh9++CEA4IUXXsDo0aPh5+cHoHpioL+/P8LDw/H222/j8uXLiI2NRUREBJ+AJCKiVk38uViz/62KiYlBeHg4+vbti6CgIKxcuRK5ubmYOnUqgOppPGfPnsXHH38MAJg6dSqWLVuGmJgYREREIDMzE6tXr5ZeltqcysvLUVFRYbLOknu/RU9B+vr6Ij8/v85k9cuXL8PX17dZhiCXL18OABg8eLDJ+jVr1mDSpEkAgFmzZqG8vByRkZEoKipCv379kJaWBjc3Nyn+nXfegZ2dHcaPH4/y8nIMHToUSUlJsLW1lWLWr1+PqKgo6QmLsWPHYtmyZdJ2W1tbbN26FZGRkRg4cCCcnJwQFhaGhISEJv/eREREd7oJEybg0qVLmDt3LvLz8xEQEIBt27ahU6dOAKpHq258J5ivry+2bduGGTNm4P3334dWq8V7773XLK+gAICysjL861//wueff45Lly7V2W5J3mNRAnaziXGlpaVwdHS05JBmnbMxCoUCcXFxiIuLu2mMo6Mjli5diqVLl940pm3btli3bl2D5+rYsSO2bNnSaJuIiIhaE6OoXqzZ3xKRkZGIjIysd1tSUlKddcHBwTh48KBlJ7tFs2bNwvfff48PPvgAzz77LN5//32cPXsWH374IRYsWGDRMW8pAat5ik+hUOC1116Ds7OztK2qqgp79+7FAw88YFFDiIiIqOUJIcwqejS0/51m8+bN+PjjjzF48GD885//xKBBg9C1a1d06tQJ69evxzPPPHPLx7ylBOzQoUMAqjv38OHDcHBwkLY5ODigd+/eiI2NveVGEBEREd2uaqZYAdXzvWpeO/Hwww9b9EPcwC0mYDVPQk6aNAlLly41mVtFRERErV9LDUHezrp06YJTp06hU6dO8Pf3x+eff46HHnoImzdvRps2bSw65i2/Cb+yshLr1q3D6dOnLTohERER3d6EFcud6B//+Ad++uknANVPZH7wwQdQKpWYMWMG/t//+38WHfOWJ+Hb2dmhU6dOzfqyVSIiImoZrIDVNWPGDOnPQ4YMwYkTJ3DgwAHce++96N27t0XHtOgpyFdffRWzZ8/GunXrpB/DJiIiIrobdOzYER07drTqGBYlYO+99x5+++03aLVadOrUCS4uLibb5XoslIiIiJoWn4KsKyoqCl27dkVUVJTJ+mXLluG3336z6GeLLErAnnjiCUt2IyIiotuc8c/Fmv3vNCkpKfjqq6/qrB8wYAAWLFggXwL2xhtvWLIbERERUatz6dIlqNXqOutVKhUuXrxo0TEtSsBqZGVl4fjx41AoFPD395d+BJuIiIhaJyGqF2v2v9N07doVqampmDZtmsn6r7/+Gl26dLHomBYlYIWFhZg4cSJ27NiBNm3aQAiB4uJiDBkyBMnJyWjfvr1FjSEiIqKWxacg64qJicG0adNw4cIFPProowCAb7/9FgkJCXj33XctOuYtvwcMAKZPnw6dToejR4/i8uXLKCoqwpEjR6DT6epMUCMiIiJqzf75z39i8eLFWL16NYYMGYIhQ4Zg/fr1WLFiBSIiIiw6pkUVsNTUVGzfvh09e/aU1vn7++P9999HSEiIRQ0hIiKilsenIOsqLy/Hc889hxdffBEXLlzA+fPnkZ6eDi8vL4uPaVEFzGg0wt7evs56e3t7GI134vMPREREdwdjEyx3mscffxwff/wxgOpcZ9iwYUhMTMQTTzyB5cuXW3RMixKwRx99FC+//DLOnTsnrTt79ixmzJiBoUOHWtQQIiIiotvRwYMHMWjQIADAF198AS8vL5w+fRoff/wx3nvvPYuOaVECtmzZMpSUlKBz586499570bVrV3Tu3BklJSUWN4SIiIhansD1JyEtWlr6CzSDq1evws3NDQCQlpaGcePGwcbGBv3797f4t7EtmgPm4+ODgwcPYvv27Th+/DiEEPD398ewYcMsagQRERHdHoxCwGjFPC5r9r1dde3aFV9++SWefPJJfPPNN9JvQxYWFkKlUll0TIvfA/btt9/iu+++Q2FhIYxGI7Kzs7FhwwYAwEcffWTpYYmIiKgFCVhXxbrz0i/g9ddfR1hYmDTVKigoCEB1NczSd6BalIC9+eabmDt3Lvr27Qtvb28oFAqLTk5ERER0u/vrX/+Khx9+GPn5+ejdu7e0fujQoXjyySctOqZFCdiKFSuQlJSE8PBwi05KREREtye+iLV+Go0GGo3GZN1DDz1k8fEsSsAMBgMGDBhg8UmJiIjoNmXlTxHdkWOQzcCipyCff/55ab4XEREREd0aiypg165dw8qVK7F9+3bcf//9dV7KmpiY2CSNIyIiInkZIWC0ooxlzb53E4sSsJ9//hkPPPAAAODIkSMm2zghn4iIqPUSVg5B3oFvoWgWFiVg33//fVO3g4iIiOiuYfF7wIiIiOjOw6cg5cEEjIiIiCQcgpSHRU9BEhEREZHlWAEjIiIiCZ+ClAcTMCIiIpJwCFIeTMCIiIhIYhQCRiuyKGv2vZtwDhgRERGRzFgBIyIiIkmVsXqxZn9qHBMwIiIiknAIUh4cgiQiIiKSWatKwHbu3IkxY8ZAq9VCoVDgyy+/NNkuhEBcXBy0Wi2cnJwwePBgHD161CRGr9dj+vTp8PDwgIuLC8aOHYszZ86YxBQVFSE8PBxqtRpqtRrh4eG4cuWKSUxubi7GjBkDFxcXeHh4ICoqCgaDoTm+NhERkWyMQqDKiqW5K2Dm3KNrmzRpEhQKhcnSv3//Zm1nY1pVAlZWVobevXtj2bJl9W5ftGgREhMTsWzZMuzfvx8ajQbDhw9HSUmJFBMdHY1NmzYhOTkZu3btQmlpKUaPHo2qqiopJiwsDNnZ2UhNTUVqaiqys7MRHh4uba+qqsKoUaNQVlaGXbt2ITk5GSkpKZg5c2bzfXkiIiIZVP8UkbBiad72NXaPvpkRI0YgPz9fWrZt29a8DW1Eq5oDNnLkSIwcObLebUIILFmyBHPmzMG4ceMAAGvXroWXlxc2bNiAKVOmoLi4GKtXr8Ynn3yCYcOGAQDWrVsHHx8fbN++HaGhoTh+/DhSU1OxZ88e9OvXDwCwatUqBAUFIScnB35+fkhLS8OxY8eQl5cHrVYLAFi8eDEmTZqEefPmQaVSydAbREREdxdz7tE3o1QqodFo5Gpqo1pVBawhJ0+eREFBAUJCQqR1SqUSwcHB2L17NwAgKysLFRUVJjFarRYBAQFSTGZmJtRqtfQXCwD9+/eHWq02iQkICJCSLwAIDQ2FXq9HVlZWve3T6/XQ6XQmCxER0e2m5ilIaxYAde55er3e6raZc4++mR07dsDT0xPdu3dHREQECgsLrW6PNe6YBKygoAAA4OXlZbLey8tL2lZQUAAHBwe4u7s3GOPp6Vnn+J6eniYxtc/j7u4OBwcHKaa2+Ph4abxarVbDx8fHgm9JRETUvKwbfrw+B8zHx8fkvhcfH29128y5R9dn5MiRWL9+Pb777jssXrwY+/fvx6OPPtokSaGlWtUQpDkUCoXJZyFEnXW11Y6pL96SmBvNnj0bMTEx0medTsckjIiI7lh5eXkmU3KUSuVNY+Pi4vDmm282eLz9+/cDuPX7LwBMmDBB+nNAQAD69u2LTp06YevWrdK0JbndMQlYzbhuQUEBvL29pfWFhYVStUqj0cBgMKCoqMikClZYWIgBAwZIMefPn69z/AsXLpgcZ+/evSbbi4qKUFFRUacyVkOpVDZ48REREd0Oap5mtGZ/AFCpVGbPiZ42bRomTpzYYEznzp3x888/N3qPNoe3tzc6deqEX3/91ex9mtodMwTp6+sLjUaD9PR0aZ3BYEBGRoaUXAUGBsLe3t4kJj8/H0eOHJFigoKCUFxcjH379kkxe/fuRXFxsUnMkSNHkJ+fL8WkpaVBqVQiMDCwWb8nERFRczKi5klICxcLzunh4YEePXo0uDg6Opp1jzbHpUuXkJeXZ1KwkVurSsBKS0uRnZ2N7OxsANUT77Ozs5GbmwuFQoHo6GjMnz8fmzZtwpEjRzBp0iQ4OzsjLCwMAKBWqzF58mTMnDkT3377LQ4dOoS///3v6NWrl/RUZM+ePTFixAhERERgz5492LNnDyIiIjB69Gjp6YqQkBD4+/sjPDwchw4dwrfffovY2FhERETwCUgiImrVqozC6qW5mHOPBoAePXpg06ZNAKpzh9jYWGRmZuLUqVPYsWMHxowZAw8PDzz55JPN1tbGtKohyAMHDmDIkCHS55o5Vc899xySkpIwa9YslJeXIzIyEkVFRejXrx/S0tLg5uYm7fPOO+/Azs4O48ePR3l5OYYOHYqkpCTY2tpKMevXr0dUVJT0tOTYsWNN3j1ma2uLrVu3IjIyEgMHDoSTkxPCwsKQkJDQ3F1ARER0V2vsHg0AOTk5KC4uBlB9zz58+DA+/vhjXLlyBd7e3hgyZAg+++wzk/xAbq0qARs8eDBEA+PSCoUCcXFxiIuLu2mMo6Mjli5diqVLl940pm3btli3bl2DbenYsSO2bNnSaJuJiIhaE2Hl2+wbuk83BXPu0Te2wcnJCd98802ztskSrSoBIyIiouZVJaoXa/anxrWqOWBEREREdwJWwIiIiEhitHIIsrl/jPtOwQSMiIiIJNY+ydicT0HeSTgESURERCQzVsCIiIhIwiFIeTABIyIiIgmfgpQHhyCJiIiIZMYKGBEREUk4BCkPJmBEREQkMRoFjFY8yWjNvncTJmBEREQkMVo5B4z5l3k4B4yIiIhIZqyAERERkYRzwOTBBIyIiIgkVUKgyookypp97yYcgiQiIiKSGStgREREJOFTkPJgAkZERESSKlj5Jvwma8mdjUOQRERERDJjBYyIiIgkfApSHkzAiIiISMKnIOXBIUgiIiIimbECRkRERBKjUaCKT0E2OyZgREREJKmyMgGzZt+7CRMwIiIikjABkwfngBERERHJjBUwIiIiklQZratiVRmbsDF3MCZgREREJOEQpDw4BElEREQkM1bAiIiISMIKmDyYgBEREZGE7wGTB4cgiYiIiGTGChgRERFJqoSVQ5D8LUizMAEjIiIiCeeAyYNDkEREREQyYwWMiIiIJKyAyYMVMCt98MEH8PX1haOjIwIDA/HDDz+0dJOIiIgsVmkUVi/Nad68eRgwYACcnZ3Rpk0bs/YRQiAuLg5arRZOTk4YPHgwjh492qztbAwTMCt89tlniI6Oxpw5c3Do0CEMGjQII0eORG5ubks3jYiIyCI1FTBrluZkMBjwt7/9DS+++KLZ+yxatAiJiYlYtmwZ9u/fD41Gg+HDh6OkpKQZW9owJmBWSExMxOTJk/H888+jZ8+eWLJkCXx8fLB8+fKWbhoREdEd6c0338SMGTPQq1cvs+KFEFiyZAnmzJmDcePGISAgAGvXrsXVq1exYcOGZm7tzTEBs5DBYEBWVhZCQkJM1oeEhGD37t114vV6PXQ6nclCRER0uzFaWf2qeRFr7XueXq9vke9z8uRJFBQUmNyvlUolgoOD671fy4UJmIUuXryIqqoqeHl5maz38vJCQUFBnfj4+Hio1Wpp8fHxkaupREREZqsSwuoFAHx8fEzue/Hx8S3yfWruyeber+XCBMxKCoXC5LMQos46AJg9ezaKi4ulJS8vT64mEhERyS4vL8/kvjd79uybxsbFxUGhUDS4HDhwwKr2mHu/lgtfQ2EhDw8P2Nra1smeCwsL62TZQHW5U6lUytU8IiIiizTVayhUKhVUKpVZ+0ybNg0TJ05sMKZz584WtUej0QCoroR5e3tL6292v5YLEzALOTg4IDAwEOnp6XjyySel9enp6Xj88cdbsGVERESWa4n3gHl4eMDDw8PiczbE19cXGo0G6enp6NOnD4DqedwZGRlYuHBhs5zTHByCtEJMTAz+85//4KOPPsLx48cxY8YM5ObmYurUqS3dNCIiojtSbm4usrOzkZubi6qqKmRnZyM7OxulpaVSTI8ePbBp0yYA1UOP0dHRmD9/PjZt2oQjR45g0qRJcHZ2RlhYWEt9DVbArDFhwgRcunQJc+fORX5+PgICArBt2zZ06tSppZtGRERkkdv9Tfivv/461q5dK32uqWp9//33GDx4MAAgJycHxcXFUsysWbNQXl6OyMhIFBUVoV+/fkhLS4Obm1uztrUhTMCsFBkZicjIyJZuBhERUZOoEkZUGY1W7d+ckpKSkJSU1GCMEKZJoEKhQFxcHOLi4pqvYbeIQ5BEREREMmMFjIiIiCRGK4cgjc08BHmnYAJGREREkiqjgM1tPAfsTsEEjIiIiCSVRkBhRRJV2bxTwO4YnANGREREJDNWwIiIiEjCIUh5MAEjIiIiCRMweXAIkoiIiEhmrIARERGRhBUweTABIyIiIgnfAyYPDkESERERyYwVMCIiIpJUGYVV7wHjEKR5mIARERGRRAgBYUUSVfuHsKl+HIIkIiIikhkrYERERCQxGoVVE+k5Cd88TMCIiIhIIoSwahiRQ5DmYQJGREREEmG0cg4YK2Bm4RwwIiIiIpmxAkZEREQSzgGTBxMwIiIikghj9WLN/tQ4DkESERERyYwVMCIiIpLwKUh5MAEjIiIiCeeAyYNDkEREREQyYwWMiIiIJHwPmDyYgBEREdF1ViZgYAJmFg5BEhEREcmMFTAiIiKSGIWAwoonGY18CtIsTMCIiIhIIoSVc8CYgJmFCRgRERFJOAlfHpwDRkRERCQzVsCIiIhIYjQCCqtexNqEjbmDMQEjIiIiCX+KSB4cgiQiIiKSGStgREREJBHG6sWa/alxraYCNm/ePAwYMADOzs5o06ZNvTG5ubkYM2YMXFxc4OHhgaioKBgMBpOYw4cPIzg4GE5OTrjnnnswd+7cOuXSjIwMBAYGwtHREV26dMGKFSvqnCslJQX+/v5QKpXw9/fHpk2bmuy7EhERtZSaH+O2ZmlO5uQDtU2aNAkKhcJk6d+/f7O2szGtJgEzGAz429/+hhdffLHe7VVVVRg1ahTKysqwa9cuJCcnIyUlBTNnzpRidDodhg8fDq1Wi/3792Pp0qVISEhAYmKiFHPy5Ek89thjGDRoEA4dOoRXXnkFUVFRSElJkWIyMzMxYcIEhIeH46effkJ4eDjGjx+PvXv3Nl8HEBERUaP5wM2MGDEC+fn50rJt27ZmaqF5Ws0Q5JtvvgkASEpKqnd7Wloajh07hry8PGi1WgDA4sWLMWnSJMybNw8qlQrr16/HtWvXkJSUBKVSiYCAAPzyyy9ITExETEwMFAoFVqxYgY4dO2LJkiUAgJ49e+LAgQNISEjAU089BQBYsmQJhg8fjtmzZwMAZs+ejYyMDCxZsgSffvpp83YEERFRM7rd3wPWWD5wM0qlEhqNphlaZJlWUwFrTGZmJgICAqTkCwBCQ0Oh1+uRlZUlxQQHB0OpVJrEnDt3DqdOnZJiQkJCTI4dGhqKAwcOoKKiosGY3bt337R9er0eOp3OZCEiIrrd1CRg1iy3ox07dsDT0xPdu3dHREQECgsLW7Q9d0wCVlBQAC8vL5N17u7ucHBwQEFBwU1jaj43FlNZWYmLFy82GFNzjPrEx8dDrVZLi4+PjwXfkoiIqHWoXXTQ6/Ut1paRI0di/fr1+O6777B48WLs378fjz76aIu2qUUTsLi4uDqT4movBw4cMPt4CoWizjohhMn62jE1E/CbIqa+89eYPXs2iouLpSUvL6+xr0NERCQ7oxBWLwDg4+NjUniIj4+/6TmbOh+obcKECRg1ahQCAgIwZswYfP311/jll1+wdetWi49prRadAzZt2jRMnDixwZjOnTubdSyNRlNnEnxRUREqKiqkapVGo6lTpaopQTYWY2dnh3bt2jUYU7sqdiOlUmky9ElERHQ7aqo5YHl5eVCpVNL6hu6BTZkPmMPb2xudOnXCr7/+2mTHvFUtmoB5eHjAw8OjSY4VFBSEefPmIT8/H97e3gCqJ+YrlUoEBgZKMa+88goMBgMcHBykGK1WK/3FBgUFYfPmzSbHTktLQ9++fWFvby/FpKenY8aMGSYxAwYMaJLvQkRE1FKEsDIB+7MCplKpTBKwhjRlPmCOS5cuIS8vT8oXWkKrmQOWm5uL7Oxs5ObmoqqqCtnZ2cjOzkZpaSkAICQkBP7+/ggPD8ehQ4fw7bffIjY2FhEREdIFEBYWBqVSiUmTJuHIkSPYtGkT5s+fLz0BCQBTp07F6dOnERMTg+PHj+Ojjz7C6tWrERsbK7Xl5ZdfRlpaGhYuXIgTJ05g4cKF2L59O6Kjo2XvFyIiortJY/kAAPTo0UN6P2dpaSliY2ORmZmJU6dOYceOHRgzZgw8PDzw5JNPttTXaD2voXj99dexdu1a6XOfPn0AAN9//z0GDx4MW1tbbN26FZGRkRg4cCCcnJwQFhaGhIQEaR+1Wo309HS89NJL6Nu3L9zd3RETE4OYmBgpxtfXF9u2bcOMGTPw/vvvQ6vV4r333pNeQQEAAwYMQHJyMl599VW89tpruPfee/HZZ5+hX79+MvQEERFR8xFWvky1uZ+CbCwfAICcnBwUFxcDAGxtbXH48GF8/PHHuHLlCry9vTFkyBB89tlncHNza9a2NqTVJGBJSUmNvvOjY8eO2LJlS4MxvXr1ws6dOxuMCQ4OxsGDBxuM+etf/4q//vWvDcYQERG1Nrf7j3Gbkw/c2AYnJyd88803zdomS7SaIUgiIiKiO0WrqYARERFR87vd34R/p2ACRkRERBKjUQBWJFHN/WPcdwoOQRIRERHJjBUwIiIikghjFYSxyqr9qXFMwIiIiEjCBEweHIIkIiIikhkrYERERCQRRqOVFTBjE7bmzsUEjIiIiCSiqgqiyooEzIp97yZMwIiIiEgihJVzwAQTMHNwDhgRERGRzFgBIyIiIgmfgpQHEzAiIiKSMAGTB4cgiYiIiGTGChgRERFJWAGTBxMwIiIikvA9YPLgECQRERGRzFgBIyIiIonRWAVYUQEzcgjSLEzAiIiISMI5YPLgECQRERGRzFgBIyIiIgkrYPJgAkZERETXVVVB2FiRRPHHuM3CBIyIiIgkQlg3CZ8/xm0ezgEjIiIikhkrYERERCQRRqN1FTC+iNUsTMCIiIhIIqx8Dxgn4ZuHQ5BEREREMmMFjIiIiCTVQ5CWDyNyCNI8TMCIiIhIwiFIeXAIkoiIiEhmrIARERGRhBUweTABIyIiIonRWAUFE7BmxyFIIiIiIpmxAkZEREQSUWUEFFZUwKr4FKQ5mIARERGRhL8FKY9WMQR56tQpTJ48Gb6+vnBycsK9996LN954AwaDwSQuNzcXY8aMgYuLCzw8PBAVFVUn5vDhwwgODoaTkxPuuecezJ07F0IIk5iMjAwEBgbC0dERXbp0wYoVK+q0KSUlBf7+/lAqlfD398emTZua/osTERHJTBirrF6oca0iATtx4gSMRiM+/PBDHD16FO+88w5WrFiBV155RYqpqqrCqFGjUFZWhl27diE5ORkpKSmYOXOmFKPT6TB8+HBotVrs378fS5cuRUJCAhITE6WYkydP4rHHHsOgQYNw6NAhvPLKK4iKikJKSooUk5mZiQkTJiA8PBw//fQTwsPDMX78eOzdu1eeDiEiIroLmVuQqU0Igbi4OGi1Wjg5OWHw4ME4evSoTK2uX6sYghwxYgRGjBghfe7SpQtycnKwfPlyJCQkAADS0tJw7Ngx5OXlQavVAgAWL16MSZMmYd68eVCpVFi/fj2uXbuGpKQkKJVKBAQE4JdffkFiYiJiYmKgUCiwYsUKdOzYEUuWLAEA9OzZEwcOHEBCQgKeeuopAMCSJUswfPhwzJ49GwAwe/ZsZGRkYMmSJfj0009l7BkiIqKmJYxV1s0Ba8YK2I0Fma5du+LIkSOIiIhAWVmZlA/UZ9GiRUhMTERSUhK6d++Ot956C8OHD0dOTg7c3Nyarb0NaRUVsPoUFxejbdu20ufMzEwEBARIyRcAhIaGQq/XIysrS4oJDg6GUqk0iTl37hxOnTolxYSEhJicKzQ0FAcOHEBFRUWDMbt3775pe/V6PXQ6nclCRER0u7mdhyBHjBiBNWvWICQkBF26dMHYsWMRGxuLjRs33vz7CIElS5Zgzpw5GDduHAICArB27VpcvXoVGzZsaLa2NqZVVMBq+/3337F06VIsXrxYWldQUAAvLy+TOHd3dzg4OKCgoECK6dy5s0lMzT4FBQXw9fWt9zheXl6orKzExYsX4e3tfdOYmvPUJz4+Hm+++Wad9brSMlSVXQUAlFVVQV9aAp1dKWz0ZTAarqJEp0N5aQlEZXUCZ7haCgCovFYG3dVyXC0tgU6nR1lVFXQ6HUoNFbhqrP5zWVVl9TmuXsPV0hKUlOtRVlpSvW9JCYyGq9V/1ulgrCgHAJSW6KAzlMJwVYGSa3pUXL2GSp0O14QRuqvXoCwpxbU/J1jqdDrYV5ajrFyPSlGG0hId7CtsIaoMKC2pbnfNcXUlpSirKMFVfSVKKyqh0+ngUHa1+ri6EpQaKqT22pToUHJND5uSmrbawHDVCKPhanVbDVelftCV2Ejfp+SaHqUl1d+71FABna6k+vh/9q9Bp0NpRSWulpbApsIOOvtSGCvKUV5agtISBUSVASV/Jsal16pQea0MJQo9jDodKuwqcE1UQVdSCv3Va3+2Wwe7q9cAANeu6WG4WgpdCVDqUN2fOp0Oldeq/x51f34XACj78+/iamkJdFevoayquj+uGqv+bLcOZVXX+/hqqQG6q+WovFYGw9XqdaJSj/LSEpTo7GE0XJX62GgQuFoqUFVVBV3ZVdiWlMIAI3Qlpagquyod15zrrKa95lxnuj/7wZzrrLSkuo+rrzM0eJ3V/I+KOdeZrqT6mjDnOrP5sw3mXGc111h1Hzd8ndVcYzV90dB1VnONATDrOrt2TV99HZtxnZWVllQf14zrrKaPzbnOavrYnOtM/2cbzLnOdFfLpT5r7Dq7esN3a+w60xlK/+yzxq8z+8rqNphzndVcYwAavc5qrjHpv9uNXGe6P2NrX2fKP9fXnrPcLKoqYNVZqqqLFbULDUql0qQA0lRqF2RqO3nyJAoKCkwKJ0qlEsHBwdi9ezemTJnS5G0yi2hBb7zxhgDQ4LJ//36Tfc6ePSu6du0qJk+ebLI+IiJChISE1DmHvb29+PTTT4UQQgwfPly88MILJtvPnDkjAIjMzEwhhBDdunUT8+fPN4nZtWuXACDy8/OlY27YsMEkZt26dUKpVN70u167dk0UFxdLy7Fjxxr97ly4cOHChcuNy++//97QbdUq5eXlQqPRNEk7XV1d66x74403mrzNv/32m1CpVGLVqlU3jfnxxx8FAHH27FmT9TfLG+TSohWwadOmYeLEiQ3G3FixOnfuHIYMGYKgoCCsXLnSJE6j0dSZBF9UVISKigqpWqXRaOpUqQoLCwGg0Rg7Ozu0a9euwZjaVbEb1c78XV1dkZeXBzc3NygUipvudzvR6XTw8fFBXl4eVCpVSzfnjsP+bV7s3+bF/m1excXF6NixY4OVHms5Ojri5MmTjU5oN4cQos69raHqV1xcXL2jRDfav38/+vbtK30+d+4cRowYgb/97W94/vnnG21T7fbU10Y5tWgC5uHhAQ8PD7Niz549iyFDhiAwMBBr1qyBjY3p9LWgoCDMmzcP+fn58Pb2BlA9MV+pVCIwMFCKeeWVV2AwGODg4CDFaLVaKdELCgrC5s2bTY6dlpaGvn37wt7eXopJT0/HjBkzTGIGDBhg9ne3sbFBhw4dzI6/nahUKv4Hthmxf5sX+7d5sX+bV+17X1NzdHSEo6Njs56jPk1ZkKlNo9EAqJ5qVJMfAI0XTppdi9XebkHNsOOjjz4qzpw5I/Lz86WlRmVlpQgICBBDhw4VBw8eFNu3bxcdOnQQ06ZNk2KuXLkivLy8xNNPPy0OHz4sNm7cKFQqlUhISJBi/vjjD+Hs7CxmzJghjh07JlavXi3s7e3FF198IcX8+OOPwtbWVixYsEAcP35cLFiwQNjZ2Yk9e/bI0yEtpLi4WAAQxcXFLd2UOxL7t3mxf5sX+7d5sX+vO3PmjOjWrZuYOHGiqKysbDTeaDQKjUYjFi5cKK3T6/VCrVaLFStWNGdTG9QqErA1a9bcdJz5RqdPnxajRo0STk5Oom3btmLatGni2rVrJjE///yzGDRokFAqlUKj0Yi4uDhhNBpNYnbs2CH69OkjHBwcROfOncXy5cvrtOm///2v8PPzE/b29qJHjx4iJSWl6b/4bYb/AWhe7N/mxf5tXuzf5sX+rWZOQUYIIfz8/MTGjRulzwsWLBBqtVps3LhRHD58WDz99NPC29tb6HQ6ub+CpFUkYHR7uHbtmnjjjTfqJLXUNNi/zYv927zYv82L/VvN3IIMALFmzRrps9FoFG+88YbQaDRCqVSKRx55RBw+fFjm1ptSCCHHM61EREREVKPVvoiViIiIqLViAkZEREQkMyZgRERERDJjAkZEREQkMyZgd6GtW7eiX79+cHJygoeHB8aNG2eyPTc3F2PGjIGLiws8PDwQFRVV583Ihw8fRnBwMJycnHDPPfdg7ty5dX6jLCMjA4GBgXB0dESXLl2wYsWKOm1JSUmBv78/lEol/P39sWnTpqb/wi1Ar9fjgQcegEKhQHZ2tsk29q9lTp06hcmTJ8PX1xdOTk6499578cYbb9TpO/av/D744AP4+vrC0dERgYGB+OGHH1q6SS0qPj4eDz74INzc3ODp6YknnngCOTk5JjFCCMTFxUGr1cLJyQmDBw/G0aNHTWL0ej2mT58ODw8PuLi4YOzYsThz5oxJTFFREcLDw6FWq6FWqxEeHo4rV66YxJjzb4JaQEs+gkny++KLL4S7u7tYvny5yMnJESdOnBD//e9/pe01L7QdMmSIOHjwoEhPTxdardbkhbbFxcXCy8tLTJw4URw+fFikpKQINze3el9o+/LLL4tjx46JVatW1Xmh7e7du4Wtra2YP3++OH78uJg/f/4d80LbqKgoMXLkSAFAHDp0SFrP/rXc119/LSZNmiS++eYb8fvvv4v//e9/wtPTU8ycOVOKYf/KLzk5Wdjb24tVq1aJY8eOiZdfflm4uLiI06dPt3TTWkxoaKhYs2aNOHLkiMjOzhajRo0SHTt2FKWlpVLMggULhJubm0hJSRGHDx8WEyZMqPNeqqlTp4p77rlHpKeni4MHD4ohQ4aI3r17m7x8dMSIESIgIEDs3r1b7N69WwQEBIjRo0dL2835N0EtgwnYXaSiokLcc8894j//+c9NY7Zt2yZsbGxMfrT0008/FUqlUnoB4AcffCDUarXJ+2ji4+OFVquVXmo7a9Ys0aNHD5NjT5kyRfTv31/6PH78eDFixAiTmNDQUDFx4kTLv+RtYNu2baJHjx7i6NGjdRIw9m/TWrRokfD19ZU+s3/l99BDD4mpU6earOvRo4f497//3UItuv0UFhYKACIjI0MIcf3N7AsWLJBirl27ZvJm9itXrgh7e3uRnJwsxZw9e1bY2NiI1NRUIYQQx44dEwBMkv7MzEwBQJw4cUIIYd6/CWoZHIK8ixw8eBBnz56FjY0N+vTpA29vb4wcOdKk7J2ZmYmAgABotVppXWhoKPR6PbKysqSY4OBgkx9WDQ0Nxblz53Dq1CkpJiQkxOT8oaGhOHDgACoqKhqM2b17d5N+bzmdP38eERER+OSTT+Ds7FxnO/u3aRUXF5v8ODH7V14GgwFZWVl1+iEkJOSu6ofGFBcXA4B0rZ48eRIFBQUm/aZUKhEcHCz1W1ZWFioqKkxitFotAgICpJjMzEyo1Wr069dPiunfvz/UarVJTGP/JqhlMAG7i/zxxx8Aqn91/tVXX8WWLVvg7u6O4OBgXL58GUD1j5XW/nFSd3d3ODg4oKCg4KYxNZ8bi6msrMTFixcbjKk5RmsjhMCkSZMwdepU9O3bt94Y9m/T+f3337F06VJMnTpVWsf+ldfFixdRVVV11/dDQ4QQiImJwcMPP4yAgAAA16+zhvqtoKAADg4OcHd3bzDG09Ozzjk9PT0bvJZr/5uglsEE7A4QFxcHhULR4HLgwAEYjUYAwJw5c/DUU08hMDAQa9asgUKhwH//+1/peAqFos45hBAm62vHiD8nMDdFTH3nb0nm9u/SpUuh0+kwe/bsBo/H/jVlbv/e6Ny5cxgxYgT+9re/4fnnnzfZxv6VH/vh5qZNm4aff/4Zn376aZ1tlvRbY9eypTEkP7uWbgBZb9q0aZg4cWKDMZ07d0ZJSQkAwN/fX1qvVCrRpUsX5ObmAgA0Gg327t1rsm9RUREqKiqk/4vSaDR1/s+psLAQABqNsbOzQ7t27RqMqf1/ay3N3P596623sGfPHpOhLQDo27cvnnnmGaxdu5b9Ww9z+7fGuXPnMGTIEAQFBWHlypUmcexfeXl4eMDW1vau74ebmT59Or766ivs3LkTHTp0kNZrNBoA1dUpb29vaf2N/abRaGAwGFBUVGRSBSssLMSAAQOkmPPnz9c574ULF0yO09i/CWohMs85oxZUXFwslEqlySR8g8EgPD09xYcffiiEuD5h89y5c1JMcnJynUnMbdq0EXq9XopZsGBBnUnMPXv2NDn/1KlT60xiHjlypEnMiBEjWu0k5tOnT4vDhw9LyzfffCMAiC+++ELk5eUJIdi/1jpz5ozo1q2bmDhxosmTYDXYv/J76KGHxIsvvmiyrmfPnnf1JHyj0SheeuklodVqxS+//FLvdo1GIxYuXCit0+v19U7C/+yzz6SYc+fO1TsJf+/evVLMnj176p2E39C/CWoZTMDuMi+//LK45557xDfffCNOnDghJk+eLDw9PcXly5eFENcfWR46dKg4ePCg2L59u+jQoYPJI8tXrlwRXl5e4umnnxaHDx8WGzduFCqVqt7H+GfMmCGOHTsmVq9eXecx/h9//FHY2tqKBQsWiOPHj4sFCxbcUY/xnzx58qavoWD/3rqzZ8+Krl27ikcffVScOXNG5OfnS0sN9q/8al5DsXr1anHs2DERHR0tXFxcxKlTp1q6aS3mxRdfFGq1WuzYscPkOr169aoUs2DBAqFWq8XGjRvF4cOHxdNPP13vayg6dOggtm/fLg4ePCgeffTRel9Dcf/994vMzEyRmZkpevXqVe9rKBr6N0EtgwnYXcZgMIiZM2cKT09P4ebmJoYNGyaOHDliEnP69GkxatQo4eTkJNq2bSumTZtm8si+EEL8/PPPYtCgQUKpVAqNRiPi4uKk6kGNHTt2iD59+ggHBwfRuXNnsXz58jrt+e9//yv8/PyEvb296NGjh0hJSWn6L91C6kvAhGD/WmrNmjUCQL3Ljdi/8nv//fdFp06dhIODg/jLX/4ivW7hbnWz63TNmjVSjNFoFG+88YbQaDRCqVSKRx55RBw+fNjkOOXl5WLatGmibdu2wsnJSYwePVrk5uaaxFy6dEk888wzws3NTbi5uYlnnnlGFBUVmcSY82+C5KcQotbrn4mIiIioWfEpSCIiIiKZMQEjIiIikhkTMCIiIiKZMQEjIiIikhkTMCIiIiKZMQEjIiIikhkTMCIiIiKZMQEjolZBoVDgyy+/bOlmEBE1CSZgRHRbiYuLwwMPPFBnfX5+PkaOHCl/g4iImoFdSzeAiMgcGo2mpZtARNRkWAEjolsmhMCiRYvQpUsXODk5oXfv3vjiiy8AAFVVVZg8eTJ8fX3h5OQEPz8/vPvuuyb779ixAw899BBcXFzQpk0bDBw4EKdPn0ZSUhLefPNN/PTTT1AoFFAoFEhKSgJgOgR56tQpKBQKbNy4EUOGDIGzszN69+6NzMxMk/OsWrUKPj4+cHZ2xpNPPonExES0adOmubuHiKhRrIAR0S179dVXsXHjRixfvhzdunXDzp078fe//x3t27fHgAED0KFDB3z++efw8PDA7t278cILL8Db2xvjx49HZWUlnnjiCURERODTTz+FwWDAvn37oFAoMGHCBBw5cgSpqanYvn07AECtVt+0HXPmzEFCQgK6deuGOXPm4Omnn8Zvv/0GOzs7/Pjjj5g6dSoWLlyIsWPHYvv27Xjttdfk6iIiogbxx7iJ6JaUlZXBw8MD3333HYKCgqT1zz//PK5evYoNGzbU2eell17C+fPn8cUXX+Dy5cto164dduzYgeDg4DqxcXFx+PLLL5GdnW2yXqFQYNOmTXjiiSdw6tQp+Pr64j//+Q8mT54MADh27Bjuu+8+HD9+HD169MDEiRNRWlqKLVu2SMf4+9//ji1btuDKlStN0xlERBbiECQR3ZJjx47h2rVrGD58OFxdXaXl448/xu+//w4AWLFiBfr27Yv27dvD1dUVq1atQm5uLgCgbdu2mDRpEkJDQzFmzBi8++67yM/Pt6gt999/v/Rnb29vAEBhYSEAICcnBw899JBJfO3PREQthQkYEd0So9EIANi6dSuys7Ol5dixY/jiiy/w+eefY8aMGfjnP/+JtLQ0ZGdn4x//+AcMBoN0jDVr1iAzMxMDBgzAZ599hu7du2PPnj233BZ7e3vpzwqFwqR9QghpXQ0W/InodsE5YER0S/z9/aFUKpGbm1vvEOKiRYswYMAAREZGSutqKmM36tOnD/r06YPZs2cjKCgIGzZsQP/+/eHg4ICqqiqr29mjRw/s27fPZN2BAwesPi4RUVNgAkZEt8TNzQ2xsbGYMWMGjEYjHn74Yeh0OuzevRuurq7o2rUrPv74Y3zzzTfw9fXFJ598gv3798PX1xcAcPLkSaxcuRJjx46FVqtFTk4OfvnlFzz77LMAgM6dO+PkyZPIzs5Ghw4d4ObmBqVSecvtnD59Oh555BEkJiZizJgx+O677/D111/XqYoREbUEDkES0S37v//7P7z++uuIj49Hz549ERoais2bN8PX1xdTp07FuHHjMGHCBPTr1w+XLl0yqYY5OzvjxIkTeOqpp9C9e3e88MILmDZtGqZMmQIAeOqppzBixAgMGTIE7du3x6effmpRGwcOHIgVK1YgMTERvXv3RmpqKmbMmAFHR8cm6QMiImvwKUgiumtERETgxIkT+OGHH1q6KUR0l+MQJBHdsRISEjB8+HC4uLjg66+/xtq1a/HBBx+0dLOIiFgBI6I71/jx47Fjxw6UlJSgS5cumD59OqZOndrSzSIiYgJGREREJDdOwiciIiKSGRMwIiIiIpkxASMiIiKSGRMwIiIiIpkxASMiIiKSGRMwIiIiIpkxASMiIiKSGRMwIiIiIpkxASMiIiKS2f8HvPeLTo4xq5cAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "coordinates = vd.grid_coordinates(\n", + " (-70e3, 20e3, -20e3, 60e3), spacing=0.25e3,\n", + ")\n", + "d = np.cos(2 * np.pi * 1 / 5e3 * coordinates[0]) #* np.cos(2 * np.pi * 1 / 50e3 * coordinates[1])\n", + "d += np.cos(2 * np.pi * 1 / 0.7e3 * coordinates[0]) #* np.cos(2 * np.pi * 1 / 5e3 * coordinates[1])\n", + "d = vd.make_xarray_grid(coordinates, d, data_names=\"scalars\").scalars\n", + "d.plot()" + ] + }, + { + "cell_type": "code", + "execution_count": 80, + "id": "51e3e063-0cdf-4890-9598-6fe8d569e84a", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 80, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiYAAAHFCAYAAADG9jL3AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjYsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvq6yFwwAAAAlwSFlzAAAPYQAAD2EBqD+naQAAWplJREFUeJzt3Xl8FPX9P/DX5trcgSTkMoGEIgEJNyixKiASjopobT1+yOFNBTwCRfGoYpFoxYpagWI5vApqA9avHAWFABVQAqGAIAICgZAQwpGEQHaT7Of3x2Y32exuMhtCZj47r+fjkUeyszO778l+ZvY9n2sMQggBIiIiIg3wUTsAIiIiIhsmJkRERKQZTEyIiIhIM5iYEBERkWYwMSEiIiLNYGJCREREmsHEhIiIiDSDiQkRERFpBhMTIiIi0gwmJkQt4LPPPkO3bt0QFBQEg8GA3bt3qx2SqrZu3YpXXnkFFy5ccHouOTkZt99+e5OvkZOTA4PBgJycnJYPUAXvvfceunTpAqPRiJSUFMycORNVVVWKtq2qqsLMmTORnJwMo9GILl264L333rvKEROpg4kJ0RU6c+YMxo4di1/96ldYu3Yttm3bhs6dO6sdlqq2bt2KmTNnukxMlOrTpw+2bduGPn36tFxgKnnttdfw1FNP4be//S3+85//4IknnsDs2bMxadIkRds/8cQTyMrKwqRJk/Cf//wHd911F5566inMnj37KkdO1Pr81A6ASHY///wzqqqq8MADD2DgwIGNrnvp0iUEBwe3UmSt7/LlywgMDGyR1woPD8eAAQNa5LXUdPbsWcyaNQuPPvqoPZEYNGgQqqqq8OKLL+Lpp5/Gdddd53b7H3/8EYsWLcJrr72GP/7xj/btba87ceJEREZGtsq+ELUG1pgQXYEJEybgpptuAgDce++9MBgMGDRokP250NBQ7N27FxkZGQgLC8OQIUMAAGazGbNmzbJX7bdr1w4PPvggzpw54/D6VVVVmD59OuLi4hAcHIybbroJP/zwA5KTkzFhwgSPYjUYDJg8eTI+/vhjdO3aFcHBwejZsye+/vprp3X/+9//YsiQIQgLC0NwcDBuvPFGrFq1ymGdpUuXwmAwYN26dXjooYfQrl07BAcHY8aMGfYv0JSUFBgMBpdNMmvXrkWfPn0QFBSELl26YPHixQ7Pu2rKsf1PDx8+jJEjRyI0NBRJSUmYOnUqTCaTw/YnT57E7373O4SFhaFNmzYYM2YMduzYAYPBgKVLl3r0v7sSa9euRWVlJR588EGH5Q8++CCEEPjyyy8b3f7LL7+EEMLl9pcvX8batWtbOmQiVbHGhOgKvPTSS7j++usxadIkzJ49G4MHD0Z4eLj9ebPZjDvuuAOPP/44nnvuOVRXV8NisWD06NHYsmULpk+fjhtvvBHHjx/Hyy+/jEGDBiE3NxdBQUEAgEcffRQfffQRpk2bhqFDh2Lfvn347W9/i/Ly8mbFu2rVKuzYsQOvvvoqQkND8Ze//AV33XUXDh48iI4dOwIANm3ahKFDh6JHjx5YtGgRjEYj5s2bh1GjRmHZsmW49957HV7zoYcewm9+8xt8/PHHqKioQL9+/XDp0iW89957WLFiBeLj4wHAoVbgf//7H6ZOnYrnnnsOsbGx+Mc//oGHH34YnTp1wi233NLoPlRVVeGOO+7Aww8/jKlTp2Lz5s3485//jIiICPzpT38CAFRUVGDw4ME4d+4c3njjDXTq1Alr1651ir0x1dXVitbz9fWFwWBw+/y+ffsAAN27d3dYHh8fj+joaPvzjW3frl07xMXFOSzv0aOHw+sTeQ1BRFdk48aNAoD44osvHJaPHz9eABCLFy92WL5s2TIBQGRnZzss37FjhwAg5s2bJ4QQ4sCBAwKAeOaZZxzW+/TTTwUAMX78eI/iBCBiY2NFWVmZfVlRUZHw8fERWVlZ9mUDBgwQMTExory83L6surpapKWlicTERGGxWIQQQixZskQAEOPGjXN6rzfffFMAEEePHnV6rkOHDiIwMFAcP37cvuzy5csiMjJSPP744/Zltv/rxo0b7cts/9PPP//c4TVHjhwpUlNT7Y/ff/99AUCsWbPGYb3HH39cABBLlixx81+yOnr0qACg6Kd+fK48+uijwmg0unyuc+fOIiMjo9Hthw4d6rBv9QUEBIjHHnus0e2JZCNVU87mzZsxatQoJCQkwGAwNFkF6srnn3+OXr16ITg4GB06dMCbb77Z8oES1XP33Xc7PP7666/Rpk0bjBo1CtXV1fafXr16IS4uzt50sXHjRgDAmDFjHLa/55574OfXvMrOwYMHIywszP44NjYWMTExOH78OABrTcP333+P3/3udwgNDbWv5+vri7Fjx+LkyZM4ePBgo/unRK9evdC+fXv748DAQHTu3NkeR2MMBgNGjRrlsKxHjx4O227atAlhYWEYPny4w3r333+/ovgSEhKwY8cORT99+/ZVFHNznmup7YlkIlVTTkVFBXr27IkHH3ywWSfDNWvWYMyYMXjvvfeQkZGBAwcO4JFHHkFQUBAmT558FSImvQsODnZo2gGA06dP48KFCwgICHC5TUlJCQBrp0kATlX4fn5+iIqKalY8rrYzGo24fPkyAOD8+fMQQtibX+pLSEhwiMvG1bpXGkdjgoODnTrYGo1GVFZW2h+fPXsWsbGxTtu6WuZKQEAAevXqpWhdX1/fRp+PiopCZWWly47P586dazKxiYqKcjn8vKKiAmazmR1fyetIlZiMGDECI0aMcPu82WzGiy++iE8//RQXLlxAWloa3njjDXtnxI8//hh33nknJk6cCADo2LEjnn32WbzxxhuYNGkSrzyoxbkqU9HR0YiKinLbadFWo2H78i4qKsI111xjf766utopOWgpbdu2hY+PDwoLC52eO3XqFABr/PVp8biJiorCDz/84LS8qKhI0fbHjh1DSkqKonU3btxoP8e4YutbsnfvXtxwww0OsZSUlCAtLa3R1+/evTuWL1+OoqIihyR17969ANDk9kSykSoxacqDDz6IY8eOYfny5UhISMDKlSsxfPhw7N27F9deey1MJpPTFUtQUBBOnjyJ48ePIzk5WZ3ASVduv/12LF++HDU1NQ5fVA3Zvuw+/fRTh6vqzz//XHHHTE+FhITghhtuwIoVKzBnzhx7J1yLxYJPPvkEiYmJiuZoMRqNAKCoBuRqGDhwID7//HOsWbPG4WJm+fLlira3NeUokZqa2ujzw4cPR2BgIJYuXerwedtGNd15552Nbj969Gi8+OKL+PDDD/Hss886bB8UFOTUXEUkO69JTI4cOYJly5bh5MmT9irnadOmYe3atViyZAlmz56NYcOG4ZlnnsGECRMwePBgHD58GHPnzgUAFBYWMjGhVnHffffh008/xciRI/HUU0/h+uuvh7+/P06ePImNGzdi9OjRuOuuu9C1a1c88MADmDt3Lvz9/XHbbbdh3759mDNnjlPzUEvKysrC0KFDMXjwYEybNg0BAQGYN28e9u3bh2XLlimqIbHVErzzzjsYP348/P39kZqa6tC/5WoaP3483n77bTzwwAOYNWsWOnXqhDVr1uA///kP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zp074evr6/CcLRl666238Pbbb2Pu3Lno3r07QkJC8PTTT8NsNgOwdmRdv349tm7dinXr1uG9997DCy+8gO+//x4pKSkexePv72//22Aw2GNsuMxGcOAiUatiHxMinevTpw9+/PFHJCcno1OnTg4/ISEh6NSpE/z9/bF9+3b7NufPn8fPP/+s6PV79+6NmpoaFBcXO72+bdTMli1bMHr0aDzwwAPo2bMnOnbs6JQQGQwG/PrXv8bMmTORl5eHgIAArFy5EgAQEBCAmpqaK/5fpKam4ocffnBYlpube8WvS0TKMTEh0rlJkybh3LlzuP/++/HDDz/gl19+wbp16/DQQw+hpqYGoaGhePjhh/HHP/4R3377Lfbt24cJEybAx0fZ6aNz584YM2YMxo0bhxUrVuDo0aPYsWMH3njjDaxevRoA0KlTJ3uNyIEDB/D444+jqKjI/hrff/89Zs+ejdzcXOTn52PFihU4c+YMunbtCgBITk7Gnj17cPDgQZSUlKCqqqpZ/4spU6Zg0aJF+PDDD3Ho0CHMmjULe/bscapFIaKrh005RDqXkJCA7777Ds8++yyGDRsGk8mEDh06YPjw4fbk480338TFixdxxx13ICwsDFOnTkVpaani91iyZAlmzZqFqVOnoqCgAFFRUUhPT8fIkSMBAC+99BKOHj2KYcOGITg4GI899hjuvPNO+3uEh4dj8+bNmDt3LsrKytChQwe89dZbGDFiBADg0UcfRU5ODvr164eLFy9i48aNSE5O9vh/MWbMGPzyyy+YNm0aKisrcc8992DChAlOtShEdPVw5lciapZBgwahV69emDt3rtqhXFVDhw5FXFwcPv74Y7VDIdIF1pgQEdW6dOkSFixYgGHDhsHX1xfLli3DN998g/Xr16sdGpFuMDEhoiuyZcsWe5OKKxcvXmzFaK6MwWDA6tWrMWvWLJhMJqSmpiI7Oxu33Xab2qER6Qabcojoily+fBkFBQVun+/UqVMrRkNEsmNiQkRERJrB4cJERESkGUxMiIiISDOYmBAREZFmMDEhIiIizWBiQkRERJrBxISIiIg0g4kJERERaQYTEyIiItKM/w+0tYq8KzAr1wAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "abs(xrft.fft(d).sel(freq_northing=0)).plot()" + ] + }, + { + "cell_type": "code", + "execution_count": 81, + "id": "5338e88f-5f77-4ddb-b869-29cb0c799b7e", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 81, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "a = xrft.isotropic_power_spectrum(d, nfactor=1)\n", + "a = a / a.max()\n", + "a.plot()" + ] + }, + { + "cell_type": "code", + "execution_count": 85, + "id": "2c6e9bb9-8f8c-4ade-81e6-7fa6bab19e53", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 85, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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Fg765NPe3l5lZWWNc62Cuy6A4WOYBkDSlixZorvvvlstLS3yPE8zZ87UNddco7vuuku1tbXKy8vT9ddfL0lqbm7WjTfeqEmTJik/P1+33nqrOjo6Yu91/PhxLVq0SJMmTVJhYaGefPJJXXPNNVqxYsWQ6jJz5kw98sgjWrJkiUKhkG6//fax+MgAxhBhBEDSfvCDH2jNmjWaPn26Wltb9dZbb0mSfvrTnyojI0N79uzR008/rdbWVl199dW6/PLLtW/fPr366qv66KOPtHDhwth73XfffdqxY4defvllbd++XTt37lRjY2NS9Xn88cdVVlamxsZG/fu///uoflYAY49hGgBJC4VCmjx5stLT01VQUBA7fvHFF+v73/9+7PsHHnhAs2fP1qOPPho7tnnzZhUXF+vdd99VUVGRNm3apBdeeCHWk/LTn/5U06dPT6o+1113ne69994RfioAQSGMABg1FRUVvu8bGxu1Y8cOTZo0aUDZ999/XydOnFBvb68qKytjx6dMmaJLL710RNcFkFoIIwBGzXnnnef7PhKJaMGCBfre9743oGxhYaHee++9MbkugNRCGAEwZmbPnq1t27Zp5syZCZf9XnzxxcrMzNSbb76pGTNmSJL++te/6t1339XVV1893tUFEBAmsAIYM3feeac+/vhjfetb39If/vAHHTp0SNu3b9dtt92mvr4+TZo0SUuXLtV9992n3/3ud3r77be1ZMkSpaXxowlwCT0jAMZMUVGR9uzZo3/7t3/TvHnz1NPTo5KSEt1www2xwPH444/r2LFj+od/+AdNnjxZ99xzj7q6ugKuOYDxxA6sAKxzzTXX6PLLL9e6deuCrgqAcUBfKAAACBRhBIC1du/erUmTJg36AjAxMEwDwFonTpzQhx9+OOifX3zxxeNYGwBjhTACAAACxTANAAAIFGEEAAAEijACAAACRRgBAACBIowAAIBAEUYAAECgCCMAACBQhBEAABCo/w8sMC650fPe6QAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "s =xrft.isotropic_power_spectrum(hm.gaussian_highpass(d, 1e3), nfactor=1)\n", + "(s / s.max()).plot()\n", + "t.plot()" + ] + }, + { + "cell_type": "code", + "execution_count": 86, + "id": "3b2b6146-b083-4683-bb31-c0e2b3ceb9a6", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.DataArray (freq_r: 321)> Size: 3kB\n",
+       "array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
+       "       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
+       "       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
+       "       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
+       "       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
+       "       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
+       "       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
+       "       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
+       "       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
+       "       0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0.,\n",
+       "       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
+       "       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
+       "       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
+       "       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
+       "       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
+       "       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
+       "       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
+       "       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
+       "       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",
+       "Coordinates:\n",
+       "  * freq_r   (freq_r) float64 3kB 0.0 1.422e-05 2.448e-05 ... 0.002805 0.002816
" + ], + "text/plain": [ + " Size: 3kB\n", + "array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", + " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", + " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", + " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", + " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", + " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", + " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", + " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", + " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", + " 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0.,\n", + " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", + " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", + " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", + " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", + " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", + " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", + " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", + " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", + " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n", + "Coordinates:\n", + " * freq_r (freq_r) float64 3kB 0.0 1.422e-05 2.448e-05 ... 0.002805 0.002816" + ] + }, + "execution_count": 86, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "t = xr.zeros_like(s)\n", + "t.loc[dict(freq_r=t.sel(freq_r=1/0.7e3, method=\"nearest\").freq_r)] = 1\n", + "t" + ] + }, + { + "cell_type": "code", + "execution_count": 91, + "id": "a01c3fd8-6980-4171-a1f4-f2389447f263", + "metadata": {}, + "outputs": [], + "source": [ + "np.testing.assert_allclose(s / s.max(), t, rtol=0, atol=0.01)" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "id": "a9abf24b-1689-4ab2-95f5-749b49421305", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 61, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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SUc+Bzn9GgAABJazc2QAAID7CDIAACCwCDIAACCwCDIAACCwCDIAACCwCDIAACCwCDIAACCwCDIAACCwCDIAuowxRjfeeKP69OmjUCik2traXFcJQMCxsy+ALvPb3/5WV111lZ5//nmdffbZ3inYANBRfIIA6DJ//etfNWDAgBOekNvc3KyioqIurlXuXhfAqWNoCUCXuP7663XLLbdo7969CoVCGjx4sCZMmKCbb75ZX//619WvXz9dccUVkqTt27frs5/9rHr16qXS0lJVVlbqvffe857rgw8+0Je+9CX16tVLAwYM0EMPPaQJEyZozpw5J1WXwYMH67vf/a6uv/56hcNhzZw5szOaDKALEGQAdIkf/vCHuv/++zVw4EAdOHBAW7dulSStWLFCBQUFeumll7R06VIdOHBA48eP14UXXqhXXnlF1dXVOnjwoKZPn+4919y5c7V+/XqtWbNGa9eu1fPPP6+ampqs6vP9739fI0aMUE1Njb75zW9abSuArsPQEoAuEQ6HVVJSovz8fJWVlXnXzznnHC1YsMD7+Vvf+pYuvvhiVVVVedf+67/+SxUVFdq1a5fKy8u1fPly/fjHP/Z6cFasWKGBAwdmVZ9//ud/1p133nmKrQKQawQZADl1ySWXJP1cU1Oj9evXq1evXmll//rXv6qxsVHNzc0aO3asd71Pnz4aNmzYKb0ugGAiyADIqZ49eyb9HIvFdOWVV+rBBx9MKztgwAC9+eabnfK6AIKJIAPAVy6++GI988wzGjx4cMal2eecc44KCwu1efNmnXXWWZKk+vp67dq1S+PHj+/q6gLIMSb7AvCVm266Se+//76uu+46bdmyRW+99ZbWrl2rr3zlK4pGo+rVq5duuOEGzZ07V7///e+1bds2XX/99crL4+MMOB3RIwPAV8rLy/XSSy/p7rvv1uTJk9XU1KRBgwZpypQpXlj5/ve/r6NHj2ratGkqKSnRHXfcoUgkkuOaA8gFdvYF4IQJEybowgsv1KJFi3JdFQBdiL5YAAAQWAQZAE554YUX1KtXrxN+AXALQ0sAnNLY2Ki33377hI+fc845XVgbAJ2NIAMAAAKLoSUAABBYBBkAABBYBBkAABBYBBkAABBYBBkAABBYBBkAABBYBBkAABBYBBkAABBY/x+oQLTHt0yeVQAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "xrft.isotropic_power_spectrum(d, nfactor=1).plot()" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "8ab7933e-7762-4fc6-aa73-70db9424a836", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "np.abs(xrft.fft(d)).plot()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "02d32c3c-55fe-4e90-b495-7bebec7467ab", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a0539aba-aa32-443f-9426-c4c902f7d5c6", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b364dcd2-6fde-44ed-80ea-480002d42a69", + "metadata": {}, + "outputs": [], + "source": [ + "g = xr.open_dataset(\"harmonica/tests/data/filter.nc\")\n", + "g" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b4bfbd03-65dd-457f-aa89-2b43531f9fe6", + "metadata": {}, + "outputs": [], + "source": [ + "coordinates = vd.grid_coordinates(\n", + " (-70e3, 20e3, -20e3, 60e3), spacing=0.22e3, extra_coords=500\n", + ")\n", + "finc, fdec = -45, 13\n", + "minc, mdec = -14, -24\n", + "dipole = [-25e3, 20e3, -5000]\n", + "moment = 1e12\n", + "magnetic_field_pole = hm.dipole_magnetic(\n", + " coordinates,\n", + " dipoles=dipole,\n", + " magnetic_moments=hm.magnetic_angles_to_vec(moment, 90, 0),\n", + " field=\"b\",\n", + ")\n", + "anomaly_pole = hm.total_field_anomaly(magnetic_field_pole, 90, 0)\n", + "magnetic_field = hm.dipole_magnetic(\n", + " coordinates,\n", + " dipoles=dipole,\n", + " magnetic_moments=hm.magnetic_angles_to_vec(moment, minc, mdec),\n", + " field=\"b\",\n", + ")\n", + "anomaly = hm.total_field_anomaly(magnetic_field, finc, fdec)\n", + "grid = vd.make_xarray_grid(coordinates[:2], (anomaly, anomaly_pole), data_names=[\"anomaly\", \"anomaly_pole\"])\n", + "anomaly_reduced = hm.reduction_to_pole(grid.anomaly, finc, fdec, minc, mdec)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d976b694-44ff-4a3e-9003-922a83e97b36", + "metadata": {}, + "outputs": [], + "source": [ + "(anomaly_reduced - grid.anomaly_pole).plot()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6e800e07-c141-4bc3-948d-f274592502a5", + "metadata": {}, + "outputs": [], + "source": [ + "(1 / np.abs(grid.anomaly_pole)).plot()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c6ef65bb-a81c-40af-9d83-a30344979000", + "metadata": {}, + "outputs": [], + "source": [ + "grid.anomaly.plot()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b8ae01b7-2600-4ce9-a17b-49eee522aac4", + "metadata": {}, + "outputs": [], + "source": [ + "grid.anomaly_pole.plot()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5b582491-5272-4a87-bd51-fb3d50ee1560", + "metadata": {}, + "outputs": [], + "source": [ + "anomaly_reduced.plot()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "04a4108b-772e-448a-983f-cbdd4d4266a9", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python [conda env:harmonica]", + "language": "python", + "name": "conda-env-harmonica-py" + }, + "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.11" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/harmonica/_transformations.py b/harmonica/_transformations.py index d505d3645..666a8dff8 100644 --- a/harmonica/_transformations.py +++ b/harmonica/_transformations.py @@ -54,7 +54,7 @@ def derivative_upward(grid, order=1): -------- harmonica.filters.derivative_upward_kernel """ - return apply_filter(grid, derivative_upward_kernel, order=order) + return apply_filter(grid, derivative_upward_kernel, filter_kwargs={"order": order}) def derivative_easting(grid, order=1, method="finite-diff"): @@ -107,7 +107,9 @@ def derivative_easting(grid, order=1, method="finite-diff"): for _ in range(order): grid = grid.differentiate(coord=coordinate) elif method == "fft": - grid = apply_filter(grid, derivative_easting_kernel, order=order) + grid = apply_filter( + grid, derivative_easting_kernel, filter_kwargs={"order": order} + ) else: msg = ( f"Invalid method '{method}'. Please select one from 'finite-diff' or 'fft'." @@ -166,7 +168,9 @@ def derivative_northing(grid, order=1, method="finite-diff"): for _ in range(order): grid = grid.differentiate(coord=coordinate) elif method == "fft": - return apply_filter(grid, derivative_northing_kernel, order=order) + return apply_filter( + grid, derivative_northing_kernel, filter_kwargs={"order": order} + ) else: msg = ( f"Invalid method '{method}'. Please select one from 'finite-diff' or 'fft'." @@ -209,7 +213,9 @@ def upward_continuation(grid, height_displacement): harmonica.filters.upward_continuation_kernel """ return apply_filter( - grid, upward_continuation_kernel, height_displacement=height_displacement + grid, + upward_continuation_kernel, + filter_kwargs={"height_displacement": height_displacement}, ) @@ -245,7 +251,12 @@ def gaussian_lowpass(grid, wavelength): -------- harmonica.filters.gaussian_lowpass_kernel """ - return apply_filter(grid, gaussian_lowpass_kernel, wavelength=wavelength) + return apply_filter( + grid, + gaussian_lowpass_kernel, + pad=False, + filter_kwargs={"wavelength": wavelength}, + ) def gaussian_highpass(grid, wavelength): @@ -280,7 +291,12 @@ def gaussian_highpass(grid, wavelength): -------- harmonica.filters.gaussian_highpass_kernel """ - return apply_filter(grid, gaussian_highpass_kernel, wavelength=wavelength) + return apply_filter( + grid, + gaussian_highpass_kernel, + pad=False, + filter_kwargs={"wavelength": wavelength}, + ) def reduction_to_pole( @@ -335,10 +351,12 @@ def reduction_to_pole( return apply_filter( grid, reduction_to_pole_kernel, - inclination=inclination, - declination=declination, - magnetization_inclination=magnetization_inclination, - magnetization_declination=magnetization_declination, + filter_kwargs={ + "inclination": inclination, + "declination": declination, + "magnetization_inclination": magnetization_inclination, + "magnetization_declination": magnetization_declination, + }, ) @@ -361,8 +379,8 @@ def total_gradient_amplitude(grid): Returns ------- total_gradient_amplitude_grid : :class:`xarray.DataArray` - A :class:`xarray.DataArray` after calculating the - total gradient amplitude of the passed ``grid``. + A :class:`xarray.DataArray` after calculating the total gradient + amplitude of the passed ``grid``. Notes ----- @@ -398,10 +416,9 @@ def tilt_angle(grid): r""" Calculate the tilt angle of a potential field grid. - Compute the tilt of a regular gridded potential field - :math:`M`. The horizontal derivatives are calculated - through finite-differences while the upward derivative - is calculated using FFT. + Compute the tilt of a regular gridded potential field :math:`M`. The + horizontal derivatives are calculated through finite-differences while the + upward derivative is calculated using FFT. Parameters ---------- @@ -442,17 +459,12 @@ def tilt_angle(grid): [Blakely1995]_ [MillerSingh1994]_ """ - # Run sanity checks on the grid grid_sanity_checks(grid) - # Calculate the gradients of the grid - gradient = ( - derivative_easting(grid, order=1), - derivative_northing(grid, order=1), - derivative_upward(grid, order=1), - ) - # Calculate and return the tilt - horiz_deriv = np.sqrt(gradient[0] ** 2 + gradient[1] ** 2) - tilt = np.arctan2(gradient[2], horiz_deriv) + deriv_east = derivative_easting(grid, order=1) + deriv_north = derivative_northing(grid, order=1) + deriv_up = derivative_upward(grid, order=1) + horiz_deriv = np.hypot(deriv_east, deriv_north) + tilt = np.arctan2(deriv_up, horiz_deriv) return tilt diff --git a/harmonica/filters/_fft.py b/harmonica/filters/_fft.py index 74bbd46f6..dafb0143e 100644 --- a/harmonica/filters/_fft.py +++ b/harmonica/filters/_fft.py @@ -8,11 +8,10 @@ Wrap xrft functions to compute FFTs and inverse FFTs. """ -from xrft.xrft import fft as _fft -from xrft.xrft import ifft as _ifft +import xrft -def fft(grid, true_phase=True, true_amplitude=True, drop_bad_coords=True, **kwargs): +def fft(grid, true_phase=True, true_amplitude=True, **kwargs): """ Compute Fast Fourier Transform of a 2D regular grid. @@ -32,21 +31,15 @@ def fft(grid, true_phase=True, true_amplitude=True, drop_bad_coords=True, **kwar If True, the FFT is multiplied by the spacing of the transformed variables to match theoretical FT amplitude. Defaults to True. - drop_bad_coords : bool (optional) - If True, only the indexes of the array will be kept before passing it - to :func:`xrft.fft`. Any extra coordinate should be drooped, otherwise - :func:`xrft.fft` raises an error after finding *bad coordinates*. - Defaults to True. Returns ------- fourier_transform : :class:`xarray.DataArray` Array with the Fourier transform of the original grid. """ - if drop_bad_coords: - bad_coords = tuple(c for c in grid.coords if c not in grid.indexes) - grid = grid.drop(bad_coords) - return _fft(grid, true_phase=true_phase, true_amplitude=true_amplitude, **kwargs) + return xrft.fft( + grid, true_phase=true_phase, true_amplitude=true_amplitude, **kwargs + ) def ifft(fourier_transform, true_phase=True, true_amplitude=True, **kwargs): @@ -75,9 +68,10 @@ def ifft(fourier_transform, true_phase=True, true_amplitude=True, **kwargs): grid : :class:`xarray.DataArray` Array with the inverse Fourier transform of the passed grid. """ - return _ifft( + return xrft.ifft( fourier_transform, true_phase=true_phase, true_amplitude=true_amplitude, + lag=(None, None), # Mutes an annoying FutureWarning from xrft **kwargs, ) diff --git a/harmonica/filters/_utils.py b/harmonica/filters/_utils.py index d34617d73..3a598dedd 100644 --- a/harmonica/filters/_utils.py +++ b/harmonica/filters/_utils.py @@ -9,11 +9,12 @@ """ import numpy as np +import xrft from ._fft import fft, ifft -def apply_filter(grid, fft_filter, **kwargs): +def apply_filter(grid, fft_filter, filter_kwargs=None, pad=True, pad_kwargs=None): """ Apply a filter to a grid and return the transformed grid in spatial domain. @@ -39,24 +40,46 @@ def apply_filter(grid, fft_filter, **kwargs): A :class:`xarray.DataArray` with the filtered version of the passed ``grid``. Defined are in the spatial domain. """ - # Run sanity checks on the grid + if filter_kwargs is None: + filter_kwargs = {} + if pad_kwargs is None: + pad_kwargs = {} grid_sanity_checks(grid) - # Catch the dims of the grid dims = grid.dims - # Compute Fourier Transform of the grid - fft_grid = fft(grid) - # Build the filter - da_filter = fft_filter(fft_grid, **kwargs) - # Apply the filter - filtered_fft_grid = fft_grid * da_filter - # Compute inverse FFT + # Need to remove non-dimensional coordinates before padding and FFT because + # xrft doesn't know what to do with them. + non_dim_coords = {c: grid[c] for c in grid.coords if c not in grid.indexes} + grid = grid.drop_vars(non_dim_coords.keys()) + if pad: + # By default, use a padding width of 25% of the largest grid dimension. + # Fedi et al. (2012; doi:10.1111/j.1365-246X.2011.05259.x) suggest + # a padding of 100% but that seems exaggerated. + if "pad_width" not in pad_kwargs: + width = int(0.25 * max(grid[d].size for d in dims)) + pad_kwargs["pad_width"] = {d: width for d in dims} + if "mode" not in pad_kwargs: + pad_kwargs["mode"] = "edge" + # Has to be included explicitly as None or numpy complains about the + # argument being there. + pad_kwargs["constant_values"] = None + fft_grid = fft(xrft.pad(grid, **pad_kwargs)) + else: + fft_grid = fft(grid) + # The filter convolution in the frequency domain is a multiplication + filtered_fft_grid = fft_grid * fft_filter(fft_grid, **filter_kwargs) + # Keep only the real part since the inverse transform returns complex + # number by default filtered_grid = ifft(filtered_fft_grid).real - - # use original coordinates on the filtered grid + if pad: + filtered_grid = xrft.unpad(filtered_grid, pad_kwargs["pad_width"]) + # Restore the original coordinates to the grid because the inverse + # transform calculates coordinates from the frequencies, which can lead to + # rounding errors and coordinates that are slightly off. This causes errors + # when doing operations with the transformed grids. Restoring the original + # coordinates avoids these issues. filtered_grid = filtered_grid.assign_coords( {dims[1]: grid[dims[1]].values, dims[0]: grid[dims[0]].values} ) - return filtered_grid diff --git a/harmonica/tests/test_transformations.py b/harmonica/tests/test_transformations.py index 55d3ceaec..0fc925460 100644 --- a/harmonica/tests/test_transformations.py +++ b/harmonica/tests/test_transformations.py @@ -16,9 +16,13 @@ import verde as vd import xarray as xr import xarray.testing as xrt -import xrft -from .. import point_gravity +from .. import ( + dipole_magnetic, + magnetic_angles_to_vec, + point_gravity, + total_field_anomaly, +) from .._transformations import ( _get_dataarray_coordinate, derivative_easting, @@ -253,19 +257,7 @@ def test_derivative_upward(sample_potential, sample_g_z): """ Test derivative_upward function against the synthetic model. """ - # Pad the potential field grid to improve accuracy - pad_width = { - "easting": sample_potential.easting.size // 3, - "northing": sample_potential.northing.size // 3, - } - # need to drop upward coordinate (bug in xrft) - potential_padded = xrft.pad( - sample_potential.drop_vars("upward"), - pad_width=pad_width, - ) - # Calculate upward derivative and unpad it - derivative = derivative_upward(potential_padded) - derivative = xrft.unpad(derivative, pad_width) + derivative = derivative_upward(sample_potential) # Compare against g_up (trim the borders to ignore boundary effects) trim = 6 derivative = derivative[trim:-trim, trim:-trim] @@ -281,19 +273,8 @@ def test_derivative_upward_order2(sample_potential, sample_g_zz): Note: We omit the minus sign here because the second derivative is positive for both downward (negative) and upward (positive) derivatives. """ - # Pad the potential field grid to improve accuracy - pad_width = { - "easting": sample_potential.easting.size // 3, - "northing": sample_potential.northing.size // 3, - } - # need to drop upward coordinate (bug in xrft) - potential_padded = xrft.pad( - sample_potential.drop_vars("upward"), - pad_width=pad_width, - ) # Calculate second upward derivative and unpad it - second_deriv = derivative_upward(potential_padded, order=2) - second_deriv = xrft.unpad(second_deriv, pad_width) + second_deriv = derivative_upward(sample_potential, order=2) # Compare against g_zz (trim the borders to ignore boundary effects) trim = 6 second_deriv = second_deriv[trim:-trim, trim:-trim] @@ -347,19 +328,7 @@ def test_derivative_easting_fft(sample_potential, sample_g_e): """ Test derivative_easting function against the synthetic model using FFTs. """ - # Pad the potential field grid to improve accuracy - pad_width = { - "easting": sample_potential.easting.size // 3, - "northing": sample_potential.northing.size // 3, - } - # need to drop upward coordinate (bug in xrft) - potential_padded = xrft.pad( - sample_potential.drop_vars("upward"), - pad_width=pad_width, - ) - # Calculate easting derivative and unpad it - derivative = derivative_easting(potential_padded) - derivative = xrft.unpad(derivative, pad_width) + derivative = derivative_easting(sample_potential) # Compare against g_e (trim the borders to ignore boundary effects) trim = 6 derivative = derivative[trim:-trim, trim:-trim] @@ -372,19 +341,7 @@ def test_derivative_easting_order2(sample_potential, sample_g_ee): """ Test higher order of derivative_easting function against the sample grid. """ - # Pad the potential field grid to improve accuracy - pad_width = { - "easting": sample_potential.easting.size // 3, - "northing": sample_potential.northing.size // 3, - } - # need to drop upward coordinate (bug in xrft) - potential_padded = xrft.pad( - sample_potential.drop_vars("upward"), - pad_width=pad_width, - ) - # Calculate second easting derivative and unpad it - second_deriv = derivative_easting(potential_padded, order=2) - second_deriv = xrft.unpad(second_deriv, pad_width) + second_deriv = derivative_easting(sample_potential, order=2) # Compare against g_ee (trim the borders to ignore boundary effects) trim = 6 second_deriv = second_deriv[trim:-trim, trim:-trim] @@ -423,19 +380,7 @@ def test_derivative_northing(sample_potential, sample_g_n): """ Test derivative_northing function against the synthetic model. """ - # Pad the potential field grid to improve accuracy - pad_width = { - "easting": sample_potential.easting.size // 3, - "northing": sample_potential.northing.size // 3, - } - # need to drop upward coordinate (bug in xrft) - potential_padded = xrft.pad( - sample_potential.drop_vars("upward"), - pad_width=pad_width, - ) - # Calculate northing derivative and unpad it - derivative = derivative_northing(potential_padded) - derivative = xrft.unpad(derivative, pad_width) + derivative = derivative_northing(sample_potential) # Compare against g_n (trim the borders to ignore boundary effects) trim = 6 derivative = derivative[trim:-trim, trim:-trim] @@ -448,19 +393,7 @@ def test_derivative_northing_order2(sample_potential, sample_g_nn): """ Test higher order of derivative_northing function against the sample grid. """ - # Pad the potential field grid to improve accuracy - pad_width = { - "easting": sample_potential.easting.size // 3, - "northing": sample_potential.northing.size // 3, - } - # need to drop upward coordinate (bug in xrft) - potential_padded = xrft.pad( - sample_potential.drop_vars("upward"), - pad_width=pad_width, - ) - # Calculate second northing derivative and unpad it - second_deriv = derivative_northing(potential_padded, order=2) - second_deriv = xrft.unpad(second_deriv, pad_width) + second_deriv = derivative_northing(sample_potential, order=2) # Compare against g_nn (trim the borders to ignore boundary effects) trim = 6 second_deriv = second_deriv[trim:-trim, trim:-trim] @@ -475,24 +408,10 @@ def test_laplace_fft(sample_potential): We will use FFT computations only. """ - # Pad the potential field grid to improve accuracy - pad_width = { - "easting": sample_potential.easting.size // 3, - "northing": sample_potential.northing.size // 3, - } - # need to drop upward coordinate (bug in xrft) - potential_padded = xrft.pad( - sample_potential.drop_vars("upward"), - pad_width=pad_width, - ) - # Calculate second northing derivative and unpad it method = "fft" - second_deriv_ee = derivative_easting(potential_padded, order=2, method=method) - second_deriv_nn = derivative_northing(potential_padded, order=2, method=method) - second_deriv_zz = derivative_upward(potential_padded, order=2) - second_deriv_ee = xrft.unpad(second_deriv_ee, pad_width) - second_deriv_nn = xrft.unpad(second_deriv_nn, pad_width) - second_deriv_zz = xrft.unpad(second_deriv_zz, pad_width) + second_deriv_ee = derivative_easting(sample_potential, order=2, method=method) + second_deriv_nn = derivative_northing(sample_potential, order=2, method=method) + second_deriv_zz = derivative_upward(sample_potential, order=2) # Compare g_nn + g_ee against -g_zz (trim the borders to ignore boundary # effects) trim = 6 @@ -506,19 +425,7 @@ def test_upward_continuation(sample_g_z, sample_g_z_upward): """ Test upward_continuation function against the synthetic model. """ - # Pad the potential field grid to improve accuracy - pad_width = { - "easting": sample_g_z.easting.size // 3, - "northing": sample_g_z.northing.size // 3, - } - # need to drop upward coordinate (bug in xrft) - gravity_padded = xrft.pad( - sample_g_z.drop_vars("upward"), - pad_width=pad_width, - ) - # Calculate upward continuation and unpad it - continuation = upward_continuation(gravity_padded, 10e3) - continuation = xrft.unpad(continuation, pad_width) + continuation = upward_continuation(sample_g_z, 10e3) # Compare against g_z_upward (trim the borders to ignore boundary effects) trim = 6 continuation = continuation[trim:-trim, trim:-trim] @@ -528,14 +435,51 @@ def test_upward_continuation(sample_g_z, sample_g_z_upward): xrt.assert_allclose(continuation, g_z_upward, atol=1e-8) -def test_reduction_to_pole(sample_potential): +def test_reduction_to_pole(): + """ + Test reduction_to_pole function against an analytical solution. + """ + coordinates = vd.grid_coordinates( + (-70e3, 20e3, -20e3, 60e3), spacing=0.5e3, extra_coords=500 + ) + finc, fdec = -45, 13 + minc, mdec = -14, -24 + dipole = [-25e3, 20e3, -5000] + moment = 1e12 + magnetic_field_pole = dipole_magnetic( + coordinates, + dipoles=dipole, + magnetic_moments=magnetic_angles_to_vec(moment, 90, 0), + field="b", + ) + anomaly_pole = total_field_anomaly(magnetic_field_pole, 90, 0) + magnetic_field = dipole_magnetic( + coordinates, + dipoles=dipole, + magnetic_moments=magnetic_angles_to_vec(moment, minc, mdec), + field="b", + ) + anomaly = total_field_anomaly(magnetic_field, finc, fdec) + grid = vd.make_xarray_grid(coordinates[:2], anomaly, data_names="anomaly") + anomaly_reduced = reduction_to_pole(grid.anomaly, finc, fdec, minc, mdec) + # Relative tol doesn't work because the anomaly at the pole is zero in + # a ring around the source and the rtol blows up at those points. + np.testing.assert_allclose( + anomaly_reduced.values, + anomaly_pole, + rtol=0, + atol=0.01 * np.abs(anomaly_pole).max(), + ) + + +def test_reduction_to_pole_dim_names(sample_potential): """ Test reduction_to_pole function with non-typical dim names. """ renamed_dims_grid = sample_potential.rename( {"easting": "name_one", "northing": "name_two"} ) - reduction_to_pole(renamed_dims_grid, 60, 45) + reduction_to_pole(renamed_dims_grid, 60, 45, 60, 45) class TestTotalGradientAmplitude: @@ -549,19 +493,7 @@ def test_against_synthetic( """ Test total_gradient_amplitude function against the synthetic model. """ - # Pad the potential field grid to improve accuracy - pad_width = { - "easting": sample_potential.easting.size // 3, - "northing": sample_potential.northing.size // 3, - } - # need to drop upward coordinate (bug in xrft) - potential_padded = xrft.pad( - sample_potential.drop_vars("upward"), - pad_width=pad_width, - ) - # Calculate total gradient amplitude and unpad it - tga = total_gradient_amplitude(potential_padded) - tga = xrft.unpad(tga, pad_width) + tga = total_gradient_amplitude(sample_potential) # Compare against g_tga (trim the borders to ignore boundary effects) trim = 6 tga = tga[trim:-trim, trim:-trim] @@ -619,31 +551,10 @@ def test_against_synthetic( """ Test tilt function against the synthetic model. """ - # Pad the potential field grid to improve accuracy - pad_width = { - "easting": sample_potential.easting.size // 3, - "northing": sample_potential.northing.size // 3, - } - # need to drop upward coordinate (bug in xrft) - potential_padded = xrft.pad( - sample_potential.drop_vars("upward"), - pad_width=pad_width, - ) - # Calculate the tilt and unpad it - tilt_grid = tilt_angle(potential_padded) - tilt_grid = xrft.unpad(tilt_grid, pad_width) - # Compare against g_tilt (trim the borders to ignore boundary effects) - trim = 6 - tilt_grid = tilt_grid[trim:-trim, trim:-trim] - g_e = sample_g_e[trim:-trim, trim:-trim] - g_n = sample_g_n[trim:-trim, trim:-trim] - g_z = sample_g_z[trim:-trim, trim:-trim] - g_horiz_deriv = np.sqrt(g_e**2 + g_n**2) - g_tilt = np.arctan2( - -g_z, g_horiz_deriv - ) # use -g_z to use the _upward_ derivative - rms = root_mean_square_error(tilt_grid, g_tilt) - assert rms / np.abs(tilt_grid).max() < 0.1 + numerical = tilt_angle(sample_potential) + # Use -g_z to use the upward derivative (g_z is downward) + analytical = np.arctan2(-sample_g_z, np.sqrt(sample_g_e**2 + sample_g_n**2)) + np.testing.assert_allclose(numerical.values, analytical) def test_invalid_grid_single_dimension(self): """ @@ -681,7 +592,7 @@ def test_invalid_grid_with_nans(self, sample_potential): tilt_angle(sample_potential) -class Testfilter: +class TestAgainstOasisMontaj: """ Test filter result against the output from oasis montaj. """ @@ -701,15 +612,3 @@ def test_gaussian_highpass_grid(self): """ high_pass = gaussian_highpass(self.expected_grid.filter_data, 10) xrt.assert_allclose(self.expected_grid.filter_hp10, high_pass, atol=1e-6) - - def test_reduction_to_pole_grid(self): - """ - Test reduction_to_pole function against the output from oasis montaj. - """ - rtp = reduction_to_pole(self.expected_grid.filter_data, 60, 45) - # Remove mean value to match OM result - xrt.assert_allclose( - self.expected_grid.filter_rtp - self.expected_grid.filter_data.mean(), - rtp, - atol=1, - ) diff --git a/pyproject.toml b/pyproject.toml index 2919667e9..1eb6e32c4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -117,6 +117,7 @@ ignore = [ "RET504", # allow variable assignment only for return "PT001", # conventions for parenthesis on pytest.fixture "D200", # allow single line docstrings in their own line + "C420", # Replacing dict comprehension with `dict.fromkeys` is ugly ] [tool.ruff.lint.per-file-ignores]