Source code for neuromodels.utils.hh_utils

import numpy as np


[docs]def compute_q10_correction(q10, T1, T2): """Compute the Q10 temperature coefficient. As explained in [1]_, the time course of voltage clamp recordings are strongly affected by temperature: the rates of activation and inactivation increase with increasing temperature. The :math:`Q_{10}` temperature coefficient, a measure of the increase in rate for a 10 :math:`^{\circ}C` temperature change, is a correction factor used in HH-style models to quantify this temperature dependence. In HH-style models, the adjustment due to temperature can be achieved by decreasing the time constants by a factor :math:`Q_{10}^{(T_2 - T_1)/10}`, where the temperatures :math:`T_1 < T_2`. The temperature unit must be either the Celsius or the Kelvin. Note that :math:`T_1` and :math:`T_2` must have the same unit, and do not need to be exactly 10 degrees apart. Parameters ---------- q10 : :obj:`float` The :math:`Q_{10}` temperature coefficient. T1 : :obj:`float` Temperature at which the first rate is recorded. T2 : :obj:`float` Temperature at which the second rate is recorded. Returns ------- correction : :obj:`float` Correction factor due to temperature. References ---------- .. [1] D. Sterratt, B. Graham, A. Gillies, D. Willshaw, "Principles of Computational Modelling in Neuroscience", Cambridge University Press, 2011. """ # that the test below allows T1 = T2 is intentional; the function should # accomendate for no correction, i.e. a correction factor equal to 1. if T1 > T2: msg = ("T2 must be greater than or equal to T1") raise ValueError(msg) return q10**((T2 - T1) / 10)
[docs]def vtrap(x, y): """Traps for zero in denominator of rate eqns. HH-style model rate equations often contain expressions that are equivalent to .. math:: x / (\exp(u) - 1), where :math:`u = x / y`. From Taylor series approximation, one can find that the above expression is approximated by .. math:: y (1 - u / 2) if :math:`u << 1`. This approximation ensures that indeterminate cases are handled properly. Parameters ---------- x : :obj:`float` or :term:`ndarray` Numerator in the exponential function argument. y : :obj:`float` or :term:`ndarray` Denominator in the exponential function argument. Returns ------- vtrap : :obj:`float` or :term:`ndarray` The result of the evaluation. References ---------- Inspired by the ``vtrap`` function in the NEURON simulator; github.com/neuronsimulator/nrn/blob/master/src/nrnoc/hh.mod """ u = x / y return np.where(u < 1e-6, y * (1 - u / 2), x / (np.exp(u) - 1))