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 | |
---|
1 | function [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 |
---|
7 | OLDN = length(LATTICE); |
---|
8 | |
---|
9 | I45 = findcells(LATTICE,'PassMethod',METHOD); |
---|
10 | |
---|
11 | D = diff(I45); |
---|
12 | |
---|
13 | A = 1:length(LATTICE); |
---|
14 | A(I45(find(~(D-1))))=0; |
---|
15 | |
---|
16 | A = ~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 | |
---|
22 | if ~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 |
---|
30 | else |
---|
31 | SHIFTEDKEEPINDEX = []; |
---|
32 | end |
---|
33 | |
---|
34 | if ~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 |
---|
41 | else |
---|
42 | SHIFTEDREFINDEX = []; |
---|
43 | end |
---|
44 | |
---|
45 | CSA = cumsum(A); |
---|
46 | |
---|
47 | SHIFTEDKEEPINDEX = KEEPINDEX-CSA(KEEPINDEX); |
---|
48 | |
---|
49 | if ~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 |
---|
55 | end |
---|
56 | |
---|
57 | |
---|
58 | SHIFTEDREFINDEX = REFINDEX-CSA(REFINDEX-1) ; |
---|
59 | |
---|
60 | |
---|
61 | NEWN = CSA(end); |
---|
62 | NEWLATTICE = cell(1,NEWN); |
---|
63 | |
---|
64 | NEWLATTICE{1}=LATTICE{1}; |
---|
65 | writepos = 1; |
---|
66 | for 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 |
---|
73 | end |
---|
Note: See
TracBrowser
for help on using the repository browser.