Made fig_invariance_rect_lp.pdf and corresponding appendix figure.

Adjusted fig_invariance_log_hp.pdf with 2nd yaxis in dB.

Co-authored-by: Copilot <copilot@github.com>
This commit is contained in:
j-hartling
2026-04-27 18:18:34 +02:00
parent 5411a309f7
commit 7e1aa8721a
26 changed files with 994 additions and 195 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -243,42 +243,55 @@
\@writefile{lof}{\contentsline {figure}{\numberline {3}{\ignorespaces \textbf {Representations of a song of \textit {O. rufipes} during the feature extraction stage.} Different colors indicate Gabor kernels with different lobe number $n$ and sign, with lighter colors for higher $n$~($1\,\leq \,n\,\leq \,4$; both $+$ and $-$ per $n$; two kernel widths $\sigma $ of $4\,$ms and $32\,$ms per sign). \textbf {a}:~Kernel-specific filter responses. \textbf {b}:~Binary responses. \textbf {c}:~Finalized features. }}{10}{}\protected@file@percent }
\newlabel{fig:stages_feat}{{3}{10}{}{}{}}
\@writefile{toc}{\contentsline {section}{\numberline {3}Two mechanisms driving the emergence of intensity-invariant song representation}{10}{}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {3.1}Logarithmic compression \& spike-frequency adaptation}{11}{}\protected@file@percent }
\newlabel{eq:toy_env}{{11}{11}{}{}{}}
\newlabel{eq:toy_log}{{12}{11}{}{}{}}
\newlabel{eq:toy_highpass}{{13}{11}{}{}{}}
\newlabel{eq:toy_snr}{{14}{12}{}{}{}}
\@writefile{lof}{\contentsline {figure}{\numberline {4}{\ignorespaces \textbf {Intensity invariance by logarithmic compression and adaptation is restricted by the noise floor.} Synthetic input $x_{\text {filt}}(t)$ consists of song component $s(t)$ scaled by $\alpha $ with (\textbf {c}{} and \textbf {d}) or without (\textbf {a}{} and \textbf {b}) additive noise component $\eta (t)$. Input $x_{\text {filt}}(t)$ is transformed into envelope $x_{\text {env}}(t)$, logarithmically compressed envelope $x_{\text {dB}}(t)$, and intensity-adapted envelope $x_{\text {adapt}}(t)$. \textbf {Left}:~$x_{\text {env}}(t)$, $x_{\text {dB}}(t)$, and $x_{\text {adapt}}(t)$ for different scales $\alpha $. \textbf {Right}:~Ratios of the standard deviation of $x_{\text {env}}(t)$, $x_{\text {dB}}(t)$, and $x_{\text {adapt}}(t)$ relative to the respective reference standard deviation $\sigma _{\eta }$ for input $x_{\text {filt}}(t)=\eta (t)$. \textbf {a}{} and \textbf {b}:~Ideally, if $x_{\text {filt}}(t)=\alpha \cdot s(t)$, then $x_{\text {adapt}}(t)$ is intensity-invariant across all $\alpha $. \textbf {c}{} and \textbf {d}:~In practice, if $x_{\text {filt}}(t)=\alpha \cdot s(t)+\eta (t)$, the intensity invariance of $x_{\text {adapt}}(t)$ is limited to sufficiently large $\alpha $. Shaded area indicates saturation of $x_{\text {adapt}}(t)$ at $95\,\%$ curve span. }}{13}{}\protected@file@percent }
\newlabel{fig:inv_log-hp}{{4}{13}{}{}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {3.2}Thresholding nonlinearity \& temporal averaging}{14}{}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {5}{\ignorespaces \textbf {Intensity invariance by thresholding and temporal averaging depends on both the threshold value and the noise floor.} Synthetic input $x_{\text {adapt}}(t)$ consists of song component $s(t)$ scaled by $\alpha $ with additive noise component $\eta (t)$. Input $x_{\text {adapt}}(t)$ is transformed into kernel response $c_i(t)$, binary response $b_i(t)$, and feature $f_i(t)$. Threshold value $\Theta _i$ is set to multiples of the reference standard deviation $\sigma _{\eta }$ of $c_i(t)$ for input $x_{\text {adapt}}(t)=\eta (t)$. Darker colors correspond to higher $\Theta _i$. \textbf {Left}:~$x_{\text {adapt}}(t)$, $c_i(t)$, $b_i(t)$, and $f_i(t)$ for different scales $\alpha $ and threshold values $\Theta _i$. Left-most column is is the pure-noise reference. \textbf {Right}:~Average value of $f_i(t)$ during the song for the different $\Theta _i$. \textbf {a}:~Input $x_{\text {adapt}}(t)$. \textbf {b}-\textbf {d}:~$c_i(t)$, $b_i(t)$, and $f_i(t)$ for the different $\Theta _i$ based on the same $x_{\text {adapt}}(t)$ from \textbf {a}{}. \textbf {e}:~Average value of $f_i(t)$ during the song for the different $\Theta _i$ in \textbf {b}{}-\textbf {d}. }}{14}{}\protected@file@percent }
\newlabel{fig:inv_thresh-lp_single}{{5}{14}{}{}{}}
\@writefile{lof}{\contentsline {figure}{\numberline {6}{\ignorespaces \textbf {Feature representation of different species-specific songs saturates at different points in feature space.} }}{15}{}\protected@file@percent }
\newlabel{fig:inv_thresh-lp_species}{{6}{15}{}{}{}}
\@writefile{lof}{\contentsline {figure}{\numberline {7}{\ignorespaces \textbf {Step-wise emergence of intensity invariant song representation along the model pathway.} }}{16}{}\protected@file@percent }
\newlabel{fig:inv_full}{{7}{16}{}{}{}}
\@writefile{lof}{\contentsline {figure}{\numberline {8}{\ignorespaces \textbf {Step-wise emergence of intensity invariant song representation along the model pathway.} }}{17}{}\protected@file@percent }
\newlabel{fig:inv_short}{{8}{17}{}{}{}}
\@writefile{lof}{\contentsline {figure}{\numberline {9}{\ignorespaces \textbf {Step-wise emergence of intensity invariant song representation along the model pathway.} }}{18}{}\protected@file@percent }
\newlabel{fig:inv_field}{{9}{18}{}{}{}}
\newlabel{eq:pdf_split}{{15}{19}{}{}{}}
\newlabel{eq:feat_avg}{{16}{19}{}{}{}}
\newlabel{eq:feat_prop}{{17}{19}{}{}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {3.1}Full-wave rectification \& lowpass filtering}{11}{}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {4}{\ignorespaces \textbf {Intensity invariance by logarithmic compression and adaptation is restricted by the noise floor.} Synthetic input $x_{\text {filt}}(t)$ consists of song component $s(t)$ scaled by $\alpha $ with (\textbf {c}{} and \textbf {d}) or without (\textbf {a}{} and \textbf {b}) additive noise component $\eta (t)$. Input $x_{\text {filt}}(t)$ is transformed into envelope $x_{\text {env}}(t)$, logarithmically compressed envelope $x_{\text {dB}}(t)$, and intensity-adapted envelope $x_{\text {adapt}}(t)$. \textbf {Left}:~$x_{\text {env}}(t)$, $x_{\text {dB}}(t)$, and $x_{\text {adapt}}(t)$ for different scales $\alpha $. \textbf {Right}:~Ratios of the standard deviation of $x_{\text {env}}(t)$, $x_{\text {dB}}(t)$, and $x_{\text {adapt}}(t)$ relative to the respective reference standard deviation $\sigma _{\eta }$ for input $x_{\text {filt}}(t)=\eta (t)$. \textbf {a}{} and \textbf {b}:~Ideally, if $x_{\text {filt}}(t)=\alpha \cdot s(t)$, then $x_{\text {adapt}}(t)$ is intensity-invariant across all $\alpha $. \textbf {c}{} and \textbf {d}:~In practice, if $x_{\text {filt}}(t)=\alpha \cdot s(t)+\eta (t)$, the intensity invariance of $x_{\text {adapt}}(t)$ is limited to sufficiently large $\alpha $. Shaded area indicates saturation of $x_{\text {adapt}}(t)$ at $95\,\%$ curve span. }}{12}{}\protected@file@percent }
\newlabel{fig:inv_rect-lp}{{4}{12}{}{}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {3.2}Logarithmic compression \& spike-frequency adaptation}{13}{}\protected@file@percent }
\newlabel{eq:toy_env}{{11}{13}{}{}{}}
\newlabel{eq:toy_log}{{12}{13}{}{}{}}
\newlabel{eq:toy_highpass}{{13}{13}{}{}{}}
\newlabel{eq:toy_snr}{{14}{13}{}{}{}}
\@writefile{lof}{\contentsline {figure}{\numberline {5}{\ignorespaces \textbf {Intensity invariance by logarithmic compression and adaptation is restricted by the noise floor.} Synthetic input $x_{\text {filt}}(t)$ consists of song component $s(t)$ scaled by $\alpha $ with (\textbf {c}{} and \textbf {d}) or without (\textbf {a}{} and \textbf {b}) additive noise component $\eta (t)$. Input $x_{\text {filt}}(t)$ is transformed into envelope $x_{\text {env}}(t)$, logarithmically compressed envelope $x_{\text {dB}}(t)$, and intensity-adapted envelope $x_{\text {adapt}}(t)$. \textbf {Left}:~$x_{\text {env}}(t)$, $x_{\text {dB}}(t)$, and $x_{\text {adapt}}(t)$ for different scales $\alpha $. \textbf {Right}:~Ratios of the standard deviation of $x_{\text {env}}(t)$, $x_{\text {dB}}(t)$, and $x_{\text {adapt}}(t)$ relative to the respective reference standard deviation $\sigma _{\eta }$ for input $x_{\text {filt}}(t)=\eta (t)$. \textbf {a}{} and \textbf {b}:~Ideally, if $x_{\text {filt}}(t)=\alpha \cdot s(t)$, then $x_{\text {adapt}}(t)$ is intensity-invariant across all $\alpha $. \textbf {c}{} and \textbf {d}:~In practice, if $x_{\text {filt}}(t)=\alpha \cdot s(t)+\eta (t)$, the intensity invariance of $x_{\text {adapt}}(t)$ is limited to sufficiently large $\alpha $. Shaded area indicates saturation of $x_{\text {adapt}}(t)$ at $95\,\%$ curve span. }}{15}{}\protected@file@percent }
\newlabel{fig:inv_log-hp}{{5}{15}{}{}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {3.3}Thresholding nonlinearity \& temporal averaging}{15}{}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {6}{\ignorespaces \textbf {Intensity invariance by thresholding and temporal averaging depends on both the threshold value and the noise floor.} Synthetic input $x_{\text {adapt}}(t)$ consists of song component $s(t)$ scaled by $\alpha $ with additive noise component $\eta (t)$. Input $x_{\text {adapt}}(t)$ is transformed into kernel response $c_i(t)$, binary response $b_i(t)$, and feature $f_i(t)$. Threshold value $\Theta _i$ is set to multiples of the reference standard deviation $\sigma _{\eta }$ of $c_i(t)$ for input $x_{\text {adapt}}(t)=\eta (t)$. Darker colors correspond to higher $\Theta _i$. \textbf {Left}:~$x_{\text {adapt}}(t)$, $c_i(t)$, $b_i(t)$, and $f_i(t)$ for different scales $\alpha $ and threshold values $\Theta _i$. Left-most column is is the pure-noise reference. \textbf {Right}:~Average value of $f_i(t)$ during the song for the different $\Theta _i$. \textbf {a}:~Input $x_{\text {adapt}}(t)$. \textbf {b}-\textbf {d}:~$c_i(t)$, $b_i(t)$, and $f_i(t)$ for the different $\Theta _i$ based on the same $x_{\text {adapt}}(t)$ from \textbf {a}{}. \textbf {e}:~Average value of $f_i(t)$ during the song for the different $\Theta _i$ in \textbf {b}{}-\textbf {d}. }}{16}{}\protected@file@percent }
\newlabel{fig:inv_thresh-lp_single}{{6}{16}{}{}{}}
\@writefile{lof}{\contentsline {figure}{\numberline {7}{\ignorespaces \textbf {Feature representation of different species-specific songs saturates at different points in feature space.} }}{17}{}\protected@file@percent }
\newlabel{fig:inv_thresh-lp_species}{{7}{17}{}{}{}}
\@writefile{lof}{\contentsline {figure}{\numberline {8}{\ignorespaces \textbf {Step-wise emergence of intensity invariant song representation along the model pathway.} }}{18}{}\protected@file@percent }
\newlabel{fig:inv_full}{{8}{18}{}{}{}}
\@writefile{lof}{\contentsline {figure}{\numberline {9}{\ignorespaces \textbf {Step-wise emergence of intensity invariant song representation along the model pathway.} }}{19}{}\protected@file@percent }
\newlabel{fig:inv_short}{{9}{19}{}{}{}}
\@writefile{lof}{\contentsline {figure}{\numberline {10}{\ignorespaces \textbf {Step-wise emergence of intensity invariant song representation along the model pathway.} }}{20}{}\protected@file@percent }
\newlabel{fig:inv_field}{{10}{20}{}{}{}}
\newlabel{eq:pdf_split}{{15}{21}{}{}{}}
\newlabel{eq:feat_avg}{{16}{21}{}{}{}}
\newlabel{eq:feat_prop}{{17}{21}{}{}{}}
\abx@aux@cite{0}{stumpner1991auditory}
\abx@aux@segm{0}{0}{stumpner1991auditory}
\@writefile{toc}{\contentsline {section}{\numberline {4}Discriminating species-specific song\\patterns in feature space}{20}{}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {5}Conclusions \& outlook}{20}{}\protected@file@percent }
\abx@aux@page{73}{20}
\@writefile{lof}{\contentsline {figure}{\numberline {10}{\ignorespaces \textbf {} }}{22}{}\protected@file@percent }
\newlabel{}{{10}{22}{}{}{}}
\@writefile{lof}{\contentsline {figure}{\numberline {11}{\ignorespaces \textbf {} }}{22}{}\protected@file@percent }
\newlabel{}{{11}{22}{}{}{}}
\@writefile{lof}{\contentsline {figure}{\numberline {12}{\ignorespaces \textbf {} }}{23}{}\protected@file@percent }
\newlabel{}{{12}{23}{}{}{}}
\@writefile{lof}{\contentsline {figure}{\numberline {13}{\ignorespaces \textbf {} }}{23}{}\protected@file@percent }
\newlabel{}{{13}{23}{}{}{}}
\@writefile{lof}{\contentsline {figure}{\numberline {14}{\ignorespaces \textbf {} }}{24}{}\protected@file@percent }
\newlabel{}{{14}{24}{}{}{}}
\@writefile{toc}{\contentsline {section}{\numberline {4}Discriminating species-specific song\\patterns in feature space}{22}{}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {5}Conclusions \& outlook}{22}{}\protected@file@percent }
\abx@aux@page{73}{22}
\@writefile{lof}{\contentsline {figure}{\numberline {11}{\ignorespaces \textbf {} }}{24}{}\protected@file@percent }
\newlabel{}{{11}{24}{}{}{}}
\@writefile{lof}{\contentsline {figure}{\numberline {12}{\ignorespaces \textbf {} }}{24}{}\protected@file@percent }
\newlabel{}{{12}{24}{}{}{}}
\@writefile{lof}{\contentsline {figure}{\numberline {13}{\ignorespaces \textbf {} }}{25}{}\protected@file@percent }
\newlabel{}{{13}{25}{}{}{}}
\@writefile{lof}{\contentsline {figure}{\numberline {14}{\ignorespaces \textbf {} }}{25}{}\protected@file@percent }
\newlabel{}{{14}{25}{}{}{}}
\@writefile{lof}{\contentsline {figure}{\numberline {15}{\ignorespaces \textbf {} }}{26}{}\protected@file@percent }
\newlabel{}{{15}{26}{}{}{}}
\@writefile{lof}{\contentsline {figure}{\numberline {16}{\ignorespaces \textbf {} }}{26}{}\protected@file@percent }
\newlabel{}{{16}{26}{}{}{}}
\@writefile{lof}{\contentsline {figure}{\numberline {17}{\ignorespaces \textbf {} }}{27}{}\protected@file@percent }
\newlabel{}{{17}{27}{}{}{}}
\@writefile{lof}{\contentsline {figure}{\numberline {18}{\ignorespaces \textbf {} }}{27}{}\protected@file@percent }
\newlabel{}{{18}{27}{}{}{}}
\@writefile{lof}{\contentsline {figure}{\numberline {19}{\ignorespaces \textbf {} }}{28}{}\protected@file@percent }
\newlabel{}{{19}{28}{}{}{}}
\@writefile{lof}{\contentsline {figure}{\numberline {20}{\ignorespaces \textbf {} }}{28}{}\protected@file@percent }
\newlabel{}{{20}{28}{}{}{}}
\gdef\svg@ink@ver@settings{{\m@ne }{inkscape}{\m@ne }}
\abx@aux@read@bbl@mdfivesum{1380DC8C93D2855FDB132CC5A40AD52F}
\gdef \@abspage@last{24}
\gdef \@abspage@last{28}

