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]