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)	
Beispiel #2
0
class QuadCavDictSelection_Panel	(JPanel):
	def __init__(self,transverse_twiss_analysis_Controller):
		self.transverse_twiss_analysis_Controller = transverse_twiss_analysis_Controller
		self.setLayout(BorderLayout())
		#-----------dict table panel
		etched_border = BorderFactory.createEtchedBorder()
		border = BorderFactory.createTitledBorder(etched_border,"Quad and Cavities Amp.&Phases Sets")
		self.setBorder(border)		
		self.quad_cav_dict_table_model = QuadCavDict_Table_Model(self.transverse_twiss_analysis_Controller.accStatesKeeper)
		self.dict_table = JTable(self.quad_cav_dict_table_model)
		self.dict_table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION)
		self.dict_table.setFillsViewportHeight(true)
		self.dict_table.setPreferredScrollableViewportSize(Dimension(120,100))
		self.dict_table.getSelectionModel().addListSelectionListener(QuadCavDict_Table_Selection_Listener(self.transverse_twiss_analysis_Controller))
		#--------buttons panel
		button_panel = JPanel(BorderLayout())
		self.gaussButton = JRadioButton("Use Ext. Gauss Fit")
		self.custom_gaussButton = JRadioButton("Use Gauss Fit")
		self.custom_rmsButton = JRadioButton("Use RMS")
		button_group = ButtonGroup()
		button_group.add(self.gaussButton)
		button_group.add(self.custom_gaussButton)
		button_group.add(self.custom_rmsButton)
		button_group.clearSelection()
		self.gaussButton.setSelected(true)
		button_panel0 = JPanel(FlowLayout(FlowLayout.LEFT,2,2))
		button_panel0.add(self.gaussButton)
		button_panel1 = JPanel(FlowLayout(FlowLayout.LEFT,2,2))
		button_panel1.add(self.custom_gaussButton)
		button_panel2 = JPanel(FlowLayout(FlowLayout.LEFT,2,2))
		button_panel2.add(self.custom_rmsButton)
		button_panel012 = JPanel(GridLayout(3,1))
		button_panel012.add(button_panel0)
		button_panel012.add(button_panel1)
		button_panel012.add(button_panel2)
		#-------new buttons-----
		button_bottom_panel = JPanel(FlowLayout(FlowLayout.LEFT,2,2))
		button_bottom_panel0 = JPanel(GridLayout(3,1,2,2))
		dump_quad_fields_button = JButton("Dump Quad Fields to ASCII")
		dump_quad_fields_button.addActionListener(Dump_Quad_Fields_Button_Listener(self.transverse_twiss_analysis_Controller))
		button_bottom_panel0.add(dump_quad_fields_button)
		dump_cav_amps_phases_button = JButton("Dump. Cav Amps. Phases to ASCII")
		dump_cav_amps_phases_button.addActionListener(Dump_Cav_Amps_Phases_Button_Listener(self.transverse_twiss_analysis_Controller))
		button_bottom_panel0.add(dump_cav_amps_phases_button)	
		read_cav_amps_phases_button = JButton("Read Cav Amps. Phases from ASCII")
		read_cav_amps_phases_button.addActionListener(Read_Cav_Amps_Phases_Button_Listener(self.transverse_twiss_analysis_Controller))
		button_bottom_panel0.add(read_cav_amps_phases_button)
		button_bottom_panel.add(button_bottom_panel0)
		#----- final knobs panel 
		button_panel.add(button_panel012,BorderLayout.NORTH)
		button_panel.add(button_bottom_panel,BorderLayout.SOUTH)
		self.gaussButton.addActionListener(FitParam_Buttons_Listener(self.transverse_twiss_analysis_Controller,0))
		self.custom_gaussButton.addActionListener(FitParam_Buttons_Listener(self.transverse_twiss_analysis_Controller,1))
		self.custom_rmsButton.addActionListener(FitParam_Buttons_Listener(self.transverse_twiss_analysis_Controller,2))
		#----------------------------------------------------------
		self.add(JScrollPane(self.dict_table), BorderLayout.WEST)
		self.add(button_panel, BorderLayout.CENTER)

	def getMainPanel(self):
		return self
class SCL_Long_TuneUp_PhaseScan_Controller:
	def __init__(self,scl_long_tuneup_controller):
		#--- scl_long_tuneup_controller the parent document for all SCL tune up controllers
		self.scl_long_tuneup_controller = 	scl_long_tuneup_controller	
		self.main_panel = JPanel(BorderLayout())
		#----etched border
		etched_border = BorderFactory.createEtchedBorder()			
		#------top params panel-----------------------
		top_params_panel = JPanel(BorderLayout())
		self.set_phase_shift_panel = SetPhaseShiftAndTimeStep_Panel(self.scl_long_tuneup_controller)
		self.start_stop_scan_panel = StartStopPhaseScan_Panel(self.scl_long_tuneup_controller)
		top_params_panel.add(self.set_phase_shift_panel,BorderLayout.NORTH)
		top_params_panel.add(self.start_stop_scan_panel,BorderLayout.SOUTH)
		#------cavities scan table panel --------
		cavs_scan_panel = JPanel(BorderLayout())
		self.cavs_table = JTable(Cavs_PhaseScan_Table_Model(self.scl_long_tuneup_controller))
		self.cavs_table.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION)
		self.cavs_table.setFillsViewportHeight(true)
		self.cavs_table.getSelectionModel().addListSelectionListener(Cavs_Table_Selection_Listener(self.scl_long_tuneup_controller))		
		self.bpms_table_model = PhaseScan_BPMs_Table_Model(self.scl_long_tuneup_controller)
		self.bpms_table = JTable(self.bpms_table_model)
		self.bpms_table.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION)
		self.bpms_table.setFillsViewportHeight(true)	
		self.bpms_table.getSelectionModel().addListSelectionListener(BPMs_Table_Selection_Listener(self.scl_long_tuneup_controller))	
		self.bpms_table.setPreferredScrollableViewportSize(Dimension(200,300))
		scrl_panel0 = JScrollPane(self.cavs_table)
		scrl_panel0.setBorder(etched_border)
		scrl_panel1 = JScrollPane(self.bpms_table)
		self.bpm_table_border = BorderFactory.createTitledBorder(etched_border,"Cavity")
		scrl_panel1.setBorder(self.bpm_table_border)
		cavs_scan_panel.add(scrl_panel0,BorderLayout.CENTER)
		cavs_scan_panel.add(scrl_panel1,BorderLayout.EAST)
		self.bpm_table_panel = scrl_panel1
		#---------- graph panels --------------------------
		self.bpm_phaseDiff_graph_panel = BPM_PhaseDiff_Graph_Panel(self.scl_long_tuneup_controller)
		self.bpm_phase_and_amp_graph_panel = BPMs_Amp_Phase_Graphs_Panel(self.scl_long_tuneup_controller)
		grap_panel = JPanel(GridLayout(1,2))
		grap_panel.add(self.bpm_phaseDiff_graph_panel)		
		grap_panel.add(self.bpm_phase_and_amp_graph_panel)
		#--------center panel = graphs + tables-------------
		center_panel = JPanel(GridLayout(2,1))
		center_panel.add(cavs_scan_panel)
		center_panel.add(grap_panel)
		#-------- post-scan filtering panel
		bottom_panel = JPanel(BorderLayout())
		self.post_scan_panel = PostPhaseScanActions_Panel(self.scl_long_tuneup_controller)
		bottom_panel.add(self.post_scan_panel,BorderLayout.WEST)
		#--------------------------------------------------
		self.main_panel.add(top_params_panel,BorderLayout.NORTH)
		self.main_panel.add(bottom_panel,BorderLayout.SOUTH)
		self.main_panel.add(center_panel,BorderLayout.CENTER)
		#------scan state
		self.scan_state_controller = ScanStateController()
		
	def getMainPanel(self):
		return self.main_panel
class SCL_Long_TuneUp_BPM_Offsets_Controller:
	def __init__(self,scl_long_tuneup_controller):
		#--- scl_long_tuneup_controller the parent document for all SCL tune up controllers
		self.scl_long_tuneup_controller = 	scl_long_tuneup_controller	
		self.main_panel = JPanel(BorderLayout())
		#----etched border
		etched_border = BorderFactory.createEtchedBorder()			
		#------top panels = offsets analysis ----------------------------
		top_panel = JPanel(BorderLayout())
		self.bpms_offsets_from_ccl4_panel = BPMs_Offsets_from_CCL4_Panel(self.scl_long_tuneup_controller)
		self.bpms_offsets_from_hebt1_panel = BPMs_Offsets_from_HEBT1_Panel(self.scl_long_tuneup_controller)
		self.bpms_offsets_from_ext_file_panel = BPMs_Offsets_from_ExtFile_Panel(self.scl_long_tuneup_controller)
		top_panel0 = JPanel(BorderLayout())
		top_panel0.add(self.bpms_offsets_from_ccl4_panel,BorderLayout.NORTH)
		top_panel0.add(self.bpms_offsets_from_hebt1_panel,BorderLayout.SOUTH)
		top_panel1 = JPanel(BorderLayout())
		top_panel1.add(top_panel0,BorderLayout.NORTH)
		top_panel1.add(self.bpms_offsets_from_ext_file_panel,BorderLayout.SOUTH)
		top_panel.add(top_panel1,BorderLayout.NORTH)
		#--------center panel = table------------
		center_panel = JPanel(BorderLayout())		
		self.bpm_offsets_table_model = PhaseOffsets_BPMs_Table_Model(self.scl_long_tuneup_controller)
		self.bpm_offsets_table = JTable(self.bpm_offsets_table_model)
		self.bpm_offsets_table.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION)
		self.bpm_offsets_table.setFillsViewportHeight(true)	
		scrl_panel = JScrollPane(self.bpm_offsets_table)
		scrl_panel.setBorder(etched_border)
		center_panel.add(scrl_panel,BorderLayout.CENTER)
		#-------- bottom panel = post analysis ---------------
		bottom_panel = JPanel(BorderLayout())
		self.set_bpms_as_bad_panel = Set_BPMs_as_Bad_Panel(self.scl_long_tuneup_controller)
		bottom_panel.add(self.set_bpms_as_bad_panel,BorderLayout.SOUTH)
		#--------------------------------------------------
		self.main_panel.add(top_panel,BorderLayout.NORTH)
		self.main_panel.add(center_panel,BorderLayout.CENTER)
		self.main_panel.add(bottom_panel,BorderLayout.SOUTH)		
		
	def getMainPanel(self):
		return self.main_panel
		
	def setFinalOffsets(self):
		ccl4_button = self.set_bpms_as_bad_panel.ccl4_button
		ccl4_final = ccl4_button.isSelected()
		bpm_wrappers = self.scl_long_tuneup_controller.bpm_wrappers
		for bpm_wrapper in bpm_wrappers:
			if(bpm_wrapper.isGood):
				if(ccl4_final):
					bpm_wrapper.final_phase_offset.phaseOffset_avg = bpm_wrapper.left_phase_offset.phaseOffset_avg
					bpm_wrapper.final_phase_offset.phaseOffset_err = bpm_wrapper.left_phase_offset.phaseOffset_err
					bpm_wrapper.final_phase_offset.isReady = bpm_wrapper.left_phase_offset.isReady 
				else:
					bpm_wrapper.final_phase_offset.phaseOffset_avg = bpm_wrapper.right_phase_offset.phaseOffset_avg
					bpm_wrapper.final_phase_offset.phaseOffset_err = bpm_wrapper.right_phase_offset.phaseOffset_err		
					bpm_wrapper.final_phase_offset.isReady = bpm_wrapper.right_phase_offset.isReady 
		self.bpm_offsets_table.getModel().fireTableDataChanged()
class SCL_Long_TuneUp_BPM_Offsets_Controller:
	def __init__(self,scl_long_tuneup_controller):
		#--- scl_long_tuneup_controller the parent document for all SCL tune up controllers
		self.scl_long_tuneup_controller = 	scl_long_tuneup_controller	
		self.main_panel = JPanel(BorderLayout())
		#----etched border
		etched_border = BorderFactory.createEtchedBorder()			
		#------top panels = offsets analysis ----------------------------
		top_panel = JPanel(BorderLayout())
		self.bpms_offsets_from_ccl4_panel = BPMs_Offsets_from_CCL4_Panel(self.scl_long_tuneup_controller)
		self.bpms_offsets_from_hebt1_panel = BPMs_Offsets_from_HEBT1_Panel(self.scl_long_tuneup_controller)
		self.bpms_offsets_from_ext_file_panel = BPMs_Offsets_from_ExtFile_Panel(self.scl_long_tuneup_controller)
		top_panel0 = JPanel(BorderLayout())
		top_panel0.add(self.bpms_offsets_from_ccl4_panel,BorderLayout.NORTH)
		top_panel0.add(self.bpms_offsets_from_hebt1_panel,BorderLayout.SOUTH)
		top_panel1 = JPanel(BorderLayout())
		top_panel1.add(top_panel0,BorderLayout.NORTH)
		top_panel1.add(self.bpms_offsets_from_ext_file_panel,BorderLayout.SOUTH)
		top_panel.add(top_panel1,BorderLayout.NORTH)
		#--------center panel = table------------
		center_panel = JPanel(BorderLayout())		
		self.bpm_offsets_table_model = PhaseOffsets_BPMs_Table_Model(self.scl_long_tuneup_controller)
		self.bpm_offsets_table = JTable(self.bpm_offsets_table_model)
		self.bpm_offsets_table.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION)
		self.bpm_offsets_table.setFillsViewportHeight(true)	
		scrl_panel = JScrollPane(self.bpm_offsets_table)
		scrl_panel.setBorder(etched_border)
		center_panel.add(scrl_panel,BorderLayout.CENTER)
		#-------- bottom panel = post analysis ---------------
		bottom_panel = JPanel(BorderLayout())
		self.set_bpms_as_bad_panel = Set_BPMs_as_Bad_Panel(self.scl_long_tuneup_controller)
		bottom_panel.add(self.set_bpms_as_bad_panel,BorderLayout.SOUTH)
		#--------------------------------------------------
		self.main_panel.add(top_panel,BorderLayout.NORTH)
		self.main_panel.add(center_panel,BorderLayout.CENTER)
		self.main_panel.add(bottom_panel,BorderLayout.SOUTH)		
		
	def getMainPanel(self):
		return self.main_panel
		
	def setFinalOffsets(self):
		ccl4_button = self.set_bpms_as_bad_panel.ccl4_button
		ccl4_final = ccl4_button.isSelected()
		bpm_wrappers = self.scl_long_tuneup_controller.bpm_wrappers
		for bpm_wrapper in bpm_wrappers:
			if(bpm_wrapper.isGood):
				if(ccl4_final):
					bpm_wrapper.final_phase_offset.phaseOffset_avg = bpm_wrapper.left_phase_offset.phaseOffset_avg
					bpm_wrapper.final_phase_offset.phaseOffset_err = bpm_wrapper.left_phase_offset.phaseOffset_err
					bpm_wrapper.final_phase_offset.isReady = bpm_wrapper.left_phase_offset.isReady 
				else:
					bpm_wrapper.final_phase_offset.phaseOffset_avg = bpm_wrapper.right_phase_offset.phaseOffset_avg
					bpm_wrapper.final_phase_offset.phaseOffset_err = bpm_wrapper.right_phase_offset.phaseOffset_err		
					bpm_wrapper.final_phase_offset.isReady = bpm_wrapper.right_phase_offset.isReady 
		self.bpm_offsets_table.getModel().fireTableDataChanged()
class SCL_Long_TuneUp_Rescale_Controller:
	def __init__(self,scl_long_tuneup_controller):
		#--- scl_long_tuneup_controller the parent document for all SCL tune up controllers
		self.scl_long_tuneup_controller = 	scl_long_tuneup_controller
		self.main_panel = JTabbedPane()
		self.scl_long_tuneup_operations_rescale_controller = SCL_Long_TuneUp_Operations_Rescale_Controller(scl_long_tuneup_controller)
		self.operations_panel = self.scl_long_tuneup_operations_rescale_controller.getMainPanel()
		self.expert_panel = JPanel(BorderLayout())
		self.main_panel.add("Operations Re-scale Panel",self.operations_panel)
		self.main_panel.add("Expert Re-scale Panel",self.expert_panel)
		#----etched border
		etched_border = BorderFactory.createEtchedBorder()			
		#------top params panel-----------------------
		top_panel = JPanel(BorderLayout())
		self.bpms_phase_shift_panel = BPMs_Phase_Shift_Panel(self.scl_long_tuneup_controller)
		self.init_amp_phases_panel = Init_New_Amps_Phases_Panel(self.scl_long_tuneup_controller)
		self.new_amp_phases_to_epics_panel = NEW_Amp_and_Phases_to_EPICS_Panel(self.scl_long_tuneup_controller)
		top_panel.add(self.bpms_phase_shift_panel,BorderLayout.NORTH)
		top_panel.add(self.init_amp_phases_panel,BorderLayout.CENTER)
		top_panel.add(self.new_amp_phases_to_epics_panel,BorderLayout.SOUTH)
		#------cavities table panel --------
		cavs_rescale_panel = JPanel(BorderLayout())
		txt = "Cavities' Prameters. New Amp and Avg. Gap Phases can be changed manually."
		rescale_table_border = BorderFactory.createTitledBorder(etched_border,txt)
		cavs_rescale_panel.setBorder(rescale_table_border)		
		self.cavs_rescale_table = JTable(Cavs_Rescale_Table_Model(self.scl_long_tuneup_controller))
		self.cavs_rescale_table.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION)
		self.cavs_rescale_table.setFillsViewportHeight(true)
		self.cavs_rescale_table.getSelectionModel().addListSelectionListener(Cavs_Table_Selection_Listener(self.scl_long_tuneup_controller))		
		scrl_panel0 = JScrollPane(self.cavs_rescale_table)			
		cavs_rescale_panel.add(scrl_panel0,BorderLayout.CENTER)
		center_panel = JPanel(BorderLayout())
		center_panel.add(cavs_rescale_panel,BorderLayout.CENTER)
		#-------- post-rescale actions panel
		bottom_panel = JPanel(BorderLayout())
		#bottom_panel.add(self.post_rescale_panel,BorderLayout.WEST)
		#--------------------------------------------------
		self.expert_panel.add(top_panel,BorderLayout.NORTH)
		self.expert_panel.add(center_panel,BorderLayout.CENTER)
		self.expert_panel.add(bottom_panel,BorderLayout.SOUTH)
		#----- model for tracking 	
		self.scl_tracker_model = SCL_RfGaps_Fitter_Tracker_Model(self.scl_long_tuneup_controller)
		
	def getMainPanel(self):
		return self.main_panel
		
	def updateTables(self):
		self.cavs_rescale_table.getModel().fireTableDataChanged()
Beispiel #7
0
class RF_NET_Power_Controller:
    def __init__(self, top_document, main_loop_controller):
        #--- top_document is a parent document for all controllers
        self.top_document = top_document
        self.main_loop_controller = main_loop_controller
        self.main_panel = JPanel(BorderLayout())
        #----etched border
        etched_border = BorderFactory.createEtchedBorder()
        #----------------------------------------------
        left_panel = JPanel(BorderLayout())
        self.rf_power_table = JTable(RF_Power_Table_Model(self))
        self.rf_power_table.setSelectionMode(
            ListSelectionModel.SINGLE_INTERVAL_SELECTION)
        self.rf_power_table.setFillsViewportHeight(true)
        self.rf_power_table.setPreferredScrollableViewportSize(
            Dimension(800, 240))
        scrl_rf_power_panel = JScrollPane(self.rf_power_table)
        scrl_rf_power_panel.setBorder(
            BorderFactory.createTitledBorder(etched_border, "RF Net Power"))
        self.init_buttons_panel = Init_RF_Power_Controller_Panel(self)
        self.start_stop_panel = Start_Stop_Panel(self)
        tmp0_panel = JPanel(BorderLayout())
        tmp0_panel.add(self.init_buttons_panel, BorderLayout.NORTH)
        tmp0_panel.add(scrl_rf_power_panel, BorderLayout.CENTER)
        tmp0_panel.add(self.start_stop_panel, BorderLayout.SOUTH)
        tmp1_panel = JPanel(BorderLayout())
        tmp1_panel.add(tmp0_panel, BorderLayout.NORTH)
        left_panel.add(tmp1_panel, BorderLayout.WEST)
        #--------------------------------------------------------
        self.main_panel.add(left_panel, BorderLayout.WEST)
        #---- non GUI controllers
        self.loop_run_state = Loop_Run_State()

    def getMainPanel(self):
        return self.main_panel

    def getMessageTextField(self):
        return self.top_document.getMessageTextField()

    def writeDataToXML(self, root_da):
        rf_power_cntrl_da = root_da.createChild("RF_NET_POWER")

    def readDataFromXML(self, root_da):
        rf_power_cntrl_da = root_da.childAdaptor("MAIN_CONTROLLER")
class SCL_Long_TuneUp_Rescale_Controller:
	def __init__(self,scl_long_tuneup_controller):
		#--- scl_long_tuneup_controller the parent document for all SCL tune up controllers
		self.scl_long_tuneup_controller = 	scl_long_tuneup_controller	
		self.main_panel = JPanel(BorderLayout())
		#----etched border
		etched_border = BorderFactory.createEtchedBorder()			
		#------top params panel-----------------------
		top_panel = JPanel(BorderLayout())
		self.bpms_phase_shift_panel = BPMs_Phase_Shift_Panel(self.scl_long_tuneup_controller)
		self.init_amp_phases_panel = Init_New_Amps_Phases_Panel(self.scl_long_tuneup_controller)
		self.new_amp_phases_to_epics_panel = NEW_Amp_and_Phases_to_EPICS_Panel(self.scl_long_tuneup_controller)
		top_panel.add(self.bpms_phase_shift_panel,BorderLayout.NORTH)
		top_panel.add(self.init_amp_phases_panel,BorderLayout.CENTER)
		top_panel.add(self.new_amp_phases_to_epics_panel,BorderLayout.SOUTH)
		#------cavities table panel --------
		cavs_rescale_panel = JPanel(BorderLayout())
		txt = "Cavities' Prameters. New Amp and Avg. Gap Phases can be changed manually."
		rescale_table_border = BorderFactory.createTitledBorder(etched_border,txt)
		cavs_rescale_panel.setBorder(rescale_table_border)		
		self.cavs_rescale_table = JTable(Cavs_Rescale_Table_Model(self.scl_long_tuneup_controller))
		self.cavs_rescale_table.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION)
		self.cavs_rescale_table.setFillsViewportHeight(true)
		self.cavs_rescale_table.getSelectionModel().addListSelectionListener(Cavs_Table_Selection_Listener(self.scl_long_tuneup_controller))		
		scrl_panel0 = JScrollPane(self.cavs_rescale_table)			
		cavs_rescale_panel.add(scrl_panel0,BorderLayout.CENTER)
		center_panel = JPanel(BorderLayout())
		center_panel.add(cavs_rescale_panel,BorderLayout.CENTER)
		#-------- post-rescale actions panel
		bottom_panel = JPanel(BorderLayout())
		#bottom_panel.add(self.post_rescale_panel,BorderLayout.WEST)
		#--------------------------------------------------
		self.main_panel.add(top_panel,BorderLayout.NORTH)
		self.main_panel.add(center_panel,BorderLayout.CENTER)
		self.main_panel.add(bottom_panel,BorderLayout.SOUTH)
		#----- model for tracking 	
		self.scl_tracker_model = SCL_RfGaps_Fitter_Tracker_Model(self.scl_long_tuneup_controller)
		
	def getMainPanel(self):
		return self.main_panel
		
	def updateTables(self):
		self.cavs_rescale_table.getModel().fireTableDataChanged()
class Transverse_Twiss_Fitting_Controller:
    def __init__(self, linac_wizard_document):
        #--- linac_wizard_document the parent document for all controllers
        self.linac_wizard_document = linac_wizard_document
        #--------------------------------------------------------------
        self.main_panel = JPanel(BorderLayout())
        #-------------------------------------------------------------
        #----etched border
        etched_border = BorderFactory.createEtchedBorder()
        #-------------------------------------------------------------
        self.initial_twiss_params_holder = Twiss_Params_Holder()
        self.initTwiss_table = JTable(
            Init_Twiss_Table_Model(self.initial_twiss_params_holder))
        self.initTwiss_table.setSelectionMode(
            ListSelectionModel.SINGLE_SELECTION)
        self.initTwiss_table.setFillsViewportHeight(true)
        self.initTwiss_table.setPreferredScrollableViewportSize(
            Dimension(240, 160))
        initTwiss_panel = JPanel(BorderLayout())
        initTwiss_panel.add(JScrollPane(self.initTwiss_table),
                            BorderLayout.CENTER)
        initTwiss_knobs_panel = JPanel(FlowLayout(FlowLayout.CENTER, 5, 5))
        initTwiss_button = JButton("Init Twiss from Design")
        initTwiss_button.addActionListener(Init_Twiss_Button_Listener(self))
        initTwiss_knobs_panel.add(initTwiss_button)
        initTwiss_panel.add(initTwiss_knobs_panel, BorderLayout.SOUTH)
        border = BorderFactory.createTitledBorder(etched_border,
                                                  "Initial Twiss Parameters")
        initTwiss_panel.setBorder(border)
        #--------Init_and_Fit_Params_Controller panel ----------
        self.init_and_fit_params_controller = Init_and_Fit_Params_Controller(
            self.linac_wizard_document, self)
        #Twiss fitter is defined in the transverse_twiss_fitter_lib.py
        self.twiss_fitter = null
        #----add panels to the main
        tmp_panel = JPanel(BorderLayout())
        tmp_panel.add(initTwiss_panel, BorderLayout.WEST)
        tmp_panel.add(self.init_and_fit_params_controller.getMainPanel(),
                      BorderLayout.EAST)
        self.main_panel.add(tmp_panel, BorderLayout.WEST)

    def getMainPanel(self):
        return self.main_panel