138
main.blg
View File

@@ -1,71 +1,71 @@
[0] Config.pm:307> INFO - This is Biber 2.19
[0] Config.pm:310> INFO - Logfile is 'main.blg'
[39] biber:340> INFO - === Do Apr 23, 2026, 12:30:17
[50] Biber.pm:419> INFO - Reading 'main.bcf'
[81] Biber.pm:979> INFO - Found 55 citekeys in bib section 0
[87] Biber.pm:4419> INFO - Processing section 0
[93] Biber.pm:4610> INFO - Looking for bibtex file 'cite.bib' for section 0
[95] bibtex.pm:1713> INFO - LaTeX decoding ...
[126] bibtex.pm:1519> INFO - Found BibTeX data source 'cite.bib'
[323] UCollate.pm:68> INFO - Overriding locale 'en-US' defaults 'variable = shifted' with 'variable = non-ignorable'
[323] UCollate.pm:68> INFO - Overriding locale 'en-US' defaults 'normalization = NFD' with 'normalization = prenormalized'
[323] Biber.pm:4239> INFO - Sorting list 'nyt/global//global/global' of type 'entry' with template 'nyt' and locale 'en-US'
[323] Biber.pm:4245> INFO - No sort tailoring available for locale 'en-US'
[348] bbl.pm:660> INFO - Writing 'main.bbl' with encoding 'UTF-8'
[359] bbl.pm:763> INFO - Output to main.bbl
[359] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_UrtA/347c261ec4135a5723bef5c751f5078f_61557.utf8, line 10, warning: 6 characters of junk seen at toplevel
[359] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_UrtA/347c261ec4135a5723bef5c751f5078f_61557.utf8, line 21, warning: 6 characters of junk seen at toplevel
[359] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_UrtA/347c261ec4135a5723bef5c751f5078f_61557.utf8, line 38, warning: 6 characters of junk seen at toplevel
[359] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_UrtA/347c261ec4135a5723bef5c751f5078f_61557.utf8, line 49, warning: 6 characters of junk seen at toplevel
[359] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_UrtA/347c261ec4135a5723bef5c751f5078f_61557.utf8, line 58, warning: 6 characters of junk seen at toplevel
[359] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_UrtA/347c261ec4135a5723bef5c751f5078f_61557.utf8, line 73, warning: 6 characters of junk seen at toplevel
[359] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_UrtA/347c261ec4135a5723bef5c751f5078f_61557.utf8, line 82, warning: 6 characters of junk seen at toplevel
[359] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_UrtA/347c261ec4135a5723bef5c751f5078f_61557.utf8, line 91, warning: 6 characters of junk seen at toplevel
[359] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_UrtA/347c261ec4135a5723bef5c751f5078f_61557.utf8, line 100, warning: 6 characters of junk seen at toplevel
[359] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_UrtA/347c261ec4135a5723bef5c751f5078f_61557.utf8, line 109, warning: 6 characters of junk seen at toplevel
[359] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_UrtA/347c261ec4135a5723bef5c751f5078f_61557.utf8, line 118, warning: 6 characters of junk seen at toplevel
[359] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_UrtA/347c261ec4135a5723bef5c751f5078f_61557.utf8, line 127, warning: 6 characters of junk seen at toplevel
[359] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_UrtA/347c261ec4135a5723bef5c751f5078f_61557.utf8, line 136, warning: 6 characters of junk seen at toplevel
[359] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_UrtA/347c261ec4135a5723bef5c751f5078f_61557.utf8, line 157, warning: 6 characters of junk seen at toplevel
[359] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_UrtA/347c261ec4135a5723bef5c751f5078f_61557.utf8, line 178, warning: 6 characters of junk seen at toplevel
[359] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_UrtA/347c261ec4135a5723bef5c751f5078f_61557.utf8, line 187, warning: 6 characters of junk seen at toplevel
[359] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_UrtA/347c261ec4135a5723bef5c751f5078f_61557.utf8, line 196, warning: 6 characters of junk seen at toplevel
[359] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_UrtA/347c261ec4135a5723bef5c751f5078f_61557.utf8, line 207, warning: 6 characters of junk seen at toplevel
[359] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_UrtA/347c261ec4135a5723bef5c751f5078f_61557.utf8, line 218, warning: 6 characters of junk seen at toplevel
[359] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_UrtA/347c261ec4135a5723bef5c751f5078f_61557.utf8, line 229, warning: 6 characters of junk seen at toplevel
[359] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_UrtA/347c261ec4135a5723bef5c751f5078f_61557.utf8, line 240, warning: 6 characters of junk seen at toplevel
[359] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_UrtA/347c261ec4135a5723bef5c751f5078f_61557.utf8, line 249, warning: 6 characters of junk seen at toplevel
[359] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_UrtA/347c261ec4135a5723bef5c751f5078f_61557.utf8, line 258, warning: 6 characters of junk seen at toplevel
[359] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_UrtA/347c261ec4135a5723bef5c751f5078f_61557.utf8, line 269, warning: 6 characters of junk seen at toplevel
[359] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_UrtA/347c261ec4135a5723bef5c751f5078f_61557.utf8, line 278, warning: 6 characters of junk seen at toplevel
[359] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_UrtA/347c261ec4135a5723bef5c751f5078f_61557.utf8, line 289, warning: 6 characters of junk seen at toplevel
[359] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_UrtA/347c261ec4135a5723bef5c751f5078f_61557.utf8, line 300, warning: 6 characters of junk seen at toplevel
[359] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_UrtA/347c261ec4135a5723bef5c751f5078f_61557.utf8, line 309, warning: 6 characters of junk seen at toplevel
[359] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_UrtA/347c261ec4135a5723bef5c751f5078f_61557.utf8, line 328, warning: 6 characters of junk seen at toplevel
[360] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_UrtA/347c261ec4135a5723bef5c751f5078f_61557.utf8, line 337, warning: 6 characters of junk seen at toplevel
[360] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_UrtA/347c261ec4135a5723bef5c751f5078f_61557.utf8, line 400, warning: 6 characters of junk seen at toplevel
[360] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_UrtA/347c261ec4135a5723bef5c751f5078f_61557.utf8, line 419, warning: 6 characters of junk seen at toplevel
[360] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_UrtA/347c261ec4135a5723bef5c751f5078f_61557.utf8, line 428, warning: 6 characters of junk seen at toplevel
[360] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_UrtA/347c261ec4135a5723bef5c751f5078f_61557.utf8, line 437, warning: 6 characters of junk seen at toplevel
[360] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_UrtA/347c261ec4135a5723bef5c751f5078f_61557.utf8, line 456, warning: 6 characters of junk seen at toplevel
[360] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_UrtA/347c261ec4135a5723bef5c751f5078f_61557.utf8, line 491, warning: 6 characters of junk seen at toplevel
[360] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_UrtA/347c261ec4135a5723bef5c751f5078f_61557.utf8, line 526, warning: 6 characters of junk seen at toplevel
[360] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_UrtA/347c261ec4135a5723bef5c751f5078f_61557.utf8, line 535, warning: 6 characters of junk seen at toplevel
[360] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_UrtA/347c261ec4135a5723bef5c751f5078f_61557.utf8, line 556, warning: 6 characters of junk seen at toplevel
[360] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_UrtA/347c261ec4135a5723bef5c751f5078f_61557.utf8, line 565, warning: 6 characters of junk seen at toplevel
[360] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_UrtA/347c261ec4135a5723bef5c751f5078f_61557.utf8, line 576, warning: 6 characters of junk seen at toplevel
[360] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_UrtA/347c261ec4135a5723bef5c751f5078f_61557.utf8, line 587, warning: 6 characters of junk seen at toplevel
[360] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_UrtA/347c261ec4135a5723bef5c751f5078f_61557.utf8, line 619, warning: 6 characters of junk seen at toplevel
[360] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_UrtA/347c261ec4135a5723bef5c751f5078f_61557.utf8, line 648, warning: 6 characters of junk seen at toplevel
[360] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_UrtA/347c261ec4135a5723bef5c751f5078f_61557.utf8, line 658, warning: 6 characters of junk seen at toplevel
[360] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_UrtA/347c261ec4135a5723bef5c751f5078f_61557.utf8, line 667, warning: 6 characters of junk seen at toplevel
[360] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_UrtA/347c261ec4135a5723bef5c751f5078f_61557.utf8, line 688, warning: 6 characters of junk seen at toplevel
[360] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_UrtA/347c261ec4135a5723bef5c751f5078f_61557.utf8, line 709, warning: 6 characters of junk seen at toplevel
[360] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_UrtA/347c261ec4135a5723bef5c751f5078f_61557.utf8, line 720, warning: 6 characters of junk seen at toplevel
[360] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_UrtA/347c261ec4135a5723bef5c751f5078f_61557.utf8, line 729, warning: 6 characters of junk seen at toplevel
[360] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_UrtA/347c261ec4135a5723bef5c751f5078f_61557.utf8, line 749, warning: 6 characters of junk seen at toplevel
[360] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_UrtA/347c261ec4135a5723bef5c751f5078f_61557.utf8, line 766, warning: 6 characters of junk seen at toplevel
[360] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_UrtA/347c261ec4135a5723bef5c751f5078f_61557.utf8, line 775, warning: 6 characters of junk seen at toplevel
[360] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_UrtA/347c261ec4135a5723bef5c751f5078f_61557.utf8, line 800, warning: 6 characters of junk seen at toplevel
[360] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_UrtA/347c261ec4135a5723bef5c751f5078f_61557.utf8, line 817, warning: 6 characters of junk seen at toplevel
[360] Biber.pm:133> INFO - WARNINGS: 55
[37] biber:340> INFO - === Mo Apr 27, 2026, 18:08:28
[46] Biber.pm:419> INFO - Reading 'main.bcf'
[76] Biber.pm:979> INFO - Found 55 citekeys in bib section 0
[82] Biber.pm:4419> INFO - Processing section 0
[87] Biber.pm:4610> INFO - Looking for bibtex file 'cite.bib' for section 0
[89] bibtex.pm:1713> INFO - LaTeX decoding ...
[118] bibtex.pm:1519> INFO - Found BibTeX data source 'cite.bib'
[297] UCollate.pm:68> INFO - Overriding locale 'en-US' defaults 'variable = shifted' with 'variable = non-ignorable'
[297] UCollate.pm:68> INFO - Overriding locale 'en-US' defaults 'normalization = NFD' with 'normalization = prenormalized'
[297] Biber.pm:4239> INFO - Sorting list 'nyt/global//global/global' of type 'entry' with template 'nyt' and locale 'en-US'
[297] Biber.pm:4245> INFO - No sort tailoring available for locale 'en-US'
[321] bbl.pm:660> INFO - Writing 'main.bbl' with encoding 'UTF-8'
[331] bbl.pm:763> INFO - Output to main.bbl
[331] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_eYMb/347c261ec4135a5723bef5c751f5078f_210824.utf8, line 10, warning: 6 characters of junk seen at toplevel
[331] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_eYMb/347c261ec4135a5723bef5c751f5078f_210824.utf8, line 21, warning: 6 characters of junk seen at toplevel
[331] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_eYMb/347c261ec4135a5723bef5c751f5078f_210824.utf8, line 38, warning: 6 characters of junk seen at toplevel
[331] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_eYMb/347c261ec4135a5723bef5c751f5078f_210824.utf8, line 49, warning: 6 characters of junk seen at toplevel
[331] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_eYMb/347c261ec4135a5723bef5c751f5078f_210824.utf8, line 58, warning: 6 characters of junk seen at toplevel
[331] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_eYMb/347c261ec4135a5723bef5c751f5078f_210824.utf8, line 73, warning: 6 characters of junk seen at toplevel
[331] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_eYMb/347c261ec4135a5723bef5c751f5078f_210824.utf8, line 82, warning: 6 characters of junk seen at toplevel
[331] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_eYMb/347c261ec4135a5723bef5c751f5078f_210824.utf8, line 91, warning: 6 characters of junk seen at toplevel
[331] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_eYMb/347c261ec4135a5723bef5c751f5078f_210824.utf8, line 100, warning: 6 characters of junk seen at toplevel
[331] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_eYMb/347c261ec4135a5723bef5c751f5078f_210824.utf8, line 109, warning: 6 characters of junk seen at toplevel
[331] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_eYMb/347c261ec4135a5723bef5c751f5078f_210824.utf8, line 118, warning: 6 characters of junk seen at toplevel
[331] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_eYMb/347c261ec4135a5723bef5c751f5078f_210824.utf8, line 127, warning: 6 characters of junk seen at toplevel
[331] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_eYMb/347c261ec4135a5723bef5c751f5078f_210824.utf8, line 136, warning: 6 characters of junk seen at toplevel
[331] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_eYMb/347c261ec4135a5723bef5c751f5078f_210824.utf8, line 157, warning: 6 characters of junk seen at toplevel
[331] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_eYMb/347c261ec4135a5723bef5c751f5078f_210824.utf8, line 178, warning: 6 characters of junk seen at toplevel
[331] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_eYMb/347c261ec4135a5723bef5c751f5078f_210824.utf8, line 187, warning: 6 characters of junk seen at toplevel
[331] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_eYMb/347c261ec4135a5723bef5c751f5078f_210824.utf8, line 196, warning: 6 characters of junk seen at toplevel
[331] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_eYMb/347c261ec4135a5723bef5c751f5078f_210824.utf8, line 207, warning: 6 characters of junk seen at toplevel
[331] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_eYMb/347c261ec4135a5723bef5c751f5078f_210824.utf8, line 218, warning: 6 characters of junk seen at toplevel
[331] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_eYMb/347c261ec4135a5723bef5c751f5078f_210824.utf8, line 229, warning: 6 characters of junk seen at toplevel
[332] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_eYMb/347c261ec4135a5723bef5c751f5078f_210824.utf8, line 240, warning: 6 characters of junk seen at toplevel
[332] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_eYMb/347c261ec4135a5723bef5c751f5078f_210824.utf8, line 249, warning: 6 characters of junk seen at toplevel
[332] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_eYMb/347c261ec4135a5723bef5c751f5078f_210824.utf8, line 258, warning: 6 characters of junk seen at toplevel
[332] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_eYMb/347c261ec4135a5723bef5c751f5078f_210824.utf8, line 269, warning: 6 characters of junk seen at toplevel
[332] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_eYMb/347c261ec4135a5723bef5c751f5078f_210824.utf8, line 278, warning: 6 characters of junk seen at toplevel
[332] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_eYMb/347c261ec4135a5723bef5c751f5078f_210824.utf8, line 289, warning: 6 characters of junk seen at toplevel
[332] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_eYMb/347c261ec4135a5723bef5c751f5078f_210824.utf8, line 300, warning: 6 characters of junk seen at toplevel
[332] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_eYMb/347c261ec4135a5723bef5c751f5078f_210824.utf8, line 309, warning: 6 characters of junk seen at toplevel
[332] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_eYMb/347c261ec4135a5723bef5c751f5078f_210824.utf8, line 328, warning: 6 characters of junk seen at toplevel
[332] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_eYMb/347c261ec4135a5723bef5c751f5078f_210824.utf8, line 337, warning: 6 characters of junk seen at toplevel
[332] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_eYMb/347c261ec4135a5723bef5c751f5078f_210824.utf8, line 400, warning: 6 characters of junk seen at toplevel
[332] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_eYMb/347c261ec4135a5723bef5c751f5078f_210824.utf8, line 419, warning: 6 characters of junk seen at toplevel
[332] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_eYMb/347c261ec4135a5723bef5c751f5078f_210824.utf8, line 428, warning: 6 characters of junk seen at toplevel
[332] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_eYMb/347c261ec4135a5723bef5c751f5078f_210824.utf8, line 437, warning: 6 characters of junk seen at toplevel
[332] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_eYMb/347c261ec4135a5723bef5c751f5078f_210824.utf8, line 456, warning: 6 characters of junk seen at toplevel
[332] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_eYMb/347c261ec4135a5723bef5c751f5078f_210824.utf8, line 491, warning: 6 characters of junk seen at toplevel
[332] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_eYMb/347c261ec4135a5723bef5c751f5078f_210824.utf8, line 526, warning: 6 characters of junk seen at toplevel
[332] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_eYMb/347c261ec4135a5723bef5c751f5078f_210824.utf8, line 535, warning: 6 characters of junk seen at toplevel
[332] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_eYMb/347c261ec4135a5723bef5c751f5078f_210824.utf8, line 556, warning: 6 characters of junk seen at toplevel
[332] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_eYMb/347c261ec4135a5723bef5c751f5078f_210824.utf8, line 565, warning: 6 characters of junk seen at toplevel
[332] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_eYMb/347c261ec4135a5723bef5c751f5078f_210824.utf8, line 576, warning: 6 characters of junk seen at toplevel
[332] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_eYMb/347c261ec4135a5723bef5c751f5078f_210824.utf8, line 587, warning: 6 characters of junk seen at toplevel
[332] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_eYMb/347c261ec4135a5723bef5c751f5078f_210824.utf8, line 619, warning: 6 characters of junk seen at toplevel
[332] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_eYMb/347c261ec4135a5723bef5c751f5078f_210824.utf8, line 648, warning: 6 characters of junk seen at toplevel
[332] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_eYMb/347c261ec4135a5723bef5c751f5078f_210824.utf8, line 658, warning: 6 characters of junk seen at toplevel
[332] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_eYMb/347c261ec4135a5723bef5c751f5078f_210824.utf8, line 667, warning: 6 characters of junk seen at toplevel
[332] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_eYMb/347c261ec4135a5723bef5c751f5078f_210824.utf8, line 688, warning: 6 characters of junk seen at toplevel
[332] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_eYMb/347c261ec4135a5723bef5c751f5078f_210824.utf8, line 709, warning: 6 characters of junk seen at toplevel
[332] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_eYMb/347c261ec4135a5723bef5c751f5078f_210824.utf8, line 720, warning: 6 characters of junk seen at toplevel
[332] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_eYMb/347c261ec4135a5723bef5c751f5078f_210824.utf8, line 729, warning: 6 characters of junk seen at toplevel
[332] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_eYMb/347c261ec4135a5723bef5c751f5078f_210824.utf8, line 749, warning: 6 characters of junk seen at toplevel
[332] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_eYMb/347c261ec4135a5723bef5c751f5078f_210824.utf8, line 766, warning: 6 characters of junk seen at toplevel
[332] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_eYMb/347c261ec4135a5723bef5c751f5078f_210824.utf8, line 775, warning: 6 characters of junk seen at toplevel
[332] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_eYMb/347c261ec4135a5723bef5c751f5078f_210824.utf8, line 800, warning: 6 characters of junk seen at toplevel
[332] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_eYMb/347c261ec4135a5723bef5c751f5078f_210824.utf8, line 817, warning: 6 characters of junk seen at toplevel
[332] Biber.pm:133> INFO - WARNINGS: 55

