from traitsui.api import (View, Item, EnumEditor, Controller, VGroup, CheckListEditor, TextEditor) from envisage.api import Plugin, contributes_to from traits.api import (provides, Callable, List, Str, Property, Any, on_trait_change) from pyface.api import ImageResource from cytoflow.operations.channel_stat import ChannelStatisticOp import cytoflow.utility as util from cytoflowgui.op_plugins import IOperationPlugin, OpHandlerMixin, OP_PLUGIN_EXT, shared_op_traits from cytoflowgui.subset import ISubset, SubsetListEditor from cytoflowgui.op_plugins.i_op_plugin import PluginOpMixin from cytoflowgui.workflow import Changed mean_95ci = lambda x: util.ci(x, np.mean, boots = 100) geomean_95ci = lambda x: util.ci(x, util.geom_mean, boots = 100) summary_functions = {"Mean" : np.mean, "Geom.Mean" : util.geom_mean, "Count" : len, "Std.Dev" : np.std, "Geom.SD" : util.geom_sd_range, "SEM" : scipy.stats.sem, "Geom.SEM" : util.geom_sem_range, "Mean 95% CI" : mean_95ci, "Geom.Mean 95% CI" : geomean_95ci } fill = {"Mean" : 0, "Geom.Mean" : 0,
""" A PriorityQueue that only allows one copy of each item. http://stackoverflow.com/questions/5997189/how-can-i-make-a-unique-value-priority-queue-in-python """ def _init(self, maxsize): PriorityQueue._init(self, maxsize) self.values = set() def _put(self, item, heappush=heapq.heappush): if item[1] not in self.values: self.values.add(item[1]) PriorityQueue._put(self, item, heappush) else: pass def _get(self, heappop=heapq.heappop): item = PriorityQueue._get(self, heappop) self.values.remove(item[1]) return item summary_functions = {"Mean" : np.mean, "Geom.Mean" : util.geom_mean, "Count" : len} mean_95ci = lambda x: util.ci(x, np.mean, boots = 100) geomean_95ci = lambda x: util.ci(x, util.geom_mean, boots = 100) error_functions = {"Std.Dev." : np.std, "S.E.M" : scipy.stats.sem, "Mean 95% CI" : mean_95ci, "Geom.Mean 95% CI" : geomean_95ci}