class SCL_Long_TuneUp_PhaseAnalysis_Controller:
	def __init__(self,scl_long_tuneup_controller):
		#--- scl_long_tuneup_controller the parent document for all SCL tune up controllers
		self.scl_long_tuneup_controller = 	scl_long_tuneup_controller	
		self.main_panel = JPanel(BorderLayout())
		#----etched border
		etched_border = BorderFactory.createEtchedBorder()			
		#------top params panel-----------------------
		top_params_panel = JPanel(BorderLayout())
		self.start_stop_analysis_panel = StartStopPhaseAnalysis_Panel(self.scl_long_tuneup_controller)
		top_params_panel.add(self.start_stop_analysis_panel,BorderLayout.NORTH)
		#------cavities scan table panel --------
		cavs_scan_panel = JPanel(BorderLayout())
		self.cavs_table = JTable(Cavs_PhaseAnalysis_Table_Model(self.scl_long_tuneup_controller))
		self.cavs_table.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION)
		self.cavs_table.setFillsViewportHeight(true)
		self.cavs_table.getSelectionModel().addListSelectionListener(Cavs_Table_Selection_Listener(self.scl_long_tuneup_controller))		
		scrl_panel0 = JScrollPane(self.cavs_table)
		scrl_panel0.setBorder(etched_border)
		cavs_scan_panel.add(scrl_panel0,BorderLayout.CENTER)
		#---------- graph panels --------------------------
		self.cav_energy_out_graph_panel = Cav_Energy_Out_Graph_Panel(self.scl_long_tuneup_controller)
		graph_panel = JPanel(GridLayout(1,1))
		graph_panel.add(self.cav_energy_out_graph_panel)
		#--------center panel = graphs + tables-------------
		center_panel = JPanel(GridLayout(2,1))
		center_panel.add(cavs_scan_panel)
		center_panel.add(graph_panel)
		#-------- post-scan filtering panel
		bottom_panel = JPanel(BorderLayout())
		self.post_analysis_panel = PostPhaseAnalysisActions_Panel(self.scl_long_tuneup_controller)
		bottom_panel.add(self.post_analysis_panel,BorderLayout.WEST)
		#--------------------------------------------------
		self.main_panel.add(top_params_panel,BorderLayout.NORTH)
		self.main_panel.add(bottom_panel,BorderLayout.SOUTH)
		self.main_panel.add(center_panel,BorderLayout.CENTER)
		#------scan state
		self.analysis_state_controller = AnalysisStateController()
		self.scl_one_cavity_tracker_model = SCL_One_Cavity_Tracker_Model(scl_long_tuneup_controller)
		
	def getMainPanel(self):
		return self.main_panel
class RF_NET_Power_Controller:
	def __init__(self,top_document,main_loop_controller):
		#--- top_document is a parent document for all controllers
		self.top_document = top_document		
		self.main_loop_controller = main_loop_controller
		self.main_panel = JPanel(BorderLayout())
		#----etched border
		etched_border = BorderFactory.createEtchedBorder()
		#----------------------------------------------
		left_panel = JPanel(BorderLayout())
		self.rf_power_table = JTable(RF_Power_Table_Model(self))
		self.rf_power_table.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION)
		self.rf_power_table.setFillsViewportHeight(true)
		self.rf_power_table.setPreferredScrollableViewportSize(Dimension(800,240))
		scrl_rf_power_panel = JScrollPane(self.rf_power_table)
		scrl_rf_power_panel.setBorder(BorderFactory.createTitledBorder(etched_border,"RF Net Power"))
		self.init_buttons_panel = Init_RF_Power_Controller_Panel(self)
		self.start_stop_panel = Start_Stop_Panel(self)
		tmp0_panel = JPanel(BorderLayout())
		tmp0_panel.add(self.init_buttons_panel,BorderLayout.NORTH)
		tmp0_panel.add(scrl_rf_power_panel,BorderLayout.CENTER)
		tmp0_panel.add(self.start_stop_panel,BorderLayout.SOUTH)
		tmp1_panel = JPanel(BorderLayout())
		tmp1_panel.add(tmp0_panel,BorderLayout.NORTH)
		left_panel.add(tmp1_panel,BorderLayout.WEST)
		#--------------------------------------------------------
		self.main_panel.add(left_panel,BorderLayout.WEST)
		#---- non GUI controllers
		self.loop_run_state = Loop_Run_State()
		
	def getMainPanel(self):
		return self.main_panel
		
	def getMessageTextField(self):
		return self.top_document.getMessageTextField()	
		
	def writeDataToXML(self,root_da):
		rf_power_cntrl_da = root_da.createChild("RF_NET_POWER")			
			
	def readDataFromXML(self,root_da):		
		rf_power_cntrl_da = root_da.childAdaptor("MAIN_CONTROLLER")
Beispiel #12
0
class Quad_and_Cav_Params_Table_Panel(JPanel):
	def __init__(self,transverse_twiss_analysis_Controller):
		self.transverse_twiss_analysis_Controller = transverse_twiss_analysis_Controller
		self.setLayout(GridLayout(1,2))
		#----etched border
		etched_border = BorderFactory.createEtchedBorder()
		self.setBorder(etched_border)
		#--------- quad and cavities params tables
		self.quad_fields_table_model = Quad_Fileds_Table_Model(transverse_twiss_analysis_Controller)
		self.quad_fields_table = JTable(self.quad_fields_table_model)
		self.quad_fields_table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION)
		self.quad_fields_table.setFillsViewportHeight(true)	
		quad_table_panel = JPanel(BorderLayout())
		quad_table_panel.add(JScrollPane(self.quad_fields_table), BorderLayout.CENTER)		
		self.cav_amp_phases_table_model = Cav_Amp_Phases_Table_Model(transverse_twiss_analysis_Controller)
		self.cav_amp_phases_table = JTable(self.cav_amp_phases_table_model)
		self.cav_amp_phases_table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION)
		self.cav_amp_phases_table.setFillsViewportHeight(true)	
		cav_table_panel = JPanel(BorderLayout())
		cav_table_panel.add(JScrollPane(self.cav_amp_phases_table), BorderLayout.CENTER)
		#---------------------------------------
		self.add(quad_table_panel)
		self.add(cav_table_panel)
Beispiel #13
0
    def initProfilesTable(self):
        profile_table = JTable()

        self.profile_table_model = self.ProfileTableModel()
        profile_table.setModel(self.profile_table_model)

        cm = profile_table.getColumnModel()
        # Set column widths
        for i in range(0, 4):
            width = self.profile_table_model.column_widths.get(i)
            if width is not None:
                column = cm.getColumn(i)
                column.setPreferredWidth(width)
                column.setMaxWidth(width)

        profile_table.setFillsViewportHeight(True)

        def doAction(event):
            print event

        # Add the actions dropdown
        actionCol = cm.getColumn(3)
        actions = JComboBox()
        actions.addItem("Activate")
        actions.addItem("Unactivate")
        actions.addItem("Edit")
        actions.addItem("Export to Script")
        actions.addItem("Delete")
        actionCol.setCellEditor(DefaultCellEditor(actions))
        self.profile_table_model.actions_combo = actions

        renderer = self.ComboBoxTableCellRenderer()
        actionCol.setCellRenderer(renderer)

        actions.addActionListener(self.ComboActionListener(self))

        return profile_table
class Transverse_Twiss_Fitting_Controller:
	def __init__(self,linac_wizard_document):
		#--- linac_wizard_document the parent document for all controllers
		self.linac_wizard_document = linac_wizard_document
		#--------------------------------------------------------------
		self.main_panel = JPanel(BorderLayout())
		#-------------------------------------------------------------
		#----etched border
		etched_border = BorderFactory.createEtchedBorder()
		#-------------------------------------------------------------		
		self.initial_twiss_params_holder = Twiss_Params_Holder()
		self.initTwiss_table = JTable(Init_Twiss_Table_Model(self.initial_twiss_params_holder))
		self.initTwiss_table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION)
		self.initTwiss_table.setFillsViewportHeight(true)
		self.initTwiss_table.setPreferredScrollableViewportSize(Dimension(240,160))
		initTwiss_panel = JPanel(BorderLayout())
		initTwiss_panel.add(JScrollPane(self.initTwiss_table), BorderLayout.CENTER)
		initTwiss_knobs_panel = JPanel(FlowLayout(FlowLayout.CENTER,5,5))
		initTwiss_button = JButton("Init Twiss from Design")
		initTwiss_button.addActionListener(Init_Twiss_Button_Listener(self))
		initTwiss_knobs_panel.add(initTwiss_button)
		initTwiss_panel.add(initTwiss_knobs_panel, BorderLayout.SOUTH)
		border = BorderFactory.createTitledBorder(etched_border,"Initial Twiss Parameters")
		initTwiss_panel.setBorder(border)			
		#--------Init_and_Fit_Params_Controller panel ----------
		self.init_and_fit_params_controller = Init_and_Fit_Params_Controller(self.linac_wizard_document,self)
		#Twiss fitter is defined in the transverse_twiss_fitter_lib.py 
		self.twiss_fitter = null
		#----add panels to the main
		tmp_panel = JPanel(BorderLayout())
		tmp_panel.add(initTwiss_panel, BorderLayout.WEST)
		tmp_panel.add(self.init_and_fit_params_controller.getMainPanel(),BorderLayout.EAST)
		self.main_panel.add(tmp_panel, BorderLayout.WEST)
		
	def getMainPanel(self):
		return self.main_panel		
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)
class WS_LW_Acquisition_Controller:
	def __init__(self,linac_wizard_document):
		#--- linac_wizard_document the parent document for all controllers
		self.linac_wizard_document = linac_wizard_document		
		self.main_panel = JPanel(GridLayout(2,1))
		self.quadFieldDict = {}
		self.cavAmpPhaseDict = {}
		self.quads = []
		self.cavs = []
		self.ws_table_model = WS_Table_Model()
		#----make LW or WS nodes
		self.ws_nodes = []
		#----etched border
		etched_border = BorderFactory.createEtchedBorder()
		#---make the WS_JTable + H&V Graphs Panels
		self.ws_table = JTable(self.ws_table_model)
		self.ws_table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION)
		self.ws_table.setFillsViewportHeight(true)	
		ws_panel = JPanel(BorderLayout())
		ws_panel.add(JScrollPane(self.ws_table), BorderLayout.CENTER)
		ws_knobs_panel = JPanel(FlowLayout(FlowLayout.CENTER,5,5))
		ws_panel.add(ws_knobs_panel, BorderLayout.SOUTH)
		ws_panel.setBorder(etched_border)
		#---ws knobs ---------------------------------------------
		get_ws_data_button = JButton("Get WS/LW Data")
		switch_hv_button = JButton(" Switch H/V  ")	
		add_data_to_pool_button = JButton("  Add Data to Pool  ")
		ws_knobs_panel.add(get_ws_data_button)
		ws_knobs_panel.add(switch_hv_button)
		ws_knobs_panel.add(add_data_to_pool_button)
		get_ws_data_button.addActionListener(WS_GET_Data_Listener(self))
		switch_hv_button.addActionListener(Switch_HV_Listener(self))
		add_data_to_pool_button.addActionListener(WS_Data_to_Pool_Listener(self))
		#---------------------------------------------------------
		ws_and_graphs_panel = JPanel(BorderLayout())
		border = BorderFactory.createTitledBorder(etched_border,"WS/LW Raw Data Acquisition")
		ws_and_graphs_panel.setBorder(border)
		ws_and_graphs_panel.add(ws_panel, BorderLayout.WEST)
		graphs_panel = JPanel(GridLayout(1,2))
		self.gpanel_horWF = FunctionGraphsJPanel()
		self.gpanel_verWF = FunctionGraphsJPanel()
		self.gpanel_horWF.setLegendButtonVisible(true)
		self.gpanel_horWF.setChooseModeButtonVisible(true)			
		self.gpanel_verWF.setLegendButtonVisible(true)
		self.gpanel_verWF.setChooseModeButtonVisible(true)			
		self.gpanel_horWF.setName("Horizontal Profiles")
		self.gpanel_horWF.setAxisNames("pos, [mm]","Amp, [arb. units]")	
		self.gpanel_verWF.setName("Vertical Profiles")
		self.gpanel_verWF.setAxisNames("pos, [mm]","Amp, [arb. units]")	
		self.gpanel_horWF.setBorder(etched_border)
		self.gpanel_verWF.setBorder(etched_border)
		graphs_panel.add(self.gpanel_horWF)
		graphs_panel.add(self.gpanel_verWF)
		ws_and_graphs_panel.add(graphs_panel, BorderLayout.CENTER)
		self.setDataToGraphPanels(-1)
		#------analysis sub-panel
		self.ws_data_analysis_controller = WS_Data_Analysis_Controller(self)
		#---put everything into the main_panel
		self.main_panel.add(ws_and_graphs_panel)
		self.main_panel.add(self.ws_data_analysis_controller.main_panel)
		#---set up Listeners 
		self.ws_table.getSelectionModel().addListSelectionListener(WS_Table_Selection_Listener(self))	
		
	def setAccSeq(self,accSeq):
		self.ws_table_model.ws_table_element_arr = []
		self.ws_nodes = []
		if(accSeq == null): 
			self.ws_table_model.fireTableDataChanged()
			return
		nodes = accSeq.filterNodesByStatus(accSeq.getAllNodesOfType(ProfileMonitor.s_strType),true)
		for node in nodes:
			self.ws_nodes.append(node)
		nodes = accSeq.filterNodesByStatus(accSeq.getAllNodesOfType(Marker.s_strType),true)
		for node in nodes:
			if(node.getId().find("LW") >= 0 and node.getId().find("SCL") >= 0):
				self.ws_nodes.append(node)
		for node in self.ws_nodes:
			self.ws_table_model.addWS_TableElement(WS_Table_Element(node))	
		self.makePVforWS()
		#ws_table_elements_arr = self.ws_table_model.getWS_TableElements()
		#for ws_table_element in ws_table_elements_arr:	
		#	ws_table_element.readPVData()
		#----update data and graphs
		self.ws_table_model.fireTableDataChanged()
		self.setDataToGraphPanels(-1)
		#------------set up the quad and cavities dictionaries
		self.quadFieldDict = {}
		self.quads = accSeq.getAllNodesWithQualifier(AndTypeQualifier().and((OrTypeQualifier()).or(Quadrupole.s_strType)))
		for quad in self.quads:
			self.quadFieldDict[quad] = quad.getDfltField()
			"""
			if(quad.isPermanent()):
				self.quadFieldDict[quad] = quad.getDfltField()
			else:
				self.quadFieldDict[quad] = quad.getFieldReadback()
			"""
		self.cavAmpPhaseDict = {}
		rf_gaps = accSeq.getAllNodesWithQualifier(AndTypeQualifier().and((OrTypeQualifier()).or(RfGap.s_strType)))	
		self.cavs = []
		for rf_gap in rf_gaps:
			cav = rf_gap.getParent()
			if(cav not in self.cavs):
				self.cavs.append(cav)
				amp = cav.getDfltCavAmp()
				phase = cav.getDfltCavPhase()
				self.cavAmpPhaseDict[cav] = [amp,phase]
			
	def cleanOldWSdata(self):
		#----clean all data for analysis -- may be we want to keep them?
		ws_data_analysis_controller = self.ws_data_analysis_controller
		ws_data_analysis_controller.ws_records_table_model.ws_rec_table_element_arr = []
		ws_data_analysis_controller.ws_records_table_model.fireTableDataChanged()
		tr_twiss_analysis_controller = self.linac_wizard_document.tr_twiss_analysis_controller
		accStatesKeeper = tr_twiss_analysis_controller.accStatesKeeper
		accStatesKeeper.clean()
		tr_twiss_analysis_controller.dict_panel.dict_table.getModel().fireTableDataChanged()

	def getFreshCopyQuadCavDict(self):
		""" Returns a copy of the fresh  dictionaries [quadFieldDict,cavAmpPhaseDict] """
		quadFieldDict = {}
		for quad in self.quads:
			if(quad.isPermanent()):
				self.quadFieldDict[quad] = quad.getDfltField()
			else:
				self.quadFieldDict[quad] = quad.getFieldReadback()
			quadFieldDict[quad] = self.quadFieldDict[quad]
			#print "debug quad=",quad.getId()," G=",self.quadFieldDict[quad]
		cavAmpPhaseDict = {}
		for cav in self.cavs:
			amp = cav.getDfltCavAmp()
			phase = cav.getDfltCavPhase()
			self.cavAmpPhaseDict[cav] = [amp,phase]
			cavAmpPhaseDict[cav] = [amp,phase]
		return [quadFieldDict,cavAmpPhaseDict]

	def getMainPanel(self):
		return self.main_panel
		
	def setDataToGraphPanels(self,index):
		self.gpanel_horWF.removeAllGraphData()
		self.gpanel_verWF.removeAllGraphData()
		ws_table_elements_arr = self.ws_table_model.getWS_TableElements()
		if(index < 0 or index >= len(ws_table_elements_arr)): return
		ws_table_element = ws_table_elements_arr[index]
		hor_record = ws_table_element.getRecords(WS_DIRECTION_HOR)
		ver_record = ws_table_element.getRecords(WS_DIRECTION_VER)			
		self.gpanel_horWF.addGraphData(hor_record.gd_wf)
		self.gpanel_verWF.addGraphData(ver_record.gd_wf)
				
	def makePVforWS(self):
		ws_table_elements_arr = self.ws_table_model.getWS_TableElements()
		for ws_table_element in ws_table_elements_arr:
			ws_node = ws_table_element.ws
			if(ws_node.getId().find("WS") >= 0):
				pv_pos_wf_name = ws_node.getId()+":Hor_prof_pos"
				pv_wf_name     = ws_node.getId()+":Hor_prof_sig"
				sigma_name     = ws_node.getId()+":Hor_Sigma_gs"
				ws_table_element.setPV_Names(pv_pos_wf_name,pv_wf_name,sigma_name,WS_DIRECTION_HOR)
				pv_pos_wf_name = ws_node.getId()+":Ver_prof_pos"
				pv_wf_name     = ws_node.getId()+":Ver_prof_sig"
				sigma_name     = ws_node.getId()+":Ver_Sigma_gs"
				ws_table_element.setPV_Names(pv_pos_wf_name,pv_wf_name,sigma_name,WS_DIRECTION_VER)
			else:
				name = ws_node.getId().replace(":LW",":LW_")+":LASER_WIRE_axis"
				pv_pos_wf_name = name+"01_ScanPosArray"
				pv_wf_name     = name+"01_Peak_Profile_WFM"
				sigma_name     = name+"01_Peak_Info_Sigma"
				ws_table_element.setPV_Names(pv_pos_wf_name,pv_wf_name,sigma_name,WS_DIRECTION_HOR)
				pv_pos_wf_name = name+"02_ScanPosArray"
				pv_wf_name     = name+"02_Peak_Profile_WFM"
				sigma_name     = name+"02_Peak_Info_Sigma"
				ws_table_element.setPV_Names(pv_pos_wf_name,pv_wf_name,sigma_name,WS_DIRECTION_VER)
Beispiel #17
0
class SelPanel(JDialog, ActionListener):
    def actionPerformed(self, event):
        option = event.getActionCommand()
        if option == 'Close':
          self.dispose()
        elif option == 'SCI':
            chooser = JFileChooser()
            returnVal = chooser.showSaveDialog(self)
            if returnVal == JFileChooser.APPROVE_OPTION:
                fileName = chooser.getSelectedFile().getPath()
                f = open(fileName, 'w')
                f.write("\t".join(["Het", "Fst", "0.5(1-pval)quantile", "median", "0.5(1+pval)quantile"]) + "\n")
                for line in self.confLines:
                    f.write('\t'.join(map(lambda x: str(x), line)) + "\n")
                f.close()
        elif option == 'SLL':
            chooser = JFileChooser()
            returnVal = chooser.showSaveDialog(self)
            if returnVal == JFileChooser.APPROVE_OPTION:
                fileName = chooser.getSelectedFile().getPath()
                f = open(fileName, 'w')
                f.write("\t".join(["Locus", "Het", "Fst", "P(Simul Fst<sample Fst)"]) + "\n")
                for i in range(self.data.size()):
                    line = self.data.elementAt(i)
                    lineList = [str(line.elementAt(0))]
                    lineList.append(str(line.elementAt(1)))
                    lineList.append(str(line.elementAt(2)))
                    lineList.append(str(line.elementAt(3)))
                    f.write("\t".join(lineList) + "\n")
                f.close()

    def getP(self, pvLine):
        #there is a copy of this on Main
        if self.isDominant:
            p1 = pvLine[2]
            p2 = pvLine[3]
            p3 = pvLine[4]
            p = p1 - 0.5 * (p1+p2-1)
            return p
        else:
            return pvLine[3]

    def calcFalsePositives(self, pv, ci, fdr):
        falses = []
        pys = []
        for i in range(len(pv)):
            p = self.getP(pv[i])
            py = 1-2*abs(p-0.5)
            pys.append(py)
            #if p > ci or p<1-ci:
            #    pys.append(py)
        pys.append(0.0)
        pys.sort()
        rate = []
        maxRank=0
        for i in range(len(pys)):
            if pys[i]<=fdr*i/len(pys):
                maxRank = i
        #print maxRank
        falseReports = []
        for pvLine in pv:
            p = self.getP(pvLine)
            py = 1-2*abs(p-0.5)
            if py in pys:
                if pys.index(py)<=maxRank:
                    falseReports.append("Outlier")
                else:
                    falseReports.append("--")
            else:
                falseReports.append("NA")


        return falseReports

    def initTable(self, lociNames, pv, ci, locusFst):
        colNames = Vector()
        colNames.add('Locus')
        colNames.add('Het')
        colNames.add('Fst')
        colNames.add('P(simulated Fst < sample Fst)')
        colNames.add('FDR')
        data = Vector()
        self.data = data
        falses = self.calcFalsePositives(pv, ci, self.fdr)
        currentPos = 0
        for i in range(len(lociNames)):
            line = Vector()
            locus = lociNames[i]
            line.add(locus)
            if not locusFst[i]:
                line.add("NA")
                line.add("NA")
                line.add("NA")
                line.add("NA")
            else:
                line.add(str(pv[currentPos][0]))
                line.add(str(pv[currentPos][1]))
                line.add(str(self.getP(pv[currentPos])))
                line.add(str(falses[currentPos]))
                currentPos += 1
            data.add(line)
        self.table = JTable(data, colNames)
        self.table.setDefaultRenderer(Class.forName("java.lang.Object"),
               ColorRenderer(data, ci, self.chart.neuColor,
                   self.chart.balColor, self.chart.posColor))

    def __init__(self, frame, chart, lociNames, pv,
                 ci, confLines, locusFst, isDominant, fdr):
        JDialog(frame)
        self.chart = chart
        self.frame = frame
        self.confLines = confLines
        self.isDominant = isDominant
        self.fdr = fdr
        pane = self.getRootPane().getContentPane()

        pane.setLayout(BorderLayout())

        self.initTable(lociNames, pv, ci, locusFst)
        scrollPane = JScrollPane(self.table)
        osName = System.getProperty('os.name').lower()

        if not System.getProperty('java.specification.version')[-1] == '5':
            self.table.setFillsViewportHeight(True)
        pane.add(scrollPane, BorderLayout.CENTER)

        buttonPane = JPanel()
        sll = JButton('Save loci list')
        sll.addActionListener(self)
        sll.setActionCommand('SLL')
        buttonPane.add(sll)
        sci = JButton('Save confidence intervals')
        sci.addActionListener(self)
        sci.setActionCommand('SCI')
        buttonPane.add(sci)
        close = JButton('Close')
        close.addActionListener(self)
        close.setActionCommand('Close')
        buttonPane.add(close)
        pane.add(buttonPane, BorderLayout.PAGE_END)


        self.pack()
