@@ -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