0001 function [Chro, Tune] = modelchro(varargin)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019 UnitsFlag = getunits('TUNE');
0020 if isempty(UnitsFlag)
0021 UnitsFlag = 'Hardware';
0022 end
0023
0024 MCF = [];
0025
0026
0027 for i = length(varargin):-1:1
0028 if strcmpi(varargin{i},'Physics')
0029 UnitsFlag = 'Physics';
0030 varargin(i) = [];
0031
0032
0033
0034
0035
0036
0037 elseif strcmpi(varargin{i},'Hardware')
0038 UnitsFlag = 'Hardware';
0039 varargin(i) = [];
0040
0041
0042
0043
0044
0045
0046 end
0047 end
0048
0049
0050 DeltaRF = [];
0051 if length(varargin) >= 1
0052 if isnumeric(varargin{1})
0053 DeltaRF = varargin{1};
0054 end
0055 end
0056 if isempty(DeltaRF)
0057 DeltaRF = .1;
0058 end
0059
0060
0061 global THERING
0062 if isempty(THERING)
0063 error('Simulator variable is not setup properly.');
0064 end
0065
0066
0067
0068
0069
0070
0071
0072
0073 [CavityState, PassMethod, iCavity] = getcavity;
0074 if isempty(CavityState)
0075 error('The model does not have a cavity, hence the chromaticity cannot be determined.');
0076 else
0077 if any(strcmpi(CavityState(1,:),'Off'))
0078
0079 setcavity('On');
0080 end
0081 end
0082
0083
0084
0085
0086
0087
0088
0089
0090 M66 = findm66(THERING);
0091 FracTune0 = getnusympmat(M66);
0092
0093
0094
0095
0096 RF0 = THERING{iCavity(1)}.Frequency;
0097 for i = 1:length(iCavity)
0098 THERING{iCavity(i)}.Frequency = RF0 + DeltaRF;
0099 end
0100
0101
0102 M66 = findm66(THERING);
0103 FracTune1 = getnusympmat(M66);
0104
0105
0106
0107 for i = 1:length(iCavity)
0108 THERING{iCavity(i)}.Frequency = RF0;
0109 end
0110
0111
0112
0113 DeltaRF = physics2hw('RF', 'Setpoint', DeltaRF, [1 1], 'Model');
0114 Chro = (FracTune1 - FracTune0) / DeltaRF;
0115
0116
0117 if strcmpi(UnitsFlag,'Physics')
0118
0119 MCF = mcf(THERING);
0120 RF0 = physics2hw('RF', 'Setpoint', RF0, [1 1], 'Model');
0121 Chro = (-MCF * RF0) * Chro;
0122 end
0123
0124
0125
0126
0127
0128
0129
0130
0131
0132
0133
0134
0135 setcavity(PassMethod);
0136
0137
0138