Syncing to home.

This commit is contained in:
j-hartling
2026-05-08 18:21:47 +02:00
parent 4b4a04ab2a
commit f14de13823
16 changed files with 578 additions and 395 deletions

Binary file not shown.

View File

@@ -269,43 +269,43 @@
\newlabel{fig:thresh-lp_species}{{7}{21}{}{}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {3.3}Intensity invariance along the full model pathway}{22}{}\protected@file@percent }
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.3.1}Including logarithmic compression}{22}{}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {8}{\ignorespaces \textbf {Step-wise emergence of intensity-invariant song representation along the full model pathway.} Input $x_{\text {raw}}(t)$ consists of song component $s(t)$ scaled by $\alpha $ with added noise component $\eta (t)$ and is processed up to the feature set $f_i(t)$. Different color shades indicate different types of Gabor kernels with specific lobe number $n$ and either $+$ or $-$ sign, sorted (dark to light) first by increasing $n$ and then by sign~($1\,\leq \,n\,\leq \,4$; first $+$, then $-$ for each $n$; five kernel widths $\sigma $ of 1, 2, 4, 8, and $16\,$ms per type; 8 types, 40 kernels in total). \textbf {a}:~Example representations of $x_{\text {filt}}(t)$, $x_{\text {env}}(t)$, $x_{\text {log}}(t)$, $x_{\text {adapt}}(t)$, $c_i(t)$, and $f_i(t)$ for different $\alpha $. \textbf {b}:~Intensity metrics over $\alpha $. For $c_i(t)$ and $f_i(t)$, the median over kernels is shown. Dots indicate $95\,\%$ curve span for $x_{\text {log}}(t)$, $x_{\text {adapt}}(t)$, $c_i(t)$, and $f_i(t)$. \textbf {c}:~Average value $\mu _{f_i}$ of each feature $f_i(t)$ over $\alpha $. \textbf {d}:~Ratios of intensity metrics to the respective reference value for input $x_{\text {raw}}(t)=\eta (t)$. For $c_i(t)$ and $f_i(t)$, the median over kernel-specific ratios is shown. \textbf {e}:~Ratios of standard deviation $\sigma _{c_i}$ of each $c_i(t)$. \textbf {f}:~Ratios of $\mu _{f_i}$. \textbf {g}:~Distributions of kernel-specific $\alpha $ that correspond to $95\,\%$ curve span for $c_i(t)$ and $f_i(t)$. Dots indicate the values from \textbf {b}. }}{24}{}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {8}{\ignorespaces \textbf {Step-wise emergence of intensity-invariant song representations along the model pathway.} Input $x_{\text {raw}}(t)$ consists of song component $s(t)$ scaled by $\alpha $ with added noise component $\eta (t)$ and is processed up to the feature set $f_i(t)$. Different color shades indicate different types of Gabor kernels with specific lobe number $n$ and either $+$ or $-$ sign, sorted (dark to light) first by increasing $n$ and then by sign~($1\,\leq \,n\,\leq \,4$; first $+$, then $-$ for each $n$; five kernel widths $\sigma $ of 1, 2, 4, 8, and $16\,$ms per type; 8 types, 40 kernels in total). \textbf {a}:~Example representations of $x_{\text {filt}}(t)$, $x_{\text {env}}(t)$, $x_{\text {log}}(t)$, $x_{\text {adapt}}(t)$, $c_i(t)$, and $f_i(t)$ for different $\alpha $. \textbf {b}:~Intensity metrics over $\alpha $. For $c_i(t)$ and $f_i(t)$, the median over kernels is shown. Dots indicate $95\,\%$ curve span for $x_{\text {log}}(t)$, $x_{\text {adapt}}(t)$, $c_i(t)$, and $f_i(t)$. \textbf {c}:~Average value $\mu _{f_i}$ of each feature $f_i(t)$ over $\alpha $. \textbf {d}:~Ratios of intensity metrics to the respective reference value for input $x_{\text {raw}}(t)=\eta (t)$. For $c_i(t)$ and $f_i(t)$, the median over kernel-specific ratios is shown. \textbf {e}:~Ratios of standard deviation $\sigma _{c_i}$ of each $c_i(t)$. \textbf {f}:~Ratios of $\mu _{f_i}$. \textbf {g}:~Distributions of kernel-specific $\alpha $ that correspond to $95\,\%$ curve span for $c_i(t)$ and $f_i(t)$. Dots indicate the values from \textbf {b}. }}{24}{}\protected@file@percent }
\newlabel{fig:pipeline_full}{{8}{24}{}{}{}}
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.3.2}Excluding logarithmic compression}{25}{}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {9}{\ignorespaces \textbf {Step-wise emergence of intensity invariant song representation along the model pathway without logarithmic compression.} Input $x_{\text {raw}}(t)$ consists of song component $s(t)$ scaled by $\alpha $ with added noise component $\eta (t)$ and is processed up to the feature set $f_i(t)$, skipping $x_{\text {log}}(t)$. Different color shades indicate different types of Gabor kernels with specific lobe number $n$ and either $+$ or $-$ sign, sorted (dark to light) first by increasing $n$ and then by sign~($1\,\leq \,n\,\leq \,4$; first $+$, then $-$ for each $n$; five kernel widths $\sigma $ of 1, 2, 4, 8, and $16\,$ms per type; 8 types, 40 kernels in total). \textbf {a}:~Example representations of $x_{\text {filt}}(t)$, $x_{\text {env}}(t)$, $x_{\text {adapt}}(t)$, $c_i(t)$, and $f_i(t)$ for different $\alpha $. \textbf {b}:~Intensity metrics over $\alpha $. For $c_i(t)$ and $f_i(t)$, the median over kernels is shown. Dots indicate $95\,\%$ curve span for $f_i(t)$. \textbf {c}:~Average value $\mu _{f_i}$ of each feature $f_i(t)$ over $\alpha $. \textbf {d}:~Ratios of intensity metrics to the respective reference value for input $x_{\text {raw}}(t)=\eta (t)$. For $c_i(t)$ and $f_i(t)$, the median over kernel-specific ratios is shown. \textbf {e}:~Ratios of $\mu _{f_i}$. \textbf {f}:~Distribution of kernel-specific $\alpha $ that correspond to $95\,\%$ curve span for $f_i(t)$. Dots indicate the value from \textbf {b}. }}{26}{}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {9}{\ignorespaces \textbf {Effects of disabling logarithmic compression on intensity invariance along the model pathway.} Input $x_{\text {raw}}(t)$ consists of song component $s(t)$ scaled by $\alpha $ with added noise component $\eta (t)$ and is processed up to the feature set $f_i(t)$, skipping $x_{\text {log}}(t)$. Different color shades indicate different types of Gabor kernels with specific lobe number $n$ and either $+$ or $-$ sign, sorted (dark to light) first by increasing $n$ and then by sign~($1\,\leq \,n\,\leq \,4$; first $+$, then $-$ for each $n$; five kernel widths $\sigma $ of 1, 2, 4, 8, and $16\,$ms per type; 8 types, 40 kernels in total). \textbf {a}:~Example representations of $x_{\text {filt}}(t)$, $x_{\text {env}}(t)$, $x_{\text {adapt}}(t)$, $c_i(t)$, and $f_i(t)$ for different $\alpha $. \textbf {b}:~Intensity metrics over $\alpha $. For $c_i(t)$ and $f_i(t)$, the median over kernels is shown. Dots indicate $95\,\%$ curve span for $f_i(t)$. \textbf {c}:~Average value $\mu _{f_i}$ of each feature $f_i(t)$ over $\alpha $. \textbf {d}:~Ratios of intensity metrics to the respective reference value for input $x_{\text {raw}}(t)=\eta (t)$. For $c_i(t)$ and $f_i(t)$, the median over kernel-specific ratios is shown. \textbf {e}:~Ratios of $\mu _{f_i}$. \textbf {f}:~Distribution of kernel-specific $\alpha $ that correspond to $95\,\%$ curve span for $f_i(t)$. Dots indicate the value from \textbf {b}. }}{26}{}\protected@file@percent }
\newlabel{fig:pipeline_short}{{9}{26}{}{}{}}
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.3.3}Field data}{27}{}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {10}{\ignorespaces \textbf {Step-wise emergence of intensity invariant song representation along the model pathway.} }}{27}{}\protected@file@percent }
\newlabel{fig:pipeline_field}{{10}{27}{}{}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {3.4}Interspecific and intraspecific feature variability}{27}{}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {11}{\ignorespaces \textbf {Interspecific and intraspecific feature variability.} Average value $\mu _{f_i}$ of each feature $f_i(t)$ against its counterpart from a 2nd feature set based on a different input $x_{\text {raw}}(t)$. Each dot within a subplot represents a single feature $f_i(t)$. Different color shades indicate different types of Gabor kernels with specific lobe number $n$ and either $+$ or $-$ sign, sorted (dark to light) first by increasing $n$ and then by sign~($1\,\leq \,n\,\leq \,4$; first $+$, then $-$ for each $n$; five kernel widths $\sigma $ of 1, 2, 4, 8, and $16\,$ms per type; 8 types, 40 kernels in total). Data is based on the analysis underlying Fig\,\ref {fig:pipeline_full}. \textbf {Lower triangular}:~Interspecific comparisons between single songs of different species. \textbf {Upper triangular}:~Intraspecific comparisons between different songs of a single species (\textit {O. rufipes}). \textbf {Lower right}:~Distribution of correlation coefficients $\rho $ for each interspecific and intraspecific comparison. Dots indicate single $\rho $ values. }}{29}{}\protected@file@percent }
\newlabel{fig:feat_cross_species}{{11}{29}{}{}{}}
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.3.3}Intensity invariance in a naturalistic setting}{27}{}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {10}{\ignorespaces \textbf {Intensity invariance along the model pathway in a naturalistic setting.} Input $x_{\text {raw}}(t)$ consists of a song of \textit {P. parallelus} recorded in the field at eight different distances $d$ and is processed up to the feature set $f_i(t)$. Different color shades indicate different types of Gabor kernels with specific lobe number $n$ and either $+$ or $-$ sign, sorted (dark to light) first by increasing $n$ and then by sign~($1\,\leq \,n\,\leq \,4$; first $+$, then $-$ for each $n$; five kernel widths $\sigma $ of 1, 2, 4, 8, and $16\,$ms per type; 8 types, 40 kernels in total). \textbf {a}:~$x_{\text {filt}}(t)$, $x_{\text {env}}(t)$, $x_{\text {log}}(t)$, $x_{\text {adapt}}(t)$, $c_i(t)$, and $f_i(t)$ at each $d$. A noise segment from the same recording is shown for reference. \textbf {b}:~Intensity metrics over $d$. For $c_i(t)$ and $f_i(t)$, the median over kernels is shown. \textbf {c}:~Average value $\mu _{f_i}$ of each feature $f_i(t)$ over $d$. \textbf {d}:~Ratios of intensity metrics to the respective value obtained from the noise reference. For $c_i(t)$ and $f_i(t)$, the median over kernel-specific ratios is shown. \textbf {e}:~Ratios of standard deviation $\sigma _{c_i}$ of each $c_i(t)$. \textbf {f}:~Ratios of $\mu _{f_i}$. }}{28}{}\protected@file@percent }
\newlabel{fig:pipeline_field}{{10}{28}{}{}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {3.4}Interspecific and intraspecific feature variability}{29}{}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {11}{\ignorespaces \textbf {Interspecific and intraspecific feature variability.} Average value $\mu _{f_i}$ of each feature $f_i(t)$ against its counterpart from a 2nd feature set based on a different input $x_{\text {raw}}(t)$. Each dot within a subplot represents a single feature $f_i(t)$. Different color shades indicate different types of Gabor kernels with specific lobe number $n$ and either $+$ or $-$ sign, sorted (dark to light) first by increasing $n$ and then by sign~($1\,\leq \,n\,\leq \,4$; first $+$, then $-$ for each $n$; five kernel widths $\sigma $ of 1, 2, 4, 8, and $16\,$ms per type; 8 types, 40 kernels in total). Data is based on the analysis underlying Fig\,\ref {fig:pipeline_full}. \textbf {Lower triangular}:~Interspecific comparisons between single songs of different species. \textbf {Upper triangular}:~Intraspecific comparisons between different songs of a single species (\textit {O. rufipes}). \textbf {Lower right}:~Distribution of correlation coefficients $\rho $ for each interspecific and intraspecific comparison. Dots indicate single $\rho $ values. }}{30}{}\protected@file@percent }
\newlabel{fig:feat_cross_species}{{11}{30}{}{}{}}
\abx@aux@cite{0}{stumpner1991auditory}
\abx@aux@segm{0}{0}{stumpner1991auditory}
\@writefile{toc}{\contentsline {section}{\numberline {4}Conclusions \& outlook}{30}{}\protected@file@percent }
\abx@aux@page{73}{30}
\@writefile{lof}{\contentsline {figure}{\numberline {12}{\ignorespaces \textbf {} }}{31}{}\protected@file@percent }
\newlabel{fig:app_env-sd}{{12}{31}{}{}{}}
\@writefile{lof}{\contentsline {figure}{\numberline {13}{\ignorespaces \textbf {} }}{32}{}\protected@file@percent }
\newlabel{fig:app_rect-lp}{{13}{32}{}{}{}}
\@writefile{lof}{\contentsline {figure}{\numberline {14}{\ignorespaces \textbf {} }}{32}{}\protected@file@percent }
\newlabel{fig:app_log-hp_curves}{{14}{32}{}{}{}}
\@writefile{lof}{\contentsline {figure}{\numberline {15}{\ignorespaces \textbf {} }}{33}{}\protected@file@percent }
\newlabel{fig:app_log-hp_saturation}{{15}{33}{}{}{}}
\@writefile{lof}{\contentsline {figure}{\numberline {16}{\ignorespaces \textbf {} }}{33}{}\protected@file@percent }
\newlabel{fig:app_thresh-lp_pure}{{16}{33}{}{}{}}
\@writefile{lof}{\contentsline {figure}{\numberline {17}{\ignorespaces \textbf {} }}{34}{}\protected@file@percent }
\newlabel{fig:app_thresh-lp_noise}{{17}{34}{}{}{}}
\@writefile{lof}{\contentsline {figure}{\numberline {18}{\ignorespaces \textbf {} }}{34}{}\protected@file@percent }
\newlabel{fig:app_thresh-lp_kern-sd}{{18}{34}{}{}{}}
\@writefile{lof}{\contentsline {figure}{\numberline {19}{\ignorespaces \textbf {} }}{35}{}\protected@file@percent }
\newlabel{fig:app_full_kern-sd}{{19}{35}{}{}{}}
\@writefile{lof}{\contentsline {figure}{\numberline {20}{\ignorespaces \textbf {} }}{35}{}\protected@file@percent }
\newlabel{fig:app_short_kern-sd}{{20}{35}{}{}{}}
\@writefile{lof}{\contentsline {figure}{\numberline {21}{\ignorespaces \textbf {} }}{36}{}\protected@file@percent }
\newlabel{fig:app_field_kern-sd}{{21}{36}{}{}{}}
\@writefile{lof}{\contentsline {figure}{\numberline {22}{\ignorespaces \textbf {} }}{37}{}\protected@file@percent }
\newlabel{fig:app_cross_species_thresh}{{22}{37}{}{}{}}
\@writefile{toc}{\contentsline {section}{\numberline {4}Conclusions \& outlook}{31}{}\protected@file@percent }
\abx@aux@page{73}{31}
\@writefile{lof}{\contentsline {figure}{\numberline {12}{\ignorespaces \textbf {} }}{32}{}\protected@file@percent }
\newlabel{fig:app_env-sd}{{12}{32}{}{}{}}
\@writefile{lof}{\contentsline {figure}{\numberline {13}{\ignorespaces \textbf {} }}{33}{}\protected@file@percent }
\newlabel{fig:app_rect-lp}{{13}{33}{}{}{}}
\@writefile{lof}{\contentsline {figure}{\numberline {14}{\ignorespaces \textbf {} }}{33}{}\protected@file@percent }
\newlabel{fig:app_log-hp_curves}{{14}{33}{}{}{}}
\@writefile{lof}{\contentsline {figure}{\numberline {15}{\ignorespaces \textbf {} }}{34}{}\protected@file@percent }
\newlabel{fig:app_log-hp_saturation}{{15}{34}{}{}{}}
\@writefile{lof}{\contentsline {figure}{\numberline {16}{\ignorespaces \textbf {} }}{34}{}\protected@file@percent }
\newlabel{fig:app_thresh-lp_pure}{{16}{34}{}{}{}}
\@writefile{lof}{\contentsline {figure}{\numberline {17}{\ignorespaces \textbf {} }}{35}{}\protected@file@percent }
\newlabel{fig:app_thresh-lp_noise}{{17}{35}{}{}{}}
\@writefile{lof}{\contentsline {figure}{\numberline {18}{\ignorespaces \textbf {} }}{35}{}\protected@file@percent }
\newlabel{fig:app_thresh-lp_kern-sd}{{18}{35}{}{}{}}
\@writefile{lof}{\contentsline {figure}{\numberline {19}{\ignorespaces \textbf {} }}{36}{}\protected@file@percent }
\newlabel{fig:app_full_kern-sd}{{19}{36}{}{}{}}
\@writefile{lof}{\contentsline {figure}{\numberline {20}{\ignorespaces \textbf {} }}{36}{}\protected@file@percent }
\newlabel{fig:app_short_kern-sd}{{20}{36}{}{}{}}
\@writefile{lof}{\contentsline {figure}{\numberline {21}{\ignorespaces \textbf {} }}{37}{}\protected@file@percent }
\newlabel{fig:app_field_kern-sd}{{21}{37}{}{}{}}
\@writefile{lof}{\contentsline {figure}{\numberline {22}{\ignorespaces \textbf {} }}{38}{}\protected@file@percent }
\newlabel{fig:app_cross_species_thresh}{{22}{38}{}{}{}}
\gdef\svg@ink@ver@settings{{\m@ne }{inkscape}{\m@ne }}
\abx@aux@read@bbl@mdfivesum{1380DC8C93D2855FDB132CC5A40AD52F}
\gdef \@abspage@last{37}
\gdef \@abspage@last{38}

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'
[40] biber:340> INFO - === Do Mai 7, 2026, 17:17:44
[48] Biber.pm:419> INFO - Reading 'main.bcf'
[77] 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 ...
[119] bibtex.pm:1519> INFO - Found BibTeX data source 'cite.bib'
[298] UCollate.pm:68> INFO - Overriding locale 'en-US' defaults 'variable = shifted' with 'variable = non-ignorable'
[298] UCollate.pm:68> INFO - Overriding locale 'en-US' defaults 'normalization = NFD' with 'normalization = prenormalized'
[298] Biber.pm:4239> INFO - Sorting list 'nyt/global//global/global' of type 'entry' with template 'nyt' and locale 'en-US'
[298] Biber.pm:4245> INFO - No sort tailoring available for locale 'en-US'
[322] bbl.pm:660> INFO - Writing 'main.bbl' with encoding 'UTF-8'
[332] bbl.pm:763> INFO - Output to main.bbl
[332] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_GU5F/347c261ec4135a5723bef5c751f5078f_310092.utf8, line 10, warning: 6 characters of junk seen at toplevel
[332] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_GU5F/347c261ec4135a5723bef5c751f5078f_310092.utf8, line 21, warning: 6 characters of junk seen at toplevel
[332] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_GU5F/347c261ec4135a5723bef5c751f5078f_310092.utf8, line 38, warning: 6 characters of junk seen at toplevel
[332] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_GU5F/347c261ec4135a5723bef5c751f5078f_310092.utf8, line 49, warning: 6 characters of junk seen at toplevel
[332] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_GU5F/347c261ec4135a5723bef5c751f5078f_310092.utf8, line 58, warning: 6 characters of junk seen at toplevel
[332] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_GU5F/347c261ec4135a5723bef5c751f5078f_310092.utf8, line 73, warning: 6 characters of junk seen at toplevel
[332] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_GU5F/347c261ec4135a5723bef5c751f5078f_310092.utf8, line 82, warning: 6 characters of junk seen at toplevel
[332] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_GU5F/347c261ec4135a5723bef5c751f5078f_310092.utf8, line 91, warning: 6 characters of junk seen at toplevel
[332] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_GU5F/347c261ec4135a5723bef5c751f5078f_310092.utf8, line 100, warning: 6 characters of junk seen at toplevel
[332] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_GU5F/347c261ec4135a5723bef5c751f5078f_310092.utf8, line 109, warning: 6 characters of junk seen at toplevel
[332] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_GU5F/347c261ec4135a5723bef5c751f5078f_310092.utf8, line 118, warning: 6 characters of junk seen at toplevel
[332] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_GU5F/347c261ec4135a5723bef5c751f5078f_310092.utf8, line 127, warning: 6 characters of junk seen at toplevel
[332] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_GU5F/347c261ec4135a5723bef5c751f5078f_310092.utf8, line 136, warning: 6 characters of junk seen at toplevel
[332] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_GU5F/347c261ec4135a5723bef5c751f5078f_310092.utf8, line 157, warning: 6 characters of junk seen at toplevel
[332] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_GU5F/347c261ec4135a5723bef5c751f5078f_310092.utf8, line 178, warning: 6 characters of junk seen at toplevel
[332] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_GU5F/347c261ec4135a5723bef5c751f5078f_310092.utf8, line 187, warning: 6 characters of junk seen at toplevel
[332] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_GU5F/347c261ec4135a5723bef5c751f5078f_310092.utf8, line 196, warning: 6 characters of junk seen at toplevel
[332] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_GU5F/347c261ec4135a5723bef5c751f5078f_310092.utf8, line 207, warning: 6 characters of junk seen at toplevel
[332] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_GU5F/347c261ec4135a5723bef5c751f5078f_310092.utf8, line 218, warning: 6 characters of junk seen at toplevel
[332] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_GU5F/347c261ec4135a5723bef5c751f5078f_310092.utf8, line 229, warning: 6 characters of junk seen at toplevel
[332] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_GU5F/347c261ec4135a5723bef5c751f5078f_310092.utf8, line 240, warning: 6 characters of junk seen at toplevel
[332] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_GU5F/347c261ec4135a5723bef5c751f5078f_310092.utf8, line 249, warning: 6 characters of junk seen at toplevel
[332] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_GU5F/347c261ec4135a5723bef5c751f5078f_310092.utf8, line 258, warning: 6 characters of junk seen at toplevel
[332] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_GU5F/347c261ec4135a5723bef5c751f5078f_310092.utf8, line 269, warning: 6 characters of junk seen at toplevel
[332] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_GU5F/347c261ec4135a5723bef5c751f5078f_310092.utf8, line 278, warning: 6 characters of junk seen at toplevel
[332] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_GU5F/347c261ec4135a5723bef5c751f5078f_310092.utf8, line 289, warning: 6 characters of junk seen at toplevel
[332] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_GU5F/347c261ec4135a5723bef5c751f5078f_310092.utf8, line 300, warning: 6 characters of junk seen at toplevel
[332] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_GU5F/347c261ec4135a5723bef5c751f5078f_310092.utf8, line 309, warning: 6 characters of junk seen at toplevel
[332] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_GU5F/347c261ec4135a5723bef5c751f5078f_310092.utf8, line 328, warning: 6 characters of junk seen at toplevel
[332] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_GU5F/347c261ec4135a5723bef5c751f5078f_310092.utf8, line 337, warning: 6 characters of junk seen at toplevel
[332] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_GU5F/347c261ec4135a5723bef5c751f5078f_310092.utf8, line 400, warning: 6 characters of junk seen at toplevel
[332] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_GU5F/347c261ec4135a5723bef5c751f5078f_310092.utf8, line 419, warning: 6 characters of junk seen at toplevel
[332] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_GU5F/347c261ec4135a5723bef5c751f5078f_310092.utf8, line 428, warning: 6 characters of junk seen at toplevel
[332] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_GU5F/347c261ec4135a5723bef5c751f5078f_310092.utf8, line 437, warning: 6 characters of junk seen at toplevel
[333] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_GU5F/347c261ec4135a5723bef5c751f5078f_310092.utf8, line 456, warning: 6 characters of junk seen at toplevel
[333] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_GU5F/347c261ec4135a5723bef5c751f5078f_310092.utf8, line 491, warning: 6 characters of junk seen at toplevel
[333] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_GU5F/347c261ec4135a5723bef5c751f5078f_310092.utf8, line 526, warning: 6 characters of junk seen at toplevel
[333] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_GU5F/347c261ec4135a5723bef5c751f5078f_310092.utf8, line 535, warning: 6 characters of junk seen at toplevel
[333] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_GU5F/347c261ec4135a5723bef5c751f5078f_310092.utf8, line 556, warning: 6 characters of junk seen at toplevel
[333] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_GU5F/347c261ec4135a5723bef5c751f5078f_310092.utf8, line 565, warning: 6 characters of junk seen at toplevel
[333] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_GU5F/347c261ec4135a5723bef5c751f5078f_310092.utf8, line 576, warning: 6 characters of junk seen at toplevel
[333] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_GU5F/347c261ec4135a5723bef5c751f5078f_310092.utf8, line 587, warning: 6 characters of junk seen at toplevel
[333] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_GU5F/347c261ec4135a5723bef5c751f5078f_310092.utf8, line 619, warning: 6 characters of junk seen at toplevel
[333] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_GU5F/347c261ec4135a5723bef5c751f5078f_310092.utf8, line 648, warning: 6 characters of junk seen at toplevel
[333] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_GU5F/347c261ec4135a5723bef5c751f5078f_310092.utf8, line 658, warning: 6 characters of junk seen at toplevel
[333] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_GU5F/347c261ec4135a5723bef5c751f5078f_310092.utf8, line 667, warning: 6 characters of junk seen at toplevel
[333] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_GU5F/347c261ec4135a5723bef5c751f5078f_310092.utf8, line 688, warning: 6 characters of junk seen at toplevel
[333] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_GU5F/347c261ec4135a5723bef5c751f5078f_310092.utf8, line 709, warning: 6 characters of junk seen at toplevel
[333] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_GU5F/347c261ec4135a5723bef5c751f5078f_310092.utf8, line 720, warning: 6 characters of junk seen at toplevel
[333] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_GU5F/347c261ec4135a5723bef5c751f5078f_310092.utf8, line 729, warning: 6 characters of junk seen at toplevel
[333] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_GU5F/347c261ec4135a5723bef5c751f5078f_310092.utf8, line 749, warning: 6 characters of junk seen at toplevel
[333] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_GU5F/347c261ec4135a5723bef5c751f5078f_310092.utf8, line 766, warning: 6 characters of junk seen at toplevel
[333] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_GU5F/347c261ec4135a5723bef5c751f5078f_310092.utf8, line 775, warning: 6 characters of junk seen at toplevel
[333] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_GU5F/347c261ec4135a5723bef5c751f5078f_310092.utf8, line 800, warning: 6 characters of junk seen at toplevel
[333] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_GU5F/347c261ec4135a5723bef5c751f5078f_310092.utf8, line 817, warning: 6 characters of junk seen at toplevel
[333] Biber.pm:133> INFO - WARNINGS: 55
[36] biber:340> INFO - === Fr Mai 8, 2026, 16:13:05
[44] Biber.pm:419> INFO - Reading 'main.bcf'
[73] Biber.pm:979> INFO - Found 55 citekeys in bib section 0
[78] Biber.pm:4419> INFO - Processing section 0
[83] Biber.pm:4610> INFO - Looking for bibtex file 'cite.bib' for section 0
[85] bibtex.pm:1713> INFO - LaTeX decoding ...
[115] bibtex.pm:1519> INFO - Found BibTeX data source 'cite.bib'
[289] UCollate.pm:68> INFO - Overriding locale 'en-US' defaults 'variable = shifted' with 'variable = non-ignorable'
[289] UCollate.pm:68> INFO - Overriding locale 'en-US' defaults 'normalization = NFD' with 'normalization = prenormalized'
[289] Biber.pm:4239> INFO - Sorting list 'nyt/global//global/global' of type 'entry' with template 'nyt' and locale 'en-US'
[289] Biber.pm:4245> INFO - No sort tailoring available for locale 'en-US'
[312] bbl.pm:660> INFO - Writing 'main.bbl' with encoding 'UTF-8'
[322] bbl.pm:763> INFO - Output to main.bbl
[322] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_CkNb/347c261ec4135a5723bef5c751f5078f_133518.utf8, line 10, warning: 6 characters of junk seen at toplevel
[322] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_CkNb/347c261ec4135a5723bef5c751f5078f_133518.utf8, line 21, warning: 6 characters of junk seen at toplevel
[322] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_CkNb/347c261ec4135a5723bef5c751f5078f_133518.utf8, line 38, warning: 6 characters of junk seen at toplevel
[322] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_CkNb/347c261ec4135a5723bef5c751f5078f_133518.utf8, line 49, warning: 6 characters of junk seen at toplevel
[322] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_CkNb/347c261ec4135a5723bef5c751f5078f_133518.utf8, line 58, warning: 6 characters of junk seen at toplevel
[322] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_CkNb/347c261ec4135a5723bef5c751f5078f_133518.utf8, line 73, warning: 6 characters of junk seen at toplevel
[322] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_CkNb/347c261ec4135a5723bef5c751f5078f_133518.utf8, line 82, warning: 6 characters of junk seen at toplevel
[322] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_CkNb/347c261ec4135a5723bef5c751f5078f_133518.utf8, line 91, warning: 6 characters of junk seen at toplevel
[322] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_CkNb/347c261ec4135a5723bef5c751f5078f_133518.utf8, line 100, warning: 6 characters of junk seen at toplevel
[322] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_CkNb/347c261ec4135a5723bef5c751f5078f_133518.utf8, line 109, warning: 6 characters of junk seen at toplevel
[322] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_CkNb/347c261ec4135a5723bef5c751f5078f_133518.utf8, line 118, warning: 6 characters of junk seen at toplevel
[322] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_CkNb/347c261ec4135a5723bef5c751f5078f_133518.utf8, line 127, warning: 6 characters of junk seen at toplevel
[322] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_CkNb/347c261ec4135a5723bef5c751f5078f_133518.utf8, line 136, warning: 6 characters of junk seen at toplevel
[322] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_CkNb/347c261ec4135a5723bef5c751f5078f_133518.utf8, line 157, warning: 6 characters of junk seen at toplevel
[322] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_CkNb/347c261ec4135a5723bef5c751f5078f_133518.utf8, line 178, warning: 6 characters of junk seen at toplevel
[322] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_CkNb/347c261ec4135a5723bef5c751f5078f_133518.utf8, line 187, warning: 6 characters of junk seen at toplevel
[322] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_CkNb/347c261ec4135a5723bef5c751f5078f_133518.utf8, line 196, warning: 6 characters of junk seen at toplevel
[322] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_CkNb/347c261ec4135a5723bef5c751f5078f_133518.utf8, line 207, warning: 6 characters of junk seen at toplevel
[322] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_CkNb/347c261ec4135a5723bef5c751f5078f_133518.utf8, line 218, warning: 6 characters of junk seen at toplevel
[322] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_CkNb/347c261ec4135a5723bef5c751f5078f_133518.utf8, line 229, warning: 6 characters of junk seen at toplevel
[322] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_CkNb/347c261ec4135a5723bef5c751f5078f_133518.utf8, line 240, warning: 6 characters of junk seen at toplevel
[322] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_CkNb/347c261ec4135a5723bef5c751f5078f_133518.utf8, line 249, warning: 6 characters of junk seen at toplevel
[322] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_CkNb/347c261ec4135a5723bef5c751f5078f_133518.utf8, line 258, warning: 6 characters of junk seen at toplevel
[322] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_CkNb/347c261ec4135a5723bef5c751f5078f_133518.utf8, line 269, warning: 6 characters of junk seen at toplevel
[322] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_CkNb/347c261ec4135a5723bef5c751f5078f_133518.utf8, line 278, warning: 6 characters of junk seen at toplevel
[322] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_CkNb/347c261ec4135a5723bef5c751f5078f_133518.utf8, line 289, warning: 6 characters of junk seen at toplevel
[322] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_CkNb/347c261ec4135a5723bef5c751f5078f_133518.utf8, line 300, warning: 6 characters of junk seen at toplevel
[322] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_CkNb/347c261ec4135a5723bef5c751f5078f_133518.utf8, line 309, warning: 6 characters of junk seen at toplevel
[322] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_CkNb/347c261ec4135a5723bef5c751f5078f_133518.utf8, line 328, warning: 6 characters of junk seen at toplevel
[322] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_CkNb/347c261ec4135a5723bef5c751f5078f_133518.utf8, line 337, warning: 6 characters of junk seen at toplevel
[322] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_CkNb/347c261ec4135a5723bef5c751f5078f_133518.utf8, line 400, warning: 6 characters of junk seen at toplevel
[322] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_CkNb/347c261ec4135a5723bef5c751f5078f_133518.utf8, line 419, warning: 6 characters of junk seen at toplevel
[322] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_CkNb/347c261ec4135a5723bef5c751f5078f_133518.utf8, line 428, warning: 6 characters of junk seen at toplevel
[322] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_CkNb/347c261ec4135a5723bef5c751f5078f_133518.utf8, line 437, warning: 6 characters of junk seen at toplevel
[322] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_CkNb/347c261ec4135a5723bef5c751f5078f_133518.utf8, line 456, warning: 6 characters of junk seen at toplevel
[322] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_CkNb/347c261ec4135a5723bef5c751f5078f_133518.utf8, line 491, warning: 6 characters of junk seen at toplevel
[322] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_CkNb/347c261ec4135a5723bef5c751f5078f_133518.utf8, line 526, warning: 6 characters of junk seen at toplevel
[322] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_CkNb/347c261ec4135a5723bef5c751f5078f_133518.utf8, line 535, warning: 6 characters of junk seen at toplevel
[322] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_CkNb/347c261ec4135a5723bef5c751f5078f_133518.utf8, line 556, warning: 6 characters of junk seen at toplevel
[322] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_CkNb/347c261ec4135a5723bef5c751f5078f_133518.utf8, line 565, warning: 6 characters of junk seen at toplevel
[322] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_CkNb/347c261ec4135a5723bef5c751f5078f_133518.utf8, line 576, warning: 6 characters of junk seen at toplevel
[322] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_CkNb/347c261ec4135a5723bef5c751f5078f_133518.utf8, line 587, warning: 6 characters of junk seen at toplevel
[322] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_CkNb/347c261ec4135a5723bef5c751f5078f_133518.utf8, line 619, warning: 6 characters of junk seen at toplevel
[322] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_CkNb/347c261ec4135a5723bef5c751f5078f_133518.utf8, line 648, warning: 6 characters of junk seen at toplevel
[322] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_CkNb/347c261ec4135a5723bef5c751f5078f_133518.utf8, line 658, warning: 6 characters of junk seen at toplevel
[322] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_CkNb/347c261ec4135a5723bef5c751f5078f_133518.utf8, line 667, warning: 6 characters of junk seen at toplevel
[322] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_CkNb/347c261ec4135a5723bef5c751f5078f_133518.utf8, line 688, warning: 6 characters of junk seen at toplevel
[322] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_CkNb/347c261ec4135a5723bef5c751f5078f_133518.utf8, line 709, warning: 6 characters of junk seen at toplevel
[323] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_CkNb/347c261ec4135a5723bef5c751f5078f_133518.utf8, line 720, warning: 6 characters of junk seen at toplevel
[323] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_CkNb/347c261ec4135a5723bef5c751f5078f_133518.utf8, line 729, warning: 6 characters of junk seen at toplevel
[323] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_CkNb/347c261ec4135a5723bef5c751f5078f_133518.utf8, line 749, warning: 6 characters of junk seen at toplevel
[323] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_CkNb/347c261ec4135a5723bef5c751f5078f_133518.utf8, line 766, warning: 6 characters of junk seen at toplevel
[323] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_CkNb/347c261ec4135a5723bef5c751f5078f_133518.utf8, line 775, warning: 6 characters of junk seen at toplevel
[323] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_CkNb/347c261ec4135a5723bef5c751f5078f_133518.utf8, line 800, warning: 6 characters of junk seen at toplevel
[323] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_CkNb/347c261ec4135a5723bef5c751f5078f_133518.utf8, line 817, warning: 6 characters of junk seen at toplevel
[323] Biber.pm:133> INFO - WARNINGS: 55

