{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Dispersion fitting tool\n", "\n", "Here we show how to fit optical measurement data and use the results to create dispersion material models for Tidy3d.\n", "\n", "Tidy3D's dispersion fitting tool peforms an optimization to find a medium defined as a dispersive [PoleResidue](../_autosummary/tidy3d.PoleResidue.rst) model that minimizes the RMS error between the model results and the data. This can then be directly used as a material in simulations." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "execution": { "iopub.execute_input": "2023-02-03T03:30:33.517733Z", "iopub.status.busy": "2023-02-03T03:30:33.517417Z", "iopub.status.idle": "2023-02-03T03:30:34.638983Z", "shell.execute_reply": "2023-02-03T03:30:34.638578Z" }, "tags": [] }, "outputs": [ { "data": { "text/html": [ "
[21:30:34] WARNING  This version of Tidy3D was pip installed from the 'tidy3d-beta' repository on   __init__.py:103\n",
       "                    PyPI. Future releases will be uploaded to the 'tidy3d' repository. From now on,                \n",
       "                    please use 'pip install tidy3d' instead.                                                       \n",
       "
\n" ], "text/plain": [ "\u001b[2;36m[21:30:34]\u001b[0m\u001b[2;36m \u001b[0m\u001b[31mWARNING \u001b[0m This version of Tidy3D was pip installed from the \u001b[32m'tidy3d-beta'\u001b[0m repository on \u001b]8;id=486318;file:///Users/twhughes/Documents/Flexcompute/tidy3d-docs/tidy3d/tidy3d/__init__.py\u001b\\\u001b[2m__init__.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=46774;file:///Users/twhughes/Documents/Flexcompute/tidy3d-docs/tidy3d/tidy3d/__init__.py#103\u001b\\\u001b[2m103\u001b[0m\u001b]8;;\u001b\\\n", "\u001b[2;36m \u001b[0m PyPI. Future releases will be uploaded to the \u001b[32m'tidy3d'\u001b[0m repository. From now on, \u001b[2m \u001b[0m\n", "\u001b[2;36m \u001b[0m please use \u001b[32m'pip install tidy3d'\u001b[0m instead. \u001b[2m \u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
           INFO     Using client version: 1.9.0rc1                                                  __init__.py:121\n",
       "
\n" ], "text/plain": [ "\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO \u001b[0m Using client version: \u001b[1;36m1.9\u001b[0m.0rc1 \u001b]8;id=941476;file:///Users/twhughes/Documents/Flexcompute/tidy3d-docs/tidy3d/tidy3d/__init__.py\u001b\\\u001b[2m__init__.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=871531;file:///Users/twhughes/Documents/Flexcompute/tidy3d-docs/tidy3d/tidy3d/__init__.py#121\u001b\\\u001b[2m121\u001b[0m\u001b]8;;\u001b\\\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# first import packages\n", "import matplotlib.pylab as plt\n", "import numpy as np\n", "\n", "import tidy3d as td\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Load Data\n", "\n", "The fitting tool accepts three ways of loading data:\n", "\n", "1. Numpy arrays directly by specifying `wvl_um`, `n_data`, and optionally `k_data`;\n", "\n", "2. Data file with the `from_file` utility function.\n", "\n", " Our data file has columns for wavelength (um), real part of refractive index (n), and imaginary part of refractive index (k). k data is optional. \n", " \n", " Note: `from_file` uses [np.loadtxt](https://numpy.org/doc/stable/reference/generated/numpy.loadtxt.html) under the hood, so additional keyword arguments for parsing the file follow the same format as [np.loadtxt](https://numpy.org/doc/stable/reference/generated/numpy.loadtxt.html).\n", " \n", "3. URL linked to a csv/txt file that contains wavelength (micron), n, and optionally k data with the `from_url` utility function. URL can come from [refractiveindex](https://refractiveindex.info).\n", "\n", "Below the 2nd way is taken as an example:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "execution": { "iopub.execute_input": "2023-02-03T03:30:34.641335Z", "iopub.status.busy": "2023-02-03T03:30:34.641071Z", "iopub.status.idle": "2023-02-03T03:30:35.737119Z", "shell.execute_reply": "2023-02-03T03:30:35.736689Z" }, "tags": [] }, "outputs": [ { "data": { "image/png": "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ww0REREpCsMNERERKQrDDRERESkKww0REREpCsMNERERKQrDDRERESkKww0REREpCsMNERERKQrDDRERESkKww0REREpCsMNERERKQrDDRERESkKww0REREpCsMNERERKQrDDRERESkKww0REREpCsMNERERKQrDDRERESkKww0REREpCsMNERERKQrDDRERESkKww0REREpCsMNERERKQrDDRERESkKww0REREpCsMNERERKQrDDRERESkKww0REREpCsMNERERKQrDDRERESkKww0REREpCsMNERERKQrDDRERESkKww0REREpiqzhJiEhAZ07d4ZarYa/vz/i4+ORmpp63/etW7cOzZo1g6urK1q3bo2tW7dWQ7VERERUE8gabpKSkjBu3Dj8+uuv2LlzJ4qKitCvXz/k5OSU+Z79+/dj+PDhGD16NFJSUhAfH4/4+HgcP368GisnIiIieyUJIYTcRZS4du0a/P39kZSUhKioKLPrDBs2DDk5Odi8ebNxWbdu3dCuXTssW7bsvvvQarXw8vJCdnY2NBqN1WonIiIi27Hk+9uuxtxkZ2cDAHx9fctcJzk5GX369DFZFhsbi+TkZLPrFxQUQKvVmjyIiIhIuewm3BgMBowfPx49evRAq1atylwvMzMTAQEBJssCAgKQmZlpdv2EhAR4eXkZH6GhoVatm4iIiOyL3YSbcePG4fjx41izZo1VtztlyhRkZ2cbHxcuXLDq9omIiMi+OMpdAAA899xz2Lx5M/bs2YN69eqVu25gYCCuXLlisuzKlSsIDAw0u76LiwtcXFysVisREZFcDAYDCgsL5S7DZpydnaFSVb3fRdZwI4TA888/jw0bNiAxMRHh4eH3fU9kZCR27dqF8ePHG5ft3LkTkZGRNqyUiIhIXoWFhUhLS4PBYJC7FJtRqVQIDw+Hs7NzlbYja7gZN24cVq9ejU2bNkGtVhvHzXh5ecHNzQ0AMGLECISEhCAhIQEA8OKLLyI6OhoLFizAoEGDsGbNGhw8eBAff/yxbMdBRERkS0IIZGRkwMHBAaGhoVbp3bA3BoMBly9fRkZGBurXrw9Jkiq9LVnDzdKlSwEAMTExJss//fRTjBo1CgCQnp5uchK7d++O1atX44033sBrr72GJk2aYOPGjeUOQiYiIqrJiouLkZubi+DgYLi7u8tdjs34+fnh8uXL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GyIiIlIUhhsiIiJSFIYbIiIiUhSGGyIiIlIUhhsiIiJSFIYbIiIiUhSGGyIiIlIUhhsiIiJSFFnDzZ49ezBkyBAEBwdDkiRs3Ljxvu9JTExEhw4d4OLigsaNG2PVqlU2r5OIiIhqDlnDTU5ODtq2bYslS5ZUaP20tDQMGjQIDzzwAI4cOYLx48djzJgx2LFjh40rJSIioprCUc6dDxgwAAMGDKjw+suWLUN4eDgWLFgAAGjevDn27duHRYsWITY21lZlEhERUQ1So8bcJCcno0+fPibLYmNjkZycXOZ7CgoKoNVqTR5ERESkXDUq3GRmZiIgIMBkWUBAALRaLfLy8sy+JyEhAV5eXsZHaGhodZRKREREMqlR4aYypkyZguzsbOPjwoULcpdERERENiTrmBtLBQYG4sqVKybLrly5Ao1GAzc3N7PvcXFxgYuLS3WUR0RERHagRvXcREZGYteuXSbLdu7cicjISJkqIiIiInsja7i5ffs2jhw5giNHjgC4c6v3kSNHkJ6eDuDOJaURI0YY13/66adx9uxZTJo0CX///Tc+/PBDfPPNN5gwYYIc5RMREZEdkjXcHDx4EO3bt0f79u0BABMnTkT79u3x5ptvAgAyMjKMQQcAwsPDsWXLFuzcuRNt27bFggULsHz5ct4GTkREREaSEELIXUR10mq18PLyQnZ2NjQajdzlEBERUQVY8v1do8bcEBEREd0Pww0REREpCsMNERERKQrDDRERESkKww0REREpCsMNERERKQrDDRERESkKww0REREpCsMNERERKQrDDRERESkKww0REREpCsMNERERKQrDDRERESkKww0REREpCsMNERERKQrDDRERESkKww0REREpCsMNERERKQrDDRERESkKww0REREpCsONDQgh5C6BiIio1nKUuwCl0Ol0mP3mPOzauhcOejfoHfLw4ICemDrrVajVarnLIyIiqjXYc2MFly9fRrsmkbj2XWPESR9Co41A9qVibFqxF82COmPCuFeh0+nkLpOIiKhWYM9NFel0OvRs3xcPuL6KBu6d8cWF/yKqzlj09ZsISZIghEDqlt2I/SUeO/ZuZC8OERGRjbHnpopmvzkPhttuiPCMwZ4bHyGqzlhEqGMgSRIAQJIkNPN8EC20IzFn2nyZqyUiIlI+hpsq+mnLHniofCFJEs7lHkRTz2iT10sG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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from tidy3d.plugins import DispersionFitter\n", "\n", "fname = \"data/nk_data.csv\"\n", "\n", "# note that additional keyword arguments to load_nk_file get passed to np.loadtxt\n", "fitter = DispersionFitter.from_file(fname, skiprows=1, delimiter=\",\")\n", "\n", "# lets plot the data\n", "plt.scatter(\n", " fitter.wvl_um,\n", " fitter.n_data,\n", " label=\"n\",\n", " color=\"crimson\",\n", " edgecolors=\"black\",\n", " linewidth=0.5,\n", ")\n", "plt.scatter(\n", " fitter.wvl_um,\n", " fitter.k_data,\n", " label=\"k\",\n", " color=\"blueviolet\",\n", " edgecolors=\"black\",\n", " linewidth=0.5,\n", ")\n", "plt.xlabel(\"wavelength ($\\mu m$)\")\n", "plt.ylabel(\"value\")\n", "plt.title(\"refractive index data\")\n", "plt.legend()\n", "plt.show()\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Fitting the data\n", "\n", "The fitting tool fit a dispersion model to the data by minimizing the root mean squared (RMS) error between the model n,k prediciton and the data at the given wavelengths.\n", "\n", "There are various fitting parameters that can be set, but the most important is the number of \"poles\" in the model.\n", "\n", "For each pole, there are 4 degrees of freedom in the model. Adding more poles can produce a closer fit, but each additional pole added will make the fit harder to obtain and will slow down the FDTD. Therefore, it is best to try the fit with few numbers of poles and increase until the results look good.\n", "\n", "Here, we will first try fitting the data with 1 pole and specify the RMS value that we are happy with (`tolerance_rms`).\n", "\n", "Note that the fitting tool performs global optimizations with random starting coefficients, and will repeat the optimization `num_tries` times, returning either the best result or the first result to satisfy the tolerance specified." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "execution": { "iopub.execute_input": "2023-02-03T03:30:35.739609Z", "iopub.status.busy": "2023-02-03T03:30:35.739329Z", "iopub.status.idle": "2023-02-03T03:30:42.136220Z", "shell.execute_reply": "2023-02-03T03:30:42.135639Z" }, "tags": [] }, "outputs": [ { "data": { "text/html": [ "
\n"
      ],
      "text/plain": [
       "\u001b[?25l"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "27ba8417d45748e19ef193b28605d9f4",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n",
       "
\n" ], "text/plain": [ "\n", "\u001b[?25h" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
[21:30:42] WARNING          warning: did not find fit with RMS error under tolerance_rms of 2.00e-02     fit.py:364\n",
       "
\n" ], "text/plain": [ "\u001b[2;36m[21:30:42]\u001b[0m\u001b[2;36m \u001b[0m\u001b[31mWARNING \u001b[0m warning: did not find fit with RMS error under tolerance_rms of \u001b[1;36m2.00e-02\u001b[0m \u001b]8;id=508975;file:///Users/twhughes/Documents/Flexcompute/tidy3d-docs/tidy3d/tidy3d/plugins/dispersion/fit.py\u001b\\\u001b[2mfit.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=309901;file:///Users/twhughes/Documents/Flexcompute/tidy3d-docs/tidy3d/tidy3d/plugins/dispersion/fit.py#364\u001b\\\u001b[2m364\u001b[0m\u001b]8;;\u001b\\\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
           INFO             returning best fit with RMS error 9.95e-02                                   fit.py:368\n",
       "
\n" ], "text/plain": [ "\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO \u001b[0m returning best fit with RMS error \u001b[1;36m9.95e-02\u001b[0m \u001b]8;id=505127;file:///Users/twhughes/Documents/Flexcompute/tidy3d-docs/tidy3d/tidy3d/plugins/dispersion/fit.py\u001b\\\u001b[2mfit.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=545074;file:///Users/twhughes/Documents/Flexcompute/tidy3d-docs/tidy3d/tidy3d/plugins/dispersion/fit.py#368\u001b\\\u001b[2m368\u001b[0m\u001b]8;;\u001b\\\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "medium, rms_error = fitter.fit(num_poles=1, tolerance_rms=2e-2, num_tries=100)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The RMS error stalled at a value that was far above our tolerance, so we might want to try more fits.\n", "\n", "Let's first visualize how well the best single pole fit captured our model using the `.plot()` method" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "execution": { "iopub.execute_input": "2023-02-03T03:30:42.220360Z", "iopub.status.busy": "2023-02-03T03:30:42.220245Z", "iopub.status.idle": "2023-02-03T03:30:42.442384Z", "shell.execute_reply": "2023-02-03T03:30:42.441690Z" }, "tags": [] }, "outputs": [ { "data": { "image/png": "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v379EB0djREjRmDDhg1YuHAhjh07hg4dOtRon3X1gOKkpCTExMTwFyeIiIjooTToX55wdnbGokWLjJ6yHDNmDHJzc/Hdd98Z2nr16oUuXbpg1apVNRq/LoIdH05MREREptIgf3lCp9Nh8+bNyM3NRUhIiNE+Bw8exIwZM2RtQ4YMwbZt26oct7CwEIWFhYblrKwsk9RbFT6cmIiIiJSi+M0Tp06dgr29PTQaDZ5//nls3boV7dq1M9o3LS0NHh4esjYPDw+kpaVVOX50dDS0Wq3h5ePjY9L6K0pMTMSkSZOg1+uh0+lkfyMjI5GUlGS2fRMREREpHuyCgoIQHx+PQ4cO4YUXXsCzzz6Ls2fPmmz8qKgoZGZmGl5Xrlwx2dj34sOJiYiISEmKn4pVq9WGmwq6du2Kw4cPY9myZfjkk08q9fX09MT169dlbdevX4enp2eV42s0Gmg0GtMWXQU+nJiIiIiUpPiM3b30er3smriKQkJCsHv3blnbrl27qrwmr67x4cRERESkJEWDXVRUFH799VckJyfj1KlTiIqKQlxcHMaPHw8AmDBhAqKiogz9X3nlFezcuRNLlizB+fPnMX/+fBw5cgRTp05V6iPI8OHEREREpCRFg116ejomTJiAoKAgDBw4EIcPH8aPP/6IQYMGAQBSUlKQmppq6N+7d29s2LABq1evRufOnfH1119j27ZtNX6Gnbnx4cRERESkpHr3HDtzq4vn2PHhxERERGQqDfoBxeZWV788QURERGQKtcku9e7mCSIiIiJ6MAx2RERERBaCwY6IiIjIQjDYEREREVkIBjsiIiIiC8FgR0RERGQhGOyIiIiILASDHREREZGFYLAjIiIishAMdkREREQWgsGOiIiIyEIw2BERERFZCAY7IiIiIgvBYEdERERkIRjsiIiIiCwEgx0RERGRhWCwIyIiIrIQDHZEREREFoLBjoiIiMhCMNgRERERWQgGOyIiIiILwWBHREREZCEY7IiIiIgsBIMdERERkYVgsCMiIiKyEAx2RERERBaCwY6IiIjIQjDYEREREVkIBjsiIiIiC8FgR0RERGQhGOyIiIiILASDHREREZGFYLAjIiIishAMdkREREQWgsGOiIiIyEIw2BERERFZCAY7IiIiIgvBYEdERERkIRjsiIiIiCwEgx0RERGRhWCwIyIiIrIQiga76Oho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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fitter.plot(medium)\n", "plt.show()\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As we can see, there is room for improvement at short wavelengths. Let's now try a two pole fit." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "execution": { "iopub.execute_input": "2023-02-03T03:30:42.444964Z", "iopub.status.busy": "2023-02-03T03:30:42.444544Z", "iopub.status.idle": "2023-02-03T03:31:00.009614Z", "shell.execute_reply": "2023-02-03T03:31:00.009219Z" }, "tags": [] }, "outputs": [ { "data": { "text/html": [ "
\n"
      ],
      "text/plain": [
       "\u001b[?25l"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "6e4c9106caa04277936edc302dd694e4",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
[21:31:00] INFO             found optimal fit with RMS error = 1.90e-02, returning                       fit.py:360\n",
       "best RMS error so far: 2.06e-02 ━━━━━━━━━━━━━━━━━━━━━━━━━━╺━━━━━━━━━━━━━  66% 0:00:09
\n" ], "text/plain": [ "\n", "\u001b[2K\u001b[2;36m[21:31:00]\u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO \u001b[0m found optimal fit with RMS error = \u001b[1;36m1.90e-02\u001b[0m, returning \u001b]8;id=202944;file:///Users/twhughes/Documents/Flexcompute/tidy3d-docs/tidy3d/tidy3d/plugins/dispersion/fit.py\u001b\\\u001b[2mfit.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=76605;file:///Users/twhughes/Documents/Flexcompute/tidy3d-docs/tidy3d/tidy3d/plugins/dispersion/fit.py#360\u001b\\\u001b[2m360\u001b[0m\u001b]8;;\u001b\\\n", "best RMS error so far: 2.06e-02 \u001b[38;2;249;38;114m━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[38;5;237m╺\u001b[0m\u001b[38;5;237m━━━━━━━━━━━━━\u001b[0m \u001b[35m 66%\u001b[0m \u001b[36m0:00:09\u001b[0m" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
\n",
       "
\n" ], "text/plain": [ "\n", "\u001b[?25h" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "medium, rms_error = fitter.fit(num_poles=2, tolerance_rms=2e-2, num_tries=50)\n" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "execution": { "iopub.execute_input": "2023-02-03T03:31:00.222136Z", "iopub.status.busy": "2023-02-03T03:31:00.222027Z", "iopub.status.idle": "2023-02-03T03:31:00.442520Z", "shell.execute_reply": "2023-02-03T03:31:00.441872Z" }, "tags": [] }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAnYAAAHWCAYAAAD6oMSKAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAABemUlEQVR4nO3deVxU9f4/8NeZgRlANtlBQVAQVxR3NBMTNReu1v2VV73XCLRbaeVeVGbLt3DJytKrWaB2U6n0qi22mIqZmrnhHoKKuIArsq8z5/cHMnJgQMAZDhxez+9jHsz5nM/5nPcc537v637OMoIoiiKIiIiIqMlTyV0AEREREZkGgx0RERGRQjDYERERESkEgx0RERGRQjDYERERESkEgx0RERGRQjDYERERESkEgx0RERGRQljIXUBD0+v1uHr1Kuzs7CAIgtzlEBEREdVIFEXk5OTAy8sLKlXNc3LNLthdvXoV3t7ecpdBREREVCeXLl1C69ata+zT7IKdnZ0dgLKDY29vL3M1RERERDXLzs6Gt7e3IcPUpNkFu/LTr/b29gx2RERE1GTU5hIy3jxBREREpBAMdkREREQKwWBHREREpBAMdkREREQKwWBHREREpBCyBrsVK1YgKCjIcIdqSEgIfvzxx2r7r1mzBoIgSF5WVlYNWDERERFR4yXr405at26NBQsWICAgAKIoYu3atRgzZgyOHj2Kzp07G93G3t4eSUlJhmX+egQRERFRGVmDXXh4uGT53XffxYoVK/DHH39UG+wEQYCHh0dDlEdERETUpDSaa+x0Oh3i4+ORl5eHkJCQavvl5uaiTZs28Pb2xpgxY3Dq1KkGrJKIiIio8ZL9lydOnDiBkJAQFBYWwtbWFps3b0anTp2M9g0MDERcXByCgoKQlZWF999/H/3798epU6eq/e20oqIiFBUVGZazs7PN8jmIiIiI5CaIoijKWUBxcTHS0tKQlZWFjRs34vPPP8fu3burDXcVlZSUoGPHjhg/fjzeeecdo33efPNNvPXWW1Xas7Ky+JNiRERE1OhlZ2fDwcGhVtlF9mBXWVhYGNq1a4dPP/20Vv2feOIJWFhYYMOGDUbXG5ux8/b2ZrCjGiUnJyMuLg4nTpzArVu3YGVlhcLCQlhZWSEzMxO5ubkAADs7Ozg6Ota6jWMod4zGXBvH4L83xzDfGIWFhXB2dkbXrl0RGRmJgIAAmFpdgp3sp2Ir0+v1kiBWE51OhxMnTmDkyJHV9tFqtdBqtaYqT5EqhpjLly832v/wNNQYBQUFkjuviYiI7ufHH3/EokWLEBsbi4iICNnqkDXYRUdHY8SIEfDx8UFOTg7Wr1+PhIQE/PzzzwCASZMmoVWrVoiJiQEAvP322+jXrx/8/f1x584dLF68GBcvXsTkyZPl/BiNTl2CWnFxMS5dulTvfVlAKHsJAiwN71WwhABLQUABBJRAgKWgQsu7/VS4iVIIcADQEgJUggAVMqHCJVgBUEGALQC1IECAABVyoEY63IG7fQEV8qHCdfhJ2oqgwk0AQNmWuPcSbkPA7bvr7r7SMyEg07AMCBDS75S9t/G9u51QYb2Rce+2ScYVpH1QeX2lcWpSeX3lx/tUWX/f5Zq3r1UN9xnjvsv3eUSRqT9T7T5j3Y/Lg2iIhzSZ/TM0wKOmlPAwK0X8WzfAp1DCcfqzJBuL81MRFRWFhx56CP7+/mbeo3GyBrvr169j0qRJSE9Ph4ODA4KCgvDzzz9j6NChAIC0tDSoVPdu3M3MzMSUKVOQkZGBli1bomfPnti3b1+trsdTqsoh7urVq7hx40aVfpYQ4KyyRKFgCXtBDVeVBewEC9gJathbe8NeZQFrqGAlqGEtqKAVVHeXy9qsBBWs7i5rBRUs7oY1IiIiAm7qSwCU/Y+e2NhYw6RUQ2t019iZW13OUzdGFYPcmTNncP78eQCAo2CBNmortFFbo42q7K+bSgNXlSVcVBq0VFnKXDkREZFybS+6hedyzkClUuHJJ5+s9tr/+mjS19hRVeVhbtu2bTh+/DgcBQv0srTHGAtbdLPvjM4WtgxuREREjYAgCPD19ZVt/wx2jVhycjKmT5+Obdu2wV9tjSEaZ7zq0BXBFvZQN5GfUtOLIkohogQiSkUROtx9iSJEAHqI0AEQ77bp77ZJ/oqi4b0OZduV9xXvjlfeTwQqvMqWUWnZ8BLvrYeR7cpfqGG7e38r7xuGvVe3XcWxK7r/sljDuppV6V9pwv5BaqnV/mrYtq77rrIvE38WJZzKMPdnuN+/v2n2YX7mP07mp4STb0393/qqvuzGT1EUERUVZcY91YzBrpFasGAB5ke/ir9p3fA/h24IsrQzybg6UUSOWIpsUYccsRQ5+nvv80QdCkU9CqFHoahDgahHkahHAfRl7XfbiqFHqXg3rEFEqagvC293Q1z5+xLooTdJ1URERI2bSqWCSqVCbGysbDdOAAx2jU5ycjKemTwZ7geSsKNlL3iqa/+ollJRxGV9IS7qCnBRV4gr+iJc1xfjhr4YN/XFuKEvQZZYasbqlatDhw5wdHSElZUV7ty5g5ycHAD37jSubVv5o1g4hvLGaMy1cQz+e3MM841R8Tl2UVFRsoY6gMGu0Sg/7Xru5wTE2AYgyK7mBxwWiDokluTgeGkuTpTm4ExpHq7oi1D6gBPN3t7e0Gg0ABrff3gaeozG9B9UIiKi2mCwawQWLFiA6Oho/D+tOzY5doOVoDbaL0NXhF+Lb2FncSYOlGShqBYnOmsT1Fq1asUAQ0REpAAMdjIrD3WzbdrgWRtvo33+LMnC5wVXsLv4NnQ1jFUe4jQaDR5++GHMnj2bQY2IiKgZYbCT0fbt2xEdHY1XbHwx2aZ1lfXnSvPxdt557C25U+0Y3bp1w4gRIzjbRkRERAx2clm9ejUiIyMRYeVlNNR9UXAVC/IuoLjSNXM+Pj7o2rUrT50SERFRFQx2Mti+fTuioqLQy8Ier7Twk6zTiyJezU3BxqJrVbZbsGABXn755YYqk4iIiJoY/thnA1u9ejWGDRuGFlBhqV0gLCo9aHhO7tkqoW7kyJFITk5mqCMiIqIaccauASUnJ2Py5MkAgJdsfOBe6Rl1n+SnYWvRDcNyaGgoPvvsM55uJSIiolrhjF0Dev/99yGKItqrbfAvKy/Jut+LM/FJfpphecGCBdi1axdDHREREdUaZ+wayOrVq7Fq1SoAQHQLP8kp2CJRj3m5KYan0v36668YMmSIDFUSERFRU8YZuwZQ8RRsR3ULDNS0lKz/tOAyLumLIAgCVq9ezVBHRERE9cIZuwYQFxcH4e4MXaR1K8m6m/pifJp/GUDZ3bIMdURERFRfnLFrAKmpqRBFEe4qDUZrXSTr/luQjiLoOVNHRERED4wzdg3A19cXgiDgH1oPWAr3snShqMOGogz8+9//RkREhHwFEhERkSJwxq4BODg4QKfTYbTWVdK+ufA67kCH2bNny1QZERERKQmDnZklJyfjtddeQwd1C/iprSXrNhZdw3vvvcdHmhAREZFJMNiZWfmNEyMrXVt3RVeIE/p83LlzR57CiIiISHEY7Mys/MaJEZWC3baim4b1RERERKbAYGdmvr6+6GBR9TTstuKbEAQBvr6+8hRGREREisNgZ2aRkZHob+EgabusK8SJ0lyIooioqCiZKiMiIiKlYbAzs4CAAEzpOVDS9nvpHahUKsTGxvLGCSIiIjIZPsfOzMTSUrhcugWxQpvbo4OQ9N6PDHVERERkUgx2Zpbyw06ocvMlbU9/shAW7s4yVURERERKxVOxZrR69Wq8P0F6DV2KLh9f/vidTBURERGRkjHYmUlycjImT56Mvhb2kvYDxVmIiopCSkqKTJURERGRUjHYmUlcXBzUgoCelYLdHyV3IAgCYmNjZaqMiIiIlIrBzkxSU1PhK1jBViW9jPFgSTZEUeSDiYmIiMjkePOEmfj6+qLI0lbSlqErwk2xBGqVmg8mJiIiIpPjjJ2ZREZGopO6haTtZGkuAPDBxERERGQWDHZmEhAQgMc79ZC0ndbn88HEREREZDY8FWsmol4Px+vZkgcTB44ZjqS35jDUERERkVkw2JlJyYXLECs9mPiZJe/CwsNFpoqIiIhI6Xgq1kwu/vybZFl0dmCoIyIiIrNisDOD1atXI3buG5K23empWLNmjTwFERERUbPAYGdi5b840VFtI2k/WZrDX5wgIiIis2KwM7G4uDgIggD/SsHur9I8/uIEERERmRWDnYmlpqbCFip4qLWS9mRdPn9xgoiIiMyKwc7EfH190b7Sg4mLRT0u6gohCAJ/cYKIiIjMhsHOxCIjI+Gvtpa0peoKUAqRvzhBREREZiVrsFuxYgWCgoJgb28Pe3t7hISE4Mcff6xxm2+++QYdOnSAlZUVunbtim3btjVQtbUTEBCAZ4f/TdKWoi/gL04QERGR2cka7Fq3bo0FCxbg8OHDOHToEB555BGMGTMGp06dMtp/3759GD9+PKKionD06FGMHTsWY8eOxcmTJxu48ppVnrFz79cDSUlJiIiIkKcgIiIiahYEURTF+3drOE5OTli8eLHRU5bjxo1DXl4evv/+e0Nbv3790L17d6xcubJW42dnZ8PBwQFZWVmwt7c3Wd0VpXQcDeFmlmFZ/3/PI+Df482yLyIiIlK2umSXRnONnU6nQ3x8PPLy8hASEmK0z/79+xEWFiZpGz58OPbv31/tuEVFRcjOzpa8zOm/y1dKQh0AjJo2hQ8nJiIiIrOTPdidOHECtra20Gq1ePbZZ7F582Z06tTJaN+MjAy4u7tL2tzd3ZGRkVHt+DExMXBwcDC8vL29TVp/RcnJyfh45iuStmJRjwul+Xw4MREREZmd7MEuMDAQiYmJOHDgAJ577jk89dRTOH36tMnGj46ORlZWluF16dIlk41dWVxcHAIqPZi4/I5YPpyYiIiIzM1C7gI0Go3hTtGePXvi4MGDWLp0KT799NMqfT08PHDt2jVJ27Vr1+Dh4VHt+FqtFlqtttr1ppSamlrlxolkXT4A8OHEREREZHayz9hVptfrUVRUZHRdSEgIduzYIWnbvn17tdfkNTRfX1+c1uXhp6KbSCnNR6koIqW0LNjx4cRERERkbrLO2EVHR2PEiBHw8fFBTk4O1q9fj4SEBPz8888AgEmTJqFVq1aIiYkBALz00ksYNGgQlixZglGjRiE+Ph6HDh3CqlWr5PwYBpGRkeiwaBH+V1A2q6iBAEuhLDvz4cRERERkbrLO2F2/fh2TJk1CYGAghgwZgoMHD+Lnn3/G0KFDAQBpaWlIT0839O/fvz/Wr1+PVatWoVu3bti4cSO2bNmCLl26yPURJAICAhAbGwuVSgW1Wo1SlYBCFfhwYiIiImoQje45dubWIM+xS0lBbGwsUlNT4evri6ioKIY6IiIiqpe6ZBcGOyIiIqJGrEk+oJiIiIiIHgyDHREREZFCMNgRERERKQSDHREREZFCMNgRERERKQSDHREREZFCMNgRERERKQSDHREREZFCMNgRERERKQSDHREREZFCMNgRERERKQSDHREREZFCMNgRERERKQSDHREREZFCMNgRERERKQSDHREREZFCMNgRERERKQSDHREREZFCMNgRERERKQSDHREREZFCMNgRERERKQSDHREREZFCMNgRERERKQSDHREREZFCMNgRERERKQSDHREREZFCMNgRERERKQSDHREREZFCMNgRERERKQSDHREREZFCMNgRERERKQSDHREREZFCMNgRERERKQSDHREREZFCMNgRERERKQSDHREREZFCMNgRERERKQSDHREREZFCMNgRERERKQSDHREREZFCMNgRERERKYSswS4mJga9e/eGnZ0d3NzcMHbsWCQlJdW4zZo1ayAIguRlZWXVQBUTERERNV6yBrvdu3dj6tSp+OOPP7B9+3aUlJRg2LBhyMvLq3E7e3t7pKenG14XL15soIqJiIiIGi8LOXf+008/SZbXrFkDNzc3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S5YswahRoxAfH49Dhw5h1apVsn0OIiIiMi9zPjS5rirfxNmYyHqN3YoVK5CVlYXQ0FB4enoaXl999ZWhT1paGtLT0w3L/fv3x/r167Fq1Sp069YNGzduxJYtW2q84YKIiIioOZD9VOz9lP9uW0VPPPEEnnjiCTNURERERNR0NZq7YomIiIjowTDYERERESkEgx0RERGRQjDYERERESkEgx0RERGRQtQ72KWkpODnn39GQUEBgNrd4UpERERUV8XFxfD398e+ffsafN+pqakQBAGJiYm13iY0NFTyQwr9+vXDpk2bTF+cEXUOdrdu3UJYWBjat2+PkSNHGp4xFxUVhVmzZpm8QCIiImreVq5cCT8/P/Tv31/uUurl9ddfxyuvvAK9Xm/2fdU52M2YMQMWFhZIS0uDjY2NoX3cuHH46aefTFocERERNW+iKGLZsmWIioqSu5R6GzFiBHJycvDjjz+afV91Dna//PILFi5ciNatW0vaAwICcPHiRZMVRkRERPcn6vXQ3cyU9SXWciYqNDQUL774IubOnQsnJyd4eHjgzTffrHGbw4cP49y5cxg1apShrfz06Ndff42BAwfC2toavXv3xtmzZ3Hw4EH06tULtra2GDFiBG7cuGHYTq/X4+2330br1q2h1WrRvXv3KpNSf/75J4KDg2FlZYVevXrh6NGjVWo6efIkRowYAVtbW7i7u+Nf//oXbt68We1nUKvVGDlyJOLj42t1nB5EnX95Ii8vTzJTV+727dvQarUmKYqIiIhqR387C6kd/yZrDb5nvoXapWWt+q5duxYzZ87EgQMHsH//fkRERGDAgAEYOnSo0f579uxB+/btYWdnV2Xd/Pnz8dFHH8HHxweRkZGYMGEC7OzssHTpUtjY2ODJJ5/EG2+8gRUrVgAAli5diiVLluDTTz9FcHAw4uLi8Le//Q2nTp1CQEAAcnNzMXr0aAwdOhRffvklLly4gJdeekmyzzt37uCRRx7B5MmT8eGHH6KgoAAvv/wynnzySezcubPaz92nTx8sWLCgVsfoQdR5xm7gwIH44osvDMuCIECv12PRokUYPHiwSYsjIiIiZQkKCsL8+fMREBCASZMmoVevXtixY0e1/S9evAgvLy+j62bPno3hw4ejY8eOeOmll3D48GHMmzcPAwYMQHBwMKKiorBr1y5D//fffx8vv/wy/vGPfyAwMBALFy5E9+7d8dFHHwEA1q9fD71ej9jYWHTu3BmjR4/GnDlzJPtctmwZgoOD8d5776FDhw6GgLhr1y6cPXu22s/h5eWFS5cumf06uzrP2C1atAhDhgzBoUOHUFxcjLlz5+LUqVO4ffs29u7da44aiYiISCGCgoIky56enrh+/Xq1/QsKCmBlZXXfsdzd3QEAXbt2lbSVj52dnY2rV69iwIABkjEGDBiAY8eOAQDOnDmDoKAgyf5CQkIk/Y8dO4Zdu3bB1ta2Sj3nzp1D+/btjdZqbW0NvV6PoqIiWFtbV/t5H1Sdg12XLl1w9uxZLFu2DHZ2dsjNzcXjjz+OqVOnwtPT0xw1EhERkUJYWlpKlsvP/FXHxcUFJ06cuO9YgiAYbTP1DFlubi7Cw8OxcOHCKutqykG3b99GixYtzBrqgHoEOwBwcHDAa6+9ZupaiIiIqI5UTg7wPfOt7DWYS3BwMFasWAFRFA3hrT7s7e3h5eWFvXv3YtCgQYb2vXv3ok+fPgCAjh074r///S8KCwsNs3Z//PGHZJwePXpg06ZN8PX1hYVF7WPUyZMnERwcXO/6a6vOwe63336rcf3DDz9c72KIiIiobgSVqtY3LjRFgwcPRm5uLk6dOoUuXbo80Fhz5szB/Pnz0a5dO3Tv3h2rV69GYmIi1q1bBwCYMGECXnvtNUyZMgXR0dFITU3F+++/Lxlj6tSp+OyzzzB+/HjD3b0pKSmIj4/H559/DrVabXTfe/bswbBhwx6o/tqoc7ALDQ2t0lYxQet0ugcqiIiIiKics7MzHnvsMaxbtw4xMTEPNNaLL76IrKwszJo1C9evX0enTp3w7bffIiAgAABga2uL7777Ds8++yyCg4PRqVMnLFy4EH//+98NY5TP+r388ssYNmwYioqK0KZNGzz66KNQqYzfk3rlyhXs27cPX3755QPVXxuCWMffAsvKypIsl5SU4OjRo5g3bx7effddDBkyxKQFmlp2djYcHByQlZUFe3t7ucshIiKqs8LCQly4cAF+fn7V3ligJMePH8fQoUNx7tw5ozctNHYvv/wyMjMzsWrVqmr71PRvWpfsUucZOweHqufRhw4dCo1Gg5kzZ+Lw4cN1HZKIiIioWkFBQVi4cCEuXLggueu1qXBzc8PMmTMbZF/1unnCGHd3dyQlJZlqOCIiIiKDiIgIuUuot1mzZjXYvuoc7I4fPy5ZFkUR6enpWLBgAbp3726quoiIiIiojuoc7Lp37w5BEFD50rx+/fohLi7OZIURERERUd3UOdhduHBBsqxSqeDq6tosLt4kIiIiaszqHOzatGljjjqIiIiI6AHVKth9/PHHtR7wxRdfrHcxRERERFR/tQp2H374Ya0GEwSBwY6IiIhIJrUKdpWvqyMiIiKixsf4b18QERERmVhoaCimT59e5+3mzZuHZ555xixj19XNmzfh5uaGy5cvm31f9VGvBxRfvnwZ3377LdLS0lBcXCxZ98EHH5ikMCIiIqKMjAwsXboUJ06cMOm4CQkJGDx4MDIzM+Ho6Fjr7VxcXDBp0iTMnz8fsbGxJq3JFOoc7Hbs2IG//e1vaNu2Lf766y906dIFqampEEURPXr0MEeNRERE1Ex9/vnn6N+/f6N6KsfTTz+Nnj17YvHixXBycpK7HIk6n4qNjo7G7NmzceLECVhZWWHTpk24dOkSBg0ahCeeeMIcNRIREZEZJCcnIzo6GuPHj0d0dDSSk5MbdP8//PADHBwcsG7dumr7xMfHIzw8XNKWl5eHSZMmwdbWFp6enliyZEmV7f773/+iV69esLOzg4eHByZMmIDr168DAFJTUzF48GAAQMuWLSEIguEny3766Sc89NBDcHR0hLOzM0aPHo1z585Jxu7cuTO8vLywefPmB/n4ZlHnYHfmzBlMmjQJAGBhYYGCggLY2tri7bffxsKFC01eIBEREZne6tWr0aFDByxevBhff/01Fi9ejA4dOmDNmjUNsv/169dj/PjxWLduHSZOnGi0z+3bt3H69Gn06tVL0j5nzhzs3r0bW7duxS+//IKEhAQcOXJE0qekpATvvPMOjh07hi1btiA1NdUQ3ry9vbFp0yYAQFJSEtLT07F06VIAZaFx5syZOHToEHbs2AGVSoXHHnsMer1eMn6fPn2wZ88eUxwKk6rzqdgWLVoYrqvz9PTEuXPn0LlzZwBlFxQSERFR45acnIzJkydXCSsAEBUVhYceegj+/v5m2//y5cvx2muv4bvvvsOgQYOq7ZeWlgZRFOHl5WVoy83NRWxsLL788ksMGTIEALB27Vq0bt1asm1kZKThfdu2bfHxxx+jd+/eyM3Nha2treEUqpubm+Qau7///e+SceLi4uDq6orTp0+jS5cuhnYvLy8cPXq07h/ezOo8Y9evXz/8/vvvAICRI0di1qxZePfddxEZGYl+/fqZvEAiIiIyrbi4OAiCYHSdIAhmvSlg48aNmDFjBrZv315jqAOAgoICAJD8bOm5c+dQXFyMvn37GtqcnJwQGBgo2fbw4cMIDw+Hj48P7OzsDPtKS0urcZ/JyckYP3482rZtC3t7e/j6+hrdztraGvn5+TV/WBnUOdh98MEHhoP51ltvYciQIfjqq6/g6+vbKO8OISIiIqnymx6NEUURqampZtt3cHAwXF1dERcXV20N5VxcXAAAmZmZddpHXl4ehg8fDnt7e6xbtw4HDx40XA9X+WkelYWHh+P27dv47LPPcODAARw4cMDodrdv34arq2ud6moIdQ527733Hm7fvg2g7LTsypUrcfz4cWzatKlR3bFCRERExvn6+tY4Y1c+S2UO7dq1w65du7B161a88MIL9+1rb2+P06dPS9osLS0NgQsoC35nz541LP/111+4desWFixYgIEDB6JDhw6GGyfKaTQaAIBOpzO03bp1C0lJSXj99dcxZMgQdOzYsdpQefLkSQQHB9f+gzeQOge7Gzdu4NFHH4W3tzfmzJmDY8eOmaMuIiIiMpPIyMgaZ+yioqLMuv/27dtj165d2LRpU40PFVapVAgLCzNcAgYAtra2iIqKwpw5c7Bz506cPHkSERERUKnuRRofHx9oNBp88sknOH/+PL799lu88847krHbtGkDQRDw/fff48aNG8jNzUXLli3h7OyMVatWISUlBTt37sTMmTOr1JWfn4/Dhw9j2LBhD34wTKzOwW7r1q1IT0/HvHnzcPDgQfTo0QOdO3fGe++9Z9apWyIiIjKNgIAAxMbGQqVSQa1WS/7Gxsaa9caJcoGBgdi5cyc2bNiAWbNmVdtv8uTJiI+Pl9zosXjxYgwcOBDh4eEICwvDQw89hJ49exrWu7q6Ys2aNfjmm2/QqVMnLFiwAO+//75k3FatWuGtt97CK6+8And3d0ybNg0qlQrx8fE4fPgwunTpghkzZmDx4sVVatq6dSt8fHwwcOBAExwJ0xLE+53gvo/Lly9jw4YNiIuLQ3JyMkpLS01Vm1lkZ2fDwcEBWVlZsLe3l7scIiKiOissLMSFCxfg5+cnubGgrlJSUhAbG4vU1FT4+voiKiqqQUJdXYiiiL59+2LGjBkYP3683OUAKLuR9MUXX8SECRNMNmZN/6Z1yS71+kmxciUlJTh06BAOHDiA1NRUuLu7P8hwRERE1ID8/f0RExMjdxk1EgQBq1atMvlPitXXzZs38fjjjzeakFlZnU/FAsCuXbswZcoUuLu7IyIiAvb29vj+++8b7Q/iEhERUdPVvXt3/Otf/5K7DABld+rOnTu32ptP5FbnGbtWrVrh9u3bePTRR7Fq1SqEh4dDq9WaozYiIiIiqoM6B7s333wTTzzxhOQpzUREREQkvzoHuylTppijDiIiIiJ6QPW6xs5UfvvtN4SHh8PLywuCIGDLli019k9ISIAgCFVeGRkZDVMwERERUSMma7DLy8tDt27dsHz58jptl5SUhPT0dMPLzc3NTBUSERERNR0P9LiTBzVixAiMGDGiztu5ubnxGj8iIiKiSmSdsauv7t27w9PTE0OHDsXevXtr7FtUVITs7GzJi4iIiEiJmlSw8/T0xMqVK7Fp0yZs2rQJ3t7eCA0NxZEjR6rdJiYmBg4ODoaXt7d3A1ZMRERE5UJDQ2v8bdjqzJs3D88884zpC6qFuta8Zs0ayVnFlStXIjw83PSFVUPWU7F1FRgYiMDAQMNy//79ce7cOXz44Yf473//a3Sb6OhoyQ/4ZmdnM9wRERE1ERkZGVi6dGmj+eWJuoqMjMQ777yDPXv2NMhvyzapGTtj+vTpg5SUlGrXa7Va2NvbS15ERETUNHz++efo378/2rRpI3cp9aLRaDBhwgR8/PHHDbK/Jh/sEhMT4enpKXcZREREshD1IvJv62R9iXqxXrX/8MMPcHBwwLp166rtEx8fX+VUZmhoKF544QVMnz4dLVu2hLu7Oz777DPk5eXh6aefhp2dHfz9/fHjjz9Kttu9ezf69OkDrVYLT09PvPLKKygtLTWsz8vLw6RJk2BrawtPT08sWbKkSj1FRUWYPXs2WrVqhRYtWqBv375ISEio8XOGh4fj22+/RUFBQS2OyoOR9VRsbm6uZLbtwoULSExMhJOTE3x8fBAdHY0rV67giy++AAB89NFH8PPzQ+fOnVFYWIjPP/8cO3fuxC+//CLXRyAiIpJVwR09lj98VdYapv7mBRsndZ22Wb9+PZ599lmsX78eo0ePNtrn9u3bOH36NHr16lVl3dq1azF37lz8+eef+Oqrr/Dcc89h8+bNeOyxx/Dqq6/iww8/xL/+9S+kpaXBxsYGV65cwciRIxEREYEvvvgCf/31F6ZMmQIrKyu8+eabAIA5c+Zg9+7d2Lp1K9zc3PDqq6/iyJEj6N69u2G/06ZNw+nTpxEfHw8vLy9s3rwZjz76KE6cOIGAgACjn6NXr14oLS3FgQMHEBoaWqfjVFeyztgdOnQIwcHBCA4OBgDMnDkTwcHBeOONNwAA6enpSEtLM/QvLi7GrFmz0LVrVwwaNAjHjh3Dr7/+iiFDhshSPxEREdXd8uXL8fzzz+O7776rNtQBQFpaGkRRhJeXV5V13bp1w+uvv46AgABER0fDysoKLi4umDJlCgICAvDGG2/g1q1bOH78OADgP//5D7y9vbFs2TJ06NABY8eOxVtvvYUlS5ZAr9cjNzcXsbGxeP/99zFkyBB07doVa9eulczopaWlYfXq1fjmm28wcOBAtGvXDrNnz8ZDDz2E1atXV/s5bGxs4ODggIsXLz7AUasdWWfsQkNDIYrVT9+uWbNGsjx37lzMnTvXzFURERGRuWzcuBHXr1/H3r170bt37xr7lp+6tLKyqrIuKCjI8F6tVsPZ2Rldu3Y1tLm7uwMArl+/DgA4c+YMQkJCIAiCoc+AAQOQm5uLy5cvIzMzE8XFxejbt69hvZOTk+SmzRMnTkCn06F9+/aSWoqKiuDs7FzjZ7G2tkZ+fn6NfUyhSd0VS0RERE1bcHAwjhw5gri4OPTq1UsStCpzcXEBAGRmZsLV1VWyztLSUrIsCIKkrXxcvV5vqtKRm5sLtVqNw4cPQ62Wnnq2tbWtcdvbt29X+QzmwGBHRETUhFk7qjD1t6qnKhu6htpq164dlixZgtDQUKjVaixbtqzGvvb29jh9+nSVWbK66tixIzZt2gRRFA2hb+/evbCzs0Pr1q3h5OQES0tLHDhwAD4+PgDKAuXZs2cxaNAgAGWhVKfT4fr163V6dMm5c+dQWFhouPTMnBjsiIiImjBBJdT5xgW5tW/fHrt27UJoaCgsLCzw0UcfGe2nUqkQFhaG33//HWPHjn2gfT7//PP46KOP8MILL2DatGlISkrC/PnzMXPmTKhUKtja2iIqKgpz5syBs7Mz3Nzc8Nprr0Gluhda27dvj4kTJ2LSpElYsmQJgoODcePGDezYsQNBQUEYNWqU0X3v2bMHbdu2Rbt27R7oM9RGk3/cCRERETU9gYGB2LlzJzZs2IBZs2ZV22/y5MmIj49/4FOqrVq1wrZt2/Dnn3+iW7duePbZZxEVFYXXX3/d0Gfx4sUYOHAgwsPDERYWhoceegg9e/aUjLN69WpMmjQJs2bNQmBgIMaOHYuDBw8aZvmM2bBhA6ZMmfJA9deWINZ094ICZWdnw8HBAVlZWXxYMRERNUmFhYW4cOEC/Pz8jN5YoCSiKKJv376YMWMGxo8fL3c5dXbq1Ck88sgjOHv2LBwcHKrtV9O/aV2yC2fsiIiIqNESBAGrVq2SPHakKUlPT8cXX3xRY6gzJV5jR0RERI1a9+7dJQ8JbkrCwsIadH+csSMiIiJSCAY7IiIiIoVgsCMiIiJSCAY7IiKiJsqUv6pA8jLVvyVvniAiImpiNBoNVCoVrl69CldXV2g0mhp/mosaL1EUUVxcjBs3bkClUkGj0TzQeAx2RERETYxKpYKfnx/S09Nx9epVucshE7CxsYGPj4/kly7qg8GOiIioCdJoNPDx8UFpaSl0Op3c5dADUKvVsLCwMMmsK4MdERFREyUIAiwtLWFpaSl3KdRI8OYJIiIiIoVgsCMiIiJSCAY7IiIiIoVgsCMiIiJSCAY7IiIiIoVgsCMiIiJSCAY7IiIiIoVgsCMiIiJSCAY7IiIiIoVgsCMiIiJSCAY7IiIiIoVgsCMiIiJSCAY7IiIiIoVgsCMiIiJSCAY7IiIiIoVgsCMiIiJSCAY7IiIiIoVgsCMiIiJSCAY7IiIiIoVgsCMiIiJSCAY7IiIiIoVgsCMiIiJSCAY7IiIiIoVgsCMiIiJSCAY7IiIiIoVgsCMiIiJSCAY7IiIiIoWQNdj99ttvCA8Ph5eXFwRBwJYtW+67TUJCAnr06AGtVgt/f3+sWbPG7HUSERERNQWyBru8vDx069YNy5cvr1X/CxcuYNSoURg8eDASExMxffp0TJ48GT///LOZKyUiIiJq/Czk3PmIESMwYsSIWvdfuXIl/Pz8sGTJEgBAx44d8fvvv+PDDz/E8OHDzVUmERERUZPQpK6x279/P8LCwiRtw4cPx/79+2WqiIiIiKjxkHXGrq4yMjLg7u4uaXN3d0d2djYKCgpgbW1dZZuioiIUFRUZlrOzs81eJxEREZEcmtSMXX3ExMTAwcHB8PL29pa7JCIiIiKzaFLBzsPDA9euXZO0Xbt2Dfb29kZn6wAgOjoaWVlZhtelS5caolQiIiKiBtekTsWGhIRg27Ztkrbt27cjJCSk2m20Wi20Wq25SyMiIiKSnawzdrm5uUhMTERiYiKAsseZJCYmIi0tDUDZbNukSZMM/Z999lmcP38ec+fOxV9//YX//Oc/+PrrrzFjxgw5yiciIiJqVGQNdocOHUJwcDCCg4MBADNnzkRwcDDeeOMNAEB6eroh5AGAn58ffvjhB2zfvh3dunXDkiVL8Pnnn/NRJ0REREQABFEURbmLaEjZ2dlwcHBAVlYW7O3t5S6HiIiIqEZ1yS5N6uYJIiIiIqoegx0RERGRQjDYERERESkEgx0RERGRQjDYERERESkEgx0RERGRQjDYERERESkEgx0RERGRQjDYERERESkEgx0RERGRQjDYERERESkEgx0RERGRQjDYERERESkEgx0RERGRQjDYERERESkEgx0RERGRQjDYERERESkEgx0RERGRQjDYERERESkEgx0RERGRQjDYERERESkEgx0RERGRQjDYERERESkEgx0RERGRQljIXYBSJScnIy4uDqmpqfD19UVkZCQCAgLkLouIiIgUjMHODJb/exfWbVyDYznfolCXDUEQsGjRIsTGxiIiIkLu8oiIiEiheCrWxE4nJuPOnlZ4zPP/8Kr/H/i7xyI4W7SFXq/H008/jV9//VXuEomIiEihGOxM7MMXN0OjsgYAaFQ26N3ySbzY9nu4actOww4bNgxr1qyRsUIiIiJSKgY7Ezp7NhktrnSt0q5RWSPcfR4AQBRFREVFISUlpaHLIyIiIoVjsDOh1XFx+On6IpzI3lZlXaBdKNrbDgIACIKA2NjYhi6PiIiIFI7BzoRSL6bibN5u/PfSs1hwdiB0Yqlk/Wj3eRAgQBRFpKamylMkERERKRaDnQn5+vpCpSo7pLdLLmLT1Zcl6z2s2sO/xUMQRRH29vZylEhEREQKxmBnQpGRkRBF0bB8+M4mZBQmSfr0c5oIURTx+eef8yYKIiIiMikGOxMKCAhAbGwsVCoV1Go1IIjYn/lfSZ9OdsNgZ+EGvV7PmyiIiIjIpBjsTCwiIgJJSUmYM2cOxo0bh1LvFBTr8w3r1YIFejs+CYA3URAREZFpMdiZgb+/P2JiYrBhwwa06+iDY9nfSdb3aTmeN1EQERGRyTHYmZmvry/+vLNB0uak8UaA7cOG9URERESmwGBnZpGRkbhUkIgrBScl7f1aToRer4ejo6M8hREREZHiMNiZWUBAAN59910cyFwvae9oFwZ7C3e8+uqrvIGCiIiITILBrgFkZWXheO53KNLlGdrUggV6txzHGyiIiIjIZBjsGkBqaioKdTlIzP5W0t7HcTwgCryBgoiIiEyCwa4B+Pr6QhAEHLi9TtLeUtMK7VsM4q9QEBERkUkw2DWA8l+kuFx4HJcLTkjW9XWcwF+hICIiIpNoFMFu+fLl8PX1hZWVFfr27Ys///yz2r5r1qyBIAiSl5WVVQNWW3flv0ghCAIOZEpn7TrYPQJ7tQd/hYKIiIgemOzB7quvvsLMmTMxf/58HDlyBN26dcPw4cNx/fr1arext7dHenq64XXx4sUGrLh+IiIi8MwzzyAx+1sU6XIN7SpBjRCnp3gTBRERET0w2YPdBx98gClTpuDpp59Gp06dsHLlStjY2CAuLq7abQRBgIeHh+Hl7u7egBXXX1ZWFkrEfBy6s1HS3rflBKj0Gpw4caKaLYmIiIjuT9ZgV1xcjMOHDyMsLMzQplKpEBYWhv3791e7XW5uLtq0aQNvb2+MGTMGp06dqrZvUVERsrOzJS+5lN9Esff2akm7jdoBPR3/jm3btvFaOyIiIqo3WYPdzZs3odPpqsy4ubu7IyMjw+g2gYGBiIuLw9atW/Hll19Cr9ejf//+uHz5stH+MTExcHBwMLy8vb1N/jlqq/wmipvFF3AmZ4dk3UDnKEAUeK0dERER1Zvsp2LrKiQkBJMmTUL37t0xaNAg/O9//4Orqys+/fRTo/2jo6ORlZVleF26dKmBK76n/CYKAPj9lvRUs6u2Hbraj+S1dkRERFRvsgY7FxcXqNVqXLt2TdJ+7do1eHh41GoMS0tLBAcHVzvLpdVqYW9vL3nJKSIiAqNGjUJK/u9Vfj/2EZep0Ol0vNaOiIiI6kXWYKfRaNCzZ0/s2HHvtKRer8eOHTsQEhJSqzHKg5Cnp6e5yjS5rl27QqVSYefNZZJ2L+vO6GgbxmvtiIiIqF5kPxU7c+ZMfPbZZ1i7di3OnDmD5557Dnl5eXj66acBAJMmTUJ0dLSh/9tvv41ffvkF58+fx5EjR/DPf/4TFy9exOTJk+X6CHVWfq3dyewfca0oWbJuuPtsQCzrw2vtiIiIqC5kD3bjxo3D+++/jzfeeAPdu3dHYmIifvrpJ8MNFWlpaUhPTzf0z8zMxJQpU9CxY0eMHDkS2dnZ2LdvHzp16iTXR6iz8mvtRIjYeaPSrJ1VJ3R3GAtRFPHSSy/JVCERERE1RYIoiqLcRTSk7OxsODg4ICsrS/br7UaPHo1tP/yI6e1+gqdVB0P77eI0LE55BDqxGMnJyfD395exSiIiIpJTXbKL7DN2zVnXrl0BQcRP1xZK2p00PnjYeQoAYPHixXKURkRERE0Qg52Myq+1O5O7A+fzDkjWDXF9EY6WrbBq1SreSEFERES1wmAno4CAAIwcORIA8F3GW9CLOsM6jcoaYzzeAgA8/fTT+PXXX2WpkYiIiJoOBjuZffTRR1CpVLhSeBL7b/9Xsq6z/TB0dxgDABg2bBhn7oiIiKhGDHYyq/hrFL9cX4Kc0huS9WM93oG9hTtEUeQjUIiIiKhGDHaNQEREBP7973+jUMzG5quvS9bZWDjiyVYfQICKj0AhIiKiGjHYNRKzZs2CIAg4mfMjErO2Sta1tx2IIa4vAAC2bdvG6+2IiIjIKAa7RqLiKdkt6fNwpyRdsj7MdQY62A4GwOvtiIiIyDgGu0YkIiIC27dvR77uDtZfngadWGpYpxJUmNB6Gdy17SGKIu+UJSIioioY7BqZsLAwjBw5Eqn5B/HTtUWSdVZqO0T6rIGDhQcAztwRERGRFINdI1T+CJTdt1bi6J0tknUtNa0x2XcdWqideKcsERERSTDYNUIVr7f75uocXMw/Ilnvrg3As77fwMHCA6IoYvjw4UhOTpajVCIiImpEGOwaqfLr7XQoxpq0SFwrkgY3d6sAPOe3CS4aX5w/fx4dOnTgaVkiIqJmjsGuEQsLC0NcXBzydLfxeeo/cbv4kmS9k8Ybz/luhKe2I/R6PW+oICIiauYY7Bq58pm7rNJ0rLjw/3C9SHo9nZ2lG573+x+62YcDAIYOHYpRo0bx1CwREVEzxGDXBJTfKVsW7p7AlYITkvVadQtM9F6Ov3m8CbVgiW3btqF9+/ZYsGCBTBUTERGRHBjsmojyO2XzdLfwaeo/cD7vjyp9HnKOxL99v4KLxhcAEB0djcGDB3P2joiIqJlgsGsiyu+UFQQBhfocfH7xX/gzc0OVfr42vTCj3S942HkKBKiQkJCA9u3b8/QsERFRM8Bg14RERETg7NmzGDlyJErFImy8+jK+uTIHJfpCST9LlRVGe8zDVL/NaGXVBQB4epaIiKgZEERRFOUuoiFlZ2fDwcEBWVlZsLe3l7ucevv1118xbNgwiKKIVlZd8E/vFXDWtKnSTy/qcSTrf/j52iJklWYAAEJDQ7Fq1SoEBAQ0dNlERERUR3XJLpyxa6LKH4UiCAKuFJ7Eh+eG4/dbq6EX9ZJ+KkGFXo7/D3MCduNRt5fRQu1kOD3r5eWFf//73zxFS0REpBCcsWviUlJSMHnyZOzevRsA0Ma6F55otQhuWn+j/Yv1Bfjj9pf47dYqZJdeM7SPHDkSH330EWfxiIiIGpm6ZBcGO4VYuHAhXnnlFQCAhaDFQ85ReMRlKqzUdkb7l+qLcSL7B+y9vRZpBfd+sqxt27bo2LEjunbtisjISAY9IiIimTHY1UCpwQ4om7176aWXsG3bNgBAC7UzhrnNRN+WE6AS1NVud7ngBA5mxuNY9vfI12VK1gUFBWHkyJEMeURERDJhsKuBkoNducqnZ101bRHq8jx6OD4OtWBR7XY6sQRJOQk4nPU/nMn5FaVikWS9p6cnwsPDMXv2bIY8IiKiBsJgV4PmEOzKVTw9CwAtLb0R6vIsejk+AUuVVY3bFuiy8VfOTpzO2Y6k3N0o1GdL1vOULRERUcNgsKtBcwp2QNXTswBgo3ZEb8dxCHH6F5w0PvcdQyeW4HzenziT8yvO5u7G9eKUKn14ypaIiMg8GOxq0NyCXTljAU+ACoG2oejh+Dg62w277yxeueySa0jJ24uUvH04l7cPmSWXJeu9vb2h0Wig0WgwcOBAnrolIiJ6AAx2NWiuwa5cSkoK3n//fXz77bdIT083tGtVtuhqPwLBDo+jXYsQqITaP+LwTkk60vKPIq3gCNIKEnGl4DhKROmvYTDsERER1Q+DXQ2ae7CryNgsHgDYW7ijk91QdLILQ7sW/Ws9k1dOJ5YivfAM0gqOIr3wNK4WnkZGYRJKxAJJv/KwBwB2dnZo1aoVr9kjIiKqhMGuBgx2VaWkpCA2Nhbbtm3D8ePHJes0KhsEtBiITnZDEWA7EI6WnvXah17U41ZxKtILzyC96AwyCv/CjaLzuFVyETqxpEp/hj4iIqIyDHY1YLCrWXnIO3HiBM6cOYPz589L1rto/ODfYgDateiPdi1CYGvh/ED704mlyCy+hBvF53Gj6Pzdv+dws/iC5JcxKnJ1dUWrVq3g6OiIzMxM5Obm8hQvEREpFoNdDRjs6qa6a/IAQIAAF01b+NgEo411D/hYB8PDqkOND0OuixJ9IW6XXEJm8WXD38ySy8gsuYTbxZeRp7tldLu2bdvCx8fHEPqAslk/R0dHFBYWwtnZmbN/RETUZDDY1YDBrv5qOmVbTqOyQWurrvCx6QEvq87wtOoIV01bk4W9ikr0hcgqyUB26TVkl2bce19yDVl3l3NKr1d50HJFgYGBsLKyqhIAK4dCngomIiK5MNjVgMHONO53yrYiC0ELD20gPKw6wMuqEzytOsJN0w52lm4NUmteaSZyS28iV3cTeaW3kau7idzSW2VtpbeQq7uFvLvvC/RZ9x2v8vV/xoIgTxMTEZGpMNjVgMHOPCoGvStXruDKlSu4ceNGjdtYqezgovGDq7YdXLVt4aop++ui8YNGZd1AlUuV6ouRr8tEvu4OCnRZyNfdufv+DvJ1WXf/3qmwvqytUJ8NEff/j1JNp4lr28bTyUREzQuDXQ0Y7BpOfcIeUHbtnr2FB1pqWsPJ0hstNa3R0rI1Wlp6w0njDUdLT6gFywb4BLWnF/Uo0uegUJeLQn0OivS5KNTllL2v0FagyzH0K9LnolCfXeF9Dor1+XXet7GbSYD7h0MrKyvONBIRNQEMdjVgsJNX5bCXk5MDACguLsalS5dqNYYKathbesDBwqPCX3c4WLjD3tID9hbucLD0gEZlY86PYjbF+nwU6fNQrC9AsT7/7qsAxfq8svdixfbKr7v9xPL3BSgRC1GqL0SJWASdWFyvmoydfq5NOLxfW13H4GwlETVHDHY1YLBrvEwR+iqyUtnD3tId9hZuaKF2gq2FC2wtnGGrdkELC+cK751grW4e3wW9qEepWIgSfZEk8JXoC8vaK76/Xx99IUrFYsNLJ3lfglJ9MXRiEUrFEsM6nVhcq1PWtRUYGIiWLVs2eMA0x7i8QYeIqsNgVwMGu6ap/LErv/32G4qLiw3/5Xjnzp1an+KtiYWgRQu1E+wsXGGjdoSN2hHWagdY331/r62svXzZQqUx0SdsPu6FvpK7QbDobvCTBsBSfYWQKBYZ3t97lUIvlkCH0nvvxVLoxBLoxbI2HUqMr0PFfuXrSqFH5THubo/SBj1GFU+vyzEzquQxGKCpKWKwqwGDnTJVnO27desWrKyscOfOHcOsn52dHQoKCpCUlGTS/VoK1oaQp1XbwUplCyu1HaxUdtCqbGGltoVWZXe3rfy9LaxUd5fVdrLdKEJ1ozMWHMUS6KGDXiyFXtTde29o00OPSutE3d02fYW+lddXfq+7N07F9+XrKo4jlkIPfaV96arUJIp6iNBDL+rK/kIPsfy9qIceOiN9dBBFEeLdfYkQ7/7VmXQmtqHU9Q73+7U1huDKMRp+jIa4RITBrgYMds1bbQJg+Uzgg54Kri0VLKBVt4CVyh4alTW0qhbQqGzKXoL13fctoFFZ32uv+Kq2DwMjNazy4CmiUiAU9WXhT9TfDZ33+oh3Q6ReLF/WlYXMiv2M9qkULEXREEYrhtSy/mKF8KoHIN79P/298AqxwrrydrFC/XoAkGxTtk40vIcoHVdfYf+Vx9VXGMdQj6GWe/0gaRcl+y5bJ1ba5u52FeqqWGPFz2+8BrHS8am4LEr2CUMbAYBKpQIAxMbGIiIiwqRjN7lgt3z5cixevBgZGRno1q0bPvnkE/Tp06fa/t988w3mzZuH1NRUBAQEYOHChRg5cmSt9sVgR/VR3fV/xoKgqU8T15cAFSwELSxVVrAUrGCp0sJCsLq7rIVFeXv5+/L2Kn3KxrAQKr1XWcFC0EAtWMJC0N57r9I0uruWici89JJQXH0YlC5XCLyGMFp5uwrbSIKn/l4/EZXGrrRNNWFU2q/8fwCgStg2tk158C3bX9k2lwuOY/etlVCpVEhKSoK/v7/Jjm9dsouFyfZaT1999RVmzpyJlStXom/fvvjoo48wfPhwJCUlwc2t6gNs9+3bh/HjxyMmJgajR4/G+vXrMXbsWBw5cgRdunSR4RNQc+Dv74+YmJh6bVufWcKa2tLS0mp8IHQ5EXqUiAUo0RXUq+4HIUCAWtDcDXsaWAiWUAtaWKg0FcKgBhaCtsL7u31VFbep1EelgRqWUAkWUAsWUAvl7y2hhgVUgiUsKrYJFmXvYVmp/933sOB1kkQmoBJUd9+pAUHWUmRjIWiw+xYgCAJiY2Pr/d8ZD0r2Gbu+ffuid+/eWLZsGQBAr9fD29sbL7zwAl555ZUq/ceNG4e8vDx8//33hrZ+/fqhe/fuWLly5X33xxk7UoKabiapTTgsv16kMc40ykEFdaUwWBYUJeFQsLz3wr02laCGCmoIghrqu+MIgsrQRxBUUMECakENAWqoBDXUgoXhvUqwgAqqu3/vrrs7pmSdoU1t6FvWZgGVoDLSVsP2KK9LBUFQQ4Cqwn8xE1F9nMz+GV9cmgKVSoUnn3wSGzZsMNnYTWbGrri4GIcPH0Z0dLShTaVSISwsDPv37ze6zf79+zFz5kxJ2/Dhw7FlyxZzlkrUqPj7+9fqf8g8iPudfr5fODRFwDT3zS/lym88qOl3hZuDsoCquhv07ga+Sm1lYVB1N5iqqumjhiAIhvAqQDCEXwFChT6V9yUNmkb73N23sbbyeoTyOqG6W4cKAgTDWILhM6DSsmDkvWCkT8V+lccWjIxVYTtJDUKl95W3qdReUz0VjhPJo/w6TEEQ4OvrK1sdsga7mzdvQqfTwd3dXdLu7u6Ov/76y+g2GRkZRvtnZGQY7V9UVISionv/zzo7O/sBqyZqHh7k9LO5GDut3dAB0xzjmvsGndrSQweIurIF2a++pgdRNQgaC5XlQVJtCIiGbYWy2Fu+LSBAZWi7+1dQSbeBAAhlEb28n1B5mwpjqyBU6Fdhm7vjVAzRuDuWUMM20u2M13Cv5vtvY6zme8dJkBxbQMCNohQAgCiKiIqKaoh/ZqNkv8bO3GJiYvDWW2/JXQYRmUBjDJumUt3p9cYSXJUwRmMJ0A3h3p26kkYyI5VKBZVKhdjYWJPeOFFXsgY7FxcXqNVqXLt2TdJ+7do1eHh4GN3Gw8OjTv2jo6Mlp26zs7Ph7e39gJUTEZlWQ5xep/rf4d4UgivHkGeMis+xi4qKkjXUATIHO41Gg549e2LHjh0YO3YsgLKbJ3bs2IFp06YZ3SYkJAQ7duzA9OnTDW3bt29HSEiI0f5arRZardbUpRMRUROk5FlfIqARnIqdOXMmnnrqKfTq1Qt9+vTBRx99hLy8PDz99NMAgEmTJqFVq1aG/yC+9NJLGDRoEJYsWYJRo0YhPj4ehw4dwqpVq+T8GERERESykz3YjRs3Djdu3MAbb7yBjIwMdO/eHT/99JPhBom0tDTD05wBoH///li/fj1ef/11vPrqqwgICMCWLVv4DDsiIiJq9mR/jl1D43PsiIiIqCmpS3bhEymJiIiIFILBjoiIiEghGOyIiIiIFILBjoiIiEghGOyIiIiIFILBjoiIiEghGOyIiIiIFILBjoiIiEghGOyIiIiIFEL2nxRraOU/tJGdnS1zJURERET3V55ZavNjYc0u2OXk5AAAvL29Za6EiIiIqPZycnLg4OBQY59m91uxer0eV69ehZ2dHQRBuG//7OxseHt749KlS/xt2bt4TIzjcamKx8Q4HhfjeFyq4jExrrkdF1EUkZOTAy8vL6hUNV9F1+xm7FQqFVq3bl3n7ezt7ZvFl6cueEyM43GpisfEOB4X43hcquIxMa45HZf7zdSV480TRERERArBYEdERESkEAx296HVajF//nxotVq5S2k0eEyM43GpisfEOB4X43hcquIxMY7HpXrN7uYJIiIiIqXijB0RERGRQjDYERERESkEgx0RERGRQjDY1WD58uXw9fWFlZUV+vbtiz///FPukmT15ptvQhAEyatDhw5yl9XgfvvtN4SHh8PLywuCIGDLli2S9aIo4o033oCnpyesra0RFhaG5ORkeYptIPc7JhEREVW+O48++qg8xTaQmJgY9O7dG3Z2dnBzc8PYsWORlJQk6VNYWIipU6fC2dkZtra2+Pvf/45r167JVHHDqM1xCQ0NrfJ9efbZZ2WquGGsWLECQUFBhueyhYSE4McffzSsb47flfsdk+b4PakNBrtqfPXVV5g5cybmz5+PI0eOoFu3bhg+fDiuX78ud2my6ty5M9LT0w2v33//Xe6SGlxeXh66deuG5cuXG12/aNEifPzxx1i5ciUOHDiAFi1aYPjw4SgsLGzgShvO/Y4JADz66KOS786GDRsasMKGt3v3bkydOhV//PEHtm/fjpKSEgwbNgx5eXmGPjNmzMB3332Hb775Brt378bVq1fx+OOPy1i1+dXmuADAlClTJN+XRYsWyVRxw2jdujUWLFiAw4cP49ChQ3jkkUcwZswYnDp1CkDz/K7c75gAze97UisiGdWnTx9x6tSphmWdTid6eXmJMTExMlYlr/nz54vdunWTu4xGBYC4efNmw7Jerxc9PDzExYsXG9ru3LkjarVaccOGDTJU2PAqHxNRFMWnnnpKHDNmjCz1NBbXr18XAYi7d+8WRbHse2FpaSl+8803hj5nzpwRAYj79++Xq8wGV/m4iKIoDho0SHzppZfkK6qRaNmypfj555/zu1JB+TERRX5PqsMZOyOKi4tx+PBhhIWFGdpUKhXCwsKwf/9+GSuTX3JyMry8vNC2bVtMnDgRaWlpcpfUqFy4cAEZGRmS746DgwP69u3b7L87CQkJcHNzQ2BgIJ577jncunVL7pIaVFZWFgDAyckJAHD48GGUlJRIvisdOnSAj49Ps/quVD4u5datWwcXFxd06dIF0dHRyM/Pl6M8Weh0OsTHxyMvLw8hISH8rqDqMSnXnL8n1Wl2vxVbGzdv3oROp4O7u7uk3d3dHX/99ZdMVcmvb9++WLNmDQIDA5Geno633noLAwcOxMmTJ2FnZyd3eY1CRkYGABj97pSva44effRRPP744/Dz88O5c+fw6quvYsSIEdi/fz/UarXc5ZmdXq/H9OnTMWDAAHTp0gVA2XdFo9HA0dFR0rc5fVeMHRcAmDBhAtq0aQMvLy8cP34cL7/8MpKSkvC///1PxmrN78SJEwgJCUFhYSFsbW2xefNmdOrUCYmJic32u1LdMQGa7/fkfhjsqNZGjBhheB8UFIS+ffuiTZs2+PrrrxEVFSVjZdTY/eMf/zC879q1K4KCgtCuXTskJCRgyJAhMlbWMKZOnYqTJ082y2tSa1LdcXnmmWcM77t27QpPT08MGTIE586dQ7t27Rq6zAYTGBiIxMREZGVlYePGjXjqqaewe/duucuSVXXHpFOnTs32e3I/PBVrhIuLC9RqdZU7jq5duwYPDw+Zqmp8HB0d0b59e6SkpMhdSqNR/v3gd6dmbdu2hYuLS7P47kybNg3ff/89du3ahdatWxvaPTw8UFxcjDt37kj6N5fvSnXHxZi+ffsCgOK/LxqNBv7+/ujZsydiYmLQrVs3LF26tFl/V6o7JsY0l+/J/TDYGaHRaNCzZ0/s2LHD0KbX67Fjxw7Juf3mLjc3F+fOnYOnp6fcpTQafn5+8PDwkHx3srOzceDAAX53Krh8+TJu3bql6O+OKIqYNm0aNm/ejJ07d8LPz0+yvmfPnrC0tJR8V5KSkpCWlqbo78r9josxiYmJAKDo74sxer0eRUVFzfa7Ykz5MTGmuX5PqpD77o3GKj4+XtRqteKaNWvE06dPi88884zo6OgoZmRkyF2abGbNmiUmJCSIFy5cEPfu3SuGhYWJLi4u4vXr1+UurUHl5OSIR48eFY8ePSoCED/44APx6NGj4sWLF0VRFMUFCxaIjo6O4tatW8Xjx4+LY8aMEf38/MSCggKZKzefmo5JTk6OOHv2bHH//v3ihQsXxF9//VXs0aOHGBAQIBYWFspdutk899xzooODg5iQkCCmp6cbXvn5+YY+zz77rOjj4yPu3LlTPHTokBgSEiKGhITIWLX53e+4pKSkiG+//bZ46NAh8cKFC+LWrVvFtm3big8//LDMlZvXK6+8Iu7evVu8cOGCePz4cfGVV14RBUEQf/nlF1EUm+d3paZj0ly/J7XBYFeDTz75RPTx8RE1Go3Yp08f8Y8//pC7JFmNGzdO9PT0FDUajdiqVStx3LhxYkpKitxlNbhdu3aJAKq8nnrqKVEUyx55Mm/ePNHd3V3UarXikCFDxKSkJHmLNrOajkl+fr44bNgw0dXVVbS0tBTbtGkjTpkyRfH/I8nY8QAgrl692tCnoKBAfP7558WWLVuKNjY24mOPPSamp6fLV3QDuN9xSUtLEx9++GHRyclJ1Gq1or+/vzhnzhwxKytL3sLNLDIyUmzTpo2o0WhEV1dXcciQIYZQJ4rN87tS0zFprt+T2hBEURQbbn6QiIiIiMyF19gRERERKQSDHREREZFCMNgRERERKQSDHREREZFCMNgRERERKQSDHREREZFCMNgRERERKQSDHREREZFCMNgRERERKQSDHREREZFCMNgRUbMVGhqK6dOny12GQX3ruXXrFtzc3JCammrymir7xz/+gSVLlph9P0RUPwx2RGRWK1euhJ2dHUpLSw1tubm5sLS0RGhoqKRvQkICBEHAuXPnGrjKhmXqQPnuu+9izJgx8PX1NdmY1Xn99dfx7rvvIisry+z7IqK6Y7AjIrMaPHgwcnNzcejQIUPbnj174OHhgQMHDqCwsNDQvmvXLvj4+KBdu3ZylNok5efnIzY2FlFRUQ2yvy5duqBdu3b48ssvG2R/RFQ3DHZEZFaBgYHw9PREQkKCoS0hIQFjxoyBn58f/vjjD0n74MGDAQA//fQTHnroITg6OsLZ2RmjR4+WzOStWrUKXl5e0Ov1kv2NGTMGkZGRAAC9Xo+YmBj4+fnB2toa3bp1w8aNG6uttTb9Q0ND8eKLL2Lu3LlwcnKCh4cH3nzzTUmfnJwcTJw4ES1atICnpyc+/PBDwyxdREQEdu/ejaVLl0IQBAiCIDmFqtfraxy7sm3btkGr1aJfv36S9t9//x2WlpaS4JyamgpBEHDx4kXD+02bNuHhhx+GtbU1evfujbS0NOzZswf9+vWDjY0NhgwZgjt37kjGDg8PR3x8fI11EZE8GOyIyOwGDx6MXbt2GZZ37dqF0NBQDBo0yNBeUFCAAwcOGIJdXl4eZs6ciUOHDmHHjh1QqVR47LHHDEHuiSeewK1btyTj3r59Gz/99BMmTpwIAIiJicEXX3yBlStX4tSpU5gxYwb++c9/Yvfu3UbrrG3/tWvXokWLFjhw4AAWLVqEt99+G9u3bzesnzlzJvbu3Ytvv/0W27dvx549e3DkyBEAwNKlSxESEoIpU6YgPT0d6enp8Pb2rvXYle3Zswc9e/as0p6YmIiOHTvCysrK0Hb06FG0bNkSbdq0wbFjxwAAK1aswHvvvYd9+/bh2rVr+Oc//4kFCxZg2bJl2LVrF44dO4bVq1dLxu7Tpw/+/PNPFBUVVVsXEcnDQu4CiEj5Bg8ejOnTp6O0tBQFBQU4evQoBg0ahJKSEqxcuRIAsH//fhQVFRmC3d///nfJGHFxcXB1dcXp06fRpUsXtGzZEiNGjMD69esxZMgQAMDGjRvh4uKCwYMHo6ioCO+99x5+/fVXhISEAADatm2L33//HZ9++ikGDRokGb8u/YOCgjB//nwAQEBAAJYtW4YdO3Zg6NChyMnJwdq1ayV1rV69Gl5eXgAABwcHaDQa2NjYwMPDo8qxqmlsYy5evGgYu6Jjx44hODhY0paYmIhu3boZ3js5OeGrr76Cs7MzAGDQoEH4/fffcerUKdjY2AAAevfujYyMDMk4Xl5eKC4uRkZGBtq0aWO0LiKSB2fsiMjsQkNDkZeXh4MHD2LPnj1o3749XF1dMWjQIMN1dgkJCWjbti18fHwAAMnJyRg/fjzatm0Le3t7w40BaWlphnEnTpyITZs2GWaO1q1bh3/84x9QqVRISUlBfn4+hg4dCltbW8Priy++MHpzRl36BwUFSZY9PT1x/fp1AMD58+dRUlKCPn36GNY7ODggMDCwVseqprGNKSgokMzKlUtMTET37t0lbUePHjW0HTt2DI899pgh1AFlx3bcuHGGUFfe5ufnJxnH2toaQNn1fUTUuHDGjojMzt/fH61bt8auXbuQmZlpmP3y8vKCt7c39u3bh127duGRRx4xbBMeHo42bdrgs88+M1xL16VLFxQXF0v6iKKIH374Ab1798aePXvw4YcfAii78xYAfvjhB7Rq1UpSj1arrVJjXfpbWlpKlgVBqHKtX33VdWwXFxdkZmZK2nQ6HU6ePFllxu7IkSOGmdDExERER0dL1h87dgwzZswwLBcWFiIpKckwy1fu9u3bAABXV9dafioiaigMdkTUIAYPHoyEhARkZmZizpw5hvaHH34YP/74I/78808899xzAMqey5aUlITPPvsMAwcOBFB2M0BlVlZWePzxx7Fu3TqkpKQgMDAQPXr0AAB06tQJWq0WaWlpVU67GlPX/tVp27YtLC0tcfDgQcPsY1ZWFs6ePYuHH34YAKDRaKDT6eq9j4qCg4Or3KGalJSEwsJCySna/fv348qVK+jevTuys7ORmpoqCX4XLlxAVlaWpO3EiRMQRRFdu3aVjH/y5Em0bt0aLi4uJvkMRGQ6DHZE1CAGDx6MqVOnoqSkRBKcBg0ahGnTpqG4uNhwfV3Lli3h7OyMVatWwdPTE2lpaXjllVeMjjtx4kSMHj0ap06dwj//+U9Du52dHWbPno0ZM2ZAr9fjoYceQlZWFvbu3Qt7e3s89dRTknHq2r86dnZ2eOqppzBnzhw4OTnBzc0N8+fPh0qlgiAIAABfX18cOHAAqampsLW1hZOTE1Sq+l0ZM3z4cERHRyMzMxMtW7YEUDYbBwCffPIJXnzxRaSkpODFF18EABQXF+PYsWNQq9Xo0qWLYZzya+4qXjOXmJiIdu3awdbWVrLPPXv2YNiwYfWql4jMi9fYEVGDGDx4MAoKCuDv7w93d3dD+6BBg5CTk2N4LAoAqFQqxMfH4/Dhw+jSpQtmzJiBxYsXGx33kUcegZOTE5KSkjBhwgTJunfeeQfz5s1DTEwMOnbsiEcffRQ//PBDlWvG6tu/Oh988AFCQkIwevRohIWFYcCAAZI7VGfPng21Wo1OnTrB1dVVct1gXXXt2hU9evTA119/bWhLTEzE8OHDcf78eXTt2hWvvfYa3nrrLdjb2+Pjjz/GsWPHEBgYKLk2z9jNFseOHatyGrawsBBbtmzBlClT6l0zEZmPIIqiKHcRRERKlpeXh1atWmHJkiVmeZDwDz/8gDlz5uDkyZNQqVQYPnw4evfujf/7v/8z+b5WrFiBzZs345dffjH52ET04HgqlojIxI4ePYq//voLffr0QVZWFt5++20AZQ9PNodRo0YhOTkZV65cgbe3N44dO2Z4SLOpWVpa4pNPPjHL2ET04DhjR0RkYkePHsXkyZORlJQEjUaDnj174oMPPqhyE4I5ZGRkwNPTE6dOnUKnTp3Mvj8ialwY7IiIiIgUgjdPEBERESkEgx0RERGRQjDYERERESkEgx0RERGRQjDYERERESkEgx0RERGRQjDYERERESkEgx0RERGRQjDYERERESkEgx0RERGRQjDYERERESnE/wd9n2eT/qIYsAAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fitter.plot(medium)\n", "plt.show()\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This fit looks great and should be sufficient for our simulation." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Alternatively, if the simulation is narrowband, you might want to truncate your data to not include wavelengths far outside your measurement wavelength to simplify the dispersive model. This is through modifying the attribute `wvl_range` where you can set the lower wavelength bound `wvl_range[0]` and the higher wavelength bound `wvl_range[1]`. This operation is non-destructive, so you can always unset them by setting the value to `None`. \n", "\n", "E.g. if we are only interested in the wavelength 3-20 um, we can still use the single-pole model:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "execution": { "iopub.execute_input": "2023-02-03T03:31:00.446226Z", "iopub.status.busy": "2023-02-03T03:31:00.446011Z", "iopub.status.idle": "2023-02-03T03:31:00.558104Z", "shell.execute_reply": "2023-02-03T03:31:00.557608Z" } }, "outputs": [ { "data": { "text/html": [ "
\n"
      ],
      "text/plain": [
       "\u001b[?25l"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "96131d398ed34e87914ed4dd380e603b",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
           INFO             found optimal fit with RMS error = 1.11e-02, returning                       fit.py:360\n",
       "Fitting with 1 to RMS of 0.02... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━   0% -:--:--
\n" ], "text/plain": [ "\n", "\u001b[2K\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO \u001b[0m found optimal fit with RMS error = \u001b[1;36m1.11e-02\u001b[0m, returning \u001b]8;id=508462;file:///Users/twhughes/Documents/Flexcompute/tidy3d-docs/tidy3d/tidy3d/plugins/dispersion/fit.py\u001b\\\u001b[2mfit.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=467141;file:///Users/twhughes/Documents/Flexcompute/tidy3d-docs/tidy3d/tidy3d/plugins/dispersion/fit.py#360\u001b\\\u001b[2m360\u001b[0m\u001b]8;;\u001b\\\n", "Fitting with 1 to RMS of 0.02... \u001b[38;5;237m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[35m 0%\u001b[0m \u001b[36m-:--:--\u001b[0m" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
\n",
       "
\n" ], "text/plain": [ "\n", "\u001b[?25h" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fitter = fitter.copy(update={\"wvl_range\": (3, 20)})\n", "medium, rms_error = fitter.fit(num_poles=1, tolerance_rms=2e-2, num_tries=100)\n" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "execution": { "iopub.execute_input": "2023-02-03T03:31:00.565196Z", "iopub.status.busy": "2023-02-03T03:31:00.565073Z", "iopub.status.idle": "2023-02-03T03:31:00.773433Z", "shell.execute_reply": "2023-02-03T03:31:00.772992Z" } }, "outputs": [ { "data": { "image/png": "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AABXcWmwe+2119S5c2f5+/vL399fMTEx+vTTT8td5/3331fbtm3l4+OjTp06adWqVVVUbcXwxAkAAOAqLp0V+9FHH8nDw0ORkZEyTVOLFy/W7NmztWPHDnXo0KFE/02bNum6665TYmKihg8friVLlmjWrFnavn27OnbsWKFtVtUNinniBAAAcIQa/eSJhg0bavbs2aWesrztttuUk5Ojjz/+2NZ2zTXXqGvXrpo3b16Fxq+KYMfNiQEAgKPUyCdPFBUV6f3331dOTo5iYmJK7bN582ZNmTLFrm3IkCFasWJFmePm5+crPz/f9jkrK8sh9ZaFmxMDAABXcfnkiT179sjX11fe3t665557tHz5crVv377UvhkZGQoMDLRrCwwMVEZGRpnjJyYmKiAgwPYKDQ11aP0XSklJ0bhx42S1WlVUVGT3Nz4+XgcOHHDatgEAAFwe7KKiorRz505t2bJF9957r+6880798MMPDhs/ISFBmZmZttcvv/zisLEvxs2JAQCAK7n8VKyXl5dtUkG3bt30/fffa+7cufrPf/5Tom9QUJCOHDli13bkyBEFBQWVOb63t7e8vb0dW3QZuDkxAABwJZcfsbuY1Wq1uybuQjExMVqzZo1d2+rVq8u8Jq+qcXNiAADgSi4NdgkJCfr666+VmpqqPXv2KCEhQevWrdMdd9whSRozZowSEhJs/R944AF99tlnmjNnjn788Uc98cQT2rp1qyZOnOiqr2CHmxMDAABXcmmwO3r0qMaMGaOoqCgNGDBA33//vT7//HMNGjRIkpSWlqb09HRb/969e2vJkiWaP3++unTpog8++EArVqyo8D3snI2bEwMAAFeqdvexc7aquI8dNycGAACOUqNvUOxsVfXkCQAAAEeoTHapdpMnAAAAcHkIdgAAAG6CYAcAAOAmCHYAAABugmAHAADgJgh2AAAAboJgBwAA4CYIdgAAAG6CYAcAAOAmCHYAAABugmAHAADgJgh2AAAAboJgBwAA4CYIdgAAAG6CYAcAAOAmCHYAAABugmAHAADgJgh2AAAAboJgBwAA4CYIdgAAAG6CYAcAAOAmCHYAAABugmAHAADgJgh2AAAAboJgBwAA4CYIdgAAAG6CYAcAAOAmCHYAAABugmAHAADgJgh2AAAAboJgBwAA4CYIdgAAAG6CYAcAAOAmCHYAAABugmAHAADg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0rkLCgEAQPWWkpKicePGlQgrkhQfH69rr71WERERTtv+q6++qkcffVQfffSR+vXrV2a/tLQ0maapkJAQW1t2draSkpL01ltvacCAAZKkxYsXq3nz5nbrjh071va+VatWevnll9WjRw9lZ2fL19fXdgq1adOmdtfY/fWvf7UbZ8GCBWrSpIl++OEHdezY0dYeEhKiHTt2VP7LO1mlj9hdc801+uabbyRJw4YN04MPPqhnnnlGY8eO1TXXXOPwAgEAgGMtWLBAhmGUuswwDKdOCvjggw80efJkrV69utxQJ0m5ubmSZPfY0oMHD6qgoEC9evWytTVs2FBRUVF2627btk0jRoxQixYt5OfnZ9tWWlpaudtMSUnR6NGj1apVK/n7+yssLKzU9erWraszZ86U/2VdoNLB7oUXXrDtzCeffFIDBgzQu+++q7CwsGo5OwQAANgrnvRYGtM0lZqa6rRtR0dHq0mTJlqwYEGZNRRr3LixJOnkyZOV2kZOTo6GDBkif39/vf322/r+++9t18NdfDePi40YMUInTpzQ66+/ri1btmjLli2lrnfixAk1adKkUnVVhUoHu2effVYnTpyQdO607Lx587R7924tW7asWs1YAQAApQsLCyv3iF3xUSpnaN26tdauXauVK1fqn//85yX7+vv764cffrBr8/T0tAUu6Vzw++mnn2yff/zxRx0/flwzZ85U37591bZtW9vEiWJeXl6SpKKiIlvb8ePHlZycrMcee0wDBgxQu3btygyVe/fuVXR0dMW/eBWpdLA7duyYbrjhBoWGhmratGnatWuXM+oCAABOMnbs2HKP2MXHxzt1+23atNHatWu1bNmycm8qbLFYNHDgQNslYJLk6+ur+Ph4TZs2TV999ZX27t2ruLg4WSx/RpoWLVrIy8tL//73v/Xzzz/rww8/1NNPP203dsuWLWUYhj7++GMdO3ZM2dnZatCggRo1aqT58+frwIED+uqrrzRlypQSdZ05c0bbtm3T4MGDr3xnOFilg93KlSuVnp6u6dOn6/vvv9fVV1+tDh066Nlnn3XqoVsAAOAYkZGRSkpKksVikYeHh93fpKQkp06cKBYVFaWvvvpK77zzjh588MEy+40bN05Lly61m+gxe/Zs9e3bVyNGjNDAgQN17bXXqlu3brblTZo00aJFi/T++++rffv2mjlzpp5//nm7cZs1a6Ynn3xSjzzyiAIDAzVx4kRZLBYtXbpU27ZtU8eOHTV58mTNnj27RE0rV65UixYt1LdvXwfsCccyzEud4L6EX3/9Ve+8844WLFiglJQUnT171lG1OUVWVpYCAgKUmZkpf39/V5cDAECl5eXl6dChQwoPD7ebWFBZBw4cUFJSklJTUxUWFqb4+PgqCXWVYZqmevXqpcmTJ2v06NGuLkfSuYmk999/v26//XaHjVnev2llsstlPVKsWGFhobZu3aotW7YoNTVVgYGBVzIcAACoQhEREUpMTHR1GeUyDEPz5893+CPFLtcff/yhm2++udqEzItV+lSsJK1du1bjx49XYGCg4uLi5O/vr48//rjaPhAXAADUXF27dtU//vEPV5ch6dxM3YceeqjMySeuVukjds2aNdOJEyd0ww03aP78+RoxYoS8vb2dURsAAAAqodLB7oknntAtt9xid5dmAAAAuF6lg9348eOdUQcAAACu0GVdY+coX3/9tUaMGKGQkBAZhqEVK1aU23/dunUyDKPEKyMjo2oKBgAAqMZcGuxycnLUpUsXvfrqq5VaLzk5Wenp6bZX06ZNnVQhAABAzXFFtzu5UkOHDtXQoUMrvV7Tpk25xg8AAOAiLj1id7m6du2q4OBgDRo0SBs3biy3b35+vrKysuxeAAAA7qhGBbvg4GDNmzdPy5Yt07JlyxQaGqrY2Fht3769zHUSExMVEBBge4WGhlZhxQAAoFhsbGy5z4Yty/Tp03X33Xc7vqAKqGzNixYtsjurOG/ePI0YMcLxhZXBpadiKysqKkpRUVG2z71799bBgwf14osv6r///W+p6yQkJNg9wDcrK4twBwBADZGRkaG5c+dWmydPVNbYsWP19NNPa8OGDVXybNkadcSuND179tSBAwfKXO7t7S1/f3+7FwAAqBneeOMN9e7dWy1btnR1KZfFy8tLt99+u15++eUq2V6ND3Y7d+5UcHCwq8sAAMAlTKupMyeKXPoyreZl1f7JJ58oICBAb7/9dpl9li5dWuJUZmxsrP75z39q0qRJatCggQIDA/X6668rJydHd911l/z8/BQREaFPP/3Ubr3169erZ8+e8vb2VnBwsB555BGdPXvWtjwnJ0djxoyRr6+vgoODNWfOnBL15Ofna+rUqWrWrJmuuuoq9erVS+vWrSv3e44YMUIffvihcnNzK7BXroxLT8VmZ2fbHW07dOiQdu7cqYYNG6pFixZKSEjQb7/9pjfffFOS9NJLLyk8PFwdOnRQXl6e3njjDX311Vf64osvXPUVAABwqdxTVr163e8urWHC1yGq19CjUussWbJE99xzj5YsWaLhw4eX2ufEiRP64Ycf1L179xLLFi9erIceekjfffed3n33Xd17771avny5brrpJv3rX//Siy++qH/84x9KS0tTvXr19Ntvv2nYsGGKi4vTm2++qR9//FHjx4+Xj4+PnnjiCUnStGnTtH79eq1cuVJNmzbVv/71L23fvl1du3a1bXfixIn64YcftHTpUoWEhGj58uW64YYbtGfPHkVGRpb6Pbp3766zZ89qy5Ytio2NrdR+qiyXHrHbunWroqOjFR0dLUmaMmWKoqOj9fjjj0uS0tPTlZaWZutfUFCgBx98UJ06dVK/fv20a9cuffnllxowYIBL6gcAAJX36quv6r777tNHH31UZqiTpLS0NJmmqZCQkBLLunTposcee0yRkZFKSEiQj4+PGjdurPHjxysyMlKPP/64jh8/rt27d0uS/vd//1ehoaF65ZVX1LZtW40aNUpPPvmk5syZI6vVquzsbCUlJen555/XgAED1KlTJy1evNjuiF5aWpoWLlyo999/X3379lXr1q01depUXXvttVq4cGGZ36NevXoKCAjQ4cOHr2CvVYxLj9jFxsbKNMs+fLto0SK7zw899JAeeughJ1cFAACc5YMPPtDRo0e1ceNG9ejRo9y+xacufXx8Sizr3Lmz7b2Hh4caNWqkTp062doCAwMlSUePHpUk7d+/XzExMTIMw9anT58+ys7O1q+//qqTJ0+qoKBAvXr1si1v2LCh3aTNPXv2qKioSG3atLGrJT8/X40aNSr3u9StW1dnzpwpt48j1KhZsQAAoGaLjo7W9u3btWDBAnXv3t0uaF2scePGkqSTJ0+qSZMmdss8PT3tPhuGYddWPK7VanVU6crOzpaHh4e2bdsmDw/7U8++vr7lrnvixIkS38EZCHYAANRgdetbNOHrkqcqq7qGimrdurXmzJmj2NhYeXh46JVXXim3r7+/v3744YcSR8kqq127dlq2bJlM07SFvo0bN8rPz0/NmzdXw4YN5enpqS1btqhFixaSzgXKn376Sf369ZN0LpQWFRXp6NGjlbp1ycGDB5WXl2e7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8kn17dtXe/fulZ+fn6vLqxYyMjIkqdTfTvGy2uiGG27QzTffrPDwcB08eFD/+te/NHToUG3evFkeHh6uLs/prFarJk2apD59+qhjx46Szv1WvLy8VL9+fbu+tem3Utp+kaTbb79dLVu2VEhIiHbv3q2HH35YycnJ+r//+z8XVut8e/bsUUxMjPLy8uTr66vly5erffv22rlzZ639rZS1T6Ta+zu5FIIdKmzo0KG29507d1avXr3UsmVLvffee4qPj3dhZaju/va3v9ned+rUSZ07d1br1q21bt06DRgwwIWVVY0JEyZo7969tfKa1PKUtV/uvvtu2/tOnTopODhYAwYM0MGDB9W6deuqLrPKREVFaefOncrMzNQHH3ygO++8U+vXr3d1WS5V1j5p3759rf2dXAqnYkvRuHFjeXh4lJhxdOTIEQUFBbmoquqnfv36atOmjQ4cOODqUqqN4t8Hv53ytWrVSo0bN64Vv52JEyfq448/1tq1a9W8eXNbe1BQkAoKCnTq1Cm7/rXlt1LWfilNr169JMntfy9eXl6KiIhQt27dlJiYqC5dumju3Lm1+rdS1j4pTW35nVwKwa4UXl5e6tatm9asWWNrs1qtWrNmjd25/douOztbBw8eVHBwsKtLqTbCw8MVFBRk99vJysrSli1b+O1c4Ndff9Xx48fd+rdjmqYmTpyo5cuX66uvvlJ4eLjd8m7dusnT09Put5KcnKy0tDS3/q1car+UZufOnZLk1r+X0litVuXn59fa30ppivdJaWrr76QEV8/eqK6WLl1qent7m4sWLTJ/+OEH8+677zbr169vZmRkuLo0l3nwwQfNdevWmYcOHTI3btxoDhw40GzcuLF59OhRV5dWpU6fPm3u2LHD3LFjhynJfOGFF8wdO3aYhw8fNk3TNGfOnGnWr1/fXLlypbl7925z5MiRZnh4uJmbm+viyp2nvH1y+vRpc+rUqebmzZvNQ4cOmV9++aV59dVXm5GRkWZeXp6rS3eae++91wwICDDXrVtnpqen215nzpyx9bnnnnvMFi1amF999ZW5detWMyYmxoyJiXFh1c53qf1y4MAB86mnnjK3bt1qHjp0yFy5cqXZqlUr87rrrnNx5c71yCOPmOvXrzcPHTpk7t6923zkkUdMwzDML774wjTN2vlbKW+f1NbfSUUQ7Mrx73//22zRooXp5eVl9uzZ0/z2229dXZJL3XbbbWZwcLDp5eVlNmvWzLztttvMAwcOuLqsKrd27VpTUonXnXfeaZrmuVueTJ8+3QwMDDS9vb3NAQMGmMnJya4t2snK2ydnzpwxBw8ebDZp0sT09PQ0W7ZsaY4fP97t/5+k0vaHJHPhwoW2Prm5ueZ9991nNmjQwKxXr5550003menp6a4rugpcar+kpaWZ1113ndmwYUPT29vbjIiIMKdNm2ZmZma6tnAnGzt2rNmyZUvTy8vLbNKkiTlgwABbqDPN2vlbKW+f1NbfSUUYpmmaVXd8EAAAAM7CNXYAAABugmAHAADgJgh2AAAAboJgBwAA4CYIdgAAAG6CYAcAAOAmCHYAAABugmAHAADgJgh2AAAAboJgBwAA4CYIdgBqrdjYWE2aNMnVZdhcbj3Hjx9X06ZNlZqa6vCaLva3v/1Nc+bMcfp2AFwegh0Ap5o3b578/Px09uxZW1t2drY8PT0VGxtr13fdunUyDEMHDx6s4iqrlqMD5TPPPKORI0cqLCzMYWOW5bHHHtMzzzyjzMxMp28LQOUR7AA4Vf/+/ZWdna2tW7fa2jZs2KCgoCBt2bJFeXl5tva1a9eqRYsWat26tStKrZHOnDmjpKQkxcfHV8n2OnbsqNatW+utt96qku0BqByCHQCnioqKUnBwsNatW2drW7dunUaOHKnw8HB9++23du39+/eXJH322We69tprVb9+fTVq1EjDhw+3O5I3f/58hYSEyGq12m1v5MiRGjt2rCTJarUqMTFR4eHhqlu3rrp06aIPPvigzFor0j82Nlb333+/HnroITVs2FBBQUF64okn7PqcPn1ad9xxh6666ioFBwfrxRdftB2li4uL0/r16zV37lwZhiHDMOxOoVqt1nLHvtiqVavk7e2ta665xq79m2++kaenp11wTk1NlWEYOnz4sO39smXLdN1116lu3brq0aOH0tLStGHDBl1zzTWqV6+eBgwYoFOnTtmNPWLECC1durTcugC4BsEOgNP1799fa9eutX1eu3atYmNj1a9fP1t7bm6utmzZYgt2OTk5mjJlirZu3ao1a9bIYrHopptusgW5W265RcePH7cb98SJE/rss890xx13SJISExP15ptvat68edq3b58mT56sv//971q/fn2pdVa0/+LFi3XVVVdpy5Yteu655/TUU09p9erVtuVTpkzRxo0b9eGHH2r16tXasGGDtm/fLkmaO3euYmJiNH78eKWnpys9PV2hoaEVHvtiGzZsULdu3Uq079y5U+3atZOPj4+tbceOHWrQoIFatmypXbt2SZJee+01Pfvss9q0aZOOHDmiv//975o5c6ZeeeUVrV27Vrt27dLChQvtxu7Zs6e+++475efnl1kXANeo4+oCALi//v37a9KkSTp79qxyc3O1Y8cO9evXT4WFhZo3b54kafPmzcrPz7cFu7/+9a92YyxYsEBNmjTRDz/8oI4dO6pBgwYaOnSolixZogEDBkiSPvjgAzVu3Fj9+/dXfn6+nn32WX355ZeKiYmRJLVq1UrffPON/vOf/6hfv35241emf+fOnTVjxgxJUmRkpF555RWtWbNGgwYN0unTp7V48WK7uhYuXKiQkBBJUkBAgLy8vFSvXj0FBQWV2FfljV2aw4cP28a+0K5duxQdHW3XtnPnTnXp0sX2vmHDhnr33XfVqFEjSVK/fv30zTffaN++fapXr54kqUePHsrIyLAbJyQkRAUFBcrIyFDLli1LrQuAa3DEDoDTxcbGKicnR99//702bNigNm3aqEmTJurXr5/tOrt169apVatWatGihSQpJSVFo0ePVqtWreTv72+bGJCWlmYb94477tCyZctsR47efvtt/e1vf5PFYtGBAwd05swZDRo0SL6+vrbXm2++WerkjMr079y5s93n4OBgHT16VJL0888/q7CwUD179rQtDwgIUFRUVIX2VXljlyY3N9fuqFyxnTt3qmvXrnZtO3bssLXt2rVLN910ky3USef27W233WYLdcVt4eHhduPUrVtX0rnr+wBULxyxA+B0ERERat68udauXauTJ0/ajn6FhIQoNDRUmzZt0tq1a3X99dfb1hkxYoRatmyp119/3XYtXceOHVVQUGDXxzRNffLJJ+rRo4c2bNigF198UdK5mbeS9Mknn6hZs2Z29Xh7e5eosTL9PT097T4bhlHiWr/LVdmxGzdurJMnT9q1FRUVae/evSWO2G3fvt12JHTnzp1KSEiwW75r1y5NnjzZ9jkvL0/Jycm2o3zFTpw4IUlq0qRJBb8VgKpCsANQJfr3769169bp5MmTmjZtmq39uuuu06effqrvvvtO9957r6Rz92VLTk7W66+/rr59+0o6NxngYj4+Prr55pv19ttv68CBA4qKitLVV18tSWrfvr28vb2VlpZW4rRraSrbvyytWrWSp6envv/+e9vRx8zMTP3000+67rrrJEleXl4qKiq67G1cKDo6usQM1eTkZOXl5dmdot28ebN+++03de3aVVlZWUpNTbULfocOHVJmZqZd2549e2Sapjp16mQ3/t69e9W8eXM1btzYId8BgOMQ7ABUif79+2vChAkqLCy0C079+vXTxIkTVVBQYLu+rkGDBmrUqJHmz5+v4OBgpaWl6ZFHHil13DvuuEPDhw/Xvn379Pe//93W7ufnp6lTp2ry5MmyWq269tprlZmZqY0bN8rf31933nmn3TiV7V8WPz8/3XnnnZo2bZoaNmyopk2basaMGbJYLDIMQ5IUFhamLVu2KDU1Vb6+vmrYsKEslsu7MmbIkCFKSEjQyZMn1aBBA0nnjsZJ0r///W/df//9OnDggO6//35JUkFBgXbt2iUPDw917NjRNk7xNXcXXjO3c+dOtW7dWr6+vnbb3LBhgwYPHnxZ9QJwLq6xA1Al+vfvr9zcXEVERCgwMNDW3q9fP50+fdp2WxRJslgsWrp0qbZt26aOHTtq8uTJmj17dqnjXn/99WrYsKGSk5N1++232y17+umnNX36dCUmJqpdu3a64YYb9Mknn5S4Zuxy+5flhRdeUExMjIYPH66BAweqT58+djNUp06dKg8PD7Vv315NmjSxu26wsjp16qSrr75a7733nq1t586dGjJkiH7++Wd16tRJjz76qJ588kn5+/vr5Zdf1q5duxQVFWV3bV5pky127dpV4jRsXl6eVqxYofHjx192zQCcxzBN03R1EQDgznJyctSsWTPNmTPHKTcS/uSTTzRt2jTt3btXFotFQ4YMUY8ePfT//t//c/i2XnvtNS1fvlxffPGFw8cGcOU4FQsADrZjxw79+OOP6tmzpzIzM/XUU09JOnfzZGe48cYblZKSot9++02hoaHatWuX7SbNjubp6al///vfThkbwJXjiB0AONiOHTs0btw4JScny8vLS926ddMLL7xQYhKCM2RkZCg4OFj79u1T+/btnb49ANULwQ4AAMBNMHkCAADATRDsAAAA3ATBDgAAwE0Q7AAAANwEwQ4AAMBNEOwAAADcBMEOAADATRDsAAAA3ATBDgAAwE0Q7AAAANwEwQ4AAMBN/H8GohZUCkEsgQAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fitter.plot(medium)\n", "plt.show()\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Using Fit Results\n", "\n", "With the fit performed, we want to use the `Medium` in our simulation.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Method 1: direct export as Medium\n", "\n", "The fit returns a medium, which can be used directly in simulation" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "execution": { "iopub.execute_input": "2023-02-03T03:31:00.775828Z", "iopub.status.busy": "2023-02-03T03:31:00.775655Z", "iopub.status.idle": "2023-02-03T03:31:00.778139Z", "shell.execute_reply": "2023-02-03T03:31:00.777689Z" }, "tags": [] }, "outputs": [], "source": [ "b = td.Structure(geometry=td.Box(size=(1, 1, 1)), medium=medium)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Method 2: print medium definition string\n", "\n", "In many cases, one may want to perform the fit once and then hardcode the result in their tidy3d script.\n", "\n", "For a quick and easy way to do this, just `print()` the medium and the output can be copied and pasted into your main svript" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "execution": { "iopub.execute_input": "2023-02-03T03:31:00.780412Z", "iopub.status.busy": "2023-02-03T03:31:00.780249Z", "iopub.status.idle": "2023-02-03T03:31:00.782898Z", "shell.execute_reply": "2023-02-03T03:31:00.782463Z" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "td.PoleResidue(\n", "\teps_inf=1.0, \n", "\tpoles=(((-3464409493588389.5-2236414374514880.5j), (1.2412679745347164e+16+2.2143174665138764e+16j)),), \n", "\tfrequency_range=(15048764551236.16, 97485556664009.75))\n" ] } ], "source": [ "print(medium)\n" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "execution": { "iopub.execute_input": "2023-02-03T03:31:00.784950Z", "iopub.status.busy": "2023-02-03T03:31:00.784794Z", "iopub.status.idle": "2023-02-03T03:31:00.786760Z", "shell.execute_reply": "2023-02-03T03:31:00.786347Z" } }, "outputs": [], "source": [ "# medium = td.PoleResidue(\n", "# \tpoles=[((-1720022108564405.2, 1111614865738177.4), (1.0199002935090378e+16, -3696384150818460.5)), ((0.0, -3100558969639478.5), (3298054971521434.5, 859192377978951.2))],\n", "# \tfrequency_range=(7994465562158.582, 299792458580946.8))\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Method 3: save and load file containing poles\n", "\n", "Finally, one can save export the `Medium` directly as .json file. Here is an example." ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "execution": { "iopub.execute_input": "2023-02-03T03:31:00.788793Z", "iopub.status.busy": "2023-02-03T03:31:00.788632Z", "iopub.status.idle": "2023-02-03T03:31:00.792679Z", "shell.execute_reply": "2023-02-03T03:31:00.792320Z" }, "tags": [] }, "outputs": [], "source": [ "# save poles to pole_data.txt\n", "fname = \"data/my_medium.json\"\n", "medium.to_file(fname)\n", "\n", "# load the file in your script\n", "medium = td.PoleResidue.from_file(fname)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Tricks and Tips / Troubleshooting\n", "\n", "Performing dispersion model fits is more of an art than a science and some trial and error may be required to get good fits. A good general strategy is to:\n", "\n", "- Start with few poles and increase unitl RMS error gets to the desired level.\n", "\n", "- Large `num_tries` values can sometimes find good fits if the RMS seems stalled. it can be a good idea to set a large number of tries and let it run for a while on an especially difficult data model.\n", "\n", "- Tailor the parameters to your data. Long wavelengths and large n,k values can affect the RMS error that is considered a 'good' fit. So it is a good idea to tweak the tolerance to match your data. Once size does not fit all.\n", "\n", "Finally, there are some things to be aware of when troubleshooting the dispersion models in your actaual simulation:\n", "\n", "- If you are unable to find a good fit to your data, it might be worth considering whether you care about certain features in the data. For example as shown above, if the simulation is narrowband, you might want to truncate your data to not include wavelengths far outside your measurement wavelength to simplify the dispersive model.\n", "\n", "- It is common to find divergence in FDTD simulations due to dispersive materials. Besides trying \"absorber\" PML types and reducing runtime, a good solution can be to try other fits, or to explore our new `StableFitter` feature which will be explained below.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Stable fitter\n", "\n", "We recently introduced a version of the `DispersionFitter` tool that implements our proprietary stability criterion. We observe consistently stable FDTD simulations when materials are fit using this method and also provide it in the newest versions of Tidy3d.\n", "\n", "Functionally speaking, it works identically to the previously introduced tool, excpet the `.fit()` method is run on Flexcompute servers and therefore this tool reqiures signing in to a Tidy3D account. Here is a demonstration." ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "execution": { "iopub.execute_input": "2023-02-03T03:31:00.794809Z", "iopub.status.busy": "2023-02-03T03:31:00.794651Z", "iopub.status.idle": "2023-02-03T03:31:00.797942Z", "shell.execute_reply": "2023-02-03T03:31:00.797592Z" } }, "outputs": [], "source": [ "from tidy3d.plugins import StableDispersionFitter, AdvancedFitterParam\n", "\n", "fname = \"data/nk_data.csv\"\n", "fitter_stable = StableDispersionFitter.from_file(fname, skiprows=1, delimiter=\",\")\n" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "execution": { "iopub.execute_input": "2023-02-03T03:31:00.799914Z", "iopub.status.busy": "2023-02-03T03:31:00.799762Z", "iopub.status.idle": "2023-02-03T03:31:17.495876Z", "shell.execute_reply": "2023-02-03T03:31:17.494175Z" }, "tags": [] }, "outputs": [ { "data": { "text/html": [ "
           INFO     Using Tidy3D credentials from stored file.                                           auth.py:70\n",
       "
\n" ], "text/plain": [ "\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO \u001b[0m Using Tidy3D credentials from stored file. \u001b]8;id=236078;file:///Users/twhughes/Documents/Flexcompute/tidy3d-docs/tidy3d/tidy3d/web/auth.py\u001b\\\u001b[2mauth.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=928196;file:///Users/twhughes/Documents/Flexcompute/tidy3d-docs/tidy3d/tidy3d/web/auth.py#70\u001b\\\u001b[2m70\u001b[0m\u001b]8;;\u001b\\\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
[21:31:02] INFO     Authentication successful.                                                           auth.py:30\n",
       "
\n" ], "text/plain": [ "\u001b[2;36m[21:31:02]\u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO \u001b[0m Authentication successful. \u001b]8;id=722948;file:///Users/twhughes/Documents/Flexcompute/tidy3d-docs/tidy3d/tidy3d/web/auth.py\u001b\\\u001b[2mauth.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=300565;file:///Users/twhughes/Documents/Flexcompute/tidy3d-docs/tidy3d/tidy3d/web/auth.py#30\u001b\\\u001b[2m30\u001b[0m\u001b]8;;\u001b\\\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
[21:31:17] INFO             found optimal fit with RMS error = 1.71e-02, returning                   fit_web.py:316\n",
       "
\n" ], "text/plain": [ "\u001b[2;36m[21:31:17]\u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO \u001b[0m found optimal fit with RMS error = \u001b[1;36m1.71e-02\u001b[0m, returning \u001b]8;id=692585;file:///Users/twhughes/Documents/Flexcompute/tidy3d-docs/tidy3d/tidy3d/plugins/dispersion/fit_web.py\u001b\\\u001b[2mfit_web.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=745987;file:///Users/twhughes/Documents/Flexcompute/tidy3d-docs/tidy3d/tidy3d/plugins/dispersion/fit_web.py#316\u001b\\\u001b[2m316\u001b[0m\u001b]8;;\u001b\\\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "medium, rms_error = fitter_stable.fit(\n", " num_poles=2,\n", " tolerance_rms=2e-2,\n", " num_tries=50,\n", " advanced_param=AdvancedFitterParam(nlopt_maxeval=10000),\n", ")\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note here we supply the `advanced_param` for more control of the fitting process. `nlopt_maxeval` stands for the maximal number of iterations for each inner optimization. Details of a list of other advanced parameters will be explained later." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can visualize our fits the same way." ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "execution": { "iopub.execute_input": "2023-02-03T03:31:17.500965Z", "iopub.status.busy": "2023-02-03T03:31:17.500481Z", "iopub.status.idle": "2023-02-03T03:31:17.678584Z", "shell.execute_reply": "2023-02-03T03:31:17.678113Z" } }, "outputs": [ { "data": { "image/png": "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dY5dVlYWAMDFxaXafjk5OWjdujV8fHwwZswYnDp1qsq+hYWF0Ol0kgcRERGREjWYYGcwGDBjxgz069cPnTt3rrJfUFAQYmNjsXXrVnz11VcwGAzo27cvLl++bLJ/dHQ0tFqt8eHj42Opj0BEREQkK0EURVHuIgDg+eefx88//4y//voLrVq1qvF6xcXF6NChA8aPH49333230vLCwkIUFhYa3+t0Ovj4+CArKwtOTk5mqZ2IiIjIUnQ6HbRabY2yi6zn2JWbPn06fvzxR/z555+1CnUAYG1tjZCQECQnJ5tcrtFooNFozFEmERERUYMm66FYURQxffp0bN68GX/88Qf8/f1rPYZer8eJEyfg6elpgQqJiIiIGg9ZZ+ymTZuGDRs2YOvWrXB0dERGRgYAQKvVws7ODgAwceJEeHt7Izo6GgDwzjvvoE+fPggICMDt27exePFiXLx4EVOmTJHtcxARERE1BLIGu5UrVwIAwsLCJO1r1qxBREQEACAtLQ0q1Z2JxczMTEydOhUZGRlwdnZG9+7dsXfvXnTs2LG+yiYiIiJqkBrMxRP1pTYnIBIRERHJrTbZpcHc7oSIiIiI7g+DHREREZFCMNgRERERKQSDHREREZFCMNgRERERKQSDHREREZFCMNgRERERKQSDHREREZFCMNgRERERKQSDHREREZFCMNgRERERKQSDHREREZFCMNgRERERKQSDHREREZFCMNgRERERKQSDHREREZFCMNgRERERKQSDHREREZFCMNgRERERKQSDHREREZFCMNgRERERKQSDHREREZFCMNgRERERKQSDHREREZFCMNgRERERKQSDHREREZFCMNgRERERKQSDHREREZFCMNgRERERKQSDHREREZFCWMldABEREdWdXq9HcXGx3GXQfbC2toZarTbLWAx2REREjZAoisjIyMDt27flLoXMoHnz5vDw8IAgCPc1DoMdERFRI1Qe6tzc3GBvb3/fgYDkIYoi8vLycO3aNQCAp6fnfY3HYEdERNTI6PV6Y6hr0aKF3OXQfbKzswMAXLt2DW5ubvd1WJYXTxARETUy5efU2dvby1wJmUv53/J+z5dksCMiImqkePhVOcz1t2SwIyIiIlIIBjsiIiJq0IqKihAQEIC9e/dW2Sc1NRWCICAhIcHi9axatQqjR4+2+HbqgsGOiIiIGrRVq1bB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OnXCqFGjMHfuXMk2V6xYgZCQELz//vto3769MSDu3LkT586dq/JzeHl54dKlSxY/z67WM3YffPABBg0ahEOHDqGoqAjz5s3DqVOncOvWLezZs8cSNRIREZFCBAcHS957enri2rVrVfbPz8+Hra3tPcdyd3cHAHTp0kXSVj62TqfDlStX0K9fP8kY/fr1w7FjxwAAZ86cQXBwsGR7oaGhkv7Hjh3Dzp074eDgUKmelJQUtGvXzmStdnZ2MBgMKCwshJ2dXZWf937VOth17twZ586dw4oVK+Do6IicnBw8+uijmDZtGjw9PS1RIxERESmEtbW15H35kb+qtGzZEidOnLjnWIIgmGwz9wxZTk4ORo8ejUWLFlVaVl0OunXrFpo1a2bRUAfUIdgBgFarxeuvv27uWoiIiKiWVC5a+J35XvYaLCUkJAQrV66EKIrG8FYXTk5O8PLywp49ezBgwABj+549e9CrVy8AQIcOHfDf//4XBQUFxlm7/fv3S8Z54IEHsGnTJvj5+cHKquYx6uTJkwgJCalz/TVV62D3559/Vrv8oYceqnMxREREVDuCSlXjCxcao4EDByInJwenTp1C586d72usuXPnYsGCBWjbti26deuGNWvWICEhAevXrwcAPPnkk3j99dcxdepUREVFITU1FUuWLJGMMW3aNHz++ecYP3688ere5ORkxMXF4YsvvoBarTa57d27d2PIkCH3VX9N1DrYhYWFVWqrmKD1ev19FURERERUrkWLFnjkkUewfv16REdH39dYL730ErKysjB79mxcu3YNHTt2xPfff4/AwEAAgIODA3744Qc899xzCAkJQceOHbFo0SI89thjxjHKZ/1eeeUVDBkyBIWFhWjdujWGDRsGlcr0Nan//PMP9u7di6+++uq+6q8JQazlb4FlZWVJ3hcXF+Po0aOYP38+3nvvPQwaNMisBZqbTqeDVqtFVlYWnJyc5C6HiIio1goKCnDhwgX4+/tXeWGBkhw/fhyDBw9GSkqKyYsWGrpXXnkFmZmZWL16dZV9qvub1ia71HrGTqutfBx98ODBsLGxwaxZs3D48OHaDklERERUpeDgYCxatAgXLlyQXPXaWLi5uWHWrFn1sq06XTxhiru7OxITE801HBEREZFRRESE3CXU2ezZs+ttW7UOdsePH5e8F0UR6enpWLhwIbp162auuoiI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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fitter_stable.plot(medium)\n", "plt.show()\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Once the fitting is performed, the procedure of using the medium in our simulation is also idential to the previous fitting tool, which we will not go into details here." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Tips\n", "\n", "- Our stable fitter is based on a web service, and therefore it can run into `timeout` errors if the fitter runs for too long. In this case, you are encouraged to decrease the value of `num_tries` or to relax the value of `tolerance_rms` to your needs.\n", "\n", "- Our fitting tool performs global optimizations with random starting coefficients, and will repeat the optimization `num_tries` times. Within each inner optimization, the maximal number of iterations is bounded by an **advanced parameter** `nlopt_maxeval` whose default value is `5000`. Since there is a well-known tradeoff between exploration and exploitation in a typical global optimization process, you can play around with `num_tries` and `nlopt_maxeval`. In particular in senarios where `timeout` error occurs and decreasing `num_tries` leads to larger RMS error, you can try to decrease `nlopt_maxeval`.\n", "\n", "A list of other advanced parameters can be found in our documentation. For example:\n", "\n", "- In cases where the permittivity at inifinity frequency is other than 1, it can also be optimized by setting an **advanced parameter** `bound_eps_inf` so that the permittivity at infinite frequency can take values between `[1,bound_eps_inf]`.\n", "\n", "- Sometimes we want to bound the pole frequency in the dispersive model. The lower and upper bound can be set with `bound_f_lower` and `bound_f`, respectively.\n", "\n", "- The fitting tool performs global optimizations with random starting coefficients. By default, the value of the seed `rand_seed=0` is fixed, so that you'll obtain identical results when re-running the fitter. If you want to re-run the fitter several times to obtain the best results, the value of the seed should be changed, or set to `None` so that the starting coefficients are different each time. " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.9" }, "widgets": { "application/vnd.jupyter.widget-state+json": { "state": { "14321f8a32a44475b407c3fb60c2d57f": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "27ba8417d45748e19ef193b28605d9f4": { "model_module": "@jupyter-widgets/output", "model_module_version": "1.0.0", "model_name": "OutputModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/output", "_model_module_version": "1.0.0", "_model_name": "OutputModel", "_view_count": null, "_view_module": "@jupyter-widgets/output", "_view_module_version": "1.0.0", "_view_name": "OutputView", "layout": "IPY_MODEL_9feaf97296464a4f87b065d62f67b3a7", "msg_id": "", "outputs": [ { "data": { "text/html": "
best RMS error so far: 9.95e-02 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸  99% 0:00:01\nbest RMS error so far: 9.95e-02 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸  99% 0:00:01
\n", "text/plain": "\r\u001b[2Kbest RMS error so far: 9.95e-02 \u001b[38;2;249;38;114m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[38;2;249;38;114m╸\u001b[0m \u001b[35m 99%\u001b[0m \u001b[36m0:00:01\u001b[0m\nbest RMS error so far: 9.95e-02 \u001b[38;2;249;38;114m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[38;2;249;38;114m╸\u001b[0m \u001b[35m 99%\u001b[0m \u001b[36m0:00:01\u001b[0m" }, "metadata": {}, "output_type": "display_data" } ], "tabbable": null, "tooltip": null } }, "5b30a6a734294a02ae1946b629329e16": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "6e4c9106caa04277936edc302dd694e4": { "model_module": "@jupyter-widgets/output", "model_module_version": "1.0.0", "model_name": "OutputModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/output", "_model_module_version": "1.0.0", "_model_name": "OutputModel", "_view_count": null, "_view_module": "@jupyter-widgets/output", "_view_module_version": "1.0.0", "_view_name": "OutputView", "layout": "IPY_MODEL_5b30a6a734294a02ae1946b629329e16", "msg_id": "", "outputs": [ { "data": { "text/html": "
best RMS error so far: 2.06e-02 ━━━━━━━━━━━━━━━━━━━━━━━━━━╺━━━━━━━━━━━━━  66% 0:00:09\nbest RMS error so far: 2.06e-02 ━━━━━━━━━━━━━━━━━━━━━━━━━━╺━━━━━━━━━━━━━  66% 0:00:09
\n", "text/plain": "\r\u001b[2Kbest RMS error so far: 2.06e-02 \u001b[38;2;249;38;114m━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[38;5;237m╺\u001b[0m\u001b[38;5;237m━━━━━━━━━━━━━\u001b[0m \u001b[35m 66%\u001b[0m \u001b[36m0:00:09\u001b[0m\nbest RMS error so far: 2.06e-02 \u001b[38;2;249;38;114m━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[38;5;237m╺\u001b[0m\u001b[38;5;237m━━━━━━━━━━━━━\u001b[0m \u001b[35m 66%\u001b[0m \u001b[36m0:00:09\u001b[0m" }, "metadata": {}, "output_type": "display_data" } ], "tabbable": null, "tooltip": null } }, "96131d398ed34e87914ed4dd380e603b": { "model_module": "@jupyter-widgets/output", "model_module_version": "1.0.0", "model_name": "OutputModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/output", "_model_module_version": "1.0.0", "_model_name": "OutputModel", "_view_count": null, "_view_module": "@jupyter-widgets/output", "_view_module_version": "1.0.0", "_view_name": "OutputView", "layout": "IPY_MODEL_14321f8a32a44475b407c3fb60c2d57f", "msg_id": "", "outputs": [ { "data": { "text/html": "
Fitting with 1 to RMS of 0.02... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━   0% -:--:--\nFitting with 1 to RMS of 0.02... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━   0% -:--:--
\n", "text/plain": "\r\u001b[2KFitting with 1 to RMS of 0.02... \u001b[38;5;237m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[35m 0%\u001b[0m \u001b[36m-:--:--\u001b[0m\nFitting with 1 to RMS of 0.02... \u001b[38;5;237m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[35m 0%\u001b[0m \u001b[36m-:--:--\u001b[0m" }, "metadata": {}, "output_type": "display_data" } ], "tabbable": null, "tooltip": null } }, "9feaf97296464a4f87b065d62f67b3a7": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } } }, "version_major": 2, "version_minor": 0 } } }, "nbformat": 4, "nbformat_minor": 4 }