updated model figures to new analysis with the right units

This commit is contained in:
2025-05-25 12:29:46 +02:00
parent e785d51b18
commit e87d63c46b
5 changed files with 219 additions and 351 deletions

View File

@@ -1,5 +1,7 @@
import numpy as np
import matplotlib as mpl
import plottools.plottools as pt
from spectral import diag_projection, peak_size
from plottools.spines import spines_params
from plottools.labels import labels_params
from plottools.colors import lighter, darker
@@ -16,6 +18,66 @@ def significance_str(p):
return '$p<0.001$'
def noise_files(data_path, cell_name, alpha=None):
if alpha is None:
file_pattern = f'{cell_name}-chi2-split-*.npz'
else:
file_pattern = f'{cell_name}-chi2-noise-{1000*alpha:03.0f}-*.npz'
files = sorted(data_path.glob(file_pattern), key=lambda x: x.stem)
if len(files) == 0:
return None, 0
nums = [int(fn.stem.split('-')[-1]) for fn in files]
idxs = np.argsort(nums)
files = [files[i] for i in idxs]
nums = [nums[i] for i in idxs]
return files, nums
def plot_chi2(ax, s, freqs, chi2, fcutoff, rate=None):
ax.set_visible(True)
ax.set_aspect('equal')
i0 = np.argmin(freqs < 0)
i1 = np.argmax(freqs > fcutoff)
if i1 == 0:
i1 = len(freqs)
freqs = freqs[i0:i1]
chi2 = 1e-4*chi2[i0:i1, i0:i1] # Hz/%^2
vquantile = 0.996
vmax = np.quantile(chi2, vquantile)
ten = 10**np.floor(np.log10(vmax))
for fac, delta in zip([1, 2, 3, 4, 6, 8, 10],
[0.5, 1, 1, 2, 3, 4, 5]):
if fac*ten >= vmax:
#vmax = prev_fac*ten
#ten *= prev_delta
vmax = fac*ten
ten *= delta
break
prev_fac = fac
prev_delta = delta
pc = ax.pcolormesh(freqs, freqs, chi2, vmin=0, vmax=vmax,
rasterized=True)
ax.set_xlim(0, fcutoff)
ax.set_ylim(0, fcutoff)
ax.set_xticks_delta(100)
ax.set_yticks_delta(100)
ax.set_xlabel('$f_1$', 'Hz')
ax.set_ylabel('$f_2$', 'Hz')
if rate is not None:
dfreqs, diag = diag_projection(freqs, chi2, 2*fcutoff)
nli, nlirel, nlif = peak_size(dfreqs, diag, rate, median=False)
ax.text(0.95, 0.88, f'SI($r$)={nli:.1f}', ha='right', zorder=50,
color='white', fontsize='medium', transform=ax.transAxes)
cax = ax.inset_axes([1.04, 0, 0.05, 1])
cax.set_spines_outward('lrbt', 0)
cb = ax.get_figure().colorbar(pc, cax=cax)
cb.outline.set_color('none')
cb.outline.set_linewidth(0)
cax.set_ylabel(r'$|\chi_2|$', r'Hz/\%$^2$')
cax.set_yticks_delta(ten)
return cax
def plot_style():
palette = pt.palettes['muted']
lwthick = 1.6