Пример #1
0
class Graphs_Panel(JPanel):
	def __init__(self,transverse_twiss_analysis_Controller):
		self.transverse_twiss_analysis_Controller = transverse_twiss_analysis_Controller
		self.setLayout(GridLayout(3,1))
		#----etched border
		etched_border = BorderFactory.createEtchedBorder()
		self.setBorder(etched_border)
		self.gpanel_hor = FunctionGraphsJPanel()
		self.gpanel_ver = FunctionGraphsJPanel()
		self.gpanel_lon = FunctionGraphsJPanel()		
		self.gpanel_hor.setLegendButtonVisible(true)
		self.gpanel_ver.setLegendButtonVisible(true)
		self.gpanel_lon.setLegendButtonVisible(true)
		self.gpanel_hor.setName("Horizontal Size")
		self.gpanel_hor.setAxisNames("pos, [m]","Size, [mm]")	
		self.gpanel_ver.setName("Vertical Size")
		self.gpanel_ver.setAxisNames("pos, [m]","Size, [mm]")	
		self.gpanel_lon.setName("Longitudinal Size, RF Freq. = 402.5 MHz")
		self.gpanel_lon.setAxisNames("pos, [m]","Size, [deg]")	
		self.gpanel_hor.setBorder(etched_border)
		self.gpanel_ver.setBorder(etched_border)
		self.gpanel_lon.setBorder(etched_border)
		self.add(self.gpanel_hor)
		self.add(self.gpanel_ver)	
		self.add(self.gpanel_lon)
		
	def removeAllGraphData(self):
		self.gpanel_hor.removeAllGraphData()
		self.gpanel_ver.removeAllGraphData()
		self.gpanel_lon.removeAllGraphData()		
		
	def updateGraphData(self):
		self.gpanel_hor.removeAllGraphData()
		self.gpanel_ver.removeAllGraphData()
		self.gpanel_lon.removeAllGraphData()
		accStatesKeeper = self.transverse_twiss_analysis_Controller.accStatesKeeper
		accStatesKeeper.updateGraphData()
		accState = null
		for accState0 in accStatesKeeper.getAccStatesArr():
			if(accState0.isSelected()):
				accState = accState0
				break
		if(accState == null): return
		accState.updateGraphData()
		self.gpanel_hor.addGraphData(accState.gd_exp_hor)
		self.gpanel_hor.addGraphData(accState.gd_model_hor)
		self.gpanel_ver.addGraphData(accState.gd_exp_ver)
		self.gpanel_ver.addGraphData(accState.gd_model_ver)
		self.gpanel_lon.addGraphData(accState.gd_model_lon)
		#---set up vertical lines
		self.gpanel_hor.removeHorizontalValues()
		self.gpanel_ver.removeHorizontalValues()
		self.gpanel_lon.removeHorizontalValues()
		self.gpanel_hor.removeVerticalValues()
		self.gpanel_ver.removeVerticalValues()
		self.gpanel_lon.removeVerticalValues()
		accSeq = self.transverse_twiss_analysis_Controller.linac_wizard_document.accSeq
		quads = accSeq.getAllNodesWithQualifier((AndTypeQualifier().and((OrTypeQualifier()).or(Quadrupole.s_strType))).andStatus(true))
		cavs = accSeq.getAllNodesWithQualifier((AndTypeQualifier().and((OrTypeQualifier()).or(RfCavity.s_strType))).andStatus(true))
		for quad in quads:
			pos = accSeq.getPosition(quad)
			self.gpanel_hor.addVerticalLine(pos,Color.BLACK)
			self.gpanel_ver.addVerticalLine(pos,Color.BLACK)
			self.gpanel_lon.addVerticalLine(pos,Color.BLACK)															 
		for cav in cavs:	
			pos = accSeq.getPosition(cav)	
			self.gpanel_hor.addVerticalLine(pos,Color.RED)
			self.gpanel_ver.addVerticalLine(pos,Color.RED)
			self.gpanel_lon.addVerticalLine(pos,Color.RED)
