# -*- coding: utf-8 -*-
# from . import functions
from .common import *
from ....analysis.data_types import *
from ....analysis.stimulus_extraction import StimulusExtraction
from ....plotting import TuningCurvesWidget
[docs]class StimTuning(CtrlNode):
"""Get stimulus tuning curves"""
nodeName = "StimTuning"
uiTemplate = [('ShowGUI', 'button', {'text': 'Show GUI'})]
def __init__(self, name):
CtrlNode.__init__(self, name, terminals={'In': {'io': 'in', 'multi': True}, 'Out': {'io': 'out'}})
self.widget = TuningCurvesWidget()
self.widget.sig_output_changed.connect(self._send_output)
self.ctrls['ShowGUI'].clicked.connect(self.widget.show)
self.output_transmission = None
def _send_output(self, t: Transmission):
self.output_transmission = t
self.changed()
def process(self, output_transmission=False, **kwargs):
if self.output_transmission:
out = self.output_transmission
else:
out = self.processData(**kwargs)
return {'Out': out}
def processData(self, **kwargs):
self.transmissions = kwargs['In']
self.transmissions_list = merge_transmissions(self.transmissions)
self.t = Transmission.merge(self.transmissions_list)
self.widget.set_input(self.t)
return None
[docs]class StaticDFoFo(CtrlNode):
"""Perform (F - Fo / Fo) without a rolling window to find Fo"""
nodeName = 'StaticDFoFo'
uiTemplate = [('data_column', 'combo', {}),
('Apply', 'check', {'checked': False, 'applyBox': True})
]
def processData(self, transmission: Transmission):
self.t = transmission
self.set_data_column_combo_box()
if not self.ctrls['Apply'].isChecked():
return
self.t = transmission.copy()
data_column = self.ctrls['data_column'].currentText()
output_column = '_STATIC_DF_O_F'
params = {'data_column': data_column}
self.t.df[output_column] = self.t.df[data_column].apply(lambda a: self._static_dfof(a))
self.t.history_trace.add_operation(data_block_id='all', operation='static_df_o_f', parameters=params)
self.t.last_output = output_column
return self.t
def _static_dfof(self, F: np.ndarray) -> np.ndarray:
Fo = np.min(F)
d = ((F - Fo) / Fo)
return d
[docs]class ManualDFoF(CtrlNode):
"""Set Fo for dF/Fo using a particular time period. Useful for looking at stimulus responses"""
nodeName = 'ManualDFoF'
uiTemplate = [('Apply', 'check', {'checked': True, 'applyBox': True}),
('data_column', 'combo', {}),
('OpenGUI', 'button', {'text': 'OpenGUI'})]