View File

@@ -1,14 +1,14 @@
# Fdb version 4
["biber main"] 1776940217.48712 "main.bcf" "main.bbl" "main" 1777031926.86359 0
["biber main"] 1777306108.0762 "main.bcf" "main.bbl" "main" 1777306136.88787 0
"cite.bib" 1770904753.08918 27483 4290db0c91f7b5055e25472ef913f6b4 ""
"main.bcf" 1777031926.78659 112931 2a478116d80ebb1ada7083a24facd6e3 "pdflatex"
"main.bcf" 1777306136.815 112931 2a478116d80ebb1ada7083a24facd6e3 "pdflatex"
(generated)
"main.bbl"
"main.blg"
(rewritten before read)
["pdflatex"] 1777031925.73488 "/home/hartling/phd/paper/paper_2025/main.tex" "main.pdf" "main" 1777031926.8638 0
["pdflatex"] 1777306135.73239 "/home/hartling/phd/paper/paper_2025/main.tex" "main.pdf" "main" 1777306136.88809 0
"/etc/texmf/web2c/texmf.cnf" 1761560044.43676 475 c0e671620eb5563b2130f56340a5fde8 ""
"/home/hartling/phd/paper/paper_2025/main.tex" 1777031925.5956 50083 fda38e01bf1bcfd1210581259b2830ea ""
"/home/hartling/phd/paper/paper_2025/main.tex" 1777306136.783 52847 5c5d3efa38d66e0332ff351a6d8a115b ""
"/usr/share/texlive/texmf-dist/fonts/map/fontname/texfonts.map" 1577235249 3524 cb3e574dea2d1052e39280babc910dc8 ""
"/usr/share/texlive/texmf-dist/fonts/tfm/public/amsfonts/cmextra/cmex7.tfm" 1246382020 1004 54797486969f23fa377b128694d548df ""
"/usr/share/texlive/texmf-dist/fonts/tfm/public/amsfonts/cmextra/cmex8.tfm" 1246382020 988 bdf658c3bfc2d96d3c8b02cfc1c94c20 ""
@@ -155,20 +155,26 @@
"figures/fig_feat_stages.pdf" 1774002994.98767 11091006 565fe951f1255c121429a060082398f5 ""
"figures/fig_invariance_field.pdf" 1776952657.04263 9131898 e9d9acff1d03fdf60ddc9e32b87ae6c2 ""
"figures/fig_invariance_full_Omocestus_rufipes.pdf" 1776954098.39044 13431867 08ff6482ff81d2878ddba2a90d032d94 ""
"figures/fig_invariance_log-hp_appendix.pdf" 1776779295.50028 534259 6995c3131a22abb1b9aae17e18bc68df ""
"figures/fig_invariance_log_hp.pdf" 1776779076.07106 838498 414c5b733797773bd8f0bade77b06814 ""
"figures/fig_invariance_log-hp_appendix.pdf" 1777304127.01433 537850 c5902b03c71848b0b51b1d0ffc75105c ""
"figures/fig_invariance_log_hp.pdf" 1777301515.60286 854093 c4083041bb1e78e79f11a01194cd9cb9 ""
"figures/fig_invariance_rect-lp_appendix.pdf" 1777306033.28882 2034997 57c90e8240f0a58ac5cc522f23d84b37 ""
"figures/fig_invariance_rect_lp.pdf" 1777303402.32232 651639 ff457b3d82ab7fefa2b2060a5c7df84c ""
"figures/fig_invariance_short_Omocestus_rufipes.pdf" 1776954155.39396 5547735 148c794495092c93fa8b9bf75411280a ""
"figures/fig_invariance_thresh-lp_noise_appendix.pdf" 1777031888.645 1484986 be874f4bea496315d46a234002a56649 ""
"figures/fig_invariance_thresh-lp_pure_appendix.pdf" 1777031869.54421 1387834 c66ab20b4634e644a5fa0c5034a755d0 ""
"figures/fig_invariance_thresh_lp_single.pdf" 1776784894.60717 858048 b9f3ca65b0b098193ad6aaf282d96ee5 ""
"figures/fig_invariance_thresh_lp_species.pdf" 1776786332.58869 1607791 1f0bca0808347bbf2397b0d6c1523c31 ""
"figures/fig_invariance_thresh_lp_single.pdf" 1777281305.93103 860673 2f650f14d93dd391a8df39d66a7adbad ""
"figures/fig_invariance_thresh_lp_species.pdf" 1777032003.01576 1607791 2b46fb396cfa9b9b5d5ab8d56faddbac ""
"figures/fig_kernel_sd_perc_field_appendix.pdf" 1777273985.83211 100184 e699513599b5828cd498b1621e1e79ee ""
"figures/fig_kernel_sd_perc_full_appendix.pdf" 1777273971.01214 90770 e3ecb7db816fc5046b866a9b27a35193 ""
"figures/fig_kernel_sd_perc_short_appendix.pdf" 1777273977.37413 91395 b7d8e68ba3a353986dbde11221d0051f ""
"figures/fig_kernel_sd_perc_thresh_lp_appendix.pdf" 1777273964.75216 90770 9cb3f2324eea517a8412177ca3dba932 ""
"figures/fig_noise_env_sd_conversion_appendix.pdf" 1776328774.43347 45466 c2be20312c1572203bdbeb9c8e32525e ""
"figures/fig_pre_stages.pdf" 1774002992.74268 449426 5762be15627fe5d8b6d108b7ea18db44 ""
"figures/fig_saturation_log-hp_appendix.pdf" 1776785249.70227 28579 fadbe904f2452a45ddcbe039438cf4d4 ""
"main.aux" 1777031926.77959 16336 edd7f74d92f16bef6aeb665a1e6af779 "pdflatex"
"main.bbl" 1776940218.28593 91039 1380dc8c93d2855fdb132cc5a40ad52f "biber main"
"main.run.xml" 1777031926.78659 2335 a049bc26a7f032e842ce55de5bc38328 "pdflatex"
"main.tex" 1777031925.5956 50083 fda38e01bf1bcfd1210581259b2830ea ""
"main.aux" 1777306136.809 18671 88ec119ff84df5208f491deee1b53788 "pdflatex"
"main.bbl" 1777306108.74822 91039 1380dc8c93d2855fdb132cc5a40ad52f "biber main"
"main.run.xml" 1777306136.816 2335 a049bc26a7f032e842ce55de5bc38328 "pdflatex"
"main.tex" 1777306136.783 52847 5c5d3efa38d66e0332ff351a6d8a115b ""
(generated)
"main.aux"
"main.bcf"