class WS_Data_Analysis_Controller:
	""" 
	This controller manages the WS data analysis. 
	Its panel is in the WS_LW_Acquisition_Controller panel. 
	"""
	def __init__(self,ws_lw_acquisition_controller):
		self.ws_lw_acquisition_controller = ws_lw_acquisition_controller
		self.local_gauss_fitter = Local_Gauss_Fitter()
		self.main_panel = JPanel(BorderLayout())
		self.ws_records_table_model = WS_Records_Table_Model()
		#----etched border
		etched_border = BorderFactory.createEtchedBorder()
		#---make the WS_Records_JTable + Graph Panel
		self.records_table = JTable(self.ws_records_table_model)
		self.records_table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION)
		self.records_table.setFillsViewportHeight(true)
		#----set up records_table columns width
		columnModel = self.records_table.getColumnModel()
		columnModel.getColumn(0).setPreferredWidth(30)
		columnModel.getColumn(1).setPreferredWidth(160)
		columnModel.getColumn(2).setPreferredWidth(40)
		columnModel.getColumn(3).setPreferredWidth(40)
		columnModel.getColumn(4).setPreferredWidth(80)
		columnModel.getColumn(5).setPreferredWidth(70)
		columnModel.getColumn(6).setPreferredWidth(70)
		#---------------------------------------------------
		records_panel = JPanel(BorderLayout())
		records_panel.add(JScrollPane(self.records_table), BorderLayout.CENTER)
		knobs_gauss_panel = JPanel(BorderLayout())
		records_panel.add(knobs_gauss_panel, BorderLayout.SOUTH)
		records_panel.setBorder(etched_border)
		#---records knobs ---------------------------------------------
		records_knobs_panel = JPanel(FlowLayout(FlowLayout.CENTER,5,5))
		guess_and_fit_button = JButton("Guess and Fit")
		analysis_all_button = JButton("G&F All")		
		fit_button = JButton("Fit")
		fit_all_button = JButton("Fit All")
		send_to_twiss_button = JButton("Send to Twiss Analysis")
		records_knobs_panel.add(guess_and_fit_button)
		records_knobs_panel.add(analysis_all_button)		
		records_knobs_panel.add(fit_button)
		records_knobs_panel.add(fit_all_button)
		records_knobs_panel.add(send_to_twiss_button)
		guess_and_fit_button.addActionListener(Guess_And_Fit_Listener(self.ws_lw_acquisition_controller))
		fit_button.addActionListener(Fit_Listener(self.ws_lw_acquisition_controller))
		fit_all_button.addActionListener(Fit_All_Listener(self.ws_lw_acquisition_controller))
		analysis_all_button.addActionListener(Guess_And_Fit_All_Listener(self.ws_lw_acquisition_controller))
		send_to_twiss_button.addActionListener(SendToAnalysis_Listener(self.ws_lw_acquisition_controller))
		self.gauss_fit_param_panel = GaussFitDataPanel()
		knobs_gauss_panel.add(records_knobs_panel, BorderLayout.NORTH)
		knobs_gauss_panel.add(self.gauss_fit_param_panel, BorderLayout.SOUTH)
		#---------------------------------------------------------
		self.record_analysis_panel = JPanel(BorderLayout())
		border = BorderFactory.createTitledBorder(etched_border,"WS/LW Wave Form Analysis")
		self.record_analysis_panel.setBorder(border)
		self.record_analysis_panel.add(records_panel, BorderLayout.WEST)
		self.gpanel_WF = FunctionGraphsJPanel()
		self.gpanel_WF.setLegendButtonVisible(true)
		self.gpanel_WF.setChooseModeButtonVisible(true)			
		self.gpanel_WF.setName("Profile")
		self.gpanel_WF.setAxisNames("pos, [mm]","Amp, [arb. units]")	
		self.gpanel_WF.setBorder(etched_border)
		self.gpanel_WF.addVerticalLine(-1.0e+30,Color.red)
		self.gpanel_WF.addVerticalLine(+1.0e+30,Color.red)
		self.gpanel_WF.setVerLinesButtonVisible(true)
		self.gpanel_WF.addDraggedVerLinesListener(Position_Limits_Listener(self.ws_lw_acquisition_controller))
		self.record_analysis_panel.add(self.gpanel_WF, BorderLayout.CENTER)
		self.main_panel.add(self.record_analysis_panel, BorderLayout.CENTER)
		#---set up Listeners 
		self.records_table.getSelectionModel().addListSelectionListener(WS_Record_Table_Selection_Listener(self.ws_lw_acquisition_controller))

	def setDataToGraphPanel(self,ws_record):
		self.gpanel_WF.removeAllGraphData()
		self.gpanel_WF.addGraphData(ws_record.gd_wf)
		self.gpanel_WF.addGraphData(ws_record.gd_fit_wf)
