1 | function drawlattice(Offset, Scaling) |
---|
2 | %DRAWLATTICE - Draws the AT lattice to a figure |
---|
3 | % drawlattice(Offset, Scaling) |
---|
4 | |
---|
5 | % |
---|
6 | % Written by Gregory J. Portmann |
---|
7 | % Modified by Laurent S. Nadolski, SOLEIL, 03/09/04 |
---|
8 | |
---|
9 | if nargin < 1 |
---|
10 | Offset = 0; |
---|
11 | end |
---|
12 | Offset = Offset(1); |
---|
13 | if nargin < 2 |
---|
14 | Scaling = 1; |
---|
15 | end |
---|
16 | Scaling = Scaling(1); |
---|
17 | |
---|
18 | global THERING |
---|
19 | |
---|
20 | SPositions = findspos(THERING, 1:length(THERING)+1); |
---|
21 | L = SPositions(end); |
---|
22 | plot([0 L], [0 0]+Offset, 'k'); |
---|
23 | |
---|
24 | % Remember the hold state then turn hold on |
---|
25 | HoldState = ishold; |
---|
26 | hold on; |
---|
27 | |
---|
28 | % Make default icons for elements of different physical types |
---|
29 | for i = 1:length(THERING) |
---|
30 | SPos = SPositions(i); |
---|
31 | if isfield(THERING{i},'BendingAngle') && THERING{i}.BendingAngle |
---|
32 | % make icons for bending magnets |
---|
33 | IconHeight = .3; |
---|
34 | IconColor = [1 0 0]; |
---|
35 | IconWidth = THERING{i}.Length; |
---|
36 | if IconWidth < .15 % meters |
---|
37 | IconWidth = .15; |
---|
38 | SPos = SPos - IconWidth/2 + THERING{i}.Length/2; |
---|
39 | end |
---|
40 | vx = [SPos SPos+IconWidth SPos+IconWidth SPos]; |
---|
41 | vy = [IconHeight IconHeight -IconHeight -IconHeight]; |
---|
42 | h = patch(vx, Scaling*vy+Offset, IconColor,'LineStyle','-'); |
---|
43 | %if IconWidth < .1 % meters |
---|
44 | % set(h, 'EdgeColor', IconColor); |
---|
45 | %end |
---|
46 | |
---|
47 | elseif isfield(THERING{i},'K') & THERING{i}.K |
---|
48 | % Quadrupole |
---|
49 | if THERING{i}.K > 0 |
---|
50 | % Focusing quadrupole |
---|
51 | IconHeight = .6; |
---|
52 | IconColor = [0 0 1]; |
---|
53 | IconWidth = THERING{i}.Length; |
---|
54 | if IconWidth < .15 % meters |
---|
55 | IconWidth = .15; |
---|
56 | SPos = SPos - IconWidth/2 + THERING{i}.Length/2; |
---|
57 | end |
---|
58 | vx = [SPos SPos+IconWidth/2 SPos+IconWidth SPos+IconWidth/2 SPos]; |
---|
59 | vy = [0 IconHeight 0 -IconHeight 0]; |
---|
60 | else |
---|
61 | % Defocusing quadrupole |
---|
62 | IconHeight = .6; |
---|
63 | IconColor = [0 0 1]; |
---|
64 | IconWidth = THERING{i}.Length; |
---|
65 | if IconWidth < .15 % meters |
---|
66 | IconWidth = .15; |
---|
67 | SPos = SPos - IconWidth/2 + THERING{i}.Length/2; |
---|
68 | end |
---|
69 | vx = [SPos+.4*IconWidth SPos SPos+IconWidth SPos+.6*IconWidth SPos+IconWidth SPos SPos+.4*IconWidth]; |
---|
70 | vy = [ 0 IconHeight IconHeight 0 -IconHeight -IconHeight 0]; |
---|
71 | end |
---|
72 | h = patch(vx, Scaling*vy+Offset, IconColor,'LineStyle','-'); |
---|
73 | %if IconWidth < .1 % meters |
---|
74 | % set(h, 'EdgeColor', IconColor); |
---|
75 | %end |
---|
76 | |
---|
77 | % elseif isfield(THERING{i},'PolynomB') & length(THERING{i}.PolynomB)>2 & THERING{i}.PolynomB(3) |
---|
78 | % % Sextupole |
---|
79 | % if THERING{i}.PolynomB(3)>0 |
---|
80 | % % Focusing sextupole |
---|
81 | % IconHeight = .5; |
---|
82 | % IconColor = [1 0 1]; |
---|
83 | % IconWidth = THERING{i}.Length; |
---|
84 | % if IconWidth < .1 % meters |
---|
85 | % IconWidth = .1; |
---|
86 | % SPos = SPos - IconWidth/2 + THERING{i}.Length/2; |
---|
87 | % end |
---|
88 | % vx = [SPos SPos+.33*IconWidth SPos+.66*IconWidth SPos+IconWidth SPos+IconWidth SPos+.66*IconWidth SPos+.33*IconWidth SPos SPos]; |
---|
89 | % vy = [IconHeight/3 IconHeight IconHeight IconHeight/3 -IconHeight/3 -IconHeight -IconHeight -IconHeight/3 IconHeight/3]; |
---|
90 | % else |
---|
91 | % % Defocusing sextupole |
---|
92 | % IconHeight = .5; |
---|
93 | % IconColor = [0 1 0]; |
---|
94 | % IconWidth = THERING{i}.Length; |
---|
95 | % if IconWidth < .1 % meters |
---|
96 | % IconWidth = .1; |
---|
97 | % SPos = SPos - IconWidth/2 + THERING{i}.Length/2; |
---|
98 | % end |
---|
99 | % vx = [SPos SPos+.33*IconWidth SPos+.66*IconWidth SPos+IconWidth SPos+IconWidth SPos+.66*IconWidth SPos+.33*IconWidth SPos SPos]; |
---|
100 | % vy = [IconHeight/3 IconHeight IconHeight IconHeight/3 -IconHeight/3 -IconHeight -IconHeight -IconHeight/3 IconHeight/3]; |
---|
101 | % end |
---|
102 | % h = patch(vx, Scaling*vy+Offset, IconColor,'LineStyle','-'); |
---|
103 | % %if IconWidth < .1 % meters |
---|
104 | % % set(h, 'EdgeColor', IconColor); |
---|
105 | % %end |
---|
106 | % |
---|
107 | % elseif isfield(THERING{i},'Frequency') & isfield(THERING{i},'Voltage') |
---|
108 | % % RF cavity |
---|
109 | % IconColor = [1 0.5 0]; |
---|
110 | % plot(SPos, 0+Offset, 'o', 'MarkerFaceColor', IconColor, 'Color', IconColor, 'MarkerSize', 4) |
---|
111 | % |
---|
112 | % elseif strcmpi(THERING{i}.FamName,'BPM') |
---|
113 | % % BPM |
---|
114 | % IconColor = 'k'; |
---|
115 | % plot(SPos, 0+Offset, '.-', 'Color', IconColor) |
---|
116 | % %plot(SPos, 0, 'o', 'MarkerFaceColor', IconColor, 'Color', IconColor, 'MarkerSize', 1.5) |
---|
117 | % |
---|
118 | % elseif any(strcmpi(THERING{i}.FamName,{'COR','XCOR','YCOR','HCOR','VCOR'})) | isfield(THERING{i},'KickAngle') |
---|
119 | % % Corrector |
---|
120 | % IconHeight = .8; |
---|
121 | % IconColor = [0 0 0]; |
---|
122 | % vx = [SPos SPos]; |
---|
123 | % vy = [-IconHeight IconHeight]; |
---|
124 | % %plot(vx, Scaling*vy+Offset, 'Color', IconColor); |
---|
125 | % IconWidth = THERING{i}.Length; |
---|
126 | % vx = [SPos SPos+IconWidth SPos+IconWidth SPos]; |
---|
127 | % vy = [IconHeight IconHeight -IconHeight -IconHeight]; |
---|
128 | % h = patch(vx, Scaling*vy+Offset, IconColor,'LineStyle', '-'); |
---|
129 | % if IconWidth < .1 % meters |
---|
130 | % set(h, 'EdgeColor', IconColor); |
---|
131 | % end |
---|
132 | end |
---|
133 | end |
---|
134 | |
---|
135 | |
---|
136 | % Leave the hold state as it was at the start |
---|
137 | if ~HoldState |
---|
138 | hold off |
---|
139 | end |
---|
140 | xaxis([0 L]);XTick=[]; |
---|
141 | yaxis([-3 3]); |
---|