Beispiel #18
0
class WS_LW_Acquisition_Controller:
	def __init__(self,linac_wizard_document):
		#--- linac_wizard_document the parent document for all controllers
		self.linac_wizard_document = linac_wizard_document		
		self.main_panel = JPanel(GridLayout(2,1))
		self.quadFieldDict = {}
		self.cavAmpPhaseDict = {}
		self.quads = []
		self.cavs = []
		self.ws_table_model = WS_Table_Model()
		#----make LW or WS nodes
		self.ws_nodes = []
		#----etched border
		etched_border = BorderFactory.createEtchedBorder()
		#---make the WS_JTable + H&V Graphs Panels
		self.ws_table = JTable(self.ws_table_model)
		self.ws_table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION)
		self.ws_table.setFillsViewportHeight(true)	
		ws_panel = JPanel(BorderLayout())
		ws_panel.add(JScrollPane(self.ws_table), BorderLayout.CENTER)
		ws_knobs_panel = JPanel(FlowLayout(FlowLayout.CENTER,5,5))
		ws_panel.add(ws_knobs_panel, BorderLayout.SOUTH)
		ws_panel.setBorder(etched_border)
		#---ws knobs ---------------------------------------------
		get_ws_data_button = JButton("Get WS/LW Data")
		switch_hv_button = JButton(" Switch H/V  ")	
		add_data_to_pool_button = JButton("  Add Data to Pool  ")
		ws_knobs_panel.add(get_ws_data_button)
		ws_knobs_panel.add(switch_hv_button)
		ws_knobs_panel.add(add_data_to_pool_button)
		get_ws_data_button.addActionListener(WS_GET_Data_Listener(self))
		switch_hv_button.addActionListener(Switch_HV_Listener(self))
		add_data_to_pool_button.addActionListener(WS_Data_to_Pool_Listener(self))
		#---------------------------------------------------------
		ws_and_graphs_panel = JPanel(BorderLayout())
		border = BorderFactory.createTitledBorder(etched_border,"WS/LW Raw Data Acquisition")
		ws_and_graphs_panel.setBorder(border)
		ws_and_graphs_panel.add(ws_panel, BorderLayout.WEST)
		graphs_panel = JPanel(GridLayout(1,2))
		self.gpanel_horWF = FunctionGraphsJPanel()
		self.gpanel_verWF = FunctionGraphsJPanel()
		self.gpanel_horWF.setLegendButtonVisible(true)
		self.gpanel_horWF.setChooseModeButtonVisible(true)			
		self.gpanel_verWF.setLegendButtonVisible(true)
		self.gpanel_verWF.setChooseModeButtonVisible(true)			
		self.gpanel_horWF.setName("Horizontal Profiles")
		self.gpanel_horWF.setAxisNames("pos, [mm]","Amp, [arb. units]")	
		self.gpanel_verWF.setName("Vertical Profiles")
		self.gpanel_verWF.setAxisNames("pos, [mm]","Amp, [arb. units]")	
		self.gpanel_horWF.setBorder(etched_border)
		self.gpanel_verWF.setBorder(etched_border)
		graphs_panel.add(self.gpanel_horWF)
		graphs_panel.add(self.gpanel_verWF)
		ws_and_graphs_panel.add(graphs_panel, BorderLayout.CENTER)
		self.setDataToGraphPanels(-1)
		#------analysis sub-panel
		self.ws_data_analysis_controller = WS_Data_Analysis_Controller(self)
		#---put everything into the main_panel
		self.main_panel.add(ws_and_graphs_panel)
		self.main_panel.add(self.ws_data_analysis_controller.main_panel)
		#---set up Listeners 
		self.ws_table.getSelectionModel().addListSelectionListener(WS_Table_Selection_Listener(self))	
		
	def setAccSeq(self,accSeq):
		self.ws_table_model.ws_table_element_arr = []
		self.ws_nodes = []
		if(accSeq == null): 
			self.ws_table_model.fireTableDataChanged()
			return
		nodes = accSeq.filterNodesByStatus(accSeq.getAllNodesOfType(ProfileMonitor.s_strType),true)
		for node in nodes:
			self.ws_nodes.append(node)
		nodes = accSeq.filterNodesByStatus(accSeq.getAllNodesOfType(Marker.s_strType),true)
		for node in nodes:
			if(node.getId().find("LW") >= 0 and node.getId().find("SCL") >= 0):
				self.ws_nodes.append(node)
		for node in self.ws_nodes:
			self.ws_table_model.addWS_TableElement(WS_Table_Element(node))	
		self.makePVforWS()
		#ws_table_elements_arr = self.ws_table_model.getWS_TableElements()
		#for ws_table_element in ws_table_elements_arr:	
		#	ws_table_element.readPVData()
		#----update data and graphs
		self.ws_table_model.fireTableDataChanged()
		self.setDataToGraphPanels(-1)
		#------------set up the quad and cavities dictionaries
		self.quadFieldDict = {}
		self.quads = accSeq.getAllNodesWithQualifier(AndTypeQualifier().and((OrTypeQualifier()).or(Quadrupole.s_strType)))
		for quad in self.quads:
			self.quadFieldDict[quad] = quad.getDfltField()
			"""
			if(quad.isPermanent()):
				self.quadFieldDict[quad] = quad.getDfltField()
			else:
				self.quadFieldDict[quad] = quad.getFieldReadback()
			"""
		self.cavAmpPhaseDict = {}
		rf_gaps = accSeq.getAllNodesWithQualifier(AndTypeQualifier().and((OrTypeQualifier()).or(RfGap.s_strType)))	
		self.cavs = []
		for rf_gap in rf_gaps:
			cav = rf_gap.getParent()
			if(cav not in self.cavs):
				self.cavs.append(cav)
				amp = cav.getDfltCavAmp()
				phase = cav.getDfltCavPhase()
				self.cavAmpPhaseDict[cav] = [amp,phase]
			
	def cleanOldWSdata(self):
		#----clean all data for analysis -- may be we want to keep them?
		ws_data_analysis_controller = self.ws_data_analysis_controller
		ws_data_analysis_controller.ws_records_table_model.ws_rec_table_element_arr = []
		ws_data_analysis_controller.ws_records_table_model.fireTableDataChanged()
		tr_twiss_analysis_controller = self.linac_wizard_document.tr_twiss_analysis_controller
		accStatesKeeper = tr_twiss_analysis_controller.accStatesKeeper
		accStatesKeeper.clean()
		tr_twiss_analysis_controller.dict_panel.dict_table.getModel().fireTableDataChanged()

	def getFreshCopyQuadCavDict(self):
		""" Returns a copy of the fresh  dictionaries [quadFieldDict,cavAmpPhaseDict] """
		quadFieldDict = {}
		for quad in self.quads:
			if(quad.isPermanent()):
				self.quadFieldDict[quad] = quad.getDfltField()
			else:
				self.quadFieldDict[quad] = quad.getFieldReadback()
			quadFieldDict[quad] = self.quadFieldDict[quad]
			#print "debug quad=",quad.getId()," G=",self.quadFieldDict[quad]
		cavAmpPhaseDict = {}
		for cav in self.cavs:
			amp = cav.getDfltCavAmp()
			phase = cav.getDfltCavPhase()
			self.cavAmpPhaseDict[cav] = [amp,phase]
			cavAmpPhaseDict[cav] = [amp,phase]
		return [quadFieldDict,cavAmpPhaseDict]

	def getMainPanel(self):
		return self.main_panel
		
	def setDataToGraphPanels(self,index):
		self.gpanel_horWF.removeAllGraphData()
		self.gpanel_verWF.removeAllGraphData()
		ws_table_elements_arr = self.ws_table_model.getWS_TableElements()
		if(index < 0 or index >= len(ws_table_elements_arr)): return
		ws_table_element = ws_table_elements_arr[index]
		hor_record = ws_table_element.getRecords(WS_DIRECTION_HOR)
		ver_record = ws_table_element.getRecords(WS_DIRECTION_VER)			
		self.gpanel_horWF.addGraphData(hor_record.gd_wf)
		self.gpanel_verWF.addGraphData(ver_record.gd_wf)
				
	def makePVforWS(self):
		ws_table_elements_arr = self.ws_table_model.getWS_TableElements()
		for ws_table_element in ws_table_elements_arr:
			ws_node = ws_table_element.ws
			if(ws_node.getId().find("WS") >= 0):
				pv_pos_wf_name = ws_node.getId()+":Hor_prof_pos"
				pv_wf_name     = ws_node.getId()+":Hor_prof_sig"
				sigma_name     = ws_node.getId()+":Hor_Sigma_gs"
				ws_table_element.setPV_Names(pv_pos_wf_name,pv_wf_name,sigma_name,WS_DIRECTION_HOR)
				pv_pos_wf_name = ws_node.getId()+":Ver_prof_pos"
				pv_wf_name     = ws_node.getId()+":Ver_prof_sig"
				sigma_name     = ws_node.getId()+":Ver_Sigma_gs"
				ws_table_element.setPV_Names(pv_pos_wf_name,pv_wf_name,sigma_name,WS_DIRECTION_VER)
			else:
				name = ws_node.getId().replace(":LW",":LW_")+":LASER_WIRE_axis"
				pv_pos_wf_name = name+"01_ScanPosArray"
				pv_wf_name     = name+"01_Peak_Profile_WFM"
				sigma_name     = name+"01_Peak_Info_Sigma"
				ws_table_element.setPV_Names(pv_pos_wf_name,pv_wf_name,sigma_name,WS_DIRECTION_HOR)
				pv_pos_wf_name = name+"02_ScanPosArray"
				pv_wf_name     = name+"02_Peak_Profile_WFM"
				sigma_name     = name+"02_Peak_Info_Sigma"
				ws_table_element.setPV_Names(pv_pos_wf_name,pv_wf_name,sigma_name,WS_DIRECTION_VER)
Beispiel #19
0
class Transverse_Twiss_Analysis_Controller:
	def __init__(self,linac_wizard_document):
		#--- linac_wizard_document the parent document for all controllers
		self.linac_wizard_document = linac_wizard_document
		#----		fit_param_index = 0,1,2 gauss, custom gauss, custom rms
		self.fit_param_index = 0
		#--------------------------------------------------------------
		self.accStatesKeeper = AccStatesKeeper(self.linac_wizard_document)
		self.main_panel = JPanel(BorderLayout())
		#----etched border
		etched_border = BorderFactory.createEtchedBorder()		
		#---------hor. ver. graph panels
		self.graphs_panel = Graphs_Panel(self)
		#---------quads' and cavities' parameters tables panels
		self.quad_cav_params_tables_panel = Quad_and_Cav_Params_Table_Panel(self)
		#-------- tabbed panel with graphs and tables
		self.graphs_and_tables_tabbed_panel = JTabbedPane()
		self.graphs_and_tables_tabbed_panel.add("Hor. Ver. Long. Plots",self.graphs_panel)
		self.graphs_and_tables_tabbed_panel.add("Cavities and Quads Tables",self.quad_cav_params_tables_panel)
		#------ sets selection table
		self.dict_panel = QuadCavDictSelection_Panel(self)		
		#---------H and V Size Tables
		hor_size_table_border = BorderFactory.createTitledBorder(etched_border,"Horizontal")
		ver_size_table_border = BorderFactory.createTitledBorder(etched_border,"Vertical")
		self.hor_size_table_model = Tr_Size_Table_Model(WS_DIRECTION_HOR,self)
		self.hor_size_table = JTable(self.hor_size_table_model)
		self.hor_size_table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION)
		self.hor_size_table.setFillsViewportHeight(true)	
		hor_size_panel = JPanel(BorderLayout())
		hor_size_panel.setBorder(hor_size_table_border)
		hor_size_panel.add(JScrollPane(self.hor_size_table), BorderLayout.CENTER)
		self.ver_size_table_model = Tr_Size_Table_Model(WS_DIRECTION_VER,self)
		self.ver_size_table = JTable(self.ver_size_table_model)
		self.ver_size_table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION)
		self.ver_size_table.setFillsViewportHeight(true)	
		ver_size_panel = JPanel(BorderLayout())
		ver_size_panel.setBorder(ver_size_table_border)
		ver_size_panel.add(JScrollPane(self.ver_size_table), BorderLayout.CENTER)
		sizes_table_panel = JPanel(GridLayout(3,1))
		#-----------column sizes ---------
		columnModel = self.hor_size_table.getColumnModel()
		columnModel.getColumn(0).setPreferredWidth(30)
		columnModel.getColumn(1).setPreferredWidth(120)
		columnModel.getColumn(2).setPreferredWidth(60)
		columnModel.getColumn(3).setPreferredWidth(30)
		columnModel.getColumn(4).setPreferredWidth(50)
		columnModel.getColumn(5).setPreferredWidth(50)
		columnModel.getColumn(6).setPreferredWidth(50)	
		columnModel = self.ver_size_table.getColumnModel()
		columnModel.getColumn(0).setPreferredWidth(30)
		columnModel.getColumn(1).setPreferredWidth(120)
		columnModel.getColumn(2).setPreferredWidth(60)
		columnModel.getColumn(3).setPreferredWidth(30)
		columnModel.getColumn(4).setPreferredWidth(50)
		columnModel.getColumn(5).setPreferredWidth(50)
		columnModel.getColumn(6).setPreferredWidth(50)
		sizes_table_panel.add(self.dict_panel.getMainPanel())
		sizes_table_panel.add(hor_size_panel)
		sizes_table_panel.add(ver_size_panel)
		#---------Transverse Fitting Controller
		self.transverse_twiss_fitting_controller = Transverse_Twiss_Fitting_Controller(self.linac_wizard_document)
		#----add panels to the main
		self.main_panel.add(self.graphs_and_tables_tabbed_panel, BorderLayout.CENTER)
		self.main_panel.add(sizes_table_panel, BorderLayout.WEST)
		self.main_panel.add(self.transverse_twiss_fitting_controller.getMainPanel(), BorderLayout.SOUTH)
		
	def getMainPanel(self):
		return self.main_panel		
		
	def makeWS_LW_Size_Record(self):
		return WS_LW_Size_Record()
Beispiel #20
0
class QatDialog(ToggleDialog):
    """ToggleDialog for error type selection and buttons for reviewing
       errors in sequence
    """
    def __init__(self, name, iconName, tooltip, shortcut, height, app):
        ToggleDialog.__init__(self, name, iconName, tooltip, shortcut, height)
        self.app = app
        tools = app.tools

        #Main panel of the dialog
        mainPnl = JPanel(BorderLayout())
        mainPnl.setBorder(BorderFactory.createEmptyBorder(0, 1, 1, 1))

### First tab: errors selection and download ###########################
        #ComboBox with tools names
        self.toolsComboModel = DefaultComboBoxModel()
        for tool in tools:
            self.add_data_to_models(tool)
        self.toolsCombo = JComboBox(self.toolsComboModel,
                                    actionListener=ToolsComboListener(app))
        renderer = ToolsComboRenderer(self.app)
        renderer.setPreferredSize(Dimension(20, 20))
        self.toolsCombo.setRenderer(renderer)
        self.toolsCombo.setToolTipText(app.strings.getString("Select_a_quality_assurance_tool"))

        #ComboBox with categories names ("views"), of the selected tool
        self.viewsCombo = JComboBox(actionListener=ViewsComboListener(app))
        self.viewsCombo.setToolTipText(app.strings.getString("Select_a_category_of_error"))

        #Popup for checks table
        self.checkPopup = JPopupMenu()
        #add favourite check
        self.menuItemAdd = JMenuItem(self.app.strings.getString("Add_to_favourites"))
        self.menuItemAdd.setIcon(ImageIcon(File.separator.join([self.app.SCRIPTDIR,
                                                                "tools",
                                                                "data",
                                                                "Favourites",
                                                                "icons",
                                                                "tool_16.png"])))
        self.menuItemAdd.addActionListener(PopupActionListener(self.app))
        self.checkPopup.add(self.menuItemAdd)
        #remove favourite check
        self.menuItemRemove = JMenuItem(self.app.strings.getString("Remove_from_favourites"))
        self.menuItemRemove.setIcon(ImageIcon(File.separator.join([self.app.SCRIPTDIR,
                                                                   "tools",
                                                                   "data",
                                                                   "Favourites",
                                                                   "icons",
                                                                   "black_tool_16.png"])))
        self.menuItemRemove.addActionListener(PopupActionListener(self.app))
        self.checkPopup.add(self.menuItemRemove)
        #Help link for selected check
        self.menuItemHelp = JMenuItem(self.app.strings.getString("check_help"))
        self.menuItemHelp.setIcon(ImageIcon(File.separator.join([self.app.SCRIPTDIR,
                                                                 "images",
                                                                 "icons",
                                                                 "info_16.png"])))
        self.checkPopup.add(self.menuItemHelp)
        self.menuItemHelp.addActionListener(PopupActionListener(self.app))

        #Table with checks of selected tool and view
        self.checksTable = JTable()
        self.iconrenderer = IconRenderer()
        self.iconrenderer.setHorizontalAlignment(JLabel.CENTER)
        scrollPane = JScrollPane(self.checksTable)
        self.checksTable.setFillsViewportHeight(True)

        tableSelectionModel = self.checksTable.getSelectionModel()
        tableSelectionModel.addListSelectionListener(ChecksTableListener(app))

        self.checksTable.addMouseListener(ChecksTableClickListener(app,
            self.checkPopup,
            self.checksTable))

        #Favourite area status indicator
        self.favAreaIndicator = JLabel()
        self.update_favourite_zone_indicator()
        self.favAreaIndicator.addMouseListener(FavAreaIndicatorListener(app))

        #label with OSM id of the object currently edited and number of
        #errors still to review
        self.checksTextFld = JTextField("",
                                        editable=0,
                                        border=None,
                                        background=None)

        #checks buttons
        btnsIconsDir = File.separator.join([app.SCRIPTDIR, "images", "icons"])
        downloadIcon = ImageIcon(File.separator.join([btnsIconsDir, "download.png"]))
        self.downloadBtn = JButton(downloadIcon,
                                   actionPerformed=app.on_downloadBtn_clicked,
                                   enabled=0)
        startIcon = ImageIcon(File.separator.join([btnsIconsDir, "start_fixing.png"]))
        self.startBtn = JButton(startIcon,
                                actionPerformed=app.on_startBtn_clicked,
                                enabled=0)
        self.downloadBtn.setToolTipText(app.strings.getString("Download_errors_in_this_area"))
        self.startBtn.setToolTipText(app.strings.getString("Start_fixing_the_selected_errors"))

        #tab layout
        panel1 = JPanel(BorderLayout(0, 1))

        comboboxesPnl = JPanel(GridLayout(0, 2, 5, 0))
        comboboxesPnl.add(self.toolsCombo)
        comboboxesPnl.add(self.viewsCombo)

        checksPnl = JPanel(BorderLayout(0, 1))
        checksPnl.add(scrollPane, BorderLayout.CENTER)
        self.statsPanel = JPanel(BorderLayout(4, 0))
        self.statsPanel_def_color = self.statsPanel.getBackground()
        self.statsPanel.add(self.checksTextFld, BorderLayout.CENTER)
        self.statsPanel.add(self.favAreaIndicator, BorderLayout.LINE_START)
        checksPnl.add(self.statsPanel, BorderLayout.PAGE_END)

        checksButtonsPnl = JPanel(GridLayout(0, 2, 0, 0))
        checksButtonsPnl.add(self.downloadBtn)
        checksButtonsPnl.add(self.startBtn)

        panel1.add(comboboxesPnl, BorderLayout.PAGE_START)
        panel1.add(checksPnl, BorderLayout.CENTER)
        panel1.add(checksButtonsPnl, BorderLayout.PAGE_END)

### Second tab: errors fixing ##########################################
        #label with error stats
        self.errorTextFld = JTextField("",
                                       editable=0,
                                       border=None,
                                       background=None)
        #label with current error description
        self.errorDesc = JLabel("")
        self.errorDesc.setAlignmentX(0.5)

        #error buttons
        errorInfoBtnIcon = ImageProvider.get("info")
        self.errorInfoBtn = JButton(errorInfoBtnIcon,
                                    actionPerformed=app.on_errorInfoBtn_clicked,
                                    enabled=0)
        notErrorIcon = ImageIcon(File.separator.join([btnsIconsDir, "not_error.png"]))
        self.notErrorBtn = JButton(notErrorIcon,
                                   actionPerformed=app.on_falsePositiveBtn_clicked,
                                   enabled=0)
        ignoreIcon = ImageIcon(File.separator.join([btnsIconsDir, "skip.png"]))
        self.ignoreBtn = JButton(ignoreIcon,
                                 actionPerformed=app.on_ignoreBtn_clicked,
                                 enabled=0)
        correctedIcon = ImageIcon(File.separator.join([btnsIconsDir, "corrected.png"]))
        self.correctedBtn = JButton(correctedIcon,
                                    actionPerformed=app.on_correctedBtn_clicked,
                                    enabled=0)
        nextIcon = ImageIcon(File.separator.join([btnsIconsDir, "next.png"]))
        self.nextBtn = JButton(nextIcon,
                               actionPerformed=app.on_nextBtn_clicked,
                               enabled=0)
        #self.nextBtn.setMnemonic(KeyEvent.VK_RIGHT)
        self.errorInfoBtn.setToolTipText(app.strings.getString("open_error_info_dialog"))
        self.notErrorBtn.setToolTipText(app.strings.getString("flag_false_positive"))
        self.ignoreBtn.setToolTipText(app.strings.getString("Skip_and_don't_show_me_this_error_again"))
        self.correctedBtn.setToolTipText(app.strings.getString("flag_corrected_error"))
        self.nextBtn.setToolTipText(app.strings.getString("Go_to_next_error"))

        #tab layout
        self.panel2 = JPanel(BorderLayout())

        self.panel2.add(self.errorTextFld, BorderLayout.PAGE_START)
        self.panel2.add(self.errorDesc, BorderLayout.CENTER)

        errorButtonsPanel = JPanel(GridLayout(0, 5, 0, 0))
        errorButtonsPanel.add(self.errorInfoBtn)
        errorButtonsPanel.add(self.notErrorBtn)
        errorButtonsPanel.add(self.ignoreBtn)
        errorButtonsPanel.add(self.correctedBtn)
        errorButtonsPanel.add(self.nextBtn)
        self.panel2.add(errorButtonsPanel, BorderLayout.PAGE_END)

        #Layout
        self.tabbedPane = JTabbedPane()
        self.tabbedPane.addTab(self.app.strings.getString("Download"),
                               None,
                               panel1,
                               self.app.strings.getString("download_tab"))
        mainPnl.add(self.tabbedPane, BorderLayout.CENTER)
        self.createLayout(mainPnl, False, None)

    def add_data_to_models(self, tool):
        """Add data of a tool to the models of the dialog components
        """
        #tools combobox model
        if tool == self.app.favouritesTool:
            self.toolsComboModel.addElement(JSeparator())
        self.toolsComboModel.addElement(tool)

        #views combobox model
        tool.viewsComboModel = DefaultComboBoxModel()
        for view in tool.views:
            tool.viewsComboModel.addElement(view.title)

        #checks table, one TableModel for each view, of each tool
        columns = ["",
                   self.app.strings.getString("Check"),
                   self.app.strings.getString("Errors")]
        for view in tool.views:
            tableRows = []
            for check in view.checks:
                if check.icon is not None:
                    icon = check.icon
                else:
                    icon = ""
                errorsNumber = ""
                tableRows.append([icon, check.title, errorsNumber])
            view.tableModel = MyTableModel(tableRows, columns)

    def update_favourite_zone_indicator(self):
        #icon
        if self.app.favZone is not None:
            self.favAreaIndicator.setIcon(self.app.favZone.icon)
            #tooltip
            messageArguments = array([self.app.favZone.name], String)
            formatter = MessageFormat("")
            formatter.applyPattern(self.app.strings.getString("favAreaIndicator_tooltip"))
            msg = formatter.format(messageArguments)
            self.favAreaIndicator.setToolTipText(msg)
            #status
            self.favAreaIndicator.setVisible(self.app.favouriteZoneStatus)

    def set_checksTextFld_color(self, color):
        """Change color of textField under checksTable
        """
        colors = {"white": (255, 255, 255),
                  "black": (0, 0, 0),
                  "green": (100, 200, 0),
                  "red": (200, 0, 0)}
        if color == "default":
            self.statsPanel.background = self.statsPanel_def_color
            self.checksTextFld.foreground = colors["black"]
        else:
            self.statsPanel.background = colors[color]
            self.checksTextFld.foreground = colors["white"]

    def change_selection(self, source):
        """Change comboboxes and checks table selections after a
           selection has been made by the user
        """
        if source in ("menu", "layer", "add favourite"):
            self.app.selectionChangedFromMenuOrLayer = True
            self.toolsCombo.setSelectedItem(self.app.selectedTool)
            self.viewsCombo.setModel(self.app.selectedTool.viewsComboModel)
            self.viewsCombo.setSelectedItem(self.app.selectedView.title)

            self.checksTable.setModel(self.app.selectedTableModel)
            self.refresh_checksTable_columns_geometries()
            for i, c in enumerate(self.app.selectedView.checks):
                if c == self.app.selectedChecks[0]:
                    break
            self.checksTable.setRowSelectionInterval(i, i)
            self.app.selectionChangedFromMenuOrLayer = False
        else:
            self.app.selectionChangedFromMenuOrLayer = False
            if source == "toolsCombo":
                self.viewsCombo.setModel(self.app.selectedTool.viewsComboModel)
                self.viewsCombo.setSelectedIndex(0)
            elif source == "viewsCombo":
                self.checksTable.setModel(self.app.selectedTableModel)
                self.refresh_checksTable_columns_geometries()
                if self.app.selectedView.checks != []:  # favourite checks may be none
                    self.checksTable.setRowSelectionInterval(0, 0)

    def refresh_checksTable_columns_geometries(self):
        self.checksTable.getColumnModel().getColumn(0).setCellRenderer(self.iconrenderer)
        self.checksTable.getColumnModel().getColumn(0).setMaxWidth(25)
        self.checksTable.getColumnModel().getColumn(2).setMaxWidth(60)

    def activate_error_tab(self, status):
        if status:
            if self.tabbedPane.getTabCount() == 1:
                self.tabbedPane.addTab(self.app.strings.getString("Fix"),
                                       None,
                                       self.panel2,
                                       self.app.strings.getString("fix_tab"))
        else:
            if self.tabbedPane.getTabCount() == 2:
                self.tabbedPane.remove(1)

    def update_checks_buttons(self):
        """This method sets the status of downloadBtn and startBtn
        """
        #none check selected
        if len(self.app.selectedChecks) == 0:
            self.downloadBtn.setEnabled(False)
            self.startBtn.setEnabled(False)
        else:
            #some check selected
            self.downloadBtn.setEnabled(True)
            if len(self.app.selectedChecks) > 1:
                self.startBtn.setEnabled(False)
            else:
                #only one check is selected
                self.app.errors = self.app.selectedChecks[0].errors
                if self.app.errors is None or len(self.app.errors) == 0:
                    #errors file has not been downloaded and parsed yet
                    self.startBtn.setEnabled(False)
                else:
                    #errors file has been downloaded and parsed
                    if self.app.selectedChecks[0].toDo == 0:
                        #all errors have been corrected
                        self.startBtn.setEnabled(False)
                    else:
                        self.startBtn.setEnabled(True)
                        #self.nextBtn.setEnabled(True)

    def update_error_buttons(self, mode):
        """This method sets the status of:
           ignoreBtn, falsePositiveBtn, correctedBtn, nextBtn
        """
        if mode == "new error":
            status = True
        else:
            status = False
        if self.app.selectedChecks[0].tool.fixedFeedbackMode is None:
            self.correctedBtn.setEnabled(False)
        else:
            self.correctedBtn.setEnabled(status)
        if self.app.selectedChecks[0].tool.falseFeedbackMode is None:
            self.notErrorBtn.setEnabled(False)
        else:
            self.notErrorBtn.setEnabled(status)
        self.errorInfoBtn.setEnabled(status)
        self.ignoreBtn.setEnabled(status)

        if mode in ("reset", "review end"):
            self.nextBtn.setEnabled(False)
        elif mode in ("errors downloaded", "show stats", "new error"):
            self.nextBtn.setEnabled(True)

    def update_text_fields(self, mode, errorInfo=""):
        """This method updates the text in:
           checksTextFld, errorDesc, errorTextFld
        """
        self.errorDesc.text = ""
        if mode == "review end":
            cheksTextColor = "green"
            checksText = self.app.strings.getString("All_errors_reviewed.")
            errorText = self.app.strings.getString("All_errors_reviewed.")
        elif mode == "reset":
            cheksTextColor = "default"
            checksText = ""
            errorText = ""
        elif mode == "show stats":
            cheksTextColor = "default"
            checksText = "%s %d / %s" % (
                         self.app.strings.getString("to_do"),
                         self.app.selectedChecks[0].toDo,
                         len(self.app.selectedChecks[0].errors))
            #print "checks text", checksText
            errorText = "%s%s %d / %s" % (
                        errorInfo,
                        self.app.strings.getString("to_do"),
                        self.app.selectedChecks[0].toDo,
                        len(self.app.selectedChecks[0].errors))
            #print "error text", errorText
            if self.app.selectedError is not None and self.app.selectedError.desc != "":
                self.errorDesc.text = "<html>%s</html>" % self.app.selectedError.desc

        self.set_checksTextFld_color(cheksTextColor)
        self.checksTextFld.text = checksText
        self.errorTextFld.text = errorText
        self.update_statsPanel_status()

    def update_statsPanel_status(self):
        if self.checksTextFld.text == "" and not self.app.favouriteZoneStatus:
            self.statsPanel.setVisible(False)
        else:
            self.statsPanel.setVisible(True)