Пример #3
0
class WS_Data_Analysis_Controller:
	""" 
	This controller manages the WS data analysis. 
	Its panel is in the WS_LW_Acquisition_Controller panel. 
	"""
	def __init__(self,ws_lw_acquisition_controller):
		self.ws_lw_acquisition_controller = ws_lw_acquisition_controller
		self.local_gauss_fitter = Local_Gauss_Fitter()
		self.main_panel = JPanel(BorderLayout())
		self.ws_records_table_model = WS_Records_Table_Model()
		#----etched border
		etched_border = BorderFactory.createEtchedBorder()
		#---make the WS_Records_JTable + Graph Panel
		self.records_table = JTable(self.ws_records_table_model)
		self.records_table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION)
		self.records_table.setFillsViewportHeight(true)
		#----set up records_table columns width
		columnModel = self.records_table.getColumnModel()
		columnModel.getColumn(0).setPreferredWidth(30)
		columnModel.getColumn(1).setPreferredWidth(160)
		columnModel.getColumn(2).setPreferredWidth(40)
		columnModel.getColumn(3).setPreferredWidth(40)
		columnModel.getColumn(4).setPreferredWidth(80)
		columnModel.getColumn(5).setPreferredWidth(70)
		columnModel.getColumn(6).setPreferredWidth(70)
		#---------------------------------------------------
		records_panel = JPanel(BorderLayout())
		records_panel.add(JScrollPane(self.records_table), BorderLayout.CENTER)
		knobs_gauss_panel = JPanel(BorderLayout())
		records_panel.add(knobs_gauss_panel, BorderLayout.SOUTH)
		records_panel.setBorder(etched_border)
		#---records knobs ---------------------------------------------
		records_knobs_panel = JPanel(FlowLayout(FlowLayout.CENTER,5,5))
		guess_and_fit_button = JButton("Guess and Fit")
		analysis_all_button = JButton("G&F All")		
		fit_button = JButton("Fit")
		fit_all_button = JButton("Fit All")
		send_to_twiss_button = JButton("Send to Twiss Analysis")
		records_knobs_panel.add(guess_and_fit_button)
		records_knobs_panel.add(analysis_all_button)		
		records_knobs_panel.add(fit_button)
		records_knobs_panel.add(fit_all_button)
		records_knobs_panel.add(send_to_twiss_button)
		guess_and_fit_button.addActionListener(Guess_And_Fit_Listener(self.ws_lw_acquisition_controller))
		fit_button.addActionListener(Fit_Listener(self.ws_lw_acquisition_controller))
		fit_all_button.addActionListener(Fit_All_Listener(self.ws_lw_acquisition_controller))
		analysis_all_button.addActionListener(Guess_And_Fit_All_Listener(self.ws_lw_acquisition_controller))
		send_to_twiss_button.addActionListener(SendToAnalysis_Listener(self.ws_lw_acquisition_controller))
		self.gauss_fit_param_panel = GaussFitDataPanel()
		knobs_gauss_panel.add(records_knobs_panel, BorderLayout.NORTH)
		knobs_gauss_panel.add(self.gauss_fit_param_panel, BorderLayout.SOUTH)
		#---------------------------------------------------------
		self.record_analysis_panel = JPanel(BorderLayout())
		border = BorderFactory.createTitledBorder(etched_border,"WS/LW Wave Form Analysis")
		self.record_analysis_panel.setBorder(border)
		self.record_analysis_panel.add(records_panel, BorderLayout.WEST)
		self.gpanel_WF = FunctionGraphsJPanel()
		self.gpanel_WF.setLegendButtonVisible(true)
		self.gpanel_WF.setChooseModeButtonVisible(true)			
		self.gpanel_WF.setName("Profile")
		self.gpanel_WF.setAxisNames("pos, [mm]","Amp, [arb. units]")	
		self.gpanel_WF.setBorder(etched_border)
		self.gpanel_WF.addVerticalLine(-1.0e+30,Color.red)
		self.gpanel_WF.addVerticalLine(+1.0e+30,Color.red)
		self.gpanel_WF.setVerLinesButtonVisible(true)
		self.gpanel_WF.addDraggedVerLinesListener(Position_Limits_Listener(self.ws_lw_acquisition_controller))
		write_waveforms_to_ascii_button = JButton("Write Waveforms to ASCII File")
		write_waveforms_to_ascii_button.addActionListener(Write_Waveforms_to_ASCII_Listener(self.ws_lw_acquisition_controller))
		below_graph_panel = JPanel(FlowLayout(FlowLayout.LEFT,5,5))
		below_graph_panel.add(write_waveforms_to_ascii_button)
		graph_panel_left = JPanel(BorderLayout())
		graph_panel_left.add(self.gpanel_WF, BorderLayout.CENTER)	
		graph_panel_left.add(below_graph_panel, BorderLayout.SOUTH)
		self.record_analysis_panel.add(graph_panel_left, BorderLayout.CENTER)		
		self.main_panel.add(self.record_analysis_panel, BorderLayout.CENTER)
		#---set up Listeners 
		self.records_table.getSelectionModel().addListSelectionListener(WS_Record_Table_Selection_Listener(self.ws_lw_acquisition_controller))

	def setDataToGraphPanel(self,ws_record):
		self.gpanel_WF.removeAllGraphData()
		self.gpanel_WF.addGraphData(ws_record.gd_wf)
		self.gpanel_WF.addGraphData(ws_record.gd_fit_wf)
Пример #4
0
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)