예제 #1
0
class Init_Keeper_Panel(JPanel):
	def __init__(self,rfq_keeper_controller):
		self.rfq_keeper_controller = rfq_keeper_controller
		self.setLayout(BorderLayout())
		#----etched border
		etched_border = BorderFactory.createEtchedBorder()
		self.setBorder(etched_border)
		buttons_panel =  JPanel(FlowLayout(FlowLayout.LEFT,3,3))
		#---------------------------------------------
		init_keeper_button = JButton("Initialize Keeper")
		init_keeper_button.addActionListener(Init_Keeper_Button_Listener(self.rfq_keeper_controller))
		#---------------------------------------------
		buttons_panel.add(init_keeper_button)
		#---------------------------------------------
		info_panel = JPanel(GridLayout(6,2))
		label_current_integral = JLabel("Current Integral [nC]=",JLabel.RIGHT)
		label_reprate = JLabel("Rep. rate[Hz]=",JLabel.RIGHT)
		label_rfq_pw = JLabel("RFQ Pulse Width=",JLabel.RIGHT)
		label_target_pwr =JLabel("Avg. Pwr. on Target[kW]=",JLabel.RIGHT)
		label_rfq_max_pw_correction = JLabel("Max PW Correction=",JLabel.RIGHT)
		label_update_time = JLabel("Update Time [sec]=",JLabel.RIGHT)
		#-------
		self.current_integral_text = DoubleInputTextField("G12.5")
		self.reprate_text = DoubleInputTextField("F4.1")
		self.rfq_pw_text = DoubleInputTextField("F6.1")
		self.target_pwr_text = DoubleInputTextField("F9.3")
		self.rfq_max_pw_correction_text = DoubleInputTextField("F6.1")
		self.update_time_text = DoubleInputTextField("F6.1")
		#-------
		self.current_integral_text.setHorizontalAlignment(JTextField.CENTER)
		self.reprate_text.setHorizontalAlignment(JTextField.CENTER)
		self.rfq_pw_text.setHorizontalAlignment(JTextField.CENTER)
		self.target_pwr_text.setHorizontalAlignment(JTextField.CENTER)
		self.rfq_max_pw_correction_text.setHorizontalAlignment(JTextField.CENTER)
		self.update_time_text.setHorizontalAlignment(JTextField.CENTER)
		#-------
		self.rfq_max_pw_correction_text.setValue(20.)
		self.update_time_text .setValue(1.0)
		#-------
		info_panel.add(label_current_integral)
		info_panel.add(self.current_integral_text)		
		info_panel.add(label_reprate)
		info_panel.add(self.reprate_text)		
		info_panel.add(label_rfq_pw)
		info_panel.add(self.rfq_pw_text)	
		info_panel.add(label_target_pwr)
		info_panel.add(self.target_pwr_text)
		info_panel.add(label_rfq_max_pw_correction)
		info_panel.add(self.rfq_max_pw_correction_text)
		info_panel.add(label_update_time)
		info_panel.add(self.update_time_text)
		#----------------------------------------------
		inner_0_panel = JPanel(BorderLayout())
		inner_0_panel.add(buttons_panel,BorderLayout.NORTH)
		inner_0_panel.add(info_panel,BorderLayout.CENTER)
		self.add(inner_0_panel,BorderLayout.NORTH)
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 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
예제 #4
0
class Abstract_Cavity_Controller:
    def __init__(self, main_loop_controller, cav_wrapper):
        self.main_loop_controller = main_loop_controller
        self.cav_wrapper = cav_wrapper
        self.main_panel = JPanel(BorderLayout())
        self.parameters_panel = JPanel(BorderLayout())
        #---- backward cavity amplitude move params
        panel0 = JPanel(FlowLayout(FlowLayout.LEFT, 1, 3))
        cav_amp_backward_steps_mult_label = JLabel(
            "N cav. amp. backward steps multiplier =", JLabel.RIGHT)
        self.cav_amp_backward_steps_mult_text = DoubleInputTextField(
            1.0, ScientificNumberFormat(2), 5)
        panel0.add(cav_amp_backward_steps_mult_label)
        panel0.add(self.cav_amp_backward_steps_mult_text)
        #---- cavity's wait time multiplier
        panel1 = JPanel(FlowLayout(FlowLayout.LEFT, 1, 3))
        cav_amp_wait_time_mult_label = JLabel(
            "Cav. amp. time wait multiplier =", JLabel.RIGHT)
        self.cav_amp_wait_time_mult_text = DoubleInputTextField(
            3.0, ScientificNumberFormat(2), 5)
        panel1.add(cav_amp_wait_time_mult_label)
        panel1.add(self.cav_amp_wait_time_mult_text)
        #---- cavity's safe amplitude up and down limits
        panel2 = JPanel(FlowLayout(FlowLayout.LEFT, 1, 3))
        safe_relative_amp_up_label = JLabel("Cav. amp. safe Up [%]=",
                                            JLabel.RIGHT)
        self.safe_relative_amp_up_text = DoubleInputTextField(
            7.0, ScientificNumberFormat(2), 5)
        panel2.add(safe_relative_amp_up_label)
        panel2.add(self.safe_relative_amp_up_text)
        panel3 = JPanel(FlowLayout(FlowLayout.LEFT, 1, 3))
        safe_relative_amp_down_label = JLabel("Cav. amp. safe Down [%]=",
                                              JLabel.RIGHT)
        self.safe_relative_amp_down_text = DoubleInputTextField(
            7.0, ScientificNumberFormat(2), 5)
        panel3.add(safe_relative_amp_down_label)
        panel3.add(self.safe_relative_amp_down_text)
        #----- cavity's guess phase[deg] and amplitude[%] corrections after 360 deg full scan for inner BPMs
        panel4 = JPanel(FlowLayout(FlowLayout.LEFT, 1, 3))
        guess_phase_shift_label = JLabel(
            "Cav. Guess Phase Shift after Full Scan [deg]=", JLabel.RIGHT)
        self.guess_phase_shift_text = DoubleInputTextField(
            0.0, ScientificNumberFormat(2), 5)
        panel4.add(guess_phase_shift_label)
        panel4.add(self.guess_phase_shift_text)
        panel5 = JPanel(FlowLayout(FlowLayout.LEFT, 1, 3))
        guess_cav_amp_shift_label = JLabel(
            "Cav. Amp Shift after Full Scan [%]=", JLabel.RIGHT)
        self.guess_cav_amp_shift_text = DoubleInputTextField(
            0.0, ScientificNumberFormat(2), 5)
        panel5.add(guess_cav_amp_shift_label)
        panel5.add(self.guess_cav_amp_shift_text)
        #-----------------------------------------------
        params_panel = JPanel(GridLayout(6, 1, 1, 1))
        params_panel.add(panel0)
        params_panel.add(panel1)
        params_panel.add(panel2)
        params_panel.add(panel3)
        params_panel.add(panel4)
        params_panel.add(panel5)
        #------------------------------------------------
        self.parameters_panel.add(params_panel, BorderLayout.NORTH)
        #------------------------------------------------
        self.scan_progress_bar = Scan_Progress_Bar(self.main_loop_controller,
                                                   self)
        #------------------------------------------------
        cav_wrapper.safe_relative_amp_up_text = self.safe_relative_amp_up_text
        cav_wrapper.safe_relative_amp_down_text = self.safe_relative_amp_down_text

    def getMainPanel(self):
        return self.main_panel

    def getParamsPanel(self):
        return self.parameters_panel

    def getScanProgressBarPanel(self):
        return self.scan_progress_bar.scan_progress_panel

    def getScanProgressBar(self):
        return self.scan_progress_bar

    def runSetUpAlgorithm(self):
        """ Returns (true, text) in the case of the success """
        text = "Good. Cav=" + self.cav_wrapper.alias
        return (true, text)

    def init(self):
        """ reads the pv values """
        self.cav_wrapper.init()
        self.scan_progress_bar.init()

    def writeDataToXML(self, root_da):
        """ Abstract method. This method should be implemented in the subclass """
        cav_cntrl_data_da = root_da.createChild("CAVITY_CONTROLLER_" +
                                                self.cav_wrapper.alias)

    def readDataFromXML(self, cav_cntrl_data_da):
        """ Abstract method. This method should be implemented in the subclass """
        pass

    def checkBPM_Usage(self, bpm_wrapper):
        """ Abstract method. Returns True or False about this controller usage of the BPM """
        return false

    def timeSleep(self, time_sleep):
        n_parts = 5
        tm = time_sleep / n_parts
        for ind in range(n_parts):
            time.sleep(tm)
            self.scan_progress_bar.count_and_update(tm)
            if (self.main_loop_controller.loop_run_state.shouldStop):
                return

    def setMaxTimeCount(self):
        """ 
		Abstract method. It should be implemented in each subclass.
		It returns the maximal time count.
		"""
        print "Debug. Abstract_Cavity_Controller.setMaxTimeCount() This method should be implemented in a subclass."
        self.scan_progress_bar.setMaxTimeCount(100.)
        return self.scan_progress_bar.count_max

    def getPastaFittingTime(self):
        """ Abstract method. It should be implemented in each subclass. """
        return 0.

    def initProgressBar(self):
        self.scan_progress_bar.init()

    def wrtiteAbstractCntrlToXML(self, root_da):
        abstr_cntrl_data_da = root_da.createChild(
            "ABSTRACT_CAVITY_CONTROLLER_PARAMS")
        abstr_cntrl_data_da.setValue(
            "amp_steps_mult", self.cav_amp_backward_steps_mult_text.getValue())
        abstr_cntrl_data_da.setValue(
            "amp_time_mult", self.cav_amp_wait_time_mult_text.getValue())
        abstr_cntrl_data_da.setValue("amp_safe_up_percent",
                                     self.safe_relative_amp_up_text.getValue())
        abstr_cntrl_data_da.setValue(
            "amp_safe_down_percent",
            self.safe_relative_amp_down_text.getValue())
        abstr_cntrl_data_da.setValue("guess_phase_shift",
                                     self.guess_phase_shift_text.getValue())
        abstr_cntrl_data_da.setValue("guess_amp_shift_percent",
                                     self.guess_cav_amp_shift_text.getValue())

    def readAbstractCntrlFromXML(self, root_da):
        abstr_cntrl_data_da = root_da.childAdaptor(
            "ABSTRACT_CAVITY_CONTROLLER_PARAMS")
        self.cav_amp_backward_steps_mult_text.setValue(
            abstr_cntrl_data_da.doubleValue("amp_steps_mult"))
        self.cav_amp_wait_time_mult_text.setValue(
            abstr_cntrl_data_da.doubleValue("amp_time_mult"))
        if (abstr_cntrl_data_da.hasAttribute("amp_safe_up_percent")):
            self.safe_relative_amp_up_text.setValue(
                abstr_cntrl_data_da.doubleValue("amp_safe_up_percent"))
        if (abstr_cntrl_data_da.hasAttribute("amp_safe_down_percent")):
            self.safe_relative_amp_down_text.setValue(
                abstr_cntrl_data_da.doubleValue("amp_safe_down_percent"))
        if (abstr_cntrl_data_da.hasAttribute("guess_phase_shift")):
            self.guess_phase_shift_text.setValue(
                abstr_cntrl_data_da.doubleValue("guess_phase_shift"))
        if (abstr_cntrl_data_da.hasAttribute("guess_amp_shift_percent")):
            self.guess_cav_amp_shift_text.setValue(
                abstr_cntrl_data_da.doubleValue("guess_amp_shift_percent"))
