示例#1
0
	def connectPVs(self):
		if(self.amp_pv == null or self.phase_pv == null or self.cav_pwr_pv == null):
			self.amp_pv = ChannelFactory.defaultFactory().getChannel(self.amp_pv_name)
			self.phase_pv = ChannelFactory.defaultFactory().getChannel(self.phase_pv_name)
			self.cav_pwr_pv = ChannelFactory.defaultFactory().getChannel(self.cav_pwr_pv_name)
			self.amp_pv.connectAndWait(0.5)
			self.phase_pv.connectAndWait(0.5)
	def connectPVs(self):
		if(self.amp_pv == null or self.phase_pv == null or self.cav_pwr_pv == null):
			self.amp_pv = ChannelFactory.defaultFactory().getChannel(self.amp_pv_name)
			self.phase_pv = ChannelFactory.defaultFactory().getChannel(self.phase_pv_name)
			self.cav_pwr_pv = ChannelFactory.defaultFactory().getChannel(self.cav_pwr_pv_name)
			self.amp_pv.connectAndWait(0.5)
			self.phase_pv.connectAndWait(0.5)
			self.cav_pwr_pv.connectAndWait(0.5)
	def connectPVs(self):
		#print "debug connection start cav="+self.cav_wrapper.alias
		prefix = "DTL_Diag:"
		if(self.fc_name == "FC104"): prefix = "CCL_Diag:"
		self.fc_actuator_pv = ChannelFactory.defaultFactory().getChannel(prefix+self.fc_name+":Actuator")
		if(not self.fc_actuator_pv.connectAndWait(0.5)): return false
		self.fc_signal_pv = ChannelFactory.defaultFactory().getChannel(prefix+self.fc_name+":Fast:QGt")
		if(not self.fc_signal_pv.connectAndWait(0.5)): return false
		self.fc_actuator_in_pv = ChannelFactory.defaultFactory().getChannel(prefix+self.fc_name+":Actuator_In")
		if(not self.fc_actuator_in_pv.connectAndWait(0.5)): return false
		self.fc_actuator_out_pv = ChannelFactory.defaultFactory().getChannel(prefix+self.fc_name+":Actuator_Out")	
		if(not self.fc_actuator_out_pv.connectAndWait(0.5)): return false
		#----------------------------
		self.cav_wrapper.connectPVs()
		#----------------------------
		return true
	def run_measurement(self,bpm1_avg_phase_old,bpm2_avg_phase_old):
		scl_long_tuneup_rescale_controller = self.scl_long_tuneup_controller.scl_long_tuneup_rescale_controller
		bpms_phase_shift_panel = scl_long_tuneup_rescale_controller.bpms_phase_shift_panel
		measure_stopper = bpms_phase_shift_panel.measure_stopper
		measure_stopper.shouldStop = false		
		n_iter = int(bpms_phase_shift_panel.iter_measuremen_text.getValue())
		cav_wrapper = self.scl_long_tuneup_controller.cav0_wrapper
		bpm_wrapper1 = cav_wrapper.bpm_wrappers[0]
		bpm_wrapper2 = cav_wrapper.bpm_wrappers[1]
		ch_phase1 = ChannelFactory.defaultFactory().getChannel(bpm_wrapper1.bpm.getId()+":phaseAvg")
		ch_phase2 = ChannelFactory.defaultFactory().getChannel(bpm_wrapper2.bpm.getId()+":phaseAvg")
		ch_phase1.connectAndWait(0.5)
		ch_phase2.connectAndWait(0.5)
		phase1_arr = []
		phase2_arr = []
		count = 0
		while(count < n_iter):
			if(measure_stopper.shouldStop): break
			time.sleep(1.2)
			phase1_arr.append(ch_phase1.getValDbl())
			phase2_arr.append(ch_phase2.getValDbl())
			if(measure_stopper.shouldStop): break
			count += 1
			if(measure_stopper.shouldStop): break
			bpms_phase_shift_panel.iter_measuremen_text.setValue(float(n_iter-count))
		bpm1_avg_phase = 0.
		bpm2_avg_phase = 0.
		for phase in 	phase1_arr:
			bpm1_avg_phase += phase/len(phase1_arr)
		for phase in 	phase2_arr:
			bpm2_avg_phase += phase/len(phase2_arr)
		bpms_phase_shift_panel.new_phases_text.setText("%+4.1f  /  %+4.1f"%(bpm1_avg_phase,bpm2_avg_phase))
		bpm_numb = 0
		phase_diff = 0.
		if(bpm_wrapper1.isGood):
			phase_diff += makePhaseNear(bpm1_avg_phase - bpm1_avg_phase_old,0.)
			bpm_numb += 1
		if(bpm_wrapper2.isGood):
			phase_diff += makePhaseNear(bpm2_avg_phase - bpm2_avg_phase_old,0.)
			bpm_numb += 1	
		if(bpm_numb > 0):
			phase_diff /= bpm_numb
		bpms_phase_shift_panel.phase_shift_text.setValue(phase_diff)
		bpms_phase_shift_panel.iter_measuremen_text.setValue(float(n_iter))
		if(bpm_numb == 0 or count == 0): return false
		return true
	def run_measurement(self,bpm1_avg_phase_old,bpm2_avg_phase_old):
		scl_long_tuneup_rescale_controller = self.scl_long_tuneup_controller.scl_long_tuneup_rescale_controller
		bpms_phase_shift_panel = scl_long_tuneup_rescale_controller.bpms_phase_shift_panel
		measure_stopper = bpms_phase_shift_panel.measure_stopper
		measure_stopper.shouldStop = false		
		n_iter = int(bpms_phase_shift_panel.iter_measuremen_text.getValue())
		cav_wrapper = self.scl_long_tuneup_controller.cav0_wrapper
		bpm_wrapper1 = cav_wrapper.bpm_wrappers[0]
		bpm_wrapper2 = cav_wrapper.bpm_wrappers[1]
		ch_phase1 = ChannelFactory.defaultFactory().getChannel(bpm_wrapper1.bpm.getId()+":phaseAvg")
		ch_phase2 = ChannelFactory.defaultFactory().getChannel(bpm_wrapper2.bpm.getId()+":phaseAvg")
		ch_phase1.connectAndWait(0.5)
		ch_phase2.connectAndWait(0.5)
		phase1_arr = []
		phase2_arr = []
		count = 0
		while(count < n_iter):
			if(measure_stopper.shouldStop): break
			time.sleep(1.2)
			phase1_arr.append(ch_phase1.getValDbl())
			phase2_arr.append(ch_phase2.getValDbl())
			if(measure_stopper.shouldStop): break
			count += 1
			if(measure_stopper.shouldStop): break
			bpms_phase_shift_panel.iter_measuremen_text.setValue(float(n_iter-count))
		bpm1_avg_phase = 0.
		bpm2_avg_phase = 0.
		for phase in 	phase1_arr:
			bpm1_avg_phase += phase/len(phase1_arr)
		for phase in 	phase2_arr:
			bpm2_avg_phase += phase/len(phase2_arr)
		bpms_phase_shift_panel.new_phases_text.setText("%+4.1f  /  %+4.1f"%(bpm1_avg_phase,bpm2_avg_phase))
		bpm_numb = 0
		phase_diff = 0.
		if(bpm_wrapper1.isGood):
			phase_diff += makePhaseNear(bpm1_avg_phase - bpm1_avg_phase_old,0.)
			bpm_numb += 1
		if(bpm_wrapper2.isGood):
			phase_diff += makePhaseNear(bpm2_avg_phase - bpm2_avg_phase_old,0.)
			bpm_numb += 1	
		if(bpm_numb > 0):
			phase_diff /= bpm_numb
		bpms_phase_shift_panel.phase_shift_text.setValue(phase_diff)
		bpms_phase_shift_panel.iter_measuremen_text.setValue(float(n_iter))
		if(bpm_numb == 0 or count == 0): return false
		return true
