source: MML/trunk/applications/doc_html/applications/loco/locoplotrms.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 locoplotrms</title>
6  <meta name="keywords" content="locoplotrms">
7  <meta name="description" content="LOCOPLOTRMS - Plots the RMS of the LOCO fits">
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; locoplotrms.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>locoplotrms
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>LOCOPLOTRMS - Plots the RMS of the LOCO fits</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 locoplotrms(FileName, IterationNumber, PlotType) </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">LOCOPLOTRMS - Plots the RMS of the LOCO fits
31  locoplotrms({BPMData, CMData, LocoMeasData, LocoModel, FitParameters, LocoFlags, RINGData}, IterationNumber, PlotType)
32      or
33  locoplotrms(FileName, IterationNumber, PlotType)
34
35  INPUTS
36  1. FileName = data file name
37  2. IterationNumber = 0, 1, 2, etc
38  3. PlotType = 1 - Horizontal BPM by BPM (row)
39                2 - Horizontal RMS by corrector magnet (column)
40                3 - Vertical   RMS by BPM (row)
41                4 - Vertical   RMS by corrector magnet (column)
42           or
43  1. BPMData
44  2. CMData
45  3. LocoMeasData
46  4. LocoModel
47  5. FitParameters
48  6. LocoFlags
49  7. RINGData
50
51  NOTE
52  1. If outliers exist, then plots with and without outliers will be shown.
53
54  Written by Greg Portmann</pre></div>
55
56<!-- crossreference -->
57<h2><a name="_cross"></a>CROSS-REFERENCE INFORMATION <a href="#_top"><img alt="^" border="0" src="../../up.png"></a></h2>
58This function calls:
59<ul style="list-style-image:url(../../matlabicon.gif)">
60<li><a href="locomcf.html" class="code" title="function Alpha = locomcf(RINGData)">locomcf</a>  LOCOMCF - Returns the momentum compaction factor</li><li><a href="locosetlatticeparam.html" class="code" title="function RINGData = locosetlatticeparam(RINGData, LocoParams, LocoValues)">locosetlatticeparam</a>      LOCOSETLATTICEPARAM - Set the AT lattice from the LOCO fit parameters</li></ul>
61This function is called by:
62<ul style="list-style-image:url(../../matlabicon.gif)">
63<li><a href="locogui.html" class="code" title="function varargout = locogui(varargin)">locogui</a>      LOCOGUI - Graphical interface for running the LOCO algorithm</li></ul>
64<!-- crossreference -->
65
66
67<h2><a name="_source"></a>SOURCE CODE <a href="#_top"><img alt="^" border="0" src="../../up.png"></a></h2>
68<div class="fragment"><pre>0001 <a name="_sub0" href="#_subfunctions" class="code">function locoplotrms(FileName, IterationNumber, PlotType)</a>
690002 <span class="comment">%LOCOPLOTRMS - Plots the RMS of the LOCO fits</span>
700003 <span class="comment">%  locoplotrms({BPMData, CMData, LocoMeasData, LocoModel, FitParameters, LocoFlags, RINGData}, IterationNumber, PlotType)</span>
710004 <span class="comment">%      or</span>
720005 <span class="comment">%  locoplotrms(FileName, IterationNumber, PlotType)</span>
730006 <span class="comment">%</span>
740007 <span class="comment">%  INPUTS</span>
750008 <span class="comment">%  1. FileName = data file name</span>
760009 <span class="comment">%  2. IterationNumber = 0, 1, 2, etc</span>
770010 <span class="comment">%  3. PlotType = 1 - Horizontal BPM by BPM (row)</span>
780011 <span class="comment">%                2 - Horizontal RMS by corrector magnet (column)</span>
790012 <span class="comment">%                3 - Vertical   RMS by BPM (row)</span>
800013 <span class="comment">%                4 - Vertical   RMS by corrector magnet (column)</span>
810014 <span class="comment">%           or</span>
820015 <span class="comment">%  1. BPMData</span>
830016 <span class="comment">%  2. CMData</span>
840017 <span class="comment">%  3. LocoMeasData</span>
850018 <span class="comment">%  4. LocoModel</span>
860019 <span class="comment">%  5. FitParameters</span>
870020 <span class="comment">%  6. LocoFlags</span>
880021 <span class="comment">%  7. RINGData</span>
890022 <span class="comment">%</span>
900023 <span class="comment">%  NOTE</span>
910024 <span class="comment">%  1. If outliers exist, then plots with and without outliers will be shown.</span>
920025 <span class="comment">%</span>
930026 <span class="comment">%  Written by Greg Portmann</span>
940027
950028
960029 <span class="keyword">if</span> ~nargin==3
970030     error(<span class="string">'Requires 3 inputs (see help locoplotrms).'</span>);
980031 <span class="keyword">end</span>
990032
1000033 <span class="keyword">if</span> isempty(FileName)
1010034     <span class="keyword">return</span>;
1020035 <span class="keyword">end</span>
1030036
1040037 <span class="keyword">if</span> iscell(FileName)
1050038     BPMData       = FileName{1};
1060039     CMData        = FileName{2};
1070040     LocoMeasData  = FileName{3};
1080041     LocoModel     = FileName{4};
1090042     FitParameters = FileName{5};
1100043     LocoFlags     = FileName{6};
1110044     RINGData      = FileName{7};
1120045 <span class="keyword">elseif</span> isstr(FileName)   
1130046     <span class="keyword">try</span>
1140047         load(FileName);
1150048     <span class="keyword">catch</span>
1160049         fprintf(<span class="string">'   LOCOPLOT:  File does not exist or is not a *.mat file type.\n'</span>); <span class="keyword">return</span>;
1170050     <span class="keyword">end</span>   
1180051 <span class="keyword">else</span>
1190052     error(<span class="string">'Input problem'</span>);
1200053 <span class="keyword">end</span>
1210054
1220055 <span class="keyword">if</span> length(BPMData) &gt; 1
1230056     IterationNumber = IterationNumber + 1;
1240057     <span class="keyword">if</span> IterationNumber &gt; length(BPMData)
1250058         fprintf(<span class="string">'   LOCOPLOTRMS:  The data file only has %d iterations.  Hence, the input InterationNumber cannot be %d.\n'</span>, length(BPMData)-1, IterationNumber-1);
1260059         <span class="keyword">return</span>
1270060     <span class="keyword">end</span>
1280061     
1290062     BPMData = BPMData(IterationNumber);
1300063     CMData = CMData(IterationNumber);
1310064     LocoModel = LocoModel(IterationNumber);
1320065     FitParameters = FitParameters(IterationNumber);
1330066     LocoFlags = LocoFlags(IterationNumber);
1340067 <span class="keyword">end</span>
1350068
1360069
1370070 <span class="keyword">if</span> isstr(BPMData)
1380071     FileName = BPMData;
1390072     IterationNumber = CMData;
1400073     PlotType = LocoMeasData;
1410074     
1420075     <span class="keyword">if</span> isempty(FileName)
1430076         <span class="keyword">return</span>
1440077     <span class="keyword">end</span>
1450078     <span class="keyword">try</span>
1460079         load(FileName);
1470080     <span class="keyword">catch</span>
1480081         fprintf(<span class="string">'   File does not exist or is not a *.mat file type.\n'</span>);
1490082         cla;
1500083         <span class="keyword">return</span>
1510084     <span class="keyword">end</span>
1520085         
1530086     IterationNumber = IterationNumber + 1;
1540087     BPMData = BPMData(IterationNumber);
1550088     CMData = CMData(IterationNumber);
1560089     LocoModel = LocoModel(IterationNumber);
1570090     LocoFlags = LocoFlags(IterationNumber);
1580091 <span class="keyword">else</span>
1590092     <span class="comment">% Inputs should be scalar structures, if not take the last term</span>
1600093     BPMData = BPMData(end);
1610094     CMData = CMData(end);
1620095     LocoModel = LocoModel(end);
1630096     LocoFlags = LocoFlags(end);
1640097 <span class="keyword">end</span>
1650098
1660099 <span class="keyword">if</span> isempty(LocoModel.M)
1670100     fprintf(<span class="string">'   No model available.\n'</span>);
1680101     <span class="keyword">return</span>
1690102 <span class="keyword">end</span>
1700103
1710104 Mmodel = LocoModel.M;
1720105 Outliers = LocoModel.OutlierIndex;
1730106 ChiSquare = LocoModel.ChiSquare;
1740107 Mmeas = LocoMeasData.M;
1750108
1760109 <span class="comment">% Remove unwanted data from the Mmeas and BPMSTD</span>
1770110 BPMstd = LocoMeasData.BPMSTD([BPMData.HBPMGoodDataIndex length(BPMData.HBPMIndex)+BPMData.VBPMGoodDataIndex]);
1780111 Mstd = BPMstd * ones(1,size(Mmodel,2));
1790112 Mmeas = Mmeas([BPMData.HBPMGoodDataIndex length(BPMData.HBPMIndex)+BPMData.VBPMGoodDataIndex], [CMData.HCMGoodDataIndex length(CMData.HCMIndex)+CMData.VCMGoodDataIndex]);
1800113
1810114 NHBPM = length(BPMData.HBPMGoodDataIndex);
1820115 NVBPM = length(BPMData.VBPMGoodDataIndex);
1830116 NBPM  = NHBPM + NVBPM;
1840117 NHCM = length(CMData.HCMGoodDataIndex);
1850118 NVCM = length(CMData.VCMGoodDataIndex);
1860119
1870120
1880121 <span class="comment">% Add energy shifts for fixed momentum</span>
1890122 <span class="keyword">if</span> strcmp(lower(LocoFlags.ClosedOrbitType), <span class="string">'fixedmomentum'</span>)
1900123     <span class="comment">% Add the dispersion term (measured) to the model response matrix</span>
1910124     HCMEnergyShift = CMData.HCMEnergyShift(CMData.HCMGoodDataIndex);
1920125     VCMEnergyShift = CMData.VCMEnergyShift(CMData.VCMGoodDataIndex);
1930126     
1940127     <span class="comment">% Set the lattice model</span>
1950128     <span class="keyword">for</span> j = 1:length(FitParameters.Params)
1960129         RINGData = <a href="locosetlatticeparam.html" class="code" title="function RINGData = locosetlatticeparam(RINGData, LocoParams, LocoValues)">locosetlatticeparam</a>(RINGData, FitParameters.Params{j}, FitParameters.Values(j));
1970130     <span class="keyword">end</span>
1980131     AlphaMCF = <a href="locomcf.html" class="code" title="function Alpha = locomcf(RINGData)">locomcf</a>(RINGData);
1990132     EtaXmcf = -AlphaMCF * LocoMeasData.RF * LocoMeasData.Eta(BPMData.HBPMGoodDataIndex) / LocoMeasData.DeltaRF;
2000133     EtaYmcf = -AlphaMCF * LocoMeasData.RF * LocoMeasData.Eta(length(BPMData.HBPMIndex)+BPMData.VBPMGoodDataIndex) / LocoMeasData.DeltaRF;
2010134     
2020135     <span class="keyword">for</span> i = 1:length(HCMEnergyShift)
2030136         Mmodel(:,i) = Mmodel(:,i) + HCMEnergyShift(i) * [EtaXmcf; EtaYmcf];
2040137     <span class="keyword">end</span>
2050138     
2060139     <span class="keyword">for</span> i = 1:length(VCMEnergyShift)
2070140         Mmodel(:,NHCM+i) = Mmodel(:,NHCM+i) + VCMEnergyShift(i) * [EtaXmcf; EtaYmcf];
2080141     <span class="keyword">end</span>
2090142 <span class="keyword">end</span>
2100143
2110144 M = Mmeas(:)-Mmodel(:);
2120145
2130146 <span class="comment">% RMS response matrix error</span>
2140147 M = reshape((M ./ Mstd(:)) .^ 2, NHBPM+NVBPM, NHCM+NVCM);
2150148
2160149 M11 = M(1:NHBPM     ,      1:NHCM     );
2170150 M12 = M(1:NHBPM     , NHCM+1:NHCM+NVCM);
2180151 M21 = M(NHBPM+1:NBPM,      1:NHCM     );
2190152 M22 = M(NHBPM+1:NBPM, NHCM+1:NHCM+NVCM);
2200153
2210154 BPMRMSxx = sqrt(sum(M11') / NHCM); 
2220155 BPMRMSyy = sqrt(sum(M22') / NVCM);
2230156
2240157 HCMRMS = sqrt(sum(M11) / NHBPM); 
2250158 VCMRMS = sqrt(sum(M22) / NVBPM);
2260159
2270160
2280161 <span class="keyword">switch</span> PlotType
2290162 <span class="keyword">case</span> 1
2300163     plot(BPMData.HBPMGoodDataIndex, BPMRMSxx,<span class="string">'b'</span>);
2310164     title(<span class="string">'Horizontal Response Matrix RMS by Row'</span>);
2320165     ylabel(<span class="string">'\fontsize{10}\surd\Sigma(Mmeas-Mmodel)^2/\sigma^2(BPMx)/NHCM'</span>);
2330166     xlabel(<span class="string">'Horizontal BPM Number'</span>);
2340167     axis tight
2350168     
2360169 <span class="keyword">case</span> 2
2370170     plot(CMData.HCMGoodDataIndex, HCMRMS,<span class="string">'b'</span>);
2380171     title(<span class="string">'Horizontal Response Matrix RMS by Column'</span>);
2390172     ylabel(<span class="string">'\fontsize{10}\surd\Sigma(Mmeas-Mmodel)^2/\sigma^2(BPMx)/NHBPM'</span>);
2400173     xlabel(<span class="string">'Horizontal Corrector Number'</span>);
2410174     axis tight
2420175
2430176 <span class="keyword">case</span> 3
2440177     plot(BPMData.VBPMGoodDataIndex, BPMRMSyy,<span class="string">'b'</span>);
2450178     title(<span class="string">'Vertical Response Matrix RMS by Row'</span>);
2460179     ylabel(<span class="string">'\fontsize{10}\surd\Sigma(Mmeas-Mmodel)^2/\sigma^2(BPMy)/NVCM'</span>);
2470180     xlabel(<span class="string">'Vertical BPM Number'</span>);
2480181     axis tight
2490182     
2500183 <span class="keyword">case</span> 4
2510184     plot(CMData.VCMGoodDataIndex, VCMRMS,<span class="string">'b'</span>);
2520185     title(<span class="string">'Vertical Response Matrix RMS by Column'</span>);
2530186     ylabel(<span class="string">'\fontsize{10}\surd\Sigma(Mmeas-Mmodel)^2/\sigma^2(BPMy)/NVBPM'</span>);
2540187     xlabel(<span class="string">'Vertical Corrector Number'</span>);
2550188     axis tight
2560189 <span class="keyword">end</span>
2570190
2580191
2590192 <span class="comment">% Add plot without outliers</span>
2600193 Outliers = LocoModel.OutlierIndex;
2610194 <span class="keyword">if</span> ~isempty(Outliers)
2620195     M = M(:);
2630196     M(Outliers) = 0;
2640197     
2650198     <span class="comment">% RMS response matrix error</span>
2660199     M = reshape(M, NHBPM+NVBPM, NHCM+NVCM);
2670200     
2680201     M11 = M(1:NHBPM     ,      1:NHCM     );
2690202     M12 = M(1:NHBPM     , NHCM+1:NHCM+NVCM);
2700203     M21 = M(NHBPM+1:NBPM,      1:NHCM     );
2710204     M22 = M(NHBPM+1:NBPM, NHCM+1:NHCM+NVCM);
2720205     
2730206     BPMRMSxx = sqrt(sum(M11') / NHCM); 
2740207     BPMRMSyy = sqrt(sum(M22') / NVCM);
2750208     
2760209     HCMRMS = sqrt(sum(M11) / NHBPM); 
2770210     VCMRMS = sqrt(sum(M22) / NVBPM);
2780211         
2790212     <span class="keyword">switch</span> PlotType
2800213     <span class="keyword">case</span> 1
2810214         hold on;
2820215         plot(BPMData.HBPMGoodDataIndex, BPMRMSxx, <span class="string">'--r'</span>);
2830216         hold off;
2840217         axis tight
2850218         legend(<span class="string">'Full Data Set'</span>,<span class="string">'Outliers Removed'</span>,0);
2860219     <span class="keyword">case</span> 2
2870220         hold on;
2880221         plot(CMData.HCMGoodDataIndex, HCMRMS, <span class="string">'--r'</span>);
2890222         hold off;
2900223         axis tight
2910224         legend(<span class="string">'Full Data Set'</span>,<span class="string">'Outliers Removed'</span>,0);
2920225     <span class="keyword">case</span> 3
2930226         hold on;
2940227         plot(BPMData.VBPMGoodDataIndex, BPMRMSyy, <span class="string">'--r'</span>);
2950228         hold off;
2960229         axis tight
2970230         legend(<span class="string">'Full Data Set'</span>,<span class="string">'Outliers Removed'</span>,0);
2980231     <span class="keyword">case</span> 4
2990232         hold on;
3000233         plot(CMData.VCMGoodDataIndex, VCMRMS, <span class="string">'--r'</span>);
3010234         hold off;
3020235         axis tight
3030236         legend(<span class="string">'Full Data Set'</span>,<span class="string">'Outliers Removed'</span>,0);
3040237     <span class="keyword">end</span>
3050238 <span class="keyword">end</span></pre></div>
306<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>
307</body>
308</html>
Note: See TracBrowser for help on using the repository browser.