Source code for iocbio.kinetics.calc.composer

from .generic import AnalyzerGeneric
from .generic import Stats

from collections import OrderedDict
from PyQt5.QtCore import pyqtSignal, QObject


class AnalyzerComposeSignals(QObject):
    sigUpdate = pyqtSignal()


[docs]class AnalyzerCompose(AnalyzerGeneric): """Generic analyzer consisting of sub-analyzers""" def __init__(self): AnalyzerGeneric.__init__(self, None, None) self.analyzers = OrderedDict() self.signals = AnalyzerComposeSignals() def add_analyzer(self, key, analyzer): self.analyzers[key] = analyzer self.analyzers[key].signals.sigUpdate.connect(self._update_stats) self.analyzers[key].signals.sigUpdate.connect(self.signals.sigUpdate) self._update_stats() def list_analyzers(self): return list(self.analyzers.keys()) def fit(self): for key, a in self.analyzers.items(): a.fit() def remove(self): for key, a in self.analyzers.items(): a.remove() def update(self): for key, a in self.analyzers.items(): a.update() def update_data(self, data): for key, a in self.analyzers.items(): a.update_data(data) def update_event(self, event_name): for key, a in self.analyzers.items(): a.update_event(event_name) def _update_stats(self): self.stats = {} for key, a in self.analyzers.items(): for sk, sv in a.stats.items(): self.stats[key + ": " + sk] = Stats(key + ": " + sv.human, sv.unit, sv.value)