示例#1
0
    def initialize_content(self):
        # Constraints
        dv = QtGui.QDoubleValidator(self._content.ei_guess_edit)
        dv.setBottom(0.0)
        self._content.ei_guess_edit.setValidator(dv)
        if "SNS" != self._facility_name:
            util.set_valid(self._content.ei_guess_edit, False)
        self._content.tzero_guess_edit.setValidator(QtGui.QDoubleValidator(self._content.tzero_guess_edit))
        self._content.etr_low_edit.setValidator(QtGui.QDoubleValidator(self._content.etr_low_edit))
        self._content.etr_width_edit.setValidator(QtGui.QDoubleValidator(self._content.etr_width_edit))
        self._content.etr_high_edit.setValidator(QtGui.QDoubleValidator(self._content.etr_high_edit))
        self._content.monitor1_specid_edit.setValidator(QtGui.QIntValidator(self._content.monitor1_specid_edit))
        self._content.monitor2_specid_edit.setValidator(QtGui.QIntValidator(self._content.monitor2_specid_edit))

        # Default states
        self._handle_tzero_guess(self._content.use_ei_guess_chkbox.isChecked())

        # Connections
        self.connect(self._content.sample_browse, QtCore.SIGNAL("clicked()"),
                     self._sample_browse)
        self.connect(self._content.detcal_browse, QtCore.SIGNAL("clicked()"),
                     self._detcal_browse)
        self.connect(self._content.hardmask_browse, QtCore.SIGNAL("clicked()"),
                     self._hardmask_browse)
        self.connect(self._content.grouping_browse, QtCore.SIGNAL("clicked()"),
                     self._grouping_browse)
        self.connect(self._content.use_ei_guess_chkbox, QtCore.SIGNAL("stateChanged(int)"),
                     self._handle_tzero_guess)
        self.connect(self._content.savedir_browse, QtCore.SIGNAL("clicked()"),
                     self._savedir_browse)

        # Validated widgets
        self._connect_validated_lineedit(self._content.sample_edit)
        self._connect_validated_lineedit(self._content.ei_guess_edit)
        self._connect_validated_lineedit(self._content.savedir_edit)
示例#2
0
 def _validate_edit(self, ctrl=None):
     is_valid = True
     if "isValid" in dir(ctrl): # For mwRunFiles widget
         if not ctrl.isValid():
             is_valid = False
     else:
         if not ctrl.text():
             is_valid = False
     util.set_valid(ctrl, is_valid)
示例#3
0
    def _update_high_q(self, ws=None):
        """
            Update High-Q data set
        """
        self._high_q_data = self.update_data(self._content.high_q_combo,
                                             None,
                                             None,
                                             self._content.high_scale_edit)
        self._high_q_modified = False

        file = str(self._content.high_q_combo.lineEdit().text())
        if len(file.strip())==0:
            self._high_q_data = None
        elif os.path.isfile(file) or AnalysisDataService.doesExist(file):
            self._high_q_data = DataSet(file)
            try:
                self._high_q_data.load(True)
            except:
                self._high_q_data = None
                util.set_valid(self._content.high_q_combo.lineEdit(), False)
                QtGui.QMessageBox.warning(self, "Error loading file", "Could not load %s.\nMake sure you pick the XML output from the reduction." % file)
                return
            self._content.high_scale_edit.setText("1.0")
            npts = self._high_q_data.get_number_of_points()
            util.set_valid(self._content.high_q_combo.lineEdit(), True)
        else:
            self._high_q_data = None
            util.set_valid(self._content.high_q_combo.lineEdit(), False)
示例#4
0
    def _update_high_q(self, _ws=None):
        """
            Update High-Q data set
        """
        self._high_q_data = self.update_data(self._content.high_q_combo,
                                             None,
                                             None,
                                             self._content.high_scale_edit)
        self._high_q_modified = False

        file_in = str(self._content.high_q_combo.lineEdit().text())
        if len(file_in.strip()) == 0:
            self._high_q_data = None
        elif os.path.isfile(file_in) or AnalysisDataService.doesExist(file_in):
            self._high_q_data = DataSet(file_in)
            try:
                self._high_q_data.load(True)
            except (AttributeError, ImportError, NameError, TypeError, ValueError, Warning):
                self._high_q_data = None
                util.set_valid(self._content.high_q_combo.lineEdit(), False)
                QtGui.QMessageBox.warning(self, "Error loading file",
                                          "Could not load %s.\nMake sure you pick the XML output from the reduction." % file_in)
                return
            self._content.high_scale_edit.setText("1.0")
            util.set_valid(self._content.high_q_combo.lineEdit(), True)
        else:
            self._high_q_data = None
            util.set_valid(self._content.high_q_combo.lineEdit(), False)
