source: MML/trunk/mml/doc_html/mml/makebump.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: 18.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 makebump</title>
6  <meta name="keywords" content="makebump">
7  <meta name="description" content="MAKEBUMP - Creates and orbit correction structure (OCS) usable by setorbit">
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; makebump.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&nbsp;<img alt=">" border="0" src="../right.png"></a></td></tr></table>-->
19
20<h1>makebump
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>MAKEBUMP - Creates and orbit correction structure (OCS) usable by setorbit</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 OCS = makebump(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">MAKEBUMP - Creates and orbit correction structure (OCS) usable by setorbit
31  OCS = makebump(BPMFamily, BPMDeviceList, GoalOrbit, CMFamily, CMIncrementList, BPMWeight {optional})
32  OCS = makebump(OCS, GoalOrbit, CMIncrementList, BPMWeight {optional})
33
34  INPUTS
35  1. BPMFamily
36  2. BPMDeviceList
37  3. GoalOrbit
38  4. CMFamily
39  5. CMIncrementList
40  6. BPMWeight - Weight applied to the BPMs inside the bump (GoalOrbit).  BPM weighting
41                 should only be required when the corrector are in a region of dispersion
42                 and the RF frequency is not used in the orbit correction.
43                {Default BPMWeight is to weight the leakage twice as much as the GoalOrbit}
44  7. 'Display' - Display bump characteristics
45  8. Optional flags used in setorbit can also be used:
46     'FitRF' flag to include the RF frequency as part of orbit correction.
47
48  NOTES
49  1. makebump creates an OCS structure.  Use setorbit to actually change the orbit.
50
51  See also setbump, setbumpgui, <a href="setorbit.html" class="code" title="function [OCS, OCS0, V, S, ErrorFlag] = setorbit(varargin)">setorbit</a>
52
53  Written by Greg Portmann</pre></div>
54
55<!-- crossreference -->
56<h2><a name="_cross"></a>CROSS-REFERENCE INFORMATION <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
57This function calls:
58<ul style="list-style-image:url(../matlabicon.gif)">
59<li><a href="family2datastruct.html" class="code" title="function [DataStruct, ErrorFlag] = family2datastruct(varargin)">family2datastruct</a>  FAMILY2DATASTRUCTURE - Returns a datastructure corresponding to a Family</li><li><a href="family2dev.html" class="code" title="function DeviceList = family2dev(Family, varargin);">family2dev</a>      FAMILY2DEV - Return the device list for a family</li><li><a href="getam.html" class="code" title="function [AM, tout, DataTime, ErrorFlag] = getam(varargin)">getam</a> GETAM - Gets monitor channels</li><li><a href="getfamilydata.html" class="code" title="function [Data, ErrorFlag] = getfamilydata(Family, Field1, Field2, DeviceList)">getfamilydata</a>        GETFAMILYDATA - Gets data associated with the accelerator control</li><li><a href="getgolden.html" class="code" title="function Data = getgolden(varargin)">getgolden</a>       GETGOLDEN - Returns the golden values for a family</li><li><a href="getoffset.html" class="code" title="function Data = getoffset(varargin)">getoffset</a>      GETOFFSET - Returns the offset values for a family</li><li><a href="getspos.html" class="code" title="function S = getspos(Family, DeviceList)">getspos</a>     GETSPOS - Returns the longitudinal position in meters</li></ul>
60This function is called by:
61<ul style="list-style-image:url(../matlabicon.gif)">
62</ul>
63<!-- crossreference -->
64
65
66<h2><a name="_source"></a>SOURCE CODE <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
67<div class="fragment"><pre>0001 <a name="_sub0" href="#_subfunctions" class="code">function OCS = makebump(varargin)</a>
680002 <span class="comment">%MAKEBUMP - Creates and orbit correction structure (OCS) usable by setorbit</span>
690003 <span class="comment">%  OCS = makebump(BPMFamily, BPMDeviceList, GoalOrbit, CMFamily, CMIncrementList, BPMWeight {optional})</span>
700004 <span class="comment">%  OCS = makebump(OCS, GoalOrbit, CMIncrementList, BPMWeight {optional})</span>
710005 <span class="comment">%</span>
720006 <span class="comment">%  INPUTS</span>
730007 <span class="comment">%  1. BPMFamily</span>
740008 <span class="comment">%  2. BPMDeviceList</span>
750009 <span class="comment">%  3. GoalOrbit</span>
760010 <span class="comment">%  4. CMFamily</span>
770011 <span class="comment">%  5. CMIncrementList</span>
780012 <span class="comment">%  6. BPMWeight - Weight applied to the BPMs inside the bump (GoalOrbit).  BPM weighting</span>
790013 <span class="comment">%                 should only be required when the corrector are in a region of dispersion</span>
800014 <span class="comment">%                 and the RF frequency is not used in the orbit correction.</span>
810015 <span class="comment">%                {Default BPMWeight is to weight the leakage twice as much as the GoalOrbit}</span>
820016 <span class="comment">%  7. 'Display' - Display bump characteristics</span>
830017 <span class="comment">%  8. Optional flags used in setorbit can also be used:</span>
840018 <span class="comment">%     'FitRF' flag to include the RF frequency as part of orbit correction.</span>
850019 <span class="comment">%</span>
860020 <span class="comment">%  NOTES</span>
870021 <span class="comment">%  1. makebump creates an OCS structure.  Use setorbit to actually change the orbit.</span>
880022 <span class="comment">%</span>
890023 <span class="comment">%  See also setbump, setbumpgui, setorbit</span>
900024 <span class="comment">%</span>
910025 <span class="comment">%  Written by Greg Portmann</span>
920026
930027
940028 <span class="comment">%%%%%%%%%%%%</span>
950029 <span class="comment">% Defaults %</span>
960030 <span class="comment">%%%%%%%%%%%%</span>
970031 nIter = 3;
980032 BPMWeight = [];
990033 GoalOrbit = [];
1000034 IncrementalFlag = 1;
1010035 DisplayFlag = 0;
1020036
1030037
1040038 <span class="comment">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span>
1050039 <span class="comment">% Input parsing and checking %</span>
1060040 <span class="comment">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span>
1070041 OCS.Flags = {};
1080042 <span class="keyword">for</span> i = length(varargin):-1:1
1090043     <span class="keyword">if</span> isstruct(varargin{i})
1100044         <span class="comment">% Ignor structures</span>
1110045     <span class="keyword">elseif</span> iscell(varargin{i})
1120046         <span class="comment">% Ignor cells</span>
1130047     <span class="keyword">elseif</span> strcmpi(varargin{i},<span class="string">'Golden'</span>)
1140048         <span class="comment">% Use the golden orbit</span>
1150049         GoalOrbit = <span class="string">'Golden'</span>;
1160050         varargin(i) = [];
1170051     <span class="keyword">elseif</span> strcmpi(varargin{i},<span class="string">'Offset'</span>)
1180052         <span class="comment">% Use the offset orbit</span>
1190053         GoalOrbit = <span class="string">'Golden'</span>;
1200054         varargin(i) = [];
1210055     <span class="keyword">elseif</span> strcmpi(varargin{i},<span class="string">'Display'</span>)
1220056         OCS.Flags = [OCS.Flags varargin(i)];
1230057         DisplayFlag = 1;
1240058         varargin(i) = [];
1250059     <span class="keyword">elseif</span> strcmpi(varargin{i},<span class="string">'ModelResp'</span>)
1260060         OCS.Flags = [OCS.Flags varargin(i)];
1270061         varargin(i) = [];
1280062     <span class="keyword">elseif</span> strcmpi(varargin{i},<span class="string">'FitRF'</span>)
1290063         OCS.Flags = [OCS.Flags varargin(i)];
1300064         varargin(i) = [];
1310065     <span class="keyword">elseif</span> strcmpi(varargin{i},<span class="string">'ModelDisp'</span>)
1320066         OCS.Flags = [OCS.Flags varargin(i)];
1330067         varargin(i) = [];
1340068     <span class="keyword">elseif</span> strcmpi(varargin{i},<span class="string">'MeasDisp'</span>)
1350069         OCS.Flags = [OCS.Flags varargin(i)];
1360070         varargin(i) = [];
1370071     <span class="keyword">elseif</span> strcmpi(varargin{i},<span class="string">'GoldenDisp'</span>)
1380072         OCS.Flags = [OCS.Flags varargin(i)];
1390073         varargin(i) = [];
1400074     <span class="keyword">elseif</span> strcmpi(varargin{i},<span class="string">'Inc'</span>) || strcmpi(varargin{i},<span class="string">'Incremental'</span>)
1410075         IncrementalFlag = 1;
1420076         varargin(i) = [];
1430077     <span class="keyword">elseif</span> strcmpi(varargin{i},<span class="string">'Abs'</span>) || strcmpi(varargin{i},<span class="string">'Absolute'</span>)
1440078         IncrementalFlag = 0;
1450079         varargin(i) = [];
1460080     <span class="keyword">elseif</span> strcmpi(varargin{i},<span class="string">'simulator'</span>) || strcmpi(varargin{i},<span class="string">'model'</span>)
1470081         ModeFlag = <span class="string">'SIMULATOR'</span>;
1480082         OCS.Flags = [OCS.Flags varargin(i)];
1490083         varargin(i) = [];
1500084     <span class="keyword">elseif</span> strcmpi(varargin{i},<span class="string">'Online'</span>)
1510085         ModeFlag = <span class="string">'Online'</span>;
1520086         OCS.Flags = [OCS.Flags varargin(i)];
1530087         varargin(i) = [];
1540088     <span class="keyword">elseif</span> strcmpi(varargin{i},<span class="string">'Manual'</span>)
1550089         ModeFlag = <span class="string">'Manual'</span>;
1560090         OCS.Flags = [OCS.Flags varargin(i)];
1570091         varargin(i) = [];
1580092     <span class="keyword">elseif</span> strcmpi(varargin{i},<span class="string">'physics'</span>)
1590093         UnitsFlag = <span class="string">'Physics'</span>;
1600094         OCS.Flags = [OCS.Flags varargin(i)];
1610095         varargin(i) = [];
1620096     <span class="keyword">elseif</span> strcmpi(varargin{i},<span class="string">'hardware'</span>)
1630097         UnitsFlag = <span class="string">'Hardware'</span>;
1640098         OCS.Flags = [OCS.Flags varargin(i)];
1650099         varargin(i) = [];
1660100     <span class="keyword">elseif</span> strcmpi(varargin{i},<span class="string">'archive'</span>)
1670101         <span class="comment">% Just remove</span>
1680102         varargin(i) = [];
1690103     <span class="keyword">elseif</span> strcmpi(varargin{i},<span class="string">'noarchive'</span>)
1700104         <span class="comment">% Just remove</span>
1710105         varargin(i) = [];
1720106     <span class="keyword">elseif</span> strcmpi(varargin{i},<span class="string">'struct'</span>)
1730107         <span class="comment">% Just remove</span>
1740108         varargin(i) = [];
1750109     <span class="keyword">elseif</span> strcmpi(varargin{i},<span class="string">'numeric'</span>)
1760110         <span class="comment">% Just remove</span>
1770111         varargin(i) = [];
1780112     <span class="keyword">end</span>
1790113 <span class="keyword">end</span>
1800114 i=length(OCS.Flags);
1810115 <span class="keyword">if</span> IncrementalFlag
1820116     OCS.Flags{i+1} = <span class="string">'Incremental'</span>;
1830117 <span class="keyword">else</span>
1840118     OCS.Flags{i+1} = <span class="string">'Absolute'</span>;
1850119 <span class="keyword">end</span>
1860120
1870121
1880122 <span class="keyword">if</span> isstruct(varargin{1})
1890123     OCS = varargin{1};
1900124     varargin(1) = [];
1910125     <span class="keyword">if</span> length(varargin) &lt; 2
1920126         error(<span class="string">'An OCS plus at least 2 inputs are required'</span>);
1930127     <span class="keyword">end</span>
1940128     GoalOrbit = varargin{1};
1950129     varargin(1) = [];
1960130     CMIncrementList = varargin{1};
1970131     varargin(1) = [];
1980132 <span class="keyword">else</span>
1990133     <span class="keyword">if</span> length(varargin) &lt; 5
2000134         error(<span class="string">'At least 5 inputs or an orbit correction structure is required'</span>);
2010135     <span class="keyword">end</span>
2020136     OCS.BPM.FamilyName = varargin{1};
2030137     OCS.BPM.DeviceList = varargin{2};
2040138     GoalOrbit = varargin{3};
2050139     OCS.CM.FamilyName = varargin{4};
2060140     CMIncrementList = varargin{5};
2070141     varargin(1:5) = [];
2080142 <span class="keyword">end</span>
2090143
2100144 <span class="keyword">if</span> length(varargin) &gt;= 1
2110145     <span class="keyword">if</span> isnumeric(varargin{1})
2120146         BPMWeight = varargin{1};
2130147         varargin(1) = [];
2140148     <span class="keyword">end</span>
2150149 <span class="keyword">end</span>
2160150
2170151 <span class="comment">% Pass the extra inputs on</span>
2180152 <span class="keyword">if</span> length(varargin) &gt;= 1
2190153     OCS.Flags = [OCS.Flags varargin];
2200154 <span class="keyword">end</span>
2210155
2220156
2230157 <span class="comment">% Possibly convert the GoalOrbit</span>
2240158 <span class="keyword">if</span> ischar(GoalOrbit)
2250159     <span class="keyword">if</span> strcmpi(GoalOrbit, <span class="string">'Golden'</span>)
2260160         GoalOrbit = <a href="getgolden.html" class="code" title="function Data = getgolden(varargin)">getgolden</a>(OCS.BPM.FamilyName, OCS.BPM.DeviceList);
2270161     <span class="keyword">elseif</span> strcmpi(GoalOrbit, <span class="string">'Offset'</span>)
2280162         GoalOrbit = <a href="getoffset.html" class="code" title="function Data = getoffset(varargin)">getoffset</a>(OCS.BPM.FamilyName, OCS.BPM.DeviceList);
2290163     <span class="keyword">else</span>
2300164         error(<span class="string">'Goal unknown'</span>);
2310165     <span class="keyword">end</span>
2320166 <span class="keyword">end</span>
2330167 GoalOrbit = GoalOrbit(:);
2340168
2350169 <span class="comment">% Check the length</span>
2360170 <span class="keyword">if</span> length(GoalOrbit) ~= size(OCS.BPM.DeviceList,1)
2370171     error(<span class="string">'Length of the GoalOrbit must equal the number of devices in BPMList'</span>);
2380172 <span class="keyword">end</span>
2390173
2400174
2410175 <span class="comment">% CMIncrementList must be a vector, no zeros, no repeats</span>
2420176 CMIncrementList = CMIncrementList(:);
2430177 CMIncrementList = sort(CMIncrementList);
2440178 CMIncrementList(find(CMIncrementList==0)) = [];
2450179 CMIncrementList(find(diff(CMIncrementList)==0)) = [];
2460180
2470181
2480182 <span class="comment">% Get BPM postions</span>
2490183 BPMListTotal = <a href="family2dev.html" class="code" title="function DeviceList = family2dev(Family, varargin);">family2dev</a>(OCS.BPM.FamilyName, 1);
2500184 BPMsposTotal = <a href="getspos.html" class="code" title="function S = getspos(Family, DeviceList)">getspos</a>(OCS.BPM.FamilyName, BPMListTotal);
2510185 BPMspos      = <a href="getspos.html" class="code" title="function S = getspos(Family, DeviceList)">getspos</a>(OCS.BPM.FamilyName, OCS.BPM.DeviceList);
2520186
2530187
2540188 <span class="comment">% Stack 3 rings so you you don't have to worry about the L to 0 transition</span>
2550189 CMListTotal = <a href="family2dev.html" class="code" title="function DeviceList = family2dev(Family, varargin);">family2dev</a>(OCS.CM.FamilyName, 1);
2560190 CMsposTotal = <a href="getspos.html" class="code" title="function S = getspos(Family, DeviceList)">getspos</a>(OCS.CM.FamilyName, CMListTotal);
2570191 L = <a href="getfamilydata.html" class="code" title="function [Data, ErrorFlag] = getfamilydata(Family, Field1, Field2, DeviceList)">getfamilydata</a>(<span class="string">'Circumference'</span>);
2580192 CMListTotal = [CMListTotal; CMListTotal; CMListTotal];
2590193 CMsposTotal = [CMsposTotal-L; CMsposTotal; CMsposTotal+L];
2600194
2610195
2620196 <span class="comment">% Find the correctors</span>
2630197 <span class="keyword">for</span> i = 1:length(CMIncrementList)
2640198     <span class="keyword">if</span> CMIncrementList(i) &lt;= 0
2650199         j = find(CMsposTotal &lt;= BPMspos(1));
2660200         OCS.CM.DeviceList(i,:) = CMListTotal(j(end)+CMIncrementList(i)+1,:);
2670201     <span class="keyword">else</span>
2680202         j = find(CMsposTotal &gt;= BPMspos(end));
2690203         OCS.CM.DeviceList(i,:) = CMListTotal(j(1)+CMIncrementList(i)-1,:);       
2700204     <span class="keyword">end</span>
2710205 <span class="keyword">end</span>
2720206
2730207
2740208 <span class="comment">% Find all BPMs outside the bump (leakage control BPMs)</span>
2750209 CMspos = <a href="getspos.html" class="code" title="function S = getspos(Family, DeviceList)">getspos</a>(OCS.CM.FamilyName, OCS.CM.DeviceList);
2760210 j1 = find(BPMsposTotal &lt; CMspos(1));
2770211 j2 = find(BPMsposTotal &gt; CMspos(end));
2780212 <span class="keyword">if</span> isempty(j1) &amp;&amp; isempty(j2)
2790213     error(<span class="string">'Cound not find any leakage control BPMs'</span>);
2800214 <span class="keyword">end</span>
2810215 OCS.BPM.DeviceList = [BPMListTotal(j1,:); OCS.BPM.DeviceList; BPMListTotal(j2,:);];
2820216
2830217 <span class="keyword">if</span> IncrementalFlag
2840218     OCS.GoalOrbit = [zeros(length(j1),1); GoalOrbit; zeros(length(j2),1)];
2850219 <span class="keyword">else</span>
2860220     OCS.GoalOrbit = [<a href="getam.html" class="code" title="function [AM, tout, DataTime, ErrorFlag] = getam(varargin)">getam</a>(OCS.BPM.FamilyName,BPMListTotal(j1,:)); GoalOrbit; <a href="getam.html" class="code" title="function [AM, tout, DataTime, ErrorFlag] = getam(varargin)">getam</a>(OCS.BPM.FamilyName,BPMListTotal(j2,:))];
2870221 <span class="keyword">end</span>
2880222
2890223
2900224 <span class="comment">% Add a weight</span>
2910225 <span class="keyword">if</span> isempty(BPMWeight)
2920226     <span class="comment">% Default BPMWeight is to weight the leakage twice as much as the bump goal</span>
2930227     BPMWeight = .5 * (length(j1) + length(j2)) / length(GoalOrbit);
2940228     OCS.BPMWeight = [ones(length(j1),1); BPMWeight .* ones(length(GoalOrbit),1); ones(length(j2),1)];
2950229 <span class="keyword">else</span>
2960230     OCS.BPMWeight = [ones(length(j1),1); BPMWeight .* ones(length(GoalOrbit),1); ones(length(j2),1)];
2970231 <span class="keyword">end</span>
2980232
2990233
3000234 <span class="comment">% Create data structure</span>
3010235 OCS.BPM = <a href="family2datastruct.html" class="code" title="function [DataStruct, ErrorFlag] = family2datastruct(varargin)">family2datastruct</a>(OCS.BPM.FamilyName, OCS.BPM.DeviceList);
3020236 OCS.CM = <a href="family2datastruct.html" class="code" title="function [DataStruct, ErrorFlag] = family2datastruct(varargin)">family2datastruct</a>(OCS.CM.FamilyName, OCS.CM.DeviceList);
3030237
3040238
3050239 <span class="comment">% Bumps stats</span>
3060240 <span class="keyword">if</span> DisplayFlag
3070241     <span class="comment">% Corrector strength (meters/radian) and (mm/amp)</span>
3080242     <span class="comment">% Warn on when to add RF frequency (generated dispersion is greater than mm per amp or % of mm/amp bump)</span>
3090243 <span class="keyword">end</span></pre></div>
310<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>
311</body>
312</html>
Note: See TracBrowser for help on using the repository browser.