Example-23: Advanced line editing
[1]:
# In this example some advanced line addition options are explored
# Given an ELEGANT lattice the following is performed
# 1. build lattice
# 2. flatten lattice
# 3. merge drifts
# 4. split BPMs (replace BPMs with forward/inverse BPM elements)
# 5. change lattice start
# 6. split quadrupoles and insert correctors
# 7. rename inserted correctors (binding to different tensors)
# 8. generate sublines (bpm to bpm transformations)
# 9. generate layout and plot lattice
# Additionaly all line methods and properties are illustrated (also see the previous line example)
[2]:
# Import
from pprint import pprint
import torch
from pathlib import Path
from plotly import graph_objects
from model.library.line import Line
from model.library.corrector import Corrector
from model.command.external import load_lattice
from model.command.build import save_line
from model.command.build import load_line
from model.command.build import build
from model.command.layout import Layout
[3]:
# Load test ELEGANT lattice
path = Path('ic.lte')
data = load_lattice(path)
[4]:
# Build from ELEGANT style dictionary
ring:Line = build('RING', 'ELEGANT', data)
ring.propagate = True
print(f'{ring.length.item():.3f}')
print(f'{ring.angle.item():.3f}')
print(ring.describe)
27.426
6.283
{'BPM': 16, 'Drift': 42, 'Quadrupole': 28, 'Dipole': 8, 'Sextupole': 16}
[5]:
# Print full ring
# Note, lines, if any, are always flattened in printout
print(ring)
BPM(name="BPM05", direction="forward", dp=0.0)
Drift(name="D09", length=0.116715, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q3D3", length=0.19657, kn=-8.426928737999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D19", length=0.161715, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D38", length=0.806715, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q3D2", length=0.19657, kn=-2.695188250999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D12", length=0.126715, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D42", length=0.095, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q3F2", length=0.18, kn=13.544085930000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D28", length=0.065, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM07", direction="forward", dp=0.0)
Drift(name="D10", length=0.11958, dp=0.0, exact=False, ns=1, order=0)
Dipole(name="RM5", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D05", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SY1_3F4", length=0.08, ms=-277.23165, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D23", length=0.044, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM08", direction="forward", dp=0.0)
Drift(name="D07", length=0.111, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SX1_3F4", length=0.08, ms=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D30", length=0.07, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q3F4", length=0.18, kn=12.030967120000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D30", length=0.07, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SX2_3F4", length=0.08, ms=206.44984, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D16", length=0.155, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SY2_3F4", length=0.08, ms=-277.23165, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D05", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Dipole(name="RM6", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D10", length=0.11958, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM09", direction="forward", dp=0.0)
Drift(name="D28", length=0.065, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q3F1", length=0.18, kn=13.562217330000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D14", length=0.12, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q3D1", length=0.18, kn=-6.763721520999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D21", length=0.36, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D21", length=0.36, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q4D1", length=0.18, kn=-6.763721520999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D14", length=0.12, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q4F1", length=0.18, kn=13.562217330000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D30", length=0.07, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM10", direction="forward", dp=0.0)
Drift(name="D08", length=0.11458, dp=0.0, exact=False, ns=1, order=0)
Dipole(name="RM7", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D05", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SY1_4F4", length=0.08, ms=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D16", length=0.155, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SX1_4F4", length=0.08, ms=206.44984, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D30", length=0.07, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q4F4", length=0.18, kn=12.030967120000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D30", length=0.07, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SX2_4F4", length=0.08, ms=206.44984, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D11", length=0.11, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM11", direction="forward", dp=0.0)
Drift(name="D24", length=0.045, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SY2_4F4", length=0.08, ms=-277.23165, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D05", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Dipole(name="RM8", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D10", length=0.11958, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM12", direction="forward", dp=0.0)
Drift(name="D28", length=0.065, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q4F2", length=0.18, kn=13.562217330000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D42", length=0.095, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D12", length=0.126715, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q4D2", length=0.19657, kn=-2.645953025999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D39", length=0.811715, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D17", length=0.156715, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q4D3", length=0.19657, kn=-8.526334987999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D09", length=0.116715, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM13", direction="forward", dp=0.0)
Drift(name="D27", length=0.056715, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q4F3", length=0.19657, kn=7.792169674000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D29", length=0.066715, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D06", length=0.1119, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D40", length=0.841, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D06", length=0.1119, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D29", length=0.066715, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q1F3", length=0.19657, kn=7.792169674000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D31", length=0.071715, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM14", direction="forward", dp=0.0)
Drift(name="D01", length=0.101715, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q1D3", length=0.19657, kn=-8.526334987999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D20", length=0.166715, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D36", length=0.801715, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q1D2", length=0.19657, kn=-2.645953025999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D15", length=0.131715, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D41", length=0.09, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q1F2", length=0.18, kn=13.562217330000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D30", length=0.07, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM15", direction="forward", dp=0.0)
Drift(name="D08", length=0.11458, dp=0.0, exact=False, ns=1, order=0)
Dipole(name="RM1", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D05", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SY1_1F4", length=0.08, ms=-277.23165, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D35", length=0.0775, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM16", direction="forward", dp=0.0)
Drift(name="D35", length=0.0775, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SX1_1F4", length=0.08, ms=206.44984, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D30", length=0.07, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q1F4", length=0.18, kn=12.030967120000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D30", length=0.07, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SX2_1F4", length=0.08, ms=206.44984, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D16", length=0.155, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SY2_1F4", length=0.08, ms=-277.23165, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D05", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Dipole(name="RM2", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D13", length=0.12958, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM17", direction="forward", dp=0.0)
Drift(name="D26", length=0.055, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q1F1", length=0.18, kn=13.562217330000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D14", length=0.12, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q1D1", length=0.18, kn=-6.763721520999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D32", length=0.72, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q2D1", length=0.18, kn=-6.763721520999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D14", length=0.12, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q2F1", length=0.18, kn=13.562217330000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D33", length=0.075, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM01", direction="forward", dp=0.0)
Drift(name="D05", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Dipole(name="RM3", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D05", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SY1_2F4", length=0.08, ms=-277.23165, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D16", length=0.155, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SX1_2F4", length=0.08, ms=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D30", length=0.07, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q2F4", length=0.18, kn=12.030967120000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D30", length=0.07, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SX2_2F4", length=0.08, ms=206.44984, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D02", length=0.101, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM02", direction="forward", dp=0.0)
Drift(name="D25", length=0.054, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SY2_2F4", length=0.08, ms=-277.23165, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D05", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Dipole(name="RM4", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D10", length=0.11958, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM03", direction="forward", dp=0.0)
Drift(name="D28", length=0.065, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q2F2", length=0.18, kn=13.690633560000002, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D41", length=0.09, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D15", length=0.131715, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q2D2", length=0.19657, kn=-2.815743509999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D37", length=0.802715, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D18", length=0.159715, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q2D3", length=0.19657, kn=-8.487311754999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D03", length=0.106715, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM04", direction="forward", dp=0.0)
Drift(name="D29", length=0.066715, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q2F3", length=0.19657, kn=7.899043454000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D34", length=0.076715, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D04", length=0.1079, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D22", length=0.4205, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D22", length=0.4205, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D06", length=0.1119, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D29", length=0.066715, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q3F3", length=0.19657, kn=7.640511954000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="D27", length=0.056715, dp=0.0, exact=False, ns=1, order=0)
[6]:
# Flatten
# Note, the above lattice is already flat (no sublines)
# Total number of first level sequence elements (with duplicates)
print(len(ring))
# Flatten sublines is any
ring.flatten()
print(len(ring))
154
154
[7]:
# Remove all elements with length != 0 and length < 1.0E-12
ring.clean((1.0E-12, None, None, None))
[8]:
# Merge adjacent drifts
# Note, this will also rename all drift elements
ring.merge(name='DR', size=3)
print(len(ring))
136
[9]:
# Print full ring
print(ring)
BPM(name="BPM05", direction="forward", dp=0.0)
Drift(name="DR001", length=0.116715, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q3D3", length=0.19657, kn=-8.426928737999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR002", length=0.9684299999999999, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q3D2", length=0.19657, kn=-2.695188250999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR003", length=0.221715, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q3F2", length=0.18, kn=13.544085930000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR004", length=0.065, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM07", direction="forward", dp=0.0)
Drift(name="DR005", length=0.11958, dp=0.0, exact=False, ns=1, order=0)
Dipole(name="RM5", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR006", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SY1_3F4", length=0.08, ms=-277.23165, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR007", length=0.044, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM08", direction="forward", dp=0.0)
Drift(name="DR008", length=0.111, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SX1_3F4", length=0.08, ms=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR009", length=0.07, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q3F4", length=0.18, kn=12.030967120000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR010", length=0.07, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SX2_3F4", length=0.08, ms=206.44984, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR011", length=0.155, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SY2_3F4", length=0.08, ms=-277.23165, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR012", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Dipole(name="RM6", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR013", length=0.11958, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM09", direction="forward", dp=0.0)
Drift(name="DR014", length=0.065, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q3F1", length=0.18, kn=13.562217330000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR015", length=0.12, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q3D1", length=0.18, kn=-6.763721520999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR016", length=0.72, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q4D1", length=0.18, kn=-6.763721520999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR017", length=0.12, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q4F1", length=0.18, kn=13.562217330000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR018", length=0.07, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM10", direction="forward", dp=0.0)
Drift(name="DR019", length=0.11458, dp=0.0, exact=False, ns=1, order=0)
Dipole(name="RM7", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR020", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SY1_4F4", length=0.08, ms=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR021", length=0.155, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SX1_4F4", length=0.08, ms=206.44984, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR022", length=0.07, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q4F4", length=0.18, kn=12.030967120000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR023", length=0.07, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SX2_4F4", length=0.08, ms=206.44984, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR024", length=0.11, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM11", direction="forward", dp=0.0)
Drift(name="DR025", length=0.045, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SY2_4F4", length=0.08, ms=-277.23165, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR026", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Dipole(name="RM8", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR027", length=0.11958, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM12", direction="forward", dp=0.0)
Drift(name="DR028", length=0.065, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q4F2", length=0.18, kn=13.562217330000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR029", length=0.221715, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q4D2", length=0.19657, kn=-2.645953025999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR030", length=0.9684299999999999, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q4D3", length=0.19657, kn=-8.526334987999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR031", length=0.116715, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM13", direction="forward", dp=0.0)
Drift(name="DR032", length=0.056715, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q4F3", length=0.19657, kn=7.792169674000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR033", length=1.19823, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q1F3", length=0.19657, kn=7.792169674000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR034", length=0.071715, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM14", direction="forward", dp=0.0)
Drift(name="DR035", length=0.101715, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q1D3", length=0.19657, kn=-8.526334987999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR036", length=0.9684299999999999, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q1D2", length=0.19657, kn=-2.645953025999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR037", length=0.221715, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q1F2", length=0.18, kn=13.562217330000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR038", length=0.07, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM15", direction="forward", dp=0.0)
Drift(name="DR039", length=0.11458, dp=0.0, exact=False, ns=1, order=0)
Dipole(name="RM1", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR040", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SY1_1F4", length=0.08, ms=-277.23165, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR041", length=0.0775, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM16", direction="forward", dp=0.0)
Drift(name="DR042", length=0.0775, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SX1_1F4", length=0.08, ms=206.44984, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR043", length=0.07, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q1F4", length=0.18, kn=12.030967120000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR044", length=0.07, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SX2_1F4", length=0.08, ms=206.44984, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR045", length=0.155, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SY2_1F4", length=0.08, ms=-277.23165, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR046", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Dipole(name="RM2", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR047", length=0.12958, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM17", direction="forward", dp=0.0)
Drift(name="DR048", length=0.055, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q1F1", length=0.18, kn=13.562217330000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR049", length=0.12, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q1D1", length=0.18, kn=-6.763721520999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR050", length=0.72, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q2D1", length=0.18, kn=-6.763721520999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR051", length=0.12, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q2F1", length=0.18, kn=13.562217330000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR052", length=0.075, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM01", direction="forward", dp=0.0)
Drift(name="DR053", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Dipole(name="RM3", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR054", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SY1_2F4", length=0.08, ms=-277.23165, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR055", length=0.155, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SX1_2F4", length=0.08, ms=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR056", length=0.07, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q2F4", length=0.18, kn=12.030967120000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR057", length=0.07, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SX2_2F4", length=0.08, ms=206.44984, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR058", length=0.101, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM02", direction="forward", dp=0.0)
Drift(name="DR059", length=0.054, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SY2_2F4", length=0.08, ms=-277.23165, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR060", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Dipole(name="RM4", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR061", length=0.11958, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM03", direction="forward", dp=0.0)
Drift(name="DR062", length=0.065, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q2F2", length=0.18, kn=13.690633560000002, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR063", length=0.221715, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q2D2", length=0.19657, kn=-2.815743509999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR064", length=0.9624299999999999, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q2D3", length=0.19657, kn=-8.487311754999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR065", length=0.106715, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM04", direction="forward", dp=0.0)
Drift(name="DR066", length=0.066715, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q2F3", length=0.19657, kn=7.899043454000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR067", length=1.2042300000000001, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q3F3", length=0.19657, kn=7.640511954000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR068", length=0.056715, dp=0.0, exact=False, ns=1, order=0)
[10]:
# By default only one forward BPM is created for each monitor
# It transforms phase space coordinates from the beam to bpm frame (identity without deviation variables)
# To insert inverse trasformation, BPMs can be splitted with the following command
# This method can be used to split elements by type, name and/or exclude some names
# For dipoles, e1 is on for the first part and e2 is on for the last part, both are off for all middle parts
# Split of elements with non-zero length (and angle) just creates shorter elements with the same name
# Zero length elements other than BPM are not splitted
ring.split((None, ['BPM'], None, None))
print(ring)
BPM(name="BPM05", direction="forward", dp=0.0)
BPM(name="BPM05", direction="inverse", dp=0.0)
Drift(name="DR001", length=0.116715, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q3D3", length=0.19657, kn=-8.426928737999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR002", length=0.9684299999999999, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q3D2", length=0.19657, kn=-2.695188250999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR003", length=0.221715, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q3F2", length=0.18, kn=13.544085930000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR004", length=0.065, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM07", direction="forward", dp=0.0)
BPM(name="BPM07", direction="inverse", dp=0.0)
Drift(name="DR005", length=0.11958, dp=0.0, exact=False, ns=1, order=0)
Dipole(name="RM5", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR006", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SY1_3F4", length=0.08, ms=-277.23165, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR007", length=0.044, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM08", direction="forward", dp=0.0)
BPM(name="BPM08", direction="inverse", dp=0.0)
Drift(name="DR008", length=0.111, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SX1_3F4", length=0.08, ms=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR009", length=0.07, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q3F4", length=0.18, kn=12.030967120000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR010", length=0.07, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SX2_3F4", length=0.08, ms=206.44984, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR011", length=0.155, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SY2_3F4", length=0.08, ms=-277.23165, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR012", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Dipole(name="RM6", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR013", length=0.11958, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM09", direction="forward", dp=0.0)
BPM(name="BPM09", direction="inverse", dp=0.0)
Drift(name="DR014", length=0.065, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q3F1", length=0.18, kn=13.562217330000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR015", length=0.12, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q3D1", length=0.18, kn=-6.763721520999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR016", length=0.72, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q4D1", length=0.18, kn=-6.763721520999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR017", length=0.12, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q4F1", length=0.18, kn=13.562217330000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR018", length=0.07, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM10", direction="forward", dp=0.0)
BPM(name="BPM10", direction="inverse", dp=0.0)
Drift(name="DR019", length=0.11458, dp=0.0, exact=False, ns=1, order=0)
Dipole(name="RM7", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR020", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SY1_4F4", length=0.08, ms=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR021", length=0.155, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SX1_4F4", length=0.08, ms=206.44984, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR022", length=0.07, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q4F4", length=0.18, kn=12.030967120000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR023", length=0.07, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SX2_4F4", length=0.08, ms=206.44984, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR024", length=0.11, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM11", direction="forward", dp=0.0)
BPM(name="BPM11", direction="inverse", dp=0.0)
Drift(name="DR025", length=0.045, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SY2_4F4", length=0.08, ms=-277.23165, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR026", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Dipole(name="RM8", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR027", length=0.11958, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM12", direction="forward", dp=0.0)
BPM(name="BPM12", direction="inverse", dp=0.0)
Drift(name="DR028", length=0.065, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q4F2", length=0.18, kn=13.562217330000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR029", length=0.221715, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q4D2", length=0.19657, kn=-2.645953025999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR030", length=0.9684299999999999, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q4D3", length=0.19657, kn=-8.526334987999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR031", length=0.116715, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM13", direction="forward", dp=0.0)
BPM(name="BPM13", direction="inverse", dp=0.0)
Drift(name="DR032", length=0.056715, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q4F3", length=0.19657, kn=7.792169674000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR033", length=1.19823, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q1F3", length=0.19657, kn=7.792169674000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR034", length=0.071715, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM14", direction="forward", dp=0.0)
BPM(name="BPM14", direction="inverse", dp=0.0)
Drift(name="DR035", length=0.101715, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q1D3", length=0.19657, kn=-8.526334987999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR036", length=0.9684299999999999, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q1D2", length=0.19657, kn=-2.645953025999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR037", length=0.221715, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q1F2", length=0.18, kn=13.562217330000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR038", length=0.07, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM15", direction="forward", dp=0.0)
BPM(name="BPM15", direction="inverse", dp=0.0)
Drift(name="DR039", length=0.11458, dp=0.0, exact=False, ns=1, order=0)
Dipole(name="RM1", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR040", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SY1_1F4", length=0.08, ms=-277.23165, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR041", length=0.0775, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM16", direction="forward", dp=0.0)
BPM(name="BPM16", direction="inverse", dp=0.0)
Drift(name="DR042", length=0.0775, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SX1_1F4", length=0.08, ms=206.44984, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR043", length=0.07, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q1F4", length=0.18, kn=12.030967120000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR044", length=0.07, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SX2_1F4", length=0.08, ms=206.44984, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR045", length=0.155, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SY2_1F4", length=0.08, ms=-277.23165, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR046", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Dipole(name="RM2", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR047", length=0.12958, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM17", direction="forward", dp=0.0)
BPM(name="BPM17", direction="inverse", dp=0.0)
Drift(name="DR048", length=0.055, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q1F1", length=0.18, kn=13.562217330000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR049", length=0.12, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q1D1", length=0.18, kn=-6.763721520999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR050", length=0.72, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q2D1", length=0.18, kn=-6.763721520999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR051", length=0.12, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q2F1", length=0.18, kn=13.562217330000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR052", length=0.075, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM01", direction="forward", dp=0.0)
BPM(name="BPM01", direction="inverse", dp=0.0)
Drift(name="DR053", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Dipole(name="RM3", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR054", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SY1_2F4", length=0.08, ms=-277.23165, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR055", length=0.155, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SX1_2F4", length=0.08, ms=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR056", length=0.07, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q2F4", length=0.18, kn=12.030967120000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR057", length=0.07, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SX2_2F4", length=0.08, ms=206.44984, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR058", length=0.101, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM02", direction="forward", dp=0.0)
BPM(name="BPM02", direction="inverse", dp=0.0)
Drift(name="DR059", length=0.054, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SY2_2F4", length=0.08, ms=-277.23165, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR060", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Dipole(name="RM4", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR061", length=0.11958, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM03", direction="forward", dp=0.0)
BPM(name="BPM03", direction="inverse", dp=0.0)
Drift(name="DR062", length=0.065, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q2F2", length=0.18, kn=13.690633560000002, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR063", length=0.221715, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q2D2", length=0.19657, kn=-2.815743509999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR064", length=0.9624299999999999, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q2D3", length=0.19657, kn=-8.487311754999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR065", length=0.106715, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM04", direction="forward", dp=0.0)
BPM(name="BPM04", direction="inverse", dp=0.0)
Drift(name="DR066", length=0.066715, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q2F3", length=0.19657, kn=7.899043454000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR067", length=1.2042300000000001, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q3F3", length=0.19657, kn=7.640511954000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR068", length=0.056715, dp=0.0, exact=False, ns=1, order=0)
[11]:
# Line start can be changed with start property or roll method
ring.roll(1)
print(ring)
BPM(name="BPM05", direction="inverse", dp=0.0)
Drift(name="DR001", length=0.116715, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q3D3", length=0.19657, kn=-8.426928737999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR002", length=0.9684299999999999, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q3D2", length=0.19657, kn=-2.695188250999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR003", length=0.221715, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q3F2", length=0.18, kn=13.544085930000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR004", length=0.065, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM07", direction="forward", dp=0.0)
BPM(name="BPM07", direction="inverse", dp=0.0)
Drift(name="DR005", length=0.11958, dp=0.0, exact=False, ns=1, order=0)
Dipole(name="RM5", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR006", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SY1_3F4", length=0.08, ms=-277.23165, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR007", length=0.044, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM08", direction="forward", dp=0.0)
BPM(name="BPM08", direction="inverse", dp=0.0)
Drift(name="DR008", length=0.111, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SX1_3F4", length=0.08, ms=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR009", length=0.07, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q3F4", length=0.18, kn=12.030967120000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR010", length=0.07, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SX2_3F4", length=0.08, ms=206.44984, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR011", length=0.155, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SY2_3F4", length=0.08, ms=-277.23165, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR012", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Dipole(name="RM6", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR013", length=0.11958, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM09", direction="forward", dp=0.0)
BPM(name="BPM09", direction="inverse", dp=0.0)
Drift(name="DR014", length=0.065, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q3F1", length=0.18, kn=13.562217330000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR015", length=0.12, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q3D1", length=0.18, kn=-6.763721520999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR016", length=0.72, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q4D1", length=0.18, kn=-6.763721520999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR017", length=0.12, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q4F1", length=0.18, kn=13.562217330000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR018", length=0.07, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM10", direction="forward", dp=0.0)
BPM(name="BPM10", direction="inverse", dp=0.0)
Drift(name="DR019", length=0.11458, dp=0.0, exact=False, ns=1, order=0)
Dipole(name="RM7", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR020", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SY1_4F4", length=0.08, ms=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR021", length=0.155, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SX1_4F4", length=0.08, ms=206.44984, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR022", length=0.07, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q4F4", length=0.18, kn=12.030967120000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR023", length=0.07, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SX2_4F4", length=0.08, ms=206.44984, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR024", length=0.11, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM11", direction="forward", dp=0.0)
BPM(name="BPM11", direction="inverse", dp=0.0)
Drift(name="DR025", length=0.045, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SY2_4F4", length=0.08, ms=-277.23165, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR026", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Dipole(name="RM8", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR027", length=0.11958, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM12", direction="forward", dp=0.0)
BPM(name="BPM12", direction="inverse", dp=0.0)
Drift(name="DR028", length=0.065, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q4F2", length=0.18, kn=13.562217330000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR029", length=0.221715, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q4D2", length=0.19657, kn=-2.645953025999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR030", length=0.9684299999999999, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q4D3", length=0.19657, kn=-8.526334987999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR031", length=0.116715, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM13", direction="forward", dp=0.0)
BPM(name="BPM13", direction="inverse", dp=0.0)
Drift(name="DR032", length=0.056715, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q4F3", length=0.19657, kn=7.792169674000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR033", length=1.19823, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q1F3", length=0.19657, kn=7.792169674000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR034", length=0.071715, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM14", direction="forward", dp=0.0)
BPM(name="BPM14", direction="inverse", dp=0.0)
Drift(name="DR035", length=0.101715, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q1D3", length=0.19657, kn=-8.526334987999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR036", length=0.9684299999999999, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q1D2", length=0.19657, kn=-2.645953025999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR037", length=0.221715, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q1F2", length=0.18, kn=13.562217330000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR038", length=0.07, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM15", direction="forward", dp=0.0)
BPM(name="BPM15", direction="inverse", dp=0.0)
Drift(name="DR039", length=0.11458, dp=0.0, exact=False, ns=1, order=0)
Dipole(name="RM1", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR040", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SY1_1F4", length=0.08, ms=-277.23165, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR041", length=0.0775, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM16", direction="forward", dp=0.0)
BPM(name="BPM16", direction="inverse", dp=0.0)
Drift(name="DR042", length=0.0775, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SX1_1F4", length=0.08, ms=206.44984, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR043", length=0.07, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q1F4", length=0.18, kn=12.030967120000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR044", length=0.07, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SX2_1F4", length=0.08, ms=206.44984, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR045", length=0.155, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SY2_1F4", length=0.08, ms=-277.23165, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR046", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Dipole(name="RM2", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR047", length=0.12958, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM17", direction="forward", dp=0.0)
BPM(name="BPM17", direction="inverse", dp=0.0)
Drift(name="DR048", length=0.055, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q1F1", length=0.18, kn=13.562217330000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR049", length=0.12, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q1D1", length=0.18, kn=-6.763721520999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR050", length=0.72, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q2D1", length=0.18, kn=-6.763721520999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR051", length=0.12, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q2F1", length=0.18, kn=13.562217330000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR052", length=0.075, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM01", direction="forward", dp=0.0)
BPM(name="BPM01", direction="inverse", dp=0.0)
Drift(name="DR053", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Dipole(name="RM3", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR054", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SY1_2F4", length=0.08, ms=-277.23165, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR055", length=0.155, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SX1_2F4", length=0.08, ms=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR056", length=0.07, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q2F4", length=0.18, kn=12.030967120000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR057", length=0.07, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SX2_2F4", length=0.08, ms=206.44984, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR058", length=0.101, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM02", direction="forward", dp=0.0)
BPM(name="BPM02", direction="inverse", dp=0.0)
Drift(name="DR059", length=0.054, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SY2_2F4", length=0.08, ms=-277.23165, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR060", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Dipole(name="RM4", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR061", length=0.11958, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM03", direction="forward", dp=0.0)
BPM(name="BPM03", direction="inverse", dp=0.0)
Drift(name="DR062", length=0.065, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q2F2", length=0.18, kn=13.690633560000002, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR063", length=0.221715, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q2D2", length=0.19657, kn=-2.815743509999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR064", length=0.9624299999999999, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q2D3", length=0.19657, kn=-8.487311754999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR065", length=0.106715, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM04", direction="forward", dp=0.0)
BPM(name="BPM04", direction="inverse", dp=0.0)
Drift(name="DR066", length=0.066715, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q2F3", length=0.19657, kn=7.899043454000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR067", length=1.2042300000000001, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q3F3", length=0.19657, kn=7.640511954000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR068", length=0.056715, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM05", direction="forward", dp=0.0)
[12]:
# Insert correctors at quadrupole centers
# This inserts elements with identical names
# Element name is like a hash that is used to bind tensors to deviation variables
# Thus, to bind different tensors, elements should have different names
# For example, we would like splitted BPMs and pelement part to have identical names
insection = Corrector(name='CXY')
ring.split((1 + 1, ['Quadrupole'], None, None), paste=[insection])
print(ring)
BPM(name="BPM05", direction="inverse", dp=0.0)
Drift(name="DR001", length=0.116715, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q3D3", length=0.098285, kn=-8.426928737999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q3D3", length=0.098285, kn=-8.426928737999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR002", length=0.9684299999999999, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q3D2", length=0.098285, kn=-2.695188250999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q3D2", length=0.098285, kn=-2.695188250999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR003", length=0.221715, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q3F2", length=0.09, kn=13.544085930000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q3F2", length=0.09, kn=13.544085930000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR004", length=0.065, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM07", direction="forward", dp=0.0)
BPM(name="BPM07", direction="inverse", dp=0.0)
Drift(name="DR005", length=0.11958, dp=0.0, exact=False, ns=1, order=0)
Dipole(name="RM5", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR006", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SY1_3F4", length=0.08, ms=-277.23165, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR007", length=0.044, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM08", direction="forward", dp=0.0)
BPM(name="BPM08", direction="inverse", dp=0.0)
Drift(name="DR008", length=0.111, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SX1_3F4", length=0.08, ms=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR009", length=0.07, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q3F4", length=0.09, kn=12.030967120000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q3F4", length=0.09, kn=12.030967120000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR010", length=0.07, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SX2_3F4", length=0.08, ms=206.44984, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR011", length=0.155, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SY2_3F4", length=0.08, ms=-277.23165, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR012", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Dipole(name="RM6", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR013", length=0.11958, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM09", direction="forward", dp=0.0)
BPM(name="BPM09", direction="inverse", dp=0.0)
Drift(name="DR014", length=0.065, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q3F1", length=0.09, kn=13.562217330000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q3F1", length=0.09, kn=13.562217330000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR015", length=0.12, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q3D1", length=0.09, kn=-6.763721520999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q3D1", length=0.09, kn=-6.763721520999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR016", length=0.72, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q4D1", length=0.09, kn=-6.763721520999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q4D1", length=0.09, kn=-6.763721520999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR017", length=0.12, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q4F1", length=0.09, kn=13.562217330000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q4F1", length=0.09, kn=13.562217330000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR018", length=0.07, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM10", direction="forward", dp=0.0)
BPM(name="BPM10", direction="inverse", dp=0.0)
Drift(name="DR019", length=0.11458, dp=0.0, exact=False, ns=1, order=0)
Dipole(name="RM7", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR020", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SY1_4F4", length=0.08, ms=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR021", length=0.155, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SX1_4F4", length=0.08, ms=206.44984, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR022", length=0.07, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q4F4", length=0.09, kn=12.030967120000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q4F4", length=0.09, kn=12.030967120000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR023", length=0.07, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SX2_4F4", length=0.08, ms=206.44984, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR024", length=0.11, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM11", direction="forward", dp=0.0)
BPM(name="BPM11", direction="inverse", dp=0.0)
Drift(name="DR025", length=0.045, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SY2_4F4", length=0.08, ms=-277.23165, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR026", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Dipole(name="RM8", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR027", length=0.11958, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM12", direction="forward", dp=0.0)
BPM(name="BPM12", direction="inverse", dp=0.0)
Drift(name="DR028", length=0.065, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q4F2", length=0.09, kn=13.562217330000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q4F2", length=0.09, kn=13.562217330000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR029", length=0.221715, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q4D2", length=0.098285, kn=-2.645953025999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q4D2", length=0.098285, kn=-2.645953025999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR030", length=0.9684299999999999, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q4D3", length=0.098285, kn=-8.526334987999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q4D3", length=0.098285, kn=-8.526334987999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR031", length=0.116715, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM13", direction="forward", dp=0.0)
BPM(name="BPM13", direction="inverse", dp=0.0)
Drift(name="DR032", length=0.056715, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q4F3", length=0.098285, kn=7.792169674000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q4F3", length=0.098285, kn=7.792169674000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR033", length=1.19823, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q1F3", length=0.098285, kn=7.792169674000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q1F3", length=0.098285, kn=7.792169674000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR034", length=0.071715, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM14", direction="forward", dp=0.0)
BPM(name="BPM14", direction="inverse", dp=0.0)
Drift(name="DR035", length=0.101715, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q1D3", length=0.098285, kn=-8.526334987999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q1D3", length=0.098285, kn=-8.526334987999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR036", length=0.9684299999999999, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q1D2", length=0.098285, kn=-2.645953025999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q1D2", length=0.098285, kn=-2.645953025999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR037", length=0.221715, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q1F2", length=0.09, kn=13.562217330000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q1F2", length=0.09, kn=13.562217330000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR038", length=0.07, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM15", direction="forward", dp=0.0)
BPM(name="BPM15", direction="inverse", dp=0.0)
Drift(name="DR039", length=0.11458, dp=0.0, exact=False, ns=1, order=0)
Dipole(name="RM1", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR040", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SY1_1F4", length=0.08, ms=-277.23165, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR041", length=0.0775, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM16", direction="forward", dp=0.0)
BPM(name="BPM16", direction="inverse", dp=0.0)
Drift(name="DR042", length=0.0775, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SX1_1F4", length=0.08, ms=206.44984, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR043", length=0.07, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q1F4", length=0.09, kn=12.030967120000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q1F4", length=0.09, kn=12.030967120000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR044", length=0.07, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SX2_1F4", length=0.08, ms=206.44984, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR045", length=0.155, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SY2_1F4", length=0.08, ms=-277.23165, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR046", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Dipole(name="RM2", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR047", length=0.12958, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM17", direction="forward", dp=0.0)
BPM(name="BPM17", direction="inverse", dp=0.0)
Drift(name="DR048", length=0.055, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q1F1", length=0.09, kn=13.562217330000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q1F1", length=0.09, kn=13.562217330000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR049", length=0.12, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q1D1", length=0.09, kn=-6.763721520999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q1D1", length=0.09, kn=-6.763721520999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR050", length=0.72, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q2D1", length=0.09, kn=-6.763721520999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q2D1", length=0.09, kn=-6.763721520999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR051", length=0.12, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q2F1", length=0.09, kn=13.562217330000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q2F1", length=0.09, kn=13.562217330000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR052", length=0.075, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM01", direction="forward", dp=0.0)
BPM(name="BPM01", direction="inverse", dp=0.0)
Drift(name="DR053", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Dipole(name="RM3", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR054", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SY1_2F4", length=0.08, ms=-277.23165, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR055", length=0.155, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SX1_2F4", length=0.08, ms=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR056", length=0.07, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q2F4", length=0.09, kn=12.030967120000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q2F4", length=0.09, kn=12.030967120000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR057", length=0.07, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SX2_2F4", length=0.08, ms=206.44984, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR058", length=0.101, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM02", direction="forward", dp=0.0)
BPM(name="BPM02", direction="inverse", dp=0.0)
Drift(name="DR059", length=0.054, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SY2_2F4", length=0.08, ms=-277.23165, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR060", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Dipole(name="RM4", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR061", length=0.11958, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM03", direction="forward", dp=0.0)
BPM(name="BPM03", direction="inverse", dp=0.0)
Drift(name="DR062", length=0.065, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q2F2", length=0.09, kn=13.690633560000002, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q2F2", length=0.09, kn=13.690633560000002, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR063", length=0.221715, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q2D2", length=0.098285, kn=-2.815743509999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q2D2", length=0.098285, kn=-2.815743509999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR064", length=0.9624299999999999, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q2D3", length=0.098285, kn=-8.487311754999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q2D3", length=0.098285, kn=-8.487311754999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR065", length=0.106715, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM04", direction="forward", dp=0.0)
BPM(name="BPM04", direction="inverse", dp=0.0)
Drift(name="DR066", length=0.066715, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q2F3", length=0.098285, kn=7.899043454000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q2F3", length=0.098285, kn=7.899043454000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR067", length=1.2042300000000001, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q3F3", length=0.098285, kn=7.640511954000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q3F3", length=0.098285, kn=7.640511954000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR068", length=0.056715, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM05", direction="forward", dp=0.0)
[13]:
# Individual elements can be renamed with rename method (renames the first occurrance of the element in the sequence)
# To rename by kind mangle method can be used
# Note, a list of element names to skip can be also passed to it
ring.mangle('Corrector')
print(ring)
BPM(name="BPM05", direction="inverse", dp=0.0)
Drift(name="DR001", length=0.116715, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q3D3", length=0.098285, kn=-8.426928737999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY001", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q3D3", length=0.098285, kn=-8.426928737999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR002", length=0.9684299999999999, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q3D2", length=0.098285, kn=-2.695188250999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY002", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q3D2", length=0.098285, kn=-2.695188250999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR003", length=0.221715, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q3F2", length=0.09, kn=13.544085930000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY003", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q3F2", length=0.09, kn=13.544085930000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR004", length=0.065, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM07", direction="forward", dp=0.0)
BPM(name="BPM07", direction="inverse", dp=0.0)
Drift(name="DR005", length=0.11958, dp=0.0, exact=False, ns=1, order=0)
Dipole(name="RM5", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR006", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SY1_3F4", length=0.08, ms=-277.23165, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR007", length=0.044, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM08", direction="forward", dp=0.0)
BPM(name="BPM08", direction="inverse", dp=0.0)
Drift(name="DR008", length=0.111, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SX1_3F4", length=0.08, ms=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR009", length=0.07, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q3F4", length=0.09, kn=12.030967120000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY004", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q3F4", length=0.09, kn=12.030967120000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR010", length=0.07, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SX2_3F4", length=0.08, ms=206.44984, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR011", length=0.155, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SY2_3F4", length=0.08, ms=-277.23165, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR012", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Dipole(name="RM6", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR013", length=0.11958, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM09", direction="forward", dp=0.0)
BPM(name="BPM09", direction="inverse", dp=0.0)
Drift(name="DR014", length=0.065, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q3F1", length=0.09, kn=13.562217330000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY005", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q3F1", length=0.09, kn=13.562217330000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR015", length=0.12, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q3D1", length=0.09, kn=-6.763721520999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY006", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q3D1", length=0.09, kn=-6.763721520999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR016", length=0.72, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q4D1", length=0.09, kn=-6.763721520999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY007", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q4D1", length=0.09, kn=-6.763721520999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR017", length=0.12, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q4F1", length=0.09, kn=13.562217330000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY008", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q4F1", length=0.09, kn=13.562217330000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR018", length=0.07, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM10", direction="forward", dp=0.0)
BPM(name="BPM10", direction="inverse", dp=0.0)
Drift(name="DR019", length=0.11458, dp=0.0, exact=False, ns=1, order=0)
Dipole(name="RM7", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR020", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SY1_4F4", length=0.08, ms=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR021", length=0.155, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SX1_4F4", length=0.08, ms=206.44984, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR022", length=0.07, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q4F4", length=0.09, kn=12.030967120000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY009", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q4F4", length=0.09, kn=12.030967120000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR023", length=0.07, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SX2_4F4", length=0.08, ms=206.44984, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR024", length=0.11, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM11", direction="forward", dp=0.0)
BPM(name="BPM11", direction="inverse", dp=0.0)
Drift(name="DR025", length=0.045, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SY2_4F4", length=0.08, ms=-277.23165, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR026", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Dipole(name="RM8", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR027", length=0.11958, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM12", direction="forward", dp=0.0)
BPM(name="BPM12", direction="inverse", dp=0.0)
Drift(name="DR028", length=0.065, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q4F2", length=0.09, kn=13.562217330000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY010", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q4F2", length=0.09, kn=13.562217330000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR029", length=0.221715, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q4D2", length=0.098285, kn=-2.645953025999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY011", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q4D2", length=0.098285, kn=-2.645953025999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR030", length=0.9684299999999999, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q4D3", length=0.098285, kn=-8.526334987999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY012", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q4D3", length=0.098285, kn=-8.526334987999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR031", length=0.116715, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM13", direction="forward", dp=0.0)
BPM(name="BPM13", direction="inverse", dp=0.0)
Drift(name="DR032", length=0.056715, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q4F3", length=0.098285, kn=7.792169674000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY013", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q4F3", length=0.098285, kn=7.792169674000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR033", length=1.19823, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q1F3", length=0.098285, kn=7.792169674000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY014", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q1F3", length=0.098285, kn=7.792169674000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR034", length=0.071715, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM14", direction="forward", dp=0.0)
BPM(name="BPM14", direction="inverse", dp=0.0)
Drift(name="DR035", length=0.101715, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q1D3", length=0.098285, kn=-8.526334987999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY015", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q1D3", length=0.098285, kn=-8.526334987999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR036", length=0.9684299999999999, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q1D2", length=0.098285, kn=-2.645953025999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY016", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q1D2", length=0.098285, kn=-2.645953025999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR037", length=0.221715, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q1F2", length=0.09, kn=13.562217330000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY017", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q1F2", length=0.09, kn=13.562217330000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR038", length=0.07, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM15", direction="forward", dp=0.0)
BPM(name="BPM15", direction="inverse", dp=0.0)
Drift(name="DR039", length=0.11458, dp=0.0, exact=False, ns=1, order=0)
Dipole(name="RM1", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR040", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SY1_1F4", length=0.08, ms=-277.23165, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR041", length=0.0775, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM16", direction="forward", dp=0.0)
BPM(name="BPM16", direction="inverse", dp=0.0)
Drift(name="DR042", length=0.0775, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SX1_1F4", length=0.08, ms=206.44984, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR043", length=0.07, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q1F4", length=0.09, kn=12.030967120000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY018", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q1F4", length=0.09, kn=12.030967120000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR044", length=0.07, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SX2_1F4", length=0.08, ms=206.44984, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR045", length=0.155, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SY2_1F4", length=0.08, ms=-277.23165, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR046", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Dipole(name="RM2", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR047", length=0.12958, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM17", direction="forward", dp=0.0)
BPM(name="BPM17", direction="inverse", dp=0.0)
Drift(name="DR048", length=0.055, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q1F1", length=0.09, kn=13.562217330000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY019", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q1F1", length=0.09, kn=13.562217330000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR049", length=0.12, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q1D1", length=0.09, kn=-6.763721520999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY020", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q1D1", length=0.09, kn=-6.763721520999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR050", length=0.72, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q2D1", length=0.09, kn=-6.763721520999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY021", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q2D1", length=0.09, kn=-6.763721520999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR051", length=0.12, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q2F1", length=0.09, kn=13.562217330000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY022", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q2F1", length=0.09, kn=13.562217330000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR052", length=0.075, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM01", direction="forward", dp=0.0)
BPM(name="BPM01", direction="inverse", dp=0.0)
Drift(name="DR053", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Dipole(name="RM3", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR054", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SY1_2F4", length=0.08, ms=-277.23165, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR055", length=0.155, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SX1_2F4", length=0.08, ms=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR056", length=0.07, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q2F4", length=0.09, kn=12.030967120000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY023", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q2F4", length=0.09, kn=12.030967120000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR057", length=0.07, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SX2_2F4", length=0.08, ms=206.44984, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR058", length=0.101, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM02", direction="forward", dp=0.0)
BPM(name="BPM02", direction="inverse", dp=0.0)
Drift(name="DR059", length=0.054, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SY2_2F4", length=0.08, ms=-277.23165, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR060", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Dipole(name="RM4", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR061", length=0.11958, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM03", direction="forward", dp=0.0)
BPM(name="BPM03", direction="inverse", dp=0.0)
Drift(name="DR062", length=0.065, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q2F2", length=0.09, kn=13.690633560000002, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY024", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q2F2", length=0.09, kn=13.690633560000002, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR063", length=0.221715, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q2D2", length=0.098285, kn=-2.815743509999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY025", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q2D2", length=0.098285, kn=-2.815743509999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR064", length=0.9624299999999999, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q2D3", length=0.098285, kn=-8.487311754999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY026", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q2D3", length=0.098285, kn=-8.487311754999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR065", length=0.106715, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM04", direction="forward", dp=0.0)
BPM(name="BPM04", direction="inverse", dp=0.0)
Drift(name="DR066", length=0.066715, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q2F3", length=0.098285, kn=7.899043454000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY027", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q2F3", length=0.098285, kn=7.899043454000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR067", length=1.2042300000000001, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q3F3", length=0.098285, kn=7.640511954000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY028", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q3F3", length=0.098285, kn=7.640511954000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR068", length=0.056715, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM05", direction="forward", dp=0.0)
[14]:
# Create lines between BPMs
# Note, printout is always flat
ring.splice()
print(len(ring))
16
[15]:
# Print the first subline
line, *_ = ring
print(line)
BPM(name="BPM05", direction="inverse", dp=0.0)
Drift(name="DR001", length=0.116715, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q3D3", length=0.098285, kn=-8.426928737999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY001", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q3D3", length=0.098285, kn=-8.426928737999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR002", length=0.9684299999999999, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q3D2", length=0.098285, kn=-2.695188250999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY002", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q3D2", length=0.098285, kn=-2.695188250999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR003", length=0.221715, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q3F2", length=0.09, kn=13.544085930000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY003", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q3F2", length=0.09, kn=13.544085930000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR004", length=0.065, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM07", direction="forward", dp=0.0)
[16]:
# Print the second subline
_, line, *_ = ring
print(line)
BPM(name="BPM07", direction="inverse", dp=0.0)
Drift(name="DR005", length=0.11958, dp=0.0, exact=False, ns=1, order=0)
Dipole(name="RM5", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR006", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SY1_3F4", length=0.08, ms=-277.23165, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR007", length=0.044, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM08", direction="forward", dp=0.0)
[17]:
# Print the last subline
*_, line = ring
print(line)
BPM(name="BPM04", direction="inverse", dp=0.0)
Drift(name="DR066", length=0.066715, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q2F3", length=0.098285, kn=7.899043454000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY027", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q2F3", length=0.098285, kn=7.899043454000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR067", length=1.2042300000000001, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q3F3", length=0.098285, kn=7.640511954000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY028", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q3F3", length=0.098285, kn=7.640511954000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR068", length=0.056715, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM05", direction="forward", dp=0.0)
[18]:
# save/load lattice
path = Path('ring.yaml')
save_line(ring, path)
ring:Line = load_line(path)
print(f'{ring.length.item():.3f}')
print(f'{ring.angle.item():.3f}')
print(ring.describe)
27.426
6.283
{'BPM': 16, 'Drift': 68, 'Quadrupole': 28, 'Corrector': 28, 'Dipole': 8, 'Sextupole': 16}
[19]:
# Here are all the steps together without save/load steps
path = Path('ic.lte') # -- set path with ELEGANT lattice file
data = load_lattice(path) # -- load ELEGANT file as dictionary
ring:Line = build('RING', 'ELEGANT', data) # -- build ELEGANT style dictionary
ring.propagate = True # -- set flag to propagate options (slicing, integration order, exact, output, ...)
ring.flatten() # -- flatten all sublines
ring.clean((1.0E-12, None, None, None)) # -- remove non-zero length elements with length smaller than given
ring.merge() # -- merge drifts
ring.split((None, ['BPM'], None, None)) # -- split BPMs
ring.roll(1) # -- change line start
insection = Corrector('CXY') # -- define insertion element
ring.split((1 + 1, ['Quadrupole'], None, None), paste=[insection]) # -- split quadrupoles and insert corrector between parts
ring.mangle('Corrector') # -- rename all correctors (unique names)
ring.splice() # -- generate lines between BPMs
[20]:
# Plot 3D profile
# Slice dipoles
ring.ns = (('Dipole', 0.05), )
# Set layout
layout = Layout(ring)
# Generate orbit
x, y, z = layout.orbit(flat=False, step=0.05, start=(0, 0))
# Generate layout blocks
blocks = layout.profile_3d(scale=2.5, exclude=['Drift'])
# Plot
figure = graph_objects.Figure(
data=[
graph_objects.Scatter3d(
x=x.numpy(),
y=y.numpy(),
z=z.numpy(),
mode='lines',
name='Orbit',
line=dict(color='black',width=2.0,dash='solid'),
opacity=0.75,
showlegend=True
),
*[graph_objects.Mesh3d(block) for block in blocks]
]
)
figure.update_layout(
scene=dict(
xaxis=dict(visible=False, range=[-10,10]),
yaxis=dict(visible=False, range=[-10,10]),
zaxis=dict(visible=False, range=[-2,2]),
aspectratio=dict(x=1, y=1, z=1/5),
annotations=[]
),
margin=dict(l=0, r=0, t=0, b=0),
legend=dict(orientation='v', x=0., y=1., xanchor='left', yanchor='top'),
hoverlabel=dict(font_size=12, font_family="Rockwell", font_color='white'),
legend_groupclick='toggleitem'
)
figure.show()
[21]:
# In the rest of the example we go through all line methods and properties one by one
# Also see element properties that are not reimplemented (flag, clone)
insection = Corrector('CXY')
path = Path('ic.lte')
data = load_lattice(path)
ring:Line = build('RING', 'ELEGANT', data)
ring.propagate = True
ring.flatten()
ring.clean((1.0E-12, None, None, None))
ring.merge()
ring.split((None, ['BPM'], None, None))
ring.roll(1)
ring.split((1 + 1, ['Quadrupole'], None, None), paste=[insection])
ring.mangle('Corrector')
ring.splice()
[22]:
# serialize (property)
print([*map(len, ring)])
_, line, *_ = ring
pprint(line.serialize, sort_dicts=False)
[15, 7, 15, 19, 15, 7, 15, 11, 15, 7, 15, 19, 15, 7, 15, 11]
{'kind': 'Line',
'name': 'BPM07_BPM08',
'sequence': [{'kind': 'BPM',
'name': 'BPM07',
'dp': 0.0,
'dx': 0.0,
'dy': 0.0,
'dz': 0.0,
'wx': 0.0,
'wy': 0.0,
'wz': 0.0,
'output': False,
'matrix': False,
'direction': 'inverse'},
{'kind': 'Drift',
'name': 'DR005',
'length': 0.11958,
'dp': 0.0,
'dx': 0.0,
'dy': 0.0,
'dz': 0.0,
'wx': 0.0,
'wy': 0.0,
'wz': 0.0,
'ns': 1,
'order': 0,
'exact': False,
'insertion': False,
'output': False,
'matrix': False},
{'kind': 'Dipole',
'name': 'RM5',
'length': 0.87284,
'dp': 0.0,
'dx': 0.0,
'dy': 0.0,
'dz': 0.0,
'wx': 0.0,
'wy': 0.0,
'wz': 0.0,
'ns': 1,
'order': 0,
'exact': False,
'insertion': False,
'output': False,
'matrix': False,
'angle': 0.785398163400001,
'e1': 0.0,
'e2': 0.0,
'kn': -2.379107171999999,
'ks': 0.0,
'ms': 0.0,
'mo': 0.0,
'e1_on': True,
'e2_on': True},
{'kind': 'Drift',
'name': 'DR006',
'length': 0.10958,
'dp': 0.0,
'dx': 0.0,
'dy': 0.0,
'dz': 0.0,
'wx': 0.0,
'wy': 0.0,
'wz': 0.0,
'ns': 1,
'order': 0,
'exact': False,
'insertion': False,
'output': False,
'matrix': False},
{'kind': 'Sextupole',
'name': 'SY1_3F4',
'length': 0.08,
'dp': 0.0,
'dx': 0.0,
'dy': 0.0,
'dz': 0.0,
'wx': 0.0,
'wy': 0.0,
'wz': 0.0,
'ns': 1,
'order': 0,
'exact': False,
'insertion': False,
'output': False,
'matrix': False,
'ms': -277.23165},
{'kind': 'Drift',
'name': 'DR007',
'length': 0.044,
'dp': 0.0,
'dx': 0.0,
'dy': 0.0,
'dz': 0.0,
'wx': 0.0,
'wy': 0.0,
'wz': 0.0,
'ns': 1,
'order': 0,
'exact': False,
'insertion': False,
'output': False,
'matrix': False},
{'kind': 'BPM',
'name': 'BPM08',
'dp': 0.0,
'dx': 0.0,
'dy': 0.0,
'dz': 0.0,
'wx': 0.0,
'wy': 0.0,
'wz': 0.0,
'output': False,
'matrix': False,
'direction': 'forward'}],
'propagate': False,
'dp': 0.0,
'exact': False,
'output': False,
'matrix': False}
[23]:
# inverse
forward, *_ = ring.clone()
forward.propagate = True
forward.dp = 0.001
inverse = forward.inverse()
state = torch.tensor([0.001, 0.0005, -0.005, 0.0001], dtype=torch.float64)
local = forward(state)
local = inverse(local)
assert torch.allclose(local, state, rtol=1.0E-15, atol=1.0E-15)
[24]:
# data (default deviation data)
_, line, *_ = ring.clone()
pprint(line.data(alignment=False), sort_dicts=False)
{'BPM07': {'xx': tensor(0., dtype=torch.float64),
'xy': tensor(0., dtype=torch.float64),
'yx': tensor(0., dtype=torch.float64),
'yy': tensor(0., dtype=torch.float64),
'dp': tensor(0., dtype=torch.float64)},
'DR005': {'dp': tensor(0., dtype=torch.float64),
'dl': tensor(0., dtype=torch.float64)},
'RM5': {'dw': tensor(0., dtype=torch.float64),
'e1': tensor(0., dtype=torch.float64),
'e2': tensor(0., dtype=torch.float64),
'kn': tensor(0., dtype=torch.float64),
'ks': tensor(0., dtype=torch.float64),
'ms': tensor(0., dtype=torch.float64),
'mo': tensor(0., dtype=torch.float64),
'dp': tensor(0., dtype=torch.float64),
'dl': tensor(0., dtype=torch.float64)},
'DR006': {'dp': tensor(0., dtype=torch.float64),
'dl': tensor(0., dtype=torch.float64)},
'SY1_3F4': {'ms': tensor(0., dtype=torch.float64),
'dp': tensor(0., dtype=torch.float64),
'dl': tensor(0., dtype=torch.float64)},
'DR007': {'dp': tensor(0., dtype=torch.float64),
'dl': tensor(0., dtype=torch.float64)},
'BPM08': {'xx': tensor(0., dtype=torch.float64),
'xy': tensor(0., dtype=torch.float64),
'yx': tensor(0., dtype=torch.float64),
'yy': tensor(0., dtype=torch.float64),
'dp': tensor(0., dtype=torch.float64)}}
[25]:
# scan (generator to get elements at all levels that have given attribute)
pprint([*ring.scan('angle')])
[Dipole(name="RM5", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0),
Dipole(name="RM6", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0),
Dipole(name="RM7", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0),
Dipole(name="RM8", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0),
Dipole(name="RM1", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0),
Dipole(name="RM2", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0),
Dipole(name="RM3", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0),
Dipole(name="RM4", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)]
[26]:
# select (static method to filter elements)
elements = [*ring.scan('angle')]
pprint(ring.select(elements, kinds=None, names=["RM1", "RM2"]))
[Dipole(name="RM1", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0),
Dipole(name="RM2", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)]
[27]:
# get (combination of scan and select to get attribute value)
line, *_ = ring.clone()
pprint(line.get('length', kinds=['Quadrupole']))
[('Q3D3', tensor(0.0983, dtype=torch.float64)),
('Q3D3', tensor(0.0983, dtype=torch.float64)),
('Q3D2', tensor(0.0983, dtype=torch.float64)),
('Q3D2', tensor(0.0983, dtype=torch.float64)),
('Q3F2', tensor(0.0900, dtype=torch.float64)),
('Q3F2', tensor(0.0900, dtype=torch.float64))]
[28]:
# set (combination of scan and select to set attribute value)
# Note, this method sets attribute to the first matched element (by name)
line, *_ = ring.clone()
line.set('length', 0.0, kinds=['Quadrupole'])
pprint(line.get('length', kinds=['Quadrupole']))
[('Q3D3', tensor(0.0983, dtype=torch.float64)),
('Q3D3', tensor(0., dtype=torch.float64)),
('Q3D2', tensor(0.0983, dtype=torch.float64)),
('Q3D2', tensor(0., dtype=torch.float64)),
('Q3F2', tensor(0.0900, dtype=torch.float64)),
('Q3F2', tensor(0., dtype=torch.float64))]
[29]:
# name
print(ring.name)
RING
[30]:
# sequence (ordered elements)
line, *_ = ring.clone()
pprint(line.sequence)
[BPM(name="BPM05", direction="inverse", dp=0.0),
Drift(name="DR001", length=0.116715, dp=0.0, exact=False, ns=1, order=0),
Quadrupole(name="Q3D3", length=0.098285, kn=-8.426928737999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0),
Corrector(name="CXY001", cx=0.0, cy=0.0, dp=0.0),
Quadrupole(name="Q3D3", length=0.098285, kn=-8.426928737999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0),
Drift(name="DR002", length=0.9684299999999999, dp=0.0, exact=False, ns=1, order=0),
Quadrupole(name="Q3D2", length=0.098285, kn=-2.695188250999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0),
Corrector(name="CXY002", cx=0.0, cy=0.0, dp=0.0),
Quadrupole(name="Q3D2", length=0.098285, kn=-2.695188250999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0),
Drift(name="DR003", length=0.221715, dp=0.0, exact=False, ns=1, order=0),
Quadrupole(name="Q3F2", length=0.09, kn=13.544085930000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0),
Corrector(name="CXY003", cx=0.0, cy=0.0, dp=0.0),
Quadrupole(name="Q3F2", length=0.09, kn=13.544085930000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0),
Drift(name="DR004", length=0.065, dp=0.0, exact=False, ns=1, order=0),
BPM(name="BPM07", direction="forward", dp=0.0)]
[31]:
# flatten
line = ring.clone()
print(len(line))
line.flatten()
print(len(line))
16
208
[32]:
# Rename (get/set)
line = ring.clone()
print(line[0].name)
line[0].name = 'LINE'
print(line[0].name)
BPM05_BPM07
LINE
[33]:
# append
# Note, since line sequence is basicaly a (nested) list, all list methods can be used on it
# Not all methods are implemented
line, *_ = ring.clone()
line.append(Corrector('CXY'))
print(line)
BPM(name="BPM05", direction="inverse", dp=0.0)
Drift(name="DR001", length=0.116715, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q3D3", length=0.098285, kn=-8.426928737999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY001", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q3D3", length=0.098285, kn=-8.426928737999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR002", length=0.9684299999999999, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q3D2", length=0.098285, kn=-2.695188250999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY002", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q3D2", length=0.098285, kn=-2.695188250999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR003", length=0.221715, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q3F2", length=0.09, kn=13.544085930000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY003", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q3F2", length=0.09, kn=13.544085930000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR004", length=0.065, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM07", direction="forward", dp=0.0)
Corrector(name="CXY", cx=0.0, cy=0.0, dp=0.0)
[34]:
# extend
line, *_ = ring.clone()
line.extend(Line('CXY', sequence=[Corrector('CXY')]))
print(line)
BPM(name="BPM05", direction="inverse", dp=0.0)
Drift(name="DR001", length=0.116715, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q3D3", length=0.098285, kn=-8.426928737999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY001", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q3D3", length=0.098285, kn=-8.426928737999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR002", length=0.9684299999999999, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q3D2", length=0.098285, kn=-2.695188250999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY002", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q3D2", length=0.098285, kn=-2.695188250999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR003", length=0.221715, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q3F2", length=0.09, kn=13.544085930000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY003", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q3F2", length=0.09, kn=13.544085930000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR004", length=0.065, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM07", direction="forward", dp=0.0)
Corrector(name="CXY", cx=0.0, cy=0.0, dp=0.0)
[35]:
# insert (after element with given name)
line, *_ = ring.clone()
line.insert(Corrector('CXY'), 'DR001')
print(line)
BPM(name="BPM05", direction="inverse", dp=0.0)
Drift(name="DR001", length=0.116715, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q3D3", length=0.098285, kn=-8.426928737999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY001", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q3D3", length=0.098285, kn=-8.426928737999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR002", length=0.9684299999999999, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q3D2", length=0.098285, kn=-2.695188250999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY002", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q3D2", length=0.098285, kn=-2.695188250999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR003", length=0.221715, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q3F2", length=0.09, kn=13.544085930000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY003", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q3F2", length=0.09, kn=13.544085930000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR004", length=0.065, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM07", direction="forward", dp=0.0)
[36]:
# remove (first occurrance with matching name)
line, *_ = ring.clone()
line.remove('Q3D3')
print(line)
BPM(name="BPM05", direction="inverse", dp=0.0)
Drift(name="DR001", length=0.116715, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY001", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q3D3", length=0.098285, kn=-8.426928737999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR002", length=0.9684299999999999, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q3D2", length=0.098285, kn=-2.695188250999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY002", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q3D2", length=0.098285, kn=-2.695188250999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR003", length=0.221715, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q3F2", length=0.09, kn=13.544085930000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY003", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q3F2", length=0.09, kn=13.544085930000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR004", length=0.065, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM07", direction="forward", dp=0.0)
[37]:
# replace (first occurrance with matching name)
line, *_ = ring.clone()
line.replace('Q3D3', Corrector('CXY'))
print(line)
BPM(name="BPM05", direction="inverse", dp=0.0)
Drift(name="DR001", length=0.116715, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY", cx=0.0, cy=0.0, dp=0.0)
Corrector(name="CXY001", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q3D3", length=0.098285, kn=-8.426928737999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR002", length=0.9684299999999999, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q3D2", length=0.098285, kn=-2.695188250999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY002", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q3D2", length=0.098285, kn=-2.695188250999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR003", length=0.221715, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q3F2", length=0.09, kn=13.544085930000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY003", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q3F2", length=0.09, kn=13.544085930000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR004", length=0.065, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM07", direction="forward", dp=0.0)
[38]:
# names (all first level names)
line, *_ = ring.clone()
pprint(line.names)
['BPM05',
'DR001',
'Q3D3',
'CXY001',
'Q3D3',
'DR002',
'Q3D2',
'CXY002',
'Q3D2',
'DR003',
'Q3F2',
'CXY003',
'Q3F2',
'DR004',
'BPM07']
[39]:
# position (first matching position at the first level)
line, *_ = ring.clone()
line.position('Q3D3')
[39]:
2
[40]:
# positions (all matching position at the first level)
line, *_ = ring.clone()
line.positions('Q3D3')
[40]:
[2, 4]
[41]:
# start (get/set start by name, first match)
_, line, *_ = ring.clone()
print(line.start)
print(line)
print()
line.start = 'RM5'
print(line.start)
print(line)
print()
BPM07
BPM(name="BPM07", direction="inverse", dp=0.0)
Drift(name="DR005", length=0.11958, dp=0.0, exact=False, ns=1, order=0)
Dipole(name="RM5", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR006", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SY1_3F4", length=0.08, ms=-277.23165, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR007", length=0.044, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM08", direction="forward", dp=0.0)
RM5
Dipole(name="RM5", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR006", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SY1_3F4", length=0.08, ms=-277.23165, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR007", length=0.044, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM08", direction="forward", dp=0.0)
BPM(name="BPM07", direction="inverse", dp=0.0)
Drift(name="DR005", length=0.11958, dp=0.0, exact=False, ns=1, order=0)
[42]:
# roll (first level sequence)
_, line, *_ = ring.clone()
print(line.start)
print(line)
print()
line.roll(line.position('RM5'))
print(line.start)
print(line)
print()
BPM07
BPM(name="BPM07", direction="inverse", dp=0.0)
Drift(name="DR005", length=0.11958, dp=0.0, exact=False, ns=1, order=0)
Dipole(name="RM5", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR006", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SY1_3F4", length=0.08, ms=-277.23165, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR007", length=0.044, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM08", direction="forward", dp=0.0)
RM5
Dipole(name="RM5", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR006", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SY1_3F4", length=0.08, ms=-277.23165, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR007", length=0.044, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM08", direction="forward", dp=0.0)
BPM(name="BPM07", direction="inverse", dp=0.0)
Drift(name="DR005", length=0.11958, dp=0.0, exact=False, ns=1, order=0)
[43]:
# unique (unique elements at all levels)
_, line, *_ = ring.clone()
pprint(line.unique)
{'BPM07': ('BPM',
tensor(0., dtype=torch.float64),
tensor(0., dtype=torch.float64)),
'BPM08': ('BPM',
tensor(0., dtype=torch.float64),
tensor(0., dtype=torch.float64)),
'DR005': ('Drift',
tensor(0.1196, dtype=torch.float64),
tensor(0., dtype=torch.float64)),
'DR006': ('Drift',
tensor(0.1096, dtype=torch.float64),
tensor(0., dtype=torch.float64)),
'DR007': ('Drift',
tensor(0.0440, dtype=torch.float64),
tensor(0., dtype=torch.float64)),
'RM5': ('Dipole',
tensor(0.8728, dtype=torch.float64),
tensor(0.7854, dtype=torch.float64)),
'SY1_3F4': ('Sextupole',
tensor(0.0800, dtype=torch.float64),
tensor(0., dtype=torch.float64))}
[44]:
# duplicate (check first level for duplicates (elements with the same name)
line, *_ = ring.clone()
print(line.duplicates)
_, line, *_ = ring.clone()
print(line.duplicates)
True
False
[45]:
# itemize (get element names with matching kind at all levels, ordered, with duplicates)
pprint(ring.itemize('Dipole'))
pprint(ring.itemize('Quadrupole'))
['RM5', 'RM6', 'RM7', 'RM8', 'RM1', 'RM2', 'RM3', 'RM4']
['Q3D3',
'Q3D2',
'Q3F2',
'Q3F4',
'Q3F1',
'Q3D1',
'Q4D1',
'Q4F1',
'Q4F4',
'Q4F2',
'Q4D2',
'Q4D3',
'Q4F3',
'Q1F3',
'Q1D3',
'Q1D2',
'Q1F2',
'Q1F4',
'Q1F1',
'Q1D1',
'Q2D1',
'Q2F1',
'Q2F4',
'Q2F2',
'Q2D2',
'Q2D3',
'Q2F3',
'Q3F3']
[46]:
# describe (element counts by kinds, all levels, with duplicates)
pprint(ring.describe)
{'BPM': 16,
'Corrector': 28,
'Dipole': 8,
'Drift': 68,
'Quadrupole': 28,
'Sextupole': 16}
[47]:
# split (split elements)
_, line, *_ = ring.clone()
print(line)
print()
# zero or one do not slice matching element(s)
_, line, *_ = ring.clone()
line.split((1, ['Dipole'], None, None))
print(line)
print()
# split by kind
_, line, *_ = ring.clone()
line.split((4, ['Dipole'], None, None))
print(line)
print()
# split by kind with insertion (number of insertions is count - 1)
_, line, *_ = ring.clone()
line.split((4, ['Dipole'], None, None), paste=[Corrector('CXY')])
print(line)
print()
# split by names
_, line, *_ = ring.clone()
line.split((4, None, ['RM5'], None))
print(line)
print()
# split by names with exclude
_, line, *_ = ring.clone()
line.split((4, None, ['RM5'], ['RM5']))
print(line)
print()
BPM(name="BPM07", direction="inverse", dp=0.0)
Drift(name="DR005", length=0.11958, dp=0.0, exact=False, ns=1, order=0)
Dipole(name="RM5", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR006", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SY1_3F4", length=0.08, ms=-277.23165, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR007", length=0.044, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM08", direction="forward", dp=0.0)
BPM(name="BPM07", direction="inverse", dp=0.0)
Drift(name="DR005", length=0.11958, dp=0.0, exact=False, ns=1, order=0)
Dipole(name="RM5", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR006", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SY1_3F4", length=0.08, ms=-277.23165, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR007", length=0.044, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM08", direction="forward", dp=0.0)
BPM(name="BPM07", direction="inverse", dp=0.0)
Drift(name="DR005", length=0.11958, dp=0.0, exact=False, ns=1, order=0)
Dipole(name="RM5", length=0.21821, angle=0.19634954085000025, e1=0.0, e1_on=True, e2=0.0, e2_on=False, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Dipole(name="RM5", length=0.21821, angle=0.19634954085000025, e1=0.0, e1_on=False, e2=0.0, e2_on=False, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Dipole(name="RM5", length=0.21821, angle=0.19634954085000025, e1=0.0, e1_on=False, e2=0.0, e2_on=False, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Dipole(name="RM5", length=0.21821, angle=0.19634954085000025, e1=0.0, e1_on=False, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR006", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SY1_3F4", length=0.08, ms=-277.23165, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR007", length=0.044, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM08", direction="forward", dp=0.0)
BPM(name="BPM07", direction="inverse", dp=0.0)
Drift(name="DR005", length=0.11958, dp=0.0, exact=False, ns=1, order=0)
Dipole(name="RM5", length=0.21821, angle=0.19634954085000025, e1=0.0, e1_on=True, e2=0.0, e2_on=False, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY", cx=0.0, cy=0.0, dp=0.0)
Dipole(name="RM5", length=0.21821, angle=0.19634954085000025, e1=0.0, e1_on=False, e2=0.0, e2_on=False, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY", cx=0.0, cy=0.0, dp=0.0)
Dipole(name="RM5", length=0.21821, angle=0.19634954085000025, e1=0.0, e1_on=False, e2=0.0, e2_on=False, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY", cx=0.0, cy=0.0, dp=0.0)
Dipole(name="RM5", length=0.21821, angle=0.19634954085000025, e1=0.0, e1_on=False, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR006", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SY1_3F4", length=0.08, ms=-277.23165, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR007", length=0.044, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM08", direction="forward", dp=0.0)
BPM(name="BPM07", direction="inverse", dp=0.0)
Drift(name="DR005", length=0.11958, dp=0.0, exact=False, ns=1, order=0)
Dipole(name="RM5", length=0.21821, angle=0.19634954085000025, e1=0.0, e1_on=True, e2=0.0, e2_on=False, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Dipole(name="RM5", length=0.21821, angle=0.19634954085000025, e1=0.0, e1_on=False, e2=0.0, e2_on=False, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Dipole(name="RM5", length=0.21821, angle=0.19634954085000025, e1=0.0, e1_on=False, e2=0.0, e2_on=False, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Dipole(name="RM5", length=0.21821, angle=0.19634954085000025, e1=0.0, e1_on=False, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR006", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SY1_3F4", length=0.08, ms=-277.23165, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR007", length=0.044, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM08", direction="forward", dp=0.0)
BPM(name="BPM07", direction="inverse", dp=0.0)
Drift(name="DR005", length=0.11958, dp=0.0, exact=False, ns=1, order=0)
Dipole(name="RM5", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR006", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SY1_3F4", length=0.08, ms=-277.23165, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR007", length=0.044, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM08", direction="forward", dp=0.0)
[48]:
# clean (remove elements by kind, name, length)
# Note, it element has zero length, it will not be removed
_, line, *_ = ring.clone()
print(line)
print()
# Remove BPMs
line.clean((None, ['BPM'], None, None))
print(line)
print()
# Remove by name
line.clean((None, None, ['RM5'], None))
print(line)
print()
# Remove by length
line.clean((0.11, None, None, None))
print(line)
print()
BPM(name="BPM07", direction="inverse", dp=0.0)
Drift(name="DR005", length=0.11958, dp=0.0, exact=False, ns=1, order=0)
Dipole(name="RM5", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR006", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SY1_3F4", length=0.08, ms=-277.23165, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR007", length=0.044, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM08", direction="forward", dp=0.0)
Drift(name="DR005", length=0.11958, dp=0.0, exact=False, ns=1, order=0)
Dipole(name="RM5", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR006", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SY1_3F4", length=0.08, ms=-277.23165, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR007", length=0.044, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR005", length=0.11958, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR006", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SY1_3F4", length=0.08, ms=-277.23165, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR007", length=0.044, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR005", length=0.11958, dp=0.0, exact=False, ns=1, order=0)
[49]:
# merge (merge drifts)
# Note, all drift elements are renamed
_, line, *_ = ring.clone()
line.remove("RM5")
print(line)
print()
line.merge()
print(line)
print()
BPM(name="BPM07", direction="inverse", dp=0.0)
Drift(name="DR005", length=0.11958, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR006", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SY1_3F4", length=0.08, ms=-277.23165, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR007", length=0.044, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM08", direction="forward", dp=0.0)
BPM(name="BPM07", direction="inverse", dp=0.0)
Drift(name="DR001", length=0.22916, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SY1_3F4", length=0.08, ms=-277.23165, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR002", length=0.044, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM08", direction="forward", dp=0.0)
[50]:
# mangle (rename elements with identical names)
line, *_ = ring.clone()
print(line)
print()
# Rename quadrupoles
line, *_ = ring.clone()
line.mangle('Quadrupole')
print(line)
print()
# Rename quadrupoles with exclude
line, *_ = ring.clone()
line.mangle('Quadrupole', names=['Q3D3'])
print(line)
print()
BPM(name="BPM05", direction="inverse", dp=0.0)
Drift(name="DR001", length=0.116715, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q3D3", length=0.098285, kn=-8.426928737999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY001", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q3D3", length=0.098285, kn=-8.426928737999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR002", length=0.9684299999999999, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q3D2", length=0.098285, kn=-2.695188250999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY002", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q3D2", length=0.098285, kn=-2.695188250999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR003", length=0.221715, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q3F2", length=0.09, kn=13.544085930000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY003", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q3F2", length=0.09, kn=13.544085930000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR004", length=0.065, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM07", direction="forward", dp=0.0)
BPM(name="BPM05", direction="inverse", dp=0.0)
Drift(name="DR001", length=0.116715, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q3D3001", length=0.098285, kn=-8.426928737999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY001", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q3D3002", length=0.098285, kn=-8.426928737999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR002", length=0.9684299999999999, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q3D2001", length=0.098285, kn=-2.695188250999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY002", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q3D2002", length=0.098285, kn=-2.695188250999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR003", length=0.221715, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q3F2001", length=0.09, kn=13.544085930000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY003", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q3F2002", length=0.09, kn=13.544085930000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR004", length=0.065, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM07", direction="forward", dp=0.0)
BPM(name="BPM05", direction="inverse", dp=0.0)
Drift(name="DR001", length=0.116715, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q3D3", length=0.098285, kn=-8.426928737999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY001", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q3D3", length=0.098285, kn=-8.426928737999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR002", length=0.9684299999999999, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q3D2001", length=0.098285, kn=-2.695188250999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY002", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q3D2002", length=0.098285, kn=-2.695188250999999, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR003", length=0.221715, dp=0.0, exact=False, ns=1, order=0)
Quadrupole(name="Q3F2001", length=0.09, kn=13.544085930000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Corrector(name="CXY003", cx=0.0, cy=0.0, dp=0.0)
Quadrupole(name="Q3F2002", length=0.09, kn=13.544085930000001, ks=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR004", length=0.065, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM07", direction="forward", dp=0.0)
[51]:
# splice (sequencies between BPMs)
line = ring.clone()
line.flatten()
print(len(line))
line.splice()
print(len(line))
208
16
[52]:
# dp (get/set)
_, line, *_ = ring.clone()
line.propagate = True
line.dp = 0.001
print(line.dp)
print()
print(line)
tensor(0.0010, dtype=torch.float64)
BPM(name="BPM07", direction="inverse", dp=0.001)
Drift(name="DR005", length=0.11958, dp=0.001, exact=False, ns=1, order=0)
Dipole(name="RM5", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.001, exact=False, ns=1, order=0)
Drift(name="DR006", length=0.10958, dp=0.001, exact=False, ns=1, order=0)
Sextupole(name="SY1_3F4", length=0.08, ms=-277.23165, dp=0.001, exact=False, ns=1, order=0)
Drift(name="DR007", length=0.044, dp=0.001, exact=False, ns=1, order=0)
BPM(name="BPM08", direction="forward", dp=0.001)
[53]:
# exact (get/set)
_, line, *_ = ring.clone()
line.propagate = True
line.exact = True
print(line)
BPM(name="BPM07", direction="inverse", dp=0.0)
Drift(name="DR005", length=0.11958, dp=0.0, exact=True, ns=1, order=0)
Dipole(name="RM5", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=True, ns=1, order=0)
Drift(name="DR006", length=0.10958, dp=0.0, exact=True, ns=1, order=0)
Sextupole(name="SY1_3F4", length=0.08, ms=-277.23165, dp=0.0, exact=True, ns=1, order=0)
Drift(name="DR007", length=0.044, dp=0.0, exact=True, ns=1, order=0)
BPM(name="BPM08", direction="forward", dp=0.0)
[54]:
# output (get/set)
_, line, *_ = ring.clone()
line.propagate = True
line.output = True
line['RM5'].output
[54]:
True
[55]:
# matrix (get/set)
_, line, *_ = ring.clone()
line.propagate = True
line.matrix = True
line['RM5'].matrix
[55]:
True
[56]:
# length
line = ring.clone()
print(line.length)
tensor(27.4256, dtype=torch.float64)
[57]:
# angle
line = ring.clone()
print(line.angle)
tensor(6.2832, dtype=torch.float64)
[58]:
# flag (layout flag, true if contains dipoles with non-zero angles)
line = ring.clone()
print(line.flag)
True
[59]:
# ns (get/set number of integration steps)
_, line, *_ = ring.clone()
line.propagate = True
pprint(line.ns)
print()
# Set fixed number to all elements
_, line, *_ = ring.clone()
line.propagate = True
line.ns = 10
pprint(line.ns)
print()
# Set by step length (keeps 1 step for zero length elements)
_, line, *_ = ring.clone()
line.propagate = True
line.ns = 0.01
pprint(line.ns)
print()
# Set by kind (pass int or float)
_, line, *_ = ring.clone()
line.propagate = True
line.ns = (('Dipole', 0.01), ('Sextupole', 0.01))
pprint(line.ns)
print()
# Set by name (pass int or float)
_, line, *_ = ring.clone()
line.propagate = True
line.ns = (('RM5', 10),)
pprint(line.ns)
print()
{'BPM07': 1,
'BPM08': 1,
'DR005': 1,
'DR006': 1,
'DR007': 1,
'RM5': 1,
'SY1_3F4': 1}
{'BPM07': 10,
'BPM08': 10,
'DR005': 10,
'DR006': 10,
'DR007': 10,
'RM5': 10,
'SY1_3F4': 10}
{'BPM07': 1,
'BPM08': 1,
'DR005': 12,
'DR006': 11,
'DR007': 5,
'RM5': 88,
'SY1_3F4': 8}
{'BPM07': 1,
'BPM08': 1,
'DR005': 1,
'DR006': 1,
'DR007': 1,
'RM5': 88,
'SY1_3F4': 8}
{'BPM07': 1,
'BPM08': 1,
'DR005': 1,
'DR006': 1,
'DR007': 1,
'RM5': 10,
'SY1_3F4': 1}
[60]:
# order (get/set integration order)
_, line, *_ = ring.clone()
line.propagate = True
pprint(line.order)
print()
# Set fixed number to all elements
_, line, *_ = ring.clone()
line.propagate = True
line.order = 1
pprint(line.order)
print()
# Set by kind
_, line, *_ = ring.clone()
line.propagate = True
line.order = (('Dipole', 1), ('Sextupole', 1))
pprint(line.order)
print()
# Set by name
_, line, *_ = ring.clone()
line.propagate = True
line.order = (('RM5', 1),)
pprint(line.order)
print()
{'BPM07': 0,
'BPM08': 0,
'DR005': 0,
'DR006': 0,
'DR007': 0,
'RM5': 0,
'SY1_3F4': 0}
{'BPM07': 1,
'BPM08': 1,
'DR005': 1,
'DR006': 1,
'DR007': 1,
'RM5': 1,
'SY1_3F4': 1}
{'BPM07': 0,
'BPM08': 0,
'DR005': 0,
'DR006': 0,
'DR007': 0,
'RM5': 1,
'SY1_3F4': 1}
{'BPM07': 0,
'BPM08': 0,
'DR005': 0,
'DR006': 0,
'DR007': 0,
'RM5': 1,
'SY1_3F4': 0}
[61]:
# __call__ (propagate initial condition, pass deviation variables)
line:Line = ring.clone()
line.propagate = True
# Propagate initial condition
state = torch.tensor([0.001, 0.0005, -0.005, 0.0001], dtype=torch.float64)
print(line(state))
# Equivalent to element by element propagation of a flat line
line.flatten()
state = torch.tensor([0.001, 0.0005, -0.005, 0.0001], dtype=torch.float64)
for element in line.sequence:
state = element(state)
print(state)
# Passing deviation parameters
line:Line = ring.clone()
line.propagate = True
line.flatten()
data = line.data()
data['Q3D3']['kn'] = torch.tensor(0.1, dtype=torch.float64)
state = torch.tensor([0.001, 0.0005, -0.005, 0.0001], dtype=torch.float64)
print(line(state, data=data))
# Equivalent to changing kn value in all Q3D3 occurrancies
for position in line.positions('Q3D3'):
line[position].kn = line[position].kn.item() + 0.1
state = torch.tensor([0.001, 0.0005, -0.005, 0.0001], dtype=torch.float64)
print(line(state))
# Passing alignment errors as deviation parameters
line:Line = ring.clone()
line.propagate = True
line.flatten()
data = line.data()
data['Q3D3']['dx'] = torch.tensor(0.001, dtype=torch.float64)
state = torch.tensor([0.001, 0.0005, -0.005, 0.0001], dtype=torch.float64)
print(line(state, data=data, alignment=True))
# Equivalent to changing dx value in all Q3D3 occurrancies
for position in line.positions('Q3D3'):
line[position].dx = 0.001
state = torch.tensor([0.001, 0.0005, -0.005, 0.0001], dtype=torch.float64)
print(line(state, alignment=True))
tensor([ 0.0015, -0.0031, -0.0210, -0.0315], dtype=torch.float64)
tensor([ 0.0015, -0.0031, -0.0210, -0.0315], dtype=torch.float64)
tensor([ 0.0013, -0.0028, -0.0208, -0.0310], dtype=torch.float64)
tensor([ 0.0013, -0.0028, -0.0208, -0.0310], dtype=torch.float64)
tensor([ 0.0043, -0.0084, -0.0204, -0.0302], dtype=torch.float64)
tensor([ 0.0043, -0.0084, -0.0204, -0.0302], dtype=torch.float64)
[62]:
# __len__ (number of first level elements in the sequence)
line:Line = ring.clone()
line.propagate = True
line.flatten()
print(len(line))
print(len(line.sequence))
208
208
[63]:
# layout (name, kind, length, angle) for all leaf elements (ordered)
_, line, *_ = ring.clone()
pprint(line.layout())
[('BPM07',
'BPM',
tensor(0., dtype=torch.float64),
tensor(0., dtype=torch.float64)),
('DR005',
'Drift',
tensor(0.1196, dtype=torch.float64),
tensor(0., dtype=torch.float64)),
('RM5',
'Dipole',
tensor(0.8728, dtype=torch.float64),
tensor(0.7854, dtype=torch.float64)),
('DR006',
'Drift',
tensor(0.1096, dtype=torch.float64),
tensor(0., dtype=torch.float64)),
('SY1_3F4',
'Sextupole',
tensor(0.0800, dtype=torch.float64),
tensor(0., dtype=torch.float64)),
('DR007',
'Drift',
tensor(0.0440, dtype=torch.float64),
tensor(0., dtype=torch.float64)),
('BPM08',
'BPM',
tensor(0., dtype=torch.float64),
tensor(0., dtype=torch.float64))]
[64]:
# __repr__ (string representation, can be used for instance creation, not recommended)
_, line, *_ = ring.clone()
print(line)
print()
element, *_ = line
print(element)
print()
from model.library.bpm import BPM
print(eval(str(element)))
BPM(name="BPM07", direction="inverse", dp=0.0)
Drift(name="DR005", length=0.11958, dp=0.0, exact=False, ns=1, order=0)
Dipole(name="RM5", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR006", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SY1_3F4", length=0.08, ms=-277.23165, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR007", length=0.044, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM08", direction="forward", dp=0.0)
BPM(name="BPM07", direction="inverse", dp=0.0)
BPM(name="BPM07", direction="inverse", dp=0.0)
[65]:
# __getitem__ and __setitem__ (similar for __delitem__)
# Supports indexing by name (first match) or index in the sequence
# Supports indexing of nested lines
# Unpacking also works
line = ring.clone()
print(line[1])
print()
print(line[1, 0])
print()
print(line['BPM07_BPM08', 'BPM07'])
print()
line['BPM07_BPM08', 'BPM07'] = Corrector('CXY')
print(line[1])
print()
BPM(name="BPM07", direction="inverse", dp=0.0)
Drift(name="DR005", length=0.11958, dp=0.0, exact=False, ns=1, order=0)
Dipole(name="RM5", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR006", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SY1_3F4", length=0.08, ms=-277.23165, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR007", length=0.044, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM08", direction="forward", dp=0.0)
BPM(name="BPM07", direction="inverse", dp=0.0)
BPM(name="BPM07", direction="inverse", dp=0.0)
Corrector(name="CXY", cx=0.0, cy=0.0, dp=0.0)
Drift(name="DR005", length=0.11958, dp=0.0, exact=False, ns=1, order=0)
Dipole(name="RM5", length=0.87284, angle=0.785398163400001, e1=0.0, e1_on=True, e2=0.0, e2_on=True, kn=-2.379107171999999, ks=0.0, ms=0.0, mo=0.0, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR006", length=0.10958, dp=0.0, exact=False, ns=1, order=0)
Sextupole(name="SY1_3F4", length=0.08, ms=-277.23165, dp=0.0, exact=False, ns=1, order=0)
Drift(name="DR007", length=0.044, dp=0.0, exact=False, ns=1, order=0)
BPM(name="BPM08", direction="forward", dp=0.0)