Exemple #1
0
def run_gui():

    logging.basicConfig(level=logging.DEBUG)

    debug = ("--debug" in sys.argv)

    plugins = [
        CorePlugin(),
        TasksPlugin(),
        FlowTaskPlugin(debug=debug),
        ImportPlugin(),
        ThresholdPlugin(),
        HistogramPlugin(),
        HexbinPlugin(),
        ScatterplotPlugin(),
        RangePlugin(),
        Range2DPlugin(),
        PolygonPlugin(),
        BarChartPlugin(),
        Stats1DPlugin(),
        BinningPlugin()
    ]

    app = CytoflowApplication(id='edu.mit.synbio.cytoflow', plugins=plugins)
    app.run()

    logging.shutdown()
 def __init__(self):
     plugins = [
         CorePlugin(),
         TasksPlugin(),
         DummyExtensionPluginWithDataView()
     ]
     super(DummyWfManagerWithPlugins, self).__init__(plugins=plugins)
 def __init__(self):
     plugins = [
         CorePlugin(),
         TasksPlugin(),
         DummyUIPlugin(),
         DummyUIPluginOld()
     ]
     super(DummyUIWfManager, self).__init__(plugins=plugins)
    def __init__(self, filename=None):

        plugins = [CorePlugin(), TasksPlugin(),
                   ProbeWfManagerPlugin(filename)]

        super(ProbeWfManager, self).__init__(plugins=plugins)

        # 'Run' the application by creating windows without an event loop
        self.run = self._create_windows
Exemple #5
0
    def __init__(self):

        plugins = [CorePlugin(), TasksPlugin(),
                   ProbePyFibreGUIPlugin()]

        super(ProbePyFibreGUI, self).__init__(plugins=plugins)

        # 'Run' the application by creating windows
        # without an event loop
        self.run = self._create_windows
def main(argv):
    """ Run the application.
    """
    logging.basicConfig(level=logging.WARNING)

    plugins = [CorePlugin(), TasksPlugin(), AttractorsPlugin()]
    app = AttractorsApplication(plugins=plugins)
    app.run()

    logging.shutdown()
Exemple #7
0
def launch():
    root = logging.getLogger()
    root.setLevel(logging.DEBUG)
    shandler = logging.StreamHandler()
    shandler.setLevel(logging.DEBUG)

    root.addHandler(shandler)

    plugins = [CorePlugin(), TasksPlugin(), WellpyPlugin()]

    app = WellpyApplication(plugins=plugins)

    app.run()
Exemple #8
0
    def test_contributes_service(self):
        plugins = [
            CorePlugin(),
            TasksPlugin(),
            FactoryRegistryPlugin(),
            WfManagerPlugin(workflow_file=None),
            ExampleCustomUIPlugin()
        ]
        wfmanager = WfManager(plugins=plugins)
        wfmanager.plugin_manager.start()

        self.assertEqual(len(wfmanager.get_services(IContributedUI)), 2)
        self.assertEqual(len(wfmanager.get_services(IDataView)), 2)
Exemple #9
0
def main(workflow_file, debug, window_size, profile):
    """Launches the FORCE workflow manager application"""
    if debug is False:
        logging.basicConfig(filename="force_wfmanager.log", filemode="w")
    else:
        logging.basicConfig(filename="force_wfmanager.log",
                            filemode="w",
                            level=logging.DEBUG)

    if profile:
        import cProfile
        import pstats
        profiler = cProfile.Profile()
        profiler.enable()

    log = logging.getLogger(__name__)

    plugins = [
        CorePlugin(),
        TasksPlugin(),
        FactoryRegistryPlugin(),
        WfManagerPlugin(workflow_file=workflow_file)
    ]

    mgr = extension.ExtensionManager(namespace='force.bdss.extensions',
                                     invoke_on_load=True)

    def import_extensions(ext):
        log.info("Found extension {}".format(ext.name))
        plugins.append(ext.obj)

    try:
        mgr.map(import_extensions)
    except NoMatches:
        log.info("No extensions found")

    wfmanager = WfManager(plugins=plugins, window_size=window_size)
    wfmanager.run()

    if profile:
        profiler.disable()
        from sys import version_info
        fname = 'force_wfmanager-{}-{}.{}.{}'.format(__version__,
                                                     version_info.major,
                                                     version_info.minor,
                                                     version_info.micro)

        profiler.dump_stats(fname + '.prof')
        with open(fname + '.pstats', 'w') as fp:
            stats = pstats.Stats(profiler, stream=fp).sort_stats('cumulative')
            stats.print_stats()
