{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercise 1\n", "#### (b) Calculating reflectivity as a function of angle of incidence\n", "\n", "This is an exercise for calculating the reflectivity (fraction of the light ray that is sent back into the incoming medium) in function of the incidence angle of the light ray hitting the interface between two media. This also depends on the refractive indices of the two media.\n", "\n", "First, you should input the refractive indices of the two media. First one represents where the light is coming from.\n", "\n", "You should come back to this location to repeat the process for different refractive indices." ] }, { "cell_type": "code", "execution_count": 145, "metadata": {}, "outputs": [], "source": [ "n_1 = 1.5\n", "n_2 = 1.33" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The code below initializes the incidence angle. It real values from 0 to 90. We're initializing them as complex values to be able to use numpy's other trigonometric functions with complex results." ] }, { "cell_type": "code", "execution_count": 146, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "from numpy import pi\n", "\n", "theta1_m = np.arange(0, 90, 0.1, dtype=np.complex128)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Tranmission angle can be defined thanks to Snell's law:\n", "\n", "$$n_1sin(\\theta _1)=n_2sin(\\theta _2) \\Longrightarrow \\theta _2 = arcsin(\\frac{n_1}{n_2}sin(\\theta _1))$$" ] }, { "cell_type": "code", "execution_count": 147, "metadata": {}, "outputs": [], "source": [ "theta2_m = 180/pi * np.arcsin(n_1/n_2*np.sin(pi/180*theta1_m))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Fresnel coefficients for reflection and transmission are:\n", "\n", "$$r=\\frac{E_r}{E_i}=\\frac{n_1cos(\\theta _1)-n_2cos(\\theta _2)}{n_1cos(\\theta _1)+n_2cos(\\theta _2)}$$\n", "$$t=\\frac{E_t}{E_i}=\\frac{2n_1cos(\\theta _1)}{n_1cos(\\theta _1)+n_2cos(\\theta _2)}$$" ] }, { "cell_type": "code", "execution_count": 148, "metadata": {}, "outputs": [], "source": [ "r_m=np.divide(n_1*np.cos(pi/180*theta1_m)-n_2*np.cos(pi/180*theta2_m),(n_1*np.cos(pi/180*theta1_m)+n_2*np.cos(pi/180*theta2_m)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Reflected and transmitted intensities then can be easily calculated as:\n", "\n", "$$ R = r^2$$\n", "$$ T = 1-R$$" ] }, { "cell_type": "code", "execution_count": 149, "metadata": {}, "outputs": [], "source": [ "R_m = np.power(abs(r_m),2)\n", "T_m = 1 - R_m" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "All we have left to do now is graphing the function $R(\\theta _1)$ and identify the critical angle from it." ] }, { "cell_type": "code", "execution_count": 150, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "98e1abd5380446deaf56a4eb6405a60a", "version_major": 2, "version_minor": 0 }, "image/png": "iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy89olMNAAAACXBIWXMAAA9hAAAPYQGoP6dpAABP60lEQVR4nO3de1yUZf7/8fcwwAAieABBERU181SeMSo7rGxmZtlptZOHzq27m7nfNt02tdqk/baZ+6tWy8qOluW3rE07mJuWaZmiluUxj6mgpoJyGGDm+v2BjCCggMzcw8zr+XjwEO65D5/7vrmHt9d9XffYjDFGAAAACBohVhcAAAAA3yIAAgAABBkCIAAAQJAhAAIAAAQZAiAAAECQIQACAAAEGQIgAABAkCEAAgAABBkCIAAAQJAhAAIAAAQZAiAAAECQIQACAAAEGQIgAABAkCEAAgAABBkCIAAAQJAhAAIAAAQZAiAAAECQIQACAAAEGQIgAABAkCEAAgAABBkCIAAAQJAhAAIAAAQZAiAAAECQIQACAAAEGQIgAABAkCEAAgAABBkCIAAAQJAhAAIAAAQZAiAAAECQIQACAAAEGQIgAABAkCEAAgAABBkCIAAAQJAhAAIAAAQZAuBpfPfddzr//PPVqFEj2Ww2rV27Vq+88opsNpt27Njh83rqum1f1eyt7VR1HvyNlb8XtVHTY+mL/anpNqZMmSKbzea1Ohoif/59q01tZef24MGD3i8MdcY1GHgCJgCWveGUfYWGhiopKUmjR4/Wnj176rTO4uJi3XDDDTp06JCefvppvf7662rbtm09V17Z8uXLNWXKFB05ciQgtnOmrDoP1Wkox60q/nYs/U1DPrf+LJCP67FjxzR58mRdfvnlatasmWw2m1555ZUaL79kyZIKf7vKf33zzTfeKzwInem5+vHHH3XDDTeoffv2ioqKUlxcnC666CL95z//OaN5LWMCxOzZs40k8+ijj5rXX3/dzJo1y9x+++3GbrebDh06mIKCglqvc8OGDUaSmTVrVpXb2r59ez1VX9GTTz5Z7fpLSkpMQUGBcbvdtVpnVcudajt1Vdf6TqW682CV6o6bN/a9vtXmWPpif2q6jcmTJxtfvF1545rwFm+/D52Jk8/rqY5r2bk9cOCAj6usH9u3bzeSTJs2bcwll1xiJJnZs2fXePkvvvjCSDJ/+tOfzOuvv17hy5+Oia+uQW8603O1YMECM2jQIDNlyhTzwgsvmOnTp5sBAwYYSeb555+v87xWCfVp2vSBwYMHq2/fvpKkO+64Q3FxcfrHP/6hDz/8UL/73e9qta79+/dLkpo0aVLfZdaZ3W6X3W732XL+sB1/PA9V8dUxPhO1OZa+2J+GcMxQe8F0Xlu2bKl9+/YpMTFRq1atUr9+/eq0ngEDBuj666+v5+pQ3pmeqyuuuEJXXHFFhWl/+MMf1KdPH02bNk133XVXnea1SsDcAq7OgAEDJEk///xzhel79uzRbbfdpoSEBDkcDnXr1k0vv/yy5/XRo0fr4osvliTdcMMNstlsuuSSS065rdOts/x8t99+u1q1aiWHw6GUlBTde++9Kioq0pQpU/TAAw9IklJSUjy3Asr60pTvWzNv3jzZbDYtXbq00jaef/552Ww2rV+/vtJykqrdzuzZs2Wz2fT+++9XWuecOXNks9m0YsWKao9BVX1/yvqObN26VaNHj1aTJk0UGxurMWPGKD8//5TH9FTnYfTo0WrXrl2lZU7uq1Lb7df1/FTX72nNmjUaPHiwYmJiFB0drYEDB1a6tXMmx6im26nt7/SZnstTHcdTbWPZsmXq16+fIiIi1KFDBz3//PPV1liTa66mNZ/u2jvZzp079fvf/15nn322IiMj1bx5c91www1Vzl+b47ZkyRL17du3wv7XtP9VTd+DauL777+XzWbThx9+6Jm2evVq2Ww29e7du8K8gwcPVv/+/T0/lz+vNT2uR44cqfPv/qWXXqqLLrpImZmZGjx4sBo3bqykpCT961//qtO+14bD4VBiYmK9rOvo0aMqKSmp1TI1/T2sze9gba7Bqlh5Pk6lPs9VGbvdruTk5Bp1b6jNvL4QcC2AJyu7CJo2beqZlp2drfPOO082m01/+MMfFB8fr48//li33367cnNzNW7cON19991KSkrS1KlT9ac//Un9+vVTQkJCtdupyTolae/evUpNTdWRI0d01113qXPnztqzZ4/mzZun/Px8XXvttdq8ebPeeustPf3004qLi5MkxcfHV9rmkCFDFB0drXfeecfzh73M3Llz1a1bN3Xv3r3KeqvbzjXXXKPJkyfrzTff1DXXXFNhmTfffFMdOnRQWlraqQ96NX73u98pJSVFGRkZyszM1IsvvqgWLVroH//4R7XL1PY8nOn26/P8SKX9QAYMGKCYmBj95S9/UVhYmJ5//nldcsklWrp0aYU/mnU9RjXdji+P5emOY3h4eJXr/eGHH3TZZZcpPj5eU6ZMUUlJiSZPnlxlnTW95mpac23P7Xfffafly5drxIgRat26tXbs2KEZM2bokksu0U8//aSoqKhaH7c1a9bo8ssvV8uWLfXII4/I5XLp0UcfrbaGMzkep9O9e3c1adJEX375pa666ipJ0ldffaWQkBCtW7dOubm5iomJkdvt1vLly6tt0ajpca3r775U+nvTqlUrDR06VGPGjNGwYcM0a9Ys3X///frNb36jc84557TrKC4uVk5Ozmnnk6RmzZopJKR+20/GjBmjY8eOyW63a8CAAXryySc9d7NOpba/h6c7zrW5BqtTH+fjZFafn/Ly8vJUUFCgnJwcffjhh/r44481fPjwM57X56y+B11fyvrDfP755+bAgQNm9+7dZt68eSY+Pt44HA6ze/duz7y33367admypTl48GCFdYwYMcLExsaa/Px8Y8yJvhnvvvtuldsq35+lpuscOXKkCQkJMd99912lfahJf5mTt33jjTeaFi1amJKSEs88+/btMyEhIebRRx89Zc3VbWfixInG4XCYI0eOeKbt37/fhIaGmsmTJ1eq6VT1GXOi78htt91WYd5rrrnGNG/e/JTrM6b68zBq1CjTtm3bSvOf3FelNts/k/NT1b4PGzbMhIeHm59//tkzbe/evaZx48bmoosuqlONVanpdqo7llU5k3NZk+NY1TaGDRtmIiIizM6dOz3z/PTTT8Zut1fqf1TTa642x7Y2fQDL1l/eihUrjCTz2muvVZhe0xqGDh1qoqKizJ49ezzTtmzZYkJDQyvt/8nHrqbHozaGDBliUlNTPT9fe+215tprrzV2u918/PHHxhhjMjMzjSTzwQcfVFtbTfoA1vV3f+/evUaSiY+Pr/A+/9NPPxlJ5tVXX63RvpZdGzX5qu7347vvvqt1v7Kvv/7aXHfddeall14yH3zwgcnIyDDNmzc3ERERJjMz87TL1/T3sKbHuTbXYFXq63ycrD7OT3l1OVdl7r77bs+2QkJCzPXXX28OHTp0xvP6WsDdAk5PT1d8fLySk5N1/fXXq1GjRvrwww/VunVrSZIxRv/3f/+noUOHyhijgwcPer4GDRqknJwcZWZm1mqbNV2n2+3W/PnzNXTo0Cr/Z1eXIfbDhw/X/v37tWTJEs+0efPmye121/l/GSNHjpTT6dS8efM80+bOnauSkhLdcsstdVqnJN1zzz0Vfh4wYIB+/fVX5ebm1nmd9bn9+j4/LpdLn332mYYNG6b27dt7prds2VI33XSTli1bVmnf63KM6rKdM3WqOut6HF0ulz799FMNGzZMbdq08Uzv0qWLBg0aVGHeulzH9f37FxkZ6fm+uLhYv/76qzp27KgmTZpU+x5yqhpcLpc+//xzDRs2TK1atfLM07FjRw0ePPiUtXjjfa2svszMTOXl5UkqvTV4xRVXqGfPnvrqq68klbYK2mw2XXjhhbVef3l1PT8//PCDJGny5Mme93lJCgsLk6RqW5tP1qNHDy1atKhGX/V5G/H888/XvHnzdNttt+mqq67ShAkT9M0338hms2nixImnXb62v4en+x2s6TVYnfo6Hyez6vxUZdy4cVq0aJFeffVVDR48WC6Xq0LXlrrO62sBdwv4ueeeU6dOnZSTk6OXX35ZX375pRwOh+f1AwcO6MiRI3rhhRf0wgsvVLmOso7yNVXTdR44cEC5ubnV3pati8svv1yxsbGaO3euBg4cKKk0rPXs2VOdOnWq0zo7d+6sfv366c0339Ttt98uqfT273nnnaeOHTvWudbybyjSidvyhw8fVkxMTJ3XW1/br+/zc+DAAeXn5+vss8+u9FqXLl3kdru1e/dudevWrcY11td2ztSp6iwoKKjTcTxw4IAKCgp01llnVXrt7LPP1sKFCyvMW9vruL5//woKCpSRkaHZs2drz549MsZ4XqvuVtWpaii7VVTVNXa6684b72tSaTgoKSnRihUrlJycrP3792vAgAH68ccfKwTArl27qlmzZrVef3l1PT9lgWPYsGEVpm/cuFGSPNfFjBkzNGvWLP3www966KGHNGXKlErbS09PP5NdqDcdO3bU1Vdfrffee08ul+uUA2pq+3t4quOcn59f42uwOjU9H06nU/fee68+//xzHTlyRF27dtXTTz9dbRcjfzo/nTt3VufOnSWVNphcdtllGjp0qL799ttK/8Gtzby+FnABMDU11dPqMGzYMF144YW66aabtGnTJkVHR8vtdkuSbrnlFo0aNarKdZx77rm12mZN11n+wqwvDodDw4YN0/vvv69///vfys7O1tdff62pU6ee0XpHjhyp++67T7/88oucTqe++eYbPfvss2e0zurexOp6XE7VkuSL7XtDQ6hRsr7OulzH9V3zH//4R82ePVvjxo1TWlqaYmNjZbPZNGLECE99J/PWcfPG+5okz2CUL7/8Um3atFGLFi3UqVMnDRgwQP/+97/ldDr11VdfVeovXBd1PTbff/+9EhMTlZSUVGH6unXrFBoaqq5du0oqbRGfMmWK5syZU+V6ioqKdOjQoRrVGh8f7/VRzsnJySoqKlJeXt4pA3Btfw+9fe3W9HyUlJSoXbt2WrZsmVq3bq133nlHQ4cO1Y4dOxQdHV1pvf52fsq7/vrrdffdd2vz5s1V/ke8rvN6W8AFwPLsdrsyMjJ06aWX6tlnn9WECRMUHx+vxo0by+Vy1dv/Jmq6TrfbrZiYGM/I3OrU9n8Fw4cP16uvvqrFixdrw4YNMsbU6PbvqbYzYsQIjR8/Xm+99ZYKCgoUFhbmPx1Xj2vatGmVo6l27txZp/XFx8fX6/mJj49XVFSUNm3aVOm1jRs3KiQkRMnJyXWq1Yrt1KaemhzHqpaLjIzUli1bKr128r554zqWanftzZs3T6NGjdJTTz3lmVZYWFjnEX4tWrRQRESEtm7dWum1qqaV563jER4ertTUVH311Vdq06aN56kKAwYMkNPp1Jtvvqns7GxddNFFp1yPN1s6fvjhB/Xo0aPS9O+//16dOnXy3AEqa5GqrhVr+fLluvTSS2u0ze3bt1f5BIL6tG3bNkVERFQZhsqrz9/D2lyD1anp+WjUqJEmTZrkeb3sb86mTZvUp0+fSsv72/kpr6CgQFL1Lf91ndfbAjoAStIll1yi1NRUTZ8+XePGjVNERISuu+46zZkzR+vXr690m+rAgQM1GnFXnt1ur9E6Q0JCNGzYML3xxhtatWpVpf5RxhjZbDY1atRIkmp8Aaenp6tZs2aaO3euNmzYoNTUVKWkpJx2uVNtJy4uToMHD9Ybb7yhwsJCXX755Z7Re/6iQ4cOysnJ0ffff+9p3di3b1+Vj7Cpifo+P3a7XZdddpk++OAD7dixw/OGlJ2drTlz5ujCCy+sl1vfvtpOTdX0OJ7Mbrdr0KBBmj9/vnbt2uW5VbVhwwZ9+umnleat7+tYOvU1UVW9J7eaPPPMM9W2QNdkfenp6Zo/f7727t3r6Qe4detWffzxx6dd1hvHQyoNe9OmTdPPP/+sP//5z5JK3x+6dOniGTlaFgyrU9v3tJpyuVzasGGDfvvb31Z6bd26derVq1eN11XWx6wm6trHLD8/X7t27VJcXJzn/bSqc7Nu3Tp9+OGHGjx48GlHs9bn72FtrsGqnMn52LJliw4dOlRtdwdfnJ/yqjpX+/fvV4sWLSrMV1xcrNdee02RkZGe1s3azmuVgA+AkvTAAw/ohhtu0CuvvKJ77rlHTzzxhL744gv1799fd955p7p27apDhw4pMzNTn3/+eY2bmcur6TqnTp2qzz77TBdffLHuuusudenSRfv27dO7776rZcuWqUmTJp7//Tz00EMaMWKEwsLCNHToUM+b6MnCwsJ07bXX6u2331ZeXp7++c9/1qjm021n5MiRngeTPvbYY7U+Jt42YsQIPfjgg7rmmmv0pz/9Sfn5+ZoxY4Y6depUpw7v0pmdn6r8/e9/16JFi3ThhRfq97//vUJDQ/X888/L6XTqf//3f+u871Ztp6Zqchyr8sgjj+iTTz7RgAED9Pvf/14lJSV65pln1K1bN33//fcV5vXGdVyba+/KK6/U66+/rtjYWHXt2lUrVqzQ559/rubNm9d6u2WmTJmizz77TBdccIHuvfdeuVwuPfvss+revftpP/+6NsfDZrPp4osvrjB4rDoDBgzQ448/rt27d1cIehdddJGef/55tWvXrkJn/6rU9j2tprZs2aLCwsJKLU4FBQXaunVrtbfDq3ImfcyeffZZHTlyRHv37pUk/ec//9Evv/wiqfQWbWxsrCRp5cqVuvTSSzV58mRPH8Thw4crMjJS559/vlq0aKGffvpJL7zwgqKiovTEE0+cdtv1/XtYm2vwZHU9HwUFBbrllls0ceJEz7E6WX31ATyTc3X33XcrNzdXF110kZKSkpSVlaU333xTGzdu1FNPPVWhtbY281rGZ+ONvazssQNVPXbC5XKZDh06mA4dOngel5KdnW3Gjh1rkpOTTVhYmElMTDQDBw40L7zwgme52jwGpqbrNMaYnTt3mpEjR3oeUdO+fXszduxY43Q6PfM89thjJikpyYSEhFTYVnXbXrRokZFkbDZbhaH3p6u5uu0YY4zT6TRNmzY1sbGxNf4ovVM9OuTkjzWq6UdZnerRJZ999pnp3r27CQ8PN2effbZ54403qn0MTE23X9fzU936MjMzzaBBg0x0dLSJiooyl156qVm+fHmFec70GNV0O/X1GJia1FmT41jVckuXLjV9+vQx4eHhpn379mbmzJnVfgxVTa652h7bU10T5R0+fNiMGTPGxMXFmejoaDNo0CCzceNG07ZtWzNq1KgK89amhsWLF5tevXqZ8PBw06FDB/Piiy+aP//5zyYiIuK0y9bkeBw9etRIMiNGjKhyv06Wm5tr7Ha7ady4cYXHTb3xxhtGkrn11lsrLVNVbdUd1zP53X/nnXeMJLN+/foK01euXGkkmY8++qjSMnffffdpH2dVW23btq3RI0nKrr/y2//Xv/5lUlNTTbNmzUxoaKhp2bKlueWWW8yWLVtqtO2a/h7W5jjX5hosry7no6ioyAwZMsTcdNNNPvkYzTM5V2+99ZZJT083CQkJJjQ01DRt2tSkp6dXeARSXea1is0YP+tdDr9RUlLieZjnSy+9ZHU5QNAaNmyYfvzxxyr7ZtXWwoULdeWVV2rdunV1eiBvQ3fPPfcoMTGx0ihg+J7b7dZNN92kvLw8vf/++woNDYqbkn4j4J4DiPozf/58HThwQCNHjrS6FCBolHUSL7NlyxYtXLjwtB9FWVNffPGFRowYEXThr6SkRIWFhXK5XBW+h3XuvvtuT9cQwp/v0QKISr799lt9//33euyxxxQXF1fn/nQAaq9ly5YaPXq02rdvr507d2rGjBlyOp1as2ZNlc9nQ81MmTJFjzzySIVps2fP1ujRo60pKMjt3LlT7dq1U0RERIVHtnz88cenHVSE+kEARCWjR4/WG2+8oZ49e+qVV16p1wdXAzi1MWPG6IsvvlBWVpYcDofS0tI0depU9e7d2+rSAAQQAiAAAECQoQ8gAABAkCEAAgAABBkCIAAAQJBh3PUZcLvd2rt3rxo3buzVz7oEAAD1xxijo0ePqlWrVqf9uL1ARQA8A3v37lVycrLVZQAAgDrYvXv3aT/KMFARAM9A48aNJZX+AsXExFhcDQAAqInc3FwlJyd7/o4HIwLgGSi77RsTE0MABACggQnm7lvBeeMbAAAgiBEAAQAAggwBEAAAIMgQAAEAAIIMARAAACDIEAABAACCDAEQAAAgyBAAAQAAggwBEAAAIMgQAAEAAIJMwATAL7/8UkOHDlWrVq1ks9k0f/780y6zZMkS9e7dWw6HQx07dtQrr7zi9ToBAACsFjABMC8vTz169NBzzz1Xo/m3b9+uIUOG6NJLL9XatWs1btw43XHHHfr000+9XCkAAIC1Qq0uoL4MHjxYgwcPrvH8M2fOVEpKip566ilJUpcuXbRs2TI9/fTTGjRokLfKBAAAsFzABMDaWrFihdLT0ytMGzRokMaNG1ftMk6nU06n0/Nzbm6ut8oDgKC2cvshPfrRjyooclldCgJQSWGe1SVYLmgDYFZWlhISEipMS0hIUG5urgoKChQZGVlpmYyMDD3yyCO+KhEAgtb8tXu0fg//yYZ3uJ35VpdguaANgHUxceJEjR8/3vNzbm6ukpOTLawIAAKTy2UkSSP6JeuaXkkWV4NAk3f0qAZOt7oKawVtAExMTFR2dnaFadnZ2YqJiamy9U+SHA6HHA6HL8oDgKDmNqUBsE3zKPVv39ziahBocnPDrC7BcgEzCri20tLStHjx4grTFi1apLS0NIsqAgCUcZfmP4XYbNYWAgSogAmAx44d09q1a7V27VpJpY95Wbt2rXbt2iWp9PbtyJEjPfPfc8892rZtm/7yl79o48aN+ve//6133nlH999/vxXlAwDKMSpNgMQ/wDsCJgCuWrVKvXr1Uq9evSRJ48ePV69evTRp0iRJ0r59+zxhUJJSUlK0YMECLVq0SD169NBTTz2lF198kUfAAIAfMLQAAl4VMH0AL7nkEpmyd4wqVPUpH5dcconWrFnjxaoAAHVR1geQ/Ad4R8C0AAIAAgd9AAHvIgACAPxOWQtgCPkP8AoCIADA75R16QkhAQJeQQAEAPidsi7dxD/AOwiAAAC/c2IQCBEQ8AYCIADA7zAIBPAuAiAAwO8YBoEAXkUABAD4HVoAAe8iAAIA/A4Pgga8iwAIAPA7nlHAJEDAKwiAAAC/w4OgAe8iAAIA/I6hDyDgVQRAAIDfoQ8g4F0EQACA3zlxC5gECHgDARAA4He4BQx4FwEQAOB3TowCtrYOIFARAAEAfodRwIB3EQABAH7nxCAQEiDgDQRAAIDf4aPgAO8iAAIA/I7hFjDgVQRAAIDfOd4ASAsg4CUEQACA33F7hgFbWwcQqAiAAAC/43aX/ksLIOAdBEAAgN/hMTCAdxEAAQB+h08CAbyLAAgA8DsnngNocSFAgCIAAgD8DqOAAe8iAAIA/M6JPoAEQMAbCIAAAL/jeQoM+Q/wCgIgAMDvMAoY8C4CIADA75wYBEICBLyBAAgA8Ds8CBrwLgIgAMBvcQsY8A4CIADA7zAKGPAuAiAAwO+UBUAA3kEABAD4HTcfBQd4FQEQAOB3TNktYP5KAV7BpQUA8DuGFkDAqwiAAAC/w4OgAe8iAAIA/I7b81FwJEDAGwiAAAC/4/kkEIvrAAIVARAA4HfoAwh4FwEQAOB3eBA04F0EQACA3zGePoDW1gEEKgIgAMDveFoAGQYMeAUBEADgd070AbS2DiBQEQABAH7nxChgEiDgDQRAAIDf4UHQgHcRAAEAfocHQQPeRQAEAPgVU9YBULQAAt5CAAQA+JVy+Y/nAAJeQgAEAPgVd4UWQAIg4A0EQACAX3GXawFkEDDgHQRAAIBfcdMHEPA6AiAAwK/QBxDwPgIgAMCvGNEHEPA2AiAAwK+U7wNI/gO8gwAIAPArjAIGvI8ACADwK8Z94nvyH+AdARUAn3vuObVr104RERHq37+/Vq5cecr5p0+frrPPPluRkZFKTk7W/fffr8LCQh9VCwCoCi2AgPcFTACcO3euxo8fr8mTJyszM1M9evTQoEGDtH///irnnzNnjiZMmKDJkydrw4YNeumllzR37lz99a9/9XHlAIDyyj8GkMfAAN4RMAFw2rRpuvPOOzVmzBh17dpVM2fOVFRUlF5++eUq51++fLkuuOAC3XTTTWrXrp0uu+wy3XjjjadtNQQAeFf5FkAbLYCAVwREACwqKtLq1auVnp7umRYSEqL09HStWLGiymXOP/98rV692hP4tm3bpoULF+qKK67wSc0AgKqVBUBa/wDvCbW6gPpw8OBBuVwuJSQkVJiekJCgjRs3VrnMTTfdpIMHD+rCCy+UMUYlJSW65557TnkL2Ol0yul0en7Ozc2tnx0AAHiUNQDS/w/wnoBoAayLJUuWaOrUqfr3v/+tzMxMvffee1qwYIEee+yxapfJyMhQbGys5ys5OdmHFQNAcDjRAkgABLwlIFoA4+LiZLfblZ2dXWF6dna2EhMTq1zm4Ycf1q233qo77rhDknTOOecoLy9Pd911lx566CGFhFTOxhMnTtT48eM9P+fm5hICAaCeeR4ETf4DvCYgWgDDw8PVp08fLV682DPN7XZr8eLFSktLq3KZ/Pz8SiHPbrdLkkz5D6Isx+FwKCYmpsIXAKB+GfoAAl4XEC2AkjR+/HiNGjVKffv2VWpqqqZPn668vDyNGTNGkjRy5EglJSUpIyNDkjR06FBNmzZNvXr1Uv/+/bV161Y9/PDDGjp0qCcIAgB8jz6AgPcFTAAcPny4Dhw4oEmTJikrK0s9e/bUJ5984hkYsmvXrgotfn/7299ks9n0t7/9TXv27FF8fLyGDh2qxx9/3KpdAACIPoCAL9hMdfc7cVq5ubmKjY1VTk4Ot4MBoJ5sP5inS/+5RI0jQvXDlEFWl4MAxN/vAOkDCAAIHGUtgLT/Ad5DAAQA+BX38WHAoXb+RAHewtUFAPArJW76AALeRgAEAPgVV1kLIM+BAbyGAAgA8CtlAdBOAAS8hgAIAPArLkMABLyNAAgA8Cu0AALeRwAEAPgVl5uPggO8jQAIAPArnsfAhPAnCvAWri4AgF/xPAaGJkDAawiAAAC/UjYIhMfAAN5DAAQA+BWXixZAwNsIgAAAv+J5DAz5D/AaAiAAwK+4GAQCeB1XFwDAr3geA8NfKMBruLwAAH7FbWgBBLyNqwsA4FdKGAQCeB0BEADgV3gMDOB9BEAAgF858VFwBEDAWwiAAAC/UhYA7fyFAryGywsA4Fd4DAzgfVxdAAC/4uKzgAGvIwACAPyKm0EggNcRAAEAfqWEQSCA1xEAAQB+5UQfQAIg4C0EQACAX6EPIOB9BEAAgF/hMTCA93F5AQD8Cp8FDHgfVxcAwK8wCATwPgIgAMCvuMsGgdgJgIC3EAABAH6FFkDA+wiAAAC/wiAQwPu4vAAAfuVEAORPFOAtXF0AAL/iOj4K2M4tYMBrCIAAAL/CIBDA+wiAAAC/wiAQwPsIgAAAv+Lms4ABryMAAgD8SgmfBQx4HQEQAOBXTgwCsbgQIIARAAEAfsXlOh4AeRAg4DVcXQAAv8JjYADvIwACAPyKm08CAbyOywsA4FeKXG5JUhgJEPAari4AgF8pOd4HkAAIeA9XFwDArxR7WgDpAwh4CwEQAOBXit20AALextUFAPArxSWlLYChBEDAa7i6AAB+hVvAgPcRAAEAfqXso+DCaQEEvIarCwDgV4q4BQx4HVcXAMCvlLi5BQx4GwEQAOBXinkOIOB1XF0AAL9SNgqYAAh4D1cXAMCvFHMLGPA6AiAAwK9wCxjwPq4uAIDfcLuNXHwSCOB1XF0AAL9RdvtXkkK5BQx4DQEQAOA3ym7/SjwIGvAmri4AgN8ocZ1oAeQWMOA9XF0AAL9RdDwA2mySPYRbwIC3BFQAfO6559SuXTtFRESof//+Wrly5SnnP3LkiMaOHauWLVvK4XCoU6dOWrhwoY+qBQCcrIQRwIBPhFpdQH2ZO3euxo8fr5kzZ6p///6aPn26Bg0apE2bNqlFixaV5i8qKtJvf/tbtWjRQvPmzVNSUpJ27typJk2a+L54AIAkqfh4C2AYrX+AVwVMAJw2bZruvPNOjRkzRpI0c+ZMLViwQC+//LImTJhQaf6XX35Zhw4d0vLlyxUWFiZJateunS9LBgCcxBMAQ2kBBLwpIK6woqIirV69Wunp6Z5pISEhSk9P14oVK6pc5sMPP1RaWprGjh2rhIQEde/eXVOnTpXL5ap2O06nU7m5uRW+AAD1h4dAA74REFfYwYMH5XK5lJCQUGF6QkKCsrKyqlxm27ZtmjdvnlwulxYuXKiHH35YTz31lP7+979Xu52MjAzFxsZ6vpKTk+t1PwAg2HELGPCNgAiAdeF2u9WiRQu98MIL6tOnj4YPH66HHnpIM2fOrHaZiRMnKicnx/O1e/duH1YMAIHP0wLILWDAqwKiD2BcXJzsdruys7MrTM/OzlZiYmKVy7Rs2VJhYWGy2+2eaV26dFFWVpaKiooUHh5eaRmHwyGHw1G/xQMAPMpaAENpAQS8KiD+ixUeHq4+ffpo8eLFnmlut1uLFy9WWlpalctccMEF2rp1q9zlPnZo8+bNatmyZZXhDwDgfUUlpe/J4aH208wJ4EwERACUpPHjx2vWrFl69dVXtWHDBt17773Ky8vzjAoeOXKkJk6c6Jn/3nvv1aFDh3Tfffdp8+bNWrBggaZOnaqxY8datQsAEPScxwOgg1vAgFcFxC1gSRo+fLgOHDigSZMmKSsrSz179tQnn3ziGRiya9cuhYSceENJTk7Wp59+qvvvv1/nnnuukpKSdN999+nBBx+0ahcAIOidaAEkAALeZDPGmNPPhqrk5uYqNjZWOTk5iomJsbocAGjw3sv8RePfWacBZ8Xp9dv7W10OAhR/vwPoFjAAoOEr8twCpg8g4E0EQACA36APIOAbXGEAAL/hLCn9NCYCIOBdXGEAAL/BIBDAN7jCAAB+g1vAgG9whQEA/IYnAIYxCATwJgIgAMBveG4B2/nzBHgTVxgAwG8wCATwDa4wAIDfcDIIBPAJrjAAgN9gEAjgG1xhAAC/4SxmEAjgCwRAAIDfKHIxCATwBa4wAIDfcBYfHwQSxp8nwJu4wgAAfoMWQMA3uMIAAH6jkD6AgE8QAAEAfqPsFnAkARDwKr8OgAUFBVaXAADwocLjATCCPoCAV/nlFeZ0OvXUU08pJSXF6lIAAD5UQAsg4BOWBUCn06mJEyeqb9++Ov/88zV//nxJ0uzZs5WSkqLp06fr/vvvt6o8AIAFCjwtgARAwJtCrdrwpEmT9Pzzzys9PV3Lly/XDTfcoDFjxuibb77RtGnTdMMNN8hu5w0AAIKFMcYzCIQACHiXZQHw3Xff1WuvvaarrrpK69ev17nnnquSkhKtW7dONpvNqrIAABYp+xg4SYoMJwAC3mTZLeBffvlFffr0kSR1795dDodD999/P+EPAIJU2QAQSYrgs4ABr7LsCnO5XAoPD/f8HBoaqujoaKvKAQBYrKz/X5jdplAeBA14lWW3gI0xGj16tBwOhySpsLBQ99xzjxo1alRhvvfee8+K8gAAPlZQdHwASCi3fwFvsywAjho1qsLPt9xyi0WVAAD8gWcACP3/AK+zLADOnj3bqk0DAPwQzwAEfIdOFgAAv+DkU0AAn+EqAwD4BVoAAd8hAAIA/EJZH0AHARDwOgIgAMAv5BeVSKIFEPAFAiAAwC/kH38MTCMHARDwNgIgAMAvlAXAqHDLHlABBA0CIADAL5TdAo7iOYCA1xEAAQB+gRZAwHcIgAAAv0ALIOA7BEAAgF840QJIAAS8jQAIAPALeU5uAQO+QgAEAPiFslvAPAYG8D4CIADALzAIBPAdAiAAwC8wCATwHQIgAMAvMAgE8B0CIADAL+Q5y1oAuQUMeBsBEABgOWOMjh0PgI0jCICAtxEAAQCWc5a4VewykgiAgC8QAAEAljtaWNr6Z7NJjbgFDHgdARAAYLmjhcWSpOjwUIWE2CyuBgh8BEAAgOXo/wf4FgEQAGC5slvA0QRAwCcIgAAAy5XdAm4cEWZxJUBwIAACACznaQF00AII+AIBEABgubIASB9AwDcIgAAAyzEIBPAtAiAAwHL0AQR8iwAIALCcpwWQPoCATxAAAQCWy+UxMIBPEQABAJY75hkEwi1gwBcIgAAAy3k+Co5bwIBPEAABAJYrewxMDLeAAZ8gAAIALHfiMTDcAgZ8IaAC4HPPPad27dopIiJC/fv318qVK2u03Ntvvy2bzaZhw4Z5t0AAQJX4LGDAtwImAM6dO1fjx4/X5MmTlZmZqR49emjQoEHav3//KZfbsWOH/ud//kcDBgzwUaUAgPLcbuNpAaQPIOAbARMAp02bpjvvvFNjxoxR165dNXPmTEVFRenll1+udhmXy6Wbb75ZjzzyiNq3b+/DagEAZXIKij3fx0ZyCxjwhYAIgEVFRVq9erXS09M900JCQpSenq4VK1ZUu9yjjz6qFi1a6Pbbb6/RdpxOp3Jzcyt8AQDOzJGCEyOAw0MD4s8S4PcC4ko7ePCgXC6XEhISKkxPSEhQVlZWlcssW7ZML730kmbNmlXj7WRkZCg2NtbzlZycfEZ1AwCkw/lFkqQmUbT+Ab4SEAGwto4ePapbb71Vs2bNUlxcXI2XmzhxonJycjxfu3fv9mKVABAcjhwPgE2jwi2uBAgeAdHbNi4uTna7XdnZ2RWmZ2dnKzExsdL8P//8s3bs2KGhQ4d6prndbklSaGioNm3apA4dOlRazuFwyOFw1HP1ABDcDueV3gKmBRDwnYBoAQwPD1efPn20ePFizzS3263FixcrLS2t0vydO3fWDz/8oLVr13q+rrrqKl166aVau3Ytt3YBwIdO3AKmBRDwlYBoAZSk8ePHa9SoUerbt69SU1M1ffp05eXlacyYMZKkkSNHKikpSRkZGYqIiFD37t0rLN+kSRNJqjQdAOBdZaOAm9ICCPhMwATA4cOH68CBA5o0aZKysrLUs2dPffLJJ56BIbt27VJISEA0eAJAQKEFEPA9mzHGWF1EQ5Wbm6vY2Fjl5OQoJibG6nIAoEEaOydTC77fp0lXdtVtF6ZYXQ6CAH+/A6QPIACg4fKMAm7ELWDAVwiAAABLnRgFzC1gwFcIgAAAS/EcQMD3CIAAAEuVfRRcEz4HGPAZAiAAwDLOEpfyi1ySaAEEfIkACACwzJH80ta/EJvUOCJgnkwG+D0CIADAMgeOOiVJzRo5FBJis7gaIHgQAAEAljl4rDQAxkVz+xfwJQIgAMAyB4+VjgCOb+ywuBIguBAAAQCWKbsFHB9NAAR8iQAIALCM5xYwLYCATxEAAQCWoQ8gYA0CIADAMmUBkD6AgG8RAAEAlinrAxhHH0DApwiAAADLlI0CJgACvkUABABYosTl1uF8HgMDWIEACACwxKG8IhlT+jFwfA4w4FsEQACAJfaX+xg4Ox8DB/gUARAAYIn9RwslSYmx3P4FfI0ACACwxL6c4wEwJtLiSoDgQwAEAFgi63gAbBkbYXElQPAhAAIALOFpASQAAj5HAAQAWIIWQMA6BEAAgCX25RRIogUQsAIBEADgc8YYzy3glrEMAgF8jQAIAPC5o84S5Re5JEmJMbQAAr5GAAQA+FxZ/78mUWGKDLdbXA0QfAiAAACfO/EMQFr/ACsQAAEAPvfL4XxJUlIT+v8BViAAAgB8bveh0hHAyc2iLK4ECE4EQACAz+0+3gLYuiktgIAVCIAAAJ/75VBZAKQFELACARAA4HO7D5fdAqYFELACARAA4FN5zhIdyiuSRB9AwCoEQACAT5X1/4uNDFNMRJjF1QDBiQAIAPCpEyOAuf0LWIUACADwqV3HB4AkMwAEsAwBEADgU9sPHpMkpcQ1srgSIHgRAAEAPrX9YJ4kAiBgJQIgAMCnth8oDYDt4wmAgFUIgAAAn8kvKtHenEJJUvu4aIurAYIXARAA4DM7DpYOAGkSFaamjcItrgYIXgRAAIDP0P8P8A8EQACAz2w7wAhgwB8QAAEAPrNlf2kAPKtFY4srAYIbARAA4DObs49Kks5OZAAIYCUCIADAJ4pdbv18/BZwpwRaAAErEQABAD6x42Ceil1GjcLtSmrC5wADViIAAgB8YtPx27+dEhvLZrNZXA0Q3AiAAACf2Jx1vP8ft38ByxEAAQA+8dO+4y2ABEDAcgRAAIBPrN+TI0k6p3WsxZUAIAACALxu/9FCZeUWymaTuraMsbocIOgRAAEAXlfW+tchPlqNHKEWVwOAAAgA8LoffsmVJJ2bxO1fwB8QAAEAXvfD8RbA7gRAwC8QAAEAXvfDniOSGAAC+AsCIADAq/YfLVR2rpMBIIAfIQACALzq+90MAAH8TUAFwOeee07t2rVTRESE+vfvr5UrV1Y776xZszRgwAA1bdpUTZs2VXp6+innBwDUzXc7DkmS+rZtanElAMoETACcO3euxo8fr8mTJyszM1M9evTQoEGDtH///irnX7JkiW688UZ98cUXWrFihZKTk3XZZZdpz549Pq4cAALbyuMBsF+7ZhZXAqCMzRhjrC6iPvTv31/9+vXTs88+K0lyu91KTk7WH//4R02YMOG0y7tcLjVt2lTPPvusRo4cWaNt5ubmKjY2Vjk5OYqJoV8LAJysoMilc6Z8qhK30Vd/uVTJzaKsLgng77cCpAWwqKhIq1evVnp6umdaSEiI0tPTtWLFihqtIz8/X8XFxWrWjP+hAkB9WbP7sErcRgkxDrVuGml1OQCOC4jeuAcPHpTL5VJCQkKF6QkJCdq4cWON1vHggw+qVatWFULkyZxOp5xOp+fn3NzcuhUMAEFi1Y7Dkkpv/9psNourAVAmIFoAz9QTTzyht99+W++//74iIiKqnS8jI0OxsbGer+TkZB9WCQANT9kAkNQU7q4A/iQgAmBcXJzsdruys7MrTM/OzlZiYuIpl/3nP/+pJ554Qp999pnOPffcU847ceJE5eTkeL527959xrUDQKAqKnFr9c7SFsC+bQmAgD8JiAAYHh6uPn36aPHixZ5pbrdbixcvVlpaWrXL/e///q8ee+wxffLJJ+rbt+9pt+NwOBQTE1PhCwBQtVU7Dym/yKW46HB1TmxsdTkAygmIPoCSNH78eI0aNUp9+/ZVamqqpk+frry8PI0ZM0aSNHLkSCUlJSkjI0OS9I9//EOTJk3SnDlz1K5dO2VlZUmSoqOjFR0dbdl+AECg+HLzQUnSgLPiFRJC/z/AnwRMABw+fLgOHDigSZMmKSsrSz179tQnn3ziGRiya9cuhYScaPCcMWOGioqKdP3111dYz+TJkzVlyhRflg4AAenLzQckSRd1irO4EgAnC5jnAFqB5wgBQNUOHHWq3+OfS5JW/S1dcdEOiysCTuDvd4D0AQQA+JevtpS2/nVPiiH8AX6IAAgAqHf/3Vj6MZwXnRVvcSUAqkIABADUq8Jil744HgAv63bqR3EBsAYBEABQr5ZtOai8Ipdaxkbo3KRYq8sBUAUCIACgXn3yY+ljtQZ1S+TxL4CfIgACAOpNscutzzeUfirT5d25/Qv4KwIgAKDeLP/5Vx3JL1bzRuHq146PfwP8FQEQAFBv3sv8RZJ05bktZef2L+C3CIAAgHpxtLBYnx7v/3dt79YWVwPgVAiAAIB68fH6LBUWu9UhvpHObc3oX8CfEQABAPXi/1aX3v69tndr2Wzc/gX8GQEQAHDGtu4/qm+3H1KITbqmV5LV5QA4DQIgAOCMvbZipyQpvUuCWjWJtLgaAKdDAAQAnJFjzhK9l7lHkjQyrZ21xQCoEQIgAOCMvJf5i445S9Q+vpEu6Njc6nIA1AABEABQZyUut2Z9tU2SNCqtHYM/gAaCAAgAqLMFP+zT7kMFat4oXL/rm2x1OQBqiAAIAKgTY4xmLPlZkjTmgnaKDLdbXBGAmiIAAgDq5JP1WdqYdVTRjlDdyuAPoEEhAAIAaq3Y5daTn26SJN12YYpiI8MsrghAbRAAAQC19s6q3dp2ME/NG4XrzgEpVpcDoJYIgACAWskvKtG/Pt8iSfrjbzqqcQStf0BDQwAEANTKjCU/a/9Rp5KbReqm/m2tLgdAHRAAAQA1tnX/Uc1cWjry96+Duyg8lD8jQEPElQsAqBFjjB56f72KXUa/6dxCl3dPtLokAHVEAAQA1Mi7q37Rt9sPKSIsRI9c1Y1P/QAaMAIgAOC0dv2ar0c/+kmSNC69k5KbRVlcEYAzQQAEAJxSicutcXPX6JizRP3aNdWdA9pbXRKAM0QABACc0v/771Zl7jqixo5QPT28p+wh3PoFGjoCIACgWp//lK1n/lv6zL+/X9NdrZty6xcIBARAAECVtu4/pnFz18oY6dbz2urqnklWlwSgnhAAAQCVHMor0p2vrdIxZ4lSU5pp0tCuVpcEoB4RAAEAFeQ5SzRm9kptP5inpCaR+vfNvRVm588FEEi4ogEAHs4Sl+55Y7XW/ZKjZo3C9drtqYqLdlhdFoB6RgAEAEiSCotduvO11fpqy0FFhds1e3Q/dYiPtrosAF4QanUBAADr5ReV6M7XVunrrb8qMsyuF0f1VY/kJlaXBcBLCIAAEOT25xbq9ldX6Yc9OWoUbtfsMalKTWlmdVkAvIgACABBbFPWUd32ynfac6RAzRqF68VRfdW7TVOrywLgZQRAAAhSC3/Yp7/M+17HnCVqH9dIs8f0U9vmjawuC4APEAABIMg4S1yaumCDXl2xU5KUmtJML9zaR02iwi2uDICvEAABIIj8tDdXD8xbpx/35kqS7rm4g/58WSee8wcEGQIgAASBohK3nvtiq577YqtK3EZNosI07Xc99JvOCVaXBsACBEAACHArfv5VUz78UZuyj0qSBnVL0GPDuqtF4wiLKwNgFQIgAASonb/maerCDfr0x2xJUrNG4Xr06m4ack5L2Ww2i6sDYCUCIAAEmH05BZq55Ge9tXK3ilxu2UNsurl/G41L76RmjRjoAYAACAABY8+R0uA397vS4CdJA86K08NXdlWnhMYWVwfAnxAAAaABM8boux2H9cry7fr0x2y53EZS6aNdxg08S2kdmnO7F0AlBEAAaIByCor10fd7NefbXZ5HukjSBR2b6w+XlgY/AKgOARAAGogSl1tfbjmg/8vco0U/ZauopPQ2ryM0RNf2TtLo81N0diK3egGcHgEQAPxYYbFLX289qE9/zNLnG/brUF6R57WzExrruj5JuqFPspoyuANALRAAAcDPZOUUatnWg1q8IVtLNx9QfpHL81qzRuG6umcrXde7tbq1iqF/H4A6IQACgMVyCor17bZf9fXWg/r651+1df+xCq+3io3QZd0SdVnXBPVLacbHtgE4YwRAAPAht9to28Fjytx5RJm7Dmv1zsPaeuCYjDkxj80mnZsUq4s6xeuyronqnkRLH4D6RQAEAC8pdrn184Fj+mlvbunXvlz9uDdXOQXFleZNiWukCzo214Ud45TWPk6xUWEWVAwgWBAAAeAMOUtc2vlrvrYdOKafD+Rp24E8bczK1ZbsY54HMpfnCA1Rj9ZN1LttU/Vu00S92jRVfGOHBZUDCFYEQACogaOFxdpzpEC/HCrQniMF2vFrnrYfLA17vxzOl9tUvVxjR6i6tIxR11Yx6nr837MTG9OPD4ClCIAAgpoxRkedJdqf69T+o4U6cNSp/blO7c0p0C+HC7TncIF+OZyv3MKSU66nsSNU7eMbqX18tNrHNdJZCdHq1ipWrZtG0n8PgN8hAAIIOM4Sl47kF+tQXpEO5xfpcF6xDucX6Uh+kQ4eK9L+o4XHA19p6CssrnybtipNo8KU1DRSrZtEKblZpNrHRyslrpHaxzdSfLSDoAegwSAAAvA7JS63jjlLdLSw7Ku49F9nsY4Vlij3pOmH8ysGvfLPzaupxhGhim/sUIvGDrVoHKGWsRFq3TRSrZtGKalppJKaRKqRg7dMAIGBdzMAtWaMkbPErSKXW85it5wlLhUUuZRf5FJB8Ynv84tKVFB8fPrx1/KLSjw/V5y/NNQdc5bUKcCdzB5iU5PIMDVtFK6mUWFqGhWuplHhah4dXhryYiI8YS++sUOR4fZ6ODIA0DAEVAB87rnn9OSTTyorK0s9evTQM888o9TU1Grnf/fdd/Xwww9rx44dOuuss/SPf/xDV1xxhQ8rBipyu42K3W6VuIxKXCe+L3a5VeI2KnG5VewyKnEf//f4zyeWcav4+HynWr7I5VZRSWlwcxafCHJFrmqmFbvKhT13lSNbvcERGqLGEWGKiQhVdESoGkeEqrEj7MT3x19rEhWuZo3CSv89HvQaR4QqJIRbsgBQlYAJgHPnztX48eM1c+ZM9e/fX9OnT9egQYO0adMmtWjRotL8y5cv14033qiMjAxdeeWVmjNnjoYNG6bMzEx17969Vtvee6RAua7SQ2lOGglY9rORqfS68cxjTvq54hxVL1P1ek+eXpuaTIV5qq/JGMltSudxm9L1lE4r9+/xdZTNW/aaOf5ahXmPr8Ptluc1lVuP+/h2VLY9z3bLvi9Xk05sp7rtuk1p0HK5jVzGlH5vjFxueb4/Ma10/S738dcrTavFesq/ftK0snBW3UhSfxceGqKocLuiwuyKDLcrKjxUkZ7vy/0bZldkeGjpvMd/jgoPVWR4iCLDykJdabCLdoQqPJSRsgDgDTZT9pe+gevfv7/69eunZ599VpLkdruVnJysP/7xj5owYUKl+YcPH668vDx99NFHnmnnnXeeevbsqZkzZ9Zom7m5uYqNjVXyuHcU4oiqnx0BThIaYlOo3aawkBCF2m0KtYcoLKT036qn2xRmDzm+XIjC7DaFhlSc1xFqlyMsROH2kHL/2uU4/rMjNEThoSFyhNqP/1vx+/LTwuw2Bj8AaFDK/n7n5OQoJibG6nIsERAtgEVFRVq9erUmTpzomRYSEqL09HStWLGiymVWrFih8ePHV5g2aNAgzZ8/v9rtOJ1OOZ1Oz885OTmSJLurUCGuEJX9CSz7W1j9z7YKP+vk149/V/5vanXL2k5aSXXbru718us88fPJdVdcNsRWOsVmK102xFY6T9nPNpsUUv5nqXSek+YNsZ34V7bj6ztpXqn035By65Wtcg22ctPK5j0xvXSbZeuVSvuH2UNsCrHZZLfZFBJS9q8UEiLZbeVeDyl9vXReeaad/Lr9pO9DbCq3TlsV6yy3LtuJ0GYvF9r8K1wZSa7SL7dkiqTCIqnQ6rIAoJZyc3MlnbjbFYwCIgAePHhQLpdLCQkJFaYnJCRo48aNVS6TlZVV5fxZWVnVbicjI0OPPPJIpek7nhlZh6oBAICVfv31V8XGxlpdhiUCIgD6ysSJEyu0Gh45ckRt27bVrl27Au4XKDc3V8nJydq9e3fANY+zbw1TIO+bFNj7x741TIG8bzk5OWrTpo2aNWtmdSmWCYgAGBcXJ7vdruzs7ArTs7OzlZiYWOUyiYmJtZpfkhwOhxyOyp/XGRsbG3AXR5mYmBj2rQFi3xquQN4/9q1hCuR9CwkJ3oFmAbHn4eHh6tOnjxYvXuyZ5na7tXjxYqWlpVW5TFpaWoX5JWnRokXVzg8AABAoAqIFUJLGjx+vUaNGqW/fvkpNTdX06dOVl5enMWPGSJJGjhyppKQkZWRkSJLuu+8+XXzxxXrqqac0ZMgQvf3221q1apVeeOEFK3cDAADA6wImAA4fPlwHDhzQpEmTlJWVpZ49e+qTTz7xDPTYtWtXhabe888/X3PmzNHf/vY3/fWvf9VZZ52l+fPn1+oZgA6HQ5MnT67ytnBDx741TOxbwxXI+8e+NUzsW2ALmOcAAgAAoGYCog8gAAAAao4ACAAAEGQIgAAAAEGGAAgAABBkCIB19Nxzz6ldu3aKiIhQ//79tXLlSqtLqpMvv/xSQ4cOVatWrWSz2Sp9FrIxRpMmTVLLli0VGRmp9PR0bdmyxZpiayEjI0P9+vVT48aN1aJFCw0bNkybNm2qME9hYaHGjh2r5s2bKzo6Wtddd12lh4P7qxkzZujcc8/1PKA1LS1NH3/8sef1hrxv5T3xxBOy2WwaN26cZ1pD3rcpU6Yc/4zqE1+dO3f2vN6Q902S9uzZo1tuuUXNmzdXZGSkzjnnHK1atcrzekN9P2nXrl2l82az2TR27FhJDfu8uVwuPfzww0pJSVFkZKQ6dOigxx57rMJn5DbU8yZJR48e1bhx49S2bVtFRkbq/PPP13fffed5vSHv2xkzqLW3337bhIeHm5dfftn8+OOP5s477zRNmjQx2dnZVpdWawsXLjQPPfSQee+994wk8/7771d4/YknnjCxsbFm/vz5Zt26deaqq64yKSkppqCgwJqCa2jQoEFm9uzZZv369Wbt2rXmiiuuMG3atDHHjh3zzHPPPfeY5ORks3jxYrNq1Spz3nnnmfPPP9/Cqmvuww8/NAsWLDCbN282mzZtMn/9619NWFiYWb9+vTGmYe9bmZUrV5p27dqZc88919x3332e6Q153yZPnmy6detm9u3b5/k6cOCA5/WGvG+HDh0ybdu2NaNHjzbffvut2bZtm/n000/N1q1bPfM01PeT/fv3VzhnixYtMpLMF198YYxp2Oft8ccfN82bNzcfffSR2b59u3n33XdNdHS0+de//uWZp6GeN2OM+d3vfme6du1qli5darZs2WImT55sYmJizC+//GKMadj7dqYIgHWQmppqxo4d6/nZ5XKZVq1amYyMDAurOnMnB0C3220SExPNk08+6Zl25MgR43A4zFtvvWVBhXW3f/9+I8ksXbrUGFO6H2FhYebdd9/1zLNhwwYjyaxYscKqMs9I06ZNzYsvvhgQ+3b06FFz1llnmUWLFpmLL77YEwAb+r5NnjzZ9OjRo8rXGvq+Pfjgg+bCCy+s9vVAej+57777TIcOHYzb7W7w523IkCHmtttuqzDt2muvNTfffLMxpmGft/z8fGO3281HH31UYXrv3r3NQw891KD3rT5wC7iWioqKtHr1aqWnp3umhYSEKD09XStWrLCwsvq3fft2ZWVlVdjX2NhY9e/fv8Hta05OjiR5Pvh79erVKi4urrBvnTt3Vps2bRrcvrlcLr399tvKy8tTWlpaQOzb2LFjNWTIkAr7IAXGeduyZYtatWql9u3b6+abb9auXbskNfx9+/DDD9W3b1/dcMMNatGihXr16qVZs2Z5Xg+U95OioiK98cYbuu2222Sz2Rr8eTv//PO1ePFibd68WZK0bt06LVu2TIMHD5bUsM9bSUmJXC6XIiIiKkyPjIzUsmXLGvS+1YeA+SQQXzl48KBcLpfnE0bKJCQkaOPGjRZV5R1ZWVmSVOW+lr3WELjdbo0bN04XXHCB55NesrKyFB4eriZNmlSYtyHt2w8//KC0tDQVFhYqOjpa77//vrp27aq1a9c26H17++23lZmZWaGfTpmGft769++vV155RWeffbb27dunRx55RAMGDND69esb/L5t27ZNM2bM0Pjx4/XXv/5V3333nf70pz8pPDxco0aNCpj3k/nz5+vIkSMaPXq0pIb/OzlhwgTl5uaqc+fOstvtcrlcevzxx3XzzTdLath/Bxo3bqy0tDQ99thj6tKlixISEvTWW29pxYoV6tixY4Pet/pAAETAGzt2rNavX69ly5ZZXUq9Ovvss7V27Vrl5ORo3rx5GjVqlJYuXWp1WWdk9+7duu+++7Ro0aJK/2sPBGWtKpJ07rnnqn///mrbtq3eeecdRUZGWljZmXO73erbt6+mTp0qSerVq5fWr1+vmTNnatSoURZXV39eeuklDR48WK1atbK6lHrxzjvv6M0339ScOXPUrVs3rV27VuPGjVOrVq0C4ry9/vrruu2225SUlCS73a7evXvrxhtv1OrVq60uzXLcAq6luLg42e32SiO8srOzlZiYaFFV3lG2Pw15X//whz/oo48+0hdffKHWrVt7picmJqqoqEhHjhypMH9D2rfw8HB17NhRffr0UUZGhnr06KF//etfDXrfVq9erf3796t3794KDQ1VaGioli5dqv/3//6fQkNDlZCQ0GD3rSpNmjRRp06dtHXr1gZ93iSpZcuW6tq1a4VpXbp08dziDoT3k507d+rzzz/XHXfc4ZnW0M/bAw88oAkTJmjEiBE655xzdOutt+r+++9XRkaGpIZ/3jp06KClS5fq2LFj2r17t1auXKni4mK1b9++we/bmSIA1lJ4eLj69OmjxYsXe6a53W4tXrxYaWlpFlZW/1JSUpSYmFhhX3Nzc/Xtt9/6/b4aY/SHP/xB77//vv773/8qJSWlwut9+vRRWFhYhX3btGmTdu3a5ff7Vh232y2n09mg923gwIH64YcftHbtWs9X3759dfPNN3u+b6j7VpVjx47p559/VsuWLRv0eZOkCy64oNKjljZv3qy2bdtKatjvJ2Vmz56tFi1aaMiQIZ5pDf285efnKySkYhSw2+1yu92SAuO8SVKjRo3UsmVLHT58WJ9++qmuvvrqgNm3OrN6FEpD9PbbbxuHw2FeeeUV89NPP5m77rrLNGnSxGRlZVldWq0dPXrUrFmzxqxZs8ZIMtOmTTNr1qwxO3fuNMaUDpFv0qSJ+eCDD8z3339vrr766gYxRP7ee+81sbGxZsmSJRUe35Cfn++Z55577jFt2rQx//3vf82qVatMWlqaSUtLs7DqmpswYYJZunSp2b59u/n+++/NhAkTjM1mM5999pkxpmHv28nKjwI2pmHv25///GezZMkSs337dvP111+b9PR0ExcXZ/bv32+Madj7tnLlShMaGmoef/xxs2XLFvPmm2+aqKgo88Ybb3jmaajvJ8aUPu2hTZs25sEHH6z0WkM+b6NGjTJJSUmex8C89957Ji4uzvzlL3/xzNOQz9snn3xiPv74Y7Nt2zbz2WefmR49epj+/fuboqIiY0zD3rczRQCso2eeeca0adPGhIeHm9TUVPPNN99YXVKdfPHFF0ZSpa9Ro0YZY0ofAfDwww+bhIQE43A4zMCBA82mTZusLboGqtonSWb27NmeeQoKCszvf/9707RpUxMVFWWuueYas2/fPuuKroXbbrvNtG3b1oSHh5v4+HgzcOBAT/gzpmHv28lODoANed+GDx9uWrZsacLDw01SUpIZPnx4hefkNeR9M8aY//znP6Z79+7G4XCYzp07mxdeeKHC6w31/cQYYz799FMjqcp6G/J5y83NNffdd59p06aNiYiIMO3btzcPPfSQcTqdnnka8nmbO3euad++vQkPDzeJiYlm7Nix5siRI57XG/K+nSmbMeUe9w0AAICARx9AAACAIEMABAAACDIEQAAAgCBDAAQAAAgyBEAAAIAgQwAEAAAIMgRAAACAIEMABAAACDIEQAAAgCBDAATQ4BhjNG3aNKWkpCgqKkrDhg1TTk5Ondb166+/qkWLFtqxY0e181xyySUaN25c3Yo9hREjRuipp56q9/UCwOkQAAE0OA888IBmzJihV199VV999ZVWr16tKVOm1Gldjz/+uK6++mq1a9euXmusib/97W96/PHH6xxeAaCuCIAAGpRvv/1W06ZN09y5c3XRRRepT58+uvPOO7Vw4cJarys/P18vvfSSbr/9di9Uenrdu3dXhw4d9MYbb1iyfQDBiwAIoEH55z//qYEDB6p3796eaQkJCTp48GCt17Vw4UI5HA6dd955nml5eXkaOXKkoqOj1bJlyypv0brdbmVkZCglJUWRkZHq0aOH5s2bV2Geo0eP6uabb1ajRo3UsmVLPf3001XeSh46dKjefvvtWtcOAGeCAAigwXA6nVqwYIGuueaaCtMLCwsVGxtb6/V99dVX6tOnT4VpDzzwgJYuXaoPPvhAn332mZYsWaLMzMwK82RkZOi1117TzJkz9eOPP+r+++/XLbfcoqVLl3rmGT9+vL7++mt9+OGHWrRokb766qtK65Gk1NRUrVy5Uk6ns9b1A0BdhVpdAADUVGZmpgoKCvTnP/9Zf/nLXzzTi4uLdemll0qSrrnmGi1ZskQDBw6s1Cp3sp07d6pVq1aen48dO6aXXnpJb7zxhgYOHChJevXVV9W6dWvPPE6nU1OnTtXnn3+utLQ0SVL79u21bNkyPf/887r44ot19OhRvfrqq5ozZ45nPbNnz66wrTKtWrVSUVGRsrKy1LZt2zoeGQCoHQIggAZj8+bNatSokdauXVth+pAhQ3TBBRdIku677z7ddtttevXVV0+7voKCAkVERHh+/vnnn1VUVKT+/ft7pjVr1kxnn3225+etW7cqPz9fv/3tbyusq6ioSL169ZIkbdu2TcXFxUpNTfW8HhsbW2E9ZSIjIyWV9kcEAF8hAAJoMHJzcxUXF6eOHTt6pu3cuVNbtmzRddddJ6n0kS1Lliyp0fri4uJ0+PDhWtVw7NgxSdKCBQuUlJRU4TWHw1GrdUnSoUOHJEnx8fG1XhYA6oo+gAAajLi4OOXk5MgY45n2+OOP64orrlDXrl1rvb5evXrpp59+8vzcoUMHhYWF6dtvv/VMO3z4sDZv3uz5uWvXrnI4HNq1a5c6duxY4Ss5OVlS6S3hsLAwfffdd57lcnJyKqynzPr169W6dWvFxcXVun4AqCtaAAE0GL/5zW9UWFioJ554QiNGjNCbb76p//znP1q5cmWd1jdo0CBNnDhRhw8fVtOmTRUdHa3bb79dDzzwgJo3b64WLVrooYceUkjIif8rN27cWP/zP/+j+++/X263WxdeeKFycnL09ddfKyYmRqNGjVLjxo01atQoPfDAA2rWrJlatGihyZMnKyQkRDabrUINX331lS677LIzOi4AUFu0AAJoMBISEvTKK69oxowZ6tatm7755hstW7bM0/JWW+ecc4569+6td955xzPtySef1IABAzR06FClp6frwgsvrDRS+LHHHtPDDz+sjIwMdenSRZdffrkWLFiglJQUzzzTpk1TWlqarrzySqWnp+uCCy5Qly5dKvQ5LCws1Pz583XnnXfWqX4AqCubKX8vBQACwJIlS/Tss8+edhSwVNqX74EHHtD69esrtPTVt7y8PCUlJempp57yPHh6xowZev/99/XZZ595bbsAUBVuAQMIKOnp6Vq3bp3y8vLUunVrvfvuu57HtVRlyJAh2rJli/bs2VPnlsSqrFmzRhs3blRqaqpycnL06KOPSpKuvvpqzzxhYWF65pln6m2bAFBTtAACgBesWbNGd9xxhzZt2qTw8HD16dNH06ZN0znnnGN1aQBAAAQAAAg2DAIBAAAIMgRAAACAIEMABAAACDIEQAAAgCBDAAQAAAgyBEAAAIAgQwAEAAAIMv8fHkbkBip4CooAAAAASUVORK5CYII=", "text/html": [ "\n", "
\n", "
\n", " Figure\n", "
\n", " \n", "
\n", " " ], "text/plain": [ "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "\n", "%matplotlib widget\n", "\n", "plt.plot(theta1_m, R_m)\n", "plt.xlabel(r'$\\theta _1$ (deg)')\n", "plt.ylabel('R')\n", "plt.xlim(0,90)\n", "plt.ylim(0,1.05)\n", "plt.title('Reflectivity in function of incident angle, with $n_1$='+str(n_1)+' and $n_2=$'+str(n_2))\n", "plt.ion()\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**OR** you could just get the value of first element that is equal to 1 (with a tolerance to account for rounding and other numerical errors)." ] }, { "cell_type": "code", "execution_count": 151, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Critical angle is 62.5 degrees.\n" ] } ], "source": [ "critical_angle=theta1_m[np.where(R_m>0.99)[0][0]]\n", "#Since angles are defined as a complex vector, output of np.where is a matrix, this is why there is a second 0\n", "print('Critical angle is '+str(np.real(critical_angle))+' degrees.')" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3.10.7 64-bit", "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.7" }, "orig_nbformat": 4, "vscode": { "interpreter": { "hash": "cbfa28e9f8efc676c4f0f4ff7b2f09cc88691bd55d717fd8df6bb5b2b99fb18e" } } }, "nbformat": 4, "nbformat_minor": 2 }