{ "cells": [ { "cell_type": "markdown", "source": [ "# Photon convolved with a cavity transfer function" ], "metadata": { "toc": true } }, { "cell_type": "code", "source": [ "%matplotlib inline\n", "\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "\n", "from scipy.signal import convolve\n", "from numpy.fft import fftfreq, fftshift\n", "\n", "from lmfit import Model, Parameters\n", "from lmfit.models import ConstantModel\n", "from lmfit.models import LorentzianModel" ], "outputs": [], "execution_count": 1, "metadata": {} }, { "cell_type": "markdown", "source": [ "## Photon function definitions" ], "metadata": {} }, { "cell_type": "code", "source": [ "def exponential_decay(t, tau, alpha=1e-3):\n", " \"\"\"Electric field envelope for an exponential decay\"\"\"\n", " assert tau > 0\n", " mask = t > - (tau * 10)\n", " retval = np.zeros_like(t)\n", " retval[mask] = np.exp(-t[mask] / (2 * tau)) * (1 + np.tanh(t[mask] / alpha))/2\n", " return retval / np.sum(retval)\n", "\n", "def exponential_rise(t, tau, alpha=1e-3):\n", " \"\"\"Electric field envelope for an exponential rise\"\"\"\n", " assert tau < 0\n", " mask = t < (-tau * 10)\n", " retval = np.zeros_like(t)\n", " retval[mask] = np.exp(-t[mask] / (2 * tau)) * (1 + np.tanh(-t[mask] / alpha))/2\n", " return retval / np.sum(retval)\n", "\n", "def exponential_pulse(x, tau, t0=0, amp=1, alpha=1e-3):\n", " \"\"\" Electric field envelope for asymetric pulses\n", " \n", " if tau is positive, there will be a decaying exponential\n", " if tau is negative, rising exponential\"\"\"\n", " x = x - t0\n", " if tau < 0:\n", " return amp * exponential_rise(x, tau, alpha)\n", " return amp * exponential_decay(x, tau, alpha)" ], "outputs": [], "execution_count": 2, "metadata": {} }, { "cell_type": "markdown", "source": [ "# Cavity functions" ], "metadata": {} }, { "cell_type": "code", "source": [ "def finesse(R1, R2):\n", " return np.pi * (R1 * R2)**.25 / (1 - np.sqrt(R1 * R2))\n", "\n", "def FSR(R1, R2, cavity_lw):\n", " return finesse(R1, R2) * cavity_lw\n", "\n", "def FP_cavity_transferfunction(d_freq, R1, R2, cavity_lw):\n", " d_freq = d_freq * (2 * np.pi)\n", " fsr = FSR(R1, R2, cavity_lw)\n", " return (np.sqrt(R1) - np.sqrt(R2) * np.exp(-1j*d_freq / fsr)) / (1 - np.sqrt(R1*R2) * np.exp(-1j*d_freq / fsr))\n", "\n", "def cavity_reflection(pulse, dt, R1, R2, cavity_lw, cavity_detuning):\n", " # frequency vector to define the transfer function properly\n", " freq_vec = np.fft.fftfreq(pulse.size, dt)\n", "\n", " # cavity transfer function \n", " transf_func = FP_cavity_transferfunction((freq_vec - cavity_detuning), R1, R2, cavity_lw)\n", " \n", " # cavity operation in the time domain\n", " a = np.fft.fftshift(np.fft.ifft(transf_func))\n", " return convolve(pulse, a, 'same')" ], "outputs": [], "execution_count": 3, "metadata": {} }, { "cell_type": "markdown", "source": [ "## Check cavity transfer function" ], "metadata": {} }, { "cell_type": "code", "source": [ "dt = 1e-4\n", "time_vec = np.arange(-.2, .2, dt)\n", "R1= 0.97\n", "R2 = 0.9998\n", "cavity_detuning = 100\n", "cavity_lw = 7.315\n", "\n", "frequencies = fftshift(fftfreq(time_vec.size, dt))\n", "ct = FP_cavity_transferfunction(frequencies, R1, R2, cavity_lw)\n", "# plt.figure()\n", "# plt.plot(frequencies, np.abs(ct)**2, '.-')\n", "print(f'Free spectral range {FSR(R1, R2, cavity_lw) :.3f}')\n", "\n", "cavity_model = ConstantModel() - LorentzianModel()\n", "\n", "p=Parameters()\n", "p.add('c', 1, vary = False)\n", "p.add('sigma', cavity_lw)\n", "p.add('center', 0)\n", "p.add('amplitude', .1)\n", "\n", "useful_sec = np.abs(frequencies) < 800\n", "result_cav = cavity_model.fit(np.abs(ct[useful_sec])**2, x = frequencies[useful_sec], params=p)\n", "print('{:.3f}'.format(result_cav.best_values['sigma']), cavity_lw / 2)\n", "plt.figure()\n", "result_cav.plot_fit();" ], "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Free spectral range 1499.094\n", "3.658 3.6575\n" ] }, { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": [ "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\n" ] }, "metadata": { "needs_background": "light" } } ], "execution_count": 4, "metadata": {} }, { "cell_type": "markdown", "source": [ "## Check of the convolution operation" ], "metadata": {} }, { "cell_type": "code", "source": [ "# time vector\n", "dt = 1e-7\n", "time_vec = np.arange(-.1, .2, dt)" ], "outputs": [], "execution_count": 25, "metadata": {} }, { "cell_type": "code", "source": [ "# photon wavefunction parameters\n", "tau = 6e-3\n", "alpha = 1e-7\n", "# cavity parameters\n", "R1= 0.97\n", "R2 = 0.9998\n", "cavity_detuning = 0.01\n", "cavity_lw = 7#\n", "print(f'photon bandwidth {1 / (2 * np.pi * (tau)) :.2f} MHz')\n", "\n", "pulse = exponential_pulse(time_vec, tau=tau, t0=0, alpha=alpha)\n", "pulse_after_cavity = cavity_reflection(pulse, dt, R1, R2, cavity_lw, cavity_detuning)" ], "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "photon bandwidth 26.53 MHz\n" ] } ], "execution_count": 26, "metadata": {} }, { "cell_type": "code", "source": [ "plt.figure()\n", "plt.plot(time_vec, np.abs(pulse)**2, label='input')\n", "plt.plot(time_vec, np.abs(pulse_after_cavity)**2, label='output')\n", "plt.legend()\n", "plt.xlim(-0.01,0.1)\n", "\n", "plt.figure()\n", "plt.plot(time_vec, np.angle(pulse), label='input')\n", "plt.plot(time_vec, np.angle(pulse_after_cavity), label='output')\n", "plt.legend();\n", "plt.xlim(-0.01,0.1);\n" ], "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": [ "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\n" ] }, "metadata": { "needs_background": "light" } }, { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": [ "iVBORw0KGgoAAAANSUhEUgAAAYcAAAD8CAYAAACcjGjIAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAFkBJREFUeJzt3XuQXnWd5/H3N3c2ZBguI5g0mQ4FDkJIots0BeKKA4OBmTEDE6tk2BoyLqaYFauwymVws4Xo1NYymgKtxS03O+NtBwU3tZGsRiEwg1xEtMM9XCTEZuhEJYTrACGEfPePPgltn6cvyXku/eR5v6q6nnP5nfP7/bqT59O/c87z68hMJEkaalKrGyBJmngMB0lSieEgSSoxHCRJJYaDJKnEcJAklRgOkqQSw0GSVGI4SJJKprS6AaM54ogjsru7u9XNkKS2sWHDhucy8/eqnmdCh0N3dzd9fX2tboYktY2IeLoe5/GykiSpxHCQJJUYDpKkEsNBklRiOEiSSuoSDhGxOCKeiIhNEXFFjf3TI+LGYv+9EdFdj3olSY1RORwiYjLwFeAc4ATggog4YVix/wC8kJnHAtcCf1e1XklS49Tjcw69wKbM3AwQETcAS4BHh5RZAlxVLK8GrouIyDH+RulvXt7BNbc8UYcmjt/hrz3Fu567be96RgAxuLznNaLYG8W2KJVPhpQJStuI4O3Ov32ejFrbJvHWpGnsiqnsnjSVV6YdyYszunhr0jTemjStjr2XpEH1CIc5wDND1geAU0Yqk5m7IuIl4HDgueEni4jlwHKAaUcdy3//5011aOL4fWHKVzl18h1NrXN/vZ7T+ODOa/gNh7W6KZIOMBPuE9KZuQpYBdDT05N9/+2Pm9uA/7sW/uX34bKH9jRo8GvP7/l7litvY4RtWd62exe8tRN2vQE7X4VfPwRb7+Og+/+Rn37yJJi9qAHfCEntKK6uz3nqEQ5bgKOHrHcV22qVGYiIKcAhwPY61N14MXgJaEI5+mR4/J1w/z+2uiWSDlD1eFrp58BxETEvIqYBHwXWDiuzFrioWF4K/NNY9xskSa1TeeRQ3EO4FLgZmAx8LTM3RsTngb7MXAv8A/C/I2IT8DyDASJJmqDqcs8hM9cB64Ztu3LI8g7gI/WoS5LUeH5CWpJUYjiUeCtEkgyHWiba00mS1GSGgySpxHCQJJUYDpKkEsNBklRiOEiSSgyH4ZzVQ5IMh9p8lFVSZzMcJEklhoMkqcRwkCSVGA6SpBLDQZJUYjiU+CirJBkOtTgrq6QOZzhIkkoMB0lSieEgSSoxHCRJJYaDJKmkUjhExGERsT4inixeDx2h3FsR8UDxtbZKnQ3nrKySVHnkcAVwW2YeB9xWrNfyemYuKr4+XLHOJvBRVkmdrWo4LAG+WSx/E/iziueTJE0AVcPhyMz8VbH8a+DIEcrNiIi+iPhpRBggkjTBTRmrQETcChxVY9eKoSuZmREx0gX738/MLRFxDPBPEfFwZj41Qn3LgeUAc+fOHat5kqQGGDMcMvOskfZFxG8i4p2Z+auIeCfw7Ajn2FK8bo6I24H3ADXDITNXAasAenp6vDssSS1Q9bLSWuCiYvki4KbhBSLi0IiYXiwfAbwPeLRivZKkBqoaDlcDfxQRTwJnFetERE9E/H1R5t1AX0Q8CPwzcHVmTuBwcLAiSWNeVhpNZm4HzqyxvQ+4uFj+CXBSlXqazllZJXU4PyEtSSoxHCRJJYaDJKnEcJAklRgOkqQSw2E4Z2WVJMOhNh9lldTZDAdJUonhIEkqMRwkSSWGgySpxHCQJJUYDiU+yipJhkMtzsoqqcMZDpKkEsNBklRiOEiSSgwHSVKJ4SBJKjEchnNWVkkyHGrzUVZJnc1wkCSVGA6SpJJK4RARH4mIjRGxOyJ6Rim3OCKeiIhNEXFFlTolSY1XdeTwCHA+cMdIBSJiMvAV4BzgBOCCiDihYr2SpAaaUuXgzHwMIEafi6gX2JSZm4uyNwBLgEer1C1Japxm3HOYAzwzZH2g2FZTRCyPiL6I6Nu2bVvDG1fmo6ySNObIISJuBY6qsWtFZt5U7wZl5ipgFUBPT09r3qmdlVVShxszHDLzrIp1bAGOHrLeVWyTJE1Qzbis9HPguIiYFxHTgI8Ca5tQryRpP1V9lPW8iBgATgV+EBE3F9tnR8Q6gMzcBVwK3Aw8Bnw3MzdWa7YkqZGqPq20BlhTY/tW4Nwh6+uAdVXqkiQ1j5+QliSVGA7DOSurJBkOtfkoq6TOZjhIkkoMB0lSieEgSSoxHCRJJYaDJKnEcCjxUVZJMhxqcVZWSR3OcJAklRgOkqQSw0GSVGI4SJJKKk3ZLUnN9OabbzIwMMCOHTta3ZSWmzFjBl1dXUydOrUh5zcchnNWVmnCGhgYYNasWXR3dxMd/FRhZrJ9+3YGBgaYN29eQ+rwslJNnfuPTprIduzYweGHH97RwQAQERx++OENHUEZDpLaSqcHwx6N/j4YDpK0D0477bS6n7O/v59vf/vbdT9vFYaDJO2Dn/zkJ3U/p+EgSW3u4IMPBuD222/njDPOYOnSpRx//PFceOGFZPFAS3d3N5dffjknnXQSvb29bNq0CYBly5axevXq0rmuuOIK7rzzThYtWsS1117b5B7V5tNKktrS5/7fRh7d+nJdz3nC7N/hs3964rjL33///WzcuJHZs2fzvve9j7vvvpvTTz8dgEMOOYSHH36Yb33rW1x22WV8//vfH/E8V199NStXrhy1TLNVGjlExEciYmNE7I6InlHK9UfEwxHxQET0ValTkiaK3t5eurq6mDRpEosWLaK/v3/vvgsuuGDv6z333NOiFu6/qiOHR4Dzgf85jrIfzMznKtbXHD4NIU14+/IbfqNMnz597/LkyZPZtWvX3vWhTxPtWZ4yZQq7d+8GYPfu3ezcubNJLd13lUYOmflYZj5Rr8ZI0oHixhtv3Pt66qmnAoP3IjZs2ADA2rVrefPNNwGYNWsWr7zySmsaOoJm3ZBO4JaI2BARy5tUpyS1zAsvvMCCBQv48pe/vPcm88c//nF+/OMfs3DhQu655x5mzpwJwIIFC5g8eTILFy6cMDekI8eYLiIibgWOqrFrRWbeVJS5Hfh0Zta8nxARczJzS0S8A1gPfDIz7xih7HJgOcDcuXP/7dNPPz3evtTHDRfCC/3w13c3t9599fg6uOECWP5jmL2o1a2RmuKxxx7j3e9+d6ubMabu7m76+vo44ogjGlpPre9HRGzIzBHvAY/XmPccMvOsqpVk5pbi9dmIWAP0AjXDITNXAasAenp6nOhIklqg4ZeVImJmRMzaswyczeCNbEk6IPX39zd81NBoVR9lPS8iBoBTgR9ExM3F9tkRsa4odiRwV0Q8CPwM+EFm/qhKvQ3lrKySVO1R1sxcA6ypsX0rcG6xvBlYWKWe5vNRVkmdzekzJEklhoMkqcRwkKQG+cY3vsHWrVv3+/hWztZqOEhSgxgOktQhrrnmGubPn8/8+fP50pe+RH9/P/Pnz9+7f+XKlVx11VWsXr2avr4+LrzwQhYtWsTrr7/eVlN5O2V3iY+ySm3hh1fArx+u7zmPOgnOuXrE3Rs2bODrX/869957L5nJKaecwgc+8IGaZZcuXcp1113HypUr6el5+wPL7TKVtyOHWnySVVINd911F+eddx4zZ87k4IMP5vzzz+fOO+/cp3O0y1TejhwktadRfsNvphdffHHvNNwAO3bsGLV8u0zl7chBksbp/e9/P9/73vd47bXXePXVV1mzZg3nnHMOzz77LNu3b+eNN974rUtAtabibpepvB05SNI4vfe972XZsmX09vYCcPHFF3PyySdz5ZVX0tvby5w5czj++OP3ll+2bBmXXHIJBx100N5LSHum8p4+fTrf+c53gMGpvJcsWcLChQtZvHhxzam8ly1bxqc+9amm9XXMKbtbqaenJ/v6mvxXRb9zAbz0DFxyV3Pr3VdO2a0O1C5Tdo+k3lN5N3LKbi8rSZJKvKw03AQeSUlqb/39/a1uwrg5cqjJZ1kldTbDQVJbmcj3SZup0d8Hw0FS25gxYwbbt2/v+IDITLZv386MGTMaVof3HCS1ja6uLgYGBti2bVurm9JyM2bMoKurq2HnNxwktY2pU6cyb968VjejI3hZSZJUYjiUdPa1TEkCw6G28FFWSZ3NcJAklVQKh4j4YkQ8HhEPRcSaiPjdEcotjognImJTRFxRpU5JUuNVHTmsB+Zn5gLgF8BnhheIiMnAV4BzgBOACyLihIr1SpIaqFI4ZOYtmbmrWP0pUOuh215gU2ZuzsydwA3Akir1SpIaq573HD4G/LDG9jnAM0PWB4ptkqQJaswPwUXErcBRNXatyMybijIrgF3A9VUbFBHLgeUAc+fOrXq6fdfhH8uXJBhHOGTmWaPtj4hlwJ8AZ2btCU+2AEcPWe8qto1U3ypgFQz+sZ+x2tcYPsoqqbNVfVppMXA58OHMfG2EYj8HjouIeRExDfgosLZKvZKkxqp6z+E6YBawPiIeiIivAkTE7IhYB1DcsL4UuBl4DPhuZm6sWK8kqYEqTbyXmceOsH0rcO6Q9XXAuip1SZKax09IS5JKDAdJUonhUOKjrJJkONTirKySOpzhIEkqMRwkSSWGgySpxHCQJJUYDpKkEsNhOGdllSTDoTYfZZXU2QwHSVKJ4SBJKjEcJEklhoMkqcRwkCSVGA4lPsoqSYZDLc7KKqnDGQ6SpBLDQZJUYjhIkkoMB0lSieEgSSqZUuXgiPgi8KfATuAp4K8y88Ua5fqBV4C3gF2Z2VOl3oZyVlZJqjxyWA/Mz8wFwC+Az4xS9oOZuWhCB8NePsoqqbNVCofMvCUzdxWrPwW6qjdJktRq9bzn8DHghyPsS+CWiNgQEcvrWKckqQHGvOcQEbcCR9XYtSIzbyrKrAB2AdePcJrTM3NLRLwDWB8Rj2fmHSPUtxxYDjB37txxdEGSVG9jhkNmnjXa/ohYBvwJcGZm7bu5mbmleH02ItYAvUDNcMjMVcAqgJ6eHu8OS1ILVLqsFBGLgcuBD2fmayOUmRkRs/YsA2cDj1SpV5LUWFXvOVwHzGLwUtEDEfFVgIiYHRHrijJHAndFxIPAz4AfZOaPKtbbQA5WJKnS5xwy89gRtm8Fzi2WNwMLq9TTdM7KKqnD+QlpSVKJ4SBJKjEcJEklhoMkqcRwkCSVGA7DOSurJBkOtbXBo6yvPTf4uuoD8OT61rZF0gHHcGhXL299e/n6pTDQ17q2SDrgGA7t6rRPwlmfe3v9e3/durZIOuAYDu1q2kw4/TL4nTmD6y9taW17JB1QDId2N//8wdfc3dp2SDqgGA7tLvb8CH3KSlL9GA4l7fYmWzxZ5chBUh0ZDrW006yse0YOfj5DUh0ZDu0uHDlIqj/Doe3tGeU4cpBUP4ZDu9t7WcmRg6T6MRzaXTvdH5HUNgyHdhf+CCXVn+8sw7XdUz+OHCTVn+FQUxu94TpykNQAvrO0O+85SGqAyuEQEX8bEQ9FxAMRcUtEzB6h3EUR8WTxdVHVelVw5CCpAerxzvLFzFyQmYuA7wNXDi8QEYcBnwVOAXqBz0bEoXWoW44cJDVA5XDIzJeHrM6k9qexPgSsz8znM/MFYD2wuGrdwpGDpIaYUo+TRMR/Bf4SeAn4YI0ic4BnhqwPFNtUmSMHSfU3rl87I+LWiHikxtcSgMxckZlHA9cDl1ZpUEQsj4i+iOjbtm1blVPtpzZ7lNWRg6QGGNfIITPPGuf5rgfWMXh/YagtwBlD1ruA20eoaxWwCqCnp6c179TtdB2/ndoqqW3U42ml44asLgEer1HsZuDsiDi0uBF9drFNlRkOkuqvHvccro6IPwB2A08DlwBERA9wSWZenJnPR8TfAj8vjvl8Zj5fh7rlZSVJDVA5HDLzz0fY3gdcPGT9a8DXqtanYbysJKkB/LWz3TlykNQAvrNIkkrq8jmHhtn2OPyPU4uZUosHl/Ysj3sb+3bsq9tg7mmN71u9DB05bLkPZr/HS03qHGPNojzq/lH2jTk785D9v1V22HEj7RvX9v09pj4mdjhMng6HHVO82cWQN72ouI3Ry72rjT68feSJby//r+Lzh5OmwpTpMHkaTBrtR1yn/xz7dGyD/jOPubsVfa1y7AR402vasW322aIOETmB/35BT09P9vX1tboZE9+m22DSZHjuSXj1OXjrDdi1c/B19y5Gfdx11FHGGCOQ/T12zJFNK46t0tcxTLjvU4N+rlWObct/EyOslM450r5xbN+PY+K0T2zIzJ5aTd4XE3vkoPE59szB12POaGUrJE0In6jLWbwhLUkqMRwkSSWGgySpxHCQJJUYDpKkEsNBklRiOEiSSgwHSVLJhP6EdERsY/BvRDTbEcBzLai3lexzZ7DPB74/yMxZVU8yoT8hnZm/14p6I6KvHh8/byf2uTPY5wNfRNRlziEvK0mSSgwHSVKJ4VDbqlY3oAXsc2ewzwe+uvR3Qt+QliS1hiMHSVJJx4VDRCyOiCciYlNEXFFj//SIuLHYf29EdA/Z95li+xMR8aFmtnt/7W9/I+KPImJDRDxcvP5hs9u+v6r8jIv9cyPiXyPi081qc1UV/10viIh7ImJj8fOe0cy2768K/7anRsQ3i74+FhGfaXbb99c4+vzvIuK+iNgVEUuH7bsoIp4svi4as7LM7JgvYDLwFHAMMA14EDhhWJn/CHy1WP4ocGOxfEJRfjowrzjP5Fb3qYH9fQ8wu1ieD2xpdX8a3ech+1cD/wf4dKv704Sf8xTgIWBhsX74RP93XYc+/wVwQ7H8b4B+oLvVfapTn7uBBcC3gKVDth8GbC5eDy2WDx2tvk4bOfQCmzJzc2buBG4AlgwrswT4ZrG8GjgzIqLYfkNmvpGZvwQ2FeebyPa7v5l5f2ZuLbZvBA6KiOlNaXU1VX7GRMSfAb9ksM/tokqfzwYeyswHATJze2a+1aR2V1GlzwnMjIgpwEHATuDl5jS7kjH7nJn9mfkQsHvYsR8C1mfm85n5ArAeWDxaZZ0WDnOAZ4asDxTbapbJzF3ASwz+NjWeYyeaKv0d6s+B+zLzjQa1s572u88RcTDwN8DnmtDOeqryc34XkBFxc3E54vImtLceqvR5NfAq8CvgX4CVmfl8oxtcB1Xeg/b52An9CWm1XkScCPwdg79hHuiuAq7NzH+NMf9o/QFjCnA6cDLwGnBbRGzIzNta26yG6gXeAmYzeInlzoi4NTM3t7ZZE0unjRy2AEcPWe8qttUsUww7DwG2j/PYiaZKf4mILmAN8JeZ+VTDW1sfVfp8CvCFiOgHLgP+c0Rc2ugG10GVPg8Ad2Tmc5n5GrAOeG/DW1xdlT7/BfCjzHwzM58F7gbaYXqNKu9B+35sq2+yNPmGzhQGb8TM4+0bOicOK/MJfvsm1neL5RP57RvSm5ngN+4q9vd3i/Lnt7ofzerzsDJX0T43pKv8nA8F7mPwxuwU4Fbgj1vdpwb3+W+ArxfLM4FHgQWt7lM9+jyk7Dco35D+ZfHzPrRYPmzU+lrd4RZ8g88FfsHgXf8VxbbPAx8ulmcw+KTKJuBnwDFDjl1RHPcEcE6r+9LI/gL/hcHrsg8M+XpHq/vT6J/xkHO0TThU7TPw7xm8Af8I8IVW96XRfQYOLrZvLILhP7W6L3Xs88kMjgZfZXCUtHHIsR8rvhebgL8aqy4/IS1JKum0ew6SpHEwHCRJJYaDJKnEcJAklRgOkqQSw0GSVGI4SJJKDAdJUsn/B0J6tHsal3PfAAAAAElFTkSuQmCC\n" ] }, "metadata": { "needs_background": "light" } } ], "execution_count": 28, "metadata": {} }, { "cell_type": "code", "source": [ "lines_to_drop = 260\n", "exp_t, data_pulse_in, _, _ = np.genfromtxt('pulse_before_cavity.g2', skip_header=lines_to_drop).T\n", "_, data_pulse_out, _, _ = np.genfromtxt('pulse_after_cavity.g2', skip_header=lines_to_drop).T\n", "\n", "plt.figure()\n", "plt.plot(exp_t, data_pulse_in)\n", "plt.plot(exp_t, data_pulse_out);" ], "outputs": [ { "output_type": "error", "ename": "OSError", "evalue": "pulse_before_cavity.g2 not found.", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mOSError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0mlines_to_drop\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m260\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mexp_t\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdata_pulse_in\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0m_\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0m_\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgenfromtxt\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'pulse_before_cavity.g2'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mskip_header\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mlines_to_drop\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mT\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3\u001b[0m \u001b[0m_\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdata_pulse_out\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0m_\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0m_\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgenfromtxt\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'pulse_after_cavity.g2'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mskip_header\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mlines_to_drop\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mT\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfigure\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/.pyenv/versions/3.6.7/lib/python3.6/site-packages/numpy/lib/npyio.py\u001b[0m in \u001b[0;36mgenfromtxt\u001b[0;34m(fname, dtype, comments, delimiter, skip_header, skip_footer, converters, missing_values, filling_values, usecols, names, excludelist, deletechars, replace_space, autostrip, case_sensitive, defaultfmt, unpack, usemask, loose, invalid_raise, max_rows, encoding)\u001b[0m\n\u001b[1;32m 1698\u001b[0m \u001b[0mfname\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mstr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1699\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfname\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mbasestring\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1700\u001b[0;31m \u001b[0mfhd\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0miter\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlib\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_datasource\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mopen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfname\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'rt'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mencoding\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mencoding\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1701\u001b[0m \u001b[0mown_fhd\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1702\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/.pyenv/versions/3.6.7/lib/python3.6/site-packages/numpy/lib/_datasource.py\u001b[0m in \u001b[0;36mopen\u001b[0;34m(path, mode, destpath, encoding, newline)\u001b[0m\n\u001b[1;32m 260\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 261\u001b[0m \u001b[0mds\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mDataSource\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdestpath\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 262\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mds\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mopen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mpath\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmode\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mencoding\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mencoding\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnewline\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mnewline\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 263\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 264\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/.pyenv/versions/3.6.7/lib/python3.6/site-packages/numpy/lib/_datasource.py\u001b[0m in \u001b[0;36mopen\u001b[0;34m(self, path, mode, encoding, newline)\u001b[0m\n\u001b[1;32m 616\u001b[0m encoding=encoding, newline=newline)\n\u001b[1;32m 617\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 618\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mIOError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"%s not found.\"\u001b[0m \u001b[0;34m%\u001b[0m \u001b[0mpath\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 619\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 620\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mOSError\u001b[0m: pulse_before_cavity.g2 not found." ] } ], "execution_count": 8, "metadata": {} }, { "cell_type": "code", "source": [ "def exp_amplitude_f(x, tau, t0 = 0, amp = 1, alpha=1e-3):\n", " return exponential_pulse(x, tau, t0, amp, alpha)**2\n", "\nexp_model = Model(exp_amplitude_f) + ConstantModel()" ], "outputs": [], "execution_count": 9, "metadata": {} }, { "cell_type": "code", "source": [ "p = Parameters()\n", "p.add('tau', 7e-3, min=1e-3)\n", "p.add('alpha', 1e-2, vary=True)\n", "p.add('amp', 1e3, min=0)\n", "p.add('t0', .3)\n", "p.add('c', 10)\n", "\n", "result = exp_model.fit(data_pulse_in, p, x=exp_t / 1e3, weights=1 / np.sqrt(data_pulse_in))\n", "print(result.fit_report())\n", "\n# result.plot();" ], "outputs": [ { "output_type": "error", "ename": "NameError", "evalue": "name 'data_pulse_in' is not defined", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0mp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0madd\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'c'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m10\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 7\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 8\u001b[0;31m \u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mexp_model\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdata_pulse_in\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mp\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mexp_t\u001b[0m \u001b[0;34m/\u001b[0m \u001b[0;36m1e3\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mweights\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1\u001b[0m \u001b[0;34m/\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msqrt\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdata_pulse_in\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 9\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mresult\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfit_report\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 10\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mNameError\u001b[0m: name 'data_pulse_in' is not defined" ] } ], "execution_count": 10, "metadata": {} }, { "cell_type": "code", "source": [ "tau = result.best_values['tau']\n", "alpha = result.best_values['alpha']\n", "\n", "# time vector\n", "dt = 1e-5\n", "time_vec = np.arange(-1, 1, dt)\n", "\n", "pulse = exponential_pulse(time_vec, tau, alpha)\n", "\n", "pulse_after_cavity = cavity_reflection(pulse, dt, R1, R2, cavity_lw, 0)\n", "print(cavity_lw)" ], "outputs": [ { "output_type": "error", "ename": "NameError", "evalue": "name 'result' is not defined", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mtau\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mresult\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbest_values\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'tau'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0malpha\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mresult\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbest_values\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'alpha'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;31m# time vector\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0mdt\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m1e-5\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mNameError\u001b[0m: name 'result' is not defined" ] } ], "execution_count": 11, "metadata": {} }, { "cell_type": "code", "source": [ "plt.figure()\n", "plt.plot(exp_t, data_pulse_out)\n", "plt.plot(time_vec*1e3 + 368, 2.9e10 * np.abs(pulse_after_cavity)**2 + 35, label='output')\n", "plt.xlim(250, 600);" ], "outputs": [ { "output_type": "error", "ename": "NameError", "evalue": "name 'exp_t' is not defined", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfigure\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mexp_t\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdata_pulse_out\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtime_vec\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0;36m1e3\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;36m368\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2.9e10\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mabs\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mpulse_after_cavity\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m**\u001b[0m\u001b[0;36m2\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;36m35\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlabel\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'output'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mxlim\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m250\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m600\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m;\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mNameError\u001b[0m: name 'exp_t' is not defined" ] }, { "output_type": "display_data", "data": { "text/plain": [ "
" ] }, "metadata": {} } ], "execution_count": 12, "metadata": {} }, { "cell_type": "code", "source": [], "outputs": [], "execution_count": 13, "metadata": {} } ], "metadata": { "kernelspec": { "name": "python3", "language": "python", "display_name": "Python 3" }, "language_info": { "name": "python", "version": "3.6.7", "mimetype": "text/x-python", "codemirror_mode": { "name": "ipython", "version": 3 }, "pygments_lexer": "ipython3", "nbconvert_exporter": "python", "file_extension": ".py" }, "toc": { "toc_position": { "height": "calc(100% - 180px)", "left": "10px", "top": "150px", "width": "277px" }, "skip_h1_title": true, "number_sections": true, "title_cell": "Table of Contents", "toc_window_display": true, "base_numbering": 1, "toc_section_display": true, "title_sidebar": "Contents", "toc_cell": true, "nav_menu": {}, "sideBar": true }, "kernel_info": { "name": "python3" }, "nteract": { "version": "0.12.3" } }, "nbformat": 4, "nbformat_minor": 2 }