0001 function [DeltaRF, HCMEnergyChangeTotal, DeltaL] = plotcm(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 DisplayFlag = 1;
0026 XAxisFlag = 'Position';
0027
0028
0029
0030 InputFlags = {};
0031 for i = length(varargin):-1:1
0032 if isstruct(varargin{i})
0033
0034 elseif iscell(varargin{i})
0035
0036 elseif strcmpi(varargin{i},'struct')
0037
0038 varargin(i) = [];
0039 elseif strcmpi(varargin{i},'numeric')
0040
0041 varargin(i) = [];
0042 elseif strcmpi(varargin{i},'Position')
0043 XAxisFlag = 'Position';
0044 varargin(i) = [];
0045 elseif strcmpi(varargin{i},'Phase')
0046 XAxisFlag = 'Phase';
0047 varargin(i) = [];
0048 elseif strcmpi(varargin{i},'Display')
0049 DisplayFlag = 1;
0050 varargin(i) = [];
0051 elseif strcmpi(varargin{i},'NoDisplay')
0052 DisplayFlag = 0;
0053 varargin(i) = [];
0054 end
0055 end
0056
0057
0058
0059 Family1 = gethcmfamily;
0060 Family2 = getvcmfamily;
0061
0062
0063
0064 x = getsp(Family1, 'Struct', varargin{:});
0065 y = getsp(Family2, 'Struct', varargin{:});
0066
0067
0068
0069 L = getfamilydata('Circumference');
0070 HCM = hw2physics(x);
0071 HCM = HCM.Data;
0072
0073
0074 if strcmpi(getfamilydata('Machine'),'ALS')
0075
0076
0077 Energy = getfamilydata('Energy');
0078
0079
0080
0081
0082
0083
0084 ihcm = findrowindex([6 1], x.DeviceList);
0085 if length(ihcm) == 1
0086 try
0087 if getsp('HCMCHICANEM',[6 1]) < 70
0088
0089 if Energy == 1.9
0090 HCM(ihcm) = HCM(ihcm) + hw2physics(x.FamilyName, x.Field, -18.8, [6 1]);
0091 x.Data(ihcm) = x.Data(ihcm) - 18.8;
0092 else
0093 HCM(ihcm) = HCM(ihcm) + hw2physics(x.FamilyName, x.Field, -18.8*1.5/1.9, [6 1]);
0094 x.Data(ihcm) = x.Data(ihcm) - 18.8*1.5/1.9;
0095 end
0096 end
0097 catch
0098 fprintf('%s\n', lasterr);
0099 fprintf('Problem reading HCMCHICANEM(6,1). The chicane "offset" on HCM(6,1) will not be removed.\n\n');
0100 end
0101 end
0102
0103
0104
0105
0106
0107
0108
0109 ihcm = findrowindex([10 8], x.DeviceList);
0110 if length(ihcm) == 1
0111 try
0112 if getsp('HCMCHICANEM',[11 1]) < 60
0113
0114 if Energy == 1.9
0115 HCM(ihcm) = HCM(ihcm) + hw2physics(x.FamilyName, x.Field, 17, [10 8]);
0116 x.Data(ihcm) = x.Data(ihcm) + 17;
0117 else
0118 HCM(ihcm) = HCM(ihcm) + hw2physics(x.FamilyName, x.Field, 14, [10 8]);
0119 x.Data(ihcm) = x.Data(ihcm) + 14;
0120 end
0121 end
0122 catch
0123 fprintf('%s\n', lasterr);
0124 fprintf('Due to an error, the chicane "offset" on HCM(10,8) will not be removed.n\n');
0125 end
0126 end
0127 ihcm = findrowindex([11 1], x.DeviceList);
0128 if length(ihcm) == 1
0129 try
0130 if getsp('HCMCHICANEM',[11 1]) < 60
0131
0132 if Energy == 1.9
0133 HCM(ihcm) = HCM(ihcm) + hw2physics(x.FamilyName, x.Field, 17, [11 1]);
0134 x.Data(ihcm) = x.Data(ihcm) + 17;
0135 else
0136 HCM(ihcm) = HCM(ihcm) + hw2physics(x.FamilyName, x.Field, 14, [11 1]);
0137 x.Data(ihcm) = x.Data(ihcm) + 14;
0138 end
0139 end
0140 catch
0141 fprintf('%s\n', lasterr);
0142 fprintf('Due to an error, the chicane "offset" on HCM(11,1) will not be removed.n\n');
0143 end
0144 end
0145 end
0146
0147
0148 [DxHCM, DyHCM] = modeldisp([], x.FamilyName, x.DeviceList, 'Numeric', 'Physics');
0149 HCMEnergyChange = -1 * HCM .* DxHCM / getmcf / L;
0150 HCMEnergyChangeTotal = sum(HCMEnergyChange);
0151
0152
0153 DeltaRF = -1 * getrf * getmcf * HCMEnergyChangeTotal;
0154 DeltaRFPhysics = -1 * getrf('Physics') * getmcf * HCMEnergyChangeTotal;
0155
0156 DeltaL = L * getmcf * HCMEnergyChangeTotal;
0157
0158
0159 if DisplayFlag
0160 LeftGraphColor = 'b';
0161 RightGraphColor = 'r';
0162
0163 [RFUnits, RFUnitsString] = getunits('RF');
0164
0165 if strcmpi(XAxisFlag, 'Phase')
0166 [BPMxspos, BPMyspos, Sx, Sy, Tune] = modeltwiss('Phase', x.FamilyName, x.DeviceList, y.FamilyName, y.DeviceList);
0167 BPMxspos = BPMxspos/2/pi;
0168 BPMyspos = BPMyspos/2/pi;
0169 XLabel = 'Phase';
0170 else
0171 BPMxspos = getspos(x.FamilyName, x.DeviceList);
0172 BPMyspos = getspos(y.FamilyName, y.DeviceList);
0173 XLabel = 'Position [meters]';
0174 end
0175
0176
0177 hfig = gcf;
0178 clf reset
0179
0180
0181
0182
0183 subplot(2,1,1);
0184 [ax, h1, h2] = plotyy(BPMxspos, x.Data, BPMxspos, -HCMEnergyChange);
0185 FontSize = get(ax(1), 'Fontsize');
0186 title(sprintf('%s (%g rms [%s]): Energy Change \\Delta p / p = \\Sigma \\delta_{hcm} \\eta_{hcm} / (-\\alpha L) = %.3e', Family1, std(x.Data), x.UnitsString, HCMEnergyChangeTotal), 'Fontsize',FontSize);
0187 set(get(ax(1),'Ylabel'), 'String', sprintf('%s [%s]', Family1, x.UnitsString), 'Fontsize',FontSize);
0188 set(get(ax(2),'Ylabel'), 'String', '-\Delta p/p', 'Color', RightGraphColor, 'Fontsize',FontSize);
0189 set(h1, 'Marker','.');
0190 set(h2, 'Marker','.');
0191
0192 set(ax(2), 'YColor', RightGraphColor);
0193 set(h2, 'Color', RightGraphColor);
0194 grid on
0195
0196 if ~strcmpi(XAxisFlag, 'Phase')
0197 axes(ax(1));
0198 aa = axis;
0199 aa(1) = 0;
0200 aa(2) = L;
0201 axis(aa);
0202 axes(ax(2));
0203 aa = axis;
0204 aa(1) = 0;
0205 aa(2) = L;
0206 axis(aa);
0207 end
0208
0209
0210 subplot(2,1,2);
0211 plot(BPMyspos, y.Data, '.-');
0212 title(sprintf('%s (%g rms [%s])', Family2, std(y.Data), y.UnitsString), 'Fontsize',FontSize);
0213 xlabel(XLabel, 'Fontsize',FontSize);
0214 ylabel(sprintf('%s [%s]',Family2, x.UnitsString), 'Color', LeftGraphColor, 'Fontsize',FontSize);
0215 set(gca,'YColor', LeftGraphColor);
0216 if ~strcmpi(XAxisFlag, 'Phase')
0217 xaxis([0 L]);
0218 end
0219
0220 addlabel(1, 0, datestr(clock,0), 7);
0221 addlabel(0, 0, sprintf('Equivalent energy change using the RF is \\DeltaRF = %g [%s] \\DeltaL = %g [m]', DeltaRF, RFUnitsString, DeltaL), 7);
0222
0223 if strcmpi(getfamilydata('Machine'),'ALS')
0224 addlabel(1, .5, 'Nominal chicane setting may have been removed from the HCM family', 7);
0225 end
0226 end
0227
0228