Skip to content

Commit 376d2ca

Browse files
authored
Merge pull request #29 from aoeftiger/feature/adding_errors
line.py: fixing alignment errors when apertures present
2 parents 1cadf05 + bed2fe5 commit 376d2ca

File tree

1 file changed

+21
-5
lines changed

1 file changed

+21
-5
lines changed

pysixtrack/line.py

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -343,27 +343,43 @@ def from_madx_sequence(
343343

344344
# error handling (alignment, multipole orders, ...):
345345

346-
def add_offset_error_to(self, element, dx=0, dy=0):
346+
def find_element_ids(self, element):
347+
"""Find element in this Line instance's self.elements.
348+
349+
Return index before and after the element, taking into account
350+
attached _aperture instances (LimitRect, LimitEllipse, ...)
351+
which would follow the element occurrence in the list.
352+
353+
Raises IndexError if element not in this Line.
354+
"""
347355
# will raise error if element not present:
348356
idx_el = self.elements.index(element)
357+
idx_after_el = idx_el + 1
358+
el_name = self.element_names[idx_el]
359+
if self.element_names[idx_after_el] == el_name + '_aperture':
360+
idx_after_el += 1
361+
return idx_el, idx_after_el
362+
363+
def add_offset_error_to(self, element, dx=0, dy=0):
364+
idx_el, idx_after_el = self.find_element_ids(element)
349365
el_name = self.element_names[idx_el]
350366
if not dx and not dy:
351367
return
352368
xyshift = elements.XYShift(dx=dx, dy=dy)
353369
inv_xyshift = elements.XYShift(dx=-dx, dy=-dy)
354370
self.insert_element(idx_el, xyshift, el_name + "_offset_in")
355-
self.insert_element(idx_el + 2, inv_xyshift, el_name + "_offset_out")
371+
self.insert_element(idx_after_el + 1, inv_xyshift,
372+
el_name + "_offset_out")
356373

357374
def add_tilt_error_to(self, element, angle):
358-
# will raise error if element not present:
359-
idx_el = self.elements.index(element)
375+
idx_el, idx_after_el = self.find_element_ids(element)
360376
el_name = self.element_names[idx_el]
361377
if not angle:
362378
return
363379
srot = elements.SRotation(angle=angle)
364380
inv_srot = elements.SRotation(angle=-angle)
365381
self.insert_element(idx_el, srot, el_name + "_tilt_in")
366-
self.insert_element(idx_el + 2, inv_srot, el_name + "_tilt_out")
382+
self.insert_element(idx_after_el + 1, inv_srot, el_name + "_tilt_out")
367383

368384
def add_multipole_error_to(self, element, knl=[], ksl=[]):
369385
# will raise error if element not present:

0 commit comments

Comments
 (0)