0001 function [GeV B] = bend2gev(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 Family = '';
0032 Field = '';
0033 Amps = [];
0034 DeviceList = [];
0035 BranchFlag = [];
0036
0037 ModeFlag = '';
0038 UnitsFlag = '';
0039 for i = length(varargin):-1:1
0040 if isstruct(varargin{i})
0041
0042 elseif iscell(varargin{i})
0043
0044 elseif strcmpi(varargin{i},'Struct')
0045 varargin(i) = [];
0046 elseif strcmpi(varargin{i},'Numeric')
0047 varargin(i) = [];
0048 elseif strcmpi(varargin{i},'Physics')
0049 UnitsFlag = 'Physics';
0050 varargin(i) = [];
0051 elseif strcmpi(varargin{i},'Hardware')
0052 UnitsFlag = 'Hardware';
0053 varargin(i) = [];
0054 elseif strcmpi(varargin{i},'Simulator') || strcmpi(varargin{i},'Model')
0055 ModeFlag = varargin{i};
0056 varargin(i) = [];
0057 elseif strcmpi(varargin{i},'Online')
0058 ModeFlag = varargin{i};
0059 varargin(i) = [];
0060 elseif strcmpi(varargin{i},'Manual')
0061 ModeFlag = varargin{i};
0062 varargin(i) = [];
0063 end
0064 end
0065
0066
0067 if length(varargin) >= 1
0068 if ischar(varargin{1})
0069 Family = varargin{1};
0070 varargin(1) = [];
0071 else
0072 Amps = varargin{1};
0073 varargin(1) = [];
0074 if length(varargin) >= 1
0075 DeviceList = varargin{1};
0076 varargin(1) = [];
0077 end
0078 if length(varargin) >= 1
0079 BranchFlag = varargin{1};
0080 varargin(1:end) = [];
0081 end
0082 end
0083 end
0084 if length(varargin) >= 1 & ischar(varargin{1})
0085 Field = varargin{1};
0086 varargin(1) = [];
0087 end
0088 if length(varargin) >= 1
0089 Amps = varargin{1};
0090 varargin(1) = [];
0091 end
0092 if length(varargin) >= 1
0093 DeviceList = varargin{1};
0094 varargin(1) = [];
0095 end
0096 if length(varargin) >= 1
0097 BranchFlag = varargin{1};
0098 varargin(1) = [];
0099 end
0100
0101
0102 if isempty(Family)
0103 Family = 'BEND';
0104 end
0105 if isempty(ModeFlag)
0106 ModeFlag = getmode(Family);
0107 end
0108
0109 if isempty(Field)
0110 Field = 'Setpoint';
0111 end
0112 if isempty(DeviceList)
0113 DeviceList = family2dev(Family);
0114 if all(size(Amps)==[1 1]) | isempty(Amps)
0115 DeviceList = DeviceList(1,:);
0116 end
0117 end
0118 if isempty(BranchFlag)
0119
0120 BranchFlag = 2;
0121 end
0122 if isempty(Amps)
0123 if strcmpi(ModeFlag,'simulator') || strcmpi(ModeFlag,'model')
0124
0125
0126 GeV = getenergymodel;
0127 return;
0128
0129
0130
0131
0132 else
0133 Amps = getpv(Family, Field, [1 1], 'Hardware', ModeFlag);
0134 UnitsFlag = 'UnitsFlag';
0135 end
0136 end
0137
0138
0139
0140
0141
0142
0143 if strcmpi(UnitsFlag,'Physics')
0144 Amps = physics2hw(Family, 'Setpoint', Amps, DeviceList);
0145 end
0146
0147
0148 DeviceListTotal = family2dev(Family, 0);
0149
0150 for ii = 1:size(DeviceList,1)
0151 if length(Amps) == 1
0152 BEND = Amps;
0153 else
0154 BEND = Amps(ii);
0155 end
0156
0157
0158
0159
0160
0161
0162 E0 = .51099906e-3;
0163 e = 1.60217733e-19 ;
0164
0165 cb = 2.99792458e-1;
0166
0167 AcceleratorName = getfamilydata('SubMachine');
0168 switch AcceleratorName
0169 case 'StorageRing'
0170
0171
0172
0173
0174
0175
0176
0177
0178
0179
0180
0181 [C Leff Type A] = magnetcoefficients(Family);
0182
0183
0184 BL = polyval(A,BEND);
0185
0186
0187 theta = 0.19634954084936;
0188
0189
0190
0191
0192
0193 brho = BL/theta;
0194
0195 case 'LT2'
0196
0197 [C Leff Type A] = magnetcoefficients(Family);
0198
0199
0200 BL = polyval(A,BEND);
0201
0202
0203 theta = 0.193789;
0204 BLeff = 1.7780;
0205
0206
0207 brho = BL/theta;
0208
0209
0210
0211 case 'LT1'
0212 [C Leff Type A] = magnetcoefficients(Family);
0213
0214
0215 BL = polyval(A,BEND);
0216 theta = 0.26179938779915;
0217 brho = BL/theta;
0218 case 'Booster'
0219 [C Leff Type A] = magnetcoefficients(Family);
0220
0221
0222 BL = polyval(A,BEND);
0223 theta = 0.17453292519943;
0224 brho = BL/theta;
0225 otherwise
0226 error('Wrong SubMachine %s', Machine);
0227 end
0228
0229
0230 gev1 = sqrt(E0*E0+cb*cb*brho*brho) - E0;
0231
0232 if size(Amps,2) == 1
0233 GeV(ii,1) = gev1;
0234 else
0235 GeV(1,ii) = gev1;
0236 end
0237
0238 end