Source code for cytoflowgui.op_plugins.channel_stat

#!/usr/bin/env python3.8
# coding: latin-1

# (c) Massachusetts Institute of Technology 2015-2018
# (c) Brian Teague 2018-2022
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
# 
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.


"""
Channel statistic
-----------------

Apply a function to subsets of a data set, and add it as a statistic
to the experiment.

First, the module groups the data by the unique values of the variables
in **By**, then applies **Function** to the **Channel** in each group.
    

.. object:: Name

    The operation name.  Becomes the new statistic's name.
    
.. object:: Channel

    The channel to apply the function to.
    
.. object:: Function

    The function to compute on each group.
        
.. object:: Subset

    Only apply the function to a subset of the data.  Useful if the function 
    is very slow.

"""


from traits.api import provides, List
from traitsui.api import (View, Item, TextEditor, VGroup, EnumEditor, CheckListEditor)
from pyface.api import ImageResource  # @UnresolvedImport
from envisage.api import Plugin
                       
from ..workflow.operations import ChannelStatisticWorkflowOp
from ..workflow.operations.channel_stat import summary_functions
from ..editors import SubsetListEditor, InstanceHandlerEditor
from ..subset_controllers import subset_handler_factory

from .i_op_plugin import IOperationPlugin, OP_PLUGIN_EXT 
from .op_plugin_base import OpHandler, PluginHelpMixin, shared_op_traits_view


[docs] class ChannelStatisticHandler(OpHandler): operation_traits_view = \ View(Item('name', editor = TextEditor(auto_set = False, placeholder = "None")), Item('channel', editor= EnumEditor(name='context_handler.previous_channels'), label = "Channel"), Item('function_name', editor = EnumEditor(values = sorted(summary_functions.keys())), label = "Function"), Item('by', editor = CheckListEditor(cols = 2, name = 'context_handler.previous_conditions_names'), label = 'Group\nBy', style = 'custom'), VGroup(Item('subset_list', show_label = False, editor = SubsetListEditor(conditions = "context_handler.previous_conditions", editor = InstanceHandlerEditor(view = 'subset_view', handler_factory = subset_handler_factory))), label = "Subset", show_border = False, show_labels = False), shared_op_traits_view)
[docs] @provides(IOperationPlugin) class ChannelStatisticPlugin(Plugin, PluginHelpMixin): id = 'cytoflowgui.op_plugins.channel_statistic' operation_id = 'cytoflow.operations.channel_statistic' view_id = None name = "Channel Statistic" short_name = "Channel\nStatistic" menu_group = "Statistics"
[docs] def get_operation(self): return ChannelStatisticWorkflowOp()
[docs] def get_handler(self, model, context): return ChannelStatisticHandler(model = model, context = context)
[docs] def get_icon(self): return ImageResource('channel_stat')
plugin = List(contributes_to = OP_PLUGIN_EXT) def _plugin_default(self): return [self]