View File

@@ -288,6 +288,11 @@ INPUT ./figures/fig_feat_stages.pdf
INPUT ./figures/fig_feat_stages.pdf
INPUT ./figures/fig_feat_stages.pdf
INPUT ./figures/fig_feat_stages.pdf
INPUT ./figures/fig_invariance_rect_lp.pdf
INPUT ./figures/fig_invariance_rect_lp.pdf
INPUT ./figures/fig_invariance_rect_lp.pdf
INPUT ./figures/fig_invariance_rect_lp.pdf
INPUT ./figures/fig_invariance_rect_lp.pdf
INPUT ./figures/fig_invariance_log_hp.pdf
INPUT ./figures/fig_invariance_log_hp.pdf
INPUT ./figures/fig_invariance_log_hp.pdf
@@ -323,6 +328,11 @@ INPUT ./figures/fig_noise_env_sd_conversion_appendix.pdf
INPUT ./figures/fig_noise_env_sd_conversion_appendix.pdf
INPUT ./figures/fig_noise_env_sd_conversion_appendix.pdf
INPUT ./figures/fig_noise_env_sd_conversion_appendix.pdf
INPUT ./figures/fig_invariance_rect-lp_appendix.pdf
INPUT ./figures/fig_invariance_rect-lp_appendix.pdf
INPUT ./figures/fig_invariance_rect-lp_appendix.pdf
INPUT ./figures/fig_invariance_rect-lp_appendix.pdf
INPUT ./figures/fig_invariance_rect-lp_appendix.pdf
INPUT ./figures/fig_invariance_log-hp_appendix.pdf
INPUT ./figures/fig_invariance_log-hp_appendix.pdf
INPUT ./figures/fig_invariance_log-hp_appendix.pdf
@@ -343,6 +353,26 @@ INPUT ./figures/fig_invariance_thresh-lp_noise_appendix.pdf
INPUT ./figures/fig_invariance_thresh-lp_noise_appendix.pdf
INPUT ./figures/fig_invariance_thresh-lp_noise_appendix.pdf
INPUT ./figures/fig_invariance_thresh-lp_noise_appendix.pdf
INPUT ./figures/fig_kernel_sd_perc_thresh_lp_appendix.pdf
INPUT ./figures/fig_kernel_sd_perc_thresh_lp_appendix.pdf
INPUT ./figures/fig_kernel_sd_perc_thresh_lp_appendix.pdf
INPUT ./figures/fig_kernel_sd_perc_thresh_lp_appendix.pdf
INPUT ./figures/fig_kernel_sd_perc_thresh_lp_appendix.pdf
INPUT ./figures/fig_kernel_sd_perc_full_appendix.pdf
INPUT ./figures/fig_kernel_sd_perc_full_appendix.pdf
INPUT ./figures/fig_kernel_sd_perc_full_appendix.pdf
INPUT ./figures/fig_kernel_sd_perc_full_appendix.pdf
INPUT ./figures/fig_kernel_sd_perc_full_appendix.pdf
INPUT ./figures/fig_kernel_sd_perc_short_appendix.pdf
INPUT ./figures/fig_kernel_sd_perc_short_appendix.pdf
INPUT ./figures/fig_kernel_sd_perc_short_appendix.pdf
INPUT ./figures/fig_kernel_sd_perc_short_appendix.pdf
INPUT ./figures/fig_kernel_sd_perc_short_appendix.pdf
INPUT ./figures/fig_kernel_sd_perc_field_appendix.pdf
INPUT ./figures/fig_kernel_sd_perc_field_appendix.pdf
INPUT ./figures/fig_kernel_sd_perc_field_appendix.pdf
INPUT ./figures/fig_kernel_sd_perc_field_appendix.pdf
INPUT ./figures/fig_kernel_sd_perc_field_appendix.pdf
INPUT main.aux
INPUT main.run.xml
OUTPUT main.run.xml

140
main.log
View File