Exemple #10
0
def run(debug, profile, log_name):

    if debug:
        logging.basicConfig(filename=f"{log_name}.log",
                            filemode="w",
                            level=logging.DEBUG)
    else:
        logging.basicConfig(filename=f"{log_name}.log",
                            filemode="w",
                            level=logging.INFO)

    logger = logging.getLogger(__name__)

    if profile:
        import cProfile
        import pstats
        profiler = cProfile.Profile()
        profiler.enable()

    logger.info(logo(__version__))

    plugins = [CorePyFibrePlugin(), TasksPlugin(), PyFibreGUIPlugin()]
    plugins += load_plugins()

    pyfibre_gui = PyFibreGUI(plugins=plugins)

    pyfibre_gui.run()

    if profile:
        profiler.disable()
        from sys import version_info
        fname = 'pyfibre-{}-{}.{}.{}'.format(__version__, version_info.major,
                                             version_info.minor,
                                             version_info.micro)

        profiler.dump_stats(fname + '.prof')
        with open(fname + '.pstats', 'w') as fp:
            stats = pstats.Stats(profiler, stream=fp).sort_stats('cumulative')
            stats.print_stats()
            self._create_windows()

            kernel = self.get_service(IPYTHON_KERNEL_PROTOCOL)
            kernel.init_ipkernel('qt4')

            app.connect(app, QtCore.SIGNAL("lastWindowClosed()"), app,
                        QtCore.SLOT("quit()"))
            app.aboutToQuit.connect(kernel.cleanup_consoles)

            gui.set_trait_later(self, 'application_initialized', self)
            kernel.ipkernel.start()

        return started

    def _application_initialized_fired(self):
        logger.info('APPLICATION INITIALIZED')


if __name__ == '__main__':
    import logging
    logging.basicConfig(level=logging.DEBUG)

    app = ExampleApplication(plugins=[
        CorePlugin(),
        ExamplePlugin(),
        IPythonKernelPlugin(),
        IPythonKernelUIPlugin(),
        TasksPlugin(),
    ])
    app.run()
