started to updated example cells to new analysis with the right units

This commit is contained in:
2025-05-25 00:47:27 +02:00
parent 223ad8bd4b
commit e785d51b18
4 changed files with 96 additions and 99 deletions

View File

@@ -4,7 +4,7 @@ from pathlib import Path
from spectral import diag_projection, peak_size
from plotstyle import plot_style
from punitexamplecell import load_baseline, load_noise, load_spectra
from punitexamplecell import plot_colorbar
from punitexamplecell import plot_chi2, plot_colorbar
example_cell = [['2012-05-15-ac', 3],
@@ -51,18 +51,27 @@ def plot_response_spectrum(ax, s, eodf, rate, freqs, prr):
power_db = 10*np.log10(prr/np.max(prr))
ax.show_spines('b')
mask = (freqs > 30) & (freqs < 890)
ax.plot(freqs[mask], power_db[mask], **s.lsC1)
ax.plot(freqs[eod_i], power_db[eod_i] + 2, **s.psFEOD)
ax.plot(freqs[rate_i], power_db[rate_i] + 2, **s.psF0)
#ax.plot(freqs[mask], power_db[mask], **s.lsC1)
#ax.plot(freqs[eod_i], power_db[eod_i] + 2, **s.psFEOD)
#ax.plot(freqs[rate_i], power_db[rate_i] + 2, **s.psF0)
#ax.set_ylim(-25, 5)
ax.plot(freqs[mask], 1e-3*prr[mask], **s.lsC1)
ax.plot(freqs[eod_i], 1e-3*prr[eod_i] + 0.4, **s.psFEOD)
ax.plot(freqs[rate_i], 1e-3*prr[rate_i] + 0.4, **s.psF0)
ax.set_ylim(0, 6)
ax.set_xlim(0, 900)
ax.set_ylim(-25, 5)
ax.set_xticks_delta(300)
ax.set_xlabel('$f$', 'Hz')
ax.text(freqs[eod_i], power_db[eod_i] + 4, '$f_{\\rm EOD}$',
#ax.text(freqs[eod_i], power_db[eod_i] + 4, '$f_{\\rm EOD}$',
# ha='center')
#ax.text(freqs[rate_i], power_db[rate_i] + 4, '$r$',
# ha='center')
#ax.yscalebar(1.05, 0, 10, 'dB', ha='right')
ax.text(freqs[eod_i], 1e-3*prr[eod_i] + 0.8, '$f_{\\rm EOD}$',
ha='center')
ax.text(freqs[rate_i], power_db[rate_i] + 4, '$r$',
ax.text(freqs[rate_i], 1e-3*prr[rate_i] + 0.8, '$r$',
ha='center')
ax.yscalebar(1.05, 0, 10, 'dB', ha='right')
ax.yscalebar(1.05, 0, 1, 'kHz', ha='right')
def plot_response(ax, s, eodf, time1, stimulus1, contrast1, spikes1, contrast2, spikes2):
@@ -91,31 +100,16 @@ def plot_response(ax, s, eodf, time1, stimulus1, contrast1, spikes1, contrast2,
def plot_gain(ax, s, fbase, contrast1, freqs1, gain1,
contrast2, freqs2, gain2, fcutoff):
ax.axvline(fbase, **s.lsGrid)
ax.plot(freqs2, gain2, label=f'{100*contrast2:.0f}', **s.lsC2)
ax.plot(freqs1, gain1, label=f'{100*contrast1:.0f}', **s.lsC1)
ax.plot(freqs2, 1e-2*gain2, label=f'{100*contrast2:.0f}', **s.lsC2)
ax.plot(freqs1, 1e-2*gain1, label=f'{100*contrast1:.0f}', **s.lsC1)
ax.set_xlim(0, fcutoff)
ax.set_ylim(0, 1500)
ax.set_ylim(0, 12)
ax.set_xticks_delta(50)
ax.set_yticks_delta(4)
ax.set_xlabel('$f$', 'Hz')
ax.set_ylabel(r'$|\chi_1|$', 'Hz')
ax.text(fbase, 1550, '$r$', ha='center')
ax.set_ylabel(r'$|\chi_1|$', r'Hz/\%')
ax.text(fbase, 12.5, '$r$', ha='center')
def plot_chi2(ax, s, contrast, freqs, chi2, fcutoff, vmax):
ax.set_aspect('equal')
if vmax is None:
vmax = np.quantile(1e-3*chi2, 0.99)
pc = ax.pcolormesh(freqs, freqs, 1e-3*chi2, vmin=0, vmax=vmax,
rasterized=True, zorder=10)
ax.set_xlim(0, fcutoff)
ax.set_ylim(0, fcutoff)
df = 100 if fcutoff == 300 else 50
ax.set_xticks_delta(df)
ax.set_yticks_delta(df)
ax.set_xlabel('$f_1$', 'Hz')
ax.set_ylabel('$f_2$', 'Hz')
return pc
def plot_diagonals(ax, s, fbase, contrast1, freqs1, chi21, contrast2, freqs2, chi22, fcutoff):
diags = []
@@ -132,22 +126,22 @@ def plot_diagonals(ax, s, fbase, contrast1, freqs1, chi21, contrast2, freqs2, ch
sifs.append(sif)
print(f' SI at {100*contrast:.1f}% contrast: {sinorm:.2f}')
#ax.axvline(fbase, **s.lsGrid)
ax.plot(diags[1][0], 1e-3*diags[1][1], **s.lsC2)
ax.plot(diags[0][0], 1e-3*diags[0][1], **s.lsC1)
ax.plot(sifs[1], 1e-3*sips[1], **s.psC2)
ax.plot(sifs[0], 1e-3*sips[0], **s.psC1)
ax.plot(diags[1][0], 1e-4*diags[1][1], **s.lsC2)
ax.plot(diags[0][0], 1e-4*diags[0][1], **s.lsC1)
ax.plot(sifs[1], 1e-4*sips[1] + 0.3, clip_on=False, **s.psC2)
ax.plot(sifs[0], 1e-4*sips[0] + 0.3, clip_on=False, **s.psC1)
ax.set_xlim(0, 2*fcutoff)
ax.set_ylim(0, 1.7)
ax.set_ylim(0, 17)
ax.set_xticks_delta(100)
ax.set_yticks_delta(1)
ax.set_yticks_delta(5)
ax.set_xlabel('$f_1 + f_2$', 'Hz')
#ax.set_ylabel(r'$|\chi_2|$', 'kHz')
ax.text(sifs[1] - 25, 1e-3*sips[1], f'{100*contrast2:.0f}\\%',
#ax.set_ylabel(r'$|\chi_2|$', r'Hz/\%$^2$')
ax.text(sifs[1] - 25, 1e-4*sips[1], f'{100*contrast2:.0f}\\%',
ha='right')
ax.text(sifs[1] + 35, 1e-3*sips[1], f'SI={sis[1]:.1f}')
ax.text(sifs[0] - 25, 1e-3*sips[0], f'{100*contrast1:.0f}\\%',
ax.text(sifs[1] + 35, 1e-4*sips[1], f'SI={sis[1]:.1f}')
ax.text(sifs[0] - 25, 1e-4*sips[0] + 0.5, f'{100*contrast1:.0f}\\%',
ha='right')
ax.text(sifs[0] + 35, 1e-3*sips[0], f'SI={sis[0]:.1f}')
ax.text(sifs[0] + 35, 1e-4*sips[0] + 0.5, f'SI={sis[0]:.1f}')
#ax.text(fbase, 1.75, '$r$', ha='center')
@@ -167,7 +161,10 @@ if __name__ == '__main__':
print()
exit()
"""
#mode = 'all'
mode = '100'
cell_name = example_cell[0][0]
print('Example Ampullary cell:', cell_name)
eodf, rate, cv, isis, pdf, freqs, prr = load_baseline(data_path, cell_name)
@@ -177,9 +174,9 @@ if __name__ == '__main__':
*example_cell[0])
contrast2, time2, stimulus2, spikes2 = load_noise(data_path,
*example_cell[1])
fcutoff1, contrast1, freqs1, gain1, chi21 = load_spectra(data_path,
fcutoff1, contrast1, freqs1, gain1, chi21 = load_spectra(data_path, mode,
*example_cell[0])
fcutoff2, contrast2, freqs2, gain2, chi22 = load_spectra(data_path,
fcutoff2, contrast2, freqs2, gain2, chi22 = load_spectra(data_path, mode,
*example_cell[1])
print(f' contrast1: {100*contrast1:4.1f}% contrast2: {100*contrast2:4.1f}%')
print(f' fcutoff1 : {fcutoff1:3.0f}Hz fcutoff2 : {fcutoff2:3.0f}Hz')
@@ -210,15 +207,15 @@ if __name__ == '__main__':
plot_gain(axg, s, rate, contrast1, freqs1, gain1,
contrast2, freqs2, gain2, fcutoff1)
pc = plot_chi2(axc1, s, contrast2, freqs2, chi22, fcutoff2, 1.7)
pc = plot_chi2(axc1, s, contrast2, freqs2, chi22, fcutoff2, 10)
axc1.plot([0, fcutoff2], [0, fcutoff2], zorder=20, **s.lsDiag)
axc1.set_title(f'$c$={100*contrast2:g}\\,\\%',
fontsize='medium', color=s.cell_color2)
pc = plot_chi2(axc2, s, contrast1, freqs1, chi21, fcutoff1, 1.7)
pc = plot_chi2(axc2, s, contrast1, freqs1, chi21, fcutoff1, 10)
axc2.set_title(f'$c$={100*contrast1:g}\\,\\%',
fontsize='medium', color=s.cell_color1)
axc2.plot([0, fcutoff1], [0, fcutoff1], zorder=20, **s.lsDiag)
plot_colorbar(axc2, pc, 1)
plot_colorbar(axc2, pc, 2)
plot_diagonals(axd, s, rate, contrast1, freqs1, chi21,
contrast2, freqs2, chi22, fcutoff1)
@@ -229,22 +226,20 @@ if __name__ == '__main__':
print('Additional example cells:')
for k, (cell, run) in enumerate(example_cells):
eodf, rate, cv, isis, pdf, _, _ = load_baseline(data_path, cell)
fcutoff, contrast, freqs, gain, chi2 = load_spectra(data_path, cell, run)
fcutoff, contrast, freqs, gain, chi2 = load_spectra(data_path, mode,
cell, run)
dfreqs, diag = diag_projection(freqs, chi2, 2*fcutoff)
sinorm, sirel, sif = peak_size(dfreqs, diag, rate, median=False)
print(f' {cell:<22s}: run={run:2d}, fbase={rate:3.0f}Hz, CV={cv:.2f}, SI={sinorm:3.1f}')
plot_isih2(axs[0, k], s, rate, cv, isis, pdf)
pc = plot_chi2(axs[1, k], s, contrast, freqs, chi2, fcutoff, 1.2)
#axs[k].set_title(f'$r={rate:.0f}$Hz, CV$_{{\\rm base}}$={cv:.2f}', fontsize='medium')
pc = plot_chi2(axs[1, k], s, contrast, freqs, chi2, fcutoff, 20)
axs[1, k].text(0.95, 0.9, f'SI($r$)={sinorm:.1f}', ha='right', zorder=50,
color='white', fontsize='medium',
transform=axs[1, k].transAxes)
axs[0, 0].text(0, 1.6, 'Ampullary cells:', transform=axs[0, 0].transAxes,
color=s.cell_color1,
fontsize='large')
#axs[0, -1].text(0.97, -0.45, '5\\,ms', ha='right',
# transform=axs[0, -1].transAxes)
plot_colorbar(axs[1, -1], pc, 0.4)
plot_colorbar(axs[1, -1], pc, 5)
fig.common_yticks(axs[1, :])
fig.tag([axs[0, :]], xoffs=-3, yoffs=1)