added stimuli

This commit is contained in:
Jan Benda 2026-01-26 19:20:30 +01:00
parent 34fdd9872c
commit 2328e025c7

View File

@ -78,6 +78,35 @@ def align_spikes(spikes, period):
return spikes return spikes
def plot_symbols(ax, s):
ax.show_spines('')
def plot_stimulus(ax, s, tmax, eodf, f1, f2, c=0.1):
time = np.arange(0, tmax, 0.0001)
eod = np.cos(2*np.pi*eodf*time)
am = np.ones(len(time))
ams = {}
label = '$f_{EOD}$'
if f1 is not None:
am += c*np.cos(2*np.pi*f1*time)
ams = s.lsF01
label += r' \& $f_1$'
if f2 is not None:
am += c*np.cos(2*np.pi*f2*time)
ams = s.lsF02
label += r' \& $f_2$'
if f1 is not None and f2 is not None:
ams = s.lsF012
ax.show_spines('')
ax.plot(1000*time, am*eod, **s.lsStim)
if len(ams) > 0:
ax.plot(1000*time, am, **ams)
ax.set_xlim(0, 1000*tmax)
ax.set_ylim(-1.02 - 2*c, 1.02 + 2*c)
ax.text(0, 1.1, label, transform=ax.transAxes)
def plot_raster(ax, s, spikes, tmin, tmax): def plot_raster(ax, s, spikes, tmin, tmax):
spikes_ms = [1000*(s[(s > tmin) & (s < tmax)] - tmin) for s in spikes] spikes_ms = [1000*(s[(s > tmin) & (s < tmax)] - tmin) for s in spikes]
ax.show_spines('') ax.show_spines('')
@ -140,7 +169,6 @@ if __name__ == '__main__':
print(f' Df2 = {df2:.1f}Hz') print(f' Df2 = {df2:.1f}Hz')
print(f' {len(spikes)} trials') print(f' {len(spikes)} trials')
s = plot_style() s = plot_style()
fig, axs = plt.subplots(5, 4, cmsize=(s.plot_width, 0.6*s.plot_width), fig, axs = plt.subplots(5, 4, cmsize=(s.plot_width, 0.6*s.plot_width),
height_ratios=[1, 2, 1, 3, 6]) height_ratios=[1, 2, 1, 3, 6])
@ -149,14 +177,17 @@ if __name__ == '__main__':
tmax = 0.2 tmax = 0.2
twins = [[-t0, 0], [t1, t1 + t2], [0, t1], [t1 + t2, t1 + t2 + t12]] twins = [[-t0, 0], [t1, t1 + t2], [0, t1], [t1 + t2, t1 + t2 + t12]]
freqs = [eodf, df2, df1, df2] freqs = [eodf, df2, df1, df2]
stim_freqs = [[None, None], [df2, None], [None, df1], [df1, df2]]
for i in range(axs.shape[1]): for i in range(axs.shape[1]):
tstart, tend = twins[i] tstart, tend = twins[i]
plot_symbols(axs[0, i], s)
plot_stimulus(axs[1, i], s, tmax - tmin, eodf, *stim_freqs[i])
sub_spikes = [times[(times >= tstart) & (times <= tend)] - tstart for times in spikes] sub_spikes = [times[(times >= tstart) & (times <= tend)] - tstart for times in spikes]
plot_psd(axs[4, i], s, sub_spikes, tend - tstart, fmax)
print(f'align spikes for frequency {freqs[i]:.0f}Hz:') print(f'align spikes for frequency {freqs[i]:.0f}Hz:')
sub_spikes = align_spikes(sub_spikes, abs(1/freqs[i])) sub_spikes = align_spikes(sub_spikes, abs(1/freqs[i]))
plot_raster(axs[2, i], s, sub_spikes, tmin, tmax) plot_raster(axs[2, i], s, sub_spikes, tmin, tmax)
plot_rate(axs[3, i], s, sub_spikes, tmin, tmax) plot_rate(axs[3, i], s, sub_spikes, tmin, tmax)
plot_psd(axs[4, i], s, sub_spikes, tend - tstart, fmax)
#fig.savefig() #fig.savefig()
plt.show() plt.show()
print() print()