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 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
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 __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")
# 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
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)
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