source: MML/trunk/applications/doc_html/applications/loco/mkparamgroup.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: 15.3 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 mkparamgroup</title>
6  <meta name="keywords" content="mkparamgroup">
7  <meta name="description" content="MKPARAMGROUP - Simplifies creation of AT parameter groups">
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="#">applications</a> &gt; <a href="index.html">loco</a> &gt; mkparamgroup.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 applications/loco&nbsp;<img alt=">" border="0" src="../../right.png"></a></td></tr></table>-->
19
20<h1>mkparamgroup
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>MKPARAMGROUP - Simplifies creation of AT parameter groups</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 P = mkparamgroup(LATTICE,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">MKPARAMGROUP - Simplifies creation of AT parameter groups
31  It group one or more elements in the
32  same family and simultaneously vary
33
34  MKPARAMGROUP(LATTICE,ELEMINDEX,PARAMSTR)
35  MKPARAMGROUP(LATTICE,FAMNAMESTR,PARAMSTR)
36  MKPARAMGROUP(LATTICE,FAMNAMESTR,KIDNUM,PARAMSTR)
37
38  LATTICE
39  FAMNAMESTR
40
41  PARAMSTR: 'K1', 'K' - Quadrupole (PolynomB(2) and K)
42            'cK'      - Fit quadrupoles with a gain between them (PolynomB(2) and K)
43            'K2'      - Sextupole  (PolynomB(3))
44            'K3'      - Octupole   (PolynomB(4))
45            'KS1', 's', 's1' - Skew quadrupole
46            'PB1' - PolynomB(2)
47            'tilt' - Magnet tilt in radians
48  (PARAMSTR is not case sensitive)
49
50  Revision History:
51  2002-06-26 Christoph Steier
52      Added skew quadrupole gradient (KS1) as one possible parameter
53
54  2004-02-09 WJC
55     'TILT','K1','K2','K3' changed index 'i' to 'k'</pre></div>
56
57<!-- crossreference -->
58<h2><a name="_cross"></a>CROSS-REFERENCE INFORMATION <a href="#_top"><img alt="^" border="0" src="../../up.png"></a></h2>
59This function calls:
60<ul style="list-style-image:url(../../matlabicon.gif)">
61</ul>
62This function is called by:
63<ul style="list-style-image:url(../../matlabicon.gif)">
64</ul>
65<!-- crossreference -->
66
67
68<h2><a name="_source"></a>SOURCE CODE <a href="#_top"><img alt="^" border="0" src="../../up.png"></a></h2>
69<div class="fragment"><pre>0001 <a name="_sub0" href="#_subfunctions" class="code">function P = mkparamgroup(LATTICE,varargin)</a>
700002 <span class="comment">%MKPARAMGROUP - Simplifies creation of AT parameter groups</span>
710003 <span class="comment">%  It group one or more elements in the</span>
720004 <span class="comment">%  same family and simultaneously vary</span>
730005 <span class="comment">%</span>
740006 <span class="comment">%  MKPARAMGROUP(LATTICE,ELEMINDEX,PARAMSTR)</span>
750007 <span class="comment">%  MKPARAMGROUP(LATTICE,FAMNAMESTR,PARAMSTR)</span>
760008 <span class="comment">%  MKPARAMGROUP(LATTICE,FAMNAMESTR,KIDNUM,PARAMSTR)</span>
770009 <span class="comment">%</span>
780010 <span class="comment">%  LATTICE</span>
790011 <span class="comment">%  FAMNAMESTR</span>
800012 <span class="comment">%</span>
810013 <span class="comment">%  PARAMSTR: 'K1', 'K' - Quadrupole (PolynomB(2) and K)</span>
820014 <span class="comment">%            'cK'      - Fit quadrupoles with a gain between them (PolynomB(2) and K)</span>
830015 <span class="comment">%            'K2'      - Sextupole  (PolynomB(3))</span>
840016 <span class="comment">%            'K3'      - Octupole   (PolynomB(4))</span>
850017 <span class="comment">%            'KS1', 's', 's1' - Skew quadrupole</span>
860018 <span class="comment">%            'PB1' - PolynomB(2)</span>
870019 <span class="comment">%            'tilt' - Magnet tilt in radians</span>
880020 <span class="comment">%  (PARAMSTR is not case sensitive)</span>
890021 <span class="comment">%</span>
900022 <span class="comment">%  Revision History:</span>
910023 <span class="comment">%  2002-06-26 Christoph Steier</span>
920024 <span class="comment">%      Added skew quadrupole gradient (KS1) as one possible parameter</span>
930025 <span class="comment">%</span>
940026 <span class="comment">%  2004-02-09 WJC</span>
950027 <span class="comment">%     'TILT','K1','K2','K3' changed index 'i' to 'k'</span>
960028
970029
980030 <span class="keyword">if</span> isnumeric(varargin{1})
990031     <span class="keyword">if</span> nargin==3 &amp; ~ischar(varargin{2})
1000032         error(<span class="string">'The third argument must be a string'</span>)
1010033     <span class="keyword">else</span>
1020034         INDEX = varargin{1};
1030035         KIDNUM = 1:length(INDEX);
1040036         PARAMSTR = varargin{2};
1050037         <span class="keyword">if</span> nargin==4
1060038             ScaleFactor = varargin{3};
1070039         <span class="keyword">end</span>
1080040     <span class="keyword">end</span>
1090041 <span class="keyword">else</span>
1100042     FAMNAMESTR = varargin{1};
1110043     INDEX = findcells(LATTICE,<span class="string">'FamName'</span>,FAMNAMESTR);
1120044     <span class="keyword">if</span>(isempty(INDEX))
1130045         error([<span class="string">'No elements that belong to the family '''</span>,FAMNAMESTR,<span class="keyword">...</span>
1140046             <span class="string">''' found in the lattice '</span>,inputname(1)]);
1150047     <span class="keyword">end</span>
1160048     <span class="keyword">if</span> isnumeric(varargin{2})
1170049         KIDNUM = varargin{2};
1180050         PARAMSTR = varargin{3};
1190051     <span class="keyword">else</span>
1200052         KIDNUM = 1:length(INDEX);
1210053         PARAMSTR = varargin{2};
1220054     <span class="keyword">end</span>
1230055 <span class="keyword">end</span>
1240056
1250057 <span class="keyword">switch</span> lower(PARAMSTR)
1260058     <span class="keyword">case</span> {<span class="string">'k1'</span>,<span class="string">'k'</span>}
1270059         <span class="keyword">if</span> ~isfield(LATTICE{INDEX(KIDNUM(1))},<span class="string">'K'</span>)
1280060             error(<span class="string">'Element '</span>,int2str(KIDNUM(1)),<span class="string">' does not have field ''K'''</span>);
1290061         <span class="keyword">end</span>
1300062         P1 = struct(<span class="string">'ElemIndex'</span>,num2cell(INDEX(KIDNUM)),<span class="string">'FieldName'</span>,<span class="string">'K'</span>,<span class="string">'Function'</span>,inline(<span class="string">'x'</span>));
1310063         [P1.FieldIndex]=deal({1,1});
1320064         [P1.Args]=deal({});
1330065
1340066         <span class="keyword">if</span> ~isfield(LATTICE{INDEX(KIDNUM(1))},<span class="string">'PolynomB'</span>)
1350067             error(<span class="string">'Element '</span>,int2str(KIDNUM(1)),<span class="string">' does not have field ''PolynomB'''</span>);
1360068         <span class="keyword">end</span>
1370069         P2 = struct(<span class="string">'ElemIndex'</span>,num2cell(INDEX(KIDNUM)),<span class="string">'FieldName'</span>,<span class="string">'PolynomB'</span>,<span class="string">'Function'</span>,inline(<span class="string">'x'</span>));
1380070         [P2.FieldIndex]=deal({1,2});
1390071         [P2.Args]=deal({});
1400072
1410073         <span class="keyword">for</span> k = 1:length(KIDNUM)
1420074             P1(k).SavedValue = LATTICE{INDEX(KIDNUM(k))}.K;
1430075             P2(k).SavedValue = LATTICE{INDEX(KIDNUM(k))}.PolynomB(2);
1440076         <span class="keyword">end</span>
1450077         P = reshape([P1;P2],1,2*length(P1));
1460078
1470079     <span class="keyword">case</span> {<span class="string">'ck'</span>,<span class="string">'kak'</span>}
1480080         <span class="keyword">if</span> ~isfield(LATTICE{INDEX(KIDNUM(1))},<span class="string">'K'</span>)
1490081             error(<span class="string">'Element '</span>,int2str(KIDNUM(1)),<span class="string">' does not have field ''K'''</span>);
1500082         <span class="keyword">end</span>
1510083         
1520084         <span class="keyword">for</span> i = 1:length(KIDNUM)
1530085             Ptmp = struct(<span class="string">'ElemIndex'</span>,{INDEX(i)},<span class="string">'FieldName'</span>,<span class="string">'K'</span>,<span class="string">'Function'</span>,inline(<span class="string">'a*x'</span>));
1540086             Ptmp.FieldIndex = {1,1};
1550087             Ptmp.Args = {ScaleFactor(i)};
1560088             P1(i) = Ptmp;
1570089         <span class="keyword">end</span>
1580090         
1590091         <span class="keyword">if</span> ~isfield(LATTICE{INDEX(KIDNUM(1))},<span class="string">'PolynomB'</span>)
1600092             error(<span class="string">'Element '</span>,int2str(KIDNUM(1)),<span class="string">' does not have field ''PolynomB'''</span>);
1610093         <span class="keyword">end</span>
1620094         <span class="keyword">for</span> i = 1:length(KIDNUM)
1630095             Ptmp = struct(<span class="string">'ElemIndex'</span>,{INDEX(i)},<span class="string">'FieldName'</span>,<span class="string">'PolynomB'</span>,<span class="string">'Function'</span>,inline(<span class="string">'a*x'</span>));
1640096             Ptmp.FieldIndex = {1,2};
1650097             Ptmp.Args = {ScaleFactor(i)};
1660098             P2(i) = Ptmp;
1670099         <span class="keyword">end</span>
1680100
1690101         <span class="keyword">for</span> k = 1:length(KIDNUM)
1700102             P1(k).SavedValue = LATTICE{INDEX(KIDNUM(k))}.K;
1710103             P2(k).SavedValue = LATTICE{INDEX(KIDNUM(k))}.PolynomB(2);
1720104         <span class="keyword">end</span>
1730105         P = reshape([P1;P2],1,2*length(P1));
1740106
1750107     <span class="keyword">case</span> <span class="string">'k2'</span>
1760108
1770109         <span class="keyword">if</span> ~isfield(LATTICE{INDEX(KIDNUM(1))},<span class="string">'PolynomB'</span>)
1780110             error(<span class="string">'Element '</span>,int2str(KIDNUM(1)),<span class="string">' does not have field ''PolynomB'''</span>);
1790111         <span class="keyword">end</span>
1800112         P = struct(<span class="string">'ElemIndex'</span>,num2cell(INDEX(KIDNUM)),<span class="string">'FieldName'</span>,<span class="string">'PolynomB'</span>,<span class="string">'Function'</span>,inline(<span class="string">'x'</span>));
1810113         [P.FieldIndex]=deal({1,3});
1820114         [P.Args]=deal({});
1830115         <span class="keyword">for</span> k = 1:length(KIDNUM)
1840116             P(k).SavedValue = LATTICE{INDEX(KIDNUM(k))}.PolynomB(3);
1850117         <span class="keyword">end</span>
1860118         
1870119     <span class="keyword">case</span> <span class="string">'k3'</span>
1880120         <span class="keyword">if</span> ~isfield(LATTICE{INDEX(KIDNUM(1))},<span class="string">'PolynomB'</span>)
1890121             error(<span class="string">'Element '</span>,int2str(KIDNUM(1)),<span class="string">' does not have field ''PolynomB'''</span>);
1900122         <span class="keyword">end</span>
1910123         P = struct(<span class="string">'ElemIndex'</span>,num2cell(INDEX(KIDNUM)),<span class="string">'FieldName'</span>,<span class="string">'PolynomB'</span>,<span class="string">'Function'</span>,inline(<span class="string">'x'</span>));
1920124         [P.FieldIndex]=deal({1,4});
1930125         [P.Args]=deal({});
1940126         <span class="keyword">for</span> k = 1:length(KIDNUM)
1950127             P(k).SavedValue = LATTICE{INDEX(KIDNUM(k))}.PolynomB(4);
1960128         <span class="keyword">end</span>
1970129
1980130     <span class="keyword">case</span> <span class="string">'tilt'</span>
1990131         <span class="keyword">if</span> ~isfield(LATTICE{INDEX(KIDNUM(1))},<span class="string">'R1'</span>)
2000132             error(<span class="string">'Element '</span>,int2str(KIDNUM(1)),<span class="string">' does not have field ''R1'''</span>);
2010133         <span class="keyword">end</span>
2020134         <span class="keyword">if</span> ~isfield(LATTICE{INDEX(KIDNUM(1))},<span class="string">'R2'</span>)
2030135             error(<span class="string">'Element '</span>,int2str(KIDNUM(1)),<span class="string">' does not have field ''R2'''</span>);
2040136         <span class="keyword">end</span>
2050137
2060138         P1 = struct(<span class="string">'ElemIndex'</span>,num2cell(INDEX(KIDNUM)),<span class="string">'FieldName'</span>,<span class="string">'R1'</span>,<span class="string">'Function'</span>,inline(<span class="string">'mksrollmat(x)'</span>));
2070139         [P1.FieldIndex]=deal({1:6,1:6});
2080140         [P1.Args]=deal({});
2090141
2100142         P2 = struct(<span class="string">'ElemIndex'</span>,num2cell(INDEX(KIDNUM)),<span class="string">'FieldName'</span>,<span class="string">'R2'</span>,<span class="string">'Function'</span>,inline(<span class="string">'mksrollmat(-x)'</span>));
2110143         [P2.FieldIndex]=deal({1:6,1:6});
2120144         [P2.Args]=deal({});
2130145
2140146         <span class="keyword">for</span> k = 1:length(KIDNUM)
2150147             P1(k).SavedValue = LATTICE{INDEX(KIDNUM(k))}.R1;
2160148             P2(k).SavedValue = LATTICE{INDEX(KIDNUM(k))}.R2;
2170149         <span class="keyword">end</span>
2180150         P = reshape([P1;P2],1,2*length(P1));
2190151         
2200152     <span class="keyword">case</span> {<span class="string">'s'</span>,<span class="string">'s1'</span>, <span class="string">'ks1'</span>}
2210153         <span class="keyword">if</span> ~isfield(LATTICE{INDEX(KIDNUM(1))},<span class="string">'PolynomA'</span>)
2220154             error(<span class="string">'Element '</span>,int2str(KIDNUM(1)),<span class="string">' does not have field ''PolynomA'''</span>);
2230155         <span class="keyword">end</span>
2240156         P = struct(<span class="string">'ElemIndex'</span>,num2cell(INDEX(KIDNUM)),<span class="string">'FieldName'</span>,<span class="string">'PolynomA'</span>,<span class="string">'Function'</span>,inline(<span class="string">'x'</span>));
2250157         [P.FieldIndex]=deal({1,2});
2260158         [P.Args]=deal({});
2270159         <span class="keyword">for</span> k = 1:length(KIDNUM)
2280160             P(k).SavedValue = LATTICE{INDEX(KIDNUM(k))}.PolynomA(2);
2290161         <span class="keyword">end</span>
2300162
2310163     <span class="keyword">case</span> <span class="string">'pb1'</span>
2320164         <span class="keyword">if</span> ~isfield(LATTICE{INDEX(KIDNUM(1))},<span class="string">'PolynomB'</span>)
2330165             error([<span class="string">'Element '</span>,int2str(KIDNUM(1)),<span class="string">' does not have field ''PolynomB'''</span>]);
2340166         <span class="keyword">end</span>
2350167         P = struct(<span class="string">'ElemIndex'</span>,num2cell(INDEX(KIDNUM)),<span class="string">'FieldName'</span>,<span class="string">'PolynomB'</span>,<span class="string">'Function'</span>,inline(<span class="string">'x'</span>));
2360168         [P.FieldIndex]=deal({1,2});
2370169         [P.Args]=deal({});
2380170         <span class="keyword">for</span> k = 1:length(KIDNUM)
2390171             P(k).SavedValue = LATTICE{INDEX(KIDNUM(k))}.PolynomB(2);
2400172         <span class="keyword">end</span>
2410173 <span class="keyword">end</span>
2420174</pre></div>
243<hr><address>Generated on Mon 21-May-2007 15:32:41 by <strong><a href="http://www.artefact.tk/software/matlab/m2html/">m2html</a></strong> &copy; 2003</address>
244</body>
245</html>
Note: See TracBrowser for help on using the repository browser.