fpraktikum/GL/scripts/Kaustik.ipynb

415 lines
9 KiB
Text

{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"autoscroll": false,
"collapsed": false,
"ein.hycell": false,
"ein.tags": "worksheet-0",
"slideshow": {
"slide_type": "-"
}
},
"outputs": [],
"source": [
"\"\"\"Calculation of the Kaustik of a Laserbeam.\"\"\"\n",
"\n",
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"from SecondaryValue import SecondaryValue\n",
"from scipy.optimize import curve_fit\n",
"import pandas as pd\n",
"import glob\n"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"autoscroll": false,
"collapsed": false,
"ein.hycell": false,
"ein.tags": "worksheet-0",
"slideshow": {
"slide_type": "-"
}
},
"outputs": [],
"source": [
"# Input Parameters\n",
"R = 100 # cm\n",
"L = 80 # cm\n",
"f = 15 # cm\n",
"lam = 0.00006328 # cm\n",
"lens_pos = 25+29.5+10 # cm\n"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"autoscroll": false,
"collapsed": false,
"ein.hycell": false,
"ein.tags": "worksheet-0",
"slideshow": {
"slide_type": "-"
}
},
"outputs": [],
"source": [
"# Optical Matrix Elements\n",
"A = SecondaryValue('1-x/f', defaults=dict(f=f))\n",
"B = SecondaryValue('s+x-x*s/f', defaults=dict(f=f))\n",
"C = SecondaryValue('-1/f', defaults=dict(f=f))\n",
"D = SecondaryValue('1-s/f', defaults=dict(f=f))\n"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"autoscroll": false,
"collapsed": false,
"ein.hycell": false,
"ein.tags": "worksheet-0",
"slideshow": {
"slide_type": "-"
}
},
"outputs": [],
"source": [
"w0 = SecondaryValue('((l/pi)^2*L*(R-L))^(1/4)', defaults=dict(l=lam, L=L, R=R, pi=np.pi))"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"autoscroll": false,
"collapsed": false,
"ein.hycell": false,
"ein.tags": "worksheet-0",
"slideshow": {
"slide_type": "-"
}
},
"outputs": [],
"source": [
"# b parameter\n",
"b = SecondaryValue('l/(pi*w0^2)', defaults=dict(l=lam, pi=np.pi), dependencies=dict(w0=w0))\n",
"new_b = SecondaryValue('b*(A*D-C*B)/(A^2+B^2*b^2)', dependencies=dict(A=A, B=B, C=C, D=D, b=b))\n",
"b_before = SecondaryValue('b/(1+x^2*b^2)', dependencies=dict(b=b))"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"autoscroll": false,
"collapsed": false,
"ein.hycell": false,
"ein.tags": "worksheet-0",
"slideshow": {
"slide_type": "-"
}
},
"outputs": [],
"source": [
"# omega\n",
"w = SecondaryValue('sqrt(l/(p*b))', defaults=dict(l=lam, p=np.pi), dependencies=dict(b=new_b))\n",
"w_before = SecondaryValue('sqrt(l/(p*b))', defaults=dict(l=lam, p=np.pi), dependencies=dict(b=b_before))"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"autoscroll": false,
"collapsed": false,
"ein.hycell": false,
"ein.tags": "worksheet-0",
"slideshow": {
"slide_type": "-"
}
},
"outputs": [
{
"data": {
"text/plain": [
"0.02838496052328435"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"w0()"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"autoscroll": false,
"collapsed": false,
"ein.hycell": false,
"ein.tags": "worksheet-0",
"slideshow": {
"slide_type": "-"
}
},
"outputs": [],
"source": [
"data = pd.read_csv(r'./../messungen/Boettcher_Matthes/Kaustik-Messung/11_2008-07-13_03h-00m-41s.csv', sep=';', encoding='latin1')\n",
"fwhm = 'Value.18'\n",
"zs = np.array([11, 13, 15, 17, 19, 21, 23, 27])"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"autoscroll": false,
"collapsed": false,
"ein.hycell": false,
"ein.tags": "worksheet-0",
"slideshow": {
"slide_type": "-"
}
},
"outputs": [],
"source": [
"def extract_fwhm(z):\n",
" filename = \\\n",
" glob.glob(f'./../messungen/Boettcher_Matthes/Kaustik-Messung/{z}*.csv')[0]\n",
" dat = pd.read_csv(filename, sep=';', encoding='latin1')\n",
" return dat[fwhm][0]\n"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"autoscroll": false,
"collapsed": false,
"ein.hycell": false,
"ein.tags": "worksheet-0",
"slideshow": {
"slide_type": "-"
}
},
"outputs": [],
"source": [
"widths = np.array([extract_fwhm(z) for z in zs]) * 0.00056 / (np.sqrt(2*np.log(2))) # cm"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"autoscroll": false,
"collapsed": false,
"ein.hycell": false,
"ein.tags": "worksheet-0",
"slideshow": {
"slide_type": "-"
}
},
"outputs": [],
"source": [
"popt, pcov = curve_fit(lambda x, w0, off: w(w0=w0, s=lens_pos, x=[x+off]), zs, widths)"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"autoscroll": false,
"collapsed": false,
"ein.hycell": false,
"ein.tags": "worksheet-0",
"slideshow": {
"slide_type": "-"
}
},
"outputs": [],
"source": [
"%matplotlib qt5\n",
"xs_before = np.linspace(0, lens_pos, 1000)\n",
"xs_after = np.linspace(0, 40, 1000)\n",
"plt.plot(xs_before, w_before(w0=popt[0], x=[xs_before]), color='grey',\n",
" linestyle='--')\n",
"plt.plot(lens_pos + xs_after, w(w0=popt[0], s=lens_pos, x=[xs_after]), color='grey',\n",
" linestyle='--', label='Theoretische Kaustik, $w_0={:f}cm$'.format(popt[0]))\n",
"plt.errorbar(lens_pos + zs + popt[1], widths, yerr=0.00056,\n",
" xerr=1, linestyle='none', marker='x', markersize=10,\n",
" ecolor='red', elinewidth=1, barsabove=True,\n",
" label='Gemessene Kaustik', zorder=100)\n",
"plt.xlabel('z [cm]')\n",
"plt.ylabel('w [cm]')\n",
"plt.legend()\n",
"plt.grid()\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"autoscroll": false,
"collapsed": false,
"ein.hycell": false,
"ein.tags": "worksheet-0",
"slideshow": {
"slide_type": "-"
}
},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 330,
"metadata": {
"autoscroll": false,
"collapsed": false,
"ein.hycell": false,
"ein.tags": "worksheet-0",
"slideshow": {
"slide_type": "-"
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([0.00158225, 0.234916 ])"
]
},
"execution_count": 330,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.sqrt(np.diag(pcov))"
]
},
{
"cell_type": "code",
"execution_count": 331,
"metadata": {
"autoscroll": false,
"collapsed": false,
"ein.hycell": false,
"ein.tags": "worksheet-0",
"slideshow": {
"slide_type": "-"
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([0.03963238, 1.20690559])"
]
},
"execution_count": 331,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"popt"
]
},
{
"cell_type": "code",
"execution_count": 332,
"metadata": {
"autoscroll": false,
"collapsed": false,
"ein.hycell": false,
"ein.tags": "worksheet-0",
"slideshow": {
"slide_type": "-"
}
},
"outputs": [
{
"data": {
"text/plain": [
"(0.02838496052328435, 0.0001330545024528954)"
]
},
"execution_count": 332,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"w0(L=(80,.5))"
]
},
{
"cell_type": "code",
"execution_count": 344,
"metadata": {
"autoscroll": false,
"collapsed": false,
"ein.hycell": false,
"ein.tags": "worksheet-0",
"slideshow": {
"slide_type": "-"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
",0,1,2\n",
"0,11.0,29.9,142.0\n",
"1,13.0,19.1,91.0\n",
"2,15.0,14.0,67.0\n",
"3,17.0,17.5,83.0\n",
"4,19.0,27.7,132.0\n",
"5,21.0,41.5,197.0\n",
"6,23.0,56.0,266.0\n",
"7,27.0,78.3,372.0\n",
"\n"
]
}
],
"source": [
"\n",
"print(pd.DataFrame(np.array([zs, np.array([extract_fwhm(z) for z in zs]), np.around(widths*10*1000)]).T).to_csv())"
]
}
],
"metadata": {
"kernelspec": {
"argv": [
"/usr/bin/python3",
"-m",
"ipykernel_launcher",
"-f",
"{connection_file}"
],
"display_name": "Python 3",
"env": null,
"interrupt_mode": "signal",
"language": "python",
"metadata": null,
"name": "python3"
},
"name": "Kaustik.ipynb"
},
"nbformat": 4,
"nbformat_minor": 2
}