Skip to content
Snippets Groups Projects
Commit 57b21c8e authored by Johannes Weis's avatar Johannes Weis
Browse files

Move synin parameter class to parts module

In order to keep the user-interface of the spiking neuron calib target
parameter dataclass clean, we move the dataclass for synaptic input
parameters, which is used only internally, to the neuron_calib_parts
module, where it is used.

Change-Id: If6b9dcb3c0227f0c11117b20573c06e39883c05a
parent 3b70b126
No related branches found
No related tags found
No related merge requests found
...@@ -6,7 +6,6 @@ import numbers ...@@ -6,7 +6,6 @@ import numbers
from typing import Optional, Union, List from typing import Optional, Union, List
from dataclasses import dataclass from dataclasses import dataclass
from warnings import warn from warnings import warn
from copy import deepcopy
import numpy as np import numpy as np
import quantities as pq import quantities as pq
...@@ -95,27 +94,6 @@ class NeuronCalibTarget(base.CalibrationTarget): ...@@ -95,27 +94,6 @@ class NeuronCalibTarget(base.CalibrationTarget):
0 * pq.ns, 4 * pq.us) 0 * pq.ns, 4 * pq.us)
} }
@dataclass
class SyninParameters:
"""
Collection of parameters for synaptic input calibration.
Contains boolean decisions that are set automatically based on
the shape of given targets:
:ivar i_synin_gm: Target bias currents for synaptic input OTAs,
with shapes modified to match the needs of the calibration
routines.
:ivar calibrate_synin: Decide whether synaptic input OTA
strengths are calibrated.
:ivar equalize_synin: Decide whether excitatory and inhibitory
synaptic input strengths are equalized.
"""
i_synin_gm: np.ndarray
calibrate_synin: bool
equalize_synin: bool
def check_types(self): def check_types(self):
""" """
Check whether parameters have the right types and shapes. Check whether parameters have the right types and shapes.
...@@ -175,36 +153,6 @@ class NeuronCalibTarget(base.CalibrationTarget): ...@@ -175,36 +153,6 @@ class NeuronCalibTarget(base.CalibrationTarget):
"Target synaptic time constant is out of allowed range " "Target synaptic time constant is out of allowed range "
+ "in the respective fit function.") + "in the respective fit function.")
def prepare_synin(self) -> SyninParameters:
"""
Does preparations for synaptic input calibration.
:return: SyninParameters class, containing desicions and
targets for synaptic input calibration.
"""
i_synin_gm = deepcopy(self.i_synin_gm)
if not isinstance(i_synin_gm, np.ndarray) \
and np.ndim(i_synin_gm) > 0:
i_synin_gm = np.array(i_synin_gm)
if np.ndim(i_synin_gm) > 0 \
and i_synin_gm.shape[-1] == halco.NeuronConfigOnDLS.size:
calibrate_synin = False
else:
calibrate_synin = True
if np.ndim(i_synin_gm) > 0 \
and i_synin_gm.shape[0] \
== halco.SynapticInputOnNeuron.size:
equalize_synin = False
else:
equalize_synin = True
i_synin_gm = np.array(
[i_synin_gm] * halco.SynapticInputOnNeuron.size)
return self.SyninParameters(
i_synin_gm, calibrate_synin, equalize_synin)
NeuronCalibTarget.DenseDefault = NeuronCalibTarget( NeuronCalibTarget.DenseDefault = NeuronCalibTarget(
leak=np.ones( leak=np.ones(
...@@ -523,7 +471,6 @@ def calibrate( ...@@ -523,7 +471,6 @@ def calibrate(
# process target # process target
target.check() target.check()
synin_parameters = target.prepare_synin()
# create result object # create result object
calib_result = _CalibrationResultInternal() calib_result = _CalibrationResultInternal()
...@@ -560,12 +507,8 @@ def calibrate( ...@@ -560,12 +507,8 @@ def calibrate(
connection, options, calib_result) connection, options, calib_result)
# calibrate or configure CUBA synaptic input OTA biases # calibrate or configure CUBA synaptic input OTA biases
if synin_parameters.calibrate_synin: neuron_calib_parts.calibrate_synaptic_input(
neuron_calib_parts.calibrate_synaptic_input( connection, target, calib_result, target_cadc_reads)
connection, synin_parameters, calib_result, target_cadc_reads)
else:
calib_result.i_syn_exc_gm = synin_parameters.i_synin_gm[0]
calib_result.i_syn_inh_gm = synin_parameters.i_synin_gm[1]
# calibrate syn. input references at final biases # calibrate syn. input references at final biases
neuron_calib_parts.calibrate_synin_references( neuron_calib_parts.calibrate_synin_references(
......
...@@ -25,6 +25,47 @@ if TYPE_CHECKING: ...@@ -25,6 +25,47 @@ if TYPE_CHECKING:
from calix.spiking import neuron from calix.spiking import neuron
class SyninParameters:
"""
Collection of parameters for synaptic input calibration.
Contains decisions that are set automatically based on
the shape of targets for the calibration:
:ivar i_synin_gm: Target bias currents for synaptic input OTAs,
with shapes modified to match the needs of the calibration
routines.
:ivar calibrate_synin: Decide whether synaptic input OTA
strengths are calibrated.
:ivar equalize_synin: Decide whether excitatory and inhibitory
synaptic input strengths are equalized.
"""
def __init__(self, target: neuron.NeuronCalibTarget):
"""
:param target: Target parameters for neuron calib.
"""
self.i_synin_gm = deepcopy(target.i_synin_gm)
if not isinstance(self.i_synin_gm, np.ndarray) \
and np.ndim(self.i_synin_gm) > 0:
self.i_synin_gm = np.array(self.i_synin_gm)
if np.ndim(self.i_synin_gm) > 0 \
and self.i_synin_gm.shape[-1] == halco.NeuronConfigOnDLS.size:
self.calibrate_synin = False
else:
self.calibrate_synin = True
if np.ndim(self.i_synin_gm) > 0 \
and self.i_synin_gm.shape[0] \
== halco.SynapticInputOnNeuron.size:
self.equalize_synin = False
else:
self.equalize_synin = True
self.i_synin_gm = np.array(
[self.i_synin_gm] * halco.SynapticInputOnNeuron.size)
def calibrate_tau_syn( def calibrate_tau_syn(
connection: hxcomm.ConnectionHandle, connection: hxcomm.ConnectionHandle,
tau_syn: np.ndarray, tau_syn: np.ndarray,
...@@ -228,19 +269,27 @@ def finalize_synin_calib( ...@@ -228,19 +269,27 @@ def finalize_synin_calib(
def calibrate_synaptic_input( def calibrate_synaptic_input(
connection: hxcomm.ConnectionHandle, connection: hxcomm.ConnectionHandle,
synin_parameters: neuron.NeuronCalibTarget.SyninParameters, target: neuron.NeuronCalibTarget,
calib_result: neuron._CalibrationResultInternal, calib_result: neuron._CalibrationResultInternal,
target_cadc_reads: np.ndarray): target_cadc_reads: np.ndarray):
""" """
Run calibration of (current-based) synaptic inputs. Run calibration of (current-based) synaptic inputs.
:param connection: Connection to chip to run on. :param connection: Connection to chip to run on.
:param synin_parameters: Parameters for synaptic input calibration. :param target: Target parameters for neuron calibration.
:param calib_result: Calibration result to store parameters in. :param calib_result: Calibration result to store parameters in.
:param target_cadc_reads: CADC samples at resting potential, with :param target_cadc_reads: CADC samples at resting potential, with
synaptic input disabled. synaptic input disabled.
""" """
synin_parameters = SyninParameters(target)
# return early if synaptic inputs are not to be calibrated
if not synin_parameters.calibrate_synin:
calib_result.i_syn_exc_gm = synin_parameters.i_synin_gm[0]
calib_result.i_syn_inh_gm = synin_parameters.i_synin_gm[1]
return
# Enable and calibrate excitatory synaptic input amplitudes to median # Enable and calibrate excitatory synaptic input amplitudes to median
neuron_helpers.reconfigure_synaptic_input( neuron_helpers.reconfigure_synaptic_input(
connection, excitatory_biases=synin_parameters.i_synin_gm[0]) connection, excitatory_biases=synin_parameters.i_synin_gm[0])
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment