source: MML/trunk/mml/doc_html/mml/at/modeltwiss.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: 36.1 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 modeltwiss</title>
6  <meta name="keywords" content="modeltwiss">
7  <meta name="description" content="MODELTWISS - Returns a twiss function of the model">
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">mml</a> &gt; <a href="index.html">at</a> &gt; modeltwiss.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 mml/at&nbsp;<img alt=">" border="0" src="../../right.png"></a></td></tr></table>-->
19
20<h1>modeltwiss
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>MODELTWISS - Returns a twiss function of the model</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 [TwissX, TwissY, Sx, Sy, Tune] = modeltwiss(varargin) </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">MODELTWISS - Returns a twiss function of the model
31  [TwissX, TwissY, Sx, Sy, Tune] = modeltwiss(TwissData {opt.}, TwissString, Family1, DeviceList1, Family2, DeviceList2)
32  [TwissX, TwissY, Sx, Sy, Tune] = modeltwiss(TwissData {opt.}, TwissString, Family1, Family2)
33  [TwissX, TwissY, Sx, Sy, Tune] = modeltwiss(TwissData {opt.}, TwissString, Family1, DeviceList1)
34  [TwissX, TwissY, Sx, Sy, Tune] = modeltwiss(TwissData {opt.}, TwissString)
35
36  INPUTS
37  1. TwissData - Structure with the twiss parameters {Default: get from THERING{1}.TwissData}
38  2. TwissString - 'beta'           for beta function [meters]
39                   'mu' or 'Phase'  for betatron phase advance (NOT 2*PI normalized)
40                   'alpha'          Derivative of the beta function
41                   'ClosedOrbit' or 'x'       ('y'  reverses output  [ y,  x, Sy, Sx, Tune] = modeltwiss('y'))
42                   'ClosedOrbitPrime' or 'Px' ('Py' reverses output  [Py, Px, Sy, Sx, Tune] = modeltwiss('Py')) (momentum, NOT angle)
43                   'Eta' for dispersion
44                   'EtaPrime' for the derivative of dispersion
45  3. Family1 and Family2 are the family names for where to measure the horizontal/vertical twiss parameter.
46     A family name can be a middlelayer family or an AT family (FamName).
47     'All' returns the value at every element in the model plus the end of the ring.
48     {Default or []: 'All'}
49  4. DeviceList1 and DeviceList2 are the device list corresponding to Family1 and Family2.
50     {Default or []: the entire list}
51
52  OUTPUTS
53  1. TwissX and TwissY - Horizontal and vertical twiss parameter
54  2. Sx and Sy are longitudinal locations in the ring [meters]
55  3. Tune - Fractional tune
56
57  NOTES
58  1. This function use twissline which uses the linear model.  See twissline
59     for all the assumption that it uses.
60  2. This function uses the model coordinate system in physics units.
61     Ie., no BPM or CM gain or rolls errors are applied.
62  3. Family1 and DeviceList1 can be any family.  For instance, if Family1='VCM'
63     and DeviceList1=[], then TwissX is the horizontal beta function at the
64     vertical corrector magnets (similarly for Family2 and DeviceList2).
65  4. If no output exists, the function will be plotted to the screen.
66  5. Phase is in radians.
67
68  See also <a href="modelbeta.html" class="code" title="function [BetaX, BetaY, Sx, Sy, Tune] = modelbeta(varargin)">modelbeta</a> <a href="modeltune.html" class="code" title="function [FractionalTune, IntegerTune] = modeltune">modeltune</a> <a href="modeldisp.html" class="code" title="function [Dx, Dy, Sx, Sy] = modeldisp(varargin)">modeldisp</a> <a href="getpvmodel.html" class="code" title="function [AM, tout, DataTime, ErrorFlag] = getpvmodel(varargin)">getpvmodel</a> <a href="setpvmodel.html" class="code" title="function ErrorFlag = setpvmodel(varargin)">setpvmodel</a>
69
70  Written by Greg Portmann</pre></div>
71
72<!-- crossreference -->
73<h2><a name="_cross"></a>CROSS-REFERENCE INFORMATION <a href="#_top"><img alt="^" border="0" src="../../up.png"></a></h2>
74This function calls:
75<ul style="list-style-image:url(../../matlabicon.gif)">
76<li><a href="drawlattice.html" class="code" title="function drawlattice(Offset, Scaling, hAxes)">drawlattice</a>        DRAWLATTICE - Draws the AT lattice to a figure</li><li><a href="family2atindex.html" class="code" title="function [ATIndexList, ErrorFlag] = family2atindex(Family, varargin);">family2atindex</a>      FAMILY2ATINDEX - Returns the AT index for a given family</li></ul>
77This function is called by:
78<ul style="list-style-image:url(../../matlabicon.gif)">
79<li><a href="modelbeta.html" class="code" title="function [BetaX, BetaY, Sx, Sy, Tune] = modelbeta(varargin)">modelbeta</a>     MODELBETA - Returns the beta function of the model</li><li><a href="modelchrosensitivity.html" class="code" title="function [DSx DSz] = modelchrosensitivity(varargin)">modelchrosensitivity</a>        TUNESENSITIVITY - Computes sextupole change for a given dxi</li><li><a href="modelcurlh.html" class="code" title="function [hx, hy] = modelcurlh">modelcurlh</a>        MODELCURLH - Computes and plots the H-curl functions</li><li><a href="modelphase.html" class="code" title="function [PhaseX, PhaseZ, Sx, Sz, Tune] = modelphase(varargin)">modelphase</a>       MODELBETA - Returns the Phase function of the model</li><li><a href="modeltunesensitivity.html" class="code" title="function [DKx DKz]=modeltunesensitivity(varargin)">modeltunesensitivity</a> TUNESENSITIVITY - Computes quadrupole change for a given dnu</li><li><a href="plotmodelorbit.html" class="code" title="function varargout = plotcod">plotmodelorbit</a> PLOTMODELORBIT - Plot closed orbit distortion</li><li><a href="plottwiss.html" class="code" title="function plottwiss(varargin)">plottwiss</a>  PLOTTWISS - Plot the optical functions and tune of the present lattice</li></ul>
80<!-- crossreference -->
81
82
83<h2><a name="_source"></a>SOURCE CODE <a href="#_top"><img alt="^" border="0" src="../../up.png"></a></h2>
84<div class="fragment"><pre>0001 <a name="_sub0" href="#_subfunctions" class="code">function [TwissX, TwissY, Sx, Sy, Tune] = modeltwiss(varargin)</a>
850002 <span class="comment">%MODELTWISS - Returns a twiss function of the model</span>
860003 <span class="comment">%  [TwissX, TwissY, Sx, Sy, Tune] = modeltwiss(TwissData {opt.}, TwissString, Family1, DeviceList1, Family2, DeviceList2)</span>
870004 <span class="comment">%  [TwissX, TwissY, Sx, Sy, Tune] = modeltwiss(TwissData {opt.}, TwissString, Family1, Family2)</span>
880005 <span class="comment">%  [TwissX, TwissY, Sx, Sy, Tune] = modeltwiss(TwissData {opt.}, TwissString, Family1, DeviceList1)</span>
890006 <span class="comment">%  [TwissX, TwissY, Sx, Sy, Tune] = modeltwiss(TwissData {opt.}, TwissString)</span>
900007 <span class="comment">%</span>
910008 <span class="comment">%  INPUTS</span>
920009 <span class="comment">%  1. TwissData - Structure with the twiss parameters {Default: get from THERING{1}.TwissData}</span>
930010 <span class="comment">%  2. TwissString - 'beta'           for beta function [meters]</span>
940011 <span class="comment">%                   'mu' or 'Phase'  for betatron phase advance (NOT 2*PI normalized)</span>
950012 <span class="comment">%                   'alpha'          Derivative of the beta function</span>
960013 <span class="comment">%                   'ClosedOrbit' or 'x'       ('y'  reverses output  [ y,  x, Sy, Sx, Tune] = modeltwiss('y'))</span>
970014 <span class="comment">%                   'ClosedOrbitPrime' or 'Px' ('Py' reverses output  [Py, Px, Sy, Sx, Tune] = modeltwiss('Py')) (momentum, NOT angle)</span>
980015 <span class="comment">%                   'Eta' for dispersion</span>
990016 <span class="comment">%                   'EtaPrime' for the derivative of dispersion</span>
1000017 <span class="comment">%  3. Family1 and Family2 are the family names for where to measure the horizontal/vertical twiss parameter.</span>
1010018 <span class="comment">%     A family name can be a middlelayer family or an AT family (FamName).</span>
1020019 <span class="comment">%     'All' returns the value at every element in the model plus the end of the ring.</span>
1030020 <span class="comment">%     {Default or []: 'All'}</span>
1040021 <span class="comment">%  4. DeviceList1 and DeviceList2 are the device list corresponding to Family1 and Family2.</span>
1050022 <span class="comment">%     {Default or []: the entire list}</span>
1060023 <span class="comment">%</span>
1070024 <span class="comment">%  OUTPUTS</span>
1080025 <span class="comment">%  1. TwissX and TwissY - Horizontal and vertical twiss parameter</span>
1090026 <span class="comment">%  2. Sx and Sy are longitudinal locations in the ring [meters]</span>
1100027 <span class="comment">%  3. Tune - Fractional tune</span>
1110028 <span class="comment">%</span>
1120029 <span class="comment">%  NOTES</span>
1130030 <span class="comment">%  1. This function use twissline which uses the linear model.  See twissline</span>
1140031 <span class="comment">%     for all the assumption that it uses.</span>
1150032 <span class="comment">%  2. This function uses the model coordinate system in physics units.</span>
1160033 <span class="comment">%     Ie., no BPM or CM gain or rolls errors are applied.</span>
1170034 <span class="comment">%  3. Family1 and DeviceList1 can be any family.  For instance, if Family1='VCM'</span>
1180035 <span class="comment">%     and DeviceList1=[], then TwissX is the horizontal beta function at the</span>
1190036 <span class="comment">%     vertical corrector magnets (similarly for Family2 and DeviceList2).</span>
1200037 <span class="comment">%  4. If no output exists, the function will be plotted to the screen.</span>
1210038 <span class="comment">%  5. Phase is in radians.</span>
1220039 <span class="comment">%</span>
1230040 <span class="comment">%  See also modelbeta modeltune modeldisp getpvmodel setpvmodel</span>
1240041 <span class="comment">%</span>
1250042 <span class="comment">%  Written by Greg Portmann</span>
1260043
1270044
1280045 <span class="keyword">global</span> THERING
1290046 <span class="keyword">if</span> isempty(THERING)
1300047     error(<span class="string">'Simulator variable is not setup properly.'</span>);
1310048 <span class="keyword">end</span>
1320049
1330050 <span class="comment">% Default parameters if not overwritten</span>
1340051 TwissString = <span class="string">'beta'</span>;
1350052 Family1 = <span class="string">'ALL'</span>;
1360053 Family2 = <span class="string">'ALL'</span>;
1370054 <span class="comment">%Family1 = 'BPMx';</span>
1380055 <span class="comment">%Family2 = 'BPMy';</span>
1390056 DeviceList1 = [];   
1400057 DeviceList2 = [];   
1410058 DrawLatticeFlag = 0;
1420059
1430060
1440061 <span class="comment">% Look for flags</span>
1450062 <span class="keyword">for</span> i = length(varargin):-1:1
1460063     <span class="keyword">if</span> ischar(varargin{i})
1470064         <span class="keyword">if</span> strcmpi(varargin{i}, <span class="string">'DrawLattice'</span>)
1480065             DrawLatticeFlag = 1;
1490066             varargin(i) = [];
1500067         <span class="keyword">end</span>
1510068     <span class="keyword">end</span>
1520069 <span class="keyword">end</span>
1530070
1540071
1550072 <span class="comment">% Look for TwissString</span>
1560073 <span class="keyword">if</span> length(varargin) &gt;= 1
1570074     <span class="keyword">if</span> ischar(varargin{1})
1580075         TwissString = varargin{1};
1590076         varargin(1) = [];
1600077     <span class="keyword">end</span>
1610078 <span class="keyword">end</span>
1620079
1630080 <span class="comment">% Look for BPMx family info</span>
1640081 <span class="keyword">if</span> length(varargin) &gt;= 1
1650082     <span class="keyword">if</span> ischar(varargin{1})
1660083         Family1 = varargin{1};
1670084         varargin(1) = [];
1680085         <span class="keyword">if</span> length(varargin) &gt;= 1
1690086             <span class="keyword">if</span> isnumeric(varargin{1})
1700087                 DeviceList1 = varargin{1};
1710088                 varargin(1) = [];
1720089             <span class="keyword">end</span>
1730090         <span class="keyword">end</span>
1740091     <span class="keyword">else</span>
1750092         <span class="keyword">if</span> isnumeric(varargin{1})
1760093             DeviceList1 = varargin{1};
1770094             varargin(1) = [];
1780095         <span class="keyword">end</span>
1790096     <span class="keyword">end</span>
1800097 <span class="keyword">end</span>
1810098
1820099 <span class="comment">% Look for BPMy family info</span>
1830100 <span class="keyword">if</span> length(varargin) &gt;= 1
1840101     <span class="keyword">if</span> ischar(varargin{1})
1850102         Family2 = varargin{1};
1860103         varargin(1) = [];
1870104         <span class="keyword">if</span> length(varargin) &gt;= 1
1880105             <span class="keyword">if</span> isnumeric(varargin{1})
1890106                 DeviceList2 = varargin{1};
1900107                 varargin(1) = [];
1910108             <span class="keyword">end</span>
1920109         <span class="keyword">end</span>
1930110     <span class="keyword">else</span>
1940111         <span class="keyword">if</span> isnumeric(varargin{1})
1950112             DeviceList2 = varargin{1};
1960113             varargin(1) = [];
1970114         <span class="keyword">end</span>
1980115     <span class="keyword">end</span>
1990116 <span class="keyword">else</span>
2000117     Family2 = Family1;
2010118     DeviceList2 = DeviceList1;
2020119 <span class="keyword">end</span>
2030120
2040121
2050122 <span class="comment">% Horizontal plane</span>
2060123 <span class="keyword">if</span> strcmpi(Family1,<span class="string">'All'</span>)
2070124     Index1 = 1:length(THERING)+1;
2080125 <span class="keyword">elseif</span> isfamily(Family1)
2090126     Index1 = <a href="family2atindex.html" class="code" title="function [ATIndexList, ErrorFlag] = family2atindex(Family, varargin);">family2atindex</a>(Family1, DeviceList1);
2100127 <span class="keyword">else</span>
2110128     Index1 = findcells(THERING, <span class="string">'FamName'</span>, Family1);
2120129 <span class="keyword">end</span>
2130130 <span class="keyword">if</span> isempty(Index1)
2140131     error(<span class="string">'Family1 could not be found in the AO or AT deck'</span>);
2150132 <span class="keyword">else</span>
2160133     Index1 = Index1(:)';    <span class="comment">% Row vector</span>
2170134 <span class="keyword">end</span>
2180135
2190136 <span class="comment">% Vertical plane</span>
2200137 <span class="keyword">if</span> strcmpi(Family2,<span class="string">'All'</span>)
2210138     Index2 = 1:length(THERING)+1;
2220139 <span class="keyword">elseif</span> isfamily(Family2)
2230140     Index2 = <a href="family2atindex.html" class="code" title="function [ATIndexList, ErrorFlag] = family2atindex(Family, varargin);">family2atindex</a>(Family2, DeviceList2);
2240141 <span class="keyword">else</span>
2250142     Index2 = findcells(THERING, <span class="string">'FamName'</span>, Family2);
2260143 <span class="keyword">end</span>
2270144 <span class="keyword">if</span> isempty(Index2)
2280145     error(<span class="string">'Family2 could not be found in the AO or AT deck'</span>);
2290146 <span class="keyword">else</span>
2300147     Index2 = Index2(:)';    <span class="comment">% Row vector</span>
2310148 <span class="keyword">end</span>
2320149
2330150 MachineType = getfamilydata(<span class="string">'MachineType'</span>);
2340151 <span class="keyword">if</span> any(strcmpi(MachineType, {<span class="string">'Transport'</span>,<span class="string">'Transportline'</span>,<span class="string">'Linac'</span>}))
2350152     <span class="comment">% Transport line</span>
2360153
2370154     <span class="comment">% Look for TWISSDATAIN</span>
2380155     TWISSDATAIN = [];
2390156     <span class="keyword">if</span> length(varargin) &gt;= 1
2400157         <span class="keyword">if</span> isstruct(varargin{1})
2410158             TWISSDATAIN = varargin{1};
2420159             varargin(1) = [];
2430160         <span class="keyword">end</span>
2440161     <span class="keyword">end</span>
2450162     <span class="keyword">if</span> isempty(TWISSDATAIN)
2460163         <span class="keyword">if</span> isfield(THERING{1}, <span class="string">'TwissData'</span>)
2470164             TWISSDATAIN = THERING{1}.TwissData;
2480165         <span class="keyword">else</span>
2490166             TWISSDATAIN = getfamilydata(<span class="string">'TwissData'</span>);
2500167             <span class="keyword">if</span> isempty(TWISSDATAIN)
2510168                 error(<span class="string">'TWISSDATAIN must be an input, located in THERING{1}.TwissData, or accessible to getfamilydata.'</span>);
2520169             <span class="keyword">end</span>
2530170         <span class="keyword">end</span>
2540171     <span class="keyword">end</span>
2550172
2560173     <span class="keyword">if</span> strcmpi(TwissString, <span class="string">'Eta'</span>) || strcmpi(TwissString, <span class="string">'Dispersion'</span>)  || strcmpi(TwissString, <span class="string">'Disp'</span>)
2570174         TD = twissline(THERING, 0, TWISSDATAIN, 1:(length(THERING)+1), <span class="string">'Chrom'</span>);
2580175     <span class="keyword">elseif</span> strcmpi(TwissString, <span class="string">'etaprime'</span>)
2590176         TD = twissline(THERING, 0, TWISSDATAIN, 1:(length(THERING)+1), <span class="string">'Chrom'</span>);
2600177     <span class="keyword">else</span>
2610178         TD = twissline(THERING, 0, TWISSDATAIN, 1:(length(THERING)+1));
2620179     <span class="keyword">end</span>
2630180     
2640181     <span class="comment">% Tune</span>
2650182     Tune = TD(end).mu/2/pi;
2660183     Tune = Tune(:);
2670184
2680185 <span class="keyword">else</span>
2690186     <span class="comment">% Storage ring</span>
2700187     <span class="keyword">if</span> strcmpi(TwissString, <span class="string">'Eta'</span>) || strcmpi(TwissString, <span class="string">'Dispersion'</span>)
2710188         <span class="comment">% if nargout == 0</span>
2720189         <span class="comment">%     % To get the default plot</span>
2730190         <span class="comment">%     modeldisp(Family1, DeviceList1, Family2, DeviceList2, 'Physics');</span>
2740191         <span class="comment">% else</span>
2750192         <span class="comment">%     [TwissX, TwissY, Sx, Sy] = modeldisp(Family1, DeviceList1, Family2, DeviceList2, 'Physics');</span>
2760193         <span class="comment">% end</span>
2770194         <span class="comment">% if nargout &gt;= 5</span>
2780195         <span class="comment">%     Tune = modeltune;</span>
2790196         <span class="comment">% end</span>
2800197         <span class="comment">% return;</span>
2810198         [TD, Tune] = twissring(THERING, 0, 1:(length(THERING)+1), <span class="string">'Chrom'</span>);
2820199     <span class="keyword">elseif</span> strcmpi(TwissString, <span class="string">'etaprime'</span>)
2830200         [TD, Tune] = twissring(THERING, 0, 1:(length(THERING)+1), <span class="string">'Chrom'</span>);
2840201     <span class="keyword">else</span>
2850202         [TD, Tune] = twissring(THERING, 0, 1:(length(THERING)+1));
2860203     <span class="keyword">end</span>
2870204     Tune = Tune(:);
2880205 <span class="keyword">end</span>
2890206
2900207
2910208 <span class="keyword">if</span> strcmpi(TwissString, <span class="string">'Phase'</span>)
2920209     TwissString = <span class="string">'mu'</span>;
2930210 <span class="keyword">end</span>
2940211
2950212
2960213 <span class="keyword">if</span> strcmpi(TwissString, <span class="string">'beta'</span>)
2970214     Twiss = cat(1,TD.beta);
2980215     TwissXAll = Twiss(:,1);
2990216     TwissYAll = Twiss(:,2);
3000217     TwissX = Twiss(Index1,1);
3010218     TwissY = Twiss(Index2,2);
3020219
3030220     <span class="comment">% Average of beginning and end of magnet</span>
3040221     <span class="comment">%TwissXAll = [(Twiss(1:end-1,1)+Twiss(2:end,1))/2; Twiss(end,1)];</span>
3050222     <span class="comment">%TwissYAll = [(Twiss(1:end-1,2)+Twiss(2:end,2))/2; Twiss(end,2)];</span>
3060223     <span class="comment">%TwissX = (Twiss(Index1,1)+Twiss(Index1+1,1))/2;</span>
3070224     <span class="comment">%TwissY = (Twiss(Index2,2)+Twiss(Index2+1,2))/2;</span>
3080225
3090226     YLabel1 = sprintf(<span class="string">'\\beta_x [meters]'</span>);
3100227     YLabel2 = sprintf(<span class="string">'\\beta_y [meters]'</span>);
3110228     Title1  = sprintf(<span class="string">'\\beta-function (Tune = %.3f / %.3f)'</span>, Tune);
3120229 <span class="keyword">elseif</span> strcmpi(TwissString, <span class="string">'mu'</span>)
3130230     Twiss = cat(1,TD.mu);
3140231     TwissXAll = Twiss(:,1);
3150232     TwissYAll = Twiss(:,2);
3160233     TwissX = Twiss(Index1,1);
3170234     TwissY = Twiss(Index2,2);
3180235
3190236     <span class="comment">%TwissXAll = [(Twiss(1:end-1,1)+Twiss(2:end,1))/2; Twiss(end,1)];</span>
3200237     <span class="comment">%TwissYAll = [(Twiss(1:end-1,2)+Twiss(2:end,2))/2; Twiss(end,2)];</span>
3210238     <span class="comment">%TwissX = (Twiss(Index1,1)+Twiss(Index1+1,1))/2;</span>
3220239     <span class="comment">%TwissY = (Twiss(Index2,2)+Twiss(Index2+1,2))/2;</span>
3230240
3240241     YLabel1 = sprintf(<span class="string">'\\%s_x [radians]'</span>, <span class="string">'phi'</span>);
3250242     YLabel2 = sprintf(<span class="string">'\\%s_y [radians]'</span>, <span class="string">'phi'</span>);
3260243     Title1  = sprintf(<span class="string">'Phase Advance (Tune = %.3f / %.3f)'</span>, Tune);
3270244 <span class="keyword">elseif</span> strcmpi(TwissString, <span class="string">'dispersion'</span>) || strcmpi(TwissString, <span class="string">'disp'</span>) || strcmpi(TwissString, <span class="string">'eta'</span>)
3280245     <span class="comment">%error('Use modeldisp');</span>
3290246     Twiss = cat(2,TD.Dispersion)';
3300247     TwissXAll = Twiss(:,1);
3310248     TwissYAll = Twiss(:,3);
3320249     TwissX = Twiss(Index1,1);
3330250     TwissY = Twiss(Index2,3);
3340251     YLabel1 = sprintf(<span class="string">'\\eta_x [m/(dp/p)]'</span>);
3350252     YLabel2 = sprintf(<span class="string">'\\eta_y [m/(dp/p)]'</span>);
3360253     Title1  = sprintf(<span class="string">'Dispersion'</span>);
3370254 <span class="keyword">elseif</span> strcmpi(TwissString, <span class="string">'etaprime'</span>)
3380255     Twiss = cat(2,TD.Dispersion)';
3390256     TwissXAll = Twiss(:,2);
3400257     TwissYAll = Twiss(:,4);
3410258     TwissX = Twiss(Index1,2);
3420259     TwissY = Twiss(Index2,4);
3430260     YLabel1 = <span class="string">'\partial\eta_x / \partial \its'</span>;
3440261     YLabel2 = <span class="string">'\partial\eta_y / \partial \its'</span>;
3450262     Title1  = sprintf(<span class="string">'Derivative of the Dispersion'</span>);
3460263 <span class="keyword">elseif</span> strcmpi(TwissString, <span class="string">'ClosedOrbit'</span>) ||  strcmpi(TwissString, <span class="string">'x'</span>)
3470264     iCavity = findcells(THERING,<span class="string">'Frequency'</span>);
3480265             
3490266     <span class="keyword">if</span> isempty(iCavity)  <span class="comment">%no cavity in AT model</span>
3500267         Twiss = cat(2,TD.ClosedOrbit)';
3510268         <span class="comment">%Twiss = findsyncorbit(THERING, 0, ATIndexList);</span>
3520269     <span class="keyword">else</span>
3530270         <span class="comment">% Cavity in AT model</span>
3540271         PassMethod = THERING{iCavity(1)}.PassMethod;
3550272         <span class="keyword">for</span> kk = 1:length(iCavity)
3560273             THERING{iCavity(kk)}.PassMethod = <span class="string">'IdentityPass'</span>;    <span class="comment">% Off</span>
3570274         <span class="keyword">end</span>               
3580275         
3590276         C = 2.99792458e8;
3600277         CavityFrequency  = THERING{iCavity(1)}.Frequency;
3610278         CavityHarmNumber = THERING{iCavity(1)}.HarmNumber;
3620279         L = findspos(THERING,length(THERING)+1);
3630280         f0 = C * CavityHarmNumber / L;
3640281         DeltaRF = CavityFrequency - f0;   <span class="comment">% Hz</span>
3650282         Twiss = findsyncorbit(THERING, -C*DeltaRF*CavityHarmNumber/CavityFrequency^2, 1:length(THERING)+1);
3660283                 
3670284         <span class="comment">% Reset PassMethod</span>
3680285         <span class="keyword">for</span> kk = 1:length(iCavity)
3690286             <span class="comment">%THERING{iCavity(kk)}.PassMethod = 'ThinCavityPass';  % On</span>
3700287             THERING{iCavity(kk)}.PassMethod = PassMethod;
3710288         <span class="keyword">end</span>
3720289
3730290         Twiss = Twiss';
3740291     <span class="keyword">end</span>
3750292     TwissXAll = Twiss(:,1);
3760293     TwissYAll = Twiss(:,3);
3770294     TwissX = Twiss(Index1, 1);
3780295     TwissY = Twiss(Index2, 3);
3790296     YLabel1 = sprintf(<span class="string">'x [meter]'</span>);
3800297     YLabel2 = sprintf(<span class="string">'y [meter]'</span>);
3810298     Title1  = sprintf(<span class="string">'Closed Orbit'</span>);
3820299 <span class="keyword">elseif</span> strcmpi(TwissString, <span class="string">'y'</span>)
3830300     iCavity = findcells(THERING,<span class="string">'Frequency'</span>);
3840301     <span class="keyword">if</span> isempty(iCavity)  <span class="comment">%no cavity in AT model</span>
3850302         Twiss = cat(2,TD.ClosedOrbit)';
3860303         <span class="comment">%Twiss = findsyncorbit(THERING, 0, ATIndexList);</span>
3870304     <span class="keyword">else</span>
3880305         <span class="comment">% Cavity in AT model</span>
3890306         PassMethod = THERING{iCavity}.PassMethod;
3900307         THERING{iCavity}.PassMethod = <span class="string">'IdentityPass'</span>;    <span class="comment">% Off</span>
3910308         
3920309         C = 2.99792458e8;
3930310         CavityFrequency  = THERING{iCavity}.Frequency;
3940311         CavityHarmNumber = THERING{iCavity}.HarmNumber;
3950312         L = findspos(THERING,length(THERING)+1);
3960313         f0 = C * CavityHarmNumber / L;
3970314         DeltaRF = CavityFrequency - f0;   <span class="comment">% Hz</span>
3980315         Twiss = findsyncorbit(THERING, -C*DeltaRF*CavityHarmNumber/CavityFrequency^2, 1:length(THERING)+1);
3990316         
4000317         <span class="comment">% Reset PassMethod</span>
4010318         <span class="comment">%THERING{iCavity}.PassMethod = 'ThinCavityPass';  % On</span>
4020319         THERING{iCavity}.PassMethod = PassMethod;
4030320
4040321         Twiss = Twiss';
4050322     <span class="keyword">end</span> 
4060323     TwissXAll = Twiss(:,3);
4070324     TwissYAll = Twiss(:,1);
4080325     TwissX = Twiss(Index1, 3);
4090326     TwissY = Twiss(Index2, 1);
4100327     YLabel1 = sprintf(<span class="string">'y [meter]'</span>);
4110328     YLabel2 = sprintf(<span class="string">'x [meter]'</span>);
4120329     Title1  = sprintf(<span class="string">'Closed Orbit'</span>);
4130330 <span class="keyword">elseif</span> strcmpi(TwissString, <span class="string">'ClosedOrbitPrime'</span>) || strcmpi(TwissString, <span class="string">'Px'</span>)
4140331     Twiss = cat(2,TD.ClosedOrbit)';
4150332     TwissXAll = Twiss(:,2);
4160333     TwissYAll = Twiss(:,4);
4170334     TwissX = Twiss(Index1, 2);
4180335     TwissY = Twiss(Index2, 4);
4190336     YLabel1 = <span class="string">'P_x'</span>;
4200337     YLabel2 = <span class="string">'P_y'</span>;
4210338     Title1  = <span class="string">'Derivative of the Closed Orbit'</span>;
4220339 <span class="keyword">elseif</span> strcmpi(TwissString, <span class="string">'Py'</span>)
4230340     Twiss = cat(2,TD.ClosedOrbit)';
4240341     TwissXAll = Twiss(:,4);
4250342     TwissYAll = Twiss(:,2);
4260343     TwissX = Twiss(Index1, 4);
4270344     TwissY = Twiss(Index2, 2);
4280345     YLabel1 = <span class="string">'P_y'</span>;
4290346     YLabel2 = <span class="string">'P_x'</span>;
4300347     Title1  = <span class="string">'Derivative of the Closed Orbit'</span>;
4310348 <span class="keyword">else</span>
4320349     Twiss = cat(1,TD.(TwissString));
4330350     TwissXAll = Twiss(:,1);
4340351     TwissYAll = Twiss(:,2);
4350352     TwissX = Twiss(Index1, 1);
4360353     TwissY = Twiss(Index2, 2);
4370354     YLabel1 = sprintf(<span class="string">'\\%s_x'</span>, TwissString);
4380355     YLabel2 = sprintf(<span class="string">'\\%s_y'</span>, TwissString);
4390356     Title1  = sprintf(<span class="string">'\\%s-functions'</span>, TwissString);
4400357 <span class="keyword">end</span>
4410358
4420359
4430360 <span class="comment">% Longitudinal position</span>
4440361 SAll = cat(1,TD.SPos);
4450362 Sx = SAll(Index1);
4460363 Sy = SAll(Index2);
4470364
4480365 Sx = Sx(:);
4490366 Sy = Sy(:);
4500367 SAll = SAll(:);
4510368
4520369 <span class="comment">% Twiss = Twiss;</span>
4530370 <span class="comment">% TwissX = TwissX;</span>
4540371 <span class="comment">% TwissY = TwissY;</span>
4550372 <span class="comment">% TwissXAll = TwissXAll;</span>
4560373 <span class="comment">% TwissYAll = TwissYAll;</span>
4570374
4580375
4590376 <span class="comment">% Output</span>
4600377 <span class="keyword">if</span> nargout == 0
4610378     <span class="comment">% Plot</span>
4620379     <span class="keyword">if</span> strcmpi(TwissString, <span class="string">'mu'</span>)
4630380         <span class="comment">% Keep phase plot between -pi and pi</span>
4640381         xall = [];
4650382         sxall= [];
4660383         <span class="keyword">for</span> i = 1:length(TwissXAll)
4670384             <span class="keyword">if</span> TwissXAll(i) &gt; 2*pi
4680385                 TwissXAll(i:end) = TwissXAll(i:end) - 2*pi;
4690386                 xall = [xall; 2*pi; 0];   
4700387                 sxall = [sxall; mean(SAll(i-1:i)); mean(SAll(i-1:i))];
4710388                 xall = [xall; TwissXAll(i)];
4720389                 sxall = [sxall; SAll(i)];
4730390             <span class="keyword">else</span>
4740391                 xall = [xall; TwissXAll(i)];
4750392                 sxall = [sxall; SAll(i)];
4760393             <span class="keyword">end</span>
4770394         <span class="keyword">end</span>
4780395         TwissX = rem(TwissX,2*pi);
4790396         
4800397         yall = [];
4810398         syall= [];
4820399         <span class="keyword">for</span> i = 1:length(TwissYAll)
4830400             <span class="keyword">if</span> TwissYAll(i) &gt; 2*pi
4840401                 TwissYAll(i:end) = TwissYAll(i:end) - 2*pi;
4850402                 yall = [yall; 2*pi; 0];   
4860403                 syall = [syall; mean(SAll(i-1:i)); mean(SAll(i-1:i))];
4870404                 yall = [yall; TwissYAll(i)];
4880405                 syall = [syall; SAll(i)];
4890406             <span class="keyword">else</span>
4900407                 yall = [yall; TwissYAll(i)];
4910408                 syall = [syall; SAll(i)];
4920409             <span class="keyword">end</span>
4930410         <span class="keyword">end</span>
4940411         TwissY = rem(TwissY,2*pi);
4950412         
4960413         clf reset
4970414         h1 = subplot(5,1,[1 2]);
4980415         <span class="comment">% plot Twiss paramaters</span>
4990416         plot(sxall, xall, <span class="string">'-b'</span>);
5000417         <span class="keyword">if</span> strcmpi(Family1,<span class="string">'All'</span>)
5010418             xlabel(<span class="string">'Position [meters]'</span>);
5020419         <span class="keyword">else</span>
5030420             hold on;
5040421             plot(Sx, TwissX, <span class="string">'.b'</span>);
5050422             hold off;
5060423             xlabel(sprintf(<span class="string">'%s Position [meters]'</span>, Family1));
5070424         <span class="keyword">end</span>
5080425         ylabel(YLabel1);
5090426         title(Title1, <span class="string">'Fontsize'</span>, 12);
5100427         yaxis([0 2*pi]);
5110428         xaxis([SAll(1) SAll(end)]);
5120429         
5130430         <span class="comment">% plot lattice</span>
5140431         h2 = subplot(5,1,3);
5150432         <a href="drawlattice.html" class="code" title="function drawlattice(Offset, Scaling, hAxes)">drawlattice</a>;
5160433         
5170434         h3 = subplot(5,1,[4 5]);
5180435         <span class="comment">% plot Twiss paramaters</span>
5190436         plot(syall, yall, <span class="string">'-b'</span>);
5200437         <span class="keyword">if</span> strcmpi(Family2,<span class="string">'All'</span>)
5210438             xlabel(<span class="string">'Position [meters]'</span>);
5220439         <span class="keyword">else</span>
5230440             hold on;
5240441             plot(Sy, TwissY, <span class="string">'.b'</span>);
5250442             hold off;
5260443             xlabel(sprintf(<span class="string">'%s Position [meters]'</span>, Family2));
5270444         <span class="keyword">end</span>
5280445         ylabel(YLabel2);
5290446         yaxis([0 2*pi]);
5300447         xaxis([SAll(1) SAll(end)]);
5310448         
5320449         linkaxes([h1 h2 h3],<span class="string">'x'</span>)
5330450         set([h1 h2 h3],<span class="string">'XGrid'</span>,<span class="string">'On'</span>,<span class="string">'YGrid'</span>,<span class="string">'On'</span>);
5340451     <span class="keyword">else</span>
5350452         clf reset
5360453         h1 = subplot(5,1,[1 2]);
5370454         <span class="comment">% plot Twiss paramaters</span>
5380455         plot(SAll, TwissXAll, <span class="string">'-b'</span>);
5390456         <span class="keyword">if</span> strcmpi(Family1,<span class="string">'All'</span>)
5400457             xlabel(<span class="string">'Position [meters]'</span>);
5410458         <span class="keyword">else</span>
5420459             hold on;
5430460             plot(Sx, TwissX, <span class="string">'.b'</span>);
5440461             hold off;
5450462             xlabel(sprintf(<span class="string">'%s Position [meters]'</span>, Family1));
5460463         <span class="keyword">end</span>
5470464         ylabel(YLabel1);
5480465         title(Title1, <span class="string">'Fontsize'</span>, 12);
5490466         xaxis([SAll(1) SAll(end)]);
5500467         
5510468         <span class="comment">% plot lattice</span>
5520469         h2 = subplot(5,1,3);
5530470         <a href="drawlattice.html" class="code" title="function drawlattice(Offset, Scaling, hAxes)">drawlattice</a>;
5540471         
5550472         h3 = subplot(5,1,[4 5]);
5560473         <span class="comment">% plot Twiss parmaters</span>
5570474         plot(SAll, TwissYAll, <span class="string">'-b'</span>);
5580475         <span class="keyword">if</span> strcmpi(Family2,<span class="string">'All'</span>)
5590476             xlabel(<span class="string">'Position [meters]'</span>);
5600477         <span class="keyword">else</span>
5610478             hold on;
5620479             plot(Sy, TwissY, <span class="string">'.b'</span>);
5630480             hold off;
5640481             xlabel(sprintf(<span class="string">'%s Position [meters]'</span>, Family2));
5650482         <span class="keyword">end</span>
5660483         ylabel(YLabel2);
5670484         xaxis([SAll(1) SAll(end)]);
5680485         
5690486         linkaxes([h1 h2 h3],<span class="string">'x'</span>)
5700487         set([h1 h2 h3],<span class="string">'XGrid'</span>,<span class="string">'On'</span>,<span class="string">'YGrid'</span>,<span class="string">'On'</span>);
5710488
5720489         grid on;
5730490     <span class="keyword">end</span>
5740491
5750492     <span class="keyword">if</span> DrawLatticeFlag
5760493         subplot(2,1,1);
5770494         hold on
5780495         a = axis;
5790496         <a href="drawlattice.html" class="code" title="function drawlattice(Offset, Scaling, hAxes)">drawlattice</a>(a(4)-.08*(a(4)-a(3)),.05*(a(4)-a(3)));
5800497         <span class="comment">%drawlattice(a(4)-.5*(a(4)-a(3)),.05*(a(4)-a(3)));</span>
5810498         hold off;
5820499         <span class="comment">%subplot(2,1,2);</span>
5830500         <span class="comment">%hold on</span>
5840501         <span class="comment">%a = axis;</span>
5850502         <span class="comment">%drawlattice(a(4)-.08*(a(4)-a(3)),.05*(a(4)-a(3)));</span>
5860503         <span class="comment">%hold off;</span>
5870504
5880505         <span class="comment">% subplot(2,1,1);</span>
5890506         <span class="comment">% xlabel('');</span>
5900507         <span class="comment">%</span>
5910508         <span class="comment">% h = subplot(17,1,9);</span>
5920509         <span class="comment">% drawlattice(0, 1, h);</span>
5930510         <span class="comment">% %set(h,'Visible','Off');</span>
5940511         <span class="comment">% set(h,'Color','None');</span>
5950512         <span class="comment">% set(h,'XMinorTick','Off');</span>
5960513         <span class="comment">% set(h,'XMinorGrid','Off');</span>
5970514         <span class="comment">% set(h,'YMinorTick','Off');</span>
5980515         <span class="comment">% set(h,'YMinorGrid','Off');</span>
5990516         <span class="comment">% set(h,'XTickLabel',[]);</span>
6000517         <span class="comment">% set(h,'YTickLabel',[]);</span>
6010518         <span class="comment">% set(h,'XLim', [0 Cir]);</span>
6020519         <span class="comment">% set(h,'YLim', [-1.5 1.5]);</span>
6030520     <span class="keyword">end</span>
6040521 <span class="keyword">end</span></pre></div>
605<hr><address>Generated on Mon 21-May-2007 15:29:18 by <strong><a href="http://www.artefact.tk/software/matlab/m2html/">m2html</a></strong> &copy; 2003</address>
606</body>
607</html>
Note: See TracBrowser for help on using the repository browser.