0001 function [DelQuad, ActuatorFamily] = steptune(varargin)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038 UnitsFlag = {};
0039 ModeFlag = {};
0040 for i = length(varargin):-1:1
0041 if strcmpi(varargin{i},'physics')
0042 UnitsFlag = varargin(i);
0043 varargin(i) = [];
0044 elseif strcmpi(varargin{i},'hardware')
0045 UnitsFlag = varargin(i);
0046 varargin(i) = [];
0047 elseif strcmpi(varargin{i},'Simulator') | strcmpi(varargin{i},'Model')
0048 ModeFlag = varargin(i);
0049 varargin(i) = [];
0050 elseif strcmpi(varargin{i},'online')
0051 ModeFlag = varargin(i);
0052 varargin(i) = [];
0053 elseif strcmpi(varargin{i},'manual')
0054 ModeFlag = varargin(i);
0055 varargin(i) = [];
0056 end
0057 end
0058
0059 if length(varargin) >= 1
0060 DeltaTune = varargin{1};
0061 else
0062 DeltaTune = [];
0063 end
0064 if isempty(DeltaTune)
0065 answer = inputdlg({'Change the horizontal tune by', 'Change the vertical tune by'},'STEPTUNE',1,{'0','0'});
0066 if isempty(answer)
0067 return
0068 end
0069 DeltaTune(1,1) = str2num(answer{1});
0070 DeltaTune(2,1) = str2num(answer{2});
0071 end
0072
0073 DeltaTune = DeltaTune(:);
0074 if size(DeltaTune,1) ~= 2
0075 error('Input must be a 2x1 column vector.');
0076 end
0077 if DeltaTune(1)==0 && DeltaTune(2)==0
0078 return
0079 end
0080
0081 if length(varargin) >= 2
0082 TuneResponseMatrix = varargin{2};
0083 else
0084 TuneResponseMatrix = [];
0085 end
0086 if isempty(TuneResponseMatrix)
0087 TuneResponseMatrix = gettuneresp(UnitsFlag{:});
0088 end
0089 if isempty(TuneResponseMatrix)
0090 error('The tune response matrix must be an input or available in one of the default response matrix files.');
0091 end
0092
0093
0094 if length(varargin) >= 3
0095 ActuatorFamily = varargin{3};
0096 else
0097 ActuatorFamily = findmemberof('Tune Corrector')';
0098 if isempty(ActuatorFamily)
0099 ActuatorFamily = {'QF','QD'};
0100 end
0101 end
0102
0103
0104
0105
0106
0107 [U, S, V] = svd(TuneResponseMatrix, 'econ');
0108
0109
0110
0111
0112
0113
0114
0115
0116 TUNECoef = diag(diag(S).^(-1)) * U' * DeltaTune;
0117
0118
0119 DelQuad = V * TUNECoef;
0120
0121
0122
0123
0124
0125
0126
0127
0128
0129
0130
0131
0132
0133
0134
0135
0136
0137
0138
0139
0140
0141 SP = getsp(ActuatorFamily, UnitsFlag{:}, ModeFlag{:});
0142
0143 if iscell(SP)
0144 for i = 1:length(SP)
0145 SP{i} = SP{i} + DelQuad(i);
0146 end
0147 else
0148 SP = SP + DelQuad;
0149 end
0150
0151 setsp(ActuatorFamily, SP, UnitsFlag{:}, ModeFlag{:});
0152