def error_func(x): pen_max = 10000.0 #print 'error_func: ', bpm_names, '->', planes for i in xrange(len(x)): print 'x[{0}]={1}'.format(i, x[i]) if abs(x[i]) > 3.5: return pen_max for i in xrange(len(correctors)): mag_channel = 'TTF2.MAGNETS/STEERER/' + correctors[i] + '/PS' print 'setting', mag_channel, '->',x[i] #res = dcs.set_device_val(mag_channel, x[i]) sleep(0.0005) pen = 0.0 n_avg = 20 for i_bpm in xrange(len(bpms)): x = 0.0 y = 0.0 for i in xrange(n_avg): dcs.get_bpm_val(bpms[i_bpm]) x += bpms[i_bpm].x / n_avg y += bpms[i_bpm].y / n_avg #print 'bpm read:', bpms[i_bpm].id, x, y #print 'target', planes[i_bpm], targets[i_bpm] if planes[i_bpm] == 'Y': pen += (targets[i_bpm] - y)**2 if planes[i_bpm] == 'X': pen += (targets[i_bpm] - x)**2 alarm = np.max(get_alarms()) print 'alarm read...', alarm if alarm > 1.0: return pen_max if alarm > 0.7: return alarm * 10.0 pen += alarm print 'pen=', pen return pen
def update_figure(self): for bpm in bpms: dcs.get_bpm_val(bpm) print ('bpm read:', bpm.id, bpm.x, bpm.y) x = [bpm.x for bpm in bpms] y = [bpm.y for bpm in bpms] z = [bpm.z_pos for bpm in bpms] self.axes.bar(z, x, width=0.2, color='b', alpha=0.5) self.axes.hold(True) self.axes.bar(z, y, width=0.2, color='g', alpha=0.5) self.axes.hold(False) self.axes.set_ylim((-4,4)) self.axes.set_title('Orbit') self.draw()
from pylab import * import ocelot.mint.swig.dcs as dcs print 'bpm read:' print 'bpm test ...' bpm_names = ['2UND1', '2UND2', '2UND4', '2UND5', '2UND6'] blm_names = ['1R.UND3'] for bpm_name in bpm_names: bpm = dcs.BPM("TTF2.DIAG/BPM/" + bpm_name) dcs.get_bpm_val(bpm) print 'bpm read:', bpm.id, bpm.x, bpm.y, bpm.z_pos for blm_name in blm_names: blm = dcs.Device("TTF2.DIAG/BLM/" + blm_name) dcs.get_device_info(blm) blm_channel = blm.id + '/CH00.TD' print 'blm info:', blm.id, bpm.z_pos h = np.array(dcs.get_device_td(blm_channel)) print 'max:', np.max(h) blm_alarm_ch = "TTF2.DIAG/BLM.ALARM/" + blm_name + '/THRFHI' val = dcs.get_device_val(blm_alarm_ch) print 'alarm:', val * 1.25e-3 gmd_channel = 'TTF2.DAQ/PHFLUX/OUT33/VAL' mag_channel = 'TTF2.MAGNETS/STEERER/H3UND1/PS.RBV'
def measure_response(steerers, step = 0.01, n_steps = 3): ''' response for blms, bpms, sase, ''' bpm_names = ['4UND3', '5UND3'] bpm_names = ['1TCOL', '6TCOL', '8TCOL', '3ECOL', '5ECOL', '2ORS', '7ORS', '9ORS', '12ORS', '1SFUND2', '1SFUND3', '1SFUND4', '1SFELC', '1SMATCH', '6SMATCH', '13SMATCH', '14SMATCH', '2UND1', '4UND1', '5UND1', '2UND2', '4UND2', '5UND2', '2UND3', '4UND3', '5UND3', '2UND4', '4UND4', '5UND4', '2UND5', '4UND5', '5UND5', '2UND6', '4UND6', '5UND6'] bpms = [] for bpm_name in bpm_names: bpm = dcs.BPM("TTF2.DIAG/BPM/" + bpm_name) bpms.append(bpm) blms = [] resp_funcs = [] for s in steerers: rf = ResponseFunction() rf.device = s rf.set_vals = [] rf.rb_vals = [] rf.bpm_vals = {} for bpm in bpm_names: rf.bpm_vals[bpm] = [] rf.blm_vals = {} rf.sase_vals = [] mag_channel = 'TTF2.MAGNETS/STEERER/' + s + '/PS' mag_channel_rbv = 'TTF2.MAGNETS/STEERER/' + s + '/PS.RBV' rf_channel_ampl = 'FLASH.RF/LLRF.CONTROLLER/CTRL.ACC23/SP.AMPL' rf_channel_ph = 'FLASH.RF/LLRF.CONTROLLER/CTRL.ACC23/SP.PHASE' # TODO: rename mag_channel dev_channel #mag_channel = mag_channel_rbv = rf_channel_ph rbv = dcs.get_device_val(mag_channel_rbv) init_v = dcs.get_device_val(mag_channel) print 'reading ', mag_channel, init_v, rbv set_val = init_v for i in range(n_steps): set_val += step # set value dcs.set_device_val(mag_channel, set_val) sleep(1.0) rbv = dcs.get_device_val(mag_channel_rbv) rf.set_vals.append(set_val) rf.rb_vals.append(rbv) for i_bpm in range(len(bpms)): #x, y = set_val**2, set_val**3 dcs.get_bpm_val(bpms[i_bpm]) rf.bpm_vals[bpm_names[i_bpm]].append((bpms[i_bpm].x,bpms[i_bpm].y)) rf.sase_vals.append( get_sase() ) for i in range(2*n_steps): set_val -= step # set value dcs.set_device_val(mag_channel, set_val) sleep(1.0) rbv = dcs.get_device_val(mag_channel_rbv) rf.set_vals.append(set_val) rf.rb_vals.append(rbv) for i_bpm in range(len(bpms)): #x, y = set_val**2, set_val**3 dcs.get_bpm_val(bpms[i_bpm]) rf.bpm_vals[bpm_names[i_bpm]].append((bpms[i_bpm].x,bpms[i_bpm].y)) rf.sase_vals.append( get_sase() ) for i in range(n_steps): set_val += step # set value dcs.set_device_val(mag_channel, set_val) rbv = dcs.get_device_val(mag_channel_rbv) sleep(1.0) rf.set_vals.append(set_val) rf.rb_vals.append(rbv) for i_bpm in range(len(bpms)): #x, y = set_val**2, set_val**3 dcs.get_bpm_val(bpms[i_bpm]) rf.bpm_vals[bpm_names[i_bpm]].append((bpms[i_bpm].x,bpms[i_bpm].y)) rf.sase_vals.append( get_sase() ) #dcs.set_device_val(mag_channel, init_v) resp_funcs.append(rf) return resp_funcs
def measure_response_2(steerer1, steerer2, step1, step2, n_steps = 3): ''' response for blms, bpms, sase, ''' bpm_names = ['4UND3', '5UND3'] bpm_names = ['1TCOL', '6TCOL', '8TCOL', '3ECOL', '5ECOL', '2ORS', '7ORS', '9ORS', '12ORS', '1SFUND2', '1SFUND3', '1SFUND4', '1SFELC', '1SMATCH', '6SMATCH', '13SMATCH', '14SMATCH', '2UND1', '4UND1', '5UND1', '2UND2', '4UND2', '5UND2', '2UND3', '4UND3', '5UND3', '2UND4', '4UND4', '5UND4', '2UND5', '4UND5', '5UND5', '2UND6', '4UND6', '5UND6'] bpms = [] for bpm_name in bpm_names: bpm = dcs.BPM("TTF2.DIAG/BPM/" + bpm_name) bpms.append(bpm) blms = [] resp_funcs = [] rf = ResponseFunction() rf.device = steerer1 + ':' + steerer2 rf.set_vals = [] rf.rb_vals = [] rf.bpm_vals = {} for bpm in bpm_names: rf.bpm_vals[bpm] = [] rf.blm_vals = {} rf.sase_vals = [] mag_channel_1 = 'TTF2.MAGNETS/STEERER/' + steerer1 + '/PS' mag_channel_rbv_1 = 'TTF2.MAGNETS/STEERER/' + steerer1 + '/PS.RBV' mag_channel_2 = 'TTF2.MAGNETS/STEERER/' + steerer2 + '/PS' mag_channel_rbv_2 = 'TTF2.MAGNETS/STEERER/' + steerer2 + '/PS.RBV' rbv_1 = dcs.get_device_val(mag_channel_rbv_1) init_v_1 = dcs.get_device_val(mag_channel_1) print 'reading ', mag_channel_1, init_v_1, rbv_1 rbv_2 = dcs.get_device_val(mag_channel_rbv_2) init_v_2 = dcs.get_device_val(mag_channel_2) print 'reading ', mag_channel_2, init_v_2, rbv_2 set_val_1 = init_v_1 set_val_2 = init_v_2 t_out = 10.0 for i in range(n_steps): print '...', set_val_1, set_val_2, '...' set_val_1 += step1 set_val_2 += step2 dcs.set_device_val(mag_channel_1, set_val_1) dcs.set_device_val(mag_channel_2, set_val_2) sleep(t_out) rbv_1 = dcs.get_device_val(mag_channel_rbv_1) rbv_2 = dcs.get_device_val(mag_channel_rbv_2) rf.set_vals.append(set_val_1) rf.rb_vals.append(rbv_1) for i_bpm in range(len(bpms)): dcs.get_bpm_val(bpms[i_bpm]) rf.bpm_vals[bpm_names[i_bpm]].append((bpms[i_bpm].x,bpms[i_bpm].y)) rf.sase_vals.append( get_sase() ) for i in range(2*n_steps): print '...', set_val_1, set_val_2, '...' set_val_1 -= step1 set_val_2 -= step2 dcs.set_device_val(mag_channel_1, set_val_1) dcs.set_device_val(mag_channel_2, set_val_2) sleep(t_out) rbv_1 = dcs.get_device_val(mag_channel_rbv_1) rbv_2 = dcs.get_device_val(mag_channel_rbv_2) rf.set_vals.append(set_val_1) rf.rb_vals.append(rbv_1) for i_bpm in range(len(bpms)): dcs.get_bpm_val(bpms[i_bpm]) rf.bpm_vals[bpm_names[i_bpm]].append((bpms[i_bpm].x,bpms[i_bpm].y)) rf.sase_vals.append( get_sase() ) for i in range(n_steps): print '...', set_val_1, set_val_2, '...' set_val_1 += step1 set_val_2 += step2 dcs.set_device_val(mag_channel_1, set_val_1) dcs.set_device_val(mag_channel_2, set_val_2) sleep(t_out) rbv_1 = dcs.get_device_val(mag_channel_rbv_1) rbv_2 = dcs.get_device_val(mag_channel_rbv_2) rf.set_vals.append(set_val_1) rf.rb_vals.append(rbv_1) for i_bpm in range(len(bpms)): dcs.get_bpm_val(bpms[i_bpm]) rf.bpm_vals[bpm_names[i_bpm]].append((bpms[i_bpm].x,bpms[i_bpm].y)) rf.sase_vals.append( get_sase() ) #dcs.set_device_val(mag_channel, init_v) resp_funcs.append(rf) return resp_funcs
from pylab import * import ocelot.mint.swig.dcs as dcs print 'bpm read:' print 'bpm test ...' bpm_names = ['2UND1', '2UND2', '2UND4', '2UND5', '2UND6'] blm_names = ['1R.UND3'] for bpm_name in bpm_names: bpm = dcs.BPM("TTF2.DIAG/BPM/" + bpm_name) dcs.get_bpm_val(bpm) print 'bpm read:', bpm.id, bpm.x, bpm.y, bpm.z_pos for blm_name in blm_names: blm = dcs.Device("TTF2.DIAG/BLM/" + blm_name) dcs.get_device_info(blm) blm_channel = blm.id + '/CH00.TD' print 'blm info:', blm.id, bpm.z_pos h = np.array(dcs.get_device_td(blm_channel)) print 'max:', np.max(h) blm_alarm_ch = "TTF2.DIAG/BLM.ALARM/" + blm_name + '/THRFHI' val = dcs.get_device_val(blm_alarm_ch) print 'alarm:', val * 1.25e-3
def measure_response(rf_params, init_v = None, step = 10.0, n_steps = 3, delay=0.5): ''' response of sase, orbit, spectrum vs. rf knobs, ''' bpm_names = ['1TCOL', '6TCOL', '8TCOL', '3ECOL', '5ECOL', '2ORS', '7ORS', '9ORS', '12ORS', '1SFUND2', '1SFUND3', '1SFUND4', '1SFELC', '1SMATCH', '6SMATCH', '13SMATCH', '14SMATCH', '2UND1', '4UND1', '5UND1', '2UND2', '4UND2', '5UND2', '2UND3', '4UND3', '5UND3', '2UND4', '4UND4', '5UND4', '2UND5', '4UND5', '5UND5', '2UND6', '4UND6', '5UND6'] bpms = [] for bpm_name in bpm_names: bpm = dcs.BPM("TTF2.DIAG/BPM/" + bpm_name) bpms.append(bpm) blms = [] resp_funcs = [] for s in rf_params: rf = ResponseFunction() rf.device = s rf.set_vals = [] rf.rb_vals = [] rf.bpm_vals = {} for bpm in bpm_names: rf.bpm_vals[bpm] = [] rf.blm_vals = {} rf.sase_vals = [] rf.spec_vals = [] rf_ch_amp_1 = 'FLASH.RF/LLRF.CONTROLLER/CTRL.ACC1/SP.AMPL' rf_ch_ph_1 = 'FLASH.RF/LLRF.CONTROLLER/CTRL.ACC1/SP.PHASE' rf_ch_amp_39 = 'FLASH.RF/LLRF.CONTROLLER/CTRL.ACC39/SP.AMPL' rf_ch_ph_39 = 'FLASH.RF/LLRF.CONTROLLER/CTRL.ACC39/SP.PHASE' rf_ch_amp_2 = 'FLASH.RF/LLRF.CONTROLLER/CTRL.ACC23/SP.AMPL' rf_ch_ph_2 = 'FLASH.RF/LLRF.CONTROLLER/CTRL.ACC23/SP.PHASE' init_amp_1 = dcs.get_device_val(rf_ch_amp_1) init_ph_1 = dcs.get_device_val(rf_ch_ph_1) init_amp_39 = dcs.get_device_val(rf_ch_amp_39) init_ph_39 = dcs.get_device_val(rf_ch_ph_39) init_amp_2 = dcs.get_device_val(rf_ch_amp_2) init_ph_2 = dcs.get_device_val(rf_ch_ph_2) print 'reading rf params', init_amp_1, init_ph_1, init_amp_39, init_ph_39, init_amp_2, init_ph_2 c0,c1,c2,c3 = find_knob_val_RF1(init_amp_1, init_ph_1, init_amp_39, init_ph_39) c4, c5 = find_knob_val_RF2(init_amp_2, init_ph_2) print 'init knobs:', c0,c1,c2,c3, c4, c5 cur_step = step ''' v1, phi1, v39, phi39=find_parameters_RF1(c0,-692.8,c2,c3) dcs.set_device_val(rf_ch_amp_1, v1) dcs.set_device_val(rf_ch_ph_1, phi1) dcs.set_device_val(rf_ch_amp_39, v39) dcs.set_device_val(rf_ch_ph_39, phi39) return None ''' ''' v2, phi2 = find_parameters_RF2(c4,-1588.0) dcs.set_device_val(rf_ch_amp_2, v2) dcs.set_device_val(rf_ch_ph_2, phi2) return None ''' for i in range(n_steps*4): if i == n_steps: cur_step = - step if i == n_steps*3: cur_step = step if s == 'c0': c0 += cur_step if s == 'c1': c1 += cur_step if s == 'c2': c2 += cur_step if s == 'c3': c3 += cur_step if s == 'c4': c4 += cur_step if s == 'c5': c5 += cur_step v1, phi1, v39, phi39=find_parameters_RF1(c0,c1,c2,c3) v2, phi2 = find_parameters_RF2(c4,c5) if s in ['c0','c1','c2','c3']: dcs.set_device_val(rf_ch_amp_1, v1) dcs.set_device_val(rf_ch_ph_1, phi1) dcs.set_device_val(rf_ch_amp_39, v39) dcs.set_device_val(rf_ch_ph_39, phi39) print 'BC1' else: dcs.set_device_val(rf_ch_amp_2, v2) dcs.set_device_val(rf_ch_ph_2, phi2) print 'BC2' print 'knobs:', c0,c1,c2,c3, c4, c5 print 'rf:', v1, phi1, v39, phi39, v2, phi2 sleep(delay) rf.set_vals.append(locals()[s]) for i_bpm in range(len(bpms)): dcs.get_bpm_val(bpms[i_bpm]) rf.bpm_vals[bpm_names[i_bpm]].append((bpms[i_bpm].x,bpms[i_bpm].y)) rf.sase_vals.append( get_sase() ) f, spec = get_spectrum() rf.f = f rf.spec_vals.append(spec) resp_funcs.append(rf) return resp_funcs