Beispiel #21
0
class SCL_Scan_Data_CleanUp_Controller:
    def __init__(self, scl_long_tuneup_controller):
        #--- scl_long_tuneup_controller the parent document for all SCL tune up controllers
        self.scl_long_tuneup_controller = scl_long_tuneup_controller
        #----etched border
        etched_border = BorderFactory.createEtchedBorder()
        #----main panel
        self.main_panel = JPanel(BorderLayout())
        #------top params panel-----------------------
        right_info_panel = JPanel(BorderLayout())
        right_top_control_panel = JPanel(FlowLayout(FlowLayout.LEFT, 1, 1))
        analysis_button = JButton("Find BAD Points")
        analysis_button.addActionListener(Analyze_Data_Button_Listener(self))
        right_top_control_panel.add(analysis_button)
        #------ maximal bpm phase error after the scan
        max_phase_err_lbl = JLabel("Max BPM Phase Err = ", JLabel.RIGHT)
        self.max_phase_err_text = DoubleInputTextField(10.0,
                                                       DecimalFormat("##.#"),
                                                       5)
        right_top_control_panel.add(max_phase_err_lbl)
        right_top_control_panel.add(self.max_phase_err_text)
        #-----------------------------------------------
        right_bottom_control_panel = JPanel(BorderLayout())
        right_bottom_control_panel0 = JPanel(BorderLayout())
        right_bottom_control_panel1 = JPanel(FlowLayout(FlowLayout.LEFT, 1, 1))
        right_bottom_control_panel.add(right_bottom_control_panel0,
                                       BorderLayout.NORTH)
        right_bottom_control_panel.add(right_bottom_control_panel1,
                                       BorderLayout.SOUTH)
        statistics_of_errors_lbl = JLabel("Statistics:", JLabel.RIGHT)
        self.statistics_of_errors_txt = JTextField()
        right_bottom_control_panel0.add(statistics_of_errors_lbl,
                                        BorderLayout.WEST)
        right_bottom_control_panel0.add(self.statistics_of_errors_txt,
                                        BorderLayout.CENTER)
        remove_worst_points_button = JButton("Remove Worst Points")
        remove_worst_points_button.addActionListener(
            CleanUp_Worst_Phase_Points_Data_Button_Listener(self))
        remove_all_bad_bpms_button = JButton("Remove All Bad BPMs")
        remove_all_bad_bpms_button.addActionListener(
            CleanUp_All_Bad_BPMs_Button_Listener(self))
        right_bottom_control_panel1.add(remove_worst_points_button)
        right_bottom_control_panel1.add(remove_all_bad_bpms_button)
        #-----------------------------------------------
        right_tables_panel = JPanel(GridLayout(1, 3))
        right_info_panel.add(right_top_control_panel, BorderLayout.NORTH)
        right_info_panel.add(right_tables_panel, BorderLayout.CENTER)
        right_info_panel.add(right_bottom_control_panel, BorderLayout.SOUTH)
        self.main_panel.add(right_info_panel, BorderLayout.EAST)
        #------cavities scan table panel --------
        self.bad_bpms_amp_phase_graphs_panel = Bad_BPMs_Amp_Phase_Graphs_Panel(
            self)
        self.main_panel.add(self.bad_bpms_amp_phase_graphs_panel,
                            BorderLayout.CENTER)
        #------ let's make tables for a list of cavities, bpms, and bad points indexes
        self.cavs_with_bad_data_table_model = Cavs_with_Bad_PhaseScan_Table_Model(
            self)
        self.cavs_table = JTable(self.cavs_with_bad_data_table_model)
        self.cavs_table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION)
        self.cavs_table.setFillsViewportHeight(true)
        self.cavs_table.setPreferredScrollableViewportSize(Dimension(180, 300))
        self.cavs_table.getSelectionModel().addListSelectionListener(
            Cavs_Table_Selection_Listener(self))
        self.bpms_table_model = Bad_PhaseScan_BPMs_Table_Model(self)
        self.bpms_table = JTable(self.bpms_table_model)
        self.bpms_table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION)
        self.bpms_table.setFillsViewportHeight(true)
        self.bpms_table.getSelectionModel().addListSelectionListener(
            BPMs_Table_Selection_Listener(self))
        self.bpms_table.setPreferredScrollableViewportSize(Dimension(180, 300))
        self.points_table_model = Bad_Points_Table_Model(self)
        self.points_table = JTable(self.points_table_model)
        self.points_table.setFillsViewportHeight(true)
        self.points_table.setPreferredScrollableViewportSize(
            Dimension(180, 300))
        #----- set scroll panes
        scrl_panel0 = JScrollPane(self.cavs_table)
        scrl_panel1 = JScrollPane(self.bpms_table)
        scrl_panel2 = JScrollPane(self.points_table)
        scrl_panel0.setBorder(
            BorderFactory.createTitledBorder(etched_border, "Cavs"))
        scrl_panel1.setBorder(
            BorderFactory.createTitledBorder(etched_border, "BPMs"))
        scrl_panel2.setBorder(
            BorderFactory.createTitledBorder(etched_border, "Bad Points"))
        right_tables_panel.setBorder(etched_border)
        right_tables_panel.add(scrl_panel0)
        right_tables_panel.add(scrl_panel1)
        right_tables_panel.add(scrl_panel2)
        #----- dictionary with the bad data self.cavs_to_bpm_dict[cav_wrapper] = [bpm_wrappers,bpms_to_points_dict]
        self.cavs_to_bpm_dict = {}
        #----- arrays with bad data for the tables
        self.cavs_with_bad_data_arr = []
        self.bpms_arr = []
        self.points_arr = []

    def cleanUp_All_Bad_BPMs_Method(self):
        scl_long_tuneup_controller = self.scl_long_tuneup_controller
        cav_wrappers = scl_long_tuneup_controller.cav_wrappers[1:]
        #----- dictionary with the bad data
        cavs_to_bpm_dict = self.cavs_to_bpm_dict
        #----- let's go through all cavities to find the bad bpms
        for cav_wrapper in cav_wrappers:
            if (cav_wrapper.isGood and cav_wrapper.isMeasured):
                if (cavs_to_bpm_dict.has_key(cav_wrapper)):
                    [bpm_wrappers,
                     bpms_to_points_dict] = cavs_to_bpm_dict[cav_wrapper]
                    for bpm_wrapper_bad in bpm_wrappers:
                        for bpm_ind in range(len(cav_wrapper.bpm_wrappers)):
                            bpm_wrapper = cav_wrapper.bpm_wrappers[bpm_ind]
                            if (bpm_wrapper_bad == bpm_wrapper):
                                cav_wrapper.bpm_wrappers_useInAmpBPMs[
                                    bpm_ind] = false
                                cav_wrapper.bpm_wrappers_useInPhaseAnalysis[
                                    bpm_ind] = false

    def cleanUp_Worst_Phase_Points_Data_Method(self):
        scl_long_tuneup_controller = self.scl_long_tuneup_controller
        cav_wrappers = scl_long_tuneup_controller.cav_wrappers[1:]
        #----- dictionary with the bad data
        cavs_to_bpm_dict = self.cavs_to_bpm_dict
        #----- let's go through all cavities to find the worst phase scan points
        #----- worst points means maximal number of bad bpms with it
        n_total_removed_points = 0
        for cav_wrapper in cav_wrappers:
            if (cav_wrapper.isGood and cav_wrapper.isMeasured):
                if (cavs_to_bpm_dict.has_key(cav_wrapper)):
                    [bpm_wrappers,
                     bpms_to_points_dict] = cavs_to_bpm_dict[cav_wrapper]
                    #----- numb_of_points_dict[point_scan_ind] = [bpm1,...]
                    numb_of_points_dict = {}
                    for bpm_wrapper in bpm_wrappers:
                        bad_points_arr = bpms_to_points_dict[bpm_wrapper]
                        for [ind, x, y] in bad_points_arr:
                            if (numb_of_points_dict.has_key(ind)):
                                numb_of_points_dict[ind].append(bpm_wrapper)
                            else:
                                numb_of_points_dict[ind] = [
                                    bpm_wrapper,
                                ]
                    max_bpms_ind = -1
                    max_numb_of_bpms = 0
                    for ind in numb_of_points_dict.keys():
                        n_bpms = len(numb_of_points_dict[ind])
                        if (n_bpms > max_numb_of_bpms):
                            max_bpms_ind = ind
                    if (max_bpms_ind >= 0):
                        #---- the phase scan data with this index should be removed
                        n_bpms = len(numb_of_points_dict[max_bpms_ind])
                        if (n_bpms > 1):
                            n_total_removed_points += n_bpms
                            gd = cav_wrapper.phaseDiffPlot
                            gd.removePoint(max_bpms_ind)
                            for bpm_wrapper in cav_wrapper.bpm_wrappers:
                                (graphDataAmp, graphDataPhase
                                 ) = cav_wrapper.getAmpPhaseGraphs(bpm_wrapper)
                                if (graphDataAmp != null):
                                    graphDataAmp.removePoint(max_bpms_ind)
                                if (graphDataPhase != null):
                                    graphDataPhase.removePoint(max_bpms_ind)
                            #print "debug cav=",cav_wrapper.alias," n bpms=",n_bpms
        #print "debug 	n_total_removed_points=",n_total_removed_points

    def analyze_Data_Method(self):
        scl_long_tuneup_controller = self.scl_long_tuneup_controller
        max_phase_diff0 = self.max_phase_err_text.getValue()
        cav_wrappers = scl_long_tuneup_controller.cav_wrappers[1:]
        #----- dictionary with the bad data
        self.cavs_to_bpm_dict = {}
        cavs_to_bpm_dict = self.cavs_to_bpm_dict
        #----- arrays with bad data for the tables
        self.cavs_with_bad_data_arr = []
        self.bpms_arr = []
        self.points_arr = []
        #---- data analysis for bad points
        total_nPoints = 0
        for cav_wrapper in cav_wrappers:
            if (cav_wrapper.isGood and cav_wrapper.isMeasured):
                bpm_wrapper0 = cav_wrapper.bpm_wrapper0
                bpm_wrapper1 = cav_wrapper.bpm_wrapper1
                pos0 = bpm_wrapper0.pos
                pos1 = bpm_wrapper1.pos
                phaseDiffPlot = cav_wrapper.phaseDiffPlot
                (graphDataAmp0, graphDataPhase0
                 ) = cav_wrapper.bpm_amp_phase_dict[bpm_wrapper0]
                if (phaseDiffPlot.getNumbOfPoints() == 0): continue
                for bpm_wrapper_ind in range(len(cav_wrapper.bpm_wrappers)):
                    bpm_wrapper = cav_wrapper.bpm_wrappers[bpm_wrapper_ind]
                    pos = bpm_wrapper.pos
                    if (pos < pos0): continue
                    pos_coeff = (pos - pos0) / (pos1 - pos0)
                    max_phase_diff = max_phase_diff0
                    if (pos_coeff >= 1.0):
                        max_phase_diff = pos_coeff * max_phase_diff0
                    if (cav_wrapper.
                            bpm_wrappers_useInPhaseAnalysis[bpm_wrapper_ind]):
                        (graphDataAmp, graphDataPhase
                         ) = cav_wrapper.bpm_amp_phase_dict[bpm_wrapper]
                        nPoints = phaseDiffPlot.getNumbOfPoints()
                        bpm_phase_delta = graphDataPhase.getY(
                            nPoints - 1) - graphDataPhase0.getY(
                                nPoints - 1
                            ) - pos_coeff * phaseDiffPlot.getY(nPoints - 1)
                        bad_points_arr = []
                        for ind in range(phaseDiffPlot.getNumbOfPoints()):
                            total_nPoints += 1
                            y = graphDataPhase.getY(
                                ind) - graphDataPhase0.getY(
                                    ind) - pos_coeff * phaseDiffPlot.getY(
                                        ind) - bpm_phase_delta
                            y = makePhaseNear(y, 0.)
                            if (abs(y) > max_phase_diff):
                                bad_points_arr.append(
                                    [ind, graphDataPhase.getX(ind), y])
                        if (len(bad_points_arr) > 0):
                            if (not cavs_to_bpm_dict.has_key(cav_wrapper)):
                                cavs_to_bpm_dict[cav_wrapper] = [[], {}]
                            [bpm_wrappers, bpms_to_points_dict
                             ] = cavs_to_bpm_dict[cav_wrapper]
                            bpm_wrappers.append(bpm_wrapper)
                            bpms_to_points_dict[bpm_wrapper] = bad_points_arr
        for cav_wrapper in cav_wrappers:
            if (cavs_to_bpm_dict.has_key(cav_wrapper)):
                self.cavs_with_bad_data_arr.append(cav_wrapper)
        #--------------------------------------------------------------------
        nCavs = 0
        nBPMs = 0
        nPoints = 0
        for cav_wrapper in self.cavs_with_bad_data_arr:
            [bpm_wrappers, bpms_to_points_dict] = cavs_to_bpm_dict[cav_wrapper]
            nCavs += 1
            nBPMs += len(bpm_wrappers)
            for bpm_wrapper in bpm_wrappers:
                points_arr = bpms_to_points_dict[bpm_wrapper]
                nPoints += len(points_arr)
        st = "N Bad:  Cavs= " + str(nCavs) + "  BPMs= " + str(
            nBPMs) + "  Phase Points=" + str(nPoints) + "/" + str(
                total_nPoints)
        self.statistics_of_errors_txt.setText(st)
        self.cavs_table.getModel().fireTableDataChanged()
        self.bpms_table.getModel().fireTableDataChanged()
        self.points_table.getModel().fireTableDataChanged()
        nCavs = len(self.cavs_with_bad_data_arr)
Beispiel #22
0
class SessionRequestTab(IMessageEditorTab):
    """UI of the extension."""
    def refresh_sessions(self):
        self._session_selector.setModel(
            DefaultComboBoxModel(self._extender.sm.sessions))
        self._session_selector.setSelectedItem(
            self._extender.sm.selected_session)

    def deleteSession(self, evt):
        """Listener for the Delete Session button."""

        if JOptionPane.showConfirmDialog(
                None, "Are you sure?", "",
                JOptionPane.YES_NO_OPTION) == JOptionPane.OK_OPTION:
            self._extender.sm.remove_session()
            self.refresh_sessions()
            self.update_table()
            self.parse_message()

    @attach_stack_trace
    def new_session(self, evt):
        """Listener for New Session button."""

        name = JOptionPane.showInputDialog(None, "Name the new session:",
                                           "Session name")
        if name != None:
            from_request = JOptionPane.showConfirmDialog(
                None, "Create session from current request?",
                "From current request?", JOptionPane.YES_NO_OPTION)
            self._extender.sm.new_session(name)
            self.refresh_sessions()

            # let user select parameters for new session
            if from_request == JOptionPane.OK_OPTION:
                dialog = SessionFromRequestDialog(self)
                dialog.setVisible(True)

    def changeSession(self, evt):
        """Listener for session combobox"""

        if evt.getStateChange() == 1:
            session = evt.getItem()
            self._extender.sm.selected_session = session
            self.update_table()
            self.parse_message()

    @attach_stack_trace
    def update_table(self):
        """Updates the table with new data"""

        columns = ["Type", "Action", "Name", "Value"]
        data = []
        for param in self._extender.sm.selected_session.params:
            data.append(param.as_table_row())

        data.append([
            Parameter.type_mapping[Parameter.PARAM_COOKIE],
            Parameter.ACTION_MODIFY, "", ""
        ])
        data_model = DefaultTableModel(data,
                                       columns,
                                       tableChanged=self.tableChanged)
        self.modification_table.setModel(data_model)

        # type combobox
        type_combo = JComboBox(self._types)
        type_column = self.modification_table.getColumnModel().getColumn(0)
        type_column.setCellEditor(DefaultCellEditor(type_combo))
        type_column.setMaxWidth(75)

        # action combobox
        action_combo = JComboBox(self._actions)
        action_column = self.modification_table.getColumnModel().getColumn(1)
        action_column.setCellEditor(DefaultCellEditor(action_combo))
        action_column.setMaxWidth(75)
        action_combo.setSelectedItem("replace")

    @attach_stack_trace
    def tableChanged(self, evt):
        """Handles changes to table cells, i.e. Parameter changes."""
        if evt.getType() == 0:  # UPDATING a cell
            table_model = evt.getSource()
            row = evt.getFirstRow()
            col = evt.getColumn()

            # Removing a row was selected
            if col == 0 and "Remove Row" in table_model.getValueAt(
                    row, col) and table_model.getRowCount() > 1:
                table_model.removeRow(row)

            # update the model
            session = self._extender.sm.selected_session
            session.reset()
            for r in range(table_model.getRowCount() - 1):
                type = str(table_model.getValueAt(r, 0))
                action = str(table_model.getValueAt(r, 1))
                name = table_model.getValueAt(r, 2)
                value = table_model.getValueAt(r, 3)

                if type != None and name != None and value != None:
                    param = Parameter(type, action, name,
                                      self._extender.helpers.urlDecode(value))
                    session.modify(param)

            # Check if there is an empty last row
            has_empty_row = True
            for i in range(2, 4):
                val = table_model.getValueAt(table_model.getRowCount() - 1, i)
                if val != None and val != "":
                    has_empty_row = False
                    break

            # no empty last row, add one
            if not has_empty_row:
                table_model.addRow(["", Parameter.ACTION_MODIFY, "", ""])

            # update message editor
            self.parse_message()

    def parse_message(self):
        self._editor.setText(
            self._extender.process_request(self._extender.HTTP))

    def getTabCaption(self):
        return "Session"

    def getUiComponent(self):
        return self._panel

    def isEnabled(self, content, isRequest):
        return isRequest

    def setMessage(self, content, isRequest):
        self._extender.HTTP = self._extender.helpers.bytesToString(content)
        self._editor.setText(content)
        self.refresh_sessions()
        self.update_table()

    def getMessage(self):
        return self._editor.getText()

    def isModified(self):
        return self._editor.isTextModified()

    def getSelectedData(self):
        return self._editor.getSelectedText()

    @attach_stack_trace
    def __init__(self, extender, controller, editable):
        self._extender = extender

        self._panel = JPanel()  # main panel

        # type combobox for tables
        self._types = Parameter.type_mapping.values() + ["- Remove Row -"]
        self._actions = ["replace", "insert", "delete"]

        # define the GridBagLayout ( 4x4 )
        gridBagLayout = GridBagLayout()
        gridBagLayout.columnWidths = [0, 0, 0, 0]
        gridBagLayout.rowHeights = [0, 0, 0, 0]
        gridBagLayout.columnWeights = [1.0, 0.0, 0.0, 0.0]
        gridBagLayout.rowWeights = [0.0, 1.0, 5.0, 0.0]
        self._panel.setLayout(gridBagLayout)

        # JComboBox for Session selection
        self._session_selector = JComboBox(extender.sm.sessions,
                                           itemStateChanged=self.changeSession)
        self._session_selector_model = self._session_selector.getModel()
        gbc_session_selector = _new_grid_bag(0, 0)
        self._panel.add(self._session_selector, gbc_session_selector)

        # "Delete Session" Button
        del_session = JButton("Delete Session",
                              actionPerformed=self.deleteSession)
        gbc_del_session = _new_grid_bag(1, 0)
        self._panel.add(del_session, gbc_del_session)

        # "New Session" Button
        new_session = JButton("New Session", actionPerformed=self.new_session)
        gbc_new_session = _new_grid_bag(2, 0)
        self._panel.add(new_session, gbc_new_session)

        # Table containing modified parameters
        self.modification_table = JTable()
        self.update_table()

        gbc_modification_table = _new_grid_bag(0, 1, 3)
        self._panel.add(JScrollPane(self.modification_table),
                        gbc_modification_table)
        self.modification_table.setPreferredScrollableViewportSize(
            self.modification_table.getPreferredSize())
        self.modification_table.setFillsViewportHeight(True)

        # HTTP message editor
        self._editor = self._extender.callbacks.createTextEditor()
        gbc_messageEditor = _new_grid_bag(0, 2, 3)
        self._panel.add(self._editor.getComponent(), gbc_messageEditor)
class LINAC_SetUp_Controller:
	def __init__(self,linac_wizard_document):
		#--- linac_wizard_document the parent document for all controllers
		self.linac_wizard_document = linac_wizard_document		
		self.main_panel = JPanel(BorderLayout())
		#----etched border
		etched_border = BorderFactory.createEtchedBorder()		
		#------tables with Seq. names and button
		tables_panel = JPanel(BorderLayout())
		tables_panel.setBorder(etched_border)
		self.first_table = JTable(WS_Records_Table_Model("First "))
		self.last_table = JTable(WS_Records_Table_Model("Last "))
		self.first_table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION)
		self.last_table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION)
		self.first_table.setFillsViewportHeight(true)
		self.last_table.setFillsViewportHeight(true)
		tables01_panel = JPanel(BorderLayout())
		scrl_panel0 = JScrollPane(self.first_table)
		scrl_panel1 = JScrollPane(self.last_table)
		#tables01_panel.add(JScrollPane(self.first_table),BorderLayout.WEST)
		#tables01_panel.add(JScrollPane(self.last_table),BorderLayout.EAST)
		self.first_table.getCellRenderer(0,0).setHorizontalAlignment(JLabel.CENTER)
		self.last_table.getCellRenderer(0,0).setHorizontalAlignment(JLabel.CENTER)
		self.first_table.setPreferredScrollableViewportSize(Dimension(120,300))
		self.last_table.setPreferredScrollableViewportSize(Dimension(120,300))
		tables01_panel.add(scrl_panel0,BorderLayout.WEST)
		tables01_panel.add(scrl_panel1,BorderLayout.EAST)	
		tables_button_panel = JPanel(BorderLayout())
		tables_button_panel.add(tables01_panel,BorderLayout.WEST)
		seq_button_panel = JPanel(FlowLayout(FlowLayout.CENTER,5,5))
		seq_set_button = JButton(" Set ComboSequence ")	
		seq_button_panel.add(seq_set_button)
		tables_button_panel.add(seq_button_panel,BorderLayout.SOUTH)
		tables_panel.add(tables_button_panel,BorderLayout.NORTH)
		self.main_panel.add(tables_panel,BorderLayout.WEST)
		#--------central panel-------
		cav_amp_phase_button = JButton(" Read Cavities Amp.&Phases from Ext. File ")	
		cav_info_from_scl_tuneup_button = JButton("Get SCL Cav. Amp.&Phases from SCL Long. TuneUp")	
		new_accelerator_button = JButton(" Setup a New Accelerator File ")
		center_buttons_panel0 = JPanel(FlowLayout(FlowLayout.CENTER,5,5))
		center_buttons_panel0.add(cav_amp_phase_button)
		center_buttons_panel1 = JPanel(FlowLayout(FlowLayout.CENTER,5,5))
		center_buttons_panel1.add(cav_info_from_scl_tuneup_button)			
		center_buttons_panel2 = JPanel(FlowLayout(FlowLayout.CENTER,5,5))
		center_buttons_panel2.add(new_accelerator_button)	
		center_buttons_panel = JPanel(GridLayout(3,1))
		center_buttons_panel.add(center_buttons_panel0)
		center_buttons_panel.add(center_buttons_panel1)
		center_buttons_panel.add(center_buttons_panel2)
		center_panel = JPanel(BorderLayout())		
		center_panel.add(center_buttons_panel,BorderLayout.NORTH)
		self.main_panel.add(center_panel,BorderLayout.CENTER)
		#---------add actions listeners
		seq_set_button.addActionListener(Make_Sequence_Listener(self))
		cav_amp_phase_button.addActionListener(Read_Cav_Amp_Phase_Dict_Listener(self))
		cav_info_from_scl_tuneup_button.addActionListener(Get_SCL_Cav_Amp_Phase_Listener(self))
		new_accelerator_button.addActionListener(SetUp_New_Accelerator_Listener(self))	
		
	def getMainPanel(self):
		return self.main_panel
		
	def setSelectedSequences(self,first_seq_name,last_seq_name):
		index0 = self.first_table.getModel().accSeqName_arr.index(first_seq_name)
		index1 = self.last_table.getModel().accSeqName_arr.index(last_seq_name)
		self.first_table.setRowSelectionInterval(index0,index0)
		self.last_table.setRowSelectionInterval(index1,index1)
		
	def getSelectedSequencesNames(self):
		first_table = self.first_table
		index0 = first_table.getSelectedRow()
		last_table = self.last_table
		index1 = last_table.getSelectedRow()
		if(index0 < 0 or index1 < 0): return []
		seq_names = []
		if(index0 == index1):
			seq_names.append(first_table.getModel().accSeqName_arr[index0])
		else:
			if(index1 < index0):
				(index0,index1) = (index1,index0)
			for i in range(index0,index1+1):
				seq_names.append(first_table.getModel().accSeqName_arr[i])
		return seq_names
		
	def setAccSeqNames(self,seq_names):
		accl = self.linac_wizard_document.getAccl()
		if(len(seq_names) == 0): 
			accSeq = null
			self.linac_wizard_document.setAccSeq(accSeq)
			return
		lst = ArrayList()
		for seqName in seq_names:
			lst.add(accl.getSequence(seqName))
		accSeq = AcceleratorSeqCombo("SEQUENCE", lst)	
		self.linac_wizard_document.setAccSeq(accSeq)
		
	def getCavNameNodeDict(self,accl):
		rf_gaps = accl.getAllNodesWithQualifier(AndTypeQualifier().and((OrTypeQualifier()).or(RfGap.s_strType)))	
		cavs = []
		for rf_gap in rf_gaps:
			cav = rf_gap.getParent()
			if(cav not in cavs):
				cavs.append(cav)
		cav_name_node_dict = {}
		cav_names = []
		for cav in cavs:
			cav_names.append(cav.getId())
			cav_name_node_dict[cav.getId()] = cav		
		return cav_name_node_dict
Beispiel #24
0
class Table(Panel):
    """
	Implement a table with 2 columns: Roi group number and associated name.  
	The table exposes the  
	- tableModel: the raw data 
	- table: a JTable which takes care of the visualization/interactions (clicks...)  
	"""
    def __init__(self):

        super(Table, self).__init__(GridLayout(
            0, 1))  # 1 column, as many rows as necessary

        self.tableModel = TableModel()
        self.table = JTable(self.tableModel)
        self.table.setPreferredScrollableViewportSize(Dimension(500, 100))
        self.table.setFillsViewportHeight(True)

        # Handle row selection
        #table.getSelectionModel().addListSelectionListener( RowListener())
        #table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION)
        self.table.setRowSelectionAllowed(True)

        #Create the scroll pane and add the table to it.
        scrollPane = JScrollPane(self.table)
        #ScrollPane scrollPane =  ScrollPane()
        #scrollPane.add(table)

        #Add the scroll pane to self panel.
        self.add(scrollPane)

        # LABEL PANEL
        labelPanel = JPanel(GridLayout(0, 1))
        #Panel labelPanel =  Panel( GridLayout(0,2))
        #Panel labelPanel =  Panel() # looks bad when resizing

        # Add label
        labelName = JLabel("Name")
        labelPanel.add(labelName)
        self.add(labelPanel)

        # BUTTON PANNEL
        buttonPanel = JPanel(GridLayout(0, 2))
        #Panel buttonPanel =  Panel()

        # Add text field for group name
        self.groupField = JTextField("new group")
        buttonPanel.add(self.groupField)

        # Button "Add Row"
        #JButton buttonAdd =  AddButton()
        buttonPanel.add(AddButton(self))
        buttonPanel.add(JLabel())  # empty JLabel to fill the blank
        buttonPanel.add(DeleteButton(self))
        buttonPanel.add(ImportButton(self))
        buttonPanel.add(ExportButton(self))

        # Finally add button panel to main panel
        self.add(buttonPanel)

    def getNameField(self):
        """Read the current state of the group name"""
        return self.groupField.getText()

    def showTable(self):
        """
		Add the main panel to a GenericDialog and show it 
		"""
        gd = GenericDialog("Roi-group table")
        gd.addPanel(self)  # Add current table instance to panel
        gd.addMessage("""If you use this plugin, please cite: 
		
		Laurent Thomas. (2020, November 18). 
		LauLauThom/RoiGroupTable: ImageJ/Fiji RoiGroup Table (Version 1.0)
		Zenodo. http://doi.org/10.5281/zenodo.4279049""")
        gd.addHelp(r"https://github.com/LauLauThom/RoiGroupTable")
        gd.showDialog()

        if gd.wasOKed():
            # Update ImageJ Roi group names mapping
            stringGroup = self.tableModel.getGroupString()
            Roi.setGroupNames(stringGroup)

    def getTableModel(self):
        return self.tableModel
