


FINDSPOS returns longitudinal positions of accelerator lattice elements.
Return value is a row vector of positions S at the entrance of each
element specified REFPTS (index list or logical mask)
Note: REFPTS is an array of increasing indexes that
select elements from range 1 to length(LATTICE)+1.
REFPTS is allowed to go 1 point beyond the
number of elements. In this case the last point is
the EXIT of the last element. If LATTICE is a RING
it is also the entrance of the first element after 1 turn.
Note:
1. Use findspos(RING,1:length(RING)) for to find
longitudinal position of all elements
2. Use findspos(LINE,length(LINE)+1) to find the
total physical length
3. If line is a closed ring, exit of the last element
is also the entrance to the first.

0001 function spos = findspos(line,refpts) 0002 %FINDSPOS returns longitudinal positions of accelerator lattice elements. 0003 % Return value is a row vector of positions S at the entrance of each 0004 % element specified REFPTS (index list or logical mask) 0005 % 0006 % Note: REFPTS is an array of increasing indexes that 0007 % select elements from range 1 to length(LATTICE)+1. 0008 % REFPTS is allowed to go 1 point beyond the 0009 % number of elements. In this case the last point is 0010 % the EXIT of the last element. If LATTICE is a RING 0011 % it is also the entrance of the first element after 1 turn. 0012 % 0013 % Note: 0014 % 1. Use findspos(RING,1:length(RING)) for to find 0015 % longitudinal position of all elements 0016 % 2. Use findspos(LINE,length(LINE)+1) to find the 0017 % total physical length 0018 % 3. If line is a closed ring, exit of the last element 0019 % is also the entrance to the first. 0020 0021 if isvector(line) 0022 L=[0;cumsum(cellfun(@(el) el.Length,line(:),'ErrorHandler',@(w,el) 0))]; 0023 else 0024 L=[0;cumsum(cellfun(@(el) el.Length,line(:,1),'ErrorHandler',@(w,el) 0))]; 0025 end 0026 spos=L(refpts)'; 0027 end