示例#5
0
    def update_data(self, dataset_control, min_control, max_control,
                    scale_control):
        """
            Update a data set

            @param dataset_control: combo box with the file path or workspace name
            @param min_control: text widget containing the minimum Q of the overlap region
            @param max_control: text widget containing the maximum Q of the overlap region
            @param scale_control: text widget containing the scale (can be input or output)
        """
        data_object = None

        file_in = str(dataset_control.lineEdit().text())
        if len(file_in.strip()) == 0:
            data_object = None
        elif os.path.isfile(file_in) or AnalysisDataService.doesExist(file_in):
            data_object = DataSet(file_in)
            try:
                data_object.load(True)
            except (AttributeError, ImportError, NameError, TypeError,
                    ValueError, Warning):
                data_object = None
                util.set_valid(dataset_control.lineEdit(), False)
                QtGui.QMessageBox.warning(
                    self, "Error loading file",
                    "Could not load %s.\nMake sure you pick the XML output from the reduction."
                    % file_in)
                return
            if min_control is not None and max_control is not None \
                    and (len(min_control.text()) == 0 or len(max_control.text()) == 0):
                minx, maxx = data_object.get_range()
                min_control.setText("%-6.3g" % minx)
                max_control.setText("%-6.3g" % maxx)

            # Set the reference scale, unless we just loaded the data
            if len(scale_control.text()) == 0:
                scale_control.setText("1.0")
            else:
                scale = util._check_and_get_float_line_edit(scale_control)
                data_object.set_scale(scale)

            util.set_valid(dataset_control.lineEdit(), True)
        else:
            data_object = None
            util.set_valid(dataset_control.lineEdit(), False)
        self._plotted = False

        return data_object
示例#6
0
    def update_data(self, dataset_control, min_control, max_control,
                    scale_control):
        """
            Update a data set

            @param dataset_control: combo box with the file path or workspace name
            @param min_control: text widget containing the minimum Q of the overlap region
            @param max_control: text widget containing the maximum Q of the overlap region
            @param scale_control: text widget containing the scale (can be input or output)
        """
        data_object = None

        file_in = str(dataset_control.lineEdit().text())
        if len(file_in.strip()) == 0:
            data_object = None
        elif os.path.isfile(file_in) or AnalysisDataService.doesExist(file_in):
            data_object = DataSet(file_in)
            try:
                data_object.load(True)
            except (StandardError, Warning):
                data_object = None
                util.set_valid(dataset_control.lineEdit(), False)
                QtGui.QMessageBox.warning(self, "Error loading file",
                                          "Could not load %s.\nMake sure you pick the XML output from the reduction." % file_in)
                return
            if min_control is not None and max_control is not None \
                    and (len(min_control.text()) == 0 or len(max_control.text()) == 0):
                minx, maxx = data_object.get_range()
                min_control.setText("%-6.3g" % minx)
                max_control.setText("%-6.3g" % maxx)

            # Set the reference scale, unless we just loaded the data
            if len(scale_control.text()) == 0:
                scale_control.setText("1.0")
            else:
                scale = util._check_and_get_float_line_edit(scale_control)
                data_object.set_scale(scale)

            _npts = data_object.get_number_of_points()
            util.set_valid(dataset_control.lineEdit(), True)
        else:
            data_object = None
            util.set_valid(dataset_control.lineEdit(), False)
        self._plotted = False

        return data_object
示例#7
0
 def _check_and_set_lineedit_content(self, lineedit, content):
     lineedit.setText(content)
     util.set_valid(lineedit, not lineedit.text() == '')
示例#8
0
 def _check_and_set_lineedit_content(self, lineedit, content):
     lineedit.setText(content)
     util.set_valid(lineedit, not lineedit.text() == '')
