{ "cells": [ { "attachments": {}, "cell_type": "markdown", "id": "262a5ec8-2553-4237-ab62-319b6ca22089", "metadata": {}, "source": [ "# Example-61: Line indexing and slicing" ] }, { "cell_type": "code", "execution_count": 1, "id": "15970df9-8371-49dc-a839-df4b3914ac8c", "metadata": {}, "outputs": [], "source": [ "# In this example sequence indexing is detailed\n", "\n", "# Indexing can be used to extract individual elements or a sequence of elements (list of elements)\n", "# Slicing syntax is used for sequence extraction\n", "# Note, the first element is included, while the final one is excluded\n", "# But both edges are kept if names are used for slicing" ] }, { "cell_type": "code", "execution_count": 2, "id": "40ba0325-b0df-4604-9f51-00ec05e7788a", "metadata": {}, "outputs": [], "source": [ "# Import\n", "\n", "import matplotlib\n", "from matplotlib import pyplot as plt\n", "from matplotlib.patches import Rectangle\n", "matplotlib.rcParams['text.usetex'] = True\n", "\n", "from plotly import graph_objects\n", "\n", "import torch\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.bpm import BPM\n", "from model.library.line import Line\n", "\n", "from model.command.layout import Layout" ] }, { "cell_type": "code", "execution_count": 3, "id": "3b23d93d-c3d3-4775-ab94-9dbb69d9d21f", "metadata": {}, "outputs": [], "source": [ "# Define simple FODO based lattice\n", "\n", "B1 = BPM('B1', direction='inverse')\n", "B2 = BPM('B2', direction='forward')\n", "\n", "QF1 = Quadrupole('QF1', 0.5, +0.20)\n", "QF2 = Quadrupole('QF2', 0.5, +0.20)\n", "\n", "QD1 = Quadrupole('QD1', 0.5, -0.19)\n", "QD2 = Quadrupole('QD2', 0.5, -0.19)\n", "\n", "BM1 = Dipole('BM1', 3.50, torch.pi/4.0) \n", "BM2 = Dipole('BM2', 3.50, torch.pi/4.0) \n", "\n", "SF1 = Sextupole('SF1', 0.25)\n", "SF2 = Sextupole('SF2', 0.25)\n", "\n", "SD1 = Sextupole('SD1', 0.25)\n", "SD2 = Sextupole('SD2', 0.25)\n", "\n", "DR1 = Drift('DR1', 0.25)\n", "DR2 = Drift('DR2', 0.25)\n", "DR3 = Drift('DR3', 0.25)\n", "DR4 = Drift('DR4', 0.25)\n", "DR5 = Drift('DR5', 0.25)\n", "DR6 = Drift('DR6', 0.25)\n", "DR7 = Drift('DR7', 0.25)\n", "DR8 = Drift('DR8', 0.25)\n", "\n", "FODO = Line('FODO', \n", " [B1, QF1, DR1, SF1, DR2, BM1, DR3, SD1, DR4, QD1, QD2, DR5, SD2, DR6, BM2, DR7, SF2, DR8, QF2, B2], \n", " propagate=True, \n", " dp=0.0, \n", " exact=False, \n", " output=False, \n", " matrix=False)" ] }, { "cell_type": "code", "execution_count": 4, "id": "3f77b5be-4211-404e-9f60-1c4a52abf978", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "BPM(name=\"B1\", direction=\"inverse\", dp=0.0)\n", "Quadrupole(name=\"QF1\", length=0.5, kn=0.200000000000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "Drift(name=\"DR1\", length=0.25, dp=0.0, exact=False, ns=1, order=0)\n", "Sextupole(name=\"SF1\", length=0.25, ms=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "Drift(name=\"DR2\", length=0.25, dp=0.0, exact=False, ns=1, order=0)\n", "Dipole(name=\"BM1\", length=3.5, angle=0.7853981633974493, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=1e-15, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "Drift(name=\"DR3\", length=0.25, dp=0.0, exact=False, ns=1, order=0)\n", "Sextupole(name=\"SD1\", length=0.25, ms=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "Drift(name=\"DR4\", length=0.25, dp=0.0, exact=False, ns=1, order=0)\n", "Quadrupole(name=\"QD1\", length=0.5, kn=-0.189999999999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "Quadrupole(name=\"QD2\", length=0.5, kn=-0.189999999999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "Drift(name=\"DR5\", length=0.25, dp=0.0, exact=False, ns=1, order=0)\n", "Sextupole(name=\"SD2\", length=0.25, ms=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "Drift(name=\"DR6\", length=0.25, dp=0.0, exact=False, ns=1, order=0)\n", "Dipole(name=\"BM2\", length=3.5, angle=0.7853981633974493, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=1e-15, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "Drift(name=\"DR7\", length=0.25, dp=0.0, exact=False, ns=1, order=0)\n", "Sextupole(name=\"SF2\", length=0.25, ms=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "Drift(name=\"DR8\", length=0.25, dp=0.0, exact=False, ns=1, order=0)\n", "Quadrupole(name=\"QF2\", length=0.5, kn=0.200000000000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "BPM(name=\"B2\", direction=\"forward\", dp=0.0)\n" ] } ], "source": [ "# Print FODO line\n", "\n", "print(FODO)" ] }, { "cell_type": "code", "execution_count": 5, "id": "2d8641de-7671-4fb7-b66d-48b4895ce80b", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "00 BPM(name=\"B1\", direction=\"inverse\", dp=0.0)\n", "01 Quadrupole(name=\"QF1\", length=0.5, kn=0.200000000000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "02 Drift(name=\"DR1\", length=0.25, dp=0.0, exact=False, ns=1, order=0)\n", "03 Sextupole(name=\"SF1\", length=0.25, ms=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "04 Drift(name=\"DR2\", length=0.25, dp=0.0, exact=False, ns=1, order=0)\n", "05 Dipole(name=\"BM1\", length=3.5, angle=0.7853981633974493, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=1e-15, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "06 Drift(name=\"DR3\", length=0.25, dp=0.0, exact=False, ns=1, order=0)\n", "07 Sextupole(name=\"SD1\", length=0.25, ms=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "08 Drift(name=\"DR4\", length=0.25, dp=0.0, exact=False, ns=1, order=0)\n", "09 Quadrupole(name=\"QD1\", length=0.5, kn=-0.189999999999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "10 Quadrupole(name=\"QD2\", length=0.5, kn=-0.189999999999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "11 Drift(name=\"DR5\", length=0.25, dp=0.0, exact=False, ns=1, order=0)\n", "12 Sextupole(name=\"SD2\", length=0.25, ms=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "13 Drift(name=\"DR6\", length=0.25, dp=0.0, exact=False, ns=1, order=0)\n", "14 Dipole(name=\"BM2\", length=3.5, angle=0.7853981633974493, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=1e-15, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "15 Drift(name=\"DR7\", length=0.25, dp=0.0, exact=False, ns=1, order=0)\n", "16 Sextupole(name=\"SF2\", length=0.25, ms=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "17 Drift(name=\"DR8\", length=0.25, dp=0.0, exact=False, ns=1, order=0)\n", "18 Quadrupole(name=\"QF2\", length=0.5, kn=0.200000000000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "19 BPM(name=\"B2\", direction=\"forward\", dp=0.0)\n" ] } ], "source": [ "# Getting element by index (position in the first level sequence)\n", "\n", "for i in range(len(FODO)):\n", " print(f'{i:02d}', FODO[i])" ] }, { "cell_type": "code", "execution_count": 6, "id": "8765c123-7712-43bd-b308-6557c06ee517", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Quadrupole(name=\"QF1\", length=0.5, kn=0.200000000000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "Quadrupole(name=\"QF1\", length=0.5, kn=0.200000000000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "Quadrupole(name=\"QF1\", length=0.5, kn=0.200000000000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)\n" ] } ], "source": [ "# Note, indexing is circular\n", "\n", "print(FODO[1 - len(FODO)])\n", "print(FODO[1])\n", "print(FODO[1 + len(FODO)])" ] }, { "cell_type": "code", "execution_count": 7, "id": "b22da5be-c1b9-483a-b475-a249f6e7d2ac", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "01 Quadrupole(name=\"QF1\", length=0.5, kn=0.200000000000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "02 Drift(name=\"DR1\", length=0.25, dp=0.0, exact=False, ns=1, order=0)\n", "03 Sextupole(name=\"SF1\", length=0.25, ms=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "\n", "01 Quadrupole(name=\"QF1\", length=0.5, kn=0.200000000000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "02 Drift(name=\"DR1\", length=0.25, dp=0.0, exact=False, ns=1, order=0)\n", "03 Sextupole(name=\"SF1\", length=0.25, ms=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "04 Drift(name=\"DR2\", length=0.25, dp=0.0, exact=False, ns=1, order=0)\n", "\n" ] } ], "source": [ "# Getting subsequence by indices (start and stop first level positions)\n", "# Note, the first element is included, while the last one is excluded\n", "\n", "start, stop, step = 1, 4, 1\n", "for element in FODO[start:stop:step]:\n", " print(f'{FODO.position(element.name):02d}', element)\n", "print()\n", "\n", "start, stop, step = 1, 4 + 1, 1\n", "for element in FODO[start:stop:step]:\n", " print(f'{FODO.position(element.name):02d}', element)\n", "print()" ] }, { "cell_type": "code", "execution_count": 8, "id": "a55c2d4a-0217-4c8f-819e-2e3f6ec42b08", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "01 Quadrupole(name=\"QF1\", length=0.5, kn=0.200000000000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "02 Drift(name=\"DR1\", length=0.25, dp=0.0, exact=False, ns=1, order=0)\n", "03 Sextupole(name=\"SF1\", length=0.25, ms=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "04 Drift(name=\"DR2\", length=0.25, dp=0.0, exact=False, ns=1, order=0)\n", "05 Dipole(name=\"BM1\", length=3.5, angle=0.7853981633974493, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=1e-15, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "\n", "17 Drift(name=\"DR8\", length=0.25, dp=0.0, exact=False, ns=1, order=0)\n", "18 Quadrupole(name=\"QF2\", length=0.5, kn=0.200000000000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "19 BPM(name=\"B2\", direction=\"forward\", dp=0.0)\n", "00 BPM(name=\"B1\", direction=\"inverse\", dp=0.0)\n", "01 Quadrupole(name=\"QF1\", length=0.5, kn=0.200000000000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "02 Drift(name=\"DR1\", length=0.25, dp=0.0, exact=False, ns=1, order=0)\n", "03 Sextupole(name=\"SF1\", length=0.25, ms=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "\n" ] } ], "source": [ "# Forward sequence (step > 0)\n", "# Note, wraps around for stop < step\n", "\n", "start, stop, step = 1, 5 + 1, 1\n", "for element in FODO[start:stop:step]:\n", " print(f'{FODO.position(element.name):02d}', element)\n", "print()\n", "\n", "start, stop, step = 17, 3 + 1, 1\n", "for element in FODO[start:stop:step]:\n", " print(f'{FODO.position(element.name):02d}', element)\n", "print()" ] }, { "cell_type": "code", "execution_count": 9, "id": "58cb2a05-44e8-4800-aa20-63fb7f02f3a7", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "05 Dipole(name=\"BM1\", length=3.5, angle=0.7853981633974493, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=1e-15, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "04 Drift(name=\"DR2\", length=0.25, dp=0.0, exact=False, ns=1, order=0)\n", "03 Sextupole(name=\"SF1\", length=0.25, ms=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "02 Drift(name=\"DR1\", length=0.25, dp=0.0, exact=False, ns=1, order=0)\n", "\n", "02 Drift(name=\"DR1\", length=0.25, dp=0.0, exact=False, ns=1, order=0)\n", "01 Quadrupole(name=\"QF1\", length=0.5, kn=0.200000000000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "00 BPM(name=\"B1\", direction=\"inverse\", dp=0.0)\n", "19 BPM(name=\"B2\", direction=\"forward\", dp=0.0)\n", "18 Quadrupole(name=\"QF2\", length=0.5, kn=0.200000000000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "\n" ] } ], "source": [ "# Inverse sequence (step < 0)\n", "# Note, wraps around for stop > step\n", "\n", "start, stop, step = 5, 2 - 1, -1\n", "for element in FODO[start:stop:step]:\n", " print(f'{FODO.position(element.name):02d}', element)\n", "print()\n", "\n", "start, stop, step = 2, 16 + 1, -1\n", "for element in FODO[start:stop:step]:\n", " print(f'{FODO.position(element.name):02d}', element)\n", "print()" ] }, { "cell_type": "code", "execution_count": 10, "id": "ecf86bbd-e64d-43cd-8ebb-245f4268732d", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "BPM(name=\"B1\", direction=\"inverse\", dp=0.0)\n", "Quadrupole(name=\"QF1\", length=0.5, kn=0.200000000000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "Drift(name=\"DR1\", length=0.25, dp=0.0, exact=False, ns=1, order=0)\n", "Sextupole(name=\"SF1\", length=0.25, ms=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "Drift(name=\"DR2\", length=0.25, dp=0.0, exact=False, ns=1, order=0)\n", "Dipole(name=\"BM1\", length=3.5, angle=0.7853981633974493, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=1e-15, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "Drift(name=\"DR3\", length=0.25, dp=0.0, exact=False, ns=1, order=0)\n", "Sextupole(name=\"SD1\", length=0.25, ms=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "Drift(name=\"DR4\", length=0.25, dp=0.0, exact=False, ns=1, order=0)\n", "Quadrupole(name=\"QD1\", length=0.5, kn=-0.189999999999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "Quadrupole(name=\"QD2\", length=0.5, kn=-0.189999999999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "Drift(name=\"DR5\", length=0.25, dp=0.0, exact=False, ns=1, order=0)\n", "Sextupole(name=\"SD2\", length=0.25, ms=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "Drift(name=\"DR6\", length=0.25, dp=0.0, exact=False, ns=1, order=0)\n", "Dipole(name=\"BM2\", length=3.5, angle=0.7853981633974493, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=1e-15, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "Drift(name=\"DR7\", length=0.25, dp=0.0, exact=False, ns=1, order=0)\n", "Sextupole(name=\"SF2\", length=0.25, ms=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "Drift(name=\"DR8\", length=0.25, dp=0.0, exact=False, ns=1, order=0)\n", "Quadrupole(name=\"QF2\", length=0.5, kn=0.200000000000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "BPM(name=\"B2\", direction=\"forward\", dp=0.0)\n" ] } ], "source": [ "# Iteration\n", "# Note, iteration propagates through nested sequences if any\n", "\n", "for element in FODO:\n", " print(element)" ] }, { "cell_type": "code", "execution_count": 11, "id": "d360b91c-8326-4614-a04d-0cb23d9e3993", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "B1 BPM(name=\"B1\", direction=\"inverse\", dp=0.0)\n", "QF1 Quadrupole(name=\"QF1\", length=0.5, kn=0.200000000000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "DR1 Drift(name=\"DR1\", length=0.25, dp=0.0, exact=False, ns=1, order=0)\n", "SF1 Sextupole(name=\"SF1\", length=0.25, ms=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "DR2 Drift(name=\"DR2\", length=0.25, dp=0.0, exact=False, ns=1, order=0)\n", "BM1 Dipole(name=\"BM1\", length=3.5, angle=0.7853981633974493, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=1e-15, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "DR3 Drift(name=\"DR3\", length=0.25, dp=0.0, exact=False, ns=1, order=0)\n", "SD1 Sextupole(name=\"SD1\", length=0.25, ms=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "DR4 Drift(name=\"DR4\", length=0.25, dp=0.0, exact=False, ns=1, order=0)\n", "QD1 Quadrupole(name=\"QD1\", length=0.5, kn=-0.189999999999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "QD2 Quadrupole(name=\"QD2\", length=0.5, kn=-0.189999999999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "DR5 Drift(name=\"DR5\", length=0.25, dp=0.0, exact=False, ns=1, order=0)\n", "SD2 Sextupole(name=\"SD2\", length=0.25, ms=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "DR6 Drift(name=\"DR6\", length=0.25, dp=0.0, exact=False, ns=1, order=0)\n", "BM2 Dipole(name=\"BM2\", length=3.5, angle=0.7853981633974493, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=1e-15, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "DR7 Drift(name=\"DR7\", length=0.25, dp=0.0, exact=False, ns=1, order=0)\n", "SF2 Sextupole(name=\"SF2\", length=0.25, ms=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "DR8 Drift(name=\"DR8\", length=0.25, dp=0.0, exact=False, ns=1, order=0)\n", "QF2 Quadrupole(name=\"QF2\", length=0.5, kn=0.200000000000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "B2 BPM(name=\"B2\", direction=\"forward\", dp=0.0)\n" ] } ], "source": [ "# Getting element by name (first occurance in the first level sequence)\n", "# Note, this returns first occurance of the element with selected name\n", "# To avoid confusion, use elements with unique names\n", "\n", "for name in FODO.names:\n", " print(name, FODO[name])" ] }, { "cell_type": "code", "execution_count": 12, "id": "2dc1dcd2-3e76-4e62-9516-924512188871", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "QF1 Quadrupole(name=\"QF1\", length=0.5, kn=0.200000000000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "DR1 Drift(name=\"DR1\", length=0.25, dp=0.0, exact=False, ns=1, order=0)\n", "SF1 Sextupole(name=\"SF1\", length=0.25, ms=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "DR2 Drift(name=\"DR2\", length=0.25, dp=0.0, exact=False, ns=1, order=0)\n", "BM1 Dipole(name=\"BM1\", length=3.5, angle=0.7853981633974493, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=1e-15, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "DR3 Drift(name=\"DR3\", length=0.25, dp=0.0, exact=False, ns=1, order=0)\n", "SD1 Sextupole(name=\"SD1\", length=0.25, ms=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "\n", "QF2 Quadrupole(name=\"QF2\", length=0.5, kn=0.200000000000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "B2 BPM(name=\"B2\", direction=\"forward\", dp=0.0)\n", "B1 BPM(name=\"B1\", direction=\"inverse\", dp=0.0)\n", "QF1 Quadrupole(name=\"QF1\", length=0.5, kn=0.200000000000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "DR1 Drift(name=\"DR1\", length=0.25, dp=0.0, exact=False, ns=1, order=0)\n", "\n", "QF1 Quadrupole(name=\"QF1\", length=0.5, kn=0.200000000000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "B1 BPM(name=\"B1\", direction=\"inverse\", dp=0.0)\n", "B2 BPM(name=\"B2\", direction=\"forward\", dp=0.0)\n", "QF2 Quadrupole(name=\"QF2\", length=0.5, kn=0.200000000000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "DR8 Drift(name=\"DR8\", length=0.25, dp=0.0, exact=False, ns=1, order=0)\n", "SF2 Sextupole(name=\"SF2\", length=0.25, ms=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "DR7 Drift(name=\"DR7\", length=0.25, dp=0.0, exact=False, ns=1, order=0)\n", "BM2 Dipole(name=\"BM2\", length=3.5, angle=0.7853981633974493, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=1e-15, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "DR6 Drift(name=\"DR6\", length=0.25, dp=0.0, exact=False, ns=1, order=0)\n", "SD2 Sextupole(name=\"SD2\", length=0.25, ms=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "DR5 Drift(name=\"DR5\", length=0.25, dp=0.0, exact=False, ns=1, order=0)\n", "QD2 Quadrupole(name=\"QD2\", length=0.5, kn=-0.189999999999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "QD1 Quadrupole(name=\"QD1\", length=0.5, kn=-0.189999999999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "DR4 Drift(name=\"DR4\", length=0.25, dp=0.0, exact=False, ns=1, order=0)\n", "SD1 Sextupole(name=\"SD1\", length=0.25, ms=0.0, dp=0.0, exact=False, ns=1, order=0)\n", "\n" ] } ], "source": [ "# Name based slicing\n", "# Note, name based slicing includes edges and wraps around (use with step equal to 1 or -1)\n", "\n", "for element in FODO['QF1':'SD1']:\n", " print(element.name, element)\n", "print()\n", "\n", "for element in FODO['QF2':'DR1']:\n", " print(element.name, element)\n", "print()\n", "\n", "for element in FODO['QF1':'SD1':-1]:\n", " print(element.name, element)\n", "print()" ] } ], "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.14.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": 5 }