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)	
Exemple #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
Exemple #4
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 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 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 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		
Exemple #8
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)
Exemple #9
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
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)
Exemple #12
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)
Exemple #13
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)
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 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
Exemple #16
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
Exemple #17
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 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
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