示例#9
0
    def _update_content(self):
        """
            Get the job status from the compute resource and
            update the job table content.
        """
        self._fill_in_defaults()
        
        user = str(self._content.username_edit.text())
        pwd = str(self._content.password_edit.text())
        if len(user)==0 or len(pwd)==0:
            util.set_valid(self._content.username_edit, False)
            util.set_valid(self._content.password_edit, False)
            return
        else:
            self._settings.cluster_user = user
            self._settings.cluster_pass = pwd
            util.set_valid(self._content.username_edit, True)
            util.set_valid(self._content.password_edit, True)
        alg = AlgorithmManager.create("Authenticate")
        alg.initialize()
        alg.setProperty("ComputeResource", str(self._settings.compute_resource))
        alg.setProperty("UserName", str(self._settings.cluster_user))
        alg.setProperty("Password", str(self._settings.cluster_pass))
        alg.execute()
        
        alg = AlgorithmManager.create("QueryAllRemoteJobs")
        alg.initialize()
        alg.setProperty("ComputeResource", str(self._settings.compute_resource))
        alg.execute()
        job_id = alg.getProperty("JobId").value
        job_status = alg.getProperty("JobStatusString").value
        job_name = alg.getProperty("JobName").value
        job_trans_id = alg.getProperty("TransID").value
        
        njobs = len(job_name)
        job_start = alg.getProperty("StartDate").value
        job_end = alg.getProperty("CompletionDate").value
                
        job_list = zip(*(job_id, job_status, job_name, job_start, job_end, job_trans_id))
        
        self._clear_table()
        self._content.job_table.setSortingEnabled(False)
        self._content.job_table.setRowCount(len(job_list))
        unavailable = DateAndTime(0)
        unavailable.setToMinimum()

        for i in range(len(job_list)):
            # Make sure that only recent jobs are displayed
            oldest = DateAndTime(str(self._content.date_time_edit.dateTime().toString(QtCore.Qt.ISODate)))
            end_time = job_list[i][4]
            if end_time == '': 
                job_end = unavailable
            else:
                job_end = DateAndTime(end_time)
            if job_end>unavailable and job_end<oldest:
                self._content.job_table.setRowHidden(i, True)
                continue
            self._content.job_table.setRowHidden(i, False)

            # Job ID
            item = QtGui.QTableWidgetItem(str(job_list[i][0]))
            item.setFlags(QtCore.Qt.ItemIsSelectable |QtCore.Qt.ItemIsEnabled )
            self._content.job_table.setItem(i, 0, item)
            job_id = str(job_list[i][0])
          
            # Title
            item = QtGui.QTableWidgetItem(str(job_list[i][2]))
            item.setFlags(QtCore.Qt.ItemIsSelectable |QtCore.Qt.ItemIsEnabled )
            self._content.job_table.setItem(i, 1, item)
          
            # Status
            item = QtGui.QTableWidgetItem(str(job_list[i][1]))
            item.setFlags(QtCore.Qt.ItemIsSelectable |QtCore.Qt.ItemIsEnabled )
            self._content.job_table.setItem(i, 2, item)
            is_running = str(job_list[i][1]).lower()=='running'
            
            # Start time
            time_displayed = str(job_list[i][3]).replace('T', ' ')
            if DateAndTime(job_list[i][3]) == unavailable:
                time_displayed = ''
            item = QtGui.QTableWidgetItem(time_displayed)
            item.setFlags(QtCore.Qt.ItemIsSelectable |QtCore.Qt.ItemIsEnabled )
            self._content.job_table.setItem(i, 3, item)
            
            # Completion time
            time_displayed = end_time.replace('T', ' ')
            if job_end == unavailable:
                time_displayed = ''
            item = QtGui.QTableWidgetItem(time_displayed)
            item.setFlags(QtCore.Qt.ItemIsSelectable |QtCore.Qt.ItemIsEnabled )
            self._content.job_table.setItem(i, 4, item)
            
            # create an cell widget
            btn = QtGui.QPushButton(self._content.job_table)
            if is_running:
                btn.setText('Abort')
                btn.setToolTip('Cleanly abort this job')
            else:
                btn.setText('Remove')
                btn.setToolTip('Remove this job and its temporary files')
            call_back = partial(self._remove_job, is_running=is_running, job_id=job_id, trans_id=job_list[i][5])
            self.connect(btn, QtCore.SIGNAL("clicked()"), call_back)
            self._content.job_table.setCellWidget(i, 5, btn)          


        self._content.job_table.setSortingEnabled(True)
        self._content.job_table.sortItems(3, 1)
示例#10
0
 def _validate_edit(self, ctrl=None):
     is_valid = True
     if not ctrl.text():
         is_valid = False
     util.set_valid(ctrl, is_valid)
