source: MML/trunk/at/lattice/combinebypassmethod.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.4 KB
Line 
1function [NEWLATTICE, SHIFTEDKEEPINDEX, SHIFTEDREFINDEX] = combinebypassmethod(LATTICE,METHOD,KEEPINDEX,REFINDEX)
2%COMBINEBYPASSMETHOD combines adjacent elements that have the same specified pass method
3% [NEWLATTICE, SHIFTEDKEEPINDEX, SHIFTEDREF] = COMBINEBYPASSMETHOD(LATTICE,METHOD,KEEPINDEX,REFINDEX)
4
5
6% make a new (empty) lattice
7OLDN = length(LATTICE);
8
9I45 = findcells(LATTICE,'PassMethod',METHOD);
10
11D = diff(I45);
12
13A = 1:length(LATTICE);
14A(I45(find(~(D-1))))=0;
15
16A = ~A;
17
18% A has been constructed such that if
19%  A(i)=1 , LATTICE{i} should be combined with LATTICE{i+1}
20
21
22if ~isempty(KEEPINDEX)
23    A(KEEPINDEX)=0;
24    K = KEEPINDEX-1;
25    if K(1)<1
26        A(K(2:end))=0;
27    else
28        A(K)=0;
29    end
30else
31    SHIFTEDKEEPINDEX = [];
32end
33
34if ~isempty(REFINDEX)
35    R = REFINDEX-1;
36    if R(1)<1
37        A(R(2:end))=0;
38    else
39        A(R)=0;
40    end
41else
42    SHIFTEDREFINDEX = [];
43end
44
45CSA = cumsum(A);
46
47SHIFTEDKEEPINDEX = KEEPINDEX-CSA(KEEPINDEX);
48
49if ~isempty(REFINDEX)
50    if REFINDEX(1)<2
51        SHIFTEDREFINDEX = REFINDEX-[0 CSA(REFINDEX(2:end)-1)];
52    else
53        SHIFTEDREFINDEX = REFINDEX-CSA(R);
54    end
55end
56
57
58SHIFTEDREFINDEX = REFINDEX-CSA(REFINDEX-1) ;
59
60
61NEWN = CSA(end);
62NEWLATTICE = cell(1,NEWN);
63
64NEWLATTICE{1}=LATTICE{1};
65writepos = 1;
66for i=2:OLDN
67    if A(i-1)
68        NEWLATTICE{writepos}.Length = NEWLATTICE{writepos}.Length+LATTICE{i}.Length;
69    else
70        writepos = writepos+1;
71        NEWLATTICE{writepos}=LATTICE{i};
72    end
73end
Note: See TracBrowser for help on using the repository browser.