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)
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)
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)
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)
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
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
def _check_and_set_lineedit_content(self, lineedit, content): lineedit.setText(content) util.set_valid(lineedit, not lineedit.text() == '')
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)
def _validate_edit(self, ctrl=None): is_valid = True if not ctrl.text(): is_valid = False util.set_valid(ctrl, is_valid)
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)