Ejemplo n.º 1
0
    def extract_somatic_spiking_features(self, traces, delay, duration):

        # soma
        trace = {}
        traces_for_efel=[]
        trace['T'] = traces['T']
        trace['V'] = traces['v_stim']
        trace['stim_start'] = [delay]
        trace['stim_end'] = [delay + duration]
        traces_for_efel.append(trace)

        # trunk locations
        '''
        for key in traces['v_rec']:
            for k in traces['v_rec'][key]:
                trace = {}
                trace['T'] = traces['T']
                trace['V'] = traces['v_rec'][key][k]
                trace['stim_start'] = [delay]
                trace['stim_end'] = [delay + duration]
                traces_for_efel.append(trace)
        '''

        efel.setDoubleSetting('interp_step', 0.025)
        efel.setDoubleSetting('DerivativeThreshold', 40.0)

        traces_results = efel.getFeatureValues(traces_for_efel, ['inv_first_ISI','AP_begin_time', 'doublet_ISI'])

        return traces_results
Ejemplo n.º 2
0
def test_ohmic_input_resistance_vb_ssse():
    """basic: Test ohmic_input_resistance_vb_ssse"""

    import efel
    efel.reset()

    stim_start = 500.0
    stim_end = 900.0

    time = efel.io.load_fragment('%s#col=1' % meanfrequency1_url)
    voltage = efel.io.load_fragment('%s#col=2' % meanfrequency1_url)

    trace = {}

    trace['T'] = time
    trace['V'] = voltage
    trace['stim_start'] = [stim_start]
    trace['stim_end'] = [stim_end]

    features = ['ohmic_input_resistance_vb_ssse', 'voltage_deflection_vb_ssse']

    stimulus_current = 10.0
    efel.setDoubleSetting('stimulus_current', stimulus_current)
    feature_values = \
        efel.getFeatureValues(
            [trace],
            features)

    voltage_deflection = feature_values[0]['voltage_deflection_vb_ssse'][0]
    ohmic_input_resistance = \
        feature_values[0]['ohmic_input_resistance_vb_ssse'][0]
    nt.assert_equal(
        ohmic_input_resistance,
        voltage_deflection /
        stimulus_current)
Ejemplo n.º 3
0
def test_ohmic_input_resistance_vb_ssse():
    """basic: Test ohmic_input_resistance_vb_ssse"""

    import efel
    efel.reset()

    stim_start = 500.0
    stim_end = 900.0

    time = efel.io.load_fragment('%s#col=1' % meanfrequency1_url)
    voltage = efel.io.load_fragment('%s#col=2' % meanfrequency1_url)

    trace = {}

    trace['T'] = time
    trace['V'] = voltage
    trace['stim_start'] = [stim_start]
    trace['stim_end'] = [stim_end]

    features = ['ohmic_input_resistance_vb_ssse', 'voltage_deflection_vb_ssse']

    stimulus_current = 10.0
    efel.setDoubleSetting('stimulus_current', stimulus_current)
    feature_values = \
        efel.getFeatureValues(
            [trace],
            features)

    voltage_deflection = feature_values[0]['voltage_deflection_vb_ssse'][0]
    ohmic_input_resistance = \
        feature_values[0]['ohmic_input_resistance_vb_ssse'][0]
    nt.assert_equal(
        ohmic_input_resistance,
        voltage_deflection /
        stimulus_current)
Ejemplo n.º 4
0
 def generate_prediction(self, model: sciunit.Model, verbose: bool = False) -> float:
     efel.reset()
     stim_start = 10.0   # ms
     stim_dur   = 50.0   # ms
     stim_amp   = -1.0   # nA
     efel.setDoubleSetting('stimulus_current', stim_amp)
     model.inject_soma_square_current(current={'delay':stim_start,
                                               'duration':stim_dur,
                                               'amplitude':stim_amp})
     trace = model.get_soma_membrane_potential_eFEL_format(tstop=stim_start+stim_dur+stim_start,
                                                          start=stim_start,
                                                          stop =stim_start+stim_dur)
     prediction = efel.getFeatureValues([trace], ['ohmic_input_resistance_vb_ssse'])[0]["ohmic_input_resistance_vb_ssse"][0]
     return prediction
