[4] | 1 | function [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 |
---|
| 15 | OLDN = length(LATTICE); |
---|
| 16 | NEWN = OLDN-length(ELEMINDEX); |
---|
| 17 | |
---|
| 18 | THERING = cell(1,NEWN); |
---|
| 19 | NEWINDEX = zeros(size(ELEMINDEX)); |
---|
| 20 | |
---|
| 21 | ALLELEMS = 1:length(LATTICE); |
---|
| 22 | ALLELEMS(ELEMINDEX)=0; |
---|
| 23 | NZ = find(ALLELEMS); |
---|
| 24 | |
---|
| 25 | for i = 1:length(NZ) |
---|
| 26 | NEWLATTICE{i}=LATTICE{NZ(i)}; |
---|
| 27 | end |
---|
| 28 | |
---|
| 29 | |
---|
| 30 | % current warning state |
---|
| 31 | originalwarnstate = warning; |
---|
| 32 | warning 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); |
---|