{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": { "ExecuteTime": { "end_time": "2018-10-23T11:26:50.137170Z", "start_time": "2018-10-23T11:26:50.024678Z" } }, "outputs": [], "source": [ "import snlay as sn \n", "import numpy as np \n", "from scipy import interpolate\n", "\n", "\n", "#make a materials dictionary\n", "matsdict = {\n", " 1: './materials/gold.dat',\n", " 2: './materials/silicon.dat',\n", " 3: './materials/silica.dat',\n", " 4: './materials/tio2.dat',\n", " 5: './materials/silver.dat'\n", "}\n", "\n", "def get_nk(datafile, wavelengths):\n", " \"\"\"Reads the given file and returns the n+ik complex at\n", " the given wavelength after suitable interpolation\n", " :datafile: TODO\n", " :wavelength: TODO\n", " :returns: TODO\n", " \"\"\"\n", " rawdisp = np.loadtxt(datafile)\n", " f_r = interpolate.interp1d(rawdisp[:,0], rawdisp[:,1])\n", " f_i = interpolate.interp1d(rawdisp[:,0], rawdisp[:,2])\n", " return f_r(wavelengths) + 1j*f_i(wavelengths)\n", "\n", "def nk_2_eps(n):\n", " \"\"\"TODO: Docstring for nk_2_epsnk_2_eps.\n", " :returns: complex epsilon given n and kappa \n", " \"\"\"\n", " eps_r = n.real**2 - n.imag**2\n", " eps_i = 2*n.real*n.imag\n", " return eps_r + 1j*eps_i\n", "\n", "def eps_2_nk(eps):\n", " \"\"\"TODO: Docstring for nk_2_epsnk_2_eps.\n", " :returns: complex epsilon given n and kappa \n", " \"\"\"\n", " modeps = np.abs(eps)\n", " n_r = np.sqrt(0.5*(modeps + eps.real)) \n", " n_i = np.sqrt(0.5*(modeps - eps.real)) \n", " return n_r + 1j*n_i\n", "\n", "\n", "def LL_mixing(fH, n_H, n_L):\n", " \"\"\"TODO: Docstring for brugg_mixingbrugg_mixing.\n", " Given the volumne fraction of the higher index material, give the effective\n", " index of the layer\n", " :fH: volumne fraction from 0 to 1 \n", " :n_H: ri of the higher index material \n", " :n_L: ri of the lower index material \n", " :returns: TODO\n", " \"\"\"\n", " eH = nk_2_eps(n_H)\n", " eL = nk_2_eps(n_L)\n", " bigK = fH*(eH - 1)/(eH + 2) + (1 - fH)*(eL - 1)/(eL + 2)\n", " e_eff = (1 + 2*bigK)/(1 - bigK)\n", " return eps_2_nk(e_eff)\n", "\n", " " ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "ExecuteTime": { "end_time": "2018-10-23T11:26:52.626198Z", "start_time": "2018-10-23T11:26:52.480239Z" } }, "outputs": [ { "data": { "text/plain": [ "[<matplotlib.lines.Line2D at 0x7f9dcacb29e8>]" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from jupyterthemes import jtplot\n", "jtplot.style(grid=False, fscale=0.8)\n", "\n", "\n", "import matplotlib.pyplot as plt\n", "n_arr1 = np.array( 100*[1.45] )\n", "n_arr2 = np.array( 100*[1.33] )\n", "fracs = np.linspace(0,1, 101, endpoint=True)\n", "neff = np.array([LL_mixing(f, 2.5, 1.45 ) for f in fracs])\n", "plt.plot(fracs, neff.real)\n", "plt.plot(fracs, neff.imag)\n" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "ExecuteTime": { "end_time": "2018-10-23T11:27:55.453162Z", "start_time": "2018-10-23T11:27:55.286316Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The autoreload extension is already loaded. To reload it, use:\n", " %reload_ext autoreload\n" ] }, { "data": { "image/png": "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hYqIGKVQERGjFCoiYpRCRUSMUqiIiFEKFRExSqEiIkYpVETEKIWKiBilUBERoxQqImKULS8TM8GRkIzjlouj3YbIl4rDGnkk3LCh4lr2PBfDN2x7IjelWMdF4N8jW4eZVgazLIuSkhJCoRCBQICKioohp1+J/3+foa9PIxWR68myYuGB+0a0DltCJScnh7q6OmpqatiwYQNOp5NgMHjV6VdsrD9IuL/PjvZE5CpiY6yRr8NAH5/jdrupr68HwOfz4XK5CAaDV53+aZZ1aaPWrVtnR2siEgXLsujrG95/6raEit/vx+Px0NjYiMvlIhAIDDn904LBIGVlZcPeIBEZGcuyrroHEQ1HWlpa2GA/AMTFxVFcXExPTw/d3d3ExcVRWVmJz+cbNP3tt982XVpERpktoSIiX166+E1EjFKoiIhRo351WUxMDI899hhHjx6lsbGRJUuW4HA4eO+992hubqawsJCEhATi4uIoKytjYGBg2LXS09O59957+eSTT2hoaODs2bO21gNYtWoVTqeTQCDAsWPHbK03b9487rjjDgCysrLYunWrrfXcbjfFxcV0dnbS09PD/v37bavn9XopLCykq6uLM2fOcPjwYb797W8zMDBAVVUVhw4dIi8vD6/XS0JCAn/+85+HdbAxKSmJwsJCUlJSeO6555gzZ84XbtOECRO4//77CYVCNDY28u9/R3/x2Gfr3X777SxatIj6+nreffddAFvrrVmzhnHjxpGUlMRrr72Gz+cbcb1bPB7P/0TdkQ2+9a1v0dzcjGVZ3H777Wzbto1Dhw5x3333ceLECTIyMigvLycpKYnk5GTOnDkz7Foej4cZM2bQ29vLxx9/zPLly22tt2DBAubOnUswGKStrY1FixbZWu/cuXMcPHiQUChET08PCxYssLXezJkzCYVC7Ny5k9zcXGbPnm1bvbvuuotDhw7x/vvvk5eXR2pqKm+99Rb/+c9/KCoqoqamhvz8fLZt20YoFOKrX/0qJ06cuOY6oVCIAwcOkJ2dTVVVFffff/8XblNWVhZVVVV89NFHrFq1iqqqqmHXO336NIFAAJfLRUNDA26329Z6H3/8MQcOHKCvr49p06bR1dU14nqjuvszd+5curu7aWtrA+CWW26hv7+fUChEXFwcLpeLjo4O4NIXxuPxjKjef//7X373u99RXl7OypUrba+XkpJC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\n", "text/plain": [ "<Figure size 288x216 with 1 Axes>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%load_ext autoreload\n", "%autoreload 2\n", "import numpy as np\n", "import pylab as plt\n", "from tmm import coh_tmm\n", "from numpy import pi, linspace, inf, array\n", "from scipy.interpolate import interp1d\n", "import matplotlib.pyplot as plt\n", "\n", "from jupyterthemes import jtplot\n", "# # # #currently installed theme will be used to\n", "# # # #set plot style if no arguments provided\n", "jtplot.style(grid=False, fscale=0.7)\n", "# \"5 * degree\" is 5 degrees expressed in radians\n", "# \"1.2 / degree\" is 1.2 radians expressed in degrees\n", "degree = pi/180\n", "#index of refraction of my material: wavelength in nm versus index.\n", "d_list = [inf,300,inf] #in nm\n", "lambda_list = linspace(400,1200,400) #in nm\n", "T_list = []\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "for lambda_vac in lambda_list:\n", " n_list = [1, 1.33, 1.33]\n", " T_list.append(coh_tmm('s',n_list,d_list,0*degree,lambda_vac)['R'])\n", "plt.figure(figsize=(4,3))\n", "plt.plot(lambda_list,T_list)\n", "plt.xlim([400,1200])\n", "plt.ylim([0,1])\n", "plt.xlabel('Wavelength (nm)')\n", "plt.ylabel('Reflection')\n", "#plt.spines['top'].set_visible(False)\n", "#plt.spines['right'].set_visible(False)\n", "plt.show()\n", "\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.7.0" }, "latex_envs": { "LaTeX_envs_menu_present": true, "autoclose": false, "autocomplete": true, "bibliofile": "biblio.bib", "cite_by": "apalike", "current_citInitial": 1, "eqLabelWithNumbers": true, "eqNumInitial": 1, "hotkeys": { "equation": "Ctrl-E", "itemize": "Ctrl-I" }, "labels_anchors": false, "latex_user_defs": false, "report_style_numbering": false, "user_envs_cfg": false } }, "nbformat": 4, "nbformat_minor": 2 }