View File

@@ -1,14 +1,14 @@
# Fdb version 4
["biber main"] 1778167064.11549 "main.bcf" "main.bbl" "main" 1778170419.19465 0
["biber main"] 1778249584.73083 "main.bcf" "main.bbl" "main" 1778257261.51344 0
"cite.bib" 1770904753.08918 27483 4290db0c91f7b5055e25472ef913f6b4 ""
"main.bcf" 1778170419.12045 112931 2a478116d80ebb1ada7083a24facd6e3 "pdflatex"
"main.bcf" 1778257261.43428 112931 2a478116d80ebb1ada7083a24facd6e3 "pdflatex"
(generated)
"main.bbl"
"main.blg"
(rewritten before read)
["pdflatex"] 1778170418.0584 "/home/hartling/phd/paper/paper_2025/main.tex" "main.pdf" "main" 1778170419.19487 0
["pdflatex"] 1778257260.44085 "/home/hartling/phd/paper/paper_2025/main.tex" "main.pdf" "main" 1778257261.51364 0
"/etc/texmf/web2c/texmf.cnf" 1761560044.43676 475 c0e671620eb5563b2130f56340a5fde8 ""
"/home/hartling/phd/paper/paper_2025/main.tex" 1778170417.91947 85421 7d6468de7ebe30036ecfa040f5dc165b ""
"/home/hartling/phd/paper/paper_2025/main.tex" 1778250173.99731 87264 c78c20cbcdfd59418334f0ac9961ac09 ""
"/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 ""
@@ -157,7 +157,7 @@
"figures/fig_feat_stages.pdf" 1777568594.52063 11308299 aa000e352d557e9395028dd7235cf375 ""
"figures/fig_features_cross_species.pdf" 1778167576.33731 206101 cd143cc5c7c8c6d10323b077f6d09274 ""
"figures/fig_invariance_cross_species_thresh_appendix.pdf" 1777568946.883 302422 5f33b50142db8b69ae9735c4aa8be688 ""
"figures/fig_invariance_field.pdf" 1776952657.04263 9131898 e9d9acff1d03fdf60ddc9e32b87ae6c2 ""
"figures/fig_invariance_field.pdf" 1778257229.75153 3436718 f30684109d769ce7cb7aaed658bab25e ""
"figures/fig_invariance_full_Omocestus_rufipes.pdf" 1777914919.48322 4817854 489437547b91e2c147d390725d05c6bd ""
"figures/fig_invariance_log-hp_appendix.pdf" 1777378237.41292 537850 039c3b97fa1196f939cb46c7124692c2 ""
"figures/fig_invariance_log_hp.pdf" 1777397498.84496 856466 80c2296c4244a5028c5680207c983431 ""
@@ -175,10 +175,10 @@
"figures/fig_noise_env_sd_conversion_appendix.pdf" 1776328774.43347 45466 c2be20312c1572203bdbeb9c8e32525e ""
"figures/fig_pre_stages.pdf" 1777568592.25966 441645 7231cde61e83c7ce28a9e6cfaceac8d3 ""
"figures/fig_saturation_log-hp_appendix.pdf" 1777378621.26288 28579 137855d03bab8dc5f6d31b70d404e082 ""
"main.aux" 1778170419.11345 26035 768c445b960ba491486f92ae60247ec7 "pdflatex"
"main.bbl" 1778167064.78898 91039 1380dc8c93d2855fdb132cc5a40ad52f "biber main"
"main.run.xml" 1778170419.12045 2335 a049bc26a7f032e842ce55de5bc38328 "pdflatex"
"main.tex" 1778170417.91947 85421 7d6468de7ebe30036ecfa040f5dc165b ""
"main.aux" 1778257261.42828 27229 6f35645a5ecae9625bd23189e02df787 "pdflatex"
"main.bbl" 1778249585.35035 91039 1380dc8c93d2855fdb132cc5a40ad52f "biber main"
"main.run.xml" 1778257261.43528 2335 a049bc26a7f032e842ce55de5bc38328 "pdflatex"
"main.tex" 1778250173.99731 87264 c78c20cbcdfd59418334f0ac9961ac09 ""
(generated)
"main.aux"
"main.bcf"