class Plugin(IHttpListener):

    MUTATE_ID_COLUMN_INDEX = 4
    ORIG_ID_COLUMN_INDEX = 5

    def __init__(self, callbacks):
        self.callbacks = callbacks
        self.helpers = self.callbacks.getHelpers()

        self.origMessageEditorController = MessageEditorController()
        self.mutatedMessageEditorController = MessageEditorController()

        self.origSearchString = replacements.origSearchString
        self.replacements = replacements.replacements

        self.requestResponseCache = {}

    def start(self):

        self.frame = JDialog()
        #self.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
        self.frame.setLocation(0, 1500)
        self.frame.setSize(1000, 200)

        self.tableDataModel = DefaultTableModel([], [
            "URL", "Code", "Content-Length", "Location", "Mutated Id",
            "Orig Id"
        ])
        self.jtable = JTable(self.tableDataModel)

        scrollPane = JScrollPane(self.jtable)
        self.jtable.setFillsViewportHeight(True)

        messageEditorOrig = self.callbacks.createMessageEditor(None, False)
        messageEditorModified = self.callbacks.createMessageEditor(
            None, False)
        self.editorSplitPane = JSplitPane(JSplitPane.HORIZONTAL_SPLIT,
                                          messageEditorOrig.getComponent(),
                                          messageEditorModified.getComponent())
        self.editorSplitPane.setResizeWeight(0.5)

        splitPane = JSplitPane(JSplitPane.VERTICAL_SPLIT, scrollPane,
                               self.editorSplitPane)
        splitPane.setResizeWeight(0.5)

        class TableSelector(ListSelectionListener):
            def __init__(self, plugin):
                self.plugin = plugin

            def valueChanged(self, event):
                if not event.getValueIsAdjusting():
                    selectedRowIndex = self.plugin.jtable.getSelectedRows()[0]

                    self.plugin._rowSelected(selectedRowIndex)

        self.jtable.getSelectionModel().addListSelectionListener(
            TableSelector(self))

        self.frame.add(splitPane)
        self.frame.setVisible(True)

        self.callbacks.registerHttpListener(self)
        self.callbacks.setExtensionName("Custom Plugin")
        return

    def stop(self):

        print("Closing!")
        self.callbacks.removeHttpListener(self)
        self.frame.dispose()
        self.jrame = None
        return

    def _rowSelected(self, index):

        #self.splitPane.setLeftComponent(
        #self.callbacks.createMessageEditor(
        origId = self.tableDataModel.getValueAt(
            index, self.ORIG_ID_COLUMN_INDEX).encode('ascii', 'ignore')
        mutateId = self.tableDataModel.getValueAt(
            index, self.MUTATE_ID_COLUMN_INDEX).encode('ascii', 'ignore')

        self.origMessageEditorController.setRequestResponse(
            self.requestResponseCache[origId])
        messageEditorOrig = self.callbacks.createMessageEditor(
            self.origMessageEditorController, False)
        messageEditorOrig.setMessage(
            self.requestResponseCache[origId].getResponse(), False)
        self.editorSplitPane.setLeftComponent(messageEditorOrig.getComponent())

        self.mutatedMessageEditorController.setRequestResponse(
            self.requestResponseCache[mutateId])
        messageEditorMutated = self.callbacks.createMessageEditor(
            self.mutatedMessageEditorController, False)
        messageEditorMutated.setMessage(
            self.requestResponseCache[mutateId].getResponse(), False)
        self.editorSplitPane.setRightComponent(
            messageEditorMutated.getComponent())

        print(mutateId)
        print("Row selected")
        print(str(index))

    def _buildResponseHeadersDictionary(self, headers):
        """Creates key/value lookup from list of headers.
           Header names are converted to lowercase.
           If header is returned multiple time, last header has precedence."""
        d = {}

        #Skip first "header", it's the response code line.
        for i in range(1, len(headers)):

            (name, value) = headers[i].split(":", 1)
            d[name.lower()] = value

        return d

    def _getDictValueOrEmptyStr(self, d, key):
        if key in d:
            return d[key]
        else:
            return ""

    def handleReceivedResponseForModifiedRequest(self, requestResponse):

        #Get original HTTP Request
        requestData = StringUtil.fromBytes(requestResponse.getRequest())
        requestId = re.search(b"^X-REQUEST-ID: ([^\r]*)",
                              requestData,
                              flags=re.MULTILINE).group(1).encode('ascii')
        origRequestId = re.search(b"^X-REQUEST-ORIG-ID: ([^\r]*)",
                                  requestData,
                                  flags=re.MULTILINE).group(1).encode('ascii')

        print("Keys")
        print(requestId)
        print(origRequestId)
        print(self.requestResponseCache.keys())

        self.requestResponseCache[requestId] = requestResponse

        origRequestResponse = self.requestResponseCache[origRequestId]

        analyzedOrigResponse = self.helpers.analyzeResponse(
            origRequestResponse.getResponse())
        analayzeMutatedResponse = self.helpers.analyzeResponse(
            requestResponse.getResponse())

        origResponseHeaders = self._buildResponseHeadersDictionary(
            analyzedOrigResponse.getHeaders())
        mutatedResponseHeaders = self._buildResponseHeadersDictionary(
            analayzeMutatedResponse.getHeaders())

        mutatedRequestInfo = self.helpers.analyzeRequest(
            requestResponse.getHttpService(), requestResponse.getRequest())

        model = self.jtable.getModel()
        model.addRow([
            str(mutatedRequestInfo.getUrl()),
            str(analayzeMutatedResponse.getStatusCode()),
            self._getDictValueOrEmptyStr(mutatedResponseHeaders,
                                         "content-length"),
            self._getDictValueOrEmptyStr(mutatedResponseHeaders, "location"),
            requestId, origRequestId
        ])

        print("Modified Request Found: %s %s" % (requestId, origRequestId))

        #Get original request and response object from lookup
        #Get request from lookup

    def processHttpMessage(self, toolFlag, messageIsRequest, requestResponse):
        if not messageIsRequest:
            requestData = StringUtil.fromBytes(requestResponse.getRequest())

            #We generated the request, process it
            if requestData.find(b"X-REQUEST-ID") != -1:

                self.handleReceivedResponseForModifiedRequest(requestResponse)

            #Response received for non-mutated request.
            #Mutate request and send it.
            else:

                origRequestResponseUUID = str(uuid.uuid4())
                reload(replacements)

                print("Looking for replacements")
                for replacement in self.replacements:
                    newRequestData = re.sub(self.origSearchString, replacement,
                                            requestData)

                    #If no replacemnets made, don't send any requests
                    if newRequestData != requestData:
                        newRequestUUID = str(uuid.uuid4())
                        newRequestData = re.sub(
                            b"Host",
                            b"X-REQUEST-ID: " + newRequestUUID + "\r\nHost",
                            requestData)
                        newRequestData = re.sub(
                            b"Host", b"X-REQUEST-ORIG-ID: " +
                            origRequestResponseUUID + "\r\nHost",
                            newRequestData)

                        print("Sending Mutated Request")
                        print(newRequestData)

                        self.requestResponseCache[
                            origRequestResponseUUID] = requestResponse
                        httpService = requestResponse.getHttpService()
                        self.callbacks.makeHttpRequest(httpService,
                                                       newRequestData)

            print("Got here")
Beispiel #26
0
class Main_Loop_Controller:
	def __init__(self,top_document,accl):
		#--- top_document is a parent document for all controllers
		self.top_document = top_document		
		self.main_panel = JPanel(BorderLayout())
		#----etched border
		etched_border = BorderFactory.createEtchedBorder()
		#----main loop timer
		self.main_loop_timer = Main_Loop_Timer(self)		
		#---- set up accSeq
		self.accSeq = null
		seq_names = ["MEBT","DTL1","DTL2","DTL3","DTL4","DTL5","DTL6","CCL1","CCL2","CCL3","CCL4"]
		lst = ArrayList()
		for seqName in seq_names:
			lst.add(accl.getSequence(seqName))
		self.accSeq = AcceleratorSeqCombo("SEQUENCE", lst)
		rf_gaps = self.accSeq.getAllNodesWithQualifier(AndTypeQualifier().and((OrTypeQualifier()).or(RfGap.s_strType)))	
		self.cav_wrappers = []
		cavs = []
		count = 0
		for rf_gap in rf_gaps:
			cav = rf_gap.getParent()
			pos = self.accSeq.getPosition(cav)
			if(cav not in cavs):
				#print "debug cav=",cav.getId()," count=",count
				cavs.append(cav)				
				alias = "null"
				if(count > 3):
					alias = seq_names[count+1-4]
				else:
					alias = seq_names[0]+str(count+1)
				cav_llrf_name = "null"
				cav_pwr_pv_name = "nullPwr"
				if(count <= 3):
					cav_llrf_name = "MEBT_LLRF:FCM"+str(count+1)
					cav_pwr_pv_name = "MEBT_LLRF:Cav"+str(count+1)+":NetPwr"
				if(count > 3 and count < 10):
					cav_llrf_name = "DTL_LLRF:FCM"+str(count-3)
					cav_pwr_pv_name = "DTL_LLRF:Cav"+str(count-3)+":NetPwr"
				if(count > 9):
					cav_llrf_name = "CCL_LLRF:FCM"+str(count-9)
					cav_pwr_pv_name = "CCL_LLRF:Cav"+str(count-9)+":NetPwr"					
				amp_pv_name = cav_llrf_name+":CtlAmpSet"
				phase_pv_name = cav_llrf_name+":CtlPhaseSet"
				self.cav_wrappers.append(Cavity_Wrapper(cav,pos,alias,amp_pv_name,phase_pv_name,cav_pwr_pv_name))	
				#print "debug =================================="
				#print "debug cav=",cav.getId(),"  alias=",alias,"  amp_pv_name=",amp_pv_name," phase_pv_name=",phase_pv_name
				#print "debug         cav_pwr_pv_name=",cav_pwr_pv_name
				#print "debug cav=",cav.getId()," pos =",pos," L=",cav.getLength()
				count += 1
		#---- BPMs
		self.bpm_wrappers = []
		bpms = self.accSeq.getAllNodesWithQualifier(AndTypeQualifier().and((OrTypeQualifier()).or(BPM.s_strType)))	
		for bpm in bpms:
			pos = self.accSeq.getPosition(bpm)
			pos += 0.5*bpm.getBPMBucket().getLength()*bpm.getBPMBucket().getOrientation() 
			bpm_wrapper = BPM_Wrapper(bpm,pos)
			#print "debug bpm=",bpm_wrapper.alias," pos =",pos		
			self.bpm_wrappers.append(bpm_wrapper)
		#---- SCL first BPMs and Cavs
		lst = ArrayList()
		for seqName in ["SCLMed",]:	
			lst.add(accl.getSequence(seqName))
		self.scl_accSeq = AcceleratorSeqCombo("SCL_SEQUENCE", lst)
		bpms = self.scl_accSeq.getAllNodesWithQualifier((AndTypeQualifier().and((OrTypeQualifier()).or(BPM.s_strType))).andStatus(true))
		bpms = bpms[:5]
		self.scl_bpm_wrappers = []
		for bpm in bpms:
			pos = self.scl_accSeq.getPosition(bpm) + self.accSeq.getLength()
			pos += 0.5*bpm.getBPMBucket().getLength()*bpm.getBPMBucket().getOrientation()		
			bpm_wrapper = BPM_Wrapper(bpm,pos)
			#print "debug bpm=",bpm_wrapper.alias," pos =",pos				
			self.scl_bpm_wrappers.append(bpm_wrapper)
		rf_gaps = self.scl_accSeq.getAllNodesWithQualifier(AndTypeQualifier().and((OrTypeQualifier()).or(RfGap.s_strType)))	
		cavs = []
		for rf_gap in rf_gaps:
			cav = rf_gap.getParent()
			if((cav not in cavs) and cav.getStatus()):
				cavs.append(cav)
		cavs = cavs[:9]
		self.scl_cav_wrappers = []
		for cav in cavs:
			pos = self.scl_accSeq.getPosition(cav) + self.accSeq.getLength()
			alias = cav.getId().split(":")[1]	
			amp_pv_name = "SCL_LLRF:"+alias.replace("Cav","FCM")+":CtlAmpSet"
			phase_pv_name = "SCL_LLRF:"+alias.replace("Cav","FCM")+":CtlPhaseSet"
			cav_pwr_pv_name = "SCL_LLRF:"+alias+":NetPwr"	
			self.scl_cav_wrappers.append(Cavity_Wrapper(cav,pos,alias,amp_pv_name,phase_pv_name,cav_pwr_pv_name))
			#print "debug =================================="
			#print "debug cav=",cav.getId(),"  alias=",alias,"  amp_pv_name=",amp_pv_name," phase_pv_name=",phase_pv_name
			#print "debug         cav_pwr_pv_name=",cav_pwr_pv_name			
		#---- Panels setup
		#---- Auxiliaries setup
		self.loop_run_state = Loop_Run_State()
		self.loop_run_state.isRunning = false
		self.loop_run_state.shouldStop = false
		#---------------------------------------------
		#----etched border
		etched_border = BorderFactory.createEtchedBorder()
		#---- Cavities' Controllers 
		self.cav_controllers = []
		self.cav_controllers.append(MEBT_Cavity_Controller(self,self.cav_wrappers[0]))
		self.cav_controllers.append(MEBT_Cavity_Controller(self,self.cav_wrappers[1]))
		self.cav_controllers.append(MEBT_Cavity_Controller(self,self.cav_wrappers[2]))
		self.cav_controllers.append(MEBT_Cavity_Controller(self,self.cav_wrappers[3]))
		#---------------------------------
		self.cav_controllers.append(DTL1_Cavity_Controller(self,self.cav_wrappers[4]))
		self.cav_controllers.append(DTL_CCL_Cavity_Controller(self,self.cav_wrappers[5]))
		self.cav_controllers.append(DTL_CCL_Cavity_Controller(self,self.cav_wrappers[6]))
		self.cav_controllers.append(DTL_CCL_Cavity_Controller(self,self.cav_wrappers[7]))
		self.cav_controllers.append(DTL_CCL_Cavity_Controller(self,self.cav_wrappers[8]))
		self.cav_controllers.append(DTL_CCL_Cavity_Controller(self,self.cav_wrappers[9]))
		#----------------------------------
		self.cav_controllers.append(DTL_CCL_Cavity_Controller(self,self.cav_wrappers[10]))
		self.cav_controllers.append(DTL_CCL_Cavity_Controller(self,self.cav_wrappers[11]))
		self.cav_controllers.append(DTL_CCL_Cavity_Controller(self,self.cav_wrappers[12]))
		self.cav_controllers.append(DTL_CCL_Cavity_Controller(self,self.cav_wrappers[13]))	
		#------ cavity controllers customization --------------------
		#------ MEBT Reb. 4 -------
		self.cav_controllers[3].cav_amp_backward_steps_mult_text.setValue(8.0)
		#----- amplitudes limits
		self.cav_controllers[0].safe_relative_amp_down_text.setValue(50.)
		self.cav_controllers[1].safe_relative_amp_down_text.setValue(50.)
		self.cav_controllers[2].safe_relative_amp_down_text.setValue(50.)
		self.cav_controllers[3].safe_relative_amp_down_text.setValue(50.)
		#----- No PASTA Use for DTL2-6 and CCL4
		self.cav_controllers[5].scan_main_panel.use_PASTA_RadioButton.setSelected(false)
		self.cav_controllers[6].scan_main_panel.use_PASTA_RadioButton.setSelected(false)
		self.cav_controllers[7].scan_main_panel.use_PASTA_RadioButton.setSelected(false)
		self.cav_controllers[8].scan_main_panel.use_PASTA_RadioButton.setSelected(false)
		self.cav_controllers[9].scan_main_panel.use_PASTA_RadioButton.setSelected(false)
		self.cav_controllers[13].scan_main_panel.use_PASTA_RadioButton.setSelected(false)
		#------ Phase corrections after Full scan for MEBT
		self.cav_controllers[0].guess_phase_shift_text.setValue(-10.0)
		self.cav_controllers[1].guess_phase_shift_text.setValue(-6.0)
		#------ Phase and amplitude corrections after Full scan for inner BPM
		self.cav_controllers[5].guess_phase_shift_text.setValue(-4.0)
		self.cav_controllers[5].guess_cav_amp_shift_text.setValue(-2.0)
		self.cav_controllers[6].guess_phase_shift_text.setValue(1.)
		self.cav_controllers[6].guess_cav_amp_shift_text.setValue(0.7)
		self.cav_controllers[8].guess_phase_shift_text.setValue(0.)
		self.cav_controllers[8].guess_cav_amp_shift_text.setValue(-0.7)
		self.cav_controllers[10].guess_phase_shift_text.setValue(0.)
		self.cav_controllers[10].guess_cav_amp_shift_text.setValue(-3.6)
		self.cav_controllers[11].guess_phase_shift_text.setValue(0.)
		self.cav_controllers[11].guess_cav_amp_shift_text.setValue(-3.7)		
		#------ The BPMs for Full Scan and PASTA
		self.cav_controllers[0].cav_bpms_controller.work_bpm_index = 1 
		self.cav_controllers[1].cav_bpms_controller.work_bpm_index = 1 		
		self.cav_controllers[5].cav_bpms_controller.pasta_bpm_0_index = 2
		self.cav_controllers[5].cav_bpms_controller.pasta_bpm_1_index = 5
		self.cav_controllers[6].cav_bpms_controller.pasta_bpm_0_index = 2
		self.cav_controllers[6].cav_bpms_controller.pasta_bpm_1_index = 4
		self.cav_controllers[7].cav_bpms_controller.pasta_bpm_0_index = 2
		self.cav_controllers[7].cav_bpms_controller.pasta_bpm_1_index = 5
		self.cav_controllers[8].cav_bpms_controller.pasta_bpm_0_index = 5
		self.cav_controllers[8].cav_bpms_controller.pasta_bpm_1_index = 6
		self.cav_controllers[9].cav_bpms_controller.pasta_bpm_0_index = 3
		self.cav_controllers[9].cav_bpms_controller.pasta_bpm_1_index = 5
		self.cav_controllers[10].cav_bpms_controller.pasta_bpm_0_index = 5
		self.cav_controllers[10].cav_bpms_controller.pasta_bpm_1_index = 6
		self.cav_controllers[11].cav_bpms_controller.pasta_bpm_0_index = 2
		self.cav_controllers[11].cav_bpms_controller.pasta_bpm_1_index = 3
		self.cav_controllers[12].cav_bpms_controller.pasta_bpm_0_index = 2
		self.cav_controllers[12].cav_bpms_controller.pasta_bpm_1_index = 4
		self.cav_controllers[13].cav_bpms_controller.pasta_bpm_0_index = 3
		self.cav_controllers[13].cav_bpms_controller.pasta_bpm_1_index = 4
		self.cav_controllers[11].cav_bpms_controller.sin_wave_bpm_index = 0
		self.cav_controllers[12].cav_bpms_controller.sin_wave_bpm_index = 0
		self.cav_controllers[13].cav_bpms_controller.sin_wave_bpm_index = 1
		#-----Target power levels
		self.cav_controllers[4].cav_wrapper.net_pwr_goal =  378.0
		self.cav_controllers[5].cav_wrapper.net_pwr_goal = 1208.0
		self.cav_controllers[6].cav_wrapper.net_pwr_goal = 1294.0
		self.cav_controllers[7].cav_wrapper.net_pwr_goal = 1416.0
		self.cav_controllers[8].cav_wrapper.net_pwr_goal = 1454.0
		self.cav_controllers[9].cav_wrapper.net_pwr_goal = 1414.0
		self.cav_controllers[10].cav_wrapper.net_pwr_goal = 2531.0
		self.cav_controllers[11].cav_wrapper.net_pwr_goal = 2984.0
		self.cav_controllers[12].cav_wrapper.net_pwr_goal = 3018.0
		self.cav_controllers[13].cav_wrapper.net_pwr_goal = 2856.0
		#----------------------------------------------   
		left_panel = JPanel(BorderLayout())
		self.tabbedPane = JTabbedPane()		
		self.tabbedPane.add("Cavity",JPanel(BorderLayout()))	
		self.tabbedPane.add("Parameters",JPanel(BorderLayout()))
		#--------------------------------------------------------
		self.cav_table = JTable(Cavities_Table_Model(self))
		self.cav_table.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION)
		self.cav_table.setFillsViewportHeight(true)
		self.cav_table.setPreferredScrollableViewportSize(Dimension(500,240))
		self.cav_table.getSelectionModel().addListSelectionListener(Cavs_Table_Selection_Listener(self))
		scrl_cav_panel = JScrollPane(self.cav_table)
		scrl_cav_panel.setBorder(BorderFactory.createTitledBorder(etched_border,"Cavities' Parameters"))
		init_buttons_panel = Init_Cav_Controllers_Panel(self)
		start_stop_panel = Start_Stop_Panel(self)
		#---- fake scan button
		self.keepAllCavParams_RadioButton = start_stop_panel.keepAllCavParams_RadioButton
		self.keepAmps_RadioButton = start_stop_panel.keepAmps_RadioButton
		#---- status text field
		self.status_text = start_stop_panel.status_text
		tmp0_panel = JPanel(BorderLayout())
		tmp0_panel.add(init_buttons_panel,BorderLayout.NORTH)
		tmp0_panel.add(scrl_cav_panel,BorderLayout.CENTER)
		tmp0_panel.add(start_stop_panel,BorderLayout.SOUTH)
		tmp1_panel = JPanel(BorderLayout())
		tmp1_panel.add(tmp0_panel,BorderLayout.NORTH)
		left_panel.add(tmp1_panel,BorderLayout.WEST)
		#--------------------------------------------------------
		self.main_panel.add(left_panel,BorderLayout.WEST)
		self.main_panel.add(self.tabbedPane,BorderLayout.CENTER)
		#---- non GUI controllers
		self.particle_tracker_model = Particle_Tracker_Model(self)
		self.env_tracker_model = Envelop_Tracker_Model(self)
		
	def getMainPanel(self):
		return self.main_panel
		
	def getMessageTextField(self):
		return self.top_document.getMessageTextField()
		
	def writeDataToXML(self,root_da):
		main_loop_cntrl_da = root_da.createChild("MAIN_CONTROLLER")
		main_loop_cntrl_da.setValue("keep_cav_params",self.keepAllCavParams_RadioButton.isSelected())
		main_loop_cntrl_da.setValue("keep_cav_amp",self.keepAmps_RadioButton.isSelected())
		#---------------------------------------------------------------------------------
		bpm_wrappers_da = main_loop_cntrl_da.createChild("BPM_WRAPPERS")
		for bpm_wrapper in self.bpm_wrappers:
			bpm_wrapper.writeDataToXML(bpm_wrappers_da)
		for bpm_wrapper in self.scl_bpm_wrappers:
			bpm_wrapper.writeDataToXML(bpm_wrappers_da)		
		#---------------------------------------------------------------------------------
		for cav_controller in self.cav_controllers:
			cav_controller.writeDataToXML(main_loop_cntrl_da)

	def readDataFromXML(self,root_da):		
		main_loop_cntrl_da = root_da.childAdaptor("MAIN_CONTROLLER")
		if(main_loop_cntrl_da.intValue("keep_cav_params") == 1):
			self.keepAllCavParams_RadioButton.setSelected(true)
		else:
			self.keepAllCavParams_RadioButton.setSelected(false)
		if(main_loop_cntrl_da.intValue("keep_cav_amp") == 1):
				self.keepAmps_RadioButton.setSelected(true)
		else:
				self.keepAmps_RadioButton.setSelected(false)
		#-----------------------------------------------------
		bpm_wrappers_da = main_loop_cntrl_da.childAdaptor("BPM_WRAPPERS")
		if(bpm_wrappers_da != null):
			for bpm_wrapper in self.bpm_wrappers:
				bpm_wrapper.readDataFromXML(bpm_wrappers_da)
			for bpm_wrapper in self.scl_bpm_wrappers:
				bpm_wrapper.readDataFromXML(bpm_wrappers_da)			
		#-----------------------------------------------------
		for cav_controller in self.cav_controllers:
			cav_cntrl_data_da = main_loop_cntrl_da.childAdaptor("CAVITY_CONTROLLER_"+cav_controller.cav_wrapper.alias)
			cav_controller.readDataFromXML(cav_cntrl_data_da)
			
	def connectAllPVs(self):
		for cav_wrapper in self.cav_wrappers:
			try:
				cav_wrapper.connectPVs()
			except:
				self.getMessageTextField().setText("Cannot connect PVs for cavity="+cav_wrapper.alias)
				return false
		return true
		
	def initAllCavControllers(self, ind_start = -1, ind_stop = -1):
		res = self.connectAllPVs()
		if(not res):
			return false
		if(ind_start < 0):
			ind_start = 0
			ind_stop = len(self.cav_controllers) - 1
		for cav_controller in self.cav_controllers[ind_start:ind_stop+1]:
			try:
				cav_controller.init()
			except:
				self.getMessageTextField().setText("Cannot read cavities' PVs! Cavity="+cav_controller.cav_wrapper.alias)
				return	false
		return true
		
	def setBPM_Off(self,bpm_wrapper):
		""" 
		Set BPM as bad and unused in measurements. 
		Returns true if it is successful, false otherwise.
		"""
		self.getMessageTextField().setText("")
		txt = ""
		for cav_controller in self.cav_controllers:
			if(cav_controller.checkBPM_Usage(bpm_wrapper)):
				txt += " "+cav_controller.cav_wrapper.alias
		if(txt != ""):
			self.getMessageTextField().setText("Cannot remove "+bpm_wrapper.alias+" It is used in cavs: "+txt)
			return false
		return true