Ejemplo n.º 5
0
def test_derivwindow1():
    """basic: Test DerivativeWindow"""

    import efel
    efel.reset()

    stim_start = 100.0
    stim_end = 1000.0

    time = efel.io.load_fragment('%s#col=1' % derivwindow1_url)
    voltage = efel.io.load_fragment('%s#col=2' % derivwindow1_url)

    trace = {}

    trace['T'] = time
    trace['V'] = voltage
    trace['stim_start'] = [stim_start]
    trace['stim_end'] = [stim_end]

    features = ['AP_begin_voltage']

    feature_values = \
        efel.getFeatureValues(
            [trace],
            features)

    AP_begin_voltage = feature_values[0]['AP_begin_voltage'][0]
    nt.assert_almost_equal(AP_begin_voltage, -45.03627393790836)

    efel.reset()
    efel.setDoubleSetting('interp_step', 0.01)
    feature_values = \
        efel.getFeatureValues(
            [trace],
            features)

    AP_begin_voltage = feature_values[0]['AP_begin_voltage'][0]
    nt.assert_almost_equal(AP_begin_voltage, -83.57661997973835)

    efel.reset()
    efel.setDoubleSetting('interp_step', 0.01)
    efel.setIntSetting('DerivativeWindow', 30)
    feature_values = \
        efel.getFeatureValues(
            [trace],
            features)

    AP_begin_voltage = feature_values[0]['AP_begin_voltage'][0]
    nt.assert_almost_equal(AP_begin_voltage, -45.505521563640386)
Ejemplo n.º 6
0
    def _setup_efel(self):
        """Set up efel before extracting the feature"""

        import efel
        efel.reset()

        if self.threshold is not None:
            efel.setThreshold(self.threshold)

        if self.stimulus_current is not None:
            efel.setDoubleSetting('stimulus_current', self.stimulus_current)

        if not efel.FeatureNameExists(self.efel_feature_name):
            raise ValueError("eFEL doesn't have a feature called %s" %
                             self.efel_feature_name)
Ejemplo n.º 7
0
 def generate_prediction(self, model: sciunit.Model, verbose: bool = False) -> Optional[float]:
     efel.reset()
     stim_start = 10.0   # ms
     stim_dur   = 5.0    # ms
     stim_amp   = 15.0   # nA
     efel.setDoubleSetting('stimulus_current', stim_amp)
     model.inject_soma_square_current(current={'delay':stim_start,
                                               'duration':stim_dur,
                                               'amplitude':stim_amp})
     trace = model.get_soma_membrane_potential_eFEL_format(tstop=stim_start+stim_dur+stim_start,
                                                          start=stim_start,
                                                          stop =stim_start+stim_dur)
     output = efel.getFeatureValues([trace], ['AP_duration_half_width'])[0]["AP_duration_half_width"]
     prediction = output[0] if output else None
     return prediction
Ejemplo n.º 8
0
    def _setup_efel(self):
        """Set up efel before extracting the feature"""

        import efel
        efel.reset()

        if self.threshold is not None:
            efel.setThreshold(self.threshold)

        if self.stimulus_current is not None:
            efel.setDoubleSetting('stimulus_current', self.stimulus_current)

        if not efel.FeatureNameExists(self.efel_feature_name):
            raise ValueError("eFEL doesn't have a feature called %s" %
                             self.efel_feature_name)
Ejemplo n.º 9
0
    def _setup_efel(self):
        """Set up efel before extracting the feature"""

        import efel

        efel.reset()

        if self.threshold is not None:
            efel.setThreshold(self.threshold)

        if self.interp_step is not None:
            efel.setDoubleSetting("interp_step", self.interp_step)

        if self.double_settings is not None:
            for setting_name, setting_value in self.double_settings.items():
                efel.setDoubleSetting(setting_name, setting_value)

        if self.int_settings is not None:
            for setting_name, setting_value in self.int_settings.items():
                efel.setIntSetting(setting_name, setting_value)