@@ -1,4 +1,4 @@
This is pdfTeX, Version 3.141592653-2.6-1.40.25 (TeX Live 2023/Debian) (preloaded format=pdflatex 2025.10.28) 24 APR 2026 13:58
This is pdfTeX, Version 3.141592653-2.6-1.40.25 (TeX Live 2023/Debian) (preloaded format=pdflatex 2025.10.28) 27 APR 2026 18:08
entering extended mode
restricted \write18 enabled.
file:line:error style messages enabled.
@@ -604,6 +604,21 @@ LaTeX Warning: Label `' multiply defined.
LaTeX Warning: Label `' multiply defined.
LaTeX Warning: Label `' multiply defined.
LaTeX Warning: Label `' multiply defined.
LaTeX Warning: Label `' multiply defined.
LaTeX Warning: Label `' multiply defined.
LaTeX Warning: Label `' multiply defined.
LaTeX Warning: Label `' multiply defined.
)
@@ -776,75 +791,112 @@ File: figures/fig_feat_stages.pdf Graphic file (type pdf)
<use figures/fig_feat_stages.pdf>
Package pdftex.def Info: figures/fig_feat_stages.pdf used on input line 542.
(pdftex.def) Requested size: 483.69687pt x 241.84782pt.
[10 <./figures/fig_feat_stages.pdf>] [11]
<figures/fig_invariance_log_hp.pdf, id=1141, 890.96089pt x 918.57785pt>
[10 <./figures/fig_feat_stages.pdf>]
<figures/fig_invariance_rect_lp.pdf, id=1138, 890.96089pt x 918.57785pt>
File: figures/fig_invariance_rect_lp.pdf Graphic file (type pdf)
<use figures/fig_invariance_rect_lp.pdf>
Package pdftex.def Info: figures/fig_invariance_rect_lp.pdf used on input line 577.
(pdftex.def) Requested size: 483.69687pt x 498.70178pt.
[11]
LaTeX Warning: Text page 12 contains only floats.
[12 <./figures/fig_invariance_rect_lp.pdf>] [13]
<figures/fig_invariance_log_hp.pdf, id=1235, 918.27557pt x 918.57785pt>
File: figures/fig_invariance_log_hp.pdf Graphic file (type pdf)
<use figures/fig_invariance_log_hp.pdf>
Package pdftex.def Info: figures/fig_invariance_log_hp.pdf used on input line 645.
(pdftex.def) Requested size: 483.69687pt x 498.70178pt.
[12]
LaTeX Warning: Text page 13 contains only floats.
[13 <./figures/fig_invariance_log_hp.pdf>]
<figures/fig_invariance_thresh_lp_single.pdf, id=1229, 910.48819pt x 910.48819pt>
Package pdftex.def Info: figures/fig_invariance_log_hp.pdf used on input line 676.
(pdftex.def) Requested size: 483.69687pt x 483.85846pt.
[14]
<figures/fig_invariance_thresh_lp_single.pdf, id=1239, 910.48819pt x 910.48819pt>
File: figures/fig_invariance_thresh_lp_single.pdf Graphic file (type pdf)
<use figures/fig_invariance_thresh_lp_single.pdf>
Package pdftex.def Info: figures/fig_invariance_thresh_lp_single.pdf used on input line 676.
Package pdftex.def Info: figures/fig_invariance_thresh_lp_single.pdf used on input line 707.
(pdftex.def) Requested size: 483.69687pt x 483.69566pt.
<figures/fig_invariance_thresh_lp_species.pdf, id=1230, 910.48819pt x 910.48819pt>
[15 <./figures/fig_invariance_log_hp.pdf>]
<figures/fig_invariance_thresh_lp_species.pdf, id=1324, 910.48819pt x 910.48819pt>
File: figures/fig_invariance_thresh_lp_species.pdf Graphic file (type pdf)
<use figures/fig_invariance_thresh_lp_species.pdf>
Package pdftex.def Info: figures/fig_invariance_thresh_lp_species.pdf used on input line 706.
Package pdftex.def Info: figures/fig_invariance_thresh_lp_species.pdf used on input line 737.
(pdftex.def) Requested size: 483.69687pt x 483.69566pt.
[14 <./figures/fig_invariance_thresh_lp_single.pdf>]
<figures/fig_invariance_full_Omocestus_rufipes.pdf, id=1303, 910.48819pt x 910.48819pt>
[16 <./figures/fig_invariance_thresh_lp_single.pdf>] [17 <./figures/fig_invariance_thresh_lp_species.pdf>]
<figures/fig_invariance_full_Omocestus_rufipes.pdf, id=1533, 910.48819pt x 910.48819pt>
File: figures/fig_invariance_full_Omocestus_rufipes.pdf Graphic file (type pdf)
<use figures/fig_invariance_full_Omocestus_rufipes.pdf>
Package pdftex.def Info: figures/fig_invariance_full_Omocestus_rufipes.pdf used on input line 716.
Package pdftex.def Info: figures/fig_invariance_full_Omocestus_rufipes.pdf used on input line 747.
(pdftex.def) Requested size: 483.69687pt x 483.69566pt.
[15 <./figures/fig_invariance_thresh_lp_species.pdf>] [16 <./figures/fig_invariance_full_Omocestus_rufipes.pdf>]
<figures/fig_invariance_short_Omocestus_rufipes.pdf, id=1506, 910.48819pt x 910.48819pt>
<figures/fig_invariance_short_Omocestus_rufipes.pdf, id=1534, 910.48819pt x 910.48819pt>
File: figures/fig_invariance_short_Omocestus_rufipes.pdf Graphic file (type pdf)
<use figures/fig_invariance_short_Omocestus_rufipes.pdf>
Package pdftex.def Info: figures/fig_invariance_short_Omocestus_rufipes.pdf used on input line 726.
Package pdftex.def Info: figures/fig_invariance_short_Omocestus_rufipes.pdf used on input line 757.
(pdftex.def) Requested size: 483.69687pt x 483.69566pt.
<figures/fig_invariance_field.pdf, id=1507, 910.48819pt x 910.48819pt>
[18
<./figures/fig_invariance_full_Omocestus_rufipes.pdf>]
<figures/fig_invariance_field.pdf, id=1602, 910.48819pt x 910.48819pt>
File: figures/fig_invariance_field.pdf Graphic file (type pdf)
<use figures/fig_invariance_field.pdf>
Package pdftex.def Info: figures/fig_invariance_field.pdf used on input line 736.
Package pdftex.def Info: figures/fig_invariance_field.pdf used on input line 767.
(pdftex.def) Requested size: 483.69687pt x 483.69566pt.
[17
[19 <./figures/fig_invariance_short_Omocestus_rufipes.pdf>] [20 <./figures/fig_invariance_field.pdf>] [21
<./figures/fig_invariance_short_Omocestus_rufipes.pdf>] [18 <./figures/fig_invariance_field.pdf>] [19] [20]
<figures/fig_noise_env_sd_conversion_appendix.pdf, id=1649, 910.48819pt x 455.2441pt>
] [22]
<figures/fig_noise_env_sd_conversion_appendix.pdf, id=1743, 910.48819pt x 455.2441pt>
File: figures/fig_noise_env_sd_conversion_appendix.pdf Graphic file (type pdf)
<use figures/fig_noise_env_sd_conversion_appendix.pdf>
Package pdftex.def Info: figures/fig_noise_env_sd_conversion_appendix.pdf used on input line 895.
Package pdftex.def Info: figures/fig_noise_env_sd_conversion_appendix.pdf used on input line 926.
(pdftex.def) Requested size: 483.69687pt x 241.84782pt.
[21]
<figures/fig_invariance_log-hp_appendix.pdf, id=1653, 910.48819pt x 455.2441pt>
[23]
<figures/fig_invariance_rect-lp_appendix.pdf, id=1747, 910.48819pt x 455.2441pt>
File: figures/fig_invariance_rect-lp_appendix.pdf Graphic file (type pdf)
<use figures/fig_invariance_rect-lp_appendix.pdf>
Package pdftex.def Info: figures/fig_invariance_rect-lp_appendix.pdf used on input line 935.
(pdftex.def) Requested size: 483.69687pt x 241.84782pt.
<figures/fig_invariance_log-hp_appendix.pdf, id=1748, 910.48819pt x 455.2441pt>
File: figures/fig_invariance_log-hp_appendix.pdf Graphic file (type pdf)
<use figures/fig_invariance_log-hp_appendix.pdf>
Package pdftex.def Info: figures/fig_invariance_log-hp_appendix.pdf used on input line 904.
Package pdftex.def Info: figures/fig_invariance_log-hp_appendix.pdf used on input line 944.
(pdftex.def) Requested size: 483.69687pt x 241.84782pt.
<figures/fig_saturation_log-hp_appendix.pdf, id=1654, 910.48819pt x 455.2441pt>
[24 <./figures/fig_noise_env_sd_conversion_appendix.pdf> <./figures/fig_invariance_rect-lp_appendix.pdf>]
<figures/fig_saturation_log-hp_appendix.pdf, id=1876, 910.48819pt x 455.2441pt>
File: figures/fig_saturation_log-hp_appendix.pdf Graphic file (type pdf)
<use figures/fig_saturation_log-hp_appendix.pdf>
Package pdftex.def Info: figures/fig_saturation_log-hp_appendix.pdf used on input line 913.
Package pdftex.def Info: figures/fig_saturation_log-hp_appendix.pdf used on input line 953.
(pdftex.def) Requested size: 483.69687pt x 241.84782pt.
[22 <./figures/fig_noise_env_sd_conversion_appendix.pdf> <./figures/fig_invariance_log-hp_appendix.pdf>]
<figures/fig_invariance_thresh-lp_pure_appendix.pdf, id=1764, 910.48819pt x 455.2441pt>
<figures/fig_invariance_thresh-lp_pure_appendix.pdf, id=1877, 910.48819pt x 455.2441pt>
File: figures/fig_invariance_thresh-lp_pure_appendix.pdf Graphic file (type pdf)
<use figures/fig_invariance_thresh-lp_pure_appendix.pdf>
Package pdftex.def Info: figures/fig_invariance_thresh-lp_pure_appendix.pdf used on input line 922.
Package pdftex.def Info: figures/fig_invariance_thresh-lp_pure_appendix.pdf used on input line 962.
(pdftex.def) Requested size: 483.69687pt x 241.84782pt.
<figures/fig_invariance_thresh-lp_noise_appendix.pdf, id=1765, 910.48819pt x 455.2441pt>
[25 <./figures/fig_invariance_log-hp_appendix.pdf> <./figures/fig_saturation_log-hp_appendix.pdf>]
<figures/fig_invariance_thresh-lp_noise_appendix.pdf, id=1999, 910.48819pt x 455.2441pt>
File: figures/fig_invariance_thresh-lp_noise_appendix.pdf Graphic file (type pdf)
<use figures/fig_invariance_thresh-lp_noise_appendix.pdf>
Package pdftex.def Info: figures/fig_invariance_thresh-lp_noise_appendix.pdf used on input line 931.
Package pdftex.def Info: figures/fig_invariance_thresh-lp_noise_appendix.pdf used on input line 971.
(pdftex.def) Requested size: 483.69687pt x 241.84782pt.
[23 <./figures/fig_saturation_log-hp_appendix.pdf> <./figures/fig_invariance_thresh-lp_pure_appendix.pdf>] [24 <./figures/fig_invariance_thresh-lp_noise_appendix.pdf>] (./main.aux)
<figures/fig_kernel_sd_perc_thresh_lp_appendix.pdf, id=2000, 910.48819pt x 455.2441pt>
File: figures/fig_kernel_sd_perc_thresh_lp_appendix.pdf Graphic file (type pdf)
<use figures/fig_kernel_sd_perc_thresh_lp_appendix.pdf>
Package pdftex.def Info: figures/fig_kernel_sd_perc_thresh_lp_appendix.pdf used on input line 980.
(pdftex.def) Requested size: 483.69687pt x 241.84782pt.
[26 <./figures/fig_invariance_thresh-lp_pure_appendix.pdf> <./figures/fig_invariance_thresh-lp_noise_appendix.pdf>]
<figures/fig_kernel_sd_perc_full_appendix.pdf, id=2128, 910.48819pt x 455.2441pt>
File: figures/fig_kernel_sd_perc_full_appendix.pdf Graphic file (type pdf)
<use figures/fig_kernel_sd_perc_full_appendix.pdf>
Package pdftex.def Info: figures/fig_kernel_sd_perc_full_appendix.pdf used on input line 989.
(pdftex.def) Requested size: 483.69687pt x 241.84782pt.
<figures/fig_kernel_sd_perc_short_appendix.pdf, id=2129, 910.48819pt x 455.2441pt>
File: figures/fig_kernel_sd_perc_short_appendix.pdf Graphic file (type pdf)
<use figures/fig_kernel_sd_perc_short_appendix.pdf>
Package pdftex.def Info: figures/fig_kernel_sd_perc_short_appendix.pdf used on input line 998.
(pdftex.def) Requested size: 483.69687pt x 241.84782pt.
[27 <./figures/fig_kernel_sd_perc_thresh_lp_appendix.pdf> <./figures/fig_kernel_sd_perc_full_appendix.pdf>]
<figures/fig_kernel_sd_perc_field_appendix.pdf, id=2215, 910.48819pt x 455.2441pt>
File: figures/fig_kernel_sd_perc_field_appendix.pdf Graphic file (type pdf)
<use figures/fig_kernel_sd_perc_field_appendix.pdf>
Package pdftex.def Info: figures/fig_kernel_sd_perc_field_appendix.pdf used on input line 1007.
(pdftex.def) Requested size: 483.69687pt x 241.84782pt.
[28 <./figures/fig_kernel_sd_perc_short_appendix.pdf> <./figures/fig_kernel_sd_perc_field_appendix.pdf>] (./main.aux)
***********
LaTeX2e <2023-11-01> patch level 1
L3 programming layer <2024-01-22>
@@ -858,18 +910,18 @@ Package logreq Info: Writing requests to 'main.run.xml'.
)
Here is how much of TeX's memory you used:
20806 strings out of 474222
450527 string characters out of 5748732
20849 strings out of 474222
452796 string characters out of 5748732
1937975 words of memory out of 5000000
42796 multiletter control sequences out of 15000+600000
42839 multiletter control sequences out of 15000+600000
569394 words of font info for 79 fonts, out of 8000000 for 9000
1143 hyphenation exceptions out of 8191
94i,18n,93p,1496b,1740s stack positions out of 10000i,1000n,20000p,200000b,200000s
</usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmbx10.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmbx12.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmbxti10.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmex10.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi10.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi12.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi6.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi8.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr12.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr17.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr6.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr8.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy10.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy8.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmti12.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/symbols/msbm10.pfb>
Output written on main.pdf (24 pages, 47693796 bytes).
Output written on main.pdf (28 pages, 50733252 bytes).
PDF statistics:
2027 PDF objects out of 2073 (max. 8388607)
977 compressed objects within 10 object streams
2373 PDF objects out of 2487 (max. 8388607)
1080 compressed objects within 11 object streams
0 named destinations out of 1000 (max. 500000)
83 words of extra memory for PDF output out of 10000 (max. 10000000)
113 words of extra memory for PDF output out of 10000 (max. 10000000)

