{ "cells": [ { "cell_type": "markdown", "id": "061b8ed3-022e-4f94-b5dc-5ceabb0eebfc", "metadata": {}, "source": [ "# Optimizer - cavity modes" ] }, { "cell_type": "code", "execution_count": 1, "id": "fa52e5ca", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Run Optimizer instance with id: opt id \n", "\n", "Starting optimizer with 1 provided measurement dependencies and 1 fit parameter(s):\n", "\n", " no. | id | initial value | min | max\n", " 0 | Pt top thickness | 3 | 0 | 10\n", "\n", "Using 0 equality constraint(s) on parameter(s):\n", "\n", "Using 0 inequality constraint(s).\n", "\n", "Residual start value: 0.0208257\n", "\n", "\n", "Calling ceres solver with fit method LevMar\n", "\n", "Ceres Solver Report: Iterations: 15, Initial cost: 2.168554e-04, Final cost: 1.053505e-05, Termination: CONVERGENCE\n", "\n", "Optimizer finished with 1 fit parameter(s):\n", "\n", " no. | id | fit value | initial value | min | max\n", " 0 | Pt top thickness | 2.41436 | 3 | 0 | 10\n", "\n", "and 0 equality constraint(s) on parameter(s):\n", "\n", "and 0 inequality constraint(s).\n", "\n", "Optimized residual from 0.0208257 to 0.00459022\n", "\n", "Optimizer instance finished. id:opt id\n", "\n", "\n" ] }, { "data": { "image/png": "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oaEBFRUV6iw8Tolcpxb3mYx0rae9vR27d+/OuO/lr371K/z85z/H22+/jVNOOaXX54zy3AQGvs7+GOW5GQgE0N3dDcBY389I4dfZHy2/n/Fe4/jx47Fp0yZs2LBB+e/SSy/FvHnzsGHDBlRVVaXve6la27XBLFu2THQ6neILL7wg1tbWirfccotYUFAg1tXViaIoitdff7147733Krf/5JNPRJvNJj7++OPi1q1bxQcffLDf7fMFBQXi3/72N/HLL78UL7vsMl1s6VTzOtva2sS7775bXLNmjbh3717x/fffF6dPny6OGTNG7Orq0uQaRTH+6+zu7hbXr18vrl+/XqyoqBDvvvtucf369eLOnTtjvs90S8U13nXXXeKqVavEvXv3ip988ok4f/58saSkRDx27Fjar08W73U++uijosPhEP/85z/32mbc1tbW6zaZ/twc7DqN8tx8+OGHxXfffVfcvXu3WFtbKz7++OOizWYTn332WeU2Rvh+Dnadevx+xnuNkfrbBZeO7yUDoQH893//tzh8+HDR4XCIs2bNEv/9738rnzvrrLPEhQsX9rr9K6+8Io4dO1Z0OBzihAkTxDfeeKPX5wOBgHj//feL5eXlotPpFM8991xx+/bt6biUAal5nR0dHeL5558vlpaWina7XRwxYoR48803axYchIvnOvfu3SsC6PPfWWedFfN9akHta7zmmmvEiooK0eFwiEOHDhWvueYacdeuXWm8ov7Fc50jRozo9zoffPBB5TZGeG4Odp1GeW7++Mc/FkePHi26XC6xsLBQnDNnjrhs2bJe92eE7+dg16nX72e8v0/C9RcIpeN7ydPniYiIyLTYI0RERESmxUCIiIiITIuBEBEREZkWAyEiIiIyLQZCREREZFoMhIiIiMi0GAgRERGRaTEQIiIiItNiIEREhvDTn/4UU6dOTfp+GhoaUFZWhn379kW9zapVqyAIApqbm5N+PJnX60V1dTU+++wz1e6TiAbHQIiIKMwvf/lLXHbZZaiurk7r4zocDtx9992455570vq4RGbHQIiIKKijowO///3vcdNNN2ny+Ndddx0+/vhjbNmyRZPHJzIjBkJElFJvv/02zjjjDBQUFKC4uBhf+cpXsHv3buXz+/btgyAI+Mtf/oJ58+YhOzsbU6ZMwZo1a3rdz7PPPouqqipkZ2fjiiuuwBNPPIGCgoIBH/u5557DySefDJfLhfHjx+O3v/3tgLd/88034XQ6ceqpp/b5+NixY5GVlYV58+b1Wzb7+OOPMXfuXGRlZaGqqgp33HEHPB6P8vmjR4/i4osvRlZWFkaOHImXX34Z1dXVWLJkiXKbwsJCnH766Vi2bNmA6yQi9TAQIqKU8ng8WLx4MT777DOsWLECFosFV1xxBQKBQK/b/fjHP8bdd9+NDRs2YOzYsfj6178On88HAPjkk0/wne98B9/73vewYcMGnHfeefjlL3854OP+3//9Hx544AH88pe/xNatW/Hwww/j/vvvx4svvhj1az766CPMmDGj18cOHjyIK6+8Epdccgk2bNiAb3/727j33nt73Wb37t248MILcdVVV+HLL7/E8uXL8fHHH+O2225TbvPNb34TR44cwapVq/Daa6/hmWeewbFjx/qsYdasWfjoo48GvDYiUpGqZ9kTEQ3i+PHjIgBx06ZNoiiK4t69e0UA4nPPPafcZsuWLSIAcevWraIoiuI111wjXnzxxb3u57rrrhPz8/OV9x988EFxypQpyvsnnXSS+PLLL/f6mp///OfinDlzoq7tsssuE2+88cZeH7vvvvvEmpqaXh+75557RABiU1OTKIqieNNNN4m33HJLr9t89NFHosViETs7O8WtW7eKAMR169Ypn9+5c6cIQHzyySd7fd2vf/1rsbq6OuoaiUhdzAgRUUrt3LkTX//61zFq1Cjk5eUpTcgHDhzodbvJkycrb1dUVACAkjHZvn07Zs2a1ev2ke+H83g82L17N2666Sbk5uYq//3iF7/oVZaL1NnZCZfL1etjW7duxezZs3t9bM6cOb3e37hxI1544YVej3XBBRcgEAhg79692L59O2w2G6ZPn658zejRo1FYWNhnDVlZWejo6Ii6RiJSl03rBRCRsV1yySUYMWIEnn32WVRWViIQCGDixInwer29bme325W3BUEAgD7ls1i1t7cDkPqKIoMYq9Ua9etKSkrQ1NSU0OPdeuutuOOOO/p8bvjw4dixY0fM99XY2IjS0tK410BEiWEgREQp09DQgO3bt+PZZ5/F3LlzAUhNxfEaN24c1q1b1+tjke+HKy8vR2VlJfbs2YPrrrsu5seZNm0a/vd//7fXx04++WT8/e9/7/Wxf//7373enz59OmprazF69Oio6/f5fFi/fr3Sg7Rr165+g67Nmzdj2rRpMa+ZiJLD0hgRpUxhYSGKi4vxzDPPYNeuXfjggw+wePHiuO/n9ttvx5tvvoknnngCO3fuxO9+9zu89dZbSuaoPw899BAeeeQR/OY3v8GOHTuwadMmPP/883jiiSeifs0FF1yALVu29ApQvvOd72Dnzp34wQ9+gO3bt+Pll1/GCy+80Ovr7rnnHvzrX//Cbbfdhg0bNmDnzp3429/+pjRLjx8/HvPnz8ctt9yCtWvXYv369bjllluQlZXV5xo++ugjnH/++XH/GxFRYhgIEVHKWCwWLFu2DJ9//jkmTpyIO++8E4899ljc93P66afj6aefxhNPPIEpU6bg7bffxp133tmnnyfct7/9bTz33HN4/vnnMWnSJJx11ll44YUXMHLkyKhfM2nSJEyfPh2vvPKK8rHhw4fjtddew+uvv44pU6bg6aefxsMPP9zr6yZPnowPP/wQO3bswNy5czFt2jQ88MADqKysVG7z0ksvoby8HGeeeSauuOIK3HzzzXC73b2uYc2aNWhpacHVV18d978RESVGEEVR1HoRRETxuvnmm7Ft2zbVt5q/8cYb+MEPfoDNmzfDYknd34qHDh1CVVUV3n//fZx77rkAgGuuuQZTpkzBj370o5Q9LhH1xh4hIsoIjz/+OM477zzk5OTgrbfewosvvjjogMREXHzxxdi5cycOHz6Mqqoq1e73gw8+QHt7OyZNmoSjR4/ihz/8Iaqrq3HmmWcCkM4amzRpEu68807VHpOIBseMEBFlhK997WtYtWoV2traMGrUKNx+++34zne+o/WyYvbOO+/grrvuwp49e+B2u3HaaadhyZIlGDFihNZLIzI1BkJERERkWmyWJiIiItNiIERERESmxUCIiIiITIuBEBEREZkWAyEiIiIyLQZCREREZFoMhIiIiMi0GAgRERGRaf1//7LXkoCwfpkAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import nexus as nx\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from scipy.signal import argrelextrema\n", "\n", "# ------------------------- layers --------------------------\n", "\n", "# the initial guess for the top layer is 3 nm here\n", "# set it to a Var object with reasonable bounds\n", "lay_Pt_top = nx.Layer(id = \"Pt top\",\n", " material = nx.Material.Template(nx.lib.material.Pt),\n", " thickness = nx.Var(3, min = 0, max = 10, fit = True, id = \"Pt top thickness\"))\n", "\n", "lay_B4C = nx.Layer(id = \"B4C\",\n", " material = nx.Material.Template(nx.lib.material.B4C),\n", " thickness = 15)\n", "\n", "lay_Fe = nx.Layer(id = \"Fe\",\n", " material = nx.Material.Template(nx.lib.material.Fe_enriched),\n", " thickness = 2)\n", "\n", "lay_Pt_bottom = nx.Layer(id = \"Pt bottom\",\n", " material = nx.Material.Template(nx.lib.material.Pt),\n", " thickness = 15)\n", "\n", "lay_substrate = nx.Layer(id = \"substrate\",\n", " material = nx.Material.Template(nx.lib.material.Si),\n", " thickness = nx.inf)\n", "\n", "sample = nx.Sample(id = \"cavity\",\n", " layers = [lay_Pt_top,\n", " lay_B4C,\n", " lay_Fe,\n", " lay_B4C,\n", " lay_Pt_bottom,\n", " lay_substrate],\n", " geometry = \"r\")\n", "\n", "beam = nx.Beam()\n", "beam.LinearSigma()\n", "\n", "exp = nx.Experiment(beam = beam,\n", " objects = sample,\n", " id = \"my exp\")\n", "\n", "# initialize a reflectivity object used for the optimization\n", "angles = np.linspace(0.01, 0.4, 1001)\n", "\n", "reflectivity = nx.Reflectivity(experiment = exp,\n", " sample = sample,\n", " energy = nx.lib.energy.Fe57,\n", " angles = angles)\n", "\n", "# setup the optimizer\n", "class NexusOptimizer(nx.Optimizer):\n", " def __init__(self, measurements, id):\n", " super().__init__(measurements, id)\n", "\n", " # the defienition of the residual calculation\n", " def Residual(self):\n", " # calculate the reflectivity\n", " intensity = reflectivity()\n", " # get the index of the 1st minimum\n", " min_index_1st = np.squeeze(argrelextrema(intensity, np.less))[0]\n", " # get the index of the 3rd minimum\n", " min_index_3rd = np.squeeze(argrelextrema(intensity, np.less))[2]\n", " # optimize for the intensity at both positions\n", " residual = intensity[min_index_1st]**2 + intensity[min_index_3rd]**2\n", " return residual\n", "\n", "# pass the reflectivity object to the optimizer\n", "opt = NexusOptimizer(measurements = [reflectivity],\n", " id = \"opt id\")\n", "\n", "# let's just use a local gradient-free algorithm here\n", "opt.options.method = \"LevMar\"\n", "\n", "# run the optimization\n", "opt.Evaluate() # or simply call opt()\n", "\n", "plt.semilogy(angles, reflectivity.result)\n", "plt.xlabel('angle (deg)')\n", "plt.ylabel('reflectivity')\n", "plt.show()" ] } ], "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.11.9" }, "widgets": { "application/vnd.jupyter.widget-state+json": { "state": {}, "version_major": 2, "version_minor": 0 } } }, "nbformat": 4, "nbformat_minor": 5 }