Exemplo n.º 1
0
    def addSettings(self, option_list, group_list, values):
        '''
        '''

        for group in group_list:
            if group.is_child(): continue
            treeView = self.copyTreeView()
            property.setView(treeView)
            self.tree_views[group.title] = treeView
            treeView.model().addOptions(group.get_config_options(),
                                        group.option_groups, values)
            icon = QtGui.QIcon()
            if treeView.model().totalInvalid() > 0:
                icon.addPixmap(QtGui.QPixmap(":/mini/mini/exclamation.png"),
                               QtGui.QIcon.Normal, QtGui.QIcon.Off)
                self.invalid_count += 1
            else:
                icon.addPixmap(QtGui.QPixmap(":/mini/mini/accept.png"),
                               QtGui.QIcon.Normal, QtGui.QIcon.Off)
            self.model_tab[treeView.model()] = self.count() - 1
            self.addTab(treeView, icon, group.title)
            #if treeView.model().totalInvalid() > 0:
            treeView.model().propertyValidity.connect(self.updateValid)
            width = treeView.model().maximumTextWidth(self.fontMetrics(),
                                                      treeView.indentation())
            treeView.setColumnWidth(0, width)
        #self.ui.propertyTreeView.model().addOptions(option_list, [], values)
        self.controlValidity.emit(self, self.isValid())
Exemplo n.º 2
0
    def updateValid(self, model, prop, valid):
        '''
        '''

        invalid = model.totalInvalid()
        if self.invalid_count != invalid:
            if valid:
                icon = QtGui.QIcon()
                icon.addPixmap(QtGui.QPixmap(":/mini/mini/accept.png"),
                               QtGui.QIcon.Normal, QtGui.QIcon.Off)
                self.setTabIcon(self.model_tab[model], icon)
                self.invalid_count = invalid
            else:
                icon = QtGui.QIcon()
                icon.addPixmap(QtGui.QPixmap(":/mini/mini/exclamation.png"),
                               QtGui.QIcon.Normal, QtGui.QIcon.Off)
                self.setTabIcon(self.model_tab[model], icon)
                self.invalid_count = invalid
        self.controlValidity.emit(self, self.isValid())