Ejemplo n.º 10
0
    def _setup_efel(self):
        """Set up efel before extracting the feature"""

        import efel
        efel.reset()

        if self.threshold is not None:
            efel.setThreshold(self.threshold)

        if self.stimulus_current is not None:
            efel.setDoubleSetting('stimulus_current', self.stimulus_current)

        if self.interp_step is not None:
            efel.setDoubleSetting('interp_step', self.interp_step)

        if self.double_settings is not None:
            for setting_name, setting_value in self.double_settings.items():
                efel.setDoubleSetting(setting_name, setting_value)

        if self.int_settings is not None:
            for setting_name, setting_value in self.int_settings.items():
                efel.setIntSetting(setting_name, setting_value)

        if self.string_settings is not None:
            print(self.string_settings)
            for setting_name, setting_value in self.string_settings.items():
                efel.setStrSetting(setting_name, setting_value)
Ejemplo n.º 11
0
    def _setup_efel(self):
        """Set up efel before extracting the feature"""

        import efel
        efel.reset()

        if self.threshold is not None:
            efel.setThreshold(self.threshold)

        if self.stimulus_current is not None:
            efel.setDoubleSetting('stimulus_current', self.stimulus_current)

        if self.interp_step is not None:
            efel.setDoubleSetting('interp_step', self.interp_step)

        if self.double_settings is not None:
            for setting_name, setting_value in self.double_settings.items():
                efel.setDoubleSetting(setting_name, setting_value)

        if self.int_settings is not None:
            for setting_name, setting_value in self.int_settings.items():
                efel.setIntSetting(setting_name, setting_value)
Ejemplo n.º 12
0
    def _setup_efel(self):
        """Set up efel before extracting the feature"""

        import efel
        efel.reset()

        if self.threshold is not None:
            efel.setThreshold(self.threshold)

        if self.stimulus_current is not None:
            efel.setDoubleSetting('stimulus_current', self.stimulus_current)

        if self.interp_step is not None:
            efel.setDoubleSetting('interp_step', self.interp_step)

        if self.double_settings is not None:
            for setting_name, setting_value in self.double_settings.items():
                efel.setDoubleSetting(setting_name, setting_value)

        if not efel.FeatureNameExists(self.efel_feature_name):
            raise ValueError("eFEL doesn't have a feature called %s" %
                             self.efel_feature_name)
Ejemplo n.º 13
0
#*This script is designed to plot each sweep to visualize where errors in the main script (ABF_EFELv2) may be occurring

#The following libraries must be installed before being imported!

import efel
import numpy as np
import pyabf
from tkinter import filedialog
from matplotlib import pyplot as plt

#Opens a dialog box allowing the user to select the file and removes the extension from the file name
file_path = filedialog.askopenfilename()
file = file_path[:-4]

#Sets settings for derivative threshold, interpolation step, and calculation of RMP
efel.setDoubleSetting('interp_step',0.05) #Must be set to the sampling rate (20,000 Hz = 0.05)
efel.setDoubleSetting('voltage_base_start_perc',0.1) #Used for RMP calculation
efel.setDoubleSetting('voltage_base_end_perc',0.8) #Used for RMP calculation
efel.setDerivativeThreshold(15) #Normally set to 15

#Import ABF file and assign the corresponding data to Time and RawData variables
File = pyabf.ABF(file_path)
Time = (File.sweepX)*1000
RawData = File.data

#Identify the number of traces in the abf file (*Note: this is designed for a 20kHz recording lasting ~10s)
#Other differences in recording will need to change these values
RawData = np.transpose(RawData)
TraceNum = int((len(RawData) / 200000))

#Using the number of calulcated traces, split the first RawData column into equal arrays of 200000