Exemple #12
0
def run_gui():
    debug = ("--debug" in sys.argv)

    remote_process, remote_connection = start_remote_process(debug)

    import matplotlib

    # We want matplotlib to use our backend
    matplotlib.use('module://cytoflowgui.matplotlib_backend')

    # getting real tired of the matplotlib deprecation warnings
    import warnings
    warnings.filterwarnings('ignore', '.*is deprecated and replaced with.*')

    from traits.api import push_exception_handler

    def QtMsgHandler(msg_type, msg_string):
        # Convert Qt msg type to logging level
        log_level = [
            logging.DEBUG, logging.WARN, logging.ERROR, logging.FATAL
        ][int(msg_type)]
        logging.log(log_level, 'Qt message: ' + msg_string.decode('utf-8'))

    ## monkey-patch envisage for a py3k bug.  this is fixed in envisage HEAD,
    ## so check for version
    import envisage
    if envisage.__version__ == '4.6.0':
        import pickle
        from envisage.ui.tasks.tasks_application import TasksApplication, TasksApplicationState
        logger = logging.getLogger(__name__)
        logger.info("Monkey-patching envisage 4.6.0")

        def _envisage_load_state(self):
            """ Loads saved application state, if possible.
            """
            state = TasksApplicationState()
            filename = os.path.join(self.state_location, 'application_memento')
            if os.path.exists(filename):
                # Attempt to unpickle the saved application state.
                try:
                    with open(filename, 'rb') as f:
                        restored_state = pickle.load(f)
                    if state.version == restored_state.version:
                        state = restored_state
                    else:
                        logger.warn('Discarding outdated application layout')
                except:
                    # If anything goes wrong, log the error and continue.
                    logger.exception('Restoring application layout from %s',
                                     filename)

            self._state = state

        def _envisage_save_state(self):
            """ Saves the application state.
            """
            # Grab the current window layouts.
            window_layouts = [w.get_window_layout() for w in self.windows]
            self._state.previous_window_layouts = window_layouts

            # Attempt to pickle the application state.
            filename = os.path.join(self.state_location, 'application_memento')
            try:
                with open(filename, 'wb') as f:
                    pickle.dump(self._state, f)
            except:
                # If anything goes wrong, log the error and continue.
                logger.exception('Saving application layout')

        TasksApplication._load_state = _envisage_load_state
        TasksApplication._save_state = _envisage_save_state

    from envisage.core_plugin import CorePlugin
    from envisage.ui.tasks.tasks_plugin import TasksPlugin
    from pyface.image_resource import ImageResource

    from cytoflowgui.flow_task import FlowTaskPlugin
    from cytoflowgui.cytoflow_application import CytoflowApplication
    from cytoflowgui.op_plugins import (
        ImportPlugin,
        ThresholdPlugin,
        RangePlugin,
        QuadPlugin,
        Range2DPlugin,
        PolygonPlugin,
        BinningPlugin,
        GaussianMixture1DPlugin,
        GaussianMixture2DPlugin,
        BleedthroughLinearPlugin,  #BleedthroughPiecewisePlugin,
        BeadCalibrationPlugin,
        AutofluorescencePlugin,
        ColorTranslationPlugin,
        TasbePlugin,
        ChannelStatisticPlugin,
        TransformStatisticPlugin,
        RatioPlugin)

    from cytoflowgui.view_plugins import (
        HistogramPlugin,
        Histogram2DPlugin,
        ScatterplotPlugin,
        BarChartPlugin,
        Stats1DPlugin,
        Kde1DPlugin,  #Kde2DPlugin,
        ViolinPlotPlugin,
        TablePlugin,
        Stats2DPlugin)
    #    assert(multiprocessing.get_start_method() == "spawn")

    from cytoflow.utility.custom_traits import Removed, Deprecated
    Removed.gui = True
    Deprecated.gui = True

    from pyface.qt import qt_api

    cmd_line = " ".join(sys.argv)

    if qt_api == "pyside":
        print("Cytoflow uses PyQT; but it is trying to use PySide instead.")
        print(" - Make sure PyQT is installed.")
        print(
            " - If both are installed, and you don't need both, uninstall PySide."
        )
        print(" - If you must have both installed, select PyQT by setting the")
        print("   environment variable QT_API to \"pyqt\"")
        print("   * eg, on Linux, type on the command line:")
        print("     QT_API=\"pyqt\" " + cmd_line)
        print("   * on Windows, try: ")
        print("     setx QT_API \"pyqt\"")

        sys.exit(1)

    from pyface.qt.QtCore import qInstallMsgHandler
    qInstallMsgHandler(QtMsgHandler)

    # if we're frozen, add _MEIPASS to the pyface search path for icons etc
    if getattr(sys, 'frozen', False):
        from pyface.resource_manager import resource_manager
        resource_manager.extra_paths.append(sys._MEIPASS)  # @UndefinedVariable

    # install a global (gui) error handler for traits notifications
    push_exception_handler(handler=log_notification_handler,
                           reraise_exceptions=debug,
                           main=True)

    sys.excepthook = log_excepthook

    plugins = [
        CorePlugin(),
        TasksPlugin(),
        FlowTaskPlugin(debug=debug, remote_connection=remote_connection)
    ]

    # reverse of the order on the toolbar
    view_plugins = [
        TablePlugin(),
        Stats2DPlugin(),
        Stats1DPlugin(),
        BarChartPlugin(),
        ViolinPlotPlugin(),
        #                     Kde2DPlugin(),    # disabled until we can make it faster
        Kde1DPlugin(),
        Histogram2DPlugin(),
        ScatterplotPlugin(),
        HistogramPlugin()
    ]

    plugins.extend(view_plugins)

    op_plugins = [
        RatioPlugin(),
        TransformStatisticPlugin(),
        ChannelStatisticPlugin(),
        TasbePlugin(),
        ColorTranslationPlugin(),
        AutofluorescencePlugin(),
        BeadCalibrationPlugin(),
        #                   BleedthroughPiecewisePlugin(),
        BleedthroughLinearPlugin(),
        GaussianMixture2DPlugin(),
        GaussianMixture1DPlugin(),
        BinningPlugin(),
        PolygonPlugin(),
        QuadPlugin(),
        Range2DPlugin(),
        RangePlugin(),
        ThresholdPlugin(),
        ImportPlugin()
    ]

    plugins.extend(op_plugins)

    # these two lines stop pkg_resources from trying to load resources
    # from the __main__ module, which is frozen (and thus not loadable.)
    icon = ImageResource('icon')
    icon.search_path = []

    app = CytoflowApplication(id='edu.mit.synbio.cytoflow',
                              plugins=plugins,
                              icon=icon,
                              debug=debug)
    app.run()
    remote_process.join()
    logging.shutdown()