示例#6
0
 def getPV_Value_Monitor(self, pv_name):
     if (self.pv_names_dict.has_key(pv_name)):
         pv_value_monitor = self.pv_names_dict[pv_name]
         pv_value_monitor.setIsOn(false)
         return pv_value_monitor
     ch = ChannelFactory.defaultFactory().getChannel(pv_name)
     pv_value_monitor = PV_Value_Monitor(ch)
     ch.addMonitorValTime(pv_value_monitor, Monitor.VALUE)
     pv_value_monitor.setIsOn(false)
     self.pv_names_dict[pv_name] = pv_value_monitor
     return pv_value_monitor
	def getPV_Value_Monitor(self,pv_name):
		if(self.pv_names_dict.has_key(pv_name)):
			pv_value_monitor = self.pv_names_dict[pv_name]
			pv_value_monitor.setIsOn(false)
			return pv_value_monitor
		ch = ChannelFactory.defaultFactory().getChannel(pv_name)
		pv_value_monitor = PV_Value_Monitor(ch)
		ch.addMonitorValTime(pv_value_monitor,Monitor.VALUE)
		pv_value_monitor.setIsOn(false)
		self.pv_names_dict[pv_name] = pv_value_monitor
		return pv_value_monitor
示例#8
0
	def setBPMs(self,bpm_wrappers):
		self.batchGetRequest = BatchGetValueRequest()
		self.bpm_wrappers = bpm_wrappers
		#--------------------------------------------
		self.bpm_ch_amp_phase_dict = {}
		self.bpm_old_phases_dict = {}	
		ch_arr = []
		for bpm_wrapper in self.bpm_wrappers:
			if(not bpm_wrapper.isGood): continue
			bpm = bpm_wrapper.getBPM()
			ch_ampl = ChannelFactory.defaultFactory().getChannel(bpm.getId()+":amplitudeAvg")
			ch_phase = ChannelFactory.defaultFactory().getChannel(bpm.getId()+":phaseAvg")
			if(ch_ampl.connectAndWait(0.5) and ch_phase.connectAndWait(0.5)):		
				self.bpm_ch_amp_phase_dict[bpm_wrapper] = (ch_ampl,ch_phase)
				#print "debug bpm=",bpm_wrapper.alias," added!"
				ch_arr.append(ch_ampl)
				ch_arr.append(ch_phase)
			else:
				bpm_wrapper.isGood = false
				#print "debug bad BPM =",bpm_wrapper.alias
		for ch in ch_arr:
			self.batchGetRequest.addChannel(ch)
	def run(self):
		mass = self.scl_long_tuneup_controller.mass/1.0e+6			
		c_light = self.scl_long_tuneup_controller.c_light
		ring_length = 	self.scl_long_tuneup_controller.ring_length
		messageTextField = self.scl_long_tuneup_controller.getMessageTextField()
		if(messageTextField != null):
			messageTextField.setText("")
		scl_long_tuneup_bpm_offsets_controller = self.scl_long_tuneup_controller.scl_long_tuneup_bpm_offsets_controller
		bpms_offsets_from_hebt1_panel = scl_long_tuneup_bpm_offsets_controller.bpms_offsets_from_hebt1_panel
		n_iter = int(bpms_offsets_from_hebt1_panel.iter_text.getValue())
		iter_left_text = bpms_offsets_from_hebt1_panel.iter_left_text
		ring_energy_text = bpms_offsets_from_hebt1_panel.ring_energy_text
		ring_energy_err_text = bpms_offsets_from_hebt1_panel.ring_energy_err_text
		ca_ring_freq = ChannelFactory.defaultFactory().getChannel("Ring_Diag:BCM_D09:FFT_peak2")
		scl_long_tuneup_init_controller = self.scl_long_tuneup_controller.scl_long_tuneup_init_controller
		scl_long_tuneup_init_controller.connectAllBPMs()		
		bpmBatchReader = self.scl_long_tuneup_controller.bpmBatchReader
		beamTrigger = self.scl_long_tuneup_controller.beamTrigger
		statistic_state_controller = bpms_offsets_from_hebt1_panel.statistic_state_controller
		beamTrigger.scan_state_controller = statistic_state_controller
		statistic_state_controller.setShouldStop(false)
		ring_energy_text.setValue(0.)
		ring_energy_err_text.setValue(0.)
		eKin_ring_arr = []
		count = n_iter
		while(count > 0):
			iter_left_text.setValue(1.0*count)
			res = bpmBatchReader.makeMeasurement()
			count -= 1
			if(not res):
				if(messageTextField != null):
					messageTextField.setText("cannot measure the BPM phases! Stop.")
					if(statistic_state_controller.getShouldStop()):
						messageTextField.setText("The Statistics stopped upon user's request!")
					break
			#print "debug count=",count
			bpmBatchReader.collectStatistics(self.bpm_amp_phase_data_dict)
			ring_freq = ca_ring_freq.getValDbl()
			beta = ring_length*ring_freq/c_light
			gamma = 1./math.sqrt(1.0-beta*beta)
			eKin = mass*(gamma-1.0)
			eKin_ring_arr.append(eKin)
		n_iter = len(eKin_ring_arr)
		iter_left_text.setValue(0.)
		if(n_iter >= 1):
			(eKin_ring,eKin_ring_err) = calculateAvgErr(eKin_ring_arr)
			ring_energy_text.setValue(eKin_ring)
			ring_energy_err_text.setValue(eKin_ring_err)
			self.calculatePhaseOffsets(eKin_ring)
		statistic_state_controller.setShouldStop(true)
	def run(self):
		mass = self.scl_long_tuneup_controller.mass/1.0e+6			
		c_light = self.scl_long_tuneup_controller.c_light
		ring_length = 	self.scl_long_tuneup_controller.ring_length
		messageTextField = self.scl_long_tuneup_controller.getMessageTextField()
		if(messageTextField != null):
			messageTextField.setText("")
		scl_long_tuneup_bpm_offsets_controller = self.scl_long_tuneup_controller.scl_long_tuneup_bpm_offsets_controller
		bpms_offsets_from_hebt1_panel = scl_long_tuneup_bpm_offsets_controller.bpms_offsets_from_hebt1_panel
		n_iter = int(bpms_offsets_from_hebt1_panel.iter_text.getValue())
		iter_left_text = bpms_offsets_from_hebt1_panel.iter_left_text
		ring_energy_text = bpms_offsets_from_hebt1_panel.ring_energy_text
		ring_energy_err_text = bpms_offsets_from_hebt1_panel.ring_energy_err_text
		ca_ring_freq = ChannelFactory.defaultFactory().getChannel("Ring_Diag:BCM_D09:FFT_peak2")
		scl_long_tuneup_init_controller = self.scl_long_tuneup_controller.scl_long_tuneup_init_controller
		scl_long_tuneup_init_controller.connectAllBPMs()		
		bpmBatchReader = self.scl_long_tuneup_controller.bpmBatchReader
		beamTrigger = self.scl_long_tuneup_controller.beamTrigger
		statistic_state_controller = bpms_offsets_from_hebt1_panel.statistic_state_controller
		beamTrigger.scan_state_controller = statistic_state_controller
		statistic_state_controller.setShouldStop(false)
		ring_energy_text.setValue(0.)
		ring_energy_err_text.setValue(0.)
		eKin_ring_arr = []
		count = n_iter
		while(count > 0):
			iter_left_text.setValue(1.0*count)
			res = bpmBatchReader.makeMeasurement()
			count -= 1
			if(not res):
				if(messageTextField != null):
					messageTextField.setText("cannot measure the BPM phases! Stop.")
					if(statistic_state_controller.getShouldStop()):
						messageTextField.setText("The Statistics stopped upon user's request!")
					break
			#print "debug count=",count
			bpmBatchReader.collectStatistics(self.bpm_amp_phase_data_dict)
			ring_freq = ca_ring_freq.getValDbl()
			beta = ring_length*ring_freq/c_light
			gamma = 1./math.sqrt(1.0-beta*beta)
			eKin = mass*(gamma-1.0)
			eKin_ring_arr.append(eKin)
		n_iter = len(eKin_ring_arr)
		iter_left_text.setValue(0.)
		if(n_iter >= 1):
			(eKin_ring,eKin_ring_err) = calculateAvgErr(eKin_ring_arr)
			ring_energy_text.setValue(eKin_ring)
			ring_energy_err_text.setValue(eKin_ring_err)
			self.calculatePhaseOffsets(eKin_ring)
		statistic_state_controller.setShouldStop(true)
	def __init__(self,rfq_keeper_controller):
		self.rfq_keeper_controller = rfq_keeper_controller
		self.pv_current_tbt = ChannelFactory.defaultFactory().getChannel("MEBT_Diag:BCM11:currentTBT")
		self.pv_beamOn = ChannelFactory.defaultFactory().getChannel("ICS_Tim:Gate_BeamOn:Switch")
		self.pv_continuous = ChannelFactory.defaultFactory().getChannel("ICS_Tim:Gate_BeamOn:SSMode")
		self.pv_reprate = ChannelFactory.defaultFactory().getChannel("ICS_Tim:Gate_BeamOn:RR")
		self.pv_rfq_PW = ChannelFactory.defaultFactory().getChannel("RFQ_LLRF:FCM1:CtlRFPW")
		self.pv_chumps_beam_on = ChannelFactory.defaultFactory().getChannel("MEBT_Diag:ChMPS:BeamOn")
		self.pv_chumps_beam_gap = ChannelFactory.defaultFactory().getChannel("MEBT_Diag:ChMPS:BeamInGap")
		self.pv_target_pwr = ChannelFactory.defaultFactory().getChannel("RTBT_Diag:BCM25I:Power1_KW")		
		self.pv_current_tbt.connectAndWait(0.5)
		self.pv_beamOn.connectAndWait(0.5)
		self.pv_continuous.connectAndWait(0.5)
		self.pv_reprate.connectAndWait(0.5)
		self.pv_rfq_PW.connectAndWait(0.5)
		self.pv_chumps_beam_on.connectAndWait(0.5)
		self.pv_chumps_beam_gap.connectAndWait(0.5)
		self.pv_target_pwr.connectAndWait(0.5)
		self.current_integral = 0.
		self.beam_on = 0
		self.continuous = 0
		self.reprate = 0.
		self.pw = 0.
		self.target_pwr = 0.
 def __init__(self, cav):
     #self.bpm_ch_amp_phase_dic[BPM_Wrapper] = (graphDataAmp,graphDataPhase)
     self.cav = cav
     self.alias = cav.getId().split(":")[1]
     self.isGood = true
     self.isMeasured = false
     self.isAnalyzed = false
     self.pos = 0.
     self.bpm_amp_phase_dict = {}
     self.bpm_wrappers = []
     #--- use or not in phase scan analysis
     self.bpm_wrappers_useInPhaseAnalysis = []
     #--- use or not in BPMs' amplitudes analysis
     self.bpm_wrappers_useInAmpBPMs = []
     #--- BPM wrappers for BPM0 and BPM1 during cavity phase setup after the phase scan
     self.bpm_wrapper0 = null
     self.bpm_wrapper1 = null
     self.phaseDiffPlot = BasicGraphData()
     self.phaseDiffPlot.setGraphPointSize(7)
     self.phaseDiffPlot.setGraphColor(Color.BLUE)
     self.phaseDiffPlotTh = BasicGraphData()
     self.phaseDiffPlotTh.setDrawPointsOn(false)
     self.phaseDiffPlotTh.setGraphColor(Color.RED)
     self.phaseDiffPlotTh.setLineThick(3)
     #----cavity's parameters
     self.initDesignAmp = 0.
     self.initDesignPhase = 0.
     #-- design parameters will be defined after analysis of the phase scan data
     self.designAmp = 0.
     self.designPhase = 0.
     self.avg_gap_phase = 0.  # this is a model parameter that will be used in rescaling
     #--- initial live parameters are measured after initialization
     self.initLiveAmp = 0.
     self.initLivePhase = 0.
     #live phase will be defined after scan
     self.livePhase = 0.
     self.scanPhaseShift = -18.0
     self.real_scanPhaseShift = 0.
     #--- avg. phase error and harmonic amp after harmonics fitting during phase scan
     self.phase_scan_harm_err = 0.
     self.phase_scan_harm_amp = 0.
     self.phase_scan_harm_funcion = HramonicsFunc([
         0.,
     ])
     self.energy_guess_harm_funcion = HramonicsFunc([
         0.,
     ])
     self.eKinOutPlot = BasicGraphData()
     self.eKinOutPlot.setGraphPointSize(7)
     self.eKinOutPlot.setGraphColor(Color.BLUE)
     self.eKinOutPlotTh = BasicGraphData()
     self.eKinOutPlotTh.setDrawPointsOn(false)
     self.eKinOutPlotTh.setGraphColor(Color.RED)
     self.eKinOutPlotTh.setLineThick(3)
     self.eKinOutPlot.setGraphProperty(GRAPH_LEGEND_KEY,
                                       " Ekin Out " + self.alias)
     self.eKinOutPlotTh.setGraphProperty(GRAPH_LEGEND_KEY,
                                         " Ekin Out Fit " + self.alias)
     #--- energy params
     self.eKin_in_guess = 0.  # is used for CCL4 forward analysis
     self.eKin_out_guess = 0.  # is used for CCL4 forward analysis
     self.eKin_in = 0.
     self.eKin_out = 0.
     self.eKin_err = 0.
     self.bpm_eKin_out = 0.
     self.model_eKin_out = 0.
     #------- the rescale data bucket
     self.rescaleBacket = CavityRescaleBucket(self)
     #------- the longitudinal Twiss parameters bucket
     self.longTwissBucket = Long_Twiss_Bucket(self)
     #------- LLRF Buffer resettings PVs
     self.ch_aff_mode = ChannelFactory.defaultFactory().getChannel(
         "SCL_LLRF:FCM" + self.alias.replace("Cav", "") + ":AFF_Mode")
     self.ch_aff_reset = ChannelFactory.defaultFactory().getChannel(
         "SCL_LLRF:FCM" + self.alias.replace("Cav", "") + ":AFF_Reset")
     #------- Amplitude set goal value PV
     self.ampl_goal_pv = ChannelFactory.defaultFactory().getChannel(
         "SCL_LLRF:FCM" + self.alias.replace("Cav", "") + ":cavAmpGoal")
