Source code for iocbio.kinetics.calc.mean_med_std

import numpy as np
from .generic import AnalyzerGeneric, AnalyzerGenericSignals, XYData, Stats
from ..constants import database_table_roi


[docs]class AnalyzerMeanMedStd(AnalyzerGeneric): """Analyzer finding mean, median, and std""" def __init__(self, x, y): AnalyzerGeneric.__init__(self, x, y) def fit(self): self.stats['mean'] = Stats("mean", "", np.mean(self.experiment.y)) self.stats['median'] = Stats("median", "", np.median(self.experiment.y)) self.stats['std'] = Stats("std", "", np.std(self.experiment.y)) self.calc = XYData(self.experiment.x, self.experiment.x*0 + self.stats['mean'].value)
class AnalyzerMeanMedStdDB(AnalyzerMeanMedStd): @staticmethod def database_schema(db, tablename): db.query("CREATE TABLE IF NOT EXISTS " + db.table(tablename) + "(data_id text not null PRIMARY KEY, " + "mean double precision not null, median double precision, std double precision, " + "FOREIGN KEY (data_id) REFERENCES " + db.table(database_table_roi) + "(data_id) ON DELETE CASCADE)") def __init__(self, database, data, tablename, channel): self.database_schema(database, tablename) AnalyzerMeanMedStd.__init__(self, data.x(channel), data.y(channel).data) self.signals = AnalyzerGenericSignals() self.database = database self._database_table = tablename self.data = data # used by event name reader self.data_id = data.data_id self.channel = channel def fit(self): AnalyzerMeanMedStd.fit(self) c = self.database if self.database.has_record(self._database_table, data_id=self.data_id): c.query("UPDATE " + self.database.table(self._database_table) + " SET mean=:mean, median=:median, std=:std WHERE data_id=:data_id", mean=self.stats['mean'].value, median=self.stats['median'].value, std=self.stats['std'].value, data_id=self.data_id) else: c.query("INSERT INTO " + self.database.table(self._database_table) + "(data_id, mean, median, std) VALUES(:data_id,:mean,:median,:std)", mean=self.stats['mean'].value, median=self.stats['median'].value, std=self.stats['std'].value, data_id=self.data_id) self.signals.sigUpdate.emit() def remove(self): c = self.database c.query("DELETE FROM " + self.database.table(self._database_table) + " WHERE data_id=:data_id", data_id=self.data.data_id) self.database = None # through errors if someone tries to do something after remove self.signals.sigUpdate.emit() def update_data(self, data): AnalyzerMeanMedStd.update_data(self, data.x(self.channel), data.y(self.channel).data) self.fit() def update_event(self, event_name): pass