BIN
main.pdf

Binary file not shown.

Binary file not shown.

View File

@@ -570,6 +570,37 @@ intensity variations. The two mechanisms each comprise a nonlinear signal
transformation followed by a linear signal transformation but differ in the
specific operations involved, as outlined in the following sections.
\subsection{Full-wave rectification \& lowpass filtering}
\begin{figure}[!ht]
\centering
\includegraphics[width=\textwidth]{figures/fig_invariance_rect_lp.pdf}
\caption{\textbf{Intensity invariance by logarithmic compression and
adaptation is restricted by the noise floor.}
Synthetic input $\filt(t)$ consists of song component
$\soc(t)$ scaled by $\sca$ with (\figc{} and \figd) or
without (\figa{} and \figb) additive noise component
$\noc(t)$. Input $\filt(t)$ is transformed into envelope
$\env(t)$, logarithmically compressed envelope $\db(t)$,
and intensity-adapted envelope $\adapt(t)$.
\textbf{Left}:~$\env(t)$, $\db(t)$, and $\adapt(t)$ for
different scales $\sca$.
\textbf{Right}:~Ratios of the standard deviation of
$\env(t)$, $\db(t)$, and $\adapt(t)$ relative to the
respective reference standard deviation $\sigma_{\eta}$
for input $\filt(t)=\noc(t)$.
\figa{} and \figb:~Ideally, if $\filt(t)=\sca\cdot\soc(t)$, then
$\adapt(t)$ is intensity-invariant across all $\sca$.
\figc{} and \figd:~In practice, if
$\filt(t)=\sca\cdot\soc(t)+\noc(t)$, the intensity
invariance of $\adapt(t)$ is limited to sufficiently large
$\sca$. Shaded area indicates saturation of $\adapt(t)$ at
$95\,\%$ curve span.
}
\label{fig:inv_rect-lp}
\end{figure}
\FloatBarrier
\subsection{Logarithmic compression \& spike-frequency adaptation}
The first notable emergence of intensity invariance along the model pathway
@@ -899,6 +930,15 @@ initiation of one behavior over another is categorical (e.g. approach/stay)
\end{figure}
\FloatBarrier
\begin{figure}[!ht]
\centering
\includegraphics[width=\textwidth]{figures/fig_invariance_rect-lp_appendix.pdf}
\caption{\textbf{}
}
\label{}
\end{figure}
\FloatBarrier
\begin{figure}[!ht]
\centering
\includegraphics[width=\textwidth]{figures/fig_invariance_log-hp_appendix.pdf}
@@ -935,4 +975,40 @@ initiation of one behavior over another is categorical (e.g. approach/stay)
\end{figure}
\FloatBarrier
\begin{figure}[!ht]
\centering
\includegraphics[width=\textwidth]{figures/fig_kernel_sd_perc_thresh_lp_appendix.pdf}
\caption{\textbf{}
}
\label{}
\end{figure}
\FloatBarrier
\begin{figure}[!ht]
\centering
\includegraphics[width=\textwidth]{figures/fig_kernel_sd_perc_full_appendix.pdf}
\caption{\textbf{}
}
\label{}
\end{figure}
\FloatBarrier
\begin{figure}[!ht]
\centering
\includegraphics[width=\textwidth]{figures/fig_kernel_sd_perc_short_appendix.pdf}
\caption{\textbf{}
}
\label{}
\end{figure}
\FloatBarrier
\begin{figure}[!ht]
\centering
\includegraphics[width=\textwidth]{figures/fig_kernel_sd_perc_field_appendix.pdf}
\caption{\textbf{}
}
\label{}
\end{figure}
\FloatBarrier
\end{document}

View File