Beispiel #27
0
class SessionRequestTab(IMessageEditorTab):
    """UI of the extension."""

    def refresh_sessions(self):
        self._session_selector.setModel(DefaultComboBoxModel(self._extender.sm.sessions))
        self._session_selector.setSelectedItem(self._extender.sm.selected_session)

    def deleteSession(self, evt):
        """Listener for the Delete Session button."""

        if JOptionPane.showConfirmDialog(None, "Are you sure?", "", JOptionPane.YES_NO_OPTION) == JOptionPane.OK_OPTION:
            self._extender.sm.remove_session()
            self.refresh_sessions()
            self.update_table()
            self.parse_message()

    @attach_stack_trace
    def new_session(self, evt):
        """Listener for New Session button."""

        name = JOptionPane.showInputDialog(None, "Name the new session:", "Session name")
        if name != None:
            from_request = JOptionPane.showConfirmDialog(None, "Create session from current request?", "From current request?", JOptionPane.YES_NO_OPTION)
            self._extender.sm.new_session(name)
            self.refresh_sessions()

            # let user select parameters for new session
            if from_request == JOptionPane.OK_OPTION:
                dialog = SessionFromRequestDialog(self)
                dialog.setVisible(True)

    def changeSession(self, evt):
        """Listener for session combobox"""

        if evt.getStateChange() == 1:
            session = evt.getItem()
            self._extender.sm.selected_session = session
            self.update_table()
            self.parse_message()

    @attach_stack_trace
    def update_table(self):
        """Updates the table with new data"""

        columns = ["Type", "Action", "Name", "Value"]
        data = []
        for param in self._extender.sm.selected_session.params:
            data.append(param.as_table_row())

        data.append([Parameter.type_mapping[Parameter.PARAM_COOKIE], Parameter.ACTION_MODIFY, "", ""])
        data_model = DefaultTableModel(data, columns, tableChanged=self.tableChanged)
        self.modification_table.setModel(data_model)

        # type combobox
        type_combo = JComboBox(self._types)
        type_column = self.modification_table.getColumnModel().getColumn(0)
        type_column.setCellEditor(DefaultCellEditor(type_combo))
        type_column.setMaxWidth(75)

        # action combobox
        action_combo = JComboBox(self._actions)
        action_column = self.modification_table.getColumnModel().getColumn(1)
        action_column.setCellEditor(DefaultCellEditor(action_combo))
        action_column.setMaxWidth(75)
        action_combo.setSelectedItem("replace")

    @attach_stack_trace
    def tableChanged(self, evt):
        """Handles changes to table cells, i.e. Parameter changes."""
        if evt.getType() == 0:      # UPDATING a cell
            table_model = evt.getSource()
            row = evt.getFirstRow()
            col = evt.getColumn()

            # Removing a row was selected
            if col == 0 and "Remove Row" in table_model.getValueAt(row, col) and table_model.getRowCount() > 1:
                table_model.removeRow(row)

            # update the model
            session = self._extender.sm.selected_session
            session.reset()
            for r in range(table_model.getRowCount() - 1):
                type = str(table_model.getValueAt(r, 0))
                action = str(table_model.getValueAt(r, 1))
                name = table_model.getValueAt(r, 2)
                value = table_model.getValueAt(r, 3)

                if type != None and name != None and value != None:
                    param = Parameter(type, action, name, self._extender.helpers.urlDecode(value))
                    session.modify(param)


            # Check if there is an empty last row 
            has_empty_row = True
            for i in range(2, 4):
                val = table_model.getValueAt(table_model.getRowCount() - 1, i)
                if val != None and val != "":
                    has_empty_row = False
                    break

            # no empty last row, add one
            if not has_empty_row:
                table_model.addRow(["", Parameter.ACTION_MODIFY, "", ""])

            # update message editor
            self.parse_message()

    def parse_message(self):
        self._editor.setText(self._extender.process_request(self._extender.HTTP))

    def getTabCaption(self):
        return "Session"

    def getUiComponent(self):
        return self._panel

    def isEnabled(self, content, isRequest):
        return isRequest 

    def setMessage(self, content, isRequest):
        self._extender.HTTP = self._extender.helpers.bytesToString(content)
        self._editor.setText(content)
        self.refresh_sessions()
        self.update_table()


    def getMessage(self):
        return self._editor.getText()

    def isModified(self):
        return self._editor.isTextModified()

    def getSelectedData(self):
        return self._editor.getSelectedText()

    @attach_stack_trace
    def __init__(self, extender, controller, editable):
        self._extender = extender

        self._panel = JPanel()  # main panel

        # type combobox for tables
        self._types = Parameter.type_mapping.values() + ["- Remove Row -"]
        self._actions = ["replace", "insert", "delete"]

        # define the GridBagLayout ( 4x4 )
        gridBagLayout = GridBagLayout()
        gridBagLayout.columnWidths = [ 0, 0, 0, 0]
        gridBagLayout.rowHeights = [0, 0, 0, 0]
        gridBagLayout.columnWeights = [1.0, 0.0, 0.0, 0.0]
        gridBagLayout.rowWeights = [0.0, 1.0, 5.0, 0.0]
        self._panel.setLayout(gridBagLayout)

        # JComboBox for Session selection
        self._session_selector = JComboBox(extender.sm.sessions, itemStateChanged=self.changeSession)
        self._session_selector_model = self._session_selector.getModel()
        gbc_session_selector = _new_grid_bag(0, 0)
        self._panel.add(self._session_selector, gbc_session_selector)


        # "Delete Session" Button
        del_session = JButton("Delete Session", actionPerformed=self.deleteSession)
        gbc_del_session = _new_grid_bag(1, 0)
        self._panel.add(del_session, gbc_del_session)

        # "New Session" Button
        new_session = JButton("New Session", actionPerformed=self.new_session)
        gbc_new_session = _new_grid_bag(2, 0)
        self._panel.add(new_session, gbc_new_session)

        # Table containing modified parameters
        self.modification_table = JTable()
        self.update_table()

        gbc_modification_table = _new_grid_bag(0, 1, 3)
        self._panel.add(JScrollPane(self.modification_table), gbc_modification_table)
        self.modification_table.setPreferredScrollableViewportSize(self.modification_table.getPreferredSize());
        self.modification_table.setFillsViewportHeight(True)

        # HTTP message editor
        self._editor = self._extender.callbacks.createTextEditor()
        gbc_messageEditor = _new_grid_bag(0, 2, 3)
        self._panel.add(self._editor.getComponent(), gbc_messageEditor)
Beispiel #28
0
class QatDialog(ToggleDialog):
    """ToggleDialog for error type selection and buttons for reviewing
       errors in sequence
    """
    def __init__(self, name, iconName, tooltip, shortcut, height, app):
        ToggleDialog.__init__(self, name, iconName, tooltip, shortcut, height)
        self.app = app
        tools = app.tools

        #Main panel of the dialog
        mainPnl = JPanel(BorderLayout())
        mainPnl.setBorder(BorderFactory.createEmptyBorder(0, 1, 1, 1))

        ### First tab: errors selection and download ###########################
        #ComboBox with tools names
        self.toolsComboModel = DefaultComboBoxModel()
        for tool in tools:
            self.add_data_to_models(tool)
        self.toolsCombo = JComboBox(self.toolsComboModel,
                                    actionListener=ToolsComboListener(app))
        renderer = ToolsComboRenderer(self.app)
        renderer.setPreferredSize(Dimension(20, 20))
        self.toolsCombo.setRenderer(renderer)
        self.toolsCombo.setToolTipText(
            app.strings.getString("Select_a_quality_assurance_tool"))

        #ComboBox with categories names ("views"), of the selected tool
        self.viewsCombo = JComboBox(actionListener=ViewsComboListener(app))
        self.viewsCombo.setToolTipText(
            app.strings.getString("Select_a_category_of_error"))

        #Popup for checks table
        self.checkPopup = JPopupMenu()
        #add favourite check
        self.menuItemAdd = JMenuItem(
            self.app.strings.getString("Add_to_favourites"))
        self.menuItemAdd.setIcon(
            ImageIcon(
                File.separator.join([
                    self.app.SCRIPTDIR, "tools", "data", "Favourites", "icons",
                    "tool_16.png"
                ])))
        self.menuItemAdd.addActionListener(PopupActionListener(self.app))
        self.checkPopup.add(self.menuItemAdd)
        #remove favourite check
        self.menuItemRemove = JMenuItem(
            self.app.strings.getString("Remove_from_favourites"))
        self.menuItemRemove.setIcon(
            ImageIcon(
                File.separator.join([
                    self.app.SCRIPTDIR, "tools", "data", "Favourites", "icons",
                    "black_tool_16.png"
                ])))
        self.menuItemRemove.addActionListener(PopupActionListener(self.app))
        self.checkPopup.add(self.menuItemRemove)
        #Help link for selected check
        self.menuItemHelp = JMenuItem(self.app.strings.getString("check_help"))
        self.menuItemHelp.setIcon(
            ImageIcon(
                File.separator.join(
                    [self.app.SCRIPTDIR, "images", "icons", "info_16.png"])))
        self.checkPopup.add(self.menuItemHelp)
        self.menuItemHelp.addActionListener(PopupActionListener(self.app))

        #Table with checks of selected tool and view
        self.checksTable = JTable()
        self.iconrenderer = IconRenderer()
        self.iconrenderer.setHorizontalAlignment(JLabel.CENTER)
        scrollPane = JScrollPane(self.checksTable)
        self.checksTable.setFillsViewportHeight(True)

        tableSelectionModel = self.checksTable.getSelectionModel()
        tableSelectionModel.addListSelectionListener(ChecksTableListener(app))

        self.checksTable.addMouseListener(
            ChecksTableClickListener(app, self.checkPopup, self.checksTable))

        #Favourite area status indicator
        self.favAreaIndicator = JLabel()
        self.update_favourite_zone_indicator()
        self.favAreaIndicator.addMouseListener(FavAreaIndicatorListener(app))

        #label with OSM id of the object currently edited and number of
        #errors still to review
        self.checksTextFld = JTextField("",
                                        editable=0,
                                        border=None,
                                        background=None)

        #checks buttons
        btnsIconsDir = File.separator.join([app.SCRIPTDIR, "images", "icons"])
        downloadIcon = ImageIcon(
            File.separator.join([btnsIconsDir, "download.png"]))
        self.downloadBtn = JButton(downloadIcon,
                                   actionPerformed=app.on_downloadBtn_clicked,
                                   enabled=0)
        startIcon = ImageIcon(
            File.separator.join([btnsIconsDir, "start_fixing.png"]))
        self.startBtn = JButton(startIcon,
                                actionPerformed=app.on_startBtn_clicked,
                                enabled=0)
        self.downloadBtn.setToolTipText(
            app.strings.getString("Download_errors_in_this_area"))
        self.startBtn.setToolTipText(
            app.strings.getString("Start_fixing_the_selected_errors"))

        #tab layout
        panel1 = JPanel(BorderLayout(0, 1))

        comboboxesPnl = JPanel(GridLayout(0, 2, 5, 0))
        comboboxesPnl.add(self.toolsCombo)
        comboboxesPnl.add(self.viewsCombo)

        checksPnl = JPanel(BorderLayout(0, 1))
        checksPnl.add(scrollPane, BorderLayout.CENTER)
        self.statsPanel = JPanel(BorderLayout(4, 0))
        self.statsPanel_def_color = self.statsPanel.getBackground()
        self.statsPanel.add(self.checksTextFld, BorderLayout.CENTER)
        self.statsPanel.add(self.favAreaIndicator, BorderLayout.LINE_START)
        checksPnl.add(self.statsPanel, BorderLayout.PAGE_END)

        checksButtonsPnl = JPanel(GridLayout(0, 2, 0, 0))
        checksButtonsPnl.add(self.downloadBtn)
        checksButtonsPnl.add(self.startBtn)

        panel1.add(comboboxesPnl, BorderLayout.PAGE_START)
        panel1.add(checksPnl, BorderLayout.CENTER)
        panel1.add(checksButtonsPnl, BorderLayout.PAGE_END)

        ### Second tab: errors fixing ##########################################
        #label with error stats
        self.errorTextFld = JTextField("",
                                       editable=0,
                                       border=None,
                                       background=None)
        #label with current error description
        self.errorDesc = JLabel("")
        self.errorDesc.setAlignmentX(0.5)

        #error buttons
        errorInfoBtnIcon = ImageProvider.get("info")
        self.errorInfoBtn = JButton(
            errorInfoBtnIcon,
            actionPerformed=app.on_errorInfoBtn_clicked,
            enabled=0)
        notErrorIcon = ImageIcon(
            File.separator.join([btnsIconsDir, "not_error.png"]))
        self.notErrorBtn = JButton(
            notErrorIcon,
            actionPerformed=app.on_falsePositiveBtn_clicked,
            enabled=0)
        ignoreIcon = ImageIcon(File.separator.join([btnsIconsDir, "skip.png"]))
        self.ignoreBtn = JButton(ignoreIcon,
                                 actionPerformed=app.on_ignoreBtn_clicked,
                                 enabled=0)
        correctedIcon = ImageIcon(
            File.separator.join([btnsIconsDir, "corrected.png"]))
        self.correctedBtn = JButton(
            correctedIcon,
            actionPerformed=app.on_correctedBtn_clicked,
            enabled=0)
        nextIcon = ImageIcon(File.separator.join([btnsIconsDir, "next.png"]))
        self.nextBtn = JButton(nextIcon,
                               actionPerformed=app.on_nextBtn_clicked,
                               enabled=0)
        #self.nextBtn.setMnemonic(KeyEvent.VK_RIGHT)
        self.errorInfoBtn.setToolTipText(
            app.strings.getString("open_error_info_dialog"))
        self.notErrorBtn.setToolTipText(
            app.strings.getString("flag_false_positive"))
        self.ignoreBtn.setToolTipText(
            app.strings.getString("Skip_and_don't_show_me_this_error_again"))
        self.correctedBtn.setToolTipText(
            app.strings.getString("flag_corrected_error"))
        self.nextBtn.setToolTipText(app.strings.getString("Go_to_next_error"))

        #tab layout
        self.panel2 = JPanel(BorderLayout())

        self.panel2.add(self.errorTextFld, BorderLayout.PAGE_START)
        self.panel2.add(self.errorDesc, BorderLayout.CENTER)

        errorButtonsPanel = JPanel(GridLayout(0, 5, 0, 0))
        errorButtonsPanel.add(self.errorInfoBtn)
        errorButtonsPanel.add(self.notErrorBtn)
        errorButtonsPanel.add(self.ignoreBtn)
        errorButtonsPanel.add(self.correctedBtn)
        errorButtonsPanel.add(self.nextBtn)
        self.panel2.add(errorButtonsPanel, BorderLayout.PAGE_END)

        #Layout
        self.tabbedPane = JTabbedPane()
        self.tabbedPane.addTab(self.app.strings.getString("Download"), None,
                               panel1,
                               self.app.strings.getString("download_tab"))
        mainPnl.add(self.tabbedPane, BorderLayout.CENTER)
        self.createLayout(mainPnl, False, None)

    def add_data_to_models(self, tool):
        """Add data of a tool to the models of the dialog components
        """
        #tools combobox model
        if tool == self.app.favouritesTool:
            self.toolsComboModel.addElement(JSeparator())
        self.toolsComboModel.addElement(tool)

        #views combobox model
        tool.viewsComboModel = DefaultComboBoxModel()
        for view in tool.views:
            tool.viewsComboModel.addElement(view.title)

        #checks table, one TableModel for each view, of each tool
        columns = [
            "",
            self.app.strings.getString("Check"),
            self.app.strings.getString("Errors")
        ]
        for view in tool.views:
            tableRows = []
            for check in view.checks:
                if check.icon is not None:
                    icon = check.icon
                else:
                    icon = ""
                errorsNumber = ""
                tableRows.append([icon, check.title, errorsNumber])
            view.tableModel = MyTableModel(tableRows, columns)

    def update_favourite_zone_indicator(self):
        #icon
        if self.app.favZone is not None:
            self.favAreaIndicator.setIcon(self.app.favZone.icon)
            #tooltip
            messageArguments = array([self.app.favZone.name], String)
            formatter = MessageFormat("")
            formatter.applyPattern(
                self.app.strings.getString("favAreaIndicator_tooltip"))
            msg = formatter.format(messageArguments)
            self.favAreaIndicator.setToolTipText(msg)
            #status
            self.favAreaIndicator.setVisible(self.app.favouriteZoneStatus)

    def set_checksTextFld_color(self, color):
        """Change color of textField under checksTable
        """
        colors = {
            "white": (255, 255, 255),
            "black": (0, 0, 0),
            "green": (100, 200, 0),
            "red": (200, 0, 0)
        }
        if color == "default":
            self.statsPanel.background = self.statsPanel_def_color
            self.checksTextFld.foreground = colors["black"]
        else:
            self.statsPanel.background = colors[color]
            self.checksTextFld.foreground = colors["white"]

    def change_selection(self, source):
        """Change comboboxes and checks table selections after a
           selection has been made by the user
        """
        if source in ("menu", "layer", "add favourite"):
            self.app.selectionChangedFromMenuOrLayer = True
            self.toolsCombo.setSelectedItem(self.app.selectedTool)
            self.viewsCombo.setModel(self.app.selectedTool.viewsComboModel)
            self.viewsCombo.setSelectedItem(self.app.selectedView.title)

            self.checksTable.setModel(self.app.selectedTableModel)
            self.refresh_checksTable_columns_geometries()
            for i, c in enumerate(self.app.selectedView.checks):
                if c == self.app.selectedChecks[0]:
                    break
            self.checksTable.setRowSelectionInterval(i, i)
            self.app.selectionChangedFromMenuOrLayer = False
        else:
            self.app.selectionChangedFromMenuOrLayer = False
            if source == "toolsCombo":
                self.viewsCombo.setModel(self.app.selectedTool.viewsComboModel)
                self.viewsCombo.setSelectedIndex(0)
            elif source == "viewsCombo":
                self.checksTable.setModel(self.app.selectedTableModel)
                self.refresh_checksTable_columns_geometries()
                if self.app.selectedView.checks != []:  # favourite checks may be none
                    self.checksTable.setRowSelectionInterval(0, 0)

    def refresh_checksTable_columns_geometries(self):
        self.checksTable.getColumnModel().getColumn(0).setCellRenderer(
            self.iconrenderer)
        self.checksTable.getColumnModel().getColumn(0).setMaxWidth(25)
        self.checksTable.getColumnModel().getColumn(2).setMaxWidth(60)

    def activate_error_tab(self, status):
        if status:
            if self.tabbedPane.getTabCount() == 1:
                self.tabbedPane.addTab(self.app.strings.getString("Fix"), None,
                                       self.panel2,
                                       self.app.strings.getString("fix_tab"))
        else:
            if self.tabbedPane.getTabCount() == 2:
                self.tabbedPane.remove(1)

    def update_checks_buttons(self):
        """This method sets the status of downloadBtn and startBtn
        """
        #none check selected
        if len(self.app.selectedChecks) == 0:
            self.downloadBtn.setEnabled(False)
            self.startBtn.setEnabled(False)
        else:
            #some check selected
            self.downloadBtn.setEnabled(True)
            if len(self.app.selectedChecks) > 1:
                self.startBtn.setEnabled(False)
            else:
                #only one check is selected
                self.app.errors = self.app.selectedChecks[0].errors
                if self.app.errors is None or len(self.app.errors) == 0:
                    #errors file has not been downloaded and parsed yet
                    self.startBtn.setEnabled(False)
                else:
                    #errors file has been downloaded and parsed
                    if self.app.selectedChecks[0].toDo == 0:
                        #all errors have been corrected
                        self.startBtn.setEnabled(False)
                    else:
                        self.startBtn.setEnabled(True)
                        #self.nextBtn.setEnabled(True)

    def update_error_buttons(self, mode):
        """This method sets the status of:
           ignoreBtn, falsePositiveBtn, correctedBtn, nextBtn
        """
        if mode == "new error":
            status = True
        else:
            status = False
        if self.app.selectedChecks[0].tool.fixedFeedbackMode is None:
            self.correctedBtn.setEnabled(False)
        else:
            self.correctedBtn.setEnabled(status)
        if self.app.selectedChecks[0].tool.falseFeedbackMode is None:
            self.notErrorBtn.setEnabled(False)
        else:
            self.notErrorBtn.setEnabled(status)
        self.errorInfoBtn.setEnabled(status)
        self.ignoreBtn.setEnabled(status)

        if mode in ("reset", "review end"):
            self.nextBtn.setEnabled(False)
        elif mode in ("errors downloaded", "show stats", "new error"):
            self.nextBtn.setEnabled(True)

    def update_text_fields(self, mode, errorInfo=""):
        """This method updates the text in:
           checksTextFld, errorDesc, errorTextFld
        """
        self.errorDesc.text = ""
        if mode == "review end":
            cheksTextColor = "green"
            checksText = self.app.strings.getString("All_errors_reviewed.")
            errorText = self.app.strings.getString("All_errors_reviewed.")
        elif mode == "reset":
            cheksTextColor = "default"
            checksText = ""
            errorText = ""
        elif mode == "show stats":
            cheksTextColor = "default"
            checksText = "%s %d / %s" % (
                self.app.strings.getString("to_do"),
                self.app.selectedChecks[0].toDo,
                len(self.app.selectedChecks[0].errors))
            #print "checks text", checksText
            errorText = "%s%s %d / %s" % (
                errorInfo, self.app.strings.getString("to_do"),
                self.app.selectedChecks[0].toDo,
                len(self.app.selectedChecks[0].errors))
            #print "error text", errorText
            if self.app.selectedError is not None and self.app.selectedError.desc != "":
                self.errorDesc.text = "<html>%s</html>" % self.app.selectedError.desc

        self.set_checksTextFld_color(cheksTextColor)
        self.checksTextFld.text = checksText
        self.errorTextFld.text = errorText
        self.update_statsPanel_status()

    def update_statsPanel_status(self):
        if self.checksTextFld.text == "" and not self.app.favouriteZoneStatus:
            self.statsPanel.setVisible(False)
        else:
            self.statsPanel.setVisible(True)