示例#11
0
    def _update_content(self):
        """
            Get the job status from the compute resource and
            update the job table content.
        """
        self._fill_in_defaults()

        user = str(self._content.username_edit.text())
        pwd = str(self._content.password_edit.text())
        if len(user) == 0 or len(pwd) == 0:
            util.set_valid(self._content.username_edit, False)
            util.set_valid(self._content.password_edit, False)
            return
        else:
            self._settings.cluster_user = user
            self._settings.cluster_pass = pwd
            util.set_valid(self._content.username_edit, True)
            util.set_valid(self._content.password_edit, True)
        # Note: here and in the following create() calls. Version 1 of
        # the remote algorithms is guaranteed to work at SNS. Version
        # 2 generalizes the remote algorithms (see tickets #9277 and
        # #11126). While the v2 implementation for the remote job
        # submission API has been refactored without changes, it would
        # need to be tested before upgrading v1->v2 in this script.
        alg = AlgorithmManager.create("Authenticate", 1)
        alg.initialize()
        alg.setProperty("ComputeResource",
                        str(self._settings.compute_resource))
        alg.setProperty("UserName", str(self._settings.cluster_user))
        alg.setProperty("Password", str(self._settings.cluster_pass))
        alg.execute()

        alg = AlgorithmManager.create("QueryAllRemoteJobs", 1)
        alg.initialize()
        alg.setProperty("ComputeResource",
                        str(self._settings.compute_resource))
        alg.execute()
        job_id = alg.getProperty("JobId").value
        job_status = alg.getProperty("JobStatusString").value
        job_name = alg.getProperty("JobName").value
        job_trans_id = alg.getProperty("TransID").value

        njobs = len(job_name)
        job_start = alg.getProperty("StartDate").value
        job_end = alg.getProperty("CompletionDate").value

        job_list = zip(*(job_id, job_status, job_name, job_start, job_end,
                         job_trans_id))

        self._clear_table()
        self._content.job_table.setSortingEnabled(False)
        self._content.job_table.setRowCount(len(job_list))
        unavailable = DateAndTime(0)
        unavailable.setToMinimum()

        for i in range(len(job_list)):
            # Make sure that only recent jobs are displayed
            oldest = DateAndTime(
                str(self._content.date_time_edit.dateTime().toString(
                    QtCore.Qt.ISODate)))
            end_time = job_list[i][4]
            if end_time == '':
                job_end = unavailable
            else:
                job_end = DateAndTime(end_time)
            if job_end > unavailable and job_end < oldest:
                self._content.job_table.setRowHidden(i, True)
                continue
            self._content.job_table.setRowHidden(i, False)

            # Job ID
            item = QtGui.QTableWidgetItem(str(job_list[i][0]))
            item.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled)
            self._content.job_table.setItem(i, 0, item)
            job_id = str(job_list[i][0])

            # Title
            item = QtGui.QTableWidgetItem(str(job_list[i][2]))
            item.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled)
            self._content.job_table.setItem(i, 1, item)

            # Status
            item = QtGui.QTableWidgetItem(str(job_list[i][1]))
            item.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled)
            self._content.job_table.setItem(i, 2, item)
            is_running = str(job_list[i][1]).lower() == 'running'

            # Start time
            time_displayed = str(job_list[i][3]).replace('T', ' ')
            if DateAndTime(job_list[i][3]) == unavailable:
                time_displayed = ''
            item = QtGui.QTableWidgetItem(time_displayed)
            item.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled)
            self._content.job_table.setItem(i, 3, item)

            # Completion time
            time_displayed = end_time.replace('T', ' ')
            if job_end == unavailable:
                time_displayed = ''
            item = QtGui.QTableWidgetItem(time_displayed)
            item.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled)
            self._content.job_table.setItem(i, 4, item)

            # create an cell widget
            btn = QtGui.QPushButton(self._content.job_table)
            if is_running:
                btn.setText('Abort')
                btn.setToolTip('Cleanly abort this job')
            else:
                btn.setText('Remove')
                btn.setToolTip('Remove this job and its temporary files')
            call_back = partial(self._remove_job,
                                is_running=is_running,
                                job_id=job_id,
                                trans_id=job_list[i][5])
            self.connect(btn, QtCore.SIGNAL("clicked()"), call_back)
            self._content.job_table.setCellWidget(i, 5, btn)

        self._content.job_table.setSortingEnabled(True)
        self._content.job_table.sortItems(3, 1)
示例#12
0
 def _validate_edit(self, ctrl=None):
     is_valid = True
     if not ctrl.text():
         is_valid = False
     util.set_valid(ctrl, is_valid)