@@ -33,7 +33,7 @@ normalization = [
'max',
'base',
'range',
][3]
][0]
suffix = dict(
none='_unnormed',
min='_norm-min',

View File

@@ -7,8 +7,8 @@ from thunderhopper.modeltools import load_data
from misc_functions import shorten_species, get_saturation
from color_functions import load_colors
from plot_functions import hide_axis, ylimits, super_xlabel, ylabel, hide_ticks,\
plot_line, strip_zeros, time_bar, zoom_inset,\
letter_subplot, letter_subplots, title_subplot
plot_line, strip_zeros, time_bar, zoom_inset, shift_subplot,\
letter_subplot, letter_subplots, title_subplot, color_axis
from IPython import embed
def add_snip_axes(fig, grid_kwargs):
@@ -27,10 +27,10 @@ def plot_snippets(axes, time, snippets, ymin=None, ymax=None, **kwargs):
handles.extend(plot_line(ax, time, snippet, ymin=ymin, ymax=ymax, **kwargs))
return handles
# GENERAL SETTINGS:
target = 'Omocestus_rufipes_DJN_32-40s724ms-48s779ms'
data_path = search_files(target, excl='noise', dir='../data/inv/log_hp/')[0]
ref_path = '../data/inv/log_hp/ref_measures.npz'
save_path = '../figures/fig_invariance_log_hp.pdf'
target_species = [
'Chorthippus_biguttulus',
@@ -46,7 +46,7 @@ load_kwargs = dict(
files=stages,
keywords=['scales', 'snip', 'measure']
)
compute_ratios = True
relate_to_noise = True
exclude_zero = True
show_diag = True
show_plateaus = True
@@ -79,7 +79,7 @@ pure_grid_kwargs = dict(
wspace=0.1,
hspace=0.15,
left=0.11,
right=0.95,
right=0.98,
bottom=1 - block_height - edge_padding,
top=1 - edge_padding,
height_ratios=[1, 2, 1]
@@ -95,14 +95,15 @@ noise_grid_kwargs = dict(
top=edge_padding + block_height,
height_ratios=[1, 2, 1]
)
big_col_shift = -0.12
big_grid_kwargs = dict(
nrows=1,
ncols=3,
wspace=0.3,
wspace=0.25,
hspace=0,
left=pure_grid_kwargs['left'],
left=pure_grid_kwargs['left'] - big_col_shift,
right=pure_grid_kwargs['right'],
bottom=0.05,
bottom=0.03,
top=1
)
anchor_kwargs = dict(
@@ -137,7 +138,9 @@ ylabels = dict(
env='$x_{\\text{env}}$',
log='$x_{\\text{dB}}$',
inv='$x_{\\text{adapt}}$',
big='$\\sigma_x\\,/\\,\\sigma_{\\eta}$',
big_pure='$\\sigma_x$',
big_log='$\\sigma_x\\,[\\text{dB}]$',
big_noise='$\\sigma_x\\,/\\,\\sigma_{\\eta}$' if relate_to_noise else None,
)
xlab_big_kwargs = dict(
y=0,
@@ -145,6 +148,18 @@ xlab_big_kwargs = dict(
ha='center',
va='bottom',
)
ylab_big_left_kwargs = dict(
x=-0.2,
fontsize=fs['lab_tex'],
ha='center',
va='bottom'
)
ylab_big_right_kwargs = dict(
x=1.2,
fontsize=fs['lab_tex'],
ha='center',
va='top'
)
ylab_snip_kwargs = dict(
x=0,
fontsize=fs['lab_tex'],
@@ -152,12 +167,6 @@ ylab_snip_kwargs = dict(
ha='left',
va='center',
)
ylab_big_kwargs = dict(
x=0,
fontsize=fs['lab_tex'],
ha='center',
va='top',
)
yloc = dict(
env=1000,
log=40,
@@ -233,7 +242,7 @@ leg_kwargs = dict(
),
borderpad=0,
borderaxespad=0,
handlelength=1,
handlelength=0.5,
columnspacing=1,
)
diag_kwargs = dict(
@@ -287,11 +296,7 @@ noise_data, _ = load_data(data_path.replace('pure', 'noise'), **load_kwargs)
pure_scales, noise_scales = pure_data['scales'], noise_data['scales']
t_full = np.arange(pure_data['snip_env'].shape[0]) / config['env_rate']
if compute_ratios:
# Relate pure-song measures to near-zero scale:
pure_data['measure_env'] /= pure_data['measure_env'][1]
pure_data['measure_log'] /= pure_data['measure_log'][1]
pure_data['measure_inv'] /= pure_data['measure_inv'][1]
if relate_to_noise:
# Relate noise-song measures to zero scale:
noise_data['measure_env'] /= noise_data['measure_env'][0]
noise_data['measure_log'] /= noise_data['measure_log'][0]
@@ -354,8 +359,10 @@ big_axes = np.zeros((big_grid.ncols,), dtype=object)
for i, scales in enumerate([pure_scales, noise_scales, noise_scales]):
ax = big_subfig.add_subplot(big_grid[0, i])
ax.set_xlim(scales[0], scales[-1])
ax.set_ylim(scales[0], scales[-1])
ax.set_xscale('symlog', linthresh=scales[1], linscale=0.5)
ax.set_yscale('symlog', linthresh=scales[1], linscale=0.5)
# ax.xaxis.set_major_locator(plt.LogLocator(base=10, subs=[1]))
ax.set_aspect(**anchor_kwargs)
if i in [0, 1]:
ax.set_ylim(scales[0], scales[-1])
@@ -365,10 +372,19 @@ for i, scales in enumerate([pure_scales, noise_scales, noise_scales]):
ax.set_aspect('auto', adjustable='box', anchor=(0.5, 0.5))
ax.set_position([pos_auto[0], pos_equal[1], pos_auto[2], pos_equal[3]])
ax.set_ylim(0.9, 30)
if i == 1:
hide_ticks(ax, 'left')
big_axes[i] = ax
ylabel(big_axes[0], ylabels['big'], transform=big_subfig.transSubfigure, **ylab_big_kwargs)
shift_subplot(big_axes[0], dx=big_col_shift)
ylabel(big_axes[0], ylabels['big_pure'], transform=big_axes[0].transAxes, **ylab_big_left_kwargs)
ylabel(big_axes[1], ylabels['big_noise'], transform=big_axes[1].transAxes, **ylab_big_left_kwargs)
big_twin = big_axes[0].twinx()
hide_axis(big_twin, 'left')
big_twin.spines['right'].set_visible(True)
big_twin.set_position(big_axes[0].get_position().bounds)
big_twin.set_ylim(scales[0], scales[-1])
big_twin.set_yscale('symlog', linthresh=scales[1], linscale=0.5)
ylabel(big_twin, ylabels['big_log'], transform=big_twin.transAxes, **ylab_big_right_kwargs)
color_axis(big_axes[0], colors['env'], side='left')
color_axis(big_twin, colors['log'], side='right')
super_xlabel(xlabels['big'], big_subfig, big_axes[0], big_axes[-1], **xlab_big_kwargs)
letter_subplots(big_axes, 'cde', **letter_big_kwargs)

View File

@@ -65,7 +65,7 @@ mean_colors = {
'Pseudochorthippus_parallelus': (0,) * 3,
}
xlab = 'scale $\\alpha$'
ylab = '$\\sigma_{\\alpha}\\,/\\,\\sigma_{\\eta}$'
ylab = '$\\sigma_{\\text{adapt}}\\,/\\,\\sigma_{\\eta}$'
xlab_kwargs = dict(
y=0,
fontsize=16,

View File

@@ -0,0 +1,424 @@
import plotstyle_plt
import numpy as np
import matplotlib.pyplot as plt
from itertools import product
from thunderhopper.filetools import search_files
from thunderhopper.modeltools import load_data
from misc_functions import shorten_species
from color_functions import load_colors
from plot_functions import hide_axis, shift_subplot, shift_subplot, ylimits,\
super_xlabel, ylabel, hide_ticks,\
plot_line, strip_zeros, time_bar,\
letter_subplot, letter_subplots, title_subplot
from IPython import embed
def add_snip_axes(fig, grid_kwargs):
grid = fig.add_gridspec(**grid_kwargs)
axes = np.zeros((grid.nrows, grid.ncols), dtype=object)
for i, j in product(range(grid.nrows), range(grid.ncols)):
axes[i, j] = fig.add_subplot(grid[i, j])
if j == 0:
shift_subplot(axes[i, j], dx=snip_col_shift)
[hide_axis(ax, 'left') for ax in axes[:, 2:].flatten()]
[hide_axis(ax, 'bottom') for ax in axes.flatten()]
return axes
def plot_snippets(axes, time, snippets, ymin=None, ymax=None, **kwargs):
ymin, ymax = ylimits(snippets, minval=ymin, maxval=ymax, pad=0.05)
handles = []
for ax, snippet in zip(axes, snippets.T):
handles.extend(plot_line(ax, time, snippet, ymin=ymin, ymax=ymax, **kwargs))
return handles
# GENERAL SETTINGS:
target = 'Omocestus_rufipes_DJN_32-40s724ms-48s779ms'
data_path = search_files(target, excl='noise', dir='../data/inv/rect_lp/')[0]
save_path = '../figures/fig_invariance_rect_lp.pdf'
target_species = [
'Chorthippus_biguttulus',
'Chorthippus_mollis',
'Chrysochraon_dispar',
# 'Euchorthippus_declivus',
'Gomphocerippus_rufus',
'Omocestus_rufipes',
'Pseudochorthippus_parallelus',
]
stages = ['filt', 'env']
load_kwargs = dict(
files=stages,
keywords=['scales', 'cutoff', 'snip', 'measure']
)
# ANALYSIS SETTINGS:
relate_to_noise = True
exclude_zero = True
show_diag = True
snip_cutoff = np.array([np.nan, 2500, 250, 25])[2]
# GRAPH SETTINGS:
fig_kwargs = dict(
figsize=(32/2.54, 32/2.54),
)
super_grid_kwargs = dict(
nrows=3,
ncols=1,
wspace=0,
hspace=0,
left=0,
right=1,
bottom=0,
top=1,
height_ratios=[1, 1, 1]
)
subfig_specs = dict(
pure=(0, slice(None)),
noise=(1, slice(None)),
big=(2, slice(None)),
)
block_height = 0.8
edge_padding = 0.08
snip_col_shift = -0.05
pure_grid_kwargs = dict(
nrows=len(stages),
ncols=None,
wspace=0.1,
hspace=0.15,
left=0.08 - snip_col_shift,
right=0.95,
bottom=1 - block_height - edge_padding,
top=1 - edge_padding,
height_ratios=[1, 1]
)
noise_grid_kwargs = dict(
nrows=len(stages),
ncols=None,
wspace=pure_grid_kwargs['wspace'],
hspace=pure_grid_kwargs['hspace'],
left=pure_grid_kwargs['left'],
right=pure_grid_kwargs['right'],
bottom=edge_padding,
top=edge_padding + block_height,
height_ratios=[1, 1]
)
big_col_shift = -0.05
big_grid_kwargs = dict(
nrows=1,
ncols=3,
wspace=0.25,
hspace=0,
left=pure_grid_kwargs['left'] + snip_col_shift - big_col_shift,
right=pure_grid_kwargs['right'],
bottom=0.04,
top=1
)
anchor_kwargs = dict(
aspect='equal',
adjustable='box',
anchor=(0.5, 0.5)
)
# PLOT SETTINGS:
fs = dict(
lab_norm=16,
lab_tex=20,
letter=22,
tit_norm=16,
tit_tex=20,
bar=16,
)
colors = load_colors('../data/stage_colors.npz')
colors['raw'] = (0., 0., 0.,)
species_colors = load_colors('../data/species_colors.npz')
lw = dict(
snip=0.5,
big=3,
spec=2,
legend=5,
)
dash_cycle = 6 # points
ls_env = [
(0, np.array((0.2, 0.8)) * dash_cycle),
(0, np.array((0.6, 0.1, 0.2, 0.1)) * dash_cycle),
(0, np.array((0.5, 0.5)) * dash_cycle),
'solid',
] # [np.nan, 2500, 250, 25]
xlabels = dict(
big='scale $\\alpha$',
)
ylabels = dict(
raw='$x$',
filt='$x_{\\text{filt}}$',
env='$x_{\\text{env}}$',
big_pure='$\\sigma_x$',
big_noise='$\\sigma_x\\,/\\,\\sigma_{\\eta}$' if relate_to_noise else None,
)
xlab_big_kwargs = dict(
y=0,
fontsize=fs['lab_norm'],
ha='center',
va='bottom',
)
ylab_snip_kwargs = dict(
x=0,
fontsize=fs['lab_tex'],
rotation=0,
ha='left',
va='center',
)
ylab_pure_kwargs = dict(
x=0,
fontsize=fs['lab_tex'],
ha='center',
va='top',
)
ylab_noise_kwargs = dict(
y=0.5,
fontsize=fs['lab_tex'],
ha='center',
va='top',
)
ylim_zoom_factor = 0.03
yloc = dict(
filt=(3, 100),
env=(0.5, 30),
)
ypad = dict(
filt=0.05,
env=0.05,
)
title_kwargs = dict(
x=0.5,
y=1,
ha='center',
va='bottom',
fontsize=fs['tit_norm'],
)
letter_snip_kwargs = dict(
x=0,
yref=0.5,
ha='left',
va='center',
fontsize=fs['letter'],
)
letter_big_kwargs = dict(
x=0,
y=1,
ha='left',
va='bottom',
fontsize=fs['letter'],
)
bar_time = 5
bar_kwargs = dict(
dur=bar_time,
y0=-0.2,
y1=-0.1,
xshift=1,
color='k',
lw=0,
clip_on=False,
text_pos=(-0.1, 0.5),
text_str=f'${bar_time}\\,\\text{{s}}$',
text_kwargs=dict(
fontsize=fs['bar'],
ha='right',
va='center',
)
)
cutoff_leg_kwargs = dict(
ncols=1,
loc='upper left',
bbox_to_anchor=(0.05, 0.5, 0.5, 0.5),
frameon=False,
prop=dict(
size=14,
),
borderpad=0,
borderaxespad=0,
handletextpad=0.3
)
cutoff_leg_kwargs['handlelength'] = 2 * dash_cycle * lw['big'] / cutoff_leg_kwargs['prop']['size']
spec_leg_kwargs = dict(
ncols=2,
loc='lower center',
bbox_to_anchor=(0, 0, 1, 0.5),
frameon=False,
prop=dict(
size=13,
style='italic',
),
borderpad=0,
borderaxespad=0,
handlelength=0.75,
handletextpad=0.5,
columnspacing=1,
)
diag_kwargs = dict(
c=(0.3,) * 3,
lw=2,
ls='--',
zorder=1.9,
)
# PREPARATION:
species_measures = {}
for i, species in enumerate(target_species):
spec_path = search_files(species, incl=['noise', 'norm-base'], dir='../data/inv/rect_lp/condensed/')[0]
spec_data = dict(np.load(spec_path))
measure = spec_data['mean_env'].mean(axis=-1)
if exclude_zero:
measure = measure[spec_data['scales'] > 0, :]
species_measures[species] = measure
# EXECUTION:
print(f'Processing {data_path}')
# Load invariance data:
pure_data, config = load_data(data_path, **load_kwargs)
noise_data, _ = load_data(data_path.replace('pure', 'noise'), **load_kwargs)
pure_scales, noise_scales = pure_data['scales'], noise_data['scales']
t_full = np.arange(pure_data['snip_env'].shape[0]) / config['env_rate']
cutoff_ind = np.nonzero(pure_data['cutoffs'] == snip_cutoff)[0][0]
if relate_to_noise:
# Relate noise-song measures to zero scale:
noise_data['measure_filt'] /= noise_data['measure_filt'][0]
noise_data['measure_env'] /= noise_data['measure_env'][0]
if exclude_zero:
# Exclude zero scales:
inds = pure_scales > 0
pure_scales = pure_scales[inds]
pure_data['measure_filt'] = pure_data['measure_filt'][inds]
pure_data['measure_env'] = pure_data['measure_env'][inds]
inds = noise_scales > 0
noise_scales = noise_scales[inds]
noise_data['measure_filt'] = noise_data['measure_filt'][inds]
noise_data['measure_env'] = noise_data['measure_env'][inds]
symlog_kwargs = dict(linthresh=pure_scales[pure_scales > 0][0], linscale=0.5)
# Prepare overall graph:
fig = plt.figure(**fig_kwargs)
super_grid = fig.add_gridspec(**super_grid_kwargs)
fig.canvas.draw()
# Prepare pure-song snippet axes:
pure_grid_kwargs['ncols'] = pure_data['example_scales'].size
pure_subfig = fig.add_subfigure(super_grid[subfig_specs['pure']])
pure_axes = add_snip_axes(pure_subfig, pure_grid_kwargs)
for (ax1, ax2), stage in zip(pure_axes[:, :2], stages):
ax1.yaxis.set_major_locator(plt.MultipleLocator(yloc[stage][0]))
ax2.yaxis.set_major_locator(plt.MultipleLocator(yloc[stage][1]))
ylabel(ax1, ylabels[stage], **ylab_snip_kwargs, transform=pure_subfig.transSubfigure)
for ax, scale in zip(pure_axes[0, :], pure_data['example_scales']):
pure_title = title_subplot(ax, f'$\\alpha={strip_zeros(scale)}$', **title_kwargs)
letter_subplot(pure_subfig, 'a', ref=pure_title, **letter_snip_kwargs)
# Prepare noise-song snippet axes:
noise_grid_kwargs['ncols'] = noise_data['example_scales'].size
noise_subfig = fig.add_subfigure(super_grid[subfig_specs['noise']])
noise_axes = add_snip_axes(noise_subfig, noise_grid_kwargs)
for (ax1, ax2), stage in zip(noise_axes[:, :2], stages):
ax1.yaxis.set_major_locator(plt.MultipleLocator(yloc[stage][0]))
ax2.yaxis.set_major_locator(plt.MultipleLocator(yloc[stage][1]))
ylabel(ax1, ylabels[stage], **ylab_snip_kwargs, transform=noise_subfig.transSubfigure)
for ax, scale in zip(noise_axes[0, :], noise_data['example_scales']):
noise_title = title_subplot(ax, f'$\\alpha={strip_zeros(scale)}$', **title_kwargs)
letter_subplot(noise_subfig, 'b', ref=noise_title, **letter_snip_kwargs)
# Prepare analysis axes:
big_subfig = fig.add_subfigure(super_grid[subfig_specs['big']])
big_grid = big_subfig.add_gridspec(**big_grid_kwargs)
big_axes = np.zeros((big_grid.ncols,), dtype=object)
for i, scales in enumerate([pure_scales, noise_scales, noise_scales]):
ax = big_subfig.add_subplot(big_grid[0, i])
ax.set_xlim(scales[0], scales[-1])
ax.set_ylim(scales[0], scales[-1])
ax.set_xscale('symlog', **symlog_kwargs)
ax.set_yscale('symlog', **symlog_kwargs)
ax.set_aspect(**anchor_kwargs)
if i in [0, 1]:
ax.set_ylim(scales[0], scales[-1])
pos_equal = ax.get_position().bounds
else:
pos_auto = list(ax.get_position().bounds)
ax.set_aspect('auto', adjustable='box', anchor=(0.5, 0.5))
ax.set_position([pos_auto[0], pos_equal[1], pos_auto[2], pos_equal[3]])
ax.set_ylim(0.1, 100)
big_axes[i] = ax
shift_subplot(big_axes[0], dx=big_col_shift)
ylabel(big_axes[0], ylabels['big_pure'], transform=big_subfig.transSubfigure, **ylab_pure_kwargs)
ylabel(big_axes[1], ylabels['big_noise'], transform=big_axes[1].transAxes, **ylab_noise_kwargs,
x=(big_subfig.transSubfigure + big_axes[0].transAxes.inverted()).transform((ylab_pure_kwargs['x'], 0))[0])
super_xlabel(xlabels['big'], big_subfig, big_axes[0], big_axes[-1], **xlab_big_kwargs)
letter_subplots(big_axes, 'cde', **letter_big_kwargs)
# Plot pure-song filtered snippets:
handle = plot_snippets(pure_axes[0, :], t_full, pure_data['snip_filt'],
c=colors['filt'], lw=lw['snip'], ypad=ypad['filt'])
# Plot pure-song envelope snippets:
plot_snippets(pure_axes[1, :], t_full, pure_data['snip_env'][..., cutoff_ind],
ymin=0, c=colors['env'], lw=lw['snip'], ypad=ypad['env'])
# Plot noise-song filtered snippets:
handle = plot_snippets(noise_axes[0, :], t_full, noise_data['snip_filt'], ypad=ypad['filt'],
*pure_axes[0, 0].get_ylim(), c=colors['filt'], lw=lw['snip'])
# Plot noise-song envelope snippets:
plot_snippets(noise_axes[1, :], t_full, noise_data['snip_env'][..., cutoff_ind],
*pure_axes[1, 0].get_ylim(), c=colors['env'], lw=lw['snip'])
# Zoom into first filtered snippet:
# ylim_zoom = np.array(noise_axes[0, -1].get_ylim()) * ylim_zoom_factor
# noise_axes[0, 0].set_ylim(*ylim_zoom)
ylim_zoom = ylimits(noise_data['snip_filt'][:, 0], noise_axes[0, 0], pad=ypad['filt'])
pure_axes[0, 0].set_ylim(*ylim_zoom)
# Zoom into first envelope snippet:
# ylim_zoom = np.array(noise_axes[1, -1].get_ylim()) * ylim_zoom_factor
# noise_axes[1, 0].set_ylim(*ylim_zoom)
ylim_zoom = ylimits(noise_data['snip_env'][:, 0, cutoff_ind], noise_axes[1, 0], minval=0, pad=ypad['env'])
pure_axes[1, 0].set_ylim(*ylim_zoom)
# Indicate time scale:
time_bar(noise_axes[-1, -1], **bar_kwargs)
# Plot pure-song measures (ideal):
big_axes[0].plot(pure_scales, pure_data['measure_filt'], c=colors['filt'], lw=lw['big'])
handles = big_axes[0].plot(pure_scales, pure_data['measure_env'], c=colors['env'], lw=lw['big'])
[handle.set_ls(ls) for handle, ls in zip(handles, ls_env)]
# Plot noise-song measures (limited):
big_axes[1].plot(noise_scales, noise_data['measure_filt'], c=colors['filt'], lw=lw['big'])
handles = big_axes[1].plot(noise_scales, noise_data['measure_env'], c=colors['env'], lw=lw['big'])
[handle.set_ls(ls) for handle, ls in zip(handles, ls_env)]
# Add proxy legend:
proxy_handles = []
for i, cutoff in enumerate(pure_data['cutoffs']):
label = '$\\text{unfiltered}$' if np.isnan(cutoff) else f'${int(cutoff)}\\,\\text{{Hz}}$'
proxy_handles.append(big_axes[0].plot([], [], c=colors['env'], lw=lw['big'],
ls=ls_env[i], label=label)[0])
big_axes[0].legend(handles=proxy_handles, **cutoff_leg_kwargs)
if show_diag:
# Indicate diagonal:
big_axes[0].plot(pure_scales, pure_scales, **diag_kwargs)
big_axes[1].plot(noise_scales, noise_scales, **diag_kwargs)
# Plot species-specific noise-song invariance curves:
leg_handles = []
for i, (species, measure) in enumerate(species_measures.items()):
handles = big_axes[2].plot(noise_scales, measure, label=shorten_species(species),
c=species_colors[species], lw=lw['spec'])
[handle.set_ls(ls) for handle, ls in zip(handles, ls_env)]
leg_handles.append(handles[-1])
legend = big_axes[2].legend(handles=leg_handles, **spec_leg_kwargs)
[h.set_lw(lw['legend']) for h in legend.legend_handles]
if save_path is not None:
fig.savefig(save_path, bbox_inches='tight')
plt.show()
print('Done.')
embed()

View File

@@ -0,0 +1,159 @@
import plotstyle_plt
import numpy as np
import matplotlib.pyplot as plt
from thunderhopper.filetools import search_files
from thunderhopper.modeltools import load_data
from plot_functions import ylabel, super_xlabel, super_ylabel, title_subplot, time_bar
from color_functions import load_colors
from misc_functions import shorten_species
from IPython import embed
# GENERAL SETTINGS:
target_species = [
'Chorthippus_biguttulus',
'Chorthippus_mollis',
'Chrysochraon_dispar',
# 'Euchorthippus_declivus',
'Gomphocerippus_rufus',
'Omocestus_rufipes',
'Pseudochorthippus_parallelus',
]
data_path = '../data/inv/rect_lp/condensed/'
save_path = '../figures/fig_invariance_rect-lp_appendix.pdf'
# ANALYSIS SETTINGS:
relate_to_noise = True
exclude_zero = True
cutoffs = np.array([np.nan, 2500, 250, 25])
search_kwargs = dict(
incl=['noise', 'norm-base' if relate_to_noise else 'unnormed'],
dir=data_path,
)
# GRAPH SETTINGS:
fig_kwargs = dict(
figsize=(32/2.54, 16/2.54),
nrows=cutoffs.size,
ncols=len(target_species),
sharex=True,
sharey=True,
gridspec_kw=dict(
wspace=0.4,
hspace=0.2,
left=0.12,
right=0.98,
bottom=0.1,
top=0.95,
)
)
# PLOT SETTINGS:
species_colors = load_colors('../data/species_colors.npz')
line_kwargs = dict(
lw=2,
alpha=0.5,
zorder=2,
)
fill_kwargs = dict(
alpha=0.3,
zorder=1,
)
mean_kwargs = dict(
lw=2,
alpha=1,
zorder=3,
ls='--'
)
mean_colors = {
'Chorthippus_biguttulus': (1,) * 3,
'Chorthippus_mollis': (0,) * 3,
'Chrysochraon_dispar': (0,) * 3,
'Euchorthippus_declivus': (0,) * 3,
'Gomphocerippus_rufus': (0,) * 3,
'Omocestus_rufipes': (0,) * 3,
'Pseudochorthippus_parallelus': (1,) * 3,
}
xlab = 'scale $\\alpha$'
ylabs = ['$\\text{unfiltered}$'] + [f'${int(cutoff)}\\,\\text{{Hz}}$' for cutoff in cutoffs[1:]]
super_ylab = '$\\sigma_{\\text{env}}\\,/\\,\\sigma_{\\eta}$' if relate_to_noise else '$\\sigma_{\\text{env}}$'
xlab_kwargs = dict(
y=0,
fontsize=16,
ha='center',
va='bottom',
)
ylab_kwargs = dict(
x=0.05,
fontsize=16,
ha='center',
va='top',
)
ylab_super_kwargs = dict(
x=0,
fontsize=20,
ha='left',
va='center',
)
title_kwargs = dict(
x=0.5,
yref=0.99,
ha='center',
va='top',
fontsize=16,
fontstyle='italic',
)
letter_kwargs = dict(
x=0.005,
y=0.99,
fontsize=22,
ha='left',
va='top',
)
# Prepare graph:
fig, axes = plt.subplots(**fig_kwargs)
[ylabel(ax, lab, transform=fig.transFigure, **ylab_kwargs) for ax, lab in zip(axes[:, 0], ylabs)]
super_xlabel(xlab, fig, axes[-1, 0], axes[-1, -1], **xlab_kwargs)
super_ylabel(super_ylab, fig, axes[0, 0], axes[-1, 0], **ylab_super_kwargs)
# Run through species:
for i, (species, spec_axes) in enumerate(zip(target_species, axes.T)):
title_subplot(spec_axes[0], shorten_species(species), ref=fig, **title_kwargs)
# Load species data:
path = search_files(species, **search_kwargs)[0]
data, config = load_data(path, files=['scales', 'mean_env', 'sd_env'])
scales = data['scales']
means = data['mean_env']
sds = data['sd_env']
if exclude_zero:
# Exclude zero scale:
inds = scales > 0
scales = scales[inds]
means = means[inds, ...]
sds = sds[inds, ...]
# Run through cutoffs:
for j, ax in enumerate(spec_axes):
# Plot recording-specific traces:
for k in range(means.shape[-1]):
ax.plot(scales, means[:, j, k], c=species_colors[species], **line_kwargs)
spread = (means[:, j, k] - sds[:, j, k], means[:, j, k] + sds[:, j, k])
ax.fill_between(scales, *spread, color=species_colors[species], **fill_kwargs)
# Plot cutoff-specific mean trace:
ax.plot(scales, means[:, j, :].mean(axis=-1), c=mean_colors[species], **mean_kwargs)
# Posthocs:
sylog_kwargs = dict(linthresh=scales[scales > 0][0], linscale=0.5)
axes[0, 0].set_xscale('symlog', **sylog_kwargs)
axes[0, 0].set_yscale('symlog', **sylog_kwargs)
axes[0, 0].set_xlim(scales[0], scales[-1])
axes[0, 0].set_ylim(0.9, scales[-1])
axes[0, 0].xaxis.set_major_locator(plt.LogLocator(base=10, subs=[1]))
# Save graph:
fig.savefig(save_path)
plt.show()

View File

@@ -98,7 +98,7 @@ snip_grid_kwargs = dict(
ncols=None,
wspace=0.3,
hspace=0,
left=0.25,
left=0.2 - snip_col_shift,
right=0.93,
bottom=0.15,
top=0.95,

View File

@@ -1,8 +1,7 @@
import plotstyle_plt
import numpy as np
import matplotlib.pyplot as plt
from thunderhopper.modeltools import load_data
from thunderhopper.filetools import search_files, crop_paths
from scipy.stats import norm
from plot_functions import xlabel, ylabel
from IPython import embed
@@ -26,10 +25,22 @@ fig_kwargs = dict(
)
)
line_kwargs = dict(
color='black',
c='black',
lw=1,
alpha=0.5,
)
fit_kwargs = dict(
c='red',
lw=3,
ls='--',
)
grid_line_kwargs = dict(
visible=True,
which='major',
axis='both',
color='k',
lw=0.5,
)
xlab = '$\\text{multiple of }\\sigma_{k_i}$'
ylab = '$P\\,(c_i > \\Theta_i)$'
xlab_kwargs = dict(
@@ -50,15 +61,20 @@ data = dict(np.load(thresh_path))
factors = data['factors']
perc = data['percs']
# Get Gaussian CDF for reference:
fit = norm.cdf(factors, loc=0, scale=1)[::-1]
# Prepare graph:
fig, ax = plt.subplots(**fig_kwargs)
ax.grid(**grid_line_kwargs)
ax.set_xlim(factors[0], factors[-1])
ax.set_ylim(0, 1)
ax.set_ylim(-0.01, 1.01)
ylabel(ax, ylab, transform=fig.transFigure, **ylab_kwargs)
xlabel(ax, xlab, transform=fig.transFigure, **xlab_kwargs)
# Plotting:
ax.plot(factors, perc, **line_kwargs)
ax.plot(factors, fit, **fit_kwargs)
# Save figure:
fig.savefig(save_path)

View File

@@ -300,6 +300,12 @@ def set_clip_box(artist, ax, bounds=[[0, -0.05], [1, 1.05]]):
artist.set_clip_box(TransformedBbox(Bbox(bounds), ax.transAxes))
return None
def color_axis(ax, color, axis='y', side='left'):
ax.spines[side].set_color(color)
ax.tick_params(colors=color, axis=axis, which='both')
ax.yaxis.label.set_color(color)
return None
def plot_dist_shifted(ax, data, axis, pdf=None, sigma=0.1, which='x',
base=None, cap=None, add_pdf=False, shifted=False, **kwargs):
if pdf is None:

View File

@@ -7,16 +7,17 @@ from IPython import embed
# GENERAL SETTINGS:
example_file = 'Omocestus_rufipes_DJN_32-40s724ms-48s779ms'
data_paths = search_files('*', excl='noise', dir='../data/processed/')
search_target = ['*', example_file][0]
data_paths = search_files(search_target, excl='noise', dir='../data/processed/')
noise_path = '../data/processed/white_noise_sd-1.npz'
save_path = '../data/inv/rect_lp/'
# ANALYSIS SETTINGS:
mode = ['pure', 'noise'][1]
example_scales = np.array([0.1, 1, 10, 30, 100, 300])
scales = np.geomspace(0.01, 10000, 1000)
example_scales = np.array([0.1, 0.3, 1, 3, 10])
scales = np.geomspace(0.01, 100, 1000)
scales = np.unique(np.concatenate(([0], scales, example_scales)))
cutoffs = np.array([np.nan, 125, 250, 500])
cutoffs = np.array([np.nan, 2500, 250, 25])
# PREPARATION:
if mode == 'noise':