Source code for kcsd.basis_functions
#!/usr/bin/env python
"""
This script is used to generate basis sources for the
kCSD method Jan et.al (2012) for 1D,2D and 3D cases.
Two 'types' are described here, gaussian and step source,
These can be easily extended.
"""
import numpy as np
def gauss(d, stdev, dim):
"""Gaussian function
Parameters
----------
d : floats or np.arrays
Distance array to the point of evaluation
stdev : float
cutoff range
dim : int
dimension of the gaussian function
Returns
-------
Z : floats or np.arrays
function evaluated
"""
Z = np.exp(-(d**2) / (2*stdev**2)) / (np.sqrt(2*np.pi)*stdev)**dim
return Z
[docs]
def step_1D(d, R):
"""Returns normalized 1D step function.
Parameters
----------
d : floats or np.arrays
Distance array to the point of evaluation
R : float
cutoff range
Returns
-------
s : Value of the function (d <= R) / R
"""
s = (d <= R)
s = s / R #normalize with width
return s
[docs]
def gauss_1D(d, three_stdev):
"""Returns normalized gaussian 2D scale function
Parameters
----------
d : floats or np.arrays
Distance array to the point of evaluation
three_stdev : float
3 * standard deviation of the distribution
Returns
-------
Z : (three_std/3)*(1/2*pi)*(exp(-0.5)*stddev**(-2) *(d**2))
"""
stdev = three_stdev/3
Z = gauss(d, stdev, 1)
return Z
[docs]
def gauss_lim_1D(d, three_stdev):
"""Returns gausian 2D function cut off after 3 standard deviations.
Parameters
----------
d : floats or np.arrays
Distance array to the point of evaluation
three_stdev : float
3 * standard deviation of the distribution
Returns
-------
Z : (three_std/3)*(1/2*pi)*(exp(-0.5)*stddev**(-2) *((x-mu)**2)),
cut off = three_stdev
"""
Z = gauss_1D(d, three_stdev)
Z *= (d < three_stdev)
return Z
[docs]
def step_2D(d, R):
"""Returns normalized 2D step function.
Parameters
----------
d : float or np.arrays
Distance array to the point of evaluation
R : float
cutoff range
Returns
-------
s : step function
"""
s = (d <= R) / (np.pi*(R**2))
return s
[docs]
def gauss_2D(d, three_stdev):
"""Returns normalized gaussian 2D scale function
Parameters
----------
d : floats or np.arrays
distance at which we need the function evaluated
three_stdev : float
3 * standard deviation of the distribution
Returns
-------
Z : function
Normalized gaussian 2D function
"""
stdev = three_stdev/3
Z = gauss(d, stdev, 2)
return Z
[docs]
def gauss_lim_2D(d, three_stdev):
"""Returns gausian 2D function cut off after 3 standard deviations.
Parameters
----------
d : floats or np.arrays
distance at which we need the function evaluated
three_stdev : float
3 * standard deviation of the distribution
Returns
-------
Z : function
Normalized gaussian 2D function cut off after three_stdev
"""
Z = (d <= three_stdev)*gauss_2D(d, three_stdev)
return Z
[docs]
def gauss_3D(d, three_stdev):
"""Returns normalized gaussian 3D scale function
Parameters
----------
d : floats or np.arrays
distance at which we need the function evaluated
three_stdev : float
3 * standard deviation of the distribution
Returns
-------
Z : funtion
Normalized gaussian 3D function
"""
stdev = three_stdev/3
Z = gauss(d, stdev, 3)
return Z
[docs]
def gauss_lim_3D(d, three_stdev):
"""Returns normalized gaussian 3D scale function cut off after 3stdev
Parameters
----------
d : floats or np.arrays
distance at which we need the function evaluated
three_stdev : float
3 * standard deviation of the distribution
Returns
-------
Z : funtion
Normalized gaussian 3D function cutoff three_Stdev
"""
Z = gauss_3D(d, three_stdev)
Z = Z * (d < (three_stdev))
return Z
[docs]
def step_3D(d, R):
"""Returns normalized 3D step function.
Parameters
----------
d : floats or np.arrays
distance at which we need the function evaluated
R : float
cutoff range
Returns
-------
s : step function in 3D
"""
s = 3/(4*np.pi*R**3)*(d <= R)
return s
basis_1D = {
"step": step_1D,
"gauss": gauss_1D,
"gauss_lim": gauss_lim_1D,
}
basis_2D = {
"step": step_2D,
"gauss": gauss_2D,
"gauss_lim": gauss_lim_2D,
}
basis_3D = {
"step": step_3D,
"gauss": gauss_3D,
"gauss_lim": gauss_lim_3D,
}