source: MML/trunk/mml/at/modelchro.m @ 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: 3.1 KB
Line 
1function [Chro, Tune] = modelchro(varargin)
2%MODELCHRO - Returns the AT model chromaticity
3%  [Chromaticity, Tune] = modelchro(DeltaRF)
4%
5%  INPUTS
6%  1. DeltaRF - Change in RF used to compute the chromaticity [Hz]  {Default: .1 Hz}
7%  2. 'Hardware' returns chromaticity in hardware units (Tune/MHz (usually))
8%     'Physics'  returns chromaticity in physics  units (Tune/(dp/p))
9%
10%  OUTPUTS
11%  1. Chromaticity vector (2x1)
12%  1. Tune vector (2x1)
13%
14%  Also see, modelbeta, modeltune, modeldisp, modeltwiss
15
16%
17%  Written by Greg Portmann
18
19
20%UnitsFlag = getunits('TUNE');
21UnitsFlag = 'Physics';
22if isempty(UnitsFlag)
23    UnitsFlag = 'Physics';
24end
25
26MCF = [];
27
28% Look if 'struct' or 'numeric' in on the input line
29for i = length(varargin):-1:1
30    if strcmpi(varargin{i},'Physics')
31        UnitsFlag = 'Physics';
32        varargin(i) = [];
33        %if length(varargin) >= i
34        %    if isnumeric(varargin{i})
35        %        MCF = varargin{i};
36        %        varargin(i) = [];
37        %    end
38        %end
39    elseif strcmpi(varargin{i},'Hardware')
40        UnitsFlag = 'Hardware';
41        varargin(i) = [];
42        %if length(varargin) >= i
43        %    if isnumeric(varargin{i})
44        %        MCF = varargin{i};
45        %        varargin(i) = [];
46        %    end
47        %end
48    end       
49end
50
51
52DeltaRF = [];
53if length(varargin) >= 1
54    if isnumeric(varargin{1})
55        DeltaRF = varargin{1};  % Hz
56    end
57end
58if  isempty(DeltaRF)   
59    DeltaRF = .1;  % Hz
60end
61
62
63global THERING
64if isempty(THERING)
65    error('Simulator variable is not setup properly.');
66end
67
68
69% tunechrom does not take into account the present RF frequency
70% [Tune, Chro] = tunechrom(THERING, 0, 'chrom');
71% Tune = Tune(:);
72% Chro = Chro(:);
73
74
75[CavityState, PassMethod, iCavity] = getcavity;
76if isempty(CavityState)
77    error('The model does not have a cavity, hence the chromaticity cannot be determined.');
78else
79    if any(strcmpi(CavityState(1,:),'Off'))
80        % Turn on the cavities
81        setcavity('On');
82    end
83end
84
85
86% If the integer tune in needed
87%[TD, Tune] = twissring(THERING,0,1:length(THERING)+1);
88%IntTune = fix(Tune(:));
89
90
91% Get tune (Johan's method)
92M66 = findm66(THERING);
93FracTune0 = getnusympmat(M66);
94%Tune = fix(IntTune) + FracTune0;
95
96
97% Small change in the RF and remeasure the tune
98RF0 = THERING{iCavity(1)}.Frequency;
99for i = 1:length(iCavity)
100    THERING{iCavity(i)}.Frequency = RF0 + DeltaRF;
101end
102
103% Get tune (Johan's method)
104M66 = findm66(THERING);
105FracTune1 = getnusympmat(M66);
106
107
108% Reset the RF
109for i = 1:length(iCavity)
110    THERING{iCavity(i)}.Frequency = RF0;
111end
112
113
114% Chromaticity in hardware units (DeltaTune / DeltaRF)
115DeltaRF = physics2hw('RF', 'Setpoint', DeltaRF, [1 1], 'Model');
116Chro = (FracTune1 - FracTune0) / DeltaRF;
117
118
119if strcmpi(UnitsFlag,'Physics')
120    % Change to Physics units
121    MCF = mcf(THERING);
122    RF0 = physics2hw('RF', 'Setpoint', RF0, [1 1], 'Model');
123    Chro = (-MCF * RF0) * Chro;
124end
125
126
127% if strcmpi(UnitsFlag,'Hardware')
128%     % Change to Hardware units
129%     MCF = mcf(THERING);
130%     CavityFrequency  = THERING{iCavity(1)}.Frequency;
131%     Chro = Chro / (-MCF * RF0);
132% end
133
134
135
136% Reset cavity PassMethod
137setcavity(PassMethod);
138
139
140
Note: See TracBrowser for help on using the repository browser.