Exemple #13
0
def run_gui():
    debug = ("--debug" in sys.argv)

    remote_process, remote_connection = start_remote_process()

    # We want matplotlib to use our backend .... in both the GUI and the
    # remote process

    import matplotlib
    matplotlib.use('module://cytoflowgui.matplotlib_backend')

    # getting real tired of the matplotlib deprecation warnings
    import warnings
    warnings.filterwarnings('ignore', '.*is deprecated and replaced with.*')

    from traits.api import push_exception_handler

    def QtMsgHandler(msg_type, msg_string):
        # Convert Qt msg type to logging level
        log_level = [
            logging.DEBUG, logging.WARN, logging.ERROR, logging.FATAL
        ][int(msg_type)]
        logging.log(log_level, 'Qt message: ' + msg_string.decode('utf-8'))

    from envisage.core_plugin import CorePlugin
    from envisage.ui.tasks.tasks_plugin import TasksPlugin
    from pyface.image_resource import ImageResource

    from cytoflowgui.flow_task import FlowTaskPlugin
    from cytoflowgui.tasbe_task import TASBETaskPlugin
    from cytoflowgui.export_task import ExportFigurePlugin
    from cytoflowgui.cytoflow_application import CytoflowApplication
    from cytoflowgui.op_plugins import (
        ImportPlugin, ThresholdPlugin, RangePlugin, QuadPlugin, Range2DPlugin,
        PolygonPlugin, BinningPlugin, GaussianMixture1DPlugin,
        GaussianMixture2DPlugin, BleedthroughLinearPlugin,
        BleedthroughPiecewisePlugin, BeadCalibrationPlugin,
        AutofluorescencePlugin, ColorTranslationPlugin, TasbePlugin,
        ChannelStatisticPlugin, TransformStatisticPlugin, RatioPlugin,
        DensityGatePlugin, FlowPeaksPlugin, KMeansPlugin, PCAPlugin)

    from cytoflowgui.view_plugins import (
        HistogramPlugin, Histogram2DPlugin, ScatterplotPlugin, BarChartPlugin,
        Stats1DPlugin, Kde1DPlugin, Kde2DPlugin, ViolinPlotPlugin, TablePlugin,
        Stats2DPlugin, DensityPlugin, ParallelCoordinatesPlugin, RadvizPlugin)

    from cytoflow.utility.custom_traits import Removed, Deprecated
    Removed.gui = True
    Deprecated.gui = True

    from pyface.qt import qt_api

    cmd_line = " ".join(sys.argv)

    if qt_api == "pyside":
        print("Cytoflow uses PyQT; but it is trying to use PySide instead.")
        print(" - Make sure PyQT is installed.")
        print(
            " - If both are installed, and you don't need both, uninstall PySide."
        )
        print(" - If you must have both installed, select PyQT by setting the")
        print("   environment variable QT_API to \"pyqt\"")
        print("   * eg, on Linux, type on the command line:")
        print("     QT_API=\"pyqt\" " + cmd_line)
        print("   * on Windows, try: ")
        print("     setx QT_API \"pyqt\"")

        sys.exit(1)

    from pyface.qt.QtCore import qInstallMsgHandler  # @UnresolvedImport
    qInstallMsgHandler(QtMsgHandler)

    # if we're frozen, add _MEIPASS to the pyface search path for icons etc
    if getattr(sys, 'frozen', False):
        from pyface.resource_manager import resource_manager
        resource_manager.extra_paths.append(sys._MEIPASS)  # @UndefinedVariable

    # install a global (gui) error handler for traits notifications
    push_exception_handler(handler=log_notification_handler,
                           reraise_exceptions=False,
                           main=True)

    sys.excepthook = log_excepthook

    plugins = [
        CorePlugin(),
        TasksPlugin(),
        FlowTaskPlugin(),
        TASBETaskPlugin(),
        ExportFigurePlugin()
    ]

    # reverse of the order on the toolbar
    view_plugins = [
        TablePlugin(),
        Stats2DPlugin(),
        Stats1DPlugin(),
        BarChartPlugin(),
        ViolinPlotPlugin(),
        Kde2DPlugin(),
        RadvizPlugin(),
        ParallelCoordinatesPlugin(),
        Kde1DPlugin(),
        DensityPlugin(),
        Histogram2DPlugin(),
        ScatterplotPlugin(),
        HistogramPlugin()
    ]

    plugins.extend(view_plugins)

    op_plugins = [
        RatioPlugin(),
        PCAPlugin(),
        KMeansPlugin(),
        FlowPeaksPlugin(),
        DensityGatePlugin(),
        TransformStatisticPlugin(),
        ChannelStatisticPlugin(),
        TasbePlugin(),
        ColorTranslationPlugin(),
        AutofluorescencePlugin(),
        BeadCalibrationPlugin(),
        #                   BleedthroughPiecewisePlugin(),
        BleedthroughLinearPlugin(),
        GaussianMixture2DPlugin(),
        GaussianMixture1DPlugin(),
        BinningPlugin(),
        PolygonPlugin(),
        QuadPlugin(),
        Range2DPlugin(),
        RangePlugin(),
        ThresholdPlugin(),
        ImportPlugin()
    ]

    plugins.extend(op_plugins)

    # these two lines stop pkg_resources from trying to load resources
    # from the __main__ module, which is frozen (and thus not loadable.)
    icon = ImageResource('icon')
    icon.search_path = []

    app = CytoflowApplication(id='edu.mit.synbio.cytoflow',
                              plugins=plugins,
                              icon=icon,
                              remote_connection=remote_connection,
                              debug=debug)
    app.run()
    remote_process.join()
    logging.shutdown()
