source: MML/trunk/mml/doc_html/mml/at/calccoupling.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: 13.1 KB
Line 
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
2                "http://www.w3.org/TR/REC-html40/loose.dtd">
3<html>
4<head>
5  <title>Description of calccoupling</title>
6  <meta name="keywords" content="calccoupling">
7  <meta name="description" content="CALCCOUPLING - Calculates the coupling and tilt of the AT model">
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; <a href="index.html">at</a> &gt; calccoupling.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/at&nbsp;<img alt=">" border="0" src="../../right.png"></a></td></tr></table>-->
19
20<h1>calccoupling
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>CALCCOUPLING - Calculates the coupling and tilt of the AT model</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 [Tilt, Eta, Ratio, ENV, DP, DL] = calccoupling </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">CALCCOUPLING - Calculates the coupling and tilt of the AT model
31  [Eta, Tilt, EmittanceRatio, ENV, DP, DL] = calccoupling
32
33  OUTPUTS
34  1. Tilt - Tilts of the emittance ellipse [radian]
35  2. Eta - Emittance
36  3. EmittanceRatio - median(EpsX) / median(EpsX)
37  4-6. ENV, DP, DL - Output of ohmienvelope
38
39  NOTES
40  1. If there are no outputs, the coupling information will be plotted.
41  2. It can be helpful the draw the lattice on top of a graph (hold on; drawlattice(Offset, Height);)</pre></div>
42
43<!-- crossreference -->
44<h2><a name="_cross"></a>CROSS-REFERENCE INFORMATION <a href="#_top"><img alt="^" border="0" src="../../up.png"></a></h2>
45This function calls:
46<ul style="list-style-image:url(../../matlabicon.gif)">
47<li><a href="family2atindex.html" class="code" title="function [ATIndexList, ErrorFlag] = family2atindex(Family, varargin);">family2atindex</a> FAMILY2ATINDEX - Returns the AT index for a given family</li><li><a href="getcavity.html" class="code" title="function [CavityState, PassMethod, ATCavityIndex, RF, HarmNumber] = getcavity">getcavity</a>      GETCAVITY - Returns the RF cavity state ('On' / 'Off')</li><li><a href="setcavity.html" class="code" title="function ATCavityIndex = setcavity(InputString)">setcavity</a>      SETCAVITY - Set the RF cavity state</li><li><a href="setpassmethod.html" class="code" title="function setpassmethod(ATIndex, PassMethod, DeviceList)">setpassmethod</a> SETPASSMETHOD - Sets the PassMethod</li><li><a href="setradiation.html" class="code" title="function [PassMethod, ATIndex, FamName, PassMethodOld, ATIndexOld, FamNameOld] = setradiation(InputString)">setradiation</a>        SETRADIATION - Sets the model PassMethod to include or exclude radiation ('On' / 'Off' {Default})</li></ul>
48This function is called by:
49<ul style="list-style-image:url(../../matlabicon.gif)">
50</ul>
51<!-- crossreference -->
52
53
54<h2><a name="_source"></a>SOURCE CODE <a href="#_top"><img alt="^" border="0" src="../../up.png"></a></h2>
55<div class="fragment"><pre>0001 <a name="_sub0" href="#_subfunctions" class="code">function [Tilt, Eta, Ratio, ENV, DP, DL] = calccoupling</a>
560002 <span class="comment">%CALCCOUPLING - Calculates the coupling and tilt of the AT model</span>
570003 <span class="comment">%  [Eta, Tilt, EmittanceRatio, ENV, DP, DL] = calccoupling</span>
580004 <span class="comment">%</span>
590005 <span class="comment">%  OUTPUTS</span>
600006 <span class="comment">%  1. Tilt - Tilts of the emittance ellipse [radian]</span>
610007 <span class="comment">%  2. Eta - Emittance</span>
620008 <span class="comment">%  3. EmittanceRatio - median(EpsX) / median(EpsX)</span>
630009 <span class="comment">%  4-6. ENV, DP, DL - Output of ohmienvelope</span>
640010 <span class="comment">%</span>
650011 <span class="comment">%  NOTES</span>
660012 <span class="comment">%  1. If there are no outputs, the coupling information will be plotted.</span>
670013 <span class="comment">%  2. It can be helpful the draw the lattice on top of a graph (hold on; drawlattice(Offset, Height);)</span>
680014
690015 <span class="comment">%</span>
700016 <span class="comment">%  Written by James Safranek</span>
710017
720018
730019 <span class="keyword">global</span> THERING
740020     
750021
760022 C0 = 299792458;      <span class="comment">% Speed of light [m/s]</span>
770023
780024 ati = atindex(THERING);
790025 L0 = findspos(THERING, length(THERING)+1);
800026
810027 <span class="comment">% HarmNumber = 936;</span>
820028 <span class="comment">% THERING{ati.RF}.Frequency = HarmNumber*C0/L0;</span>
830029 <span class="comment">% THERING{ati.RF}.PassMethod = 'CavityPass';</span>
840030 <span class="comment">% for i = ati.RF</span>
850031 <span class="comment">%     THERING{i}.Frequency = THERING{i}.HarmNumber*C0/L0;</span>
860032 <span class="comment">%     THERING{i}.PassMethod = 'CavityPass';</span>
870033 <span class="comment">% end</span>
880034
890035
900036 [PassMethod, ATIndex, FamName, PassMethodOld, ATIndexOld, FamNameOld] = <a href="setradiation.html" class="code" title="function [PassMethod, ATIndex, FamName, PassMethodOld, ATIndexOld, FamNameOld] = setradiation(InputString)">setradiation</a>(<span class="string">'On'</span>);
910037
920038 CavityState = <a href="getcavity.html" class="code" title="function [CavityState, PassMethod, ATCavityIndex, RF, HarmNumber] = getcavity">getcavity</a>;
930039 <a href="setcavity.html" class="code" title="function ATCavityIndex = setcavity(InputString)">setcavity</a>(<span class="string">'On'</span>);
940040
950041
960042 <span class="comment">% Get all the AT elements that add radiation</span>
970043 BendCell = findmemberof(<span class="string">'BEND'</span>);
980044 iBend = <a href="family2atindex.html" class="code" title="function [ATIndexList, ErrorFlag] = family2atindex(Family, varargin);">family2atindex</a>(BendCell);
990045 <span class="keyword">for</span> ii = 1:length(iBend)
1000046     <span class="keyword">if</span> size(iBend{ii},2) &gt; 1
1010047         iBend{ii} = sort(iBend{ii}(:));
1020048         nanindx = find(isnan(iBend{ii}));
1030049         iBend{ii}(nanindx) = [];
1040050     <span class="keyword">end</span>
1050051 <span class="keyword">end</span>
1060052 iBend = cell2mat(iBend(:));
1070053
1080054
1090055 QuadCell = findmemberof(<span class="string">'QUAD'</span>);
1100056 iQuad = <a href="family2atindex.html" class="code" title="function [ATIndexList, ErrorFlag] = family2atindex(Family, varargin);">family2atindex</a>(QuadCell);
1110057 <span class="keyword">for</span> ii = 1:length(iQuad)
1120058     <span class="keyword">if</span> size(iQuad{ii},2) &gt; 1
1130059         iQuad{ii} = sort(iQuad{ii}(:));
1140060         nanindx = find(isnan(iQuad{ii}));
1150061         iQuad{ii}(nanindx) = [];
1160062     <span class="keyword">end</span>
1170063 <span class="keyword">end</span>
1180064 iQuad = cell2mat(iQuad(:));
1190065
1200066
1210067 SextCell = findmemberof(<span class="string">'SEXT'</span>);
1220068 iSext = <a href="family2atindex.html" class="code" title="function [ATIndexList, ErrorFlag] = family2atindex(Family, varargin);">family2atindex</a>(SextCell);
1230069 <span class="keyword">for</span> ii = 1:length(iSext)
1240070     <span class="keyword">if</span> size(iSext{ii},2) &gt; 1
1250071         iSext{ii} = sort(iSext{ii}(:));
1260072         nanindx = find(isnan(iSext{ii}));
1270073         iSext{ii}(nanindx) = [];
1280074     <span class="keyword">end</span>
1290075 <span class="keyword">end</span>
1300076 iSext = cell2mat(iSext(:));
1310077
1320078
1330079 RadiationElemIndex = sort([iBend(:); iQuad(:); iSext(:)]');
1340080 <span class="comment">%RadiationElemIndex(find(isnan(RadiationElemIndex))) = [];</span>
1350081
1360082 [ENV, DP, DL] = ohmienvelope(THERING, RadiationElemIndex, 1:length(THERING)+1);
1370083
1380084 sigmas = cat(2, ENV.Sigma);
1390085 Tilt = cat(2, ENV.Tilt);
1400086 spos = findspos(THERING, 1:length(THERING)+1);
1410087
1420088 [TwissData, tune, chrom]  = twissring(THERING, 0, 1:length(THERING)+1, <span class="string">'chrom'</span>);
1430089
1440090
1450091 <span class="comment">% The the passmethods back</span>
1460092 <a href="setpassmethod.html" class="code" title="function setpassmethod(ATIndex, PassMethod, DeviceList)">setpassmethod</a>(ATIndexOld, PassMethodOld);
1470093 <a href="setcavity.html" class="code" title="function ATCavityIndex = setcavity(InputString)">setcavity</a>(CavityState);
1480094
1490095
1500096 <span class="comment">% Calculate tilts</span>
1510097 Beta = cat(1,TwissData.beta);
1520098 spos = cat(1,TwissData.SPos);
1530099
1540100 Eta = cat(2,TwissData.Dispersion);
1550101 EpsX = (sigmas(1,:).^2-Eta(1,:).^2*DP^2)./Beta(:,1)';
1560102 EpsY = (sigmas(2,:).^2-Eta(3,:).^2*DP^2)./Beta(:,2)';
1570103
1580104 <span class="comment">% RMS tilt</span>
1590105 TiltRMS = norm(Tilt)/sqrt(length(Tilt));
1600106 EtaY = Eta(3,:);
1610107
1620108 EpsX0 = mean(EpsX);
1630109 EpsY0 = mean(EpsY);
1640110 <span class="comment">%EpsX0 = median(EpsX);</span>
1650111 <span class="comment">%EpsY0 = median(EpsY);</span>
1660112 Ratio = EpsY0 / EpsX0;
1670113
1680114
1690115 <span class="comment">% Fix imaginary data</span>
1700116 <span class="comment">% ohmienvelope seems to return complex when very close to zero</span>
1710117 <span class="keyword">if</span> ~isreal(sigmas(1,:))
1720118     <span class="comment">% Sigma is positive so this should be ok</span>
1730119     sigmas(1,:) = abs(sigmas(1,:));
1740120 <span class="keyword">end</span>
1750121 <span class="keyword">if</span> ~isreal(sigmas(2,:))
1760122     <span class="comment">% Sigma is positive so this should be ok</span>
1770123     sigmas(2,:) = abs(sigmas(2,:));
1780124 <span class="keyword">end</span>
1790125     
1800126
1810127 <span class="keyword">if</span> nargout == 0
1820128     fprintf(<span class="string">'   RMS Tilt = %f [degrees]\n'</span>, (180/pi) * TiltRMS);
1830129     fprintf(<span class="string">'   RMS Vertical Dispersion = %f [m]\n'</span>, norm(EtaY)/sqrt(length(EtaY)));
1840130     fprintf(<span class="string">'   Mean Horizontal Emittance = %f [nm rad]\n'</span>, 1e9*EpsX0);
1850131     fprintf(<span class="string">'   Mean Vertical   Emittance = %f [nm rad]\n'</span>, 1e9*EpsY0);
1860132     fprintf(<span class="string">'   Emittance Ratio = %f%% \n'</span>, 100*Ratio);
1870133     
1880134     <span class="comment">%figure(1);</span>
1890135     gcf;
1900136     clf reset;
1910137     subplot(2,2,1);
1920138     plot(spos, Tilt*180/pi, <span class="string">'-'</span>)
1930139     set(gca,<span class="string">'XLim'</span>,[0 spos(end)])
1940140     ylabel(<span class="string">'Tilt [degrees]'</span>);
1950141     title(sprintf(<span class="string">'Rotation Angle of the Beam Ellipse  (RMS = %f)'</span>, (180/pi) * TiltRMS));
1960142     xlabel(<span class="string">'s - Position [m]'</span>);
1970143
1980144     <span class="comment">%figure(2);</span>
1990145     subplot(2,2,3);
2000146     [AX, H1, H2] = plotyy(spos, 1e6*sigmas(1,:), spos, 1e6*sigmas(2,:));
2010147
2020148     <span class="comment">%set(H1,'Marker','.')</span>
2030149     set(AX(1),<span class="string">'XLim'</span>,[0 spos(end)]);
2040150     <span class="comment">%set(H2,'Marker','.')</span>
2050151     set(AX(2),<span class="string">'XLim'</span>,[0 spos(end)]);
2060152     title(<span class="string">'Principal Axis of the Beam Ellipse'</span>);
2070153     set(get(AX(1),<span class="string">'Ylabel'</span>), <span class="string">'String'</span>, <span class="string">'Horizontal [\mum]'</span>);
2080154     set(get(AX(2),<span class="string">'Ylabel'</span>), <span class="string">'String'</span>, <span class="string">'Vertical [\mum]'</span>);
2090155     xlabel(<span class="string">'s - Position [m]'</span>);
2100156     
2110157     FontSize = get(get(AX(1),<span class="string">'Ylabel'</span>),<span class="string">'FontSize'</span>);
2120158
2130159     <span class="comment">%figure(3);</span>
2140160     subplot(2,2,2);   
2150161     plot(spos, 1e9 * EpsX);
2160162     title(<span class="string">'Horizontal Emittance'</span>);
2170163     ylabel(sprintf(<span class="string">'\\fontsize{16}\\epsilon_x  \\fontsize{%d}[nm rad]'</span>, FontSize));
2180164     xlabel(<span class="string">'s - Position [m]'</span>);
2190165     xaxis([0 L0]);
2200166     
2210167     <span class="comment">%figure(4);</span>
2220168     subplot(2,2,4);
2230169     plot(spos, 1e9 * EpsY);
2240170     title(<span class="string">'Vertical Emittance'</span>);
2250171     ylabel(sprintf(<span class="string">'\\fontsize{16}\\epsilon_y  \\fontsize{%d}[nm rad]'</span>, FontSize));
2260172     xlabel(<span class="string">'s - Position [m]'</span>);
2270173     xaxis([0 L0]);
2280174   
2290175     h = addlabel(.75, 0, sprintf(<span class="string">'     Emittance Ratio = %f%% '</span>, 100*Ratio), 10);
2300176     set(h,<span class="string">'HorizontalAlignment'</span>,<span class="string">'Center'</span>);
2310177     
2320178     orient landscape;
2330179 <span class="keyword">end</span>
2340180</pre></div>
235<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>
236</body>
237</html>
Note: See TracBrowser for help on using the repository browser.