示例#13
0
# Slit:x_set     - set slit position [mm]
# Slit:x         - read back slit position [mm]
# Slit:fc_signal - Faraday Cup (FC) signal [C]

import sys
import math
import types
import time
import random

from xal.ca import ChannelFactory
from xal.ca import Monitor
from xal.ca import Channel
from xal.ca import IEventSinkValue

channelFactory = ChannelFactory.newServerFactory()


class GaussDistrubution:
    def __init__(self, N, center, sigma, rel_base):
        """
		g(x) = (N/(sigma*sqrt(2*pi)))*exp(-(x-center)**2/(2*sigma**2))
		"""
        self.N = N
        self.center = center
        self.sigma = sigma
        self.base = rel_base * N / (sigma * math.sqrt(2 * math.pi))
        self.distance_to_slit_edge = 32.0  # mm
        self.beam_pipe_radius = 15  # mm
        self.step = sigma / 100
示例#14
0
import time

from jarray import *
from java.lang import *
from java.util import *
from java.io import *

from xal.ca import BatchGetValueRequest, ChannelFactory

from xal.ca import Monitor
from xal.ca import Channel
from xal.ca import IEventSinkValue



pv = ChannelFactory.defaultFactory().getChannel("MEBT_Mag:PS_QH01:B_Set")
pv.connectAndWait(1.5)
print "ca=",pv.channelName()," val=",pv.getValDbl()
pv.putVal(0.005)

class ParameterListener(IEventSinkValue):
        def __init__(self):
                self.a = 1

        def eventValue(self,record,pv):
                val = record.doubleValue()
                print "debug pv=",pv.channelName()," val=",val


monitor = pv.addMonitorValue(ParameterListener(), Monitor.VALUE)
示例#15
0
文件: moveTo.py 项目: vdmv/uspas-2019
import sys
import math
import types
import time

from jarray import *
from java.lang import *
from java.util import *
from java.io import *

from xal.ca import ChannelFactory

from xal.ca import Monitor
from xal.ca import Channel

pv_x_set = ChannelFactory.defaultFactory().getChannel("Slit:x_set")
pv_x_set.connectAndWait(1.5)
pv_x = ChannelFactory.defaultFactory().getChannel("Slit:x")
pv_x.connectAndWait(1.5)

if len(sys.argv) > 1:
    dest = float(sys.argv[1])
    pv_x_set.putVal(dest)
else:
    rb = pv_x.getValDbl()
    print 'Current position', rb
    exit(0)

while 2 > 1:
    rb = pv_x.getValDbl()
    print 'Current position', rb