Exemple #14
0
def main(argv):
    plugins = [CorePlugin(), TasksPlugin(), PikosPlugin()]
    app = PikosApplication(plugins)
    app.run()
Exemple #15
0
            # Create windows from the default or saved application layout.
            self._create_windows()

            kernel = self.get_service(IPYTHON_KERNEL_PROTOCOL)
            kernel.init_ipkernel('qt4')

            app.connect(app, QtCore.SIGNAL("lastWindowClosed()"),
                        app, QtCore.SLOT("quit()"))
            app.aboutToQuit.connect(kernel.cleanup_consoles)

            gui.set_trait_later(self, 'application_initialized', self)
            kernel.ipkernel.start()

        return started

    def _application_initialized_fired(self):
        logger.info('APPLICATION INITIALIZED')

if __name__ == '__main__':
    import logging
    logging.basicConfig(level=logging.DEBUG)

    app = ExampleApplication(
        plugins=[
            CorePlugin(), ExamplePlugin(), IPythonKernelPlugin(),
            IPythonKernelUIPlugin(), TasksPlugin(),
        ]
    )
    app.run()
Exemple #16
0
def run_gui():
    import os, sys
    try:
        # if we're running as a one-click from a MacOS app,
        # we need to reset the working directory
        os.chdir(sys._MEIPASS)
    except:
        # if we're not running as a one-click, fail gracefully
        pass

    # take care of the 3 places in the cytoflow module that
    # need different behavior in a GUI
    import cytoflow
    cytoflow.RUNNING_IN_GUI = True

    # this is ridiculous, but here's the situation.  Qt5 now uses Chromium
    # as their web renderer.  Chromium needs OpenGL.  if you don't
    # initialize OpoenGL here, things crash on some platforms.

    # so now i guess we depend on opengl too.

    from OpenGL import GL  # @UnresolvedImport @UnusedImport

    # check that we're using the right Qt API
    from pyface.qt import qt_api

    cmd_line = " ".join(sys.argv)

    if qt_api == "pyside":
        print("Cytoflow uses PyQT; but it is trying to use PySide instead.")
        print(" - Make sure PyQT is installed.")
        print(
            " - If both are installed, and you don't need both, uninstall PySide."
        )
        print(" - If you must have both installed, select PyQT by setting the")
        print("   environment variable QT_API to \"pyqt5\"")
        print("   * eg, on Linux, type on the command line:")
        print("     QT_API=\"pyqt5\" " + cmd_line)
        print("   * on Windows, try: ")
        print("     setx QT_API \"pyqt5\"")

        sys.exit(1)

    # parse args
    parser = argparse.ArgumentParser(description='Cytoflow GUI')
    parser.add_argument("--debug", action='store_true')
    parser.add_argument("filename", nargs='?', default="")

    args = parser.parse_args()

    # start the remote process

    remote_process, remote_connection, queue_listener = start_remote_process()

    # getting real tired of the matplotlib deprecation warnings
    import warnings
    warnings.filterwarnings('ignore', '.*is deprecated and replaced with.*')

    # if we're frozen, add _MEIPASS to the pyface search path for icons etc
    if getattr(sys, 'frozen', False):
        from pyface.resource_manager import resource_manager
        resource_manager.extra_paths.append(sys._MEIPASS)  # @UndefinedVariable

    # these three lines stop pkg_resources from trying to load resources
    # from the __main__ module, which is frozen (and thus not loadable.)
    from pyface.image_resource import ImageResource
    icon = ImageResource('icon')
    icon.search_path = []

    # monkey patch the resource manager to use SVGs for icons
    import pyface.resource.resource_manager
    pyface.resource.resource_manager.ResourceManager.IMAGE_EXTENSIONS.append(
        '.svg')

    # monkey patch checklist editor to stop lowercasing
    import traitsui.qt4.check_list_editor  # @UnusedImport
    traitsui.qt4.check_list_editor.capitalize = lambda s: s

    # define and install a message handler for Qt errors
    from traits.api import push_exception_handler

    def QtMsgHandler(msg_type, msg_context, msg_string):
        # Convert Qt msg type to logging level
        log_level = [
            logging.DEBUG, logging.WARN, logging.ERROR, logging.FATAL
        ][int(msg_type)]
        logging.log(log_level, 'Qt message: ' + msg_string)

    from pyface.qt.QtCore import qInstallMessageHandler  # @UnresolvedImport
    qInstallMessageHandler(QtMsgHandler)

    # install a global (gui) error handler for traits notifications
    push_exception_handler(handler=log_notification_handler,
                           reraise_exceptions=False,
                           main=True)

    sys.excepthook = log_excepthook

    # Import, then load, the envisage plugins

    from envisage.core_plugin import CorePlugin
    from envisage.ui.tasks.tasks_plugin import TasksPlugin

    from cytoflowgui.flow_task import FlowTaskPlugin
    from cytoflowgui.tasbe_task import TASBETaskPlugin
    from cytoflowgui.export_task import ExportFigurePlugin
    from cytoflowgui.cytoflow_application import CytoflowApplication
    from cytoflowgui.op_plugins import (
        ImportPlugin, ThresholdPlugin, RangePlugin, QuadPlugin, Range2DPlugin,
        PolygonPlugin, BinningPlugin, GaussianMixture1DPlugin,
        GaussianMixture2DPlugin, BleedthroughLinearPlugin,
        BeadCalibrationPlugin, AutofluorescencePlugin, ColorTranslationPlugin,
        TasbePlugin, ChannelStatisticPlugin, TransformStatisticPlugin,
        RatioPlugin, DensityGatePlugin, FlowPeaksPlugin, KMeansPlugin,
        PCAPlugin)

    from cytoflowgui.view_plugins import (
        HistogramPlugin, Histogram2DPlugin, ScatterplotPlugin, BarChartPlugin,
        Stats1DPlugin, Kde1DPlugin, Kde2DPlugin, ViolinPlotPlugin, TablePlugin,
        Stats2DPlugin, DensityPlugin, ParallelCoordinatesPlugin, RadvizPlugin)

    plugins = [
        CorePlugin(),
        TasksPlugin(),
        FlowTaskPlugin(),
        TASBETaskPlugin(),
        ExportFigurePlugin()
    ]

    # ordered as we want them to show up in the toolbar
    view_plugins = [
        HistogramPlugin(),
        ScatterplotPlugin(),
        Histogram2DPlugin(),
        DensityPlugin(),
        Kde1DPlugin(),
        Kde2DPlugin(),
        RadvizPlugin(),
        ParallelCoordinatesPlugin(),
        ViolinPlotPlugin(),
        BarChartPlugin(),
        Stats1DPlugin(),
        Stats2DPlugin(),
        TablePlugin()
    ]

    plugins.extend(view_plugins)

    op_plugins = [
        ImportPlugin(),
        ThresholdPlugin(),
        RangePlugin(),
        QuadPlugin(),
        Range2DPlugin(),
        PolygonPlugin(),
        RatioPlugin(),
        ChannelStatisticPlugin(),
        TransformStatisticPlugin(),
        BinningPlugin(),
        GaussianMixture1DPlugin(),
        GaussianMixture2DPlugin(),
        DensityGatePlugin(),
        KMeansPlugin(),
        FlowPeaksPlugin(),
        PCAPlugin(),
        AutofluorescencePlugin(),
        BleedthroughLinearPlugin(),
        BeadCalibrationPlugin(),
        ColorTranslationPlugin(),
        TasbePlugin()
    ]

    plugins.extend(op_plugins)

    # start the app

    app = CytoflowApplication(id='edu.mit.synbio.cytoflow',
                              plugins=plugins,
                              icon=icon,
                              remote_process=remote_process,
                              remote_connection=remote_connection,
                              filename=args.filename,
                              debug=args.debug)

    from pyface.qt import QtGui
    QtGui.QApplication.instance().setStyle(
        QtGui.QStyleFactory.create('Fusion'))

    app.run()

    remote_process.join()
    queue_listener.stop()
    logging.shutdown()
