source: MML/trunk/mml/at/doc_html/at/getturns.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: 11.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 getturns</title>
6  <meta name="keywords" content="getturns">
7  <meta name="description" content="GETTURNS - Single particle tracking for multiple turns">
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; getturns.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>getturns
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>GETTURNS - Single particle tracking for multiple turns</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 [xAllBPMs, ATindex, LostBeam] = getturns(x0, N, Family, DeviceList) </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">GETTURNS - Single particle tracking for multiple turns
31
32  [x, ATIndex, LostBeam] = getturns(x0, N, Family, DeviceList)
33  [x, ATIndex, LostBeam] = getturns(x0, N, ATIndex)
34
35  INPUTS
36  1. x0 - 6-component column vector
37          Initial particle launch condition at the start of the ring (see ringpass)
38          AT units are meters &amp; radians. {Default: getpvmodel('LaunchVector')}
39  2. N - Number of turns {Default: 1024}
40  3. Location to measure turns: Family / DeviceList  {Default: gethbpmfamily}
41                                  or
42                                ATIndex
43
44     NOTE: Family can be a MiddlyLayer family or AT family.
45           If using at AT family, then DeviceList is an index array (see family2atindex).   
46
47  OUTPUTS
48  1. x - Multiple turn data (BPM Number x N turns x 6)
49     Note: 1. The initial condition is included in the first turn.
50           2. Use squeeze to reduce dimensions.  Matlab automatically squeezes the last
51              dimension, ie, x(:,:,BPMnumber) will be a 2-dim matrix if BPMnumber is a scalar.
52  2. ATIndex - AT index vector
53  3. LostBeam - 1 if particle is lost, else 0
54
55  EXAMPLES
56  1. Get 1024 turns at BPMx(1,2) and BPMx(1,4) and plot the horizontal position FFT for BPMx(1,2)
57     [x, ATIndex, LostBeam] = getturns([.001 0, 0.001, 0, 0, 0]', 1024, 'BPMx', [1 2;1 4]);
58     multiturnfft(x(1,:,1));
59  2. Get 1024 turns at AT-index 1,2,10
60     [x, ATIndex, LostBeam] = getturns([.001 0, 0.001, 0, 0, 0]', 1024, [1 2 10]);
61  3. Get first turn at all AT indices
62     [x, ATIndex, LostBeam] = getturns([.001 0, 0.001, 0, 0, 0]', 1, 'All');
63
64  Also see multiturnfft linepass
65
66  Written by Greg Portmann</pre></div>
67
68<!-- crossreference -->
69<h2><a name="_cross"></a>CROSS-REFERENCE INFORMATION <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
70This function calls:
71<ul style="list-style-image:url(../matlabicon.gif)">
72<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><li><a href="getpvmodel.html" class="code" title="function [AM, tout, DataTime, ErrorFlag] = getpvmodel(varargin)">getpvmodel</a>  GETPVMODEL - Get the model value</li></ul>
73This function is called by:
74<ul style="list-style-image:url(../matlabicon.gif)">
75<li><a href="getpvmodel.html" class="code" title="function [AM, tout, DataTime, ErrorFlag] = getpvmodel(varargin)">getpvmodel</a>       GETPVMODEL - Get the model value</li></ul>
76<!-- crossreference -->
77
78
79<h2><a name="_source"></a>SOURCE CODE <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
80<div class="fragment"><pre>0001 <a name="_sub0" href="#_subfunctions" class="code">function [xAllBPMs, ATindex, LostBeam] = getturns(x0, N, Family, DeviceList)</a>
810002 <span class="comment">%GETTURNS - Single particle tracking for multiple turns</span>
820003 <span class="comment">%</span>
830004 <span class="comment">%  [x, ATIndex, LostBeam] = getturns(x0, N, Family, DeviceList)</span>
840005 <span class="comment">%  [x, ATIndex, LostBeam] = getturns(x0, N, ATIndex)</span>
850006 <span class="comment">%</span>
860007 <span class="comment">%  INPUTS</span>
870008 <span class="comment">%  1. x0 - 6-component column vector</span>
880009 <span class="comment">%          Initial particle launch condition at the start of the ring (see ringpass)</span>
890010 <span class="comment">%          AT units are meters &amp; radians. {Default: getpvmodel('LaunchVector')}</span>
900011 <span class="comment">%  2. N - Number of turns {Default: 1024}</span>
910012 <span class="comment">%  3. Location to measure turns: Family / DeviceList  {Default: gethbpmfamily}</span>
920013 <span class="comment">%                                  or</span>
930014 <span class="comment">%                                ATIndex</span>
940015 <span class="comment">%</span>
950016 <span class="comment">%     NOTE: Family can be a MiddlyLayer family or AT family.</span>
960017 <span class="comment">%           If using at AT family, then DeviceList is an index array (see family2atindex).</span>
970018 <span class="comment">%</span>
980019 <span class="comment">%  OUTPUTS</span>
990020 <span class="comment">%  1. x - Multiple turn data (BPM Number x N turns x 6)</span>
1000021 <span class="comment">%     Note: 1. The initial condition is included in the first turn.</span>
1010022 <span class="comment">%           2. Use squeeze to reduce dimensions.  Matlab automatically squeezes the last</span>
1020023 <span class="comment">%              dimension, ie, x(:,:,BPMnumber) will be a 2-dim matrix if BPMnumber is a scalar.</span>
1030024 <span class="comment">%  2. ATIndex - AT index vector</span>
1040025 <span class="comment">%  3. LostBeam - 1 if particle is lost, else 0</span>
1050026 <span class="comment">%</span>
1060027 <span class="comment">%  EXAMPLES</span>
1070028 <span class="comment">%  1. Get 1024 turns at BPMx(1,2) and BPMx(1,4) and plot the horizontal position FFT for BPMx(1,2)</span>
1080029 <span class="comment">%     [x, ATIndex, LostBeam] = getturns([.001 0, 0.001, 0, 0, 0]', 1024, 'BPMx', [1 2;1 4]);</span>
1090030 <span class="comment">%     multiturnfft(x(1,:,1));</span>
1100031 <span class="comment">%  2. Get 1024 turns at AT-index 1,2,10</span>
1110032 <span class="comment">%     [x, ATIndex, LostBeam] = getturns([.001 0, 0.001, 0, 0, 0]', 1024, [1 2 10]);</span>
1120033 <span class="comment">%  3. Get first turn at all AT indices</span>
1130034 <span class="comment">%     [x, ATIndex, LostBeam] = getturns([.001 0, 0.001, 0, 0, 0]', 1, 'All');</span>
1140035 <span class="comment">%</span>
1150036 <span class="comment">%  Also see multiturnfft linepass</span>
1160037 <span class="comment">%</span>
1170038 <span class="comment">%  Written by Greg Portmann</span>
1180039
1190040
1200041 <span class="keyword">global</span> THERING
1210042 <span class="keyword">if</span> isempty(THERING)
1220043     error(<span class="string">'THERING is not defined.'</span>);
1230044 <span class="keyword">end</span>
1240045
1250046
1260047 <span class="comment">% AT units meters &amp; radians</span>
1270048 <span class="keyword">if</span> nargin &lt; 1
1280049     x0 = [];
1290050 <span class="keyword">end</span>
1300051 <span class="keyword">if</span> isempty(x0)
1310052     x0 = <a href="getpvmodel.html" class="code" title="function [AM, tout, DataTime, ErrorFlag] = getpvmodel(varargin)">getpvmodel</a>(<span class="string">'LaunchVector'</span>);
1320053     <span class="keyword">if</span> isempty(x0)
1330054         <span class="comment">% 1 mm starting offset</span>
1340055         x0 = [0 0 0 0 0 0]';
1350056     <span class="keyword">end</span>
1360057 <span class="keyword">end</span>
1370058
1380059 x0 = x0(:);
1390060 <span class="keyword">if</span> size(x0,1) ~= 6
1400061     error(<span class="string">'x0 must be a 6x1 vector.'</span>);
1410062 <span class="keyword">end</span>
1420063
1430064 <span class="keyword">if</span> nargin &lt; 2
1440065     N = [];
1450066 <span class="keyword">end</span>
1460067 <span class="keyword">if</span> isempty(N)
1470068     N = 1024;
1480069 <span class="keyword">end</span>
1490070
1500071 <span class="keyword">if</span> nargin &lt; 3
1510072     Family = [];
1520073 <span class="keyword">end</span>
1530074 <span class="keyword">if</span> isempty(Family)
1540075     Family = gethbpmfamily;
1550076 <span class="keyword">end</span>
1560077
1570078 <span class="keyword">if</span> nargin &lt; 4
1580079     DeviceList = [];
1590080 <span class="keyword">end</span>
1600081
1610082
1620083 <span class="comment">% Get AT index</span>
1630084 <span class="keyword">if</span> ischar(Family)
1640085     ATindex = <a href="family2atindex.html" class="code" title="function [ATIndexList, ErrorFlag] = family2atindex(Family, varargin);">family2atindex</a>(Family, DeviceList);
1650086     <span class="comment">% Watch for split magnets</span>
1660087     <span class="keyword">if</span> size(ATindex,2) &gt; 1
1670088         ATindex = ATindex(:,1);
1680089     <span class="keyword">end</span>
1690090 <span class="keyword">else</span>
1700091     <span class="comment">% AT index was input directly</span>
1710092     ATindex = Family;
1720093 <span class="keyword">end</span>
1730094 ATindex = ATindex(:)';
1740095 <span class="keyword">if</span> isempty(ATindex)
1750096     error(<span class="string">'AT index empty.'</span>);
1760097 <span class="keyword">end</span>
1770098
1780099 <span class="comment">% Get single turn data</span>
1790100 <span class="keyword">if</span> N == 1
1800101     x = x0;
1810102     LostBeam = 0;
1820103 <span class="keyword">else</span>
1830104     [x, LostBeam] = ringpass(THERING, x0, N-1);  <span class="comment">% 'reuse' seems to cause errors</span>
1840105     x = [x0 x];
1850106     <span class="keyword">if</span> LostBeam
1860107         fprintf(<span class="string">'   Beam was lost\n'</span>);
1870108         xAllBPMs = [];
1880109         <span class="keyword">return</span>
1890110     <span class="keyword">end</span>
1900111 <span class="keyword">end</span>
1910112
1920113
1930114 <span class="comment">% Propagate single turn data around the ring</span>
1940115 <span class="keyword">for</span> iturn = 1:size(x,2)
1950116     <span class="comment">% if iturn == 1</span>
1960117     <span class="comment">% xAllBPMs (BPM Number x N turns x 6)</span>
1970118     [xAllBPMs(:,iturn,:)] = linepass(THERING, x(:,iturn), ATindex)';
1980119     
1990120     <span class="comment">% xAllBPMs (6 x N turns x BPM Number)</span>
2000121     <span class="comment">%[xAllBPMs(:,iturn,:)] = linepass(THERING, x(:,iturn), ATindex);</span>
2010122     <span class="comment">% else</span>
2020123     <span class="comment">% [xAllBPMs(:,iturn,:)] = linepass(THERING, x(:,iturn), ATindex, 'reuse');</span>
2030124     <span class="comment">% end</span>
2040125 <span class="keyword">end</span>
2050126
2060127
2070128
2080129
2090130</pre></div>
210<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>
211</body>
212</html>
Note: See TracBrowser for help on using the repository browser.