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'
Example #4
0
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 
Example #5
0
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 
Example #6
0
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
	

Example #7
0
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