Exemple #17
0
def run_gui():
    multiprocessing.freeze_support()

    from pyface.qt import qt_api

    if qt_api == "pyside":
        print "Cytoflow uses PyQT; but it is trying to use PySide instead."
        print " - Make sure PyQT is installed."
        print " - If both are installed, and you don't need both, uninstall PySide."
        print " - If you must have both installed, select PyQT by setting the"
        print "   environment variable QT_API to \"pyqt\""
        print "   * eg, on Linux, type on the command line:"
        print "     QT_API=\"pyqt\" python run.py"
        print "   * on Windows, try: "
        print "     setx QT_API \"pyqt\""

        sys.exit(1)

    remote_connection = start_remote_process()

    from pyface.qt.QtCore import qInstallMsgHandler
    qInstallMsgHandler(QtMsgHandler)

    # if we're frozen, add _MEIPASS to the pyface search path for icons etc
    if getattr(sys, 'frozen', False):
        from pyface.resource_manager import resource_manager
        resource_manager.extra_paths.append(sys._MEIPASS)  # @UndefinedVariable

    global debug
    debug = ("--debug" in sys.argv)

    # install a global (gui) error handler for traits notifications
    push_exception_handler(handler=log_notification_handler,
                           reraise_exceptions=debug,
                           main=True)

    sys.excepthook = log_excepthook

    plugins = [
        CorePlugin(),
        TasksPlugin(),
        FlowTaskPlugin(debug=debug, remote_connection=remote_connection)
    ]

    # reverse of the order on the toolbar
    view_plugins = [
        TablePlugin(),
        Stats2DPlugin(),
        Stats1DPlugin(),
        BarChartPlugin(),
        ViolinPlotPlugin(),
        Kde2DPlugin(),
        Kde1DPlugin(),
        Histogram2DPlugin(),
        ScatterplotPlugin(),
        HistogramPlugin()
    ]

    plugins.extend(view_plugins)

    op_plugins = [
        RatioPlugin(),
        TransformStatisticPlugin(),
        ChannelStatisticPlugin(),
        TasbePlugin(),
        ColorTranslationPlugin(),
        AutofluorescencePlugin(),
        BeadCalibrationPlugin(),
        BleedthroughPiecewisePlugin(),
        BleedthroughLinearPlugin(),
        GaussianMixture2DPlugin(),
        GaussianMixture1DPlugin(),
        BinningPlugin(),
        PolygonPlugin(),
        QuadPlugin(),
        Range2DPlugin(),
        RangePlugin(),
        ThresholdPlugin(),
        ImportPlugin()
    ]

    plugins.extend(op_plugins)

    app = CytoflowApplication(id='edu.mit.synbio.cytoflow',
                              plugins=plugins,
                              icon=ImageResource('icon'),
                              debug=debug)
    app.run()

    logging.shutdown()