View File

@@ -323,12 +323,12 @@ INPUT ./figures/fig_invariance_field.pdf
INPUT ./figures/fig_invariance_field.pdf
INPUT ./figures/fig_invariance_field.pdf
INPUT ./figures/fig_invariance_field.pdf
INPUT ./figures/fig_features_cross_species.pdf
INPUT ./figures/fig_features_cross_species.pdf
INPUT ./figures/fig_features_cross_species.pdf
INPUT ./figures/fig_features_cross_species.pdf
INPUT ./figures/fig_features_cross_species.pdf
INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/cm/cmti10.tfm
INPUT ./figures/fig_features_cross_species.pdf
INPUT ./figures/fig_features_cross_species.pdf
INPUT ./figures/fig_features_cross_species.pdf
INPUT ./figures/fig_features_cross_species.pdf
INPUT ./figures/fig_features_cross_species.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

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) 7 MAY 2026 18:13
This is pdfTeX, Version 3.141592653-2.6-1.40.25 (TeX Live 2023/Debian) (preloaded format=pdflatex 2025.10.28) 8 MAY 2026 18:21
entering extended mode
restricted \write18 enabled.
file:line:error style messages enabled.
@@ -815,86 +815,93 @@ Package pdftex.def Info: figures/fig_invariance_short_Omocestus_rufipes.pdf use
<figures/fig_invariance_field.pdf, id=1733, 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 1242.
Package pdftex.def Info: figures/fig_invariance_field.pdf used on input line 1246.
(pdftex.def) Requested size: 483.69687pt x 483.69566pt.
[27
<./figures/fig_invariance_field.pdf>]
<figures/fig_features_cross_species.pdf, id=1803, 910.48819pt x 910.48819pt>
]
LaTeX Warning: Text page 28 contains only floats.
Overfull \vbox (7.05988pt too high) has occurred while \output is active []
[28 <./figures/fig_invariance_field.pdf>]
<figures/fig_features_cross_species.pdf, id=1824, 910.48819pt x 910.48819pt>
File: figures/fig_features_cross_species.pdf Graphic file (type pdf)
<use figures/fig_features_cross_species.pdf>
Package pdftex.def Info: figures/fig_features_cross_species.pdf used on input line 1295.
Package pdftex.def Info: figures/fig_features_cross_species.pdf used on input line 1322.
(pdftex.def) Requested size: 483.69687pt x 483.69566pt.
[28]
[29]
LaTeX Warning: Text page 29 contains only floats.
LaTeX Warning: Text page 30 contains only floats.
[29 <./figures/fig_features_cross_species.pdf>]
[30 <./figures/fig_features_cross_species.pdf>]
LaTeX Warning: Reference `eq:toy_snr' on page 30 undefined on input line 1352.
LaTeX Warning: Reference `eq:toy_snr' on page 31 undefined on input line 1379.
[30]
<figures/fig_noise_env_sd_conversion_appendix.pdf, id=1878, 910.48819pt x 455.2441pt>
[31]
<figures/fig_noise_env_sd_conversion_appendix.pdf, id=1899, 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 1384.
Package pdftex.def Info: figures/fig_noise_env_sd_conversion_appendix.pdf used on input line 1411.
(pdftex.def) Requested size: 483.69687pt x 241.84782pt.
<figures/fig_invariance_rect-lp_appendix.pdf, id=1879, 910.48819pt x 455.2441pt>
<figures/fig_invariance_rect-lp_appendix.pdf, id=1900, 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 1393.
Package pdftex.def Info: figures/fig_invariance_rect-lp_appendix.pdf used on input line 1420.
(pdftex.def) Requested size: 483.69687pt x 241.84782pt.
[31 <./figures/fig_noise_env_sd_conversion_appendix.pdf>]
<figures/fig_invariance_log-hp_appendix.pdf, id=1942, 910.48819pt x 455.2441pt>
[32 <./figures/fig_noise_env_sd_conversion_appendix.pdf>]
<figures/fig_invariance_log-hp_appendix.pdf, id=1962, 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 1402.
Package pdftex.def Info: figures/fig_invariance_log-hp_appendix.pdf used on input line 1429.
(pdftex.def) Requested size: 483.69687pt x 241.84782pt.
<figures/fig_saturation_log-hp_appendix.pdf, id=1943, 910.48819pt x 455.2441pt>
<figures/fig_saturation_log-hp_appendix.pdf, id=1963, 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 1411.
Package pdftex.def Info: figures/fig_saturation_log-hp_appendix.pdf used on input line 1438.
(pdftex.def) Requested size: 483.69687pt x 241.84782pt.
[32 <./figures/fig_invariance_rect-lp_appendix.pdf> <./figures/fig_invariance_log-hp_appendix.pdf>]
<figures/fig_invariance_thresh-lp_pure_appendix.pdf, id=2071, 910.48819pt x 455.2441pt>
[33 <./figures/fig_invariance_rect-lp_appendix.pdf> <./figures/fig_invariance_log-hp_appendix.pdf>]
<figures/fig_invariance_thresh-lp_pure_appendix.pdf, id=2091, 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 1420.
Package pdftex.def Info: figures/fig_invariance_thresh-lp_pure_appendix.pdf used on input line 1447.
(pdftex.def) Requested size: 483.69687pt x 241.84782pt.
<figures/fig_invariance_thresh-lp_noise_appendix.pdf, id=2072, 910.48819pt x 455.2441pt>
<figures/fig_invariance_thresh-lp_noise_appendix.pdf, id=2092, 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 1429.
Package pdftex.def Info: figures/fig_invariance_thresh-lp_noise_appendix.pdf used on input line 1456.
(pdftex.def) Requested size: 483.69687pt x 241.84782pt.
[33 <./figures/fig_saturation_log-hp_appendix.pdf> <./figures/fig_invariance_thresh-lp_pure_appendix.pdf>]
<figures/fig_kernel_sd_perc_thresh_lp_appendix.pdf, id=2197, 910.48819pt x 455.2441pt>
[34 <./figures/fig_saturation_log-hp_appendix.pdf> <./figures/fig_invariance_thresh-lp_pure_appendix.pdf>]
<figures/fig_kernel_sd_perc_thresh_lp_appendix.pdf, id=2217, 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 1438.
Package pdftex.def Info: figures/fig_kernel_sd_perc_thresh_lp_appendix.pdf used on input line 1465.
(pdftex.def) Requested size: 483.69687pt x 241.84782pt.
<figures/fig_kernel_sd_perc_full_appendix.pdf, id=2198, 910.48819pt x 455.2441pt>
<figures/fig_kernel_sd_perc_full_appendix.pdf, id=2218, 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 1447.
Package pdftex.def Info: figures/fig_kernel_sd_perc_full_appendix.pdf used on input line 1474.
(pdftex.def) Requested size: 483.69687pt x 241.84782pt.
[34 <./figures/fig_invariance_thresh-lp_noise_appendix.pdf> <./figures/fig_kernel_sd_perc_thresh_lp_appendix.pdf>]
<figures/fig_kernel_sd_perc_short_appendix.pdf, id=2306, 910.48819pt x 455.2441pt>
[35 <./figures/fig_invariance_thresh-lp_noise_appendix.pdf> <./figures/fig_kernel_sd_perc_thresh_lp_appendix.pdf>]
<figures/fig_kernel_sd_perc_short_appendix.pdf, id=2326, 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 1456.
Package pdftex.def Info: figures/fig_kernel_sd_perc_short_appendix.pdf used on input line 1483.
(pdftex.def) Requested size: 483.69687pt x 241.84782pt.
<figures/fig_kernel_sd_perc_field_appendix.pdf, id=2307, 910.48819pt x 455.2441pt>
<figures/fig_kernel_sd_perc_field_appendix.pdf, id=2327, 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 1465.
Package pdftex.def Info: figures/fig_kernel_sd_perc_field_appendix.pdf used on input line 1492.
(pdftex.def) Requested size: 483.69687pt x 241.84782pt.
[35 <./figures/fig_kernel_sd_perc_full_appendix.pdf> <./figures/fig_kernel_sd_perc_short_appendix.pdf>]
<figures/fig_invariance_cross_species_thresh_appendix.pdf, id=2393, 910.48819pt x 910.48819pt>
[36 <./figures/fig_kernel_sd_perc_full_appendix.pdf> <./figures/fig_kernel_sd_perc_short_appendix.pdf>]
<figures/fig_invariance_cross_species_thresh_appendix.pdf, id=2413, 910.48819pt x 910.48819pt>
File: figures/fig_invariance_cross_species_thresh_appendix.pdf Graphic file (type pdf)
<use figures/fig_invariance_cross_species_thresh_appendix.pdf>
Package pdftex.def Info: figures/fig_invariance_cross_species_thresh_appendix.pdf used on input line 1475.
Package pdftex.def Info: figures/fig_invariance_cross_species_thresh_appendix.pdf used on input line 1502.
(pdftex.def) Requested size: 483.69687pt x 483.69566pt.
[36 <./figures/fig_kernel_sd_perc_field_appendix.pdf>] [37 <./figures/fig_invariance_cross_species_thresh_appendix.pdf>] (./main.aux)
[37 <./figures/fig_kernel_sd_perc_field_appendix.pdf>] [38 <./figures/fig_invariance_cross_species_thresh_appendix.pdf>] (./main.aux)
***********
LaTeX2e <2023-11-01> patch level 1
L3 programming layer <2024-01-22>
@@ -914,12 +921,12 @@ Here is how much of TeX's memory you used:
42869 multiletter control sequences out of 15000+600000
569740 words of font info for 80 fonts, out of 8000000 for 9000
1143 hyphenation exceptions out of 8191
94i,18n,93p,1751b,1738s stack positions out of 10000i,1000n,20000p,200000b,200000s
94i,18n,93p,1747b,1738s 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/cmti10.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 (37 pages, 39250039 bytes).
Output written on main.pdf (38 pages, 33556448 bytes).
PDF statistics:
2584 PDF objects out of 2984 (max. 8388607)
1147 compressed objects within 12 object streams
2604 PDF objects out of 2984 (max. 8388607)
1153 compressed objects within 12 object streams
0 named destinations out of 1000 (max. 500000)
123 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