Beispiel #29
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)
class BurpExtender(IBurpExtender, ISessionHandlingAction, ITab,
                   IContextMenuFactory, IContextMenuInvocation, ActionListener,
                   ITextEditor):

    #
    # implement IBurpExtender
    #

    def registerExtenderCallbacks(self, callbacks):
        # save the helpers for later
        self.helpers = callbacks.getHelpers()

        # set our extension name
        callbacks.setExtensionName("Custom Request Handler")
        callbacks.registerSessionHandlingAction(self)
        callbacks.registerContextMenuFactory(self)
        self._text_editor = callbacks.createTextEditor()
        self._text_editor.setEditable(False)

        #How much loaded the table row
        self.current_column_id = 0

        #GUI
        self._split_main = JSplitPane(JSplitPane.VERTICAL_SPLIT)
        self._split_top = JSplitPane(JSplitPane.HORIZONTAL_SPLIT)
        self._split_top.setPreferredSize(Dimension(100, 50))
        self._split_top.setDividerLocation(700)
        self._split_center = JSplitPane(JSplitPane.VERTICAL_SPLIT)

        boxVertical = swing.Box.createVerticalBox()
        box_top = swing.Box.createHorizontalBox()
        boxHorizontal = swing.Box.createHorizontalBox()
        buttonHorizontal = swing.Box.createHorizontalBox()
        boxVertical.add(boxHorizontal)

        box_regex = swing.Box.createVerticalBox()
        border = BorderFactory.createTitledBorder(LineBorder(Color.BLACK),
                                                  "Extract target strings",
                                                  TitledBorder.LEFT,
                                                  TitledBorder.TOP)
        box_regex.setBorder(border)

        self._add_btn = JButton("Add")
        self._add_btn.addActionListener(self)
        self._remove_btn = JButton("Remove")
        self._remove_btn.addActionListener(self)

        items = [
            'JSON',
            'Header',
        ]
        self._dropdown = JComboBox(items)
        type_panel = JPanel(FlowLayout(FlowLayout.LEADING))
        type_panel.add(JLabel('Type:'))
        type_panel.add(self._dropdown)

        self._jLabel_param = JLabel("Name:")
        self._param_error = JLabel("Name is required")

        self._param_error.setVisible(False)
        self._param_error.setFont(Font(Font.MONOSPACED, Font.ITALIC, 12))
        self._param_error.setForeground(Color.red)

        regex_checkbox = JPanel(FlowLayout(FlowLayout.LEADING))
        self._is_use_regex = JCheckBox("Extract from regex group")
        regex_checkbox.add(self._is_use_regex)
        self._jTextIn_param = JTextField(20)
        self._jLabel_regex = JLabel("Regex:")
        self._jTextIn_regex = JTextField(20)
        self._regex_error = JLabel("No group defined")
        self._regex_error.setVisible(False)
        self._regex_error.setFont(Font(Font.MONOSPACED, Font.ITALIC, 12))
        self._regex_error.setForeground(Color.red)

        self._param_panel = JPanel(FlowLayout(FlowLayout.LEADING))
        self._param_panel.add(self._jLabel_param)
        self._param_panel.add(self._jTextIn_param)
        self._param_panel.add(self._param_error)

        self._regex_panel = JPanel(FlowLayout(FlowLayout.LEADING))
        self._regex_panel.add(self._jLabel_regex)
        self._regex_panel.add(self._jTextIn_regex)
        self._regex_panel.add(self._regex_error)
        button_panel = JPanel(FlowLayout(FlowLayout.LEADING))
        #padding
        button_panel.add(JPanel())
        button_panel.add(JPanel())
        button_panel.add(JPanel())
        button_panel.add(self._add_btn)
        button_panel.add(self._remove_btn)
        box_regex.add(type_panel)
        box_regex.add(self._param_panel)
        box_regex.add(regex_checkbox)
        box_regex.add(self._regex_panel)
        buttonHorizontal.add(button_panel)
        box_regex.add(buttonHorizontal)
        boxVertical.add(box_regex)
        box_top.add(boxVertical)

        box_file = swing.Box.createHorizontalBox()
        checkbox_panel = JPanel(FlowLayout(FlowLayout.LEADING))
        border = BorderFactory.createTitledBorder(
            LineBorder(Color.BLACK), 'Payload Sets [Simple list]',
            TitledBorder.LEFT, TitledBorder.TOP)
        box_file.setBorder(border)

        box_param = swing.Box.createVerticalBox()
        box_param.add(checkbox_panel)

        file_column_names = [
            "Type",
            "Name",
            "Payload",
        ]
        data = []
        self.file_table_model = DefaultTableModel(data, file_column_names)
        self.file_table = JTable(self.file_table_model)
        self.file_table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF)

        column_model = self.file_table.getColumnModel()
        for count in xrange(column_model.getColumnCount()):
            column = column_model.getColumn(count)
            column.setPreferredWidth(160)

        self.file_table.preferredScrollableViewportSize = Dimension(500, 70)
        self.file_table.setFillsViewportHeight(True)

        panel_dropdown = JPanel(FlowLayout(FlowLayout.LEADING))
        self._file_dropdown = JComboBox(items)
        panel_dropdown.add(JLabel('Type:'))
        panel_dropdown.add(self._file_dropdown)
        box_param.add(panel_dropdown)
        box_param.add(JScrollPane(self.file_table))
        callbacks.customizeUiComponent(self.file_table)

        file_param_panel = JPanel(FlowLayout(FlowLayout.LEADING))

        self._file_param = JLabel("Name:")
        self._file_param_text = JTextField(20)

        file_param_panel.add(self._file_param)
        file_param_panel.add(self._file_param_text)
        self._error_message = JLabel("Name is required")
        self._error_message.setVisible(False)
        self._error_message.setFont(Font(Font.MONOSPACED, Font.ITALIC, 12))
        self._error_message.setForeground(Color.red)
        file_param_panel.add(self._error_message)
        box_param.add(file_param_panel)

        box_button_file = swing.Box.createVerticalBox()
        self._file_load_btn = JButton("Load")

        self._file_clear_btn = JButton("Clear")
        self._file_clear_btn.addActionListener(self)
        self._file_load_btn.addActionListener(self)
        box_button_file.add(self._file_load_btn)
        box_button_file.add(self._file_clear_btn)
        box_file.add(box_button_file)
        box_file.add(box_param)
        boxVertical.add(box_file)

        regex_column_names = [
            "Type",
            "Name",
            "Regex",
            "Start at offset",
            "End at offset",
        ]
        #clear target.json
        with open("target.json", "w") as f:
            pass
        data = []
        self.target_table_model = DefaultTableModel(data, regex_column_names)
        self.target_table = JTable(self.target_table_model)
        self.target_table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF)
        column_model = self.target_table.getColumnModel()
        for count in xrange(column_model.getColumnCount()):
            column = column_model.getColumn(count)
            column.setPreferredWidth(100)

        self.target_table.preferredScrollableViewportSize = Dimension(500, 70)
        self.target_table.setFillsViewportHeight(True)
        callbacks.customizeUiComponent(self.target_table)
        callbacks.customizeUiComponent(boxVertical)
        table_panel = swing.Box.createVerticalBox()
        table_panel.add(JScrollPane(self.target_table))
        box_top.add(table_panel)

        self._jScrollPaneOut = JScrollPane()
        #self._split_main.setBottomComponent(self._jScrollPaneOut)
        self._split_main.setBottomComponent(self._text_editor.getComponent())
        self._split_main.setTopComponent(box_top)
        self._split_main.setDividerLocation(450)
        callbacks.customizeUiComponent(self._split_main)
        callbacks.addSuiteTab(self)
        return

    def getTabCaption(self):
        return "CRH"

    def getUiComponent(self):
        return self._split_main

    def createMenuItems(self, invocation):
        menu = []
        ctx = invocation.getInvocationContext()
        menu.append(
            swing.JMenuItem("Send to CRH",
                            None,
                            actionPerformed=lambda x, inv=invocation: self.
                            menu_action(inv)))
        return menu if menu else None

    #
    # Implementation of Menu Action
    #
    def menu_action(self, invocation):
        try:
            invMessage = invocation.getSelectedMessages()
            message = invMessage[0].getResponse()
            res_info = self.helpers.analyzeResponse(message)
            send_res = message.tostring()
            self._text_editor.setText(send_res)
        except:
            print('Failed to add data to CRH tab.')

    #
    # Implementation of event action
    #
    def actionPerformed(self, actionEvent):

        # onclick add button of extract from regex group
        if actionEvent.getSource() is self._add_btn:
            start, end = self._text_editor.getSelectionBounds()
            value = None
            regex = None
            item = self._dropdown.getSelectedItem()
            param = self._jTextIn_param.getText()

            if len(param) is 0:
                self._param_error.setVisible(True)
                return
            self._param_error.setVisible(False)
            is_selected = self._is_use_regex.isSelected()
            if is_selected:
                start = None
                end = None
                regex = self._jTextIn_regex.getText()
                if len(regex) is 0:
                    self._regex_error.setVisible(True)
                    return

                req = self._text_editor.getText()
                try:
                    pattern = re.compile(regex)
                    match = pattern.search(req)
                    value = match.group(1) if match else None
                    if value is None:
                        raise IndexError
                except IndexError:
                    self._regex_error.setVisible(True)
                    return
                self._regex_error.setVisible(False)

            data = [
                item,
                param,
                regex,
                start,
                end,
            ]
            self.target_table_model.addRow(data)

            with open("target.json", "r+") as f:
                try:
                    json_data = json.load(f)
                except ValueError:
                    json_data = dict()
                if is_selected:
                    data = {
                        param: [
                            item,
                            regex,
                        ]
                    }
                else:
                    data = {
                        param: [
                            item,
                            start,
                            end,
                        ]
                    }
                json_data.update(data)
                self.write_file(f, json.dumps(json_data))

        # onclick remove button of extract from regex group
        if actionEvent.getSource() is self._remove_btn:
            rowno = self.target_table.getSelectedRow()
            if rowno != -1:
                column_model = self.target_table.getColumnModel()
                param_name = self.target_table_model.getValueAt(rowno, 1)
                start = self.target_table_model.getValueAt(rowno, 3)

                self.target_table_model.removeRow(rowno)
                with open("target.json", 'r+') as f:
                    try:
                        json_data = json.load(f)
                    except ValueError:
                        json_data = dict()

                    for key, value in json_data.items():
                        if value[1] == start and key == param_name:
                            try:
                                del json_data[key]
                            except IndexError:
                                print('Error: {0}: No such json key.'.format(
                                    key))
                    self.write_file(f, json.dumps(json_data))

        # onclick load button of payload sets
        if actionEvent.getSource() is self._file_load_btn:
            #clear table
            self.remove_all(self.file_table_model)
            self.current_column_id = 0

            target_param = self._file_param_text.getText()
            item = self._file_dropdown.getSelectedItem()

            if len(target_param) == 0:
                self._error_message.setVisible(True)
                return
            self._error_message.setVisible(False)

            chooser = JFileChooser()
            chooser.showOpenDialog(actionEvent.getSource())
            file_path = chooser.getSelectedFile().getAbsolutePath()
            with open(file_path, 'r') as f:
                while True:
                    line = f.readline().strip()
                    if not line:
                        break
                    data = [
                        item,
                        target_param,
                        line,
                    ]
                    self.file_table_model.addRow(data)

            with open('target.json', 'r+') as f:
                try:
                    json_data = json.load(f)
                except ValueError:
                    json_data = dict()

                json_data.update({target_param: [
                    item,
                    'Set payload',
                ]})
                self.write_file(f, json.dumps(json_data))

        # onclick clear button of payload sets
        if actionEvent.getSource() is self._file_clear_btn:
            self.remove_all(self.file_table_model)

            self.current_column_id = 0

            with open("target.json", 'r+') as f:
                try:
                    json_data = json.load(f)
                except:
                    json_data = dict()

                for key, value in json_data.items():
                    if isinstance(value[1], unicode):
                        if value[1].encode('utf-8') == 'Set payload':
                            try:
                                del json_data[key]
                            except IndexError:
                                print('Error: {0}: No such json key.'.format(
                                    key))
                self.write_file(f, json.dumps(json_data))

    #
    # Implementaion of ISessionHandlingAction
    #
    def getActionName(self):
        return "custom request handler"

    def performAction(self, current_request, macro_items):

        if len(macro_items) == 0:
            return

        # extract the response headers
        final_response = macro_items[len(macro_items) - 1].getResponse()
        if final_response is None:
            return

        req = self.helpers.analyzeRequest(current_request)

        try:
            with open('target.json', 'r') as f:
                read_data = f.read()
                self.read_data = json.loads(read_data)
        except ValueError:
            sys.stderr.write('Error: json.loads()')
            return

        for key, value in self.read_data.items():
            if value[0] == 'JSON':
                self.set_json_parameter(current_request, final_response, key,
                                        value)
            elif value[0] == 'Header':
                self.set_header(current_request, final_response, key, value)

    def set_json_parameter(self, current_request, final_response, key, value):
        req = self.helpers.analyzeRequest(current_request)

        if IRequestInfo.CONTENT_TYPE_JSON != req.getContentType():
            return False

        body = current_request.getRequest()[req.getBodyOffset():].tostring()
        json_data = json.loads(body, object_pairs_hook=collections.OrderedDict)

        target_keys = filter(lambda x: x == key, json_data.keys())
        if not target_keys:
            return

        req_data = json_data
        column_model = self.file_table.getColumnModel()
        row_count = self.file_table_model.getRowCount()
        for key in target_keys:
            if value[-1] == 'Set payload':
                if row_count > self.current_column_id:
                    req_value = self.file_table_model.getValueAt(
                        self.current_column_id, 2)
                    self.current_column_id += 1
            else:
                # No selected regex
                if len(value) > 2:
                    start, end = value[1:]
                    req_value = final_response[start:end].tostring()
                else:
                    regex = value[1]
                    match = re.search(regex, final_response.tostring())
                    req_value = match.group(1) if match else None

            req_data[key] = req_value

        req = current_request.getRequest()
        json_data_start = self.helpers.indexOf(req, bytearray(body), False, 0,
                                               len(req))

        # glue together header + customized json of request
        current_request.setRequest(
            req[0:json_data_start] +
            self.helpers.stringToBytes(json.dumps(req_data)))

    def set_header(self, current_request, final_response, key, value):
        req = self.helpers.analyzeRequest(current_request)
        headers = req.getHeaders()
        target_keys = []
        for header in headers:
            if header.startswith(key):
                target_keys += [key]

        if not target_keys:
            return

        column_model = self.file_table.getColumnModel()
        row_count = self.file_table_model.getRowCount()
        req = current_request.getRequest()

        for key in target_keys:
            if value[-1] == 'Set payload':
                if row_count > self.current_column_id:
                    req_value = self.file_table_model.getValueAt(
                        self.current_column_id, 2)
                    self.current_column_id += 1
            else:
                # No selected regex
                if len(value) > 2:
                    start, end = value[1:]
                    req_value = final_response[start:end].tostring()
                else:
                    regex = value[1]
                    match = re.search(regex, final_response.string())
                    req_value = match.group(1) if match else None

            key_start = self.helpers.indexOf(req,
                                             bytearray(key.encode('utf-8')),
                                             False, 0, len(req))
            key_end = self.helpers.indexOf(req, bytearray('\r\n'), False,
                                           key_start, len(req))

            keylen = len(key)

        # glue together first line + customized hedaer + rest of request
        current_request.setRequest(
            req[0:key_start] +
            self.helpers.stringToBytes("%s: %s" %
                                       (key.encode('utf-8'), req_value)) +
            req[key_end:])

    #
    # Implementation of function for Remove all for specific table data
    #
    def remove_all(self, model):
        count = model.getRowCount()
        for i in xrange(count):
            model.removeRow(0)

    #
    # Implementaion of function for write data for specific file
    #
    def write_file(self, f, data):
        f.seek(0)
        f.write(data)
        f.truncate()
        return
class Init_and_Fit_Params_Controller:
	def __init__(self,linac_wizard_document,transverse_twiss_fitting_controller):
		self.linac_wizard_document = linac_wizard_document
		self.transverse_twiss_fitting_controller = transverse_twiss_fitting_controller
		self.main_panel = JPanel(BorderLayout())
		tmp_panel = JPanel(GridLayout(7,2))
		self.eKin_text = DoubleInputTextField(0.,ScientificNumberFormat(7),8)
		eKin_lbl = JLabel("eKin[MeV]=",JLabel.RIGHT)
		self.current_text = DoubleInputTextField(0.,ScientificNumberFormat(4),8)
		current_lbl = JLabel("Curr.[mA]=",JLabel.RIGHT)
		self.fit_err_text = DoubleInputTextField(0.,ScientificNumberFormat(4),8)
		fit_err_lbl = JLabel("Fit Err,%=",JLabel.RIGHT)	
		self.fit_err_text.setValue(5.0)
		self.fit_iter_text = DoubleInputTextField(0.,ScientificNumberFormat(1),8)
		iter_lbl = JLabel("Fit Iterations=",JLabel.RIGHT)
		self.fit_iter_text.setValue(200)
		self.fit_iter_left_text = DoubleInputTextField(0.,ScientificNumberFormat(1),8)
		iter_left_lbl = JLabel("Iters. Left=",JLabel.RIGHT)		
		self.avg_diff_text = DoubleInputTextField(0.,ScientificNumberFormat(7),8)
		avg_diff_lbl = JLabel("Avg.Diff.[mm]=",JLabel.RIGHT)
		tmp_panel.add(eKin_lbl)
		tmp_panel.add(self.eKin_text)
		tmp_panel.add(current_lbl)
		tmp_panel.add(self.current_text)
		tmp_panel.add(fit_err_lbl)
		tmp_panel.add(self.fit_err_text)		
		tmp0_lbl = JLabel("==========",JLabel.RIGHT)
		tmp1_lbl = JLabel("==========",JLabel.RIGHT)
		tmp_panel.add(tmp0_lbl)
		tmp_panel.add(tmp1_lbl)	
		tmp_panel.add(iter_lbl)
		tmp_panel.add(self.fit_iter_text)
		tmp_panel.add(iter_left_lbl)
		tmp_panel.add(self.fit_iter_left_text)		
		tmp_panel.add(avg_diff_lbl)
		tmp_panel.add(self.avg_diff_text)
		#----etched border
		etched_border = BorderFactory.createEtchedBorder()		
		#------buttons panel ------------
		one_pass_button = JButton("Make One Pass")
		one_pass_button.addActionListener(One_Pass_Listener(self.linac_wizard_document))		
		fit_button = JButton("Start Fitting")
		fit_button.addActionListener(Twiss_Fitting_Listener(self.linac_wizard_document))	
		stop_fit_button = JButton("Stop Fitting")
		stop_fit_button.addActionListener(Stop_Twiss_Fitting_Listener(self.linac_wizard_document))			
		buttons_panel = JPanel(GridLayout(3,1))
		button0_panel = JPanel(FlowLayout(FlowLayout.CENTER,3,3))
		button0_panel.add(one_pass_button)
		button1_panel = JPanel(FlowLayout(FlowLayout.CENTER,3,3))
		button1_panel.add(fit_button)
		button2_panel = JPanel(FlowLayout(FlowLayout.CENTER,3,3))
		button2_panel.add(stop_fit_button)
		buttons_panel.add(button0_panel)
		buttons_panel.add(button1_panel)
		buttons_panel.add(button2_panel)
		#--------- Final Twiss parameters table -----
		self.final_twiss_params_holder = Twiss_Params_Holder()
		self.finalTwiss_table = JTable(Final_Twiss_Table_Model(self.final_twiss_params_holder))
		self.finalTwiss_table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION)
		self.finalTwiss_table.setFillsViewportHeight(true)
		self.finalTwiss_table.setPreferredScrollableViewportSize(Dimension(180,80))
		final_to_init_button = JButton("Copy Results To Initial Twiss")
		final_to_init_button.addActionListener(Copy_Twiss_Listener(self.transverse_twiss_fitting_controller))
		button2_panel = JPanel(FlowLayout(FlowLayout.CENTER,3,3))
		button2_panel.add(final_to_init_button)
		finalTwiss_panel = JPanel(BorderLayout())
		finalTwiss_panel.add(JScrollPane(self.finalTwiss_table), BorderLayout.CENTER)	
		finalTwiss_panel.add(button2_panel,BorderLayout.SOUTH)
		border = BorderFactory.createTitledBorder(etched_border,"Final Twiss Fitting Results")
		finalTwiss_panel.setBorder(border)		
		#---------make main panel --------------
		tmp1_panel = JPanel(BorderLayout())
		tmp1_panel.add(tmp_panel,BorderLayout.NORTH)
		tmp1_panel.add(buttons_panel,BorderLayout.SOUTH)
		tmp2_panel = JPanel(BorderLayout())
		tmp2_panel.add(tmp1_panel,BorderLayout.WEST)
		tmp2_panel.add(finalTwiss_panel,BorderLayout.CENTER)
		self.main_panel.add(tmp2_panel,BorderLayout.NORTH)

			
	def getMainPanel(self):
		return self.main_panel				
class SCL_Long_TuneUp_Init_Controller:
	def __init__(self,scl_long_tuneup_controller):
		#--- scl_long_tuneup_controller the parent document for all SCL tune up controllers
		self.scl_long_tuneup_controller = 	scl_long_tuneup_controller	
		self.main_panel = JPanel(BorderLayout())
		#----etched border
		etched_border = BorderFactory.createEtchedBorder()			
		#------top init panel-----------------------
		top_init_panel = JPanel(BorderLayout())
		init_panel = JPanel(BorderLayout())
		init_panel0 = JPanel(BorderLayout())
		init_button = JButton(" Init BPMs and Cavities ")
		get_quad_fields_button = JButton(" Get Quad Fields ")
		restore_init_button = JButton(" Restore Cavities' Phases ")
		set_unblanked_button = JButton("Un-blank all Cavities")
		init_button.addActionListener(Init_BPMs_and_Cavities_Button_Listener(self.scl_long_tuneup_controller))
		get_quad_fields_button.addActionListener(Get_Quad_Fields_Button_Listener(self.scl_long_tuneup_controller))
		restore_init_button.addActionListener(Restore_Init_BPMs_and_Cavities_Button_Listener(self.scl_long_tuneup_controller))
		set_unblanked_button.addActionListener(Unblank_All_Cavities_Button_Listener(self.scl_long_tuneup_controller))
		expl_text = "Checks response from BPMs and memorizes initial amp./phases of cavities. \n"
		expl_text = expl_text + " D - Design,  I.L. - Initial Live values. \n"
		expl_text = expl_text + " BPM1 and BPM2 will be used for the cavity phase setup during the raw phase scan.\n"
		init_text = JTextArea(expl_text)
		init_panel01 = JPanel(GridLayout(4,1,10,10))
		init_panel01.add(init_button)
		init_panel01.add(get_quad_fields_button)
		init_panel01.add(restore_init_button)
		init_panel01.add(set_unblanked_button)
		init_panel01.setBorder(etched_border)
		init_panel0.add(init_panel01,BorderLayout.WEST)
		init_panel0.add(init_text,BorderLayout.CENTER)	
		init_panel1 = JPanel(FlowLayout(FlowLayout.LEFT,5,5))
		init_set_bpm1_button = JButton(" Set BPM1 to Selected Cavs ")
		init_set_bpm2_button = JButton(" Set BPM2 to Selected Cavs ")
		init_set_bpm3_button = JButton(" Clear BPM1/BPM2 for Selected Cavs ")
		init_set_bpm1_button.addActionListener(Init_Set_BPM_to_Cav_Button_Listener(self.scl_long_tuneup_controller,1))
		init_set_bpm2_button.addActionListener(Init_Set_BPM_to_Cav_Button_Listener(self.scl_long_tuneup_controller,2))
		init_set_bpm3_button.addActionListener(Clear_BPM0_BPM1_Button_Listener(self.scl_long_tuneup_controller))
		min_bpm_dist_label = JLabel("Min. BPM 1-2 Dist.[m]=",JLabel.RIGHT)
		self.min_bpm_dist_txt = DoubleInputTextField(22.0,ScientificNumberFormat(6),6)
		max_bpm_dist_label = JLabel("Max.=",JLabel.RIGHT)
		self.max_bpm_dist_txt = DoubleInputTextField(75.0,ScientificNumberFormat(6),6)
		init_panel1.add(init_set_bpm1_button)
		init_panel1.add(init_set_bpm2_button)
		init_panel1.add(init_set_bpm3_button)
		init_panel1.add(min_bpm_dist_label)
		init_panel1.add(self.min_bpm_dist_txt)
		init_panel1.add(max_bpm_dist_label)
		init_panel1.add(self.max_bpm_dist_txt)
		init_panel.add(init_panel0,BorderLayout.SOUTH)
		init_panel.add(init_panel1,BorderLayout.NORTH)		
		init_panel.setBorder(etched_border)
		top_init_panel.add(init_panel,BorderLayout.NORTH)
		self.bpm_table = JTable(Init_BPMs_Table_Model(self.scl_long_tuneup_controller))
		self.cav_table = JTable(Init_Cavities_Table_Model(self.scl_long_tuneup_controller))
		self.bpm_table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION)
		self.cav_table.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION)
		self.bpm_table.setFillsViewportHeight(true)
		self.cav_table.setFillsViewportHeight(true)
		self.bpm_table.setPreferredScrollableViewportSize(Dimension(300,300))
		#self.cav_table.setPreferredScrollableViewportSize(Dimension(120,300))		
		scrl_panel0 = JScrollPane(self.bpm_table)
		scrl_panel1 = JScrollPane(self.cav_table)
		scrl_panel0.setBorder(etched_border)
		scrl_panel1.setBorder(etched_border)
		bpm_cav_tables_panel = JPanel(BorderLayout())
		bpm_cav_tables_panel.add(scrl_panel0,BorderLayout.WEST)
		bpm_cav_tables_panel.add(scrl_panel1,BorderLayout.CENTER)
		top_init_panel.add(bpm_cav_tables_panel,BorderLayout.CENTER)
		#--------------------------------------------------
		self.main_panel.add(top_init_panel,BorderLayout.CENTER)
		#--------------------------------------------------
		self.scl_quad_fields_dict_holder = SCL_Quad_Fields_Dict_Holder(self.scl_long_tuneup_controller)
		
	def getMainPanel(self):
		return self.main_panel
		
	def allPairsSet(self):
		res = true
		for cav_wrapper in self.scl_long_tuneup_controller.cav_wrappers:
			if(cav_wrapper.isGood and (cav_wrapper.bpm_wrapper0 == null or cav_wrapper.bpm_wrapper1 == null)):
				res = false
		return res
		
	def connectAllBPMs(self):
		bpm_wrappers = self.scl_long_tuneup_controller.bpm_wrappers
		bpm_batch_reader = self.scl_long_tuneup_controller.bpmBatchReader
		#if(bpm_wrappers != bpm_batch_reader.bpm_wrappers):
		bpm_batch_reader.setBPMs(bpm_wrappers)
		if(self.scl_long_tuneup_controller.beamTrigger == null):
			self.scl_long_tuneup_controller.beamTrigger = BeamTrigger(self.scl_long_tuneup_controller)
		if(bpm_batch_reader.beam_trigger == null):
			bpm_batch_reader.setBeamTrigger(self.scl_long_tuneup_controller.beamTrigger)
		self.scl_long_tuneup_controller.beamTrigger.setUseTrigger(false)
Beispiel #33
0
class SelPanel(JDialog, ActionListener):
    def actionPerformed(self, event):
        option = event.getActionCommand()
        if option == 'Close':
            self.dispose()
        elif option == 'SCI':
            chooser = JFileChooser()
            returnVal = chooser.showSaveDialog(self)
            if returnVal == JFileChooser.APPROVE_OPTION:
                fileName = chooser.getSelectedFile().getPath()
                f = open(fileName, 'w')
                f.write("\t".join([
                    "Het", "Fst", "0.5(1-pval)quantile", "median",
                    "0.5(1+pval)quantile"
                ]) + "\n")
                for line in self.confLines:
                    f.write('\t'.join(map(lambda x: str(x), line)) + "\n")
                f.close()
        elif option == 'SLL':
            chooser = JFileChooser()
            returnVal = chooser.showSaveDialog(self)
            if returnVal == JFileChooser.APPROVE_OPTION:
                fileName = chooser.getSelectedFile().getPath()
                f = open(fileName, 'w')
                f.write("\t".join(
                    ["Locus", "Het", "Fst", "P(Simul Fst<sample Fst)"]) + "\n")
                for i in range(self.data.size()):
                    line = self.data.elementAt(i)
                    lineList = [str(line.elementAt(0))]
                    lineList.append(str(line.elementAt(1)))
                    lineList.append(str(line.elementAt(2)))
                    lineList.append(str(line.elementAt(3)))
                    f.write("\t".join(lineList) + "\n")
                f.close()

    def getP(self, pvLine):
        #there is a copy of this on Main
        if self.isDominant:
            p1 = pvLine[2]
            p2 = pvLine[3]
            p3 = pvLine[4]
            p = p1 - 0.5 * (p1 + p2 - 1)
            return p
        else:
            return pvLine[3]

    def calcFalsePositives(self, pv, ci, fdr):
        falses = []
        pys = []
        for i in range(len(pv)):
            p = self.getP(pv[i])
            py = 1 - 2 * abs(p - 0.5)
            pys.append(py)
            #if p > ci or p<1-ci:
            #    pys.append(py)
        pys.append(0.0)
        pys.sort()
        rate = []
        maxRank = 0
        for i in range(len(pys)):
            if pys[i] <= fdr * i / len(pys):
                maxRank = i
        #print maxRank
        falseReports = []
        for pvLine in pv:
            p = self.getP(pvLine)
            py = 1 - 2 * abs(p - 0.5)
            if py in pys:
                if pys.index(py) <= maxRank:
                    falseReports.append("Outlier")
                else:
                    falseReports.append("--")
            else:
                falseReports.append("NA")

        return falseReports

    def initTable(self, lociNames, pv, ci, locusFst):
        colNames = Vector()
        colNames.add('Locus')
        colNames.add('Het')
        colNames.add('Fst')
        colNames.add('P(simulated Fst < sample Fst)')
        colNames.add('FDR')
        data = Vector()
        self.data = data
        falses = self.calcFalsePositives(pv, ci, self.fdr)
        currentPos = 0
        for i in range(len(lociNames)):
            line = Vector()
            locus = lociNames[i]
            line.add(locus)
            if not locusFst[i]:
                line.add("NA")
                line.add("NA")
                line.add("NA")
                line.add("NA")
            else:
                line.add(str(pv[currentPos][0]))
                line.add(str(pv[currentPos][1]))
                line.add(str(self.getP(pv[currentPos])))
                line.add(str(falses[currentPos]))
                currentPos += 1
            data.add(line)
        self.table = JTable(data, colNames)
        self.table.setDefaultRenderer(
            Class.forName("java.lang.Object"),
            ColorRenderer(data, ci, self.chart.neuColor, self.chart.balColor,
                          self.chart.posColor))

    def __init__(self, frame, chart, lociNames, pv, ci, confLines, locusFst,
                 isDominant, fdr):
        JDialog(frame)
        self.chart = chart
        self.frame = frame
        self.confLines = confLines
        self.isDominant = isDominant
        self.fdr = fdr
        pane = self.getRootPane().getContentPane()

        pane.setLayout(BorderLayout())

        self.initTable(lociNames, pv, ci, locusFst)
        scrollPane = JScrollPane(self.table)
        osName = System.getProperty('os.name').lower()

        if not System.getProperty('java.specification.version')[-1] == '5':
            self.table.setFillsViewportHeight(True)
        pane.add(scrollPane, BorderLayout.CENTER)

        buttonPane = JPanel()
        sll = JButton('Save loci list')
        sll.addActionListener(self)
        sll.setActionCommand('SLL')
        buttonPane.add(sll)
        sci = JButton('Save confidence intervals')
        sci.addActionListener(self)
        sci.setActionCommand('SCI')
        buttonPane.add(sci)
        close = JButton('Close')
        close.addActionListener(self)
        close.setActionCommand('Close')
        buttonPane.add(close)
        pane.add(buttonPane, BorderLayout.PAGE_END)

        self.pack()