class Abstract_Cavity_Controller:
	def __init__(self,main_loop_controller,cav_wrapper):
		self.main_loop_controller = main_loop_controller
		self.cav_wrapper = cav_wrapper
		self.main_panel = JPanel(BorderLayout())
		self.parameters_panel = JPanel(BorderLayout())
		#---- backward cavity amplitude move params
		panel0 = JPanel(FlowLayout(FlowLayout.LEFT,1,3))
		cav_amp_backward_steps_mult_label = JLabel("N cav. amp. backward steps multiplier =",JLabel.RIGHT)
		self.cav_amp_backward_steps_mult_text =  DoubleInputTextField(1.0,ScientificNumberFormat(2),5)
		panel0.add(cav_amp_backward_steps_mult_label)
		panel0.add(self.cav_amp_backward_steps_mult_text)
		#---- cavity's wait time multiplier
		panel1 = JPanel(FlowLayout(FlowLayout.LEFT,1,3))
		cav_amp_wait_time_mult_label = JLabel("Cav. amp. time wait multiplier =",JLabel.RIGHT)
		self.cav_amp_wait_time_mult_text =  DoubleInputTextField(3.0,ScientificNumberFormat(2),5)
		panel1.add(cav_amp_wait_time_mult_label)
		panel1.add(self.cav_amp_wait_time_mult_text)
		#---- cavity's safe amplitude up and down limits		
		panel2 = JPanel(FlowLayout(FlowLayout.LEFT,1,3))
		safe_relative_amp_up_label = JLabel("Cav. amp. safe Up [%]=",JLabel.RIGHT)
		self.safe_relative_amp_up_text = DoubleInputTextField(7.0,ScientificNumberFormat(2),5)
		panel2.add(safe_relative_amp_up_label)
		panel2.add(self.safe_relative_amp_up_text)
		panel3 = JPanel(FlowLayout(FlowLayout.LEFT,1,3))
		safe_relative_amp_down_label = JLabel("Cav. amp. safe Down [%]=",JLabel.RIGHT)
		self.safe_relative_amp_down_text = DoubleInputTextField(7.0,ScientificNumberFormat(2),5)
		panel3.add(safe_relative_amp_down_label)
		panel3.add(self.safe_relative_amp_down_text)
		#----- cavity's guess phase[deg] and amplitude[%] corrections after 360 deg full scan for inner BPMs
		panel4 = JPanel(FlowLayout(FlowLayout.LEFT,1,3))
		guess_phase_shift_label = JLabel("Cav. Guess Phase Shift after Full Scan [deg]=",JLabel.RIGHT)
		self.guess_phase_shift_text =  DoubleInputTextField(0.0,ScientificNumberFormat(2),5)
		panel4.add(guess_phase_shift_label)
		panel4.add(self.guess_phase_shift_text)
		panel5 = JPanel(FlowLayout(FlowLayout.LEFT,1,3))
		guess_cav_amp_shift_label = JLabel("Cav. Amp Shift after Full Scan [%]=",JLabel.RIGHT)
		self.guess_cav_amp_shift_text =  DoubleInputTextField(0.0,ScientificNumberFormat(2),5)
		panel5.add(guess_cav_amp_shift_label)
		panel5.add(self.guess_cav_amp_shift_text)		
		#-----------------------------------------------
		params_panel = JPanel(GridLayout(6,1,1,1))
		params_panel.add(panel0)
		params_panel.add(panel1)
		params_panel.add(panel2)
		params_panel.add(panel3)
		params_panel.add(panel4)
		params_panel.add(panel5)
		#------------------------------------------------
		self.parameters_panel.add(params_panel,BorderLayout.NORTH)
		#------------------------------------------------
		self.scan_progress_bar = Scan_Progress_Bar(self.main_loop_controller,self)
		#------------------------------------------------
		cav_wrapper.safe_relative_amp_up_text = self.safe_relative_amp_up_text
		cav_wrapper.safe_relative_amp_down_text = self.safe_relative_amp_down_text

	def getMainPanel(self):
		return self.main_panel	
		
	def getParamsPanel(self):
		return self.parameters_panel		
		
	def getScanProgressBarPanel(self):
		return self.scan_progress_bar.scan_progress_panel
		
	def getScanProgressBar(self):
		return self.scan_progress_bar
	
	def runSetUpAlgorithm(self):
		""" Returns (true, text) in the case of the success """
		text = "Good. Cav="+self.cav_wrapper.alias
		return (true,text)
		
	def init(self):
		""" reads the pv values """ 
		self.cav_wrapper.init()
		self.scan_progress_bar.init()
		
	def writeDataToXML(self,root_da):
		""" Abstract method. This method should be implemented in the subclass """
		cav_cntrl_data_da = root_da.createChild("CAVITY_CONTROLLER_"+self.cav_wrapper.alias)
		
	def readDataFromXML(self,cav_cntrl_data_da):
		""" Abstract method. This method should be implemented in the subclass """
		pass
	
	def checkBPM_Usage(self,bpm_wrapper):
		""" Abstract method. Returns True or False about this controller usage of the BPM """
		return false
	
	def timeSleep(self, time_sleep):
		n_parts = 5
		tm = time_sleep/n_parts
		for ind in range(n_parts):
			time.sleep(tm)
			self.scan_progress_bar.count_and_update(tm)
			if(self.main_loop_controller.loop_run_state.shouldStop):
				return
			
	def setMaxTimeCount(self):
		""" 
		Abstract method. It should be implemented in each subclass.
		It returns the maximal time count.
		"""
		print "Debug. Abstract_Cavity_Controller.setMaxTimeCount() This method should be implemented in a subclass."
		self.scan_progress_bar.setMaxTimeCount(100.)
		return self.scan_progress_bar.count_max
		
	def getPastaFittingTime(self):
		""" Abstract method. It should be implemented in each subclass. """
		return 0.
		
	def initProgressBar(self):
		self.scan_progress_bar.init()
			
	def wrtiteAbstractCntrlToXML(self,root_da):
		abstr_cntrl_data_da = root_da.createChild("ABSTRACT_CAVITY_CONTROLLER_PARAMS")	
		abstr_cntrl_data_da.setValue("amp_steps_mult",self.cav_amp_backward_steps_mult_text.getValue())
		abstr_cntrl_data_da.setValue("amp_time_mult",self.cav_amp_wait_time_mult_text.getValue())
		abstr_cntrl_data_da.setValue("amp_safe_up_percent",self.safe_relative_amp_up_text.getValue())
		abstr_cntrl_data_da.setValue("amp_safe_down_percent",self.safe_relative_amp_down_text.getValue())
		abstr_cntrl_data_da.setValue("guess_phase_shift",self.guess_phase_shift_text.getValue())
		abstr_cntrl_data_da.setValue("guess_amp_shift_percent",self.guess_cav_amp_shift_text.getValue())
		
	def readAbstractCntrlFromXML(self,root_da):
		abstr_cntrl_data_da = root_da.childAdaptor("ABSTRACT_CAVITY_CONTROLLER_PARAMS")
		self.cav_amp_backward_steps_mult_text.setValue(abstr_cntrl_data_da.doubleValue("amp_steps_mult"))
		self.cav_amp_wait_time_mult_text.setValue(abstr_cntrl_data_da.doubleValue("amp_time_mult"))
		if(abstr_cntrl_data_da.hasAttribute("amp_safe_up_percent")):
			self.safe_relative_amp_up_text.setValue(abstr_cntrl_data_da.doubleValue("amp_safe_up_percent"))
		if(abstr_cntrl_data_da.hasAttribute("amp_safe_down_percent")):
			self.safe_relative_amp_down_text.setValue(abstr_cntrl_data_da.doubleValue("amp_safe_down_percent"))
		if(abstr_cntrl_data_da.hasAttribute("guess_phase_shift")):
			self.guess_phase_shift_text.setValue(abstr_cntrl_data_da.doubleValue("guess_phase_shift"))
		if(abstr_cntrl_data_da.hasAttribute("guess_amp_shift_percent")):
			self.guess_cav_amp_shift_text.setValue(abstr_cntrl_data_da.doubleValue("guess_amp_shift_percent"))