Compare commits

...

5 Commits

2 changed files with 164 additions and 83 deletions

232
main.tex
View File

@@ -1,5 +1,17 @@
\documentclass[a4paper, 12pt]{article} \documentclass[a4paper, 12pt]{article}
\title{Emergent intensity invariance vs. signal-to-noise ratio at three consecutive processing stages along the grasshopper song recognition pathway}
\author{Jona Hartling\textsuperscript{1},
Ale\v{s} \v{S}korjanc\textsuperscript{2},
Jan Benda\textsuperscript{1,3}}
\date{\normalsize
\textsuperscript{1} Institute for Neurobiology, Eberhard Karls Universität, 72076 Tübingen, Germany \\
\textsuperscript{2} Department of Biology, Biotechnical Faculty, University of Ljubljana, Ve\v{c}na pot 111, 1000 Ljubljana, Slovenia\\
\textsuperscript{3} Bernstein Center for Computational Neuroscience Tübingen, 72076 Tübingen, Germany}
\usepackage[left=2cm,right=2cm,top=2cm,bottom=2cm,includeheadfoot]{geometry} \usepackage[left=2cm,right=2cm,top=2cm,bottom=2cm,includeheadfoot]{geometry}
% \usepackage[onehalfspacing]{setspace} % \usepackage[onehalfspacing]{setspace}
\usepackage{graphicx} \usepackage{graphicx}
@@ -17,30 +29,38 @@
\addto\captionsenglish{\renewcommand{\tablename}{Tab.}} \addto\captionsenglish{\renewcommand{\tablename}{Tab.}}
\usepackage[separate-uncertainty=true, locale=DE]{siunitx} \usepackage[separate-uncertainty=true, locale=DE]{siunitx}
\sisetup{output-exponent-marker=\ensuremath{\mathrm{e}}} \sisetup{output-exponent-marker=\ensuremath{\mathrm{e}}}
%%%%% section style %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage[sf,bf,it,big,clearempty]{titlesec}
\usepackage{titling}
\renewcommand{\maketitlehooka}{\sffamily\bfseries}
\renewcommand{\maketitlehookb}{\rmfamily\mdseries}
\setcounter{secnumdepth}{-1}
%%%%% bibliography %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage[round,colon]{natbib}
\renewcommand{\bibsection}{\section{References}}
\setlength{\bibsep}{0pt}
\setlength{\bibhang}{1.5em}
\bibliographystyle{jneurosci}
% \usepackage[capitalize]{cleveref} % \usepackage[capitalize]{cleveref}
% \crefname{figure}{Fig.}{Figs.} % \crefname{figure}{Fig.}{Figs.}
% \crefname{equation}{Eq.}{Eqs.} % \crefname{equation}{Eq.}{Eqs.}
% \creflabelformat{equation}{#2#1#3} % \creflabelformat{equation}{#2#1#3}
\usepackage[ %\usepackage[
backend=bibtex, % backend=bibtex,
style=authoryear, % style=authoryear,
pluralothers=true, % pluralothers=true,
maxcitenames=1, % maxcitenames=1,
mincitenames=1 % mincitenames=1
]{biblatex} % ]{biblatex}
\addbibresource{cite.bib} %\addbibresource{cite.bib}
%\bibdata %\bibdata
%\bibstyle %\bibstyle
%\citation %\citation
\title{Emergent intensity invariance vs. signal-to-noise ratio at three consecutive processing stages along the grasshopper song recognition pathway} %%%%% hyperref %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\author{Jona Hartling$^1$, Ale\v{s} \v{S}korjanc$^2$, Jan Benda$^{1,3}$} \usepackage[breaklinks=true,colorlinks=true,citecolor=blue!30!black,urlcolor=blue!30!black,linkcolor=blue!30!black]{hyperref}
\date{$^1$ Institute for Neurobiology, Eberhard Karls Universität, 72076 Tübingen, Germany \\
$^2$ Department of Biology, Biotechnical Faculty, University of Ljubljana, Ve\v{c}na pot 111, 1000 Ljubljana, Slovenia\\
$^3$ Bernstein Center for Computational Neuroscience Tübingen, 72076 Tübingen, Germany}
\begin{document}
\maketitle{}
% Text references and citations: % Text references and citations:
\newcommand{\bcite}[1]{\cite{#1}} \newcommand{\bcite}[1]{\cite{#1}}
@@ -110,6 +130,19 @@
\newcommand{\tstat}{T_{\text{total}}} % Time interval where c(t) is stationary \newcommand{\tstat}{T_{\text{total}}} % Time interval where c(t) is stationary
\newcommand{\muf}{\mu_{f_i}} % Average feature value \newcommand{\muf}{\mu_{f_i}} % Average feature value
%%%%% notes %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcommand{\note}[2][]{\textcolor{red}{[#1: #2]}}
%\newcommand{\note}[2][]{}
\newcommand{\notejh}[1]{\note[JH]{#1}}
\newcommand{\notejb}[1]{\note[JB]{#1}}
\newcommand{\noteas}[1]{\note[AS]{#1}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
\begin{document}
\maketitle
\section{Introduction} \section{Introduction}
% % Drosophila/visual/article: % % Drosophila/visual/article:
% \bcite{ketkar2023multifaceted} % \bcite{ketkar2023multifaceted}
@@ -130,22 +163,16 @@
% \bcite{bolding2018recurrent} % \bcite{bolding2018recurrent}
% Introduction to intensity invariance: % Introduction to intensity invariance:
Intensity invariance is a fundamental property of sensory systems across Intensity invariance is a fundamental property of sensory systems across different modalities. For example, it has been shown in auditory systems of drosophila \citep{ozeri2018fast}, crickets \citep{benda2008spike}, grasshoppers \citep{clemens2010intensity}, and primates \citep{barbour2011intensity}, visual systems in drosophila \citep{ketkar2023multifaceted}, and olfactory systems of rodents \citep{bolding2018recurrent}. It allows for the robust recognition
modalities and species, from fruit flies~(\bcite{ozeri2018fast};
\bcite{ketkar2023multifaceted}) over crickets~(\bcite{benda2008spike}) and
grasshoppers~(\bcite{clemens2010intensity}) to
rodents~(\bcite{bolding2018recurrent}) and
primates~(\bcite{barbour2011intensity}). It allows for the robust recognition
of behaviorally relevant stimuli despite variations in stimulus intensity. of behaviorally relevant stimuli despite variations in stimulus intensity.
However, the computational mechanisms underlying intensity invariance are often However, the computational mechanisms underlying intensity invariance are often
difficult to disentangle. Here, we use a physiologically inspired functional difficult to disentangle. Here, we use a physiologically inspired functional
model of the grasshopper song recognition pathway to investigate the emergence model of the grasshopper (\textit{Acrididae}) song recognition pathway to investigate the emergence
of intensity invariance throughout the auditory processing stream. of intensity invariance at different levels of the auditory processing stream, which has been studied extensively.
% Why the grasshopper auditory system? % Why the grasshopper auditory system?
% Why focus on song recognition among other auditory functions? % Why focus on song recognition among other auditory functions?
The auditory system of grasshoppers~(\textit{Acrididae}) has been studied Grasshoppers rely on their hearing for
extensively over the years. Grasshoppers rely on their sense of hearing for
intraspecific communication --- including mate intraspecific communication --- including mate
attraction~(\bcite{helversen1972gesang}) and attraction~(\bcite{helversen1972gesang}) and
evaluation~(\bcite{stange2012grasshopper}), sender evaluation~(\bcite{stange2012grasshopper}), sender
@@ -157,7 +184,7 @@ contexts~(\bcite{otte1970comparative}). The most conspicuous acoustic signals
of grasshoppers are their species-specific calling songs, which broadcast the of grasshoppers are their species-specific calling songs, which broadcast the
presence of the singing individual to potential mates within range. These songs presence of the singing individual to potential mates within range. These songs
are usually more characteristic of a species than morphological are usually more characteristic of a species than morphological
traits~(\bcite{tishechkin2016acoustic}; \bcite{tarasova2021eurasius}), which traits (\bcite{tishechkin2016acoustic}; \bcite{tarasova2021eurasius}), which
can vary greatly within species~(\bcite{rowell1972variable}; can vary greatly within species~(\bcite{rowell1972variable};
\bcite{kohler2017morphological}). The reliance on songs to mediate reproduction \bcite{kohler2017morphological}). The reliance on songs to mediate reproduction
represents a strong evolutionary driving force that resulted in a massive represents a strong evolutionary driving force that resulted in a massive
@@ -182,7 +209,7 @@ Grasshopper songs, like all acoustic signals, are subject to sound attenuation,
which depends on the distance from the sound source, the frequency content of which depends on the distance from the sound source, the frequency content of
the signal, and the vegetation of the habitat~(\bcite{michelsen1978sound}). the signal, and the vegetation of the habitat~(\bcite{michelsen1978sound}).
Sound attenuation has two major consequences for song recognition. First, the Sound attenuation has two major consequences for song recognition. First, the
amplitude dynamics of the song pattern degrade with increasing distance to the amplitude dynamics of the song pattern degrades with increasing distance to the
sender, which limits the effective communication range of grasshoppers sender, which limits the effective communication range of grasshoppers
to~\mbox{1\,--\,2\,m} in their typical grassland to~\mbox{1\,--\,2\,m} in their typical grassland
habitats~(\bcite{lang2000acoustic}). Second, the intensity of a song at the habitats~(\bcite{lang2000acoustic}). Second, the intensity of a song at the
@@ -203,9 +230,9 @@ degrees~(\bcite{clemens2010intensity}) and by different
mechanisms~(\bcite{hildebrandt2009origin}). mechanisms~(\bcite{hildebrandt2009origin}).
% How did we expand on the previous framework (feat. Clemens et al.)? % How did we expand on the previous framework (feat. Clemens et al.)?
In the current study, we leverage functional modelling to trace the emergence In the current study, we use functional modelling of the grasshopper
of intensity invariance through individual processing steps of the grasshopper song recognition pathway to identify individual processing steps that
song recognition pathway. The model pathway we propose here is based on a contribute to intensity invariance of the auditory system. The model pathway we propose here is based on a
previous functional model framework for song recognition in both previous functional model framework for song recognition in both
crickets~(\bcite{clemens2013computational}; \bcite{hennig2014time}) and crickets~(\bcite{clemens2013computational}; \bcite{hennig2014time}) and
grasshoppers~(\bcite{clemens2013feature}; review on grasshoppers~(\bcite{clemens2013feature}; review on
@@ -216,14 +243,14 @@ It includes feature extraction by a bank of linear-nonlinear feature detectors,
evidence accumulation by temporal averaging of each feature, and categorical evidence accumulation by temporal averaging of each feature, and categorical
decision making by a weighted linear combination of feature values. We adopted decision making by a weighted linear combination of feature values. We adopted
the general structure of the existing framework and extended it by a the general structure of the existing framework and extended it by a
physiologically plausible preprocessing stage --- including spectral filtering, physiologically plausible preprocessing stage --- spectral filtering,
envelope extraction, logarithmic compression, and intensity adaptation --- envelope extraction, logarithmic compression, and intensity adaptation ---
which allows the model to operate on unmodified recordings of natural which allows the model to operate on unmodified recordings of natural
grasshopper songs. The resulting model pathway thus covers the entire auditory grasshopper songs. The resulting model pathway thus covers the entire auditory
processing stream from the initial reception of airborne sound waves to the processing stream from the initial reception of airborne sound waves to the
generation of a high-dimensional feature representation that allows for the generation of a high-dimensional feature representation that allows for the
categorical recognition of conspecific songs. It incorporates anatomical, categorical recognition of conspecific songs. It incorporates anatomical,
physiological, and ethological evidence from several decades of research on the physiological, and ethological evidence from research on the
grasshopper auditory system. In the following, we provide a side-by-side grasshopper auditory system. In the following, we provide a side-by-side
account of the known physiological processing steps along the song recognition account of the known physiological processing steps along the song recognition
pathway and their functional approximations in the model pathway. We then pathway and their functional approximations in the model pathway. We then
@@ -1778,60 +1805,110 @@ adaptation. But the trade-off between intensity invariance and SNR likely goes
beyond the particular mechanisms along the pathway. After all, a transformation beyond the particular mechanisms along the pathway. After all, a transformation
is not expected to compress a range of different input intensities into a is not expected to compress a range of different input intensities into a
constant output intensity without sacrificing some of the corresponding input constant output intensity without sacrificing some of the corresponding input
SNR. This suggests that the trade-off is a more general principle that applies SNR. Accordingly, the trade-off likely is a more general principle that might
to any transformation that achieves or improves intensity invariance. apply to any transformation that achieves or improves intensity invariance.
% Dependence of thresh-LP intensity invariance on threshold value (+unlimited SNR):
The second mechanism of intensity invariance consists of thresholding and The second mechanism of intensity invariance consists of thresholding and
temporal averaging of $c_i(t)$ into $f_i(t)$. Here, the trade-off between temporal averaging of $c_i(t)$ into $f_i(t)$. Here, the trade-off between
intensity invariance and SNR is mediated by the threshold value $\thr$. A lower intensity invariance and SNR is mediated by the threshold value $\thr$. The
$\thr$~($\thr\to0$) improves the intensity invariance of $f_i(t)$ by shifting effects of $\thr$ on the intensity invariance and SNR of $f_i(t)$ are best
the saturation point towards lower $\sca$. However, a lower $\thr$ also raises assessed if the mechanism is viewed in isolation. A lower $\thr$~($\thr\to0$)
the noise floor of $f_i(t)$ by including more of the pure-noise $c_i(t)$, which improves the intensity invariance of $f_i(t)$ by shifting the saturation point
decreases the SNR of $f_i(t)$. The distribution $\pci$ of the pure-noise towards lower $\sca$. The saturation level of $f_i(t)$ is mostly independent of
$c_i(t)$ is very close to a normal distribution with mean $\mu\approx0$ for all $\thr$, assuming that $\sca$ is sufficiently large. However, the lower $\thr$,
kernels $k_i(t)$. The value of the pure-noise $f_i(t)$ is hence 0.5 for the more of the pure-noise $c_i(t)$ is included in $f_i(t)$ and hence the
$\thr=0$ and decreases for higher $\thr$. If $\thr$ is set above the maximum of higher the noise floor of $f_i(t)$, which decreases the SNR of $f_i(t)$. The
$c_i(t)$, the pure-noise feature value is 0, which results in an "unlimited" distribution $\pci$ of the pure-noise $c_i(t)$ is very close to a normal
SNR of $f_i(t)$. In this case, any non-zero feature value that is sustained for distribution with mean $\mu\approx0$ for all kernels in the set. The value of
a sufficient duration could serve as indicator for the presence of $\soc(t)$ in the pure-noise $f_i(t)$ is hence 0.5 for $\thr=0$ and decreases for higher
$\raw(t)$, although at the cost of a higher saturation point. Of course, this $\thr$. If $\thr$ is set above the maximum of $c_i(t)$, the pure-noise feature
would require a fine evolutionary tuning of $\thr$ to the properties of the value is 0, which results in an "unlimited" SNR of $f_i(t)$. In this case, any
natural noise in a certain habitat to avoid false positives. non-zero feature value that is sustained for a sufficient duration could serve
as indicator for the presence of $\soc(t)$ in $\raw(t)$. Of course, this would
require a fine evolutionary tuning of $\thr$ to the properties of the natural
noise in a certain habitat in order to avoid false positives.
The saturation level of $f_i(t)$ is independent of $\thr$ as long as the % Interaction between the two mechanisms of intensity invariance (expectations):
intensity invariance by the previous mechanism is neglected. % (Also: Extremely important, but maybe too wordy?)
The intensity invariance of $f_i(t)$ is not only determined by the second
mechanism but by the interaction between the two consecutive mechanisms along
the pathway. This interaction is difficult to assess systematically due to the
multitude of involved parameters. A basic expectation is that the combined
effects of the two mechanisms mostly depend on which mechanism achieves a lower
saturation point, assuming that $f_i(t)$ is always intensity-invariant if
$\adapt(t)$ is already intensity-invariant. Furthermore, it is necessary to
distinguish between the intrinsic saturation point of $f_i(t)$ --- the
saturation point that the second mechanism can achieve in isolation --- and its
actual saturation point including the effects of the first mechanism. The same
distinction applies to the saturation level of $f_i(t)$. If the intrinsic
saturation point of $f_i(t)$ is lower than the saturation point of $\adapt(t)$,
$f_i(t)$ is expected to reach the intrinsic saturation level at the intrinsic
saturation point. In contrast, if the intrinsic saturation point of $f_i(t)$ is
higher than the saturation point of $\adapt(t)$, $f_i(t)$ is expected to
saturate at the lower saturation point of $\adapt(t)$ instead. This has no
detrimental effect on the intensity invariance of $f_i(t)$. However, $f_i(t)$
is then also expected to saturate below its intrinsic saturation level.
Moreover, the saturation level of $f_i(t)$ is not independent of $\thr$ anymore
but decreases with increasing $\thr$. A lower saturation level of $f_i(t)$ is
not necessarily detrimental to the SNR of $f_i(t)$ --- $f_i(t)$ can still
achieve an arbitrarily high SNR by setting $\thr$ just above the maximum
pure-noise $c_i(t)$. More importantly, a lower saturation level of $f_i(t)$
also means that the range of possible feature values that $f_i(t)$ can take on
is limited compared to the case where $f_i(t)$ can reach its intrinsic
saturation level. This effectively restricts the part of the feature space that
is available for species-specific song representation. The interaction between
the two mechanisms of intensity invariance could therefore have unfavorable
consequences if the first mechanism results in a lower saturation point than
the second mechanism.
% Interaction between the two mechanisms of intensity invariance (current results):
The saturation point and saturation level of a feature in the set varies with
the specific kernel.
If $f_i(t)$ can achieve an arbitrarily high SNR, it can counteract the The combined effects of the two mechanisms on the intensity invariance of a
comparably low SNR of $\adapt(t)$ specific feature in the set vary between different kernels
The maximum of the pure-noise $c_i(t)$ is assumed to be very Based on the current results, it is difficult to assess which of the two
small due to the various SNR improvements along the pathway, so that the mechanisms has a stronger effect on the intensity invariance of a specific
required increase in $\thr$ and hence the saturation point of $f_i(t)$ is not feature in the set.
expected to be substantial.
The combined effects of the two mechanisms on the intensity invariance of a
% \newpage specific feature in the set vary between different kernels. It is difficult to
% \subsection{Intensity invariance versus intensity invariance} assess which of the two mechanisms achieves a lower saturation point for a
specific feature. On the one hand, the distribution of saturation levels across
Two consecutive mechanisms of intensity invariance do not necessarily add up to the feature set is not symmetric around a feature value of 0.5, which is the
a stronger overall intensity invariance. If the first mechanism results in a case if the logarithmic compression along the pathway is disabled. This result
lower saturation point than the second mechanism by itself, the saturation indicates that a number of features does not reach the intrinsic saturation
point of feature $f_i(t)$ will be determined solely by the first mechanism. In level, which suggests that the intensity invariance of these features is
this case, the saturation level of $f_i(t)$ will conform to the intensity that determined by the first mechanism rather than the second mechanism. One the
$f_i(t)$ can reach for the given saturation point rather than the intrinsic other hand, the distribution of saturation points across the feature set
saturation level of $f_i(t)$. Conversely, if the second mechanism results in a indicates that a number of features does indeed achieve a lower saturation
lower saturation point than the first mechanism, both the saturation point and point than the preceeding representations. This result suggests that the
the saturation level of $f_i(t)$ will be determined by the second mechanism. intensity invariance of these features is determined by the second mechanism
The saturation points of $f_i(t)$ across the set are distributed over a much rather than the first mechanism. In either case, the question arises to what
wider range than those of the preceeding kernel responses $c_i(t)$, which
suggests that the interaction between the two mechanisms is specific to
individual kernels. A number of $f_i(t)$ achieve a lower saturation point than
the respective $c_i(t)$, whereas some $f_i(t)$ exhibit similar or only
marginally lower saturation points. In these cases, the question arises to what
extent two consecutive mechanisms of intensity invariance are actually extent two consecutive mechanisms of intensity invariance are actually
beneficial for the overall system. beneficial for the overall system.
These cases raise the question whether the first mechanism is actually
necessary for the overall system if the second mechanism can apparently achieve
intensity invariance with a lower saturation point. These cases raise the
question whether intensity invariance by the first mechanism --- while
achieving a lower saturation point than the second mechanism --- is actually
beneficial
The saturation point of $f_i(t)$ varies between different kernels in the set. A
number of $f_i(t)$ achieve a lower saturation point than $c_i(t)$ --- and hence a lower saturation point than $\adapt(t)$ --- which
indicates that the second mechanism takes precedence over the first mechanism.
Some $f_i(t)$ exhibit similar or only marginally lower saturation points than
The saturation points of $f_i(t)$ across the set are distributed over a much
wider range than those of the preceeding $c_i(t)$,
In these cases, the question arises to what extent two
consecutive mechanisms of intensity invariance are actually beneficial for the
overall system.
From a computational perspective, the answer could be that logarithmic From a computational perspective, the answer could be that logarithmic
compression and adaptation is a necessary preprocessing step towards robust compression and adaptation is a necessary preprocessing step towards robust
$f_i(t)$ because it works towards a more consistent distribution $\pci$ of $f_i(t)$ because it works towards a more consistent distribution $\pci$ of
@@ -1936,7 +2013,8 @@ habitat.
% - How to integrate the available knowledge on anatomy, physiology, ethology?\\ % - How to integrate the available knowledge on anatomy, physiology, ethology?\\
% $\rightarrow$ Abstract, simplify, formalize $\rightarrow$ Functional model framework % $\rightarrow$ Abstract, simplify, formalize $\rightarrow$ Functional model framework
\printbibliography %\printbibliography
\bibliography{cite}
\newpage \newpage
\section{Appendix} \section{Appendix}

View File

@@ -442,6 +442,7 @@ for stage in stages:
# Indicate saturation point(s): # Indicate saturation point(s):
if stage in ['log', 'inv', 'conv', 'feat']: if stage in ['log', 'inv', 'conv', 'feat']:
# Get and plot single curve saturation point:
ind = get_saturation(curve, **plateau_settings)[1] ind = get_saturation(curve, **plateau_settings)[1]
crit_inds[stage] = ind crit_inds[stage] = ind
scale = scales[ind] scale = scales[ind]
@@ -452,6 +453,13 @@ for stage in stages:
transform=raw_axes[0].get_xaxis_transform()) transform=raw_axes[0].get_xaxis_transform())
raw_axes[0].vlines(scale, raw_axes[0].get_ylim()[0], curve[ind], raw_axes[0].vlines(scale, raw_axes[0].get_ylim()[0], curve[ind],
color=color, **plateau_line_kwargs) color=color, **plateau_line_kwargs)
if stage in ['conv', 'feat']:
# Get and log distribution of swarm saturation points:
inds = np.array(get_saturation(measure, **plateau_settings)[1])
if np.isnan(inds).sum():
print('WARNING: Found NaN saturation point(s)!')
inds = inds[~np.isnan(inds)].astype(int)
crit_scales_swarm[stage] = scales[inds]
## NORMALIZED MEASURE: ## NORMALIZED MEASURE:
@@ -476,11 +484,6 @@ for stage in stages:
fill_kwargs = dist_fill_kwargs | dict(color=color) fill_kwargs = dist_fill_kwargs | dict(color=color)
y_dist(base_insets[i1], measure[-1], nbins=100, log=True, y_dist(base_insets[i1], measure[-1], nbins=100, log=True,
line_kwargs=line_kwargs, fill_kwargs=fill_kwargs) line_kwargs=line_kwargs, fill_kwargs=fill_kwargs)
# Get and log distribution of saturation points:
inds = np.array(get_saturation(measure, **plateau_settings)[1])
if np.isnan(inds).sum():
inds = inds[~np.isnan(inds)].astype(int)
crit_scales_swarm[stage] = scales[inds]
if stage == 'feat': if stage == 'feat':
# Plot distribution of saturation points on shared bins: # Plot distribution of saturation points on shared bins:
bin_lims = [0.01, 1.1 * max([s.max() for s in crit_scales_swarm.values()])] bin_lims = [0.01, 1.1 * max([s.max() for s in crit_scales_swarm.values()])]