source: MML/trunk/at/lattice/rmelem0.m @ 4

Last change on this file since 4 was 4, checked in by zhangj, 10 years ago

Initial import--MML version from SOLEIL@2013

File size: 1.6 KB
Line 
1function [NEWLATTICE, SHIFTEDINDEX] = rmelem0(LATTICE,ELEMINDEX)
2%RMELEM0 removes elements of length 0 from the accelerator lattice
3% NEWLATTICE = RMELEM0(LATTICE,ELEMINDEX)
4% [NEWLATTICE, SHIFTEDINDEX] = RMELEM0(LATTICE,ELEMINDEX)
5%
6% The number of elements in the modified lattice is
7% reduced by length(ELEMINDEX)
8%
9% SHIFTEDINDEX points to elements in the NEWLATTICE that
10% immediateley followed the removed elements in the original LATTICE
11%
12% See also: SPLITDRIFT MERGEDRIFT
13
14% make a new (empty) lattice
15OLDN = length(LATTICE);
16NEWN = OLDN-length(ELEMINDEX);
17
18THERING = cell(1,NEWN);
19NEWINDEX = zeros(size(ELEMINDEX));
20
21ALLELEMS = 1:length(LATTICE);
22ALLELEMS(ELEMINDEX)=0;
23NZ = find(ALLELEMS);
24
25for i = 1:length(NZ)
26    NEWLATTICE{i}=LATTICE{NZ(i)};
27end
28
29
30% current warning state
31originalwarnstate = warning;
32warning off backtrace
33
34    newlength=findspos(NEWLATTICE,NEWN+1);
35    oldlength=findspos(LATTICE,OLDN+1);
36    if newlength~=oldlength
37        error('Elements to be removed must have 0 physical length');
38    end
39
40    SHIFTEDINDEX = 1+(ELEMINDEX(:)-(1:length(ELEMINDEX))');
41    if size(SHIFTEDINDEX)~=size(ELEMINDEX)
42        SHIFTEDINDEX=SHIFTEDINDEX';
43    end
44    if ELEMINDEX(end)==OLDN
45        warning('Last element in the original LATTICE was removed');
46    end
47
48    i = 1;
49    while i<=length(ELEMINDEX)
50        if ~strcmp(LATTICE{ELEMINDEX(i)}.PassMethod,'IdentityPass')
51            warning('One or more removed elements used PassMethod other than ''IdentityPass''!');
52            i = length(ELEMINDEX)+1;
53        else
54            i=i+1;
55        end
56    end
57    warning(originalwarnstate);
Note: See TracBrowser for help on using the repository browser.