Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
Pulse type {'cathodicfirst' | 'anodicfirst'}, where
'cathodicfirst' has the negative phase first.
pulseorder : str, optional, default: 'pulsefirst'
Pulse order {'gapfirst' | 'pulsefirst'}, where
'pulsefirst' has the pulse first, followed by the gap.
'gapfirst' has it the other way round.
"""
if tsample <= 0:
raise ValueError("tsample must be a non-negative float.")
# Stimulus size given by `dur`
stim_size = int(np.round(float(dur) / tsample))
# Make sure input is non-trivial, else return all zeros
if np.isclose(freq, 0) or np.isclose(amp, 0):
utils.TimeSeries.__init__(self, tsample, np.zeros(stim_size))
return
# Envelope size (single pulse + gap) given by `freq`
# Note that this can be larger than `stim_size`, but we will trim
# the stimulus to proper length at the very end.
envelope_size = int(np.round(1.0 / float(freq) / tsample))
if envelope_size > stim_size:
debug_s = ("Envelope size (%d) clipped to "
"stimulus size (%d) for freq=%f" % (envelope_size,
stim_size,
freq))
logging.getLogger(__name__).debug(debug_s)
envelope_size = stim_size
# Delay given by `delay`
delay_size = int(np.round(float(delay) / tsample))
pulse), axis=0)
else:
raise ValueError("Acceptable values for `pulseorder` are "
"'pulsefirst' or 'gapfirst'")
# If `freq` is not a nice number, the resulting pulse train might not
# have the desired length
if pulse_train.size < stim_size:
fill_size = stim_size - pulse_train.shape[-1]
pulse_train = np.concatenate((pulse_train, np.zeros(fill_size)),
axis=0)
# Trim to correct length (takes care of too long arrays, too)
pulse_train = pulse_train[:stim_size]
utils.TimeSeries.__init__(self, tsample, pulse_train)
# Insert interphase gap if necessary
gap = np.zeros(int(round(interphase_dur / tsample)))
# Order the pulses
if ptype == 'cathodicfirst':
# has negative current first
pulse = np.concatenate((off.data, gap), axis=0)
pulse = np.concatenate((pulse, on.data), axis=0)
elif ptype == 'anodicfirst':
pulse = np.concatenate((on.data, gap), axis=0)
pulse = np.concatenate((pulse, off.data), axis=0)
else:
raise ValueError("Acceptable values for `type` are "
"'anodicfirst' or 'cathodicfirst'")
utils.TimeSeries.__init__(self, tsample, pulse)
# Convert durations to number of samples
pulse_size = int(np.round(pdur / tsample))
delay_size = int(np.round(delay_dur / tsample))
stim_size = int(np.round(stim_dur / tsample))
if ptype == 'cathodic':
pulse = -np.ones(pulse_size)
elif ptype == 'anodic':
pulse = np.ones(pulse_size)
else:
raise ValueError("Acceptable values for `ptype` are 'anodic', "
"'cathodic'.")
pulse = np.concatenate((np.zeros(delay_size), pulse,
np.zeros(stim_size)))
utils.TimeSeries.__init__(self, tsample, pulse[:stim_size])
Max amplitude of the pulse train in micro-amps.
pulsetype : string
Pulse type {"cathodicfirst" | "anodicfirst"}, where
'cathodicfirst' has the negative phase first.
pulseorder : string
Pulse order {"gapfirst" | "pulsefirst"}, where
'pulsefirst' has the pulse first, followed by the gap.
"""
# Stimulus size given by `dur`
stim_size = int(np.round(1.0 * dur / tsample))
# Make sure input is non-trivial, else return all zeros
if np.isclose(freq, 0) or np.isclose(amp, 0):
utils.TimeSeries.__init__(self, tsample, np.zeros(stim_size))
return
# Envelope size (single pulse + gap) given by `freq`
# Note that this can be larger than `stim_size`, but we will trim
# the stimulus to proper length at the very end.
envelope_size = int(np.round(1.0 / float(freq) / tsample))
# Delay given by `delay`
delay_size = int(np.round(1.0 * delay / tsample))
if delay_size < 0:
raise ValueError("Delay must fit within 1/freq interval.")
delay = np.zeros(delay_size)
# Single pulse given by `pulse_dur`
pulse = amp * get_pulse(pulse_dur, tsample,
pulse), axis=0)
else:
raise ValueError("Acceptable values for `pulseorder` are "
"'pulsefirst' or 'gapfirst'")
# If `freq` is not a nice number, the resulting pulse train might not
# have the desired length
if pulse_train.size < stim_size:
fill_size = stim_size - pulse_train.shape[-1]
pulse_train = np.concatenate((pulse_train, np.zeros(fill_size)),
axis=0)
# Trim to correct length (takes care of too long arrays, too)
pulse_train = pulse_train[:stim_size]
utils.TimeSeries.__init__(self, tsample, pulse_train)
dur = rflum.shape[-1] / fps
if stimtype == 'pulsetrain':
interpulsegap = np.zeros(int(round((1.0 / freq) / tsample)) -
len(pulse))
ppt = []
for j in range(0, int(np.ceil(dur * freq))):
ppt = np.concatenate((ppt, interpulsegap), axis=0)
ppt = np.concatenate((ppt, pulse), axis=0)
ppt = ppt[0:int(round(dur / tsample))]
intfunc = spi.interp1d(np.linspace(0, len(rflum),
len(rflum)), rflum)
amp = intfunc(np.linspace(0, len(rflum), len(ppt)))
data = amp * ppt * amp_max
utils.TimeSeries.__init__(self, tsample, data)