def loadpoints(self, tablename, col, fltr=None, grouping=NO_GROUP): ''' Returns a dict mapping x label values to lists of values from col ''' q = sql.QueryBuilder() select = [sql.Column(tablename, col)] if grouping != NO_GROUP: dm = datamodel.DataModel.getInstance() group_cols = dm.GetGroupColumnNames(grouping, include_table_name=True) select += [sql.Column(*col.split('.')) for col in group_cols] q.set_select_clause(select) if fltr is not None: q.add_filter(fltr) res = db.execute(str(q)) res = np.array(res, dtype=object) # replaces Nones with NaNs for row in res: if row[0] is None: row[0] = np.nan points_dict = {} if self.group_choice.Value != NO_GROUP: for row in res: groupkey = tuple(row[1:]) points_dict[groupkey] = points_dict.get(groupkey, []) + [row[0]] else: points_dict = {col : [r[0] for r in res]} return points_dict
def get_filter(self): table = self.tableChoice.Value column = self.colChoice.Value comparator = self.comparatorChoice.GetValue() value = self.valueField.GetValue() if self._get_col_type() in [int, float, long]: # Don't quote numbers return sql.Filter(sql.Column(table, column), comparator, '%s'%(value)) if comparator.upper() in ['IS', 'IS NOT'] and value.upper() == 'NULL': # Don't quote comparisons to NULL return sql.Filter(sql.Column(table, column), comparator, '%s'%(value)) return sql.Filter(sql.Column(table, column), comparator, '"%s"'%(value))
def UpdatePlateMaps(self): self.measurement = self.measurementsChoice.Value measurement = self.measurement table = self.sourceChoice.Value self.aggMethod = self.aggregationMethodsChoice.Value categorical = measurement not in get_numeric_columns_from_table(table) fltr = self.filterChoice.Value self.colorBar.ClearNotifyWindows() q = sql.QueryBuilder() well_key_cols = [sql.Column(p.image_table, col) for col in well_key_columns()] select = list(well_key_cols) if not categorical: if self.aggMethod=='mean': select += [sql.Column(table, measurement, 'AVG')] elif self.aggMethod=='stdev': select += [sql.Column(table, measurement, 'STDDEV')] elif self.aggMethod=='cv%': # stddev(col) / avg(col) * 100 select += [sql.Expression( sql.Column(table, measurement, 'STDDEV'), ' / ', sql.Column(table, measurement, 'AVG'), ' * 100')] elif self.aggMethod=='sum': select += [sql.Column(table, measurement, 'SUM')] elif self.aggMethod=='min': select += [sql.Column(table, measurement, 'MIN')] elif self.aggMethod=='max': select += [sql.Column(table, measurement, 'MAX')] elif self.aggMethod=='median': select += [sql.Column(table, measurement, 'MEDIAN')] elif self.aggMethod=='none': select += [sql.Column(table, measurement)] else: select += [sql.Column(table, measurement)] q.set_select_clause(select) q.set_group_columns(well_key_cols) if fltr not in (FilterComboBox.NO_FILTER, FilterComboBox.NEW_FILTER, ''): if fltr in p._filters: q.add_filter(p._filters[fltr]) elif fltr in p.gates: q.add_filter(p.gates[fltr].as_filter()) else: raise Exception('Could not find filter "%s" in gates or filters'%(fltr)) wellkeys_and_values = db.execute(str(q)) wellkeys_and_values = np.array(wellkeys_and_values, dtype=object) # Replace measurement None's with nan for row in wellkeys_and_values: if row[-1] is None: row[-1] = np.nan data = [] key_lists = [] dmax = -np.inf dmin = np.inf if p.plate_id: for plateChoice, plateMap in zip(self.plateMapChoices, self.plateMaps): plate = plateChoice.Value plateMap.SetPlate(plate) self.colorBar.AddNotifyWindow(plateMap) self.keys_and_vals = [v for v in wellkeys_and_values if str(v[0])==plate] platedata, wellkeys, ignore = FormatPlateMapData(self.keys_and_vals, categorical) data += [platedata] key_lists += [wellkeys] if not categorical: dmin = np.nanmin([float(kv[-1]) for kv in self.keys_and_vals]+[dmin]) dmax = np.nanmax([float(kv[-1]) for kv in self.keys_and_vals]+[dmax]) else: self.colorBar.AddNotifyWindow(self.plateMaps[0]) platedata, wellkeys, ignore = FormatPlateMapData(wellkeys_and_values, categorical) data += [platedata] key_lists += [wellkeys] if not categorical: dmin = np.nanmin([float(kv[-1]) for kv in wellkeys_and_values]) dmax = np.nanmax([float(kv[-1]) for kv in wellkeys_and_values]) if not categorical: if len(wellkeys_and_values) > 0: # Compute the global extents if there is any data whatsoever gmin = np.nanmin([float(vals[-1]) for vals in wellkeys_and_values]) gmax = np.nanmax([float(vals[-1]) for vals in wellkeys_and_values]) if np.isinf(dmin) or np.isinf(dmax): gmin = gmax = dmin = dmax = 1. # Warn if there was no data for this plate (and no filter was used) if fltr == FilterComboBox.NO_FILTER: wx.MessageBox('No numeric data was found in "%s.%s" for plate "%s"' %(table, measurement, plate), 'Warning') else: gmin = gmax = 1. if fltr == FilterComboBox.NO_FILTER: wx.MessageBox('No numeric data was found in %s.%s' %(table, measurement), 'Warning') if categorical: self.colorBar.Hide() else: self.colorBar.Show() self.colorBar.SetLocalExtents([dmin,dmax]) self.colorBar.SetGlobalExtents([gmin,gmax]) self.rightSizer.Layout() for keys, d, plateMap in zip(key_lists, data, self.plateMaps): plateMap.SetWellKeys(keys) if categorical: plateMap.SetData(np.ones(d.shape) * np.nan) plateMap.SetTextData(d) else: plateMap.SetData(d, data_range=self.colorBar.GetLocalExtents(), clip_interval=self.colorBar.GetLocalInterval(), clip_mode=self.colorBar.GetClipMode()) for keys, d, plateMap in zip(key_lists, data, self.plateMaps): plateMap.SetWellKeys(keys) if categorical: plateMap.SetData(np.ones(d.shape) * np.nan) plateMap.SetTextData(d) else: plateMap.SetData(d, data_range=self.colorBar.GetLocalExtents(), clip_interval=self.colorBar.GetLocalInterval(), clip_mode=self.colorBar.GetClipMode())
def y_column(self): return sql.Column(self.y_table_choice.GetStringSelection(), self.y_choice.GetStringSelection())
## self.reset() ## logging.error('Can not load old filter') ## self.Refresh() if __name__ == "__main__": import sys import logging logging.basicConfig(level=logging.DEBUG) app = wx.PySimpleApp() # Load a properties file if passed in args if len(sys.argv) > 1: propsFile = sys.argv[1] p.LoadFile(propsFile) else: p.LoadFile('/Users/afraser/cpa_example/example.properties') p._filters['test'] = sql.Filter( ('per_image', 'gene'), 'REGEXP', 'MAP*', 'OR', sql.Column('per_image', 'gene'), 'IS', 'NULL') p._filters_ordered += ['test'] p._filters['test2'] = sql.Filter(('per_image', 'well'), '!=', 'A01') p._filters_ordered += ['test2'] cff = ColumnFilterDialog(None, tables=[p.image_table]) if cff.ShowModal() == wx.OK: print cff.get_filter() cff.Destroy() app.MainLoop()
def x_column(self): return sql.Column( self.table_choice.GetString(self.table_choice.GetSelection()), self.x_choice.GetString(self.x_choice.GetSelection()))
def y_column(self): y_table_choice_id = self.y_table_choice.GetSelection() y_choice_id = self.y_choice.GetSelection() return sql.Column(self.y_table_choice.GetString(y_table_choice_id), self.y_choice.GetString(y_choice_id))
def x_column(self): x_table_choice_id = self.x_table_choice.GetSelection() x_choice_id = self.x_choice.GetSelection() return sql.Column(self.x_table_choice.GetString(x_table_choice_id), self.x_choice.GetString(x_choice_id))