source: MML/trunk/mml/at/doc_html/at/gettwiss.html @ 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: 10.9 KB
Line 
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
2                "http://www.w3.org/TR/REC-html40/loose.dtd">
3<html>
4<head>
5  <title>Description of gettwiss</title>
6  <meta name="keywords" content="gettwiss">
7  <meta name="description" content="GETWISS - Calculate the twiss parameters">
8  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
9  <meta name="generator" content="m2html &copy; 2003 Guillaume Flandin">
10  <meta name="robots" content="index, follow">
11  <link type="text/css" rel="stylesheet" href="../m2html.css">
12</head>
13<body>
14<a name="_top"></a>
15<div><a href="../index.html">Home</a> &gt;  <a href="index.html">at</a> &gt; gettwiss.m</div>
16
17<!--<table width="100%"><tr><td align="left"><a href="../index.html"><img alt="<" border="0" src="../left.png">&nbsp;Master index</a></td>
18<td align="right"><a href="index.html">Index for at&nbsp;<img alt=">" border="0" src="../right.png"></a></td></tr></table>-->
19
20<h1>gettwiss
21</h1>
22
23<h2><a name="_name"></a>PURPOSE <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
24<div class="box"><strong>GETWISS - Calculate the twiss parameters</strong></div>
25
26<h2><a name="_synopsis"></a>SYNOPSIS <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
27<div class="box"><strong>function [Optics] = gettwiss(THERING, DP) </strong></div>
28
29<h2><a name="_description"></a>DESCRIPTION <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
30<div class="fragment"><pre class="comment">GETWISS - Calculate the twiss parameters
31  [Optics] = gettwiss(THERING, DP)
32
33  GETTWISS calls LINOPT2 for entire ring and returns Twiss parameters
34  See LinOpt2 for description of nomenclarture and mathematics
35
36  Phase calculation from transfer matrices from '0' to location '1' (AIP 184 p. 50)
37  Only need initial alfa, beta
38  M=M44
39  M11: sqrt(beta1/beta0)*(cos(phi) + alfa0*sin(phi))
40  M12: sqrt(beta0*beta1)*sin(phi)
41  M21: (1/sqrt(beta0*beta1))*[(alfa0-alfa1)*cos(phi)-(1+alfa0*alfa1)*sin(phi))
42  M22: sqrt(beta0/beta1)*(cos(phi)-alfa1*sin(phi))
43  phi=atan2(M12,beta0*M11-alfa0*M12)
44
45  Written by Jeff Corbett</pre></div>
46
47<!-- crossreference -->
48<h2><a name="_cross"></a>CROSS-REFERENCE INFORMATION <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
49This function calls:
50<ul style="list-style-image:url(../matlabicon.gif)">
51<li><a href="linopt2.html" class="code" title="function [LinData, varargout] = linopt2(RING,DP,varargin);">linopt2</a>  LINOPT2 performs linear analysis of the COUPLED lattice RING</li></ul>
52This function is called by:
53<ul style="list-style-image:url(../matlabicon.gif)">
54<li><a href="modelDA.html" class="code" title="function [DA, Data] = modelDA( r0, nsteps, nturns, dp, res)">modelDA</a> modelDA( r0, nsteps, nturns, dp, res)</li></ul>
55<!-- crossreference -->
56
57
58<h2><a name="_source"></a>SOURCE CODE <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
59<div class="fragment"><pre>0001 <a name="_sub0" href="#_subfunctions" class="code">function [Optics] = gettwiss(THERING, DP)</a>
600002 <span class="comment">%GETWISS - Calculate the twiss parameters</span>
610003 <span class="comment">%  [Optics] = gettwiss(THERING, DP)</span>
620004 <span class="comment">%</span>
630005 <span class="comment">%  GETTWISS calls LINOPT2 for entire ring and returns Twiss parameters</span>
640006 <span class="comment">%  See LinOpt2 for description of nomenclarture and mathematics</span>
650007 <span class="comment">%</span>
660008 <span class="comment">%  Phase calculation from transfer matrices from '0' to location '1' (AIP 184 p. 50)</span>
670009 <span class="comment">%  Only need initial alfa, beta</span>
680010 <span class="comment">%  M=M44</span>
690011 <span class="comment">%  M11: sqrt(beta1/beta0)*(cos(phi) + alfa0*sin(phi))</span>
700012 <span class="comment">%  M12: sqrt(beta0*beta1)*sin(phi)</span>
710013 <span class="comment">%  M21: (1/sqrt(beta0*beta1))*[(alfa0-alfa1)*cos(phi)-(1+alfa0*alfa1)*sin(phi))</span>
720014 <span class="comment">%  M22: sqrt(beta0/beta1)*(cos(phi)-alfa1*sin(phi))</span>
730015 <span class="comment">%  phi=atan2(M12,beta0*M11-alfa0*M12)</span>
740016 <span class="comment">%</span>
750017 <span class="comment">%  Written by Jeff Corbett</span>
760018
770019
780020 <span class="keyword">if</span> nargin &lt; 1
790021     <span class="keyword">global</span> THERING
800022 <span class="keyword">end</span>
810023 <span class="keyword">if</span> nargin &lt; 2
820024     DP = 1e-8;
830025 <span class="keyword">end</span>
840026
850027
860028 <span class="comment">%load linear optics structure for entire ring</span>
870029 <span class="comment">%disp('   Computing Coupled Lattice Parameters ...');</span>
880030 LinData = <a href="linopt2.html" class="code" title="function [LinData, varargout] = linopt2(RING,DP,varargin);">linopt2</a>(THERING,DP,1:length(THERING)+1);
890031
900032 <span class="comment">%compute fractional tune</span>
910033 nux=acos(trace(LinData(1).A/2))/(2*pi);
920034 nuy=acos(trace(LinData(1).B/2))/(2*pi);
930035
940036 <span class="comment">%pre-define arrays</span>
950037 NR=length(THERING)+1;
960038 name=cell(NR,1);        <span class="comment">%initialize cell for names</span>
970039 s=zeros(NR,1);
980040 len=s;
990041 betax=s;   betay=s;
1000042 alfax=s;   alfay=s;
1010043 gammax=s;  gammay=s;
1020044 etax=s;    etay=s;
1030045 etapx=s;   etapy=s;
1040046 phix=s;    phiy=s;
1050047 curlhx=s;  curlhy=s;
1060048 ch1=s; ch2=s; ch3=s;
1070049
1080050 <span class="comment">%compute optics for all elements</span>
1090051 <span class="keyword">for</span> ii=1:NR
1100052
1110053     <span class="comment">%load position</span>
1120054     s(ii)=LinData(ii).SPos(1);
1130055
1140056     <span class="comment">%horizontal Twiss parameters</span>
1150057     m22=LinData(ii).A;
1160058     a=m22(1,1);  b=m22(1,2);  c=m22(2,1);  d=m22(2,2);
1170059     betax(ii)=b/sin(2*pi*nux);
1180060     alfax(ii)=(a-d)/(2*sin(2*pi*nux));
1190061     gammax(ii)=-c/sin(2*pi*nux);
1200062
1210063     <span class="comment">%vertical Twiss parameters</span>
1220064     m22=LinData(ii).B;
1230065     a=m22(1,1);  b=m22(1,2);  c=m22(2,1);  d=m22(2,2);
1240066     betay(ii)=b/sin(2*pi*nuy);
1250067     alfay(ii)=(a-d)/(2*sin(2*pi*nuy));
1260068     gammay(ii)=-c/sin(2*pi*nuy);
1270069
1280070     <span class="comment">%horizontal phase</span>
1290071     num=LinData(ii).M44(1,2);
1300072     den=LinData(1).beta(1)*LinData(ii).M44(1,1)-LinData(1).alfa(1)*num;
1310073     phix(ii)=atan2(num,den);
1320074
1330075     <span class="comment">%vertical phase</span>
1340076     num=LinData(ii).M44(3,4);
1350077     den=LinData(1).beta(2)*LinData(ii).M44(3,3)-LinData(1).alfa(2)*num;
1360078     phiy(ii)=atan2(num,den);
1370079
1380080     <span class="comment">%load element names</span>
1390081     <span class="keyword">if</span> ii&lt;NR
1400082         <span class="keyword">if</span> isfield(THERING{ii},<span class="string">'Name'</span>)
1410083             name{ii}=THERING{ii}.Name;
1420084         <span class="keyword">else</span>
1430085             name{ii}=THERING{ii}.FamName;
1440086         <span class="keyword">end</span>
1450087
1460088         <span class="comment">%load element lengths</span>
1470089         len(ii)=THERING{ii}.Length;
1480090     <span class="keyword">end</span>
1490091 <span class="keyword">end</span>
1500092
1510093 <span class="keyword">if</span> ii==NR
1520094     name{NR}=<span class="string">'End'</span>;       <span class="comment">%last element has name 'End' and zero length</span>
1530095     len(NR)=0;            <span class="comment">%THERING only has NR-1 elements</span>
1540096 <span class="keyword">end</span>
1550097
1560098 <span class="comment">%compute dispersion, derivative</span>
1570099 <span class="comment">%disp('   Computing Dispersion ...');</span>
1580100 dp=1e-6;
1590101 orb4=findorbit4(THERING,dp,1:NR);
1600102 etax =orb4(1,:)'/dp;
1610103 etapx=orb4(2,:)'/dp;
1620104 etay =orb4(3,:)'/dp;
1630105 etapy=orb4(4,:)'/dp;
1640106
1650107 <span class="comment">%unwrap phase</span>
1660108 phix=unwrap(phix)/(2*pi);
1670109 phiy=unwrap(phiy)/(2*pi);
1680110
1690111 <span class="comment">%compute integer tunes</span>
1700112 qx=round(phix(NR));
1710113 <span class="keyword">if</span> phix(NR)-qx &lt;=0
1720114     qx=qx-1;   <span class="comment">% Below half integer</span>
1730115 <span class="keyword">end</span> 
1740116 qx=qx+nux;
1750117 qy=round(phiy(NR));
1760118 <span class="keyword">if</span> phiy(NR)-qy &lt;=0
1770119     qy=qy-1;   <span class="comment">% Below half integer</span>
1780120 <span class="keyword">end</span> 
1790121 qy=qy+nuy;
1800122
1810123 <span class="comment">%compute curly-H</span>
1820124 <span class="keyword">for</span> ii=1:NR;
1830125     <span class="comment">%horizontal</span>
1840126     ch1(ii)=gammax(ii)*etax(ii)*etax(ii);
1850127     ch2(ii)=2*alfax(ii)*etax(ii)*etapx(ii);
1860128     ch3(ii)=betax(ii)*etapx(ii)*etapx(ii);
1870129     curlhx(ii)= ch1(ii)+ch2(ii)+ch3(ii);
1880130     <span class="comment">%vertical</span>
1890131     ch1(ii)=gammay(ii)*etay(ii)*etay(ii);
1900132     ch2(ii)=2*alfay(ii)*etay(ii)*etapy(ii);
1910133     ch3(ii)=betay(ii)*etapy(ii)*etapy(ii);
1920134     curlhy(ii)= ch1(ii)+ch2(ii)+ch3(ii);
1930135 <span class="keyword">end</span>
1940136
1950137 <span class="comment">%load output</span>
1960138 Optics.name  =char(name);
1970139 Optics.len   =len;
1980140 Optics.s     =s;
1990141 Optics.betax =betax;
2000142 Optics.alfax =alfax;
2010143 Optics.gammax=gammax;
2020144 Optics.phix  =phix;
2030145 <span class="comment">%Optics.qx    =qx;</span>
2040146 <span class="comment">%Optics.nux   =nux;</span>
2050147 Optics.etax  =etax;
2060148 Optics.etapx =etapx;
2070149 Optics.curlhx=curlhx;
2080150 <span class="comment">%load transport matrices 'A'</span>
2090151 <span class="keyword">for</span> ii=1:NR
2100152     Optics.r11x(ii,1)=LinData(ii).M44(1,1);
2110153     Optics.r12x(ii,1)=LinData(ii).M44(1,2);
2120154     Optics.r21x(ii,1)=LinData(ii).M44(2,1);
2130155     Optics.r22x(ii,1)=LinData(ii).M44(2,2);
2140156 <span class="keyword">end</span>
2150157
2160158 Optics.betay =betay;
2170159 Optics.alfay =alfay;
2180160 Optics.gammay=gammay;
2190161 Optics.phiy  =phiy;
2200162 <span class="comment">%Optics.qy    =qy;</span>
2210163 <span class="comment">%Optics.nuy   =nuy;</span>
2220164 Optics.etay  =etay;
2230165 Optics.etapy =etapy;
2240166 Optics.curlhy=curlhy;
2250167 <span class="comment">%load transport matrices 'B'</span>
2260168 <span class="keyword">for</span> ii=1:NR
2270169     Optics.r11y(ii,1)=LinData(ii).M44(3,3);
2280170     Optics.r12y(ii,1)=LinData(ii).M44(3,4);
2290171     Optics.r21y(ii,1)=LinData(ii).M44(4,3);
2300172     Optics.r22y(ii,1)=LinData(ii).M44(4,4);
2310173 <span class="keyword">end</span>
2320174
2330175 <span class="comment">% plot(s,phix); hold on; plot(s,phiy,'r');</span>
2340176 <span class="comment">% figure;</span>
2350177 <span class="comment">% ip=1:round(NR/4);</span>
2360178 <span class="comment">% plot(s(ip),betax(ip)); hold on; plot(s(ip),betay(ip),'r'); plot(s(ip),10*Optics.etax(ip),'k');</span>
2370179 <span class="comment">% figure</span>
2380180 <span class="comment">% plot(s(ip),curlhx(ip));</span>
2390181
2400182 <span class="comment">%disp(['   Horizontal Tune: ', num2str(qx,'%6.3f')]);</span>
2410183 <span class="comment">%disp(['   Vertical Tune:   ', num2str(qy,'%6.3f')]);</span></pre></div>
242<hr><address>Generated on Fri 18-May-2007 17:13:39 by <strong><a href="http://www.artefact.tk/software/matlab/m2html/">m2html</a></strong> &copy; 2003</address>
243</body>
244</html>
Note: See TracBrowser for help on using the repository browser.