{ "cells": [ { "attachments": {}, "cell_type": "markdown", "id": "d8abb129-73c7-49ca-bb76-140f1813d29a", "metadata": {}, "source": [ "# Example-30: Orbit (effect of transverse shift)" ] }, { "cell_type": "code", "execution_count": 1, "id": "6452d9bb-6608-4fa9-ab8f-78531fac5fa0", "metadata": {}, "outputs": [], "source": [ "# In this example effect of transverse shifts on closed orbit is illustrated\n", "# Quadrupoles and sextupoles are shifted in transverse planes\n", "# Given shifts variations, effect on orbit at a singe location is computed with MC sampling" ] }, { "cell_type": "code", "execution_count": 2, "id": "394b5f57-0e62-4d70-ac60-1b4a06b35e76", "metadata": {}, "outputs": [], "source": [ "# Import\n", "\n", "import torch\n", "torch.set_printoptions(linewidth=128)\n", "\n", "import matplotlib\n", "from matplotlib import pyplot as plt\n", "matplotlib.rcParams['text.usetex'] = True\n", "\n", "from twiss import twiss\n", "\n", "from ndmap.signature import chop\n", "from ndmap.evaluate import evaluate\n", "from ndmap.pfp import parametric_fixed_point\n", "\n", "from ndmap.pfp import clean_point\n", "from ndmap.pfp import chain_point\n", "from ndmap.pfp import matrix\n", "\n", "from model.library.drift import Drift\n", "from model.library.quadrupole import Quadrupole\n", "from model.library.sextupole import Sextupole\n", "from model.library.dipole import Dipole\n", "from model.library.line import Line\n", "\n", "from model.command.wrapper import wrapper\n", "from model.command.wrapper import group\n", "\n", "from model.command.orbit import orbit" ] }, { "cell_type": "code", "execution_count": 3, "id": "22c3548a-c486-4d1f-bd9e-329d32c7588d", "metadata": {}, "outputs": [], "source": [ "# Define simple FODO based lattice using nested lines\n", "\n", "DR = Drift('DR', 0.25)\n", "BM = Dipole('BM', 3.50, torch.pi/4.0)\n", "\n", "QF_A = Quadrupole('QF_A', 0.5, +0.20)\n", "QD_A = Quadrupole('QD_A', 0.5, -0.19)\n", "QF_B = Quadrupole('QF_B', 0.5, +0.20)\n", "QD_B = Quadrupole('QD_B', 0.5, -0.19)\n", "QF_C = Quadrupole('QF_C', 0.5, +0.20)\n", "QD_C = Quadrupole('QD_C', 0.5, -0.19)\n", "QF_D = Quadrupole('QF_D', 0.5, +0.20)\n", "QD_D = Quadrupole('QD_D', 0.5, -0.19)\n", "\n", "SF_A = Sextupole('SF_A', 0.25, +0.75)\n", "SD_A = Sextupole('SD_A', 0.25, -1.25)\n", "SF_B = Sextupole('SF_B', 0.25, +0.75)\n", "SD_B = Sextupole('SD_B', 0.25, -1.25)\n", "SF_C = Sextupole('SF_C', 0.25, +0.75)\n", "SD_C = Sextupole('SD_C', 0.25, -1.25)\n", "SF_D = Sextupole('SF_D', 0.25, +0.75)\n", "SD_D = Sextupole('SD_D', 0.25, -1.25)\n", "\n", "FODO_A = Line('FODO_A', [QF_A, DR, SF_A, DR, BM, DR, SD_A, DR, QD_A, QD_A, DR, SD_A, DR, BM, DR, SF_A, DR, QF_A], propagate=True, dp=0.0, exact=False, output=False, matrix=False)\n", "FODO_B = Line('FODO_B', [QF_B, DR, SF_B, DR, BM, DR, SD_B, DR, QD_B, QD_B, DR, SD_B, DR, BM, DR, SF_B, DR, QF_B], propagate=True, dp=0.0, exact=False, output=False, matrix=False)\n", "FODO_C = Line('FODO_C', [QF_C, DR, SF_C, DR, BM, DR, SD_C, DR, QD_C, QD_C, DR, SD_C, DR, BM, DR, SF_C, DR, QF_C], propagate=True, dp=0.0, exact=False, output=False, matrix=False)\n", "FODO_D = Line('FODO_D', [QF_D, DR, SF_D, DR, BM, DR, SD_D, DR, QD_D, QD_D, DR, SD_D, DR, BM, DR, SF_D, DR, QF_D], propagate=True, dp=0.0, exact=False, output=False, matrix=False)\n", "\n", "RING = Line('RING', [FODO_A, FODO_B, FODO_C, FODO_D], propagate=True, dp=0.0, exact=False, output=False, matrix=False)" ] }, { "cell_type": "code", "execution_count": 4, "id": "ae7ad4e4-aee8-40d0-9db7-f4af5a7da371", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "tensor([ 1.4136e-04, -1.5725e-05, -6.0736e-04, -2.2900e-06], dtype=torch.float64)\n" ] } ], "source": [ "# Set transverse error shifts for quadrupoles and sextupoles\n", "\n", "groups = (('dx', ['Quadrupole'], None, None),\n", " ('dy', ['Quadrupole'], None, None), \n", " ('dx', ['Sextupole'], None, None), \n", " ('dy', ['Sextupole'], None, None))\n", "\n", "ring, table, _ = group(RING, 'FODO_A', 'FODO_D', *groups, alignment=True, root=True)\n", "\n", "dx_quad = 100.0E-6*torch.randn(8, dtype=torch.float64)\n", "dy_quad = 100.0E-6*torch.randn(8, dtype=torch.float64)\n", "\n", "dx_sext = 200.0E-6*torch.randn(8, dtype=torch.float64)\n", "dy_sext = 200.0E-6*torch.randn(8, dtype=torch.float64)\n", "\n", "# Test \n", "\n", "state = torch.tensor(4*[0.0], dtype=torch.float64)\n", "print(ring(state, dx_quad, dy_quad, dx_sext, dy_sext))" ] }, { "cell_type": "code", "execution_count": 5, "id": "03d27c03-2365-4ab9-878c-f18ff260ec09", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "tensor([ 1.7361e-04, -5.1339e-06, -2.9886e-04, -3.6663e-05], dtype=torch.float64)\n", "tensor([ 1.7361e-04, -5.1339e-06, -2.9886e-04, -3.6663e-05], dtype=torch.float64)\n" ] } ], "source": [ "# Compute and test closed orbit\n", "\n", "guess = torch.tensor(4*[0.0], dtype=torch.float64)\n", "\n", "fp, _ = orbit(RING, guess, [dx_quad, dy_quad, dx_sext, dy_sext], *groups, alignment=True, limit=8, epsilon=1.0E-12)\n", "\n", "print(fp)\n", "print(ring(fp, dx_quad, dy_quad, dx_sext, dy_sext))" ] }, { "cell_type": "code", "execution_count": 6, "id": "ddb184b7-89f8-4603-81cd-5872422116f9", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "tensor([ 1.7361e-04, -5.1339e-06, -2.9886e-04, -3.6663e-05], dtype=torch.float64)\n", "tensor([ 1.7361e-04, -5.1339e-06, -2.9886e-04, -3.6663e-05], dtype=torch.float64)\n" ] } ], "source": [ "# Deviation data generation from wrapper\n", "\n", "_ = wrapper(RING, *table, verbose=True, alignment=True)\n", "_, data = _(fp, dx_quad, dy_quad, dx_sext, dy_sext)\n", "\n", "print(fp)\n", "print(RING(fp, data=data, alignment=True))" ] }, { "cell_type": "code", "execution_count": 7, "id": "e7fca183-2f03-4afd-a809-42cf47774b29", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Orbit sensitivity with MC\n", "\n", "def fn(dx_quad, dy_quad, dx_sext, dy_sext):\n", " guess = torch.tensor(4*[0.0], dtype=torch.float64)\n", " point, _ = orbit(RING, guess, [dx_quad, dy_quad, dx_sext, dy_sext], *groups, alignment=True, limit=64, epsilon=None)\n", " return point\n", "\n", "dx_quad = 100.0E-6*torch.randn((2**12, 8), dtype=torch.float64)\n", "dy_quad = 100.0E-6*torch.randn((2**12, 8), dtype=torch.float64)\n", "\n", "dx_sext = 200.0E-6*torch.randn((2**12, 8), dtype=torch.float64)\n", "dy_sext = 200.0E-6*torch.randn((2**12, 8), dtype=torch.float64)\n", "\n", "cqx, cpx, cqy, cpy = torch.vmap(fn)(dx_quad, dy_quad, dx_sext, dy_sext).T\n", "\n", "fig, (ax, ay) = plt.subplots(1, 2, figsize=(12, 5))\n", "ax.hist(cqx.cpu().numpy(), bins=100, range=(-1.0E-3, +1.0E-3), color='blue', alpha=0.7)\n", "ay.hist(cqy.cpu().numpy(), bins=100, range=(-1.0E-3, +1.0E-3), color='blue', alpha=0.7)\n", "plt.tight_layout() \n", "plt.show()" ] } ], "metadata": { "colab": { "collapsed_sections": [ "myt0_gMIOq7b", "5d97819c" ], "name": "03_frequency.ipynb", "provenance": [] }, "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.12.1" }, "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": 5 }