@@ -1120,7 +1120,7 @@ in principle, work together towards an intensity-invariant song representation.
\centering
\includegraphics[width=\textwidth]{figures/fig_invariance_full_Omocestus_rufipes.pdf}
\caption{\textbf{Step-wise emergence of intensity-invariant song
representation along the full model pathway.}
representations along the model pathway.}
Input $\raw(t)$ consists of song component $\soc(t)$
scaled by $\sca$ with added noise component $\noc(t)$ and
is processed up to the feature set $f_i(t)$. Different
@@ -1201,9 +1201,8 @@ guaranteed simply by disabling logarithmic compression.
\begin{figure}[!ht]
\centering
\includegraphics[width=\textwidth]{figures/fig_invariance_short_Omocestus_rufipes.pdf}
\caption{\textbf{Step-wise emergence of intensity invariant song
representation along the model pathway without logarithmic
compression.}
\caption{\textbf{Effects of disabling logarithmic compression on intensity
invariance along the model pathway.}
Input $\raw(t)$ consists of song component $\soc(t)$
scaled by $\sca$ with added noise component $\noc(t)$ and
is processed up to the feature set $f_i(t)$, skipping
@@ -1235,13 +1234,41 @@ guaranteed simply by disabling logarithmic compression.
\end{figure}
\FloatBarrier
\subsubsection{Field data}
\subsubsection{Intensity invariance in a naturalistic setting}
So far, the analyses on intensity invariance were based on synthetically
generated input signals, since these allow for a systematic manipulation of
the mixture of song component $\soc(t)$ and noise component $\noc(t)$ over
an arbitrary range of scales $\sca$.
\begin{figure}[!ht]
\centering
\includegraphics[width=\textwidth]{figures/fig_invariance_field.pdf}
\caption{\textbf{Step-wise emergence of intensity invariant song
representation along the model pathway.}
\caption{\textbf{Intensity invariance along the model pathway in a
naturalistic setting.}
Input $\raw(t)$ consists of a song of \textit{P.
parallelus} recorded in the field at eight different
distances $d$ and is processed up to the feature set
$f_i(t)$. Different color shades indicate different types
of Gabor kernels with specific lobe number $\kn$ and
either $+$ or $-$ sign, sorted (dark to light) first by
increasing $\kn$ and then by
sign~($1\,\leq\,\kn\,\leq\,4$; first $+$, then $-$ for
each $\kn$; five kernel widths $\kw$ of 1, 2, 4, 8, and
$16\,$ms per type; 8 types, 40 kernels in total).
\textbf{a}:~$\filt(t)$, $\env(t)$, $\db(t)$, $\adapt(t)$,
$c_i(t)$, and $f_i(t)$ at each $d$. A noise segment from
the same recording is shown for reference.
\textbf{b}:~Intensity metrics over $d$. For $c_i(t)$
and $f_i(t)$, the median over kernels is shown.
\textbf{c}:~Average value $\mu_{f_i}$ of each feature
$f_i(t)$ over $d$.
\textbf{d}:~Ratios of intensity metrics to the respective
value obtained from the noise reference. For $c_i(t)$ and
$f_i(t)$, the median over kernel-specific ratios is shown.
\textbf{e}:~Ratios of standard deviation $\sigma_{c_i}$ of
each $c_i(t)$.
\textbf{f}:~Ratios of $\mu_{f_i}$.
}
\label{fig:pipeline_field}
\end{figure}

View File

@@ -5,11 +5,10 @@ from itertools import product
from thunderhopper.filetools import search_files
from thunderhopper.modeltools import load_data
from thunderhopper.filtertools import find_kern_specs
from misc_functions import get_saturation, reduce_kernel_set, exclude_zero_scale,\
divide_by_zero, x_dist, y_dist
from misc_functions import reduce_kernel_set, divide_by_zero, y_dist
from color_functions import load_colors
from plot_functions import hide_axis, reorder_by_sd, ylimits, super_xlabel, ylabel, title_subplot,\
plot_line, strip_zeros, time_bar, assign_colors,\
plot_line, xlabel, time_bar, assign_colors,\
letter_subplot, letter_subplots, hide_ticks
from IPython import embed
@@ -21,12 +20,12 @@ def plot_snippets(axes, time, snippets, ymin=None, ymax=None, **kwargs):
ymin=ymin, ymax=ymax, **kwargs))
return handles
def plot_curves(ax, scales, measures, **kwargs):
def plot_curves(ax, distances, measures, **kwargs):
if measures.ndim == 1:
handles = ax.plot(scales, measures, **kwargs)
handles = ax.plot(distances, measures, **kwargs)
return handles, measures
median_measure = np.nanmedian(measures, axis=1)
line_handle = ax.plot(scales, median_measure, **kwargs)[0]
line_handle = ax.plot(distances, median_measure, **kwargs)[0]
return line_handle, median_measure
def crop_noise_snippets(snippets, nin, nout, stages=['filt', 'env', 'log', 'inv', 'conv', 'feat']):
@@ -43,17 +42,17 @@ search_target = 'Pseudochorthippus_parallelus'
stages = ['filt', 'env', 'log', 'inv', 'conv', 'feat']
song_example = 'Pseudochorthippus_parallelus_micarray-short_JJ_20240815T160355-20240815T160755-1m10s690ms-1m13s614ms'
noise_example = 'merged_noise'
song_path = '../data/inv/field/song/'
noise_path = '../data/inv/field/noise/'
raw_path = search_files(search_target, incl='unnormed', dir=song_path + 'condensed/')[0]
base_path = search_files(search_target, incl='base', dir=song_path + 'condensed/')[0]
range_path = search_files(search_target, incl='range', dir=song_path + 'condensed/')[0]
song_snip_path = search_files(song_example, dir=song_path)[0]
noise_snip_path = search_files(noise_example, dir=noise_path)[0]
song_path = search_files(song_example, dir='../data/inv/field/song/')[0]
noise_path = search_files(noise_example, dir='../data/inv/field/noise/')[0]
save_path = '../figures/fig_invariance_field.pdf'
# ANALYSIS SETTINGS:
offset_distance = 10 # centimeter
thresh_rel = np.array([0, 0.5, 1, 1.5, 2, 2.5, 3])[4]
kern_subset_kwargs = dict(
combis=[['measure', 'snip'], ['conv', 'feat']],
keys=['thresh_abs'],
)
# SUBSET SETTINGS:
types = np.array([1, -1, 2, -2, 3, -3, 4, -4])
@@ -69,39 +68,53 @@ fig_kwargs = dict(
)
super_grid_kwargs = dict(
nrows=2,
ncols=1,
ncols=2,
wspace=0,
hspace=0,
left=0,
right=1,
bottom=0,
top=1,
height_ratios=[3, 2]
height_ratios=[1, 1]
)
subfig_specs = dict(
snip=(0, 0),
big=(1, 0),
snip=(0, slice(None)),
raw=(1, 0),
base=(1, 1),
)
snip_grid_kwargs = dict(
nrows=len(stages),
ncols=None,
wspace=0.1,
hspace=0.4,
left=0.11,
left=0.13,
right=0.98,
bottom=0.08,
bottom=0.05,
top=0.95
)
big_grid_kwargs = dict(
nrows=1,
ncols=3,
wspace=0.4,
hspace=0,
left=snip_grid_kwargs['left'],
right=snip_grid_kwargs['right'],
bottom=0.13,
top=0.98
raw_grid_kwargs = dict(
nrows=2,
ncols=1,
wspace=0,
hspace=0.15,
left=0.14,
right=0.9,
bottom=0.25,
top=0.95,
height_ratios=[0.8, 0.2]
)
base_grid_kwargs = dict(
nrows=3,
ncols=1,
wspace=0,
hspace=0.25,
left=raw_grid_kwargs['left'],
right=raw_grid_kwargs['right'],
bottom=raw_grid_kwargs['bottom'],
top=raw_grid_kwargs['top'],
)
inset_dist_bounds = [1.01, 0, 0.95, 1]
inset_ax_bounds = [raw_grid_kwargs['left'], 0.1, raw_grid_kwargs['right'] - raw_grid_kwargs['left'], 0.01]
# PLOT SETTINGS:
fs = dict(
@@ -112,9 +125,11 @@ fs = dict(
tit_tex=20,
bar=16,
)
colors = load_colors('../data/stage_colors.npz')
conv_colors = load_colors('../data/conv_colors_all.npz')
feat_colors = load_colors('../data/feat_colors_all.npz')
stage_colors = load_colors('../data/stage_colors.npz')
kern_colors = dict(
conv=load_colors('../data/conv_colors_subset.npz'),
feat=load_colors('../data/feat_colors_subset.npz')
)
lw = dict(
filt=0.25,
env=0.25,
@@ -122,11 +137,14 @@ lw = dict(
inv=0.25,
conv=0.25,
feat=1,
big=3,
plateau=1.5,
single=3,
swarm=1,
legend=5,
dist=1
)
xlabels = dict(
big='distance [cm]',
high='$1\\,/\\,d\\,\\sim\\,\\alpha$ [cm$^{-1}$]',
low='distance $d$ [cm]',
)
ylabels = dict(
filt='$x_{\\text{filt}}$\n$[\\text{a.u.}]$',
@@ -135,33 +153,41 @@ ylabels = dict(
inv='$x_{\\text{adapt}}$\n$[\\text{dB}]$',
conv='$c_i$\n$[\\text{dB}]$',
feat='$f_i$',
big=['measure', 'rel. measure', 'norm. measure']
raw=['$m$', '$\\mu_{f_i}$'],
base=['$m\\,/\\,m_{\\eta}$', '$\\sigma_{c_i}\\,/\\,\\sigma_{\\eta_i}$', '$\\mu_{f_i}\\,/\\,\\mu_{\\eta_i}$']
)
xlab_big_kwargs = dict(
xlab_high_kwargs = dict(
y=0.15,
fontsize=fs['lab_norm'],
ha='center',
va='bottom',
)
xlab_low_kwargs = dict(
y=0,
fontsize=fs['lab_norm'],
ha='center',
va='bottom',
)
ylab_snip_kwargs = dict(
x=0,
x=0.03,
fontsize=fs['lab_tex'],
rotation=0,
ha='left',
va='center'
ha='center',
va='center',
ma='center'
)
ylab_big_kwargs = dict(
x=-0.2,
x=0,
fontsize=fs['lab_norm'],
ha='center',
va='bottom',
va='top',
)
yloc = dict(
filt=0.03,
env=0.01,
filt=300,
env=100,
log=50,
inv=20,
conv=1,
conv=0.5,
feat=1,
)
title_kwargs = dict(
@@ -179,7 +205,7 @@ letter_snip_kwargs = dict(
fontsize=fs['letter'],
)
letter_big_kwargs = dict(
x=0,
xref=0,
y=1,
ha='left',
va='bottom',
@@ -206,49 +232,64 @@ noise_bar_time = 0.5
noise_bar_kwargs = song_bar_kwargs.copy()
noise_bar_kwargs['dur'] = noise_bar_time
noise_bar_kwargs['text_str'] = f'${int(1000 * noise_bar_time)}\\,\\text{{ms}}$'
plateau_settings = dict(
low=0.05,
high=0.95,
first=True,
last=True,
condense=None,
leg_labels = dict(
filt='$x_{\\text{filt}}$',
env='$x_{\\text{env}}$',
log='$x_{\\text{log}}$',
inv='$x_{\\text{adapt}}$',
conv='$c_i$',
feat='$f_i$'
)
plateau_line_kwargs = dict(
lw=lw['plateau'],
ls='--',
zorder=1,
leg_kwargs = dict(
ncols=3,
loc='upper left',
bbox_to_anchor=(0.025, 0.9, 0.95, 0.1),
frameon=False,
prop=dict(
size=20,
),
borderpad=0,
borderaxespad=0,
handlelength=1,
columnspacing=1,
handletextpad=0.5,
labelspacing=0.1
)
plateau_dot_kwargs = dict(
marker='o',
markersize=8,
markeredgewidth=1,
clip_on=False,
dist_line_kwargs = dict(
lw=lw['dist'],
)
dist_fill_kwargs = dict(
lw=lw['dist'],
)
# EXECUTION:
# Load raw (unnormed) invariance data:
data, config = load_data(raw_path, files='distances', keywords='mean')
dists = data['distances'] + offset_distance
# Load snippet data:
song_snip, _ = load_data(song_snip_path, keywords='snip')
t_song = np.arange(song_snip['snip_filt'].shape[0]) / config['rate']
noise_snip, _ = load_data(noise_snip_path, keywords='snip')
noise_snip = crop_noise_snippets(noise_snip, noise_snip['snip_filt'].shape[0], t_song.size)
t_noise = np.arange(noise_snip['snip_filt'].shape[0]) / config['rate']
# Load song invariance data:
song_data, config = load_data(song_path, files='distances', keywords=['measure', 'snip', 'thresh'])
t_song = np.arange(song_data['snip_filt'].shape[0]) / config['rate']
dists = song_data['distances'] + offset_distance
scales = 1 / dists
snip_dists = ['noise'] + [f'{int(d)}$\\,$cm' for d in dists]
# Optional kernel subset:
reduce_kernels = False
if any(var is not None for var in [kernels, types, sigmas]):
# Load noise invariance data:
noise_data, _ = load_data(noise_path, keywords=['measure', 'snip', 'thresh'])
noise_data = crop_noise_snippets(noise_data, noise_data['snip_filt'].shape[0], t_song.size)
t_noise = np.arange(noise_data['snip_filt'].shape[0]) / config['rate']
# Reduce kernels:
if reduce_kernels:
kern_inds = find_kern_specs(config['k_specs'], kernels, types, sigmas)
data = reduce_kernel_set(data, kern_inds, keyword='mean')
song_snip = reduce_kernel_set(song_snip, kern_inds, keyword='snip')
noise_snip = reduce_kernel_set(noise_snip, kern_inds, keyword='snip')
config['k_specs'] = config['k_specs'][kern_inds, :]
config['kernels'] = config['kernels'][:, kern_inds]
reduce_kernels = True
song_data = reduce_kernel_set(song_data, kern_inds, **kern_subset_kwargs)
noise_data = reduce_kernel_set(noise_data, kern_inds, **kern_subset_kwargs)
# Reduce thresholds:
thresh_ind = np.nonzero(song_data['thresh_rel'] == thresh_rel)[0][0]
song_data['measure_feat'] = song_data['measure_feat'][:, :, thresh_ind]
song_data['snip_feat'] = song_data['snip_feat'][:, :, :, thresh_ind]
noise_data['measure_feat'] = noise_data['measure_feat'][:, :, thresh_ind]
noise_data['snip_feat'] = noise_data['snip_feat'][:, :, :, thresh_ind]
# Adjust grid parameters:
snip_grid_kwargs['ncols'] = len(snip_dists)
@@ -278,136 +319,173 @@ time_bar(snip_axes[-1, -1], **song_bar_kwargs)
# time_bar(snip_axes[-1, 0], **noise_bar_kwargs)
letter_subplot(snip_subfig, 'a', ref=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 in range(big_grid.ncols):
ax = big_subfig.add_subplot(big_grid[0, i])
ax.set_xlim(dists[0], 0)
# ax.set_xscale('symlog', linthresh=offset_distance, linscale=0.5)
ax.set_yscale('symlog', linthresh=0.01, linscale=0.1)
ylabel(ax, ylabels['big'][i], **ylab_big_kwargs)
# if i < (big_grid.ncols - 1):
# ax.set_ylim(scales[0], scales[-1])
# else:
# ax.set_ylim(0, 1)
big_axes[i] = ax
super_xlabel(xlabels['big'], big_subfig, big_axes[0], big_axes[-1], **xlab_big_kwargs)
letter_subplots(big_axes, 'bcd', **letter_big_kwargs)
# Prepare raw analysis axes:
raw_subfig = fig.add_subfigure(super_grid[subfig_specs['raw']])
raw_grid = raw_subfig.add_gridspec(**raw_grid_kwargs)
raw_axes = np.zeros((raw_grid.nrows,), dtype=object)
for i in range(raw_grid.nrows):
ax = raw_subfig.add_subplot(raw_grid[i, 0])
ax.set_xlim(scales[0], scales[-1])
ax.set_xscale('log')
ylabel(ax, ylabels['raw'][i], transform=raw_subfig.transSubfigure, **ylab_big_kwargs)
if i == 0:
ax.set_yscale('symlog', linthresh=0.00001, linscale=0.1)
hide_ticks(ax, 'bottom')
else:
transform = raw_subfig.transSubfigure + ax.transAxes.inverted()
inset_x1 = transform.transform((inset_dist_bounds[2], 0))[0]
inset_dist_bounds[2] = inset_x1 - inset_dist_bounds[0]
raw_inset = ax.inset_axes(inset_dist_bounds)
raw_inset.axis('off')
raw_axes[i] = ax
letter_subplots(raw_axes, 'bc', ref=raw_subfig, **letter_big_kwargs)
xlabel(raw_axes[-1], xlabels['high'], transform=raw_subfig.transSubfigure, **xlab_high_kwargs)
# Prepare base analysis axes:
base_subfig = fig.add_subfigure(super_grid[subfig_specs['base']])
base_grid = base_subfig.add_gridspec(**base_grid_kwargs)
base_axes = np.zeros((base_grid.nrows,), dtype=object)
base_insets = np.zeros((base_grid.nrows - 1,), dtype=object)
for i in range(base_grid.nrows):
ax = base_subfig.add_subplot(base_grid[i, 0])
ax.set_xlim(scales[0], scales[-1])
ax.set_xscale('log')
ax.set_yscale('log')
ylabel(ax, ylabels['base'][i], transform=base_subfig.transSubfigure, **ylab_big_kwargs)
if i < base_grid_kwargs['nrows'] - 1:
hide_ticks(ax, 'bottom')
if i > 0:
inset = ax.inset_axes(inset_dist_bounds)
inset.set_yscale('log')
inset.axis('off')
base_insets[i - 1] = inset
base_axes[i] = ax
letter_subplots(base_axes, 'def', ref=base_subfig, **letter_big_kwargs)
xlabel(base_axes[-1], xlabels['high'], transform=base_subfig.transSubfigure, **xlab_high_kwargs)
if True:
# Plot filtered snippets:
plot_snippets(snip_axes[0, 1:], t_song, song_snip['snip_filt'],
c=colors['filt'], lw=lw['filt'])
plot_line(snip_axes[0, 0], t_noise, noise_snip['snip_filt'][:, 0],
*snip_axes[0, 1].get_ylim(), c=colors['filt'], lw=lw['filt'])
plot_snippets(snip_axes[0, 1:], t_song, song_data['snip_filt'],
c=stage_colors['filt'], lw=lw['filt'])
plot_line(snip_axes[0, 0], t_noise, noise_data['snip_filt'][:, 0],
*snip_axes[0, 1].get_ylim(), c=stage_colors['filt'], lw=lw['filt'])
# Plot envelope snippets:
plot_snippets(snip_axes[1, 1:], t_song, song_snip['snip_env'],
ymin=0, c=colors['env'], lw=lw['env'])
plot_line(snip_axes[1, 0], t_noise, noise_snip['snip_env'][:, 0],
*snip_axes[1, 1].get_ylim(), c=colors['env'], lw=lw['env'])
plot_snippets(snip_axes[1, 1:], t_song, song_data['snip_env'],
ymin=0, c=stage_colors['env'], lw=lw['env'])
plot_line(snip_axes[1, 0], t_noise, noise_data['snip_env'][:, 0],
*snip_axes[1, 1].get_ylim(), c=stage_colors['env'], lw=lw['env'])
# Plot logarithmic snippets:
plot_snippets(snip_axes[2, 1:], t_song, song_snip['snip_log'],
c=colors['log'], lw=lw['log'])
plot_line(snip_axes[2, 0], t_noise, noise_snip['snip_log'][:, 0],
*snip_axes[2, 1].get_ylim(), c=colors['log'], lw=lw['log'])
plot_snippets(snip_axes[2, 1:], t_song, song_data['snip_log'],
c=stage_colors['log'], lw=lw['log'])
plot_line(snip_axes[2, 0], t_noise, noise_data['snip_log'][:, 0],
*snip_axes[2, 1].get_ylim(), c=stage_colors['log'], lw=lw['log'])
# Plot invariant snippets:
plot_snippets(snip_axes[3, 1:], t_song, song_snip['snip_inv'],
c=colors['inv'], lw=lw['inv'])
plot_line(snip_axes[3, 0], t_noise, noise_snip['snip_inv'][:, 0],
*snip_axes[3, 1].get_ylim(), c=colors['inv'], lw=lw['inv'])
plot_snippets(snip_axes[3, 1:], t_song, song_data['snip_inv'],
c=stage_colors['inv'], lw=lw['inv'])
plot_line(snip_axes[3, 0], t_noise, noise_data['snip_inv'][:, 0],
*snip_axes[3, 1].get_ylim(), c=stage_colors['inv'], lw=lw['inv'])
# Plot kernel response snippets:
all_handles = plot_snippets(snip_axes[4, 1:], t_song, song_snip['snip_conv'],
c=colors['conv'], lw=lw['conv'])
all_handles = plot_snippets(snip_axes[4, 1:], t_song, song_data['snip_conv'],
c=stage_colors['conv'], lw=lw['conv'])
for i, handles in enumerate(all_handles):
assign_colors(handles, config['k_specs'][:, 0], conv_colors)
reorder_by_sd(handles, song_snip['snip_conv'][..., i])
handles = plot_line(snip_axes[4, 0], t_noise, noise_snip['snip_conv'][:, 0],
*snip_axes[4, 1].get_ylim(), c=colors['conv'], lw=lw['conv'])
assign_colors(handles, config['k_specs'][:, 0], conv_colors)
reorder_by_sd(handles, noise_snip['snip_conv'][:, 0])
assign_colors(handles, config['k_specs'][:, 0], kern_colors['conv'])
reorder_by_sd(handles, song_data['snip_conv'][..., i])
handles = plot_line(snip_axes[4, 0], t_noise, noise_data['snip_conv'][:, 0],
*snip_axes[4, 1].get_ylim(), c=stage_colors['conv'], lw=lw['conv'])
assign_colors(handles, config['k_specs'][:, 0], kern_colors['conv'])
reorder_by_sd(handles, noise_data['snip_conv'][:, 0])
# Plot feature snippets:
all_handles = plot_snippets(snip_axes[5, 1:], t_song, song_snip['snip_feat'],
ymin=0, ymax=1, c=colors['feat'], lw=lw['feat'])
all_handles = plot_snippets(snip_axes[5, 1:], t_song, song_data['snip_feat'],
ymin=0, ymax=1, c=stage_colors['feat'], lw=lw['feat'])
for i, handles in enumerate(all_handles):
assign_colors(handles, config['k_specs'][:, 0], feat_colors)
reorder_by_sd(handles, song_snip['snip_feat'][..., i])
handles = plot_line(snip_axes[5, 0], t_noise, noise_snip['snip_feat'][:, 0],
ymin=0, ymax=1, c=colors['feat'], lw=lw['feat'])
assign_colors(handles, config['k_specs'][:, 0], feat_colors)
reorder_by_sd(handles, noise_snip['snip_feat'][:, 0])
del song_snip, noise_snip
assign_colors(handles, config['k_specs'][:, 0], kern_colors['feat'])
reorder_by_sd(handles, song_data['snip_feat'][..., i])
handles = plot_line(snip_axes[5, 0], t_noise, noise_data['snip_feat'][:, 0],
ymin=0, ymax=1, c=stage_colors['feat'], lw=lw['feat'])
assign_colors(handles, config['k_specs'][:, 0], kern_colors['feat'])
reorder_by_sd(handles, noise_data['snip_feat'][:, 0])
# Remember saturation points:
crit_inds, crit_dists = {}, {}
# Unnormed measures:
# Plot analysis results:
leg_handles = []
for stage in stages:
# Plot average intensity measure across recordings:
curve = plot_curves(big_axes[0], dists, data[f'mean_{stage}'],
c=colors[stage], lw=lw['big'],
fill_kwargs=dict(color=colors[stage], alpha=0.25))
# # Indicate saturation point:
# if stage in ['log', 'inv', 'conv', 'feat']:
# ind = get_saturation(curve, **plateau_settings)[1]
# dist = dists[ind]
# big_axes[0].plot(dist, 0, c='w', alpha=1, zorder=5.5, **plateau_dot_kwargs,
# transform=big_axes[0].get_xaxis_transform())
# big_axes[0].plot(dist, 0, mfc=colors[stage], mec='k', alpha=0.75, zorder=6, **plateau_dot_kwargs,
# transform=big_axes[0].get_xaxis_transform())
# big_axes[0].vlines(dist, big_axes[0].get_ylim()[0], curve[ind],
# color=colors[stage], **plateau_line_kwargs)
# # Log saturation point:
# crit_inds[stage] = ind
# crit_dists[stage] = dist
del data
mkey = f'measure_{stage}'
measure = song_data[mkey]
color = stage_colors[stage]
# Noise baseline-related measures:
data, _ = load_data(base_path, files='scales', keywords='mean')
if reduce_kernels:
data = reduce_kernel_set(data, kern_inds, keyword='mean')
for stage in stages:
# Plot average intensity measure across recordings:
curve = plot_curves(big_axes[1], dists, data[f'mean_{stage}'],
c=colors[stage], lw=lw['big'],
fill_kwargs=dict(color=colors[stage], alpha=0.25))
# Indicate saturation point:
# if stage in ['log', 'inv', 'conv', 'feat']:
# ind, dist = crit_inds[stage], crit_dists[stage]
# big_axes[1].plot(dist, 0, c='w', alpha=1, zorder=5.5, **plateau_dot_kwargs,
# transform=big_axes[1].get_xaxis_transform())
# big_axes[1].plot(dist, 0, mfc=colors[stage], mec='k', alpha=0.75, zorder=6, **plateau_dot_kwargs,
# transform=big_axes[1].get_xaxis_transform())
# big_axes[1].vlines(dist, big_axes[1].get_ylim()[0], curve[ind],
# color=colors[stage], **plateau_line_kwargs)
del data
## UNNORMALIZED MEASURE:
# Min-max normalized measures:
data, _ = load_data(range_path, files='scales', keywords='mean')
if reduce_kernels:
data = reduce_kernel_set(data, kern_inds, keyword='mean')
for stage in stages:
# Plot average intensity measure across recordings:
curve = plot_curves(big_axes[2], dists, data[f'mean_{stage}'],
c=colors[stage], lw=lw['big'],
fill_kwargs=dict(color=colors[stage], alpha=0.25))
# Plot single raw intensity curve (median where necessary):
handles, curve = plot_curves(raw_axes[0], scales, measure, c=color, lw=lw['single'])
# # Indicate saturation point:
# if stage in ['log', 'inv', 'conv', 'feat']:
# ind, dist = crit_inds[stage], crit_dists[stage]
# big_axes[2].plot(dist, 0, c='w', alpha=1, zorder=5.5, **plateau_dot_kwargs,
# transform=big_axes[2].get_xaxis_transform())
# big_axes[2].plot(dist, 0, mfc=colors[stage], mec='k', alpha=0.75, zorder=6, **plateau_dot_kwargs,
# transform=big_axes[2].get_xaxis_transform())
# big_axes[2].vlines(dist, big_axes[2].get_ylim()[0], curve[ind],
# color=colors[stage], **plateau_line_kwargs)
del data
# Add stage-specific proxy legend artist:
leg_handles.append(raw_axes[0].plot([], [], c=color, label=leg_labels[stage])[0])
# Plot curve swarm:
if stage == 'feat':
# Sync y-limits:
ylimits(measure, raw_axes[1], minval=0, pad=0.05)
raw_inset.set_ylim(raw_axes[1].get_ylim())
# Plot swarm:
handles = raw_axes[1].plot(scales, measure, lw=lw['swarm'])
assign_colors(handles, config['k_specs'][:, 0], kern_colors[stage])
reorder_by_sd(handles, measure)
# Plot distribution of saturation levels:
line_kwargs = dist_line_kwargs | dict(c=color)
fill_kwargs = dist_fill_kwargs | dict(color=color)
y_dist(raw_inset, measure[-1], nbins=75, log=False,
line_kwargs=line_kwargs, fill_kwargs=fill_kwargs)
## NORMALIZED MEASURE:
# Relate to noise baseline:
measure = divide_by_zero(song_data[mkey], noise_data[mkey].mean(axis=0))
# Plot single baseline-normalized intensity curve (median where necessary):
handles, curve = plot_curves(base_axes[0], scales, measure, c=color, lw=lw['single'])
# Plot curve swarm:
if stage in ['conv', 'feat']:
i0, i1 = (1, 0) if stage == 'conv' else (2, 1)
# Sync y-limits:
ylimits(measure, base_axes[i0], minval=0.9, pad=0.05)
base_insets[i1].set_ylim(base_axes[i0].get_ylim())
# Plot swarm:
handles = base_axes[i0].plot(scales, measure, lw=lw['swarm'])
assign_colors(handles, config['k_specs'][:, 0], kern_colors[stage])
reorder_by_sd(handles, measure)
# Plot distribution of saturation levels:
line_kwargs = dist_line_kwargs | dict(c=color)
fill_kwargs = dist_fill_kwargs | dict(color=color)
y_dist(base_insets[i1], measure[-1], nbins=100, log=True,
line_kwargs=line_kwargs, fill_kwargs=fill_kwargs)
# Posthoc adjustments:
raw_axes[0].set_ylim(top=100)
base_axes[0].set_ylim(1, 100)
base_axes[1].set_ylim(bottom=1)
base_insets[0].set_ylim(bottom=1)
base_axes[2].set_ylim(bottom=1)
base_insets[1].set_ylim(bottom=1)
# Add secondary x-axes:
for subfig in [raw_subfig, base_subfig]:
dual_ax = subfig.add_subplot(inset_ax_bounds)
dual_ax.set_xlim(scales[0], scales[-1])
dual_ax.set_xscale('log')
dual_ax.tick_params(axis='x', which='minor', bottom=False)
dual_ax.tick_params(axis='x', which='major', labelrotation=45)
dual_ax.set_xticks(scales, dists)
hide_axis(dual_ax, 'left')
xlabel(dual_ax, xlabels['low'], transform=subfig.transSubfigure, **xlab_low_kwargs)
# Add legend to first analysis axis:
legend = raw_axes[0].legend(handles=leg_handles, **leg_kwargs)
[handle.set_lw(lw['legend']) for handle in legend.get_lines()]
# Save graph:
if save_path is not None:

View File

@@ -56,7 +56,6 @@ save_path = '../figures/fig_invariance_full.pdf'
# ANALYSIS SETTINGS:
exclude_zero = True
thresh_rel = np.array([0, 0.5, 1, 1.5, 2, 2.5, 3])[4]
percentiles = np.array([0, 100])
scale_subset_kwargs = dict(
combis=[['measure'], stages],
)

View File

@@ -8,11 +8,11 @@ from IPython import embed
# General:
search_target = '*'
mode = ['song', 'noise'][1]
mode = ['song', 'noise'][0]
input_folder = f'../data/field/raw/{mode}/'
output_folder = f'../data/field/processed/{mode}/'
stages = ['raw', 'norm']
if True:
if False:
# Overwrites edited:
stages.append('songs')

View File

@@ -1,7 +1,9 @@
import numpy as np
import matplotlib.pyplot as plt
from thunderhopper.modeltools import load_data, save_data
from thunderhopper.filetools import search_files, crop_paths
from thunderhopper.filtertools import find_kern_specs
from thunderhopper.filters import sosfilter
from thunderhopper.model import process_signal
from IPython import embed
@@ -13,31 +15,24 @@ example_file = dict(
)[mode]
search_path = f'../data/field/processed/{mode}/'
data_paths = search_files('*', ext='npz', dir=search_path)
ref_path = '../data/inv/field/ref_measures.npz'
thresh_path = '../data/inv/field/thresholds.npz'
stages = ['raw', 'filt', 'env', 'log', 'inv', 'conv', 'feat']
pre_stages = stages[:-1]
save_path = f'../data/inv/field/{mode}/'
# ANALYSIS SETTINGS:
distances = np.load('../data/field/recording_distances.npy')[::-1]
thresh_rel = 0.5
thresh_rel = np.array([0, 0.5, 1, 1.5, 2, 2.5, 3])
init_scale = 10000
# SUBSET SETTINGS:
kernels = np.array([
[1, 0.002],
[-1, 0.002],
[2, 0.004],
[-2, 0.004],
[3, 0.032],
[-3, 0.032]
])
kernels = None
types = None#np.array([-1])
sigmas = None#np.array([0.001, 0.002, 0.004, 0.008, 0.016, 0.032])
types = None
sigmas = None
# PREPARATION:
if thresh_rel is not None:
# Get threshold values from pure-noise response SD:
thresh_abs = np.load(ref_path)['conv'] * thresh_rel
thresh_data = dict(np.load(thresh_path))
thresh_abs = thresh_rel[:, None] * thresh_data['sds'][None, :]
# EXECUTION:
for data_path, name in zip(data_paths, crop_paths(data_paths)):
@@ -48,9 +43,8 @@ for data_path, name in zip(data_paths, crop_paths(data_paths)):
data, config = load_data(data_path, files='raw')
song, rate = data['raw'], config['rate']
if thresh_rel is not None:
# Set kernel-specific thresholds:
config['feat_thresh'] = thresh_abs
# Sort max to min distance:
song = song[:, ::-1] * init_scale
# Reduce to kernel subset:
if any(var is not None for var in [kernels, types, sigmas]):
@@ -58,7 +52,7 @@ for data_path, name in zip(data_paths, crop_paths(data_paths)):
config['kernels'] = config['kernels'][:, kern_inds]
config['k_specs'] = config['k_specs'][kern_inds, :]
config['k_props'] = [config['k_props'][i] for i in kern_inds]
config['feat_thresh'] = config['feat_thresh'][kern_inds]
thresh_abs = thresh_abs[:, kern_inds]
# Get song segment to be analyzed:
time = np.arange(song.shape[0]) / rate
@@ -66,37 +60,81 @@ for data_path, name in zip(data_paths, crop_paths(data_paths)):
segment = (time >= start) & (time <= end)
# Prepare storage:
measures = {}
shape = (distances.size, config['k_specs'].shape[0], thresh_rel.size)
measures = dict(measure_feat=np.zeros(shape, dtype=float))
if save_detailed:
snippets = {}
shape = (song.shape[0], config['k_specs'].shape[0], distances.size, thresh_rel.size)
snippets = dict(snip_feat=np.zeros(shape, dtype=float))
# Process snippet:
signals, rates = process_signal(config, returns=stages, signal=song, rate=rate)
for stage in stages:
# Sort largest to smallest distance:
signals[stage] = signals[stage][..., ::-1]
# Process snippet (excluding features):
signals, rates = process_signal(config, returns=pre_stages, signal=song, rate=rate)
# Store results:
for stage in stages:
# Log intensity measures:
# Store non-feature results:
for stage in pre_stages:
mkey = f'measure_{stage}'
if stage == 'feat':
measures[mkey] = signals[stage][segment, ...].mean(axis=0)
else:
measures[mkey] = signals[stage][segment, ...].std(axis=0)
if measures[mkey].ndim == 2:
# Make shape (distances, kernels):
# Log intensity measures:
measures[mkey] = signals[stage][segment, ...].std(axis=0)
if stage == 'conv':
# Make shape (distances, kernels) for consistency:
measures[mkey] = np.moveaxis(measures[mkey], 1, 0)
# Log optional snippet data:
if save_detailed:
# Log optional snippet data:
snippets[f'snip_{stage}'] = signals[stage]
conv = signals['conv']
# Execute piecewise per threshold:
for i, thresholds in enumerate(thresh_abs):
# Execute piecewise per distance:
for j in range(conv.shape[-1]):
feat = sosfilter((conv[:, :, j] > thresholds).astype(float),
rate, config['feat_fcut'], 'lp',
padtype='fixed', padlen=config['padlen'])
# Log intensity measure:
measure = feat[segment, ...].mean(axis=0)
measures['measure_feat'][j, :, i] = measure
if save_detailed:
# Log optional snippet data:
snippets['snip_feat'][:, :, j, i] = feat
# # Log intensity measure, ensuring shape (distances, kernels, thresholds):
# measures['measure_feat'][:, :, i] = np.moveaxis(feat[segment, ...].mean(axis=0), 1, 0)
# if save_detailed:
# # Log optional snippet data:
# snippets['snip_feat'][:, :, :, i] = feat
# thresholds = thresholds[None, :, None]
# embed()
# # Finalize processing:
# feat = sosfilter((signals['conv'] > thresholds).astype(float),
# rate, config['feat_fcut'], 'lp',
# padtype='fixed', padlen=config['padlen'])
# if i == thresholds.shape[0] - 1:
# fig, axes = plt.subplots(1, 8, sharex=True, sharey=True, figsize=(16, 9))
# for j, ax in enumerate(axes):
# ax.plot(time, feat[..., j])
# plt.show()
# embed()
# # Log intensity measure, ensuring shape (distances, kernels, thresholds):
# measures['measure_feat'][:, :, i] = np.moveaxis(feat[segment, ...].mean(axis=0), 1, 0)
# if save_detailed:
# # Log optional snippet data:
# snippets['snip_feat'][:, :, :, i] = feat
# Save analysis results:
if save_path is not None:
data = dict(
distances=distances,
thresh_rel=thresh_rel,
thresh_abs=thresh_abs,
)
data.update(measures)
if save_detailed:

View File

@@ -12,8 +12,8 @@ from IPython import embed
target_species = [
# 'Chorthippus_biguttulus',
'Chorthippus_mollis',
'Chrysochraon_dispar',
'Euchorthippus_declivus',
# 'Chrysochraon_dispar',
# 'Euchorthippus_declivus',
'Gomphocerippus_rufus',
# 'Omocestus_rufipes',
# 'Pseudochorthippus_parallelus',

View File

@@ -1,4 +1,5 @@
import numpy as np
import matplotlib.pyplot as plt
from thunderhopper.filters import sosfilter
from thunderhopper.model import convolve_kernels, process_signal
from thunderhopper.modeltools import load_data
@@ -54,7 +55,12 @@ elif mode == 'short':
conv = convolve_kernels(inv, config['kernels'], config['k_specs'])
elif mode == 'field':
starter = starter[:, channels].ravel(order='F')
conv = process_signal(config, 'conv', signal=starter, rate=config['rate'])[0]['conv']
conv = process_signal(config, 'conv', signal=starter, rate=config['rate'])[0]['conv']
# fig, (ax1, ax2) = plt.subplots(2, 1, sharex=True)
# ax1.plot(starter)
# ax2.plot(conv)
# plt.show()
# embed()
# Get baseline kernel response SDs:
sds = conv[segment, :].std(axis=0)

28
python/temp_BS.py Normal file
View File

@@ -0,0 +1,28 @@
import numpy as np
import matplotlib.pyplot as plt
from thunderhopper.modeltools import load_data
from thunderhopper.filetools import search_files
from thunderhopper.model import process_signal
paths = search_files('Pseudochorthippus_parallelus_micarray-short_JJ_20240815T160355-20240815T160755-1m10s690ms-1m13s614ms', dir='../data/field/processed/song/')
thresh_rel = np.array([0, 0.5, 1, 1.5, 2, 2.5, 3])[-1]
thresh_abs = np.load('../data/inv/field/thresholds.npz')['sds'] * thresh_rel
for path in paths:
print(f'Processing {path}')
data, config = load_data(path, files='raw')
config['feat_thresh'] = thresh_abs
song, rate = data['raw'], config['rate']
time = np.arange(song.shape[0]) / rate
start, end = data['songs_0'].ravel()
segment = (time >= start) & (time <= end)
signals, rates = process_signal(config, 'feat', signal=song, rate=rate)
feat = signals['feat']
fig, axes = plt.subplots(1, 8, sharex=True, sharey=True, figsize=(16, 9))
for i, ax in enumerate(axes):
ax.plot(feat[..., i])
plt.show()