def readSettings(self): ''' ''' settings = QtCore.QSettings() settings.beginGroup("LeginonUI") val = settings.value('leginonDB') if val: self.ui.leginonHostnameLineEdit.setText(val) val = settings.value('leginonPath') if val: self.ui.leginonDBNameLineEdit.setText(val) val = settings.value('projectDB') if val: self.ui.projectHostnameLineEdit.setText(val) val = settings.value('projectPath') if val: self.ui.projectDBNameLineEdit.setText(val) self.ui.usernameLineEdit.setText(settings.value('targetuser')) self.ui.passwordLineEdit.setText(settings.value('targetpass')) val = settings.value('username') if val: self.ui.dbUsernameLineEdit.setText(val) val = settings.value('password') if val: self.ui.dbPasswordLineEdit.setText(base64.b64decode(val)) #self.ui.alternateUserLineEdit.setText(settings.value('alternate-user')) settings.endGroup() if self.ui.usernameLineEdit.text() == "": self.ui.usernameLineEdit.setText(getpass.getuser())
def __init__(self, parent=None, helpDialog=None): ''' ''' QtGui.QWidget.__init__(self, parent) self.ui = Ui_Form() self.timer_interval=500 self.ui.jobUpdateTimer = QtCore.QTimer(self) self.ui.jobUpdateTimer.setInterval(self.timer_interval) self.ui.jobUpdateTimer.setSingleShot(False) self.helpDialog=helpDialog self.last_offset=0 self.total_running=0 self.ui.setupUi(self) #self.ui.pushButton.clicked.connect(self.runProgram) self.ui.jobUpdateTimer.timeout.connect(self.on_jobUpdateTimer_timeout) self.ui.jobProgressBar.setMinimum(0) self.ui.jobListView.setModel(QtGui.QStandardItemModel(self)) self.job_status_icons=[QtGui.QIcon(f) for f in [':/mini/mini/clock.png', ':/mini/mini/arrow_refresh.png', ':/mini/mini/tick.png', ':/mini/mini/cross.png']] self.ui.crashReportToolButton.setEnabled(False) #self.text_cursor = QtGui.QTextCursor(self.ui.logTextEdit.document()) self.current_pid = None self.fin = None self.log_file = None self.created = None self.log_text="" self.workflowProcess=None
def on_loadImagesPushButton_clicked(self): ''' Load the current batch of images into the list ''' selmodel = self.ui.imageListView.selectionModel() self.disconnect( selmodel, QtCore.SIGNAL( "selectionChanged(const QItemSelection &, const QItemSelection &)" ), self.onSelectionChanged) ImageViewerWindow.on_loadImagesPushButton_clicked(self) selmodel = self.ui.imageListView.selectionModel() self.connect( selmodel, QtCore.SIGNAL( "selectionChanged(const QItemSelection &, const QItemSelection &)" ), self.onSelectionChanged)
def on_monitorInformationToolButton_clicked(self): ''' ''' if self.helpDialog is not None: self.helpDialog.setHTML(self.ui.pushButton.toolTip()) self.helpDialog.show() else: QtGui.QToolTip.showText(self.ui.pushButton.mapToGlobal(QtCore.QPoint(0,0)), self.ui.pushButton.toolTip())
def getSettings(self): ''' Get the settings object ''' ''' return QtCore.QSettings(QtCore.QSettings.IniFormat, QtCore.QSettings.UserScope, "Arachnid", "ImageScreen") ''' if self.inifile == "": return None return QtCore.QSettings(self.inifile, QtCore.QSettings.IniFormat)
def writeSettings(self): ''' ''' settings = QtCore.QSettings() settings.beginGroup("ProjectUI") settings.setValue('spiderExecutable', self.ui.spiderExecutableLineEdit.text()) settings.endGroup()
def readSettings(self): ''' ''' settings = QtCore.QSettings() settings.beginGroup("ProjectUI") val = settings.value('spiderExecutable') if val: self.ui.spiderExecutableLineEdit.setText(val) settings.endGroup()
def registerPage(self, wizardPage): ''' ''' wizardPage.registerField( wizardPage.wizard().param("raw_reference_file*"), self.ui.referenceLineEdit) wizardPage.registerField(wizardPage.wizard().param("curr_apix*"), self.ui.referencePixelSizeDoubleSpinBox, "value", QtCore.SIGNAL('valueChanged(double)'))
def setup(self): ''' Display specific setup ''' selmodel = self.ui.imageListView.selectionModel() self.connect( selmodel, QtCore.SIGNAL( "selectionChanged(const QItemSelection &, const QItemSelection &)" ), self.onSelectionChanged) self.ui.imageListView.setStyleSheet( 'QListView::item:selected{ color: #008000; border: 3px solid #6FFF00; }' )
def on_imageZoomDoubleSpinBox_valueChanged(self, zoom=None): ''' Called when the user wants to plot only a subset of the data :Parameters: index : int New index in the subset combobox ''' if zoom is None: zoom = self.ui.imageZoomDoubleSpinBox.value() self.ui.zoomSlider.blockSignals(True) self.ui.zoomSlider.setValue(int(self.ui.zoomSlider.maximum() * zoom)) self.ui.zoomSlider.blockSignals(False) if self.imagesize > 0: n = max(5, int(self.imagesize * zoom)) self.ui.imageListView.setIconSize(QtCore.QSize(n, n))
def writeSettings(self): ''' ''' settings = QtCore.QSettings() settings.beginGroup("LeginonUI") settings.setValue('leginonDB', self.ui.leginonHostnameLineEdit.text()) settings.setValue('leginonPath', self.ui.leginonDBNameLineEdit.text()) settings.setValue('projectDB', self.ui.projectHostnameLineEdit.text()) settings.setValue('projectPath', self.ui.projectDBNameLineEdit.text()) settings.setValue('targetuser', self.ui.usernameLineEdit.text()) settings.setValue('targetpass', self.ui.passwordLineEdit.text()) settings.setValue('username', self.ui.dbUsernameLineEdit.text()) settings.setValue('password', base64.b64encode(self.ui.dbPasswordLineEdit.text())) #settings.setValue('alternate-user', self.ui.alternateUserLineEdit.text()) settings.endGroup()
def on_loadImagesPushButton_clicked(self): ''' Load the current batch of images into the list ''' if len(self.files) == 0: return self.imageListModel.clear() index, start = self.imageSubset(self.ui.pageSpinBox.value() - 1, self.ui.imageCountSpinBox.value()) if len(index) == 0: self.ui.pageSpinBox.blockSignals(True) self.ui.pageSpinBox.setValue(0) self.ui.pageSpinBox.blockSignals(False) self.ui.imageCountSpinBox.blockSignals(True) self.ui.imageCountSpinBox.setValue(1) self.ui.imageCountSpinBox.blockSignals(False) index, start = self.imageSubset(0, 1) bin_factor = self.ui.decimateSpinBox.value() nstd = self.ui.clampDoubleSpinBox.value() img = None self.loaded_images = [] self.base_level = None zoom = self.ui.imageZoomDoubleSpinBox.value() masks = {} template = self.get_template() progressDialog = QtGui.QProgressDialog('Opening...', "Cancel", 0, len(index), self) progressDialog.setWindowModality(QtCore.Qt.WindowModal) progressDialog.show() self.ui.imageListView.setModel(None) if not drawing.is_available(): _logger.info("No PIL loaded") self.advanced_settings.mark_image = False if not plotting.is_available(): _logger.info("No matplotlib loaded") self.advanced_settings.mark_image = False current_powerspec = self.advanced_settings.current_powerspec if current_powerspec: if self.advanced_settings.invert: _logger.info("Cannot invert a power spectra") else: if self.advanced_settings.center_mask > 0: _logger.info("Cannot mask micrograph") added_items = [] for i, (imgname, img, pixel_size) in enumerate( iter_images(self.files, index, template)): selimg = None progressDialog.setValue(i + 1) if hasattr(img, 'ndim'): if current_powerspec and self.advanced_settings.center_mask > 0 and img.shape not in masks: masks[img.shape] = ndimage_utility.model_disk( self.advanced_settings.center_mask, img.shape) * -1 + 1 if self.advanced_settings.invert and not current_powerspec: if img.max() != img.min(): ndimage_utility.invert(img, img) img = ndimage_utility.replace_outlier(img, nstd, nstd, replace='mean') if self.advanced_settings.gaussian_high_pass > 0.0: img = ndimage_filter.filter_gaussian_highpass( img, pixel_size / self.advanced_settings.gaussian_high_pass) if self.advanced_settings.gaussian_low_pass > 0.0: img = ndimage_filter.filter_gaussian_lowpass( img, pixel_size / self.advanced_settings.gaussian_low_pass) if current_powerspec and self.advanced_settings.center_mask > 0: #img[numpy.logical_not(masks[img.shape])] = numpy.mean(img[masks[img.shape]]) img *= masks[img.shape] if bin_factor > 1.0: img = ndimage_interpolate.interpolate( img, bin_factor, self.advanced_settings.downsample_type) pixel_size *= bin_factor img = self.display_powerspectra_1D(img, imgname, pixel_size) img = self.display_resolution(img, imgname, pixel_size) img = self.box_particles(img, imgname) if self.advanced_settings.mark_image: imgm = self.imageMarker(img) selimg = qimage_utility.numpy_to_qimage(imgm) qimg = qimage_utility.numpy_to_qimage(img) if img.ndim == 2: if self.base_level is not None: qimg.setColorTable(self.color_level) else: self.base_level = qimg.colorTable() self.color_level = qimage_utility.adjust_level( qimage_utility.change_contrast, self.base_level, self.ui.contrastSlider.value()) qimg.setColorTable(self.color_level) else: if self.base_level is None: self.base_level = [] self.base_level.append(qimg.colorTable()) self.color_level = qimage_utility.adjust_level( qimage_utility.change_contrast, self.base_level[-1], self.ui.contrastSlider.value()) qimg.setColorTable(self.color_level) else: qimg = img.convertToFormat(QtGui.QImage.Format_Indexed8) if self.base_level is None: self.base_level = [] self.base_level.append(qimg.colorTable()) self.color_level = qimage_utility.adjust_level( qimage_utility.change_contrast, self.base_level[-1], self.ui.contrastSlider.value()) qimg.setColorTable(self.color_level) self.loaded_images.append(qimg) pix = QtGui.QPixmap.fromImage(qimg) icon = QtGui.QIcon() icon.addPixmap(pix, QtGui.QIcon.Normal) if selimg is not None: pix = QtGui.QPixmap.fromImage(selimg) icon.addPixmap(pix, QtGui.QIcon.Selected) if self.advanced_settings.show_label: item = QtGui.QStandardItem( icon, "%s/%d" % (os.path.basename(imgname[0]), imgname[1] + 1)) else: item = QtGui.QStandardItem(icon, "") if hasattr(start, '__iter__'): item.setData(start[i], QtCore.Qt.UserRole) else: item.setData(i + start, QtCore.Qt.UserRole) self.addToolTipImage(imgname, item, pixel_size) self.imageListModel.appendRow(item) added_items.append(item) self.ui.imageListView.setModel(self.imageListModel) progressDialog.hide() for item in added_items: self.notify_added_item(item) self.imagesize = img.shape[0] if hasattr(img, 'shape') else img.width() n = max(5, int(self.imagesize * zoom)) self.ui.imageListView.setIconSize(QtCore.QSize(n, n)) batch_count = numpy.ceil( float(self.imageTotal()) / self.ui.imageCountSpinBox.value()) self.ui.pageSpinBox.setSuffix(" of %d" % batch_count) self.ui.pageSpinBox.setMaximum(batch_count) self.ui.actionForward.setEnabled( self.ui.pageSpinBox.value() < batch_count) self.ui.actionBackward.setEnabled(self.ui.pageSpinBox.value() > 0)
def __init__(self, parent=None): "Initialize a image display window" QtGui.QMainWindow.__init__(self, parent) # Setup logging root = logging.getLogger() while len(root.handlers) > 0: root.removeHandler(root.handlers[0]) h = logging.StreamHandler() h.setFormatter(logging.Formatter('%(message)s')) root.addHandler(h) # Build window _logger.info("\rBuilding main window ...") self.ui = Ui_MainWindow() self.ui.setupUi(self) # Setup variables self.lastpath = str(QtCore.QDir.currentPath()) self.loaded_images = [] self.files = [] self.file_index = [] self.color_level = None self.base_level = None self.inifile = '' #'ara_view.ini' self.settings_group = 'ImageViewer' self.imagesize = 0 # Image View self.imageListModel = QtGui.QStandardItemModel(self) self.ui.imageListView.setModel(self.imageListModel) #self.templateListModel = QtGui.QStandardItemModel(self) #self.ui.templateListView.setModel(self.templateListModel) # Empty init self.ui.actionForward.setEnabled(False) self.ui.actionBackward.setEnabled(False) self.setup() self.ui.autopickWidget = AutoPickWidget(self) self.ui.tabWidget.addTab(self.ui.autopickWidget, "AutoPick") self.ui.tabWidget.currentChanged.connect(self.tabValid) # Custom Actions self.ui.dockWidgetAction = self.ui.dockWidget.toggleViewAction() self.ui.whatsThisAction = QtGui.QWhatsThis.createAction(self) icon8 = QtGui.QIcon() icon8.addPixmap(QtGui.QPixmap(":/mini/mini/application_side_list.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.ui.dockWidgetAction.setIcon(icon8) self.ui.dockWidgetAction.setToolTip("Show or hide the controls widget") self.ui.dockWidgetAction.setWhatsThis( QtGui.QApplication.translate( "MainWindow", '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">\n<html><head><meta name="qrichtext" content="1" /><style type="text/css">\np, li { white-space: pre-wrap; }\n</style></head><body style=" font-family:\'Lucida Grande\'; font-size:13pt; font-weight:400; font-style:normal;">\n<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/mini/mini/application_side_list.png" /> Display/Hide the controls widget</p>\n<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>\n<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This widget can be hidden to increase the number of images that can be shown.</p></body></html>', None, QtGui.QApplication.UnicodeUTF8)) self.ui.toolBar.addAction(self.ui.dockWidgetAction) self.ui.toolBar.addAction(self.ui.whatsThisAction) # Create advanced settings property.setView(self.ui.advancedSettingsTreeView) self.advanced_settings, self.advanced_names = self.ui.advancedSettingsTreeView.model( ).addOptionList(self.advancedSettings()) self.ui.advancedSettingsTreeView.setStyleSheet( 'QTreeView::item[readOnly="true"]{ color: #000000; }') for i in xrange( self.ui.advancedSettingsTreeView.model().rowCount() - 1, 0, -1): if self.ui.advancedSettingsTreeView.model().index( i, 0).internalPointer().isReadOnly( ): # Hide widget items (read only) self.ui.advancedSettingsTreeView.setRowHidden( i, QtCore.QModelIndex(), True) # Help system self.helpDialog = HelpDialog(self) _logger.info("\rLoading settings ...") self.loadSettings()
def registerPage(self, wizardPage): ''' ''' wizardPage.registerField("sessions*", self, "selected", QtCore.SIGNAL('selectionChanged()'))
def __init__(self, parent=None): "Initialize a image display window" QtGui.QMainWindow.__init__(self, parent) # Setup logging root = logging.getLogger() while len(root.handlers) > 0: root.removeHandler(root.handlers[0]) h = logging.StreamHandler() h.setFormatter(logging.Formatter('%(message)s')) root.addHandler(h) # Build window _logger.info("\rBuilding main window ...") self.ui = Ui_MainWindow() self.ui.setupUi(self) # Setup variables self.lastpath = str(QtCore.QDir.currentPath()) self.coordinates_files = [] self.stack_file = "" self.inifile = "" #'ara_view.ini' self.data = None self.header = None self.group_indices = None self.label_cols = [] self.rtsq_cols = [] self.select_col = -1 self.markers = ['s', 'o', '^', '>', 'v', 'd', 'p', 'h', '8', '+', 'x'] self.selectedImage = None # Setup Plotting View self.fig = Figure((6.0, 4.0)) #, dpi=self.ui.dpiSpinBox.value()) self.ui.canvas = FigureCanvas(self.fig) self.ui.canvas.setParent(self.ui.centralwidget) self.axes = self.fig.add_subplot(111) self.ui.centralHLayout.addWidget(self.ui.canvas) self.ui.centralHLayout.setStretchFactor(self.ui.canvas, 4) #self.ui.canvas.mpl_connect('motion_notify_event', self.onHover) self.ui.canvas.mpl_connect('pick_event', self.displayLabel) self.annotation = None # Setup Navigation Tool Bar self.ui.mpl_toolbar = NavigationToolbar(self.ui.canvas, self) self.ui.mpl_toolbar.hide() self.addToolBar(QtCore.Qt.TopToolBarArea, self.ui.mpl_toolbar) if not hasattr(self.ui.mpl_toolbar, 'edit_parameters'): self.ui.toolBar.removeAction(self.ui.actionShow_Options) # Custom Actions self.ui.toggleImageDockAction = self.ui.imageDockWidget.toggleViewAction( ) icon8 = QtGui.QIcon() icon8.addPixmap(QtGui.QPixmap(":/mini/mini/image.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.ui.toggleImageDockAction.setIcon(icon8) self.ui.toolBar.insertAction(self.ui.actionShow_Options, self.ui.toggleImageDockAction) self.ui.imageDockWidget.hide() self.ui.toggleImageDockAction.setEnabled(False) action = self.ui.plotDockWidget.toggleViewAction() icon8 = QtGui.QIcon() icon8.addPixmap(QtGui.QPixmap(":/mini/mini/chart_line.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) action.setIcon(icon8) self.ui.toolBar.insertAction(self.ui.actionShow_Options, action) self.ui.toggleAdvancedDockAction = self.ui.advancedDockWidget.toggleViewAction( ) icon8 = QtGui.QIcon() icon8.addPixmap(QtGui.QPixmap(":/mini/mini/cog_edit.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.ui.toggleAdvancedDockAction.setIcon(icon8) self.ui.toolBar.insertAction(self.ui.actionShow_Options, self.ui.toggleAdvancedDockAction) self.ui.advancedDockWidget.hide() action = self.ui.fileDockWidget.toggleViewAction() icon8 = QtGui.QIcon() icon8.addPixmap(QtGui.QPixmap(":/mini/mini/folder_explore.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) action.setIcon(icon8) self.ui.toolBar.insertAction(self.ui.actionShow_Options, action) # Create advanced settings property.setView(self.ui.advancedSettingsTreeView) self.advanced_settings, self.advanced_names = self.ui.advancedSettingsTreeView.model( ).addOptionList(self.advancedSettings()) self.ui.advancedSettingsTreeView.setStyleSheet( 'QTreeView::item[readOnly="true"]{ color: #000000; }') for i in xrange( self.ui.advancedSettingsTreeView.model().rowCount() - 1, 0, -1): if self.ui.advancedSettingsTreeView.model().index( i, 0).internalPointer().isReadOnly( ): # Hide widget items (read only) self.ui.advancedSettingsTreeView.setRowHidden( i, QtCore.QModelIndex(), True) # Subset List self.subsetListModel = QtGui.QStandardItemModel() self.ui.subsetListView.setModel(self.subsetListModel) # File List self.fileListModel = QtGui.QStandardItemModel() self.ui.fileTableView.setModel(self.fileListModel) self.fileListModel.setHorizontalHeaderLabels(['file', 'items']) self.connect( self.ui.fileTableView.selectionModel(), QtCore.SIGNAL( "selectionChanged(const QItemSelection &, const QItemSelection &)" ), self.openSelectedFile) # Plot # Create advanced settings #property.setView(self.ui.advancedSettingsTreeView) #self.advanced_settings, self.advanced_names = self.ui.advancedSettingsTreeView.model().addOptionList(self.advancedSettings()) #self.ui.advancedSettingsTreeView.setStyleSheet('QTreeView::item[readOnly="true"]{ color: #000000; }') #for i in xrange(self.ui.advancedSettingsTreeView.model().rowCount()-1, 0, -1): # if self.ui.advancedSettingsTreeView.model().index(i, 0).internalPointer().isReadOnly(): # Hide widget items (read only) # self.ui.advancedSettingsTreeView.setRowHidden(i, QtCore.QModelIndex(), True) # Load the settings _logger.info("\rLoading settings ...") self.loadSettings()
def __init__(self, screen_shot_file=None, parent=None): ''' ''' QtGui.QWizard.__init__(self, parent) self.ui = Ui_ProjectWizard() self.ui.setupUi(self) #self.subPages={} self.lastmicpath = str(QtCore.QDir.currentPath()) self.lastgainpath = str(QtCore.QDir.currentPath()) self.micrograph_files = [] self.gain_files = [] self.parameters = [] self.screen_shot_file = screen_shot_file self.helpDialog = HelpDialog(self) self.default_spider_path = '/guam.raid.cluster.software/spider.21.00/' version = arachnid.__version__ n = version.find('_') if n != -1: version = version[:n] self.setWindowTitle("Arachnid - Workflow Creation Wizard - v%s" % version) self.docs_url = "" self.setPixmap( QtGui.QWizard.WatermarkPixmap, QtGui.QPixmap(':/icons/logo/ArachnidLogoWindow_small.png' )) #:/icons/icons/icon256x256.png')) self.setPixmap( QtGui.QWizard.BackgroundPixmap, QtGui.QPixmap(':/icons/logo/ArachnidLogoWindow_small.png' )) #:/icons/icons/icon256x256.png')) ######################################################################################################################################## ###### Introduction Page ######################################################################################################################################## self.ui.introductionPage.setTitle('Welcome to Arachnid - v%s' % version) if screen_shot_file: self.ui.screenShotCheckBox.setCheckState(QtCore.Qt.Checked) self.ui.screenShotCheckBox.setEnabled(False) ######################################################################################################################################## ###### Question Page ######################################################################################################################################## self.currentIdChanged.connect(self.onCurrentIDChanged) self.ui.yesLeginonPushButton.clicked.connect(self.next) self.ui.noLeginonPushButton.clicked.connect(self.next) self.ui.yesReferencePushButton.clicked.connect(self.next) self.ui.noReferencePushButton.clicked.connect(self.next) ######################################################################################################################################## ###### Leginon Page ######################################################################################################################################## self.ui.leginonWidget = LeginonUI(self, self.helpDialog) self.ui.leginonDBLayout.addWidget(self.ui.leginonWidget) #self.subPages[self.idOf(self.ui.leginonDBPage)]=self.ui.leginonWidget self.ui.leginonWidget.registerPage(self.ui.leginonDBPage) #self.ui.leginonWidget.loadFinished.connect(self.next) self.ui.leginonWidget.loadFinished.connect(self.onLeginonLoadFinished) self.ui.leginonWidget.captureScreen.connect(self.captureScreen) ######################################################################################################################################## ###### Reference Page ######################################################################################################################################## self.ui.referenceWidget = ReferenceUI(self, self.helpDialog) self.ui.referenceLayout.addWidget(self.ui.referenceWidget) #self.subPages[self.idOf(self.ui.referencePage)]=self.ui.referenceWidget self.ui.referenceWidget.registerPage(self.ui.referencePage) #self.ui.referencePage.registerField("referenceEdit*", self.ui.referenceWidget.ui.referenceLineEdit) self.ui.referenceWidget.captureScreen.connect(self.captureScreen) self.ui.referenceWidget.updateParticleDiameter.connect( self.ui.particleSizeDoubleSpinBox.setValue) ######################################################################################################################################## ###### Monitor Page ######################################################################################################################################## self.ui.monitorWidget = MonitorUI(self, self.helpDialog) self.ui.monitorLayout.insertWidget(0, self.ui.monitorWidget) self.ui.monitorWidget.programStarted.connect(self.onProgramStarted) self.ui.monitorWidget.programCompleted.connect(self.onProgramCompleted) ######################################################################################################################################## ###### Fine Settings Page ######################################################################################################################################## self.ui.settingsTabWidget = SettingsUI(self) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(2) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.ui.settingsTabWidget.sizePolicy().hasHeightForWidth()) self.ui.settingsTabWidget.setSizePolicy(sizePolicy) self.ui.settingsHorizontalLayout.addWidget(self.ui.settingsTabWidget) self.ui.workflowListView.setModel(self.ui.monitorWidget.model()) selmodel = self.ui.workflowListView.selectionModel() selmodel.currentChanged.connect( self.ui.settingsTabWidget.settingsChanged) ######################################################################################################################################## ###### Manual Settings Page ######################################################################################################################################## self.ui.manualSettingsPage.registerField( self.param("apix*"), self.ui.pixelSizeDoubleSpinBox, "value", QtCore.SIGNAL('valueChanged(double)')) self.ui.manualSettingsPage.registerField( self.param("voltage*"), self.ui.voltageDoubleSpinBox, "value", QtCore.SIGNAL('valueChanged(double)')) self.ui.manualSettingsPage.registerField( self.param("cs*"), self.ui.csDoubleSpinBox, "value", QtCore.SIGNAL('valueChanged(double)')) self.ui.manualSettingsPage.registerField( self.param("input_files*"), self, 'micrographFiles', QtCore.SIGNAL('micrographFilesUpdated()')) self.ui.manualSettingsPage.registerField( self.param("gain_files"), self, 'gainFiles', QtCore.SIGNAL('gainFilesUpdated()')) self.ui.manualSettingsPage.registerField(self.param("gain_file"), self, 'gainFile') self.ui.manualSettingsPage.registerField(self.param("invert"), self.ui.invertCheckBox) self.ui.imageStatTableView.setModel( ListTableModel([], ['Exposure', 'Gain'], ['Width', 'Height', 'Frames', 'Total'], self)) self.ui.importMessageLabel.setVisible(False) ######################################################################################################################################## ###### Additional Settings Page ######################################################################################################################################## if os.path.exists(self.default_spider_path): self.updateSpiderExe(self.default_spider_path, True) self.updateParticleSizeSpinBox = lambda x: self.ui.particleSizeSpinBox.setValue( int(x / self.ui.pixelSizeDoubleSpinBox.value()) if self.ui.pixelSizeDoubleSpinBox.value() > 0 else 0) self.updateWindowSizeSpinBox = lambda x: self.ui.windowSizeSpinBox.setValue( int(x / self.ui.pixelSizeDoubleSpinBox.value()) if self.ui.pixelSizeDoubleSpinBox.value() > 0 else 0) self.updateMaskDiameterSpinBox = lambda x: self.ui.maskDiameterSpinBox.setValue( int(x / self.ui.pixelSizeDoubleSpinBox.value()) if self.ui.pixelSizeDoubleSpinBox.value() > 0 else 0) self.updateParticleSizeDoubleSpinBox = lambda x: self.ui.particleSizeDoubleSpinBox.setValue( float(x * self.ui.pixelSizeDoubleSpinBox.value()) if self.ui.pixelSizeDoubleSpinBox.value() > 0 else 0.0) self.updateWindowSizeDoubleSpinBox = lambda x: self.ui.windowSizeDoubleSpinBox.setValue( float(x * self.ui.pixelSizeDoubleSpinBox.value()) if self.ui.pixelSizeDoubleSpinBox.value() > 0 else 0.0) self.updateMaskDiameterDoubleSpinBox = lambda x: self.ui.maskDiameterDoubleSpinBox.setValue( float(x * self.ui.pixelSizeDoubleSpinBox.value()) if self.ui.pixelSizeDoubleSpinBox.value() > 0 else 0.0) self.ui.particleSizeDoubleSpinBox.valueChanged.connect( self.updateParticleSizeSpinBox) self.ui.windowSizeDoubleSpinBox.valueChanged.connect( self.updateWindowSizeSpinBox) self.ui.maskDiameterDoubleSpinBox.valueChanged.connect( self.updateMaskDiameterSpinBox) self.ui.particleSizeUnitComboBox.currentIndexChanged.connect( self.ui.particleDiameterStackedWidget.setCurrentIndex) self.ui.windowSizeUnitComboBox.currentIndexChanged.connect( self.ui.windowSizeStackedWidget.setCurrentIndex) self.ui.maskDiameterUnitComboBox.currentIndexChanged.connect( self.ui.maskDiameterStackedWidget.setCurrentIndex) self.ui.particleSizeUnitComboBox.currentIndexChanged.connect( functools.partial( connect_visible_spin_box, signals=(self.ui.particleSizeDoubleSpinBox.valueChanged, self.ui.particleSizeSpinBox.valueChanged), slots=(self.updateParticleSizeSpinBox, self.updateParticleSizeDoubleSpinBox))) self.ui.windowSizeUnitComboBox.currentIndexChanged.connect( functools.partial( connect_visible_spin_box, signals=(self.ui.windowSizeDoubleSpinBox.valueChanged, self.ui.windowSizeSpinBox.valueChanged), slots=(self.updateWindowSizeSpinBox, self.updateWindowSizeDoubleSpinBox))) self.ui.maskDiameterUnitComboBox.currentIndexChanged.connect( functools.partial( connect_visible_spin_box, signals=(self.ui.maskDiameterDoubleSpinBox.valueChanged, self.ui.maskDiameterSpinBox.valueChanged), slots=(self.updateMaskDiameterSpinBox, self.updateMaskDiameterDoubleSpinBox))) self.ui.particleSizeDoubleSpinBox.valueChanged.connect( lambda x: self.ui.windowSizeDoubleSpinBox.setValue( ensure_even_window(x * 1.4, self.ui.pixelSizeDoubleSpinBox.value()))) self.ui.particleSizeDoubleSpinBox.valueChanged.connect( lambda x: self.ui.maskDiameterDoubleSpinBox.setValue(x * 1.2)) self.ui.additionalSettingsPage.registerField( self.param("spider_path"), self.ui.spiderExecutableLineEdit) self.ui.particleSizeDoubleSpinBox.valueChanged.connect( self.diameterChanged) self.ui.additionalSettingsPage.registerField( self.param("particle_diameter*"), self.ui.particleSizeDoubleSpinBox, "value", QtCore.SIGNAL('valueChanged(double)')) #self.ui.additionalSettingsPage.registerField(self.param("particle_diameter*"), self, "particleDiameter", QtCore.SIGNAL('diameterChanged(double)')) self.ui.additionalSettingsPage.registerField( self.param("window_actual*"), self.ui.windowSizeDoubleSpinBox, "value", QtCore.SIGNAL('valueChanged(double)')) self.ui.additionalSettingsPage.registerField( self.param("mask_diameter*"), self.ui.maskDiameterDoubleSpinBox, "value", QtCore.SIGNAL('valueChanged(double)')) self.ui.additionalSettingsPage.registerField( self.param('worker_count'), self.ui.workerCountSpinBox) self.ui.additionalSettingsPage.registerField( self.param('thread_count'), self.ui.threadCountSpinBox) self.ui.additionalSettingsPage.registerField(self.param("window"), self, "window") self.ui.additionalSettingsPage.registerField( self.param('enable_stderr'), self.ui.enableStderrCheckBox) self.ui.additionalSettingsPage.registerField(self.param("disk_mult"), self, 'sampleShape') self.ui.additionalSettingsPage.registerField( self.param("overlap_mult"), self, 'sampleDensity') self.ui.additionalSettingsPage.registerField( self.param("threshold_minimum"), self, 'sampleDensityMin') self.ui.sampleShapeComboBox.setItemData(0, 0.6) self.ui.sampleShapeComboBox.setItemData(1, 0.35) self.ui.sampleDensityComboBox.setItemData(0, 1.0) self.ui.sampleDensityComboBox.setItemData(1, 1.2) self.ui.sampleDensityComboBox.setItemData(2, 0.8) thread_count = 1 if openmp.is_openmp_enabled(): thread_count = openmp.get_num_procs() else: try: thread_count = multiprocessing.cpu_count() except: pass # Hack to determine whether CPU supports hyperthreading frac = 1.0 if sys.platform == 'darwin': try: info = dict([ line.strip().split(':') for line in os.popen('sysctl hw').readlines()[1:20] if line.find(':') != -1 ]) frac = float(info['hw.activecpu'].strip()) / float( info['hw.physicalcpu'].strip()) except: pass else: if os.path.exists('/proc/cpuinfo'): info = dict([ (line.strip().split(':')[0].strip(), line.strip().split(':')[1].strip()) for line in open('/proc/cpuinfo', 'r').readlines() if line.find(':') != -1 ]) frac = float(info['siblings'].strip()) / float( info['cpu cores'].strip()) thread_count = int(thread_count / frac) self.ui.workerCountSpinBox.setValue(thread_count) self.ui.selectLeginonInformationLabel.setVisible(False) self.ui.selectReferenceInformationLabel.setVisible(False) _logger.info("\rLoading project settings ...") self.readSettings() self.loadProject()