source: MML/trunk/mml/doc_html/mml/measchro.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: 50.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 measchro</title>
6  <meta name="keywords" content="measchro">
7  <meta name="description" content="MEASCHRO -  measures the chromaticity function emperically">
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; measchro.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>measchro
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>MEASCHRO -  measures the chromaticity function emperically</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 [Chromaticity, FileName] = measchro(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">MEASCHRO -  measures the chromaticity function emperically
31  Chrom         = measchro(DeltaRF, WaitFlag);
32  ChromHardware = measchro(DeltaRF, WaitFlag, 'Hardware');
33  ChromPhysics  = measchro(DeltaRF, WaitFlag, 'Physics');
34  ChromStruct   = measchro(DeltaRF, WaitFlag, 'Struct');
35
36  INPUTS
37  1. DeltaRF - Vector of master oscillator values to scan over
38               {Default:  [-.4% -.2% 0 .2% .4%] energy change}
39  2. WaitFlag &gt;= 0, WaitFlag seconds before measuring the tune (sec)
40               = -1, wait until the magnets are done ramping
41               = -3, wait until the magnets are done ramping + a delay of 2.2*getfamilydata('TuneDelay') {default}
42               = -4, wait until keyboard input
43               = -5, input the tune measurement manually by keyboard input
44  4. 'Hardware' - Returns chromaticity in hardware units (typically, Tune/MHz or Tune/MHz)
45     'Physics'  - Returns chromaticity in physics  units (Tune/(dp/p))  {Default}
46  5. 'Struct'  - Will return a two element dispersion data structure array {Default, unless Mode='Model'}
47     'Numeric' - Will return vector outputs
48  6. Optional override of the mode:
49     'Online'    - Set/Get data online 
50     'Simulator' - Set/Get data on the simulated accelerator (ie, same commands as 'Online')
51     'Model'     - Get the model chromaticity directly from the model (uses modelchro, DeltaRF is ignored)
52     'Manual'    - Set/Get data manually
53  7. 'Archive'   - Save a chromaticity data structure to \&lt;Directory.ChroData&gt;\Chromaticity\
54                   with filename &lt;ChroArchiveFile&gt;&lt;Date&gt;&lt;Time&gt;.mat  {Default, unless Mode='Model'}
55                   To change the filename, included the filename after the 'Archive', '' to browse
56     'NoArchive' - No file archive {Default}
57  8. 'Display'   - Prints status information to the command window {Default, unless Mode='Model'}
58     'NoDisplay' - Nothing is printed to the command window
59
60 
61  OUTPUT
62                  | Horizontal Chromaticity |
63  ChromHardware = |                         |  [Delta Tune / Delta Frequency]
64                  | Vertical Chromaticity   |       (Hardware Units)
65
66 
67                 | Horizontal Chromaticity |
68  ChromPhysics = |                         |  [Delta Tune / Delta Energy]
69                 | Vertical Chromaticity   |       (Physics Units)
70
71  When computing physics units the momentum compaction factor is required.  The default MCF is
72  found using getmcf.  To override the default enter the new value after the 'Physics' input.
73  For example,  ChromPhysics = measchro(DeltaRF, WaitFlag, 'Physics', .0011);
74
75  Tune vs RF frequency or momentum are plotted to the screen
76
77  Fields for structure outputs:
78            Data: [2x1] Chromaticity vector
79      FamilyName: 'Chromaticity'
80         Monitor: Tune structure
81        Actuator: RF frequency structure
82   DeltaActuator: Vector of frequency shifts in Hz
83       TimeStamp: Timestamp
84  DataDescriptor: 'Chromacity'
85       CreatedBy: 'measchro'
86             MCF: Momentum compaction factor/linear
87              RF: Vector of frequency settings in Hz
88               X: Reference orbit
89               Y: Reference orbit
90           Tune0: Initial tune
91            Tune: Tune change with RF frequency, 2 row vectors
92              dp: Vector of normalized momentum shifts
93         PolyFit: Polynomial fit of chromaticity in terms of rf shift or momentum
94
95  NOTE
96  1. 'Hardware', 'Physics', 'Eta', 'Archive', 'Numeric', and 'Struct' are not case sensitive
97  2. 'Zeta' can be used instead of 'Physics'
98  3.  All inputs are optional
99  4.  One reason FamilyName is added to the output structure so that getdata can be
100      used to locate archived dispersion measurements.
101  5.  Units for DeltaRF depend on the 'Physics' or 'Hardware' flags
102  6. Beware of what units you are working in.  The default units for chromaticity
103     are physics units.  This is an exception to the normal middle layer convention.
104     Hardware units for &quot;chromaticity&quot; is in tune change per change in RF frequency. 
105     Since this is an unusual unit to work with, the default units for chromaticity
106     is physics units.  Note that goal chromaticity is also stored in physics units.
107     plotchro can switch between 'Hardware' and 'Physics' after the measurement is taken.
108     As an example of the difference between the units, at Spear3 1 unit of chromaticity
109     in physics units corresponds to roughly -1.8 units in hardware units. 
110
111  See also <a href="plotchro.html" class="code" title="function [c, FileName] = plotchro(varargin)">plotchro</a>, <a href="measdisp.html" class="code" title="function [Dx, Dy, FileName] = measdisp(varargin);">measdisp</a>
112
113  Written by Greg Portmann and Jeff Corbett</pre></div>
114
115<!-- crossreference -->
116<h2><a name="_cross"></a>CROSS-REFERENCE INFORMATION <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
117This function calls:
118<ul style="list-style-image:url(../matlabicon.gif)">
119<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="getam.html" class="code" title="function [AM, tout, DataTime, ErrorFlag] = getam(varargin)">getam</a> GETAM - Gets monitor channels</li><li><a href="getenergy.html" class="code" title="function [Energy, HCMEnergy] = getenergy(varargin)">getenergy</a>    GETENERGY - Returns the beam energy base on the bend magnet</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="gethbpmfamily.html" class="code" title="function Family = gethbpmfamily">gethbpmfamily</a>   GETHBPMFAMILY - Return the default horizontal BPM family</li><li><a href="getmcf.html" class="code" title="function Alpha = getmcf(ModelString)">getmcf</a>     GETMCF - Returns the momentum compaction factor (MCF) stored in the AD or the model</li><li><a href="getrf.html" class="code" title="function [RFsp, RFam, DataTime, ErrorFlag] = getrf(varargin)">getrf</a>    GETRF - Gets the RF frequency</li><li><a href="gettune.html" class="code" title="function [Tune, tout, DataTime, ErrorFlag] = gettune(varargin)">gettune</a>    GETTUNE - Returns the betatron tunes</li><li><a href="getvbpmfamily.html" class="code" title="function Family = getvbpmfamily">getvbpmfamily</a>        GETVBPMFAMILY - Return the default vertical BPM family</li><li><a href="getx.html" class="code" title="function [AM, tout, DataTime, ErrorFlag] = getx(varargin)">getx</a>      GETX - Returns the horizontal orbit</li><li><a href="gety.html" class="code" title="function [AM, tout, DataTime, ErrorFlag] = gety(varargin)">gety</a> GETY - Returns the vertical orbit</li><li><a href="hw2physics.html" class="code" title="function S = hw2physics(Family, Field, value, DeviceList, Energy)">hw2physics</a>       HW2PHYSICS - Converts from 'Hardware' units to 'Physics' units</li><li><a href="isfamily.html" class="code" title="function  [FamilyFlag, AO] = isfamily(Family, Field)">isfamily</a>   ISFAMILY - True for family names</li><li><a href="plotchro.html" class="code" title="function [c, FileName] = plotchro(varargin)">plotchro</a>  PLOTCHRO - Plot the chromaticity function</li><li><a href="setrf.html" class="code" title="function setrf(RF, varargin)">setrf</a>      SETRF - Sets the RF frequency</li><li><a href="setsp.html" class="code" title="function ErrorFlag = setsp(Family, varargin)">setsp</a>  SETSP - Makes an absolute setpoint change to the 'Setpoint' field</li></ul>
120This function is called by:
121<ul style="list-style-image:url(../matlabicon.gif)">
122<li><a href="getchro.html" class="code" title="function [Data, FileName] = getchro(varargin)">getchro</a>       GETCHRO - Return the chromaticity function (from file)</li><li><a href="measchroresp.html" class="code" title="function [Rmat, OutputFileName] = measchroresp(varargin)">measchroresp</a>       MEASCHRORESP - measures the response from sextupoles to chromaticity</li><li><a href="setchro.html" class="code" title="function [DelSext, ActuatorFamily] = setchro(varargin)">setchro</a>     SETCHRO - Measures then sets the chromaticity</li></ul>
123<!-- crossreference -->
124
125
126<h2><a name="_source"></a>SOURCE CODE <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
127<div class="fragment"><pre>0001 <a name="_sub0" href="#_subfunctions" class="code">function [Chromaticity, FileName] = measchro(varargin)</a>
1280002 <span class="comment">%MEASCHRO -  measures the chromaticity function emperically</span>
1290003 <span class="comment">%  Chrom         = measchro(DeltaRF, WaitFlag);</span>
1300004 <span class="comment">%  ChromHardware = measchro(DeltaRF, WaitFlag, 'Hardware');</span>
1310005 <span class="comment">%  ChromPhysics  = measchro(DeltaRF, WaitFlag, 'Physics');</span>
1320006 <span class="comment">%  ChromStruct   = measchro(DeltaRF, WaitFlag, 'Struct');</span>
1330007 <span class="comment">%</span>
1340008 <span class="comment">%  INPUTS</span>
1350009 <span class="comment">%  1. DeltaRF - Vector of master oscillator values to scan over</span>
1360010 <span class="comment">%               {Default:  [-.4% -.2% 0 .2% .4%] energy change}</span>
1370011 <span class="comment">%  2. WaitFlag &gt;= 0, WaitFlag seconds before measuring the tune (sec)</span>
1380012 <span class="comment">%               = -1, wait until the magnets are done ramping</span>
1390013 <span class="comment">%               = -3, wait until the magnets are done ramping + a delay of 2.2*getfamilydata('TuneDelay') {default}</span>
1400014 <span class="comment">%               = -4, wait until keyboard input</span>
1410015 <span class="comment">%               = -5, input the tune measurement manually by keyboard input</span>
1420016 <span class="comment">%  4. 'Hardware' - Returns chromaticity in hardware units (typically, Tune/MHz or Tune/MHz)</span>
1430017 <span class="comment">%     'Physics'  - Returns chromaticity in physics  units (Tune/(dp/p))  {Default}</span>
1440018 <span class="comment">%  5. 'Struct'  - Will return a two element dispersion data structure array {Default, unless Mode='Model'}</span>
1450019 <span class="comment">%     'Numeric' - Will return vector outputs</span>
1460020 <span class="comment">%  6. Optional override of the mode:</span>
1470021 <span class="comment">%     'Online'    - Set/Get data online</span>
1480022 <span class="comment">%     'Simulator' - Set/Get data on the simulated accelerator (ie, same commands as 'Online')</span>
1490023 <span class="comment">%     'Model'     - Get the model chromaticity directly from the model (uses modelchro, DeltaRF is ignored)</span>
1500024 <span class="comment">%     'Manual'    - Set/Get data manually</span>
1510025 <span class="comment">%  7. 'Archive'   - Save a chromaticity data structure to \&lt;Directory.ChroData&gt;\Chromaticity\</span>
1520026 <span class="comment">%                   with filename &lt;ChroArchiveFile&gt;&lt;Date&gt;&lt;Time&gt;.mat  {Default, unless Mode='Model'}</span>
1530027 <span class="comment">%                   To change the filename, included the filename after the 'Archive', '' to browse</span>
1540028 <span class="comment">%     'NoArchive' - No file archive {Default}</span>
1550029 <span class="comment">%  8. 'Display'   - Prints status information to the command window {Default, unless Mode='Model'}</span>
1560030 <span class="comment">%     'NoDisplay' - Nothing is printed to the command window</span>
1570031 <span class="comment">%</span>
1580032 <span class="comment">%</span>
1590033 <span class="comment">%  OUTPUT</span>
1600034 <span class="comment">%                  | Horizontal Chromaticity |</span>
1610035 <span class="comment">%  ChromHardware = |                         |  [Delta Tune / Delta Frequency]</span>
1620036 <span class="comment">%                  | Vertical Chromaticity   |       (Hardware Units)</span>
1630037 <span class="comment">%</span>
1640038 <span class="comment">%</span>
1650039 <span class="comment">%                 | Horizontal Chromaticity |</span>
1660040 <span class="comment">%  ChromPhysics = |                         |  [Delta Tune / Delta Energy]</span>
1670041 <span class="comment">%                 | Vertical Chromaticity   |       (Physics Units)</span>
1680042 <span class="comment">%</span>
1690043 <span class="comment">%  When computing physics units the momentum compaction factor is required.  The default MCF is</span>
1700044 <span class="comment">%  found using getmcf.  To override the default enter the new value after the 'Physics' input.</span>
1710045 <span class="comment">%  For example,  ChromPhysics = measchro(DeltaRF, WaitFlag, 'Physics', .0011);</span>
1720046 <span class="comment">%</span>
1730047 <span class="comment">%  Tune vs RF frequency or momentum are plotted to the screen</span>
1740048 <span class="comment">%</span>
1750049 <span class="comment">%  Fields for structure outputs:</span>
1760050 <span class="comment">%            Data: [2x1] Chromaticity vector</span>
1770051 <span class="comment">%      FamilyName: 'Chromaticity'</span>
1780052 <span class="comment">%         Monitor: Tune structure</span>
1790053 <span class="comment">%        Actuator: RF frequency structure</span>
1800054 <span class="comment">%   DeltaActuator: Vector of frequency shifts in Hz</span>
1810055 <span class="comment">%       TimeStamp: Timestamp</span>
1820056 <span class="comment">%  DataDescriptor: 'Chromacity'</span>
1830057 <span class="comment">%       CreatedBy: 'measchro'</span>
1840058 <span class="comment">%             MCF: Momentum compaction factor/linear</span>
1850059 <span class="comment">%              RF: Vector of frequency settings in Hz</span>
1860060 <span class="comment">%               X: Reference orbit</span>
1870061 <span class="comment">%               Y: Reference orbit</span>
1880062 <span class="comment">%           Tune0: Initial tune</span>
1890063 <span class="comment">%            Tune: Tune change with RF frequency, 2 row vectors</span>
1900064 <span class="comment">%              dp: Vector of normalized momentum shifts</span>
1910065 <span class="comment">%         PolyFit: Polynomial fit of chromaticity in terms of rf shift or momentum</span>
1920066 <span class="comment">%</span>
1930067 <span class="comment">%  NOTE</span>
1940068 <span class="comment">%  1. 'Hardware', 'Physics', 'Eta', 'Archive', 'Numeric', and 'Struct' are not case sensitive</span>
1950069 <span class="comment">%  2. 'Zeta' can be used instead of 'Physics'</span>
1960070 <span class="comment">%  3.  All inputs are optional</span>
1970071 <span class="comment">%  4.  One reason FamilyName is added to the output structure so that getdata can be</span>
1980072 <span class="comment">%      used to locate archived dispersion measurements.</span>
1990073 <span class="comment">%  5.  Units for DeltaRF depend on the 'Physics' or 'Hardware' flags</span>
2000074 <span class="comment">%  6. Beware of what units you are working in.  The default units for chromaticity</span>
2010075 <span class="comment">%     are physics units.  This is an exception to the normal middle layer convention.</span>
2020076 <span class="comment">%     Hardware units for &quot;chromaticity&quot; is in tune change per change in RF frequency.</span>
2030077 <span class="comment">%     Since this is an unusual unit to work with, the default units for chromaticity</span>
2040078 <span class="comment">%     is physics units.  Note that goal chromaticity is also stored in physics units.</span>
2050079 <span class="comment">%     plotchro can switch between 'Hardware' and 'Physics' after the measurement is taken.</span>
2060080 <span class="comment">%     As an example of the difference between the units, at Spear3 1 unit of chromaticity</span>
2070081 <span class="comment">%     in physics units corresponds to roughly -1.8 units in hardware units.</span>
2080082 <span class="comment">%</span>
2090083 <span class="comment">%  See also plotchro, measdisp</span>
2100084 <span class="comment">%</span>
2110085 <span class="comment">%  Written by Greg Portmann and Jeff Corbett</span>
2120086
2130087 <span class="comment">%</span>
2140088 <span class="comment">%  Written by Gregory J. Portmann</span>
2150089 <span class="comment">%  Modified by Laurent S. Nadolski</span>
2160090
2170091 NRFSteps = 1;
2180092 WaitFlag = 4;
2190093 MCF = [];
2200094 BPMxFamily = <a href="gethbpmfamily.html" class="code" title="function Family = gethbpmfamily">gethbpmfamily</a><span class="comment">% Just an extra monitor</span>
2210095 BPMyFamily = <a href="getvbpmfamily.html" class="code" title="function Family = getvbpmfamily">getvbpmfamily</a><span class="comment">% Just an extra monitor</span>
2220096 StructOutputFlag = 0;
2230097 FileName = -1;
2240098 ArchiveFlag = 0;
2250099 DisplayFlag = -1;
2260100 ModeFlag  = <span class="string">''</span>;         <span class="comment">% model, online, manual, or '' for default mode</span>
2270101 UnitsFlag = <span class="string">'Physics'</span><span class="comment">% hardware, physics, or '' for default units</span>
2280102
2290103
2300104 <span class="comment">% Look if 'struct' or 'numeric' in on the input line</span>
2310105 <span class="keyword">for</span> i = length(varargin):-1:1
2320106     <span class="keyword">if</span> strcmpi(varargin{i},<span class="string">'Struct'</span>)
2330107         StructOutputFlag = 1;
2340108         varargin(i) = [];
2350109     <span class="keyword">elseif</span> iscell(varargin{i})
2360110         <span class="comment">% Ignor cells</span>
2370111     <span class="keyword">elseif</span> strcmpi(varargin{i},<span class="string">'Numeric'</span>)
2380112         StructOutputFlag = 0;
2390113         varargin(i) = [];
2400114     <span class="keyword">elseif</span> strcmpi(varargin{i},<span class="string">'Archive'</span>)
2410115         ArchiveFlag = 1;
2420116         <span class="keyword">if</span> length(varargin) &gt; i
2430117             <span class="comment">% Look for a filename as the next input</span>
2440118             <span class="keyword">if</span> ischar(varargin{i+1})
2450119                 FileName = varargin{i+1};
2460120                 varargin(i+1) = [];
2470121             <span class="keyword">end</span>
2480122         <span class="keyword">end</span>
2490123         varargin(i) = [];
2500124     <span class="keyword">elseif</span> strcmpi(varargin{i},<span class="string">'NoArchive'</span>)
2510125         ArchiveFlag = 0;
2520126         varargin(i) = [];
2530127     <span class="keyword">elseif</span> strcmpi(varargin{i},<span class="string">'Zeta'</span>) || strcmpi(varargin{i},<span class="string">'Physics'</span>)
2540128         UnitsFlag = <span class="string">'Physics'</span>;
2550129         varargin(i) = [];
2560130         <span class="keyword">if</span> length(varargin) &gt;= i
2570131             <span class="keyword">if</span> isnumeric(varargin{i})
2580132                 MCF = varargin{i};
2590133                 varargin(i) = [];
2600134                 <span class="keyword">if</span> any(size(MCF)&gt;1)
2610135                     error(<span class="string">'Input MCF must be a scalar'</span>);
2620136                 <span class="keyword">end</span>
2630137             <span class="keyword">end</span>
2640138         <span class="keyword">end</span>
2650139     <span class="keyword">elseif</span> strcmpi(varargin{i},<span class="string">'Hardware'</span>)
2660140         UnitsFlag = <span class="string">'Hardware'</span>;
2670141         varargin(i) = [];
2680142         <span class="keyword">if</span> length(varargin) &gt;= i
2690143             <span class="keyword">if</span> isnumeric(varargin{i})
2700144                 MCF = varargin{i};
2710145                 varargin(i) = [];
2720146                 <span class="keyword">if</span> any(size(MCF)&gt;1)
2730147                     error(<span class="string">'Input MCF must be a scalar'</span>);
2740148                 <span class="keyword">end</span>
2750149             <span class="keyword">end</span>
2760150         <span class="keyword">end</span>
2770151     <span class="keyword">elseif</span> strcmpi(varargin{i},<span class="string">'Simulator'</span>) || strcmpi(varargin{i},<span class="string">'Model'</span>) || strcmpi(varargin{i},<span class="string">'Online'</span>) || strcmpi(varargin{i},<span class="string">'Manual'</span>)
2780152         ModeFlag = varargin{i};
2790153         varargin(i) = [];
2800154     <span class="keyword">elseif</span> strcmpi(varargin{i},<span class="string">'NoDisplay'</span>)
2810155         DisplayFlag = 0;
2820156         varargin(i) = [];
2830157     <span class="keyword">elseif</span> strcmpi(varargin{i},<span class="string">'Display'</span>)
2840158         DisplayFlag = 1;
2850159         varargin(i) = [];
2860160     <span class="keyword">end</span>
2870161 <span class="keyword">end</span>
2880162
2890163 <span class="comment">% Default for Model is no display, no archive</span>
2900164 <span class="keyword">if</span> DisplayFlag == -1 &amp;&amp; strcmpi(ModeFlag,<span class="string">'Model'</span>)
2910165     DisplayFlag = 0;
2920166 <span class="keyword">end</span>
2930167 <span class="keyword">if</span> ArchiveFlag == -1 &amp;&amp; strcmpi(ModeFlag,<span class="string">'Model'</span>)
2940168     ArchiveFlag = 0;
2950169 <span class="keyword">end</span>
2960170
2970171
2980172 <span class="comment">% DeltaRF input</span>
2990173 <span class="keyword">if</span> length(varargin) &gt;= 1
3000174     <span class="keyword">if</span> isnumeric(varargin{1})
3010175         DeltaRF = varargin{1};
3020176     <span class="keyword">else</span>
3030177         DeltaRF = [];
3040178     <span class="keyword">end</span>
3050179 <span class="keyword">else</span>
3060180     DeltaRF = [];
3070181 <span class="keyword">end</span>
3080182
3090183 <span class="comment">% WaitFlag input</span>
3100184 <span class="keyword">if</span> length(varargin) &gt;= 2
3110185     WaitFlag = varargin{2};
3120186 <span class="keyword">end</span>
3130187 <span class="keyword">if</span> isempty(WaitFlag) || WaitFlag == -3
3140188     WaitFlag = 2.2 * <a href="getfamilydata.html" class="code" title="function [Data, ErrorFlag] = getfamilydata(Family, Field1, Field2, DeviceList)">getfamilydata</a>(<span class="string">'TuneDelay'</span>);
3150189 <span class="keyword">end</span>
3160190 <span class="keyword">if</span> isempty(WaitFlag)
3170191     WaitFlag = input(<span class="string">'   Delay for Tune Measurement (Seconds, Keyboard Pause = -4, or Manual Tune Input = -5) = '</span>);
3180192 <span class="keyword">end</span>
3190193
3200194
3210195 <span class="comment">% Archive data structure</span>
3220196 <span class="keyword">if</span> ArchiveFlag
3230197     <span class="keyword">if</span> isempty(FileName)
3240198         FileName = appendtimestamp(<a href="getfamilydata.html" class="code" title="function [Data, ErrorFlag] = getfamilydata(Family, Field1, Field2, DeviceList)">getfamilydata</a>(<span class="string">'Default'</span>, <span class="string">'ChroArchiveFile'</span>));
3250199         DirectoryName = <a href="getfamilydata.html" class="code" title="function [Data, ErrorFlag] = getfamilydata(Family, Field1, Field2, DeviceList)">getfamilydata</a>(<span class="string">'Directory'</span>,<span class="string">'ChroData'</span>);
3260200         <span class="keyword">if</span> isempty(DirectoryName)
3270201             DirectoryName = [<a href="getfamilydata.html" class="code" title="function [Data, ErrorFlag] = getfamilydata(Family, Field1, Field2, DeviceList)">getfamilydata</a>(<span class="string">'Directory'</span>,<span class="string">'DataRoot'</span>) <span class="string">'Chromaticity'</span>, filesep];
3280202         <span class="keyword">else</span>
3290203             <span class="comment">% Make sure default directory exists</span>
3300204             DirStart = pwd;
3310205             [DirectoryName, ErrorFlag] = gotodirectory(DirectoryName);
3320206             cd(DirStart);
3330207         <span class="keyword">end</span>
3340208         [FileName, DirectoryName] = uiputfile(<span class="string">'*.mat'</span>, <span class="string">'Select Chromaticity File'</span>, [DirectoryName FileName]);
3350209         <span class="keyword">if</span> FileName == 0
3360210             ArchiveFlag = 0;
3370211             disp(<span class="string">'   Chromaticity measurement canceled.'</span>);
3380212             Chromaticity=[]; FileName=<span class="string">''</span>;
3390213             <span class="keyword">return</span>
3400214         <span class="keyword">end</span>
3410215         FileName = [DirectoryName, FileName];
3420216     <span class="keyword">elseif</span> FileName == -1
3430217         FileName = appendtimestamp(<a href="getfamilydata.html" class="code" title="function [Data, ErrorFlag] = getfamilydata(Family, Field1, Field2, DeviceList)">getfamilydata</a>(<span class="string">'Default'</span>, <span class="string">'ChroArchiveFile'</span>));
3440218         DirectoryName = <a href="getfamilydata.html" class="code" title="function [Data, ErrorFlag] = getfamilydata(Family, Field1, Field2, DeviceList)">getfamilydata</a>(<span class="string">'Directory'</span>,<span class="string">'ChroData'</span>);
3450219         <span class="keyword">if</span> isempty(DirectoryName)
3460220             DirectoryName = [<a href="getfamilydata.html" class="code" title="function [Data, ErrorFlag] = getfamilydata(Family, Field1, Field2, DeviceList)">getfamilydata</a>(<span class="string">'Directory'</span>,<span class="string">'DataRoot'</span>) <span class="string">'Chromaticity'</span>, filesep];
3470221         <span class="keyword">end</span>
3480222         FileName = [DirectoryName, FileName];
3490223     <span class="keyword">end</span>
3500224 <span class="keyword">end</span>
3510225
3520226
3530227 <span class="comment">% Get units from the RF frequency</span>
3540228 <span class="keyword">if</span> isempty(UnitsFlag)
3550229     UnitsFlag = <a href="getfamilydata.html" class="code" title="function [Data, ErrorFlag] = getfamilydata(Family, Field1, Field2, DeviceList)">getfamilydata</a>(<span class="string">'RF'</span>,<span class="string">'Setpoint'</span>,<span class="string">'Units'</span>);
3560230 <span class="keyword">end</span>
3570231
3580232
3590233 <span class="comment">% if isempty(ModeFlag)</span>
3600234 <span class="comment">%     if strcmpi(getfamilydata('RF','Setpoint','Mode'), getfamilydata(BPMxFamily,'Monitor','Mode'))</span>
3610235 <span class="comment">%         ModeFlag = getfamilydata(BPMxFamily,'Monitor','Mode');</span>
3620236 <span class="comment">%     else</span>
3630237 <span class="comment">%         error('Mix Mode for RF and orbits');</span>
3640238 <span class="comment">%     end</span>
3650239 <span class="comment">% end</span>
3660240
3670241
3680242
3690243 <span class="keyword">if</span> strcmpi(UnitsFlag,<span class="string">'Hardware'</span>)
3700244     RFUnitsString = <a href="getfamilydata.html" class="code" title="function [Data, ErrorFlag] = getfamilydata(Family, Field1, Field2, DeviceList)">getfamilydata</a>(<span class="string">'RF'</span>,<span class="string">'Setpoint'</span>,<span class="string">'HWUnits'</span>);
3710245 <span class="keyword">elseif</span> strcmpi(UnitsFlag,<span class="string">'Physics'</span>)
3720246     RFUnitsString = <a href="getfamilydata.html" class="code" title="function [Data, ErrorFlag] = getfamilydata(Family, Field1, Field2, DeviceList)">getfamilydata</a>(<span class="string">'RF'</span>,<span class="string">'Setpoint'</span>,<span class="string">'PhysicsUnits'</span>);
3730247 <span class="keyword">else</span>
3740248     error(<span class="string">'RF units unknown.  Inputs DeltaRF directly.'</span>);
3750249 <span class="keyword">end</span>
3760250
3770251 <span class="comment">% DeltaRF default</span>
3780252 <span class="keyword">if</span> isempty(DeltaRF)
3790253     <span class="comment">% Get the default from the AD is in Hardware units</span>
3800254     DeltaRF = <a href="getfamilydata.html" class="code" title="function [Data, ErrorFlag] = getfamilydata(Family, Field1, Field2, DeviceList)">getfamilydata</a>(<span class="string">'DeltaRFChro'</span>);
3810255     
3820256     <span class="comment">% If the default is not in the AD</span>
3830257     <span class="keyword">if</span> isempty(DeltaRF)
3840258         DeltaRF = <a href="getrf.html" class="code" title="function [RFsp, RFam, DataTime, ErrorFlag] = getrf(varargin)">getrf</a>(<span class="string">'Hardware'</span>) * <a href="getmcf.html" class="code" title="function Alpha = getmcf(ModelString)">getmcf</a> * [-.004 -.002 0 .002 .004] ;  <span class="comment">% .2% energy change per step</span>
3850259 <span class="comment">%         DeltaRF = [-100 -50 0 50 150];  % Hz</span>
3860260         <span class="comment">%if strcmpi(RFUnitsString, 'Hz')</span>
3870261         <span class="comment">%    % Default units OK</span>
3880262         <span class="comment">%elseif strcmpi(RFUnitsString, 'kHz')</span>
3890263         <span class="comment">%    % Change to kHz</span>
3900264         <span class="comment">%    DeltaRF = DeltaRF / 1e3;</span>
3910265         <span class="comment">%elseif strcmpi(RFUnitsString, 'MHz')</span>
3920266         <span class="comment">%    % Change to MHz</span>
3930267         <span class="comment">%    DeltaRF = DeltaRF / 1e6;</span>
3940268         <span class="comment">%else</span>
3950269         <span class="comment">%    error('RF units unknown.  Input DeltaRF directly or put the default in AD.DeltaRFChro.');</span>
3960270         <span class="comment">%end</span>
3970271     <span class="keyword">else</span>
3980272         <span class="keyword">if</span> strcmpi(UnitsFlag,<span class="string">'Physics'</span>)
3990273             <span class="comment">% Since the default from the AO must be in hardware units, change to physics units</span>
4000274             DeltaRF = <a href="hw2physics.html" class="code" title="function S = hw2physics(Family, Field, value, DeviceList, Energy)">hw2physics</a>(<span class="string">'RF'</span>, <span class="string">'Setpoint'</span>, DeltaRF, [1 1], ModeFlag);
4010275         <span class="keyword">end</span>
4020276     <span class="keyword">end</span>   
4030277 <span class="keyword">end</span>
4040278
4050279
4060280 <span class="comment">% Check DeltaRF for resonable values</span>
4070281 <span class="keyword">if</span> strcmpi(RFUnitsString, <span class="string">'MHz'</span>)
4080282     <span class="keyword">if</span> abs(max(DeltaRF)-min(DeltaRF)) &gt; .020;  <span class="comment">% .020 MHz</span>
4090283         tmp = questdlg(sprintf(<span class="string">'%f MHz is a large RF change.  Do you want to continue?'</span>, abs(max(DeltaRF)-min(DeltaRF))),<span class="string">'Dispersion Measurement'</span>,<span class="string">'YES'</span>,<span class="string">'NO'</span>,<span class="string">'YES'</span>);
4100284         <span class="keyword">if</span> strcmp(tmp,<span class="string">'NO'</span>)
4110285             Chromaticity=[];
4120286             <span class="keyword">return</span>
4130287         <span class="keyword">end</span>
4140288     <span class="keyword">end</span>
4150289 <span class="keyword">elseif</span> strcmpi(RFUnitsString, <span class="string">'kHz'</span>)
4160290     <span class="keyword">if</span> abs(max(DeltaRF)-min(DeltaRF)) &gt; 20;  <span class="comment">% kHz</span>
4170291         tmp = questdlg(sprintf(<span class="string">'%f kHz is a large RF change.  Do you want to continue?'</span>, abs(max(DeltaRF)-min(DeltaRF))),<span class="string">'Dispersion Measurement'</span>,<span class="string">'YES'</span>,<span class="string">'NO'</span>,<span class="string">'YES'</span>);
4180292         <span class="keyword">if</span> strcmp(tmp,<span class="string">'NO'</span>)
4190293             Chromaticity=[];
4200294             <span class="keyword">return</span>
4210295         <span class="keyword">end</span>
4220296     <span class="keyword">end</span>
4230297 <span class="keyword">elseif</span> strcmpi(RFUnitsString, <span class="string">'Hz'</span>)
4240298     <span class="keyword">if</span> abs(max(DeltaRF)-min(DeltaRF)) &gt; 20000;  <span class="comment">% Hz</span>
4250299         tmp = questdlg(sprintf(<span class="string">'%f Hz is a large RF change.  Do you want to continue?'</span>, abs(max(DeltaRF)-min(DeltaRF))),<span class="string">'Dispersion Measurement'</span>,<span class="string">'YES'</span>,<span class="string">'NO'</span>,<span class="string">'YES'</span>);
4260300         <span class="keyword">if</span> strcmp(tmp,<span class="string">'NO'</span>)
4270301             Chromaticity=[];
4280302             <span class="keyword">return</span>
4290303         <span class="keyword">end</span>
4300304     <span class="keyword">end</span>
4310305 <span class="keyword">else</span>
4320306     <span class="comment">% Don't who how to check, hence no check made</span>
4330307 <span class="keyword">end</span>
4340308
4350309 <span class="comment">% DeltaRF must be in &quot;RFUnitsString&quot; units at this point</span>
4360310
4370311
4380312 RFsp = <a href="getrf.html" class="code" title="function [RFsp, RFam, DataTime, ErrorFlag] = getrf(varargin)">getrf</a>(<span class="string">'Struct'</span>, UnitsFlag, ModeFlag);
4390313
4400314 <span class="keyword">if</span> isempty(MCF)
4410315     MCF = <a href="getmcf.html" class="code" title="function Alpha = getmcf(ModelString)">getmcf</a>(ModeFlag);
4420316 <span class="keyword">end</span>
4430317
4440318
4450319 <span class="comment">% Fill the chromaticity structure (response matrix structure + some fields)</span>
4460320 c.Data = [];
4470321 c.FamilyName = <span class="string">'Chromaticity'</span>;
4480322 <span class="keyword">if</span> <a href="isfamily.html" class="code" title="function  [FamilyFlag, AO] = isfamily(Family, Field)">isfamily</a>(<span class="string">'TUNE'</span>)
4490323     c.Monitor = <a href="family2datastruct.html" class="code" title="function [DataStruct, ErrorFlag] = family2datastruct(varargin)">family2datastruct</a>(<span class="string">'TUNE'</span>,<span class="string">'Monitor'</span>,[1 1;1 2]);
4500324 <span class="keyword">else</span>
4510325     c.Monitor = <a href="gettune.html" class="code" title="function [Tune, tout, DataTime, ErrorFlag] = gettune(varargin)">gettune</a>(<span class="string">'Struct'</span>, <span class="string">'Model'</span>);  <span class="comment">% Just to fill the structure</span>
4520326     c.Monitor.Data = NaN * c.Monitor.Data;
4530327 <span class="keyword">end</span>
4540328 c.Monitor = <a href="gettune.html" class="code" title="function [Tune, tout, DataTime, ErrorFlag] = gettune(varargin)">gettune</a>(<span class="string">'Struct'</span>, ModeFlag);     <span class="comment">% Should WaitFlag before to be sure to get a good measurement ?????</span>
4550329 c.Actuator = RFsp;
4560330 c.ActuatorDelta = DeltaRF;
4570331 c.GeV = <a href="getenergy.html" class="code" title="function [Energy, HCMEnergy] = getenergy(varargin)">getenergy</a>(ModeFlag);
4580332 c.DCCT = <a href="getam.html" class="code" title="function [AM, tout, DataTime, ErrorFlag] = getam(varargin)">getam</a>(<span class="string">'DCCT'</span>, ModeFlag);
4590333 c.ModulationMethod = <span class="string">'Unipolar'</span>;
4600334 c.WaitFlag = WaitFlag;
4610335 c.TimeStamp = clock;
4620336 c.Mode = ModeFlag;
4630337 c.Units = UnitsFlag;
4640338 c.UnitsString = [];
4650339 c.DataDescriptor = <span class="string">'Chromaticity'</span>;
4660340 c.CreatedBy = <span class="string">'measchro'</span>;
4670341 c.OperationalMode = <a href="getfamilydata.html" class="code" title="function [Data, ErrorFlag] = getfamilydata(Family, Field1, Field2, DeviceList)">getfamilydata</a>(<span class="string">'OperationalMode'</span>);
4680342
4690343 <span class="comment">% Nonstandard response matrix fields</span>
4700344 <span class="keyword">if</span> strcmpi(ModeFlag,<span class="string">'Manual'</span>)
4710345     c.X = NaN;
4720346     c.Y = NaN;
4730347 <span class="keyword">else</span>
4740348     c.X = <a href="getx.html" class="code" title="function [AM, tout, DataTime, ErrorFlag] = getx(varargin)">getx</a>(<span class="string">'Struct'</span>, UnitsFlag, ModeFlag);
4750349     c.Y = <a href="gety.html" class="code" title="function [AM, tout, DataTime, ErrorFlag] = gety(varargin)">gety</a>(<span class="string">'Struct'</span>, UnitsFlag, ModeFlag);
4760350 <span class="keyword">end</span>
4770351 c.MCF = MCF;
4780352 RF0 = RFsp.Data(1);
4790353 c.dp = -DeltaRF / (RF0*MCF);
4800354
4810355
4820356 <span class="keyword">if</span> strcmpi(ModeFlag,<span class="string">'Model'</span>) || strcmpi(ModeFlag,<span class="string">'Simulator'</span>)
4830357     <span class="comment">% No need for delays with the model</span>
4840358     WaitFlag = 0;
4850359     ExtraDelay = 0;
4860360 <span class="keyword">end</span>
4870361
4880362
4890363 <span class="keyword">if</span> strcmpi(ModeFlag,<span class="string">'Model'</span>)
4900364     c.Data = modelchro(<span class="string">'Physics'</span>);
4910365     
4920366     <span class="keyword">if</span> strcmpi(UnitsFlag,<span class="string">'Physics'</span>)
4930367         TuneUnitsString = <a href="getfamilydata.html" class="code" title="function [Data, ErrorFlag] = getfamilydata(Family, Field1, Field2, DeviceList)">getfamilydata</a>(<span class="string">'TUNE'</span>,<span class="string">'Monitor'</span>,<span class="string">'PhysicsUnits'</span>);
4940368         <span class="keyword">if</span> isempty(TuneUnitsString)
4950369             TuneUnitsString = <span class="string">'Fractional Tune'</span>;
4960370         <span class="keyword">end</span>
4970371         c.UnitsString = [TuneUnitsString, <span class="string">'/(dp/p)'</span>];
4980372     <span class="keyword">else</span>
4990373         <span class="comment">% Tune Shift vs. RF Frequency</span>
5000374         c.Data(1,1) = c.Data(1,1) / (-RF0 * MCF);
5010375         c.Data(2,1) = c.Data(2,1) / (-RF0 * MCF);       
5020376         TuneUnitsString = <a href="getfamilydata.html" class="code" title="function [Data, ErrorFlag] = getfamilydata(Family, Field1, Field2, DeviceList)">getfamilydata</a>(<span class="string">'TUNE'</span>,<span class="string">'Monitor'</span>,<span class="string">'HWUnits'</span>);
5030377         <span class="keyword">if</span> isempty(TuneUnitsString)
5040378             TuneUnitsString = <span class="string">'Fractional Tune'</span>;
5050379         <span class="keyword">end</span>
5060380         c.UnitsString = [TuneUnitsString, <span class="string">'/'</span>,<a href="getfamilydata.html" class="code" title="function [Data, ErrorFlag] = getfamilydata(Family, Field1, Field2, DeviceList)">getfamilydata</a>(<span class="string">'RF'</span>,<span class="string">'Setpoint'</span>,<span class="string">'HWUnits'</span>)];
5070381     <span class="keyword">end</span>
5080382     
5090383 <span class="keyword">else</span>
5100384     <span class="comment">% Online or Simulator</span>
5110385     <span class="comment">% Start measurement</span>
5120386     <span class="keyword">if</span> DisplayFlag
5130387         fprintf(<span class="string">'   Begin chromaticity measurement\n'</span>);
5140388     <span class="keyword">end</span>   
5150389     <span class="keyword">for</span> i = 1:length(DeltaRF)
5160390         <span class="comment">%setrf(RF0 + DeltaRF(i), UnitsFlag, ModeFlag);</span>
5170391         <span class="keyword">if</span> (isempty(ModeFlag) &amp;&amp; strcmpi(<a href="getfamilydata.html" class="code" title="function [Data, ErrorFlag] = getfamilydata(Family, Field1, Field2, DeviceList)">getfamilydata</a>(<span class="string">'RF'</span>,<span class="string">'Setpoint'</span>,<span class="string">'Mode'</span>),<span class="string">'Manual'</span>)) || strcmpi(ModeFlag,<span class="string">'Manual'</span>)
5180392             <span class="comment">% One shot setting of RF</span>
5190393             <a href="setrf.html" class="code" title="function setrf(RF, varargin)">setrf</a>(RF0 + DeltaRF(i), UnitsFlag, ModeFlag);
5200394         <span class="keyword">else</span>
5210395             <span class="comment">% Slow setting of RF</span>
5220396             rf = <a href="getrf.html" class="code" title="function [RFsp, RFam, DataTime, ErrorFlag] = getrf(varargin)">getrf</a>(UnitsFlag, ModeFlag);
5230397             <span class="keyword">for</span> k = 1:NRFSteps
5240398                 <a href="setsp.html" class="code" title="function ErrorFlag = setsp(Family, varargin)">setsp</a>(<span class="string">'RF'</span>, rf + k/NRFSteps * (RF0+DeltaRF(i)-rf), [], -1, UnitsFlag, ModeFlag);
5250399                 pause(0.1);
5260400             <span class="keyword">end</span>
5270401         <span class="keyword">end</span>
5280402         
5290403         RF(:,i) = <a href="getrf.html" class="code" title="function [RFsp, RFam, DataTime, ErrorFlag] = getrf(varargin)">getrf</a>(UnitsFlag, ModeFlag);
5300404         <span class="keyword">if</span> DisplayFlag
5310405             fprintf(<span class="string">'   %d. RF frequency is %.5f\n'</span>, i, RF(:,i));
5320406         <span class="keyword">end</span>
5330407
5340408         <span class="comment">% Wait for tune monitor to have fresh data</span>
5350409         <span class="keyword">if</span> WaitFlag &gt;= 0
5360410             <span class="keyword">if</span> DisplayFlag &amp;&amp; ~strcmpi(ModeFlag,<span class="string">'Manual'</span>)
5370411                 fprintf(<span class="string">'      Pausing %f seconds for the tune measurement\n'</span>, WaitFlag);
5380412                 pause(0);
5390413             <span class="keyword">end</span>
5400414             sleep(WaitFlag);
5410415             Tune(:,i) = <a href="gettune.html" class="code" title="function [Tune, tout, DataTime, ErrorFlag] = gettune(varargin)">gettune</a>(ModeFlag);
5420416         <span class="keyword">elseif</span> WaitFlag == -4
5430417             tmp = input(<span class="string">'      Hit return when the tune measurement is ready. '</span>);
5440418             Tune(:,i) = <a href="gettune.html" class="code" title="function [Tune, tout, DataTime, ErrorFlag] = gettune(varargin)">gettune</a>(ModeFlag);
5450419         <span class="keyword">elseif</span> WaitFlag == -5
5460420             Tune(1,i) = input(<span class="string">'      Input the horizontal tune = '</span>);
5470421             Tune(2,i) = input(<span class="string">'      Input the  vertical  tune = '</span>);
5480422         <span class="keyword">else</span>
5490423             error(<span class="string">'Tune delay method unknown'</span>);
5500424         <span class="keyword">end</span> 
5510425         
5520426         <span class="comment">%if any(isnan(Tune))</span>
5530427         <span class="comment">%    fprintf('   Chromaticity measurement failed.  RF frequency reset.\n');</span>
5540428         <span class="comment">%    setrf(RF0, UnitsFlag, ModeFlag);</span>
5550429         <span class="comment">%    Chromaticity = [NaN; NaN];</span>
5560430         <span class="comment">%    return;</span>
5570431         <span class="comment">%end</span>
5580432     <span class="keyword">end</span>
5590433     
5600434     
5610435     <span class="comment">% Reset RF</span>
5620436     <span class="comment">%setrf(RF0, UnitsFlag, ModeFlag);</span>
5630437     <span class="keyword">if</span> isempty(ModeFlag) &amp;&amp; strcmpi(<a href="getfamilydata.html" class="code" title="function [Data, ErrorFlag] = getfamilydata(Family, Field1, Field2, DeviceList)">getfamilydata</a>(<span class="string">'RF'</span>,<span class="string">'Setpoint'</span>,<span class="string">'Mode'</span>),<span class="string">'Manual'</span>)
5640438         <span class="comment">% One shot setting of RF</span>
5650439         <a href="setrf.html" class="code" title="function setrf(RF, varargin)">setrf</a>(RF0, UnitsFlag, ModeFlag);
5660440     <span class="keyword">else</span>
5670441         <span class="comment">% Slow setting of RF</span>
5680442         rf = <a href="getrf.html" class="code" title="function [RFsp, RFam, DataTime, ErrorFlag] = getrf(varargin)">getrf</a>(UnitsFlag, ModeFlag);
5690443         <span class="keyword">for</span> k = 1:NRFSteps
5700444             <a href="setsp.html" class="code" title="function ErrorFlag = setsp(Family, varargin)">setsp</a>(<span class="string">'RF'</span>, rf + k/NRFSteps * (RF0-rf), [], -1, UnitsFlag, ModeFlag);
5710445             pause(0.1);
5720446         <span class="keyword">end</span>
5730447     <span class="keyword">end</span>
5740448     
5750449     
5760450     <span class="comment">% Load Tune measurements into the chromaticy structure</span>
5770451     c.Tune = Tune;
5780452     
5790453     <span class="keyword">if</span> strcmpi(UnitsFlag,<span class="string">'Physics'</span>)
5800454         <span class="comment">%%%%%%%%%%%%%%%%%%%%%%%%%%%</span>
5810455         <span class="comment">% Tune Shift vs. Momentum %</span>
5820456         <span class="comment">%%%%%%%%%%%%%%%%%%%%%%%%%%%</span>
5830457         
5840458         <span class="comment">% Horizontal tune vs. momentum</span>
5850459         p = polyfit(c.dp, Tune(1,:), 2);              <span class="comment">%2nd order polynomial fit to data</span>
5860460         c.PolyFit(1,:) = p;
5870461         c.Data(1,1) = p(2);
5880462         
5890463         <span class="comment">% Vertical  tune vs. rf frequency</span>
5900464         p = polyfit(c.dp, Tune(2,:), 2);
5910465         c.PolyFit(2,:) = p;
5920466         c.Data(2,1) = p(2);
5930467         
5940468         TuneUnitsString = <a href="getfamilydata.html" class="code" title="function [Data, ErrorFlag] = getfamilydata(Family, Field1, Field2, DeviceList)">getfamilydata</a>(<span class="string">'TUNE'</span>,<span class="string">'Monitor'</span>,<span class="string">'PhysicsUnits'</span>);
5950469         <span class="keyword">if</span> isempty(TuneUnitsString)
5960470             c.UnitsString = [<span class="string">'Fractional Tune/(dp/p)'</span>];
5970471         <span class="keyword">else</span>
5980472             c.UnitsString = [TuneUnitsString,<span class="string">'/(dp/p)'</span>];
5990473         <span class="keyword">end</span>
6000474         
6010475         <span class="comment">%fprintf('\n   Horizontal Chromaticity (Un-normalized) = %f \n', c.Data(1));</span>
6020476         <span class="comment">%fprintf('   Vertical   Chromaticity (Un-normalized) = %f \n'  , c.Data(2));</span>
6030477     <span class="keyword">else</span>
6040478         <span class="comment">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span>
6050479         <span class="comment">% Tune Shift vs. RF Frequency %</span>
6060480         <span class="comment">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span>
6070481         
6080482         <span class="comment">% Horizontal tune vs. rf frequency</span>
6090483         p = polyfit(DeltaRF, Tune(1,:), 2);      <span class="comment">% 2nd order polynomial fit to data</span>
6100484         c.PolyFit(1,:) = p;
6110485         c.Data(1,1) = p(2);
6120486         
6130487         <span class="comment">% Vertical  tune vs. rf frequency</span>
6140488         p = polyfit(DeltaRF, Tune(2,:), 2);
6150489         c.PolyFit(2,:) = p;
6160490         c.Data(2,1) = p(2);
6170491         
6180492         TuneUnitsString = <a href="getfamilydata.html" class="code" title="function [Data, ErrorFlag] = getfamilydata(Family, Field1, Field2, DeviceList)">getfamilydata</a>(<span class="string">'TUNE'</span>,<span class="string">'Monitor'</span>,<span class="string">'HWUnits'</span>);
6190493         <span class="keyword">if</span> isempty(TuneUnitsString)
6200494             c.UnitsString = [<span class="string">'Fractional Tune/'</span>,<a href="getfamilydata.html" class="code" title="function [Data, ErrorFlag] = getfamilydata(Family, Field1, Field2, DeviceList)">getfamilydata</a>(<span class="string">'RF'</span>,<span class="string">'Setpoint'</span>,<span class="string">'HWUnits'</span>)];
6210495         <span class="keyword">else</span>
6220496             c.UnitsString = [TuneUnitsString,<span class="string">'/'</span>,<a href="getfamilydata.html" class="code" title="function [Data, ErrorFlag] = getfamilydata(Family, Field1, Field2, DeviceList)">getfamilydata</a>(<span class="string">'RF'</span>,<span class="string">'Setpoint'</span>,<span class="string">'HWUnits'</span>)];
6230497         <span class="keyword">end</span>
6240498     <span class="keyword">end</span>
6250499 <span class="keyword">end</span>
6260500
6270501 <span class="keyword">if</span> DisplayFlag
6280502     fprintf(<span class="string">'   Chromaticity = %f [%s]\n'</span>, c.Data(1), c.UnitsString);
6290503     fprintf(<span class="string">'   Chromaticity = %f [%s]\n'</span>, c.Data(2), c.UnitsString);
6300504 <span class="keyword">end</span>
6310505
6320506 <span class="keyword">if</span> DisplayFlag &amp;&amp; ~strcmpi(ModeFlag,<span class="string">'Model'</span>)
6330507     <span class="comment">%figure;</span>
6340508     <a href="plotchro.html" class="code" title="function [c, FileName] = plotchro(varargin)">plotchro</a>(c);
6350509 <span class="keyword">end</span>
6360510
6370511
6380512 <span class="comment">% Archive data structure</span>
6390513 <span class="keyword">if</span> ArchiveFlag
6400514     <span class="comment">% If the filename contains a directory then make sure it exists</span>
6410515     [DirectoryName, FileName, Ext] = fileparts(FileName);
6420516     DirStart = pwd;
6430517     [DirectoryName, ErrorFlag] = gotodirectory(DirectoryName);
6440518     Chromaticity = c;
6450519     save(FileName, <span class="string">'Chromaticity'</span>);
6460520     <span class="keyword">if</span> DisplayFlag
6470521         fprintf(<span class="string">'   Chromaticity data saved to %s.mat\n'</span>, [DirectoryName FileName]);
6480522         <span class="keyword">if</span> ErrorFlag
6490523             fprintf(<span class="string">'   Warning: %s was not the desired directory\n'</span>, DirectoryName);
6500524         <span class="keyword">end</span>
6510525     <span class="keyword">end</span>
6520526     cd(DirStart);
6530527     FileName = [DirectoryName, FileName, <span class="string">'.mat'</span>];
6540528 <span class="keyword">end</span>
6550529 <span class="keyword">if</span> FileName == -1
6560530     FileName = <span class="string">''</span>;
6570531 <span class="keyword">end</span>
6580532
6590533
6600534 <span class="comment">% Load output data</span>
6610535 <span class="keyword">if</span> StructOutputFlag
6620536     Chromaticity = c;
6630537 <span class="keyword">else</span>
6640538     Chromaticity = c.Data;
6650539 <span class="keyword">end</span>
6660540
6670541
6680542 <span class="keyword">if</span> DisplayFlag
6690543     fprintf(<span class="string">'   Chromaticity measurement is complete.\n'</span>);
6700544 <span class="keyword">end</span>
6710545
6720546</pre></div>
673<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>
674</body>
675</html>
Note: See TracBrowser for help on using the repository browser.