Repository navigation
Expand file tree
/
Copy pathOneToOneSteering.html
More file actions
182 lines (174 loc) · 73.8 KB
/
Copy pathOneToOneSteering.html
File metadata and controls
182 lines (174 loc) · 73.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge,IE=9,chrome=1"><meta name="generator" content="MATLAB 2021a"><title>One-to-one steering in a transfer line (Section 8.4.2)</title><style type="text/css">.rtcContent { padding: 30px; } .S0 { margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: rgb(0, 0, 0); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: normal; text-align: left; }
.S1 { margin: 15px 10px 5px 4px; padding: 0px; line-height: 28.8px; min-height: 0px; white-space: pre-wrap; color: rgb(213, 80, 0); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 24px; font-weight: normal; text-align: left; }
.CodeBlock { background-color: #F7F7F7; margin: 10px 0 10px 0;}
.S2 { border-left: 1px solid rgb(233, 233, 233); border-right: 1px solid rgb(233, 233, 233); border-top: 1px solid rgb(233, 233, 233); border-bottom: 0px none rgb(0, 0, 0); border-radius: 4px 4px 0px 0px; padding: 6px 45px 0px 13px; line-height: 17.234px; min-height: 18px; white-space: nowrap; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; }
.S3 { border-left: 1px solid rgb(233, 233, 233); border-right: 1px solid rgb(233, 233, 233); border-top: 0px none rgb(0, 0, 0); border-bottom: 0px none rgb(0, 0, 0); border-radius: 0px; padding: 0px 45px 0px 13px; line-height: 17.234px; min-height: 18px; white-space: nowrap; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; }
.S4 { border-left: 1px solid rgb(233, 233, 233); border-right: 1px solid rgb(233, 233, 233); border-top: 0px none rgb(0, 0, 0); border-bottom: 1px solid rgb(233, 233, 233); border-radius: 0px 0px 4px 4px; padding: 0px 45px 4px 13px; line-height: 17.234px; min-height: 18px; white-space: nowrap; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; }
.S5 { margin: 10px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: rgb(0, 0, 0); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: normal; text-align: left; }
.S6 { border-left: 1px solid rgb(233, 233, 233); border-right: 1px solid rgb(233, 233, 233); border-top: 0px none rgb(0, 0, 0); border-bottom: 1px solid rgb(233, 233, 233); border-radius: 0px; padding: 0px 45px 4px 13px; line-height: 17.234px; min-height: 18px; white-space: nowrap; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; }
.S7 { color: rgb(64, 64, 64); padding: 10px 0px 6px 17px; background: rgb(255, 255, 255) none repeat scroll 0% 0% / auto padding-box border-box; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; overflow-x: hidden; line-height: 17.234px; }
.S8 { margin: 3px 10px 5px 4px; padding: 0px; line-height: 20px; min-height: 0px; white-space: pre-wrap; color: rgb(60, 60, 60); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 20px; font-weight: bold; text-align: left; }
.S9 { margin: 10px 10px 5px 4px; padding: 0px; line-height: 18px; min-height: 0px; white-space: pre-wrap; color: rgb(60, 60, 60); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 15px; font-weight: bold; text-align: left; }</style></head><body><div class = rtcContent><div class = 'S0'><span>Companion software for "Volker Ziemann, </span><span style=' font-style: italic;'>Hands-on Accelerator physics using MATLAB, CRCPress, 2019</span><span>" (https://www.crcpress.com/9781138589940)</span></div><h1 class = 'S1'><span>One-to-one steering in a transfer line (Section 8.4.2)</span></h1><div class = 'S0'><span>Volker Ziemann, 211122, CC-BY-SA-4.0</span></div><div class = 'S0'><span>In this example we illustrate the concept of one-to-one steering in a beam line with misaligned quadrupoles, where we use one corrector at a time to correct the orbit on the next BPM located downstream of the corrector.</span></div><div class = 'S0'><span>To include the misaligned quadrupoles and steering magnets (=correctors), extern the </span><span style=' font-family: monospace;'>beamline</span><span> description with a fifth column, which includes the misalignment of the quads (elements with code 2) and also the excitation of the correctors (elements with code 100). We alos include beam position monitors (BPM) as elements having code 200. Here is the description of the </span><span style=' font-family: monospace;'>beamline</span><span>. We also need to update all the code to generate transfer matrices, which can be found below in the Appendix.</span></div><div class="CodeBlock"><div class="inlineWrapper"><div class = 'S2'><span style="white-space: pre"><span >clear </span><span style="color: rgb(170, 4, 249);">all</span></span></div></div><div class="inlineWrapper"><div class = 'S3'><span style="white-space: pre"><span >beamline=[</span></span></div></div><div class="inlineWrapper"><div class = 'S3'><span style="white-space: pre"><span > 1, 1, 0.5, 0, 0;</span></span></div></div><div class="inlineWrapper"><div class = 'S3'><span style="white-space: pre"><span > 2, 1, 0, 2.1, 2e-3; </span><span style="color: rgb(2, 128, 9);">% QF</span></span></div></div><div class="inlineWrapper"><div class = 'S3'><span style="white-space: pre"><span > 1, 1, 1, 0, 0;</span></span></div></div><div class="inlineWrapper"><div class = 'S3'><span style="white-space: pre"><span >100, 1, 0, 0, 0; </span><span style="color: rgb(2, 128, 9);">% COR1</span></span></div></div><div class="inlineWrapper"><div class = 'S3'><span style="white-space: pre"><span > 1, 1, 1, 0, 0;</span></span></div></div><div class="inlineWrapper"><div class = 'S3'><span style="white-space: pre"><span >200, 1 0, 0, 0; </span><span style="color: rgb(2, 128, 9);">% BPM1</span></span></div></div><div class="inlineWrapper"><div class = 'S3'><span style="white-space: pre"><span > 2, 1, 0,-2.1, -5.3e-3; </span><span style="color: rgb(2, 128, 9);">% QD</span></span></div></div><div class="inlineWrapper"><div class = 'S3'><span style="white-space: pre"><span > 1, 1, 1, 0, 0;</span></span></div></div><div class="inlineWrapper"><div class = 'S3'><span style="white-space: pre"><span >100, 1, 0, 0, 0; </span><span style="color: rgb(2, 128, 9);">% COR2</span></span></div></div><div class="inlineWrapper"><div class = 'S3'><span style="white-space: pre"><span > 1, 1, 1, 0, 0;</span></span></div></div><div class="inlineWrapper"><div class = 'S3'><span style="white-space: pre"><span >200, 1 0, 0, 0; </span><span style="color: rgb(2, 128, 9);">% BPM2</span></span></div></div><div class="inlineWrapper"><div class = 'S3'><span style="white-space: pre"><span > 2, 1, 0, 2.1, 4e-3; </span><span style="color: rgb(2, 128, 9);">% QF</span></span></div></div><div class="inlineWrapper"><div class = 'S3'><span style="white-space: pre"><span > 1, 1, 1, 0, 0;</span></span></div></div><div class="inlineWrapper"><div class = 'S3'><span style="white-space: pre"><span >100, 1, 0, 0, 0; </span><span style="color: rgb(2, 128, 9);">% COR3</span></span></div></div><div class="inlineWrapper"><div class = 'S3'><span style="white-space: pre"><span > 1, 1, 1, 0, 0;</span></span></div></div><div class="inlineWrapper"><div class = 'S3'><span style="white-space: pre"><span > 2, 1, 0, 2.1,-3e-3; </span><span style="color: rgb(2, 128, 9);">% QD</span></span></div></div><div class="inlineWrapper"><div class = 'S3'><span style="white-space: pre"><span > 1, 1, 1, 0, 0; </span></span></div></div><div class="inlineWrapper"><div class = 'S3'><span style="white-space: pre"><span >200, 1 0, 0, 0; </span><span style="color: rgb(2, 128, 9);">% BPM3</span></span></div></div><div class="inlineWrapper"><div class = 'S4'><span style="white-space: pre"><span >];</span></span></div></div></div><div class = 'S5'><span>Note that the beamline describes a simple FODO lattice with alternating focusing and defocusing quads. Interspersed we just placed the steering magnets and the BPM. Note that the fifith column of the quadrupoles already contains non-zero entries, which accounts for a initial transverse misalignment. </span></div><div class = 'S0'><span>Occasionally it is useful to generate new quadrupole misalignments, which is accomplished by selecting the checkbox. But only do this once you've corrected the as-found configuration.</span></div><div class="CodeBlock"><div class="inlineWrapper"><div class = 'S2'><span style="white-space: pre"><span >new_quad_misalignment=</span></span><span>false</span><span style="white-space: pre"><span >;</span></span></div></div><div class="inlineWrapper"><div class = 'S3'><span style="white-space: pre"><span style="color: rgb(14, 0, 255);">if </span><span >new_quad_misalignment</span></span></div></div><div class="inlineWrapper"><div class = 'S3'><span style="white-space: pre"><span > dx=4e-3*randn(4,1);</span></span></div></div><div class="inlineWrapper"><div class = 'S3'><span style="white-space: pre"><span > beamline(2,5)=dx(1);</span></span></div></div><div class="inlineWrapper"><div class = 'S3'><span style="white-space: pre"><span > beamline(7,5)=dx(2);</span></span></div></div><div class="inlineWrapper"><div class = 'S3'><span style="white-space: pre"><span > beamline(12,5)=dx(3);</span></span></div></div><div class="inlineWrapper"><div class = 'S3'><span style="white-space: pre"><span > beamline(16,5)=dx(4);</span></span></div></div><div class="inlineWrapper"><div class = 'S4'><span style="white-space: pre"><span style="color: rgb(14, 0, 255);">end</span></span></div></div></div><div class = 'S0'><span>The three sliders control the angle with which the steering magnets kick the beam. Note how the sliders just change the entry in the fifth column of the beamline, where the kick angle of the correctors is found.</span></div><div class="CodeBlock"><div class="inlineWrapper"><div class = 'S2'><span style="white-space: pre"><span >beamline(4,5)=</span></span><span>0</span><span style="white-space: pre"><span >; </span><span style="color: rgb(2, 128, 9);">% slider for COR1</span></span></div></div><div class="inlineWrapper"><div class = 'S3'><span style="white-space: pre"><span >beamline(9,5)=</span></span><span>0</span><span style="white-space: pre"><span >; </span><span style="color: rgb(2, 128, 9);">% slider for COR2</span></span></div></div><div class="inlineWrapper"><div class = 'S4'><span style="white-space: pre"><span >beamline(14,5)=</span></span><span>0</span><span style="white-space: pre"><span >; </span><span style="color: rgb(2, 128, 9);">% slider for COR3</span></span></div></div></div><div class = 'S5'><span>Once we have all misalignments and corrector excitations defined, we can update all transfermatrices with </span><span style=' font-family: monospace;'>calcmat()</span><span>, allocate the lattice and launch a particle which is initially located on central axis, as indicated by the two zeros. The '1' in the third row is discussed in the Appendix. As the particle propagates through the beamline its transverse position </span><span style=' font-family: monospace;'>x(1)</span><span> is converted to mm and stored in the array </span><span style=' font-family: monospace;'>data()</span><span> for later display.</span></div><div class="CodeBlock"><div class="inlineWrapper"><div class = 'S2'><span style="white-space: pre"><span >[Racc,spos,nmat,nlines]=calcmat(beamline);</span></span></div></div><div class="inlineWrapper"><div class = 'S3'><span style="white-space: pre"><span >data=zeros(nmat,1); </span><span style="color: rgb(2, 128, 9);">% allocate memory</span></span></div></div><div class="inlineWrapper"><div class = 'S3'><span style="white-space: pre"><span >x0=[0;0;1];</span></span></div></div><div class="inlineWrapper"><div class = 'S3'><span style="white-space: pre"><span style="color: rgb(14, 0, 255);">for </span><span >k=1:nmat</span></span></div></div><div class="inlineWrapper"><div class = 'S3'><span style="white-space: pre"><span > x=Racc(:,:,k)*x0;</span></span></div></div><div class="inlineWrapper"><div class = 'S3'><span style="white-space: pre"><span > data(k)=1e3*x(1); </span><span style="color: rgb(2, 128, 9);">% convert to mm</span></span></div></div><div class="inlineWrapper"><div class = 'S4'><span style="white-space: pre"><span style="color: rgb(14, 0, 255);">end</span></span></div></div></div><div class = 'S5'><span>The BPMs are located at position 6, 11, and 18 in the beamline, but there is one additional entry at s=0, such that all indices are increase by one, when we display the detected position in a bargraph, just as in a real control room. In the lower subplot, we display the trajectory that the beam takes through the beam line. Note that the position of the steering magnets is indicated by a short red verical line and that of the BPMs by a longer blue line.</span></div><div class="CodeBlock"><div class="inlineWrapper"><div class = 'S2'><span style="white-space: pre"><span >subplot(2,1,1); bar([data(7),data(12),data(19)]);</span></span></div></div><div class="inlineWrapper"><div class = 'S3'><span style="white-space: pre"><span >ylim([-10,10]); ylabel(</span><span style="color: rgb(170, 4, 249);">'x [mm]'</span><span >)</span></span></div></div><div class="inlineWrapper"><div class = 'S3'><span style="white-space: pre"><span >subplot(2,1,2); plot(spos,data,</span><span style="color: rgb(170, 4, 249);">'k'</span><span >, </span><span style="color: rgb(14, 0, 255);">...</span></span></div></div><div class="inlineWrapper"><div class = 'S3'><span style="white-space: pre"><span > [2.5,2.5],[-8,8],</span><span style="color: rgb(170, 4, 249);">'b'</span><span >,[4.5,4.5],[-8,8],</span><span style="color: rgb(170, 4, 249);">'b'</span><span >,[7.5,7.5],[-8,8],</span><span style="color: rgb(170, 4, 249);">'b'</span><span >, </span><span style="color: rgb(14, 0, 255);">...</span></span></div></div><div class="inlineWrapper"><div class = 'S3'><span style="white-space: pre"><span > [1.5,1.5],[-5,5],</span><span style="color: rgb(170, 4, 249);">'r-.'</span><span >,[3.5,3.5],[-5,5],</span><span style="color: rgb(170, 4, 249);">'r-.'</span><span >,[5.5,5.5],[-5,5],</span><span style="color: rgb(170, 4, 249);">'r-.'</span><span >);</span></span></div></div><div class="inlineWrapper outputs"><div class = 'S6'><span style="white-space: pre"><span >ylim([-10,10]); xlabel(</span><span style="color: rgb(170, 4, 249);">'s [m]'</span><span >); ylabel(</span><span style="color: rgb(170, 4, 249);">'x [mm]'</span><span >) </span></span></div><div class = 'S7'><div class="inlineElement eoOutputWrapper embeddedOutputsFigure" uid="2C9AFCF5" data-scroll-top="null" data-scroll-left="null" data-testid="output_0" style="width: 1327px;"><div class="figureElement"><img class="figureImage figureContainingNode" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAjAAAAGkCAYAAAAv7h+nAAAgAElEQVR4AezBX4imd33//+f7CkEy6Bj8euJBRMSZl4z/MOAKwQPdm9Q/IGmtQSp4UOLJSBbNBSEulFhs7IGEG9sN4qKhTQUlGJGS0YPIZaCb2HWHumhI9PkV/cJKkWIOPMgaFtl8fuQgEKSWH7TUuTPvx2MarbXWWmsbZqK11lprbcNMtNZaa61tmInWWmuttQ0z0VprrbW2YSZaa6211jbMRGuttdbahplorbXWWtswE6211lprG2aitdZaa23DTLTWWmutbZiJ1lprrbUNM9Faa621tmEmWmuttdY2zERrrbXW2oaZaK211lrbMBOttdZaaxtmorXWWmttw0y01lprrW2YidZaa621DTPRWmuttbZhJlprrbXWNsxEa6211tqGmWittdZa2zATrbXWWmsbZqK11lprbcNMtNZaa61tmIlj4sKFC1y4cIEXe+aZZ/jiF7/I6dOnOXfuHK211lrbDBPHwJNPPsmnPvUpLl26xIt9/OMf58qVK9x8883ce++9PPzww7TWWmvt6Jt4ifva177GqVOnuOGGG3ixixcvcvnyZe644w5OnjzJZz/7Wb7yla/QWmuttaNv4iXuDW94A9/+9rfZ2dnhxS5dusQb3/hGXvCWt7yFn/3sZzz33HO01lpr7WibeIk7ceIE1113Hb/vt7/9LS972ct4wTRNVBVXr17l933sYx8jCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCThYx/7GC9FE8fUNE0899xzvNgYg2ma+H0XLlxARUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUXleSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqz1NRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVF5noqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKyoULF3gpmjimXvnKV3L58mVe8Jvf/IZrr72Wa665htZaa60dbRPH1IkTJzh37hxPP/00z/vWt77F+973PlprrbV29E0cU6961av4zGc+w6233sptt93GN77xDe68807a8XH77bfTjobbb7+d9sd3++2309qmmDgm7rnnHj784Q/zYrfccguPPvoo999/P9/5znd49atfTTs+Tp06RTsaTp06RfvjO3XqFK1tionWWmuttQ0z0VprrbW2YSZaa6211jbMRGuttdbahplorbXWWtswE6211lprG2aitdZaa23DTLTWWmutbZiJ1lprrbUNM9Faa621tmEmWmuttdY2zERrrbXW2oaZaK211lrbMBOttdZaaxtmorXWWmttw0y01lprrW2YidZaa621DTPRWmuttbZhJlprrbXWNsxEa6211tqGmWittdZa2zATrbXWWmsbZqK11lprbcNMtNZaa61tmInWWmuttQ0z0VprrbW2YSaOsR/96Ec89NBDPPTQQzz00EM89thjtNZaa+3omzjGHnjgAb773e/y1FNP8dRTT3Hp0iVaa621dvRNHGM//elPOX36NHfffTd33303H/3oR2mttdba0TdxTF29epVf/vKXLMvCPM/cd999XLlyhT8kCUlIwpkzZ2ittdaOojNnzpCEJCThpWrimPrxj3/Mtddey8tf/nI++MEP8sQTT3D77bfzh6ioqJw6dYrWWmvtKDp16hQqKiovVRPH1Nvf/nZ++MMf8pGPfIT3vOc9fOELX+Dxxx/n17/+Na211lo72iaOqV/96lf85Cc/4QXXXXcd11xzDZcvX6a11lprR9vEMfXzn/+cT37yk1y5coXnPfLII7zmNa/hda97Ha211lo72iaOqXe9613cfPPNvP/97+e2227j3nvv5cyZM7TWWmvt6Js4xu68806+973vcf/99/PII4+QhNZaa60dfROttdZaaxtmorXWWmttw0y01lprrW2YidZaa621DTPRWmuttbZhJlprrbXWNsxEa6211tqGmWittdZa2zATrbXWWmsbZqK11lprbcNMtNZaa61tmIkj5he/+AUnT57k5MmTnDx5kpMnT3Ly5ElOnjzJyZMnOXnyJCdPnuTkyZOcPHmSeZ5prbXW2vEycQS94hWv4OzZs5w9e5azZ89y9uxZzp49y9mzZzl79ixnz57l7NmzzPPMv//7v9Naa62142XiCLrhhhvY2dlhZ2eHnZ0ddnZ22NnZYWdnh52dHXZ2dtjZ2SEJN9xwA6211lo7XiaOmNe//vXcd999/P+xs7PDvffeS2uttdaOl4kj7LHHHuMd73gHe3t77O3tsbe3x97eHm9605torbXW2vE1cYTdddddfPrTn+b73/8+58+f5/z585w/f55//dd/pbXWWmvH18QRNsbgve99L9dffz3b29tsb2+zvb3N9vY2rbXWWju+Jo6weZ750pe+xO9+9ztaa6211l4wcYS99rWv5ctf/jJvfvObSUISkrC3t0drrbXWjq+JI+yOO+7gc5/7HD/4wQ84PDzk8PCQw8NDzp8/T2uttdaOr4kjbIzBBz7wAa6//nq2t7fZ3t5me3ub7e1tWmuttXZ8TRxhn/jEJ/j85z/PlStXaK211lp7wcQR9s1vfpOvf/3rvPWtbyUJSUjC3t4erbXWWju+Jo6wBx54gMPDQw4PDzk8POTw8JDDw0POnz9Pa6211o6viSNse3ub7e1ttre32d7eZnt7m+3tbba3t2mttdba8TVxhD322GO84x3vYG9vj729Pfb29tjb2+NNb3oT/xOeeeYZvvjFL3L69GnOnTtHa6211jbDxBF211138elPf5rvf//7nD9/nvPnz3P+/Hn+9V//lf8JH//4x7ly5Qo333wz9957Lw8//DCttdZaO/omjrAxBu9973u5/vrr2d7eZnt7m+3tbba3t/nvunjxIpcvX+aOO+7g5MmTfPazn+UrX/kKrbXWWjv6Jo6weZ750pe+xO9+9zv+p126dIk3vvGNvOAtb3kLP/vZz3juuef4zyQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhK2traoKqqKqqKqqCqqiqqiqqgqqoqqoqqoKqqKqqKqqCqqiqqiqqgqqoqqoqqoKqqKqqKqqCqqiqqiqqgqqoqqoqqoKqqKqqKqqCqqiqqiqqgqqoqqoqqoKqqKqqKqqCqqiqqiqqgqqoqqoqqoKqqKqqKqqCqqiqqiqqgqqoqqoqqoKqqKqqKqqCqqiq2tLZKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkbG1tUVVUFVVFVVFVVBVVRVVRVVQVVUVVUVVUFVVFVVFVVBVVRVVRVVQVVUVVUVVUFVVFVVFVVBVVRVVRVVQVVUVVUVVUFVVFVVFVVBVVRVVRVVQVVUVVUVVUFVVFVVFVVBVVRVVRVVQVVUVVUVVUFVVFVVFVVBVVRVVRVVQVVUVVUVVUFVVFVVFVVBVbW1skIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSdja2qKqqCqqiqqiqqgqqoqqoqqoKqqKqqKqqCqqiqqiqqgqqoqqoqqoKqqKqqKqqCqqiqqiqqgqqoqqoqqoKqqKqqKqqCqqiqqiqqgqqoqqoqqoKqqKqqKqqCqqiqqiqqgqqoqqoqqoKqqKqqKqqCqqiqqiqqgqqoqqoqqoKqqKqqKqqCqqiqqiqqgqtra2SEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJLxUTRxhr33ta/nyl7/Mm9/8ZpKQhCTs7e3x3/Xb3/6Wl73sZbxgmiaqiqtXr/KfUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVF59tlnYV5gXmBeYF5gXmBeYF5gXmBeYF5gXmBeYF5gXmBeYF5gXmBeYF5gXmBeYF5gXmBeYF5gXmBeYF5gXmBeYF5gXmBeYF5gXmBeYF5gXmBeYF5gXmBeYF5gXmBeYF5gXmBeYF5gXmBeYF5gXmBeYF5gXmBeYF5gXmBeYF5gXmBeYF5gXmBeYF5gXmBeYF5gXmBeYF5gXmBeYF5gXmBeePbZZ1FRUVFRUVFRUVFRUVFRUVFRUVF59tlnYV5gXmBeYF5gXmBeYF5gXmBeYF5gXmBeYF5gXmBeYF5gXmBeYF5gXmBeYF5gXmBeYF5gXmBeYF5gXmBeYF5gXmBeYF5gXmBeYF5gXmBeYF5gXmBeYF5gXmBeYF5gXmBeYF5gXmBeYF5gXmBeYF5gXmBeYF5gXmBeYF5gXmBeYF5gXmBeYF5gXmBeYF5gXmBeYF5gXmBeYF5gXmBeePbZZ1FRUVFRUVFRUVFRUVFRUVFRUVF59tlnYV5gXmBeYF5gXmBeYF5gXmBeYF5gXmBeYF5gXmBeYF5gXmBeYF5gXmBeYF5gXmBeYF5gXmBeYF5gXmBeYF5gXmBeYF5gXmBeYF5gXmBeYF5gXmBeYF5gXmBeYF5gXmBeYF5gXmBeYF5gXmBeYF5gXmBeYF5gXmBeYF5gXmBeYF5gXmBeYF5gXmBeYF5gXmBeYF5gXmBeYF5gXmBeePbZZ1FRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFReamaOMLuuOMOPve5z/GDH/yAw8NDDg8POTw85Pz58/x3TdPEc889x4uNMZimidZaa60dbRNH2BiDD3zgA1x//fVsb2+zvb3N9vY229vb/He98pWv5PLly7zgN7/5Dddeey3XXHMNrbXWWjvaJo6wT3ziE3z+85/nypUr/E87ceIE586d4+mnn+Z53/rWt3jf+95Ha6211o6+iSPsm9/8Jl//+td561vfShKSkIS9vT3+u171qlfxmc98hltvvZXbbruNb3zjG9x555201lpr7eibOMIeeOABDg8POTw85PDwkMPDQw4PDzl//jz/E2655RYeffRR7r//fr7zne/w6le/mtZaa60dfRNH0BNPPMHztre32d7eZnt7m+3tbba3t9ne3mZ7e5sXPPHEE7TWWmvteJk4Yn7xi1/wV3/1V1y9epWrV69y9epVrl69ytWrV7l69SpXr17l6tWrXL16lZ/85Cfcc889tNZaa+14mTiCfvrTn7K3t8fe3h57e3vs7e2xt7fH3t4ee3t77O3tsbe3x5/+6Z/SWmutteNn4oh5/etfz8WLF7l48SIXL17k4sWLXLx4kYsXL3Lx4kUuXrzIxYsXuXjxIhcvXuQf/uEfaK211trxMnEEbW1tsbW1xdbWFltbW2xtbbG1tcXW1hZbW1tsbW2xtbXF1tYWW1tbtNZaa+14mWittdZa2zATrbXWWmsbZuIIu3r1Kv+Z3/3ud7Sj793vfjesV7BewXoF6xWsV7BewXoF6xWsV7BewXoF6xWsV7BewXoF6xWsV7BewXoF6xWsV7BewXoF6xWsV7BewXoF6xWsV7BewXoF6xWsV7BewXoF6xWsV7BewXoF6xWsV7BewXoF6xWsV7BewXoF6xWsV7BewXoF6xWsV7BewXoF6xWsV7BewXoF6xWsV7BewXoF6xWsV7BewXoF6xWsV7BewXoF6xWsV7BewXoF6xWsV7Be8bq3vpPWWmt/2MQR9t73vpfHHnuMF3vkkUd429veRjv6Hn30UcYYjDEYYzDGYIzBGIMxBmMMxhiMMRhjMMZgjMEYgzEGYwzGGIwxGGMwxmCMwRiDMQZjDMYYjDEYYzDGYIzBGIMxBmMMxhiMMRhjMMZgjMEYgzEGYwzGGIwxGGMwxmCMwRiDMQZjDMYYjDEYYzDGYIzBGIMxBmMMxhiMMRhjMMZgjMEYgzEGYwzGGIwxGGMwxmCMwRiDMQZjDMYYjDEYYzDGYIzBGIP/96PztNZa+8MmjrDPfe5z3Hbbbdxzzz087/bbb+eOO+7gH//xH2mttdba8TVxhL3zne9E5fvf/z5ve9vbuHLlCk8++SQnTpygtdZaa8fXxBF377338vOf/5w/+7M/41/+5V84e/YsrbXWWjveJo6wW2+9lX/+53/m3/7t3/jrv/5rDg8P+ad/+idOnjxJa6211o6viSPsQx/6EOfOnePlL385z9ve3ubxxx/n/e9/P6211lo7viaOsL/4i7/gP3PnnXfSWmutteNrorXWWmttw0y01lprrW2YidZaa621DTPRWmuttbZhJlprrbXWNsxEa6211tqGmWittdZa2zATrbXWWmsbZqK11lprbcNMtNZaa61tmInWWmuttQ0zcYz96Ec/4qGHHuKhhx7ioYce4rHHHqO11lprR9/EMfbAAw/w3e9+l6eeeoqnnnqKS5cu0VprrbWjb+IY++lPf8rp06e5++67ufvuu/noRz9Ka6211o6+iWPq6tWr/PKXv2RZFuZ55r777uPKlSv8IUlIQhLOnDlDa621dhSdOXOGJCQhCS9VE8fUj3/8Y6699lpe/vKX88EPfpAnnniC22+/nT9ERUXl1KlTtNZaa0fRqVOnUFFReamaOCYefPBB7rrrLu666y4efPBB3v72t/PDH/6Qj3zkI7znPe/hC1/4Ao8//ji//vWvaa211trRNnFM7OzscNNNN3HTTTexs7PDr371K37yk5/wguuuu45rrrmGy5cv01prrbWjbeKYuPHGG7nlllu45ZZbuPHGG/n5z3/OJz/5Sa5cucLzHnnkEV7zmtfwute9jtZaa60dbRPH1Lve9S5uvvlm3v/+93Pbbbdx7733cubMGVprrbV29E0cY3feeSff+973uP/++3nkkUdIQmuttdaOvonWWmuttQ0z0VprrbW2YSZaa6211jbMRGuttdbahplorbXWWtswE6211v7XvPvd74b1CtYrWK9gvYL1CtYrWK9gvYL1CtYrWK9gvYL1CtYrWK9gvYL1CtYrWK9gvYL1CtYrWK9gvYL1CtYrWK9gvYL1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Yxvb2MY2trGNbWxjG9vYxja2sY1tbGMb29jGNraxjW1sYxvb2MY2trGNbWxjG9vYxja2sY1tbGMb29jGNraxjW1sYxvb2MY2trGNbWxjG9vYxja2sY1tbGMb29jGNraxjW1sYxvb2MY2trGNbWxjG9vYxja2sY1tbGMb29jGNraxjW1sYxvb2MY2trGNbWxjG9vYxja2sY1tbGMb29jGNraxjW1sYxvb2MY2trGNbWxjG9vYxja2sY1tbGMb29jGNraxjW1sYxvb2MY2trGNbWxjG9vYxja2sY1tbGMb29jGNraxjW1sYxvb2MY2trGNbWxjG9vYxja2sY1tbGMb29jGNraxjW1sYxvb2MY2trGNbWzz9NNP88ILL3D33XdjG9vYxja2sY1tbGMb29jGNraxjW1sYxvb2MY2trGNbWxjG9vYxja2sY1tbGMb29jGNraxjW1sYxvb2MY2trGNbWxjG9vYxja2sY1tbGMb29jGNraxjW1sYxvb2MY2trGNbWxjG9vYxja2sY1tbGMb29jGNraxjW1sYxvb2MY2trGNbWxjG9vYxja2sY1tbGMb29jGNraxjW1sYxvb2MY2trGNbWxjG9vYxja2sY1tbGMb29jGNraxjW1sYxvb2MY2trHNt7/9bf77v/+bp59+GtvYxja2sY1tbGMb29jGNraxjW1sYxvb2MY2trGNbWxjG9vYxja2sY1tbGMb29jGNraxjW1sYxvb2MY2trGNbWxjG9vYxja2+eu//ms2ooIN5L777uOOO+7gjjvu4L777uN/UxQFp0+f5sXG4zFFURAR06nX6xHxmyjLkpguBRvI7OwsV111FVdddRWzs7P8b1772tdy8uRJznjuuec499xzOeecc4iIiIjJVrCBXHnlldxwww3ccMMNXHnllfxvtm3bxpEjR3j22WdZd//99/POd76TiIiImHwFm9SFF15IXdfceOON3HLLLXzxi19k165dRERExOQr2CT27t3L+973Pl7shhtuoG1b7r33Xr761a9y0UUXEREREZOvICIiImLKFMQv9Pzzz3P33Xeze/dujhw5wkZz7Ngxjh07xkbx7//+79x1113s3r2bL3zhC5w+fZqN4tlnn+Wv/uqv2L17N9/5znfYaJ577jn27t3LRvH973+fQ4cOcejQIQ4dOsRDDz3ERrG2tsbf/M3f8Md//Md8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" style="width: 560px;"></div></div></div></div></div><div class = 'S5'><span>We suggest to do as discussed in Section 8.4.2 and use the first corrector to center the beam in the first BPM, then use the second corrector to center in the second BPM, and then continue in the same fashion. Once you have succeeded in centering the beam's position on all BPM to less than 1 mm, note how the 'real' trajectory, shown on the lower panel, still deviates from the center line; it just crosses the center line where the BPMs are located.</span></div><h2 class = 'S8'><span>Appendix</span></h2><div class = 'S0'><span>In order to keep track of the misaligned quadrupoles and the excitation of the steering magnets, we extend the 2x2 matrices to 3x3 matrices, because in this way we can include kicks intothe transfer matrix. Basically we rewrite</span></div><div class = 'S0'><span> </span><span texencoding="\vec x_1 = \vec q + R\vec x_0" style="vertical-align:-6px"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAAA8CAYAAAAjW/WRAAAKeElEQVR4Xu2dBZAkyQ1F3/kMZ2bGMzMzMzMzh5mZfXaY7TMzhJmZmZmZwuwwMzPF21ONa3p7pqcqM3t7uqSIjZ3t6VJlKlMp6UvK3Y+klEBKYEsJ7JeySQmkBLaWQCpI7o6UwDYSSAXJ7ZESSAXJPZASGCeBtCDj5JZPTUQCqSATWeic5jgJpIKMk1s+NREJpIJMZKFzmuMkkAoyTm751EQkkAoykYXOaY6TQCrIOLnlUxORQCrIRBY6pzlOAq0U5PHAw4DfjBvWpJ5KWZUv94WBUwHPK2e1mUMrBbk5cHvgksBvaw96zfilrMoX9CjAR4AnAM8vZ/d/Dq0UxDc8KhREJfldzUGvIa+UVfminhT4OHAf4EXl7A7h0FJB5P1G4ATAVYEf1Rr0GvJJWdVZ1PMCHwTuBjytBsuWCuL4rge8DPg1oCvxphqDXlMeKavyhT0c8GngTMCrgVuXuvhbKcj3geOWj5cDZni8D7gX8NkKvFeFRcqqfCVuCTylnA2Hhj1/OtK1fwwgEPL3Mfy3UpCfAscbw3DBM58B7hoBVQP2+4Rlyqpc7J70zyxnsxeHvwJPBh4C+PNgau1i3RB4MfCnQLWqBU+DZ7r6D6Ssytfo8MAnw8V6Z7j1Pylh21pBXgecGrga8K2SgU7g2ZRV+SKfA/gE8GDgkcB/S1m2VJCDgGsAFwd+WTrQNX8+ZVW+wCcM6/EI4Onl7A7h0EpBbhB4dCrH4pVKWS2W0aJvHBH4MPDcmsrRSkFUOlP+Jmx+sWhmE/99yqrOBrg8cGCt3Ed/SK0sSJ1pJ5eUwD6WQCrIPl6AfP1qSyAVZLXXZzeM7jDAs6Lu7sQzA/5b/FtX+wfAh4CnAj/bDRNrFYPslrnnOOtKwMoL6+26TPZ9gccFEHTuSNidPTLaN4pSkLojaMAtLUgDoU6U5VF7Vdt/AY4xU95xHOAbwNEBLctZgW+uuqxSQVZ9heqM7ywBgX4qKhrqcN3M5SLAB+KjdwCXm/OSVwDXic/vAjypxUBq8kwFqSnN1eV1gah/ew9wqUbDNHttwlOy3NzmpVlSIe4UH5rMs6lupSkVZKWXp9rglqEgdvT5Hsly86/MGf37gYtOxYLoQ5qgsRdY02lxWEdHi6pdM5yeKhYrJsGJgGsDp40+BStNDWpPGf37n28kpNYKcuQYv3OxutkmuVlyjl8CLCj8M3AK4OcD5nsS4EqhfMYyT+w9eyjgVoCupFbK31ehMRbksHEhwx/Dzzwf8DXgDDGiYwH6umY2patkoxRHAg4GLCvxMouXRrD6wEB5rFkT8blnlVXdm0lrBblydI/6Ziu2bzIzBAP0dwNnjgJCm+deMGCud4j2i5OFDP8DWHslXOwefn3sM1nq2uniVaExCtJ/8QWjBsbPThMVu5a3O0jx8XNG2cmoWvyBM3wsoCBLyUUYcrItep8HxbsC1bkMYE9MR3cOxfDktXf/vYuYjfx9awWx2amT/YOA5wBepHBy4GIRa+hNfDc8i7GdpTbgWfjqgWMPybOjpElFsRbrCsAbgB+OlNNej5UqiKZNk+oJ4YD9+wvAW2oNcAAflVJkpJRsFKulILoF+ubyvHQP5enGaL2aZdm6HMKi/ygd/BbPt1YQXRoPSMvL7dzrd5L+PnqC3g4IEpTO0VbaawIvjwSlaJlybEKlCuKg7GOw3+NzEZjNmtcmA98FTLWgnmrnAe4PWIY9Sy8EbhwuqK5oK2qpIGbPuxPbw+BCYT2+DRwb+EMcELW8CFEw44wfh0XSKtfiXd2CyFC/2b5fk0NevfKrVqu8y/iaSVYpvgecbk5PtNbXjaUvfTvgGQXzM0m3XfmG7zJ21Hff7gS37dWW6CFkPNFd2CYgY3ur1Id0vZBCIKcGnStiXHkJEmmZmlENC9LFIf8GRDPGarM3UrhRzhanarNJL4Gx2WL9bdE8ffN5V9Bctre4+uoq0ljqZ7HH8vA566TuOJCBrs514xn3wkfjZ8tKuss5tkocDnzVnq9rmXXbRMN0Ww3+h5J7zbyNwJI37hw/Dvq9oOkaCmJTVBdc9gU0ZNBCn7eICdcU5pAx1Pyuiq5S/DMgz3lW9c3AFaPcQti3JbVysdw/xmu6UkL5xlHOuSNhXXMiHp66YsarpXTMAIM8hB4APHwgQ63p2wBBA68sNW4SPrbZSkBBRHaDShVEpMIKTVEFce17h7s1ZMyOQY0WyRE6Hqsgq4RieaqJSgl3G4PM0iUiYPVz8fyhbs0Q+frdVgqitTf2lARm3Gh9unugdH7mdU+uUSm9FhBp1ELpXulmDSEDfAN9E5ZeMteRlk+AwQN/g0oVxCDzrbEJxJ49FcXEx5LaPFZBVgnF8iYNzbZ+t/53n0R4XgNYu+TBoqvVT7KOld12z7VSEDf9o+PF82qrRO+s8N0f+CpwxsLJ3SxSB+4RoWJdLa2WsdVOyf2qEuj+9u/K0hLdL+LFjURjiYLoFnlKmsEUgRF/9jZ3E4VudIVhYNidMDuZQImC7IT/sr6jm6FF9KRSTh0p75cAZsw9TY3XXOCub6LV+FopSGcpHbc3isxbazdkd8pv9Z2dzFsPxSSk1tf4w9hBeZo915XTZfKw0cJsRT6nl2Iqwhxdn64ezwoZd0o/6NIGF9IrfLx3yOBGn01NFL3SLzSB44CNQ74el1ffNvzPnQjA76yLgnjbooiep6fuQAdgiOwYjGtFPK30hU1utaYWCiIwYCOUh6AnsQBNP/7o5uQB8cr4hwH99Xc4WYNxqzTcb77DZKuImXtL+mJk5o1DRAtNVvr3dvdgqWTCzyq2AX6fjD+8+XNTEeUQC6JJ08cUmhQqFH8WqemoO038vcGYGjn00q51URAXSphX8p4mZeICeDW/cZruxumjsrXGlZuL9lwLBelX73rFp0nieQpifCkErUvj+npy78Sr0GW3PEc3yj+igbrwHZlbsmzHJKvytGxHJdqOzNEYM+viXmvmi108tSmWGqIgulIOSA3051lIzA2geVM5RKTcGENpXRREC2FuyNPTk/DLkTE31rBor7tEz0JP5dmaaiqIbtJD5wTHzsmNp2WcJXM8t4kPRfSMXe+xYNJ2IRrDeRhbvvKqme+rkCYmtWS+cyf/ec75A4aedX1lbZ2YVmlTDDxEQVovovzXRUG2k1WH7HwnlGUZchXxsUDS/z9DN2Wq1B1OWho9oD4J+YpqaeU3ZJQKsvytYvmJcdqYpNzyR7tebzRI1x00SJ+F3zugqV8NMChIX4ao1t2CmFDTHzdZZXBukJ60XAkYxxgOGBP9q/fqLqYyFlGB9lBakOUuTle3JOojKigCmLRcCYii6W4aj+hydmQ/vQdY19e0cgpi6YB5FKE2se51IwP3j0Wtmbd5tC4vWTf51ZqP1tuye5OL5vEkIV8ti3kU24I3aFUsyE0jMBKG83S1u064bQwSVkuQtfjYfup8nJtmvSMXwnikRvlFrbFOhc8RApE1L2IqwqY2+3L6pScrZ0Gmsjg5z10kgVWxILtIZDnUKUkgFWRKq51zHSyBVJDBIssHpiSBVJAprXbOdbAEUkEGiywfmJIEUkGmtNo518ES+B/CU/1MzC81AgAAAABJRU5ErkJggg==" width="100" height="30" /></span><span> as </span><span texencoding="\left( \begin{array}{c} \vec_x_1\\ 1\end{array}\right) =
\left( \begin{array}{cc} R & \vec q\\ 0 & 1 \end{array}\right)
\left( \begin{array}{c} \vec_x_0\\ 1\end{array}\right) " style="vertical-align:-20px"><img src="data:image/png;base64,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" width="166.5" height="52" /></span></div><div class = 'S0'><span>which also explains the '1' in the third row of the state vector. It is needed to pick up the third column in the transfer matrix. Applied to our system, we therefore place the kick from the misaligned thin quadrupole, which, according to Equation 8.2, is </span><span texencoding="-d_x/f" style="vertical-align:-6px"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAAAoCAYAAACLvGZ4AAAFZElEQVRoQ+2aBahsVRSGv2ejYuszUFRsxYeBhYqdGNiKrdhY2NiJAQoGJih2YCsYiGL77HomdgtiBxYfrPM8zD1z795zZuad65sFA3fmrrNm7X+vvda/1p4xDKRnCIzpmeWBYQbg9jAIBuAOwO0qAjsB2wBbddVqhbHJMXKfAB4BTpycwF0IWBdYLF6LA0bZS10EYWHgPWAJ4J0aducGdgcWBT4HrgA+brXXpMh14asDhwDLA78CswK/1wCh9VGjdRNglRo2NwVuAI4CbgM+BH4CFgF+LtttEriFX9cCOwMPA+vXAKHq0beBC4GLOrQ7DngGODfSipv/bdiaP6J4oukmgvsmsCRwHHBWhyBUPbYy8DgwbwmQXPMPAmsC8wDfxcM7ROTe2+S0oG+zAd8AUwCrRpTkAtBO32hdANi8Q4OrAU9GKtg2xUbTIlenbwG+B2YH/kpZRILO1HFkDwz7CY8MUbkZ2A7YG7gqxUDTwLXq6vztwNYpC0jU2Qwwl1vlf0t8pqw2XZyoGYGlAVPXiDIpwZVybQ9IuaQxpwFvxdHdD7hsRO/TFTwNP8TGpT/1n+YWwJ1xokxdf6cYmRTg6pwVe8OgM/cDRtZSwKHhtLTsg5QFJOjMDHwJbAw8mqBfqOwCXBJvpgF8Ceov8dmPURzbmuw3uLIAK65OWnU/KnkmmAsC70YTkYHDsKp7BW3S9j8dGi18Owk4NdVGP8E1DUiFjKQ1gPEtTn4KzAdcDByUuoAEPaP1qaB2CepDVOYEvo5P5d3y7yTpF7jTA88CywDHA2e0eDdVdDcevS2Bu5K8H1lJ6mUH5fcmFaEKk3Z098Vps2kwdydJFbhjw6EkA22UrMz7lP53duRX+3D78SJvFSq2uy8E9ZKCScW6IcfGBGyFGsZMBScDrwJ2aMnSDlwLQB25GtgjDHjUHZZIZ44EzqswfELkMltLm4duyRsxVLmghkGj1ui9FNg/x04/0oLRc2YUE4+pubUsEnyPrm3p6YBAd0OMVlORm/tVDYPmW/PursGVk031A1wL14rAi0DV8XSseH14vBbwWLL3wyueH6NFKVinIsMoKKFTr/dzDPUDXPmgnc1NwI4VUfs8sGzkYQvGHzkLaKM7JfAZcHiMBzs1WbTjzjvmyjXSa3CnLbWbVRTrFGDtoGYPABsBM0SOuzV3MSV9o9WuzOLcWjxzzDpaPCLYiywmS3oNrs5YHF2k6WGl8M7vPSbYwTrRrfneo3wNcHRpsm8028GZPjymRrnRLaU7LD53Y8pimvkT2C0LjaHKpiibHQfjAp0l/QC32H0duztyr9VXZmC7K//02kWq4+2DR1nS3ypGzh3RxhrdFkJfdnzlgmUK8r3zgGTCX/F9jj2lhNqTJ8s8sqQf4ErBbBoc0tidCaYRag5WTA0Hx6zUI+jwpkpsRFzsPYDziCvb6BmtshNvBpIGLG3sCOhrwWS838uWfoCb7dQwDzwHzBKR3g64h4CXg1PX+W5nEm6gQyY3P1tGG7g3AhsAc7QZwsiVPwGWizSTDUjpAS8hZTdeD7mp2TKawPWaxRSyXownJ1Ss1g7Qy82sNjXsmGOL0+Cs4wvg6RrXQqPmt2IzRd42lzqf2Be4PEaT5d8fvAJc10Fl9+jLRrxyd+RpfTBybXpMMR1J0yP3gOiK9gS8//Ia24g1qqRb/l0wCymaPyCxxbaByJHX4/rGuYabpU1vRorOMcfWRN0mg6tvRo10SxpWRKiFximVQ2vv3Ao5J3JtJ7918McoNjmeClODQxpZSS1pMri5C5NDO43zcrMR8n8CtxGAlp0YgNvDLRmAOwC3hwj00PQgcgfg9hCBHpr+F6hO+CnJwqlGAAAAAElFTkSuQmCC" width="43.5" height="20" /></span><span>, into the third column of the transfer matrix. Likewise the place the kick from the steerer into the third column. The rest of the code remains unchanged compared to the version in the 2D subdirectory.</span></div><div class="CodeBlock"><div class="inlineWrapper"><div class = 'S2'><span style="white-space: pre"><span style="color: rgb(14, 0, 255);">function </span><span >[Racc,spos,nmat,nlines]=calcmat(beamline)</span></span></div></div><div class="inlineWrapper"><div class = 'S3'><span style="white-space: pre"><span >nlines=size(beamline,1);</span></span></div></div><div class="inlineWrapper"><div class = 'S3'><span style="white-space: pre"><span >nmat=sum(beamline(:,2))+1;</span></span></div></div><div class="inlineWrapper"><div class = 'S3'><span style="white-space: pre"><span >Racc=zeros(3,3,nmat);</span></span></div></div><div class="inlineWrapper"><div class = 'S3'><span style="white-space: pre"><span >Racc(:,:,1)=eye(3);</span></span></div></div><div class="inlineWrapper"><div class = 'S3'><span style="white-space: pre"><span >spos=zeros(nmat,1);</span></span></div></div><div class="inlineWrapper"><div class = 'S3'><span style="white-space: pre"><span >ic=1;</span></span></div></div><div class="inlineWrapper"><div class = 'S3'><span style="white-space: pre"><span style="color: rgb(14, 0, 255);">for </span><span >line=1:nlines</span></span></div></div><div class="inlineWrapper"><div class = 'S3'><span style="white-space: pre"><span > </span><span style="color: rgb(14, 0, 255);">for </span><span >seg=1:beamline(line,2)</span></span></div></div><div class="inlineWrapper"><div class = 'S3'><span style="white-space: pre"><span > ic=ic+1;</span></span></div></div><div class="inlineWrapper"><div class = 'S3'><span style="white-space: pre"><span > Rcurr=eye(3);</span></span></div></div><div class="inlineWrapper"><div class = 'S3'><span style="white-space: pre"><span > </span><span style="color: rgb(14, 0, 255);">switch </span><span >beamline(line,1)</span></span></div></div><div class="inlineWrapper"><div class = 'S3'><span style="white-space: pre"><span > </span><span style="color: rgb(14, 0, 255);">case </span><span >1 </span><span style="color: rgb(2, 128, 9);">% drift space</span></span></div></div><div class="inlineWrapper"><div class = 'S3'><span style="white-space: pre"><span > Rcurr=DD(beamline(line,3));</span></span></div></div><div class="inlineWrapper"><div class = 'S3'><span style="white-space: pre"><span > </span><span style="color: rgb(14, 0, 255);">case </span><span >2 </span><span style="color: rgb(2, 128, 9);">% quadrupole</span></span></div></div><div class="inlineWrapper"><div class = 'S3'><span style="white-space: pre"><span > Rcurr=Q(beamline(line,4));</span></span></div></div><div class="inlineWrapper"><div class = 'S3'><span style="white-space: pre"><span > Rcurr(2,3)=-beamline(line,5)/beamline(line,4); </span><span style="color: rgb(2, 128, 9);">% -dx/f</span></span></div></div><div class="inlineWrapper"><div class = 'S3'><span style="white-space: pre"><span > </span><span style="color: rgb(14, 0, 255);">case </span><span >100 </span><span style="color: rgb(2, 128, 9);">% steering magnet </span></span></div></div><div class="inlineWrapper"><div class = 'S3'><span style="white-space: pre"><span > Rcurr(2,3)=beamline(line,5); </span><span style="color: rgb(2, 128, 9);">% steerer kick</span></span></div></div><div class="inlineWrapper"><div class = 'S3'><span style="white-space: pre"><span > </span><span style="color: rgb(14, 0, 255);">case </span><span >200 </span><span style="color: rgb(2, 128, 9);">% BPM</span></span></div></div><div class="inlineWrapper"><div class = 'S3'><span style="white-space: pre"><span > Rcurr=eye(3);</span></span></div></div><div class="inlineWrapper"><div class = 'S3'><span style="white-space: pre"><span > </span><span style="color: rgb(14, 0, 255);">otherwise</span></span></div></div><div class="inlineWrapper"><div class = 'S3'><span style="white-space: pre"><span > disp(</span><span style="color: rgb(170, 4, 249);">'unknown element'</span><span >);</span></span></div></div><div class="inlineWrapper"><div class = 'S3'><span style="white-space: pre"><span > </span><span style="color: rgb(14, 0, 255);">end</span></span></div></div><div class="inlineWrapper"><div class = 'S3'><span style="white-space: pre"><span > Racc(:,:,ic)=Rcurr*Racc(:,:,ic-1);</span></span></div></div><div class="inlineWrapper"><div class = 'S3'><span style="white-space: pre"><span > spos(ic)=spos(ic-1)+beamline(line,3); </span></span></div></div><div class="inlineWrapper"><div class = 'S3'><span style="white-space: pre"><span > </span><span style="color: rgb(14, 0, 255);">end</span></span></div></div><div class="inlineWrapper"><div class = 'S3'><span style="white-space: pre"><span style="color: rgb(14, 0, 255);">end</span></span></div></div><div class="inlineWrapper"><div class = 'S4'><span style="white-space: pre"><span style="color: rgb(14, 0, 255);">end</span></span></div></div></div><h4 class = 'S9'><span>DD(L)</span></h4><div class = 'S0'><span>The function </span><span style=' font-family: monospace;'>DD()</span><span> returns the 3x3 transfer matrix of a driftspace with length </span><span style=' font-family: monospace;'>L.</span></div><div class="CodeBlock"><div class="inlineWrapper"><div class = 'S2'><span style="white-space: pre"><span style="color: rgb(14, 0, 255);">function </span><span >out=DD(L)</span></span></div></div><div class="inlineWrapper"><div class = 'S3'><span style="white-space: pre"><span >out=[1,L,0;0,1,0;0,0,1];</span></span></div></div><div class="inlineWrapper"><div class = 'S4'><span style="white-space: pre"><span style="color: rgb(14, 0, 255);">end</span></span></div></div></div><h4 class = 'S9'><span>Q(F)</span></h4><div class = 'S0'><span>The function </span><span style=' font-family: monospace;'>Q()</span><span> returns the 3x3 transfer matrix of a thin quadrupole with focal length </span><span style=' font-family: monospace;'>F.</span></div><div class="CodeBlock"><div class="inlineWrapper"><div class = 'S2'><span style="white-space: pre"><span style="color: rgb(14, 0, 255);">function </span><span >out=Q(F)</span></span></div></div><div class="inlineWrapper"><div class = 'S3'><span style="white-space: pre"><span >out=eye(3);</span></span></div></div><div class="inlineWrapper"><div class = 'S3'><span style="white-space: pre"><span style="color: rgb(14, 0, 255);">if </span><span >abs(F)<1e-8, </span><span style="color: rgb(14, 0, 255);">return</span><span >; </span><span style="color: rgb(14, 0, 255);">end</span></span></div></div><div class="inlineWrapper"><div class = 'S3'><span style="white-space: pre"><span >out(2,1)=-1/F;</span></span></div></div><div class="inlineWrapper"><div class = 'S4'><span style="white-space: pre"><span style="color: rgb(14, 0, 255);">end</span></span></div></div></div>
<br>
<!--
##### SOURCE BEGIN #####
%%
% Companion software for "Volker Ziemann, _Hands-on Accelerator physics using
% MATLAB, CRCPress, 2019_" (https://www.crcpress.com/9781138589940)
%% One-to-one steering in a transfer line (Section 8.4.2)
% Volker Ziemann, 211122, CC-BY-SA-4.0
%
% In this example we illustrate the concept of one-to-one steering in a beam
% line with misaligned quadrupoles, where we use one corrector at a time to correct
% the orbit on the next BPM located downstream of the corrector.
%
% To include the misaligned quadrupoles and steering magnets (=correctors),
% extern the |beamline| description with a fifth column, which includes the misalignment
% of the quads (elements with code 2) and also the excitation of the correctors
% (elements with code 100). We alos include beam position monitors (BPM) as elements
% having code 200. Here is the description of the |beamline|. We also need to
% update all the code to generate transfer matrices, which can be found below
% in the Appendix.
clear all
beamline=[
1, 1, 0.5, 0, 0;
2, 1, 0, 2.1, 2e-3; % QF
1, 1, 1, 0, 0;
100, 1, 0, 0, 0; % COR1
1, 1, 1, 0, 0;
200, 1 0, 0, 0; % BPM1
2, 1, 0,-2.1, -5.3e-3; % QD
1, 1, 1, 0, 0;
100, 1, 0, 0, 0; % COR2
1, 1, 1, 0, 0;
200, 1 0, 0, 0; % BPM2
2, 1, 0, 2.1, 4e-3; % QF
1, 1, 1, 0, 0;
100, 1, 0, 0, 0; % COR3
1, 1, 1, 0, 0;
2, 1, 0, 2.1,-3e-3; % QD
1, 1, 1, 0, 0;
200, 1 0, 0, 0; % BPM3
];
%%
% Note that the beamline describes a simple FODO lattice with alternating focusing
% and defocusing quads. Interspersed we just placed the steering magnets and the
% BPM. Note that the fifith column of the quadrupoles already contains non-zero
% entries, which accounts for a initial transverse misalignment.
%%
% Occasionally it is useful to generate new quadrupole misalignments, which
% is accomplished by selecting the checkbox. But only do this once you've corrected
% the as-found configuration.
new_quad_misalignment=false;
if new_quad_misalignment
dx=4e-3*randn(4,1);
beamline(2,5)=dx(1);
beamline(7,5)=dx(2);
beamline(12,5)=dx(3);
beamline(16,5)=dx(4);
end
%%
% The three sliders control the angle with which the steering magnets kick the
% beam. Note how the sliders just change the entry in the fifth column of the
% beamline, where the kick angle of the correctors is found.
beamline(4,5)=0; % slider for COR1
beamline(9,5)=0; % slider for COR2
beamline(14,5)=0; % slider for COR3
%%
% Once we have all misalignments and corrector excitations defined, we can update
% all transfermatrices with |calcmat()|, allocate the lattice and launch a particle
% which is initially located on central axis, as indicated by the two zeros. The
% '1' in the third row is discussed in the Appendix. As the particle propagates
% through the beamline its transverse position |x(1)| is converted to mm and stored
% in the array |data()| for later display.
[Racc,spos,nmat,nlines]=calcmat(beamline);
data=zeros(nmat,1); % allocate memory
x0=[0;0;1];
for k=1:nmat
x=Racc(:,:,k)*x0;
data(k)=1e3*x(1); % convert to mm
end
%%
% The BPMs are located at position 6, 11, and 18 in the beamline, but there
% is one additional entry at s=0, such that all indices are increase by one, when
% we display the detected position in a bargraph, just as in a real control room.
% In the lower subplot, we display the trajectory that the beam takes through
% the beam line. Note that the position of the steering magnets is indicated
% by a short red verical line and that of the BPMs by a longer blue line.
subplot(2,1,1); bar([data(7),data(12),data(19)]);
ylim([-10,10]); ylabel('x [mm]')
subplot(2,1,2); plot(spos,data,'k', ...
[2.5,2.5],[-8,8],'b',[4.5,4.5],[-8,8],'b',[7.5,7.5],[-8,8],'b', ...
[1.5,1.5],[-5,5],'r-.',[3.5,3.5],[-5,5],'r-.',[5.5,5.5],[-5,5],'r-.');
ylim([-10,10]); xlabel('s [m]'); ylabel('x [mm]')
%%
% We suggest to do as discussed in Section 8.4.2 and use the first corrector
% to center the beam in the first BPM, then use the second corrector to center
% in the second BPM, and then continue in the same fashion. Once you have succeeded
% in centering the beam's position on all BPM to less than 1 mm, note how the
% 'real' trajectory, shown on the lower panel, still deviates from the center
% line; it just crosses the center line where the BPMs are located.
%% Appendix
% In order to keep track of the misaligned quadrupoles and the excitation of
% the steering magnets, we extend the 2x2 matrices to 3x3 matrices, because in
% this way we can include kicks intothe transfer matrix. Basically we rewrite
%
% $\vec x_1 = \vec q + R\vec x_0$ as $\left( \begin{array}{c}
% \vec_x_1\\ 1\end{array}\right) = \left( \begin{array}{cc} R & \vec q\\ 0 & 1
% \end{array}\right)\left( \begin{array}{c} \vec_x_0\\ 1\end{array}\right) $
%
% which also explains the '1' in the third row of the state vector. It is needed
% to pick up the third column in the transfer matrix. Applied to our system, we
% therefore place the kick from the misaligned thin quadrupole, which, according
% to Equation 8.2, is $-d_x/f$, into the third column of the transfer matrix.
% Likewise the place the kick from the steerer into the third column. The rest
% of the code remains unchanged compared to the version in the 2D subdirectory.
function [Racc,spos,nmat,nlines]=calcmat(beamline)
nlines=size(beamline,1);
nmat=sum(beamline(:,2))+1;
Racc=zeros(3,3,nmat);
Racc(:,:,1)=eye(3);
spos=zeros(nmat,1);
ic=1;
for line=1:nlines
for seg=1:beamline(line,2)
ic=ic+1;
Rcurr=eye(3);
switch beamline(line,1)
case 1 % drift space
Rcurr=DD(beamline(line,3));
case 2 % quadrupole
Rcurr=Q(beamline(line,4));
Rcurr(2,3)=-beamline(line,5)/beamline(line,4); % -dx/f
case 100 % steering magnet
Rcurr(2,3)=beamline(line,5); % steerer kick
case 200 % BPM
Rcurr=eye(3);
otherwise
disp('unknown element');
end
Racc(:,:,ic)=Rcurr*Racc(:,:,ic-1);
spos(ic)=spos(ic-1)+beamline(line,3);
end
end
end
% DD(L)
% The function |DD()| returns the 3x3 transfer matrix of a driftspace with length
% |L.|
function out=DD(L)
out=[1,L,0;0,1,0;0,0,1];
end
% Q(F)
% The function |Q()| returns the 3x3 transfer matrix of a thin quadrupole with
% focal length |F.|
function out=Q(F)
out=eye(3);
if abs(F)<1e-8, return; end
out(2,1)=-1/F;
end
##### SOURCE END #####
-->
</div></body></html>