class Table_and_Plots_Panel(JPanel): def __init__(self,scl_long_tuneup_controller): self.scl_long_tuneup_controller = scl_long_tuneup_controller self.setLayout(BorderLayout()) #----etched border etched_border = BorderFactory.createEtchedBorder() titled_border = BorderFactory.createTitledBorder(etched_border,"BPM Table and Plots") self.setBorder(titled_border) #---------------------------------------- self.bpm_table = JTable(Energy_Meter_BPMs_Table_Model(self.scl_long_tuneup_controller)) self.bpm_table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION) self.bpm_table.setFillsViewportHeight(true) self.bpm_table.setPreferredScrollableViewportSize(Dimension(400,300)) scrl_panel = JScrollPane(self.bpm_table) scrl_panel.setBorder(etched_border) bpm_table_panel = JPanel(BorderLayout()) bpm_table_panel.add(scrl_panel,BorderLayout.WEST) #----------------------------------------- self.gp_bpm_phase_err = FunctionGraphsJPanel() self.gp_bpm_phase_err.setLegendButtonVisible(true) self.gp_bpm_phase_err.setChooseModeButtonVisible(true) self.gp_bpm_phase_err.setName("BPM Phase Errors") self.gp_bpm_phase_err.setAxisNames("position, [m]","BPM Phase Error, [deg]") self.gp_bpm_phase_err.setBorder(etched_border) bpm_graph_panel = JPanel(BorderLayout()) bpm_graph_panel.add(self.gp_bpm_phase_err) #------graph data self.bpm_phase_err_gd = BasicGraphData() self.bpm_phase_err_gd.setGraphPointSize(8) self.bpm_phase_err_gd.setDrawLinesOn(false) self.bpm_phase_err_gd.setGraphColor(Color.BLUE) self.gp_bpm_phase_err.addGraphData(self.bpm_phase_err_gd) #----------------------------------------- self.add(bpm_table_panel,BorderLayout.WEST) self.add(bpm_graph_panel,BorderLayout.CENTER)
class AccState: """ AccState keeps the dictionary with quad fields, cavity amp. and phases, the graph plot with WS/LW sizes, the calculated beam sizes, and the scenario for this quad/cavities parameters. """ def __init__(self,quad_cav_dict,linac_wizard_document): self.quad_cav_dict = quad_cav_dict self.linac_wizard_document = linac_wizard_document self.isOn = true self.size_hor_record_arr = [] self.size_ver_record_arr = [] self.isSelected_ = false #----------- graph data self.gd_exp_hor = BasicGraphData() self.gd_exp_ver = BasicGraphData() self.gd_exp_hor.setDrawLinesOn(false) self.gd_exp_ver.setDrawLinesOn(false) self.gd_exp_hor.setGraphPointSize(11) self.gd_exp_ver.setGraphPointSize(11) self.gd_exp_hor.setGraphColor(Color.BLUE) self.gd_exp_ver.setGraphColor(Color.BLUE) self.gd_model_hor = BasicGraphData() self.gd_model_ver = BasicGraphData() self.gd_model_lon = BasicGraphData() self.gd_model_hor.setGraphColor(Color.RED) self.gd_model_ver.setGraphColor(Color.RED) self.gd_model_lon.setGraphColor(Color.RED) self.gd_model_hor.setLineThick(3) self.gd_model_ver.setLineThick(3) self.gd_model_lon.setLineThick(4) self.gd_model_hor.setDrawPointsOn(false) self.gd_model_ver.setDrawPointsOn(false) self.gd_exp_hor.setGraphProperty(GRAPH_LEGEND_KEY,"LW/WS sizes") self.gd_exp_ver.setGraphProperty(GRAPH_LEGEND_KEY,"LW/WS sizes") self.gd_model_hor.setGraphProperty(GRAPH_LEGEND_KEY,"Model Hor. Size") self.gd_model_ver.setGraphProperty(GRAPH_LEGEND_KEY,"Model Ver. Size") self.gd_model_lon.setGraphProperty(GRAPH_LEGEND_KEY,"Model Longitudinal Size") #------ accelerator model set up accSeq = self.linac_wizard_document.getAccSeq() quads = self.linac_wizard_document.ws_lw_controller.quads cavs = self.linac_wizard_document.ws_lw_controller.cavs #--memorize the initial values self.quad_field_arr = [] for quad in quads: self.quad_field_arr.append([quad,quad.getDfltField()]) self.cav_amp_phase_arr = [] for cav in cavs: self.cav_amp_phase_arr.append([cav,cav.getDfltCavAmp(),cav.getDfltCavPhase()]) #-- set up values from dictionaries [quad_dict,cav_amp_phase_dict] = self.quad_cav_dict for quad in quads: if(quad_dict.has_key(quad)): quad.setDfltField(quad_dict[quad]) for cav in cavs: if(cav_amp_phase_dict.has_key(cav)): cav.updateDesignAmp(cav_amp_phase_dict[cav][0]) cav.updateDesignPhase(cav_amp_phase_dict[cav][1]) self.env_tracker = AlgorithmFactory.createEnvTrackerAdapt(accSeq) self.env_tracker.setRfGapPhaseCalculation(true) self.env_tracker.setUseSpacecharge(true) self.design_probe = ProbeFactory.getEnvelopeProbe(accSeq,self.env_tracker) probe = EnvelopeProbe(self.design_probe) self.scenario = Scenario.newScenarioFor(accSeq) self.scenario.setProbe(probe) self.scenario.setSynchronizationMode(Scenario.SYNC_MODE_DESIGN) self.scenario.resync() self.scenario.run() self.traj = self.scenario.getTrajectory() #---restore the quads and cav parameters for [quad,field] in self.quad_field_arr: quad.setDfltField(field) for [cav,amp,phase] in self.cav_amp_phase_arr: cav.updateDesignAmp(amp) cav.updateDesignPhase(phase) def resyncScenario(self): #-- set up values from dictionaries [quad_dict,cav_amp_phase_dict] = self.quad_cav_dict for [quad,field] in self.quad_field_arr: if(quad_dict.has_key(quad)): quad.setDfltField(quad_dict[quad]) for [cav,amp,phase] in self.cav_amp_phase_arr: if(cav_amp_phase_dict.has_key(cav)): cav.updateDesignAmp(cav_amp_phase_dict[cav][0]) cav.updateDesignPhase(cav_amp_phase_dict[cav][1]) self.scenario.resync() #---restore the quads and cav parameters for [quad,field] in self.quad_field_arr: quad.setDfltField(field) for [cav,amp,phase] in self.cav_amp_phase_arr: cav.updateDesignAmp(amp) cav.updateDesignPhase(phase) def updateGraphData(self): tr_twiss_analysis_controller = self.linac_wizard_document.tr_twiss_analysis_controller fit_param_index = tr_twiss_analysis_controller.fit_param_index self.gd_exp_hor.removeAllPoints() self.gd_exp_ver.removeAllPoints() for size_record in self.size_hor_record_arr: if(not size_record.isOn): continue size = size_record.gauss_sigma if(fit_param_index == 1): size = size_record.custom_gauss_sigma if(fit_param_index == 2): size = size_record.custom_rms_sigma pos = size_record.pos self.gd_exp_hor.addPoint(pos,size) for size_record in self.size_ver_record_arr: if(not size_record.isOn): continue size = size_record.gauss_sigma if(fit_param_index == 1): size = size_record.custom_gauss_sigma if(fit_param_index == 2): size = size_record.custom_rms_sigma pos = size_record.pos self.gd_exp_ver.addPoint(pos,size) def addSizeRecord(self,size_record): if(size_record.ws_direction == WS_DIRECTION_HOR): self.size_hor_record_arr.append(size_record) if(size_record.ws_direction == WS_DIRECTION_VER): self.size_ver_record_arr.append(size_record) def getQuadCavDict(self): return self.quad_cav_dict def setSelection(self,selection = false): self.isSelected_ = selection def isSelected(self): return self.isSelected_
class WS_Scan_Record: """ This class keeps the results of the scan in one directions for one LW or WS """ def __init__(self, ws_node, ws_direction = WS_DIRECTION_NULL): self.ws_node = ws_node self.gauss_sigma = 0. self.gd_wf = BasicGraphData() self.gd_log_wf = BasicGraphData() self.gd_wf.setDrawLinesOn(false) self.gd_log_wf.setDrawLinesOn(false) self.gd_wf.setGraphPointSize(5) self.gd_log_wf.setGraphPointSize(5) self.gd_wf.setGraphColor(Color.BLUE) self.gd_log_wf.setGraphColor(Color.BLUE) self.setDirection(ws_direction) self.left_limit = 0. self.right_limit = 0. def setWF(self,wf_x_arr,wf_y_arr): #set waive form self.gd_wf.removeAllPoints() self.gd_log_wf.removeAllPoints() if(len(wf_x_arr) == len(wf_y_arr) and len(wf_y_arr) > 0): self.left_limit = wf_x_arr[0] self.right_limit = wf_x_arr[len(wf_x_arr)-1] y_max = 0. for y in wf_y_arr: if(math.fabs(y_max) < math.fabs(y)): y_max = y if(y_max < 0): for i in range(len(wf_y_arr)): wf_y_arr[i] = - wf_y_arr[i] y_max = - y_max self.gd_wf.addPoint(wf_x_arr,wf_y_arr) for i in range(len(wf_y_arr)): if(wf_y_arr[i] > 0.): self.gd_log_wf.addPoint(wf_x_arr[i],math.log(wf_y_arr[i])) def setDirection( self,ws_direction): self.ws_direction = ws_direction legendKey = GRAPH_LEGEND_KEY legendName = self.ws_node.getId() if(self.ws_direction == WS_DIRECTION_HOR): legendName += " Hor. " if(self.ws_direction == WS_DIRECTION_VER): legendName += " Ver. " self.gd_wf.setGraphProperty(legendKey,legendName+" Data") self.gd_log_wf.setGraphProperty(legendKey,"Log "+legendName+" Data ") def getName(self): return self.ws_node.getId() def getAccNode(self): return self.ws_node def getCopy(self): """ This method will return the partial copy of the record """ cp_record = WS_Scan_Record(self.ws_node,self.ws_direction) cp_record.left_limit = self.left_limit cp_record.right_limit = self.right_limit cp_record.gauss_sigma = self.gauss_sigma #copy Graph data for i in range(self.gd_wf.getNumbOfPoints()): cp_record.gd_wf.addPoint(self.gd_wf.getX(i),self.gd_wf.getY(i)) cp_record.gd_log_wf.addPoint(self.gd_log_wf.getX(i),self.gd_log_wf.getY(i)) return cp_record
class WS_Scan_and_Fit_Record: def __init__(self,ws_scan_Record): self.isOn = true self.index = -1 self.pos = 0. self.fit_is_good = false self.gauss_sigma = ws_scan_Record.gauss_sigma self.ws_node = ws_scan_Record.ws_node self.ws_direction = ws_scan_Record.ws_direction self.custom_gauss_sigma = 0. self.custom_rms_sigma = 0. self.gd_wf = BasicGraphData() self.gd_fit_wf = BasicGraphData() self.gd_log_wf = BasicGraphData() self.gd_log_fit_wf = BasicGraphData() self.gd_wf.setDrawLinesOn(false) self.gd_log_wf.setDrawLinesOn(false) self.gd_fit_wf.setDrawPointsOn(false) self.gd_log_fit_wf.setDrawPointsOn(false) self.gd_wf.setGraphPointSize(5) self.gd_log_wf.setGraphPointSize(5) self.gd_fit_wf.setLineThick(3) self.gd_log_fit_wf.setLineThick(3) self.gd_wf.setGraphColor(Color.BLUE) self.gd_log_wf.setGraphColor(Color.BLUE) self.gd_fit_wf.setGraphColor(Color.RED) self.gd_log_fit_wf.setGraphColor(Color.RED) legendKey = GRAPH_LEGEND_KEY legendName = self.ws_node.getId() if(self.ws_direction == WS_DIRECTION_HOR): legendName += " Hor. " if(self.ws_direction == WS_DIRECTION_VER): legendName += " Ver. " self.gd_wf.setGraphProperty(legendKey,legendName+" Data") self.gd_log_wf.setGraphProperty(legendKey,"Log "+legendName+" Data ") self.gd_fit_wf.setGraphProperty(legendKey,"Log "+legendName+" Fit ") self.gd_log_fit_wf.setGraphProperty(legendKey,"Log "+legendName+" Fit ") #----------- copy Graph data ------------- for i in range(ws_scan_Record.gd_wf.getNumbOfPoints()): self.gd_wf.addPoint(ws_scan_Record.gd_wf.getX(i),ws_scan_Record.gd_wf.getY(i)) for i in range(ws_scan_Record.gd_log_wf.getNumbOfPoints()): self.gd_log_wf.addPoint(ws_scan_Record.gd_log_wf.getX(i),ws_scan_Record.gd_log_wf.getY(i)) self.n_fit_points = 150 self.quad_dict = {} self.cav_amp_phase_dict = {} self.param_dict = [self.quad_dict,self.cav_amp_phase_dict] #-----Gauss Fitting params---------------- self.CONST = DoubleInputTextField(0.,ScientificNumberFormat(5),10) self.A0 = DoubleInputTextField(0.,ScientificNumberFormat(5),10) self.X_CENTER = DoubleInputTextField(0.,ScientificNumberFormat(5),10) self.SIGMA = DoubleInputTextField(self.gauss_sigma,ScientificNumberFormat(5),10) self.X_MIN = DoubleInputTextField(ws_scan_Record.left_limit,ScientificNumberFormat(5),10) self.X_MAX = DoubleInputTextField(ws_scan_Record.right_limit,ScientificNumberFormat(5),10) def plotFitData(self): x_min = self.X_MIN.getValue() x_max = self.X_MAX.getValue() step = (x_max - x_min)/(self.n_fit_points - 1) base = self.CONST.getValue() a0 = self.A0.getValue() x0 = self.X_CENTER.getValue() sigma2 = (self.SIGMA.getValue())**2 self.gd_fit_wf.removeAllPoints() self.gd_log_fit_wf.removeAllPoints() for i in range(self.n_fit_points): x = x_min + i*step y = base + a0*math.exp(-(x-x0)**2/(2*sigma2)) self.gd_fit_wf.addPoint(x,y) if(y > 0.): self.gd_log_fit_wf.addPoint(x,math.log(y)) def setParamDict(self,param_dict): self.param_dict = param_dict [self.quad_dict,self.cav_amp_phase_dict] = self.param_dict def getName(self): return self.ws_node.getId() def getAccNode(self): return self.ws_node def updateGaussParams(self): self.custom_gauss_sigma = self.SIGMA.getValue()
class WS_Scan_Record: """ This class keeps the results of the scan in one directions for one LW or WS """ def __init__(self, ws_node, ws_direction = WS_DIRECTION_NULL): self.ws_node = ws_node self.gauss_sigma = 0. self.gd_wf = BasicGraphData() self.gd_log_wf = BasicGraphData() self.gd_wf.setDrawLinesOn(false) self.gd_log_wf.setDrawLinesOn(false) self.gd_wf.setGraphPointSize(5) self.gd_log_wf.setGraphPointSize(5) self.gd_wf.setGraphColor(Color.BLUE) self.gd_log_wf.setGraphColor(Color.BLUE) self.setDirection(ws_direction) self.left_limit = 0. self.right_limit = 0. def setWF(self,wf_x_arr,wf_y_arr): #set waive form self.gd_wf.removeAllPoints() self.gd_log_wf.removeAllPoints() if(len(wf_x_arr) == len(wf_y_arr) and len(wf_y_arr) > 0): self.left_limit = wf_x_arr[0] self.right_limit = wf_x_arr[len(wf_x_arr)-1] y_max = 0. for y in wf_y_arr: if(math.fabs(y_max) < math.fabs(y)): y_max = y if(y_max < 0): for i in range(len(wf_y_arr)): wf_y_arr[i] = - wf_y_arr[i] y_max = - y_max self.gd_wf.addPoint(wf_x_arr,wf_y_arr) for i in range(len(wf_y_arr)): if(wf_y_arr[i] > 0.): self.gd_log_wf.addPoint(wf_x_arr[i],math.log(wf_y_arr[i])) def setDirection( self,ws_direction): self.ws_direction = ws_direction legendKey = GRAPH_LEGEND_KEY legendName = self.ws_node.getId() if(self.ws_direction == WS_DIRECTION_HOR): legendName += " Hor. " if(self.ws_direction == WS_DIRECTION_VER): legendName += " Ver. " self.gd_wf.setGraphProperty(legendKey,legendName+" Data") self.gd_log_wf.setGraphProperty(legendKey,"Log "+legendName+" Data ") def getName(self): return self.ws_node.getId() def getAccNode(self): return self.ws_node def getCopy(self): """ This method will return the partial copy of the record """ cp_record = WS_Scan_Record(self.ws_node,self.ws_direction) cp_record.left_limit = self.left_limit cp_record.right_limit = self.right_limit cp_record.gauss_sigma = self.gauss_sigma #copy Graph data for i in range(self.gd_wf.getNumbOfPoints()): cp_record.gd_wf.addPoint(self.gd_wf.getX(i),self.gd_wf.getY(i)) cp_record.gd_log_wf.addPoint(self.gd_log_wf.getX(i),self.gd_log_wf.getY(i)) return cp_record
class WS_Scan_and_Fit_Record: def __init__(self,ws_scan_Record): self.isOn = true self.index = -1 self.pos = 0. self.fit_is_good = false self.gauss_sigma = ws_scan_Record.gauss_sigma self.ws_node = ws_scan_Record.ws_node self.ws_direction = ws_scan_Record.ws_direction self.custom_gauss_sigma = 0. self.custom_rms_sigma = 0. self.gd_wf = BasicGraphData() self.gd_fit_wf = BasicGraphData() self.gd_log_wf = BasicGraphData() self.gd_log_fit_wf = BasicGraphData() self.gd_wf.setDrawLinesOn(false) self.gd_log_wf.setDrawLinesOn(false) self.gd_fit_wf.setDrawPointsOn(false) self.gd_log_fit_wf.setDrawPointsOn(false) self.gd_wf.setGraphPointSize(5) self.gd_log_wf.setGraphPointSize(5) self.gd_fit_wf.setLineThick(3) self.gd_log_fit_wf.setLineThick(3) self.gd_wf.setGraphColor(Color.BLUE) self.gd_log_wf.setGraphColor(Color.BLUE) self.gd_fit_wf.setGraphColor(Color.RED) self.gd_log_fit_wf.setGraphColor(Color.RED) legendKey = GRAPH_LEGEND_KEY legendName = self.ws_node.getId() if(self.ws_direction == WS_DIRECTION_HOR): legendName += " Hor. " if(self.ws_direction == WS_DIRECTION_VER): legendName += " Ver. " self.gd_wf.setGraphProperty(legendKey,legendName+" Data") self.gd_log_wf.setGraphProperty(legendKey,"Log "+legendName+" Data ") self.gd_fit_wf.setGraphProperty(legendKey,"Log "+legendName+" Fit ") self.gd_log_fit_wf.setGraphProperty(legendKey,"Log "+legendName+" Fit ") #----------- copy Graph data ------------- for i in range(ws_scan_Record.gd_wf.getNumbOfPoints()): self.gd_wf.addPoint(ws_scan_Record.gd_wf.getX(i),ws_scan_Record.gd_wf.getY(i)) for i in range(ws_scan_Record.gd_log_wf.getNumbOfPoints()): self.gd_log_wf.addPoint(ws_scan_Record.gd_log_wf.getX(i),ws_scan_Record.gd_log_wf.getY(i)) self.n_fit_points = 150 self.quad_dict = {} self.cav_amp_phase_dict = {} self.param_dict = [self.quad_dict,self.cav_amp_phase_dict] #-----Gauss Fitting params---------------- self.CONST = DoubleInputTextField(0.,ScientificNumberFormat(5),10) self.A0 = DoubleInputTextField(0.,ScientificNumberFormat(5),10) self.X_CENTER = DoubleInputTextField(0.,ScientificNumberFormat(5),10) self.SIGMA = DoubleInputTextField(self.gauss_sigma,ScientificNumberFormat(5),10) self.X_MIN = DoubleInputTextField(ws_scan_Record.left_limit,ScientificNumberFormat(5),10) self.X_MAX = DoubleInputTextField(ws_scan_Record.right_limit,ScientificNumberFormat(5),10) def plotFitData(self): x_min = self.X_MIN.getValue() x_max = self.X_MAX.getValue() step = (x_max - x_min)/(self.n_fit_points - 1) base = self.CONST.getValue() a0 = self.A0.getValue() x0 = self.X_CENTER.getValue() sigma2 = (self.SIGMA.getValue())**2 self.gd_fit_wf.removeAllPoints() self.gd_log_fit_wf.removeAllPoints() for i in range(self.n_fit_points): x = x_min + i*step y = base + a0*math.exp(-(x-x0)**2/(2*sigma2)) self.gd_fit_wf.addPoint(x,y) if(y > 0.): self.gd_log_fit_wf.addPoint(x,math.log(y)) def setParamDict(self,param_dict): self.param_dict = param_dict [self.quad_dict,self.cav_amp_phase_dict] = self.param_dict def getName(self): return self.ws_node.getId() def getAccNode(self): return self.ws_node def updateGaussParams(self): self.custom_gauss_sigma = self.SIGMA.getValue()
class Orbit_Diff_Graphs_Panel(JPanel): def __init__(self,mebt_main_orbit_diff_cntrl): self.mebt_main_orbit_diff_cntrl = mebt_main_orbit_diff_cntrl self.setLayout(BorderLayout()) tabbedPane = JTabbedPane() #----etched border etched_border = BorderFactory.createEtchedBorder() #---- plots for Hor-Ver and Longitudinal self.hor_plot = FunctionGraphsJPanel() self.hor_plot.setLegendButtonVisible(true) self.hor_plot.setChooseModeButtonVisible(true) self.hor_plot.setName("Horizontal Plane (Vert.Lns.: Black:quads Blue:DC Red:Cavs)") self.hor_plot.setAxisNames("Position, m","X[mm]") self.hor_plot.setBorder(etched_border) self.ver_plot = FunctionGraphsJPanel() self.ver_plot.setLegendButtonVisible(true) self.ver_plot.setChooseModeButtonVisible(true) self.ver_plot.setName("Vertical Plane (Vert.Lns.: Black:quads Blue:DC Red:Cavs)") self.ver_plot.setAxisNames("Position, m","Y[mm]") self.ver_plot.setBorder(etched_border) #------------------------------------------------ self.hor_diff_plot = FunctionGraphsJPanel() self.hor_diff_plot.setLegendButtonVisible(true) self.hor_diff_plot.setChooseModeButtonVisible(true) self.hor_diff_plot.setName("Horizontal Plane (Vert.Lns.: Black:quads Blue:DC Red:Cavs)") self.hor_diff_plot.setAxisNames("Position, m","Diff X[mm]") self.hor_diff_plot.setBorder(etched_border) self.ver_diff_plot = FunctionGraphsJPanel() self.ver_diff_plot.setLegendButtonVisible(true) self.ver_diff_plot.setChooseModeButtonVisible(true) self.ver_diff_plot.setName("Vertical Plane (Vert.Lns.: Black:quads Blue:DC Red:Cavs)") self.ver_diff_plot.setAxisNames("Position, m","Diff Y[mm]") self.ver_diff_plot.setBorder(etched_border) #-------------------------------------------------------------------- quad_wrappers = self.mebt_main_orbit_diff_cntrl.quad_wrappers dc_wrappers = self.mebt_main_orbit_diff_cntrl.dc_wrappers mebt_cav_wrappers = self.mebt_main_orbit_diff_cntrl.mebt_cav_wrappers for wrapper in quad_wrappers: self.hor_plot.addVerticalLine(wrapper.pos,Color.BLACK) self.ver_plot.addVerticalLine(wrapper.pos,Color.BLACK) self.hor_diff_plot.addVerticalLine(wrapper.pos,Color.BLACK) self.ver_diff_plot.addVerticalLine(wrapper.pos,Color.BLACK) for wrapper in dc_wrappers: self.hor_plot.addVerticalLine(wrapper.pos,Color.BLUE) self.ver_plot.addVerticalLine(wrapper.pos,Color.BLUE) self.hor_diff_plot.addVerticalLine(wrapper.pos,Color.BLUE) self.ver_diff_plot.addVerticalLine(wrapper.pos,Color.BLUE) for wrapper in mebt_cav_wrappers: self.hor_plot.addVerticalLine(wrapper.pos,Color.RED) self.ver_plot.addVerticalLine(wrapper.pos,Color.RED) self.hor_diff_plot.addVerticalLine(wrapper.pos,Color.RED) self.ver_diff_plot.addVerticalLine(wrapper.pos,Color.RED) #--------------------------------------------------------------------- #-------------------------------------------------- #---- panels graph_diff_panel = JPanel(GridLayout(2,1)) graph_diff_panel.add(self.hor_diff_plot) graph_diff_panel.add(self.ver_diff_plot) #---------------------------------- graph_panel = JPanel(GridLayout(2,1)) graph_panel.add(self.hor_plot) graph_panel.add(self.ver_plot) #---------------------------------- tabbedPane.add("Orbit Difference",graph_diff_panel) tabbedPane.add("Orbit",graph_panel) #------------------------------------- self.x_model_gd = BasicGraphData() self.x_model_gd.setLineThick(3) self.x_model_gd.setGraphPointSize(7) self.x_model_gd.setGraphColor(Color.BLUE) self.x_model_gd.setGraphProperty(GRAPH_LEGEND_KEY,"X Model [mm]") self.x_model_gd.setDrawLinesOn(true) self.x_model_gd.setDrawPointsOn(false) #------------------------------------- self.y_model_gd = BasicGraphData() self.y_model_gd.setLineThick(3) self.y_model_gd.setGraphPointSize(7) self.y_model_gd.setGraphColor(Color.RED) self.y_model_gd.setGraphProperty(GRAPH_LEGEND_KEY,"Y Model [mm]") self.y_model_gd.setDrawLinesOn(true) self.y_model_gd.setDrawPointsOn(false) #------------------------------------- self.x_model_diff_gd = BasicGraphData() self.x_model_diff_gd.setLineThick(3) self.x_model_diff_gd.setGraphPointSize(7) self.x_model_diff_gd.setGraphColor(Color.BLUE) self.x_model_diff_gd.setGraphProperty(GRAPH_LEGEND_KEY,"X Diff Model [mm]") self.x_model_diff_gd.setDrawLinesOn(true) self.x_model_diff_gd.setDrawPointsOn(false) #------------------------------------- self.y_model_diff_gd = BasicGraphData() self.y_model_diff_gd.setLineThick(3) self.y_model_diff_gd.setGraphPointSize(7) self.y_model_diff_gd.setGraphColor(Color.RED) self.y_model_diff_gd.setGraphProperty(GRAPH_LEGEND_KEY,"Y Diff Model [mm]") self.y_model_diff_gd.setDrawLinesOn(true) self.y_model_diff_gd.setDrawPointsOn(false) #------------------------------------- #------------------------------------- self.x_bpm_gd = BasicGraphData() self.x_bpm_gd.setLineThick(3) self.x_bpm_gd.setGraphPointSize(7) self.x_bpm_gd.setGraphColor(Color.BLUE) self.x_bpm_gd.setGraphProperty(GRAPH_LEGEND_KEY,"X BPM [mm]") self.x_bpm_gd.setDrawLinesOn(false) self.x_bpm_gd.setDrawPointsOn(true) #------------------------------------- self.y_bpm_gd = BasicGraphData() self.y_bpm_gd.setLineThick(3) self.y_bpm_gd.setGraphPointSize(7) self.y_bpm_gd.setGraphColor(Color.RED) self.y_bpm_gd.setGraphProperty(GRAPH_LEGEND_KEY,"Y BPM [mm]") self.y_bpm_gd.setDrawLinesOn(false) self.y_bpm_gd.setDrawPointsOn(true) #------------------------------------- self.x_bpm_diff_gd = BasicGraphData() self.x_bpm_diff_gd.setLineThick(3) self.x_bpm_diff_gd.setGraphPointSize(7) self.x_bpm_diff_gd.setGraphColor(Color.BLUE) self.x_bpm_diff_gd.setGraphProperty(GRAPH_LEGEND_KEY,"X Diff BPM [mm]") self.x_bpm_diff_gd.setDrawLinesOn(false) self.x_bpm_diff_gd.setDrawPointsOn(true) #------------------------------------- self.y_bpm_diff_gd = BasicGraphData() self.y_bpm_diff_gd.setLineThick(3) self.y_bpm_diff_gd.setGraphPointSize(7) self.y_bpm_diff_gd.setGraphColor(Color.RED) self.y_bpm_diff_gd.setGraphProperty(GRAPH_LEGEND_KEY,"Y Diff BPM [mm]") self.y_bpm_diff_gd.setDrawLinesOn(false) self.y_bpm_diff_gd.setDrawPointsOn(true) #------------------------------------- self.index0_button = JRadioButton("Orbit #0") self.index1_button = JRadioButton("Orbit #1") self.button_group = ButtonGroup() self.button_group.add(self.index0_button) self.button_group.add(self.index1_button) self.index0_button.setSelected(true) replot_button = JButton("Replot Graphs") replot_button.addActionListener(Replot_Button_Listener(self.mebt_main_orbit_diff_cntrl)) button_panel = JPanel(FlowLayout(FlowLayout.LEFT,3,3)) button_panel.add(self.index0_button) button_panel.add(self.index1_button) button_panel.add(replot_button) #----------------------------------------------- self.add(tabbedPane,BorderLayout.CENTER) self.add(button_panel,BorderLayout.SOUTH) def removeAllGraphData(self): self.hor_plot.removeAllGraphData() self.ver_plot.removeAllGraphData() self.hor_diff_plot.removeAllGraphData() self.ver_diff_plot.removeAllGraphData() #-------------------------------------- self.x_model_gd.removeAllPoints() self.y_model_gd.removeAllPoints() self.x_model_diff_gd.removeAllPoints() self.y_model_diff_gd.removeAllPoints() #-------------------------------------- self.x_bpm_gd.removeAllPoints() self.y_bpm_gd.removeAllPoints() self.x_bpm_diff_gd.removeAllPoints() self.y_bpm_diff_gd.removeAllPoints() def updateGraphData(self): self.removeAllGraphData() orb_index = 0 if(self.index1_button.isSelected()): orb_index = 1 #print "debug orb_index=",orb_index #==== update graph data from calculator and measurer orbit_measurer = self.mebt_main_orbit_diff_cntrl.orbit_measurer mebt_orbit_holder_0 = orbit_measurer.mebt_orbit_holder_0 mebt_orbit_holder_1 = orbit_measurer.mebt_orbit_holder_1 bpm_orbit_holder_0 = orbit_measurer.bpm_orbit_holder_0 bpm_orbit_holder_1 = orbit_measurer.bpm_orbit_holder_1 bpm_wrappers = self.mebt_main_orbit_diff_cntrl.bpm_wrappers max_pos = 0. for bpm_wrapper in bpm_wrappers: if(bpm_wrapper.use): if(max_pos < bpm_wrapper.pos): max_pos = bpm_wrapper.pos #---------------------------------------- pos_step = 0.1 pos_old = -1. traj0 = mebt_orbit_holder_0.getTrajectory() traj1 = mebt_orbit_holder_1.getTrajectory() for ind in range(traj0.numStates()): state0 = traj0.stateWithIndex(ind) pos = state0.getPosition() state1 = traj1.stateNearestPosition(pos) if(pos > (pos_old + pos_step) and pos_old < max_pos): x0 = state0.getPhaseCoordinates().getx()*1000. y0 = state0.getPhaseCoordinates().gety()*1000. x1 = state1.getPhaseCoordinates().getx()*1000. y1 = state1.getPhaseCoordinates().gety()*1000. pos_old = pos if(orb_index == 0): self.x_model_gd.addPoint(pos,x0) self.y_model_gd.addPoint(pos,y0) else: self.x_model_gd.addPoint(pos,x1) self.y_model_gd.addPoint(pos,y1) self.x_model_diff_gd.addPoint(pos,x1-x0) self.y_model_diff_gd.addPoint(pos,y1-y0) #---------------------------------------------- #bpm_orbit_holder_0.calcStatistics() #bpm_orbit_holder_1.calcStatistics() for bpm_wrapper in bpm_wrappers: if(bpm_wrapper.use): (x0,x0_err,y0,y0_err) = bpm_orbit_holder_0.getXY_and_Err(bpm_wrapper) (x1,x1_err,y1,y1_err) = bpm_orbit_holder_1.getXY_and_Err(bpm_wrapper) if(orb_index == 0): self.x_bpm_gd.addPoint(bpm_wrapper.pos,x0,x0_err) self.y_bpm_gd.addPoint(bpm_wrapper.pos,y0,y0_err) else: self.x_bpm_gd.addPoint(bpm_wrapper.pos,x1,x1_err) self.y_bpm_gd.addPoint(bpm_wrapper.pos,y1,y1_err) self.x_bpm_diff_gd.addPoint(bpm_wrapper.pos,x1-x0,math.sqrt(x0_err**2+x1_err**2)) self.y_bpm_diff_gd.addPoint(bpm_wrapper.pos,y1-y0,math.sqrt(y0_err**2+y1_err**2)) #------------------------------------- self.hor_plot.addGraphData(self.x_model_gd) self.hor_plot.addGraphData(self.x_bpm_gd) self.ver_plot.addGraphData(self.y_model_gd) self.ver_plot.addGraphData(self.y_bpm_gd) #------------------------------------- self.hor_diff_plot.addGraphData(self.x_model_diff_gd) self.hor_diff_plot.addGraphData(self.x_bpm_diff_gd) self.ver_diff_plot.addGraphData(self.y_model_diff_gd) self.ver_diff_plot.addGraphData(self.y_bpm_diff_gd)
class BPM_Scan_Data: def __init__(self,main_loop_controller,cav_controller,bpm_wrapper): self.main_loop_controller = main_loop_controller self.cav_controller = cav_controller self.bpm_wrapper = bpm_wrapper self.cav_amp = 0. self.derivative = 0. self.zero_accel_phase = 0. self.max_accel_phase = 0. self.min_accel_phase = 0. #------ for MEBT measurements for Iteration process only self.cav_off_bpm_phase = 0. self.cav_off_bpm_phase_err = 0. self.cav_on_bpm_phase = 0. self.cav_on_bpm_phase_err = 0. self.cav_off_bpm_amp = 0. self.cav_off_bpm_amp_err = 0. self.cav_on_bpm_amp = 0. self.cav_on_bpm_amp_err = 0. #----------------------------------------------------- self.harmonicsAnalyzer = HarmonicsAnalyzer(2) self.phase_gd = BasicGraphData() self.phase_gd.setLineThick(3) self.phase_gd.setGraphPointSize(7) self.phase_gd.setGraphColor(Color.BLUE) self.phase_gd.setGraphProperty(GRAPH_LEGEND_KEY,self.bpm_wrapper.alias) self.phase_gd.setDrawLinesOn(true) self.phase_gd.setDrawPointsOn(true) #------------------------------ self.amp_gd = BasicGraphData() self.amp_gd.setLineThick(3) self.amp_gd.setGraphPointSize(7) self.amp_gd.setGraphColor(Color.BLUE) self.amp_gd.setGraphProperty(GRAPH_LEGEND_KEY,self.bpm_wrapper.alias) self.amp_gd.setDrawLinesOn(true) self.amp_gd.setDrawPointsOn(true) #------------------------------------ self.phase_fit_gd = BasicGraphData() self.phase_fit_gd.setLineThick(3) self.phase_fit_gd.setGraphPointSize(3) self.phase_fit_gd.setGraphColor(Color.RED) self.phase_fit_gd.setGraphProperty(GRAPH_LEGEND_KEY,"Fit "+self.bpm_wrapper.alias) self.phase_fit_gd.setDrawLinesOn(true) self.phase_fit_gd.setDrawPointsOn(false) def clean(self): self.phase_gd.removeAllPoints() self.amp_gd.removeAllPoints() self.phase_fit_gd.removeAllPoints() self.derivative = 0. self.zero_accel_phase = 0. self.max_accel_phase = 0. self.min_accel_phase = 0. #------ for MEBT measurements for Iteration process only self.cav_off_bpm_phase = 0. self.cav_off_bpm_phase_err = 0. self.cav_on_bpm_phase = 0. self.cav_on_bpm_phase_err = 0. self.cav_off_bpm_amp = 0. self.cav_off_bpm_amp_err = 0. self.cav_on_bpm_amp = 0. self.cav_on_bpm_amp_err = 0. def addPoint(self,cav_phase): if(not self.bpm_wrapper.isOn): return bpm_amp = self.bpm_wrapper.bpm.getAmpAvg() bpm_phase = self.bpm_wrapper.bpm.getPhaseAvg() self.addExternalPoint(cav_phase,bpm_amp,bpm_phase) def getAmpAndPhase(self): if(not self.bpm_wrapper.isOn): return (0.,0.) bpm_amp = self.bpm_wrapper.bpm.getAmpAvg() bpm_phase = self.bpm_wrapper.bpm.getPhaseAvg() return (bpm_amp,bpm_phase) def addExternalPoint(self,cav_phase,bpm_amp,bpm_phase): if(self.phase_gd.getNumbOfPoints() != 0): cav_phase_old = self.phase_gd.getX(self.phase_gd.getNumbOfPoints()-1) bpm_phase_old = self.phase_gd.getY(self.phase_gd.getNumbOfPoints()-1) cav_phase = makePhaseNear(cav_phase,cav_phase_old) bpm_phase = makePhaseNear(bpm_phase,bpm_phase_old) self.phase_gd.addPoint(cav_phase,bpm_phase) self.amp_gd.addPoint(cav_phase,bpm_amp) def shiftToPhase(self,gd,bpm_phase_init): nP = gd.getNumbOfPoints() if(nP == 0): return x_arr = [] y_arr = [] err_arr = [] for ip in range(nP): x_arr.append(gd.getX(ip)) y_arr.append(gd.getY(ip)) err_arr.append(gd.getErr(ip)) gd.removeAllPoints() y_arr[0] = makePhaseNear(y_arr[0],bpm_phase_init) for ip in range(1,nP): y_arr[ip] = makePhaseNear(y_arr[ip],y_arr[ip-1]) gd.addPoint(x_arr,y_arr,err_arr) def makeLinearFit(self): self.phase_fit_gd.removeAllPoints() self.derivative = 0. if(self.phase_gd.getNumbOfPoints() > 1): GraphDataOperations.polynomialFit(self.phase_gd,self.phase_fit_gd,1) self.phase_fit_gd.setGraphColor(Color.RED) nP = self.phase_fit_gd.getNumbOfPoints() self.derivative = 0. if(nP > 1): X0 = self.phase_fit_gd.getX(0) X1 = self.phase_fit_gd.getX(nP-1) self.derivative = self.phase_fit_gd.getValueDerivativeY((X0+X1)/2.0) return true return false def makeHarmonicFit(self): self.phase_fit_gd.removeAllPoints() if(self.phase_gd.getNumbOfPoints() < 8): return false err = self.harmonicsAnalyzer.analyzeData(self.phase_gd) harm_function = self.harmonicsAnalyzer.getHrmonicsFunction() #-----remove bad points gd = self.phase_gd max_bad_points_count = 3 bad_points_count = 0 bad_index = 1 while(bad_index >= 0): bad_index = -1 for i in range(gd.getNumbOfPoints()): phase = gd.getX(i) y_appr = harm_function.getValue(phase) y = gd.getY(i) if(math.fabs(y-y_appr) > 3.0*err): bad_index = i bad_points_count += 1 break if(bad_index >= 0): gd.removePoint(bad_index) self.amp_gd.removePoint(bad_index) # we should stop if we have too many bad points if(bad_points_count > max_bad_points_count): return false if(bad_points_count > 0): err = self.harmonicsAnalyzer.analyzeData(gd) harm_function = self.harmonicsAnalyzer.getHrmonicsFunction() #----find a new cavity phase min_phase = makePhaseNear(self.harmonicsAnalyzer.getPositionOfMin(),0.) max_phase = makePhaseNear(self.harmonicsAnalyzer.getPositionOfMax(),0.) # guess phase is -90 deg if max acceleratiom phase is 0. self.zero_accel_phase = makePhaseNear(min_phase - 90.,0.) self.max_accel_phase = min_phase self.min_accel_phase = max_phase #print "debug min_phase=",min_phase #print "debug max_phase=",max_phase #print "debug zero_accel_phase =",self.zero_accel_phase #----make theory graph plot harm_function = self.harmonicsAnalyzer.getHrmonicsFunction() x_arr = [] y_arr = [] for i in range(73): phase = -180.0 + 5.0*i y = harm_function.getValue(phase) x_arr.append(phase) y_arr.append(y) self.phase_fit_gd.addPoint(x_arr,y_arr) #-------------------- return true def setCavAmplitudeParam(self,cav_amp): self.cav_amp = cav_amp self.phase_fit_gd.setGraphProperty(GRAPH_LEGEND_KEY,"Fit "+self.bpm_wrapper.alias+" CavAmp= %6.4f "%self.cav_amp) self.phase_gd.setGraphProperty(GRAPH_LEGEND_KEY,self.bpm_wrapper.alias+" CavAmp= %6.4f "%self.cav_amp) self.amp_gd.setGraphProperty(GRAPH_LEGEND_KEY,self.bpm_wrapper.alias+" CavAmp= %6.4f "%self.cav_amp) def checkLastDataPoint(self,min_bpm_amp): if(not self.bpm_wrapper.isOn): return false res = true nP = self.phase_gd.getNumbOfPoints() if(nP > 1): if(math.fabs(self.phase_gd.getY(nP-2) - self.phase_gd.getY(nP-1)) < 0.000000001): return false if(nP > 0): if(self.amp_gd.getY(nP-1) < min_bpm_amp): return false return res def removeLastPoint(self): if(not self.bpm_wrapper.isOn): return nP = self.phase_gd.getNumbOfPoints() if(nP < 1): return self.phase_gd.removePoint(nP-1) self.amp_gd.removePoint(nP-1) def getAvgPhaseAndErr(self): nP = self.phase_gd.getNumbOfPoints() if(nP < 1): return (0.,0.) phase_arr = [] for ind in range(nP): phase_arr.append(self.phase_gd.getY(ind)) (avg_phase,avg_phase_err) = calculateAvgErr(phase_arr) return (avg_phase,avg_phase_err) def writeDataToXML(self,root_da): bpm_scan_data_da = root_da.createChild("bpm_scan_data") bpm_scan_data_da.setValue("cav",self.cav_controller.cav_wrapper.alias) bpm_scan_data_da.setValue("bpm",self.bpm_wrapper.alias) bpm_scan_data_da.setValue("cav_amp",self.cav_amp) bpm_scan_data_da.setValue("derivative","%7.5f"%self.derivative) bpm_scan_data_da.setValue("zero_accel_phase","%7.3f"%self.zero_accel_phase) bpm_scan_data_da.setValue("max_accel_phase", "%7.3f"%self.max_accel_phase) if(self.cav_controller.cav_wrapper.alias.find("MEBT") >= 0): mebt_cav_off_on_da = bpm_scan_data_da.createChild("cav_off_on_data") mebt_cav_off_on_da.setValue("cav_off_bpm_phase",self.cav_off_bpm_phase) mebt_cav_off_on_da.setValue("cav_off_bpm_phase_err",self.cav_off_bpm_phase_err) mebt_cav_off_on_da.setValue("cav_on_bpm_phase",self.cav_on_bpm_phase) mebt_cav_off_on_da.setValue("cav_on_bpm_phase_err",self.cav_on_bpm_phase_err) mebt_cav_off_on_da.setValue("cav_off_bpm_amp",self.cav_off_bpm_amp) mebt_cav_off_on_da.setValue("cav_off_bpm_amp_err",self.cav_off_bpm_amp_err) mebt_cav_off_on_da.setValue("cav_on_bpm_amp",self.cav_on_bpm_amp) mebt_cav_off_on_da.setValue("cav_on_bpm_amp_err",self.cav_on_bpm_amp_err) dumpGraphDataToDA(self.phase_gd,bpm_scan_data_da,"phase_scan_gd") dumpGraphDataToDA(self.amp_gd,bpm_scan_data_da,"amp_scan_gd") dumpGraphDataToDA(self.phase_fit_gd,bpm_scan_data_da,"phase_scan_fit_gd") def readDataFromXML(self,bpm_scan_data_da): self.cav_amp = bpm_scan_data_da.doubleValue("cav_amp") self.derivative = bpm_scan_data_da.doubleValue("derivative") self.zero_accel_phase = bpm_scan_data_da.doubleValue("zero_accel_phase") self.max_accel_phase = bpm_scan_data_da.doubleValue("max_accel_phase") mebt_cav_off_on_da = bpm_scan_data_da.childAdaptor("cav_off_on_data") if(mebt_cav_off_on_da != null): self.cav_off_bpm_phase = mebt_cav_off_on_da.doubleValue("cav_off_bpm_phase") self.cav_off_bpm_phase_err = mebt_cav_off_on_da.doubleValue("cav_off_bpm_phase_err") self.cav_on_bpm_phase = mebt_cav_off_on_da.doubleValue("cav_on_bpm_phase") self.cav_on_bpm_phase_err = mebt_cav_off_on_da.doubleValue("cav_on_bpm_phase_err") self.cav_off_bpm_amp = mebt_cav_off_on_da.doubleValue("cav_off_bpm_amp") self.cav_off_bpm_amp_err = mebt_cav_off_on_da.doubleValue("cav_off_bpm_amp_err") self.cav_on_bpm_amp = mebt_cav_off_on_da.doubleValue("cav_on_bpm_amp") self.cav_on_bpm_amp_err = mebt_cav_off_on_da.doubleValue("cav_on_bpm_amp_err") readGraphDataFromDA(self.phase_gd,bpm_scan_data_da,"phase_scan_gd") readGraphDataFromDA(self.amp_gd,bpm_scan_data_da,"amp_scan_gd") readGraphDataFromDA(self.phase_fit_gd,bpm_scan_data_da,"phase_scan_fit_gd")
class FaradayCup_Scan_Data: def __init__(self, dtl_acceptance_scans_controller, dtl_acc_scan_cavity_controller): self.dtl_acceptance_scans_controller = dtl_acceptance_scans_controller self.main_loop_controller = self.dtl_acceptance_scans_controller.main_loop_controller self.dtl_acc_scan_cavity_controller = dtl_acc_scan_cavity_controller self.cav_wrapper = self.dtl_acc_scan_cavity_controller.cav_wrapper self.cav_amp = 0. self.cav_init_phase = 0. self.cav_phase_shift = 0. #----------------------------------------------------- self.fc_scan_gd = BasicGraphData() self.fc_scan_gd.setLineThick(3) self.fc_scan_gd.setGraphPointSize(7) self.fc_scan_gd.setGraphColor(Color.BLUE) self.fc_scan_gd.setGraphProperty(GRAPH_LEGEND_KEY, self.cav_wrapper.alias) self.fc_scan_gd.setDrawLinesOn(true) self.fc_scan_gd.setDrawPointsOn(true) def clean(self): self.fc_scan_gd.removeAllPoints() #------ for MEBT measurements for Iteration process only self.cav_amp = 0. self.cav_init_phase = 0. self.cav_phase_shift = 0. def addPoint(self): cav_phase = self.dtl_acc_scan_cavity_controller.getCavPhase() fc_charge = self.dtl_acc_scan_cavity_controller.getFC_Charge() self.addExternalPoint(cav_phase, fc_charge) def addExternalPoint(self, cav_phase, fc_charge): if (self.fc_scan_gd.getNumbOfPoints() != 0): cav_phase_old = self.fc_scan_gd.getX( self.fc_scan_gd.getNumbOfPoints() - 1) cav_phase = makePhaseNear(cav_phase, cav_phase_old) self.fc_scan_gd.addPoint(cav_phase, fc_charge) def shiftCavPhase(self, gd, phase_shift): self.cav_phase_shift += phase_shift self.cav_init_phase += phase_shift self.cav_phase_shift = makePhaseNear(self.cav_phase_shift, 0.) self.cav_init_phase = makePhaseNear(self.cav_init_phase, 0.) nP = gd.getNumbOfPoints() if (nP == 0): return x_arr = [] y_arr = [] err_arr = [] for ip in range(nP): x_arr.append(gd.getX(ip) + phase_shift) y_arr.append(gd.getY(ip)) err_arr.append(gd.getErr(ip)) gd.removeAllPoints() for ip in range(nP): x_arr[ip] = makePhaseNear(x_arr[ip], 0.) gd.addPoint(x_arr, y_arr, err_arr) def setCavAmplitudeParam(self, cav_amp): self.cav_amp = cav_amp self.fc_scan_gd.setGraphProperty( GRAPH_LEGEND_KEY, self.cav_wrapper.alias + " CavAmp= %6.4f " % self.cav_amp) def checkLastDataPoint(self, min_charge): res = true nP = self.fc_scan_gd.getNumbOfPoints() if (nP > 1): if (math.fabs(self.amp_gd.getY(nP - 1)) > min_charge): if (math.fabs( self.fc_scan_gd.getY(nP - 2) - self.fc_scan_gd.getY(nP - 1)) < 0.000000001): return false return res def removeLastPoint(self): nP = self.fc_scan_gd.getNumbOfPoints() if (nP < 1): return self.fc_scan_gd.removePoint(nP - 1) def writeDataToXML(self, root_da): fc_scan_data_da = root_da.createChild("fc_scan_data") fc_scan_data_da.setValue("cav_amp", self.cav_amp) fc_scan_data_da.setValue("cav_phase", self.cav_init_phase) fc_scan_data_da.setValue("phase_shift", self.cav_phase_shift) dumpGraphDataToDA(self.fc_scan_gd, fc_scan_data_da, "fc_acceptance_scan_gd") def readDataFromXML(self, fc_scan_data_da): self.cav_amp = fc_scan_data_da.doubleValue("cav_amp") self.cav_init_phase = fc_scan_data_da.doubleValue("cav_phase") self.cav_phase_shift = fc_scan_data_da.doubleValue("phase_shift") readGraphDataFromDA(self.fc_scan_gd, fc_scan_data_da, "fc_acceptance_scan_gd")