class Init_and_Fit_Params_Controller:
    def __init__(self, linac_wizard_document,
                 transverse_twiss_fitting_controller):
        self.linac_wizard_document = linac_wizard_document
        self.transverse_twiss_fitting_controller = transverse_twiss_fitting_controller
        self.main_panel = JPanel(BorderLayout())
        tmp_panel = JPanel(GridLayout(7, 2))
        self.eKin_text = DoubleInputTextField(0., ScientificNumberFormat(7), 8)
        eKin_lbl = JLabel("eKin[MeV]=", JLabel.RIGHT)
        self.current_text = DoubleInputTextField(0., ScientificNumberFormat(4),
                                                 8)
        current_lbl = JLabel("Curr.[mA]=", JLabel.RIGHT)
        self.fit_err_text = DoubleInputTextField(0., ScientificNumberFormat(4),
                                                 8)
        fit_err_lbl = JLabel("Fit Err,%=", JLabel.RIGHT)
        self.fit_err_text.setValue(5.0)
        self.fit_iter_text = DoubleInputTextField(0.,
                                                  ScientificNumberFormat(1), 8)
        iter_lbl = JLabel("Fit Iterations=", JLabel.RIGHT)
        self.fit_iter_text.setValue(200)
        self.fit_iter_left_text = DoubleInputTextField(
            0., ScientificNumberFormat(1), 8)
        iter_left_lbl = JLabel("Iters. Left=", JLabel.RIGHT)
        self.avg_diff_text = DoubleInputTextField(0.,
                                                  ScientificNumberFormat(7), 8)
        avg_diff_lbl = JLabel("Avg.Diff.[mm]=", JLabel.RIGHT)
        tmp_panel.add(eKin_lbl)
        tmp_panel.add(self.eKin_text)
        tmp_panel.add(current_lbl)
        tmp_panel.add(self.current_text)
        tmp_panel.add(fit_err_lbl)
        tmp_panel.add(self.fit_err_text)
        tmp0_lbl = JLabel("==========", JLabel.RIGHT)
        tmp1_lbl = JLabel("==========", JLabel.RIGHT)
        tmp_panel.add(tmp0_lbl)
        tmp_panel.add(tmp1_lbl)
        tmp_panel.add(iter_lbl)
        tmp_panel.add(self.fit_iter_text)
        tmp_panel.add(iter_left_lbl)
        tmp_panel.add(self.fit_iter_left_text)
        tmp_panel.add(avg_diff_lbl)
        tmp_panel.add(self.avg_diff_text)
        #----etched border
        etched_border = BorderFactory.createEtchedBorder()
        #------buttons panel ------------
        one_pass_button = JButton("Make One Pass")
        one_pass_button.addActionListener(
            One_Pass_Listener(self.linac_wizard_document))
        fit_button = JButton("Start Fitting")
        fit_button.addActionListener(
            Twiss_Fitting_Listener(self.linac_wizard_document))
        stop_fit_button = JButton("Stop Fitting")
        stop_fit_button.addActionListener(
            Stop_Twiss_Fitting_Listener(self.linac_wizard_document))
        buttons_panel = JPanel(GridLayout(3, 1))
        button0_panel = JPanel(FlowLayout(FlowLayout.CENTER, 3, 3))
        button0_panel.add(one_pass_button)
        button1_panel = JPanel(FlowLayout(FlowLayout.CENTER, 3, 3))
        button1_panel.add(fit_button)
        button2_panel = JPanel(FlowLayout(FlowLayout.CENTER, 3, 3))
        button2_panel.add(stop_fit_button)
        buttons_panel.add(button0_panel)
        buttons_panel.add(button1_panel)
        buttons_panel.add(button2_panel)
        #--------- Final Twiss parameters table -----
        self.final_twiss_params_holder = Twiss_Params_Holder()
        self.finalTwiss_table = JTable(
            Final_Twiss_Table_Model(self.final_twiss_params_holder))
        self.finalTwiss_table.setSelectionMode(
            ListSelectionModel.SINGLE_SELECTION)
        self.finalTwiss_table.setFillsViewportHeight(true)
        self.finalTwiss_table.setPreferredScrollableViewportSize(
            Dimension(180, 80))
        final_to_init_button = JButton("Copy Results To Initial Twiss")
        final_to_init_button.addActionListener(
            Copy_Twiss_Listener(self.transverse_twiss_fitting_controller))
        button2_panel = JPanel(FlowLayout(FlowLayout.CENTER, 3, 3))
        button2_panel.add(final_to_init_button)
        finalTwiss_panel = JPanel(BorderLayout())
        finalTwiss_panel.add(JScrollPane(self.finalTwiss_table),
                             BorderLayout.CENTER)
        finalTwiss_panel.add(button2_panel, BorderLayout.SOUTH)
        border = BorderFactory.createTitledBorder(
            etched_border, "Final Twiss Fitting Results")
        finalTwiss_panel.setBorder(border)
        #---------make main panel --------------
        tmp1_panel = JPanel(BorderLayout())
        tmp1_panel.add(tmp_panel, BorderLayout.NORTH)
        tmp1_panel.add(buttons_panel, BorderLayout.SOUTH)
        tmp2_panel = JPanel(BorderLayout())
        tmp2_panel.add(tmp1_panel, BorderLayout.WEST)
        tmp2_panel.add(finalTwiss_panel, BorderLayout.CENTER)
        self.main_panel.add(tmp2_panel, BorderLayout.NORTH)

    def getMainPanel(self):
        return self.main_panel
Beispiel #35
0
class Monitor_Controller:
    def __init__(self, event_monitor_document):
        self.event_monitor_document = event_monitor_document
        self.main_panel = JPanel(BorderLayout())
        etched_border = BorderFactory.createEtchedBorder()
        #etched_border = BorderFactory.createRaisedSoftBevelBorder()
        etched_border = BorderFactory.createLineBorder(Color.black, 2, false)
        #--------------------------------------------------------------
        self.left_panel = JPanel(VerticalLayout())
        main_label = JLabel(
            "============ Event Monitor Parameters =============",
            JLabel.CENTER)
        self.left_panel.add(main_label)
        self.left_panel.setBorder(etched_border)
        #----------Event Monotor Params-------------
        monitor_params0_panel = JPanel(GridLayout(4, 2))
        self.buffer_size_text = buffer_size_text
        buffer_size_label = JLabel("Buff. Time [sec]:", JLabel.RIGHT)
        monitor_params0_panel.add(buffer_size_label)
        monitor_params0_panel.add(self.buffer_size_text)
        self.event_buffer_size_text = DoubleInputTextField(
            3.0, ScientificNumberFormat(1), 10)
        event_buffer_size_label = JLabel("Event Buff. Size:", JLabel.RIGHT)
        monitor_params0_panel.add(event_buffer_size_label)
        monitor_params0_panel.add(self.event_buffer_size_text)
        self.min_limit_text = DoubleInputTextField(1.0e-8,
                                                   ScientificNumberFormat(4),
                                                   10)
        self.max_limit_text = DoubleInputTextField(1.0e-3,
                                                   ScientificNumberFormat(4),
                                                   10)
        min_lim_label = JLabel("Trigger Min Value:", JLabel.RIGHT)
        max_lim_label = JLabel("Trigger Max Value:", JLabel.RIGHT)
        monitor_params0_panel.add(min_lim_label)
        monitor_params0_panel.add(self.min_limit_text)
        monitor_params0_panel.add(max_lim_label)
        monitor_params0_panel.add(self.max_limit_text)
        monitor_params1_panel = JPanel(BorderLayout())
        monitor_params1_panel.add(monitor_params0_panel, BorderLayout.WEST)
        monitor_params_panel = JPanel(BorderLayout())
        monitor_params_panel.add(monitor_params1_panel, BorderLayout.NORTH)
        self.left_panel.add(monitor_params_panel)
        self.pvTriggerJText = JTextField(ChannelNameDocument(), "", 30)
        pvTriggerButton = JButton("Set Trigger PV")
        pvTriggerButton.addActionListener(Set_Trigger_PV_Listener(self))
        triggerPanel = JPanel(FlowLayout(FlowLayout.LEFT, 1, 1))
        triggerPanel.add(pvTriggerButton)
        triggerPanel.add(self.pvTriggerJText)
        self.left_panel.add(triggerPanel)
        self.pvMonitorNameJText = JTextField(ChannelNameDocument(), "", 30)
        #------------Two Tables Panel --------------------
        twoTables_panel = JPanel(GridLayout(2, 1))
        #------------Monitored PV table-------------------
        pvMonitored_panel = JPanel(BorderLayout())
        border = BorderFactory.createTitledBorder(etched_border,
                                                  "Monitored PVs")
        pvMonitored_panel.setBorder(border)
        self.pvMonitorJText = JTextField(ChannelNameDocument(), "", 25)
        pvMonitorButton = JButton("Add PV to Monitored")
        pvMonitorRemoveButton = JButton("Remove Selected PVs")
        pvMonitorButton.addActionListener(Add_PV_To_Monitored_Listener(self))
        pvMonitorRemoveButton.addActionListener(
            Remove_Monitored_PVs_Listener(self))
        pvMonitoredPanel0 = JPanel(FlowLayout(FlowLayout.LEFT, 1, 1))
        pvMonitoredPanel0.add(pvMonitorButton)
        pvMonitoredPanel0.add(self.pvMonitorJText)
        pvMonitoredPanel1 = JPanel(FlowLayout(FlowLayout.RIGHT, 1, 1))
        pvMonitoredPanel1.add(pvMonitorRemoveButton)
        pvMonitoredPanel2 = JPanel(BorderLayout())
        pvMonitoredPanel2.add(pvMonitoredPanel0, BorderLayout.NORTH)
        pvMonitoredPanel2.add(pvMonitoredPanel1, BorderLayout.SOUTH)
        pvMonitored_panel.add(pvMonitoredPanel2, BorderLayout.NORTH)
        self.pv_monitored_table = JTable(Monitored_PV_Table_Model(self))
        self.pv_monitored_table.setPreferredScrollableViewportSize(
            Dimension(200, 160))
        #self.pv_monitored_table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION)
        self.pv_monitored_table.setFillsViewportHeight(true)
        pvMonitored_panel.add(JScrollPane(self.pv_monitored_table),
                              BorderLayout.CENTER)
        twoTables_panel.add(pvMonitored_panel)
        #------------Event Buffer Table-------------------
        buffEvents_panel = JPanel(BorderLayout())
        border = BorderFactory.createTitledBorder(etched_border,
                                                  "Buffered Events")
        buffEvents_panel.setBorder(border)
        self.events_table = JTable(Buffer_Events_Table_Model(self))
        self.events_table.setPreferredScrollableViewportSize(
            Dimension(200, 160))
        self.events_table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION)
        self.events_table.setFillsViewportHeight(true)
        buffEvents_panel.add(JScrollPane(self.events_table),
                             BorderLayout.CENTER)
        twoTables_panel.add(buffEvents_panel)
        #------Stop - Start Monitoring Buttons
        startStopPanel = JPanel(BorderLayout())
        startStopPanel.setBorder(etched_border)
        self.startMonitoringButton = JButton("Start Monitoring")
        self.stopMonitoringButton = JButton("Stop Monitoring")
        self.startMonitoringButton.addActionListener(
            Start_Monitoring_Listener(self))
        self.stopMonitoringButton.addActionListener(
            Stop_Monitoring_Listener(self))
        startStopButtonsPanel = JPanel(FlowLayout(FlowLayout.LEFT, 5, 5))
        startStopButtonsPanel.add(self.startMonitoringButton)
        startStopButtonsPanel.add(self.stopMonitoringButton)
        startStopPanel.add(startStopButtonsPanel, BorderLayout.NORTH)
        self.sinceTimeJText = JTextField(30)
        self.sinceTimeJText.setForeground(Color.red)
        self.sinceTimeJText.setText("Not Running.")
        startStopPanel.add(self.sinceTimeJText, BorderLayout.SOUTH)
        #-------Event Handlers--------------------------------
        self.event_holder = Event_Object_Holder(self.event_buffer_size_text,
                                                self)
        self.event_handler = Event_Handler(self.event_holder,
                                           self.min_limit_text,
                                           self.max_limit_text)
        #-----graph panels--------------------
        self.graphs_panel = TwoGraphsPanel(self)
        #-----setup dump directory -----------
        self.dump_directory_panel = JPanel(BorderLayout())
        self.dump_button = JRadioButton("Dump Events to Files")
        self.dump_button.addActionListener(Dump_Events_To_Files_Listener(self))
        dump_dir_choose_button = JButton(" Choose Dump Dir. ")
        dump_dir_choose_button.addActionListener(Find_Dump_Dir_Listener(self))
        dump_dir_label = JLabel("  Dump Dir:", JLabel.RIGHT)
        self.dumpDirJText = JTextField(50)
        self.dumpDirJText.setText("/ade/xal/docs/EventMonitor/EventDirs/")
        dump_dir_panel0 = JPanel(FlowLayout(FlowLayout.LEFT, 1, 1))
        dump_dir_panel0.add(self.dump_button)
        dump_dir_panel1 = JPanel(FlowLayout(FlowLayout.LEFT, 1, 1))
        dump_dir_panel1.add(dump_dir_choose_button)
        dump_dir_panel1.add(dump_dir_label)
        dump_dir_panel2 = JPanel(BorderLayout())
        dump_dir_panel2.add(dump_dir_panel1, BorderLayout.WEST)
        dump_dir_panel2.add(self.dumpDirJText, BorderLayout.CENTER)
        self.dump_directory_panel.add(dump_dir_panel0, BorderLayout.NORTH)
        self.dump_directory_panel.add(dump_dir_panel2, BorderLayout.SOUTH)
        #-----set up listeners ------------------------------------
        tables_selection_listener = Table_Selection_Listener(self)
        self.pv_monitored_table.getSelectionModel().addListSelectionListener(
            tables_selection_listener)
        self.events_table.getSelectionModel().addListSelectionListener(
            tables_selection_listener)
        #--------- set up main panel
        params_and_tables_panel = JPanel(BorderLayout())
        params_and_tables_panel.add(self.left_panel, BorderLayout.NORTH)
        params_and_tables_panel.add(twoTables_panel, BorderLayout.CENTER)
        params_and_tables_panel.add(startStopPanel, BorderLayout.SOUTH)
        self.main_panel.add(params_and_tables_panel, BorderLayout.WEST)
        self.main_panel.add(self.graphs_panel.getMainPanel(),
                            BorderLayout.CENTER)
        self.main_panel.add(self.dump_directory_panel, BorderLayout.SOUTH)

    def setTriggerMonitor(self, pv_name):
        self.event_handler.setTriggerMonitor(pv_name)

    def getMainPanel(self):
        return self.main_panel
class DTL_Acceptance_Scans_Controller:
	def __init__(self,top_document,accl):
		#--- top_document is a parent document for all controllers
		self.top_document = top_document
		self.main_loop_controller = self.top_document.main_loop_controller
		self.main_panel = JPanel(BorderLayout())
		#----etched border
		etched_border = BorderFactory.createEtchedBorder()
		#---------------------------------------------
		#---- Cavities' Controllers - only DTLs
		self.cav_acc_scan_controllers = []
		self.cav_wrappers = self.main_loop_controller.cav_wrappers[4:10]
		self.cav_acc_scan_controllers.append(DTL_Acc_Scan_Cavity_Controller(self,self.cav_wrappers[0],"FC160"))
		self.cav_acc_scan_controllers.append(DTL_Acc_Scan_Cavity_Controller(self,self.cav_wrappers[1],"FC248"))
		self.cav_acc_scan_controllers.append(DTL_Acc_Scan_Cavity_Controller(self,self.cav_wrappers[2],"FC334"))
		self.cav_acc_scan_controllers.append(DTL_Acc_Scan_Cavity_Controller(self,self.cav_wrappers[3],"FC428"))
		self.cav_acc_scan_controllers.append(DTL_Acc_Scan_Cavity_Controller(self,self.cav_wrappers[4],"FC524"))
		self.cav_acc_scan_controllers.append(DTL_Acc_Scan_Cavity_Controller(self,self.cav_wrappers[5],"FC104"))
		#----acceptance scans loop timer
		self.acc_scan_loop_timer = Acc_Scan_Loop_Timer(self)			
		#----------------------------------------------   
		self.tabbedPane = JTabbedPane()		
		self.tabbedPane.add("Cavity",JPanel(BorderLayout()))	
		self.tabbedPane.add("Pattern",JPanel(BorderLayout()))
		#--------------------------------------------------------
		self.cav_table = JTable(Cavities_Table_Model(self))
		self.cav_table.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION)
		self.cav_table.setFillsViewportHeight(true)
		self.cav_table.setPreferredScrollableViewportSize(Dimension(500,120))
		self.cav_table.getSelectionModel().addListSelectionListener(Cavs_Table_Selection_Listener(self))
		scrl_cav_panel = JScrollPane(self.cav_table)
		#-------------------------------------------------------
		scrl_cav_panel.setBorder(BorderFactory.createTitledBorder(etched_border,"Cavities' Parameters"))
		init_buttons_panel = JPanel(FlowLayout(FlowLayout.LEFT,5,2))
		#---- initialization buttons
		init_selected_cavs_button = JButton("Init Selected Cavs")
		init_selected_cavs_button.addActionListener(Init_Selected_Cavs_Button_Listener(self))
		fc_in_selected_cavs_button = JButton("FC In for Selected Cavs")
		fc_in_selected_cavs_button.addActionListener(FC_In_Selected_Cavs_Button_Listener(self))	
		fc_out_selected_cavs_button = JButton("FC Out for Selected Cavs")
		fc_out_selected_cavs_button.addActionListener(FC_Out_Selected_Cavs_Button_Listener(self))
		init_buttons_panel.add(init_selected_cavs_button)
		init_buttons_panel.add(fc_in_selected_cavs_button)
		init_buttons_panel.add(fc_out_selected_cavs_button)
		#---- start stop buttons panel
		self.start_stop_panel = Start_Stop_Panel(self)
		#-------------------------------------------------
		tmp0_panel = JPanel(BorderLayout())
		tmp0_panel.add(init_buttons_panel,BorderLayout.NORTH)
		tmp0_panel.add(scrl_cav_panel,BorderLayout.CENTER)
		tmp0_panel.add(self.start_stop_panel,BorderLayout.SOUTH)
		tmp1_panel = JPanel(BorderLayout())
		tmp1_panel.add(tmp0_panel,BorderLayout.NORTH)
		#-------------------------------------------------
		left_panel = JPanel(BorderLayout())
		left_panel.add(tmp1_panel,BorderLayout.WEST)
		#--------------------------------------------------
		self.main_panel.add(left_panel,BorderLayout.WEST)
		self.main_panel.add(self.tabbedPane,BorderLayout.CENTER)
		#----------- loop state
		self.loop_run_state = Acc_Scans_Loop_Run_State()	
		#---- non GUI controllers
		
		
	def connectAllPVs(self):
		for cav_acc_scan_controller in self.cav_acc_scan_controllers:
			try:
				cav_acc_scan_controller.connectPVs()
			except:
				self.getMessageTextField().setText("Cannot connect PVs for cavity="+cav_acc_scan_controller.cav_wrapper.alias)
				return false
		return true
		
	def initAllCavControllers(self, ind_start = -1, ind_stop = -1):
		res = self.connectAllPVs()
		if(not res):
			return false
		if(ind_start < 0):
			ind_start = 0
			ind_stop = len(self.cav_acc_scan_controllers) - 1
		for cav_acc_scan_controller in self.cav_acc_scan_controllers[ind_start:ind_stop+1]:
			try:
				cav_acc_scan_controller.init()
			except:
				self.getMessageTextField().setText("Cannot read cavity's PVs! Cavity="+cav_acc_scan_controller.cav_wrapper.alias)
				return	false
		return true		

	def getMainPanel(self):
		return self.main_panel
		
	def getMessageTextField(self):
		return self.top_document.getMessageTextField()
		
	def writeDataToXML(self,root_da):
		dtl_scans_loop_cntrl_da = root_da.createChild("DTL_ACCPT_SCANS_CONTROLLER")

	def readDataFromXML(self,root_da):		
		dtl_scans_loop_cntrl_da = root_da.childAdaptor("DTL_ACCPT_SCANS_CONTROLLER")
		if(dtl_scans_loop_cntrl_da == null): return
Beispiel #37
0
        self.fireTableRowsDeleted(first, last)
        self.nRows -= last - first + 1


if __name__ in ['__builtin__', '__main__']:
    '''
    Test the table model by generating a simple window with just the table
    1) Initialized a JTable with the RoiGroupTableModel
    2) Put the JTable in a JScrollPane
    3) Put the JScrollPane in a Panel
    4) Put the Panel in a Generic Dialog
    5) Display the GenericDialog
    '''
    from javax.swing import JTable, JScrollPane
    from ij.gui import GenericDialog
    from java.awt import Panel

    tableModel = TableModel()
    table = JTable(tableModel)
    tableModel.setGroupColumn("A,B,C")
    print tableModel.getGroupString()

    tablePane = JScrollPane(table)
    table.setFillsViewportHeight(True)

    gd = GenericDialog("Roi-group table")
    panel = Panel()
    panel.add(tablePane)
    gd.addPanel(panel)  # Add current table instance to panel
    gd.showDialog()
class LINAC_SetUp_Controller:
	def __init__(self,linac_wizard_document):
		#--- linac_wizard_document the parent document for all controllers
		self.linac_wizard_document = linac_wizard_document		
		self.main_panel = JPanel(BorderLayout())
		#----etched border
		etched_border = BorderFactory.createEtchedBorder()		
		#------tables with Seq. names and button
		tables_panel = JPanel(BorderLayout())
		tables_panel.setBorder(etched_border)
		self.first_table = JTable(WS_Records_Table_Model("First "))
		self.last_table = JTable(WS_Records_Table_Model("Last "))
		self.first_table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION)
		self.last_table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION)
		self.first_table.setFillsViewportHeight(true)
		self.last_table.setFillsViewportHeight(true)
		tables01_panel = JPanel(BorderLayout())
		scrl_panel0 = JScrollPane(self.first_table)
		scrl_panel1 = JScrollPane(self.last_table)
		#tables01_panel.add(JScrollPane(self.first_table),BorderLayout.WEST)
		#tables01_panel.add(JScrollPane(self.last_table),BorderLayout.EAST)
		self.first_table.getCellRenderer(0,0).setHorizontalAlignment(JLabel.CENTER)
		self.last_table.getCellRenderer(0,0).setHorizontalAlignment(JLabel.CENTER)
		self.first_table.setPreferredScrollableViewportSize(Dimension(120,300))
		self.last_table.setPreferredScrollableViewportSize(Dimension(120,300))
		tables01_panel.add(scrl_panel0,BorderLayout.WEST)
		tables01_panel.add(scrl_panel1,BorderLayout.EAST)	
		tables_button_panel = JPanel(BorderLayout())
		tables_button_panel.add(tables01_panel,BorderLayout.WEST)
		seq_button_panel = JPanel(FlowLayout(FlowLayout.CENTER,5,5))
		seq_set_button = JButton(" Set ComboSequence ")	
		seq_button_panel.add(seq_set_button)
		tables_button_panel.add(seq_button_panel,BorderLayout.SOUTH)
		tables_panel.add(tables_button_panel,BorderLayout.NORTH)
		self.main_panel.add(tables_panel,BorderLayout.WEST)
		#--------central panel-------
		cav_amp_phase_button = JButton(" Read Cavities Amp.&Phases from Ext. File ")	
		cav_info_from_scl_tuneup_button = JButton("Get SCL Cav. Amp.&Phases from SCL Long. TuneUp")	
		new_accelerator_button = JButton(" Setup a New Accelerator File ")
		center_buttons_panel0 = JPanel(FlowLayout(FlowLayout.CENTER,5,5))
		center_buttons_panel0.add(cav_amp_phase_button)
		center_buttons_panel1 = JPanel(FlowLayout(FlowLayout.CENTER,5,5))
		center_buttons_panel1.add(cav_info_from_scl_tuneup_button)			
		center_buttons_panel2 = JPanel(FlowLayout(FlowLayout.CENTER,5,5))
		center_buttons_panel2.add(new_accelerator_button)	
		center_buttons_panel = JPanel(GridLayout(3,1))
		center_buttons_panel.add(center_buttons_panel0)
		center_buttons_panel.add(center_buttons_panel1)
		center_buttons_panel.add(center_buttons_panel2)
		center_panel = JPanel(BorderLayout())		
		center_panel.add(center_buttons_panel,BorderLayout.NORTH)
		self.main_panel.add(center_panel,BorderLayout.CENTER)
		#---------add actions listeners
		seq_set_button.addActionListener(Make_Sequence_Listener(self))
		cav_amp_phase_button.addActionListener(Read_Cav_Amp_Phase_Dict_Listener(self))
		cav_info_from_scl_tuneup_button.addActionListener(Get_SCL_Cav_Amp_Phase_Listener(self))
		new_accelerator_button.addActionListener(SetUp_New_Accelerator_Listener(self))	
		
	def getMainPanel(self):
		return self.main_panel
		
	def setSelectedSequences(self,first_seq_name,last_seq_name):
		index0 = self.first_table.getModel().accSeqName_arr.index(first_seq_name)
		index1 = self.last_table.getModel().accSeqName_arr.index(last_seq_name)
		self.first_table.setRowSelectionInterval(index0,index0)
		self.last_table.setRowSelectionInterval(index1,index1)
		
	def getSelectedSequencesNames(self):
		first_table = self.first_table
		index0 = first_table.getSelectedRow()
		last_table = self.last_table
		index1 = last_table.getSelectedRow()
		if(index0 < 0 or index1 < 0): return []
		seq_names = []
		if(index0 == index1):
			seq_names.append(first_table.getModel().accSeqName_arr[index0])
		else:
			if(index1 < index0):
				(index0,index1) = (index1,index0)
			for i in range(index0,index1+1):
				seq_names.append(first_table.getModel().accSeqName_arr[i])
		return seq_names
		
	def setAccSeqNames(self,seq_names):
		accl = self.linac_wizard_document.getAccl()
		if(len(seq_names) == 0): 
			accSeq = null
			self.linac_wizard_document.setAccSeq(accSeq)
			return
		lst = ArrayList()
		for seqName in seq_names:
			lst.add(accl.getSequence(seqName))
		accSeq = AcceleratorSeqCombo("SEQUENCE", lst)	
		self.linac_wizard_document.setAccSeq(accSeq)
		
	def getCavNameNodeDict(self,accl):
		rf_gaps = accl.getAllNodesWithQualifier(AndTypeQualifier().and((OrTypeQualifier()).or(RfGap.s_strType)))	
		cavs = []
		for rf_gap in rf_gaps:
			cav = rf_gap.getParent()
			if(cav not in cavs):
				cavs.append(cav)
		cav_name_node_dict = {}
		cav_names = []
		for cav in cavs:
			cav_names.append(cav.getId())
			cav_name_node_dict[cav.getId()] = cav		
		return cav_name_node_dict