Exemplo n.º 3
0
def iter_images(files, index, template=None, average=False):
    ''' Wrapper for iterate images that support color PNG files
    
    :Parameters:
    
    filename : str
               Input filename
    
    :Returns:
    
    img : array
          Image array
    '''

    qimg = QtGui.QImage()
    if template is not None:
        filename = spider_utility.spider_filename(template, files[0])
    else:
        filename = files[0]
    header = {}
    if qimg.load(filename):
        if isinstance(index[0], str): files = index
        else: files = [files[i[0]] for i in index]
        for filename in files:
            qimg = QtGui.QImage()
            if template is not None:
                filename = spider_utility.spider_filename(template, filename)
            if not qimg.load(filename):
                qimg = QtGui.QPixmap(":/mini/mini/cross.png").toImage()
                _logger.warn("Unable to read image - %s" % filename)
                #raise IOError, "Unable to read image - %s"%filename
            yield (filename, 0), qimg, 1.0
    else:
        # todo reorganize with
        '''
        for img in itertools.imap(ndimage_utility.normalize_min_max, ndimage_file.iter_images(filename, index)):
        '''
        if isinstance(index[0], str):
            for f in index:
                avg = None
                if template is not None:
                    f1 = spider_utility.spider_filename(template, f)
                    if os.path.exists(f1): f = f1
                    else:
                        _logger.warn("Unabled to find alternate image: %s" %
                                     f1)
                for img in ndimage_file.iter_images(f, header=header):
                    if avg is None: avg = img
                    else: avg += img
                try:
                    img = ndimage_utility.normalize_min_max(avg)
                except:
                    img = avg
                yield (f, 0), img, header.get('apix', 1.0)
        else:
            for idx in index:
                f, i = idx[:2]
                filename = files[f]
                if template is not None:
                    filename = spider_utility.spider_filename(
                        template, filename)
                try:
                    img = ndimage_file.read_image(filename, i, header=header)
                except:
                    _logger.exception("Error while reading!")
                    img = ndimage_file.read_image(filename, header=header)
                    #print f, i, len(files), files[f], template, filename
                    #raise
                try:
                    img = ndimage_utility.normalize_min_max(img)
                except:
                    pass
                yield (filename, i), img, header.get('apix', 1.0)
        '''
Exemplo n.º 4
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()
Exemplo n.º 5
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.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()
Exemplo n.º 6
0
    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()
Exemplo n.º 7
0
    def __init__(self, parent=None, helpDialog=None):
        "Initialize ReferenceUI widget"

        QtGui.QWidget.__init__(self, parent)

        # Build window
        _logger.info("\rBuilding main window ...")
        self.ui = Ui_Form()
        self.ui.setupUi(self)
        self.task = None
        self.lastpath = str(QtCore.QDir.currentPath())
        self.helpDialog = helpDialog
        self.ui.referenceTabWidget.currentChanged.connect(
            lambda x: self.captureScreen.emit(x + 1))

        self.emdbCannedModel = QtGui.QStandardItemModel(self)
        canned = [
            ('Ribosome-40S', '1346',
             ':/references/reference/1346/emdb_1346_pix32.png',
             """The eukaryotic translation initiation factors eIF1 and eIF1A induce an open conformation of the 40S ribosome.
Passmore LA, Schmeing TM, Maag D, Applefield DJ, Acker MG, Algire MA, Lorsch JR, Ramakrishnan V
MOLECULAR CELL (2007) 26, pp. 41-50"""),
            ('Ribosome-60S', '1705',
             ':/references/reference/1705/emdb_1705_pix32.png',
             """Mechanism of eIF6-mediated inhibition of ribosomal subunit joining.
Gartmann M, Blau M, Armache JP, Mielke T, Topf M, Beckmann R
J.BIOL.CHEM. (2010) 285, pp. 14848-14851"""),
            ('Ribosome-80S', '2275',
             ':/references/reference/2275/emdb_2275_pix32.png',
             """Ribosome structures to near-atomic resolution from thirty thousand cryo-EM particles.
Bai XC, Fernandez IS, McMullan G, Scheres SH
ELIFE (2013) 2, pp. e00461-e00461"""),
            ('ATP synthase', '5335',
             ':/references/reference/5335/emd_5335_pix32.png',
             """Subnanometre-resolution structure of the intact Thermus thermophilus H+-driven ATP synthase.
Lau WC, Rubinstein JL
NATURE (2012) 481, pp. 214-218"""),
            ('Ribosome-70S', '5360',
             ':/references/reference/5360/emdb_5360_pix32.png',
             """Structural characterization of mRNA-tRNA translocation intermediates.
Agirrezabala X, Liao HY, Schreiner E, Fu J, Ortiz-Meoz RF, Schulten K, Green R, Frank J
PROC.NAT.ACAD.SCI.USA (2012) 109, pp. 6094-6099"""),
            ('Ribosome-30S', '5503',
             ':/references/reference/5503/emdb_5503_pix512.png',
             """Dissecting the in vivo assembly of the 30S ribosomal subunit reveals the role of RimM and general features of the assembly process.
Guo Q, Goto S, Chen Y, Feng B, Xu Y, Muto A, Himeno H, Deng H, Lei J, Gao N
NUCLEIC ACIDS RES. (2013) 41, pp. 2609-2620"""),
            ('Ribosome-50S', '5787',
             ':/references/reference/5787/emdb_5787_pix32.png',
             """Functional domains of the 50S subunit mature late in the assembly process.
Jomaa A, Jain N, Davis JH, Williamson JR, Britton RA, Ortega J
NUCLEIC ACIDS RES. (2013)"""),
        ]
        for entry in canned:
            icon = QtGui.QIcon()
            icon.addPixmap(QtGui.QPixmap(entry[2]), QtGui.QIcon.Normal,
                           QtGui.QIcon.Off)
            item = QtGui.QStandardItem(icon, entry[0])
            item.setData(entry[1], QtCore.Qt.UserRole)
            item.setData(entry[3], QtCore.Qt.UserRole + 1)
            self.emdbCannedModel.appendRow(item)
        self.ui.emdbCannedListView.setModel(self.emdbCannedModel)
        self.taskFinished.connect(self.onDownloadFromEMDBComplete)
        self.ui.referenceLineEdit.editingFinished.connect(
            self.onReferenceEditChanged)
        self.ui.referenceTabWidget.setCurrentIndex(0)
        self.ui.referenceTabWidget.setCurrentIndex(1)